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 |
| .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) | |
| .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) |
| .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` |
| .DO | conditional start | 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) |
| .PG | PaGe control | S-C,A2osX | IGNORED | | |
| .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 | | |
| .TA | Target Address| S-C,A2osX | IGNORED | | |
| .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, middle"></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="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>
@ -35,30 +35,30 @@
<Keywords name="Delimiters"></Keywords>
</KeywordLists>
<Styles>
<WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="COMMENTS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="LINE COMMENTS" fgColor="008040" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="0" />
<WordsStyle name="NUMBERS" fgColor="00B32D" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS1" fgColor="FF8000" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS2" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS3" fgColor="00B32D" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS4" fgColor="FF0000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS5" fgColor="0000FF" bgColor="FFFF00" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS6" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS7" fgColor="800040" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS8" fgColor="CC1F15" bgColor="FFFFFF" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="OPERATORS" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN CODE1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN CODE2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS8" 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" fontStyle="0" nesting="0" />
<WordsStyle name="LINE COMMENTS" fgColor="008040" bgColor="FFFFFF" fontStyle="2" nesting="0" />
<WordsStyle name="NUMBERS" fgColor="00B32D" bgColor="FFFFFF" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS1" fgColor="FF8000" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS2" fgColor="0000FF" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS3" fgColor="00B32D" bgColor="FFFFFF" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS4" fgColor="FF0000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS5" fgColor="0000FF" bgColor="FFFF00" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS6" fgColor="008000" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS7" fgColor="800040" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS8" fgColor="CC1F15" bgColor="FFFFFF" fontStyle="3" nesting="0" />
<WordsStyle name="OPERATORS" fgColor="000000" bgColor="FFFFFF" 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" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS1" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS2" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
</Styles>
</UserLang>
</NotepadPlus>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,71 +1,6 @@
NEW
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.REGISTER
CC.SCSPEC.STATIC
@ -75,7 +10,101 @@ CC.SCSPEC.EXTERN
.99 rts
*--------------------------------------
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
sec

View File

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

View File

@ -53,7 +53,7 @@ CC.KW.IF.END jsr CC.GetCharNBNL
.1 lda #'E' define ELSE Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
rts
*--------------------------------------
@ -159,7 +159,7 @@ CC.KW.DO jsr CC.KW.BEGIN00
lda #'C' define CONT Label
jsr CC.SYM.NewA
bcs .99
jmp CC.KW.STMT
.99 rts
@ -199,14 +199,14 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
cmp #')'
bne .9
jsr CC.GetNextCharNB
bcs .9
clv pop context
clc
rts
.9 lda #E.CSYN
sec
.99 rts
@ -354,10 +354,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
tax
bne .97
cpy #SYM.T.UCHAR
bcc .97
cpy #SYM.T.FLOAT
bcs .97
@ -371,10 +371,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
jsr CC.Push push SizeOf(type)
bcs .99
jsr CC.KW.BEGIN
bcs .99
jsr CC.GetCharNB
bcs .99
@ -382,10 +382,10 @@ CC.KW.SWITCH jsr CC.GetCharNB
bne .98
jmp CC.KW.STMT
.97 lda #E.TMISMATCH
sec
rts
rts
.98 lda #E.CSYN
sec
@ -395,7 +395,7 @@ CC.KW.SWITCH.END
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
@ -407,7 +407,7 @@ CC.KW.CASE ldy CStackPtr
lda (ZPCCStack),y
cmp #10 SWITCH ??
bne .9
lda CStackPtr
clc
adc #7
@ -416,13 +416,13 @@ CC.KW.CASE ldy CStackPtr
lda (ZPCCStack),y type
tay
lda #0 for integral type
jsr CC.EXP.Eval
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #':'
bne .9
@ -430,7 +430,7 @@ CC.KW.CASE ldy CStackPtr
clc
rts
.9 lda #E.CSYN
sec
.99 rts
@ -442,18 +442,18 @@ CC.KW.DEFAULT ldy CStackPtr
lda (ZPCCStack),y
cmp #10 SWITCH ??
bne .9
jsr CC.GetCharNB
bcs .9
cmp #':'
bne .9
jsr CC.GetNextCharNB skip ':'
clc
rts
.9 lda #E.CSYN
sec
.99 rts
@ -462,10 +462,10 @@ CC.KW.BREAK lda #'B'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP break
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec
rts
@ -474,10 +474,10 @@ CC.KW.CONTINUE lda #'C'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP cont
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec
rts
@ -531,51 +531,275 @@ CC.KW.SIZEOF
sec
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
bcs .99
ldx #SYM.SC.TAG
>LDA.G CC.hTags
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
bit bPass2
bpl CC.KW.SU.1 Pass 1: create def
*--------------------------------------
CC.KW.SU.2 jsr CC.GetNextCharNB
bcs .98
cmp #'{'
bne .99
beq .1 no TAG
.1 jsr CC.GetNextCharNB
jsr CC.KW.GetTag
bcs .99
jsr CC.GetNextCharNBNL
bcs .98
cmp #'{'
bne .2
.1 jsr CC.GetNextCharNBNL skip '{'
cmp #'}'
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
.99 >LEAVE
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
lda #E.CSYN
sec
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
jsr CC.Push no T/Q
bcs CC.KW.BEGIN.RTS
jsr CC.Push
bcs CC.KW.BEGIN.RTS
@ -670,7 +894,7 @@ CC.KW.LookupLabel
lda (ZPCCStack),y
bmi .9 f()
iny
iny
iny
@ -680,12 +904,12 @@ CC.KW.LookupLabel
iny
lda (ZPCCStack),y
iny
iny
iny
sty ArgIndex
ply
>STYA.G CC.CPSPFX+2
@ -693,10 +917,10 @@ CC.KW.LookupLabel
pha
jsr CC.SYM.LookupA
bcs .1
pla
.8 rts
.9 pla
lda #E.CSYN
sec

View File

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

View File

@ -28,7 +28,30 @@ CC.STMT jsr CC.GetCharNB
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
jmp CC.SYM.LookupFree

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -82,50 +82,138 @@ PSTA JSR EXPR.DEFINED GET EXPR VALUE
ORA EXP.VALUE+3
BEQ NEW.TARGET
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
* .AS -- ASCII STRING WITH ALL BYTES SAME
* .AZ -- Same as .AS, but with 00 terminator byte.
*--------------------------------
PSAZ JSR PSAS
JMP EMIT.ZERO
PSAT LDA #$80 LAST BYTE HAS OPPOSITE BIT 7
.HS 2C ...SKIP OVER 2 BYTES
PSAS LDA #0 ALL BYTES GET SAME BIT 7
STA AT.HIBIT
JSR GNNB Scan to next non-blank
BCS ERBA2 END OF LINE
DEC CHAR.PNTR BACK UP
.1 JSR TRY.HEX.STRING
BEQ .5 ...END OF LINE
LDY #0
STY AS.HIBIT ...assume hibit is 0
CMP #'-' 1ST NON-BLANK A MINUS?
BNE .15 ...no, hibit is 0
ROR AS.HIBIT ...yes, hibit is 1
JSR GNC.UC
.15 STA DLIM SAVE DELIMITER
JSR GNC.UC GET NEXT CHAR
BCS ERBA2 END OF LINE IS BAD NEWS
CMP DLIM CHK IF DELIMITER
BEQ .4 YES, NO STRING IN BETWEEN
.2 JSR GNC.UC GET NEXT CHAR
BCS ERBA2 END OF LINE IS BAD NEWS
CMP DLIM CHK IF DELIMITER
BEQ .3 YES, FINISH UP AND RETURN
LDA WBUF-2,Y ...NO, GET PREVIOUS CHAR
ORA AS.HIBIT MERGE WITH TOP BIT
JSR EMIT
JMP .2 GO FOR ANOTHER ONE
.3 LDA WBUF-2,Y GET PREVIOUS CHAR
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
*--------------------------------------
PSAZ jsr PSAS
jmp EMIT.ZERO
PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7
.HS 2C ...SKIP OVER 2 BYTES
PSAS lda #0 ALL BYTES GET SAME BIT 7
clc
DIR1.String sta AT.HIBIT
ror BYTE C String Flag
jsr GNNB Scan to next non-blank
bcs .9 END OF LINE
dec CHAR.PNTR BACK UP
.1 jsr TRY.HEX.STRING
beq .5 ...END OF LINE
ldy #0
sty AS.HIBIT ...assume hibit is 0
cmp #'-' 1ST NON-BLANK A MINUS?
bne .15 ...no, hibit is 0
ror AS.HIBIT ...yes, hibit is 1
jsr GNC.UC
.15 sta DLIM SAVE DELIMITER
jsr GNC.UC GET NEXT CHAR
.9 bcs ERBA2 END OF LINE IS BAD NEWS
cmp DLIM CHK IF DELIMITER
beq .4 YES, NO STRING IN BETWEEN
.2 jsr GNC.UC GET NEXT CHAR
bcs ERBA2 END OF LINE IS BAD NEWS
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
*---------------------------------

View File

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

View File

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

View File

@ -230,4 +230,4 @@ X.DigitCount .BS 1
X.DigitBuffer .BS 6
*--------------------------------------
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
bcs .8
ldx MLIREAD.P+6
stz CONF.LBUF,x
jsr VEDRIVE.CONF.L
bcc .2
@ -84,7 +87,11 @@ VEDRIVE.ReadConf
plp
rts
*--------------------------------------
VEDRIVE.CONF.L lda CONF.LBUF
VEDRIVE.CONF.L >LDYAI CONF.LBUF
>STYA ZPPtr1
jsr PrintFYA
lda (ZPPtr1)
cmp #13 CR
beq .8
@ -92,101 +99,31 @@ VEDRIVE.CONF.L lda CONF.LBUF
cmp #'#' comment
beq .8
lda #CONF.LBUF
sta ZPPtr1
lda /CONF.LBUF
sta ZPPtr1+1
ldy #CONF.KW
lda /CONF.KW
>LDYAI CONF.KW
jsr VEDRIVE.CONF.KW
bcs .9
.1 jsr VEDRIVE.GetNextCharPtr1
bcs .9
cmp #32
beq .1
ldx idx
jmp (.5,x)
.5 .DA VEDRIVE.CONF.KW.NIC
.DA VEDRIVE.CONF.KW.SLOT
.DA VEDRIVE.CONF.KW.MAC
.DA VEDRIVE.CONF.KW.ADDRESS
.DA VEDRIVE.CONF.KW.MASK
.DA VEDRIVE.CONF.KW.GATEWAY
.DA VEDRIVE.CONF.KW.SERVER
.DA VEDRIVE.CONF.KW.PORT
.DA VEDRIVE.CONF.KW.SIZE1
.DA VEDRIVE.CONF.KW.SIZE2
.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
*--------------------------------------
VEDRIVE.CONF.KW sty ZPPtr2
@ -247,30 +184,70 @@ VEDRIVE.CONF.KW sty ZPPtr2
sec
rts
*--------------------------------------
VEDRIVE.CONF.SKIPSP
lda (ZPPtr1)
cmp #32
bne .9
VEDRIVE.CONF.KW.NIC
>LDYAI CONF.KW.NIC
jsr VEDRIVE.CONF.KW
bcs .9
bra .3
.1 lda (ZPPtr1)
cmp #13
beq .9
.2 cmp #32
bne .8
.3 inc ZPPtr1
bne .1
inc ZPPtr1+1
bra .1
.8 clc
lda idx
sta CONF.NIC
clc
.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
jsr VEDRIVE.CONF.GetShort
bcs .9
@ -282,16 +259,87 @@ VEDRIVE.CONF.GetIPatX
dey
beq .9 CC
jsr VEDRIVE.GetCharPtr1
bcs .9
lda (ZPPtr1)
cmp #13
beq .9
cmp #'.'
sec
bne .9
jsr VEDRIVE.GetNextCharPtr1
bcs .9
jsr VEDRIVE.CONF.GetShort
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
*--------------------------------------
VEDRIVE.CONF.GetShort
@ -310,21 +358,14 @@ VEDRIVE.CONF.GetShort
VEDRIVE.CONF.GetInt
stz int
stz int+1
jsr VEDRIVE.GetCharPtr1
bcs .9
.1 lda (ZPPtr1)
cmp #'0'
bcc .8
jsr VEDRIVE.IsDigit
bcs .9
cmp #'9'+1
bcs .8
inc ZPPtr1
bne .2
inc ZPPtr1+1
.2 and #$0F
pha
.1 pha
lda int+1
pha
@ -352,27 +393,73 @@ VEDRIVE.CONF.GetInt
clc
adc int
sta int
bcc .1
bcc .2
inc int+1
bra .1
.2 jsr VEDRIVE.GetNextCharPtr1
bcs .8
jsr VEDRIVE.IsDigit
bcc .1
.8 clc
rts
.9 rts
*--------------------------------------
VEDRIVE.GetNextCharPtr1
inc ZPPtr1
bne VEDRIVE.GetCharPtr1
inc ZPPtr1+1
*--------------------------------------
VEDRIVE.GetCharPtr1
lda (ZPPtr1)
cmp #13
beq .9
inc ZPPtr1
bne .8
inc ZPPtr1+1
.8 clc
.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
SAVE usr/src/sys/pm.vedrive.s.cf
LOAD usr/src/sys/pm.vedrive.s

View File

@ -1,13 +1,108 @@
NEW
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
*--------------------------------------
GS.Read php
sei
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
sec
@ -18,33 +113,324 @@ GS.Write php
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
sec
clc
rts
*--------------------------------------
GS.Name >PSTR "LanCEgs"
*--------------------------------------
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
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
sec
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
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
sec
clc
rts
*--------------------------------------
.EP

View File

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

View File

@ -31,7 +31,9 @@ ZPCheckSum .EQ 14
timerS .EQ 16
timerC .EQ 17
bRemoteMac .EQ 18
Slotn0 .EQ 19
bD1Size .EQ 19
bD2Size .EQ 19
Slotn0 .EQ 21
*--------------------------------------
CONF.FBUF .EQ $4000
CONF.LBUF .EQ $4400
@ -179,32 +181,77 @@ VEDRIVE.Ping lda CONF.PORT
>LDYAI ADT.REQ.LEN
>STYA ZPBufCnt
jsr VEDRIVE.SendUDP
bcs .9
jsr VEDRIVE.InitTimer
.3 jsr VEDRIVE.READ
bcc .4
.1 jsr VEDRIVE.READ
bcc .2
jsr VEDRIVE.Wait
bcc .3
bcc .1
rts
.4 jsr VEDRIVE.CheckADTRep
bcc .8
.2 jsr VEDRIVE.CheckADTRep
bcc .3
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
sta CONF.D1TOTALBLK
iny
lda (ZPBufPtr),y
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
.9 rts
*--------------------------------------
@ -461,11 +508,14 @@ CONF.FILENAME.L .EQ *-CONF.FILENAME
*--------------------------------------
CONF.KW >PSTR "nic"
>PSTR "slot"
>PSTR "mac"
>PSTR "address"
>PSTR "netmask"
>PSTR "gateway"
>PSTR "server"
>PSTR "port"
>PSTR "blksize1"
>PSTR "blksize2"
.HS 00
*--------------------------------------
CONF.KW.NIC >PSTR "lancegs"
@ -482,8 +532,8 @@ CONF.MASK .HS 00000000
CONF.GATEWAY .HS 00000000
CONF.SERVER .HS 00000000
CONF.PORT .DA /1977,#1977
CONF.D1TOTALBLK .DA $FFFF
CONF.D2TOTALBLK .DA $FFFF
CONF.D1TOTALBLK .DA 1600
CONF.D2TOTALBLK .DA 1600
*--------------------------------------
MLIGETPREFIX.P .DA #1
.DA CONF.FILEPATH
@ -631,7 +681,8 @@ ADT.REQ.UDP.DST .BS 2 DST PORT
.BS 2 UDP CHECKSUM
*--------------------------------------
.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.LEN .EQ *-ADT.REQ
*--------------------------------------