Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-04 17:35:50 +02:00
parent db84c9d78c
commit 4af39d70ad
5 changed files with 439 additions and 233 deletions

Binary file not shown.

View File

@ -113,7 +113,7 @@ CSH.Run.1 cmp #'#'
bcs .9
>LDYA ZPVarID X = Exp Type
jsr CSH.SetVarValue
jsr CSH.SetVarValueFromStack
bcs .9
jsr CSH.GetChar
@ -347,7 +347,7 @@ CSH.TYPE stx ZPVarType
bcs .99
.7 >LDYA ZPVarID
jsr CSH.AddVarValue X= Type, Add value to this var
jsr CSH.AddVarValueFromStack X= Type, Add value to this var
bcs .99
jsr CSH.GetChar
@ -536,7 +536,7 @@ CSH.ExpEval ldx ZPPtr1
bcs .1
ldx ZPPtr2 var type (could be 0=any)
jsr CSH.GetVarValue Y,A = VarID, Get value on stack
jsr CSH.GetVarValueOnStack Y,A = VarID, Get value on stack
bcs .99
stx ZPPtr2 store real var type
@ -545,12 +545,13 @@ CSH.ExpEval ldx ZPPtr1
.1 lda ZPPtr2 var type
jsr CSH.fCall X = function index
bcs .99
stx ZPPtr2 store real var type
* stx ZPPtr2 store real var type
bra .11
.2 jsr CSH.IsDigit10 number ?
bcs .3
ldx ZPPtr2
jsr CSH.GetNumOnStack
bcs .99
@ -598,7 +599,8 @@ CSH.ExpEval ldx ZPPtr1
jmp .10
* Old OP has precedence, compute ACC=ARG <BOP> ACC
.6 ldx ZPPtr2+1
.6 lda ZPPtr2 Var Type
ldx ZPPtr2+1 BOP
jsr CSH.Compute
bcs .99
@ -609,6 +611,7 @@ CSH.ExpEval ldx ZPPtr1
.8 ldx ZPPtr2+1
bmi .80
lda ZPPtr2 Var Type
jsr CSH.Compute
bcc .80
bcs .99
@ -761,8 +764,7 @@ CSH.ZPPtr1AddAp1
.1 rts
*--------------------------------------
CSH.GetNumOnStack
lda ZPVarType
cmp #CSH.T.FLOAT
cpx #CSH.T.FLOAT
bcc .1
>PUSHWI ZPFileBufPtr
@ -776,7 +778,7 @@ CSH.GetNumOnStack
>PUSHWI ZPFileBufPtr
>LDYA ZPFileBufPtr
ldx ZPVarType
phx
cpx #CSH.T.UCHAR
bcc .2
@ -784,10 +786,11 @@ CSH.GetNumOnStack
bra .3
.2 >SYSCALL StrToL
.3 bcs .9
ldy ZPVarType
lda CSH.TYPESIZE,y
.3 plx
bcs .9
lda CSH.TYPESIZE,x
cmp #4
beq .8
@ -809,7 +812,7 @@ CSH.GetNumOnStack
.8 clc
.9 rts
*--------------------------------------
* Input : ZPFileBufPtr, A = Var Type, Value on Stack
* Input : ZPFileBufPtr
* Output : Y,A = ZPVarID
*--------------------------------------
CSH.AddVar >PUSHW ZPFileBufPtr
@ -833,12 +836,14 @@ CSH.AddVar >PUSHW ZPFileBufPtr
*--------------------------------------
* Y,A = VarID, X=Type
*--------------------------------------
CSH.AddVarValue sec
CSH.AddVarValueFromStack
sec
.HS 90 BCC
*--------------------------------------
* Y,A = VarID, X=Type
*--------------------------------------
CSH.SetVarValue clc
CSH.SetVarValueFromStack
clc
php
pha
@ -897,8 +902,9 @@ CSH.GetVar >PUSHW ZPFileBufPtr
* Input : Y,A = VarID, X = Var Type (or 0)
* Output : Value on Stack, X = Var Type
*--------------------------------------
CSH.GetVarValue stx ZPVarType
>DEBUG
CSH.GetVarValueOnStack
stx ZPVarType
pha
>PUSHWI 0 From Start
>PUSHWI 6 6 bytes
@ -968,8 +974,7 @@ CSH.IsValue0 cpx #CSH.T.FLOAT
*--------------------------------------
CSH.Compute jmp (J.CSH.BOPS,x)
*--------------------------------------
CSH.BOPS.ADD lda ZPVarType
cmp #CSH.T.FLOAT
CSH.BOPS.ADD cmp #CSH.T.FLOAT
beq .8
@ -977,11 +982,11 @@ CSH.BOPS.ADD lda ZPVarType
rts
.8 >FPU FADD
clc
rts
CSH.BOPS.SUB lda ZPVarType
cmp #CSH.T.FLOAT
CSH.BOPS.SUB cmp #CSH.T.FLOAT
beq .8
@ -989,10 +994,10 @@ CSH.BOPS.SUB lda ZPVarType
rts
.8 >FPU FSUB
clc
rts
CSH.BOPS.MUL lda ZPVarType
cmp #CSH.T.FLOAT
CSH.BOPS.MUL cmp #CSH.T.FLOAT
beq .8
@ -1000,10 +1005,10 @@ CSH.BOPS.MUL lda ZPVarType
rts
.8 >FPU FMULT
clc
rts
CSH.BOPS.DIV lda ZPVarType
cmp #CSH.T.FLOAT
CSH.BOPS.DIV cmp #CSH.T.FLOAT
beq .8
@ -1011,6 +1016,7 @@ CSH.BOPS.DIV lda ZPVarType
rts
.8 >FPU FDIV
clc
rts
CSH.BOPS.MOD
CSH.BOPS.SHL
@ -1216,6 +1222,7 @@ EXEC.puts >PULLYA
rts
*--------------------------------------
EXEC.cos >FPU COS
clc
rts
*--------------------------------------
EXEC.getchar >SYSCALL getchar

