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