Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-11-30 14:37:55 +01:00
parent 9bc755d734
commit f9eb786fd6
5 changed files with 164 additions and 105 deletions

Binary file not shown.

View File

@ -207,27 +207,38 @@ CMD.SET.1
bcs .6
cmp #'C'
bne .2
ldy #bSET.C
bra .5
.2 cmp #'X'
bne .3
ldy #bSET.X
bra .5
.3 cmp #'E'
bne .4
ldy #bSET.E
bra .5
.4 cmp #'F'
bne .99
jsr CORE.FUNCRESET
bra .50
.5 lda (pData),y
eor #$ff
sta (pData),y
.50 jsr CORE.ArgV.Next
bne .1
clc
rts
.6 >LDYA ZPArgVBufPtr
>STYA ZPVarNamePtr
@ -235,9 +246,11 @@ CMD.SET.1
beq CMD.SET.GET
cmp #'='
bne .99
ldy #1
lda (ZPArgVBufPtr),y
bne .99
jsr CORE.ArgV.Next
beq CMD.SET.UNSET
@ -663,87 +676,55 @@ CMD.EXIT lda (ZPArgVBufPtr)
jsr EXP.GetInt8Exp
bcs .9
.1 sta M32.ACC
.1 ldy #S.PS.RC
sta (pPs),y
.2 jsr CORE.StkPull Pull everything until CALL . CL...
bcs .9
cmp #$C0+C.. in CALL . CL context ?
cmp #$C0+C.. in CALL, "." or CL context ?
beq CMD.EXIT.FILE
cmp #$C0+C.CALL
beq CMD.EXIT.FILE
cmp #$C0+C.CLEXEC
beq CMD.EXIT.SH
jsr CMD.EXIT.POP
beq .8
jsr CORE.StkPopCtxA
bcc .2
rts
.9 rts
*--------------------------------------
CMD.EXIT.SH jsr CMD.EXIT.FILE
.8 jsr CMD.EXIT.FILE
lda #$ff
>STA.G bExitOnEOF
clc
rts
.9 rts
*--------------------------------------
CMD.EXIT.FILE jsr CORE.StkPull
>SYSCALL freemem Code buffer
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL freemem ArgV buffer
jsr CORE.StkPull
ldy #S.PS.hARGV
sta (pPS),y
jsr CORE.StkPull
ldy #S.PS.ARGC
sta (pPS),y
jsr CORE.StkPullInputBufPtr
jsr CORE.StkPull
sta ZPInputBuf+1
jsr CORE.StkPull
sta ZPInputBuf
lda M32.ACC
CMD.EXIT.CLCRTS clc
CMD.EXIT.RTS rts
*--------------------------------------
CMD.EXIT.POP and #$3F
cmp #C.IF
beq CMD.EXIT.CLCRTS IF : Nothing
ldx #2
cmp #C.WHILE WHILE : One Ptr = 2 bytes
beq CMD.EXIT.POPX
cmp #C.SWITCH SWITCH : hValue
beq .2
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
bne .9
.1 jsr CMD.EXIT.POPX
.2 jsr CORE.StkPull
>SYSCALL freemem
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
CMD.EXIT.POPX lda (pData)
.1 dec
dex
bne .1
sta (pData)
clc
rts
rts
*--------------------------------------
CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs .9
@ -848,18 +829,15 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
and #$3F
cmp #C.SWITCH
beq .3
beq .8
cmp #C.CASE
beq .2
beq .8
cmp #C.DEFAULT
bne CMD.E.CSYN
.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT
.3 jsr CORE.StkPull remove C.SWITCH
jsr CORE.StkPull get hVALUE
>SYSCALL freemem
rts
.8 jmp CORE.StkPopCtx
*--------------------------------------
CMD.FOR jsr CORE.StkGetCtx
@ -968,6 +946,7 @@ CMD.NEXT jsr CORE.StkGet Y = StkPtr
tax
beq CMD.NEXT.LIST
jmp CMD.NEXT.FILEEXEC
.9 lda #E.NOFOR
sec
rts
@ -1168,11 +1147,14 @@ CMD.IF jsr CORE.StkGetCtx
.3 lda CORE.IntCmd
cmp #C.WHILE
bne .8
lda #3
jsr CORE.StkCheck
bcs CMD.NEXT.LINE.RTS
>LDYA ZPInputCmdPtr
jsr CORE.StkPushYA Push BEFORE WHILE/IF
.8 lda CORE.TestResult
ora CORE.IntCmd
jmp CORE.StkPush
@ -1185,10 +1167,9 @@ CMD.LOOP jsr CORE.StkPull
cmp #C.WHILE
bne .9
txa
bmi .8
bmi .8 true, loop
ldx #2 Discard loop Ptr
jmp CMD.EXIT.POPX
jmp CORE.StkPopCtxA false, Discard loop Ptr
.8 jmp CORE.StkPullInputBufPtr
@ -1217,11 +1198,14 @@ CMD.ELSE jsr CORE.StkGet
*--------------------------------------
CMD.FI jsr CORE.StkPull
bcs .9
and #$3F
cmp #C.IF
bne .9
clc
rts
.9 lda #E.NOIF
sec
rts

