mirror of
https://github.com/PDP-10/its.git
synced 2026-03-06 11:23:32 +00:00
BOOTER - Dynamic Modeling login program.
This commit is contained in:
@@ -37,3 +37,7 @@ type ":vk\r"
|
||||
# Survey sender demon.
|
||||
respond "*" ":link sys; atsign sursnd, survey;\r"
|
||||
type ":vk\r"
|
||||
|
||||
# Login program.
|
||||
respond "*" ":midas sysbin;_syseng; booter\r"
|
||||
expect ":KILL"
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
- BKG, a Backgammon game.
|
||||
- BLKLDR, Imlac secondary block loader.
|
||||
- BOLIO, typesetting.
|
||||
- BOOTER, Dynamic Modeling login program.
|
||||
- BOOTVT, GT40 boot ROM.
|
||||
- BYE, say goodbye to user. Used in LOGOUT scripts.
|
||||
- CALPRT, decode a .CALL instruction's CALL block.
|
||||
|
||||
437
src/syseng/booter.3
Normal file
437
src/syseng/booter.3
Normal file
@@ -0,0 +1,437 @@
|
||||
;
|
||||
; BOOTER - LOGIN BOOTSTRAP PROGRAM
|
||||
;
|
||||
|
||||
TITLE BOOTER
|
||||
|
||||
LSTART==6 ; WHERE BOOTSTRAP LOADER WILL BE MOVED TO
|
||||
PDLSIZ==20
|
||||
|
||||
LOC 100
|
||||
|
||||
LCHN==1
|
||||
TYOCHN==2
|
||||
TYICHN==3
|
||||
PWCHN==1
|
||||
MLCHN==1
|
||||
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
P=17
|
||||
|
||||
DBGTTY: 21
|
||||
|
||||
DEBUG: 0
|
||||
LCLDDT: -1 ; -1 => LOCALS GET IMMEDIATE DDT
|
||||
CHKPW: 0 ; -1 => CHECK PASSWORDS FOR NON-LOCALS
|
||||
; 0 => ONLY CHECK FOR GOOD UNAMES
|
||||
|
||||
R6PSW: 0 ; 0 => READING UNAME
|
||||
; -1 => READING PSW
|
||||
|
||||
PXWORK: 0 ; -1 => ^PX WORKS ON TTY
|
||||
DISPLY: 0 ; -1 => DISPLAY
|
||||
UNAME: 0
|
||||
XUNAME: 0
|
||||
PSW: 0
|
||||
LOCAL: 0 ; TTY IS LOCAL
|
||||
TTYS1: 0 ; SAVED TTY STATUS
|
||||
TTYS2: 0
|
||||
TTYSS: 0
|
||||
|
||||
PDL: BLOCK PDLSIZ
|
||||
|
||||
START: MOVE P,[-PDLSIZ,PDL]
|
||||
SKIPE DEBUG
|
||||
JRST L0
|
||||
.SUSET [.RUNAME,,A]
|
||||
HLLO A,A
|
||||
AOJN A,LOADIT ; ALREADY LOGGED IN -> JUST LOAD
|
||||
.SUSET [.RSUPPRO,,A]
|
||||
AOJN A,LOADIT ; NOT TOP LEVEL -> JUST LOAD
|
||||
JRST L2
|
||||
L0: .SUSET [.RCNSL,,A]
|
||||
JUMPL A,LOADIT ; NO TTY -> JUST LOAD
|
||||
CAME A,DBGTTY ; NOT DEBUG TTY -> JUST LOAD
|
||||
JRST LOADIT
|
||||
L2: PUSHJ P,OPNTTY
|
||||
SKIPN LCLDDT
|
||||
JRST L5
|
||||
SKIPE LOCAL
|
||||
JRST CLSLOD
|
||||
L5: SKIPN DISPLY
|
||||
JRST N1
|
||||
.IOT TYOCHN,[^P]
|
||||
.IOT TYOCHN,["C]
|
||||
PUSHJ P,PRMAIL
|
||||
N1: PUSHJ P,GTNAME
|
||||
MOVEM C,UNAME
|
||||
MOVEM C,XUNAME
|
||||
SKIPE LOCAL
|
||||
JUMPE C,CLSLOD ; LOCAL AND NO NAME GIVEN -> NO LOGIN
|
||||
JUMPE C,N1 ; NOT LOCAL -> MUST GET NAME
|
||||
SKIPN CHKPW ; CHECK PASSWORD?
|
||||
JRST CHKUSR ; NO -> CHECK VALID USER NAME
|
||||
SKIPE LOCAL
|
||||
JRST CHKUSR ; LOCAL -> JUST WARN ABOUT BAD USER NAME
|
||||
PUSHJ P,GTPSW
|
||||
MOVE A,C ; PASSWORD
|
||||
PUSHJ P,SCRAMBLE ; SCRAMBLE IT
|
||||
MOVEM A,PSW
|
||||
MOVE A,XUNAME
|
||||
PUSHJ P,CKNAME ; GET PASSWORD FILE ENTRY
|
||||
JRST BADLOG
|
||||
CAMN A,PSW
|
||||
JRST WIN ; WIN!
|
||||
BADLOG: MOVE D,[18.,,[ASCIZ/Login incorrect.
|
||||
/]]
|
||||
PUSHJ P,PSTRNG
|
||||
JRST N1
|
||||
|
||||
CHKUSR: MOVE A,XUNAME
|
||||
PUSHJ P,CKNAME
|
||||
JRST BADUSR ; NO SUCH USER
|
||||
JRST WIN ; OK
|
||||
|
||||
BADUSR:
|
||||
SKIPE LOCAL ; HERE IF BAD USER NAME
|
||||
JRST BDLUSR ; BAD USER NAME, LOCAL TTY
|
||||
MOVE D,[25.,,[ASCIZ/Unrecognized user name.
|
||||
/]]
|
||||
PUSHJ P,PSTRNG
|
||||
JRST N1 ; GET ANOTHER NAME
|
||||
|
||||
BDLUSR: MOVE D,[36.,,[ASCIZ/(Warning: unrecognized user name.)
|
||||
/]]
|
||||
PUSHJ P,PSTRNG
|
||||
JRST WIN ; LOGIN ANYWAY IF LOCAL
|
||||
|
||||
|
||||
WIN: PUSHJ P,LOGIN
|
||||
CLSLOD: .CALL [SETZ ? SIXBIT/TTYSET/ ? MOVEI TYICHN ?
|
||||
TTYS1 ? TTYS2 ? SETZ TTYSS]
|
||||
.VALUE
|
||||
.CLOSE TYOCHN,
|
||||
.CLOSE TYICHN,
|
||||
JRST LOADIT
|
||||
|
||||
LOGIN: .CALL [SETZ ? SIXBIT/LOGIN/ ? MOVES A ? UNAME ? MOVEI 0 ? SETZ XUNAME]
|
||||
JRST LOG1
|
||||
.SUSET [.SXUNAM,,XUNAME]
|
||||
POPJ P,
|
||||
|
||||
LOG1: CAIE A,%EEXFL
|
||||
.VALUE ;ILLEGAL LOGIN NAME SPEC'D.
|
||||
MOVE C,UNAME
|
||||
MOVE A,[440600,,C] ;SPEC'D NAME IN USE - AOS IT AND TRY AGAIN.
|
||||
LOG4: ILDB D,A ;FIND FIRST BLANK IN THE SPEC'D NAME.
|
||||
JUMPE D,LOG6
|
||||
TLNE A,770000
|
||||
JRST LOG4
|
||||
;THERE ARE NO BLANKS - CLOBBER THE 6TH CHARACTER.
|
||||
LOG6: MOVEI D,'0 ;FIRST TRY "0" INSTEAD OF THE BLANK;
|
||||
LOG5: DPB D,A
|
||||
.CALL [SETZ ? SIXBIT/LOGIN/ ? C ? MOVEI 0 ? SETZ XUNAME]
|
||||
AOJA D,LOG5 ;KEEP AOS'ING UNTIL LOGIN SUCCEEDS.
|
||||
MOVEM C,UNAME
|
||||
.IOT TYOCHN,["(]
|
||||
PUSHJ P,TYOSIX
|
||||
.IOT TYOCHN,[")]
|
||||
.IOT TYOCHN,[^M]
|
||||
.IOT TYOCHN,[^J]
|
||||
POPJP: POPJ P,
|
||||
|
||||
TYOSIX: MOVE B,[440600,,C]
|
||||
TYO6L: ILDB A,B
|
||||
JUMPE A,POPJP
|
||||
ADDI A,40
|
||||
.IOT TYOCHN,A
|
||||
JRST TYO6L
|
||||
|
||||
OPNTTY: .CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 21 ? MOVEI TYOCHN ? 400000,,[SIXBIT/TTY/]]
|
||||
.VALUE
|
||||
.CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 0 ? MOVEI TYICHN ? 400000,,[SIXBIT/TTY/]]
|
||||
.VALUE
|
||||
.CALL [SETZ ? SIXBIT/TTYGET/ ? MOVEI TYICHN ?
|
||||
MOVEM TTYS1 ? MOVEM TTYS2 ? SETZM TTYSS]
|
||||
.VALUE
|
||||
MOVE A,TTYSS
|
||||
SKIPN DEBUG
|
||||
TLO A,%TSSII ; SUPER-IMAGE INPUT
|
||||
.CALL [SETZ ? SIXBIT/TTYSET/ ? MOVEI TYICHN ? [020202020202] ?
|
||||
[020202020202] ? SETZ A]
|
||||
.VALUE
|
||||
.CALL [SETZ ? SIXBIT/CNSGET/ ? MOVEI TYOCHN ? MOVEM ? MOVEM ? MOVEM ?
|
||||
MOVEM ? MOVEM A ? SETZM B]
|
||||
.VALUE
|
||||
TLNE A,%TOERS ; CAN ERASE?
|
||||
SETOM PXWORK ; YES -> ^PX WORKS
|
||||
TLNE A,%TOERS
|
||||
SETOM DISPLY ; YES -> IS DISPLAY
|
||||
TLNN A,%TOOVR ; CAN'T OVERPRINT?
|
||||
SETOM PXWORK ; YES -> ^PX WORKS
|
||||
TRNE B,%TYMDM+%TYDIL ; IS A DIAL-UP LINE?
|
||||
JRST OPN1 ; YES -> NOT LOCAL
|
||||
.CALL [SETZ ? 'STYGET ? MOVEI TYICHN ? SETZM A]
|
||||
.VALUE
|
||||
SKIPN A ; IS A STY?
|
||||
SETOM LOCAL ; NO -> LOCAL
|
||||
OPN1: POPJ P,
|
||||
|
||||
PRMAIL: .CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 0 ? MOVEI MLCHN ?
|
||||
[SIXBIT/SYS/] ? [SIXBIT/SYSTEM/] ? 400000,,[SIXBIT/MAIL/]]
|
||||
JRST PRM1
|
||||
PUSHJ P,PMLCHN
|
||||
PRM1: SKIPN LOCAL
|
||||
JRST POPJP
|
||||
.CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 0 ? MOVEI MLCHN ?
|
||||
[SIXBIT/SYS/] ? [SIXBIT/LOCAL/] ? 400000,,[SIXBIT/MAIL/]]
|
||||
JRST PRM2
|
||||
PUSHJ P,PMLCHN
|
||||
PRM2: .CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 0 ? MOVEI MLCHN ?
|
||||
[SIXBIT/SYS/] ? [SIXBIT/SYSTEM/] ? 400000,,[SIXBIT/BTMAIL/]]
|
||||
JRST PRM3
|
||||
PUSHJ P,PMLCHN
|
||||
PRM3: .CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 0 ? MOVEI MLCHN ?
|
||||
[SIXBIT/SYS/] ? [SIXBIT/LOCAL/] ? 400000,,[SIXBIT/BTMAIL/]]
|
||||
JRST PRM4
|
||||
PUSHJ P,PMLCHN
|
||||
PRM4: POPJ P,
|
||||
|
||||
PMLCHN: .IOT MLCHN,A
|
||||
JUMPL A,PML1
|
||||
CAIN A,^C
|
||||
JRST PML1
|
||||
.IOT TYOCHN,A
|
||||
JRST PMLCHN
|
||||
PML1: .IOT TYOCHN,[^M]
|
||||
.IOT TYOCHN,[^J]
|
||||
.CLOSE MLCHN,
|
||||
POPJ P,
|
||||
|
||||
PSTRNG: MOVE A,D
|
||||
HLRZ 0,A ; COUNT
|
||||
HRLI A,440700 ; BYTE POINTER
|
||||
.CALL [SETZ ? SIXBIT/SIOT/ ? MOVEI TYOCHN ? A ? SETZ 0]
|
||||
.VALUE
|
||||
POPJ P,
|
||||
|
||||
GTNAME: MOVE D,[6.,,[ASCIZ/Name: /]]
|
||||
SETZM R6PSW
|
||||
PUSHJ P,RDSIX
|
||||
POPJ P,
|
||||
|
||||
GTPSW: MOVE D,[10.,,[ASCIZ/Password: /]]
|
||||
SETOM R6PSW
|
||||
PUSHJ P,RDSIX
|
||||
POPJ P,
|
||||
|
||||
RDSIX: PUSHJ P,PSTRNG
|
||||
SETZ C,
|
||||
MOVE B,[440600,,C]
|
||||
R6LOOP: .IOT TYICHN,A
|
||||
CAIN A,177
|
||||
JRST R6RUBO
|
||||
CAIN A,15
|
||||
JRST R6DONE
|
||||
CAIN A,12
|
||||
JRST R6DONE
|
||||
CAIN A,33
|
||||
JRST R6DONE
|
||||
CAILE A,"z
|
||||
JRST R6BAD
|
||||
CAIL A,"a
|
||||
JRST R6LOW
|
||||
CAILE A,"Z
|
||||
JRST R6BAD
|
||||
CAIL A,"A
|
||||
JRST R6ADDC ; UPPERCASE
|
||||
CAIN A,".
|
||||
JRST R6ADDC
|
||||
CAIG A,40
|
||||
JRST R6BAD
|
||||
SKIPN R6PSW
|
||||
JRST R6BAD
|
||||
R6ADDC: TLNN B,770000 ;CHECK FIT
|
||||
JRST R6LOOP
|
||||
SKIPN R6PSW
|
||||
.IOT TYOCHN,A
|
||||
SUBI A,40
|
||||
IDPB A,B ;STORE CHARACTER
|
||||
JRST R6LOOP
|
||||
R6LOW: SUBI A,40 ;LOWER CASE
|
||||
JRST R6ADDC
|
||||
R6BAD: .IOT TYOCHN,[^G]
|
||||
JRST R6LOOP
|
||||
|
||||
R6RUBO: JUMPE C,R6BAD ; NO CHARS
|
||||
LDB A,B ; LAST CHAR
|
||||
SETZ 0,
|
||||
DPB 0,B ; CLEAR LAST CHAR
|
||||
ADD B,[060000,,] ; DECREMENT BYTE POINTER
|
||||
SKIPE R6PSW
|
||||
JRST R6LOOP
|
||||
SKIPN PXWORK
|
||||
JRST R6R1
|
||||
.IOT TYOCHN,[^P]
|
||||
.IOT TYOCHN,["X]
|
||||
JRST R6LOOP
|
||||
R6R1: ADDI A,40
|
||||
.IOT TYOCHN,A ; ECHO DELETED CHARACTER
|
||||
JRST R6LOOP
|
||||
|
||||
R6DONE: CAMN C,[SIXBIT /AS/]
|
||||
SETZM LOCAL
|
||||
.IOT TYOCHN,[^M]
|
||||
.IOT TYOCHN,[^J]
|
||||
POPJ P,
|
||||
|
||||
LOADIT: SKIPN XUNAME ; HAS THE USER IDENTIFIED HIMSELF?
|
||||
JRST LD1 ; NO, LOAD SYSTEM DDT
|
||||
.SUSET [.SSNAME,,XUNAME]
|
||||
.CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 6 ? MOVEI LCHN ?
|
||||
[SIXBIT/DSK/] ? [SIXBIT/______/] ? [SIXBIT/HACTRN/] ?
|
||||
XUNAME ? 403000,,A]
|
||||
SKIPA
|
||||
JRST LD3 ; LOAD THE FILE
|
||||
CAIE A,%ENSDR ; DIRECTORY EXIST?
|
||||
JRST LD1 ; YES, SO LOAD SYSTEM DDT
|
||||
.CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 6 ? MOVEI LCHN ?
|
||||
[SIXBIT/DSK/] ? XUNAME ? [SIXBIT/HACTRN/] ?
|
||||
400000,,[SIXBIT/(INIT)/]]
|
||||
JRST LD1
|
||||
JRST LD3
|
||||
LD1: .CALL [SETZ ? SIXBIT/OPEN/ ? MOVSI 6 ? MOVEI LCHN ?
|
||||
[SIXBIT/DSK/] ? [SIXBIT/TS/] ? [SIXBIT/DDT/] ?
|
||||
400000,,[SIXBIT/SYS/]]
|
||||
.VALUE
|
||||
LD3: MOVE 0,[LOADER,,LSTART]
|
||||
BLT 0,LSTART+LODLEN ; MOVE LOADER
|
||||
JRST LSTART ; EXECUTE LOADER
|
||||
|
||||
;
|
||||
; THE LOADING PROGRAM
|
||||
;
|
||||
|
||||
LOADER:
|
||||
OFFSET LSTART-.
|
||||
.CALL [SETZ ? SIXBIT/LOAD/ ? MOVEI -1 ? SETZI LCHN]
|
||||
.VALUE
|
||||
.IOT LCHN,IOTPTR ; READ STARTING ADDRESS
|
||||
.CLOSE LCHN,
|
||||
JRST @0 ; START PROGRAM
|
||||
IOTPTR: -1,,0
|
||||
OFFSET 0
|
||||
LODLEN==.-LOADER
|
||||
|
||||
|
||||
; SCRAMBLER
|
||||
; SCRAMBLE WORD IN A
|
||||
|
||||
SCRAMBLE:
|
||||
PUSH P,A
|
||||
PUSHJ P,CBITS
|
||||
MOVE C,A
|
||||
MOVE B,(P)
|
||||
ROT B,(A)
|
||||
XOR B,(P)
|
||||
MOVE A,B
|
||||
PUSHJ P,CBITS
|
||||
ADD C,A
|
||||
ROT B,(A)
|
||||
XOR B,[3.1415927]
|
||||
MOVE A,B
|
||||
PUSHJ P,CBITS
|
||||
ADD C,A
|
||||
ROT B,(A)
|
||||
XOR B,[2.7182818]
|
||||
MOVN A,C
|
||||
ROT B,36.(A)
|
||||
MOVE A,B
|
||||
POP P,B
|
||||
POPJ P,
|
||||
|
||||
;COUNT THE NUMBER OF 1'S IN WORD
|
||||
|
||||
CBITS: JUMPE A,POPJP ;0 GIVES QUICK ANSWER
|
||||
PUSH P,B ;SAVE STUFF
|
||||
PUSH P,C
|
||||
MOVE B,A ;TEMP
|
||||
MOVEI C,1 ;INITIAL COUNTER
|
||||
SOS A
|
||||
ANDB A,B ;REMOVE EXACTLY 1 "1"
|
||||
JUMPN A,[AOJA C,.-2] ;COUNT AGAIN IF NOT FINISHED
|
||||
MOVE A,C ;COUNT TO BE RETURNED
|
||||
POP P,C
|
||||
POP P,B
|
||||
POPJ P,
|
||||
|
||||
|
||||
|
||||
;CKNAME CHECK FOR NAME IN MASTER FILE
|
||||
; A/ 6BIT NAME TO SEARCH FOR
|
||||
; 0 RETURN - NAME NOT FOUND
|
||||
; 1 RETURN - A/ SCRAMBLED ENTRY
|
||||
|
||||
CKNAME: PUSH P,B
|
||||
PUSH P,C
|
||||
SKIPL NAMWDS
|
||||
JRST CKNAM1
|
||||
.OPEN PWCHN,[SIXBIT / "SYS PASS WORDS/]
|
||||
JRST CKNML1 ;OPEN LOSS, RETURN
|
||||
.CALL [SETZ ? 'FILLEN
|
||||
MOVEI PWCHN
|
||||
SETZM B]
|
||||
JRST CKNML1 ;BAD FILE?
|
||||
MOVEM B,NAMWDS
|
||||
MOVEI B,1777(B) ;WORD COUNT
|
||||
LSH B,-10.
|
||||
SKIPE B ;SKIP IF EMPTY FILE
|
||||
CAILE B,400-NAMPAG ;SKIP IF NOT TOO BIG
|
||||
JRST CKNML2 ;FILE BAD SIZE?
|
||||
MOVNS B ;- WDS
|
||||
MOVSS B ;-WDS,,
|
||||
HRRI B,NAMPAG
|
||||
MOVEI C,0
|
||||
.CALL [SETZ ? 'CORBLK
|
||||
MOVEI 200000
|
||||
MOVEI -1
|
||||
B
|
||||
MOVEI PWCHN
|
||||
SETZ C]
|
||||
JRST CKNML2 ;CORE LOST
|
||||
.CLOSE PWCHN, ;CLOSE CHANNEL NOW
|
||||
|
||||
; A/ NAME, B/ #WDS IN FILE, C/ INDEX
|
||||
|
||||
CKNAM1: MOVE B,NAMWDS
|
||||
TRZ B,1 ;TRUNCATE WORD COUNT
|
||||
MOVEI C,0
|
||||
CAMN A,NAMES(C) ;SKIP IF NOT YET
|
||||
JRST [AOS -2(P) ;SKIP RETURN
|
||||
MOVE A,NAMES+1(C)
|
||||
JRST CKNML2]
|
||||
ADDI C,2
|
||||
CAMGE C,B
|
||||
JRST .-4
|
||||
JRST CKNML1
|
||||
|
||||
CKNML2: SETOM NAMWDS
|
||||
.CORE NAMPAG
|
||||
JFCL
|
||||
CKNML1: .CLOSE PWCHN,
|
||||
POP P,C
|
||||
POP P,B
|
||||
POPJ P,
|
||||
|
||||
NAMWDS: -1
|
||||
LITTER: CONSTANTS
|
||||
|
||||
LOC <.+1777>&776000
|
||||
NAMES:
|
||||
NAMPAG==./2000
|
||||
|
||||
END START
|
||||
|
||||
Reference in New Issue
Block a user