Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-04-11 21:47:48 +02:00
parent ee7a7b07a4
commit 2e4c5e3eb6
10 changed files with 171 additions and 86 deletions

Binary file not shown.

View File

@ -194,16 +194,7 @@ CORE.Lookup >STYA ZPPtr1
.8 tya Keyword Len .8 tya Keyword Len
clc jmp CORE.SkipA
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .80
clc
inc ZPInputBufPtr+1
.80 rts
.3 dey .3 dey
lda (ZPPtr1),y was last char in this keyword ? lda (ZPPtr1),y was last char in this keyword ?
@ -246,7 +237,7 @@ CORE.CreateLabel
>PUSHB.G hLabels >PUSHB.G hLabels
>PUSHW ZPSID >PUSHW ZPSID
>PUSHWI ZPCodeBufPtr >PUSHWI ZPCodeBufPtr
>PUSHWI 2 >PUSHWI 2 2 bytes : ADDR
>SYSCALL SListAddData >SYSCALL SListAddData
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -258,11 +249,18 @@ CORE.CreateOrGetVar
>LDA.G hVars >LDA.G hVars
jsr CORE.NewKey jsr CORE.NewKey
bcs .9 bcs .9
jsr CORE.GetChar
cmp #'$'
bne .1
sta ZPTYPE
jsr CORE.GetNextChar skip $
>PUSHB.G hVars .1 >PUSHB.G hVars
>PUSHW ZPSID >PUSHW ZPSID
>PUSHWI ZPDataBufPtr >PUSHWI ZPDataBufPtr
>PUSHWI 2 >PUSHWI 3 3 bytes : ADDR + TYPE
>SYSCALL SListAddData >SYSCALL SListAddData
bcs .9 bcs .9
@ -284,21 +282,12 @@ CORE.CreateOrGetVar
CORE.NewKey >PUSHA CORE.NewKey >PUSHA
>PUSHW ZPInputBufPtr >PUSHW ZPInputBufPtr
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs .9 bcs CORE.GetAddr.RTS
>STYA ZPSID >STYA ZPSID
txa txa
* clc jmp CORE.SkipA
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
clc
inc ZPInputBufPtr+1
.1
.9 rts
*-------------------------------------- *--------------------------------------
CORE.GetAddr >PUSHA CORE.GetAddr >PUSHA
>PUSHA for SListGetData >PUSHA for SListGetData
@ -310,21 +299,17 @@ CORE.GetAddr >PUSHA
>STYA ZPSID >STYA ZPSID
txa txa
* clc jsr CORE.SkipA
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
inc ZPInputBufPtr+1
.1 >PUSHW ZPSID .1 >PUSHW ZPSID
>PUSHWI ZPADDR >PUSHWI ZPADDR
>PUSHWI 2 2 bytes >PUSHWI 3 3 bytes : ADDR + TYPE
>PUSHWZ From Start >PUSHWZ From Start
>SYSCALL SListGetData >SYSCALL SListGetData
rts rts
.9 >PULLA .9 >POP 1
CORE.GetAddr.RTS
rts rts
*-------------------------------------- *--------------------------------------
CORE.ToUpperCase CORE.ToUpperCase
@ -441,6 +426,16 @@ CORE.GetNextCharNB
CORE.GetNextCharNB.RTS CORE.GetNextCharNB.RTS
rts rts
*-------------------------------------- *--------------------------------------
CORE.SkipA clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
clc
inc ZPInputBufPtr+1
.1 rts Exit with CC for JMP to
*--------------------------------------
CORE.SkipLine jsr CORE.GetNextChar CORE.SkipLine jsr CORE.GetNextChar
bcs CORE.GetNextCharNB.RTS bcs CORE.GetNextCharNB.RTS

View File

@ -157,15 +157,10 @@ EXP.VARLookup >LDA.G hVars
>PUSHYA ZPSID >PUSHYA ZPSID
txa txa
* clc jsr CORE.SkipA
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
inc ZPInputBufPtr+1
.1 >PUSHWI EXP.ADDR .1 >PUSHWI EXP.ADDR
>PUSHWI 2 2 bytes >PUSHWI 3 3 bytes : ADDR + TYPE
>PUSHWZ From Start >PUSHWZ From Start
>SYSCALL SListGetData >SYSCALL SListGetData
rts rts

