|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11414 (0x2c96)
Types: TextFile
Names: »CPMMC«
└─⟦80dc9b589⟧ Bits:30005096 8" CR80 Floppy CR80FD_0053 ( HMDIR 6 VOL: BACKUP MD: CPM.D From: HMDIR*CPM.D )
└─⟦08785f861⟧
└─⟦this⟧ »CPM.D!CPMMC«
;----------------------------------------------------------------------
; PROCEDURE "CPM-MONITORING&CONTROL" (CPMM&C).
;
; NARRATIVE:
; CPMM&C IS ENVOKED BY CPMED WHEN ONE OF THE FOLLOWING EVENTS IS EN-
; COUNTERED: * A SYNC_MESSAGE
; * A MODECHANGE COMMAND
; * SYNC_TIMER EXPIRED
; * SYNC_MSG ACKNOWLEDGEMENT
; * MSS CONTROL COMMANDS/RESPONSES
; AND AS SPECIFIED BY OPCODE.(REF. TO JUMP TABLE BELOW).
;
; 1.GO_STANDBY COMMAND:
; IF ACTIVE,AND IF IN SYNC_MODE,THEN THE SYNC_TIMER IS STOPPED,
; ELSE ALL MSG'S HELD IN TMQ(IF ANY) ARE RETURNED TO PMQ.
; 2.GO_ACTIV COMMAND:
; IF CPMMODE IS STANDBY,THEN A SYNC_MESSAGE IS GENERATED AND TRANS-
; MITTED TO THE COLLOCATED 'SIP',THE SYNC_TIMER STARTED,AND CPMMODE
; IS CHANGED TO 'ACTIVE'&'HUNT'&'SYNC'.
; 3.SEND_SYNC_MESSAGE/SYNC_ACK_TIMEOUT.
; AN SYNC_MESSAGE IS GENERATED,AND TRANSMITTED TO COLLOCATED 'SIP',
; AND THE SYNC_TIMER IS STARTED.
; 4.SYNC_MESSAGE ACKNOWLEDGEMENT.
; IF CPMMODE IS HUNT,AND ACKSEQNO=SYNCSEQNO IT SIGNALS,THAT ALL OUT-
; BOUND CHANNELS ARE 'INSYNC'.CPMMODE IS CHANGED TO OUTPUT-ACTIVE,
; AND EXIT SYNC,AND THE 'NM'-QUEUE IS RESCHEDULED (SENDSIGNAL).
; 5.INBOUND SYNC_MESSAGE.
; THE SYNC_MSG IS ACKNOWLEDGED (SEQNO MAILED IN SIPMAILBOX),AND
; CPMMODE CHANGED FROM 'HUNT' TO 'INPUT-ACTIV'.
; 6.MSS CONTROL.
; A.AN OPEN/CLOSE COMMAND (AS DEFINED BY CMSSPARM) IS SENT TO THE
; MSS SUBSYSTEM.
; B.PROCESSING OF MSS REPORTS.
; 7.NTS CONTROL.
; A.AN SETUP/OPEN/CLOSE COMMAND IS SENT TO THE NTS SUBSYSTEM(VIA MSS)
; AS DEFINED BY CNTSPARM.
; B.THE NTS STATUS IS UPDATED IN ACCORDANCE TO REPORTS RECIEVED.
;
; INPUT: CPMMODE
; CMSSPARM
; CNTSPARM
; OSYNCSN
; KAMSSN.CMCDAT
;
; OUTPUT: CPMMODE
; OSYNCSN
; CTRLMSG->TQ
;
; WORK: MPCMSG
;
; CALLS TO: TRANSMIT_MSG
; GENERATECTRLMSG
; ENQUEUEBUFFER
; DEQUEUEBUFFER
; CPM_TIMER
; MON SENDSIGNAL
;
; REGISTER USE: ENTRY EXIT
; R0 OPCODE DESTROYED
; R5 LINK DESTROYED
; RX - DESTROYED
;
; RETURNS: LINK+0:DONE
; UREXXX:ERROR
;----------------------------------------------------------------------
;
; CASE_OF_EVENT JUMP TABLE:
;
;----------------------------------------------------------------------
CPMEVENT: LOC=0
MINOPCODE: OPSTANDBY: R110
OPACTIV: R120
OPSYNC: R130
OPACK: R140
OPHUNT: R150
OPMSSC: R160
OPMSSR: R165
OPNTSC: R170
MAXOPCODE: OPNTSR: R175
LOC=LOC+CPMEVENT
;----------------------------------------------------------------------
CPMMC: ;BEGIN CPMM&C
MOV R5 RLR100 ; SAVE LINK
SLO R0 MINOPCODE ;
IHS R0 MAXOPCODE ; IF OPCODE OUT_OF-RANGE THEN
JMPI S4 URE040 ;E ERROR,REPORT ERROR
MOD R0 ;
JMPI CPMEVENT ; CASE OF EVENT(1,2,3,4,5,6)
;
;
R110: ; 1.MODECOMMAND=STANDBY:
;----------------------------
MOVC CPMOPM R2 ; READ CPM_OPMODE
IBN X2 FSYNC ; IF OPMODE=SYNC THEN
JMP S5 SSYNTIM ; "STOP_SYNC_TIMER"
; 'UPDATE CPMMODE'
MOVC 1<FSTANDBY X2 ; CPMMODE=STANDBY
MOVC CMDCL R0 ; COMD:=CLOSE MSS
JMP R162 ; GOTO SEND MSS-COMMAND:
;----------------------------------------------------------------------
;
R120: ; 2.MODECOMMAND=ACTIV:
;----------------------------
MOVC CPMOPM R0 ; READ CPMMODE
IBN X0 FACTIV ; IF CPMMODE=ACTIV THEN
JMP R190 ; GOTO DONE:
MOVC 1<FACTIV+1<FHUNT% ; ELSE
+1<FSYNC X0 ; UPDATE CPM-OPMODE
JMP R130 ; GOTO SEND SYNC_MSG
; ENDIF
;----------------------------------------------------------------------
R130: ; 3.SEND SYNC_MESSAGE.
;---------------------------------
MOVC OSYNCSN R4 ;
INC 0. X4 ; UPDATE OUTBOUND SYNC_SEQNO.
SON 0. X4 ;
INC 0. X4 ; R4=REF.TO DATA
MOVC 1 R1 ; R1=DATA SIZE
MOVC TCIPSYN R0 ; R0=TYPE_SYNCMSG
JMP S5 GENCTRLMSG ; "GENEARATE_SYNCMSG"
JMP & R138 ; X0:NO PDB'S,SKIP XMIT.
; X1:R0=MTCB INDEX
MOVC SIPRMSK0 R2 ; GET SIP ROUTING MASK
MOVC SIPRMSK1 R3 ;
MOVC MPCMSG R4 ; AND REF.TO PRE.ASS. MPCB
JMP S5 TRANSMSG ; "TRANSMIT_MSG"
R138: ;
JMP S5 PSYNTIM ; "START_SYNC_TIMER"
JMP R190 ; GOTO DONE:
;
;----------------------------------------------------------------------
R140: ; 4.SYNC_MESSAGE ACKNOWLEDGEMENT.
;----------------------------
MOV KAMSSN+CMCDAT R0 ; READ SYNC_ACK_SEQNO.
MOV OSYNCSN R1 ; AND OUTBOND SYNC_SEQNO.
SEQ R0 R1 ; IF PROPER SYNC_ACK THEN
JMP R146 ;
MOVC CPMOPM R0 ; UPDATE CPM_OPMODE,I.E.
RELS X0 FSYNC ; EXIT SYNC MODE
SETS X0 FOACTIV ; ENTER OUTPUT ACTIVE
JMP S5 SSYNTIM ; "STOP_SYNC_TIMER"
MOVC CPMNAME R0 ; 'ENSURE SERVICE OF NM_QUEUE'
MON SENDSIGNAL ; "SEND_SIGNAL"
MOVC CMDOP R0 ; COMD:=OPEN MSS
JMP R162 ; GOTO SEND MSS-COMMAND
R146: ; ENDIF
JMP R190 ; GOTO DONE:
;----------------------------------------------------------------------
;
R150: ; 5.INBOUND SYNCMESSAGE
;----------------------------
MOVC CPMOPM R0 ; READ CPM_OPMODE
SBN X0 FACTIV ; IF CPM_OPMODE=ACTIVE THEN
JMP R158 ; UPDATE CPM_OPMODE,I.E.
RELS X0 FHUNT ; EXIT HUNT MODE
SETS X0 FIACTIV ; INPUT ACTIVE
MOVC SIPMAILBOX R0 ; BEGIN MAIL SYNC_MSG_ACK
MON REGION,RENTER ; "REGION_ENTER"
JMPI & S4 URE004 ;E X0:ERROR,REPORT ERROR
; X1:SIPMAILBOX ENTERED
MOVC MBXSSN R1 ; GET SYNC_ACK_INDEX
MOV SMSGSN+CMCDAT R2 ; READ SYNC_SEQNO
MON REGION,RPUT ; "REGION_PUT"(SYNC_ACK)
JMPI & S4 URE004 ;E X0:ERROR,REPORT ERROR
; X1:SYNC_ACK MAILED
MON REGION,RLEAVE ; "REGION_LEAVE"
JMPI & S4 URE004 ;E X0:ERROR,REPORT ERROR
; X1:REGION LEFT
R158: ; ENDIF
JMP R190 ; GOTO DONE:
;----------------------------------------------------------------------
;
R160: ; 6.MESSAGE_SERVICE CONTROL:
;----------------------------
; A.MSS COMMAND.
MOV CMSSPARM R0 ; GET COMMAND
SEQP R0 CMDOP ;
SEQ R0 CMDCL ; IF (ILLEGAL COMD) THEN
JMP R190 ; IGNORE IT
R162: ; ELSE
MOVC MPMC R4 ; GET PREASSEMBLED PMTCB
MOV R0 MPPWD2.X4 ; AND LOAD COMMAND
MOVC MOPCWAIT R0 ;
MOVC MMTYPPSEUDO R1 ;
MON MTCB,CREATEMTCB ; "GET_PSEUDO_MTCB"
JMPI & S4 URE002 ;E
MON MIO,MPUTMTCB ; "WRITE_MTCB"
JMPI & S4 URE001 ;E
MOVC QDMC R4 ; DEST QUEUE MC
MON MIO,MENQQE ; "ENQUEUE_MTCB"
JMPI & S4 URE001 ;E
MON MTCB,RELEASEMTCB ; "RELEASE_MTCB"
JMPI & S4 URE002 ;E
JMP R190 ; GOTO DONE:
; ENDIF
;
R165: ; B. MSS REPORT
; IGNORE IT
JMP R190 ; GOTO DONE:
;----------------------------------------------------------------------
;
R170: ; 7.NICS_TARE CONTROL:
;---------------------------------
MOV CNTSPARM R0 ; A. NICS-TARE COMMAND:
SEQP R0 NTLCS ; IF COMD SETUP OR CLOSE THEN
SEQ R0 NTLCO ; STATUS:=STANDBY
MODC SS-AA ; ELSE
MOVC AA R2 ; STATUS:=OPEN
; ENDIF
R172: ; MAIL NICS-TARE STATUS:
MOVC SIPMAILBOX R0 ;
MON REGION,RENTER ; "ENTER SIPMAILBOX"
JMPI & S4 URE004 ;E
MOVC MBXNTS R1 ; INDEX:=N/T STATUS
MON REGION,RPUT ; LOAD NEW STATUS
JMPI & S4 URE004 ;E
MON REGION,RLEAVE ; "LEAVE REGION"
JMPI & S4 URE004 ;E
JMP R190 ; GOTO DONE:
;
R175: ; B. NICS-TARE REPORT:
MOV CNTSPARM R2 ; READ REPORT STATUS
INE R2 CCOK ; IF STATUS <> OK THEN
MOVC OO R2 ; NICS-TARE STATUS=NOT SETUP
JMP R172 ; MAIL NICS-TARE STATUS:
JMP R190 ; ENDIF
;----------------------------------------------------------------------
; ENDCASE
;
R190: ; DONE:
JMPI RLR100 ; RETURN LINK
;END CPMM&C
;---------------------------------------------------------------------- ▶1a◀