Kernel version 0.9 : saved few bytes with MemMgr Optimization

This commit is contained in:
Rémy GIBERT 2017-07-01 15:44:40 +02:00
parent 915226f209
commit e9062c4674
13 changed files with 85 additions and 101 deletions

View File

@ -4,16 +4,6 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
PullPtr1Ptr2Ptr3
sec
.HS 90 bcc
PullPtr1Ptr2 clc
>PULLW ZPPtr1
>PULLW ZPPtr2
bcc .9
>PULLW ZPPtr3
.9 rts
*--------------------------------------
* Convert HEXBUF to ASCBUF decimal padded with 0 * Convert HEXBUF to ASCBUF decimal padded with 0
*-------------------------------------- *--------------------------------------
HEX2DEC ldx #4 HEX2DEC ldx #4

View File

@ -71,14 +71,14 @@ A2osX.PrtDrv.Cnt
.HS 03030301030101010404 .HS 03030301030101010404
*-------------------------------------- *--------------------------------------
DevMgr.NUL.Code .DA .1 STATUS DevMgr.NUL.Code .DA .1 STATUS
.DA DevMgr.BADCALL READBLOCK .DA A2osX.BADCALL READBLOCK
.DA DevMgr.BADCALL WRITEBLOCK .DA A2osX.BADCALL WRITEBLOCK
.DA DevMgr.BADCALL FORMAT .DA A2osX.BADCALL FORMAT
.DA DevMgr.BADCALL CONTROL .DA A2osX.BADCALL CONTROL
.DA DevMgr.BADCALL INIT .DA A2osX.BADCALL INIT
.DA DevMgr.BADCALL OPEN .DA A2osX.BADCALL OPEN
.DA DevMgr.BADCALL CLOSE .DA A2osX.BADCALL CLOSE
.DA DevMgr.BADCALL READ .DA A2osX.BADCALL READ
.DA .8 WRITE .DA .8 WRITE
.8 clc .8 clc
rts rts
@ -95,13 +95,13 @@ DevMgr.NUL.Code .DA .1 STATUS
.DA $0900 .DA $0900
*-------------------------------------- *--------------------------------------
DevMgr.SYS.Code .DA .1 STATUS DevMgr.SYS.Code .DA .1 STATUS
.DA DevMgr.BADCALL READBLOCK .DA A2osX.BADCALL READBLOCK
.DA DevMgr.BADCALL WRITEBLOCK .DA A2osX.BADCALL WRITEBLOCK
.DA DevMgr.BADCALL FORMAT .DA A2osX.BADCALL FORMAT
.DA DevMgr.SYS.Control .DA DevMgr.SYS.Control
.DA DevMgr.BADCALL INIT .DA A2osX.BADCALL INIT
.DA DevMgr.SYS.Open .DA DevMgr.SYS.Open
.DA DevMgr.BADCALL CLOSE .DA A2osX.BADCALL CLOSE
.DA DevMgr.SYS.Read .DA DevMgr.SYS.Read
.DA DevMgr.SYS.Write .DA DevMgr.SYS.Write
*-------------------------------------- *--------------------------------------
@ -341,10 +341,6 @@ DevMgr.SYS.TITLE >CSTR "A2osX System Screen"
DevMgr.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 DevMgr.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
DevMgr.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B DevMgr.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B
*-------------------------------------- *--------------------------------------
DevMgr.BADCALL lda #MLI.ERR.BADCALL
sec
rts
*--------------------------------------
DevMgr.FreeMem .EQ * DevMgr.FreeMem .EQ *
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.D01 SAVE /A2OSX.SRC/SYS/KERNEL.S.D01

View File

