26 lines
		
	
	
	
		
			389 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			26 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
 |