mirror of
https://github.com/PDP-10/its.git
synced 2026-03-29 03:04:58 +00:00
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.
311 lines
5.7 KiB
Plaintext
311 lines
5.7 KiB
Plaintext
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î
|
||
|