Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-06-05 21:26:34 +02:00
parent d9b9f5542c
commit 4c74e6f2f2
18 changed files with 594 additions and 273 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -67,7 +67,8 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBBLKDEV .DA LIBBLKDEV
L.MSG.USAGE .DA MSG.USAGE
L.MSG.USAGE1 .DA MSG.USAGE1
L.MSG.USAGE2 .DA MSG.USAGE2
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
L.MSG.CRLF .DA MSG.CRLF
@ -130,7 +131,10 @@ CS.RUN ldy #S.PS.ARGC
>STYA BlkCnt
bra .1
.99 >PUSHW L.MSG.USAGE
.99 >PUSHW L.MSG.USAGE1
>PUSHBI 0
>SYSCALL PrintF
>PUSHW L.MSG.USAGE2
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
@ -341,10 +345,11 @@ CS.RUN.LL.DISKII
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s
bcs .9
inc CurTrack
dec Counter
beq .8
inc CurTrack
lda CurQTrack
* clc
adc Stepping
@ -363,8 +368,6 @@ CS.RUN.LL.DISKII
.8 ldx #0
jsr CS.RUN.SeekToX
jsr CS.RUN.MotorOff
>PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL PrintF
@ -373,7 +376,7 @@ CS.RUN.LL.DISKII
bit bVerify
bmi CS.RUN.LL.DISKII.V
rts
jmp CS.RUN.MotorOff
*--------------------------------------
CS.RUN.LL.DISKII.V
>PUSHW L.MSG.VERIFY
@ -598,11 +601,12 @@ CS.END
LIBBLKDEV .AZ "libblkdev"
hLIBBLKDEV .BS 1
*--------------------------------------
MSG.USAGE .AS "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n"
MSG.USAGE1 .AS "Usage : FORMAT <BLOCKDEV> [VOL.NAME]\r\n"
.AS " -L : Low-Level Format\r\n"
.AS " -H : 35trk drives, High Density: 47 tracks, 376 Blocks\r\n"
.AS " -X : 40trk drives, 320 Blocks, combined with -H = 432 Blocks\r\n"
.AS " -B xxxx : override Device block size\r\n"
.AZ " -H : 35trk drives, High Density: 47 tracks, 376 Blocks\r\n"
MSG.USAGE2 .AS " -X : 40trk drives, 320 Blocks, combined with -H, 432 Blocks\r\n"
.AS " -V : Verify\r\n"
.AS " -B xxxx : Smrtprt, Override Device block size\r\n"
.AZ " -1-9 : Catalog Size (Blocks)\r\n"
MSG.OK .AZ "[OK]"
MSG.ERR .AS "[%h]"

View File

@ -4,8 +4,5 @@ NEW
ServerName www.example.com:6580
Listen 6580
DocumentRoot ${ROOT}srv/www
# mime types
AddType html text/html
AddType png image.png
MAN
TEXT etc/httpd.conf

View File

@ -307,16 +307,14 @@ BB.Read lda BB.HdrTrk get track we're on
sta BB.CurQTrk
ldy #0
.1 ldx BB.CurQTrk
tya
beq .2
txa
.1 lda BB.CurQTrk
jsr BB.PhaseOff
.2 cpx BB.TargetQTrk
.2 ldx BB.CurQTrk
cpx BB.TargetQTrk
beq .8
bcs .3
@ -332,8 +330,8 @@ BB.Read lda BB.HdrTrk get track we're on
txa
jsr BB.PhaseOn
lda #104
jsr BB.MSWait Trash X
lda #114
jsr BB.Wait100usecA Trash X
iny
@ -343,42 +341,37 @@ BB.Read lda BB.HdrTrk get track we're on
beq seekend
lda #0 wait 25.6 ms
jsr BB.MSWait Trash X
jsr BB.Wait100usecA Trash X
lda BB.TargetQTrk
jsr BB.PhaseOff
bcs seekend CS from BB.MSWait
*--------------------------------------
BB.PhaseOff bit #1 1,3,5,7 ?
beq BB.PhaseOff.2 only half track
BB.PhaseOff.1 bit IO.D2.Ph0Off
BB.PhaseOff.2 bit IO.D2.Ph0Off
BB.PhaseOff.8 rts
BB.PhaseOff clc
.HS B0 BCS
*--------------------------------------
BB.PhaseOn bit #1 1,3,5,7 ?
beq .7
BB.PhaseOn sec
bit #1
beq .1
php
pha
inc
jsr .7
jsr .1
pla
inc
plp
.7 and #6 mask for 0,2,4,6
ora slotz Slot $n0
ora #IO.D2.Ph0On
.1 and #6 mask for 0,2,4,6
adc slotz Slot $n0
tax
bit $C000,x turn on one phase
lda BB.PhaseOff.2+1
sta BB.PhaseOff.1+1
dex
stx BB.PhaseOff.2+1
sta IO.D2.Ph0Off,x
nop
rts
*--------------------------------------
BB.MSWait sec (6) JSR (2)
BB.Wait100usecA sec (6) JSR (2)
.1 ldx #19 (2)
@ -388,7 +381,7 @@ BB.MSWait sec (6) JSR (2)
sbc #1 (2) done 'n' intervals?
bne .1 (2+) a-reg counts
BB.MSWait.RTS rts (6)
rts (6)
*--------------------------------------
BB.Trk2Qtrk asl x2
sta .1+1

