Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-03-04 17:38:32 +01:00
parent d1d514c00d
commit 4dbbfb31cb
7 changed files with 256 additions and 73 deletions

Binary file not shown.

View File

@ -8,15 +8,21 @@ NEW
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
*--------------------------------------
PAGELEN .EQ 22
.INB INC/IO.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPPTR2 .BS 2
ZPPSPtr .BS 2
MEM.COUNT .BS 1
USED.COUNT .BS 1
bSTOP .BS 1
ZPReadAux sta SETREADAUX
lda (ZPPTR1),y
sta CLRREADAUX
rts
ZS.END
.ED
*--------------------------------------
@ -43,6 +49,7 @@ CS.START cld
L.MSG0 .DA MSG0
L.MSG1.INV .DA MSG1.INV
L.MSG1 .DA MSG1
L.MSG1X .DA MSG1X
L.MSG1.BIN .DA MSG1.BIN
L.MSG1.STR .DA MSG1.STR
L.MSG1.HEX .DA MSG1.HEX
@ -51,33 +58,38 @@ L.MSG3 .DA MSG3
.DA 0
*--------------------------------------
CS.INIT clc
rts
CS.INIT.RTS rts
*--------------------------------------
CS.RUN >LEA.G MemStat
CS.RUN ldx #ZPCodeLen-1
.1 lda ZPCode,x
sta ZPReadAux,x
dex
bpl .1
>LEA.G MemStat
>SYSCALL GetMemStat
>LDYAI Mem.Table+S.MEM
>STYA ZPPTR1
jsr CS.RUN.INIT
>LDYA L.MSG0
>SYSCALL PutS
>INC.G MEM.COUNT skip slot 0
CS.RUN.LOOP >LDA.G bSTOP
CS.RUN.LOOP inc MEM.COUNT skip slot 0
lda bSTOP
beq .1
.10 >SYSCALL GetChar
cmp #3 Ctrl-C ?
beq CS.RUN.LOOP.RTS
cmp #C.SPACE
bne .10
bcs CS.INIT.RTS
>STZ.G bSTOP
cmp #3 Ctrl-C
beq CS.INIT.RTS
cmp #$13 Ctrl-S
stz bSTOP
.1 lda (ZPPTR1)
bpl .2
>INC.G USED.COUNT
inc USED.COUNT
.2 jsr CS.RUN.PRINTMEM
lda ZPPTR1
@ -86,19 +98,79 @@ CS.RUN.LOOP >LDA.G bSTOP
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 >INC.G MEM.COUNT
.3 lda MEM.COUNT
>CMP.G MemStat+S.MSTAT.MLast
beq CS.RUN.FOOTER
bra CS.RUN.LOOP
bne CS.RUN.LOOP
CS.RUN.LOOP.RTS rts
jsr CS.RUN.MSTAT
jsr CS.RUN.INIT
CS.RUN.LOOPX inc MEM.COUNT skip slot 0
lda bSTOP
beq .1
CS.RUN.FOOTER >SYSCALL GetChar
bcs CS.RUN.LOOP.RTS
.10 >SYSCALL GetChar
bcs CS.INIT.RTS
>PUSHW L.MSG2
>PUSHB.G USED.COUNT
>PUSHB.G MEM.COUNT
cmp #3 Ctrl-C ?
beq CS.INIT.RTS
cmp #$13 Ctrl-S
bne .10
stz bSTOP
.1 ldy #S.MEM.F
jsr ZPReadAux
bpl .2
inc USED.COUNT
.2 jsr CS.RUN.PRINTMEMX
lda ZPPTR1
clc
adc #S.MEM
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 lda MEM.COUNT
>CMP.G MemStat+S.MSTAT.XLast
bne CS.RUN.LOOPX
CS.RUN.XSTAT >PUSHW L.MSG2
>PUSHB USED.COUNT
>PUSHB MEM.COUNT
>PUSHBI 2
>SYSCALL PrintF
>PUSHW L.MSG3
>PUSHW.G MemStat+S.MSTAT.XH
>PUSHW.G MemStat+S.MSTAT.XF
>PUSHW.G MemStat+S.MSTAT.XL
>LDA.G MemStat+S.MSTAT.XF
sec
>SBC.G MemStat+S.MSTAT.XL
pha
>LDA.G MemStat+S.MSTAT.XF+1
>SBC.G MemStat+S.MSTAT.XL+1
ply
>PUSHYA
>PUSHBI 8
>SYSCALL PrintF
lda #0
sec
rts
*--------------------------------------
CS.RUN.MSTAT >PUSHW L.MSG2
>PUSHB USED.COUNT
>PUSHB MEM.COUNT
>PUSHBI 2
>SYSCALL PrintF
@ -121,9 +193,19 @@ CS.RUN.FOOTER >SYSCALL GetChar
sec
rts
*--------------------------------------
CS.RUN.INIT >LDYAI Mem.Table+S.MEM skip slot 0
>STYA ZPPTR1
>LDYA L.MSG0
>SYSCALL PutS
stz MEM.COUNT
stz USED.COUNT
rts
*--------------------------------------
CS.RUN.PRINTMEM >PUSHW L.MSG1
>PUSHB.G MEM.COUNT
>PUSHB MEM.COUNT
lda (ZPPTR1) Get flags
ldy #MEM.FLAGS+7
@ -146,6 +228,7 @@ CS.RUN.PRINTMEM >PUSHW L.MSG1
ldy #S.MEM.OWNERPID
lda (ZPPTR1),y
tax
>PUSHA
ldy #S.MEM.REFCNT
@ -169,8 +252,7 @@ CS.RUN.PRINTMEM >PUSHW L.MSG1
lda (ZPPTR1) Get flags
bpl .12
ldy #S.MEM.OWNERPID
lda (ZPPTR1),y
txa
jsr CS.RUN.CHECKPS
bcc .12
@ -193,12 +275,17 @@ CS.RUN.PRINTMEM.DATA
iny
lda (ZPPTR1),y
sta ZPPTR2+1
ldy #$0
ldy #0
.1 lda (ZPPTR2),y Check if it looks like a printable string
beq .11
bmi .2
cmp #$20
bcc .2 not printable....->hex
iny
bne .1
@ -210,7 +297,8 @@ CS.RUN.PRINTMEM.DATA
>PUSHW ZPPTR2 String
>PUSHBI 3
bra CS.RUN.PRINTMEM.OUT
>SYSCALL PrintF
rts
.2 >PUSHW L.MSG1.HEX
@ -223,7 +311,9 @@ CS.RUN.PRINTMEM.DATA
>PUSHBI 16
bra CS.RUN.PRINTMEM.OUT
>SYSCALL PrintF
rts
CS.RUN.PRINTMEM.BIN
>PUSHW L.MSG1.BIN
@ -232,25 +322,83 @@ CS.RUN.PRINTMEM.BIN
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
CS.RUN.PRINTMEM.OUT
>SYSCALL PrintF
>INC.G LINE.COUNT
cmp #PAGELEN
beq .9
rts
.9 lda #$FF
>STA.G bSTOP
inc
>STA.G LINE.COUNT
*--------------------------------------
CS.RUN.PRINTMEMX
>PUSHW L.MSG1X
>PUSHB MEM.COUNT
ldy #S.MEM.F Get flags
jsr ZPReadAux
ldy #MEM.FLAGS+7
ldx #7
.20 lsr
pha
lda #'-'
bcc .30
lda MSG.FLAGS,x
.30 sta (pData),y
pla
dey
dex
bpl .20
>PUSHEA.G MEM.FLAGS
ldy #S.MEM.OWNERPID
jsr ZPReadAux
tax
>PUSHA
ldy #S.MEM.REFCNT
jsr ZPReadAux
>PUSHA
ldy #S.MEM.PTR+1
jsr ZPReadAux
>PUSHA
dey
jsr ZPReadAux
>PUSHA
ldy #S.MEM.LEN+1
jsr ZPReadAux
>PUSHA
dey
jsr ZPReadAux
>PUSHA
ldy #S.MEM.F
jsr ZPReadAux Get flags
bpl .12
txa
jsr CS.RUN.CHECKPS
bcc .12
>PUSHW L.MSG1.INV
>PUSHBI 0
>SYSCALL PrintF
.12 >PUSHBI 9
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.CHECKPS ldx #0
.1 cmp PS.Table.PID,x
beq .8
inx
cpx K.PS.MAX
bne .1
rts CS
.8 clc
@ -263,9 +411,16 @@ CS.QUIT clc
rts
*--------------------------------------
CS.END
ZPCode sta SETREADAUX
lda (ZPPTR1),y
sta CLRREADAUX
rts
ZPCodeLen .EQ *-ZPCode
*--------------------------------------
MSG0 .AZ "hMem Flags PID REF PTR LEN BINPATH/DATA"
MSG1.INV .AZ "\e[7m"
MSG1 .AZ "$%h %s %3d %3d $%H %5D "
MSG1X .AZ "$%h %s %3d %3d $%H %5D\e[0m\r\n"
MSG1.BIN .AZ "{%s}\e[0m\r\n"
MSG1.STR .AZ "[%03d:%s]\e[0m\r\n"
MSG1.HEX .AZ "?HEX:%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h\e[0m\r\n"
@ -273,16 +428,12 @@ MSG2 .AZ "\r\nAllocated hMem:%d, Total:%d\r\n"
MSG3 .AS "High Memory: $%H\r\n"
.AS "Free ULimit: $%H\r\n"
.AS "Low Memory: $%H\r\n"
.AZ "\r\nFree Memory: %D Bytes.\r\n"
.AZ "\r\nFree Memory: %D Bytes.\r\n\r\n"
MSG.FLAGS .AS "UZXAfcds"
*--------------------------------------
.DUMMY
.OR 0
DS.START
LINE.COUNT .BS 1
MEM.COUNT .BS 1
USED.COUNT .BS 1
bSTOP .BS 1
MemStat .BS S.MSTAT
MEM.FLAGS .BS 9
DS.END