View File

@ -99,6 +99,7 @@ CORE.Run.EOF jsr CORE.StkPull
lda #0
sec
rts Ending 0, CS,A=0
.9 lda #E.UNEXPEOF
sec
rts
@ -151,15 +152,21 @@ CORE.Run.1 sec coming from PIPE OUT
.4 >LDYA L.CMD internal command ?
jsr CORE.LookupInputBuf
bcc .41
.40 jsr CORE.ArgV.Add external cmd, go check context
bra .42
.41 jsr CORE.SkipCharsA
stx CORE.IntCmd
.41 stx CORE.IntCmd
asl CORE.IntCmd
jsr CORE.SkipCharsA
.42 jsr CORE.StkGet
bcs CORE.Run.7 no particular context, exec...
tax
lda CORE.IntCmd
bmi .45
and #$3F
cmp #C.SWITCH SWITCH....FI ?
bcs CORE.Run.7
@ -178,6 +185,7 @@ CORE.Run.1 sec coming from PIPE OUT
jsr CORE.GetNextChar
bra .43
.44 jsr CORE.GetNextCharNB Skip EoL char
clc
.99 rts
@ -263,7 +271,7 @@ CORE.ExecCmd lda #0
lda CORE.IntCmd
bmi CORE.ExecExtCmd
asl
tax
jmp (J.CMD,x)
@ -319,9 +327,12 @@ CORE.LookupArgVBuf
CORE.Lookup >STYA ZPPtr2
ldx #0
.1 ldy #$ff
.2 jsr .7 get next valid char in src text
bcs .3
.20 jsr ToUpperCase
eor (ZPPtr1),y match table char ?
asl compare only 7 bits
@ -340,12 +351,14 @@ CORE.Lookup >STYA ZPPtr2
.3 dey
lda (ZPPtr1),y was last char in this keyword ?
bmi .8
iny
.41 jsr IncPtr1 skip chars to next keyword
.4 lda (ZPPtr1)
bpl .41
jsr IncPtr1
.6 inx
lda (ZPPtr1) Array Ending 0, lookup failed
bne .1
@ -594,12 +607,53 @@ CORE.SkipCharsA clc
*--------------------------------------
* Stack
*--------------------------------------
CORE.StkPopCtx jsr CORE.StkPull
CORE.StkPopCtxA and #$3F
cmp #C.IF
beq .8 IF : Nothing
ldx #2
cmp #C.WHILE WHILE : One Ptr = 2 bytes
beq CORE.StkPopX
cmp #C.SWITCH SWITCH : hValue
beq .2
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
bne .9
.1 jsr CORE.StkPopX
.2 jsr CORE.StkPull
>SYSCALL freemem
.8 clc
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
CORE.StkPopX lda (pData)
.1 dec
dex
bne .1
sta (pData)
clc
rts
*--------------------------------------
CORE.StkCheck sec
adc (pData) StackPtr
cmp #CORE.STACK.MAX
bcc .8
lda #E.STKOVERFLOW
* clc
* sec
.8 rts
*--------------------------------------
CORE.StkPushYAX phx

View File

