Home | History | Annotate | Line # | Download | only in dev
siop_script.ss revision 1.3
      1 ;	$NetBSD: siop_script.ss,v 1.3 1995/08/18 15:28:11 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 ENTRY	dataout
     69 ENTRY	datain
     70 
     71 PROC	scripts:
     72 
     73 scripts:
     74 
     75 	SELECT ATN FROM ds_Device, REL(reselect)
     76 ;
     77 switch:
     78 	JUMP REL(msgin), WHEN MSG_IN
     79 	JUMP REL(msgout), IF MSG_OUT
     80 	JUMP REL(command_phase), IF CMD
     81 	JUMP REL(dataout), IF DATA_OUT
     82 	JUMP REL(datain), IF DATA_IN
     83 	JUMP REL(end), IF STATUS
     84 
     85 	INT err5			; Unrecognized phase
     86 
     87 msgin:
     88 	MOVE FROM ds_MsgIn, WHEN MSG_IN
     89 	JUMP REL(ext_msg), IF 0x01	; extended message
     90 	JUMP REL(disc), IF 0x04		; disconnect message
     91 	JUMP REL(msg_sdp), IF 0x02	; save data pointers
     92 	JUMP REL(msg_rej), IF 0x07	; message reject
     93 	JUMP REL(msg_rdp), IF 0x03	; restore data pointers
     94 	INT err6			; unrecognized message
     95 
     96 msg_rdp:
     97 msg_rej:
     98 	CLEAR ACK
     99 	CLEAR ATN
    100 	JUMP REL(switch)
    101 
    102 ext_msg:
    103 	CLEAR ACK
    104 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
    105 	JUMP REL(sync_msg), IF 0x03
    106 	int err7			; extended message not SDTR
    107 
    108 sync_msg:
    109 	CLEAR ACK
    110 	MOVE FROM ds_SyncMsg, WHEN MSG_IN
    111 	CLEAR ACK
    112 	JUMP REL(switch)
    113 
    114 disc:
    115 	CLEAR ACK
    116 	WAIT DISCONNECT
    117 
    118 	int err2			; signal disconnect w/o save DP
    119 
    120 msg_sdp:
    121 	CLEAR ACK			; acknowledge message
    122 	JUMP REL(switch), WHEN NOT MSG_IN
    123 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
    124 	INT err8, IF NOT 0x04		; interrupt if not disconnect
    125 	CLEAR ACK
    126 	WAIT DISCONNECT
    127 
    128 	INT err1			; signal disconnect
    129 
    130 reselect:
    131 wait_reselect:
    132 	WAIT RESELECT REL(select_adr)
    133 	MOVE LCRC to SFBR		; Save reselect ID
    134 	MOVE SFBR to SCRATCH0
    135 
    136 	INT err9, WHEN NOT MSG_IN	; didn't get IDENTIFY
    137 	MOVE FROM ds_Msg, WHEN MSG_IN
    138 	INT err3			; let host know about reconnect
    139 	CLEAR ACK			; acknowlege the message
    140 	JUMP REL(switch)
    141 
    142 
    143 select_adr:
    144 	MOVE SCNTL1 & 0x10 to SFBR	; get connected status
    145 	INT err4, IF 0x00		; tell host if not connected
    146 	MOVE CTEST2 & 0x40 to SFBR	; clear Sig_P
    147 	JUMP REL(wait_reselect)		; and try reselect again
    148 
    149 msgout:
    150 	MOVE FROM ds_MsgOut, WHEN MSG_OUT
    151 	JUMP REL(switch)
    152 
    153 command_phase:
    154 	CLEAR ATN
    155 	MOVE FROM ds_Cmd, WHEN CMD
    156 	JUMP REL(switch)
    157 
    158 dataout:
    159 	MOVE FROM ds_Data1, WHEN DATA_OUT
    160 	CALL REL(switch), WHEN NOT DATA_OUT
    161 	MOVE FROM ds_Data2, WHEN DATA_OUT
    162 	CALL REL(switch), WHEN NOT DATA_OUT
    163 	MOVE FROM ds_Data3, WHEN DATA_OUT
    164 	CALL REL(switch), WHEN NOT DATA_OUT
    165 	MOVE FROM ds_Data4, WHEN DATA_OUT
    166 	CALL REL(switch), WHEN NOT DATA_OUT
    167 	MOVE FROM ds_Data5, WHEN DATA_OUT
    168 	CALL REL(switch), WHEN NOT DATA_OUT
    169 	MOVE FROM ds_Data6, WHEN DATA_OUT
    170 	CALL REL(switch), WHEN NOT DATA_OUT
    171 	MOVE FROM ds_Data7, WHEN DATA_OUT
    172 	CALL REL(switch), WHEN NOT DATA_OUT
    173 	MOVE FROM ds_Data8, WHEN DATA_OUT
    174 	CALL REL(switch), WHEN NOT DATA_OUT
    175 	MOVE FROM ds_Data9, WHEN DATA_OUT
    176 	CALL REL(switch)
    177 
    178 datain:
    179 	MOVE FROM ds_Data1, WHEN DATA_IN
    180 	CALL REL(switch), WHEN NOT DATA_IN
    181 	MOVE FROM ds_Data2, WHEN DATA_IN
    182 	CALL REL(switch), WHEN NOT DATA_IN
    183 	MOVE FROM ds_Data3, WHEN DATA_IN
    184 	CALL REL(switch), WHEN NOT DATA_IN
    185 	MOVE FROM ds_Data4, WHEN DATA_IN
    186 	CALL REL(switch), WHEN NOT DATA_IN
    187 	MOVE FROM ds_Data5, WHEN DATA_IN
    188 	CALL REL(switch), WHEN NOT DATA_IN
    189 	MOVE FROM ds_Data6, WHEN DATA_IN
    190 	CALL REL(switch), WHEN NOT DATA_IN
    191 	MOVE FROM ds_Data7, WHEN DATA_IN
    192 	CALL REL(switch), WHEN NOT DATA_IN
    193 	MOVE FROM ds_Data8, WHEN DATA_IN
    194 	CALL REL(switch), WHEN NOT DATA_IN
    195 	MOVE FROM ds_Data9, WHEN DATA_IN
    196 	CALL REL(switch)
    197 
    198 end:
    199 	MOVE FROM ds_Status, WHEN STATUS
    200 	int err10, WHEN NOT MSG_IN	; status not followed by msg
    201 	MOVE FROM ds_Msg, WHEN MSG_IN
    202 	CLEAR ACK
    203 	WAIT DISCONNECT
    204 	INT ok				; signal completion
    205 	JUMP REL(wait_reselect)
    206