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