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

⟦cb884a72b⟧ TextFile

    Length: 6400 (0x1900)
    Types: TextFile
    Names: »AOUT«

Derivation

└─⟦dbca894e8⟧ Bits:30005524 8" CR80 Floppy CR80FD_0189 ( CR/D/0435 SYS-BOOT SYS-GEN modules NB: Block 12 (Backup) is bad )
    └─⟦309782b6a⟧ 
        └─ ⟦this⟧ »SL.AOUT« 
└─⟦548cf593d⟧ Bits:30005189 8" CR80 Floppy CR80FD_0186 ( SYSTEM BOOT, GSB AOUT, MP, OC, FLOPPY BACKUP-DISK Start 26F Base 14E2 )
    └─⟦daba3b0d5⟧ 
        └─ ⟦this⟧ »JAS.AOUT« 

TextFile

LIST
;----------------------------------------------------------------------
;
; ASSEMBLER-OUTPUT-EDITOR FOR SLOW PRINTERS
;
; CALLS THE DRIVER, SPECIFIED BY DNAME (BASERELATIVE ADDRESS #0058)
;
;----------------------------------------------------------------------
BEGIN MODULE
GLOBAL WORK
NOLIST $S8MXGL
       $S8MNAX
LIST XPD:= DRIVERLENGTH NOLIST
       $S8MXD1
LIST
BEGIN   USE BASE
ENTRY   ASSOUT

TRANSFEREVENT=   #0012
ENDPROGRAM=      #0041
NEXTOPERATION=   #0043
RETURNANSWER=    #0044
GETADDRESS=      #0047
GETBYTE=         #0048
BMILLEGAL=       #0008

CUREVENT=        #003A

FF=              #000C

SAVE1:           0

ANSWER:          0
CCOUNT:          0
CADR:            0
ACOUNT:          0
AEVENT:          0
DNAME:           <:MP:>,0,0,0,0
LINE:            0
LINE1:           0,REPEAT 64

USE PROG

RAU:             <:AU:>
R00:             <:00:>

NAM1:            <:AO:>
NAM2:            <:UT:>
LINEEND:         LINE<1 + 132
;###
NEWBYTE:                            ; NEWBYTE;
        MOV          R0  SAVE1      ;   SAVE(R0);
        MOV   CADR              R6  ;   0.CADR => BYTEADR;
        MOV   CCOUNT            R2  ;   0.BYTECOUNT => COUNT;
        ADDC  1                 R6  ;   INCR(BYTEADDR);
        ADDC  -1                R2  ;   DECR(COUNT);
        INE          R2  0          ;   IF COUNT <> 0 THEN
        JMP              NB1        ;   BEGIN
        MOV   AEVENT            R6  ;     0.OLDEVENT => EVT;
        MOV          R6  CUREVENT-C ;     EVT => 0.CUREVENT;
        MOV   ACOUNT            R6  ;     0.OLDCOUNT => CNT;
        MOV          R6  MCOUNT.X7  ;     CNT => MCOUNT.WORK;
        MOV   ANSWER            R0  ;     0.ANSWER
        MOV          R0  0.     X7  ;       => RES.WORK;
        MON   RETURNANSWER          ;     RETURNANSWER;
NB3:                                ; NEWOP:
        MON   NEXTOPERATION         ;     NEXTOPERATION;
        JMP              NB2        ;    CONTROL:  GOTO CNTRL;
        JMP              NB4        ;    INPUT:    GOTO ILLEGAL;
                                    ;    OUTPUT:   CONTINUE;
        CLR   ANSWER-WORK.      X7  ;     0 => 0.ANSWER;
        MOV   MCOUNT.X7         R6  ;     MCOUNT.WORK => CNT;
        MOV          R6  ACOUNT     ;     CNT => 0.OLDCOUNT;
        MOV   CUREVENT-C        R6  ;     0.CUREVENT => EVT;
        MOV          R6  AEVENT     ;     EVT => 0.OLDEVENT;
        MON   GETADDRESS            ;     GETADDRESS;
        JMP              NB4        ;       ERROR: GOTO ILLEGAL;
NB1:                                ;   END;
        MON   GETBYTE               ;   GETBYTE;
        MOV          R6  CADR       ;   BYTEADR => 0.CADR;
        MOV          R2  CCOUNT     ;   COUNT => 0.BYTECOUNT;
        MOV   SAVE1             R0  ;   RESTORE(R0);
        JMP              0.     X4  ;   RETURN;
NB2:                                ; CNTRL:
        JMP          S6  TC         ;   TRANSFER COMMAND;
        JMP              NB3        ;   GOTO NEWOP;
NB4:                                ; ILLEGAL:
        MOVC  BMILLEGAL         X7  ;   ILLEGAL=>RES.WORK;
        MON   RETURNANSWER          ;   RETURNANSWER;
        JMP              NB3        ;   GOTO NEWOP;
;###                                ;
SETBYTE:                            ; SETBYTE:
        MOV          R0         R1  ;   ADR => WRDADR;
        SRL          R1  1          ;   WRDADR DIV 2 => WRDADR;
        IBN          R0  0          ;   IF ADR IS ODD THEN
        SWP              0.     X1  ;      SWAP 0.WRDADR;
        MODC  #00FF                 ;
        PUT          R3  0.     X1  ;   PUT BYTE INTO 0.WRDADR(7:8);
        IBN          R0  0          ;   IF ADR IS ODD THEN
        SWP              0.     X1  ;      SWAP 0.WRDADR;
        JMP              0.     X5  ;   RETURN;
                                    ;
FETCHBYTE:                          ; FETCHBYTE:
        MOV          R0         R1  ;   ADR => WRDADR;
        SRL          R1  1          ;   WRDADR DIV 2 => WRDADR;
        MOV   0.     X1         R3  ;   0.WORDADR => BYTE;
        IBN          R0  0          ;   IF ADR IS ODD THEN
        SWP                     R3  ;     SWAP BYTE;
        XTR          R3  8          ;   BYTE(7:8) => BYTE;
        JMP              0.     X6  ;   RETURN;
TC:                                 ; TRANSFER COMMAND:
        MOV   CUREVENT-C        R0  ;   0.CUREVENT
        MOV          R0  AEVENT     ;     => 0.AEVENT;
        MOVC  DNAME             R0  ;   RE.NAME;
        MOV          R7         R1  ;   RE.MESS;
        MON   SENDMESSAGE           ;   SENDMESSAGE;
        MON   WAITANSWER            ;   WAITANSWER;
        MOV   AEVENT            R2  ;   0.AEVENT => EVENT;
        MON   SENDANSWER            ;   SENDANSWER;
        JMP              0.     X6  ;   RETURN;
;###                                ;
ERR1:                               ; ERROR:
        MOVC  BMILLEGAL         X7  ;   ILLEGAL => RES.WORK;
        MON   RETURNANSWER          ;   RETURNANSWER;
        JMP              ASSOUT     ;   GOTO INIT;
C1:                                 ; FIRSTCONTROL:
        JMP          S6  TC         ;   TRANSFER COMMAND;
                                    ;
ASSOUT:                             ; INIT:
        MOVC  NAME-C+4          R7  ;   NAME+4=>STCADR;
        MOV   NAM1              R0  ;   0.NAMEWORD1 => NW;
        MOV   NAM2              R1  ;   0.NAMEWORD2 => NW;
        MOVC  0                 R2  ;   0 => NW;
        MOVC  0                 R3  ;   0 => NW;
        STC   3                     ;   SET NAME;
        MON   NEXTOPERATION         ;   NEXTOPERATION;
        JMP              C1         ;  CONTROL: GOTO FIRSTCONTROL;
        JMP              ERR1       ;  INPUT:   GOTO ERROR;
                                    ;  OUTPUT:  CONTINUE;
        MOV   MCOUNT.X7         R6  ;   MCOUNT.WORK => CNT;
        MOV          R6  ACOUNT     ;   CNT => 0.OLDCOUNT;
        MOV   CUREVENT-C        R6  ;   0.CUREVENT => EVT;
        MOV          R6  AEVENT     ;   EVT => 0.AEVENT;
        MON   GETADDRESS            ;   GETADDRESS;
        JMP              ERR1       ;  ERROR: GOTO ERROR;
        ADDC  -1                R6  ;   ADJUST ADDRESS;
        ADDC  1                 R2  ;   ADJUST COUNT;
        MOV          R6  CADR       ;   ADDRESS => 0.CADR;
        MOV          R2  CCOUNT     ;   COUNT => 0.BYTECOUNT;
NEWLINE:                            ; NEWLINE:
        MOVC  LINE<1            R0  ;   LINE<1 => ADR;
GETLINE:                            ; GETLINE:
        JMP          S4  NEWBYTE    ;   NEWBYTE;
        MOV   LINEEND           R4  ;   0.LINEEND => LE;
        IGE          R0         R4  ;   IF ADR >= LE THEN
        TRP   0                     ;      TRAP;
        JMP          S5  SETBYTE    ;   SETBYTE;
        ADDC  1                 R0  ;   INCR (ADR);
        INEP         R3  FF         ;   IF BYTE <> FF
        INE          R3  NL         ;    AND BYTE <> NL THEN
        JMP              GETLINE    ;    GOTO GETLINE;
        MOV          R0         R4  ;   ADR => COUNT;
        ADDC  BASE<1-(LINE<1)   R4  ;   COUNT - LINE<1 => COUNT;
        MOVC  88                R6  ;   88 => LIM;
        ILTP         R4         R6  ;   IF COUNT < LIM THEN
        ADDC  -1                R4  ;     DECR(COUNT) ELSE
        JMP              TRANSF     ;   BEGIN
        MOVC  LINE<1            R0  ;     LINE<1 => ADR;
        ADDC  88                R0  ;     ADR+88 => ADR;
        JMP          S6  FETCHBYTE  ;     FETCHBYTE;
        MOVC  <:;:>             R2  ;     <:;:> => SEMK;
;###                                ;
        INEP         R3         R2  ;     IF BYTE <> SEMK THEN
        ADDC  -1                R4  ;      DECR(COUNT) ELSE
        JMP              TRANSF     ;     BEGIN
        MOVC  88                R4  ;       88 => COUNT;
        MOVC  <: :>             R5  ;       <: :> => SP;
BACKSTEP:                           ; BACKSTEP:
        ADDC  -1                R4  ;       COUNT-1 =>COUNT;
        ADDC  -1                R0  ;       ADR-1 => ADR;
        JMP          S6  FETCHBYTE  ;       FETCHBYTE;
        IEQ          R3         R5  ;       IF BYTE = SP THEN
        JMP              BACKSTEP   ;          GOTO BACKSTEP;
        ADDC  1                 R4  ;       ADR+1 => ADR;
        ADDC  1                 R0  ;       COUNT+1 => COUNT;
        MOVC  NL                R3  ;       NL => BYTE;
        JMP          S5  SETBYTE    ;       SETBYTE;
        MOVC  LINE<1            R0  ;       LINE<1 => ADR;
        MOVC  0                 R3  ;       0 => BYTE;
        MOVC  <:#:>             R5  ;       <:#:> => PROMT;
FORWSTEP:                           ; FORWSTEP:
        IEQ          R3  NL         ;       IF BYTE <> NL THEN
        JMP              TRANSF     ;       BEGIN
        JMP          S6  FETCHBYTE  ;         FETCHBYTE;
        ADDC  1                 R0  ;         INCR(ADR);
FORWSTEP1:                          ; FORWSTEP1:
        INE          R3         R2  ;         IF BYTE <> SEMK THEN
        JMP              FORWSTEP   ;            GOTO FORWSTEP;
        JMP          S6  FETCHBYTE  ;         FETCHBYTE;
        ADDC  1                 R0  ;         INCR(ADDR);
        INE          R3         R5  ;         IF BYTE <> PROMT THEN
        JMP              FORWSTEP1  ;            GOTO FORWSTEP1;
        JMP          S6  FETCHBYTE  ;         FETCHBYTE;
        ADDC  1                 R0  ;         INCR(ADR);
        INE          R3         R5  ;         IF BYTE <> PROMT THEN
        JMP              FORWSTEP1  ;            GOTO FORWSTEP1;
        JMP          S6  FETCHBYTE  ;         FETCHBYTE;
        ADDC  1                 R0  ;         INCR(ADR);
        INE          R3         R5  ;         IF BYTE <> PROMT THEN
        JMP              FORWSTEP1  ;            GOTO FORWSTEP1;
        MOVC  4                 R2  ;         4 => COUNT;
        MOVC  <: :>             R3  ;         <: :> => BYTE;
SETSPACE:                           ;         FOR I:=1 UNTIL COUNT DO
                                    ;         BEGIN
        ADDC  -1                R0  ;           DECR(ADR);
        JMP          S5  SETBYTE    ;           SETBYTE;
        SOB          R2  SETSPACE   ;         END;
        MOVC  LINE<1            R0  ;         LINE<1 => ADR;
        ADD          R4         R0  ;         ADR+COUNT => ADR;
        MOVC  FF                R3  ;         FF => BYTE;
        JMP          S5  SETBYTE    ;         SETBYTE;
                                    ;       END;
                                    ;     END;
TRANSF:                             ;   END;
;###                                ;
        MOVC  LINE<1            R0  ;   LINE<1 => AD;
        MOV   LINE              R1  ;   0.LINE => L0;
        MOV   LINE1             R2  ;   1.LINE => L1;
        MOV   RAU               R5  ;   0.RAU => RA;
        MOV   R00               R6  ;   0.R00 => R0;
        IEQ          R1         R5  ;   IF L0 = RA
        INE          R2         R6  ;    AND L1 = R0 THEN
        JMP              TRANSF1    ;   BEGIN
        ADDC  4                 R0  ;     AD+4 => AD;
        ADDC  -4                R4  ;     COUNT-4 => COUNT;
TRANSF1:                            ;   END;
        MOVC  BMOUTPUT          X7  ;   BMOUTPUT => MOPERATION.ADR;
        MOV          R0  MADDRS.X7  ;   AD => MADDRESS.ADR;
        ADDC  1                 R4  ;   COUNT+1 => COUNT;
        MOV          R4  MCOUNT.X7  ;   COUNT => MCOUNT.ADR;
        MOVC  DNAME             R0  ;   RE.DRIVERNAME;
        MOV          R7         R1  ;   RE.MESS;
        MON   SENDMESSAGE           ;   SENDMESSAGE;
        MON   WAITANSWER            ;   WAITANSWER;
        MOV          X7         R0  ;   RES.ANSWER=>
        MOV          R0  ANSWER     ;     0.ANSWER;
        JMP              NEWLINE    ;   GOTO NEWLINE;
                                    ;
END


XREFS=4
XBUFS=4
XPRPC=ASSOUT


NOLIST
$S8MXD2
LIST
END ;###
«eof»