View File

@ -21,10 +21,11 @@ EXP.DEPTH.MAX .EQ 16
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPInputBuf .BS 2
ZPInputBufPtr .BS 2 ZPInputBufPtr .BS 2
ZPSID .BS 2 ZPSID .BS 2
ZPADDR .BS 2 ZPADDR .BS 2
ZPTYPE .BS 1
.BS 1
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
@ -39,8 +40,9 @@ ArgIndex .BS 1
bFlag .BS 1 bFlag .BS 1
EXP.ADDR .BS 2 EXP.ADDR .BS 2
EXP.TYPE .BS 1
EXP.AOPS .BS 1 EXP.AOPS .BS 1
EXP.DEPTH .BS 1 *EXP.DEPTH .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -259,7 +261,6 @@ CS.RUN.ARGS inc ArgIndex
jsr CS.RUN.LoadFile jsr CS.RUN.LoadFile
bcs .9 bcs .9
>STYA ZPInputBuf
>STYA ZPInputBufPtr >STYA ZPInputBufPtr
txa txa

View File

@ -511,7 +511,7 @@ MSG.HELP >PSTR "All commands:"
>PSTR " Ctrl-R : Replace next" >PSTR " Ctrl-R : Replace next"
>PSTR " Ctrl-S : Save file..." >PSTR " Ctrl-S : Save file..."
>PSTR " Ctrl-T : Go to top of file" >PSTR " Ctrl-T : Go to top of file"
>PSTR " Ctrl-V : Past clipboard at cursor position" >PSTR " Ctrl-V : Paste clipboard at cursor position"
>PSTR " Ctrl-W : Erase current line" >PSTR " Ctrl-W : Erase current line"
>PSTR " Ctrl-X : Cut block to clipboard" >PSTR " Ctrl-X : Cut block to clipboard"
>PSTR " Ctrl-Y : Go to end of file" >PSTR " Ctrl-Y : Go to end of file"

View File

@ -257,10 +257,6 @@ CL.PrintCLBuf ldy #S.PS.hStdOut
>SYSCALL FPutS >SYSCALL FPutS
rts rts
*-------------------------------------- *--------------------------------------
CL.DN
CL.UP clc
rts
*--------------------------------------
MAN MAN
SAVE usr/src/bin/forth.s.cl SAVE usr/src/bin/forth.s.cl
LOAD usr/src/bin/forth.s LOAD usr/src/bin/forth.s

View File

@ -14,7 +14,7 @@ CP.RUN cpx #KW.CONLY
.1 jmp (J.KEYWORDS,x) .1 jmp (J.KEYWORDS,x)
*-------------------------------------- *--------------------------------------
CP.DO jsr CP.Emit.DO I,n -> RP CP.DO jsr CP.Emit.DO I,n -> RP
* >DEBUG
ldy RP ldy RP
lda ZPCodePtr+1 lda ZPCodePtr+1
@ -42,7 +42,6 @@ CP.LOOP lda #$00
jsr CP.Emit.PUSHBI jsr CP.Emit.PUSHBI
*-------------------------------------- *--------------------------------------
CP.pLOOP ldy RP CP.pLOOP ldy RP
* >DEBUG
iny iny
bmi .9 bmi .9
@ -82,7 +81,7 @@ CP.I jsr CP.Emit.I
rts rts
*-------------------------------------- *--------------------------------------
CP.LEAVE ldy RP CP.LEAVE ldy RP
* >DEBUG
.1 iny .1 iny
bmi .9 bmi .9

93
BIN/FORTH.S.HIS.txt Normal file
View File

