Kernel 0.9.1 : Code reorganization & move to CSTR, Stack Management

This commit is contained in:
Rémy GIBERT 2017-09-01 17:40:26 +02:00
parent d4db5090af
commit 17a4222ff7
5 changed files with 203 additions and 53 deletions

Binary file not shown.

Binary file not shown.

View File

@ -153,8 +153,6 @@ Cmd.Exec.EXT ldy #1
cmp #'/' Command line is already full path, no search cmp #'/' Command line is already full path, no search
bne .10 bne .10
>LDYA L.ENV.PATH push ENVNAME=PATH for search >LDYA L.ENV.PATH push ENVNAME=PATH for search
>SYSCALL GetEnv.YA get value for ENV=PATH >SYSCALL GetEnv.YA get value for ENV=PATH
bcs .1 No PATH, try in CD bcs .1 No PATH, try in CD

View File

@ -116,7 +116,7 @@ CSH.Run jsr CSH.GetBuf
jmp CSH.GetNextCharNB Skip ; jmp CSH.GetNextCharNB Skip ;
.99 lda #CSHERR.SYNTAX .99 lda #CSH.E.SYNTAX
sec sec
.9 rts .9 rts
@ -365,7 +365,7 @@ CSH.IF jsr CSH.GetCharNB
clc clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
@ -386,7 +386,7 @@ CSH.BREAK
*-------------------------------------- *--------------------------------------
CSH.CONTINUE CSH.CONTINUE
lda #CSHERR.SYNTAX lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -440,12 +440,12 @@ CSH.TYPE sta CSH.ACCT
clc clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
lda #CSHERR.SYNTAX lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -475,7 +475,7 @@ CSH.ExpEval jsr CSH.ZeroACC
.8 clc .8 clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
@ -491,7 +491,7 @@ CSH.GetName ldy #0
cpy #CSH.Name.MAX cpy #CSH.Name.MAX
bcc .1 bcc .1
lda #CSHERR.TOOLONG lda #CSH.E.TOOLONG
sec sec
rts rts
@ -499,7 +499,7 @@ CSH.GetName ldy #0
clc clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -523,7 +523,7 @@ CSH.GetNumInACC ldy #0
bcs .9 bcs .9
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -606,12 +606,12 @@ CSH.AddVar jsr CSH.FindVar
clc clc
rts rts
.97 lda #CSHERR.DUP .97 lda #CSH.E.DUP
sec sec
rts rts
.98 pla .98 pla
.99 lda #CSHERR.OOM .99 lda #CSH.E.OOM
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -693,7 +693,7 @@ CSH.Push pha
clc clc
rts rts
.9 lda #CSHERR.SOVERFLW .9 lda #CSH.E.SOVERFLW
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -707,7 +707,7 @@ CSH.Pop ldy #CSH.StackPtr
clc clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -728,7 +728,7 @@ CSH.CheckStack pha
clc clc
rts rts
.9 lda #CSHERR.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -12,6 +12,160 @@ AUTO 6
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I .INB /A2OSX.BUILD/INC/MLI.ERR.I
*-------------------------------------- *--------------------------------------
UsrBuf256 .EQ $200
*--------------------------------------
Stack .EQ $80
Stack.B .EQ $fe
Stack.P .EQ $ff Initial value=$fd
*--------------------------------------
.MA STACK.BACKUP
ldy #0
ldx Stack.P At least eq $fd
inx
:1 lda Stack,x
sta (pStack),y
iny
inx
bne :1
tsx
inx
inx Skip 2 bytes Return address to Kernel
txa
eor #$ff compute byte count on stack....
inx
beq :9
sta :8+1 save count for later
:2 pla
sta (pStack),y
iny
inx
bne :2
:8 lda #$ff
:9 sta (pStack),y
tya
ldy #S.PS.SP
sta (pPs),y
.EM
*--------------------------------------
.MA STACK.RESTORE
ldy #S.PS.SP get PS stack top....
lda (pPs),y
tay
lda (pStack),y get 6502 stack bytes to restore
dey
tax
beq :2
:1 lda (pStack),y
dey
pha
dex
bne :1
ldx #$ff
:2 tya
beq :8
lda (pStack),y
sta Stack,x
dex
dey
:8
.EM
*--------------------------------------
.MA ADDLOCAL
lda Stack.P
sec
sbc #]1
sta Stack.P
sta Stack.B
.EM
*--------------------------------------
.MA GETL.A
ldx Stack.B
lda Stack+]1,x
.EM
*--------------------------------------
.MA GETL.YA
ldx Stack.B
ldy Stack+]1,x
lda Stack+1+]1,x
.EM
*--------------------------------------
.MA SETL.A
ldx Stack.B
sta Stack+]1,x
.EM
*--------------------------------------
.MA SETL.YA
ldx Stack.B
sty Stack+]1,x
sta Stack+1+]1,x
.EM
*--------------------------------------
.MA PUSHLW
ldx Stack.P
.DO ]#=2
lda ]1+1,]2
sta Stack,x
dex
lda ]1,]2
sta Stack,x
dex
stx Stack.P
.ELSE
lda ]1+1
sta Stack,x
dex
lda ]1
sta Stack,x
dex
stx Stack.P
.FIN
.EM
*--------------------------------------
.MA GETG.A
ldy #]1
lda (pData),y
.EM
*--------------------------------------
.MA SETG.A
ldy #]1
sta (pData),y
.EM
*--------------------------------------
.MA GETG.YA
ldy #]1
lda (pData),y
pha
iny
lda (pData),y
ply
.EM
*--------------------------------------
.MA SETG.YA
phy
ldy #]1+1
sta (pData),y
dey
pla
sta (pData),y
.EM
*--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4 ZPPTR3 .EQ ZPBIN+4
@ -23,15 +177,16 @@ ZPCSHStack .EQ ZPBIN+14
*-------------------------------------- *--------------------------------------
CmdLine.MAX .EQ 127 CmdLine.MAX .EQ 127
VarLen.MAX .EQ 15 VarLen.MAX .EQ 15
CSH.Stack.MAX .EQ 15 CSH.Stack.MAX .EQ 15
CSH.Name.MAX .EQ 15 CSH.Name.MAX .EQ 15
CSHERR.SYNTAX .EQ $7F CSH.E.SYNTAX .EQ $7F
CSHERR.SOVERFLW .EQ $7E CSH.E.SOVERFLW .EQ $7E
CSHERR.NOVERFLW .EQ $7D CSH.E.NOVERFLW .EQ $7D
CSHERR.OOM .EQ $7C CSH.E.OOM .EQ $7C
CSHERR.DUP .EQ $7B CSH.E.DUP .EQ $7B
CSHERR.UNDEF .EQ $7A CSH.E.UNDEF .EQ $7A
CSHERR.TOOLONG .EQ $79 CSH.E.TOOLONG .EQ $79
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -42,7 +197,7 @@ CS.START cld
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
.DA 64 SS .DA 0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -103,8 +258,8 @@ CS.INIT jsr SetPWD
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPs) sta (pPs)
>SYSCALL GetArgC ldy #S.PS.ARGC
cmp #1 lda (pPs),y
beq .1 no arg, continue starting interactive beq .1 no arg, continue starting interactive
@ -144,8 +299,7 @@ CS.INIT jsr SetPWD
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #VarBuffer READ Command ? CS.RUN >GETG.A bReadMode READ Command ?
lda (pData),y
bne CS.RUN.READ bne CS.RUN.READ
ldy #S.PS.RC ldy #S.PS.RC
@ -165,8 +319,7 @@ CS.RUN ldy #VarBuffer READ Command ?
.13 jsr CheckSleep .13 jsr CheckSleep
bne .8 bne .8
ldy #CSH.hBuf batch mode ? >GETG.A CSH.hBuf batch mode ?
lda (pData),y
beq .10 beq .10
jmp CS.RUN.BATCH jmp CS.RUN.BATCH
@ -224,12 +377,9 @@ CS.RUN.READ lda #0
jsr CS.CHARIN jsr CS.CHARIN
lda (pData) >GETG.A bCmdBuf.exec
bpl .1 bpl .1
and #$7F
sta (pData)
>PUSHW pData >PUSHW pData
lda #VarBuffer lda #VarBuffer
@ -317,7 +467,6 @@ CS.RUN.BATCH jsr CSH.Run
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 bpl .9
jsr CheckSleep jsr CheckSleep
beq .9 beq .9
@ -335,32 +484,33 @@ CS.DOEVENT lda (pEvent)
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.CHARIN tax CS.CHARIN >ADDLOCAL 2 room for bCmdBuf
ldy #CSH.hBuf Batch mode ? >GETG.A hCmdBuf
lda (pData),y >SYSCALL GetMemPtr.A
>SETL.YA 0
tax Save Char
>GETG.A CSH.hBuf Batch mode ?
beq .10 beq .10
* Batch Mode * Batch Mode
cpx #3 test Ctrl-c cpx #3 test Ctrl-c
bne .12 bne .12
ldy #bExitOnEOF >GETG.A bExitOnEOF
lda (pData),y >SETG.A bExit
ldy #bExit
sta (pData),y
clc clc
rts rts
.12 cpx #19 test Ctrl-s .12 cpx #19 test Ctrl-s
bne .8 bne .8
ldy #bPause
lda #$80 lda #$80
sta (pData),y >SETG.A bPause
clc clc
rts rts
* interactive mode * interactive mode
.10 ldy #bEscMode .10 >GETG.A bEscMode
lda (pData),y
beq .13 beq .13
cpx #'[' cpx #'['
@ -421,18 +571,16 @@ CS.CHARIN.CTRL cpx #13 CR
lda #10 lda #10
>SYSCALL PutChar.A >SYSCALL PutChar.A
lda (pData) CmdBuffer lda #$ff
ora #$80 >SETG.A bCmdBuf.exec
sta (pData)
clc clc
rts rts
.10 cpx #$1B esc .10 cpx #$1B esc
bne .11 bne .11
ldy #bEscMode
lda #$ff lda #$ff
sta (pData),y >SETG.A bEscMode
clc clc
rts rts
@ -605,8 +753,12 @@ CSH.ARG .BS 5
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
CmdBuffer .BS CmdLine.MAX+1 (pData) hCmdBuf .BS 1
VarBuffer .BS VarLen.MAX+1 CmdBuf.len .BS 1
bCmdBuf.exec .BS 1
bReadMode .BS 1
bEscMode .BS 1 bEscMode .BS 1
bPause .BS 1 bPause .BS 1
bExit .BS 1 bExit .BS 1