View File

@ -238,212 +238,6 @@ PrintF.Cnt .BS 2
PrintF.hFILE .BS 1
.ED
*--------------------------------------
* `int printf2 ( const char * format, ... );`
* `>PUSHWI format`
* `...`
* `>PUSHW IntValue`
* `>PUSHBI 2` #bytecount
* `>SYSCALL printf2`
*--------------------------------------
K.PrintF2 >LDYAI K.IOBuf
>STYA pIOBuf
ldy #S.PS.hStdOut
lda (pPs),y
sta PrintF.hFILE
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
bra K.PrintF2.1
K.FPrintf2 >LDYAI K.IOBuf
>STYA pIOBuf
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
lda (pStack),y hFILE
sta PrintF.hFILE
bra K.PrintF2.1
K.SPrintf2 lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
stz PrintF.hFILE
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
K.PrintF2.1 sty PrintF2.Exit.Cnt+1
stz PrintF.Cnt
stz PrintF.Cnt+1
lda pStack
sta pLocal
stz PrintF.LocalGetByte+1
.1 jsr SHARED.GetCharPtr2
bne .22
jmp .8 end of format..
.22 cmp #'%'
bne .10
stz K.PrintF.PadL
stz K.PrintF.PadC
lda (ZPPtr2)
beq .7 end of format... print % and exit
jsr ZP.IsDigit
bcs .6 no digit....go check specifier
cmp #'0' ...a 0...mmm... padding char?
bne .4
sta K.PrintF.PadC
jsr SHARED.NextCharPtr2 skip 0 ...
lda (ZPPtr2)
beq .7
jsr ZP.IsDigit
bcs .6 %0x ??????
.4 jsr MATH.Dec2ACC32
bcs .99
lda ACC32
sta K.PrintF.PadL
lda K.PrintF.PadC
bne .5
lda #C.SPACE
sta K.PrintF.PadC
.5 jsr SHARED.AddYToPtr2 skip all processed chars
lda (ZPPtr2)
beq .7
.6 ldx #PrintFTBL1.Cnt-1 do we have a %x command?
.61 cmp PrintFTBL1,x
beq .62
dex
bpl .61
bra .20 unknown ...
.62 jsr SHARED.NextCharPtr2
txa yes, jmp to it!
asl
tax
jsr PrintF.ESC
.11 bcc .1
bra .99
.7 lda #'%'
bra .20
*--------------------------------------
.10 cmp #'\'
bne .20
jsr SHARED.GetCharPtr2
beq .99
ldx #PrintFTBL2.Cnt-1
.12 cmp PrintFTBL2,x
beq .19
dex
bpl .12
cmp #'x' \xHH
bne .1
jsr MATH.Hex2ACC32
bcs .99
jsr SHARED.AddYToPtr2
.14 lda ACC32
bra .20
.19 lda PrintFTBL2.OUT,x
.20 jsr PrintF.COut
bcc .11
*--------------------------------------
.99 bra PrintF2.Exit
*--------------------------------------
.8 ldx PrintF.hFILE
beq .80 Writing to buffer, append \0
>PUSHW PrintF.Cnt Writing to File/dev...
>PUSHWI K.IOBuf
txa
jsr K.FWrite
bcc .81
tay
bne .99
>RET 4 0=BLOCKING
.80 ldy PrintF.Cnt A=0, Writing to buffer, append \0
sta (pIOBuf),y
.81 >LDYA PrintF.Cnt
* clc
*--------------------------------------
PrintF2.Exit php
pha
lda pStack
sec +Bytecount byte
PrintF2.Exit.Cnt
adc #$ff SELF MODIFIED
sta pStack
pla
plp
rts
*--------------------------------------
K.SPrintF stz PrintF.hFILE
>STYA pIOBuf str
jsr K.PrintF.GetFormat