@ -0,0 +1,93 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
HIS.Init >LDYAI HISTORY.MAX Get a buffer for History
>SYSCALL NewStkObj
bcs .9
txa
>STA.G HIS.hBuf
>PUSHA
>PUSHWI 0
>SYSCALL StrVAdd Reset Buffer
>STZ.G HIS.Count
>STA.G HIS.Index
.9 rts
*--------------------------------------
HIS.Add >LDA.G HIS.hBuf
beq .9
>PUSHA
>PUSHW ZPCLBuf
>SYSCALL StrVAdd
bcc .1
>PUSHB.G HIS.hBuf
lda #0
>PUSHA
>SYSCALL StrVShift
>DEC.G HIS.Count
bra HIS.Add
.1 >STZ.G HIS.Index Reset Index
>INC.G HIS.Count
.9
HIS.Add.RTS rts
*--------------------------------------
HIS.GetPrev >LDA.G HIS.hBuf
beq HIS.Add.RTS
>LDA.G HIS.Count
beq HIS.Add.RTS empty history,nothing to do
>LDA.G HIS.Index
bne .1
>LDA.G HIS.Count
.1 dec
bra HIS.GetToCl
*--------------------------------------
HIS.GetNext >LDA.G HIS.hBuf
beq HIS.Add.RTS
>LDA.G HIS.Count
beq HIS.Add.RTS empty history,nothing to do
>LDA.G HIS.Index
inc
>CMP.G HIS.Count
bne HIS.GetToCl
lda #0
>STA.G HIS.Index
jmp CL.CLR
*--------------------------------------
HIS.GetToCl >STA.G HIS.Index
jsr CL.CLR
>PUSHB.G HIS.hBuf
>PUSHB.G HIS.Index
>PUSHW ZPCLBuf
>SYSCALL StrVGet
ldy #$ff
.1 iny
lda (ZPCLBuf),y
bne .1
tya
>STA.G CL.Ptr
>STA.G CL.Len
jmp CL.PrintCLBuf
*--------------------------------------
MAN
SAVE usr/src/bin/forth.s.his
LOAD usr/src/bin/forth.s
ASM

View File

@ -579,11 +579,12 @@ KW.LWR jsr CheckStackPop4
sbc (pStack) sbc (pStack)
inc pStack inc pStack
ror inc pStack
lda #0 lda #0
ror
sta (pStack) sta (pStack)
ldy #1
sta (pStack),y
clc clc
.9 rts .9 rts
@ -600,30 +601,33 @@ KW.GTR jsr CheckStackPop4
sbc (pStack) sbc (pStack)
inc pStack inc pStack
inc pStack
lda #0 lda #0
ror ror
eor #$80 eor #$80
sta (pStack) sta (pStack)
ldy #1
sta (pStack),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* : TL BEGIN DUP . 1 - DUP 0 = UNTIL ;
*--------------------------------------
KW.EQ jsr CheckStackPop4 KW.EQ jsr CheckStackPop4
bcs .9 bcs .9
* clc
ldy #2 ldy #2
lda (pStack),y lda (pStack),y
sec eor (pStack)
sbc (pStack)
tax tax
inc pStack inc pStack
lda (pStack),y lda (pStack),y
sbc (pStack) eor (pStack)
inc pStack inc pStack
@ -634,32 +638,20 @@ KW.EQ jsr CheckStackPop4
bne .1 bne .1
sec sec
.HS 90 BCC
.1 clc .1 inc pStack
lda #0
sbc #0
sta (pStack) sta (pStack)
ldy #1
sta (pStack),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
KW.NEGATIVE ldy #1 KW.NEGATIVE inc pStack
lda (pStack),y
asl
lda #0
ror
sta (pStack)
sta (pStack),y
clc clc
rts rts
*-------------------------------------- *--------------------------------------
KW.ZERO clc KW.ZERO clc
ldy #1 ldy #1
lda (pStack),y lda (pStack),y
ora (pStack) ora (pStack)
@ -669,10 +661,11 @@ KW.ZERO clc
.9 lda #0 .9 lda #0
ror ror
sta (pStack)
sta (pStack),y
clc inc pStack
sta (pStack)
* clc
rts rts
*-------------------------------------- *--------------------------------------
KW.. jsr KW.DUP KW.. jsr KW.DUP

View File

