inn.s 515 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. .define .inn
  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: bit number
  12. ! stack: result (out)
  13. .inn:
  14. pop ix
  15. pop de
  16. add hl,sp
  17. ld b,h
  18. ld c,l
  19. ex de,hl
  20. ld a,l
  21. sra h
  22. jp m,0f
  23. rr l
  24. sra h
  25. rr l
  26. sra h
  27. rr l
  28. add hl,sp
  29. push hl
  30. or a ! clear carry
  31. sbc hl,de
  32. pop hl
  33. jp m,1f
  34. 0: xor a
  35. jr 4f
  36. 1: ld e,(hl)
  37. and 7
  38. jr 2f
  39. 3: rrc e
  40. dec a
  41. 2: jr nz,3b
  42. ld a,e
  43. and 1
  44. 4:
  45. ld e,a
  46. ld d,0
  47. ld h,b
  48. ld l,c
  49. ld sp,hl
  50. push de
  51. jp (ix)