1
0
mirror of synced 2026-01-15 16:08:01 +00:00
2024-07-18 16:08:32 -07:00

2293 lines
94 KiB
Plaintext

;
;
; File Name : MCL6809 Opcode Tests
; Used on :
; Author : Ted Fried, MicroCore Labs
; Creation : 7/1/2024
;
; Description:
; ============
;
; MC6809 assembly program to test each opcode, flag, and addressing mode.
;
; If failures are detected, the code will immediately loop on itself.
;
; I used ASM6809.EXE to assemble the code and generate the binary.
; Please set the reset vector to 0x0000.
;
;------------------------------------------------------------------------
;
; Modification History:
; =====================
;
; Revision 1 7/1/2024
; Initial revision
;
;
;------------------------------------------------------------------------
;
; Copyright (c) 2024 Ted Fried
;
; Permission is hereby granted, free of charge, to any person obtaining a copy
; of this software and associated documentation files (the "Software"), to deal
; in the Software without restriction, including without limitation the rights
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
; copies of the Software, and to permit persons to whom the Software is
; furnished to do so, subject to the following conditions:
;
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
; SOFTWARE.
;
; Scratch workspace from 0x0000
; Test code starts at 0x2000
; System Stack starts at 0xF100
; User Stack starts at 0xF200
0000 7E2000 jmp op_LOAD_STORES
1B00 ORG 0x01B00
1B00 8600 lda #$000 ; SWI
1B02 C600 ldb #$000
1B04 8E0000 ldx #$000
1B07 108E0000 ldy #$000
1B0B 3B rti
1BA0 ORG 0x01BA0
1BA0 8600 lda #$000 ; SWI2
1BA2 C600 ldb #$000
1BA4 8E0000 ldx #$000
1BA7 108E0000 ldy #$000
1BAB 3B rti
1BB0 ORG 0x01BB0
1BB0 8600 lda #$000 ; SWI3
1BB2 C600 ldb #$000
1BB4 8E0000 ldx #$000
1BB7 108E0000 ldy #$000
1BBB 3B rti
2000 ORG 0x02000
; Test - Loads, stores using all addressing modes
; ----------------------------------------------------------------------
2000 op_LOAD_STORES
2000 12 nop
2001 12 nop
2002 12 nop
; Immediate Loads
; ----------------
2003 86AA lda #$0AA
2005 C6BB ldb #$0BB
2007 CCFACE ldd #$FACE
200A CE1234 ldu #$01234
200D 10CE5678 lds #$05678
2011 8EDEAD ldx #$0DEAD
2014 108EBEEF ldy #$0BEEF
2018 12 nop
2019 12 nop
201A 12 nop
; Populate memory with test values
; 0x1200: 12 34
; 0x1204: 12 38
; 0x1212: 88 99
; 0x1234: 12 34 56 78 DE AD BE EF
; 0x1258: 33 44 55 66
; 0x1260: 33 44
; 0x8E12: 66 77
; 0x8F38: 5A 5B
; 0x8F40: 12 34
201B 108E1200 ldy #$01200
201F 8E1234 ldx #$01234
2022 AFA4 stx ,Y
2024 108E1204 ldy #$01204
2028 8E1238 ldx #$01238
202B AFA4 stx ,Y
202D 108E1234 ldy #$01234
2031 8E1234 ldx #$01234
2034 AFA4 stx ,Y
2036 8E1236 ldx #$01236
2039 108E5678 ldy #$05678
203D 10AF84 sty ,X
2040 CE1238 ldu #$01238
2043 10CEDEAD lds #$0DEAD
2047 10EFC4 sts ,U
204A 10CE123A lds #$0123A
204E CEBEEF ldu #$0BEEF
2051 EFE4 stu ,S
2053 CE1258 ldu #$01258
2056 10CE3344 lds #$03344
205A 10EFC4 sts ,U
205D 10CE125A lds #$0125A
2061 CE5566 ldu #$05566
2064 EFE4 stu ,S
2066 10CE8F38 lds #$08F38
206A CE5A5B ldu #$05A5B
206D EFE4 stu ,S
206F 10CE8F40 lds #$08F40
2073 CE1234 ldu #$01234
2076 EFE4 stu ,S
2078 10CE8E12 lds #$08E12
207C CE6677 ldu #$06677
207F EFE4 stu ,S
2081 10CE1212 lds #$01212
2085 CE8899 ldu #$08899
2088 EFE4 stu ,S
208A CE1260 ldu #$01260
208D 10CE3344 lds #$03344
2091 10EFC4 sts ,U
2094 12 nop
2095 12 nop
2096 12 nop
; ----------------------------------------
; Test - Loads
; ----------------------------------------
; Direct
; ----------
2097 8612 lda #$012
2099 1E8B exg a,dp ; Set the Direct Page
209B SETDP 0x012 ; Tell the assembler about it
209B 9634 lda <$034
209D 8112 cmpa #0x012
209F 10261192 lbne FAIL
20A3 D635 ldb <$035
20A5 C134 cmpb #0x034
20A7 1026118A lbne FAIL
20AB DC36 ldd <$036
20AD 10835678 cmpd #0x05678
20B1 10261180 lbne FAIL
20B5 DE38 ldu <$038
20B7 1183DEAD cmpu #0x0DEAD
20BB 10261176 lbne FAIL
20BF 10DE3A lds <$03a
20C2 118CBEEF cmps #0x0BEEF
20C6 1026116B lbne FAIL
20CA 9E35 ldx <$035
20CC 8C3456 cmpx #0x03456
20CF 10261162 lbne FAIL
20D3 109E37 ldy <$037
20D6 108C78DE cmpy #0x078DE
20DA 10261157 lbne FAIL
20DE 12 nop
20DF 12 nop
20E0 12 nop
; Extended Direct
; -----------------
20E1 B6123B lda >$0123B
20E4 81EF cmpa #0x0EF
20E6 1026114B lbne FAIL
20EA F6123A ldb >$0123a
20ED C1BE cmpb #0x0BE
20EF 10261142 lbne FAIL
20F3 FC1238 ldd >$01238
20F6 1083DEAD cmpd #0x0DEAD
20FA 10261137 lbne FAIL
20FE FE1234 ldu >$01234
2101 11831234 cmpu #0x01234
2105 1026112C lbne FAIL
2109 10FE1234 lds >$01234
210D 118C1234 cmps #0x01234
2111 10261120 lbne FAIL
2115 BE1235 ldx >$01235
2118 8C3456 cmpx #0x03456
211B 10261116 lbne FAIL
211F 10BE1236 ldy >$01236
2123 108C5678 cmpy #0x05678
2127 1026110A lbne FAIL
212B 12 nop
212C 12 nop
212D 12 nop
; Indexed - Extended Indirect
; ---------------------------
; Load memory with the indirect pointers - addresses + 0x0030
; 0x1400: 0x1234
; 0x1410: 0x1238
212E 108E1400 ldy #$01400
2132 8E1234 ldx #$01234
2135 AFA4 stx ,Y
2137 8E1410 ldx #$01410
213A 108E1238 ldy #$01238
213E 10AF84 sty ,X
2141 A69F1400 lda [$01400]
2145 8112 cmpa #0x012
2147 102610EA lbne FAIL
214B E69F1400 ldb [$01400]
214F C112 cmpb #0x012
2151 102610E0 lbne FAIL
2155 EC9F1400 ldd [$01400]
2159 10831234 cmpd #0x01234
215D 102610D4 lbne FAIL
2161 EE9F1410 ldu [$01410]
2165 1183DEAD cmpu #0x0DEAD
2169 102610C8 lbne FAIL
216D 10EE9F1410 lds [$01410]
2172 118CDEAD cmps #0x0DEAD
2176 102610BB lbne FAIL
217A AE9F1400 ldx [$01400]
217E 8C1234 cmpx #0x01234
2181 102610B0 lbne FAIL
2185 10AE9F1400 ldy [$01400]
218A 108C1234 cmpy #0x01234
218E 102610A3 lbne FAIL
2192 12 nop
2193 12 nop
2194 12 nop
; Indexed - Non-Indirect Register with opcode offsets from register
; ------------------------------------------------------------------
2195 CE1234 ldu #$01234 ; Set R index registers
2198 10CE1238 lds #$01238
219C 8E1234 ldx #$01234
219F 108E1238 ldy #$01238
21A3 A6C4 lda ,U ; Indexed - Non-Indirect Register (no offset)
21A5 8112 cmpa #0x012
21A7 1026108A lbne FAIL
21AB A67F lda -1,S ; Indexed - Non-Indirect Register (5-bit offset)
21AD 8178 cmpa #0x078
21AF 10261082 lbne FAIL
21B3 A6E820 lda 32,S ; Indexed - Non-Indirect Register (8-bit offset)
21B6 8133 cmpa #0x033
21B8 10261079 lbne FAIL
21BC A6E97D00 lda 32000,S ; Indexed - Non-Indirect Register (16-bit offset)
21C0 815A cmpa #0x05A
21C2 1026106F lbne FAIL
21C6 E6A4 ldb ,Y ; Indexed - Non-Indirect Register (no offset)
21C8 C1DE cmpb #0x0DE
21CA 10261067 lbne FAIL
21CE 8602 lda #2 ; Indexed - Non-Indirect Register (Accumulator-A offset)
21D0 E6A6 ldb A,Y
21D2 C1BE cmpb #0x0BE
21D4 1026105D lbne FAIL
21D8 C603 ldb #3 ; Indexed - Non-Indirect Register (Accumulator-B offset)
21DA A6A5 lda B,Y
21DC 81EF cmpa #0x0EF
21DE 10261053 lbne FAIL
21E2 CC0001 ldd #1 ; Indexed - Non-Indirect Register (Accumulator-B offset)
21E5 A6AB lda D,Y
21E7 81AD cmpa #0x0AD
21E9 10261048 lbne FAIL
21ED ECE4 ldd ,S ; Indexed - Non-Indirect Register (no offset)
21EF 1083DEAD cmpd #0x0DEAD
21F3 1026103E lbne FAIL
21F7 ECE0 ldd ,S+ ; Indexed - Non-Indirect Register (Post-increment)
21F9 1083DEAD cmpd #0x0DEAD
21FD 10261034 lbne FAIL
2201 ECE0 ldd ,S+ ; Indexed - Non-Indirect Register (Post-increment +1)
2203 1083ADBE cmpd #0x0ADBE
2207 1026102A lbne FAIL
220B ECE1 ldd ,S++ ; Indexed - Non-Indirect Register (Post-increment +2)
220D 1083BEEF cmpd #0x0BEEF
2211 10261020 lbne FAIL
2215 8E1238 ldx #$01238
2218 EE82 ldu ,-X ; Indexed - Non-Indirect Register (Pre-decrement -1)
221A 118378DE cmpu #0x078DE
221E 10261013 lbne FAIL
2222 PCR_LABEL
2222 8E1238 ldx #$01238
2225 EE83 ldu ,--X ; Indexed - Non-Indirect Register (Pre-decrement -2)
2227 11835678 cmpu #0x05678
222B 10261006 lbne FAIL
222F A68CF0 lda PCR_LABEL,PCR ; Indexed - Non-Indirect PCR - PC Relative - 8-bit offset
2232 818E cmpa #0x08E
2234 10260FFD lbne FAIL
2238 A68DFDC4 lda op_LOAD_STORES,PCR ; Indexed - Non-Indirect PCR - PC Relative - 16-bit offset
223C 8112 cmpa #0x012
223E 10260FF3 lbne FAIL
2242 A69CDD lda [PCR_LABEL,PCR] ; Indexed - Indirect PCR - PC Relative - 8-bit offset
2245 8166 cmpa #0x066
2247 10260FEA lbne FAIL
224B A69DFDB1 lda [op_LOAD_STORES,PCR] ; Indexed - Indirect PCR - PC Relative - 16-bit offset
224F 8188 cmpa #0x088
2251 10260FE0 lbne FAIL
2255 CE1234 ldu #$01234 ; Restore R index registers
2258 10CE1238 lds #$01238
225C 8E1234 ldx #$01234
225F 108E1238 ldy #$01238
2263 EE84 ldu ,X
2265 10CE1200 lds #$01200 ; Indexed - Indirect Register (8-bit offset)
2269 A6F804 lda [4,S]
226C 11831234 cmpu #0x01234
2270 10260FC1 lbne FAIL
2274 10EEA4 lds ,Y
2277 118CDEAD cmps #0x0DEAD
227B 10260FB6 lbne FAIL
227F AEA4 ldx ,Y
2281 8CDEAD cmpx #0x0DEAD
2284 10260FAD lbne FAIL
2288 10AEA4 ldy ,Y
228B 108CDEAD cmpy #0x0DEAD
228F 10260FA2 lbne FAIL
2293 81DE cmpa #0x0DE
2295 10260F9C lbne FAIL
2299 10CE1300 lds #$01300 ; Indexed - Indirect Register (16-bit offset)
229D A6F9FF00 lda [(-0x00100),S]
22A1 8112 cmpa #0x012
22A3 10260F8E lbne FAIL
22A7 CE11FF ldu #$011FF ; Indexed - Indirect Register (Accumulator-A offset)
22AA 8601 lda #$00001
22AC A6D6 lda [A,U]
22AE 8112 cmpa #0x012
22B0 10260F81 lbne FAIL
22B4 CE11FF ldu #$011FF ; Indexed - Indirect Register (Accumulator-B offset)
22B7 C601 ldb #$00001
22B9 A6D5 lda [B,U]
22BB 8112 cmpa #0x012
22BD 10260F74 lbne FAIL
22C1 CE10FF ldu #$010FF ; Indexed - Indirect Register (Accumulator-D offset)
22C4 CC0101 ldd #$00101
22C7 A6DB lda [D,U]
22C9 8112 cmpa #0x012
22CB 10260F66 lbne FAIL
22CF 10CE1200 lds #$01200
22D3 10AEF1 ldy [,S++] ; Indexed - ndirect Register (Post-increment +2)
22D6 108C1234 cmpy #0x01234
22DA 10260F57 lbne FAIL
22DE 118C1202 cmps #0x01202
22E2 10260F4F lbne FAIL
22E6 10CE1202 lds #$01202
22EA 10AEF3 ldy [,--S] ; Indexed - ndirect Register (Pre_decement -2)
22ED 108C1234 cmpy #0x01234
22F1 10260F40 lbne FAIL
22F5 118C1200 cmps #0x01200
22F9 10260F38 lbne FAIL
22FD 12 nop
22FE 12 nop
22FF 12 nop
; ----------------------------------------
; Test - Stores
; ----------------------------------------
2300 8618 lda #$018
2302 1E8B exg a,dp ; Set the Direct Page
2304 SETDP 0x018 ; Tell the assembler about it
2304 108E1A00 ldy #$01A00 ; Store same pattern at 0x1800, 0x1900, 0x1A00 using each of the addressing modes
2308 86AA lda #0x0AA
230A 9700 sta <0x00
230C B71900 sta >0x1900
230F A7A0 sta ,Y+
2311 C6BB ldb #0x0BB
2313 D701 stb <0x01
2315 F71901 stb >0x1901
2318 E7A0 stb ,Y+
231A CCD00D ldd #0x0D00D
231D DD02 std <0x02
231F FD1902 std >0x1902
2322 EDA1 std ,Y++
2324 10CE5005 lds #0x05005
2328 10DF04 sts <0x04
232B 10FF1904 sts >0x1904
232F 10EFA1 sts ,Y++
2332 CE6006 ldu #0x06006
2335 DF06 stu <0x06
2337 FF1906 stu >0x1906
233A EFA1 stu ,Y++
233C 8E1001 ldx #0x01001
233F 9F08 stx <0x08
2341 BF1908 stx >0x1908
2344 AFA1 stx ,Y++
2346 C600 ldb #0x00
2348 CC0000 ldd #0x00
234B 10CE0000 lds #0x00
234F CE0000 ldu #0x00
2352 8E0000 ldx #0x00
2355 108E0000 ldy #0x00
2359 9600 lda <0x00
235B 81AA cmpa #$0AA
235D 10260ED4 lbne FAIL
2361 8600 lda #0x00
2363 B61900 lda >0x1900
2366 81AA cmpa #$0AA
2368 10260EC9 lbne FAIL
236C D601 ldb <0x01
236E C1BB cmpb #$0BB
2370 10260EC1 lbne FAIL
2374 C600 ldb #0x00
2376 F61901 ldb >0x1901
2379 C1BB cmpb #$0BB
237B 10260EB6 lbne FAIL
237F DC02 ldd <0x02
2381 1083D00D cmpd #$0D00D
2385 10260EAC lbne FAIL
2389 CC0000 ldd #0x00
238C FC1902 ldd >0x1902
238F 1083D00D cmpd #$0D00D
2393 10260E9E lbne FAIL
2397 10DE04 lds <0x04
239A 118C5005 cmps #$05005
239E 10260E93 lbne FAIL
23A2 10CE0000 lds #0x00
23A6 10FE1904 lds >0x1904
23AA 118C5005 cmps #$05005
23AE 10260E83 lbne FAIL
23B2 DE06 ldu <0x06
23B4 11836006 cmpu #0x06006
23B8 10260E79 lbne FAIL
23BC CE0000 ldu #0x00
23BF FE1906 ldu >0x1906
23C2 11836006 cmpu #0x06006
23C6 10260E6B lbne FAIL
23CA 9E08 ldx <0x08
23CC 8C1001 cmpx #$01001
23CF 10260E62 lbne FAIL
23D3 8E0000 ldx #0x00
23D6 BE1908 ldx >0x1908
23D9 8C1001 cmpx #$01001
23DC 10260E55 lbne FAIL
; LEA tests
23E0 108E1234 ldy #0x01234
23E4 32A4 leas ,Y
23E6 118C1234 cmps #0x01234
23EA 10260E47 lbne FAIL
23EE 33A4 leau ,Y
23F0 11831234 cmpu #0x01234
23F4 10260E3D lbne FAIL
23F8 30A4 leax ,Y
23FA 8C1234 cmpx #0x01234
23FD 10260E34 lbne FAIL
2401 8E1234 ldx #0x01234
2404 3184 leay ,X
2406 108C1234 cmpy #0x01234
240A 10260E27 lbne FAIL
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test brsnche and jump opcodes
; ----------------------------------------------------------------------
240E op_BRANCHES_JUMPS
240E 12 nop
240F 12 nop
2410 12 nop
2411 2006 bra BRANCHES_JUMPS_START
2413 LOCAL_FAIL
2413 7E2413 jmp LOCAL_FAIL
2416 SUBROUTINE_TEST
2416 12 nop
2417 12 nop
2418 39 rts
2419 BRANCHES_JUMPS_START
; Branches - set CC manually then test branch
2419 1CF0 andcc #0x0F0 ; Clear arithmetic flags
241B 102B0E16 lbmi FAIL ; branch if N=1
241F 10270E12 lbeq FAIL ; branch if Z=1
2423 10290E0E lbvs FAIL ; branch if V=1
2427 10250E0A lbcs FAIL ; branch if C=1
242B 2BE6 bmi LOCAL_FAIL ; branch if N=1
242D 27E4 beq LOCAL_FAIL ; branch if Z=1
242F 29E2 bvs LOCAL_FAIL ; branch if V=1
2431 25E0 bcs LOCAL_FAIL ; branch if C=1
2433 1A0F orcc #0x00F ; Set arithmetic flags
2435 102A0DFC lbpl FAIL ; branch if N=0
2439 10260DF8 lbne FAIL ; branch if Z=0
243D 10280DF4 lbvc FAIL ; branch if V=0
2441 10240DF0 lbcc FAIL ; branch if C=0
2445 2ACC bpl LOCAL_FAIL ; branch if N=0
2447 26CA bne LOCAL_FAIL ; branch if Z=0
2449 28C8 bvc LOCAL_FAIL ; branch if V=0
244B 24C6 bcc LOCAL_FAIL ; branch if C=0
244D 2DC4 blt LOCAL_FAIL ; branch if flag_n!=flag_v
244F 102DFFC0 lblt LOCAL_FAIL
2453 2EBE bgt LOCAL_FAIL ; branch if (flag_n==flag_v) && (flag_z==0)
2455 102EFFBA lbgt LOCAL_FAIL
2459 1CF7 andcc #0x0F7 ; Clear n flag
245B 2CB6 bge LOCAL_FAIL ; branch if flag_n==flag_v
245D 102CFFB2 lbge LOCAL_FAIL
2461 1A01 orcc #0x001 ; Set c flag
2463 22AE bhi LOCAL_FAIL ; branch if (flag_z==0) && (flag_c==0)
2465 1022FFAA lbhi LOCAL_FAIL
2469 1CF8 andcc #0x0F8 ; Clear z,v,c flags
246B 2FA6 ble LOCAL_FAIL ; branch if (flag_n!=flag_v) || (flag_z==1)
246D 102FFFA2 lble LOCAL_FAIL
2471 23A0 bls LOCAL_FAIL ; branch if (flag_z!=0) || (flag_c!=0)
2473 1023FF9C lbls LOCAL_FAIL
2477 160003 lbra BRANCHES_CONTINUE
247A LOCAL_FAIL2
247A 7E247A jmp LOCAL_FAIL2
247D BRANCHES_CONTINUE
247D 21FB brn LOCAL_FAIL2
247F 1021FFF7 lbrn LOCAL_FAIL2
2483 8D91 bsr SUBROUTINE_TEST ; Branch Subroutine
2485 BD2416 jsr SUBROUTINE_TEST ; Jump Subroutine
2488 17FF8B lbsr SUBROUTINE_TEST ; Long Branch Subroutine
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Addition and subtraction
; ----------------------------------------------------------------------
248B op_ADD_SUB
248B 12 nop
248C 12 nop
248D 12 nop
248E 8612 lda #$012
2490 1E8B exg a,dp ; Set the Direct Page
2492 SETDP 0x012 ; Tell the assembler about it
; Addition
; ------------
2492 8E1234 ldx #0x01234
2495 C602 ldb #0x02
2497 3A abx
2498 8C1236 cmpx #0x01236
249B 10260D96 lbne FAIL
249F 8602 lda #0x02 ; ADDA Immediate
24A1 8B02 adda #0x02
24A3 8104 cmpa #0x004
24A5 10260D8C lbne FAIL
24A9 8602 lda #0x02 ; ADDA Direct
24AB 9B34 adda <$034
24AD 8114 cmpa #0x014
24AF 10260D82 lbne FAIL
24B3 8E1200 ldx #0x01200 ; ADDA Indexed
24B6 8602 lda #0x02
24B8 AB84 adda ,X
24BA 8114 cmpa #0x014
24BC 10260D75 lbne FAIL
24C0 8602 lda #0x02 ; ADDA Extended
24C2 BB1234 adda >$01234
24C5 8114 cmpa #0x014
24C7 10260D6A lbne FAIL
24CB C602 ldb #0x02 ; ADDB Immediate
24CD CB02 addb #0x02
24CF C104 cmpb #0x004
24D1 10260D60 lbne FAIL
24D5 C602 ldb #0x02 ; ADDB Direct
24D7 DB34 addb <$034
24D9 C114 cmpb #0x014
24DB 10260D56 lbne FAIL
24DF 8E1200 ldx #0x01200 ; ADDB Indexed
24E2 C602 ldb #0x02
24E4 EB84 addb ,X
24E6 C114 cmpb #0x014
24E8 10260D49 lbne FAIL
24EC C602 ldb #0x02 ; ADDB Extended
24EE FB1234 addb >$01234
24F1 C114 cmpb #0x014
24F3 10260D3E lbne FAIL
24F7 CC1002 ldd #0x01002 ; ADDD Immediate
24FA C30002 addd #0x02
24FD 10831004 cmpd #0x01004
2501 10260D30 lbne FAIL
2505 CC1002 ldd #0x01002 ; ADDD Direct
2508 D334 addd <$034
250A 10832236 cmpd #0x02236
250E 10260D23 lbne FAIL
2512 8E1200 ldx #0x01200 ; ADDD Indexed
2515 CC0002 ldd #0x02
2518 E384 addd ,X
251A 10831236 cmpd #0x01236
251E 10260D13 lbne FAIL
2522 CC0002 ldd #0x02 ; ADDD Extended
2525 F31234 addd >$01234
2528 10831236 cmpd #0x01236
252C 10260D05 lbne FAIL
2530 8602 lda #0x02 ; ADCA Immediate
2532 1A01 orcc #0x001 ; Set Carry flag
2534 8902 adca #0x02
2536 8105 cmpa #0x005
2538 10260CF9 lbne FAIL
253C 8602 lda #0x02 ; ADCA Direct
253E 1A01 orcc #0x001 ; Set Carry flag
2540 9934 adca <$034
2542 8115 cmpa #0x015
2544 10260CED lbne FAIL
2548 8E1200 ldx #0x01200 ; ADCA Indexed
254B 8602 lda #0x02
254D 1A01 orcc #0x001 ; Set Carry flag
254F A984 adca ,X
2551 8115 cmpa #0x015
2553 10260CDE lbne FAIL
2557 8602 lda #0x02 ; ADCA Extended
2559 1A01 orcc #0x001 ; Set Carry flag
255B B91234 adca >$01234
255E 8115 cmpa #0x015
2560 10260CD1 lbne FAIL
2564 C602 ldb #0x02 ; ADCB Immediate
2566 1A01 orcc #0x001 ; Set Carry flag
2568 C902 adcb #0x02
256A C105 cmpb #0x005
256C 10260CC5 lbne FAIL
2570 C602 ldb #0x02 ; ADCB Direct
2572 1A01 orcc #0x001 ; Set Carry flag
2574 D934 adcb <$034
2576 C115 cmpb #0x015
2578 10260CB9 lbne FAIL
257C 8E1200 ldx #0x01200 ; ADCB Indexed
257F C602 ldb #0x02
2581 1A01 orcc #0x001 ; Set Carry flag
2583 E984 adcb ,X
2585 C115 cmpb #0x015
2587 10260CAA lbne FAIL
258B C602 ldb #0x02 ; ADCB Extended
258D 1A01 orcc #0x001 ; Set Carry flag
258F F91234 adcb >$01234
2592 C115 cmpb #0x015
2594 10260C9D lbne FAIL
; Subtraction
; ------------
2598 8602 lda #0x02 ; SUBA Immediate
259A 8002 suba #0x02
259C 8100 cmpa #0x00
259E 10260C93 lbne FAIL
25A2 8612 lda #0x12 ; SUBA Direct
25A4 9034 suba <$034
25A6 8100 cmpa #0x000
25A8 10260C89 lbne FAIL
25AC 8E1200 ldx #0x01200 ; SUBA Indexed
25AF 8612 lda #0x012
25B1 A084 suba ,X
25B3 8100 cmpa #0x000
25B5 10260C7C lbne FAIL
25B9 8612 lda #0x012 ; SUBA Extended
25BB B01234 suba >$01234
25BE 8100 cmpa #0x000
25C0 10260C71 lbne FAIL
25C4 C602 ldb #0x02 ; SUBB Immediate
25C6 C002 subb #0x02
25C8 C100 cmpb #0x000
25CA 10260C67 lbne FAIL
25CE C612 ldb #0x012 ; SUBB Direct
25D0 D034 subb <$034
25D2 C100 cmpb #0x00
25D4 10260C5D lbne FAIL
25D8 8E1200 ldx #0x01200 ; SUBB Indexed
25DB C612 ldb #0x012
25DD E084 subb ,X
25DF C100 cmpb #0x00
25E1 10260C50 lbne FAIL
25E5 C612 ldb #0x012 ; SUBB Extended
25E7 F01234 subb >$01234
25EA C100 cmpb #0x00
25EC 10260C45 lbne FAIL
25F0 CC1234 ldd #0x01234 ; SUBD Immediate
25F3 831234 subd #0x01234
25F6 10830000 cmpd #0x00
25FA 10260C37 lbne FAIL
25FE CC1234 ldd #0x01234 ; SUBD Direct
2601 9334 subd <$034
2603 10830000 cmpd #0x00
2607 10260C2A lbne FAIL
260B 8E1234 ldx #0x01234 ; SUBD Indexed
260E CC1234 ldd #0x01234
2611 A384 subd ,X
2613 10830000 cmpd #0x00
2617 10260C1A lbne FAIL
261B CC1234 ldd #0x01234 ; SUBD Extended
261E B31234 subd >$01234
2621 10830000 cmpd #0x00
2625 10260C0C lbne FAIL
2629 8603 lda #0x03 ; SBCA Immediate
262B 1A01 orcc #0x001 ; Set Carry flag
262D 8202 sbca #0x02
262F 8100 cmpa #0x000
2631 10260C00 lbne FAIL
2635 8613 lda #0x013 ; SBCA Direct
2637 1A01 orcc #0x001 ; Set Carry flag
2639 9234 sbca <$034
263B 8100 cmpa #0x00
263D 10260BF4 lbne FAIL
2641 8E1200 ldx #0x01200 ; SBCA Indexed
2644 8613 lda #0x013
2646 1A01 orcc #0x001 ; Set Carry flag
2648 A284 sbca ,X
264A 8100 cmpa #0x000
264C 10260BE5 lbne FAIL
2650 8613 lda #0x013 ; SBCA Extended
2652 1A01 orcc #0x001 ; Set Carry flag
2654 B21234 sbca >$01234
2657 8100 cmpa #0x00
2659 10260BD8 lbne FAIL
265D C603 ldb #0x03 ; SBCB Immediate
265F 1A01 orcc #0x001 ; Set Carry flag
2661 C202 sbcb #0x02
2663 C100 cmpb #0x000
2665 10260BCC lbne FAIL
2669 C613 ldb #0x013 ; SBCB Direct
266B 1A01 orcc #0x001 ; Set Carry flag
266D D234 sbcb <$034
266F C100 cmpb #0x00
2671 10260BC0 lbne FAIL
2675 8E1200 ldx #0x01200 ; SBCB Indexed
2678 C613 ldb #0x013
267A 1A01 orcc #0x001 ; Set Carry flag
267C E284 sbcb ,X
267E C100 cmpb #0x000
2680 10260BB1 lbne FAIL
2684 C613 ldb #0x013 ; SBCB Extended
2686 1A01 orcc #0x001 ; Set Carry flag
2688 F21234 sbcb >$01234
268B C100 cmpb #0x00
268D 10260BA4 lbne FAIL
; ADDA Flags check
2691 8600 lda #0x00
2693 8B00 adda #0x00 ; Expected: n=0 z=1 v=0 c=0
2695 102B0B9C lbmi FAIL ; branch if N=1
2699 10260B98 lbne FAIL ; branch if Z=0
269D 10290B94 lbvs FAIL ; branch if V=1
26A1 10250B90 lbcs FAIL ; branch if C=1
26A5 86FE lda #0xFE
26A7 8B01 adda #0x01 ; Expected: n=1 z=0 v=0 c=0
26A9 102A0B88 lbpl FAIL ; branch if N=0
26AD 10270B84 lbeq FAIL ; branch if Z=1
26B1 10290B80 lbvs FAIL ; branch if V=1
26B5 10250B7C lbcs FAIL ; branch if C=1
26B9 867E lda #0x7E
26BB 8B03 adda #0x03 ; Expected: v=1
26BD 10280B74 lbvc FAIL ; branch if V=0
26C1 86FE lda #0xFE
26C3 8B03 adda #0x03 ; Expected: c=1
26C5 10240B6C lbcc FAIL ; branch if C=0
; SUBA Flags check
26C9 8600 lda #0x00
26CB 8000 suba #0x00 ; Expected: n=0 z=1 v=0 c=0
26CD 102B0B64 lbmi FAIL ; branch if N=1
26D1 10260B60 lbne FAIL ; branch if Z=0
26D5 10290B5C lbvs FAIL ; branch if V=1
26D9 10250B58 lbcs FAIL ; branch if C=1
26DD 86FE lda #0xFE
26DF 8001 suba #0x01 ; Expected: n=1 z=0 v=0 c=0
26E1 102A0B50 lbpl FAIL ; branch if N=0
26E5 10270B4C lbeq FAIL ; branch if Z=1
26E9 10290B48 lbvs FAIL ; branch if V=1
26ED 10250B44 lbcs FAIL ; branch if C=1
26F1 867E lda #0x7E
26F3 8003 suba #0x03 ; Expected: v=0
26F5 10290B3C lbvs FAIL ; branch if V=1
26F9 86FE lda #0xFE
26FB 8003 suba #0x03 ; Expected: c=0
26FD 10250B34 lbcs FAIL ; branch if C=1
; Comparisons
; --------------
; Immediate
; ---------
2701 8680 lda #0x080 ; Checking opcode support - flags already checked with SUB tests
2703 8180 cmpa #0x080
2705 10260B2C lbne FAIL
2709 C680 ldb #0x080
270B C180 cmpb #0x080
270D 10260B24 lbne FAIL
2711 CC1111 ldd #0x01111
2714 10831111 cmpd #0x01111
2718 10260B19 lbne FAIL
271C 10CE2222 lds #0x02222
2720 118C2222 cmps #0x02222
2724 10260B0D lbne FAIL
2728 CE3333 ldu #0x03333
272B 11833333 cmpu #0x03333
272F 10260B02 lbne FAIL
2733 8E4444 ldx #0x04444
2736 8C4444 cmpx #0x04444
2739 10260AF8 lbne FAIL
273D 108E5555 ldy #0x05555
2741 108C5555 cmpy #0x05555
2745 10260AEC lbne FAIL
; Direct
; ----------
2749 8612 lda #$012
274B 1E8B exg a,dp ; Set the Direct Page
274D SETDP 0x012 ; Tell the assembler about it
274D 8612 lda #$012
274F 9134 cmpa <0x034
2751 10260AE0 lbne FAIL
2755 C612 ldb #$012
2757 D134 cmpb <0x034
2759 10260AD8 lbne FAIL
275D CC1234 ldd #$01234
2760 109334 cmpd <0x034
2763 10260ACE lbne FAIL
2767 CE1234 ldu #$01234
276A 119334 cmpu <0x034
276D 10260AC4 lbne FAIL
2771 10CE1234 lds #$01234
2775 119C34 cmps <0x034
2778 10260AB9 lbne FAIL
277C 8E1234 ldx #$01234
277F 9C34 cmpx <0x034
2781 10260AB0 lbne FAIL
2785 108E1234 ldy #$01234
2789 109C34 cmpy <0x034
278C 10260AA5 lbne FAIL
; Indexed
; --------
2790 8E1234 ldx #0x01234
2793 8612 lda #0x012
2795 A184 cmpa ,X
2797 10260A9A lbne FAIL
279B C612 ldb #0x012
279D E184 cmpb ,X
279F 10260A92 lbne FAIL
27A3 CC1234 ldd #0x01234
27A6 10A384 cmpd ,X
27A9 10260A88 lbne FAIL
27AD 10CE1234 lds #0x01234
27B1 11AC84 cmps ,X
27B4 10260A7D lbne FAIL
27B8 CE1234 ldu #0x01234
27BB 11A384 cmpu ,X
27BE 10260A73 lbne FAIL
27C2 108E1234 ldy #0x01234
27C6 10AC84 cmpy ,X
27C9 10260A68 lbne FAIL
27CD 108E1234 ldy #0x01234
27D1 8E1234 ldx #0x01234
27D4 ACA4 cmpx ,Y
27D6 10260A5B lbne FAIL
; Extended Direct
; -----------------
27DA 8612 lda #$012
27DC B11234 cmpa >0x01234
27DF 10260A52 lbne FAIL
27E3 C612 ldb #$012
27E5 F11234 cmpb >0x01234
27E8 10260A49 lbne FAIL
27EC CC1234 ldd #$01234
27EF 10B31234 cmpd >0x01234
27F3 10260A3E lbne FAIL
27F7 CE1234 ldu #$01234
27FA 11B31234 cmpu >0x01234
27FE 10260A33 lbne FAIL
2802 10CE1234 lds #$01234
2806 11BC1234 cmps >0x01234
280A 10260A27 lbne FAIL
280E 8E1234 ldx #$01234
2811 BC1234 cmpx >0x01234
2814 10260A1D lbne FAIL
2818 108E1234 ldy #$01234
281C 10BC1234 cmpy >0x01234
2820 10260A11 lbne FAIL
; Increment
; ---------
2824 8612 lda #$012
2826 4C inca
2827 8113 cmpa #0x013
2829 10260A08 lbne FAIL
282D C622 ldb #$022
282F 5C incb
2830 C123 cmpb #0x023
2832 102609FF lbne FAIL
2836 8612 lda #$012
2838 1E8B exg a,dp ; Set the Direct Page
283A SETDP 0x012 ; Tell the assembler about it
283A 0C60 inc <0x060
283C D660 ldb <0x060
283E C134 cmpb #0x034
2840 102609F1 lbne FAIL
2844 8E1260 ldx #0x01260
2847 8612 lda #0x012
2849 6C84 inc ,X
284B D660 ldb <0x060
284D C135 cmpb #0x035
284F 102609E2 lbne FAIL
2853 7C1260 inc >0x01260
2856 D660 ldb <0x060
2858 C136 cmpb #0x036
285A 102609D7 lbne FAIL
; Flags check
; -----------
285E 867F lda #$07F
2860 4C inca
2861 102809D0 lbvc FAIL ; branch if V=0
2865 102A09CC lbpl FAIL ; branch if N=0
2869 102709C8 lbeq FAIL ; branch if Z=1
; Decrement
; ---------
286D 8612 lda #$012
286F 4A deca
2870 8111 cmpa #0x011
2872 102609BF lbne FAIL
2876 C622 ldb #$022
2878 5A decb
2879 C121 cmpb #0x021
287B 102609B6 lbne FAIL
287F 8612 lda #$012
2881 1E8B exg a,dp ; Set the Direct Page
2883 SETDP 0x012 ; Tell the assembler about it
2883 0A60 dec <0x060
2885 D660 ldb <0x060
2887 C135 cmpb #0x035
2889 102609A8 lbne FAIL
288D 8E1260 ldx #0x01260
2890 8612 lda #0x012
2892 6A84 dec ,X
2894 D660 ldb <0x060
2896 C134 cmpb #0x034
2898 10260999 lbne FAIL
289C 7A1260 dec >0x01260
289F D660 ldb <0x060
28A1 C133 cmpb #0x033
28A3 1026098E lbne FAIL
; Flags check
; -----------
28A7 8680 lda #$080
28A9 4A deca
28AA 10280987 lbvc FAIL ; branch if V=0
28AE 102B0983 lbmi FAIL ; branch if N=1
28B2 1027097F lbeq FAIL ; branch if Z=1
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Boolean Bit and Test
;-----------------------------------------------------------
; ---
; AND
; ---
28B6 8688 lda #0x0088 ; Immediate
28B8 84F0 anda #0x0F0
28BA 10290977 lbvs FAIL ; branch if V=1
28BE 102A0973 lbpl FAIL ; branch if N=0
28C2 1027096F lbeq FAIL ; branch if Z=1
28C6 8180 cmpa #0x080
28C8 10260969 lbne FAIL
28CC C65A ldb #0x005A
28CE C40F andb #0x00F
28D0 10290961 lbvs FAIL ; branch if V=1
28D4 102B095D lbmi FAIL ; branch if N=1
28D8 10270959 lbeq FAIL ; branch if Z=1
28DC C10A cmpb #0x00A
28DE 10260953 lbne FAIL
28E2 1C00 andcc #0x000
28E4 1029094D lbvs FAIL ; branch if V=1
28E8 102B0949 lbmi FAIL ; branch if N=1
28EC 10270945 lbeq FAIL ; branch if Z=1
28F0 1A0F orcc #0x00F
28F2 1028093F lbvc FAIL ; branch if V=0
28F6 102A093B lbpl FAIL ; branch if N=0
28FA 10260937 lbne FAIL ; branch if Z=0
28FE 860F lda #0x00F ; Direct
2900 9434 anda <$034
2902 1029092F lbvs FAIL ; branch if V=1
2906 102B092B lbmi FAIL ; branch if N=1
290A 10270927 lbeq FAIL ; branch if Z=1
290E 8102 cmpa #0x002
2910 10260921 lbne FAIL
2914 860F lda #0x00F ; Indexed
2916 8E1200 ldx #0x01200
2919 A484 anda ,X
291B 10290916 lbvs FAIL ; branch if V=1
291F 102B0912 lbmi FAIL ; branch if N=1
2923 1027090E lbeq FAIL ; branch if Z=1
2927 8102 cmpa #0x002
2929 10260908 lbne FAIL
292D 860F lda #0x00F ; Extended
292F 8E1200 ldx #0x01200
2932 B41234 anda >$01234
2935 102908FC lbvs FAIL ; branch if V=1
2939 102B08F8 lbmi FAIL ; branch if N=1
293D 102708F4 lbeq FAIL ; branch if Z=1
2941 8102 cmpa #0x002
2943 102608EE lbne FAIL
2947 C60F ldb #0x00F ; Direct
2949 D434 andb <$034
294B 102908E6 lbvs FAIL ; branch if V=1
294F 102B08E2 lbmi FAIL ; branch if N=1
2953 102708DE lbeq FAIL ; branch if Z=1
2957 C102 cmpb #0x002
2959 102608D8 lbne FAIL
295D C60F ldb #0x00F ; Indexed
295F 8E1200 ldx #0x01200
2962 E484 andb ,X
2964 102908CD lbvs FAIL ; branch if V=1
2968 102B08C9 lbmi FAIL ; branch if N=1
296C 102708C5 lbeq FAIL ; branch if Z=1
2970 C102 cmpb #0x002
2972 102608BF lbne FAIL
2976 C60F ldb #0x00F ; Extended
2978 8E1200 ldx #0x01200
297B F41234 andb >$01234
297E 102908B3 lbvs FAIL ; branch if V=1
2982 102B08AF lbmi FAIL ; branch if N=1
2986 102708AB lbeq FAIL ; branch if Z=1
298A C102 cmpb #0x002
298C 102608A5 lbne FAIL
; ---
; OR
; ---
2990 860A lda #0x000A ; Immediate
2992 8A50 ora #0x050
2994 1029089D lbvs FAIL ; branch if V=1
2998 102B0899 lbmi FAIL ; branch if N=1
299C 10270895 lbeq FAIL ; branch if Z=1
29A0 815A cmpa #0x5A
29A2 1026088F lbne FAIL
29A6 C6A0 ldb #0x00A0
29A8 CA05 orb #0x005
29AA 10290887 lbvs FAIL ; branch if V=1
29AE 102A0883 lbpl FAIL ; branch if N=0
29B2 1027087F lbeq FAIL ; branch if Z=1
29B6 C1A5 cmpb #0x0A5
29B8 10260879 lbne FAIL
29BC 1A0F orcc #0x00F
29BE 10280873 lbvc FAIL ; branch if V=0
29C2 102A086F lbpl FAIL ; branch if N=0
29C6 1026086B lbne FAIL ; branch if Z=0
29CA 860F lda #0x00F ; Direct
29CC 9A34 ora <$034
29CE 10290863 lbvs FAIL ; branch if V=1
29D2 102B085F lbmi FAIL ; branch if N=1
29D6 1027085B lbeq FAIL ; branch if Z=1
29DA 811F cmpa #0x01F
29DC 10260855 lbne FAIL
29E0 860F lda #0x00F ; Indexed
29E2 8E1200 ldx #0x01200
29E5 AA84 ora ,X
29E7 1029084A lbvs FAIL ; branch if V=1
29EB 102B0846 lbmi FAIL ; branch if N=1
29EF 10270842 lbeq FAIL ; branch if Z=1
29F3 811F cmpa #0x01F
29F5 1026083C lbne FAIL
29F9 860F lda #0x00F ; Extended
29FB 8E1200 ldx #0x01200
29FE BA1234 ora >$01234
2A01 10290830 lbvs FAIL ; branch if V=1
2A05 102B082C lbmi FAIL ; branch if N=1
2A09 10270828 lbeq FAIL ; branch if Z=1
2A0D 811F cmpa #0x01F
2A0F 10260822 lbne FAIL
2A13 C60F ldb #0x00F ; Direct
2A15 DA34 orb <$034
2A17 1029081A lbvs FAIL ; branch if V=1
2A1B 102B0816 lbmi FAIL ; branch if N=1
2A1F 10270812 lbeq FAIL ; branch if Z=1
2A23 C11F cmpb #0x01F
2A25 1026080C lbne FAIL
2A29 C60F ldb #0x00F ; Indexed
2A2B 8E1200 ldx #0x01200
2A2E EA84 orb ,X
2A30 10290801 lbvs FAIL ; branch if V=1
2A34 102B07FD lbmi FAIL ; branch if N=1
2A38 102707F9 lbeq FAIL ; branch if Z=1
2A3C C11F cmpb #0x01F
2A3E 102607F3 lbne FAIL
2A42 C60F ldb #0x00F ; Extended
2A44 8E1200 ldx #0x01200
2A47 FA1234 orb >$01234
2A4A 102907E7 lbvs FAIL ; branch if V=1
2A4E 102B07E3 lbmi FAIL ; branch if N=1
2A52 102707DF lbeq FAIL ; branch if Z=1
2A56 C11F cmpb #0x01F
2A58 102607D9 lbne FAIL
; ----
; EOR
; ----
2A5C 860A lda #0x000A ; Immediate
2A5E 8850 eora #0x050
2A60 102907D1 lbvs FAIL ; branch if V=1
2A64 102B07CD lbmi FAIL ; branch if N=1
2A68 102707C9 lbeq FAIL ; branch if Z=1
2A6C 815A cmpa #0x5A
2A6E 102607C3 lbne FAIL
2A72 C6A0 ldb #0x00A0
2A74 C805 eorb #0x005
2A76 102907BB lbvs FAIL ; branch if V=1
2A7A 102A07B7 lbpl FAIL ; branch if N=0
2A7E 102707B3 lbeq FAIL ; branch if Z=1
2A82 C1A5 cmpb #0x0A5
2A84 102607AD lbne FAIL
2A88 860F lda #0x00F ; Direct
2A8A 9834 eora <$034
2A8C 102907A5 lbvs FAIL ; branch if V=1
2A90 102B07A1 lbmi FAIL ; branch if N=1
2A94 1027079D lbeq FAIL ; branch if Z=1
2A98 811D cmpa #0x01D
2A9A 10260797 lbne FAIL
2A9E 860F lda #0x00F ; Indexed
2AA0 8E1200 ldx #0x01200
2AA3 A884 eora ,X
2AA5 1029078C lbvs FAIL ; branch if V=1
2AA9 102B0788 lbmi FAIL ; branch if N=1
2AAD 10270784 lbeq FAIL ; branch if Z=1
2AB1 811D cmpa #0x01D
2AB3 1026077E lbne FAIL
2AB7 860F lda #0x00F ; Extended
2AB9 8E1200 ldx #0x01200
2ABC B81234 eora >$01234
2ABF 10290772 lbvs FAIL ; branch if V=1
2AC3 102B076E lbmi FAIL ; branch if N=1
2AC7 1027076A lbeq FAIL ; branch if Z=1
2ACB 811D cmpa #0x01D
2ACD 10260764 lbne FAIL
2AD1 C60F ldb #0x00F ; Direct
2AD3 D834 eorb <$034
2AD5 1029075C lbvs FAIL ; branch if V=1
2AD9 102B0758 lbmi FAIL ; branch if N=1
2ADD 10270754 lbeq FAIL ; branch if Z=1
2AE1 C11D cmpb #0x01D
2AE3 1026074E lbne FAIL
2AE7 C60F ldb #0x00F ; Indexed
2AE9 8E1200 ldx #0x01200
2AEC E884 eorb ,X
2AEE 10290743 lbvs FAIL ; branch if V=1
2AF2 102B073F lbmi FAIL ; branch if N=1
2AF6 1027073B lbeq FAIL ; branch if Z=1
2AFA C11D cmpb #0x01D
2AFC 10260735 lbne FAIL
2B00 C60F ldb #0x00F ; Extended
2B02 8E1200 ldx #0x01200
2B05 F81234 eorb >$01234
2B08 10290729 lbvs FAIL ; branch if V=1
2B0C 102B0725 lbmi FAIL ; branch if N=1
2B10 10270721 lbeq FAIL ; branch if Z=1
2B14 C11D cmpb #0x01D
2B16 1026071B lbne FAIL
; ----
; BIT
; ----
2B1A 8688 lda #0x0088 ; Immediate
2B1C 85F0 bita #0x0F0
2B1E 10290713 lbvs FAIL ; branch if V=1
2B22 102A070F lbpl FAIL ; branch if N=0
2B26 1027070B lbeq FAIL ; branch if Z=1
2B2A C65A ldb #0x005A
2B2C C50F bitb #0x00F
2B2E 10290703 lbvs FAIL ; branch if V=1
2B32 102B06FF lbmi FAIL ; branch if N=1
2B36 102706FB lbeq FAIL ; branch if Z=1
2B3A 860F lda #0x00F ; Direct
2B3C 9534 bita <$034
2B3E 102906F3 lbvs FAIL ; branch if V=1
2B42 102B06EF lbmi FAIL ; branch if N=1
2B46 102706EB lbeq FAIL ; branch if Z=1
2B4A 860F lda #0x00F ; Indexed
2B4C 8E1200 ldx #0x01200
2B4F A584 bita ,X
2B51 102906E0 lbvs FAIL ; branch if V=1
2B55 102B06DC lbmi FAIL ; branch if N=1
2B59 102706D8 lbeq FAIL ; branch if Z=1
2B5D 860F lda #0x00F ; Extended
2B5F 8E1200 ldx #0x01200
2B62 B51234 bita >$01234
2B65 102906CC lbvs FAIL ; branch if V=1
2B69 102B06C8 lbmi FAIL ; branch if N=1
2B6D 102706C4 lbeq FAIL ; branch if Z=1
2B71 C60F ldb #0x00F ; Direct
2B73 D534 bitb <$034
2B75 102906BC lbvs FAIL ; branch if V=1
2B79 102B06B8 lbmi FAIL ; branch if N=1
2B7D 102706B4 lbeq FAIL ; branch if Z=1
2B81 C60F ldb #0x00F ; Indexed
2B83 8E1200 ldx #0x01200
2B86 E584 bitb ,X
2B88 102906A9 lbvs FAIL ; branch if V=1
2B8C 102B06A5 lbmi FAIL ; branch if N=1
2B90 102706A1 lbeq FAIL ; branch if Z=1
2B94 C60F ldb #0x00F ; Extended
2B96 8E1200 ldx #0x01200
2B99 F51234 bitb >$01234
2B9C 10290695 lbvs FAIL ; branch if V=1
2BA0 102B0691 lbmi FAIL ; branch if N=1
2BA4 1027068D lbeq FAIL ; branch if Z=1
; ----
; Test
; ----
2BA8 8688 lda #0x0088 ; Inherent
2BAA 4D tsta
2BAB 10290686 lbvs FAIL ; branch if V=1
2BAF 102A0682 lbpl FAIL ; branch if N=0
2BB3 1027067E lbeq FAIL ; branch if Z=1
2BB7 C688 ldb #0x0088 ; Inherent
2BB9 5D tstb
2BBA 10290677 lbvs FAIL ; branch if V=1
2BBE 102A0673 lbpl FAIL ; branch if N=0
2BC2 1027066F lbeq FAIL ; branch if Z=1
2BC6 0D34 tst <$034 ; Direct
2BC8 10290669 lbvs FAIL ; branch if V=1
2BCC 102B0665 lbmi FAIL ; branch if N=1
2BD0 10270661 lbeq FAIL ; branch if Z=1
2BD4 8E1200 ldx #0x01200 ; Indexed
2BD7 6D84 tst ,X
2BD9 10290658 lbvs FAIL ; branch if V=1
2BDD 102B0654 lbmi FAIL ; branch if N=1
2BE1 10270650 lbeq FAIL ; branch if Z=1
2BE5 8E1200 ldx #0x01200 ; Extended
2BE8 7D1234 tst >$01234
2BEB 10290646 lbvs FAIL ; branch if V=1
2BEF 102B0642 lbmi FAIL ; branch if N=1
2BF3 1027063E lbeq FAIL ; branch if Z=1
; ----
; COM
; ----
2BF7 8688 lda #0x0088 ; Inherent
2BF9 43 coma
2BFA 10290637 lbvs FAIL ; branch if V=1
2BFE 10240633 lbcc FAIL ; branch if C=0
2C02 102B062F lbmi FAIL ; branch if N=1
2C06 1027062B lbeq FAIL ; branch if Z=1
2C0A 8177 cmpa #0x077
2C0C 10260625 lbne FAIL
2C10 C688 ldb #0x0088 ; Inherent
2C12 53 comb
2C13 1029061E lbvs FAIL ; branch if V=1
2C17 1024061A lbcc FAIL ; branch if C=0
2C1B 102B0616 lbmi FAIL ; branch if N=1
2C1F 10270612 lbeq FAIL ; branch if Z=1
2C23 C177 cmpb #0x077
2C25 1026060C lbne FAIL
2C29 0334 com <$034 ; Direct
2C2B 10290606 lbvs FAIL ; branch if V=1
2C2F 10240602 lbcc FAIL ; branch if C=0
2C33 102A05FE lbpl FAIL ; branch if N=0
2C37 102705FA lbeq FAIL ; branch if Z=1
2C3B 9634 lda <$034
2C3D 81ED cmpa #0x0ED
2C3F 102605F2 lbne FAIL
2C43 0334 com <$034 ; Put back origial value
2C45 8E1234 ldx #0x01234 ; Indexed
2C48 6384 com ,X
2C4A 102905E7 lbvs FAIL ; branch if V=1
2C4E 102405E3 lbcc FAIL ; branch if C=0
2C52 102A05DF lbpl FAIL ; branch if N=0
2C56 102705DB lbeq FAIL ; branch if Z=1
2C5A A684 lda ,X
2C5C A184 cmpa ,X
2C5E 102605D3 lbne FAIL
2C62 6384 com ,X ; Put back origial value
2C64 731234 com >$01234 ; Extended
2C67 102905CA lbvs FAIL ; branch if V=1
2C6B 102405C6 lbcc FAIL ; branch if C=0
2C6F 102A05C2 lbpl FAIL ; branch if N=0
2C73 102705BE lbeq FAIL ; branch if Z=1
2C77 B61234 lda >$01234
2C7A 81ED cmpa #0x0ED
2C7C 102605B5 lbne FAIL
2C80 731234 com >$01234 ; Put back origial value
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Shifts
;-----------------------------------------------------------
; ----
; ASL
; ----
2C83 8688 lda #0x0088 ; Inherent
2C85 48 asla
2C86 102805AB lbvc FAIL ; branch if V=0
2C8A 102405A7 lbcc FAIL ; branch if C=0
2C8E 102B05A3 lbmi FAIL ; branch if N=1
2C92 1027059F lbeq FAIL ; branch if Z=1
2C96 8110 cmpa #0x010
2C98 10260599 lbne FAIL
2C9C C688 ldb #0x0088 ; Inherent
2C9E 58 aslb
2C9F 10280592 lbvc FAIL ; branch if V=0
2CA3 1024058E lbcc FAIL ; branch if C=0
2CA7 102B058A lbmi FAIL ; branch if N=1
2CAB 10270586 lbeq FAIL ; branch if Z=1
2CAF C110 cmpb #0x010
2CB1 10260580 lbne FAIL
2CB5 0800 asl <$000 ; Direct
2CB7 1029057A lbvs FAIL ; branch if V=1
2CBB 10250576 lbcs FAIL ; branch if C=1
2CBF 102B0572 lbmi FAIL ; branch if N=1
2CC3 1027056E lbeq FAIL ; branch if Z=1
2CC7 9600 lda <$000
2CC9 8124 cmpa #0x024
2CCB 10260566 lbne FAIL
2CCF 0334 com <$034 ; Put back origial value
2CD1 8E1200 ldx #0x01200 ; Indexed
2CD4 6884 asl ,X
2CD6 1029055B lbvs FAIL ; branch if V=1
2CDA 10250557 lbcs FAIL ; branch if C=1
2CDE 102B0553 lbmi FAIL ; branch if N=1
2CE2 1027054F lbeq FAIL ; branch if Z=1
2CE6 A684 lda ,X
2CE8 A184 cmpa ,X
2CEA 10260547 lbne FAIL
2CEE 6384 com ,X ; Put back origial value
2CF0 781200 asl >$01200 ; Extended
2CF3 1028053E lbvc FAIL ; branch if V=0
2CF7 1024053A lbcc FAIL ; branch if C=0
2CFB 102B0536 lbmi FAIL ; branch if N=1
2CFF 10270532 lbeq FAIL ; branch if Z=1
2D03 B61234 lda >$01234
2D06 81ED cmpa #0x0ED
2D08 10260529 lbne FAIL
2D0C 731234 com >$01234 ; Put back origial value
; ----
; ASR
; ----
2D0F 8688 lda #0x0088 ; Inherent
2D11 47 asra
2D12 1025051F lbcs FAIL ; branch if C=1
2D16 102A051B lbpl FAIL ; branch if N=0
2D1A 10270517 lbeq FAIL ; branch if Z=1
2D1E 81C4 cmpa #0x0C4
2D20 10260511 lbne FAIL
2D24 C688 ldb #0x0088 ; Inherent
2D26 57 asrb
2D27 1025050A lbcs FAIL ; branch if C=1
2D2B 102A0506 lbpl FAIL ; branch if N=0
2D2F 10270502 lbeq FAIL ; branch if Z=1
2D33 C1C4 cmpb #0x0C4
2D35 102604FC lbne FAIL
2D39 0700 asr <$000 ; Direct
2D3B 102504F6 lbcs FAIL ; branch if C=1
2D3F 102B04F2 lbmi FAIL ; branch if N=1
2D43 102704EE lbeq FAIL ; branch if Z=1
2D47 9600 lda <$000
2D49 8137 cmpa #0x037
2D4B 102604E6 lbne FAIL
2D4F 0334 com <$034 ; Put back origial value
2D51 8E1200 ldx #0x01200 ; Indexed
2D54 6784 asr ,X
2D56 102404DB lbcc FAIL ; branch if C=0
2D5A 102B04D7 lbmi FAIL ; branch if N=1
2D5E 102704D3 lbeq FAIL ; branch if Z=1
2D62 A684 lda ,X
2D64 A184 cmpa ,X
2D66 102604CB lbne FAIL
2D6A 6384 com ,X ; Put back origial value
2D6C 771200 asr >$01200 ; Extended
2D6F 102504C2 lbcs FAIL ; branch if C=1
2D73 102A04BE lbpl FAIL ; branch if N=0
2D77 102704BA lbeq FAIL ; branch if Z=1
2D7B B61200 lda >$01200
2D7E 81F2 cmpa #0x0F2
2D80 102604B1 lbne FAIL
2D84 731200 com >$01200 ; Put back origial value
; ----
; LSR
; ----
2D87 8688 lda #0x0088 ; Inherent
2D89 44 lsra
2D8A 102504A7 lbcs FAIL ; branch if C=1
2D8E 102B04A3 lbmi FAIL ; branch if N=1
2D92 1027049F lbeq FAIL ; branch if Z=1
2D96 8144 cmpa #0x044
2D98 10260499 lbne FAIL
2D9C C688 ldb #0x0088 ; Inherent
2D9E 54 lsrb
2D9F 10250492 lbcs FAIL ; branch if C=1
2DA3 102B048E lbmi FAIL ; branch if N=1
2DA7 1027048A lbeq FAIL ; branch if Z=1
2DAB C144 cmpb #0x044
2DAD 10260484 lbne FAIL
2DB1 0400 lsr <$000 ; Direct
2DB3 1024047E lbcc FAIL ; branch if C=0
2DB7 102B047A lbmi FAIL ; branch if N=1
2DBB 10270476 lbeq FAIL ; branch if Z=1
2DBF 9600 lda <$000
2DC1 8106 cmpa #0x006
2DC3 1026046E lbne FAIL
2DC7 0334 com <$034 ; Put back origial value
2DC9 8E1200 ldx #0x01200 ; Indexed
2DCC 6484 lsr ,X
2DCE 10250463 lbcs FAIL ; branch if C=1
2DD2 102B045F lbmi FAIL ; branch if N=1
2DD6 1027045B lbeq FAIL ; branch if Z=1
2DDA A684 lda ,X
2DDC 8103 cmpa #0x003
2DDE 10260453 lbne FAIL
2DE2 6384 com ,X ; Put back origial value
2DE4 741200 lsr >$01200 ; Extended
2DE7 1025044A lbcs FAIL ; branch if C=1
2DEB 102B0446 lbmi FAIL ; branch if N=1
2DEF 10270442 lbeq FAIL ; branch if Z=1
2DF3 B61200 lda >$01200
2DF6 817E cmpa #0x07E
2DF8 10260439 lbne FAIL
2DFC 731200 com >$01200 ; Put back origial value
; ----
; ROL
; ----
2DFF 8688 lda #0x0088 ; Inherent
2E01 49 rola
2E02 1028042F lbvc FAIL ; branch if V=0
2E06 1024042B lbcc FAIL ; branch if C=0
2E0A 102B0427 lbmi FAIL ; branch if N=1
2E0E 10270423 lbeq FAIL ; branch if Z=1
2E12 8111 cmpa #0x011
2E14 1026041D lbne FAIL
2E18 C688 ldb #0x0088 ; Inherent
2E1A 59 rolb
2E1B 10280416 lbvc FAIL ; branch if V=0
2E1F 10240412 lbcc FAIL ; branch if C=0
2E23 102B040E lbmi FAIL ; branch if N=1
2E27 1027040A lbeq FAIL ; branch if Z=1
2E2B C110 cmpb #0x010
2E2D 10260404 lbne FAIL
2E31 0900 rol <$000 ; Direct
2E33 102803FE lbvc FAIL ; branch if V=0
2E37 102403FA lbcc FAIL ; branch if C=0
2E3B 102B03F6 lbmi FAIL ; branch if N=1
2E3F 102703F2 lbeq FAIL ; branch if Z=1
2E43 9600 lda <$000
2E45 8102 cmpa #0x002
2E47 102603EA lbne FAIL
2E4B 8E1200 ldx #0x01200 ; Indexed
2E4E 6984 rol ,X
2E50 102903E1 lbvs FAIL ; branch if V=1
2E54 102503DD lbcs FAIL ; branch if C=1
2E58 102B03D9 lbmi FAIL ; branch if N=1
2E5C 102703D5 lbeq FAIL ; branch if Z=1
2E60 A684 lda ,X
2E62 8104 cmpa #0x004
2E64 102603CD lbne FAIL
2E68 791200 rol >$01200 ; Extended
2E6B 102903C6 lbvs FAIL ; branch if V=1
2E6F 102503C2 lbcs FAIL ; branch if C=1
2E73 102B03BE lbmi FAIL ; branch if N=1
2E77 102703BA lbeq FAIL ; branch if Z=1
2E7B B61200 lda >$01200
2E7E 8108 cmpa #0x008
2E80 102603B1 lbne FAIL
; ----
; ROR
; ----
2E84 8688 lda #0x0088 ; Inherent
2E86 46 rora
2E87 102503AA lbcs FAIL ; branch if C=1
2E8B 102B03A6 lbmi FAIL ; branch if N=1
2E8F 102703A2 lbeq FAIL ; branch if Z=1
2E93 8144 cmpa #0x044
2E95 1026039C lbne FAIL
2E99 C688 ldb #0x0088 ; Inherent
2E9B 56 rorb
2E9C 10250395 lbcs FAIL ; branch if C=1
2EA0 102B0391 lbmi FAIL ; branch if N=1
2EA4 1027038D lbeq FAIL ; branch if Z=1
2EA8 C144 cmpb #0x044
2EAA 10260387 lbne FAIL
2EAE 0600 ror <$000 ; Direct
2EB0 10250381 lbcs FAIL ; branch if C=1
2EB4 102B037D lbmi FAIL ; branch if N=1
2EB8 10270379 lbeq FAIL ; branch if Z=1
2EBC 9600 lda <$000
2EBE 8104 cmpa #0x004
2EC0 10260371 lbne FAIL
2EC4 8E1200 ldx #0x01200 ; Indexed
2EC7 6684 ror ,X
2EC9 10250368 lbcs FAIL ; branch if C=1
2ECD 102B0364 lbmi FAIL ; branch if N=1
2ED1 10270360 lbeq FAIL ; branch if Z=1
2ED5 A684 lda ,X
2ED7 8102 cmpa #0x002
2ED9 10260358 lbne FAIL
2EDD 761200 ror >$01200 ; Extended
2EE0 10250351 lbcs FAIL ; branch if C=1
2EE4 102B034D lbmi FAIL ; branch if N=1
2EE8 10270349 lbeq FAIL ; branch if Z=1
2EEC B61200 lda >$01200
2EEF 8101 cmpa #0x001
2EF1 10260340 lbne FAIL
; ----
; LSR
; ----
2EF5 108E1234 ldy #0x01234
2EF9 10BF1200 sty >$01200
2EFD 8688 lda #0x0088 ; Inherent
2EFF 44 lsra
2F00 10250331 lbcs FAIL ; branch if C=1
2F04 102B032D lbmi FAIL ; branch if N=1
2F08 10270329 lbeq FAIL ; branch if Z=1
2F0C 8144 cmpa #0x044
2F0E 10260323 lbne FAIL
2F12 C688 ldb #0x0088 ; Inherent
2F14 54 lsrb
2F15 1025031C lbcs FAIL ; branch if C=1
2F19 102B0318 lbmi FAIL ; branch if N=1
2F1D 10270314 lbeq FAIL ; branch if Z=1
2F21 C144 cmpb #0x044
2F23 1026030E lbne FAIL
2F27 0400 lsr <$000 ; Direct
2F29 10250308 lbcs FAIL ; branch if C=1
2F2D 102B0304 lbmi FAIL ; branch if N=1
2F31 10270300 lbeq FAIL ; branch if Z=1
2F35 9600 lda <$000
2F37 8109 cmpa #0x009
2F39 102602F8 lbne FAIL
2F3D 0344 com <$044 ; Put back origial value
2F3F 8E1200 ldx #0x01200 ; Indexed
2F42 6484 lsr ,X
2F44 102402ED lbcc FAIL ; branch if C=0
2F48 102B02E9 lbmi FAIL ; branch if N=1
2F4C 102702E5 lbeq FAIL ; branch if Z=1
2F50 A684 lda ,X
2F52 8104 cmpa #0x004
2F54 102602DD lbne FAIL
2F58 6384 com ,X ; Put back origial value
2F5A 741200 lsr >$01200 ; Extended
2F5D 102402D4 lbcc FAIL ; branch if C=0
2F61 102B02D0 lbmi FAIL ; branch if N=1
2F65 102702CC lbeq FAIL ; branch if Z=1
2F69 B61200 lda >$01200
2F6C 817D cmpa #0x07D
2F6E 102602C3 lbne FAIL
2F72 731200 com >$01200 ; Put back origial value
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Math
;-----------------------------------------------------------
; ----
; CLR
; ----
2F75 8688 lda #0x088
2F77 4F clra
2F78 102B02B9 lbmi FAIL ; branch if N=1
2F7C 102602B5 lbne FAIL ; branch if Z=0
2F80 102902B1 lbvs FAIL ; branch if V=1
2F84 102502AD lbcs FAIL ; branch if C=1
2F88 8100 cmpa #0x000
2F8A 102602A7 lbne FAIL
2F8E C65A ldb #0x05A
2F90 5F clrb
2F91 C100 cmpb #0x000
2F93 1026029E lbne FAIL
2F97 0300 com <$000 ; Direct
2F99 0F00 clr <$000
2F9B B61200 lda >$01200
2F9E 8100 cmpa #0x000
2FA0 10260291 lbne FAIL
2FA4 108E1200 ldy #0x01200 ; Indexed
2FA8 731200 com >$01200
2FAB 6FA4 clr ,Y
2FAD B61200 lda >$01200
2FB0 8100 cmpa #0x000
2FB2 1026027F lbne FAIL
2FB6 731200 com >$01200 ; Extended
2FB9 7F1200 clr >$01200
2FBC B61200 lda >$01200
2FBF 8100 cmpa #0x000
2FC1 10260270 lbne FAIL
; ----
; DAA
; ----
2FC5 CC0000 ldd #0x0
2FC8 108EFF00 ldy #0x0FF00
2FCC 10BF1200 sty >$01200
2FD0 DAA_LOOP
2FD0 B61200 lda >$01200
2FD3 19 daa
2FD4 BB1201 adda >$01201
2FD7 B71201 sta >$01201
2FDA 7A1200 dec >$01200
2FDD 26F1 bne DAA_LOOP
2FDF B61201 lda >$01201
2FE2 818A cmpa #0x08A
2FE4 1026024D lbne FAIL
; ----
; EXG
; ----
2FE8 86AA lda #0x0AA
2FEA C6BB ldb #0x0BB
2FEC 1E89 exg a,b
2FEE 81BB cmpa #0x0BB
2FF0 10260241 lbne FAIL
2FF4 C1AA cmpb #0x0AA
2FF6 1026023B lbne FAIL
2FFA 8EAAAA ldx #0x0AAAA
2FFD 108EBBBB ldy #0x0BBBB
3001 1E12 exg x,y
3003 8CBBBB cmpx #0x0BBBB
3006 1026022B lbne FAIL
300A 108CAAAA cmpy #0x0AAAA
300E 10260223 lbne FAIL
3012 CE1111 ldu #0x01111
3015 10CE2222 lds #0x02222
3019 1E34 exg u,s
301B 11832222 cmpu #0x02222
301F 10260212 lbne FAIL
3023 118C1111 cmps #0x01111
3027 1026020A lbne FAIL
302B 1E31 exg u,x
302D 1183BBBB cmpu #0x0BBBB
3031 10260200 lbne FAIL
3035 8C2222 cmpx #0x02222
3038 102601F9 lbne FAIL
303C 1E42 exg s,y
303E 118CAAAA cmps #0x0AAAA
3042 102601EF lbne FAIL
3046 108C1111 cmpy #0x01111
304A 102601E7 lbne FAIL
304E 1E13 exg x,u
3050 8CBBBB cmpx #0x0BBBB
3053 102601DE lbne FAIL
3057 11832222 cmpu #0x02222
305B 102601D6 lbne FAIL
305F 1E24 exg y,s
3061 108CAAAA cmpy #0x0AAAA
3065 102601CC lbne FAIL
3069 118C1111 cmps #0x01111
306D 102601C4 lbne FAIL
; ----
; TFR
; ----
3071 1F89 tfr a,b
3073 C1BB cmpb #0x0BB
3075 102601BC lbne FAIL
3079 1F12 tfr x,y
307B 108CBBBB cmpy #0x0BBBB
307F 102601B2 lbne FAIL
3083 1F34 tfr u,s
3085 118C2222 cmps #0x02222
3089 102601A8 lbne FAIL
; ----
; NEG
; ----
308D 8688 lda #0x0088 ; Inherent
308F 40 nega
3090 102901A1 lbvs FAIL ; branch if V=1
3094 1024019D lbcc FAIL ; branch if C=0
3098 102B0199 lbmi FAIL ; branch if N=1
309C 10270195 lbeq FAIL ; branch if Z=1
30A0 8178 cmpa #0x078
30A2 1026018F lbne FAIL
30A6 C688 ldb #0x0088 ; Inherent
30A8 50 negb
30A9 10290188 lbvs FAIL ; branch if V=1
30AD 10240184 lbcc FAIL ; branch if C=0
30B1 102B0180 lbmi FAIL ; branch if N=1
30B5 1027017C lbeq FAIL ; branch if Z=1
30B9 C178 cmpb #0x078
30BB 10260176 lbne FAIL
30BF 0034 neg <$034 ; Direct
30C1 10290170 lbvs FAIL ; branch if V=1
30C5 1024016C lbcc FAIL ; branch if C=0
30C9 102A0168 lbpl FAIL ; branch if N=0
30CD 10270164 lbeq FAIL ; branch if Z=1
30D1 9634 lda <$034
30D3 81EE cmpa #0x0EE
30D5 1026015C lbne FAIL
30D9 0334 com <$034 ; Put back origial value
30DB 8E1234 ldx #0x01234 ; Indexed
30DE 6084 neg ,X
30E0 10290151 lbvs FAIL ; branch if V=1
30E4 1024014D lbcc FAIL ; branch if C=0
30E8 102A0149 lbpl FAIL ; branch if N=0
30EC 10270145 lbeq FAIL ; branch if Z=1
30F0 A684 lda ,X
30F2 81EF cmpa #0x0EF
30F4 1026013D lbne FAIL
30F8 6084 neg ,X ; Put back origial value
30FA 701234 neg >$01234 ; Extended
30FD 10290134 lbvs FAIL ; branch if V=1
3101 10240130 lbcc FAIL ; branch if C=0
3105 102A012C lbpl FAIL ; branch if N=0
3109 10270128 lbeq FAIL ; branch if Z=1
310D B61234 lda >$01234
3110 81EF cmpa #0x0EF
3112 1026011F lbne FAIL
3116 701234 neg >$01234 ; Put back origial value
; ----
; MUL
; ----
3119 CC0000 ldd #0x0
311C 108EFF00 ldy #0x0FF00
3120 10BF1200 sty >$01200
3124 MUL_LOOP
3124 FC1200 ldd >$01200
3127 3D mul
3128 F31202 addd >$01202
312B FD1202 std >$01202
312E 7C1201 inc >$01201
3131 7A1200 dec >$01200
3134 26EE bne MUL_LOOP
3136 FC1202 ldd >$01202
3139 10832B00 cmpd #0x02B00
313D 102600F4 lbne FAIL
; ----
; SEX
; ----
3141 C67F ldb #0x07F
3143 1D sex
3144 8100 cmpa #0x00
3146 102600EB lbne FAIL
314A C680 ldb #0x080
314C 1D sex
314D 81FF cmpa #0x0FF
314F 102600E2 lbne FAIL
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Stack
;-----------------------------------------------------------
; System Stack starts at 0xF100
; User Stack starts at 0xF200
3153 86AA lda #0x0AA
3155 C6BB ldb #0x0BB
3157 8E1234 ldx #0x01234
315A 108E5678 ldy #0x05678
315E 10CEF100 lds #0x0F100
3162 CEF200 ldu #0x0F200
3165 343E pshs #0x03E
3167 363E pshu #0x03E
3169 B6F1F9 lda >$0F1F9 ; register_A
316C 81AA cmpa #0x0AA
316E 102600C3 lbne FAIL
3172 B6F1FA lda >$0F1FA ; register_B
3175 81BB cmpa #0x0BB
3177 102600BA lbne FAIL
317B B6F1FB lda >$0F1FB ; register_DP
317E 8112 cmpa #0x012
3180 102600B1 lbne FAIL
3184 BEF1FC ldx >$0F1FC ; register_X
3187 8C1234 cmpx #0x01234
318A 102600A7 lbne FAIL
318E BEF1FE ldx >$0F1FE ; register_Y
3191 8C5678 cmpx #0x05678
3194 1026009D lbne FAIL
3198 8600 lda #0x00
319A C600 ldb #0x00
319C 8E0000 ldx #0x00
319F 108E0000 ldy #0x00
31A3 353E puls #0x03E
31A5 373E pulu #0x03E
31A7 81AA cmpa #0x0AA ; register_A
31A9 10260088 lbne FAIL
31AD C1BB cmpb #0x0BB ; register_B
31AF 10260082 lbne FAIL
31B3 8C1234 cmpx #0x01234 ; register_X
31B6 1026007B lbne FAIL
31BA 108C5678 cmpy #0x05678 ; register_Y
31BE 10260073 lbne FAIL
31C2 12 nop
31C3 12 nop
;-----------------------------------------------------------
;-----------------------------------------------------------
; Test - Traps, Interrupts
;-----------------------------------------------------------
31C4 86AA lda #0x0AA
31C6 C6BB ldb #0x0BB
31C8 8E1234 ldx #0x01234
31CB 108E5678 ldy #0x05678
31CF 3F swi
31D0 81AA cmpa #0x0AA
31D2 1026005F lbne FAIL
31D6 C1BB cmpb #0x0BB
31D8 10260059 lbne FAIL
31DC 8C1234 cmpx #0x01234
31DF 10260052 lbne FAIL
31E3 108C5678 cmpy #0x05678
31E7 1026004A lbne FAIL
31EB 12 nop
31EC 12 nop
31ED 12 nop
31EE 103F swi2
31F0 81AA cmpa #0x0AA
31F2 1026003F lbne FAIL
31F6 C1BB cmpb #0x0BB
31F8 10260039 lbne FAIL
31FC 8C1234 cmpx #0x01234
31FF 10260032 lbne FAIL
3203 108C5678 cmpy #0x05678
3207 1026002A lbne FAIL
320B 12 nop
320C 12 nop
320D 12 nop
320E 113F swi3
3210 81AA cmpa #0x0AA
3212 1026001F lbne FAIL
3216 C1BB cmpb #0x0BB
3218 10260019 lbne FAIL
321C 8C1234 cmpx #0x01234
321F 10260012 lbne FAIL
3223 108C5678 cmpy #0x05678
3227 1026000A lbne FAIL
322B 12 nop
322C 12 nop
322D 12 nop
;sync
;cwai #0x66
322E 7E3231 jmp ALL_DONE
;-----------------------------------------------------------
;-----------------------------------------------------------
; Loop here when all tests pass
;
3231 ALL_DONE
3231 3D mul
3232 7E3231 jmp ALL_DONE
; Loop here when any test fails
;
3235 FAIL
3235 7E3235 jmp FAIL