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 | | \<value\> | Working | $VAR \| string \| "string with SPACE" \| 123 \| -456 |
| \<expression\> | Working | \<value\> [\<op\> \<value\>] ... | | \<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 ] | | \<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 | | BREAK | Working | Exit CASE of SWITCH |
| CASE | Working | CASE <expression> | | CASE | Working | CASE <expression> |

View File

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

View File

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

View File

@ -26,6 +26,7 @@ MAC.Init >SYSCALL SListNew
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr MAC.Reset >STZ.G MAC.StkPtr
>STA.G MAC.CtxID
rts rts
*--------------------------------------- *---------------------------------------
MAC.Quit >LDA.G MAC.hStk MAC.Quit >LDA.G MAC.hStk
@ -58,9 +59,12 @@ MAC.AddChar tax
>INC.G MAC.BufPtr >INC.G MAC.BufPtr
txa txa
beq .1
cmp #C.CR
bne .8 bne .8
>LDA.G MAC.BufPtr .1 >LDA.G MAC.BufPtr
tay tay
lda #0 lda #0
@ -72,58 +76,156 @@ MAC.AddChar tax
rts rts
.8 clc .8 clc
rts MAC.AddChar.RTS 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.ReadLine >LDA.G MAC.StkPtr MAC.ReadLine >LDA.G MAC.StkPtr
tay tay
dey dey
dey
dey
lda (ZPMacroStk),y 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 tya
dey >STA.G MAC.StkPtr
lda (ZPMacroStk),y
>PUSHA
lda #0
>PUSHA len = 0 (string mode)
>PUSHA
>PUSHW ZPPtr2 offset
>PUSHWI 0 len = 0 (string mode)
>PUSHW ZPLineBuf >PUSHW ZPLineBuf
>LDA.G MAC.StkPtr >PUSHW ZPPtr1 Mac ID
tay
dey
lda (ZPMacroStk),y
>PUSHA
dey
lda (ZPMacroStk),y
>PUSHA
>LDA.G MAC.hList >LDA.G MAC.hList
>SYSCALL SListGetData >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 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 MAN
SAVE USR/SRC/BIN/ASM.S.MAC SAVE USR/SRC/BIN/ASM.S.MAC
LOAD USR/SRC/BIN/ASM.S LOAD USR/SRC/BIN/ASM.S

View File

@ -106,10 +106,34 @@ OUT.PrintLine jsr OUT.PrintLineOn
OUT.PrintLine.1 jsr OUT.PrintLineOutBuf OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
bcs OUT.Print.RTS bcs OUT.Print.RTS
>PUSHW ZPLineBuf >LDA.G SRC.COUNT
>PUSHW.G SRC.LINENUM
>PUSHBI 4 .1 dec
>LDYA L.MSG.SRCLINE 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 OUT.Print >SYSCALL printf
bcs OUT.Print.RTS bcs OUT.Print.RTS
@ -226,8 +250,8 @@ OUT.EmitByte phy
OUT.PrintCR >PUSHBI 0 OUT.PrintCR >PUSHBI 0
>LDYA L.MSG.CRLF >LDYA L.MSG.CRLF
>SYSCALL printf >SYSCALL printf
>DEBUG
>DEC.G OUT.LineCnt OUT.PrintCR1 >DEC.G OUT.LineCnt
bne .8 bne .8
lda #PAGE.LEN lda #PAGE.LEN

View File