View File

@ -26,28 +26,21 @@ D2Recalibrate >PULLB DrvSlt
bcs .9
stz MoveTo
lda #162
lda #252
sta MoveFrom
jsr D2MoveHead.1
lda #0
jsr D2.PhaseOn
* lda #0
* jsr D2.PhaseOn
* lda #0 wait 25.6 ms
* jsr D2.Wait100usecA
* lda #0
* jsr D2.PhaseOff
lda #0 wait 25.6 ms
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.Wait100usecA Trash X
jsr D2.Wait100usecA
clc
.9 rts
@ -58,85 +51,105 @@ D2MoveHead >PULLB MoveTo
>PULLB DrvSlt
jsr CheckDiskII
bcs .9
php
sei
jsr D2MoveHead.1
plp
clc
.9 rts
D2MoveHead.1 ldy #0
.1 ldx MoveFrom
tya
beq .2
txa
jsr D2.PhaseOff
.2 cpx MoveTo
.1 lda MoveTo
sec
sbc MoveFrom
beq .8
bcs .3
bcc .3
inx MoveFrom<MoveTo, must move in
* Current < Target, must move in
.HS B0 BCS
cmp #2
bcc .5 one QT remaining
.3 dex MoveFrom>MoveTo, must move out
lda MoveFrom 2 or more
and #$FE from QT1 or QT3
inc
inc
bra .4
stx MoveFrom
* Current > Target, must move out
txa
.3 cmp #$FF
beq .5 one QT remaining
lda MoveFrom
bit #1 from QT1 or QT3
bne .30
dec
.30 dec
.4 sta MoveFrom
jsr D2.PhaseOn
lda #0
jsr D2.Wait100usecA Trash X
iny
lda #164
jsr D2.Wait100usecA
bra .1
.5 lda MoveTo
and #6
ora Slotn0
tax
inc
inc
and #$F7
tay
lda IO.D2.Ph0On,x
lda IO.D2.Ph0On,y
phx
* lda #164
* jsr D2.Wait100usecA
lda #0 wait 25.6 ms
jsr D2.Wait100usecA
plx
lda IO.D2.Ph0Off,x
lda IO.D2.Ph0Off,y
rts
.8 tya
beq D2.PhaseOn.RTS
lda #0 wait 25.6 ms
jsr D2.Wait100usecA Trash X
jsr D2.Wait100usecA
lda MoveTo
lda IO.D2.Ph0Off,y
rts
*--------------------------------------
D2.PhaseOff clc
.HS B0 BCS
*--------------------------------------
D2.PhaseOn sec
bit #1
D2.PhaseOn and #6
ora Slotn0
tax
pha
tya
beq .1
php
pha
jsr .1
pla
inc
plp
lda IO.D2.Ph0Off,y
.1 and #6
adc Slotn0
tax
lda IO.D2.Ph0Off,x
.1 lda IO.D2.Ph0On,x
ply
D2.PhaseOn.RTS rts
*--------------------------------------
D2.Wait100usecA sec
D2.Wait100usecA sec (2)
.1 ldx #19 (2)
.2 dex (2)
bne .2 (3)
ldx Slotn0 (3)
bit IO.D2.RData,x (4) Slow down ACC boards
sbc #1
bne .1

