|
|
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: 3712 (0xe80)
Types: TextFile
Names: »MPDRV«
└─⟦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.MPDRV«
└─⟦548cf593d⟧ Bits:30005189 8" CR80 Floppy CR80FD_0186 ( SYSTEM BOOT, GSB AOUT, MP, OC, FLOPPY BACKUP-DISK Start 26F Base 14E2 )
└─⟦daba3b0d5⟧
└─⟦this⟧ »JAS.MPDRV«
LIST
;----------------------------------------------------------------------
;
; DRIVER FOR BINDER MAGNETE MATRIX
; PRINTER WITH RAM-FF-CONTROL
; AND AV24-INTERFACE
;
;----------------------------------------------------------------------
BEGIN MODULE
GLOBAL CAUSE,INTERRUPT,LOCACTION,DEVPR
NOLIST
$S8MXGL
$S8MNAX
LIST XPD:= DRIVERLENGTH NOLIST
$S8MXD1
LIST
BEGIN USE BASE
ENTRY MP00
GETADDRESS= #0047
GETBYTE= #0048
NEXTOPRATION= #0043
RETURNNSWER= #0044
DEVICE= #0053
CUREVENT= #003A
BNRESERVE= #0003
BNRELEASE= #0002
BMILLEGAL= #0008
BMNOTREADY= #0001
CR= #000D
STX= #0002
FF= #000C
VT= #000B
BNOUTPUTRDY= 11
BNTERMRDY= 9
MPDEVNO= 6
KIND:= KINDOC OR BMBYTE OR BMDISP
RTN: 0
SAVE0: 0
SYSACTION: 0
USE PROG
NAM: <:MP:>
R1000: 1000
RKIND: KIND
LOCAC: ; LOCAL ACTION:
MOV R0 SAVE0 ; SAVE(R0);
MOV CAUSE-C R0 ; IF 0.CAUSE <> 3 THEN
INEP R0 3 ; BEGIN
MOV SAVE0 R0 ; RESTORE(R0);GOTO SYSACTION;
JMPI SYSACTION ; END;
MOVC 0 R0 ; 0 =>
LDS R0 ; PSW;
JMP ERROR ; GOTO ERROR;
;###
SENSE: ; SENSE DEVICE;
MOV INTERRUPT-C R1 ;
MOV R1000 R0 ; 10 SEC => DELAY;
MON WAITINTERRUPT ; WAITINTERRUPT;
JMP ERROR ; TIMEOUT: GOTO ERROR;
SENSE1: ; SENSE STATUS;
SIO R0 R4 ; SENSE;
IBN R0 BNOUTRDY ; IF NOT OUTPUT READY
IBZ R0 BNTERMRDY ; OR TERM. NOT READY THEN
JMP SENSE ; GOTO SENSE;
WIO R3 R4 ; OUTPUT CHAR;
JMP 0. X5 ; RETURN;
;
;
MP00: ; INIT:
MOVC MP00 R0 ;
MOV R0 RTN ;
MOVC NAME-C+4 R7 ;
MOV NAM R0 ;
MOVC 0 R1 ;
MOVC 0 R2 ;
MOVC 0 R3 ;
STC 3 ;
MOV LOCACN-C R0 ;
MOVC LOCAC R1 ;
MOV R0 SYSACTION ; 0.LOCACN => 0.SYSACTION;
MOV R1 LOCACN-C ; LOCAL ACTION => 0.LOCACN;
MOVC MPDEVNO R0 ;
MOV R0 DEVICE-C ;
MOV R0 R4 ;
SLL R0 2 ;
MOV R0 DEVPR-C ;
MON INITDEVICE ; INITDEVICE;
MOV INTERT-C R1 ;
MON CLEARINTERRUPT ; CLEARINTERRUPT;
MON NEXTOPERATION ; NEXTOPERATION;
JMP MP01 ;
JMP ILLEGAL ; INPUT: ILLEGAL;
;
MP08: ; TEST ATTENTION:
MON WAITEVENT ; WAITEVNET;
TRP 0 ; ANSWER: IMPOSSIBLE;
JOZ X7 MP01 ; MESSAGE: IF OPER.MESS<>0 THEN
; BEGIN
MON RESUMEEVENT ; RESUME EVENT;
JMP MP03 ; GOTO OUTPUT;
; END;
MP01: ;
MOVC 3 R0 ; ENABLE INTERFACE;
CIO R0 R4 ;
MOVC STX R3 ; STX => CHAR;
JMP S5 SENSE1 ; SENSE;
MOVC 66 R6 ; 66 => COUNT;
MP02: ; FOR I:=1 UNTIL COUNT DO
; BEGIN
MOVC NL R3 ; NL => CHAR;
JMP S5 SENSE ; SENSE;
SOB R6 MP02 ; END;
MOVC VT R3 ; VT => CHAR;
JMP S5 SENSE ; SENSE;
MOVC FF R3 ; FF => CHAR;
JMP S5 SENSE ; SENSE;
MOVC MP08 R0 ;
MOV R0 RTN ;
MON RESUMEEVENT ; RESUME EVENT;
;###
MP03: ; OUTPUT:
MON NEXTOPERATION ; NEXTOPERATION;
JMP MP04 ;
JMP ILLEGAL ; INPUT: ILLEGAL;
MON GETADDRESS ; OUTPUT:GETADDRESS;
JMP ILLEGAL ; ERROR: ILLEGAL;
MP05: ; FOR I:=1 UNTIL MCOUNT.WORK DO
; BEGIN
MON GETBYTE ; GETBYTE;
JMP S5 SENSE ; SENSE;
INEP R3 FF ; IF BYTE = FF
INE R3 NL ; OR BYTE = NL THEN
JMP MP06 ; BEGIN
MOVC CR R3 ; CR => CHAR;
JMP S5 SENSE ; SENSE;
MP06: ; END;
ADDC 1 R6 ; INCREASE (BYTEADDR);
SOB R2 MP05 ; END;
CLR 0. X7 ; 0 => RESULT.ANSWER;
MOV R7 R1 ; RE.ANSW;
MOV CUREVENT-C R2 ; RESTORE(EVENT);
MON SENDANSWER ; SENDANSWER;
JMP MP08 ; GOTO OUTPUT;
;
MP04: ; CONTROL:
IBZ X7 BNRELEASE ; IF RELEASE THEN
JMP MP07 ; BEGIN
MOVC FF R3 ; FF => CHAR;
JMP S5 SENSE ; SENSE;
MOVC CR R3 ; FF => CHAR;
JMP S5 SENSE ; SENSE;
MP07: ; END;
MOV RKIND R2 ;
MOV R2 MCOUNT.X7 ;
CLR 0. X7 ; 0 => RESULT.ANSW;
MOV R7 R1 ; RE.ANSW;
MOV CUREVENT-C R2 ; RESTORE(EVENT);
MON SENDANSWER ; SENDANSWER;
JMP MP08 ; GOTO OUTPUT;
;
ILLEGAL: ; ILLEGAL:
MODC BMILLEGAL-BMNOTREADY ; ILLEGAL=>RESULT.ANSWER;
ERROR: ; ERROR:
MOVC BMNOTREADY X7 ; NOTREADY => RESULT.ANSW;
MOVC 0 R1 ; 0 => STATUS;
MON RETURNANSWER ; RETURNANSWER;
JMPI RTN ; RETURN;
;
END ;
XREFS= 4
XBUFS= 0
XPRPC= MP00
NOLIST
$S8MXD2
LIST
END ;###
«eof»