Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-01 07:07:56 +01:00
parent fd743e7ad2
commit cdd1d64001
16 changed files with 682 additions and 371 deletions

View File

@ -58,7 +58,7 @@ where [ exp ] and [ condition ] allow to detail operators....
| ---- | ------ | ------- |
| \<value\> | Working | $VAR \| string \| "string with SPACE" \| 123 \| -456 |
| \<expression\> | Working | \<value\> [\<op\> \<value\>] ... |
| \<op\> | Working <br> --- <br> Planned | \+ signed int32 add <br> \- signed int32 sub <br> --- <br> \* <br> div <br> mod |
| \<op\> | Working | \+ signed int32 add <br> \- signed int32 sub <br> \* <br> / <br> mod |
| \<condition\> | Working |[ -D direxists ] <br> [ -E fileordirexists ] <br> [ -F fileexists ]<br> [ -N $VAR variable is not empty ] <br> [ -Z $VAR variable is empty ] <br> [ string1 = string2 ] <br> [ string1 != string2 ] <br> [ string1 .< string2 ] <br> [ string1 <= string2 ] <br> [ string1 .> string2 ] <br> [ string1 >= string2 ] <br> [ int32 -eq int32 ] <br> [ int32 -ne int32 ] <br> [ int32 -lt int32 ] <br> [ int32 -le int32 ] <br> [ int32 -gt int32 ] <br> [ int32 -ge int32 ] |
| BREAK | Working | Exit CASE of SWITCH |
| CASE | Working | CASE <expression> |

View File

@ -420,21 +420,7 @@ DIR.IN jsr SRC.GetNextCharNB
bcs .9
>LDYA ZPLinePtr
>SYSCALL RealPath
phx
jsr FIO.OpenFile
plx
php
pha
txa
>SYSCALL FreeMem
pla
plp
rts
jmp FIO.OpenFile
.9 lda #E.SYNTAX.ERROR
sec

View File

@ -50,9 +50,12 @@ EXP.Eval.Next stz SRC.ACC.F
bcs EXP.Eval.Missing
cmp #'.' Local Label?
bne .12
beq .13
jsr EXP.GetLocal
cmp #':'
bne .12
.13 jsr EXP.GetLocal
bcs .14
jmp EXP.EvalOperator

View File

@ -26,6 +26,7 @@ MAC.Init >SYSCALL SListNew
.9 rts
*---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr
>STA.G MAC.CtxID
rts
*---------------------------------------
MAC.Quit >LDA.G MAC.hStk
@ -58,9 +59,12 @@ MAC.AddChar tax
>INC.G MAC.BufPtr
txa
beq .1
cmp #C.CR
bne .8
>LDA.G MAC.BufPtr
.1 >LDA.G MAC.BufPtr
tay
lda #0
@ -72,58 +76,156 @@ MAC.AddChar tax
rts
.8 clc
rts
*---------------------------------------
MAC.Lookup >PUSHW ZPLinePtr
>LDA.G MAC.hList
>SYSCALL SListLookup
bcs .9
pha
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .8
inc ZPLinePtr+1
clc
.8 pla Y,A = MAC.ID
.9 rts
MAC.AddChar.RTS rts
*---------------------------------------
MAC.ReadLine >LDA.G MAC.StkPtr
tay
dey
dey
dey
lda (ZPMacroStk),y
sta ZPPtr1
dey
lda (ZPMacroStk),y
sta ZPPtr1+1 pop mac ID
dey
lda (ZPMacroStk),y
sta ZPPtr2
dey
lda (ZPMacroStk),y
sta ZPPtr2+1 pop offset
dey
lda (ZPMacroStk),y
sta ZPMacroBuf
dey
lda (ZPMacroStk),y
sta ZPMacroBuf+1 pop args
>PUSHA offset
dey
lda (ZPMacroStk),y
>PUSHA
lda #0
>PUSHA len = 0 (string mode)
>PUSHA
tya
>STA.G MAC.StkPtr
>PUSHW ZPPtr2 offset
>PUSHWI 0 len = 0 (string mode)
>PUSHW ZPLineBuf
>LDA.G MAC.StkPtr
tay
dey
lda (ZPMacroStk),y
>PUSHA
dey
lda (ZPMacroStk),y
>PUSHA
>PUSHW ZPPtr1 Mac ID
>LDA.G MAC.hList
>SYSCALL SListGetData
bcs MAC.AddChar.RTS
pha
tya
* clc
adc ZPPtr2
sta ZPPtr2
pla
adc ZPPtr2+1
sta ZPPtr2+1
>LDYA ZPMacroBuf
>SYSCALL puts
>LDA.G MAC.StkPtr
tay
lda ZPLinePtr+1 push args
sta (ZPMacroStk),y
iny
lda ZPLinePtr
sta (ZPMacroStk),y
iny
*---------------------------------------
MAC.Push lda ZPPtr2+1 push offset
sta (ZPMacroStk),y
iny
lda ZPPtr2
sta (ZPMacroStk),y
iny
lda ZPPtr1+1 push MAC.ID
sta (ZPMacroStk),y
iny
lda ZPPtr1
sta (ZPMacroStk),y
iny
tya
>STA.G MAC.StkPtr
clc
rts
*---------------------------------------
MAC.Exec jsr SRC.GetNextChar skip '>'
bcs .90
>PUSHW ZPLinePtr
>LDA.G MAC.hList
>SYSCALL SListLookup
bcs .90
>STYA ZPPtr1 MAC.ID
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SRC.GetChar
bcs .8
cmp #' '
bne .92
jsr SRC.GetNextChar
beq .8 eol..
cmp #' ' some arg...
bne .8
.2 jsr SRC.GetNextChar comment....skip
bcc .2
.8 >LDA.G MAC.StkPtr
cmp #MA.MAXDEPTH*8
beq .91
stz ZPPtr2
stz ZPPtr2+1 offset = 0
>INC.G MAC.CtxID
>INC.G MAC.Depth
>LDA.G MAC.StkPtr
tay
lda ZPLinePtr+1 push args
sta (ZPMacroStk),y
iny
lda ZPLinePtr
sta (ZPMacroStk),y
iny
jmp MAC.Push
.90 lda #E.MACRO.INV
sec
rts
.91 lda #E.MACRO.TOO.MANY
sec
rts
.92 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.MAC
LOAD USR/SRC/BIN/ASM.S

