potatis/test-roms/bin/functional_test_full.lst
2022-09-27 21:30:23 +02:00

7012 lines
311 KiB
Text

ca65 V2.18 - N/A
Main file : ./6502_65C02_functional_tests/ca65/6502_functional_test.ca65
Current file: ./6502_65C02_functional_tests/ca65/6502_functional_test.ca65
000000r 1 ;
000000r 1 ; 6 5 0 2 F U N C T I O N A L T E S T
000000r 1 ;
000000r 1 ; Copyright (C) 2012-2020 Klaus Dormann
000000r 1 ;
000000r 1 ; This program is free software: you can redistribute it and/or modify
000000r 1 ; it under the terms of the GNU General Public License as published by
000000r 1 ; the Free Software Foundation, either version 3 of the License, or
000000r 1 ; (at your option) any later version.
000000r 1 ;
000000r 1 ; This program is distributed in the hope that it will be useful,
000000r 1 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
000000r 1 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
000000r 1 ; GNU General Public License for more details.
000000r 1 ;
000000r 1 ; You should have received a copy of the GNU General Public License
000000r 1 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
000000r 1
000000r 1
000000r 1 ; This program is designed to test all opcodes of a 6502 emulator using all
000000r 1 ; addressing modes with focus on propper setting of the processor status
000000r 1 ; register bits.
000000r 1 ;
000000r 1 ; version 05-jan-2020
000000r 1 ; contact info at http://2m5.de or email K@2m5.de
000000r 1 ;
000000r 1 ; assembled with CA65, linked with LD65 (cc65.github.io):
000000r 1 ; ca65 -l 6502_functional_test.lst 6502_functional_test.ca65
000000r 1 ; ld65 6502_functional_test.o -o 6502_functional_test.bin \
000000r 1 ; -m 6502_functional_test.map -C example.cfg
000000r 1 ; example linker config (example.cfg):
000000r 1 ; MEMORY {
000000r 1 ; RAM: start = $0000, size=$8000, type = rw, fill = yes, \
000000r 1 ; fillval = $FF, file = %O;
000000r 1 ; ROM: start = $8000, size=$7FFA, type = ro, fill = yes, \
000000r 1 ; fillval = $FF, file = %O;
000000r 1 ; ROM_VECTORS: start = $FFFA, size=6, type = ro, fill = yes, \
000000r 1 ; fillval = $FF, file = %O;
000000r 1 ; }
000000r 1 ; SEGMENTS {
000000r 1 ; ZEROPAGE: load=RAM, type=rw;
000000r 1 ; DATA: load=RAM, type=rw, offset=$0200;
000000r 1 ; CODE: load=RAM, type=rw, offset=$0400;
000000r 1 ; VECTORS: load=ROM_VECTORS, type=ro;
000000r 1 ; }
000000r 1 ;
000000r 1 ; No IO - should be run from a monitor with access to registers.
000000r 1 ; To run load intel hex image with a load command, than alter PC to 400 hex
000000r 1 ; (code_segment) and enter a go command.
000000r 1 ; Loop on program counter determines error or successful completion of test.
000000r 1 ; Check listing for relevant traps (jump/branch *).
000000r 1 ; Please note that in early tests some instructions will have to be used before
000000r 1 ; they are actually tested!
000000r 1 ;
000000r 1 ; RESET, NMI or IRQ should not occur and will be trapped if vectors are enabled.
000000r 1 ; Tests documented behavior of the original NMOS 6502 only! No unofficial
000000r 1 ; opcodes. Additional opcodes of newer versions of the CPU (65C02, 65816) will
000000r 1 ; not be tested. Decimal ops will only be tested with valid BCD operands and
000000r 1 ; N V Z flags will be ignored.
000000r 1 ;
000000r 1 ; Debugging hints:
000000r 1 ; Most of the code is written sequentially. if you hit a trap, check the
000000r 1 ; immediately preceeding code for the instruction to be tested. Results are
000000r 1 ; tested first, flags are checked second by pushing them onto the stack and
000000r 1 ; pulling them to the accumulator after the result was checked. The "real"
000000r 1 ; flags are no longer valid for the tested instruction at this time!
000000r 1 ; If the tested instruction was indexed, the relevant index (X or Y) must
000000r 1 ; also be checked. Opposed to the flags, X and Y registers are still valid.
000000r 1 ;
000000r 1 ; versions:
000000r 1 ; 28-jul-2012 1st version distributed for testing
000000r 1 ; 29-jul-2012 fixed references to location 0, now #0
000000r 1 ; added license - GPLv3
000000r 1 ; 30-jul-2012 added configuration options
000000r 1 ; 01-aug-2012 added trap macro to allow user to change error handling
000000r 1 ; 01-dec-2012 fixed trap in branch field must be a branch
000000r 1 ; 02-mar-2013 fixed PLA flags not tested
000000r 1 ; 19-jul-2013 allowed ROM vectors to be loaded when load_data_direct = 0
000000r 1 ; added test sequence check to detect if tests jump their fence
000000r 1 ; 23-jul-2013 added RAM integrity check option
000000r 1 ; 16-aug-2013 added error report to standard output option
000000r 1 ; 13-dec-2014 added binary/decimal opcode table switch test
000000r 1 ; 14-dec-2014 improved relative address test
000000r 1 ; 23-aug-2015 added option to disable self modifying tests
000000r 1 ; 24-aug-2015 all self modifying immediate opcodes now execute in data RAM
000000r 1 ; added small branch offset pretest
000000r 1 ; 21-oct-2015 added option to disable decimal mode ADC & SBC tests
000000r 1 ; 04-dec-2017 fixed BRK only tested with interrupts enabled
000000r 1 ; added option to skip the remainder of a failing test
000000r 1 ; in report.i65
000000r 1 ; 05-jan-2020 fixed shifts not testing zero result and flag when last 1-bit
000000r 1 ; is shifted out
000000r 1
000000r 1 ; C O N F I G U R A T I O N
000000r 1
000000r 1 ;ROM_vectors writable (0=no, 1=yes)
000000r 1 ;if ROM vectors can not be used interrupts will not be trapped
000000r 1 ;as a consequence BRK can not be tested but will be emulated to test RTI
000000r 1 ROM_vectors = 1
000000r 1
000000r 1 ;load_data_direct (0=move from code segment, 1=load directly)
000000r 1 ;loading directly is preferred but may not be supported by your platform
000000r 1 ;0 produces only consecutive object code, 1 is not suitable for a binary image
000000r 1 load_data_direct = 1
000000r 1
000000r 1 ;I_flag behavior (0=force enabled, 1=force disabled, 2=prohibit change, 3=allow
000000r 1 ;change) 2 requires extra code and is not recommended. SEI & CLI can only be
000000r 1 ;tested if you allow changing the interrupt status (I_flag = 3)
000000r 1 I_flag = 3
000000r 1
000000r 1 ;configure memory - try to stay away from memory used by the system
000000r 1 ;zero_page memory start address, $52 (82) consecutive Bytes required
000000r 1 ; add 2 if I_flag = 2
000000r 1 zero_page = $a
000000r 1
000000r 1 ;data_segment memory start address, $7B (123) consecutive Bytes required
000000r 1 ; check that this matches the linker configuration file
000000r 1 data_segment = $200
000000r 1 .if (data_segment & $ff) <> 0
000000r 1 .error "low byte of data_segment MUST be $00 !!"
000000r 1 .endif
000000r 1
000000r 1 ;code_segment memory start address, 13.1kB of consecutive space required
000000r 1 ; add 2.5 kB if I_flag = 2
000000r 1 ; check that this matches the linker configuration file
000000r 1 code_segment = $400
000000r 1
000000r 1 ;self modifying code may be disabled to allow running in ROM
000000r 1 ;0=part of the code is self modifying and must reside in RAM
000000r 1 ;1=tests disabled: branch range
000000r 1 disable_selfmod = 0
000000r 1
000000r 1 ;report errors through I/O channel (0=use standard self trap loops, 1=include
000000r 1 ;report.i65 as I/O channel, add 3.5 kB)
000000r 1 report = 0
000000r 1
000000r 1 ;RAM integrity test option. Checks for undesired RAM writes.
000000r 1 ;set lowest non RAM or RAM mirror address page (-1=disable, 0=64k, $40=16k)
000000r 1 ;leave disabled if a monitor, OS or background interrupt is allowed to alter RAM
000000r 1 ram_top = -1
000000r 1
000000r 1 ;disable test decimal mode ADC & SBC, 0=enable, 1=disable,
000000r 1 ;2=disable including decimal flag in processor status
000000r 1 disable_decimal = 0
000000r 1
000000r 1 ;macros for error & success traps to allow user modification
000000r 1 ;example:
000000r 1 ; .macro trap
000000r 1 ; jsr my_error_handler
000000r 1 ; .endmacro
000000r 1 ; .macro trap_eq
000000r 1 ; bne :+
000000r 1 ; trap ;failed equal (zero)
000000r 1 ;:
000000r 1 ; .endmacro
000000r 1 ;
000000r 1 ; my_error_handler should pop the calling address from the stack and report it.
000000r 1 ; putting larger portions of code (more than 3 bytes) inside the trap macro
000000r 1 ; may lead to branch range problems for some tests.
000000r 1 .if report = 0
000000r 1 .macro trap
000000r 1 jmp * ;failed anyway
000000r 1 .endmacro
000000r 1 .macro trap_eq
000000r 1 beq * ;failed equal (zero)
000000r 1 .endmacro
000000r 1 .macro trap_ne
000000r 1 bne * ;failed not equal (non zero)
000000r 1 .endmacro
000000r 1 .macro trap_cs
000000r 1 bcs * ;failed carry set
000000r 1 .endmacro
000000r 1 .macro trap_cc
000000r 1 bcc * ;failed carry clear
000000r 1 .endmacro
000000r 1 .macro trap_mi
000000r 1 bmi * ;failed minus (bit 7 set)
000000r 1 .endmacro
000000r 1 .macro trap_pl
000000r 1 bpl * ;failed plus (bit 7 clear)
000000r 1 .endmacro
000000r 1 .macro trap_vs
000000r 1 bvs * ;failed overflow set
000000r 1 .endmacro
000000r 1 .macro trap_vc
000000r 1 bvc * ;failed overflow clear
000000r 1 .endmacro
000000r 1 ; please observe that during the test the stack gets invalidated
000000r 1 ; therefore a RTS inside the success macro is not possible
000000r 1 .macro success
000000r 1 jmp * ;test passed, no errors
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if report = 1
000000r 1 .macro trap
000000r 1 jsr report_error
000000r 1 .endmacro
000000r 1 .macro trap_eq
000000r 1 bne :+
000000r 1 trap ;failed equal (zero)
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_ne
000000r 1 beq :+
000000r 1 trap ;failed not equal (non zero)
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_cs
000000r 1 bcc :+
000000r 1 trap ;failed carry set
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_cc
000000r 1 bcs :+
000000r 1 trap ;failed carry clear
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_mi
000000r 1 bpl :+
000000r 1 trap ;failed minus (bit 7 set)
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_pl
000000r 1 bmi :+
000000r 1 trap ;failed plus (bit 7 clear)
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_vs
000000r 1 bvc :+
000000r 1 trap ;failed overflow set
000000r 1 :
000000r 1 .endmacro
000000r 1 .macro trap_vc
000000r 1 bvs :+
000000r 1 trap ;failed overflow clear
000000r 1 :
000000r 1 .endmacro
000000r 1 ; please observe that during the test the stack gets invalidated
000000r 1 ; therefore a RTS inside the success macro is not possible
000000r 1 .macro success
000000r 1 jsr report_success
000000r 1 .endmacro
000000r 1 .endif
000000r 1
000000r 1 .define equ =
000000r 1
000000r 1 carry equ %00000001 ;flag bits in status
000000r 1 zero equ %00000010
000000r 1 intdis equ %00000100
000000r 1 decmode equ %00001000
000000r 1 break equ %00010000
000000r 1 reserv equ %00100000
000000r 1 overfl equ %01000000
000000r 1 minus equ %10000000
000000r 1
000000r 1 fc equ carry
000000r 1 fz equ zero
000000r 1 fzc equ carry+zero
000000r 1 fv equ overfl
000000r 1 fvz equ overfl+zero
000000r 1 fn equ minus
000000r 1 fnc equ minus+carry
000000r 1 fnz equ minus+zero
000000r 1 fnzc equ minus+zero+carry
000000r 1 fnv equ minus+overfl
000000r 1
000000r 1 fao equ break+reserv ;bits always on after PHP, BRK
000000r 1 fai equ fao+intdis ;+ forced interrupt disable
000000r 1 faod equ fao+decmode ;+ ignore decimal
000000r 1 faid equ fai+decmode ;+ ignore decimal
000000r 1 m8 equ $ff ;8 bit mask
000000r 1 m8i equ $ff&~intdis ;8 bit mask - interrupt disable
000000r 1
000000r 1 ;macros to allow masking of status bits.
000000r 1 ;masking test of decimal bit
000000r 1 ;masking of interrupt enable/disable on load and compare
000000r 1 ;masking of always on bits after PHP or BRK (unused & break) on compare
000000r 1 .if disable_decimal < 2
000000r 1 .if I_flag = 0
000000r 1 .macro load_flag p1
000000r 1 lda #p1&m8i ;force enable interrupts (mask I)
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 cmp #(p1|fao)&m8i ;I_flag is always enabled + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 eor #(p1&m8i|fao) ;mask I, invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 1
000000r 1 .macro load_flag p1
000000r 1 lda #p1|intdis ;force disable interrupts
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 cmp #(p1|fai)&m8 ;I_flag is always disabled + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 eor #(p1|fai) ;invert expected flags + always on bits + I
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 2
000000r 1 .macro load_flag p1
000000r 1 lda #p1
000000r 1 ora flag_I_on ;restore I-flag
000000r 1 and flag_I_off
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 eor flag_I_on ;I_flag is never changed
000000r 1 cmp #(p1|fao)&m8i ;expected flags + always on bits, mask I
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 eor flag_I_on ;I_flag is never changed
000000r 1 eor #(p1&m8i|fao) ;mask I, invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 3
000000r 1 .macro load_flag p1
000000r 1 lda #p1 ;allow test to change I-flag (no mask)
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 cmp #(p1|fao)&m8 ;expected flags + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 eor #p1|fao ;invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .else
000000r 1 .if I_flag = 0
000000r 1 .macro load_flag p1
000000r 1 lda #p1&m8i ;force enable interrupts (mask I)
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 cmp #(p1|faod)&m8i ;I_flag is always enabled + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 eor #(p1&m8i|faod) ;mask I, invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 1
000000r 1 .macro load_flag p1
000000r 1 lda #p1|intdis ;force disable interrupts
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 cmp #(p1|faid)&m8 ;I_flag is always disabled + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 eor #(p1|faid) ;invert expected flags + always on bits + I
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 2
000000r 1 .macro load_flag p1
000000r 1 lda #p1
000000r 1 ora flag_I_on ;restore I-flag
000000r 1 and flag_I_off
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 eor flag_I_on ;I_flag is never changed
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 cmp #(p1|faod)&m8i ;expected flags + always on bits, mask I
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 eor flag_I_on ;I_flag is never changed
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 eor #(p1&m8i|faod) ;mask I, invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .if I_flag = 3
000000r 1 .macro load_flag p1
000000r 1 lda #p1 ;allow test to change I-flag (no mask)
000000r 1 .endmacro
000000r 1 .macro cmp_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 cmp #(p1|faod)&m8 ;expected flags + always on bits
000000r 1 .endmacro
000000r 1 .macro eor_flag p1
000000r 1 ora #decmode ;ignore decimal mode bit
000000r 1 eor #p1|faod ;invert expected flags + always on bits
000000r 1 .endmacro
000000r 1 .endif
000000r 1 .endif
000000r 1
000000r 1 ;macros to set (register|memory|zeropage) & status
000000r 1 .macro set_stat p1 ;setting flags in the processor status register
000000r 1 load_flag p1
000000r 1 pha ;use stack to load status
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_a p1,p2 ;precharging accu & status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda #p1 ;precharge accu
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_x p1,p2 ;precharging index & status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 ldx #p1 ;precharge index x
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_y p1,p2 ;precharging index & status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 ldy #p1 ;precharge index y
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_ax p1,p2 ;precharging indexed accu & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,x ;precharge accu
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_ay p1,p2 ;precharging indexed accu & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,y ;precharge accu
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_z p1,p2 ;precharging indexed zp & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,x ;load to zeropage
000000r 1 sta zpt
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_zx p1,p2 ;precharging zp,x & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,x ;load to indexed zeropage
000000r 1 sta zpt,x
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_abs p1,p2 ;precharging indexed memory & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,x ;load to memory
000000r 1 sta abst
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 .macro set_absx p1,p2 ;precharging abs,x & immediate status
000000r 1 load_flag p2
000000r 1 pha ;use stack to load status
000000r 1 lda p1,x ;load to indexed memory
000000r 1 sta abst,x
000000r 1 plp
000000r 1 .endmacro
000000r 1
000000r 1 ;macros to test (register|memory|zeropage) & status & (mask)
000000r 1 .macro tst_stat p1 ;testing flags in the processor status register
000000r 1 php ;save status
000000r 1 pla ;use stack to retrieve status
000000r 1 pha
000000r 1 cmp_flag p1
000000r 1 trap_ne
000000r 1 plp ;restore status
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_a p1,p2 ;testing result in accu & flags
000000r 1 php ;save flags
000000r 1 cmp #p1 ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 pha
000000r 1 cmp_flag p2
000000r 1 trap_ne
000000r 1 plp ;restore status
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_x p1,p2 ;testing result in x index & flags
000000r 1 php ;save flags
000000r 1 cpx #p1 ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 pha
000000r 1 cmp_flag p2
000000r 1 trap_ne
000000r 1 plp ;restore status
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_y p1,p2 ;testing result in y index & flags
000000r 1 php ;save flags
000000r 1 cpy #p1 ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 pha
000000r 1 cmp_flag p2
000000r 1 trap_ne
000000r 1 plp ;restore status
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_ax p1,p2,p3 ;indexed testing result in accu & flags
000000r 1 php ;save flags
000000r 1 cmp p1,x ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,x ;test flags
000000r 1 trap_ne ;
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_ay p1,p2,p3 ;indexed testing result in accu & flags
000000r 1 php ;save flags
000000r 1 cmp p1,y ;test result
000000r 1 trap_ne ;
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,y ;test flags
000000r 1 trap_ne
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_z p1,p2,p3 ;indexed testing result in zp & flags
000000r 1 php ;save flags
000000r 1 lda zpt
000000r 1 cmp p1,x ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,x ;test flags
000000r 1 trap_ne
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_zx p1,p2,p3 ;testing result in zp,x & flags
000000r 1 php ;save flags
000000r 1 lda zpt,x
000000r 1 cmp p1,x ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,x ;test flags
000000r 1 trap_ne
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_abs p1,p2,p3 ;indexed testing result in memory & flags
000000r 1 php ;save flags
000000r 1 lda abst
000000r 1 cmp p1,x ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,x ;test flags
000000r 1 trap_ne
000000r 1 .endmacro
000000r 1
000000r 1 .macro tst_absx p1,p2,p3 ;testing result in abs,x & flags
000000r 1 php ;save flags
000000r 1 lda abst,x
000000r 1 cmp p1,x ;test result
000000r 1 trap_ne
000000r 1 pla ;load status
000000r 1 eor_flag p3
000000r 1 cmp p2,x ;test flags
000000r 1 trap_ne
000000r 1 .endmacro
000000r 1
000000r 1 ; RAM integrity test
000000r 1 ; verifies that none of the previous tests has altered RAM outside of the
000000r 1 ; designated write areas.
000000r 1 ; uses zpt word as indirect pointer, zpt+2 word as checksum
000000r 1 .if ram_top > -1
000000r 1 check_ram macro
000000r 1 cld
000000r 1 lda #0
000000r 1 sta zpt ;set low byte of indirect pointer
000000r 1 sta zpt+3 ;checksum high byte
000000r 1 .if disable_selfmod = 0
000000r 1 sta range_adr ;reset self modifying code
000000r 1 .endif
000000r 1 clc
000000r 1 ldx #zp_bss-zero_page ;zeropage - write test area
000000r 1 ccs3: adc zero_page,x
000000r 1 bcc ccs2
000000r 1 inc zpt+3 ;carry to high byte
000000r 1 clc
000000r 1 ccs2: inx
000000r 1 bne ccs3
000000r 1 ldx #hi(abs1) ;set high byte of indirect pointer
000000r 1 stx zpt+1
000000r 1 ldy #lo(abs1) ;data after write & execute test area
000000r 1 ccs5: adc (zpt),y
000000r 1 bcc ccs4
000000r 1 inc zpt+3 ;carry to high byte
000000r 1 clc
000000r 1 ccs4: iny
000000r 1 bne ccs5
000000r 1 inx ;advance RAM high address
000000r 1 stx zpt+1
000000r 1 cpx #ram_top
000000r 1 bne ccs5
000000r 1 sta zpt+2 ;checksum low is
000000r 1 cmp ram_chksm ;checksum low expected
000000r 1 trap_ne ;checksum mismatch
000000r 1 lda zpt+3 ;checksum high is
000000r 1 cmp ram_chksm+1 ;checksum high expected
000000r 1 trap_ne ;checksum mismatch
000000r 1 .endmacro
000000r 1 .else
000000r 1 .macro check_ram
000000r 1 ;RAM check disabled - RAM size not set
000000r 1 .endmacro
000000r 1 .endif
000000r 1
000000r 1 .macro next_test ;make sure, tests don't jump the fence
000000r 1 lda test_case ;previous test
000000r 1 cmp #test_num
000000r 1 trap_ne ;test is out of sequence
000000r 1 test_num .set test_num + 1
000000r 1 lda #test_num ;*** next tests' number
000000r 1 sta test_case
000000r 1 ;check_ram ;uncomment to find altered RAM after each test
000000r 1 .endmacro
000000r 1
000000r 1 .ZEROPAGE
000000r 1 00 00 00 00 .res zero_page, 0
000004r 1 00 00 00 00
000008r 1 00 00
00000Ar 1 .org zero_page
00000A 1
00000A 1 ;break test interrupt save
00000A 1 00 irq_a: .res 1,0 ;a register
00000B 1 00 irq_x: .res 1,0 ;x register
00000C 1 .if I_flag = 2
00000C 1 ;masking for I bit in status
00000C 1 flag_I_on: .res 1,0 ;or mask to load flags
00000C 1 flag_I_off: .res 1,0 ;and mask to load flags
00000C 1 .endif
00000C 1 zpt: ;6 bytes store/modify test area
00000C 1 ;add/subtract operand generation and result/flag prediction
00000C 1 00 adfc: .res 1,0 ;carry flag before op
00000D 1 00 ad1: .res 1,0 ;operand 1 - accumulator
00000E 1 00 ad2: .res 1,0 ;operand 2 - memory / immediate
00000F 1 00 adrl: .res 1,0 ;expected result bits 0-7
000010 1 00 adrh: .res 1,0 ;expected result bit 8 (carry)
000011 1 00 adrf: .res 1,0 ;expected flags NV0000ZC (only binary mode)
000012 1 00 sb2: .res 1,0 ;operand 2 complemented for subtract
000013 1 zp_bss:
000013 1 80 01 zps: .byte $80,1 ;additional shift pattern to test zero result & flag
000015 1 C3 82 41 00 zp1: .byte $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR
000019 1 7F zp7f: .byte $7f ;test pattern for compare
00001A 1 ;logical zeropage operands
00001A 1 00 1F 71 80 zpOR: .byte 0,$1f,$71,$80 ;test pattern for OR
00001E 1 0F FF 7F 80 zpAN: .byte $0f,$ff,$7f,$80 ;test pattern for AND
000022 1 FF 0F 8F 8F zpEO: .byte $ff,$0f,$8f,$8f ;test pattern for EOR
000026 1 ;indirect addressing pointers
000026 1 18 02 ind1: .word abs1 ;indirect pointer to pattern in absolute memory
000028 1 19 02 .word abs1+1
00002A 1 1A 02 .word abs1+2
00002C 1 1B 02 .word abs1+3
00002E 1 1C 02 .word abs7f
000030 1 20 01 inw1: .word abs1-$f8 ;indirect pointer for wrap-test pattern
000032 1 03 02 indt: .word abst ;indirect pointer to store area in absolute memory
000034 1 04 02 .word abst+1
000036 1 05 02 .word abst+2
000038 1 06 02 .word abst+3
00003A 1 0B 01 inwt: .word abst-$f8 ;indirect pointer for wrap-test store
00003C 1 5F 02 indAN: .word absAN ;indirect pointer to AND pattern in absolute memory
00003E 1 60 02 .word absAN+1
000040 1 61 02 .word absAN+2
000042 1 62 02 .word absAN+3
000044 1 63 02 indEO: .word absEO ;indirect pointer to EOR pattern in absolute memory
000046 1 64 02 .word absEO+1
000048 1 65 02 .word absEO+2
00004A 1 66 02 .word absEO+3
00004C 1 5B 02 indOR: .word absOR ;indirect pointer to OR pattern in absolute memory
00004E 1 5C 02 .word absOR+1
000050 1 5D 02 .word absOR+2
000052 1 5E 02 .word absOR+3
000054 1 ;add/subtract indirect pointers
000054 1 03 02 adi2: .word ada2 ;indirect pointer to operand 2 in absolute memory
000056 1 04 02 sbi2: .word sba2 ;indirect pointer to complemented operand 2 (SBC)
000058 1 04 01 adiy2: .word ada2-$ff ;with offset for indirect indexed
00005A 1 05 01 sbiy2: .word sba2-$ff
00005C 1 zp_bss_end:
00005C 1
00005C 1 .DATA
00005C 1 .org data_segment
000200 1
000200 1 00 test_case: .res 1,0 ;current test number
000201 1 00 00 ram_chksm: .res 2,0 ;checksum for RAM integrity test
000203 1 ;add/subtract operand copy - abs tests write area
000203 1 abst: ;6 bytes store/modify test area
000203 1 00 ada2: .res 1,0 ;operand 2
000204 1 00 sba2: .res 1,0 ;operand 2 complemented for subtract
000205 1 00 00 00 00 .res 4,0 ;fill remaining bytes
000209 1 data_bss:
000209 1 .if load_data_direct = 1
000209 1 29 00 ex_andi:and #0 ;execute immediate opcodes
00020B 1 60 rts
00020C 1 49 00 ex_eori:eor #0 ;execute immediate opcodes
00020E 1 60 rts
00020F 1 09 00 ex_orai:ora #0 ;execute immediate opcodes
000211 1 60 rts
000212 1 69 00 ex_adci:adc #0 ;execute immediate opcodes
000214 1 60 rts
000215 1 E9 00 ex_sbci:sbc #0 ;execute immediate opcodes
000217 1 60 rts
000218 1 .else
000218 1 ex_andi:.res 3
000218 1 ex_eori:.res 3
000218 1 ex_orai:.res 3
000218 1 ex_adci:.res 3
000218 1 ex_sbci:.res 3
000218 1 .endif
000218 1 ;zps .byte $80,1 ;additional shift patterns test zero result & flag
000218 1 C3 82 41 00 abs1: .byte $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR
00021C 1 7F abs7f: .byte $7f ;test pattern for compare
00021D 1 ;loads
00021D 1 80 80 00 02 fLDx: .byte fn,fn,0,fz ;expected flags for load
000221 1 ;shifts
000221 1 rASL: ;expected result ASL & ROL -carry
000221 1 00 02 86 04 rROL: .byte 0,2,$86,$04,$82,0
000225 1 82 00
000227 1 01 03 87 05 rROLc: .byte 1,3,$87,$05,$83,1 ;expected result ROL +carry
00022B 1 83 01
00022D 1 rLSR: ;expected result LSR & ROR -carry
00022D 1 40 00 61 41 rROR: .byte $40,0,$61,$41,$20,0
000231 1 20 00
000233 1 C0 80 E1 C1 rRORc: .byte $c0,$80,$e1,$c1,$a0,$80 ;expected result ROR +carry
000237 1 A0 80
000239 1 fASL: ;expected flags for shifts
000239 1 03 00 81 01 fROL: .byte fzc,0,fnc,fc,fn,fz ;no carry in
00023D 1 80 02
00023F 1 01 00 81 01 fROLc: .byte fc,0,fnc,fc,fn,0 ;carry in
000243 1 80 00
000245 1 fLSR:
000245 1 00 03 01 00 fROR: .byte 0,fzc,fc,0,fc,fz ;no carry in
000249 1 01 02
00024B 1 80 81 81 80 fRORc: .byte fn,fnc,fnc,fn,fnc,fn ;carry in
00024F 1 81 80
000251 1 ;increments (decrements)
000251 1 7F 80 FF 00 rINC: .byte $7f,$80,$ff,0,1 ;expected result for INC/DEC
000255 1 01
000256 1 00 80 80 02 fINC: .byte 0,fn,fn,fz,0 ;expected flags for INC/DEC
00025A 1 00
00025B 1 ;logical memory operand
00025B 1 00 1F 71 80 absOR: .byte 0,$1f,$71,$80 ;test pattern for OR
00025F 1 0F FF 7F 80 absAN: .byte $0f,$ff,$7f,$80 ;test pattern for AND
000263 1 FF 0F 8F 8F absEO: .byte $ff,$0f,$8f,$8f ;test pattern for EOR
000267 1 ;logical accu operand
000267 1 00 F1 1F 00 absORa: .byte 0,$f1,$1f,0 ;test pattern for OR
00026B 1 F0 FF FF FF absANa: .byte $f0,$ff,$ff,$ff ;test pattern for AND
00026F 1 FF F0 F0 0F absEOa: .byte $ff,$f0,$f0,$0f ;test pattern for EOR
000273 1 ;logical results
000273 1 00 FF 7F 80 absrlo: .byte 0,$ff,$7f,$80
000277 1 02 80 00 80 absflo: .byte fz,fn,0,fn
00027B 1 data_bss_end:
00027B 1
00027B 1
00027B 1 .CODE
00027B 1 .org code_segment
000400 1 .P02 ; disable 65SC02, 65C02 and 65816 instructions
000400 1 D8 start: cld
000401 1 A2 FF ldx #$ff
000403 1 9A txs
000404 1 A9 00 lda #0 ;*** test 0 = initialize
000406 1 8D 00 02 sta test_case
000409 1 test_num .set 0
000409 1
000409 1 ;stop interrupts before initializing BSS
000409 1 .if I_flag = 1
000409 1 sei
000409 1 .endif
000409 1
000409 1 ;initialize I/O for report channel
000409 1 .if report = 1
000409 1 jsr report_init
000409 1 .endif
000409 1
000409 1 ;pretest small branch offset
000409 1 A2 05 ldx #5
00040B 1 4C 33 04 jmp psb_test
00040E 1 psb_bwok:
00040E 1 A0 05 ldy #5
000410 1 D0 08 bne psb_forw
000412 1 4C 12 04 trap ;branch should be taken
000415 1 88 dey ;forward landing zone
000416 1 88 dey
000417 1 88 dey
000418 1 88 dey
000419 1 88 dey
00041A 1 psb_forw:
00041A 1 88 dey
00041B 1 88 dey
00041C 1 88 dey
00041D 1 88 dey
00041E 1 88 dey
00041F 1 F0 17 beq psb_fwok
000421 1 4C 21 04 trap ;forward offset
000424 1
000424 1 CA dex ;backward landing zone
000425 1 CA dex
000426 1 CA dex
000427 1 CA dex
000428 1 CA dex
000429 1 psb_back:
000429 1 CA dex
00042A 1 CA dex
00042B 1 CA dex
00042C 1 CA dex
00042D 1 CA dex
00042E 1 F0 DE beq psb_bwok
000430 1 4C 30 04 trap ;backward offset
000433 1 psb_test:
000433 1 D0 F4 bne psb_back
000435 1 4C 35 04 trap ;branch should be taken
000438 1 psb_fwok:
000438 1
000438 1 ;initialize BSS segment
000438 1 .if load_data_direct <> 1
000438 1 ldx #zp_end-zp_init-1
000438 1 ld_zp: lda zp_init,x
000438 1 sta zp_bss,x
000438 1 dex
000438 1 bpl ld_zp
000438 1 ldx #data_end-data_init-1
000438 1 ld_data:lda data_init,x
000438 1 sta data_bss,x
000438 1 dex
000438 1 bpl ld_data
000438 1 .if ROM_vectors = 1
000438 1 ldx #5
000438 1 ld_vect:lda vec_init,x
000438 1 sta vec_bss,x
000438 1 dex
000438 1 bpl ld_vect
000438 1 .endif
000438 1 .endif
000438 1
000438 1 ;retain status of interrupt flag
000438 1 .if I_flag = 2
000438 1 php
000438 1 pla
000438 1 and #4 ;isolate flag
000438 1 sta flag_I_on ;or mask
000438 1 eor #lo(~4) ;reverse
000438 1 sta flag_I_off ;and mask
000438 1 .endif
000438 1
000438 1 ;generate checksum for RAM integrity test
000438 1 .if ram_top > -1
000438 1 lda #0
000438 1 sta zpt ;set low byte of indirect pointer
000438 1 sta ram_chksm+1 ;checksum high byte
000438 1 .if disable_selfmod = 0
000438 1 sta range_adr ;reset self modifying code
000438 1 .endif
000438 1 clc
000438 1 ldx #zp_bss-zero_page ;zeropage - write test area
000438 1 gcs3: adc zero_page,x
000438 1 bcc gcs2
000438 1 inc ram_chksm+1 ;carry to high byte
000438 1 clc
000438 1 gcs2: inx
000438 1 bne gcs3
000438 1 ldx #hi(abs1) ;set high byte of indirect pointer
000438 1 stx zpt+1
000438 1 ldy #lo(abs1) ;data after write & execute test area
000438 1 gcs5: adc (zpt),y
000438 1 bcc gcs4
000438 1 inc ram_chksm+1 ;carry to high byte
000438 1 clc
000438 1 gcs4: iny
000438 1 bne gcs5
000438 1 inx ;advance RAM high address
000438 1 stx zpt+1
000438 1 cpx #ram_top
000438 1 bne gcs5
000438 1 sta ram_chksm ;checksum complete
000438 1 .endif
000438 1 AD 00 02 C9 next_test
00043C 1 00 D0 FE A9
000440 1 01 8D 00 02
000444 1
000444 1 .if disable_selfmod = 0
000444 1 ;testing relative addressing with BEQ
000444 1 A0 FE ldy #$fe ;testing maximum range, not -1/-2 (invalid/self adr)
000446 1 range_loop:
000446 1 88 dey ;next relative address
000447 1 98 tya
000448 1 AA tax ;precharge count to end of loop
000449 1 10 08 bpl range_fw ;calculate relative address
00044B 1 18 clc ;avoid branch self or to relative address of branch
00044C 1 69 02 adc #2
00044E 1 EA nop ;offset landing zone - tolerate +/-5 offset to branch
00044F 1 EA nop
000450 1 EA nop
000451 1 EA nop
000452 1 EA nop
000453 1 range_fw:
000453 1 EA nop
000454 1 EA nop
000455 1 EA nop
000456 1 EA nop
000457 1 EA nop
000458 1 49 7F eor #$7f ;complement except sign
00045A 1 8D E6 04 sta range_adr ;load into test target
00045D 1 A9 00 lda #0 ;should set zero flag in status register
00045F 1 4C E5 04 jmp range_op
000462 1
000462 1 CA dex ; offset landing zone - backward branch too far
000463 1 CA dex
000464 1 CA dex
000465 1 CA dex
000466 1 CA dex
000467 1 ;relative address target field with branch under test in the middle
000467 1 CA dex ;-128 - max backward
000468 1 CA dex
000469 1 CA dex
00046A 1 CA dex
00046B 1 CA dex
00046C 1 CA dex
00046D 1 CA dex
00046E 1 CA dex
00046F 1 CA dex ;-120
000470 1 CA dex
000471 1 CA dex
000472 1 CA dex
000473 1 CA dex
000474 1 CA dex
000475 1 CA dex
000476 1 CA dex
000477 1 CA dex
000478 1 CA dex
000479 1 CA dex ;-110
00047A 1 CA dex
00047B 1 CA dex
00047C 1 CA dex
00047D 1 CA dex
00047E 1 CA dex
00047F 1 CA dex
000480 1 CA dex
000481 1 CA dex
000482 1 CA dex
000483 1 CA dex ;-100
000484 1 CA dex
000485 1 CA dex
000486 1 CA dex
000487 1 CA dex
000488 1 CA dex
000489 1 CA dex
00048A 1 CA dex
00048B 1 CA dex
00048C 1 CA dex
00048D 1 CA dex ;-90
00048E 1 CA dex
00048F 1 CA dex
000490 1 CA dex
000491 1 CA dex
000492 1 CA dex
000493 1 CA dex
000494 1 CA dex
000495 1 CA dex
000496 1 CA dex
000497 1 CA dex ;-80
000498 1 CA dex
000499 1 CA dex
00049A 1 CA dex
00049B 1 CA dex
00049C 1 CA dex
00049D 1 CA dex
00049E 1 CA dex
00049F 1 CA dex
0004A0 1 CA dex
0004A1 1 CA dex ;-70
0004A2 1 CA dex
0004A3 1 CA dex
0004A4 1 CA dex
0004A5 1 CA dex
0004A6 1 CA dex
0004A7 1 CA dex
0004A8 1 CA dex
0004A9 1 CA dex
0004AA 1 CA dex
0004AB 1 CA dex ;-60
0004AC 1 CA dex
0004AD 1 CA dex
0004AE 1 CA dex
0004AF 1 CA dex
0004B0 1 CA dex
0004B1 1 CA dex
0004B2 1 CA dex
0004B3 1 CA dex
0004B4 1 CA dex
0004B5 1 CA dex ;-50
0004B6 1 CA dex
0004B7 1 CA dex
0004B8 1 CA dex
0004B9 1 CA dex
0004BA 1 CA dex
0004BB 1 CA dex
0004BC 1 CA dex
0004BD 1 CA dex
0004BE 1 CA dex
0004BF 1 CA dex ;-40
0004C0 1 CA dex
0004C1 1 CA dex
0004C2 1 CA dex
0004C3 1 CA dex
0004C4 1 CA dex
0004C5 1 CA dex
0004C6 1 CA dex
0004C7 1 CA dex
0004C8 1 CA dex
0004C9 1 CA dex ;-30
0004CA 1 CA dex
0004CB 1 CA dex
0004CC 1 CA dex
0004CD 1 CA dex
0004CE 1 CA dex
0004CF 1 CA dex
0004D0 1 CA dex
0004D1 1 CA dex
0004D2 1 CA dex
0004D3 1 CA dex ;-20
0004D4 1 CA dex
0004D5 1 CA dex
0004D6 1 CA dex
0004D7 1 CA dex
0004D8 1 CA dex
0004D9 1 CA dex
0004DA 1 CA dex
0004DB 1 CA dex
0004DC 1 CA dex
0004DD 1 CA dex ;-10
0004DE 1 CA dex
0004DF 1 CA dex
0004E0 1 CA dex
0004E1 1 CA dex
0004E2 1 CA dex
0004E3 1 CA dex
0004E4 1 CA dex ;-3
0004E5 1 range_op: ;test target with zero flag=0, z=1 if previous dex
0004E5 1 range_adr = *+1 ;modifiable relative address
0004E5 1 F0 3E beq *+64 ;+64 if called without modification
0004E7 1 CA dex ;+0
0004E8 1 CA dex
0004E9 1 CA dex
0004EA 1 CA dex
0004EB 1 CA dex
0004EC 1 CA dex
0004ED 1 CA dex
0004EE 1 CA dex
0004EF 1 CA dex
0004F0 1 CA dex
0004F1 1 CA dex ;+10
0004F2 1 CA dex
0004F3 1 CA dex
0004F4 1 CA dex
0004F5 1 CA dex
0004F6 1 CA dex
0004F7 1 CA dex
0004F8 1 CA dex
0004F9 1 CA dex
0004FA 1 CA dex
0004FB 1 CA dex ;+20
0004FC 1 CA dex
0004FD 1 CA dex
0004FE 1 CA dex
0004FF 1 CA dex
000500 1 CA dex
000501 1 CA dex
000502 1 CA dex
000503 1 CA dex
000504 1 CA dex
000505 1 CA dex ;+30
000506 1 CA dex
000507 1 CA dex
000508 1 CA dex
000509 1 CA dex
00050A 1 CA dex
00050B 1 CA dex
00050C 1 CA dex
00050D 1 CA dex
00050E 1 CA dex
00050F 1 CA dex ;+40
000510 1 CA dex
000511 1 CA dex
000512 1 CA dex
000513 1 CA dex
000514 1 CA dex
000515 1 CA dex
000516 1 CA dex
000517 1 CA dex
000518 1 CA dex
000519 1 CA dex ;+50
00051A 1 CA dex
00051B 1 CA dex
00051C 1 CA dex
00051D 1 CA dex
00051E 1 CA dex
00051F 1 CA dex
000520 1 CA dex
000521 1 CA dex
000522 1 CA dex
000523 1 CA dex ;+60
000524 1 CA dex
000525 1 CA dex
000526 1 CA dex
000527 1 CA dex
000528 1 CA dex
000529 1 CA dex
00052A 1 CA dex
00052B 1 CA dex
00052C 1 CA dex
00052D 1 CA dex ;+70
00052E 1 CA dex
00052F 1 CA dex
000530 1 CA dex
000531 1 CA dex
000532 1 CA dex
000533 1 CA dex
000534 1 CA dex
000535 1 CA dex
000536 1 CA dex
000537 1 CA dex ;+80
000538 1 CA dex
000539 1 CA dex
00053A 1 CA dex
00053B 1 CA dex
00053C 1 CA dex
00053D 1 CA dex
00053E 1 CA dex
00053F 1 CA dex
000540 1 CA dex
000541 1 CA dex ;+90
000542 1 CA dex
000543 1 CA dex
000544 1 CA dex
000545 1 CA dex
000546 1 CA dex
000547 1 CA dex
000548 1 CA dex
000549 1 CA dex
00054A 1 CA dex
00054B 1 CA dex ;+100
00054C 1 CA dex
00054D 1 CA dex
00054E 1 CA dex
00054F 1 CA dex
000550 1 CA dex
000551 1 CA dex
000552 1 CA dex
000553 1 CA dex
000554 1 CA dex
000555 1 CA dex ;+110
000556 1 CA dex
000557 1 CA dex
000558 1 CA dex
000559 1 CA dex
00055A 1 CA dex
00055B 1 CA dex
00055C 1 CA dex
00055D 1 CA dex
00055E 1 CA dex
00055F 1 CA dex ;+120
000560 1 CA dex
000561 1 CA dex
000562 1 CA dex
000563 1 CA dex
000564 1 CA dex
000565 1 CA dex
000566 1 EA nop ;offset landing zone - forward branch too far
000567 1 EA nop
000568 1 EA nop
000569 1 EA nop
00056A 1 EA nop
00056B 1 F0 08 beq range_ok ;+127 - max forward
00056D 1 4C 6D 05 trap ; bad range
000570 1 EA nop ;offset landing zone - tolerate +/-5 offset to branch
000571 1 EA nop
000572 1 EA nop
000573 1 EA nop
000574 1 EA nop
000575 1 range_ok:
000575 1 EA nop
000576 1 EA nop
000577 1 EA nop
000578 1 EA nop
000579 1 EA nop
00057A 1 C0 00 cpy #0
00057C 1 F0 03 beq range_end
00057E 1 4C 46 04 jmp range_loop
000581 1 range_end: ;range test successful
000581 1 .endif
000581 1 AD 00 02 C9 next_test
000585 1 01 D0 FE A9
000589 1 02 8D 00 02
00058D 1
00058D 1 ;partial test BNE & CMP, CPX, CPY immediate
00058D 1 C0 01 cpy #1 ;testing BNE true
00058F 1 D0 03 bne test_bne
000591 1 4C 91 05 trap
000594 1 test_bne:
000594 1 A9 00 lda #0
000596 1 C9 00 cmp #0 ;test compare immediate
000598 1 D0 FE trap_ne
00059A 1 90 FE trap_cc
00059C 1 30 FE trap_mi
00059E 1 C9 01 cmp #1
0005A0 1 F0 FE trap_eq
0005A2 1 B0 FE trap_cs
0005A4 1 10 FE trap_pl
0005A6 1 AA tax
0005A7 1 E0 00 cpx #0 ;test compare x immediate
0005A9 1 D0 FE trap_ne
0005AB 1 90 FE trap_cc
0005AD 1 30 FE trap_mi
0005AF 1 E0 01 cpx #1
0005B1 1 F0 FE trap_eq
0005B3 1 B0 FE trap_cs
0005B5 1 10 FE trap_pl
0005B7 1 A8 tay
0005B8 1 C0 00 cpy #0 ;test compare y immediate
0005BA 1 D0 FE trap_ne
0005BC 1 90 FE trap_cc
0005BE 1 30 FE trap_mi
0005C0 1 C0 01 cpy #1
0005C2 1 F0 FE trap_eq
0005C4 1 B0 FE trap_cs
0005C6 1 10 FE trap_pl
0005C8 1 AD 00 02 C9 next_test
0005CC 1 02 D0 FE A9
0005D0 1 03 8D 00 02
0005D4 1 ;testing stack operations PHA PHP PLA PLP
0005D4 1
0005D4 1 A2 FF ldx #$ff ;initialize stack
0005D6 1 9A txs
0005D7 1 A9 55 lda #$55
0005D9 1 48 pha
0005DA 1 A9 AA lda #$aa
0005DC 1 48 pha
0005DD 1 CD FE 01 cmp $1fe ;on stack ?
0005E0 1 D0 FE trap_ne
0005E2 1 BA tsx
0005E3 1 8A txa ;overwrite accu
0005E4 1 C9 FD cmp #$fd ;sp decremented?
0005E6 1 D0 FE trap_ne
0005E8 1 68 pla
0005E9 1 C9 AA cmp #$aa ;successful retreived from stack?
0005EB 1 D0 FE trap_ne
0005ED 1 68 pla
0005EE 1 C9 55 cmp #$55
0005F0 1 D0 FE trap_ne
0005F2 1 CD FF 01 cmp $1ff ;remains on stack?
0005F5 1 D0 FE trap_ne
0005F7 1 BA tsx
0005F8 1 E0 FF cpx #$ff ;sp incremented?
0005FA 1 D0 FE trap_ne
0005FC 1 AD 00 02 C9 next_test
000600 1 03 D0 FE A9
000604 1 04 8D 00 02
000608 1
000608 1 ;testing branch decisions BPL BMI BVC BVS BCC BCS BNE BEQ
000608 1 A9 FF 48 28 set_stat $ff ;all on
00060C 1 10 1A bpl nbr1 ;branches should not be taken
00060E 1 50 1B bvc nbr2
000610 1 90 1C bcc nbr3
000612 1 D0 1D bne nbr4
000614 1 30 03 bmi br1 ;branches should be taken
000616 1 4C 16 06 trap
000619 1 70 03 br1: bvs br2
00061B 1 4C 1B 06 trap
00061E 1 B0 03 br2: bcs br3
000620 1 4C 20 06 trap
000623 1 F0 0F br3: beq br4
000625 1 4C 25 06 trap
000628 1 nbr1:
000628 1 4C 28 06 trap ;previous bpl taken
00062B 1 nbr2:
00062B 1 4C 2B 06 trap ;previous bvc taken
00062E 1 nbr3:
00062E 1 4C 2E 06 trap ;previous bcc taken
000631 1 nbr4:
000631 1 4C 31 06 trap ;previous bne taken
000634 1 08 br4: php
000635 1 BA tsx
000636 1 E0 FE cpx #$fe ;sp after php?
000638 1 D0 FE trap_ne
00063A 1 68 pla
00063B 1 C9 FF cmp_flag $ff ;returned all flags on?
00063D 1 D0 FE trap_ne
00063F 1 BA tsx
000640 1 E0 FF cpx #$ff ;sp after php?
000642 1 D0 FE trap_ne
000644 1 A9 00 48 28 set_stat 0 ;all off
000648 1 30 1A bmi nbr11 ;branches should not be taken
00064A 1 70 1B bvs nbr12
00064C 1 B0 1C bcs nbr13
00064E 1 F0 1D beq nbr14
000650 1 10 03 bpl br11 ;branches should be taken
000652 1 4C 52 06 trap
000655 1 50 03 br11: bvc br12
000657 1 4C 57 06 trap
00065A 1 90 03 br12: bcc br13
00065C 1 4C 5C 06 trap
00065F 1 D0 0F br13: bne br14
000661 1 4C 61 06 trap
000664 1 nbr11:
000664 1 4C 64 06 trap ;previous bmi taken
000667 1 nbr12:
000667 1 4C 67 06 trap ;previous bvs taken
00066A 1 nbr13:
00066A 1 4C 6A 06 trap ;previous bcs taken
00066D 1 nbr14:
00066D 1 4C 6D 06 trap ;previous beq taken
000670 1 08 br14: php
000671 1 68 pla
000672 1 C9 30 cmp_flag 0 ;flags off except break (pushed by sw) + reserved?
000674 1 D0 FE trap_ne
000676 1 ;crosscheck flags
000676 1 A9 02 48 28 set_stat zero
00067A 1 D0 02 bne brzs1
00067C 1 F0 03 beq brzs2
00067E 1 brzs1:
00067E 1 4C 7E 06 trap ;branch zero/non zero
000681 1 B0 02 brzs2: bcs brzs3
000683 1 90 03 bcc brzs4
000685 1 brzs3:
000685 1 4C 85 06 trap ;branch carry/no carry
000688 1 30 02 brzs4: bmi brzs5
00068A 1 10 03 bpl brzs6
00068C 1 brzs5:
00068C 1 4C 8C 06 trap ;branch minus/plus
00068F 1 70 02 brzs6: bvs brzs7
000691 1 50 03 bvc brzs8
000693 1 brzs7:
000693 1 4C 93 06 trap ;branch overflow/no overflow
000696 1 brzs8:
000696 1 A9 01 48 28 set_stat carry
00069A 1 F0 02 beq brcs1
00069C 1 D0 03 bne brcs2
00069E 1 brcs1:
00069E 1 4C 9E 06 trap ;branch zero/non zero
0006A1 1 90 02 brcs2: bcc brcs3
0006A3 1 B0 03 bcs brcs4
0006A5 1 brcs3:
0006A5 1 4C A5 06 trap ;branch carry/no carry
0006A8 1 30 02 brcs4: bmi brcs5
0006AA 1 10 03 bpl brcs6
0006AC 1 brcs5:
0006AC 1 4C AC 06 trap ;branch minus/plus
0006AF 1 70 02 brcs6: bvs brcs7
0006B1 1 50 03 bvc brcs8
0006B3 1 brcs7:
0006B3 1 4C B3 06 trap ;branch overflow/no overflow
0006B6 1
0006B6 1 brcs8:
0006B6 1 A9 80 48 28 set_stat minus
0006BA 1 F0 02 beq brmi1
0006BC 1 D0 03 bne brmi2
0006BE 1 brmi1:
0006BE 1 4C BE 06 trap ;branch zero/non zero
0006C1 1 B0 02 brmi2: bcs brmi3
0006C3 1 90 03 bcc brmi4
0006C5 1 brmi3:
0006C5 1 4C C5 06 trap ;branch carry/no carry
0006C8 1 10 02 brmi4: bpl brmi5
0006CA 1 30 03 bmi brmi6
0006CC 1 brmi5:
0006CC 1 4C CC 06 trap ;branch minus/plus
0006CF 1 70 02 brmi6: bvs brmi7
0006D1 1 50 03 bvc brmi8
0006D3 1 brmi7:
0006D3 1 4C D3 06 trap ;branch overflow/no overflow
0006D6 1 brmi8:
0006D6 1 A9 40 48 28 set_stat overfl
0006DA 1 F0 02 beq brvs1
0006DC 1 D0 03 bne brvs2
0006DE 1 brvs1:
0006DE 1 4C DE 06 trap ;branch zero/non zero
0006E1 1 B0 02 brvs2: bcs brvs3
0006E3 1 90 03 bcc brvs4
0006E5 1 brvs3:
0006E5 1 4C E5 06 trap ;branch carry/no carry
0006E8 1 30 02 brvs4: bmi brvs5
0006EA 1 10 03 bpl brvs6
0006EC 1 brvs5:
0006EC 1 4C EC 06 trap ;branch minus/plus
0006EF 1 50 02 brvs6: bvc brvs7
0006F1 1 70 03 bvs brvs8
0006F3 1 brvs7:
0006F3 1 4C F3 06 trap ;branch overflow/no overflow
0006F6 1 brvs8:
0006F6 1 A9 FD 48 28 set_stat $ff-zero
0006FA 1 F0 02 beq brzc1
0006FC 1 D0 03 bne brzc2
0006FE 1 brzc1:
0006FE 1 4C FE 06 trap ;branch zero/non zero
000701 1 90 02 brzc2: bcc brzc3
000703 1 B0 03 bcs brzc4
000705 1 brzc3:
000705 1 4C 05 07 trap ;branch carry/no carry
000708 1 10 02 brzc4: bpl brzc5
00070A 1 30 03 bmi brzc6
00070C 1 brzc5:
00070C 1 4C 0C 07 trap ;branch minus/plus
00070F 1 50 02 brzc6: bvc brzc7
000711 1 70 03 bvs brzc8
000713 1 brzc7:
000713 1 4C 13 07 trap ;branch overflow/no overflow
000716 1 brzc8:
000716 1 A9 FE 48 28 set_stat $ff-carry
00071A 1 D0 02 bne brcc1
00071C 1 F0 03 beq brcc2
00071E 1 brcc1:
00071E 1 4C 1E 07 trap ;branch zero/non zero
000721 1 B0 02 brcc2: bcs brcc3
000723 1 90 03 bcc brcc4
000725 1 brcc3:
000725 1 4C 25 07 trap ;branch carry/no carry
000728 1 10 02 brcc4: bpl brcc5
00072A 1 30 03 bmi brcc6
00072C 1 brcc5:
00072C 1 4C 2C 07 trap ;branch minus/plus
00072F 1 50 02 brcc6: bvc brcc7
000731 1 70 03 bvs brcc8
000733 1 brcc7:
000733 1 4C 33 07 trap ;branch overflow/no overflow
000736 1 brcc8:
000736 1 A9 7F 48 28 set_stat $ff-minus
00073A 1 D0 02 bne brpl1
00073C 1 F0 03 beq brpl2
00073E 1 brpl1:
00073E 1 4C 3E 07 trap ;branch zero/non zero
000741 1 90 02 brpl2: bcc brpl3
000743 1 B0 03 bcs brpl4
000745 1 brpl3:
000745 1 4C 45 07 trap ;branch carry/no carry
000748 1 30 02 brpl4: bmi brpl5
00074A 1 10 03 bpl brpl6
00074C 1 brpl5:
00074C 1 4C 4C 07 trap ;branch minus/plus
00074F 1 50 02 brpl6: bvc brpl7
000751 1 70 03 bvs brpl8
000753 1 brpl7:
000753 1 4C 53 07 trap ;branch overflow/no overflow
000756 1 brpl8:
000756 1 A9 BF 48 28 set_stat $ff-overfl
00075A 1 D0 02 bne brvc1
00075C 1 F0 03 beq brvc2
00075E 1 brvc1:
00075E 1 4C 5E 07 trap ;branch zero/non zero
000761 1 90 02 brvc2: bcc brvc3
000763 1 B0 03 bcs brvc4
000765 1 brvc3:
000765 1 4C 65 07 trap ;branch carry/no carry
000768 1 10 02 brvc4: bpl brvc5
00076A 1 30 03 bmi brvc6
00076C 1 brvc5:
00076C 1 4C 6C 07 trap ;branch minus/plus
00076F 1 70 02 brvc6: bvs brvc7
000771 1 50 03 bvc brvc8
000773 1 brvc7:
000773 1 4C 73 07 trap ;branch overflow/no overflow
000776 1 brvc8:
000776 1 AD 00 02 C9 next_test
00077A 1 04 D0 FE A9
00077E 1 05 8D 00 02
000782 1
000782 1 ; test PHA does not alter flags or accumulator but PLA does
000782 1 A2 55 ldx #$55 ;x & y protected
000784 1 A0 AA ldy #$aa
000786 1 A9 FF 48 A9 set_a 1,$ff ;push
00078A 1 01 28
00078C 1 48 pha
00078D 1 08 C9 01 D0 tst_a 1,$ff
000791 1 FE 68 48 C9
000795 1 FF D0 FE 28
000799 1 A9 00 48 A9 set_a 0,0
00079D 1 00 28
00079F 1 48 pha
0007A0 1 08 C9 00 D0 tst_a 0,0
0007A4 1 FE 68 48 C9
0007A8 1 30 D0 FE 28
0007AC 1 A9 FF 48 A9 set_a $ff,$ff
0007B0 1 FF 28
0007B2 1 48 pha
0007B3 1 08 C9 FF D0 tst_a $ff,$ff
0007B7 1 FE 68 48 C9
0007BB 1 FF D0 FE 28
0007BF 1 A9 00 48 A9 set_a 1,0
0007C3 1 01 28
0007C5 1 48 pha
0007C6 1 08 C9 01 D0 tst_a 1,0
0007CA 1 FE 68 48 C9
0007CE 1 30 D0 FE 28
0007D2 1 A9 FF 48 A9 set_a 0,$ff
0007D6 1 00 28
0007D8 1 48 pha
0007D9 1 08 C9 00 D0 tst_a 0,$ff
0007DD 1 FE 68 48 C9
0007E1 1 FF D0 FE 28
0007E5 1 A9 00 48 A9 set_a $ff,0
0007E9 1 FF 28
0007EB 1 48 pha
0007EC 1 08 C9 FF D0 tst_a $ff,0
0007F0 1 FE 68 48 C9
0007F4 1 30 D0 FE 28
0007F8 1 A9 FF 48 A9 set_a 0,$ff ;pull
0007FC 1 00 28
0007FE 1 68 pla
0007FF 1 08 C9 FF D0 tst_a $ff,$ff-zero
000803 1 FE 68 48 C9
000807 1 FD D0 FE 28
00080B 1 A9 00 48 A9 set_a $ff,0
00080F 1 FF 28
000811 1 68 pla
000812 1 08 C9 00 D0 tst_a 0,zero
000816 1 FE 68 48 C9
00081A 1 32 D0 FE 28
00081E 1 A9 FF 48 A9 set_a $fe,$ff
000822 1 FE 28
000824 1 68 pla
000825 1 08 C9 01 D0 tst_a 1,$ff-zero-minus
000829 1 FE 68 48 C9
00082D 1 7D D0 FE 28
000831 1 A9 00 48 A9 set_a 0,0
000835 1 00 28
000837 1 68 pla
000838 1 08 C9 FF D0 tst_a $ff,minus
00083C 1 FE 68 48 C9
000840 1 B0 D0 FE 28
000844 1 A9 FF 48 A9 set_a $ff,$ff
000848 1 FF 28
00084A 1 68 pla
00084B 1 08 C9 00 D0 tst_a 0,$ff-minus
00084F 1 FE 68 48 C9
000853 1 7F D0 FE 28
000857 1 A9 00 48 A9 set_a $fe,0
00085B 1 FE 28
00085D 1 68 pla
00085E 1 08 C9 01 D0 tst_a 1,0
000862 1 FE 68 48 C9
000866 1 30 D0 FE 28
00086A 1 E0 55 cpx #$55 ;x & y unchanged?
00086C 1 D0 FE trap_ne
00086E 1 C0 AA cpy #$aa
000870 1 D0 FE trap_ne
000872 1 AD 00 02 C9 next_test
000876 1 05 D0 FE A9
00087A 1 06 8D 00 02
00087E 1
00087E 1 ; partial pretest EOR #
00087E 1 A9 00 48 A9 set_a $3c,0
000882 1 3C 28
000884 1 49 C3 eor #$c3
000886 1 08 C9 FF D0 tst_a $ff,fn
00088A 1 FE 68 48 C9
00088E 1 B0 D0 FE 28
000892 1 A9 00 48 A9 set_a $c3,0
000896 1 C3 28
000898 1 49 C3 eor #$c3
00089A 1 08 C9 00 D0 tst_a 0,fz
00089E 1 FE 68 48 C9
0008A2 1 32 D0 FE 28
0008A6 1 AD 00 02 C9 next_test
0008AA 1 06 D0 FE A9
0008AE 1 07 8D 00 02
0008B2 1
0008B2 1 ; PC modifying instructions except branches (NOP, JMP, JSR, RTS, BRK, RTI)
0008B2 1 ; testing NOP
0008B2 1 A2 24 ldx #$24
0008B4 1 A0 42 ldy #$42
0008B6 1 A9 00 48 A9 set_a $18,0
0008BA 1 18 28
0008BC 1 EA nop
0008BD 1 08 C9 18 D0 tst_a $18,0
0008C1 1 FE 68 48 C9
0008C5 1 30 D0 FE 28
0008C9 1 E0 24 cpx #$24
0008CB 1 D0 FE trap_ne
0008CD 1 C0 42 cpy #$42
0008CF 1 D0 FE trap_ne
0008D1 1 A2 DB ldx #$db
0008D3 1 A0 BD ldy #$bd
0008D5 1 A9 FF 48 A9 set_a $e7,$ff
0008D9 1 E7 28
0008DB 1 EA nop
0008DC 1 08 C9 E7 D0 tst_a $e7,$ff
0008E0 1 FE 68 48 C9
0008E4 1 FF D0 FE 28
0008E8 1 E0 DB cpx #$db
0008EA 1 D0 FE trap_ne
0008EC 1 C0 BD cpy #$bd
0008EE 1 D0 FE trap_ne
0008F0 1 AD 00 02 C9 next_test
0008F4 1 07 D0 FE A9
0008F8 1 08 8D 00 02
0008FC 1
0008FC 1 ; jump absolute
0008FC 1 A9 00 48 28 set_stat $0
000900 1 A9 46 lda #'F'
000902 1 A2 41 ldx #'A'
000904 1 A0 52 ldy #'R' ;N=0, V=0, Z=0, C=0
000906 1 4C EF 36 jmp test_far
000909 1 EA nop
00090A 1 EA nop
00090B 1 D0 FE trap_ne ;runover protection
00090D 1 E8 inx
00090E 1 E8 inx
00090F 1 far_ret:
00090F 1 F0 FE trap_eq ;returned flags OK?
000911 1 10 FE trap_pl
000913 1 90 FE trap_cc
000915 1 50 FE trap_vc
000917 1 C9 EC cmp #('F'^$aa) ;returned registers OK?
000919 1 D0 FE trap_ne
00091B 1 E0 42 cpx #('A'+1)
00091D 1 D0 FE trap_ne
00091F 1 C0 4F cpy #('R'-3)
000921 1 D0 FE trap_ne
000923 1 CA dex
000924 1 C8 iny
000925 1 C8 iny
000926 1 C8 iny
000927 1 49 AA eor #$aa ;N=0, V=1, Z=0, C=1
000929 1 4C 32 09 jmp test_near
00092C 1 EA nop
00092D 1 EA nop
00092E 1 D0 FE trap_ne ;runover protection
000930 1 E8 inx
000931 1 E8 inx
000932 1 test_near:
000932 1 F0 FE trap_eq ;passed flags OK?
000934 1 30 FE trap_mi
000936 1 90 FE trap_cc
000938 1 50 FE trap_vc
00093A 1 C9 46 cmp #'F' ;passed registers OK?
00093C 1 D0 FE trap_ne
00093E 1 E0 41 cpx #'A'
000940 1 D0 FE trap_ne
000942 1 C0 52 cpy #'R'
000944 1 D0 FE trap_ne
000946 1 AD 00 02 C9 next_test
00094A 1 08 D0 FE A9
00094E 1 09 8D 00 02
000952 1
000952 1 ; jump indirect
000952 1 A9 00 48 28 set_stat 0
000956 1 A9 49 lda #'I'
000958 1 A2 4E ldx #'N'
00095A 1 A0 44 ldy #'D' ;N=0, V=0, Z=0, C=0
00095C 1 6C 1E 37 jmp (ptr_tst_ind)
00095F 1 EA nop
000960 1 D0 FE trap_ne ;runover protection
000962 1 88 dey
000963 1 88 dey
000964 1 ind_ret:
000964 1 08 php ;either SP or Y count will fail, if we do not hit
000965 1 88 dey
000966 1 88 dey
000967 1 88 dey
000968 1 28 plp
000969 1 F0 FE trap_eq ;returned flags OK?
00096B 1 10 FE trap_pl
00096D 1 90 FE trap_cc
00096F 1 50 FE trap_vc
000971 1 C9 E3 cmp #('I'^$aa) ;returned registers OK?
000973 1 D0 FE trap_ne
000975 1 E0 4F cpx #('N'+1)
000977 1 D0 FE trap_ne
000979 1 C0 3E cpy #('D'-6)
00097B 1 D0 FE trap_ne
00097D 1 BA tsx ;SP check
00097E 1 E0 FF cpx #$ff
000980 1 D0 FE trap_ne
000982 1 AD 00 02 C9 next_test
000986 1 09 D0 FE A9
00098A 1 0A 8D 00 02
00098E 1
00098E 1 ; jump subroutine & return from subroutine
00098E 1 A9 00 48 28 set_stat 0
000992 1 A9 4A lda #'J'
000994 1 A2 53 ldx #'S'
000996 1 A0 52 ldy #'R' ;N=0, V=0, Z=0, C=0
000998 1 20 5D 37 jsr test_jsr
00099B 1 jsr_ret = *-1 ;last address of jsr = return address
00099B 1 08 php ;either SP or Y count will fail, if we do not hit
00099C 1 88 dey
00099D 1 88 dey
00099E 1 88 dey
00099F 1 28 plp
0009A0 1 F0 FE trap_eq ;returned flags OK?
0009A2 1 10 FE trap_pl
0009A4 1 90 FE trap_cc
0009A6 1 50 FE trap_vc
0009A8 1 C9 E0 cmp #('J'^$aa) ;returned registers OK?
0009AA 1 D0 FE trap_ne
0009AC 1 E0 54 cpx #('S'+1)
0009AE 1 D0 FE trap_ne
0009B0 1 C0 4C cpy #('R'-6)
0009B2 1 D0 FE trap_ne
0009B4 1 BA tsx ;sp?
0009B5 1 E0 FF cpx #$ff
0009B7 1 D0 FE trap_ne
0009B9 1 AD 00 02 C9 next_test
0009BD 1 0A D0 FE A9
0009C1 1 0B 8D 00 02
0009C5 1
0009C5 1 ; break & return from interrupt
0009C5 1 .if ROM_vectors = 1
0009C5 1 A9 00 load_flag 0 ;with interrupts enabled if allowed!
0009C7 1 48 pha
0009C8 1 A9 42 lda #'B'
0009CA 1 A2 52 ldx #'R'
0009CC 1 A0 4B ldy #'K'
0009CE 1 28 plp ;N=0, V=0, Z=0, C=0
0009CF 1 00 brk
0009D0 1 .else
0009D0 1 lda #>brk_ret0 ;emulated break
0009D0 1 pha
0009D0 1 lda #<brk_ret0
0009D0 1 pha
0009D0 1 load_flag fao ;set break & unused on stack
0009D0 1 pha
0009D0 1 load_flag intdis ;during interrupt
0009D0 1 pha
0009D0 1 lda #'B'
0009D0 1 ldx #'R'
0009D0 1 ldy #'K'
0009D0 1 plp ;N=0, V=0, Z=0, C=0
0009D0 1 jmp irq_trap
0009D0 1 .endif
0009D0 1 88 dey ;should not be executed
0009D1 1 brk_ret0: ;address of break return
0009D1 1 08 php ;either SP or Y count will fail, if we do not hit
0009D2 1 88 dey
0009D3 1 88 dey
0009D4 1 88 dey
0009D5 1 C9 E8 cmp #'B'^$aa ;returned registers OK?
0009D7 1 ;the IRQ vector was never executed if A & X stay unmodified
0009D7 1 D0 FE trap_ne
0009D9 1 E0 53 cpx #'R'+1
0009DB 1 D0 FE trap_ne
0009DD 1 C0 45 cpy #'K'-6
0009DF 1 D0 FE trap_ne
0009E1 1 68 pla ;returned flags OK (unchanged)?
0009E2 1 C9 30 cmp_flag 0
0009E4 1 D0 FE trap_ne
0009E6 1 BA tsx ;sp?
0009E7 1 E0 FF cpx #$ff
0009E9 1 D0 FE trap_ne
0009EB 1 .if ROM_vectors = 1
0009EB 1 A9 FF load_flag $ff ;with interrupts disabled if allowed!
0009ED 1 48 pha
0009EE 1 A9 BD lda #$ff-'B'
0009F0 1 A2 AD ldx #$ff-'R'
0009F2 1 A0 B4 ldy #$ff-'K'
0009F4 1 28 plp ;N=1, V=1, Z=1, C=1
0009F5 1 00 brk
0009F6 1 .else
0009F6 1 lda #>brk_ret1 ;emulated break
0009F6 1 pha
0009F6 1 lda #<brk_ret1
0009F6 1 pha
0009F6 1 load_flag $ff
0009F6 1 pha ;set break & unused on stack
0009F6 1 pha ;actual flags
0009F6 1 lda #$ff-'B'
0009F6 1 ldx #$ff-'R'
0009F6 1 ldy #$ff-'K'
0009F6 1 plp ;N=1, V=1, Z=1, C=1
0009F6 1 jmp irq_trap
0009F6 1 .endif
0009F6 1 88 dey ;should not be executed
0009F7 1 brk_ret1: ;address of break return
0009F7 1 08 php ;either SP or Y count will fail, if we do not hit
0009F8 1 88 dey
0009F9 1 88 dey
0009FA 1 88 dey
0009FB 1 C9 17 cmp #($ff-'B')^$aa ;returned registers OK?
0009FD 1 ;the IRQ vector was never executed if A & X stay unmodified
0009FD 1 D0 FE trap_ne
0009FF 1 E0 AE cpx #$ff-'R'+1
000A01 1 D0 FE trap_ne
000A03 1 C0 AE cpy #$ff-'K'-6
000A05 1 D0 FE trap_ne
000A07 1 68 pla ;returned flags OK (unchanged)?
000A08 1 C9 FF cmp_flag $ff
000A0A 1 D0 FE trap_ne
000A0C 1 BA tsx ;sp?
000A0D 1 E0 FF cpx #$ff
000A0F 1 D0 FE trap_ne
000A11 1 AD 00 02 C9 next_test
000A15 1 0B D0 FE A9
000A19 1 0C 8D 00 02
000A1D 1
000A1D 1 ; test set and clear flags CLC CLI CLD CLV SEC SEI SED
000A1D 1 A9 FF 48 28 set_stat $ff
000A21 1 18 clc
000A22 1 08 68 48 C9 tst_stat $ff-carry
000A26 1 FE D0 FE 28
000A2A 1 38 sec
000A2B 1 08 68 48 C9 tst_stat $ff
000A2F 1 FF D0 FE 28
000A33 1 .if I_flag = 3
000A33 1 58 cli
000A34 1 08 68 48 C9 tst_stat $ff-intdis
000A38 1 FB D0 FE 28
000A3C 1 78 sei
000A3D 1 08 68 48 C9 tst_stat $ff
000A41 1 FF D0 FE 28
000A45 1 .endif
000A45 1 D8 cld
000A46 1 08 68 48 C9 tst_stat $ff-decmode
000A4A 1 F7 D0 FE 28
000A4E 1 F8 sed
000A4F 1 08 68 48 C9 tst_stat $ff
000A53 1 FF D0 FE 28
000A57 1 B8 clv
000A58 1 08 68 48 C9 tst_stat $ff-overfl
000A5C 1 BF D0 FE 28
000A60 1 A9 00 48 28 set_stat 0
000A64 1 08 68 48 C9 tst_stat 0
000A68 1 30 D0 FE 28
000A6C 1 38 sec
000A6D 1 08 68 48 C9 tst_stat carry
000A71 1 31 D0 FE 28
000A75 1 18 clc
000A76 1 08 68 48 C9 tst_stat 0
000A7A 1 30 D0 FE 28
000A7E 1 .if I_flag = 3
000A7E 1 78 sei
000A7F 1 08 68 48 C9 tst_stat intdis
000A83 1 34 D0 FE 28
000A87 1 58 cli
000A88 1 08 68 48 C9 tst_stat 0
000A8C 1 30 D0 FE 28
000A90 1 .endif
000A90 1 F8 sed
000A91 1 08 68 48 C9 tst_stat decmode
000A95 1 38 D0 FE 28
000A99 1 D8 cld
000A9A 1 08 68 48 C9 tst_stat 0
000A9E 1 30 D0 FE 28
000AA2 1 A9 40 48 28 set_stat overfl
000AA6 1 08 68 48 C9 tst_stat overfl
000AAA 1 70 D0 FE 28
000AAE 1 B8 clv
000AAF 1 08 68 48 C9 tst_stat 0
000AB3 1 30 D0 FE 28
000AB7 1 AD 00 02 C9 next_test
000ABB 1 0C D0 FE A9
000ABF 1 0D 8D 00 02
000AC3 1 ; testing index register increment/decrement and transfer
000AC3 1 ; INX INY DEX DEY TAX TXA TAY TYA
000AC3 1 A2 FE ldx #$fe
000AC5 1 A9 FF 48 28 set_stat $ff
000AC9 1 E8 inx ;ff
000ACA 1 08 E0 FF D0 tst_x $ff,$ff-zero
000ACE 1 FE 68 48 C9
000AD2 1 FD D0 FE 28
000AD6 1 E8 inx ;00
000AD7 1 08 E0 00 D0 tst_x 0,$ff-minus
000ADB 1 FE 68 48 C9
000ADF 1 7F D0 FE 28
000AE3 1 E8 inx ;01
000AE4 1 08 E0 01 D0 tst_x 1,$ff-minus-zero
000AE8 1 FE 68 48 C9
000AEC 1 7D D0 FE 28
000AF0 1 CA dex ;00
000AF1 1 08 E0 00 D0 tst_x 0,$ff-minus
000AF5 1 FE 68 48 C9
000AF9 1 7F D0 FE 28
000AFD 1 CA dex ;ff
000AFE 1 08 E0 FF D0 tst_x $ff,$ff-zero
000B02 1 FE 68 48 C9
000B06 1 FD D0 FE 28
000B0A 1 CA dex ;fe
000B0B 1 A9 00 48 28 set_stat 0
000B0F 1 E8 inx ;ff
000B10 1 08 E0 FF D0 tst_x $ff,minus
000B14 1 FE 68 48 C9
000B18 1 B0 D0 FE 28
000B1C 1 E8 inx ;00
000B1D 1 08 E0 00 D0 tst_x 0,zero
000B21 1 FE 68 48 C9
000B25 1 32 D0 FE 28
000B29 1 E8 inx ;01
000B2A 1 08 E0 01 D0 tst_x 1,0
000B2E 1 FE 68 48 C9
000B32 1 30 D0 FE 28
000B36 1 CA dex ;00
000B37 1 08 E0 00 D0 tst_x 0,zero
000B3B 1 FE 68 48 C9
000B3F 1 32 D0 FE 28
000B43 1 CA dex ;ff
000B44 1 08 E0 FF D0 tst_x $ff,minus
000B48 1 FE 68 48 C9
000B4C 1 B0 D0 FE 28
000B50 1
000B50 1 A0 FE ldy #$fe
000B52 1 A9 FF 48 28 set_stat $ff
000B56 1 C8 iny ;ff
000B57 1 08 C0 FF D0 tst_y $ff,$ff-zero
000B5B 1 FE 68 48 C9
000B5F 1 FD D0 FE 28
000B63 1 C8 iny ;00
000B64 1 08 C0 00 D0 tst_y 0,$ff-minus
000B68 1 FE 68 48 C9
000B6C 1 7F D0 FE 28
000B70 1 C8 iny ;01
000B71 1 08 C0 01 D0 tst_y 1,$ff-minus-zero
000B75 1 FE 68 48 C9
000B79 1 7D D0 FE 28
000B7D 1 88 dey ;00
000B7E 1 08 C0 00 D0 tst_y 0,$ff-minus
000B82 1 FE 68 48 C9
000B86 1 7F D0 FE 28
000B8A 1 88 dey ;ff
000B8B 1 08 C0 FF D0 tst_y $ff,$ff-zero
000B8F 1 FE 68 48 C9
000B93 1 FD D0 FE 28
000B97 1 88 dey ;fe
000B98 1 A9 00 48 28 set_stat 0
000B9C 1 C8 iny ;ff
000B9D 1 08 C0 FF D0 tst_y $ff,0+minus
000BA1 1 FE 68 48 C9
000BA5 1 B0 D0 FE 28
000BA9 1 C8 iny ;00
000BAA 1 08 C0 00 D0 tst_y 0,zero
000BAE 1 FE 68 48 C9
000BB2 1 32 D0 FE 28
000BB6 1 C8 iny ;01
000BB7 1 08 C0 01 D0 tst_y 1,0
000BBB 1 FE 68 48 C9
000BBF 1 30 D0 FE 28
000BC3 1 88 dey ;00
000BC4 1 08 C0 00 D0 tst_y 0,zero
000BC8 1 FE 68 48 C9
000BCC 1 32 D0 FE 28
000BD0 1 88 dey ;ff
000BD1 1 08 C0 FF D0 tst_y $ff,minus
000BD5 1 FE 68 48 C9
000BD9 1 B0 D0 FE 28
000BDD 1
000BDD 1 A2 FF ldx #$ff
000BDF 1 A9 FF 48 28 set_stat $ff
000BE3 1 8A txa
000BE4 1 08 C9 FF D0 tst_a $ff,$ff-zero
000BE8 1 FE 68 48 C9
000BEC 1 FD D0 FE 28
000BF0 1 08 php
000BF1 1 E8 inx ;00
000BF2 1 28 plp
000BF3 1 8A txa
000BF4 1 08 C9 00 D0 tst_a 0,$ff-minus
000BF8 1 FE 68 48 C9
000BFC 1 7F D0 FE 28
000C00 1 08 php
000C01 1 E8 inx ;01
000C02 1 28 plp
000C03 1 8A txa
000C04 1 08 C9 01 D0 tst_a 1,$ff-minus-zero
000C08 1 FE 68 48 C9
000C0C 1 7D D0 FE 28
000C10 1 A9 00 48 28 set_stat 0
000C14 1 8A txa
000C15 1 08 C9 01 D0 tst_a 1,0
000C19 1 FE 68 48 C9
000C1D 1 30 D0 FE 28
000C21 1 08 php
000C22 1 CA dex ;00
000C23 1 28 plp
000C24 1 8A txa
000C25 1 08 C9 00 D0 tst_a 0,zero
000C29 1 FE 68 48 C9
000C2D 1 32 D0 FE 28
000C31 1 08 php
000C32 1 CA dex ;ff
000C33 1 28 plp
000C34 1 8A txa
000C35 1 08 C9 FF D0 tst_a $ff,minus
000C39 1 FE 68 48 C9
000C3D 1 B0 D0 FE 28
000C41 1
000C41 1 A0 FF ldy #$ff
000C43 1 A9 FF 48 28 set_stat $ff
000C47 1 98 tya
000C48 1 08 C9 FF D0 tst_a $ff,$ff-zero
000C4C 1 FE 68 48 C9
000C50 1 FD D0 FE 28
000C54 1 08 php
000C55 1 C8 iny ;00
000C56 1 28 plp
000C57 1 98 tya
000C58 1 08 C9 00 D0 tst_a 0,$ff-minus
000C5C 1 FE 68 48 C9
000C60 1 7F D0 FE 28
000C64 1 08 php
000C65 1 C8 iny ;01
000C66 1 28 plp
000C67 1 98 tya
000C68 1 08 C9 01 D0 tst_a 1,$ff-minus-zero
000C6C 1 FE 68 48 C9
000C70 1 7D D0 FE 28
000C74 1 A9 00 48 28 set_stat 0
000C78 1 98 tya
000C79 1 08 C9 01 D0 tst_a 1,0
000C7D 1 FE 68 48 C9
000C81 1 30 D0 FE 28
000C85 1 08 php
000C86 1 88 dey ;00
000C87 1 28 plp
000C88 1 98 tya
000C89 1 08 C9 00 D0 tst_a 0,zero
000C8D 1 FE 68 48 C9
000C91 1 32 D0 FE 28
000C95 1 08 php
000C96 1 88 dey ;ff
000C97 1 28 plp
000C98 1 98 tya
000C99 1 08 C9 FF D0 tst_a $ff,minus
000C9D 1 FE 68 48 C9
000CA1 1 B0 D0 FE 28
000CA5 1
000CA5 1 A9 FF load_flag $ff
000CA7 1 48 pha
000CA8 1 A2 FF ldx #$ff ;ff
000CAA 1 8A txa
000CAB 1 28 plp
000CAC 1 A8 tay
000CAD 1 08 C0 FF D0 tst_y $ff,$ff-zero
000CB1 1 FE 68 48 C9
000CB5 1 FD D0 FE 28
000CB9 1 08 php
000CBA 1 E8 inx ;00
000CBB 1 8A txa
000CBC 1 28 plp
000CBD 1 A8 tay
000CBE 1 08 C0 00 D0 tst_y 0,$ff-minus
000CC2 1 FE 68 48 C9
000CC6 1 7F D0 FE 28
000CCA 1 08 php
000CCB 1 E8 inx ;01
000CCC 1 8A txa
000CCD 1 28 plp
000CCE 1 A8 tay
000CCF 1 08 C0 01 D0 tst_y 1,$ff-minus-zero
000CD3 1 FE 68 48 C9
000CD7 1 7D D0 FE 28
000CDB 1 A9 00 load_flag 0
000CDD 1 48 pha
000CDE 1 A9 00 lda #0
000CE0 1 8A txa
000CE1 1 28 plp
000CE2 1 A8 tay
000CE3 1 08 C0 01 D0 tst_y 1,0
000CE7 1 FE 68 48 C9
000CEB 1 30 D0 FE 28
000CEF 1 08 php
000CF0 1 CA dex ;00
000CF1 1 8A txa
000CF2 1 28 plp
000CF3 1 A8 tay
000CF4 1 08 C0 00 D0 tst_y 0,zero
000CF8 1 FE 68 48 C9
000CFC 1 32 D0 FE 28
000D00 1 08 php
000D01 1 CA dex ;ff
000D02 1 8A txa
000D03 1 28 plp
000D04 1 A8 tay
000D05 1 08 C0 FF D0 tst_y $ff,minus
000D09 1 FE 68 48 C9
000D0D 1 B0 D0 FE 28
000D11 1
000D11 1
000D11 1 A9 FF load_flag $ff
000D13 1 48 pha
000D14 1 A0 FF ldy #$ff ;ff
000D16 1 98 tya
000D17 1 28 plp
000D18 1 AA tax
000D19 1 08 E0 FF D0 tst_x $ff,$ff-zero
000D1D 1 FE 68 48 C9
000D21 1 FD D0 FE 28
000D25 1 08 php
000D26 1 C8 iny ;00
000D27 1 98 tya
000D28 1 28 plp
000D29 1 AA tax
000D2A 1 08 E0 00 D0 tst_x 0,$ff-minus
000D2E 1 FE 68 48 C9
000D32 1 7F D0 FE 28
000D36 1 08 php
000D37 1 C8 iny ;01
000D38 1 98 tya
000D39 1 28 plp
000D3A 1 AA tax
000D3B 1 08 E0 01 D0 tst_x 1,$ff-minus-zero
000D3F 1 FE 68 48 C9
000D43 1 7D D0 FE 28
000D47 1 A9 00 load_flag 0
000D49 1 48 pha
000D4A 1 A9 00 lda #0 ;preset status
000D4C 1 98 tya
000D4D 1 28 plp
000D4E 1 AA tax
000D4F 1 08 E0 01 D0 tst_x 1,0
000D53 1 FE 68 48 C9
000D57 1 30 D0 FE 28
000D5B 1 08 php
000D5C 1 88 dey ;00
000D5D 1 98 tya
000D5E 1 28 plp
000D5F 1 AA tax
000D60 1 08 E0 00 D0 tst_x 0,zero
000D64 1 FE 68 48 C9
000D68 1 32 D0 FE 28
000D6C 1 08 php
000D6D 1 88 dey ;ff
000D6E 1 98 tya
000D6F 1 28 plp
000D70 1 AA tax
000D71 1 08 E0 FF D0 tst_x $ff,minus
000D75 1 FE 68 48 C9
000D79 1 B0 D0 FE 28
000D7D 1 AD 00 02 C9 next_test
000D81 1 0D D0 FE A9
000D85 1 0E 8D 00 02
000D89 1
000D89 1 ;TSX sets NZ - TXS does not
000D89 1 ; This section also tests for proper stack wrap around.
000D89 1 A2 01 ldx #1 ;01
000D8B 1 A9 FF 48 28 set_stat $ff
000D8F 1 9A txs
000D90 1 08 php
000D91 1 AD 01 01 lda $101
000D94 1 C9 FF cmp_flag $ff
000D96 1 D0 FE trap_ne
000D98 1 A9 00 48 28 set_stat 0
000D9C 1 9A txs
000D9D 1 08 php
000D9E 1 AD 01 01 lda $101
000DA1 1 C9 30 cmp_flag 0
000DA3 1 D0 FE trap_ne
000DA5 1 CA dex ;00
000DA6 1 A9 FF 48 28 set_stat $ff
000DAA 1 9A txs
000DAB 1 08 php
000DAC 1 AD 00 01 lda $100
000DAF 1 C9 FF cmp_flag $ff
000DB1 1 D0 FE trap_ne
000DB3 1 A9 00 48 28 set_stat 0
000DB7 1 9A txs
000DB8 1 08 php
000DB9 1 AD 00 01 lda $100
000DBC 1 C9 30 cmp_flag 0
000DBE 1 D0 FE trap_ne
000DC0 1 CA dex ;ff
000DC1 1 A9 FF 48 28 set_stat $ff
000DC5 1 9A txs
000DC6 1 08 php
000DC7 1 AD FF 01 lda $1ff
000DCA 1 C9 FF cmp_flag $ff
000DCC 1 D0 FE trap_ne
000DCE 1 A9 00 48 28 set_stat 0
000DD2 1 9A txs
000DD3 1 08 php
000DD4 1 AD FF 01 lda $1ff
000DD7 1 C9 30 cmp_flag 0
000DD9 1
000DD9 1 A2 01 ldx #1
000DDB 1 9A txs ;sp=01
000DDC 1 A9 FF 48 28 set_stat $ff
000DE0 1 BA tsx ;clears Z, N
000DE1 1 08 php ;sp=00
000DE2 1 E0 01 cpx #1
000DE4 1 D0 FE trap_ne
000DE6 1 AD 01 01 lda $101
000DE9 1 C9 7D cmp_flag $ff-minus-zero
000DEB 1 D0 FE trap_ne
000DED 1 A9 FF 48 28 set_stat $ff
000DF1 1 BA tsx ;clears N, sets Z
000DF2 1 08 php ;sp=ff
000DF3 1 E0 00 cpx #0
000DF5 1 D0 FE trap_ne
000DF7 1 AD 00 01 lda $100
000DFA 1 C9 7F cmp_flag $ff-minus
000DFC 1 D0 FE trap_ne
000DFE 1 A9 FF 48 28 set_stat $ff
000E02 1 BA tsx ;clears N, sets Z
000E03 1 08 php ;sp=fe
000E04 1 E0 FF cpx #$ff
000E06 1 D0 FE trap_ne
000E08 1 AD FF 01 lda $1ff
000E0B 1 C9 FD cmp_flag $ff-zero
000E0D 1 D0 FE trap_ne
000E0F 1
000E0F 1 A2 01 ldx #1
000E11 1 9A txs ;sp=01
000E12 1 A9 00 48 28 set_stat 0
000E16 1 BA tsx ;clears Z, N
000E17 1 08 php ;sp=00
000E18 1 E0 01 cpx #1
000E1A 1 D0 FE trap_ne
000E1C 1 AD 01 01 lda $101
000E1F 1 C9 30 cmp_flag 0
000E21 1 D0 FE trap_ne
000E23 1 A9 00 48 28 set_stat 0
000E27 1 BA tsx ;clears N, sets Z
000E28 1 08 php ;sp=ff
000E29 1 E0 00 cpx #0
000E2B 1 D0 FE trap_ne
000E2D 1 AD 00 01 lda $100
000E30 1 C9 32 cmp_flag zero
000E32 1 D0 FE trap_ne
000E34 1 A9 00 48 28 set_stat 0
000E38 1 BA tsx ;clears N, sets Z
000E39 1 08 php ;sp=fe
000E3A 1 E0 FF cpx #$ff
000E3C 1 D0 FE trap_ne
000E3E 1 AD FF 01 lda $1ff
000E41 1 C9 B0 cmp_flag minus
000E43 1 D0 FE trap_ne
000E45 1 68 pla ;sp=ff
000E46 1 AD 00 02 C9 next_test
000E4A 1 0E D0 FE A9
000E4E 1 0F 8D 00 02
000E52 1
000E52 1 ; testing index register load & store LDY LDX STY STX all addressing modes
000E52 1 ; LDX / STX - zp,y / abs,y
000E52 1 A0 03 ldy #3
000E54 1 tldx:
000E54 1 A9 00 48 28 set_stat 0
000E58 1 B6 15 ldx zp1,y
000E5A 1 08 php ;test stores do not alter flags
000E5B 1 8A txa
000E5C 1 49 C3 eor #$c3
000E5E 1 28 plp
000E5F 1 99 03 02 sta abst,y
000E62 1 08 php ;flags after load/store sequence
000E63 1 49 C3 eor #$c3
000E65 1 D9 18 02 cmp abs1,y ;test result
000E68 1 D0 FE trap_ne
000E6A 1 68 pla ;load status
000E6B 1 49 30 eor_flag 0
000E6D 1 D9 1D 02 cmp fLDx,y ;test flags
000E70 1 D0 FE trap_ne
000E72 1 88 dey
000E73 1 10 DF bpl tldx
000E75 1
000E75 1 A0 03 ldy #3
000E77 1 tldx1:
000E77 1 A9 FF 48 28 set_stat $ff
000E7B 1 B6 15 ldx zp1,y
000E7D 1 08 php ;test stores do not alter flags
000E7E 1 8A txa
000E7F 1 49 C3 eor #$c3
000E81 1 28 plp
000E82 1 99 03 02 sta abst,y
000E85 1 08 php ;flags after load/store sequence
000E86 1 49 C3 eor #$c3
000E88 1 D9 18 02 cmp abs1,y ;test result
000E8B 1 D0 FE trap_ne
000E8D 1 68 pla ;load status
000E8E 1 49 7D eor_flag <~fnz ;mask bits not altered
000E90 1 D9 1D 02 cmp fLDx,y ;test flags
000E93 1 D0 FE trap_ne
000E95 1 88 dey
000E96 1 10 DF bpl tldx1
000E98 1
000E98 1 A0 03 ldy #3
000E9A 1 tldx2:
000E9A 1 A9 00 48 28 set_stat 0
000E9E 1 BE 18 02 ldx abs1,y
000EA1 1 08 php ;test stores do not alter flags
000EA2 1 8A txa
000EA3 1 49 C3 eor #$c3
000EA5 1 AA tax
000EA6 1 28 plp
000EA7 1 96 0C stx zpt,y
000EA9 1 08 php ;flags after load/store sequence
000EAA 1 49 C3 eor #$c3
000EAC 1 D9 15 00 cmp zp1,y ;test result
000EAF 1 D0 FE trap_ne
000EB1 1 68 pla ;load status
000EB2 1 49 30 eor_flag 0
000EB4 1 D9 1D 02 cmp fLDx,y ;test flags
000EB7 1 D0 FE trap_ne
000EB9 1 88 dey
000EBA 1 10 DE bpl tldx2
000EBC 1
000EBC 1 A0 03 ldy #3
000EBE 1 tldx3:
000EBE 1 A9 FF 48 28 set_stat $ff
000EC2 1 BE 18 02 ldx abs1,y
000EC5 1 08 php ;test stores do not alter flags
000EC6 1 8A txa
000EC7 1 49 C3 eor #$c3
000EC9 1 AA tax
000ECA 1 28 plp
000ECB 1 96 0C stx zpt,y
000ECD 1 08 php ;flags after load/store sequence
000ECE 1 49 C3 eor #$c3
000ED0 1 D9 15 00 cmp zp1,y ;test result
000ED3 1 D0 FE trap_ne
000ED5 1 68 pla ;load status
000ED6 1 49 7D eor_flag <~fnz ;mask bits not altered
000ED8 1 D9 1D 02 cmp fLDx,y ;test flags
000EDB 1 D0 FE trap_ne
000EDD 1 88 dey
000EDE 1 10 DE bpl tldx3
000EE0 1
000EE0 1 A0 03 ldy #3 ;testing store result
000EE2 1 A2 00 ldx #0
000EE4 1 B9 0C 00 tstx: lda zpt,y
000EE7 1 49 C3 eor #$c3
000EE9 1 D9 15 00 cmp zp1,y
000EEC 1 D0 FE trap_ne ;store to zp data
000EEE 1 96 0C stx zpt,y ;clear
000EF0 1 B9 03 02 lda abst,y
000EF3 1 49 C3 eor #$c3
000EF5 1 D9 18 02 cmp abs1,y
000EF8 1 D0 FE trap_ne ;store to abs data
000EFA 1 8A txa
000EFB 1 99 03 02 sta abst,y ;clear
000EFE 1 88 dey
000EFF 1 10 E3 bpl tstx
000F01 1 AD 00 02 C9 next_test
000F05 1 0F D0 FE A9
000F09 1 10 8D 00 02
000F0D 1
000F0D 1 ; indexed wraparound test (only zp should wrap)
000F0D 1 A0 FD ldy #3+$fa
000F0F 1 B6 1B tldx4: ldx <(zp1-$fa),y ;wrap on indexed zp
000F11 1 8A txa
000F12 1 99 09 01 sta abst-$fa,y ;no STX abs,y!
000F15 1 88 dey
000F16 1 C0 FA cpy #$fa
000F18 1 B0 F5 bcs tldx4
000F1A 1 A0 FD ldy #3+$fa
000F1C 1 BE 1E 01 tldx5: ldx abs1-$fa,y ;no wrap on indexed abs
000F1F 1 96 12 stx <(zpt-$fa),y
000F21 1 88 dey
000F22 1 C0 FA cpy #$fa
000F24 1 B0 F6 bcs tldx5
000F26 1 A0 03 ldy #3 ;testing wraparound result
000F28 1 A2 00 ldx #0
000F2A 1 B9 0C 00 tstx1: lda zpt,y
000F2D 1 D9 15 00 cmp zp1,y
000F30 1 D0 FE trap_ne ;store to zp data
000F32 1 96 0C stx zpt,y ;clear
000F34 1 B9 03 02 lda abst,y
000F37 1 D9 18 02 cmp abs1,y
000F3A 1 D0 FE trap_ne ;store to abs data
000F3C 1 8A txa
000F3D 1 99 03 02 sta abst,y ;clear
000F40 1 88 dey
000F41 1 10 E7 bpl tstx1
000F43 1 AD 00 02 C9 next_test
000F47 1 10 D0 FE A9
000F4B 1 11 8D 00 02
000F4F 1
000F4F 1 ; LDY / STY - zp,x / abs,x
000F4F 1 A2 03 ldx #3
000F51 1 tldy:
000F51 1 A9 00 48 28 set_stat 0
000F55 1 B4 15 ldy zp1,x
000F57 1 08 php ;test stores do not alter flags
000F58 1 98 tya
000F59 1 49 C3 eor #$c3
000F5B 1 28 plp
000F5C 1 9D 03 02 sta abst,x
000F5F 1 08 php ;flags after load/store sequence
000F60 1 49 C3 eor #$c3
000F62 1 DD 18 02 cmp abs1,x ;test result
000F65 1 D0 FE trap_ne
000F67 1 68 pla ;load status
000F68 1 49 30 eor_flag 0
000F6A 1 DD 1D 02 cmp fLDx,x ;test flags
000F6D 1 D0 FE trap_ne
000F6F 1 CA dex
000F70 1 10 DF bpl tldy
000F72 1
000F72 1 A2 03 ldx #3
000F74 1 tldy1:
000F74 1 A9 FF 48 28 set_stat $ff
000F78 1 B4 15 ldy zp1,x
000F7A 1 08 php ;test stores do not alter flags
000F7B 1 98 tya
000F7C 1 49 C3 eor #$c3
000F7E 1 28 plp
000F7F 1 9D 03 02 sta abst,x
000F82 1 08 php ;flags after load/store sequence
000F83 1 49 C3 eor #$c3
000F85 1 DD 18 02 cmp abs1,x ;test result
000F88 1 D0 FE trap_ne
000F8A 1 68 pla ;load status
000F8B 1 49 7D eor_flag <~fnz ;mask bits not altered
000F8D 1 DD 1D 02 cmp fLDx,x ;test flags
000F90 1 D0 FE trap_ne
000F92 1 CA dex
000F93 1 10 DF bpl tldy1
000F95 1
000F95 1 A2 03 ldx #3
000F97 1 tldy2:
000F97 1 A9 00 48 28 set_stat 0
000F9B 1 BC 18 02 ldy abs1,x
000F9E 1 08 php ;test stores do not alter flags
000F9F 1 98 tya
000FA0 1 49 C3 eor #$c3
000FA2 1 A8 tay
000FA3 1 28 plp
000FA4 1 94 0C sty zpt,x
000FA6 1 08 php ;flags after load/store sequence
000FA7 1 49 C3 eor #$c3
000FA9 1 D5 15 cmp zp1,x ;test result
000FAB 1 D0 FE trap_ne
000FAD 1 68 pla ;load status
000FAE 1 49 30 eor_flag 0
000FB0 1 DD 1D 02 cmp fLDx,x ;test flags
000FB3 1 D0 FE trap_ne
000FB5 1 CA dex
000FB6 1 10 DF bpl tldy2
000FB8 1
000FB8 1 A2 03 ldx #3
000FBA 1 tldy3:
000FBA 1 A9 FF 48 28 set_stat $ff
000FBE 1 BC 18 02 ldy abs1,x
000FC1 1 08 php ;test stores do not alter flags
000FC2 1 98 tya
000FC3 1 49 C3 eor #$c3
000FC5 1 A8 tay
000FC6 1 28 plp
000FC7 1 94 0C sty zpt,x
000FC9 1 08 php ;flags after load/store sequence
000FCA 1 49 C3 eor #$c3
000FCC 1 D5 15 cmp zp1,x ;test result
000FCE 1 D0 FE trap_ne
000FD0 1 68 pla ;load status
000FD1 1 49 7D eor_flag <~fnz ;mask bits not altered
000FD3 1 DD 1D 02 cmp fLDx,x ;test flags
000FD6 1 D0 FE trap_ne
000FD8 1 CA dex
000FD9 1 10 DF bpl tldy3
000FDB 1
000FDB 1 A2 03 ldx #3 ;testing store result
000FDD 1 A0 00 ldy #0
000FDF 1 B5 0C tsty: lda zpt,x
000FE1 1 49 C3 eor #$c3
000FE3 1 D5 15 cmp zp1,x
000FE5 1 D0 FE trap_ne ;store to zp,x data
000FE7 1 94 0C sty zpt,x ;clear
000FE9 1 BD 03 02 lda abst,x
000FEC 1 49 C3 eor #$c3
000FEE 1 DD 18 02 cmp abs1,x
000FF1 1 D0 FE trap_ne ;store to abs,x data
000FF3 1 8A txa
000FF4 1 9D 03 02 sta abst,x ;clear
000FF7 1 CA dex
000FF8 1 10 E5 bpl tsty
000FFA 1 AD 00 02 C9 next_test
000FFE 1 11 D0 FE A9
001002 1 12 8D 00 02
001006 1
001006 1 ; indexed wraparound test (only zp should wrap)
001006 1 A2 FD ldx #3+$fa
001008 1 B4 1B tldy4: ldy <(zp1-$fa),x ;wrap on indexed zp
00100A 1 98 tya
00100B 1 9D 09 01 sta abst-$fa,x ;no STX abs,x!
00100E 1 CA dex
00100F 1 E0 FA cpx #$fa
001011 1 B0 F5 bcs tldy4
001013 1 A2 FD ldx #3+$fa
001015 1 BC 1E 01 tldy5: ldy abs1-$fa,x ;no wrap on indexed abs
001018 1 94 12 sty <(zpt-$fa),x
00101A 1 CA dex
00101B 1 E0 FA cpx #$fa
00101D 1 B0 F6 bcs tldy5
00101F 1 A2 03 ldx #3 ;testing wraparound result
001021 1 A0 00 ldy #0
001023 1 B5 0C tsty1: lda zpt,x
001025 1 D5 15 cmp zp1,x
001027 1 D0 FE trap_ne ;store to zp,x data
001029 1 94 0C sty zpt,x ;clear
00102B 1 BD 03 02 lda abst,x
00102E 1 DD 18 02 cmp abs1,x
001031 1 D0 FE trap_ne ;store to abs,x data
001033 1 8A txa
001034 1 9D 03 02 sta abst,x ;clear
001037 1 CA dex
001038 1 10 E9 bpl tsty1
00103A 1 AD 00 02 C9 next_test
00103E 1 12 D0 FE A9
001042 1 13 8D 00 02
001046 1
001046 1 ; LDX / STX - zp / abs / #
001046 1 A9 00 48 28 set_stat 0
00104A 1 A6 15 ldx zp1
00104C 1 08 php ;test stores do not alter flags
00104D 1 8A txa
00104E 1 49 C3 eor #$c3
001050 1 AA tax
001051 1 28 plp
001052 1 8E 03 02 stx abst
001055 1 08 php ;flags after load/store sequence
001056 1 49 C3 eor #$c3
001058 1 AA tax
001059 1 E0 C3 cpx #$c3 ;test result
00105B 1 D0 FE trap_ne
00105D 1 68 pla ;load status
00105E 1 49 30 eor_flag 0
001060 1 CD 1D 02 cmp fLDx ;test flags
001063 1 D0 FE trap_ne
001065 1 A9 00 48 28 set_stat 0
001069 1 A6 16 ldx zp1+1
00106B 1 08 php ;test stores do not alter flags
00106C 1 8A txa
00106D 1 49 C3 eor #$c3
00106F 1 AA tax
001070 1 28 plp
001071 1 8E 04 02 stx abst+1
001074 1 08 php ;flags after load/store sequence
001075 1 49 C3 eor #$c3
001077 1 AA tax
001078 1 E0 82 cpx #$82 ;test result
00107A 1 D0 FE trap_ne
00107C 1 68 pla ;load status
00107D 1 49 30 eor_flag 0
00107F 1 CD 1E 02 cmp fLDx+1 ;test flags
001082 1 D0 FE trap_ne
001084 1 A9 00 48 28 set_stat 0
001088 1 A6 17 ldx zp1+2
00108A 1 08 php ;test stores do not alter flags
00108B 1 8A txa
00108C 1 49 C3 eor #$c3
00108E 1 AA tax
00108F 1 28 plp
001090 1 8E 05 02 stx abst+2
001093 1 08 php ;flags after load/store sequence
001094 1 49 C3 eor #$c3
001096 1 AA tax
001097 1 E0 41 cpx #$41 ;test result
001099 1 D0 FE trap_ne
00109B 1 68 pla ;load status
00109C 1 49 30 eor_flag 0
00109E 1 CD 1F 02 cmp fLDx+2 ;test flags
0010A1 1 D0 FE trap_ne
0010A3 1 A9 00 48 28 set_stat 0
0010A7 1 A6 18 ldx zp1+3
0010A9 1 08 php ;test stores do not alter flags
0010AA 1 8A txa
0010AB 1 49 C3 eor #$c3
0010AD 1 AA tax
0010AE 1 28 plp
0010AF 1 8E 06 02 stx abst+3
0010B2 1 08 php ;flags after load/store sequence
0010B3 1 49 C3 eor #$c3
0010B5 1 AA tax
0010B6 1 E0 00 cpx #0 ;test result
0010B8 1 D0 FE trap_ne
0010BA 1 68 pla ;load status
0010BB 1 49 30 eor_flag 0
0010BD 1 CD 20 02 cmp fLDx+3 ;test flags
0010C0 1 D0 FE trap_ne
0010C2 1
0010C2 1 A9 FF 48 28 set_stat $ff
0010C6 1 A6 15 ldx zp1
0010C8 1 08 php ;test stores do not alter flags
0010C9 1 8A txa
0010CA 1 49 C3 eor #$c3
0010CC 1 AA tax
0010CD 1 28 plp
0010CE 1 8E 03 02 stx abst
0010D1 1 08 php ;flags after load/store sequence
0010D2 1 49 C3 eor #$c3
0010D4 1 AA tax
0010D5 1 E0 C3 cpx #$c3 ;test result
0010D7 1 D0 FE trap_ne ;
0010D9 1 68 pla ;load status
0010DA 1 49 7D eor_flag <~fnz ;mask bits not altered
0010DC 1 CD 1D 02 cmp fLDx ;test flags
0010DF 1 D0 FE trap_ne
0010E1 1 A9 FF 48 28 set_stat $ff
0010E5 1 A6 16 ldx zp1+1
0010E7 1 08 php ;test stores do not alter flags
0010E8 1 8A txa
0010E9 1 49 C3 eor #$c3
0010EB 1 AA tax
0010EC 1 28 plp
0010ED 1 8E 04 02 stx abst+1
0010F0 1 08 php ;flags after load/store sequence
0010F1 1 49 C3 eor #$c3
0010F3 1 AA tax
0010F4 1 E0 82 cpx #$82 ;test result
0010F6 1 D0 FE trap_ne
0010F8 1 68 pla ;load status
0010F9 1 49 7D eor_flag <~fnz ;mask bits not altered
0010FB 1 CD 1E 02 cmp fLDx+1 ;test flags
0010FE 1 D0 FE trap_ne
001100 1 A9 FF 48 28 set_stat $ff
001104 1 A6 17 ldx zp1+2
001106 1 08 php ;test stores do not alter flags
001107 1 8A txa
001108 1 49 C3 eor #$c3
00110A 1 AA tax
00110B 1 28 plp
00110C 1 8E 05 02 stx abst+2
00110F 1 08 php ;flags after load/store sequence
001110 1 49 C3 eor #$c3
001112 1 AA tax
001113 1 E0 41 cpx #$41 ;test result
001115 1 D0 FE trap_ne ;
001117 1 68 pla ;load status
001118 1 49 7D eor_flag <~fnz ;mask bits not altered
00111A 1 CD 1F 02 cmp fLDx+2 ;test flags
00111D 1 D0 FE trap_ne
00111F 1 A9 FF 48 28 set_stat $ff
001123 1 A6 18 ldx zp1+3
001125 1 08 php ;test stores do not alter flags
001126 1 8A txa
001127 1 49 C3 eor #$c3
001129 1 AA tax
00112A 1 28 plp
00112B 1 8E 06 02 stx abst+3
00112E 1 08 php ;flags after load/store sequence
00112F 1 49 C3 eor #$c3
001131 1 AA tax
001132 1 E0 00 cpx #0 ;test result
001134 1 D0 FE trap_ne
001136 1 68 pla ;load status
001137 1 49 7D eor_flag <~fnz ;mask bits not altered
001139 1 CD 20 02 cmp fLDx+3 ;test flags
00113C 1 D0 FE trap_ne
00113E 1
00113E 1 A9 00 48 28 set_stat 0
001142 1 AE 18 02 ldx abs1
001145 1 08 php ;test stores do not alter flags
001146 1 8A txa
001147 1 49 C3 eor #$c3
001149 1 AA tax
00114A 1 28 plp
00114B 1 86 0C stx zpt
00114D 1 08 php ;flags after load/store sequence
00114E 1 49 C3 eor #$c3
001150 1 C5 15 cmp zp1 ;test result
001152 1 D0 FE trap_ne
001154 1 68 pla ;load status
001155 1 49 30 eor_flag 0
001157 1 CD 1D 02 cmp fLDx ;test flags
00115A 1 D0 FE trap_ne
00115C 1 A9 00 48 28 set_stat 0
001160 1 AE 19 02 ldx abs1+1
001163 1 08 php ;test stores do not alter flags
001164 1 8A txa
001165 1 49 C3 eor #$c3
001167 1 AA tax
001168 1 28 plp
001169 1 86 0D stx zpt+1
00116B 1 08 php ;flags after load/store sequence
00116C 1 49 C3 eor #$c3
00116E 1 C5 16 cmp zp1+1 ;test result
001170 1 D0 FE trap_ne
001172 1 68 pla ;load status
001173 1 49 30 eor_flag 0
001175 1 CD 1E 02 cmp fLDx+1 ;test flags
001178 1 D0 FE trap_ne
00117A 1 A9 00 48 28 set_stat 0
00117E 1 AE 1A 02 ldx abs1+2
001181 1 08 php ;test stores do not alter flags
001182 1 8A txa
001183 1 49 C3 eor #$c3
001185 1 AA tax
001186 1 28 plp
001187 1 86 0E stx zpt+2
001189 1 08 php ;flags after load/store sequence
00118A 1 49 C3 eor #$c3
00118C 1 C5 17 cmp zp1+2 ;test result
00118E 1 D0 FE trap_ne
001190 1 68 pla ;load status
001191 1 49 30 eor_flag 0
001193 1 CD 1F 02 cmp fLDx+2 ;test flags
001196 1 D0 FE trap_ne
001198 1 A9 00 48 28 set_stat 0
00119C 1 AE 1B 02 ldx abs1+3
00119F 1 08 php ;test stores do not alter flags
0011A0 1 8A txa
0011A1 1 49 C3 eor #$c3
0011A3 1 AA tax
0011A4 1 28 plp
0011A5 1 86 0F stx zpt+3
0011A7 1 08 php ;flags after load/store sequence
0011A8 1 49 C3 eor #$c3
0011AA 1 C5 18 cmp zp1+3 ;test result
0011AC 1 D0 FE trap_ne
0011AE 1 68 pla ;load status
0011AF 1 49 30 eor_flag 0
0011B1 1 CD 20 02 cmp fLDx+3 ;test flags
0011B4 1 D0 FE trap_ne
0011B6 1
0011B6 1 A9 FF 48 28 set_stat $ff
0011BA 1 AE 18 02 ldx abs1
0011BD 1 08 php ;test stores do not alter flags
0011BE 1 8A txa
0011BF 1 49 C3 eor #$c3
0011C1 1 AA tax
0011C2 1 28 plp
0011C3 1 86 0C stx zpt
0011C5 1 08 php ;flags after load/store sequence
0011C6 1 49 C3 eor #$c3
0011C8 1 AA tax
0011C9 1 E4 15 cpx zp1 ;test result
0011CB 1 D0 FE trap_ne
0011CD 1 68 pla ;load status
0011CE 1 49 7D eor_flag <~fnz ;mask bits not altered
0011D0 1 CD 1D 02 cmp fLDx ;test flags
0011D3 1 D0 FE trap_ne
0011D5 1 A9 FF 48 28 set_stat $ff
0011D9 1 AE 19 02 ldx abs1+1
0011DC 1 08 php ;test stores do not alter flags
0011DD 1 8A txa
0011DE 1 49 C3 eor #$c3
0011E0 1 AA tax
0011E1 1 28 plp
0011E2 1 86 0D stx zpt+1
0011E4 1 08 php ;flags after load/store sequence
0011E5 1 49 C3 eor #$c3
0011E7 1 AA tax
0011E8 1 E4 16 cpx zp1+1 ;test result
0011EA 1 D0 FE trap_ne
0011EC 1 68 pla ;load status
0011ED 1 49 7D eor_flag <~fnz ;mask bits not altered
0011EF 1 CD 1E 02 cmp fLDx+1 ;test flags
0011F2 1 D0 FE trap_ne
0011F4 1 A9 FF 48 28 set_stat $ff
0011F8 1 AE 1A 02 ldx abs1+2
0011FB 1 08 php ;test stores do not alter flags
0011FC 1 8A txa
0011FD 1 49 C3 eor #$c3
0011FF 1 AA tax
001200 1 28 plp
001201 1 86 0E stx zpt+2
001203 1 08 php ;flags after load/store sequence
001204 1 49 C3 eor #$c3
001206 1 AA tax
001207 1 E4 17 cpx zp1+2 ;test result
001209 1 D0 FE trap_ne
00120B 1 68 pla ;load status
00120C 1 49 7D eor_flag <~fnz ;mask bits not altered
00120E 1 CD 1F 02 cmp fLDx+2 ;test flags
001211 1 D0 FE trap_ne
001213 1 A9 FF 48 28 set_stat $ff
001217 1 AE 1B 02 ldx abs1+3
00121A 1 08 php ;test stores do not alter flags
00121B 1 8A txa
00121C 1 49 C3 eor #$c3
00121E 1 AA tax
00121F 1 28 plp
001220 1 86 0F stx zpt+3
001222 1 08 php ;flags after load/store sequence
001223 1 49 C3 eor #$c3
001225 1 AA tax
001226 1 E4 18 cpx zp1+3 ;test result
001228 1 D0 FE trap_ne
00122A 1 68 pla ;load status
00122B 1 49 7D eor_flag <~fnz ;mask bits not altered
00122D 1 CD 20 02 cmp fLDx+3 ;test flags
001230 1 D0 FE trap_ne
001232 1
001232 1 A9 00 48 28 set_stat 0
001236 1 A2 C3 ldx #$c3
001238 1 08 php
001239 1 EC 18 02 cpx abs1 ;test result
00123C 1 D0 FE trap_ne
00123E 1 68 pla ;load status
00123F 1 49 30 eor_flag 0
001241 1 CD 1D 02 cmp fLDx ;test flags
001244 1 D0 FE trap_ne
001246 1 A9 00 48 28 set_stat 0
00124A 1 A2 82 ldx #$82
00124C 1 08 php
00124D 1 EC 19 02 cpx abs1+1 ;test result
001250 1 D0 FE trap_ne
001252 1 68 pla ;load status
001253 1 49 30 eor_flag 0
001255 1 CD 1E 02 cmp fLDx+1 ;test flags
001258 1 D0 FE trap_ne
00125A 1 A9 00 48 28 set_stat 0
00125E 1 A2 41 ldx #$41
001260 1 08 php
001261 1 EC 1A 02 cpx abs1+2 ;test result
001264 1 D0 FE trap_ne
001266 1 68 pla ;load status
001267 1 49 30 eor_flag 0
001269 1 CD 1F 02 cmp fLDx+2 ;test flags
00126C 1 D0 FE trap_ne
00126E 1 A9 00 48 28 set_stat 0
001272 1 A2 00 ldx #0
001274 1 08 php
001275 1 EC 1B 02 cpx abs1+3 ;test result
001278 1 D0 FE trap_ne
00127A 1 68 pla ;load status
00127B 1 49 30 eor_flag 0
00127D 1 CD 20 02 cmp fLDx+3 ;test flags
001280 1 D0 FE trap_ne
001282 1
001282 1 A9 FF 48 28 set_stat $ff
001286 1 A2 C3 ldx #$c3
001288 1 08 php
001289 1 EC 18 02 cpx abs1 ;test result
00128C 1 D0 FE trap_ne
00128E 1 68 pla ;load status
00128F 1 49 7D eor_flag <~fnz ;mask bits not altered
001291 1 CD 1D 02 cmp fLDx ;test flags
001294 1 D0 FE trap_ne
001296 1 A9 FF 48 28 set_stat $ff
00129A 1 A2 82 ldx #$82
00129C 1 08 php
00129D 1 EC 19 02 cpx abs1+1 ;test result
0012A0 1 D0 FE trap_ne
0012A2 1 68 pla ;load status
0012A3 1 49 7D eor_flag <~fnz ;mask bits not altered
0012A5 1 CD 1E 02 cmp fLDx+1 ;test flags
0012A8 1 D0 FE trap_ne
0012AA 1 A9 FF 48 28 set_stat $ff
0012AE 1 A2 41 ldx #$41
0012B0 1 08 php
0012B1 1 EC 1A 02 cpx abs1+2 ;test result
0012B4 1 D0 FE trap_ne
0012B6 1 68 pla ;load status
0012B7 1 49 7D eor_flag <~fnz ;mask bits not altered
0012B9 1 CD 1F 02 cmp fLDx+2 ;test flags
0012BC 1 D0 FE trap_ne
0012BE 1 A9 FF 48 28 set_stat $ff
0012C2 1 A2 00 ldx #0
0012C4 1 08 php
0012C5 1 EC 1B 02 cpx abs1+3 ;test result
0012C8 1 D0 FE trap_ne
0012CA 1 68 pla ;load status
0012CB 1 49 7D eor_flag <~fnz ;mask bits not altered
0012CD 1 CD 20 02 cmp fLDx+3 ;test flags
0012D0 1 D0 FE trap_ne
0012D2 1
0012D2 1 A2 00 ldx #0
0012D4 1 A5 0C lda zpt
0012D6 1 49 C3 eor #$c3
0012D8 1 C5 15 cmp zp1
0012DA 1 D0 FE trap_ne ;store to zp data
0012DC 1 86 0C stx zpt ;clear
0012DE 1 AD 03 02 lda abst
0012E1 1 49 C3 eor #$c3
0012E3 1 CD 18 02 cmp abs1
0012E6 1 D0 FE trap_ne ;store to abs data
0012E8 1 8E 03 02 stx abst ;clear
0012EB 1 A5 0D lda zpt+1
0012ED 1 49 C3 eor #$c3
0012EF 1 C5 16 cmp zp1+1
0012F1 1 D0 FE trap_ne ;store to zp data
0012F3 1 86 0D stx zpt+1 ;clear
0012F5 1 AD 04 02 lda abst+1
0012F8 1 49 C3 eor #$c3
0012FA 1 CD 19 02 cmp abs1+1
0012FD 1 D0 FE trap_ne ;store to abs data
0012FF 1 8E 04 02 stx abst+1 ;clear
001302 1 A5 0E lda zpt+2
001304 1 49 C3 eor #$c3
001306 1 C5 17 cmp zp1+2
001308 1 D0 FE trap_ne ;store to zp data
00130A 1 86 0E stx zpt+2 ;clear
00130C 1 AD 05 02 lda abst+2
00130F 1 49 C3 eor #$c3
001311 1 CD 1A 02 cmp abs1+2
001314 1 D0 FE trap_ne ;store to abs data
001316 1 8E 05 02 stx abst+2 ;clear
001319 1 A5 0F lda zpt+3
00131B 1 49 C3 eor #$c3
00131D 1 C5 18 cmp zp1+3
00131F 1 D0 FE trap_ne ;store to zp data
001321 1 86 0F stx zpt+3 ;clear
001323 1 AD 06 02 lda abst+3
001326 1 49 C3 eor #$c3
001328 1 CD 1B 02 cmp abs1+3
00132B 1 D0 FE trap_ne ;store to abs data
00132D 1 8E 06 02 stx abst+3 ;clear
001330 1 AD 00 02 C9 next_test
001334 1 13 D0 FE A9
001338 1 14 8D 00 02
00133C 1
00133C 1 ; LDY / STY - zp / abs / #
00133C 1 A9 00 48 28 set_stat 0
001340 1 A4 15 ldy zp1
001342 1 08 php ;test stores do not alter flags
001343 1 98 tya
001344 1 49 C3 eor #$c3
001346 1 A8 tay
001347 1 28 plp
001348 1 8C 03 02 sty abst
00134B 1 08 php ;flags after load/store sequence
00134C 1 49 C3 eor #$c3
00134E 1 A8 tay
00134F 1 C0 C3 cpy #$c3 ;test result
001351 1 D0 FE trap_ne
001353 1 68 pla ;load status
001354 1 49 30 eor_flag 0
001356 1 CD 1D 02 cmp fLDx ;test flags
001359 1 D0 FE trap_ne
00135B 1 A9 00 48 28 set_stat 0
00135F 1 A4 16 ldy zp1+1
001361 1 08 php ;test stores do not alter flags
001362 1 98 tya
001363 1 49 C3 eor #$c3
001365 1 A8 tay
001366 1 28 plp
001367 1 8C 04 02 sty abst+1
00136A 1 08 php ;flags after load/store sequence
00136B 1 49 C3 eor #$c3
00136D 1 A8 tay
00136E 1 C0 82 cpy #$82 ;test result
001370 1 D0 FE trap_ne
001372 1 68 pla ;load status
001373 1 49 30 eor_flag 0
001375 1 CD 1E 02 cmp fLDx+1 ;test flags
001378 1 D0 FE trap_ne
00137A 1 A9 00 48 28 set_stat 0
00137E 1 A4 17 ldy zp1+2
001380 1 08 php ;test stores do not alter flags
001381 1 98 tya
001382 1 49 C3 eor #$c3
001384 1 A8 tay
001385 1 28 plp
001386 1 8C 05 02 sty abst+2
001389 1 08 php ;flags after load/store sequence
00138A 1 49 C3 eor #$c3
00138C 1 A8 tay
00138D 1 C0 41 cpy #$41 ;test result
00138F 1 D0 FE trap_ne
001391 1 68 pla ;load status
001392 1 49 30 eor_flag 0
001394 1 CD 1F 02 cmp fLDx+2 ;test flags
001397 1 D0 FE trap_ne
001399 1 A9 00 48 28 set_stat 0
00139D 1 A4 18 ldy zp1+3
00139F 1 08 php ;test stores do not alter flags
0013A0 1 98 tya
0013A1 1 49 C3 eor #$c3
0013A3 1 A8 tay
0013A4 1 28 plp
0013A5 1 8C 06 02 sty abst+3
0013A8 1 08 php ;flags after load/store sequence
0013A9 1 49 C3 eor #$c3
0013AB 1 A8 tay
0013AC 1 C0 00 cpy #0 ;test result
0013AE 1 D0 FE trap_ne
0013B0 1 68 pla ;load status
0013B1 1 49 30 eor_flag 0
0013B3 1 CD 20 02 cmp fLDx+3 ;test flags
0013B6 1 D0 FE trap_ne
0013B8 1
0013B8 1 A9 FF 48 28 set_stat $ff
0013BC 1 A4 15 ldy zp1
0013BE 1 08 php ;test stores do not alter flags
0013BF 1 98 tya
0013C0 1 49 C3 eor #$c3
0013C2 1 A8 tay
0013C3 1 28 plp
0013C4 1 8C 03 02 sty abst
0013C7 1 08 php ;flags after load/store sequence
0013C8 1 49 C3 eor #$c3
0013CA 1 A8 tay
0013CB 1 C0 C3 cpy #$c3 ;test result
0013CD 1 D0 FE trap_ne
0013CF 1 68 pla ;load status
0013D0 1 49 7D eor_flag <~fnz ;mask bits not altered
0013D2 1 CD 1D 02 cmp fLDx ;test flags
0013D5 1 D0 FE trap_ne
0013D7 1 A9 FF 48 28 set_stat $ff
0013DB 1 A4 16 ldy zp1+1
0013DD 1 08 php ;test stores do not alter flags
0013DE 1 98 tya
0013DF 1 49 C3 eor #$c3
0013E1 1 A8 tay
0013E2 1 28 plp
0013E3 1 8C 04 02 sty abst+1
0013E6 1 08 php ;flags after load/store sequence
0013E7 1 49 C3 eor #$c3
0013E9 1 A8 tay
0013EA 1 C0 82 cpy #$82 ;test result
0013EC 1 D0 FE trap_ne
0013EE 1 68 pla ;load status
0013EF 1 49 7D eor_flag <~fnz ;mask bits not altered
0013F1 1 CD 1E 02 cmp fLDx+1 ;test flags
0013F4 1 D0 FE trap_ne
0013F6 1 A9 FF 48 28 set_stat $ff
0013FA 1 A4 17 ldy zp1+2
0013FC 1 08 php ;test stores do not alter flags
0013FD 1 98 tya
0013FE 1 49 C3 eor #$c3
001400 1 A8 tay
001401 1 28 plp
001402 1 8C 05 02 sty abst+2
001405 1 08 php ;flags after load/store sequence
001406 1 49 C3 eor #$c3
001408 1 A8 tay
001409 1 C0 41 cpy #$41 ;test result
00140B 1 D0 FE trap_ne
00140D 1 68 pla ;load status
00140E 1 49 7D eor_flag <~fnz ;mask bits not altered
001410 1 CD 1F 02 cmp fLDx+2 ;test flags
001413 1 D0 FE trap_ne
001415 1 A9 FF 48 28 set_stat $ff
001419 1 A4 18 ldy zp1+3
00141B 1 08 php ;test stores do not alter flags
00141C 1 98 tya
00141D 1 49 C3 eor #$c3
00141F 1 A8 tay
001420 1 28 plp
001421 1 8C 06 02 sty abst+3
001424 1 08 php ;flags after load/store sequence
001425 1 49 C3 eor #$c3
001427 1 A8 tay
001428 1 C0 00 cpy #0 ;test result
00142A 1 D0 FE trap_ne
00142C 1 68 pla ;load status
00142D 1 49 7D eor_flag <~fnz ;mask bits not altered
00142F 1 CD 20 02 cmp fLDx+3 ;test flags
001432 1 D0 FE trap_ne
001434 1
001434 1 A9 00 48 28 set_stat 0
001438 1 AC 18 02 ldy abs1
00143B 1 08 php ;test stores do not alter flags
00143C 1 98 tya
00143D 1 49 C3 eor #$c3
00143F 1 A8 tay
001440 1 28 plp
001441 1 84 0C sty zpt
001443 1 08 php ;flags after load/store sequence
001444 1 49 C3 eor #$c3
001446 1 A8 tay
001447 1 C4 15 cpy zp1 ;test result
001449 1 D0 FE trap_ne
00144B 1 68 pla ;load status
00144C 1 49 30 eor_flag 0
00144E 1 CD 1D 02 cmp fLDx ;test flags
001451 1 D0 FE trap_ne
001453 1 A9 00 48 28 set_stat 0
001457 1 AC 19 02 ldy abs1+1
00145A 1 08 php ;test stores do not alter flags
00145B 1 98 tya
00145C 1 49 C3 eor #$c3
00145E 1 A8 tay
00145F 1 28 plp
001460 1 84 0D sty zpt+1
001462 1 08 php ;flags after load/store sequence
001463 1 49 C3 eor #$c3
001465 1 A8 tay
001466 1 C4 16 cpy zp1+1 ;test result
001468 1 D0 FE trap_ne
00146A 1 68 pla ;load status
00146B 1 49 30 eor_flag 0
00146D 1 CD 1E 02 cmp fLDx+1 ;test flags
001470 1 D0 FE trap_ne
001472 1 A9 00 48 28 set_stat 0
001476 1 AC 1A 02 ldy abs1+2
001479 1 08 php ;test stores do not alter flags
00147A 1 98 tya
00147B 1 49 C3 eor #$c3
00147D 1 A8 tay
00147E 1 28 plp
00147F 1 84 0E sty zpt+2
001481 1 08 php ;flags after load/store sequence
001482 1 49 C3 eor #$c3
001484 1 A8 tay
001485 1 C4 17 cpy zp1+2 ;test result
001487 1 D0 FE trap_ne
001489 1 68 pla ;load status
00148A 1 49 30 eor_flag 0
00148C 1 CD 1F 02 cmp fLDx+2 ;test flags
00148F 1 D0 FE trap_ne
001491 1 A9 00 48 28 set_stat 0
001495 1 AC 1B 02 ldy abs1+3
001498 1 08 php ;test stores do not alter flags
001499 1 98 tya
00149A 1 49 C3 eor #$c3
00149C 1 A8 tay
00149D 1 28 plp
00149E 1 84 0F sty zpt+3
0014A0 1 08 php ;flags after load/store sequence
0014A1 1 49 C3 eor #$c3
0014A3 1 A8 tay
0014A4 1 C4 18 cpy zp1+3 ;test result
0014A6 1 D0 FE trap_ne
0014A8 1 68 pla ;load status
0014A9 1 49 30 eor_flag 0
0014AB 1 CD 20 02 cmp fLDx+3 ;test flags
0014AE 1 D0 FE trap_ne
0014B0 1
0014B0 1 A9 FF 48 28 set_stat $ff
0014B4 1 AC 18 02 ldy abs1
0014B7 1 08 php ;test stores do not alter flags
0014B8 1 98 tya
0014B9 1 49 C3 eor #$c3
0014BB 1 A8 tay
0014BC 1 28 plp
0014BD 1 84 0C sty zpt
0014BF 1 08 php ;flags after load/store sequence
0014C0 1 49 C3 eor #$c3
0014C2 1 A8 tay
0014C3 1 C5 15 cmp zp1 ;test result
0014C5 1 D0 FE trap_ne
0014C7 1 68 pla ;load status
0014C8 1 49 7D eor_flag <~fnz ;mask bits not altered
0014CA 1 CD 1D 02 cmp fLDx ;test flags
0014CD 1 D0 FE trap_ne
0014CF 1 A9 FF 48 28 set_stat $ff
0014D3 1 AC 19 02 ldy abs1+1
0014D6 1 08 php ;test stores do not alter flags
0014D7 1 98 tya
0014D8 1 49 C3 eor #$c3
0014DA 1 A8 tay
0014DB 1 28 plp
0014DC 1 84 0D sty zpt+1
0014DE 1 08 php ;flags after load/store sequence
0014DF 1 49 C3 eor #$c3
0014E1 1 A8 tay
0014E2 1 C5 16 cmp zp1+1 ;test result
0014E4 1 D0 FE trap_ne
0014E6 1 68 pla ;load status
0014E7 1 49 7D eor_flag <~fnz ;mask bits not altered
0014E9 1 CD 1E 02 cmp fLDx+1 ;test flags
0014EC 1 D0 FE trap_ne
0014EE 1 A9 FF 48 28 set_stat $ff
0014F2 1 AC 1A 02 ldy abs1+2
0014F5 1 08 php ;test stores do not alter flags
0014F6 1 98 tya
0014F7 1 49 C3 eor #$c3
0014F9 1 A8 tay
0014FA 1 28 plp
0014FB 1 84 0E sty zpt+2
0014FD 1 08 php ;flags after load/store sequence
0014FE 1 49 C3 eor #$c3
001500 1 A8 tay
001501 1 C5 17 cmp zp1+2 ;test result
001503 1 D0 FE trap_ne
001505 1 68 pla ;load status
001506 1 49 7D eor_flag <~fnz ;mask bits not altered
001508 1 CD 1F 02 cmp fLDx+2 ;test flags
00150B 1 D0 FE trap_ne
00150D 1 A9 FF 48 28 set_stat $ff
001511 1 AC 1B 02 ldy abs1+3
001514 1 08 php ;test stores do not alter flags
001515 1 98 tya
001516 1 49 C3 eor #$c3
001518 1 A8 tay
001519 1 28 plp
00151A 1 84 0F sty zpt+3
00151C 1 08 php ;flags after load/store sequence
00151D 1 49 C3 eor #$c3
00151F 1 A8 tay
001520 1 C5 18 cmp zp1+3 ;test result
001522 1 D0 FE trap_ne
001524 1 68 pla ;load status
001525 1 49 7D eor_flag <~fnz ;mask bits not altered
001527 1 CD 20 02 cmp fLDx+3 ;test flags
00152A 1 D0 FE trap_ne
00152C 1
00152C 1
00152C 1 A9 00 48 28 set_stat 0
001530 1 A0 C3 ldy #$c3
001532 1 08 php
001533 1 CC 18 02 cpy abs1 ;test result
001536 1 D0 FE trap_ne
001538 1 68 pla ;load status
001539 1 49 30 eor_flag 0
00153B 1 CD 1D 02 cmp fLDx ;test flags
00153E 1 D0 FE trap_ne
001540 1 A9 00 48 28 set_stat 0
001544 1 A0 82 ldy #$82
001546 1 08 php
001547 1 CC 19 02 cpy abs1+1 ;test result
00154A 1 D0 FE trap_ne
00154C 1 68 pla ;load status
00154D 1 49 30 eor_flag 0
00154F 1 CD 1E 02 cmp fLDx+1 ;test flags
001552 1 D0 FE trap_ne
001554 1 A9 00 48 28 set_stat 0
001558 1 A0 41 ldy #$41
00155A 1 08 php
00155B 1 CC 1A 02 cpy abs1+2 ;test result
00155E 1 D0 FE trap_ne
001560 1 68 pla ;load status
001561 1 49 30 eor_flag 0
001563 1 CD 1F 02 cmp fLDx+2 ;test flags
001566 1 D0 FE trap_ne
001568 1 A9 00 48 28 set_stat 0
00156C 1 A0 00 ldy #0
00156E 1 08 php
00156F 1 CC 1B 02 cpy abs1+3 ;test result
001572 1 D0 FE trap_ne
001574 1 68 pla ;load status
001575 1 49 30 eor_flag 0
001577 1 CD 20 02 cmp fLDx+3 ;test flags
00157A 1 D0 FE trap_ne
00157C 1
00157C 1 A9 FF 48 28 set_stat $ff
001580 1 A0 C3 ldy #$c3
001582 1 08 php
001583 1 CC 18 02 cpy abs1 ;test result
001586 1 D0 FE trap_ne
001588 1 68 pla ;load status
001589 1 49 7D eor_flag <~fnz ;mask bits not altered
00158B 1 CD 1D 02 cmp fLDx ;test flags
00158E 1 D0 FE trap_ne
001590 1 A9 FF 48 28 set_stat $ff
001594 1 A0 82 ldy #$82
001596 1 08 php
001597 1 CC 19 02 cpy abs1+1 ;test result
00159A 1 D0 FE trap_ne
00159C 1 68 pla ;load status
00159D 1 49 7D eor_flag <~fnz ;mask bits not altered
00159F 1 CD 1E 02 cmp fLDx+1 ;test flags
0015A2 1 D0 FE trap_ne
0015A4 1 A9 FF 48 28 set_stat $ff
0015A8 1 A0 41 ldy #$41
0015AA 1 08 php
0015AB 1 CC 1A 02 cpy abs1+2 ;test result
0015AE 1 D0 FE trap_ne
0015B0 1 68 pla ;load status
0015B1 1 49 7D eor_flag <~fnz ;mask bits not altered
0015B3 1 CD 1F 02 cmp fLDx+2 ;test flags
0015B6 1 D0 FE trap_ne
0015B8 1 A9 FF 48 28 set_stat $ff
0015BC 1 A0 00 ldy #0
0015BE 1 08 php
0015BF 1 CC 1B 02 cpy abs1+3 ;test result
0015C2 1 D0 FE trap_ne
0015C4 1 68 pla ;load status
0015C5 1 49 7D eor_flag <~fnz ;mask bits not altered
0015C7 1 CD 20 02 cmp fLDx+3 ;test flags
0015CA 1 D0 FE trap_ne
0015CC 1
0015CC 1 A0 00 ldy #0
0015CE 1 A5 0C lda zpt
0015D0 1 49 C3 eor #$c3
0015D2 1 C5 15 cmp zp1
0015D4 1 D0 FE trap_ne ;store to zp data
0015D6 1 84 0C sty zpt ;clear
0015D8 1 AD 03 02 lda abst
0015DB 1 49 C3 eor #$c3
0015DD 1 CD 18 02 cmp abs1
0015E0 1 D0 FE trap_ne ;store to abs data
0015E2 1 8C 03 02 sty abst ;clear
0015E5 1 A5 0D lda zpt+1
0015E7 1 49 C3 eor #$c3
0015E9 1 C5 16 cmp zp1+1
0015EB 1 D0 FE trap_ne ;store to zp+1 data
0015ED 1 84 0D sty zpt+1 ;clear
0015EF 1 AD 04 02 lda abst+1
0015F2 1 49 C3 eor #$c3
0015F4 1 CD 19 02 cmp abs1+1
0015F7 1 D0 FE trap_ne ;store to abs+1 data
0015F9 1 8C 04 02 sty abst+1 ;clear
0015FC 1 A5 0E lda zpt+2
0015FE 1 49 C3 eor #$c3
001600 1 C5 17 cmp zp1+2
001602 1 D0 FE trap_ne ;store to zp+2 data
001604 1 84 0E sty zpt+2 ;clear
001606 1 AD 05 02 lda abst+2
001609 1 49 C3 eor #$c3
00160B 1 CD 1A 02 cmp abs1+2
00160E 1 D0 FE trap_ne ;store to abs+2 data
001610 1 8C 05 02 sty abst+2 ;clear
001613 1 A5 0F lda zpt+3
001615 1 49 C3 eor #$c3
001617 1 C5 18 cmp zp1+3
001619 1 D0 FE trap_ne ;store to zp+3 data
00161B 1 84 0F sty zpt+3 ;clear
00161D 1 AD 06 02 lda abst+3
001620 1 49 C3 eor #$c3
001622 1 CD 1B 02 cmp abs1+3
001625 1 D0 FE trap_ne ;store to abs+3 data
001627 1 8C 06 02 sty abst+3 ;clear
00162A 1 AD 00 02 C9 next_test
00162E 1 14 D0 FE A9
001632 1 15 8D 00 02
001636 1
001636 1 ; testing load / store accumulator LDA / STA all addressing modes
001636 1 ; LDA / STA - zp,x / abs,x
001636 1 A2 03 ldx #3
001638 1 tldax:
001638 1 A9 00 48 28 set_stat 0
00163C 1 B5 15 lda zp1,x
00163E 1 08 php ;test stores do not alter flags
00163F 1 49 C3 eor #$c3
001641 1 28 plp
001642 1 9D 03 02 sta abst,x
001645 1 08 php ;flags after load/store sequence
001646 1 49 C3 eor #$c3
001648 1 DD 18 02 cmp abs1,x ;test result
00164B 1 D0 FE trap_ne
00164D 1 68 pla ;load status
00164E 1 49 30 eor_flag 0
001650 1 DD 1D 02 cmp fLDx,x ;test flags
001653 1 D0 FE trap_ne
001655 1 CA dex
001656 1 10 E0 bpl tldax
001658 1
001658 1 A2 03 ldx #3
00165A 1 tldax1:
00165A 1 A9 FF 48 28 set_stat $ff
00165E 1 B5 15 lda zp1,x
001660 1 08 php ;test stores do not alter flags
001661 1 49 C3 eor #$c3
001663 1 28 plp
001664 1 9D 03 02 sta abst,x
001667 1 08 php ;flags after load/store sequence
001668 1 49 C3 eor #$c3
00166A 1 DD 18 02 cmp abs1,x ;test result
00166D 1 D0 FE trap_ne
00166F 1 68 pla ;load status
001670 1 49 7D eor_flag <~fnz ;mask bits not altered
001672 1 DD 1D 02 cmp fLDx,x ;test flags
001675 1 D0 FE trap_ne
001677 1 CA dex
001678 1 10 E0 bpl tldax1
00167A 1
00167A 1 A2 03 ldx #3
00167C 1 tldax2:
00167C 1 A9 00 48 28 set_stat 0
001680 1 BD 18 02 lda abs1,x
001683 1 08 php ;test stores do not alter flags
001684 1 49 C3 eor #$c3
001686 1 28 plp
001687 1 95 0C sta zpt,x
001689 1 08 php ;flags after load/store sequence
00168A 1 49 C3 eor #$c3
00168C 1 D5 15 cmp zp1,x ;test result
00168E 1 D0 FE trap_ne
001690 1 68 pla ;load status
001691 1 49 30 eor_flag 0
001693 1 DD 1D 02 cmp fLDx,x ;test flags
001696 1 D0 FE trap_ne
001698 1 CA dex
001699 1 10 E1 bpl tldax2
00169B 1
00169B 1 A2 03 ldx #3
00169D 1 tldax3:
00169D 1 A9 FF 48 28 set_stat $ff
0016A1 1 BD 18 02 lda abs1,x
0016A4 1 08 php ;test stores do not alter flags
0016A5 1 49 C3 eor #$c3
0016A7 1 28 plp
0016A8 1 95 0C sta zpt,x
0016AA 1 08 php ;flags after load/store sequence
0016AB 1 49 C3 eor #$c3
0016AD 1 D5 15 cmp zp1,x ;test result
0016AF 1 D0 FE trap_ne
0016B1 1 68 pla ;load status
0016B2 1 49 7D eor_flag <~fnz ;mask bits not altered
0016B4 1 DD 1D 02 cmp fLDx,x ;test flags
0016B7 1 D0 FE trap_ne
0016B9 1 CA dex
0016BA 1 10 E1 bpl tldax3
0016BC 1
0016BC 1 A2 03 ldx #3 ;testing store result
0016BE 1 A0 00 ldy #0
0016C0 1 B5 0C tstax: lda zpt,x
0016C2 1 49 C3 eor #$c3
0016C4 1 D5 15 cmp zp1,x
0016C6 1 D0 FE trap_ne ;store to zp,x data
0016C8 1 94 0C sty zpt,x ;clear
0016CA 1 BD 03 02 lda abst,x
0016CD 1 49 C3 eor #$c3
0016CF 1 DD 18 02 cmp abs1,x
0016D2 1 D0 FE trap_ne ;store to abs,x data
0016D4 1 8A txa
0016D5 1 9D 03 02 sta abst,x ;clear
0016D8 1 CA dex
0016D9 1 10 E5 bpl tstax
0016DB 1 AD 00 02 C9 next_test
0016DF 1 15 D0 FE A9
0016E3 1 16 8D 00 02
0016E7 1
0016E7 1 ; LDA / STA - (zp),y / abs,y / (zp,x)
0016E7 1 A0 03 ldy #3
0016E9 1 tlday:
0016E9 1 A9 00 48 28 set_stat 0
0016ED 1 B1 26 lda (ind1),y
0016EF 1 08 php ;test stores do not alter flags
0016F0 1 49 C3 eor #$c3
0016F2 1 28 plp
0016F3 1 99 03 02 sta abst,y
0016F6 1 08 php ;flags after load/store sequence
0016F7 1 49 C3 eor #$c3
0016F9 1 D9 18 02 cmp abs1,y ;test result
0016FC 1 D0 FE trap_ne
0016FE 1 68 pla ;load status
0016FF 1 49 30 eor_flag 0
001701 1 D9 1D 02 cmp fLDx,y ;test flags
001704 1 D0 FE trap_ne
001706 1 88 dey
001707 1 10 E0 bpl tlday
001709 1
001709 1 A0 03 ldy #3
00170B 1 tlday1:
00170B 1 A9 FF 48 28 set_stat $ff
00170F 1 B1 26 lda (ind1),y
001711 1 08 php ;test stores do not alter flags
001712 1 49 C3 eor #$c3
001714 1 28 plp
001715 1 99 03 02 sta abst,y
001718 1 08 php ;flags after load/store sequence
001719 1 49 C3 eor #$c3
00171B 1 D9 18 02 cmp abs1,y ;test result
00171E 1 D0 FE trap_ne
001720 1 68 pla ;load status
001721 1 49 7D eor_flag <~fnz ;mask bits not altered
001723 1 D9 1D 02 cmp fLDx,y ;test flags
001726 1 D0 FE trap_ne
001728 1 88 dey
001729 1 10 E0 bpl tlday1
00172B 1
00172B 1 A0 03 ldy #3 ;testing store result
00172D 1 A2 00 ldx #0
00172F 1 B9 03 02 tstay: lda abst,y
001732 1 49 C3 eor #$c3
001734 1 D9 18 02 cmp abs1,y
001737 1 D0 FE trap_ne ;store to abs data
001739 1 8A txa
00173A 1 99 03 02 sta abst,y ;clear
00173D 1 88 dey
00173E 1 10 EF bpl tstay
001740 1
001740 1 A0 03 ldy #3
001742 1 tlday2:
001742 1 A9 00 48 28 set_stat 0
001746 1 B9 18 02 lda abs1,y
001749 1 08 php ;test stores do not alter flags
00174A 1 49 C3 eor #$c3
00174C 1 28 plp
00174D 1 91 32 sta (indt),y
00174F 1 08 php ;flags after load/store sequence
001750 1 49 C3 eor #$c3
001752 1 D1 26 cmp (ind1),y ;test result
001754 1 D0 FE trap_ne
001756 1 68 pla ;load status
001757 1 49 30 eor_flag 0
001759 1 D9 1D 02 cmp fLDx,y ;test flags
00175C 1 D0 FE trap_ne
00175E 1 88 dey
00175F 1 10 E1 bpl tlday2
001761 1
001761 1 A0 03 ldy #3
001763 1 tlday3:
001763 1 A9 FF 48 28 set_stat $ff
001767 1 B9 18 02 lda abs1,y
00176A 1 08 php ;test stores do not alter flags
00176B 1 49 C3 eor #$c3
00176D 1 28 plp
00176E 1 91 32 sta (indt),y
001770 1 08 php ;flags after load/store sequence
001771 1 49 C3 eor #$c3
001773 1 D1 26 cmp (ind1),y ;test result
001775 1 D0 FE trap_ne
001777 1 68 pla ;load status
001778 1 49 7D eor_flag <~fnz ;mask bits not altered
00177A 1 D9 1D 02 cmp fLDx,y ;test flags
00177D 1 D0 FE trap_ne
00177F 1 88 dey
001780 1 10 E1 bpl tlday3
001782 1
001782 1 A0 03 ldy #3 ;testing store result
001784 1 A2 00 ldx #0
001786 1 B9 03 02 tstay1: lda abst,y
001789 1 49 C3 eor #$c3
00178B 1 D9 18 02 cmp abs1,y
00178E 1 D0 FE trap_ne ;store to abs data
001790 1 8A txa
001791 1 99 03 02 sta abst,y ;clear
001794 1 88 dey
001795 1 10 EF bpl tstay1
001797 1
001797 1 A2 06 ldx #6
001799 1 A0 03 ldy #3
00179B 1 tldax4:
00179B 1 A9 00 48 28 set_stat 0
00179F 1 A1 26 lda (ind1,x)
0017A1 1 08 php ;test stores do not alter flags
0017A2 1 49 C3 eor #$c3
0017A4 1 28 plp
0017A5 1 81 32 sta (indt,x)
0017A7 1 08 php ;flags after load/store sequence
0017A8 1 49 C3 eor #$c3
0017AA 1 D9 18 02 cmp abs1,y ;test result
0017AD 1 D0 FE trap_ne
0017AF 1 68 pla ;load status
0017B0 1 49 30 eor_flag 0
0017B2 1 D9 1D 02 cmp fLDx,y ;test flags
0017B5 1 D0 FE trap_ne
0017B7 1 CA dex
0017B8 1 CA dex
0017B9 1 88 dey
0017BA 1 10 DF bpl tldax4
0017BC 1
0017BC 1 A2 06 ldx #6
0017BE 1 A0 03 ldy #3
0017C0 1 tldax5:
0017C0 1 A9 FF 48 28 set_stat $ff
0017C4 1 A1 26 lda (ind1,x)
0017C6 1 08 php ;test stores do not alter flags
0017C7 1 49 C3 eor #$c3
0017C9 1 28 plp
0017CA 1 81 32 sta (indt,x)
0017CC 1 08 php ;flags after load/store sequence
0017CD 1 49 C3 eor #$c3
0017CF 1 D9 18 02 cmp abs1,y ;test result
0017D2 1 D0 FE trap_ne
0017D4 1 68 pla ;load status
0017D5 1 49 7D eor_flag <~fnz ;mask bits not altered
0017D7 1 D9 1D 02 cmp fLDx,y ;test flags
0017DA 1 D0 FE trap_ne
0017DC 1 CA dex
0017DD 1 CA dex
0017DE 1 88 dey
0017DF 1 10 DF bpl tldax5
0017E1 1
0017E1 1 A0 03 ldy #3 ;testing store result
0017E3 1 A2 00 ldx #0
0017E5 1 B9 03 02 tstay2: lda abst,y
0017E8 1 49 C3 eor #$c3
0017EA 1 D9 18 02 cmp abs1,y
0017ED 1 D0 FE trap_ne ;store to abs data
0017EF 1 8A txa
0017F0 1 99 03 02 sta abst,y ;clear
0017F3 1 88 dey
0017F4 1 10 EF bpl tstay2
0017F6 1 AD 00 02 C9 next_test
0017FA 1 16 D0 FE A9
0017FE 1 17 8D 00 02
001802 1
001802 1 ; indexed wraparound test (only zp should wrap)
001802 1 A2 FD ldx #3+$fa
001804 1 B5 1B tldax6: lda <(zp1-$fa),x ;wrap on indexed zp
001806 1 9D 09 01 sta abst-$fa,x ;no STX abs,x!
001809 1 CA dex
00180A 1 E0 FA cpx #$fa
00180C 1 B0 F6 bcs tldax6
00180E 1 A2 FD ldx #3+$fa
001810 1 BD 1E 01 tldax7: lda abs1-$fa,x ;no wrap on indexed abs
001813 1 95 12 sta <(zpt-$fa),x
001815 1 CA dex
001816 1 E0 FA cpx #$fa
001818 1 B0 F6 bcs tldax7
00181A 1
00181A 1 A2 03 ldx #3 ;testing wraparound result
00181C 1 A0 00 ldy #0
00181E 1 B5 0C tstax1: lda zpt,x
001820 1 D5 15 cmp zp1,x
001822 1 D0 FE trap_ne ;store to zp,x data
001824 1 94 0C sty zpt,x ;clear
001826 1 BD 03 02 lda abst,x
001829 1 DD 18 02 cmp abs1,x
00182C 1 D0 FE trap_ne ;store to abs,x data
00182E 1 8A txa
00182F 1 9D 03 02 sta abst,x ;clear
001832 1 CA dex
001833 1 10 E9 bpl tstax1
001835 1
001835 1 A0 FB ldy #3+$f8
001837 1 A2 FE ldx #6+$f8
001839 1 A1 2E tlday4: lda (<(ind1-$f8),x) ;wrap on indexed zp indirect
00183B 1 99 0B 01 sta abst-$f8,y
00183E 1 CA dex
00183F 1 CA dex
001840 1 88 dey
001841 1 C0 F8 cpy #$f8
001843 1 B0 F4 bcs tlday4
001845 1 A0 03 ldy #3 ;testing wraparound result
001847 1 A2 00 ldx #0
001849 1 B9 03 02 tstay4: lda abst,y
00184C 1 D9 18 02 cmp abs1,y
00184F 1 D0 FE trap_ne ;store to abs data
001851 1 8A txa
001852 1 99 03 02 sta abst,y ;clear
001855 1 88 dey
001856 1 10 F1 bpl tstay4
001858 1
001858 1 A0 FB ldy #3+$f8
00185A 1 B9 20 01 tlday5: lda abs1-$f8,y ;no wrap on indexed abs
00185D 1 91 3A sta (inwt),y
00185F 1 88 dey
001860 1 C0 F8 cpy #$f8
001862 1 B0 F6 bcs tlday5
001864 1 A0 03 ldy #3 ;testing wraparound result
001866 1 A2 00 ldx #0
001868 1 B9 03 02 tstay5: lda abst,y
00186B 1 D9 18 02 cmp abs1,y
00186E 1 D0 FE trap_ne ;store to abs data
001870 1 8A txa
001871 1 99 03 02 sta abst,y ;clear
001874 1 88 dey
001875 1 10 F1 bpl tstay5
001877 1
001877 1 A0 FB ldy #3+$f8
001879 1 A2 FE ldx #6+$f8
00187B 1 B1 30 tlday6: lda (inw1),y ;no wrap on zp indirect indexed
00187D 1 81 3A sta (<(indt-$f8),x)
00187F 1 CA dex
001880 1 CA dex
001881 1 88 dey
001882 1 C0 F8 cpy #$f8
001884 1 B0 F5 bcs tlday6
001886 1 A0 03 ldy #3 ;testing wraparound result
001888 1 A2 00 ldx #0
00188A 1 B9 03 02 tstay6: lda abst,y
00188D 1 D9 18 02 cmp abs1,y
001890 1 D0 FE trap_ne ;store to abs data
001892 1 8A txa
001893 1 99 03 02 sta abst,y ;clear
001896 1 88 dey
001897 1 10 F1 bpl tstay6
001899 1 AD 00 02 C9 next_test
00189D 1 17 D0 FE A9
0018A1 1 18 8D 00 02
0018A5 1
0018A5 1 ; LDA / STA - zp / abs / #
0018A5 1 A9 00 48 28 set_stat 0
0018A9 1 A5 15 lda zp1
0018AB 1 08 php ;test stores do not alter flags
0018AC 1 49 C3 eor #$c3
0018AE 1 28 plp
0018AF 1 8D 03 02 sta abst
0018B2 1 08 php ;flags after load/store sequence
0018B3 1 49 C3 eor #$c3
0018B5 1 C9 C3 cmp #$c3 ;test result
0018B7 1 D0 FE trap_ne
0018B9 1 68 pla ;load status
0018BA 1 49 30 eor_flag 0
0018BC 1 CD 1D 02 cmp fLDx ;test flags
0018BF 1 D0 FE trap_ne
0018C1 1 A9 00 48 28 set_stat 0
0018C5 1 A5 16 lda zp1+1
0018C7 1 08 php ;test stores do not alter flags
0018C8 1 49 C3 eor #$c3
0018CA 1 28 plp
0018CB 1 8D 04 02 sta abst+1
0018CE 1 08 php ;flags after load/store sequence
0018CF 1 49 C3 eor #$c3
0018D1 1 C9 82 cmp #$82 ;test result
0018D3 1 D0 FE trap_ne
0018D5 1 68 pla ;load status
0018D6 1 49 30 eor_flag 0
0018D8 1 CD 1E 02 cmp fLDx+1 ;test flags
0018DB 1 D0 FE trap_ne
0018DD 1 A9 00 48 28 set_stat 0
0018E1 1 A5 17 lda zp1+2
0018E3 1 08 php ;test stores do not alter flags
0018E4 1 49 C3 eor #$c3
0018E6 1 28 plp
0018E7 1 8D 05 02 sta abst+2
0018EA 1 08 php ;flags after load/store sequence
0018EB 1 49 C3 eor #$c3
0018ED 1 C9 41 cmp #$41 ;test result
0018EF 1 D0 FE trap_ne
0018F1 1 68 pla ;load status
0018F2 1 49 30 eor_flag 0
0018F4 1 CD 1F 02 cmp fLDx+2 ;test flags
0018F7 1 D0 FE trap_ne
0018F9 1 A9 00 48 28 set_stat 0
0018FD 1 A5 18 lda zp1+3
0018FF 1 08 php ;test stores do not alter flags
001900 1 49 C3 eor #$c3
001902 1 28 plp
001903 1 8D 06 02 sta abst+3
001906 1 08 php ;flags after load/store sequence
001907 1 49 C3 eor #$c3
001909 1 C9 00 cmp #0 ;test result
00190B 1 D0 FE trap_ne
00190D 1 68 pla ;load status
00190E 1 49 30 eor_flag 0
001910 1 CD 20 02 cmp fLDx+3 ;test flags
001913 1 D0 FE trap_ne
001915 1 A9 FF 48 28 set_stat $ff
001919 1 A5 15 lda zp1
00191B 1 08 php ;test stores do not alter flags
00191C 1 49 C3 eor #$c3
00191E 1 28 plp
00191F 1 8D 03 02 sta abst
001922 1 08 php ;flags after load/store sequence
001923 1 49 C3 eor #$c3
001925 1 C9 C3 cmp #$c3 ;test result
001927 1 D0 FE trap_ne
001929 1 68 pla ;load status
00192A 1 49 7D eor_flag <~fnz ;mask bits not altered
00192C 1 CD 1D 02 cmp fLDx ;test flags
00192F 1 D0 FE trap_ne
001931 1 A9 FF 48 28 set_stat $ff
001935 1 A5 16 lda zp1+1
001937 1 08 php ;test stores do not alter flags
001938 1 49 C3 eor #$c3
00193A 1 28 plp
00193B 1 8D 04 02 sta abst+1
00193E 1 08 php ;flags after load/store sequence
00193F 1 49 C3 eor #$c3
001941 1 C9 82 cmp #$82 ;test result
001943 1 D0 FE trap_ne
001945 1 68 pla ;load status
001946 1 49 7D eor_flag <~fnz ;mask bits not altered
001948 1 CD 1E 02 cmp fLDx+1 ;test flags
00194B 1 D0 FE trap_ne
00194D 1 A9 FF 48 28 set_stat $ff
001951 1 A5 17 lda zp1+2
001953 1 08 php ;test stores do not alter flags
001954 1 49 C3 eor #$c3
001956 1 28 plp
001957 1 8D 05 02 sta abst+2
00195A 1 08 php ;flags after load/store sequence
00195B 1 49 C3 eor #$c3
00195D 1 C9 41 cmp #$41 ;test result
00195F 1 D0 FE trap_ne
001961 1 68 pla ;load status
001962 1 49 7D eor_flag <~fnz ;mask bits not altered
001964 1 CD 1F 02 cmp fLDx+2 ;test flags
001967 1 D0 FE trap_ne
001969 1 A9 FF 48 28 set_stat $ff
00196D 1 A5 18 lda zp1+3
00196F 1 08 php ;test stores do not alter flags
001970 1 49 C3 eor #$c3
001972 1 28 plp
001973 1 8D 06 02 sta abst+3
001976 1 08 php ;flags after load/store sequence
001977 1 49 C3 eor #$c3
001979 1 C9 00 cmp #0 ;test result
00197B 1 D0 FE trap_ne
00197D 1 68 pla ;load status
00197E 1 49 7D eor_flag <~fnz ;mask bits not altered
001980 1 CD 20 02 cmp fLDx+3 ;test flags
001983 1 D0 FE trap_ne
001985 1 A9 00 48 28 set_stat 0
001989 1 AD 18 02 lda abs1
00198C 1 08 php ;test stores do not alter flags
00198D 1 49 C3 eor #$c3
00198F 1 28 plp
001990 1 85 0C sta zpt
001992 1 08 php ;flags after load/store sequence
001993 1 49 C3 eor #$c3
001995 1 C5 15 cmp zp1 ;test result
001997 1 D0 FE trap_ne
001999 1 68 pla ;load status
00199A 1 49 30 eor_flag 0
00199C 1 CD 1D 02 cmp fLDx ;test flags
00199F 1 D0 FE trap_ne
0019A1 1 A9 00 48 28 set_stat 0
0019A5 1 AD 19 02 lda abs1+1
0019A8 1 08 php ;test stores do not alter flags
0019A9 1 49 C3 eor #$c3
0019AB 1 28 plp
0019AC 1 85 0D sta zpt+1
0019AE 1 08 php ;flags after load/store sequence
0019AF 1 49 C3 eor #$c3
0019B1 1 C5 16 cmp zp1+1 ;test result
0019B3 1 D0 FE trap_ne
0019B5 1 68 pla ;load status
0019B6 1 49 30 eor_flag 0
0019B8 1 CD 1E 02 cmp fLDx+1 ;test flags
0019BB 1 D0 FE trap_ne
0019BD 1 A9 00 48 28 set_stat 0
0019C1 1 AD 1A 02 lda abs1+2
0019C4 1 08 php ;test stores do not alter flags
0019C5 1 49 C3 eor #$c3
0019C7 1 28 plp
0019C8 1 85 0E sta zpt+2
0019CA 1 08 php ;flags after load/store sequence
0019CB 1 49 C3 eor #$c3
0019CD 1 C5 17 cmp zp1+2 ;test result
0019CF 1 D0 FE trap_ne
0019D1 1 68 pla ;load status
0019D2 1 49 30 eor_flag 0
0019D4 1 CD 1F 02 cmp fLDx+2 ;test flags
0019D7 1 D0 FE trap_ne
0019D9 1 A9 00 48 28 set_stat 0
0019DD 1 AD 1B 02 lda abs1+3
0019E0 1 08 php ;test stores do not alter flags
0019E1 1 49 C3 eor #$c3
0019E3 1 28 plp
0019E4 1 85 0F sta zpt+3
0019E6 1 08 php ;flags after load/store sequence
0019E7 1 49 C3 eor #$c3
0019E9 1 C5 18 cmp zp1+3 ;test result
0019EB 1 D0 FE trap_ne
0019ED 1 68 pla ;load status
0019EE 1 49 30 eor_flag 0
0019F0 1 CD 20 02 cmp fLDx+3 ;test flags
0019F3 1 D0 FE trap_ne
0019F5 1 A9 FF 48 28 set_stat $ff
0019F9 1 AD 18 02 lda abs1
0019FC 1 08 php ;test stores do not alter flags
0019FD 1 49 C3 eor #$c3
0019FF 1 28 plp
001A00 1 85 0C sta zpt
001A02 1 08 php ;flags after load/store sequence
001A03 1 49 C3 eor #$c3
001A05 1 C5 15 cmp zp1 ;test result
001A07 1 D0 FE trap_ne
001A09 1 68 pla ;load status
001A0A 1 49 7D eor_flag <~fnz ;mask bits not altered
001A0C 1 CD 1D 02 cmp fLDx ;test flags
001A0F 1 D0 FE trap_ne
001A11 1 A9 FF 48 28 set_stat $ff
001A15 1 AD 19 02 lda abs1+1
001A18 1 08 php ;test stores do not alter flags
001A19 1 49 C3 eor #$c3
001A1B 1 28 plp
001A1C 1 85 0D sta zpt+1
001A1E 1 08 php ;flags after load/store sequence
001A1F 1 49 C3 eor #$c3
001A21 1 C5 16 cmp zp1+1 ;test result
001A23 1 D0 FE trap_ne
001A25 1 68 pla ;load status
001A26 1 49 7D eor_flag <~fnz ;mask bits not altered
001A28 1 CD 1E 02 cmp fLDx+1 ;test flags
001A2B 1 D0 FE trap_ne
001A2D 1 A9 FF 48 28 set_stat $ff
001A31 1 AD 1A 02 lda abs1+2
001A34 1 08 php ;test stores do not alter flags
001A35 1 49 C3 eor #$c3
001A37 1 28 plp
001A38 1 85 0E sta zpt+2
001A3A 1 08 php ;flags after load/store sequence
001A3B 1 49 C3 eor #$c3
001A3D 1 C5 17 cmp zp1+2 ;test result
001A3F 1 D0 FE trap_ne
001A41 1 68 pla ;load status
001A42 1 49 7D eor_flag <~fnz ;mask bits not altered
001A44 1 CD 1F 02 cmp fLDx+2 ;test flags
001A47 1 D0 FE trap_ne
001A49 1 A9 FF 48 28 set_stat $ff
001A4D 1 AD 1B 02 lda abs1+3
001A50 1 08 php ;test stores do not alter flags
001A51 1 49 C3 eor #$c3
001A53 1 28 plp
001A54 1 85 0F sta zpt+3
001A56 1 08 php ;flags after load/store sequence
001A57 1 49 C3 eor #$c3
001A59 1 C5 18 cmp zp1+3 ;test result
001A5B 1 D0 FE trap_ne
001A5D 1 68 pla ;load status
001A5E 1 49 7D eor_flag <~fnz ;mask bits not altered
001A60 1 CD 20 02 cmp fLDx+3 ;test flags
001A63 1 D0 FE trap_ne
001A65 1 A9 00 48 28 set_stat 0
001A69 1 A9 C3 lda #$c3
001A6B 1 08 php
001A6C 1 CD 18 02 cmp abs1 ;test result
001A6F 1 D0 FE trap_ne
001A71 1 68 pla ;load status
001A72 1 49 30 eor_flag 0
001A74 1 CD 1D 02 cmp fLDx ;test flags
001A77 1 D0 FE trap_ne
001A79 1 A9 00 48 28 set_stat 0
001A7D 1 A9 82 lda #$82
001A7F 1 08 php
001A80 1 CD 19 02 cmp abs1+1 ;test result
001A83 1 D0 FE trap_ne
001A85 1 68 pla ;load status
001A86 1 49 30 eor_flag 0
001A88 1 CD 1E 02 cmp fLDx+1 ;test flags
001A8B 1 D0 FE trap_ne
001A8D 1 A9 00 48 28 set_stat 0
001A91 1 A9 41 lda #$41
001A93 1 08 php
001A94 1 CD 1A 02 cmp abs1+2 ;test result
001A97 1 D0 FE trap_ne
001A99 1 68 pla ;load status
001A9A 1 49 30 eor_flag 0
001A9C 1 CD 1F 02 cmp fLDx+2 ;test flags
001A9F 1 D0 FE trap_ne
001AA1 1 A9 00 48 28 set_stat 0
001AA5 1 A9 00 lda #0
001AA7 1 08 php
001AA8 1 CD 1B 02 cmp abs1+3 ;test result
001AAB 1 D0 FE trap_ne
001AAD 1 68 pla ;load status
001AAE 1 49 30 eor_flag 0
001AB0 1 CD 20 02 cmp fLDx+3 ;test flags
001AB3 1 D0 FE trap_ne
001AB5 1
001AB5 1 A9 FF 48 28 set_stat $ff
001AB9 1 A9 C3 lda #$c3
001ABB 1 08 php
001ABC 1 CD 18 02 cmp abs1 ;test result
001ABF 1 D0 FE trap_ne
001AC1 1 68 pla ;load status
001AC2 1 49 7D eor_flag <~fnz ;mask bits not altered
001AC4 1 CD 1D 02 cmp fLDx ;test flags
001AC7 1 D0 FE trap_ne
001AC9 1 A9 FF 48 28 set_stat $ff
001ACD 1 A9 82 lda #$82
001ACF 1 08 php
001AD0 1 CD 19 02 cmp abs1+1 ;test result
001AD3 1 D0 FE trap_ne
001AD5 1 68 pla ;load status
001AD6 1 49 7D eor_flag <~fnz ;mask bits not altered
001AD8 1 CD 1E 02 cmp fLDx+1 ;test flags
001ADB 1 D0 FE trap_ne
001ADD 1 A9 FF 48 28 set_stat $ff
001AE1 1 A9 41 lda #$41
001AE3 1 08 php
001AE4 1 CD 1A 02 cmp abs1+2 ;test result
001AE7 1 D0 FE trap_ne
001AE9 1 68 pla ;load status
001AEA 1 49 7D eor_flag <~fnz ;mask bits not altered
001AEC 1 CD 1F 02 cmp fLDx+2 ;test flags
001AEF 1 D0 FE trap_ne
001AF1 1 A9 FF 48 28 set_stat $ff
001AF5 1 A9 00 lda #0
001AF7 1 08 php
001AF8 1 CD 1B 02 cmp abs1+3 ;test result
001AFB 1 D0 FE trap_ne
001AFD 1 68 pla ;load status
001AFE 1 49 7D eor_flag <~fnz ;mask bits not altered
001B00 1 CD 20 02 cmp fLDx+3 ;test flags
001B03 1 D0 FE trap_ne
001B05 1
001B05 1 A2 00 ldx #0
001B07 1 A5 0C lda zpt
001B09 1 49 C3 eor #$c3
001B0B 1 C5 15 cmp zp1
001B0D 1 D0 FE trap_ne ;store to zp data
001B0F 1 86 0C stx zpt ;clear
001B11 1 AD 03 02 lda abst
001B14 1 49 C3 eor #$c3
001B16 1 CD 18 02 cmp abs1
001B19 1 D0 FE trap_ne ;store to abs data
001B1B 1 8E 03 02 stx abst ;clear
001B1E 1 A5 0D lda zpt+1
001B20 1 49 C3 eor #$c3
001B22 1 C5 16 cmp zp1+1
001B24 1 D0 FE trap_ne ;store to zp data
001B26 1 86 0D stx zpt+1 ;clear
001B28 1 AD 04 02 lda abst+1
001B2B 1 49 C3 eor #$c3
001B2D 1 CD 19 02 cmp abs1+1
001B30 1 D0 FE trap_ne ;store to abs data
001B32 1 8E 04 02 stx abst+1 ;clear
001B35 1 A5 0E lda zpt+2
001B37 1 49 C3 eor #$c3
001B39 1 C5 17 cmp zp1+2
001B3B 1 D0 FE trap_ne ;store to zp data
001B3D 1 86 0E stx zpt+2 ;clear
001B3F 1 AD 05 02 lda abst+2
001B42 1 49 C3 eor #$c3
001B44 1 CD 1A 02 cmp abs1+2
001B47 1 D0 FE trap_ne ;store to abs data
001B49 1 8E 05 02 stx abst+2 ;clear
001B4C 1 A5 0F lda zpt+3
001B4E 1 49 C3 eor #$c3
001B50 1 C5 18 cmp zp1+3
001B52 1 D0 FE trap_ne ;store to zp data
001B54 1 86 0F stx zpt+3 ;clear
001B56 1 AD 06 02 lda abst+3
001B59 1 49 C3 eor #$c3
001B5B 1 CD 1B 02 cmp abs1+3
001B5E 1 D0 FE trap_ne ;store to abs data
001B60 1 8E 06 02 stx abst+3 ;clear
001B63 1 AD 00 02 C9 next_test
001B67 1 18 D0 FE A9
001B6B 1 19 8D 00 02
001B6F 1
001B6F 1 ; testing bit test & compares BIT CPX CPY CMP all addressing modes
001B6F 1 ; BIT - zp / abs
001B6F 1 A9 00 48 A9 set_a $ff,0
001B73 1 FF 28
001B75 1 24 18 bit zp1+3 ;00 - should set Z / clear NV
001B77 1 08 C9 FF D0 tst_a $ff,fz
001B7B 1 FE 68 48 C9
001B7F 1 32 D0 FE 28
001B83 1 A9 00 48 A9 set_a 1,0
001B87 1 01 28
001B89 1 24 17 bit zp1+2 ;41 - should set V (M6) / clear NZ
001B8B 1 08 C9 01 D0 tst_a 1,fv
001B8F 1 FE 68 48 C9
001B93 1 70 D0 FE 28
001B97 1 A9 00 48 A9 set_a 1,0
001B9B 1 01 28
001B9D 1 24 16 bit zp1+1 ;82 - should set N (M7) & Z / clear V
001B9F 1 08 C9 01 D0 tst_a 1,fnz
001BA3 1 FE 68 48 C9
001BA7 1 B2 D0 FE 28
001BAB 1 A9 00 48 A9 set_a 1,0
001BAF 1 01 28
001BB1 1 24 15 bit zp1 ;c3 - should set N (M7) & V (M6) / clear Z
001BB3 1 08 C9 01 D0 tst_a 1,fnv
001BB7 1 FE 68 48 C9
001BBB 1 F0 D0 FE 28
001BBF 1
001BBF 1 A9 FF 48 A9 set_a $ff,$ff
001BC3 1 FF 28
001BC5 1 24 18 bit zp1+3 ;00 - should set Z / clear NV
001BC7 1 08 C9 FF D0 tst_a $ff,~fnv
001BCB 1 FE 68 48 C9
001BCF 1 3F D0 FE 28
001BD3 1 A9 FF 48 A9 set_a 1,$ff
001BD7 1 01 28
001BD9 1 24 17 bit zp1+2 ;41 - should set V (M6) / clear NZ
001BDB 1 08 C9 01 D0 tst_a 1,~fnz
001BDF 1 FE 68 48 C9
001BE3 1 7D D0 FE 28
001BE7 1 A9 FF 48 A9 set_a 1,$ff
001BEB 1 01 28
001BED 1 24 16 bit zp1+1 ;82 - should set N (M7) & Z / clear V
001BEF 1 08 C9 01 D0 tst_a 1,~fv
001BF3 1 FE 68 48 C9
001BF7 1 BF D0 FE 28
001BFB 1 A9 FF 48 A9 set_a 1,$ff
001BFF 1 01 28
001C01 1 24 15 bit zp1 ;c3 - should set N (M7) & V (M6) / clear Z
001C03 1 08 C9 01 D0 tst_a 1,~fz
001C07 1 FE 68 48 C9
001C0B 1 FD D0 FE 28
001C0F 1
001C0F 1 A9 00 48 A9 set_a $ff,0
001C13 1 FF 28
001C15 1 2C 1B 02 bit abs1+3 ;00 - should set Z / clear NV
001C18 1 08 C9 FF D0 tst_a $ff,fz
001C1C 1 FE 68 48 C9
001C20 1 32 D0 FE 28
001C24 1 A9 00 48 A9 set_a 1,0
001C28 1 01 28
001C2A 1 2C 1A 02 bit abs1+2 ;41 - should set V (M6) / clear NZ
001C2D 1 08 C9 01 D0 tst_a 1,fv
001C31 1 FE 68 48 C9
001C35 1 70 D0 FE 28
001C39 1 A9 00 48 A9 set_a 1,0
001C3D 1 01 28
001C3F 1 2C 19 02 bit abs1+1 ;82 - should set N (M7) & Z / clear V
001C42 1 08 C9 01 D0 tst_a 1,fnz
001C46 1 FE 68 48 C9
001C4A 1 B2 D0 FE 28
001C4E 1 A9 00 48 A9 set_a 1,0
001C52 1 01 28
001C54 1 2C 18 02 bit abs1 ;c3 - should set N (M7) & V (M6) / clear Z
001C57 1 08 C9 01 D0 tst_a 1,fnv
001C5B 1 FE 68 48 C9
001C5F 1 F0 D0 FE 28
001C63 1
001C63 1 A9 FF 48 A9 set_a $ff,$ff
001C67 1 FF 28
001C69 1 2C 1B 02 bit abs1+3 ;00 - should set Z / clear NV
001C6C 1 08 C9 FF D0 tst_a $ff,~fnv
001C70 1 FE 68 48 C9
001C74 1 3F D0 FE 28
001C78 1 A9 FF 48 A9 set_a 1,$ff
001C7C 1 01 28
001C7E 1 2C 1A 02 bit abs1+2 ;41 - should set V (M6) / clear NZ
001C81 1 08 C9 01 D0 tst_a 1,~fnz
001C85 1 FE 68 48 C9
001C89 1 7D D0 FE 28
001C8D 1 A9 FF 48 A9 set_a 1,$ff
001C91 1 01 28
001C93 1 2C 19 02 bit abs1+1 ;82 - should set N (M7) & Z / clear V
001C96 1 08 C9 01 D0 tst_a 1,~fv
001C9A 1 FE 68 48 C9
001C9E 1 BF D0 FE 28
001CA2 1 A9 FF 48 A9 set_a 1,$ff
001CA6 1 01 28
001CA8 1 2C 18 02 bit abs1 ;c3 - should set N (M7) & V (M6) / clear Z
001CAB 1 08 C9 01 D0 tst_a 1,~fz
001CAF 1 FE 68 48 C9
001CB3 1 FD D0 FE 28
001CB7 1 AD 00 02 C9 next_test
001CBB 1 19 D0 FE A9
001CBF 1 1A 8D 00 02
001CC3 1
001CC3 1 ; CPX - zp / abs / #
001CC3 1 A9 00 48 A2 set_x $80,0
001CC7 1 80 28
001CC9 1 E4 19 cpx zp7f
001CCB 1 08 68 48 C9 tst_stat fc
001CCF 1 31 D0 FE 28
001CD3 1 CA dex
001CD4 1 E4 19 cpx zp7f
001CD6 1 08 68 48 C9 tst_stat fzc
001CDA 1 33 D0 FE 28
001CDE 1 CA dex
001CDF 1 E4 19 cpx zp7f
001CE1 1 08 E0 7E D0 tst_x $7e,fn
001CE5 1 FE 68 48 C9
001CE9 1 B0 D0 FE 28
001CED 1 A9 FF 48 A2 set_x $80,$ff
001CF1 1 80 28
001CF3 1 E4 19 cpx zp7f
001CF5 1 08 68 48 C9 tst_stat ~fnz
001CF9 1 7D D0 FE 28
001CFD 1 CA dex
001CFE 1 E4 19 cpx zp7f
001D00 1 08 68 48 C9 tst_stat ~fn
001D04 1 7F D0 FE 28
001D08 1 CA dex
001D09 1 E4 19 cpx zp7f
001D0B 1 08 E0 7E D0 tst_x $7e,~fzc
001D0F 1 FE 68 48 C9
001D13 1 FC D0 FE 28
001D17 1
001D17 1 A9 00 48 A2 set_x $80,0
001D1B 1 80 28
001D1D 1 EC 1C 02 cpx abs7f
001D20 1 08 68 48 C9 tst_stat fc
001D24 1 31 D0 FE 28
001D28 1 CA dex
001D29 1 EC 1C 02 cpx abs7f
001D2C 1 08 68 48 C9 tst_stat fzc
001D30 1 33 D0 FE 28
001D34 1 CA dex
001D35 1 EC 1C 02 cpx abs7f
001D38 1 08 E0 7E D0 tst_x $7e,fn
001D3C 1 FE 68 48 C9
001D40 1 B0 D0 FE 28
001D44 1 A9 FF 48 A2 set_x $80,$ff
001D48 1 80 28
001D4A 1 EC 1C 02 cpx abs7f
001D4D 1 08 68 48 C9 tst_stat ~fnz
001D51 1 7D D0 FE 28
001D55 1 CA dex
001D56 1 EC 1C 02 cpx abs7f
001D59 1 08 68 48 C9 tst_stat ~fn
001D5D 1 7F D0 FE 28
001D61 1 CA dex
001D62 1 EC 1C 02 cpx abs7f
001D65 1 08 E0 7E D0 tst_x $7e,~fzc
001D69 1 FE 68 48 C9
001D6D 1 FC D0 FE 28
001D71 1
001D71 1 A9 00 48 A2 set_x $80,0
001D75 1 80 28
001D77 1 E0 7F cpx #$7f
001D79 1 08 68 48 C9 tst_stat fc
001D7D 1 31 D0 FE 28
001D81 1 CA dex
001D82 1 E0 7F cpx #$7f
001D84 1 08 68 48 C9 tst_stat fzc
001D88 1 33 D0 FE 28
001D8C 1 CA dex
001D8D 1 E0 7F cpx #$7f
001D8F 1 08 E0 7E D0 tst_x $7e,fn
001D93 1 FE 68 48 C9
001D97 1 B0 D0 FE 28
001D9B 1 A9 FF 48 A2 set_x $80,$ff
001D9F 1 80 28
001DA1 1 E0 7F cpx #$7f
001DA3 1 08 68 48 C9 tst_stat ~fnz
001DA7 1 7D D0 FE 28
001DAB 1 CA dex
001DAC 1 E0 7F cpx #$7f
001DAE 1 08 68 48 C9 tst_stat ~fn
001DB2 1 7F D0 FE 28
001DB6 1 CA dex
001DB7 1 E0 7F cpx #$7f
001DB9 1 08 E0 7E D0 tst_x $7e,~fzc
001DBD 1 FE 68 48 C9
001DC1 1 FC D0 FE 28
001DC5 1 AD 00 02 C9 next_test
001DC9 1 1A D0 FE A9
001DCD 1 1B 8D 00 02
001DD1 1
001DD1 1 ; CPY - zp / abs / #
001DD1 1 A9 00 48 A0 set_y $80,0
001DD5 1 80 28
001DD7 1 C4 19 cpy zp7f
001DD9 1 08 68 48 C9 tst_stat fc
001DDD 1 31 D0 FE 28
001DE1 1 88 dey
001DE2 1 C4 19 cpy zp7f
001DE4 1 08 68 48 C9 tst_stat fzc
001DE8 1 33 D0 FE 28
001DEC 1 88 dey
001DED 1 C4 19 cpy zp7f
001DEF 1 08 C0 7E D0 tst_y $7e,fn
001DF3 1 FE 68 48 C9
001DF7 1 B0 D0 FE 28
001DFB 1 A9 FF 48 A0 set_y $80,$ff
001DFF 1 80 28
001E01 1 C4 19 cpy zp7f
001E03 1 08 68 48 C9 tst_stat ~fnz
001E07 1 7D D0 FE 28
001E0B 1 88 dey
001E0C 1 C4 19 cpy zp7f
001E0E 1 08 68 48 C9 tst_stat ~fn
001E12 1 7F D0 FE 28
001E16 1 88 dey
001E17 1 C4 19 cpy zp7f
001E19 1 08 C0 7E D0 tst_y $7e,~fzc
001E1D 1 FE 68 48 C9
001E21 1 FC D0 FE 28
001E25 1
001E25 1 A9 00 48 A0 set_y $80,0
001E29 1 80 28
001E2B 1 CC 1C 02 cpy abs7f
001E2E 1 08 68 48 C9 tst_stat fc
001E32 1 31 D0 FE 28
001E36 1 88 dey
001E37 1 CC 1C 02 cpy abs7f
001E3A 1 08 68 48 C9 tst_stat fzc
001E3E 1 33 D0 FE 28
001E42 1 88 dey
001E43 1 CC 1C 02 cpy abs7f
001E46 1 08 C0 7E D0 tst_y $7e,fn
001E4A 1 FE 68 48 C9
001E4E 1 B0 D0 FE 28
001E52 1 A9 FF 48 A0 set_y $80,$ff
001E56 1 80 28
001E58 1 CC 1C 02 cpy abs7f
001E5B 1 08 68 48 C9 tst_stat ~fnz
001E5F 1 7D D0 FE 28
001E63 1 88 dey
001E64 1 CC 1C 02 cpy abs7f
001E67 1 08 68 48 C9 tst_stat ~fn
001E6B 1 7F D0 FE 28
001E6F 1 88 dey
001E70 1 CC 1C 02 cpy abs7f
001E73 1 08 C0 7E D0 tst_y $7e,~fzc
001E77 1 FE 68 48 C9
001E7B 1 FC D0 FE 28
001E7F 1
001E7F 1 A9 00 48 A0 set_y $80,0
001E83 1 80 28
001E85 1 C0 7F cpy #$7f
001E87 1 08 68 48 C9 tst_stat fc
001E8B 1 31 D0 FE 28
001E8F 1 88 dey
001E90 1 C0 7F cpy #$7f
001E92 1 08 68 48 C9 tst_stat fzc
001E96 1 33 D0 FE 28
001E9A 1 88 dey
001E9B 1 C0 7F cpy #$7f
001E9D 1 08 C0 7E D0 tst_y $7e,fn
001EA1 1 FE 68 48 C9
001EA5 1 B0 D0 FE 28
001EA9 1 A9 FF 48 A0 set_y $80,$ff
001EAD 1 80 28
001EAF 1 C0 7F cpy #$7f
001EB1 1 08 68 48 C9 tst_stat ~fnz
001EB5 1 7D D0 FE 28
001EB9 1 88 dey
001EBA 1 C0 7F cpy #$7f
001EBC 1 08 68 48 C9 tst_stat ~fn
001EC0 1 7F D0 FE 28
001EC4 1 88 dey
001EC5 1 C0 7F cpy #$7f
001EC7 1 08 C0 7E D0 tst_y $7e,~fzc
001ECB 1 FE 68 48 C9
001ECF 1 FC D0 FE 28
001ED3 1 AD 00 02 C9 next_test
001ED7 1 1B D0 FE A9
001EDB 1 1C 8D 00 02
001EDF 1
001EDF 1 ; CMP - zp / abs / #
001EDF 1 A9 00 48 A9 set_a $80,0
001EE3 1 80 28
001EE5 1 C5 19 cmp zp7f
001EE7 1 08 C9 80 D0 tst_a $80,fc
001EEB 1 FE 68 48 C9
001EEF 1 31 D0 FE 28
001EF3 1 A9 00 48 A9 set_a $7f,0
001EF7 1 7F 28
001EF9 1 C5 19 cmp zp7f
001EFB 1 08 C9 7F D0 tst_a $7f,fzc
001EFF 1 FE 68 48 C9
001F03 1 33 D0 FE 28
001F07 1 A9 00 48 A9 set_a $7e,0
001F0B 1 7E 28
001F0D 1 C5 19 cmp zp7f
001F0F 1 08 C9 7E D0 tst_a $7e,fn
001F13 1 FE 68 48 C9
001F17 1 B0 D0 FE 28
001F1B 1 A9 FF 48 A9 set_a $80,$ff
001F1F 1 80 28
001F21 1 C5 19 cmp zp7f
001F23 1 08 C9 80 D0 tst_a $80,~fnz
001F27 1 FE 68 48 C9
001F2B 1 7D D0 FE 28
001F2F 1 A9 FF 48 A9 set_a $7f,$ff
001F33 1 7F 28
001F35 1 C5 19 cmp zp7f
001F37 1 08 C9 7F D0 tst_a $7f,~fn
001F3B 1 FE 68 48 C9
001F3F 1 7F D0 FE 28
001F43 1 A9 FF 48 A9 set_a $7e,$ff
001F47 1 7E 28
001F49 1 C5 19 cmp zp7f
001F4B 1 08 C9 7E D0 tst_a $7e,~fzc
001F4F 1 FE 68 48 C9
001F53 1 FC D0 FE 28
001F57 1
001F57 1 A9 00 48 A9 set_a $80,0
001F5B 1 80 28
001F5D 1 CD 1C 02 cmp abs7f
001F60 1 08 C9 80 D0 tst_a $80,fc
001F64 1 FE 68 48 C9
001F68 1 31 D0 FE 28
001F6C 1 A9 00 48 A9 set_a $7f,0
001F70 1 7F 28
001F72 1 CD 1C 02 cmp abs7f
001F75 1 08 C9 7F D0 tst_a $7f,fzc
001F79 1 FE 68 48 C9
001F7D 1 33 D0 FE 28
001F81 1 A9 00 48 A9 set_a $7e,0
001F85 1 7E 28
001F87 1 CD 1C 02 cmp abs7f
001F8A 1 08 C9 7E D0 tst_a $7e,fn
001F8E 1 FE 68 48 C9
001F92 1 B0 D0 FE 28
001F96 1 A9 FF 48 A9 set_a $80,$ff
001F9A 1 80 28
001F9C 1 CD 1C 02 cmp abs7f
001F9F 1 08 C9 80 D0 tst_a $80,~fnz
001FA3 1 FE 68 48 C9
001FA7 1 7D D0 FE 28
001FAB 1 A9 FF 48 A9 set_a $7f,$ff
001FAF 1 7F 28
001FB1 1 CD 1C 02 cmp abs7f
001FB4 1 08 C9 7F D0 tst_a $7f,~fn
001FB8 1 FE 68 48 C9
001FBC 1 7F D0 FE 28
001FC0 1 A9 FF 48 A9 set_a $7e,$ff
001FC4 1 7E 28
001FC6 1 CD 1C 02 cmp abs7f
001FC9 1 08 C9 7E D0 tst_a $7e,~fzc
001FCD 1 FE 68 48 C9
001FD1 1 FC D0 FE 28
001FD5 1
001FD5 1 A9 00 48 A9 set_a $80,0
001FD9 1 80 28
001FDB 1 C9 7F cmp #$7f
001FDD 1 08 C9 80 D0 tst_a $80,fc
001FE1 1 FE 68 48 C9
001FE5 1 31 D0 FE 28
001FE9 1 A9 00 48 A9 set_a $7f,0
001FED 1 7F 28
001FEF 1 C9 7F cmp #$7f
001FF1 1 08 C9 7F D0 tst_a $7f,fzc
001FF5 1 FE 68 48 C9
001FF9 1 33 D0 FE 28
001FFD 1 A9 00 48 A9 set_a $7e,0
002001 1 7E 28
002003 1 C9 7F cmp #$7f
002005 1 08 C9 7E D0 tst_a $7e,fn
002009 1 FE 68 48 C9
00200D 1 B0 D0 FE 28
002011 1 A9 FF 48 A9 set_a $80,$ff
002015 1 80 28
002017 1 C9 7F cmp #$7f
002019 1 08 C9 80 D0 tst_a $80,~fnz
00201D 1 FE 68 48 C9
002021 1 7D D0 FE 28
002025 1 A9 FF 48 A9 set_a $7f,$ff
002029 1 7F 28
00202B 1 C9 7F cmp #$7f
00202D 1 08 C9 7F D0 tst_a $7f,~fn
002031 1 FE 68 48 C9
002035 1 7F D0 FE 28
002039 1 A9 FF 48 A9 set_a $7e,$ff
00203D 1 7E 28
00203F 1 C9 7F cmp #$7f
002041 1 08 C9 7E D0 tst_a $7e,~fzc
002045 1 FE 68 48 C9
002049 1 FC D0 FE 28
00204D 1
00204D 1 A2 04 ldx #4 ;with indexing by X
00204F 1 A9 00 48 A9 set_a $80,0
002053 1 80 28
002055 1 D5 15 cmp zp1,x
002057 1 08 C9 80 D0 tst_a $80,fc
00205B 1 FE 68 48 C9
00205F 1 31 D0 FE 28
002063 1 A9 00 48 A9 set_a $7f,0
002067 1 7F 28
002069 1 D5 15 cmp zp1,x
00206B 1 08 C9 7F D0 tst_a $7f,fzc
00206F 1 FE 68 48 C9
002073 1 33 D0 FE 28
002077 1 A9 00 48 A9 set_a $7e,0
00207B 1 7E 28
00207D 1 D5 15 cmp zp1,x
00207F 1 08 C9 7E D0 tst_a $7e,fn
002083 1 FE 68 48 C9
002087 1 B0 D0 FE 28
00208B 1 A9 FF 48 A9 set_a $80,$ff
00208F 1 80 28
002091 1 D5 15 cmp zp1,x
002093 1 08 C9 80 D0 tst_a $80,~fnz
002097 1 FE 68 48 C9
00209B 1 7D D0 FE 28
00209F 1 A9 FF 48 A9 set_a $7f,$ff
0020A3 1 7F 28
0020A5 1 D5 15 cmp zp1,x
0020A7 1 08 C9 7F D0 tst_a $7f,~fn
0020AB 1 FE 68 48 C9
0020AF 1 7F D0 FE 28
0020B3 1 A9 FF 48 A9 set_a $7e,$ff
0020B7 1 7E 28
0020B9 1 D5 15 cmp zp1,x
0020BB 1 08 C9 7E D0 tst_a $7e,~fzc
0020BF 1 FE 68 48 C9
0020C3 1 FC D0 FE 28
0020C7 1
0020C7 1 A9 00 48 A9 set_a $80,0
0020CB 1 80 28
0020CD 1 DD 18 02 cmp abs1,x
0020D0 1 08 C9 80 D0 tst_a $80,fc
0020D4 1 FE 68 48 C9
0020D8 1 31 D0 FE 28
0020DC 1 A9 00 48 A9 set_a $7f,0
0020E0 1 7F 28
0020E2 1 DD 18 02 cmp abs1,x
0020E5 1 08 C9 7F D0 tst_a $7f,fzc
0020E9 1 FE 68 48 C9
0020ED 1 33 D0 FE 28
0020F1 1 A9 00 48 A9 set_a $7e,0
0020F5 1 7E 28
0020F7 1 DD 18 02 cmp abs1,x
0020FA 1 08 C9 7E D0 tst_a $7e,fn
0020FE 1 FE 68 48 C9
002102 1 B0 D0 FE 28
002106 1 A9 FF 48 A9 set_a $80,$ff
00210A 1 80 28
00210C 1 DD 18 02 cmp abs1,x
00210F 1 08 C9 80 D0 tst_a $80,~fnz
002113 1 FE 68 48 C9
002117 1 7D D0 FE 28
00211B 1 A9 FF 48 A9 set_a $7f,$ff
00211F 1 7F 28
002121 1 DD 18 02 cmp abs1,x
002124 1 08 C9 7F D0 tst_a $7f,~fn
002128 1 FE 68 48 C9
00212C 1 7F D0 FE 28
002130 1 A9 FF 48 A9 set_a $7e,$ff
002134 1 7E 28
002136 1 DD 18 02 cmp abs1,x
002139 1 08 C9 7E D0 tst_a $7e,~fzc
00213D 1 FE 68 48 C9
002141 1 FC D0 FE 28
002145 1
002145 1 A0 04 ldy #4 ;with indexing by Y
002147 1 A2 08 ldx #8 ;with indexed indirect
002149 1 A9 00 48 A9 set_a $80,0
00214D 1 80 28
00214F 1 D9 18 02 cmp abs1,y
002152 1 08 C9 80 D0 tst_a $80,fc
002156 1 FE 68 48 C9
00215A 1 31 D0 FE 28
00215E 1 A9 00 48 A9 set_a $7f,0
002162 1 7F 28
002164 1 D9 18 02 cmp abs1,y
002167 1 08 C9 7F D0 tst_a $7f,fzc
00216B 1 FE 68 48 C9
00216F 1 33 D0 FE 28
002173 1 A9 00 48 A9 set_a $7e,0
002177 1 7E 28
002179 1 D9 18 02 cmp abs1,y
00217C 1 08 C9 7E D0 tst_a $7e,fn
002180 1 FE 68 48 C9
002184 1 B0 D0 FE 28
002188 1 A9 FF 48 A9 set_a $80,$ff
00218C 1 80 28
00218E 1 D9 18 02 cmp abs1,y
002191 1 08 C9 80 D0 tst_a $80,~fnz
002195 1 FE 68 48 C9
002199 1 7D D0 FE 28
00219D 1 A9 FF 48 A9 set_a $7f,$ff
0021A1 1 7F 28
0021A3 1 D9 18 02 cmp abs1,y
0021A6 1 08 C9 7F D0 tst_a $7f,~fn
0021AA 1 FE 68 48 C9
0021AE 1 7F D0 FE 28
0021B2 1 A9 FF 48 A9 set_a $7e,$ff
0021B6 1 7E 28
0021B8 1 D9 18 02 cmp abs1,y
0021BB 1 08 C9 7E D0 tst_a $7e,~fzc
0021BF 1 FE 68 48 C9
0021C3 1 FC D0 FE 28
0021C7 1
0021C7 1 A9 00 48 A9 set_a $80,0
0021CB 1 80 28
0021CD 1 C1 26 cmp (ind1,x)
0021CF 1 08 C9 80 D0 tst_a $80,fc
0021D3 1 FE 68 48 C9
0021D7 1 31 D0 FE 28
0021DB 1 A9 00 48 A9 set_a $7f,0
0021DF 1 7F 28
0021E1 1 C1 26 cmp (ind1,x)
0021E3 1 08 C9 7F D0 tst_a $7f,fzc
0021E7 1 FE 68 48 C9
0021EB 1 33 D0 FE 28
0021EF 1 A9 00 48 A9 set_a $7e,0
0021F3 1 7E 28
0021F5 1 C1 26 cmp (ind1,x)
0021F7 1 08 C9 7E D0 tst_a $7e,fn
0021FB 1 FE 68 48 C9
0021FF 1 B0 D0 FE 28
002203 1 A9 FF 48 A9 set_a $80,$ff
002207 1 80 28
002209 1 C1 26 cmp (ind1,x)
00220B 1 08 C9 80 D0 tst_a $80,~fnz
00220F 1 FE 68 48 C9
002213 1 7D D0 FE 28
002217 1 A9 FF 48 A9 set_a $7f,$ff
00221B 1 7F 28
00221D 1 C1 26 cmp (ind1,x)
00221F 1 08 C9 7F D0 tst_a $7f,~fn
002223 1 FE 68 48 C9
002227 1 7F D0 FE 28
00222B 1 A9 FF 48 A9 set_a $7e,$ff
00222F 1 7E 28
002231 1 C1 26 cmp (ind1,x)
002233 1 08 C9 7E D0 tst_a $7e,~fzc
002237 1 FE 68 48 C9
00223B 1 FC D0 FE 28
00223F 1
00223F 1 A9 00 48 A9 set_a $80,0
002243 1 80 28
002245 1 D1 26 cmp (ind1),y
002247 1 08 C9 80 D0 tst_a $80,fc
00224B 1 FE 68 48 C9
00224F 1 31 D0 FE 28
002253 1 A9 00 48 A9 set_a $7f,0
002257 1 7F 28
002259 1 D1 26 cmp (ind1),y
00225B 1 08 C9 7F D0 tst_a $7f,fzc
00225F 1 FE 68 48 C9
002263 1 33 D0 FE 28
002267 1 A9 00 48 A9 set_a $7e,0
00226B 1 7E 28
00226D 1 D1 26 cmp (ind1),y
00226F 1 08 C9 7E D0 tst_a $7e,fn
002273 1 FE 68 48 C9
002277 1 B0 D0 FE 28
00227B 1 A9 FF 48 A9 set_a $80,$ff
00227F 1 80 28
002281 1 D1 26 cmp (ind1),y
002283 1 08 C9 80 D0 tst_a $80,~fnz
002287 1 FE 68 48 C9
00228B 1 7D D0 FE 28
00228F 1 A9 FF 48 A9 set_a $7f,$ff
002293 1 7F 28
002295 1 D1 26 cmp (ind1),y
002297 1 08 C9 7F D0 tst_a $7f,~fn
00229B 1 FE 68 48 C9
00229F 1 7F D0 FE 28
0022A3 1 A9 FF 48 A9 set_a $7e,$ff
0022A7 1 7E 28
0022A9 1 D1 26 cmp (ind1),y
0022AB 1 08 C9 7E D0 tst_a $7e,~fzc
0022AF 1 FE 68 48 C9
0022B3 1 FC D0 FE 28
0022B7 1 AD 00 02 C9 next_test
0022BB 1 1C D0 FE A9
0022BF 1 1D 8D 00 02
0022C3 1
0022C3 1 ; testing shifts - ASL LSR ROL ROR all addressing modes
0022C3 1 ; shifts - accumulator
0022C3 1 A2 05 ldx #5
0022C5 1 tasl:
0022C5 1 A9 00 48 B5 set_ax zps,0
0022C9 1 13 28
0022CB 1 0A asl a
0022CC 1 08 DD 21 02 tst_ax rASL,fASL,0
0022D0 1 D0 FE 68 49
0022D4 1 30 DD 39 02
0022DA 1 CA dex
0022DB 1 10 E8 bpl tasl
0022DD 1 A2 05 ldx #5
0022DF 1 tasl1:
0022DF 1 A9 FF 48 B5 set_ax zps,$ff
0022E3 1 13 28
0022E5 1 0A asl a
0022E6 1 08 DD 21 02 tst_ax rASL,fASL,$ff-fnzc
0022EA 1 D0 FE 68 49
0022EE 1 7C DD 39 02
0022F4 1 CA dex
0022F5 1 10 E8 bpl tasl1
0022F7 1
0022F7 1 A2 05 ldx #5
0022F9 1 tlsr:
0022F9 1 A9 00 48 B5 set_ax zps,0
0022FD 1 13 28
0022FF 1 4A lsr a
002300 1 08 DD 2D 02 tst_ax rLSR,fLSR,0
002304 1 D0 FE 68 49
002308 1 30 DD 45 02
00230E 1 CA dex
00230F 1 10 E8 bpl tlsr
002311 1 A2 05 ldx #5
002313 1 tlsr1:
002313 1 A9 FF 48 B5 set_ax zps,$ff
002317 1 13 28
002319 1 4A lsr a
00231A 1 08 DD 2D 02 tst_ax rLSR,fLSR,$ff-fnzc
00231E 1 D0 FE 68 49
002322 1 7C DD 45 02
002328 1 CA dex
002329 1 10 E8 bpl tlsr1
00232B 1
00232B 1 A2 05 ldx #5
00232D 1 trol:
00232D 1 A9 00 48 B5 set_ax zps,0
002331 1 13 28
002333 1 2A rol a
002334 1 08 DD 21 02 tst_ax rROL,fROL,0
002338 1 D0 FE 68 49
00233C 1 30 DD 39 02
002342 1 CA dex
002343 1 10 E8 bpl trol
002345 1 A2 05 ldx #5
002347 1 trol1:
002347 1 A9 FE 48 B5 set_ax zps,$ff-fc
00234B 1 13 28
00234D 1 2A rol a
00234E 1 08 DD 21 02 tst_ax rROL,fROL,$ff-fnzc
002352 1 D0 FE 68 49
002356 1 7C DD 39 02
00235C 1 CA dex
00235D 1 10 E8 bpl trol1
00235F 1
00235F 1 A2 05 ldx #5
002361 1 trolc:
002361 1 A9 01 48 B5 set_ax zps,fc
002365 1 13 28
002367 1 2A rol a
002368 1 08 DD 27 02 tst_ax rROLc,fROLc,0
00236C 1 D0 FE 68 49
002370 1 30 DD 3F 02
002376 1 CA dex
002377 1 10 E8 bpl trolc
002379 1 A2 05 ldx #5
00237B 1 trolc1:
00237B 1 A9 FF 48 B5 set_ax zps,$ff
00237F 1 13 28
002381 1 2A rol a
002382 1 08 DD 27 02 tst_ax rROLc,fROLc,$ff-fnzc
002386 1 D0 FE 68 49
00238A 1 7C DD 3F 02
002390 1 CA dex
002391 1 10 E8 bpl trolc1
002393 1
002393 1 A2 05 ldx #5
002395 1 tror:
002395 1 A9 00 48 B5 set_ax zps,0
002399 1 13 28
00239B 1 6A ror a
00239C 1 08 DD 2D 02 tst_ax rROR,fROR,0
0023A0 1 D0 FE 68 49
0023A4 1 30 DD 45 02
0023AA 1 CA dex
0023AB 1 10 E8 bpl tror
0023AD 1 A2 05 ldx #5
0023AF 1 tror1:
0023AF 1 A9 FE 48 B5 set_ax zps,$ff-fc
0023B3 1 13 28
0023B5 1 6A ror a
0023B6 1 08 DD 2D 02 tst_ax rROR,fROR,$ff-fnzc
0023BA 1 D0 FE 68 49
0023BE 1 7C DD 45 02
0023C4 1 CA dex
0023C5 1 10 E8 bpl tror1
0023C7 1
0023C7 1 A2 05 ldx #5
0023C9 1 trorc:
0023C9 1 A9 01 48 B5 set_ax zps,fc
0023CD 1 13 28
0023CF 1 6A ror a
0023D0 1 08 DD 33 02 tst_ax rRORc,fRORc,0
0023D4 1 D0 FE 68 49
0023D8 1 30 DD 4B 02
0023DE 1 CA dex
0023DF 1 10 E8 bpl trorc
0023E1 1 A2 05 ldx #5
0023E3 1 trorc1:
0023E3 1 A9 FF 48 B5 set_ax zps,$ff
0023E7 1 13 28
0023E9 1 6A ror a
0023EA 1 08 DD 33 02 tst_ax rRORc,fRORc,$ff-fnzc
0023EE 1 D0 FE 68 49
0023F2 1 7C DD 4B 02
0023F8 1 CA dex
0023F9 1 10 E8 bpl trorc1
0023FB 1 AD 00 02 C9 next_test
0023FF 1 1D D0 FE A9
002403 1 1E 8D 00 02
002407 1
002407 1 ; shifts - zeropage
002407 1 A2 05 ldx #5
002409 1 tasl2:
002409 1 A9 00 48 B5 set_z zps,0
00240D 1 13 85 0C 28
002411 1 06 0C asl zpt
002413 1 08 A5 0C DD tst_z rASL,fASL,0
002417 1 21 02 D0 FE
00241B 1 68 49 30 DD
002423 1 CA dex
002424 1 10 E3 bpl tasl2
002426 1 A2 05 ldx #5
002428 1 tasl3:
002428 1 A9 FF 48 B5 set_z zps,$ff
00242C 1 13 85 0C 28
002430 1 06 0C asl zpt
002432 1 08 A5 0C DD tst_z rASL,fASL,$ff-fnzc
002436 1 21 02 D0 FE
00243A 1 68 49 7C DD
002442 1 CA dex
002443 1 10 E3 bpl tasl3
002445 1
002445 1 A2 05 ldx #5
002447 1 tlsr2:
002447 1 A9 00 48 B5 set_z zps,0
00244B 1 13 85 0C 28
00244F 1 46 0C lsr zpt
002451 1 08 A5 0C DD tst_z rLSR,fLSR,0
002455 1 2D 02 D0 FE
002459 1 68 49 30 DD
002461 1 CA dex
002462 1 10 E3 bpl tlsr2
002464 1 A2 05 ldx #5
002466 1 tlsr3:
002466 1 A9 FF 48 B5 set_z zps,$ff
00246A 1 13 85 0C 28
00246E 1 46 0C lsr zpt
002470 1 08 A5 0C DD tst_z rLSR,fLSR,$ff-fnzc
002474 1 2D 02 D0 FE
002478 1 68 49 7C DD
002480 1 CA dex
002481 1 10 E3 bpl tlsr3
002483 1
002483 1 A2 05 ldx #5
002485 1 trol2:
002485 1 A9 00 48 B5 set_z zps,0
002489 1 13 85 0C 28
00248D 1 26 0C rol zpt
00248F 1 08 A5 0C DD tst_z rROL,fROL,0
002493 1 21 02 D0 FE
002497 1 68 49 30 DD
00249F 1 CA dex
0024A0 1 10 E3 bpl trol2
0024A2 1 A2 05 ldx #5
0024A4 1 trol3:
0024A4 1 A9 FE 48 B5 set_z zps,$ff-fc
0024A8 1 13 85 0C 28
0024AC 1 26 0C rol zpt
0024AE 1 08 A5 0C DD tst_z rROL,fROL,$ff-fnzc
0024B2 1 21 02 D0 FE
0024B6 1 68 49 7C DD
0024BE 1 CA dex
0024BF 1 10 E3 bpl trol3
0024C1 1
0024C1 1 A2 05 ldx #5
0024C3 1 trolc2:
0024C3 1 A9 01 48 B5 set_z zps,fc
0024C7 1 13 85 0C 28
0024CB 1 26 0C rol zpt
0024CD 1 08 A5 0C DD tst_z rROLc,fROLc,0
0024D1 1 27 02 D0 FE
0024D5 1 68 49 30 DD
0024DD 1 CA dex
0024DE 1 10 E3 bpl trolc2
0024E0 1 A2 05 ldx #5
0024E2 1 trolc3:
0024E2 1 A9 FF 48 B5 set_z zps,$ff
0024E6 1 13 85 0C 28
0024EA 1 26 0C rol zpt
0024EC 1 08 A5 0C DD tst_z rROLc,fROLc,$ff-fnzc
0024F0 1 27 02 D0 FE
0024F4 1 68 49 7C DD
0024FC 1 CA dex
0024FD 1 10 E3 bpl trolc3
0024FF 1
0024FF 1 A2 05 ldx #5
002501 1 tror2:
002501 1 A9 00 48 B5 set_z zps,0
002505 1 13 85 0C 28
002509 1 66 0C ror zpt
00250B 1 08 A5 0C DD tst_z rROR,fROR,0
00250F 1 2D 02 D0 FE
002513 1 68 49 30 DD
00251B 1 CA dex
00251C 1 10 E3 bpl tror2
00251E 1 A2 05 ldx #5
002520 1 tror3:
002520 1 A9 FE 48 B5 set_z zps,$ff-fc
002524 1 13 85 0C 28
002528 1 66 0C ror zpt
00252A 1 08 A5 0C DD tst_z rROR,fROR,$ff-fnzc
00252E 1 2D 02 D0 FE
002532 1 68 49 7C DD
00253A 1 CA dex
00253B 1 10 E3 bpl tror3
00253D 1
00253D 1 A2 05 ldx #5
00253F 1 trorc2:
00253F 1 A9 01 48 B5 set_z zps,fc
002543 1 13 85 0C 28
002547 1 66 0C ror zpt
002549 1 08 A5 0C DD tst_z rRORc,fRORc,0
00254D 1 33 02 D0 FE
002551 1 68 49 30 DD
002559 1 CA dex
00255A 1 10 E3 bpl trorc2
00255C 1 A2 05 ldx #5
00255E 1 trorc3:
00255E 1 A9 FF 48 B5 set_z zps,$ff
002562 1 13 85 0C 28
002566 1 66 0C ror zpt
002568 1 08 A5 0C DD tst_z rRORc,fRORc,$ff-fnzc
00256C 1 33 02 D0 FE
002570 1 68 49 7C DD
002578 1 CA dex
002579 1 10 E3 bpl trorc3
00257B 1 AD 00 02 C9 next_test
00257F 1 1E D0 FE A9
002583 1 1F 8D 00 02
002587 1
002587 1 ; shifts - absolute
002587 1 A2 05 ldx #5
002589 1 tasl4:
002589 1 A9 00 48 B5 set_abs zps,0
00258D 1 13 8D 03 02
002591 1 28
002592 1 0E 03 02 asl abst
002595 1 08 AD 03 02 tst_abs rASL,fASL,0
002599 1 DD 21 02 D0
00259D 1 FE 68 49 30
0025A6 1 CA dex
0025A7 1 10 E0 bpl tasl4
0025A9 1 A2 05 ldx #5
0025AB 1 tasl5:
0025AB 1 A9 FF 48 B5 set_abs zps,$ff
0025AF 1 13 8D 03 02
0025B3 1 28
0025B4 1 0E 03 02 asl abst
0025B7 1 08 AD 03 02 tst_abs rASL,fASL,$ff-fnzc
0025BB 1 DD 21 02 D0
0025BF 1 FE 68 49 7C
0025C8 1 CA dex
0025C9 1 10 E0 bpl tasl5
0025CB 1
0025CB 1 A2 05 ldx #5
0025CD 1 tlsr4:
0025CD 1 A9 00 48 B5 set_abs zps,0
0025D1 1 13 8D 03 02
0025D5 1 28
0025D6 1 4E 03 02 lsr abst
0025D9 1 08 AD 03 02 tst_abs rLSR,fLSR,0
0025DD 1 DD 2D 02 D0
0025E1 1 FE 68 49 30
0025EA 1 CA dex
0025EB 1 10 E0 bpl tlsr4
0025ED 1 A2 05 ldx #5
0025EF 1 tlsr5:
0025EF 1 A9 FF 48 B5 set_abs zps,$ff
0025F3 1 13 8D 03 02
0025F7 1 28
0025F8 1 4E 03 02 lsr abst
0025FB 1 08 AD 03 02 tst_abs rLSR,fLSR,$ff-fnzc
0025FF 1 DD 2D 02 D0
002603 1 FE 68 49 7C
00260C 1 CA dex
00260D 1 10 E0 bpl tlsr5
00260F 1
00260F 1 A2 05 ldx #5
002611 1 trol4:
002611 1 A9 00 48 B5 set_abs zps,0
002615 1 13 8D 03 02
002619 1 28
00261A 1 2E 03 02 rol abst
00261D 1 08 AD 03 02 tst_abs rROL,fROL,0
002621 1 DD 21 02 D0
002625 1 FE 68 49 30
00262E 1 CA dex
00262F 1 10 E0 bpl trol4
002631 1 A2 05 ldx #5
002633 1 trol5:
002633 1 A9 FE 48 B5 set_abs zps,$ff-fc
002637 1 13 8D 03 02
00263B 1 28
00263C 1 2E 03 02 rol abst
00263F 1 08 AD 03 02 tst_abs rROL,fROL,$ff-fnzc
002643 1 DD 21 02 D0
002647 1 FE 68 49 7C
002650 1 CA dex
002651 1 10 E0 bpl trol5
002653 1
002653 1 A2 05 ldx #5
002655 1 trolc4:
002655 1 A9 01 48 B5 set_abs zps,fc
002659 1 13 8D 03 02
00265D 1 28
00265E 1 2E 03 02 rol abst
002661 1 08 AD 03 02 tst_abs rROLc,fROLc,0
002665 1 DD 27 02 D0
002669 1 FE 68 49 30
002672 1 CA dex
002673 1 10 E0 bpl trolc4
002675 1 A2 05 ldx #5
002677 1 trolc5:
002677 1 A9 FF 48 B5 set_abs zps,$ff
00267B 1 13 8D 03 02
00267F 1 28
002680 1 2E 03 02 rol abst
002683 1 08 AD 03 02 tst_abs rROLc,fROLc,$ff-fnzc
002687 1 DD 27 02 D0
00268B 1 FE 68 49 7C
002694 1 CA dex
002695 1 10 E0 bpl trolc5
002697 1
002697 1 A2 05 ldx #5
002699 1 tror4:
002699 1 A9 00 48 B5 set_abs zps,0
00269D 1 13 8D 03 02
0026A1 1 28
0026A2 1 6E 03 02 ror abst
0026A5 1 08 AD 03 02 tst_abs rROR,fROR,0
0026A9 1 DD 2D 02 D0
0026AD 1 FE 68 49 30
0026B6 1 CA dex
0026B7 1 10 E0 bpl tror4
0026B9 1 A2 05 ldx #5
0026BB 1 tror5:
0026BB 1 A9 FE 48 B5 set_abs zps,$ff-fc
0026BF 1 13 8D 03 02
0026C3 1 28
0026C4 1 6E 03 02 ror abst
0026C7 1 08 AD 03 02 tst_abs rROR,fROR,$ff-fnzc
0026CB 1 DD 2D 02 D0
0026CF 1 FE 68 49 7C
0026D8 1 CA dex
0026D9 1 10 E0 bpl tror5
0026DB 1
0026DB 1 A2 05 ldx #5
0026DD 1 trorc4:
0026DD 1 A9 01 48 B5 set_abs zps,fc
0026E1 1 13 8D 03 02
0026E5 1 28
0026E6 1 6E 03 02 ror abst
0026E9 1 08 AD 03 02 tst_abs rRORc,fRORc,0
0026ED 1 DD 33 02 D0
0026F1 1 FE 68 49 30
0026FA 1 CA dex
0026FB 1 10 E0 bpl trorc4
0026FD 1 A2 05 ldx #5
0026FF 1 trorc5:
0026FF 1 A9 FF 48 B5 set_abs zps,$ff
002703 1 13 8D 03 02
002707 1 28
002708 1 6E 03 02 ror abst
00270B 1 08 AD 03 02 tst_abs rRORc,fRORc,$ff-fnzc
00270F 1 DD 33 02 D0
002713 1 FE 68 49 7C
00271C 1 CA dex
00271D 1 10 E0 bpl trorc5
00271F 1 AD 00 02 C9 next_test
002723 1 1F D0 FE A9
002727 1 20 8D 00 02
00272B 1
00272B 1 ; shifts - zp indexed
00272B 1 A2 05 ldx #5
00272D 1 tasl6:
00272D 1 A9 00 48 B5 set_zx zps,0
002731 1 13 95 0C 28
002735 1 16 0C asl zpt,x
002737 1 08 B5 0C DD tst_zx rASL,fASL,0
00273B 1 21 02 D0 FE
00273F 1 68 49 30 DD
002747 1 CA dex
002748 1 10 E3 bpl tasl6
00274A 1 A2 05 ldx #5
00274C 1 tasl7:
00274C 1 A9 FF 48 B5 set_zx zps,$ff
002750 1 13 95 0C 28
002754 1 16 0C asl zpt,x
002756 1 08 B5 0C DD tst_zx rASL,fASL,$ff-fnzc
00275A 1 21 02 D0 FE
00275E 1 68 49 7C DD
002766 1 CA dex
002767 1 10 E3 bpl tasl7
002769 1
002769 1 A2 05 ldx #5
00276B 1 tlsr6:
00276B 1 A9 00 48 B5 set_zx zps,0
00276F 1 13 95 0C 28
002773 1 56 0C lsr zpt,x
002775 1 08 B5 0C DD tst_zx rLSR,fLSR,0
002779 1 2D 02 D0 FE
00277D 1 68 49 30 DD
002785 1 CA dex
002786 1 10 E3 bpl tlsr6
002788 1 A2 05 ldx #5
00278A 1 tlsr7:
00278A 1 A9 FF 48 B5 set_zx zps,$ff
00278E 1 13 95 0C 28
002792 1 56 0C lsr zpt,x
002794 1 08 B5 0C DD tst_zx rLSR,fLSR,$ff-fnzc
002798 1 2D 02 D0 FE
00279C 1 68 49 7C DD
0027A4 1 CA dex
0027A5 1 10 E3 bpl tlsr7
0027A7 1
0027A7 1 A2 05 ldx #5
0027A9 1 trol6:
0027A9 1 A9 00 48 B5 set_zx zps,0
0027AD 1 13 95 0C 28
0027B1 1 36 0C rol zpt,x
0027B3 1 08 B5 0C DD tst_zx rROL,fROL,0
0027B7 1 21 02 D0 FE
0027BB 1 68 49 30 DD
0027C3 1 CA dex
0027C4 1 10 E3 bpl trol6
0027C6 1 A2 05 ldx #5
0027C8 1 trol7:
0027C8 1 A9 FE 48 B5 set_zx zps,$ff-fc
0027CC 1 13 95 0C 28
0027D0 1 36 0C rol zpt,x
0027D2 1 08 B5 0C DD tst_zx rROL,fROL,$ff-fnzc
0027D6 1 21 02 D0 FE
0027DA 1 68 49 7C DD
0027E2 1 CA dex
0027E3 1 10 E3 bpl trol7
0027E5 1
0027E5 1 A2 05 ldx #5
0027E7 1 trolc6:
0027E7 1 A9 01 48 B5 set_zx zps,fc
0027EB 1 13 95 0C 28
0027EF 1 36 0C rol zpt,x
0027F1 1 08 B5 0C DD tst_zx rROLc,fROLc,0
0027F5 1 27 02 D0 FE
0027F9 1 68 49 30 DD
002801 1 CA dex
002802 1 10 E3 bpl trolc6
002804 1 A2 05 ldx #5
002806 1 trolc7:
002806 1 A9 FF 48 B5 set_zx zps,$ff
00280A 1 13 95 0C 28
00280E 1 36 0C rol zpt,x
002810 1 08 B5 0C DD tst_zx rROLc,fROLc,$ff-fnzc
002814 1 27 02 D0 FE
002818 1 68 49 7C DD
002820 1 CA dex
002821 1 10 E3 bpl trolc7
002823 1
002823 1 A2 05 ldx #5
002825 1 tror6:
002825 1 A9 00 48 B5 set_zx zps,0
002829 1 13 95 0C 28
00282D 1 76 0C ror zpt,x
00282F 1 08 B5 0C DD tst_zx rROR,fROR,0
002833 1 2D 02 D0 FE
002837 1 68 49 30 DD
00283F 1 CA dex
002840 1 10 E3 bpl tror6
002842 1 A2 05 ldx #5
002844 1 tror7:
002844 1 A9 FE 48 B5 set_zx zps,$ff-fc
002848 1 13 95 0C 28
00284C 1 76 0C ror zpt,x
00284E 1 08 B5 0C DD tst_zx rROR,fROR,$ff-fnzc
002852 1 2D 02 D0 FE
002856 1 68 49 7C DD
00285E 1 CA dex
00285F 1 10 E3 bpl tror7
002861 1
002861 1 A2 05 ldx #5
002863 1 trorc6:
002863 1 A9 01 48 B5 set_zx zps,fc
002867 1 13 95 0C 28
00286B 1 76 0C ror zpt,x
00286D 1 08 B5 0C DD tst_zx rRORc,fRORc,0
002871 1 33 02 D0 FE
002875 1 68 49 30 DD
00287D 1 CA dex
00287E 1 10 E3 bpl trorc6
002880 1 A2 05 ldx #5
002882 1 trorc7:
002882 1 A9 FF 48 B5 set_zx zps,$ff
002886 1 13 95 0C 28
00288A 1 76 0C ror zpt,x
00288C 1 08 B5 0C DD tst_zx rRORc,fRORc,$ff-fnzc
002890 1 33 02 D0 FE
002894 1 68 49 7C DD
00289C 1 CA dex
00289D 1 10 E3 bpl trorc7
00289F 1 AD 00 02 C9 next_test
0028A3 1 20 D0 FE A9
0028A7 1 21 8D 00 02
0028AB 1
0028AB 1 ; shifts - abs indexed
0028AB 1 A2 05 ldx #5
0028AD 1 tasl8:
0028AD 1 A9 00 48 B5 set_absx zps,0
0028B1 1 13 9D 03 02
0028B5 1 28
0028B6 1 1E 03 02 asl abst,x
0028B9 1 08 BD 03 02 tst_absx rASL,fASL,0
0028BD 1 DD 21 02 D0
0028C1 1 FE 68 49 30
0028CA 1 CA dex
0028CB 1 10 E0 bpl tasl8
0028CD 1 A2 05 ldx #5
0028CF 1 tasl9:
0028CF 1 A9 FF 48 B5 set_absx zps,$ff
0028D3 1 13 9D 03 02
0028D7 1 28
0028D8 1 1E 03 02 asl abst,x
0028DB 1 08 BD 03 02 tst_absx rASL,fASL,$ff-fnzc
0028DF 1 DD 21 02 D0
0028E3 1 FE 68 49 7C
0028EC 1 CA dex
0028ED 1 10 E0 bpl tasl9
0028EF 1
0028EF 1 A2 05 ldx #5
0028F1 1 tlsr8:
0028F1 1 A9 00 48 B5 set_absx zps,0
0028F5 1 13 9D 03 02
0028F9 1 28
0028FA 1 5E 03 02 lsr abst,x
0028FD 1 08 BD 03 02 tst_absx rLSR,fLSR,0
002901 1 DD 2D 02 D0
002905 1 FE 68 49 30
00290E 1 CA dex
00290F 1 10 E0 bpl tlsr8
002911 1 A2 05 ldx #5
002913 1 tlsr9:
002913 1 A9 FF 48 B5 set_absx zps,$ff
002917 1 13 9D 03 02
00291B 1 28
00291C 1 5E 03 02 lsr abst,x
00291F 1 08 BD 03 02 tst_absx rLSR,fLSR,$ff-fnzc
002923 1 DD 2D 02 D0
002927 1 FE 68 49 7C
002930 1 CA dex
002931 1 10 E0 bpl tlsr9
002933 1
002933 1 A2 05 ldx #5
002935 1 trol8:
002935 1 A9 00 48 B5 set_absx zps,0
002939 1 13 9D 03 02
00293D 1 28
00293E 1 3E 03 02 rol abst,x
002941 1 08 BD 03 02 tst_absx rROL,fROL,0
002945 1 DD 21 02 D0
002949 1 FE 68 49 30
002952 1 CA dex
002953 1 10 E0 bpl trol8
002955 1 A2 05 ldx #5
002957 1 trol9:
002957 1 A9 FE 48 B5 set_absx zps,$ff-fc
00295B 1 13 9D 03 02
00295F 1 28
002960 1 3E 03 02 rol abst,x
002963 1 08 BD 03 02 tst_absx rROL,fROL,$ff-fnzc
002967 1 DD 21 02 D0
00296B 1 FE 68 49 7C
002974 1 CA dex
002975 1 10 E0 bpl trol9
002977 1
002977 1 A2 05 ldx #5
002979 1 trolc8:
002979 1 A9 01 48 B5 set_absx zps,fc
00297D 1 13 9D 03 02
002981 1 28
002982 1 3E 03 02 rol abst,x
002985 1 08 BD 03 02 tst_absx rROLc,fROLc,0
002989 1 DD 27 02 D0
00298D 1 FE 68 49 30
002996 1 CA dex
002997 1 10 E0 bpl trolc8
002999 1 A2 05 ldx #5
00299B 1 trolc9:
00299B 1 A9 FF 48 B5 set_absx zps,$ff
00299F 1 13 9D 03 02
0029A3 1 28
0029A4 1 3E 03 02 rol abst,x
0029A7 1 08 BD 03 02 tst_absx rROLc,fROLc,$ff-fnzc
0029AB 1 DD 27 02 D0
0029AF 1 FE 68 49 7C
0029B8 1 CA dex
0029B9 1 10 E0 bpl trolc9
0029BB 1
0029BB 1 A2 05 ldx #5
0029BD 1 tror8:
0029BD 1 A9 00 48 B5 set_absx zps,0
0029C1 1 13 9D 03 02
0029C5 1 28
0029C6 1 7E 03 02 ror abst,x
0029C9 1 08 BD 03 02 tst_absx rROR,fROR,0
0029CD 1 DD 2D 02 D0
0029D1 1 FE 68 49 30
0029DA 1 CA dex
0029DB 1 10 E0 bpl tror8
0029DD 1 A2 05 ldx #5
0029DF 1 tror9:
0029DF 1 A9 FE 48 B5 set_absx zps,$ff-fc
0029E3 1 13 9D 03 02
0029E7 1 28
0029E8 1 7E 03 02 ror abst,x
0029EB 1 08 BD 03 02 tst_absx rROR,fROR,$ff-fnzc
0029EF 1 DD 2D 02 D0
0029F3 1 FE 68 49 7C
0029FC 1 CA dex
0029FD 1 10 E0 bpl tror9
0029FF 1
0029FF 1 A2 05 ldx #5
002A01 1 trorc8:
002A01 1 A9 01 48 B5 set_absx zps,fc
002A05 1 13 9D 03 02
002A09 1 28
002A0A 1 7E 03 02 ror abst,x
002A0D 1 08 BD 03 02 tst_absx rRORc,fRORc,0
002A11 1 DD 33 02 D0
002A15 1 FE 68 49 30
002A1E 1 CA dex
002A1F 1 10 E0 bpl trorc8
002A21 1 A2 05 ldx #5
002A23 1 trorc9:
002A23 1 A9 FF 48 B5 set_absx zps,$ff
002A27 1 13 9D 03 02
002A2B 1 28
002A2C 1 7E 03 02 ror abst,x
002A2F 1 08 BD 03 02 tst_absx rRORc,fRORc,$ff-fnzc
002A33 1 DD 33 02 D0
002A37 1 FE 68 49 7C
002A40 1 CA dex
002A41 1 10 E0 bpl trorc9
002A43 1 AD 00 02 C9 next_test
002A47 1 21 D0 FE A9
002A4B 1 22 8D 00 02
002A4F 1
002A4F 1 ; testing memory increment/decrement - INC DEC all addressing modes
002A4F 1 ; zeropage
002A4F 1 A2 00 ldx #0
002A51 1 A9 7E lda #$7e
002A53 1 85 0C sta zpt
002A55 1 tinc:
002A55 1 A9 00 48 28 set_stat 0
002A59 1 E6 0C inc zpt
002A5B 1 08 A5 0C DD tst_z rINC,fINC,0
002A5F 1 51 02 D0 FE
002A63 1 68 49 30 DD
002A6B 1 E8 inx
002A6C 1 E0 02 cpx #2
002A6E 1 D0 04 bne tinc1
002A70 1 A9 FE lda #$fe
002A72 1 85 0C sta zpt
002A74 1 E0 05 tinc1: cpx #5
002A76 1 D0 DD bne tinc
002A78 1 CA dex
002A79 1 E6 0C inc zpt
002A7B 1 tdec:
002A7B 1 A9 00 48 28 set_stat 0
002A7F 1 C6 0C dec zpt
002A81 1 08 A5 0C DD tst_z rINC,fINC,0
002A85 1 51 02 D0 FE
002A89 1 68 49 30 DD
002A91 1 CA dex
002A92 1 30 0A bmi tdec1
002A94 1 E0 01 cpx #1
002A96 1 D0 E3 bne tdec
002A98 1 A9 81 lda #$81
002A9A 1 85 0C sta zpt
002A9C 1 D0 DD bne tdec
002A9E 1 tdec1:
002A9E 1 A2 00 ldx #0
002AA0 1 A9 7E lda #$7e
002AA2 1 85 0C sta zpt
002AA4 1 tinc10:
002AA4 1 A9 FF 48 28 set_stat $ff
002AA8 1 E6 0C inc zpt
002AAA 1 08 A5 0C DD tst_z rINC,fINC,$ff-fnz
002AAE 1 51 02 D0 FE
002AB2 1 68 49 7D DD
002ABA 1 E8 inx
002ABB 1 E0 02 cpx #2
002ABD 1 D0 04 bne tinc11
002ABF 1 A9 FE lda #$fe
002AC1 1 85 0C sta zpt
002AC3 1 E0 05 tinc11: cpx #5
002AC5 1 D0 DD bne tinc10
002AC7 1 CA dex
002AC8 1 E6 0C inc zpt
002ACA 1 tdec10:
002ACA 1 A9 FF 48 28 set_stat $ff
002ACE 1 C6 0C dec zpt
002AD0 1 08 A5 0C DD tst_z rINC,fINC,$ff-fnz
002AD4 1 51 02 D0 FE
002AD8 1 68 49 7D DD
002AE0 1 CA dex
002AE1 1 30 0A bmi tdec11
002AE3 1 E0 01 cpx #1
002AE5 1 D0 E3 bne tdec10
002AE7 1 A9 81 lda #$81
002AE9 1 85 0C sta zpt
002AEB 1 D0 DD bne tdec10
002AED 1 tdec11:
002AED 1 AD 00 02 C9 next_test
002AF1 1 22 D0 FE A9
002AF5 1 23 8D 00 02
002AF9 1
002AF9 1 ; absolute memory
002AF9 1 A2 00 ldx #0
002AFB 1 A9 7E lda #$7e
002AFD 1 8D 03 02 sta abst
002B00 1 tinc2:
002B00 1 A9 00 48 28 set_stat 0
002B04 1 EE 03 02 inc abst
002B07 1 08 AD 03 02 tst_abs rINC,fINC,0
002B0B 1 DD 51 02 D0
002B0F 1 FE 68 49 30
002B18 1 E8 inx
002B19 1 E0 02 cpx #2
002B1B 1 D0 05 bne tinc3
002B1D 1 A9 FE lda #$fe
002B1F 1 8D 03 02 sta abst
002B22 1 E0 05 tinc3: cpx #5
002B24 1 D0 DA bne tinc2
002B26 1 CA dex
002B27 1 EE 03 02 inc abst
002B2A 1 tdec2:
002B2A 1 A9 00 48 28 set_stat 0
002B2E 1 CE 03 02 dec abst
002B31 1 08 AD 03 02 tst_abs rINC,fINC,0
002B35 1 DD 51 02 D0
002B39 1 FE 68 49 30
002B42 1 CA dex
002B43 1 30 0B bmi tdec3
002B45 1 E0 01 cpx #1
002B47 1 D0 E1 bne tdec2
002B49 1 A9 81 lda #$81
002B4B 1 8D 03 02 sta abst
002B4E 1 D0 DA bne tdec2
002B50 1 tdec3:
002B50 1 A2 00 ldx #0
002B52 1 A9 7E lda #$7e
002B54 1 8D 03 02 sta abst
002B57 1 tinc12:
002B57 1 A9 FF 48 28 set_stat $ff
002B5B 1 EE 03 02 inc abst
002B5E 1 08 AD 03 02 tst_abs rINC,fINC,$ff-fnz
002B62 1 DD 51 02 D0
002B66 1 FE 68 49 7D
002B6F 1 E8 inx
002B70 1 E0 02 cpx #2
002B72 1 D0 05 bne tinc13
002B74 1 A9 FE lda #$fe
002B76 1 8D 03 02 sta abst
002B79 1 E0 05 tinc13: cpx #5
002B7B 1 D0 DA bne tinc12
002B7D 1 CA dex
002B7E 1 EE 03 02 inc abst
002B81 1 tdec12:
002B81 1 A9 FF 48 28 set_stat $ff
002B85 1 CE 03 02 dec abst
002B88 1 08 AD 03 02 tst_abs rINC,fINC,$ff-fnz
002B8C 1 DD 51 02 D0
002B90 1 FE 68 49 7D
002B99 1 CA dex
002B9A 1 30 0B bmi tdec13
002B9C 1 E0 01 cpx #1
002B9E 1 D0 E1 bne tdec12
002BA0 1 A9 81 lda #$81
002BA2 1 8D 03 02 sta abst
002BA5 1 D0 DA bne tdec12
002BA7 1 tdec13:
002BA7 1 AD 00 02 C9 next_test
002BAB 1 23 D0 FE A9
002BAF 1 24 8D 00 02
002BB3 1
002BB3 1 ; zeropage indexed
002BB3 1 A2 00 ldx #0
002BB5 1 A9 7E lda #$7e
002BB7 1 95 0C tinc4: sta zpt,x
002BB9 1 A9 00 48 28 set_stat 0
002BBD 1 F6 0C inc zpt,x
002BBF 1 08 B5 0C DD tst_zx rINC,fINC,0
002BC3 1 51 02 D0 FE
002BC7 1 68 49 30 DD
002BCF 1 B5 0C lda zpt,x
002BD1 1 E8 inx
002BD2 1 E0 02 cpx #2
002BD4 1 D0 02 bne tinc5
002BD6 1 A9 FE lda #$fe
002BD8 1 E0 05 tinc5: cpx #5
002BDA 1 D0 DB bne tinc4
002BDC 1 CA dex
002BDD 1 A9 02 lda #2
002BDF 1 95 0C tdec4: sta zpt,x
002BE1 1 A9 00 48 28 set_stat 0
002BE5 1 D6 0C dec zpt,x
002BE7 1 08 B5 0C DD tst_zx rINC,fINC,0
002BEB 1 51 02 D0 FE
002BEF 1 68 49 30 DD
002BF7 1 B5 0C lda zpt,x
002BF9 1 CA dex
002BFA 1 30 08 bmi tdec5
002BFC 1 E0 01 cpx #1
002BFE 1 D0 DF bne tdec4
002C00 1 A9 81 lda #$81
002C02 1 D0 DB bne tdec4
002C04 1 tdec5:
002C04 1 A2 00 ldx #0
002C06 1 A9 7E lda #$7e
002C08 1 95 0C tinc14: sta zpt,x
002C0A 1 A9 FF 48 28 set_stat $ff
002C0E 1 F6 0C inc zpt,x
002C10 1 08 B5 0C DD tst_zx rINC,fINC,$ff-fnz
002C14 1 51 02 D0 FE
002C18 1 68 49 7D DD
002C20 1 B5 0C lda zpt,x
002C22 1 E8 inx
002C23 1 E0 02 cpx #2
002C25 1 D0 02 bne tinc15
002C27 1 A9 FE lda #$fe
002C29 1 E0 05 tinc15: cpx #5
002C2B 1 D0 DB bne tinc14
002C2D 1 CA dex
002C2E 1 A9 02 lda #2
002C30 1 95 0C tdec14: sta zpt,x
002C32 1 A9 FF 48 28 set_stat $ff
002C36 1 D6 0C dec zpt,x
002C38 1 08 B5 0C DD tst_zx rINC,fINC,$ff-fnz
002C3C 1 51 02 D0 FE
002C40 1 68 49 7D DD
002C48 1 B5 0C lda zpt,x
002C4A 1 CA dex
002C4B 1 30 08 bmi tdec15
002C4D 1 E0 01 cpx #1
002C4F 1 D0 DF bne tdec14
002C51 1 A9 81 lda #$81
002C53 1 D0 DB bne tdec14
002C55 1 tdec15:
002C55 1 AD 00 02 C9 next_test
002C59 1 24 D0 FE A9
002C5D 1 25 8D 00 02
002C61 1
002C61 1 ; memory indexed
002C61 1 A2 00 ldx #0
002C63 1 A9 7E lda #$7e
002C65 1 9D 03 02 tinc6: sta abst,x
002C68 1 A9 00 48 28 set_stat 0
002C6C 1 FE 03 02 inc abst,x
002C6F 1 08 BD 03 02 tst_absx rINC,fINC,0
002C73 1 DD 51 02 D0
002C77 1 FE 68 49 30
002C80 1 BD 03 02 lda abst,x
002C83 1 E8 inx
002C84 1 E0 02 cpx #2
002C86 1 D0 02 bne tinc7
002C88 1 A9 FE lda #$fe
002C8A 1 E0 05 tinc7: cpx #5
002C8C 1 D0 D7 bne tinc6
002C8E 1 CA dex
002C8F 1 A9 02 lda #2
002C91 1 9D 03 02 tdec6: sta abst,x
002C94 1 A9 00 48 28 set_stat 0
002C98 1 DE 03 02 dec abst,x
002C9B 1 08 BD 03 02 tst_absx rINC,fINC,0
002C9F 1 DD 51 02 D0
002CA3 1 FE 68 49 30
002CAC 1 BD 03 02 lda abst,x
002CAF 1 CA dex
002CB0 1 30 08 bmi tdec7
002CB2 1 E0 01 cpx #1
002CB4 1 D0 DB bne tdec6
002CB6 1 A9 81 lda #$81
002CB8 1 D0 D7 bne tdec6
002CBA 1 tdec7:
002CBA 1 A2 00 ldx #0
002CBC 1 A9 7E lda #$7e
002CBE 1 9D 03 02 tinc16: sta abst,x
002CC1 1 A9 FF 48 28 set_stat $ff
002CC5 1 FE 03 02 inc abst,x
002CC8 1 08 BD 03 02 tst_absx rINC,fINC,$ff-fnz
002CCC 1 DD 51 02 D0
002CD0 1 FE 68 49 7D
002CD9 1 BD 03 02 lda abst,x
002CDC 1 E8 inx
002CDD 1 E0 02 cpx #2
002CDF 1 D0 02 bne tinc17
002CE1 1 A9 FE lda #$fe
002CE3 1 E0 05 tinc17: cpx #5
002CE5 1 D0 D7 bne tinc16
002CE7 1 CA dex
002CE8 1 A9 02 lda #2
002CEA 1 9D 03 02 tdec16: sta abst,x
002CED 1 A9 FF 48 28 set_stat $ff
002CF1 1 DE 03 02 dec abst,x
002CF4 1 08 BD 03 02 tst_absx rINC,fINC,$ff-fnz
002CF8 1 DD 51 02 D0
002CFC 1 FE 68 49 7D
002D05 1 BD 03 02 lda abst,x
002D08 1 CA dex
002D09 1 30 08 bmi tdec17
002D0B 1 E0 01 cpx #1
002D0D 1 D0 DB bne tdec16
002D0F 1 A9 81 lda #$81
002D11 1 D0 D7 bne tdec16
002D13 1 tdec17:
002D13 1 AD 00 02 C9 next_test
002D17 1 25 D0 FE A9
002D1B 1 26 8D 00 02
002D1F 1
002D1F 1 ; testing logical instructions - AND EOR ORA all addressing modes
002D1F 1 ; AND
002D1F 1 A2 03 ldx #3 ;immediate
002D21 1 B5 1E tand: lda zpAN,x
002D23 1 8D 0A 02 sta ex_andi+1 ;set AND # operand
002D26 1 A9 00 48 BD set_ax absANa,0
002D2A 1 6B 02 28
002D2D 1 20 09 02 jsr ex_andi ;execute AND # in RAM
002D30 1 08 DD 73 02 tst_ax absrlo,absflo,0
002D34 1 D0 FE 68 49
002D38 1 30 DD 77 02
002D3E 1 CA dex
002D3F 1 10 E0 bpl tand
002D41 1 A2 03 ldx #3
002D43 1 B5 1E tand1: lda zpAN,x
002D45 1 8D 0A 02 sta ex_andi+1 ;set AND # operand
002D48 1 A9 FF 48 BD set_ax absANa,$ff
002D4C 1 6B 02 28
002D4F 1 20 09 02 jsr ex_andi ;execute AND # in RAM
002D52 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002D56 1 D0 FE 68 49
002D5A 1 7D DD 77 02
002D60 1 CA dex
002D61 1 10 E0 bpl tand1
002D63 1
002D63 1 A2 03 ldx #3 ;zp
002D65 1 B5 1E tand2: lda zpAN,x
002D67 1 85 0C sta zpt
002D69 1 A9 00 48 BD set_ax absANa,0
002D6D 1 6B 02 28
002D70 1 25 0C and zpt
002D72 1 08 DD 73 02 tst_ax absrlo,absflo,0
002D76 1 D0 FE 68 49
002D7A 1 30 DD 77 02
002D80 1 CA dex
002D81 1 10 E2 bpl tand2
002D83 1 A2 03 ldx #3
002D85 1 B5 1E tand3: lda zpAN,x
002D87 1 85 0C sta zpt
002D89 1 A9 FF 48 BD set_ax absANa,$ff
002D8D 1 6B 02 28
002D90 1 25 0C and zpt
002D92 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002D96 1 D0 FE 68 49
002D9A 1 7D DD 77 02
002DA0 1 CA dex
002DA1 1 10 E2 bpl tand3
002DA3 1
002DA3 1 A2 03 ldx #3 ;abs
002DA5 1 B5 1E tand4: lda zpAN,x
002DA7 1 8D 03 02 sta abst
002DAA 1 A9 00 48 BD set_ax absANa,0
002DAE 1 6B 02 28
002DB1 1 2D 03 02 and abst
002DB4 1 08 DD 73 02 tst_ax absrlo,absflo,0
002DB8 1 D0 FE 68 49
002DBC 1 30 DD 77 02
002DC2 1 CA dex
002DC3 1 10 E0 bpl tand4
002DC5 1 A2 03 ldx #3
002DC7 1 B5 1E tand5: lda zpAN,x
002DC9 1 8D 03 02 sta abst
002DCC 1 A9 FF 48 BD set_ax absANa,$ff
002DD0 1 6B 02 28
002DD3 1 2D 03 02 and abst
002DD6 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002DDA 1 D0 FE 68 49
002DDE 1 7D DD 77 02
002DE4 1 CA dex
002DE5 1 10 02 bpl tand6
002DE7 1
002DE7 1 A2 03 ldx #3 ;zp,x
002DE9 1 tand6:
002DE9 1 A9 00 48 BD set_ax absANa,0
002DED 1 6B 02 28
002DF0 1 35 1E and zpAN,x
002DF2 1 08 DD 73 02 tst_ax absrlo,absflo,0
002DF6 1 D0 FE 68 49
002DFA 1 30 DD 77 02
002E00 1 CA dex
002E01 1 10 E6 bpl tand6
002E03 1 A2 03 ldx #3
002E05 1 tand7:
002E05 1 A9 FF 48 BD set_ax absANa,$ff
002E09 1 6B 02 28
002E0C 1 35 1E and zpAN,x
002E0E 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002E12 1 D0 FE 68 49
002E16 1 7D DD 77 02
002E1C 1 CA dex
002E1D 1 10 E6 bpl tand7
002E1F 1
002E1F 1 A2 03 ldx #3 ;abs,x
002E21 1 tand8:
002E21 1 A9 00 48 BD set_ax absANa,0
002E25 1 6B 02 28
002E28 1 3D 5F 02 and absAN,x
002E2B 1 08 DD 73 02 tst_ax absrlo,absflo,0
002E2F 1 D0 FE 68 49
002E33 1 30 DD 77 02
002E39 1 CA dex
002E3A 1 10 E5 bpl tand8
002E3C 1 A2 03 ldx #3
002E3E 1 tand9:
002E3E 1 A9 FF 48 BD set_ax absANa,$ff
002E42 1 6B 02 28
002E45 1 3D 5F 02 and absAN,x
002E48 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002E4C 1 D0 FE 68 49
002E50 1 7D DD 77 02
002E56 1 CA dex
002E57 1 10 E5 bpl tand9
002E59 1
002E59 1 A0 03 ldy #3 ;abs,y
002E5B 1 tand10:
002E5B 1 A9 00 48 B9 set_ay absANa,0
002E5F 1 6B 02 28
002E62 1 39 5F 02 and absAN,y
002E65 1 08 D9 73 02 tst_ay absrlo,absflo,0
002E69 1 D0 FE 68 49
002E6D 1 30 D9 77 02
002E73 1 88 dey
002E74 1 10 E5 bpl tand10
002E76 1 A0 03 ldy #3
002E78 1 tand11:
002E78 1 A9 FF 48 B9 set_ay absANa,$ff
002E7C 1 6B 02 28
002E7F 1 39 5F 02 and absAN,y
002E82 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
002E86 1 D0 FE 68 49
002E8A 1 7D D9 77 02
002E90 1 88 dey
002E91 1 10 E5 bpl tand11
002E93 1
002E93 1 A2 06 ldx #6 ;(zp,x)
002E95 1 A0 03 ldy #3
002E97 1 tand12:
002E97 1 A9 00 48 B9 set_ay absANa,0
002E9B 1 6B 02 28
002E9E 1 21 3C and (indAN,x)
002EA0 1 08 D9 73 02 tst_ay absrlo,absflo,0
002EA4 1 D0 FE 68 49
002EA8 1 30 D9 77 02
002EAE 1 CA dex
002EAF 1 CA dex
002EB0 1 88 dey
002EB1 1 10 E4 bpl tand12
002EB3 1 A2 06 ldx #6
002EB5 1 A0 03 ldy #3
002EB7 1 tand13:
002EB7 1 A9 FF 48 B9 set_ay absANa,$ff
002EBB 1 6B 02 28
002EBE 1 21 3C and (indAN,x)
002EC0 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
002EC4 1 D0 FE 68 49
002EC8 1 7D D9 77 02
002ECE 1 CA dex
002ECF 1 CA dex
002ED0 1 88 dey
002ED1 1 10 E4 bpl tand13
002ED3 1
002ED3 1 A0 03 ldy #3 ;(zp),y
002ED5 1 tand14:
002ED5 1 A9 00 48 B9 set_ay absANa,0
002ED9 1 6B 02 28
002EDC 1 31 3C and (indAN),y
002EDE 1 08 D9 73 02 tst_ay absrlo,absflo,0
002EE2 1 D0 FE 68 49
002EE6 1 30 D9 77 02
002EEC 1 88 dey
002EED 1 10 E6 bpl tand14
002EEF 1 A0 03 ldy #3
002EF1 1 tand15:
002EF1 1 A9 FF 48 B9 set_ay absANa,$ff
002EF5 1 6B 02 28
002EF8 1 31 3C and (indAN),y
002EFA 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
002EFE 1 D0 FE 68 49
002F02 1 7D D9 77 02
002F08 1 88 dey
002F09 1 10 E6 bpl tand15
002F0B 1 AD 00 02 C9 next_test
002F0F 1 26 D0 FE A9
002F13 1 27 8D 00 02
002F17 1
002F17 1 ; EOR
002F17 1 A2 03 ldx #3 ;immediate - self modifying code
002F19 1 B5 22 teor: lda zpEO,x
002F1B 1 8D 0D 02 sta ex_eori+1 ;set EOR # operand
002F1E 1 A9 00 48 BD set_ax absEOa,0
002F22 1 6F 02 28
002F25 1 20 0C 02 jsr ex_eori ;execute EOR # in RAM
002F28 1 08 DD 73 02 tst_ax absrlo,absflo,0
002F2C 1 D0 FE 68 49
002F30 1 30 DD 77 02
002F36 1 CA dex
002F37 1 10 E0 bpl teor
002F39 1 A2 03 ldx #3
002F3B 1 B5 22 teor1: lda zpEO,x
002F3D 1 8D 0D 02 sta ex_eori+1 ;set EOR # operand
002F40 1 A9 FF 48 BD set_ax absEOa,$ff
002F44 1 6F 02 28
002F47 1 20 0C 02 jsr ex_eori ;execute EOR # in RAM
002F4A 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002F4E 1 D0 FE 68 49
002F52 1 7D DD 77 02
002F58 1 CA dex
002F59 1 10 E0 bpl teor1
002F5B 1
002F5B 1 A2 03 ldx #3 ;zp
002F5D 1 B5 22 teor2: lda zpEO,x
002F5F 1 85 0C sta zpt
002F61 1 A9 00 48 BD set_ax absEOa,0
002F65 1 6F 02 28
002F68 1 45 0C eor zpt
002F6A 1 08 DD 73 02 tst_ax absrlo,absflo,0
002F6E 1 D0 FE 68 49
002F72 1 30 DD 77 02
002F78 1 CA dex
002F79 1 10 E2 bpl teor2
002F7B 1 A2 03 ldx #3
002F7D 1 B5 22 teor3: lda zpEO,x
002F7F 1 85 0C sta zpt
002F81 1 A9 FF 48 BD set_ax absEOa,$ff
002F85 1 6F 02 28
002F88 1 45 0C eor zpt
002F8A 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002F8E 1 D0 FE 68 49
002F92 1 7D DD 77 02
002F98 1 CA dex
002F99 1 10 E2 bpl teor3
002F9B 1
002F9B 1 A2 03 ldx #3 ;abs
002F9D 1 B5 22 teor4: lda zpEO,x
002F9F 1 8D 03 02 sta abst
002FA2 1 A9 00 48 BD set_ax absEOa,0
002FA6 1 6F 02 28
002FA9 1 4D 03 02 eor abst
002FAC 1 08 DD 73 02 tst_ax absrlo,absflo,0
002FB0 1 D0 FE 68 49
002FB4 1 30 DD 77 02
002FBA 1 CA dex
002FBB 1 10 E0 bpl teor4
002FBD 1 A2 03 ldx #3
002FBF 1 B5 22 teor5: lda zpEO,x
002FC1 1 8D 03 02 sta abst
002FC4 1 A9 FF 48 BD set_ax absEOa,$ff
002FC8 1 6F 02 28
002FCB 1 4D 03 02 eor abst
002FCE 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
002FD2 1 D0 FE 68 49
002FD6 1 7D DD 77 02
002FDC 1 CA dex
002FDD 1 10 02 bpl teor6
002FDF 1
002FDF 1 A2 03 ldx #3 ;zp,x
002FE1 1 teor6:
002FE1 1 A9 00 48 BD set_ax absEOa,0
002FE5 1 6F 02 28
002FE8 1 55 22 eor zpEO,x
002FEA 1 08 DD 73 02 tst_ax absrlo,absflo,0
002FEE 1 D0 FE 68 49
002FF2 1 30 DD 77 02
002FF8 1 CA dex
002FF9 1 10 E6 bpl teor6
002FFB 1 A2 03 ldx #3
002FFD 1 teor7:
002FFD 1 A9 FF 48 BD set_ax absEOa,$ff
003001 1 6F 02 28
003004 1 55 22 eor zpEO,x
003006 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
00300A 1 D0 FE 68 49
00300E 1 7D DD 77 02
003014 1 CA dex
003015 1 10 E6 bpl teor7
003017 1
003017 1 A2 03 ldx #3 ;abs,x
003019 1 teor8:
003019 1 A9 00 48 BD set_ax absEOa,0
00301D 1 6F 02 28
003020 1 5D 63 02 eor absEO,x
003023 1 08 DD 73 02 tst_ax absrlo,absflo,0
003027 1 D0 FE 68 49
00302B 1 30 DD 77 02
003031 1 CA dex
003032 1 10 E5 bpl teor8
003034 1 A2 03 ldx #3
003036 1 teor9:
003036 1 A9 FF 48 BD set_ax absEOa,$ff
00303A 1 6F 02 28
00303D 1 5D 63 02 eor absEO,x
003040 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
003044 1 D0 FE 68 49
003048 1 7D DD 77 02
00304E 1 CA dex
00304F 1 10 E5 bpl teor9
003051 1
003051 1 A0 03 ldy #3 ;abs,y
003053 1 teor10:
003053 1 A9 00 48 B9 set_ay absEOa,0
003057 1 6F 02 28
00305A 1 59 63 02 eor absEO,y
00305D 1 08 D9 73 02 tst_ay absrlo,absflo,0
003061 1 D0 FE 68 49
003065 1 30 D9 77 02
00306B 1 88 dey
00306C 1 10 E5 bpl teor10
00306E 1 A0 03 ldy #3
003070 1 teor11:
003070 1 A9 FF 48 B9 set_ay absEOa,$ff
003074 1 6F 02 28
003077 1 59 63 02 eor absEO,y
00307A 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
00307E 1 D0 FE 68 49
003082 1 7D D9 77 02
003088 1 88 dey
003089 1 10 E5 bpl teor11
00308B 1
00308B 1 A2 06 ldx #6 ;(zp,x)
00308D 1 A0 03 ldy #3
00308F 1 teor12:
00308F 1 A9 00 48 B9 set_ay absEOa,0
003093 1 6F 02 28
003096 1 41 44 eor (indEO,x)
003098 1 08 D9 73 02 tst_ay absrlo,absflo,0
00309C 1 D0 FE 68 49
0030A0 1 30 D9 77 02
0030A6 1 CA dex
0030A7 1 CA dex
0030A8 1 88 dey
0030A9 1 10 E4 bpl teor12
0030AB 1 A2 06 ldx #6
0030AD 1 A0 03 ldy #3
0030AF 1 teor13:
0030AF 1 A9 FF 48 B9 set_ay absEOa,$ff
0030B3 1 6F 02 28
0030B6 1 41 44 eor (indEO,x)
0030B8 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
0030BC 1 D0 FE 68 49
0030C0 1 7D D9 77 02
0030C6 1 CA dex
0030C7 1 CA dex
0030C8 1 88 dey
0030C9 1 10 E4 bpl teor13
0030CB 1
0030CB 1 A0 03 ldy #3 ;(zp),y
0030CD 1 teor14:
0030CD 1 A9 00 48 B9 set_ay absEOa,0
0030D1 1 6F 02 28
0030D4 1 51 44 eor (indEO),y
0030D6 1 08 D9 73 02 tst_ay absrlo,absflo,0
0030DA 1 D0 FE 68 49
0030DE 1 30 D9 77 02
0030E4 1 88 dey
0030E5 1 10 E6 bpl teor14
0030E7 1 A0 03 ldy #3
0030E9 1 teor15:
0030E9 1 A9 FF 48 B9 set_ay absEOa,$ff
0030ED 1 6F 02 28
0030F0 1 51 44 eor (indEO),y
0030F2 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
0030F6 1 D0 FE 68 49
0030FA 1 7D D9 77 02
003100 1 88 dey
003101 1 10 E6 bpl teor15
003103 1 AD 00 02 C9 next_test
003107 1 27 D0 FE A9
00310B 1 28 8D 00 02
00310F 1
00310F 1 ; OR
00310F 1 A2 03 ldx #3 ;immediate - self modifying code
003111 1 B5 1A tora: lda zpOR,x
003113 1 8D 10 02 sta ex_orai+1 ;set ORA # operand
003116 1 A9 00 48 BD set_ax absORa,0
00311A 1 67 02 28
00311D 1 20 0F 02 jsr ex_orai ;execute ORA # in RAM
003120 1 08 DD 73 02 tst_ax absrlo,absflo,0
003124 1 D0 FE 68 49
003128 1 30 DD 77 02
00312E 1 CA dex
00312F 1 10 E0 bpl tora
003131 1 A2 03 ldx #3
003133 1 B5 1A tora1: lda zpOR,x
003135 1 8D 10 02 sta ex_orai+1 ;set ORA # operand
003138 1 A9 FF 48 BD set_ax absORa,$ff
00313C 1 67 02 28
00313F 1 20 0F 02 jsr ex_orai ;execute ORA # in RAM
003142 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
003146 1 D0 FE 68 49
00314A 1 7D DD 77 02
003150 1 CA dex
003151 1 10 E0 bpl tora1
003153 1
003153 1 A2 03 ldx #3 ;zp
003155 1 B5 1A tora2: lda zpOR,x
003157 1 85 0C sta zpt
003159 1 A9 00 48 BD set_ax absORa,0
00315D 1 67 02 28
003160 1 05 0C ora zpt
003162 1 08 DD 73 02 tst_ax absrlo,absflo,0
003166 1 D0 FE 68 49
00316A 1 30 DD 77 02
003170 1 CA dex
003171 1 10 E2 bpl tora2
003173 1 A2 03 ldx #3
003175 1 B5 1A tora3: lda zpOR,x
003177 1 85 0C sta zpt
003179 1 A9 FF 48 BD set_ax absORa,$ff
00317D 1 67 02 28
003180 1 05 0C ora zpt
003182 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
003186 1 D0 FE 68 49
00318A 1 7D DD 77 02
003190 1 CA dex
003191 1 10 E2 bpl tora3
003193 1
003193 1 A2 03 ldx #3 ;abs
003195 1 B5 1A tora4: lda zpOR,x
003197 1 8D 03 02 sta abst
00319A 1 A9 00 48 BD set_ax absORa,0
00319E 1 67 02 28
0031A1 1 0D 03 02 ora abst
0031A4 1 08 DD 73 02 tst_ax absrlo,absflo,0
0031A8 1 D0 FE 68 49
0031AC 1 30 DD 77 02
0031B2 1 CA dex
0031B3 1 10 E0 bpl tora4
0031B5 1 A2 03 ldx #3
0031B7 1 B5 1A tora5: lda zpOR,x
0031B9 1 8D 03 02 sta abst
0031BC 1 A9 FF 48 BD set_ax absORa,$ff
0031C0 1 67 02 28
0031C3 1 0D 03 02 ora abst
0031C6 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
0031CA 1 D0 FE 68 49
0031CE 1 7D DD 77 02
0031D4 1 CA dex
0031D5 1 10 02 bpl tora6
0031D7 1
0031D7 1 A2 03 ldx #3 ;zp,x
0031D9 1 tora6:
0031D9 1 A9 00 48 BD set_ax absORa,0
0031DD 1 67 02 28
0031E0 1 15 1A ora zpOR,x
0031E2 1 08 DD 73 02 tst_ax absrlo,absflo,0
0031E6 1 D0 FE 68 49
0031EA 1 30 DD 77 02
0031F0 1 CA dex
0031F1 1 10 E6 bpl tora6
0031F3 1 A2 03 ldx #3
0031F5 1 tora7:
0031F5 1 A9 FF 48 BD set_ax absORa,$ff
0031F9 1 67 02 28
0031FC 1 15 1A ora zpOR,x
0031FE 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
003202 1 D0 FE 68 49
003206 1 7D DD 77 02
00320C 1 CA dex
00320D 1 10 E6 bpl tora7
00320F 1
00320F 1 A2 03 ldx #3 ;abs,x
003211 1 tora8:
003211 1 A9 00 48 BD set_ax absORa,0
003215 1 67 02 28
003218 1 1D 5B 02 ora absOR,x
00321B 1 08 DD 73 02 tst_ax absrlo,absflo,0
00321F 1 D0 FE 68 49
003223 1 30 DD 77 02
003229 1 CA dex
00322A 1 10 E5 bpl tora8
00322C 1 A2 03 ldx #3
00322E 1 tora9:
00322E 1 A9 FF 48 BD set_ax absORa,$ff
003232 1 67 02 28
003235 1 1D 5B 02 ora absOR,x
003238 1 08 DD 73 02 tst_ax absrlo,absflo,$ff-fnz
00323C 1 D0 FE 68 49
003240 1 7D DD 77 02
003246 1 CA dex
003247 1 10 E5 bpl tora9
003249 1
003249 1 A0 03 ldy #3 ;abs,y
00324B 1 tora10:
00324B 1 A9 00 48 B9 set_ay absORa,0
00324F 1 67 02 28
003252 1 19 5B 02 ora absOR,y
003255 1 08 D9 73 02 tst_ay absrlo,absflo,0
003259 1 D0 FE 68 49
00325D 1 30 D9 77 02
003263 1 88 dey
003264 1 10 E5 bpl tora10
003266 1 A0 03 ldy #3
003268 1 tora11:
003268 1 A9 FF 48 B9 set_ay absORa,$ff
00326C 1 67 02 28
00326F 1 19 5B 02 ora absOR,y
003272 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
003276 1 D0 FE 68 49
00327A 1 7D D9 77 02
003280 1 88 dey
003281 1 10 E5 bpl tora11
003283 1
003283 1 A2 06 ldx #6 ;(zp,x)
003285 1 A0 03 ldy #3
003287 1 tora12:
003287 1 A9 00 48 B9 set_ay absORa,0
00328B 1 67 02 28
00328E 1 01 4C ora (indOR,x)
003290 1 08 D9 73 02 tst_ay absrlo,absflo,0
003294 1 D0 FE 68 49
003298 1 30 D9 77 02
00329E 1 CA dex
00329F 1 CA dex
0032A0 1 88 dey
0032A1 1 10 E4 bpl tora12
0032A3 1 A2 06 ldx #6
0032A5 1 A0 03 ldy #3
0032A7 1 tora13:
0032A7 1 A9 FF 48 B9 set_ay absORa,$ff
0032AB 1 67 02 28
0032AE 1 01 4C ora (indOR,x)
0032B0 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
0032B4 1 D0 FE 68 49
0032B8 1 7D D9 77 02
0032BE 1 CA dex
0032BF 1 CA dex
0032C0 1 88 dey
0032C1 1 10 E4 bpl tora13
0032C3 1
0032C3 1 A0 03 ldy #3 ;(zp),y
0032C5 1 tora14:
0032C5 1 A9 00 48 B9 set_ay absORa,0
0032C9 1 67 02 28
0032CC 1 11 4C ora (indOR),y
0032CE 1 08 D9 73 02 tst_ay absrlo,absflo,0
0032D2 1 D0 FE 68 49
0032D6 1 30 D9 77 02
0032DC 1 88 dey
0032DD 1 10 E6 bpl tora14
0032DF 1 A0 03 ldy #3
0032E1 1 tora15:
0032E1 1 A9 FF 48 B9 set_ay absORa,$ff
0032E5 1 67 02 28
0032E8 1 11 4C ora (indOR),y
0032EA 1 08 D9 73 02 tst_ay absrlo,absflo,$ff-fnz
0032EE 1 D0 FE 68 49
0032F2 1 7D D9 77 02
0032F8 1 88 dey
0032F9 1 10 E6 bpl tora15
0032FB 1 .if I_flag = 3
0032FB 1 58 cli
0032FC 1 .endif
0032FC 1 AD 00 02 C9 next_test
003300 1 28 D0 FE A9
003304 1 29 8D 00 02
003308 1
003308 1 ; full binary add/subtract test
003308 1 ; iterates through all combinations of operands and carry input
003308 1 ; uses increments/decrements to predict result & result flags
003308 1 D8 cld
003309 1 A2 0E ldx #ad2 ;for indexed test
00330B 1 A0 FF ldy #$ff ;max range
00330D 1 A9 00 lda #0 ;start with adding zeroes & no carry
00330F 1 85 0C sta adfc ;carry in - for diag
003311 1 85 0D sta ad1 ;operand 1 - accumulator
003313 1 85 0E sta ad2 ;operand 2 - memory or immediate
003315 1 8D 03 02 sta ada2 ;non zp
003318 1 85 0F sta adrl ;expected result bits 0-7
00331A 1 85 10 sta adrh ;expected result bit 8 (carry out)
00331C 1 A9 FF lda #$ff ;complemented operand 2 for subtract
00331E 1 85 12 sta sb2
003320 1 8D 04 02 sta sba2 ;non zp
003323 1 A9 02 lda #2 ;expected Z-flag
003325 1 85 11 sta adrf
003327 1 18 tadd: clc ;test with carry clear
003328 1 20 A2 35 jsr chkadd
00332B 1 E6 0C inc adfc ;now with carry
00332D 1 E6 0F inc adrl ;result +1
00332F 1 08 php ;save N & Z from low result
003330 1 08 php
003331 1 68 pla ;accu holds expected flags
003332 1 29 82 and #$82 ;mask N & Z
003334 1 28 plp
003335 1 D0 02 bne tadd1
003337 1 E6 10 inc adrh ;result bit 8 - carry
003339 1 05 10 tadd1: ora adrh ;merge C to expected flags
00333B 1 85 11 sta adrf ;save expected flags except overflow
00333D 1 38 sec ;test with carry set
00333E 1 20 A2 35 jsr chkadd
003341 1 C6 0C dec adfc ;same for operand +1 but no carry
003343 1 E6 0D inc ad1
003345 1 D0 E0 bne tadd ;iterate op1
003347 1 A9 00 lda #0 ;preset result to op2 when op1 = 0
003349 1 85 10 sta adrh
00334B 1 EE 03 02 inc ada2
00334E 1 E6 0E inc ad2
003350 1 08 php ;save NZ as operand 2 becomes the new result
003351 1 68 pla
003352 1 29 82 and #$82 ;mask N00000Z0
003354 1 85 11 sta adrf ;no need to check carry as we are adding to 0
003356 1 C6 12 dec sb2 ;complement subtract operand 2
003358 1 CE 04 02 dec sba2
00335B 1 A5 0E lda ad2
00335D 1 85 0F sta adrl
00335F 1 D0 C6 bne tadd ;iterate op2
003361 1 .if disable_decimal < 1
003361 1 AD 00 02 C9 next_test
003365 1 29 D0 FE A9
003369 1 2A 8D 00 02
00336D 1
00336D 1 ; decimal add/subtract test
00336D 1 ; *** WARNING - tests documented behavior only! ***
00336D 1 ; only valid BCD operands are tested, N V Z flags are ignored
00336D 1 ; iterates through all valid combinations of operands and carry input
00336D 1 ; uses increments/decrements to predict result & carry flag
00336D 1 F8 sed
00336E 1 A2 0E ldx #ad2 ;for indexed test
003370 1 A0 FF ldy #$ff ;max range
003372 1 A9 99 lda #$99 ;start with adding 99 to 99 with carry
003374 1 85 0D sta ad1 ;operand 1 - accumulator
003376 1 85 0E sta ad2 ;operand 2 - memory or immediate
003378 1 8D 03 02 sta ada2 ;non zp
00337B 1 85 0F sta adrl ;expected result bits 0-7
00337D 1 A9 01 lda #1 ;set carry in & out
00337F 1 85 0C sta adfc ;carry in - for diag
003381 1 85 10 sta adrh ;expected result bit 8 (carry out)
003383 1 A9 00 lda #0 ;complemented operand 2 for subtract
003385 1 85 12 sta sb2
003387 1 8D 04 02 sta sba2 ;non zp
00338A 1 38 tdad: sec ;test with carry set
00338B 1 20 6F 34 jsr chkdad
00338E 1 C6 0C dec adfc ;now with carry clear
003390 1 A5 0F lda adrl ;decimal adjust result
003392 1 D0 08 bne tdad1 ;skip clear carry & preset result 99 (9A-1)
003394 1 C6 10 dec adrh
003396 1 A9 99 lda #$99
003398 1 85 0F sta adrl
00339A 1 D0 12 bne tdad3
00339C 1 29 0F tdad1: and #$f ;lower nibble mask
00339E 1 D0 0C bne tdad2 ;no decimal adjust needed
0033A0 1 C6 0F dec adrl ;decimal adjust (?0-6)
0033A2 1 C6 0F dec adrl
0033A4 1 C6 0F dec adrl
0033A6 1 C6 0F dec adrl
0033A8 1 C6 0F dec adrl
0033AA 1 C6 0F dec adrl
0033AC 1 C6 0F tdad2: dec adrl ;result -1
0033AE 1 18 tdad3: clc ;test with carry clear
0033AF 1 20 6F 34 jsr chkdad
0033B2 1 E6 0C inc adfc ;same for operand -1 but with carry
0033B4 1 A5 0D lda ad1 ;decimal adjust operand 1
0033B6 1 F0 15 beq tdad5 ;iterate operand 2
0033B8 1 29 0F and #$f ;lower nibble mask
0033BA 1 D0 0C bne tdad4 ;skip decimal adjust
0033BC 1 C6 0D dec ad1 ;decimal adjust (?0-6)
0033BE 1 C6 0D dec ad1
0033C0 1 C6 0D dec ad1
0033C2 1 C6 0D dec ad1
0033C4 1 C6 0D dec ad1
0033C6 1 C6 0D dec ad1
0033C8 1 C6 0D tdad4: dec ad1 ;operand 1 -1
0033CA 1 4C 8A 33 jmp tdad ;iterate op1
0033CD 1
0033CD 1 A9 99 tdad5: lda #$99 ;precharge op1 max
0033CF 1 85 0D sta ad1
0033D1 1 A5 0E lda ad2 ;decimal adjust operand 2
0033D3 1 F0 30 beq tdad7 ;end of iteration
0033D5 1 29 0F and #$f ;lower nibble mask
0033D7 1 D0 18 bne tdad6 ;skip decimal adjust
0033D9 1 C6 0E dec ad2 ;decimal adjust (?0-6)
0033DB 1 C6 0E dec ad2
0033DD 1 C6 0E dec ad2
0033DF 1 C6 0E dec ad2
0033E1 1 C6 0E dec ad2
0033E3 1 C6 0E dec ad2
0033E5 1 E6 12 inc sb2 ;complemented decimal adjust for subtract (?9+6)
0033E7 1 E6 12 inc sb2
0033E9 1 E6 12 inc sb2
0033EB 1 E6 12 inc sb2
0033ED 1 E6 12 inc sb2
0033EF 1 E6 12 inc sb2
0033F1 1 C6 0E tdad6: dec ad2 ;operand 2 -1
0033F3 1 E6 12 inc sb2 ;complemented operand for subtract
0033F5 1 A5 12 lda sb2
0033F7 1 8D 04 02 sta sba2 ;copy as non zp operand
0033FA 1 A5 0E lda ad2
0033FC 1 8D 03 02 sta ada2 ;copy as non zp operand
0033FF 1 85 0F sta adrl ;new result since op1+carry=00+carry +op2=op2
003401 1 E6 10 inc adrh ;result carry
003403 1 D0 85 bne tdad ;iterate op2
003405 1 tdad7:
003405 1 AD 00 02 C9 next_test
003409 1 2A D0 FE A9
00340D 1 2B 8D 00 02
003411 1
003411 1 ; decimal/binary switch test
003411 1 ; tests CLD, SED, PLP, RTI to properly switch between decimal & binary opcode
003411 1 ; tables
003411 1 18 clc
003412 1 D8 cld
003413 1 08 php
003414 1 A9 55 lda #$55
003416 1 69 55 adc #$55
003418 1 C9 AA cmp #$aa
00341A 1 D0 FE trap_ne ;expected binary result after cld
00341C 1 18 clc
00341D 1 F8 sed
00341E 1 08 php
00341F 1 A9 55 lda #$55
003421 1 69 55 adc #$55
003423 1 C9 10 cmp #$10
003425 1 D0 FE trap_ne ;expected decimal result after sed
003427 1 D8 cld
003428 1 28 plp
003429 1 A9 55 lda #$55
00342B 1 69 55 adc #$55
00342D 1 C9 10 cmp #$10
00342F 1 D0 FE trap_ne ;expected decimal result after plp D=1
003431 1 28 plp
003432 1 A9 55 lda #$55
003434 1 69 55 adc #$55
003436 1 C9 AA cmp #$aa
003438 1 D0 FE trap_ne ;expected binary result after plp D=0
00343A 1 18 clc
00343B 1 A9 34 lda #>bin_rti_ret ;emulated interrupt for rti
00343D 1 48 pha
00343E 1 A9 55 lda #<bin_rti_ret
003440 1 48 pha
003441 1 08 php
003442 1 F8 sed
003443 1 A9 34 lda #>dec_rti_ret ;emulated interrupt for rti
003445 1 48 pha
003446 1 A9 4C lda #<dec_rti_ret
003448 1 48 pha
003449 1 08 php
00344A 1 D8 cld
00344B 1 40 rti
00344C 1 dec_rti_ret:
00344C 1 A9 55 lda #$55
00344E 1 69 55 adc #$55
003450 1 C9 10 cmp #$10
003452 1 D0 FE trap_ne ;expected decimal result after rti D=1
003454 1 40 rti
003455 1 bin_rti_ret:
003455 1 A9 55 lda #$55
003457 1 69 55 adc #$55
003459 1 C9 AA cmp #$aa
00345B 1 D0 FE trap_ne ;expected binary result after rti D=0
00345D 1 .endif
00345D 1
00345D 1 AD 00 02 lda test_case
003460 1 C9 2B cmp #test_num
003462 1 D0 FE trap_ne ;previous test is out of sequence
003464 1 A9 F0 lda #$f0 ;mark opcode testing complete
003466 1 8D 00 02 sta test_case
003469 1
003469 1 ; final RAM integrity test
003469 1 ; verifies that none of the previous tests has altered RAM outside of the
003469 1 ; designated write areas.
003469 1 check_ram
003469 1 ; *** DEBUG INFO ***
003469 1 ; to debug checksum errors uncomment check_ram in the next_test macro to
003469 1 ; narrow down the responsible opcode.
003469 1 ; may give false errors when monitor, OS or other background activity is
003469 1 ; allowed during previous tests.
003469 1
003469 1
003469 1 ; S U C C E S S ************************************************
003469 1 ; -------------
003469 1 4C 69 34 success ;if you get here everything went well
00346C 1 ; -------------
00346C 1 ; S U C C E S S ************************************************
00346C 1 4C 00 04 jmp start ;run again
00346F 1
00346F 1 .if disable_decimal < 1
00346F 1 ; core subroutine of the decimal add/subtract test
00346F 1 ; *** WARNING - tests documented behavior only! ***
00346F 1 ; only valid BCD operands are tested, N V Z flags are ignored
00346F 1 ; iterates through all valid combinations of operands and carry input
00346F 1 ; uses increments/decrements to predict result & carry flag
00346F 1 chkdad:
00346F 1 ; decimal ADC / SBC zp
00346F 1 08 php ;save carry for subtract
003470 1 A5 0D lda ad1
003472 1 65 0E adc ad2 ;perform add
003474 1 08 php
003475 1 C5 0F cmp adrl ;check result
003477 1 D0 FE trap_ne ;bad result
003479 1 68 pla ;check flags
00347A 1 29 01 and #1 ;mask carry
00347C 1 C5 10 cmp adrh
00347E 1 D0 FE trap_ne ;bad carry
003480 1 28 plp
003481 1 08 php ;save carry for next add
003482 1 A5 0D lda ad1
003484 1 E5 12 sbc sb2 ;perform subtract
003486 1 08 php
003487 1 C5 0F cmp adrl ;check result
003489 1 D0 FE trap_ne ;bad result
00348B 1 68 pla ;check flags
00348C 1 29 01 and #1 ;mask carry
00348E 1 C5 10 cmp adrh
003490 1 D0 FE trap_ne ;bad flags
003492 1 28 plp
003493 1 ; decimal ADC / SBC abs
003493 1 08 php ;save carry for subtract
003494 1 A5 0D lda ad1
003496 1 6D 03 02 adc ada2 ;perform add
003499 1 08 php
00349A 1 C5 0F cmp adrl ;check result
00349C 1 D0 FE trap_ne ;bad result
00349E 1 68 pla ;check flags
00349F 1 29 01 and #1 ;mask carry
0034A1 1 C5 10 cmp adrh
0034A3 1 D0 FE trap_ne ;bad carry
0034A5 1 28 plp
0034A6 1 08 php ;save carry for next add
0034A7 1 A5 0D lda ad1
0034A9 1 ED 04 02 sbc sba2 ;perform subtract
0034AC 1 08 php
0034AD 1 C5 0F cmp adrl ;check result
0034AF 1 D0 FE trap_ne ;bad result
0034B1 1 68 pla ;check flags
0034B2 1 29 01 and #1 ;mask carry
0034B4 1 C5 10 cmp adrh
0034B6 1 D0 FE trap_ne ;bad carry
0034B8 1 28 plp
0034B9 1 ; decimal ADC / SBC #
0034B9 1 08 php ;save carry for subtract
0034BA 1 A5 0E lda ad2
0034BC 1 8D 13 02 sta ex_adci+1 ;set ADC # operand
0034BF 1 A5 0D lda ad1
0034C1 1 20 12 02 jsr ex_adci ;execute ADC # in RAM
0034C4 1 08 php
0034C5 1 C5 0F cmp adrl ;check result
0034C7 1 D0 FE trap_ne ;bad result
0034C9 1 68 pla ;check flags
0034CA 1 29 01 and #1 ;mask carry
0034CC 1 C5 10 cmp adrh
0034CE 1 D0 FE trap_ne ;bad carry
0034D0 1 28 plp
0034D1 1 08 php ;save carry for next add
0034D2 1 A5 12 lda sb2
0034D4 1 8D 16 02 sta ex_sbci+1 ;set SBC # operand
0034D7 1 A5 0D lda ad1
0034D9 1 20 15 02 jsr ex_sbci ;execute SBC # in RAM
0034DC 1 08 php
0034DD 1 C5 0F cmp adrl ;check result
0034DF 1 D0 FE trap_ne ;bad result
0034E1 1 68 pla ;check flags
0034E2 1 29 01 and #1 ;mask carry
0034E4 1 C5 10 cmp adrh
0034E6 1 D0 FE trap_ne ;bad carry
0034E8 1 28 plp
0034E9 1 ; decimal ADC / SBC zp,x
0034E9 1 08 php ;save carry for subtract
0034EA 1 A5 0D lda ad1
0034EC 1 75 00 adc 0,x ;perform add
0034EE 1 08 php
0034EF 1 C5 0F cmp adrl ;check result
0034F1 1 D0 FE trap_ne ;bad result
0034F3 1 68 pla ;check flags
0034F4 1 29 01 and #1 ;mask carry
0034F6 1 C5 10 cmp adrh
0034F8 1 D0 FE trap_ne ;bad carry
0034FA 1 28 plp
0034FB 1 08 php ;save carry for next add
0034FC 1 A5 0D lda ad1
0034FE 1 F5 04 sbc sb2-ad2,x ;perform subtract
003500 1 08 php
003501 1 C5 0F cmp adrl ;check result
003503 1 D0 FE trap_ne ;bad result
003505 1 68 pla ;check flags
003506 1 29 01 and #1 ;mask carry
003508 1 C5 10 cmp adrh
00350A 1 D0 FE trap_ne ;bad carry
00350C 1 28 plp
00350D 1 ; decimal ADC / SBC abs,x
00350D 1 08 php ;save carry for subtract
00350E 1 A5 0D lda ad1
003510 1 7D F5 01 adc ada2-ad2,x ;perform add
003513 1 08 php
003514 1 C5 0F cmp adrl ;check result
003516 1 D0 FE trap_ne ;bad result
003518 1 68 pla ;check flags
003519 1 29 01 and #1 ;mask carry
00351B 1 C5 10 cmp adrh
00351D 1 D0 FE trap_ne ;bad carry
00351F 1 28 plp
003520 1 08 php ;save carry for next add
003521 1 A5 0D lda ad1
003523 1 FD F6 01 sbc sba2-ad2,x ;perform subtract
003526 1 08 php
003527 1 C5 0F cmp adrl ;check result
003529 1 D0 FE trap_ne ;bad result
00352B 1 68 pla ;check flags
00352C 1 29 01 and #1 ;mask carry
00352E 1 C5 10 cmp adrh
003530 1 D0 FE trap_ne ;bad carry
003532 1 28 plp
003533 1 ; decimal ADC / SBC abs,y
003533 1 08 php ;save carry for subtract
003534 1 A5 0D lda ad1
003536 1 79 04 01 adc ada2-$ff,y ;perform add
003539 1 08 php
00353A 1 C5 0F cmp adrl ;check result
00353C 1 D0 FE trap_ne ;bad result
00353E 1 68 pla ;check flags
00353F 1 29 01 and #1 ;mask carry
003541 1 C5 10 cmp adrh
003543 1 D0 FE trap_ne ;bad carry
003545 1 28 plp
003546 1 08 php ;save carry for next add
003547 1 A5 0D lda ad1
003549 1 F9 05 01 sbc sba2-$ff,y ;perform subtract
00354C 1 08 php
00354D 1 C5 0F cmp adrl ;check result
00354F 1 D0 FE trap_ne ;bad result
003551 1 68 pla ;check flags
003552 1 29 01 and #1 ;mask carry
003554 1 C5 10 cmp adrh
003556 1 D0 FE trap_ne ;bad carry
003558 1 28 plp
003559 1 ; decimal ADC / SBC (zp,x)
003559 1 08 php ;save carry for subtract
00355A 1 A5 0D lda ad1
00355C 1 61 46 adc (<adi2-ad2,x) ;perform add
00355E 1 08 php
00355F 1 C5 0F cmp adrl ;check result
003561 1 D0 FE trap_ne ;bad result
003563 1 68 pla ;check flags
003564 1 29 01 and #1 ;mask carry
003566 1 C5 10 cmp adrh
003568 1 D0 FE trap_ne ;bad carry
00356A 1 28 plp
00356B 1 08 php ;save carry for next add
00356C 1 A5 0D lda ad1
00356E 1 E1 48 sbc (<sbi2-ad2,x) ;perform subtract
003570 1 08 php
003571 1 C5 0F cmp adrl ;check result
003573 1 D0 FE trap_ne ;bad result
003575 1 68 pla ;check flags
003576 1 29 01 and #1 ;mask carry
003578 1 C5 10 cmp adrh
00357A 1 D0 FE trap_ne ;bad carry
00357C 1 28 plp
00357D 1 ; decimal ADC / SBC (abs),y
00357D 1 08 php ;save carry for subtract
00357E 1 A5 0D lda ad1
003580 1 71 58 adc (adiy2),y ;perform add
003582 1 08 php
003583 1 C5 0F cmp adrl ;check result
003585 1 D0 FE trap_ne ;bad result
003587 1 68 pla ;check flags
003588 1 29 01 and #1 ;mask carry
00358A 1 C5 10 cmp adrh
00358C 1 D0 FE trap_ne ;bad carry
00358E 1 28 plp
00358F 1 08 php ;save carry for next add
003590 1 A5 0D lda ad1
003592 1 F1 5A sbc (sbiy2),y ;perform subtract
003594 1 08 php
003595 1 C5 0F cmp adrl ;check result
003597 1 D0 FE trap_ne ;bad result
003599 1 68 pla ;check flags
00359A 1 29 01 and #1 ;mask carry
00359C 1 C5 10 cmp adrh
00359E 1 D0 FE trap_ne ;bad carry
0035A0 1 28 plp
0035A1 1 60 rts
0035A2 1 .endif
0035A2 1
0035A2 1 ; core subroutine of the full binary add/subtract test
0035A2 1 ; iterates through all combinations of operands and carry input
0035A2 1 ; uses increments/decrements to predict result & result flags
0035A2 1 A5 11 chkadd: lda adrf ;add V-flag if overflow
0035A4 1 29 83 and #$83 ;keep N-----ZC / clear V
0035A6 1 48 pha
0035A7 1 A5 0D lda ad1 ;test sign unequal between operands
0035A9 1 45 0E eor ad2
0035AB 1 30 0A bmi ckad1 ;no overflow possible - operands have different sign
0035AD 1 A5 0D lda ad1 ;test sign equal between operands and result
0035AF 1 45 0F eor adrl
0035B1 1 10 04 bpl ckad1 ;no overflow occured - operand and result have same sign
0035B3 1 68 pla
0035B4 1 09 40 ora #$40 ;set V
0035B6 1 48 pha
0035B7 1 68 ckad1: pla
0035B8 1 85 11 sta adrf ;save expected flags
0035BA 1 ; binary ADC / SBC zp
0035BA 1 08 php ;save carry for subtract
0035BB 1 A5 0D lda ad1
0035BD 1 65 0E adc ad2 ;perform add
0035BF 1 08 php
0035C0 1 C5 0F cmp adrl ;check result
0035C2 1 D0 FE trap_ne ;bad result
0035C4 1 68 pla ;check flags
0035C5 1 29 C3 and #$c3 ;mask NV----ZC
0035C7 1 C5 11 cmp adrf
0035C9 1 D0 FE trap_ne ;bad flags
0035CB 1 28 plp
0035CC 1 08 php ;save carry for next add
0035CD 1 A5 0D lda ad1
0035CF 1 E5 12 sbc sb2 ;perform subtract
0035D1 1 08 php
0035D2 1 C5 0F cmp adrl ;check result
0035D4 1 D0 FE trap_ne ;bad result
0035D6 1 68 pla ;check flags
0035D7 1 29 C3 and #$c3 ;mask NV----ZC
0035D9 1 C5 11 cmp adrf
0035DB 1 D0 FE trap_ne ;bad flags
0035DD 1 28 plp
0035DE 1 ; binary ADC / SBC abs
0035DE 1 08 php ;save carry for subtract
0035DF 1 A5 0D lda ad1
0035E1 1 6D 03 02 adc ada2 ;perform add
0035E4 1 08 php
0035E5 1 C5 0F cmp adrl ;check result
0035E7 1 D0 FE trap_ne ;bad result
0035E9 1 68 pla ;check flags
0035EA 1 29 C3 and #$c3 ;mask NV----ZC
0035EC 1 C5 11 cmp adrf
0035EE 1 D0 FE trap_ne ;bad flags
0035F0 1 28 plp
0035F1 1 08 php ;save carry for next add
0035F2 1 A5 0D lda ad1
0035F4 1 ED 04 02 sbc sba2 ;perform subtract
0035F7 1 08 php
0035F8 1 C5 0F cmp adrl ;check result
0035FA 1 D0 FE trap_ne ;bad result
0035FC 1 68 pla ;check flags
0035FD 1 29 C3 and #$c3 ;mask NV----ZC
0035FF 1 C5 11 cmp adrf
003601 1 D0 FE trap_ne ;bad flags
003603 1 28 plp
003604 1 ; binary ADC / SBC #
003604 1 08 php ;save carry for subtract
003605 1 A5 0E lda ad2
003607 1 8D 13 02 sta ex_adci+1 ;set ADC # operand
00360A 1 A5 0D lda ad1
00360C 1 20 12 02 jsr ex_adci ;execute ADC # in RAM
00360F 1 08 php
003610 1 C5 0F cmp adrl ;check result
003612 1 D0 FE trap_ne ;bad result
003614 1 68 pla ;check flags
003615 1 29 C3 and #$c3 ;mask NV----ZC
003617 1 C5 11 cmp adrf
003619 1 D0 FE trap_ne ;bad flags
00361B 1 28 plp
00361C 1 08 php ;save carry for next add
00361D 1 A5 12 lda sb2
00361F 1 8D 16 02 sta ex_sbci+1 ;set SBC # operand
003622 1 A5 0D lda ad1
003624 1 20 15 02 jsr ex_sbci ;execute SBC # in RAM
003627 1 08 php
003628 1 C5 0F cmp adrl ;check result
00362A 1 D0 FE trap_ne ;bad result
00362C 1 68 pla ;check flags
00362D 1 29 C3 and #$c3 ;mask NV----ZC
00362F 1 C5 11 cmp adrf
003631 1 D0 FE trap_ne ;bad flags
003633 1 28 plp
003634 1 ; binary ADC / SBC zp,x
003634 1 08 php ;save carry for subtract
003635 1 A5 0D lda ad1
003637 1 75 00 adc 0,x ;perform add
003639 1 08 php
00363A 1 C5 0F cmp adrl ;check result
00363C 1 D0 FE trap_ne ;bad result
00363E 1 68 pla ;check flags
00363F 1 29 C3 and #$c3 ;mask NV----ZC
003641 1 C5 11 cmp adrf
003643 1 D0 FE trap_ne ;bad flags
003645 1 28 plp
003646 1 08 php ;save carry for next add
003647 1 A5 0D lda ad1
003649 1 F5 04 sbc sb2-ad2,x ;perform subtract
00364B 1 08 php
00364C 1 C5 0F cmp adrl ;check result
00364E 1 D0 FE trap_ne ;bad result
003650 1 68 pla ;check flags
003651 1 29 C3 and #$c3 ;mask NV----ZC
003653 1 C5 11 cmp adrf
003655 1 D0 FE trap_ne ;bad flags
003657 1 28 plp
003658 1 ; binary ADC / SBC abs,x
003658 1 08 php ;save carry for subtract
003659 1 A5 0D lda ad1
00365B 1 7D F5 01 adc ada2-ad2,x ;perform add
00365E 1 08 php
00365F 1 C5 0F cmp adrl ;check result
003661 1 D0 FE trap_ne ;bad result
003663 1 68 pla ;check flags
003664 1 29 C3 and #$c3 ;mask NV----ZC
003666 1 C5 11 cmp adrf
003668 1 D0 FE trap_ne ;bad flags
00366A 1 28 plp
00366B 1 08 php ;save carry for next add
00366C 1 A5 0D lda ad1
00366E 1 FD F6 01 sbc sba2-ad2,x ;perform subtract
003671 1 08 php
003672 1 C5 0F cmp adrl ;check result
003674 1 D0 FE trap_ne ;bad result
003676 1 68 pla ;check flags
003677 1 29 C3 and #$c3 ;mask NV----ZC
003679 1 C5 11 cmp adrf
00367B 1 D0 FE trap_ne ;bad flags
00367D 1 28 plp
00367E 1 ; binary ADC / SBC abs,y
00367E 1 08 php ;save carry for subtract
00367F 1 A5 0D lda ad1
003681 1 79 04 01 adc ada2-$ff,y ;perform add
003684 1 08 php
003685 1 C5 0F cmp adrl ;check result
003687 1 D0 FE trap_ne ;bad result
003689 1 68 pla ;check flags
00368A 1 29 C3 and #$c3 ;mask NV----ZC
00368C 1 C5 11 cmp adrf
00368E 1 D0 FE trap_ne ;bad flags
003690 1 28 plp
003691 1 08 php ;save carry for next add
003692 1 A5 0D lda ad1
003694 1 F9 05 01 sbc sba2-$ff,y ;perform subtract
003697 1 08 php
003698 1 C5 0F cmp adrl ;check result
00369A 1 D0 FE trap_ne ;bad result
00369C 1 68 pla ;check flags
00369D 1 29 C3 and #$c3 ;mask NV----ZC
00369F 1 C5 11 cmp adrf
0036A1 1 D0 FE trap_ne ;bad flags
0036A3 1 28 plp
0036A4 1 ; binary ADC / SBC (zp,x)
0036A4 1 08 php ;save carry for subtract
0036A5 1 A5 0D lda ad1
0036A7 1 61 46 adc (<adi2-ad2,x) ;perform add
0036A9 1 08 php
0036AA 1 C5 0F cmp adrl ;check result
0036AC 1 D0 FE trap_ne ;bad result
0036AE 1 68 pla ;check flags
0036AF 1 29 C3 and #$c3 ;mask NV----ZC
0036B1 1 C5 11 cmp adrf
0036B3 1 D0 FE trap_ne ;bad flags
0036B5 1 28 plp
0036B6 1 08 php ;save carry for next add
0036B7 1 A5 0D lda ad1
0036B9 1 E1 48 sbc (<sbi2-ad2,x) ;perform subtract
0036BB 1 08 php
0036BC 1 C5 0F cmp adrl ;check result
0036BE 1 D0 FE trap_ne ;bad result
0036C0 1 68 pla ;check flags
0036C1 1 29 C3 and #$c3 ;mask NV----ZC
0036C3 1 C5 11 cmp adrf
0036C5 1 D0 FE trap_ne ;bad flags
0036C7 1 28 plp
0036C8 1 ; binary ADC / SBC (abs),y
0036C8 1 08 php ;save carry for subtract
0036C9 1 A5 0D lda ad1
0036CB 1 71 58 adc (adiy2),y ;perform add
0036CD 1 08 php
0036CE 1 C5 0F cmp adrl ;check result
0036D0 1 D0 FE trap_ne ;bad result
0036D2 1 68 pla ;check flags
0036D3 1 29 C3 and #$c3 ;mask NV----ZC
0036D5 1 C5 11 cmp adrf
0036D7 1 D0 FE trap_ne ;bad flags
0036D9 1 28 plp
0036DA 1 08 php ;save carry for next add
0036DB 1 A5 0D lda ad1
0036DD 1 F1 5A sbc (sbiy2),y ;perform subtract
0036DF 1 08 php
0036E0 1 C5 0F cmp adrl ;check result
0036E2 1 D0 FE trap_ne ;bad result
0036E4 1 68 pla ;check flags
0036E5 1 29 C3 and #$c3 ;mask NV----ZC
0036E7 1 C5 11 cmp adrf
0036E9 1 D0 FE trap_ne ;bad flags
0036EB 1 28 plp
0036EC 1 60 rts
0036ED 1
0036ED 1 ; target for the jump absolute test
0036ED 1 88 dey
0036EE 1 88 dey
0036EF 1 test_far:
0036EF 1 08 php ;either SP or Y count will fail, if we do not hit
0036F0 1 88 dey
0036F1 1 88 dey
0036F2 1 88 dey
0036F3 1 28 plp
0036F4 1 B0 FE trap_cs ;flags loaded?
0036F6 1 70 FE trap_vs
0036F8 1 30 FE trap_mi
0036FA 1 F0 FE trap_eq
0036FC 1 C9 46 cmp #'F' ;registers loaded?
0036FE 1 D0 FE trap_ne
003700 1 E0 41 cpx #'A'
003702 1 D0 FE trap_ne
003704 1 C0 4F cpy #('R'-3)
003706 1 D0 FE trap_ne
003708 1 48 pha ;save a,x
003709 1 8A txa
00370A 1 48 pha
00370B 1 BA tsx
00370C 1 E0 FD cpx #$fd ;check SP
00370E 1 D0 FE trap_ne
003710 1 68 pla ;restore x
003711 1 AA tax
003712 1 A9 FF 48 28 set_stat $ff
003716 1 68 pla ;restore a
003717 1 E8 inx ;return registers with modifications
003718 1 49 AA eor #$aa ;N=1, V=1, Z=0, C=1
00371A 1 4C 0F 09 jmp far_ret
00371D 1
00371D 1 ; target for the jump indirect test
00371D 1 ; .align 2
00371D 1 .if * & 1 ; workaround for problems with .align 2
00371D 1 00 .byte 0 ;
00371E 1 .endif ;
00371E 1 ptr_tst_ind:
00371E 1 27 37 .word test_ind
003720 1 ptr_ind_ret:
003720 1 64 09 .word ind_ret
003722 1 4C 22 37 trap ;runover protection
003725 1 88 dey
003726 1 88 dey
003727 1 test_ind:
003727 1 08 php ;either SP or Y count will fail, if we do not hit
003728 1 88 dey
003729 1 88 dey
00372A 1 88 dey
00372B 1 28 plp
00372C 1 B0 FE trap_cs ;flags loaded?
00372E 1 70 FE trap_vs
003730 1 30 FE trap_mi
003732 1 F0 FE trap_eq
003734 1 C9 49 cmp #'I' ;registers loaded?
003736 1 D0 FE trap_ne
003738 1 E0 4E cpx #'N'
00373A 1 D0 FE trap_ne
00373C 1 C0 41 cpy #('D'-3)
00373E 1 D0 FE trap_ne
003740 1 48 pha ;save a,x
003741 1 8A txa
003742 1 48 pha
003743 1 BA tsx
003744 1 E0 FD cpx #$fd ;check SP
003746 1 D0 FE trap_ne
003748 1 68 pla ;restore x
003749 1 AA tax
00374A 1 A9 FF 48 28 set_stat $ff
00374E 1 68 pla ;restore a
00374F 1 E8 inx ;return registers with modifications
003750 1 49 AA eor #$aa ;N=1, V=1, Z=0, C=1
003752 1 6C 20 37 jmp (ptr_ind_ret)
003755 1 4C 55 37 trap ;runover protection
003758 1 4C 00 04 jmp start ;catastrophic error - cannot continue
00375B 1
00375B 1 ; target for the jump subroutine test
00375B 1 88 dey
00375C 1 88 dey
00375D 1 test_jsr:
00375D 1 08 php ;either SP or Y count will fail, if we do not hit
00375E 1 88 dey
00375F 1 88 dey
003760 1 88 dey
003761 1 28 plp
003762 1 B0 FE trap_cs ;flags loaded?
003764 1 70 FE trap_vs
003766 1 30 FE trap_mi
003768 1 F0 FE trap_eq
00376A 1 C9 4A cmp #'J' ;registers loaded?
00376C 1 D0 FE trap_ne
00376E 1 E0 53 cpx #'S'
003770 1 D0 FE trap_ne
003772 1 C0 4F cpy #('R'-3)
003774 1 D0 FE trap_ne
003776 1 48 pha ;save a,x
003777 1 8A txa
003778 1 48 pha
003779 1 BA tsx ;sp -4? (return addr,a,x)
00377A 1 E0 FB cpx #$fb
00377C 1 D0 FE trap_ne
00377E 1 AD FF 01 lda $1ff ;propper return on stack
003781 1 C9 09 cmp #>jsr_ret
003783 1 D0 FE trap_ne
003785 1 AD FE 01 lda $1fe
003788 1 C9 9A cmp #<jsr_ret
00378A 1 D0 FE trap_ne
00378C 1 A9 FF 48 28 set_stat $ff
003790 1 68 pla ;pull x,a
003791 1 AA tax
003792 1 68 pla
003793 1 E8 inx ;return registers with modifications
003794 1 49 AA eor #$aa ;N=1, V=1, Z=0, C=1
003796 1 60 rts
003797 1 4C 97 37 trap ;runover protection
00379A 1 4C 00 04 jmp start ;catastrophic error - cannot continue
00379D 1
00379D 1 ;trap in case of unexpected IRQ, NMI, BRK, RESET - BRK test target
00379D 1 nmi_trap:
00379D 1 4C 9D 37 trap ;check stack for conditions at NMI
0037A0 1 4C 00 04 jmp start ;catastrophic error - cannot continue
0037A3 1 res_trap:
0037A3 1 4C A3 37 trap ;unexpected RESET
0037A6 1 4C 00 04 jmp start ;catastrophic error - cannot continue
0037A9 1
0037A9 1 88 dey
0037AA 1 88 dey
0037AB 1 irq_trap: ;BRK test or unextpected BRK or IRQ
0037AB 1 08 php ;either SP or Y count will fail, if we do not hit
0037AC 1 88 dey
0037AD 1 88 dey
0037AE 1 88 dey
0037AF 1 ;next traps could be caused by unexpected BRK or IRQ
0037AF 1 ;check stack for BREAK and originating location
0037AF 1 ;possible jump/branch into weeds (uninitialized space)
0037AF 1 C9 BD cmp #$ff-'B' ;BRK pass 2 registers loaded?
0037B1 1 F0 42 beq break2
0037B3 1 C9 42 cmp #'B' ;BRK pass 1 registers loaded?
0037B5 1 D0 FE trap_ne
0037B7 1 E0 52 cpx #'R'
0037B9 1 D0 FE trap_ne
0037BB 1 C0 48 cpy #'K'-3
0037BD 1 D0 FE trap_ne
0037BF 1 85 0A sta irq_a ;save registers during break test
0037C1 1 86 0B stx irq_x
0037C3 1 BA tsx ;test break on stack
0037C4 1 BD 02 01 lda $102,x
0037C7 1 C9 30 cmp_flag 0 ;break test should have B=1 & unused=1 on stack
0037C9 1 D0 FE trap_ne ; - no break flag on stack
0037CB 1 68 pla
0037CC 1 C9 34 cmp_flag intdis ;should have added interrupt disable
0037CE 1 D0 FE trap_ne
0037D0 1 BA tsx
0037D1 1 E0 FC cpx #$fc ;sp -3? (return addr, flags)
0037D3 1 D0 FE trap_ne
0037D5 1 AD FF 01 lda $1ff ;propper return on stack
0037D8 1 C9 09 cmp #>brk_ret0
0037DA 1 D0 FE trap_ne
0037DC 1 AD FE 01 lda $1fe
0037DF 1 C9 D1 cmp #<brk_ret0
0037E1 1 D0 FE trap_ne
0037E3 1 A9 FF load_flag $ff
0037E5 1 48 pha
0037E6 1 A6 0B ldx irq_x
0037E8 1 E8 inx ;return registers with modifications
0037E9 1 A5 0A lda irq_a
0037EB 1 49 AA eor #$aa
0037ED 1 28 plp ;N=1, V=1, Z=1, C=1 but original flags should be restored
0037EE 1 40 rti
0037EF 1 4C EF 37 trap ;runover protection
0037F2 1 4C 00 04 jmp start ;catastrophic error - cannot continue
0037F5 1
0037F5 1 break2: ;BRK pass 2
0037F5 1 E0 AD cpx #$ff-'R'
0037F7 1 D0 FE trap_ne
0037F9 1 C0 B1 cpy #$ff-'K'-3
0037FB 1 D0 FE trap_ne
0037FD 1 85 0A sta irq_a ;save registers during break test
0037FF 1 86 0B stx irq_x
003801 1 BA tsx ;test break on stack
003802 1 BD 02 01 lda $102,x
003805 1 C9 FF cmp_flag $ff ;break test should have B=1
003807 1 D0 FE trap_ne ; - no break flag on stack
003809 1 68 pla
00380A 1 09 08 ora #decmode ;ignore decmode cleared if 65c02
00380C 1 C9 FF cmp_flag $ff ;actual passed flags
00380E 1 D0 FE trap_ne
003810 1 BA tsx
003811 1 E0 FC cpx #$fc ;sp -3? (return addr, flags)
003813 1 D0 FE trap_ne
003815 1 AD FF 01 lda $1ff ;propper return on stack
003818 1 C9 09 cmp #>brk_ret1
00381A 1 D0 FE trap_ne
00381C 1 AD FE 01 lda $1fe
00381F 1 C9 F7 cmp #<brk_ret1
003821 1 D0 FE trap_ne
003823 1 A9 04 load_flag intdis
003825 1 48 pha
003826 1 A6 0B ldx irq_x
003828 1 E8 inx ;return registers with modifications
003829 1 A5 0A lda irq_a
00382B 1 49 AA eor #$aa
00382D 1 28 plp ;N=0, V=0, Z=0, C=0 but original flags should be restored
00382E 1 40 rti
00382F 1 4C 2F 38 trap ;runover protection
003832 1 4C 00 04 jmp start ;catastrophic error - cannot continue
003835 1
003835 1 .if report = 1
003835 1 include "report.i65"
003835 1 .endif
003835 1
003835 1 ;copy of data to initialize BSS segment
003835 1 .if load_data_direct <> 1
003835 1 zp_init:
003835 1 zps_: .byte $80,1 ;additional shift pattern to test zero result & flag
003835 1 zp1_: .byte $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR
003835 1 zp7f_: .byte $7f ;test pattern for compare
003835 1 ;logical zeropage operands
003835 1 zpOR_: .byte 0,$1f,$71,$80 ;test pattern for OR
003835 1 zpAN_: .byte $0f,$ff,$7f,$80 ;test pattern for AND
003835 1 zpEO_: .byte $ff,$0f,$8f,$8f ;test pattern for EOR
003835 1 ;indirect addressing pointers
003835 1 ind1_: .word abs1 ;indirect pointer to pattern in absolute memory
003835 1 .word abs1+1
003835 1 .word abs1+2
003835 1 .word abs1+3
003835 1 .word abs7f
003835 1 inw1_: .word abs1-$f8 ;indirect pointer for wrap-test pattern
003835 1 indt_: .word abst ;indirect pointer to store area in absolute memory
003835 1 .word abst+1
003835 1 .word abst+2
003835 1 .word abst+3
003835 1 inwt_: .word abst-$f8 ;indirect pointer for wrap-test store
003835 1 indAN_: .word absAN ;indirect pointer to AND pattern in absolute memory
003835 1 .word absAN+1
003835 1 .word absAN+2
003835 1 .word absAN+3
003835 1 indEO_: .word absEO ;indirect pointer to EOR pattern in absolute memory
003835 1 .word absEO+1
003835 1 .word absEO+2
003835 1 .word absEO+3
003835 1 indOR_: .word absOR ;indirect pointer to OR pattern in absolute memory
003835 1 .word absOR+1
003835 1 .word absOR+2
003835 1 .word absOR+3
003835 1 ;add/subtract indirect pointers
003835 1 adi2_: .word ada2 ;indirect pointer to operand 2 in absolute memory
003835 1 sbi2_: .word sba2 ;indirect pointer to complemented operand 2 (SBC)
003835 1 adiy2_: .word ada2-$ff ;with offset for indirect indexed
003835 1 sbiy2_: .word sba2-$ff
003835 1 zp_end:
003835 1 .if (zp_end - zp_init) <> (zp_bss_end - zp_bss)
003835 1 ;force assembler error if size is different
003835 1 .error "mismatch between bss and zeropage data"
003835 1 .endif
003835 1 data_init:
003835 1 ex_and_:and #0 ;execute immediate opcodes
003835 1 rts
003835 1 ex_eor_:eor #0 ;execute immediate opcodes
003835 1 rts
003835 1 ex_ora_:ora #0 ;execute immediate opcodes
003835 1 rts
003835 1 ex_adc_:adc #0 ;execute immediate opcodes
003835 1 rts
003835 1 ex_sbc_:sbc #0 ;execute immediate opcodes
003835 1 rts
003835 1 ;zps: .byte $80,1 ;additional shift patterns test zero result & flag
003835 1 abs1_: .byte $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR
003835 1 abs7f_: .byte $7f ;test pattern for compare
003835 1 ;loads
003835 1 fLDx_: .byte fn,fn,0,fz ;expected flags for load
003835 1 ;shifts
003835 1 rASL_: ;expected result ASL & ROL -carry
003835 1 rROL_: .byte 0,2,$86,$04,$82,0
003835 1 rROLc_: .byte 1,3,$87,$05,$83,1 ;expected result ROL +carry
003835 1 rLSR_: ;expected result LSR & ROR -carry
003835 1 rROR_: .byte $40,0,$61,$41,$20,0
003835 1 rRORc_: .byte $c0,$80,$e1,$c1,$a0,$80 ;expected result ROR +carry
003835 1 fASL_: ;expected flags for shifts
003835 1 fROL_: .byte fzc,0,fnc,fc,fn,fz ;no carry in
003835 1 fROLc_: .byte fc,0,fnc,fc,fn,0 ;carry in
003835 1 fLSR_:
003835 1 fROR_: .byte 0,fzc,fc,0,fc,fz ;no carry in
003835 1 fRORc_: .byte fn,fnc,fnc,fn,fnc,fn ;carry in
003835 1 ;increments (decrements)
003835 1 rINC_: .byte $7f,$80,$ff,0,1 ;expected result for INC/DEC
003835 1 fINC_: .byte 0,fn,fn,fz,0 ;expected flags for INC/DEC
003835 1 ;logical memory operand
003835 1 absOR_: .byte 0,$1f,$71,$80 ;test pattern for OR
003835 1 absAN_: .byte $0f,$ff,$7f,$80 ;test pattern for AND
003835 1 absEO_: .byte $ff,$0f,$8f,$8f ;test pattern for EOR
003835 1 ;logical accu operand
003835 1 absORa_:.byte 0,$f1,$1f,0 ;test pattern for OR
003835 1 absANa_:.byte $f0,$ff,$ff,$ff ;test pattern for AND
003835 1 absEOa_:.byte $ff,$f0,$f0,$0f ;test pattern for EOR
003835 1 ;logical results
003835 1 absrlo_:.byte 0,$ff,$7f,$80
003835 1 absflo_:.byte fz,fn,0,fn
003835 1 data_end
003835 1 .if (data_end - data_init) <> (data_bss_end - data_bss)
003835 1 ;force assembler error if size is different
003835 1 .error "mismatch between bss and data"
003835 1 .endif
003835 1
003835 1 vec_init
003835 1 .word nmi_trap
003835 1 .word res_trap
003835 1 .word irq_trap
003835 1 vec_bss equ $fffa
003835 1 .endif ;end of RAM init data
003835 1
003835 1 .if (load_data_direct = 1) & (ROM_vectors = 1)
003835 1 .segment "VECTORS"
003835 1 .org $fffa ;vectors
00FFFA 1 9D 37 .word nmi_trap
00FFFC 1 A3 37 .word res_trap
00FFFE 1 AB 37 .word irq_trap
010000 1 .endif
010000 1