Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-05-30 22:38:47 +02:00
parent e0690b5de4
commit b09ff87947
8 changed files with 335 additions and 221 deletions

Binary file not shown.

Binary file not shown.

11
ETC/HTTPD.CONF.txt Normal file
View File

@ -0,0 +1,11 @@
NEW
AUTO 3,1
# HTTPD configuration file
ServerName www.example.com:6580
Listen 6580
DocumentRoot ${ROOT}/srv/www
# HTTPD mime types
AddType html text/html
AddType png image.png
MAN
TEXT etc/httpd.conf

View File

@ -26,7 +26,7 @@ D2Recalibrate >PULLB DrvSlt
bcs .9
stz MoveTo
lda #252
lda #162
sta MoveFrom
jsr D2MoveHead.1
@ -35,19 +35,20 @@ D2Recalibrate >PULLB DrvSlt
jsr D2.PhaseOn
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
jsr D2.Wait100usecA Trash X
* lda #0
jsr D2.Wait100usecA Trash X
* lda #0
jsr D2.Wait100usecA Trash X
* lda #0
jsr D2.Wait100usecA Trash X
* lda #0
jsr D2.PhaseOff
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
jsr D2.PhaseOn.2
jsr D2.Wait100usecA Trash X
clc
.9 rts
*/--------------------------------------
@ -92,69 +93,49 @@ D2MoveHead.1 ldy #0
jsr D2.PhaseOn
lda #104
jsr D2.Wait100msA Trash X
lda #0
jsr D2.Wait100usecA Trash X
iny
bra .1
.8 tya
beq D2.PhaseOff.8
beq D2.PhaseOn.RTS
lda #0 wait 25.6 ms
jsr D2.Wait100msA Trash X
jsr D2.Wait100usecA Trash X
lda MoveTo
*--------------------------------------
D2.PhaseOff bit #1 1,3,5,7 ?
beq D2.PhaseOff.2 only half track
D2.PhaseOff.1 bit IO.D2.Ph0Off SELF MODIFIED
D2.PhaseOff.2 bit IO.D2.Ph0Off SELF MODIFIED
D2.PhaseOff.8 rts
D2.PhaseOff clc
.HS B0 BCS
*--------------------------------------
D2.PhaseOn bit #1 1,3,5,7 ?
bne .1 only half track
D2.PhaseOn sec
bit #1
beq .1
jsr .7
bra D2.PhaseOn.2
.1 pha
jsr .7
php
pha
jsr .1
pla
inc
jsr .7
bra D2.PhaseOn.1
.7 and #6 mask for 0,2,4,6
ora Slotn0 Slot $n0
ora #IO.D2.Ph0On
plp
.1 and #6
adc Slotn0
tax
lda D2.PhaseOn.2+1
sta D2.PhaseOn.1+1
stx D2.PhaseOn.2+1
lda D2.PhaseOff.2+1
sta D2.PhaseOff.1+1
dex
stx D2.PhaseOff.2+1
rts
lda IO.D2.Ph0Off,x
D2.PhaseOn.RTS rts
*--------------------------------------
D2.PhaseOn.1 bit IO.D2.Ph0On SELF MODIFIED
D2.PhaseOn.2 bit IO.D2.Ph0On SELF MODIFIED
rts
*--------------------------------------
D2.Wait100msA sec
D2.Wait100usecA sec
.1 ldx #19
.1 ldx #19 (2)
.2 dex
bne .2
.2 dex (2)
bne .2 (3)
sbc #1
bne .1

View File

@ -24,10 +24,6 @@ SKT.Socket.RAW ldy #S.SOCKET
SKT.Socket.DGRAM
lda #S.IP.PROTOCOL.UDP
ldy #S.SOCKET
bra SKT.Socket.DSOCK
SKT.Socket.SEQPACKET
lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP
SKT.Socket.DSOCK
stx FD.DSOCK+S.SOCKET.T save type
sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP
@ -60,6 +56,8 @@ SKT.Socket.DSOCK
txa
clc
.9 rts
SKT.Socket.SEQPACKET
SKT.Socket.STREAM
lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP
@ -1317,13 +1315,17 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM
ldy #S.SOCKET.T
lda (ZPPtrSKT),y
cmp #S.SOCKET.T.STREAM
cmp #S.SOCKET.T.SEQPACKET
bcc .8
tax
>LDYAI K.TCP.WSIZE
>STYA SKT.Cache+S.SOCKET.TCP.INFREE
>STYA SKT.Cache+S.SOCKET.TCP.OUTFREE
cpx #S.SOCKET.T.STREAM
bcc .8
.DO AUXPIPE=1
>SYSCALL2 NewStkObj
.ELSE
@ -1335,6 +1337,9 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM
ldy #S.SOCKET.SQ.hInMem
sta (ZPPtrSKT),y
>LDYAI K.TCP.WSIZE
>STYA SKT.Cache+S.SOCKET.TCP.OUTFREE
.DO AUXPIPE=1
>SYSCALL2 NewStkObj
.ELSE

