|
|
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: 6400 (0x1900)
Types: TextFile
Names: »AOUT«
└─⟦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«
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»