@ -117,9 +117,8 @@ K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME
jsr pDevJmp jsr pDevJmp
bcs .9 bcs .9
>PUSHWI S.NODE.DEV >LDYAI S.NODE.DEV
>PUSHBI S.MEM.F.INIT0 jsr K.GetMem0YA
jsr K.GetMem
bcs .9 bcs .9
>STYA ZPPtr3 Ptr3=S.NODE >STYA ZPPtr3 Ptr3=S.NODE
@ -158,9 +157,8 @@ K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME
* Y,A = pFILE * Y,A = pFILE
*\-------------------------------------- *\--------------------------------------
K.MkNodA sta .1+1 K.MkNodA sta .1+1
>PUSHWI S.NODE.SSOCK >LDYAI S.NODE.SSOCK
>PUSHBI S.MEM.F.INIT0 jsr K.GetMem0YA
jsr K.GetMem
bcs .9 bcs .9
>STYA ZPPtr1 >STYA ZPPtr1
@ -183,16 +181,14 @@ K.MkNodA sta .1+1
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.MKFIFO >PUSHWI 256 K.MKFIFO >LDYAI 256
>PUSHBI 0 jsr K.GetMemYA
jsr K.GetMem
bcs .99 bcs .99
stx .1+1 save FIFO buffer stx .1+1 save FIFO buffer
>PUSHWI S.NODE.FIFO >LDYAI S.NODE.FIFO
>PUSHBI S.MEM.F.INIT0 jsr K.GetMem0YA
jsr K.GetMem
bcs .9 bcs .9

View File

@ -17,9 +17,8 @@ K.OpenDirYA jsr PFT.CheckPathYA
>STYA ZPPtr2 >STYA ZPPtr2
>STYA K.MLI.PARAMS+1 For GETFILEINFO,MLIOPEN >STYA K.MLI.PARAMS+1 For GETFILEINFO,MLIOPEN
>PUSHWI S.NODE.DIR >LDYAI S.NODE.DIR
>PUSHBI S.MEM.F.INIT0 jsr K.GetMem0YA
jsr K.GetMem
bcs .99 bcs .99
>STYA ZPPtr1 >STYA ZPPtr1
@ -216,9 +215,8 @@ K.ReadDirA.ROOT ldy #S.NODE.DIR.FC did we already returned something ?
*-------------------------------------- *--------------------------------------
K.ReadDirA.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF K.ReadDirA.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
>PUSHWI 512 Get a 512 bytes buffer for reading dir... >LDYAI 512 Get a 512 bytes buffer for reading dir...
>PUSHBI 0 jsr K.GetMemYA
jsr K.GetMem
bcs .99 bcs .99
stx K.ReadDirA.hMem stx K.ReadDirA.hMem
@ -427,9 +425,8 @@ K.ReadDirA.CLN pha
rts rts
*-------------------------------------- *--------------------------------------
K.ReadDirA.GetBuf K.ReadDirA.GetBuf
>PUSHW K.ReadDirA.BufSize Get a BufSize bytes buffer for storing results >LDYA K.ReadDirA.BufSize Get a BufSize bytes buffer for storing results
>PUSHBI S.MEM.F.INIT0 make sure 0 filled jsr K.GetMem0YA make sure 0 filled
jsr K.GetMem
bcs .9 bcs .9
stx K.ReadDirA.hDIRENT stx K.ReadDirA.hDIRENT
>STYA ZPPtr4 >STYA ZPPtr4

View File

@ -56,9 +56,8 @@ K.FOpen jsr PFT.CheckPathSTK
bcc K.FOpen.10 bcc K.FOpen.10
K.FOpen.9 rts K.FOpen.9 rts
K.FOpen.10 >PUSHWI S.NODE.REG K.FOpen.10 >LDYAI S.NODE.REG
>PUSHBI S.MEM.F.INIT0 jsr K.GetMem0YA
jsr K.GetMem
bcs K.FOpen.9 bcs K.FOpen.9
>STYA ZPPtr1 >STYA ZPPtr1

View File

