mirror of
https://github.com/PDP-10/its.git
synced 2026-01-21 18:16:07 +00:00
291 lines
4.3 KiB
Plaintext
Executable File
291 lines
4.3 KiB
Plaintext
Executable File
TITLE LOADER
|
||
|
||
CHK=16
|
||
ERP=15
|
||
PPTR=14
|
||
C=4
|
||
D=11
|
||
CKSM=12
|
||
REG=13
|
||
F=7
|
||
S=10
|
||
SPNTR=10
|
||
P=6
|
||
PNTR=1
|
||
A=2
|
||
B=3
|
||
CMPTR=4
|
||
BCOUNT=5
|
||
|
||
O.SYMS=-100. ;GETS ADDED TO IN DEBUGGER
|
||
|
||
BUFF: BLOCK 40
|
||
|
||
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
|
||
CAIN A,33
|
||
JRST GCHR1 ;ALT MODE ALSO TERMINATES COMMAND
|
||
CAIE A,15 ;CR?
|
||
JRST GCHR
|
||
GCHR1: 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
|
||
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: MOVEI A,2
|
||
PUSHJ P,TYO
|
||
CRS: MOVEI A,"*
|
||
PUSHJ P,TYO
|
||
CRR: MOVEI A,15
|
||
PUSHJ P,TYO
|
||
MOVEI A,12
|
||
JRST TYO
|
||
|
||
LINE==1
|
||
TTO==1
|
||
TTI==2
|
||
DSK==3
|
||
ERRC==4
|
||
|
||
|
||
BEGIN: MOVE P,[-100,,PLD]
|
||
.OPEN TTO,STTO
|
||
.VALUE 0
|
||
.OPEN TTI,STTI
|
||
.VALUE 0
|
||
JRST BCMD
|
||
|
||
STTO: 45,,(SIXBIT /TTY/)
|
||
STTI: 20,,(SIXBIT /TTY/)
|
||
STTI1: 4,,(SIXBIT /TTY/)
|
||
|
||
PLD: BLOCK 100
|
||
|
||
BCMD: CLEARM PASS ;PASS 0 - LOAD NORMAL, -1 LOAD LOADER LOADER
|
||
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,33 ;ALT MODE TERMINATES COMMAND
|
||
SOSA PASS ;AND SAYS TO USE LOADER LOADER (TO AVOID CLOBBERING)
|
||
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
|
||
CAIL A,100
|
||
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
|
||
|
||
IP: 440600,,S
|
||
|
||
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
|
||
PASS2: .OPEN DSK,ADR
|
||
JRST ERROR
|
||
SKIPGE PASS
|
||
JRST LLDR ;LOAD LOADER LOADER FIRST
|
||
LLDR1: .OPEN LINE,[45,,'TTY]
|
||
.VALUE ;SUPER-IMAGE OUT SO NO PADDING, ETC.
|
||
.OPEN TTI,STTI1 ;SWITCH INTO IMAGE MODE
|
||
.VALUE 0
|
||
MOVEI A,15
|
||
.SLEEP A,
|
||
MOVEI PNTR,0
|
||
JRST STBLK
|
||
|
||
LLDR: .CALL LLOPN
|
||
.VALUE
|
||
JRST LLDR1
|
||
|
||
ERROR: .OPEN ERRC,ERR0
|
||
.VALUE 0
|
||
ERR1: .IOT ERRC,A
|
||
CAIN A,3
|
||
JRST BCMD
|
||
JUMPL A,BCMD
|
||
PUSHJ P,TYO
|
||
JRST ERR1
|
||
|
||
PASS: 0 ;0 LOAD REGULAR THING, -1 LOAD LOADER LOADER
|
||
|
||
ERR0: SIXBIT / ERR/
|
||
1
|
||
0
|
||
|
||
SNR: 0
|
||
ADR: 2,,(SIXBIT /DSK/)
|
||
0
|
||
0
|
||
BIN: SIXBIT /BIN /
|
||
CMDQ: ILDB A,CMPTR
|
||
JRST SXBT
|
||
|
||
BTTO: 7,,(SIXBIT /TTY/)
|
||
|
||
LLOPN: SETZ
|
||
SIXBIT /OPEN/
|
||
5000,,2
|
||
1000,,DSK
|
||
[SIXBIT /DSK/]
|
||
[SIXBIT /GT40LL/]
|
||
[SIXBIT /BIN/]
|
||
SETZ+[SIXBIT /GT40/]
|
||
|
||
;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)
|
||
ANDI A,377
|
||
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=.
|
||
STBLK: .IOT LINE,[175]
|
||
.IOT LINE,["R]
|
||
.IOT LINE,[175]
|
||
.IOT LINE,["L]
|
||
SETZB B,C
|
||
STBLK4: .RESET TTI,
|
||
STBLK1: PUSHJ P,GETDSK
|
||
CAIE A,1 ;START OF BLOCK?
|
||
JRST STBLK1 ;NOT YET
|
||
PUSHJ P,SEND ;YES, SEND IT
|
||
PUSHJ P,GETDSK ;AND THE ZERO FOLLOWING
|
||
PUSHJ P,SEND
|
||
PUSHJ P,GWRD ;GET COUNT
|
||
MOVE D,C
|
||
CAIN D,6
|
||
JRST STBLK2
|
||
SUBI D,4
|
||
STBLK3: PUSHJ P,GETDSK
|
||
PUSHJ P,SEND
|
||
SOJGE D,STBLK3
|
||
MOVEI A,TTI
|
||
.LISTEN A,
|
||
JUMPE A,STBLK1
|
||
.IOT TTI,A
|
||
CAIE A,175
|
||
JRST STBLK4
|
||
JRST BEGIN
|
||
|
||
GWRD: PUSHJ P,GETDSK
|
||
MOVE C,A
|
||
PUSHJ P,SEND
|
||
PUSHJ P,GETDSK
|
||
PUSHJ P,SEND
|
||
LSH A,8.
|
||
ADD C,A
|
||
POPJ P,
|
||
|
||
STBLK2: PUSHJ P,GWRD
|
||
PUSHJ P,GETDSK
|
||
PUSHJ P,SEND
|
||
MOVEI A,0
|
||
PUSHJ P,SEND
|
||
AOSG PASS
|
||
JRST PASS2 ;NOW FOR THE REAL STUFF
|
||
.VALUE [ASCIZ /:LOGOUT
|
||
/]
|
||
|
||
SENDCH: TRNN F,40
|
||
TRO F,100
|
||
.IOT TTO,F
|
||
POPJ P,
|
||
|
||
SEND: JRST @SENDD(B)
|
||
SENDD: SEND1
|
||
SEND2
|
||
SEND3
|
||
|
||
SEND1: MOVE F,A
|
||
MOVEI S,0
|
||
LSHC F,-2
|
||
LSH S,-30.
|
||
AOS B
|
||
JRST SENDCH
|
||
|
||
SEND2: MOVE F,A
|
||
ANDI F,360
|
||
LSH F,-4
|
||
ADD F,S
|
||
MOVE S,A
|
||
ANDI S,17
|
||
LSH S,2
|
||
AOS B
|
||
JRST SENDCH
|
||
|
||
SEND3: MOVE F,A
|
||
LSH F,-6
|
||
ADD F,S
|
||
MOVE S,A
|
||
PUSHJ P,SENDCH
|
||
MOVE F,A
|
||
ANDI F,77
|
||
MOVEI B,0
|
||
JRST SENDCH
|
||
|
||
|
||
END BEGIN
|
||
|