csb.s 389 B

1234567891011121314151617181920212223242526
  1. .define csb
  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. csb:
  10. ld R3, 0(R1) !default pointer
  11. ld R0, 2(R1) !number of entries
  12. test R0
  13. jr EQ, 1f
  14. 3: inc R1, $4
  15. cp R2, 0(R1)
  16. jr EQ, 2f
  17. djnz R0, 3b
  18. 1: ld R1, R3 !default pointer
  19. jr 4f
  20. 2: ld R1, 2(R1)
  21. 4: test R1
  22. jr EQ, 5f
  23. jp 0(R1)
  24. 5: push *RR14, $ECASE
  25. jr fatal