Kernel 0.9.1 : Kernel/memory REORG for more IO buffers & room in LC for DHGR.DRV

This commit is contained in:
Rémy GIBERT 2017-11-22 17:27:50 +01:00
parent b25be9cee0
commit f7b519729b
14 changed files with 234 additions and 244 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -442,10 +442,7 @@ ClrScr stz CH
ldx #23
.1 lda BASEL,x
sta ZPBaseL1
lda BASEH,x
sta ZPBaseL1+1
.1 jsr SETUP.L1X
lda #" "
@ -486,16 +483,12 @@ LF ldy CV
*--------------------------------------
SCROLL.UP ldx SCROLLTOP
.1 lda BASEL,x
sta ZPBaseL1
lda BASEH,x
sta ZPBaseL1+1
inx
lda BASEL,x
sta ZPBaseL2
lda BASEH,x
sta ZPBaseL2+1
.1 jsr SETUP.L1X
inx
jsr SETUP.L2X
jsr COPY.L2toL1
cpx SCROLLBOT
@ -525,15 +518,11 @@ CLR sty .2+1
*--------------------------------------
SCROLL.DN ldx SCROLLBOT
.1 lda BASEL,x
sta ZPBaseL1
lda BASEH,x
sta ZPBaseL1+1
.1 jsr SETUP.L1X
dex
lda BASEL,x
sta ZPBaseL2
lda BASEH,x
sta ZPBaseL2+1
jsr SETUP.L2X
jsr COPY.L2toL1
@ -751,6 +740,18 @@ GetCharAtXY php
plp
rts
*--------------------------------------
SETUP.L1X lda BASEL,x
sta ZPBaseL1
lda BASEH,x
sta ZPBaseL1+1
rts
*--------------------------------------
SETUP.L2X lda BASEL,x
sta ZPBaseL2
lda BASEH,x
sta ZPBaseL2+1
rts
*--------------------------------------
COPY.L2toL1 php
sei
sta SETWRITEAUX

View File

@ -87,35 +87,36 @@ A2osX.SaveSX .EQ $101 Aux
*--------------------------------------
K.S.STAT .EQ $0300 S.STAT for internal kernel operations
K.S.DSTAT .EQ $0340 S.DSTAT=25 or higher depends on dev type
K.SP.PARAMS .EQ $0380 Max 9 bytes
K.MLI.PARAMS .EQ $0390 Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now)
K.MLI.PATH .EQ $03B0 64+1 -> $03F0
K.SP.PARAMS .EQ $0360 Max 9 bytes
K.MLI.PATH .EQ $0369 64+1
K.MLI.PARAMS .EQ $03AA Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now)
*--------------------------------------
K.STACKTOP .EQ $03EF down to $3E0
*--------------------------------------
*** $3F0-$3FF IRQ Handler.... ***
*--------------------------------------
* Main/Aux $400 -> $7FF : TXT PAGE1 System Screen
* Main/Aux $800 -> $BFF : TXT PAGE2 Console Screen
*--------------------------------------
* free $0C00->$17FF = $C00 (3072) Aux
* free $0C00->$17FF = $C00 (3072) Aux
*--------------------------------------
K.Buf256 .EQ $0C00 Main
*--------------------------------------
PS.Table.PID .EQ $0D00 K.PS.MAX
PS.Table.hMem .EQ $0D20 K.PS.MAX
*--------------------------------------
Evt.Table .EQ $0D40 K.EVT.MAX*S.EVT.SIZE=8*8=64b
*--------------------------------------
Flt.Table .EQ $0D80 K.FLT.MAX*S.FLT.SIZE=4*32=128b
*--------------------------------------
Dev.Table .EQ $0E00 K.DEV.MAX*S.DEV=32*16=512b
*--------------------------------------
*** Z80 Reserved $1000-10FF***
*--------------------------------------
Z80JMP .EQ $1000 (00000h) Up To $10FF
Z80STACK .EQ $10FF (000FFh) Down to $1000
*--------------------------------------
PS.Table.PID .EQ $1100 K.PS.MAX
PS.Table.hMem .EQ $1120 K.PS.MAX
*--------------------------------------
Evt.Table .EQ $1140 K.EVT.MAX*S.EVT.SIZE=8*8=64b
*--------------------------------------
Flt.Table .EQ $1180 K.FLT.MAX*S.FLT.SIZE=4*32=128b
*--------------------------------------
K.STACKTOP .EQ $12FF down to $1200
*--------------------------------------
K.Buf256 .EQ $1300 Main
K.IOBuf512 .EQ $1400 Main
*--------------------------------------
Dev.Table .EQ $1600 K.DEV.MAX*S.DEV=32*16=512b
* CORE $1100->$17FF = $700 Main
*--------------------------------------
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
*--------------------------------------

