Home | History | Annotate | Line # | Download | only in dev
siop_script.ss revision 1.2
      1 ;	$NetBSD: siop_script.ss,v 1.2 1995/07/04 18:06:43 chopps Exp $
      2 
      3 ;
      4 ; Copyright (c) 1995 Michael L. Hitch
      5 ; All rights reserved.
      6 ;
      7 ; Redistribution and use in source and binary forms, with or without
      8 ; modification, are permitted provided that the following conditions
      9 ; are met:
     10 ; 1. Redistributions of source code must retain the above copyright
     11 ;    notice, this list of conditions and the following disclaimer.
     12 ; 2. Redistributions in binary form must reproduce the above copyright
     13 ;    notice, this list of conditions and the following disclaimer in the
     14 ;    documentation and/or other materials provided with the distribution.
     15 ; 3. All advertising materials mentioning features or use of this software
     16 ;    must display the following acknowledgement:
     17 ;      This product includes software developed by Michael L. Hitch.
     18 ; 4. The name of the author may not be used to endorse or promote products
     19 ;    derived from this software without specific prior written permission
     20 ;
     21 ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22 ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23 ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24 ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25 ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26 ; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27 ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28 ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30 ; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 ;
     32 
     33 ; NCR 53c710 script
     34 ;
     35 ABSOLUTE ds_Device	= 0
     36 ABSOLUTE ds_MsgOut 	= ds_Device + 4
     37 ABSOLUTE ds_Cmd		= ds_MsgOut + 8
     38 ABSOLUTE ds_Status	= ds_Cmd + 8
     39 ABSOLUTE ds_Msg		= ds_Status + 8
     40 ABSOLUTE ds_MsgIn	= ds_Msg + 8
     41 ABSOLUTE ds_ExtMsg	= ds_MsgIn + 8
     42 ABSOLUTE ds_SyncMsg	= ds_ExtMsg + 8
     43 ABSOLUTE ds_Data1	= ds_SyncMsg + 8
     44 ABSOLUTE ds_Data2	= ds_Data1 + 8
     45 ABSOLUTE ds_Data3	= ds_Data2 + 8
     46 ABSOLUTE ds_Data4	= ds_Data3 + 8
     47 ABSOLUTE ds_Data5	= ds_Data4 + 8
     48 ABSOLUTE ds_Data6	= ds_Data5 + 8
     49 ABSOLUTE ds_Data7	= ds_Data6 + 8
     50 ABSOLUTE ds_Data8	= ds_Data7 + 8
     51 ABSOLUTE ds_Data9	= ds_Data8 + 8
     52 
     53 ABSOLUTE ok		= 0xff00
     54 ABSOLUTE err1		= 0xff01
     55 ABSOLUTE err2		= 0xff02
     56 ABSOLUTE err3		= 0xff03
     57 ABSOLUTE err4		= 0xff04
     58 ABSOLUTE err5		= 0xff05
     59 ABSOLUTE err6		= 0xff06
     60 ABSOLUTE err7		= 0xff07
     61 ABSOLUTE err8		= 0xff08
     62 ABSOLUTE err9		= 0xff09
     63 ABSOLUTE err10		= 0xff0a
     64 
     65 ENTRY	scripts
     66 ENTRY	switch
     67 ENTRY	wait_reselect
     68 
     69 PROC	scripts:
     70 
     71 scripts:
     72 
     73 	SELECT ATN FROM ds_Device, REL(reselect)
     74 ;
     75 switch:
     76 	JUMP REL(msgin), WHEN MSG_IN
     77 	JUMP REL(msgout), IF MSG_OUT
     78 	JUMP REL(command_phase), IF CMD
     79 	JUMP REL(dataout), IF DATA_OUT
     80 	JUMP REL(datain), IF DATA_IN
     81 	JUMP REL(end), IF STATUS
     82 
     83 	INT err1
     84 
     85 msgin:
     86 	MOVE FROM ds_MsgIn, WHEN MSG_IN
     87 	CLEAR ACK
     88 	JUMP REL(ext_msg), IF 0x01	; extended message
     89 	JUMP REL(disc), IF 0x04		; disconnect message
     90 	JUMP REL(switch), IF 0x02	; ignore save data pointers
     91 	JUMP REL(msg_rej), IF 0x07	; ignore message reject
     92 	JUMP REL(switch), IF 0x03	; ignore restore data pointers
     93 	INT err2
     94 
     95 msg_rej:
     96 	CLEAR ATN
     97 	JUMP REL(switch)
     98 
     99 ext_msg:
    100 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
    101 	JUMP REL(sync_msg), IF 0x03
    102 	int err3
    103 
    104 sync_msg:
    105 	CLEAR ACK
    106 	MOVE FROM ds_SyncMsg, WHEN MSG_IN
    107 	CLEAR ACK
    108 	JUMP REL(switch)
    109 
    110 disc:
    111 	WAIT DISCONNECT
    112 
    113 	INT err10			; let host know about disconnect
    114 
    115 wait_reselect:
    116 	WAIT RESELECT REL(select_adr)
    117 
    118 	INT err4, WHEN NOT MSG_IN
    119 	MOVE FROM ds_Msg, WHEN MSG_IN
    120 	CLEAR ACK
    121 	INT err9			; let host know about reconnect
    122 	JUMP REL(switch)
    123 
    124 msgout:
    125 	MOVE FROM ds_MsgOut, WHEN MSG_OUT
    126 	JUMP REL(switch)
    127 
    128 command_phase:
    129 	CLEAR ATN
    130 	MOVE FROM ds_Cmd, WHEN CMD
    131 	JUMP REL(switch)
    132 
    133 dataout:
    134 	MOVE FROM ds_Data1, WHEN DATA_OUT
    135 	CALL REL(switch), WHEN NOT DATA_OUT
    136 	MOVE FROM ds_Data2, WHEN DATA_OUT
    137 	CALL REL(switch), WHEN NOT DATA_OUT
    138 	MOVE FROM ds_Data3, WHEN DATA_OUT
    139 	CALL REL(switch), WHEN NOT DATA_OUT
    140 	MOVE FROM ds_Data4, WHEN DATA_OUT
    141 	CALL REL(switch), WHEN NOT DATA_OUT
    142 	MOVE FROM ds_Data5, WHEN DATA_OUT
    143 	CALL REL(switch), WHEN NOT DATA_OUT
    144 	MOVE FROM ds_Data6, WHEN DATA_OUT
    145 	CALL REL(switch), WHEN NOT DATA_OUT
    146 	MOVE FROM ds_Data7, WHEN DATA_OUT
    147 	CALL REL(switch), WHEN NOT DATA_OUT
    148 	MOVE FROM ds_Data8, WHEN DATA_OUT
    149 	CALL REL(switch), WHEN NOT DATA_OUT
    150 	MOVE FROM ds_Data9, WHEN DATA_OUT
    151 	CALL REL(switch)
    152 
    153 datain:
    154 	MOVE FROM ds_Data1, WHEN DATA_IN
    155 	CALL REL(switch), WHEN NOT DATA_IN
    156 	MOVE FROM ds_Data2, WHEN DATA_IN
    157 	CALL REL(switch), WHEN NOT DATA_IN
    158 	MOVE FROM ds_Data3, WHEN DATA_IN
    159 	CALL REL(switch), WHEN NOT DATA_IN
    160 	MOVE FROM ds_Data4, WHEN DATA_IN
    161 	CALL REL(switch), WHEN NOT DATA_IN
    162 	MOVE FROM ds_Data5, WHEN DATA_IN
    163 	CALL REL(switch), WHEN NOT DATA_IN
    164 	MOVE FROM ds_Data6, WHEN DATA_IN
    165 	CALL REL(switch), WHEN NOT DATA_IN
    166 	MOVE FROM ds_Data7, WHEN DATA_IN
    167 	CALL REL(switch), WHEN NOT DATA_IN
    168 	MOVE FROM ds_Data8, WHEN DATA_IN
    169 	CALL REL(switch), WHEN NOT DATA_IN
    170 	MOVE FROM ds_Data9, WHEN DATA_IN
    171 	CALL REL(switch)
    172 
    173 end:
    174 	MOVE FROM ds_Status, WHEN STATUS
    175 	int err5, WHEN NOT MSG_IN
    176 	MOVE FROM ds_Msg, WHEN MSG_IN
    177 	CLEAR ACK
    178 	WAIT DISCONNECT
    179 	INT ok
    180 	JUMP REL(wait_reselect)
    181 
    182 reselect:
    183 	WAIT RESELECT REL(select_adr)
    184 	INT err6
    185 
    186 	INT err4, WHEN NOT MSG_IN
    187 	MOVE FROM ds_Msg, WHEN MSG_IN
    188 	CLEAR ACK
    189 	JUMP REL(switch)
    190 
    191 select_adr:
    192 	MOVE CTEST2 & 0x40 to SFBR	; get Sig_P
    193 	INT err7
    194 	JUMP REL(scripts)
    195