sim710.scr
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:19k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * sim710.scr - Copyright (C) 1999 Richard Hirst
  3.  */
  4. /* Offsets from DSA, allow 128 elements of scatter/gather */
  5. ABSOLUTE dsa_select  = 0
  6. ABSOLUTE dsa_msgout  = 8
  7. ABSOLUTE dsa_cmnd    = 16
  8. ABSOLUTE dsa_status  = 24
  9. ABSOLUTE dsa_msgin   = 32
  10. ABSOLUTE dsa_datain  = 40 /* 8 * 128 = 1024 bytes */
  11. ABSOLUTE dsa_dataout = 1064 /* 8 * 128 = 1024 bytes */
  12. ABSOLUTE dsa_size     = 2088
  13. ABSOLUTE reselected_identify = 0
  14. ABSOLUTE msgin_buf = 0
  15. ABSOLUTE msg_reject = 0
  16. ABSOLUTE test1_src = 0
  17. ABSOLUTE test1_dst = 0
  18. /* Interrupt values passed back to driver */
  19. ABSOLUTE int_bad_msg1 = 0xab930006
  20. ABSOLUTE int_bad_msg2 = 0xab930007
  21. ABSOLUTE int_bad_msg3 = 0xab930008
  22. ABSOLUTE int_cmd_bad_phase = 0xab930009
  23. ABSOLUTE int_cmd_complete = 0xab93000a
  24. ABSOLUTE int_data_bad_phase = 0xab93000b
  25. ABSOLUTE int_msg_sdtr1 = 0xab93000c
  26. ABSOLUTE int_msg_sdtr2 = 0xab93000d
  27. ABSOLUTE int_msg_sdtr3 = 0xab93000e
  28. ABSOLUTE int_no_msgout1 = 0xab93000f
  29. ABSOLUTE int_no_msgout2 = 0xab930010
  30. ABSOLUTE int_no_msgout3 = 0xab930011
  31. ABSOLUTE int_not_cmd_complete = 0xab930012
  32. ABSOLUTE int_sel_no_ident = 0xab930013
  33. ABSOLUTE int_sel_not_cmd = 0xab930014
  34. ABSOLUTE int_status_not_msgin = 0xab930015
  35. ABSOLUTE int_resel_not_msgin = 0xab930016
  36. ABSOLUTE int_reselected = 0xab930017
  37. ABSOLUTE int_selected = 0xab930018
  38. ABSOLUTE int_disc1 = 0xab930019
  39. ABSOLUTE int_disc2 = 0xab93001a
  40. ABSOLUTE int_disc3 = 0xab93001b
  41. ABSOLUTE int_not_rej = 0xab93001c
  42. ABSOLUTE int_test1 = 0xab93001d
  43. /* Bit field settings used to record status in SCRATCH0 */
  44. ABSOLUTE had_select = 0x01
  45. ABSOLUTE had_msgout = 0x02
  46. ABSOLUTE had_cmdout = 0x04
  47. ABSOLUTE had_datain = 0x08
  48. ABSOLUTE had_dataout = 0x10
  49. ABSOLUTE had_status = 0x20
  50. ABSOLUTE had_msgin = 0x40
  51. ABSOLUTE had_extmsg = 0x80
  52. /* Bit field settings used to record status in SCRATCH1 */
  53. ABSOLUTE did_reject = 0x01
  54. /* These scripts are heavily based on the examples in the NCR 53C710
  55.  * Programmer's Guide (Preliminary).
  56.  */
  57. ENTRY do_select
  58. do_select:
  59. CLEAR TARGET
  60. ; Enable selection timer
  61. MOVE CTEST7 & 0xef TO CTEST7
  62. SELECT ATN FROM dsa_select, reselect
  63. JUMP get_status, WHEN STATUS
  64. ; Disable selection timer
  65. MOVE CTEST7 | 0x10 TO CTEST7
  66. MOVE SCRATCH0 | had_select TO SCRATCH0
  67. INT int_sel_no_ident, IF NOT MSG_OUT
  68. MOVE SCRATCH0 | had_msgout TO SCRATCH0
  69. MOVE FROM dsa_msgout, when MSG_OUT
  70. ENTRY done_ident
  71. done_ident:
  72. JUMP get_status, IF STATUS
  73. redo_msgin1:
  74. JUMP get_msgin1, WHEN MSG_IN
  75. INT int_sel_not_cmd, IF NOT CMD
  76. ENTRY resume_cmd
  77. resume_cmd:
  78. MOVE SCRATCH0 | had_cmdout TO SCRATCH0
  79. MOVE FROM dsa_cmnd, WHEN CMD
  80. ENTRY resume_pmm
  81. resume_pmm:
  82. redo_msgin2:
  83. JUMP get_msgin2, WHEN MSG_IN
  84. JUMP get_status, IF STATUS
  85. JUMP input_data, IF DATA_IN
  86. JUMP output_data, IF DATA_OUT
  87. INT int_cmd_bad_phase
  88. get_status:
  89. ; Disable selection timer
  90. MOVE CTEST7 | 0x10 TO CTEST7
  91. MOVE FROM dsa_status, WHEN STATUS
  92. INT int_status_not_msgin, WHEN NOT MSG_IN
  93. MOVE FROM dsa_msgin, WHEN MSG_IN
  94. INT int_not_cmd_complete, IF NOT 0x00
  95. CLEAR ACK
  96. ENTRY wait_disc_complete
  97. wait_disc_complete:
  98. WAIT DISCONNECT
  99. INT int_cmd_complete
  100. input_data:
  101. MOVE SCRATCH0 | had_datain TO SCRATCH0
  102. ENTRY patch_input_data
  103. patch_input_data:
  104. JUMP 0
  105. MOVE FROM dsa_datain+0x0000, WHEN DATA_IN
  106. MOVE FROM dsa_datain+0x0008, WHEN DATA_IN
  107. MOVE FROM dsa_datain+0x0010, WHEN DATA_IN
  108. MOVE FROM dsa_datain+0x0018, WHEN DATA_IN
  109. MOVE FROM dsa_datain+0x0020, WHEN DATA_IN
  110. MOVE FROM dsa_datain+0x0028, WHEN DATA_IN
  111. MOVE FROM dsa_datain+0x0030, WHEN DATA_IN
  112. MOVE FROM dsa_datain+0x0038, WHEN DATA_IN
  113. MOVE FROM dsa_datain+0x0040, WHEN DATA_IN
  114. MOVE FROM dsa_datain+0x0048, WHEN DATA_IN
  115. MOVE FROM dsa_datain+0x0050, WHEN DATA_IN
  116. MOVE FROM dsa_datain+0x0058, WHEN DATA_IN
  117. MOVE FROM dsa_datain+0x0060, WHEN DATA_IN
  118. MOVE FROM dsa_datain+0x0068, WHEN DATA_IN
  119. MOVE FROM dsa_datain+0x0070, WHEN DATA_IN
  120. MOVE FROM dsa_datain+0x0078, WHEN DATA_IN
  121. MOVE FROM dsa_datain+0x0080, WHEN DATA_IN
  122. MOVE FROM dsa_datain+0x0088, WHEN DATA_IN
  123. MOVE FROM dsa_datain+0x0090, WHEN DATA_IN
  124. MOVE FROM dsa_datain+0x0098, WHEN DATA_IN
  125. MOVE FROM dsa_datain+0x00a0, WHEN DATA_IN
  126. MOVE FROM dsa_datain+0x00a8, WHEN DATA_IN
  127. MOVE FROM dsa_datain+0x00b0, WHEN DATA_IN
  128. MOVE FROM dsa_datain+0x00b8, WHEN DATA_IN
  129. MOVE FROM dsa_datain+0x00c0, WHEN DATA_IN
  130. MOVE FROM dsa_datain+0x00c8, WHEN DATA_IN
  131. MOVE FROM dsa_datain+0x00d0, WHEN DATA_IN
  132. MOVE FROM dsa_datain+0x00d8, WHEN DATA_IN
  133. MOVE FROM dsa_datain+0x00e0, WHEN DATA_IN
  134. MOVE FROM dsa_datain+0x00e8, WHEN DATA_IN
  135. MOVE FROM dsa_datain+0x00f0, WHEN DATA_IN
  136. MOVE FROM dsa_datain+0x00f8, WHEN DATA_IN
  137. MOVE FROM dsa_datain+0x0100, WHEN DATA_IN
  138. MOVE FROM dsa_datain+0x0108, WHEN DATA_IN
  139. MOVE FROM dsa_datain+0x0110, WHEN DATA_IN
  140. MOVE FROM dsa_datain+0x0118, WHEN DATA_IN
  141. MOVE FROM dsa_datain+0x0120, WHEN DATA_IN
  142. MOVE FROM dsa_datain+0x0128, WHEN DATA_IN
  143. MOVE FROM dsa_datain+0x0130, WHEN DATA_IN
  144. MOVE FROM dsa_datain+0x0138, WHEN DATA_IN
  145. MOVE FROM dsa_datain+0x0140, WHEN DATA_IN
  146. MOVE FROM dsa_datain+0x0148, WHEN DATA_IN
  147. MOVE FROM dsa_datain+0x0150, WHEN DATA_IN
  148. MOVE FROM dsa_datain+0x0158, WHEN DATA_IN
  149. MOVE FROM dsa_datain+0x0160, WHEN DATA_IN
  150. MOVE FROM dsa_datain+0x0168, WHEN DATA_IN
  151. MOVE FROM dsa_datain+0x0170, WHEN DATA_IN
  152. MOVE FROM dsa_datain+0x0178, WHEN DATA_IN
  153. MOVE FROM dsa_datain+0x0180, WHEN DATA_IN
  154. MOVE FROM dsa_datain+0x0188, WHEN DATA_IN
  155. MOVE FROM dsa_datain+0x0190, WHEN DATA_IN
  156. MOVE FROM dsa_datain+0x0198, WHEN DATA_IN
  157. MOVE FROM dsa_datain+0x01a0, WHEN DATA_IN
  158. MOVE FROM dsa_datain+0x01a8, WHEN DATA_IN
  159. MOVE FROM dsa_datain+0x01b0, WHEN DATA_IN
  160. MOVE FROM dsa_datain+0x01b8, WHEN DATA_IN
  161. MOVE FROM dsa_datain+0x01c0, WHEN DATA_IN
  162. MOVE FROM dsa_datain+0x01c8, WHEN DATA_IN
  163. MOVE FROM dsa_datain+0x01d0, WHEN DATA_IN
  164. MOVE FROM dsa_datain+0x01d8, WHEN DATA_IN
  165. MOVE FROM dsa_datain+0x01e0, WHEN DATA_IN
  166. MOVE FROM dsa_datain+0x01e8, WHEN DATA_IN
  167. MOVE FROM dsa_datain+0x01f0, WHEN DATA_IN
  168. MOVE FROM dsa_datain+0x01f8, WHEN DATA_IN
  169. MOVE FROM dsa_datain+0x0200, WHEN DATA_IN
  170. MOVE FROM dsa_datain+0x0208, WHEN DATA_IN
  171. MOVE FROM dsa_datain+0x0210, WHEN DATA_IN
  172. MOVE FROM dsa_datain+0x0218, WHEN DATA_IN
  173. MOVE FROM dsa_datain+0x0220, WHEN DATA_IN
  174. MOVE FROM dsa_datain+0x0228, WHEN DATA_IN
  175. MOVE FROM dsa_datain+0x0230, WHEN DATA_IN
  176. MOVE FROM dsa_datain+0x0238, WHEN DATA_IN
  177. MOVE FROM dsa_datain+0x0240, WHEN DATA_IN
  178. MOVE FROM dsa_datain+0x0248, WHEN DATA_IN
  179. MOVE FROM dsa_datain+0x0250, WHEN DATA_IN
  180. MOVE FROM dsa_datain+0x0258, WHEN DATA_IN
  181. MOVE FROM dsa_datain+0x0260, WHEN DATA_IN
  182. MOVE FROM dsa_datain+0x0268, WHEN DATA_IN
  183. MOVE FROM dsa_datain+0x0270, WHEN DATA_IN
  184. MOVE FROM dsa_datain+0x0278, WHEN DATA_IN
  185. MOVE FROM dsa_datain+0x0280, WHEN DATA_IN
  186. MOVE FROM dsa_datain+0x0288, WHEN DATA_IN
  187. MOVE FROM dsa_datain+0x0290, WHEN DATA_IN
  188. MOVE FROM dsa_datain+0x0298, WHEN DATA_IN
  189. MOVE FROM dsa_datain+0x02a0, WHEN DATA_IN
  190. MOVE FROM dsa_datain+0x02a8, WHEN DATA_IN
  191. MOVE FROM dsa_datain+0x02b0, WHEN DATA_IN
  192. MOVE FROM dsa_datain+0x02b8, WHEN DATA_IN
  193. MOVE FROM dsa_datain+0x02c0, WHEN DATA_IN
  194. MOVE FROM dsa_datain+0x02c8, WHEN DATA_IN
  195. MOVE FROM dsa_datain+0x02d0, WHEN DATA_IN
  196. MOVE FROM dsa_datain+0x02d8, WHEN DATA_IN
  197. MOVE FROM dsa_datain+0x02e0, WHEN DATA_IN
  198. MOVE FROM dsa_datain+0x02e8, WHEN DATA_IN
  199. MOVE FROM dsa_datain+0x02f0, WHEN DATA_IN
  200. MOVE FROM dsa_datain+0x02f8, WHEN DATA_IN
  201. MOVE FROM dsa_datain+0x0300, WHEN DATA_IN
  202. MOVE FROM dsa_datain+0x0308, WHEN DATA_IN
  203. MOVE FROM dsa_datain+0x0310, WHEN DATA_IN
  204. MOVE FROM dsa_datain+0x0318, WHEN DATA_IN
  205. MOVE FROM dsa_datain+0x0320, WHEN DATA_IN
  206. MOVE FROM dsa_datain+0x0328, WHEN DATA_IN
  207. MOVE FROM dsa_datain+0x0330, WHEN DATA_IN
  208. MOVE FROM dsa_datain+0x0338, WHEN DATA_IN
  209. MOVE FROM dsa_datain+0x0340, WHEN DATA_IN
  210. MOVE FROM dsa_datain+0x0348, WHEN DATA_IN
  211. MOVE FROM dsa_datain+0x0350, WHEN DATA_IN
  212. MOVE FROM dsa_datain+0x0358, WHEN DATA_IN
  213. MOVE FROM dsa_datain+0x0360, WHEN DATA_IN
  214. MOVE FROM dsa_datain+0x0368, WHEN DATA_IN
  215. MOVE FROM dsa_datain+0x0370, WHEN DATA_IN
  216. MOVE FROM dsa_datain+0x0378, WHEN DATA_IN
  217. MOVE FROM dsa_datain+0x0380, WHEN DATA_IN
  218. MOVE FROM dsa_datain+0x0388, WHEN DATA_IN
  219. MOVE FROM dsa_datain+0x0390, WHEN DATA_IN
  220. MOVE FROM dsa_datain+0x0398, WHEN DATA_IN
  221. MOVE FROM dsa_datain+0x03a0, WHEN DATA_IN
  222. MOVE FROM dsa_datain+0x03a8, WHEN DATA_IN
  223. MOVE FROM dsa_datain+0x03b0, WHEN DATA_IN
  224. MOVE FROM dsa_datain+0x03b8, WHEN DATA_IN
  225. MOVE FROM dsa_datain+0x03c0, WHEN DATA_IN
  226. MOVE FROM dsa_datain+0x03c8, WHEN DATA_IN
  227. MOVE FROM dsa_datain+0x03d0, WHEN DATA_IN
  228. MOVE FROM dsa_datain+0x03d8, WHEN DATA_IN
  229. MOVE FROM dsa_datain+0x03e0, WHEN DATA_IN
  230. MOVE FROM dsa_datain+0x03e8, WHEN DATA_IN
  231. MOVE FROM dsa_datain+0x03f0, WHEN DATA_IN
  232. MOVE FROM dsa_datain+0x03f8, WHEN DATA_IN
  233. JUMP end_data_trans
  234. output_data:
  235. MOVE SCRATCH0 | had_dataout TO SCRATCH0
  236. ENTRY patch_output_data
  237. patch_output_data:
  238. JUMP 0
  239. MOVE FROM dsa_dataout+0x0000, WHEN DATA_OUT
  240. MOVE FROM dsa_dataout+0x0008, WHEN DATA_OUT
  241. MOVE FROM dsa_dataout+0x0010, WHEN DATA_OUT
  242. MOVE FROM dsa_dataout+0x0018, WHEN DATA_OUT
  243. MOVE FROM dsa_dataout+0x0020, WHEN DATA_OUT
  244. MOVE FROM dsa_dataout+0x0028, WHEN DATA_OUT
  245. MOVE FROM dsa_dataout+0x0030, WHEN DATA_OUT
  246. MOVE FROM dsa_dataout+0x0038, WHEN DATA_OUT
  247. MOVE FROM dsa_dataout+0x0040, WHEN DATA_OUT
  248. MOVE FROM dsa_dataout+0x0048, WHEN DATA_OUT
  249. MOVE FROM dsa_dataout+0x0050, WHEN DATA_OUT
  250. MOVE FROM dsa_dataout+0x0058, WHEN DATA_OUT
  251. MOVE FROM dsa_dataout+0x0060, WHEN DATA_OUT
  252. MOVE FROM dsa_dataout+0x0068, WHEN DATA_OUT
  253. MOVE FROM dsa_dataout+0x0070, WHEN DATA_OUT
  254. MOVE FROM dsa_dataout+0x0078, WHEN DATA_OUT
  255. MOVE FROM dsa_dataout+0x0080, WHEN DATA_OUT
  256. MOVE FROM dsa_dataout+0x0088, WHEN DATA_OUT
  257. MOVE FROM dsa_dataout+0x0090, WHEN DATA_OUT
  258. MOVE FROM dsa_dataout+0x0098, WHEN DATA_OUT
  259. MOVE FROM dsa_dataout+0x00a0, WHEN DATA_OUT
  260. MOVE FROM dsa_dataout+0x00a8, WHEN DATA_OUT
  261. MOVE FROM dsa_dataout+0x00b0, WHEN DATA_OUT
  262. MOVE FROM dsa_dataout+0x00b8, WHEN DATA_OUT
  263. MOVE FROM dsa_dataout+0x00c0, WHEN DATA_OUT
  264. MOVE FROM dsa_dataout+0x00c8, WHEN DATA_OUT
  265. MOVE FROM dsa_dataout+0x00d0, WHEN DATA_OUT
  266. MOVE FROM dsa_dataout+0x00d8, WHEN DATA_OUT
  267. MOVE FROM dsa_dataout+0x00e0, WHEN DATA_OUT
  268. MOVE FROM dsa_dataout+0x00e8, WHEN DATA_OUT
  269. MOVE FROM dsa_dataout+0x00f0, WHEN DATA_OUT
  270. MOVE FROM dsa_dataout+0x00f8, WHEN DATA_OUT
  271. MOVE FROM dsa_dataout+0x0100, WHEN DATA_OUT
  272. MOVE FROM dsa_dataout+0x0108, WHEN DATA_OUT
  273. MOVE FROM dsa_dataout+0x0110, WHEN DATA_OUT
  274. MOVE FROM dsa_dataout+0x0118, WHEN DATA_OUT
  275. MOVE FROM dsa_dataout+0x0120, WHEN DATA_OUT
  276. MOVE FROM dsa_dataout+0x0128, WHEN DATA_OUT
  277. MOVE FROM dsa_dataout+0x0130, WHEN DATA_OUT
  278. MOVE FROM dsa_dataout+0x0138, WHEN DATA_OUT
  279. MOVE FROM dsa_dataout+0x0140, WHEN DATA_OUT
  280. MOVE FROM dsa_dataout+0x0148, WHEN DATA_OUT
  281. MOVE FROM dsa_dataout+0x0150, WHEN DATA_OUT
  282. MOVE FROM dsa_dataout+0x0158, WHEN DATA_OUT
  283. MOVE FROM dsa_dataout+0x0160, WHEN DATA_OUT
  284. MOVE FROM dsa_dataout+0x0168, WHEN DATA_OUT
  285. MOVE FROM dsa_dataout+0x0170, WHEN DATA_OUT
  286. MOVE FROM dsa_dataout+0x0178, WHEN DATA_OUT
  287. MOVE FROM dsa_dataout+0x0180, WHEN DATA_OUT
  288. MOVE FROM dsa_dataout+0x0188, WHEN DATA_OUT
  289. MOVE FROM dsa_dataout+0x0190, WHEN DATA_OUT
  290. MOVE FROM dsa_dataout+0x0198, WHEN DATA_OUT
  291. MOVE FROM dsa_dataout+0x01a0, WHEN DATA_OUT
  292. MOVE FROM dsa_dataout+0x01a8, WHEN DATA_OUT
  293. MOVE FROM dsa_dataout+0x01b0, WHEN DATA_OUT
  294. MOVE FROM dsa_dataout+0x01b8, WHEN DATA_OUT
  295. MOVE FROM dsa_dataout+0x01c0, WHEN DATA_OUT
  296. MOVE FROM dsa_dataout+0x01c8, WHEN DATA_OUT
  297. MOVE FROM dsa_dataout+0x01d0, WHEN DATA_OUT
  298. MOVE FROM dsa_dataout+0x01d8, WHEN DATA_OUT
  299. MOVE FROM dsa_dataout+0x01e0, WHEN DATA_OUT
  300. MOVE FROM dsa_dataout+0x01e8, WHEN DATA_OUT
  301. MOVE FROM dsa_dataout+0x01f0, WHEN DATA_OUT
  302. MOVE FROM dsa_dataout+0x01f8, WHEN DATA_OUT
  303. MOVE FROM dsa_dataout+0x0200, WHEN DATA_OUT
  304. MOVE FROM dsa_dataout+0x0208, WHEN DATA_OUT
  305. MOVE FROM dsa_dataout+0x0210, WHEN DATA_OUT
  306. MOVE FROM dsa_dataout+0x0218, WHEN DATA_OUT
  307. MOVE FROM dsa_dataout+0x0220, WHEN DATA_OUT
  308. MOVE FROM dsa_dataout+0x0228, WHEN DATA_OUT
  309. MOVE FROM dsa_dataout+0x0230, WHEN DATA_OUT
  310. MOVE FROM dsa_dataout+0x0238, WHEN DATA_OUT
  311. MOVE FROM dsa_dataout+0x0240, WHEN DATA_OUT
  312. MOVE FROM dsa_dataout+0x0248, WHEN DATA_OUT
  313. MOVE FROM dsa_dataout+0x0250, WHEN DATA_OUT
  314. MOVE FROM dsa_dataout+0x0258, WHEN DATA_OUT
  315. MOVE FROM dsa_dataout+0x0260, WHEN DATA_OUT
  316. MOVE FROM dsa_dataout+0x0268, WHEN DATA_OUT
  317. MOVE FROM dsa_dataout+0x0270, WHEN DATA_OUT
  318. MOVE FROM dsa_dataout+0x0278, WHEN DATA_OUT
  319. MOVE FROM dsa_dataout+0x0280, WHEN DATA_OUT
  320. MOVE FROM dsa_dataout+0x0288, WHEN DATA_OUT
  321. MOVE FROM dsa_dataout+0x0290, WHEN DATA_OUT
  322. MOVE FROM dsa_dataout+0x0298, WHEN DATA_OUT
  323. MOVE FROM dsa_dataout+0x02a0, WHEN DATA_OUT
  324. MOVE FROM dsa_dataout+0x02a8, WHEN DATA_OUT
  325. MOVE FROM dsa_dataout+0x02b0, WHEN DATA_OUT
  326. MOVE FROM dsa_dataout+0x02b8, WHEN DATA_OUT
  327. MOVE FROM dsa_dataout+0x02c0, WHEN DATA_OUT
  328. MOVE FROM dsa_dataout+0x02c8, WHEN DATA_OUT
  329. MOVE FROM dsa_dataout+0x02d0, WHEN DATA_OUT
  330. MOVE FROM dsa_dataout+0x02d8, WHEN DATA_OUT
  331. MOVE FROM dsa_dataout+0x02e0, WHEN DATA_OUT
  332. MOVE FROM dsa_dataout+0x02e8, WHEN DATA_OUT
  333. MOVE FROM dsa_dataout+0x02f0, WHEN DATA_OUT
  334. MOVE FROM dsa_dataout+0x02f8, WHEN DATA_OUT
  335. MOVE FROM dsa_dataout+0x0300, WHEN DATA_OUT
  336. MOVE FROM dsa_dataout+0x0308, WHEN DATA_OUT
  337. MOVE FROM dsa_dataout+0x0310, WHEN DATA_OUT
  338. MOVE FROM dsa_dataout+0x0318, WHEN DATA_OUT
  339. MOVE FROM dsa_dataout+0x0320, WHEN DATA_OUT
  340. MOVE FROM dsa_dataout+0x0328, WHEN DATA_OUT
  341. MOVE FROM dsa_dataout+0x0330, WHEN DATA_OUT
  342. MOVE FROM dsa_dataout+0x0338, WHEN DATA_OUT
  343. MOVE FROM dsa_dataout+0x0340, WHEN DATA_OUT
  344. MOVE FROM dsa_dataout+0x0348, WHEN DATA_OUT
  345. MOVE FROM dsa_dataout+0x0350, WHEN DATA_OUT
  346. MOVE FROM dsa_dataout+0x0358, WHEN DATA_OUT
  347. MOVE FROM dsa_dataout+0x0360, WHEN DATA_OUT
  348. MOVE FROM dsa_dataout+0x0368, WHEN DATA_OUT
  349. MOVE FROM dsa_dataout+0x0370, WHEN DATA_OUT
  350. MOVE FROM dsa_dataout+0x0378, WHEN DATA_OUT
  351. MOVE FROM dsa_dataout+0x0380, WHEN DATA_OUT
  352. MOVE FROM dsa_dataout+0x0388, WHEN DATA_OUT
  353. MOVE FROM dsa_dataout+0x0390, WHEN DATA_OUT
  354. MOVE FROM dsa_dataout+0x0398, WHEN DATA_OUT
  355. MOVE FROM dsa_dataout+0x03a0, WHEN DATA_OUT
  356. MOVE FROM dsa_dataout+0x03a8, WHEN DATA_OUT
  357. MOVE FROM dsa_dataout+0x03b0, WHEN DATA_OUT
  358. MOVE FROM dsa_dataout+0x03b8, WHEN DATA_OUT
  359. MOVE FROM dsa_dataout+0x03c0, WHEN DATA_OUT
  360. MOVE FROM dsa_dataout+0x03c8, WHEN DATA_OUT
  361. MOVE FROM dsa_dataout+0x03d0, WHEN DATA_OUT
  362. MOVE FROM dsa_dataout+0x03d8, WHEN DATA_OUT
  363. MOVE FROM dsa_dataout+0x03e0, WHEN DATA_OUT
  364. MOVE FROM dsa_dataout+0x03e8, WHEN DATA_OUT
  365. MOVE FROM dsa_dataout+0x03f0, WHEN DATA_OUT
  366. MOVE FROM dsa_dataout+0x03f8, WHEN DATA_OUT
  367. ENTRY end_data_trans
  368. end_data_trans:
  369. redo_msgin3:
  370. JUMP get_status, WHEN STATUS
  371. JUMP get_msgin3, WHEN MSG_IN
  372. INT int_data_bad_phase
  373. get_msgin1:
  374. MOVE SCRATCH0 | had_msgin TO SCRATCH0
  375. MOVE 1, msgin_buf, WHEN MSG_IN
  376. JUMP ext_msg1, IF 0x01 ; Extended Message
  377. JUMP ignore_msg1, IF 0x02 ; Save Data Pointers
  378. JUMP ignore_msg1, IF 0x03 ; Save Restore Pointers
  379. JUMP disc1, IF 0x04 ; Disconnect
  380. INT int_bad_msg1
  381. ignore_msg1:
  382. CLEAR ACK
  383. JUMP redo_msgin1
  384. ext_msg1:
  385. MOVE SCRATCH0 | had_extmsg TO SCRATCH0
  386. CLEAR ACK
  387. MOVE 1, msgin_buf + 1, WHEN MSG_IN
  388. JUMP reject_msg1, IF NOT 0x03 ; Only handle SDTR
  389. CLEAR ACK
  390. MOVE 1, msgin_buf + 2, WHEN MSG_IN
  391. JUMP reject_msg1, IF NOT 0x01 ; Only handle SDTR
  392. CLEAR ACK
  393. MOVE 2, msgin_buf + 3, WHEN MSG_IN
  394. INT int_msg_sdtr1
  395. reject_msg1:
  396. MOVE SCRATCH1 | did_reject TO SCRATCH1
  397. SET ATN
  398. CLEAR ACK
  399. JUMP reject_msg1a, WHEN NOT MSG_IN
  400. MOVE 1, msgin_buf + 7, WHEN MSG_IN
  401. JUMP reject_msg1
  402. reject_msg1a:
  403. MOVE 1, msg_reject, WHEN MSG_OUT
  404. JUMP redo_msgin1
  405. disc1:
  406. CLEAR ACK
  407. ENTRY wait_disc1
  408. wait_disc1:
  409. WAIT DISCONNECT
  410. INT int_disc1
  411. ENTRY resume_msgin1a
  412. resume_msgin1a:
  413. CLEAR ACK
  414. JUMP redo_msgin1
  415. ENTRY resume_msgin1b
  416. resume_msgin1b:
  417. SET ATN
  418. CLEAR ACK
  419. INT int_no_msgout1, WHEN NOT MSG_OUT
  420. MOVE SCRATCH0 | had_msgout TO SCRATCH0
  421. MOVE FROM dsa_msgout, when MSG_OUT
  422. JUMP redo_msgin1
  423. get_msgin2:
  424. MOVE SCRATCH0 | had_msgin TO SCRATCH0
  425. MOVE 1, msgin_buf, WHEN MSG_IN
  426. JUMP ext_msg2, IF 0x01 ; Extended Message
  427. JUMP ignore_msg2, IF 0x02 ; Save Data Pointers
  428. JUMP ignore_msg2, IF 0x03 ; Save Restore Pointers
  429. JUMP disc2, IF 0x04 ; Disconnect
  430. INT int_bad_msg2
  431. ignore_msg2:
  432. CLEAR ACK
  433. JUMP redo_msgin2
  434. ext_msg2:
  435. MOVE SCRATCH0 | had_extmsg TO SCRATCH0
  436. CLEAR ACK
  437. MOVE 1, msgin_buf + 1, WHEN MSG_IN
  438. JUMP reject_msg2, IF NOT 0x03 ; Only handle SDTR
  439. CLEAR ACK
  440. MOVE 1, msgin_buf + 2, WHEN MSG_IN
  441. JUMP reject_msg2, IF NOT 0x01 ; Only handle SDTR
  442. CLEAR ACK
  443. MOVE 2, msgin_buf + 3, WHEN MSG_IN
  444. INT int_msg_sdtr2
  445. reject_msg2:
  446. MOVE SCRATCH1 | did_reject TO SCRATCH1
  447. SET ATN
  448. CLEAR ACK
  449. JUMP reject_msg2a, WHEN NOT MSG_IN
  450. MOVE 1, msgin_buf + 7, WHEN MSG_IN
  451. JUMP reject_msg2
  452. reject_msg2a:
  453. MOVE 1, msg_reject, WHEN MSG_OUT
  454. JUMP redo_msgin2
  455. disc2:
  456. CLEAR ACK
  457. ENTRY wait_disc2
  458. wait_disc2:
  459. WAIT DISCONNECT
  460. INT int_disc2
  461. ENTRY resume_msgin2a
  462. resume_msgin2a:
  463. CLEAR ACK
  464. JUMP redo_msgin2
  465. ENTRY resume_msgin2b
  466. resume_msgin2b:
  467. SET ATN
  468. CLEAR ACK
  469. INT int_no_msgout2, WHEN NOT MSG_OUT
  470. MOVE SCRATCH0 | had_msgout TO SCRATCH0
  471. MOVE FROM dsa_msgout, when MSG_OUT
  472. JUMP redo_msgin2
  473. get_msgin3:
  474. MOVE SCRATCH0 | had_msgin TO SCRATCH0
  475. MOVE 1, msgin_buf, WHEN MSG_IN
  476. JUMP ext_msg3, IF 0x01 ; Extended Message
  477. JUMP ignore_msg3, IF 0x02 ; Save Data Pointers
  478. JUMP ignore_msg3, IF 0x03 ; Save Restore Pointers
  479. JUMP disc3, IF 0x04 ; Disconnect
  480. INT int_bad_msg3
  481. ignore_msg3:
  482. CLEAR ACK
  483. JUMP redo_msgin3
  484. ext_msg3:
  485. MOVE SCRATCH0 | had_extmsg TO SCRATCH0
  486. CLEAR ACK
  487. MOVE 1, msgin_buf + 1, WHEN MSG_IN
  488. JUMP reject_msg3, IF NOT 0x03 ; Only handle SDTR
  489. CLEAR ACK
  490. MOVE 1, msgin_buf + 2, WHEN MSG_IN
  491. JUMP reject_msg3, IF NOT 0x01 ; Only handle  SDTR
  492. CLEAR ACK
  493. MOVE 2, msgin_buf + 3, WHEN MSG_IN
  494. INT int_msg_sdtr3
  495. reject_msg3:
  496. MOVE SCRATCH1 | did_reject TO SCRATCH1
  497. SET ATN
  498. CLEAR ACK
  499. JUMP reject_msg3a, WHEN NOT MSG_IN
  500. MOVE 1, msgin_buf + 7, WHEN MSG_IN
  501. JUMP reject_msg3
  502. reject_msg3a:
  503. MOVE 1, msg_reject, WHEN MSG_OUT
  504. JUMP redo_msgin3
  505. disc3:
  506. CLEAR ACK
  507. ENTRY wait_disc3
  508. wait_disc3:
  509. WAIT DISCONNECT
  510. INT int_disc3
  511. ENTRY resume_msgin3a
  512. resume_msgin3a:
  513. CLEAR ACK
  514. JUMP redo_msgin3
  515. ENTRY resume_msgin3b
  516. resume_msgin3b:
  517. SET ATN
  518. CLEAR ACK
  519. INT int_no_msgout3, WHEN NOT MSG_OUT
  520. MOVE SCRATCH0 | had_msgout TO SCRATCH0
  521. MOVE FROM dsa_msgout, when MSG_OUT
  522. JUMP redo_msgin3
  523. ENTRY resume_rej_ident
  524. resume_rej_ident:
  525. CLEAR ATN
  526. MOVE 1, msgin_buf, WHEN MSG_IN
  527. INT int_not_rej, IF NOT 0x07 ; Reject
  528. CLEAR ACK
  529. JUMP done_ident
  530. ENTRY reselect
  531. reselect:
  532. ; Disable selection timer
  533. MOVE CTEST7 | 0x10 TO CTEST7
  534. WAIT RESELECT resel_err
  535. INT int_resel_not_msgin, WHEN NOT MSG_IN
  536. MOVE 1, reselected_identify, WHEN MSG_IN
  537. INT int_reselected
  538. resel_err:
  539. MOVE CTEST2 & 0x40 TO SFBR
  540. JUMP selected, IF 0x00
  541. MOVE SFBR & 0 TO SFBR
  542. ENTRY patch_new_dsa
  543. patch_new_dsa:
  544. MOVE SFBR | 0x11 TO DSA0
  545. MOVE SFBR | 0x22 TO DSA1
  546. MOVE SFBR | 0x33 TO DSA2
  547. MOVE SFBR | 0x44 TO DSA3
  548. JUMP do_select
  549. selected:
  550. INT int_selected
  551. ENTRY test1
  552. test1:
  553. MOVE MEMORY 4, test1_src, test1_dst
  554. INT int_test1