@ -141,9 +141,8 @@ K.LoadFile lda (pStack) read PTR.LO on top of stack
ora K.S.STAT+S.STAT.SIZE+2 ora K.S.STAT+S.STAT.SIZE+2
bne .11 bne .11
>PUSHW K.S.STAT+S.STAT.SIZE push len >LDYA K.S.STAT+S.STAT.SIZE push len
>PUSHBI 0 jsr K.GetMemYA
jsr K.GetMem
bcs .10 bcs .10
>STYA K.LoadFile.Mem >STYA K.LoadFile.Mem
stx K.LoadFile.hMem stx K.LoadFile.hMem

View File

@ -29,7 +29,13 @@ AUTO 6
*-------------------------------------- *--------------------------------------
jmp A2osX.MLICALL1 jmp A2osX.MLICALL1
*-------------------------------------- *--------------------------------------
.BS $BD10-* jmp * SPARE
*--------------------------------------
* BADCALL
*--------------------------------------
lda #MLI.ERR.BADCALL
sec
rts
*-------------------------------------- *--------------------------------------
jmp (pCode) pCodeJmp jmp (pCode) pCodeJmp
jmp (*) pLibJmp jmp (*) pLibJmp
@ -42,12 +48,12 @@ GO.Reset jsr GO.A2osX
*-------------------------------------- *--------------------------------------
* *** MUST BE REINTRANT *** * *** MUST BE REINTRANT ***
*-------------------------------------- *--------------------------------------
A2osX.SYSCALL1 bit KERNEL.SYSCALL.FLAGS,x A2osX.SYSCALL1 bit K.SYSCALL.FLAGS,x
bpl .8 in $E000, no BNK change bpl .8 in $E000, no BNK change
sta .7+1 save A (Func Arg) sta .7+1 save A (Func Arg)
lda KERNEL.SYSCALL.FLAGS+1,x Get Target BNK lda K.SYSCALL.FLAGS+1,x Get Target BNK
cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
beq .7 same as actual BNK...go restore A and JMP beq .7 same as actual BNK...go restore A and JMP
@ -71,7 +77,7 @@ A2osX.SYSCALL1 bit KERNEL.SYSCALL.FLAGS,x
.6 ldx #$FF Self Modified .6 ldx #$FF Self Modified
.7 lda #$FF Self Modified .7 lda #$FF Self Modified
.8 jmp (KERNEL.SYSCALL,x) .8 jmp (K.SYSCALL.JMP,x)
*-------------------------------------- *--------------------------------------
A2osX.LIBCALL1 pha No need to save X, K.GetMemPtrA will leave it unmodified A2osX.LIBCALL1 pha No need to save X, K.GetMemPtrA will leave it unmodified
tya Get LIB hMem in A tya Get LIB hMem in A
@ -101,7 +107,7 @@ A2osX.MLICALL1 stx .1
A2osX.DIIDrv .DA A2osX.DIIDrv.S status A2osX.DIIDrv .DA A2osX.DIIDrv.S status
.DA A2osX.DIIDrv.RW Read .DA A2osX.DIIDrv.RW Read
.DA A2osX.DIIDrv.RW Write .DA A2osX.DIIDrv.RW Write
.DA A2osX.DRV.BadCall Format .DA A2osX.BadCall Format
* .DA A2osX.DRV.BadCall * .DA A2osX.DRV.BadCall
* .DA A2osX.DRV.BadCall * .DA A2osX.DRV.BadCall
* .DA A2osX.DRV.BadCall * .DA A2osX.DRV.BadCall
@ -228,11 +234,6 @@ A2osX.Blk.GetCmdAndDevAX
rts rts
*-------------------------------------- *--------------------------------------
A2osX.DRV.BadCall
lda #MLI.ERR.BADCALL
sec
rts
*--------------------------------------
GO.ProDOS pha GO.ProDOS pha
lda $D000 We re coming from AUXLC, saving bank... lda $D000 We re coming from AUXLC, saving bank...
sta GO.A2osX.BNK+1 sta GO.A2osX.BNK+1

View File

