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