siop_script.ss revision 1.6 1 1.6 maya ; $NetBSD: siop_script.ss,v 1.6 2016/12/12 15:58:44 maya Exp $
2 1.2 chopps
3 1.2 chopps ;
4 1.2 chopps ; Copyright (c) 1995 Michael L. Hitch
5 1.2 chopps ; All rights reserved.
6 1.2 chopps ;
7 1.2 chopps ; Redistribution and use in source and binary forms, with or without
8 1.2 chopps ; modification, are permitted provided that the following conditions
9 1.2 chopps ; are met:
10 1.2 chopps ; 1. Redistributions of source code must retain the above copyright
11 1.2 chopps ; notice, this list of conditions and the following disclaimer.
12 1.2 chopps ; 2. Redistributions in binary form must reproduce the above copyright
13 1.2 chopps ; notice, this list of conditions and the following disclaimer in the
14 1.2 chopps ; documentation and/or other materials provided with the distribution.
15 1.2 chopps ;
16 1.2 chopps ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 1.2 chopps ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 1.2 chopps ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 1.2 chopps ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 1.2 chopps ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 1.2 chopps ; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 1.2 chopps ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 1.2 chopps ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 1.2 chopps ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 1.2 chopps ; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 1.2 chopps ;
27 1.2 chopps
28 1.1 chopps ; NCR 53c710 script
29 1.1 chopps ;
30 1.4 mhitch ARCH 710
31 1.4 mhitch ;
32 1.1 chopps ABSOLUTE ds_Device = 0
33 1.1 chopps ABSOLUTE ds_MsgOut = ds_Device + 4
34 1.1 chopps ABSOLUTE ds_Cmd = ds_MsgOut + 8
35 1.1 chopps ABSOLUTE ds_Status = ds_Cmd + 8
36 1.1 chopps ABSOLUTE ds_Msg = ds_Status + 8
37 1.1 chopps ABSOLUTE ds_MsgIn = ds_Msg + 8
38 1.1 chopps ABSOLUTE ds_ExtMsg = ds_MsgIn + 8
39 1.1 chopps ABSOLUTE ds_SyncMsg = ds_ExtMsg + 8
40 1.1 chopps ABSOLUTE ds_Data1 = ds_SyncMsg + 8
41 1.1 chopps ABSOLUTE ds_Data2 = ds_Data1 + 8
42 1.1 chopps ABSOLUTE ds_Data3 = ds_Data2 + 8
43 1.1 chopps ABSOLUTE ds_Data4 = ds_Data3 + 8
44 1.1 chopps ABSOLUTE ds_Data5 = ds_Data4 + 8
45 1.1 chopps ABSOLUTE ds_Data6 = ds_Data5 + 8
46 1.1 chopps ABSOLUTE ds_Data7 = ds_Data6 + 8
47 1.1 chopps ABSOLUTE ds_Data8 = ds_Data7 + 8
48 1.1 chopps ABSOLUTE ds_Data9 = ds_Data8 + 8
49 1.1 chopps
50 1.1 chopps ABSOLUTE ok = 0xff00
51 1.1 chopps ABSOLUTE err1 = 0xff01
52 1.1 chopps ABSOLUTE err2 = 0xff02
53 1.1 chopps ABSOLUTE err3 = 0xff03
54 1.1 chopps ABSOLUTE err4 = 0xff04
55 1.1 chopps ABSOLUTE err5 = 0xff05
56 1.1 chopps ABSOLUTE err6 = 0xff06
57 1.1 chopps ABSOLUTE err7 = 0xff07
58 1.1 chopps ABSOLUTE err8 = 0xff08
59 1.1 chopps ABSOLUTE err9 = 0xff09
60 1.1 chopps ABSOLUTE err10 = 0xff0a
61 1.4 mhitch ABSOLUTE err11 = 0xff0b
62 1.1 chopps
63 1.1 chopps ENTRY scripts
64 1.1 chopps ENTRY switch
65 1.1 chopps ENTRY wait_reselect
66 1.3 chopps ENTRY dataout
67 1.3 chopps ENTRY datain
68 1.4 mhitch ENTRY clear_ack
69 1.1 chopps
70 1.1 chopps PROC scripts:
71 1.1 chopps
72 1.1 chopps scripts:
73 1.1 chopps
74 1.1 chopps SELECT ATN FROM ds_Device, REL(reselect)
75 1.1 chopps ;
76 1.1 chopps switch:
77 1.1 chopps JUMP REL(msgin), WHEN MSG_IN
78 1.1 chopps JUMP REL(msgout), IF MSG_OUT
79 1.1 chopps JUMP REL(command_phase), IF CMD
80 1.1 chopps JUMP REL(dataout), IF DATA_OUT
81 1.1 chopps JUMP REL(datain), IF DATA_IN
82 1.1 chopps JUMP REL(end), IF STATUS
83 1.1 chopps
84 1.3 chopps INT err5 ; Unrecognized phase
85 1.1 chopps
86 1.1 chopps msgin:
87 1.1 chopps MOVE FROM ds_MsgIn, WHEN MSG_IN
88 1.1 chopps JUMP REL(ext_msg), IF 0x01 ; extended message
89 1.1 chopps JUMP REL(disc), IF 0x04 ; disconnect message
90 1.3 chopps JUMP REL(msg_sdp), IF 0x02 ; save data pointers
91 1.3 chopps JUMP REL(msg_rej), IF 0x07 ; message reject
92 1.3 chopps JUMP REL(msg_rdp), IF 0x03 ; restore data pointers
93 1.3 chopps INT err6 ; unrecognized message
94 1.1 chopps
95 1.4 mhitch msg_rej:
96 1.4 mhitch ; Do we need to interrupt host here to let it handle the reject?
97 1.3 chopps msg_rdp:
98 1.4 mhitch clear_ack:
99 1.3 chopps CLEAR ACK
100 1.1 chopps CLEAR ATN
101 1.1 chopps JUMP REL(switch)
102 1.1 chopps
103 1.1 chopps ext_msg:
104 1.3 chopps CLEAR ACK
105 1.1 chopps MOVE FROM ds_ExtMsg, WHEN MSG_IN
106 1.1 chopps JUMP REL(sync_msg), IF 0x03
107 1.3 chopps int err7 ; extended message not SDTR
108 1.1 chopps
109 1.1 chopps sync_msg:
110 1.1 chopps CLEAR ACK
111 1.1 chopps MOVE FROM ds_SyncMsg, WHEN MSG_IN
112 1.4 mhitch int err11 ; Let host handle the message
113 1.4 mhitch ; If we continue from the interrupt, the host has set up a response
114 1.4 mhitch ; message to be sent. Set ATN, clear ACK, and continue.
115 1.4 mhitch SET ATN
116 1.1 chopps CLEAR ACK
117 1.1 chopps JUMP REL(switch)
118 1.1 chopps
119 1.1 chopps disc:
120 1.3 chopps CLEAR ACK
121 1.3 chopps WAIT DISCONNECT
122 1.3 chopps
123 1.3 chopps int err2 ; signal disconnect w/o save DP
124 1.3 chopps
125 1.3 chopps msg_sdp:
126 1.3 chopps CLEAR ACK ; acknowledge message
127 1.3 chopps JUMP REL(switch), WHEN NOT MSG_IN
128 1.3 chopps MOVE FROM ds_ExtMsg, WHEN MSG_IN
129 1.3 chopps INT err8, IF NOT 0x04 ; interrupt if not disconnect
130 1.3 chopps CLEAR ACK
131 1.1 chopps WAIT DISCONNECT
132 1.1 chopps
133 1.3 chopps INT err1 ; signal disconnect
134 1.1 chopps
135 1.3 chopps reselect:
136 1.1 chopps wait_reselect:
137 1.1 chopps WAIT RESELECT REL(select_adr)
138 1.3 chopps MOVE LCRC to SFBR ; Save reselect ID
139 1.3 chopps MOVE SFBR to SCRATCH0
140 1.1 chopps
141 1.3 chopps INT err9, WHEN NOT MSG_IN ; didn't get IDENTIFY
142 1.1 chopps MOVE FROM ds_Msg, WHEN MSG_IN
143 1.3 chopps INT err3 ; let host know about reconnect
144 1.6 maya CLEAR ACK ; acknowledge the message
145 1.1 chopps JUMP REL(switch)
146 1.1 chopps
147 1.3 chopps
148 1.3 chopps select_adr:
149 1.3 chopps MOVE SCNTL1 & 0x10 to SFBR ; get connected status
150 1.3 chopps INT err4, IF 0x00 ; tell host if not connected
151 1.3 chopps MOVE CTEST2 & 0x40 to SFBR ; clear Sig_P
152 1.3 chopps JUMP REL(wait_reselect) ; and try reselect again
153 1.3 chopps
154 1.1 chopps msgout:
155 1.1 chopps MOVE FROM ds_MsgOut, WHEN MSG_OUT
156 1.1 chopps JUMP REL(switch)
157 1.1 chopps
158 1.1 chopps command_phase:
159 1.1 chopps CLEAR ATN
160 1.1 chopps MOVE FROM ds_Cmd, WHEN CMD
161 1.1 chopps JUMP REL(switch)
162 1.1 chopps
163 1.1 chopps dataout:
164 1.1 chopps MOVE FROM ds_Data1, WHEN DATA_OUT
165 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
166 1.1 chopps MOVE FROM ds_Data2, WHEN DATA_OUT
167 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
168 1.1 chopps MOVE FROM ds_Data3, WHEN DATA_OUT
169 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
170 1.1 chopps MOVE FROM ds_Data4, WHEN DATA_OUT
171 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
172 1.1 chopps MOVE FROM ds_Data5, WHEN DATA_OUT
173 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
174 1.1 chopps MOVE FROM ds_Data6, WHEN DATA_OUT
175 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
176 1.1 chopps MOVE FROM ds_Data7, WHEN DATA_OUT
177 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
178 1.1 chopps MOVE FROM ds_Data8, WHEN DATA_OUT
179 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT
180 1.1 chopps MOVE FROM ds_Data9, WHEN DATA_OUT
181 1.1 chopps CALL REL(switch)
182 1.1 chopps
183 1.1 chopps datain:
184 1.1 chopps MOVE FROM ds_Data1, WHEN DATA_IN
185 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
186 1.1 chopps MOVE FROM ds_Data2, WHEN DATA_IN
187 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
188 1.1 chopps MOVE FROM ds_Data3, WHEN DATA_IN
189 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
190 1.1 chopps MOVE FROM ds_Data4, WHEN DATA_IN
191 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
192 1.1 chopps MOVE FROM ds_Data5, WHEN DATA_IN
193 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
194 1.1 chopps MOVE FROM ds_Data6, WHEN DATA_IN
195 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
196 1.1 chopps MOVE FROM ds_Data7, WHEN DATA_IN
197 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
198 1.1 chopps MOVE FROM ds_Data8, WHEN DATA_IN
199 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN
200 1.1 chopps MOVE FROM ds_Data9, WHEN DATA_IN
201 1.1 chopps CALL REL(switch)
202 1.1 chopps
203 1.1 chopps end:
204 1.1 chopps MOVE FROM ds_Status, WHEN STATUS
205 1.3 chopps int err10, WHEN NOT MSG_IN ; status not followed by msg
206 1.1 chopps MOVE FROM ds_Msg, WHEN MSG_IN
207 1.1 chopps CLEAR ACK
208 1.1 chopps WAIT DISCONNECT
209 1.3 chopps INT ok ; signal completion
210 1.1 chopps JUMP REL(wait_reselect)
211