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
 |