@ -4,6 +4,8 @@ NEW
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF bin/forth .TF bin/forth
*--------------------------------------
HISTORY.MAX .EQ 256
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
@ -91,10 +93,8 @@ L.MSG.TYPES .DA MSG.CONST
L.FMT.Byte .DA FMT.Byte L.FMT.Byte .DA FMT.Byte
L.FMT.int16 .DA FMT.int16 L.FMT.int16 .DA FMT.int16
J.ESC .DA CL.BS left arrow J.ESC .DA CL.BS left arrow
.DA CL.DN .DA HIS.GetNext
.DA CL.UP .DA HIS.GetPrev
* .DA HIS.GetNext
* .DA HIS.GetPrev
.DA CL.NAK right arrow .DA CL.NAK right arrow
L.KEYWORDS .DA KEYWORDS L.KEYWORDS .DA KEYWORDS
J.KEYWORDS .DA GFX.PLOT J.KEYWORDS .DA GFX.PLOT
@ -266,10 +266,12 @@ CS.RUN >PUSHW L.MSG.GREETINGS
>STA.G hSList >STA.G hSList
stz bCompile * stz bCompile
lda #127 lda #127
sta RP sta RP
jsr HIS.Init
jsr GFX.Open jsr GFX.Open
*-------------------------------------- *--------------------------------------
CS.RUN.LOOP >SLEEP CS.RUN.LOOP >SLEEP
@ -357,6 +359,8 @@ CS.FORTH.Run jsr CL.Reset
>PUSHBI 0 >PUSHBI 0
>SYSCALL PrintF >SYSCALL PrintF
jsr HIS.Add
jmp CS.RUN.EXEC jmp CS.RUN.EXEC
.9 rts .9 rts
@ -596,7 +600,12 @@ CS.DOEVENT sec
*-------------------------------------- *--------------------------------------
CS.QUIT jsr GFX.Close CS.QUIT jsr GFX.Close
>LDA.G hSList >LDA.G HIS.hBuf
beq .10
>SYSCALL FreeStkObj
.10 >LDA.G hSList
beq .1 beq .1
>PUSHA >PUSHA
@ -783,6 +792,7 @@ CheckStackPop4 lda pStack
rts rts
*-------------------------------------- *--------------------------------------
.INB usr/src/bin/forth.s.cl .INB usr/src/bin/forth.s.cl
.INB usr/src/bin/forth.s.his
.INB usr/src/bin/forth.s.cp .INB usr/src/bin/forth.s.cp
.INB usr/src/bin/forth.s.kw .INB usr/src/bin/forth.s.kw
.INB usr/src/bin/forth.s.gfx .INB usr/src/bin/forth.s.gfx
@ -926,13 +936,11 @@ CODE.RPDROP2 inc RP
CODE.RPDROP2.L .EQ *-CODE.RPDROP2 CODE.RPDROP2.L .EQ *-CODE.RPDROP2
*-------------------------------------- *--------------------------------------
CODE.TESTTRUE >PULLA CODE.TESTTRUE >PULLA
>PULLA
tax tax
.1 bpl .1+5 .1 bpl .1+5
CODE.TESTTRUE.L .EQ *-CODE.TESTTRUE CODE.TESTTRUE.L .EQ *-CODE.TESTTRUE
*-------------------------------------- *--------------------------------------
CODE.TESTFALSE >PULLA CODE.TESTFALSE >PULLA
>PULLA
tax tax
.1 bmi .1+5 .1 bmi .1+5
CODE.TESTFALSE.L .EQ *-CODE.TESTFALSE CODE.TESTFALSE.L .EQ *-CODE.TESTFALSE
@ -1047,6 +1055,11 @@ hInputBuf .BS 1
hOutputBuf .BS 1 hOutputBuf .BS 1
hCLBuf .BS 1 hCLBuf .BS 1
HIS.hBuf .BS 1
HIS.Count .BS 1
HIS.Index .BS 1
hFile .BS 1 hFile .BS 1
LineCounter .BS 2 LineCounter .BS 2
hSList .BS 1 hSList .BS 1