csa.s 481 B

1234567891011121314151617181920212223242526272829303132
  1. .define .csa4
  2. .define .csa
  3. .sect .text
  4. .sect .rom
  5. .sect .data
  6. .sect .bss
  7. ECASE=20
  8. .sect .text
  9. .csa4:
  10. .csa:
  11. ! jump table address in a0
  12. ! index in d0
  13. move.l (a0)+, a1 ! default address
  14. sub.l (a0)+, d0 ! index - lower bound
  15. blt 1f
  16. cmp.l (a0)+, d0 ! rel. index, upper - lower bound
  17. bgt 1f
  18. move.l (a0,d0.l*4), d1 ! jump address
  19. beq 1f
  20. move.l d1,a1
  21. jmp (a1)
  22. 1:
  23. move.l a1, d0
  24. beq 2f
  25. jmp (a1) ! jump to specified address
  26. 2:
  27. move.l #ECASE, -(sp)
  28. jmp (.fatal)
  29. .align 2