1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-29 03:04:58 +00:00
Files
PDP-10.its/src/syseng/macdmp.moby1
Lars Brinkhoff a309ad8a45 Add MACDMP, standalone tool for loading/dumping DECtape files.
MACDMP MOBY1 has 340 support, but only works with the old PDP-6
microtape device.  MACDMP 6U32 has both microtape and TD10 support,
but no 340 code.  Both programs can be adjusted for core size.
2020-08-29 06:54:47 +02:00

311 lines
5.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE MACDMP
RIM10
RLC=740000
NOSYMS
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=RLC+34000
COMPTR=RLC+37777
DEFINE INFORM A,B
IF1 [PRINTX \A = B
\]
TERMIN
LOC RLC+37176
FOOF:
;RLC+37176
LOZAD=.-1
LOW=20
HIGH=.-1
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
MOVE PNTR,[500,,TAB+55]
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'
CONO UTC,0
NEXT: ILDB A,@BEGR
JUMPN A,RCH
MOVSI CKS,770000
MOVEI Q,1
MOVNI P,24.
MOVNI FILN,1
MOVE G,[34156261770]
CONO DIS,100
CONSO TTY,40
JRST GODIS
DATAI TTY,A
JSP P,TYO
RCH: CAIN A,33
JRST ALTTST
ORCMI A,177 ;SET REST OF A TO -1
AOJE A,BEGR ;IF IT WAS RUBOUT THEN CLEAR POINTER AND GO BACK TO BEGINNING
BELL: AOJ A,7 ;ADD ONE AGAIN
AOJGE A,ALTTST ;ADD ANOTHER, IF >=0 THEN ALTMODE
ADDI A,135 ;MUNG INTO SIXBIT
JUMPL A,CARRET ;TREAT ALL CONTROL CHARS AS CR.
JUMPE A,SPACE
NEXT1: TLNE E,770015 ;NO MORE THAN SIX CHARS
IDPB A,E
JRST NEXT
DLUP: MOVSI G,747375
TDNE Q,TAB+54+25.(P)
ADDI G,200
TDNE Q,TAB+103+25.(P)
ADDI G,100
MOVNI A,4
CONSZ DIS,2000
JRST BEG70
JUMPE P,NEXT
DL1: ADDI FILN,2
DL: TDC G,[404040404040]
TDNE CKS,TAB-1(FILN)
GODIS: DATAO DIS,G
MOVEI BLKNO,34
SOJG BLKNO,.
XCT STB(A) ;A INITIALLY CONTAINS 0, CLOBBERED TO -4 AT DLUP
AOJA A,DL
MOVE G,TAB-1(FILN)
MOVEI G,757575
MOVE G,TAB(FILN)
MOVEI G,757575
STB: AOJA P,DLUP
JBLK: CAILE CH,'M ;SKIP IF SYMS NOT NEEDED
JRA CH,LOAD ;F=0 C(CH)LT=0 C(F)=-1
CONO UTC,0
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
SKIPN E,WRITE
AOJA WRITE,CLSTP
ERR: SKIPA P,NEXT
CRR: SKIPA A,NEXT1
SKIPA A,BELL
TYO: SKIPN COMPTR
DATAO TTY,A
CONSZ TTY,20
JRST .-1
JUMPGE A,(P)
MOVEI A,12
JRST TYO
ALTTST: TLNN B,4040
LDB CH,E
JUMPN CH,ALTMD
CARRET: AOJE A,NEXT1
MOVSI FILN,-30
LUP: AOJ FILN,DMP3A
SKIPN TAB-1(FILN) ;SEARCH FOR FREE FILE
SKIPE BLKNO,TAB(FILN)
TDZA BLKNO,BLKNO
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)
BEG70: MOVEI FILN,1(FILN)
LSH FILN,-1 ;FORM DIR NO
JUMPLE WRITE,BEG69A
ANDCAM WRITE,TAB+55(FILN)
IORM WRITE,TAB+104(FILN)
BEG69A: TRNE WRITE,4
SOJA F,LOADS
DUMP: MOVE A,[(,LOW-HIGH)LOW]
MOVEI CKS,SPNT
DMP1: SKIPE (A) ;FIND SOME NON-ZERO CORE
JRST DMP1C
AOBJN A,DMP1
TLNE A,-2
JRST DMP1
DMP1C: MOVEM A,D ;SAVE ADR
DMP1B: SKIPN (A) ;FIND SOME ZERO CORE
SKIPE 1(A) ;DON'T MAKE NEW BLOCK FOR 1 ZERO
SKIPA
JRST DMP1A
AOBJN A,DMP1B
TLNE A,-2
JRST DMP1B
DMP1A: 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
TLNE A,-1
JRST 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
TLNE D,-2
JRST 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: AOJL 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: HRRO C,TAPENO ;CURRENT TAPE NO.
CONSZ UTS,40 ;WRITING ON
JRST .-1
SETOB A,B
RB1: TRNN B,400001
TRCA C,10000
CONSO UTC,200000
TRO C,2000
RBG: CONO UTC,220200(C)
CONO DC,4011(A)
UWAIT1: CONSZ UTS,6
JRST ERR
CONSO DC,1000
JRST .-3
JUMPL E,INOUT(WRITE)
DATAI DC,B
TRZ C,2000
SUBI B,(BLKNO)
TRNE C,10000
TRC B,-2
JUMPN B,RB1
MOVNI E,200
TRO C,100
JUMPLE WRITE,RBG
MOVNI A,401
TRO C,400
JRST RBG
DATAI DC,G
CAME G,@(P)
JRST ERR
JRST (P)
DATAI DC,@(P)
INOUT: JRST (P)
DATAO DC,@(P)
JRST (P)
ALTMD: MOVEI A,"$
JSP P,TYO
CAIE CH,'K
CAIN CH,'D
AOJLE WRITE,.-1
CAIN CH,'G
JRST @SADR
CAIN CH,'R ;R ALTMODE
JRST 20 ;TO READ IN PAPER TAPE
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
MOVEM F,TAPENO
CLSTP: MOVEI BLKNO,100 ;BLK NO OF FILE DIR
JSP P,RBLK
JFCL TAB+200(E) ;READ OR WRITE DIR TAB
AOJL E,UWAIT1
JRST BEG
SPNT: 0
CONST: CONSTANTS
VARIABLES
INFORM TAPE SELECTION LOCATION,\OPNTP
IFN .&400,INFORM EXTRA REGISTERS,\37777-<.&37777>
IFE .&400,INFORM EXCESS CRUD,\<.&377>+1
END BEGRî