|
|
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: 22470 (0x57c6)
Types: TextFile
Names: »MIOMONITOR.S«
└─⟦21011a92c⟧ Bits:30005095 8" CR80 Floppy CR80FD_0052 ( HMDIR 2 VOL: BACKUP MD: ISH.D From: HMDIR*ISH.D )
└─⟦777b1406f⟧
└─⟦this⟧ »ISH.D!MIOMONITOR.S«
LIST BEGIN MODULE
PMASK=#C413
;****************************************************************
; *
; NAME: ISH_MIO *
; NUMBER: CFIX/64/0100 *
; COPYRIGHT: CHRISTIAN ROVSING CORP. *
; HM/062281: REL. 01 VER. 01 *
; *
;****************************************************************
;-----------------------------------------------------------------------
;
; SET S2SYSS PARAMETERS
;
;-----------------------------------------------------------------------
LOC= 0 ; RESET LOCATION COUNTER
XPROGRAM= TRUE
XDATA=FALSE
NOLIST
$@**GENS.D*S2SYSS
$@**GENS.D*X2ION1
$@**GENS.D*X2GEN1
MESSAGE <:MIONAMES.N:>
$@**HMDIR*ISH*MIONAMES.N
MESSAGE <:ISHNAMES.N:>
$@**HMDIR*ISH*ISHNAMES.N
LIST
;-----------------------------------------------------------------------
;
; SET PRCGEN PARAMETERS
;
;-----------------------------------------------------------------------
XPGNAME0= <:MI:>
XPGNAME1= <:O:>
XPGNAME2= 0
XVERSION= 1
XPGTYPE= BMMONITOR
USE PROG
;----------------------------------------------------------------------
;MONITOR JUMP TABLE:
MIOPROC: ; PROCEDURE CALL
IF (LOC-MIOPROC) NE MDEQQE THEN USE 16 FI ;
JMP A100 ; DEQUEUE MDEQQE
IF (LOC-MIOPROC) NE MENQQE THEN USE 16 FI ;
JMP B100 ; ENQUEUE MENQQE
IF (LOC-MIOPROC) NE MGETMTCB THEN USE 16 FI;
JMP C100 ; GET_MTCB MGETMTCB
IF (LOC-MIOPROC) NE MPUTMTCB THEN USE 16 FI;
JMP D100 ; PUT_MTCB MPUTMTCB
IF (LOC-MIOPROC) NE MOPEN THEN USE 16 FI ;
JMP E100 ; OPEN MOPEN
IF (LOC-MIOPROC) NE MSETPOS THEN USE 16 FI ;
JMP F100 ; SETPOSITION MSETPOS
IF (LOC-MIOPROC) NE MLOAD THEN USE 16 FI ;
JMP G100 ; LOAD MLOAD
IF (LOC-MIOPROC) NE MCLOSE THEN USE 16 FI ;
JMP H100 ; CLOSE MCLOSE
OPCLIMIT:LOC-MIOPROC ;
;----------------------------------------------------------------------
MIOINIT: ;MIO MONITOR INITIALIZATION.
MON MONINIT ;
LOC,MIO,MIOSTART,0 ;
JMP 0. X4 ; RETURN TO ROOT
;----------------------------------------------------------------------
MIOSTART: ;BEGIN MIO-MONITOR.
MVP 0. X7 R1 ; GET OPCODE
ADDC 1 R7 ; PREPARE RETURN
IGE R1 OPCLIMIT ; IF OPCODE OUT-OF-RANGE THEN
JMP & S4 LUE6 ;UE UNRECV.ERROR
MOD R1 ;
JMP MIOPROC ; CASE_OF_OPCODE
;----------------------------------------------------------------------
;----------------------------------------------------------------------
; PROCEDURE "DEQUEUE_QE"(DEQQE). I:QUEUEDESCRIPTOR O:MTCBX,MSGTYPE
;
; NARRATIVE:
; A QUEUE ELEMENT (QE) IS DEQUEUED FROM THE QUEUE DESIGNATED BY THE
; QUEUE_DESCRIPTOR (QDCB),AND MAY ADDRESS BOTH A QUEUEGROUP AS A HOLE,
; OR A SPECIFIC QUEUE (QUEUE.NO) WITHIN A QUEUEGROUP.
; THE MTCB IS RETAINED (MTCB INDEX),AND RETURNED TO CALLER.
;
; THE QDCB MUST BE PROPERLY INITIALIZED PRIOR TO CALL OF "DEQQE",I.E.
; QDGN: GROUP/TERMINAL NO.
; QDQN: 0/QUEUE NO. (-1=QUEUE_GROUP AS A HOLE)
; QDEN: ENTRY NO.,0/1/N=LAST/FIRST/NO.N
; QDGN,QDQN AND QDEN ARE UNCHANGED BY "DEQQE".
; THE MTCB_USE_COUNT IS UNCHANGED (NOT DECRIMENTED).
;
; COMPLETION_CODE: 0=OK
; 1=OPERATION FAILED
; 2=ILLEGAL INPUT PARAMETER
; 3=QUEUE EMPTY
;
; CALLS TO: QACCESS,READGROUP
; QACCESS,DELETE
; QACCESS,READDESTRUCTIVE
; MTCB,RESERVE
;
; REGISTER USE: ENTRY EXIT
; R0 - MTCBX
; R1 - DESTROYED
; R2 - DESTROYED.
; R4 QDCB QDCB
; R7 LINK COMPLETION_CODE
;
; RETURNS: LINK+0:ERROR
; LINK+1:QUEUE EMPTY
; LINK+2:DONE
;----------------------------------------------------------------------
A100: ;BEGIN DEQQE
MOV R7 R2 ; SAVE LINK
MOV R4 R1 ; SAVE REF TO QDCB
MOV R4 R7 ;
ADDC QDQIO R4 ; R4=PSEUDO QIOCB
MOV X7 X4 ; LOAD GROUP NO.
MOV QDQN. X7 R0 ;
SEQ R0 QQGROUP ; IF QUEUENO.<>QQGROUP THEN
JMP A120 ;
MOVC QQRFLAG R0 ; LOAD SIMPLE READ FLAG
MOV R0 QIOCB2.X4 ;
MON QACCESS,QARDGRP ; "READGROUP"(R4=QIOCB)
JMP A150 ; X0:NONE,GOTO CHECKCAUSE:
; X1:DONE
MOV QIOCB1.X4 R0 ; READ MTCBX
MON MTCB,RESERVEMTCB ; "RESERVE_MTCB"(RO=MTCBX)
JMP A152 ; X0:ERROR,GOTO ERRORRETURN:
MOV R1 R7 ; X1:DONE (R0=MTCBX)
MOV X7 X4 ; LOAD GROUP_NO.
MOV QIOCB5.X4 R1 ; READ QUEUE_NO. GOT
MOV R1 QIOCB2.X4 ; LOAD QUEUE_NO.
MOVC 1 R1 ; FIRST ELEMENT
MOV R1 QIOCB3.X4 ; LOAD ENTRY_NO.
MON QACCESS,QADELETE ; "DELETE_QE"(GN,QN,EN)
JMP A152 ; X0:ERROR,GOTO ERRORRETURN:
JMP A130 ; X1:DONE
A120: ; ELSE
MOV QDQN. X7 R1 ; READ AND LOAD QUEUE_NO.
MOV R1 QIOCB2.X4 ;
MOV QDEN. X7 R1 ; READ AND LOAD ENTRY_NO.
MOV R1 QIOCB3.X4 ;
MON QACCESS,QARDDST ; "READDESTRUCTIVE"(GN,QN,EN)
JMP A150 ; X0:NONE,GOTO CHECKCAUSE:
; X1:DONE
MOV QIOCB1.X4 R0 ; READ MTCB INDEX
A130: ; ENDIF
ADDC -QDQIO R4 ; RESET REF.TO QDCB
MOV R2 R7 ; RETRIEVE LINK
JMP 2. X7 ; RETURN LINK+2
A150: ; CHECKCAUSE:
INEP R7 QCCEMPTY ; IF CAUSE NOT Q_EMPTY THEN
MOV R2 R4 ;
JMP 0. X4 ; ERROR,RETURN LINK+0
A152: ; ELSE
MOV R2 R7 ;
ADDC -QDQIO R4 ; RESET REF.TO QDCB
JMP 1. X7 ; RETURN LINK+1 (EMPTY)
; ENDIF
;END DEQQE
;----------------------------------------------------------------------
; PROCEDURE "ENQUEUE-QE"(ENQQE).
;
; NARRATIVE:
; AN MTCB IS ENQUEUED IN THE QUEUE DESIGNATED BY QDCB.
;
; CALLS TO: QACCESS,WRITEELEMENT
;
; REGISTER USE: ENTRY EXIT
; R0 MTCB INDEX MTCB INDEX
; R1 - DESTROYED
; R2 - DESTROYED
; R4 QDCB REF. QDCB REF.
; R7 LINK LINK/CC
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
;
;----------------------------------------------------------------------
B100: ;BEGIN ENQQE
MOV R7 R2 ; SAVE LINK
MOV R4 R7 ;
ADDC QDQIO R4 ; GET REF.TO PSEUDO QIOCB
MOV R0 QIOCB4.X4 ; LOAD MTCB INDEX
MOV QDTN. X7 R1 ; LOAD GROUP NO.
MOV R1 QIOCB1.X4 ;
MOV QDQN. X7 R1 ; LOAD QUEUE NO.
MOV R1 QIOCB2.X4 ;
MOV QDEN. X7 R1 ; LOAD ENTRY NO.
MOV R1 QIOCB3.X4 ;
MOVC QOPCWAIT R1 ;
MOV R1 QIOCB5.X4 ;
MON QACCESS,QAWRITE ; "WRITE_QE"(QIOCB)
JMP B110 ; X0:ERROR,GOTO ERRORRETURN:
MOV R2 R7 ; X1:DONE,RESET LINK
ADDC -QDQIO R4 ; RESET REF.TO QDCB
JMP 1. X7 ; RETURN LINK+1
B110: ;ERRORRETURN:
MOV R2 R4 ;
JMP 0. X4 ; RETURN LINK+0 (R7=CC)
;END ENQQE.
;----------------------------------------------------------------------
;----------------------------------------------------------------------
; PROCEDURE "GET_MTCB"(GETMTCB).
;
; NARRATIVE:
; THE MTCB DESIGNATED BY MTCB INEDX (R0),IS READ AND LOADED TO THE
; MTCB PARAMETER CONTROL BLOCK (MPCB) SUPPLIED BY CALLER.
; THE MTCBTYPE IS RETAINED,AND RETURNED TO CALLER.
;
; CALLS TO: MTCB,READMTCB
;
; REGISTER USE: ENTRY EXIT
; R0 MTCB INDEX MTCB INDEX
; R1 - MTCB TYPE
; R4 MPCB MPCB
; R7 LINK LINK/CC
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
;----------------------------------------------------------------------
C100: ;BEGIN GETMTCB
MOV R0 MPWORK.X4 ; LOAD MTCB INDEX
MOD R4 ;
MOVC MPWORK R0 ; AND REF.TO IT
MOD R4 ; LOAD REF.TO PARM BLOCK
MOVC MPMBE0 R1 ;
MOV R7 R4 ; SAVE LINK
MON MTCB,READMTCB ; "READMTCB"(X0=MTCBX,R4=MPCB)
JMP 0. X4 ; X0:ERROR,RETURN LINK+0
MOV R4 R7 ; X1:DONE,RESET LINK
MOD R0 ;
MOVC -MPWORK R4 ; RESET REF.TO MPCB
MOV MPMBE0.X4 R1 ; RETAIN MTCB TYPE
MOV MPWORK.X4 R0 ; RETRIEVE MTCB INDEX
JMP 1. X7 ; RETURN LINK+1
;END GETMTCB.
;----------------------------------------------------------------------
; PROCEDURE "PUT_MTCB"(PUTMTCB).
;
; NARRATIVE:
; THE MTCB DESIGNATED BY MTCB INDEX (R0) IS LOADED WITH DATA HELD
; IN THE MTCB PARAMETER CONTROL BLOCK (MPCB) SUPPLIED BY CALLER,AND
; IN ACCORDANCE WITH OPERATION CODE (OPCODE)
;
; CALLS TO: MTCB,WRITEMTCB
;
; REGISTER USE: ENTRY EXIT
; R0 MTCB INDEX MTCB INDEX
; R1 - DESTROYED
; R2 - DESTROYED
; R4 MPCB MPCB
; R7 LINK LINK/CC
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
;
;----------------------------------------------------------------------
D100: ;BEGIN PUTMTCB
MOV R0 MPWORK.X4 ; LOAD MTCB INDEX
MOD R4 ;
MOVC MPWORK R0 ; AND REF.TO IT
MOD R4 ; LOAD REF.TO PARM BLOCK
MOVC MPMBE0 R1 ;
MOVC MUPDALL R2 ; OPCODE:=UPDATE ALL
MOV R7 R4 ; SAVE LINK
MON MTCB,WRITEMTCB ; "WRITEMTCB"(X0=MTCBX,R4=MPCB)
JMP 0. X4 ; X0:ERROR,RETURN LINK+0
MOV R4 R7 ; X1:DONE,RESET LINK
MOD R0 ;
MOVC -MPWORK R4 ; RESET REF.TO MPCB
MOV MPWORK.X4 R0 ; RETRIEVE MTCB INDEX
JMP 1. X7 ; RETURN LINK+1
;END PUTMTCB.
;----------------------------------------------------------------------
;----------------------------------------------------------------------
; PROCEDURE "OPEN".
;
; NARRATIVE:
; THE MFDCB (REFERENCED BY R4) IS INITIALIZED,AND THE MTCB-FILE IS
; OPENED WHICH MEANS,THAT FILE DATA MAY BE READ AND LOADED TO THE
; MFDCB DATABUFFER.
; THE LOGICAL FILE POSITION IS BY DEFAULT SET TO ZERO,I.E. START OF
; FILE.(PLEASE REF. TO SETPOSITION NARRATIVE).
;
; REGISTER USE: ENTRY EXIT
; R0 MTCB INDEX DESTROYED
; R1 - DESTROYED
; R2 - FILETYPE
; R3 - DESTROYED
; R4 MFDCB MFDCB
; R7 - DESTROYED
;
; CALL TO: MTCB,GETFILE
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
;----------------------------------------------------------------------
E100: ;BEGIN OPEN.
MOV R7 MFDLNK.X4 ; SAVE LINK
IBN X4 MFDBOPEN ; IF MFDCB ALLREADY OPEN THEN
JMP LER1 ;E GOTO ERRORRETURN:
MOV R0 MFDMBX.X4 ; LOAD MTCB INDEX
MOV X4 R1 ;
XTR R1 MSIZE ; READ MFDCB SIZECODE
IGE R1 MAXCODE+1 ; IF INVALID SIZECODE THEN
JMP LER3 ;E GOTO ERRORRETURN:
MOVC MINBYTES R2 ; CALCULATE BUFFERSIZE I.E.
MOD R1 ;
SLL R2 0 ; MINBYTES<SIZECODE
MOV R2 XFADBC+MFDFAD.X4 ; LOAD BUFFER SIZE TO FILE-
CLR 1+XFADBC+MFDFAD.X4 ; ADDRESS (MFDFAD).
MOD R4 ;
MOVC MFDBLE R7 ; BEGIN INIT MFDBLE
MOV R2 XBLEBS.X7 ; XBLEBS
MOD R4 ;
MOVC MFDDAT R2 ;
MOV R2 XBLEBA.X7 ; XBLEBA
MOVC XBTYLL X7 ; XBLETY
CLR XBLELK.X7 ; XBLELK
; END
CLR MFDPOS.X4 ; PRESET MFDPOS TO ZERO
CLR MFDCNT.X4 ; PRESET MFDCNT(NO DATA)
CLR 1+MFDCNT.X4 ;
MOD R4 ;
MOVC MFDMBX R0 ; LOAD REF.TO MTCB INDEX
MOD R4 ; AND
MOVC MFDPFS R1 ; PHYSICAL START (MFDPFS)
MOV R4 R3 ; PUSH R4
MON MTCB,GETFILMTCB ; "GETFILE"(X0,X1)
JMP & S4 LUE1 ;UE X0:UNRECV. ERROR:
; X1:DONE,R2=FILETYPE,R4=FD
XCH R3 R4 ; RESET REF.TO MFDCB
MOV R3 MFDFD. X4 ; STORE FD
XTR X4 MFDBSTATUS ; CLEAR MFDCB STATUS
SETS X4 MFDBOPEN ; FLAG MFDCB OPENED
JMP LRET ; GOTO RETURN:
;END PROCEDURE "OPEN".
;----------------------------------------------------------------------
; PROCEDURE "SETPOSITION".
;
; NARRATIVE:
; THE LOGICAL FILEPOSITION (MFDPOS) IS UPDATED,AND THE MFDCB DATA-
; BUFFER LOGICAL DISCARDED,I.E. MFDCB FLAGGED EMPTY AND MFDCNT
; CLEARED.
;
; REGISTER USE: ENTRY EXIT
; R0 POSITION DESTROYED
; R1 - DESTROYED
; R4 MFDCB MFDCB
;----------------------------------------------------------------------
F100: ;BEGIN SETPOSITION.
MOV R4 MFDLNK.X4 ; SAVE LINK
IBZ X4 MFDBOPEN ; IF MFDCB NOT OPEN THEN
JMP LER2 ; GOTO ERRORRETURN:
MOV R0 MFDPOS.X4 ; LOAD NEW POSITION
CLR MFDCNT.X4 ; PRESET MFDCNT (NO DATA)
CLR 1+MFDCNT.X4 ;
RELS X4 MFDBLOAD ; FLAG NOT-LOADED
JMP LRET ; GOTO RETURN
;END SETPOSITION
;----------------------------------------------------------------------
; PROCEDURE "LOAD".
;
; NARRATIVE:
; THE MFDCB DATABUFFER IS LOADED WITH DATA READ FROM THE FILE CON-
; NECTED,AND INDEXED BY FILEPOSITION (MFDPOS).
;
; REGISTER USE: ENTRY EXIT
; R0 - DESTROYED
; R1 - DESTROYED
; R2 - DESTROYED
; R3 - DESTROYED
; R4 MFDCB MFDCB
; R7 - DESTROYED
;
; CALL TO: IO,READBYTES
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
;----------------------------------------------------------------------
G100: ;BEGIN LOAD.
MOV R7 MFDLNK.X4 ; SAVE LINK
IBN X4 MFDBLOAD ; IF MFDCB ALLREADY LOADED THEN
JMP LRET ; GOTO RETURN:
IBZ X4 MFDBOPEN ; IF MFDCB NOT OPEN THEN
JMP LER2 ; GOTO ERRORRETURN:
MOV MFDPOS.X4 R0 ; CALCULATE FILEADDRESS,
MOVC 0 R1 ;
MOVL MFDPFS.X4 R23 ;
ADD R0 R2 ; FILEADDRESS:=
ADDU R1 R3 ; MFDPFS+MFDPOS
MOVL R23 MFDFAD.X4 ;
MOD R4 ;
MOVC MFDFAD R1 ; R1:=REF.MFDFAD
MOD R4 ;
MOVC MFDBLE R2 ; R2:=REF.MFDBLE
MOV R4 R0 ; PUSH R4
MOV MFDFD. X4 R4 ; R4:=FILEDESCRIPTOR
MON IO,READBYTES ; "READBYTES"
JMP & G110 ; X0:NOT DONE,GOTO CHECKCAUSE:
MOV R0 R4 ; X1:DONE,RESTORE R4
SETS X4 MFDBLOAD ; FLAG MFDCB LOADED
JMP LRET ; GOTO RETURN:
G110: ; CHECKCAUSE:
SEQ R7 XEOF ; IF CC<>EOF THEN
JMP & S4 LUE5 ;UE UNRECV.ERROR
MOV R0 R4 ; ELSE
JMP LER0 ; GOTO ENDOFFILE
; ENDIF
;END LOAD
;----------------------------------------------------------------------
; PROCEDURE "CLOSE".
;
; NARRATIVE:
; THE CONNECTED FILE IS RELEASED,AND THE MFDCB CLOSED.
;
; REGISTER USE: ENTRY EXIT
; R0 - MTCB INDEX
; R1 - DESTROYED
; R4 MFDCB MFDCB
; R7 - DESTROYED
;
; CALL TO: MTCB,RESERVE/RELEASE
; MTCB,RELEASEFILE
;
; RETURNS: LINK+0:ERROR
; LINK+1:DONE
; MTCB,RELEASE
;----------------------------------------------------------------------
H100: ;BEGIN CLOSE.
MOV R7 MFDLNK.X4 ; SAVE LINK
IBZ X4 MFDBOPEN ; IF MFDCB NOT OPEN THEN
JMP LER2 ; GOTO ERRORRETURN:
RELS X4 MFDBOPEN ; ELSE CLOSE
MOV MFDMBX.X4 R0 ; GET MTCBINDEX
MON MTCB,RESERVEMTCB ; "RESERVE_MTCB"
JMP & S4 LUE2 ;UE X0:UNRECV.ERROR
MOD R4 ; X1:DONE
MOVC MFDMBX R0 ; R0=REF. MTCBX
MOV R4 R1 ; PUSH R4
MOV MFDFD. X4 R4 ; R4=FD
MON MTCB,RELFILMTCB ; "RELEASEFILE"
JMP & S4 LUE3 ;UE X0:UNRECV.ERROR
MOV R1 R4 ; X1:DONE,RESTORE R4
MOV X0 R0 ; R0=MTCB INDEX
MON MTCB,RELEASEMTCB ; "RELEASEMTCB"
JMP & S4 LUE4 ;UE X0:UNRECV.ERROR
; X1: DONE
JMP LRET ; GOTO RETURN
;END CLOSE
;----------------------------------------------------------------------
LRET: ;RETURN:
MOV MFDLNK.X4 R7 ; RETREIVE LINK
JMP 1. X7 ; RETURN LINK+1
;
;ERRORRETURNS:
LER3: MODC 1 ; INVALID SIZECODE IN MFDCB
LER2: MODC 1 ; MFDCB NOT OPEN
LER1: MODC 1 ; MFDCB OPEN
LER0: MODC 0 ; END OF FILE
MOVC 0 R7 ; GET ERRORCODE
JMPI MFDLNK.X4 ; RETURN LINK
;
;UNRECOVERABLE ERRORS:
LUE6: MODC 1 ; INVALID OPCODE
LUE5: MODC 1 ; READBYTES
LUE4: MODC 1 ; RELEASE MTCB
LUE3: MODC 1 ; RELEASE FILE
LUE2: MODC 1 ; RESERVE MTCB
LUE1: MODC 1 ; GETFILE
MOVC 0 R0 ; GET ERRORCODE
MOV R4 R1 ; AND ERROR LOCATION
MON TERMINATE ; "TERMINATE"(ERRCODE,ERRLOC)
;END MIO MONITOR.
;----------------------------------------------------------------------
;-----------------------------------------------------------------------
;
; SET PRCGEN PARAMETERS
;
;-----------------------------------------------------------------------
XSTART= MIOINIT
NOLIST
$@**GENS.D*X2ION2
$@**GENS.D*X2GEN2
LIST
;-----------------------------------------------------------------------
;
; END OF MIO SUBMODULE
;
;-----------------------------------------------------------------------
END