oosiop.ss revision 1.1 1 1.1 fredette ; $NetBSD: oosiop.ss,v 1.1 2001/12/05 18:27:13 fredette Exp $
2 1.1 fredette
3 1.1 fredette ;
4 1.1 fredette ; Copyright (c) 2001 Matt Fredette
5 1.1 fredette ; Copyright (c) 1995 Michael L. Hitch
6 1.1 fredette ; All rights reserved.
7 1.1 fredette ;
8 1.1 fredette ; Redistribution and use in source and binary forms, with or without
9 1.1 fredette ; modification, are permitted provided that the following conditions
10 1.1 fredette ; are met:
11 1.1 fredette ; 1. Redistributions of source code must retain the above copyright
12 1.1 fredette ; notice, this list of conditions and the following disclaimer.
13 1.1 fredette ; 2. Redistributions in binary form must reproduce the above copyright
14 1.1 fredette ; notice, this list of conditions and the following disclaimer in the
15 1.1 fredette ; documentation and/or other materials provided with the distribution.
16 1.1 fredette ; 3. All advertising materials mentioning features or use of this software
17 1.1 fredette ; must display the following acknowledgement:
18 1.1 fredette ; This product includes software developed by Michael L. Hitch.
19 1.1 fredette ; 4. The name of the author may not be used to endorse or promote products
20 1.1 fredette ; derived from this software without specific prior written permission
21 1.1 fredette ;
22 1.1 fredette ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 1.1 fredette ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 1.1 fredette ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 1.1 fredette ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 1.1 fredette ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 1.1 fredette ; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 1.1 fredette ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 1.1 fredette ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 1.1 fredette ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 1.1 fredette ; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 1.1 fredette ;
33 1.1 fredette
34 1.1 fredette ; NCR 53c700 script
35 1.1 fredette ;
36 1.1 fredette ARCH 700
37 1.1 fredette ;
38 1.1 fredette EXTERNAL ds_Device
39 1.1 fredette EXTERNAL ds_MsgOut
40 1.1 fredette EXTERNAL ds_Cmd
41 1.1 fredette EXTERNAL ds_Status
42 1.1 fredette EXTERNAL ds_Msg
43 1.1 fredette EXTERNAL ds_MsgIn
44 1.1 fredette EXTERNAL ds_ExtMsg
45 1.1 fredette EXTERNAL ds_SyncMsg
46 1.1 fredette EXTERNAL ds_Data1
47 1.1 fredette
48 1.1 fredette
49 1.1 fredette ABSOLUTE ok = 0xff00
50 1.1 fredette ABSOLUTE int_disc = 0xff01
51 1.1 fredette ABSOLUTE int_disc_wodp = 0xff02
52 1.1 fredette ABSOLUTE int_reconnect = 0xff03
53 1.1 fredette ABSOLUTE int_connect = 0xff04
54 1.1 fredette ABSOLUTE int_phase = 0xff05
55 1.1 fredette ABSOLUTE int_msgin = 0xff06
56 1.1 fredette ABSOLUTE int_extmsg = 0xff07
57 1.1 fredette ABSOLUTE int_msgsdp = 0xff08
58 1.1 fredette ABSOLUTE int_identify = 0xff09
59 1.1 fredette ABSOLUTE int_status = 0xff0a
60 1.1 fredette ABSOLUTE int_syncmsg = 0xff0b
61 1.1 fredette
62 1.1 fredette ENTRY scripts
63 1.1 fredette ENTRY switch
64 1.1 fredette ENTRY wait_reselect
65 1.1 fredette ENTRY dataout
66 1.1 fredette ENTRY datain
67 1.1 fredette ENTRY clear_ack
68 1.1 fredette
69 1.1 fredette PROC oosiop_script:
70 1.1 fredette
71 1.1 fredette scripts:
72 1.1 fredette
73 1.1 fredette SELECT ATN ds_Device, reselect
74 1.1 fredette ;
75 1.1 fredette switch:
76 1.1 fredette JUMP msgin, WHEN MSG_IN
77 1.1 fredette JUMP msgout, IF MSG_OUT
78 1.1 fredette JUMP command_phase, IF CMD
79 1.1 fredette JUMP dataout, IF DATA_OUT
80 1.1 fredette JUMP datain, IF DATA_IN
81 1.1 fredette JUMP end, IF STATUS
82 1.1 fredette
83 1.1 fredette INT int_phase ; Unrecognized phase
84 1.1 fredette
85 1.1 fredette msgin:
86 1.1 fredette MOVE 0, ds_MsgIn, WHEN MSG_IN
87 1.1 fredette JUMP ext_msg, IF 0x01 ; extended message
88 1.1 fredette JUMP disc, IF 0x04 ; disconnect message
89 1.1 fredette JUMP msg_sdp, IF 0x02 ; save data pointers
90 1.1 fredette JUMP msg_rej, IF 0x07 ; message reject
91 1.1 fredette JUMP msg_rdp, IF 0x03 ; restore data pointers
92 1.1 fredette INT int_msgin ; unrecognized message
93 1.1 fredette
94 1.1 fredette msg_rej:
95 1.1 fredette ; Do we need to interrupt host here to let it handle the reject?
96 1.1 fredette msg_rdp:
97 1.1 fredette clear_ack:
98 1.1 fredette CLEAR ACK
99 1.1 fredette CLEAR ATN
100 1.1 fredette JUMP switch
101 1.1 fredette
102 1.1 fredette ext_msg:
103 1.1 fredette CLEAR ACK
104 1.1 fredette MOVE 0, ds_ExtMsg, WHEN MSG_IN
105 1.1 fredette JUMP sync_msg, IF 0x03
106 1.1 fredette int int_extmsg ; extended message not SDTR
107 1.1 fredette
108 1.1 fredette sync_msg:
109 1.1 fredette CLEAR ACK
110 1.1 fredette MOVE 0, ds_SyncMsg, WHEN MSG_IN
111 1.1 fredette int int_syncmsg ; Let host handle the message
112 1.1 fredette ; If we continue from the interrupt, the host has set up a response
113 1.1 fredette ; message to be sent. Set ATN, clear ACK, and continue.
114 1.1 fredette SET ATN
115 1.1 fredette CLEAR ACK
116 1.1 fredette JUMP switch
117 1.1 fredette
118 1.1 fredette disc:
119 1.1 fredette CLEAR ACK
120 1.1 fredette WAIT DISCONNECT
121 1.1 fredette
122 1.1 fredette int int_disc_wodp ; signal disconnect w/o save DP
123 1.1 fredette
124 1.1 fredette msg_sdp:
125 1.1 fredette CLEAR ACK ; acknowledge message
126 1.1 fredette JUMP switch, WHEN NOT MSG_IN
127 1.1 fredette MOVE 0, ds_ExtMsg, WHEN MSG_IN
128 1.1 fredette INT int_msgsdp, IF NOT 0x04 ; interrupt if not disconnect
129 1.1 fredette CLEAR ACK
130 1.1 fredette WAIT DISCONNECT
131 1.1 fredette
132 1.1 fredette INT int_disc ; signal disconnect
133 1.1 fredette
134 1.1 fredette reselect:
135 1.1 fredette wait_reselect:
136 1.1 fredette WAIT RESELECT select_adr
137 1.1 fredette ; NB: these NOPs are CRITICAL to preserve the 1:1
138 1.1 fredette ; correspondence between instructions in this script
139 1.1 fredette ; and instructions in the osiop (53c710) script:
140 1.1 fredette NOP
141 1.1 fredette NOP ; reselect ID already in SFBR
142 1.1 fredette
143 1.1 fredette INT int_identify, WHEN NOT MSG_IN
144 1.1 fredette MOVE 0, ds_Msg, WHEN MSG_IN
145 1.1 fredette INT int_reconnect ; let host know about reconnect
146 1.1 fredette CLEAR ACK ; acknowlege the message
147 1.1 fredette JUMP switch
148 1.1 fredette
149 1.1 fredette select_adr:
150 1.1 fredette MOVE SCNTL1 & 0x10 to SFBR ; get connected status
151 1.1 fredette INT int_connect, IF 0x00 ; tell host if not connected
152 1.1 fredette NOP ; Sig_P doesn't exist on the 53c700
153 1.1 fredette JUMP wait_reselect ; and try reselect again
154 1.1 fredette
155 1.1 fredette msgout:
156 1.1 fredette MOVE 0, ds_MsgOut, WHEN MSG_OUT
157 1.1 fredette JUMP switch
158 1.1 fredette
159 1.1 fredette command_phase:
160 1.1 fredette CLEAR ATN
161 1.1 fredette MOVE 0, ds_Cmd, WHEN CMD
162 1.1 fredette JUMP switch
163 1.1 fredette
164 1.1 fredette dataout:
165 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
166 1.1 fredette CALL switch, WHEN NOT DATA_OUT
167 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
168 1.1 fredette CALL switch, WHEN NOT DATA_OUT
169 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
170 1.1 fredette CALL switch, WHEN NOT DATA_OUT
171 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
172 1.1 fredette CALL switch, WHEN NOT DATA_OUT
173 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
174 1.1 fredette CALL switch, WHEN NOT DATA_OUT
175 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
176 1.1 fredette CALL switch, WHEN NOT DATA_OUT
177 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
178 1.1 fredette CALL switch, WHEN NOT DATA_OUT
179 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
180 1.1 fredette CALL switch, WHEN NOT DATA_OUT
181 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
182 1.1 fredette CALL switch, WHEN NOT DATA_OUT
183 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
184 1.1 fredette CALL switch, WHEN NOT DATA_OUT
185 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
186 1.1 fredette CALL switch, WHEN NOT DATA_OUT
187 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
188 1.1 fredette CALL switch, WHEN NOT DATA_OUT
189 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
190 1.1 fredette CALL switch, WHEN NOT DATA_OUT
191 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
192 1.1 fredette CALL switch, WHEN NOT DATA_OUT
193 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
194 1.1 fredette CALL switch, WHEN NOT DATA_OUT
195 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
196 1.1 fredette CALL switch, WHEN NOT DATA_OUT
197 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_OUT
198 1.1 fredette CALL switch
199 1.1 fredette
200 1.1 fredette datain:
201 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
202 1.1 fredette CALL switch, WHEN NOT DATA_IN
203 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
204 1.1 fredette CALL switch, WHEN NOT DATA_IN
205 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
206 1.1 fredette CALL switch, WHEN NOT DATA_IN
207 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
208 1.1 fredette CALL switch, WHEN NOT DATA_IN
209 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
210 1.1 fredette CALL switch, WHEN NOT DATA_IN
211 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
212 1.1 fredette CALL switch, WHEN NOT DATA_IN
213 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
214 1.1 fredette CALL switch, WHEN NOT DATA_IN
215 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
216 1.1 fredette CALL switch, WHEN NOT DATA_IN
217 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
218 1.1 fredette CALL switch, WHEN NOT DATA_IN
219 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
220 1.1 fredette CALL switch, WHEN NOT DATA_IN
221 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
222 1.1 fredette CALL switch, WHEN NOT DATA_IN
223 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
224 1.1 fredette CALL switch, WHEN NOT DATA_IN
225 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
226 1.1 fredette CALL switch, WHEN NOT DATA_IN
227 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
228 1.1 fredette CALL switch, WHEN NOT DATA_IN
229 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
230 1.1 fredette CALL switch, WHEN NOT DATA_IN
231 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
232 1.1 fredette CALL switch, WHEN NOT DATA_IN
233 1.1 fredette MOVE 0, ds_Data1, WHEN DATA_IN
234 1.1 fredette CALL switch
235 1.1 fredette
236 1.1 fredette end:
237 1.1 fredette MOVE 0, ds_Status, WHEN STATUS
238 1.1 fredette int int_status, WHEN NOT MSG_IN ; status not followed by msg
239 1.1 fredette MOVE 0, ds_Msg, WHEN MSG_IN
240 1.1 fredette CLEAR ACK
241 1.1 fredette WAIT DISCONNECT
242 1.1 fredette INT ok ; signal completion
243 1.1 fredette JUMP wait_reselect
244