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

⟦8d22e7607⟧ TextFile

    Length: 22470 (0x57c6)
    Types: TextFile
    Names: »MIOMONITOR.S«

Derivation

└─⟦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« 

TextFile

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