@ -4,13 +4,11 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* $D000-D0FF KERNEL.SYSCALL Jmp Table * $D000-D0FF K.SYSCALL.JMP Jmp Table
*--------------------------------------
KERNEL.SYSCALL
*-------------------------------------- *--------------------------------------
* Bank 1 * Bank 1
*-------------------------------------- *--------------------------------------
.DA K.FileSearch $00 K.SYSCALL.JMP .DA K.FileSearch $00
.DA K.GetFullPathYA .DA K.GetFullPathYA
.DA K.LoadFile .DA K.LoadFile
.DA K.SaveFile .DA K.SaveFile
@ -100,17 +98,17 @@ KERNEL.SYSCALL
.DA K.GetMemPtrA .DA K.GetMemPtrA
.DA K.GetMemByIDA .DA K.GetMemByIDA
.DA K.GetMemYA .DA K.GetMemYA
.DA K.LoadStkObjYA .DA 0
.DA K.GetStkObjA .DA 0
.DA K.FreeStkObjA .DA 0
*-------------------------------------- *--------------------------------------
.DA K.SetLoMem $A0 .DA K.SetLoMem $A0
.DA K.GetMemStatYA .DA K.GetMemStatYA
.DA 0 .DA 0
.DA 0 .DA 0
.DA 0 .DA K.LoadStkObjYA
.DA 0 .DA K.GetStkObjA
.DA 0 .DA K.FreeStkObjA
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA K.FPutCAY $B0 .DA K.FPutCAY $B0
@ -125,9 +123,7 @@ KERNEL.SYSCALL
* LO Byte : * LO Byte :
* #RRAMWRAMBNK1 or #RRAMWRAMBNK2 * #RRAMWRAMBNK1 or #RRAMWRAMBNK2
*-------------------------------------- *--------------------------------------
KERNEL.SYSCALL.FLAGS K.SYSCALL.FLAGS .DA #$80 $00
*--------------------------------------
.DA #$80 $00
.DA #RRAMWRAMBNK1 .DA #RRAMWRAMBNK1
.DA #$80 .DA #$80
.DA #RRAMWRAMBNK1 .DA #RRAMWRAMBNK1
@ -345,6 +341,16 @@ KERNEL.SYSCALL.FLAGS
.DA 0 .DA 0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
PullPtr1Ptr2Ptr3
sec
.HS 90 bcc
PullPtr1Ptr2 clc
>PULLW ZPPtr1
>PULLW ZPPtr2
bcc .9
>PULLW ZPPtr3
.9 rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -73,6 +73,10 @@ K.GetMem >PULLB MemMgr.ReqFlags store requested flags
* CS : * CS :
* A = EC * A = EC
*\-------------------------------------- *\--------------------------------------
K.GetMem0YA ldx #S.MEM.F.INIT0
stx MemMgr.ReqFlags
.HS 2C bit abs
K.GetMemYA stz MemMgr.ReqFlags K.GetMemYA stz MemMgr.ReqFlags
sta MemMgr.ReqSize+1 sta MemMgr.ReqSize+1
tya tya

View File

@ -261,9 +261,9 @@ PS.Init >LDYA K.CreateProcess.CmdLine
beq .2 DS.SIZE=0... beq .2 DS.SIZE=0...
lda (ZPPtr4),y lda (ZPPtr4),y
>PUSHAX Push DS.SIZE tay
>PUSHBI S.MEM.F.INIT0 Clear DS txa Y,A = DS.SIZE
jsr K.GetMem jsr K.GetMem0YA
bcs .9 bcs .9
txa txa
@ -348,9 +348,8 @@ PS.Select ldy #S.PS.hCS
*-------------------------------------- *--------------------------------------
PS.DupEnvA jsr K.GetMemPtrA PS.DupEnvA jsr K.GetMemPtrA
>STYA ZPPtr1 >STYA ZPPtr1
>PUSHWI K.ENV.SIZE >LDYAI K.ENV.SIZE
>PUSHBI 0 jsr K.GetMemYA
jsr K.GetMem
bcs .9 bcs .9
>STYA ZPPtr2 >STYA ZPPtr2

