mirror of
https://github.com/PDP-10/its.git
synced 2026-02-15 20:36:13 +00:00
STUFF - load PDP-11 through 10-11.
This commit is contained in:
695
src/sysen2/stuff.92
Executable file
695
src/sysen2/stuff.92
Executable file
@@ -0,0 +1,695 @@
|
||||
|
||||
IF1, TITLE STUFF A PDP-11
|
||||
IF2,[PRINTX /UP YOUR /]
|
||||
DEFINE PACK A,B,C,D,E
|
||||
A_29.+B_22.+C_15.+D_8.+E_1
|
||||
TERMIN
|
||||
|
||||
FLAGS=0
|
||||
PNTR=1
|
||||
A=2
|
||||
B=3
|
||||
C=4
|
||||
D=5
|
||||
E=6
|
||||
F=7
|
||||
S=10
|
||||
SPNTR=10
|
||||
BCOUNT=11
|
||||
CKSM=12
|
||||
CMPTR=13
|
||||
11WORD=14
|
||||
ST11AD=15
|
||||
CHK=16
|
||||
P=17
|
||||
|
||||
TF1==1
|
||||
;PDP11 INSTRUCTIONS
|
||||
BR.==777 ;BR .
|
||||
BR.M2==776 ;BR .-2
|
||||
WAIT==1
|
||||
RESET==5
|
||||
JMP==137 ;JMP @#...
|
||||
CLR==5037 ;CLR @(PC)+
|
||||
CLRPC==5007 ;CLR PC
|
||||
|
||||
LKS==177546
|
||||
LKBRKV==100
|
||||
TPS==177564
|
||||
TPB==177566
|
||||
TPBRKV==64
|
||||
;5/29/73 PROGRAMMING THE PDP-10 TO PDP-11 INTERFACE
|
||||
|
||||
;THE INTERFACE LETS THE PDP-10 PROGRAMMER DIRECTLY ACCESS THE MEMORIES
|
||||
;OF UP TO EIGHT PDP-11'S. PDP-10 PAGES ARE MAPPED INTO SEGMENTS OF
|
||||
;VARIABLE SIZE IN THE PDP-11'S MEMORY. THE PDP-10 PAGE MAP IS ALSO
|
||||
;DIRECTLY ADDRESSABLE IN MEMORY (IT CURRENTLY LIVES IN LOCATIONS
|
||||
;776000-776777)**. THERE IS ONE ENTRY IN THE MAP FOR EACH PDP-10 PAGE.
|
||||
;** SEE ALSO BELOW
|
||||
|
||||
;PAGE TABLE ENTRY:
|
||||
; 4.9 VALID
|
||||
; 4.8 WRITE ENABLE
|
||||
; 4.3-4.7 (5 BITS) NOT USED (0)
|
||||
; 3.9-4.2 (3 BITS) PDP-11 NUMBER
|
||||
; 2.2-3.8 (16 BITS) RELOCATION
|
||||
; ORIGIN OF SEGMENT OF IN PDP-11 ADDRESS SPACE
|
||||
; PDP-11 ADDRESS=4*RELOCATION
|
||||
; 1.1-2.1 (10 BITS) PROTECTION (PDP-11 PROTECTION=4*PROTECTION
|
||||
; IF PROTECTION=0 THEN ONLY ONE 16 BIT WORD IS ACCESSIBLE)
|
||||
|
||||
;WRITE REFERENCE FORMAT
|
||||
; 3.3-4.9 (16 BITS) WORD 0, LOW ORDER WORD
|
||||
; 1.5-3.2 (16 BITS) WORD 1, HIGH ORDER WORD
|
||||
; 1.4 DON'T WRITE WORD 0
|
||||
; 1.3 DON'T WRITE WORD 1
|
||||
; 1.1-1.2 (2 BITS) NOT USED
|
||||
|
||||
;READ REFERENCE FORMAT
|
||||
; 3.3-4.9 (16 BITS) WORD 0, LOW ORDER WORD
|
||||
; 1.5-3.2 (16 BITS) WORD 1, HIGH ORDER WORD
|
||||
; 1.1-1.4 (4 BITS) 0
|
||||
|
||||
;NOTE -- SPLIT CYCLES WILL DO THE RIGHT THING; HENCE, ILDB AND IDPB WORK.
|
||||
|
||||
;CAUTION -- WHEN USING BYTE INSTRUCTIONS, A 16 BIT BYTE SIZE IS
|
||||
;RECCOMMENDED. SUCCESSIVE INCREMENTS OF BYTE POINTERS WITH AN 8 BIT BYTE
|
||||
;SIZE DO NOT ADDRESS CONSECUTIVE BYTES IN THE PDP-11!
|
||||
|
||||
;ITS SYSTEM CALL TO PUT 11 MAP ENTRY IN YOUR 10 MAP
|
||||
|
||||
; .CALL [SETZ
|
||||
; SIXBIT /T11MP/
|
||||
; 10PGNO ;PTR TO 10 PG NO
|
||||
; SETZ PGENT] ;PTR TO ENTRY (FORMAT ABOVE)
|
||||
;10PGNO: 3
|
||||
;PGENT: 3_34.+2000_10.+1777
|
||||
; FOR ABOVE 10 ADDRESSES 6000-7777 ARE MAPPED INTO
|
||||
; 11 ADDRESSES 10000-17776. BOTH READ AND WRITE ARE ENABLED.
|
||||
|
||||
RCH: MOVE PNTR,[10700,,BUFF-1] ;INITL BYTE PNTR TO BUFF
|
||||
MOVEM PNTR,CMPTR
|
||||
GCHR: PUSHJ P,TYI ;GET CHAR
|
||||
CAIN A,177 ;RUBOUT?
|
||||
JRST RUBOT
|
||||
IDPB A,PNTR
|
||||
CAIE A,15 ;CR?
|
||||
JRST GCHR
|
||||
MOVEI A,0 ;IT WAS CR
|
||||
IDPB A,PNTR ;MARK END OF STRNG
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
RUBOT: CAMN PNTR,[10700,,BUFF-1] ;RUBOUT AT BEG OF BUFFER?
|
||||
JRST BRUB
|
||||
LDB A,PNTR ;GET LAST CHAR TYPED
|
||||
PUSHJ P,TYO ;ECHO IT
|
||||
ADD PNTR,[70000,,] ;DECREMENT POINTER
|
||||
JUMPGE PNTR,GCHR ;JUMP IF VALID
|
||||
SUB PNTR,[430000,,1] ;WAS 440700,,SOMETHING, BACK IT UP
|
||||
JRST GCHR
|
||||
|
||||
BRUB: PUSHJ P,CRR ;TYPE CR LF
|
||||
JRST GCHR
|
||||
TYI: .IOT TTI,A
|
||||
CAIL A,"a
|
||||
CAILE A,"z
|
||||
CAIA
|
||||
SUBI A,40
|
||||
JUMPE A,TYI
|
||||
CAIE A,15
|
||||
POPJ P,
|
||||
PUSHJ P,CRR ;ECHO CR
|
||||
MOVEI A,15
|
||||
POPJ P,
|
||||
TYO: .IOT TTO,A
|
||||
POPJ P,
|
||||
|
||||
SCRS: SKIPE B ;IF B NOT = 0, TYPE MESG IT POINTS TO
|
||||
JRST TYPE
|
||||
CRS: MOVEI A,"*
|
||||
PUSHJ P,TYO
|
||||
CRR: MOVEI A,15
|
||||
PUSHJ P,TYO
|
||||
MOVEI A,12
|
||||
JRST TYO
|
||||
TYPE: HRLI B,350700 ;TYPE ASCIZ STRING WHOSE ADDR IS IN B
|
||||
LDB A,B
|
||||
PUSHJ P,TYO
|
||||
ILDB A,B
|
||||
JUMPN A,.-2
|
||||
POPJ P,
|
||||
|
||||
BUFF: BLOCK 10.
|
||||
TYPENL: TROA FLAGS,TF1 ;SAME AS TYPEN EXCEPT W/ LEADING ZEROS
|
||||
|
||||
TYPEN: ;TYPE NUMBER IN B IN OCTAL W/O LEADING ZEROS
|
||||
TRZ FLAGS,TF1 ;CLEAR TYPE ZERO FLAG
|
||||
PUSH P,A
|
||||
PUSH P,B
|
||||
SETZM A
|
||||
LSHC A,3 ;SHIFT 1ST CHAR FROM B TO A
|
||||
ADDI B,7 ;PUT END MARKER IN B
|
||||
TYPEN2: TRNN FLAGS,TF1 ;SEEN ANY NON-ZERO DIGITS YET?
|
||||
JUMPE A,TYPEN1 ;NO, IS THIS ONE?
|
||||
TYPEN3: ADDI A,60
|
||||
TRO FLAGS,TF1
|
||||
PUSHJ P,TYO
|
||||
SETZM A
|
||||
TYPEN1: LSHC A,3
|
||||
JUMPN B,TYPEN2
|
||||
SETZM A
|
||||
TRNN FLAGS,TF1 ;TYPE AT LEAST 1 ZERO
|
||||
JRST TYPEN3
|
||||
POP P,B
|
||||
POP P,A
|
||||
POPJ P,
|
||||
|
||||
CRLF: PUSH P,A
|
||||
MOVEI A,15
|
||||
PUSHJ P,TYO
|
||||
MOVEI A,12
|
||||
PUSHJ P,TYO
|
||||
POP P,A
|
||||
POPJ P,
|
||||
|
||||
MAX11S=10
|
||||
|
||||
DESC: ;DESCRIBES PDP11'S CONNECTED TO 10/11 INTERFACE
|
||||
;1ST DIGIT IS # 2K WORD PAGES OF 11 CORE
|
||||
[ 6
|
||||
ASCIZ \ TV 11/10 \
|
||||
-1] ;HAS TTY AND LINE CLOCK.
|
||||
[ 14
|
||||
ASCIZ \ XGP 11/20 \
|
||||
-1]
|
||||
[ 4
|
||||
ASCIZ \ LISP MACHINE \
|
||||
1] ;CLOCK BUT NO TTY
|
||||
[ 0
|
||||
ASCIZ \ CHESS MACHINE \
|
||||
0]
|
||||
[ 16
|
||||
ASCIZ \ LOGO 11/45 \
|
||||
-1]
|
||||
[ 16
|
||||
ASCIZ \ MICRO AUTOMATION 11/45 \
|
||||
-1]
|
||||
[ 14
|
||||
ASCIZ \ VISION 11/40 \
|
||||
-1 ]
|
||||
[ 4
|
||||
ASCIZ \ CHAOS-11 \
|
||||
-1 ]
|
||||
|
||||
11NTAB: ASCII /TVî/
|
||||
ASCII /XGPî/
|
||||
ASCII /LISPî/
|
||||
ASCII /CHESS/
|
||||
ASCII /LOGOî/
|
||||
; ASCII /ROBOT/
|
||||
-1
|
||||
; ASCII /VISIO/
|
||||
-1
|
||||
ASCII /CHAOS/
|
||||
11NTLN==.-11NTAB
|
||||
|
||||
11FTAB: [SIXBIT/./ ? SIXBIT/TV/ ? SIXBIT/BIN/]
|
||||
[SIXBIT/SYSBIN/ ? SIXBIT/VXGP/ ? SIXBIT/BIN/]
|
||||
[SIXBIT/CONS/ ? SIXBIT/CCONS/ ? SIXBIT/BIN/]
|
||||
0
|
||||
[SIXBIT/RUG/ ? SIXBIT/AR/ ? SIXBIT /BIN/]
|
||||
0
|
||||
0
|
||||
[SIXBIT/./ ? SIXBIT/IOELEV/ ? SIXBIT/BIN/]
|
||||
IFN .-11FTAB-11NTLN,.ERR
|
||||
|
||||
TTO==1
|
||||
TTI==2
|
||||
DSK==3
|
||||
ERRC==4
|
||||
|
||||
|
||||
START: MOVE P,[-100,,PLD]
|
||||
.OPEN TTO,STTO
|
||||
.LOSE 1000
|
||||
.OPEN TTI,STTI
|
||||
.LOSE 1000
|
||||
.SUSET [.ROPTIO,,A]
|
||||
TLNN A,OPTCMD
|
||||
JRST BCMD
|
||||
SETZM A
|
||||
SETOM B
|
||||
.BREAK 12,[5,,A] ;IF HAVE JCL, READ 1ST WORD OF IT INTO A.
|
||||
JUMPE A,BCMD ;WAS THERE ANY JCL?
|
||||
TRZ A,1 ;GODDAMN DDT LIKES TO SET LOW BIT
|
||||
MOVE B,[440700,,A]
|
||||
MOVEI D,5
|
||||
UPCASE: ILDB C,B ;IF WE HAVE JCL, CONVERT IT TO UPPER CASE
|
||||
CAIL C,140
|
||||
SUBI C,40
|
||||
DPB C,B
|
||||
SOJG D,UPCASE
|
||||
MOVSI B,-11NTLN ;IF WE HAVE JCL, COMPARE AGAINST ASCII/TV^M/, ETC.
|
||||
CAME A,11NTAB(B)
|
||||
AOBJN B,.-1
|
||||
JUMPGE B,BADJCL ;NOT NAME OF AN 11 => LOSE.
|
||||
SETOM JCLP
|
||||
MOVE A,11FTAB(B) ;ELSE B HAS NUMBER OF 11. GET THE FILENAMES
|
||||
JUMPE A,BAD11
|
||||
MOVE F,(A) ;1ST WORD IS SNAME
|
||||
MOVEM F,SNR
|
||||
.SUSET [.SSNAM,,F]
|
||||
HRLI A,1(A) ;THEN COME FN1 AND FN2
|
||||
HRRI A,ADR+1 ;TO USE FOR THAT 11.
|
||||
BLT A,ADR+2
|
||||
.OPEN DSK,ADR
|
||||
.LOSE 1000
|
||||
MOVE A,DESC(B)
|
||||
MOVE A,(A)
|
||||
MOVEM A,NOPG
|
||||
HRRZ F,B
|
||||
JRST 11INIT
|
||||
|
||||
BADJCL: MOVEI B,[ASCIZ /JCL is not the name of a PDP11.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
JRST OK
|
||||
|
||||
BAD11: MOVEI B,[ASCIZ /No default file for specified PDP11.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
JRST OK
|
||||
|
||||
STTO: 1,,(SIXBIT /TTY/)
|
||||
STTI: (SIXBIT /TTY/)
|
||||
|
||||
PLD: BLOCK 100
|
||||
|
||||
JCLP: 0 ;-1 => WE GOT JCL
|
||||
DEBUG: 0 ;-1 => DEBUGGING.
|
||||
BCMD: MOVEI B,[ASCIZ /Load from: /]
|
||||
PUSHJ P,SCRS
|
||||
PUSHJ P,RCH ;GET TYPED IN COMMANND
|
||||
MOVE PNTR,IP
|
||||
SETZB F,S
|
||||
COMND: ILDB A,CMPTR
|
||||
CAIN A,^Q
|
||||
JRST CMDQ
|
||||
CAIN A,15
|
||||
JRST CMDE
|
||||
CAIN A,^G
|
||||
JRST BCMD
|
||||
CAIN A,":
|
||||
JRST CMDCOL
|
||||
CAIN A,";
|
||||
JRST CMDSC
|
||||
CAIG A,40
|
||||
JRST CMDS
|
||||
SXBT: SUBI A,40
|
||||
TLNE PNTR,770000 ;STOP AFTER POSITIN=0
|
||||
IDPB A,PNTR
|
||||
JRST COMND
|
||||
CMDS: MOVE F,S
|
||||
CMD1: MOVE PNTR,IP
|
||||
MOVEI S,0
|
||||
JRST COMND
|
||||
CMDSC: MOVEM S,SNR
|
||||
JRST CMD1
|
||||
CMDCOL: JRST CMD1 ;FOR NOW IGNORE IT
|
||||
CMDE: .SUSET [.SSNAM,,SNR]
|
||||
JUMPE F,FZ
|
||||
JUMPN S,SNZ
|
||||
FZ: LSHC F,36. ;MOVE S TO F AND ZERO S
|
||||
SZ: JUMPE F,BCMD ;TAKE IN NEW NAME
|
||||
MOVE S,BIN
|
||||
SNZ: MOVEM F,ADR+1
|
||||
MOVEM S,ADR+2
|
||||
.OPEN DSK,ADR
|
||||
.LOSE 1000
|
||||
JRST RDCN
|
||||
SNR: 0
|
||||
ADR: 2,,(SIXBIT /DSK/)
|
||||
0
|
||||
0
|
||||
BIN: SIXBIT /BIN /
|
||||
CMDQ: ILDB A,CMPTR
|
||||
JRST SXBT
|
||||
|
||||
IP: 440600,,S
|
||||
;NOW GET COMPUTER NUMBER OF 11 TO BE STUFFED
|
||||
|
||||
RDCN: MOVEI B,[ASCIZ /To PDP11 # :/]
|
||||
PUSHJ P,SCRS
|
||||
PUSHJ P,RCH
|
||||
SETZB F,S
|
||||
RDNXT: ILDB A,CMPTR
|
||||
CAIN A,^G ;START OVER
|
||||
JRST RDCN
|
||||
CAIN A,15 ;END OF LINE
|
||||
JRST DONEN
|
||||
CAIN A,".
|
||||
JRST PRD ;INPUT IS DECIMAL
|
||||
CAIN A,40 ;DONE IF B > 0
|
||||
JRST SPACE
|
||||
SUBI A,60 ;SHOULD BE DIGIT
|
||||
SKIPL A
|
||||
CAIL A,10.
|
||||
JRST NOTD ;NOT A DIGIT
|
||||
MULI S,10. ;DECIMAL
|
||||
ADD S,A
|
||||
ASH F,3 ;OCTAL
|
||||
ADD F,A
|
||||
AOJA B,RDNXT
|
||||
PRD: MOVE S,F ;USE DECIMAL VERSION
|
||||
JRST DONEN
|
||||
NOTD: ;NOT A DIGIT - TREAT AS SPACE
|
||||
SPACE: JUMPE B,RDNXT ;IGNORE LEADING SPACES AND OTHER NON-DIGITS
|
||||
DONEN: JUMPL F,RDCN
|
||||
CAILE F,MAX11S
|
||||
JRST RDCN
|
||||
SKIPN DESC(F)
|
||||
JRST [ MOVEI B,[ASCIZ /Bad PDP11 number.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
JRST OK]
|
||||
MOVE B,F
|
||||
PUSHJ P,TYPEN
|
||||
MOVEI B,[ASCIZ / selected. /]
|
||||
PUSHJ P,TYPE
|
||||
MOVE B,DESC(F)
|
||||
MOVE A,(B) ;GET # OF PAGES IN THIS GUY
|
||||
MOVEM A,NOPG
|
||||
AOS B
|
||||
PUSHJ P,TYPE
|
||||
MOVEI B,[ASCIZ / OK?/]
|
||||
PUSHJ P,TYPE
|
||||
PUSHJ P,TYI
|
||||
PUSHJ P,CRLF
|
||||
CAIE A,"Y
|
||||
JRST RDCN
|
||||
JRST 11INIT
|
||||
11INIT: MOVEM F,11NUM
|
||||
MOVE E,F
|
||||
LSH E,26.
|
||||
MOVE A,NOPG ;GET NO. OF 2K 11 PGS
|
||||
SOS A
|
||||
MOVEI B,11LO_-10. ;WHERE 11 MEM STARTS IN 10
|
||||
ADD B,A ;POINT TO LAST PAGE
|
||||
11IN1: MOVE C,11MAP(A)
|
||||
ADD C,E ;ADD IN 11#
|
||||
.CALL [SETZ
|
||||
SIXBIT /T11MP/
|
||||
B
|
||||
SETZ C]
|
||||
.VALUE
|
||||
SOS B
|
||||
SOJGE A,11IN1
|
||||
MOVE C,11MAP+62. ;FIRST I/O PAGE
|
||||
ADD C,E
|
||||
.CALL [SETZ
|
||||
SIXBIT /T11MP/
|
||||
[11LO_-10.+14.]
|
||||
SETZ C]
|
||||
.VALUE
|
||||
MOVE C,11MAP+63.
|
||||
ADD C,E
|
||||
.CALL [SETZ
|
||||
SIXBIT /T11MP/
|
||||
[11LO_-10.+15.]
|
||||
SETZ C]
|
||||
.VALUE
|
||||
;ABOVE MAPS I/O REGS INTO MAP
|
||||
11IN2: MOVE A,[JMP_20.+10] ;MAKE 0 BE A 1-INSN LOOP.
|
||||
MOVEM A,11LO
|
||||
MOVE A,[JMP_20.] ;STORE 2 BEFORE 0 IN CASE 11 IS DOING BR . IN 0
|
||||
MOVEM A,11LO
|
||||
MOVE A,11LO
|
||||
CAME A,[JMP_20.] ;IS THE PDP11 RUNNING?
|
||||
JRST MEMLUZ
|
||||
SETZM 11LO+1 ;ZERO IN 4,6 IN CASE 11 GETS A NXM.
|
||||
SETZM 11LO+2 ;ALSO IN RESERVED INSN TRAP VECTOR
|
||||
SETZM 11LO+3 ;AND BPT TRAP VECTOR.
|
||||
SETZM 11LO+<TPBRKV/4> ;POINT TTYO BREAK VECTOR TO 0
|
||||
MOVE A,[JMP_20.] ;JMP @#0
|
||||
MOVEM A,11LO+<404/4> ;WRITE A CLOCK INTERRUPT ROUTINE:
|
||||
MOVE A,[CLR_20.+LKS_4] ;CLR @#LKS ? JMP @#0
|
||||
MOVEM A,11LO+<400/4>
|
||||
MOVE A,[400_20.] ;SET UP BREAK VECTOR TO POINT AT IT.
|
||||
MOVEM A,11LO+<LKBRKV/4> ;THUS NEXT CLOCK INT WILL TURN OFF CLOCK INTS.
|
||||
MOVE C,11NUM
|
||||
MOVE C,DESC(C) ;GET DESC VECTOR ADDR FOR THIS 11
|
||||
MOVE C,3(C) ;TO SEE IF WE KNOW IT HAS A CLOCK.
|
||||
MOVE A,[300_20.+4]
|
||||
TRNE C,1 ;IF SO, CAUSE 1 CLOCK INT IN CASE WAS IN A WAIT INSN.
|
||||
MOVEM A,11LO+<LKS/4>
|
||||
MOVEI B,10
|
||||
.SLEEP B, ;WAIT FOR INTS TO HAPPEN AND DO RIGHT THINGS.
|
||||
MOVE B,NOPG
|
||||
ASH B,10.
|
||||
SUBI B,4
|
||||
MOVE A,[CLRPC_20.+CLRPC_4]
|
||||
11IN4: MOVEM A,11LO+3(B) ;FILL ALL OF MEMORY BUT 1ST 8 WORDS WITH CLR PC
|
||||
REPEAT 2,JFCL
|
||||
CAME A,11LO+3(B)
|
||||
JRST MEMLUZ ;SO WHATEVER 11 WAS DOING IT WILL FALL INTO LOOP IN 0
|
||||
SOJG B,11IN4
|
||||
MOVE A,[RESET_20.+CLR_4]
|
||||
MOVEM A,11LO+<400/4> ;400/ RESET
|
||||
MOVE A,[400_20.+BR._4] ;402/ CLR 400 (TO DISTINGUISH RUNNING 11 FROM WAITING)
|
||||
MOVEM A,11LO+<404/4> ;404/ BR .
|
||||
MOVE A,[400_4+10] ;0/ JMP 400 SO RESET GETS DONE AND 0 IS SAFE TO MUNG.
|
||||
MOVEM A,11LO
|
||||
MOVEI A,10 ;GIVE IT TIME TO WORK.
|
||||
.SLEEP A,
|
||||
MOVE A,[JMP_20.] ;MAKE A LOOP IN 0,2 SUCH THAT WE CAN CLOBBR 2 WITH START
|
||||
MOVEM A,11LO ;ADDRESS AFTER LOADING THE FILE.
|
||||
MOVE A,11LO+<400/4>
|
||||
LSH A,-20. ;DID THE CLR 400 GET DONE? IF 400 NONZERO,
|
||||
MOVEM A,WAITFL ;THE 11 MUST BE WAITING (SINCE NOT RUNNING, NOT HALTED).
|
||||
MOVE A,[CLRPC_20.+CLRPC_4]
|
||||
MOVEM A,11LO+<404/4> ;406/ CLR PC TO JUMP TO 0 SO WE CAN ZERO 400, ETC.
|
||||
SETZM 11LO+1 ;POINT NXM VECTOR TO 0
|
||||
MOVE B,NOPG ;ZERO ALL REST OF MEMORY.
|
||||
ASH B,10.
|
||||
SUBI B,1
|
||||
11IN5: SETZM 11LO(B)
|
||||
JFCL
|
||||
SOJG B,11IN5
|
||||
11IN3: SKIPN 11LO ;DID 11 HALT DURING ALL THIS?
|
||||
JRST MEMLUZ
|
||||
SETZB PNTR,ST11AD
|
||||
SETOM 11WORD
|
||||
JRST STLOAD
|
||||
11MAP:
|
||||
REPEAT 64.,3_34.+1777+<.RPCNT*2000>_10.
|
||||
NOPG: 0 ;NUMBER OF 2K 11-PAGES
|
||||
11NUM: 0 ;11 BEING STUFFED
|
||||
|
||||
;PDP-11 MEMORY NOT WORKING. SEE IF MACHINE IS HALTED, 10-11 IS BROKEN,
|
||||
;OR MEMORY IS BROKEN.
|
||||
MEMLUZ: SETZM B ;B ANY BITS THAT WORK ANYWHERE
|
||||
MOVN C,NOPG
|
||||
LSH C,10.+18.
|
||||
MEMLZ1: IOR B,11LO(C)
|
||||
AOBJN C,MEMLZ1
|
||||
JUMPE B,11HALT ;IF ALL LOCATIONS 0, PDP11 IS JUST HALTED
|
||||
;MAYBE SOME MEMORY LOCATIONS DON'T WORK, AND SOME DO
|
||||
MOVEI B,[ASCIZ/PDP11 memory seems to have problems.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
MOVN C,NOPG
|
||||
LSH C,10.+18.
|
||||
AOBJN C,.+1 ;DON'T CLOBBER LOCATION 0, PDP11 WILL HALT
|
||||
MEMLZ3: SETZM 11LO(C)
|
||||
REPEAT 4,JFCL
|
||||
SKIPE 11LO(C)
|
||||
JRST MEMLZ4
|
||||
MOVNI A,20
|
||||
MOVEM A,11LO(C)
|
||||
REPEAT 4,JFCL
|
||||
CAME A,11LO(C)
|
||||
JRST MEMLZ4
|
||||
AOBJN C,MEMLZ3
|
||||
JRST MEMLZ7
|
||||
|
||||
MEMLZ4: MOVEI B,[ASCIZ/Locations /]
|
||||
PUSHJ P,TYPE
|
||||
HRRZ B,C
|
||||
LSH B,2
|
||||
PUSHJ P,TYPEN
|
||||
MEMLZ5: SETZM 11LO(C)
|
||||
REPEAT 4,JFCL
|
||||
MOVE 11WORD,11LO(C)
|
||||
MOVNI A,20
|
||||
MOVEM A,11LO(C)
|
||||
REPEAT 4,JFCL
|
||||
CAMN A,11LO(C)
|
||||
SKIPE 11WORD
|
||||
AOBJN C,MEMLZ5
|
||||
MEMLZ6: MOVEI B,[ASCIZ/ through /]
|
||||
PUSHJ P,TYPE
|
||||
MOVEI B,-1(C)
|
||||
LSH B,2
|
||||
PUSHJ P,TYPEN
|
||||
MOVEI B,[ASCIZ/ do not work.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
JUMPL C,MEMLZ3
|
||||
MEMLZ7: MOVEI B,[ASCIZ/This could be the 10-11 interface or the PDP11. Try resetting
|
||||
both the PDP11 and its 11-10 interface. Type a character to try again./]
|
||||
PUSHJ P,TYPE
|
||||
PUSHJ P,TYI
|
||||
JRST 11IN2
|
||||
|
||||
11HALT: MOVEI B,[ASCIZ /PDP11 not running. Put 777 (BR .) in 0, start at 0,
|
||||
then type a character to retry stuffing. If that doesn't work, try resetting
|
||||
PDP11 and its 11-10 interface.
|
||||
/]
|
||||
PUSHJ P,TYPE
|
||||
PUSHJ P,TYI
|
||||
JRST 11IN2
|
||||
|
||||
STLD4: TRNE CHK,377
|
||||
.VALUE
|
||||
SUMCHK: JFCL
|
||||
STLOAD: SETZM CHK
|
||||
STLD2: PUSHJ P,GETDSK
|
||||
JUMPL A,EOFDSK
|
||||
JUMPE A,STLD2 ;IGNORE ZERO WORDS; THEY DON'T START BLOCKS.
|
||||
CAIE A,1 ;LOOKING FOR START OF BLOCK
|
||||
JRST EOFDSK ;FOUND ANYTHING BUT A 1 => ERROR.
|
||||
PUSHJ P,GETDSK ;2ND HALF OF BEGIN-BLOCK-FLAG
|
||||
MOVEI BCOUNT,20 ;TO FAKE OUT GETWRD
|
||||
PUSHJ P,GETWRD ;GET BYTE COUNT FOR BLOCK
|
||||
SUBI B,3
|
||||
MOVEM B,BCOUNT
|
||||
PUSHJ P,GETWRD ;GET ADDRESS FOR BLOCK
|
||||
MOVEM B,ST11AD
|
||||
SKIPL BCOUNT
|
||||
CAIG BCOUNT,1 ;JUMP BLOCK
|
||||
JRST STUFED
|
||||
MOVEI A,(B)
|
||||
ADD A,BCOUNT ;WHAT IS 1ST ADDRESS THIS BLOCK WON'T REACH TO?
|
||||
LSH A,-12. ;WHAT PAGE IS 1ST PAGE WE WON'T STORE IN?
|
||||
CAMLE A,NOPG ;DETECT TRYING TO WRITE IN NON-EX PDP11 MEMORY.
|
||||
JRST 11MPV
|
||||
STLOP1: CAIGE B,4
|
||||
JRST LOWLOD
|
||||
STLOOP: PUSHJ P,GETDSK
|
||||
JUMPL A,EOFDSK
|
||||
SOJLE BCOUNT,STLD4
|
||||
JSP B,STBYTE
|
||||
AOJA ST11AD,STLOOP
|
||||
STUFED: TRNE ST11AD,1
|
||||
JRST NOSTAR
|
||||
LSH ST11AD,4
|
||||
TRO ST11AD,10 ;DONT STORE WORD 0
|
||||
MOVEM ST11AD,11LO ;STORE START ADDR IN 2
|
||||
SKIPE JCLP
|
||||
JRST OK
|
||||
PUSHJ P,CRLF
|
||||
MOVEI B,[ASCIZ /File loaded and started at /]
|
||||
SKIPE WAITFL ;IF PDP11 WAS IN A WAIT INSN DURING STUFFING, IT HASN'T STARTED.
|
||||
MOVEI B,[ASCIZ /File loaded, but PDP11 is in a WAIT instruction.
|
||||
Start at /]
|
||||
PUSHJ P,TYPE
|
||||
LSH ST11AD,-4
|
||||
MOVE B,ST11AD
|
||||
PUSHJ P,TYPEN
|
||||
PUSHJ P,CRLF
|
||||
JRST OK
|
||||
|
||||
WAITFL: 0 ;-1 IF WE DETECTED THAT PDP11 IS WAITING AND CAN'T BE STARTED.
|
||||
|
||||
NOSTAR: MOVEI B,[ASCIZ /File loaded; no start address.
|
||||
/]
|
||||
SKIPN JCLP
|
||||
LOSE: PUSHJ P,TYPE
|
||||
OK: SKIPE DEBUG
|
||||
.VALUE
|
||||
.LOGOUT
|
||||
.BREAK 16,160000
|
||||
|
||||
11MPV: SKIPA B,[[ASCIZ /File needs more core than this PDP11 has.
|
||||
/]]
|
||||
EOFDSK: MOVEI B,[ASCIZ /File is not in PDP11 absolute loader format.
|
||||
/]
|
||||
JRST LOSE
|
||||
|
||||
LOWLOD: MOVEI B,[ASCIZ /File attempts to load into word 0 or 2.
|
||||
/]
|
||||
JRST LOSE
|
||||
;GET NEXT WORD FROM DISK INTO A. -1 == EOF
|
||||
|
||||
;PNTR HAS MINUS # LEFT SO ADRS(PNTR) GIVES NEXT WORD
|
||||
;WHEN IT EQUALS 0, GET NEW BLOCK. IF RETURN WITH NEG
|
||||
;POINTER, WRITE NEG 1 AS EOF CHAR
|
||||
|
||||
GETDSK: JUMPE PNTR,RELOD ;NEED NEW BLOCK
|
||||
MOVE A,ADRS(PNTR)
|
||||
ADD CHK,A
|
||||
AOJA PNTR,CPOPJ ;ADD ONE AND RET URN
|
||||
RELOD: MOVE PNTR,DBUFP
|
||||
.IOT DSK,PNTR
|
||||
JUMPL PNTR,ENFIL
|
||||
NPNTR: HLRE PNTR,DBUFP ;GET MIN WRD COUNT IN PNTR
|
||||
JRST GETDSK
|
||||
ENFIL: HRRZS PNTR ;ZERO LEFT HALF TO GET NEXT ADRESS
|
||||
SETOM (PNTR) ;WRITE EOF CHAR
|
||||
JRST NPNTR
|
||||
|
||||
DBUFP: -50,,BUFR
|
||||
BUFR: BLOCK 50
|
||||
ADRS=.
|
||||
|
||||
; GET NEXT TWO 8-BIT BYTES AND COMBINE INTO
|
||||
;16 BITS IN RT END OF BOTH A AND B
|
||||
|
||||
GETWRD: PUSHJ P,GETDSK
|
||||
ANDI A,377
|
||||
LSHC A,-36. ;MOVE A TO B AND ZERO A
|
||||
SOSLE BCOUNT ;IF CHECKSUM DON'T GET EXTRA BLOCK YET
|
||||
PUSHJ P,GETDSK
|
||||
SOS BCOUNT
|
||||
AOSE A ;WAS IT A NEG 1?
|
||||
SOS A ;IF NOT RESTORE, ELSE SEND ZERO
|
||||
LSH A,8.
|
||||
ADDB A,B
|
||||
POPJ P,
|
||||
ST11WD: ;STORE WORD IN B IN 11 AT CU11AD.
|
||||
MOVE C,CU11AD
|
||||
LSHC C,-2
|
||||
CAME C,ST11AD
|
||||
JRST [MOVEM 11WORD,11LO(ST11AD)
|
||||
SETOM 11WORD
|
||||
JRST .+1]
|
||||
MOVEM C,ST11AD
|
||||
JUMPL D,ST11W1
|
||||
DPB B,[242000,,11WORD]
|
||||
TRZ 11WORD,10
|
||||
JRST ST11W2
|
||||
ST11W1: DPB B,[042000,,11WORD]
|
||||
TRZ 11WORD,4
|
||||
ST11W2: AOS CU11AD
|
||||
AOS CU11AD
|
||||
POPJ P,
|
||||
|
||||
CU11AD: 0 ;WHERE THE STUFER WANTS WORDS PUT
|
||||
;STORE BYTE IN A IN 11 AT ST11AD
|
||||
STBYTE: MOVEI D,0
|
||||
MOVE C,ST11AD
|
||||
CIRC C,-2
|
||||
DPB A,DPBT(D)
|
||||
JRST (B)
|
||||
DPBT: 241000,,11LO(C)
|
||||
041000,,11LO(C)
|
||||
341000,,11LO(C)
|
||||
141000,,11LO(C)
|
||||
CONSTANTS
|
||||
PATCH: BLOCK 200
|
||||
LOC <.+1777>&<-2000>
|
||||
11LO=.
|
||||
IF2,[PRINTX /NOSE
|
||||
/]
|
||||
END START
|
||||
|
||||
Reference in New Issue
Block a user