0001 ; sample program for 6809 assembler 0002 ; 0003 ; program to add two multiple precision operands 0004 ; 0005 0006 0008 nbytes EQU 8 0007 0008 1000 ORG $1000 ; start at 1000H 0009 0010 ; BCD addition subroutine 0011 0012 1000 c6 08 bcd ldb #nbytes 0013 1002 be 01 00 ldx addr ; load data address 0014 1005 1c fe andcc #$0FE ; clear carry bit 0015 1007 a6 07 next lda nbytes-1,x ; start loop 0016 1009 a9 0e adca nbytes-1*2,x 0017 100b 19 daa 0018 100c a7 88 15 sta nbytes-1*3,x 0019 100f 30 1f leax -1,x 0020 1011 5a decb 0021 1012 26 f3 bne next 0022 1014 39 rts ; end of subroutine 0023 0024 ; begin main program 0025 ; (uses subroutine 'bcd') 0026 1100 ORG $1100 ; main program at 1100H 0027 1100 10 ce 01 3f lds #$013f ; initialise SP 0028 1104 be 01 02 ldx temp 0029 1107 bf 01 00 stx addr 0030 110a bd 10 00 jsr bcd 0031 110d 8e 01 0a ldx #msg ; get address of string 0032 1110 bd 11 16 jsr print ; and print it 0033 1113 12 nop 0034 1114 20 fe loop bra loop ; loop forever 0035 0036 ; dummy routine print 0037 1116 39 print rts 0038 0039 ; allocate data area 0040 0100 ORG $0100 0041 0100 00 00 addr FDB 0 0042 0102 temp RMB nbytes 0043 010a 6d 75 6c 74 69 70 msg FCC "multiplication done" 6c 69 63 61 74 69 6f 6e 20 64 6f 6e 65 0044 011d 0d 00 FCB $0D,00 0045 END Motorola S records (for downloading to microprocessor system) S1181000C608BE01001CFEA607A90E19A78815301F5A26F33974 S11A110010CE013FBE0102BF0100BD10008E010ABD11161220FE3982 S10501000000F9 S118010A6D756C7469706C69636174696F6E20646F6E650D001B S9030000FC