xref: /netbsd-src/sys/dev/microcode/siop/oosiop.ss (revision 7b4697bdbe6320980d8b9fdb78d353b7bf9a6aa4)
1*7b4697bdStsutsui;	$NetBSD: oosiop.ss,v 1.2 2003/04/06 09:48:42 tsutsui Exp $
28dce160cSfredette
38dce160cSfredette;
4*7b4697bdStsutsui; Copyright (c) 2001 Shuichiro URATA.  All rights reserved.
58dce160cSfredette;
68dce160cSfredette; Redistribution and use in source and binary forms, with or without
78dce160cSfredette; modification, are permitted provided that the following conditions
88dce160cSfredette; are met:
98dce160cSfredette; 1. Redistributions of source code must retain the above copyright
108dce160cSfredette;    notice, this list of conditions and the following disclaimer.
118dce160cSfredette; 2. Redistributions in binary form must reproduce the above copyright
128dce160cSfredette;    notice, this list of conditions and the following disclaimer in the
138dce160cSfredette;    documentation and/or other materials provided with the distribution.
14*7b4697bdStsutsui; 3. The name of the author may not be used to endorse or promote products
15*7b4697bdStsutsui;    derived from this software without specific prior written permission.
168dce160cSfredette;
178dce160cSfredette; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
188dce160cSfredette; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
198dce160cSfredette; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
208dce160cSfredette; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
218dce160cSfredette; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
228dce160cSfredette; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238dce160cSfredette; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248dce160cSfredette; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258dce160cSfredette; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
268dce160cSfredette; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278dce160cSfredette;
288dce160cSfredette
298dce160cSfredette; NCR 53c700 script
308dce160cSfredette;
31*7b4697bdStsutsui
328dce160cSfredetteARCH 700
338dce160cSfredette
34*7b4697bdStsutsui; interrupt codes
35*7b4697bdStsutsuiABSOLUTE int_done	= 0xbeef0000
36*7b4697bdStsutsuiABSOLUTE int_msgin	= 0xbeef0001
37*7b4697bdStsutsuiABSOLUTE int_extmsg	= 0xbeef0002
38*7b4697bdStsutsuiABSOLUTE int_resel	= 0xbeef0003
39*7b4697bdStsutsuiABSOLUTE int_res_id	= 0xbeef0004
40*7b4697bdStsutsuiABSOLUTE int_resfail	= 0xbeef0005
41*7b4697bdStsutsuiABSOLUTE int_disc	= 0xbeef0006
42*7b4697bdStsutsuiABSOLUTE int_err 	= 0xdeadbeef
438dce160cSfredette
44*7b4697bdStsutsui; patch entries
45*7b4697bdStsutsuiENTRY p_resel_msgin_move
46*7b4697bdStsutsuiENTRY p_select
47*7b4697bdStsutsuiENTRY p_datain_jump
48*7b4697bdStsutsuiENTRY p_dataout_jump
49*7b4697bdStsutsuiENTRY p_msgin_move
50*7b4697bdStsutsuiENTRY p_msgout_move
51*7b4697bdStsutsuiENTRY p_cmdout_move
52*7b4697bdStsutsuiENTRY p_status_move
53*7b4697bdStsutsuiENTRY p_extmsglen_move
54*7b4697bdStsutsuiENTRY p_extmsgin_move
558dce160cSfredette
568dce160cSfredette
578dce160cSfredettePROC  oosiop_script:
588dce160cSfredette
59*7b4697bdStsutsuiENTRY wait_reselect
60*7b4697bdStsutsuiwait_reselect:
61*7b4697bdStsutsui	WAIT RESELECT REL(reselect_fail)
62*7b4697bdStsutsui	INT int_resel
63*7b4697bdStsutsuireselect_fail:
64*7b4697bdStsutsui	INT int_resfail
658dce160cSfredette
66*7b4697bdStsutsuiENTRY wait_resel_identify
67*7b4697bdStsutsuiwait_resel_identify:
68*7b4697bdStsutsui	INT int_err, WHEN NOT MSG_IN
69*7b4697bdStsutsuip_resel_msgin_move:
70*7b4697bdStsutsui	MOVE 0, 0, WHEN MSG_IN
71*7b4697bdStsutsui	INT int_res_id
728dce160cSfredette
73*7b4697bdStsutsuiENTRY start_select
74*7b4697bdStsutsuistart_select:
75*7b4697bdStsutsuip_select:
76*7b4697bdStsutsui	SELECT ATN 0, REL(wait_reselect)
77*7b4697bdStsutsui
78*7b4697bdStsutsuiENTRY phasedispatch
79*7b4697bdStsutsuiphasedispatch:
80*7b4697bdStsutsui	JUMP REL(msgin), WHEN MSG_IN
81*7b4697bdStsutsui	JUMP REL(msgout), WHEN MSG_OUT
82*7b4697bdStsutsui	JUMP REL(status), WHEN STATUS
83*7b4697bdStsutsui	JUMP REL(cmdout), WHEN CMD
84*7b4697bdStsutsuip_datain_jump:
85*7b4697bdStsutsui	JUMP 0, WHEN DATA_IN
86*7b4697bdStsutsuip_dataout_jump:
87*7b4697bdStsutsui	JUMP 0, WHEN DATA_OUT
88*7b4697bdStsutsui	INT int_err
898dce160cSfredette
908dce160cSfredettemsgin:
918dce160cSfredette	CLEAR ATN
92*7b4697bdStsutsuip_msgin_move:
93*7b4697bdStsutsui	MOVE 0, 0, WHEN MSG_IN
94*7b4697bdStsutsui	JUMP REL(complete), IF 0x00
95*7b4697bdStsutsui	JUMP REL(extmsgsetup), IF 0x01
96*7b4697bdStsutsui	JUMP REL(disconnect), IF 0x04
97*7b4697bdStsutsui	INT int_msgin
988dce160cSfredette
99*7b4697bdStsutsuiENTRY ack_msgin
100*7b4697bdStsutsuiack_msgin:
1018dce160cSfredette	CLEAR ACK
102*7b4697bdStsutsui	JUMP REL(phasedispatch)
1038dce160cSfredette
104*7b4697bdStsutsuiENTRY sendmsg
105*7b4697bdStsutsuisendmsg:
1068dce160cSfredette	SET ATN
1078dce160cSfredette	CLEAR ACK
1088dce160cSfredettemsgout:
109*7b4697bdStsutsuip_msgout_move:
110*7b4697bdStsutsui	MOVE 0, 0, WHEN MSG_OUT
1118dce160cSfredette	CLEAR ATN
112*7b4697bdStsutsui	JUMP REL(phasedispatch)
1138dce160cSfredette
114*7b4697bdStsutsuicmdout:
115*7b4697bdStsutsui	CLEAR ATN
116*7b4697bdStsutsuip_cmdout_move:
117*7b4697bdStsutsui	MOVE 0, 0, WHEN CMD
118*7b4697bdStsutsui	JUMP REL(phasedispatch)
1198dce160cSfredette
120*7b4697bdStsutsuistatus:
121*7b4697bdStsutsuip_status_move:
122*7b4697bdStsutsui	MOVE 0, 0, WHEN STATUS
123*7b4697bdStsutsui	JUMP REL(phasedispatch)
1248dce160cSfredette
125*7b4697bdStsutsuidisconnect:
1268dce160cSfredette	CLEAR ACK
1278dce160cSfredette	WAIT DISCONNECT
128*7b4697bdStsutsui	INT int_disc
129*7b4697bdStsutsui
130*7b4697bdStsutsuicomplete:
131*7b4697bdStsutsui	CLEAR ACK
132*7b4697bdStsutsui	WAIT DISCONNECT
133*7b4697bdStsutsui	INT int_done
134*7b4697bdStsutsui
135*7b4697bdStsutsui; receive extended message length
136*7b4697bdStsutsuiextmsgsetup:
137*7b4697bdStsutsui	CLEAR ACK
138*7b4697bdStsutsui	INT int_err, IF NOT MSG_IN
139*7b4697bdStsutsuip_extmsglen_move:
140*7b4697bdStsutsui	MOVE 0, 0, WHEN MSG_IN
141*7b4697bdStsutsui	INT int_extmsg
142*7b4697bdStsutsui
143*7b4697bdStsutsui; receive extended message
144*7b4697bdStsutsuiENTRY rcv_extmsg
145*7b4697bdStsutsuircv_extmsg:
146*7b4697bdStsutsui	CLEAR ACK
147*7b4697bdStsutsui	INT int_err, IF NOT MSG_IN
148*7b4697bdStsutsuip_extmsgin_move:
149*7b4697bdStsutsui	MOVE 0, 0, WHEN MSG_IN
150*7b4697bdStsutsui	INT int_msgin
151