View File

@ -106,10 +106,34 @@ OUT.PrintLine jsr OUT.PrintLineOn
OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
bcs OUT.Print.RTS
>PUSHW ZPLineBuf
>PUSHW.G SRC.LINENUM
>PUSHBI 4
>LDYA L.MSG.SRCLINE
>LDA.G SRC.COUNT
.1 dec
bmi .2
pha
>LDA.G '>'
>SYSCALL putchar
pla
bra .1
.2 >PUSHW.G SRC.LINENUM
>PUSHBI 2
>LDYA L.MSG.LINENUM
>SYSCALL printf
>LDA.G MAC.Depth
.3 dec
bmi .4
pha
>LDA.G '>'
>SYSCALL putchar
pla
bra .3
.4 >LDYA ZPLineBuf
>SYSCALL puts
jmp OUT.PrintCR1
*---------------------------------------
OUT.Print >SYSCALL printf
bcs OUT.Print.RTS
@ -226,8 +250,8 @@ OUT.EmitByte phy
OUT.PrintCR >PUSHBI 0
>LDYA L.MSG.CRLF
>SYSCALL printf
>DEC.G OUT.LineCnt
>DEBUG
OUT.PrintCR1 >DEC.G OUT.LineCnt
bne .8
lda #PAGE.LEN

View File

@ -85,7 +85,7 @@ SRC.ParseLine.Macro
.8 clc
rts
.80 lda #0
.80 lda #C.CR
jmp MAC.AddChar
.3 lda (ZPLinePtr)
@ -130,10 +130,18 @@ SRC.ParseLine.LABEL
cmp #' ' no label...go scan dir/opcode
beq SRC.ParseLine.DirOp
tax save char...
cmp #'.' local symbol?
bne .1
beq .1
cmp #':' private symbol?
bne .8
>LDA.G MAC.StkPtr
beq SRC.ParseLine.InvLbl
>LDA.G SYM.bInGlobal Not relative to Global label...
.1 >LDA.G SYM.bInGlobal Not relative to Global label...
bpl SRC.ParseLine.InvLbl
jsr SRC.GetNextChar
@ -148,11 +156,18 @@ SRC.ParseLine.LABEL
lda SRC.ACC
beq SRC.ParseLine.InvLbl .0 is not allowed
jsr SYM.NewOrGetLocalA
bcs SRC.ParseLine.RTS
cpx #':'
beq .2
jsr SYM.NewLocalA
bra .3
.2 jsr SYM.NewPrivateA
.3 bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.1 jsr SYM.NewOrGetGlobal
.8 jsr SYM.NewOrGetGlobal
bcs SRC.ParseLine.RTS
*---------------------------------------
SRC.ParseLine.DirOp
@ -172,7 +187,7 @@ SRC.ParseLine.DirOp
.5 cmp #'>'
bne SRC.ParseLine.OpCode
jsr SRC.ParseLine.ExecMacro
jsr MAC.Exec
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
@ -199,49 +214,6 @@ SRC.ParseLine.Dir
jmp (J.DIRECTIVES,x)
*---------------------------------------
SRC.ParseLine.ExecMacro
jsr SRC.GetNextChar skip '>'
bcs .90
jsr MAC.Lookup
bcs .90
>STYA ZPPtr1 MAC.ID
>LDA.G MAC.StkPtr
cmp #MA.MAXDEPTH*4
beq .91
tay
lda #0
sta (ZPMacroStk),y
iny
sta (ZPMacroStk),y
iny
lda ZPPtr1
sta (ZPMacroStk),y
iny
lda ZPPtr1+1
sta (ZPMacroStk),y
iny
tya
>STA.G MAC.StkPtr
clc
rts
.90 lda #E.MACRO.INV
sec
rts
.91 lda #E.MACRO.TOO.MANY
sec
rts
*---------------------------------------
SRC.ParseLine.OpCode
>LDYA ZPOpsPtr
>STYA ZPOpDefPtr

View File

