|
|
DataMuseum.dkPresents historical artifacts from the history of: RegneCentralen RC3600/RC7000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RegneCentralen RC3600/RC7000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 70144 (0x11200)
Types: TextFile
Notes: RCSL-43-GL-10024, RCSL-43-GL-11023, RCSL-43-GL-11025
Names: »SXCOM«
└─⟦a59f0a452⟧ Bits:30000472 DOMUS disk image
└─⟦this⟧ »/SXCOM«
; RCSL: 43-GL10024
; AUTHOR: LL/MLM/JHA/KDH
; DATE: 81.01.14
; XMC23
;KEYWORDS: RC3600, DOMUS, PROCESSOR EXPANSION
;ABSTRACT: THIS PROGRAM MAKES IT POSSIBLE TO COMMUNICATE
; BETWEEN PROCESSES PLACED IN TWO DIFFERENT
; RC3600 PROCESSORS.
;ASCII SOURCE: RCSL: 43-GL11023
;PARAMETER SOURCE: RCSL: 43-GL11025
«ff»
; RC3600 PROCESSOR EXPANSION PAGE ..C1..
; CENTRAL ADMINISTRATION
; THIS PROGRAM SHOULD BE ASSEMBLED TOGETHER WITH A
; PARAMETER MODULE (RCSL: 43-GL11025) SPECIFYING THE
; PARAMETERS FOR THE ACTUAL CONFIGURATION.
.TITLE XCM23
.NREL
.TXTM 1
.RDX 10
XCX0: 1B0+1
XCX1
0
XCX10-XCX0
.TXT .XCOMX.
.NOMAC 1
.MACRO TESTP
.IFN TEST
JSR @.+1
XTEST
.ENDC
%
«ff»
; RC3600 PROCESSOR EXPANSION PAGE ..C1A..
; CENTRAL ADMINISTRATION
; DEFINITIONS
; EXTENSION TO MESSAGEBUFFER
BACT = -2 ; ACTIVATION ADDDRESS
BCHAIN= -1 ; CHAIN TO TRANSM QUEUE
BBUF = -3 ; SAVED MESSBUF ADR FROM HEADER
BSEND = -4 ; SAVED SENDER FROM HEADER
BSPEC = -5 ; SPECIAL, 0 NO SPECIAL
; 1B0 DATABUFFER IS USED
; 1B1 ANSWER INPUT
; 1B2 ANSWER LOOKUP ENTRY
; 1B3 ANSWER SET RESERVATION
; 1B4 ANSWER TTY
; 1B5 ANSWER CAT CONTROL
; 1B6 ANSWER CONVERSION
BDATA = -6 ; SAVED DATABUFFER ADDRESS
B1DATA= -7 ; - -, CAT NAME OR TTY PROC
; OPERATION BUFFER FOR DESCRIBING RECEIVED MESSAGE BUFFER
MOP = 1
MNAME = 2
MBUF = 0 ; ADDRESS OF RECIEVED MESSAGE BUFFER
; CONVERSION BUFFER DESCRIPTION
CCHAIN= -2
CXSEND= -3
CREC = -4
; HEADER FORMAT
HSTART= -1 ; START CHARACTER
HDATA = 0 ; NO OF BYTES IN DATA BLOCK
HBUF = 1 ; MESSAGE BUFFER ADDRESS
HMES0 = 2 ; MESS0
HMES1 = 3 ; MESS1
HMES2 = 4 ; MESS2
HMES3 = 5 ; MESS3
HSEND = 6 ; ADDRESS OF SENDER PROCESS DESCRIPTION
HNAME = 7 ; NAME OF RECEIVING PROCESS
HCATE = 10 ; NAME OF ENTRY IF CAT OR SUBCAT PROCESS
MAXER = 50 ; MAX NO OF PERMITTED ERRORS
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..C1B..
; CENTRAL ADMINISTRATION
B0 = BCATNAME ; NO OF BUFFERS FOR CAT NAMES
BL0 = 3
B1 = XCENT+2 ; NO OF OPERATION BUFFERS
BL1 = 5
B3 = B0 ; NO OF CAT ENTRIES BUFFERS
BL3 = 18
B4 = BTTYPROC ; NO OF TTY PROCESS DESCRIPTIONS
B40 = BTTYMES
BL4 = B40*11+23
.MESB = MESBS+2
.RESN = RESNO+1
.IFE .PASS
.IFN TEST
.MSG VERSION WITH TESTOUTPUT
.ENDC
.IFE TEST
.MSG VERSION WITHOUT TESTOUTPUT
.ENDC
.ENDC
.RDX 10
.XREL ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..C2..
; CENTRAL ADMINISTRATION LL 15.2.76
; CENTRAL WAIT. WAIT HERE FOR AN EVENT: MESSAGE FROM A SENDER
; PROCESS, ANSWER FROM A RECEIVER PROCESS, ANSWER FROM FPA-
; DRIVER OR TIMER.
XCX1:
CWAIT:
LDA 0 XDELAY ;
LDA 1 .0 ;
LDA 2 XLASTEV ;
TESTP ; *** TESTPOINT ***
WAIT ; WAIT(DELAY,LASTEV,BUF)
JMP CTIMER ; TIMEOUT
JMP CWAIT ; INTERRUPT
JMP @BACT,2 ; ANSWER: GOTO ACTIVATION ADDRESS
; MESSAGE FROM A SENDER PROCESS ARRIVED.
JSR @ CW107 ; TEST SPECIAL MESSAGE
TESTP ; *** TESTPOINT ***
LDA 3 CUR ; GET CORRESPONDING ENTRY IN COMLIST
LDA 0 -1,3 ;
STA 0 XCOMCNT ;
LDA 3 -2,3 ; FOR I:=1 STEP 1 UNTIL COMNO DO
CW1: ; BEGIN
LDA 0 +0,3 ; IF ENTRY IS OCCUPIED
MOV# 0,0 SNR ; AND
JMP CW01 ;
LDA 0 +3,3 ;
SUB# 2,0 SNR ; IF BUF = COMLIST(COMNO) THEN
JMP CW2 ; GOTO FOUND
CW01: ;
LDA 0 .4 ;
ADD 0,3 ;
DSZ XCOMCNT ;
JMP CW1 ; END
; NOT FOUND:
LDA 0 .1B6 ;
CW3: ;
LDA 1 .0 ; SENDANSWER ( STATUS,0)
SENDANSWER ;
JMP CWAIT ; GOTO CWAIT
CW2: ; FOUND:
LDA 0 XCSTATE ; IF STATE <> RUNNING THEN
MOV# 0,0 SZR ;
JMP CW4 ; BEGIN
STA 0 +0,3 ; CLEAR COMLIST
LDA 0 .1B15 ; STATUS:=NOT PROCESSED
JMP CW3 ; GOTO RETURN ANSWER
CW4: ; END
STA 3 CW100 ; SAVE ENTRY IN CONMLIST
STA 2 XLASTEV ; SAVE LAST EVENT
LDA 0 CW101 ;
JSR @ CW106 ; CHAIN OPERATION TO TRANSMITTER
LDA 0 CW100 ; OPERATION(2):=ADDR OF ENTRY IN COMLIST
STA 0 MNAME,2 ;
JMP CW0 ; GOTO TEST
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..C3..
; CENTRAL ADMINISTRATION LL 15.2.76
; ANSWER FROM A RECEIVER PROCESS ARRIVED.
ANS0: ; ACTIVATION ADDRESS:
STA 2 XLASTEV ; SAVE LAST EVENT
LDA 0 CW102 ; ACT. ADR:=ANSWER
JSR @ CW105 ; CHAIN OPERATION TO TRANSM.
CW0: ; TEST:
LDA 0 XTSTATE ;
MOVZR# 0,0 SNC ; IF STATE.TRANSM=WAIT FOR FPA
JMP CWAIT ; THEN GOTO WAIT
CEXAMINE: ; EXAMINE TRANSM QUEUE
LDA 2 XTRCHAIN ; IF TRANSM. CHAIN <> EMPTY THEN
TESTP ; *** TESTPOINT ***
MOV# 2,2 SZR ;
JMP @ BACT,2 ; GOTO ACTIVAT FIRST OPERATION
JMP CWAIT ; ELSE GOTO WAIT
; TIMER INTERRUPT
CTIMER: ;
LDA 0 XTSTATE ;
TESTP ; *** TESTPOINT ***
MOV# 0,0 SNR ; IF STATE=WAIT FOR FPA
JMP CWAIT ; THEN GOTO WAIT
MOVZL# 0,0 SNC ; IF STATE = WAIT FOR QUEUE
JMP CEXAMINE ; THEN GOTO EXAMINE
JMP @ .+1 ; TIMER ACTIVATION
CBREAK ; (BREAKPROCESS)
XDELAY: 50
;XDELAY: 5 ; DELAY PERIOD IS 100 MS
XLASTEV: 0 ; LAST RECEIVED AND QUEUED EVENT
XCOMCNT: 0
X1GETBUF: GETBUF
XTRSEM: .+1-BCHAIN ; TRANSMITTER CHAIN
XTRCHAIN: 0 ;
XTSTATE: 1 ; STATE OF TRANSMITTER COROUTINE
; 0 WAIT FOR FPA
; 1 WAIT FOR OPERATION
; 1B0 WAIT FOR TIMER
XCSTATE: 0 ; STATE XCOMX
; 0 INIT
; 1B0: BREAKED
; 1 RUNNING
MESNO: .MESB-1 ; NO OF MES BUFS FOR USER MESSAGES
CW100: 0
CW101: RECMES
CW102: RECANS
CW105: TCHAIN
CW106: GECHAIN
CW107: XSPTEST
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T1..
; TRANSMITTER COROUTINE LL 15.2.76
; ANSWER FROM A RECEIVER PROCESS, AC2=ADDRESS OF MESSAGE-
; BUFFER.
RECANS: ;
TESTP ; *** TESTPOINT ***
LDA 3 TX10 ;
STA 2 TBUF ; SAVE MESSAGE BUFFER ADDRESS
LDA 0 .0 ; ANSWER:=TRUE
STA 0 TXFUNC ;
STA 0 TXSPEC ; SPECIAL:=TDBYTES:=0
STA 0 TDBYTES ;
JSR @ TX22 ; MOVE MESSAGE TO HEADER
LDA 0 BDATA,2 ; TADR:=MESS2.BUF
STA 0 TDADR ;
LDA 0 BBUF,2 ; HBUF.THEAD:=BBUF.BUF
STA 0 HBUF,3 ;
LDA 0 BSEND,2 ; HSEND.THEAD:= BSEND.BUF
STA 0 HSEND,3 ;
LDA 0 BSPEC,2 ; IF SPECIAL=0
MOVZL 0,0 ;
LDA 1 MESS1,2 ; IF ANSWER INPUT
MOVZL 0,0 SZC ;
STA 1 TDBYTES ; THEN TDBYTES:=MESS1.BUF
MOVZL 0,0 SNC ;; IF ANSWER LOOKUP ENTRY THEN
JMP TRAN2 ;; BEGIN
LDA 1 TX11 ;; TDBYTES:=2*16
STA 1 TDBYTES ;;
LDA 1 .3 ;; SPECIAL:=ANSWER LOOKUP
STA 1 TXSPEC ;;
LDA 1 TDADR ;; TDADR:=TDADR<2
MOVZL 1,1 ;;
STA 1 TDADR ;;
TRAN2: ;; END
MOVZL 0,0 SNC ; IF ANSWER SET RESERVATION
JMP TRAN3 ;
LDA 0 .1B6 ; AND MESS0.BUF=ILLEGAL THEN
LDA 1 MESS0,2 ;
AND 0,1 SNR ;
JMP TRHEAD ; BEGIN
LDA 0 BSEND,2 ; CLEAR RESERVATION IN RESLIST
LDA 2 RECEI,2 ;
NEG 2,2 ;
JSR @ TX12 ; CHECK RES(SENDER,RECEIVER)
LDA 0 .0 ; CLEAR ENTRY
STA 0 +0,3 ;
JMP TRHEAD ; GOTO TRANSMIT HEADER
; END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T1A..
; TRANSMITTER COROUTINE LL 15.2.76
; SPECIAL TTY TREATMENT
TRAN3:
LDA 2 TBUF ;; IF ANSWER TTY THEN
LDA 2 B1DATA,2 ;;
MOVZL 0,0 SNC ;;
JMP TRAN4 ;; BEGIN
ISZ TTCOUNT,2 ;; TTCOUNT:=TTCOUNT+1
LDA 0 TTCOUNT,2 ;; IF TTCOUNT < MAX COUNT
LDA 1 TX290 ;;
SUB# 0,1 SZR ;;
JMP TRHEAD ;; THEN GOTO TRANSMIT HEADER
STOPPROCESS ;; STOPPROCESS(AUX TTY PROCESS)
LDA 0 .0 ;;
STA 0 TX24+1 ;;
LDA 0 PROCE ;;
LDA 1 TX24 ;; REMOVE FROM PROCESS CHAIN
RECHAIN ;;
JSR @ TX20 ;; FREE BUFFER(PROCESS DESCRIPTION)
JMP TRHEAD ;; GOTO TRANSMIT HEADER
;; END
; SPECIAL CAT TREATMENT
TRAN4: ;;
MOVZL 0,0 SZC ; IF ANSWER CAT CONTROL
JSR @ TX20 ;; THEN FREE BUF(NAME BUFFER)
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T2..
; TRANSMITTER COROUTINE LL 15.2.76
TRHEAD: ; TRANSMIT HEADER:
LDA 0 TDBYTES ; HDATA.THEAD:=TDBYTES
LDA 3 TX10 ;
STA 0 HDATA,3 ;
LDA 0 .0 ; SET STARTCHAR(HEADER,HMES)
LDA 2 THMES ;
JSR @ TX9 ;
LDA 0 @ TX25 ; IF STATE = INIT
LDA 1 TXFUNC ; AND FUNCTION = ANSWER
ADD# 0,1 SNR ; THEN GOTO PASS HEADER
JMP TRAN5 ;
TRHREP: ; REPEAT HEADER:
LDA 1 THMES ;
LDA 2 TNAME ;
SENDMESSAGE ; SEND MESSAGE(TRANSM HEADER, RECEIVE ST)
LDA 0 TX13 ; SET ACTIVATION ADDRESS
STA 0 BACT,2 ;
LDA 0 .0 ; STATE:=WAIT FOR FPA
STA 0 @ TX23 ;
JMP @ TX14 ; GOTO WAIT
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T2A..
; TRANSMITTER COROUTINE LL 15.2.76
TBUF: 0 ; SAVED MESSAGE BUFFER ADDRESS
TXFUNC: 0
TXSPEC: 0
TX9: STCHAR
TX10: THEAD
TX11: 32
TX12: CHRES
TX13: TRANHEAD
TX14: CWAIT
TX15: TRCHECK
TX16: CEVLAST
TX17: CEXAMINE
TX18: TRANDATA
TX19: MESNO
TX20: FREBUF
TX21: XTRCHAIN
TX22: MOVMES
TX23: XTSTATE
TX24: .+1-CHAIN
0
TX25: XCSTATE
TX27: CRELEAS
TX290: BTTYMES+1
THMES: .+1
3
26
THEAD*2
0
TDMES: .+1
3
TDBYTES: 0
TDADR: 0
0
TNAME: .TNAM
.NREL
.TNAM:
.TXT .FPAX<0>.
.XREL
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T3..
; TRANSMITTER COROUTINE LL 15.2.76
TRANHEAD: ; ANSWER HEADER SENDING:
WAITANSWER ; FREE MESSAGE BUFFER
JSR @ TX15 ;
TESTP ; *** TESTPOINT ***
MOVZL 0,0 SZC ; IF STATUS = 1B0
JMP TRHREP ; THEN GOTO RETRANSMIT
MOVZL# 0,0 SZC ; IF STATUS = 1B1(REJECT)
JMP TRCLEAR ; THEN GOTO CLEAR
MOVZR 0,0 SNR ; IF STATUS > 0
JMP TRAN5 ; BEGIN
TRAN6: ; RETURN TO USER:
LDA 3 TX10 ;
LDA 2 HBUF,3 ;
JSR @ TX16 ; ADJUST LASTEV
LDA 1 .0 ; NO OF BYTES:=0
SENDANSWER ; SEND ANSWER(SENDER,STATUS,0)
JMP TRA10 ; GOTO CLEAR MESSAGE
TRAN5: ; END
LDA 0 TDBYTES ; IF DBYTES = 0
MOV# 0,0 SNR ;
JMP TRCLEAR ; THEN GOTO CLEAR
; TRANSMIT CORRESPONDING DATA BLOK
LDA 0 .1B9 ; SET STARTCHAR(DATA,DMES)
LDA 2 TDMES ;
JSR @ TX9 ;
LDA 0 @TX25 ; IF STATE = INIT
LDA 1 TXFUNC ; AND FUNCTION = ANSWER
ADD# 0,1 SNR ; THEN GOTO CLEAR
JMP TRCLEAR
TDREP: ; REPEAT DATA:
LDA 1 TDMES ;
LDA 2 TNAME ;
SENDMESSAGE ;
LDA 0 TX18 ; SET ACTIVATION ADDRESS
STA 0 BACT,2 ;
JMP @ TX14 ; GOTO WAIT FOR FPA
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T4..
; TRANSMITTER COROUTINE
TRANDATA:
WAITANSWER ; FREE MESSAGE BUFFER
JSR @ TX15 ; CHECK TRANSPORT
TESTP ; *** TESTPOINT ***
MOVZL 0,0 SZC ; IF STATUS = 1B0
JMP TDREP ; THEN GOTO RETRANSMIT
MOVZL# 0,0 SZC ; IF STATUS = 1B1(REJECT)
JMP TRCLEAR ; THEN GOTO CLEAR
MOVZR 0,0 SZR ; IF STATUS > 0
JMP TRAN6 ; THEN GOTO RETURN TO USER
TRCLEAR: ; CLEAR:
LDA 0 TXFUNC ; IF FUNCTION = ANSWER THWN
MOV# 0,0 SZR ;
JMP TRA10 ; BEGIN
ISZ @ TX19 ; NO OF MESSBUFFERS:=NO OF BUFS+1
LDA 2 TBUF ; ADJUST LASTEV
JSR @ TX16 ;
LDA 0 BSPEC,2 ;
LDA 3 .1B6 ;
AND# 3,0 SNR ; IF ANSWER CONVERSION THEN
JMP TRA13 ; BEGIN
LDA 0 MESS0,2 ; IF STATUS = 0
MOV# 0,0 SNR ; THEN GOTO FREE MESBS
JMP TRA12 ;
LDA 0 BSEND,2 ;
LDA 1 RECEI,2 ; RELEASE CONVBUF
NEG 1,1 ;
JSR @ TX27 ;
JMP TRA12 ; GOTO FREE MESBS
TRA13: ; END
LDA 0 BSPEC,2 ;
LDA 2 BDATA,2 ;
LDA 1 .1B5 ;; IF NOT ANSWER CAT THEN
AND# 0,1 SNR ;;
MOVZR 2,2 ;; BUFADR:=BUFADR>1
MOVZL# 0,0 SZC ; IF BUFFER RESERVED
JSR @ TX20 ; THEN FREEBUFFER
TRA12: ; FREE MESBS:
LDA 2 TBUF ;
WAITANSWER ; FREE MESSAGE BUFFER
JMP TRA11 ;
TRA10: ; END
LDA 2 TX30 ; MESSAGE:
LDA 0 .0 ; IF ENTRY EXIST THEN
LDA 1 MNAME,2 ;
MOV# 1,1 SZR ;
STA 0 @ MNAME,2 ; CLEAR ENTRY IN COMLIST
LDA 0 .2 ;
SUB 0,2 ; FREE OPERATION BUFFER
JSR @ TX38 ;
«ff»
;RC3600 PROCESSOR EXPANSION PAGE..T4A..
; TRANSMITTER COROUTINE
TRA11: ; END
LDA 3 @ TX21 ; RELEASE OPERATION FROM QUEUE
LDA 0 BCHAIN,3 ;
STA 0 @ TX21 ;
LDA 0 .1 ;
STA 0 @ TX23 ; STATE:= WAIT OPERATION
LDA 0 @ TX25 ; IF CSTATE = BREAKED
MOVZL# 0,0 SZC ;
JSR @ TX52 ;
JMP @ TX17 ; GOTO EXAMINE QUEUE
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T5..
; TRANSMITTER COROUTINE LL 15.2.76
; MESSAGE RECEIVED FROM SENDER PROCESS.
RECMES:
TESTP ; *** TESTPOINT ***
STA 2 TX30 ; SAVE ADDRESS OP OPERATION BUFFER
LDA 2 0,2 ; BUF:=MESSAGE BUFFER
LDA 0 .1B11 ; FUNCTION:=MESSAGE
STA 0 @ TX31 ;
LDA 1 @ TX25 ; IF STATE = INIT
MOV# 1,1 SZR ; THEN
JMP TRM4 ; BEGIN
LDA 0 .1B15 ; SENDANSWER(1B15,0)
JSR @ TX16 ; ADJUST LASTEV
JMP TRCLEAR ; GOTO CLEAR
TRM4: ; END
; COMPUTE NO OF BYTES IN DATABLOCK
LDA 1 .0 ; NO OF BYTES:=0
LDA 0 MESS0,2 ;
MOVZR 0,0 SNC ; IF TRANSPUT THEN
JMP TRM0 ; BEGIN
MOVZR 0,0 SZC ; IF OUTPUT THEN
LDA 1 MESS1,2 ; NO OF BYTES:=MESS1.BUF
JMP TRM1 ; END ELSE
TRM0: ; BEGIN
MOVZR 0,0 ;
MOVZR 0,0 ;
LDA 3 MESS2,2 ; IF CONVERSION BIT
MOVZR 0,0 SZC ;
MOV# 3,3 SNR ; AND CONVERSION <> 0
JMP TRM1 ; THEN
LDA 1 TX51 ; NO OF BYTES:=512
TRM1: ; END
STA 1 @ TX32 ; DBYTES:=NO OF BYTES
LDA 3 MESS2,2 ; DADR:=MESS2.BUF
STA 3 @ TX33 ;
; BUILD HEADER
LDA 3 TX34 ;
STA 2 HBUF,3 ; HBUF.THEAD:=BUF
LDA 0 SENDER,2 ;
STA 0 HSEND,3 ; HSEND.THEAD:=SENDER.BUF
JSR @ TX35 ; MOVE MESSAGE TO HEADER
LDA 2 TX30 ; MOVE NAME TO HEADER
LDA 2 MNAME,2 ;
JSR @ TX36 ;
LDA 0 .0 ; SPECIAL:=0
STA 0 @ TX37 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T6..
; TRANSMITTER COROUTINE
; SPECIAL TREATMENT OF MESSAGES TO TTY , CAT AND SUBCAT PROCESSES
LDA 0 HNAME+2,3 ;;
LDA 2 .255 ;;
AND 2,0 ;; BYTE:=HNAME(6).THEAD;
LDA 2 .16 ;;
ADCZ# 0,2 SNC ;; IF BYTE >= 16 THEN !SUBCAT PROCESS!
JMP SPCAT ;; GOTO CAT-SPECIAL
LDA 0 TXSPNO ;; FOR I:=1 STEP 1 UNTIL TXSPNO DO
STA 0 TXSPCNT ;;
LDA 2 TXSPD ;;
TRM2: ;; BEGIN
LDA 0 HNAME,3 ;;
LDA 1 +0,2 ;; IF NAME.THEAD
SUB# 0,1 SZR ;; = NAME.SPECIALLIST
JMP TRM3 ;;
LDA 0 HNAME+1,3 ;;
LDA 1 +1,2 ;;
SUB# 0,1 SZR ;;
JMP TRM3 ;;
LDA 0 HNAME+2,3 ;;
LDA 1 +2,2 ;;
SUB# 0,1 SNR ;;
JMP @ +3,2 ;; THEN GOTO ACTIVATION ADDRESS
TRM3: ;; END
LDA 0 .4 ;;
ADD 0,2 ;;
DSZ TXSPCNT ;;
JMP TRM2 ;; END
;; NOT FOUND:
JMP @ TX39 ; GOTO TRANSMIT HEADER
; TRANSMIT MASTER CLEAR
TMCL: ;
STA 2 TX30 ; SAVE BUF ADDR
JSR @ TX49 ; SEND RESET MESSAGE
LDA 0 TX43 ; STARTCHAR:=MASTER CLEAR
JMP TA0 ;
; TRANSMIT ANSWER MASTER CLEAR
TAMCL: ;
STA 2 TX30 ; SAVE BUF ADDR
LDA 0 .0 ; BLOCKNO:=0
STA 0 @ TX48 ;
LDA 0 .1 ; STATE := RUNNING
STA 0 @ TX47 ;
LDA 0 .15 ; STARTCHAR:=ANSWER MASTER CLEAR
TA0: ;
STA 0 @ TX46 ; SET START CHARACTER
LDA 0 .0 ; TDBYTES:=0
STA 0 @ TX32 ;
LDA 0 .1B11 ; FUNCTION:=MESSAGE
STA 0 @ TX31 ;
JMP @ TX45 ; GOTO TRHREP
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T6A..
; TRANSMITTER COROUTINE LL 15.2.76
TX30: 0 ; SAVED ADDR OF OPERATION BUFFER
TX31: TXFUNC
TX32: TDBYTES
TX33: TDADR
TX34: THEAD
TX35: MOVMES
TX36: MOVNAME
TX36A: MOVENTRY
TX37: TXSPECIAL
TX38: FREBUF
TX39: TRHEAD
TX40: 1B7 ; INITCAT
TX41: 32
TX43: 1B11+15
TX45: TRHRET
TX46: THMES+4
TX47: XCSTATE
TX48: SBLNO
TX49: TRESET
TX50: NAME
TX51: 512
TX52: XSTOP
TX53: -13
; LIST OF SPECIAL DEVICES
TXSPCNT: 0
TXSPNO: 2
TXSPD: .+1
.TXT .TTY<0><0>.
SPTTY
TXR:
.TXT .CAT<0><0>.
SPCAT
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..T7..
; TRANSMITTER COROUTINE LL 15.2.76
; SPECIAL TTY TREATMENT
SPTTY: ;
LDA 0 .1 ;; SPECIAL:=1
STA 0 @ TX37 ;;
LDA 1 TX53 ;; IF CONTROLE MESSAGE THEN
LDA 0 HMES0,3 ;; BEGIN
MOVZR# 0,0 SZC ;;
JMP SPTT1 ;;
AND 1,0 ;; CLEAR RESERVATION
STA 0 HMES0,3 ;; AND CONVERSION;
SUB 0,0 ;; DBYTES:=0;
STA 0 @ TX32 ;; END;
SPTT1:LDA 2 @ TX30 ;;
LDA 2 SENDER,2 ;; GET NAME OF SENDER PROCESS
LDA 0 TX50 ;;
ADD 0,2 ;;
JSR @ TX36 ;; MOVE NAME TO HNAME.THEAD
JMP @ TX39 ;; GOTO TRANSMIT HEADER
;; SPECEAL CAT AND SUBCAT TREATMENT
SPCAT: ;;
LDA 0 HMES0,3 ;; IF MESS0 = 0
MOV 0,0 SZR
MOVZR# 0,0 SZC ;; OR TRANSPUT MESSAGE
JMP @ TX39 ;; THEN GOTO TRANSMIT HEADER
LDA 1 .255 ;;
AND 0,1 SZR ;; IF MESS0(8:15) <> 0 THEN
JMP@ TX39 ;; GOTO TRANSMIT HEADER;
LDA 1 .0 ;; NO OF BYTES:=0
STA 1 HDATA,3 ;;
STA 1 @ TX32 ;;
LDA 1 TX40 ;; IF INIT CAT
SUB# 0,1 SNR ;;
JMP @ TX39 ;; THEN GOTO TRANSMIT HEADER
LDA 0 .2 ;; SPECIAL:=2
STA 0 @ TX37 ;;
LDA 2 HMES1,3 ;; MOVE ENTRY TO HCATE.THEAD
JSR @ TX36A ;;
LDA 3 TX34 ;;
LDA 0 HMES0,3 ;; IF NOT CHANGE ENTRY OR SET ENTRY
LDA 1 SP0 ;;
AND# 0,1 SNR ;;
JMP @ TX39 ;; THEN GOTO TRANSMIT HEADER
LDA 1 TX41 ;; NO OF BYTES:=32
STA 1 HDATA,3 ;;
STA 1 @ TX32 ;; DBYTES:=32
LDA 1 HMES2,3 ;;
MOVZL 1,1 ;; DADR:=MESS2.BUF SHIFT 1 (BYTE ADDR)
STA 1 @ TX33 ;;
JMP @ TX39 ;; GOTO TRANSMIT HEADER
SP0: 1B0+1B3 ;; SET ENTRY+CHANGE ENTRY
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R1..
; RECEIVER COROUTINE LL 15.2.76
; ENTRY FROM INITIALIZE
RINIT:
LDA 0 .9 ; OPERATION:=RECEIVE ONLY
LDA 1 .0 ; STATUS:=0
STA 1 @ RX00 ;
; RECEIVE HEADER. AC0= OPERATION
RHRECEIVE: ;
LDA 2 RX01 ;
STA 0 0,2 ; RMES0:=OPERATION
LDA 0 @ RX00 ; RMES3:=STATUS
STA 0 3,2 ;
TESTP ; *** TESTPOINT ***
LDA 1 RX01 ; SENDMESSAGE(RECEIVER,OPERATION
LDA 2 RX02 ; SEND STATUS, READ HEADER)
SENDMESSAGE ;
LDA 0 RX08 ; SET ACTIVATION ADDRESS
STA 0 BACT,2 ;
JMP @ RX09 ; GOTO CENTRAL WAIT
RX00: RSTATUS
RX01: RHMES+1
RX02: .RNAM
RX04: RDADR
RX05: RDBYTES
RX06: XCSTATE
RX07: XSTOP
RX08: RANSHEAD
RX09: CW0
RX010: RBSPEC
RX011: RBLCONT
RX012: RHEAD
RANSHEAD: ; HEADER RECEIVED:
LDA 3 RX012 ; HSTART.RHEAD:=MESS3.BUF
LDA 1 MESS3,2 ;
STA 1 HSTART,3 ;
WAITANSWER ; FREE MESSAGE BUFFER
LDA 1 @ RX06 ;
MOVZL# 1,1 SZC ; IF CSTATE = BREAKED
JSR @ RX07 ; THEN STOP
JSR @ RX2 ; CHECK TRANSPORT
LDA 2 RX8 ; ***
TESTP ; *** TESTPOINT ***
MOV# 0,0 SZR ; IF STATUS <> 0
JMP RHRECEIVE ; THEN GOTO RECEIVE(OPERATION)
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R1A..
; RECEIVER COROUTINE LL 15.2.76
; GET CORRESPONDING DATABLOCK
LDA 0 .0 ;
STA 0 @ RX010 ; RBSPEC:=0
STA 0 @ RX011 ; BLCONTR:=0
LDA 3 RX8 ; SAVE MESS2.RHEAD
LDA 0 HMES2,3 ;
STA 0 @ RX04 ; DADR:=HMES2.RGEAD
LDA 0 HDATA,3 ; IF NO OF DATABYTES <> 0 THEN
STA 0 @ RX05 ; DBYTES:=HDATA.RHEAD
LDA 1 HSTART,3 ; IF MESSAGE THEN
LDA 2 .1B11 ;
AND# 1,2 SNR ;
JMP RAN0 ; BEGIN
DSZ @ RX18 ; DECREASE NO F MESBUFS
JMP .+2 ; IF NO OF MESBUFS =0
JMP ERR2 ; THEN GOTO ERROR 2
LDA 0 HSTART,3 ;
LDA 1 .13 ; IF SPECIAL = 0 OR SPECIAL=2 !CAT! THEN
AND# 0,1 SZR ;
JMP RAN3 ; BEGIN
LDA 1 PROCESS ; SEARCHITEM(PROCESS,
LDA 2 RX9 ; RECEIVER NAME)
ADD 3,2 ;
SEARCHITEM ;
MOV# 2,2 SNR ; IF PROCESS NOT EXIST
JMP ERR3 ; THEN GOTO ERROR 3
STA 2 RX25 ;
RAN3: ; END
LDA 3 RX8 ;
LDA 0 HMES0,3 ; IF CONTROL, CONVERSION
LDA 1 .1B12 ;
AND# 0,1 SZR ;
MOVZR# 0,0 SZC ;
JMP RAN4 ;
LDA 0 HSEND,3 ;
LDA 1 RX25 ; RELEASE CONVERSION(SENDER,RECEIVER)
JSR @ RX26 ;
RAN4: ;
LDA 0 RDBYTES ;
MOV# 0,0 SNR ; IF NO OF BYTES = 0
JMP RAN20 ; THEN GOTO AFTER DATA
LDA 3 RX8 ;
LDA 1 HSTART,3 ; IF SPECIAL = CAT SPECIAL
LDA 2 .1B14 ;
AND# 1,2 SZR ;
LDA 0 RX27 ; THEN BUF:=CAT ENTRY BUF
JSR @ RX5 ;
MOV# 3,3 SNR ; IF NO BUFFER
JMP ERR2 ; THEN GOTO ERROR BLOCKCONTROL2
STA 3 RDADR ; RDADR:=GETBUF(RDBYTES)
LDA 0 .1B0 ; RBSPEC:=DATA RESERVED
STA 0 RBSPEC ;
JMP RAN1 ; GOTO GET DATA
RAN0: ; END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R2..
; RECEIVER COROUTINE LL 15.2.76
; ANSWER:
LDA 2 HBUF,3 ; CHECK IF MESSAGE BUFFER IS
LDA 0 HSEND,3 ; DESTROYED:
LDA 1 SENDER,2 ; IF HSEND.RHEAD<>SENDER.BUF
SUB# 0,1 SZR ;
JMP ERR5 ; GOTO ERROR5 (REJECT)
LDA 0 MESS2,2 ;
LDA 1 HSTART,3 ;
LDA 2 .15 ; DADR:=
AND 2,1 SZR ;; IF SPECIAL = 0
MOVZL 0,0 ;; THEN MESS2.BUF
STA 0 RDADR ;; ELSE MES2.BUF < 1
RAN1: ; GET DATA
LDA 0 RDBYTES ; MESS1.RDMES:=DBYTES
MOV# 0,0 SNR ; IF RDBYTES=0
JMP RAN20 ; THEN GOTO AFTER DATA
LDA 0 RBLIDENT ;
STA 0 RSTATUS ;
LDA 0 .1 ;
RAN2: ; SET OPERATION
STA 0 RDMES+1 ;
LDA 0 RSTATUS ; MESS3.RDMES:=STATUS
STA 0 RDMES+4 ;
LDA 1 RDMES ; SENDMESSAGE(RECEIVER, OPERATION,
LDA 2 RNAME ; DBYTES,DADR,STATUS)
SENDMESSAGE ;
LDA 0 RX7 ; SET ACTIVATION ADDRESS
STA 0 BACT,2 ;
JMP @ RX09 ; GOTO CENTRAL WAIT
RANSDATA: ;
WAITANSWER ; RELEASE MESSAGE BUFFER
JSR @ RX2 ; CHECK TRANSPORT
TESTP ; *** TESTPOINT ***
MOV# 0,0 SZR ; IF STATUS <> 0 THEN
JMP RAN2 ; GOTO SET OPERATION
RAN20: ;
LDA 3 RX8 ; IF ANSWER RECEIVED
LDA 0 HSTART,3 ;
LDA 1 .1B11 ;
AND# 0,1 SNR ;
JMP @ RX22 ; THEN GOTO DELIVER ANSWER TO SEND
; MESSAGE RECEIVED*
LDA 0 HSTART,3 ;
LDA 1 .15 ;
AND# 0,1 SZR ; IF SPECIAL.HSTART.RHEAD <> 0
JMP RAN22 ; THEN GOTO AFTER CHECKRES
LDA 0 HSEND,3 ;
LDA 2 RX25 ;
JSR @ RX10 ;
STA 0 RX13 ;
MOVZL 0,0 ; IF RESERVED BY ANOTHER COM PROCESS
MOVZL 0,0 SZC ;
JMP ERR1 ; THEN GOTO ERROR BLOCK CONTROL 1
STA 2 RX14 ; SAVE RECEIVER ADDRESS
STA 3 RX15 ; SAVE ENTRY IN RESLIST
JMP RAN22 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R3..
; RECEIVER COROUTINE LL 15.2.76
ERR5: ; REJECT
ISZ RBLCONTR ; BLOCKCONTROL:=5
ERR4:
ISZ RBLCONTR ; OR 4
ERR3:
ISZ RBLCONTR ; OR 3
ERR2:
ISZ RBLCONTR ; OR 2
ERR1:
ISZ RBLCONTR ; OR 1
LDA 3 RX8 ; CHECK IF BUFFER IS USED:
LDA 0 RBSPEC ;
LDA 2 RDADR ; IF DATA BUFFER RESERVED
MOVZR 2,2 ;
MOVZL 0,0 SZC ;
JSR @ RX17 ; THEN FREEBUF(RDADR>2)
ISZ @ RX18 ; INCREASE NO OF MESS BUFS
LDA 0 RBLCONTR ; HSTATUS:=
LDA 1 RBLIDENT
ADD 0,1 ; + RBLTYPE
STA 1 RSTATUS ;
LDA 0 .1 ; OPERATION:=SEND STATUS, RECEIVE HEADER
JMP @ RX0 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R4..
; RECEIVER COROUTINE
RX8: RHEAD
RX2: RCHECK
RX0: RHRECEIVE
RX1: CW0
RX3: 0
RX5: GETBUF
RX7: RANSDATA
RX9: HNAME
RX10: CHRES
RX11: RAN04
RX13: 0
RX14: 0
RX15: 0
RX17: FREBUF
RX18: MESNO
RX19: RHEAD+HMES0
RX20: RHEAD+HNAME
RX21: ANS0
RX22: RANSWER
RX23: 1B0+1B1
RX25: 0 ; SAVED ADDR OF RECEIVER PROCESS
RX26: CRELEASE
RX27: -2
RBLIDEN: 0
RSTATUS: 0
RBLCONTR: 0
RBSPEC: 0
XCONCH: 0
RNAME: .RNAM
.NREL
.RNAM:
.TXT .FPAR<0>.
.XREL
RHMES: .+1
0
26
RHEAD*2
0
RDMES: .+1
0
RDBYT: 0
RDADR: 0
0
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R5..
; RECEIVER COROUTINE LL 15 2 76
RAN22:
LDA 3 RX8 ;
LDA 0 HMES0,3 ;
MOVZR 0,0 SNC ; IF TRANSPUT
JMP RAN00 ;
MOVZR 0,0 SZC ; AND INPUT THEN
JMP RAN03 ; BEGIN
LDA 0 HMES1,3 ; GETBUF(HMES1)
JSR @ RX5 ;
MOV# 3,3 SNR ; IF NO BUFFER
JMP ERR2 ; THEN GOTO ERROR BLOCKCONTROL 2
STA 3 RDADR ; RDADR:=BUFFER
LDA 0 RX23 ; RBSPEC:=1B0+1B1
STA 0 RBSPEC ;
JMP RAN03 ; GOTO BUILD MESSAGE
RAN00: ; END
MOVZR 0,0 ; IF CONTROL,RESERVATION THEN
MOVZR 0,0 SNC ;
JMP RAN02 ; BEGIN
LDA 3 RX8 ;
LDA 0 HMES1,3 ;
LDA 1 RX13 ;
LDA 3 RX15 ; IF RELEASE RESERVATION
MOV# 0,0 SZR ;
JMP RAN01 ;
MOV# 1,1 SZR ; AND IN RESLIST THEN
STA 0 +0,3 ; RELEASE RESERVATION
JMP RAN02 ;
RAN01: ; IF IF SET RESERVATION
MOV# 1,1 SZR ; AND NOT IN RESLIST THEN
JMP RAN02 ; BEGIN
MOV# 3,3 SNR ; IF NO EMPTY SPACE
JMP ERR2 ; THEN GOTO ERROR BLCONTR2
LDA 2 RX8 ;
LDA 0 HSEND,2 ; SENDER.RESLIST:=HSEND.RHEAD
STA 0 +1,3 ;
LDA 0 RX14 ; RECEIVER.RESLIST:=
STA 0 +0,3 ; RECEIVER ADDRESS
LDA 0 .1B3 ; RBSPEC:= 1B2
LDA 1 RBSPEC ;
ADD 1,0 ;
STA 0 RBSPEC ; END END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R5A..
; RECEIVER COROUTINE
RAN02: ;
LDA 3 RX8 ;
LDA 0 HSTART,3 ;
LDA 1 .1B14 ; IF SPECIAL = CAT
AND 0,1 SZR ;
JMP RAN03 ; THEN GOTO BUILD MESSAGE
LDA 2 HMES2,3 ;
LDA 0 HMES0,3 ;
LDA 1 .1B12 ; IF CONTROL AND NOT CONVERSION
AND# 0,1 SNR ;
STA 2 RDADR ; THEN RDADR:=HMES2.RHEAD
AND# 0,1 SNR ; IF CONVERSION
JMP RAN03 ;
LDA 0 RDBYTES ; AND RDBYTES <> 0
MOV# 0,0 SNR ;
JMP RAN03 ;
LDA 2 RDADR ;
MOVZR 2,2 ;
LDA 0 XCONCH ; THEN CHAIN CONVBUFFER IN
STA 0 CCHAIN,2 ; FRONT OF CONVERSION CHAIN
STA 2 XCONCHAIN ;
LDA 0 HSEND,3 ; CXSEND.CONVBUF:=HSEND.RHEAD
STA 0 CXSEND,2 ;
LDA 0 RX25 ; CRECEI.CONVBUF:=RECEIVER
STA 0 CREC,2 ;
LDA 0 RBSPEC ; RBSPEC:=RBSPEC+1B6
LDA 1 .1B6 ;
ADD 0,1 ;
STA 1 RBSPEC ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R6..
; RECEIVER COROUTINE LL 15.2.76
RAN03: ; BUILD MESSAGE:
LDA 3 RX8 ;
LDA 1 RDADR ; HMESS2.RHEAD:=RDADR
STA 1 HMES2,3 ;
JMP RAN06 ; GOTO TEST SPECIAL
RAN04: ;
LDA 2 RX20 ; DELIVER MESSAGE:
LDA 1 RX19 ; SEND MESSAGE(HNAME.RHEAD,
SENDMESSAGE ; HMES0.RHEAD)
LDA 3 RX8 ;
LDA 0 HSEND,3 ; BSEND.BUF:=HSEND.RHEAD
STA 0 BSEND,2 ;
LDA 0 RBSPEC ; BSPEC.BUF:=RBSPEC
STA 0 BSPEC,2 ;
LDA 0 HBUF,3 ; BBUF.BUF:=HBUF.RHEAD
STA 0 BBUF,2 ;
LDA 0 RX21 ; SET ACTIVATION ADDRESS
STA 0 BACT,2 ;
LDA 0 RBLIDENT ; HSTATUS:=RBLTYPE
STA 0 RSTATUS
LDA 0 HMES2,3 ; SAVE DATAAREA
STA 0 BDATA,2 ;
LDA 0 RA4 ;
STA 0 B1DATA,2 ; SAVE CAT OR TTY EXTRA BUFFER
LDA 0 .1 ;
JMP @ .+1 ; GOTO RECEIVE(OPERATION)
RA0: RHRECEIVE
RA2: 1B0+1B2
RA3: CEVLAST
RA4: 0
RA5: RHEAD
SP1: 1B0+1B3 ; SETENTRY + CHANGEENTRY
; ANSWER RECEIVED
RANSWER:
LDA 2 HBUF,3 ;
JSR @ RA3 ; ADJUST LASTEV
LDA 3 RA5 ;
LDA 0 HMES2,3 ; MOVE ANSWER FORM HEADER
STA 0 MESS2,2 ;
LDA 0 HMES3,3 ; TO MESSAGE BUFFER
STA 0 MESS3,2 ;
LDA 0 HMES0,3 ; SEND ANSWER(HMES0.HEADER,
LDA 1 HMES1,3 ; HMES1.HEADER)
SENDANSWER ;
LDA 0 RBLIDENT ; RSTATUS:=RBLTYPE
STA 0 RSTATUS ;
LDA 0 .1 ;
JMP @ RA0 ; GOTO RECEIVE(OPERATION)
«ff»
; RECEIVER COROUTINE LL 15.2.76
RAN06: ; DELIVER MESSAGE:
LDA 0 HSTART,3 ;
LDA 1 .1B14 ;; IF SPECIAL=CAT THEN
AND# 0,1 SNR ;;
JMP RAN07 ;; BEGIN
LDA 3 RX32 ;;
LDA 0 HMES0,3 ;;
LDA 1 SP1 ;; IF CHANGE ENTRY OR SET ENTRY THEN
LDA 2 HMES2,3 ;;
AND# 0,1 SZR ;;
MOVZR 2,2 ;; HMES2.RHEAD:=HMES2.RHEAD SHIFT RIGHT 1
STA 2 HMES2,3 ;;
LDA 1 .1B2 ;; IF LOOKUP ENTRY THEN
AND# 1,0 SNR ;;
JMP RAN09 ;; BEGIN
LDA 0 RX33 ;;
JSR @ RX31 ;; GETBUFFER(CAT-ENTRY)
MOVZR 3,2 SNR ;; IF NO BUFFER
JMP @ RX38 ;; THEN GOTO ERR BLOKCONTR 2
STA 3 @ RX36 ;; RDADR:=BUFFER
LDA 3 RX32 ;;
STA 2 HMES2,3 ;; HMES2.RHEAD:=BUFFER SHIFT RIGHT 1
LDA 0 RA2 ;; RBSPEC:=1B0+1B2
STA 0 @ RX35 ;;
RAN09: ;; ENDD
LDA 0 RX40 ;; GET BUFFER(CAT NAME)
JSR @ RX31 ;;
MOVZR 3,2 SNR ;; IF NO BUFFER
JMP @ RX38 ;; THEN GOTO ERROR2
LDA 3 RX32 ;;
STA 2 RA4 ;; SAVE ADDR
LDA 0 @ RX35 ;; BSPEC:=BSPEC+1B5
LDA 1 .1B5 ;;
ADD 0,1 ;;
STA 1 @ RX35 ;;
LDA 0 HCATE,3 ;; MOVE ENTRY NAME TO BUFFER
STA 0 +0,2 ;;
LDA 0 HCATE+1,3 ;;
STA 0 +1,2 ;;
LDA 0 HCATE+2,3 ;;
STA 0 +2,2 ;;
STA 2 HMES1,3 ;; HMES1.RHEAD:=BUFFER>1
JMP RAN04 ;; GOTO DEL MES
RAN07: ;; END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R8..
; RECEIVER COROUTINE LL 15.2.76
LDA 1 .1B15 ; IF SPECIAL=TTY THEN
AND# 0,1 SNR ;;
JMP @ RX37 ;; BEGIN
LDA 1 PROCE ;; CHECK IF PSEUDOSENDER EXIST:
LDA 2 RX39 ;;
SEARCHITEM ;; SEARCH(PROCESS,HNAME.RHEAD)
MOV# 2,2 SNR ;; IF PROCESS EXIST THEN
JMP RA075 ;;
LDA 0 PROG,2 ;; IF PROG.PROCESS <>
LDA 1 PPTTY ;; PSEUDOPROG THEN
SUB# 0,1 SZR ;;
JMP@ RX43 ;; GOTO ERROR 1 ELSE
JMP RAN08 ;; GOTO INCREASE MESCOUNT;
RA075:LDA 0 .M3 ;; GETBUFFER(PROCESS DESCRIPTION)
JSR @ RX31 ;;
MOVZR 3,2 SNR ;; IF NO BUFFER
JMP @ RX38 ;; THEN GOTO ERR BLOKCONTR 2
LDA 3 RX32 ;;
STA 2 RA4 ;; SAVE BUFFER>1
LDA 0 HNAME,3 ;; MOVE NAME FROM HEADER
STA 0 NAME,2 ;; TO PROCESS DESCRIPTION
LDA 0 HNAME+1,3 ;;
STA 0 NAME+1,2 ;;
LDA 0 HNAME+2,3 ;;
STA 0 NAME+2,2 ;;
LDA 0 .0 ;; CHAIN.PROCDESCR:=0
STA 0 CHAIN,2 ;;
STA 2 RX34+1 ;;
LDA 0 RX34 ;; SET PROCESS DEWCR IN
LDA 1 PROCE ;; PROCESS CHAIN
RECHAIN ;;
STARTPROCESS ;; AND RUNNING QUEUE
LDA 0 RX42 ;; MESCOUNT:=MAX MESCOUNT
STA 0 TTCOUNT,2 ;;
RAN08: ;; INCREASE MESCOUNT:
STA 2 RA4 ;; SAVE PROCESS ADDR
LDA 0 @ RX35 ;; BSPEC:= BSPEC + 1B4;
LDA 1 .1B4 ;;
ADD 0,1 ;;
STA 1 @ RX35 ;;
DSZ TTCOUNT,2 ;; MESCOUNT:=MESCOUNT-1
JMP @ RX37 ;; GOTO DEL MES
ISZ TTCOUNT,2 ;; IF MESCOUNT=0 THEN
JMP @ RX38 ;; GOTO ERROR2
;; END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..R8A..
; RECEIVER COROUTINE
TTCOUNT=SAVE+1
PPTTY: XTY0 ;; PSEUDO-PROCESS PROGRAM ADDR
RX31: GETBUF
RX32: RHEAD
RX33: -2
RX34: .+1-CHAIN
0
RX35: RBSPEC
RX36: RDADR
RX37: RAN04
RX38: ERR2
RX39: HNAME+RHEAD
RX40: -1
RX42: BTTYMES+1
RX43: ERR1
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..I1..
; INITIALIZATION LL 15.2.76
CBREAK:
LDA 2 CUR ;
SUB 0,0 ;
STA 0 COMLI ; REMOVE PROCESS ADDRESS FROM PAGE ZERO;
CLEANPROCESS ; IMPLIES BREAK OF PSEUDOPROCESSES;
STOPPROCESS
JMP .-1 ; STOP COM
COMSTART:
COMINIT: ;
CREP0: ;
LDA 1 CI5 ; RESERVE TRANSMITTER
LDA 2 CI4 ; AND SET TIMER
SENDMESSAGE
WAITANSWER ;
MOV# 0,0 SZR ;
JMP CREP0 ;
CREP1: ;
LDA 1 CI7 ; RESERVE RECEIVER
LDA 2 CI6 ; AND SET TIMER
SENDMESSAGE ;
WAITANSWER ;
MOV# 0,0 SZR ;
JMP CREP1 ;
LDA 0 .0 ; STATE := INIT
STA 0 @ CI9 ;
; SET TRANSMITTER OPERATION
LDA 0 CI10 ; SEND MASTER CLEAR
LDA 2 .0 ;
JSR @ CI11 ;
JMP @ .+1 ; GOTO RECEIVER WAIT
RINIT
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..I1A..
; INITIALIZATION JHA 80.07.25
CI4: .TNAM
CI5: .CI5
CI6: .RNAM
CI7: .CI7
.IFN TEST
.NREL
.CI5: 1B12+1B13 ; OPEN MESSAGE
1 ; TO TRANSMITTER
.+1*2 ;
6 ;
TTEST ;
ATTES ;
TTEST ;
.CI7: 1B12+1B13 ; OPEN MESAGE
1 ; TO RECEIVER
.+1*2 ;
250 ;
RTEST ;
ARTES ;
RTEST ;
.XREL
.ENDC
.IFE TEST
.NREL
.CI5: 1B12+1B13 ; OPEN MESSAGE
1 ; TO TRANSMITTER
.+1*2 ;
6 ;
0 ;
0 ;
0 ;
.CI7: 1B12+1B13 ; OPEN MESSAGE
1 ; TO RECEIVER
.+1*2 ;
250 ;
0 ;
0 ;
0 ;
.XREL
.ENDC
CI8: GETBUF
CI9: XCSTATE
CI10: TMCL
CI11: GECHAIN
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P1..
; PROCEDURES LL 15.2.76
; PROCEDURE TO STOP TRANSMITTER AND RECEIVER COROUTINE. IT
; AT FIRST STOP WHEN STOPCOUNT IS 0
XSTOP: ;
DSZ XSTCNT ; STOPCOUNT:=STOPCOUNT-1
JMP @ XC0 ;
LDA 1 XC1 ;
LDA 2 CI4 ; RELEASE RESERVATIONS
SENDMESSAGE ;
WAITANSWER ;
LDA 1 XC1 ;
LDA 2 CI6 ;
SENDMESSAGE ;
WAITANSWER ;
LDA 2 XSPMES ; SENDANSWER(SPMES)
JSR CEVLAST ;
SENDANSWER ;
LDA 2 CUR ;
STOPPROCESS ; STOPPROCESS
JMP COMINIT ;
XSTCNT: 0
XC0: CWAIT
XC1: .+1
1B13
0
XSPMES: 0
XC2: XTSTATE
XC3: XLASTEV
; PROCEDURE TESTS IF A RECEIVED MESSAGE IS FROM THE FPA LOAD PROG
XSPTEST: ;
LDA 0 MESS0,2 ;
LDA 1 MESS1,2 ;
COM# 0,0 SNR ; IF NOT SPECIAL MESSAGE
COM# 1,1 SZR ; (MESS0-MESS3 = -1)
JMP 0,3 ; THEN
LDA 0 MESS2,2 ;
LDA 1 MESS3,2 ;
COM# 0,0 SNR ;
COM# 1,1 SZR ;
JMP 0,3 ; RETURN
LDA 0 .1B0 ; CSTATE:= BREAKED
STA 0 @ CI9 ;
LDA 1 @ XC2 ; STOPCOUNT:=
LDA 0 .2 ; IF TSTATE<>WAITOP THEN 2
MOVZR# 1,1 SZC ;
LDA 0 .1 ; ELSE 1
STA 0 XSTCNT ;
STA 2 @ XC3 ; SAVE LASTEV
STA 2 XSPMES ; SAVE ADDR SPEC MES
JMP @ XC0 ; GOTO CWAIT
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P1A..
; PROCEDURES LL 15.2.76
; PROCEDURE CHECK RESERVATION
; AC0= SENDER ADR
; AC2= RECEIVER ADR
; AC3= LINK
; RETURN:
; AC0= 0: NO ENTRY WITH SAME RECEIVER
; AC3= ADR OF EMPTY ENTRY, 0 MEANS NO MORE SPACE
; AC0= 1B0: ENTRY WITH SAME RECEIVER AND SENDER
; AC0= 1B1: ENTRY WITH SAME RECEIVER BUT ANOTHER SENDER
; AC2= RECEIVER ADDRESS, 0 IF RECEIVER DOES NOT EXIST
; AC3= ADDR OF ENTRY IN RESLIST
CHRES: ;
STA 3 CH3 ; SAVE LINK
LDA 1 .0 ;
STA 1 CHEMPTY ; ENPTY:=0
LDA 1 CHNO ;
STA 1 CHCOUNT ; FOR I:=1 STEP 1 UNTIL CHNO DO
LDA 3 CH10 ;
CHR1: ; BEGIN
LDA 1 0,3 ;
SUB# 1,2 SZR ; IF RECEIVER.RESLIST=RECEIVER THEN
JMP CHR3 ; BEGIN
LDA 1 1,3 ; IF SENDER.RESLIST=SENDER
SUB# 0,1 SZR ;
JMP CHR2 ;
LDA 0 .1B0 ; THEN RETURN(ENTRY WITH SAME SENDER
JMP @ CH3 ; AND RECEIVER)
CHR2: LDA@ 0 PROG,2 ; ELSE IF
LDA 1 .1B7 ; DRIVERBIT.PSPEC.PROGRAM.RECEIVER
AND 0,1 SNR ; = 1 THEN
SUBZR 0,0 SKP ; RETURN(ENTRY WITH SAME RECEIVER
; BUT ANOTHER SENDER)
LDA 0 .1B1 ; ELSE
; RETURN(ENTRY WITH SENDER
; AND RECEIVER);
JMP @ CH3 ;
CHR3: ; END
MOV# 1,1 SNR ; IF EMPTY
STA 3 CHEMPTY ; THEN SAVE ENTRY ADDRESS
INC 3,3 ;
INC 3,3 ;
DSZ CHCOUNT ;
JMP CHR1 ; END
LDA 0 .0 ; NOT FOUND:
LDA 3 CHEMPTY ; RETURN(NO ENTRY WITH SAME RECEIVER)
JMP @ CH3 ;
CH3: 0
CH4: .+1
0
0
CH10: RESLIST
CHNO: .RESN
CHCOUNT: 0
CHEMPTY: 0
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P2..
; PROCEDURES LL 15 2 76
; PROCEDURE SET LAST EVENT(BUFFER). AC2=BUFFER TO BE REMOVED
; FROM EVENT QUEUE
CEVLAST: ; SET LAST EV:
STA 3 CEV1 ;
LDA 1 @ CEV0 ;
SUB# 1,2 SZR ; IF BUF <> XLASTEV THEN
JMP @ CEV1 ; RETURN
LDA 1 PREV,2 ;
LDA 3 NEXT,2 ;
SUB# 1,3 SNR ; XLASTEV:=
LDA 1 .0 ; IF BUF = PREV.BUF
STA 1 @ CEV0 ; THEN 0
JMP @ CEV1 ; ELSE PREV.BUF
CEV0: XLASTEV
CEV1: 0
; PROCEDURE MOVE MESSAGE. MOVES A MESSAGEBUFFER TO TRANS-
; MITTER HEADER. AC2=BUF
MOVMES: ;
STA 3 M0 ;
LDA 3 M1 ;
LDA 0 MESS0,2 ;
STA 0 HMES0,3 ;
LDA 0 MESS1,2 ;
STA 0 HMES1,3 ;
LDA 0 MESS2,2 ;
STA 0 HMES2,3 ;
LDA 0 MESS3,2 ;
STA 0 HMES3,3 ;
JMP @ M0 ;
M0: 0
M1: THEAD
M2: THEAD+3
; PROCEDURE MOVENAME. MOVES NAME TO HNAME.HEADER. AC2 POINTS TO NAME.
; PROCEDURE MOVENTRY. MOVES ENTRY TO HCATE.HEADER. AC2 POINTS TO ENTRY.
MOVENTRY:
STA 3 M0 ;
LDA 3 M2 ; HCATE=HNAME+3
JMP .+3 ;
MOVNAME: ;
STA 3 M0 ;
LDA 3 M1 ;
LDA 0 +0,2 ;
STA 0 HNAME,3 ;
LDA 0 +1,2 ;
STA 0 HNAME+1,3;
LDA 0 +2,2 ;
STA 0 HNAME+2,3;
JMP @ M0 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P2A..
; PROCEDURES LL 15.2.76
; PROCEDURE TCHAIN. CHAINS OPERATION TO TRANSMITTER
; CHAIN. AC0=ACTIVATION ADDRESS, AC2=BUFFER
TCHAIN: ;
STA 3 TC0 ;
STA 0 BACT,2 ;
LDA 0 .0 ; CHAIN.OPERATIN:=0
STA 0 BCHAIN,2 ;
LDA 1 @ TC1 ;
MOV 1,3 ;
LDA 1 BCHAIN,3 ; WHILE CHAIN.SEM <> 0 DO;
MOV# 1,1 SZR ;
JMP .-3 ;
STA 2 BCHAIN,3 ; CHAIN.SEM:=OPERATION
JMP @ TC0 ;
TC0: 0
TC1: XTRSEM
; PROCEDURE GETCHAIN. GETS AN OPERATION BUFFER AND LINKS
; IT TO TRANSMITTER CHAIN. AC0=ACTIVATION ADDRESS
; RETURN AC2=OPERATIONBUFFER
GECHAIN: ;
STA 3 GE1 ;
STA 0 GE2
LDA 0 .0 ;
JSR GETBUF ;
MOVZR 3,3 ;
INC 3,3 ;
INC 3,3 ;
STA 2 MBUF,3 ; OPERATION(0):=BUF
LDA 0 .0 ;
STA 0 MNAME,3 ; MNAME:=UNUSED
LDA 0 GE2 ; SET ACTIVATION ADDRESS
MOV 3,2 ;
JSR TCHAIN ;
JMP @ GE1 ; RETURN
GE1: 0
GE2: 0
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P3..
; PROCEDURES LL 15.2.76
; PROCEDURE GETBUF.
; AC0= LENGTH OF BUFFER, AC3:=ADDRESS OF BUFFER ELEMENT.
; AC2 UNCHANGED.
BUFDESCR: .+1
-1 ; FOR CAT NAMES
BUF0 ;
0 ; OPERATION BUFFERS
BUF1 ;
0
0
-2
BUF3
-3
BUF4
BQ5: BL5*2
BUF5
BQ6: BL6*2
BUF6
BQ7: BL7*2
BUF7
GETBUF:
STA 3 GB0 ; SAVE RETURN
STA 2 GB1 ; SAVE AC2
NEGZL# 0,0 SNC ; IF LENGTH <= 0
JMP GB12 ; THEN GOTO SEARCH
MOV 0,3 ; SEARCH FOR BEST BUFFER
LDA 1 BQ5 ;
SUBZL# 0,1 SNC ; IF WANTED LENGTH < BUF1
MOV 1,3 ; THEN BEST:=BUF1
LDA 1 BQ6 ;
SUBZL# 0,1 SNC ; IF WANTED LENGTH < BUF2
MOV 1,3 ; THEN BEST:=BUF2
LDA 1 BQ7 ;
SUBZL# 0,1 SNC ; IF WANTED LENGTH < BUF3
MOV 1,3 ; THEN BEST:=BUF3
MOV 3,0 ; WANTED BUFFER:=BEST
GB12: ; SEARCH:
LDA 1 GB4 ; GET BUFCHAIN(LENGTH)
STA 1 GB2 ; FOR I:=1 STEP 1 UNTIL BTYPES DO
LDA 2 BUFDESCR ;
GB10: ; BEGIN
LDA 1 +0,2 ; IF BUFDESCR(I)=BUFFER LENGTH
SUB# 0,1 SNR ;
JMP GB11 ; THEN GOTO FOUND
INC 2,2 ;
INC 2,2 ;
DSZ GB2 ;
JMP GB10 ; END
; NOT FOUND:
LDA 3 .0 ; RETURN NO BUFFER
JMP @ GB0 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P3A..
; PROCEDURES
GB11: ; FOUND:
TESTP ; *** TESTPOINT ***
LDA 3 +1,2 ; GET HEAD OF CHAIN
LDA 0 +0,3 ;
MOV# 3,3 SZR ; IF CHAIN NOT EMPTY THEN
STA 0 +1,2 ; HEAD.CHAIN:=CHAIN.HEAD.CHAIN
LDA 2 GB1 ;
MOVZL 3,3 ; MAKE IT A BYTE ADDRESS
JMP @ GB0 ; RETURN(HEAD.CHAIN)
GB0: 0
GB1: 0
GB2: 0
GB4: BTYPES+5
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P3B..
; PROCEDURES
; PROCEDURE FREEBUF. AC2= ADDRESS OF BUFFER ELEMENT
; AT RETURN: AC1 AND AC2 UNCHANGED.
FREBUF: ;
STA 3 GB0 ; SAVE RETURN
LDA 3 BUFDESCR ;
LDA 0 -1,2 ; GET BUFFER TYPE
ADD 0,3 ;
LDA 0 +1,3 ; GET HEAD OF CHAIN(BUFFER TYPE)
STA 0 +0,2 ; CHAIN.BUF:=HEAD
STA 2 +1,3 ; HEAD:=BUF
TESTP ; *** TESTPOINT ***
JMP @ GB0 ; RETURN
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P4..
; PROCEDURES LL 15.2.76
; PROCEDURE RCHECK(STATUS,MESBUF). AC0=STATUS, AC2=MESBUF.
; RETURN: AC0= 0, BLOK OK
; AC0= 1, TRANSMIT STATUS, RECEIVE BLOCK
; AC0= 9, RECEIVE BLOCK AGAIN
RCHECK: ; SAVE LINK
STA 0 RCH21
STA 3 RCH0 ;
LDA 1 RCH1 ;
AND# 0,1 SNR ; IF TIMEOUT OR RESET
JMP RCH10 ;
LDA 0 .9 ;
JMP @ RCH0 ; THEN RETURN(RECEIVE BLOCK)
RCH10: ;
LDA 1 MESS3,2 ;
LDA 3 RCH3 ; RBLTYPE:=BLOKTYPE,BLOKNO.STARTBYTE
AND 1,3 ;
STA 3 @ RCH4 ;
LDA 1 .1B10 ; CHECK PARITY ERROR:
AND# 0,1 SNR ; IF PARITY ERROR THEN
JMP RCH11 ; BEGIN
; RSTATUS:=PARITY
RCH15: ;
LDA 3 @ RCH4 ; + RBLTYPE
ADD 3,1 ;
RCH12: ;
STA 1 @ RCH5 ;
LDA 0 .1 ; RETURN(SEND STATUS, RECEIVE BLOCK)
JMP @ RCH0 ;
RCH11: ; END
LDA 0 MESS3,2 ; IF ANSWER MASTER CLEAR
STA 0 RCH22 ; ***
LDA 1 .15 ; THEN
SUB# 0,1 SZR ;
JMP RCH13 ; BEGIN
LDA 0 .1 ; STATE := RUNNING
STA 0 @ RCH6 ;
LDA 0 .1B8 ; BLOKNO:=1
STA 0 RBLNO ;
LDA 1 .0 ; STATUS:=0
JMP RCH12 ; GOTO SEND STATUS, RC BLOK
RCH13: ; END
LDA 3 @ RCH6 ;
LDA 1 RCH7 ; IF MASTER CLEAR
SUB# 0,1 SZR ; THEN
JMP RCH14 ; BEGIN
MOV# 3,3 SZR ; IF STATE = RUNNING
JMP @ RCH9 ; THEN GOTO INIT
LDA 0 RCH09 ; CHAIN ANSWER MASTER CLEAR
LDA 2 .0 ;
JSR GECHAIN ; TO TRANSMITTER CHAIN
LDA 1 .0 ; GOTO SEND STATUS, RC BLOK
JMP RCH12 ; END
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P4A..
; PROCEDURES
RCH14: ;
LDA 1 .2 ; STATUS:= REJECT BLOCK
MOV# 3,3 SNR ; IF STE = INIT THEN
JMP RCH15 ; GOTO SEND STATUS, RC BLOK
LDA 1 @ RCH4 ;
LDA 2 .1B8 ;
AND 2,1 ;
LDA 2 RBLNO ; IF EXPECTED BLOCKNO <>
LDA 0 .1 ; RECEIVED BLOCKNO
SUB# 2,1 SZR ; THEN
JMP @ RCH0 ; RETURN(RETRANS STATUS,RECEIVE BLOCK)
LDA 0 RCH21 ; CHECK BLOCK LENGTH ERROR:
LDA 1 .1B8 ; IF STATUS = BLOCK ERROR
AND# 0,1 SNR ;
JMP .+3 ;
LDA 1 .1B11 ; THEN GOTO
JMP RCH15 ; RETTRN STATUS(BLOCK ERROR)
; BLOCK OK:
LDA 1 .1B8 ; BLOCKNO:=BLOCKNO + 1 MOD 2
SUB 2,1 ;
STA 1 RBLNO ;
LDA 0 @ RCH4 ; RSTATUS:=RBLTYPE
STA 0 @ RCH5 ;
LDA 0 .0 ; RETURN(BLOK OK)
JMP @ RCH0 ;
«ff»
; RC3600 PROCESSOR ECPANSION PAGE..P5..
; PROCEDURES
RCH0: 0
RCH1: 1B14+1B11
RCH3: 1B8+1B9
RCH4: RBLIDENT
RCH5: RSTATUS
RCH6: XCSTATE
RCH7: 1B11+15
RCH9: RCH20
RCH09: TAMCL
RCH20: JMP @ .+1
CBREAK
RCH21: 0
RCH22: 0
RBLNO: 0
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P6..
; PROCEDURES LL 15.2.76
; PROCEDURE TRCHECK(STATUS,BUF). AC0= STATUS, AC2=MESBUF.
; RETURN: AC0= 0, BLOK OK
; AC0= 1B0, RETRANSMIT
; AC0 > 0, ONLY MESSAGES: RETURN ANSWER, STATUS=AC0
TRCHECK: ;
LDA 1 @ TRC8 ; IF CSTATE = BREAKED
MOVZL# 1,1 SNC ;
JMP TRC13 ;
LDA 0 .0 ;
JMP 0,3 ; THEN RETURN OK
TRC13: ;
STA 3 TRC0 ; SAVE RETURN
LDA 1 TRC3 ; IF STATUS = TIMEOUT
AND# 0,1 SNR ;
JMP TRC10 ; BEGIN
JSR TRESET ; SEND RESET MESSAGE
JMP TRC11 ; GOTO RETRANS
TRC10: ; END
MOV# 0,0 SZR ;
JMP TRC11 ; IF STATUS <> 0 THEN GOTO RETRANS
LDA 0 MESS3,2 ;
STA 0 TRC17
LDA 1 @ TRC8 ; IF STATE <> TUNNING THEN
MOV# 1,1 SZR ;
JMP TRC12 ;
MOV# 0,0 SZR ; IF STATUS <> 0
JMP TRC11 ; THEN GOTO RETRANSMIT
JMP @ TRC0 ; ELSE RETURN BLOCK OK
TRC12: ;
LDA 1 TRC2 ;
AND 0,1 ; IF PAR, BLOKL,BLOKID,BLOKNO ERROR
LDA 3 SNOIDENT ;
SUB# 1,3 SZR ;
JMP TRC11 ; THEN GOTO RETRANSMIT
LDA 1 .15 ;
AND 1,0 ; GET BLOK CONTROL
LDA 1 .5 ; IF BLOCKCONTR = 5(REJECT
SUB# 0,1 SZR ;
JMP .+3 ;
LDA 0 .1B1 ; THEN RETURN 1B1
JMP @ TRC0 ;
LDA 1 .3 ; IF BLOK CONTROL > 0
SUBZL# 0,1 SZC ; THEN GOTO INITIALIZE
JMP @ TRC7 ;
LDA 3 TRC6 ;
ADD 0,3 ;
LDA 0 +0,3 ; RETURN(RESULT.BLOKCONTROL)
JMP @ TRC0 ;
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P6A..
; PROCEDURES
TRC11: ; RETRANSMIT
LDA 0 .1B0 ;
DSZ SERCNT ; ERROR:=ERROR+1
JMP @ TRC0 ; IF ERROR <> MAXERROR THEN
; RETURN(1B0)
LDA 1 PROCE ; SEARCH ITEM(PROCESS,TTY)
LDA 2 TRC18 ;
SEARCHITEM ;
MOV# 2,2 SNR ; IF NO TTY PROCESS
JMP@ XBREAK ; THEN GOTO CBREAK;
LDA 1 TRC19 ;
LDA 2 TRC18 ; WRITE(TTY,-FPA ERROR-)
SENDMESSAGE ;
WAITANSWER ;
JMP@ XBREAK ; GOTO CBREAK;
TRC18: .TR18
TRC19: .TR19
.NREL
.TR18:
.TXT .TTY<0><0>.
.TR19:
3
14
.+1*2
.TXT .<10><13>FPA ERROR<10><13>.
.XREL
TRC16: 0
TRC17: 0
XBREAK:CBREAK
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7..
; PROCEDURES LL 15.2.76
TRC0: 0
TRC2: 15B11
TRC3: 1B1+1B14
TRC5: XTSTATE
TRC6: .+1
0 ; RBLCONTR=0
1B6 ; - =1
1B15 ; - =2
1B13 ; - =3
TRC7: COMINIT
TRC8: XCSTATE
; PROCEDURE SET STARTCHARACTER(BUF,IDENT)
; AC0=IDENT, AC2=MESSAGE ADDRESS
STCHAR: ;
STA 3 ST0 ;
LDA 1 SBLNO ; BLOKNO:=BLOKNO+1MOD2
LDA 3 .1B8 ;
SUB 1,3 ;
STA 3 SBLNO ;
ADD 3,0 ; STARTCHAR:=BLOKNO+TYPE
STA 0 SNOIDENT ; SAVE BLOKNO+BLOKTYPE
LDA 1 @ SFUNC ;
ADD 1,0 ; + FUNCTION
LDA 1 @ ST1 ;
ADD 1,0 ; + SPECIAL
STA 0 +3,2 ;
LDA 0 SERR ; ERRORCOUNT:=MAXERROR
STA 0 SERCNT ;
JMP @ ST0
ST0: 0
ST1: TXSPEC
SBLNO: 1B8
SFUNC: TXFUNC
SNOIDE: 0
SERR: MAXERR
SERCNT: 0
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7B..
; PROCEDURES LL 15.2.76
; PROCEDURE TRANSMIT RESET SIGNAL AND WAIT 60 MSEK
TRESET: ;
STA 3 TRE0 ;
LDA 1 TRE1 ; SEND RESET MESSAGE TO
LDA 2 @ TRE2 ; TRANSMITTER
SENDMESSAGE ;
LDA 0 TRE3 ;
STA 0 BACT,2 ; SET ACTIVATION ADRESS
JMP @ TRE4 ; GOTO CENTRAL WAIT
TR00: ; ACTIVATION:
WAITANSWER ;
LDA 1 .0 ; WAIT 100 MSEC
LDA 2 .5 ;
WAITINTERRUPT ;
JMP @ TRE0 ; RETURN
TRE0: 0
TRE1: .+1
1B11
TRE2: TNAME
TRE3: TR00
TRE4: CWAIT
TRE5: XTSTATE
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7C..
; PROCEDURES
; PROCEDURE RELEASE CONVERSION BUFFER FROM CONVCHAIN
; AC0=SENDER, AC1=RECEIVER
CRELEASE: ;
STA 3 CRE4 ; SAVE REGISTERS
STA 0 CRE5 ;
STA 1 CRE6 ;
STA 2 CRE7 ;
LDA 2 XCHEAD ; ELEM:=XCHEAD
CRE0: ;
MOV 2,3 ;
LDA 2 CCHAIN,3 ; ELEM:=CCHAIN.ELEM
MOV# 2,2 SNR ;
JMP @ CRE4 ; IF ELEM=0
LDA 0 CRE5 ; THEN RETURN
LDA 1 CXSEND,2 ; IF SENDER= CSEND.ELEM
SUB# 0,1 SZR ; AND
JMP CRE0 ; RECEIVER= CREC.ELEM
LDA 0 CRE6 ;
LDA 1 CREC,2 ; THEN
SUB# 0,1 SZR ;
JMP CRE0 ; BEGIN
MOV 3,1 ; SAVE PREV ELEM
JSR @ CRE3 ; FREE BUFFER
LDA 2 CCHAIN,2 ;
MOV 1,3 ;
STA 2 CCHAIN,3 ; CCHAIN.PREV:=
LDA 2 CRE7 ; CCHAIN.ELEM
JMP @ CRE4 ; RETURN
; END
CRE3: FREBUF
CRE4: 0
CRE5: 0
CRE6: 0
CRE7: 0
XCHEAD: XCONCH-CCHAIN
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7D..
;
; TEST PROCEDURE. SAVE CONTENT OF REGISTERS AND 5 WORDS
; FROM AC2 AND ON IN A CYCLIC BUFFER.
; CALL: JSR XTEST. REGISTERS UNCHANGED
.IFN TEST
ZQLBNR: 0
ZQFWA: ZQBUF
ZQLWA: ZQEND-10
ZQPOINT: ZQBUF
ZQ0: 0
ZQ3: 0
XTEST:
STA 0 ZQ0
STA 3 ZQ3
ISZ ZQ3
LDA 3 ZQPOINT
LDA 0 ZQLWA
SUBZ# 0,3 SZC
JMP ZQCYCLE
ZQZQ1:
ISZ ZQLBNR
LDA 0 ZQLBNR
STA 0 0,3
LDA 0 ZQ0
STA 0 1,3
STA 1 2,3
STA 2 3,3
LDA 0 ZQ3
STA 0 4,3
LDA 0 0,2
STA 0 5,3
LDA 0 1,2
STA 0 6,3
LDA 0 2,2
STA 0 7,3
LDA 0 3,2
STA 0 8,3
LDA 0 4,2
STA 0 9,3
LDA 0 .10
ADD 0,3
STA 3 ZQPOINT
LDA 0 ZQ0
JMP @ ZQ3
ZQCYCLE:
LDA 3 ZQFWA
STA 3 ZQPOINT
JMP ZQZQ1
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7E..
; PROCEDURES
ZQBUF: 0
.BLK 20
ZQEND: 0
.NREL
TTEST: .BLK 120
ATTEST: 0
RTEST: .BLK 120
ARTEST: 0
.ENDC
.NREL
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P7A..
; TABLES LL 15.2.76
; ALLOCATE DATA BUFFERS.
0 ; HSTART.THEAD
THEAD: .BLK 13
0 ; HSTART.RHEAD
RHEAD: .BLK 13
0
BUF0= 0
.DO B0
0
BUF0
.BLK BL0-1
BUF0= .-BL0
.ENDC
BUF1= 0
.DO B1
2
BUF1
.BLK BL1-1
BUF1= .-BL1
.ENDC
BUF3= 0
.DO B3
6
BUF3
.BLK BL3-1
BUF3= .-BL3
.ENDC
BUF5= 0
.DO B5
.BLK 3
10
BUF5
.BLK BL5-1
BUF5= .-BL5
.ENDC
BUF6= 0
.DO B6
12
BUF6
.BLK BL6-1
BUF6= .-BL6
.ENDC
BUF7= 0
.DO B7
14
BUF7
.BLK BL7-1
BUF7= .-BL7
.ENDC
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P8..
; TABLES LL 15.2.76
BUF4= 0 ; TTY PROCESS DESCRIPTIONS
.DO B4
8
TTMES= .+24-11
TTPROC= .+0
BUF4
0
0
23
.BLK 3
.+0
.-1
B40*11+TTMES
XTY0
1B0
0
128
XTY9
.BLK 4
XTY1
0
0
0
TTMES= .+1-11
TTBUF= 0
.DO B40
0
.+0
.-1
TTBUF
10
TTPROC
0
.BLK 4
TTBUF= .-10
.ENDC
BUF4= .-BL4
.ENDC
«ff»
; RC3600 PROCESSOR EXPANSION PAGE P8A..
; TABLES
XTY0: 1B0+1
XTY1
0
XTY10-XTY0
.TXT .XTYX<0>.
XTY1:
LDA 2 .0
XTY2:
WAITEVENT
JMP XTY5
; MESSAGE TO TTY
LDA 0 SENDER,2 ;
LDA 1 .CX10 ;
SUB# 0,1 SNR ; IF SENDER.BUF <> XCOMX THEN
JMP XTY3 ; BEGIN
LDA 0 PREV,2 ; SENDANSWER(BUF,ILLEGAL);
STA 0 TYBUF,3 ;
LDA 0 .1B6 ;
SENDANSWER ;
LDA 2 TYBUF,3 ; WAIT FOR NEXT BUFFER;
JMP XTY2 ; END;
XTY3: MOV 2,0
LDA 1 XMES0
ADD 2,1
LDA 2 XTYNAM
SENDMESSAGE
STA 0 TYB,2
MOV 0,2
JMP XTY2
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P8B..
; TABLES
; ANSWER
XTY5:
STA 2 TYBUF,3
LDA 2 TYB,2
SENDANSWER
LDA 2 TYBUF,3
LDA 0 PREV,2
LDA 1 NEXT,2
SUB# 0,1 SNR
LDA 0 .0
STA 0 TYBUF,3
WAITANSWER
LDA 2 TYBUF,3
JMP XTY2
XTY9: ; BREAK:
LDA 2 CUR ;
CLEANPROCESS ;
SUB 0,0 ;
STA 0 PX00+1 ;
LDA 0 PROCESS ;
LDA 1 PX00 ; REMOVE PSEUDO PROCESS
RECHAIN ; FROM PROCESS CHAIN;
STOPPROCESS ; STOP PSEUDOPROCESS
PX00: .+1-CHAIN
0
.CX10:XCX10 ; XCOMX PROCESS DESC. ADDR.
TYB= -1
TYBUF= SAVE+2
XMES0: MESS0
XTYNAM: .+1
.TXT .TTY<0><0>.
XTY10:
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P9..
; TABLES LL 15.2.76
; COMLIST FOR SEND MESSAGE
.XREL
XCOMLIST:
.DO XCENT
0
0
0
0
.ENDC
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P10..
; TABLES
; RESERVATION LIST FOR COM
RESLIST:
.DO .RESN
0
0
.ENDC
.NREL
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..P11..
; TABLES
XCX11= 0
.DO .MESB
.BLK 7
.+0
.-1
XCX11
BSIZE
XCX10
0
.BLK 4
XCX11= .-BSIZE
.ENDC
.COMS:
JMP@ .+1
COMSTART
.LOC COMLIST
XCX10
.LOC COMNO
-1
.NREL
«ff»
; RC3600 PROCESSOR EXPANSION PAGE..TA2..
; TABLES
XCOML ; -2: COMLIST
XCENT ; -1: COMNO
XCX10: ; TOP OF PROGRAM
0 ; NEXT
0 ; PREV
0 ; CHAIN
XCX12-XCX10 ; SIZE
.TXT .XCOMX.
.+0 ; EVENT
.-1 ;
XCX11 ; FIRST MESSAGE BUFFER
XCX0 ; PROGRAM ADDRESS
0 ; STATE
0 ; TIMER
1B0 ; PRIORITY
CBREAK ; BREAK ADDRESS
.BLK 4 ; SAVED AC.S
.COMS*2 ; START ADDRESS
0 ; SAVE
XCX12:
.END XCX10
«ff»
MER: ; TIMER:
26 00307*060277 INTDS ; DISABLE INTERRUPT;
27 00310*102000 ADC 0,0 ; DRIVE:= -1;
28 00311*024126 LDA 1 KTIME ; TIMER.CUR:=
29 00312*045014 STA 1 TIMER,2 ; INITTIME;
30 00313*101400 DTIM3:INC 0,0 ; NEXTDRIVE:
31 00314*006744 JSR@ .DSEARCH ; INCR(DRIVE);
32 00315*175005 MOV 3,3 SNR ; SEARCH(DRIVE,COROUTINE);
33 00316*002750 JMP@ .DCHECK ; IF COROUTINE = 0 THEN
34 00317*025404 LDA 1 CREASON,3 ; GOTO CHECK;
35 00320*125122 MOVZL 1,1 SZC ; IF REASON.COR = INTERRUPT THEN
36 00321*015403 DSZ CTIME,3 ; IF DECR(TIMER.COR) = 0 THEN
37 00322*000771 JMP DTIM3 ; BEGIN !TIMEOUT!
38 00323*024117 LDA 1 STIME ; STATUS.COR:= TIMER;
39 00324*045412 STA 1 CNSTAT,3 ; TRANSFERED BYTES.COR:= 0;
40 00325*126400 SUB 1,1 ; !CURRENT PROGRAM COUNT
41 00326*045435 STA 1 CTRANS,3 ; IS UNDEFINED!
42 00327*045025 STA 1 BUF,2 ; BUF.CUR:= 0 !TO BE SURE
43 ; THAT ALL MESSAGES ARE HANDLED
44 ; CORRECT, THE EVENT QUEUE IS
45 ; SCANNED FROM THE VERY BEGINNING!;
46 00330*165000 MOV 3,1 ;
47 00331*020101 LDA 0 KICAUSE ; CAUSE:= INTERRUPT;
48 00332*006724 JSR@ .DINSERT ; INSERT(CAUSE,COROUTINE);
49 00333*006726 JSR@ .DSWAIT ; START(WAIT);
50 ; END !TIMEOUT!;
51 00334*000757 JMP DTIM3 ; GOTO NEXTDRIVE;
«ff»
!0022 MD005
01 ; CDC DISC DRIVER, 77.05.01 HKM. MODULE COMMANDS ETC. PAGE 18
02
03 ; CHANNEL PROGRAM COMMANDS:
04 00335*154001 KREAD : 216B7+1 ; COMMAND(READ DATA);
05 00336*154003 KWRITE : 216B7+3 ; - (WRITE DATA);
06 00337*154002 KWRREAD : 216B7+2 ; - (WRITE/READ(SEEK));
07 00340*154031 KREBYTE : 216B7+3B12+1 ; - (READ BYTE);
08 00341*154033 KWRBYTE : 216B7+3B12+3 ; - (WRITE BYTE);
09 000000 .IFN MDI ;
10 KRADDR : 216B7+1B12+1 ; - (READ ADDRESS FIELD);
11 KWADDR : 216B7+1B12+3 ; - (WRITE ADDRESS FIELD);
12 KWFORM : 216B7+2B12+2 ; - (FORMA«ff»
«nul»