10
20
30 :
40 outfile$="6809"
50 ON ERROR REPORT:PRINT " at line ";ERL:END
60 IF HIMEM>&FFFF:SYS "OS_GetEnv"TOA$:IFLEFT$(A$,5)<>"B6809":OSCLI"B6809"+MID$(A$,INSTR(A$," "))
70 :
80 dp=&12
90 imm=&34
100 ext=&5678
110 n16=&9ABC
120 load%=&8000
130 DIM mcode% &1000
140 :
150
160
170
180
190
200
210
220
230
240 :
250 FOR opt%=4 TO 7 STEP 3
260 P%=load%:O%=mcode%
270 [OPT opt%
280 .exec%
290
300 \ comment
310 :
320 :
330 NEG <dp
340 EQUB &01
350 EQUB &02
360 COM <dp
370 LSR <dp
380 EQUB &05
390 ROR <dp
400 ASR <dp
410 ASL <dp
420 ROL <dp
430 DEC <dp
440 EQUB &0B
450 INC <dp
460 TST <dp
470 JMP <dp
480 CLR <dp
490
500 EQUB &10
510 EQUB &11
520 NOP
530 SYNC
540 EQUB &14
550 EQUB &15
560 LBRA rel16
570 LBSR rel16
580 EQUB &18
590 DAA
600 ORCC #imm
610 EQUB &1B
620 ANDCC #imm
630 SEX
640
650 EXG X,Y
660 EXG Y,U
670 EXG U,S
680 EXG S,X
690 EXG A,B
700 EXG B,CC
710 EXG CC,DP
720 EXG DP,A
730
740 TFR X,Y
750 TFR Y,U
760 TFR U,S
770 TFR S,X
780 TFR A,B
790 TFR B,CC
800 TFR CC,DP
810 TFR DP,A
820 .rel16
830
840 BRA rel8
850 BRN rel8
860 BHI rel8
870 BLS rel8
880 BCC rel8
890 BCS rel8
900 BNE rel8
910 BEQ rel8
920 BVC rel8
930 BVS rel8
940 BPL rel8
950 BMI rel8
960 BGE rel8
970 BLT rel8
980 BGT rel8
990 BLE rel8
1000 .rel8
1010
1020
1030 LEAX -9,X
1040 LEAY -5,Y
1050 LEAS 5,U
1060 LEAU 9,S
1070
1080 PSHS CC
1090 PSHS CC,A
1100 PSHS CC,A,B
1110 PSHS CC,A,B,DP
1120 PSHS CC,A,B,DP,X
1130 PSHS CC,A,B,DP,X,Y
1140 PSHS CC,A,B,DP,X,Y,S
1150 PSHS CC,A,B,DP,X,Y,S,PC
1160
1170 PULS CC
1180 PULS CC,A
1190 PULS CC,A,B
1200 PULS CC,A,B,DP
1210 PULS CC,A,B,DP,X
1220 PULS CC,A,B,DP,X,Y
1230 PULS CC,A,B,DP,X,Y,S
1240 PULS CC,A,B,DP,X,Y,S,PC
1250
1260 PSHU CC
1270 PSHU CC,A
1280 PSHU CC,A,B
1290 PSHU CC,A,B,DP
1300 PSHU CC,A,B,DP,X
1310 PSHU CC,A,B,DP,X,Y
1320 PSHU CC,A,B,DP,X,Y,S
1330 PSHU CC,A,B,DP,X,Y,S,PC
1340
1350 PULU CC
1360 PULU CC,A
1370 PULU CC,A,B
1380 PULU CC,A,B,DP
1390 PULU CC,A,B,DP,X
1400 PULU CC,A,B,DP,X,Y
1410 PULU CC,A,B,DP,X,Y,S
1420 PULU CC,A,B,DP,X,Y,S,PC
1430
1440 EQUB &38
1450 RTS
1460 ABX
1470 RTI
1480 CWAI #imm
1490 MUL
1500 EQUB &3E
1510 SWI
1520
1530 NEGA
1540 EQUB &41
1550 EQUB &42
1560 COMA
1570 LSRA
1580 EQUB &45
1590 RORA
1600 ASRA
1610 ASLA
1620 ROLA
1630 DECA
1640 EQUB &4B
1650 INCA
1660 TSTA
1670 EQUB &4E
1680 CLRA
1690
1700 NEGB
1710 EQUB &51
1720 EQUB &52
1730 COMB
1740 LSRB
1750 EQUB &55
1760 RORB
1770 ASRB
1780 ASLB
1790 ROLB
1800 DECB
1810 EQUB &5B
1820 INCB
1830 TSTB
1840 EQUB &5E
1850 CLRB
1860
1870
1880 NEG ,X+
1890
1900
1910 COM ,Y+
1920 LSR ,U+
1930
1940 ROR ,S+
1950
1960
1970 ASR ,X++
1980 ASL ,Y++
1990 ROL ,U++
2000 DEC ,S++
2010
2020
2030
2040 INC ,-X
2050 TST ,-Y
2060 JMP ,-U
2070 CLR ,-S
2080
2090 NEG >ext
2100 EQUB &71
2110 EQUB &72
2120 COM >ext
2130 LSR >ext
2140 EQUB &75
2150 ROR >ext
2160 ASR >ext
2170 ASL >ext
2180 ROL >ext
2190 DEC >ext
2200 EQUB &7B
2210 INC >ext
2220 TST >ext
2230 JMP >ext
2240 CLR >ext
2250
2260 SUBA #imm
2270 CMPA #imm
2280 SBCA #imm
2290 SUBD #n16
2300 ANDA #imm
2310 BITA #imm
2320 LDA #imm
2330 EQUB &87
2340 EORA #imm
2350 ADCA #imm
2360 ORA #imm
2370 ADDA #imm
2380 CMPX #n16
2390 BSR rel8
2400 LDX #n16
2410 EQUB &8F
2420
2430 SUBA <dp
2440 CMPA <dp
2450 SBCA <dp
2460 SUBD <dp
2470 ANDA <dp
2480 BITA <dp
2490 LDA <dp
2500 STA <dp
2510 EORA <dp
2520 ADCA <dp
2530 ORA <dp
2540 ADDA <dp
2550 CMPX <dp
2560 JSR <dp
2570 LDX <dp
2580 STX <dp
2590
2600
2610 SUBA ,--X
2620 CMPA ,--Y
2630 SBCA ,--U
2640 SUBD ,--S
2650
2660
2670 ANDA ,X
2680 BITA ,Y
2690 LDA ,U
2700 STA ,S
2710
2720
2730 EORA B,X
2740 ADCA B,Y
2750 ORA B,U
2760 ADDA B,S
2770
2780
2790 CMPX A,X
2800 JSR A,Y
2810 LDX A,U
2820 STX A,S
2830
2840 SUBA >ext
2850 CMPA >ext
2860 SBCA >ext
2870 SUBD >ext
2880 ANDA >ext
2890 BITA >ext
2900 LDA >ext
2910 STA >ext
2920 EORA >ext
2930 ADCA >ext
2940 ORA >ext
2950 ADDA >ext
2960 CMPX >ext
2970 JSR >ext
2980 LDX >ext
2990 STX >ext
3000
3010 SUBB #imm
3020 CMPB #imm
3030 SBCB #imm
3040 ADDD #n16
3050 ANDB #imm
3060 BITB #imm
3070 LDB #imm
3080 EQUB &C7
3090 EORB #imm
3100 ADCB #imm
3110 ORB #imm
3120 ADDB #imm
3130 LDD #n16
3140 EQUB &CD
3150 LDU #n16
3160 EQUB &CF
3170
3180 SUBB <dp
3190 CMPB <dp
3200 SBCB <dp
3210 ADDD <dp
3220 ANDB <dp
3230 BITB <dp
3240 LDB <dp
3250 STB <dp
3260 EORB <dp
3270 ADCB <dp
3280 ORB <dp
3290 ADDB <dp
3300 LDD <dp
3310 STD <dp
3320 LDU <dp
3330 STU <dp
3340
3350
3360
3370 SUBB -64,X
3380 CMPB -32,Y
3390 SBCB 32,U
3400 ADDD 64,S
3410
3420
3430 ANDB -6400,X
3440 BITB -3200,Y
3450 LDB 3200,U
3460 STB 6400,Y
3470
3480
3490
3500 EORB D,X
3510 ADCB D,Y
3520 ORB D,U
3530 ADDB D,S
3540
3550
3560 .near1
3570 LDD near2,PCR
3580 STD near2,PCR
3590 LDU near1,PCR
3600 STU near1,PCR
3610 .near2
3620
3630
3640 LDD &2000,PCR
3650 STD &4000,PCR
3660 LDU &C000,PCR
3670 STU &E000,PCR
3680
3690 SUBB >ext
3700 CMPB >ext
3710 SBCB >ext
3720 ADDD >ext
3730 ANDB >ext
3740 BITB >ext
3750 LDB >ext
3760 STB >ext
3770 EORB >ext
3780 ADCB >ext
3790 ORB >ext
3800 ADDB >ext
3810 LDD >ext
3820 STD >ext
3830 LDU >ext
3840 STU >ext
3850
3860
3870
3880 LDA [,X++] ; A6 91
3890 LDA [,Y++] ; A6 B1
3900 LDA [,U++] ; A6 D1
3910 LDA [,S++] ; A6 F1
3920 ;
3930 ; 1rr10011 [,--R]
3940 LDA [,--X] ; A6 93
3950 LDA [,--Y] ; A6 B3
3960 LDA [,--U] ; A6 D3
3970 LDA [,--S] ; A6 F3
3980 ;
3990 ; 1rr10100 [,R]
4000 LDA [,X] ; A6 94
4010 LDA [,Y] ; A6 B4
4020 LDA [,U] ; A6 D4
4030 LDA [,S] ; A6 F4
4040 ;
4050 ; 1rr10101 [B,R]
4060 LDA [B,X] ; A6 95
4070 LDA [B,Y] ; A6 B5
4080 LDA [B,U] ; A6 D5
4090 LDA [B,S] ; A6 F5
4100 ;
4110 ; 1rr10110 [A,R]
4120 LDA [A,X] ; A6 96
4130 LDA [A,Y] ; A6 B6
4140 LDA [A,U] ; A6 D6
4150 LDA [A,S] ; A6 F6
4160 ;
4170 ; 1rr11000 nn [n,R]
4180 LDA [-64,X] ; A6 98 C0
4190 LDA [-32,Y] ; A6 B8 E0
4200 LDA [32,U] ; A6 D8 20
4210 LDA [64,S] ; A6 F8 40
4220 ;
4230 ; 1rr11001 hh ll [n16,R]
4240 LDA [-6400,X] ; A6 99 xx xx
4250 LDA [-3200,Y] ; A6 B9 xx xx
4260 LDA [3200,U] ; A6 D9 0C 80
4270 LDA [6400,S] ; A6 F9 19 00
4280 ;
4290 ; 1rr11011 [D,R]
4300 LDA [D,X] ; A6 9B
4310 LDA [D,Y] ; A6 BB
4320 LDA [D,U] ; A6 DB
4330 LDA [D,S] ; A6 FB
4340 ;
4350 ; 10011100 nn [n,PCR]
4360 .near3
4370 LDA [near4,PCR] ; A6 9C 09
4380 LDA [near4,PCR] ; A6 BC 06
4390 LDA [near3,PCR] ; A6 DC F7
4400 LDA [near3,PCR] ; A6 FC F4
4410 .near4
4420 ;
4430 ; 10011101 hh ll [n16,PCR]
4440 LDA [&2000,PCR] ; A6 9D hi lo
4450 LDA [&4000,PCR] ; A6 BD hi lo
4460 LDA [&C000,PCR] ; A6 DD hi lo
4470 LDA [&E000,PCR] ; A6 FD hi lo
4480 ;
4490 ; 10011111 hh ll [n16]
4500 LDA [&4000] ; A6 9F 40 00
4510 LDA [&8000] ; A6 BF 80 00
4520 LDA [&C000] ; A6 DF C0 00
4530 LDA [&E000] ; A6 FF E0 00
4540 ;
4550 ;
4560 ; 10 PREFIX
4570 ; ---------
4580 EQUW &2010 ; 10 20 - LBRA rel16 -> 16 xx xx
4590 LBRN rel16 ; 10 21
4600 LBHI rel16 ; 10 22
4610 LBLS rel16 ; 10 23
4620 LBCC rel16 ; 10 24
4630 LBCS rel16 ; 10 25
4640 LBNE rel16 ; 10 26
4650 LBEQ rel16 ; 10 27
4660 LBVC rel16 ; 10 28
4670 LBVS rel16 ; 10 29
4680 LBPL rel16 ; 10 2A
4690 LBMI rel16 ; 10 2B
4700 LBGE rel16 ; 10 2C
4710 LBLT rel16 ; 10 2D
4720 LBGT rel16 ; 10 2E
4730 LBLE rel16 ; 10 2F
4740 ;
4750 SWI2 ; 10 3F
4760 ;
4770 CMPD #n16 ; 10 83
4780 CMPY #n16 ; 10 8C
4790 LDY #n16 ; 10 8E
4800 CMPD <dp ; 10 93
4810 CMPY <dp ; 10 9C
4820 LDY <dp ; 10 9E
4830 STY <dp ; 10 9F
4840 ;CMPD idx ; 10 A3
4850 ;CMPY idx ; 10 AC
4860 ;LDY idx ; 10 AE
4870 ;STY idx ; 10 AF
4880 CMPD >ext ; 10 B3
4890 CMPY >ext ; 10 BC
4900 LDY >ext ; 10 BE
4910 LDS >ext ; 10 BF
4920 LDS #n16 ; 10 CE
4930 LDS <dp ; 10 DE
4940 STS <dp ; 10 DF
4950 ;LDS idx ; 10 EE
4960 ;STS idx ; 10 EF
4970 LDS >ext ; 10 FE
4980 STS >ext ; 10 FF
4990 ;
5000 ; 11 PREFIX
5010 ; ---------
5020 SWI3 ; 11 3F
5030 CMPU #n16 ; 11 83
5040 CMPS #n16 ; 11 8C
5050 CMPU <dp ; 11 93
5060 CMPS <dp ; 11 9C
5070 ;CMPU idx ; 11 A3
5080 ;CMPS idx ; 11 AC
5090 CMPU >ext ; 11 B3
5100 CMPS >ext ; 11 BC
5110 ;
5120 DCB &12 ; 12
5130 DCW &1234 ; 12 34
5140 DCD &12345678 ; 12 34 56 78
5150 ;
5160 EQUB &12 ; 12
5170 EQUW &1234 ; 34 12
5180 EQUD &12345678 ; 78 56 34 12
5190 EQUS "HELLO WORLD"
5200 SWI:EQUB 254:EQUS "Bad command":EQUB 0
5210 SWI:DCB 254:EQUS "Bad command":DCB 0 ; DCS?
5220 ;
5230 ;
5240 ;
5250 ; #imm - 8bit immediate number
5260 ; #n16 - 16bit immediate number
5270 ; #n32 - 32bit immediate number
5280 ; <dp - 8bit direct page address
5290 ; >ext - 16bit absolute address
5300 ; rel - 8bit relative offset
5310 ; rel16 - 16bit relative offset
5320 ; regs - register map
5330 ; idx - indexed addressing mode, see next table
5340 ; r0,r1 - next byte contains <r0,r1>
5350 ; Opcodes in lower case in the above list are 'undocumented'.
5360 ;
5370 ; Indexed (idx) addressing mode
5380 ; -----------------------------
5390 ; Specified by a post-byte, after the opcode and before any additional data.
5400 ;
5410 ; postbyte data assembler postbyte data assembler
5420 ; 0rrnnnnn n,R |
5430 ; 1rr00000 ,R+ | 1??10000
5440 ; 1rr00001 ,R++ | 1rr10001 [,R++]
5450 ; 1rr00010 ,-R | 1??10010
5460 ; 1rr00011 ,--R | 1rr10011 [,--R]
5470 ; 1rr00100 ,R | 1rr10100 [,R]
5480 ; 1rr00101 B,R | 1rr10101 [B,R]
5490 ; 1rr00110 A,R | 1rr10110 [A,R]
5500 ; 1??00111 | 1??10111
5510 ; 1rr01000 nn n,R | 1rr11000 nn [n,R]
5520 ; 1rr01001 hh ll n16,R | 1rr11001 hh ll [n16,R]
5530 ; 1??01010 | 1??11010
5540 ; 1rr01011 D,R | 1rr11011 [D,R]
5550 ; 1xx01100 nn n,PCR | 1xx11100 nn [n,PCR]
5560 ; 1xx01101 hh ll n16,PCR | 1xx11101 hh ll [n16,PCR]
5570 ; 1??01110 | 1??11110
5580 ; 1??01111 | 10011111 hh ll [n16]
5590 ; | 10111111
5600 ; | 11011111
5610 ; | 11111111
5620 ; rr=00,01,10,11 for R=X,Y,U,S
5630 ;
5640 ; Other notes
5650 ; -----------
5660 ; The only difference between the 6809 and the 6809e is the pinouts. The
5670 ; instruction set is the same:
5680 ; 6809 Halt, XTAL, >EXTAL, Reset, MRDY, Q, E, DMA/BREQ
5690 ; 6809e Halt, TSC, LIC, Reset, AVMA, Q, E, Busy
5700 ;
5710 ; The 6309 is a further develpment by Hitatchi with more instructions and
5720 ; registers.
5730 ;
5740 ; The 68xx series are bigendian, that is, multibyte values are stored in
5750 ; memory with the most significant byte first.
5760
5770
5780
5790
5800 .end% \ End of all code
5810 ]
5820 NEXT
5830 A$="SAVE "+outfile$+" "+STR$~mcode%+"+"+STR$~(O%-mcode%)+" "+STR$~exec%+" "+STR$~load%
5840 PRINT A$;:OSCLI A$:PRINT
5850 END