csa.s 563 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. .define .csa
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! this is not a subroutine, but just a
  8. ! piece of code that computes the jump-
  9. ! address and jumps to it.
  10. ! traps if resulting address is zero
  11. .csa:
  12. pop ix
  13. pop hl
  14. push bc
  15. ld c,(ix)
  16. ld b,(ix+1)
  17. ld e,(ix+2)
  18. ld d,(ix+3)
  19. xor a
  20. sbc hl,de
  21. jp m,1f
  22. ex de,hl
  23. ld l,(ix+4)
  24. ld h,(ix+5)
  25. xor a
  26. sbc hl,de
  27. jp m,1f
  28. ex de,hl
  29. add hl,hl
  30. ld de,6
  31. add hl,de
  32. ex de,hl
  33. add ix,de
  34. ld l,(ix)
  35. ld h,(ix+1)
  36. ld a,h
  37. or l
  38. jr nz,2f
  39. 1: ld a,b
  40. or c
  41. jr z,.trp.z
  42. ld l,c
  43. ld h,b
  44. 2: pop bc
  45. jp (hl)