sar.s 591 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. .define .sar
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! use .mli2
  8. ! use .trp.z
  9. ! 2-byte descriptors
  10. ! any size array elements
  11. ! parameters:
  12. ! on stack
  13. ! uses .mli2
  14. ! adapted from .aar and .sts
  15. .sar:
  16. pop hl
  17. pop ix
  18. ex (sp),hl
  19. ld c,(ix+0)
  20. ld b,(ix+1)
  21. xor a
  22. sbc hl,bc
  23. ld c,(ix+4)
  24. ld b,(ix+5)
  25. ex de,hl
  26. call .mli2
  27. pop ix
  28. pop de
  29. add hl,de
  30. srl b ! bc contains #bytes to transfer
  31. rr c ! divide bc by 2
  32. jr nc,1f
  33. ld a,c
  34. or b
  35. jr nz,.trp.z
  36. pop bc
  37. ld (hl),c
  38. jp (ix)
  39. 1:
  40. pop de
  41. ld (hl),e
  42. inc hl
  43. ld (hl),d
  44. inc hl
  45. dec bc
  46. ld a,b
  47. or c
  48. jr nz,1b
  49. jp (ix)