siop2_script.ss revision 1.2
11.2Sis;	$NetBSD: siop2_script.ss,v 1.2 1999/03/13 19:42:52 is Exp $
21.1Sis
31.1Sis;
41.1Sis; Copyright (c) 1998 Michael L. Hitch
51.1Sis; All rights reserved.
61.1Sis;
71.1Sis; Redistribution and use in source and binary forms, with or without
81.1Sis; modification, are permitted provided that the following conditions
91.1Sis; are met:
101.1Sis; 1. Redistributions of source code must retain the above copyright
111.1Sis;    notice, this list of conditions and the following disclaimer.
121.1Sis; 2. Redistributions in binary form must reproduce the above copyright
131.1Sis;    notice, this list of conditions and the following disclaimer in the
141.1Sis;    documentation and/or other materials provided with the distribution.
151.1Sis; 3. All advertising materials mentioning features or use of this software
161.1Sis;    must display the following acknowledgement:
171.1Sis;      This product includes software developed by Michael L. Hitch.
181.1Sis; 4. The name of the author may not be used to endorse or promote products
191.1Sis;    derived from this software without specific prior written permission
201.1Sis;
211.1Sis; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
221.1Sis; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
231.1Sis; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
241.1Sis; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
251.1Sis; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
261.1Sis; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
271.1Sis; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
281.1Sis; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
291.1Sis; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
301.1Sis; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
311.1Sis;
321.1Sis
331.1Sis; NCR 53c770 script
341.1Sis;
351.1SisARCH 720
361.1Sis;
371.1SisABSOLUTE ds_Device	= 0
381.1SisABSOLUTE ds_MsgOut 	= ds_Device + 4
391.1SisABSOLUTE ds_Cmd		= ds_MsgOut + 8
401.1SisABSOLUTE ds_Status	= ds_Cmd + 8
411.1SisABSOLUTE ds_Msg		= ds_Status + 8
421.1SisABSOLUTE ds_MsgIn	= ds_Msg + 8
431.1SisABSOLUTE ds_ExtMsg	= ds_MsgIn + 8
441.1SisABSOLUTE ds_SyncMsg	= ds_ExtMsg + 8
451.1SisABSOLUTE ds_Data1	= ds_SyncMsg + 8
461.1SisABSOLUTE ds_Data2	= ds_Data1 + 8
471.1SisABSOLUTE ds_Data3	= ds_Data2 + 8
481.1SisABSOLUTE ds_Data4	= ds_Data3 + 8
491.1SisABSOLUTE ds_Data5	= ds_Data4 + 8
501.1SisABSOLUTE ds_Data6	= ds_Data5 + 8
511.1SisABSOLUTE ds_Data7	= ds_Data6 + 8
521.1SisABSOLUTE ds_Data8	= ds_Data7 + 8
531.1SisABSOLUTE ds_Data9	= ds_Data8 + 8
541.1Sis
551.1SisABSOLUTE ok		= 0xff00
561.1SisABSOLUTE err1		= 0xff01
571.1SisABSOLUTE err2		= 0xff02
581.1SisABSOLUTE err3		= 0xff03
591.1SisABSOLUTE err4		= 0xff04
601.1SisABSOLUTE err5		= 0xff05
611.1SisABSOLUTE err6		= 0xff06
621.1SisABSOLUTE err7		= 0xff07
631.1SisABSOLUTE err8		= 0xff08
641.1SisABSOLUTE err9		= 0xff09
651.1SisABSOLUTE err10		= 0xff0a
661.1Sis
671.1SisENTRY	scripts
681.1SisENTRY	switch
691.1SisENTRY	wait_reselect
701.1SisENTRY	dataout
711.1SisENTRY	datain
721.1Sis
731.2SisPROC	siopng_scripts:
741.1Sis
751.1Sisscripts:
761.1Sis
771.1Sis	SELECT ATN FROM ds_Device, REL(reselect)
781.1Sis;
791.1Sisswitch:
801.1Sis	JUMP REL(msgin), WHEN MSG_IN
811.1Sis	JUMP REL(msgout), IF MSG_OUT
821.1Sis	JUMP REL(command_phase), IF CMD
831.1Sis	JUMP REL(dataout), IF DATA_OUT
841.1Sis	JUMP REL(datain), IF DATA_IN
851.1Sis	JUMP REL(end), IF STATUS
861.1Sis
871.1Sis	INT err5			; Unrecognized phase
881.1Sis
891.1Sismsgin:
901.1Sis	MOVE FROM ds_MsgIn, WHEN MSG_IN
911.1Sis	JUMP REL(ext_msg), IF 0x01	; extended message
921.1Sis	JUMP REL(disc), IF 0x04		; disconnect message
931.1Sis	JUMP REL(msg_sdp), IF 0x02	; save data pointers
941.1Sis	JUMP REL(msg_rej), IF 0x07	; message reject
951.1Sis	JUMP REL(msg_rdp), IF 0x03	; restore data pointers
961.1Sis	INT err6			; unrecognized message
971.1Sis
981.1Sismsg_rdp:
991.1Sismsg_rej:
1001.1Sis	CLEAR ACK
1011.1Sis	CLEAR ATN
1021.1Sis	JUMP REL(switch)
1031.1Sis
1041.1Sisext_msg:
1051.1Sis	CLEAR ACK
1061.1Sis	MOVE FROM ds_ExtMsg, WHEN MSG_IN
1071.1Sis	JUMP REL(sync_msg), IF 0x03
1081.1Sis	int err7			; extended message not SDTR
1091.1Sis
1101.1Sissync_msg:
1111.1Sis	CLEAR ACK
1121.1Sis	MOVE FROM ds_SyncMsg, WHEN MSG_IN
1131.1Sis	CLEAR ACK
1141.1Sis	JUMP REL(switch)
1151.1Sis
1161.1Sisdisc:
1171.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
1181.1Sis	CLEAR ACK
1191.1Sis	WAIT DISCONNECT
1201.1Sis
1211.1Sis	int err2			; signal disconnect w/o save DP
1221.1Sis
1231.1Sismsg_sdp:
1241.1Sis	CLEAR ACK			; acknowledge message
1251.1Sis	JUMP REL(switch), WHEN NOT MSG_IN
1261.1Sis	MOVE FROM ds_ExtMsg, WHEN MSG_IN
1271.1Sis	INT err8, IF NOT 0x04		; interrupt if not disconnect
1281.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
1291.1Sis	CLEAR ACK
1301.1Sis	WAIT DISCONNECT
1311.1Sis
1321.1Sis	INT err1			; signal disconnect
1331.1Sis
1341.1Sisreselect:
1351.1Siswait_reselect:
1361.1Sis	WAIT RESELECT REL(select_adr)
1371.1Sis	MOVE SSID & 0x8f to SFBR	; Save reselect ID
1381.1Sis	MOVE SFBR to SCRATCHA0
1391.1Sis
1401.1Sis	INT err9, WHEN NOT MSG_IN	; didn't get IDENTIFY
1411.1Sis	MOVE FROM ds_Msg, WHEN MSG_IN
1421.1Sis	INT err3			; let host know about reconnect
1431.1Sis	CLEAR ACK			; acknowlege the message
1441.1Sis	JUMP REL(switch)
1451.1Sis
1461.1Sis
1471.1Sisselect_adr:
1481.1Sis	MOVE SCNTL1 & 0x10 to SFBR	; get connected status
1491.1Sis	INT err4, IF 0x00		; tell host if not connected
1501.1Sis	MOVE CTEST2 & 0x40 to SFBR	; clear Sig_P
1511.1Sis	JUMP REL(wait_reselect)		; and try reselect again
1521.1Sis
1531.1Sismsgout:
1541.1Sis	MOVE FROM ds_MsgOut, WHEN MSG_OUT
1551.1Sis	JUMP REL(switch)
1561.1Sis
1571.1Siscommand_phase:
1581.1Sis	CLEAR ATN
1591.1Sis	MOVE FROM ds_Cmd, WHEN CMD
1601.1Sis	JUMP REL(switch)
1611.1Sis
1621.1Sisdataout:
1631.1Sis	MOVE FROM ds_Data1, WHEN DATA_OUT
1641.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1651.1Sis	MOVE FROM ds_Data2, WHEN DATA_OUT
1661.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1671.1Sis	MOVE FROM ds_Data3, WHEN DATA_OUT
1681.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1691.1Sis	MOVE FROM ds_Data4, WHEN DATA_OUT
1701.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1711.1Sis	MOVE FROM ds_Data5, WHEN DATA_OUT
1721.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1731.1Sis	MOVE FROM ds_Data6, WHEN DATA_OUT
1741.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1751.1Sis	MOVE FROM ds_Data7, WHEN DATA_OUT
1761.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1771.1Sis	MOVE FROM ds_Data8, WHEN DATA_OUT
1781.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1791.1Sis	MOVE FROM ds_Data9, WHEN DATA_OUT
1801.1Sis	CALL REL(switch)
1811.1Sis
1821.1Sisdatain:
1831.1Sis	MOVE FROM ds_Data1, WHEN DATA_IN
1841.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1851.1Sis	MOVE FROM ds_Data2, WHEN DATA_IN
1861.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1871.1Sis	MOVE FROM ds_Data3, WHEN DATA_IN
1881.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1891.1Sis	MOVE FROM ds_Data4, WHEN DATA_IN
1901.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1911.1Sis	MOVE FROM ds_Data5, WHEN DATA_IN
1921.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1931.1Sis	MOVE FROM ds_Data6, WHEN DATA_IN
1941.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1951.1Sis	MOVE FROM ds_Data7, WHEN DATA_IN
1961.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1971.1Sis	MOVE FROM ds_Data8, WHEN DATA_IN
1981.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1991.1Sis	MOVE FROM ds_Data9, WHEN DATA_IN
2001.1Sis	CALL REL(switch)
2011.1Sis
2021.1Sisend:
2031.1Sis	MOVE FROM ds_Status, WHEN STATUS
2041.1Sis	int err10, WHEN NOT MSG_IN	; status not followed by msg
2051.1Sis	MOVE FROM ds_Msg, WHEN MSG_IN
2061.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
2071.1Sis	CLEAR ACK
2081.1Sis	WAIT DISCONNECT
2091.1Sis	INT ok				; signal completion
2101.1Sis	JUMP REL(wait_reselect)
211