mtask2250.asm 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. $mod851
  2. $include (bios.inc)
  3. $include (const.inc)
  4. state EQU 7fh
  5. tmp EQU 7eh
  6. org 8000h
  7. ljmp start
  8. org 800bh
  9. t0int: ljmp task_switch
  10. org 8060h
  11. start: clr EA
  12. mov intvec,#80h
  13. mov A,TMOD
  14. anl A,#11111000b
  15. orl A,#1
  16. mov TMOD,A ; T0 mode = 1
  17. mov TL0,#0
  18. mov TH0,#0ffh
  19. mov state,#00h
  20. setb TR0 ; T0 enable
  21. setb ET0 ; T0 int enable
  22. setb EA ; enable int
  23. task1: xrl P1,#0fh
  24. mov A,#0ffh
  25. t1l1: djnz Acc,t1l1
  26. mov A,#0ffh
  27. t1l2: djnz Acc,t1l2
  28. mov A,#0ffh
  29. t1l3: djnz Acc,t1l3
  30. mov A,#0ffh
  31. t1l4: djnz Acc,t1l4
  32. mov A,#0ffh
  33. t1l5: djnz Acc,t1l5
  34. mov A,#0ffh
  35. t1l6: djnz Acc,t1l6
  36. mov A,#0ffh
  37. t1l7: djnz Acc,t1l7
  38. mov A,#0ffh
  39. t1l8: djnz Acc,t1l8
  40. mov A,#0ffh
  41. t1l9: djnz Acc,t1l9
  42. mov A,#0ffh
  43. t1l10: djnz Acc,t1l10
  44. mov A,#0ffh
  45. t1l11: djnz Acc,t1l11
  46. mov A,#0ffh
  47. t1l12: djnz Acc,t1l12
  48. mov A,#0ffh
  49. t1l13: djnz Acc,t1l13
  50. mov A,#0ffh
  51. t1l14: djnz Acc,t1l14
  52. mov A,#0ffh
  53. t1l15: djnz Acc,t1l15
  54. mov A,#0ffh
  55. t1l16: djnz Acc,t1l16
  56. mov A,#0ffh
  57. t1l17: djnz Acc,t1l17
  58. sjmp task1
  59. task2: xrl P1,#0f0h
  60. mov A,#0ffh
  61. t2l1: djnz Acc,t2l1
  62. mov A,#0ffh
  63. t2l2: djnz Acc,t2l2
  64. mov A,#0ffh
  65. t2l3: djnz Acc,t2l3
  66. mov A,#0ffh
  67. t2l4: djnz Acc,t2l4
  68. mov A,#0ffh
  69. t2l5: djnz Acc,t2l5
  70. mov A,#0ffh
  71. t2l6: djnz Acc,t2l6
  72. sjmp task2
  73. delay: djnz Acc,delay
  74. ret
  75. ;========================================
  76. task_switch:
  77. push DPH
  78. push DPL
  79. push Acc
  80. mov A,state
  81. jz ts_go
  82. ljmp rev
  83. ts_go: pop Acc ; Acc
  84. mov DPTR,#t1inf
  85. movx @DPTR,A
  86. pop Acc ; DPL
  87. inc DPTR
  88. movx @DPTR,A
  89. pop Acc ; DPH
  90. inc DPTR
  91. movx @DPTR,A
  92. inc DPTR ; B
  93. mov A,B
  94. movx @DPTR,A
  95. inc DPTR ; PSW
  96. mov A,PSW
  97. movx @DPTR,A
  98. pop Acc ; PC
  99. inc DPTR
  100. movx @DPTR,A
  101. pop Acc
  102. inc DPTR
  103. movx @DPTR,A
  104. inc DPTR ; SP
  105. mov A,SP
  106. movx @DPTR,A
  107. inc DPTR ; adr: 00h
  108. mov A,R0
  109. movx @DPTR,A
  110. mov B,#6fh ; adr: 01h-6fh
  111. mov R0,#01h
  112. ts_l1: inc DPTR
  113. mov A,@R0
  114. movx @DPTR,A
  115. inc R0
  116. djnz B,ts_l1
  117. ;------------
  118. mov DPTR,#(t2inf_end-1)
  119. mov B,#6fh ; adr: 01-6f
  120. mov R0,#6fh
  121. ts_l2: movx A,@DPTR
  122. mov @R0,A
  123. dec R0
  124. lcall dec_dptr
  125. djnz B,ts_l2
  126. movx A,@DPTR
  127. mov R0,A ; adr: 00
  128. lcall dec_dptr ; SP
  129. movx A,@DPTR
  130. mov SP,A
  131. lcall dec_dptr ; PC
  132. movx A,@DPTR
  133. push Acc
  134. lcall dec_dptr
  135. movx A,@DPTR
  136. push Acc
  137. lcall dec_dptr ; PSW
  138. movx A,@DPTR
  139. mov PSW,A
  140. lcall dec_dptr ; B
  141. movx A,@DPTR
  142. mov B,A
  143. lcall dec_dptr ; DPH
  144. movx A,@DPTR
  145. push Acc
  146. lcall dec_dptr ; DPL
  147. movx A,@DPTR
  148. push Acc
  149. lcall dec_dptr ; Acc
  150. movx A,@DPTR
  151. pop DPL
  152. pop DPH
  153. mov state,#0ffh
  154. mov TL0,#0
  155. mov TH0,#0ffh
  156. reti
  157. ;-=-=-=-=-=-=-=-=-
  158. rev:
  159. pop Acc ; Acc
  160. mov DPTR,#t2inf
  161. movx @DPTR,A
  162. pop Acc ; DPL
  163. inc DPTR
  164. movx @DPTR,A
  165. pop Acc ; DPH
  166. inc DPTR
  167. movx @DPTR,A
  168. inc DPTR ; B
  169. mov A,B
  170. movx @DPTR,A
  171. inc DPTR ; PSW
  172. mov A,PSW
  173. movx @DPTR,A
  174. pop Acc ; PC
  175. inc DPTR
  176. movx @DPTR,A
  177. pop Acc
  178. inc DPTR
  179. movx @DPTR,A
  180. inc DPTR ; SP
  181. mov A,SP
  182. movx @DPTR,A
  183. inc DPTR ; adr: 00h
  184. mov A,R0
  185. movx @DPTR,A
  186. mov B,#6fh ; adr: 01h-6fh
  187. mov R0,#01h
  188. ts_l3: inc DPTR
  189. mov A,@R0
  190. movx @DPTR,A
  191. inc R0
  192. djnz B,ts_l3
  193. ;------------
  194. mov DPTR,#(t1inf_end-1)
  195. mov B,#6fh ; adr: 01-6f
  196. mov R0,#6fh
  197. ts_l4: movx A,@DPTR
  198. mov @R0,A
  199. dec R0
  200. lcall dec_dptr
  201. djnz B,ts_l4
  202. movx A,@DPTR
  203. mov R0,A ; adr: 00
  204. lcall dec_dptr ; SP
  205. movx A,@DPTR
  206. mov SP,A
  207. lcall dec_dptr ; PC
  208. movx A,@DPTR
  209. push Acc
  210. lcall dec_dptr
  211. movx A,@DPTR
  212. push Acc
  213. lcall dec_dptr ; PSW
  214. movx A,@DPTR
  215. mov PSW,A
  216. lcall dec_dptr ; B
  217. movx A,@DPTR
  218. mov B,A
  219. lcall dec_dptr ; DPH
  220. movx A,@DPTR
  221. push Acc
  222. lcall dec_dptr ; DPL
  223. movx A,@DPTR
  224. push Acc
  225. lcall dec_dptr ; Acc
  226. movx A,@DPTR
  227. pop DPL
  228. pop DPH
  229. mov state,#00h
  230. mov TL0,#0
  231. mov TH0,#0ffh
  232. reti
  233. ;========================================
  234. dec_dptr:
  235. xch A,DPL
  236. dec A
  237. cjne A,#0ffh,decdp_lab1
  238. dec DPH
  239. decdp_lab1:
  240. xch A,DPL
  241. ret
  242. ;========================================
  243. org 9000h
  244. t1inf:
  245. db 00 ; Acc
  246. db 00 ; DPL
  247. db 00 ; DPH
  248. db 00 ; B
  249. db 00 ; PSW
  250. dw 00 ; PC
  251. db 07 ; SP
  252. db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
  253. db 0,0,0,0,0,0,0,0 ; Stack
  254. db 0,0,0,0,0,0,0,0
  255. db 0,0,0,0,0,0,0,0
  256. db 0,0,0,0,0,0,0,0
  257. db 0,0,0,0,0,0,0,0
  258. db 0,0,0,0,0,0,0,0
  259. db 0,0,0,0,0,0,0,0
  260. db 0,0,0,0,0,0,0,0
  261. db 0,0,0,0,0,0,0,0
  262. db 0,0,0,0,0,0,0,0
  263. db 0,0,0,0,0,0,0,0
  264. db 0,0,0,0,0,0,0,0
  265. db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
  266. t1inf_end:
  267. t2inf:
  268. db 00 ; Acc
  269. db 00 ; DPL
  270. db 00 ; DPH
  271. db 00 ; B
  272. db 00 ; PSW
  273. dw task2 ; PC
  274. db 07 ; SP
  275. db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
  276. db 0,0,0,0,0,0,0,0 ; Stack
  277. db 0,0,0,0,0,0,0,0
  278. db 0,0,0,0,0,0,0,0
  279. db 0,0,0,0,0,0,0,0
  280. db 0,0,0,0,0,0,0,0
  281. db 0,0,0,0,0,0,0,0
  282. db 0,0,0,0,0,0,0,0
  283. db 0,0,0,0,0,0,0,0
  284. db 0,0,0,0,0,0,0,0
  285. db 0,0,0,0,0,0,0,0
  286. db 0,0,0,0,0,0,0,0
  287. db 0,0,0,0,0,0,0,0
  288. db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
  289. t2inf_end:
  290. END