SCMASM.SYSTEM & ASM:C-string support (new directives .CS. CZ .PS, updated Notepad++ XML)

CC:Added typedef, struct/union need a KERNEL mod
VEDRIVE:bugfixes, added LanCEGS code (oops ;-)
This commit is contained in:
burniouf 2022-09-11 21:11:32 +02:00
parent 037fc870a5
commit a5ba00f1a6
31 changed files with 2316 additions and 1150 deletions

View File

@ -16,8 +16,10 @@ no .AC support
| .AC | Ascii Compressed string| S-C | NOT IMPL. | | As strings are supposed to be printed with A2osX API, Printf cannot handle 'AC' compressed strings | | .AC | Ascii Compressed string| S-C | NOT IMPL. | | As strings are supposed to be printed with A2osX API, Printf cannot handle 'AC' compressed strings |
| .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | | | .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | |
| .AT | Ascii string Terminated | S-C,A2osX | Working | (same as above) | | | .AT | Ascii string Terminated | S-C,A2osX | Working | (same as above) | |
| .AZ | Ascii string Zero terminated (C String) | S-C,A2osX | Working | (same as above) | | | .AZ | Ascii string Zero terminated | S-C,A2osX | Working | (same as above) | |
| .BS | Block (Byte) Storage | S-C,A2osX | Working | `.BS count[,value]` | Reserves `count` bytes in output and sets them to `value` (or zero if omitted) | | .BS | Block (Byte) Storage | S-C,A2osX | Working | `.BS count[,value]` | Reserves `count` bytes in output and sets them to `value` (or zero if omitted) |
| .CS | C-string | S-C 3.1,A2osX | Working | | |
| .CZ | C-String Zero terminated| S-C 3.1,A2osX | Working | | |
| .DA | DAta value | S-C,A2osX | Working | `.DA value` | 2-byte address: `.DA $1234` only high byte: `.DA /$1234` only low byte: `.DA #$1234` | | .DA | DAta value | S-C,A2osX | Working | `.DA value` | 2-byte address: `.DA $1234` only high byte: `.DA /$1234` only low byte: `.DA #$1234` |
| .DO | conditional start | S-C,A2osX | Working | | | | .DO | conditional start | S-C,A2osX | Working | | |
| .DU,.DUMMY | begin DUmmy section | S-C,A2osX | Working | | | | .DU,.DUMMY | begin DUmmy section | S-C,A2osX | Working | | |
@ -36,6 +38,7 @@ no .AC support
| .OR | ORigin | S-C,A2osX | Working | `.OR address` | Set initial output address (only one allowed per assembly) | | .OR | ORigin | S-C,A2osX | Working | `.OR address` | Set initial output address (only one allowed per assembly) |
| .PG | PaGe control | S-C,A2osX | IGNORED | | | | .PG | PaGe control | S-C,A2osX | IGNORED | | |
| .PH | PHase start | S-C,A2osX | Working | `.PH address` | Start a temporary addressing range | | .PH | PHase start | S-C,A2osX | Working | `.PH address` | Start a temporary addressing range |
| .CS | Pascal-string | S-C 3.1,A2osX | Working | | |
| .SE | | S-C,A2osX | Working | | | | .SE | | S-C,A2osX | Working | | |
| .TA | Target Address| S-C,A2osX | IGNORED | | | | .TA | Target Address| S-C,A2osX | IGNORED | | |
| .TF | Target File | S-C,A2osX | Working | `.TF TargetFile[,Txxx]` | only ,TSYS supported | | .TF | Target File | S-C,A2osX | Working | `.TF TargetFile[,Txxx]` | only ,TSYS supported |

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -24,7 +24,7 @@
<Keywords name="Folders in comment, open"></Keywords> <Keywords name="Folders in comment, open"></Keywords>
<Keywords name="Folders in comment, middle"></Keywords> <Keywords name="Folders in comment, middle"></Keywords>
<Keywords name="Folders in comment, close"></Keywords> <Keywords name="Folders in comment, close"></Keywords>
<Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED</Keywords> <Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED&#x000D;&#x000A;.CS&#x000D;&#x000A;.CZ&#x000D;&#x000A;.PS</Keywords>
<Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords> <Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords>
<Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;&#x000D;&#x000A;^</Keywords> <Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;&#x000D;&#x000A;^</Keywords>
<Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords> <Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords>
@ -35,30 +35,30 @@
<Keywords name="Delimiters"></Keywords> <Keywords name="Delimiters"></Keywords>
</KeywordLists> </KeywordLists>
<Styles> <Styles>
<WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="COMMENTS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="COMMENTS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="LINE COMMENTS" fgColor="008040" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="0" /> <WordsStyle name="LINE COMMENTS" fgColor="008040" bgColor="FFFFFF" fontStyle="2" nesting="0" />
<WordsStyle name="NUMBERS" fgColor="00B32D" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" /> <WordsStyle name="NUMBERS" fgColor="00B32D" bgColor="FFFFFF" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS1" fgColor="FF8000" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS1" fgColor="FF8000" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS2" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS2" fgColor="0000FF" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS3" fgColor="00B32D" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" /> <WordsStyle name="KEYWORDS3" fgColor="00B32D" bgColor="FFFFFF" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS4" fgColor="FF0000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="KEYWORDS4" fgColor="FF0000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS5" fgColor="0000FF" bgColor="FFFF00" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS5" fgColor="0000FF" bgColor="FFFF00" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS6" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS6" fgColor="008000" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS7" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS7" fgColor="800040" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS8" fgColor="CC1F15" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" /> <WordsStyle name="KEYWORDS8" fgColor="CC1F15" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="OPERATORS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="OPERATORS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN CODE1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="FOLDER IN CODE1" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN CODE2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="FOLDER IN CODE2" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS1" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS2" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" /> <WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
</Styles> </Styles>
</UserLang> </UserLang>
</NotepadPlus> </NotepadPlus>

View File

@ -9,9 +9,9 @@ DIR.Reset lda #$ff
sta (pData),y sta (pData),y
iny #ASM.LI.XON iny #ASM.LI.XON
sta (pData),y sta (pData),y
>STA.G MAC.StkPtr >STA.G MAC.StkPtr
rts rts
*--------------------------------------- *---------------------------------------
DIR.AC clc DIR.AC clc
@ -22,7 +22,7 @@ DIR.AT sec
*--------------------------------------- *---------------------------------------
DIR.AS clc DIR.AS clc
lda #0 lda #0
ror ror
sta DIR.Byte Save b7 of last char in string sta DIR.Byte Save b7 of last char in string
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcs .9 bcs .9
@ -82,11 +82,107 @@ DIR.AZ jsr DIR.AS
lda #0 lda #0
jmp OUT.EmitByte jmp OUT.EmitByte
*--------------------------------------- *---------------------------------------
DIR.PS jsr SRC.GetNextChar
bcs .9
sta DIR.Word Save delimiter....
ldx #$ff
ldy #1 skip delimiter
.1 inx
lda (ZPLinePtr),y
beq .9
cmp #$0D
beq .9
iny
cmp DIR.Word
bne .1
txa
jsr OUT.EmitByte emit length
bcs .9
.2 jsr SRC.GetNextChar
jsr OUT.EmitByte
bcs .9
dex
bne .2
jsr SRC.GetNextChar skip delimiter
clc
rts
.9 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
DIR.CS jsr SRC.GetNextChar
bcs .9
stz DIR.Byte
cmp #'-'
bne .1
ror DIR.Byte save b7 status of ALL chars
jsr SRC.GetNextChar
bcs .9
.1 sta DIR.Word Save delimiter....
.2 jsr SRC.GetNextChar
bcs .9
cmp DIR.Word delimiter ?
beq .8
cmp #'\'
bne .7
jsr SRC.GetNextChar
bcs .9
ldx #DIR.EscChars.L-1
.3 cmp DIR.EscChars,x
beq .4
dex
bpl .3
bmi .9
.4 lda DIR.EscCodes,x
.7 ora DIR.Byte
jsr OUT.EmitByte
bcc .2
.9 lda #E.SYNTAX.ERROR
sec
rts
.8 clc
DIR.CZ.RTS rts
*---------------------------------------
DIR.CZ jsr DIR.CS
bcs DIR.CZ.RTS
lda #0
jmp OUT.EmitByte
*---------------------------------------
DIR.BS jsr SRC.GetNextCharNB DIR.BS jsr SRC.GetNextCharNB
bcs .98 bcs .98
jsr EXP.ResetAcc jsr EXP.ResetAcc
jsr EXP.Eval jsr EXP.Eval
bcs .9 bcs .9
@ -105,15 +201,15 @@ DIR.BS jsr SRC.GetNextCharNB
stz DIR.Byte stz DIR.Byte
jsr SRC.GetChar jsr SRC.GetChar
bcs .1 bcs .1
cmp #C.SPACE cmp #C.SPACE
beq .1 beq .1
cmp #',' cmp #','
bne .98 bne .98
jsr EXP.ResetAcc jsr EXP.ResetAcc
jsr EXP.Eval jsr EXP.Eval
bcs .9 bcs .9
@ -121,15 +217,15 @@ DIR.BS jsr SRC.GetNextCharNB
ora SRC.ACC+2 ora SRC.ACC+2
ora SRC.ACC+1 ora SRC.ACC+1
bne .99 bne .99
lda SRC.ACC lda SRC.ACC
sta DIR.Byte sta DIR.Byte
.1 inc DIR.Word .1 inc DIR.Word
bne .2 bne .2
inc DIR.Word+1 inc DIR.Word+1
beq .8 beq .8
.2 lda DIR.Byte .2 lda DIR.Byte
jsr OUT.EmitByte jsr OUT.EmitByte
bcc .1 bcc .1
@ -148,35 +244,35 @@ DIR.BS jsr SRC.GetNextCharNB
*--------------------------------------- *---------------------------------------
DIR.DA jsr SRC.GetNextCharNB DIR.DA jsr SRC.GetNextCharNB
bcs .98 bcs .98
.1 jsr EXP.ResetAcc .1 jsr EXP.ResetAcc
jsr EXP.Eval jsr EXP.Eval
bcs .9 bcs .9
ldy #0 ldy #0
ldx SRC.ACC.SIZE ldx SRC.ACC.SIZE
.2 lda SRC.ACC,y .2 lda SRC.ACC,y
jsr OUT.EmitByte jsr OUT.EmitByte
bcs .9 bcs .9
iny iny
dex dex
bne .2 bne .2
.3 jsr SRC.GetChar .3 jsr SRC.GetChar
bcs .8 bcs .8
cmp #C.SPACE cmp #C.SPACE
beq .8 beq .8
cmp #',' cmp #','
bne .98 bne .98
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcc .1 bcc .1
.98 lda #E.SYNTAX.ERROR .98 lda #E.SYNTAX.ERROR
sec sec
.9 rts .9 rts
@ -189,17 +285,17 @@ DIR.DO >LDA.G ASM.DO.StackPtr
inc inc
cmp #DO.MAXDEPTH cmp #DO.MAXDEPTH
bcs .98 bcs .98
tya tya
beq .1 beq .1
* clc * clc
adc #ASM.DO.Stack-1 adc #ASM.DO.Stack-1
tay tay
lda (pData),y Previous DO is false? lda (pData),y Previous DO is false?
bne .1 bne .1
>INC.G ASM.DO.StackPtr yes,stack FALSE >INC.G ASM.DO.StackPtr yes,stack FALSE
* clc * clc
@ -212,7 +308,7 @@ DIR.DO >LDA.G ASM.DO.StackPtr
bcs .99 bcs .99
jsr EXP.ResetAcc jsr EXP.ResetAcc
jsr EXP.Eval jsr EXP.Eval
bcs .99 bcs .99
@ -238,11 +334,11 @@ DIR.DO >LDA.G ASM.DO.StackPtr
*--------------------------------------- *---------------------------------------
DIR.EL >LDA.G ASM.DO.StackPtr DIR.EL >LDA.G ASM.DO.StackPtr
beq .9 beq .9
tax tax
dec dec
beq .1 no previous DO context beq .1 no previous DO context
clc clc
adc #ASM.DO.Stack-1 adc #ASM.DO.Stack-1
tay tay
@ -256,7 +352,7 @@ DIR.EL >LDA.G ASM.DO.StackPtr
lda (pData),y lda (pData),y
eor #$ff eor #$ff
sta (pData),y sta (pData),y
.8 clc .8 clc
rts rts
@ -273,7 +369,7 @@ DIR.DU >LDA.G ASM.DU.ON
lda #$80 lda #$80
sta (pData),y sta (pData),y
ldy #ASM.PC.DU ldy #ASM.PC.DU
jmp DIR.SavePC jmp DIR.SavePC
*--------------------------------------- *---------------------------------------
@ -298,7 +394,7 @@ DIR.ED >LDA.G ASM.DU.ON
*--------------------------------------- *---------------------------------------
DIR.EP >LDA.G ASM.PH.ON DIR.EP >LDA.G ASM.PH.ON
bpl .9 bpl .9
lda #0 lda #0
sta (pData),y sta (pData),y
ldy #ASM.PC.PH ldy #ASM.PC.PH
@ -315,29 +411,29 @@ DIR.EQ clc
lda #$ff lda #$ff
>STA.G OUT.bEquate >STA.G OUT.bEquate
>LDA.G SYM.BufPtr >LDA.G SYM.BufPtr
beq DIR.EP.ILLEGAL not in global symbol context beq DIR.EP.ILLEGAL not in global symbol context
eor #SYMG eor #SYMG
beq .1 beq .1
bcs DIR.EP.ILLEGAL .SE not allowed in local/private bcs DIR.EP.ILLEGAL .SE not allowed in local/private
bcc .10 .EQ in local, skip F update bcc .10 .EQ in local, skip F update
.1 ror A = 0 : CS = SYMG.F.RW .1 ror A = 0 : CS = SYMG.F.RW
ora #SYMG.F.EQU ora #SYMG.F.EQU
sta SRC.ACC.F sta SRC.ACC.F
.10 jsr SRC.GetNextCharNB .10 jsr SRC.GetNextCharNB
bcs .9 bcs .9
jsr EXP.ResetAccV keep F jsr EXP.ResetAccV keep F
jsr EXP.Eval jsr EXP.Eval
bcs DIR.EP.RTS bcs DIR.EP.RTS
>LDA.G SYM.BufPtr >LDA.G SYM.BufPtr
cmp #SYMG cmp #SYMG
@ -345,28 +441,28 @@ DIR.EQ clc
tay tay
ldx #3 we are in local/private ldx #3 we are in local/private
.11 lda SRC.ACC,x update value .11 lda SRC.ACC,x update value
dey dey
sta (ZPSymbolBuf),y sta (ZPSymbolBuf),y
dex dex
bpl .11 bpl .11
clc clc
rts rts
.12 ldy #SYMG-1 .12 ldy #SYMG-1
.13 lda SRC.ACC.F,y .13 lda SRC.ACC.F,y
sta (ZPSymbolBuf),y sta (ZPSymbolBuf),y
dey dey
bpl .13 bpl .13
>LDA.G ASM.PASS >LDA.G ASM.PASS
bne .2 bne .2
jmp SYM.StoreGlobal jmp SYM.StoreGlobal
.2 jmp SYM.UpdateGlobal .2 jmp SYM.UpdateGlobal
.9 lda #E.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
@ -384,16 +480,16 @@ DIR.FI >LDA.G ASM.DO.StackPtr
*--------------------------------------- *---------------------------------------
DIR.HS jsr SRC.GetNextCharNB DIR.HS jsr SRC.GetNextCharNB
bcs .99 bcs .99
jsr SRC.IsDigit16 jsr SRC.IsDigit16
bcs .99 bcs .99
.1 sta DIR.Byte .1 sta DIR.Byte
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcc .2 bcc .2
jmp OUT.EmitByte jmp OUT.EmitByte
.2 jsr SRC.IsDigit16 .2 jsr SRC.IsDigit16
bcc .3 bcc .3
@ -407,7 +503,7 @@ DIR.HS jsr SRC.GetNextCharNB
jsr OUT.EmitByte jsr OUT.EmitByte
bcc .5 bcc .5
rts rts
.3 pha .3 pha
lda DIR.Byte lda DIR.Byte
asl asl
@ -417,44 +513,44 @@ DIR.HS jsr SRC.GetNextCharNB
sta DIR.Byte sta DIR.Byte
pla pla
ora DIR.Byte ora DIR.Byte
.4 jsr OUT.EmitByte .4 jsr OUT.EmitByte
bcs .9 bcs .9
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcs .8 bcs .8
cmp #C.SPACE cmp #C.SPACE
beq .8 beq .8
jsr SRC.IsDigit16 jsr SRC.IsDigit16
bcc .1 bcc .1
cmp #',' cmp #','
beq .5 beq .5
cmp #'.' cmp #'.'
bne .99 bne .99
.5 jsr SRC.GetNextChar .5 jsr SRC.GetNextChar
bcs .99 bcs .99
jsr SRC.IsDigit16 jsr SRC.IsDigit16
bcc .1 bcc .1
.99 lda #E.SYNTAX.ERROR .99 lda #E.SYNTAX.ERROR
sec sec
.9 rts .9 rts
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
DIR.IN jsr SRC.GetNextCharNB DIR.IN jsr SRC.GetNextCharNB
bcs .9 bcs .9
>LDYA ZPLinePtr >LDYA ZPLinePtr
jmp FIO.OpenFile jmp FIO.OpenFile
.9 lda #E.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
rts rts
@ -471,10 +567,10 @@ DIR.LI jsr SRC.GetNextChar
bcs .8 bcs .8
cmp #',' cmp #','
beq DIR.LI beq DIR.LI
cmp #C.SPACE cmp #C.SPACE
beq .8 beq .8
.9 lda #E.SYNTAX.ERROR .9 lda #E.SYNTAX.ERROR
sec sec
rts rts
@ -485,15 +581,15 @@ DIR.LI jsr SRC.GetNextChar
rts rts
DIR.LI.ON ldy #ASM.LI.ON DIR.LI.ON ldy #ASM.LI.ON
sec sec
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.OFF ldy #ASM.LI.ON DIR.LI.OFF ldy #ASM.LI.ON
clc clc
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.CON ldy #ASM.LI.CON DIR.LI.CON ldy #ASM.LI.CON
sec sec
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.COFF ldy #ASM.LI.CON DIR.LI.COFF ldy #ASM.LI.CON
@ -501,19 +597,19 @@ DIR.LI.COFF ldy #ASM.LI.CON
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.MON ldy #ASM.LI.MON DIR.LI.MON ldy #ASM.LI.MON
sec sec
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.MOFF ldy #ASM.LI.MON DIR.LI.MOFF ldy #ASM.LI.MON
clc clc
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.XON ldy #ASM.LI.XON DIR.LI.XON ldy #ASM.LI.XON
sec sec
bra DIR.LI.APPLY bra DIR.LI.APPLY
DIR.LI.XOFF ldy #ASM.LI.XON DIR.LI.XOFF ldy #ASM.LI.XON
clc clc
DIR.LI.APPLY lda #0 DIR.LI.APPLY lda #0
ror ror
@ -533,14 +629,14 @@ DIR.MA >LDA.G ASM.MA.ON
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs .99 bcs .99
>STYA.G MAC.ID >STYA.G MAC.ID
.8 lda #$ff .8 lda #$ff
>STA.G ASM.MA.ON >STA.G ASM.MA.ON
clc clc
rts rts
.9 lda #E.MACRO.INV.DEF .9 lda #E.MACRO.INV.DEF
sec sec
.99 rts .99 rts
@ -548,7 +644,7 @@ DIR.MA >LDA.G ASM.MA.ON
DIR.OP jsr SRC.GetNextCharNB DIR.OP jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR bcs DIR.OP.SYNERR
>LDYA ZPLinePtr >LDYA ZPLinePtr
jmp FIO.LOAD.CPU jmp FIO.LOAD.CPU
DIR.OP.SYNERR lda #E.SYNTAX.ERROR DIR.OP.SYNERR lda #E.SYNTAX.ERROR
@ -557,34 +653,34 @@ DIR.OP.SYNERR lda #E.SYNTAX.ERROR
*--------------------------------------- *---------------------------------------
DIR.OR jsr SRC.GetNextCharNB DIR.OR jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR bcs DIR.OP.SYNERR
jsr EXP.ResetAcc jsr EXP.ResetAcc
jsr EXP.Eval jsr EXP.Eval
bcs .9 bcs .9
ldx #0 ldx #0
ldy #ASM.PC ldy #ASM.PC
.1 lda SRC.ACC,x .1 lda SRC.ACC,x
sta (pData),y sta (pData),y
iny iny
inx inx
cpx #4 cpx #4
bne .1 bne .1
>LDA.G ASM.DU.ON >LDA.G ASM.DU.ON
bmi .8 bmi .8
>LDA.G ASM.PH.ON >LDA.G ASM.PH.ON
bmi .8 bmi .8
lda SRC.ACC lda SRC.ACC
>STA.G DST.AUXTYPE >STA.G DST.AUXTYPE
lda SRC.ACC+1 lda SRC.ACC+1
iny iny
sta (pData),y sta (pData),y
.8 clc .8 clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
@ -603,37 +699,37 @@ DIR.TA.RTS rts
*--------------------------------------- *---------------------------------------
DIR.TF >LDA.G ASM.PASS If Pass#1, ignore DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
beq DIR.TA.8 beq DIR.TA.8
>LDA.G ArgDstFile >LDA.G ArgDstFile
beq .1 beq .1
>SYSCALL ArgV >SYSCALL ArgV
bra .2 bra .2
.1 jsr SRC.GetNextCharNB .1 jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR bcs DIR.OP.SYNERR
>LDYA ZPLinePtr >LDYA ZPLinePtr
.2 >SYSCALL StrDup .2 >SYSCALL StrDup
bcs DIR.TA.RTS bcs DIR.TA.RTS
>STYA ZPPtr1 >STYA ZPPtr1
stx ZPPtr2 stx ZPPtr2
lda #S.FI.T.BIN lda #S.FI.T.BIN
sta ZPPtr2+1 sta ZPPtr2+1
ldy #$ff ldy #$ff
.3 iny .3 iny
lda (ZPPtr1),y lda (ZPPtr1),y
beq .7 beq .7
cmp #',' cmp #','
bne .3 bne .3
lda #0 lda #0
sta (ZPPtr1),y sta (ZPPtr1),y
iny iny
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'T' cmp #'T'
@ -641,7 +737,7 @@ DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
.30 lda #E.SYNTAX.ERROR .30 lda #E.SYNTAX.ERROR
bra .9 bra .9
.4 ldx #0 .4 ldx #0
.5 iny .5 iny
@ -651,7 +747,7 @@ DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
inx inx
cpx #4 cpx #4
bne .5 bne .5
lda #S.FI.T.SYS lda #S.FI.T.SYS
sta ZPPtr2+1 sta ZPPtr2+1
@ -659,7 +755,7 @@ DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
>PUSHWZ Allocate >PUSHWZ Allocate
>SYSCALL RealPath >SYSCALL RealPath
bcs .9 bcs .9
txa txa
>STA.G DST.hFILENAME >STA.G DST.hFILENAME
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
@ -669,18 +765,18 @@ DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
>PUSHW.G DST.AUXTYPE >PUSHW.G DST.AUXTYPE
>SYSCALL FOpen >SYSCALL FOpen
bcs .9 bcs .9
>STA.G DST.hREFNUM >STA.G DST.hREFNUM
clc clc
.9 php .9 php
pha pha
lda ZPPtr2 lda ZPPtr2
>SYSCALL FreeMem >SYSCALL FreeMem
pla pla
plp plp
rts rts
*--------------------------------------- *---------------------------------------
DIR.SavePC phy DIR.SavePC phy
@ -692,7 +788,7 @@ DIR.SavePC phy
dey dey
cpy #ASM.PC-1 cpy #ASM.PC-1
bne .1 bne .1
phx phx
ply ply
ldx #3 ldx #3
@ -716,7 +812,7 @@ DIR.RestorePC ldx #3
ldy #ASM.PC+3 ldy #ASM.PC+3
ldx #3 ldx #3
.2 pla .2 pla
sta (pData),y sta (pData),y
dey dey

