siop2_script.ss revision 1.8
11.8Smaya; $NetBSD: siop2_script.ss,v 1.8 2016/12/12 15:58:44 maya 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; 161.1Sis; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 171.1Sis; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 181.1Sis; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 191.1Sis; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 201.1Sis; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 211.1Sis; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 221.1Sis; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 231.1Sis; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 241.1Sis; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 251.1Sis; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 261.1Sis; 271.1Sis 281.1Sis; NCR 53c770 script 291.1Sis; 301.1SisARCH 720 311.1Sis; 321.1SisABSOLUTE ds_Device = 0 331.1SisABSOLUTE ds_MsgOut = ds_Device + 4 341.1SisABSOLUTE ds_Cmd = ds_MsgOut + 8 351.1SisABSOLUTE ds_Status = ds_Cmd + 8 361.1SisABSOLUTE ds_Msg = ds_Status + 8 371.1SisABSOLUTE ds_MsgIn = ds_Msg + 8 381.1SisABSOLUTE ds_ExtMsg = ds_MsgIn + 8 391.3SmhitchABSOLUTE ds_NegMsg = ds_ExtMsg + 8 401.3SmhitchABSOLUTE ds_Data1 = ds_NegMsg + 8 411.1SisABSOLUTE ds_Data2 = ds_Data1 + 8 421.1SisABSOLUTE ds_Data3 = ds_Data2 + 8 431.1SisABSOLUTE ds_Data4 = ds_Data3 + 8 441.1SisABSOLUTE ds_Data5 = ds_Data4 + 8 451.1SisABSOLUTE ds_Data6 = ds_Data5 + 8 461.1SisABSOLUTE ds_Data7 = ds_Data6 + 8 471.1SisABSOLUTE ds_Data8 = ds_Data7 + 8 481.1SisABSOLUTE ds_Data9 = ds_Data8 + 8 491.1Sis 501.1SisABSOLUTE ok = 0xff00 511.1SisABSOLUTE err1 = 0xff01 521.1SisABSOLUTE err2 = 0xff02 531.1SisABSOLUTE err3 = 0xff03 541.1SisABSOLUTE err4 = 0xff04 551.1SisABSOLUTE err5 = 0xff05 561.1SisABSOLUTE err6 = 0xff06 571.1SisABSOLUTE err7 = 0xff07 581.1SisABSOLUTE err8 = 0xff08 591.1SisABSOLUTE err9 = 0xff09 601.1SisABSOLUTE err10 = 0xff0a 611.3SmhitchABSOLUTE err11 = 0xff0b 621.1Sis 631.1SisENTRY scripts 641.1SisENTRY switch 651.1SisENTRY wait_reselect 661.1SisENTRY dataout 671.1SisENTRY datain 681.3SmhitchENTRY clear_ack 691.1Sis 701.2SisPROC siopng_scripts: 711.1Sis 721.1Sisscripts: 731.1Sis 741.1Sis SELECT ATN FROM ds_Device, REL(reselect) 751.1Sis; 761.1Sisswitch: 771.4Sis MOVE GPREG | 0x10 TO GPREG 781.1Sis JUMP REL(msgin), WHEN MSG_IN 791.1Sis JUMP REL(msgout), IF MSG_OUT 801.1Sis JUMP REL(command_phase), IF CMD 811.1Sis JUMP REL(dataout), IF DATA_OUT 821.1Sis JUMP REL(datain), IF DATA_IN 831.1Sis JUMP REL(end), IF STATUS 841.1Sis 851.1Sis INT err5 ; Unrecognized phase 861.1Sis 871.1Sismsgin: 881.1Sis MOVE FROM ds_MsgIn, WHEN MSG_IN 891.1Sis JUMP REL(ext_msg), IF 0x01 ; extended message 901.1Sis JUMP REL(disc), IF 0x04 ; disconnect message 911.1Sis JUMP REL(msg_sdp), IF 0x02 ; save data pointers 921.1Sis JUMP REL(msg_rej), IF 0x07 ; message reject 931.1Sis JUMP REL(msg_rdp), IF 0x03 ; restore data pointers 941.1Sis INT err6 ; unrecognized message 951.1Sis 961.3Smhitchmsg_rej: 971.3Smhitch; Do we need to interrupt host here to let it handle the reject? 981.1Sismsg_rdp: 991.3Smhitchclear_ack: 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.3Smhitch JUMP REL(neg_msg), IF 0x03 ; extended message might be SDTR 1081.3Smhitch JUMP REL(neg_msg), IF 0x02 ; extended message might be WDTR 1091.5Sis INT err7 ; extended message not SDTR 1101.1Sis 1111.3Smhitchneg_msg: 1121.1Sis CLEAR ACK 1131.3Smhitch MOVE FROM ds_NegMsg, WHEN MSG_IN 1141.5Sis INT err11 ; Let host handle the message 1151.3Smhitch; If we continue from the interrupt, the host has set up a response 1161.3Smhitch; message to be sent. Set ATN, clear ACK, and continue. 1171.3Smhitch SET ATN 1181.1Sis CLEAR ACK 1191.1Sis JUMP REL(switch) 1201.1Sis 1211.1Sisdisc: 1221.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 1231.4Sis MOVE GPREG & 0xEF TO GPREG 1241.1Sis CLEAR ACK 1251.1Sis WAIT DISCONNECT 1261.1Sis 1271.5Sis INT err2 ; signal disconnect w/o save DP 1281.1Sis 1291.1Sismsg_sdp: 1301.1Sis CLEAR ACK ; acknowledge message 1311.1Sis JUMP REL(switch), WHEN NOT MSG_IN 1321.1Sis MOVE FROM ds_ExtMsg, WHEN MSG_IN 1331.1Sis INT err8, IF NOT 0x04 ; interrupt if not disconnect 1341.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 1351.1Sis CLEAR ACK 1361.1Sis WAIT DISCONNECT 1371.1Sis 1381.1Sis INT err1 ; signal disconnect 1391.1Sis 1401.1Sisreselect: 1411.1Siswait_reselect: 1421.1Sis WAIT RESELECT REL(select_adr) 1431.1Sis MOVE SSID & 0x8f to SFBR ; Save reselect ID 1441.1Sis MOVE SFBR to SCRATCHA0 1451.1Sis 1461.1Sis INT err9, WHEN NOT MSG_IN ; didn't get IDENTIFY 1471.1Sis MOVE FROM ds_Msg, WHEN MSG_IN 1481.1Sis INT err3 ; let host know about reconnect 1491.8Smaya CLEAR ACK ; acknowledge the message 1501.1Sis JUMP REL(switch) 1511.1Sis 1521.1Sis 1531.1Sisselect_adr: 1541.1Sis MOVE SCNTL1 & 0x10 to SFBR ; get connected status 1551.1Sis INT err4, IF 0x00 ; tell host if not connected 1561.1Sis MOVE CTEST2 & 0x40 to SFBR ; clear Sig_P 1571.1Sis JUMP REL(wait_reselect) ; and try reselect again 1581.1Sis 1591.1Sismsgout: 1601.1Sis MOVE FROM ds_MsgOut, WHEN MSG_OUT 1611.1Sis JUMP REL(switch) 1621.1Sis 1631.1Siscommand_phase: 1641.1Sis CLEAR ATN 1651.1Sis MOVE FROM ds_Cmd, WHEN CMD 1661.1Sis JUMP REL(switch) 1671.1Sis 1681.1Sisdataout: 1691.1Sis MOVE FROM ds_Data1, WHEN DATA_OUT 1701.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1711.1Sis MOVE FROM ds_Data2, WHEN DATA_OUT 1721.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1731.1Sis MOVE FROM ds_Data3, WHEN DATA_OUT 1741.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1751.1Sis MOVE FROM ds_Data4, WHEN DATA_OUT 1761.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1771.1Sis MOVE FROM ds_Data5, WHEN DATA_OUT 1781.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1791.1Sis MOVE FROM ds_Data6, WHEN DATA_OUT 1801.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1811.1Sis MOVE FROM ds_Data7, WHEN DATA_OUT 1821.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1831.1Sis MOVE FROM ds_Data8, WHEN DATA_OUT 1841.1Sis CALL REL(switch), WHEN NOT DATA_OUT 1851.1Sis MOVE FROM ds_Data9, WHEN DATA_OUT 1861.1Sis CALL REL(switch) 1871.1Sis 1881.1Sisdatain: 1891.1Sis MOVE FROM ds_Data1, WHEN DATA_IN 1901.1Sis CALL REL(switch), WHEN NOT DATA_IN 1911.1Sis MOVE FROM ds_Data2, WHEN DATA_IN 1921.1Sis CALL REL(switch), WHEN NOT DATA_IN 1931.1Sis MOVE FROM ds_Data3, WHEN DATA_IN 1941.1Sis CALL REL(switch), WHEN NOT DATA_IN 1951.1Sis MOVE FROM ds_Data4, WHEN DATA_IN 1961.1Sis CALL REL(switch), WHEN NOT DATA_IN 1971.1Sis MOVE FROM ds_Data5, WHEN DATA_IN 1981.1Sis CALL REL(switch), WHEN NOT DATA_IN 1991.1Sis MOVE FROM ds_Data6, WHEN DATA_IN 2001.1Sis CALL REL(switch), WHEN NOT DATA_IN 2011.1Sis MOVE FROM ds_Data7, WHEN DATA_IN 2021.1Sis CALL REL(switch), WHEN NOT DATA_IN 2031.1Sis MOVE FROM ds_Data8, WHEN DATA_IN 2041.1Sis CALL REL(switch), WHEN NOT DATA_IN 2051.1Sis MOVE FROM ds_Data9, WHEN DATA_IN 2061.1Sis CALL REL(switch) 2071.1Sis 2081.1Sisend: 2091.1Sis MOVE FROM ds_Status, WHEN STATUS 2101.5Sis INT err10, WHEN NOT MSG_IN ; status not followed by msg 2111.1Sis MOVE FROM ds_Msg, WHEN MSG_IN 2121.1Sis MOVE SCNTL2 & 0x7f TO SCNTL2 2131.1Sis CLEAR ACK 2141.1Sis WAIT DISCONNECT 2151.4Sis MOVE GPREG & 0xEF TO GPREG 2161.1Sis INT ok ; signal completion 2171.1Sis JUMP REL(wait_reselect) 218