View File

@ -235,18 +235,53 @@ BIN.Find.ENV.LIB >CSTR "LIB"
* X = hMem of Code Segment
*--------------------------------------
BIN.Load.YA >STYA BIN.CmdLine
>STYA .2+1
ldx Mem.LastSlot
beq BIN.Load.YA.1
jsr MEM.GetMemByNameYA
bcs BIN.Load.YA.1 not already loaded
>LDYAI Mem.Table
>STYA ZPPtr1
>STYA ZPPtr1 Save base address
ldx #0
.1 lda (ZPPtr1)
bpl .6 In Use?
ldy #S.MEM.BIN any BIN PATH in this slot?
lda (ZPPtr1),y
beq .6
jsr K.GetMemPtr.A get pathname
>STYA .3+1
ldy #0
.2 lda $ffff,y SELF MODIFIED
.3 cmp $ffff,y SELF MODIFIED
bne .6
iny
ora #0
bne .2
ldy #S.MEM.REFCNT
lda (ZPPtr1),y
inc
sta (ZPPtr1),y
sta (ZPPtr1),y
txa
jmp K.GetMemPtr.A X=hMem from K.GetMemByNameA
.6 lda ZPPtr1
clc
adc #S.MEM
sta ZPPtr1
bcc .7
inc ZPPtr1+1
.7 inx
cpx Mem.LastSlot
bne .1
*--------------------------------------
BIN.Load.YA.1 >PUSHWI K.S.STAT
>PUSHW BIN.CmdLine

View File

@ -7,6 +7,7 @@ AUTO 6
CORE.Run lda CORE.PSCount
sta CORE.Counter
bne .1 SHOULD NEVER HAPPEN!!!
jmp CORE.Events
.1 ldx CORE.Counter
@ -334,6 +335,7 @@ CORE.GetPSByID.A
lda PS.TABLE.hMem-1,y
jmp K.GetMemPtr.A
.9 rts
*--------------------------------------
CORE.GetPSStatus.A
ldy CORE.PSCount
beq .9

View File

@ -5,15 +5,23 @@ INC 1
AUTO 6
* CONTROL SECTION :
.LIST ON
*--------------------------------------
A2osX.CORE.S .EQ A2osX.GP-A2osX.CORE
A2osX.GP.S .EQ A2osX.D1-A2osX.GP
A2osX.D1.S .EQ A2osX.D2-A2osX.D1
A2osX.D2.S .EQ A2osX.E0-A2osX.D2
A2osX.E0.S .EQ A2osX.E0.E-A2osX.E0
*--------------------------------------
.DO A2osX.CORE.S>$700
* ERROR:CORE too big
.FIN
.DO A2osX.D1.S>$1000
* ERROR:BNK1 too big
.FIN
.DO A2osX.D2.S>$1000
* ERROR:BNK2 too big
.FIN
*--------------------------------------
.LIST OFF
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.CTRL

View File

