12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- .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
|