@ -113,37 +113,57 @@ SYM.Dump >LDA.G ASM.LI.ON
bit #SYMG.F.LOCALS
beq .7
ldy #SYMG
jsr SYM.Dump.LP
.7 jsr OUT.PrintCR
jmp .1
*---------------------------------------
SYM.Dump.LP ldy #SYMG
.4 lda (ZPSymbolBuf),y
beq .7 End Local Symbol
beq .8
pha Save ID
phy
iny
ldx #4
iny Skip Macro ID
.5 iny
lda (ZPSymbolBuf),y
>PUSHA
dex
bne .5
pla
>PUSHA
phy
>PUSHBI 6
>LDYA L.MSG.LSYMBOL
>SYSCALL printf
ply
iny
bra .4
lda (ZPSymbolBuf),y
tax
beq .55
>PUSHA
.7 >PUSHBI 0
>LDYA L.MSG.CRLF
>SYSCALL printf
jmp .1
.55 dey
lda (ZPSymbolBuf),y
>PUSHA
phy
txa
beq .6
>PUSHBI 6
>LDYA L.MSG.PSYMBOL
bra .66
.6 >PUSHBI 5
>LDYA L.MSG.LSYMBOL
.66 >SYSCALL printf
pla
clc
adc #SYML
tay
bra .4
.8 rts
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
@ -298,6 +318,7 @@ SYM.StoreGlobal >LDA.G ASM.PASS
lda #0
>STA.G SYM.bInGlobal
>STA.G MAC.CtxID
rts
@ -336,12 +357,17 @@ SYM.Acc2Global ldy #SYMG-1
rts
*---------------------------------------
* Local Symbol Record: (6 bytes)
* Local/Private Symbol Record: (6 bytes)
* 0 : Local ID (1->255)
* 1 : Macro ID
* 1 : Macro Context ID
* 2-5 : 32 bits Value (PC)
*---------------------------------------
SYM.NewOrGetLocalA
SYM.NewPrivateA sec
.HS 90 BCC
SYM.NewLocalA clc
ror ZPPtr1
tax Save Local ID
>LDA.G SYM.bInGlobal not in a global label
@ -365,8 +391,12 @@ SYM.NewOrGetLocalA
cpy #ASM.PC
bne .1
>LDA.G MAC.StkPtr Get Macro Context ID
pha
lda #0
bit ZPPtr1
bpl .11 local, Ctx = 0
>LDA.G MAC.CtxID Get Macro Context ID
.11 pha
>LDA.G SYM.GlobalPtr
tay
@ -412,18 +442,23 @@ SYM.GetLocalX lda (ZPSymbolBuf)
beq .9
ldy #SYMG
.1 lda (ZPSymbolBuf),y
beq .9
txa
cmp (ZPSymbolBuf),y
bne .4
phy
>LDA.G MAC.CtxID
ply
iny
cmp (ZPSymbolBuf),y
bne .3
ldx #0
iny Macro ID
.2 iny
lda (ZPSymbolBuf),y
sta SRC.ACC,x
@ -436,8 +471,9 @@ SYM.GetLocalX lda (ZPSymbolBuf)
clc
rts
.3 tya
.3 dey
.4 tya
clc
adc #SYML
tay

View File

@ -7,6 +7,9 @@ AUTO 4,1
.TF BIN/ASM
*---------------------------------------
PAGE.LEN .EQ 23
DO.MAXDEPTH .EQ 8
IN.MAXDEPTH .EQ 4
MA.MAXDEPTH .EQ 8
*---------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
@ -54,27 +57,23 @@ ASM.T.AM .EQ 0
ASM.T.R .EQ 2
ASM.T.O .EQ 4
*---------------------------------------
DO.MAXDEPTH .EQ 8
IN.MAXDEPTH .EQ 4
MA.MAXDEPTH .EQ 8
*---------------------------------------
E.SYNTAX.ERROR .EQ $A0
E.SYM.TOO.LONG .EQ $A1
E.VAL.TOO.BIG .EQ $A2
E.VAL.TOO.BIG .EQ $A2
E.LINE.TOO.LONG .EQ $A3
E.INV.LABEL .EQ $A4
E.INV.DIR .EQ $A5
E.INV.OPCODE .EQ $A6
E.INV.AM.SYN .EQ $A7
E.INV.AM .EQ $A8
E.INV.AM.4.OC .EQ $A9
E.INV.DIR .EQ $A5
E.INV.OPCODE .EQ $A6
E.INV.AM.SYN .EQ $A7
E.INV.AM .EQ $A8
E.INV.AM.4.OC .EQ $A9
E.RANGE .EQ $AA
E.UNDEF.SYMBOL .EQ $AB
E.SYMBOL.REDEF .EQ $AC
E.TOO.MANY.DO .EQ $AD
E.TOO.MANY.DO .EQ $AD
E.ELSE.WITHOUT.DO .EQ $AE
E.TOO.MANY.LOCAL .EQ $AF
E.MISSING.EXP .EQ $B0
E.MISSING.EXP .EQ $B0
E.EXP.SYN.ERROR .EQ $B1
E.MACRO.INV.DEF .EQ $B2
E.MACRO.TOO.BIG .EQ $B3
@ -118,10 +117,11 @@ L.MSG.EQU0 .DA MSG.EQU0
.DA MSG.EQU3
.DA MSG.EQU4
L.MSG.PASS .DA MSG.PASS
L.MSG.SRCLINE .DA MSG.SRCLINE
L.MSG.LINENUM .DA MSG.LINENUM
L.MSG.ERROR .DA MSG.ERROR
L.MSG.SYMBOLS .DA MSG.SYMBOLS
L.MSG.LSYMBOL .DA MSG.LSYMBOL
L.MSG.PSYMBOL .DA MSG.PSYMBOL
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.END .DA MSG.END
L.MSG.PSTR .DA MSG.PSTR
@ -313,8 +313,9 @@ CS.RUN ldy #S.PS.hStdIn
jsr MAC.ReadLine
bcc .2
tax
cmp #E.NODATA
bne .9
>DEC.G MAC.Depth
.20 jsr FIO.ReadLine
bcc .2
@ -470,10 +471,11 @@ MSG.EQU1 .AZ " [ %h] "
MSG.EQU2 .AZ " [ %h%h] "
MSG.EQU3 .AZ " [ %h%h%h] "
MSG.EQU4 .AZ " [%h%h%h%h] "
MSG.SRCLINE .AZ " %05D %s"
MSG.LINENUM .AZ " %05D "
MSG.ERROR .AZ "**** Fatal Error $%h"
MSG.SYMBOLS .AZ "Symbol Table:"
MSG.LSYMBOL .AZ " .%d=%h%h%h%h"
MSG.PSYMBOL .AZ " :%d(%d)=%h%h%h%h"
MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\n"
MSG.END .AZ "End Of Assembly."
MSG.PSTR .AS "{%S}"
@ -561,7 +563,10 @@ MAC.hBuf .BS 1
MAC.BufPtr .BS 1
MAC.hStk .BS 1
MAC.StkPtr .BS 1
MAC.CtxID .BS 1
MAC.ID .BS 2
MAC.Depth .BS 1
MAC.CtxIDS .BS MA.MAXDEPTH
OUT.PC .BS 4
OUT.Buf .BS 4

