DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦15ea44914⟧ TextFile

    Length: 11414 (0x2c96)
    Types: TextFile
    Names: »CPMMC«

Derivation

└─⟦80dc9b589⟧ Bits:30005096 8" CR80 Floppy CR80FD_0053 ( HMDIR 6 VOL: BACKUP MD: CPM.D From: HMDIR*CPM.D )
    └─⟦08785f861⟧ 
        └─ ⟦this⟧ »CPM.D!CPMMC« 

TextFile

;----------------------------------------------------------------------
; 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◀