mirror of
https://github.com/PDP-10/its.git
synced 2026-01-31 14:02:09 +00:00
1094 lines
22 KiB
Plaintext
Executable File
1094 lines
22 KiB
Plaintext
Executable File
|
||
IF1 TITLE CNVRT - KL10 MICROCODE, etc. ASCIIZER
|
||
|
||
.MLLIT==1
|
||
|
||
A=1 ;ARG/TEMP
|
||
B=2 ;..
|
||
C=3 ;..
|
||
D=4 ;..
|
||
E=5 ;..
|
||
T=6 ;TEMP
|
||
TT=7 ;TEMP
|
||
H=10 ;ARG TO ASCIIZING ROUTINE
|
||
I=11 ;..
|
||
J=12 ;..
|
||
Q=13 ;..
|
||
IX=14 ;INPUT INDEX IN MICROCODE ASCIIZER
|
||
OX=15 ;OUTPUT ..
|
||
COD=16 ;TYPE OF CODE BEING ASCIIZED
|
||
P=17 ;PDL POINTER
|
||
|
||
TYIC==1
|
||
TYOC==2
|
||
INCH==3
|
||
OUCH==4
|
||
|
||
LBUF==200
|
||
INBUF: BLOCK LBUF
|
||
INPNT: 0
|
||
INCNT: 0
|
||
INBS: 7
|
||
|
||
OUTBUF: BLOCK LBUF
|
||
OUTPNT: 0
|
||
OUTCNT: 0
|
||
OUTBS: 7
|
||
|
||
LPDL==100
|
||
PDL: -LPDL,,.
|
||
BLOCK LPDL
|
||
|
||
RCH: .VALUE ;INSTRUCTION TO READ CHAR INTO A
|
||
|
||
LOSE: 0 ;NON-ZERO IF ERR MSGS PRINTED
|
||
|
||
DEFINE MSG A
|
||
MOVEI TT,[ASCIZ\A\]
|
||
PUSHJ P,MSGO
|
||
TERMIN
|
||
|
||
MSGOT: MOVE TT,T
|
||
MSGO: HRLI TT,440700 ;IMPLEMENT MSG MACRO
|
||
MSGO1: ILDB T,TT
|
||
JUMPE T,CPOPJ
|
||
.IOT TYOC,T
|
||
JRST MSGO1
|
||
|
||
DEFINE POINT (SIZ,ADR,POS=-1
|
||
<<43'-.RADIX 10.,<POS>>_36'+<.RADIX 10.,<SIZ>>_30'+ADR>TERMIN
|
||
|
||
JCLF: 0 ;-1 READING FROM JCL INSTEAD OF TTY
|
||
JCLBUF: BLOCK 20
|
||
JCLEND==.-1
|
||
|
||
DEFINE CONC A,B
|
||
A!B!TERMIN
|
||
|
||
DEFINE SUBTTL A/
|
||
TERMIN
|
||
|
||
SUBTTL I/O ROUTINES
|
||
|
||
;JSP TT,INIT TO SET UP PDL, TYIC, TYOC
|
||
|
||
INIT: MOVE P,PDL
|
||
PUSH P,TT
|
||
.OPEN TYIC,[.UAI,,'TTY]
|
||
.VALUE
|
||
.OPEN TYOC,[%TJDIS+.UAO,,'TTY]
|
||
.VALUE
|
||
.CALL [ SETZ
|
||
SIXBIT /CNSGET/
|
||
MOVEI TYOC
|
||
REPEAT 4,MOVEM NOWHER
|
||
SETZM TT ]
|
||
MOVEI TT,0
|
||
SETZM DISTTY'
|
||
TLNE TT,%TOERS
|
||
SETOM DISTTY
|
||
|
||
SETOM JCLF
|
||
SETZM JCLBUF
|
||
MOVE T,[JCLBUF,,JCLBUF+1]
|
||
BLT T,JCLEND
|
||
.BREAK 12,[5,,JCLBUF]
|
||
MOVE T,[440700,,JCLBUF]
|
||
MOVEM T,JCLP'
|
||
SKIPN JCLBUF
|
||
SETZM JCLF
|
||
MOVE T,[PUSHJ P,TYIMAN]
|
||
MOVEM T,RCH
|
||
POPJ P,
|
||
|
||
;READ CHARACTER FROM JCL OR TTY
|
||
;CHAR RETURNED IN T
|
||
|
||
TYIMAN: SKIPN JCLF
|
||
JRST RCHTYI
|
||
ILDB T,JCLP
|
||
CAIE T,^M
|
||
CAIN T,^C
|
||
CAIA
|
||
JUMPN T,CPOPJ
|
||
MOVEI T,^M ;JCL ENDS WITH ^@, ^C, OR ^M
|
||
SETZM JCLF
|
||
POPJ P,
|
||
|
||
RCHTYI: MOVE T,[.IOT TYIC,T]
|
||
MOVEM T,RCH
|
||
SOS (P)
|
||
POPJ P,
|
||
|
||
;READ SIXBIT SYLLABLE INTO A, RETURN DELIMITER IN T
|
||
;DELIMITERS ARE NON-SIXBIT PLUS COLON, SEMICOLON, QUESTION, AND SPACE
|
||
;SKIP RETURN UNLESS FULLY RUBBED-OUT
|
||
|
||
GETSYL: MOVEI A,0
|
||
MOVE TT,[440600,,A]
|
||
GETSY0: XCT RCH
|
||
CAIN T,177
|
||
JRST GSYRUB
|
||
CAIE T,"?
|
||
CAIG T,40
|
||
JRST POPJ1
|
||
CAIE T,":
|
||
CAIN T,";
|
||
JRST POPJ1
|
||
CAIL T,"a
|
||
CAILE T,"z
|
||
SUBI T,40
|
||
TLNE TT,770000
|
||
IDPB T,TT
|
||
JRST GETSY0
|
||
|
||
GSYRUB: MOVEI T,[ASCIZ/XXX /]
|
||
JUMPL TT,MSGOT ;WHOLE SYLLABLE RUBBED OUT, POPJ
|
||
LDB T,TT
|
||
ADDI T,40
|
||
ADD TT,[060000,,]
|
||
SKIPN DISTTY
|
||
JRST [ .IOT TYOC,T
|
||
JRST GETSY0 ]
|
||
.IOT TYOC,[^P]
|
||
.IOT TYOC,["X]
|
||
JRST GETSY0
|
||
|
||
|
||
;FILE NAME READER. STORES INTO DEVICE, FNAME1, FNAME2, SNAME
|
||
;RETURNS: NO SKIP, FULLY RUBBED OUT. SKIP, WON.
|
||
|
||
FNR: MOVSI T,'DSK ;DEFAULTS
|
||
MOVEM T,DEVICE
|
||
.SUSET [.RSNAME,,SNAME]
|
||
FNR00: SETZM FNAME1 ;FN1 NOT TYPED YET
|
||
SETZM FNAME2
|
||
FNR0: PUSHJ P,GETSYL ;READ NEXT SYLLABLE
|
||
POPJ P, ;FULLY RUBBED OUT
|
||
CAIN T,":
|
||
MOVEM A,DEVICE'
|
||
CAIN T,";
|
||
MOVEM A,SNAME'
|
||
CAIE T,":
|
||
CAIN T,";
|
||
JRST FNR0
|
||
JUMPE A,FNR3
|
||
SKIPN FNAME1
|
||
JRST [ MOVEM A,FNAME1'
|
||
JRST FNR3 ]
|
||
MOVEM A,FNAME2'
|
||
FNR3: CAIL T,40
|
||
JRST FNR0
|
||
SKIPE TT,FNAME1 ;IF FN1 GIVEN, BUT NOT FN2,
|
||
MOVE TT,2NDNIN(COD) ;DEFAULT FN2 APPROPRIATELY
|
||
SKIPN FNAME2
|
||
MOVEM TT,FNAME2
|
||
;RETURN WITH DELIM CHAR IN T
|
||
POPJ1: AOS (P)
|
||
CPOPJ: POPJ P,
|
||
|
||
2NDNIN: SIXBIT /MCR/
|
||
SIXBIT /BIN/
|
||
SIXBIT /BIN/
|
||
SIXBIT /A10/
|
||
IF2 IFN .-2NDNIN-LJNMTB, .ERR 2NDNIN TABLE LOSES
|
||
|
||
;READ CHARACTER FROM INCH, RETURN IN T.
|
||
|
||
RDCH: SOSG INCNT
|
||
PUSHJ P,RDCH1
|
||
ILDB T,INPNT
|
||
POPJ P,
|
||
|
||
RDCH1: PUSH P,TT ;GETSYL WANTS TT PROTECTED
|
||
MOVEI T,36. ;BUFFER REFILL
|
||
IDIV T,INBS
|
||
MOVE TT,[-LBUF,,INBUF]
|
||
.IOT INCH,TT
|
||
MOVEI TT,-INBUF(TT)
|
||
IMUL TT,T
|
||
MOVEM TT,INCNT
|
||
JUMPE TT,EOFHAN ;@EOFHAN(COD) ?
|
||
MOVE T,INBS
|
||
LSH T,18.+6
|
||
TLO T,440000
|
||
HRRI T,INBUF
|
||
MOVEM T,INPNT
|
||
POPTTJ: POP P,TT
|
||
POPJ P,
|
||
|
||
EOFHAN: MSG UNEXPECTED E-O-F
|
||
.VALUE
|
||
|
||
REWIND: .ACCESS INCH,[0]
|
||
SETZM INCNT ;CAUSE BUFFER RELOAD ON NEXT RDCH
|
||
POPJ P,
|
||
|
||
;WRITE CHARACTER IN A ONTO OUCH, CLOBBER T,TT
|
||
|
||
WRCH: SOSG OUTCNT
|
||
PUSHJ P,WRBUF
|
||
IDPB A,OUTPNT
|
||
POPJ P,
|
||
|
||
WRBUF: SKIPN T,OUTPNT ;PAD TO WORD
|
||
JRST WRBUF1
|
||
IBP T
|
||
HRRZS T
|
||
CAIE T,@OUTPNT
|
||
JRST WRBUF0
|
||
MOVEI T,^C
|
||
IDPB T,OUTPNT
|
||
JRST WRBUF
|
||
|
||
WRBUF0: MOVE T,OUTPNT
|
||
HRLOI T,-OUTBUF(T)
|
||
EQVI T,OUTBUF
|
||
.IOT OUCH,T
|
||
WRBUF1: MOVEI T,36.
|
||
IDIV T,OUTBS
|
||
IMULI T,LBUF
|
||
MOVEM T,OUTCNT
|
||
MOVE T,OUTBS
|
||
LSH T,18.+6
|
||
TLO T,440000
|
||
HRRI T,OUTBUF
|
||
MOVEM T,OUTPNT
|
||
POPJ P,
|
||
|
||
;RETURN OCTAL NUMBER IN B, DELIMITER IN T, CLOBBER A,B,T,TT
|
||
|
||
GETOCT: MOVEI B,0
|
||
GETOC1: XCT RCH
|
||
CAIL T,"0
|
||
CAILE T,"7
|
||
POPJ P,
|
||
IMULI B,8
|
||
ADDI B,-"0(T)
|
||
JRST GETOC1
|
||
|
||
SUBTTL ASCIIZING SUBROUTINES
|
||
|
||
;CALL HERE TO START PUTTING OUT AN ASCIIZED LINE
|
||
;H HAS FIRST CHARACTER, I HAS ADDRESS, J HAS COUNT
|
||
;CHECKSUM WILL BE ACCUMULATED IN Q
|
||
;CLOBBER Q,A,B,C,T,TT
|
||
|
||
11BEG: MOVE Q,J ;INIT CHECKSUM FROM COUNT
|
||
ADD Q,I ; AND ADDRESS
|
||
MOVE A,H ;PUT COMMAND CHAR
|
||
PUSHJ P,WRCH
|
||
MOVEI A,40 ;PUT SPACE
|
||
PUSHJ P,WRCH
|
||
MOVE B,J ;PUT WORD COUNT
|
||
PUSHJ P,11PUT
|
||
PUSHJ P,PUTCMA ;PUT COMMA
|
||
LDB B,[.BP 177777,I]
|
||
PUSHJ P,11PUT ;PUT ADDRESS
|
||
JRST PUTCMA ;PUT COMMA AND RETURN
|
||
|
||
;CALL HERE TO PUT NEXT WORD OF ASCIIZED LINE
|
||
;B HAS WORD. CHECKSUM IN Q. CLOBBERS A,C,T,TT.
|
||
|
||
11WORD: ADD Q,B ;ACCUMULATE CHECKSUM
|
||
PUSHJ P,11PUT ;OUTPUT THE WORD
|
||
JRST PUTCMA ;PUT COMMA AND RETURN
|
||
|
||
;CALL HERE TO END AN ASCIIZED LINE
|
||
;CLOBBERS A,B,C,T,TT
|
||
|
||
11END: MOVN B,Q ;OUTPUT NEGATIVE CHECKSUM
|
||
ANDI B,177777 ;MASKED TO 16 BITS
|
||
PUSHJ P,11PUT
|
||
MOVEI A,15 ;THEN CRLF
|
||
PUSHJ P,WRCH
|
||
MOVEI A,12
|
||
PUSHJ P,WRCH
|
||
POPJ P,
|
||
|
||
PUTCMA: MOVEI A,",
|
||
JRST WRCH
|
||
|
||
;PUT WORD IN B INTO ASCIIZED LINE, 3 CHARS LEADING ZEROS SUPPRESSED
|
||
;CLOBBER A,B,C,T,TT
|
||
|
||
11PUT: MOVE C,[220600,,B]
|
||
JUMPE B,CPOPJ ;SKIP LEADING ZEROS
|
||
ILDB A,C
|
||
JUMPE A,.-1
|
||
11PUT0: CAIGE A,75 ;MAP INTO RANGE 75-174
|
||
ADDI A,100
|
||
PUSHJ P,WRCH ;WRITE OUT CHR
|
||
TLNN C,770000
|
||
POPJ P,
|
||
ILDB A,C ;DO NEXT CHR
|
||
JRST 11PUT0
|
||
|
||
;TYPE OUT OCTAL NUMBER IN T. CLOBBER T,TT.
|
||
|
||
PUTOCT: IDIVI T,8
|
||
HRLM TT,(P)
|
||
SKIPE T
|
||
PUSHJ P,PUTOCT
|
||
HLRZ TT,(P)
|
||
ADDI TT,"0
|
||
.IOT TYOC,TT
|
||
POPJ P,
|
||
|
||
;TYPE OUT SIXBIT WORD IN TT. CLOBBER T,TT.
|
||
|
||
PUTSIX: MOVEI T,0
|
||
LSHC T,6
|
||
ADDI T,40
|
||
.IOT TYOC,T
|
||
JUMPN TT,PUTSIX
|
||
POPJ P,
|
||
|
||
SUBTTL MAIN PROGRAM
|
||
|
||
CNVRT: JSP TT,INIT
|
||
MOVE TT,[.FNAM1]
|
||
PUSHJ P,PUTSIX
|
||
.IOT TYOC,[".]
|
||
MOVE TT,[.FNAM2]
|
||
PUSHJ P,PUTSIX
|
||
.IOT TYOC,[15]
|
||
.SUSET [.RJNAME,,TT]
|
||
MOVSI T,-LJNMTB
|
||
CAME TT,JNMTAB(T)
|
||
AOBJN T,.-1
|
||
JUMPGE T,[MSG [JNAME NOT IN {UCNVRT,MCNVRT,PCNVRT}]
|
||
.BREAK 16,040000 ]
|
||
HRRZ COD,T
|
||
MOVE TT,GREET(COD)
|
||
PUSHJ P,MSGO
|
||
.IOT TYOC,[15]
|
||
|
||
RFN: MOVEI TT,[ASCIZ/FILE: /]
|
||
SKIPN JCLF
|
||
PUSHJ P,MSGO
|
||
PUSHJ P,FNR
|
||
JRST RFN
|
||
.CALL [ SETZ
|
||
SIXBIT/OPEN/
|
||
[.BAI,,INCH]
|
||
DEVICE
|
||
FNAME1
|
||
FNAME2
|
||
SETZ SNAME ]
|
||
JRST [ MSG CANNOT READ FILE
|
||
.VALUE [ASCIZ\î:ERRî\] ]
|
||
.CALL [ SETZ
|
||
SIXBIT/OPEN/
|
||
[.BAO,,OUCH]
|
||
DEVICE
|
||
FNAME1
|
||
2NDNAM(COD)
|
||
SETZ SNAME ]
|
||
JRST [ MSG CANNOT WRITE FILE
|
||
.VALUE [ASCIZ\î:ERRî\] ]
|
||
MOVE TT,[PUSHJ P,RDCH]
|
||
MOVEM TT,RCH
|
||
JRST @CNVRTR(COD)
|
||
|
||
;COME HERE WHEN ALL OUTPUT IS COMPLETE
|
||
|
||
DONE: PUSHJ P,WRBUF ;WRITE OUT LAST BUFFER
|
||
.CLOSE OUCH,
|
||
SKIPE LOSE
|
||
JRST LOST
|
||
MSG DONE
|
||
.BREAK 16,160000
|
||
|
||
LOST: MSG LOST
|
||
.BREAK 16,040000
|
||
|
||
JNMTAB: OFFSET -.
|
||
%%UCOD::SIXBIT/UCNVRT/ ;ASCIIZE SOME MICROCODE
|
||
%%MID:: SIXBIT/MCNVRT/ ;ASCIIZE "MIDAS" (ITS SBLK FORMAT)
|
||
%%PALX::SIXBIT/PCNVRT/ ;ASCIIZE "PALX" (PDP11 ABS PAPER TAPE, 1 BYTE PER WORD)
|
||
%%ASS:: SIXBIT/ACNVRT/ ;PDP10 BINARY DE-ASCIIZER
|
||
OFFSET 0
|
||
LJNMTB==.-JNMTAB
|
||
|
||
GREET: [ASCIZ/KL10 MICROCODE ASCIIZER/]
|
||
[ASCIZ/PDP10 BINARY CODE ASCIIZER/]
|
||
[ASCIZ/PDP11 BINARY CODE ASCIIZER/]
|
||
[ASCIZ/PDP10 ASCII BINARATOR/]
|
||
IFN .-GREET-LJNMTB, .ERR GREET TABLE LOSES
|
||
|
||
2NDNAM: SIXBIT/RAM/
|
||
SIXBIT/A10/
|
||
SIXBIT/A11/
|
||
SIXBIT/BIN/
|
||
IFN .-2NDNAM-LJNMTB, .ERR 2NDNAM TABLE LOSES
|
||
|
||
CNVRTR: UCNVRT
|
||
MCNVRT
|
||
PCNVRT
|
||
ACNVRT
|
||
IFN .-CNVRTR-LJNMTB, .ERR CNVRTR TABLE LOSES
|
||
|
||
SUBTTL MICROCODE ASCIIZER
|
||
|
||
UCNVRT: SETZM DRMCNT'
|
||
SETZM CRMMAX'
|
||
SETZM DRAM ;ZERO OUT BOTH RAMS
|
||
MOVE TT,[DRAM,,DRAM+1]
|
||
BLT TT,CRAM+CRMSIZ*CRMWDS-1
|
||
|
||
MICLP: PUSHJ P,GETSYL ;GET COMMAND WORD
|
||
.VALUE
|
||
JUMPN A,MICL1
|
||
CAIE T,";
|
||
JRST MICLP ;IGNORE RANDOM BLANK LINES ETC
|
||
MICL0: XCT RCH ;SKIP COMMENT
|
||
SKEOL: CAIE T,12
|
||
CAIN T,14
|
||
JRST MICLP
|
||
JRST MICL0
|
||
|
||
MICL1: CAMN A,[SIXBIT/END/]
|
||
JRST DCSHUF ;DONE, SHUFFLE BITS AND OUTPUT
|
||
CAMN A,[SIXBIT/D/]
|
||
JRST STDRAM
|
||
CAME A,[SIXBIT/U/]
|
||
CAMN A,[SIXBIT/V/]
|
||
JRST STCRAM
|
||
MSG RAMDOMNESS IN ALLEGED "MCR" FILE
|
||
.VALUE
|
||
|
||
;STORE INTO C RAM
|
||
|
||
STCRAM: PUSHJ P,GETOCT ;GET C RAM ADDRESS
|
||
CAIL B,CRMSIZ
|
||
JRST [ MSG C RAM DON'T FIT
|
||
.VALUE ]
|
||
CAMLE B,CRMMAX
|
||
MOVEM B,CRMMAX ;REMEMBER MAXIMUM C RAM ADDRESS SEEN
|
||
MOVE I,B
|
||
IMULI I,CRMWDS
|
||
XCT RCH ;SKIP COMMA AFTER ADDRESS
|
||
CAIE T,40
|
||
JRST [ MSG C RAM SEPARATOR NOT SPACE
|
||
.VALUE ]
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 0-11
|
||
LSH B,24.
|
||
MOVE Q,B
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 12-23
|
||
LSH B,12.
|
||
IOR Q,B
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 24-35
|
||
IOR Q,B
|
||
MOVEM Q,CRAM(I) ;STORE 1ST WD
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 36-47
|
||
LSH B,24.
|
||
MOVE Q,B
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 48-59
|
||
LSH B,12.
|
||
IOR Q,B
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 60-71
|
||
IOR Q,B
|
||
MOVEM Q,CRAM+1(I) ;STORE 2ND WD
|
||
PUSHJ P,GETOCT ;GET LISTING BITS 72-83
|
||
LSH B,24.
|
||
HLLOM B,CRAM+2(I) ;STORE 3D WD, RH=-1 TO MARK WORD USED
|
||
JRST SKEOL
|
||
|
||
DRMSIZ==512. ;SIZE OF D RAM
|
||
DRMWDS==1 ;# WORDS PER FROB IN D RAM
|
||
CRMSIZ==1536. ;SIZE OF C RAM
|
||
CRMWDS==3 ;# WORDS PER FROB IN C RAM
|
||
|
||
DRAM: BLOCK DRMSIZ*DRMWDS
|
||
CRAM: BLOCK CRMSIZ*CRMWDS
|
||
11BUF: BLOCK 4*6 ;LOAD UP TO 4 CRAM LOCS AT A TIME
|
||
NOWHER: -1 ;UNUSED BITS GO HERE
|
||
|
||
;STORE INTO D RAM
|
||
|
||
STDRAM: PUSHJ P,GETOCT ;GET D RAM ADDRESS
|
||
CAIL B,DRMSIZ
|
||
JRST [ MSG D RAM DON'T FIT
|
||
.VALUE ]
|
||
AOS DRMCNT ;ANOTHER D RAM ENTRY
|
||
MOVE I,B
|
||
IMULI I,DRMWDS
|
||
XCT RCH ;SKIP COMMA AFTER ADDRESS
|
||
CAIE T,40
|
||
JRST [ MSG D RAM SEPARATOR NOT SPACE
|
||
.VALUE ]
|
||
PUSHJ P,GETOCT ;GET 1ST LISTING WORD, A, B, & P
|
||
HRLZM B,DRAM(I)
|
||
PUSHJ P,GETOCT ;GET 2ND LISTING WORD, J FIELD
|
||
HRRM B,DRAM(I)
|
||
JRST SKEOL
|
||
|
||
;SHUFFLE BITS AND OUTPUT
|
||
|
||
DCSHUF: .CLOSE INCH,
|
||
MOVE TT,DRMCNT
|
||
CAIE TT,DRMSIZ
|
||
JRST [ MSG D RAM NOT FULLY POPULATED
|
||
JRST .+1 ]
|
||
|
||
;ZERO, SHUFFLE, AND OUTPUT C RAM
|
||
|
||
CSHUF: MOVEI H,"Z ;ZERO ALL USED C RAM LOCATIONS
|
||
MOVEI I,0
|
||
MOVEI J,1
|
||
PUSHJ P,11BEG
|
||
MOVE B,CRMMAX
|
||
PUSHJ P,11WORD
|
||
PUSHJ P,11END
|
||
|
||
SETZB I,IX ;START DUMPING C RAM AT ADDRESS 0
|
||
SETOM CRMPRV' ;INIT PREVIOUS ADDRESS
|
||
SETOM CRMBLK' ;INIT CURRENT BLOCK BASE ADDR
|
||
SETZB J,OX ;INIT COUNT OF WORDS IN BLOCK, 11BUF INDEX
|
||
|
||
CSHUF1: PUSHJ P,CWORD ;PROCESS ONE C RAM WORD
|
||
ADDI IX,CRMWDS ;ADVANCE TO NEXT
|
||
CAIGE I,CRMSIZ-1
|
||
AOJA I,CSHUF1
|
||
PUSHJ P,CRMOUT ;OUTPUT ANY RESIDUE
|
||
MOVEI H,"C ;END BLOCK, TYPE C, COUNT 0, ADDR 0 MEANS NO START
|
||
SETZB I,J
|
||
PUSHJ P,11BEG
|
||
PUSHJ P,11END
|
||
|
||
;SHUFFLE AND OUTPUT D RAM
|
||
|
||
DSHUF: SETZB I,IX ;START DUMPING D RAM AT ADDRESS 0
|
||
SETZB J,OX ;INIT COUNT OF WORDS IN BLOCK, 11BUF INDEX
|
||
SETOM DRMBLK'
|
||
|
||
DSHUF1: PUSHJ P,DWORD ;PROCESS TWO D RAM WORDS
|
||
ADDI IX,2*DRMWDS ;ADVANCE TO NEXT
|
||
ADDI I,2
|
||
CAIGE I,DRMSIZ
|
||
JRST DSHUF1
|
||
PUSHJ P,DRMOUT ;OUTPUT ANY RESIDUE
|
||
MOVEI H,"D ;END BLOCK, TYPE D, COUNT 0, ADDR 0 MEANS NO START
|
||
SETZB I,J
|
||
PUSHJ P,11BEG
|
||
PUSHJ P,11END
|
||
JRST DONE
|
||
|
||
;OUTPUT BLOCK OF C RAM INDICATED BY CRMPRV, J
|
||
|
||
CRMOUT: JUMPE J,CRMOU2 ;DON'T PUT ZERO LENGTH BLOCKS
|
||
PUSH P,I
|
||
SKIPGE I,CRMBLK ;GET ADDRESS OF BLOCK
|
||
.VALUE
|
||
CAILE OX,4*6 ;MAKE SURE 11BUF DIDN'T OVERFLOW
|
||
.VALUE
|
||
MOVEI H,"C
|
||
PUSHJ P,11BEG
|
||
MOVNS J
|
||
HRLZS J
|
||
CRMOU1: MOVE B,11BUF(J)
|
||
PUSHJ P,11WORD
|
||
AOBJN J,CRMOU1
|
||
PUSHJ P,11END
|
||
SETZB J,OX
|
||
POP P,I
|
||
CRMOU2: MOVEM I,CRMBLK ;SET BASE ADDRESS OF NEXT BLOCK
|
||
POPJ P,
|
||
|
||
;SHUFFLE AND OUTPUT CRAM WORD POINTED TO BY IX, ADDRESS IN I
|
||
|
||
CWORD: SKIPN CRAM+2(IX)
|
||
POPJ P, ;THIS ADDRESS NOT LOADED
|
||
AOS CRMPRV
|
||
CAME I,CRMPRV
|
||
PUSHJ P,CRMOUT ;ADDRESSES NOT SEQUENTIAL, START NEW BLOCK
|
||
TRNN I,3
|
||
PUSHJ P,CRMOUT ;START NEW BLOCK OF FOUR
|
||
MOVEM I,CRMPRV ;INIT PREV ADDR TO THIS ADDR
|
||
SETZM 11BUF(OX) ;ZERO OUT ACTUAL STORAGE
|
||
MOVEI A,1+11BUF(OX)
|
||
HRLI A,11BUF(OX)
|
||
BLT A,11BUF+5(OX)
|
||
SETZM NOWHER
|
||
SETZB C,D ;INIT BIT COUNTER, PARITY
|
||
MOVE B,[440100,,CRAM(IX)] ;INIT BP TO BITS
|
||
CWORD1: ILDB A,B ;GET NEXT BIT OF LISTING FORMAT C RAM WORD
|
||
JUMPE A,CWORD2 ;FAST IF 0
|
||
DPB A,CRAMPT(C) ;STORE THE BIT
|
||
XORI D,1 ;AND ACCUMULATE PARITY
|
||
CWORD2: CAIGE C,84.-1 ;SKIP IF ALL BITS DONE
|
||
AOJA C,CWORD1
|
||
SKIPE NOWHER ;MAKE ERROR CHECKS
|
||
PUSHJ P,CUNUSD
|
||
SKIPN D
|
||
PUSHJ P,CODDPR
|
||
ADDI J,6 ;OUTPUT 6 WORDS
|
||
ADDI OX,6
|
||
POPJ P,
|
||
|
||
CUNUSD: MSG ATTEMPT TO TURN ON UNUSED BITS
|
||
JRST CRMERR
|
||
|
||
CODDPR: MSG EVEN PARITY
|
||
CRMERR: MSG [ IN C RAM LOCATION ]
|
||
SETOM LOSE
|
||
MOVE T,I
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
POPJ P,
|
||
|
||
;C RAM BIT MAPPING TABLE
|
||
|
||
CRAMPT: POINT 1,NOWHERE,35 ;UNUSED 0
|
||
POINT 1,11BUF+4(OX),25 ;J00
|
||
POINT 1,11BUF+4(OX),26 ;J01
|
||
POINT 1,11BUF+4(OX),27 ;J02
|
||
POINT 1,11BUF+4(OX),28 ;J03
|
||
POINT 1,11BUF+4(OX),29 ;J04
|
||
POINT 1,11BUF+4(OX),30 ;J05
|
||
POINT 1,11BUF+4(OX),31 ;J06
|
||
POINT 1,11BUF+4(OX),32 ;J07
|
||
POINT 1,11BUF+4(OX),33 ;J08
|
||
POINT 1,11BUF+4(OX),34 ;J09 10
|
||
POINT 1,11BUF+4(OX),35 ;J10
|
||
POINT 1,11BUF+0(OX),30 ;AD CRY
|
||
POINT 1,11BUF+3(OX),28 ;AD BOOLE
|
||
POINT 1,11BUF+3(OX),24 ;AD SEL 8
|
||
POINT 1,11BUF+3(OX),25 ;AD SEL 4
|
||
POINT 1,11BUF+3(OX),26 ;AD SEL 2
|
||
POINT 1,11BUF+3(OX),27 ;AD SEL 1
|
||
POINT 1,11BUF+3(OX),29 ;ADA DIS
|
||
POINT 1,11BUF+3(OX),30 ;ADA SEL 2
|
||
POINT 1,11BUF+3(OX),31 ;ADA SEL 1 20
|
||
POINT 1,NOWHERE,34 ;UNUSED
|
||
POINT 1,11BUF+3(OX),32 ;ADB SEL 2
|
||
POINT 1,11BUF+2(OX),20 ;ADB SEL 1
|
||
POINT 1,11BUF+2(OX),33 ;ARM SEL 4
|
||
POINT 1,11BUF+0(OX),20 ;ARM SEL 2
|
||
POINT 1,11BUF+0(OX),22 ;ARM SEL 1
|
||
POINT 1,11BUF+2(OX),24 ;ARXM SEL 4
|
||
POINT 1,11BUF+0(OX),24 ;ARXM SEL 2
|
||
POINT 1,11BUF+0(OX),26 ;ARXM SEL 1
|
||
POINT 1,11BUF+1(OX),24 ;BR LOAD 30
|
||
POINT 1,11BUF+1(OX),26 ;BRX LOAD
|
||
POINT 1,11BUF+3(OX),20 ;MQ SEL
|
||
POINT 1,11BUF+1(OX),28 ;FM ADR SEL 4
|
||
POINT 1,11BUF+1(OX),29 ;FM ADR SEL 2
|
||
POINT 1,11BUF+1(OX),30 ;FMADR SEL 1 35
|
||
POINT 1,11BUF+4(OX),21 ;SCAD 4 36
|
||
POINT 1,11BUF+4(OX),22 ;SCAD 2
|
||
POINT 1,11BUF+4(OX),23 ;SCAD 1
|
||
POINT 1,11BUF+4(OX),20 ;SCADA DIS
|
||
POINT 1,11BUF+2(OX),28 ;SCADA SEL 2 40
|
||
POINT 1,11BUF+2(OX),29 ;SCADA SEL 1
|
||
POINT 1,NOWHERE,33 ;UNUSED
|
||
POINT 1,11BUF+2(OX),30 ;SCADB SEL 2
|
||
POINT 1,11BUF+1(OX),32 ;SCADB SEL 1
|
||
POINT 1,NOWHERE,32 ;UNUSED
|
||
POINT 1,11BUF+1(OX),34 ;SCM SEL 2
|
||
POINT 1,11BUF+4(OX),24 ;FE LOAD
|
||
POINT 1,NOWHERE,31 ;UNUSED
|
||
POINT 1,11BUF+2(OX),34 ;ARMM SEL 2
|
||
POINT 1,11BUF+2(OX),35 ;ARMM SEL 1 50
|
||
POINT 1,NOWHERE,30 ;UNUSED
|
||
POINT 1,11BUF+2(OX),32 ;VMAM SEL 2
|
||
POINT 1,11BUF+0(OX),28 ;VMAM SEL 1
|
||
POINT 1,11BUF+0(OX),32 ;T00
|
||
POINT 1,11BUF+0(OX),34 ;T01
|
||
POINT 1,11BUF+1(OX),20 ;MEM 00
|
||
POINT 1,11BUF+1(OX),21 ;MEM 01
|
||
POINT 1,11BUF+1(OX),22 ;MEM 02
|
||
POINT 1,11BUF+1(OX),23 ;MEM 03
|
||
POINT 1,11BUF+3(OX),21 ;COND 00 60
|
||
POINT 1,11BUF+3(OX),22 ;COND 01
|
||
POINT 1,11BUF+3(OX),23 ;COND 02
|
||
POINT 1,11BUF+1(OX),25 ;COND 03
|
||
POINT 1,11BUF+1(OX),27 ;COND 04
|
||
POINT 1,11BUF+1(OX),31 ;COND 05
|
||
POINT 1,NOWHERE,29 ;UNUSED
|
||
POINT 1,11BUF+5(OX),31 ;SPEC 00
|
||
POINT 1,11BUF+5(OX),32 ;SPEC 01
|
||
POINT 1,11BUF+5(OX),33 ;SPEC 02
|
||
POINT 1,11BUF+5(OX),34 ;SPEC 03 70
|
||
POINT 1,11BUF+5(OX),35 ;SPEC 04 71
|
||
POINT 1,NOWHERE,28 ;UNUSED 72
|
||
POINT 1,NOWHERE,27 ;UNUSED
|
||
POINT 1,11BUF+2(OX),31 ;MARK
|
||
POINT 1,11BUF+3(OX),33 ;# 00
|
||
POINT 1,11BUF+3(OX),34 ;# 01
|
||
POINT 1,11BUF+3(OX),35 ;# 02
|
||
POINT 1,11BUF+2(OX),21 ;# 03
|
||
POINT 1,11BUF+2(OX),22 ;# 04
|
||
POINT 1,11BUF+2(OX),23 ;# 05 80
|
||
POINT 1,11BUF+2(OX),25 ;# 06
|
||
POINT 1,11BUF+2(OX),26 ;# 07
|
||
POINT 1,11BUF+2(OX),27 ;# 08 83
|
||
|
||
;OUTPUT BLOCK OF D RAM INDICATED BY I, J
|
||
|
||
DRMOUT: JUMPE J,DRMOU2 ;DON'T PUT ZERO LENGTH BLOCKS
|
||
PUSH P,I
|
||
SKIPGE I,DRMBLK
|
||
.VALUE
|
||
CAILE OX,4*6 ;MAKE SURE 11BUF DIDN'T OVERFLOW
|
||
.VALUE
|
||
MOVEI H,"D
|
||
PUSHJ P,11BEG
|
||
MOVNS J
|
||
HRLZS J
|
||
DRMOU1: MOVE B,11BUF(J)
|
||
PUSHJ P,11WORD
|
||
AOBJN J,DRMOU1
|
||
PUSHJ P,11END
|
||
SETZB J,OX
|
||
POP P,I
|
||
DRMOU2: MOVEM I,DRMBLK
|
||
POPJ P,
|
||
|
||
;OUTPUT PAIR OF DRAM WORDS AT ADDRESS I, IX -> LISTING FMT, J # WDS SO FAR, OX -> OUT BUF
|
||
|
||
DWORD: TRNN I,7
|
||
PUSHJ P,DRMOUT ;START NEW BLOCK OF 8
|
||
SETZM 11BUF(OX) ;CLEAR OUTPUT AREA
|
||
SETZM 11BUF+1(OX)
|
||
SETZM 11BUF+2(OX)
|
||
|
||
LDB T,[POINT 3,DRAM(IX),8] ;DO EVEN A FIELD
|
||
DPB T,[POINT 3,11BUF(OX),24]
|
||
LDB T,[POINT 3,DRAM+DRMWDS(IX),8] ;DO ODD A FIELD
|
||
DPB T,[POINT 3,11BUF+1(OX),24]
|
||
|
||
LDB T,[POINT 3,DRAM(IX),11] ;DO EVEN B FIELD
|
||
DPB T,[POINT 3,11BUF(OX),27]
|
||
LDB T,[POINT 3,DRAM+DRMWDS(IX),11] ;DO ODD B FIELD
|
||
DPB T,[POINT 3,11BUF+1(OX),27]
|
||
|
||
LDB T,[POINT 1,DRAM(IX),17] ;DO EVEN PARITY FIELD
|
||
DPB T,[POINT 1,11BUF(OX),30]
|
||
LDB T,[POINT 1,DRAM+DRMWDS(IX),17] ;DO ODD PARITY FIELD
|
||
DPB T,[POINT 1,11BUF+1(OX),30]
|
||
|
||
LDB T,[POINT 4,DRAM(IX),35] ;DO EVEN PART OF J FIELD
|
||
DPB T,[POINT 4,11BUF(OX),35]
|
||
LDB T,[POINT 4,DRAM+DRMWDS(IX),35] ;DO ODD PART OF J FIELD
|
||
DPB T,[POINT 4,11BUF+1(OX),35]
|
||
LDB T,[POINT 6,DRAM(IX),31] ;DO COMMON PART OF J FIELD
|
||
LDB TT,[POINT 6,DRAM+DRMWDS(IX),31]
|
||
CAIN I,254
|
||
TRO T,100_-4 ;JRST HACK (UGH)
|
||
CAME T,TT
|
||
JRST [ MSG [EVEN AND ODD J FIELDS DON'T MATCH. D RAM LOC ]
|
||
SETOM LOSE
|
||
PUSH P,T
|
||
MOVE T,I
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
POP P,T
|
||
JRST .+1 ]
|
||
TRNE T,3
|
||
JRST [ MSG [EVIL BITS ON IN J FIELD. D RAM LOC ]
|
||
SETOM LOSE
|
||
PUSH P,T
|
||
MOVE T,I
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
POP P,T
|
||
JRST .+1 ]
|
||
MOVE TT,T
|
||
LSH TT,-2
|
||
DPB TT,[POINT 4,11BUF+2(OX),35]
|
||
|
||
REPEAT 0,[ ;THIS WOULD BE A NEAT HACK, BUT DIVI IS REALLY SINGLE PRECISION
|
||
MOVE TT,11BUF(OX) ;CHECK PARITY
|
||
XOR TT,11BUF+2(OX)
|
||
CAIN I,254
|
||
XORI TT,1 ;THE CRUFTY JRST HACK AGAIN
|
||
IMULI TT,100000 ;2 COPIES OF 15 BITS
|
||
MOVE T,TT ;4 COPIES
|
||
AND TT,[2104210421] ;TAKE EVERY 4TH BIT
|
||
AND T,[421042104] ;DITTO, ALLOWING FOR 4 BITS + SIGN OF TT BETWEEN
|
||
DIVI T,17 ;HEXADECIMALLY CAST OUT 15'S
|
||
SKIPN TT
|
||
JRST [ MSG [EVEN PARITY D RAM LOC ]
|
||
SETOM LOSE
|
||
MOVE T,I
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
JRST .+1 ]
|
||
|
||
MOVE TT,11BUF+1(OX) ;CHECK PARITY OF ODD LOC
|
||
XOR TT,11BUF+2(OX)
|
||
IMULI TT,100000 ;2 COPIES OF 15 BITS
|
||
MOVE T,TT ;4 COPIES
|
||
AND TT,[2104210421] ;TAKE EVERY 4TH BIT
|
||
AND T,[421042104] ;DITTO, ALLOWING FOR 4 BITS + SIGN OF TT BETWEEN
|
||
DIVI T,17 ;HEXADECIMALLY CAST OUT 15'S
|
||
SKIPN TT ; (CASTING A HEX?)
|
||
JRST [ MSG [EVEN PARITY D RAM LOC ]
|
||
SETOM LOSE
|
||
MOVEI T,1(I)
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
JRST .+1 ]
|
||
] ;END OF REPEAT 0
|
||
|
||
MOVE TT,11BUF(OX) ;CHECK PARITY
|
||
XOR TT,11BUF+2(OX) ;THE PEDESTRIAN WAY
|
||
CAIN I,254
|
||
XORI TT,1 ;THE CRUFTY JRST HACK AGAIN
|
||
MOVEI T,0
|
||
DPARL1: TRNE TT,1
|
||
XORI T,1
|
||
LSH TT,-1
|
||
JUMPN TT,DPARL1
|
||
SKIPN T
|
||
JRST [ MSG [EVEN PARITY D RAM LOC ]
|
||
SETOM LOSE
|
||
MOVE T,I
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
JRST .+1 ]
|
||
|
||
MOVE TT,11BUF+1(OX) ;CHECK PARITYOF ODD WORD
|
||
XOR TT,11BUF+2(OX) ;THE PEDESTRIAN WAY
|
||
MOVEI T,0
|
||
DPARL2: TRNE TT,1
|
||
XORI T,1
|
||
LSH TT,-1
|
||
JUMPN TT,DPARL2
|
||
SKIPN T
|
||
JRST [ MSG [EVEN PARITY D RAM LOC ]
|
||
SETOM LOSE
|
||
MOVEI T,1(I)
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
JRST .+1 ]
|
||
|
||
ADDI J,3 ;PUT OUT 3 WORDS
|
||
ADDI OX,3
|
||
POPJ P,
|
||
|
||
SUBTTL PDP10 BINARY CODE ASCIIZER
|
||
|
||
MCNVRT: MOVEI T,36.
|
||
MOVEM T,INBS
|
||
SETOM H ;HIGHEST ADDRESS USED
|
||
MOVEI J,-1 ;LOWEST ADDRESS USED
|
||
MCNV1: PUSHJ P,RDCH ;FIRST PASS JUST FINDS SIZE OF PROGRAM
|
||
CAME T,[JRST 1]
|
||
JRST MCNV1
|
||
MCNV2: PUSHJ P,RDCH ;START NEW BLOCK
|
||
MOVE A,T ;HEADER IN A
|
||
JUMPGE A,MCNVP2 ;START ADDR, ENTER PASS 2
|
||
HRRZ T,A ;T FIRST LOC IN BLOCK
|
||
HLRE TT,A
|
||
SUBM T,TT ;TT FIRST LOC ABOVE BLOCK
|
||
CAMGE T,J
|
||
MOVE J,T
|
||
CAMLE TT,H
|
||
MOVE H,TT
|
||
PUSHJ P,RDCH ;GOBBLE REST OF BLOCK
|
||
AOBJN A,.-1
|
||
PUSHJ P,RDCH ;GOBBLE CHECKSUM
|
||
JRST MCNV2
|
||
|
||
MCNVP2: PUSHJ P,REWIND ;BEGIN PASS 2
|
||
CAIGE J,1000 ;IF PROGRAM LOADS INTO LOW CORE
|
||
MOVEI J,0 ;CLEAR ALL CORE
|
||
MOVE TT,FNAME1
|
||
PUSHJ P,PUTSIX
|
||
MSG [ PROGRAM LIMITS ]
|
||
MOVE T,J
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,["-]
|
||
MOVE T,H
|
||
PUSHJ P,PUTOCT
|
||
.IOT TYOC,[15]
|
||
SUB H,J ;NUMBER OF WORDS TO ZERO
|
||
LDB I,[.BP 177777,J] ;PUT A CORE-ZERO LINE
|
||
LDB J,[.BP 600000,J] ;WEIRD KLUDGE FOR HIGH 2 BITS OF ADDR
|
||
LSH J,8 ;..
|
||
MOVE T,H ;COMPUTE NUMBER OF COUNT WORDS
|
||
IDIVI T,177777
|
||
SKIPE TT
|
||
AOS T
|
||
MOVE J,T
|
||
PUSH P,H
|
||
MOVEI H,"Z
|
||
PUSHJ P,11BEG
|
||
POP P,H
|
||
MCNV4: MOVE B,H
|
||
CAILE B,177777
|
||
MOVEI B,177777
|
||
SUB H,B
|
||
PUSHJ P,11WORD
|
||
JUMPN H,MCNV4
|
||
PUSHJ P,11END
|
||
;DROPS THROUGH
|
||
|
||
;DROPS IN
|
||
|
||
MCNV5: PUSHJ P,RDCH
|
||
CAME T,[JRST 1]
|
||
JRST MCNV5
|
||
MCNV6: PUSHJ P,RDCH ;START BLOCK
|
||
MOVE A,T ;BLOCK HEADER IN A
|
||
JUMPGE A,MCNVSA
|
||
HLRE J,A
|
||
IMUL J,[-3]
|
||
HRRZ I,A
|
||
MCNV7: PUSH P,J ;START LINE
|
||
CAILE J,24.
|
||
MOVEI J,24.
|
||
SUBM J,(P)
|
||
MOVNS (P)
|
||
MOVEI H,"T
|
||
LDB T,[.BP 600000,I]
|
||
LSH T,8
|
||
IOR J,T
|
||
PUSHJ P,11BEG
|
||
ANDI J,377 ;PUT PIECES OF WORDS
|
||
MCNV8: PUSHJ P,RDCH
|
||
MOVE H,T
|
||
LDB B,[002000,,H]
|
||
PUSHJ P,11WORD
|
||
LDB B,[202000,,H]
|
||
PUSHJ P,11WORD
|
||
LDB B,[400400,,H]
|
||
PUSHJ P,11WORD
|
||
SUBI J,3
|
||
ADDI I,1
|
||
JUMPG J,MCNV8 ;MORE WORDS THIS LINE
|
||
PUSHJ P,11END
|
||
POP P,J
|
||
JUMPN J,MCNV7 ;MORE LINES THIS BLOCK
|
||
PUSHJ P,RDCH ;FLUSH CHECKSUM
|
||
JRST MCNV6 ;MORE BLOCKS THIS FILE
|
||
|
||
MCNVSA: MOVEI H,"T ;WRITE TRANSFER LINE
|
||
HRRZ I,A
|
||
LDB J,[.BP 600000,I]
|
||
LSH J,8
|
||
PUSHJ P,11BEG
|
||
PUSHJ P,11END
|
||
JRST DONE
|
||
|
||
SUBTTL PDP10 ASCII BINARATOR
|
||
|
||
ACNVRT: MOVEI T,36.
|
||
MOVEM T,OUTBS
|
||
MOVE A,[JRST 1]
|
||
PUSHJ P,WRCH
|
||
ACNV00: PUSHJ P,RDCH ;FIND 'T' LINE
|
||
CAIN T,"T
|
||
JRST ACNV01
|
||
ACNVNL: PUSHJ P,RDCH ;FIND NEXT LINE
|
||
CAIN T,12
|
||
JRST ACNV00
|
||
JRST ACNVNL
|
||
|
||
ACNV01: PUSHJ P,RDCH ;SKIP SPACE
|
||
PUSHJ P,RDASS ;GET WORD COUNT
|
||
LDB C,[101000,,A] ;HIGH BYTE OF WORD COUNT HAS HIGH 2 BITS OF LOAD ADDR
|
||
ANDI A,377
|
||
IDIVI A,3 ;3 PDP11 WORDS PER PDP10 WORD
|
||
MOVN B,A
|
||
PUSHJ P,RDASS ;GET LOAD ADDRESS
|
||
DPB C,[200200,,A] ;INSERT HIGH 2 BITS
|
||
JUMPE B,ACNV69 ;0 => START ADDR LINE => E.O.F.
|
||
HRL A,B ;MAKE AOBJN POINTER
|
||
MOVE Q,A ;INIT CHECKSUM
|
||
MOVE H,A ;AOBJN PNTR
|
||
PUSHJ P,WRCH
|
||
ACNV02: PUSHJ P,RDASS ;GET LOW 16 BITS
|
||
MOVE B,A
|
||
PUSHJ P,RDASS ;GET MIDDLE 16 BITS
|
||
DPB A,[202000,,B]
|
||
PUSHJ P,RDASS ;GET HIGH 4 BITS
|
||
DPB A,[400400,,B]
|
||
MOVE A,B
|
||
ROT Q,1
|
||
ADD Q,A
|
||
PUSHJ P,WRCH
|
||
AOBJN H,ACNV02
|
||
MOVE A,Q ;PUNCH CHECKSUM
|
||
PUSHJ P,WRCH
|
||
JRST ACNVNL ;AND GO DO NEXT LINE
|
||
|
||
ACNV69: SKIPE A ;PUNCH START ADDR
|
||
HRLI A,(JUMPA)
|
||
PUSHJ P,WRCH
|
||
PUSHJ P,WRCH
|
||
JRST DONE
|
||
|
||
;SUBROUTINE TO READ AN ASCIIZED WORD AND RETURN 16 BINARY BITS IN A
|
||
|
||
RDASS: MOVEI A,0
|
||
RDASS1: PUSHJ P,RDCH
|
||
CAIGE T,75
|
||
POPJ P,
|
||
LSH A,6
|
||
ANDI T,77
|
||
ADD A,T
|
||
JRST RDASS1
|
||
|
||
SUBTTL PALX BINARY ASCIIZER
|
||
|
||
PCNVRT: MOVEI T,36.
|
||
MOVEM T,INBS
|
||
PCNV1: PUSHJ P,RDCH ;SEARCH FOR START OF BLOCK
|
||
JUMPE T,PCNV1
|
||
CAIE T,1
|
||
JRST [ MSG ALLEGED PALX BINARY FILE CONTAINS NON-ABSLDR BLOCK TYPE
|
||
.VALUE ]
|
||
PUSHJ P,RDCH ;SKIP RANDOM NULL BYTE
|
||
PUSHJ P,RWORD ;GET BYTE COUNT
|
||
TRNE A,1
|
||
JRST [ MSG BARF! KLDCP CAN'T LOAD ODD NUMBER OF BYTES IN A BLOCK
|
||
.VALUE ]
|
||
LSH A,-1 ;CONVERT TO WORD COUNT
|
||
MOVEI J,-3(A) ;DON'T COUNT BLOCK HEADER
|
||
PUSHJ P,RWORD ;GET LOAD ADDRESS
|
||
MOVE I,A
|
||
JUMPE J,PCNVSA
|
||
TRNE I,1
|
||
JRST [ MSG BARF! KLDCP CAN'T LOAD ON BYTE BOUNDARIES
|
||
.VALUE ]
|
||
PCNV2: PUSH P,J ;START NEW LINE
|
||
CAILE J,29.
|
||
MOVEI J,29.
|
||
SUBM J,(P)
|
||
MOVNS (P)
|
||
MOVEI H,"E
|
||
PUSHJ P,11BEG
|
||
PCNV3: PUSHJ P,RWORD
|
||
MOVE B,A
|
||
PUSHJ P,11WORD
|
||
AOS I
|
||
SOJG J,PCNV3 ;MORE WORDS THIS LINE
|
||
PUSHJ P,11END
|
||
POP P,J
|
||
JUMPN J,PCNV2 ;MORE LINES THIS BLOCK
|
||
PUSHJ P,RDCH ;GOBBLE CHECKSUM BYTE
|
||
JRST PCNV1 ;MORE BLOCKS THIS FILE
|
||
|
||
PCNVSA: MOVEI H,"E ;WRITE TRANSFER LINE
|
||
PUSHJ P,11BEG
|
||
PUSHJ P,11END
|
||
JRST DONE
|
||
|
||
RWORD: PUSHJ P,RDCH
|
||
MOVE A,T
|
||
PUSHJ P,RDCH
|
||
LSH T,8
|
||
IOR A,T
|
||
POPJ P,
|
||
|
||
VARIABLES
|
||
CONSTANTS
|
||
|
||
CONC PRINTX /HIGHEST USED=,\.,
|
||
/
|
||
END CNVRT
|
||
|