View File

@ -85,7 +85,7 @@ CMD.CD.1 >SYSCALL realpath
bcs CMD.POPD.RTS
>STYA ZPPtr1
stx TmpByte Save hMem
stx M32.TMP Save hMem
ldy #1
lda (ZPPtr1),y
@ -107,7 +107,7 @@ CMD.CD.1 >SYSCALL realpath
lda #MLI.E.INVPATH
.19 pha
lda TmpByte
lda M32.TMP
>SYSCALL freemem
pla
sec
@ -124,7 +124,7 @@ CMD.CD.1 >SYSCALL realpath
cmp #'/'
bne .14
lda TmpByte
lda M32.TMP
jmp CMD.SetPrefixA already ends with a /
.14 iny
@ -147,7 +147,7 @@ CMD.CD.1 >SYSCALL realpath
lda #'/'
sta (ZPPtr2),y
phx
lda TmpByte
lda M32.TMP
>SYSCALL freemem
pla
*--------------------------------------
@ -480,8 +480,8 @@ CMD.EXIT lda (ZPArgVBufPtr)
>SYSCALL AToL
bcs .9
>PULLL.G M32.ACC
>LDA.G M32.ACC
>PULLL M32.ACC
lda M32.ACC
.8 pha
lda #$FF
@ -572,6 +572,35 @@ CMD.FUNC lda (ZPArgVBufPtr)
CMD.RETURN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.CALL >LDA.G hFuncList
beq .9
>PUSHW ZPInputBufPtr
>LDA.G hFuncList
>SYSCALL SListLookup
bcs .9
>STYA M32.TMP KeyID
>PUSHWI 0 From Start
>PUSHWI $ffff all
>PUSHWI 0 Allocate..
>PUSHW M32.TMP KeyID
>LDA.G hFuncList
>SYSCALL SListGetData
bcs .99
txa
pha
>SYSCALL GetMemPtr
pla
>SYSCALL freemem
rts
.9 lda #E.FUNDEF
sec
.99 rts
*--------------------------------------
CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test
bcs .9

View File