View File

@ -198,12 +198,8 @@ MAC.Exec jsr SRC.GetNextChar skip '>'
bcs .90 bcs .90
>STYA ZPPtr1 MAC.ID >STYA ZPPtr1 MAC.ID
txa
* clc jsr SRC.SkipX
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SRC.GetChar .1 jsr SRC.GetChar
bcs .8 bcs .8

View File

@ -107,7 +107,10 @@ OUT.PrintBuf.RTS
rts rts
*--------------------------------------- *---------------------------------------
OUT.PrintLine jsr OUT.PrintLineOn OUT.PrintLine jsr OUT.PrintLineOn
bcs OUT.PrintBuf.RTS bcc OUT.PrintLine.1
clc
rts
OUT.PrintLine.1 jsr OUT.PrintLineOutBuf OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
bcs OUT.PrintBuf.RTS bcs OUT.PrintBuf.RTS
@ -254,7 +257,7 @@ OUT.PrintLineErr
jsr OUT.PrintLine.1 jsr OUT.PrintLine.1
bcs OUT.PrintLineOnRTS bcs OUT.PrintLineOnRTS
.1 >PUSHW L.MSG.ERROR >PUSHW L.MSG.ERROR
>PUSHB DIR.Byte >PUSHB DIR.Byte
>PUSHBI 1 >PUSHBI 1
>SYSCALL PrintF >SYSCALL PrintF

View File

@ -91,13 +91,13 @@ SRC.ParseLine.DirOp
jsr SRC.DoCheck jsr SRC.DoCheck
bcs .1 TRUE, always execute bcs .1 TRUE, always execute
cpx #12 .DO? cpx #DIR.DO.ID
beq .1 beq .1
cpx #20 .ELSE? cpx #DIR.EL.ID
beq .1 beq .1
cpx #30 .FIN? cpx #DIR.FI.ID
bne SRC.ParseLine.Ok bne SRC.ParseLine.Ok
.1 jmp (J.DIRECTIVES,x) .1 jmp (J.DIRECTIVES,x)
@ -988,6 +988,18 @@ SRC.IsDigit8 cmp #'0'
.9 sec .9 sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.SkipX clc
.HS B0 BCS
SRC.SkipXp1 sec
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .8
inc ZPLinePtr+1
.8 rts
*---------------------------------------
SRC.GetNextCharNB SRC.GetNextCharNB
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcs .9 bcs .9
@ -996,30 +1008,26 @@ SRC.GetNextCharNB
clc clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SRC.GetNextCharUC
jsr SRC.GetNextChar
bcs .9
cmp #'a'
bcc .8
cmp #'z'+1
bcs .8
eor #$20 to Uppercase
.8 clc
.9 rts
*---------------------------------------
SRC.GetNextChar lda (ZPLinePtr) SRC.GetNextChar lda (ZPLinePtr)
beq SRC.GetChar.ERR beq SRC.GetChar.ERR
cmp #$0D cmp #$0D
beq SRC.GetChar.ERR beq SRC.GetChar.ERR
inc ZPLinePtr inc ZPLinePtr
bne SRC.GetChar bne SRC.GetChar
inc ZPLinePtr+1 inc ZPLinePtr+1
SRC.GetChar lda (ZPLinePtr) SRC.GetChar lda (ZPLinePtr)
beq SRC.GetChar.ERR beq SRC.GetChar.ERR
cmp #$0D cmp #$0D
beq SRC.GetChar.ERR beq SRC.GetChar.ERR
clc clc
rts rts
SRC.GetChar.ERR sec SRC.GetChar.ERR sec
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -10,10 +10,10 @@ NEW
* 2-5 : 32 bits Value * 2-5 : 32 bits Value
* 6+ : Local Symbols..... * 6+ : Local Symbols.....
*--------------------------------------- *---------------------------------------
* Local/Private Symbol Record: (6 bytes) * Local/Private Symbol Record: (4 bytes)
* 0 : Local ID (1->255) * 0 : Local ID (1->255)
* 1 : Macro Context ID (private) * 1 : Macro Context ID (private)
* 2-5 : 32 bits Value (PC) * 2-3 : 16 bits offset (PC)
*--------------------------------------- *---------------------------------------
SYM.Init >SYSCALL SListNew SYM.Init >SYSCALL SListNew
bcs .9 bcs .9
@ -55,12 +55,7 @@ SYM.NewGlobal >LDA.G ASM.PASS
>STYA.G SYM.ID >STYA.G SYM.ID
txa jsr SRC.SkipX
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 stz SRC.ACC.F .1 stz SRC.ACC.F
jsr SYM.PC2Acc jsr SYM.PC2Acc
@ -83,6 +78,7 @@ SYM.NewGlobal >LDA.G ASM.PASS
.9 cmp #E.DUPKEY .9 cmp #E.DUPKEY
bne .99 bne .99
lda #E.SYMBOL.REDEF lda #E.SYMBOL.REDEF
.99 .99
SYM.NewGlobal.RTS SYM.NewGlobal.RTS
@ -95,12 +91,7 @@ SYM.GetGlobal >PUSHB.G SYM.hList Pass #2: should be already defined...
>STYA.G SYM.ID >STYA.G SYM.ID
txa jsr SRC.SkipX
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList Pass #2: Restore full context .1 >PUSHB.G SYM.hList Pass #2: Restore full context
>PUSHW.G SYM.ID >PUSHW.G SYM.ID
@ -156,12 +147,7 @@ SYM.LookupGlobal
>STYA ZPPtr1 KeyID >STYA ZPPtr1 KeyID
txa jsr SRC.SkipX
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >LDA.G SYM.ID .1 >LDA.G SYM.ID
cmp ZPPtr1 cmp ZPPtr1
@ -198,7 +184,7 @@ SYM.LookupGlobal
lda #2 lda #2
sta SRC.ACC.SIZE sta SRC.ACC.SIZE
lda #$ff lda #$ff
sta SRC.ACC sta SRC.ACC
sta SRC.ACC+1 sta SRC.ACC+1
@ -271,7 +257,7 @@ SYM.UpdateGlobal
>SYSCALL SListSetData >SYSCALL SListSetData
bcs .9 bcs .9
>STZ.G SYM.BufPtr >STZ.G SYM.BufPtr
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
@ -322,6 +308,29 @@ SYM.NewLocalA tax Save Local ID
cpy #ASM.PC cpy #ASM.PC
bne .1 bne .1
ldy #SYMG.V
sec
pla
sbc (ZPSymbolBuf),y
sta SYM.LocalOfs
iny
pla
sbc (ZPSymbolBuf),y
sta SYM.LocalOfs+1
iny
pla
sbc (ZPSymbolBuf),y
bne .97
iny
pla
sbc (ZPSymbolBuf),y
bne .98
>LDA.G MAC.CtxID Get Macro Context ID >LDA.G MAC.CtxID Get Macro Context ID
pha pha
@ -331,13 +340,17 @@ SYM.NewLocalA tax Save Local ID
txa Get Back ID txa Get Back ID
sta (ZPSymbolBuf),y sta (ZPSymbolBuf),y
ldx #5 MAC ID + PC (4) pla
iny
.2 pla sta (ZPSymbolBuf),y
lda SYM.LocalOfs
iny
sta (ZPSymbolBuf),y
lda SYM.LocalOfs+1
iny iny
sta (ZPSymbolBuf),y sta (ZPSymbolBuf),y
dex
bne .2
iny iny
lda #0 lda #0
@ -350,7 +363,7 @@ SYM.NewLocalA tax Save Local ID
ora #SYMG.F.LOCALS ora #SYMG.F.LOCALS
sta (ZPSymbolBuf) sta (ZPSymbolBuf)
.8 clc clc
rts rts
.91 lda #E.INV.LABEL .91 lda #E.INV.LABEL
@ -361,6 +374,12 @@ SYM.NewLocalA tax Save Local ID
sec sec
rts rts
.97 pla
.98 lda #E.RANGE
sec
rts
.9 lda #E.SYMBOL.REDEF .9 lda #E.SYMBOL.REDEF
sec sec
rts rts
@ -369,7 +388,7 @@ SYM.NewLocalA tax Save Local ID
clc clc
adc #SYML adc #SYML
sta (pData),y sta (pData),y
* clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.LookupLocalX SYM.LookupLocalX
@ -379,45 +398,60 @@ SYM.LookupLocalX
ldy #SYMG ldy #SYMG
.1 phy .1 lda (ZPSymbolBuf),y
lda (ZPSymbolBuf),y beq .99
beq .9
phy SYML.ID
txa txa
cmp (ZPSymbolBuf),y cmp (ZPSymbolBuf),y
bne .3 bne .4
>LDA.G MAC.CtxID >LDA.G MAC.CtxID
ply ply
phy phy
iny iny SYML.CtxID
cmp (ZPSymbolBuf),y cmp (ZPSymbolBuf),y
bne .3 bne .4
ldy #SYMG.V
ldx #0 ldx #0
.2 iny .2 lda (ZPSymbolBuf),y
lda (ZPSymbolBuf),y
sta SRC.ACC,x sta SRC.ACC,x
inx inx
cpx #4 iny
cpy #SYMG
bne .2 bne .2
pla ply
iny
iny SYML.O
lda (ZPSymbolBuf),y
clc clc
adc SRC.ACC
sta SRC.ACC
iny
lda (ZPSymbolBuf),y
adc SRC.ACC+1
sta SRC.ACC+1
bcc .3
inc SRC.ACC+2
.3 clc
rts rts
.3 pla .4 pla
clc clc
adc #SYML adc #SYML
tay tay
bra .1 bra .1
.9 ply
.99 lda #E.UNDEF.SYMBOL .99 lda #E.UNDEF.SYMBOL
sec sec
rts rts
@ -579,19 +613,38 @@ SYM.Dump.LP ldy #SYMG
.8 rts .8 rts
*--------------------------------------- *---------------------------------------
SYM.Dump.PushValueY SYM.Dump.PushValueY
ldx #4 iny
lda (ZPSymbolBuf),y
sta SRC.ACC
iny iny
iny lda (ZPSymbolBuf),y
iny sta SRC.ACC+1
iny
stz SRC.ACC+2
stz SRC.ACC+3
.1 lda (ZPSymbolBuf),y ldy #SYMG.V
>PUSHA ldx #0
dey
dex clc
.1 lda (ZPSymbolBuf),y
adc SRC.ACC,x
sta SRC.ACC,x
iny
inx
txa
eor #4
bne .1 bne .1
ldx #3
.2 lda SRC.ACC,x
>PUSHA
dex
bpl .1
rts rts
*--------------------------------------- *---------------------------------------
MAN MAN

View File