View File

@ -11,18 +11,18 @@ NEW
.INB inc/mli.e.i
.INB inc/io.d2.i
*--------------------------------------
* 300rpm = 5rps = 200000us / 4ms = 50000 bits MAX
* 300rpm = 5rps = 200000us / 4us = 50000 bits MAX
*--------------------------------------
TRACK16.LEN .EQ 6400
*--------------------------------------
TRACK16.GAP1 .EQ 64 640 bits
TRACK16.GAP1 .EQ 80 800 bits
* 16 * (
*Address field = D5AA96 + 4x2 + DEAAEB = 14 112 bits
TRACK16.GAP2 .EQ 6 60 bits
TRACK16.GAP2 .EQ 5 60 bits
*Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits
TRACK16.GAP3 .EQ 17 170 bits
* )
* 64 + 16 * (14 + 6 + 349 + 17) = 6240 50784 bits (6348)
* 80 + 16 * (14 + 6 + 349 + 17) = 6256 49984 bits
*--------------------------------------
TRACK9.LEN .EQ 6511
*--------------------------------------

View File

@ -341,11 +341,20 @@ SKT.shutdown pha
lda (ZPPtrSKT),y
cmp #S.SOCKET.T.STREAM
beq SKT.shutdown.STREAM
*--------------------------------------
cmp #S.SOCKET.T.SEQPACKET
bne SKT.shutdown.DGRAM
pla
pha
jsr SKT.shutdown.TCP
* bcs SKT.shutdown.RTS
*--------------------------------------
SKT.shutdown.LISTEN
SKT.shutdown.RAW
SKT.shutdown.DGRAM
SKT.shutdown.SEQPACKET
.1 ldy #S.SOCKET.HQ.TAIL
lda (ZPPtrSKT),y
ldy #S.SOCKET.HQ.HEAD
@ -386,10 +395,13 @@ SKT.shutdown.SEQPACKET
.5 stz SKT.TABLE,x
>SYSCALL2 freemem
* clc
SKT.shutdown.RTS
rts
*--------------------------------------
SKT.shutdown.STREAM
pla
SKT.shutdown.TCP
jsr SKT.GetTCB
ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y
@ -411,7 +423,6 @@ SKT.shutdown.STREAM
.3 lda #S.SOCKET.TCP.S.TIMEWT
jmp SKT.StoreTCB.S
.8 clc
.9 rts
*/--------------------------------------
* # Read (STREAM)
@ -881,12 +892,8 @@ SKT.Recv clc
plp
bcc .10 not a SEQPKT socket
pha
jsr SKT.Recv.ACKSEQPKT
pla
.10 plp
.10 plp if CS, RecvFrom
bcc .9 Exit with CC and A=hFrame
pha
@ -943,12 +950,6 @@ SKT.Recv clc
plp
sec
rts
*--------------------------------------
SKT.Recv.ACKSEQPKT
* TODO : compute ACK
clc
rts
*/--------------------------------------
* # Send (RAW,DGRAM,SEQPACKET)
* # SendTo (RAW,DGRAM,SEQPACKET)
@ -1000,10 +1001,6 @@ SKT.Send.8 jsr SKT.SetFrameOutDstIP
clc Queue if fail
jmp FRM.SendIP
*--------------------------------------
SKT.Send.STREAM lda #ERR.SKT.BAD
sec
SKT.Send.9 rts
*--------------------------------------
SKT.Send.SEQPACKET
>LDYA ZPDataInLen
jsr TCP.NewFrame
@ -1013,14 +1010,11 @@ SKT.Send.SEQPACKET
jsr SKT.CopyDataInToOut
ldy #S.TCP.WINDOW
lda /K.TCP.WSIZE
sta (ZPFrameOutPtr),y
iny
lda #K.TCP.WSIZE
sta (ZPFrameOutPtr),y
jmp TCP.OUT.SEQSEND
jmp TCP.OUT.SEQSEND
*--------------------------------------
SKT.Send.STREAM lda #ERR.SKT.BAD
sec
SKT.Send.9 rts
*/--------------------------------------
* # GetSockOpt
* Set Socket Options