View File

@ -50,12 +50,17 @@ TCP.IN.JMP.LISTEN
bcs .99
jsr TCP.IN.ACKTheSYN
lda #S.SOCKET.TCP.S.OPENED
jsr SKT.StoreTCB.S
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK
bcs .9
lda #S.SOCKET.TCP.S.SYNRCVD
jmp SKT.StoreTCB.S
.9 lda #ERR.SKT.OOS
.99 rts
*--------------------------------------

View File

@ -35,17 +35,17 @@ L59A6 lda XRW.LastUnitUsed
jsr XRW.CheckMotorOnX check if previous drive running.
beq L59BD branch if stopped.
jsr XRW.Wait100ms
jsr XRW.Wait100usec
lda montimeh
bne L59A6
L59BD ldx A2L
bit IO.D2.Ph0Off,x make sure all motor phases are off
bit IO.D2.Ph3Off,x
bit IO.D2.Ph2Off,x
bit IO.D2.Ph1Off,x
lda IO.D2.Ph0Off,x make sure all motor phases are off
lda IO.D2.Ph1Off,x
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
lda IO.D2.ReadMode,x turn off write enable X = slot $S0
nop
@ -127,7 +127,7 @@ L5362 lda IO.D2.DrvSel1,x
ldy #7
lda #0 150 ms delay before stepping.
.1 jsr XRW.Wait100msA
.1 jsr XRW.Wait100usecA
dey
bne .1
@ -146,7 +146,7 @@ L537C plp was motor on ?
* motor was off, wait for it to speed up
L537F jsr XRW.Wait100ms wait 100us for each count in montime
L537F jsr XRW.Wait100usec wait 100us for each count in montime
lda montimeh
bmi L537F count up to 0000
@ -181,12 +181,15 @@ L53A4 dec XRW.RetryCnt one less chance.
dec XRW.Recalibrate can only recalibrate once.
bne hndlerr
lda XRW.CurrentTrack
* lda XRW.CurrentTrack
lda #0
pha save track
clc
adc #8 pretend track is 8 > curtrk
* clc
* adc #12 pretend track is 8 > curtrk
lda #40
ldy #64
sty XRW.RetryCnt reset retries to 64 max.
bra L53CC always.
@ -559,9 +562,10 @@ wnibl sta IO.D2.WLoad,x (5) nibl write
* montimel, montimeh are incremented once per 100 usec interval
* for motor on timing.
*--------------------------------------
XRW.Wait100ms lda #1
XRW.Wait100usec lda #1
XRW.Wait100msA sec (2)
XRW.Wait100usecA
sec (2)
.1 ldx #17 (2)
@ -773,66 +777,46 @@ XRW.Seek ldx XRW.UnitIndex
stx XRW.CurrentQTrack
txa
jsr XRW.PhaseOn
lda #104
jsr XRW.Wait100msA Trash X
lda #30
jsr XRW.Wait100usecA Trash X
iny
bra .1
.8 tya
beq XRW.PhaseOff.RTS
beq XRW.PhaseOn.RTS
lda #0 wait 25.6 ms
jsr XRW.Wait100msA Trash X
jsr XRW.Wait100usecA Trash X
lda XRW.TargetQTrack
*--------------------------------------
XRW.PhaseOff bit #1 1,3,5,7 ?
beq XRW.PhaseOff.2 only half track
XRW.PhaseOff.1 bit IO.D2.Ph0Off SELF MODIFIED
XRW.PhaseOff.2 bit IO.D2.Ph0Off SELF MODIFIED
XRW.PhaseOff.RTS
rts
* A = QTrack
*--------------------------------------
XRW.PhaseOn bit #1 1,3,5,7 ?
bne .1 only half track
XRW.PhaseOff clc
.HS B0 BCS
*--------------------------------------
XRW.PhaseOn sec
bit #1
beq .1
jsr .7
bra XRW.PhaseOn.2
.1 pha
jsr .7
php
pha
jsr .1
pla
inc
jsr .7
bra XRW.PhaseOn.1
.7 and #6 mask for 0,2,4,6
ora A2L Slot $n0
ora #IO.D2.Ph0On
plp
.1 and #6
adc A2L
tax
lda XRW.PhaseOn.2+1
sta XRW.PhaseOn.1+1
stx XRW.PhaseOn.2+1
lda IO.D2.Ph0Off,x
lda XRW.PhaseOff.2+1
sta XRW.PhaseOff.1+1
dex
stx XRW.PhaseOff.2+1
rts
*--------------------------------------
XRW.PhaseOn.1 bit IO.D2.Ph0On SELF MODIFIED
XRW.PhaseOn.2 bit IO.D2.Ph0On SELF MODIFIED
rts
XRW.PhaseOn.RTS rts
*--------------------------------------
XRW.Trk2Qtrk asl x2
sta .1+1

