From f57cb61132815ea01a27f1cd955f839a7fb7b54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 19 Jun 2019 17:56:59 +0200 Subject: [PATCH] Kernel 0.93 --- .Docs/KERNEL.md | 26 +++++++------- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes INC/A2osX.I.txt | 6 ++-- LIB/LIBTCPIP.S.SKT.txt | 56 ++++++++++++++++++++++++++++-- LIB/LIBTCPIP.S.txt | 27 +++++++++++---- SYS/KERNEL.S.FIFO.txt | 72 --------------------------------------- SYS/KERNEL.S.IO.txt | 18 +++++----- SYS/KERNEL.S.JMP.txt | 62 ++++++++++++++++++++++----------- SYS/KERNEL.S.MEM.txt | 54 +++++++---------------------- SYS/KERNEL.S.STAT.txt | 6 ++-- 10 files changed, 157 insertions(+), 170 deletions(-) delete mode 100644 SYS/KERNEL.S.FIFO.txt diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 1f014108..ae4c36ed 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -615,6 +615,14 @@ A=hSList none. (X,Y unmodified) +# GetStkObjPtr + +## ASM +`lda hStkObj` +`>SYSCALL GetStkObjPtr` + +## RETURN VALUE + # LoadStkObj Load a file in AUX memory (Stock Objects) PUSHW = AUXTYPE (Handled by.... @@ -626,15 +634,12 @@ Load a file in AUX memory (Stock Objects) Y,A = File Length X = hMem of Loaded Object in AUX mem -# GetStkObjData - -## ASM -`PUSHW DataLen` -`PUSHW DataPtr` -`lda hStkObj` -`>SYSCALL GetStkObjData` +# GetMemStat +**In:** + Y,A = Ptr to 24 bytes buffer ## RETURN VALUE + Buffer filled with memory stats # ExecL @@ -710,13 +715,6 @@ A = Child PSID ## RETURN VALUE -# GetMemStat -**In:** - Y,A = Ptr to 24 bytes buffer - -## RETURN VALUE - Buffer filled with memory stats - # Stat Return information about a file diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a3dc2f76a0633e205b540b9881118027cbc3a9de..af46bf92d3b47286defe4189eedbc399ad30cf9f 100644 GIT binary patch delta 42204 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 XSJH2!-${Rv{v`e7IEdcQ;aK^9|2FRd delta 40735 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 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index e9a3624a..458c49ef 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -295,9 +295,9 @@ SYS.GetMemPtr .EQ $E4 SYS.FreeMem .EQ $E6 SYS.NewStkObj .EQ $E8 -SYS.FreeStkObj .EQ $EA -SYS.LoadStkObj .EQ $EC -SYS.GetStkObjData .EQ $EE +SYS.LoadStkObj .EQ $EA +SYS.GetStkObjPtr .EQ $EC +SYS.FreeStkObj .EQ $EE SYS.SListGetData .EQ $F0 SYS.SListAddData .EQ $F2 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index ad004bcd..a33dba4f 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -431,7 +431,13 @@ SKT.GetDataFromSktIn ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y + + .DO AUXPIPE=1 + >SYSCALL2 GetStkObjPtr + .ELSE >SYSCALL2 GetMemPtr + .FIN + sty ZPTmpPtr1 * clc @@ -445,7 +451,11 @@ SKT.GetDataFromSktIn lda ZPDataInLen+1 eor #$FF pha - + + .DO AUXPIPE=1 + jsr SKT.SetupZPCode + .FIN + ldy SKT.Cache+S.SOCKET.TCP.INTAIL .1 inx Check if room left in dest buffer @@ -456,7 +466,12 @@ SKT.GetDataFromSktIn pha -.2 lda (ZPTmpPtr1),y +.2 .DO AUXPIPE=1 + jsr ZPCode + .ELSE + lda (ZPTmpPtr1),y + .FIN + sta (ZPDataInPtr) inc ZPDataInPtr bne .3 @@ -510,7 +525,13 @@ SKT.AddDataToSktIn ldy #S.SOCKET.SQ.hInMem lda (ZPPtrSKT),y + + .DO AUXPIPE=1 + >SYSCALL2 GetStkObjPtr + .ELSE >SYSCALL2 GetMemPtr + .FIN + sty ZPTmpPtr1 * clc @@ -618,7 +639,13 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen SKT.AddDataToSktOut ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y + + .DO AUXPIPE=1 + >SYSCALL2 GetStkObjPtr + .ELSE >SYSCALL2 GetMemPtr + .FIN + sty ZPTmpPtr1 * clc @@ -700,7 +727,12 @@ SKT.GetDataFromSktOut ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y + .DO AUXPIPE=1 + >SYSCALL2 GetStkObjPtr + .ELSE >SYSCALL2 GetMemPtr + .FIN + sty ZPTmpPtr1 * clc @@ -715,6 +747,10 @@ SKT.GetDataFromSktOut eor #$FF pha + .DO AUXPIPE=1 + jsr SKT.SetupZPCode + .FIN + ldy SKT.Cache+S.SOCKET.TCP.OUTTAILSENT .1 inx @@ -725,7 +761,11 @@ SKT.GetDataFromSktOut pha -.2 lda (ZPTmpPtr1),y +.2 .DO AUXPIPE=1 + jsr ZPCode + .ELSE + lda (ZPTmpPtr1),y + .FIN sta (ZPDataOutPtr) inc ZPDataOutPtr bne .3 @@ -1321,6 +1361,16 @@ SKT.CopyDataInToOut pla sta ZPDataInPtr+1 rts +*-------------------------------------- + .DO AUXPIPE=1 +SKT.SetupZPCode ldy #ZP.CODE.Len-1 + +.1 lda ZP.CODE,y + sta ZPCode,y + dey + bpl .1 + rts + .FIN *-------------------------------------- MAN SAVE USR/SRC/LIB/LIBTCPIP.S.SKT diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 972d6751..23818513 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -29,8 +29,11 @@ IPDEBUG .EQ 0 .EM *-------------------------------------- .INB INC/MACROS.I + .DO AUXPIPE=1 + .INB INC/IO.I + .FIN .INB INC/A2OSX.I - .INB INC/MLI.I +* .INB INC/MLI.I .INB INC/MLI.E.I .INB INC/NIC.I .INB INC/ETH.I @@ -49,13 +52,15 @@ ZPFrameOutLen .EQ ZPLIB+10 ZPDataOutPtr .EQ ZPLIB+12 ZPDataOutLen .EQ ZPLIB+14 -ZPPtrIP .EQ ZPLIB+16 -ZPPtrMAC .EQ ZPLIB+18 -ZPPtrDNS .EQ ZPLIB+20 -ZPPtrSKT .EQ ZPLIB+22 +ZPTmpPtr1 .EQ ZPLIB+16 +ZPPtrSKT .EQ ZPLIB+18 -ZPCachePtr .EQ ZPLIB+24 -ZPTmpPtr1 .EQ ZPLIB+26 +ZPCode .EQ ZPLIB+20 12 bytes + +ZPPtrIP .EQ ZPLIB+20 +ZPPtrMAC .EQ ZPLIB+22 +ZPPtrDNS .EQ ZPLIB+24 +ZPCachePtr .EQ ZPLIB+26 IP.CHECKSUM .EQ ZPLIB+28 IP.CHECKSUM.TMP .EQ ZPLIB+30 @@ -357,6 +362,14 @@ SKT.Dump ldy #S.SOCKET.REM.PORT+1 .INB USR/SRC/LIB/LIBTCPIP.S.TCP *-------------------------------------- CS.END +*-------------------------------------- + .DO AUXPIPE=1 +ZP.CODE sta SETREADAUX + lda (ZPTmpPtr1),y + sta CLRREADAUX + rts +ZP.CODE.Len .EQ *-ZP.CODE + .FIN *-------------------------------------- SA.LOCAL .DA #AF.INET S.SOCKADDR.AF .BS 1 diff --git a/SYS/KERNEL.S.FIFO.txt b/SYS/KERNEL.S.FIFO.txt deleted file mode 100644 index 0a950212..00000000 --- a/SYS/KERNEL.S.FIFO.txt +++ /dev/null @@ -1,72 +0,0 @@ -NEW -PREFIX -AUTO 4,1 -*/-------------------------------------- -* # NewFIFO -* ## C -* `int getpwuid(short int uid, S.PW* passwd );` -* ## ASM -* `>PUSHW passwd` -* `>LDYA size` -* `>SYSCALL getpwuid` -* ## RETURN VALUE -* A = hFIFO -*\-------------------------------------- -FIFO.New -*/-------------------------------------- -* # GetPWName -* ## C -* `int getpwname(const char* name, S.PW* passwd );` -* ## ASM -* `>PUSHW passwd` -* `>LDYA name` -* `>SYSCALL getpwname` -* ## RETURN VALUE -*\-------------------------------------- -FIFO.Free -*/-------------------------------------- -* # PutPW -* ## C -* `int putpw( S.PW* passwd );` -* ## ASM -* `>LDYA passwd` -* `>SYSCALL putpw` -* ## RETURN VALUE - -*\-------------------------------------- -FIFO.Get -*/-------------------------------------- -* # PutPW -* ## C -* `int putpw( S.PW* passwd );` -* ## ASM -* `>LDYA passwd` -* `>SYSCALL putpw` -* ## RETURN VALUE -*\-------------------------------------- -FIFO.Put -*/-------------------------------------- -* # PutPW -* ## C -* `int putpw( S.PW* passwd );` -* ## ASM -* `>LDYA passwd` -* `>SYSCALL putpw` -* ## RETURN VALUE -*\-------------------------------------- -FIFO.GetUsed -*/-------------------------------------- -* # PutPW -* ## C -* `int putpw( S.PW* passwd );` -* ## ASM -* `>LDYA passwd` -* `>SYSCALL putpw` -* ## RETURN VALUE -*\-------------------------------------- -FIFO.GetFree -*-------------------------------------- -MAN -SAVE USR/SRC/SYS/KERNEL.S.FIFO -LOAD USR/SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index bdbd87d8..2520d5cd 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -288,7 +288,8 @@ IO.CLOSE.PIPE ldy #S.FD.PIPE.S beq .2 .DO AUXPIPE=1 - jsr K.FreeStkObj + ldx #SYS.FreeStkObj + jsr K.SYSCALL2.AUX .ELSE jsr K.FreeMem .FIN @@ -503,12 +504,12 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1 ldy #S.FD.PIPE.hMem lda (pFD),y + .DO AUXPIPE=1 - sta SETREADAUX - .FIN + ldx #SYS.GetStkObjPtr + jsr K.SYSCALL2.AUX + .ELSE jsr K.GetMemPtr - .DO AUXPIPE=1 - sta CLRREADAUX .FIN sty .2+1 @@ -648,11 +649,10 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S lda (pFD),y .DO AUXPIPE=1 - sta SETREADAUX - .FIN + ldx #SYS.GetStkObjPtr + jsr K.SYSCALL2.AUX + .ELSE jsr K.GetMemPtr get src buf - .DO AUXPIPE=1 - sta CLRREADAUX .FIN sty .3+1 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 2eb17f6b..a060a48e 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -140,10 +140,10 @@ K.SYSCALL .DA K.GetMemStat $00 .DA K.GetMemPtr .DA K.FreeMem - .DA K.NewStkObj - .DA K.FreeStkObj + .DA K.GetMem K.NewStkObj .DA K.LoadStkObj - .DA K.GetStkObjData + .DA K.GetMemPtr K.GetStkObjPtr + .DA K.FreeMem K.FreeStkObj *-------------------------------------- .DA K.SListGetData $F0 .DA K.SListAddData @@ -398,26 +398,50 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #RRAMWRAMBNK2 .DA #$80 *-------------------------------------- - .DA 0 $E0 : MemMgr at $E000 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #0 $E0 : MemMgr at $E000 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #$40 NewStkObj + .DA #$80 + .DA #0 + .DA #$80 + .DA #$40 GetStkObjPtr + .DA #$80 + .DA #$40 FreeStkObj + .DA #$80 *-------------------------------------- - .DA 0 $F0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA #0 $F0 : SLIST + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 + .DA #0 + .DA #$80 *-------------------------------------- K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK bpl K.SYSCALL.JMP 0, E000, no BNK change + bvc K.SYSCALL2.BANK + +K.SYSCALL2.AUX sta SETREADAUX AUX Mem API + sta SETWRITEAUX + jsr K.SYSCALL.JMP + sta CLRREADAUX + sta CLRWRITEAUX + rts K.SYSCALL2.BANK sta .7+1 lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 3c9c2946..52dcdeaf 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -405,7 +405,6 @@ K.SListGetData pha >PULLW ZPMemMgrSize pla bra K.SListFree - pla */-------------------------------------- * # SListAddData * ## ASM @@ -505,25 +504,6 @@ K.SListFree sta SETREADAUX * CS : * A = EC *\-------------------------------------- -K.NewStkObj ldx #SYS.GetMem - .HS 2C BIT ABS -*/-------------------------------------- -* # FreeStkObj -* A = hMem To Free (AUX Memory) -* ## RETURN VALUE -* none. -* (X,Y unmodified) -*\-------------------------------------- -K.FreeStkObj ldx #SYS.FreeMem - - sta SETREADAUX - sta SETWRITEAUX - - jsr K.SYSCALL.JMP - - sta CLRREADAUX - sta CLRWRITEAUX - rts */-------------------------------------- * # LoadStkObj * Load a file in AUX memory (Stock Objects) @@ -548,7 +528,9 @@ K.LoadStkObj ldx #SYS.LoadTxtFile To get ending \0 inc +1 for ending 0 .1 >STYA A2L Save LEN temporarly - jsr K.NewStkObj + ldx #SYS.NewStkObj + jsr K.SYSCALL2.AUX + bcs .9 stx .80+1 >STYA A4L Save Destination Address in AUX @@ -585,29 +567,19 @@ K.LoadStkObj ldx #SYS.LoadTxtFile To get ending \0 sec .99 rts */-------------------------------------- -* # GetStkObjData +* # GetStkObjPtr * ## ASM -* `PUSHW DataLen` -* `PUSHW DataPtr` * `lda hStkObj` -* `>SYSCALL GetStkObjData` +* `>SYSCALL GetStkObjPtr` * ## RETURN VALUE *\-------------------------------------- -K.GetStkObjData sta SETREADAUX - jsr K.GetMemPtr - >STYA ZPMemMgrTmp1 - - >PULLW ZPSListDataLen - >PULLW ZPSListDataPtr - - lda (ZPMemMgrTmp1),y - pha - iny - lda (ZPMemMgrTmp1),y - ply - - sta CLRREADAUX - rts +*/-------------------------------------- +* # FreeStkObj +* A = hMem To Free (AUX Memory) +* ## RETURN VALUE +* none. +* (X,Y unmodified) +*\-------------------------------------- *-------------------------------------- * in Y,A = buf size *-------------------------------------- @@ -721,7 +693,7 @@ MEM.SetDataByte.1 inc ZPSListDataPtr+1 .8 rts *-------------------------------------- -MEM.TXTPTR.GetY sta CLRREADAUX +MEM.TXTPTR.GetY sta SETREADAUX lda (TXTPTR),y sta SETREADAUX rts diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 0107c0a8..4b06760d 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -378,7 +378,8 @@ K.MkNod.I ldx #2 K.Pipe sta .1+1 SIZE HI .DO AUXPIPE=1 - jsr K.NewStkObj Buffer in AUX mem + ldx #SYS.NewStkObj + jsr K.SYSCALL2.AUX Buffer in AUX mem .ELSE jsr K.GetMem .FIN @@ -414,7 +415,8 @@ K.Pipe sta .1+1 SIZE HI .9 pha save error code lda .8+1 get back PIPE buffer .DO AUXPIPE=1 - jsr K.FreeStkObj + ldx #SYS.FreeStkObj + jsr K.SYSCALL2.AUX .ELSE jsr K.FreeMem .FIN