@ -64,8 +64,11 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
>STA.G CORE.PSFlags
lda #$ff
>STA.G CORE.IntCmd assume external
inc
>STA.G CORE.CmdFile no Cmd file mode
jsr CORE.GetCharNB
bcc .11
@ -120,27 +123,18 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
cmp #C.SPACE
bne .4
>LDA.G CORE.PSFlags yes, child process will run in same ENV
and #$ff^S.PS.F.DUPENV
sta (pData),y
jsr CORE.GetNextCharNB skip ". "
bcs .99 nothing to execute...
lda #$ff
>STA.G CORE.CmdFile
bra .42
.4 >LDYA L.CMD internal command ?
jsr CORE.LookupInputBuf
bcc .41
>LDA.G hFuncList
beq .40
>PUSHW ZPInputBufPtr
>LDA.G hFuncList
>SYSCALL SListLookup
bcs .40
jmp CORE.ExecFunc
.40 jsr CORE.ArgV.Add external cmd, go check context
bra .42
@ -225,10 +219,22 @@ CORE.ExecCmd.1 lda #0
>LDA.G CORE.IntCmd
bmi CORE.ExecExtCmd
asl
tax
jmp (J.CMD,x)
CORE.ExecExtCmd >PUSHB.G CORE.PSFlags
CORE.ExecExtCmd >LDA.G CORE.CmdFile
bpl .1
>LDYA ZPArgVBufPtr
>SYSCALL puts
>DEBUG
>LDYA ZPArgVBufPtr
jsr IO.FILECALL.NOQUIT
bra CORE.ExecExtCmd.Exit
.1 >PUSHB.G CORE.PSFlags
>LDYA ZPArgVBuf
>SYSCALL execv
@ -342,31 +348,6 @@ CORE.SkipLine jsr CORE.GetNextCharNB
.8 rts
*--------------------------------------
CORE.ExecFunc >STYA TmpWord KeyID
jsr CORE.SkipLine
>PUSHWI 0 From Start
>PUSHWI $ffff all
>PUSHWI 0 Allocate..
>PUSHW TmpWord KeyID
>LDA.G hFuncList
>SYSCALL SListGetData
bcs .9
txa
pha
>SYSCALL GetMemPtr
>SYSCALL puts
>DEBUG
pla
>SYSCALL freemem
.9 rts
*--------------------------------------
* search ZPInputBufPtr/ZPArgVBufPtr in Y,A table
*--------------------------------------
CORE.LookupInputBuf
@ -421,7 +402,6 @@ CORE.Lookup >STYA ZPPtr2
inc ZPPtr1+1
.6 inx
inx
lda (ZPPtr1) Array Ending 0, must be an external Cmd....
bne .1
@ -436,38 +416,38 @@ CORE.ArgV.Add >LDYA ZPArgVBufPtr
>STYA ZPArgVBufPrev Save String start of Expand
lda #C.SPACE
sta TmpByte
sta M32.TMP
jsr CORE.GetCharNB
bcs .9
cmp #'"'
bne .10
sta TmpByte
sta M32.TMP
bra .1
.10 cmp #'('
bne .11
ldx #')'
stx TmpByte
stx M32.TMP
bra .12
.11 cmp #'`'
bne .12
sta TmpByte
sta M32.TMP
.12 jsr CORE.ArgV.PutChar
.1 jsr CORE.GetNextChar
bcs .5
.2 cmp TmpByte
.2 cmp M32.TMP
bne .3
jsr CORE.GetNextChar
bra .5
.3 ldy TmpByte
.3 ldy M32.TMP
cpy #C.SPACE
bne .40
jsr CORE.IsEndCmd
@ -533,7 +513,10 @@ CORE.ArgV.Next lda (ZPArgVBufPtr)
*--------------------------------------
* IO
*--------------------------------------
CORE.IO.JMP jmp (J.CORE.IO,x)
CORE.IO.JMP txa
asl
tax
jmp (J.CORE.IO,x)
CORE.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD

View File

@ -14,9 +14,9 @@ EXP.GET jsr CORE.ArgV.Next
>SYSCALL AToL
bcs .99
>PULLL.G M32.ACC
>PULLL M32.ACC
.2 >LDYA L.EXP.OP.MATH + - .... ?
.2 >LDYA L.EXP.OP.MATH + - .... ?
jsr CORE.LookupArgVBuf
bcs .9
@ -25,28 +25,28 @@ EXP.GET jsr CORE.ArgV.Next
jsr M32.ACC2ARG
jsr CORE.ArgV.Next get next argument in ACC
jsr CORE.ArgV.Next get next argument in ACC
beq .9
>LDYA ZPArgVBufPtr
>SYSCALL AToL
bcs .9
>PULLL.G M32.ACC
>PULLL M32.ACC
jsr EXP.GET.OP
.99 bcs .9
jsr CORE.ArgV.Next another op ?
bne .2
.8 >PUSHL.G M32.ACC
.8 >PUSHL M32.ACC
>PUSHBI 4
>PUSHW L.M32.Printf
>LEA.G M32.BUF
>SYSCALL sprintf
bcs .9
>LEA.G M32.Buf
>LEA.G M32.BUF
rts
@ -55,6 +55,7 @@ EXP.GET jsr CORE.ArgV.Next
rts
EXP.GET.OP >LDA.G CORE.Operator
asl
tax
jmp (J.EXP.OP.MATH,x)
*--------------------------------------
@ -131,6 +132,7 @@ EXP.TEST.UNARY jsr CORE.ArgV.Next
beq EXP.OP.UNARY.ESYN we need one arg or ]
>LDA.G CORE.Operator
asl
tax
jmp (J.EXP.OP.UNARY,x)
@ -232,7 +234,7 @@ EXP.TEST.BINARY.NUM
>SYSCALL AToL
bcs EXP.TEST.BINARY.ESYN
>PULLL.G M32.ACC
>PULLL M32.ACC
jsr CORE.ArgV.Next
beq EXP.TEST.BINARY.ESYN
@ -241,7 +243,7 @@ EXP.TEST.BINARY.NUM
>SYSCALL AToL
bcs EXP.TEST.BINARY.ESYN
>PULLL.G M32.ARG
>PULLL M32.ARG
jsr M32.Cmp
@ -263,6 +265,11 @@ EXP.TEST.BINARY.END
clc
rts
*--------------------------------------
EXP.OP.AND
EXP.OP.OR
clc
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/SH.S.EXP
LOAD USR/SRC/BIN/SH.S

View File

@ -3,7 +3,7 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
HIS.Init >LDYAI History.MAX Get a buffer for History
HIS.Init >LDYAI HISTORY.MAX Get a buffer for History
>SYSCALL GetMem0
bcs .9
@ -15,6 +15,11 @@ HIS.Init >LDYAI History.MAX Get a buffer for History
>STA.G HIS.Index
.9 rts
*--------------------------------------
HIS.Quit >LDA.G HIS.hBuf
beq .9
>SYSCALL FreeMem
.9 rts
*--------------------------------------
HIS.Add >LDA.G HIS.hBuf
beq .9
@ -174,11 +179,6 @@ HIS.GetA ldy #0
.80 clc
rts
*--------------------------------------
HIS.Quit >LDA.G HIS.hBuf
beq .9
>SYSCALL FreeMem
.9 rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/SH.S.HIS
LOAD USR/SRC/BIN/SH.S

