1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-26 17:03:20 +00:00

MINI - mini Chaosnet file server.

For booting Lisp machines.
This commit is contained in:
Lars Brinkhoff
2018-11-03 15:29:17 +00:00
parent 6576381486
commit 3351cad03a
4 changed files with 380 additions and 2 deletions

View File

@@ -26,7 +26,7 @@ SRC = syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \
draw wl taa tj6 budd sharem ucode rvb kldcp math as imsrc gls demo \
macsym lmcons dmcg hack hibou agb gt40 rug maeda ms kle aap common \
fonts zork 11logo kmp info aplogo bkph bbn pdp11 chsncp sca music1 \
moon teach ken lmio1 llogo chsgtv clib sys3
moon teach ken lmio1 llogo chsgtv clib sys3 lmio
DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \
chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \
xfont maxout ucode moon acount alan channa fonts games graphs humor \

View File

@@ -98,6 +98,11 @@ expect ":KILL"
respond "*" ":midas bawden;_uptime\r"
expect ":KILL"
# Mini Chaosnet file server. Version 24 is MINI.
respond "*" ":midas sysbin; mini_lmio; minisr 24\r"
expect ":KILL"
respond "*" ":link device; chaos mini, sysbin; mini bin\r"
respond "*" ":midas sysbin;_sysnet;echo\r"
expect ":KILL"
respond "*" ":link device; chaos echo, sysbin; echo bin\r"

View File

@@ -168,7 +168,8 @@
- MCL, subsystem for compiling individual Macsyma files.
- METER, displays system metering information.
- MICRO, microcode assembler.
- MINIC, mini Chaosnet file server.
- MINI, mini Chaosnet file server (new).
- MINIC, mini Chaosnet file server (old).
- MLDEV/MLSLV, allows access to remote systems as devices (e.g. DB:).
- MLIFE, Mike Speciner's Conway Life.
- MODEMS, modems dragon.

372
src/lmio/minisr.24 Normal file
View File