View File

@ -47,7 +47,7 @@ TCP.IN.JMP.LISTEN
jsr SKT.SetRemAddr
jsr SKT.NewTCB
bcs .99
bcs .9
jsr TCP.IN.ACKTheSYN
@ -61,8 +61,7 @@ TCP.IN.JMP.LISTEN
lda #S.SOCKET.TCP.S.SYNRCVD
jmp SKT.StoreTCB.S
.9 lda #ERR.SKT.OOS
.99 rts
.9 rts
*--------------------------------------
TCP.IN.JMP.SYNSENT
ldy #S.TCP.OPTIONS SYN Send, only accept SYN.ACK packet, then Send ACK
@ -195,27 +194,30 @@ TCP.IN.JMP.ESTBLSH
eor SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .9 Missed a frame.....
.51 dey
dey
dex
bpl .5
ldy #S.SOCKET.T Create a new client socket
ldy #S.SOCKET.T
lda (ZPPtrSKT),y
cmp #S.SOCKET.T.STREAM
bne .52
jsr SKT.AddDataToSktIn yes, queue data if there is room for....
bra .59
bcs .9
bra .6
.52 lda hFrameIn
jsr SKT.AddToQueueA
bcs .9
.59 lda ZPDataInLen
.6 lda ZPDataInLen
ldy ZPDataInLen+1
ldx #S.SOCKET.TCP.INSEQNUM
jsr TCP.AddAYToSktCacheAtX
.6 jsr SKT.StoreTCB update socket
jsr SKT.StoreTCB update socket
* jsr TCP.SetSocketTCPO.ACK ...and ack data
lda #S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA
@ -465,14 +467,14 @@ TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1
jsr SKT.GetDataFromSktOut
ldy #S.TCP.WINDOW
TCP.OUT.SEQSEND ldy #S.TCP.WINDOW
lda SKT.Cache+S.SOCKET.TCP.INFREE+1
sta (ZPFrameOutPtr),y
iny
lda SKT.Cache+S.SOCKET.TCP.INFREE
sta (ZPFrameOutPtr),y
TCP.OUT.SEQSEND lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH
lda #S.TCP.OPTIONS.ACK+S.TCP.OPTIONS.PSH
jsr TCP.OUT.Send
bcs TCP.OUT.Send.RTS

View File

@ -181,15 +181,12 @@ L53A4 dec XRW.RetryCnt one less chance.
dec XRW.Recalibrate can only recalibrate once.
bne hndlerr
* lda XRW.CurrentTrack
lda #0
lda XRW.CurrentTrack
pha save track
* clc
* adc #12 pretend track is 8 > curtrk
clc
adc #12 pretend track is 12 > curtrk
lda #40
ldy #64
sty XRW.RetryCnt reset retries to 64 max.
bra L53CC always.
@ -572,6 +569,9 @@ XRW.Wait100usecA
.2 dex (2)
bne .2 (3)
ldx A2L (3)
bit IO.D2.RData,x (4) Slow down ACC boards
inc montimel (6)
bne .3 (3)
@ -755,67 +755,88 @@ XRW.Seek ldx XRW.UnitIndex
ldy #0
.1 ldx XRW.CurrentQTrack
tya
beq .2
txa
jsr XRW.PhaseOff
.2 cpx XRW.TargetQTrack
.2 lda XRW.TargetQTrack
sec
sbc XRW.CurrentQTrack
beq .8
bcs .3
bcc .3
inx CC, CurrentQTrack>TargetQTrack, must move in
* Current < Target, must move in
cmp #2
bcc .5 one QT remaining
.HS B0 BCS
lda XRW.CurrentQTrack
and #$FE from QT1 or QT3
inc
inc
bra .4
* Current > Target, must move out
.3 cmp #$FF
beq .5 one QT remaining
.3 dex CS, CurrentQTrack<TargetQTrack, must move out
lda XRW.CurrentQTrack
bit #1 from QT1 or QT3
bne .30
dec
.30 dec
stx XRW.CurrentQTrack
txa
.4 sta XRW.CurrentQTrack
jsr XRW.PhaseOn
lda #30
jsr XRW.Wait100usecA Trash X
lda #164
jsr XRW.Wait100usecA
bra .2
iny
.5 lda XRW.TargetQTrack
and #6
ora A2L
tax
inc
inc
and #$F7
tay
lda IO.D2.Ph0On,x
lda IO.D2.Ph0On,y
phx
* lda #164
* jsr XRW.Wait100usecA
bra .1
lda #0 wait 25.6 ms
jsr XRW.Wait100usecA
plx
lda IO.D2.Ph0Off,x
lda IO.D2.Ph0Off,y
rts
.8 tya
beq XRW.PhaseOn.RTS
lda #0 wait 25.6 ms
jsr XRW.Wait100usecA Trash X
jsr XRW.Wait100usecA
lda XRW.TargetQTrack
lda IO.D2.Ph0Off,y
rts
*--------------------------------------
* A = QTrack
*--------------------------------------
XRW.PhaseOff clc
.HS B0 BCS
*--------------------------------------
XRW.PhaseOn sec
bit #1
XRW.PhaseOn and #6
ora A2L
tax
pha
tya
beq .1
php
pha
jsr .1
pla
inc
plp
lda IO.D2.Ph0Off,y
.1 and #6
adc A2L
tax
lda IO.D2.Ph0Off,x
.1 lda IO.D2.Ph0On,x
ply
XRW.PhaseOn.RTS rts
*--------------------------------------
XRW.Trk2Qtrk asl x2