404
SYS/KERNEL.S.STDIO2.S.txt Normal file
View File

@ -0,0 +1,404 @@
NEW
AUTO 3,1
*--------------------------------------
K.PrintF2 >LDYAI K.IOBuf
>STYA pIOBuf
ldy #S.PS.hStdOut
lda (pPs),y
sta PrintF.hFILE
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
bra K.PrintF2.1
K.FPrintf2 >LDYAI K.IOBuf
>STYA pIOBuf
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
lda (pStack),y hFILE
sta PrintF.hFILE
bra K.PrintF2.1
K.SPrintf2 stz PrintF.hFILE
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
*--------------------------------------
K.PrintF2.1 sty PrintF2.Exit.Cnt+1 Total bytes to POP
stz PrintF.Cnt
stz PrintF.Cnt+1
.1 jsr SHARED.GetCharPtr2
bne .22
jmp .8 end of format..
.22 cmp #'%'
bne .10
stz K.PrintF.PadL
stz K.PrintF.PadC
lda (ZPPtr2)
beq .7 end of format... print % and exit
jsr ZP.IsDigit
bcs .6 no digit....go check specifier
cmp #'0' ...a 0...mmm... padding char?
bne .4
sta K.PrintF.PadC
jsr SHARED.NextCharPtr2 skip 0 ...
lda (ZPPtr2)
beq .7
jsr ZP.IsDigit
bcs .6 %0x ??????
.4 jsr MATH.Dec2ACC32
bcs .99
lda ACC32
sta K.PrintF.PadL
lda K.PrintF.PadC
bne .5
lda #C.SPACE
sta K.PrintF.PadC
.5 jsr SHARED.AddYToPtr2 skip all processed chars
lda (ZPPtr2)
beq .7
.6 ldx #PrintFTBL1.Cnt-1 do we have a %x command?
.61 cmp PrintFTBL1,x
beq .62
dex
bpl .61
bra .20 unknown ...
.62 jsr SHARED.NextCharPtr2
txa yes, jmp to it!
asl
tax
jsr PrintF2.ESC
.11 bcc .1
bra .99
.7 lda #'%'
bra .20
*--------------------------------------
.10 cmp #'\'
bne .20
jsr SHARED.GetCharPtr2
beq .99
ldx #PrintFTBL2.Cnt-1
.12 cmp PrintFTBL2,x
beq .19
dex
bpl .12
cmp #'x' \xHH
bne .1
jsr MATH.Hex2ACC32
bcs .99
jsr SHARED.AddYToPtr2
.14 lda ACC32
bra .20
.19 lda PrintFTBL2.OUT,x
.20 jsr PrintF.COut
bcc .11
*--------------------------------------
.99 bra PrintF2.Exit
*--------------------------------------
.8 ldx PrintF.hFILE
beq .80 Writing to buffer, append \0
>PUSHW PrintF.Cnt Writing to File/dev...
>PUSHWI K.IOBuf
txa
jsr K.FWrite
bcc .81
tay
bne .99
>RET 4 0=BLOCKING
.80 ldy PrintF.Cnt A=0, Writing to buffer, append \0
sta (pIOBuf),y
.81 >LDYA PrintF.Cnt
* clc
*--------------------------------------
PrintF2.Exit php
pha
lda pStack
sec +Bytecount byte
PrintF2.Exit.Cnt
adc #$ff SELF MODIFIED
sta pStack
pla
plp
PrintF2.Exit.RTS
rts
*--------------------------------------
PrintF2.LocalGetByte
lda (pStack)
beq .9
tay
dec
sta (pStack)
lda (pStack),y
clc
rts
.9 lda #E.STACK
sec
rts
*--------------------------------------
PrintF2.ESC jmp (.1,x)
.1 .DA PrintF2.B
.DA PrintF2.D,PrintF2.DD,PrintF2.U
.DA PrintF2.E,PrintF2.F
.DA PrintF2.H,PrintF2.HH
.DA PrintF2.I,PrintF2.II,PrintF2.L
.DA PrintF2.S,PrintF2.SS
*--------------------------------------
PrintF2.B jsr PrintF2.LocalGetByte
bcs PrintF2.B.RTS
ldy #8
.1 asl
pha
lda #'0'/2
rol
jsr PrintF.COut
bcs .9
pla
dey
bne .1
rts
.9 ply
PrintF2.B.RTS
rts
*--------------------------------------
PrintF2.I sec signed short
.HS 90 BCC
PrintF2.D clc unsigned short (BYTE)
ldy #1
bra PrintF2.NUM
PrintF2.II sec signed int
.HS 90 BCC
PrintF2.DD clc unsigned int (WORD)
ldy #2
bra PrintF2.NUM
PrintF2.L sec signed long
.HS 90 BCC
PrintF2.U clc unsigned long (DWORD)
ldy #4
PrintF2.NUM ror ACC32.Sign
jsr MATH.ACC32ZERO
.1 jsr PrintF2.LocalGetByte
bcs PrintF2.B.RTS
sta ACC32-1,y
dey
bne .1
ldx K.PrintF.PadL
ldy K.PrintF.PadC
rol ACC32.Sign
jsr MATH.ACC322STR10
bra PrintF2.StrNum
*--------------------------------------
* EXP(8) 1(s) 1significants(31)
* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/
*--------------------------------------
PrintF2.E sec Force "E+12"
.HS 90 BCC
PrintF2.F clc
lda (pStack) get current stack Ptr
sec at least 5 bytes remaining ?
sbc #5
bcc PrintF2.StrNum.Err
sta (pStack)
* sec
adc pStack
ldy pStack+1 A,Y = float
ldx #FPU.SETFAC
jsr GP.ROMCALL
ldy #A2osX.NumStrBuf+1 FOUT.1 will do a DEY
ldx #FPU.FOUT
jsr GP.ROMCALL
PrintF2.StrNum ldy #0
.2 lda A2osX.NumStrBuf,y
beq .8
iny
jsr PrintF.COut
bcc .2
.9 rts
.8 clc
rts
PrintF2.StrNum.Err
lda #E.STACK
sec
rts
*--------------------------------------
PrintF2.S ldy #$ff CSTR
.HS 2C bit abs
PrintF2.SS ldy #$00 PSTR
sty .1+1
jsr PrintF2.LocalGetByte
bcs .9
sta ZPPtr1+1
jsr PrintF2.LocalGetByte
bcs .9
sta ZPPtr1
lda (ZPPtr1) if CSTR:last char=0, if PSTR:len=0
beq .8
ldy .1+1
.1 lda #$ff Self Modified
bne .11 CSTR
tya PSTR
cmp (ZPPtr1) len check
beq .2
.11 iny
lda (ZPPtr1),y
beq .2
jsr PrintF.COut
bcs .9
lda K.PrintF.PadL
beq .1
cpy K.PrintF.PadL
bne .1
.8 clc
rts
.2 lda K.PrintF.PadL
beq .8
.3 cpy K.PrintF.PadL
beq .8
lda K.PrintF.PadC
jsr PrintF.COut
bcs .9
iny
bne .3
* clc
.9 rts
*--------------------------------------
PrintF2.HH jsr PrintF2.LocalGetByte
bcs PrintF2.COut.RTS
pha LO byte
jsr PrintF2.H
plx
bcs PrintF2.COut.RTS
txa
bra PrintF2.H.1
*--------------------------------------
PrintF2.H jsr PrintF2.LocalGetByte
bcs PrintF2.COut.RTS
PrintF2.H.1 jsr MATH.AToHexAX
jsr PrintF.COut
bcs PrintF2.COut.RTS
txa
jmp PrintF.COut
PrintF2.COut.RTS
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.STDIO2
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -49,6 +49,9 @@ A2osX.D1 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.UNISTD
.INB USR/SRC/SYS/KERNEL.S.STDIO
.INB USR/SRC/SYS/KERNEL.S.STDLIB
.INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.FIO
.INB USR/SRC/SYS/KERNEL.S.PFT
.EP
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
@ -66,12 +69,10 @@ A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.MATH
.INB USR/SRC/SYS/KERNEL.S.TERMLC
.INB USR/SRC/SYS/KERNEL.S.SHARED
.INB USR/SRC/SYS/KERNEL.S.STDIO2
********* TMP ***** go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.IO
.INB USR/SRC/SYS/KERNEL.S.PIPE
.INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.FIO
.INB USR/SRC/SYS/KERNEL.S.PFT
********* TMP ***** go to A2osX.D2
*--------------------------------------
PWD.bDirty .BS 1