ncr710init.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:20k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ncr710init.c - script programs for the NCR 710 */
  2. /* Copyright 1989-1994 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /* 
  5. Modification history
  6. --------------------
  7. 03f,20jul92,eve    Added documentation. 
  8. 03e,20jul92,eve    Rename end label to endTransact.
  9. 03d,03jul92,eve    Include NCR_COMPILER_BUG in the file.
  10. 03c,04mar92,eve    Start disconnect implementation.
  11. 03b,16jan92,eve    Add ackMsg1 ,ackAtnMsg and endAbort, remove 
  12.     script test proc.
  13. 03a,30oct91,eve    Remove int capability in end label,the scsi 
  14.     status is process by the ncr710Lib driver.
  15. 02a,26oct91,eve    Add enable disable timout between selection
  16.     step.
  17. 01a,23oct91,eve    Created and add comments
  18. */
  19. /*
  20. INTERNAL
  21. NCR710 FEATURE USED
  22. This chip has code which performs some action on the scsi bus.
  23. The description level of the code is close to an assembly language and 
  24. dedicated for scsi bus operations. 
  25. The opcode is a pair of 32bit word that allow some basic operations in the 
  26. code (jump, tests values) and on the scsi (select ,assert line):
  27. block move instruction.
  28.   move from <offset> when PHASE_NAME
  29.   ........
  30. I/O instructions 
  31.   set target 
  32.   wait DISCONNECT
  33.   wait RESELECT
  34.   select from <offset>,@jump
  35.   .........  
  36. read/write register instructions
  37.   move REG_NAME to SBFR
  38.   .........  
  39.  
  40. transfert control instructions
  41.   jump <Label> 
  42.   int <value> when PHASE_NAME
  43.   ........... 
  44.   move memory instruction
  45.   never use.  
  46.  
  47. The previous example does not included all of the instruction set, 
  48. see the NCR data reference manual.
  49. Another key point is the capability of the script to perform some 
  50. limited indirect addressing to get information from the cpu memory.
  51. This is used to get Target ID to select it, to get data, message pointer
  52. and count during transfer phase.  This avoids having to patch the script
  53. at the run time to specify count, data pointer and target ID.
  54. Script can tranfer directly, with its DMA core, a data block from/to the 
  55. scsi bus from/to cpu memory.
  56. The instruction involved is :
  57.         move from <offset> when PHASE_NAME
  58.  
  59. In this case the offset is hard coded in the ncr710Script.h and indexed the
  60. right field in the NCR_CTL structure (see #include"drv/scsi/ncr710Script1.h"). 
  61.  
  62. The field looks like :
  63.     aligned 32 bit @->00xxxxxx  24bit count
  64.                     ->ZZZZZZZZ  32bit address pointer.
  65.  
  66. The offset is added to the content of the DNAD register, loaded at 
  67. the run time with the base address of the structure.
  68.  
  69. In the same way the select instruction uses a field like:
  70.         select from <offset> ,<Alternate jump @>
  71.  where offset + DNAD points to a field like:
  72. aligned 32 bit@->0000|0000|xxxx xxxx|xPPP  |SSSS|0000|0000
  73.                            Target ID|Period|Offset
  74. The Period and offset are used when a target supports the synchronous 
  75. transfert.
  76. INTERRUPT SOURCE
  77. The chip has three main kind of interrupt, scsi, dma interrupt and 
  78. script  interrupt.  The scsi interrupts are maskable individually with 
  79. the sien register.
  80. .CS
  81. SIEN
  82.   7    M/A Mismatch interrupt(initiator)/ ATN assert (Target)
  83.        Used in the driver to detect a phase change during data/msg
  84.        transfert.The ncr is never used in target mode.
  85.   6    FCMP function complete Not used (masked).
  86.   5    STO scsi Bus Time out
  87.        Used to get timeout on select.(**)
  88.   4    SEL selected or reselected Not used in the driver.(masked).
  89.   3    SGE scsi Gross error. Used in the driver.
  90.   2    UDC unexpected disconnect.
  91.        Used to detect unexpected target disconnection or an expected 
  92.        disconnect if the target received a "device reset message".
  93.   1    RST scsi reset received (not used).(masked)(***)
  94.   0    PAR parity error not used.(masked)(***)
  95. (**)    The script disable the timeout capability by setting the bit 7 
  96.         in CTEST7 register.  Because the ncr will generate also a timeout
  97.         interrupt  if no activity occur on the scsi bus after 250ms,
  98.         and not only during a scsi select.
  99. (***)  This case should be processed, but not included in the driver today.
  100. .CE
  101. The Dma interrupts are maskable with the DIEN register:
  102. .CS
  103. DIEN
  104.   7   Reserved
  105.   6   Reserved
  106.   5   BF bus fault.Memory acces error.
  107.   4   Aborted ,means that the abort bit have been set in ISTAT reg
  108.       This case never happen (Abort bit not used).
  109.   3   SSI single step interrupt.Not used in the operational mode.
  110.       This bit is used in single step debug mode in the driver,
  111.       allowing to execute script step by step..
  112.   2   SIR script interrupt,used to detect a script intruction
  113.       <int ...>.
  114.   1   WTD Watchdog interrupt.This case never happens because
  115.       The watchdog timeout value is set to 0 in DWT register.
  116.   0   IID illegal instruction detected.  Recieved in two
  117.       cases :1-Bad opcode, 2-count set to 0 in the <move> opcode.
  118. .CE
  119. The other register involved  in  the  interrupt  process  is ISTAT.
  120. This register is the ONLY READABLE/WRITABLE  register during a script 
  121. execution.
  122. .CS
  123.  ISTAT
  124.  7   ABRT Abort current instruction.Not used
  125.  6   RST  software reset used to set the chip to a known state.
  126.  5   SIGP signal process bit.This bit is used in the ncr driver to support
  127.      the connect disconnect to get an interrupt to start a new scsi 
  128.      command.(SEE CONNECT/DISCONNECT ...).
  129.  4   Reserved.
  130.  3   Connected ,not used.
  131.  2   Reserved.
  132.  1   SIP scsi interrupt pending.Used at interrupt
  133.      level to detect and clear SIEN interrupt.
  134.  0   DIP dma interrupt pending.Used at interrupt
  135.      level to detect and clear DIEN interrupt.
  136. .CE
  137. The interrupt are cleared by reading the register source, and by 
  138. checking  the DIP and SIP bit in ISTAT.  Because the chip has a stack 
  139. interrupt ,the DIEN and SIEN registers are read until the ISTAT bits 
  140. are cleared to be sure there is no interrupt pending.
  141. The last interrupt source is the script <INT> opcode. 
  142. This instruction is  used to interrupt the cpu if the scsi 
  143. transaction involves a cpu process.
  144. .CS
  145.     int <int value> [<condition><value>] (pg 6-10 of the programmers guide).
  146. .CE
  147. The <int value> is used in the driver code to detect the scsi condition  
  148. and takes a decision for the next step of the transaction.  
  149. This value is loaded from the opcode and read by the  CPU in the 
  150. DSPS register.
  151. CONNECT/DISCONNECT AND NEW COMMAND START
  152. When connect/disconnect is enabled, the target could reconnect at any time.
  153. This is notified to the target by an identify message send by the initiator
  154. after a successful selection of the target.
  155. The  disconnect is always sent to an initiator by a DISCONNECT message.
  156. The reconnect could occur at any arbitration phase.  
  157. To be able to detect it at any time the chip has to wait for a reconnect 
  158. on the scsi ,which is done with the <wait reconnect> script opcode:
  159.   wait RECONNECT,<Alternate @>
  160.   <next opcode>
  161. .CS
  162.   If a reconnect occurs, then the <next opcode>
  163.   is executed.If the SIGP bit is set the script
  164.   jump to <Alternate @>
  165. .CE
  166. But a reconnect could also occurs during a  <select>  opcode for  another  
  167. device (it looses the arbitration).  The <wait RECONNECT> instruction is 
  168. the idle script entry point.  They are two way to abort this instruction:
  169.   1-The Sigp bit is set
  170.   2-A reconnect,or a select occur ,in this case
  171.     select means that the initiator is selected as
  172.     a target on the scsi bus
  173. The sigp bit is used to detect and start a new command at interrupt level. 
  174. It is set at task level each time that a new command has to be run.
  175. .CS
  176. SCRIPT START FLOW CHART
  177. The reselected path is driven by a physical scsi reconnect/select.
  178. IDLE ENTRY POINT
  179. <waitSelect>
  180. Wait for a reselect ,Alternate @-------->
  181. and test sigp ?                         | SIGP set or Select to start
  182.   |                                     |
  183.   |<-reselect                           /
  184.   |                       No    <checkNewCmd>
  185.   |                     /-------Check if we are connected ?
  186. <reselect>              |       clear SIGP
  187. save Targ/init ID       |       Wait for reselect,<@select as a target>
  188. from LCRC register      |       Jump to <reselect>      |
  189. Get identify            |                               |
  190. Msg in.                 <startNewCmd>                   |
  191. int Cpu <reselected>    test and clear SIGP     int Cpu <SELECT AS A TARGET>
  192.                         1) SIGP set
  193.                         int Cpu <NEW COMMAND>
  194.                         2) SIGP clear
  195.                         int Cpu <BAD NEW COMD>
  196. .CE
  197. a) RESELECT
  198. At interrupt level, the target ID from the saved LCRC register (LCRC contain
  199. the data bus value that is <the target ID> | <initiator ID>) and the LUN 
  200. extracted from the identify message sent by the target are used to index 
  201. an array that keep track of each PHYS_DEV nexus (Max = 64) in the  SIOP  
  202. structure (driver structure).
  203. b) NEW COMMAND
  204. A global variable <pNcrCtlCmd> in the SIOP structure  allows the script to be 
  205. start at a selected entry point with the script address included in this 
  206. current nexus pointer in pNcrCtlCmd.
  207. c)SELECT AS A TARGET
  208. That an error case (we dont support the target  mode)  ,restart script at 
  209. the IDLE point.
  210. d)BAD NEW CMD
  211. It's a bogus start command restart script at the IDLE Point.
  212. SCRIPT REMARKS
  213. This script performs a scsi transaction.  This script is a part of 
  214. the usual scsi phase routine.  This code is only compatible with the 
  215. ncr710 because it uses an indirect addressing mode to avoid relocation 
  216. at run time.
  217. All of the external values will be relative to the DSA register.
  218. DSA register has to be loaded whith the address of the ncrCtrl host memory
  219. structure (see #include"drv/scsi/ncr710Script1.h").
  220. Scratch3 register is used to save the LCRC register. LCRC is stamped with
  221. the initiator ID and target ID when a reconnect (initiator is selected
  222. by a target) occurs.
  223. SCRATCH0 is used to hold phase requested to be able to process a phase 
  224. mismatch during any data or message phase.  Usually that occur before a 
  225. legal disconnect from the target (save pointer and disconnect message).
  226.  */
  227. #define NCR_COMPILER_BUG
  228. #include"drv/scsi/ncr710Script1.h"
  229. extern UINT waitSelect[];
  230. extern UINT reselect[];
  231. extern UINT checkNewCmd[];
  232. extern UINT startNewCmd[];
  233. extern UINT selWithAtn[];
  234. extern UINT selWithoutAtn[];
  235. extern UINT contTransact[];
  236. extern UINT endTransact[];
  237. extern UINT msgOut1[];
  238. extern UINT msgOut3[];
  239. extern UINT outputData[];
  240. extern UINT checkOut[];
  241. extern UINT inputData[];
  242. extern UINT msg1[];
  243. extern UINT msg2[];
  244. extern UINT msg3[];
  245. extern UINT selectAddr[];
  246. extern UINT ackMsg1[];
  247. extern UINT ackMsg3[];
  248. extern UINT checkPhData[];
  249. extern UINT ackAtnMsg[];
  250. extern UINT asortPh[];
  251. extern UINT endAbort[];
  252. extern UINT reserOutPh[];
  253. extern UINT reserInPh[];
  254. extern UINT reselSelect[];
  255. extern UINT last_datap[];
  256. UINT last_datap_idx EQ 0;
  257. UINT waitSelect_idx EQ 1;
  258. UINT reselect_idx EQ 2;
  259. UINT checkNewCmd_idx EQ 3;
  260. UINT startNewCmd_idx EQ 4;
  261. UINT reselSelect_idx EQ 5;
  262. UINT selWithAtn_idx EQ 6;
  263. UINT selWithoutAtn_idx EQ 7;
  264. UINT contTransact_idx EQ 8;
  265. UINT endTransact_idx EQ 9;
  266. UINT msgOut1_idx EQ 10;
  267. UINT msgOut3_idx EQ 11;
  268. UINT outputData_idx EQ 12;
  269. UINT checkOut_idx EQ 13;
  270. UINT inputData_idx EQ 14;
  271. UINT msg1_idx EQ 15;
  272. UINT msg2_idx EQ 16;
  273. UINT msg3_idx EQ 17;
  274. UINT selectAddr_idx EQ 18;
  275. UINT ackMsg1_idx EQ 19;
  276. UINT ackMsg3_idx EQ 20;
  277. UINT checkPhData_idx EQ 21;
  278. UINT ackAtnMsg_idx EQ 22;
  279. UINT asortPh_idx EQ 23;
  280. UINT reserOutPh_idx EQ 24;
  281. UINT reserInPh_idx EQ 25;
  282. UINT endAbort_idx EQ 26;
  283. UINT script_ptr_sz EQ 108; 
  284. UINT *script_ptr[] EQ {
  285. last_datap,
  286. waitSelect,
  287. reselect,
  288. checkNewCmd,
  289. startNewCmd,
  290. reselSelect,
  291. selWithAtn,
  292. selWithoutAtn,
  293. contTransact,
  294. endTransact,
  295. msgOut1,
  296. msgOut3,
  297. outputData,
  298. checkOut,
  299. inputData,
  300. msg1,
  301. msg2,
  302. msg3,
  303. selectAddr,
  304. ackMsg1,
  305. ackMsg3,
  306. checkPhData,
  307. ackAtnMsg,
  308. asortPh,
  309. reserOutPh,
  310. reserInPh,
  311. endAbort,
  312. };
  313. ULONG last_datap[] = {
  314. 0x98080000, 0x00000000
  315. };
  316. ULONG waitSelect[] = {
  317. 0x7A1B1000, 0x00000000,
  318. 0x78340A00, 0x00000000,
  319. 0x50000000, (UINT)checkNewCmd,
  320. 0x80080000, (UINT)reselect
  321. };
  322. ULONG reselect[] = {
  323. 0x60000200, 0x00000000,
  324. 0x72230000, 0x00000000,
  325. 0x6A370000, 0x00000000,
  326. 0x1F000000,      0x34 ,
  327. 0x98080000, RECONNECT_PROCESS
  328. };
  329. ULONG checkNewCmd[] = {
  330. 0x74011000, 0x00000000,
  331. 0x800C0000, (UINT)startNewCmd,
  332. 0x74162000, 0x00000000,
  333. 0x50000000, (UINT)selectAddr,
  334. 0x80080000, (UINT)reselect
  335. };
  336. ULONG startNewCmd[] = {
  337. 0x74162000, 0x00000000,
  338. 0x80840000, 0x00000010,
  339. 0x98080000, BAD_NEW_CMD,
  340. 0x80080000, (UINT)waitSelect,
  341. 0x98080000, NEW_COMMAND_PROCESS
  342. };
  343. ULONG reselSelect[] = {
  344. 0x98080000, RECONNECT_IN_SELECT
  345. };
  346. ULONG selWithAtn[] = {
  347. 0x7C1BEF00, 0x00000000,
  348. 0x78340A00, 0x00000000,
  349. 0x43000000, (UINT)checkNewCmd,
  350. 0x830B0000, (UINT)endTransact,
  351. 0x860B0000, (UINT) msgOut1,
  352. 0x9E020000, MSGOUT_EXPECT
  353. };
  354. ULONG selWithoutAtn[] = {
  355. 0x7C1BEF00, 0x00000000,
  356. 0x78340A00, 0x00000000,
  357. 0x42000000, (UINT)checkNewCmd,
  358. 0x80080000, (UINT) contTransact
  359. };
  360. ULONG contTransact[] = {
  361. 0x830B0000, (UINT)endTransact,
  362. 0x860B0000, (UINT)msgOut1,
  363. 0x830B0000, (UINT)endTransact,
  364. 0x870B0000, (UINT)msg1,
  365. 0x9A020000, BAD_PH_BEFORE_CMD,
  366. 0x7A1B1000, 0x00000000,
  367. 0x78340200, 0x00000000,
  368. 0x1A000002, 0x1C ,
  369. 0x870B0000, (UINT)msg2,
  370. 0x830A0000, (UINT)endTransact,
  371. 0x810A0000, (UINT)inputData,
  372. 0x800A0000, (UINT)outputData,
  373. 0x98080000, BAD_PH_AFTER_CMD
  374. };
  375. ULONG endTransact[] = {
  376. 0x7C1BEF00, 0x00000000,
  377. 0x78340300, 0x00000000,
  378. 0x1B000003,     0x2C ,
  379. 0x9F030000, MSGIN_EXPECT_AFTER_ST,
  380. 0x78340700, 0x00000000,
  381. 0x1F000007, 0x0C ,
  382. 0x98040000, BAD_MSG_INSTEAD_CMDCOMP,
  383. 0x60000040, 0x00000000,
  384. 0x7C1BEF00, 0x00000000,
  385. 0x48000000, 0x00000000,
  386. 0x98080000, GOOD_END
  387. };
  388. ULONG msgOut1[] = {
  389. 0x78340600, 0x00000000,
  390. 0x1E000006, 0x04 ,
  391. 0x820B0000, (UINT)contTransact,
  392. 0x830A0000, (UINT)contTransact,
  393. 0x810A0000, (UINT)inputData,
  394. 0x800A0000, (UINT)outputData,
  395. 0x870A0000, (UINT)msg1,
  396. 0x98080000, PH_UNKNOWN
  397. };
  398. ULONG msgOut3[] = {
  399. 0x78340600, 0x00000000,
  400. 0x1E000006, 0x04 ,
  401. 0x820B0000, (UINT)contTransact,
  402. 0x830A0000, (UINT)contTransact,
  403. 0x810A0000, (UINT)inputData,
  404. 0x800A0000, (UINT)outputData,
  405. 0x870A0000, (UINT)msg3,
  406. 0x98080000, PH_UNKNOWN
  407. };
  408. ULONG outputData[] = {
  409. 0x78340000, 0x00000000,
  410. 0x18000000, 0x24 
  411. };
  412. ULONG checkOut[] = {
  413. 0x830B0000, (UINT)endTransact,
  414. 0x870B0000, (UINT)msg3,
  415. 0x80080000, (UINT) asortPh
  416. };
  417. ULONG inputData[] = {
  418. 0x78340100, 0x00000000,
  419. 0x19000001, 0x24 ,
  420. 0x80080000, (UINT)checkOut
  421. };
  422. ULONG msg1[] = {
  423. 0x78340700, 0x00000000,
  424. 0x1F000007, 0x0C ,
  425. 0x808C0001, 0x00000028,
  426. 0x980C0002, SAVDATP_BEFORE_CMD,
  427. 0x980C0003, RESTORE_POINTER,
  428. 0x808C0004, 0x00000028,
  429. 0x980C0007, REJECT_MSG1,
  430. 0x98080000, BAD_MSGIN_BEFORE_CMD,
  431. 0x60000040, 0x00000000,
  432. 0x1F000000, 0x14 ,
  433. 0x98080000, EXTMSG_BEFORE_CMD,
  434. 0x60000040, 0x00000000,
  435. 0x48000000, 0x00000000,
  436. 0x98080000, DISC_BEFORE_CMD
  437. };
  438. ULONG msg2[] = {
  439. 0x78340700, 0x00000000,
  440. 0x1F000007, 0x0C ,
  441. 0x808C0001, 0x00000020,
  442. 0x980C0002, SAVDATP_AFTER_CMD,
  443. 0x980C0003, RESTORE_POINTER,
  444. 0x808C0004, 0x00000020,
  445. 0x98080000, BAD_MSG_AFTER_CMD,
  446. 0x60000040, 0x00000000,
  447. 0x1F000000, 0x14 ,
  448. 0x98080000, EXTMSG_AFTER_CMD,
  449. 0x60000040, 0x00000000,
  450. 0x48000000, 0x00000000,
  451. 0x98080000, DISC_AFTER_CMD
  452. };
  453. ULONG msg3[] = {
  454. 0x78340700, 0x00000000,
  455. 0x1F000007, 0x0C ,
  456. 0x808C0001, 0x00000020,
  457. 0x980C0002, SAVDATP_AFTER_DATA,
  458. 0x980C0003, RESTORE_POINTER,
  459. 0x808C0004, 0x00000020,
  460. 0x98080000, BAD_MSG_AFTER_DATA,
  461. 0x60000040, 0x00000000,
  462. 0x1F000000, 0x14 ,
  463. 0x98080000, EXTMSG_AFTER_DATA,
  464. 0x60000040, 0x00000000,
  465. 0x48000000, 0x00000000,
  466. 0x98080000, DISC_AFTER_DATA
  467. };
  468. ULONG selectAddr[] = {
  469. 0x98080000, SELECT_AS_TARGET
  470. };
  471. ULONG ackMsg1[] = {
  472. 0x60000040, 0x00000000,
  473. 0x870B0000, (UINT)msg1,
  474. 0x80080000, (UINT) asortPh
  475. };
  476. ULONG ackMsg3[] = {
  477. 0x60000040, 0x00000000,
  478. 0x870B0000, (UINT)msg3,
  479. 0x80080000, (UINT) checkPhData
  480. };
  481. ULONG checkPhData[] = {
  482. 0x810B0000, (UINT)inputData,
  483. 0x800A0000, (UINT)outputData,
  484. 0x860A0000, (UINT)msgOut3,
  485. 0x830A0000, (UINT)endTransact,
  486. 0x820A0000, (UINT) contTransact,
  487. 0x870A0000, (UINT)msg3,
  488. 0x840A0000, (UINT)reserOutPh,
  489. 0x850A0000, (UINT)reserInPh,
  490. 0x98080000, PH_UNKNOWN
  491. };
  492. ULONG ackAtnMsg[] = {
  493. 0x58000008, 0x00000000,
  494. 0x60000040, 0x00000000,
  495. 0x78340600, 0x00000000,
  496. 0x1E000006, 0x04 ,
  497. 0x86030000, (UINT) asortPh,
  498. 0x98080000, PH_UNKNOWN
  499. };
  500. ULONG asortPh[] = {
  501. 0x60000008, 0x00000000,
  502. 0x810B0000, (UINT)inputData,
  503. 0x800A0000, (UINT)outputData,
  504. 0x860A0000, (UINT)msgOut1,
  505. 0x830A0000, (UINT)endTransact,
  506. 0x820A0000, (UINT) contTransact,
  507. 0x870A0000, (UINT)msg1,
  508. 0x840A0000, (UINT)reserOutPh,
  509. 0x850A0000, (UINT)reserInPh,
  510. 0x98080000, PH_UNKNOWN
  511. };
  512. ULONG reserOutPh[] = {
  513. 0x78340400, 0x00000000,
  514. 0x98080000, RES_OUT_DETECTED
  515. };
  516. ULONG reserInPh[] = {
  517. 0x78340500, 0x00000000,
  518. 0x98080000, RES_IN_DETECTED
  519. };
  520. ULONG endAbort[] = {
  521. 0x58000008, 0x00000000,
  522. 0x60000040, 0x00000000,
  523. 0x78340600, 0x00000000,
  524. 0x1E000006, 0x04 ,
  525. 0x48000000, 0x00000000,
  526. 0x98080000, ABORT_CLEAR_END
  527. };
  528. ULONG relocation[] = {
  529. 0x98080000, (UINT)last_datap,
  530. 0x0F000001, sizeof(last_datap),
  531. 0x98080000, (UINT)waitSelect,
  532. 0x0F000001, sizeof(waitSelect),
  533. 0x80080000, 0x00000014,
  534. 0x80080000, 0x0000001C,
  535. 0x98080000, (UINT)reselect,
  536. 0x0F000001, sizeof(reselect),
  537. 0x80080000, 0x0000001C,
  538. 0x98080000, (UINT)checkNewCmd,
  539. 0x0F000001, sizeof(checkNewCmd),
  540. 0x80080000, 0x0000000C,
  541. 0x80080000, 0x0000001C,
  542. 0x80080000, 0x00000024,
  543. 0x98080000, (UINT)startNewCmd,
  544. 0x0F000001, sizeof(startNewCmd),
  545. 0x80080000, 0x0000001C,
  546. 0x98080000, (UINT)reselSelect,
  547. 0x0F000001, sizeof(reselSelect),
  548. 0x98080000, (UINT)selWithAtn,
  549. 0x0F000001, sizeof(selWithAtn),
  550. 0x80080000, 0x00000014,
  551. 0x80080000, 0x0000001C,
  552. 0x80080000, 0x0000001C,
  553. 0x80080000, 0x00000024,
  554. 0x98080000, (UINT)selWithoutAtn,
  555. 0x0F000001, sizeof(selWithoutAtn),
  556. 0x80080000, 0x00000014,
  557. 0x80080000, 0x0000001C,
  558. 0x98080000, (UINT)contTransact,
  559. 0x0F000001, sizeof(contTransact),
  560. 0x80080000, 0x00000004,
  561. 0x80080000, 0x0000000C,
  562. 0x80080000, 0x00000014,
  563. 0x80080000, 0x0000001C,
  564. 0x80080000, 0x0000003C,
  565. 0x80080000, 0x00000044,
  566. 0x80080000, 0x0000004C,
  567. 0x80080000, 0x00000054,
  568. 0x80080000, 0x0000005C,
  569. 0x98080000, (UINT)endTransact,
  570. 0x0F000001, sizeof(endTransact),
  571. 0x80080000, 0x00000014,
  572. 0x80080000, 0x0000002C,
  573. 0x98080000, (UINT)msgOut1,
  574. 0x0F000001, sizeof(msgOut1),
  575. 0x80080000, 0x0000000C,
  576. 0x80080000, 0x00000014,
  577. 0x80080000, 0x0000001C,
  578. 0x80080000, 0x00000024,
  579. 0x80080000, 0x0000002C,
  580. 0x80080000, 0x00000034,
  581. 0x98080000, (UINT)msgOut3,
  582. 0x0F000001, sizeof(msgOut3),
  583. 0x80080000, 0x0000000C,
  584. 0x80080000, 0x00000014,
  585. 0x80080000, 0x0000001C,
  586. 0x80080000, 0x00000024,
  587. 0x80080000, 0x0000002C,
  588. 0x80080000, 0x00000034,
  589. 0x98080000, (UINT)outputData,
  590. 0x0F000001, sizeof(outputData),
  591. 0x80080000, 0x0000000C,
  592. 0x98080000, (UINT)checkOut,
  593. 0x0F000001, sizeof(checkOut),
  594. 0x80080000, 0x00000004,
  595. 0x80080000, 0x0000000C,
  596. 0x80080000, 0x00000014,
  597. 0x98080000, (UINT)inputData,
  598. 0x0F000001, sizeof(inputData),
  599. 0x80080000, 0x0000000C,
  600. 0x80080000, 0x00000014,
  601. 0x98080000, (UINT)msg1,
  602. 0x0F000001, sizeof(msg1),
  603. 0x80080000, 0x0000000C,
  604. 0x80080000, 0x0000004C,
  605. 0x98080000, (UINT)msg2,
  606. 0x0F000001, sizeof(msg2),
  607. 0x80080000, 0x0000000C,
  608. 0x80080000, 0x00000044,
  609. 0x98080000, (UINT)msg3,
  610. 0x0F000001, sizeof(msg3),
  611. 0x80080000, 0x0000000C,
  612. 0x80080000, 0x00000044,
  613. 0x98080000, (UINT)selectAddr,
  614. 0x0F000001, sizeof(selectAddr),
  615. 0x98080000, (UINT)ackMsg1,
  616. 0x0F000001, sizeof(ackMsg1),
  617. 0x80080000, 0x0000000C,
  618. 0x80080000, 0x00000014,
  619. 0x98080000, (UINT)ackMsg3,
  620. 0x0F000001, sizeof(ackMsg3),
  621. 0x80080000, 0x0000000C,
  622. 0x80080000, 0x00000014,
  623. 0x98080000, (UINT)checkPhData,
  624. 0x0F000001, sizeof(checkPhData),
  625. 0x80080000, 0x00000004,
  626. 0x80080000, 0x0000000C,
  627. 0x80080000, 0x00000014,
  628. 0x80080000, 0x0000001C,
  629. 0x80080000, 0x00000024,
  630. 0x80080000, 0x0000002C,
  631. 0x80080000, 0x00000034,
  632. 0x80080000, 0x0000003C,
  633. 0x98080000, (UINT)ackAtnMsg,
  634. 0x0F000001, sizeof(ackAtnMsg),
  635. 0x80080000, 0x0000001C,
  636. 0x80080000, 0x00000024,
  637. 0x98080000, (UINT)asortPh,
  638. 0x0F000001, sizeof(asortPh),
  639. 0x80080000, 0x0000000C,
  640. 0x80080000, 0x00000014,
  641. 0x80080000, 0x0000001C,
  642. 0x80080000, 0x00000024,
  643. 0x80080000, 0x0000002C,
  644. 0x80080000, 0x00000034,
  645. 0x80080000, 0x0000003C,
  646. 0x80080000, 0x00000044,
  647. 0x98080000, (UINT)reserOutPh,
  648. 0x0F000001, sizeof(reserOutPh),
  649. 0x98080000, (UINT)reserInPh,
  650. 0x0F000001, sizeof(reserInPh),
  651. 0x98080000, (UINT)endAbort,
  652. 0x0F000001, sizeof(endAbort),
  653. 0x80080000, 0x0000001C,
  654. 0x60000040, 0x00000000
  655. };