@ -38,6 +38,7 @@ ZPMacroArgCnt .BS 1
DIR.Byte .BS 1 DIR.Byte .BS 1
DIR.Word .BS 2 DIR.Word .BS 2
SYM.LocalOfs .BS 2
ZPPtr1 .BS 2 ZPPtr1 .BS 2
ZPPtr2 .BS 2 ZPPtr2 .BS 2
@ -57,9 +58,9 @@ SYMG .EQ 6
*--------------------------------------- *---------------------------------------
SYML.ID .EQ 0 1..255 SYML.ID .EQ 0 1..255
SYML.CtxID .EQ 1 0 if local, !0 if private SYML.CtxID .EQ 1 0 if local, !0 if private
SYML.V .EQ 2 DWORD SYML.O .EQ 2 WORD
* *
SYML .EQ 6 SYML .EQ 4
*--------------------------------------- *---------------------------------------
ASM.T.AM .EQ 0 ASM.T.AM .EQ 0
ASM.T.R .EQ 2 ASM.T.R .EQ 2
@ -149,22 +150,27 @@ L.SRC.ACC.SIZE .DA SRC.ACC.SIZE
L.SRC.ACC .DA SRC.ACC L.SRC.ACC .DA SRC.ACC
L.SRC.ARG .DA SRC.ARG L.SRC.ARG .DA SRC.ARG
L.T.DIRECTIVES .DA T.DIRECTIVES L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC 0 J.DIRECTIVES .DA DIR.AC
.DA DIR.AS .DA DIR.AS
.DA DIR.AT .DA DIR.AT
.DA DIR.AZ .DA DIR.AZ
.DA DIR.BS .DA DIR.BS
.DA DIR.CS
.DA DIR.CZ
.DA DIR.DA .DA DIR.DA
.DA DIR.DO 12 DIR.DO.ID .EQ *-J.DIRECTIVES
.DA DIR.DO
.DA DIR.DU .DA DIR.DU
.DA DIR.DU .DA DIR.DU
.DA DIR.ED .DA DIR.ED
.DA DIR.EL 20 DIR.EL.ID .EQ *-J.DIRECTIVES
.DA DIR.EL
.DA DIR.EM .DA DIR.EM
.DA DIR.EN .DA DIR.EN
.DA DIR.EP .DA DIR.EP
.DA DIR.EQ .DA DIR.EQ
.DA DIR.FI 30 DIR.FI.ID .EQ *-J.DIRECTIVES
.DA DIR.FI
.DA DIR.HS .DA DIR.HS
.DA DIR.IN .DA DIR.IN
.DA DIR.IN .DA DIR.IN
@ -184,6 +190,7 @@ J.DIRECTIVES .DA DIR.AC 0
.DA DIR.OR .DA DIR.OR
.DA DIR.PG .DA DIR.PG
.DA DIR.PH .DA DIR.PH
.DA DIR.PS
.DA DIR.SE .DA DIR.SE
.DA DIR.TA .DA DIR.TA
.DA DIR.TF .DA DIR.TF
@ -341,7 +348,7 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
.2 jsr SRC.ParseLine .2 jsr SRC.ParseLine
bcs .9 bcs .9
jsr OUT.PrintLine jmp OUT.PrintLine
.8 clc .8 clc
rts rts
@ -364,6 +371,7 @@ CS.RUN.ARGS ldy #S.PS.ARGC
lda ZPPtr1 lda ZPPtr1
>SYSCALL ArgV >SYSCALL ArgV
bcs .8 bcs .8
>STYA ZPPtr2 >STYA ZPPtr2
lda (ZPPtr2) lda (ZPPtr2)
@ -461,92 +469,101 @@ CS.QUIT >LDA.G SRC.Depth
.INB usr/src/bin/asm.s.sym .INB usr/src/bin/asm.s.sym
*--------------------------------------- *---------------------------------------
CS.END CS.END
T.DIRECTIVES >PSTR "AC" T.DIRECTIVES .PS "AC"
>PSTR "AS" .PS "AS"
>PSTR "AT" .PS "AT"
>PSTR "AZ" .PS "AZ"
>PSTR "BS" .PS "BS"
>PSTR "DA" .PS "CS"
>PSTR "DO" .PS "CZ"
>PSTR "DU" .PS "DA"
>PSTR "DUMMY" .PS "DO"
>PSTR "ED" .PS "DU"
>PSTR "ELSE" .PS "DUMMY"
>PSTR "EM" .PS "ED"
>PSTR "EN" .PS "ELSE"
>PSTR "EP" .PS "EM"
>PSTR "EQ" .PS "EN"
>PSTR "FIN" .PS "EP"
>PSTR "HS" .PS "EQ"
>PSTR "IN" .PS "FIN"
>PSTR "INB" .PS "HS"
>PSTR "INB1" .PS "IN"
>PSTR "INB2" .PS "INB"
>PSTR "INB3" .PS "INB1"
>PSTR "INB4" .PS "INB2"
>PSTR "INB5" .PS "INB3"
>PSTR "INB6" .PS "INB4"
>PSTR "INB7" .PS "INB5"
>PSTR "INB8" .PS "INB6"
>PSTR "INB9" .PS "INB7"
>PSTR "LI" .PS "INB8"
>PSTR "LIST" .PS "INB9"
>PSTR "MA" .PS "LI"
>PSTR "OP" .PS "LIST"
>PSTR "OR" .PS "MA"
>PSTR "PG" .PS "OP"
>PSTR "PH" .PS "OR"
>PSTR "SE" .PS "PG"
>PSTR "TA" .PS "PH"
>PSTR "TF" .PS "PS"
>PSTR "TI" .PS "SE"
>PSTR "US" .PS "TA"
.PS "TF"
.PS "TI"
.PS "US"
.HS 00 .HS 00
*--------------------------------------- *---------------------------------------
T.LI >PSTR "ON" T.LI .PS "ON"
>PSTR "OFF" .PS "OFF"
>PSTR "CON" .PS "CON"
>PSTR "COFF" .PS "COFF"
>PSTR "MON" .PS "MON"
>PSTR "MOFF" .PS "MOFF"
>PSTR "XON" .PS "XON"
>PSTR "XOFF" .PS "XOFF"
.HS 00 .HS 00
*--------------------------------------
DIR.EscChars .AS "abefnrtv"
.HS 5C27223F \'"?
DIR.EscChars.L .EQ *-DIR.EscChars
DIR.EscCodes .HS 07081B0C0A0D090B
.HS 5C27223F
*--------------------------------------- *---------------------------------------
SRC.MOD.RESERVED >PSTR "#/^<>" SRC.MOD.RESERVED .PS "#/^<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" SRC.EXP.RESERVED .PS "^!|&<=>+-*/"
SRC.AM.RESERVED >PSTR "[]()," SRC.AM.RESERVED .PS "[](),"
*--------------------------------------- *---------------------------------------
DIR.SYS .AZ "SYS" DIR.SYS .AZ "SYS"
*---------------------------------------
ASM.6502 .AZ "6502" ASM.6502 .AZ "6502"
MSG.HELP .AS "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\n" *---------------------------------------
.AS "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n" MSG.HELP .CS "A2osX-Macro Assembler (S-C MASM 3.1 Dialect)\r\n"
.AS " -L : Override .LIST (C,M,X)OFF\r\n" .CS "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
.AS " -T <target file> : Override .TF directive" .CS " -L : Override .LIST (C,M,X)OFF\r\n"
MSG.CRLF .AZ "\r\n" .CS " -T <target file> : Override .TF directive"
MSG.PASS .AZ "**** Pass:#%d" MSG.CRLF .CZ "\r\n"
MSG.SRC.FILE .AZ "**** Reading SRC File:%s" MSG.PASS .CZ "**** Pass:#%d"
MSG.OBJ.FILE .AZ "**** Writing OBJ File:%s, Type=%02x" MSG.SRC.FILE .CZ "**** Reading SRC File:%s"
MSG.CPU.FILE .AZ "**** Loading CPU File:%s" MSG.OBJ.FILE .CZ "**** Writing OBJ File:%s, Type=%02x"
MSG.OUT0 .AZ "%H- " MSG.CPU.FILE .CZ "**** Loading CPU File:%s"
MSG.OUT1 .AZ "%H-%h " MSG.OUT0 .CZ "%H- "
MSG.OUT2 .AZ "%H-%h %h " MSG.OUT1 .CZ "%H-%h "
MSG.OUT3 .AZ "%H-%h %h %h" MSG.OUT2 .CZ "%H-%h %h "
MSG.EQU0 .AZ " [ ?] " MSG.OUT3 .CZ "%H-%h %h %h"
MSG.EQU1 .AZ " [ %h] " MSG.EQU0 .CZ " [ ?] "
MSG.EQU2 .AZ " [ %h%h] " MSG.EQU1 .CZ " [ %h] "
MSG.EQU3 .AZ " [ %h%h%h] " MSG.EQU2 .CZ " [ %h%h] "
MSG.EQU4 .AZ " [%h%h%h%h] " MSG.EQU3 .CZ " [ %h%h%h] "
MSG.LINENUM .AZ " %05D " MSG.EQU4 .CZ " [%h%h%h%h] "
MSG.ERROR .AZ "**** Fatal Error $%h" MSG.LINENUM .CZ " %05D "
MSG.SYMBOLS .AZ "**** Symbol Table:" MSG.ERROR .CZ "**** Fatal Error $%h"
MSG.LSYMBOL .AZ " .%d=%h%h%h%h" MSG.SYMBOLS .CZ "**** Symbol Table:"
MSG.PSYMBOL .AZ " :%d(%d)=%h%h%h%h" MSG.LSYMBOL .CZ " .%d=%h%h%h%h"
MSG.SUMMARY .AZ "\r\n**** Symbol Table Size : %5D Bytes.\r\n" MSG.PSYMBOL .CZ " :%d(%d)=%h%h%h%h"
MSG.END .AZ "**** End Of Assembly." MSG.SUMMARY .CZ "\r\n**** Symbol Table Size : %5D Bytes.\r\n"
MSG.END .CZ "**** End Of Assembly."
.DO ASMDBG=1 .DO ASMDBG=1
MSG.DBG .AZ "\r\nCtxID=%d, ARG=%H%H <op> ACC=%H%H -> ACC %b [%h]\r\n" MSG.DBG .CZ "\r\nCtxID=%d, ARG=%H%H <op> ACC=%H%H -> ACC %b [%h]\r\n"
.FIN .FIN
*--------------------------------------- *---------------------------------------
ASM.CPU.FILE .BS 65 ASM.CPU.FILE .BS 65

View File

@ -164,23 +164,29 @@ CC.CompileLine jsr CC.GetCharNB
*-------------------------------------- *--------------------------------------
CC.CompileStmt >LDYA L.CC.KW CC.CompileStmt >LDYA L.CC.KW
jsr CC.LookupID jsr CC.LookupID
bcs .10 not an internal CC keyword.... bcs .1 not an internal CC keyword....
txa txa
>STA.G CC.CmdSave >STA.G CC.CmdSave
jmp (J.CC.KW,x) jmp (J.CC.KW,x)
*-------------------------------------- *--------------------------------------
* Declaration : int var or int func() * Declaration : typedef, type var or type func()
*-------------------------------------- *--------------------------------------
.10 >LDYA L.CC.TYPEQUAL .1 >LDYA L.CC.SCSPEC
jsr CC.LookupID jsr CC.LookupID
bcs .6 bcs .2
jmp (J.CC.SCSPEC,x)
.2 >LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .3
jmp CC.DECL jmp CC.DECL
*-------------------------------------- *--------------------------------------
* Statement : ++var, var=, func(); * Statement : ++var, var=, func();
*-------------------------------------- *--------------------------------------
.6 jmp CC.STMT .3 jmp CC.STMT
*-------------------------------------- *--------------------------------------
.99 lda #E.CSYN .99 lda #E.CSYN
sec sec

View File

@ -1,71 +1,6 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
* X = type qual
*--------------------------------------
CC.DECL jsr CC.TYPE.Decl
bcs .9
ldx #SYM.SC.STATIC Y,A = Type/Qual
bit bLocalScope
bpl .25
bit #SYM.Q.FUNC someone wants to add a local f() ?
sec
bne .29
ldx #SYM.SC.AUTO
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
bcs .29 OOM or DUP
.22 jsr CC.GetCharNB
bcs .99
cmp #';'
beq .28
cmp #'{'
bne .26
jsr CC.GetNextCharNB skip '{'
bcs .99
jmp CC.SYM.StoreF
*--------------------------------------
* Initializer
*--------------------------------------
.26 cmp #'=' type var = value ?
bne .99
jsr CC.GetNextCharNB skip '='
bcs .99
jsr CC.SYM.GetTypeInYA expected T/Q
jsr CC.EXP.Eval
bcs .9
jsr CC.SYM.GetAddr1
bcs .9
jsr CC.SYM.GetTypeInYA Y,A = T/Q
jsr CC.SYM.PopValue Set value to this var
.29 bcs .9
.28 jsr CC.SYM.Store
bcs .9
jsr CC.GetCharNB
cmp #';'
bne .99
clc
rts
*--------------------------------------
.99 lda #E.CSYN
sec
.9 rts
*--------------------------------------
CC.SCSPEC.AUTO CC.SCSPEC.AUTO
CC.SCSPEC.REGISTER CC.SCSPEC.REGISTER
CC.SCSPEC.STATIC CC.SCSPEC.STATIC
@ -75,7 +10,101 @@ CC.SCSPEC.EXTERN
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CC.SCSPEC.TYPEDEF CC.SCSPEC.TYPEDEF
>DEBUG jsr CC.GetNextCharNB
bcs .98
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .98
cpx #4 no const nor volatile
bcc .98
jsr CC.TYPE.Decl
bcs .99
ldx #SYM.SC.TYPEDEF
sec Reset Buffer
jsr CC.SYM.New Y,A=T/Q,storage class TYPEDEF
bcs .99
jsr CC.GetCharNB
bcs .98
cmp #';'
bne .98
jsr CC.GetNextCharNB skip ';'
jmp CC.SYM.Store
.98 lda #E.CSYN
sec
.99
CC.SCSPEC.TYPEDEF.RTS
rts
*--------------------------------------
* X = type qual
*--------------------------------------
CC.DECL jsr CC.TYPE.Decl
bcs CC.SCSPEC.TYPEDEF.RTS
sec Reset Buffer
CC.DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual
bit bLocalScope
bpl .25
bit #SYM.Q.FUNC someone wants to add a local f() ?
bne .98
ldx #SYM.SC.AUTO
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
bcs .98 OOM or DUP
.22 jsr CC.GetCharNB
bcs .98
cmp #';'
beq .28
cmp #'{'
bne .26
jsr CC.GetNextCharNB skip '{'
bcs .98
jmp CC.SYM.StoreF
*--------------------------------------
* Initializer
*--------------------------------------
.26 cmp #'=' type var = value ?
bne .98
jsr CC.GetNextCharNB skip '='
bcs .98
jsr CC.SYM.GetTypeInYA expected T/Q
jsr CC.EXP.Eval
bcs .99
jsr CC.SYM.GetAddr1
bcs .99
jsr CC.SYM.GetTypeInYA Y,A = T/Q
jsr CC.SYM.PopValue Set value to this var
.29 bcs .99
.28 jsr CC.SYM.Store
bcs .99
jsr CC.GetCharNB
cmp #';'
bne .98
clc
rts
.98 lda #E.CSYN .98 lda #E.CSYN
sec sec

View File

@ -25,6 +25,7 @@ CC.F.Decl stz LocalPtr
>STYA ZPPtr2 Save T/Q >STYA ZPPtr2 Save T/Q
jsr CC.SYM.AddWord jsr CC.SYM.AddWord
bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
@ -51,9 +52,8 @@ CC.F.Decl stz LocalPtr
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
.6 ldy #0 .6 jsr CC.SYM.Add0000 definition End
lda #0 bcs .99
jsr CC.SYM.AddWord definition End
jsr CC.GetNextCharNBNL Skip ) jsr CC.GetNextCharNBNL Skip )
bcs .9 bcs .9
@ -146,6 +146,7 @@ CC.F.NewArg >LDYA.G CC.SymID
>LDYA ZPPtr2 >LDYA ZPPtr2
ldx #SYM.SC.AUTO ldx #SYM.SC.AUTO
sec Reset Buffer
jsr CC.SYM.New jsr CC.SYM.New
bcs .9 bcs .9

View File

