Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) ; Script for the NCR (or symbios) 53c700 and 53c700-66 chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) ; Copyright (C) 2001 James.Bottomley@HansenPartnership.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) ;;-----------------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) ;;  
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) ;;  This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) ;;  it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) ;;  the Free Software Foundation; either version 2 of the License, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) ;;  (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) ;;  This program is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) ;;  GNU General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) ;;  You should have received a copy of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) ;;  along with this program; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) ;;  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) ;;-----------------------------------------------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) ; This script is designed to be modified for the particular command in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) ; operation.  The particular variables pertaining to the commands are:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) ABSOLUTE	Device_ID = 0		; ID of target for command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) ABSOLUTE	MessageCount = 0	; Number of bytes in message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) ABSOLUTE	MessageLocation = 0	; Addr of message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) ABSOLUTE	CommandCount = 0	; Number of bytes in command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) ABSOLUTE	CommandAddress = 0	; Addr of Command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) ABSOLUTE	StatusAddress = 0	; Addr to receive status return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) ABSOLUTE	ReceiveMsgAddress = 0	; Addr to receive msg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) ; This is the magic component for handling scatter-gather.  Each of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) ; SG components is preceded by a script fragment which moves the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) ; necessary amount of data and jumps to the next SG segment.  The final
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) ; SG segment jumps back to .  However, this address is the first SG script
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) ; segment.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) ABSOLUTE	SGScriptStartAddress = 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) ; The following represent status interrupts we use 3 hex digits for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) ; this: 0xPRS where 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) ; P:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) ABSOLUTE	AFTER_SELECTION 	= 0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) ABSOLUTE	BEFORE_CMD 		= 0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) ABSOLUTE	AFTER_CMD 		= 0x300
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) ABSOLUTE	AFTER_STATUS 		= 0x400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) ABSOLUTE	AFTER_DATA_IN		= 0x500
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) ABSOLUTE	AFTER_DATA_OUT		= 0x600
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) ABSOLUTE	DURING_DATA_IN		= 0x700
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) ; R:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) ABSOLUTE	NOT_MSG_OUT 		= 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) ABSOLUTE	UNEXPECTED_PHASE 	= 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) ABSOLUTE	NOT_MSG_IN 		= 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) ABSOLUTE	UNEXPECTED_MSG		= 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) ABSOLUTE	MSG_IN			= 0x50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) ABSOLUTE	SDTR_MSG_R		= 0x60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) ABSOLUTE	REJECT_MSG_R		= 0x70
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) ABSOLUTE	DISCONNECT		= 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) ABSOLUTE	MSG_OUT			= 0x90
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) ABSOLUTE	WDTR_MSG_R		= 0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) ; S:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) ABSOLUTE	GOOD_STATUS 		= 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) ; Combinations, since the script assembler can't process |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) ABSOLUTE	NOT_MSG_OUT_AFTER_SELECTION = 0x110
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) ABSOLUTE	UNEXPECTED_PHASE_BEFORE_CMD = 0x220
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) ABSOLUTE	UNEXPECTED_PHASE_AFTER_CMD = 0x320
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) ABSOLUTE	NOT_MSG_IN_AFTER_STATUS = 0x430
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) ABSOLUTE	GOOD_STATUS_AFTER_STATUS = 0x401
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) ABSOLUTE	UNEXPECTED_PHASE_AFTER_DATA_IN = 0x520
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) ABSOLUTE	UNEXPECTED_PHASE_AFTER_DATA_OUT = 0x620
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) ABSOLUTE	UNEXPECTED_MSG_BEFORE_CMD = 0x240
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) ABSOLUTE	MSG_IN_BEFORE_CMD = 0x250
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) ABSOLUTE	MSG_IN_AFTER_CMD = 0x350
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) ABSOLUTE	SDTR_MSG_BEFORE_CMD = 0x260
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) ABSOLUTE	REJECT_MSG_BEFORE_CMD = 0x270
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) ABSOLUTE	DISCONNECT_AFTER_CMD = 0x380
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) ABSOLUTE	SDTR_MSG_AFTER_CMD = 0x360
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) ABSOLUTE	WDTR_MSG_AFTER_CMD = 0x3A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) ABSOLUTE	MSG_IN_AFTER_STATUS = 0x440
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) ABSOLUTE	DISCONNECT_AFTER_DATA = 0x580
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) ABSOLUTE	MSG_IN_AFTER_DATA_IN = 0x550
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) ABSOLUTE	MSG_IN_AFTER_DATA_OUT = 0x650
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) ABSOLUTE	MSG_OUT_AFTER_DATA_IN = 0x590
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) ABSOLUTE	DATA_IN_AFTER_DATA_IN = 0x5a0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) ABSOLUTE	MSG_IN_DURING_DATA_IN = 0x750
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) ABSOLUTE	DISCONNECT_DURING_DATA = 0x780
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) ; Other interrupt conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) ; 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) ABSOLUTE	RESELECTED_DURING_SELECTION = 0x1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) ABSOLUTE	COMPLETED_SELECTION_AS_TARGET = 0x1001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) ABSOLUTE	RESELECTION_IDENTIFIED = 0x1003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ; Fatal interrupt conditions.  If you add to this, also add to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) ; array of corresponding messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) ABSOLUTE	FATAL = 0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) ABSOLUTE	FATAL_UNEXPECTED_RESELECTION_MSG = 0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) ABSOLUTE	FATAL_SEND_MSG = 0x2001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) ABSOLUTE	FATAL_NOT_MSG_IN_AFTER_SELECTION = 0x2002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) ABSOLUTE	FATAL_ILLEGAL_MSG_LENGTH = 0x2003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) ABSOLUTE	DEBUG_INTERRUPT	= 0x3000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) ABSOLUTE	DEBUG_INTERRUPT1 = 0x3001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ABSOLUTE	DEBUG_INTERRUPT2 = 0x3002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) ABSOLUTE	DEBUG_INTERRUPT3 = 0x3003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) ABSOLUTE	DEBUG_INTERRUPT4 = 0x3004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) ABSOLUTE	DEBUG_INTERRUPT5 = 0x3005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) ABSOLUTE	DEBUG_INTERRUPT6 = 0x3006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) ; SCSI Messages we interpret in the script
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ABSOLUTE	COMMAND_COMPLETE_MSG	= 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) ABSOLUTE	EXTENDED_MSG		= 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) ABSOLUTE	SDTR_MSG		= 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) ABSOLUTE	SAVE_DATA_PTRS_MSG	= 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) ABSOLUTE	RESTORE_DATA_PTRS_MSG	= 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) ABSOLUTE	WDTR_MSG		= 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) ABSOLUTE	DISCONNECT_MSG		= 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) ABSOLUTE	REJECT_MSG		= 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) ABSOLUTE	PARITY_ERROR_MSG	= 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) ABSOLUTE	SIMPLE_TAG_MSG		= 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ABSOLUTE	IDENTIFY_MSG		= 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) ABSOLUTE	IDENTIFY_MSG_MASK	= 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) ABSOLUTE	TWO_BYTE_MSG		= 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) ABSOLUTE	TWO_BYTE_MSG_MASK	= 0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) ; This is where the script begins
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) ENTRY	StartUp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) StartUp:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	SELECT	ATN Device_ID, Reselect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	JUMP	SendIdentifyMsg, IF MSG_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	INT	NOT_MSG_OUT_AFTER_SELECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) Reselect:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	WAIT	RESELECT SelectedAsTarget
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	INT	RESELECTED_DURING_SELECTION, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	INT	FATAL_NOT_MSG_IN_AFTER_SELECTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	ENTRY	GetReselectionData
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) GetReselectionData:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	INT	RESELECTION_IDENTIFIED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	ENTRY	GetReselectionWithTag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) GetReselectionWithTag:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	MOVE	3, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	INT	RESELECTION_IDENTIFIED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	ENTRY	SelectedAsTarget
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) SelectedAsTarget:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) ; Basically tell the selecting device that there's nothing here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	SET	TARGET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	CLEAR	TARGET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	INT	COMPLETED_SELECTION_AS_TARGET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) ; These are the messaging entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) ; Send a message.  Message count should be correctly patched
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	ENTRY	SendMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) SendMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	MOVE	MessageCount, MessageLocation, WHEN MSG_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) ResumeSendMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	RETURN,	WHEN NOT MSG_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	INT	FATAL_SEND_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	ENTRY	SendMessagePhaseMismatch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) SendMessagePhaseMismatch:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	JUMP	ResumeSendMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ; Receive a message.  Need to identify the message to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ; receive it correctly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	ENTRY	ReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) ReceiveMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ; Use this entry if we've just tried to look at the first byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) ; of the message and want to process it further
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ProcessReceiveMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	JUMP	ReceiveExtendedMessage, IF EXTENDED_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	RETURN,	IF NOT TWO_BYTE_MSG, AND MASK TWO_BYTE_MSG_MASK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	MOVE	1, ReceiveMsgAddress + 1, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) ReceiveExtendedMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	MOVE	1, ReceiveMsgAddress + 1, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	JUMP	Receive1Byte, IF 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	JUMP	Receive2Byte, IF 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	JUMP	Receive3Byte, IF 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	JUMP	Receive4Byte, IF 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	JUMP	Receive5Byte, IF 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	INT	FATAL_ILLEGAL_MSG_LENGTH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) Receive1Byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	MOVE	1, ReceiveMsgAddress + 2, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) Receive2Byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	MOVE	2, ReceiveMsgAddress + 2, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) Receive3Byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	MOVE	3, ReceiveMsgAddress + 2, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) Receive4Byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	MOVE	4, ReceiveMsgAddress + 2, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) Receive5Byte:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	MOVE	5, ReceiveMsgAddress + 2, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) ; Come here from the message processor to ignore the message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	ENTRY	IgnoreMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) IgnoreMessage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	RETURN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) ; Come here to send a reply to a message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	ENTRY	SendMessageWithATN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) SendMessageWithATN:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	SET	ATN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	JUMP	SendMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) SendIdentifyMsg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	CALL	SendMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	CLEAR	ATN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) IgnoreMsgBeforeCommand:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	ENTRY	SendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) SendCommand:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	JUMP	MsgInBeforeCommand, IF MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	INT	UNEXPECTED_PHASE_BEFORE_CMD, IF NOT CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	MOVE	CommandCount, CommandAddress, WHEN CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) ResumeSendCommand:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	JUMP	MsgInAfterCmd, IF MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	JUMP	DataIn, IF DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	JUMP	DataOut, IF DATA_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	INT	UNEXPECTED_PHASE_AFTER_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) IgnoreMsgDuringData:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	; fall through to MsgInDuringData
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) Entry MsgInDuringData
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) MsgInDuringData:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) ; Could be we have nothing more to transfer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	JUMP	DisconnectDuringDataIn, IF DISCONNECT_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	JUMP	IgnoreMsgDuringData, IF SAVE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	JUMP	IgnoreMsgDuringData, IF RESTORE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	INT	MSG_IN_DURING_DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) MsgInAfterCmd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	JUMP	DisconnectAfterCmd, IF DISCONNECT_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	JUMP	IgnoreMsgInAfterCmd, IF SAVE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	JUMP	IgnoreMsgInAfterCmd, IF RESTORE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	CALL	ProcessReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	INT	MSG_IN_AFTER_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	JUMP	ResumeSendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) IgnoreMsgInAfterCmd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	JUMP	ResumeSendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) DisconnectAfterCmd:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	WAIT	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	ENTRY	Disconnect1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) Disconnect1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	INT	DISCONNECT_AFTER_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	ENTRY	Disconnect2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) Disconnect2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) ; We return here after a reselection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	JUMP	ResumeSendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) MsgInBeforeCommand:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	JUMP	IgnoreMsgBeforeCommand, IF SAVE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	JUMP	IgnoreMsgBeforeCommand, IF RESTORE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	CALL	ProcessReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	INT	MSG_IN_BEFORE_CMD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	JUMP	SendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) DataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	CALL	SGScriptStartAddress
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) ResumeDataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	JUMP	MsgInAfterDataIn, IF MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	JUMP	DataInAfterDataIn, if DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	INT	MSG_OUT_AFTER_DATA_IN, if MSG_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	INT	UNEXPECTED_PHASE_AFTER_DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) DataInAfterDataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	INT	DATA_IN_AFTER_DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	JUMP	ResumeDataIn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) DataOut:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	CALL	SGScriptStartAddress
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) ResumeDataOut:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	JUMP	Finish, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	JUMP	MsgInAfterDataOut, IF MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	INT	UNEXPECTED_PHASE_AFTER_DATA_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) MsgInAfterDataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	JUMP	DisconnectAfterDataIn, IF DISCONNECT_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	JUMP	IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	JUMP	IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	CALL	ProcessReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	INT	MSG_IN_AFTER_DATA_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	JUMP	ResumeDataIn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) DisconnectDuringDataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	WAIT	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	ENTRY	Disconnect3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) Disconnect3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	INT	DISCONNECT_DURING_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	ENTRY	Disconnect4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) Disconnect4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) ; we return here after a reselection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	JUMP	ResumeSendCommand
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) DisconnectAfterDataIn:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	WAIT	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	ENTRY	Disconnect5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) Disconnect5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	INT	DISCONNECT_AFTER_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	ENTRY	Disconnect6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) Disconnect6:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) ; we return here after a reselection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	JUMP	ResumeDataIn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) MsgInAfterDataOut:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	JUMP	DisconnectAfterDataOut, if DISCONNECT_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	JUMP	IgnoreMsgAfterData, IF SAVE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	JUMP	IgnoreMsgAfterData, IF RESTORE_DATA_PTRS_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	CALL	ProcessReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	INT	MSG_IN_AFTER_DATA_OUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	JUMP	ResumeDataOut
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) IgnoreMsgAfterData:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) ; Data in and out do the same thing on resume, so pick one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	JUMP	ResumeDataIn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) DisconnectAfterDataOut:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	WAIT	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	ENTRY	Disconnect7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) Disconnect7:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	INT	DISCONNECT_AFTER_DATA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	ENTRY	Disconnect8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) Disconnect8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) ; we return here after a reselection
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	JUMP	ResumeDataOut
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) Finish:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	MOVE	1, StatusAddress, WHEN STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	INT	NOT_MSG_IN_AFTER_STATUS, WHEN NOT MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	MOVE	1, ReceiveMsgAddress, WHEN MSG_IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	JUMP	FinishCommandComplete, IF COMMAND_COMPLETE_MSG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	CALL	ProcessReceiveMessage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	INT	MSG_IN_AFTER_STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	ENTRY	FinishCommandComplete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) FinishCommandComplete:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	CLEAR	ACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	WAIT	DISCONNECT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	ENTRY	Finish1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) Finish1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	INT	GOOD_STATUS_AFTER_STATUS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	ENTRY	Finish2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) Finish2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)