View File

@ -3,11 +3,97 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
IO.Init lda #FILECALL.STACK
>STA.G FILECALL.STACK
rts
*--------------------------------------
IO.Reset jsr IO.Reset.In
jsr IO.Reset.Out
jsr IO.Reset.Err
IO.Reset.9 rts
*--------------------------------------
IO.FILECALL.QUIT sec
.HS 90 BCC
IO.FILECALL.NOQUIT clc
>STYA ZPPtr1 Filename
lda #0
ror
>STA.G bExitOnEOF
>LDA.G FILECALL.STACK
cmp #FILECALL.STACK+FILECALL.STACK.MAX*3
beq .90
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadTxtFile
bcs .9
>LDA.G FILECALL.STACK
tay
iny
lda ZPInputBufPtr+1
sta (pData),y
iny
lda ZPInputBufPtr
sta (pData),y
iny
txa
sta (pData),y
tya
>STA.G FILECALL.STACK
txa
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$ff
>STA.G bBatchMode
*
* clc
rts
.90 lda #E.STKOVERFLOW
sec
.9 rts
*--------------------------------------
IO.FEXIT >LDA.G FILECALL.STACK
cmp #FILECALL.STACK
beq .90
tay
dey
lda (pData),y
tax hBuf
dey
lda (pData),y
sta ZPInputBufPtr
dey
lda (pData),y
sta ZPInputBufPtr+1
tya
>STA.G FILECALL.STACK
txa
>SYSCALL GetMemPtr
>STYA ZPInputBuf
* clc
rts
.90 lda #E.STACKERROR
sec
rts
*--------------------------------------
IO.Pipe.In >LDA.G IO.hOut
ldy #S.PS.hStdOut
sta (pPS),y
@ -20,7 +106,7 @@ IO.Pipe.In >LDA.G IO.hOut
>LEA.G IO.NodBuf
>SYSCALL fopen
bcs IO.Reset.9
bcs IO.Set.RTS
*--------------------------------------
IO.Set.In pha
jsr IO.Reset.In
@ -30,7 +116,7 @@ IO.Set.In pha
pla
ldy #S.PS.hStdIn
sta (pPS),y
rts
IO.Set.RTS rts
*--------------------------------------
IO.Reset.In >LDA.G IO.hIn
beq .8
@ -150,12 +236,12 @@ IO.PrintBatchErrMsg
.11 >STYA ZPPtr2
stz TmpWord Line Count
stz TmpWord+1
stz M32.TMP Line Count
stz M32.TMP+1
.1 inc TmpWord
.1 inc M32.TMP
bne .2
inc TmpWord+1
inc M32.TMP+1
.2 ldy #$ff
@ -226,7 +312,7 @@ IO.PrintBatchErrMsg
ply
bra .7
.8 >PUSHW TmpWord
.8 >PUSHW M32.TMP
>PUSHBI 2
>PUSHW L.MSG.BATCHERR

View File