@ -85,7 +85,7 @@ SRC.ParseLine.Macro
.8 clc .8 clc
rts rts
.80 lda #0 .80 lda #C.CR
jmp MAC.AddChar jmp MAC.AddChar
.3 lda (ZPLinePtr) .3 lda (ZPLinePtr)
@ -130,10 +130,18 @@ SRC.ParseLine.LABEL
cmp #' ' no label...go scan dir/opcode cmp #' ' no label...go scan dir/opcode
beq SRC.ParseLine.DirOp beq SRC.ParseLine.DirOp
tax save char...
cmp #'.' local symbol? 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 bpl SRC.ParseLine.InvLbl
jsr SRC.GetNextChar jsr SRC.GetNextChar
@ -148,11 +156,18 @@ SRC.ParseLine.LABEL
lda SRC.ACC lda SRC.ACC
beq SRC.ParseLine.InvLbl .0 is not allowed beq SRC.ParseLine.InvLbl .0 is not allowed
jsr SYM.NewOrGetLocalA cpx #':'
bcs SRC.ParseLine.RTS beq .2
jsr SYM.NewLocalA
bra .3
.2 jsr SYM.NewPrivateA
.3 bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp bra SRC.ParseLine.DirOp
.1 jsr SYM.NewOrGetGlobal .8 jsr SYM.NewOrGetGlobal
bcs SRC.ParseLine.RTS bcs SRC.ParseLine.RTS
*--------------------------------------- *---------------------------------------
SRC.ParseLine.DirOp SRC.ParseLine.DirOp
@ -172,7 +187,7 @@ SRC.ParseLine.DirOp
.5 cmp #'>' .5 cmp #'>'
bne SRC.ParseLine.OpCode bne SRC.ParseLine.OpCode
jsr SRC.ParseLine.ExecMacro jsr MAC.Exec
bcs SRC.ParseLine.Err bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok bra SRC.ParseLine.Ok
@ -199,49 +214,6 @@ SRC.ParseLine.Dir
jmp (J.DIRECTIVES,x) 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 SRC.ParseLine.OpCode
>LDYA ZPOpsPtr >LDYA ZPOpsPtr
>STYA ZPOpDefPtr >STYA ZPOpDefPtr

View File

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

View File

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

View File

@ -85,7 +85,7 @@ CMD.CD.1 >SYSCALL realpath
bcs CMD.POPD.RTS bcs CMD.POPD.RTS
>STYA ZPPtr1 >STYA ZPPtr1
stx TmpByte Save hMem stx M32.TMP Save hMem
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
@ -107,7 +107,7 @@ CMD.CD.1 >SYSCALL realpath
lda #MLI.E.INVPATH lda #MLI.E.INVPATH
.19 pha .19 pha
lda TmpByte lda M32.TMP
>SYSCALL freemem >SYSCALL freemem
pla pla
sec sec
@ -124,7 +124,7 @@ CMD.CD.1 >SYSCALL realpath
cmp #'/' cmp #'/'
bne .14 bne .14
lda TmpByte lda M32.TMP
jmp CMD.SetPrefixA already ends with a / jmp CMD.SetPrefixA already ends with a /
.14 iny .14 iny
@ -147,7 +147,7 @@ CMD.CD.1 >SYSCALL realpath
lda #'/' lda #'/'
sta (ZPPtr2),y sta (ZPPtr2),y
phx phx
lda TmpByte lda M32.TMP
>SYSCALL freemem >SYSCALL freemem
pla pla
*-------------------------------------- *--------------------------------------
@ -480,8 +480,8 @@ CMD.EXIT lda (ZPArgVBufPtr)
>SYSCALL AToL >SYSCALL AToL
bcs .9 bcs .9
>PULLL.G M32.ACC >PULLL M32.ACC
>LDA.G M32.ACC lda M32.ACC
.8 pha .8 pha
lda #$FF lda #$FF
@ -572,6 +572,35 @@ CMD.FUNC lda (ZPArgVBufPtr)
CMD.RETURN CMD.RETURN
.9 jmp CMD.Exec.CSYN .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 CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test
bcs .9 bcs .9

View File

