mirror of
https://github.com/PDP-10/its.git
synced 2026-01-29 05:11:14 +00:00
Add MAGDMP - standalone program loader/dumper for magtape.
It's built for read-in mode, and a TM10A drive.
This commit is contained in:
committed by
Eric Swenson
parent
c4df86d2b2
commit
06c2387bf5
641
src/syseng/magdmp.27
Executable file
641
src/syseng/magdmp.27
Executable file
@@ -0,0 +1,641 @@
|
||||
TITLE MAGDMP
|
||||
|
||||
;MAGDMP is a standalone program loader/dumper for magtape.
|
||||
;The format of binary programs is the same as the ITS "SBLK"
|
||||
;format, as popularized by Midas. The tapes are normally
|
||||
;created under timesharing with the MAGFRM program.
|
||||
;
|
||||
;MAGDMP filenames are:
|
||||
; name1 <space> name2 <space> version_number
|
||||
; name1 <space> name2
|
||||
; version_number defaults to the equivalent of ">"
|
||||
; name2
|
||||
; name1 defaults to "@"
|
||||
;
|
||||
;MAGDMP commands are:
|
||||
; <filename> <cr>
|
||||
; clear core, load and start program
|
||||
; L <filename> <cr>
|
||||
; clear core, load program, leave control in MAGDMP
|
||||
; M <filename> <cr>
|
||||
; load program without clearing core ("merge"), leave control in MACDMP
|
||||
; T <filename> <cr>
|
||||
; clear core except DDT, load program, give symbol table
|
||||
; to DDT, and start DDT. 777400G returns to MAGDMP
|
||||
; F
|
||||
; list directory (if you have a 340, the directory
|
||||
; is displayed on the 340 and this command doesn't exist.
|
||||
;
|
||||
; get the directory off the tape again
|
||||
; D <filename> <cr>
|
||||
; dump all non-zero core onto tape and give it the specified name
|
||||
; G
|
||||
; start program at its starting address
|
||||
; The nnn command of DSKDMP does not work in MAGDMP.
|
||||
|
||||
;On non-KL10, load via hardware read-in.
|
||||
;On KL10, load with a J MAGDMP command to KLDCP,
|
||||
;which does the following:
|
||||
;
|
||||
;Reset KL10 and start microcode
|
||||
;Set EPT location to ITS standard (currently 2000)
|
||||
;Turn OFF the cache
|
||||
;Load the following into memory:
|
||||
;100/ 763760777176 ;DF10-C command for locs 777177-777777
|
||||
;101/ 0
|
||||
;102/ 734540000107 ;DATAO MTS,107 ;SET ICWA
|
||||
;103/ 734200072200 ;CONO MTC,072200 ;READ CONTIN, ODD PAR, 800 BPI, CORE DUMP
|
||||
;104/ 734740000100 ;CONSO MTS,100 ;AWAIT JOB DONE
|
||||
;105/ 254000000104 ;JRST .-1
|
||||
;106/ 254000777200 ;JRST 777200 ;JUMP TO MAGDMP
|
||||
;107/ 100 ;ICWA
|
||||
;START AT 102
|
||||
|
||||
.MLLIT==1
|
||||
|
||||
DEFINE SETF TEXT,FLG
|
||||
IFDEF FLG,.STOP
|
||||
.TAG FOOBAR
|
||||
PRINTC "TEXT
|
||||
FLG="
|
||||
.TTYMAC FLAG
|
||||
.TTYFLG==.TTYFLG+1
|
||||
PRINTX/FLAG
|
||||
/
|
||||
.TTYFLG==.TTYFLG-1
|
||||
IFSE FLAG,YES,FLG==1
|
||||
IFSE FLAG,NO,FLG==0
|
||||
IFSE FLAG,Y,FLG==1
|
||||
IFSE FLAG,N,FLG==0
|
||||
IFNDEF FLG,FLG==FLAG
|
||||
TERMIN
|
||||
IFNDEF FLG,.GO FOOBAR
|
||||
TERMIN
|
||||
|
||||
SETF Paper Tape HRI?,PTRHRI
|
||||
SETF KL10?,KL10P
|
||||
SETF TM10B?,TM10BP
|
||||
SETF 340?,340P
|
||||
|
||||
IFN PTRHRI,[
|
||||
NOSYMS
|
||||
RIM10
|
||||
]
|
||||
|
||||
BUFFER=176000 ;THIS IS ABOUT THE LEAST DANGEROUS PLACE IN MEMORY TO PUT IT
|
||||
IFN TM10BP, ICWA=20
|
||||
IFN KL10P, PAG==10
|
||||
|
||||
IFN KL10P, .INSRT SYSTEM;EPT
|
||||
|
||||
CM=0
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
TT=6
|
||||
I=7 .SEE DING
|
||||
Q=10
|
||||
J=11
|
||||
R=12
|
||||
W=13
|
||||
H=14
|
||||
P=17
|
||||
T=16
|
||||
U=15
|
||||
|
||||
MTC=340 ;MAG TAPE CHANNEL FOR FUNCTIONS
|
||||
MTS=344 ;MAG TAPE CHANNEL FOR STOPPING AND STATUS
|
||||
|
||||
;SHIFTS FOR FIELDS IN CONO MTC,
|
||||
UNITNO==15.
|
||||
PARITY==14.
|
||||
CDUMP==13.
|
||||
FUNC==9.
|
||||
DENSTY==6.
|
||||
|
||||
800BPI==2
|
||||
556BPI==1
|
||||
|
||||
MAGCOM=0_<UNITNO>+1_<PARITY>+800BPI_<DENSTY>+1_<CDUMP>
|
||||
|
||||
;FUNCTIONS
|
||||
NOOP1=0_<FUNC>+MAGCOM ;CLEAR INTERRUPT FLAGS
|
||||
NOOP2=10_<FUNC>+MAGCOM ;INTERRUPT WHEN TRANSPORT IDLE
|
||||
REWIND=1_<FUNC>+MAGCOM ;REWIND
|
||||
READ=2_<FUNC>+MAGCOM ;READ
|
||||
READAB=12_<FUNC>+MAGCOM ;READ ACROSS RECORD BOUNDARIES
|
||||
READC=3_<FUNC>+MAGCOM ;READ/COMPARE
|
||||
RDCAB=13_<FUNC>+MAGCOM ;READ/COMPARE ACROSS RECORD BOUNDARIES
|
||||
WRITE=4_<FUNC>+MAGCOM ;WRITE
|
||||
WRLEOR=14_<FUNC>+MAGCOM ;WRITE WITH LONG EOR GAP
|
||||
WEOF=5_<FUNC>+MAGCOM ;WRITE EOF
|
||||
SKIPF=6_<FUNC>+MAGCOM ;SPACE FOWARD ONE OR MORE RECORDS
|
||||
SKFEOF=16_<FUNC>+MAGCOM ;SPACE TO EOF
|
||||
SKIPB=7_<FUNC>+MAGCOM ;SPACE REVERSE ONE OR MORE RECORDS
|
||||
SKBEOF=17_<FUNC>+MAGCOM ;SPACE REVERSE TO EOF
|
||||
|
||||
;FLAGS
|
||||
JOBDON==100
|
||||
DATREQ==1
|
||||
EOF==10000
|
||||
EOT==4000
|
||||
|
||||
RELOC=740000
|
||||
DDT=RELOC+34000
|
||||
|
||||
LOC RELOC+37200
|
||||
|
||||
LOZAD=.-1
|
||||
LOW=20
|
||||
HIGH=.
|
||||
|
||||
DIRL==3 ;# WORDS PER DIRECTORY ENTRY
|
||||
|
||||
DEFINE INFORM A,B
|
||||
IF2 [PRINTX \A = B
|
||||
\]
|
||||
TERMIN
|
||||
|
||||
GO:
|
||||
IFE KL10P, CONO 635550
|
||||
IFN KL10P,[
|
||||
CONO APR,267760 ;I/O RESET, CLEAR AND DISABLE ALL APR FLAGS
|
||||
CONO PI,010000 ;CLEAR P.I. SYSTEM
|
||||
CONSZ PAG,620000 ;THE CACHE BETTER BE OFF & TRAPS DISABLED
|
||||
JRST 4,.
|
||||
]
|
||||
MOVEI P,PDL-1
|
||||
MOVE B,['MAGDMP]
|
||||
GO00: MOVEI A,0
|
||||
LSHC A,6
|
||||
ADDI A,40
|
||||
PUSHJ P,TYP
|
||||
JUMPN B,GO00
|
||||
CONO MTS,1 ;STOP ANY HRI HACKERY
|
||||
GODIR: PUSHJ P,REW ;REWIND TAPE
|
||||
PUSHJ P,MTWAIT
|
||||
PUSHJ P,SKPFE ;SKIP OVER HRI FILE
|
||||
MOVEI A,DIR-1 ;POINTER TO READ INTO
|
||||
DIRLP: PUSHJ P,RREC ;READ HEADER RECORD
|
||||
AOJA A,DIREOF ;GOT EOF
|
||||
CAIGE R,3 ;SKIP IF RECORD ADEQUATELY LONG
|
||||
JRST DING
|
||||
PUSH A,BUFFER ;STORE 3 WORDS IN DIR
|
||||
PUSH A,BUFFER+1 ;..
|
||||
PUSH A,BUFFER+2 ;..
|
||||
PUSHJ P,SKPFE ;SKIP OVER REST OF HEADER FILE
|
||||
PUSHJ P,SKPFE ;SKIP OVER PROGRAM FILE
|
||||
JRST DIRLP
|
||||
|
||||
DIREOF: HRRZM A,DIREND ;ADDRESS OF FIRST WORD AFTER DIRECTORY
|
||||
DIRIN: MOVEI P,PDL-1
|
||||
PUSHJ P,REW
|
||||
GOR: PUSHJ P,CRR
|
||||
SETZ CM,
|
||||
SETZB U,RDWR
|
||||
CMD1: SETZM J ;J = VERS #, U = # CHARS TYPED
|
||||
MOVNI E,3
|
||||
MOVSI H,(SETZ) ;FN1
|
||||
SPACE: AOJE E,TYVER
|
||||
EXCH W,H ;FN1
|
||||
MOVSI H,(SETZ) ;FN2
|
||||
SKIPA R,[440600,,H]
|
||||
TYVER: MOVE R,[220600,,J]
|
||||
DOVR:
|
||||
IFN 340P,[
|
||||
CONO DIS,100
|
||||
CONSZ TTY,40
|
||||
JRST TTY1
|
||||
MOVEI A,DIR
|
||||
MOVNI C,1
|
||||
DNEXT: SUBI C,DTBL
|
||||
DLUP: XCT DTB+DTBL(C)
|
||||
DLUP2: TDC B,[404040,,404040]
|
||||
DATAO DIS,B
|
||||
MOVEI TT,200
|
||||
SOJG TT,.
|
||||
AOJL C,DLUP
|
||||
ADDI A,DIRL
|
||||
CAME A,DIREND
|
||||
JRST DNEXT
|
||||
JRST DOVR
|
||||
|
||||
SKIPA B,[020156,,261743]
|
||||
DTB: MOVE B,(A) ;FN1
|
||||
MOVEI B,757575 ;3 SPACES AND 3 SHIFT INS
|
||||
MOVE B,1(A) ;FN2
|
||||
HRRZ B,2(A) ;VERSION #
|
||||
MOVEI B,747375 ;CR LF
|
||||
DTBL==.-DTB
|
||||
];END IFN 340P
|
||||
|
||||
TTY1:
|
||||
IFE KL10P+340P,[
|
||||
CONSO TTY,40
|
||||
JRST .-1
|
||||
]
|
||||
IFE KL10P, DATAI TTY,A
|
||||
IFN KL10P, MOVEI A,3400
|
||||
.ALSO PUSHJ P,DTEXIO
|
||||
.ALSO JUMPE A,.-2
|
||||
PUSHJ P,TYP ;ECHO CHAR JUST READ
|
||||
ORCMI A,177 ;SAME AS ANDI A,177 ? SUBI A,200
|
||||
AOJE A,GOR ;RUBOUT. RESET (A-177)
|
||||
AOJ A, ;(A-176)
|
||||
AOJGE A,ALTTST ;(A-175 .GE. 0, I.E. A=175,176) ALTMODE
|
||||
ADDI A,135 ;(A-40) SIXBIT
|
||||
JUMPL A,[TRNE A,10
|
||||
JRST ALTTST ;33 ALTMODE
|
||||
JRST CARRET] ;15 OR 12
|
||||
CAIL A,100
|
||||
SUBI A,40 ;MIGHT BE LOWER CASE TTY
|
||||
JUMPE A,SPACE
|
||||
TLNE R,770000
|
||||
IDPB A,R
|
||||
AOJA U,DOVR
|
||||
|
||||
ALTTST: SOJLE U,ALTMD ;0 OR 1 CHARS BEFORE ALT
|
||||
CARRET: JUMPE J,VEROK ;NO VER #
|
||||
VERADJ: TRNE J,77
|
||||
JRST VEROK1
|
||||
LSH J,-6
|
||||
JRST VERADJ
|
||||
|
||||
VEROK1: IORI J,202020
|
||||
VEROK: PUSHJ P,MTWAIT
|
||||
SETOB B,D ;B= HIGHEST VER # FOUND, D = INDEX
|
||||
MOVEI A,DIR
|
||||
LOOKL: CAMN W,(A)
|
||||
CAME H,1(A)
|
||||
JRST LOOKE
|
||||
HRRZ C,2(A)
|
||||
JUMPE J,LOOK1
|
||||
CAMN C,J
|
||||
JRST LOOK2
|
||||
LOOKE: ADDI A,DIRL
|
||||
CAME A,DIREND
|
||||
JRST LOOKL
|
||||
JUMPL CM,LOOKW ;WRITE
|
||||
JUMPL D,ERR ;NOT FOUND FOR READ
|
||||
LOOK2: JUMPL CM,ERR ;WRITE & FILE ALREADY EXISTS
|
||||
SKIPE J
|
||||
MOVE D,A
|
||||
MOVEI A,LOZAD+1 ;FIRST LOCATION NOT TO ZERO
|
||||
IFE KL10P,[
|
||||
SETZM 40
|
||||
MOVE C,[40,,41]
|
||||
]
|
||||
IFN KL10P,[
|
||||
SETZM 3000 ;DEPENDS ON WHERE EPT IS, ETC.
|
||||
MOVE C,[3000,,3001]
|
||||
]
|
||||
CAIN CM,'T
|
||||
MOVE A,@DDT-1 ;ZERO ONLY UP TO DDT SYMS
|
||||
CAIE CM,'M
|
||||
BLT C,-1(A) ;ZERO CORE UNLESS MERGING
|
||||
MOVEI A,-DIR+DIRL(D)
|
||||
IDIVI A,DIRL
|
||||
LSH A,1 ;# FILES TO SKIP
|
||||
LOOKF1: PUSHJ P,SKPFE ;SKIP A FILE
|
||||
SOJG A,LOOKF1
|
||||
MOVEI R,-1 ;SO CRD WILL READ A RECORD
|
||||
SETOB E,RDWR
|
||||
LOADJ1: PUSHJ P,CRD ;READ UP TO 'JRST 1'
|
||||
CAME A,[JRST 1]
|
||||
JRST LOADJ1
|
||||
LOAD: PUSHJ P,LODUMP
|
||||
CAMN Q,A ;COMPARE CHECKSUM
|
||||
JRST LOAD ;CHECKS, LOOP
|
||||
;DROP THROUGH IF ERROR
|
||||
;DROPS IN
|
||||
DING:
|
||||
ERR: PUSH P,ERRX ;DIRIN'S BANE, RESET PDL.
|
||||
SKIPA A,GCTL ;= ^G
|
||||
CRR: HRROI A,^M
|
||||
TYP:
|
||||
IFE KL10P,[
|
||||
CONSZ TTY,20
|
||||
JRST .-1
|
||||
DATAO TTY,A
|
||||
JUMPGE A,CPOPJ
|
||||
MOVEI A,12
|
||||
JRST TYP
|
||||
]
|
||||
IFN KL10P,[
|
||||
PUSH P,A ;DON'T CLOBBER A
|
||||
PUSHJ P,DTEXIO
|
||||
POP P,A
|
||||
JUMPGE A,CPOPJ
|
||||
MOVEI A,12
|
||||
|
||||
DTEXIO: SETZM DTEFLG
|
||||
HRRZM A,DTECMD
|
||||
SETZM DTEF11
|
||||
CONO DTE,%DBL11
|
||||
SKIPN DTEFLG
|
||||
JRST .-1
|
||||
MOVE A,DTEF11
|
||||
SETZM DTEFLG
|
||||
POPJ P,
|
||||
]
|
||||
|
||||
IFE 340P,[ ;REST OF LISTF COMMAND
|
||||
LISTF1: MOVSI C,440600+D ;ON KL10, WON'T FIT EITHER ABOVE OR BELOW -400
|
||||
LISTF2: ILDB A,C
|
||||
ADDI A,40
|
||||
PUSHJ P,TYP
|
||||
MOVEI A,40
|
||||
TLNN C,770000
|
||||
XCT LISTFB(C) ;END OF WORD, DO SPECIAL FROB
|
||||
JRST LISTF2
|
||||
];340P
|
||||
|
||||
IFG .-<RELOC+37400>, .ERR BARF AT -400
|
||||
|
||||
LOC RELOC+37400
|
||||
JRST DIRIN
|
||||
|
||||
IFE 340P,[ ;F COMMAND
|
||||
LISTF: MOVEI D,DIR-DIRL
|
||||
LISTF0: PUSHJ P,CRR
|
||||
ADDI D,DIRL
|
||||
CAME D,DIREND
|
||||
JRST LISTF1
|
||||
JRST GOR
|
||||
|
||||
LISTFB: PUSHJ P,TYP ;SPACE AFTER FN1
|
||||
PUSHJ P,TYP ;SPACE AFTER FN2
|
||||
JRST LISTF0 ;AFTER LENGTH, VERSION, LOOP BACK FOR NEXT FILE
|
||||
]
|
||||
|
||||
JBLK: CAILE CM,'M ;SKIP IF SYMS NOT NEEDED
|
||||
AOJE E,LOAD ;E = 0 => LOADING SYMS
|
||||
PUSHJ P,REW
|
||||
JUMPG E,DDTG ;JUMP IF SYMS JUST READ
|
||||
HRRM A,SADR
|
||||
JUMPN CM,GOR
|
||||
SADR: JRST GOR
|
||||
|
||||
DDTG: HRROS DDT-1
|
||||
JRST DDT
|
||||
|
||||
LOOK1: CAMG C,B
|
||||
JRST LOOKE
|
||||
MOVE B,C
|
||||
MOVE D,A
|
||||
JRST LOOKE
|
||||
|
||||
ALTMD: MOVEI A,"$
|
||||
PUSHJ P,TYP
|
||||
JUMPL U,GODIR ;GET NEW DIR
|
||||
LDB CM,R ;CMD
|
||||
IFE 340P,[
|
||||
CAIN CM,'F
|
||||
JRST LISTF
|
||||
]
|
||||
CAIN CM,'D
|
||||
MOVNI CM,1
|
||||
CAIN CM,'G
|
||||
JRST SADR
|
||||
JRST CMD1
|
||||
|
||||
LOOKW: JUMPN J,LOOKW2 ;USE VER # IN J
|
||||
SKIPGE B
|
||||
MOVEI B,202020
|
||||
SUBI B,9_6+9
|
||||
TRNN B,20
|
||||
JRST LOOKW1
|
||||
TRNE B,20_6
|
||||
ADDI B,1_12.-10._6
|
||||
ADDI B,10._6-<9_6+10.>
|
||||
LOOKW1: HRRZI J,<9_6+10.>(B)
|
||||
LOOKW2: MOVE B,DIREND
|
||||
CAIN B,DIRF
|
||||
JRST ERR ;DIRFULL
|
||||
ADDI B,DIRL
|
||||
EXCH B,DIREND
|
||||
MOVEM W,(B)
|
||||
MOVEM H,1(B)
|
||||
HRRZM J,2(B)
|
||||
SETO E, ;FLAG FOR WHETHER CODE OR SYMBOLS
|
||||
LOOKWL: PUSHJ P,SKPFE
|
||||
IFE TM10BP, PUSHJ P,SKPREC
|
||||
IFN TM10BP,[ SETZM ICWA ;MTWAIT CLEARS EOF FLAG
|
||||
CONO MTC,SKIPF
|
||||
CONSO MTS,JOBDON
|
||||
JRST .-1
|
||||
]
|
||||
CONSO MTS,EOF ;2 EOFS?
|
||||
JRST LOOKWL
|
||||
CONO MTC,SKBEOF ;SKIP BACK OVER LAST EOF
|
||||
PUSHJ P,MTWAIT
|
||||
MOVEI R,0 ;WRITE HEADER
|
||||
HRLI B,-3
|
||||
MOVE A,(B)
|
||||
PUSHJ P,CWD
|
||||
AOBJN B,.-2
|
||||
PUSHJ P,CWDEOR
|
||||
PUSHJ P,WREOF
|
||||
MOVE A,[JRST 1] ;PUT PROGRAM HEADER
|
||||
MOVEM A,BUFFER ;NOTE - R NOW CONTAINS 1
|
||||
MOVEI I,LOW
|
||||
DMP1: CAIL I,BUFFER ;DON'T DUMP THE BUFFER!!
|
||||
CAILE I,BUFFER+2000
|
||||
SKIPN (I) ;FIND SOME NON-ZERO CORE
|
||||
AOJA I,DMP1 ;SINCE LOC(HIGH) IS NON-ZERO, DON'T HAVE TO CAIE I,HIGH
|
||||
MOVEM I,Q ;SAVE BEGINNING POINTER
|
||||
HRRZI A,200(I) ;MAX BLOCK SIZE
|
||||
DMP1B: SKIPN (I) ;FIND SOME ZERO CORE
|
||||
SKIPE 1(I) ;DON'T MAKE NEW BLOCK FOR 1 ZERO
|
||||
CAMLE I,A ;DON'T MAKE BLOCK TOO BIG, EITHER
|
||||
JRST DMP1A
|
||||
CAIE I,HIGH ;STOP WHEN BEGINNING OF MAGDMP REACHED
|
||||
AOJA I,DMP1B
|
||||
DMP1A: MOVE A,Q ;CONSTRUCT AOBJN POINTER
|
||||
GCTL: SUB Q,I .SEE DING ;RH GETS - # WDS IN BLK
|
||||
HRL A,Q
|
||||
JUMPGE A,DMPEND ;EITHER BLOCK > 128K OR REACHED END OF CORE
|
||||
PUSHJ P,LODUMP
|
||||
JRST DMP1
|
||||
|
||||
DMPEND: MOVE A,SADR ;END OF PROG, PUT STARTING ADDRESS
|
||||
PUSHJ P,CWD ;WRITE JUMP BLOCK
|
||||
PUSHJ P,CWD ;TWICE (NO SYMBOLS)
|
||||
PUSHJ P,CWDEOR
|
||||
PUSHJ P,WREOF ;THEN PUT TWO EOFS FOR LOGICAL EOT
|
||||
PUSHJ P,WREOF
|
||||
ERRX: JRST DIRIN
|
||||
|
||||
LODUMP: PUSHJ P,CWD ;READ OR WRITE HEADER
|
||||
MOVE Q,A ;BEGIN CHECKSUM
|
||||
JUMPGE A,JBLK ;JUMP IF NOT AOBJN POINTER
|
||||
JUMPL E,DMP5 ;IF NOT LOADING SYMS
|
||||
MOVS U,A
|
||||
HRLI U,-1(U)
|
||||
ADDB U,@DDT-1
|
||||
HRR A,U
|
||||
DMP5: MOVE B,A ;READ OR WRITE BLOCK OF WORDS
|
||||
DMP6: ROT Q,1
|
||||
HRRZ J,B
|
||||
CAIL J,20
|
||||
CAIL J,LOZAD
|
||||
MOVEI J,H
|
||||
MOVE A,(J)
|
||||
PUSHJ P,CWD
|
||||
MOVEM A,(J)
|
||||
ADD Q,A
|
||||
AOBJN B,DMP6
|
||||
TLNE B,-2
|
||||
JRST DMP6
|
||||
MOVE A,Q
|
||||
JRST CWD ;READ OR WRITE THE CHECKSUM
|
||||
|
||||
IFN TM10BP,[
|
||||
|
||||
; READ NEXT RECORD INTO BUFFER
|
||||
; RETURNS RECORD LENGTH IN R, DISTURBS T,W ALSO.
|
||||
; SKIP RETURN UNLESS EOF
|
||||
|
||||
RREC: MOVEI T,READ
|
||||
MOVSI R,-2000_<0+IFN KL10P,[4]>
|
||||
MTOPR: HRRI R,BUFFER-1
|
||||
MOVEM R,ICWA
|
||||
SETZM ICWA+1
|
||||
DATAO MTS,[ICWA]
|
||||
CONO MTC,(T)
|
||||
CONSO MTS,JOBDON
|
||||
JRST .-1
|
||||
SKIPN R,ICWA+1 ;LAST DATA ADDRESS
|
||||
JRST .-1 ;CONTROL WORD NOT WRITTEN YET, WAIT
|
||||
MOVEI R,1-BUFFER(R) ;CONVERT TO # WORDS XFERRED
|
||||
CONSO MTS,EOF+EOT ;SKIP RETURN UNLESS EOF
|
||||
AOS (P)
|
||||
POPJ P,
|
||||
|
||||
; WRITE RECORD FROM BUFFER
|
||||
; TAKES RECORD LENGTH IN R, RETURNS # WORDS ACTUALLY
|
||||
; WRITTEN IN R, WHICH I ASSUME WOULD BE THE SAME
|
||||
; DISTURBS T,W. SKIP RETURN UNLESS EOT.
|
||||
|
||||
WREC: MOVEI T,WRITE
|
||||
MOVN R,R
|
||||
LSH R,18.+IFN KL10P,4
|
||||
JRST MTOPR
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
IFE TM10BP,[
|
||||
|
||||
; READ NEXT RECORD INTO BUFFER
|
||||
; RETURNS RECORD LENGTH IN R, DISTURBS T,W ALSO.
|
||||
; SKIP RETURN UNLESS EOF
|
||||
|
||||
RREC: MOVEI T,READ
|
||||
MOVSI R,(DATAI MTC,)
|
||||
MOVEI W,2000
|
||||
MTOPR: HRRI R,BUFFER-1
|
||||
CONO MTC,(T)
|
||||
MTOPRL: CONSO MTS,JOBDON+DATREQ
|
||||
JRST .-1
|
||||
CONSZ MTS,DATREQ
|
||||
AOJA R,[ XCT R ? SOJG W,MTOPRL ? JRST .+1 ]
|
||||
CONO MTS,1 ;END RECORD HERE
|
||||
MOVEI R,1-BUFFER(R) ;CONVERT TO # WORDS XFERRED
|
||||
CONSO MTS,EOF+EOT ;SKIP RETURN UNLESS EOF
|
||||
AOS (P)
|
||||
JRST MTWAIT ;WAIT FOR JOBDON TO COME ON BEFORE RETURNING
|
||||
|
||||
; WRITE RECORD FROM BUFFER
|
||||
; TAKES RECORD LENGTH IN R, RETURNS # WORDS ACTUALLY
|
||||
; WRITTEN IN R, WHICH I ASSUME WOULD BE THE SAME
|
||||
; DISTURBS T, W. SKIP RETURN UNLESS EOT.
|
||||
|
||||
WREC: MOVEI T,WRITE
|
||||
MOVSI W,(DATAO MTC,)
|
||||
EXCH W,R
|
||||
JRST MTOPR
|
||||
]
|
||||
|
||||
CWD: SKIPGE RDWR ;PROCESS WORD IN OR OUT OF A
|
||||
JRST CRD
|
||||
CAIGE R,2000
|
||||
JRST CWD1
|
||||
CWDEOR: PUSHJ P,WREC
|
||||
JRST DING
|
||||
MOVEI R,0
|
||||
CWD1: MOVEM A,BUFFER(R)
|
||||
AOJA R,CPOPJ
|
||||
|
||||
CRD: MOVE A,BUFFER(R) ;READ NEXT WORD INTO A
|
||||
CAMGE R,RECLEN
|
||||
AOJA R,CPOPJ ;RETURN IF THAT WAS A VALID WORD
|
||||
PUSHJ P,RREC ;NEED NEW RECORD
|
||||
JRST DING ;SHOULDN'T HAVE RANDOM EOF
|
||||
MOVEM R,RECLEN
|
||||
MOVEI R,0
|
||||
JRST CRD
|
||||
|
||||
WREOF: CONO MTC,WEOF ;WRITE EOF, FALL INTO MTWAIT
|
||||
|
||||
MTWAIT: CONSO MTS,JOBDON
|
||||
JRST .-1
|
||||
CONO MTC,NOOP1 ;CLEAR FLAGS
|
||||
POPJ P,
|
||||
|
||||
REW: CONO MTC,REWIND ;BEGIN REWIND
|
||||
CONSO MTS,JOBDON ;WAIT TILL REWIND BEGINS
|
||||
JRST .-1
|
||||
CONO MTC,NOOP2 ;CAUSE JOBDON WHEN REWIND DONE
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
IFN TM10BP,[
|
||||
SKPFE: SETZM ICWA ;SPACE FILE
|
||||
CONO MTC,SKFEOF
|
||||
JRST MTWAIT
|
||||
]
|
||||
|
||||
IFE TM10BP,[
|
||||
SKPREC: JSP T,SKP ;SPACE RECORD
|
||||
CONO MTS,1
|
||||
|
||||
SKPFE: JSP T,SKP ;SPACE FILE
|
||||
DATAO MTC,0
|
||||
|
||||
SKP: CONO MTC,SKIPF
|
||||
SKPL: CONSZ MTS,JOBDON
|
||||
POPJ P,
|
||||
CONSZ MTS,DATREQ
|
||||
XCT (T)
|
||||
JRST SKPL
|
||||
]
|
||||
|
||||
PDL: BLOCK 6
|
||||
DIREND: DIR
|
||||
RECLEN: 0
|
||||
RDWR: 0 ;-1 => READ
|
||||
|
||||
CONSTANTS
|
||||
VARIABLES
|
||||
|
||||
DIR: BLOCK 20.*DIRL ;DIRECTORY AREA FOR 20. FILES
|
||||
DIRF:
|
||||
|
||||
;DIRECTORY FORMAT
|
||||
;WD1: FN1
|
||||
;WD2: FN2
|
||||
;WD3: LH => LENGTH IN 2000 WD BLOCKS IN SIXBIT
|
||||
; RH => VERSION NUMBER IN SIXBIT
|
||||
|
||||
INFORM HIGH,\.
|
||||
|
||||
IFN .,[
|
||||
IFL .-RELOC, .ERR BLOAT
|
||||
IFG .-<RELOC+37777>, .ERR BLOAT
|
||||
]
|
||||
|
||||
END GO
|
||||
|
||||
Reference in New Issue
Block a user