ARCH 810
ABSOLUTE status_ready = 0x10
ABSOLUTE status_reselected = 0x11
ABSOLUTE status_timeout = 0x12
ABSOLUTE status_selected = 0x13
ABSOLUTE status_complete = 0x14
ABSOLUTE status_disconnect = 0x15
ABSOLUTE status_badstatus = 0x16
ABSOLUTE status_overrun = 0x17
ABSOLUTE status_underrun = 0x18
ABSOLUTE status_badphase = 0x19
ABSOLUTE status_badmsg = 0x1a
ABSOLUTE status_badextmsg = 0x1b
ABSOLUTE status_selftest = 0x1c
ABSOLUTE status_iocomplete = 0x1d
ABSOLUTE status_syncin = 0x1e
ABSOLUTE status_widein = 0x1f
ABSOLUTE status_ignore_residue = 0x20
ABSOLUTE ctxt_device = 0x00
ABSOLUTE ctxt_sendmsg = 0x08
ABSOLUTE ctxt_recvmsg = 0x10
ABSOLUTE ctxt_extdmsg = 0x18
ABSOLUTE ctxt_syncmsg = 0x20
ABSOLUTE ctxt_status = 0x28
ABSOLUTE ctxt_command = 0x30
ABSOLUTE ctxt_widemsg = 0x38
ENTRY start
ENTRY idle
ENTRY switch
ENTRY switch_resel
ENTRY phase_dataerr
ENTRY test
ENTRY do_datain
ENTRY do_dataout
idle:
WAIT RESELECT interrupted
INT status_reselected
interrupted:
MOVE CTEST2 TO SFBR
INT status_ready
start:
SELECT ATN FROM ctxt_device, resel
JUMP selected, WHEN MSG_OUT
INT status_timeout
selected:
INT status_selected
resel:
INT status_reselected
switch_resel:
SELECT FROM ctxt_device, switch
switch:
JUMP phase_msgin, WHEN MSG_IN
JUMP phase_msgout, IF MSG_OUT
JUMP phase_command, IF CMD
do_datain:
JUMP phase_dataerr, IF DATA_IN
do_dataout:
JUMP phase_dataerr, IF DATA_OUT
JUMP phase_status, IF STATUS
INT status_badphase
phase_msgin:
MOVE FROM ctxt_recvmsg, WHEN MSG_IN
JUMP phase_msgin_ext, IF 0x01
JUMP disc, IF 0x04
JUMP ignore, IF 0x23
CLEAR ACK
JUMP switch, IF 0x02
JUMP switch, IF 0x07
JUMP switch, IF 0x03
JUMP switch, IF 0x80
JUMP switch, IF 0x81
JUMP switch, IF 0x82
JUMP switch, IF 0x83
JUMP switch, IF 0x84
JUMP switch, IF 0x85
JUMP switch, IF 0x86
JUMP switch, IF 0x87
JUMP switch, IF 0xC0
JUMP switch, IF 0xC1
JUMP switch, IF 0xC2
JUMP switch, IF 0xC3
JUMP switch, IF 0xC4
JUMP switch, IF 0xC5
JUMP switch, IF 0xC6
JUMP switch, IF 0xC7
INT status_badmsg
ignore:
CLEAR ACK
MOVE FROM ctxt_extdmsg, WHEN MSG_IN
CLEAR ACK
JUMP switch
phase_msgin_ext:
CLEAR ACK
MOVE FROM ctxt_extdmsg, WHEN MSG_IN
JUMP phase_msgin_sync, IF 0x03
JUMP phase_msgin_wide, IF 0x02
INT status_badextmsg
phase_msgin_wide:
CLEAR ACK
MOVE FROM ctxt_widemsg, WHEN MSG_IN
CLEAR ACK
INT status_widein
phase_msgin_sync:
CLEAR ACK
MOVE FROM ctxt_syncmsg, WHEN MSG_IN
CLEAR ACK
INT status_syncin
phase_msgout:
MOVE FROM ctxt_sendmsg, WHEN MSG_OUT
JUMP switch
phase_command:
MOVE FROM ctxt_command, WHEN CMD
JUMP switch
phase_dataerr:
INT status_overrun
phase_status:
MOVE FROM ctxt_status, WHEN STATUS
INT status_badstatus, WHEN NOT MSG_IN
MOVE FROM ctxt_recvmsg, WHEN MSG_IN
INT status_badmsg, IF NOT 0x00
MOVE SCNTL2 & 0x7f TO SCNTL2
CLEAR ACK
WAIT DISCONNECT
INT status_complete
disc:
MOVE SCNTL2 & 0x7f to SCNTL2
CLEAR ACK
WAIT DISCONNECT
INT status_disconnect
test:
INT status_selftest