@ -53,7 +53,7 @@ CC.KW.IF.END jsr CC.GetCharNBNL
.1 lda #'E' define ELSE Label .1 lda #'E' define ELSE Label
jsr CC.KW.NewLabel jsr CC.KW.NewLabel
bcs .99 bcs .99
clv pop context clv pop context
rts rts
*-------------------------------------- *--------------------------------------
@ -159,7 +159,7 @@ CC.KW.DO jsr CC.KW.BEGIN00
lda #'C' define CONT Label lda #'C' define CONT Label
jsr CC.SYM.NewA jsr CC.SYM.NewA
bcs .99 bcs .99
jmp CC.KW.STMT jmp CC.KW.STMT
.99 rts .99 rts
@ -199,14 +199,14 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
cmp #')' cmp #')'
bne .9 bne .9
jsr CC.GetNextCharNB jsr CC.GetNextCharNB
bcs .9 bcs .9
clv pop context clv pop context
clc clc
rts rts
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
.99 rts .99 rts
@ -354,10 +354,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
tax tax
bne .97 bne .97
cpy #SYM.T.UCHAR cpy #SYM.T.UCHAR
bcc .97 bcc .97
cpy #SYM.T.FLOAT cpy #SYM.T.FLOAT
bcs .97 bcs .97
@ -371,10 +371,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
jsr CC.Push push SizeOf(type) jsr CC.Push push SizeOf(type)
bcs .99 bcs .99
jsr CC.KW.BEGIN jsr CC.KW.BEGIN
bcs .99 bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .99 bcs .99
@ -382,10 +382,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
bne .98 bne .98
jmp CC.KW.STMT jmp CC.KW.STMT
.97 lda #E.TMISMATCH .97 lda #E.TMISMATCH
sec sec
rts rts
.98 lda #E.CSYN .98 lda #E.CSYN
sec sec
@ -395,7 +395,7 @@ CC.KW.SWITCH.END
lda #'B' define BREAK Label lda #'B' define BREAK Label
jsr CC.KW.NewLabel jsr CC.KW.NewLabel
bcs .99 bcs .99
clv pop context clv pop context
.99 rts .99 rts
@ -407,7 +407,7 @@ CC.KW.CASE ldy CStackPtr
lda (ZPCCStack),y lda (ZPCCStack),y
cmp #10 SWITCH ?? cmp #10 SWITCH ??
bne .9 bne .9
lda CStackPtr lda CStackPtr
clc clc
adc #7 adc #7
@ -416,13 +416,13 @@ CC.KW.CASE ldy CStackPtr
lda (ZPCCStack),y type lda (ZPCCStack),y type
tay tay
lda #0 for integral type lda #0 for integral type
jsr CC.EXP.Eval jsr CC.EXP.Eval
bcs .99 bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
cmp #':' cmp #':'
bne .9 bne .9
@ -430,7 +430,7 @@ CC.KW.CASE ldy CStackPtr
clc clc
rts rts
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
.99 rts .99 rts
@ -442,18 +442,18 @@ CC.KW.DEFAULT ldy CStackPtr
lda (ZPCCStack),y lda (ZPCCStack),y
cmp #10 SWITCH ?? cmp #10 SWITCH ??
bne .9 bne .9
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
cmp #':' cmp #':'
bne .9 bne .9
jsr CC.GetNextCharNB skip ':' jsr CC.GetNextCharNB skip ':'
clc clc
rts rts
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
.99 rts .99 rts
@ -462,10 +462,10 @@ CC.KW.BREAK lda #'B'
jsr CC.KW.LookupLabel jsr CC.KW.LookupLabel
bcs .9 bcs .9
lda #$4C emit JMP break lda #$4C emit JMP break
jmp CODE.TOABSYX jmp CODE.TOABSYX
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
rts rts
@ -474,10 +474,10 @@ CC.KW.CONTINUE lda #'C'
jsr CC.KW.LookupLabel jsr CC.KW.LookupLabel
bcs .9 bcs .9
lda #$4C emit JMP cont lda #$4C emit JMP cont
jmp CODE.TOABSYX jmp CODE.TOABSYX
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
rts rts
@ -531,51 +531,275 @@ CC.KW.SIZEOF
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.STRUCT >ENTER 4 CC.KW.STRUCT clc
.HS B0 BCS
*--------------------------------------
CC.KW.UNION sec
stz ZPPtr2 bNewTagDef
ror ZPPtr2+1 bStrucUnion
jsr CC.GetCharNB bit bPass2
bcs .99 bpl CC.KW.SU.1 Pass 1: create def
*--------------------------------------
ldx #SYM.SC.TAG CC.KW.SU.2 jsr CC.GetNextCharNB
>LDA.G CC.hTags bcs .98
jsr CC.SYM.NewKey
bcs .99
sta (pStack) Y,A = KeyID
tya
ldy #1
sta (pStack),y
jsr CC.SkipX
jsr CC.GetNextCharNB
bcs .99
cmp #'{' cmp #'{'
bne .99 beq .1 no TAG
.1 jsr CC.GetNextCharNB jsr CC.KW.GetTag
bcs .99 bcs .99
jsr CC.GetNextCharNBNL
bcs .98
cmp #'{'
bne .2
.1 jsr CC.GetNextCharNBNL skip '{'
cmp #'}' cmp #'}'
bne .1 bne .1
jsr CC.GetNextCharNB skip '}' jsr CC.GetNextCharNBNL skip '}'
cmp #';'
bne .2
jsr CC.GetNextCharNB skip ';'
clc
rts
.2 clc reuse buffer
jsr CC.SYM.Lookup
bcs .99
jsr CC.GetCharNB
bcs .98
cmp #','
bne .3
jsr CC.GetNextCharNBNL
bcc .2
bcs .98
.3 cmp #';'
bne .98
clc
rts
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.SU.1 ldy #SYM.T.STRUCT
lda #0
ldx #SYM.SC.TAG
sec reset buffer
jsr CC.SYM.BufInitYAX
jsr CC.GetNextCharNB
bcs .98
cmp #'{'
beq .30 no TAG
jsr CC.KW.NewTag
bcc .20
jsr CC.KW.GetTag
bcs .99
*--------------------------------------
.20 jsr CC.GetNextCharNBNL
bcs .98
cmp #'{'
beq .30
bit ZPPtr2 bNewTagDef
bmi .98
bra .41 go create vars...
*--------------------------------------
.30 jsr CC.GetNextCharNBNL skip '{' of ';'
bcs .98
cmp #'}'
beq .38
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .98
cpx #4 no const nor volatile
bcc .98
jsr CC.TYPE.Decl
bcs .99
jsr CC.TYPE.SizeOf get sizeof in X
jsr CC.KW.SU.AddYAX
bcs .99
jsr CC.SYM.Add0000 TODO: bitO & bitW
bcs .99
jsr CC.SYM.AddName
bcs .99
jsr CC.GetCharNB
cmp #';'
bne .98
bra .30
.38 jsr CC.GetNextCharNB skip '}'
bcs .98
cmp #';'
bne .40
jsr CC.GetNextCharNB skip ';'
bit ZPPtr2 bNewTagDef
bpl .98 no tag & no var, error
jmp CC.KW.StoreTag
*--------------------------------------
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
.40 bit ZPPtr2 bNewTagDef
bpl .41
jsr CC.KW.StoreTag
bcs .99
.41 clc reuse buffer
ldy #SYM.T.STRUCT
lda #0
jsr CC.DECL.YAC
bcs .99
jsr CC.GetCharNB
bcs .98
cmp #','
bne .42
jsr CC.GetNextCharNBNL
bcc .41
bcs .98
.42 cmp #';'
bne .98
clc clc
.99 >LEAVE
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.UNION CC.KW.SU.AddYAX jsr CC.SYM.AddWord add T/Q
bcs .99
bit ZPPtr2+1 bStrucUnion
bmi .1
ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
pha
iny
lda (ZPSymBufPtr),y
ply
jsr CC.SYM.AddWord Add Y/A Offset
bcs .99
txa
ldy #SYM.SizeOf
* clc
adc (ZPSymBufPtr),y
sta (ZPSymBufPtr),y
bcc .99
iny
lda #0
adc (ZPSymBufPtr),y
sta (ZPSymBufPtr),y
* clc
.99 rts
.1 txa
ldy #SYM.SizeOf
cmp (ZPSymBufPtr),y
bcs .2
sta (ZPSymBufPtr),y
.2 jmp CC.SYM.Add0000 Add Y/A Offset (always 0 for union)
*--------------------------------------
CC.KW.ENUM CC.KW.ENUM
lda #E.CSYN lda #E.CSYN
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.NewTag >LDA.G CC.hTags
jsr CC.SYM.NewKey
bcs .9
>STYA ZPPtr1 TagID
dec ZPPtr2 bNewTagDef = true
jsr CC.SkipX
.9 rts
*--------------------------------------
CC.KW.GetTag >PUSHB.G CC.hTags
>PUSHW ZPLineBufPtr
>SYSCALL SListLookup
bcs .9
phy Y,A = KeyID
pha
jsr CC.SkipX X = KeyLen
>PUSHB.G CC.hTags
pla
>PUSHA
pla
>PUSHA
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
.9 rts
*--------------------------------------
CC.KW.StoreTag >PUSHB.G CC.hTags
>PUSHW ZPPtr1
>PUSHW ZPSymBufPtr
>PUSHBI 0
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
>PUSHA
>SYSCALL SListAddData
rts
*--------------------------------------
CC.KW.BEGIN00 lda #0 CC.KW.BEGIN00 lda #0
jsr CC.Push no T/Q jsr CC.Push no T/Q
bcs CC.KW.BEGIN.RTS bcs CC.KW.BEGIN.RTS
jsr CC.Push jsr CC.Push
bcs CC.KW.BEGIN.RTS bcs CC.KW.BEGIN.RTS
@ -670,7 +894,7 @@ CC.KW.LookupLabel
lda (ZPCCStack),y lda (ZPCCStack),y
bmi .9 f() bmi .9 f()
iny iny
iny iny
iny iny
@ -680,12 +904,12 @@ CC.KW.LookupLabel
iny iny
lda (ZPCCStack),y lda (ZPCCStack),y
iny iny
iny iny
iny iny
sty ArgIndex sty ArgIndex
ply ply
>STYA.G CC.CPSPFX+2 >STYA.G CC.CPSPFX+2
@ -693,10 +917,10 @@ CC.KW.LookupLabel
pha pha
jsr CC.SYM.LookupA jsr CC.SYM.LookupA
bcs .1 bcs .1
pla pla
.8 rts .8 rts
.9 pla .9 pla
lda #E.CSYN lda #E.CSYN
sec sec

View File

@ -26,6 +26,11 @@ CC.Link >LDYA L.MSG.LINKING
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .99 bcs .99
ldy #SYM.SC
lda (ZPSymBufPtr),y
cmp #SYM.SC.TYPEDEF
bcs .6
ldy #SYM.Addr+1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
dey dey

View File

@ -28,7 +28,30 @@ CC.STMT jsr CC.GetCharNB
jmp CC.SYM.LookupFree jmp CC.SYM.LookupFree
.60 jsr STMT.SetVar .60 ldy #SYM.SC
lda (ZPLookupSymPtr),y
cmp #SYM.SC.TYPEDEF
bne .61
jsr CC.GetNextCharNB
bcs .9
ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr)
pha
jsr CC.SYM.LookupFree
ply
pla
sec Reset Buffer
jmp CC.DECL.YAC
.61 jsr STMT.SetVar
bcs .99 bcs .99
jmp CC.SYM.LookupFree jmp CC.SYM.LookupFree

View File

