/**************************************************************************** X-ASM Macro definition ***************************************************************************** ADD - addition without carry SUB - subtraction INW - increment word DEW - decrement word MVA - move byte using accumulator MVX - move byte using register X MVY - move byte using register Y MWA - move word using accumulator MWX - move word using register X MWY - move word using register X ADD:STA SCC:INC INC:RNE DEC:RNE LDA:RNE STA:RNE LDA:TAX LDA:TAY TYA:STA LDY:INC STA:RPL MVA:RNE MVA:RPL LDA:PHA TYA:PHA PLA:TAY ADC:STA CMP:RNE SCC:INY SEQ:ADC SCC:LDA SMI:LDA SNE:LDA */ /**************************************************************************** ADD - addition without carry *****************************************************************************/ add .macro ' ' .if :0<>1 .error 'Unexpected eol' .endif clc adc :1 .endm /***************************************************************************** SUB - subtraction *****************************************************************************/ sub .macro ' ' .if :0<>1 .error 'Unexpected eol' .endif sec sbc :1 .endm /***************************************************************************** INW - increment word *****************************************************************************/ inw .macro ' ' .if :0<>1 .error 'Unexpected eol' .endif inc :1 bne skip inc :1+1 skip .endm /***************************************************************************** DEW - decrement word *****************************************************************************/ dew .macro ' ' .if :0<>1 .error 'Unexpected eol' .endif lda :1 bne skip dec :1+1 skip dec :1 .endm /***************************************************************************** MVA, MVX, MVY - move byte using accumulator, X or Y *****************************************************************************/ mv? .macro ' ' .if :4<>2 .error 'Unexpected eol' .endif ld:3 :1 st:3 :2 .endm /***************************************************************************** MVA - move byte using accumulator *****************************************************************************/ mva .macro ' ' mv? :1 :2 a :0 .endm /***************************************************************************** MVX - move byte using register X *****************************************************************************/ mvx .macro ' ' mv? :1 :2 x :0 .endm /***************************************************************************** MVY - move byte using register Y *****************************************************************************/ mvy .macro ' ' mv? :1 :2 y :0 .endm /***************************************************************************** MWA, MWX, MWY - move word using accumulator, X or Y *****************************************************************************/ mw? .macro ' ' .if :3<>' ' .or :0<>5 .error 'Illegal addresing mode' .endif .if :1='#' .if :2=0 ld:5 #0 st:5 :4 st:5 :4+1 .exit .endif .if :2=1 .if 'a'<>':5' .and 'A'<>':5' ld:5 #:2 st:5 :4 de:5 st:5 :4+1 .else lda #:2 sta :4 lda #0 sta :4+1 .endif .exit .endif .if :2<256 .and :2>0 ld:5 #:2 st:5 :4 ld:5 #0 st:5 :4+1 .else ld:5 <:2 st:5 :4 ld:5 >:2 st:5 :4+1 .endif .else ld:5 :2 st:5 :4 ld:5 :2+1 st:5 :4+1 .endif .endm /***************************************************************************** MWA - move word using accumulator *****************************************************************************/ mwa .macro " " mw? :1 :2 :3 :4 a .endm /***************************************************************************** MWX - move word using register X *****************************************************************************/ mwx .macro " " mw? :1 :2 :3 :4 x .endm /***************************************************************************** MWY - move word using register Y *****************************************************************************/ mwy .macro " " mw? :1 :2 :3 :4 y .endm /***************************************************************************** ADD:STA *****************************************************************************/ add?sta .macro " " .if :1<>' ' .error 'Illegal adressing mode' .endif clc adc :2 sta :2 .endm /***************************************************************************** SCC:INC *****************************************************************************/ scc?inc .macro " " .if :1<>' ' .error 'Illegal adressing mode' .endif bcc skip inc :2 skip .endm /***************************************************************************** ___?RNE -> INC:RNE DEC:RNE STA:RNE *****************************************************************************/ ___?rne .macro ' ' .if :1<>' ' .error 'Illegal adressing mode' .endif skip :3 :2 bne skip .endm /***************************************************************************** INC:RNE *****************************************************************************/ inc?rne .macro " " ___?rne :1 :2 inc .endm /***************************************************************************** DEC:RNE *****************************************************************************/ dec?rne .macro " " ___?rne :1 :2 dec .endm /***************************************************************************** LDA:RNE *****************************************************************************/ lda?rne .macro " " ___?rne :1 :2 lda .endm /***************************************************************************** STA:RNE *****************************************************************************/ sta?rne .macro " " ___?rne :1 :2 sta .endm /***************************************************************************** LDA:TAX *****************************************************************************/ lda?tax .macro ' ' lda :1 tax .endm /***************************************************************************** LDA:TAY *****************************************************************************/ lda?tay .macro ' ' lda :1 tay .endm /***************************************************************************** TYA:STA *****************************************************************************/ tya?sta .macro ' ' tya sta :1 .endm /***************************************************************************** LDY:INC *****************************************************************************/ ldy?inc .macro ' ' ldy :1 inc :1 .endm /***************************************************************************** STA:RPL *****************************************************************************/ sta?rpl .macro ' ' skip sta :1 bpl skip .endm /***************************************************************************** MVA:RNE *****************************************************************************/ mva?rne .macro ' ' skip lda :1 sta :2 bne skip .endm /***************************************************************************** MVA:RPL *****************************************************************************/ mva?rpl .macro ' ' skip lda :1 sta :2 bpl skip .endm /***************************************************************************** LDA:PHA *****************************************************************************/ lda?pha .macro ' ' lda :1 pha .endm /***************************************************************************** TYA:PHA *****************************************************************************/ tya?pha .macro ' ' tya pha .endm /***************************************************************************** PLA:TAY *****************************************************************************/ pla?tay .macro ' ' pla tay .endm /***************************************************************************** ADC:STA *****************************************************************************/ adc?sta .macro ' ' adc :1 sta :1 .endm /***************************************************************************** CMP:RNE *****************************************************************************/ cmp?rne .macro ' ' skip cmp :1 bne skip .endm /***************************************************************************** __S?? -> SCC:INY SEQ:ADC SCC:LDA SMI:LDA SNE:LDA *****************************************************************************/ __s?? .macro ' ' :1 skip .if :0=2 :2 .elseif :0=3 :2 :3 .else .error 'Illegal addressing mode' .endif skip .endm /***************************************************************************** SCC:INY *****************************************************************************/ scc?iny .macro ' ' __s?? bcc iny .endm /***************************************************************************** SEQ:ADC *****************************************************************************/ seq?adc .macro ' ' __s?? beq adc :1 .endm /***************************************************************************** SCC:LDA *****************************************************************************/ scc?lda .macro ' ' __s?? bcc lda :1 .endm /***************************************************************************** SMI:LDA *****************************************************************************/ smi?lda .macro ' ' __s?? bmi lda :1 .endm /***************************************************************************** SNE:LDA *****************************************************************************/ sne?lda .macro ' ' __s?? bne lda :1 .endm