diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index f6b2185a..f4a7b29d 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -212,20 +212,13 @@ Return Float rounded into a long + PUSHW = X (*Float) + Y,A = Dest (*long) -# GetMem +# GetMemStat.YA -## In: -+ PUSHW = Size Requested -+ PUSHB = Options - + S.MEM.F.INIT0 : init memory with 00 - + S.MEM.F.ALIGN : page aligned +## In: ++ Y,A = Ptr to 24 bytes buffer ## Out: -+ CC : success - + YA = PTR to Mem -* X = hMem -+ CS : - + A = EC ++ Buffer filled with memory stats # GetMem0.YA @@ -291,14 +284,6 @@ Create a new copy of this C-String + CS : error + A = SYS error code -# GetMemStat.YA - -## In: -+ Y,A = Ptr to 24 bytes buffer - -## Out: -+ Buffer filled with memory stats - # SListNew ## In: @@ -306,33 +291,50 @@ Create a new copy of this C-String ## Out: + A=hMem +# SListGetByID + +## In: ++ PUSHB = hSList ++ PUSHW = KeyID ++ PUSHW = Data Ptr + +## Out: + # SListAdd ## In: ++ PUSHB = hSList ++ PUSHW = Key ++ PUSHW = Data Ptr ## Out: -+ A=hMem ++ A=hSList -# SListGet +# SListLookup ## In: ++ PUSHB = hSList ++ PUSHW = Key ++ PUSHW = Data Ptr ## Out: -+ A=hMem ++ Data Ptr Updated -# SListPut +# SListUpdate ## In: ++ PUSHB = hSList ++ PUSHW = Key ++ PUSHW = Data Ptr ## Out: -+ A=hMem # SListFree ## In: ++ A=hSList ## Out: -+ A=hMem # LoadStkObj Load a file in AUX memory (Stock Objects) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 7e533d3c..edf3acb6 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 8f50f7fd..8937f311 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index e3d3d9f9..b01bae39 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -205,7 +205,7 @@ SYS.Tan .EQ $DA SYS.ATan .EQ $DC * .EQ $DF *-------------------------------------- -SYS.GetMem .EQ $E0 +SYS.GetMemStat.YA .EQ $E0 SYS.FreeMem.A .EQ $E2 SYS.GetMemPtr.A .EQ $E4 SYS.GetMemByID.A .EQ $E6 @@ -213,7 +213,7 @@ SYS.GetMemByID.A .EQ $E6 SYS.GetMem.YA .EQ $E8 SYS.GetMem0.YA .EQ $EA SYS.NewStr.YA .EQ $EC -SYS.GetMemStat.YA .EQ $EE +* .EQ $EE * .EQ $F0 * .EQ $F2 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index f3769cac..356cee5d 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -136,20 +136,20 @@ K.SYSCALL.JMP .DA 0 $00 *-------------------------------------- * $E000 *-------------------------------------- - .DA K.GetMem $E0 + .DA K.GetMemStat.YA $E0 .DA K.FreeMem.A .DA K.GetMemPtr.A .DA K.GetMemByID.A .DA K.GetMem.YA .DA K.GetMem0.YA .DA K.NewStr.YA - .DA K.GetMemStat.YA + .DA K.SListNew *-------------------------------------- - .DA 0 $F0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 + .DA K.SListGetByID $F0 + .DA K.SListAdd + .DA K.SListLookup + .DA K.SListUpdate + .DA K.SListFree.A .DA K.LoadStkObj .DA K.NewStkObj.YA .DA K.FreeStkObj.A diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index ec8b7154..93e26180 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -6,6 +6,11 @@ ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected ZPMemMgrTmp1 .EQ ZPMEMMGR+2 Mem.ReqSize .EQ ZPMEMMGR+4 store requested Size Mem.ReqFlags .EQ ZPMEMMGR+6 store requested Flags + +ZPSListBlock .EQ ZPMEMMGR+8 +ZPSListIndex .EQ ZPMEMMGR+10 +ZPSListKey .EQ ZPMEMMGR+12 +ZPSListData .EQ ZPMEMMGR+14 *-------------------------------------- * TODO : * - Create a 256 bytes table @@ -13,40 +18,46 @@ Mem.ReqFlags .EQ ZPMEMMGR+6 store requested Flags * Garbage collector move blocks * - mem.ID=0 always used! useful to test if hMem=0 *-------------------------------------- -* PUBLIC */-------------------------------------- -* # GetMem -* ## In: -* PUSHW = Size Requested -* PUSHB = Options -* S.MEM.F.INIT0 : init memory with 00 -* S.MEM.F.ALIGN : page aligned +* # GetMemStat.YA +* ## In: +* Y,A = Ptr to 24 bytes buffer * ## Out: -* CC : success -* YA = PTR to Mem -* X = hMem -* CS : -* A = EC +* Buffer filled with memory stats *\-------------------------------------- -K.GetMem >PULLB Mem.ReqFlags store requested flags - - >PULLYA get requested size - - bit Mem.ReqFlags S.MEM.F.AUX ? - bpl K.GetMem.I - .HS 2C bit abs +K.GetMemStat.YA >STYA ZPMemMgrTmp1 -K.GetMemAux.YA stz Mem.ReqFlags - - sta SETREADAUX Aux Mem requested,switch to AUX - sta SETWRITEAUX + ldy #6 - jsr K.GetMem.I +.1 lda Mem.Table,y + sta (ZPMemMgrTmp1),y + dey + bpl .1 + + + ldx #6 + ldy #14 + + sta SETREADAUX + +.2 lda Mem.Table,x + sta (ZPMemMgrTmp1),y + dey + dex + bpl .2 sta CLRREADAUX - sta CLRWRITEAUX - rts + ldx #6 + ldy #22 + +.3 lda DevMgr.Stat,x + sta (ZPMemMgrTmp1),y + dey + dex + bpl .3 + + rts */-------------------------------------- * # GetMem0.YA * ## In: @@ -57,9 +68,8 @@ K.GetMemAux.YA stz Mem.ReqFlags * X = hMem * CS : * A = EC -*\-------------------------------------- +*\-------------------------------------- K.GetMem0.YA ldx #S.MEM.F.INIT0 - stx Mem.ReqFlags .HS 2C bit abs */-------------------------------------- * # GetMem.YA @@ -72,9 +82,10 @@ K.GetMem0.YA ldx #S.MEM.F.INIT0 * CS : * A = EC *\-------------------------------------- -K.GetMem.YA stz Mem.ReqFlags +K.GetMem.YA ldx #0 -K.GetMem.I sta Mem.ReqSize+1 +MEM.GetMem.YAX stx Mem.ReqFlags + sta Mem.ReqSize+1 tya bit #$0F 16 bytes aligned ? @@ -439,8 +450,6 @@ K.GetMemByID.A sta ZPMemMgrSPtr K.NewStr.YA >STYA .1+1 >STYA .4+1 - stz Mem.ReqFlags - ldy #0 lda #0 @@ -456,7 +465,7 @@ K.NewStr.YA >STYA .1+1 bne .3 inc -.3 jsr K.GetMem.I +.3 jsr K.GetMem.YA bcs .9 >STYA .5+1 @@ -480,95 +489,379 @@ K.NewStr.YA >STYA .1+1 clc .9 rts */-------------------------------------- -* # GetMemStat.YA -* ## In: -* Y,A = Ptr to 24 bytes buffer -* ## Out: -* Buffer filled with memory stats -*\-------------------------------------- -K.GetMemStat.YA >STYA ZPMemMgrTmp1 - - ldy #6 - -.1 lda Mem.Table,y - sta (ZPMemMgrTmp1),y - dey - bpl .1 - - - ldx #6 - ldy #14 - - sta SETREADAUX - -.2 lda Mem.Table,x - sta (ZPMemMgrTmp1),y - dey - dex - bpl .2 - - sta CLRREADAUX - - ldx #6 - ldy #22 - -.3 lda DevMgr.Stat,x - sta (ZPMemMgrTmp1),y - dey - dex - bpl .3 - - rts -*-------------------------------------- -* SList : -* Block : -* 0 hMem of next Block (0=End) -* 1....255 data records -* Record : -* 0 Flags -* 1 KeyLen+Key -* n DataLen+Data -*/-------------------------------------- * # SListNew * ## In: * ## Out: * A=hMem *\-------------------------------------- -K.SListNew +K.SListNew >LDYAI 160 40k Max before out of memory!!! + jsr K.GetMem0.YA + bcs .9 + >STYA ZPSListIndex + stx .8+1 + + >LDYAI 256 + jsr K.GetMem0.YA + bcs .9 + txa + sta (ZPSListIndex) + +.8 lda #$ff SELF MODIFIED + +.9 rts +*/-------------------------------------- +* # SListGetByID +* ## In: +* PUSHB = hSList +* PUSHW = Key Ptr +* PUSHW = Data Ptr +* PUSHW = KeyID +* ## Out: +*\-------------------------------------- +K.SListGetByID >PULLW MEM.IndexOfs + + jsr MEM.GetSListParams + + ldy MEM.IndexOfs + lda (ZPSListIndex),y + beq .9 + + jsr K.GetMemPtr.A + >STYA ZPSListBlock + + clc + rts + +.9 sec + rts */-------------------------------------- * # SListAdd * ## In: +* PUSHB = hSList +* PUSHW = Key +* PUSHW = Data Ptr * ## Out: -* A=hMem +* A=hSList *\-------------------------------------- -K.SListAdd +K.SListAdd jsr K.SListLookup.I + bcc .9 Lookup succeeded...DUP + + sta SETWRITEAUX + + ldy #0 + +.1 jsr MEM.GetKeyCharY + iny + bcc .1 + + tya + + jsr MEM.AddBlockByte + bcs .99 + + ldy #0 + +.2 jsr MEM.GetKeyCharY + bcs .3 + + jsr MEM.AddBlockByte + bcs .99 + iny + bra .2 + +.3 sta CLRREADAUX + lda (ZPSListData) + sta SETREADAUX + tax + + jsr MEM.AddBlockByte + bcs .99 + + ldy #1 + +.4 sta CLRREADAUX + lda (ZPSListData),y + sta SETREADAUX + + jsr MEM.AddBlockByte + bcs .99 + + iny + dex + bne .4 + + clc + .HS B0 BCS + +.9 sec + +.99 sta CLRWRITEAUX + sta CLRREADAUX + rts */-------------------------------------- -* # SListGet +* # SListLookup * ## In: +* PUSHB = hSList +* PUSHW = Key +* PUSHW = Data Ptr * ## Out: -* A=hMem +* Data Ptr Updated *\-------------------------------------- -K.SListGet +K.SListLookup jsr K.SListLookup.I + bcs .9 + + jsr MEM.GetBlockByte + tax + sta (ZPSListData) + + ldy #0 + +.1 jsr MEM.GetBlockByte + iny + sta (ZPSListData),y + dex + bne .1 + + sta CLRREADAUX + clc +.9 rts +*-------------------------------------- +K.SListLookup.I jsr MEM.GetSListParams + + lda (ZPSListIndex) + beq .9 + + jsr K.GetMemPtr.A + >STYA ZPSListBlock + stz MEM.BlockOfs + + jsr MEM.GetBlockByte + beq .9 + + tax + +.1 ldy #0 + +.2 jsr MEM.GetKeyCharY + bcs .4 + iny + sta .3+1 + + jsr MEM.GetBlockByte +.3 cmp #$ff SELF MODIFIED + bne .4 + + dex + bne .2 + + clc + rts + +.4 jsr MEM.GetBlockByte skip remaining key chars + dex + bne .4 + + jsr MEM.GetBlockByte get Data Len + tax + +.5 jsr MEM.GetBlockByte skip data bytes + dex + bne .5 + + tax + bne .1 + +.9 sec + rts */-------------------------------------- -* # SListPut +* # SListUpdate * ## In: +* PUSHB = hSList +* PUSHW = Key +* PUSHW = Data Ptr * ## Out: -* A=hMem *\-------------------------------------- -K.SListPut +K.SListUpdate jsr K.SListLookup.I + bcs .9 + + ldy #0 + + sta CLRREADAUX + lda (ZPSListData) + sta SETREADAUX + tax + + jsr MEM.SetBlockByte + bcs .99 + + ldy #1 + +.4 sta CLRREADAUX + lda (ZPSListData),y + sta SETREADAUX + + jsr MEM.SetBlockByte + bcs .99 + + iny + dex + bne .4 + + clc + .HS B0 BCS + +.9 sec + +.99 sta CLRWRITEAUX + sta CLRREADAUX + rts */-------------------------------------- * # SListFree * ## In: +* A=hSList * ## Out: -* A=hMem *\-------------------------------------- -K.SListFree - - - +K.SListFree.A sta .8 + sta SETREADAUX + sta SETWRITEAUX + + jsr K.GetMemPtr.A + >STYA .1+1 + + ldx #0 + +.1 lda $ffff,x SELF MODIFIED + beq .8 + jsr K.FreeMem.A + inx + bra .1 + +.8 lda #$ff SELF MODIFIED + jsr K.FreeMem.A + sta CLRWRITEAUX + sta CLRREADAUX + rts *-------------------------------------- -MEM.SList.Next +MEM.GetSListParams + >PULLW ZPSListData + >PULLW ZPSListKey + >PULLA + + sta SETREADAUX + + jsr K.GetMemPtr.A + >STYA ZPSListIndex + rts +*-------------------------------------- +MEM.GetKeyCharY sta CLRREADAUX + lda (ZPSListKey),y + sta SETREADAUX + beq .9 + + cmp #'0' + bcc .9 + cmp #'9'+1 + bcc .8 + + cmp #'A' + bcc .9 + cmp #'Z'+1 + bcc .8 + + cmp #'a' + bcc .9 + cmp #'z'+1 + bcc .8 + + cmp #'.' + bne .9 + + cmp #'_' + bne .9 + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +MEM.GetBlockByte + phy + ldy MEM.BlockOfs + lda (ZPSListBlock),y + inc MEM.BlockOfs + bne .8 + + pha + ldy MEM.IndexOfs + lda (ZPSListIndex),y + beq .9 + + jsr K.GetMemPtr.A + >STYA ZPSListBlock +* stz MEM.BlockOfs + + pla + +.8 ply + clc + rts + +.9 pla + ply + sec + rts +*-------------------------------------- +MEM.AddBlockByte + phy + ldy MEM.BlockOfs + sta (ZPSListBlock),y + inc MEM.BlockOfs + bne .8 + + inc MEM.IndexOfs + + >LDYAI 256 + jsr K.GetMem0.YA + bcs .9 + >STYA ZPSListBlock + txa + ldy MEM.IndexOfs + sta (ZPSListIndex),y + +* stz MEM.BlockOfs + +.8 ply + clc + rts + +.9 ply + sec + rts +*-------------------------------------- +MEM.SetBlockByte + phy + ldy MEM.BlockOfs + sta (ZPSListBlock),y + inc MEM.BlockOfs + bne .8 + + inc MEM.IndexOfs + + ldy MEM.IndexOfs + lda (ZPSListIndex),y + + jsr K.GetMemPtr.A + >STYA ZPSListBlock +* stz MEM.BlockOfs + +.8 ply + clc + rts +*-------------------------------------- +MEM.IndexOfs .BS 1 +MEM.BlockOfs .BS 1 */-------------------------------------- * # LoadStkObj * Load a file in AUX memory (Stock Objects) @@ -587,7 +880,7 @@ K.LoadStkObj >SYSCALL LoadFile stx .8+1 Save MAIN hMem >STYA A2L Save LEN temporarly - jsr K.GetMemAux.YA + jsr K.NewStkObj.YA bcs .9 stx .80+1 >STYA A4L Save Destination Address in AUX diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 29f94376..1d7fa792 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -315,9 +315,8 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path .HS 2C bit abs .3 lda #0 - >PUSHYA - >PUSHBI S.MEM.F.ALIGN - jsr K.GetMem + ldx #S.MEM.F.ALIGN + jsr MEM.GetMem.YAX bcs .9 ldy #S.PS.ZP+5 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 17ef03f6..1e8f52f9 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -1049,9 +1049,9 @@ STDIO.SetMLIPathYA >STYA K.MLI.PARAMS+1 rts *-------------------------------------- -STDIO.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF - >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE - jsr K.GetMem +STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF + ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE + jsr MEM.GetMem.YAX bcs .9 >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call