@ -64,8 +64,11 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
>STA.G CORE.PSFlags >STA.G CORE.PSFlags
lda #$ff lda #$ff
>STA.G CORE.IntCmd assume external >STA.G CORE.IntCmd assume external
inc
>STA.G CORE.CmdFile no Cmd file mode
jsr CORE.GetCharNB jsr CORE.GetCharNB
bcc .11 bcc .11
@ -120,27 +123,18 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
cmp #C.SPACE cmp #C.SPACE
bne .4 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 ". " jsr CORE.GetNextCharNB skip ". "
bcs .99 nothing to execute... bcs .99 nothing to execute...
lda #$ff
>STA.G CORE.CmdFile
bra .42
.4 >LDYA L.CMD internal command ? .4 >LDYA L.CMD internal command ?
jsr CORE.LookupInputBuf jsr CORE.LookupInputBuf
bcc .41 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 .40 jsr CORE.ArgV.Add external cmd, go check context
bra .42 bra .42
@ -225,10 +219,22 @@ CORE.ExecCmd.1 lda #0
>LDA.G CORE.IntCmd >LDA.G CORE.IntCmd
bmi CORE.ExecExtCmd bmi CORE.ExecExtCmd
asl
tax tax
jmp (J.CMD,x) 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 >LDYA ZPArgVBuf
>SYSCALL execv >SYSCALL execv
@ -342,31 +348,6 @@ CORE.SkipLine jsr CORE.GetNextCharNB
.8 rts .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 * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table
*-------------------------------------- *--------------------------------------
CORE.LookupInputBuf CORE.LookupInputBuf
@ -421,7 +402,6 @@ CORE.Lookup >STYA ZPPtr2
inc ZPPtr1+1 inc ZPPtr1+1
.6 inx .6 inx
inx
lda (ZPPtr1) Array Ending 0, must be an external Cmd.... lda (ZPPtr1) Array Ending 0, must be an external Cmd....
bne .1 bne .1
@ -436,38 +416,38 @@ CORE.ArgV.Add >LDYA ZPArgVBufPtr
>STYA ZPArgVBufPrev Save String start of Expand >STYA ZPArgVBufPrev Save String start of Expand
lda #C.SPACE lda #C.SPACE
sta TmpByte sta M32.TMP
jsr CORE.GetCharNB jsr CORE.GetCharNB
bcs .9 bcs .9
cmp #'"' cmp #'"'
bne .10 bne .10
sta TmpByte sta M32.TMP
bra .1 bra .1
.10 cmp #'(' .10 cmp #'('
bne .11 bne .11
ldx #')' ldx #')'
stx TmpByte stx M32.TMP
bra .12 bra .12
.11 cmp #'`' .11 cmp #'`'
bne .12 bne .12
sta TmpByte sta M32.TMP
.12 jsr CORE.ArgV.PutChar .12 jsr CORE.ArgV.PutChar
.1 jsr CORE.GetNextChar .1 jsr CORE.GetNextChar
bcs .5 bcs .5
.2 cmp TmpByte .2 cmp M32.TMP
bne .3 bne .3
jsr CORE.GetNextChar jsr CORE.GetNextChar
bra .5 bra .5
.3 ldy TmpByte .3 ldy M32.TMP
cpy #C.SPACE cpy #C.SPACE
bne .40 bne .40
jsr CORE.IsEndCmd jsr CORE.IsEndCmd
@ -533,7 +513,10 @@ CORE.ArgV.Next lda (ZPArgVBufPtr)
*-------------------------------------- *--------------------------------------
* IO * 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 CORE.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD and #$ff^S.PS.F.HOLD

View File

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

View File

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

View File

@ -3,11 +3,97 @@ PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
IO.Init lda #FILECALL.STACK
>STA.G FILECALL.STACK
rts
*--------------------------------------
IO.Reset jsr IO.Reset.In IO.Reset jsr IO.Reset.In
jsr IO.Reset.Out jsr IO.Reset.Out
jsr IO.Reset.Err jsr IO.Reset.Err
IO.Reset.9 rts 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 IO.Pipe.In >LDA.G IO.hOut
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
sta (pPS),y sta (pPS),y
@ -20,7 +106,7 @@ IO.Pipe.In >LDA.G IO.hOut
>LEA.G IO.NodBuf >LEA.G IO.NodBuf
>SYSCALL fopen >SYSCALL fopen
bcs IO.Reset.9 bcs IO.Set.RTS
*-------------------------------------- *--------------------------------------
IO.Set.In pha IO.Set.In pha
jsr IO.Reset.In jsr IO.Reset.In
@ -30,7 +116,7 @@ IO.Set.In pha
pla pla
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
sta (pPS),y sta (pPS),y
rts IO.Set.RTS rts
*-------------------------------------- *--------------------------------------
IO.Reset.In >LDA.G IO.hIn IO.Reset.In >LDA.G IO.hIn
beq .8 beq .8
@ -150,12 +236,12 @@ IO.PrintBatchErrMsg
.11 >STYA ZPPtr2 .11 >STYA ZPPtr2
stz TmpWord Line Count stz M32.TMP Line Count
stz TmpWord+1 stz M32.TMP+1
.1 inc TmpWord .1 inc M32.TMP
bne .2 bne .2
inc TmpWord+1 inc M32.TMP+1
.2 ldy #$ff .2 ldy #$ff
@ -226,7 +312,7 @@ IO.PrintBatchErrMsg
ply ply
bra .7 bra .7
.8 >PUSHW TmpWord .8 >PUSHW M32.TMP
>PUSHBI 2 >PUSHBI 2
>PUSHW L.MSG.BATCHERR >PUSHW L.MSG.BATCHERR

View File

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

View File

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

View File

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