csa.s 316 B

123456789101112131415161718192021222324
  1. .define csa
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. !R1 contains address of jump table
  8. !R2 contains case index
  9. csa:
  10. sub R2, 2(R1)
  11. jr LT, 1f
  12. cp R2, 4(R1)
  13. jr UGT, 1f
  14. sla R2
  15. add R1, R2
  16. ld R2, 06(R1)
  17. cp R2, $0
  18. jr EQ, 2f
  19. jp 0(R2)
  20. 1: ld R1, 0(R1)
  21. jp NE, 0(R1)
  22. 2: push *RR14, $ECASE
  23. jr fatal