View File

@ -20,9 +20,7 @@ K.NewPStrYA >STYA ZPPtr2
inc inc
tay tay
lda #0 Y,A = len of new string lda #0 Y,A = len of new string
>PUSHYA jsr K.GetMemYA
>PUSHBI 0 0 = no option
jsr K.GetMem
bcs .9 bcs .9
>STYA ZPPtr1 >STYA ZPPtr1
@ -466,14 +464,12 @@ K.PStrFTime.DEC .BS 1 always < 100
K.PStr2StrArrayYA K.PStr2StrArrayYA
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) Get mem size STRLEN+1 lda (ZPPtr1) Get mem size STRLEN+1
ldx #0
inc inc
bne .1 tay
inx
.1 >PUSHAX lda #0
>PUSHBI 0
jsr K.GetMem jsr K.GetMemYA
bcs .9 bcs .9
phx save hMem phx save hMem
phy save PTR.LO phy save PTR.LO

View File

@ -196,12 +196,13 @@ K.CTime2Time jsr PullPtr1Ptr2
bcc .3 end of DIV/MOD ? bcc .3 end of DIV/MOD ?
sta K.CTime.DWORD+3 sta K.CTime.DWORD+3
pla
sta K.CTime.DWORD+2 ldx #2
pla
sta K.CTime.DWORD+1 .21 pla
pla sta K.CTime.DWORD,x
sta K.CTime.DWORD dex
bpl .21
inc K.CTime.DivDay inc K.CTime.DivDay
bne .2 bne .2

View File

@ -52,6 +52,7 @@ A2osX.D1 .PH $D000
.INB /A2OSX.SRC/SYS/KERNEL.S.FILE .INB /A2OSX.SRC/SYS/KERNEL.S.FILE
.INB /A2OSX.SRC/SYS/KERNEL.S.DIR .INB /A2OSX.SRC/SYS/KERNEL.S.DIR
.INB /A2OSX.SRC/SYS/KERNEL.S.PFT
.INB /A2OSX.SRC/SYS/KERNEL.S.BIN .INB /A2OSX.SRC/SYS/KERNEL.S.BIN
.EP .EP
A2osX.D1.E .EQ * A2osX.D1.E .EQ *
@ -65,6 +66,7 @@ A2osX.D2 .PH $D000
.INB /A2OSX.SRC/SYS/KERNEL.S.ARG .INB /A2OSX.SRC/SYS/KERNEL.S.ARG
.INB /A2OSX.SRC/SYS/KERNEL.S.ENV .INB /A2OSX.SRC/SYS/KERNEL.S.ENV
.INB /A2OSX.SRC/SYS/KERNEL.S.CNV
.INB /A2OSX.SRC/SYS/KERNEL.S.RUN .INB /A2OSX.SRC/SYS/KERNEL.S.RUN
.INB /A2OSX.SRC/SYS/KERNEL.S.EVT .INB /A2OSX.SRC/SYS/KERNEL.S.EVT
.INB /A2OSX.SRC/SYS/KERNEL.S.TSK .INB /A2OSX.SRC/SYS/KERNEL.S.TSK
@ -76,8 +78,6 @@ A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.DAT .INB /A2OSX.SRC/SYS/KERNEL.S.DAT
.INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM .INB /A2OSX.SRC/SYS/KERNEL.S.MEM
.INB /A2OSX.SRC/SYS/KERNEL.S.PFT
.INB /A2OSX.SRC/SYS/KERNEL.S.CNV
.INB /A2OSX.SRC/SYS/KERNEL.S.CHR .INB /A2OSX.SRC/SYS/KERNEL.S.CHR
.INB /A2OSX.SRC/SYS/KERNEL.S.D01 .INB /A2OSX.SRC/SYS/KERNEL.S.D01
.EP .EP