View File

@ -8,6 +8,7 @@ NEW
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/eth.i
.INB inc/libtcpip.i
.INB inc/net.http.i
@ -19,10 +20,10 @@ CONN.MAX .EQ 16
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPSktPtr .BS 2
hFile .BS 1
hStr .BS 1
ZPStrPtr .BS 2
hSrvSocket .BS 1
TimeOut .BS 1
@ -34,12 +35,11 @@ ZPRootDirPtr .BS 2
hClntSocket .BS 1
hRequest .BS 1
ZPRequestPtr .BS 2
ZPnRequestLen .BS 2
ZPLinePtr .BS 2
hReply .BS 1
ZPReplyPtr .BS 2
ZPRepPtr .BS 2
ZS.END .ED
*--------------------------------------
@ -65,11 +65,10 @@ CS.START cld
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.ETCHTTPDCONF .DA ETCHTTPDCONF
L.KEYWORDS .DA KEYWORDS
J.KEYWORDS .DA CS.RUN.CONF.SERVERNAME
L.KEYWORDS.CONF .DA KEYWORDS.CONF
J.KEYWORDS.CONF .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
@ -77,7 +76,18 @@ L.MSG.INITCONF .DA MSG.INITCONF
L.MSG.INITOK .DA MSG.INITOK
L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.INCOMING .DA MSG.INCOMING
L.HTTP.200OK .DA HTTP.200OK
L.KEYWORDS.REQ .DA KEYWORDS.REQ
J.KEYWORDS.REQ .DA CS.RUN.REQ.GET
L.INDEX.HTML .DA INDEX.HTML
L.MIME.TYPES .DA MIME.TYPES
T.MIME .DA MIME.HTML
.DA MIME.TXT
.DA MIME.ICO
.DA MIME.PNG
.DA MIME.JPG
L.MIME.DEFAULT .DA MIME.DEFAULT
L.HTTP.200 .DA HTTP.200
L.HTTP.404 .DA HTTP.404
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
@ -140,7 +150,7 @@ CS.RUN.INIT ldx #3
>SYSCALL GetMem
bcs CS.RUN.RTS
>STYA ZPStrPtr
>STYA ZPLinePtr
stx hStr
>PUSHW L.MSG.INITCONF
@ -197,7 +207,7 @@ CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
sta hFile
.1 >PUSHWI 256
>PUSHW ZPStrPtr
>PUSHW ZPLinePtr
lda hFile
>SYSCALL fgets
bcs .8
@ -205,11 +215,11 @@ CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
tya
beq .1
lda (ZPStrPtr)
lda (ZPLinePtr)
cmp #'#'
beq .1
>LDYA L.KEYWORDS
>LDYA L.KEYWORDS.CONF
>STYA ZPPtr1
ldx #0
@ -217,7 +227,7 @@ CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
.2 ldy #0
.3 lda (ZPPtr1),y
cmp (ZPStrPtr),y
cmp (ZPLinePtr),y
bne .4
iny
@ -263,14 +273,14 @@ CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
*--------------------------------------
CS.RUN.CONF.JMP tya
clc
adc ZPStrPtr
adc ZPLinePtr
sta ZPPtr1
tay
lda #0
adc ZPStrPtr+1
adc ZPLinePtr+1
sta ZPPtr1+1
jmp (J.KEYWORDS,x)
jmp (J.KEYWORDS.CONF,x)
CS.RUN.CONF.SERVERNAME
>SYSCALL StrDup
@ -297,9 +307,6 @@ CS.RUN.CONF.DOCUMENTROOT
stx hRootdir
.9 rts
CS.RUN.CONF.ADDTYPE
clc
rts
*--------------------------------------
CS.RUN.SERVER lda hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.accept
@ -325,10 +332,15 @@ CS.RUN.SERVER lda hSrvSocket
>SYSCALL PrintF
jsr CS.RUN.CLIENT
.8 clc
.9 rts
*--------------------------------------
CS.RUN.CLIENT
CS.RUN.CLIENT >STZ.G REQ.KeepAlive
>STA.G REQ.FullPath
>STA.G REQ.hFile
>STA.G REQ.hBuf
.1 >SLEEP
lda hClntSocket
@ -337,9 +349,78 @@ CS.RUN.CLIENT
tay
beq .1
bra .8
jmp .80
.2 sta hRequest
.2 jsr CS.RUN.REQ.GetFrame
.3 jsr CS.RUN.REQ.GetLine
bcs .4
>LDYA ZPLinePtr
>STYA ZPPtr2
>LDYA L.KEYWORDS.REQ
jsr CS.RUN.GET.KW
bcs .3
jsr CS.RUN.REQ.JMP
bcc .3
bcs .9
.4 >LDA.G REQ.FullPath
beq .9
>LDYAI 1024
>SYSCALL GetMem
bcs .9
>STYA ZPRepPtr
txa
>STA.G REQ.hBuf
jsr CS.RUN.OpenFile
bcs .9
jsr CS.RUN.GetMime
bcs .9
jsr CS.RUN.SendFile
bcc .5
.9 >PUSHWI HTTP.404.len
>PUSHW L.HTTP.404
lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs .80
* >STZ.G REQ.KeepAlive
.5 >LDA.G REQ.hFile
beq .6
>SYSCALL FClose
.6 >LDA.G REQ.hBuf
beq .7
>SYSCALL freemem
.7 >LDA.G REQ.hFrame
beq .8
>SYSCALL FreeMem
.8 >LDA.G REQ.KeepAlive
beq .80
jmp CS.RUN.CLIENT
.80 lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.99 rts
*--------------------------------------
CS.RUN.REQ.GetFrame
>STA.G REQ.hFrame
>SYSCALL GetMemPtr
>STYA ZPRequestPtr
@ -361,34 +442,12 @@ CS.RUN.CLIENT
clc
adc #S.TCP
sta ZPRequestPtr
bcc .3
bcc .8
inc ZPRequestPtr+1
.3 jsr CS.RUN.REQUEST.GetStr
bcs .7
>LDYA ZPStrPtr
>SYSCALL puts
bra .3
* jsr CS.RUN.REPLY.INIT
* lda hReply
* >SYSCALL FreeMem
.7 >PUSHWI HTTP.200OK.len
>PUSHW L.HTTP.200OK
lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
.8 lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
clc
rts
.8 rts
*--------------------------------------
CS.RUN.REQUEST.GetStr
CS.RUN.REQ.GetLine
ldy #0
.1 inc ZPnRequestLen
@ -417,19 +476,213 @@ CS.RUN.REQUEST.GetStr
.31 eor #C.LF
bne .9
sta (ZPStrPtr),y Y,A = StrLen
sta (ZPLinePtr),y Y,A = StrLen
clc
rts
.4 sta (ZPStrPtr),y
.4 sta (ZPLinePtr),y
iny
bra .1
.9 sec
rts
*--------------------------------------
CS.RUN.REPLY.INIT
CS.RUN.OpenFile >LEA.G REQ.FullPath
>SYSCALL puts
>PUSHEA.G REQ.FullPath
>PUSHBI O.RDONLY
>PUSHBI 0 type
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
txa
>STA.G REQ.hFile
>PUSHA
>PUSHEA.G REQ.Stat
>SYSCALL FStat
.9 rts
*--------------------------------------
CS.RUN.GetMime >LEA.G REQ.FullPath
>STYA ZPPtr2
ldx #$ff
ldy #$ff
.1 iny
lda (ZPPtr2),y
beq .2
cmp #'.'
bne .1
tya
tax
bra .1
.2 txa
bpl .3
lda #MIME.DEFAULT.ID
bra .8
.3 sec
adc ZPPtr2
sta ZPPtr2
bcc .4
inc ZPPtr2+1
.4 >LDYA L.MIME.TYPES
jsr CS.RUN.GET.KW
txa
.8 >STA.G REQ.MimeType
clc
rts
*--------------------------------------
CS.RUN.SendFile >PUSHW ZPRepPtr
>PUSHW L.HTTP.200
>LDA.G REQ.MimeType
tax
>PUSHW T.MIME,x
>PUSHL.G REQ.Stat+S.STAT.SIZE
>PUSHBI 6
>SYSCALL SPrintf
bcs .9
jsr CS.RUN.SendBuf Y,A = car count
.1 >PUSHWI 1024
>PUSHW ZPRepPtr
>LDA.G REQ.hFile
>SYSCALL fread
bcs .8
jsr CS.RUN.SendBuf
bcc .1
rts
.8 cmp #MLI.E.EOF
bne .9
clc
.9 rts
*--------------------------------------
CS.RUN.SendBuf >PUSHYA
>PUSHW ZPRepPtr
lda hClntSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
rts
*--------------------------------------
CS.RUN.REQ.JMP jmp (J.KEYWORDS.REQ,x)
*--------------------------------------
CS.RUN.REQ.GET ldy #0
.1 iny
lda (ZPPtr2),y
eor #C.SPACE
bne .1
sta (ZPPtr2),y
lda (ZPPtr2)
cmp #'/'
bne .4
>PUSHW ZPRootDirPtr
>LEA.G REQ.FullPath
>SYSCALL StrCpy
ldy #1
lda (ZPPtr2),y
bne .2
>LDYA L.INDEX.HTML
bra .3
.2 >LDYA ZPPtr2
.3 >PUSHYA
>LEA.G REQ.FullPath
>SYSCALL StrCat
rts
.4 >PUSHW ZPPtr2
>PUSHEA.G REQ.FullPath
>SYSCALL realpath
.9 rts
*--------------------------------------
CS.RUN.REQ.Connection
lda (ZPPtr2)
eor #'k'
beq .1
lda #$ff
.1 >STA.G REQ.KeepAlive
clc
rts
*--------------------------------------
CS.RUN.GET.KW >STYA ZPPtr1
ldx #0
.2 ldy #$ff
.3 iny
lda (ZPPtr1),y
cmp (ZPPtr2),y
bne .4
cmp #0
beq .33
cmp #C.SPACE
bne .3
.33 tya
sec
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr2+1
.8 clc
rts
.4 inx
inx
ldy #0
.5 iny
lda (ZPPtr1),y
bne .5
tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .6
inc ZPPtr1+1
.6 lda (ZPPtr1)
bne .2
sec
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
@ -467,10 +720,9 @@ hLIBTCPIP .BS 1
LIBTCPIP .AZ "libtcpip"
ETCHTTPDCONF .AZ "${BOOT}etc/httpd.conf"
*--------------------------------------
KEYWORDS .AS "ServerName "
KEYWORDS.CONF .AS "ServerName "
.AS "Listen "
.AS "DocumentRoot "
.AS "AddType "
.DA #0
*--------------------------------------
MSG.TCPWAIT .AZ "HTTPD:Waiting for TCP/IP initializing..."
@ -480,20 +732,53 @@ 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"
KEYWORDS.REQ .AS "GET "
.AS "Connection: "
.DA #0
*--------------------------------------
INDEX.HTML .AS "/index." html
*--------------------------------------
MIME.TYPES .AZ "html"
.AZ "txt"
.AZ "ttf"
.AZ "ico"
.AZ "png"
.AZ "jpg"
.DA #0
MIME.HTML .AZ "text/html"
MIME.TXT .AZ "text/plain"
MIME.TTF .AZ "font/truetype"
MIME.ICO .AZ "image/vnd.microsoft.icon" "image/x-icon"
MIME.PNG .AZ "image/png"
MIME.JPG .AZ "image/jpeg"
MIME.DEFAULT .AZ "application/octet-stream"
MIME.DEFAULT.ID .EQ 12
*--------------------------------------
HTTP.200 .AS "HTTP/1.1 200 OK"
.DA #C.CR,#C.LF
.AS "Server: A2osX-HTTPD 0.94"
.DA #C.CR,#C.LF
.AS "Content-Type: %s"
.DA #C.CR,#C.LF
.AS "Content-Length: %u"
.DA #C.CR,#C.LF
.DA #C.CR,#C.LF
.DA #0
*--------------------------------------
HTTP.404 .AS "HTTP/1.1 404 Not Found"
.DA #C.CR,#C.LF
.AS "Server: A2osX-HTTPD 0.94"
.DA #C.CR,#C.LF
.AS "Content-Type: text/html"
.DA #C.CR,#C.LF
.AS "Content-Length: 34"
.AS "Content-Length: 47"
.DA #C.CR,#C.LF
.AS "Connection: Close"
.DA #C.CR,#C.LF
.DA #C.CR,#C.LF
.AS "<HTML><BODY>Hello From A2osX-HTTPD 0.94 !</BODY></HTML>"
.AS "<HTML><BODY><B>404:NOT FOUND<B></BODY></HTML>"
.DA #C.CR,#C.LF
HTTP.200OK.len .EQ *-HTTP.200OK
HTTP.404.len .EQ *-HTTP.404
*--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
@ -503,6 +788,13 @@ SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.DUMMY
.OR 0
DS.START
REQ.FullPath .BS MLI.MAXPATH+1
REQ.Stat .BS S.STAT
REQ.hFrame .BS 1
REQ.hFile .BS 1
REQ.hBuf .BS 1
REQ.MimeType .BS 1
REQ.KeepAlive .BS 1
DS.END
.ED
*--------------------------------------

