|
|
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: 7916 (0x1eec)
Types: TextFile
Names: »INNMSG«
└─⟦21011a92c⟧ Bits:30005095 8" CR80 Floppy CR80FD_0052 ( HMDIR 2 VOL: BACKUP MD: ISH.D From: HMDIR*ISH.D )
└─⟦777b1406f⟧
└─⟦this⟧ »ISH.D!INNMSG«
;----------------------------------------------------------------------
; PROCEDURE "IN_NARRATIVE_MESSAGE"(INNMSG).
;
; NARRATIVE:
; THE NARRATIVE MESSAGE,DESIGNATED BY CURRENT MTCB INDEX(CMTCBX) IS
; INSPECTED,TO RETAIN DTG,MSGID,RMASK AND CHAN.NO,WHICH ARE STORED IN
; CDTG,CMSGID,CRMASK AND CCHNO RESPECTIVELY.
;
; REGISTER USE: ENTRY EXIT
; R5 LINK DESTROYED
; R0-R7 - DESTROYED
;
; CALS TO: MIO,MOPEN
; MIO,MSETPOS
; MIO,MLOAD
; MIO,MCLOSE
;
; RETURNS: LINK+0:DONE
; UREXXX:ERROR
;
; INPUT: CMTCBX
;
; OUTPUT: CMSGID
; CCHNO
; CDTG
; CRMASK
; CAPREC
;
; WORK: NMMFDCB
; CALISTL
; CALISTR
;----------------------------------------------------------------------
INNMSG: ;BEGIN INNMSG.
MOV R5 RLL100 ; SAVE LINK
MOV CMTCBX R0 ; GET MTCB INDEX
MOVC NMMFDCB R4 ; GET REF.TO MFDCB
MON MIO,MOPEN ; "OPEN"(R0=MTCBX,R4=MFDCB)
JMPI & S4 URE001 ;E X0:MFDCB ERROR,REPORT ERROR
; X1:MFDCB OPENED
; (NOTE:POSITION BY DEFAULT=0
; I.E. START OF BIN HEADER)
MON MIO,MLOAD ; "LOADBINHEAD"(R4=MFDCB)
JMPI & S4 URE001 ;E X0:ERROR,REPORT ERROR
MOD R4 ; X1:DONE (MFDDAT LOADED)
MOVC MFDDAT R5 ; GET REF.TO MFDDAT.MFDCB
MOV BHAPREC.X5 R0 ; GET ACTION PREC.
XTR R0 8 ; AND STORE IT
MOV R0 CPREC ;
MOV BHALST.X5 R0 ; READ AND STORE ADDRESS-
MOV R0 CALISTR ; LIST-REFERENCE.
MOV BHLGTH.X5 R0 ; READ MESSAGE LENGTH
SUB CALISTR R0 ; AND CALCULATE ALIST LENGTH
SRL R0 1 ; IN WORDS
MOV R0 CALISTL ;
MOVL BHRTIM0.X5 R01 ; READ DTG AND STORE IN
MODN R7 ; CURRENT DTG (CDTG).
MOVL R01 CDTG. X7 ;
MOVL BHRMSK0.X5 R01 ; READ ROUTING MASK AND
MODN R7 ; STORE IT IN CURRENT RMASK
MOVL R01 CRMASK.X7 ;
MOV BHMIDR.X5 R0 ; READ OFFSET TO MSGID,AND
MON MIO,MSETPOS ; "SETPOSITION"(MSGID)
JMPI & S4 URE001 ;E X0:ERROR,REPORT ERROR
; X1:DONE,POS:=MSGID
MON MIO,MLOAD ; "LOADMSGID"(R4=MFDCB)
JMPI & S4 URE001 ;E X0:ERROR,REPORT ERROR
; X1:DONE,MFDDAT LOADED
MOVC CMSGID R6 ; GET REF.TO MSGID STORAGE
MODC MSGIDL ;
MOVM X5 X6 ; STORE MSGID
;
L110: ; FOR ALL ALIST SEGMENTS DO
MOV CALISTR R0 ; GET SEGMENT STARTADDRESS
MON MIO,MSETPOS ; "SETPOSITION"(R0=START)
JMPI & S4 URE001 ;E X0:ERROR,REPORT ERROR
; X1:DONE
MON MIO,MLOAD ; "LOAD ADDRESSLIST"
JMPI & S4 URE001 ; X0:ERROR,REPORT ERROR
MOVC 0 R3 ; X1:DONE,PRESET INDEX
L120: ; FOR ANO'S IN CURRENT SEGM DO
MOD CALISTL ;
SLO R3 0 ; IF ADDRESSLIST DONE THEN
JMP L180 ; GOTO UNKNOWN_CHNO:
MOD R3 ; ELSE
MOV MFDDAT.X4 R0 ; GET NEXT ANO
; ENDIF
JMP S5 GETCHNO ; "GETCHNO"(R0=ANO)
JMP & L130 ; X0:NOT RECOGNIZED,CONTINUE
JMP L190 ; X1:R0=CHNO,GOTO LOAD_CHNO:
L130: ;
ILOP R3 SEGMWS-1 ;
ADDC 1 R3 ; INDEX=INDEX+1
JMP L120 ; END FOR ALL ANO'S
MOV CALISTL R0 ;
ADDC -SEGMWS R0 ; UPDATE REMAIN ALIST LENGTH
MOV R0 CALISTL ;
MOV CALISTR R0 ; CALCULATE START OF NEXT SEGM
ADDC SEGMBS R0 ;
MOV R0 CALISTR ; AND STORE IT AS CURR. SEGM.
JMP L110 ; END FOR ALL ALIST SEGMENTS
;
L180: ;UNKNOWN_CHNO:
MOVC FALSE R0 ;
L190: ;LOAD_CHNO:
MOV R0 CCHNO ;
MON MIO,MCLOSE ; "CLOSE"(R4=MFDCB)
JMPI & S4 URE001 ;E X0:ERROR,REPORT ERROR
; X1:DONE,MFDCB CLOSED
JMPI RLL100 ; RETURN LINK+0
;END INNMSG.
;----------------------------------------------------------------------
; LOCAL SUBROUTINE "GET_CHANNEL_NO" (GETCHNO).
;
; NARRATIVE:
; AN ANO (R0) IS SEARCH IN 'ANOTABLE'.IF FOUND THE CORRESPONDING
; CHANNELNO (AS DEFINED BY ANOTABLE) IS READ,AND RETURN MADE TO LINK+1
; ELSE RETURN TO LINK+0.
;
; REGISTER USE: ENTRY EXIT
; R0 ANO CHNO
; R1,R2 - DESTROYED
; R5 LINK KEPT
; R7 - DESTROYED
;
; RETURNS: LINK+0:NOT FOUND
; LINK+1:FOUND
;----------------------------------------------------------------------
ANOTABLE:LOC=0 ; ANO=>CHNO TABLE
SIPMID<8+203 ,CH3 ;
SIPMID<8+204 ,CH4 ;
SIPMID<8+205 ,CH5 ;
SIPMID<8+206 ,CH6 ;
XMEDEID<8+3 ,CH0 ;
XMEDEID<8+4 ,CH1 ;
ANOTBL:=LOC/2 ;
XMEDEID<8+5 ;
XMEDEID<8+197,CH2 ;
LOC=ANOTABLE+LOC ;
;----------------------------------------------------------------------
GETCHNO: ;BEGIN GETCHNO
MOVC ANOTABLE R7 ; GET REF.TO TABLE
MOVC ANOTBL R1 ; AND LENGTH
XTR R0 13 ;
L210: ; UNTIL TABLE DONE DO
MVP 0. X7 R2 ;
IEQP R0 R2 ; IF ANO=ANO.ENTRY THEN
MVP 1. X7 R0 ; R0:=CHNO.ENTRY
JMP 1. X5 ; RETURN LINK+1
ADDC 2 R7 ; ENDIF
SOB R1 L210 ; ENDUNTIL
MOV R0 R1 ;
SRL R0 8 ; BEGIN SPECIAL RANGE SEARCH
INE R0 XMEDEID ; IF (NOT 'X'-ANO) OR
JMP 0. X5 ;
MVP 1. X7 R2 ;
SHSP R1 R2 ; (OUT OF RANGE) THEN
MVP 0. X7 R0 ;
SHS R1 R0 ; RETURN LINK+0
JMP 0. X5 ; ELSE
MVP 2. X7 R0 ; GET CHANNEL NO
JMP 1. X5 ; RETURN LINK+1
; ENDIF
; END
;END GETCHNO
;---------------------------------------------------------------------- ▶1a◀