@ -2,16 +2,18 @@ NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
* Input : ZPLineBufPtr, Y,A = T/Q, X = SC * Input : ZPLineBufPtr, Y,A = T/Q, X = SC
* CS : Reset Buffer
* CC : Reuse Buffer
* Output : Y,A = VarID * Output : Y,A = VarID
*-------------------------------------- *--------------------------------------
CC.SYM.New >STYA ZPPtr2 T/Q CC.SYM.New >STYA ZPPtr2 T/Q
stx ZPPtr3 SC stx ZPPtr3 SC
bit bPass2 bit bPass2
bpl CC.SYM.New1 bpl CC.SYM.New.1
bit bLocalScope bit bLocalScope
bmi CC.SYM.New1 bmi CC.SYM.New.1
>PUSHB.G CC.hScopes Global Scope >PUSHB.G CC.hScopes Global Scope
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
@ -29,11 +31,13 @@ CC.SYM.New >STYA ZPPtr2 T/Q
>PUSHWI 65535 all >PUSHWI 65535 all
>PUSHWZ From Start >PUSHWZ From Start
>SYSCALL SListGetData >SYSCALL SListGetData
bcc CC.SYM.New2 bcc CC.SYM.New.2
CC.SYM.New.9 rts Y,A = SymSize CC.SYM.New.9 rts Y,A = SymSize
*-------------------------------------- *--------------------------------------
CC.SYM.New1 ldy ScopeIdx CC.SYM.New.1 jsr CC.SYM.BufInitYAX set buf according C
ldy ScopeIdx
lda (pData),y lda (pData),y
jsr CC.SYM.NewKey jsr CC.SYM.NewKey
bcs CC.SYM.New.9 bcs CC.SYM.New.9
@ -41,34 +45,21 @@ CC.SYM.New1 ldy ScopeIdx
>STYA.G CC.SymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
jsr CC.SkipX X = KeyLen jsr CC.SkipX X = KeyLen
*--------------------------------------
CC.SYM.New.2 jsr CC.GetCharNB
bcs .98
lda ZPPtr2 cmp #';'
sta (ZPSymBufPtr) #SYM.T
lda ZPPtr2+1
ldy #SYM.Q
sta (ZPSymBufPtr),y
lda ZPPtr3
iny #SYM.SC
sta (ZPSymBufPtr),y
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1 bne .1
tya lda ZPPtr3
ldy #SYM.DefSize cmp #SYM.SC.TYPEDEF
sta (ZPSymBufPtr),y bne CC.SYM.SetAddr
*--------------------------------------
CC.SYM.New2 jsr CC.GetCharNB
bcs CC.SYM.SetAddr
cmp #'(' clc
rts
.1 cmp #'('
bne CC.SYM.NewV bne CC.SYM.NewV
ldy #SYM.Q ldy #SYM.Q
@ -77,6 +68,10 @@ CC.SYM.New2 jsr CC.GetCharNB
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
jmp CC.F.Decl jmp CC.F.Decl
.98 lda #E.CSYN
sec
.99 rts
*-------------------------------------- *--------------------------------------
CC.SYM.NewV cmp #'[' CC.SYM.NewV cmp #'['
bne CC.SYM.SetAddr bne CC.SYM.SetAddr
@ -98,7 +93,7 @@ CC.SYM.NewV cmp #'['
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
jsr CC.GetNextCharNB Skip [ jsr CC.GetNextCharNB Skip [
bcs .99 bcs .98
cmp #']' cmp #']'
bne .2 bne .2
@ -106,22 +101,24 @@ CC.SYM.NewV cmp #'['
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
and #SYM.Q.PPPOINTER and #SYM.Q.PPPOINTER
beq .99 [] only allowed for * beq .98 [] only allowed for *
jsr CC.SYM.Add0000 set as [0] (deref)
bcs .99
>LDYAI 0 set as [0] (deref)
jsr CC.SYM.AddWord
bra .3 bra .3
.2 jsr CC.EXP.IntConst .2 jsr CC.EXP.IntConst
bcs .99 bcs .98
jsr CC.SYM.AddWord jsr CC.SYM.AddWord
jsr CC.GetCharNB
bcs .99 bcs .99
jsr CC.GetCharNB
bcs .98
cmp #']' cmp #']'
bne .99 bne .98
.3 jsr CC.GetNextCharNB Skip ] .3 jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr bcs CC.SYM.SetAddr
@ -133,15 +130,22 @@ CC.SYM.NewV cmp #'['
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
and #SYM.Q.AAARRAY and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY cmp #SYM.Q.AAARRAY
beq .99 already [][][] bne .1 already [][][] ?
bra .1 .98 lda #E.CSYN
.99 lda #E.CSYN
sec sec
.9 rts .99 rts
*-------------------------------------- *--------------------------------------
CC.SYM.SetAddr ldy #SYM.Q CC.SYM.SetAddr ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
iny
ora (ZPSymBufPtr),y
bne .1
jsr CC.SYM.GetSymSizeOfInAXC
jsr CC.SYM.SetSizeOf
.1 ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
and #SYM.Q.FUNC and #SYM.Q.FUNC
bne .9 bne .9
@ -157,14 +161,7 @@ CC.SYM.SetAddr ldy #SYM.Q
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC CC.SYM.SetAddrG ldy #SYM.Addr
jsr CC.SYM.SetSizeOf
* clc / sec A,X=Size, CS if pointer
pha
ldy #SYM.Addr
lda ZPCCData lda ZPCCData
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
@ -174,22 +171,21 @@ CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC
lda ZPCCData+1 lda ZPCCData+1
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
pla ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
clc clc
adc ZPCCData adc ZPCCData
sta ZPCCData sta ZPCCData
txa iny
lda (ZPSymBufPtr),y
adc ZPCCData+1 adc ZPCCData+1
sta ZPCCData+1 sta ZPCCData+1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC CC.SYM.SetAddrL ldy #SYM.SizeOf+1
jsr CC.SYM.SetSizeOf
ldy #SYM.SizeOf+1
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
bne .9 bne .9
@ -197,8 +193,7 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
* clc / sec A,X=Size, CS if pointer clc
clc
adc LocalPtr adc LocalPtr
sta LocalPtr sta LocalPtr
bcs .9 bcs .9
@ -206,7 +201,8 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
ldy #SYM.Addr ldy #SYM.Addr
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
jsr CC.SYM.GetSymSizeOfInAXC ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
jsr CODE.nAddLocal jsr CODE.nAddLocal
clc clc
@ -216,6 +212,35 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.BufInitYAX
pha
tya
sta (ZPSymBufPtr) #SYM.T
pla
ldy #SYM.Q
sta (ZPSymBufPtr),y
txa
iny #SYM.SC
sta (ZPSymBufPtr),y
bcc .8 DONT reset buffer
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
tya
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
.8 rts
*--------------------------------------
CC.SYM.PushAddr ldy #SYM.SC CC.SYM.PushAddr ldy #SYM.SC
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC beq .1 SYM.SC.STATIC
@ -291,7 +316,7 @@ CC.SYM.GetAddr1 ldy #SYM.SC
>LDYA L.PCC.GetIAddr1 >LDYA L.PCC.GetIAddr1
jmp CODE.EmitPCC jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr1 .2 >LDYA L.PCC.GetUAddr1
jmp CODE.EmitPCC jmp CODE.EmitPCC
@ -344,25 +369,87 @@ CC.SYM.NewKey >PUSHA
.9 rts Y,A = KeyID, X = KeyLen .9 rts Y,A = KeyID, X = KeyLen
*-------------------------------------- *--------------------------------------
CC.SYM.AddWord pha CC.SYM.Add0000 >LDYAI 0
phy *--------------------------------------
CC.SYM.AddWord phy
pha
ldy #SYM.DefSize ldy #SYM.DefSize
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
pha
inc clc
inc adc #2
bcs .9
sta (ZPSymBufPtr),y
tay
dey
pla A
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
ply dey
pla pla Y
pha
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
iny iny
lda (ZPSymBufPtr),y get back A
ply get back Y
* clc
rts
.9 pla
pla
lda #E.BUF
sec
rts
*--------------------------------------
CC.SYM.AddName jsr CC.GetCharNB
bcs .98
jsr CC.IsLetter
bcs .98
.1 jsr CC.SYM.AddByte
bcs .99
jsr CC.GetNextCharNB
bcs .98
jsr CC.IsLetterOrDigit
bcc .1
lda #0
bra CC.SYM.AddByte
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.SYM.AddByte pha
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
inc
beq .9
sta (ZPSymBufPtr),y
dec
tay
pla pla
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
CC.SYM.AddWord.RTS
clc
rts
.9 pla
lda #E.BUF
sec
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.NewCPSID >LDYA.G CC.CPSID CC.SYM.NewCPSID >LDYA.G CC.CPSID
@ -372,19 +459,19 @@ CC.SYM.NewCPSID >LDYA.G CC.CPSID
inc inc
cmp #'Z'+1 cmp #'Z'+1
bne .1 bne .1
dey CC.CPSID dey CC.CPSID
lda (pData),y lda (pData),y
inc inc
cmp #'Z'+1 cmp #'Z'+1
beq .9 beq .9
sta (pData),y sta (pData),y
lda #'A' lda #'A'
iny CC.CPSID+1 iny CC.CPSID+1
.1 sta (pData),y .1 sta (pData),y
clc clc
rts rts
@ -402,7 +489,7 @@ CC.SYM.NewA bit bPass2
>PUSHEA.G CC.CPSPFX >PUSHEA.G CC.CPSPFX
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs CC.SYM.AddWord.RTS bcs .99
>STYA.G CC.SymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
@ -647,7 +734,7 @@ CC.SYM.LookupCheckTQ
eor (ZPLookupSymPtr),y eor (ZPLookupSymPtr),y
and #$F8 ignore VOLATILE|FUNC|FASTCALL and #$F8 ignore VOLATILE|FUNC|FASTCALL
bne .9 bne .9
clc clc
rts rts
@ -661,16 +748,16 @@ CC.SYM.PopValue jsr CC.SYM.GetYASizeOfInAXC
tax tax
dex dex
bne .1 bne .1
>LDYA L.PCC.PopValue1 >LDYA L.PCC.PopValue1
jmp CODE.EmitPCC jmp CODE.EmitPCC
.1 cpx #1 .1 cpx #1
bne .2 bne .2
>LDYA L.PCC.PopValue2 >LDYA L.PCC.PopValue2
jmp CODE.EmitPCC jmp CODE.EmitPCC
.2 jsr CODE.LDXI .2 jsr CODE.LDXI
bcs .9 bcs .9

View File

@ -7,7 +7,7 @@ CC.TYPE.Decl >ENTER 2
ldy #1 ldy #1
sta (pStack),y Qual sta (pStack),y Qual
jsr .7 jsr .8
bcs .99 bcs .99
ldy #1 ldy #1
@ -22,7 +22,7 @@ CC.TYPE.Decl >ENTER 2
.99 >LEAVE .99 >LEAVE
rts rts
.7 jmp (J.CC.TYPEQUAL,x) .8 jmp (J.CC.TYPEQUAL,x)
*-------------------------------------- *--------------------------------------
* Type Declaration keywords * Type Declaration keywords
*-------------------------------------- *--------------------------------------

View File

@ -622,22 +622,22 @@ CS.END
*-------------------------------------- *--------------------------------------
* Initialized DATA * Initialized DATA
*-------------------------------------- *--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n" MSG.GREETINGS .CZ "\r\nA2osX C Compiler %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : CC <option> srcfile.c dstfile\r\n" MSG.USAGE .CS "Usage : CC <option> srcfile.c dstfile\r\n"
.AS " -D : Debug Mode\r\n" .CS " -D : Debug Mode\r\n"
.AS " -T : Trace On\r\n" .CS " -T : Trace On\r\n"
.AZ " -L Libname1 -O Libname2 ...\r\n" .CZ " -L Libname1 -L Libname2 ...\r\n"
MSG.READING .AZ "*** Reading file: %s\r\n" MSG.READING .CZ "*** Reading file: %s\r\n"
MSG.LINKING .AZ "*** Linking..." MSG.LINKING .CZ "*** Linking..."
MSG.LINKING2 .AZ "*** %H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n" MSG.LINKING2 .CZ "*** %H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n"
MSG.GENERATING .AZ "*** Generating: %s\r\n" MSG.GENERATING .CZ "*** Generating: %s\r\n"
MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n" MSG.DEBUG .CS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
.AZ " LSP=%h, CSP=%H:%h>%h:%h, ScopeIdx=%h\r\n" .CZ " LSP=%h, CSP=%H:%h>%h:%h, ScopeIdx=%h\r\n"
MSG.TRACE .AZ "%5D> %s\r\n" MSG.TRACE .CZ "%5D> %s\r\n"
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n" MSG.RTSTK .CZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
MSG.ERROR .AZ " %s^\r\n" MSG.ERROR .CZ " %s^\r\n"
MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, Const size=%5D, uData size=%5D\r\n" MSG.SUMMARY .CZ "*** Compilation OK : Code size=%5D, Const size=%5D, uData size=%5D\r\n"
MSG.NOMAIN .AZ "*** No 'main()' function defined." MSG.NOMAIN .CZ "*** No 'main()' function defined."
*-------------------------------------- *--------------------------------------
OptionList .AS "DdTtLl" OptionList .AS "DdTtLl"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
@ -657,38 +657,38 @@ CC.OPChars.Cnt .EQ *-CC.OPChars
*-------------------------------------- *--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*-------------------------------------- *--------------------------------------
CC.AOPS >PSTR "=" CC.AOPS .PS "="
>PSTR "+=" .PS "+="
>PSTR "-=" .PS "-="
>PSTR "*=" .PS "*="
>PSTR "/=" .PS "/="
>PSTR "%=" .PS "%="
>PSTR "<<=" .PS "<<="
>PSTR ">>=" .PS ">>="
>PSTR "&=" .PS "&="
>PSTR "^=" .PS "^="
>PSTR "!=" .PS "!="
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Pre Operators: & * + - ! ~ ++ -- * Pre Operators: & * + - ! ~ ++ --
*-------------------------------------- *--------------------------------------
CC.PREOPS >PSTR "&" ref CC.PREOPS .PS "&" ref
>PSTR "*" deref .PS "*" deref
>PSTR "+" abs .PS "+" abs
>PSTR "-" negate .PS "-" negate
>PSTR "!" logical not .PS "!" logical not
>PSTR "~" bitwise not .PS "~" bitwise not
>PSTR "++" pre increase .PS "++" pre increase
>PSTR "--" pre decrease .PS "--" pre decrease
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Post Operators: ++ -- * Post Operators: ++ --
*-------------------------------------- *--------------------------------------
CC.POSTOPS >PSTR "++" CC.POSTOPS .PS "++"
>PSTR "--" .PS "--"
>PSTR "[" .PS "["
>PSTR "." .PS "."
>PSTR "->" .PS "->"
.HS 00 .HS 00
*-- Binary ---- H to L precedence ----- *-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / % * Arithmetic Operators: * / %
@ -698,77 +698,77 @@ CC.POSTOPS >PSTR "++"
* Bitwise Operators: & | ^ ~ * Bitwise Operators: & | ^ ~
* Logical Operators: && || * Logical Operators: && ||
*-------------------------------------- *--------------------------------------
CC.BOPS >PSTR "*" CC.BOPS .PS "*"
>PSTR "/" .PS "/"
>PSTR "%" .PS "%"
>PSTR "+" .PS "+"
>PSTR "-" .PS "-"
>PSTR "<<" .PS "<<"
>PSTR ">>" .PS ">>"
>PSTR "<" .PS "<"
>PSTR "<=" .PS "<="
>PSTR ">" .PS ">"
>PSTR ">=" .PS ">="
>PSTR "==" .PS "=="
>PSTR "!=" .PS "!="
>PSTR "&" .PS "&"
>PSTR "|" .PS "|"
>PSTR "^" .PS "^"
>PSTR "&&" .PS "&&"
>PSTR "||" .PS "||"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Reserved Directives: * Reserved Directives:
*-------------------------------------- *--------------------------------------
CC.DIRS >PSTR "define" CC.DIRS .PS "define"
>PSTR "include" .PS "include"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Reserved Keywords: * Reserved Keywords:
*-------------------------------------- *--------------------------------------
CC.KW >PSTR "if" CC.KW .PS "if"
>PSTR "while" .PS "while"
>PSTR "else" .PS "else"
>PSTR "do" .PS "do"
>PSTR "for" .PS "for"
>PSTR "switch" .PS "switch"
>PSTR "case" .PS "case"
>PSTR "default" .PS "default"
>PSTR "break" .PS "break"
>PSTR "continue" .PS "continue"
>PSTR "return" .PS "return"
>PSTR "sizeof" .PS "sizeof"
>PSTR "struct" .PS "struct"
>PSTR "union" .PS "union"
>PSTR "enum" .PS "enum"
.HS 00 .HS 00
CC.KW2.IF >PSTR "else" CC.KW2.IF .PS "else"
.HS 00 .HS 00
CC.KW2.DO >PSTR "while" CC.KW2.DO .PS "while"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CC.SCSPEC >PSTR "auto" CC.SCSPEC .PS "auto"
>PSTR "register" .PS "register"
>PSTR "static" .PS "static"
>PSTR "extern" .PS "extern"
>PSTR "typedef" .PS "typedef"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CC.TYPEQUAL >PSTR "const" ALL CC.TYPEQUAL .PS "const" ALL
>PSTR "volatile" .PS "volatile"
CC.TYPESPEC >PSTR "signed" char,int,long CC.TYPESPEC .PS "signed" char,int,long
>PSTR "unsigned" char,int,long .PS "unsigned" char,int,long
>PSTR "short" int .PS "short" int
CC.TYPES >PSTR "void" CC.TYPES .PS "void"
>PSTR "char" .PS "char"
>PSTR "int" .PS "int"
>PSTR "long" .PS "long"
>PSTR "float" .PS "float"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CC.Type2FPU .DA #FPU.wMUL,#FPU.iMUL,#FPU.uMUL,#FPU.lMUL,#FPU.fMUL CC.Type2FPU .DA #FPU.wMUL,#FPU.iMUL,#FPU.uMUL,#FPU.lMUL,#FPU.fMUL
*-------------------------------------- *--------------------------------------
CC.FTYPES >PSTR "fastcall" CC.FTYPES .PS "fastcall"
* .HS 00 * .HS 00
*-------------------------------------- *--------------------------------------
CC.TYPESIZE .HS 0001010202040405 CC.TYPESIZE .HS 0001010202040405
@ -778,281 +778,281 @@ CC.MAIN .AZ "main"
CC.MAIN.DEF .DA #SYM.T.SINT,#0,#SYM.T.SINT,#0,#SYM.T.UCHAR,#SYM.Q.PPOINTER,0 CC.MAIN.DEF .DA #SYM.T.SINT,#0,#SYM.T.SINT,#0,#SYM.T.UCHAR,#SYM.Q.PPOINTER,0
CC.MAIN.DEF.LEN .EQ *-CC.MAIN.DEF CC.MAIN.DEF.LEN .EQ *-CC.MAIN.DEF
*-------------------------------------- *--------------------------------------
CC.SYSCALL >PSTR "chtyp" CC.SYSCALL .PS "chtyp"
.DA #SYS.ChTyp .DA #SYS.ChTyp
>PSTR "chmod" .PS "chmod"
.DA #SYS.ChMod .DA #SYS.ChMod
>PSTR "fstat" .PS "fstat"
.DA #SYS.FStat .DA #SYS.FStat
>PSTR "stat" .PS "stat"
.DA #SYS.Stat .DA #SYS.Stat
>PSTR "mkdir" .PS "mkdir"
.DA #SYS.MKDir .DA #SYS.MKDir
>PSTR "mknod" .PS "mknod"
.DA #SYS.MKNod .DA #SYS.MKNod
>PSTR "mkfifo" .PS "mkfifo"
.DA #SYS.MKFIFO .DA #SYS.MKFIFO
>PSTR "pipe" .PS "pipe"
.DA #SYS.Pipe .DA #SYS.Pipe
>PSTR "opendir" .PS "opendir"
.DA #SYS.OpenDir .DA #SYS.OpenDir
>PSTR "readdir" .PS "readdir"
.DA #SYS.ReadDir .DA #SYS.ReadDir
>PSTR "closedir" .PS "closedir"
.DA #SYS.CloseDir .DA #SYS.CloseDir
>PSTR "open" .PS "open"
.DA #SYS.Open .DA #SYS.Open
>PSTR "close" .PS "close"
.DA #SYS.Close .DA #SYS.Close
>PSTR "read" .PS "read"
.DA #SYS.Read .DA #SYS.Read
>PSTR "write" .PS "write"
.DA #SYS.Write .DA #SYS.Write
>PSTR "chown" .PS "chown"
.DA #SYS.ChOwn .DA #SYS.ChOwn
>PSTR "fputc" .PS "fputc"
.DA #SYS.FPutC .DA #SYS.FPutC
>PSTR "putchar" .PS "putchar"
.DA #SYS.PutChar .DA #SYS.PutChar
>PSTR "getc" .PS "getc"
.DA #SYS.GetC .DA #SYS.GetC
>PSTR "getchar" .PS "getchar"
.DA #SYS.GetChar .DA #SYS.GetChar
>PSTR "fputs" .PS "fputs"
.DA #SYS.FPutS .DA #SYS.FPutS
>PSTR "puts" .PS "puts"
.DA #SYS.PutS .DA #SYS.PutS
>PSTR "fgets" .PS "fgets"
.DA #SYS.FGetS .DA #SYS.FGetS
>PSTR "ungetc" .PS "ungetc"
.DA #SYS.UngetC .DA #SYS.UngetC
>PSTR "fopen" .PS "fopen"
.DA #SYS.FOpen .DA #SYS.FOpen
>PSTR "fclose" .PS "fclose"
.DA #SYS.FClose .DA #SYS.FClose
>PSTR "fread" .PS "fread"
.DA #SYS.FRead .DA #SYS.FRead
>PSTR "fwrite" .PS "fwrite"
.DA #SYS.FWrite .DA #SYS.FWrite
>PSTR "fflush" .PS "fflush"
.DA #SYS.FFlush .DA #SYS.FFlush
>PSTR "fseek" .PS "fseek"
.DA #SYS.FSeek .DA #SYS.FSeek
>PSTR "ftell" .PS "ftell"
.DA #SYS.FTell .DA #SYS.FTell
>PSTR "feof" .PS "feof"
.DA #SYS.FEOF .DA #SYS.FEOF
>PSTR "remove" .PS "remove"
.DA #SYS.Remove .DA #SYS.Remove
>PSTR "rename" .PS "rename"
.DA #SYS.Rename .DA #SYS.Rename
>PSTR "printf" .PS "printf"
.DA #SYS.PrintF .DA #SYS.PrintF
>PSTR "fprintf" .PS "fprintf"
.DA #SYS.FPrintF .DA #SYS.FPrintF
>PSTR "sprintf" .PS "sprintf"
.DA #SYS.SPrintF .DA #SYS.SPrintF
>PSTR "scanf" .PS "scanf"
.DA #SYS.ScanF .DA #SYS.ScanF
>PSTR "fscanf" .PS "fscanf"
.DA #SYS.FScanF .DA #SYS.FScanF
>PSTR "sscanf" .PS "sscanf"
.DA #SYS.SScanF .DA #SYS.SScanF
* >PSTR "$50" * .PS "$50"
* .DA #0 * .DA #0
* >PSTR "$52" * .PS "$52"
* .DA #0 * .DA #0
* >PSTR "$54" * .PS "$54"
* .DA #0 * .DA #0
* >PSTR "$56" * .PS "$56"
* .DA #0 * .DA #0
* >PSTR "$58" * .PS "$58"
* .DA #0 * .DA #0
* >PSTR "$5A" * .PS "$5A"
* .DA #0 * .DA #0
* >PSTR "$5C" * .PS "$5C"
* .DA #0 * .DA #0
>PSTR "setattr" .PS "setattr"
.DA #SYS.SetAttr .DA #SYS.SetAttr
* >PSTR "mount" * .PS "mount"
* .DA #0 * .DA #0
* >PSTR "umount" * .PS "umount"
* .DA #0 * .DA #0
* >PSTR "online" * .PS "online"
* .DA #0 * .DA #0
* >PSTR "getstkobj" * .PS "getstkobj"
* .DA #0 * .DA #0
* >PSTR "shift" * .PS "shift"
* .DA #0 * .DA #0
* >PSTR "argv" * .PS "argv"
* .DA #0 * .DA #0
* >PSTR "argvDup" * .PS "argvDup"
* .DA #0 * .DA #0
* >PSTR "geterrmsg" * .PS "geterrmsg"
* .DA #0 * .DA #0
>PSTR "atof" .PS "atof"
.DA #SYS.AToF .DA #SYS.AToF
>PSTR "atoi" .PS "atoi"
.DA #SYS.AToI .DA #SYS.AToI
>PSTR "atol" .PS "atol"
.DA #SYS.AToL .DA #SYS.AToL
>PSTR "strtof" .PS "strtof"
.DA #SYS.StrToF .DA #SYS.StrToF
>PSTR "strtol" .PS "strtol"
.DA #SYS.StrToL .DA #SYS.StrToL
>PSTR "strtoul" .PS "strtoul"
.DA #SYS.StrToUL .DA #SYS.StrToUL
>PSTR "realpath" .PS "realpath"
.DA #SYS.RealPath .DA #SYS.RealPath
>PSTR "expand" .PS "expand"
.DA #SYS.Expand .DA #SYS.Expand
>PSTR "strlen" .PS "strlen"
.DA #SYS.StrLen .DA #SYS.StrLen
>PSTR "strcpy" .PS "strcpy"
.DA #SYS.StrCpy .DA #SYS.StrCpy
>PSTR "strcat" .PS "strcat"
.DA #SYS.StrCat .DA #SYS.StrCat
>PSTR "strdup" .PS "strdup"
.DA #SYS.StrDup .DA #SYS.StrDup
>PSTR "strupr" .PS "strupr"
.DA #SYS.StrUpr .DA #SYS.StrUpr
>PSTR "strlwr" .PS "strlwr"
.DA #SYS.StrLwr .DA #SYS.StrLwr
>PSTR "strcmp" .PS "strcmp"
.DA #SYS.StrCmp .DA #SYS.StrCmp
>PSTR "strcasecmp" .PS "strcasecmp"
.DA #SYS.StrCaseCmp .DA #SYS.StrCaseCmp
* >PSTR "getdevbyname" * .PS "getdevbyname"
* .DA #0 * .DA #0
* >PSTR "getdevstatus" * .PS "getdevstatus"
* .DA #0 * .DA #0
* >PSTR "mkdev" * .PS "mkdev"
* .DA #0 * .DA #0
* >PSTR "ioctl" * .PS "ioctl"
* .DA #0 * .DA #0
* >PSTR "loadlib" * .PS "loadlib"
* .DA #0 * .DA #0
* >PSTR "unloadlib" * .PS "unloadlib"
* .DA #0 * .DA #0
* >PSTR "loaddrv" * .PS "loaddrv"
* .DA #0 * .DA #0
* >PSTR "insdrv" * .PS "insdrv"
* .DA #0 * .DA #0
>PSTR "execl" .PS "execl"
.DA #SYS.ExecL .DA #SYS.ExecL
* >PSTR "execv" * .PS "execv"
* .DA #0 * .DA #0
>PSTR "fork" .PS "fork"
.DA #SYS.Fork .DA #SYS.Fork
>PSTR "kill" .PS "kill"
.DA #SYS.Kill .DA #SYS.Kill
* >PSTR "loadfile" * .PS "loadfile"
* .DA #0 * .DA #0
* >PSTR "loadtxtfile" * .PS "loadtxtfile"
* .DA #0 * .DA #0
* >PSTR "filesearch" * .PS "filesearch"
* .DA #0 * .DA #0
* >PSTR "getmemstat" * .PS "getmemstat"
* .DA #0 * .DA #0
* >PSTR "strvnew" * .PS "strvnew"
* .DA #0 * .DA #0
* >PSTR "strvset" * .PS "strvset"
* .DA #0 * .DA #0
* >PSTR "strvget" * .PS "strvget"
* .DA #0 * .DA #0
* >PSTR "strvfree" * .PS "strvfree"
* .DA #0 * .DA #0
>PSTR "putenv" .PS "putenv"
.DA #SYS.PutEnv .DA #SYS.PutEnv
>PSTR "setenv" .PS "setenv"
.DA #SYS.SetEnv .DA #SYS.SetEnv
>PSTR "getenv" .PS "getenv"
.DA #SYS.GetEnv .DA #SYS.GetEnv
>PSTR "unsetenv" .PS "unsetenv"
.DA #SYS.UnsetEnv .DA #SYS.UnsetEnv
>PSTR "time" .PS "time"
.DA #SYS.Time .DA #SYS.Time
>PSTR "strftime" .PS "strftime"
.DA #SYS.StrFTime .DA #SYS.StrFTime
* >PSTR "ptime2time" * .PS "ptime2time"
* .DA #0 * .DA #0
>PSTR "ctime2time" .PS "ctime2time"
.DA #SYS.CTime2Time .DA #SYS.CTime2Time
>PSTR "md5" .PS "md5"
.DA #SYS.MD5 .DA #SYS.MD5
>PSTR "md5init" .PS "md5init"
.DA #SYS.MD5Init .DA #SYS.MD5Init
>PSTR "md5update" .PS "md5update"
.DA #SYS.MD5Update .DA #SYS.MD5Update
>PSTR "md5finalize" .PS "md5finalize"
.DA #SYS.MD5Finalize .DA #SYS.MD5Finalize
>PSTR "getpwuid" .PS "getpwuid"
.DA #SYS.GetPWUID .DA #SYS.GetPWUID
>PSTR "getpwname" .PS "getpwname"
.DA #SYS.GetPWName .DA #SYS.GetPWName
>PSTR "putpw" .PS "putpw"
.DA #SYS.PutPW .DA #SYS.PutPW
>PSTR "getgrpgid" .PS "getgrpgid"
.DA #SYS.GetGRGID .DA #SYS.GetGRGID
>PSTR "getgrpname" .PS "getgrpname"
.DA #SYS.GetGRName .DA #SYS.GetGRName
>PSTR "putgr" .PS "putgr"
.DA #SYS.PutGR .DA #SYS.PutGR
* >PSTR "opensession" * .PS "opensession"
* .DA #0 * .DA #0
* >PSTR "closesession" * .PS "closesession"
* .DA #0 * .DA #0
* >PSTR "slistgetdata" * .PS "slistgetdata"
* .DA #0 * .DA #0
* >PSTR "slistadddata" * .PS "slistadddata"
* .DA #0 * .DA #0
* >PSTR "slistsetdata" * .PS "slistsetdata"
* .DA #0 * .DA #0
* >PSTR "slistgetbyid" * .PS "slistgetbyid"
* .DA #0 * .DA #0
* >PSTR "slistnewkey" * .PS "slistnewkey"
* .DA #0 * .DA #0
* >PSTR "slistlookup" * .PS "slistlookup"
* .DA #0 * .DA #0
* >PSTR "slistfree" * .PS "slistfree"
* .DA #0 * .DA #0
* >PSTR "slistnew" * .PS "slistnew"
* .DA #0 * .DA #0
>PSTR "malloc" .PS "malloc"
.DA #SYS.GetMem .DA #SYS.GetMem
>PSTR "realloc" .PS "realloc"
.DA #SYS.Realloc .DA #SYS.Realloc
* >PSTR "getmemptr" * .PS "getmemptr"
* .DA #0 * .DA #0
>PSTR "free" .PS "free"
.DA #SYS.FreeMem .DA #SYS.FreeMem
* >PSTR "newstkobj" * .PS "newstkobj"
* .DA #0 * .DA #0
* >PSTR "loadstkobj" * .PS "loadstkobj"
* .DA #0 * .DA #0
* >PSTR "getstkobjptr" * .PS "getstkobjptr"
* .DA #0 * .DA #0
* >PSTR "freestkobj" * .PS "freestkobj"
* .DA #0 * .DA #0
.DA #0 .DA #0
*-------------------------------------- *--------------------------------------
CC.FPUCALL >PSTR "pwr" CC.FPUCALL .PS "pwr"
.DA #FPU.PWR .DA #FPU.PWR
>PSTR "log" .PS "log"
.DA #FPU.LOG .DA #FPU.LOG
>PSTR "sqr" .PS "sqr"
.DA #FPU.SQR .DA #FPU.SQR
>PSTR "exp" .PS "exp"
.DA #FPU.EXP .DA #FPU.EXP
>PSTR "cos" .PS "cos"
.DA #FPU.COS .DA #FPU.COS
>PSTR "sin" .PS "sin"
.DA #FPU.SIN .DA #FPU.SIN
>PSTR "tan" .PS "tan"
.DA #FPU.TAN .DA #FPU.TAN
>PSTR "atan" .PS "atan"
.DA #FPU.ATAN .DA #FPU.ATAN
>PSTR "lrintf" .PS "lrintf"
.DA #FPU.QINT .DA #FPU.QINT
.DA #0 .DA #0
*-------------------------------------- *--------------------------------------

View File

@ -446,13 +446,13 @@ CS.END
*-------------------------------------- *--------------------------------------
* Initialized DATA * Initialized DATA
*-------------------------------------- *--------------------------------------
MSG.GREETINGS .AZ "\r\nCSH-Shell %d.%d\r\n\r\n" MSG.GREETINGS .CZ "\r\nCSH-Shell %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : CSH <option> file\r\n" MSG.USAGE .CS "Usage : CSH <option> file\r\n"
.AS " -D : Debug Mode\r\n" .CS " -D : Debug Mode\r\n"
.AS " -T : Trace On" .CS " -T : Trace On"
MSG.ECHOCRLF .AZ "\r\n" MSG.ECHOCRLF .CZ "\r\n"
MSG.DEBUG .AZ "pStack=%H\r\n" MSG.DEBUG .CZ "pStack=%H\r\n"
MSG.ERR .AZ "-^\r\nLine #%D:" MSG.ERR .CZ "-^\r\nLine #%D:"
*-------------------------------------- *--------------------------------------
ENV.INCLUDE .AZ "INCLUDE" ENV.INCLUDE .AZ "INCLUDE"
*-------------------------------------- *--------------------------------------
@ -465,30 +465,30 @@ CSH.OPChars.Cnt .EQ *-CSH.OPChars
*-------------------------------------- *--------------------------------------
* Pre Operators: + - ! ~ ++ -- * Pre Operators: + - ! ~ ++ --
*-------------------------------------- *--------------------------------------
CSH.PREOPS >PSTR "+" CSH.PREOPS .PS "+"
>PSTR "-" .PS "-"
>PSTR "!" .PS "!"
>PSTR "~" .PS "~"
*-------------------------------------- *--------------------------------------
* Post Operators: ++ -- * Post Operators: ++ --
*-------------------------------------- *--------------------------------------
CSH.POSTOPS >PSTR "++" CSH.POSTOPS .PS "++"
>PSTR "--" .PS "--"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*-------------------------------------- *--------------------------------------
CSH.AOPS >PSTR "=" CSH.AOPS .PS "="
>PSTR "+=" .PS "+="
>PSTR "-=" .PS "-="
>PSTR "*=" .PS "*="
>PSTR "/=" .PS "/="
>PSTR "%=" .PS "%="
>PSTR "<<=" .PS "<<="
>PSTR ">>=" .PS ">>="
>PSTR "&=" .PS "&="
>PSTR "^=" .PS "^="
>PSTR "!=" .PS "!="
.HS 00 .HS 00
*-- Binary ---- H to L precedence ----- *-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / % * Arithmetic Operators: * / %
@ -498,289 +498,289 @@ CSH.AOPS >PSTR "="
* Bitwise Operators: & | ^ ~ * Bitwise Operators: & | ^ ~
* Logical Operators: && || * Logical Operators: && ||
*-------------------------------------- *--------------------------------------
CSH.BOPS >PSTR "*" CSH.BOPS .PS "*"
>PSTR "/" .PS "/"
>PSTR "%" .PS "%"
>PSTR "+" .PS "+"
>PSTR "-" .PS "-"
>PSTR "<<" .PS "<<"
>PSTR ">>" .PS ">>"
>PSTR "<" .PS "<"
>PSTR "<=" .PS "<="
>PSTR ">" .PS ">"
>PSTR ">=" .PS ">="
>PSTR "==" .PS "=="
>PSTR "!=" .PS "!="
>PSTR "&" .PS "&"
>PSTR "|" .PS "|"
>PSTR "^" .PS "^"
>PSTR "&&" .PS "&&"
>PSTR "||" .PS "||"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Reserved Directives: * Reserved Directives:
*-------------------------------------- *--------------------------------------
CSH.DIRS >PSTR "define" CSH.DIRS .PS "define"
>PSTR "include" .PS "include"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Reserved Keywords: * Reserved Keywords:
*-------------------------------------- *--------------------------------------
CSH.KW >PSTR "if" CSH.KW .PS "if"
>PSTR "while" .PS "while"
>PSTR "else" .PS "else"
>PSTR "do" .PS "do"
>PSTR "for" .PS "for"
>PSTR "switch" .PS "switch"
>PSTR "case" .PS "case"
>PSTR "break" .PS "break"
>PSTR "continue" .PS "continue"
>PSTR "sizeof" .PS "sizeof"
>PSTR "typedef" .PS "typedef"
>PSTR "struct" .PS "struct"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
* Type Declaration * Type Declaration
*-------------------------------------- *--------------------------------------
CSH.TMODS >PSTR "const" ALL CSH.TMODS .PS "const" ALL
CSH.TMODS2 >PSTR "signed" char,int,long CSH.TMODS2 .PS "signed" char,int,long
>PSTR "unsigned" char,int,long .PS "unsigned" char,int,long
>PSTR "short" int .PS "short" int
CSH.TYPES >PSTR "void" CSH.TYPES .PS "void"
>PSTR "char" .PS "char"
>PSTR "int" .PS "int"
>PSTR "long" .PS "long"
>PSTR "float" .PS "float"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CSH.Type2FPU .DA #FPU.wMUL,#FPU.iMUL,#FPU.uMUL,#FPU.lMUL,FPU.fMUL CSH.Type2FPU .DA #FPU.wMUL,#FPU.iMUL,#FPU.uMUL,#FPU.lMUL,FPU.fMUL
*-------------------------------------- *--------------------------------------
CSH.FTYPES >PSTR "fastcall" CSH.FTYPES .PS "fastcall"
* .HS 00 * .HS 00
*-------------------------------------- *--------------------------------------
CSH.TYPESIZE .HS 0001010202040405 CSH.TYPESIZE .HS 0001010202040405
*-------------------------------------- *--------------------------------------
CSH.LIBC >PSTR "chtyp" CSH.LIBC .PS "chtyp"
>PSTR "chmod" .PS "chmod"
>PSTR "fstat" .PS "fstat"
>PSTR "stat" .PS "stat"
>PSTR "mkdir" .PS "mkdir"
>PSTR "mknod" .PS "mknod"
>PSTR "mkfifo" .PS "mkfifo"
>PSTR "pipe" .PS "pipe"
>PSTR "opendir" .PS "opendir"
>PSTR "readdir" .PS "readdir"
>PSTR "closedir" .PS "closedir"
>PSTR "open" .PS "open"
>PSTR "close" .PS "close"
>PSTR "read" .PS "read"
>PSTR "write" .PS "write"
>PSTR "chown" .PS "chown"
>PSTR "fputc" .PS "fputc"
>PSTR "putchar" .PS "putchar"
>PSTR "getc" .PS "getc"
>PSTR "getchar" .PS "getchar"
>PSTR "fputs" .PS "fputs"
>PSTR "puts" .PS "puts"
>PSTR "fgets" .PS "fgets"
>PSTR "ungetc" .PS "ungetc"
>PSTR "fopen" .PS "fopen"
>PSTR "fclose" .PS "fclose"
>PSTR "fread" .PS "fread"
>PSTR "fwrite" .PS "fwrite"
>PSTR "fflush" .PS "fflush"
>PSTR "fseek" .PS "fseek"
>PSTR "ftell" .PS "ftell"
>PSTR "feof" .PS "feof"
>PSTR "remove" .PS "remove"
>PSTR "rename" .PS "rename"
>PSTR "printf" .PS "printf"
>PSTR "fprintf" .PS "fprintf"
>PSTR "sprintf" .PS "sprintf"
>PSTR "scanf" .PS "scanf"
>PSTR "fscanf" .PS "fscanf"
>PSTR "sscanf" .PS "sscanf"
>PSTR "$50" .PS "$50"
>PSTR "$52" .PS "$52"
>PSTR "$54" .PS "$54"
>PSTR "$56" .PS "$56"
>PSTR "$58" .PS "$58"
>PSTR "$5A" .PS "$5A"
>PSTR "$5C" .PS "$5C"
>PSTR "setattr" .PS "setattr"
>PSTR "mount" .PS "mount"
>PSTR "umount" .PS "umount"
>PSTR "online" .PS "online"
>PSTR "getstkobj" .PS "getstkobj"
>PSTR "shift" .PS "shift"
>PSTR "argv" .PS "argv"
>PSTR "argvDup" .PS "argvDup"
>PSTR "geterrmsg" .PS "geterrmsg"
>PSTR "atof" .PS "atof"
>PSTR "atoi" .PS "atoi"
>PSTR "atol" .PS "atol"
>PSTR "strtof" .PS "strtof"
>PSTR "strtol" .PS "strtol"
>PSTR "strtoul" .PS "strtoul"
>PSTR "realpath" .PS "realpath"
>PSTR "expand" .PS "expand"
>PSTR "strlen" .PS "strlen"
>PSTR "strcpy" .PS "strcpy"
>PSTR "strcat" .PS "strcat"
>PSTR "strdup" .PS "strdup"
>PSTR "strupr" .PS "strupr"
>PSTR "strlwr" .PS "strlwr"
>PSTR "strcmp" .PS "strcmp"
>PSTR "strcasecmp" .PS "strcasecmp"
>PSTR "getdevbyname" .PS "getdevbyname"
>PSTR "getdevstatus" .PS "getdevstatus"
>PSTR "mkdev" .PS "mkdev"
>PSTR "ioctl" .PS "ioctl"
>PSTR "loadlib" .PS "loadlib"
>PSTR "unloadlib" .PS "unloadlib"
>PSTR "loaddrv" .PS "loaddrv"
>PSTR "insdrv" .PS "insdrv"
>PSTR "execl" .PS "execl"
>PSTR "execv" .PS "execv"
>PSTR "fork" .PS "fork"
>PSTR "kill" .PS "kill"
>PSTR "loadfile" .PS "loadfile"
>PSTR "loadtxtfile" .PS "loadtxtfile"
>PSTR "filesearch" .PS "filesearch"
>PSTR "getmemstat" .PS "getmemstat"
>PSTR "strvnew" .PS "strvnew"
>PSTR "strvset" .PS "strvset"
>PSTR "strvget" .PS "strvget"
>PSTR "strvfree" .PS "strvfree"
>PSTR "putenv" .PS "putenv"
>PSTR "setenv" .PS "setenv"
>PSTR "getenv" .PS "getenv"
>PSTR "unsetenv" .PS "unsetenv"
>PSTR "time" .PS "time"
>PSTR "strftime" .PS "strftime"
>PSTR "ctime2time" .PS "ctime2time"
>PSTR "md5" .PS "md5"
>PSTR "md5init" .PS "md5init"
>PSTR "md5update" .PS "md5update"
>PSTR "md5finalize" .PS "md5finalize"
>PSTR "getpwuid" .PS "getpwuid"
>PSTR "getpwname" .PS "getpwname"
>PSTR "putpw" .PS "putpw"
>PSTR "getgrpgid" .PS "getgrpgid"
>PSTR "getgrpname" .PS "getgrpname"
>PSTR "putgr" .PS "putgr"
>PSTR "opensession" .PS "opensession"
>PSTR "closesession" .PS "closesession"
>PSTR "slistgetdata" .PS "slistgetdata"
>PSTR "slistadddata" .PS "slistadddata"
>PSTR "slistsetdata" .PS "slistsetdata"
>PSTR "slistgetbyid" .PS "slistgetbyid"
>PSTR "slistnewkey" .PS "slistnewkey"
>PSTR "slistlookup" .PS "slistlookup"
>PSTR "slistfree" .PS "slistfree"
>PSTR "slistnew" .PS "slistnew"
>PSTR "malloc" .PS "malloc"
>PSTR "realloc" .PS "realloc"
>PSTR "getmemptr" .PS "getmemptr"
>PSTR "free" .PS "free"
>PSTR "newstkobj" .PS "newstkobj"
>PSTR "loadstkobj" .PS "loadstkobj"
>PSTR "getstkobjptr" .PS "getstkobjptr"
>PSTR "freestkobj" .PS "freestkobj"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CSH.FN CSH.FN
* float pwr (float x, float y); * float pwr (float x, float y);
>PSTR "pwr" .PS "pwr"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
* float cos (float x); * float cos (float x);
>PSTR "log" .PS "log"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "sqr" .PS "sqr"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "exp" .PS "exp"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "cos" .PS "cos"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "sin" .PS "sin"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "tan" .PS "tan"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
>PSTR "atan" .PS "atan"
.DA #CSH.T.FLOAT,#0 returned value .DA #CSH.T.FLOAT,#0 returned value
.DA #CSH.T.FLOAT,#0 .DA #CSH.T.FLOAT,#0
.DA #0 .DA #0
* char getchar ( void ); * char getchar ( void );
>PSTR "getchar" .PS "getchar"
.DA #CSH.T.UCHAR,#0 returned value .DA #CSH.T.UCHAR,#0 returned value
.DA #0 .DA #0
* int puts ( const char * str ); * int puts ( const char * str );
>PSTR "puts" .PS "puts"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #0 .DA #0
* int execl(const char* cmdline, short int flags); * int execl(const char* cmdline, short int flags);
>PSTR "execl" .PS "execl"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.UCHAR,#0 .DA #CSH.T.UCHAR,#0
.DA #0 .DA #0
* int printf ( const char * format, ... ); * int printf ( const char * format, ... );
>PSTR "printf" .PS "printf"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.VARIADIC,#0 .DA #CSH.T.VARIADIC,#0
.DA #0 .DA #0
* int putenv(const char *string); * int putenv(const char *string);
>PSTR "putenv" .PS "putenv"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #0 .DA #0
* int setenv(const char *name, const char *value); * int setenv(const char *name, const char *value);
>PSTR "setenv" .PS "setenv"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #0 .DA #0
* char *getenv(const char *name, char *value); * char *getenv(const char *name, char *value);
>PSTR "getenv" .PS "getenv"
.DA #CSH.T.UCHAR,#CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.POINTER
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.UCHAR,#CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.POINTER
.DA #0 .DA #0
* int unsetenv(const char *name); * int unsetenv(const char *name);
>PSTR "unsetenv" .PS "unsetenv"
.DA #CSH.T.SINT,#0 returned value .DA #CSH.T.SINT,#0 returned value
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #0 .DA #0
* void md5 (const char* str, char* digest); * void md5 (const char* str, char* digest);
>PSTR "md5" .PS "md5"
.DA #CSH.T.VOID,#0 .DA #CSH.T.VOID,#0
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.UCHAR,#CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.POINTER
.DA #0 .DA #0
* void * malloc ( int size ); * void * malloc ( int size );
>PSTR "malloc" .PS "malloc"
.DA #CSH.T.VOID,#CSH.Q.POINTER returned value .DA #CSH.T.VOID,#CSH.Q.POINTER returned value
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #0 .DA #0
* short int fopen(const char*,short int,short int,int); * short int fopen(const char*,short int,short int,int);
>PSTR "fopen" .PS "fopen"
.DA #CSH.T.SCHAR,#0 .DA #CSH.T.SCHAR,#0
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
.DA #CSH.T.SCHAR,#0 .DA #CSH.T.SCHAR,#0
@ -788,19 +788,19 @@ CSH.FN
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #0 .DA #0
* int fclose(short int); * int fclose(short int);
>PSTR "fclose" .PS "fclose"
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #CSH.T.SCHAR,#0 .DA #CSH.T.SCHAR,#0
.DA #0 .DA #0
* int fread (short int,void*,int); * int fread (short int,void*,int);
>PSTR "fread" .PS "fread"
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #CSH.T.SCHAR,#0 .DA #CSH.T.SCHAR,#0
.DA #CSH.T.VOID,#CSH.Q.POINTER .DA #CSH.T.VOID,#CSH.Q.POINTER
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #0 .DA #0
* int fwrite (short int,const void*,int); * int fwrite (short int,const void*,int);
>PSTR "fwrite" .PS "fwrite"
.DA #CSH.T.SINT,#0 .DA #CSH.T.SINT,#0
.DA #CSH.T.SCHAR,#0 .DA #CSH.T.SCHAR,#0
.DA #CSH.T.VOID,#CSH.Q.CONST+CSH.Q.POINTER .DA #CSH.T.VOID,#CSH.Q.CONST+CSH.Q.POINTER

View File

@ -1,10 +1,10 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
IO.D2.SeekTimeR .EQ 55 LIBBLKDEV Recalibration IO.D2.SeekTimeR .EQ 60 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 55 LIBBLKDEV Track Formatter IO.D2.SeekTimeF .EQ 60 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 55 LIBBLKDEV Boot Block IO.D2.SeekTimeB .EQ 60 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 25 ProDOS.FX initial IO.D2.SeekTimeP .EQ 30 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*-------------------------------------- *--------------------------------------
IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0Off .EQ $C080

View File

@ -1,6 +1,7 @@
NEW NEW
AUTO 3,1 AUTO 3,1
typedef int mode_t;
typedef short int dev_t; typedef short int dev_t;
MAN MAN

View File

@ -82,50 +82,138 @@ PSTA JSR EXPR.DEFINED GET EXPR VALUE
ORA EXP.VALUE+3 ORA EXP.VALUE+3
BEQ NEW.TARGET BEQ NEW.TARGET
JMP RAER JMP RAER
*-------------------------------- *--------------------------------------
DIR1.PS jsr GNNB
bcs .9
sta DLIM SAVE DELIMITER
ldx #$ff
ldy CHAR.PNTR
.1 inx
lda WBUF,Y
and #$7F
beq .9
iny
cmp DLIM
bne .1
txa
jsr EMIT
.2 jsr GNC
jsr EMIT
dex
bne .2
clc
rts
.9 jmp ERBA2
*--------------------------------------
DIR1.EscChars .AS "abefnrtv"
.HS 5C27223F \'"?
DIR1.EscChars.L .EQ *-DIR1.EscChars
DIR1.EscCodes .HS 07081B0C0A0D090B
.HS 5C27223F
*--------------------------------------
DIR1.CZ jsr DIR1.CS
jmp EMIT.ZERO
DIR1.CS lda #0
sec
jmp DIR1.String
*--------------------------------------
* .AT -- ASCII STRING WITH LAST BYTE FLAGGED * .AT -- ASCII STRING WITH LAST BYTE FLAGGED
* .AS -- ASCII STRING WITH ALL BYTES SAME * .AS -- ASCII STRING WITH ALL BYTES SAME
* .AZ -- Same as .AS, but with 00 terminator byte. * .AZ -- Same as .AS, but with 00 terminator byte.
*-------------------------------- *--------------------------------------
PSAZ JSR PSAS PSAZ jsr PSAS
JMP EMIT.ZERO jmp EMIT.ZERO
PSAT LDA #$80 LAST BYTE HAS OPPOSITE BIT 7
.HS 2C ...SKIP OVER 2 BYTES PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7
PSAS LDA #0 ALL BYTES GET SAME BIT 7 .HS 2C ...SKIP OVER 2 BYTES
STA AT.HIBIT
JSR GNNB Scan to next non-blank PSAS lda #0 ALL BYTES GET SAME BIT 7
BCS ERBA2 END OF LINE clc
DEC CHAR.PNTR BACK UP
.1 JSR TRY.HEX.STRING DIR1.String sta AT.HIBIT
BEQ .5 ...END OF LINE ror BYTE C String Flag
LDY #0
STY AS.HIBIT ...assume hibit is 0 jsr GNNB Scan to next non-blank
CMP #'-' 1ST NON-BLANK A MINUS? bcs .9 END OF LINE
BNE .15 ...no, hibit is 0
ROR AS.HIBIT ...yes, hibit is 1 dec CHAR.PNTR BACK UP
JSR GNC.UC
.15 STA DLIM SAVE DELIMITER .1 jsr TRY.HEX.STRING
JSR GNC.UC GET NEXT CHAR beq .5 ...END OF LINE
BCS ERBA2 END OF LINE IS BAD NEWS
CMP DLIM CHK IF DELIMITER ldy #0
BEQ .4 YES, NO STRING IN BETWEEN sty AS.HIBIT ...assume hibit is 0
.2 JSR GNC.UC GET NEXT CHAR cmp #'-' 1ST NON-BLANK A MINUS?
BCS ERBA2 END OF LINE IS BAD NEWS bne .15 ...no, hibit is 0
CMP DLIM CHK IF DELIMITER
BEQ .3 YES, FINISH UP AND RETURN ror AS.HIBIT ...yes, hibit is 1
LDA WBUF-2,Y ...NO, GET PREVIOUS CHAR jsr GNC.UC
ORA AS.HIBIT MERGE WITH TOP BIT
JSR EMIT .15 sta DLIM SAVE DELIMITER
JMP .2 GO FOR ANOTHER ONE jsr GNC.UC GET NEXT CHAR
.3 LDA WBUF-2,Y GET PREVIOUS CHAR .9 bcs ERBA2 END OF LINE IS BAD NEWS
ORA AS.HIBIT MERGE WITH SELECTED BIT 7
EOR AT.HIBIT TOGGLE BIT 7 IF IN .AT cmp DLIM CHK IF DELIMITER
JSR EMIT EMIT THE BYTE beq .4 YES, NO STRING IN BETWEEN
.4 JSR GNC CHECK IF MORE IN LIST
BEQ .5 .2 jsr GNC.UC GET NEXT CHAR
CMP #',' bcs ERBA2 END OF LINE IS BAD NEWS
BEQ .1
.5 RTS cmp DLIM CHK IF DELIMITER
beq .3 YES, FINISH UP AND RETURN
lda WBUF-2,Y ...NO, GET PREVIOUS CHAR
bit BYTE
bpl .27
cmp #'\' "\?" ?
bne .27
jsr GNC.UC GET NEXT CHAR
bcs ERBA2 END OF LINE IS BAD NEWS
lda WBUF-2,Y get "?"
ldx #DIR1.EscChars.L-1
.20 cmp DIR1.EscChars,x
beq .21
dex
bpl .20
bmi ERBA2
.21 lda DIR1.EscCodes,x
ldx WBUF-1,Y
cpx DLIM
beq .30
.27 ora AS.HIBIT MERGE WITH TOP BIT
jsr EMIT
jmp .2 GO FOR ANOTHER ONE
.3 lda WBUF-2,Y GET PREVIOUS CHAR
.30 ora AS.HIBIT MERGE WITH SELECTED BIT 7
eor AT.HIBIT TOGGLE BIT 7 IF IN .AT
jsr EMIT EMIT THE BYTE
.4 jsr GNC CHECK IF MORE IN LIST
beq .5
cmp #','
beq .1
.5 rts
*--------------------------------- *---------------------------------
* .HS -- HEX STRING * .HS -- HEX STRING
*--------------------------------- *---------------------------------

View File

@ -12,34 +12,36 @@ DIR. .SE "]1"
.DA #"]2"-$40,]3-1 .]1]2 .DA #"]2"-$40,]3-1 .]1]2
.EM .EM
*-------------------------------- *--------------------------------
OPTBL.DIR OPTBL.DIR >DIR A,C,DIR.AC ASCII STRING COMPRESSED
>DIR A,C,DIR.AC ASCII STRING COMPRESSED >DIR A,S,PSAS ASCII STRING
>DIR A,S,PSAS ASCII STRING >DIR A,T,PSAT ASCII STRING WITH LAST BYTE
>DIR A,T,PSAT ASCII STRING WITH LAST BYTE >DIR A,Z,PSAZ ASCII STRING WITH ZERO END
>DIR A,Z,PSAZ ASCII STRING WITH ZERO END >DIR B,S,PSBS BLOCK STORAGE
>DIR B,S,PSBS BLOCK STORAGE >DIR C,S,DIR1.CS C STRING
>DIR D,A,PSDA DATA >DIR C,Z,DIR1.CZ C STRING WITH ZERO END
>DIR D,O,PSDO DO >DIR D,A,PSDA DATA
>DIR D,U,D.DUMMY DUMMY >DIR D,O,PSDO DO
>DIR E,D,D.END.DUMMY >DIR D,U,D.DUMMY DUMMY
>DIR E,L,PSEL ELSE >DIR E,D,D.END.DUMMY
>DIR E,N,PSEN END OF SOURCE >DIR E,L,PSEL ELSE
>DIR E,P,D.END.PHASE >DIR E,N,PSEN END OF SOURCE
>DIR E,Q,PSEQ EQUATE >DIR E,P,D.END.PHASE
>DIR F,I,PSFI FIN >DIR E,Q,PSEQ EQUATE
>DIR H,S,PSHS HEX STRING >DIR F,I,PSFI FIN
>DIR I,N,PSIN INCLUDE >DIR H,S,PSHS HEX STRING
>DIR L,I,PSLI LIST ON,/ OFF >DIR I,N,PSIN INCLUDE
>DIR M,A,PSMA MACRO >DIR L,I,PSLI LIST ON,/ OFF
>DIR O,P,PSOP OPCODE TABLE SELECT >DIR M,A,PSMA MACRO
>DIR O,R,PSOR ORIGIN >DIR O,P,PSOP OPCODE TABLE SELECT
>DIR P,G,PSPG PAGE EJECT >DIR O,R,PSOR ORIGIN
>DIR P,H,D.PHASE PHASE >DIR P,G,PSPG PAGE EJECT
>DIR T,A,PSTA TARGET ADDRESS >DIR P,H,D.PHASE PHASE
>DIR T,F,PSTF TARGET FILE >DIR P,S,DIR1.PS PASCAL STRING
>DIR T,I,PSTI TITLE >DIR T,A,PSTA TARGET ADDRESS
>DIR U,S,PSUSER USER DIRECTIVE >DIR T,F,PSTF TARGET FILE
.HS 41 <<<TERMINATOR>>> >DIR T,I,PSTI TITLE
>DIR U,S,PSUSER USER DIRECTIVE
.HS 41 <<<TERMINATOR>>>
*-------------------------------- *--------------------------------
.ELSE .ELSE
*-------------------------------- *--------------------------------

View File

@ -4,8 +4,8 @@ NEW
.OR $2000 .OR $2000
.TF SCMASM.SYSTEM,TSYS .TF SCMASM.SYSTEM,TSYS
*-------------------------------------- *--------------------------------------
VERSION.HI .EQ 3 VERSION 3.0 VERSION.HI .EQ 3 VERSION 3.1
VERSION.LO .EQ 1 VERSION.LO .EQ 1 new CS,CZ directives
*-------------------------------- *--------------------------------
AUXMEM .EQ 1 ...USE AUXMEM FOR SYMBOL TABLE AUXMEM .EQ 1 ...USE AUXMEM FOR SYMBOL TABLE
ROCKWELL .EQ 1 0 = LEAVE OUT ROCKWELL OPTION ROCKWELL .EQ 1 0 = LEAVE OUT ROCKWELL OPTION

View File

@ -230,4 +230,4 @@ X.DigitCount .BS 1
X.DigitBuffer .BS 6 X.DigitBuffer .BS 6
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/SHARED/X.PRINTF.S SAVE usr/src/shared/x.printf.s

View File

@ -51,6 +51,9 @@ VEDRIVE.ReadConf
.DA MLIREAD.P .DA MLIREAD.P
bcs .8 bcs .8
ldx MLIREAD.P+6
stz CONF.LBUF,x
jsr VEDRIVE.CONF.L jsr VEDRIVE.CONF.L
bcc .2 bcc .2
@ -84,7 +87,11 @@ VEDRIVE.ReadConf
plp plp
rts rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CONF.L lda CONF.LBUF VEDRIVE.CONF.L >LDYAI CONF.LBUF
>STYA ZPPtr1
jsr PrintFYA
lda (ZPPtr1)
cmp #13 CR cmp #13 CR
beq .8 beq .8
@ -92,101 +99,31 @@ VEDRIVE.CONF.L lda CONF.LBUF
cmp #'#' comment cmp #'#' comment
beq .8 beq .8
lda #CONF.LBUF >LDYAI CONF.KW
sta ZPPtr1
lda /CONF.LBUF
sta ZPPtr1+1
ldy #CONF.KW
lda /CONF.KW
jsr VEDRIVE.CONF.KW jsr VEDRIVE.CONF.KW
bcs .9 bcs .9
.1 jsr VEDRIVE.GetNextCharPtr1
bcs .9
cmp #32
beq .1
ldx idx ldx idx
jmp (.5,x) jmp (.5,x)
.5 .DA VEDRIVE.CONF.KW.NIC .5 .DA VEDRIVE.CONF.KW.NIC
.DA VEDRIVE.CONF.KW.SLOT .DA VEDRIVE.CONF.KW.SLOT
.DA VEDRIVE.CONF.KW.MAC
.DA VEDRIVE.CONF.KW.ADDRESS .DA VEDRIVE.CONF.KW.ADDRESS
.DA VEDRIVE.CONF.KW.MASK .DA VEDRIVE.CONF.KW.MASK
.DA VEDRIVE.CONF.KW.GATEWAY .DA VEDRIVE.CONF.KW.GATEWAY
.DA VEDRIVE.CONF.KW.SERVER .DA VEDRIVE.CONF.KW.SERVER
.DA VEDRIVE.CONF.KW.PORT .DA VEDRIVE.CONF.KW.PORT
.DA VEDRIVE.CONF.KW.SIZE1
.DA VEDRIVE.CONF.KW.SIZE2
.8 clc .8 clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.CONF.KW.NIC
jsr VEDRIVE.CONF.SKIPSP
bcs .9
ldy #CONF.KW.NIC
lda /CONF.KW.NIC
jsr VEDRIVE.CONF.KW
bcs .9
lda idx
sta CONF.NIC
clc
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.SLOT
jsr VEDRIVE.CONF.SKIPSP
bcs .9
lda (ZPPtr1)
cmp #'1'
bcc .9
cmp #'8'
bcs .9
and #$0F
sta CONF.SLOT
clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.CONF.KW.ADDRESS
ldx #CONF.ADDRESS-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.MASK
ldx #CONF.MASK-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.GATEWAY
ldx #CONF.GATEWAY-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.SERVER
ldx #CONF.SERVER-CONF.IPCFG
jsr VEDRIVE.CONF.SKIPSP
bcs .9
jsr VEDRIVE.CONF.GetIPatX
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.PORT
jsr VEDRIVE.CONF.SKIPSP
bcs .9
jsr VEDRIVE.CONF.GetInt
bcs .9
lda int
sta CONF.PORT+1
lda int+1
sta CONF.PORT
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CONF.KW sty ZPPtr2 VEDRIVE.CONF.KW sty ZPPtr2
@ -247,30 +184,70 @@ VEDRIVE.CONF.KW sty ZPPtr2
sec sec
rts rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CONF.SKIPSP VEDRIVE.CONF.KW.NIC
lda (ZPPtr1) >LDYAI CONF.KW.NIC
cmp #32 jsr VEDRIVE.CONF.KW
bne .9 bcs .9
bra .3 lda idx
sta CONF.NIC
.1 lda (ZPPtr1)
cmp #13
beq .9
.2 cmp #32
bne .8
.3 inc ZPPtr1
bne .1
inc ZPPtr1+1
bra .1
.8 clc
clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CONF.KW.SLOT
lda (ZPPtr1)
cmp #'1'
bcc .9
cmp #'8'
bcs .9
and #$0F
sta CONF.SLOT
clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.CONF.KW.MAC
ldy #6
ldx #0
.1 jsr VEDRIVE.CONF.GetHexByte
bcs .9
sta CONF.SRCMAC,x
inx
dey
beq .9 CC
jsr VEDRIVE.GetNextCharPtr1
bcs .9
cmp #':'
sec
bne .9
jsr VEDRIVE.GetNextCharPtr1
bcc .1
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.ADDRESS
ldx #CONF.ADDRESS-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.MASK
ldx #CONF.MASK-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.GATEWAY
ldx #CONF.GATEWAY-CONF.IPCFG
.HS 2C BIT ABS
VEDRIVE.CONF.KW.SERVER
ldx #CONF.SERVER-CONF.IPCFG
VEDRIVE.CONF.GetIPatX VEDRIVE.CONF.GetIPatX
jsr VEDRIVE.CONF.GetShort jsr VEDRIVE.CONF.GetShort
bcs .9 bcs .9
@ -282,16 +259,87 @@ VEDRIVE.CONF.GetIPatX
dey dey
beq .9 CC beq .9 CC
jsr VEDRIVE.GetCharPtr1 lda (ZPPtr1)
bcs .9 cmp #13
beq .9
cmp #'.' cmp #'.'
sec sec
bne .9 bne .9
jsr VEDRIVE.GetNextCharPtr1
bcs .9
jsr VEDRIVE.CONF.GetShort jsr VEDRIVE.CONF.GetShort
bcc .1 bcc .1
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.PORT
jsr VEDRIVE.CONF.GetInt
bcs .9
lda int
sta CONF.PORT+1
lda int+1
sta CONF.PORT
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.SIZE1
stz bD1Size
jsr VEDRIVE.CONF.GetInt
bcs .9
lda int
sta CONF.D1TOTALBLK
lda int+1
sta CONF.D1TOTALBLK+1
dec bD1Size
.9 rts
*--------------------------------------
VEDRIVE.CONF.KW.SIZE2
stz bD2Size
jsr VEDRIVE.CONF.GetInt
bcs .9
lda int
sta CONF.D2TOTALBLK
lda int+1
sta CONF.D2TOTALBLK+1
dec bD2Size
.9 rts
*--------------------------------------
VEDRIVE.CONF.GetHexByte
jsr VEDRIVE.GetCharPtr1
bcs .9
jsr VEDRIVE.IsHexDigit
bcs .9
asl
asl
asl
asl
sta int
jsr VEDRIVE.GetNextCharPtr1
bcs .9
jsr VEDRIVE.IsHexDigit
bcs .9
ora int
* clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CONF.GetShort VEDRIVE.CONF.GetShort
@ -310,21 +358,14 @@ VEDRIVE.CONF.GetShort
VEDRIVE.CONF.GetInt VEDRIVE.CONF.GetInt
stz int stz int
stz int+1 stz int+1
jsr VEDRIVE.GetCharPtr1
bcs .9
.1 lda (ZPPtr1) jsr VEDRIVE.IsDigit
cmp #'0' bcs .9
bcc .8
cmp #'9'+1 .1 pha
bcs .8
inc ZPPtr1
bne .2
inc ZPPtr1+1
.2 and #$0F
pha
lda int+1 lda int+1
pha pha
@ -352,27 +393,73 @@ VEDRIVE.CONF.GetInt
clc clc
adc int adc int
sta int sta int
bcc .1 bcc .2
inc int+1 inc int+1
bra .1
.2 jsr VEDRIVE.GetNextCharPtr1
bcs .8
jsr VEDRIVE.IsDigit
bcc .1
.8 clc .8 clc
rts .9 rts
*--------------------------------------
VEDRIVE.GetNextCharPtr1
inc ZPPtr1
bne VEDRIVE.GetCharPtr1
inc ZPPtr1+1
*-------------------------------------- *--------------------------------------
VEDRIVE.GetCharPtr1 VEDRIVE.GetCharPtr1
lda (ZPPtr1) lda (ZPPtr1)
cmp #13 cmp #13
beq .9 beq .9
inc ZPPtr1
bne .8
inc ZPPtr1+1
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
VEDRIVE.IsHexDigit
jsr VEDRIVE.IsDigit
bcc .8
cmp #'A'
bcc .9
cmp #'F'+1
bcc .1
cmp #'a'
bcc .9
cmp #'f'+1
bcs .99
eor #$20
.1
* clc
sbc #'A'-11 cc so A->10 (11-CC)
clc
.8 rts
.9 sec
.99 rts
*--------------------------------------
VEDRIVE.IsDigit cmp #'0'
bcc .9
cmp #'9'+1
bcs .99
and #$0F
* clc
rts
.9 sec
.99 rts
*--------------------------------------
MAN MAN
SAVE usr/src/sys/pm.vedrive.s.cf SAVE usr/src/sys/pm.vedrive.s.cf
LOAD usr/src/sys/pm.vedrive.s LOAD usr/src/sys/pm.vedrive.s

View File

@ -1,13 +1,108 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
GS.Init sec GS.Init lda CONF.SLOT
asl
asl
asl
asl
sta Slotn0
tax
lda #L91C96.0.TCR.FDSE+L91C96.0.TCR.FUDPLX+L91C96.0.TCR.PADEN+L91C96.0.TCR.TXENA
sta L91C96.0.TCR,x
lda /L91C96.0.TCR.FDSE+L91C96.0.TCR.FUDPLX+L91C96.0.TCR.PADEN+L91C96.0.TCR.TXENA
sta L91C96.0.TCR+1,x
lda #L91C96.0.RCR.NOCRC+L91C96.0.RCR.RXENA+L91C96.0.RCR.ALLMUL
sta L91C96.0.RCR,x
lda /L91C96.0.RCR.NOCRC+L91C96.0.RCR.RXENA+L91C96.0.RCR.ALLMUL
sta L91C96.0.RCR+1,x
lda #1
sta L91C96.BSR,x
lda #L91C96.1.CR.NOWAIT
sta L91C96.1.CR,x
lda /L91C96.1.CR.NOWAIT
sta L91C96.1.CR+1,x
ldy #0
.2 lda CONF.SRCMAC,y
sta L91C96.1.IAR,x
inx
iny
cpy #6
bne .2
.3 ldx Slotn0
lda #L91C96.1.CTR.DEFAULT+L91C96.1.CTR.AUTOREL
sta L91C96.1.CTR,x
lda /L91C96.1.CTR.DEFAULT+L91C96.1.CTR.AUTOREL
sta L91C96.1.CTR+1,x
clc
rts rts
*-------------------------------------- *--------------------------------------
GS.Read php GS.Read php
sei sei
ldx Slotn0 ldx Slotn0
lda #2
sta L91C96.BSR,x
lda L91C96.2.IST,x
and #L91C96.2.IST.RCV
beq GS.READWRITE.9
.1 lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
sta L91C96.2.PTR,x
lda /L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
sta L91C96.2.PTR+1,x
lda L91C96.2.DATA,x Get Frame Status Word (lo)
lda L91C96.2.DATA,x Get Frame Status Word (HI)
asl
asl
asl #$10 = odd?
asl if odd, CS
lda L91C96.2.DATA,x get lo byte count
sbc #5 compute Size
sta ZPBufCnt
eor #$ff
sta ZPnCnt
lda L91C96.2.DATA,x get hi byte count
sbc #0
sta ZPBufCnt+1
eor #$ff
sta ZPnCnt+1
ldy #0
.2 inc ZPnCnt
bne .3
inc ZPnCnt+1
beq .4
.3 lda L91C96.2.DATA,x
sta (ZPBufPtr),y
iny
bne .2
inc ZPBufPtr+1
bra .2
.4 lda #L91C96.2.MMUCR.REMREL
sta L91C96.2.MMUCR,x
plp
clc
rts
*-------------------------------------- *--------------------------------------
GS.READWRITE.9 plp GS.READWRITE.9 plp
sec sec
@ -18,33 +113,324 @@ GS.Write php
ldx Slotn0 ldx Slotn0
lda #2
sta L91C96.BSR,x
lda ZPBufCnt
eor #$ff
sta ZPnCnt
eor #$ff
clc
adc #6 3 WORDs more Status, len & Control
bne .10
clc LO byte is 0, no need for an extra empty page
.10 lda ZPBufCnt+1
eor #$ff
sta ZPnCnt+1
eor #$ff
adc #0
.1 ora #L91C96.2.MMUCR.ALLOC
sta L91C96.2.MMUCR,x
ldy #0
.2 lda L91C96.2.IST,x
and #L91C96.2.IST.ALLOC
bne .3
dey
bne .2
bra GS.READWRITE.9
.3 lda L91C96.2.AAR,x
sta L91C96.2.PNR,x
lda #L91C96.2.PTR.AUTOI
sta L91C96.2.PTR,x
lda /L91C96.2.PTR.AUTOI
sta L91C96.2.PTR+1,x
ldy #S.ETH.SRCMAC+5 Add Src MAC Address
ldx #5
.4 lda CONF.SRCMAC,x
sta (ZPBufPtr),y
dey
dex
bpl .4
ldx Slotn0
stz L91C96.2.DATA,x write fake status word
stz L91C96.2.DATA,x
lda ZPBufCnt
pha
eor #$01
lsr
pla
adc #$05 add 5 if odd, 6 if even
sta L91C96.2.DATA,x
lda ZPBufCnt+1
adc #$00
sta L91C96.2.DATA,x
ldy #0
.5 inc ZPnCnt
bne .51
inc ZPnCnt+1
beq .70
.51 lda (ZPBufPtr),y
iny
bne .6
inc ZPBufPtr+1
.6 inc ZPnCnt
bne .61
inc ZPnCnt+1
beq .71
.61 sta L91C96.2.DATA,x
lda (ZPBufPtr),y
sta L91C96.2.DATA,x
iny
bne .5
inc ZPBufPtr+1
bra .5
.70 lda #0
sta L91C96.2.DATA,x
sta L91C96.2.DATA,x
bra .8
.71 sta L91C96.2.DATA,x
lda #%00100000 signal an extra (odd) byte
sta L91C96.2.DATA,x
.8 lda #L91C96.2.MMUCR.NQPKT
sta L91C96.2.MMUCR,x
plp plp
sec clc
rts rts
*-------------------------------------- *--------------------------------------
GS.Name >PSTR "LanCEgs" GS.Name >PSTR "LanCEgs"
*-------------------------------------- *--------------------------------------
DRV.GS .PH DRV.NIC.START DRV.GS .PH DRV.NIC.START
jmp DRV.GS.Write jmp DRV.GS.SendARP
jmp DRV.GS.SendUDP
DRV.GS.Read php DRV.GS.Rcvd php
sei sei
ldx DRV.BLK.Slotn0
lda #2
sta L91C96.BSR,x
lda L91C96.2.IST,x
and #L91C96.2.IST.RCV
beq DRV.GS.9
.1 lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
sta L91C96.2.PTR,x
lda /L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
sta L91C96.2.PTR+1,x
lda L91C96.2.DATA,x Get Frame Status Word (lo)
lda L91C96.2.DATA,x Get Frame Status Word (HI)
asl
asl
asl #$10 = odd?
asl if odd, CS
lda L91C96.2.DATA,x get lo byte count
sbc #5 compute Size
sta DRV.FrameSize
eor #$ff
sta DRV.nCnt
lda L91C96.2.DATA,x get hi byte count
sbc #0
sta DRV.FrameSize+1
eor #$ff
sta DRV.nCnt+1
>LDYAI DRV.InBuf
>STYA DRV.A1L
ldy #0
.2 inc DRV.nCnt
bne .3
inc DRV.nCnt+1
beq .4
.3 lda L91C96.2.DATA,x
sta (DRV.A1L),y
iny
bne .2
inc DRV.A1L+1
bra .2
.4 lda #L91C96.2.MMUCR.REMREL
sta L91C96.2.MMUCR,x
plp
clc
rts
*-------------------------------------- *--------------------------------------
DRV.GS.9 plp DRV.GS.9 plp
sec sec
rts rts
*-------------------------------------- *--------------------------------------
DRV.GS.Write php DRV.GS.SendARP >LDYAI S.ARP
>STYA DRV.FrameSize
>LDYAI DRV.ARPBuf
bra DRV.GS.Send
*--------------------------------------
DRV.GS.SendUDP >STYA DRV.FrameSize
jsr DRV.BLK.IPUDPCheksum
>LDYAI DRV.UDPBuf
DRV.GS.Send >STYA DRV.A1L
php
sei sei
ldx DRV.BLK.Slotn0
lda #2
sta L91C96.BSR,x
lda DRV.FrameSize
eor #$ff
sta DRV.nCnt
eor #$ff
clc
adc #6 3 WORDs more Status, len & Control
bne .10
clc LO byte is 0, no need for an extra empty page
.10 lda DRV.FrameSize+1
eor #$ff
sta DRV.nCnt+1
eor #$ff
adc #0
.1 ora #L91C96.2.MMUCR.ALLOC
sta L91C96.2.MMUCR,x
ldy #0
.2 lda L91C96.2.IST,x
and #L91C96.2.IST.ALLOC
bne .3
dey
bne .2
bra DRV.GS.9
.3 lda L91C96.2.AAR,x
sta L91C96.2.PNR,x
lda #L91C96.2.PTR.AUTOI
sta L91C96.2.PTR,x
lda /L91C96.2.PTR.AUTOI
sta L91C96.2.PTR+1,x
* ldy #S.ETH.SRCMAC+5 Add Src MAC Address
* ldx #5
*.4 lda CONF.SRCMAC,x
* sta (DRV.A1L),y
* dey
* dex
* bpl .4
ldx DRV.BLK.Slotn0
stz L91C96.2.DATA,x write fake status word
stz L91C96.2.DATA,x
lda DRV.FrameSize
pha
eor #$01
lsr
pla
adc #$05 add 5 if odd, 6 if even
sta L91C96.2.DATA,x
lda DRV.FrameSize+1
adc #$00
sta L91C96.2.DATA,x
ldy #0
.5 inc DRV.nCnt
bne .51
inc DRV.nCnt+1
beq .70
.51 lda (DRV.A1L),y
iny
bne .6
inc DRV.A1L+1
.6 inc DRV.nCnt
bne .61
inc DRV.nCnt+1
beq .71
.61 sta L91C96.2.DATA,x
lda (DRV.A1L),y
sta L91C96.2.DATA,x
iny
bne .5
inc DRV.A1L+1
bra .5
.70 lda #0
sta L91C96.2.DATA,x
sta L91C96.2.DATA,x
bra .8
.71 sta L91C96.2.DATA,x
lda #%00100000 signal an extra (odd) byte
sta L91C96.2.DATA,x
.8 lda #L91C96.2.MMUCR.NQPKT
sta L91C96.2.MMUCR,x
plp plp
sec clc
rts rts
*-------------------------------------- *--------------------------------------
.EP .EP

View File

@ -125,7 +125,7 @@ U2.Read php
lda TotalSize+1 lda TotalSize+1
sbc #0 sbc #0
sta ZPBufCnt sta ZPBufCnt+1
eor #$ff eor #$ff
sta ZPnCnt+1 sta ZPnCnt+1

View File

@ -31,7 +31,9 @@ ZPCheckSum .EQ 14
timerS .EQ 16 timerS .EQ 16
timerC .EQ 17 timerC .EQ 17
bRemoteMac .EQ 18 bRemoteMac .EQ 18
Slotn0 .EQ 19 bD1Size .EQ 19
bD2Size .EQ 19
Slotn0 .EQ 21
*-------------------------------------- *--------------------------------------
CONF.FBUF .EQ $4000 CONF.FBUF .EQ $4000
CONF.LBUF .EQ $4400 CONF.LBUF .EQ $4400
@ -179,32 +181,77 @@ VEDRIVE.Ping lda CONF.PORT
>LDYAI ADT.REQ.LEN >LDYAI ADT.REQ.LEN
>STYA ZPBufCnt >STYA ZPBufCnt
jsr VEDRIVE.SendUDP jsr VEDRIVE.SendUDP
bcs .9 bcs .9
jsr VEDRIVE.InitTimer jsr VEDRIVE.InitTimer
.3 jsr VEDRIVE.READ .1 jsr VEDRIVE.READ
bcc .4 bcc .2
jsr VEDRIVE.Wait jsr VEDRIVE.Wait
bcc .3 bcc .1
rts rts
.4 jsr VEDRIVE.CheckADTRep .2 jsr VEDRIVE.CheckADTRep
bcc .8 bcc .3
jsr VEDRIVE.CheckARPFrame jsr VEDRIVE.CheckARPFrame
bra .3 bra .1
.8 ldy #S.UDP+$29 .3 bit bD1Size
bmi .30
ldy #S.UDP+10+4+$25
lda (ZPBufPtr),y lda (ZPBufPtr),y
sta CONF.D1TOTALBLK sta CONF.D1TOTALBLK
iny iny
lda (ZPBufPtr),y lda (ZPBufPtr),y
sta CONF.D1TOTALBLK+1 sta CONF.D1TOTALBLK+1
.30 lda #5
sta ADT.REQ.CMD
lda #$C2
sta ADT.REQ.SUM
>LDYAI ADT.REQ
>STYA ZPBufPtr
>LDYAI ADT.REQ.LEN
>STYA ZPBufCnt
jsr VEDRIVE.SendUDP
bcs .9
jsr VEDRIVE.InitTimer
.4 jsr VEDRIVE.READ
bcc .5
jsr VEDRIVE.Wait
bcc .4
rts
.5 jsr VEDRIVE.CheckADTRep
bcc .6
jsr VEDRIVE.CheckARPFrame
bra .4
.6 bit bD2Size
bmi .60
ldy #S.UDP+10+4+$25
lda (ZPBufPtr),y
sta CONF.D2TOTALBLK
iny
lda (ZPBufPtr),y
sta CONF.D2TOTALBLK+1
.60
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -461,11 +508,14 @@ CONF.FILENAME.L .EQ *-CONF.FILENAME
*-------------------------------------- *--------------------------------------
CONF.KW >PSTR "nic" CONF.KW >PSTR "nic"
>PSTR "slot" >PSTR "slot"
>PSTR "mac"
>PSTR "address" >PSTR "address"
>PSTR "netmask" >PSTR "netmask"
>PSTR "gateway" >PSTR "gateway"
>PSTR "server" >PSTR "server"
>PSTR "port" >PSTR "port"
>PSTR "blksize1"
>PSTR "blksize2"
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
CONF.KW.NIC >PSTR "lancegs" CONF.KW.NIC >PSTR "lancegs"
@ -482,8 +532,8 @@ CONF.MASK .HS 00000000
CONF.GATEWAY .HS 00000000 CONF.GATEWAY .HS 00000000
CONF.SERVER .HS 00000000 CONF.SERVER .HS 00000000
CONF.PORT .DA /1977,#1977 CONF.PORT .DA /1977,#1977
CONF.D1TOTALBLK .DA $FFFF CONF.D1TOTALBLK .DA 1600
CONF.D2TOTALBLK .DA $FFFF CONF.D2TOTALBLK .DA 1600
*-------------------------------------- *--------------------------------------
MLIGETPREFIX.P .DA #1 MLIGETPREFIX.P .DA #1
.DA CONF.FILEPATH .DA CONF.FILEPATH
@ -631,7 +681,8 @@ ADT.REQ.UDP.DST .BS 2 DST PORT
.BS 2 UDP CHECKSUM .BS 2 UDP CHECKSUM
*-------------------------------------- *--------------------------------------
.DA #ADT.CMD.VSD .DA #ADT.CMD.VSD
.HS 030000C6 READ D1, BLK 0 ADT.REQ.CMD .HS 030200 READ D1, BLK 2
ADT.REQ.SUM .HS C4
ADT.REQ.END .EQ * ADT.REQ.END .EQ *
ADT.REQ.LEN .EQ *-ADT.REQ ADT.REQ.LEN .EQ *-ADT.REQ
*-------------------------------------- *--------------------------------------