Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-06-07 10:06:51 +02:00
parent d34a1cbf52
commit 5bba299976
21 changed files with 383 additions and 325 deletions

View File

@ -85,7 +85,7 @@ X = hDev
`int getdevstatus(short int DevID, S.DIB *dstat);` `int getdevstatus(short int DevID, S.DIB *dstat);`
## ASM ## ASM
`PUSHB DevID` `>PUSHB DevID`
`>PUSHW S.DIB` `>PUSHW S.DIB`
`>SYSCALL GetDevStatus` `>SYSCALL GetDevStatus`
@ -100,7 +100,7 @@ Create a hDEV
## ASM ## ASM
`>PUSHW fd` `>PUSHW fd`
`>PUSHW devname` `>PUSHW devname`
`>SYSCALL mkdev `>SYSCALL mkdev`
## RETURN VALUE ## RETURN VALUE
A = hDEV A = hDEV
@ -108,7 +108,7 @@ Create a hDEV
# IOCTL # IOCTL
## C ## C
`int ioctl(short int DevID, int request, void * param );` `int ioctl(short int DevID, short int request, void *param);`
## ASM ## ASM
`>PUSHB hDEV` `>PUSHB hDEV`
@ -125,7 +125,7 @@ Create a hDEV
`int hDIR opendir (const char * dirpath);` `int hDIR opendir (const char * dirpath);`
## ASM ## ASM
`>PUSHW dirpath` `>LDYA dirpath`
`>SYSCALL opendir` `>SYSCALL opendir`
## RETURN VALUE ## RETURN VALUE
@ -171,7 +171,6 @@ Change or add an environment variable
`int setenv(const char *name, const char *value);` `int setenv(const char *name, const char *value);`
## ASM ## ASM
**In:**
`>PUSHW name` `>PUSHW name`
`>PUSHW value` `>PUSHW value`
`>SYSCALL setenv` `>SYSCALL setenv`
@ -186,7 +185,6 @@ and returns a pointer to the corresponding value string.
`char *getenv(const char *name, char *value);` `char *getenv(const char *name, char *value);`
## ASM ## ASM
**In:**
`>PUSHW name` `>PUSHW name`
`>PUSHW value` `>PUSHW value`
`>SYSCALL getenv` `>SYSCALL getenv`
@ -215,7 +213,6 @@ Remove an environment variable
`int unsetenv(const char *name);` `int unsetenv(const char *name);`
## ASM ## ASM
**In:**
`>PUSHW name` `>PUSHW name`
`>SYSCALL unsetenv` `>SYSCALL unsetenv`
@ -550,29 +547,6 @@ CS : not found
## RETURN VALUE ## RETURN VALUE
# GetPWName
## C
`int getpwname(const char* name, S.PW *passwd);`
## ASM
`>PUSHW name`
`>PUSHW passwd`
`>SYSCALL getpwname`
## RETURN VALUE
# PutPW
## C
`int putpw( S.PW* passwd );`
## ASM
`>PUSHW passwd`
`>SYSCALL putpw`
## RETURN VALUE
# GetGRGID # GetGRGID
## C ## C
@ -585,6 +559,18 @@ CS : not found
## RETURN VALUE ## RETURN VALUE
# GetPWName
## C
`int getpwname(const char* name, S.PW *passwd);`
## ASM
`>PUSHW name`
`>PUSHW passwd`
`>SYSCALL getpwname`
## RETURN VALUE
# GetGRName # GetGRName
## C ## C
@ -597,6 +583,17 @@ CS : not found
## RETURN VALUE ## RETURN VALUE
# PutPW
## C
`int putpw( S.PW* passwd );`
## ASM
`>PUSHW passwd`
`>SYSCALL putpw`
## RETURN VALUE
# PutGR # PutGR
## C ## C
@ -608,6 +605,29 @@ CS : not found
## RETURN VALUE ## RETURN VALUE
# OpenSession
## C
`short int hSID opensession(const char *name, const char *passwd);`
## ASM
`>PUSHW name`
`>PUSHW passwd`
`>SYSCALL OpenSession`
## RETURN VALUE
# CloseSession
## C
`int closesession(short int hSID);`
## ASM
`>PUSHB hSID`
`>SYSCALL CloseSession`
## RETURN VALUE
# SListGetData # SListGetData
## ASM ## ASM
@ -649,7 +669,7 @@ CS : not found
## ASM ## ASM
`>PUSHB hSList` `>PUSHB hSList`
`>PUSHW KeyID` `>PUSHW KeyID`
`>PUSHW DataPtr` `>PUSHW KeyPtr`
`>SYSCALL SListGetByID` `>SYSCALL SListGetByID`
## RETURN VALUE ## RETURN VALUE
@ -700,7 +720,6 @@ Change The type of a ProDOS File
`int chtyp(const char *filepath, short int filetype);` `int chtyp(const char *filepath, short int filetype);`
## ASM ## ASM
**In:**
`>PUSHW filepath` `>PUSHW filepath`
`>PUSHB filetype` `>PUSHB filetype`
`>SYSCALL chtyp` `>SYSCALL chtyp`
@ -714,7 +733,6 @@ Return information about a file
`int stat(const char *pathname, struct stat *statbuf);` `int stat(const char *pathname, struct stat *statbuf);`
## ASM ## ASM
**In:**
`>PUSHW pathname` `>PUSHW pathname`
`>PUSHW statbuf` `>PUSHW statbuf`
`>SYSCALL stat` `>SYSCALL stat`
@ -728,7 +746,6 @@ create a directory
`int mkdir(const char *pathname, int mode);` `int mkdir(const char *pathname, int mode);`
## ASM ## ASM
**In:**
`>PUSHW pathname` `>PUSHW pathname`
`>PUSHW mode` `>PUSHW mode`
`>SYSCALL mkdir` `>SYSCALL mkdir`
@ -742,17 +759,16 @@ A = EC
return a pathname to a new FIFO return a pathname to a new FIFO
## C ## C
`int mkfifo( char *pathname, int mode );` `hFILE mkfifo(const char *pathname, int mode);`
## ASM ## ASM
**In:** `>PUSHW pathname`
`>PUSHW mode` `>PUSHW mode`
`>LDYA pathname`
`>SYSCALL mkfifo` `>SYSCALL mkfifo`
## RETURN VALUE ## RETURN VALUE
CC = OK, CS = ERROR CC = OK, CS = ERROR
A = hFD A = hFILE
# MkNod # MkNod
Create a special or ordinary file. Create a special or ordinary file.
@ -762,10 +778,9 @@ Create a special or ordinary file.
`hFILE mknod(const char *pathname, int mode, hFD fd);` `hFILE mknod(const char *pathname, int mode, hFD fd);`
## ASM ## ASM
**In:** `>PUSHW pathname`
`>PUSHB fd`
`>PUSHW mode` `>PUSHW mode`
`>LDYA pathname` `>PUSHB fd`
`>SYSCALL mknod` `>SYSCALL mknod`
## RETURN VALUE ## RETURN VALUE
@ -789,7 +804,7 @@ A = hFD
Print A (char) to StdOut Print A (char) to StdOut
## C ## C
`int putchar ( int character );` `int putchar ( short int character );`
## ASM ## ASM
**In:** **In:**
@ -803,7 +818,7 @@ CC = success
Print A (char) to hFILE Print A (char) to hFILE
## C ## C
`int fputc ( hFILE stream , int character );` `int fputc ( hFILE stream , short int character );`
## ASM ## ASM
**In:** **In:**
@ -823,7 +838,7 @@ Write Str to StdOut, appends '\r\n'
## ASM ## ASM
`>LDYAI str` `>LDYAI str`
`>SYSCALL puts` `>SYSCALL PutS`
## RETURN VALUE ## RETURN VALUE
CC = success CC = success
@ -933,7 +948,7 @@ int fclose ( hFILE stream );
## ASM ## ASM
**In:** **In:**
`lda stream` `lda stream`
`>SYSCALL fclose` `>SYSCALL FClose`
## RETURN VALUE ## RETURN VALUE
@ -1031,7 +1046,7 @@ int remove(const char *pathname);
## ASM ## ASM
**In:** **In:**
`>PUSHW pathname` `>LDYA pathname`
`>SYSCALL remove` `>SYSCALL remove`
## RETURN VALUE ## RETURN VALUE
@ -1069,7 +1084,7 @@ PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes)
`>PUSHW i` `>PUSHW i`
`...` `...`
`>PUSHBI 2` #bytecount `>PUSHBI 2` #bytecount
`>SYSCALL printf` `>SYSCALL PrintF`
FPrintF : FPrintF :
`>PUSHB hFILE` `>PUSHB hFILE`
`>PUSHW format` `>PUSHW format`
@ -1172,7 +1187,7 @@ TODO : %10s
## RETURN VALUE ## RETURN VALUE
A = Number of arguments filled. A = Number of arguments filled.
# strtof # StrToF
Convert String to 40 bits Float Convert String to 40 bits Float
## C ## C
@ -1180,9 +1195,9 @@ Convert String to 40 bits Float
## ASM ## ASM
**In:** **In:**
`>PUSHW str`
`>PUSHWI EndPtr` `>PUSHWI EndPtr`
`>LDYA str` `>SYSCALL StrToF`
`>SYSCALL strtof`
## RETURN VALUE ## RETURN VALUE
On stack (float) On stack (float)
@ -1213,7 +1228,7 @@ Convert String to 32 bits (unsigned) int
`>PUSHW str` `>PUSHW str`
`>PUSHW EndPtr` `>PUSHW EndPtr`
`>PUSHB Base` `>PUSHB Base`
`>SYSCALL strtol` `>SYSCALL StrToL`
## RETURN VALUE ## RETURN VALUE
On stack (long) On stack (long)
@ -1385,15 +1400,6 @@ CS : no match
CC, Y,A=0 CC, Y,A=0
CS, Y,A > 0 or < 0 CS, Y,A > 0 or < 0
# StrVShift
## ASM
`>PUSHB hSTRV`
`>PUSHB index`
`>SYSCALL StrVShift`
## RETURN VALUE
# StrVGet # StrVGet
## ASM ## ASM
@ -1406,6 +1412,15 @@ CS : no match
CC: Y,A = Ptr CC: Y,A = Ptr
CS: Y,A = NULL CS: Y,A = NULL
# StrVShift
## ASM
`>PUSHB hSTRV`
`>PUSHB index`
`>SYSCALL StrVShift`
## RETURN VALUE
# StrVAdd # StrVAdd
## ASM ## ASM
@ -1486,20 +1501,6 @@ Convert S.TIME struct to CSTR
## RETURN VALUE ## RETURN VALUE
# ChOwn
## C
`short int chown(const char *pathname, short int owner, short int group);`
## ASM
**In:**
`>PUSHW pathname`
`>PUSHB owner`
`>PUSHB group`
`>SYSCALL chown`
## RETURN VALUE
# open # open
## C ## C
@ -1557,6 +1558,20 @@ CS: A = EC
CC: Y,A = bytes written CC: Y,A = bytes written
CS: A = EC CS: A = EC
# ChOwn
## C
`short int chown(const char *pathname, short int owner, short int group);`
## ASM
**In:**
`>PUSHW pathname`
`>PUSHB owner`
`>PUSHB group`
`>SYSCALL chown`
## RETURN VALUE
## License ## License
A2osX is licensed under the GNU General Public License. A2osX is licensed under the GNU General Public License.

View File

@ -3,6 +3,29 @@
## Copyright ## Copyright
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors. Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
# D2TrkWrite16s
Write a track (16 sectors)
**In:**
PUSHB = DSSS0000
PUSHB = TrackNum * 4 : 0->136+
PUSHW = Ptr to 16*256 buffer
## RETURN VALUE
CC : success
CS : A = Error
A=0, currently starting/seeking...
# D2TrkWriteNIB
Write a track (NIBBLE)
**In:**
PUSHB = DSSS0000
PUSHW = Ptr to NIBBLE buffer (0 ended)
## RETURN VALUE
CC : success
CS : A = Error
A=0, currently starting/seeking...
# GetProDOSCatSize # GetProDOSCatSize
Compute space needed for ProDOS Catalog Compute space needed for ProDOS Catalog
@ -35,30 +58,6 @@ int getprodoscatsize (short int options, short int catsize, int devsize );
7 for Disk II(280blk),3.5(1600),3.5HD(2880) 7 for Disk II(280blk),3.5(1600),3.5HD(2880)
22 for 32mb Hardisk... 22 for 32mb Hardisk...
# D2TrkW16s
Write a track (16 sectors)
**In:**
PUSHW = Ptr to 16*256 buffer
PUSHB = TrackNum * 4 : 0->140+
PUSHB = DSSS0000
## RETURN VALUE
CC : success
CS : A = Error
A=0, currently starting/seeking...
# D2TrkWNIB
Write a track (NIBBLE)
**In:**
PUSHW = Ptr to NIBBLE buffer (0 ended)
PUSHB = TrackNum * 4 : 0->140+
PUSHB = DSSS0000
## RETURN VALUE
CC : success
CS : A = Error
A=0, currently starting/seeking...
## License ## License
A2osX is licensed under the GNU General Public License. A2osX is licensed under the GNU General Public License.

View File

@ -182,9 +182,9 @@ CS: A = EC
CC: Y,A = bytes written CC: Y,A = bytes written
CS: A = EC CS: A = EC
# Recv (RAW,DGRAM,SEQPACKET) # Recv (RAW,DGRAM,SEQPKT)
# RecvFrom (RAW,DGRAM,SEQPACKET) # RecvFrom (RAW,DGRAM,SEQPKT)
## C ## C
`hMem recv(hFD fd);` `hMem recv(hFD fd);`
@ -200,9 +200,9 @@ CS: A = EC
CC: A = hMem CC: A = hMem
CS: A = EC CS: A = EC
# Send (RAW,DGRAM,SEQPACKET) # Send (RAW,DGRAM,SEQPKT)
# SendTo (RAW,DGRAM,SEQPACKET) # SendTo (RAW,DGRAM,SEQPKT)
## C ## C
`int skt.send(hFD fd, const void *buf, int count);` `int skt.send(hFD fd, const void *buf, int count);`

Binary file not shown.

Binary file not shown.

View File

@ -127,7 +127,7 @@ S.SOCKET.AF .EQ S.FD.DSOCK+0
S.SOCKET.T .EQ S.FD.DSOCK+1 S.SOCKET.T .EQ S.FD.DSOCK+1
S.SOCKET.T.RAW .EQ 0 S.FD.T.DSOCK,ICMP... S.SOCKET.T.RAW .EQ 0 S.FD.T.DSOCK,ICMP...
S.SOCKET.T.DGRAM .EQ 2 S.FD.T.DSOCK,UDP S.SOCKET.T.DGRAM .EQ 2 S.FD.T.DSOCK,UDP
S.SOCKET.T.SEQPACKET .EQ 4 S.FD.T.DSOCK,TCP S.SOCKET.T.SEQPKT .EQ 4 S.FD.T.DSOCK,TCP
S.SOCKET.T.STREAM .EQ 6 S.FD.T.SSOCK,TCP S.SOCKET.T.STREAM .EQ 6 S.FD.T.SSOCK,TCP
S.SOCKET.PROTO .EQ S.FD.DSOCK+2 S.SOCKET.PROTO .EQ S.FD.DSOCK+2
@ -295,6 +295,6 @@ S.DNS.QTYPE.ANY .EQ 255
S.DNS.QCLASS.IN .EQ 1 S.DNS.QCLASS.IN .EQ 1
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE INC/LIBTCPIP.I SAVE inc/libtcpip.i
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -27,8 +27,8 @@ sector .EQ $3d
BB.RetryCnt .EQ $40 BB.RetryCnt .EQ $40
BB.TargetTrk .EQ $41 BB.TargetTrk .EQ $41
BB.CurQTrk .EQ $50 BB.CurrentQTrack .EQ $50
BB.TargetQTrk .EQ $51 BB.TargetQTrack .EQ $51
BB.HdrPtr .EQ $52 BB.HdrPtr .EQ $52
@ -49,10 +49,10 @@ kernel .EQ $2000
.PH $800 .PH $800
xboot .DA #1 xboot .DA #1
sec apple iii enters xboot 'ora $38' sec apple iii enters xboot 'ora $38'
bcs BB.AppleII branch if not apple iii native mode * bcs BB.AppleII branch if not apple iii native mode
bcc *
*-------------------------------------- *--------------------------------------
BB.AppleIII bcc * *BB.AppleIII lda #$9f make apple iii boot using block 1
* lda #$9f make apple iii boot using block 1
* pha the return address is $a000 * pha the return address is $a000
* lda #$ff * lda #$ff
* pha * pha
@ -161,11 +161,12 @@ rddir jsr goread call read block routine.
lda sosid is it a prodos (sos) directory? lda sosid is it a prodos (sos) directory?
ora sosid+1 ora sosid+1
bterr1 bne booterr branch if not. bterr1 bne booterr branch if not.
*--------------------------------------
lda #4 begin look-up with first entry past header. lda #4 begin look-up with first entry past header.
bne nxdent1 branch always * bne nxdent1 branch always
.HS 2C BIT ABS
nxdent lda idxl nxdent lda idxl
nxdent1 clc nxdent1 clc
adc entlen bump to next directory entry. adc entlen bump to next directory entry.
tay save in y for now. tay save in y for now.
@ -181,7 +182,7 @@ nxdent1 clc
ldy #4 else, begin at block beginning. ldy #4 else, begin at block beginning.
nxdent2 sty idxl note: this method treats garbage at nxdent2 sty idxl
ldy #0 ldy #0
@ -194,9 +195,9 @@ lookpro lda (idxl),y look for matching name.
bne lookpro bne lookpro
ldy #$10 get file type & index block addr. ldy #$10 get file type & index block addr.
lda (idxl),y * lda (idxl),y
cmp #S.FI.T.SYS is it a system file? * cmp #S.FI.T.SYS is it a system file?
bne booterr * bne booterr
iny iny
lda (idxl),y lda (idxl),y
@ -231,7 +232,8 @@ bterr2 bcs booterr
jmp kernel go execute kernel code. jmp kernel go execute kernel code.
*-------------------------------------- *--------------------------------------
booterr jsr clrscrn clear video booterr
* jsr clrscrn clear video
* ldy #BB.MSG.ERR.Len-1 * ldy #BB.MSG.ERR.Len-1
*.1 lda BB.MSG.ERR,y *.1 lda BB.MSG.ERR,y
@ -255,7 +257,7 @@ endcode ldx slotz
clc clc
rts rts
jmp BB.Read jmp BB.Seek
*-------------------------------------- *--------------------------------------
*BB.MSG.ERR .AS -"ERR" *BB.MSG.ERR .AS -"ERR"
*BB.MSG.ERR.Len .EQ *-BB.MSG.ERR *BB.MSG.ERR.Len .EQ *-BB.MSG.ERR
@ -280,106 +282,123 @@ d2io lda blok figure out track & sector.
lsr lsr
sta BB.TargetTrk sta BB.TargetTrk
jsr BB.Trk2Qtrk
sta BB.TargetQTrk
lda buff+1 lda buff+1
sta dbuf+1 sta dbuf+1
ldx slotz ldx slotz
lda IO.D2.DrvOn,x lda IO.D2.DrvOn,x
jsr BB.Read go read sector. jsr BB.Seek go read sector.
inc dbuf+1 bump address inc dbuf+1 bump address
inc sector inc sector
inc sector and sector # inc sector and sector #
bcs quitrd branch if error. bcs quitrd branch if error.
jsr BB.Read jsr BB.Seek
quitrd ldy IO.D2.DrvOff,x quitrd ldy IO.D2.DrvOff,x
rts return error status in carry. rts return error status in carry.
*-------------------------------------- *--------------------------------------
BB.Read lda BB.HdrTrk get track we're on BB.Seek lda BB.HdrTrk get track we're on
jsr BB.Trk2Qtrk jsr BB.Trk2Qtrk
sta BB.CurrentQTrack
sta BB.CurQTrk lda BB.TargetTrk
jsr BB.Trk2Qtrk
sta BB.TargetQTrack
ldy #0 ldy #0
beq .2 .1 lda BB.TargetQTrack
sec
.1 lda BB.CurQTrk sbc BB.CurrentQTrack
jsr BB.PhaseOff
.2 ldx BB.CurQTrk
cpx BB.TargetQTrk
beq .8 beq .8
bcs .3 bcc .2
inx * Current < Target, must move in
.HS B0 BCS cmp #2
bcc .6 one QT remaining
.3 dex lda BB.CurrentQTrack
and #$FE from QT1 or QT3
inc
inc
bra .4
stx BB.CurQTrk * Current > Target, must move out
txa .2 cmp #$FF
jsr BB.PhaseOn beq .6 one QT remaining
lda #114 lda BB.CurrentQTrack
jsr BB.Wait100usecA Trash X bit #1 from QT1 or QT3
bne .3
iny dec
.3 dec
bcs .1 CS from BB.MSWait .4 sta BB.CurrentQTrack
and #6
ora slotz
tax
pha
tya
beq .5
lda IO.D2.Ph0Off,y
.5 lda IO.D2.Ph0On,x
ply
lda #164
jsr BB.Wait100usecA
bra .1
* Last QTrack
.6 lda BB.TargetQTrack
and #6
ora slotz
tax
inc
inc
and #$F7
tay
lda IO.D2.Ph0On,x
lda IO.D2.Ph0On,y
.7 phx
jsr BB.Wait25600usec
plx
lda IO.D2.Ph0Off,x
lda IO.D2.Ph0Off,y
bra BB.Read
.8 tya .8 tya
beq seekend beq BB.Read
lda #0 wait 25.6 ms
jsr BB.Wait100usecA Trash X
lda BB.TargetQTrk
jsr BB.PhaseOff
bcs seekend CS from BB.MSWait
*--------------------------------------
BB.PhaseOff clc
.HS B0 BCS
*--------------------------------------
BB.PhaseOn sec
bit #1
beq .1
php
pha
jsr .1
pla
inc
plp
.1 and #6 mask for 0,2,4,6
adc slotz Slot $n0
tax tax
sta IO.D2.Ph0Off,x bra .7
nop
rts
*-------------------------------------- *--------------------------------------
BB.Wait25600usec
lda #0
BB.Wait100usecA sec (6) JSR (2) BB.Wait100usecA sec (6) JSR (2)
.1 ldx #19 (2) .1 ldx #18 (2)
.2 dex (2) delay 86 usec. .2 dex (2) delay 86 usec.
bne .2 (2+) 2 + 5x16 + 2 + 2 bne .2 (2+) 2 + 5x16 + 2 + 2
sbc #1 (2) done 'n' intervals? * ldx slotz (3)
bne .1 (2+) a-reg counts * bit IO.D2.RData,x (4) Slow down ACC boards
sbc #1 (2)
bne .1 (2+)
rts (6) rts (6)
*-------------------------------------- *--------------------------------------
@ -394,7 +413,7 @@ BB.Trk2Qtrk asl x2
.1 adc #$ff SELF MODIFIED .1 adc #$ff SELF MODIFIED
BB.Trk2Qtrk.RTS rts BB.Trk2Qtrk.RTS rts
*-------------------------------------- *--------------------------------------
seekend ldx slotz BB.Read ldx slotz
ldy #$7f allow 127 mistakes. ldy #$7f allow 127 mistakes.
sty BB.RetryCnt sty BB.RetryCnt
@ -541,7 +560,7 @@ zzzend ldx slotz
rts rts
chg5 .EQ *-chg5a chg5 .EQ *-chg5a
goseek jmp BB.Read goseek jmp BB.Seek
.ED .ED
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON

View File

@ -142,7 +142,7 @@ D2.PhaseOn.RTS rts
*-------------------------------------- *--------------------------------------
D2.Wait100usecA sec (2) D2.Wait100usecA sec (2)
.1 ldx #19 (2) .1 ldx #18 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
@ -150,8 +150,8 @@ D2.Wait100usecA sec (2)
ldx Slotn0 (3) ldx Slotn0 (3)
bit IO.D2.RData,x (4) Slow down ACC boards bit IO.D2.RData,x (4) Slow down ACC boards
sbc #1 sbc #1 (2)
bne .1 bne .1 (3)
rts rts
*/-------------------------------------- */--------------------------------------

View File

@ -364,6 +364,6 @@ ARP.Send >STYA IOCTL+S.IOCTL.BUFPTR
jmp FRM.Send.IOCTL jmp FRM.Send.IOCTL
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.ARP SAVE usr/src/lib/libtcpip.s.arp
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -105,6 +105,6 @@ CFG.GET >LDYA L.IPCFG
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.CFG SAVE usr/src/lib/libtcpip.s.cfg
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -506,6 +506,6 @@ DNS.NextCache lda ZPCachePtr
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.DNS SAVE usr/src/lib/libtcpip.s.dns
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -347,6 +347,6 @@ FRM.DiscardIn lda hFrameIn
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.FRM SAVE usr/src/lib/libtcpip.s.frm
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -37,6 +37,6 @@ HST.GetByAddr >PULLW ZPPtrIP TODO
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.HST SAVE usr/src/lib/libtcpip.s.hst
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -73,6 +73,6 @@ ICMP.IN.ECHOREP jsr FRM.GetTargetSKT.RAW
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.ICMP SAVE usr/src/lib/libtcpip.s.icmp
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -222,6 +222,6 @@ IP.SetDestMAC ldy #S.IP.DST
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.IP SAVE usr/src/lib/libtcpip.s.ip
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -57,7 +57,7 @@ SKT.Socket.DSOCK
clc clc
.9 rts .9 rts
SKT.Socket.SEQPACKET SKT.Socket.SEQPKT
SKT.Socket.STREAM SKT.Socket.STREAM
lda #S.IP.PROTOCOL.TCP lda #S.IP.PROTOCOL.TCP
ldy #S.SOCKET.TCP ldy #S.SOCKET.TCP
@ -198,7 +198,7 @@ SKT.connect.DGRAM
jmp SKT.SetRemAddr jmp SKT.SetRemAddr
SKT.connect.STREAM SKT.connect.STREAM
SKT.connect.SEQPACKET SKT.connect.SEQPKT
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
beq .1 beq .1
@ -251,7 +251,7 @@ SKT.listen >SYSCALL2 GetMemPtr
ldy #S.SOCKET.T ldy #S.SOCKET.T
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.T.SEQPACKET cmp #S.SOCKET.T.SEQPKT
bcc SKT.listen.9 bcc SKT.listen.9
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
@ -342,7 +342,7 @@ SKT.shutdown pha
cmp #S.SOCKET.T.STREAM cmp #S.SOCKET.T.STREAM
beq SKT.shutdown.STREAM beq SKT.shutdown.STREAM
*-------------------------------------- *--------------------------------------
cmp #S.SOCKET.T.SEQPACKET cmp #S.SOCKET.T.SEQPKT
bne SKT.shutdown.DGRAM bne SKT.shutdown.DGRAM
pla pla
@ -355,6 +355,7 @@ SKT.shutdown pha
SKT.shutdown.LISTEN SKT.shutdown.LISTEN
SKT.shutdown.RAW SKT.shutdown.RAW
SKT.shutdown.DGRAM SKT.shutdown.DGRAM
SKT.shutdown.SEQPKT
.1 ldy #S.SOCKET.HQ.TAIL .1 ldy #S.SOCKET.HQ.TAIL
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
ldy #S.SOCKET.HQ.HEAD ldy #S.SOCKET.HQ.HEAD
@ -836,8 +837,8 @@ SKT.GetDataFromSktOut
clc clc
rts rts
*/-------------------------------------- */--------------------------------------
* # Recv (RAW,DGRAM,SEQPACKET) * # Recv (RAW,DGRAM,SEQPKT)
* # RecvFrom (RAW,DGRAM,SEQPACKET) * # RecvFrom (RAW,DGRAM,SEQPKT)
* ## C * ## C
* `hMem recv(hFD fd);` * `hMem recv(hFD fd);`
* `hMem recvfrom(hFD fd, struct sockaddr *addr);` * `hMem recvfrom(hFD fd, struct sockaddr *addr);`
@ -855,6 +856,7 @@ SKT.RecvFrom pha
pla pla
sec sec
.HS 90 BCC .HS 90 BCC
SKT.Recv clc SKT.Recv clc
php php
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
@ -865,9 +867,6 @@ SKT.Recv clc
cmp #S.SOCKET.T.STREAM cmp #S.SOCKET.T.STREAM
beq .99 beq .99
cmp #S.SOCKET.T.SEQPACKET
php CS is SEQ
ldy #S.SOCKET.HQ.TAIL ldy #S.SOCKET.HQ.TAIL
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
tax tax
@ -890,10 +889,7 @@ SKT.Recv clc
tay tay
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
plp plp if CS, RecvFrom
bcc .10 not a SEQPKT socket
.10 plp if CS, RecvFrom
bcc .9 Exit with CC and A=hFrame bcc .9 Exit with CC and A=hFrame
pha pha
@ -940,19 +936,18 @@ SKT.Recv clc
clc clc
.9 rts .9 rts
.99 lda #ERR.SKT.BAD .99 plp
plp lda #ERR.SKT.BAD
sec sec
rts rts
.90 lda #0 no data .90 plp
plp lda #0 no data
plp
sec sec
rts rts
*/-------------------------------------- */--------------------------------------
* # Send (RAW,DGRAM,SEQPACKET) * # Send (RAW,DGRAM,SEQPKT)
* # SendTo (RAW,DGRAM,SEQPACKET) * # SendTo (RAW,DGRAM,SEQPKT)
* ## C * ## C
* `int skt.send(hFD fd, const void *buf, int count);` * `int skt.send(hFD fd, const void *buf, int count);`
* `int skt.sendto(hFD fd, const void *buf, int count, const struct sockaddr *addr);` * `int skt.sendto(hFD fd, const void *buf, int count, const struct sockaddr *addr);`
@ -1001,7 +996,7 @@ SKT.Send.8 jsr SKT.SetFrameOutDstIP
clc Queue if fail clc Queue if fail
jmp FRM.SendIP jmp FRM.SendIP
*-------------------------------------- *--------------------------------------
SKT.Send.SEQPACKET SKT.Send.SEQPKT
>LDYA ZPDataInLen >LDYA ZPDataInLen
jsr TCP.NewFrame jsr TCP.NewFrame
bcs SKT.Send.9 bcs SKT.Send.9
@ -1309,7 +1304,7 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM
ldy #S.SOCKET.T ldy #S.SOCKET.T
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.T.SEQPACKET cmp #S.SOCKET.T.SEQPKT
bcc .8 bcc .8
tax tax
@ -1481,6 +1476,6 @@ SKT.SetupZPCode ldy #ZP.CODE.Len-1
.FIN .FIN
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.SKT SAVE usr/src/lib/libtcpip.s.skt
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -378,6 +378,7 @@ TCP.SENDCLOSE ldx #0
.1 phx .1 phx
lda SKT.TABLE,x lda SKT.TABLE,x
beq .8 beq .8
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPPtrSKT >STYA ZPPtrSKT
@ -385,21 +386,32 @@ TCP.SENDCLOSE ldx #0
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #AF.INET cmp #AF.INET
bne .8 bne .8
iny #S.SOCKET.T iny #S.SOCKET.T
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.T.SEQPACKET cmp #S.SOCKET.T.SEQPKT
bcc .8 bcc .8
tax
ldy #S.SOCKET.TCP.S ldy #S.SOCKET.TCP.S
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.TIMEWT cmp #S.SOCKET.TCP.S.TIMEWT
beq .4 beq .4
cmp #S.SOCKET.TCP.S.ESTBLSH cmp #S.SOCKET.TCP.S.ESTBLSH
bne .2 bne .2
cpx #S.SOCKET.T.SEQPKT
beq .8
jsr SKT.GetTCB jsr SKT.GetTCB
jsr TCP.OUT jsr TCP.OUT
bra .8 bra .8
.2 cmp #S.SOCKET.TCP.S.OPENED .2 cmp #S.SOCKET.TCP.S.OPENED
bne .8 bne .8
jsr SKT.GetTCB jsr SKT.GetTCB
lda #S.TCP.OPTIONS.SYN lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN jsr TCP.OUT.SendOptA Send SYN
@ -412,34 +424,41 @@ TCP.SENDCLOSE ldx #0
lda #S.TCP.OPTIONS.SYN lda #S.TCP.OPTIONS.SYN
jsr TCP.OUT.SendOptA Send SYN jsr TCP.OUT.SendOptA Send SYN
bra .8 bra .8
.4 ldy #S.SOCKET.SQ.hInMem *--------------------------------------
lda (ZPPtrSKT),y .4 cpx #S.SOCKET.T.SEQPKT
beq .5 bne .5
.DO AUXPIPE=1
>SYSCALL2 FreeStkObj
.ELSE
>SYSCALL2 freemem
.FIN
.5 ldy #S.SOCKET.SQ.hOutMem
lda (ZPPtrSKT),y
beq .6
.DO AUXPIPE=1 jsr SKT.shutdown.SEQPKT
>SYSCALL2 FreeStkObj bra .8
.ELSE
>SYSCALL2 freemem .5 ldy #S.SOCKET.SQ.hInMem
.FIN jsr TCP.SENDCLOSE.PIPE
.6 plx
ldy #S.SOCKET.SQ.hOutMem
jsr TCP.SENDCLOSE.PIPE
plx
phx phx
lda SKT.TABLE,x lda SKT.TABLE,x
stz SKT.TABLE,x stz SKT.TABLE,x
>SYSCALL2 freemem >SYSCALL2 freemem
.8 plx .8 plx
inx inx
cpx #K.SKTTABLE.SIZE cpx #K.SKTTABLE.SIZE
bne .1 bne .1
.9 rts rts
TCP.SENDCLOSE.PIPE
lda (ZPPtrSKT),y
beq .8
.DO AUXPIPE=1
>SYSCALL2 FreeStkObj
.ELSE
>SYSCALL2 freemem
.FIN
.8 rts
*-------------------------------------- *--------------------------------------
TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1
ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND ldy SKT.Cache+S.SOCKET.TCP.OUTTOSEND
@ -575,6 +594,6 @@ TCP.AddAYToSktCacheAtX
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/LIB/LIBTCPIP.S.TCP SAVE usr/src/lib/libtcpip.s.tcp
LOAD USR/SRC/LIB/LIBTCPIP.S LOAD usr/src/lib/libtcpip.s
ASM ASM

View File

@ -27,16 +27,16 @@ AUXPIPE .EQ 1
sta ]1+1 sta ]1+1
.EM .EM
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB inc/macros.i
.DO AUXPIPE=1 .DO AUXPIPE=1
.INB INC/IO.I .INB inc/io.i
.FIN .FIN
.INB INC/A2OSX.I .INB inc/a2osx.i
.INB INC/MLI.E.I .INB inc/mli.e.i
.INB INC/NIC.I .INB inc/nic.i
.INB INC/ETH.I .INB inc/eth.i
.INB INC/LIB.NET.I .INB inc/lib.net.i
.INB INC/LIBTCPIP.I .INB inc/libtcpip.i
*-------------------------------------- *--------------------------------------
ZPFrameInPtr .EQ ZPLIB ZPFrameInPtr .EQ ZPLIB
ZPFrameInLen .EQ ZPLIB+2 ZPFrameInLen .EQ ZPLIB+2
@ -140,15 +140,15 @@ J.TCP.IN .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.TIMEWT .DA TCP.IN.JMP.TIMEWT
J.SKT.Socket .DA SKT.Socket.RAW J.SKT.Socket .DA SKT.Socket.RAW
.DA SKT.Socket.DGRAM .DA SKT.Socket.DGRAM
.DA SKT.Socket.SEQPACKET .DA SKT.Socket.SEQPKT
.DA SKT.Socket.STREAM .DA SKT.Socket.STREAM
J.SKT.connect .DA SKT.connect.RAW J.SKT.connect .DA SKT.connect.RAW
.DA SKT.connect.DGRAM .DA SKT.connect.DGRAM
.DA SKT.connect.SEQPACKET .DA SKT.connect.SEQPKT
.DA SKT.connect.STREAM .DA SKT.connect.STREAM
J.SKT.send .DA SKT.send.RAW J.SKT.send .DA SKT.send.RAW
.DA SKT.send.DGRAM .DA SKT.send.DGRAM
.DA SKT.send.SEQPACKET .DA SKT.send.SEQPKT
.DA SKT.send.STREAM .DA SKT.send.STREAM
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
@ -247,15 +247,15 @@ GetDynPort inc DYNPORT.LAST
clc clc
rts rts
*-------------------------------------- *--------------------------------------
.INB USR/SRC/LIB/LIBTCPIP.S.ARP .INB usr/src/lib/libtcpip.s.arp
.INB USR/SRC/LIB/LIBTCPIP.S.CFG .INB usr/src/lib/libtcpip.s.cfg
.INB USR/SRC/LIB/LIBTCPIP.S.DNS .INB usr/src/lib/libtcpip.s.dns
.INB USR/SRC/LIB/LIBTCPIP.S.FRM .INB usr/src/lib/libtcpip.s.frm
.INB USR/SRC/LIB/LIBTCPIP.S.HST .INB usr/src/lib/libtcpip.s.hst
.INB USR/SRC/LIB/LIBTCPIP.S.ICMP .INB usr/src/lib/libtcpip.s.icmp
.INB USR/SRC/LIB/LIBTCPIP.S.IP .INB usr/src/lib/libtcpip.s.ip
.INB USR/SRC/LIB/LIBTCPIP.S.SKT .INB usr/src/lib/libtcpip.s.skt
.INB USR/SRC/LIB/LIBTCPIP.S.TCP .INB usr/src/lib/libtcpip.s.tcp
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------

View File

@ -25,7 +25,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
beq L59BD beq L59BD
lda #$01 lda #$01
sta montimeh sta XRW.montimeh
L59A6 lda XRW.LastUnitUsed L59A6 lda XRW.LastUnitUsed
and #$70 and #$70
@ -37,7 +37,7 @@ L59A6 lda XRW.LastUnitUsed
jsr XRW.Wait100usec jsr XRW.Wait100usec
lda montimeh lda XRW.montimeh
bne L59A6 bne L59A6
L59BD ldx A2L L59BD ldx A2L
@ -107,7 +107,7 @@ regrwts ldy #$01 retry count
php save test results php save test results
lda #$E8 lda #$E8
sta montimeh sta XRW.montimeh
lda unitnum determine drive 1 or 2. lda unitnum determine drive 1 or 2.
cmp XRW.LastUnitUsed same drive used before ? cmp XRW.LastUnitUsed same drive used before ?
@ -148,7 +148,7 @@ L537C plp was motor on ?
L537F jsr XRW.Wait100usec wait 100us for each count in montime L537F jsr XRW.Wait100usec wait 100us for each count in montime
lda montimeh lda XRW.montimeh
bmi L537F count up to 0000 bmi L537F count up to 0000
* motor should be up to speed, * motor should be up to speed,
@ -564,7 +564,7 @@ XRW.Wait100usec lda #1
XRW.Wait100usecA XRW.Wait100usecA
sec (2) sec (2)
.1 ldx #17 (2) .1 ldx #16 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
@ -572,13 +572,13 @@ XRW.Wait100usecA
ldx A2L (3) ldx A2L (3)
bit IO.D2.RData,x (4) Slow down ACC boards bit IO.D2.RData,x (4) Slow down ACC boards
inc montimel (6) inc XRW.montimel (6)
bne .3 (3) bne .3 (3)
inc montimeh (6) inc XRW.montimeh (6)
.3 sbc #1 .3 sbc #1 (2)
bne .1 bne .1 (3)
rts rts
*-------------------------------------- *--------------------------------------
@ -804,8 +804,6 @@ XRW.Seek ldx XRW.UnitIndex
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
phx phx
* lda #164
* jsr XRW.Wait100usecA
lda #0 wait 25.6 ms lda #0 wait 25.6 ms
jsr XRW.Wait100usecA jsr XRW.Wait100usecA
@ -962,8 +960,8 @@ XRW.Recalibrate .HS 00
.HS 101418 .HS 101418
XRW.XX000000 .HS 008040C0 used in fast prenib as lookup for 2-bit quantities. XRW.XX000000 .HS 008040C0 used in fast prenib as lookup for 2-bit quantities.
* .HS FFFF * .HS FFFF
montimel .HS 00 XRW.montimel .HS 00
montimeh .HS 00 XRW.montimeh .HS 00
.HS 1C20 .HS 1C20
.HS FFFFFF .HS FFFFFF
.HS 24282C3034 .HS 24282C3034

View File

@ -23,7 +23,7 @@ ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
ZPSktPtr .BS 2 ZPSktPtr .BS 2
hFile .BS 1 hFile .BS 1
hStr .BS 1 hLineBuf .BS 1
hSrvSocket .BS 1 hSrvSocket .BS 1
TimeOut .BS 1 TimeOut .BS 1
@ -33,8 +33,6 @@ ZPSrvNamePtr .BS 2
hRootdir .BS 1 hRootdir .BS 1
ZPRootDirPtr .BS 2 ZPRootDirPtr .BS 2
hClntSocket .BS 1
ZPRequestPtr .BS 2 ZPRequestPtr .BS 2
ZPnRequestLen .BS 2 ZPnRequestLen .BS 2
ZPLinePtr .BS 2 ZPLinePtr .BS 2
@ -76,6 +74,8 @@ L.MSG.INITCONF .DA MSG.INITCONF
L.MSG.INITOK .DA MSG.INITOK L.MSG.INITOK .DA MSG.INITOK
L.MSG.SKTERR .DA MSG.SKTERR L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.INCOMING .DA MSG.INCOMING L.MSG.INCOMING .DA MSG.INCOMING
L.MSG.REQ .DA MSG.REQ
L.MSG.SKTCLOSE .DA MSG.SKTCLOSE
L.KEYWORDS.REQ .DA KEYWORDS.REQ L.KEYWORDS.REQ .DA KEYWORDS.REQ
J.KEYWORDS.REQ .DA CS.RUN.REQ.GET J.KEYWORDS.REQ .DA CS.RUN.REQ.GET
L.INDEX.HTML .DA INDEX.HTML L.INDEX.HTML .DA INDEX.HTML
@ -137,7 +137,7 @@ CS.RUN.SYN
lda #E.SYN lda #E.SYN
sec sec
CS.RUN.RTS rts CS.RUN.RTS rts
*--------------------------------------
CS.RUN.INIT ldx #3 CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3 ldy #S.IPCFG.IP+3
@ -152,7 +152,7 @@ CS.RUN.INIT ldx #3
bcs CS.RUN.RTS bcs CS.RUN.RTS
>STYA ZPLinePtr >STYA ZPLinePtr
stx hStr stx hLineBuf
>PUSHW L.MSG.INITCONF >PUSHW L.MSG.INITCONF
>PUSHW L.ETCHTTPDCONF >PUSHW L.ETCHTTPDCONF
@ -186,17 +186,17 @@ CS.RUN.INIT ldx #3
>PUSHBI 4 >PUSHBI 4
>SYSCALL PrintF >SYSCALL PrintF
*--------------------------------------
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
jsr CS.RUN.SERVER jsr CS.RUN.SERVER
bcs CS.RUN.ERR bcs CS.RUN.ERR
bra CS.RUN.LOOP bra CS.RUN.LOOP
.9 >LDYA L.MSG.SKTERR CS.RUN.ERR >LDYA L.MSG.SKTERR
>SYSCALL PutS >SYSCALL PutS
lda #E.SYN lda #E.SYN
sec sec
CS.RUN.ERR rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.CONF >PUSHW L.ETCHTTPDCONF CS.RUN.CONF >PUSHW L.ETCHTTPDCONF
>PUSHBI O.RDONLY+O.TEXT >PUSHBI O.RDONLY+O.TEXT
@ -313,17 +313,17 @@ CS.RUN.SERVER lda hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.accept >LIBCALL hLIBTCPIP,LIBTCPIP.accept
bcs .8 bcs .8
sta hClntSocket >STA.G CLN.hSocket
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPSktPtr >STYA ZPSktPtr
>PUSHW L.MSG.INCOMING >PUSHW L.MSG.INCOMING
>PUSHB.G CLN.hSocket
ldx #3 ldx #3
ldy #S.SOCKET.REM.ADDR ldy #S.SOCKET.REM.ADDR
>PUSHB hClntSocket
.1 >PUSHB (ZPSktPtr),y .1 >PUSHB (ZPSktPtr),y
iny iny
dex dex
@ -335,24 +335,35 @@ CS.RUN.SERVER lda hSrvSocket
jsr CS.RUN.CLIENT jsr CS.RUN.CLIENT
.8 clc .8 clc
.9 rts .9
CS.RUN.SERVER.RTS
rts
*-------------------------------------- *--------------------------------------
CS.RUN.CLIENT >STZ.G REQ.KeepAlive CS.RUN.CLIENT >LDYAI 1024
>STA.G REQ.FullPath >SYSCALL GetMem
bcs CS.RUN.SERVER.RTS
>STYA ZPRepPtr
txa
>STA.G REQ.hBuf
.10 >STZ.G REQ.FullPath
>STA.G REQ.hReq
>STA.G REQ.KeepAlive
>STA.G REQ.hFile >STA.G REQ.hFile
>STA.G REQ.hBuf >STA.G REQ.hBuf
.1 >SLEEP .1 >SLEEP
lda hClntSocket >LDA.G CLN.hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv >LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .2 bcc .2
tay tay
beq .1 beq .1
jmp .80 jmp .90
.2 jsr CS.RUN.REQ.GetFrame .2 jsr CS.RUN.REQ.GetReq
.3 jsr CS.RUN.REQ.GetLine .3 jsr CS.RUN.REQ.GetLine
bcs .4 bcs .4
@ -371,28 +382,17 @@ CS.RUN.CLIENT >STZ.G REQ.KeepAlive
.4 >LDA.G REQ.FullPath .4 >LDA.G REQ.FullPath
beq .9 beq .9
>LDYAI 1024
>SYSCALL GetMem
bcs .9
>STYA ZPRepPtr
txa
>STA.G REQ.hBuf
jsr CS.RUN.OpenFile jsr CS.RUN.OpenFile
bcs .9 bcs .9
jsr CS.RUN.GetMime
bcs .9
jsr CS.RUN.SendFile jsr CS.RUN.SendFile
bcc .5 bcc .5
bra .90
.9 >PUSHWI HTTP.404.len .9 >PUSHWI HTTP.404.len
>PUSHW L.HTTP.404 >PUSHW L.HTTP.404
lda hClntSocket >LDA.G CLN.hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send >LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .5
>STZ.G REQ.KeepAlive >STZ.G REQ.KeepAlive
@ -401,30 +401,41 @@ CS.RUN.CLIENT >STZ.G REQ.KeepAlive
>SYSCALL FClose >SYSCALL FClose
.6 >LDA.G REQ.hBuf .6 >LDA.G REQ.hReq
beq .7
>SYSCALL freemem
.7 >LDA.G REQ.hFrame
beq .8 beq .8
>SYSCALL FreeMem >SYSCALL FreeMem
.8 >LDA.G REQ.KeepAlive .8 >LDA.G REQ.KeepAlive
beq .80 beq .90
jmp CS.RUN.CLIENT jmp .10
.80 lda hClntSocket .90 >LDA.G REQ.hBuf
beq .91
>SYSCALL freemem
.91 >PUSHW L.MSG.SKTCLOSE
>PUSHB.G CLN.hSocket
>PUSHBI 1
>SYSCALL printf
>LDA.G CLN.hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN.REQ.GetFrame CS.RUN.REQ.GetReq
>STA.G REQ.hFrame >STA.G REQ.hReq
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPRequestPtr >STYA ZPRequestPtr
>PUSHW L.MSG.REQ
>PUSHB.G REQ.hReq
>PUSHB.G CLN.hSocket
>PUSHBI 2
>SYSCALL printf
ldy #S.IP.TOTAL.LENGTH+1 ldy #S.IP.TOTAL.LENGTH+1
lda (ZPRequestPtr),y lda (ZPRequestPtr),y
sec sec
@ -505,9 +516,7 @@ CS.RUN.OpenFile >LEA.G REQ.FullPath
>PUSHEA.G REQ.Stat >PUSHEA.G REQ.Stat
>SYSCALL FStat >SYSCALL FStat
.9 rts >LEA.G REQ.FullPath
*--------------------------------------
CS.RUN.GetMime >LEA.G REQ.FullPath
>STYA ZPPtr2 >STYA ZPPtr2
ldx #$ff ldx #$ff
@ -546,7 +555,7 @@ CS.RUN.GetMime >LEA.G REQ.FullPath
.8 >STA.G REQ.MimeType .8 >STA.G REQ.MimeType
clc clc
rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.SendFile >PUSHW ZPRepPtr CS.RUN.SendFile >PUSHW ZPRepPtr
>PUSHW L.HTTP.200 >PUSHW L.HTTP.200
@ -580,7 +589,7 @@ CS.RUN.SendFile >PUSHW ZPRepPtr
*-------------------------------------- *--------------------------------------
CS.RUN.SendBuf >PUSHYA CS.RUN.SendBuf >PUSHYA
>PUSHW ZPRepPtr >PUSHW ZPRepPtr
lda hClntSocket >LDA.G CLN.hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send >LIBCALL hLIBTCPIP,LIBTCPIP.Send
rts rts
*-------------------------------------- *--------------------------------------
@ -700,7 +709,7 @@ CS.QUIT lda hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 lda hStr .1 lda hLineBuf
beq .2 beq .2
>SYSCALL FreeMem >SYSCALL FreeMem
@ -730,8 +739,10 @@ MSG.TCPWAIT .AZ "HTTPD:Waiting for TCP/IP initializing..."
MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly." MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly."
MSG.INITCONF .AZ "HTTPD:Reading %s file...\r\n" MSG.INITCONF .AZ "HTTPD:Reading %s file...\r\n"
MSG.INITOK .AZ "HTTPD:Listening on port %D, root dir: %s.\r\n" MSG.INITOK .AZ "HTTPD:Listening on port %D, root dir: %s.\r\n"
MSG.SKTERR .AZ "HTTPD:Listen Error." MSG.SKTERR .AZ "HTTPD:Skt Bind Error."
MSG.INCOMING .AZ "HTTPD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.INCOMING .AZ "HTTPD:Skt $%h Opened From %d.%d.%d.%d\r\n"
MSG.REQ .AZ "HTTPD:Req $%h From Skt $%h\r\n"
MSG.SKTCLOSE .AZ "HTTPD:Skt $%h Close\r\n"
*-------------------------------------- *--------------------------------------
KEYWORDS.REQ .AS "GET " KEYWORDS.REQ .AS "GET "
.AS "Connection: " .AS "Connection: "
@ -791,11 +802,12 @@ SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
DS.START DS.START
REQ.FullPath .BS MLI.MAXPATH+1 REQ.FullPath .BS MLI.MAXPATH+1
REQ.Stat .BS S.STAT REQ.Stat .BS S.STAT
REQ.hFrame .BS 1 REQ.hReq .BS 1
REQ.hFile .BS 1 REQ.hFile .BS 1
REQ.hBuf .BS 1 REQ.hBuf .BS 1
REQ.MimeType .BS 1 REQ.MimeType .BS 1
REQ.KeepAlive .BS 1 REQ.KeepAlive .BS 1
CLN.hSocket .BS 1
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------

View File

@ -63,6 +63,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
jsr PS.AddArgV K.IOBuf= /.../SHELL, K.Buf256=/.../SCRIPT jsr PS.AddArgV K.IOBuf= /.../SHELL, K.Buf256=/.../SCRIPT
bcc .8 or K.IOBuf= 0, K.Buf256=/.../BINFILE bcc .8 or K.IOBuf= 0, K.Buf256=/.../BINFILE
.90 pha save error code .90 pha save error code
>PUSHBI 2 >PUSHBI 2
lda .8+1 lda .8+1