@ -29,9 +29,31 @@ A2osX.DIIDrv.S >LDYAI A2osx.DII.Stat
clc
rts
*--------------------------------------
A2osX.DIIDrv.RW >STYA GO.RW.SrcDst+1
A2osX.DIIDrv.RW >STYA A2osX.RW.SrcDst+1
jsr A2osX.Blk.GetCmdAndDevAX
jmp GO.DiskII.RW
*--------------------------------------
ldy #$D0
.HS 2C bit abs
A2osX.RamDrv.RW1
ldy #$FF
sty A2osX.RW.Drv+2
jsr GO.ProDOS
stx $42
sta $43
ldy #3
A2osX.RW.SrcDst lda $ffff,y Self Modified
sta $44,y
dey
bpl A2osX.RW.SrcDst
A2osX.RW.Drv jsr $0000
cli
jsr GO.A2osX
rts
*--------------------------------------
A2osx.DII.Stat .DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ
.DA 280
@ -64,7 +86,11 @@ A2osX.RamDrv .DA A2osX.RamDrv.S status
.DA A2osX.BadCall
*--------------------------------------
A2osX.RamDrv.S jsr A2osX.Blk.GetCmdAndDevAX
jsr GO.RamDrv.S
jsr GO.ProDOS
stx $42
sta $43
jsr $FF00
jsr GO.A2osX
bcs .9
stx A2osx.RamDrv.Stat+S.DSTAT.SIZE
sty A2osx.RamDrv.Stat+S.DSTAT.SIZE+1
@ -73,9 +99,9 @@ A2osX.RamDrv.S jsr A2osX.Blk.GetCmdAndDevAX
clc
.9 rts
*--------------------------------------
A2osX.RamDrv.RW >STYA GO.RW.SrcDst+1
A2osX.RamDrv.RW >STYA A2osX.RW.SrcDst+1
jsr A2osX.Blk.GetCmdAndDevAX
jmp GO.RamDrv.RW
bra A2osX.RamDrv.RW1
*--------------------------------------
A2osx.RamDrv.Stat
.DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ
@ -294,13 +320,9 @@ DevMgr.SYS.Code .DA .1 STATUS
.DA #0
.DA $0900
*--------------------------------------
DevMgr.SYS.Open stz DevMgr.SYS.CH
stz DevMgr.SYS.CV
DevMgr.SYS.Open lda #1
sta A2osX.SCRNDEVS
jsr DevMgr.SYS.Home
lda #1
sta A2osX.SCRNDEVS fall in Control
*--------------------------------------
DevMgr.SYS.Control
sta SETTEXT
@ -336,25 +358,25 @@ DevMgr.SYS.Write
phx
phy
cmp #' '
bcc .1
ldy DevMgr.SYS.CH
ldx DevMgr.SYS.CV
ora #$80
jsr DevMgr.SYS.SetCharAtYX
jsr DevMgr.SYS.FSOut
bra .8
bcs .7
.1 cmp #10
bne .2
cmp #10
bne .1
jsr DevMgr.SYS.LF
bra .8
.2 cmp #13
bne .3
.1 cmp #13
bne .2
jsr DevMgr.SYS.CR
bra .8
.3 ora #$20
.2 ora #$20
.HS 2C BIT ABS
.7 ora #$80
ldy DevMgr.SYS.CH
ldx DevMgr.SYS.CV
jsr DevMgr.SYS.SetCharAtYX
jsr DevMgr.SYS.FSOut
@ -397,32 +419,23 @@ DevMgr.SYS.ClrEOL
*--------------------------------------
DevMgr.SYS.Scroll
ldx #1
.1 lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
.1 jsr DevMgr.SYS.SetBaseX
inx
lda DevMgr.SYS.BASEL,x
sta ZPDRV+2
lda DevMgr.SYS.BASEH,x
sta ZPDRV+3
ldy #39
php
sei
* sta SET80STORE
* sta SETPAGE2
ldy #39
.2 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .2
sta SETWRITEAUX
jsr DevMgr.SYS.ScrollAux
sta CLRWRITEAUX
* sta CLRPAGE2
* sta CLR80STORE
plp
ldy #39
@ -436,10 +449,7 @@ DevMgr.SYS.Scroll
bne .1 Fall in ClrLineAtX for last line
*--------------------------------------
DevMgr.SYS.ClrLineAtX
lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
jsr DevMgr.SYS.SetBaseX
lda #$A0
ldy #39
@ -447,17 +457,12 @@ DevMgr.SYS.ClrLineAtX
php
sei
* sta SET80STORE
.1
* sta SETPAGE2
.1 sta SETWRITEAUX
sta (ZPDRV),y
* sta CLRPAGE2
sta CLRWRITEAUX
sta (ZPDRV),y
dey
bpl .1
* sta CLR80STORE
plp
@ -484,10 +489,7 @@ DevMgr.SYS.SetCharAtYX
.1 phy
pha
lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
jsr DevMgr.SYS.SetBaseX
tya
lsr
tay
@ -496,17 +498,11 @@ DevMgr.SYS.SetCharAtYX
bcs .2
php
sei
sta SET80STORE
* sta SETPAGE2
sta SETWRITEAUX
sta (ZPDRV),y
* sta CLRPAGE2
sta CLR80STORE
sta CLRWRITEAUX
plp
ply
rts
@ -515,15 +511,19 @@ DevMgr.SYS.SetCharAtYX
ply
rts
*--------------------------------------
DevMgr.SYS.SetBaseX
lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
rts
*--------------------------------------
DevMgr.SYS.CH .BS 1
DevMgr.SYS.CV .BS 1
*--------------------------------------
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 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
*--------------------------------------
.LIST ON
DevMgr.FreeMem .EQ *
.LIST OFF
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.D01
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -43,6 +43,8 @@ AUTO 6
rts
*--------------------------------------
jmp (pDev) pDevJmp
*--------------------------------------
* SLEEP
*--------------------------------------
pla get PC LO
sec
@ -159,35 +161,6 @@ GP.MLICall stx .1
jsr GO.A2osX
rts
*--------------------------------------
GO.RamDrv.S jsr GO.ProDOS
stx $42
sta $43
jsr $FF00
jsr GO.A2osX
rts
*--------------------------------------
GO.DiskII.RW ldy #$D0
.HS 2C bit abs
GO.RamDrv.RW ldy #$FF
sty GO.RW.Drv+2
jsr GO.ProDOS
stx $42
sta $43
ldy #3
GO.RW.SrcDst lda $ffff,y Self Modified
sta $44,y
dey
bpl GO.RW.SrcDst
GO.RW.Drv jsr $0000
cli
jsr GO.A2osX
rts
*--------------------------------------
GO.ProDOS pha
lda $D000 We re coming from AUXLC, saving bank...
sta GO.A2osX.BNK+1

