cpu 6309 list macro listing on endm nolist macro listing off endm db macro op byt (op) endm fcb macro op byt (op) endm fcc macro op byt (op) endm dw macro op adr (op) endm fdb macro op adr (op) endm fcw macro op adr (op) endm ds macro op dfs (op) endm rmb macro op rept op db 0 endm endm dd macro op adr (op)>>16,(op)&$ffff endm fcd macro op adr (op)>>16,(op)&$ffff endm direct macro num if num=-1 assume dpr:nothing elseif num>255 assume dpr:num>>8 elseif assume dpr:num endif endm page macro newpage endm opt macro endm noopt macro endm nop macro cnt if "CNT"="" __cnt set 1 elseif __cnt set cnt endif rept __cnt !nop endm endm momseg set 0 segsave_code set 0 segsave_data set 0 segsave_bss set 0 saveseg macro switch momseg case 0 segsave_code set * case 1 segsave_data set * case 2 segsave_bss set * endcase endm data macro saveseg org segsave_data momseg set 1 endm code macro saveseg org segsave_code momseg set 0 endm bss macro saveseg org segsave_bss momseg set 2 endm ;-------------------------------------------------------------------------- ; <:t17,25,41,45:> ; +=====================================================================+ ; | | ; | TESTCASE.A09 | ; | | ; | Test case for 6809/6309 assembler. | ; | | ; | Copyright 1993, Frank A. Vorstenbosch | ; | | ; +=====================================================================+ ; ; File created 13-oct-93 title "Test case for 6809/6309 assembler" list ; +---------------------------------------------------------------------+ ; | | ; | Options. | ; | | ; +---------------------------------------------------------------------+ ; -dERRORS check error handling ; -n disable optimizations ; +---------------------------------------------------------------------+ ; | | ; | Assembler pseudo instructions. | ; | | ; +---------------------------------------------------------------------+ ; ----- expressions ----------------------------------------------------- data org 4 bss org 1634 TEST equ 2+*/2 ifdef ERRORS TEST equ TEST+1 endif Constant8 equ -43 Constant16 equ 16383 Constant32 equ 96285725 Address equ $bb5a ANOTHER set 3|24&8 ANOTHER set (3|24)&8 ANOTHER set 4*(3>5) ANOTHER set 4*~~(3<5) ANOTHER set 15<<4 ANOTHER set ANOTHER+1 ANOTHER set ANOTHER+1 ; shorthand for SET CHAR equ "a" DOUBLECHAR equ "xy" QUADCHAR equ "quad" ifdef ERRORS TRIPLE equ "abc" TOOMUCH equ "abcde" endif data AddressFour dw TEST dw **5 org $800 direct $8 direct $0800 ds 14 DirectByte db 123 align 32 DirectWord dw 12345 align 48 DirectLong dd 123456789 align 79 DirectCode rts dw 1234#12 dw %1010100101 dw (1+2)#8 dw 1010101#%1010101 bss Unin_1 db 0 Unin_2 dw 4256 Unin_3 dd 34568957 code org $200 page ifdef ERRORS 1 equ 123 psscht ! endif ; ----- range checking on immediate values ------------------------------ lda #10 lda #100 ifdef ERRORS lda #1000 lda #10000 lda #100000 lda #1000000 lda #10000000 lda #100000000 lda #1000000000 endif ldx #10 ldx #100 ldx #1000 ldx #10000 ifdef ERRORS ldx #100000 ldx #1000000 ldx #10000000 ldx #100000000 ldx #1000000000 endif ifdef __6309__ ldq #10 ldq #100 ldq #1000 ldq #10000 ldq #100000 ldq #1000000 ldq #10000000 ldq #100000000 ldq #1000000000 endif page 10 ; keep 10 lines togethre ; ----- align ----------------------------------------------------------- align 16 align 32 ; ----- code, data, org ------------------------------------------------- code org $1300 data org $1180 code lda #1 data Table db 1,2,3 code ldx #Table ; ----- db, fcb, fcc ---------------------------------------------------- Message1 db 7,"Error",13,10,0 Message2 fcb 7 fcc "Error" fcb 13,10,0 ; ----- ds, rmb --------------------------------------------------------- ds 10 rmb 10 ; ----- dw, fcw, fdb ---------------------------------------------------- dw 23457 fcw 13462 fdb 6235 ; ----- if ... else ... endif ------------------------------------------- if 5=6 db 0 if 0 db 1 else db 2 endif db 3 else db 4 if 1 db 5 else db 6 endif db 7 endif ; ----- list, nolist ---------------------------------------------------- nolist ; comment not listed db 10 list ; comment is listed db 10 ; ----- opt, noopt ------------------------------------------------------ noopt opt ; ----- nop ------------------------------------------------------------- nop nop 3 ; ----- struct ---------------------------------------------------------- ; struct ListNode ; dw LN_Next ; dw LN_Previous ; db LN_Type ; end struct ; ----- number bases ---------------------------------------------------- dd 1 dd 10 dd 100 dd 1000 dd $1 dd $10 dd $100 dd $1000 dd %1 dd %10 dd %100 dd %1000 dd @1 dd @10 dd @100 dd @1000 dd 2#1 dd 2#10 dd 2#100 dd 2#1000 dd 3#1 dd 3#10 dd 3#100 dd 3#1000 dd 3#12 dd 4#1 dd 4#10 dd 4#100 dd 4#1000 dd 4#123 dd 5#1 dd 5#10 dd 5#100 dd 5#1000 dd 5#1234 dd 6#1 dd 6#10 dd 6#100 dd 6#1000 dd 6#2345 dd 7#1 dd 7#10 dd 7#100 dd 7#1000 dd 7#3456 dd 8#1 dd 8#10 dd 8#100 dd 8#1000 dd 8#4567 dd 9#1 dd 9#10 dd 9#100 dd 9#1000 dd 9#5678 dd 10#1 dd 10#10 dd 10#100 dd 10#1000 dd 10#6789 dd 11#1 dd 11#10 dd 11#100 dd 11#1000 ; dd 11#789a dd 12#1 dd 12#10 dd 12#100 dd 12#1000 ; dd 12#89ab dd 13#1 dd 13#10 dd 13#100 dd 13#1000 ; dd 13#9abc dd 14#1 dd 14#10 dd 14#100 dd 14#1000 ; dd 14#abcd dd 15#1 dd 15#10 dd 15#100 dd 15#1000 ; dd 15#bcde dd 16#1 dd 16#10 dd 16#100 dd 16#1000 ; dd 16#cdef dd 17#1 dd 17#10 dd 17#100 dd 17#1000 ; dd 17#defg dd 18#1 dd 18#10 dd 18#100 dd 18#1000 ; dd 18#efgh dd 19#1 dd 19#10 dd 19#100 dd 19#1000 ; dd 19#fghi dd 20#1 dd 20#10 dd 20#100 dd 20#1000 ; dd 20#ghij dd 21#1 dd 21#10 dd 21#100 dd 21#1000 ; dd 21#hijk dd 22#1 dd 22#10 dd 22#100 dd 22#1000 ; dd 22#ijkl dd 23#1 dd 23#10 dd 23#100 dd 23#1000 ; dd 23#jklm dd 24#1 dd 24#10 dd 24#100 dd 24#1000 ; dd 24#klmn dd 25#1 dd 25#10 dd 25#100 dd 25#1000 ; dd 25#lmno dd 26#1 dd 26#10 dd 26#100 dd 26#1000 ; dd 26#mnop dd 27#1 dd 27#10 dd 27#100 dd 27#1000 ; dd 27#nopq dd 28#1 dd 28#10 dd 28#100 dd 28#1000 ; dd 28#opqr dd 29#1 dd 29#10 dd 29#100 dd 29#1000 ; dd 29#pqrs dd 30#1 dd 30#10 dd 30#100 dd 30#1000 ; dd 30#qrst dd 31#1 dd 31#10 dd 31#100 dd 31#1000 ; dd 31#rstu dd 32#1 dd 32#10 dd 32#100 dd 32#1000 ; dd 32#stuv dd 33#1 dd 33#10 dd 33#100 dd 33#1000 ; dd 33#tuvw dd 34#1 dd 34#10 dd 34#100 dd 34#1000 ; dd 34#uvwx dd 35#1 dd 35#10 dd 35#100 dd 35#1000 ; dd 35#vwxy dd 36#1 dd 36#10 dd 36#100 dd 36#1000 ; dd 36#wxyz ifdef ERRORS dd 37#1 dd 37#10 dd 37#100 dd 37#1000 dd 1#1 dd 1#10 dd 1#100 dd 1#1000 dd 0#1 dd 0#10 dd 0#100 dd 0#1000 endif ; ----- garbage in inactive if-clause ----------------------------------- if 0 !"#$%&'()*+,-./ 0123456789:;<=>? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{|}~ ||+ -+= endif ; +=====================================================================+ ; | | ; | Instructions. | ; | | ; ===================================================================== ; --------------------------------------------------------------------- ; | | ; | Register to register operations. | ; | | ; --------------------------------------------------------------------- Start tfr a,a ; NOP tfr a,b tfr a,cc tfr a,ccr tfr a,dp tfr a,dpr tfr b,a tfr b,b ; NOP tfr b,cc tfr b,ccr tfr b,dp tfr b,dpr tfr d,d ; NOP tfr d,x tfr d,y tfr d,u tfr d,s tfr d,sp tfr x,d tfr x,x ; NOP tfr x,y tfr x,u tfr x,s tfr x,sp tfr y,d tfr y,x tfr y,y ; NOP tfr y,u tfr y,s tfr y,sp tfr u,d tfr u,x tfr u,y tfr u,u ; NOP tfr u,s tfr u,sp tfr s,d tfr s,x tfr s,y tfr s,u tfr s,s ; NOP tfr s,sp ; NOP tfr sp,d tfr sp,x tfr sp,y tfr sp,u tfr sp,s ; NOP tfr sp,sp ; NOP tfr pc,d tfr pc,x tfr pc,y tfr pc,u tfr pc,s tfr pc,sp ifdef __6309__ tfr a,e tfr a,f tfr b,e tfr b,f tfr e,a tfr e,b tfr e,cc tfr e,ccr tfr e,dp tfr e,dpr tfr e,e ; NOP tfr e,f tfr f,a tfr f,b tfr f,cc tfr f,ccr tfr f,dp tfr f,dpr tfr f,e tfr f,f ; NOP tfr d,v tfr d,w tfr v,d tfr v,v ; NOP tfr v,w tfr v,x tfr v,y tfr v,u tfr v,s tfr v,sp tfr w,d tfr w,v tfr w,w ; NOP tfr w,x tfr w,y tfr w,u tfr w,s tfr w,sp tfr x,v tfr x,w tfr y,v tfr y,w tfr u,v tfr u,w tfr s,v tfr s,w tfr pc,v tfr pc,w tfr z,a tfr z,b tfr z,cc tfr z,ccr tfr z,dp tfr z,dpr tfr z,e tfr z,f tfr z,d tfr z,v tfr z,w tfr z,x tfr z,y tfr z,u tfr z,s tfr z,sp tfr a,z tfr b,z tfr cc,z tfr ccr,z tfr dp,z tfr dpr,z tfr e,z tfr f,z tfr d,z tfr v,z tfr w,z tfr x,z tfr y,z tfr u,z tfr s,z tfr sp,z tfr pc,z endif ifdef ERRORS tfm a,b tfr a,d tfr a,v tfr a,w tfr a,x tfr a,y tfr a,u tfr a,s tfr a,sp tfr b,d tfr b,v tfr b,w tfr b,x tfr b,y tfr b,u tfr b,s tfr b,sp endif ; +---------------------------------------------------------------------+ ; | | ; | Addressing modes. | ; | | ; +---------------------------------------------------------------------+ lda #0 lda DirectByte lda >DirectByte lda AddressFour ifdef ERRORS lda 0,x lda 1,x lda <1,x lda <<1,x lda >1,x lda 15,x lda -16,x lda 16,x lda -17,x lda 127,x lda -128,x lda 128,x lda -129,x lda FORWARD5,x lda NearData,pc] lda [AddressFour,pc] ifdef ERRORS lda [