xref: /netbsd/sys/dev/microcode/siop/oosiop.ss (revision 7b4697bd)
1;	$NetBSD: oosiop.ss,v 1.2 2003/04/06 09:48:42 tsutsui Exp $
2
3;
4; Copyright (c) 2001 Shuichiro URATA.  All rights reserved.
5;
6; Redistribution and use in source and binary forms, with or without
7; modification, are permitted provided that the following conditions
8; are met:
9; 1. Redistributions of source code must retain the above copyright
10;    notice, this list of conditions and the following disclaimer.
11; 2. Redistributions in binary form must reproduce the above copyright
12;    notice, this list of conditions and the following disclaimer in the
13;    documentation and/or other materials provided with the distribution.
14; 3. The name of the author may not be used to endorse or promote products
15;    derived from this software without specific prior written permission.
16;
17; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27;
28
29; NCR 53c700 script
30;
31
32ARCH 700
33
34; interrupt codes
35ABSOLUTE int_done	= 0xbeef0000
36ABSOLUTE int_msgin	= 0xbeef0001
37ABSOLUTE int_extmsg	= 0xbeef0002
38ABSOLUTE int_resel	= 0xbeef0003
39ABSOLUTE int_res_id	= 0xbeef0004
40ABSOLUTE int_resfail	= 0xbeef0005
41ABSOLUTE int_disc	= 0xbeef0006
42ABSOLUTE int_err 	= 0xdeadbeef
43
44; patch entries
45ENTRY p_resel_msgin_move
46ENTRY p_select
47ENTRY p_datain_jump
48ENTRY p_dataout_jump
49ENTRY p_msgin_move
50ENTRY p_msgout_move
51ENTRY p_cmdout_move
52ENTRY p_status_move
53ENTRY p_extmsglen_move
54ENTRY p_extmsgin_move
55
56
57PROC  oosiop_script:
58
59ENTRY wait_reselect
60wait_reselect:
61	WAIT RESELECT REL(reselect_fail)
62	INT int_resel
63reselect_fail:
64	INT int_resfail
65
66ENTRY wait_resel_identify
67wait_resel_identify:
68	INT int_err, WHEN NOT MSG_IN
69p_resel_msgin_move:
70	MOVE 0, 0, WHEN MSG_IN
71	INT int_res_id
72
73ENTRY start_select
74start_select:
75p_select:
76	SELECT ATN 0, REL(wait_reselect)
77
78ENTRY phasedispatch
79phasedispatch:
80	JUMP REL(msgin), WHEN MSG_IN
81	JUMP REL(msgout), WHEN MSG_OUT
82	JUMP REL(status), WHEN STATUS
83	JUMP REL(cmdout), WHEN CMD
84p_datain_jump:
85	JUMP 0, WHEN DATA_IN
86p_dataout_jump:
87	JUMP 0, WHEN DATA_OUT
88	INT int_err
89
90msgin:
91	CLEAR ATN
92p_msgin_move:
93	MOVE 0, 0, WHEN MSG_IN
94	JUMP REL(complete), IF 0x00
95	JUMP REL(extmsgsetup), IF 0x01
96	JUMP REL(disconnect), IF 0x04
97	INT int_msgin
98
99ENTRY ack_msgin
100ack_msgin:
101	CLEAR ACK
102	JUMP REL(phasedispatch)
103
104ENTRY sendmsg
105sendmsg:
106	SET ATN
107	CLEAR ACK
108msgout:
109p_msgout_move:
110	MOVE 0, 0, WHEN MSG_OUT
111	CLEAR ATN
112	JUMP REL(phasedispatch)
113
114cmdout:
115	CLEAR ATN
116p_cmdout_move:
117	MOVE 0, 0, WHEN CMD
118	JUMP REL(phasedispatch)
119
120status:
121p_status_move:
122	MOVE 0, 0, WHEN STATUS
123	JUMP REL(phasedispatch)
124
125disconnect:
126	CLEAR ACK
127	WAIT DISCONNECT
128	INT int_disc
129
130complete:
131	CLEAR ACK
132	WAIT DISCONNECT
133	INT int_done
134
135; receive extended message length
136extmsgsetup:
137	CLEAR ACK
138	INT int_err, IF NOT MSG_IN
139p_extmsglen_move:
140	MOVE 0, 0, WHEN MSG_IN
141	INT int_extmsg
142
143; receive extended message
144ENTRY rcv_extmsg
145rcv_extmsg:
146	CLEAR ACK
147	INT int_err, IF NOT MSG_IN
148p_extmsgin_move:
149	MOVE 0, 0, WHEN MSG_IN
150	INT int_msgin
151