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

⟦7b3ceaf16⟧ TextFile

    Length: 3072 (0xc00)
    Types: TextFile
    Names: »REGS«

Derivation

└─⟦5ca485322⟧ Bits:30005483 8" CR80 Floppy CR80FD_0201 ( Backup SL Disk-error 2u )
    └─⟦46ea90735⟧ 
        └─ ⟦this⟧ »JAS.REGS« 

TextFile

LIST
; REGISTER DUMP PROCESS;
; THE CALLING PROCESS MUST HAVE THE NAME <:REGISS:>
; ASSEMBLED INTO ITS BASE AREA, AND THE ADDRESS OF THE
; NAME MUST HAVE BEEN PUT INTO LOCATION: WORK-C, BEFORE
; THE REGISTER DUMP PROCEDURE IS CALLED.
BEGIN   MODULE
NOLIST
$SMSNAX
LIST    XPD:=UTILITYLENGTH  NOLIST
$SMSXP1
LIST
BEGIN   USE BASE
ENTRY   L0
EXTERNAL NAME,C,WAITEVENT,SENDANSWER,WAITDELAY,CURIN
EXTERNAL CBASE,INCHAR,SENDMESSAGE,WAITANSER,WORK
SAVE0:=  #3E
SAVE11:= #44
SAVE12:= #45
SAVE13:= #46
SAVE14:= #47
PROGRAM:=#17
DEVICE:= #53
CR=      13
LF=      10
        USE   PROG

REGP:                               ; REGISTER DUMP PROCEDURE:
        MOV          R7  SAVE12-C   ;  SAVE(LINK);
        MOVC  SAVE12-C          R7  ;
        STC   6                     ;   SAVE(R0-R6);
        MOV   PROGRAM-C         R0  ;   PROGRAM.CUR
        ADD   SAVE12-C          R0  ;       +LINK
        MOV          R0  SAVE13-C   ;           =>SAVE13.CUR;
        MOV   CBASE-C           R0  ;   BASE.CUR
        MOV          R0  SAVE14-C   ;       =>SAVE14.CUR;
        MOV   WORK              R3  ;   SAVE(0.WORK);
        MOV   WORK+1            R4  ;
        MOV          R0  WORK       ;   BASE.CUR=>0.WORK;
        MOV   WORK-1            R0  ;   0.WORK-1=>NAME;
        MOVC  WORK              R1  ;   WORK=>MESS;
        MON   SENDMESSAGE           ;   SENDMESSAGE;
        MON   WAITANSWER            ;   WAITANSWER;
        MOV          R3  WORK       ;   RESTORE(0.WORK);
        MOV          R4  WORK+1     ;
        MOVC  SAVE0-C           R7  ;
        UNS   6                     ;   RESTORE(R0-R6);
        MOVC  WORK              R7  ;   WORK=>R7;
        JMPI             SAVE12-C   ;   RETURN(REGISTER DUMP);

L000:                               ; NEW DEVICE:
        MON   SENDANSWER            ;   SENDANSWER TO OC;
L0:                                 ; INIT:
        MOVC  REGP              R0  ;   RE.REGISTERS
        ADD   PROGRAM-C         R0  ;       +PROGRAM.CUR
        MODN  CBASE-C               ;
        MOV          R0  #76        ;           =>0.#85;
        MOVC  <:RE:>            R0  ;   PUT NAME INTO CUR PROCESS;
        MOVC  <:GI:>            R1  ;
        MOVC  <:SS:>            R2  ;
        MOV          R0  NAME-C     ;
        MOV          R1  NAME-C+1   ;
        MOV          R2  NAME-C+2   ;
        MOV   CURIN-C           R4  ;
L00:                                ; EMPTY SHARE:
        MON   INCHAR                ;   INCHAR;
        INE          R3  LF         ;   IF CHAR<>LF THEN
        JMP              L00        ;     GOTO EMPTY SHARE;
        MON   INCHAR                ;   GET DEVICE NR;
        ADDC -<:0:>             R3  ;
        MOV          R3  DEVICE-C   ;

L1:                                 ; NEXT:
        MON   WAITEVENT             ;   WAITEVENT;
        TRP   0                     ;     ANSWER: IMPOSSIBLE;
        JOZ          X7  L000       ;   IF 0.MESS=0 THEN
                                    ;     GOTO NEW DEVICE;
        MOV          R2  SAVE0-C    ;   SAVE(EVENT);
        MOVC  10                R0  ;   10=>COUNT;
        MOV          R0  1.     X7  ;
                                    ;
L2:                                 ; GETVALUE:
        MOD          X7             ;   BASE.PROCESS
        MODN  CBASE-C               ;       -BASE.CUR
        MODN  1.     X7             ;            -COUNT+11
        MOV   SAVE0-C+10        R4  ;     .SAVE15=>WORD;
        JMP          S5  P1         ;   OUTPUT WORD;
        DEC              1.     X7  ;   DECR(COUNT);
        SOZ              1.     X7  ;   IF COUNT<>0 THEN
        JMP              L2         ;     GOTO GET VALUE;
        MOVC  WORK              R1  ;   WORK=>ANSWER;
        MOV   SAVE0-C           R2  ;   RESTORE(EVENT);
        MON   SENDANSWER            ;   SENDANSWER;
        MOVC  CR                R3  ;   OUTPUT: CR,LF,FILLERS;
        JMP          S6  P0         ;
        MOVC  LF                R3  ;
        JMP          S6  P0         ;
        MOVC  6                 R1  ;
        MOVC  0                 R3  ;
L3:     JMP          S6  P0         ;
        SOB          R1  L3         ;
        JMP              L1         ;   GOTO NEXT;

P0:                                 ; OUTCHAR:
        MOV   DEVICE-C          R7  ;   DEVICE.CUR=>DEVICE;
        SIO          R0         R7  ;   SENSE(STATUS,DEVICE);
        SBZ          R0  9          ;   IF TERMINAL NOTREADY OR
        IBZ          R0  11         ;   IF NOT READY FOR OUTPUT THEN
        JMP              P0         ;     GOTO OUTCHAR;
        WIO          R3         R7  ;   WRITE(CHAR,DEVICE);
        JMP              0.     X6  ;   RETURN;

P1:                                 ; HEXOUT:
        MOVC  32                R3  ;   OUTCHAR(SP);
        JMP          S6  P0         ;
        MOVC  4                 R2  ;   4=>COUNT;
L4:                                 ; CALCULATE CHAR:
        SLC          R4  4          ;   WORD(15:4)=>CHAR;
        MOV          R4         R3  ;   WORD=>CHAR;
        XTR          R3  4          ;
        IHS          R3  10         ;   IF CHAR>=10 THEN
        ADDC  <:A:>-<:0:>-10    R3  ;     CHAR-<:A:>-<:0:>-10=>CHAR;
        ADDC  <:0:>             R3  ;   CHAR+<:0:>=>CHAR;
        JMP          S6  P0         ;   OUTPUT CHAR;
        SOB          R2  L4         ;   IF DECR(COUNT)<>0 THEN
        MOVC  WORK              R7  ;
                                    ;     GOTO CALCULATE CHAR;
        JMP              0.     X5  ;   RETURN(HEXOUT);
END
XPRPC=  L0
XREFS=  20
XBUFS=  2
NOLIST
$SMSXP2
LIST
END

«eof»