1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-21 18:16:07 +00:00
PDP-10.its/src/syseng/gtload.14
2018-10-03 19:29:12 +02:00

291 lines
4.3 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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