View File

@ -26,11 +26,25 @@ Kernel.Init sei
Kernel.Init2 >LDAXI MSG.Init2
jsr PrintFAX
>LDAXI MSG.CORE
jsr PrintFAX
>LDYAI A2osX.CORE
>STYA ZPPtr1
>LDYAI CORE.Run
>STYA ZPPtr2
>LDYAI A2osX.CORE.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
>LDAXI MSG.GP
jsr PrintFAX
>LDYAI A2osX.GP
>STYA ZPPtr1
>LDYAI A2osX.SYSCALL
>STYA ZPPtr2
>LDYAI A2osX.D1-A2osX.GP^$FFFF
>LDYAI A2osX.GP.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
@ -47,7 +61,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>STYA ZPPtr1
>LDYAI $D000
>STYA ZPPtr2
>LDYAI A2osX.E0-A2osX.D2^$FFFF
>LDYAI A2osX.D2.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
@ -64,7 +78,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>STYA ZPPtr1
>LDYAI $D000
>STYA ZPPtr2
>LDYAI A2osX.D2-A2osX.D1^$FFFF
>LDYAI A2osX.D1.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
@ -81,7 +95,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>STYA ZPPtr1
>LDYAI $E000
>STYA ZPPtr2
>LDYAI A2osX.E0.E-A2osX.E0^$FFFF
>LDYAI A2osX.E0.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
@ -1013,7 +1027,9 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL PutEnv.YA
.9 rts
*--------------------------------------
MSG.Init2 >CSTR "A2osX[Stage2]:Init\nInstalling KERNEL...\n - $BE00 Global Page...\n"
MSG.Init2 >CSTR "A2osX[Stage2]:Init\nInstalling KERNEL...\n"
MSG.CORE >CSTR " - $1100 Core...\n"
MSG.GP >CSTR " - $BD00 Global Page...\n"
MSG.D1 >CSTR " - $D000 Bank1...\n"
MSG.D2 >CSTR " - $D000 Bank2...\n"
MSG.E0 >CSTR " - $E000...\n"
@ -1065,7 +1081,7 @@ STARTUP.CMDLINE >CSTR "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
*--------------------------------------
MLIOPEN00 .DA #3
.DA A2OSXCONF
.DA $1000
.DA $B000
.BS 1
A2OSXCONF >PSTR "A2osX.KCONFIG"
*--------------------------------------

View File

@ -435,6 +435,17 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA 0
.DA 0
*--------------------------------------
DevMgr.SYS.ScrollAux
sta SETREADAUX
.1 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .1
sta CLRREADAUX
rts
*--------------------------------------
PullP1P2P3 sec
.HS 90 bcc
PullP1P2 clc

View File

