swi.s 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. .define _Swi, _Swix, _bbc_get, _bbc_vduw, _bbc_vdu
  2. .sect .text
  3. ! Swi(code, regpt)
  4. _Swi:
  5. ADR R11,_100
  6. LDR R10,[R11]
  7. LDR R9,[R12]
  8. AND R10,R10,#0xFF000000
  9. AND R9,R9,#0xFFFFFF
  10. ORR R10,R10,R9
  11. STR R10,[R11]
  12. LDR R11,[R12,#4] ! PT TO REGS
  13. STMFD R12<,{R4,R5,R6,R7}
  14. LDR R0,[R11,#0]
  15. LDR R1,[R11,#4]
  16. LDR R2,[R11,#8]
  17. LDR R3,[R11,#12]
  18. LDR R4,[R11,#16]
  19. LDR R5,[R11,#20]
  20. LDR R6,[R11,#24]
  21. LDR R7,[R11,#28]
  22. LDR R8,[R11,#32]
  23. LDR R9,[R11,#36]
  24. _100:
  25. SWI 0
  26. STR R0,[R11,#0]
  27. STR R1,[R11,#4]
  28. STR R2,[R11,#8]
  29. STR R3,[R11,#12]
  30. STR R4,[R11,#16]
  31. STR R5,[R11,#20]
  32. STR R6,[R11,#24]
  33. STR R7,[R11,#28]
  34. STR R8,[R11,#32]
  35. STR R9,[R11,#36]
  36. LDMFD R12<,{R4,R5,R6,R7}
  37. MOV.S R15,R14
  38. _Swix:
  39. ADR R11,_101
  40. LDR R10,[R11]
  41. LDR R9,[R12]
  42. AND R10,R10,#0xFF000000
  43. AND R9,R9,#0xFFFFFF
  44. ORR R10,R10,R9
  45. ORR R10,R10,#0x20000
  46. STR R10,[R11]
  47. LDR R11,[R12,#4]
  48. STMFD R12<,{R4,R5,R6,R7}
  49. LDR R0,[R11,#0]
  50. LDR R1,[R11,#4]
  51. LDR R2,[R11,#8]
  52. LDR R3,[R11,#12]
  53. LDR R4,[R11,#16]
  54. LDR R5,[R11,#20]
  55. LDR R6,[R11,#24]
  56. LDR R7,[R11,#28]
  57. LDR R8,[R11,#32]
  58. LDR R9,[R11,#36]
  59. _101:
  60. SWI 0
  61. STR R0,[R11,#0]
  62. STR R1,[R11,#4]
  63. STR R2,[R11,#8]
  64. STR R3,[R11,#12]
  65. STR R4,[R11,#16]
  66. STR R5,[R11,#20]
  67. STR R6,[R11,#24]
  68. STR R7,[R11,#28]
  69. STR R8,[R11,#32]
  70. STR R9,[R11,#36]
  71. MOV.VC R0, #0
  72. LDMFD R12<,{R4,R5,R6,R7}
  73. MOV.S R15,R14
  74. ! the rest is for Acorn compatibility
  75. _bbc_get:
  76. SWI 4 ! READC
  77. MOV.S R15,R14
  78. _bbc_vduw:
  79. LDR R0,[R12]
  80. SWI 0 !WRITEC
  81. MOV R0,R0,LSR #8
  82. SWI 0
  83. MOV.S R15,R14
  84. _bbc_vdu:
  85. LDR R0,[R12]
  86. SWI 0
  87. MOV.S R15,R14