Home | History | Annotate | Line # | Download | only in dev
siop_script.ss revision 1.1
      1 ; NCR 53c710 script
      2 ;
      3 ABSOLUTE ds_Device	= 0
      4 ABSOLUTE ds_MsgOut 	= ds_Device + 4
      5 ABSOLUTE ds_Cmd		= ds_MsgOut + 8
      6 ABSOLUTE ds_Status	= ds_Cmd + 8
      7 ABSOLUTE ds_Msg		= ds_Status + 8
      8 ABSOLUTE ds_MsgIn	= ds_Msg + 8
      9 ABSOLUTE ds_ExtMsg	= ds_MsgIn + 8
     10 ABSOLUTE ds_SyncMsg	= ds_ExtMsg + 8
     11 ABSOLUTE ds_Data1	= ds_SyncMsg + 8
     12 ABSOLUTE ds_Data2	= ds_Data1 + 8
     13 ABSOLUTE ds_Data3	= ds_Data2 + 8
     14 ABSOLUTE ds_Data4	= ds_Data3 + 8
     15 ABSOLUTE ds_Data5	= ds_Data4 + 8
     16 ABSOLUTE ds_Data6	= ds_Data5 + 8
     17 ABSOLUTE ds_Data7	= ds_Data6 + 8
     18 ABSOLUTE ds_Data8	= ds_Data7 + 8
     19 ABSOLUTE ds_Data9	= ds_Data8 + 8
     20 
     21 ABSOLUTE ok		= 0xff00
     22 ABSOLUTE err1		= 0xff01
     23 ABSOLUTE err2		= 0xff02
     24 ABSOLUTE err3		= 0xff03
     25 ABSOLUTE err4		= 0xff04
     26 ABSOLUTE err5		= 0xff05
     27 ABSOLUTE err6		= 0xff06
     28 ABSOLUTE err7		= 0xff07
     29 ABSOLUTE err8		= 0xff08
     30 ABSOLUTE err9		= 0xff09
     31 ABSOLUTE err10		= 0xff0a
     32 
     33 ENTRY	scripts
     34 ENTRY	switch
     35 ENTRY	wait_reselect
     36 
     37 PROC	scripts:
     38 
     39 scripts:
     40 
     41 	SELECT ATN FROM ds_Device, REL(reselect)
     42 ;
     43 switch:
     44 	JUMP REL(msgin), WHEN MSG_IN
     45 	JUMP REL(msgout), IF MSG_OUT
     46 	JUMP REL(command_phase), IF CMD
     47 	JUMP REL(dataout), IF DATA_OUT
     48 	JUMP REL(datain), IF DATA_IN
     49 	JUMP REL(end), IF STATUS
     50 
     51 	INT err1
     52 
     53 msgin:
     54 	MOVE FROM ds_MsgIn, WHEN MSG_IN
     55 	CLEAR ACK
     56 	JUMP REL(ext_msg), IF 0x01	; extended message
     57 	JUMP REL(disc), IF 0x04		; disconnect message
     58 	JUMP REL(switch), IF 0x02	; ignore save data pointers
     59 	JUMP REL(msg_rej), IF 0x07	; ignore message reject
     60 	JUMP REL(switch), IF 0x03	; ignore restore data pointers
     61 	INT err2
     62 
     63 msg_rej:
     64 	CLEAR ATN
     65 	JUMP REL(switch)
     66 
     67 ext_msg:
     68 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
     69 	JUMP REL(sync_msg), IF 0x03
     70 	int err3
     71 
     72 sync_msg:
     73 	CLEAR ACK
     74 	MOVE FROM ds_SyncMsg, WHEN MSG_IN
     75 	CLEAR ACK
     76 	JUMP REL(switch)
     77 
     78 disc:
     79 	WAIT DISCONNECT
     80 
     81 	INT err10			; let host know about disconnect
     82 
     83 wait_reselect:
     84 	WAIT RESELECT REL(select_adr)
     85 
     86 	INT err4, WHEN NOT MSG_IN
     87 	MOVE FROM ds_Msg, WHEN MSG_IN
     88 	CLEAR ACK
     89 	INT err9			; let host know about reconnect
     90 	JUMP REL(switch)
     91 
     92 msgout:
     93 	MOVE FROM ds_MsgOut, WHEN MSG_OUT
     94 	JUMP REL(switch)
     95 
     96 command_phase:
     97 	CLEAR ATN
     98 	MOVE FROM ds_Cmd, WHEN CMD
     99 	JUMP REL(switch)
    100 
    101 dataout:
    102 	MOVE FROM ds_Data1, WHEN DATA_OUT
    103 	CALL REL(switch), WHEN NOT DATA_OUT
    104 	MOVE FROM ds_Data2, WHEN DATA_OUT
    105 	CALL REL(switch), WHEN NOT DATA_OUT
    106 	MOVE FROM ds_Data3, WHEN DATA_OUT
    107 	CALL REL(switch), WHEN NOT DATA_OUT
    108 	MOVE FROM ds_Data4, WHEN DATA_OUT
    109 	CALL REL(switch), WHEN NOT DATA_OUT
    110 	MOVE FROM ds_Data5, WHEN DATA_OUT
    111 	CALL REL(switch), WHEN NOT DATA_OUT
    112 	MOVE FROM ds_Data6, WHEN DATA_OUT
    113 	CALL REL(switch), WHEN NOT DATA_OUT
    114 	MOVE FROM ds_Data7, WHEN DATA_OUT
    115 	CALL REL(switch), WHEN NOT DATA_OUT
    116 	MOVE FROM ds_Data8, WHEN DATA_OUT
    117 	CALL REL(switch), WHEN NOT DATA_OUT
    118 	MOVE FROM ds_Data9, WHEN DATA_OUT
    119 	CALL REL(switch)
    120 
    121 datain:
    122 	MOVE FROM ds_Data1, WHEN DATA_IN
    123 	CALL REL(switch), WHEN NOT DATA_IN
    124 	MOVE FROM ds_Data2, WHEN DATA_IN
    125 	CALL REL(switch), WHEN NOT DATA_IN
    126 	MOVE FROM ds_Data3, WHEN DATA_IN
    127 	CALL REL(switch), WHEN NOT DATA_IN
    128 	MOVE FROM ds_Data4, WHEN DATA_IN
    129 	CALL REL(switch), WHEN NOT DATA_IN
    130 	MOVE FROM ds_Data5, WHEN DATA_IN
    131 	CALL REL(switch), WHEN NOT DATA_IN
    132 	MOVE FROM ds_Data6, WHEN DATA_IN
    133 	CALL REL(switch), WHEN NOT DATA_IN
    134 	MOVE FROM ds_Data7, WHEN DATA_IN
    135 	CALL REL(switch), WHEN NOT DATA_IN
    136 	MOVE FROM ds_Data8, WHEN DATA_IN
    137 	CALL REL(switch), WHEN NOT DATA_IN
    138 	MOVE FROM ds_Data9, WHEN DATA_IN
    139 	CALL REL(switch)
    140 
    141 end:
    142 	MOVE FROM ds_Status, WHEN STATUS
    143 	int err5, WHEN NOT MSG_IN
    144 	MOVE FROM ds_Msg, WHEN MSG_IN
    145 	CLEAR ACK
    146 	WAIT DISCONNECT
    147 	INT ok
    148 	JUMP REL(wait_reselect)
    149 
    150 reselect:
    151 	WAIT RESELECT REL(select_adr)
    152 	INT err6
    153 
    154 	INT err4, WHEN NOT MSG_IN
    155 	MOVE FROM ds_Msg, WHEN MSG_IN
    156 	CLEAR ACK
    157 	JUMP REL(switch)
    158 
    159 select_adr:
    160 	MOVE CTEST2 & 0x40 to SFBR	; get Sig_P
    161 	INT err7
    162 	JUMP REL(scripts)
    163