27 lines
389 B
ArmAsm
27 lines
389 B
ArmAsm
.define csb
|
|
.sect .text
|
|
.sect .rom
|
|
.sect .data
|
|
.sect .bss
|
|
.sect .text
|
|
|
|
!R1 contains address of jump table
|
|
!R2 contains case index
|
|
csb:
|
|
ld R3, 0(R1) !default pointer
|
|
ld R0, 2(R1) !number of entries
|
|
test R0
|
|
jr EQ, 1f
|
|
3: inc R1, $4
|
|
cp R2, 0(R1)
|
|
jr EQ, 2f
|
|
djnz R0, 3b
|
|
1: ld R1, R3 !default pointer
|
|
jr 4f
|
|
2: ld R1, 2(R1)
|
|
4: test R1
|
|
jr EQ, 5f
|
|
jp 0(R1)
|
|
5: push *RR14, $ECASE
|
|
jr fatal
|