set.s 507 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. .define .set
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! use .unimpld
  8. ! any size sets
  9. ! parameters:
  10. ! hl: size
  11. ! stack: bitnumber
  12. ! stack: result (out)
  13. .set:
  14. pop ix ! return address
  15. pop de ! bit number
  16. ld b,h
  17. ld c,l
  18. xor a
  19. 0: push af
  20. inc sp
  21. dec c
  22. jr nz,0b
  23. dec b
  24. jp p,0b
  25. ex de,hl
  26. ld a,l
  27. sra h
  28. jp m,.unimpld
  29. rr l
  30. srl h
  31. rr l
  32. srl h
  33. rr l
  34. push hl
  35. or a
  36. sbc hl,de
  37. pop hl
  38. jp p,.unimpld
  39. add hl,sp
  40. ld (hl),1
  41. and 7
  42. jr 1f
  43. 0: sla (hl)
  44. dec a
  45. 1: jr nz,0b
  46. jp (ix)