; distribution.\r
;\r
\r
-.define _SMCDesignator .mid(0, .tcount(label) - 1, label) .ident(.concat(.string(.right(1, label)), "_SMC"))\r
-.define _SMCAlias .mid(0, .tcount(alias) - 1, alias) .ident(.concat(.string(.right(1, alias)), "_SMC"))\r
+.define _SMCDesignator .mid(0, .tcount(label) - 1, label) .ident(.concat(.string(.right(1, label)), "_SMC"))\r
+.define _SMCAlias .mid(0, .tcount(alias) - 1, alias) .ident(.concat(.string(.right(1, alias)), "_SMC"))\r
.define SMC_AbsAdr $FADE\r
-.define SMC_ZpAdr $00\r
+.define SMC_ZpAdr $00\r
.define SMC_Opcode nop\r
-.define SMC_Value $42\r
+.define SMC_Value $42\r
\r
.macro SMC_OperateOnValue opcode, label\r
opcode _SMCDesignator+1\r
.export _SMCAlias := _SMCDesignator\r
.endmacro\r
\r
-.macro SMC label, statement\r
+.macro SMC label, statement\r
_SMCDesignator: statement\r
.endmacro\r
\r
.macro SMC_TransferOpcode label, opcode, register\r
.if .paramcount = 2 .or .match ({register}, a)\r
- lda #opcode\r
- sta _SMCDesignator\r
+ lda #opcode\r
+ sta _SMCDesignator\r
.elseif .match ({register}, x)\r
- ldx #opcode\r
- stx _SMCDesignator\r
+ ldx #opcode\r
+ stx _SMCDesignator\r
.elseif .match ({register}, y)\r
- ldy #opcode\r
- sty _SMCDesignator\r
+ ldy #opcode\r
+ sty _SMCDesignator\r
.endif\r
.endmacro\r
\r
.macro SMC_LoadOpcode label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- lda _SMCDesignator\r
+ lda _SMCDesignator\r
.elseif .match ({register}, x)\r
- ldx _SMCDesignator\r
+ ldx _SMCDesignator\r
.elseif .match ({register}, y)\r
- ldy _SMCDesignator\r
+ ldy _SMCDesignator\r
.endif\r
.endmacro\r
\r
.macro SMC_StoreOpcode label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- sta _SMCDesignator\r
+ sta _SMCDesignator\r
.elseif .match ({register}, x)\r
- stx _SMCDesignator\r
+ stx _SMCDesignator\r
.elseif .match ({register}, y)\r
- sty _SMCDesignator\r
+ sty _SMCDesignator\r
.endif\r
.endmacro\r
\r
.macro SMC_ChangeBranch label, destination, register\r
.if .paramcount = 2 .or .match ({register}, a)\r
- lda #(destination - _SMCDesignator -2)\r
- sta _SMCDesignator+1\r
+ lda #(destination - _SMCDesignator -2)\r
+ sta _SMCDesignator+1\r
.elseif .match ({register}, x)\r
- ldx #(destination - _SMCDesignator - 2)\r
- stx _SMCDesignator+1\r
+ ldx #(destination - _SMCDesignator - 2)\r
+ stx _SMCDesignator+1\r
.elseif .match ({register}, y)\r
- ldy #(destination - _SMCDesignator - 2)\r
- sty _SMCDesignator+1\r
+ ldy #(destination - _SMCDesignator - 2)\r
+ sty _SMCDesignator+1\r
.endif\r
.endmacro\r
\r
.macro SMC_TransferValue label, value, register\r
.if .paramcount = 2 .or .match ({register}, a)\r
- lda value\r
- sta _SMCDesignator+1\r
+ lda value\r
+ sta _SMCDesignator+1\r
.elseif .match ({register}, x)\r
- ldx value\r
- stx _SMCDesignator+1\r
+ ldx value\r
+ stx _SMCDesignator+1\r
.elseif .match ({register}, y)\r
- ldy value\r
- sty _SMCDesignator+1\r
+ ldy value\r
+ sty _SMCDesignator+1\r
.endif\r
.endmacro\r
\r
.macro SMC_LoadValue label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- lda _SMCDesignator+1\r
+ lda _SMCDesignator+1\r
.elseif .match ({register}, x)\r
- ldx _SMCDesignator+1\r
+ ldx _SMCDesignator+1\r
.elseif .match ({register}, y)\r
- ldy _SMCDesignator+1\r
+ ldy _SMCDesignator+1\r
.endif\r
.endmacro\r
\r
.macro SMC_StoreValue label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- sta _SMCDesignator+1\r
+ sta _SMCDesignator+1\r
.elseif .match ({register}, x)\r
- stx _SMCDesignator+1\r
+ stx _SMCDesignator+1\r
.elseif .match ({register}, y)\r
- sty _SMCDesignator+1\r
+ sty _SMCDesignator+1\r
.endif\r
.endmacro\r
\r
\r
.macro SMC_TransferHighByte label, value, register\r
.if .paramcount = 2 .or .match ({register}, a)\r
- lda value\r
- sta _SMCDesignator+2\r
+ lda value\r
+ sta _SMCDesignator+2\r
.elseif .match ({register}, x)\r
- ldx value\r
- stx _SMCDesignator+2\r
+ ldx value\r
+ stx _SMCDesignator+2\r
.elseif .match ({register}, y)\r
- ldy value\r
- sty _SMCDesignator+2\r
+ ldy value\r
+ sty _SMCDesignator+2\r
.endif\r
.endmacro\r
\r
.macro SMC_LoadHighByte label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- lda _SMCDesignator+2\r
+ lda _SMCDesignator+2\r
.elseif .match ({register}, x)\r
- ldx _SMCDesignator+2\r
+ ldx _SMCDesignator+2\r
.elseif .match ({register}, y)\r
- ldy _SMCDesignator+2\r
+ ldy _SMCDesignator+2\r
.endif\r
.endmacro\r
\r
.macro SMC_StoreHighByte label, register\r
.if .paramcount = 1 .or .match ({register}, a)\r
- sta _SMCDesignator+2\r
+ sta _SMCDesignator+2\r
.elseif .match ({register}, x)\r
- stx _SMCDesignator+2\r
+ stx _SMCDesignator+2\r
.elseif .match ({register}, y)\r
- sty _SMCDesignator+2\r
+ sty _SMCDesignator+2\r
.endif\r
.endmacro\r
\r
-\r
.macro SMC_TransferAddressSingle label, address, register\r
.if .paramcount = 2 .or .match ((register), a)\r
.if (.match (.left (1, {address}), #))\r
; immediate mode\r
- lda #<(.right (.tcount ({address})-1, {address}))\r
+ lda #<(.right (.tcount ({address})-1, {address}))\r
sta _SMCDesignator+1\r
- lda #>(.right (.tcount ({address})-1, {address}))\r
+ lda #>(.right (.tcount ({address})-1, {address}))\r
sta _SMCDesignator+2\r
- .else\r
- ; assume absolute or zero page\r
- lda address\r
+ .else\r
+ ; assume absolute or zero page\r
+ lda address\r
sta _SMCDesignator+1\r
lda 1+(address)\r
sta _SMCDesignator+2\r
.elseif .match ((register), x)\r
.if (.match (.left (1, {address}), #))\r
; immediate mode\r
- ldx #<(.right (.tcount ({address})-1, {address}))\r
+ ldx #<(.right (.tcount ({address})-1, {address}))\r
stx _SMCDesignator+1\r
- ldx #>(.right (.tcount ({address})-1, {address}))\r
+ ldx #>(.right (.tcount ({address})-1, {address}))\r
stx _SMCDesignator+2\r
- .else\r
- ; assume absolute or zero page\r
- ldx address\r
+ .else\r
+ ; assume absolute or zero page\r
+ ldx address\r
stx _SMCDesignator+1\r
ldx 1+(address)\r
stx _SMCDesignator+2\r
.elseif .match ((register), y)\r
.if (.match (.left (1, {address}), #))\r
; immediate mode\r
- ldy #<(.right (.tcount ({address})-1, {address}))\r
+ ldy #<(.right (.tcount ({address})-1, {address}))\r
sty _SMCDesignator+1\r
- ldy #>(.right (.tcount ({address})-1, {address}))\r
+ ldy #>(.right (.tcount ({address})-1, {address}))\r
sty _SMCDesignator+2\r
- .else\r
- ; assume absolute or zero page\r
- ldy address\r
+ .else\r
+ ; assume absolute or zero page\r
+ ldy address\r
sty _SMCDesignator+1\r
ldy 1+(address)\r
sty _SMCDesignator+2\r
.endif\r
.endmacro\r
\r
-\r
.macro SMC_TransferAddress label, address\r
.if (.match (.left (1, {address}), #))\r
; immediate mode\r
- lda #<(.right (.tcount ({address})-1, {address}))\r
+ lda #<(.right (.tcount ({address})-1, {address}))\r
sta _SMCDesignator+1\r
ldx #>(.right (.tcount ({address})-1, {address}))\r
stx _SMCDesignator+2\r
.else\r
; assume absolute or zero page\r
- lda {address}\r
+ lda {address}\r
sta _SMCDesignator+1\r
ldx 1+{address}\r
stx _SMCDesignator)+2\r
.endmacro\r
\r
.macro SMC_StoreAddress label\r
- sta _SMCDesignator+1\r
- stx _SMCDesignator+2\r
+ sta _SMCDesignator+1\r
+ stx _SMCDesignator+2\r
.endmacro\r
-\r
-\r