@ -6,46 +6,48 @@ AUTO 4,1
.OR $2000
.TF BIN/SH
*--------------------------------------
History.MAX .EQ 256
HISTORY.MAX .EQ 256
CORE.STACK.MAX .EQ 64
PUSHD.STACK.MAX .EQ 8
FILECALL.STACK.MAX .EQ 8
*--------------------------------------
C.NOHUP .EQ 0
C.CD .EQ 2
C.DATE .EQ 4
C.ECHO .EQ 6
C.EXIT .EQ 8
C.GETKEY .EQ 10
C.MD .EQ 12
C.PAUSE .EQ 14
C.PWD .EQ 16
C.RD .EQ 18
C.READ .EQ 20
C.REN .EQ 22
C.SET .EQ 24
C.SLEEP .EQ 26
C.SHIFT .EQ 28
C.TIME .EQ 30
C.PUSHD .EQ 32
C.POPD .EQ 34
C.FUNC .EQ 36
C.RETURN .EQ 38
C.BREAK .EQ 40
C.SWITCH .EQ 42
C.CASE .EQ 44
C.DEFAULT .EQ 46
C.END .EQ 48
C.CD .EQ 1
C.DATE .EQ 2
C.ECHO .EQ 3
C.EXIT .EQ 4
C.GETKEY .EQ 5
C.MD .EQ 6
C.PAUSE .EQ 7
C.PWD .EQ 8
C.RD .EQ 9
C.READ .EQ 10
C.REN .EQ 11
C.SET .EQ 12
C.SLEEP .EQ 13
C.SHIFT .EQ 14
C.TIME .EQ 15
C.PUSHD .EQ 16
C.POPD .EQ 17
C.FUNC .EQ 18
C.RETURN .EQ 19
C.CALL .EQ 20
C.BREAK .EQ 21
C.SWITCH .EQ 22
C.CASE .EQ 23
C.DEFAULT .EQ 24
C.END .EQ 25
*--------------------------------------
C.FOR .EQ 50
C.FOR .EQ 26
C.FOR.LIST .EQ 0
C.FOR.FILE .EQ 2
C.FOR.EXEC .EQ 4
C.WHILE .EQ 52
C.IF .EQ 54
C.NEXT .EQ 56
C.LOOP .EQ 58
C.ELSE .EQ 60
C.FI .EQ 62
C.WHILE .EQ 27
C.IF .EQ 28
C.NEXT .EQ 29
C.LOOP .EQ 30
C.ELSE .EQ 31
C.FI .EQ 32
*--------------------------------------
E.CSYN .EQ $C0
E.ESYN .EQ $C1
@ -56,6 +58,7 @@ E.NOFOR .EQ $C5
E.NOIF .EQ $C6
E.BADEXP .EQ $C7
E.BADFTYPE .EQ $C8
E.FUNDEF .EQ $C7
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
@ -73,10 +76,14 @@ ZPArgVBuf .BS 2
ZPArgVBufPrev .BS 2
ZPArgVBufPtr .BS 2
ZPVarNamePtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
TmpWord .BS 2
TmpByte .BS 1
M32.ACC .BS 4
M32.ARG .BS 4
M32.TMP .BS 4
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -141,6 +148,7 @@ J.CMD .DA CMD.NOHUP
.DA CMD.POPD
.DA CMD.FUNC
.DA CMD.RETURN
.DA CMD.CALL
.DA CMD.BREAK
.DA CMD.SWITCH
.DA CMD.CASE
@ -179,6 +187,9 @@ J.EXP.OP.MATH .DA M32.Add
.DA M32.Mul
.DA M32.Div
.DA M32.Mod
L.EXP.OP.LOGIC .DA EXP.OP.LOGIC
J.EXP.OP.LOGIC .DA EXP.OP.AND
.DA EXP.OP.OR
L.HOME.PROFILE .DA HOME.PROFILE
L.M32.Printf .DA M32.Printf
L.ERR.Codes .DA ERR.Codes
@ -191,31 +202,21 @@ CS.INIT.RTS rts
*--------------------------------------
CS.RUN jsr CL.Init
jsr CORE.Init
jsr IO.Init
ldy #S.PS.ARGC
lda (pPS),y
beq .1 no arg, continue starting interactive
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
lda #1
>SYSCALL ArgV
>SYSCALL LoadTxtFile
jsr IO.FILECALL.QUIT Exec file an exit
bcs CS.INIT.RTS
txa
>STA.G hInputBuf
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #0
jsr CMD.SHIFTA Remove $0=/bin/sh
jsr CMD.SHIFTA Remove $0=/bin/sh
lda #$ff
>STA.G bBatchMode
bra CS.RUN.LOOP
*--------------------------------------
.1 jsr CMD.CD.HOME
@ -231,11 +232,12 @@ CS.RUN jsr CL.Init
>PUSHEA.G StatBuf
>LDYA L.HOME.PROFILE
>SYSCALL STAT
bcs CS.RUN.LOOP
>PUSHBI S.PS.F.HOLD
bcs CS.RUN.LOOP no profile...
>LDYA L.HOME.PROFILE
>SYSCALL execl
jsr IO.FILECALL.NOQUIT exec profile and continue
* bcs CS.RUN.LOOP
*--------------------------------------
CS.RUN.LOOP >SLEEP
@ -434,9 +436,12 @@ CS.RUN.BATCH
bne CS.RUN.LOOP.END
pha
lda #$ff
jsr IO.FEXIT
>LDA.G bExitOnEOF
>STA.G bExit
pla
sec
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
@ -602,6 +607,7 @@ CMD .AZ "NOHUP"
.AZ "POPD"
.AZ "FUNC"
.AZ "RETURN"
.AZ "CALL"
.AZ "BREAK"
.AZ "SWITCH"
.AZ "CASE"
@ -667,8 +673,11 @@ EXP.OP.BINARY.BITS
EXP.OP.MATH .AZ "+"
.AZ "-"
.AZ "*"
.AZ "div"
.AZ "mod"
.AZ "/"
.AZ "MOD"
.HS 00
EXP.OP.LOGIC .AZ "&&"
.AZ "||"
.HS 00
*--------------------------------------
.INB USR/SRC/X.M32.S
@ -684,13 +693,16 @@ M32.Printf .AZ "%L"
DS.START
CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr)
PUSHD.STACK .BS PUSHD.STACK.MAX+1
FILECALL.STACK .BS FILECALL.STACK.MAX*3+1
hFuncList .BS 1
hInputBuf .BS 1
bReadMode .BS 1
bBatchMode .BS 1
bFuncMode .BS 1
bExitOnEOF .BS 1
bEscMode .BS 1
bPause .BS 1
@ -711,6 +723,7 @@ CL.Len .BS 1
CL.bReady .BS 1
CORE.IntCmd .BS 1
CORE.CmdFile .BS 1
CORE.hArgVBuf .BS 1
CORE.ArgIndex .BS 1
@ -729,9 +742,6 @@ IO.hPipe .BS 1
IO.NodBuf .BS 12 /DEV/PIPExx\0
*--------------------------------------
M32.BUF .BS 12 -1234567890\0
M32.ACC .BS 4
M32.ARG .BS 4
M32.TMP .BS 4
DS.END .ED
*--------------------------------------
MAN

View File