View File

@ -220,11 +220,25 @@ MEM.GetMem.YAX stx MEM.ReqFlags
inc Mark this slot used by one process
ldy #S.MEM.REFCNT
sta (ZPMemMgrSPtr),y
lda RDREADAUX
pha
sta CLRREADAUX
ldy #S.PS.PID
lda (pPS),y
ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y
clc
pla
bpl .80
sta SETREADAUX
.80 clc
jmp MEM.GetMEMPTR
* A = HI PTR,Y = LO PTR,X = Current hMem
.9 rts
@ -336,7 +350,7 @@ K.FreeMem.ERR >PUSHWI K.FreeMem.MSG
.1 >SYSCALL2 printf
lda #E.INVH
* >DEBUG
>DEBUG
sec
rts
*--------------------------------------
@ -366,6 +380,7 @@ K.FreeMem tay
* bpl * ***MUST BE ALLOCATED***
lda #0 mark BINPATH slot as free
sta (ZPMemMgrSPtr)
.1 lda Mem.LastSlot
beq .8
@ -390,6 +405,7 @@ K.FreeMem tay
.8 clc
rts
.80 >LDYA Mem.HiMem
>STYA Mem.Free
clc

View File

@ -384,7 +384,7 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SH\0", K.IOBuf=/.../SCRIPT
ldy #S.PS.hSS
sta (PS.NewPSPtr),y save SS hMem in S.PS
clc Potentially CS from ADC (ZPPtr4),y
jmp Mem.SetOwner Set Ownership
jmp Mem.SetOwner Set Ownership
.9 rts
*--------------------------------------
PS.LoadGetHeader