@@ -0,0 +1,372 @@
TITLE MINI SERVER
;Server for Lisp machine miniature Chaosnet
;Contact name is MINI
;
;Protocol: (all you can do is read files)
; User to server:
; 200 ascii open, contents is file name
; 201 binary open, contents is file name
; Server to user:
; 202 win, contents is file-id (fn2 space cdate space ctime space length)
; (same as the NNFILE job)
; 203 lose, contents is error message
; 200 ascii data
; 300 binary data
; eof end of file, user can then ask for another
A=1
B=2
C=3
D=4
E=5
T=6
TT=7
P=17
CHIC=10
CHOC=11
DKIC=12
ERRC=13
DEBUG: 0
PDL: -20,,.
BLOCK 22
.INSRT SYSTEM;CHSDEF >
$$CHAOS==1
$$CONNECT==1
.INSRT MOON;XNETWK >
PKTBUF: BLOCK %CPMXW+%CPKDT
BUF1==PKTBUF
BUF1L==<%CPMXW+%CPKDT>*5
BUF2: BLOCK <BUF1L+3>/4
FN1: 0
FN2: 0
SNM: 0
DEV: 0
GO: .CLOSE 1, ;Close load channel
MOVE P,PDL
MOVEI T,TSINT
MOVEM T,42
.SUSET [.SMASK,,[%PIIOC]]
.SUSET [.SWHO1,,[166_10.+1,,66_12.]] ;2 sixbit words in who-line, space between
.SUSET [.SWHO2,,[0]]
.SUSET [.SWHO3,,[0]]
MOVEI A,CHIC
MOVEI B,0
MOVEI C,[ASCIZ/MINI/]
MOVEI D,1
PUSHJ P,NETWRK"CHALSN
JSR LOSE
.SUSET [.SSNAME,,[SIXBIT/MINI/]] ;Give peekers a clue
NXTFIL: .CALL [ SETZ ? 'PKTIOT ? MOVEI CHIC ? SETZI PKTBUF]
JSR LOSE
LDB A,[$CPKOP+PKTBUF]
CAIE A,200
CAIN A,201
JRST OPEN
JSR LOSE
OPEN: SETZM ASCMOD'
CAIE A,201
SETOM ASCMOD
LDB B,[$CPKNB+PKTBUF]
MOVE C,[440800,,%CPKDT+PKTBUF]
SETZM FN1
SETZM FN2
SETZM SNM
SETZM DEV
FNR0: MOVEI D,0
MOVE E,[440600,,D]
FNR1: SOJL B,FNR2
ILDB A,C
CAILE A,40
CAIL A,200
JRST FNR2
CAIN A,";
JRST FNR3
CAIN A,":
JRST FNR4
CAIGE A,140
SUBI A,40
TLNE E,770000
IDPB A,E
JRST FNR1
FNR2: JUMPE D,FNR2A
MOVSI A,-3
SKIPE FN1(A)
AOBJN A,.-1
MOVEM D,FN1(A)
FNR2A: JUMPL B,FNRX
JRST FNR0
FNR3: MOVEM D,SNM
JRST FNR0
FNR4: MOVEM D,DEV
JRST FNR0
;HERE ON OPEN COMMAND AFTER PARSING FILE NAME INTO FN1, FN2, SNM, DEV
FNRX: MOVSI A,'DSK
SKIPN DEV
MOVEM A,DEV
MOVSI A,(SIXBIT/>/)
SKIPN FN2
MOVEM A,FN2
MOVSI A,.UAI
SKIPN ASCMOD
MOVSI A,.UII
HRRI A,DKIC
.CALL [ SETZ ? SIXBIT/OPEN/ ? A ? DEV ? FN1 ? FN2 ? SETZ SNM ]
JRST OPENLS
;SUCCESS, RETURN FILE-ID
MOVEI A,202
DPB A,[$CPKOP+PKTBUF]
SETZM OUTCNT'
MOVE C,[440800,,%CPKDT+PKTBUF]
MOVEM C,OUTBP'
.CALL [ SETZ ? 'RFNAME ? MOVEI DKIC ? MOVEM TT ? MOVEM T ? SETZM TT] ;FN2
.LOSE %LSFIL
.SUSET [.SWHO2,,T] ;FN1
.SUSET [.SWHO3,,TT] ;FN2
;SEND THE VERSION NUMBER IN DECIMAL OR -1 IF NOT A NUMBER
;IF PARTIAL NUMBER SEND THAT
MOVEI A,0 ;SET IF ANY DIGITS OUTPUT
SNDVRS: MOVEI T,0
LSHC T,6
ADDI T,40
CAIL T,"0
CAILE T,"9
JRST SNDVR1
PUSHJ P,CHOUT
MOVEI A,1
JUMPN TT,SNDVRS
SNDVR1: JUMPN A,SNDVR2
MOVEI T,"-
PUSHJ P,CHOUT
MOVEI T,"1
PUSHJ P,CHOUT
SNDVR2: MOVEI T,40
PUSHJ P,CHOUT
.CALL [ SETZ ? 'RFDATE ? MOVEI DKIC ? SETZM A] ;DATE/TIME
MOVEI A,0
PUSH P,A
PUSHJ P,DATASC ;CREATION DATE
MOVEI T,40
PUSHJ P,CHOUT
POP P,A
PUSHJ P,TIMASC ;CREATION TIME
MOVE A,OUTCNT
DPB A,[$CPKNB+PKTBUF]
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
JSR LOSE
;NOW TRANSMIT THE FILE
SKIPE ASCMOD
JRST XMITA
XMITB: MOVE A,[444400,,%CPKDT+PKTBUF]
MOVEI B,%CPMXC/4
MOVE C,B
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
.LOSE %LSFIL
SUB C,B
JUMPE C,XMTEOF
IMULI C,4
DPB C,[$CPKNB+PKTBUF]
MOVEI A,300
DPB A,[$CPKOP+PKTBUF]
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
JSR LOSE
JUMPE B,XMITB
XMTEOF: MOVSI B,(<.BYTE 8 ? %COEOF ? 0>)
MOVEM B,PKTBUF
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
JSR LOSE
.CLOSE DKIC,
JRST NXTFIL
XMITA: MOVE A,[440700,,BUF1] ;HAVE TO DELETE ^C'S AND ^L'S AT EOF
MOVEI B,5 ;GET BUFFERED-BACK WORD
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
.LOSE %LSFIL
XMITA0: MOVE A,[440700,,BUF1+1]
MOVEI B,BUF1L-5
MOVE C,B
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI DKIC ? A ? SETZ B]
.LOSE %LSFIL
PUSH P,C
IDIVI B,5 ;ROUND TO WORD BOUNDARY
IMULI B,5
JUMPG C,[ MOVEI D,0 ;IF PARTIAL WORD TRANSFER, MAKE SURE FILLED WITH NULLS
IDPB D,A
SOJA C,. ]
POP P,C
SUB C,B
JUMPE C,XMITA9 ;NOTHING TRANSFERRED, EOF
XMITA3: MOVE A,[440700,,BUF1] ;NOW MOVE AND CONVERT BYTE-SIZE. DON'T MOVE LAST 5 CHARS
MOVE E,[440800,,BUF2]
MOVEI D,0
ZIPCO: ILDB T,A
XCT AS2LM(T) ;CONVERT CHAR CODE
IDPB T,E
ADDI D,1
XMITA2: SOJG C,ZIPCO
MOVE A,[440800,,BUF2]
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI CHOC ? A ? SETZ D]
JSR LOSE
XMITA9: JUMPL B,XMITA7 ;HERE B HAS NUMBER CHARS NOT XFERRED LAST SIOT OR -1 FLAG
MOVEI C,BUF1L-5
SUB C,B
ADDI C,4
IDIVI C,5 ;NUMBER OF VALID WORDS IN BUFFER (NOT COUNTING FIRST ONE)
MOVE D,BUF1(C) ;MOVE LAST WORD UP TO FIRST POSITION (REST HAVE BEEN XMTED)
MOVEM D,BUF1
JUMPE B,XMITA0 ;NO EOF YET
;D HAS LAST WORD IN FILE, COUNT VALID CHARS
MOVEI C,5
LSH D,-1
XMITA8: MOVE A,D
ANDI A,177
JUMPE A,.+3 ;Nulls appear from someplace
CAIE A,^C
CAIN A,^L
SOJG C,[ LSH D,-7 ? JRST XMITA8]
SETO B,
JUMPN C,XMITA3 ;GO TRANSMIT LAST WORD, SUCH AS IT IS
XMITA7: .CALL [ SETZ ? SIXBIT/FORCE/ ? SETZI CHOC]
JSR LOSE
JRST XMTEOF
TSINT: 0 ? 0
JSR LOSE
LOSE: 0
SKIPE DEBUG
.VALUE
.LOGOUT
JRST .-2
;FAILURE, RETURN ERROR MESSAGE
OPENLS: MOVEI A,203
DPB A,[$CPKOP+PKTBUF]
.CALL [ SETZ ? SIXBIT/OPEN/ ? [.UAI,,ERRC] ? [SIXBIT/ERR/] ? MOVEI 1 ? SETZI 0]
.LOSE %LSFIL
MOVE A,[440800,,%CPKDT+PKTBUF]
MOVEI B,%CPMXC
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI ERRC ? A ? SETZ B]
.LOSE %LSFIL
MOVEI B,0
IDPB B,A
OPENL1: MOVE A,[440800,,%CPKDT+PKTBUF]
OPENL2: ILDB TT,A
CAIL TT,40
AOJA B,OPENL2
DPB B,[$CPKNB+PKTBUF]
.CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI PKTBUF]
JSR LOSE
JRST NXTFIL
;DATE, TIME, NUMBER CONVERSION ROUTINES (LIFTED BODILY FROM FILE JOB)
TM%SEC== 777776 ; 2.9-1.2 0-131K seconds 0-86399.
TM%DAY== 37,,0 ; 3.5-3.1 0-31 days 1-31
TM%MON== 740,,0 ; 3.9-3.6 0-15 months 1-12
TM%YR== 177000,,0 ; 4.7-4.1 0-127 years 0-127 relative to 1900 (1900-2027)
TM$SEC==(.BP TM%SEC,) ; Define BP LH's into each field.
TM$DAY==(.BP TM%DAY,)
TM$MON==(.BP TM%MON,)
TM$YR== (.BP TM%YR,)
; DATASC - Deposit MM/DD/YY using CHOUT
; Takes time wd in A
DATASC: PUSH P,B
PUSH P,C
PUSH P,E
SKIPA E,[-3,,[ TM$MON,,A
TM$DAY,,A
TM$YR,,A ] ]
TMDT2: PUSHJ P,CHOUT
LDB B,(E) ; Get numerical value into B.
IDIVI B,10. ; Divide into 2 digits.
MOVEI T,"0(B)
PUSHJ P,CHOUT ; Output first,
MOVEI T,"0(C)
PUSHJ P,CHOUT ; and second.
MOVEI T,"/ ; Set up separator, in case looping again.
AOBJN E,TMDT2
TIMTMX: POP P,E
POP P,C
POP P,B
POPJ P,
; TIMASC - Deposit HH:MM:SS using CHOUT given a time word in A.
; Takes time wd in A.
TIMASC: PUSH P,B
PUSH P,C
PUSH P,E
HRRZ B,A ; For storage of hr, min, sec.
LSH B,-1
IDIVI B,60. ; Get secs
PUSH P,C ; save
IDIVI B,60. ; Get hr and mins
PUSH P,C ; Save mins too.
MOVSI E,-3
JRST TMTM3
TMTM2: PUSHJ P,CHOUT
POP P,B ; Get numerical value into B.
TMTM3: IDIVI B,10. ; Divide into 2 digits.
MOVEI T,"0(B)
PUSHJ P,CHOUT ; Output first,
MOVEI T,"0(C)
PUSHJ P,CHOUT ; and second.
MOVEI T,": ; Set up separator, in case looping again.
AOBJN E,TMTM2
JRST TIMTMX
;CONVERT NUMBER IN A TO DECIMAL, THROUGH CHOUT
NUMASC: IDIVI A,10.
JUMPE A,NUMAS1
PUSH P,B
PUSHJ P,NUMASC
POP P,B
NUMAS1: MOVEI T,"0(B)
PUSHJ P,CHOUT
POPJ P,
CHOUT: IDPB T,OUTBP
AOSA OUTCNT
POPJ1: AOS (P)
CPOPJ: POPJ P,
SIXOUT: SETZ T,
LSHC T,6
ADDI T,40
PUSHJ P,CHOUT
JUMPN TT,SIXOUT
POPJ P,
;ASCII TO LISP-MACHINE CODE-CONVERSION XCT TABLE
AS2LM: REPEAT 10,JFCL ;0-7
MOVEI T,210 ;BS
MOVEI T,211 ;TAB
JRST XMITA2 ;FLUSH LF'S
JFCL ;13
MOVEI T,214 ;FORM
MOVEI T,215 ;CR
REPEAT 177-16,JFCL ;16-176
.VALUE ;177 I don't know how to handle escapes
IFN .-AS2LM-200, .ERR AS2LM TABLE WRONG SIZE
END GO