|
|
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: 3072 (0xc00)
Types: TextFile
Names: »REGS«
└─⟦5ca485322⟧ Bits:30005483 8" CR80 Floppy CR80FD_0201 ( Backup SL Disk-error 2u )
└─⟦46ea90735⟧
└─⟦this⟧ »JAS.REGS«
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»