1 1.6 maya ; $NetBSD: siop_script.ss,v 1.6 2016/12/12 15:58:44 maya Exp $ 2 1.2 chopps 3 1.2 chopps ; 4 1.2 chopps ; Copyright (c) 1995 Michael L. Hitch 5 1.2 chopps ; All rights reserved. 6 1.2 chopps ; 7 1.2 chopps ; Redistribution and use in source and binary forms, with or without 8 1.2 chopps ; modification, are permitted provided that the following conditions 9 1.2 chopps ; are met: 10 1.2 chopps ; 1. Redistributions of source code must retain the above copyright 11 1.2 chopps ; notice, this list of conditions and the following disclaimer. 12 1.2 chopps ; 2. Redistributions in binary form must reproduce the above copyright 13 1.2 chopps ; notice, this list of conditions and the following disclaimer in the 14 1.2 chopps ; documentation and/or other materials provided with the distribution. 15 1.2 chopps ; 16 1.2 chopps ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.2 chopps ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.2 chopps ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.2 chopps ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.2 chopps ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.2 chopps ; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.2 chopps ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.2 chopps ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.2 chopps ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.2 chopps ; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.2 chopps ; 27 1.2 chopps 28 1.1 chopps ; NCR 53c710 script 29 1.1 chopps ; 30 1.4 mhitch ARCH 710 31 1.4 mhitch ; 32 1.1 chopps ABSOLUTE ds_Device = 0 33 1.1 chopps ABSOLUTE ds_MsgOut = ds_Device + 4 34 1.1 chopps ABSOLUTE ds_Cmd = ds_MsgOut + 8 35 1.1 chopps ABSOLUTE ds_Status = ds_Cmd + 8 36 1.1 chopps ABSOLUTE ds_Msg = ds_Status + 8 37 1.1 chopps ABSOLUTE ds_MsgIn = ds_Msg + 8 38 1.1 chopps ABSOLUTE ds_ExtMsg = ds_MsgIn + 8 39 1.1 chopps ABSOLUTE ds_SyncMsg = ds_ExtMsg + 8 40 1.1 chopps ABSOLUTE ds_Data1 = ds_SyncMsg + 8 41 1.1 chopps ABSOLUTE ds_Data2 = ds_Data1 + 8 42 1.1 chopps ABSOLUTE ds_Data3 = ds_Data2 + 8 43 1.1 chopps ABSOLUTE ds_Data4 = ds_Data3 + 8 44 1.1 chopps ABSOLUTE ds_Data5 = ds_Data4 + 8 45 1.1 chopps ABSOLUTE ds_Data6 = ds_Data5 + 8 46 1.1 chopps ABSOLUTE ds_Data7 = ds_Data6 + 8 47 1.1 chopps ABSOLUTE ds_Data8 = ds_Data7 + 8 48 1.1 chopps ABSOLUTE ds_Data9 = ds_Data8 + 8 49 1.1 chopps 50 1.1 chopps ABSOLUTE ok = 0xff00 51 1.1 chopps ABSOLUTE err1 = 0xff01 52 1.1 chopps ABSOLUTE err2 = 0xff02 53 1.1 chopps ABSOLUTE err3 = 0xff03 54 1.1 chopps ABSOLUTE err4 = 0xff04 55 1.1 chopps ABSOLUTE err5 = 0xff05 56 1.1 chopps ABSOLUTE err6 = 0xff06 57 1.1 chopps ABSOLUTE err7 = 0xff07 58 1.1 chopps ABSOLUTE err8 = 0xff08 59 1.1 chopps ABSOLUTE err9 = 0xff09 60 1.1 chopps ABSOLUTE err10 = 0xff0a 61 1.4 mhitch ABSOLUTE err11 = 0xff0b 62 1.1 chopps 63 1.1 chopps ENTRY scripts 64 1.1 chopps ENTRY switch 65 1.1 chopps ENTRY wait_reselect 66 1.3 chopps ENTRY dataout 67 1.3 chopps ENTRY datain 68 1.4 mhitch ENTRY clear_ack 69 1.1 chopps 70 1.1 chopps PROC scripts: 71 1.1 chopps 72 1.1 chopps scripts: 73 1.1 chopps 74 1.1 chopps SELECT ATN FROM ds_Device, REL(reselect) 75 1.1 chopps ; 76 1.1 chopps switch: 77 1.1 chopps JUMP REL(msgin), WHEN MSG_IN 78 1.1 chopps JUMP REL(msgout), IF MSG_OUT 79 1.1 chopps JUMP REL(command_phase), IF CMD 80 1.1 chopps JUMP REL(dataout), IF DATA_OUT 81 1.1 chopps JUMP REL(datain), IF DATA_IN 82 1.1 chopps JUMP REL(end), IF STATUS 83 1.1 chopps 84 1.3 chopps INT err5 ; Unrecognized phase 85 1.1 chopps 86 1.1 chopps msgin: 87 1.1 chopps MOVE FROM ds_MsgIn, WHEN MSG_IN 88 1.1 chopps JUMP REL(ext_msg), IF 0x01 ; extended message 89 1.1 chopps JUMP REL(disc), IF 0x04 ; disconnect message 90 1.3 chopps JUMP REL(msg_sdp), IF 0x02 ; save data pointers 91 1.3 chopps JUMP REL(msg_rej), IF 0x07 ; message reject 92 1.3 chopps JUMP REL(msg_rdp), IF 0x03 ; restore data pointers 93 1.3 chopps INT err6 ; unrecognized message 94 1.1 chopps 95 1.4 mhitch msg_rej: 96 1.4 mhitch ; Do we need to interrupt host here to let it handle the reject? 97 1.3 chopps msg_rdp: 98 1.4 mhitch clear_ack: 99 1.3 chopps CLEAR ACK 100 1.1 chopps CLEAR ATN 101 1.1 chopps JUMP REL(switch) 102 1.1 chopps 103 1.1 chopps ext_msg: 104 1.3 chopps CLEAR ACK 105 1.1 chopps MOVE FROM ds_ExtMsg, WHEN MSG_IN 106 1.1 chopps JUMP REL(sync_msg), IF 0x03 107 1.3 chopps int err7 ; extended message not SDTR 108 1.1 chopps 109 1.1 chopps sync_msg: 110 1.1 chopps CLEAR ACK 111 1.1 chopps MOVE FROM ds_SyncMsg, WHEN MSG_IN 112 1.4 mhitch int err11 ; Let host handle the message 113 1.4 mhitch ; If we continue from the interrupt, the host has set up a response 114 1.4 mhitch ; message to be sent. Set ATN, clear ACK, and continue. 115 1.4 mhitch SET ATN 116 1.1 chopps CLEAR ACK 117 1.1 chopps JUMP REL(switch) 118 1.1 chopps 119 1.1 chopps disc: 120 1.3 chopps CLEAR ACK 121 1.3 chopps WAIT DISCONNECT 122 1.3 chopps 123 1.3 chopps int err2 ; signal disconnect w/o save DP 124 1.3 chopps 125 1.3 chopps msg_sdp: 126 1.3 chopps CLEAR ACK ; acknowledge message 127 1.3 chopps JUMP REL(switch), WHEN NOT MSG_IN 128 1.3 chopps MOVE FROM ds_ExtMsg, WHEN MSG_IN 129 1.3 chopps INT err8, IF NOT 0x04 ; interrupt if not disconnect 130 1.3 chopps CLEAR ACK 131 1.1 chopps WAIT DISCONNECT 132 1.1 chopps 133 1.3 chopps INT err1 ; signal disconnect 134 1.1 chopps 135 1.3 chopps reselect: 136 1.1 chopps wait_reselect: 137 1.1 chopps WAIT RESELECT REL(select_adr) 138 1.3 chopps MOVE LCRC to SFBR ; Save reselect ID 139 1.3 chopps MOVE SFBR to SCRATCH0 140 1.1 chopps 141 1.3 chopps INT err9, WHEN NOT MSG_IN ; didn't get IDENTIFY 142 1.1 chopps MOVE FROM ds_Msg, WHEN MSG_IN 143 1.3 chopps INT err3 ; let host know about reconnect 144 1.6 maya CLEAR ACK ; acknowledge the message 145 1.1 chopps JUMP REL(switch) 146 1.1 chopps 147 1.3 chopps 148 1.3 chopps select_adr: 149 1.3 chopps MOVE SCNTL1 & 0x10 to SFBR ; get connected status 150 1.3 chopps INT err4, IF 0x00 ; tell host if not connected 151 1.3 chopps MOVE CTEST2 & 0x40 to SFBR ; clear Sig_P 152 1.3 chopps JUMP REL(wait_reselect) ; and try reselect again 153 1.3 chopps 154 1.1 chopps msgout: 155 1.1 chopps MOVE FROM ds_MsgOut, WHEN MSG_OUT 156 1.1 chopps JUMP REL(switch) 157 1.1 chopps 158 1.1 chopps command_phase: 159 1.1 chopps CLEAR ATN 160 1.1 chopps MOVE FROM ds_Cmd, WHEN CMD 161 1.1 chopps JUMP REL(switch) 162 1.1 chopps 163 1.1 chopps dataout: 164 1.1 chopps MOVE FROM ds_Data1, WHEN DATA_OUT 165 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 166 1.1 chopps MOVE FROM ds_Data2, WHEN DATA_OUT 167 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 168 1.1 chopps MOVE FROM ds_Data3, WHEN DATA_OUT 169 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 170 1.1 chopps MOVE FROM ds_Data4, WHEN DATA_OUT 171 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 172 1.1 chopps MOVE FROM ds_Data5, WHEN DATA_OUT 173 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 174 1.1 chopps MOVE FROM ds_Data6, WHEN DATA_OUT 175 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 176 1.1 chopps MOVE FROM ds_Data7, WHEN DATA_OUT 177 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 178 1.1 chopps MOVE FROM ds_Data8, WHEN DATA_OUT 179 1.1 chopps CALL REL(switch), WHEN NOT DATA_OUT 180 1.1 chopps MOVE FROM ds_Data9, WHEN DATA_OUT 181 1.1 chopps CALL REL(switch) 182 1.1 chopps 183 1.1 chopps datain: 184 1.1 chopps MOVE FROM ds_Data1, WHEN DATA_IN 185 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 186 1.1 chopps MOVE FROM ds_Data2, WHEN DATA_IN 187 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 188 1.1 chopps MOVE FROM ds_Data3, WHEN DATA_IN 189 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 190 1.1 chopps MOVE FROM ds_Data4, WHEN DATA_IN 191 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 192 1.1 chopps MOVE FROM ds_Data5, WHEN DATA_IN 193 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 194 1.1 chopps MOVE FROM ds_Data6, WHEN DATA_IN 195 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 196 1.1 chopps MOVE FROM ds_Data7, WHEN DATA_IN 197 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 198 1.1 chopps MOVE FROM ds_Data8, WHEN DATA_IN 199 1.1 chopps CALL REL(switch), WHEN NOT DATA_IN 200 1.1 chopps MOVE FROM ds_Data9, WHEN DATA_IN 201 1.1 chopps CALL REL(switch) 202 1.1 chopps 203 1.1 chopps end: 204 1.1 chopps MOVE FROM ds_Status, WHEN STATUS 205 1.3 chopps int err10, WHEN NOT MSG_IN ; status not followed by msg 206 1.1 chopps MOVE FROM ds_Msg, WHEN MSG_IN 207 1.1 chopps CLEAR ACK 208 1.1 chopps WAIT DISCONNECT 209 1.3 chopps INT ok ; signal completion 210 1.1 chopps JUMP REL(wait_reselect) 211