[BACK]Return to osiop.ss CVS log [TXT][DIR] Up to [local] / sys / dev / microcode / siop

Annotation of sys/dev/microcode/siop/osiop.ss, Revision 1.1.1.1

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

CVSweb