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

View File

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

View File

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

View File

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