; This macro library is to be used with DRI's MAC or RMAC ; (MAC and RMAC are registered trademarks of Digital Research) ; ; The code structure is the same as normal 6502 asmabler ; with the following differences: ; ; Hex numbers '$00' are replaced with a number followed by an h ; i.e. normal 8080 type numbers (also have binary, and octal) ; ; The immediate instruction's format is different. Below is an ; example: ; normal 6502 ASM LIB 6502 ASM ; lda #$A5 lda 0A5h,# ; ; Written by Von Ertwine ; 26 July 84 ; xaaa macro @W,@Y,@Z if nul @Z if @Y<256 db @W+4,@Y else db @W+12 dw @Y endif else if '&@Z'='X)' db @W,@Y&) else if '&@Z'='X' if @Y<256 db @W+20,@Y else db @W+28 dw @Y endif else if '&@Z'='Y' @A set 0 irpc @x,@y if '&@X'='(' @A set 1 endif endm if @A=1 db @W+16,@Y else db @W+24 dw @Y endif else if '&@Z'='#' if @Y<256 db @W+8,@Y else db @W,0,0 'Error' endif endif endif endif endif endif endm xbb macro @W,@Y,@Z @A set 0 if not nul @Z @A set 16 if (@W=86h) or (@W=84h) if @Y>256 'Error' endif endif endif if @Y<256 db @W+@A,@Y else db @W+@A+8 dw @Y endif endm xbbb macro @W,@Y,@Z if NUL @Z @A set 0 irpc @X,@Y @A set @A+1 endm if @A=1 if '&@Y'='A' db @W+8 else if @Y<256 db @W+4,@Y else db @W+12 dw @Y endif endif else if @Y<256 db @W+4,@Y else db @W+12 dw @Y endif endif else if @Y<256 db @W+20,@Y else db @W+28 dw @Y endif endif endm xcc macro @W,@Y,@Z if NUL @Z if @Y<256 db @W+4,@Y else db @W+12 dw @Y endif else if '&@Z'='#' db @W,@Y else 'Error' endif endif endm xddd macro @W,@Y,@Z if NUL @Z if @Y<256 db @W+4,@Y else db @W+12 dw @Y endif else if '&@Z'='#' db @W,@Y else if @Y<256 db @W+20,@Y else db @W+28 dw @Y endif endif endif endm @adc macro @u,@v xaaa 61h,@u,@v endm @and macro @u,@v xaaa 21h,@u,@v endm @asl macro @u,@v xbbb 2,@u,@v endm @bcc macro @u db 90h,@u-$-1 endm @bcs macro @u db 0b0h,@u-$-1 endm @beq macro @u db 0f0h,@u-$-1 endm @bit macro @u if @u<256 db 24h,@u else db 2ch dw @u endif endm @bmi macro @u db 30h,@u-$-1 endm @bne macro @u db 0d0h,@u-$-1 endm @bpl macro @u db 10h,@u-$-1 endm @brk macro db 00h endm @bvc macro @u db 50h,@u-$-1 endm @bvs macro @u db 70h,@u-$-1 endm @clc macro db 018h endm @cld macro db 0d8h endm @cli macro db 058h endm @clv macro db 0b8h endm @cmp macro @u,@v xaaa 0c1h,@u,@v endm @cpx macro @u,@v xcc 0e0h,@u,@v endm @cpy macro @u,@v xcc 0c0h,@u,@v endm @dec macro @u,@v xbb 0c6h,@u,@v endm @dex macro db 0cah endm @dey macro db 088h endm @eor macro @u,@v xaaa 41h,@u,@v endm @inc macro @u,@v xbb 0e6h,@u,@v endm @inx macro db 0e8h endm @iny macro db 0c8h endm @jmp macro @u @A set 0 irpc @X,@u if '&@X'='(' @A set 20h endif endm db 4ch+@A dw @U endm @jsr macro @u db 20h dw @u endm @lda macro @u,@v xaaa 0a1h,@u,@v endm @ldx macro @u,@v xddd 0a2h,@u,@v endm @ldy macro @u,@v xddd 0a0h,@u,@v endm @lsr macro @u,@v xbbb 42h,@u,@v endm @nop macro db 0eah endm @ora macro @u,@v xaaa 1,@u,@v endm @pha macro db 048h endm @php macro db 008h endm @pla macro db 068h endm @plp macro db 028h endm @rol macro @u,@v xbbb 22h,@u,@v endm @ror macro @u,@v xbbb 62h,@u,@v endm @rti macro db 040h endm @rts macro db 060h endm @sbc macro @u,@v xaaa 0e1h,@u,@v endm @sec macro db 038h endm @sed macro db 0f8h endm @sei macro db 078h endm @sta macro @u,@v xaaa 81h,@u,@v endm @stx macro @u,@v xbb 86h,@u,@v endm @sty macro @u,@v xbb 84h,@u,@v endm @tax macro db 0aah endm @tay macro db 0a8h endm @tsx macro db 0bah endm @txa macro db 08ah endm @txs macro db 09ah endm @tya macro db 098h endm @skip1 macro db 024h endm @skip2 macro db 02ch endm