siop2_script.ss revision 1.3
11.2Sis;	$NetBSD: siop2_script.ss,v 1.3 1999/03/26 22:50:23 mhitch 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.3SmhitchABSOLUTE ds_NegMsg	= ds_ExtMsg + 8
451.3SmhitchABSOLUTE ds_Data1	= ds_NegMsg + 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.3SmhitchABSOLUTE err11		= 0xff0b
671.1Sis
681.1SisENTRY	scripts
691.1SisENTRY	switch
701.1SisENTRY	wait_reselect
711.1SisENTRY	dataout
721.1SisENTRY	datain
731.3SmhitchENTRY	clear_ack
741.1Sis
751.2SisPROC	siopng_scripts:
761.1Sis
771.1Sisscripts:
781.1Sis
791.1Sis	SELECT ATN FROM ds_Device, REL(reselect)
801.1Sis;
811.1Sisswitch:
821.1Sis	JUMP REL(msgin), WHEN MSG_IN
831.1Sis	JUMP REL(msgout), IF MSG_OUT
841.1Sis	JUMP REL(command_phase), IF CMD
851.1Sis	JUMP REL(dataout), IF DATA_OUT
861.1Sis	JUMP REL(datain), IF DATA_IN
871.1Sis	JUMP REL(end), IF STATUS
881.1Sis
891.1Sis	INT err5			; Unrecognized phase
901.1Sis
911.1Sismsgin:
921.1Sis	MOVE FROM ds_MsgIn, WHEN MSG_IN
931.1Sis	JUMP REL(ext_msg), IF 0x01	; extended message
941.1Sis	JUMP REL(disc), IF 0x04		; disconnect message
951.1Sis	JUMP REL(msg_sdp), IF 0x02	; save data pointers
961.1Sis	JUMP REL(msg_rej), IF 0x07	; message reject
971.1Sis	JUMP REL(msg_rdp), IF 0x03	; restore data pointers
981.1Sis	INT err6			; unrecognized message
991.1Sis
1001.3Smhitchmsg_rej:
1011.3Smhitch; Do we need to interrupt host here to let it handle the reject?
1021.1Sismsg_rdp:
1031.3Smhitchclear_ack:
1041.1Sis	CLEAR ACK
1051.1Sis	CLEAR ATN
1061.1Sis	JUMP REL(switch)
1071.1Sis
1081.1Sisext_msg:
1091.1Sis	CLEAR ACK
1101.1Sis	MOVE FROM ds_ExtMsg, WHEN MSG_IN
1111.3Smhitch	JUMP REL(neg_msg), IF 0x03	; extended message might be SDTR
1121.3Smhitch	JUMP REL(neg_msg), IF 0x02	; extended message might be WDTR
1131.1Sis	int err7			; extended message not SDTR
1141.1Sis
1151.3Smhitchneg_msg:
1161.1Sis	CLEAR ACK
1171.3Smhitch	MOVE FROM ds_NegMsg, WHEN MSG_IN
1181.3Smhitch	int err11			; Let host handle the message
1191.3Smhitch; If we continue from the interrupt, the host has set up a response
1201.3Smhitch; message to be sent.  Set ATN, clear ACK, and continue.
1211.3Smhitch	SET ATN
1221.1Sis	CLEAR ACK
1231.1Sis	JUMP REL(switch)
1241.1Sis
1251.1Sisdisc:
1261.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
1271.1Sis	CLEAR ACK
1281.1Sis	WAIT DISCONNECT
1291.1Sis
1301.1Sis	int err2			; signal disconnect w/o save DP
1311.1Sis
1321.1Sismsg_sdp:
1331.1Sis	CLEAR ACK			; acknowledge message
1341.1Sis	JUMP REL(switch), WHEN NOT MSG_IN
1351.1Sis	MOVE FROM ds_ExtMsg, WHEN MSG_IN
1361.1Sis	INT err8, IF NOT 0x04		; interrupt if not disconnect
1371.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
1381.1Sis	CLEAR ACK
1391.1Sis	WAIT DISCONNECT
1401.1Sis
1411.1Sis	INT err1			; signal disconnect
1421.1Sis
1431.1Sisreselect:
1441.1Siswait_reselect:
1451.1Sis	WAIT RESELECT REL(select_adr)
1461.1Sis	MOVE SSID & 0x8f to SFBR	; Save reselect ID
1471.1Sis	MOVE SFBR to SCRATCHA0
1481.1Sis
1491.1Sis	INT err9, WHEN NOT MSG_IN	; didn't get IDENTIFY
1501.1Sis	MOVE FROM ds_Msg, WHEN MSG_IN
1511.1Sis	INT err3			; let host know about reconnect
1521.1Sis	CLEAR ACK			; acknowlege the message
1531.1Sis	JUMP REL(switch)
1541.1Sis
1551.1Sis
1561.1Sisselect_adr:
1571.1Sis	MOVE SCNTL1 & 0x10 to SFBR	; get connected status
1581.1Sis	INT err4, IF 0x00		; tell host if not connected
1591.1Sis	MOVE CTEST2 & 0x40 to SFBR	; clear Sig_P
1601.1Sis	JUMP REL(wait_reselect)		; and try reselect again
1611.1Sis
1621.1Sismsgout:
1631.1Sis	MOVE FROM ds_MsgOut, WHEN MSG_OUT
1641.1Sis	JUMP REL(switch)
1651.1Sis
1661.1Siscommand_phase:
1671.1Sis	CLEAR ATN
1681.1Sis	MOVE FROM ds_Cmd, WHEN CMD
1691.1Sis	JUMP REL(switch)
1701.1Sis
1711.1Sisdataout:
1721.1Sis	MOVE FROM ds_Data1, WHEN DATA_OUT
1731.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1741.1Sis	MOVE FROM ds_Data2, WHEN DATA_OUT
1751.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1761.1Sis	MOVE FROM ds_Data3, WHEN DATA_OUT
1771.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1781.1Sis	MOVE FROM ds_Data4, WHEN DATA_OUT
1791.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1801.1Sis	MOVE FROM ds_Data5, WHEN DATA_OUT
1811.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1821.1Sis	MOVE FROM ds_Data6, WHEN DATA_OUT
1831.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1841.1Sis	MOVE FROM ds_Data7, WHEN DATA_OUT
1851.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1861.1Sis	MOVE FROM ds_Data8, WHEN DATA_OUT
1871.1Sis	CALL REL(switch), WHEN NOT DATA_OUT
1881.1Sis	MOVE FROM ds_Data9, WHEN DATA_OUT
1891.1Sis	CALL REL(switch)
1901.1Sis
1911.1Sisdatain:
1921.1Sis	MOVE FROM ds_Data1, WHEN DATA_IN
1931.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1941.1Sis	MOVE FROM ds_Data2, WHEN DATA_IN
1951.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1961.1Sis	MOVE FROM ds_Data3, WHEN DATA_IN
1971.1Sis	CALL REL(switch), WHEN NOT DATA_IN
1981.1Sis	MOVE FROM ds_Data4, WHEN DATA_IN
1991.1Sis	CALL REL(switch), WHEN NOT DATA_IN
2001.1Sis	MOVE FROM ds_Data5, WHEN DATA_IN
2011.1Sis	CALL REL(switch), WHEN NOT DATA_IN
2021.1Sis	MOVE FROM ds_Data6, WHEN DATA_IN
2031.1Sis	CALL REL(switch), WHEN NOT DATA_IN
2041.1Sis	MOVE FROM ds_Data7, WHEN DATA_IN
2051.1Sis	CALL REL(switch), WHEN NOT DATA_IN
2061.1Sis	MOVE FROM ds_Data8, WHEN DATA_IN
2071.1Sis	CALL REL(switch), WHEN NOT DATA_IN
2081.1Sis	MOVE FROM ds_Data9, WHEN DATA_IN
2091.1Sis	CALL REL(switch)
2101.1Sis
2111.1Sisend:
2121.1Sis	MOVE FROM ds_Status, WHEN STATUS
2131.1Sis	int err10, WHEN NOT MSG_IN	; status not followed by msg
2141.1Sis	MOVE FROM ds_Msg, WHEN MSG_IN
2151.1Sis	MOVE SCNTL2 & 0x7f TO SCNTL2
2161.1Sis	CLEAR ACK
2171.1Sis	WAIT DISCONNECT
2181.1Sis	INT ok				; signal completion
2191.1Sis	JUMP REL(wait_reselect)
220