mirror of
https://github.com/PDP-10/its.git
synced 2026-03-29 03:04:58 +00:00
MACDMP - DECtape file I/O.
This commit is contained in:
451
src/syseng/macdmp.6u64
Normal file
451
src/syseng/macdmp.6u64
Normal file
@@ -0,0 +1,451 @@
|
||||
|
||||
RLC==140000
|
||||
TD10==0
|
||||
PDP10==0
|
||||
SHADOW==0
|
||||
IFE PDP10,TITLE RIM2
|
||||
IFN PDP10,TITLE RIM10
|
||||
RIM
|
||||
NOSYMS
|
||||
DEFINE WHOLE A
|
||||
IF2,[
|
||||
REDEF
|
||||
IRPC X,,[A]
|
||||
INFO REDEF,[X]
|
||||
IFSE [X][
][
|
||||
INFO OUT
|
||||
REDEF
|
||||
]
|
||||
TERMIN]
|
||||
TERMIN
|
||||
DEFINE REDEF %B
|
||||
DEFINE INFO %Y,%A
|
||||
%Y [%B!!%A]
|
||||
TERMIN
|
||||
TERMIN
|
||||
DEFINE OUT Q
|
||||
WORD Q
|
||||
TERMIN
|
||||
|
||||
IFE PDP10,[
|
||||
WHOLE [ HRLZI 2,(JRST)
|
||||
HRLI 17,(CONO PTR,)
|
||||
HRRI 17,60
|
||||
MOVEM 17,20
|
||||
HRLI 17,(CONSO PTR,)
|
||||
HRRI 17,10
|
||||
MOVEM 17,21
|
||||
MOVEM 17,24
|
||||
HRLI 17,(JRST)
|
||||
HRRI 17,21
|
||||
MOVEM 17,22
|
||||
MOVEM 17,27
|
||||
HRRI 17,24
|
||||
MOVEM 17,25
|
||||
HRLI 17,(DATAI PTR,)
|
||||
HRRI 17,26
|
||||
MOVEM 17,23
|
||||
HRLI 17,(XCT)
|
||||
MOVEM 17,26
|
||||
MOVEI 17,37176
|
||||
MOVEM 17,37
|
||||
HRLI 10,(CONO)
|
||||
HRRI 10,1000
|
||||
HRLI 11,(JFCL)
|
||||
HRLI 12,(JFCL)
|
||||
HRLI 13,(JFCL)
|
||||
HRLI 14,(JFCL)
|
||||
HRLI 15,(CONSZ)
|
||||
HRRI 15,1000
|
||||
HRLI 16,(JRST)
|
||||
HRRI 16,10
|
||||
MOVSI 17,(SKIPA)
|
||||
JRST 10
|
||||
]
|
||||
|
||||
IFN SHADOW,[
|
||||
LODBEG=0 ;FIRST LOCATION IN SHADOW FOR SHADOW LOADER
|
||||
REL=RLC+36000 ;RELOCATION WHILE IN USER MODE
|
||||
|
||||
LOC 1
|
||||
BAR: -1,,REL ;DATAO TO PROCESSOR (RELOCATION & PROTECTION WHILE IN USER MODE)
|
||||
LOSS: LOADER,,SHAD ;BLT POINTER INTO SHADOW
|
||||
FBLT: FOOF,,FOOF+1 ;BLT POINTER TO CLEAR OUT FILE DIRECTORY
|
||||
SBL: .BYTE 5
|
||||
REPEAT 7,36 ;TO MAKE INITIAL DIRECTORY A VALID EMPTY ONE
|
||||
33 ;" " "
|
||||
.WALGN
|
||||
.BYTE
|
||||
DBL=.-1
|
||||
|
||||
LOC 41
|
||||
JSR 16 ;EXIT FROM USER HACK
|
||||
|
||||
LOC RLC+37176
|
||||
FOOF: 0 ;INITIALIZE FOR CLEARING DIRECTORY
|
||||
OFFSET -REL
|
||||
FOO: BLT LOSS,SHAD+LODEND-LODBEG-1
|
||||
0
|
||||
|
||||
LOADER: OFFSET LODBEG-2*REL-.
|
||||
SHAD: OFFSET 0
|
||||
OFFSET LODBEG-.
|
||||
JFCL
|
||||
MOVSI (JFCL)
|
||||
CONO 635550
|
||||
CONO PI,11577
|
||||
CONO UTC,223110
|
||||
CONO DC,4010
|
||||
LUP%: CONSO DC,1000
|
||||
JRST .-1
|
||||
DATAI DC,A%
|
||||
AOJGE A%,LUP%
|
||||
TRNE A%,-1
|
||||
A%: 0
|
||||
JRST LUP%
|
||||
|
||||
LODEND: OFFSET 0
|
||||
|
||||
WHOLE [DATAO BAR
|
||||
JRST 1,FOO
|
||||
BLT FBLT,TAB+176
|
||||
MOVEM SBL,TAB+56
|
||||
MOVEM DBL,TAB+67
|
||||
SETOM TAB+177
|
||||
]]]
|
||||
|
||||
IF2,[
|
||||
IFE PDP10,[
|
||||
DEFINE OUT Q
|
||||
Q
|
||||
TERMIN
|
||||
]
|
||||
|
||||
LOC 1
|
||||
IFN PDP10,WORD <-27,,>
|
||||
WHOLE [ MOVE 1,15
|
||||
JSP 17,30-10*PDP10
|
||||
DATAI PTR,16
|
||||
MOVE 15,16
|
||||
JUMPG 16,16
|
||||
JSP 17,30-10*PDP10
|
||||
DATAI PTR,(16)
|
||||
ROT 15,1
|
||||
ADD 15,(16)
|
||||
AOBJN 16,6
|
||||
MOVEI 17,33-10*PDP10
|
||||
JRST 30-10*PDP10
|
||||
CONO PTR,60
|
||||
]
|
||||
IFN PDP10,[
|
||||
WHOLE [ 0
|
||||
0
|
||||
]]
|
||||
|
||||
LOC 30
|
||||
WHOLE [ CONSO PTR,10
|
||||
JRST 30-10*PDP10
|
||||
JRST (17)
|
||||
DATAI PTR,16
|
||||
CAMN 15,16
|
||||
JRST 2
|
||||
JRST 4,1
|
||||
]
|
||||
WORD <JRST 1>
|
||||
SBLK
|
||||
]
|
||||
TITLE MACDMP
|
||||
DTC=320
|
||||
DTS=324
|
||||
IFN TD10,[DC=DTC
|
||||
UTC=DTC
|
||||
UTS=DTS
|
||||
]F=0
|
||||
A=2
|
||||
B=1
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
P=6
|
||||
CKS=7
|
||||
FILN=10
|
||||
BLKNO=11
|
||||
WRITE=12
|
||||
PNTR=13
|
||||
CH=14
|
||||
Q=15
|
||||
G=16
|
||||
DDT=34000+RLC
|
||||
COMPTR=37777+RLC
|
||||
LOC 37176+RLC
|
||||
LOZAD=.-1
|
||||
LOW=20
|
||||
HIGH=.-1
|
||||
FOOF: BLOCK 1
|
||||
TAB: BLOCK 200 ;FILE DIRECTORY
|
||||
TAPENO: BLOCK 1
|
||||
BEGR: CLEARM COMPTR
|
||||
CONO 635550
|
||||
BEG: JSP P,CRR
|
||||
MOVEI D,SPNT-1
|
||||
BEG1: CLEARB A,FOOF
|
||||
EXCH A,1(D) ;REMOVE HEADER LIST
|
||||
AOBJN A,.
|
||||
MOVEI D,-1(A)
|
||||
JUMPN D,BEG1
|
||||
CLEARB CH,F
|
||||
MOVNI WRITE,1
|
||||
TYI: MOVSI B,400000 ;INIT FILE NAME TO @ @
|
||||
SPACE: EXCH C,B
|
||||
MOVSI B,400000
|
||||
MOVSI E,20600 ;FAKE OUT END-TEST AND CLEAR 'EXCH'
|
||||
CAIN CH,'F
|
||||
JRST LISTF
|
||||
CONO UTC,400000*TD10
|
||||
NEXT: ILDB A,COMPTR
|
||||
JUMPN A,RCH
|
||||
CONSO TTY,40
|
||||
JRST .-1
|
||||
DATAI TTY,A
|
||||
JSP P,TYO
|
||||
|
||||
RCH: ORCMI A,177
|
||||
AOJE A,BEGR
|
||||
BELL: AOJ A,7
|
||||
AOJGE A,ALTTST
|
||||
ADDI A,135 ;200-40-3
|
||||
JUMPL A,CARRET
|
||||
JUMPE A,SPACE
|
||||
NEXT1: TLNE E,770000 ;NO MORE THAN SIX CHARS
|
||||
IDPB A,E
|
||||
JRST NEXT
|
||||
JBLK: CAILE CH,'M ;SKIP IF SYMS NOT NEEDED
|
||||
JRA CH,LOAD ;F=0 C(CH)LT=0 C(F)=-1
|
||||
CONO UTC,400000*TD10
|
||||
JUMPL CH,DDTG ;IF SYMS JUST READ
|
||||
HRRM D,SADR
|
||||
IFE .&1,[ JUMPN CH,BEG ;IF NOT LOADGO COMMAND
|
||||
SADR: JRST BEG ;CURRENT S.A.
|
||||
]
|
||||
IFN .&1,[SADR: JUMPE CH,BEG
|
||||
JRST BEG
|
||||
]
|
||||
DDTG: HRROS DDT-1 ;TELL DDT ITS SYMBOL TABLE WAS BUGGERED
|
||||
JRST DDT
|
||||
|
||||
LOADS: MOVEI D,LOZAD+1 ;FIRST LOC NOT TO ZERO
|
||||
CLEARM 40
|
||||
MOVE C,[(40)41]
|
||||
CAIN CH,'T
|
||||
MOVE D,@DDT-1 ;GET FIRST LOC OF DDT SYMS
|
||||
TRNN CH,3 ;SKIP ON M,N,I NOT ON L,T,@
|
||||
BLT C,-1(D) ;ZERO CORE
|
||||
LOAD: JSP Q,LODUMP
|
||||
JSP P,UWAIT
|
||||
CAMN CKS,D ;CHECK CHECKSUM
|
||||
JRST LOAD
|
||||
DELE: JUMPE C,BEG
|
||||
JUMPE WRITE,[AOJA WRITE,CLSTP]
|
||||
ERR: SKIPA P,RBLK2A
|
||||
CRR: SKIPA A,C15
|
||||
SKIPA A,BELL
|
||||
TYO: SKIPN COMPTR
|
||||
DATAO TTY,A
|
||||
CONSZ TTY,20
|
||||
JRST .-1
|
||||
JUMPGE A,(P)
|
||||
MOVEI A,12
|
||||
JRST TYO
|
||||
|
||||
|
||||
CR3: TDNN A,1(E)
|
||||
AOJA E,.-1
|
||||
JSP P,CRR
|
||||
CAIN F,-TAB-55(E)
|
||||
JRST BEG
|
||||
MOVEI G,3-TAB(E)
|
||||
LSH G,-1
|
||||
LDB A,[(100+G)TAB+104
|
||||
MOVE B,TAB+55(G)
|
||||
DPB B,[(10100)A
|
||||
JSP P,LISTF3
|
||||
JRA A,LISTF2-1
|
||||
|
||||
ALTTST: TLNN B,4040
|
||||
LDB CH,E
|
||||
JUMPN CH,ALTMD
|
||||
CARRET: AOJE A,NEXT1
|
||||
MOVE PNTR,[(500)TAB+55]
|
||||
MOVSI FILN,-30
|
||||
LUP: AOJ FILN,DMP3A
|
||||
SKIPN TAB-1(FILN) ;SEARCH FOR FREE FILE
|
||||
SKIPE TAB(FILN)
|
||||
C15: TRNA 15
|
||||
HRRM FILN,FREE ;SAVE
|
||||
CAMN C,TAB-1(FILN) ;SEARCH FOR TYPED-IN FILE
|
||||
CAME B,TAB(FILN)
|
||||
AOBJN FILN,LUP
|
||||
JUMPL FILN,BEG69 ;IF FILE FOUND
|
||||
JUMPLE WRITE,ERR ;IF NOT FOUND, BETTER BE DUMP
|
||||
FREE: MOVEI FILN,. ;DUMP & NOT FOUND, MAKE ENTRY WHERE FREE
|
||||
SKIPE TAB(FILN)
|
||||
JRST ERR
|
||||
|
||||
BEG69: SKIPN WRITE ;DELETE?
|
||||
CLEARB B,C ;YES, KILL FILE
|
||||
MOVEM C,TAB-1(FILN) ;CLEAR IF DELE, ENTER IF NEW DUMP
|
||||
MOVEM B,TAB(FILN)
|
||||
MOVEI FILN,1(FILN)
|
||||
LSH FILN,-1 ;FORM DIR NO
|
||||
JUMPLE WRITE,BEG69A
|
||||
ANDCAM WRITE,TAB+55(FILN)
|
||||
IORM WRITE,TAB+104(FILN)
|
||||
|
||||
BEG69A: CLEARB BLKNO,E ;START AT BEG OF TAPE
|
||||
TRNE WRITE,4
|
||||
JRST LOADS
|
||||
|
||||
DUMP: MOVE A,[(,LOW-HIGH)LOW]
|
||||
MOVEI CKS,SPNT
|
||||
DMP1: SKIPN (A) ;FIND SOME NON-ZERO CORE
|
||||
AOBJN A,.-1
|
||||
MOVEM A,D ;SAVE ADR
|
||||
SKIPN (A) ;FIND SOME ZERO CORE
|
||||
SKIPE 1(A) ;DON'T MAKE NEW BLOCK FOR 1 ZERO
|
||||
AOBJN A,.-2
|
||||
SUB D,A ;GET COUNT
|
||||
ADDI D,(A) ;GET F.A.
|
||||
MOVEM D,(CKS) ;SAVE HEADER
|
||||
MOVE CKS,A ;F.A.+W.C.IS ADR OF NEXT HEADER
|
||||
JUMPL A,DMP1 ;GET NEXT BLOCK
|
||||
DMP2: MOVE CKS,[JRST 1]
|
||||
MOVEI D,SPNT
|
||||
DMP3A: JSP P,UWAIT
|
||||
JFCL CKS ;FIRST WORD TO LOOK LIKE END OF LOADER
|
||||
DMP3: MOVE D,(D) ;GET HEADER
|
||||
JUMPGE D,THRU ;IF NULL HEADER FOUND
|
||||
SKIPA Q,LUP
|
||||
LODUMP: CAMN D,[JRST 1]
|
||||
TLO BLKNO,400000 ;JRST 1 DUMPED OR READ
|
||||
JSP P,UWAIT
|
||||
MOVE CKS,D ;OUTPUT HEADER
|
||||
JUMPGE BLKNO,LODUMP
|
||||
JUMPGE D,JBLK ;IF JRST BLOCK READ
|
||||
JUMPGE CH,DMP5 ;IF NOT LOADING SYMS
|
||||
HLRO P,D
|
||||
ADD P,D
|
||||
ADDB P,@DDT-1 ;COMPUTE LOAD ADR FOR SYMS AND UPDATE POINTER
|
||||
HRR D,P
|
||||
DMP5: ROT CKS,1 ;TRANSFER A DATA BLOCK
|
||||
JSP P,UWAIT
|
||||
ADD CKS,(D) ;OUTPUT DATA WORD
|
||||
AOBJN D,DMP5
|
||||
JRST (Q)
|
||||
|
||||
;WRITE: 1=D 0=K -5=I -1=ELSE
|
||||
|
||||
THRU: JUMPL WRITE,BEG
|
||||
JSP P,UWAIT
|
||||
TRZA WRITE,SADR ;OUTPUT JRST BLOCK
|
||||
UWAIT: SOJG E,UWAIT1 ;RETURN ADDR = (P) DATA ADDR = @(P)
|
||||
;E IS WD COUNT IN BLOCK
|
||||
MNLUP: AOSA BLKNO
|
||||
MNLUP1: DPB B,PNTR ;FOR DELETE
|
||||
ILDB A,PNTR ;SEARCH FILE DIR
|
||||
CAIN A,37
|
||||
JRST DELE ;END OF TAB MARKER
|
||||
TLO A,-1(WRITE)
|
||||
CAIE FILN,(A)
|
||||
JUMPN A,MNLUP
|
||||
DPB FILN,PNTR ;SMASH AWAY WRITE BLOCK
|
||||
JUMPE WRITE,MNLUP1
|
||||
RBLK: MOVE C,TAPENO ;CURRENT TAPE NO.
|
||||
IFE TD10,[ CONSZ UTS,40 ;WRITING ON
|
||||
JRST .-1
|
||||
CONSO UTC,200000 ;SEL ENABLE
|
||||
]IFN TD10,[ CONSO DTC,300000
|
||||
TRO C,10000
|
||||
]RBLK3:IFE TD10, TRO C,2000 ;DELAY 160 MS
|
||||
RBLK1: SETOB F,A ;F IS DIR
|
||||
RBLK4: CONO UTC,220200(C) ;SEL ENBL, GO, READ B.N.
|
||||
IFE TD10, CONO DC,4010 ;BUF AC MOVE, IN, DEVICE 1
|
||||
UWAIT1: CONSZ UTS,6+672672*TD10 ;ERRORS?
|
||||
JRST ERR
|
||||
IFE TD10, CONSO DC,1000 ;DATA BF RQ
|
||||
IFN TD10, CONSO DTS,1
|
||||
JRST .-3
|
||||
JUMPGE A,INOUT(WRITE) ;W.C. >0: TRANSFER DATA, EXIT
|
||||
HRRO C,TAPENO
|
||||
DATAI DC,B ;BLOCK #
|
||||
SUBI B,(BLKNO)
|
||||
JUMPGE F,RBLK2A
|
||||
JUMPE B,RBLE ;RIGHT BLOCK
|
||||
JUMPL B,RBLK1 ;NOT YET
|
||||
IFE TD10, TROA C,2000 ;OVERSHOT, SET 160 MS DELAY
|
||||
IFN TD10, JRST .+2
|
||||
RBLK2A: AOJ B,BEGR
|
||||
RBLK2: AOJL B,RBLK3 ;IF PASSED BLOCK IN REVERSE
|
||||
TRO C,10000+670000*TD10 ;REVERSE
|
||||
AOJA F,RBLK4
|
||||
RBLE: SKIPL WRITE
|
||||
TRO C,400 ;CHANGES "RD DATA" TO "WR DATA"
|
||||
CONO UTC,220300(C) ;SEL ENBL, GO, READ DATA
|
||||
IFE TD10,[ SKIPL WRITE
|
||||
CONO DC,3410 ;DATA AC RQ, DATA BF RQ, OUT, DEV 1
|
||||
] MOVEI E,200
|
||||
AOJA A,UWAIT1
|
||||
|
||||
DATAI DC,G
|
||||
CAME G,@(P)
|
||||
JRST ERR
|
||||
JRST UWAIT2
|
||||
DATAI DC,@(P)
|
||||
INOUT: JRST UWAIT2
|
||||
DATAO DC,@(P)
|
||||
UWAIT2:IFE TD10, JRST (P)
|
||||
IFN TD10,[ SOJN E,UWAIT3
|
||||
CONO DTS,1
|
||||
CONSO DTS,100000
|
||||
JRST .-1
|
||||
UWAIT3: AOJA E,(P)
|
||||
]
|
||||
|
||||
ALTMD: MOVEI A,"$
|
||||
JSP P,TYO
|
||||
CAIE CH,'K
|
||||
CAIN CH,'D
|
||||
AOJLE WRITE,.-1
|
||||
CAIN CH,'G
|
||||
JRST @SADR
|
||||
CAIN CH,'I
|
||||
MOVNI WRITE,5
|
||||
CAILE CH,31 ;SKIP IF NUMBER
|
||||
JRST TYI
|
||||
LSH B,3 ;CONVERT SIXBIT TO OCTAL
|
||||
LSHC F,3
|
||||
JUMPN B,.-2
|
||||
CAILE F,7 ;SKIP IF NOT ONE DIGIT
|
||||
JRA D,JBLK
|
||||
OPNTP: LSH F,3+6*TD10
|
||||
MOVEM F,TAPENO
|
||||
CLSTP: MOVEI BLKNO,100 ;BLK NO OF FILE DIR
|
||||
JSP P,RBLK
|
||||
AOJ A,TAB(A) ;READ OR WRITE DIR TAB AND GUNCH
|
||||
SOJG E,UWAIT1
|
||||
JRST BEG
|
||||
|
||||
|
||||
LISTF: HRRI E,TAB-1
|
||||
MOVSI A,770000
|
||||
TDNN E,SPACE
|
||||
JRST CR3
|
||||
TLNN E,770000
|
||||
JSP P,LISTF3
|
||||
LISTF2: MOVEI P,LISTF+1
|
||||
ILDB A,E
|
||||
LISTF3: MOVEI A,40(A)
|
||||
JRST TYO
|
||||
|
||||
SPNT: 0
|
||||
END BEGRî
|
||||
|
||||
Reference in New Issue
Block a user