94 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define _Swi, _Swix, _bbc_get, _bbc_vduw, _bbc_vdu
 | 
						|
.sect .text
 | 
						|
 | 
						|
! Swi(code, regpt)
 | 
						|
 | 
						|
_Swi:
 | 
						|
 ADR R11,_100
 | 
						|
 LDR R10,[R11]
 | 
						|
 LDR R9,[R12]
 | 
						|
 AND R10,R10,#0xFF000000
 | 
						|
 AND R9,R9,#0xFFFFFF
 | 
						|
 ORR R10,R10,R9
 | 
						|
 STR R10,[R11]
 | 
						|
 LDR R11,[R12,#4]  ! PT TO REGS
 | 
						|
 STMFD R12<,{R4,R5,R6,R7}
 | 
						|
 LDR R0,[R11,#0]
 | 
						|
 LDR R1,[R11,#4]
 | 
						|
 LDR R2,[R11,#8]
 | 
						|
 LDR R3,[R11,#12]
 | 
						|
 LDR R4,[R11,#16]
 | 
						|
 LDR R5,[R11,#20]
 | 
						|
 LDR R6,[R11,#24]
 | 
						|
 LDR R7,[R11,#28]
 | 
						|
 LDR R8,[R11,#32]
 | 
						|
 LDR R9,[R11,#36]
 | 
						|
_100:
 | 
						|
 SWI 0
 | 
						|
 STR R0,[R11,#0]
 | 
						|
 STR R1,[R11,#4]
 | 
						|
 STR R2,[R11,#8]
 | 
						|
 STR R3,[R11,#12]
 | 
						|
 STR R4,[R11,#16]
 | 
						|
 STR R5,[R11,#20]
 | 
						|
 STR R6,[R11,#24]
 | 
						|
 STR R7,[R11,#28]
 | 
						|
 STR R8,[R11,#32]
 | 
						|
 STR R9,[R11,#36]
 | 
						|
 LDMFD R12<,{R4,R5,R6,R7}
 | 
						|
 MOV.S R15,R14
 | 
						|
 
 | 
						|
_Swix:
 | 
						|
 ADR R11,_101
 | 
						|
 LDR R10,[R11]
 | 
						|
 LDR R9,[R12]
 | 
						|
 AND R10,R10,#0xFF000000
 | 
						|
 AND R9,R9,#0xFFFFFF
 | 
						|
 ORR R10,R10,R9
 | 
						|
 ORR R10,R10,#0x20000
 | 
						|
 STR R10,[R11]
 | 
						|
 LDR R11,[R12,#4]
 | 
						|
 STMFD R12<,{R4,R5,R6,R7}
 | 
						|
 LDR R0,[R11,#0]
 | 
						|
 LDR R1,[R11,#4]
 | 
						|
 LDR R2,[R11,#8]
 | 
						|
 LDR R3,[R11,#12]
 | 
						|
 LDR R4,[R11,#16]
 | 
						|
 LDR R5,[R11,#20]
 | 
						|
 LDR R6,[R11,#24]
 | 
						|
 LDR R7,[R11,#28]
 | 
						|
 LDR R8,[R11,#32]
 | 
						|
 LDR R9,[R11,#36]
 | 
						|
_101:
 | 
						|
 SWI 0
 | 
						|
 STR R0,[R11,#0]
 | 
						|
 STR R1,[R11,#4]
 | 
						|
 STR R2,[R11,#8]
 | 
						|
 STR R3,[R11,#12]
 | 
						|
 STR R4,[R11,#16]
 | 
						|
 STR R5,[R11,#20]
 | 
						|
 STR R6,[R11,#24]
 | 
						|
 STR R7,[R11,#28]
 | 
						|
 STR R8,[R11,#32]
 | 
						|
 STR R9,[R11,#36]
 | 
						|
 MOV.VC R0, #0
 | 
						|
 LDMFD R12<,{R4,R5,R6,R7}
 | 
						|
 MOV.S R15,R14
 | 
						|
 | 
						|
! the rest is for Acorn compatibility
 | 
						|
 | 
						|
_bbc_get:
 | 
						|
 SWI 4    ! READC
 | 
						|
 MOV.S R15,R14
 | 
						|
 | 
						|
_bbc_vduw:
 | 
						|
 LDR R0,[R12]
 | 
						|
 SWI 0    !WRITEC
 | 
						|
 MOV R0,R0,LSR #8
 | 
						|
 SWI 0
 | 
						|
 MOV.S R15,R14
 | 
						|
 | 
						|
_bbc_vdu:
 | 
						|
 LDR R0,[R12]
 | 
						|
 SWI 0
 | 
						|
 MOV.S R15,R14
 |