@ -32,7 +32,7 @@ Mem.ReqFlags .EQ ZPMEMMGR+6 store requested Flags
* CS :
* A = EC
*\--------------------------------------
K.GetMem >PULLB Mem.ReqFlags store requested flags
K.GetMem >PULLB Mem.ReqFlags store requested flags
>PULLA get requested size LO
tay
@ -113,7 +113,7 @@ K.GetMem.I tya
.3 ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y get LEN of this block
cmp Mem.ReqSize compare with requested size
cmp Mem.ReqSize compare with requested size
bne .4
iny
@ -136,14 +136,15 @@ K.GetMem.I tya
tay no, reserve a free slot to fill gap
lda #0
jsr Mem.AddSlot X = new slot
jsr Mem.AddSlot X = new slot
bcs .9
.6 >LDYA Mem.ReqSize
jsr Mem.AddSlot X = new slot
jsr Mem.AddSlot X = new slot
bcs .9
*-------------- Reuse this SLOT
.7 lda Mem.ReqFlags get requested flags
ora #S.MEM.F.INUSE mark as in use
sta (ZPMemMgrSPtr)
@ -151,8 +152,38 @@ K.GetMem.I tya
and #S.MEM.F.INIT0
beq .8
jsr Mem.Init0 X not modified
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta .12+1
iny
lda (ZPMemMgrSPtr),y
sta .12+2
lda Mem.ReqSize
eor #$ff
tay y=not lo count
lda Mem.ReqSize+1
eor #$ff a=not hi count
phx
ldx #0
.11 iny
bne .12
inc
beq .13
.12 stz $ffff,x
inx
bne .11
inc .12+2
bra .11
.13 plx
.8 lda #0
ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y
@ -222,11 +253,8 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
rts
.98 pla discard new Mem.Free HI
lda #K.E.OOM
sec
rts
.99 lda #K.E.OOH
.99 lda #K.E.OOM
sec
rts
*--------------------------------------
@ -237,41 +265,6 @@ Mem.NextSlot lda ZPMemMgrSPtr
bcc .8
inc ZPMemMgrSPtr+1
.8 rts
*--------------------------------------
Mem.Init0 ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta .2+1
iny
lda (ZPMemMgrSPtr),y
sta .2+2
ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y
eor #$ff
pha
iny
lda (ZPMemMgrSPtr),y
eor #$ff a=not hi count
ply y=not lo count
phx
ldx #0
.1 iny
bne .2
inc
beq .8
.2 stz $ffff,x
inx
bne .1
inc .2+2
bne .1
.8 plx
rts
*/--------------------------------------
* # FreeMem.A
* ## In:
@ -603,60 +596,6 @@ K.GetMemStat.YA >STYA ZPMemMgrTmp1
rts
*--------------------------------------
* In:
* Y,A = BINPATH (C-String)
* Out:
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X = hMem
*--------------------------------------
MEM.GetMemByNameYA
ldx Mem.LastSlot
beq .9
>STYA .2+1
>LDYAI Mem.Table
>STYA ZPMemMgrTmp1
ldx #0
.1 lda (ZPMemMgrTmp1)
bpl .6 In Use?
ldy #S.MEM.BIN any BIN PATH in this slot?
lda (ZPMemMgrTmp1),y
beq .6
jsr K.GetMemPtr.A get pathname
>STYA .3+1
ldy #0
.2 lda $ffff,y
.3 cmp $ffff,y
bne .6
iny
ora #0
bne .2
>LDYA ZPMemMgrTmp1
clc
rts
.6 lda ZPMemMgrTmp1
clc
adc #S.MEM
sta ZPMemMgrTmp1
bcc .7
inc ZPMemMgrTmp1+1
.7 inx
cpx Mem.LastSlot
bne .1
.9 sec
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -17,7 +17,10 @@ AUTO 6
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT
.INB /A2OSX.SRC/X.PRINTF.S
A2osX.CORE .PH $1100
.INB /A2OSX.SRC/SYS/KERNEL.S.CORE
.INB /A2OSX.SRC/SYS/KERNEL.S.D01
.EP
A2osX.GP .PH $BD00
.INB /A2OSX.SRC/SYS/KERNEL.S.GP
.EP
@ -43,10 +46,11 @@ A2osX.D2 .PH $D000
.EP
A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP
.INB /A2OSX.SRC/SYS/KERNEL.S.CORE
.INB /A2OSX.SRC/SYS/KERNEL.S.IRQ
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM
.INB /A2OSX.SRC/SYS/KERNEL.S.D01
.LIST ON
DevMgr.FreeMem .EQ *
.LIST OFF
.EP
A2osX.E0.E .EQ *
.INB /A2OSX.SRC/SYS/KERNEL.S.CTRL