csb.s 438 B

123456789101112131415161718192021222324252627282930
  1. .define .csb4
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. .csb4:
  8. ! case descriptor in a0
  9. ! index in d0
  10. move.l (a0)+,a1 ! default jump address
  11. move.l (a0)+,d1 ! # entries
  12. beq 2f
  13. sub.l #1,d1
  14. 1:
  15. cmp.l (a0)+,d0
  16. beq 3f
  17. tst.l (a0)+ ! skip jump address
  18. dbf d1,1b
  19. 2:
  20. move.l a1,d1 ! default jump address
  21. bne 4f
  22. move.l #ECASE,-(sp)
  23. jmp .fatal
  24. 3:
  25. move.l (a0)+,a1 ! get jump address
  26. 4:
  27. move.l a1,-(sp)
  28. rts
  29. .align 2