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