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