mirror of
https://github.com/PDP-10/its.git
synced 2026-05-24 06:10:34 +00:00
1166 lines
22 KiB
Plaintext
Executable File
1166 lines
22 KiB
Plaintext
Executable File
TITLE 11STNK - STINKING ODOR OF PDP11'S
|
||
;ALSO TIMESHARING BOOT11 COMMAND
|
||
|
||
IFNDEF 10XP,IFE .OSMIDAS-SIXBIT/TENEX/,[ 10XP==1 ] .ELSE 10XP==0
|
||
IFNDEF ITSP, ITSP==1-10XP
|
||
DEFINE 10X
|
||
IFN 10XP!TERMIN
|
||
DEFINE ITS
|
||
IFN ITSP!TERMIN
|
||
|
||
10X, .DECSAV
|
||
|
||
IF1 EXPUNGE MAP ;FUCK YOU CRISPIN
|
||
APR==0
|
||
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
T=6
|
||
TT=7
|
||
H=10
|
||
I=11
|
||
J=12
|
||
Q=13
|
||
W=14
|
||
P=17
|
||
|
||
|
||
ITS, DLB==60
|
||
ITS, DLC==64
|
||
ITS, PAG==10
|
||
ITS, SWPUA=701540,,
|
||
|
||
11CORL==28.*1024. ;# WORDS OF PDP11 CORE
|
||
|
||
ITS,[
|
||
INCH==1
|
||
OUCH==2
|
||
TYIC==3
|
||
TYOC==4
|
||
ERRCH==5
|
||
|
||
OPENI: SETZ
|
||
SIXBIT/OPEN/
|
||
[.UII,,INCH]
|
||
0(Q)
|
||
2(Q)
|
||
3(Q)
|
||
SETZ 1(Q)
|
||
|
||
OPENO: SETZ
|
||
SIXBIT/OPEN/
|
||
[.BIO,,OUCH]
|
||
0(Q)
|
||
2(Q)
|
||
3(Q)
|
||
SETZ 1(Q)
|
||
|
||
;FILE NAME BLOCKS. CONTAIN INITIAL DEFAULTS
|
||
;DEV SNM FN1 FN2
|
||
|
||
RUGFN: SIXBIT/DSK/
|
||
SIXBIT/./
|
||
SIXBIT/KLRUG/
|
||
SIXBIT/BIN/
|
||
|
||
DDTFN: SIXBIT/DSK/
|
||
SIXBIT/./
|
||
SIXBIT/11DDT/
|
||
SIXBIT/16K/
|
||
|
||
PRGFN: SIXBIT/DSK/
|
||
SIXBIT/./
|
||
SIXBIT/IOELEV/
|
||
SIXBIT/BIN/
|
||
|
||
DMPFN: SIXBIT/DSK/
|
||
0
|
||
SIXBIT/FOO/
|
||
SIXBIT/BIN/
|
||
];ITS
|
||
|
||
10X,[
|
||
;BLOCKS FOR LONG FORM GTJFN
|
||
|
||
INJFN' ;JFN HERE
|
||
RUGFN: 160000,,0 ;OLD FILE, CONFIRM
|
||
100,,101 ;USE TERMINAL
|
||
0 ;DEFAULT DEVICE
|
||
-1,,[ASCIZ/PDP11/] ;DEFAULT DIRECTORY
|
||
-1,,[ASCIZ/KLRUG/] ;DEFAULT FILENAME
|
||
-1,,[ASCIZ/BIN/] ;DEFAULT FILETYPE (PALX OUTPUT)
|
||
0 ;PROTECTION
|
||
0 ;ACCOUNT
|
||
|
||
|
||
INJFN' ;JFN HERE
|
||
DDTFN: 160000,,0 ;OLD FILE, CONFIRM
|
||
100,,101 ;USE TERMINAL
|
||
0 ;DEFAULT DEVICE
|
||
-1,,[ASCIZ/PDP11/] ;DEFAULT DIRECTORY
|
||
-1,,[ASCIZ/11DDT/] ;DEFAULT FILENAME
|
||
-1,,[ASCIZ/24K/] ;DEFAULT FILETYPE
|
||
0 ;PROTECTION
|
||
0 ;ACCOUNT
|
||
|
||
INJFN' ;JFN HERE
|
||
PRGFN: 160000,,0 ;OLD FILE, CONFIRM
|
||
100,,101 ;USE TERMINAL
|
||
0 ;DEFAULT DEVICE
|
||
0 ;DEFAULT DIRECTORY
|
||
-1,,[ASCIZ/FOO/] ;DEFAULT FILENAME
|
||
-1,,[ASCIZ/BIN/] ;DEFAULT FILETYPE
|
||
0 ;PROTECTION
|
||
0 ;ACCOUNT
|
||
|
||
;IS THIS GOING TO BE USED?
|
||
OUTJFN' ;JFN HERE
|
||
DMPFN: 660000,,0 ;NEW FILE, CONFIRM
|
||
100,,101 ;USE TERMINAL
|
||
0 ;DEFAULT DEVICE
|
||
0 ;DEFAULT DIRECTORY
|
||
-1,,[ASCIZ/FOO/] ;DEFAULT FILENAME
|
||
-1,,[ASCIZ/SAV/] ;DEFAULT FILETYPE
|
||
0 ;PROTECTION
|
||
0 ;ACCOUNT
|
||
];10X
|
||
|
||
LPDL==50
|
||
PDL: -LPDL,,.
|
||
BLOCK LPDL
|
||
|
||
;COMMAND TABLE
|
||
|
||
;1ST WD - SIXBIT NAME OF COMMAND (FIRST LETTER MUST BE UNIQUE)
|
||
;2ND WD - (LH) 0 IF NO FILE NAME ELSE POINTER TO FILE NAME BLOCK
|
||
; - (RH) DISPATCH ADDRESS
|
||
;3RD WD - POINTS TO ASCIZ HELP STRING
|
||
|
||
COMTAB: SIXBIT/RUG/ ? RUGFN,,RUGLD ? [ASCIZ/LOAD RUG/]
|
||
SIXBIT/DDT/ ? DDTFN,,DDTLD ? [ASCIZ/LOAD 11DDT/]
|
||
SIXBIT/LOAD/ ? PRGFN,,PRGLD ? [ASCIZ/LOAD A PROGRAM/]
|
||
SIXBIT/MAP/ ? 0,,MAP ? [ASCIZ/PRINT CORE MAP/]
|
||
ITS, SIXBIT/ADUMP/ ? DMPFN,,ADUMP ? [ASCIZ/DUMP IN PALX BIN FORMAT/]
|
||
ITS, SIXBIT/BDUMP/ ? DMPFN,,BDUMP ? [ASCIZ/DUMP IN KLDCP BIN FORMAT/]
|
||
ITS, SIXBIT/TDUMP/ ? DMPFN,,TDUMP ? [ASCIZ/DUMP AS DL10 BOOTSTRAP PROGRAM/]
|
||
SIXBIT/STUFF/ ? 0,,STUFF ? [ASCIZ/STUFF INTO PDP11/]
|
||
SIXBIT/HELP/ ? 0,,HELP ? [ASCIZ/ /]
|
||
SIXBIT/?/ ? 0,,HELP ? [ASCIZ/ /]
|
||
LCMTAB==.-COMTAB
|
||
|
||
HELP: PUSHJ P,CRLF
|
||
MOVE A,[-LCMTAB/3,,COMTAB]
|
||
HELP1: MOVE TT,(A)
|
||
PUSHJ P,SIXOUT
|
||
MOVEI TT,[ASCIZ/ (FILENAME)/]
|
||
MOVE T,1(A)
|
||
TLNE T,-1
|
||
PUSHJ P,ASCOUT
|
||
MOVEI TT,[ASCIZ/ - /]
|
||
PUSHJ P,ASCOUT
|
||
MOVE TT,2(A)
|
||
PUSHJ P,ASCOUT
|
||
PUSHJ P,CRLF
|
||
ADDI A,2
|
||
AOBJN A,HELP1
|
||
POPJ P,
|
||
|
||
;SIXBIT OUTPUT FROM TT
|
||
SIXOUT: MOVEI T,0
|
||
LSHC T,6
|
||
ADDI T,40
|
||
ITS, .IOT TYOC,T
|
||
10X,[ EXCH T,A
|
||
PBOUT
|
||
EXCH T,A
|
||
];10X
|
||
JUMPN TT,SIXOUT
|
||
CPOPJ: POPJ P,
|
||
|
||
CRLF: MOVEI TT,[ASCIZ/
|
||
/]
|
||
;ASCIZ OUTPUT FROM TT
|
||
ASCOUT: HRLI TT,440700
|
||
ITS,[
|
||
ASCOU1: ILDB T,TT
|
||
JUMPE T,CPOPJ
|
||
.IOT TYOC,T
|
||
JRST ASCOU1
|
||
];ITS
|
||
10X,[ EXCH TT,A
|
||
PSOUT
|
||
EXCH TT,A
|
||
POPJ P,
|
||
];10X
|
||
|
||
;OCTAL OUTPUT FROM T
|
||
OCTOUT: IDIVI T,8
|
||
HRLM TT,(P)
|
||
SKIPE T
|
||
PUSHJ P,OCTOUT
|
||
HLRZ TT,(P)
|
||
ADDI TT,"0
|
||
ITS, .IOT TYOC,TT
|
||
10X,[ EXCH TT,A
|
||
PBOUT
|
||
EXCH TT,A
|
||
];10X
|
||
POPJ P,
|
||
|
||
;DECIMAL OUTPUT FROM T
|
||
DECOUT: IDIVI T,10.
|
||
HRLM TT,(P)
|
||
SKIPE T
|
||
PUSHJ P,DECOUT
|
||
HLRZ TT,(P)
|
||
ADDI TT,"0
|
||
ITS, .IOT TYOC,TT
|
||
10X,[ EXCH TT,A
|
||
PBOUT
|
||
EXCH TT,A
|
||
];10X
|
||
POPJ P,
|
||
|
||
;READ SYLLABLE FROM TTY
|
||
;RETURN SIXBIT IN TT, DELIMITER IN A
|
||
|
||
GETSYL: MOVEI TT,0
|
||
MOVE T,[440600,,TT]
|
||
GETSY1:
|
||
ITS, .IOT TYIC,A
|
||
10X, PBIN
|
||
CAIE A,^G
|
||
CAIN A,177
|
||
JRST CMDER ;RUBOUT - ERR BACK TO COMMAND LEVEL
|
||
CAIE A,":
|
||
CAIN A,";
|
||
POPJ P,
|
||
CAIG A,40
|
||
POPJ P,
|
||
CAIGE A,140
|
||
SUBI A,40
|
||
TLNE T,770000
|
||
IDPB A,T
|
||
JRST GETSY1
|
||
|
||
;FILE NAME READER
|
||
;CALL WITH Q -> FILE NAME BLOCK.
|
||
;SUPPORTS ALTMODE, ^X, ^Y
|
||
|
||
FNR: MOVEI TT,[ASCIZ/ (FILENAME) /]
|
||
PUSHJ P,ASCOUT
|
||
ITS,[
|
||
SKIPN 1(Q)
|
||
.SUSET [.RSNAM,,A]
|
||
SKIPN 1(Q)
|
||
MOVEM A,1(Q)
|
||
FNR0: SETZB B,C ;B,C,D,E = DEV,SNM,FN1,FN2
|
||
SETZB D,E
|
||
FNR1: PUSHJ P,GETSYL
|
||
JUMPE TT,FNR2
|
||
CAIN A,":
|
||
JRST [ MOVEM TT,B ? JRST FNR2 ]
|
||
CAIN A,";
|
||
JRST [ MOVEM TT,C ? JRST FNR2 ]
|
||
FNR1A: SKIPE D
|
||
SKIPA E,TT
|
||
MOVE D,TT
|
||
FNR2: CAIL A,40
|
||
JRST FNR1
|
||
CAIE A,33
|
||
JRST FNR3
|
||
PUSHJ P,FNRST ;ALTMODE, SHOW CURRENT NAME
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,FNRALT
|
||
JRST FNR0
|
||
|
||
FNRALT: IRPC ZZ,,[:;X ]
|
||
MOVE TT,.IRPCNT(Q)
|
||
PUSHJ P,SIXOUT
|
||
IFSE [ZZ]X,.IOT TYOC,[40]
|
||
.ELSE [ MOVEI TT,[ASCIZ/ZZ /] ? PUSHJ P,ASCOUT ]
|
||
TERMIN
|
||
|
||
FNR3: CAIE A,^X
|
||
JRST FNR4
|
||
MOVE TT,2(Q)
|
||
MOVEI A,40
|
||
JRST FNR1A
|
||
|
||
FNR4: CAIE A,^Y
|
||
JRST FNRST
|
||
MOVE TT,3(Q)
|
||
MOVEI A,40
|
||
JRST FNR1A
|
||
|
||
FNRST: REPEAT 4,[
|
||
SKIPE B+.RPCNT
|
||
MOVEM B+.RPCNT,.RPCNT(Q)
|
||
] POPJ P,
|
||
];ITS
|
||
10X,[ MOVEI A,(Q)
|
||
MOVEI B,0
|
||
GTJFN
|
||
JRST FNR1
|
||
HRRZS A ;JFN
|
||
MOVEM A,@-1(Q)
|
||
POPJ P,
|
||
|
||
FNR1: MOVE B,A
|
||
HRLI B,.FHSLF
|
||
MOVEI A,101
|
||
MOVEI C,0
|
||
ERSTR
|
||
JFCL
|
||
JFCL
|
||
JRST FNR
|
||
|
||
;OPENF JFN IN A FOR 8-BIT INPUT
|
||
;ON ITS PALX MAKES ONE BYTE PER WORD BIN FILES,
|
||
;BUT ON TENEX IT MAKES FOUR BYTES PER WORD. RANDOM!
|
||
OPENI: MOVE B,[100000,,600000] ;36-BIT, INPUT, HALTF ON I/O ERROR
|
||
OPENF
|
||
CAIA
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
;OPENF JFN IN A FOR 36-BIT OUTPUT
|
||
OPENO: MOVE B,[440000,,500000] ;36-BIT, INPUT, HALTF ON I/O ERROR
|
||
OPENF
|
||
CAIA
|
||
AOS (P)
|
||
POPJ P,
|
||
|
||
;CLOSE & RELEASE JFN IN INJFN
|
||
CLOSEI: HRRZ A,INJFN
|
||
CLOSF
|
||
JRST FSERR ;?
|
||
POPJ P,
|
||
|
||
;.IOT INCH,A
|
||
INCHA: PUSH P,B
|
||
HRRZ A,INJFN
|
||
BIN
|
||
MOVE A,B
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
.VALUE==HALTF
|
||
];10X
|
||
|
||
ITS,[
|
||
INCHA: .IOT INCH,A
|
||
POPJ P,
|
||
];ITS
|
||
|
||
GO: MOVE P,PDL
|
||
ITS,[ .OPEN TYIC,[.UAI,,'TTY]
|
||
.VALUE
|
||
.OPEN TYOC,[.UAO,,'TTY]
|
||
.VALUE
|
||
];ITS
|
||
MOVE TT,[.FNAM1]
|
||
PUSHJ P,SIXOUT
|
||
ITS, .IOT TYOC,[".]
|
||
10X, MOVEI A,".
|
||
10X, PBOUT
|
||
MOVEI T,.FVERS
|
||
PUSHJ P,DECOUT
|
||
PUSHJ P,CRLF
|
||
MOVSI A,-1 ;LH -1 IF LOC NOT STORED INTO
|
||
MOVEM A,11CORE
|
||
MOVE A,[11CORE,,11CORE+1]
|
||
BLT A,11CORE+11CORL-1
|
||
ITS,[ .SUSET [.RXJNAME,,A] ;See if this is BOOT11
|
||
CAME A,[SIXBIT/BOOT11/]
|
||
JRST CMD ;No, take 11STNK commands
|
||
MOVEI Q,DDTFN ;Yes, load .;11DDT 16K
|
||
PUSHJ P,DDTLD
|
||
MOVEI Q,PRGFN ;and .;IOELEV BIN
|
||
PUSHJ P,PRGLD
|
||
MOVEI TT,[ASCIZ/Stuff/]
|
||
PUSHJ P,ASCOUT
|
||
PUSHJ P,STUFF ;ask user then stuff it
|
||
.LOGOUT 1, ;go away if user types N
|
||
];ITS
|
||
|
||
CMD: MOVE P,PDL
|
||
ITS, .IOT TYOC,["*]
|
||
ITS, .IOT TYIC,A
|
||
10X, MOVEI A,"*
|
||
10X, PBOUT
|
||
10X, PBIN
|
||
CAIGE A,40
|
||
JRST CMDER
|
||
CAIGE A,140
|
||
SUBI A,40
|
||
ANDI A,77
|
||
MOVE B,[-LCMTAB/3,,COMTAB]
|
||
CMD1: LDB T,[360600,,(B)]
|
||
CAMN T,A
|
||
JRST CMD2
|
||
ADDI B,2
|
||
AOBJN B,CMD1
|
||
CMDER: MOVEI TT,[ASCIZ/???
|
||
/]
|
||
PUSHJ P,ASCOUT
|
||
JRST CMD
|
||
|
||
CMD2: MOVE TT,(B) ;COMPLETE THE COMMAND NAME
|
||
LSH TT,6
|
||
PUSHJ P,SIXOUT
|
||
HLRZ Q,1(B) ;GET FILE NAME ARG IF NECC
|
||
HRRZ H,1(B)
|
||
JUMPE Q,CMD3
|
||
PUSHJ P,FNR
|
||
CMD3: PUSHJ P,(H)
|
||
JRST CMD
|
||
|
||
ITS,[
|
||
FSERR: .OPEN ERRCH,[.UAI,,'ERR ? 1 ? 0]
|
||
.VALUE
|
||
FSERR1: .IOT ERRCH,A
|
||
JUMPL A,FSERR2
|
||
CAIGE A,40
|
||
JRST FSERR2
|
||
.IOT TYOC,A
|
||
JRST FSERR1
|
||
|
||
FSERR2: MOVEI TT,[ASCIZ/ - /]
|
||
PUSHJ P,ASCOUT
|
||
PUSHJ P,FNRALT
|
||
PUSHJ P,CRLF
|
||
JRST CMD
|
||
];ITS
|
||
10X,[
|
||
FSERR: MOVEI A,101
|
||
MOVE B,[.FHSLF,,-1]
|
||
MOVEI C,0
|
||
ERSTR
|
||
JFCL
|
||
JFCL
|
||
PUSHJ P,CRLF
|
||
JRST CMD
|
||
];10X
|
||
|
||
DDTLD: SETZM RUGFLG
|
||
ITS, .CALL OPENI ;LOAD 11DDT
|
||
10X, PUSHJ P,OPENI
|
||
JRST FSERR
|
||
PUSHJ P,ALOAD
|
||
MOVEM W,RUGSA
|
||
LSH W,-1
|
||
MOVEI A,11CORE-2(W) ;-> WORD IN WHICH TO STORE START ADDRESS
|
||
MOVEM A,SASTOR
|
||
MOVEI A,11CORE-1(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE
|
||
MOVEM A,O.SYME
|
||
MOVE A,(A) ;SET UP CURRENT CONTENTS
|
||
LSH A,-1
|
||
MOVEM A,RUGSYM
|
||
MOVEI A,-2(W) ;-11 ADDR/2 OF HIGHEST SYMBOL TABLE LOC
|
||
JRST RUGLD1 ;FROM HERE ON WORKS LIKE RUG
|
||
|
||
|
||
RUGLD: SETOM RUGFLG
|
||
ITS, .CALL OPENI ;LOAD RUG
|
||
10X, PUSHJ P,OPENI
|
||
JRST FSERR
|
||
PUSHJ P,ALOAD
|
||
LSH W,-1 ;START ADDR OF RUG -> VECTOR OF MAGIC CRUFT
|
||
MOVE A,11CORE(W) ;FIRST WORD IS READ START ADDR (O.ODT)
|
||
MOVEM A,RUGSA
|
||
SETZM SASTOR ;RUG DOESN'T KNOW ABOUT PROG START ADDR
|
||
MOVEI A,11CORE+2(W) ;-> WORD TO CONTAIN LOWEST -11 ADDR OF SYMBOL TABLE
|
||
MOVEM A,O.SYME
|
||
MOVE A,11CORE+2(W) ;THIRD WORD IS POINTER TO LOWEST SYMBOL TABLE LOC
|
||
LSH A,-1
|
||
MOVEM A,RUGSYM
|
||
MOVE A,11CORE+1(W) ;SECOND WORD -> HIGH SYMBOL TABLE LOC
|
||
LSH A,-1
|
||
RUGLD1: SUB A,RUGSYM ;A := # WORDS OF SYMBOL TABLE
|
||
IDIVI A,16.*3+2 ;A := # BLOCKS, B := # WORDS IN LAST BLOCK
|
||
JUMPE B,G0001
|
||
MOVE A,RUGSYM
|
||
ADD A,B ;A := WORD ADDR OF TOP OF BLOCK
|
||
SUBI A,2
|
||
MOVEM A,FLGPNT
|
||
SUBI B,2
|
||
IDIVI B,3 ;B := # SYMBOLS ALREADY USED IN BLOCK
|
||
SUBI B,16.
|
||
G0001: MOVNM B,SYMCNT ;SET # OF SYMBOLS YET TO GO
|
||
MOVE A,@O.SYME
|
||
MOVEM A,SYMLO ;INITIAL LOW SYMBOL ADDR (FOR MAP)
|
||
ITS, .CLOSE INCH,
|
||
10X, PUSHJ P,CLOSEI
|
||
MOVE A,PRGHI
|
||
MOVEM A,RUGHI
|
||
SETZM PRGHI
|
||
POPJ P,
|
||
|
||
|
||
PRGLD:
|
||
ITS, .CALL OPENI ;LOAD IOELEVEN
|
||
10X, PUSHJ P,OPENI
|
||
JRST FSERR
|
||
PUSHJ P,ALOAD
|
||
MOVEM W,SADR ;STORE START ADDR INTO 10
|
||
MOVEM W,@SASTOR ;STORE START ADDR INTO 11
|
||
PUSHJ P,SLOAD ;LOAD SYMBOLS INTO CORE IMAGE FOR RUG
|
||
ITS, .CLOSE INCH,
|
||
10X, PUSHJ P,CLOSEI
|
||
POPJ P,
|
||
|
||
;CORE LOADER
|
||
|
||
ALOAD: PUSHJ P,INCHA ;SEARCH FOR START OF BLOCK
|
||
JUMPE A,ALOAD ;SKIPPING "BLANK TAPE"
|
||
CAIE A,1
|
||
.VALUE ;UNKNOWN BLOCK TYPE
|
||
PUSHJ P,INCHA ;SECOND BYTE OF HEADER ALWAYS 0
|
||
SKIPE A
|
||
.VALUE
|
||
PUSHJ P,RWORD ;BYTE COUNT + 6
|
||
HRREI Q,-6(W)
|
||
PUSHJ P,RWORD ;LOAD ADDRESS
|
||
JUMPLE Q,JBLK
|
||
LD1: PUSHJ P,INCHA ;BYTE TO BE LOADED
|
||
TDNE A,[-400]
|
||
.VALUE
|
||
CAIL W,11CORL*2
|
||
.VALUE
|
||
CAMLE W,PRGHI
|
||
MOVEM W,PRGHI
|
||
MOVEI J,2*11CORE(W) ;FIGURE OUT WHERE IT GOES
|
||
ROT J,-1
|
||
SKIPL J
|
||
TLOA J,001000
|
||
HRLI J,101000
|
||
DPB A,J
|
||
HRRZS @J ;MARK THIS WORD AS STORED INTO
|
||
ADDI W,1
|
||
SOJG Q,LD1
|
||
PUSHJ P,INCHA ;IGNORE CHECKSUM
|
||
JRST ALOAD
|
||
|
||
JBLK: PUSHJ P,INCHA ;GOBBLE CHECKSUM
|
||
JUMPE Q,CPOPJ ;RETURN FROM ALOAD WITH START ADDR IN W
|
||
.VALUE ;BLOCK LENGTH < 6 ?
|
||
|
||
ITS,[
|
||
RWORD: .IOT INCH,W ;FORM TWO BYTES INTO A WORD
|
||
TDNE W,[-400]
|
||
.VALUE
|
||
.IOT INCH,A
|
||
TDNE A,[-400]
|
||
.VALUE
|
||
LSH A,8
|
||
IOR W,A
|
||
POPJ P,
|
||
];ITS
|
||
|
||
10X,[
|
||
RWORD: PUSH P,B
|
||
HRRZ A,INJFN
|
||
BIN
|
||
MOVE W,B ;LOW BYTE
|
||
TDNE W,[-400]
|
||
.VALUE
|
||
BIN
|
||
MOVE A,B ;HIGH BYTE
|
||
TDNE A,[-400]
|
||
.VALUE
|
||
LSH A,8
|
||
IOR W,A
|
||
POP P,B
|
||
POPJ P,
|
||
];10X
|
||
|
||
;SYMBOL LOADER
|
||
|
||
SBTB: 440600,,A ;SIXBIT BYTE POINTER TO A
|
||
|
||
RAD50: MOVE Q,SBTB
|
||
PUSHJ P,LOOP50
|
||
HRRZM E,11CORE-3(B)
|
||
PUSHJ P,LOOP50
|
||
HRRZM E,11CORE-2(B)
|
||
POPJ P,
|
||
|
||
LOOP50: MOVEI E,0
|
||
MOVEI D,3
|
||
LOP50: ILDB C,Q
|
||
PUSHJ P,CNVT
|
||
IMULI E,50
|
||
ADD E,C
|
||
SOJG D,LOP50
|
||
POPJ P,
|
||
|
||
CNVT: CAIL C,41
|
||
CAILE C,72
|
||
JRST NOTLET
|
||
SUBI C,40
|
||
POPJ P,
|
||
|
||
NOTLET: CAIN C,4
|
||
JRST DOLR
|
||
CAIN C,5
|
||
JRST PRCNT
|
||
CAIN C,16
|
||
JRST PERD
|
||
CAIG C,31
|
||
CAIGE C,20
|
||
JRST NOTNUM
|
||
ADDI C,16
|
||
POPJ P,
|
||
|
||
NOTNUM: MOVEI C,0
|
||
POPJ P,
|
||
|
||
DOLR: MOVEI C,33
|
||
POPJ P,
|
||
|
||
PERD: MOVEI C,34
|
||
POPJ P,
|
||
|
||
PRCNT: MOVEI C,35
|
||
POPJ P,
|
||
|
||
SLOAD: PUSHJ P,INCHA ;LOAD SYMBOLS
|
||
JUMPE A,SLOAD ;SKIP BLANK TAPE
|
||
CAIE A,2
|
||
.VALUE ;NOT SYMBOLS BLOCK
|
||
MOVE B,RUGSYM ;LOAD SYMBOLS AT -3(B),-2(B),-1(B)
|
||
MOVE H,SYMCNT ;# SYMBOLS YET TO GO IN THIS BLOCK
|
||
MOVE A,FLGPNT
|
||
HRLZ I,11CORE+1(A) ;PICK UP REGISTER FLAGS WORD
|
||
HRR I,11CORE(A) ;PICK UP HALF-KILL FLAGS WORD
|
||
JUMPN H,SLOAD1
|
||
SLOAD0: MOVEI H,16. ;NEW BLOCK
|
||
MOVE B,RUGSYM
|
||
SUBI B,2
|
||
MOVEM B,RUGSYM
|
||
MOVEM B,FLGPNT
|
||
SETZB I,11CORE(B)
|
||
SETZM 11CORE+1(B)
|
||
SLOAD1: PUSHJ P,INCHA
|
||
JUMPE A,SLOADE
|
||
AOJE A,SLOADE
|
||
SOS A
|
||
PUSHJ P,RAD50 ;DEPOSIT 2 -11 WORDS OF RADIX 50 FOR THIS SIXBIT
|
||
PUSHJ P,INCHA ;GET FLAGS AND VALUE
|
||
HRRZM A,11CORE-1(B) ;STORE VALUE
|
||
MOVEI D,100000
|
||
MOVNI E,-1(H) ;E IS 0 FOR LOWEST SYM IN BLOCK, -15. FOR HIGHEST
|
||
LSH D,(E) ;POINT TO RIGHT BIT IN FLAG
|
||
TLNE A,4000
|
||
TLO I,(D) ;2ND FLAG WORD
|
||
TLNE A,20000
|
||
TRO I,(D) ;1ST FLAG WORD
|
||
SUBI B,3
|
||
SOJG H,SLOAD1
|
||
MOVE A,FLGPNT ;BLOCK DONE, FILL OUT
|
||
HLRZM I,11CORE+1(A)
|
||
HRRZM I,11CORE(A)
|
||
MOVEM B,RUGSYM
|
||
JRST SLOAD0 ;START NEXT BLOCK
|
||
|
||
SLOADE: MOVE A,FLGPNT ;FINISH LAST BLOCK
|
||
HLRZM I,11CORE+1(A)
|
||
HRRZM I,11CORE(A)
|
||
MOVEM B,RUGSYM
|
||
LSH B,1
|
||
MOVEM B,@O.SYME ;TELL RUG WHERE SYMBOL TABLE ENDS
|
||
MOVEM B,SYMLO
|
||
POPJ P,
|
||
|
||
RUGSYM: 0 ;WORD ADDR OF LOWEST LOC IN RUG SYMBOL TABLE
|
||
FLGPNT: 0 ;WORD ADDR OF FLAG PAIR FOR CURRENT SYM BLOCK
|
||
SYMCNT: 0 ;NUMBER OF SYMBOLS NOT YET GENERATED INTO CURRENT BLOCK
|
||
O.SYME: 0 ;-> WORD IN -11 CORE IMAGE WHICH CONTAINS LOWEST
|
||
;-11 ADDR USED BY SYMBOL TABLE
|
||
RUGFLG: 0 ;-1 RUG, 0 11DDT
|
||
SASTOR: 0 ;-> WORD IN -11 CORE IMAGE WHERE START ADDRESS IS STORED
|
||
PRGHI: 0 ;HIGHEST LOC LOADED
|
||
SYMLO: 0 ;LOWEST LOC LOADED WITH SYMBOLS
|
||
.SEE RUGSA
|
||
RUGHI: 0 ;HIGHEST LOC LOADED WITH RUG/DDT
|
||
.SEE SADR
|
||
|
||
MAP: PUSHJ P,CRLF
|
||
IRP WD,,[PRGHI,SYMLO,RUGSA,RUGHI,SADR]NM,,[HIGHEST PROGRAM LOC,LOWEST SYMBOL LOC,START ADDRESS OF DEBUGGER,HIGHEST DEBUGGER LOC,PROGRAM START ADDRESS]
|
||
MOVEI TT,[ASCIZ/NM=/]
|
||
PUSHJ P,ASCOUT
|
||
MOVE T,WD
|
||
PUSHJ P,OCTOUT
|
||
PUSHJ P,CRLF
|
||
TERMIN
|
||
POPJ P,
|
||
|
||
ITS,[
|
||
;DUMP OUT AS PDP11 ABSOLUTE BINARY
|
||
;ADUMP DUMPS ONE BYTE PER WORD, LIKE PALX
|
||
;BDUMP DUMPS FOUR BYTES PER WORD, ARRANGED IN A WAY TO CORRESPOND
|
||
;TO THE RH11. THIS FOR KLDCP '.BIN' FILES.
|
||
;I IS BYTE# FOR BDUMP, J IS BUFFER, Q IS CHECKSUM, W IS -11 ADDR
|
||
|
||
BDMPNT: 221000,,J
|
||
321000,,J
|
||
001000,,J
|
||
101000,,J
|
||
|
||
ADMPNT: 001000,,J
|
||
|
||
PUTB: 0 ;APUTB OR BPUTB
|
||
|
||
APUTB: DPB A,ADMPNT
|
||
ADD Q,A
|
||
APUTW: HRROI TT,J
|
||
.IOT OUCH,TT
|
||
APUTW1: MOVSI I,-4
|
||
MOVEI J,0
|
||
POPJ P,
|
||
|
||
BPUTB: DPB A,BDMPNT(I)
|
||
ADD Q,A
|
||
AOBJP I,APUTW
|
||
POPJ P,
|
||
|
||
ADUMP: SKIPA TT,[APUTB]
|
||
BDUMP: MOVEI TT,BPUTB
|
||
MOVEM TT,PUTB
|
||
.CALL OPENO
|
||
JRST FSERR
|
||
PUSHJ P,APUTW1
|
||
MOVSI W,-11CORL
|
||
ADUMP1: SKIPGE 11CORE(W) ;SEARCH FOR WORD THAT'S BEEN LOADED
|
||
AOBJN W,ADUMP1
|
||
JUMPGE W,DUMPJB ;ALL CORE DUMPED, DO JUMP BLOCK
|
||
MOVEI H,(W) ;H := PDP11 ADDR OF FIRST WORD
|
||
LSH H,1
|
||
HRLI W,-30 ;MAX BLOCK LENGTH; SCAN FOR WORD NOT LOADED
|
||
ADUMP2: SKIPL 11CORE(W)
|
||
AOBJN W,ADUMP2
|
||
JUMPGE W,ADUMP4 ;BLOCK MAX SIZE
|
||
SKIPL 11CORE+1(W)
|
||
AOBJN W,ADUMP2 ;NOT TWO ZEROES IN A ROW
|
||
ADUMP4: MOVEI E,(W) ;NEXT LOCATION TO LOOK AT IS SAVED IN E
|
||
MOVEI Q,0 ;INIT CKSM
|
||
MOVEI A,1 ;PUT BLOCK HEADER
|
||
PUSHJ P,@PUTB
|
||
MOVEI A,0
|
||
PUSHJ P,@PUTB
|
||
MOVE A,E
|
||
LSH A,1
|
||
SUB A,H
|
||
MOVE D,A
|
||
ADDI A,6
|
||
PUSHJ P,DWORD ;BYTE COUNT
|
||
MOVE A,H
|
||
PUSHJ P,DWORD ;LOAD ADDRESS
|
||
MOVE W,H
|
||
LSH W,-1
|
||
LSH D,-1
|
||
MOVNS D
|
||
HRL W,D ;NOW W IS AOBJN PTR TO WORDS TO DUMP
|
||
ADUMP5: MOVE A,11CORE(W)
|
||
PUSHJ P,DWORD
|
||
AOBJN W,ADUMP5
|
||
MOVN A,Q ;PUNCH CHECKSUM
|
||
PUSHJ P,@PUTB
|
||
PUSHJ P,FEED
|
||
MOVE W,E ;SET UP AOBJN PTR TO CORE YET TO BE DUMPED
|
||
SUBI E,11CORL
|
||
HRL W,E
|
||
JRST ADUMP1
|
||
|
||
DUMPJB: MOVEI Q,0
|
||
MOVEI A,1 ;JUMP BLOCK
|
||
PUSHJ P,@PUTB
|
||
MOVEI A,0
|
||
PUSHJ P,@PUTB
|
||
MOVEI A,6
|
||
PUSHJ P,@PUTB
|
||
MOVEI A,0
|
||
PUSHJ P,@PUTB
|
||
MOVE A,RUGSA
|
||
PUSHJ P,DWORD
|
||
MOVN A,Q
|
||
PUSHJ P,@PUTB
|
||
PUSHJ P,FEED
|
||
.CLOSE OUCH,
|
||
.LOGOUT 1,
|
||
|
||
FEED: MOVEI A,0 ;PUNCH 8 NULL FRAMES
|
||
PUSHJ P,.+1
|
||
PUSHJ P,.+1
|
||
PUSHJ P,.+1
|
||
JRST @PUTB
|
||
|
||
DWORD: LDB B,[101000,,A]
|
||
PUSHJ P,@PUTB
|
||
MOVE A,B
|
||
JRST @PUTB
|
||
|
||
;DUMP OUT AS A DL10 BOOTSTRAP PROGRAM
|
||
;THIS IS A STANDALONE PDP10 PROGRAM WHICH LOADS THE -11 ON DL10 PORT#0
|
||
|
||
TDUMP: .CALL OPENO
|
||
JRST FSERR
|
||
MOVSI A,-11CORL ;CHANGE -1,,0 TO 0
|
||
HRRZS 11CORE(A) ;SINCE WILL LOAD ALL -11 CORE
|
||
AOBJN A,.-1
|
||
HRROI A,[JRST 1] ;WRITE SBLK FILE
|
||
.IOT OUCH,A
|
||
MOVEI H,BOOTST
|
||
DMPLP: CAIL H,BOOTEN ;FIND NON-ZERO
|
||
JRST DMPEN
|
||
SKIPN (H)
|
||
AOJA H,DMPLP
|
||
MOVE J,H ;FIND 2 CONSECUTIVE ZEROS
|
||
HRLI J,-200 ;WITHIN NEXT 200 WORDS
|
||
ZERLP: SKIPE (J)
|
||
AOBJN J,ZERLP
|
||
JUMPGE J,DMPBLK
|
||
AOBJP J,DMPBLK
|
||
SKIPE (J)
|
||
JRST ZERLP
|
||
|
||
DMPBLK: SUBM H,J ;RH(J) := - # BLOCKS
|
||
HRL H,J
|
||
PUSH P,[DMPLP]
|
||
HRROI A,H
|
||
.IOT OUCH,A ;HEADER
|
||
MOVE Q,H
|
||
MOVE J,H
|
||
.IOT OUCH,H ;DATA
|
||
CKSLP: ROT Q,1
|
||
ADD Q,(J)
|
||
AOBJN J,CKSLP
|
||
HRROI A,Q
|
||
.IOT OUCH,A ;CHECKSUM
|
||
POPJ P,
|
||
|
||
DMPEN: HRROI A,[JUMPA BOOTER] ;START ADDR
|
||
.IOT OUCH,A
|
||
MOVSI H,-LSYMT
|
||
HRROI A,H
|
||
.IOT OUCH,A ;HEADER
|
||
MOVE Q,H
|
||
HRRI H,SYMT
|
||
MOVE J,H
|
||
.IOT OUCH,H ;DATA
|
||
PUSHJ P,CKSLP
|
||
HRROI A,[JUMPA BOOTER] ;START ADDR AGAIN
|
||
.IOT OUCH,A
|
||
.CLOSE OUCH,
|
||
.LOGOUT 1,
|
||
CONSTANTS
|
||
|
||
SYMT: SQUOZE 0,GLOBAL
|
||
-LSYMT,,0
|
||
SQUOZE 4,RUG
|
||
GORUG
|
||
SQUOZE 4,GO
|
||
BOOTER
|
||
SQUOZE 4,11CORE
|
||
11CORE
|
||
SQUOZE 4,SADR
|
||
SADR
|
||
LSYMT==.-SYMT
|
||
|
||
;HERE IS THE VERSION WHICH STUFFS THE PDP11 UNDER TIMESHARING
|
||
DLB==60 ? ..D060==0
|
||
DLC==64 ? ..D064==0
|
||
DL10PG==300
|
||
|
||
STUFF: MOVEI TT,[ASCIZ\ core image into PDP11?\]
|
||
PUSHJ P,ASCOUT
|
||
.IOT TYIC,A
|
||
PUSHJ P,CRLF
|
||
CAIE A,"Y
|
||
CAIN A,"y
|
||
CAIA
|
||
POPJ P,
|
||
MOVSI A,(SETZ)
|
||
.IOTLSR A,
|
||
;Make ITS not touch the DL10
|
||
MOVE A,[SQUOZE 0,DL10F]
|
||
.EVAL A,
|
||
.LOSE
|
||
HRLI A,[0]
|
||
.SETLOC A,
|
||
MOVSS A
|
||
HRRI A,B
|
||
.GETLOC A,
|
||
JUMPN B,.-1
|
||
;Stop the pdp11
|
||
DATAO DLC,[40] ;STOP PDP11
|
||
DATAI DLC,A
|
||
TRNE A,20 ;AWAIT PDP11 STOPPED
|
||
JRST .-2
|
||
;Obtain access to the DL10
|
||
.CALL [ SETZ ? 'DL10MP ? MOVEI DL10PG ? SETZM A ] ;A GETS AOBJN PTR TO CONTROL AREA
|
||
.LOSE %LSSYS
|
||
HRRZM A,DL10LC'
|
||
HLRO B,A
|
||
MOVNS B
|
||
MOVEM B,DL10SZ'
|
||
MOVE C,(A) ;COPY FIRST WORD
|
||
MOVEM C,@DL10LC
|
||
MOVEM C,DLINIT
|
||
MOVE C,[SQUOZE 0,NDLTYS] ;INITIALIZE VERSION, DON'T TRUST COPY IN SYSTEM
|
||
.EVAL C,
|
||
.LOSE
|
||
MOVE D,[SQUOZE 0,NFDLTY]
|
||
.EVAL D,
|
||
.LOSE
|
||
LSH C,8
|
||
ADD C,D
|
||
MOVEM C,DL10VR
|
||
MOVSI A,DL10AR ;SET UP BOOT PROGRAM THERE
|
||
HRR A,DL10LC
|
||
MOVE B,DL10LC
|
||
BLT A,BOOTSZ-1(B)
|
||
;Here's what stuffs the 11
|
||
; CONO DLC,400000 ;RESET DL10
|
||
; MOVEI A,1
|
||
; .SLEEP A,
|
||
; CONO DLB,500
|
||
CONO DLC,100020 ;PORT ENABLE, DISABLE PDP10 INTERRUPT
|
||
MOVSI A,2
|
||
SOJG A,. ;DON'T ASK ME
|
||
DATAO DLC,[20] ;START PDP11 AT DL10 BOOT AREA
|
||
DATAI DLC,A
|
||
TRNN A,20
|
||
JRST .-2
|
||
;PDP11 IS NOW EXECUTING THE BOOT PROGRAM
|
||
MOVE J,DL10LC
|
||
SUBI J,DL10AR ;RELOCATION FOR REFERENCES TO FLAG, DAT, SADR
|
||
IFLE 11CORL-40000,MOVSI Q,-11CORL ;LOAD ONLY 16K
|
||
.ELSE MOVSI Q,-40000
|
||
STUFLP: HRRZ A,11CORE(Q) ;TELL 11 BOOTSTRAP PROGRAM TO STORE ONE WORD
|
||
SKIPE FLAG(J)
|
||
JRST .-1
|
||
MOVEM A,DAT(J)
|
||
AOS FLAG(J)
|
||
AOBJN Q,STUFLP
|
||
SKIPE FLAG(J)
|
||
JRST .-1
|
||
SKIPA ;DON'T WANT TO LOSE PROCESSOR IN NEXT CODE
|
||
SKIPA ;OR PDP11 WILL END UP IN DDT
|
||
.HANG
|
||
MOVEI A,000407 ;BR FROM 100004 TO 100024
|
||
MOVEM A,DL10AR+2(J)
|
||
MOVEI A,25. ;ALLOW TIME FOR -11 TO GET STARTED
|
||
SOJG A,.
|
||
;NOW, WHILE THE 11 IS DOING A RESET, RESTORE THE DL10 CONTROL AREA
|
||
MOVSI A,DLINIT
|
||
HRR A,DL10LC
|
||
MOVEI B,DLXEND-DLINIT
|
||
ADDI B,-1(A)
|
||
BLT A,(B)
|
||
;NOW TURN ON DL10 TO ITS
|
||
MOVE A,[SQUOZE 0,DL10F]
|
||
.EVAL A,
|
||
.LOSE
|
||
HRLI A,[-1]
|
||
.SETLOC A,
|
||
CONO DLC,3 ;ENABLE PDP10 INTERRUPT
|
||
.LOGOUT 1,
|
||
|
||
;This kludge is worthy of Charles Garman.
|
||
;But it was perpetrated by DAM.
|
||
;This is a copy of what to initialize the DL10 area to when we are
|
||
;done with it. The program used to save and restore it, but this
|
||
;proved to be a loss, e.g. the chaos net double-buffers got out of
|
||
;phase between the two machines. The constants below must agree with those
|
||
;in ITS and in IOELEV.
|
||
DLINIT: JSR .-.
|
||
DL10VR: 0 ;VERSION, GOTTEN OUT OF SYSTEM
|
||
;NDLTYS_8+NFDLTY ;"I/O VERSION NUMBER"
|
||
DL10UP: 0 ;INCREMENTED BY -11 EVERY 1/60 SECOND.
|
||
;SETOM'ED BY 10 EVERY 1/2 SECOND. DETECTS UP/DOWNNESS.
|
||
|
||
DL10SO: 0 ;LINE # TO SET OUTPUT DONE FOR, SET BY -10, CLEARED BY -11.
|
||
|
||
DL10IL: 0 ;LINE # WITH INPUT AVAILABLE. CLEARED BY -10 AFTER CHAR READ.
|
||
DL10IC: 0 ;CHARACTER RECEIVED FROM THAT LINE.
|
||
|
||
DL10OD: 0 ;LINE # WITH OUTPUT DONE. CLEARED BY -10 WHEN PROCESSED.
|
||
DL10BS: 0 ;BUFFER SIZE FOR THAT LINE.
|
||
|
||
DL10BP: 0 ;WIERD DL10 BYTE POINTER TO TTY OUTPUT BUFFER.
|
||
DL10CC: 0 ;NUMBER OF CHARACTERS BEING OUTPUT TO TTY.
|
||
DL10LN: 0 ;LINE # OUTPUT BEING SENT TO. CLEARED BY -11 WHEN GOBBLED.
|
||
|
||
DL10CL: 0 ;DIALUP LINE CONNECT OR DISCONNECT INFO. SET BY 11, 0'D BY 10.
|
||
;0000NN => LINE # NN DISCONNECTED.
|
||
;01RTNN => LINE # NN CONNECTED, %TTISP=R, %TTOSP=T.
|
||
|
||
DL10PL: 0 ;LINE # TO SET PARAMETERS OF. CLEARED BY -11 WHEN PROCESSED.
|
||
DL10PR: 0 ;VALUE OF DH11 LPR REGISTER.
|
||
DL10PS: 0 ;NUMBER OF BYTES OF OUTPUT BUFFERING DESIRED.
|
||
|
||
DL10XD: 0 ;1=EXAMINE -11 CORE, 2=DEPOSIT. CLEARED BY -11 WHEN DONE.
|
||
DL10XA: 0 ;EXAMINE/DEPOSIT ADDRESS
|
||
DL10XW: 0 ;EXAMINE/DEPOSIT WORD
|
||
|
||
GLPTBP: 0 ;BYTE POINTER TO BUFFER FOR GOULD LPT
|
||
GLPTBC: 0 ;BYTE COUNT " " - IF NONZERO BUFFER IS ACTIVE BY PDP11.
|
||
GLPTER: 0 ;NONZERO => PDP11 CLAIMS PRINTER IS BROKEN.
|
||
GLPGRF: 0 ;NONZERO => GRAPHICS MODE (SET BY 10).
|
||
|
||
;CHAOS NET SHARED VARIABLES
|
||
DLCINI: 1 ;THE COMMENTS ARE IN THE CHAOS FILE
|
||
DLCSP1: 0
|
||
DLCSP2: 0
|
||
DLCSS1: 0
|
||
DLCSS2: 0
|
||
DLCRP1: 0
|
||
DLCRP2: 0
|
||
DLCRS1: 2 ;IF NET WAS QUIESCENT, THIS WILL BE RIGHT AND
|
||
DLCRS2: 2 ;WILL PREVENT BUFFERS FROM GETTING LOST
|
||
|
||
;^ ADD MORE HERE
|
||
|
||
DLXEND:: ;END OF ASSIGNED DL10 AREA
|
||
|
||
VARIABLES
|
||
CONSTANTS
|
||
|
||
;THE PROGRAM THAT GOES ON THE MAGDMP TAPE
|
||
|
||
IFG .-4000,.ERR BLOAT
|
||
LOC 4000
|
||
BOOTST::
|
||
GORUG: MOVE A,RUGSA ;ENTER HERE TO START 11 IN RUG
|
||
MOVEM A,SADR ;ENTER BELOW TO START 11 IN IOELEV
|
||
BOOTER: CONI PAG,A ;FLUSH CACHE
|
||
TRZN A,600000
|
||
JRST BOOTAA
|
||
SWPUA
|
||
CONSZ APR,200000
|
||
JRST .-1
|
||
CONO PAG,(A)
|
||
BOOTAA: CONO DLC,400000 ;RESET DL10
|
||
MOVEI A,5000
|
||
SOJG A,.
|
||
CONO DLB,DL10AR
|
||
DATAO DLC,[40] ;STOP PDP11
|
||
DATAI DLC,A
|
||
TRNE A,20
|
||
JRST .-2
|
||
MOVSI A,2
|
||
SOJG A,.
|
||
CONO DLC,100020 ;PORT ENB
|
||
DATAO DLC,[20] ;START PDP11
|
||
DATAI DLC,A
|
||
TRNN A,20
|
||
JRST .-2
|
||
;PDP11 IS NOW RUNNING OUT OF DL10 AREA
|
||
|
||
IFLE 11CORL-40000,MOVSI Q,-11CORL ;LOAD ONLY 16K
|
||
.ELSE MOVSI Q,-40000
|
||
BOOTLP: MOVE A,11CORE(Q) ;TELL 11 BOOTSTRAP PROGRAM TO STORE ONE WORD
|
||
SKIPE FLAG
|
||
JRST .-1
|
||
MOVEM A,DAT
|
||
AOS FLAG
|
||
AOBJN Q,BOOTLP
|
||
SKIPE FLAG
|
||
JRST .-1
|
||
MOVEI A,000407 ;BR FROM 100004 TO 100024
|
||
MOVEM A,DL10AR+2
|
||
MOVEI A,25. ;ALLOW TIME FOR -11 TO GET STARTED
|
||
SOJG A,.
|
||
CONO DLC,400000 ;THEN, QUICK, TURN OFF PORT ENB WHILE IT'S IN INIT CODE
|
||
SKIPE -4000
|
||
JRST -4000 ;IF DDT IS PRESENT RETURN TO IT
|
||
JRST -400 ;ELSE RETURN TO MAGDMP
|
||
|
||
CONSTANTS
|
||
VARIABLES
|
||
|
||
LOC 5000
|
||
DL10AR: JRST 4,.
|
||
005001 ;100002/ CLR %1
|
||
005727 ;100004/ TST #
|
||
FLAG: 0 ;100006/ 0 => 11 READY FOR WORD, NON-0 => WORD GIVEN
|
||
001775 ;100010/ BEQ 100004
|
||
012721 ;100012/ MOV #,(1)+
|
||
DAT: 0 ;100014/ VALUE TO BE STORED
|
||
005037 ;100016/ CLR @#FLAG
|
||
100006 ;100020/
|
||
000770 ;100022/ BR 100004
|
||
000137 ;100024/ JMP @#
|
||
SADR: 1 ;100026/ THE START ADDRESS
|
||
BOOTSZ==.-DL10AR
|
||
];ITS
|
||
|
||
10X,[
|
||
;;; This is the command that stuffs a core image into the
|
||
;;; pdp-11, by simply transmitting the whole damn thing
|
||
;;; down the DR-11.
|
||
|
||
;Magic instructions
|
||
DR11R=744000,, ;Reset TYMNET service microcode, and send 6
|
||
; 6 low bits of effective address to control reg:
|
||
; 30-31 CSR0, CSR1 to 11 (input ready, output done)
|
||
; 32-33 not connected
|
||
; 34-35 interrupt enables (input, output)
|
||
|
||
DR11O=745000,, ;Effective address to pdp-11
|
||
|
||
DR11I=746000,, ;C(E) gets input from pdp-11 in low 16 bits
|
||
; and high bits are:
|
||
; 0,1 tape flags
|
||
; 2 input ready
|
||
; 3 output done
|
||
; 4,5 edge versions of above (cause interrupt)
|
||
; 6,7 60 Hz clock flag and clock interrupt
|
||
|
||
STUFF: MOVEI TT,[ASCIZ\ core image into PDP11?\]
|
||
PUSHJ P,ASCOUT
|
||
PBIN
|
||
PUSHJ P,CRLF
|
||
CAIE A,"Y
|
||
CAIN A,"y
|
||
CAIA
|
||
POPJ P,
|
||
USRIO
|
||
JRST [ MOVEI TT,[ASCIZ\Cannot get into user I/O mode
|
||
\]
|
||
PUSHJ P,ASCOUT
|
||
JRST CMD ]
|
||
DR11R 0 ;Reset DR11, turn off Tymnet microcode
|
||
MOVSI Q,-11CORL
|
||
STUFF1: HRRZ A,11CORE(Q)
|
||
PUSHJ P,DRSEND
|
||
AOBJN Q,STUFF1
|
||
JRST 2,@[CPOPJ] ;Turn off loser iot mode
|
||
|
||
;Send word in A to DR-11
|
||
DRSEND: DR11I B ;Bit 5 non-zero means ready to accept output
|
||
TLNN B,010000
|
||
JRST DRSEND
|
||
DR11O (A)
|
||
POPJ P,
|
||
];10X
|
||
|
||
10X, SADR: 1
|
||
|
||
CONSTANTS
|
||
VARIABLES
|
||
|
||
RUGSA: 0 ;START ADDR OF RUG/DDT (ALSO ASSUMED TO BE LOWEST LOC)
|
||
|
||
LOC 6000
|
||
11CORE: BLOCK 11CORL
|
||
|
||
BOOTEN: -1 ;MIDAS CORING BUG
|
||
|
||
END GO
|
||
|