dll.s 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. .file "dll.c"
  2. #NO_APP
  3. .text
  4. tigcc_compiled.:
  5. #APP
  6. .set _A_LINE,0xA000
  7. #NO_APP
  8. .section .rodata.__unalignedstr,"dmu"
  9. .LC0:
  10. .ascii "DLL\0\370\0"
  11. .text
  12. .even
  13. .globl LoadDLL
  14. LoadDLL:
  15. link.w %a6,#-12
  16. movm.l #0x1f3c,-(%sp)
  17. move.l %a0,%d7
  18. move.w %d1,%d6
  19. move.w %d2,%d5
  20. clr.w -10(%a6)
  21. clr.w %d4
  22. move.l #1145850912,-8(%a6)
  23. move.l %d0,-4(%a6)
  24. #APP
  25. bsr 0f; 0:move.l (%sp)+,%d3
  26. #NO_APP
  27. lea __get_hw_version,%a5
  28. jbsr (%a5)
  29. cmp.w #2,%d0
  30. jbne .L2
  31. moveq.l #1,%d1
  32. cmp.l #262143,%d3
  33. jbls .L1
  34. .L2:
  35. tst.l __DLL_body_ptr
  36. jbeq .L3
  37. moveq.l #5,%d1
  38. jbra .L1
  39. .even
  40. .L3:
  41. move.l 200.w,%a0
  42. move.w #2,-(%sp)
  43. clr.l -(%sp)
  44. move.l 432(%a0),%a0
  45. jbsr (%a0)
  46. move.l %a0,%a4
  47. addq.l #6,%sp
  48. .L4:
  49. move.l 200.w,%a0
  50. move.l %d7,-(%sp)
  51. move.l %a4,-(%sp)
  52. move.l 2500(%a0),%a0
  53. jbsr (%a0)
  54. addq.l #8,%sp
  55. tst.w %d0
  56. jbne .L6
  57. move.w 12(%a4),%d1
  58. jbeq .L6
  59. move.b 10(%a4),%d0
  60. btst #2,%d0
  61. jbne .L6
  62. btst #1,%d0
  63. jbne .L8
  64. move.l 200.w,%a0
  65. move.w %d1,-(%sp)
  66. move.l 620(%a0),%a0
  67. jbsr (%a0)
  68. addq.l #2,%sp
  69. tst.w %d0
  70. jbne .L6
  71. .L8:
  72. move.l 200.w,%a0
  73. move.w 12(%a4),-(%sp)
  74. move.l 600(%a0),%a0
  75. jbsr (%a0)
  76. move.l %a0,%a3
  77. move.w (%a0),%d3
  78. addq.w #2,%d3
  79. move.l 200.w,%a0
  80. pea 5.w
  81. pea .LC0
  82. clr.l %d0
  83. move.w %d3,%d0
  84. pea -5(%a3,%d0.l)
  85. move.l 2496(%a0),%a0
  86. jbsr (%a0)
  87. lea (14,%sp),%sp
  88. tst.w %d0
  89. jbne .L6
  90. clr.w -10(%a6)
  91. lea (2,%a3),%a2
  92. jbra .L10
  93. .even
  94. .L19:
  95. move.l 200.w,%a0
  96. pea 8.w
  97. pea -8(%a6)
  98. move.l %a2,-(%sp)
  99. move.l 2496(%a0),%a0
  100. jbsr (%a0)
  101. lea (12,%sp),%sp
  102. tst.w %d0
  103. jbne .L12
  104. cmp.w 8(%a2),%d6
  105. jbne .L17
  106. cmp.w 10(%a2),%d5
  107. jbls .L16
  108. .L17:
  109. moveq.l #1,%d4
  110. jbra .L12
  111. .even
  112. .L16:
  113. move.w %a2,%d0
  114. sub.w %a3,%d0
  115. move.w %d0,-10(%a6)
  116. clr.w %d4
  117. .L12:
  118. addq.l #2,%a2
  119. .L10:
  120. clr.l %d0
  121. move.w %d3,%d0
  122. lea -1(%a3,%d0.l),%a0
  123. cmp.l %a2,%a0
  124. jbls .L11
  125. tst.w -10(%a6)
  126. jbeq .L19
  127. .L11:
  128. tst.w -10(%a6)
  129. jbne .L5
  130. .L6:
  131. move.l 200.w,%a0
  132. move.l 436(%a0),%a0
  133. jbsr (%a0)
  134. move.l %a0,%a4
  135. cmp.w #0,%a0
  136. jbne .L4
  137. .L5:
  138. moveq.l #6,%d1
  139. tst.w %d4
  140. jbne .L1
  141. moveq.l #2,%d1
  142. cmp.w #0,%a4
  143. jbeq .L1
  144. move.l 200.w,%a0
  145. move.w 12(%a4),%a4
  146. move.w %a4,-(%sp)
  147. move.l 616(%a0),%a0
  148. jbsr (%a0)
  149. addq.l #2,%sp
  150. moveq.l #3,%d1
  151. tst.w %d0
  152. jbeq .L1
  153. move.l 200.w,%a2
  154. move.w %a4,-(%sp)
  155. move.l 600(%a2),%a0
  156. jbsr (%a0)
  157. addq.l #2,%sp
  158. lea (2,%a0),%a3
  159. move.w (%a3),%d3
  160. addq.w #2,%d3
  161. and.l #0xFFFF,%d3
  162. move.l %d3,-(%sp)
  163. move.l 648(%a2),%a0
  164. jbsr (%a0)
  165. move.l %a0,%d0
  166. move.l %a0,__DLL_body_ptr
  167. addq.l #4,%sp
  168. move.l 200.w,%a0
  169. tst.l %d0
  170. jbne .L25
  171. move.w %a4,-(%sp)
  172. move.l 636(%a0),%a0
  173. jbsr (%a0)
  174. moveq.l #4,%d1
  175. addq.l #2,%sp
  176. jbra .L1
  177. .even
  178. .L25:
  179. move.l %d3,-(%sp)
  180. move.l %a3,-(%sp)
  181. move.l %d0,-(%sp)
  182. move.l 2472(%a0),%a0
  183. jbsr (%a0)
  184. move.l 200.w,%a2
  185. jbsr (%a5)
  186. move.l __DLL_body_ptr,%a0
  187. lea -1(%a0,%d3.l),%a1
  188. cmp.w #2,%d0
  189. jbne .L27
  190. add.l %d3,%a0
  191. move.l #262143,%a1
  192. add.l %a0,%a1
  193. .L27:
  194. move.l %a1,-(%sp)
  195. jbsr (%a5)
  196. move.l __DLL_body_ptr,%a0
  197. move.l 1384(%a2),%a2
  198. move.l #262146,%a1
  199. add.l %a0,%a1
  200. cmp.w #2,%d0
  201. jbeq .L29
  202. lea (2,%a0),%a1
  203. .L29:
  204. move.l %a1,-(%sp)
  205. jbsr (%a2)
  206. clr.l %d0
  207. move.w -10(%a6),%d0
  208. add.l __DLL_body_ptr,%d0
  209. subq.l #2,%d0
  210. move.l %d0,__DLL_interface_ptr
  211. move.l 200.w,%a0
  212. move.w %a4,-(%sp)
  213. move.l 636(%a0),%a0
  214. jbsr (%a0)
  215. clr.w %d1
  216. lea (22,%sp),%sp
  217. .L1:
  218. move.w %d1,%d0
  219. movm.l -48(%a6),#0x3cf8
  220. unlk %a6
  221. rts
  222. .even
  223. .globl UnloadDLL
  224. UnloadDLL:
  225. move.l __DLL_body_ptr,%d0
  226. jbeq .L30
  227. move.l 200.w,%a0
  228. move.l %d0,-(%sp)
  229. move.l 652(%a0),%a0
  230. jbsr (%a0)
  231. clr.l __DLL_body_ptr
  232. clr.l __DLL_interface_ptr
  233. addq.l #4,%sp
  234. .L30:
  235. rts
  236. nop
  237. .globl __DLL_interface_ptr
  238. .text
  239. .even
  240. __DLL_interface_ptr:
  241. .long 0
  242. .globl __DLL_body_ptr
  243. .even
  244. __DLL_body_ptr:
  245. .long 0