From 9653f369c5e490d9c1cd08bbf991e80510f9ebe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sat, 2 Mar 2019 20:47:58 +0000 Subject: [PATCH] Kernel 0.92+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.CORE.txt | 52 +++++++++------- INC/A2osX.I.txt | 2 +- LIB/LIBTCPIP.S.SKT.txt | 130 ++++++++++++++++----------------------- SBIN/GETTY.S.txt | 27 ++++---- SBIN/HTTPD.S.txt | 6 +- SBIN/TELNETD.S.txt | 49 ++++++++------- SYS/KERNEL.S.INIT.txt | 2 +- SYS/KERNEL.S.IO.txt | 36 +++++++++-- SYS/KERNEL.S.MATH.txt | 6 +- 10 files changed, 160 insertions(+), 150 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ff3dcfd1c7ae6cdbac8d6fd11c791d705d093858..18f69996ffcb829ed92bfbb0f0051afc5b91158a 100644 GIT binary patch delta 35303 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⁡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 diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 4194f36e..db8947ac 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -120,14 +120,39 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping .4 >LDYA L.CMD internal command ? jsr CORE.LookupInputBuf - bcs .6 no...assume external...no IO token Expected + bcc .41 - jsr CORE.SkipCharsA + jsr CORE.ArgV.Add + bra .42 + +.41 jsr CORE.SkipCharsA txa >STA.G CORE.IntCmd - bra .7 internal, do not add token + cpx #C.FOR + bcs .7 FOR...FI : always execute + +.42 jsr CORE.StkGet IF,WHILE,FOR ? + bcs .7 no particular context, exec... + + and #$C0 + cmp #$C0 + beq .7 context/parent context is TRUE, exec + +.43 jsr CORE.GetNextCharNB + bcs .44 EOF + + cmp #C.CR + beq .44 + + cmp #';' TODO ";" + bne .43 + +.44 jsr CORE.GetNextCharNB Skip EoL char + clc + rts + .5 >LDYA L.CORE.IO jsr CORE.LookupInputBuf bcs .6 @@ -165,32 +190,13 @@ CORE.ExecCmd jsr CORE.GetNextCharNB Skip EoL char CORE.ExecCmd.1 lda #0 sta (ZPArgVBufPtr) - jsr CORE.StkGet IF,WHILE,FOR ? - bcs .3 no particular context, exec... - tax - - >LDA.G CORE.IntCmd - bmi .2 external ... - - and #$3F - cmp #C.FOR - bcs .3 FOR...FI : always execute - -.2 txa - bpl .8 context is FALSE, skip line - asl - bpl .8 parent context is FALSE, skip line - -.3 >LDYA ZPArgVBuf + >LDYA ZPArgVBuf >STYA ZPArgVBufPtr >LDA.G CORE.IntCmd bmi CORE.ExecExtCmd tax jmp (J.CMD,x) - -.8 clc - rts CORE.ExecExtCmd >PUSHB.G CORE.PSFlags >LDYA ZPArgVBuf diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index d626ff92..cf1fe6c5 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -457,7 +457,7 @@ S.FD.DSOCK.OPEN .EQ 3 S.FD.DSOCK.CLOSE .EQ 4 S.FD.DSOCK.READ .EQ 5 S.FD.DSOCK.WRITE .EQ 6 -S.FD.DSOCK.STATUS .EQ 7 +S.FD.DSOCK.EOF .EQ 7 * S.FD.DSOCK .EQ 8 *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 1072f352..64722009 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -382,44 +382,22 @@ SKT.shutdown.STREAM * `>PUSHWI count` * `>PUSHW buf` * `lda fd` -* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.read` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.read` * ## RETURN VALUE * CC: Y,A = bytes read * CS: A = EC *\-------------------------------------- SKT.Read jsr SKT.PullhFDDataInPtrLen - ldy #S.SOCKET.T - lda (ZPPtrSKT),y - cmp #S.SOCKET.T.STREAM - bne .90 bad skt + jsr SKT.EOF.I + bcs .9 I/O error - ldy #S.SOCKET.O - lda (ZPPtrSKT),y - and #S.SOCKET.O.ACCEPTCONN - bne .90 Bad Skt + tay + beq .9 exit with CC,Y,A = 0 + + jmp SKT.GetDataFromSktIn - ldy #S.SOCKET.TCP.S - lda (ZPPtrSKT),y - cmp #S.SOCKET.TCP.S.ESTBLSH - bcc .92 Not yet established...no data - cmp #S.SOCKET.TCP.S.FINWT2 - bcs .91 closing...IO err - - jsr SKT.GetDataFromSktIn - rts if CS, No data... - -.90 lda #ERR.SKT.BAD - sec - rts - -.91 lda #MLI.E.IO - sec - rts - -.92 lda #0 - sec -.99 rts +.9 rts */-------------------------------------- * # Write (STREAM) * ## C @@ -429,28 +407,15 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen * `>PUSHWI count` * `>PUSHW buf` * `lda fd` -* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.write` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.write` * ## RETURN VALUE * CC: Y,A = bytes written * CS: A = EC *\-------------------------------------- SKT.Write jsr SKT.PullhFDDataInPtrLen - ldy #S.SOCKET.T - lda (ZPPtrSKT),y - cmp #S.SOCKET.T.STREAM - bne .99 - - ldy #S.SOCKET.O - lda (ZPPtrSKT),y - and #S.SOCKET.O.ACCEPTCONN - bne .99 - - ldy #S.SOCKET.TCP.S - lda (ZPPtrSKT),y - cmp #S.SOCKET.TCP.S.ESTBLSH - bcc .90 Not yet established...no data - bne .91 + jsr SKT.CheckStream + bcs .9 jsr SKT.AddDataToSktOut will call SKT.GetTCB bcs .90 @@ -461,15 +426,7 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen .90 lda #0 no data transfered sec - rts - -.91 lda #MLI.E.IO - sec - rts - -.99 lda #ERR.SKT.BAD - sec - rts +.9 rts */-------------------------------------- * # Recv (RAW,DGRAM,SEQPACKET) * # RecvFrom (RAW,DGRAM,SEQPACKET) @@ -480,7 +437,7 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen * **In:** * `>PUSHW addr` (RecvFrom) * `lda fd` -* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.Recv` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.Recv` * ## RETURN VALUE * CC: A = hMem * CS: A = EC @@ -589,7 +546,7 @@ SKT.Recv clc * `>PUSHWI count` * `>PUSHW buf` * `lda fd` -* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.send` +* `>LIBCALL hLIBTCPIP,LIBTCPIP.send` * ## RETURN VALUE * CC: Y,A = bytes written * CS: A = EC @@ -669,15 +626,47 @@ SKT.setsockopt >SYSCALL GetMemPtr sta (ZPPtrSKT),y * clc rts -*-------------------------------------- +*-------------------------------------- SKT.EOF >SYSCALL GetMemPtr >STYA ZPPtrSKT - - ldy #S.SOCKET.TCP.INUSED + +SKT.EOF.I ldy #S.SOCKET.TCP.INUSED lda (ZPPtrSKT),y iny ora (ZPPtrSKT),y - clc + bne .8 + + jsr SKT.CheckStream + bcs .9 + + lda #0 no DATA + +.8 clc +.9 rts +*-------------------------------------- +SKT.CheckStream ldy #S.SOCKET.T + lda (ZPPtrSKT),y + cmp #S.SOCKET.T.STREAM + bne .99 + + ldy #S.SOCKET.O + lda (ZPPtrSKT),y + and #S.SOCKET.O.ACCEPTCONN + bne .99 + + ldy #S.SOCKET.TCP.S + lda (ZPPtrSKT),y + beq .91 + cmp #S.SOCKET.TCP.S.CLWAIT + bcs .91 + rts CC=ESTBLSH...or less + +.91 lda #MLI.E.IO + sec + rts + +.99 lda #ERR.SKT.BAD + sec rts */-------------------------------------- * # GetTable @@ -957,13 +946,8 @@ SKT.AddDataToSktIn *-------------------------------------- SKT.GetDataFromSktIn jsr SKT.GetTCB - lda SKT.Cache+S.SOCKET.TCP.INUSED - ora SKT.Cache+S.SOCKET.TCP.INUSED+1 - bne .10 - sec - rts A=0,NO DATA - -.10 ldy #S.SOCKET.SQ.hInMem + + ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y >SYSCALL GetMemPtr >STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base @@ -1042,11 +1026,7 @@ SKT.GetDataFromSktIn .7 pla discard byte counter HI -.8 lda ZPTmpPtr3 Do we have transfered something? - ora ZPTmpPtr3+1 - beq .9 - - >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPTmpPtr3 +.8 >ADC16 SKT.Cache+S.SOCKET.TCP.INFREE,ZPTmpPtr3 >SBC16 SKT.Cache+S.SOCKET.TCP.INUSED,ZPTmpPtr3 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM+3 @@ -1074,10 +1054,6 @@ SKT.GetDataFromSktIn >LDYA ZPTmpPtr3 clc rts -.9 -* lda #0 - sec - rts *-------------------------------------- * From SKT.Write.TCP * Src : ZPDataInPtr/ZPDataInLen diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 54101a9f..47528bca 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -117,17 +117,7 @@ CS.RUN.LOOP0 >LDYA L.ENV.TERM ldy #S.PS.hStdOut lda (pPs),y >SYSCALL fwrite - bcs .9 I/O error - -.2 >LDA.G ArgDev - >SYSCALL ArgV - >PUSHYA - >PUSHWI K.VER - >PUSHBI 4 - >LDYA L.MSG.GREETINGS - >SYSCALL printf - -.9 bcs CS.RUN.9 unable to send greetings...reset.. + bcs CS.RUN.EXIT I/O error jsr Init.Timeout @@ -148,23 +138,32 @@ CS.RUN.LOOP1 >SLEEP cmp #IAC beq CS.RUN.IACMODE >SYSCALL PutChar - bcc .2 + bcs CS.RUN.EXIT bra CS.RUN.LOOP1 .1 jsr Wait.Timeout bcc CS.RUN.LOOP1 + + >LDA.G ArgDev + >SYSCALL ArgV + >PUSHYA + >PUSHWI K.VER + >PUSHBI 4 + >LDYA L.MSG.GREETINGS + >SYSCALL printf + + bcs CS.RUN.EXIT unable to send greetings... .2 >PUSHBI S.PS.F.HOLD >LDA.G ArgProg >SYSCALL ArgV >SYSCALL ExecV - bcs CS.RUN.9 >SLEEP - >LDA.G bExitOnClose +CS.RUN.EXIT >LDA.G bExitOnClose bmi .8 jmp CS.RUN.LOOP0 diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index c3f2e7c7..36f25b02 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -23,7 +23,8 @@ CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 - .DA 0 + .DA #S.PS.F.EVENT + .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS @@ -51,9 +52,6 @@ CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib sta hLIBTCPIP - lda (pPs) - ora #S.PS.F.EVENT Now accept events - sta (pPs) clc rts *-------------------------------------- diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 82a9a6c3..af4cbcde 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -63,18 +63,28 @@ CS.RUN jsr Init.Timeout >LDYA L.MSG.TCPWAIT >SYSCALL puts -.1 >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? +.1 >SLEEP + + >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .99 >STYA ZPIPCfgPtr lda (ZPIPCfgPtr) Configured ? bmi CS.RUN.INIT - >SLEEP jsr Wait.Timeout - bcc .1 + bcs .99 + + ldy #S.PS.hStdIn + lda (pPs),y + >SYSCALL feof + bcs .9 I/O err + tay + beq .1 + >SYSCALL GetChar - bcs .1 + bcs .9 + cmp #$03 bne .1 jmp CS.RUN.ABORT @@ -84,7 +94,7 @@ CS.RUN jsr Init.Timeout >SYSCALL puts pla sec - rts +.9 rts CS.RUN.INIT ldx #3 ldy #S.IPCFG.IP+3 @@ -122,16 +132,14 @@ CS.RUN.PORTOK >PUSHBI 0 no protocol >SYSCALL puts .2 >SLEEP - jsr CS.RUN.SERVER - bcs CS.RUN.ERR -* >SYSCALL GetChar -* bcs .2 + >LDA.G hSrvSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Accept + bcs .2 -* cmp #$03 -* beq CS.RUN.ABORT - - bra .2 + jsr CS.RUN.SERVER + bcc .2 + rts .9 pha >LDYA L.MSG.SKTERR @@ -144,15 +152,10 @@ CS.RUN.ABORT >LDYA L.MSG.ABORT >SYSCALL puts lda #3 -CS.RUN.ERR sec + sec rts *-------------------------------------- -CS.RUN.SERVER >LDA.G hSrvSocket - - >LIBCALL hLIBTCPIP,LIBTCPIP.Accept - bcs .8 - - pha +CS.RUN.SERVER pha ldy #hSockets ldx #CONN.MAX @@ -161,7 +164,7 @@ CS.RUN.SERVER >LDA.G hSrvSocket pla sta (pData),y - bra CS.RUN.CLIENT + bra CS.RUN.CLIENT .2 iny dex @@ -172,7 +175,9 @@ CS.RUN.SERVER >LDA.G hSrvSocket .8 clc rts *-------------------------------------- -CS.RUN.CLIENT >STA.G hClientSocket +CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK + + >STA.G hClientSocket >SYSCALL GetMemPtr >STYA ZPSktPtr diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index a55cbdd8..9c5bcb5f 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -1142,7 +1142,7 @@ I.ENV.ROOT .AZ "ROOT" I.ENV.PATH .AZ "PATH=${ROOT}SBIN/:${ROOT}BIN/" I.ENV.LIB .AZ "LIB=${ROOT}LIB/" I.ENV.DRV .AZ "DRV=${ROOT}DRV/" -CTRLR.SHELL .AZ "${ROOT}BIN/SHELL" +CTRLR.SHELL .AZ "${ROOT}BIN/SH" ETCINIT.CMDLINE .AZ "${ROOT}ETC/INIT" *-------------------------------------- MLIOPEN00 .DA #3 diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index b62f1452..c2475044 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -404,9 +404,6 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE .9 >RET 4 *-------------------------------------- -IO.EOF.SSOCK ldy #S.FD.SSOCK.EOF - .HS 2C BIT ABS -*-------------------------------------- IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE .HS 2C BIT ABS *-------------------------------------- @@ -419,9 +416,24 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ jsr K.GetMemPtr >STYA .1+1 - lda IO.hFD + lda IO.hFD -.1 jmp $FFFF SELF MODIFIED +.1 jsr $FFFF SELF MODIFIED + bcs .9 + + phy + ply + bne .9 + + tax + bne .9 + + inc pStack CC, Y,A = 0 + inc pStack + inc pStack + inc pStack keep buf/count on stack + sec BLOCKING I/O +.9 rts *-------------------------------------- * (pStack)+2 count * (pStack)+0 buf @@ -702,6 +714,20 @@ IO.EOF.CDEV >LDYAI K.IOBuf ora K.IOBuf+1 .9 rts *-------------------------------------- +IO.EOF.SSOCK ldy #S.FD.SSOCK.EOF + + lda (pFD),y + tax Function Offset in LIB + + ldy #S.FD.SSOCK.IOHANDLER + lda (pFD),y + jsr K.GetMemPtr + >STYA .1+1 + + lda IO.hFD + +.1 jmp $FFFF SELF MODIFIED +*-------------------------------------- IO.EOF.PIPE lda #MLI.E.IO sec diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index 03672bb2..86bb5d12 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -31,7 +31,7 @@ K.FPwr ldx #ROM.PWR jsr MATH.PullARG plx - bra MATH.Go + jmp GP.RomCallPushFAC */-------------------------------------- * # Log,Sqr,Exp,Cos,Sin,Tan,ATan * Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) @@ -68,7 +68,7 @@ K.ATan ldx #ROM.ATAN jsr MATH.PullFAC plx - bra MATH.Go + jmp GP.RomCallPushFAC */-------------------------------------- * # float * Return 'floated' long @@ -92,7 +92,7 @@ K.Float ldx #4 ldx #ROM.LTOF -MATH.Go jmp GP.RomCallPushFAC + jmp GP.RomCallPushFAC */-------------------------------------- * # lrintf * Return float rounded into a long