BIN
SRV/WWW/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,7 +1,5 @@
<!--
NEW
AUTO 3,1
-->
<html>
<head>
<title>A2osx Welcome</title>
@ -19,7 +17,5 @@ Composed with care by:
<br>&copy;2020 and beyond
</body>
</html>
<!--
MAN
TEXT srv/www/index.html
-->
TEXT srv/www/hello.html

View File

@ -2,23 +2,16 @@ NEW
AUTO 3,1
<html>
<head>
<title>Title of the document</title>
<style>
@font-face { font-family: ScanLines; src: url('scanlines.ttf') format('truetype'); }
h1 {
font-family: ScanLines;
color: #00ff00;
}
p {
font-family: ScanLines;
color: #00ff00;
}
</style>
</head>
<title>A2osX HTTPD Demo</title>
<link rel="stylesheet" href="style.css" />
</head>
<body bgcolor="black">
<h1>This is a heading</h1>
<body>
<h1>A2osX HTTPD Demo</h1>
<img src="A2osX.logo.png">
<p>This is a paragraph.</p>
<a href="hello.html">Hello</a>
<a href="main.html">Main</a>
</body>
</html>

View File

@ -1,7 +1,5 @@
<!--
NEW
AUTO 3,1
-->
<html>
<head>
<title>A2osx HTTPD Server Tests</title>
@ -25,7 +23,5 @@ resizes.</i>
<br>&copy;2020 and beyond
</body>
</html>
<!--
MAN
TEXT srv/www/main.html
-->

20
SRV/WWW/style.css Normal file
View File

@ -0,0 +1,20 @@
NEW
AUTO 3,1
@font-face {
font-family: "ScanLines";
src: url('scanlines.ttf') format('truetype');
}
body {
font-family: "ScanLines";
background-color: black;
}
h1 {
font-family: "ScanLines";
color: #00ff00;
}
p {
font-family: "ScanLines";
color: #00ff00;
}
MAN
TEXT srv/www/style.css

View File

@ -53,8 +53,8 @@ K.StrCat sec
* Y,A = destination
*\--------------------------------------
K.StrCpy clc
pha
phy
pha
jsr SHARED.SPtr1PPtr2
bcc .2