1
2
3
4
5		seg	code
6		org	0x1000
7
8reset:
9
10; test all of the inherent instructions
11;
12		aba			; 1B
13		abx			; 3A
14		aby			; 18 3A
15		asla			; 48
16		aslb			; 58
17		asld			; 05
18		asra			; 47
19		asrb			; 57
20		cba			; 11
21		clc			; 0C
22		cli			; 0E
23		clra			; 4F
24		clrb			; 5F
25		clv			; 0A
26		coma			; 43
27		comb			; 53
28		daa			; 19
29		deca			; 4A
30		decb			; 5A
31		des			; 34
32		dex			; 09
33		dey			; 18 09
34		fdiv			; 03
35		idiv			; 02
36		inca			; 4C
37		incb			; 5C
38		ins			; 31
39		inx			; 08
40		iny			; 18 08
41		lsla			; 48
42		lslb			; 58
43		lsld			; 05
44		lsra			; 44
45		lsrb			; 54
46		lsrd			; 04
47		mul			; 3D
48		nega			; 40
49		negb			; 50
50		nop			; 01
51		psha			; 36
52		pshb			; 37
53		pshx			; 3C
54		pshy			; 18 3C
55		pula			; 32
56		pulb			; 33
57		pulx			; 38
58		puly			; 18 38
59		rola			; 49
60		rolb			; 59
61		rora			; 46
62		rorb			; 56
63		rti			; 3B
64		rts			; 39
65		sba			; 10
66		sec			; 0D
67		sei			; 0F
68		sev			; 0B
69		stop			; CF
70		swi			; 3F
71		tab			; 16
72		tap			; 06
73		tba			; 17
74		test			; 00
75		tpa			; 07
76		tsta			; 4D
77		tstb			; 5D
78		tsx			; 30
79		tsy			; 18 30
80		txs			; 35
81		tys			; 18 35
82		wai			; 3E
83		xgdx			; 8F
84		xgdy			; 18 8F
85
86; test the 8 bit immediate instructions
87
88		adca	#0xab		; 89 ii
89		adcb	#0xab		; C9 ii
90		adda	#0xab		; 8B ii
91		addb	#0xab		; CB ii
92		anda	#0xab		; 84 ii
93		andb	#0xab		; C4 ii
94		bita	#0xab		; 85 ii
95		bitb	#0xab		; C5 ii
96		cmpa	#0xab		; 81 ii
97		cmpb	#0xab		; C1 ii
98		eora	#0xab		; 88 ii
99		eorb	#0xab		; C8 ii
100		ldaa	#0xab		; 86 ii
101		ldab	#0xab		; C6 ii
102		oraa	#0xab		; 8A ii
103		orab	#0xab		; CA ii
104		sbca	#0xab		; 82 ii
105		sbcb	#0xab		; C2 ii
106		suba	#0xab		; 80 ii
107		subb	#0xab		; C0 ii
108
109
110
111
112; test the 16 bit immediate instructions
113
114		addd	#0xabcd		; C3 jj kk
115		cpd	#0xabcd		; 1A 83 jj kk
116		cpx	#0xabcd		; 8C jj kk
117		cpy	#0xabcd		; 18 8C jj kk
118		ldd	#0xabcd		; CC jj kk
119		lds	#0xabcd		; 8E jj kk
120		ldx	#0xabcd		; CE jj kk
121		ldy	#0xabcd		; 18 CE jj kk
122		subd	#0xabcd		; 83 jj kk
123
124
125; test the direct instructions
126
127		adca	0xab		; 99 dd
128		adcb	0xab		; D9 dd
129		adda	0xab		; 9B dd
130		addb	0xab		; DB dd
131		addd	0xab		; D3 dd
132		anda	0xab		; 94 dd
133		andb	0xab		; D4 dd
134		bita	0xab		; 95 dd
135		bitb	0xab		; D5 dd
136		cmpa	0xab		; 91 dd
137		cmpb	0xab		; D1 dd
138		cpd	0xab		; 1A 93 dd
139		cpx	0xab		; 9C dd
140		cpy	0xab		; 18 9C dd
141		eora	0xab		; 98 dd
142		eorb	0xab		; D8 dd
143		jsr	0xab		; 9D dd
144		ldaa	0xab		; 96 dd
145		ldab	0xab		; D6 dd
146		ldd	0xab		; DC dd
147		lds	0xab		; 9E dd
148		ldx	0xab		; DE dd
149		ldy	0xab		; 18 DE dd
150		oraa	0xab		; 9A dd
151		orab	0xab		; DA dd
152		sbca	0xab		; 92 dd
153		sbcb	0xab		; D2 dd
154		staa	0xab		; 97 dd
155		stab	0xab		; D7 dd
156		std	0xab		; DD dd
157		sts	0xab		; 9F dd
158		stx	0xab		; DF dd
159		sty	0xab		; 18 DF dd
160		suba	0xab		; 90 dd
161		subb	0xab		; D0 dd
162		subd	0xab		; 93 dd
163
164
165; test the extended instructions
166
167		adca	0xabcd		; B9 hh ll
168		adcb	0xabcd		; F9 hh ll
169		adda	0xabcd		; BB hh ll
170		addb	0xabcd		; FB hh ll
171		addd	0xabcd		; F3 hh ll
172		anda	0xabcd		; B4 hh ll
173		andb	0xabcd		; F4 hh ll
174		asl	0xabcd		; 78 hh ll
175		asr	0xabcd		; 77 hh ll
176		bita	0xabcd		; B5 hh ll
177		bitb	0xabcd		; F5 hh ll
178		clr	0xabcd		; 7F hh ll
179		cmpa	0xabcd		; B1 hh ll
180		cmpb	0xabcd		; F1 hh ll
181		com	0xabcd		; 73 hh ll
182		cpd	0xabcd		; 1A B3 hh ll
183		cpx	0xabcd		; BC hh ll
184		cpy	0xabcd		; 18 BC hh ll
185		dec	0xabcd		; 7A hh ll
186		eora	0xabcd		; B8 hh ll
187		eorb	0xabcd		; F8 hh ll
188		inc	0xabcd		; 7C hh ll
189		jmp	0xabcd		; 7E hh ll
190		jsr	0xabcd		; BD hh ll
191		ldaa	0xabcd		; B6 hh ll
192		ldab	0xabcd		; F6 hh ll
193		ldd	0xabcd		; FC hh ll
194		lds	0xabcd		; BE hh ll
195		ldx	0xabcd		; FE hh ll
196		ldy	0xabcd		; 18 FE hh ll
197		lsl	0xabcd		; 78 hh ll
198		lsr	0xabcd		; 74 hh ll
199		neg	0xabcd		; 70 hh ll
200		oraa	0xabcd		; BA hh ll
201		orab	0xabcd		; FA hh ll
202		rol	0xabcd		; 79 hh ll
203		ror	0xabcd		; 76 hh ll
204		sbca	0xabcd		; B2 hh ll
205		sbcb	0xabcd		; F2 hh ll
206		staa	0xabcd		; B7 hh ll
207		stab	0xabcd		; F7 hh ll
208		std	0xabcd		; FD hh ll
209		sts	0xabcd		; BF hh ll
210		stx	0xabcd		; FF hh ll
211		sty	0xabcd		; 18 FF hh ll
212		suba	0xabcd		; B0 hh ll
213		subb	0xabcd		; F0 hh ll
214		subd	0xabcd		; B3 hh ll
215		tst	0xabcd		; 7D hh ll
216
217
218
219; test the relative instructions
220label
221		bcc	label2		; 24 rr (24)
222		bcs	label		; 25 rr (fc)
223		beq	label		; 27 rr (fa)
224		bge	label		; 2C rr (f8)
225		bgt	label		; 2E rr (f6)
226		bhi	label		; 22 rr (f4)
227		bhs	label		; 24 rr (f2)
228		ble	label		; 2F rr (f0)
229		blo	label		; 25 rr (ee)
230		bls	label		; 23 rr (ec)
231		blt	label		; 2D rr (ea)
232		bmi	label		; 2B rr (e8)
233		bne	label		; 26 rr (e6)
234		bpl	label		; 2A rr (e4)
235		bra	label2		; 20 rr (08)
236		brn	label2		; 21 rr (06)
237		bsr	label2		; 8D rr (04)
238		bvc	label2		; 28 rr (02)
239		bvs	label2		; 29 rr (00)
240
241label2
242
243
244; test indirect x instructions
245
246		addd	x		; E3 00 test the various forms
247		addd	,x		; E3 00 (these three should all be the same)
248		addd	0,x		; E3 00
249
250		adca	0xab,x		; A9 ff
251		adcb	0xab,x		; E9 ff
252		adda	0xab,x		; AB ff
253		addb	0xab,x		; EB ff
254		addd	0xab,x		; E3 ff
255		anda	0xab,x		; A4 ff
256		andb	0xab,x		; E4 ff
257		asl	0xab,x		; 68 ff
258		asr	0xab,x		; 67 ff
259		bita	0xab,x		; A5 ff
260		bitb	0xab,x		; E5 ff
261		clr	0xab,x		; 6F ff
262		cmpa	0xab,x		; A1 ff
263		cmpb	0xab,x		; E1 ff
264		com	0xab,x		; 63 ff
265		cpd	0xab,x		; 1A A3 ff
266		cpx	0xab,x		; AC ff
267		cpy	0xab,x		; 1A AC ff
268		dec	0xab,x		; 6A ff
269		eora	0xab,x		; A8 ff
270		eorb	0xab,x		; E8 ff
271		inc	0xab,x		; 6C ff
272		jmp	0xab,x		; 6E ff
273		jsr	0xab,x		; AD ff
274		ldaa	0xab,x		; A6 ff
275		ldab	0xab,x		; E6 ff
276		ldd	0xab,x		; EC ff
277		lds	0xab,x		; AE ff
278		ldx	0xab,x		; EE ff
279		ldy	0xab,x		; 1A EE ff
280		lsl	0xab,x		; 68 ff
281		lsr	0xab,x		; 64 ff
282		neg	0xab,x		; 60 ff
283		oraa	0xab,x		; AA ff
284		orab	0xab,x		; EA ff
285		rol	0xab,x		; 69 ff
286		ror	0xab,x		; 66 ff
287		sbca	0xab,x		; A2 ff
288		sbcb	0xab,x		; E2 ff
289		staa	0xab,x		; A7 ff
290		stab	0xab,x		; E7 ff
291		std	0xab,x		; ED ff
292		sts	0xab,x		; AF ff
293		stx	0xab,x		; EF ff
294		sty	0xab,x		; 1A EF ff
295		suba	0xab,x		; A0 ff
296		subb	0xab,x		; E0 ff
297		subd	0xab,x		; A3 ff
298		tst	0xab,x		; 6D ff
299
300
301
302; test indirect y instructions
303
304		addd	y		; 18 E3 00 test the various forms
305		addd	,y		; 18 E3 00 (these three should all be the same)
306		addd	0,y		; 18 E3 00
307
308		adca	0xab,y		; 18 A9 ff
309		adcb	0xab,y		; 18 E9 ff
310		adda	0xab,y		; 18 AB ff
311		addb	0xab,y		; 18 EB ff
312		addd	0xab,y		; 18 E3 ff
313		anda	0xab,y		; 18 A4 ff
314		andb	0xab,y		; 18 E4 ff
315		asl	0xab,y		; 18 68 ff
316		asr	0xab,y		; 18 67 ff
317		bita	0xab,y		; 18 A5 ff
318		bitb	0xab,y		; 18 E5 ff
319		clr	0xab,y		; 18 6F ff
320		cmpa	0xab,y		; 18 A1 ff
321		cmpb	0xab,y		; 18 E1 ff
322		com	0xab,y		; 18 63 ff
323		cpd	0xab,y		; CD A3 ff
324		cpx	0xab,y		; CD AC ff
325		cpy	0xab,y		; 18 AC ff
326		dec	0xab,y		; 18 6A ff
327		eora	0xab,y		; 18 A8 ff
328		eorb	0xab,y		; 18 E8 ff
329		inc	0xab,y		; 18 6C ff
330		jmp	0xab,y		; 18 6E ff
331		jsr	0xab,y		; 18 AD ff
332		ldaa	0xab,y		; 18 A6 ff
333		ldab	0xab,y		; 18 E6 ff
334		ldd	0xab,y		; 18 EC ff
335		lds	0xab,y		; 18 AE ff
336		ldx	0xab,y		; CD EE ff
337		ldy	0xab,y		; 18 EE ff
338		lsl	0xab,y		; 18 68 ff
339		lsr	0xab,y		; 18 64 ff
340		neg	0xab,y		; 18 60 ff
341		oraa	0xab,y		; 18 AA ff
342		orab	0xab,y		; 18 EA ff
343		rol	0xab,y		; 18 69 ff
344		ror	0xab,y		; 18 66 ff
345		sbca	0xab,y		; 18 A2 ff
346		sbcb	0xab,y		; 18 E2 ff
347		staa	0xab,y		; 18 A7 ff
348		stab	0xab,y		; 18 E7 ff
349		std	0xab,y		; 18 ED ff
350		sts	0xab,y		; 18 AF ff
351		stx	0xab,y		; CD EF ff
352		sty	0xab,y		; 18 EF ff
353		suba	0xab,y		; 18 A0 ff
354		subb	0xab,y		; 18 E0 ff
355		subd	0xab,y		; 18 A3 ff
356		tst	0xab,y		; 18 6D ff
357
358
359; test bit indexed x instructions
360
361		bclr	0xab,x,0xcd		; 1D ff mm (1D AB CD)
362		bset	0xab,x,0xcd		; 1C ff mm (1C AB CD)
363
364
365; test bit indexed y instructions
366
367		bclr	0xab,y,0xcd		; 18 1D ff mm (18 1D AB CD)
368		bset	0xab,y,0xcd		; 18 1C ff mm (18 1C AB CD)
369
370
371; test bit indexed x relative instructions
372
373		brclr	0xab,x,0xcd,label3	; 1F ff mm rr (1F AB CD 0E)
374		brset	0xab,x,0xcd,label3	; 1E ff mm rr (1E AB CD 0A)
375
376
377; test bit indexed y relative instructions
378
379		brclr	0xab,y,0xcd,label3	; 18 1F ff mm rr (18 1F AB CD 05)
380		brset	0xab,y,0xcd,label3	; 18 1E ff mm rr (18 1E AB CD 00)
381
382
383label3
384
385
386; test bit direct
387
388		bclr	0xab,0xcd		; 15 dd mm
389		bset	0xab,0xcd		; 14 dd mm
390
391
392; test bit direct relative
393
394		brclr	0xab,0xcd,label3	; 13 dd mm rr (13 AB CD F6)
395		brset	0xab,0xcd,label3	; 12 dd mm rr (12 AB CD F2)
396
397
398
399; check for proper size promotion
400
401		bita	0xff		; should fit in direct
402		bita	0x100		; too big for direct, should bump up to extended
403
404
405; check for range errors  -- these should generate fatal errors
406
407		addb	#0x100		; 8-bit immediate
408		addd	#0x10000	; 16 bit immediate
409		jsr	0x10000		; extended
410		addd	0x100,x		; indirect x
411		addd	0x100,y		; indirect y
412