mirror of
https://github.com/A2osX/A2osX.git
synced 2025-04-06 02:40:10 +00:00
Kernel 0.93
This commit is contained in:
parent
fd743e7ad2
commit
cdd1d64001
@ -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> |
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
100
BIN/SH.S.IO.txt
100
BIN/SH.S.IO.txt
@ -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
|
||||
|
126
BIN/SH.S.txt
126
BIN/SH.S.txt
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
226
X.M32.S.txt
226
X.M32.S.txt
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user