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:
2
Makefile
2
Makefile
@@ -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 \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
372
src/lmio/minisr.24
Normal 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
|
||||
Reference in New Issue
Block a user