siop2_script.ss revision 1.4
11.4Sis; $NetBSD: siop2_script.ss,v 1.4 2001/10/08 21:18:58 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.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.4Sis MOVE GPREG | 0x10 TO GPREG 831.1Sis JUMP REL(msgin), WHEN MSG_IN 841.1Sis JUMP REL(msgout), IF MSG_OUT 851.1Sis JUMP REL(command_phase), IF CMD 861.1Sis JUMP REL(dataout), IF DATA_OUT 871.1Sis JUMP REL(datain), IF DATA_IN 881.1Sis JUMP REL(end), IF STATUS 891.1Sis 901.1Sis INT err5 ; Unrecognized phase 911.1Sis 921.1Sismsgin: 931.1Sis MOVE FROM ds_MsgIn, WHEN MSG_IN 941.1Sis JUMP REL(ext_msg), IF 0x01 ; extended message 951.1Sis JUMP REL(disc), IF 0x04 ; disconnect message 961.1Sis JUMP REL(msg_sdp), IF 0x02 ; save data pointers 971.1Sis JUMP REL(msg_rej), IF 0x07 ; message reject 981.1Sis JUMP REL(msg_rdp), IF 0x03 ; restore data pointers 991.1Sis INT err6 ; unrecognized message 1001.1Sis 1011.3Smhitchmsg_rej: 1021.3Smhitch; Do we need to interrupt host here to let it handle the reject? 1031.1Sismsg_rdp: 1041.3Smhitchclear_ack: 1051.1Sis CLEAR ACK 1061.1Sis CLEAR ATN 1071.1Sis JUMP REL(switch) 1081.1Sis 1091.1Sisext_msg: 1101.1Sis CLEAR ACK 1111.1Sis MOVE FROM ds_ExtMsg, WHEN MSG_IN 1121.3Smhitch JUMP REL(neg_msg), IF 0x03 ; extended message might be SDTR 1131.3Smhitch JUMP REL(neg_msg), IF 0x02 ; extended message might be WDTR 1141.1Sis int err7 ; extended message not SDTR 1151.1Sis 1161.3Smhitchneg_msg: 1171.1Sis CLEAR ACK 1181.3Smhitch MOVE FROM ds_NegMsg, WHEN MSG_IN 1191.3Smhitch int err11 ; Let host handle the message 1201.3Smhitch; If we continue from the interrupt, the host has set up a response 1211.3Smhitch; message to be sent. Set ATN, clear ACK, and continue. 1221.3Smhitch SET ATN 1231.1Sis CLEAR ACK 1241.1Sis JUMP REL(switch) 1251.1Sis 1261.1Sisdisc: 1271.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 1281.4Sis MOVE GPREG & 0xEF TO GPREG 1291.1Sis CLEAR ACK 1301.1Sis WAIT DISCONNECT 1311.1Sis 1321.1Sis int err2 ; signal disconnect w/o save DP 1331.1Sis 1341.1Sismsg_sdp: 1351.1Sis CLEAR ACK ; acknowledge message 1361.1Sis JUMP REL(switch), WHEN NOT MSG_IN 1371.1Sis MOVE FROM ds_ExtMsg, WHEN MSG_IN 1381.1Sis INT err8, IF NOT 0x04 ; interrupt if not disconnect 1391.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 1401.1Sis CLEAR ACK 1411.1Sis WAIT DISCONNECT 1421.1Sis 1431.1Sis INT err1 ; signal disconnect 1441.1Sis 1451.1Sisreselect: 1461.1Siswait_reselect: 1471.1Sis WAIT RESELECT REL(select_adr) 1481.1Sis MOVE SSID & 0x8f to SFBR ; Save reselect ID 1491.1Sis MOVE SFBR to SCRATCHA0 1501.1Sis 1511.1Sis INT err9, WHEN NOT MSG_IN ; didn't get IDENTIFY 1521.1Sis MOVE FROM ds_Msg, WHEN MSG_IN 1531.1Sis INT err3 ; let host know about reconnect 1541.1Sis CLEAR ACK ; acknowlege the message 1551.1Sis JUMP REL(switch) 1561.1Sis 1571.1Sis 1581.1Sisselect_adr: 1591.1Sis MOVE SCNTL1 & 0x10 to SFBR ; get connected status 1601.1Sis INT err4, IF 0x00 ; tell host if not connected 1611.1Sis MOVE CTEST2 & 0x40 to SFBR ; clear Sig_P 1621.1Sis JUMP REL(wait_reselect) ; and try reselect again 1631.1Sis 1641.1Sismsgout: 1651.1Sis MOVE FROM ds_MsgOut, WHEN MSG_OUT 1661.1Sis JUMP REL(switch) 1671.1Sis 1681.1Siscommand_phase: 1691.1Sis CLEAR ATN 1701.1Sis MOVE FROM ds_Cmd, WHEN CMD 1711.1Sis JUMP REL(switch) 1721.1Sis 1731.1Sisdataout: 1741.1Sis MOVE FROM ds_Data1, WHEN DATA_OUT 1751.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1761.1Sis MOVE FROM ds_Data2, WHEN DATA_OUT 1771.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1781.1Sis MOVE FROM ds_Data3, WHEN DATA_OUT 1791.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1801.1Sis MOVE FROM ds_Data4, WHEN DATA_OUT 1811.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1821.1Sis MOVE FROM ds_Data5, WHEN DATA_OUT 1831.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1841.1Sis MOVE FROM ds_Data6, WHEN DATA_OUT 1851.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1861.1Sis MOVE FROM ds_Data7, WHEN DATA_OUT 1871.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1881.1Sis MOVE FROM ds_Data8, WHEN DATA_OUT 1891.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1901.1Sis MOVE FROM ds_Data9, WHEN DATA_OUT 1911.1Sis CALL REL(switch) 1921.1Sis 1931.1Sisdatain: 1941.1Sis MOVE FROM ds_Data1, WHEN DATA_IN 1951.1Sis CALL REL(switch), WHEN NOT DATA_IN 1961.1Sis MOVE FROM ds_Data2, WHEN DATA_IN 1971.1Sis CALL REL(switch), WHEN NOT DATA_IN 1981.1Sis MOVE FROM ds_Data3, WHEN DATA_IN 1991.1Sis CALL REL(switch), WHEN NOT DATA_IN 2001.1Sis MOVE FROM ds_Data4, WHEN DATA_IN 2011.1Sis CALL REL(switch), WHEN NOT DATA_IN 2021.1Sis MOVE FROM ds_Data5, WHEN DATA_IN 2031.1Sis CALL REL(switch), WHEN NOT DATA_IN 2041.1Sis MOVE FROM ds_Data6, WHEN DATA_IN 2051.1Sis CALL REL(switch), WHEN NOT DATA_IN 2061.1Sis MOVE FROM ds_Data7, WHEN DATA_IN 2071.1Sis CALL REL(switch), WHEN NOT DATA_IN 2081.1Sis MOVE FROM ds_Data8, WHEN DATA_IN 2091.1Sis CALL REL(switch), WHEN NOT DATA_IN 2101.1Sis MOVE FROM ds_Data9, WHEN DATA_IN 2111.1Sis CALL REL(switch) 2121.1Sis 2131.1Sisend: 2141.1Sis MOVE FROM ds_Status, WHEN STATUS 2151.1Sis int err10, WHEN NOT MSG_IN ; status not followed by msg 2161.1Sis MOVE FROM ds_Msg, WHEN MSG_IN 2171.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 2181.1Sis CLEAR ACK 2191.1Sis WAIT DISCONNECT 2201.4Sis MOVE GPREG & 0xEF TO GPREG 2211.1Sis INT ok ; signal completion 2221.1Sis JUMP REL(wait_reselect) 223