perm filename 11LOAD.FAI[KL,SYS]8 blob
sn#644152 filedate 1982-02-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00019 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 PALX BINARY FILE FORMAT
C00005 00003 A B C D E G T TT I J K L M N P DKIC DKOC NKCOR TOPCOR DDTTOP DDTBEG DEVPRV REAPRV
C00007 00004 MACROS - GETFIL,CRLF,HASPAR,D11CLR,D11RD,D11WR,D11WRB,D11MAC,D11CON
C00009 00005 MORE MACROS - CONC,CALLIT,CMD,SECOND
C00011 00006 PAT PATCH BEG MAIN BEGL QUIKLP INBEG CMDSL CMDUN CMDHUH CMCMD CMCMD1 CMCMDL CMDCTB NCMDS CMDDTB CMCMDT NCMCMD CMCMDD
C00015 00007 BUCKY XTEND XTEND6 XTEND0 XTEND1 XTEND2 XTEND4 XTEND3 XTEND5 XTENDF XCMDS NXCMDS XCMDTB
C00017 00008 EXPLN GORAID GORAI1 XIT
C00018 00009 LDBIN LOWCAL LDLP LDLP1 LDLP1A LDLP1B LDLP2E LDLP3 JUMPB BYTOBP BYTOBT FTCH11 STOR11
C00022 00010 LDSYMS LDSYM3 LDSYM2 SYML0 SYML1 SYMB HICAL SYMDN
C00026 00011 DDDT DDT DDTL OVER NODDT OVERE MERGE ZR
C00029 00012 DLOAD LOAD LOADE WRCHR WRBIN WRBIN0 WRBIN1 WRBIN2 WRBIN3 WRBIND WREOF WRBINE WRBLOK WRBIN4 WRBLK0 WRBLK1 PUTOCT PUTOC1 SPACES SPAC0 SPAC1 SPAC2 WCPUT CPUT
C00035 00013 INT10X DTLOAD DTSTRT WBOOT WBOOT3 WBEOF WBBLOK WRBLO1 WBEMPT GRNKND GRNKAD WBBUF
C00039 00014 KLDCPB KLDLOD KLDLO2 GRONK KLDLO2 GRNK1 GRNK2 GRNK3 GRNK4 NOGRNK DTLDER GNKUEF GRNBAD GNKBFF
C00045 00015 RAD50 R50L R50 RDB RDW RDW1 GETNUM GETNM1 GETNMX POPJ2 OCTTYP DECTYP DECTY DECTY1 LOSADR LOSTBL
C00051 00016 FILSCN POPJ1 CPOPJ FILSCX FILSCP FILSP1 FILSP2 FILSP3 FILSP8 FILSP4 FILSP6 FILSP7 FILSP5 LUPFL FILNOU ENTFL GETSIX GETSX1 GETSX2 GETSX4 GETSX3 SIXTYP SIXTY1 SIXTY3 SIXTY4 INITL
C00060 00017 ZZ GETIN$R GETIN$1 GETIN GETIN$B GTINB1 GETEOF EOF1 EOF2 PUT PUT1
C00062 00018 THINGS HAVING TO DO WITH THE SIZE OF THE 11'S CORE: SETSIZ
C00066 00019 LPDL PDL SAVPPN LUP ENT IBUF OBUF JMPBLF PROGSA MINUSF LCHRET DDTSA OVERLF NOSYMS WORD SEP
C00068 ENDMK
C⊗;
;PALX BINARY FILE FORMAT
;
;B => BYTE, W => WORD (LOW BYTE THEN HIGH BYTE)
;
; .
; .
; .
;****************
;*B 1
;*B 0 (ERROR IF NOT 0)
;*W # BYTES OF DATA + 6 (6 => JUMP BLOCK)
;*W ADDRESS (JUMP ADDRESS)
;*B DATA
;* .
;* .
;* .
;*B DATA
;*B CHECKSUM (SUM FROM INITIAL 1 THROUGH CHECKSUM = 0 IN LOW 8 BITS)
;****************
; REPEAT
; .
; .
; .
; 2
;****************
;* SIXBIT SYMBOL
;* BITS,,VALUE
;****************
; REPEAT
; 0
;A B C D E G T TT I J K L M N P DKIC DKOC NKCOR TOPCOR DDTTOP DDTBEG DEVPRV REAPRV
TITLE 11LOAD CONSOLE 11/40 LOADER JBR/REG
IFNDEF FTQUIK,<FTQUIK←←0> ;Non-zero compiles automatic loader for KLDCP
IFN FTQUIK,<
PRINTS /Save as 11LOAD[1,2] for use by CTY command 11LOAD.
/
>;IFN FTQUIK
A←1
B←2
C←3
D←4
E←5
G←6
T←7
TT←10
I←11
J←12
K←13
L←14
M←15
N←16
P←17
DKIC←←1
DKOC←←2
NKCOR←←=28 ;KL10 CONSOLE 11/40 HAS 2 MF11UPs = 28K WORDS
TOPCOR←←NKCOR*=1024*2-1 ;HIGHEST BYTE ADDRESS IN CORE
DDTTOP←←100000
DDTBEG←←DDTTOP-22000
DEVPRV←←400
REAPRV←←40000 ;Priv for phantom/CTY job to activate
Extern .JBREL,.JBFF
;MACROS - GETFIL,CRLF,HASPAR,D11CLR,D11RD,D11WR,D11WRB,D11MAC,D11CON
IFN FTQUIK,<
CEXIT: EXIT
>;IFN FTQUIK
DEFINE GETFIL $ (LE,STR,LH,CH,BUF,BYTE,AUTO)
<
IFIDN <AUTO><><
ZZ←←.
IFDIF <STR><><OUTSTR [ASCIZ /$STR$/]>
PUSHJ P,FILSCN ;INPUT FILE SPECS
IFIDN <LE> <L> <LH,,LUP>
IFIDN <LE> <E> <LH,,ENT>
JRST [ CRLF ;ALT TYPED
JRST CMDUN]
JRST [ OUTSTR [ASCIZ /??
/] ;GARBAGE TYPED
CLRBFI
JRST ZZ]
>;NOT AUTO
IFDIF <AUTO><><
HRLI L,AUTO ;AUTO is 4-wd block containing filename
HRRI L,IFIDN <LE><L><LUP;>ENT
MOVE J,L
BLT L,3(J) ;Put filename where we can do the lookup/enter
ZZ←←CEXIT ;Exit on failure
>;AUTO
INIT CH,10
'DSK '
IFIDN <LE> <E> <BUF,,> IFIDN <LE> <L> <BUF>
JRST INITL
IFIDN <LE> <L> <LOOKUP CH,LUP
JRST [ PUSHJ P,LUPFL
JRST ZZ]>
IFIDN <LE> <E> <ENTER CH,ENT
JRST [ PUSHJ P,ENTFL
JRST ZZ]>
MOVEI A,BYTE
DPB A,[300600,,BUF+1]
>
DEFINE CRLF <
OUTSTR [BYTE (7) 15,12]
>
;MORE MACROS - CONC,CALLIT,CMD,SECOND
DEFINE CONC ! (A,B)
<A!B>
DEFINE CBAR <0,>
DEFINE CFOO ! (A,B,C)<DEFINE CBAR()<0,<B
C>>>
DEFINE CBAZ(A)<CFOO(\CBAR,<A>)>
NLOSES←←0
DEFINE CALLIT ! (FOO,ERR)<
IFDEF HICAL,<PRINTS /HICAL DEFINED TOO SOON
/>
PUSHJ P,FOO
CONC(LL,\NLOSES)::
CBAZ([ASCIZ/ERR/])
NLOSES←←NLOSES+1
>
DEFINE BAR1 <0,>
DEFINE FOO1 ! (A,B,C)<DEFINE BAR1 <0,<B
C>>>
DEFINE BAZ1(A)<FOO1(\BAR1,<A>)>
DEFINE SECOND(A,B)<B>
DEFINE CMD(CHR,TEXT)<
"CHR"
BAZ1(<OUTSTR [ASCIZ πCHR TEXT
π]>)>
DEFINE BAR2 <0,>
DEFINE FOO2 ! (A,B,C)<DEFINE BAR2 <0,<B
C>>>
DEFINE BAZ2(A)<FOO2(\BAR2,<A>)>
DEFINE XCMD(NAME,TEXT)<
SIXBIT /NAME/
BAZ2(<OUTSTR [ASCIZ πNAME TEXT
π]>)>
;PAT PATCH BEG MAIN BEGL QUIKLP INBEG CMDSL CMDUN CMDHUH CMCMD CMCMD1 CMCMDL CMDCTB NCMDS CMDDTB CMCMDT NCMCMD CMCMDD
PAT:
PATCH: BLOCK 100
BEG: JFCL ;IN CASE STARTED IN RPG MODE
RESET
MOVE P,[-LPDL,,PDL-1]
MOVEI A,400000+<<TOPCOR+1>/4>-1
CORE2 A,
JRST 4,.
PUSHJ P,ZR
SETOM JMPBLF
SETOM PROGSA
SETOM DDTSA
CRLF ;Type a CRLF
IFE FTQUIK,<
OUTSTR [ASCIZ /Type ? for help/]
MAIN:
BEGL: PTJOBX [0 ↔ 'DON ']
>;IFE FTQUIK
SETZM OVERLF
MOVE P,[-LPDL,,PDL-1]
RELEAS DKIC,
CLOSE DKOC,
RELEAS DKOC,
IFE FTQUIK,<
OUTSTR [ASCIZ /
*/]
>;IFE FTQUIK
IFN FTQUIK,<
RESCAN
QUIKLP: INCHRS A ;Scan command to semicolon
JRST KLDLOD ;NO SEMICOLON FOUND, do automatic thing
CAIE A,175
CAIN A,12
JRST KLDLOD ;End of command, no semicolon, do automatic thing
CAIE A,";"
JRST QUIKLP
>;IFN FTQUIK
INBEG:
IFE FTQUIK,<
INCHRW A
>;IFE FTQUIK
IFN FTQUIK,<
INCHRS A
EXIT ;No command found, don't wait around
>;IFN FTQUIK
TRNE A,600
JRST CMCMD ;CONTROL OR META BIT ON IN COMMAND
CAIE A,15
CAIN A,12
JRST INBEG
CAIL A,"a"
CAILE A,"z"
CAIA
SUBI A,40
MOVSI B,-NCMDS
CMDSL: CAME A,CMDCTB(B)
AOBJN B,CMDSL
JUMPGE B,CMDHUH
PUSHJ P,@CMDDTB(B)
CMDUN:
IFE FTQUIK,<
JRST BEGL
>;IFE FTQUIK
IFN FTQUIK,<
EXIT ;Run from CTY, just exit when done
>;IFN FTQUIK
CMDHUH: OUTSTR [ASCIZ / ??/]
JRST CMDUN
CMCMD: ANDI A,177
CAIL A,"A"
CAILE A,"Z"
CAIA
JRST CMCMD1
CAIL A,"a"
CAILE A,"z"
JRST CMDHUH
ANDCMI A,40
CMCMD1: MOVSI B,-NCMCMD
CMCMDL: CAME A,CMCMDT(B)
AOBJN B,CMCMDL
JUMPGE B,CMDHUH
PUSHJ P,@CMCMDD(B)
JRST CMDUN
CMDCTB: CMD(?,EXPLAIN THESE COMMANDS)
CMD(N,LOAD WITHOUT DEBUGGER OR SYMBOLS)
CMD(L,<LOAD PROGRAM (BINARY FILE) WITH DDT AND SYMBOLS>)
CMD(D,JUST LOAD DDT)
CMD(M,<MERGE (DON'T CLEAR CORE) ADDING SYMBOLS>)
; CMD(I,<INSERT (DON'T CLEAR CORE) REPLACING SYMBOLS>)
CMD(O,<OVERLAY (NO DDT, NO SYMBOLS, DON'T CLEAR CORE)>)
CMD(H,<HAVE BUG, WILL UNRAVEL>)
CMD(X,EXIT)
CMD(A,SIMULATE BUCKY X)
CMD(W,WRITE OUT BIN FILE)
CMD(C,WRITE BINARY AS OCTAL CHARACTERS)
CMD(B,<Write a DT-bootable file>)
NCMDS←←.-CMDCTB
CMDDTB: EXPLN
NODDT
LOAD
DDT
MERGE
; INSERT
OVER
GORAID
XIT
BUCKY
WRBIN
WRCHR
WBOOT
GRONK
CMCMDT: "X"
NCMCMD←←.-CMCMDT
CMCMDD: XTEND
;BUCKY XTEND XTEND6 XTEND0 XTEND1 XTEND2 XTEND4 XTEND3 XTEND5 XTENDF XCMDS NXCMDS XCMDTB
BUCKY: OUTSTR [ASCIZ /N EXTENDED COMMAND /]
JRST XTEND6
XTEND: OUTSTR [ASCIZ /TENDED COMMAND /]
XTEND6: PUSHJ P,GETSIX ;GET SYL IN J SEP IN I
CAIN I,175
POPJ P,
MOVEM I,SEP
JUMPE J,CPOPJ
MOVE A,J ;SIXBIT TO A
MOVEI J,0
TLNN K,770000 ;K WAS BP INTO J USED BY GETSIX
JRST XTEND1 ;NAME IS 6 CHARS LONG
MOVEI I,77
XTEND0: IDPB I,K ;MAKE A MASK OF UNUSED BITS
TLNE K,770000
JRST XTEND0 ;MORE BITS TO DO
XTEND1: MOVSI B,-NXCMDS
XTEND2: MOVE C,XCMDS(B)
CAMN A,C
JRST XTENDF ;EXACT MATCH
ANDCAM J,C ;TURN OFF BITS IN NEW CANDIDATE NOT SPECIFIED IN A
CAMN A,C
JRST XTEND3 ;PARTIAL MATCH
XTEND4: AOBJN B,XTEND2
JUMPL I,XTEND5 ;FOUND EXACTLY ONE PARTIAL MATCH
OUTSTR [ASCIZ /UNKNOWN COMMAND
/]
POPJ P,
XTEND3: JUMPL I,[OUTSTR [ASCIZ /AMBIGUOUS COMMAND
/]
POPJ P,]
TLO I,400000(B) ;INDICATE THERE HAS ALREADY BEEN A PARTIAL MATCH
JRST XTEND4
XTEND5: HLRZ B,I
ANDI B,377777
XTENDF: JRST @XCMDTB(B)
XCMDS: XCMD(DDT,JUST LOAD DDT)
XCMD(LOAD,LOAD WITH DDT)
XCMD(GRONK,GRONK 11-40 VIA DTELOD UUO)
NXCMDS←←.-XCMDS
XCMDTB: DDDT
DLOAD
GRONK
;EXPLN GORAID GORAI1 XIT
EXPLN: OUTSTR [ASCIZ /
/]
SECOND (\BAR1)
OUTSTR [ASCIZ /TYPE CNTL-META C TO RETURN TO COMMAND MODE
TYPE <ANY BUCKY> X TO ENTER EXTEND MODE COMMANDS:
/]
SECOND (\BAR2)
JRST CMDUN
GORAID: SKIPN A,JOBDDT↑
JRST GORAI1
JSR @-6(A)
JRST CMDUN
GORAI1: OUTSTR [ASCIZ / - NO RAID/]
JRST CMDUN
XIT: PTJOBX [0 ↔ SIXBIT /DON/]
EXIT
;LDBIN LOWCAL LDLP LDLP1 LDLP1A LDLP1B LDLP2E LDLP3 JUMPB BYTOBP BYTOBT FTCH11 STOR11
;LDBIN - LOAD BINARY FILE SUBROUTINE, BYTOBP, FTCH11, STOR11
;LOAD BINARY FILE (RETURNS ON FINDING JUMP BLOCK)
;JUMP ADDRESS STORED IN JMPBLF
LDBIN: SKIPN OVERLF ;DON'T CLOBBER STARTING ADDRESS IF OVERLAYING
SETOM JMPBLF
LOWCAL: IFN NLOSES,<PRINTS /LOWCAL DEFINED TOO LATE
/>
LDLP: MOVEI K,0
LDLP1: CALLIT(RDB,SEARCHING FOR 1 AT BEGINNING OF BLOCK)
CAIE I,1
JRST LDLP1
CALLIT(RDB,READING BYTE AFTER INITIAL 1)
JUMPN I,[ OUTSTR [ASCIZ /INITIAL 1 NOT FOLLOWED BY 0
/]
JRST CMDUN]
CALLIT(RDW,READING NUMBER OF BYTES WORD) ;NUMBER OF BYTES OF DATA + 6
CAIN I,6
JRST JUMPB
MOVEI A,-6(I) ;NUMBER OF BYTES OF DATA
CALLIT(RDW,READING ADDRESS WORD) ;ADDRESS OF FIRST BYTE
MOVE B,I ;ADDRESS OF FIRST BYTE IN BLOCK
ADDI I,-1(A) ;ADDRESS OF LAST BYTE IN BLOCK
CAIG I,TOPCOR
CAILE B,TOPCOR
JRST [ OUTSTR [ASCIZ /ATTEMPT TO LOAD FILE ABOVE TOP OF CORE
/]
JRST CMDUN]
LDLP1A: PUSHJ P,BYTOBP
LDLP1B: CALLIT(RDB,READING DATA BYTE)
IDPB I,D
SOJG A,LDLP1B
LDLP2E: MOVEI B,LDLP
LDLP3: CALLIT(RDB,READING CHECKSUM)
TRNE K,377
JRST [ OUTSTR [ASCIZ /CHECKSUM ERROR
/]
JRST CMDUN]
JRST (B)
JUMPB: CALLIT(RDW,READING JUMP BLOCK ADDRESS)
SKIPN OVERLF ;DON'T CLOBBER STARTING ADDRESS IF OVERLAYING
MOVEM I,JMPBLF
MOVEI B,CPOPJ
JRST LDLP3
;CONVERT BYTE ADDRESS IN B TO ILDB TYPE BYTE POINTER IN D
BYTOBP: PUSH P,C
MOVE C,B
IDIVI C,4
MOVE D,BYTOBT(D)
ADDI D,(C)
POP P,C
POPJ P,
BYTOBT: 441000,,400000
341000,,400000
241000,,400000
141000,,400000
;B HAS BYTE ADDRESS, C GETS WORD DATA
FTCH11: PUSH P,D
PUSH P,A
PUSHJ P,BYTOBP
ILDB C,D ;GET THE EVEN BYTE
ILDB A,D ;GET THE ODD BYTE
LSH A,8
ADDI C,(A)
POP P,A
POP P,D
POPJ P,
;A HAS WORD DATA, B HAS BYTE ADDRESS
STOR11: PUSH P,D
PUSH P,C
PUSHJ P,BYTOBP
IDPB A,D ;STORE LOW 8 BITS
LDB C,[POINT 8,A,27]
IDPB C,D ;STORE HIGH 8 BITS
POP P,C
POP P,D
POPJ P,
;LDSYMS LDSYM3 LDSYM2 SYML0 SYML1 SYMB HICAL SYMDN
;LDSYMS, OLDSYMS - SUBROUTINES TO LOAD/OVERLAY SYMBOLS
;OLSYMS: D11TRA SMTOPR ;Overlay symbols
; MOVE C,SMTOPR+1
; JRST LDSYM3
LDSYMS: MOVEI B,DDTBEG-2 ;Load symbols (at end of old table)
PUSHJ P,FTCH11 ;GET POINTER TO FIRST WORD OF LAST SYMBOL INTO C
LDSYM3: MOVEI B,DDTBEG-4
MOVE A,PROGSA
PUSHJ P,STOR11
MOVEI G,(C) ;BYTE ADDRESS OF FIRST WORD OF LAST SYM
SUBI C,DDTBEG-6
IDIVI C,<=16*6+4> ;COMPUTE - NUMBER OF 16 SYM BLOCKS AWAY
IMULI C,<=16*6+4>
ADDI C,DDTBEG-6
; LSH C,-1 ;WORD ADDRESS
IDIVI D,6 ;- # SYMBOLS FROM END OF BLOCK
MOVN D,D
MOVEI E,1
LSH E,-1(D) ;BIT FOR LAST SYMBOL
; LSH G,-1 ;WORD ADDRESS OF FIRST WORD OF LAST SYMBOL WRITTEN
MOVEI D,(G)
MOVEI B,-2(C)
PUSH P,C
PUSHJ P,FTCH11 ;HALF-KILLED BITS
MOVE M,C
POP P,C
ADDI B,2
PUSH P,C
PUSHJ P,FTCH11
MOVE N,C ;REGISTER BITS
POP P,C
LDSYM2: CALLIT(RDB,SEARCHING FOR INITIAL 2)
CAIE I,2
JRST LDSYM2
SYML0: LSH E,1
TRNE E,200000 ;DONE WITH THIS BLOCK OF 16?
JRST SYMB ;YES
SUBI D,3*2
SYML1: CALLIT(RDB,READING SYMBOL NAME)
JUMPE I,SYMDN
PUSH P,I
CALLIT(RDB,READING SYMBOL VALUE)
EXCH I,(P)
PUSHJ P,RAD50 ;CONVERT I INTO T AND TT
MOVEI B,(D)
MOVE A,T
PUSHJ P,STOR11
ADDI B,2
MOVE A,TT
PUSHJ P,STOR11
ADDI B,2
POP P,I
MOVE A,I
PUSHJ P,STOR11
TLNE I,4000 ;REGISTER FLAG
IORM E,N
TLNE I,20000 ;HALF-KILLED FLAG
IORM E,M
MOVEI G,(D) ;BYTE ADDRESS OF FIRST WORD OF LAST SYMBOL WRITTEN
JRST SYML0
SYMB: MOVEI B,-2(C) ;BYTE ADDRESS OF HALF KILLED WORD THIS BLOCK
MOVE A,M
PUSHJ P,STOR11
ADDI B,2 ;BYTE ADDRESS OF REGISTER WORD
MOVE A,N
PUSHJ P,STOR11
MOVEI C,-2(D) ;BYTE ADDRESS OF REGISTER WORD OF NEXT BLOCK
SETZB M,N
MOVEI D,-10(C) ;BYTE ADDRESS OF FIRST SYMBOL OF NEXT BLOCK
AOJA E,SYML1
HICAL:
SYMDN: MOVEI B,-2(C)
MOVE A,M
PUSHJ P,STOR11
ADDI B,2
MOVE A,N
PUSHJ P,STOR11
OUTSTR [ASCIZ/SYMBOLS START AT /]
MOVE D,G
PUSHJ P,OCTTYP
OUTSTR [ASCIZ/.
/]
MOVEI B,DDTBEG-2
MOVE A,G
JRST STOR11
;DDDT DDT DDTL OVER NODDT OVERE MERGE ZR
;JUST LOAD DDT
DDDT: OUTCHR ["D"]
DDT: OUTSTR [ASCIZ /DT ALONE
/]
SETZM NOSYMS ;DDT ALONE GETS DDT SYMBOLS
DDTL: INIT DKIC,10
'DSK '
IBUF
JRST 4,.
MOVSI A,'DDT'
MOVSI B,'BIN'
MOVEI C,0
MOVE D,[' KLSYS']
LOOKUP DKIC,A
JRST [ OUTSTR [ASCIZ /
DEBUGGER NOT FOUND???/]
JRST CMDUN]
PUSHJ P,ZR ;ZERO CORE
PUSHJ P,LDBIN
MOVE A,JMPBLF
MOVEM A,DDTSA
SKIPN OVERLF
MOVEM A,PROGSA
SKIPN NOSYMS
PUSHJ P,LDSYMS
MOVEI A,340
MOVEI B,DDTTOP-12 ;STORE 340 IN DDTST
PUSHJ P,STOR11
POPJ P,
;OVERLAY BINARY WITHOUT DDT OR SYMBOLS
OVER: OUTSTR [ASCIZ /VERLAY /]
SETOM OVERLF
JRST OVERE
;LOAD BINARY WITHOUT DDT OR SYMBOLS
NODDT: OUTSTR [ASCIZ /ODDT /]
OVERE: MOVEI A,0
DSKPPN A, ;GET CURRENT DSK PPN
MOVEM A,SAVPPN
GETFIL (L,BIN FILE - ,'BIN',DKIC,IBUF,=36)
SKIPN OVERLF ;DON'T CLEAR CORE FOR OVERLAY
PUSHJ P,ZR ;ZERO CORE
PUSHJ P,LDBIN ;LOAD BIN FILE AND RETURN
MOVE A,JMPBLF
SKIPN OVERLF
MOVEM A,PROGSA
POPJ P,
MERGE: OUTSTR [ASCIZ /ERGE, ADDING SYMBOLS, /]
SETOM OVERLF
PUSHJ P,OVERE
JRST LDSYMS ;LOAD SYMBOLS AND RETURN
;INSERT: OUTSTR [ASCIZ /NSERT, REPLACING SYMBOLS, /]
; SETOM OVERLF
; PUSHJ P,OVERE
; JRST OLSYMS ;OVERLAY SYMBOLS AND RETURN
ZR: SETZM 400000
MOVE A,[400000,,400001]
BLT A,400000+<<TOPCOR+1>/4>-1
POPJ P,
;DLOAD LOAD LOADE WRCHR WRBIN WRBIN0 WRBIN1 WRBIN2 WRBIN3 WRBIND WREOF WRBINE WRBLOK WRBIN4 WRBLK0 WRBLK1 PUTOCT PUTOC1 SPACES SPAC0 SPAC1 SPAC2 WCPUT CPUT
;LOAD WITH DDT AND SYMBOLS
DLOAD: OUTCHR ["L"]
LOAD: OUTSTR [ASCIZ /OAD /]
LOADE: GETFIL (L,BIN FILE - ,'BIN',DKIC,IBUF,=36)
IOPUSH DKIC,1 ;SAVE ACROSS THE NEXT FEW CALLS
JRST 4,. ; FAILURE?
SETOM NOSYMS ;DON'T WANT DDT'S SYMBOLS
PUSHJ P,DDTL ;GET DDT IN CORE
MOVE A,JMPBLF
MOVEM A,DDTSA ;DDT'S STARTING ADDRESS
IOPOP DKIC,1 ;GET CHANNEL BACK
JRST 4,. ; FAILURE?
PUSHJ P,LDBIN ;LOAD CODE PART OF BINARY FILE
MOVE A,JMPBLF
MOVEM A,PROGSA ;PROGRAM'S STARTING ADDRESS
PUSHJ P,LDSYMS ;LOAD SYMBOLS INTO DEBUGGER
MOVE A,DDTSA
MOVEM A,JMPBLF ;START AT DEBUGGER FOR LOAD
POPJ P,
WRCHR: OUTSTR [asciz/HARACTER WRITE AS OCTAL HALFWORDS /]
SETOM WCHRMD#
GETFIL (E,TEXT FILE -,'TXT',DKOC,OBUF,7)
JRST WRBIN0
WRBIN: OUTSTR [ASCIZ /RITE /]
GETFIL (E,BIN FILE - ,'BIN',DKOC,OBUF,=36)
SETZM WCHRMD# ;binary, not character mode.
WRBIN0: MOVE A,[-<TOPCOR+1>/4,,400000]
WRBIN1: SKIPN (A)
AOBJN A,WRBIN1
JUMPGE A,WRBINE ;EMPTY CORE IMAGE
MOVE B,A ;SAVE POINTER TO FIRST NON-ZERO WORD
MOVEI A,400000+<<TOPCOR+1>/4>-1 ;LAST WORD OF CORE IMAGE
WRBIN2: SKIPN (A)
SOJA A,WRBIN2
SUBI A,-1(B) ;LENGTH OF BLOCK IN PDP10 WORDS
WRBIN3: MOVE C,A
CAIL A,40000/4
MOVEI A,40000/4 ;STUPID TCDP CANT LOAD MORE THAN 100000 BYTE BLOCKS
SUB C,A
PUSH P,C
PUSHJ P,WRBLOK
POP P,A ;AMOUNT LEFT TO DO
JUMPN A,WRBIN3
WRBIND: SKIPE WCHRMD ;character mode?
JRST WREOF ;yes, end now.
MOVEI K,0
MOVEI I,1
PUSHJ P,CPUT
MOVEI I,0
PUSHJ P,CPUT
MOVEI I,6
PUSHJ P,CPUT
MOVEI I,0
PUSHJ P,CPUT
MOVE C,PROGSA
PUSHJ P,WCPUT
MOVN K,K
LDB I,[POINT 8,K,35]
PUSHJ P,PUT
MOVEI I,0
PUSHJ P,PUT
WREOF: RELEAS DKOC,
POPJ P,
WRBINE: OUTSTR [ASCIZ /EMPTY CORE IMAGE SAVED
/]
JRST WRBIND
WRBLOK: LSH A,2 ;NUMBER OF BYTES OF DATA ...
MOVE D,A
MOVEI C,6(A) ; ... +6
SKIPE WCHRMD ;character mode?
JRST WRBLK0
MOVEI K,0
MOVEI I,1 ;header is 1,
PUSHJ P,CPUT
MOVEI I,0 ;0,
PUSHJ P,CPUT
PUSHJ P,WCPUT ;and the byte count
MOVEI C,-400000(B)
LSH C,2 ;STARTING BYTE ADDRESS
PUSHJ P,WCPUT
HRLI B,441000 ;MAKE BYTE POINTER TO DATA
WRBIN4: ILDB I,B
PUSHJ P,CPUT
SOJG D,WRBIN4
IBP B ;MAKE B POINT AT NEXT WORD IF AT END OF WORD
MOVN K,K
LDB I,[POINT 8,K,35]
JRST PUT
;code to write an 11 core image as 18-bit octal halfwords.
WRBLK0: MOVEI C,-400000(B)
LSH C,2 ;starting byte address
HRLI B,441000
WRBLK1: ILDB I,B ;first byte
ILDB K,B ;second
DPB K,[Point 8,I,27] ;store second left of first
PUSH P,I
PUSHJ P,SPACES
POP P,I
PUSHJ P,PUTOCT ;print it as octal
MOVEI I,","
PUSHJ P,PUT
MOVEI I,","
PUSHJ P,PUT
ILDB I,B ;third byte
ILDB K,B ;fourth byte
DPB K,[Point 8,I,27] ;place fourth to the left of the third
PUSH P,I
PUSHJ P,PUTOCT
POP P,I
PUSHJ P,SPACES
MOVEI I,11 ;write a tab
PUSHJ P,PUT
MOVEI I,";"
PUSHJ P,PUT
MOVE I,C
PUSHJ P,PUTOCT
ADDI C,4
MOVEI I,15
PUSHJ P,PUT
MOVEI I,12
PUSHJ P,PUT
SUBI D,4
JUMPG D,WRBLK1
IBP B
POPJ P,
PUTOCT: PUSH P,I+1
PUSHJ P,PUTOC1
POP P,I+1
POPJ P,
PUTOC1: IDIVI I,10
PUSH P,I+1
SKIPE I
PUSHJ P,PUTOC1
POP P,I
ADDI I,"0"
JRST PUT
SPACES: HRRZ I,I
JUMPE I,SPAC1 ;special for zero
MOVEI K,0 ;count number of spaces needed
SPAC0: TRNE I,700000
JRST SPAC2
LSH I,3
AOJA K,SPAC0
SPAC1: MOVEI K,5
SPAC2: JUMPE K,CPOPJ
MOVEI I," "
PUSHJ P,PUT
SOJG K,.-2
POPJ P,
WCPUT: LDB I,[POINT 8,C,35]
PUSHJ P,CPUT
LDB I,[POINT 8,C,27]
CPUT: ADD K,I
JRST PUT
;INT10X DTLOAD DTSTRT WBOOT WBOOT3 WBEOF WBBLOK WRBLO1 WBEMPT GRNKND GRNKAD WBBUF
;in general, load an -11 core image.
; Dump the file via the Boot Command
; Load the file into the -11 via αX Gronk Command
;Write a file for the DTBOOT UUO.
INT10X=100000 ;INT10 bit in the TO11 byte count.
DTLOAD==<BYTE(4)4> ;the DTBOOT LOAD Code.
DTSTRT==<BYTE(4)2> ;the DTBOOT Start Code
WBOOT: OUTSTR [ASCIZ/ootable file. Write a DT-Bootable file. /]
GETFIL (E,L11 File - ,'L11',DKOC,OBUF,=18)
SETZB I,WBBUF
MOVE A,[WBBUF,,WBBUF+1]
BLT A,WBBUF+177
MOVSI A,-400 ;first write 200 words of nulls
PUSHJ P,PUT
AOBJN A,.-1
MOVE A,[-<TOPCOR+1>/4,,400000]
SKIPN (A)
AOBJN A,.-1
JUMPGE A,WBEMPT
MOVE B,A ;SAVE POINTER TO FIRST NON-ZERO WORD
MOVEI A,400000+<<TOPCOR+1>/4>-1 ;LAST WORD OF CORE IMAGE
SKIPN (A)
SOJA A,.-1
SUBI A,-1(B) ;LENGTH OF BLOCK IN PDP10 WORDS
SETZM WBIND#
WBOOT3: MOVE C,A
CAIL A,1000 ;DTBOOT can only handle one page at a time
MOVEI A,1000
SUB C,A
PUSH P,C
MOVEI C,-400000(B) ; KL address of this xfer
LSH C,2
MOVN I,A ;-wc
LSH I,1 ;convert to PDP-11 word count
ANDI I,7777 ;convert to 12 bits of word count.
IORI I,INT10X ;set INT10 in TO11BC
DPB I,[POINT 20,C,19] ;
IOR C,[DTLOAD] ;The DTBOOT Load Code
MOVE I,WBIND
MOVEM C,WBBUF(I)
AOS WBIND
PUSHJ P,WBBLOK ;write one boot block.
POP P,A ;AMOUNT LEFT TO DO
JUMPN A,WBOOT3
HRRZ C,PROGSA ;write the start block
IOR C,[DTSTRT] ;the DTBOOT Start Code
MOVE K,WBIND
MOVEM C,WBBUF(K)
SETOM WBBUF+1(K) ;-1 to signal: NO MORE
USETO DKOC,1
MOVSI A,-400
MOVE B,[POINT 18,WBBUF]
ILDB I,B
PUSHJ P,PUT
AOBJN A,.-2
WBEOF: RELEAS DKOC,
POPJ P,
WBBLOK: LSH A,1 ;NUMBER OF Words OF DATA ...
MOVE D,A
HRLI B,441000 ;MAKE BYTE POINTER TO DATA
WRBLO1: ILDB I,B
ILDB K,B
DPB K,[POINT 8,I,27]
PUSHJ P,PUT
SOJG D,WRBLO1
IBP B ;MAKE B POINT AT NEXT WORD IF AT END OF WORD
POPJ P,
WBEMPT: OUTSTR [ASCIZ/There is no -11 Core image.
/]
JRST WBEOF
;These must be adjacent, in order. See also GRONK.
GRNKND: 0
GRNKAD: 0 ;starting address for in-core 11-image.
WBBUF: BLOCK 200
;KLDCPB KLDLOD KLDLO2 GRONK KLDLO2 GRNK1 GRNK2 GRNK3 GRNK4 NOGRNK DTLDER GNKUEF GRNBAD GNKBFF
;GRONK GRAB the 11 and RELOAD it
Comment $
The DTELOD UUO requires that we packetize the data that we wish to load.
Each packet must reside within one page of KL10 memory. We make our
packets precisely one page in length.
Each packet contains a length (in pdp-11 words), an 11 address, and
it implies a -10 address.
$
OPDEF DTELOD [CALLI 400127]
IFN FTQUIK,<
KLDCPB: SIXBIT /KLDCP/ ;Default file in automatic mode
SIXBIT /L11/
0
SIXBIT / KLSYS/
;Here to reload KLDCP by 11LOAD cmd on CTY
KLDLOD: PUSHJ P,KLDLOO ;Some errors, and success, want to POPJ
EXIT
KLDLOO: MOVSI A,DEVPRV!REAPRV ;REAPRV for version run from CTY
SETPRV A,
TLNN A,DEVPRV
JRST NOGRNK
GETFIL (L,L11 File - ,'L11',DKIC,IBUF,=36,KLDCPB)
JRST KLDLO2
>;IFN FTQUIK
GRONK: OUTSTR [ASCIZ/ Reload the 11 via DTELOD UUO. /]
MOVSI A,DEVPRV!REAPRV ;REAPRV for version run from CTY
SETPRV A,
TLNN A,DEVPRV
JRST NOGRNK
GETFIL (L,L11 File - ,'L11',DKIC,IBUF,=36)
KLDLO2: MOVSI A,-200 ;-wc of header record
MOVEI K,0 ;accumulate total word count.
GRNK1: PUSHJ P,GETINR ;read the 200-word header.
JRST GNKUEF ;unexpected eof
MOVEM I,WBBUF(A) ;store as arg to the UUO
JUMPE I,GRNK2 ;zero is unimportant.
CAMN I,[-1]
JRST GRNK2 ;-1 ends list.
MOVE B,I
AND B,[BYTE(4)17] ;keep only the record type
CAMN B,[DTSTRT] ;start address?
JRST GRNK2 ;yes. no words to count.
CAME B,[DTLOAD] ;load command?
JRST GNKBFF ;bad file format.
LDB B,[POINT 12,I,19] ;this records's word count
IOR B,[777777,,770000] ;extend the sign
LDB C,[POINT 8,K,25] ;"page number" from old word count.
SUB K,B ;count words.
LDB B,[POINT 8,K,25] ;"page number" from new word count.
CAMG B,C ;have we crossed a page boundary?
JRST GRNK2 ;nope.
CAIN B,1(C) ;is this precisely one page higher?
TRNE K,1777 ;yes. Does count end with zeros?
JRST GNKBFF ;bad data.
GRNK2: AOBJN A,GRNK1
MOVE A,.JBREL
TRO A,1777
ADDI A,1
MOVEM A,GRNKAD ;this is the address for the 11-image.
LSH K,-1 ;convert -11 wc to -10 words.
PUSH P,K ;save it.
ADD K,.JBREL
CORE K,
HALT .-1
HRRZ K,GRNKAD
MOVSI K,1(K)
MOVS K,K
SETZM @GRNKAD
BLT K,@.JBREL
POP P,K
MOVN K,K
MOVS K,K
HRR K,GRNKAD
GRNK3: PUSHJ P,GETINR
JRST GNKUEF
MOVEM I,(K)
AOBJN K,GRNK3
HRRZM K,GRNKND
RELEAS DKIC,
OUTSTR [ASCIZ/11-Image is loaded into 10-memory.
/]
OUTSTR [ASCIZ/Next, we gronk the 11 via DTELOD
/]
MOVEI A,3
SLEEP A,
MOVEI A,GRNKAD
DTELOD A,
JRST DTLDER
OUTSTR [ASCIZ/According to the system, we're done now.
Go type ↑X LD BOOT if you're near the KL
/]
GRNK4: MOVE A,GRNKAD
SUBI A,1
CORE A,
JFCL
POPJ P,
NOGRNK: OUTSTR [ASCIZ/You can't do this without DEVPRV
/]
POPJ P,
DTLDER: OUTSTR [ASCIZ/According to the system, you lose.
/]
HALT GRNK4
GNKUEF: OUTSTR [ASCIZ/Unexpected End of file in L11 file.
/]
GRNBAD: RELEAS DKIC,
POPJ P,
GNKBFF: OUTSTR [ASCIZ/Bad Data in file's header record.
/]
JRST GRNBAD
;RAD50 R50L R50 RDB RDW RDW1 GETNUM GETNM1 GETNMX POPJ2 OCTTYP DECTYP DECTY DECTY1 LOSADR LOSTBL
;RAD50 CONVERTS SIXBIT IN I TO TWO RADIX 50 RIGHT ADJUSTED
;16 BIT BYTES IN T AND TT
RAD50: SETZB T,TT
MOVEI K,6
R50L: MOVEI J,0
ROTC I,6
IMULI TT,50
PUSHJ P,R50
ADDI TT,(J)
CAIE K,4
SOJG K,R50L
JUMPE K,CPOPJ
EXCH T,TT
SOJA K,R50L
R50: CAILE J,72
JRST POPJ1
CAIN J,4
JRST [MOVEI J,33 ↔ POPJ P,]
CAIN J,16
JRST [MOVEI J,34 ↔ POPJ P,]
CAIGE J,41
CAIGE J,32
CAIGE J,20
JRST POPJ1
SUBI J,40
JUMPGE J,CPOPJ
ADDI J,40+16
POPJ P,
;RDB READS A BYTE (I) AND ADDS IT INTO THE CHECKSUM (K)
RDB: PUSHJ P,GETIN
ADD K,I
POPJ P,
;RDW READS TWO BYTES AND MAKES A WORD (LOW ORDER BYTE FIRST)
;USES RDB SO CHECKSUM IS COMPUTED
RDW: PUSHJ P,RDB
RDW1: PUSH P,I
PUSHJ P,RDB
LSH I,8
IOR I,(P)
SUB P,[1,,1]
POPJ P,
;DIRECT RETURN IF GARBAGE TYPED, SKIP IF ALT, SKIP TWICE IF OK NUMBER (IN A)
;RETURNS DELIMITER IN B, NUMBER OF DIGITS IN C
GETNUM: SETZM MINUSF
MOVEI A,0
GETNM1: INCHWL B
CAIN B,"-"
JRST [SETOM MINUSF ↔ JRST GETNM1]
CAIN B,15
JRST GETNM1
CAIN B,12
JRST GETNMX
CAIN B,175
JRST POPJ1
CAIL B,"0"
CAILE B,"7"
POPJ P,
LSH A,3
ADDI A,-"0"(B)
AOJA C,GETNM1
GETNMX: SKIPGE MINUSF
MOVNS A
POPJ2: AOS (P)
JRST POPJ1
OCTTYP: PUSH P,G
MOVEI G,10
JRST DECTY
DECTYP: PUSH P,G
MOVEI G,=10
DECTY: PUSH P,D
PUSH P,E
PUSHJ P,DECTY1
POP P,E
POP P,D
POP P,G
POPJ P,
DECTY1: IDIVI D,(G)
HRLM E,(P)
SKIPE D
PUSHJ P,DECTY1
HLRZ E,(P)
ADDI E,"0"
OUTCHR E
POPJ P,
LOSADR:
FOR N←0,NLOSES-1,1<CONC (LL,\N)
>
LOSTBL: SECOND(\CBAR)
;FILSCN POPJ1 CPOPJ FILSCX FILSCP FILSP1 FILSP2 FILSP3 FILSP8 FILSP4 FILSP6 FILSP7 FILSP5 LUPFL FILNOU ENTFL GETSIX GETSX1 GETSX2 GETSX4 GETSX3 SIXTYP SIXTY1 SIXTY3 SIXTY4 INITL
;READ FILE SPECS FROM TTY INTO BLOCK - FILSCN
;WORD AFTER CALL IS DEFAULT EXTENSION,,BLK ADDRESS.
;DOESNT SKIP IF ALT MODE TYPED.
;SKIPS ONCE IF SYNTAX ERROR, TWICE IF OK.
FILSCN: MOVE L,@(P)
HLLZM L,1(L) ;SET UP DEFAULT EXTENSION
AOS (P)
MOVE I,SAVPPN
MOVEM I,3(L) ;INITIALIZE TO CURRENT DSK PPN
PUSHJ P,GETSIX ;SYMBOL IN J, SEPARATOR IN I
CAIN I,175 ;ALT MODE
POPJ P,
AOS (P)
MOVEM J,(L)
CAIN I,"."
JRST FILSCX ;GET EXTENSION
CAIN I,"["
JRST FILSCP ;GET PPN
CAIN I,12
POPJ1: AOS (P)
CPOPJ: POPJ P,
FILSCX: PUSHJ P,GETSIX
HLLZM J,1(L)
CAIN I,12
JRST POPJ1
CAIE I,"["
POPJ P,
FILSCP: PUSHJ P,GETSIX
JUMPE J,FILSP3
FILSP1: TLNE J,77 ;RIGHT ADJUST
JRST FILSP2
LSH J,-6
JRST FILSP1
FILSP2: HLLM J,3(L) ;STORE PROJ NUMBER
FILSP3: CAIN I,","
JRST FILSP4 ;GET PROGRAMMER NAME
FILSP8: CAIN I,"]"
JRST FILSP5 ;DONE
CAIN I,12
AOS (P)
POPJ P,
FILSP4: PUSHJ P,GETSIX
JUMPE J,FILSP8
FILSP6: TLNE J,77
JRST FILSP7
LSH J,-6
JRST FILSP6
FILSP7: HLRM J,3(L)
JRST FILSP8
FILSP5: PUSHJ P,GETSIX
CAIN I,12
JRST POPJ1
JRST FILSP5
LUPFL: OUTSTR [ASCIZ /LOOKUP FAILED - /]
MOVEI L,LUP
FILNOU: MOVE I,(L)
PUSHJ P,SIXTYP
OUTCHR ["."]
MOVE I,1(L)
PUSHJ P,SIXTY3
OUTCHR ["["]
MOVE I,3(L)
PUSHJ P,SIXTY3
OUTCHR [","]
MOVS I,3(L)
PUSHJ P,SIXTY3
OUTSTR [ASCIZ /]
/]
POPJ P,
ENTFL: OUTSTR [ASCIZ /ENTER FAILED - /]
MOVEI L,ENT
JRST FILNOU
;GET SIXBIT SYLLABLE IN J WITH SEPARATOR IN I
GETSIX: MOVE K,[440600,,J]
MOVEI J,0
GETSX1: INCHWL I
CAIN I,15
JRST GETSX1
CAIL I,"0"
CAILE I,"9"
JRST GETSX2 ;NOT NUM
JRST GETSX3 ;NUMBER
GETSX2: CAIL I,"a"
CAILE I,"z"
JRST GETSX4 ;NOT LOWER CASE
JRST [ SUBI I,40 ;LOWER CASE
JRST GETSX3]
GETSX4: CAIL I,"A"
CAILE I,"Z"
POPJ P,
GETSX3: SUBI I,40
TLNE K,770000
IDPB I,K
JRST GETSX1
;TYPE I IN SIXBIT (6 CHARS WORTH)
SIXTYP: MOVE J,[440600,,I]
SIXTY1: ILDB K,J
ADDI K,40
OUTCHR K
TLNE J,770000
JRST SIXTY1
POPJ P,
;TYPE LEFT 3 CHARS OF I
SIXTY3: MOVE J,[440600,,I]
SIXTY4: ILDB K,J
ADDI K,40
OUTCHR K
TLNE J,500000
JRST SIXTY4
POPJ P,
INITL: OUTSTR [ASCIZ /CAN'T INIT DSK - LOSEY, LOSEY
/]
JRST 4,.
;ZZ GETIN$R GETIN$1 GETIN GETIN$B GTINB1 GETEOF EOF1 EOF2 PUT PUT1
;GET WORD FROM DKIC FILE INTO I
;SKIP RETURNS UNLESS EOF
ZZ←←0
DEFINE GETGEN $ (DKIC,GETIN,IBUF)
<
GETIN$R:SOSG IBUF+2
IN DKIC,
JRST GETIN$1
STATZ DKIC,20000 ;EOF?
POPJ P, ;YES
JRST 4,. ;NO
GETIN$1:ILDB I,IBUF+1
JRST POPJ1
GETIN: PUSHJ P,GETIN$R
JRST GETEOF
POPJ P,
GETIN$B: PUSHJ P,GETIN
IFG ZZ,<JRST GTINB1>
IFE ZZ,<ZZ←←ZZ+1
GTINB1: LSH I,=24
ASH I,-=24
POPJ P,>
>
GETGEN (DKIC,GETIN,IBUF)
GETEOF: OUTSTR [ASCIZ /
EOF ON INPUT
/]
CLOSE DKOC,
MOVE T,P
EOF1: HRRZ A,(T)
CAIL A,LOWCAL
CAIL A,HICAL
SOJA T,EOF1
MOVSI B,-NLOSES
EOF2: CAME A,LOSADR(B)
AOBJN B,EOF2
JUMPGE B,[ OUTSTR [ASCIZ /LOSS NOT FOUND/]
JRST 4,.]
OUTSTR @LOSTBL(B)
OUTSTR [ASCIZ /
/]
JRST CMDUN
PUT: SOSG OBUF+2
OUT DKOC,
JRST PUT1
JRST 4,.
PUT1: IDPB I,OBUF+1
POPJ P,
;THINGS HAVING TO DO WITH THE SIZE OF THE 11'S CORE: SETSIZ
COMMENT ⊗
SETSIZ: MOVE T,D
IMULI T,=2048
MOVEM T,HCOR
SETZM LOWAD
MOVEM T,HIAD
LSH T,-1 ;HCOR/2
MOVEM T,HCOR2
HRLM T,FILBPT+1
SUBI T,1 ;<HCOR-2>/2 (OREG)
HRRM T,RDOREG
HRRM T,WROREG
SUBI T,1 ;<HCOR-4>/2 (IREG)
HRRM T,WRIREG
HRRM T,RDIREG
HRRM T,WRBOTH
MOVE TT,T
LSH TT,1
HRRM TT,INIRTN+5
SUBI T,1 ;<HCOR-6>/2 (TTY FLAG)
HRRM T,WR10FL
HRRM T,RD10FL
HRLM T,ZERCOR+1
SUBI T,1 ;<HCOR-10>/2 (Pristine symbol table top)
HRRM T,SMTOPW
HRRM T,SMTOPR
SUBI T,6 ;<HCOR-24>/2 (Initialization routine)
TRO T,400000
HRRM T,INIT11
LSH T,1
HRRM T,INIADR+1
HRLM T,CLKVEC+1
MOVE T,HCOR2
SUBI T,14001 ;<HCOR-30002>/2
HRRM T,SYMADR
SUBI T,1 ;<HCOR-30004>/2
HRRM T,STADR
SUBI T,1
LSH T,1 ;HCOR-30006
MOVEM T,SYMEND
MOVE T,D
MOVEI I,0
MOVE J,[POINT 6,I]
IDIVI T,=10
ADDI T,' 0'
IDPB T,J
ADDI TT,' 0'
IDPB TT,J
MOVEI K,' K'
IDPB K,J
MOVEM I,DDTEXT
POPJ P,
HCOR: 0 ;1st NXM address
HCOR2: 0 ;HCOR/2
⊗
;LPDL PDL SAVPPN LUP ENT IBUF OBUF JMPBLF PROGSA MINUSF LCHRET DDTSA OVERLF NOSYMS WORD SEP
LPDL←←30
PDL: BLOCK LPDL
SAVPPN: 0 ;HAS CURRENT DSK PPN
LUP: BLOCK 4
ENT: BLOCK 4
IBUF: BLOCK 3
OBUF: BLOCK 3
JMPBLF: -1
PROGSA: -1 ;PROGRAM'S STARTING ADDRESS
MINUSF: 0
LCHRET~ 0 ;-1 => JUST GOT CR
DDTSA: 0 ;DDT'S STARTING ADDRESS
OVERLF: 0 ;-1 FOR OVERLAY
NOSYMS: 0 ;-1 FOR NO SYMS LOADED AT DDTL
WORD: 0
SEP: 0
END BEG