@ -22,7 +22,7 @@ SLIST.GetData jsr SLIST.Select
eor #$ff
sta SLIST.nDataCnt
lda SLIST.DataLen+1
sbc ZPMemMgrSize
sbc ZPMemMgrSize+1
eor #$ff
sta SLIST.nDataCnt+1 Data remaining
@ -75,7 +75,7 @@ SLIST.GetData jsr SLIST.Select
bpl .5
cmp #C.CR
beq .7
beq .8
.5 jsr MEM.SetDataByte
inc ZPSListDataLen
@ -87,8 +87,6 @@ SLIST.GetData jsr SLIST.Select
sec
.9 rts
.7 jsr SLIST.GetNextByte
.8 bit SLIST.bStringMode
bpl .81

View File

@ -3,60 +3,45 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
* Uses: (pData)
* Uses: 12 ZP
* M32.ACC .BS 4
* M32.ARG .BS 4
* M32.TMP .BS 4
*--------------------------------------
* TODO : Make it SIGNED 32 bits
* TODO : Implement mul, div, mod ...
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
M32.Add ldy #M32.ARG+4 ARG+ACC->ACC
.1 dey
lda (pData),y
pha
cpy #M32.ARG
bne .1
M32.Add ldx #4
ldy #0
ldy #M32.ACC
ldx #4
clc ARG+ACC->ACC
clc
.2 pla
adc (pData),y
sta (pData),y
.1 lda M32.ARG,y
adc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .2
clc
bne .1
clc
rts if CS, Overflow
*---------------------------------------
M32.Sub ldy #M32.ARG+4 ARG-ACC->ACC
M32.Sub ldx #4
ldy #0
sec ARG-ACC->ACC
.1 dey
lda (pData),y
pha
cpy #M32.ARG
bne .1
ldy #M32.ACC
ldx #4
sec
.2 pla
sbc (pData),y
sta (pData),y
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .2
bne .1
clc
rts
clc
rts
bcs .8 if CC, Overflow
@ -66,69 +51,154 @@ M32.Sub ldy #M32.ARG+4 ARG-ACC->ACC
.8 clc
rts
*--------------------------------------
M32.Mul
*--------------------------------------
M32.Div
M32.Mul ldx #3 ARG*ACC->ACC
sec
rts
*--------------------------------------
M32.Mod
.1 lda M32.ACC,x
sta M32.TMP,x
stz M32.ACC,x
dex
bpl .1
ldx #32
.2 lsr M32.TMP+3
ror M32.TMP+2
ror M32.TMP+1
ror M32.TMP
bcc .3
clc
lda M32.ARG
adc M32.ACC
sta M32.ACC
lda M32.ARG+1
adc M32.ACC+1
sta M32.ACC+1
lda M32.ARG+2
adc M32.ACC+2
sta M32.ACC+2
lda M32.ARG+3
adc M32.ACC+3
sta M32.ACC+3
.3 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
dex
bne .2
clc
rts
*--------------------------------------
M32.ACC2ARG ldy #M32.ACC+4 ACC->ARG
.1 dey
lda (pData),y
M32.Mod sec
.HS 90 BCC
*--------------------------------------
M32.Div clc
php
stz M32.TMP ARG/ACC->ACC
stz M32.TMP+1
stz M32.TMP+2
stz M32.TMP+3
ldx #32
.1 asl M32.ARG
rol M32.ARG+1
rol M32.ARG+2
rol M32.ARG+3
rol M32.TMP
rol M32.TMP+1
rol M32.TMP+2
rol M32.TMP+3
sec
lda M32.TMP
sbc M32.ACC
pha
cpy #M32.ACC
lda M32.TMP+1
sbc M32.ACC+1
pha
lda M32.TMP+2
sbc M32.ACC+2
pha
lda M32.TMP+3
sbc M32.ACC+3
bcs .2
pla
pla
pla
dex
bne .1
bra .3
ldy #M32.ARG
.2 sta M32.TMP+3
pla
sta M32.TMP+2
pla
sta M32.TMP+1
pla
sta M32.TMP
.2 pla
sta (pData),y
iny
cpy #M32.ARG+4
bne .2
inc M32.ARG bit0 always 0 because of .1 asl
dex
bne .1
.3 plp
ldx #3
ldy #M32.ARG+3
bcc .4
ldy #M32.TMP+3
clc
.4 lda $0,y
sta M32.ACC,x
dey
dex
bpl .4
rts
*--------------------------------------
M32.ACC2ARG ldx #3 ACC->ARG
.1 lda M32.ACC,x
sta M32.ARG,x
dex
bpl .1
rts
*--------------------------------------
M32.Cmp ldx #4
ldy #M32.ARG+3
.1 lda (pData),y
pha
dey
dex
bne .1
ldx #4
ldy #M32.ACC
ldy #0
sec
.2 pla
sbc (pData),y
sta (pData),y
.1 lda M32.ARG,y
sbc M32.ACC,y
sta M32.ACC,y
iny
dex
bne .2
bne .1
bcc .5 CC if ACC < ARG
ldy #M32.ACC
lda (pData),y
iny
ora (pData),y
iny
ora (pData),y
iny
ora (pData),y Z if ACC = ARG
lda M32.ACC
ora M32.ACC+1
ora M32.ACC+2
ora M32.ACC+3 Z if ACC = ARG
bne .4