sim710.scr
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
源码类别:

嵌入式Linux

开发平台:

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