View File

@ -445,10 +445,12 @@ SLIST.AddBlockByte
sta (ZPSListDBlkPtr),y
inc SLIST.BytePtr
bne .8
phx
>LDYAI 256
jsr K.GetMem
bcs .9
>STYA ZPSListDBlkPtr
txa
@ -458,6 +460,7 @@ SLIST.AddBlockByte
* stz SLIST.BytePtr
plx
.8 ply
clc
rts

View File

@ -137,6 +137,7 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD
* ldy #0
dey
ldx #0
.1 lda (ZPPtr2),y
beq .2
iny
@ -153,8 +154,8 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD
jsr UNISTD.Write
bcc K.PutS.RET2
tay
bpl K.PutS.RET2 IO Erorr
inc 0 = BLOCKING
bpl K.PutS.RET2 IO Error
inc FF-> 0 = BLOCKING
* sec
K.FPutS.RTS rts
*/--------------------------------------
@ -428,7 +429,7 @@ K.FWrite jsr PFT.CheckNodeA
bcc K.FWrite.RTS
K.FWrite.9 tay
bpl K.FWrite.RTS
bpl K.FWrite.RTS IO Error
dec pStack FF = NODATA
dec pStack

View File

@ -87,10 +87,11 @@ K.PrintF ldy #S.PS.hStdOut
K.FPrintf clc
jsr STDIO.GetFormat
iny
lda (pStack),y hFILE
sta PrintF.hFILE
iny
bra K.PrintF.1
*--------------------------------------
K.SPrintf stz PrintF.hFILE
@ -174,6 +175,7 @@ K.PrintF.1 sty STDIO.Exit.Cnt+1 Total bytes to POP
jsr MATH.Hex2ACC32
bcs .99
jsr SHARED.AddYToPtr2
.14 lda ACC32
bra .20
@ -182,10 +184,13 @@ K.PrintF.1 sty STDIO.Exit.Cnt+1 Total bytes to POP
.20 jsr PrintF.COut
bcc .11
*--------------------------------------
.99 jmp STDIO.Exit
.99 lda #E.BADARG
sec
jmp STDIO.Exit
*--------------------------------------
.8 ldx PrintF.hFILE
beq .80 Writing to buffer, append \0
>PUSHW PrintF.Cnt Writing to File/dev...
>PUSHWI K.IOBuf
@ -194,16 +199,16 @@ K.PrintF.1 sty STDIO.Exit.Cnt+1 Total bytes to POP
bcc .81
tay
bne .99
bne .9
>RET 4 0=BLOCKING
.80 ldy PrintF.Cnt A=0, Writing to buffer, append \0
sta (pIOBuf),y
clc
.81 >LDYA PrintF.Cnt
* clc
jmp STDIO.Exit
.9 jmp STDIO.Exit
*--------------------------------------
PrintFTBL1 .AS "bdDuefhHiILsS"
PrintFTBL1.Cnt .EQ *-PrintFTBL1
@ -453,10 +458,11 @@ K.ScanF ldy #S.PS.hStdIn
K.FScanF clc
jsr STDIO.GetFormat
iny
lda (pStack),y hFILE
sta PrintF.hFILE
iny
bra K.SScanF.1
*--------------------------------------
K.SScanF stz PrintF.hFILE
@ -584,23 +590,28 @@ K.SScanF.S ldy #$ff
K.SScanF.Fwd jmp SHARED.AddYToPtr1 Y=char count parsed
*--------------------------------------
STDIO.GetFormat lda (pStack) Bytecount
inc
tay
sty STDIO.GetStackByte.ptr+1
iny
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
bcc .1
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
iny
rts
.1 lda #K.IOBuf
@ -611,32 +622,33 @@ STDIO.GetFormat lda (pStack) Bytecount
rts
*--------------------------------------
STDIO.GetStackByte
lda (pStack)
phy
STDIO.GetStackByte.ptr
ldy #$ff SELF MODIFIED
beq .9
phy
tay
dec
sta (pStack)
lda (pStack),y
dey
sty STDIO.GetStackByte.ptr+1
ply
clc
rts
.9 lda #E.STACK
ply
sec
STDIO.GetStackByte.RTS
rts
*--------------------------------------
STDIO.Exit php
pha
lda pStack
sec +Bytecount byte
clc
STDIO.Exit.Cnt adc #$ff SELF MODIFIED
sta pStack
pla
plp
rts