Home | History | Annotate | Line # | Download | only in dev
siop_script.ss revision 1.4
      1 ;	$NetBSD: siop_script.ss,v 1.4 1999/03/26 22:50:26 mhitch 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 ARCH 710
     36 ;
     37 ABSOLUTE ds_Device	= 0
     38 ABSOLUTE ds_MsgOut 	= ds_Device + 4
     39 ABSOLUTE ds_Cmd		= ds_MsgOut + 8
     40 ABSOLUTE ds_Status	= ds_Cmd + 8
     41 ABSOLUTE ds_Msg		= ds_Status + 8
     42 ABSOLUTE ds_MsgIn	= ds_Msg + 8
     43 ABSOLUTE ds_ExtMsg	= ds_MsgIn + 8
     44 ABSOLUTE ds_SyncMsg	= ds_ExtMsg + 8
     45 ABSOLUTE ds_Data1	= ds_SyncMsg + 8
     46 ABSOLUTE ds_Data2	= ds_Data1 + 8
     47 ABSOLUTE ds_Data3	= ds_Data2 + 8
     48 ABSOLUTE ds_Data4	= ds_Data3 + 8
     49 ABSOLUTE ds_Data5	= ds_Data4 + 8
     50 ABSOLUTE ds_Data6	= ds_Data5 + 8
     51 ABSOLUTE ds_Data7	= ds_Data6 + 8
     52 ABSOLUTE ds_Data8	= ds_Data7 + 8
     53 ABSOLUTE ds_Data9	= ds_Data8 + 8
     54 
     55 ABSOLUTE ok		= 0xff00
     56 ABSOLUTE err1		= 0xff01
     57 ABSOLUTE err2		= 0xff02
     58 ABSOLUTE err3		= 0xff03
     59 ABSOLUTE err4		= 0xff04
     60 ABSOLUTE err5		= 0xff05
     61 ABSOLUTE err6		= 0xff06
     62 ABSOLUTE err7		= 0xff07
     63 ABSOLUTE err8		= 0xff08
     64 ABSOLUTE err9		= 0xff09
     65 ABSOLUTE err10		= 0xff0a
     66 ABSOLUTE err11		= 0xff0b
     67 
     68 ENTRY	scripts
     69 ENTRY	switch
     70 ENTRY	wait_reselect
     71 ENTRY	dataout
     72 ENTRY	datain
     73 ENTRY	clear_ack
     74 
     75 PROC	scripts:
     76 
     77 scripts:
     78 
     79 	SELECT ATN FROM ds_Device, REL(reselect)
     80 ;
     81 switch:
     82 	JUMP REL(msgin), WHEN MSG_IN
     83 	JUMP REL(msgout), IF MSG_OUT
     84 	JUMP REL(command_phase), IF CMD
     85 	JUMP REL(dataout), IF DATA_OUT
     86 	JUMP REL(datain), IF DATA_IN
     87 	JUMP REL(end), IF STATUS
     88 
     89 	INT err5			; Unrecognized phase
     90 
     91 msgin:
     92 	MOVE FROM ds_MsgIn, WHEN MSG_IN
     93 	JUMP REL(ext_msg), IF 0x01	; extended message
     94 	JUMP REL(disc), IF 0x04		; disconnect message
     95 	JUMP REL(msg_sdp), IF 0x02	; save data pointers
     96 	JUMP REL(msg_rej), IF 0x07	; message reject
     97 	JUMP REL(msg_rdp), IF 0x03	; restore data pointers
     98 	INT err6			; unrecognized message
     99 
    100 msg_rej:
    101 ; Do we need to interrupt host here to let it handle the reject?
    102 msg_rdp:
    103 clear_ack:
    104 	CLEAR ACK
    105 	CLEAR ATN
    106 	JUMP REL(switch)
    107 
    108 ext_msg:
    109 	CLEAR ACK
    110 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
    111 	JUMP REL(sync_msg), IF 0x03
    112 	int err7			; extended message not SDTR
    113 
    114 sync_msg:
    115 	CLEAR ACK
    116 	MOVE FROM ds_SyncMsg, WHEN MSG_IN
    117 	int err11			; Let host handle the message
    118 ; If we continue from the interrupt, the host has set up a response
    119 ; message to be sent.  Set ATN, clear ACK, and continue.
    120 	SET ATN
    121 	CLEAR ACK
    122 	JUMP REL(switch)
    123 
    124 disc:
    125 	CLEAR ACK
    126 	WAIT DISCONNECT
    127 
    128 	int err2			; signal disconnect w/o save DP
    129 
    130 msg_sdp:
    131 	CLEAR ACK			; acknowledge message
    132 	JUMP REL(switch), WHEN NOT MSG_IN
    133 	MOVE FROM ds_ExtMsg, WHEN MSG_IN
    134 	INT err8, IF NOT 0x04		; interrupt if not disconnect
    135 	CLEAR ACK
    136 	WAIT DISCONNECT
    137 
    138 	INT err1			; signal disconnect
    139 
    140 reselect:
    141 wait_reselect:
    142 	WAIT RESELECT REL(select_adr)
    143 	MOVE LCRC to SFBR		; Save reselect ID
    144 	MOVE SFBR to SCRATCH0
    145 
    146 	INT err9, WHEN NOT MSG_IN	; didn't get IDENTIFY
    147 	MOVE FROM ds_Msg, WHEN MSG_IN
    148 	INT err3			; let host know about reconnect
    149 	CLEAR ACK			; acknowlege the message
    150 	JUMP REL(switch)
    151 
    152 
    153 select_adr:
    154 	MOVE SCNTL1 & 0x10 to SFBR	; get connected status
    155 	INT err4, IF 0x00		; tell host if not connected
    156 	MOVE CTEST2 & 0x40 to SFBR	; clear Sig_P
    157 	JUMP REL(wait_reselect)		; and try reselect again
    158 
    159 msgout:
    160 	MOVE FROM ds_MsgOut, WHEN MSG_OUT
    161 	JUMP REL(switch)
    162 
    163 command_phase:
    164 	CLEAR ATN
    165 	MOVE FROM ds_Cmd, WHEN CMD
    166 	JUMP REL(switch)
    167 
    168 dataout:
    169 	MOVE FROM ds_Data1, WHEN DATA_OUT
    170 	CALL REL(switch), WHEN NOT DATA_OUT
    171 	MOVE FROM ds_Data2, WHEN DATA_OUT
    172 	CALL REL(switch), WHEN NOT DATA_OUT
    173 	MOVE FROM ds_Data3, WHEN DATA_OUT
    174 	CALL REL(switch), WHEN NOT DATA_OUT
    175 	MOVE FROM ds_Data4, WHEN DATA_OUT
    176 	CALL REL(switch), WHEN NOT DATA_OUT
    177 	MOVE FROM ds_Data5, WHEN DATA_OUT
    178 	CALL REL(switch), WHEN NOT DATA_OUT
    179 	MOVE FROM ds_Data6, WHEN DATA_OUT
    180 	CALL REL(switch), WHEN NOT DATA_OUT
    181 	MOVE FROM ds_Data7, WHEN DATA_OUT
    182 	CALL REL(switch), WHEN NOT DATA_OUT
    183 	MOVE FROM ds_Data8, WHEN DATA_OUT
    184 	CALL REL(switch), WHEN NOT DATA_OUT
    185 	MOVE FROM ds_Data9, WHEN DATA_OUT
    186 	CALL REL(switch)
    187 
    188 datain:
    189 	MOVE FROM ds_Data1, WHEN DATA_IN
    190 	CALL REL(switch), WHEN NOT DATA_IN
    191 	MOVE FROM ds_Data2, WHEN DATA_IN
    192 	CALL REL(switch), WHEN NOT DATA_IN
    193 	MOVE FROM ds_Data3, WHEN DATA_IN
    194 	CALL REL(switch), WHEN NOT DATA_IN
    195 	MOVE FROM ds_Data4, WHEN DATA_IN
    196 	CALL REL(switch), WHEN NOT DATA_IN
    197 	MOVE FROM ds_Data5, WHEN DATA_IN
    198 	CALL REL(switch), WHEN NOT DATA_IN
    199 	MOVE FROM ds_Data6, WHEN DATA_IN
    200 	CALL REL(switch), WHEN NOT DATA_IN
    201 	MOVE FROM ds_Data7, WHEN DATA_IN
    202 	CALL REL(switch), WHEN NOT DATA_IN
    203 	MOVE FROM ds_Data8, WHEN DATA_IN
    204 	CALL REL(switch), WHEN NOT DATA_IN
    205 	MOVE FROM ds_Data9, WHEN DATA_IN
    206 	CALL REL(switch)
    207 
    208 end:
    209 	MOVE FROM ds_Status, WHEN STATUS
    210 	int err10, WHEN NOT MSG_IN	; status not followed by msg
    211 	MOVE FROM ds_Msg, WHEN MSG_IN
    212 	CLEAR ACK
    213 	WAIT DISCONNECT
    214 	INT ok				; signal completion
    215 	JUMP REL(wait_reselect)
    216