@ -162,8 +162,10 @@ IO.PrintBatchErrMsg
lda (pPs),y
cmp #E.SYN
beq .10
>LDYA ZPInputCmdPtr
bra .11
.10 >LDYA ZPInputBufPtr
.11 >STYA ZPPtr2
@ -235,13 +237,14 @@ IO.PrintBatchErrMsg
>PUSHW L.MSG.BATCHERR
.80 bra IO.PrintErr
*--------------------------------------
IO.PrintErrMsg pha Save EC for PrintF
ldx L.ERR.Codes
IO.PrintErrMsg ldx L.ERR.Codes
stx ZPPTR1
ldx L.ERR.Codes+1
stx ZPPTR1+1
ldy #S.PS.RC
lda (pPs),y
ldy #0
.1 cmp (ZPPTR1),y
@ -260,8 +263,12 @@ IO.PrintErrMsg pha Save EC for PrintF
lda (ZPPTR1)
jsr AddAp1Ptr1
bra .3
.8 >PUSHW ZPPTR1
pla
ldy #S.PS.RC
lda (pPs),y
>PUSHA
>PUSHBI 3
>PUSHW L.MSG.ERROR

View File

@ -10,40 +10,40 @@ CORE.STACK.MAX .EQ 128
PUSHD.STACK.MAX .EQ 4
*--------------------------------------
C... .EQ 0
C.. .EQ 1
C.CD .EQ 2
C.NOHUP .EQ 3
C.DATE .EQ 4
C.ECHO .EQ 5
C.EXIT .EQ 6
C.MD .EQ 7
C.PAUSE .EQ 8
C.PWD .EQ 9
C.RD .EQ 10
C.READ .EQ 11
C.REN .EQ 12
C.SET .EQ 13
C.SLEEP .EQ 14
C.SHIFT .EQ 15
C.PUSHD .EQ 16
C.POPD .EQ 17
C.FUNCTION .EQ 18
C.CALL .EQ 19
C.BREAK .EQ 20
C.SWITCH .EQ 21
C.CASE .EQ 22
C.DEFAULT .EQ 23
C.. .EQ 2
C.CD .EQ 4
C.NOHUP .EQ 6
C.DATE .EQ 8
C.ECHO .EQ 10
C.EXIT .EQ 12
C.MD .EQ 14
C.PAUSE .EQ 16
C.PWD .EQ 18
C.RD .EQ 20
C.READ .EQ 22
C.REN .EQ 24
C.SET .EQ 26
C.SLEEP .EQ 28
C.SHIFT .EQ 30
C.PUSHD .EQ 32
C.POPD .EQ 34
C.FUNCTION .EQ 36
C.CALL .EQ 38
C.BREAK .EQ 40
C.SWITCH .EQ 42
C.CASE .EQ 44
C.DEFAULT .EQ 46
*--------------------------------------
C.FOR .EQ 24
C.FOR .EQ 48
C.FOR.LIST .EQ 0
C.FOR.FILEEXEC .EQ 1
C.WHILE .EQ 25
C.IF .EQ 26
C.NEXT .EQ 27
C.LOOP .EQ 20
C.ELSE .EQ 29
C.FI .EQ 30
C.END .EQ 31
C.WHILE .EQ 50
C.IF .EQ 52
C.NEXT .EQ 54
C.LOOP .EQ 56
C.ELSE .EQ 58
C.FI .EQ 60
C.END .EQ 62
*--------------------------------------
C.CLEXEC .EQ 63
*--------------------------------------
@ -369,6 +369,7 @@ CS.RUN.BATCH >LDA.G bSET.X
bcs CS.RUN.LOOP.RTS
.5 jsr CORE.Run
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
bcc CS.RUN.LOOP.80
@ -378,22 +379,35 @@ CS.RUN.LOOP.END ldy #S.PS.RC
>LDA.G bSET.E
bmi CS.RUN.LOOP.80
jsr CORE.StkGet
.1 jsr CORE.StkGet
cmp #$C0+C.CLEXEC
beq .1
jsr IO.PrintBatchErrMsg
beq .8
cmp #$C0+C.. in . ?
beq .7
cmp #$C0+C.CALL in CALL ?
beq .7
jsr CORE.StkPopCtx
bcc .1
.7 jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
.1 ldy #S.PS.RC
lda (pPs),y
jsr IO.PrintErrMsg
jsr CORE.StkPull
jsr CMD.EXIT.FILE
.8 jsr IO.PrintErrMsg
bcs CS.RUN.LOOP.RTS
CS.RUN.LOOP.80 lda (pData) something on stack ?
bne .8
bne CS.RUN.LOOP.88
>LDA.G bExitOnEOF
bmi CS.RUN.LOOP.EXIT
.8 jmp CS.RUN.LOOP
CS.RUN.LOOP.88 jmp CS.RUN.LOOP
CS.RUN.LOOP.EXIT
ldy #S.PS.RC
lda (pPs),y