View File

@ -5,11 +5,12 @@ NEW
.OR $2000
.TF sbin/httpd
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB INC/NET.HTTP.I
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/eth.i
.INB inc/libtcpip.i
.INB inc/net.http.i
*--------------------------------------
TIMEOUT.MAX .EQ 30 30 sec.
CONN.MAX .EQ 16
@ -17,24 +18,29 @@ CONN.MAX .EQ 16
.DUMMY
.OR ZPBIN
ZS.START
ZPIPCfgPtr .BS 2
ZPPtr1 .BS 2
ZPSktPtr .BS 2
ZPMsgPtr .BS 2
ZPMsgDataPtr .BS 2
ZPMsgDataLen .BS 2
ZPMsgDataCnt .BS 2
ArgIndex .BS 1
hRootdir .BS 1
ZPRootDirPtr .BS 2
hFile .BS 1
hStr .BS 1
ZPStrPtr .BS 2
hSrvSocket .BS 1
hClntSocket .BS 1
hMsg .BS 1
hStr .BS 1
TimeOut .BS 1
hSrvName .BS 1
ZPSrvNamePtr .BS 2
hRootdir .BS 1
ZPRootDirPtr .BS 2
hClntSocket .BS 1
hRequest .BS 1
ZPRequestPtr .BS 2
ZPnRequestLen .BS 2
hReply .BS 1
ZPReplyPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -58,9 +64,16 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.ETCHTTPDCONF .DA ETCHTTPDCONF
L.KEYWORDS .DA KEYWORDS
J.KEYWORDS .DA CS.RUN.CONF.SERVERNAME
.DA CS.RUN.CONF.LISTEN
.DA CS.RUN.CONF.DOCUMENTROOT
.DA CS.RUN.CONF.ADDTYPE
L.SA.Local .DA SA.Local
L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.INITCONF .DA MSG.INITCONF
L.MSG.INITOK .DA MSG.INITOK
L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.INCOMING .DA MSG.INCOMING
@ -84,8 +97,8 @@ CS.RUN >LDYA L.MSG.TCPWAIT
>LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
bcs .99
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
>STYA ZPPtr1
lda (ZPPtr1) Configured ?
bmi CS.RUN.INIT
lda Timeout
@ -101,7 +114,7 @@ CS.RUN >LDYA L.MSG.TCPWAIT
>SYSCALL GetChar
bcs CS.RUN.RTS
cmp #$03
cmp #3 Ctrl-C
bne .1
sec
@ -117,35 +130,30 @@ CS.RUN.RTS rts
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
.1 lda (ZPPtr1),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
lda #1
sta ArgIndex
>SYSCALL ArgV
bcs CS.RUN.SYN
>SYSCALL atoi
bcs .2
>STYA SA.LOCAL+S.SOCKADDR.PORT
inc ArgIndex
.2 lda ArgIndex
>SYSCALL ArgV
bcs CS.RUN.SYN
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
>LDYAI 256
>SYSCALL GetMem
bcs CS.RUN.RTS
>STYA ZPRootDirPtr
CS.RUN.ARGSOK >PUSHBI 0 no protocol
>STYA ZPStrPtr
stx hStr
>PUSHW L.MSG.INITCONF
>PUSHW L.ETCHTTPDCONF
>PUSHBI 2
>SYSCALL PrintF
bcs CS.RUN.RTS
jsr CS.RUN.CONF
bcs CS.RUN.RTS
>PUSHBI 0 no protocol
lda #S.SOCKET.T.SEQPACKET
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs CS.RUN.RTS
@ -161,13 +169,6 @@ CS.RUN.ARGSOK >PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Listen
bcs CS.RUN.ERR
>LDYAI 256
>SYSCALL GetMem
bcs CS.RUN.ERR
>STYA ZPStrPtr
stx hStr
>PUSHW L.MSG.INITOK
>PUSHW SA.LOCAL+S.SOCKADDR.PORT
>PUSHW ZPRootDirPtr
@ -186,6 +187,120 @@ CS.RUN.LOOP >SLEEP
sec
CS.RUN.ERR rts
*--------------------------------------
CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
>PUSHBI O.RDONLY+O.TEXT
>PUSHBI S.FI.T.TXT
>PUSHWZ
>SYSCALL FOpen
bcs .99
sta hFile
.1 >PUSHWI 256
>PUSHW ZPStrPtr
lda hFile
>SYSCALL fgets
bcs .8
tya
beq .1
lda (ZPStrPtr)
cmp #'#'
beq .1
>LDYA L.KEYWORDS
>STYA ZPPtr1
ldx #0
.2 ldy #0
.3 lda (ZPPtr1),y
cmp (ZPStrPtr),y
bne .4
iny
cmp #C.SPACE
bne .3
jsr CS.RUN.CONF.JMP
bcc .1
bra .97
.4 inx
inx
ldy #0
.5 iny
lda (ZPPtr1),y
cmp #C.SPACE
bne .5
tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .6
inc ZPPtr1+1
.6 lda (ZPPtr1)
bne .2
.97 lda #E.SYN
.98 pha
jsr .8
pla
sec
.99 rts
.8 lda hFile
>SYSCALL FClose
rts
*--------------------------------------
CS.RUN.CONF.JMP tya
clc
adc ZPStrPtr
sta ZPPtr1
tay
lda #0
adc ZPStrPtr+1
sta ZPPtr1+1
jmp (J.KEYWORDS,x)
CS.RUN.CONF.SERVERNAME
>SYSCALL StrDup
bcs .9
>STYA ZPSrvNamePtr
stx hSrvName
.9 rts
CS.RUN.CONF.LISTEN
>SYSCALL atoi
bcs .9
>STYA SA.LOCAL+S.SOCKADDR.PORT
.9 rts
CS.RUN.CONF.DOCUMENTROOT
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .9
>STYA ZPRootDirPtr
stx hRootdir
.9 rts
CS.RUN.CONF.ADDTYPE
clc
rts
*--------------------------------------
CS.RUN.SERVER lda hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.accept
bcs .8
@ -216,6 +331,7 @@ CS.RUN.SERVER lda hSrvSocket
CS.RUN.CLIENT
.1 >SLEEP
lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .2
@ -223,21 +339,43 @@ CS.RUN.CLIENT
beq .1
bra .8
.2 jsr CS.RUN.MSG.INIT
.2 sta hRequest
>SYSCALL GetMemPtr
>STYA ZPRequestPtr
ldy #S.IP.TOTAL.LENGTH+1
lda (ZPRequestPtr),y
sec
sbc #S.TCP-S.IP
eor #$ff
sta ZPnRequestLen
dey
lda (ZPRequestPtr),y
sbc /S.TCP-S.IP
eor #$ff
sta ZPnRequestLen+1
lda ZPRequestPtr
clc
adc #S.TCP
sta ZPRequestPtr
bcc .3
inc ZPRequestPtr+1
.3 jsr CS.RUN.MSG.GetStr
.3 jsr CS.RUN.REQUEST.GetStr
bcs .7
>PUSHYA
>PUSHW ZPStrPtr
ldy #S.PS.hStdOut
lda (pPS),y
>SYSCALL fwrite
>LDYA ZPStrPtr
>SYSCALL puts
bra .3
lda hMsg
>SYSCALL FreeMem
* jsr CS.RUN.REPLY.INIT
* lda hReply
* >SYSCALL FreeMem
.7 >PUSHWI HTTP.200OK.len
>PUSHW L.HTTP.200OK
@ -250,61 +388,31 @@ CS.RUN.CLIENT
clc
rts
*--------------------------------------
CS.RUN.MSG.INIT sta hMsg
>SYSCALL GetMemptr
>STYA ZPMsgPtr
pha
tya
* clc
adc #S.TCP
sta ZPMsgDataPtr
pla
adc /S.TCP
sta ZPMsgDataPtr+1
ldy #S.IP.TOTAL.LENGTH+1
lda (ZPMsgPtr),y
sec
sbc #S.IP
sta ZPMsgDataLen
eor #$ff
sta ZPMsgDataCnt
dey
lda (ZPMsgPtr),y
sbc /S.IP
sta ZPMsgDataLen+1
eor #$ff
sta ZPMsgDataCnt+1
rts
*--------------------------------------
CS.RUN.MSG.GetStr
CS.RUN.REQUEST.GetStr
ldy #0
.1 inc ZPMsgDataCnt
.1 inc ZPnRequestLen
bne .2
inc ZPMsgDataCnt+1
inc ZPnRequestLen+1
beq .9
.2 lda (ZPMsgDataPtr)
inc ZPMsgDataPtr
.2 lda (ZPRequestPtr)
inc ZPRequestPtr
bne .21
inc ZPMsgDataPtr+1
inc ZPRequestPtr+1
.21 cmp #C.CR
bne .4
inc ZPMsgDataCnt
inc ZPnRequestLen
bne .3
inc ZPMsgDataCnt+1
inc ZPnRequestLen+1
beq .9
.3 lda (ZPMsgDataPtr)
inc ZPMsgDataPtr
.3 lda (ZPRequestPtr)
inc ZPRequestPtr
bne .31
inc ZPMsgDataPtr+1
inc ZPRequestPtr+1
.31 eor #C.LF
bne .9
@ -320,6 +428,10 @@ CS.RUN.MSG.GetStr
.9 sec
rts
*--------------------------------------
CS.RUN.REPLY.INIT
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
lda TimeOut
@ -330,11 +442,18 @@ CS.DOEVENT lda (pEvent)
rts
*--------------------------------------
CS.QUIT lda hSrvSocket
beq .3
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.3 lda hLIBTCPIP
.1 lda hStr
beq .2
>SYSCALL FreeMem
.2
lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
@ -346,15 +465,24 @@ CS.END
*--------------------------------------
hLIBTCPIP .BS 1
LIBTCPIP .AZ "libtcpip"
ETCHTTPDCONF .AZ "${BOOT}etc/httpd.conf"
*--------------------------------------
KEYWORDS .AS "ServerName "
.AS "Listen "
.AS "DocumentRoot "
.AS "AddType "
.DA #0
*--------------------------------------
MSG.TCPWAIT .AZ "HTTPD:Waiting for TCP/IP initializing..."
MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly."
MSG.INITCONF .AZ "HTTPD:Reading %s file...\r\n"
MSG.INITOK .AZ "HTTPD:Listening on port %D, root dir: %s.\r\n"
MSG.SKTERR .AZ "HTTPD:Listen Error."
MSG.INCOMING .AZ "HTTPD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n"
*--------------------------------------
HTTP.200OK .AS "HTTP/1.1 200 OK"
.DA #C.CR,#C.LF
.AS "Server: A2osX-HTTPD 0.93"
.AS "Server: A2osX-HTTPD 0.94"
.DA #C.CR,#C.LF
.AS "Content-Type: text/html"
.DA #C.CR,#C.LF
@ -363,7 +491,7 @@ HTTP.200OK .AS "HTTP/1.1 200 OK"
.AS "Connection: Close"
.DA #C.CR,#C.LF
.DA #C.CR,#C.LF
.AS "<HTML><BODY>Hello From A2osX-HTTPD 0.93 !</BODY></HTML>"
.AS "<HTML><BODY>Hello From A2osX-HTTPD 0.94 !</BODY></HTML>"
.DA #C.CR,#C.LF
HTTP.200OK.len .EQ *-HTTP.200OK
*--------------------------------------
@ -379,5 +507,5 @@ DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/HTTPD.S
SAVE usr/src/sbin/httpd.s
ASM