diff --git a/apple2.go b/apple2.go index 3acf9cb..77853f1 100644 --- a/apple2.go +++ b/apple2.go @@ -4,13 +4,13 @@ import ( "fmt" "time" - "github.com/ivanizag/izapple2/core6502" + "github.com/ivanizag/iz6502" ) // Apple2 represents all the components and state of the emulated machine type Apple2 struct { Name string - cpu *core6502.State + cpu *iz6502.State mmu *memoryManager io *ioC0Page cg *CharacterGenerator diff --git a/apple2Setup.go b/apple2Setup.go index 3407794..c785338 100644 --- a/apple2Setup.go +++ b/apple2Setup.go @@ -3,7 +3,7 @@ package izapple2 import ( "errors" - "github.com/ivanizag/izapple2/core6502" + "github.com/ivanizag/iz6502" "github.com/ivanizag/izapple2/storage" ) @@ -30,14 +30,14 @@ func (a *Apple2) setup(clockMhz float64, fastMode bool) { func setApple2plus(a *Apple2) { a.Name = "Apple ][+" - a.cpu = core6502.NewNMOS6502(a.mmu) + a.cpu = iz6502.NewNMOS6502(a.mmu) addApple2SoftSwitches(a.io) } func setApple2e(a *Apple2) { a.Name = "Apple IIe" a.isApple2e = true - a.cpu = core6502.NewNMOS6502(a.mmu) + a.cpu = iz6502.NewNMOS6502(a.mmu) a.mmu.initExtendedRAM(1) addApple2SoftSwitches(a.io) addApple2ESoftSwitches(a.io) @@ -46,7 +46,7 @@ func setApple2e(a *Apple2) { func setApple2eEnhanced(a *Apple2) { a.Name = "Apple //e" a.isApple2e = true - a.cpu = core6502.NewCMOS65c02(a.mmu) + a.cpu = iz6502.NewCMOS65c02(a.mmu) a.mmu.initExtendedRAM(1) addApple2SoftSwitches(a.io) addApple2ESoftSwitches(a.io) diff --git a/base64a.go b/base64a.go index 685ee7a..467d90a 100644 --- a/base64a.go +++ b/base64a.go @@ -3,7 +3,7 @@ package izapple2 import ( "fmt" - "github.com/ivanizag/izapple2/core6502" + "github.com/ivanizag/iz6502" "github.com/ivanizag/izapple2/storage" ) @@ -13,7 +13,7 @@ import ( func setBase64a(a *Apple2) { a.Name = "Base 64A" - a.cpu = core6502.NewNMOS6502(a.mmu) + a.cpu = iz6502.NewNMOS6502(a.mmu) addApple2SoftSwitches(a.io) addBase64aSoftSwitches(a.io) } diff --git a/core6502/addressing.go b/core6502/addressing.go deleted file mode 100644 index 4276e96..0000000 --- a/core6502/addressing.go +++ /dev/null @@ -1,210 +0,0 @@ -package core6502 - -import "fmt" - -const ( - modeImplicit = iota + 1 - modeImplicitX - modeImplicitY - modeAccumulator - modeImmediate - modeZeroPage - modeZeroPageX - modeZeroPageY - modeRelative - modeAbsolute - modeAbsoluteX - modeAbsoluteX65c02 - modeAbsoluteY - modeIndirect - modeIndexedIndirectX - modeIndirectIndexedY - // Added on the 65c02 - modeIndirect65c02Fix - modeIndirectZeroPage - modeAbsoluteIndexedIndirectX - modeZeroPageAndRelative -) - -func getWordInLine(line []uint8) uint16 { - return uint16(line[1]) + 0x100*uint16(line[2]) -} - -func resolveValue(s *State, line []uint8, opcode opcode) uint8 { - switch opcode.addressMode { - case modeAccumulator: - return s.reg.getA() - case modeImplicitX: - return s.reg.getX() - case modeImplicitY: - return s.reg.getY() - case modeImmediate: - return line[1] - } - - // The value is in memory - address := resolveAddress(s, line, opcode) - return s.mem.Peek(address) -} - -func resolveSetValue(s *State, line []uint8, opcode opcode, value uint8) { - switch opcode.addressMode { - case modeAccumulator: - s.reg.setA(value) - return - case modeImplicitX: - s.reg.setX(value) - return - case modeImplicitY: - s.reg.setY(value) - return - } - - // The value is in memory - address := resolveAddress(s, line, opcode) - s.mem.Poke(address, value) - - // On writes, the possible extra cycle crossing page boundaries is - // added and already accounted for on NMOS - if opcode.addressMode != modeAbsoluteX65c02 { - s.extraCycleCrossingBoundaries = false - } -} - -func resolveAddress(s *State, line []uint8, opcode opcode) uint16 { - var address uint16 - extraCycle := false - - switch opcode.addressMode { - case modeZeroPage: - address = uint16(line[1]) - case modeZeroPageX: - address = uint16(line[1] + s.reg.getX()) - case modeZeroPageY: - address = uint16(line[1] + s.reg.getY()) - case modeAbsolute: - address = getWordInLine(line) - case modeAbsoluteX65c02: - fallthrough - case modeAbsoluteX: - base := getWordInLine(line) - address, extraCycle = addOffset(base, s.reg.getX()) - case modeAbsoluteY: - base := getWordInLine(line) - address, extraCycle = addOffset(base, s.reg.getY()) - case modeIndexedIndirectX: - addressAddress := line[1] + s.reg.getX() - address = getZeroPageWord(s.mem, addressAddress) - case modeIndirect: - addressAddress := getWordInLine(line) - address = getWordNoCrossPage(s.mem, addressAddress) - case modeIndirect65c02Fix: - addressAddress := getWordInLine(line) - address = getWord(s.mem, addressAddress) - case modeIndirectIndexedY: - base := getZeroPageWord(s.mem, line[1]) - address, extraCycle = addOffset(base, s.reg.getY()) - // 65c02 additions - case modeIndirectZeroPage: - address = getZeroPageWord(s.mem, line[1]) - case modeAbsoluteIndexedIndirectX: - addressAddress := getWordInLine(line) + uint16(s.reg.getX()) - address = getWord(s.mem, addressAddress) - case modeRelative: - // This assumes that PC is already pointing to the next instruction - base := s.reg.getPC() - address, extraCycle = addOffsetRelative(base, line[1]) - case modeZeroPageAndRelative: - // Two addressing modes combined. We refer to the second one, relative, - // placed one byte after the zeropage reference - base := s.reg.getPC() - address, _ = addOffsetRelative(base, line[2]) - default: - panic("Assert failed. Missing addressing mode") - } - - if extraCycle { - s.extraCycleCrossingBoundaries = true - } - - return address -} - -/* -Note: extra cycle on reads when crossing page boundaries. - -Only for: - modeAbsoluteX - modeAbsoluteY - modeIndirectIndexedY - modeRelative - modeZeroPageAndRelative -That is when we add a 8 bit offset to a 16 bit base. The reason is -that if don't have a page crossing the CPU optimizes one cycle assuming -that the MSB addition won't change. If it does we spend this extra cycle. - -Note that for writes we don't add a cycle in this case. There is no -optimization that could make a double write. The regular cycle count -is alwaus the same with no optimization. -*/ -func addOffset(base uint16, offset uint8) (uint16, bool) { - dest := base + uint16(offset) - if (base & 0xff00) != (dest & 0xff00) { - return dest, true - } - return dest, false -} - -func addOffsetRelative(base uint16, offset uint8) (uint16, bool) { - dest := base + uint16(int8(offset)) - if (base & 0xff00) != (dest & 0xff00) { - return dest, true - } - return dest, false -} - -func lineString(line []uint8, opcode opcode) string { - t := opcode.name - switch opcode.addressMode { - case modeImplicit: - case modeImplicitX: - case modeImplicitY: - //Nothing - case modeAccumulator: - t += " A" - case modeImmediate: - t += fmt.Sprintf(" #$%02x", line[1]) - case modeZeroPage: - t += fmt.Sprintf(" $%02x", line[1]) - case modeZeroPageX: - t += fmt.Sprintf(" $%02x,X", line[1]) - case modeZeroPageY: - t += fmt.Sprintf(" $%02x,Y", line[1]) - case modeRelative: - t += fmt.Sprintf(" *%+x", int8(line[1])) - case modeAbsolute: - t += fmt.Sprintf(" $%04x", getWordInLine(line)) - case modeAbsoluteX65c02: - fallthrough - case modeAbsoluteX: - t += fmt.Sprintf(" $%04x,X", getWordInLine(line)) - case modeAbsoluteY: - t += fmt.Sprintf(" $%04x,Y", getWordInLine(line)) - case modeIndirect: - t += fmt.Sprintf(" ($%04x)", getWordInLine(line)) - case modeIndexedIndirectX: - t += fmt.Sprintf(" ($%02x,X)", line[1]) - case modeIndirectIndexedY: - t += fmt.Sprintf(" ($%02x),Y", line[1]) - // 65c02 additions: - case modeIndirectZeroPage: - t += fmt.Sprintf(" ($%02x)", line[1]) - case modeAbsoluteIndexedIndirectX: - t += fmt.Sprintf(" ($%04x,X)", getWordInLine(line)) - case modeZeroPageAndRelative: - t += fmt.Sprintf(" $%02x %+x", line[1], int8(line[2])) - default: - t += "UNKNOWN MODE" - } - return t -} diff --git a/core6502/cmos65c02.go b/core6502/cmos65c02.go deleted file mode 100644 index 646cbfe..0000000 --- a/core6502/cmos65c02.go +++ /dev/null @@ -1,173 +0,0 @@ -package core6502 - -/* -For the diffrences with NMOS6502 see: - http://6502.org/tutorials/65c02opcodes.html - http://wilsonminesco.com/NMOS-CMOSdif/ - http://www.obelisk.me.uk/65C02/reference.html - http://www.obelisk.me.uk/65C02/addressing.html - http://anyplatform.net/media/guides/cpus/65xx%20Processor%20Data.txt -*/ - -// NewCMOS65c02 returns an initialized 65c02 -func NewCMOS65c02(m Memory) *State { - var s State - s.mem = m - - var opcodes [256]opcode - for i := 0; i < 256; i++ { - opcodes[i] = opcodesNMOS6502[i] - if opcodes65c02Delta[i].cycles != 0 { - opcodes[i] = opcodes65c02Delta[i] - } - } - add65c02NOPs(&opcodes) - s.opcodes = &opcodes - return &s -} - -func add65c02NOPs(opcodes *[256]opcode) { - nop11 := opcode{"NOP", 1, 1, modeImplicit, opNOP} - nop22 := opcode{"NOP", 2, 2, modeImmediate, opNOP} - nop23 := opcode{"NOP", 2, 3, modeImmediate, opNOP} - nop24 := opcode{"NOP", 2, 4, modeImmediate, opNOP} - nop34 := opcode{"NOP", 3, 4, modeAbsolute, opNOP} - - opcodes[0x02] = nop22 - opcodes[0x22] = nop22 - opcodes[0x42] = nop22 - opcodes[0x62] = nop22 - opcodes[0x82] = nop22 - opcodes[0xc2] = nop22 - opcodes[0xe2] = nop22 - - opcodes[0x44] = nop23 - opcodes[0x54] = nop24 - opcodes[0xD4] = nop24 - opcodes[0xF4] = nop24 - - opcodes[0x5c] = nop34 - opcodes[0xdc] = nop34 - opcodes[0xfc] = nop34 - - for i := 0; i < 0x100; i = i + 0x10 { - opcodes[i+0x03] = nop11 - // RMB and SMB; opcodes[i+0x07] = nop11 - opcodes[i+0x0b] = nop11 - // BBR and BBS: opcodes[i+0x0f] = nop11 - } - - /* Changes for Rockwell65c02 - nop12 := opcode{"NOP", 1, 2, modeImplicit, opNOP} - opcodes[0xcb] = nop12 - opcodes[0xdb] = nop24 - */ - - // Detection of 65c816 - opcodes[0xbf].name = "XCE" -} - -var opcodes65c02Delta = [256]opcode{ - // Functional difference - 0x00: {"BRK", 1, 7, modeImplicit, opBRKAlt}, - 0x24: {"BIT", 2, 3, modeZeroPage, opBIT}, - 0x6C: {"JMP", 3, 6, modeIndirect65c02Fix, opJMP}, - - // Fixed BCD arithmetic flags - 0x69: {"ADC", 2, 2, modeImmediate, opADCAlt}, - 0x65: {"ADC", 2, 3, modeZeroPage, opADCAlt}, - 0x75: {"ADC", 2, 4, modeZeroPageX, opADCAlt}, - 0x6D: {"ADC", 3, 4, modeAbsolute, opADCAlt}, - 0x7D: {"ADC", 3, 4, modeAbsoluteX, opADCAlt}, // Extra cycles - 0x79: {"ADC", 3, 4, modeAbsoluteY, opADCAlt}, // Extra cycles - 0x61: {"ADC", 2, 6, modeIndexedIndirectX, opADCAlt}, - 0x71: {"ADC", 2, 5, modeIndirectIndexedY, opADCAlt}, // Extra cycles - 0xE9: {"SBC", 2, 2, modeImmediate, opSBCAlt}, - 0xE5: {"SBC", 2, 3, modeZeroPage, opSBCAlt}, - 0xF5: {"SBC", 2, 4, modeZeroPageX, opSBCAlt}, - 0xED: {"SBC", 3, 4, modeAbsolute, opSBCAlt}, - 0xFD: {"SBC", 3, 4, modeAbsoluteX, opSBCAlt}, // Extra cycles - 0xF9: {"SBC", 3, 4, modeAbsoluteY, opSBCAlt}, // Extra cycles - 0xE1: {"SBC", 2, 6, modeIndexedIndirectX, opSBCAlt}, - 0xF1: {"SBC", 2, 5, modeIndirectIndexedY, opSBCAlt}, // Extra cycles - - // Different cycle count - 0x1e: {"ASL", 3, 6, modeAbsoluteX65c02, buildOpShift(true, false)}, - 0x3e: {"ROL", 3, 6, modeAbsoluteX65c02, buildOpShift(true, true)}, - 0x5e: {"LSR", 3, 6, modeAbsoluteX65c02, buildOpShift(false, false)}, - 0x7e: {"ROR", 3, 6, modeAbsoluteX65c02, buildOpShift(false, true)}, - - // New indirect zero page addresssing mode - 0x12: {"ORA", 2, 5, modeIndirectZeroPage, buildOpLogic(operationOr)}, - 0x32: {"AND", 2, 5, modeIndirectZeroPage, buildOpLogic(operationAnd)}, - 0x52: {"EOR", 2, 5, modeIndirectZeroPage, buildOpLogic(operationXor)}, - 0x72: {"ADC", 2, 5, modeIndirectZeroPage, opADCAlt}, - 0x92: {"STA", 2, 5, modeIndirectZeroPage, buildOpStore(regA)}, - 0xb2: {"LDA", 2, 5, modeIndirectZeroPage, buildOpLoad(regA)}, - 0xd2: {"CMP", 2, 5, modeIndirectZeroPage, buildOpCompare(regA)}, - 0xf2: {"SBC", 2, 5, modeIndirectZeroPage, opSBCAlt}, - - // New addressing options - 0x89: {"BIT", 2, 2, modeImmediate, opBIT}, - 0x34: {"BIT", 2, 4, modeZeroPageX, opBIT}, - 0x3c: {"BIT", 3, 4, modeAbsoluteX, opBIT}, // Extra cycles - 0x1a: {"INC", 1, 2, modeAccumulator, buildOpIncDec(true)}, - 0x3a: {"DEC", 1, 2, modeAccumulator, buildOpIncDec(false)}, - 0x7c: {"JMP", 3, 6, modeAbsoluteIndexedIndirectX, opJMP}, - - // Additional instructions: BRA, PHX, PHY, PLX, PLY, STZ, TRB, TSB - 0xda: {"PHX", 1, 3, modeImplicit, buildOpPush(regX)}, - 0x5a: {"PHY", 1, 3, modeImplicit, buildOpPush(regY)}, - 0xfa: {"PLX", 1, 4, modeImplicit, buildOpPull(regX)}, - 0x7a: {"PLY", 1, 4, modeImplicit, buildOpPull(regY)}, - 0x80: {"BRA", 2, 3, modeRelative, opJMP}, // Extra cycles - - 0x64: {"STZ", 2, 3, modeZeroPage, opSTZ}, - 0x74: {"STZ", 2, 4, modeZeroPageX, opSTZ}, - 0x9c: {"STZ", 3, 4, modeAbsolute, opSTZ}, - 0x9e: {"STZ", 3, 5, modeAbsoluteX, opSTZ}, - - 0x14: {"TRB", 2, 5, modeZeroPage, opTRB}, - 0x1c: {"TRB", 3, 6, modeAbsolute, opTRB}, - - 0x04: {"TSB", 2, 5, modeZeroPage, opTSB}, - 0x0c: {"TSB", 3, 6, modeAbsolute, opTSB}, - - // Additional in Rockwell 65c02 and WDC 65c02? - // They have a double addressing mode: zeropage and relative. - 0x0f: {"BBR0", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(0, false)}, // Extra cycles - 0x1f: {"BBR1", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(1, false)}, // Extra cycles - 0x2f: {"BBR2", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(2, false)}, // Extra cycles - 0x3f: {"BBR3", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(3, false)}, // Extra cycles - 0x4f: {"BBR4", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(4, false)}, // Extra cycles - 0x5f: {"BBR5", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(5, false)}, // Extra cycles - 0x6f: {"BBR6", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(6, false)}, // Extra cycles - 0x7f: {"BBR7", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(7, false)}, // Extra cycles - 0x8f: {"BBS0", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(0, true)}, // Extra cycles - 0x9f: {"BBS1", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(1, true)}, // Extra cycles - 0xaf: {"BBS2", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(2, true)}, // Extra cycles - 0xbf: {"BBS3", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(3, true)}, // Extra cycles - 0xcf: {"BBS4", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(4, true)}, // Extra cycles - 0xdf: {"BBS5", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(5, true)}, // Extra cycles - 0xef: {"BBS6", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(6, true)}, // Extra cycles - 0xff: {"BBS7", 3, 6, modeZeroPageAndRelative, buildOpBranchOnBit(7, true)}, // Extra cycles - - 0x07: {"RMB0", 2, 5, modeZeroPage, buildOpSetBit(0, false)}, - 0x17: {"RMB1", 2, 5, modeZeroPage, buildOpSetBit(1, false)}, - 0x27: {"RMB2", 2, 5, modeZeroPage, buildOpSetBit(2, false)}, - 0x37: {"RMB3", 2, 5, modeZeroPage, buildOpSetBit(3, false)}, - 0x47: {"RMB4", 2, 5, modeZeroPage, buildOpSetBit(4, false)}, - 0x57: {"RMB5", 2, 5, modeZeroPage, buildOpSetBit(5, false)}, - 0x67: {"RMB6", 2, 5, modeZeroPage, buildOpSetBit(6, false)}, - 0x77: {"RMB7", 2, 5, modeZeroPage, buildOpSetBit(7, false)}, - 0x87: {"SMB0", 2, 5, modeZeroPage, buildOpSetBit(0, true)}, - 0x97: {"SMB1", 2, 5, modeZeroPage, buildOpSetBit(1, true)}, - 0xa7: {"SMB2", 2, 5, modeZeroPage, buildOpSetBit(2, true)}, - 0xb7: {"SMB3", 2, 5, modeZeroPage, buildOpSetBit(3, true)}, - 0xc7: {"SMB4", 2, 5, modeZeroPage, buildOpSetBit(4, true)}, - 0xd7: {"SMB5", 2, 5, modeZeroPage, buildOpSetBit(5, true)}, - 0xe7: {"SMB6", 2, 5, modeZeroPage, buildOpSetBit(6, true)}, - 0xf7: {"SMB7", 2, 5, modeZeroPage, buildOpSetBit(7, true)}, - - // Maybe additional Rockwell: STP, WAI -} diff --git a/core6502/cmos65c02_test.go b/core6502/cmos65c02_test.go deleted file mode 100644 index af796c6..0000000 --- a/core6502/cmos65c02_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package core6502 - -import ( - "testing" -) - -func TestCMOs65c02NoUndocumented(t *testing.T) { - m := new(FlatMemory) - s := NewCMOS65c02(m) - - for i := 0; i < 256; i++ { - if s.opcodes[i].cycles == 0 { - t.Errorf("Opcode missing for $%02x.", i) - } - } -} - -func TestCMOS65c02asNMOS(t *testing.T) { - m := new(FlatMemory) - s := NewCMOS65c02(m) - - m.loadBinary("testdata/6502_functional_test.bin") - executeSuite(t, s, 0x200, 240, false, 255) -} - -func TestCMOS65c02(t *testing.T) { - m := new(FlatMemory) - s := NewCMOS65c02(m) - - m.loadBinary("testdata/65C02_extended_opcodes_test.bin") - executeSuite(t, s, 0x202, 240, false, 255) -} diff --git a/core6502/execute.go b/core6502/execute.go deleted file mode 100644 index 8bd7125..0000000 --- a/core6502/execute.go +++ /dev/null @@ -1,183 +0,0 @@ -package core6502 - -import ( - "encoding/binary" - "fmt" - "io" -) - -// https://www.masswerk.at/6502/6502_instruction_set.html -// http://www.emulator101.com/reference/6502-reference.html -// https://www.csh.rit.edu/~moffitt/docs/6502.html#FLAGS -// https://ia800509.us.archive.org/18/items/Programming_the_6502/Programming_the_6502.pdf - -const ( - maxInstructionSize = 3 -) - -// State represents the state of the simulated device -type State struct { - opcodes *[256]opcode - trace bool - - reg registers - mem Memory - cycles uint64 - - extraCycleCrossingBoundaries bool - extraCycleBranchTaken bool - extraCycleBCD bool - lineCache []uint8 - // We cache the allocation of a line to avoid a malloc per instruction. To be used only - // by ExecuteInstruction(). 2x speedup on the emulation!! -} - -const ( - vectorNMI uint16 = 0xfffa - vectorReset uint16 = 0xfffc - vectorBreak uint16 = 0xfffe -) - -type opcode struct { - name string - bytes uint16 - cycles int - addressMode int - action opFunc -} - -type opFunc func(s *State, line []uint8, opcode opcode) - -func (s *State) executeLine(line []uint8) { - opcode := s.opcodes[line[0]] - if opcode.cycles == 0 { - panic(fmt.Sprintf("Unknown opcode 0x%02x\n", line[0])) - } - opcode.action(s, line, opcode) -} - -// ExecuteInstruction transforms the state given after a single instruction is executed. -func (s *State) ExecuteInstruction() { - pc := s.reg.getPC() - opcodeID := s.mem.PeekCode(pc) - opcode := s.opcodes[opcodeID] - - if opcode.cycles == 0 { - panic(fmt.Sprintf("Unknown opcode 0x%02x\n", opcodeID)) - } - - if s.lineCache == nil { - s.lineCache = make([]uint8, maxInstructionSize) - } - for i := uint16(0); i < opcode.bytes; i++ { - s.lineCache[i] = s.mem.PeekCode(pc) - pc++ - } - s.reg.setPC(pc) - - if s.trace { - //fmt.Printf("%#04x %#02x\n", pc-opcode.bytes, opcodeID) - fmt.Printf("%#04x %-13s: ", pc-opcode.bytes, lineString(s.lineCache, opcode)) - } - opcode.action(s, s.lineCache, opcode) - s.cycles += uint64(opcode.cycles) - - // Extra cycles - if s.extraCycleBranchTaken { - s.cycles++ - s.extraCycleBranchTaken = false - } - if s.extraCycleCrossingBoundaries { - s.cycles++ - s.extraCycleCrossingBoundaries = false - } - if s.extraCycleBCD { - s.cycles++ - s.extraCycleBCD = false - } - - if s.trace { - fmt.Printf("%v, [%02x]\n", s.reg, s.lineCache[0:opcode.bytes]) - } -} - -// Reset resets the processor. Moves the program counter to the vector in 0cfffc. -func (s *State) Reset() { - startAddress := getWord(s.mem, vectorReset) - s.cycles += 6 - s.reg.setPC(startAddress) -} - -// GetCycles returns the count of CPU cycles since last reset. -func (s *State) GetCycles() uint64 { - return s.cycles -} - -// SetTrace activates tracing of the cpu execution -func (s *State) SetTrace(trace bool) { - s.trace = trace -} - -// GetTrace gets trhe tracing state of the cpu execution -func (s *State) GetTrace() bool { - return s.trace -} - -// SetMemory changes the memory provider -func (s *State) SetMemory(mem Memory) { - s.mem = mem -} - -// GetPCAndSP returns the current program counter and stack pointer. Used to trace MLI calls -func (s *State) GetPCAndSP() (uint16, uint8) { - return s.reg.getPC(), s.reg.getSP() -} - -// GetCarryAndAcc returns the value of the carry flag and the accumulator. Used to trace MLI calls -func (s *State) GetCarryAndAcc() (bool, uint8) { - return s.reg.getFlag(flagC), s.reg.getA() -} - -// GetAXYP returns the value of the A, X, Y and P registers -func (s *State) GetAXYP() (uint8, uint8, uint8, uint8) { - return s.reg.getA(), s.reg.getX(), s.reg.getY(), s.reg.getP() -} - -// SetAXYP changes the value of the A, X, Y and P registers -func (s *State) SetAXYP(regA uint8, regX uint8, regY uint8, regP uint8) { - s.reg.setA(regA) - s.reg.setX(regX) - s.reg.setY(regY) - s.reg.setP(regP) -} - -// SetPC changes the program counter, as a JMP instruction -func (s *State) SetPC(pc uint16) { - s.reg.setPC(pc) -} - -// Save saves the CPU state (registers and cycle counter) -func (s *State) Save(w io.Writer) error { - err := binary.Write(w, binary.BigEndian, s.cycles) - if err != nil { - return err - } - binary.Write(w, binary.BigEndian, s.reg.data) - if err != nil { - return err - } - return nil -} - -// Load loads the CPU state (registers and cycle counter) -func (s *State) Load(r io.Reader) error { - err := binary.Read(r, binary.BigEndian, &s.cycles) - if err != nil { - return err - } - err = binary.Read(r, binary.BigEndian, &s.reg.data) - if err != nil { - return err - } - return nil -} diff --git a/core6502/execute_test.go b/core6502/execute_test.go deleted file mode 100644 index 41f9dca..0000000 --- a/core6502/execute_test.go +++ /dev/null @@ -1,485 +0,0 @@ -package core6502 - -import ( - "testing" -) - -func TestLoad(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.executeLine([]uint8{0xA9, 0x42}) - if s.reg.getA() != 0x42 { - t.Error("Error in LDA #") - } - - s.executeLine([]uint8{0xA9, 0x00}) - if s.reg.getP() != flagZ { - t.Error("Error in flags for LDA $0") - } - - s.executeLine([]uint8{0xA9, 0xF0}) - if s.reg.getP() != flagN { - t.Error("Error in flags for LDA $F0") - } - - s.executeLine([]uint8{0xA0, 0xFE}) - if s.reg.getY() != 0xFE { - t.Error("Error in LDY #") - } - - s.mem.Poke(0x38, 0x87) - s.executeLine([]uint8{0xA5, 0x38}) - if s.reg.getA() != 0x87 { - t.Error("Error in LDA zpg") - } - - s.mem.Poke(0x57, 0x90) - s.reg.setX(0x10) - s.executeLine([]uint8{0xB5, 0x47}) - if s.reg.getA() != 0x90 { - t.Error("Error in LDA zpg, X") - } - - s.mem.Poke(0x38, 0x12) - s.reg.setX(0x89) - s.executeLine([]uint8{0xB5, 0xAF}) - if s.reg.getA() != 0x12 { - t.Error("Error in LDA zpgX with sero page overflow") - } - - s.mem.Poke(0x1234, 0x67) - s.executeLine([]uint8{0xAD, 0x34, 0x12}) - if s.reg.getA() != 0x67 { - t.Error("Error in LDA abs") - } - - s.mem.Poke(0xC057, 0x7E) - s.reg.setX(0x57) - s.executeLine([]uint8{0xBD, 0x00, 0xC0}) - if s.reg.getA() != 0x7E { - t.Error("Error in LDA abs, X") - } - - s.mem.Poke(0xD059, 0x7A) - s.reg.setY(0x59) - s.executeLine([]uint8{0xB9, 0x00, 0xD0}) - if s.reg.getA() != 0x7A { - t.Error("Error in LDA abs, Y") - } - - s.mem.Poke(0x24, 0x74) - s.mem.Poke(0x25, 0x20) - s.reg.setX(0x04) - s.mem.Poke(0x2074, 0x66) - s.executeLine([]uint8{0xA1, 0x20}) - if s.reg.getA() != 0x66 { - t.Error("Error in LDA (oper,X)") - } - - s.mem.Poke(0x86, 0x28) - s.mem.Poke(0x87, 0x40) - s.reg.setY(0x10) - s.mem.Poke(0x4038, 0x99) - s.executeLine([]uint8{0xB1, 0x86}) - if s.reg.getA() != 0x99 { - t.Error("Error in LDA (oper),Y") - } -} - -func TestStore(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - s.reg.setA(0x10) - s.reg.setX(0x40) - s.reg.setY(0x80) - - s.executeLine([]uint8{0x85, 0x50}) - if s.mem.Peek(0x0050) != 0x10 { - t.Error("Error in STA zpg") - } - - s.executeLine([]uint8{0x86, 0x51}) - if s.mem.Peek(0x0051) != 0x40 { - t.Error("Error in STX zpg") - } - - s.executeLine([]uint8{0x84, 0x52}) - if s.mem.Peek(0x0052) != 0x80 { - t.Error("Error in STY zpg") - } - - s.executeLine([]uint8{0x8D, 0x20, 0xC0}) - if s.mem.Peek(0xC020) != 0x10 { - t.Error("Error in STA abs") - } - - s.executeLine([]uint8{0x9D, 0x08, 0x10}) - if s.mem.Peek(0x1048) != 0x10 { - t.Error("Error in STA abs, X") - } -} - -func TestTransfer(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0xB0) - s.executeLine([]uint8{0xAA}) - if s.reg.getX() != 0xB0 { - t.Error("Error in TAX") - } - if s.reg.getP() != flagN { - t.Error("Error in TAX flags") - } - - s.reg.setA(0xB1) - s.executeLine([]uint8{0xA8}) - if s.reg.getY() != 0xB1 { - t.Error("Error in TAY") - } - - s.reg.setSP(0xB2) - s.executeLine([]uint8{0xBA}) - if s.reg.getX() != 0xB2 { - t.Error("Error in TSX") - } - - s.reg.setX(0xB3) - s.executeLine([]uint8{0x8A}) - if s.reg.getA() != 0xB3 { - t.Error("Error in TXA") - } - - s.reg.setX(0xB4) - s.executeLine([]uint8{0x9A}) - if s.reg.getSP() != 0xB4 { - t.Error("Error in TXS") - } - - s.reg.setY(0xB5) - s.executeLine([]uint8{0x98}) - if s.reg.getA() != 0xB5 { - t.Error("Error in TYA") - } -} - -func TestIncDec(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setX(0x7E) - s.executeLine([]uint8{0xE8}) - if s.reg.getX() != 0x7F { - t.Errorf("Error in INX") - } - - s.reg.setY(0xFC) - s.executeLine([]uint8{0x88}) - if s.reg.getY() != 0xFB { - t.Error("Error in DEY") - } - if s.reg.getP() != flagN { - t.Error("Error in DEY flags") - } -} - -func TestShiftRotate(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0xF0) - s.executeLine([]uint8{0x2A}) - if s.reg.getA() != 0xE0 { - t.Errorf("Error in ROL") - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in ROL carry. %v", s.reg) - } - - s.reg.setFlag(flagC) - s.reg.setA(0x0F) - s.executeLine([]uint8{0x6A}) - if s.reg.getA() != 0x87 { - t.Errorf("Error in ROR. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in ROR carry") - } - - s.reg.setFlag(flagC) - s.reg.setA(0x81) - s.executeLine([]uint8{0x0A}) - if s.reg.getA() != 0x02 { - t.Errorf("Error in ASL. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in ASL carry") - } - - s.reg.setFlag(flagC) - s.reg.setA(0x02) - s.executeLine([]uint8{0x4A}) - if s.reg.getA() != 0x01 { - t.Errorf("Error in LSR. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in LSR carry") - } -} - -func TestClearSetFlag(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - s.reg.setP(0x00) - - s.executeLine([]uint8{0xF8}) - if !s.reg.getFlag(flagD) { - t.Errorf("Error in SED. %v", s.reg) - } - - s.executeLine([]uint8{0xD8}) - if s.reg.getFlag(flagD) { - t.Errorf("Error in CLD. %v", s.reg) - } - -} - -func TestLogic(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0xF0) - s.executeLine([]uint8{0x29, 0x1C}) - if s.reg.getA() != 0x10 { - t.Errorf("Error in AND <. %v", s.reg) - } - - s.reg.setA(0xF0) - s.executeLine([]uint8{0x49, 0x1C}) - if s.reg.getA() != 0xEC { - t.Errorf("Error in EOR <. %v", s.reg) - } - - s.reg.setA(0xF0) - s.executeLine([]uint8{0x09, 0x0C}) - if s.reg.getA() != 0xFC { - t.Errorf("Error in ORA <. %v", s.reg) - } -} - -func TestAdd(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0xA0) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0x69, 0x0B}) - if s.reg.getA() != 0xAB { - t.Errorf("Error in ADC. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in carry ADC. %v", s.reg) - } - - s.reg.setA(0xFF) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0x69, 0x02}) - if s.reg.getA() != 0x01 { - t.Errorf("Error in ADC with carry. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in carry ADC with carry. %v", s.reg) - } - - s.reg.setA(0xA0) - s.reg.setFlag(flagC) - s.executeLine([]uint8{0x69, 0x01}) - if s.reg.getA() != 0xA2 { - t.Errorf("Error in carried ADC with carry. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in carry in carried ADC with carry. %v", s.reg) - } -} - -func TestAddDecimal(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - s.reg.setFlag(flagD) - - s.reg.setA(0x12) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0x69, 0x013}) - if s.reg.getA() != 0x25 { - t.Errorf("Error in ADC decimal. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in carry ADC. %v", s.reg) - } - - s.reg.setA(0x44) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0x69, 0x68}) - if s.reg.getA() != 0x12 { - t.Errorf("Error in ADC decimal with carry. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in carry ADC decimal with carry. %v", s.reg) - } - - s.reg.setA(0x44) - s.reg.setFlag(flagC) - s.executeLine([]uint8{0x69, 0x23}) - if s.reg.getA() != 0x68 { - t.Errorf("Error in carried ADC decimal with carry. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in carry in carried ADC decimal with carry. %v", s.reg) - } -} - -func TestSub(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0x09) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0xE9, 0x05}) - if s.reg.getA() != 0x03 { - t.Errorf("Error in SBC. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in carry SBC. %v", s.reg) - } - - s.reg.setA(0x01) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0xE9, 0x02}) - if s.reg.getA() != 0xFE { - t.Errorf("Error in SBC with carry. %v", s.reg) - } - if s.reg.getFlag(flagC) { - t.Errorf("Error in carry SBC with carry. %v", s.reg) - } - - s.reg.setA(0x08) - s.reg.setFlag(flagC) - s.executeLine([]uint8{0xE9, 0x02}) - if s.reg.getA() != 0x06 { - t.Errorf("Error in carried SBC with carry. %v", s.reg) - } - if !s.reg.getFlag(flagC) { - t.Errorf("Error in carry in carried SBC with carry. %v", s.reg) - } - -} - -func TestCompare(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0x02) - s.executeLine([]uint8{0xC9, 0x01}) - if s.reg.getP() != 0x01 { - t.Errorf("Error in CMP <. %v", s.reg) - } - - s.executeLine([]uint8{0xC9, 0x02}) - if s.reg.getP() != 0x03 { - t.Errorf("Error in CMP =. %v", s.reg) - } - - s.executeLine([]uint8{0xC9, 0x03}) - if s.reg.getP() != 0x80 { - t.Errorf("Error in CMP >. %v", s.reg) - } - - s.reg.setX(0x04) - s.executeLine([]uint8{0xE0, 0x05}) - if s.reg.getP() != 0x80 { - t.Errorf("Error in CPX >. %v", s.reg) - } - - s.reg.setY(0x08) - s.executeLine([]uint8{0xC0, 0x09}) - if s.reg.getP() != 0x80 { - t.Errorf("Error in CPY >. %v", s.reg) - } - -} -func TestBit(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setA(0x0F) - s.mem.Poke(0x0040, 0xF0) - s.executeLine([]uint8{0x24, 0x40}) - if s.reg.getP() != 0xC2 { - t.Errorf("Error in BIT. %v", s.reg) - } - - s.reg.setA(0xF0) - s.mem.Poke(0x0040, 0xF0) - s.executeLine([]uint8{0x24, 0x40}) - if s.reg.getP() != 0xC0 { - t.Errorf("Error in BIT, 2. %v", s.reg) - } - - s.reg.setA(0xF0) - s.mem.Poke(0x01240, 0x80) - s.executeLine([]uint8{0x2C, 0x40, 0x12}) - if s.reg.getP() != 0x80 { - t.Errorf("Error in BIT, 2. %v", s.reg) - } -} - -func TestBranch(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setPC(0xC600) - s.reg.setFlag(flagV) - s.executeLine([]uint8{0x50, 0x20}) - if s.reg.getPC() != 0xC600 { - t.Errorf("Error in BVC, %v", s.reg) - } - - s.executeLine([]uint8{0x70, 0x20}) - if s.reg.getPC() != 0xC620 { - t.Errorf("Error in BVS, %v", s.reg) - } - - s.reg.setPC(0xD600) - s.reg.clearFlag(flagC) - s.executeLine([]uint8{0x90, 0xA0}) - if s.reg.getPC() != 0xD5A0 { - t.Errorf("Error in BCC, %v", s.reg) - } -} - -func TestStack(t *testing.T) { - s := NewNMOS6502(new(FlatMemory)) - - s.reg.setSP(0xF0) - s.reg.setA(0xA0) - s.reg.setP(0x0A) - s.executeLine([]uint8{0x48}) - if s.reg.getSP() != 0xEF { - t.Errorf("Error in PHA stack pointer, %v", s.reg) - } - if s.mem.Peek(0x01F0) != 0xA0 { - t.Errorf("Error in PHA, %v", s.reg) - } - - s.executeLine([]uint8{0x08}) - if s.reg.getSP() != 0xEE { - t.Errorf("Error in PHP stack pointer, %v", s.reg) - } - if s.mem.Peek(0x01EF) != 0x3A { - t.Errorf("Error in PHP, %v", s.reg) - } - - s.executeLine([]uint8{0x68}) - if s.reg.getSP() != 0xEF { - t.Errorf("Error in PLA stack pointer, %v", s.reg) - } - if s.reg.getA() != 0x3A { - t.Errorf("Error in PLA, %v", s.reg) - } - - s.executeLine([]uint8{0x28}) - if s.reg.getSP() != 0xF0 { - t.Errorf("Error in PLP stack pointer, %v", s.reg) - } - if s.reg.getP() != 0xA0 { - t.Errorf("Error in PLP, %v", s.reg) - } -} diff --git a/core6502/harteSuite_test.go b/core6502/harteSuite_test.go deleted file mode 100644 index 4cff966..0000000 --- a/core6502/harteSuite_test.go +++ /dev/null @@ -1,168 +0,0 @@ -package core6502 - -/* - Tests from https://github.com/TomHarte/ProcessorTests - - Know issues: - - Test 6502/v1/20_55_13 (Note 1) - - Not implemented undocumented opcodes for NMOS (Note 2) - - Errors on flag N for ADC in BCD mode (Note 3) - - The tests are disabled by defaut because they take long to run - and require a huge download. - To enable them, clone the repo https://github.com/TomHarte/ProcessorTests - and change the variables ProcessorTestsEnable and ProcessorTestsPath. -*/ - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "testing" -) - -var ProcessorTestsEnable = false -var ProcessorTestsPath = "/home/casa/code/ProcessorTests/" - -type scenarioState struct { - Pc uint16 - S uint8 - A uint8 - X uint8 - Y uint8 - P uint8 - Ram [][]uint16 -} - -type scenario struct { - Name string - Initial scenarioState - Final scenarioState - Cycles [][]interface{} -} - -func TestHarteNMOS6502(t *testing.T) { - if !ProcessorTestsEnable { - t.Skip("TomHarte/ProcessorTests are not enabled") - } - - s := NewNMOS6502(nil) // Use to get the opcodes names - - path := ProcessorTestsPath + "6502/v1/" - for i := 0x00; i <= 0xff; i++ { - mnemonic := s.opcodes[i].name - if mnemonic != "" { // Note 2 - opcode := fmt.Sprintf("%02x", i) - t.Run(opcode+mnemonic, func(t *testing.T) { - t.Parallel() - m := new(FlatMemory) - s := NewNMOS6502(m) - testOpcode(t, s, path, opcode, mnemonic) - }) - //} else { - // opcode := fmt.Sprintf("%02x", i) - // t.Run(opcode+mnemonic, func(t *testing.T) { - // t.Error("Opcode not implemented") - // }) - } - } -} - -func TestHarteCMOS65c02(t *testing.T) { - if !ProcessorTestsEnable { - t.Skip("TomHarte/ProcessorTests are not enabled") - } - - s := NewCMOS65c02(nil) // Use to get the opcodes names - - path := ProcessorTestsPath + "wdc65c02/v1/" - for i := 0x00; i <= 0xff; i++ { - mnemonic := s.opcodes[i].name - opcode := fmt.Sprintf("%02x", i) - t.Run(opcode+mnemonic, func(t *testing.T) { - t.Parallel() - m := new(FlatMemory) - s := NewCMOS65c02(m) - testOpcode(t, s, path, opcode, mnemonic) - }) - } -} - -func testOpcode(t *testing.T, s *State, path string, opcode string, mnemonic string) { - data, err := ioutil.ReadFile(path + opcode + ".json") - if err != nil { - t.Fatal(err) - } - - if len(data) == 0 { - return - } - - var scenarios []scenario - err = json.Unmarshal(data, &scenarios) - if err != nil { - t.Fatal(err) - } - - for _, scenario := range scenarios { - if scenario.Name != "20 55 13" { // Note 1 - t.Run(scenario.Name, func(t *testing.T) { - testScenario(t, s, &scenario, mnemonic) - }) - } - } -} - -func testScenario(t *testing.T, s *State, sc *scenario, mnemonic string) { - // Setup CPU - start := s.GetCycles() - s.reg.setPC(sc.Initial.Pc) - s.reg.setSP(sc.Initial.S) - s.reg.setA(sc.Initial.A) - s.reg.setX(sc.Initial.X) - s.reg.setY(sc.Initial.Y) - s.reg.setP(sc.Initial.P) - - for _, e := range sc.Initial.Ram { - s.mem.Poke(uint16(e[0]), uint8(e[1])) - } - - // Execute instruction - s.ExecuteInstruction() - - // Check result - assertReg8(t, sc, "A", s.reg.getA(), sc.Final.A) - assertReg8(t, sc, "X", s.reg.getX(), sc.Final.X) - assertReg8(t, sc, "Y", s.reg.getY(), sc.Final.Y) - if s.reg.getFlag(flagD) && (mnemonic == "ADC") { - // Note 3 - assertFlags(t, sc, sc.Initial.P, s.reg.getP()&0x7f, sc.Final.P&0x7f) - } else { - assertFlags(t, sc, sc.Initial.P, s.reg.getP(), sc.Final.P) - } - assertReg8(t, sc, "SP", s.reg.getSP(), sc.Final.S) - assertReg16(t, sc, "PC", s.reg.getPC(), sc.Final.Pc) - - cycles := s.GetCycles() - start - if cycles != uint64(len(sc.Cycles)) { - t.Errorf("Took %v cycles, it should be %v for %+v", cycles, len(sc.Cycles), sc) - } -} - -func assertReg8(t *testing.T, sc *scenario, name string, actual uint8, wanted uint8) { - if actual != wanted { - t.Errorf("Register %s is $%02x and should be $%02x for %+v", name, actual, wanted, sc) - } -} - -func assertReg16(t *testing.T, sc *scenario, name string, actual uint16, wanted uint16) { - if actual != wanted { - t.Errorf("Register %s is $%04x and should be $%04x for %+v", name, actual, wanted, sc) - } -} - -func assertFlags(t *testing.T, sc *scenario, initial uint8, actual uint8, wanted uint8) { - if actual != wanted { - t.Errorf("%08b flag diffs, they are %08b and should be %08b, initial %08b for %+v", actual^wanted, actual, wanted, initial, sc) - } -} diff --git a/core6502/memory.go b/core6502/memory.go deleted file mode 100644 index b529584..0000000 --- a/core6502/memory.go +++ /dev/null @@ -1,63 +0,0 @@ -package core6502 - -import "io/ioutil" - -// Memory represents the addressable space of the processor -type Memory interface { - Peek(address uint16) uint8 - Poke(address uint16, value uint8) - - // PeekCode can bu used to optimize the memory manager to requests with more - // locality. It must return the same as a call to Peek() - PeekCode(address uint16) uint8 -} - -func getWord(m Memory, address uint16) uint16 { - return uint16(m.Peek(address)) + 0x100*uint16(m.Peek(address+1)) -} - -func getWordNoCrossPage(m Memory, address uint16) uint16 { - addressMSB := address + 1 - if address&0xff == 0xff { - // We won't cross the page bounday for the MSB byte - addressMSB -= 0x100 - } - return uint16(m.Peek(address)) + 0x100*uint16(m.Peek(addressMSB)) -} - -func getZeroPageWord(m Memory, address uint8) uint16 { - return uint16(m.Peek(uint16(address))) + 0x100*uint16(m.Peek(uint16(address+1))) -} - -// FlatMemory puts RAM on the 64Kb addressable by the processor -type FlatMemory struct { - data [65536]uint8 -} - -// Peek returns the data on the given address -func (m *FlatMemory) Peek(address uint16) uint8 { - return m.data[address] -} - -// PeekCode returns the data on the given address -func (m *FlatMemory) PeekCode(address uint16) uint8 { - return m.data[address] -} - -// Poke sets the data at the given address -func (m *FlatMemory) Poke(address uint16, value uint8) { - m.data[address] = value -} - -func (m *FlatMemory) loadBinary(filename string) error { - bytes, err := ioutil.ReadFile(filename) - if err != nil { - return err - } - - for i, v := range bytes { - m.Poke(uint16(i), uint8(v)) - } - - return nil -} diff --git a/core6502/nmos6502.go b/core6502/nmos6502.go deleted file mode 100644 index 8060290..0000000 --- a/core6502/nmos6502.go +++ /dev/null @@ -1,232 +0,0 @@ -package core6502 - -// NewNMOS6502 returns an initialized NMOS6502 -func NewNMOS6502(m Memory) *State { - var s State - s.mem = m - s.opcodes = &opcodesNMOS6502 - return &s -} - -var opcodesNMOS6502 = [256]opcode{ - 0x00: {"BRK", 1, 7, modeImplicit, opBRK}, - 0x4C: {"JMP", 3, 3, modeAbsolute, opJMP}, - 0x6C: {"JMP", 3, 5, modeIndirect, opJMP}, - 0x20: {"JSR", 3, 6, modeAbsolute, opJSR}, - 0x40: {"RTI", 1, 6, modeImplicit, opRTI}, - 0x60: {"RTS", 1, 6, modeImplicit, opRTS}, - - 0x48: {"PHA", 1, 3, modeImplicit, buildOpPush(regA)}, - 0x08: {"PHP", 1, 3, modeImplicit, buildOpPush(regP)}, - 0x68: {"PLA", 1, 4, modeImplicit, buildOpPull(regA)}, - 0x28: {"PLP", 1, 4, modeImplicit, buildOpPull(regP)}, - - 0x09: {"ORA", 2, 2, modeImmediate, buildOpLogic(operationOr)}, - 0x05: {"ORA", 2, 3, modeZeroPage, buildOpLogic(operationOr)}, - 0x15: {"ORA", 2, 4, modeZeroPageX, buildOpLogic(operationOr)}, - 0x0D: {"ORA", 3, 4, modeAbsolute, buildOpLogic(operationOr)}, - 0x1D: {"ORA", 3, 4, modeAbsoluteX, buildOpLogic(operationOr)}, // Extra cycles - 0x19: {"ORA", 3, 4, modeAbsoluteY, buildOpLogic(operationOr)}, // Extra cycles - 0x01: {"ORA", 2, 6, modeIndexedIndirectX, buildOpLogic(operationOr)}, - 0x11: {"ORA", 2, 5, modeIndirectIndexedY, buildOpLogic(operationOr)}, // Extra cycles - - 0x29: {"AND", 2, 2, modeImmediate, buildOpLogic(operationAnd)}, - 0x25: {"AND", 2, 3, modeZeroPage, buildOpLogic(operationAnd)}, - 0x35: {"AND", 2, 4, modeZeroPageX, buildOpLogic(operationAnd)}, - 0x2D: {"AND", 3, 4, modeAbsolute, buildOpLogic(operationAnd)}, - 0x3D: {"AND", 3, 4, modeAbsoluteX, buildOpLogic(operationAnd)}, // Extra cycles - 0x39: {"AND", 3, 4, modeAbsoluteY, buildOpLogic(operationAnd)}, // Extra cycles - 0x21: {"AND", 2, 6, modeIndexedIndirectX, buildOpLogic(operationAnd)}, - 0x31: {"AND", 2, 5, modeIndirectIndexedY, buildOpLogic(operationAnd)}, // Extra cycles - - 0x49: {"EOR", 2, 2, modeImmediate, buildOpLogic(operationXor)}, - 0x45: {"EOR", 2, 3, modeZeroPage, buildOpLogic(operationXor)}, - 0x55: {"EOR", 2, 4, modeZeroPageX, buildOpLogic(operationXor)}, - 0x4D: {"EOR", 3, 4, modeAbsolute, buildOpLogic(operationXor)}, - 0x5D: {"EOR", 3, 4, modeAbsoluteX, buildOpLogic(operationXor)}, // Extra cycles - 0x59: {"EOR", 3, 4, modeAbsoluteY, buildOpLogic(operationXor)}, // Extra cycles - 0x41: {"EOR", 2, 6, modeIndexedIndirectX, buildOpLogic(operationXor)}, - 0x51: {"EOR", 2, 5, modeIndirectIndexedY, buildOpLogic(operationXor)}, // Extra cycles - - 0x69: {"ADC", 2, 2, modeImmediate, opADC}, - 0x65: {"ADC", 2, 3, modeZeroPage, opADC}, - 0x75: {"ADC", 2, 4, modeZeroPageX, opADC}, - 0x6D: {"ADC", 3, 4, modeAbsolute, opADC}, - 0x7D: {"ADC", 3, 4, modeAbsoluteX, opADC}, // Extra cycles - 0x79: {"ADC", 3, 4, modeAbsoluteY, opADC}, // Extra cycles - 0x61: {"ADC", 2, 6, modeIndexedIndirectX, opADC}, - 0x71: {"ADC", 2, 5, modeIndirectIndexedY, opADC}, // Extra cycles - - 0xE9: {"SBC", 2, 2, modeImmediate, opSBC}, - 0xE5: {"SBC", 2, 3, modeZeroPage, opSBC}, - 0xF5: {"SBC", 2, 4, modeZeroPageX, opSBC}, - 0xED: {"SBC", 3, 4, modeAbsolute, opSBC}, - 0xFD: {"SBC", 3, 4, modeAbsoluteX, opSBC}, // Extra cycles - 0xF9: {"SBC", 3, 4, modeAbsoluteY, opSBC}, // Extra cycles - 0xE1: {"SBC", 2, 6, modeIndexedIndirectX, opSBC}, - 0xF1: {"SBC", 2, 5, modeIndirectIndexedY, opSBC}, // Extra cycles - - 0x24: {"BIT", 2, 3, modeZeroPage, opBIT}, - 0x2C: {"BIT", 3, 4, modeAbsolute, opBIT}, - - 0xC9: {"CMP", 2, 2, modeImmediate, buildOpCompare(regA)}, - 0xC5: {"CMP", 2, 3, modeZeroPage, buildOpCompare(regA)}, - 0xD5: {"CMP", 2, 4, modeZeroPageX, buildOpCompare(regA)}, - 0xCD: {"CMP", 3, 4, modeAbsolute, buildOpCompare(regA)}, - 0xDD: {"CMP", 3, 4, modeAbsoluteX, buildOpCompare(regA)}, // Extra cycles - 0xD9: {"CMP", 3, 4, modeAbsoluteY, buildOpCompare(regA)}, // Extra cycles - 0xC1: {"CMP", 2, 6, modeIndexedIndirectX, buildOpCompare(regA)}, - 0xD1: {"CMP", 2, 5, modeIndirectIndexedY, buildOpCompare(regA)}, // Extra cycles - - 0xE0: {"CPX", 2, 2, modeImmediate, buildOpCompare(regX)}, - 0xE4: {"CPX", 2, 3, modeZeroPage, buildOpCompare(regX)}, - 0xEC: {"CPX", 3, 4, modeAbsolute, buildOpCompare(regX)}, - - 0xC0: {"CPY", 2, 2, modeImmediate, buildOpCompare(regY)}, - 0xC4: {"CPY", 2, 3, modeZeroPage, buildOpCompare(regY)}, - 0xCC: {"CPY", 3, 4, modeAbsolute, buildOpCompare(regY)}, - - 0x2A: {"ROL", 1, 2, modeAccumulator, buildOpShift(true, true)}, - 0x26: {"ROL", 2, 5, modeZeroPage, buildOpShift(true, true)}, - 0x36: {"ROL", 2, 6, modeZeroPageX, buildOpShift(true, true)}, - 0x2E: {"ROL", 3, 6, modeAbsolute, buildOpShift(true, true)}, - 0x3E: {"ROL", 3, 7, modeAbsoluteX, buildOpShift(true, true)}, - - 0x6A: {"ROR", 1, 2, modeAccumulator, buildOpShift(false, true)}, - 0x66: {"ROR", 2, 5, modeZeroPage, buildOpShift(false, true)}, - 0x76: {"ROR", 2, 6, modeZeroPageX, buildOpShift(false, true)}, - 0x6E: {"ROR", 3, 6, modeAbsolute, buildOpShift(false, true)}, - 0x7E: {"ROR", 3, 7, modeAbsoluteX, buildOpShift(false, true)}, - - 0x0A: {"ASL", 1, 2, modeAccumulator, buildOpShift(true, false)}, - 0x06: {"ASL", 2, 5, modeZeroPage, buildOpShift(true, false)}, - 0x16: {"ASL", 2, 6, modeZeroPageX, buildOpShift(true, false)}, - 0x0E: {"ASL", 3, 6, modeAbsolute, buildOpShift(true, false)}, - 0x1E: {"ASL", 3, 7, modeAbsoluteX, buildOpShift(true, false)}, - - 0x4A: {"LSR", 1, 2, modeAccumulator, buildOpShift(false, false)}, - 0x46: {"LSR", 2, 5, modeZeroPage, buildOpShift(false, false)}, - 0x56: {"LSR", 2, 6, modeZeroPageX, buildOpShift(false, false)}, - 0x4E: {"LSR", 3, 6, modeAbsolute, buildOpShift(false, false)}, - 0x5E: {"LSR", 3, 7, modeAbsoluteX, buildOpShift(false, false)}, - - 0x38: {"SEC", 1, 2, modeImplicit, buildOpUpdateFlag(flagC, true)}, - 0xF8: {"SED", 1, 2, modeImplicit, buildOpUpdateFlag(flagD, true)}, - 0x78: {"SEI", 1, 2, modeImplicit, buildOpUpdateFlag(flagI, true)}, - 0x18: {"CLC", 1, 2, modeImplicit, buildOpUpdateFlag(flagC, false)}, - 0xD8: {"CLD", 1, 2, modeImplicit, buildOpUpdateFlag(flagD, false)}, - 0x58: {"CLI", 1, 2, modeImplicit, buildOpUpdateFlag(flagI, false)}, - 0xB8: {"CLV", 1, 2, modeImplicit, buildOpUpdateFlag(flagV, false)}, - - 0xE6: {"INC", 2, 5, modeZeroPage, buildOpIncDec(true)}, - 0xF6: {"INC", 2, 6, modeZeroPageX, buildOpIncDec(true)}, - 0xEE: {"INC", 3, 6, modeAbsolute, buildOpIncDec(true)}, - 0xFE: {"INC", 3, 7, modeAbsoluteX, buildOpIncDec(true)}, - 0xC6: {"DEC", 2, 5, modeZeroPage, buildOpIncDec(false)}, - 0xD6: {"DEC", 2, 6, modeZeroPageX, buildOpIncDec(false)}, - 0xCE: {"DEC", 3, 6, modeAbsolute, buildOpIncDec(false)}, - 0xDE: {"DEC", 3, 7, modeAbsoluteX, buildOpIncDec(false)}, - 0xE8: {"INX", 1, 2, modeImplicitX, buildOpIncDec(true)}, - 0xC8: {"INY", 1, 2, modeImplicitY, buildOpIncDec(true)}, - 0xCA: {"DEX", 1, 2, modeImplicitX, buildOpIncDec(false)}, - 0x88: {"DEY", 1, 2, modeImplicitY, buildOpIncDec(false)}, - - 0xAA: {"TAX", 1, 2, modeImplicit, buildOpTransfer(regA, regX)}, - 0xA8: {"TAY", 1, 2, modeImplicit, buildOpTransfer(regA, regY)}, - 0x8A: {"TXA", 1, 2, modeImplicit, buildOpTransfer(regX, regA)}, - 0x98: {"TYA", 1, 2, modeImplicit, buildOpTransfer(regY, regA)}, - 0x9A: {"TXS", 1, 2, modeImplicit, buildOpTransfer(regX, regSP)}, - 0xBA: {"TSX", 1, 2, modeImplicit, buildOpTransfer(regSP, regX)}, - - 0xA9: {"LDA", 2, 2, modeImmediate, buildOpLoad(regA)}, - 0xA5: {"LDA", 2, 3, modeZeroPage, buildOpLoad(regA)}, - 0xB5: {"LDA", 2, 4, modeZeroPageX, buildOpLoad(regA)}, - 0xAD: {"LDA", 3, 4, modeAbsolute, buildOpLoad(regA)}, - 0xBD: {"LDA", 3, 4, modeAbsoluteX, buildOpLoad(regA)}, // Extra cycles - 0xB9: {"LDA", 3, 4, modeAbsoluteY, buildOpLoad(regA)}, // Extra cycles - 0xA1: {"LDA", 2, 6, modeIndexedIndirectX, buildOpLoad(regA)}, - 0xB1: {"LDA", 2, 5, modeIndirectIndexedY, buildOpLoad(regA)}, // Extra cycles - 0xA2: {"LDX", 2, 2, modeImmediate, buildOpLoad(regX)}, - 0xA6: {"LDX", 2, 3, modeZeroPage, buildOpLoad(regX)}, - 0xB6: {"LDX", 2, 4, modeZeroPageY, buildOpLoad(regX)}, - 0xAE: {"LDX", 3, 4, modeAbsolute, buildOpLoad(regX)}, - 0xBE: {"LDX", 3, 4, modeAbsoluteY, buildOpLoad(regX)}, // Extra cycles - 0xA0: {"LDY", 2, 2, modeImmediate, buildOpLoad(regY)}, - 0xA4: {"LDY", 2, 3, modeZeroPage, buildOpLoad(regY)}, - 0xB4: {"LDY", 2, 4, modeZeroPageX, buildOpLoad(regY)}, - 0xAC: {"LDY", 3, 4, modeAbsolute, buildOpLoad(regY)}, - 0xBC: {"LDY", 3, 4, modeAbsoluteX, buildOpLoad(regY)}, // Extra cycles - - 0x85: {"STA", 2, 3, modeZeroPage, buildOpStore(regA)}, - 0x95: {"STA", 2, 4, modeZeroPageX, buildOpStore(regA)}, - 0x8D: {"STA", 3, 4, modeAbsolute, buildOpStore(regA)}, - 0x9D: {"STA", 3, 5, modeAbsoluteX, buildOpStore(regA)}, - 0x99: {"STA", 3, 5, modeAbsoluteY, buildOpStore(regA)}, - 0x81: {"STA", 2, 6, modeIndexedIndirectX, buildOpStore(regA)}, - 0x91: {"STA", 2, 6, modeIndirectIndexedY, buildOpStore(regA)}, - 0x86: {"STX", 2, 3, modeZeroPage, buildOpStore(regX)}, - 0x96: {"STX", 2, 4, modeZeroPageY, buildOpStore(regX)}, - 0x8E: {"STX", 3, 4, modeAbsolute, buildOpStore(regX)}, - 0x84: {"STY", 2, 3, modeZeroPage, buildOpStore(regY)}, - 0x94: {"STY", 2, 4, modeZeroPageX, buildOpStore(regY)}, - 0x8C: {"STY", 3, 4, modeAbsolute, buildOpStore(regY)}, - - 0x90: {"BCC", 2, 2, modeRelative, buildOpBranch(flagC, false)}, // Extra cycles - 0xB0: {"BCS", 2, 2, modeRelative, buildOpBranch(flagC, true)}, // Extra cycles - 0xD0: {"BNE", 2, 2, modeRelative, buildOpBranch(flagZ, false)}, // Extra cycles - 0xF0: {"BEQ", 2, 2, modeRelative, buildOpBranch(flagZ, true)}, // Extra cycles - 0x10: {"BPL", 2, 2, modeRelative, buildOpBranch(flagN, false)}, // Extra cycles - 0x30: {"BMI", 2, 2, modeRelative, buildOpBranch(flagN, true)}, // Extra cycles - 0x50: {"BVC", 2, 2, modeRelative, buildOpBranch(flagV, false)}, // Extra cycles - 0x70: {"BVS", 2, 2, modeRelative, buildOpBranch(flagV, true)}, // Extra cycles - - 0xEA: {"NOP", 1, 2, modeImplicit, opNOP}, - - /* - Undocumented opcodes, - see http://bbc.nvg.org/doc/6502OpList.txt - see https://www.nesdev.com/undocumented_opcodes.txt - */ - 0x1A: {"NOP", 1, 2, modeImplicit, opNOP}, - 0x3A: {"NOP", 1, 2, modeImplicit, opNOP}, - 0x5A: {"NOP", 1, 2, modeImplicit, opNOP}, - 0x7A: {"NOP", 1, 2, modeImplicit, opNOP}, - 0xDA: {"NOP", 1, 2, modeImplicit, opNOP}, - 0xFA: {"NOP", 1, 2, modeImplicit, opNOP}, - - 0x04: {"DOP", 2, 3, modeImplicit, opNOP}, - 0x14: {"DOP", 2, 4, modeImplicit, opNOP}, - 0x34: {"DOP", 2, 4, modeImplicit, opNOP}, - 0x44: {"DOP", 2, 3, modeImplicit, opNOP}, - 0x54: {"DOP", 2, 4, modeImplicit, opNOP}, - 0x64: {"DOP", 2, 3, modeImplicit, opNOP}, - 0x74: {"DOP", 2, 4, modeImplicit, opNOP}, - 0x80: {"DOP", 2, 2, modeImplicit, opNOP}, - 0x82: {"DOP", 2, 2, modeImplicit, opNOP}, - 0x89: {"DOP", 2, 2, modeImplicit, opNOP}, - 0xC2: {"DOP", 2, 2, modeImplicit, opNOP}, - 0xD4: {"DOP", 2, 4, modeImplicit, opNOP}, - 0xE2: {"DOP", 2, 2, modeImplicit, opNOP}, - 0xF4: {"DOP", 2, 4, modeImplicit, opNOP}, - - 0x0C: {"TOP", 3, 3, modeImplicit, opNOP}, - 0x1C: {"TOP", 3, 4, modeImplicit, opNOP}, - 0x3C: {"TOP", 3, 4, modeImplicit, opNOP}, - 0x5C: {"TOP", 3, 4, modeImplicit, opNOP}, - 0x7C: {"TOP", 3, 4, modeImplicit, opNOP}, - 0xDC: {"TOP", 3, 4, modeImplicit, opNOP}, - 0xFC: {"TOP", 3, 4, modeImplicit, opNOP}, - - 0x02: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x12: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x22: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x32: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x42: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x52: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x62: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x72: {"KIL", 1, 3, modeImplicit, opHALT}, - 0x92: {"KIL", 1, 3, modeImplicit, opHALT}, - 0xB2: {"KIL", 1, 3, modeImplicit, opHALT}, - 0xD2: {"KIL", 1, 3, modeImplicit, opHALT}, - 0xF2: {"KIL", 1, 3, modeImplicit, opHALT}, -} diff --git a/core6502/nmos6502_test.go b/core6502/nmos6502_test.go deleted file mode 100644 index dfad1c3..0000000 --- a/core6502/nmos6502_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package core6502 - -import ( - "fmt" - "testing" -) - -func TestNMOS6502(t *testing.T) { - m := new(FlatMemory) - s := NewNMOS6502(m) - - m.loadBinary("testdata/6502_functional_test.bin") - executeSuite(t, s, 0x200, 240, false, 255) -} - -// To execute test suites from https://github.com/Klaus2m5/6502_65C02_functional_tests -func executeSuite(t *testing.T, s *State, stepAddress uint16, steps uint8, showStep bool, traceCPUStep uint8) { - s.reg.setPC(0x0400) - currentStep := uint8(255) - for { - testCase := s.mem.Peek(stepAddress) - if testCase != currentStep { - currentStep = testCase - if showStep { - fmt.Printf("[ Step %d ]\n", testCase) - } - s.SetTrace(testCase == traceCPUStep) - } - if testCase >= steps { - break - } - pc := s.reg.getPC() - s.ExecuteInstruction() - if pc == s.reg.getPC() { - t.Fatalf("Failure in test %v.", testCase) - } - } -} diff --git a/core6502/operations.go b/core6502/operations.go deleted file mode 100644 index ecc2fe8..0000000 --- a/core6502/operations.go +++ /dev/null @@ -1,346 +0,0 @@ -package core6502 - -func buildOpTransfer(regSrc int, regDst int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := s.reg.getRegister(regSrc) - s.reg.setRegister(regDst, value) - if regDst != regSP { - s.reg.updateFlagZN(value) - } - } -} - -func buildOpIncDec(inc bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - if opcode.addressMode == modeAbsoluteX || opcode.addressMode == modeAbsoluteY { - // Double read, needed to pass A2Audit for the Language Card - value = resolveValue(s, line, opcode) - } - if inc { - value++ - } else { - value-- - } - s.reg.updateFlagZN(value) - resolveSetValue(s, line, opcode, value) - } -} - -func buildOpShift(isLeft bool, isRotate bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - - oldCarry := s.reg.getFlagBit(flagC) - var carry bool - if isLeft { - carry = (value & 0x80) != 0 - value <<= 1 - if isRotate { - value += oldCarry - } - } else { - carry = (value & 0x01) != 0 - value >>= 1 - if isRotate { - value += oldCarry << 7 - } - } - s.reg.updateFlag(flagC, carry) - s.reg.updateFlagZN(value) - resolveSetValue(s, line, opcode, value) - } -} - -func buildOpLoad(regDst int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - s.reg.setRegister(regDst, value) - s.reg.updateFlagZN(value) - } -} - -func buildOpStore(regSrc int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := s.reg.getRegister(regSrc) - resolveSetValue(s, line, opcode, value) - } -} - -func buildOpUpdateFlag(flag uint8, value bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - s.reg.updateFlag(flag, value) - } -} - -func buildOpBranch(flag uint8, test bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - if s.reg.getFlag(flag) == test { - s.extraCycleBranchTaken = true - address := resolveAddress(s, line, opcode) - s.reg.setPC(address) - } - } -} - -func buildOpBranchOnBit(bit uint8, test bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - // Note that those operations have two addressing modes: - // one for the zero page value, another for the relative jump. - // We will have to resolve the first one here. - value := s.mem.Peek(uint16(line[1])) - bitValue := ((value >> bit) & 1) == 1 - - if bitValue == test { - address := resolveAddress(s, line, opcode) - s.reg.setPC(address) - } - } -} - -func buildOpSetBit(bit uint8, set bool) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - if set { - value = value | (1 << bit) - } else { - value = value &^ (1 << bit) - } - resolveSetValue(s, line, opcode, value) - } -} - -func opBIT(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - acc := s.reg.getA() - s.reg.updateFlag(flagZ, value&acc == 0) - // The immediate addressing mode (65C02 or 65816 only) does not affect N & V. - if opcode.addressMode != modeImmediate { - s.reg.updateFlag(flagN, value&(1<<7) != 0) - s.reg.updateFlag(flagV, value&(1<<6) != 0) - } -} - -func opTRB(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - a := s.reg.getA() - s.reg.updateFlag(flagZ, (value&a) == 0) - resolveSetValue(s, line, opcode, value&^a) -} - -func opTSB(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - a := s.reg.getA() - s.reg.updateFlag(flagZ, (value&a) == 0) - resolveSetValue(s, line, opcode, value|a) -} - -func buildOpCompare(reg int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - reference := s.reg.getRegister(reg) - s.reg.updateFlagZN(reference - value) - s.reg.updateFlag(flagC, reference >= value) - } -} - -func operationAnd(a uint8, b uint8) uint8 { return a & b } -func operationOr(a uint8, b uint8) uint8 { return a | b } -func operationXor(a uint8, b uint8) uint8 { return a ^ b } - -func buildOpLogic(operation func(uint8, uint8) uint8) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - result := operation(value, s.reg.getA()) - s.reg.setA(result) - s.reg.updateFlagZN(result) - } -} - -func opADC(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - aValue := s.reg.getA() - carry := s.reg.getFlagBit(flagC) - - total := uint16(aValue) + uint16(value) + uint16(carry) - signedTotal := int16(int8(aValue)) + int16(int8(value)) + int16(carry) - truncated := uint8(total) - - if s.reg.getFlag(flagD) { - totalBcdLo := uint(aValue&0x0f) + uint(value&0x0f) + uint(carry) - totalBcdHi := uint(aValue>>4) + uint(value>>4) - if totalBcdLo >= 10 { - totalBcdLo -= 10 - totalBcdHi++ - } - totalBcdHiPrenormalised := uint8(totalBcdHi & 0xf) - newCarry := false - if totalBcdHi >= 10 { - totalBcdHi -= 10 - newCarry = true - } - totalBcd := uint8(totalBcdHi)<<4 + (uint8(totalBcdLo) & 0xf) - s.reg.setA(uint8(totalBcd)) - s.reg.updateFlag(flagC, newCarry) - s.reg.updateFlag(flagV, (value>>7 == aValue>>7) && - (value>>7 != totalBcdHiPrenormalised>>3)) - } else { - s.reg.setA(truncated) - s.reg.updateFlag(flagC, total > 0xFF) - s.reg.updateFlag(flagV, signedTotal < -128 || signedTotal > 127) - // Effectively the same as the less clear: - // s.reg.updateFlag(flagV, (value>>7 == aValue>>7) && (value>>7 != truncated>>7)) - // See http://www.6502.org/tutorials/vflag.html - } - - // ZN flags behave for BCD as if the operation was binary? - s.reg.updateFlagZN(truncated) -} - -func opADCAlt(s *State, line []uint8, opcode opcode) { - opADC(s, line, opcode) - if s.reg.getFlag(flagD) { - s.extraCycleBCD = true - } - - // The Z and N flags on BCD are fixed in 65c02. - s.reg.updateFlagZN(s.reg.getA()) -} - -func opSBC(s *State, line []uint8, opcode opcode) { - value := resolveValue(s, line, opcode) - aValue := s.reg.getA() - carry := s.reg.getFlagBit(flagC) - - total := 0x100 + uint16(aValue) - uint16(value) + uint16(carry) - 1 - signedTotal := int16(int8(aValue)) - int16(int8(value)) + int16(carry) - 1 - truncated := uint8(total) - - if s.reg.getFlag(flagD) { - totalBcdLo := int(aValue&0x0f) - int(value&0x0f) + int(carry) - 1 - totalBcdHi := int(aValue>>4) - int(value>>4) - if totalBcdLo < 0 { - totalBcdLo += 10 - totalBcdHi-- - } - newCarry := true - if totalBcdHi < 0 { - totalBcdHi += 10 - newCarry = false - } - totalBcd := uint8(totalBcdHi)<<4 + (uint8(totalBcdLo) & 0xf) - s.reg.setA(uint8(totalBcd)) - s.reg.updateFlag(flagC, newCarry) - } else { - s.reg.setA(truncated) - s.reg.updateFlag(flagC, total > 0xFF) - } - - // ZNV flags behave for SBC as if the operation was binary - s.reg.updateFlagZN(truncated) - s.reg.updateFlag(flagV, signedTotal < -128 || signedTotal > 127) -} - -func opSBCAlt(s *State, line []uint8, opcode opcode) { - opSBC(s, line, opcode) - if s.reg.getFlag(flagD) { - s.extraCycleBCD = true - } - // The Z and N flags on BCD are fixed in 65c02. - s.reg.updateFlagZN(s.reg.getA()) -} - -const stackAddress uint16 = 0x0100 - -func pushByte(s *State, value uint8) { - adresss := stackAddress + uint16(s.reg.getSP()) - s.mem.Poke(adresss, value) - s.reg.setSP(s.reg.getSP() - 1) -} - -func pullByte(s *State) uint8 { - s.reg.setSP(s.reg.getSP() + 1) - adresss := stackAddress + uint16(s.reg.getSP()) - return s.mem.Peek(adresss) -} - -func pushWord(s *State, value uint16) { - pushByte(s, uint8(value>>8)) - pushByte(s, uint8(value)) -} - -func pullWord(s *State) uint16 { - return uint16(pullByte(s)) + - (uint16(pullByte(s)) << 8) - -} - -func buildOpPull(regDst int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := pullByte(s) - s.reg.setRegister(regDst, value) - if regDst == regP { - s.reg.updateFlag5B() - } else { - s.reg.updateFlagZN(value) - } - } -} - -func buildOpPush(regSrc int) opFunc { - return func(s *State, line []uint8, opcode opcode) { - value := s.reg.getRegister(regSrc) - if regSrc == regP { - value |= flagB + flag5 - } - pushByte(s, value) - } -} - -func opJMP(s *State, line []uint8, opcode opcode) { - address := resolveAddress(s, line, opcode) - s.reg.setPC(address) -} - -func opNOP(s *State, line []uint8, opcode opcode) {} - -func opHALT(s *State, line []uint8, opcode opcode) { - s.reg.setPC(s.reg.getPC() - 1) -} - -func opJSR(s *State, line []uint8, opcode opcode) { - pushWord(s, s.reg.getPC()-1) - address := resolveAddress(s, line, opcode) - s.reg.setPC(address) -} - -func opRTI(s *State, line []uint8, opcode opcode) { - s.reg.setP(pullByte(s)) - s.reg.updateFlag5B() - s.reg.setPC(pullWord(s)) -} - -func opRTS(s *State, line []uint8, opcode opcode) { - s.reg.setPC(pullWord(s) + 1) -} - -func opBRK(s *State, line []uint8, opcode opcode) { - pushWord(s, s.reg.getPC()+1) - pushByte(s, s.reg.getP()|(flagB+flag5)) - s.reg.setFlag(flagI) - s.reg.setPC(getWord(s.mem, vectorBreak)) -} - -func opBRKAlt(s *State, line []uint8, opcode opcode) { - opBRK(s, line, opcode) - /* - The only difference in the BRK instruction on the 65C02 and the 6502 - is that the 65C02 clears the D (decimal) flag on the 65C02, whereas - the D flag is not affected on the 6502. - */ - s.reg.clearFlag(flagD) -} - -func opSTZ(s *State, line []uint8, opcode opcode) { - resolveSetValue(s, line, opcode, 0) -} diff --git a/core6502/registers.go b/core6502/registers.go deleted file mode 100644 index 2fad5f3..0000000 --- a/core6502/registers.go +++ /dev/null @@ -1,102 +0,0 @@ -package core6502 - -import "fmt" - -const ( - regA = 0 - regX = 1 - regY = 2 - regP = 3 - regSP = 4 - regPC = 5 // 2 bytes - regPC2 = 6 - regNone = -1 -) - -const ( - flagN uint8 = 1 << 7 - flagV uint8 = 1 << 6 - flag5 uint8 = 1 << 5 - flagB uint8 = 1 << 4 - flagD uint8 = 1 << 3 - flagI uint8 = 1 << 2 - flagZ uint8 = 1 << 1 - flagC uint8 = 1 << 0 -) - -type registers struct { - data [7]uint8 -} - -func (r *registers) getRegister(i int) uint8 { return r.data[i] } - -func (r *registers) getA() uint8 { return r.data[regA] } -func (r *registers) getX() uint8 { return r.data[regX] } -func (r *registers) getY() uint8 { return r.data[regY] } -func (r *registers) getP() uint8 { return r.data[regP] } -func (r *registers) getSP() uint8 { return r.data[regSP] } - -func (r *registers) setRegister(i int, v uint8) { - r.data[i] = v -} -func (r *registers) setA(v uint8) { r.setRegister(regA, v) } -func (r *registers) setX(v uint8) { r.setRegister(regX, v) } -func (r *registers) setY(v uint8) { r.setRegister(regY, v) } -func (r *registers) setP(v uint8) { r.setRegister(regP, v) } -func (r *registers) setSP(v uint8) { r.setRegister(regSP, v) } - -func (r *registers) getPC() uint16 { - return uint16(r.data[regPC])*256 + uint16(r.data[regPC2]) -} - -func (r *registers) setPC(v uint16) { - r.data[regPC] = uint8(v >> 8) - r.data[regPC2] = uint8(v) -} - -func (r *registers) getFlagBit(i uint8) uint8 { - if r.getFlag(i) { - return 1 - } - return 0 -} - -func (r *registers) getFlag(i uint8) bool { - return (r.data[regP] & i) != 0 -} - -func (r *registers) setFlag(i uint8) { - r.data[regP] |= i -} - -func (r *registers) clearFlag(i uint8) { - r.data[regP] &^= i -} - -func (r *registers) updateFlag(i uint8, v bool) { - if v { - r.setFlag(i) - } else { - r.clearFlag(i) - } -} - -func (r *registers) updateFlagZN(t uint8) { - r.updateFlag(flagZ, t == 0) - r.updateFlag(flagN, t >= (1<<7)) -} - -func (r *registers) updateFlag5B() { - r.setFlag(flag5) - r.clearFlag(flagB) -} - -func (r registers) String() string { - //ch := (r.getA() & 0x3F) + 0x40 - ch := (r.getA() & 0x7F) - if ch < 0x20 { - ch += 0x40 - } - return fmt.Sprintf("A: %#02x(%v), X: %#02x, Y: %#02x, SP: %#02x, PC: %#04x, P: %#02x, (NV-BDIZC): %08b", - r.getA(), string(ch), r.getX(), r.getY(), r.getSP(), r.getPC(), r.getP(), r.getP()) -} diff --git a/core6502/registers_test.go b/core6502/registers_test.go deleted file mode 100644 index 0625c42..0000000 --- a/core6502/registers_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package core6502 - -import "testing" - -func TestRegA(t *testing.T) { - var r registers - data := uint8(200) - r.setA(data) - if r.getA() != data { - t.Error("Error storing and loading A") - } -} -func TestRegPC(t *testing.T) { - var r registers - data := uint16(0xc600) - r.setPC(data) - if r.getPC() != data { - t.Error("Error storing and loading PC") - } -} - -func TestFlags(t *testing.T) { - var r registers - r.setP(0x23) - if r.getP() != 0x23 { - t.Error("Error storing and loading P") - } - - r.setP(0) - r.setFlag(flagD) - if !r.getFlag(flagD) { - t.Error("Error setting and getting flag") - } - - r.clearFlag(flagD) - if r.getFlag(flagD) { - t.Error("Error clearing flag") - } - - r.updateFlag(flagD, true) - if !r.getFlag(flagD) { - t.Error("Error update flag to true") - } - - r.updateFlag(flagD, false) - if r.getFlag(flagD) { - t.Error("Error updating flag to false") - } -} - -func TestUpdateFlagZN(t *testing.T) { - var r registers - r.updateFlagZN(0) - if r.getP() != flagZ { - t.Error("Error update flags ZN with 0") - } - - r.updateFlagZN(0x10) - if r.getP() != 0 { - t.Error("Error update flags ZN with 0x10") - } - - r.updateFlagZN(0xF2) - if r.getP() != flagN { - t.Error("Error update flags ZN with 0xF2") - } -} diff --git a/core6502/testdata/6502_functional_test.bin b/core6502/testdata/6502_functional_test.bin deleted file mode 100644 index c9a35e1..0000000 Binary files a/core6502/testdata/6502_functional_test.bin and /dev/null differ diff --git a/core6502/testdata/6502_functional_test.lst b/core6502/testdata/6502_functional_test.lst deleted file mode 100644 index d178888..0000000 --- a/core6502/testdata/6502_functional_test.lst +++ /dev/null @@ -1,14360 +0,0 @@ -AS65 Assembler for R6502 [1.42]. Copyright 1994-2007, Frank A. Kingswood Page 1 ----------------------------------------------------- 6502_functional_test.a65 ---------------------------------------------------- - -6104 lines read, no errors in pass 1. - ; - ; 6 5 0 2 F U N C T I O N A L T E S T - ; - ; Copyright (C) 2012-2015 Klaus Dormann - ; - ; This program is free software: you can redistribute it and/or modify - ; it under the terms of the GNU General Public License as published by - ; the Free Software Foundation, either version 3 of the License, or - ; (at your option) any later version. - ; - ; This program is distributed in the hope that it will be useful, - ; but WITHOUT ANY WARRANTY; without even the implied warranty of - ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ; GNU General Public License for more details. - ; - ; You should have received a copy of the GNU General Public License - ; along with this program. If not, see . - - - ; This program is designed to test all opcodes of a 6502 emulator using all - ; addressing modes with focus on propper setting of the processor status - ; register bits. - ; - ; version 04-dec-2017 - ; contact info at http://2m5.de or email K@2m5.de - ; - ; assembled with AS65 from http://www.kingswood-consulting.co.uk/assemblers/ - ; command line switches: -l -m -s2 -w -h0 - ; | | | | no page headers in listing - ; | | | wide listing (133 char/col) - ; | | write intel hex file instead of binary - ; | expand macros in listing - ; generate pass2 listing - ; - ; No IO - should be run from a monitor with access to registers. - ; To run load intel hex image with a load command, than alter PC to 400 hex - ; (code_segment) and enter a go command. - ; Loop on program counter determines error or successful completion of test. - ; Check listing for relevant traps (jump/branch *). - ; Please note that in early tests some instructions will have to be used before - ; they are actually tested! - ; - ; RESET, NMI or IRQ should not occur and will be trapped if vectors are enabled. - ; Tests documented behavior of the original NMOS 6502 only! No unofficial - ; opcodes. Additional opcodes of newer versions of the CPU (65C02, 65816) will - ; not be tested. Decimal ops will only be tested with valid BCD operands and - ; N V Z flags will be ignored. - ; - ; Debugging hints: - ; Most of the code is written sequentially. if you hit a trap, check the - ; immediately preceeding code for the instruction to be tested. Results are - ; tested first, flags are checked second by pushing them onto the stack and - ; pulling them to the accumulator after the result was checked. The "real" - ; flags are no longer valid for the tested instruction at this time! - ; If the tested instruction was indexed, the relevant index (X or Y) must - ; also be checked. Opposed to the flags, X and Y registers are still valid. - ; - ; versions: - ; 28-jul-2012 1st version distributed for testing - ; 29-jul-2012 fixed references to location 0, now #0 - ; added license - GPLv3 - ; 30-jul-2012 added configuration options - ; 01-aug-2012 added trap macro to allow user to change error handling - ; 01-dec-2012 fixed trap in branch field must be a branch - ; 02-mar-2013 fixed PLA flags not tested - ; 19-jul-2013 allowed ROM vectors to be loaded when load_data_direct = 0 - ; added test sequence check to detect if tests jump their fence - ; 23-jul-2013 added RAM integrity check option - ; 16-aug-2013 added error report to standard output option - ; 13-dec-2014 added binary/decimal opcode table switch test - ; 14-dec-2014 improved relative address test - ; 23-aug-2015 added option to disable self modifying tests - ; 24-aug-2015 all self modifying immediate opcodes now execute in data RAM - ; added small branch offset pretest - ; 21-oct-2015 added option to disable decimal mode ADC & SBC tests - ; 04-dec-2017 fixed BRK only tested with interrupts enabled - ; added option to skip the remainder of a failing test - ; in report.i65 - - - ; C O N F I G U R A T I O N - - ;ROM_vectors writable (0=no, 1=yes) - ;if ROM vectors can not be used interrupts will not be trapped - ;as a consequence BRK can not be tested but will be emulated to test RTI -0001 = ROM_vectors = 1 - - ;load_data_direct (0=move from code segment, 1=load directly) - ;loading directly is preferred but may not be supported by your platform - ;0 produces only consecutive object code, 1 is not suitable for a binary image -0001 = load_data_direct = 1 - - ;I_flag behavior (0=force enabled, 1=force disabled, 2=prohibit change, 3=allow - ;change) 2 requires extra code and is not recommended. SEI & CLI can only be - ;tested if you allow changing the interrupt status (I_flag = 3) -0003 = I_flag = 3 - - ;configure memory - try to stay away from memory used by the system - ;zero_page memory start address, $50 (80) consecutive Bytes required - ; add 2 if I_flag = 2 -000a = zero_page = $a - - ;data_segment memory start address, $6A (106) consecutive Bytes required -0200 = data_segment = $200 - if (data_segment & $ff) != 0 - ERROR ERROR ERROR low byte of data_segment MUST be $00 !! - endif - - ;code_segment memory start address, 13kB of consecutive space required - ; add 2.5 kB if I_flag = 2 -0400 = code_segment = $400 - - ;self modifying code may be disabled to allow running in ROM - ;0=part of the code is self modifying and must reside in RAM - ;1=tests disabled: branch range -0000 = disable_selfmod = 0 - - ;report errors through I/O channel (0=use standard self trap loops, 1=include - ;report.i65 as I/O channel, add 3.5 kB) -0000 = report = 0 - - ;RAM integrity test option. Checks for undesired RAM writes. - ;set lowest non RAM or RAM mirror address page (-1=disable, 0=64k, $40=16k) - ;leave disabled if a monitor, OS or background interrupt is allowed to alter RAM -ffff = ram_top = -1 - - ;disable test decimal mode ADC & SBC, 0=enable, 1=disable, - ;2=disable including decimal flag in processor status -0000 = disable_decimal = 0 - - noopt ;do not take shortcuts - - ;macros for error & success traps to allow user modification - ;example: - ;trap macro - ; jsr my_error_handler - ; endm - ;trap_eq macro - ; bne skip\? - ; trap ;failed equal (zero) - ;skip\? - ; endm - ; - ; my_error_handler should pop the calling address from the stack and report it. - ; putting larger portions of code (more than 3 bytes) inside the trap macro - ; may lead to branch range problems for some tests. - if report = 0 - trap macro - jmp * ;failed anyway - endm - trap_eq macro - beq * ;failed equal (zero) - endm - trap_ne macro - bne * ;failed not equal (non zero) - endm - trap_cs macro - bcs * ;failed carry set - endm - trap_cc macro - bcc * ;failed carry clear - endm - trap_mi macro - bmi * ;failed minus (bit 7 set) - endm - trap_pl macro - bpl * ;failed plus (bit 7 clear) - endm - trap_vs macro - bvs * ;failed overflow set - endm - trap_vc macro - bvc * ;failed overflow clear - endm - ; please observe that during the test the stack gets invalidated - ; therefore a RTS inside the success macro is not possible - success macro - jmp * ;test passed, no errors - endm - endif - if report = 1 - trap macro - jsr report_error - endm - trap_eq macro - bne skip\? - trap ;failed equal (zero) - skip\? - endm - trap_ne macro - beq skip\? - trap ;failed not equal (non zero) - skip\? - endm - trap_cs macro - bcc skip\? - trap ;failed carry set - skip\? - endm - trap_cc macro - bcs skip\? - trap ;failed carry clear - skip\? - endm - trap_mi macro - bpl skip\? - trap ;failed minus (bit 7 set) - skip\? - endm - trap_pl macro - bmi skip\? - trap ;failed plus (bit 7 clear) - skip\? - endm - trap_vs macro - bvc skip\? - trap ;failed overflow set - skip\? - endm - trap_vc macro - bvs skip\? - trap ;failed overflow clear - skip\? - endm - ; please observe that during the test the stack gets invalidated - ; therefore a RTS inside the success macro is not possible - success macro - jsr report_success - endm - endif - - -0001 = carry equ %00000001 ;flag bits in status -0002 = zero equ %00000010 -0004 = intdis equ %00000100 -0008 = decmode equ %00001000 -0010 = break equ %00010000 -0020 = reserv equ %00100000 -0040 = overfl equ %01000000 -0080 = minus equ %10000000 - -0001 = fc equ carry -0002 = fz equ zero -0003 = fzc equ carry+zero -0040 = fv equ overfl -0042 = fvz equ overfl+zero -0080 = fn equ minus -0081 = fnc equ minus+carry -0082 = fnz equ minus+zero -0083 = fnzc equ minus+zero+carry -00c0 = fnv equ minus+overfl - -0030 = fao equ break+reserv ;bits always on after PHP, BRK -0034 = fai equ fao+intdis ;+ forced interrupt disable -0038 = faod equ fao+decmode ;+ ignore decimal -003c = faid equ fai+decmode ;+ ignore decimal -00ff = m8 equ $ff ;8 bit mask -00fb = m8i equ $ff&~intdis ;8 bit mask - interrupt disable - - ;macros to allow masking of status bits. - ;masking test of decimal bit - ;masking of interrupt enable/disable on load and compare - ;masking of always on bits after PHP or BRK (unused & break) on compare - if disable_decimal < 2 - if I_flag = 0 - load_flag macro - lda #\1&m8i ;force enable interrupts (mask I) - endm - cmp_flag macro - cmp #(\1|fao)&m8i ;I_flag is always enabled + always on bits - endm - eor_flag macro - eor #(\1&m8i|fao) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 1 - load_flag macro - lda #\1|intdis ;force disable interrupts - endm - cmp_flag macro - cmp #(\1|fai)&m8 ;I_flag is always disabled + always on bits - endm - eor_flag macro - eor #(\1|fai) ;invert expected flags + always on bits + I - endm - endif - if I_flag = 2 - load_flag macro - lda #\1 - ora flag_I_on ;restore I-flag - and flag_I_off - endm - cmp_flag macro - eor flag_I_on ;I_flag is never changed - cmp #(\1|fao)&m8i ;expected flags + always on bits, mask I - endm - eor_flag macro - eor flag_I_on ;I_flag is never changed - eor #(\1&m8i|fao) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 3 - load_flag macro - lda #\1 ;allow test to change I-flag (no mask) - endm - cmp_flag macro - cmp #(\1|fao)&m8 ;expected flags + always on bits - endm - eor_flag macro - eor #\1|fao ;invert expected flags + always on bits - endm - endif - else - if I_flag = 0 - load_flag macro - lda #\1&m8i ;force enable interrupts (mask I) - endm - cmp_flag macro - ora #decmode ;ignore decimal mode bit - cmp #(\1|faod)&m8i ;I_flag is always enabled + always on bits - endm - eor_flag macro - ora #decmode ;ignore decimal mode bit - eor #(\1&m8i|faod) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 1 - load_flag macro - lda #\1|intdis ;force disable interrupts - endm - cmp_flag macro - ora #decmode ;ignore decimal mode bit - cmp #(\1|faid)&m8 ;I_flag is always disabled + always on bits - endm - eor_flag macro - ora #decmode ;ignore decimal mode bit - eor #(\1|faid) ;invert expected flags + always on bits + I - endm - endif - if I_flag = 2 - load_flag macro - lda #\1 - ora flag_I_on ;restore I-flag - and flag_I_off - endm - cmp_flag macro - eor flag_I_on ;I_flag is never changed - ora #decmode ;ignore decimal mode bit - cmp #(\1|faod)&m8i ;expected flags + always on bits, mask I - endm - eor_flag macro - eor flag_I_on ;I_flag is never changed - ora #decmode ;ignore decimal mode bit - eor #(\1&m8i|faod) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 3 - load_flag macro - lda #\1 ;allow test to change I-flag (no mask) - endm - cmp_flag macro - ora #decmode ;ignore decimal mode bit - cmp #(\1|faod)&m8 ;expected flags + always on bits - endm - eor_flag macro - ora #decmode ;ignore decimal mode bit - eor #\1|faod ;invert expected flags + always on bits - endm - endif - endif - - ;macros to set (register|memory|zeropage) & status - set_stat macro ;setting flags in the processor status register - load_flag \1 - pha ;use stack to load status - plp - endm - - set_a macro ;precharging accu & status - load_flag \2 - pha ;use stack to load status - lda #\1 ;precharge accu - plp - endm - - set_x macro ;precharging index & status - load_flag \2 - pha ;use stack to load status - ldx #\1 ;precharge index x - plp - endm - - set_y macro ;precharging index & status - load_flag \2 - pha ;use stack to load status - ldy #\1 ;precharge index y - plp - endm - - set_ax macro ;precharging indexed accu & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;precharge accu - plp - endm - - set_ay macro ;precharging indexed accu & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,y ;precharge accu - plp - endm - - set_z macro ;precharging indexed zp & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to zeropage - sta zpt - plp - endm - - set_zx macro ;precharging zp,x & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to indexed zeropage - sta zpt,x - plp - endm - - set_abs macro ;precharging indexed memory & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to memory - sta abst - plp - endm - - set_absx macro ;precharging abs,x & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to indexed memory - sta abst,x - plp - endm - - ;macros to test (register|memory|zeropage) & status & (mask) - tst_stat macro ;testing flags in the processor status register - php ;save status - pla ;use stack to retrieve status - pha - cmp_flag \1 - trap_ne - plp ;restore status - endm - - tst_a macro ;testing result in accu & flags - php ;save flags - cmp #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_x macro ;testing result in x index & flags - php ;save flags - cpx #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_y macro ;testing result in y index & flags - php ;save flags - cpy #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_ax macro ;indexed testing result in accu & flags - php ;save flags - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne ; - endm - - tst_ay macro ;indexed testing result in accu & flags - php ;save flags - cmp \1,y ;test result - trap_ne ; - pla ;load status - eor_flag \3 - cmp \2,y ;test flags - trap_ne - endm - - tst_z macro ;indexed testing result in zp & flags - php ;save flags - lda zpt - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_zx macro ;testing result in zp,x & flags - php ;save flags - lda zpt,x - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_abs macro ;indexed testing result in memory & flags - php ;save flags - lda abst - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_absx macro ;testing result in abs,x & flags - php ;save flags - lda abst,x - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - ; RAM integrity test - ; verifies that none of the previous tests has altered RAM outside of the - ; designated write areas. - ; uses zpt word as indirect pointer, zpt+2 word as checksum - if ram_top > -1 - check_ram macro - cld - lda #0 - sta zpt ;set low byte of indirect pointer - sta zpt+3 ;checksum high byte - if disable_selfmod = 0 - sta range_adr ;reset self modifying code - endif - clc - ldx #zp_bss-zero_page ;zeropage - write test area - ccs3\? adc zero_page,x - bcc ccs2\? - inc zpt+3 ;carry to high byte - clc - ccs2\? inx - bne ccs3\? - ldx #hi(abs1) ;set high byte of indirect pointer - stx zpt+1 - ldy #lo(abs1) ;data after write & execute test area - ccs5\? adc (zpt),y - bcc ccs4\? - inc zpt+3 ;carry to high byte - clc - ccs4\? iny - bne ccs5\? - inx ;advance RAM high address - stx zpt+1 - cpx #ram_top - bne ccs5\? - sta zpt+2 ;checksum low is - cmp ram_chksm ;checksum low expected - trap_ne ;checksum mismatch - lda zpt+3 ;checksum high is - cmp ram_chksm+1 ;checksum high expected - trap_ne ;checksum mismatch - endm - else - check_ram macro - ;RAM check disabled - RAM size not set - endm - endif - - next_test macro ;make sure, tests don't jump the fence - lda test_case ;previous test - cmp #test_num - trap_ne ;test is out of sequence - test_num = test_num + 1 - lda #test_num ;*** next tests' number - sta test_case - ;check_ram ;uncomment to find altered RAM after each test - endm - - if load_data_direct = 1 - data - else - bss ;uninitialized segment, copy of data at end of code! - endif - ; org zero_page -0000 = org 0 ;edited to provide binaries loading from 0 -0000 : 00000000000000.. ds zero_page - ;break test interrupt save -000a : 00 irq_a ds 1 ;a register -000b : 00 irq_x ds 1 ;x register - if I_flag = 2 - ;masking for I bit in status - flag_I_on ds 1 ;or mask to load flags - flag_I_off ds 1 ;and mask to load flags - endif -000c : zpt ;5 bytes store/modify test area - ;add/subtract operand generation and result/flag prediction -000c : 00 adfc ds 1 ;carry flag before op -000d : 00 ad1 ds 1 ;operand 1 - accumulator -000e : 00 ad2 ds 1 ;operand 2 - memory / immediate -000f : 00 adrl ds 1 ;expected result bits 0-7 -0010 : 00 adrh ds 1 ;expected result bit 8 (carry) -0011 : 00 adrf ds 1 ;expected flags NV0000ZC (only binary mode) -0012 : 00 sb2 ds 1 ;operand 2 complemented for subtract -0013 : zp_bss -0013 : c3824100 zp1 db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR -0017 : 7f zp7f db $7f ;test pattern for compare - ;logical zeropage operands -0018 : 001f7180 zpOR db 0,$1f,$71,$80 ;test pattern for OR -001c : 0fff7f80 zpAN db $0f,$ff,$7f,$80 ;test pattern for AND -0020 : ff0f8f8f zpEO db $ff,$0f,$8f,$8f ;test pattern for EOR - ;indirect addressing pointers -0024 : 1702 ind1 dw abs1 ;indirect pointer to pattern in absolute memory -0026 : 1802 dw abs1+1 -0028 : 1902 dw abs1+2 -002a : 1a02 dw abs1+3 -002c : 1b02 dw abs7f -002e : 1f01 inw1 dw abs1-$f8 ;indirect pointer for wrap-test pattern -0030 : 0302 indt dw abst ;indirect pointer to store area in absolute memory -0032 : 0402 dw abst+1 -0034 : 0502 dw abst+2 -0036 : 0602 dw abst+3 -0038 : 0b01 inwt dw abst-$f8 ;indirect pointer for wrap-test store -003a : 4e02 indAN dw absAN ;indirect pointer to AND pattern in absolute memory -003c : 4f02 dw absAN+1 -003e : 5002 dw absAN+2 -0040 : 5102 dw absAN+3 -0042 : 5202 indEO dw absEO ;indirect pointer to EOR pattern in absolute memory -0044 : 5302 dw absEO+1 -0046 : 5402 dw absEO+2 -0048 : 5502 dw absEO+3 -004a : 4a02 indOR dw absOR ;indirect pointer to OR pattern in absolute memory -004c : 4b02 dw absOR+1 -004e : 4c02 dw absOR+2 -0050 : 4d02 dw absOR+3 - ;add/subtract indirect pointers -0052 : 0302 adi2 dw ada2 ;indirect pointer to operand 2 in absolute memory -0054 : 0402 sbi2 dw sba2 ;indirect pointer to complemented operand 2 (SBC) -0056 : 0401 adiy2 dw ada2-$ff ;with offset for indirect indexed -0058 : 0501 sbiy2 dw sba2-$ff -005a : zp_bss_end - -0200 = org data_segment -0200 : 00 test_case ds 1 ;current test number -0201 : 0000 ram_chksm ds 2 ;checksum for RAM integrity test - ;add/subtract operand copy - abs tests write area -0203 : abst ;5 bytes store/modify test area -0203 : 00 ada2 ds 1 ;operand 2 -0204 : 00 sba2 ds 1 ;operand 2 complemented for subtract -0205 : 000000 ds 3 ;fill remaining bytes -0208 : data_bss - if load_data_direct = 1 -0208 : 2900 ex_andi and #0 ;execute immediate opcodes -020a : 60 rts -020b : 4900 ex_eori eor #0 ;execute immediate opcodes -020d : 60 rts -020e : 0900 ex_orai ora #0 ;execute immediate opcodes -0210 : 60 rts -0211 : 6900 ex_adci adc #0 ;execute immediate opcodes -0213 : 60 rts -0214 : e900 ex_sbci sbc #0 ;execute immediate opcodes -0216 : 60 rts - else - ex_andi ds 3 - ex_eori ds 3 - ex_orai ds 3 - ex_adci ds 3 - ex_sbci ds 3 - endif -0217 : c3824100 abs1 db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR -021b : 7f abs7f db $7f ;test pattern for compare - ;loads -021c : 80800002 fLDx db fn,fn,0,fz ;expected flags for load - ;shifts -0220 : rASL ;expected result ASL & ROL -carry -0220 : 86048200 rROL db $86,$04,$82,0 ; " -0224 : 87058301 rROLc db $87,$05,$83,1 ;expected result ROL +carry -0228 : rLSR ;expected result LSR & ROR -carry -0228 : 61412000 rROR db $61,$41,$20,0 ; " -022c : e1c1a080 rRORc db $e1,$c1,$a0,$80 ;expected result ROR +carry -0230 : fASL ;expected flags for shifts -0230 : 81018002 fROL db fnc,fc,fn,fz ;no carry in -0234 : 81018000 fROLc db fnc,fc,fn,0 ;carry in -0238 : fLSR -0238 : 01000102 fROR db fc,0,fc,fz ;no carry in -023c : 81808180 fRORc db fnc,fn,fnc,fn ;carry in - ;increments (decrements) -0240 : 7f80ff0001 rINC db $7f,$80,$ff,0,1 ;expected result for INC/DEC -0245 : 0080800200 fINC db 0,fn,fn,fz,0 ;expected flags for INC/DEC - ;logical memory operand -024a : 001f7180 absOR db 0,$1f,$71,$80 ;test pattern for OR -024e : 0fff7f80 absAN db $0f,$ff,$7f,$80 ;test pattern for AND -0252 : ff0f8f8f absEO db $ff,$0f,$8f,$8f ;test pattern for EOR - ;logical accu operand -0256 : 00f11f00 absORa db 0,$f1,$1f,0 ;test pattern for OR -025a : f0ffffff absANa db $f0,$ff,$ff,$ff ;test pattern for AND -025e : fff0f00f absEOa db $ff,$f0,$f0,$0f ;test pattern for EOR - ;logical results -0262 : 00ff7f80 absrlo db 0,$ff,$7f,$80 -0266 : 02800080 absflo db fz,fn,0,fn -026a : data_bss_end - - - code -0400 = org code_segment -0400 : d8 start cld -0401 : a2ff ldx #$ff -0403 : 9a txs -0404 : a900 lda #0 ;*** test 0 = initialize -0406 : 8d0002 sta test_case -0000 = test_num = 0 - - ;stop interrupts before initializing BSS - if I_flag = 1 - sei - endif - - ;initialize I/O for report channel - if report = 1 - jsr report_init - endif - - ;pretest small branch offset -0409 : a205 ldx #5 -040b : 4c3304 jmp psb_test -040e : psb_bwok -040e : a005 ldy #5 -0410 : d008 bne psb_forw - trap ;branch should be taken -0412 : 4c1204 > jmp * ;failed anyway - -0415 : 88 dey ;forward landing zone -0416 : 88 dey -0417 : 88 dey -0418 : 88 dey -0419 : 88 dey -041a : psb_forw -041a : 88 dey -041b : 88 dey -041c : 88 dey -041d : 88 dey -041e : 88 dey -041f : f017 beq psb_fwok - trap ;forward offset -0421 : 4c2104 > jmp * ;failed anyway - - -0424 : ca dex ;backward landing zone -0425 : ca dex -0426 : ca dex -0427 : ca dex -0428 : ca dex -0429 : psb_back -0429 : ca dex -042a : ca dex -042b : ca dex -042c : ca dex -042d : ca dex -042e : f0de beq psb_bwok - trap ;backward offset -0430 : 4c3004 > jmp * ;failed anyway - -0433 : psb_test -0433 : d0f4 bne psb_back - trap ;branch should be taken -0435 : 4c3504 > jmp * ;failed anyway - -0438 : psb_fwok - - ;initialize BSS segment - if load_data_direct != 1 - ldx #zp_end-zp_init-1 - ld_zp lda zp_init,x - sta zp_bss,x - dex - bpl ld_zp - ldx #data_end-data_init-1 - ld_data lda data_init,x - sta data_bss,x - dex - bpl ld_data - if ROM_vectors = 1 - ldx #5 - ld_vect lda vec_init,x - sta vec_bss,x - dex - bpl ld_vect - endif - endif - - ;retain status of interrupt flag - if I_flag = 2 - php - pla - and #4 ;isolate flag - sta flag_I_on ;or mask - eor #lo(~4) ;reverse - sta flag_I_off ;and mask - endif - - ;generate checksum for RAM integrity test - if ram_top > -1 - lda #0 - sta zpt ;set low byte of indirect pointer - sta ram_chksm+1 ;checksum high byte - if disable_selfmod = 0 - sta range_adr ;reset self modifying code - endif - clc - ldx #zp_bss-zero_page ;zeropage - write test area - gcs3 adc zero_page,x - bcc gcs2 - inc ram_chksm+1 ;carry to high byte - clc - gcs2 inx - bne gcs3 - ldx #hi(abs1) ;set high byte of indirect pointer - stx zpt+1 - ldy #lo(abs1) ;data after write & execute test area - gcs5 adc (zpt),y - bcc gcs4 - inc ram_chksm+1 ;carry to high byte - clc - gcs4 iny - bne gcs5 - inx ;advance RAM high address - stx zpt+1 - cpx #ram_top - bne gcs5 - sta ram_chksm ;checksum complete - endif - next_test -0438 : ad0002 > lda test_case ;previous test -043b : c900 > cmp #test_num - > trap_ne ;test is out of sequence -043d : d0fe > bne * ;failed not equal (non zero) - > -0001 = >test_num = test_num + 1 -043f : a901 > lda #test_num ;*** next tests' number -0441 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - if disable_selfmod = 0 - ;testing relative addressing with BEQ -0444 : a0fe ldy #$fe ;testing maximum range, not -1/-2 (invalid/self adr) -0446 : range_loop -0446 : 88 dey ;next relative address -0447 : 98 tya -0448 : aa tax ;precharge count to end of loop -0449 : 1008 bpl range_fw ;calculate relative address -044b : 18 clc ;avoid branch self or to relative address of branch -044c : 6902 adc #2 -044e : ea nop ;offset landing zone - tolerate +/-5 offset to branch -044f : ea nop -0450 : ea nop -0451 : ea nop -0452 : ea nop -0453 : range_fw -0453 : ea nop -0454 : ea nop -0455 : ea nop -0456 : ea nop -0457 : ea nop -0458 : 497f eor #$7f ;complement except sign -045a : 8de604 sta range_adr ;load into test target -045d : a900 lda #0 ;should set zero flag in status register -045f : 4ce504 jmp range_op - -0462 : ca dex ; offset landing zone - backward branch too far -0463 : ca dex -0464 : ca dex -0465 : ca dex -0466 : ca dex - ;relative address target field with branch under test in the middle -0467 : ca dex ;-128 - max backward -0468 : ca dex -0469 : ca dex -046a : ca dex -046b : ca dex -046c : ca dex -046d : ca dex -046e : ca dex -046f : ca dex ;-120 -0470 : ca dex -0471 : ca dex -0472 : ca dex -0473 : ca dex -0474 : ca dex -0475 : ca dex -0476 : ca dex -0477 : ca dex -0478 : ca dex -0479 : ca dex ;-110 -047a : ca dex -047b : ca dex -047c : ca dex -047d : ca dex -047e : ca dex -047f : ca dex -0480 : ca dex -0481 : ca dex -0482 : ca dex -0483 : ca dex ;-100 -0484 : ca dex -0485 : ca dex -0486 : ca dex -0487 : ca dex -0488 : ca dex -0489 : ca dex -048a : ca dex -048b : ca dex -048c : ca dex -048d : ca dex ;-90 -048e : ca dex -048f : ca dex -0490 : ca dex -0491 : ca dex -0492 : ca dex -0493 : ca dex -0494 : ca dex -0495 : ca dex -0496 : ca dex -0497 : ca dex ;-80 -0498 : ca dex -0499 : ca dex -049a : ca dex -049b : ca dex -049c : ca dex -049d : ca dex -049e : ca dex -049f : ca dex -04a0 : ca dex -04a1 : ca dex ;-70 -04a2 : ca dex -04a3 : ca dex -04a4 : ca dex -04a5 : ca dex -04a6 : ca dex -04a7 : ca dex -04a8 : ca dex -04a9 : ca dex -04aa : ca dex -04ab : ca dex ;-60 -04ac : ca dex -04ad : ca dex -04ae : ca dex -04af : ca dex -04b0 : ca dex -04b1 : ca dex -04b2 : ca dex -04b3 : ca dex -04b4 : ca dex -04b5 : ca dex ;-50 -04b6 : ca dex -04b7 : ca dex -04b8 : ca dex -04b9 : ca dex -04ba : ca dex -04bb : ca dex -04bc : ca dex -04bd : ca dex -04be : ca dex -04bf : ca dex ;-40 -04c0 : ca dex -04c1 : ca dex -04c2 : ca dex -04c3 : ca dex -04c4 : ca dex -04c5 : ca dex -04c6 : ca dex -04c7 : ca dex -04c8 : ca dex -04c9 : ca dex ;-30 -04ca : ca dex -04cb : ca dex -04cc : ca dex -04cd : ca dex -04ce : ca dex -04cf : ca dex -04d0 : ca dex -04d1 : ca dex -04d2 : ca dex -04d3 : ca dex ;-20 -04d4 : ca dex -04d5 : ca dex -04d6 : ca dex -04d7 : ca dex -04d8 : ca dex -04d9 : ca dex -04da : ca dex -04db : ca dex -04dc : ca dex -04dd : ca dex ;-10 -04de : ca dex -04df : ca dex -04e0 : ca dex -04e1 : ca dex -04e2 : ca dex -04e3 : ca dex -04e4 : ca dex ;-3 -04e5 : range_op ;test target with zero flag=0, z=1 if previous dex -04e6 = range_adr = *+1 ;modifiable relative address -04e5 : f03e beq *+64 ;+64 if called without modification -04e7 : ca dex ;+0 -04e8 : ca dex -04e9 : ca dex -04ea : ca dex -04eb : ca dex -04ec : ca dex -04ed : ca dex -04ee : ca dex -04ef : ca dex -04f0 : ca dex -04f1 : ca dex ;+10 -04f2 : ca dex -04f3 : ca dex -04f4 : ca dex -04f5 : ca dex -04f6 : ca dex -04f7 : ca dex -04f8 : ca dex -04f9 : ca dex -04fa : ca dex -04fb : ca dex ;+20 -04fc : ca dex -04fd : ca dex -04fe : ca dex -04ff : ca dex -0500 : ca dex -0501 : ca dex -0502 : ca dex -0503 : ca dex -0504 : ca dex -0505 : ca dex ;+30 -0506 : ca dex -0507 : ca dex -0508 : ca dex -0509 : ca dex -050a : ca dex -050b : ca dex -050c : ca dex -050d : ca dex -050e : ca dex -050f : ca dex ;+40 -0510 : ca dex -0511 : ca dex -0512 : ca dex -0513 : ca dex -0514 : ca dex -0515 : ca dex -0516 : ca dex -0517 : ca dex -0518 : ca dex -0519 : ca dex ;+50 -051a : ca dex -051b : ca dex -051c : ca dex -051d : ca dex -051e : ca dex -051f : ca dex -0520 : ca dex -0521 : ca dex -0522 : ca dex -0523 : ca dex ;+60 -0524 : ca dex -0525 : ca dex -0526 : ca dex -0527 : ca dex -0528 : ca dex -0529 : ca dex -052a : ca dex -052b : ca dex -052c : ca dex -052d : ca dex ;+70 -052e : ca dex -052f : ca dex -0530 : ca dex -0531 : ca dex -0532 : ca dex -0533 : ca dex -0534 : ca dex -0535 : ca dex -0536 : ca dex -0537 : ca dex ;+80 -0538 : ca dex -0539 : ca dex -053a : ca dex -053b : ca dex -053c : ca dex -053d : ca dex -053e : ca dex -053f : ca dex -0540 : ca dex -0541 : ca dex ;+90 -0542 : ca dex -0543 : ca dex -0544 : ca dex -0545 : ca dex -0546 : ca dex -0547 : ca dex -0548 : ca dex -0549 : ca dex -054a : ca dex -054b : ca dex ;+100 -054c : ca dex -054d : ca dex -054e : ca dex -054f : ca dex -0550 : ca dex -0551 : ca dex -0552 : ca dex -0553 : ca dex -0554 : ca dex -0555 : ca dex ;+110 -0556 : ca dex -0557 : ca dex -0558 : ca dex -0559 : ca dex -055a : ca dex -055b : ca dex -055c : ca dex -055d : ca dex -055e : ca dex -055f : ca dex ;+120 -0560 : ca dex -0561 : ca dex -0562 : ca dex -0563 : ca dex -0564 : ca dex -0565 : ca dex -0566 : ea nop ;offset landing zone - forward branch too far -0567 : ea nop -0568 : ea nop -0569 : ea nop -056a : ea nop -056b : f008 beq range_ok ;+127 - max forward - trap ; bad range -056d : 4c6d05 > jmp * ;failed anyway - -0570 : ea nop ;offset landing zone - tolerate +/-5 offset to branch -0571 : ea nop -0572 : ea nop -0573 : ea nop -0574 : ea nop -0575 : range_ok -0575 : ea nop -0576 : ea nop -0577 : ea nop -0578 : ea nop -0579 : ea nop -057a : c000 cpy #0 -057c : f003 beq range_end -057e : 4c4604 jmp range_loop -0581 : range_end ;range test successful - endif - next_test -0581 : ad0002 > lda test_case ;previous test -0584 : c901 > cmp #test_num - > trap_ne ;test is out of sequence -0586 : d0fe > bne * ;failed not equal (non zero) - > -0002 = >test_num = test_num + 1 -0588 : a902 > lda #test_num ;*** next tests' number -058a : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ;partial test BNE & CMP, CPX, CPY immediate -058d : c001 cpy #1 ;testing BNE true -058f : d003 bne test_bne - trap -0591 : 4c9105 > jmp * ;failed anyway - -0594 : test_bne -0594 : a900 lda #0 -0596 : c900 cmp #0 ;test compare immediate - trap_ne -0598 : d0fe > bne * ;failed not equal (non zero) - - trap_cc -059a : 90fe > bcc * ;failed carry clear - - trap_mi -059c : 30fe > bmi * ;failed minus (bit 7 set) - -059e : c901 cmp #1 - trap_eq -05a0 : f0fe > beq * ;failed equal (zero) - - trap_cs -05a2 : b0fe > bcs * ;failed carry set - - trap_pl -05a4 : 10fe > bpl * ;failed plus (bit 7 clear) - -05a6 : aa tax -05a7 : e000 cpx #0 ;test compare x immediate - trap_ne -05a9 : d0fe > bne * ;failed not equal (non zero) - - trap_cc -05ab : 90fe > bcc * ;failed carry clear - - trap_mi -05ad : 30fe > bmi * ;failed minus (bit 7 set) - -05af : e001 cpx #1 - trap_eq -05b1 : f0fe > beq * ;failed equal (zero) - - trap_cs -05b3 : b0fe > bcs * ;failed carry set - - trap_pl -05b5 : 10fe > bpl * ;failed plus (bit 7 clear) - -05b7 : a8 tay -05b8 : c000 cpy #0 ;test compare y immediate - trap_ne -05ba : d0fe > bne * ;failed not equal (non zero) - - trap_cc -05bc : 90fe > bcc * ;failed carry clear - - trap_mi -05be : 30fe > bmi * ;failed minus (bit 7 set) - -05c0 : c001 cpy #1 - trap_eq -05c2 : f0fe > beq * ;failed equal (zero) - - trap_cs -05c4 : b0fe > bcs * ;failed carry set - - trap_pl -05c6 : 10fe > bpl * ;failed plus (bit 7 clear) - - next_test -05c8 : ad0002 > lda test_case ;previous test -05cb : c902 > cmp #test_num - > trap_ne ;test is out of sequence -05cd : d0fe > bne * ;failed not equal (non zero) - > -0003 = >test_num = test_num + 1 -05cf : a903 > lda #test_num ;*** next tests' number -05d1 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - ;testing stack operations PHA PHP PLA PLP - -05d4 : a2ff ldx #$ff ;initialize stack -05d6 : 9a txs -05d7 : a955 lda #$55 -05d9 : 48 pha -05da : a9aa lda #$aa -05dc : 48 pha -05dd : cdfe01 cmp $1fe ;on stack ? - trap_ne -05e0 : d0fe > bne * ;failed not equal (non zero) - -05e2 : ba tsx -05e3 : 8a txa ;overwrite accu -05e4 : c9fd cmp #$fd ;sp decremented? - trap_ne -05e6 : d0fe > bne * ;failed not equal (non zero) - -05e8 : 68 pla -05e9 : c9aa cmp #$aa ;successful retreived from stack? - trap_ne -05eb : d0fe > bne * ;failed not equal (non zero) - -05ed : 68 pla -05ee : c955 cmp #$55 - trap_ne -05f0 : d0fe > bne * ;failed not equal (non zero) - -05f2 : cdff01 cmp $1ff ;remains on stack? - trap_ne -05f5 : d0fe > bne * ;failed not equal (non zero) - -05f7 : ba tsx -05f8 : e0ff cpx #$ff ;sp incremented? - trap_ne -05fa : d0fe > bne * ;failed not equal (non zero) - - next_test -05fc : ad0002 > lda test_case ;previous test -05ff : c903 > cmp #test_num - > trap_ne ;test is out of sequence -0601 : d0fe > bne * ;failed not equal (non zero) - > -0004 = >test_num = test_num + 1 -0603 : a904 > lda #test_num ;*** next tests' number -0605 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ;testing branch decisions BPL BMI BVC BVS BCC BCS BNE BEQ - set_stat $ff ;all on - > load_flag $ff -0608 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -060a : 48 > pha ;use stack to load status -060b : 28 > plp - -060c : 101a bpl nbr1 ;branches should not be taken -060e : 501b bvc nbr2 -0610 : 901c bcc nbr3 -0612 : d01d bne nbr4 -0614 : 3003 bmi br1 ;branches should be taken - trap -0616 : 4c1606 > jmp * ;failed anyway - -0619 : 7003 br1 bvs br2 - trap -061b : 4c1b06 > jmp * ;failed anyway - -061e : b003 br2 bcs br3 - trap -0620 : 4c2006 > jmp * ;failed anyway - -0623 : f00f br3 beq br4 - trap -0625 : 4c2506 > jmp * ;failed anyway - -0628 : nbr1 - trap ;previous bpl taken -0628 : 4c2806 > jmp * ;failed anyway - -062b : nbr2 - trap ;previous bvc taken -062b : 4c2b06 > jmp * ;failed anyway - -062e : nbr3 - trap ;previous bcc taken -062e : 4c2e06 > jmp * ;failed anyway - -0631 : nbr4 - trap ;previous bne taken -0631 : 4c3106 > jmp * ;failed anyway - -0634 : 08 br4 php -0635 : ba tsx -0636 : e0fe cpx #$fe ;sp after php? - trap_ne -0638 : d0fe > bne * ;failed not equal (non zero) - -063a : 68 pla - cmp_flag $ff ;returned all flags on? -063b : c9ff > cmp #($ff |fao)&m8 ;expected flags + always on bits - - trap_ne -063d : d0fe > bne * ;failed not equal (non zero) - -063f : ba tsx -0640 : e0ff cpx #$ff ;sp after php? - trap_ne -0642 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 ;all off - > load_flag 0 -0644 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0646 : 48 > pha ;use stack to load status -0647 : 28 > plp - -0648 : 301a bmi nbr11 ;branches should not be taken -064a : 701b bvs nbr12 -064c : b01c bcs nbr13 -064e : f01d beq nbr14 -0650 : 1003 bpl br11 ;branches should be taken - trap -0652 : 4c5206 > jmp * ;failed anyway - -0655 : 5003 br11 bvc br12 - trap -0657 : 4c5706 > jmp * ;failed anyway - -065a : 9003 br12 bcc br13 - trap -065c : 4c5c06 > jmp * ;failed anyway - -065f : d00f br13 bne br14 - trap -0661 : 4c6106 > jmp * ;failed anyway - -0664 : nbr11 - trap ;previous bmi taken -0664 : 4c6406 > jmp * ;failed anyway - -0667 : nbr12 - trap ;previous bvs taken -0667 : 4c6706 > jmp * ;failed anyway - -066a : nbr13 - trap ;previous bcs taken -066a : 4c6a06 > jmp * ;failed anyway - -066d : nbr14 - trap ;previous beq taken -066d : 4c6d06 > jmp * ;failed anyway - -0670 : 08 br14 php -0671 : 68 pla - cmp_flag 0 ;flags off except break (pushed by sw) + reserved? -0672 : c930 > cmp #(0 |fao)&m8 ;expected flags + always on bits - - trap_ne -0674 : d0fe > bne * ;failed not equal (non zero) - - ;crosscheck flags - set_stat zero - > load_flag zero -0676 : a902 > lda #zero ;allow test to change I-flag (no mask) - > -0678 : 48 > pha ;use stack to load status -0679 : 28 > plp - -067a : d002 bne brzs1 -067c : f003 beq brzs2 -067e : brzs1 - trap ;branch zero/non zero -067e : 4c7e06 > jmp * ;failed anyway - -0681 : b002 brzs2 bcs brzs3 -0683 : 9003 bcc brzs4 -0685 : brzs3 - trap ;branch carry/no carry -0685 : 4c8506 > jmp * ;failed anyway - -0688 : 3002 brzs4 bmi brzs5 -068a : 1003 bpl brzs6 -068c : brzs5 - trap ;branch minus/plus -068c : 4c8c06 > jmp * ;failed anyway - -068f : 7002 brzs6 bvs brzs7 -0691 : 5003 bvc brzs8 -0693 : brzs7 - trap ;branch overflow/no overflow -0693 : 4c9306 > jmp * ;failed anyway - -0696 : brzs8 - set_stat carry - > load_flag carry -0696 : a901 > lda #carry ;allow test to change I-flag (no mask) - > -0698 : 48 > pha ;use stack to load status -0699 : 28 > plp - -069a : f002 beq brcs1 -069c : d003 bne brcs2 -069e : brcs1 - trap ;branch zero/non zero -069e : 4c9e06 > jmp * ;failed anyway - -06a1 : 9002 brcs2 bcc brcs3 -06a3 : b003 bcs brcs4 -06a5 : brcs3 - trap ;branch carry/no carry -06a5 : 4ca506 > jmp * ;failed anyway - -06a8 : 3002 brcs4 bmi brcs5 -06aa : 1003 bpl brcs6 -06ac : brcs5 - trap ;branch minus/plus -06ac : 4cac06 > jmp * ;failed anyway - -06af : 7002 brcs6 bvs brcs7 -06b1 : 5003 bvc brcs8 -06b3 : brcs7 - trap ;branch overflow/no overflow -06b3 : 4cb306 > jmp * ;failed anyway - - -06b6 : brcs8 - set_stat minus - > load_flag minus -06b6 : a980 > lda #minus ;allow test to change I-flag (no mask) - > -06b8 : 48 > pha ;use stack to load status -06b9 : 28 > plp - -06ba : f002 beq brmi1 -06bc : d003 bne brmi2 -06be : brmi1 - trap ;branch zero/non zero -06be : 4cbe06 > jmp * ;failed anyway - -06c1 : b002 brmi2 bcs brmi3 -06c3 : 9003 bcc brmi4 -06c5 : brmi3 - trap ;branch carry/no carry -06c5 : 4cc506 > jmp * ;failed anyway - -06c8 : 1002 brmi4 bpl brmi5 -06ca : 3003 bmi brmi6 -06cc : brmi5 - trap ;branch minus/plus -06cc : 4ccc06 > jmp * ;failed anyway - -06cf : 7002 brmi6 bvs brmi7 -06d1 : 5003 bvc brmi8 -06d3 : brmi7 - trap ;branch overflow/no overflow -06d3 : 4cd306 > jmp * ;failed anyway - -06d6 : brmi8 - set_stat overfl - > load_flag overfl -06d6 : a940 > lda #overfl ;allow test to change I-flag (no mask) - > -06d8 : 48 > pha ;use stack to load status -06d9 : 28 > plp - -06da : f002 beq brvs1 -06dc : d003 bne brvs2 -06de : brvs1 - trap ;branch zero/non zero -06de : 4cde06 > jmp * ;failed anyway - -06e1 : b002 brvs2 bcs brvs3 -06e3 : 9003 bcc brvs4 -06e5 : brvs3 - trap ;branch carry/no carry -06e5 : 4ce506 > jmp * ;failed anyway - -06e8 : 3002 brvs4 bmi brvs5 -06ea : 1003 bpl brvs6 -06ec : brvs5 - trap ;branch minus/plus -06ec : 4cec06 > jmp * ;failed anyway - -06ef : 5002 brvs6 bvc brvs7 -06f1 : 7003 bvs brvs8 -06f3 : brvs7 - trap ;branch overflow/no overflow -06f3 : 4cf306 > jmp * ;failed anyway - -06f6 : brvs8 - set_stat $ff-zero - > load_flag $ff-zero -06f6 : a9fd > lda #$ff-zero ;allow test to change I-flag (no mask) - > -06f8 : 48 > pha ;use stack to load status -06f9 : 28 > plp - -06fa : f002 beq brzc1 -06fc : d003 bne brzc2 -06fe : brzc1 - trap ;branch zero/non zero -06fe : 4cfe06 > jmp * ;failed anyway - -0701 : 9002 brzc2 bcc brzc3 -0703 : b003 bcs brzc4 -0705 : brzc3 - trap ;branch carry/no carry -0705 : 4c0507 > jmp * ;failed anyway - -0708 : 1002 brzc4 bpl brzc5 -070a : 3003 bmi brzc6 -070c : brzc5 - trap ;branch minus/plus -070c : 4c0c07 > jmp * ;failed anyway - -070f : 5002 brzc6 bvc brzc7 -0711 : 7003 bvs brzc8 -0713 : brzc7 - trap ;branch overflow/no overflow -0713 : 4c1307 > jmp * ;failed anyway - -0716 : brzc8 - set_stat $ff-carry - > load_flag $ff-carry -0716 : a9fe > lda #$ff-carry ;allow test to change I-flag (no mask) - > -0718 : 48 > pha ;use stack to load status -0719 : 28 > plp - -071a : d002 bne brcc1 -071c : f003 beq brcc2 -071e : brcc1 - trap ;branch zero/non zero -071e : 4c1e07 > jmp * ;failed anyway - -0721 : b002 brcc2 bcs brcc3 -0723 : 9003 bcc brcc4 -0725 : brcc3 - trap ;branch carry/no carry -0725 : 4c2507 > jmp * ;failed anyway - -0728 : 1002 brcc4 bpl brcc5 -072a : 3003 bmi brcc6 -072c : brcc5 - trap ;branch minus/plus -072c : 4c2c07 > jmp * ;failed anyway - -072f : 5002 brcc6 bvc brcc7 -0731 : 7003 bvs brcc8 -0733 : brcc7 - trap ;branch overflow/no overflow -0733 : 4c3307 > jmp * ;failed anyway - -0736 : brcc8 - set_stat $ff-minus - > load_flag $ff-minus -0736 : a97f > lda #$ff-minus ;allow test to change I-flag (no mask) - > -0738 : 48 > pha ;use stack to load status -0739 : 28 > plp - -073a : d002 bne brpl1 -073c : f003 beq brpl2 -073e : brpl1 - trap ;branch zero/non zero -073e : 4c3e07 > jmp * ;failed anyway - -0741 : 9002 brpl2 bcc brpl3 -0743 : b003 bcs brpl4 -0745 : brpl3 - trap ;branch carry/no carry -0745 : 4c4507 > jmp * ;failed anyway - -0748 : 3002 brpl4 bmi brpl5 -074a : 1003 bpl brpl6 -074c : brpl5 - trap ;branch minus/plus -074c : 4c4c07 > jmp * ;failed anyway - -074f : 5002 brpl6 bvc brpl7 -0751 : 7003 bvs brpl8 -0753 : brpl7 - trap ;branch overflow/no overflow -0753 : 4c5307 > jmp * ;failed anyway - -0756 : brpl8 - set_stat $ff-overfl - > load_flag $ff-overfl -0756 : a9bf > lda #$ff-overfl ;allow test to change I-flag (no mask) - > -0758 : 48 > pha ;use stack to load status -0759 : 28 > plp - -075a : d002 bne brvc1 -075c : f003 beq brvc2 -075e : brvc1 - trap ;branch zero/non zero -075e : 4c5e07 > jmp * ;failed anyway - -0761 : 9002 brvc2 bcc brvc3 -0763 : b003 bcs brvc4 -0765 : brvc3 - trap ;branch carry/no carry -0765 : 4c6507 > jmp * ;failed anyway - -0768 : 1002 brvc4 bpl brvc5 -076a : 3003 bmi brvc6 -076c : brvc5 - trap ;branch minus/plus -076c : 4c6c07 > jmp * ;failed anyway - -076f : 7002 brvc6 bvs brvc7 -0771 : 5003 bvc brvc8 -0773 : brvc7 - trap ;branch overflow/no overflow -0773 : 4c7307 > jmp * ;failed anyway - -0776 : brvc8 - next_test -0776 : ad0002 > lda test_case ;previous test -0779 : c904 > cmp #test_num - > trap_ne ;test is out of sequence -077b : d0fe > bne * ;failed not equal (non zero) - > -0005 = >test_num = test_num + 1 -077d : a905 > lda #test_num ;*** next tests' number -077f : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; test PHA does not alter flags or accumulator but PLA does -0782 : a255 ldx #$55 ;x & y protected -0784 : a0aa ldy #$aa - set_a 1,$ff ;push - > load_flag $ff -0786 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0788 : 48 > pha ;use stack to load status -0789 : a901 > lda #1 ;precharge accu -078b : 28 > plp - -078c : 48 pha - tst_a 1,$ff -078d : 08 > php ;save flags -078e : c901 > cmp #1 ;test result - > trap_ne -0790 : d0fe > bne * ;failed not equal (non zero) - > -0792 : 68 > pla ;load status -0793 : 48 > pha - > cmp_flag $ff -0794 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0796 : d0fe > bne * ;failed not equal (non zero) - > -0798 : 28 > plp ;restore status - - set_a 0,0 - > load_flag 0 -0799 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -079b : 48 > pha ;use stack to load status -079c : a900 > lda #0 ;precharge accu -079e : 28 > plp - -079f : 48 pha - tst_a 0,0 -07a0 : 08 > php ;save flags -07a1 : c900 > cmp #0 ;test result - > trap_ne -07a3 : d0fe > bne * ;failed not equal (non zero) - > -07a5 : 68 > pla ;load status -07a6 : 48 > pha - > cmp_flag 0 -07a7 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07a9 : d0fe > bne * ;failed not equal (non zero) - > -07ab : 28 > plp ;restore status - - set_a $ff,$ff - > load_flag $ff -07ac : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -07ae : 48 > pha ;use stack to load status -07af : a9ff > lda #$ff ;precharge accu -07b1 : 28 > plp - -07b2 : 48 pha - tst_a $ff,$ff -07b3 : 08 > php ;save flags -07b4 : c9ff > cmp #$ff ;test result - > trap_ne -07b6 : d0fe > bne * ;failed not equal (non zero) - > -07b8 : 68 > pla ;load status -07b9 : 48 > pha - > cmp_flag $ff -07ba : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07bc : d0fe > bne * ;failed not equal (non zero) - > -07be : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -07bf : a900 > lda #0 ;allow test to change I-flag (no mask) - > -07c1 : 48 > pha ;use stack to load status -07c2 : a901 > lda #1 ;precharge accu -07c4 : 28 > plp - -07c5 : 48 pha - tst_a 1,0 -07c6 : 08 > php ;save flags -07c7 : c901 > cmp #1 ;test result - > trap_ne -07c9 : d0fe > bne * ;failed not equal (non zero) - > -07cb : 68 > pla ;load status -07cc : 48 > pha - > cmp_flag 0 -07cd : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07cf : d0fe > bne * ;failed not equal (non zero) - > -07d1 : 28 > plp ;restore status - - set_a 0,$ff - > load_flag $ff -07d2 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -07d4 : 48 > pha ;use stack to load status -07d5 : a900 > lda #0 ;precharge accu -07d7 : 28 > plp - -07d8 : 48 pha - tst_a 0,$ff -07d9 : 08 > php ;save flags -07da : c900 > cmp #0 ;test result - > trap_ne -07dc : d0fe > bne * ;failed not equal (non zero) - > -07de : 68 > pla ;load status -07df : 48 > pha - > cmp_flag $ff -07e0 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07e2 : d0fe > bne * ;failed not equal (non zero) - > -07e4 : 28 > plp ;restore status - - set_a $ff,0 - > load_flag 0 -07e5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -07e7 : 48 > pha ;use stack to load status -07e8 : a9ff > lda #$ff ;precharge accu -07ea : 28 > plp - -07eb : 48 pha - tst_a $ff,0 -07ec : 08 > php ;save flags -07ed : c9ff > cmp #$ff ;test result - > trap_ne -07ef : d0fe > bne * ;failed not equal (non zero) - > -07f1 : 68 > pla ;load status -07f2 : 48 > pha - > cmp_flag 0 -07f3 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07f5 : d0fe > bne * ;failed not equal (non zero) - > -07f7 : 28 > plp ;restore status - - set_a 0,$ff ;pull - > load_flag $ff -07f8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -07fa : 48 > pha ;use stack to load status -07fb : a900 > lda #0 ;precharge accu -07fd : 28 > plp - -07fe : 68 pla - tst_a $ff,$ff-zero -07ff : 08 > php ;save flags -0800 : c9ff > cmp #$ff ;test result - > trap_ne -0802 : d0fe > bne * ;failed not equal (non zero) - > -0804 : 68 > pla ;load status -0805 : 48 > pha - > cmp_flag $ff-zero -0806 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0808 : d0fe > bne * ;failed not equal (non zero) - > -080a : 28 > plp ;restore status - - set_a $ff,0 - > load_flag 0 -080b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -080d : 48 > pha ;use stack to load status -080e : a9ff > lda #$ff ;precharge accu -0810 : 28 > plp - -0811 : 68 pla - tst_a 0,zero -0812 : 08 > php ;save flags -0813 : c900 > cmp #0 ;test result - > trap_ne -0815 : d0fe > bne * ;failed not equal (non zero) - > -0817 : 68 > pla ;load status -0818 : 48 > pha - > cmp_flag zero -0819 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -081b : d0fe > bne * ;failed not equal (non zero) - > -081d : 28 > plp ;restore status - - set_a $fe,$ff - > load_flag $ff -081e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0820 : 48 > pha ;use stack to load status -0821 : a9fe > lda #$fe ;precharge accu -0823 : 28 > plp - -0824 : 68 pla - tst_a 1,$ff-zero-minus -0825 : 08 > php ;save flags -0826 : c901 > cmp #1 ;test result - > trap_ne -0828 : d0fe > bne * ;failed not equal (non zero) - > -082a : 68 > pla ;load status -082b : 48 > pha - > cmp_flag $ff-zero-minus -082c : c97d > cmp #($ff-zero-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -082e : d0fe > bne * ;failed not equal (non zero) - > -0830 : 28 > plp ;restore status - - set_a 0,0 - > load_flag 0 -0831 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0833 : 48 > pha ;use stack to load status -0834 : a900 > lda #0 ;precharge accu -0836 : 28 > plp - -0837 : 68 pla - tst_a $ff,minus -0838 : 08 > php ;save flags -0839 : c9ff > cmp #$ff ;test result - > trap_ne -083b : d0fe > bne * ;failed not equal (non zero) - > -083d : 68 > pla ;load status -083e : 48 > pha - > cmp_flag minus -083f : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0841 : d0fe > bne * ;failed not equal (non zero) - > -0843 : 28 > plp ;restore status - - set_a $ff,$ff - > load_flag $ff -0844 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0846 : 48 > pha ;use stack to load status -0847 : a9ff > lda #$ff ;precharge accu -0849 : 28 > plp - -084a : 68 pla - tst_a 0,$ff-minus -084b : 08 > php ;save flags -084c : c900 > cmp #0 ;test result - > trap_ne -084e : d0fe > bne * ;failed not equal (non zero) - > -0850 : 68 > pla ;load status -0851 : 48 > pha - > cmp_flag $ff-minus -0852 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0854 : d0fe > bne * ;failed not equal (non zero) - > -0856 : 28 > plp ;restore status - - set_a $fe,0 - > load_flag 0 -0857 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0859 : 48 > pha ;use stack to load status -085a : a9fe > lda #$fe ;precharge accu -085c : 28 > plp - -085d : 68 pla - tst_a 1,0 -085e : 08 > php ;save flags -085f : c901 > cmp #1 ;test result - > trap_ne -0861 : d0fe > bne * ;failed not equal (non zero) - > -0863 : 68 > pla ;load status -0864 : 48 > pha - > cmp_flag 0 -0865 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0867 : d0fe > bne * ;failed not equal (non zero) - > -0869 : 28 > plp ;restore status - -086a : e055 cpx #$55 ;x & y unchanged? - trap_ne -086c : d0fe > bne * ;failed not equal (non zero) - -086e : c0aa cpy #$aa - trap_ne -0870 : d0fe > bne * ;failed not equal (non zero) - - next_test -0872 : ad0002 > lda test_case ;previous test -0875 : c905 > cmp #test_num - > trap_ne ;test is out of sequence -0877 : d0fe > bne * ;failed not equal (non zero) - > -0006 = >test_num = test_num + 1 -0879 : a906 > lda #test_num ;*** next tests' number -087b : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; partial pretest EOR # - set_a $3c,0 - > load_flag 0 -087e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0880 : 48 > pha ;use stack to load status -0881 : a93c > lda #$3c ;precharge accu -0883 : 28 > plp - -0884 : 49c3 eor #$c3 - tst_a $ff,fn -0886 : 08 > php ;save flags -0887 : c9ff > cmp #$ff ;test result - > trap_ne -0889 : d0fe > bne * ;failed not equal (non zero) - > -088b : 68 > pla ;load status -088c : 48 > pha - > cmp_flag fn -088d : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -088f : d0fe > bne * ;failed not equal (non zero) - > -0891 : 28 > plp ;restore status - - set_a $c3,0 - > load_flag 0 -0892 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0894 : 48 > pha ;use stack to load status -0895 : a9c3 > lda #$c3 ;precharge accu -0897 : 28 > plp - -0898 : 49c3 eor #$c3 - tst_a 0,fz -089a : 08 > php ;save flags -089b : c900 > cmp #0 ;test result - > trap_ne -089d : d0fe > bne * ;failed not equal (non zero) - > -089f : 68 > pla ;load status -08a0 : 48 > pha - > cmp_flag fz -08a1 : c932 > cmp #(fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -08a3 : d0fe > bne * ;failed not equal (non zero) - > -08a5 : 28 > plp ;restore status - - next_test -08a6 : ad0002 > lda test_case ;previous test -08a9 : c906 > cmp #test_num - > trap_ne ;test is out of sequence -08ab : d0fe > bne * ;failed not equal (non zero) - > -0007 = >test_num = test_num + 1 -08ad : a907 > lda #test_num ;*** next tests' number -08af : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; PC modifying instructions except branches (NOP, JMP, JSR, RTS, BRK, RTI) - ; testing NOP -08b2 : a224 ldx #$24 -08b4 : a042 ldy #$42 - set_a $18,0 - > load_flag 0 -08b6 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -08b8 : 48 > pha ;use stack to load status -08b9 : a918 > lda #$18 ;precharge accu -08bb : 28 > plp - -08bc : ea nop - tst_a $18,0 -08bd : 08 > php ;save flags -08be : c918 > cmp #$18 ;test result - > trap_ne -08c0 : d0fe > bne * ;failed not equal (non zero) - > -08c2 : 68 > pla ;load status -08c3 : 48 > pha - > cmp_flag 0 -08c4 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -08c6 : d0fe > bne * ;failed not equal (non zero) - > -08c8 : 28 > plp ;restore status - -08c9 : e024 cpx #$24 - trap_ne -08cb : d0fe > bne * ;failed not equal (non zero) - -08cd : c042 cpy #$42 - trap_ne -08cf : d0fe > bne * ;failed not equal (non zero) - -08d1 : a2db ldx #$db -08d3 : a0bd ldy #$bd - set_a $e7,$ff - > load_flag $ff -08d5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -08d7 : 48 > pha ;use stack to load status -08d8 : a9e7 > lda #$e7 ;precharge accu -08da : 28 > plp - -08db : ea nop - tst_a $e7,$ff -08dc : 08 > php ;save flags -08dd : c9e7 > cmp #$e7 ;test result - > trap_ne -08df : d0fe > bne * ;failed not equal (non zero) - > -08e1 : 68 > pla ;load status -08e2 : 48 > pha - > cmp_flag $ff -08e3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -08e5 : d0fe > bne * ;failed not equal (non zero) - > -08e7 : 28 > plp ;restore status - -08e8 : e0db cpx #$db - trap_ne -08ea : d0fe > bne * ;failed not equal (non zero) - -08ec : c0bd cpy #$bd - trap_ne -08ee : d0fe > bne * ;failed not equal (non zero) - - next_test -08f0 : ad0002 > lda test_case ;previous test -08f3 : c907 > cmp #test_num - > trap_ne ;test is out of sequence -08f5 : d0fe > bne * ;failed not equal (non zero) - > -0008 = >test_num = test_num + 1 -08f7 : a908 > lda #test_num ;*** next tests' number -08f9 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; jump absolute - set_stat $0 - > load_flag $0 -08fc : a900 > lda #$0 ;allow test to change I-flag (no mask) - > -08fe : 48 > pha ;use stack to load status -08ff : 28 > plp - -0900 : a946 lda #'F' -0902 : a241 ldx #'A' -0904 : a052 ldy #'R' ;N=0, V=0, Z=0, C=0 -0906 : 4cef36 jmp test_far -0909 : ea nop -090a : ea nop - trap_ne ;runover protection -090b : d0fe > bne * ;failed not equal (non zero) - -090d : e8 inx -090e : e8 inx -090f : far_ret - trap_eq ;returned flags OK? -090f : f0fe > beq * ;failed equal (zero) - - trap_pl -0911 : 10fe > bpl * ;failed plus (bit 7 clear) - - trap_cc -0913 : 90fe > bcc * ;failed carry clear - - trap_vc -0915 : 50fe > bvc * ;failed overflow clear - -0917 : c9ec cmp #('F'^$aa) ;returned registers OK? - trap_ne -0919 : d0fe > bne * ;failed not equal (non zero) - -091b : e042 cpx #('A'+1) - trap_ne -091d : d0fe > bne * ;failed not equal (non zero) - -091f : c04f cpy #('R'-3) - trap_ne -0921 : d0fe > bne * ;failed not equal (non zero) - -0923 : ca dex -0924 : c8 iny -0925 : c8 iny -0926 : c8 iny -0927 : 49aa eor #$aa ;N=0, V=1, Z=0, C=1 -0929 : 4c3209 jmp test_near -092c : ea nop -092d : ea nop - trap_ne ;runover protection -092e : d0fe > bne * ;failed not equal (non zero) - -0930 : e8 inx -0931 : e8 inx -0932 : test_near - trap_eq ;passed flags OK? -0932 : f0fe > beq * ;failed equal (zero) - - trap_mi -0934 : 30fe > bmi * ;failed minus (bit 7 set) - - trap_cc -0936 : 90fe > bcc * ;failed carry clear - - trap_vc -0938 : 50fe > bvc * ;failed overflow clear - -093a : c946 cmp #'F' ;passed registers OK? - trap_ne -093c : d0fe > bne * ;failed not equal (non zero) - -093e : e041 cpx #'A' - trap_ne -0940 : d0fe > bne * ;failed not equal (non zero) - -0942 : c052 cpy #'R' - trap_ne -0944 : d0fe > bne * ;failed not equal (non zero) - - next_test -0946 : ad0002 > lda test_case ;previous test -0949 : c908 > cmp #test_num - > trap_ne ;test is out of sequence -094b : d0fe > bne * ;failed not equal (non zero) - > -0009 = >test_num = test_num + 1 -094d : a909 > lda #test_num ;*** next tests' number -094f : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; jump indirect - set_stat 0 - > load_flag 0 -0952 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0954 : 48 > pha ;use stack to load status -0955 : 28 > plp - -0956 : a949 lda #'I' -0958 : a24e ldx #'N' -095a : a044 ldy #'D' ;N=0, V=0, Z=0, C=0 -095c : 6c1e37 jmp (ptr_tst_ind) -095f : ea nop - trap_ne ;runover protection -0960 : d0fe > bne * ;failed not equal (non zero) - -0962 : 88 dey -0963 : 88 dey -0964 : ind_ret -0964 : 08 php ;either SP or Y count will fail, if we do not hit -0965 : 88 dey -0966 : 88 dey -0967 : 88 dey -0968 : 28 plp - trap_eq ;returned flags OK? -0969 : f0fe > beq * ;failed equal (zero) - - trap_pl -096b : 10fe > bpl * ;failed plus (bit 7 clear) - - trap_cc -096d : 90fe > bcc * ;failed carry clear - - trap_vc -096f : 50fe > bvc * ;failed overflow clear - -0971 : c9e3 cmp #('I'^$aa) ;returned registers OK? - trap_ne -0973 : d0fe > bne * ;failed not equal (non zero) - -0975 : e04f cpx #('N'+1) - trap_ne -0977 : d0fe > bne * ;failed not equal (non zero) - -0979 : c03e cpy #('D'-6) - trap_ne -097b : d0fe > bne * ;failed not equal (non zero) - -097d : ba tsx ;SP check -097e : e0ff cpx #$ff - trap_ne -0980 : d0fe > bne * ;failed not equal (non zero) - - next_test -0982 : ad0002 > lda test_case ;previous test -0985 : c909 > cmp #test_num - > trap_ne ;test is out of sequence -0987 : d0fe > bne * ;failed not equal (non zero) - > -000a = >test_num = test_num + 1 -0989 : a90a > lda #test_num ;*** next tests' number -098b : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; jump subroutine & return from subroutine - set_stat 0 - > load_flag 0 -098e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0990 : 48 > pha ;use stack to load status -0991 : 28 > plp - -0992 : a94a lda #'J' -0994 : a253 ldx #'S' -0996 : a052 ldy #'R' ;N=0, V=0, Z=0, C=0 -0998 : 205d37 jsr test_jsr -099a = jsr_ret = *-1 ;last address of jsr = return address -099b : 08 php ;either SP or Y count will fail, if we do not hit -099c : 88 dey -099d : 88 dey -099e : 88 dey -099f : 28 plp - trap_eq ;returned flags OK? -09a0 : f0fe > beq * ;failed equal (zero) - - trap_pl -09a2 : 10fe > bpl * ;failed plus (bit 7 clear) - - trap_cc -09a4 : 90fe > bcc * ;failed carry clear - - trap_vc -09a6 : 50fe > bvc * ;failed overflow clear - -09a8 : c9e0 cmp #('J'^$aa) ;returned registers OK? - trap_ne -09aa : d0fe > bne * ;failed not equal (non zero) - -09ac : e054 cpx #('S'+1) - trap_ne -09ae : d0fe > bne * ;failed not equal (non zero) - -09b0 : c04c cpy #('R'-6) - trap_ne -09b2 : d0fe > bne * ;failed not equal (non zero) - -09b4 : ba tsx ;sp? -09b5 : e0ff cpx #$ff - trap_ne -09b7 : d0fe > bne * ;failed not equal (non zero) - - next_test -09b9 : ad0002 > lda test_case ;previous test -09bc : c90a > cmp #test_num - > trap_ne ;test is out of sequence -09be : d0fe > bne * ;failed not equal (non zero) - > -000b = >test_num = test_num + 1 -09c0 : a90b > lda #test_num ;*** next tests' number -09c2 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; break & return from interrupt - if ROM_vectors = 1 - load_flag 0 ;with interrupts enabled if allowed! -09c5 : a900 > lda #0 ;allow test to change I-flag (no mask) - -09c7 : 48 pha -09c8 : a942 lda #'B' -09ca : a252 ldx #'R' -09cc : a04b ldy #'K' -09ce : 28 plp ;N=0, V=0, Z=0, C=0 -09cf : 00 brk - else - lda #hi brk_ret0 ;emulated break - pha - lda #lo brk_ret0 - pha - load_flag fao ;set break & unused on stack - pha - load_flag intdis ;during interrupt - pha - lda #'B' - ldx #'R' - ldy #'K' - plp ;N=0, V=0, Z=0, C=0 - jmp irq_trap - endif -09d0 : 88 dey ;should not be executed -09d1 : brk_ret0 ;address of break return -09d1 : 08 php ;either SP or Y count will fail, if we do not hit -09d2 : 88 dey -09d3 : 88 dey -09d4 : 88 dey -09d5 : c9e8 cmp #'B'^$aa ;returned registers OK? - ;the IRQ vector was never executed if A & X stay unmodified - trap_ne -09d7 : d0fe > bne * ;failed not equal (non zero) - -09d9 : e053 cpx #'R'+1 - trap_ne -09db : d0fe > bne * ;failed not equal (non zero) - -09dd : c045 cpy #'K'-6 - trap_ne -09df : d0fe > bne * ;failed not equal (non zero) - -09e1 : 68 pla ;returned flags OK (unchanged)? - cmp_flag 0 -09e2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - trap_ne -09e4 : d0fe > bne * ;failed not equal (non zero) - -09e6 : ba tsx ;sp? -09e7 : e0ff cpx #$ff - trap_ne -09e9 : d0fe > bne * ;failed not equal (non zero) - - if ROM_vectors = 1 - load_flag $ff ;with interrupts disabled if allowed! -09eb : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -09ed : 48 pha -09ee : a9bd lda #$ff-'B' -09f0 : a2ad ldx #$ff-'R' -09f2 : a0b4 ldy #$ff-'K' -09f4 : 28 plp ;N=1, V=1, Z=1, C=1 -09f5 : 00 brk - else - lda #hi brk_ret1 ;emulated break - pha - lda #lo brk_ret1 - pha - load_flag $ff - pha ;set break & unused on stack - pha ;actual flags - lda #$ff-'B' - ldx #$ff-'R' - ldy #$ff-'K' - plp ;N=1, V=1, Z=1, C=1 - jmp irq_trap - endif -09f6 : 88 dey ;should not be executed -09f7 : brk_ret1 ;address of break return -09f7 : 08 php ;either SP or Y count will fail, if we do not hit -09f8 : 88 dey -09f9 : 88 dey -09fa : 88 dey -09fb : c917 cmp #($ff-'B')^$aa ;returned registers OK? - ;the IRQ vector was never executed if A & X stay unmodified - trap_ne -09fd : d0fe > bne * ;failed not equal (non zero) - -09ff : e0ae cpx #$ff-'R'+1 - trap_ne -0a01 : d0fe > bne * ;failed not equal (non zero) - -0a03 : c0ae cpy #$ff-'K'-6 - trap_ne -0a05 : d0fe > bne * ;failed not equal (non zero) - -0a07 : 68 pla ;returned flags OK (unchanged)? - cmp_flag $ff -0a08 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - - trap_ne -0a0a : d0fe > bne * ;failed not equal (non zero) - -0a0c : ba tsx ;sp? -0a0d : e0ff cpx #$ff - trap_ne -0a0f : d0fe > bne * ;failed not equal (non zero) - - next_test -0a11 : ad0002 > lda test_case ;previous test -0a14 : c90b > cmp #test_num - > trap_ne ;test is out of sequence -0a16 : d0fe > bne * ;failed not equal (non zero) - > -000c = >test_num = test_num + 1 -0a18 : a90c > lda #test_num ;*** next tests' number -0a1a : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; test set and clear flags CLC CLI CLD CLV SEC SEI SED - set_stat $ff - > load_flag $ff -0a1d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0a1f : 48 > pha ;use stack to load status -0a20 : 28 > plp - -0a21 : 18 clc - tst_stat $ff-carry -0a22 : 08 > php ;save status -0a23 : 68 > pla ;use stack to retrieve status -0a24 : 48 > pha - > cmp_flag $ff-carry -0a25 : c9fe > cmp #($ff-carry|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a27 : d0fe > bne * ;failed not equal (non zero) - > -0a29 : 28 > plp ;restore status - -0a2a : 38 sec - tst_stat $ff -0a2b : 08 > php ;save status -0a2c : 68 > pla ;use stack to retrieve status -0a2d : 48 > pha - > cmp_flag $ff -0a2e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a30 : d0fe > bne * ;failed not equal (non zero) - > -0a32 : 28 > plp ;restore status - - if I_flag = 3 -0a33 : 58 cli - tst_stat $ff-intdis -0a34 : 08 > php ;save status -0a35 : 68 > pla ;use stack to retrieve status -0a36 : 48 > pha - > cmp_flag $ff-intdis -0a37 : c9fb > cmp #($ff-intdis|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a39 : d0fe > bne * ;failed not equal (non zero) - > -0a3b : 28 > plp ;restore status - -0a3c : 78 sei - tst_stat $ff -0a3d : 08 > php ;save status -0a3e : 68 > pla ;use stack to retrieve status -0a3f : 48 > pha - > cmp_flag $ff -0a40 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a42 : d0fe > bne * ;failed not equal (non zero) - > -0a44 : 28 > plp ;restore status - - endif -0a45 : d8 cld - tst_stat $ff-decmode -0a46 : 08 > php ;save status -0a47 : 68 > pla ;use stack to retrieve status -0a48 : 48 > pha - > cmp_flag $ff-decmode -0a49 : c9f7 > cmp #($ff-decmode|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a4b : d0fe > bne * ;failed not equal (non zero) - > -0a4d : 28 > plp ;restore status - -0a4e : f8 sed - tst_stat $ff -0a4f : 08 > php ;save status -0a50 : 68 > pla ;use stack to retrieve status -0a51 : 48 > pha - > cmp_flag $ff -0a52 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a54 : d0fe > bne * ;failed not equal (non zero) - > -0a56 : 28 > plp ;restore status - -0a57 : b8 clv - tst_stat $ff-overfl -0a58 : 08 > php ;save status -0a59 : 68 > pla ;use stack to retrieve status -0a5a : 48 > pha - > cmp_flag $ff-overfl -0a5b : c9bf > cmp #($ff-overfl|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a5d : d0fe > bne * ;failed not equal (non zero) - > -0a5f : 28 > plp ;restore status - - set_stat 0 - > load_flag 0 -0a60 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0a62 : 48 > pha ;use stack to load status -0a63 : 28 > plp - - tst_stat 0 -0a64 : 08 > php ;save status -0a65 : 68 > pla ;use stack to retrieve status -0a66 : 48 > pha - > cmp_flag 0 -0a67 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a69 : d0fe > bne * ;failed not equal (non zero) - > -0a6b : 28 > plp ;restore status - -0a6c : 38 sec - tst_stat carry -0a6d : 08 > php ;save status -0a6e : 68 > pla ;use stack to retrieve status -0a6f : 48 > pha - > cmp_flag carry -0a70 : c931 > cmp #(carry|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a72 : d0fe > bne * ;failed not equal (non zero) - > -0a74 : 28 > plp ;restore status - -0a75 : 18 clc - tst_stat 0 -0a76 : 08 > php ;save status -0a77 : 68 > pla ;use stack to retrieve status -0a78 : 48 > pha - > cmp_flag 0 -0a79 : c930 > cmp #(0 |fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a7b : d0fe > bne * ;failed not equal (non zero) - > -0a7d : 28 > plp ;restore status - - if I_flag = 3 -0a7e : 78 sei - tst_stat intdis -0a7f : 08 > php ;save status -0a80 : 68 > pla ;use stack to retrieve status -0a81 : 48 > pha - > cmp_flag intdis -0a82 : c934 > cmp #(intdis|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a84 : d0fe > bne * ;failed not equal (non zero) - > -0a86 : 28 > plp ;restore status - -0a87 : 58 cli - tst_stat 0 -0a88 : 08 > php ;save status -0a89 : 68 > pla ;use stack to retrieve status -0a8a : 48 > pha - > cmp_flag 0 -0a8b : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a8d : d0fe > bne * ;failed not equal (non zero) - > -0a8f : 28 > plp ;restore status - - endif -0a90 : f8 sed - tst_stat decmode -0a91 : 08 > php ;save status -0a92 : 68 > pla ;use stack to retrieve status -0a93 : 48 > pha - > cmp_flag decmode -0a94 : c938 > cmp #(decmode|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a96 : d0fe > bne * ;failed not equal (non zero) - > -0a98 : 28 > plp ;restore status - -0a99 : d8 cld - tst_stat 0 -0a9a : 08 > php ;save status -0a9b : 68 > pla ;use stack to retrieve status -0a9c : 48 > pha - > cmp_flag 0 -0a9d : c930 > cmp #(0 |fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a9f : d0fe > bne * ;failed not equal (non zero) - > -0aa1 : 28 > plp ;restore status - - set_stat overfl - > load_flag overfl -0aa2 : a940 > lda #overfl ;allow test to change I-flag (no mask) - > -0aa4 : 48 > pha ;use stack to load status -0aa5 : 28 > plp - - tst_stat overfl -0aa6 : 08 > php ;save status -0aa7 : 68 > pla ;use stack to retrieve status -0aa8 : 48 > pha - > cmp_flag overfl -0aa9 : c970 > cmp #(overfl|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0aab : d0fe > bne * ;failed not equal (non zero) - > -0aad : 28 > plp ;restore status - -0aae : b8 clv - tst_stat 0 -0aaf : 08 > php ;save status -0ab0 : 68 > pla ;use stack to retrieve status -0ab1 : 48 > pha - > cmp_flag 0 -0ab2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ab4 : d0fe > bne * ;failed not equal (non zero) - > -0ab6 : 28 > plp ;restore status - - next_test -0ab7 : ad0002 > lda test_case ;previous test -0aba : c90c > cmp #test_num - > trap_ne ;test is out of sequence -0abc : d0fe > bne * ;failed not equal (non zero) - > -000d = >test_num = test_num + 1 -0abe : a90d > lda #test_num ;*** next tests' number -0ac0 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - ; testing index register increment/decrement and transfer - ; INX INY DEX DEY TAX TXA TAY TYA -0ac3 : a2fe ldx #$fe - set_stat $ff - > load_flag $ff -0ac5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0ac7 : 48 > pha ;use stack to load status -0ac8 : 28 > plp - -0ac9 : e8 inx ;ff - tst_x $ff,$ff-zero -0aca : 08 > php ;save flags -0acb : e0ff > cpx #$ff ;test result - > trap_ne -0acd : d0fe > bne * ;failed not equal (non zero) - > -0acf : 68 > pla ;load status -0ad0 : 48 > pha - > cmp_flag $ff-zero -0ad1 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ad3 : d0fe > bne * ;failed not equal (non zero) - > -0ad5 : 28 > plp ;restore status - -0ad6 : e8 inx ;00 - tst_x 0,$ff-minus -0ad7 : 08 > php ;save flags -0ad8 : e000 > cpx #0 ;test result - > trap_ne -0ada : d0fe > bne * ;failed not equal (non zero) - > -0adc : 68 > pla ;load status -0add : 48 > pha - > cmp_flag $ff-minus -0ade : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ae0 : d0fe > bne * ;failed not equal (non zero) - > -0ae2 : 28 > plp ;restore status - -0ae3 : e8 inx ;01 - tst_x 1,$ff-minus-zero -0ae4 : 08 > php ;save flags -0ae5 : e001 > cpx #1 ;test result - > trap_ne -0ae7 : d0fe > bne * ;failed not equal (non zero) - > -0ae9 : 68 > pla ;load status -0aea : 48 > pha - > cmp_flag $ff-minus-zero -0aeb : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0aed : d0fe > bne * ;failed not equal (non zero) - > -0aef : 28 > plp ;restore status - -0af0 : ca dex ;00 - tst_x 0,$ff-minus -0af1 : 08 > php ;save flags -0af2 : e000 > cpx #0 ;test result - > trap_ne -0af4 : d0fe > bne * ;failed not equal (non zero) - > -0af6 : 68 > pla ;load status -0af7 : 48 > pha - > cmp_flag $ff-minus -0af8 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0afa : d0fe > bne * ;failed not equal (non zero) - > -0afc : 28 > plp ;restore status - -0afd : ca dex ;ff - tst_x $ff,$ff-zero -0afe : 08 > php ;save flags -0aff : e0ff > cpx #$ff ;test result - > trap_ne -0b01 : d0fe > bne * ;failed not equal (non zero) - > -0b03 : 68 > pla ;load status -0b04 : 48 > pha - > cmp_flag $ff-zero -0b05 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b07 : d0fe > bne * ;failed not equal (non zero) - > -0b09 : 28 > plp ;restore status - -0b0a : ca dex ;fe - set_stat 0 - > load_flag 0 -0b0b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0b0d : 48 > pha ;use stack to load status -0b0e : 28 > plp - -0b0f : e8 inx ;ff - tst_x $ff,minus -0b10 : 08 > php ;save flags -0b11 : e0ff > cpx #$ff ;test result - > trap_ne -0b13 : d0fe > bne * ;failed not equal (non zero) - > -0b15 : 68 > pla ;load status -0b16 : 48 > pha - > cmp_flag minus -0b17 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b19 : d0fe > bne * ;failed not equal (non zero) - > -0b1b : 28 > plp ;restore status - -0b1c : e8 inx ;00 - tst_x 0,zero -0b1d : 08 > php ;save flags -0b1e : e000 > cpx #0 ;test result - > trap_ne -0b20 : d0fe > bne * ;failed not equal (non zero) - > -0b22 : 68 > pla ;load status -0b23 : 48 > pha - > cmp_flag zero -0b24 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b26 : d0fe > bne * ;failed not equal (non zero) - > -0b28 : 28 > plp ;restore status - -0b29 : e8 inx ;01 - tst_x 1,0 -0b2a : 08 > php ;save flags -0b2b : e001 > cpx #1 ;test result - > trap_ne -0b2d : d0fe > bne * ;failed not equal (non zero) - > -0b2f : 68 > pla ;load status -0b30 : 48 > pha - > cmp_flag 0 -0b31 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b33 : d0fe > bne * ;failed not equal (non zero) - > -0b35 : 28 > plp ;restore status - -0b36 : ca dex ;00 - tst_x 0,zero -0b37 : 08 > php ;save flags -0b38 : e000 > cpx #0 ;test result - > trap_ne -0b3a : d0fe > bne * ;failed not equal (non zero) - > -0b3c : 68 > pla ;load status -0b3d : 48 > pha - > cmp_flag zero -0b3e : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b40 : d0fe > bne * ;failed not equal (non zero) - > -0b42 : 28 > plp ;restore status - -0b43 : ca dex ;ff - tst_x $ff,minus -0b44 : 08 > php ;save flags -0b45 : e0ff > cpx #$ff ;test result - > trap_ne -0b47 : d0fe > bne * ;failed not equal (non zero) - > -0b49 : 68 > pla ;load status -0b4a : 48 > pha - > cmp_flag minus -0b4b : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b4d : d0fe > bne * ;failed not equal (non zero) - > -0b4f : 28 > plp ;restore status - - -0b50 : a0fe ldy #$fe - set_stat $ff - > load_flag $ff -0b52 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0b54 : 48 > pha ;use stack to load status -0b55 : 28 > plp - -0b56 : c8 iny ;ff - tst_y $ff,$ff-zero -0b57 : 08 > php ;save flags -0b58 : c0ff > cpy #$ff ;test result - > trap_ne -0b5a : d0fe > bne * ;failed not equal (non zero) - > -0b5c : 68 > pla ;load status -0b5d : 48 > pha - > cmp_flag $ff-zero -0b5e : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b60 : d0fe > bne * ;failed not equal (non zero) - > -0b62 : 28 > plp ;restore status - -0b63 : c8 iny ;00 - tst_y 0,$ff-minus -0b64 : 08 > php ;save flags -0b65 : c000 > cpy #0 ;test result - > trap_ne -0b67 : d0fe > bne * ;failed not equal (non zero) - > -0b69 : 68 > pla ;load status -0b6a : 48 > pha - > cmp_flag $ff-minus -0b6b : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b6d : d0fe > bne * ;failed not equal (non zero) - > -0b6f : 28 > plp ;restore status - -0b70 : c8 iny ;01 - tst_y 1,$ff-minus-zero -0b71 : 08 > php ;save flags -0b72 : c001 > cpy #1 ;test result - > trap_ne -0b74 : d0fe > bne * ;failed not equal (non zero) - > -0b76 : 68 > pla ;load status -0b77 : 48 > pha - > cmp_flag $ff-minus-zero -0b78 : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b7a : d0fe > bne * ;failed not equal (non zero) - > -0b7c : 28 > plp ;restore status - -0b7d : 88 dey ;00 - tst_y 0,$ff-minus -0b7e : 08 > php ;save flags -0b7f : c000 > cpy #0 ;test result - > trap_ne -0b81 : d0fe > bne * ;failed not equal (non zero) - > -0b83 : 68 > pla ;load status -0b84 : 48 > pha - > cmp_flag $ff-minus -0b85 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b87 : d0fe > bne * ;failed not equal (non zero) - > -0b89 : 28 > plp ;restore status - -0b8a : 88 dey ;ff - tst_y $ff,$ff-zero -0b8b : 08 > php ;save flags -0b8c : c0ff > cpy #$ff ;test result - > trap_ne -0b8e : d0fe > bne * ;failed not equal (non zero) - > -0b90 : 68 > pla ;load status -0b91 : 48 > pha - > cmp_flag $ff-zero -0b92 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b94 : d0fe > bne * ;failed not equal (non zero) - > -0b96 : 28 > plp ;restore status - -0b97 : 88 dey ;fe - set_stat 0 - > load_flag 0 -0b98 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0b9a : 48 > pha ;use stack to load status -0b9b : 28 > plp - -0b9c : c8 iny ;ff - tst_y $ff,0+minus -0b9d : 08 > php ;save flags -0b9e : c0ff > cpy #$ff ;test result - > trap_ne -0ba0 : d0fe > bne * ;failed not equal (non zero) - > -0ba2 : 68 > pla ;load status -0ba3 : 48 > pha - > cmp_flag 0+minus -0ba4 : c9b0 > cmp #(0+minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ba6 : d0fe > bne * ;failed not equal (non zero) - > -0ba8 : 28 > plp ;restore status - -0ba9 : c8 iny ;00 - tst_y 0,zero -0baa : 08 > php ;save flags -0bab : c000 > cpy #0 ;test result - > trap_ne -0bad : d0fe > bne * ;failed not equal (non zero) - > -0baf : 68 > pla ;load status -0bb0 : 48 > pha - > cmp_flag zero -0bb1 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bb3 : d0fe > bne * ;failed not equal (non zero) - > -0bb5 : 28 > plp ;restore status - -0bb6 : c8 iny ;01 - tst_y 1,0 -0bb7 : 08 > php ;save flags -0bb8 : c001 > cpy #1 ;test result - > trap_ne -0bba : d0fe > bne * ;failed not equal (non zero) - > -0bbc : 68 > pla ;load status -0bbd : 48 > pha - > cmp_flag 0 -0bbe : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bc0 : d0fe > bne * ;failed not equal (non zero) - > -0bc2 : 28 > plp ;restore status - -0bc3 : 88 dey ;00 - tst_y 0,zero -0bc4 : 08 > php ;save flags -0bc5 : c000 > cpy #0 ;test result - > trap_ne -0bc7 : d0fe > bne * ;failed not equal (non zero) - > -0bc9 : 68 > pla ;load status -0bca : 48 > pha - > cmp_flag zero -0bcb : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bcd : d0fe > bne * ;failed not equal (non zero) - > -0bcf : 28 > plp ;restore status - -0bd0 : 88 dey ;ff - tst_y $ff,minus -0bd1 : 08 > php ;save flags -0bd2 : c0ff > cpy #$ff ;test result - > trap_ne -0bd4 : d0fe > bne * ;failed not equal (non zero) - > -0bd6 : 68 > pla ;load status -0bd7 : 48 > pha - > cmp_flag minus -0bd8 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bda : d0fe > bne * ;failed not equal (non zero) - > -0bdc : 28 > plp ;restore status - - -0bdd : a2ff ldx #$ff - set_stat $ff - > load_flag $ff -0bdf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0be1 : 48 > pha ;use stack to load status -0be2 : 28 > plp - -0be3 : 8a txa - tst_a $ff,$ff-zero -0be4 : 08 > php ;save flags -0be5 : c9ff > cmp #$ff ;test result - > trap_ne -0be7 : d0fe > bne * ;failed not equal (non zero) - > -0be9 : 68 > pla ;load status -0bea : 48 > pha - > cmp_flag $ff-zero -0beb : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bed : d0fe > bne * ;failed not equal (non zero) - > -0bef : 28 > plp ;restore status - -0bf0 : 08 php -0bf1 : e8 inx ;00 -0bf2 : 28 plp -0bf3 : 8a txa - tst_a 0,$ff-minus -0bf4 : 08 > php ;save flags -0bf5 : c900 > cmp #0 ;test result - > trap_ne -0bf7 : d0fe > bne * ;failed not equal (non zero) - > -0bf9 : 68 > pla ;load status -0bfa : 48 > pha - > cmp_flag $ff-minus -0bfb : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0bfd : d0fe > bne * ;failed not equal (non zero) - > -0bff : 28 > plp ;restore status - -0c00 : 08 php -0c01 : e8 inx ;01 -0c02 : 28 plp -0c03 : 8a txa - tst_a 1,$ff-minus-zero -0c04 : 08 > php ;save flags -0c05 : c901 > cmp #1 ;test result - > trap_ne -0c07 : d0fe > bne * ;failed not equal (non zero) - > -0c09 : 68 > pla ;load status -0c0a : 48 > pha - > cmp_flag $ff-minus-zero -0c0b : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c0d : d0fe > bne * ;failed not equal (non zero) - > -0c0f : 28 > plp ;restore status - - set_stat 0 - > load_flag 0 -0c10 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0c12 : 48 > pha ;use stack to load status -0c13 : 28 > plp - -0c14 : 8a txa - tst_a 1,0 -0c15 : 08 > php ;save flags -0c16 : c901 > cmp #1 ;test result - > trap_ne -0c18 : d0fe > bne * ;failed not equal (non zero) - > -0c1a : 68 > pla ;load status -0c1b : 48 > pha - > cmp_flag 0 -0c1c : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c1e : d0fe > bne * ;failed not equal (non zero) - > -0c20 : 28 > plp ;restore status - -0c21 : 08 php -0c22 : ca dex ;00 -0c23 : 28 plp -0c24 : 8a txa - tst_a 0,zero -0c25 : 08 > php ;save flags -0c26 : c900 > cmp #0 ;test result - > trap_ne -0c28 : d0fe > bne * ;failed not equal (non zero) - > -0c2a : 68 > pla ;load status -0c2b : 48 > pha - > cmp_flag zero -0c2c : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c2e : d0fe > bne * ;failed not equal (non zero) - > -0c30 : 28 > plp ;restore status - -0c31 : 08 php -0c32 : ca dex ;ff -0c33 : 28 plp -0c34 : 8a txa - tst_a $ff,minus -0c35 : 08 > php ;save flags -0c36 : c9ff > cmp #$ff ;test result - > trap_ne -0c38 : d0fe > bne * ;failed not equal (non zero) - > -0c3a : 68 > pla ;load status -0c3b : 48 > pha - > cmp_flag minus -0c3c : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c3e : d0fe > bne * ;failed not equal (non zero) - > -0c40 : 28 > plp ;restore status - - -0c41 : a0ff ldy #$ff - set_stat $ff - > load_flag $ff -0c43 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0c45 : 48 > pha ;use stack to load status -0c46 : 28 > plp - -0c47 : 98 tya - tst_a $ff,$ff-zero -0c48 : 08 > php ;save flags -0c49 : c9ff > cmp #$ff ;test result - > trap_ne -0c4b : d0fe > bne * ;failed not equal (non zero) - > -0c4d : 68 > pla ;load status -0c4e : 48 > pha - > cmp_flag $ff-zero -0c4f : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c51 : d0fe > bne * ;failed not equal (non zero) - > -0c53 : 28 > plp ;restore status - -0c54 : 08 php -0c55 : c8 iny ;00 -0c56 : 28 plp -0c57 : 98 tya - tst_a 0,$ff-minus -0c58 : 08 > php ;save flags -0c59 : c900 > cmp #0 ;test result - > trap_ne -0c5b : d0fe > bne * ;failed not equal (non zero) - > -0c5d : 68 > pla ;load status -0c5e : 48 > pha - > cmp_flag $ff-minus -0c5f : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c61 : d0fe > bne * ;failed not equal (non zero) - > -0c63 : 28 > plp ;restore status - -0c64 : 08 php -0c65 : c8 iny ;01 -0c66 : 28 plp -0c67 : 98 tya - tst_a 1,$ff-minus-zero -0c68 : 08 > php ;save flags -0c69 : c901 > cmp #1 ;test result - > trap_ne -0c6b : d0fe > bne * ;failed not equal (non zero) - > -0c6d : 68 > pla ;load status -0c6e : 48 > pha - > cmp_flag $ff-minus-zero -0c6f : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c71 : d0fe > bne * ;failed not equal (non zero) - > -0c73 : 28 > plp ;restore status - - set_stat 0 - > load_flag 0 -0c74 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0c76 : 48 > pha ;use stack to load status -0c77 : 28 > plp - -0c78 : 98 tya - tst_a 1,0 -0c79 : 08 > php ;save flags -0c7a : c901 > cmp #1 ;test result - > trap_ne -0c7c : d0fe > bne * ;failed not equal (non zero) - > -0c7e : 68 > pla ;load status -0c7f : 48 > pha - > cmp_flag 0 -0c80 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c82 : d0fe > bne * ;failed not equal (non zero) - > -0c84 : 28 > plp ;restore status - -0c85 : 08 php -0c86 : 88 dey ;00 -0c87 : 28 plp -0c88 : 98 tya - tst_a 0,zero -0c89 : 08 > php ;save flags -0c8a : c900 > cmp #0 ;test result - > trap_ne -0c8c : d0fe > bne * ;failed not equal (non zero) - > -0c8e : 68 > pla ;load status -0c8f : 48 > pha - > cmp_flag zero -0c90 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c92 : d0fe > bne * ;failed not equal (non zero) - > -0c94 : 28 > plp ;restore status - -0c95 : 08 php -0c96 : 88 dey ;ff -0c97 : 28 plp -0c98 : 98 tya - tst_a $ff,minus -0c99 : 08 > php ;save flags -0c9a : c9ff > cmp #$ff ;test result - > trap_ne -0c9c : d0fe > bne * ;failed not equal (non zero) - > -0c9e : 68 > pla ;load status -0c9f : 48 > pha - > cmp_flag minus -0ca0 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ca2 : d0fe > bne * ;failed not equal (non zero) - > -0ca4 : 28 > plp ;restore status - - - load_flag $ff -0ca5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -0ca7 : 48 pha -0ca8 : a2ff ldx #$ff ;ff -0caa : 8a txa -0cab : 28 plp -0cac : a8 tay - tst_y $ff,$ff-zero -0cad : 08 > php ;save flags -0cae : c0ff > cpy #$ff ;test result - > trap_ne -0cb0 : d0fe > bne * ;failed not equal (non zero) - > -0cb2 : 68 > pla ;load status -0cb3 : 48 > pha - > cmp_flag $ff-zero -0cb4 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cb6 : d0fe > bne * ;failed not equal (non zero) - > -0cb8 : 28 > plp ;restore status - -0cb9 : 08 php -0cba : e8 inx ;00 -0cbb : 8a txa -0cbc : 28 plp -0cbd : a8 tay - tst_y 0,$ff-minus -0cbe : 08 > php ;save flags -0cbf : c000 > cpy #0 ;test result - > trap_ne -0cc1 : d0fe > bne * ;failed not equal (non zero) - > -0cc3 : 68 > pla ;load status -0cc4 : 48 > pha - > cmp_flag $ff-minus -0cc5 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cc7 : d0fe > bne * ;failed not equal (non zero) - > -0cc9 : 28 > plp ;restore status - -0cca : 08 php -0ccb : e8 inx ;01 -0ccc : 8a txa -0ccd : 28 plp -0cce : a8 tay - tst_y 1,$ff-minus-zero -0ccf : 08 > php ;save flags -0cd0 : c001 > cpy #1 ;test result - > trap_ne -0cd2 : d0fe > bne * ;failed not equal (non zero) - > -0cd4 : 68 > pla ;load status -0cd5 : 48 > pha - > cmp_flag $ff-minus-zero -0cd6 : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cd8 : d0fe > bne * ;failed not equal (non zero) - > -0cda : 28 > plp ;restore status - - load_flag 0 -0cdb : a900 > lda #0 ;allow test to change I-flag (no mask) - -0cdd : 48 pha -0cde : a900 lda #0 -0ce0 : 8a txa -0ce1 : 28 plp -0ce2 : a8 tay - tst_y 1,0 -0ce3 : 08 > php ;save flags -0ce4 : c001 > cpy #1 ;test result - > trap_ne -0ce6 : d0fe > bne * ;failed not equal (non zero) - > -0ce8 : 68 > pla ;load status -0ce9 : 48 > pha - > cmp_flag 0 -0cea : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cec : d0fe > bne * ;failed not equal (non zero) - > -0cee : 28 > plp ;restore status - -0cef : 08 php -0cf0 : ca dex ;00 -0cf1 : 8a txa -0cf2 : 28 plp -0cf3 : a8 tay - tst_y 0,zero -0cf4 : 08 > php ;save flags -0cf5 : c000 > cpy #0 ;test result - > trap_ne -0cf7 : d0fe > bne * ;failed not equal (non zero) - > -0cf9 : 68 > pla ;load status -0cfa : 48 > pha - > cmp_flag zero -0cfb : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cfd : d0fe > bne * ;failed not equal (non zero) - > -0cff : 28 > plp ;restore status - -0d00 : 08 php -0d01 : ca dex ;ff -0d02 : 8a txa -0d03 : 28 plp -0d04 : a8 tay - tst_y $ff,minus -0d05 : 08 > php ;save flags -0d06 : c0ff > cpy #$ff ;test result - > trap_ne -0d08 : d0fe > bne * ;failed not equal (non zero) - > -0d0a : 68 > pla ;load status -0d0b : 48 > pha - > cmp_flag minus -0d0c : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d0e : d0fe > bne * ;failed not equal (non zero) - > -0d10 : 28 > plp ;restore status - - - - load_flag $ff -0d11 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -0d13 : 48 pha -0d14 : a0ff ldy #$ff ;ff -0d16 : 98 tya -0d17 : 28 plp -0d18 : aa tax - tst_x $ff,$ff-zero -0d19 : 08 > php ;save flags -0d1a : e0ff > cpx #$ff ;test result - > trap_ne -0d1c : d0fe > bne * ;failed not equal (non zero) - > -0d1e : 68 > pla ;load status -0d1f : 48 > pha - > cmp_flag $ff-zero -0d20 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d22 : d0fe > bne * ;failed not equal (non zero) - > -0d24 : 28 > plp ;restore status - -0d25 : 08 php -0d26 : c8 iny ;00 -0d27 : 98 tya -0d28 : 28 plp -0d29 : aa tax - tst_x 0,$ff-minus -0d2a : 08 > php ;save flags -0d2b : e000 > cpx #0 ;test result - > trap_ne -0d2d : d0fe > bne * ;failed not equal (non zero) - > -0d2f : 68 > pla ;load status -0d30 : 48 > pha - > cmp_flag $ff-minus -0d31 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d33 : d0fe > bne * ;failed not equal (non zero) - > -0d35 : 28 > plp ;restore status - -0d36 : 08 php -0d37 : c8 iny ;01 -0d38 : 98 tya -0d39 : 28 plp -0d3a : aa tax - tst_x 1,$ff-minus-zero -0d3b : 08 > php ;save flags -0d3c : e001 > cpx #1 ;test result - > trap_ne -0d3e : d0fe > bne * ;failed not equal (non zero) - > -0d40 : 68 > pla ;load status -0d41 : 48 > pha - > cmp_flag $ff-minus-zero -0d42 : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d44 : d0fe > bne * ;failed not equal (non zero) - > -0d46 : 28 > plp ;restore status - - load_flag 0 -0d47 : a900 > lda #0 ;allow test to change I-flag (no mask) - -0d49 : 48 pha -0d4a : a900 lda #0 ;preset status -0d4c : 98 tya -0d4d : 28 plp -0d4e : aa tax - tst_x 1,0 -0d4f : 08 > php ;save flags -0d50 : e001 > cpx #1 ;test result - > trap_ne -0d52 : d0fe > bne * ;failed not equal (non zero) - > -0d54 : 68 > pla ;load status -0d55 : 48 > pha - > cmp_flag 0 -0d56 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d58 : d0fe > bne * ;failed not equal (non zero) - > -0d5a : 28 > plp ;restore status - -0d5b : 08 php -0d5c : 88 dey ;00 -0d5d : 98 tya -0d5e : 28 plp -0d5f : aa tax - tst_x 0,zero -0d60 : 08 > php ;save flags -0d61 : e000 > cpx #0 ;test result - > trap_ne -0d63 : d0fe > bne * ;failed not equal (non zero) - > -0d65 : 68 > pla ;load status -0d66 : 48 > pha - > cmp_flag zero -0d67 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d69 : d0fe > bne * ;failed not equal (non zero) - > -0d6b : 28 > plp ;restore status - -0d6c : 08 php -0d6d : 88 dey ;ff -0d6e : 98 tya -0d6f : 28 plp -0d70 : aa tax - tst_x $ff,minus -0d71 : 08 > php ;save flags -0d72 : e0ff > cpx #$ff ;test result - > trap_ne -0d74 : d0fe > bne * ;failed not equal (non zero) - > -0d76 : 68 > pla ;load status -0d77 : 48 > pha - > cmp_flag minus -0d78 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d7a : d0fe > bne * ;failed not equal (non zero) - > -0d7c : 28 > plp ;restore status - - next_test -0d7d : ad0002 > lda test_case ;previous test -0d80 : c90d > cmp #test_num - > trap_ne ;test is out of sequence -0d82 : d0fe > bne * ;failed not equal (non zero) - > -000e = >test_num = test_num + 1 -0d84 : a90e > lda #test_num ;*** next tests' number -0d86 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ;TSX sets NZ - TXS does not - ; This section also tests for proper stack wrap around. -0d89 : a201 ldx #1 ;01 - set_stat $ff - > load_flag $ff -0d8b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0d8d : 48 > pha ;use stack to load status -0d8e : 28 > plp - -0d8f : 9a txs -0d90 : 08 php -0d91 : ad0101 lda $101 - cmp_flag $ff -0d94 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - - trap_ne -0d96 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -0d98 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0d9a : 48 > pha ;use stack to load status -0d9b : 28 > plp - -0d9c : 9a txs -0d9d : 08 php -0d9e : ad0101 lda $101 - cmp_flag 0 -0da1 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - trap_ne -0da3 : d0fe > bne * ;failed not equal (non zero) - -0da5 : ca dex ;00 - set_stat $ff - > load_flag $ff -0da6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0da8 : 48 > pha ;use stack to load status -0da9 : 28 > plp - -0daa : 9a txs -0dab : 08 php -0dac : ad0001 lda $100 - cmp_flag $ff -0daf : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - - trap_ne -0db1 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -0db3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0db5 : 48 > pha ;use stack to load status -0db6 : 28 > plp - -0db7 : 9a txs -0db8 : 08 php -0db9 : ad0001 lda $100 - cmp_flag 0 -0dbc : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - trap_ne -0dbe : d0fe > bne * ;failed not equal (non zero) - -0dc0 : ca dex ;ff - set_stat $ff - > load_flag $ff -0dc1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0dc3 : 48 > pha ;use stack to load status -0dc4 : 28 > plp - -0dc5 : 9a txs -0dc6 : 08 php -0dc7 : adff01 lda $1ff - cmp_flag $ff -0dca : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - - trap_ne -0dcc : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -0dce : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0dd0 : 48 > pha ;use stack to load status -0dd1 : 28 > plp - -0dd2 : 9a txs -0dd3 : 08 php -0dd4 : adff01 lda $1ff - cmp_flag 0 -0dd7 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - -0dd9 : a201 ldx #1 -0ddb : 9a txs ;sp=01 - set_stat $ff - > load_flag $ff -0ddc : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0dde : 48 > pha ;use stack to load status -0ddf : 28 > plp - -0de0 : ba tsx ;clears Z, N -0de1 : 08 php ;sp=00 -0de2 : e001 cpx #1 - trap_ne -0de4 : d0fe > bne * ;failed not equal (non zero) - -0de6 : ad0101 lda $101 - cmp_flag $ff-minus-zero -0de9 : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - - trap_ne -0deb : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -0ded : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0def : 48 > pha ;use stack to load status -0df0 : 28 > plp - -0df1 : ba tsx ;clears N, sets Z -0df2 : 08 php ;sp=ff -0df3 : e000 cpx #0 - trap_ne -0df5 : d0fe > bne * ;failed not equal (non zero) - -0df7 : ad0001 lda $100 - cmp_flag $ff-minus -0dfa : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - - trap_ne -0dfc : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -0dfe : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0e00 : 48 > pha ;use stack to load status -0e01 : 28 > plp - -0e02 : ba tsx ;clears N, sets Z -0e03 : 08 php ;sp=fe -0e04 : e0ff cpx #$ff - trap_ne -0e06 : d0fe > bne * ;failed not equal (non zero) - -0e08 : adff01 lda $1ff - cmp_flag $ff-zero -0e0b : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - - trap_ne -0e0d : d0fe > bne * ;failed not equal (non zero) - - -0e0f : a201 ldx #1 -0e11 : 9a txs ;sp=01 - set_stat 0 - > load_flag 0 -0e12 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e14 : 48 > pha ;use stack to load status -0e15 : 28 > plp - -0e16 : ba tsx ;clears Z, N -0e17 : 08 php ;sp=00 -0e18 : e001 cpx #1 - trap_ne -0e1a : d0fe > bne * ;failed not equal (non zero) - -0e1c : ad0101 lda $101 - cmp_flag 0 -0e1f : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - trap_ne -0e21 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -0e23 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e25 : 48 > pha ;use stack to load status -0e26 : 28 > plp - -0e27 : ba tsx ;clears N, sets Z -0e28 : 08 php ;sp=ff -0e29 : e000 cpx #0 - trap_ne -0e2b : d0fe > bne * ;failed not equal (non zero) - -0e2d : ad0001 lda $100 - cmp_flag zero -0e30 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - - trap_ne -0e32 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -0e34 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e36 : 48 > pha ;use stack to load status -0e37 : 28 > plp - -0e38 : ba tsx ;clears N, sets Z -0e39 : 08 php ;sp=fe -0e3a : e0ff cpx #$ff - trap_ne -0e3c : d0fe > bne * ;failed not equal (non zero) - -0e3e : adff01 lda $1ff - cmp_flag minus -0e41 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - - trap_ne -0e43 : d0fe > bne * ;failed not equal (non zero) - -0e45 : 68 pla ;sp=ff - next_test -0e46 : ad0002 > lda test_case ;previous test -0e49 : c90e > cmp #test_num - > trap_ne ;test is out of sequence -0e4b : d0fe > bne * ;failed not equal (non zero) - > -000f = >test_num = test_num + 1 -0e4d : a90f > lda #test_num ;*** next tests' number -0e4f : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing index register load & store LDY LDX STY STX all addressing modes - ; LDX / STX - zp,y / abs,y -0e52 : a003 ldy #3 -0e54 : tldx - set_stat 0 - > load_flag 0 -0e54 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e56 : 48 > pha ;use stack to load status -0e57 : 28 > plp - -0e58 : b613 ldx zp1,y -0e5a : 08 php ;test stores do not alter flags -0e5b : 8a txa -0e5c : 49c3 eor #$c3 -0e5e : 28 plp -0e5f : 990302 sta abst,y -0e62 : 08 php ;flags after load/store sequence -0e63 : 49c3 eor #$c3 -0e65 : d91702 cmp abs1,y ;test result - trap_ne -0e68 : d0fe > bne * ;failed not equal (non zero) - -0e6a : 68 pla ;load status - eor_flag 0 -0e6b : 4930 > eor #0|fao ;invert expected flags + always on bits - -0e6d : d91c02 cmp fLDx,y ;test flags - trap_ne -0e70 : d0fe > bne * ;failed not equal (non zero) - -0e72 : 88 dey -0e73 : 10df bpl tldx - -0e75 : a003 ldy #3 -0e77 : tldx1 - set_stat $ff - > load_flag $ff -0e77 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0e79 : 48 > pha ;use stack to load status -0e7a : 28 > plp - -0e7b : b613 ldx zp1,y -0e7d : 08 php ;test stores do not alter flags -0e7e : 8a txa -0e7f : 49c3 eor #$c3 -0e81 : 28 plp -0e82 : 990302 sta abst,y -0e85 : 08 php ;flags after load/store sequence -0e86 : 49c3 eor #$c3 -0e88 : d91702 cmp abs1,y ;test result - trap_ne -0e8b : d0fe > bne * ;failed not equal (non zero) - -0e8d : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -0e8e : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -0e90 : d91c02 cmp fLDx,y ;test flags - trap_ne -0e93 : d0fe > bne * ;failed not equal (non zero) - -0e95 : 88 dey -0e96 : 10df bpl tldx1 - -0e98 : a003 ldy #3 -0e9a : tldx2 - set_stat 0 - > load_flag 0 -0e9a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e9c : 48 > pha ;use stack to load status -0e9d : 28 > plp - -0e9e : be1702 ldx abs1,y -0ea1 : 08 php ;test stores do not alter flags -0ea2 : 8a txa -0ea3 : 49c3 eor #$c3 -0ea5 : aa tax -0ea6 : 28 plp -0ea7 : 960c stx zpt,y -0ea9 : 08 php ;flags after load/store sequence -0eaa : 49c3 eor #$c3 -0eac : d91300 cmp zp1,y ;test result - trap_ne -0eaf : d0fe > bne * ;failed not equal (non zero) - -0eb1 : 68 pla ;load status - eor_flag 0 -0eb2 : 4930 > eor #0|fao ;invert expected flags + always on bits - -0eb4 : d91c02 cmp fLDx,y ;test flags - trap_ne -0eb7 : d0fe > bne * ;failed not equal (non zero) - -0eb9 : 88 dey -0eba : 10de bpl tldx2 - -0ebc : a003 ldy #3 -0ebe : tldx3 - set_stat $ff - > load_flag $ff -0ebe : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0ec0 : 48 > pha ;use stack to load status -0ec1 : 28 > plp - -0ec2 : be1702 ldx abs1,y -0ec5 : 08 php ;test stores do not alter flags -0ec6 : 8a txa -0ec7 : 49c3 eor #$c3 -0ec9 : aa tax -0eca : 28 plp -0ecb : 960c stx zpt,y -0ecd : 08 php ;flags after load/store sequence -0ece : 49c3 eor #$c3 -0ed0 : d91300 cmp zp1,y ;test result - trap_ne -0ed3 : d0fe > bne * ;failed not equal (non zero) - -0ed5 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -0ed6 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -0ed8 : d91c02 cmp fLDx,y ;test flags - trap_ne -0edb : d0fe > bne * ;failed not equal (non zero) - -0edd : 88 dey -0ede : 10de bpl tldx3 - -0ee0 : a003 ldy #3 ;testing store result -0ee2 : a200 ldx #0 -0ee4 : b90c00 tstx lda zpt,y -0ee7 : 49c3 eor #$c3 -0ee9 : d91300 cmp zp1,y - trap_ne ;store to zp data -0eec : d0fe > bne * ;failed not equal (non zero) - -0eee : 960c stx zpt,y ;clear -0ef0 : b90302 lda abst,y -0ef3 : 49c3 eor #$c3 -0ef5 : d91702 cmp abs1,y - trap_ne ;store to abs data -0ef8 : d0fe > bne * ;failed not equal (non zero) - -0efa : 8a txa -0efb : 990302 sta abst,y ;clear -0efe : 88 dey -0eff : 10e3 bpl tstx - next_test -0f01 : ad0002 > lda test_case ;previous test -0f04 : c90f > cmp #test_num - > trap_ne ;test is out of sequence -0f06 : d0fe > bne * ;failed not equal (non zero) - > -0010 = >test_num = test_num + 1 -0f08 : a910 > lda #test_num ;*** next tests' number -0f0a : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; indexed wraparound test (only zp should wrap) -0f0d : a0fd ldy #3+$fa -0f0f : b619 tldx4 ldx zp1-$fa&$ff,y ;wrap on indexed zp -0f11 : 8a txa -0f12 : 990901 sta abst-$fa,y ;no STX abs,y! -0f15 : 88 dey -0f16 : c0fa cpy #$fa -0f18 : b0f5 bcs tldx4 -0f1a : a0fd ldy #3+$fa -0f1c : be1d01 tldx5 ldx abs1-$fa,y ;no wrap on indexed abs -0f1f : 9612 stx zpt-$fa&$ff,y -0f21 : 88 dey -0f22 : c0fa cpy #$fa -0f24 : b0f6 bcs tldx5 -0f26 : a003 ldy #3 ;testing wraparound result -0f28 : a200 ldx #0 -0f2a : b90c00 tstx1 lda zpt,y -0f2d : d91300 cmp zp1,y - trap_ne ;store to zp data -0f30 : d0fe > bne * ;failed not equal (non zero) - -0f32 : 960c stx zpt,y ;clear -0f34 : b90302 lda abst,y -0f37 : d91702 cmp abs1,y - trap_ne ;store to abs data -0f3a : d0fe > bne * ;failed not equal (non zero) - -0f3c : 8a txa -0f3d : 990302 sta abst,y ;clear -0f40 : 88 dey -0f41 : 10e7 bpl tstx1 - next_test -0f43 : ad0002 > lda test_case ;previous test -0f46 : c910 > cmp #test_num - > trap_ne ;test is out of sequence -0f48 : d0fe > bne * ;failed not equal (non zero) - > -0011 = >test_num = test_num + 1 -0f4a : a911 > lda #test_num ;*** next tests' number -0f4c : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; LDY / STY - zp,x / abs,x -0f4f : a203 ldx #3 -0f51 : tldy - set_stat 0 - > load_flag 0 -0f51 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0f53 : 48 > pha ;use stack to load status -0f54 : 28 > plp - -0f55 : b413 ldy zp1,x -0f57 : 08 php ;test stores do not alter flags -0f58 : 98 tya -0f59 : 49c3 eor #$c3 -0f5b : 28 plp -0f5c : 9d0302 sta abst,x -0f5f : 08 php ;flags after load/store sequence -0f60 : 49c3 eor #$c3 -0f62 : dd1702 cmp abs1,x ;test result - trap_ne -0f65 : d0fe > bne * ;failed not equal (non zero) - -0f67 : 68 pla ;load status - eor_flag 0 -0f68 : 4930 > eor #0|fao ;invert expected flags + always on bits - -0f6a : dd1c02 cmp fLDx,x ;test flags - trap_ne -0f6d : d0fe > bne * ;failed not equal (non zero) - -0f6f : ca dex -0f70 : 10df bpl tldy - -0f72 : a203 ldx #3 -0f74 : tldy1 - set_stat $ff - > load_flag $ff -0f74 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0f76 : 48 > pha ;use stack to load status -0f77 : 28 > plp - -0f78 : b413 ldy zp1,x -0f7a : 08 php ;test stores do not alter flags -0f7b : 98 tya -0f7c : 49c3 eor #$c3 -0f7e : 28 plp -0f7f : 9d0302 sta abst,x -0f82 : 08 php ;flags after load/store sequence -0f83 : 49c3 eor #$c3 -0f85 : dd1702 cmp abs1,x ;test result - trap_ne -0f88 : d0fe > bne * ;failed not equal (non zero) - -0f8a : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -0f8b : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -0f8d : dd1c02 cmp fLDx,x ;test flags - trap_ne -0f90 : d0fe > bne * ;failed not equal (non zero) - -0f92 : ca dex -0f93 : 10df bpl tldy1 - -0f95 : a203 ldx #3 -0f97 : tldy2 - set_stat 0 - > load_flag 0 -0f97 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0f99 : 48 > pha ;use stack to load status -0f9a : 28 > plp - -0f9b : bc1702 ldy abs1,x -0f9e : 08 php ;test stores do not alter flags -0f9f : 98 tya -0fa0 : 49c3 eor #$c3 -0fa2 : a8 tay -0fa3 : 28 plp -0fa4 : 940c sty zpt,x -0fa6 : 08 php ;flags after load/store sequence -0fa7 : 49c3 eor #$c3 -0fa9 : d513 cmp zp1,x ;test result - trap_ne -0fab : d0fe > bne * ;failed not equal (non zero) - -0fad : 68 pla ;load status - eor_flag 0 -0fae : 4930 > eor #0|fao ;invert expected flags + always on bits - -0fb0 : dd1c02 cmp fLDx,x ;test flags - trap_ne -0fb3 : d0fe > bne * ;failed not equal (non zero) - -0fb5 : ca dex -0fb6 : 10df bpl tldy2 - -0fb8 : a203 ldx #3 -0fba : tldy3 - set_stat $ff - > load_flag $ff -0fba : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0fbc : 48 > pha ;use stack to load status -0fbd : 28 > plp - -0fbe : bc1702 ldy abs1,x -0fc1 : 08 php ;test stores do not alter flags -0fc2 : 98 tya -0fc3 : 49c3 eor #$c3 -0fc5 : a8 tay -0fc6 : 28 plp -0fc7 : 940c sty zpt,x -0fc9 : 08 php ;flags after load/store sequence -0fca : 49c3 eor #$c3 -0fcc : d513 cmp zp1,x ;test result - trap_ne -0fce : d0fe > bne * ;failed not equal (non zero) - -0fd0 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -0fd1 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -0fd3 : dd1c02 cmp fLDx,x ;test flags - trap_ne -0fd6 : d0fe > bne * ;failed not equal (non zero) - -0fd8 : ca dex -0fd9 : 10df bpl tldy3 - -0fdb : a203 ldx #3 ;testing store result -0fdd : a000 ldy #0 -0fdf : b50c tsty lda zpt,x -0fe1 : 49c3 eor #$c3 -0fe3 : d513 cmp zp1,x - trap_ne ;store to zp,x data -0fe5 : d0fe > bne * ;failed not equal (non zero) - -0fe7 : 940c sty zpt,x ;clear -0fe9 : bd0302 lda abst,x -0fec : 49c3 eor #$c3 -0fee : dd1702 cmp abs1,x - trap_ne ;store to abs,x data -0ff1 : d0fe > bne * ;failed not equal (non zero) - -0ff3 : 8a txa -0ff4 : 9d0302 sta abst,x ;clear -0ff7 : ca dex -0ff8 : 10e5 bpl tsty - next_test -0ffa : ad0002 > lda test_case ;previous test -0ffd : c911 > cmp #test_num - > trap_ne ;test is out of sequence -0fff : d0fe > bne * ;failed not equal (non zero) - > -0012 = >test_num = test_num + 1 -1001 : a912 > lda #test_num ;*** next tests' number -1003 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; indexed wraparound test (only zp should wrap) -1006 : a2fd ldx #3+$fa -1008 : b419 tldy4 ldy zp1-$fa&$ff,x ;wrap on indexed zp -100a : 98 tya -100b : 9d0901 sta abst-$fa,x ;no STX abs,x! -100e : ca dex -100f : e0fa cpx #$fa -1011 : b0f5 bcs tldy4 -1013 : a2fd ldx #3+$fa -1015 : bc1d01 tldy5 ldy abs1-$fa,x ;no wrap on indexed abs -1018 : 9412 sty zpt-$fa&$ff,x -101a : ca dex -101b : e0fa cpx #$fa -101d : b0f6 bcs tldy5 -101f : a203 ldx #3 ;testing wraparound result -1021 : a000 ldy #0 -1023 : b50c tsty1 lda zpt,x -1025 : d513 cmp zp1,x - trap_ne ;store to zp,x data -1027 : d0fe > bne * ;failed not equal (non zero) - -1029 : 940c sty zpt,x ;clear -102b : bd0302 lda abst,x -102e : dd1702 cmp abs1,x - trap_ne ;store to abs,x data -1031 : d0fe > bne * ;failed not equal (non zero) - -1033 : 8a txa -1034 : 9d0302 sta abst,x ;clear -1037 : ca dex -1038 : 10e9 bpl tsty1 - next_test -103a : ad0002 > lda test_case ;previous test -103d : c912 > cmp #test_num - > trap_ne ;test is out of sequence -103f : d0fe > bne * ;failed not equal (non zero) - > -0013 = >test_num = test_num + 1 -1041 : a913 > lda #test_num ;*** next tests' number -1043 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; LDX / STX - zp / abs / # - set_stat 0 - > load_flag 0 -1046 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1048 : 48 > pha ;use stack to load status -1049 : 28 > plp - -104a : a613 ldx zp1 -104c : 08 php ;test stores do not alter flags -104d : 8a txa -104e : 49c3 eor #$c3 -1050 : aa tax -1051 : 28 plp -1052 : 8e0302 stx abst -1055 : 08 php ;flags after load/store sequence -1056 : 49c3 eor #$c3 -1058 : aa tax -1059 : e0c3 cpx #$c3 ;test result - trap_ne -105b : d0fe > bne * ;failed not equal (non zero) - -105d : 68 pla ;load status - eor_flag 0 -105e : 4930 > eor #0|fao ;invert expected flags + always on bits - -1060 : cd1c02 cmp fLDx ;test flags - trap_ne -1063 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1065 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1067 : 48 > pha ;use stack to load status -1068 : 28 > plp - -1069 : a614 ldx zp1+1 -106b : 08 php ;test stores do not alter flags -106c : 8a txa -106d : 49c3 eor #$c3 -106f : aa tax -1070 : 28 plp -1071 : 8e0402 stx abst+1 -1074 : 08 php ;flags after load/store sequence -1075 : 49c3 eor #$c3 -1077 : aa tax -1078 : e082 cpx #$82 ;test result - trap_ne -107a : d0fe > bne * ;failed not equal (non zero) - -107c : 68 pla ;load status - eor_flag 0 -107d : 4930 > eor #0|fao ;invert expected flags + always on bits - -107f : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1082 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1084 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1086 : 48 > pha ;use stack to load status -1087 : 28 > plp - -1088 : a615 ldx zp1+2 -108a : 08 php ;test stores do not alter flags -108b : 8a txa -108c : 49c3 eor #$c3 -108e : aa tax -108f : 28 plp -1090 : 8e0502 stx abst+2 -1093 : 08 php ;flags after load/store sequence -1094 : 49c3 eor #$c3 -1096 : aa tax -1097 : e041 cpx #$41 ;test result - trap_ne -1099 : d0fe > bne * ;failed not equal (non zero) - -109b : 68 pla ;load status - eor_flag 0 -109c : 4930 > eor #0|fao ;invert expected flags + always on bits - -109e : cd1e02 cmp fLDx+2 ;test flags - trap_ne -10a1 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -10a3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -10a5 : 48 > pha ;use stack to load status -10a6 : 28 > plp - -10a7 : a616 ldx zp1+3 -10a9 : 08 php ;test stores do not alter flags -10aa : 8a txa -10ab : 49c3 eor #$c3 -10ad : aa tax -10ae : 28 plp -10af : 8e0602 stx abst+3 -10b2 : 08 php ;flags after load/store sequence -10b3 : 49c3 eor #$c3 -10b5 : aa tax -10b6 : e000 cpx #0 ;test result - trap_ne -10b8 : d0fe > bne * ;failed not equal (non zero) - -10ba : 68 pla ;load status - eor_flag 0 -10bb : 4930 > eor #0|fao ;invert expected flags + always on bits - -10bd : cd1f02 cmp fLDx+3 ;test flags - trap_ne -10c0 : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -10c2 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -10c4 : 48 > pha ;use stack to load status -10c5 : 28 > plp - -10c6 : a613 ldx zp1 -10c8 : 08 php ;test stores do not alter flags -10c9 : 8a txa -10ca : 49c3 eor #$c3 -10cc : aa tax -10cd : 28 plp -10ce : 8e0302 stx abst -10d1 : 08 php ;flags after load/store sequence -10d2 : 49c3 eor #$c3 -10d4 : aa tax -10d5 : e0c3 cpx #$c3 ;test result - trap_ne ; -10d7 : d0fe > bne * ;failed not equal (non zero) - -10d9 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -10da : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -10dc : cd1c02 cmp fLDx ;test flags - trap_ne -10df : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -10e1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -10e3 : 48 > pha ;use stack to load status -10e4 : 28 > plp - -10e5 : a614 ldx zp1+1 -10e7 : 08 php ;test stores do not alter flags -10e8 : 8a txa -10e9 : 49c3 eor #$c3 -10eb : aa tax -10ec : 28 plp -10ed : 8e0402 stx abst+1 -10f0 : 08 php ;flags after load/store sequence -10f1 : 49c3 eor #$c3 -10f3 : aa tax -10f4 : e082 cpx #$82 ;test result - trap_ne -10f6 : d0fe > bne * ;failed not equal (non zero) - -10f8 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -10f9 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -10fb : cd1d02 cmp fLDx+1 ;test flags - trap_ne -10fe : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1100 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1102 : 48 > pha ;use stack to load status -1103 : 28 > plp - -1104 : a615 ldx zp1+2 -1106 : 08 php ;test stores do not alter flags -1107 : 8a txa -1108 : 49c3 eor #$c3 -110a : aa tax -110b : 28 plp -110c : 8e0502 stx abst+2 -110f : 08 php ;flags after load/store sequence -1110 : 49c3 eor #$c3 -1112 : aa tax -1113 : e041 cpx #$41 ;test result - trap_ne ; -1115 : d0fe > bne * ;failed not equal (non zero) - -1117 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1118 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -111a : cd1e02 cmp fLDx+2 ;test flags - trap_ne -111d : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -111f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1121 : 48 > pha ;use stack to load status -1122 : 28 > plp - -1123 : a616 ldx zp1+3 -1125 : 08 php ;test stores do not alter flags -1126 : 8a txa -1127 : 49c3 eor #$c3 -1129 : aa tax -112a : 28 plp -112b : 8e0602 stx abst+3 -112e : 08 php ;flags after load/store sequence -112f : 49c3 eor #$c3 -1131 : aa tax -1132 : e000 cpx #0 ;test result - trap_ne -1134 : d0fe > bne * ;failed not equal (non zero) - -1136 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1137 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1139 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -113c : d0fe > bne * ;failed not equal (non zero) - - - set_stat 0 - > load_flag 0 -113e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1140 : 48 > pha ;use stack to load status -1141 : 28 > plp - -1142 : ae1702 ldx abs1 -1145 : 08 php ;test stores do not alter flags -1146 : 8a txa -1147 : 49c3 eor #$c3 -1149 : aa tax -114a : 28 plp -114b : 860c stx zpt -114d : 08 php ;flags after load/store sequence -114e : 49c3 eor #$c3 -1150 : c513 cmp zp1 ;test result - trap_ne -1152 : d0fe > bne * ;failed not equal (non zero) - -1154 : 68 pla ;load status - eor_flag 0 -1155 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1157 : cd1c02 cmp fLDx ;test flags - trap_ne -115a : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -115c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -115e : 48 > pha ;use stack to load status -115f : 28 > plp - -1160 : ae1802 ldx abs1+1 -1163 : 08 php ;test stores do not alter flags -1164 : 8a txa -1165 : 49c3 eor #$c3 -1167 : aa tax -1168 : 28 plp -1169 : 860d stx zpt+1 -116b : 08 php ;flags after load/store sequence -116c : 49c3 eor #$c3 -116e : c514 cmp zp1+1 ;test result - trap_ne -1170 : d0fe > bne * ;failed not equal (non zero) - -1172 : 68 pla ;load status - eor_flag 0 -1173 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1175 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1178 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -117a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -117c : 48 > pha ;use stack to load status -117d : 28 > plp - -117e : ae1902 ldx abs1+2 -1181 : 08 php ;test stores do not alter flags -1182 : 8a txa -1183 : 49c3 eor #$c3 -1185 : aa tax -1186 : 28 plp -1187 : 860e stx zpt+2 -1189 : 08 php ;flags after load/store sequence -118a : 49c3 eor #$c3 -118c : c515 cmp zp1+2 ;test result - trap_ne -118e : d0fe > bne * ;failed not equal (non zero) - -1190 : 68 pla ;load status - eor_flag 0 -1191 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1193 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1196 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1198 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -119a : 48 > pha ;use stack to load status -119b : 28 > plp - -119c : ae1a02 ldx abs1+3 -119f : 08 php ;test stores do not alter flags -11a0 : 8a txa -11a1 : 49c3 eor #$c3 -11a3 : aa tax -11a4 : 28 plp -11a5 : 860f stx zpt+3 -11a7 : 08 php ;flags after load/store sequence -11a8 : 49c3 eor #$c3 -11aa : c516 cmp zp1+3 ;test result - trap_ne -11ac : d0fe > bne * ;failed not equal (non zero) - -11ae : 68 pla ;load status - eor_flag 0 -11af : 4930 > eor #0|fao ;invert expected flags + always on bits - -11b1 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -11b4 : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -11b6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -11b8 : 48 > pha ;use stack to load status -11b9 : 28 > plp - -11ba : ae1702 ldx abs1 -11bd : 08 php ;test stores do not alter flags -11be : 8a txa -11bf : 49c3 eor #$c3 -11c1 : aa tax -11c2 : 28 plp -11c3 : 860c stx zpt -11c5 : 08 php ;flags after load/store sequence -11c6 : 49c3 eor #$c3 -11c8 : aa tax -11c9 : e413 cpx zp1 ;test result - trap_ne -11cb : d0fe > bne * ;failed not equal (non zero) - -11cd : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -11ce : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -11d0 : cd1c02 cmp fLDx ;test flags - trap_ne -11d3 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -11d5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -11d7 : 48 > pha ;use stack to load status -11d8 : 28 > plp - -11d9 : ae1802 ldx abs1+1 -11dc : 08 php ;test stores do not alter flags -11dd : 8a txa -11de : 49c3 eor #$c3 -11e0 : aa tax -11e1 : 28 plp -11e2 : 860d stx zpt+1 -11e4 : 08 php ;flags after load/store sequence -11e5 : 49c3 eor #$c3 -11e7 : aa tax -11e8 : e414 cpx zp1+1 ;test result - trap_ne -11ea : d0fe > bne * ;failed not equal (non zero) - -11ec : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -11ed : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -11ef : cd1d02 cmp fLDx+1 ;test flags - trap_ne -11f2 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -11f4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -11f6 : 48 > pha ;use stack to load status -11f7 : 28 > plp - -11f8 : ae1902 ldx abs1+2 -11fb : 08 php ;test stores do not alter flags -11fc : 8a txa -11fd : 49c3 eor #$c3 -11ff : aa tax -1200 : 28 plp -1201 : 860e stx zpt+2 -1203 : 08 php ;flags after load/store sequence -1204 : 49c3 eor #$c3 -1206 : aa tax -1207 : e415 cpx zp1+2 ;test result - trap_ne -1209 : d0fe > bne * ;failed not equal (non zero) - -120b : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -120c : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -120e : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1211 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1213 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1215 : 48 > pha ;use stack to load status -1216 : 28 > plp - -1217 : ae1a02 ldx abs1+3 -121a : 08 php ;test stores do not alter flags -121b : 8a txa -121c : 49c3 eor #$c3 -121e : aa tax -121f : 28 plp -1220 : 860f stx zpt+3 -1222 : 08 php ;flags after load/store sequence -1223 : 49c3 eor #$c3 -1225 : aa tax -1226 : e416 cpx zp1+3 ;test result - trap_ne -1228 : d0fe > bne * ;failed not equal (non zero) - -122a : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -122b : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -122d : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1230 : d0fe > bne * ;failed not equal (non zero) - - - set_stat 0 - > load_flag 0 -1232 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1234 : 48 > pha ;use stack to load status -1235 : 28 > plp - -1236 : a2c3 ldx #$c3 -1238 : 08 php -1239 : ec1702 cpx abs1 ;test result - trap_ne -123c : d0fe > bne * ;failed not equal (non zero) - -123e : 68 pla ;load status - eor_flag 0 -123f : 4930 > eor #0|fao ;invert expected flags + always on bits - -1241 : cd1c02 cmp fLDx ;test flags - trap_ne -1244 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1246 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1248 : 48 > pha ;use stack to load status -1249 : 28 > plp - -124a : a282 ldx #$82 -124c : 08 php -124d : ec1802 cpx abs1+1 ;test result - trap_ne -1250 : d0fe > bne * ;failed not equal (non zero) - -1252 : 68 pla ;load status - eor_flag 0 -1253 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1255 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1258 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -125a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -125c : 48 > pha ;use stack to load status -125d : 28 > plp - -125e : a241 ldx #$41 -1260 : 08 php -1261 : ec1902 cpx abs1+2 ;test result - trap_ne -1264 : d0fe > bne * ;failed not equal (non zero) - -1266 : 68 pla ;load status - eor_flag 0 -1267 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1269 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -126c : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -126e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1270 : 48 > pha ;use stack to load status -1271 : 28 > plp - -1272 : a200 ldx #0 -1274 : 08 php -1275 : ec1a02 cpx abs1+3 ;test result - trap_ne -1278 : d0fe > bne * ;failed not equal (non zero) - -127a : 68 pla ;load status - eor_flag 0 -127b : 4930 > eor #0|fao ;invert expected flags + always on bits - -127d : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1280 : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -1282 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1284 : 48 > pha ;use stack to load status -1285 : 28 > plp - -1286 : a2c3 ldx #$c3 -1288 : 08 php -1289 : ec1702 cpx abs1 ;test result - trap_ne -128c : d0fe > bne * ;failed not equal (non zero) - -128e : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -128f : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1291 : cd1c02 cmp fLDx ;test flags - trap_ne -1294 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1296 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1298 : 48 > pha ;use stack to load status -1299 : 28 > plp - -129a : a282 ldx #$82 -129c : 08 php -129d : ec1802 cpx abs1+1 ;test result - trap_ne -12a0 : d0fe > bne * ;failed not equal (non zero) - -12a2 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -12a3 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -12a5 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -12a8 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -12aa : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -12ac : 48 > pha ;use stack to load status -12ad : 28 > plp - -12ae : a241 ldx #$41 -12b0 : 08 php -12b1 : ec1902 cpx abs1+2 ;test result - trap_ne -12b4 : d0fe > bne * ;failed not equal (non zero) - -12b6 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -12b7 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -12b9 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -12bc : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -12be : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -12c0 : 48 > pha ;use stack to load status -12c1 : 28 > plp - -12c2 : a200 ldx #0 -12c4 : 08 php -12c5 : ec1a02 cpx abs1+3 ;test result - trap_ne -12c8 : d0fe > bne * ;failed not equal (non zero) - -12ca : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -12cb : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -12cd : cd1f02 cmp fLDx+3 ;test flags - trap_ne -12d0 : d0fe > bne * ;failed not equal (non zero) - - -12d2 : a200 ldx #0 -12d4 : a50c lda zpt -12d6 : 49c3 eor #$c3 -12d8 : c513 cmp zp1 - trap_ne ;store to zp data -12da : d0fe > bne * ;failed not equal (non zero) - -12dc : 860c stx zpt ;clear -12de : ad0302 lda abst -12e1 : 49c3 eor #$c3 -12e3 : cd1702 cmp abs1 - trap_ne ;store to abs data -12e6 : d0fe > bne * ;failed not equal (non zero) - -12e8 : 8e0302 stx abst ;clear -12eb : a50d lda zpt+1 -12ed : 49c3 eor #$c3 -12ef : c514 cmp zp1+1 - trap_ne ;store to zp data -12f1 : d0fe > bne * ;failed not equal (non zero) - -12f3 : 860d stx zpt+1 ;clear -12f5 : ad0402 lda abst+1 -12f8 : 49c3 eor #$c3 -12fa : cd1802 cmp abs1+1 - trap_ne ;store to abs data -12fd : d0fe > bne * ;failed not equal (non zero) - -12ff : 8e0402 stx abst+1 ;clear -1302 : a50e lda zpt+2 -1304 : 49c3 eor #$c3 -1306 : c515 cmp zp1+2 - trap_ne ;store to zp data -1308 : d0fe > bne * ;failed not equal (non zero) - -130a : 860e stx zpt+2 ;clear -130c : ad0502 lda abst+2 -130f : 49c3 eor #$c3 -1311 : cd1902 cmp abs1+2 - trap_ne ;store to abs data -1314 : d0fe > bne * ;failed not equal (non zero) - -1316 : 8e0502 stx abst+2 ;clear -1319 : a50f lda zpt+3 -131b : 49c3 eor #$c3 -131d : c516 cmp zp1+3 - trap_ne ;store to zp data -131f : d0fe > bne * ;failed not equal (non zero) - -1321 : 860f stx zpt+3 ;clear -1323 : ad0602 lda abst+3 -1326 : 49c3 eor #$c3 -1328 : cd1a02 cmp abs1+3 - trap_ne ;store to abs data -132b : d0fe > bne * ;failed not equal (non zero) - -132d : 8e0602 stx abst+3 ;clear - next_test -1330 : ad0002 > lda test_case ;previous test -1333 : c913 > cmp #test_num - > trap_ne ;test is out of sequence -1335 : d0fe > bne * ;failed not equal (non zero) - > -0014 = >test_num = test_num + 1 -1337 : a914 > lda #test_num ;*** next tests' number -1339 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; LDY / STY - zp / abs / # - set_stat 0 - > load_flag 0 -133c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -133e : 48 > pha ;use stack to load status -133f : 28 > plp - -1340 : a413 ldy zp1 -1342 : 08 php ;test stores do not alter flags -1343 : 98 tya -1344 : 49c3 eor #$c3 -1346 : a8 tay -1347 : 28 plp -1348 : 8c0302 sty abst -134b : 08 php ;flags after load/store sequence -134c : 49c3 eor #$c3 -134e : a8 tay -134f : c0c3 cpy #$c3 ;test result - trap_ne -1351 : d0fe > bne * ;failed not equal (non zero) - -1353 : 68 pla ;load status - eor_flag 0 -1354 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1356 : cd1c02 cmp fLDx ;test flags - trap_ne -1359 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -135b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -135d : 48 > pha ;use stack to load status -135e : 28 > plp - -135f : a414 ldy zp1+1 -1361 : 08 php ;test stores do not alter flags -1362 : 98 tya -1363 : 49c3 eor #$c3 -1365 : a8 tay -1366 : 28 plp -1367 : 8c0402 sty abst+1 -136a : 08 php ;flags after load/store sequence -136b : 49c3 eor #$c3 -136d : a8 tay -136e : c082 cpy #$82 ;test result - trap_ne -1370 : d0fe > bne * ;failed not equal (non zero) - -1372 : 68 pla ;load status - eor_flag 0 -1373 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1375 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1378 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -137a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -137c : 48 > pha ;use stack to load status -137d : 28 > plp - -137e : a415 ldy zp1+2 -1380 : 08 php ;test stores do not alter flags -1381 : 98 tya -1382 : 49c3 eor #$c3 -1384 : a8 tay -1385 : 28 plp -1386 : 8c0502 sty abst+2 -1389 : 08 php ;flags after load/store sequence -138a : 49c3 eor #$c3 -138c : a8 tay -138d : c041 cpy #$41 ;test result - trap_ne -138f : d0fe > bne * ;failed not equal (non zero) - -1391 : 68 pla ;load status - eor_flag 0 -1392 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1394 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1397 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1399 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -139b : 48 > pha ;use stack to load status -139c : 28 > plp - -139d : a416 ldy zp1+3 -139f : 08 php ;test stores do not alter flags -13a0 : 98 tya -13a1 : 49c3 eor #$c3 -13a3 : a8 tay -13a4 : 28 plp -13a5 : 8c0602 sty abst+3 -13a8 : 08 php ;flags after load/store sequence -13a9 : 49c3 eor #$c3 -13ab : a8 tay -13ac : c000 cpy #0 ;test result - trap_ne -13ae : d0fe > bne * ;failed not equal (non zero) - -13b0 : 68 pla ;load status - eor_flag 0 -13b1 : 4930 > eor #0|fao ;invert expected flags + always on bits - -13b3 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -13b6 : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -13b8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -13ba : 48 > pha ;use stack to load status -13bb : 28 > plp - -13bc : a413 ldy zp1 -13be : 08 php ;test stores do not alter flags -13bf : 98 tya -13c0 : 49c3 eor #$c3 -13c2 : a8 tay -13c3 : 28 plp -13c4 : 8c0302 sty abst -13c7 : 08 php ;flags after load/store sequence -13c8 : 49c3 eor #$c3 -13ca : a8 tay -13cb : c0c3 cpy #$c3 ;test result - trap_ne -13cd : d0fe > bne * ;failed not equal (non zero) - -13cf : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -13d0 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -13d2 : cd1c02 cmp fLDx ;test flags - trap_ne -13d5 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -13d7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -13d9 : 48 > pha ;use stack to load status -13da : 28 > plp - -13db : a414 ldy zp1+1 -13dd : 08 php ;test stores do not alter flags -13de : 98 tya -13df : 49c3 eor #$c3 -13e1 : a8 tay -13e2 : 28 plp -13e3 : 8c0402 sty abst+1 -13e6 : 08 php ;flags after load/store sequence -13e7 : 49c3 eor #$c3 -13e9 : a8 tay -13ea : c082 cpy #$82 ;test result - trap_ne -13ec : d0fe > bne * ;failed not equal (non zero) - -13ee : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -13ef : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -13f1 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -13f4 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -13f6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -13f8 : 48 > pha ;use stack to load status -13f9 : 28 > plp - -13fa : a415 ldy zp1+2 -13fc : 08 php ;test stores do not alter flags -13fd : 98 tya -13fe : 49c3 eor #$c3 -1400 : a8 tay -1401 : 28 plp -1402 : 8c0502 sty abst+2 -1405 : 08 php ;flags after load/store sequence -1406 : 49c3 eor #$c3 -1408 : a8 tay -1409 : c041 cpy #$41 ;test result - trap_ne -140b : d0fe > bne * ;failed not equal (non zero) - -140d : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -140e : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1410 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1413 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1415 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1417 : 48 > pha ;use stack to load status -1418 : 28 > plp - -1419 : a416 ldy zp1+3 -141b : 08 php ;test stores do not alter flags -141c : 98 tya -141d : 49c3 eor #$c3 -141f : a8 tay -1420 : 28 plp -1421 : 8c0602 sty abst+3 -1424 : 08 php ;flags after load/store sequence -1425 : 49c3 eor #$c3 -1427 : a8 tay -1428 : c000 cpy #0 ;test result - trap_ne -142a : d0fe > bne * ;failed not equal (non zero) - -142c : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -142d : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -142f : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1432 : d0fe > bne * ;failed not equal (non zero) - - - set_stat 0 - > load_flag 0 -1434 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1436 : 48 > pha ;use stack to load status -1437 : 28 > plp - -1438 : ac1702 ldy abs1 -143b : 08 php ;test stores do not alter flags -143c : 98 tya -143d : 49c3 eor #$c3 -143f : a8 tay -1440 : 28 plp -1441 : 840c sty zpt -1443 : 08 php ;flags after load/store sequence -1444 : 49c3 eor #$c3 -1446 : a8 tay -1447 : c413 cpy zp1 ;test result - trap_ne -1449 : d0fe > bne * ;failed not equal (non zero) - -144b : 68 pla ;load status - eor_flag 0 -144c : 4930 > eor #0|fao ;invert expected flags + always on bits - -144e : cd1c02 cmp fLDx ;test flags - trap_ne -1451 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1453 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1455 : 48 > pha ;use stack to load status -1456 : 28 > plp - -1457 : ac1802 ldy abs1+1 -145a : 08 php ;test stores do not alter flags -145b : 98 tya -145c : 49c3 eor #$c3 -145e : a8 tay -145f : 28 plp -1460 : 840d sty zpt+1 -1462 : 08 php ;flags after load/store sequence -1463 : 49c3 eor #$c3 -1465 : a8 tay -1466 : c414 cpy zp1+1 ;test result - trap_ne -1468 : d0fe > bne * ;failed not equal (non zero) - -146a : 68 pla ;load status - eor_flag 0 -146b : 4930 > eor #0|fao ;invert expected flags + always on bits - -146d : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1470 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1472 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1474 : 48 > pha ;use stack to load status -1475 : 28 > plp - -1476 : ac1902 ldy abs1+2 -1479 : 08 php ;test stores do not alter flags -147a : 98 tya -147b : 49c3 eor #$c3 -147d : a8 tay -147e : 28 plp -147f : 840e sty zpt+2 -1481 : 08 php ;flags after load/store sequence -1482 : 49c3 eor #$c3 -1484 : a8 tay -1485 : c415 cpy zp1+2 ;test result - trap_ne -1487 : d0fe > bne * ;failed not equal (non zero) - -1489 : 68 pla ;load status - eor_flag 0 -148a : 4930 > eor #0|fao ;invert expected flags + always on bits - -148c : cd1e02 cmp fLDx+2 ;test flags - trap_ne -148f : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1491 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1493 : 48 > pha ;use stack to load status -1494 : 28 > plp - -1495 : ac1a02 ldy abs1+3 -1498 : 08 php ;test stores do not alter flags -1499 : 98 tya -149a : 49c3 eor #$c3 -149c : a8 tay -149d : 28 plp -149e : 840f sty zpt+3 -14a0 : 08 php ;flags after load/store sequence -14a1 : 49c3 eor #$c3 -14a3 : a8 tay -14a4 : c416 cpy zp1+3 ;test result - trap_ne -14a6 : d0fe > bne * ;failed not equal (non zero) - -14a8 : 68 pla ;load status - eor_flag 0 -14a9 : 4930 > eor #0|fao ;invert expected flags + always on bits - -14ab : cd1f02 cmp fLDx+3 ;test flags - trap_ne -14ae : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -14b0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -14b2 : 48 > pha ;use stack to load status -14b3 : 28 > plp - -14b4 : ac1702 ldy abs1 -14b7 : 08 php ;test stores do not alter flags -14b8 : 98 tya -14b9 : 49c3 eor #$c3 -14bb : a8 tay -14bc : 28 plp -14bd : 840c sty zpt -14bf : 08 php ;flags after load/store sequence -14c0 : 49c3 eor #$c3 -14c2 : a8 tay -14c3 : c513 cmp zp1 ;test result - trap_ne -14c5 : d0fe > bne * ;failed not equal (non zero) - -14c7 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -14c8 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -14ca : cd1c02 cmp fLDx ;test flags - trap_ne -14cd : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -14cf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -14d1 : 48 > pha ;use stack to load status -14d2 : 28 > plp - -14d3 : ac1802 ldy abs1+1 -14d6 : 08 php ;test stores do not alter flags -14d7 : 98 tya -14d8 : 49c3 eor #$c3 -14da : a8 tay -14db : 28 plp -14dc : 840d sty zpt+1 -14de : 08 php ;flags after load/store sequence -14df : 49c3 eor #$c3 -14e1 : a8 tay -14e2 : c514 cmp zp1+1 ;test result - trap_ne -14e4 : d0fe > bne * ;failed not equal (non zero) - -14e6 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -14e7 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -14e9 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -14ec : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -14ee : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -14f0 : 48 > pha ;use stack to load status -14f1 : 28 > plp - -14f2 : ac1902 ldy abs1+2 -14f5 : 08 php ;test stores do not alter flags -14f6 : 98 tya -14f7 : 49c3 eor #$c3 -14f9 : a8 tay -14fa : 28 plp -14fb : 840e sty zpt+2 -14fd : 08 php ;flags after load/store sequence -14fe : 49c3 eor #$c3 -1500 : a8 tay -1501 : c515 cmp zp1+2 ;test result - trap_ne -1503 : d0fe > bne * ;failed not equal (non zero) - -1505 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1506 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1508 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -150b : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -150d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -150f : 48 > pha ;use stack to load status -1510 : 28 > plp - -1511 : ac1a02 ldy abs1+3 -1514 : 08 php ;test stores do not alter flags -1515 : 98 tya -1516 : 49c3 eor #$c3 -1518 : a8 tay -1519 : 28 plp -151a : 840f sty zpt+3 -151c : 08 php ;flags after load/store sequence -151d : 49c3 eor #$c3 -151f : a8 tay -1520 : c516 cmp zp1+3 ;test result - trap_ne -1522 : d0fe > bne * ;failed not equal (non zero) - -1524 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1525 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1527 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -152a : d0fe > bne * ;failed not equal (non zero) - - - - set_stat 0 - > load_flag 0 -152c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -152e : 48 > pha ;use stack to load status -152f : 28 > plp - -1530 : a0c3 ldy #$c3 -1532 : 08 php -1533 : cc1702 cpy abs1 ;test result - trap_ne -1536 : d0fe > bne * ;failed not equal (non zero) - -1538 : 68 pla ;load status - eor_flag 0 -1539 : 4930 > eor #0|fao ;invert expected flags + always on bits - -153b : cd1c02 cmp fLDx ;test flags - trap_ne -153e : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1540 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1542 : 48 > pha ;use stack to load status -1543 : 28 > plp - -1544 : a082 ldy #$82 -1546 : 08 php -1547 : cc1802 cpy abs1+1 ;test result - trap_ne -154a : d0fe > bne * ;failed not equal (non zero) - -154c : 68 pla ;load status - eor_flag 0 -154d : 4930 > eor #0|fao ;invert expected flags + always on bits - -154f : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1552 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1554 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1556 : 48 > pha ;use stack to load status -1557 : 28 > plp - -1558 : a041 ldy #$41 -155a : 08 php -155b : cc1902 cpy abs1+2 ;test result - trap_ne -155e : d0fe > bne * ;failed not equal (non zero) - -1560 : 68 pla ;load status - eor_flag 0 -1561 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1563 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1566 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1568 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -156a : 48 > pha ;use stack to load status -156b : 28 > plp - -156c : a000 ldy #0 -156e : 08 php -156f : cc1a02 cpy abs1+3 ;test result - trap_ne -1572 : d0fe > bne * ;failed not equal (non zero) - -1574 : 68 pla ;load status - eor_flag 0 -1575 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1577 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -157a : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -157c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -157e : 48 > pha ;use stack to load status -157f : 28 > plp - -1580 : a0c3 ldy #$c3 -1582 : 08 php -1583 : cc1702 cpy abs1 ;test result - trap_ne -1586 : d0fe > bne * ;failed not equal (non zero) - -1588 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1589 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -158b : cd1c02 cmp fLDx ;test flags - trap_ne -158e : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1590 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1592 : 48 > pha ;use stack to load status -1593 : 28 > plp - -1594 : a082 ldy #$82 -1596 : 08 php -1597 : cc1802 cpy abs1+1 ;test result - trap_ne -159a : d0fe > bne * ;failed not equal (non zero) - -159c : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -159d : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -159f : cd1d02 cmp fLDx+1 ;test flags - trap_ne -15a2 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -15a4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -15a6 : 48 > pha ;use stack to load status -15a7 : 28 > plp - -15a8 : a041 ldy #$41 -15aa : 08 php -15ab : cc1902 cpy abs1+2 ;test result - trap_ne -15ae : d0fe > bne * ;failed not equal (non zero) - -15b0 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -15b1 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -15b3 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -15b6 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -15b8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -15ba : 48 > pha ;use stack to load status -15bb : 28 > plp - -15bc : a000 ldy #0 -15be : 08 php -15bf : cc1a02 cpy abs1+3 ;test result - trap_ne -15c2 : d0fe > bne * ;failed not equal (non zero) - -15c4 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -15c5 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -15c7 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -15ca : d0fe > bne * ;failed not equal (non zero) - - -15cc : a000 ldy #0 -15ce : a50c lda zpt -15d0 : 49c3 eor #$c3 -15d2 : c513 cmp zp1 - trap_ne ;store to zp data -15d4 : d0fe > bne * ;failed not equal (non zero) - -15d6 : 840c sty zpt ;clear -15d8 : ad0302 lda abst -15db : 49c3 eor #$c3 -15dd : cd1702 cmp abs1 - trap_ne ;store to abs data -15e0 : d0fe > bne * ;failed not equal (non zero) - -15e2 : 8c0302 sty abst ;clear -15e5 : a50d lda zpt+1 -15e7 : 49c3 eor #$c3 -15e9 : c514 cmp zp1+1 - trap_ne ;store to zp+1 data -15eb : d0fe > bne * ;failed not equal (non zero) - -15ed : 840d sty zpt+1 ;clear -15ef : ad0402 lda abst+1 -15f2 : 49c3 eor #$c3 -15f4 : cd1802 cmp abs1+1 - trap_ne ;store to abs+1 data -15f7 : d0fe > bne * ;failed not equal (non zero) - -15f9 : 8c0402 sty abst+1 ;clear -15fc : a50e lda zpt+2 -15fe : 49c3 eor #$c3 -1600 : c515 cmp zp1+2 - trap_ne ;store to zp+2 data -1602 : d0fe > bne * ;failed not equal (non zero) - -1604 : 840e sty zpt+2 ;clear -1606 : ad0502 lda abst+2 -1609 : 49c3 eor #$c3 -160b : cd1902 cmp abs1+2 - trap_ne ;store to abs+2 data -160e : d0fe > bne * ;failed not equal (non zero) - -1610 : 8c0502 sty abst+2 ;clear -1613 : a50f lda zpt+3 -1615 : 49c3 eor #$c3 -1617 : c516 cmp zp1+3 - trap_ne ;store to zp+3 data -1619 : d0fe > bne * ;failed not equal (non zero) - -161b : 840f sty zpt+3 ;clear -161d : ad0602 lda abst+3 -1620 : 49c3 eor #$c3 -1622 : cd1a02 cmp abs1+3 - trap_ne ;store to abs+3 data -1625 : d0fe > bne * ;failed not equal (non zero) - -1627 : 8c0602 sty abst+3 ;clear - next_test -162a : ad0002 > lda test_case ;previous test -162d : c914 > cmp #test_num - > trap_ne ;test is out of sequence -162f : d0fe > bne * ;failed not equal (non zero) - > -0015 = >test_num = test_num + 1 -1631 : a915 > lda #test_num ;*** next tests' number -1633 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing load / store accumulator LDA / STA all addressing modes - ; LDA / STA - zp,x / abs,x -1636 : a203 ldx #3 -1638 : tldax - set_stat 0 - > load_flag 0 -1638 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -163a : 48 > pha ;use stack to load status -163b : 28 > plp - -163c : b513 lda zp1,x -163e : 08 php ;test stores do not alter flags -163f : 49c3 eor #$c3 -1641 : 28 plp -1642 : 9d0302 sta abst,x -1645 : 08 php ;flags after load/store sequence -1646 : 49c3 eor #$c3 -1648 : dd1702 cmp abs1,x ;test result - trap_ne -164b : d0fe > bne * ;failed not equal (non zero) - -164d : 68 pla ;load status - eor_flag 0 -164e : 4930 > eor #0|fao ;invert expected flags + always on bits - -1650 : dd1c02 cmp fLDx,x ;test flags - trap_ne -1653 : d0fe > bne * ;failed not equal (non zero) - -1655 : ca dex -1656 : 10e0 bpl tldax - -1658 : a203 ldx #3 -165a : tldax1 - set_stat $ff - > load_flag $ff -165a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -165c : 48 > pha ;use stack to load status -165d : 28 > plp - -165e : b513 lda zp1,x -1660 : 08 php ;test stores do not alter flags -1661 : 49c3 eor #$c3 -1663 : 28 plp -1664 : 9d0302 sta abst,x -1667 : 08 php ;flags after load/store sequence -1668 : 49c3 eor #$c3 -166a : dd1702 cmp abs1,x ;test result - trap_ne -166d : d0fe > bne * ;failed not equal (non zero) - -166f : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1670 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1672 : dd1c02 cmp fLDx,x ;test flags - trap_ne -1675 : d0fe > bne * ;failed not equal (non zero) - -1677 : ca dex -1678 : 10e0 bpl tldax1 - -167a : a203 ldx #3 -167c : tldax2 - set_stat 0 - > load_flag 0 -167c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -167e : 48 > pha ;use stack to load status -167f : 28 > plp - -1680 : bd1702 lda abs1,x -1683 : 08 php ;test stores do not alter flags -1684 : 49c3 eor #$c3 -1686 : 28 plp -1687 : 950c sta zpt,x -1689 : 08 php ;flags after load/store sequence -168a : 49c3 eor #$c3 -168c : d513 cmp zp1,x ;test result - trap_ne -168e : d0fe > bne * ;failed not equal (non zero) - -1690 : 68 pla ;load status - eor_flag 0 -1691 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1693 : dd1c02 cmp fLDx,x ;test flags - trap_ne -1696 : d0fe > bne * ;failed not equal (non zero) - -1698 : ca dex -1699 : 10e1 bpl tldax2 - -169b : a203 ldx #3 -169d : tldax3 - set_stat $ff - > load_flag $ff -169d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -169f : 48 > pha ;use stack to load status -16a0 : 28 > plp - -16a1 : bd1702 lda abs1,x -16a4 : 08 php ;test stores do not alter flags -16a5 : 49c3 eor #$c3 -16a7 : 28 plp -16a8 : 950c sta zpt,x -16aa : 08 php ;flags after load/store sequence -16ab : 49c3 eor #$c3 -16ad : d513 cmp zp1,x ;test result - trap_ne -16af : d0fe > bne * ;failed not equal (non zero) - -16b1 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -16b2 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -16b4 : dd1c02 cmp fLDx,x ;test flags - trap_ne -16b7 : d0fe > bne * ;failed not equal (non zero) - -16b9 : ca dex -16ba : 10e1 bpl tldax3 - -16bc : a203 ldx #3 ;testing store result -16be : a000 ldy #0 -16c0 : b50c tstax lda zpt,x -16c2 : 49c3 eor #$c3 -16c4 : d513 cmp zp1,x - trap_ne ;store to zp,x data -16c6 : d0fe > bne * ;failed not equal (non zero) - -16c8 : 940c sty zpt,x ;clear -16ca : bd0302 lda abst,x -16cd : 49c3 eor #$c3 -16cf : dd1702 cmp abs1,x - trap_ne ;store to abs,x data -16d2 : d0fe > bne * ;failed not equal (non zero) - -16d4 : 8a txa -16d5 : 9d0302 sta abst,x ;clear -16d8 : ca dex -16d9 : 10e5 bpl tstax - next_test -16db : ad0002 > lda test_case ;previous test -16de : c915 > cmp #test_num - > trap_ne ;test is out of sequence -16e0 : d0fe > bne * ;failed not equal (non zero) - > -0016 = >test_num = test_num + 1 -16e2 : a916 > lda #test_num ;*** next tests' number -16e4 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; LDA / STA - (zp),y / abs,y / (zp,x) -16e7 : a003 ldy #3 -16e9 : tlday - set_stat 0 - > load_flag 0 -16e9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -16eb : 48 > pha ;use stack to load status -16ec : 28 > plp - -16ed : b124 lda (ind1),y -16ef : 08 php ;test stores do not alter flags -16f0 : 49c3 eor #$c3 -16f2 : 28 plp -16f3 : 990302 sta abst,y -16f6 : 08 php ;flags after load/store sequence -16f7 : 49c3 eor #$c3 -16f9 : d91702 cmp abs1,y ;test result - trap_ne -16fc : d0fe > bne * ;failed not equal (non zero) - -16fe : 68 pla ;load status - eor_flag 0 -16ff : 4930 > eor #0|fao ;invert expected flags + always on bits - -1701 : d91c02 cmp fLDx,y ;test flags - trap_ne -1704 : d0fe > bne * ;failed not equal (non zero) - -1706 : 88 dey -1707 : 10e0 bpl tlday - -1709 : a003 ldy #3 -170b : tlday1 - set_stat $ff - > load_flag $ff -170b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -170d : 48 > pha ;use stack to load status -170e : 28 > plp - -170f : b124 lda (ind1),y -1711 : 08 php ;test stores do not alter flags -1712 : 49c3 eor #$c3 -1714 : 28 plp -1715 : 990302 sta abst,y -1718 : 08 php ;flags after load/store sequence -1719 : 49c3 eor #$c3 -171b : d91702 cmp abs1,y ;test result - trap_ne -171e : d0fe > bne * ;failed not equal (non zero) - -1720 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1721 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1723 : d91c02 cmp fLDx,y ;test flags - trap_ne -1726 : d0fe > bne * ;failed not equal (non zero) - -1728 : 88 dey -1729 : 10e0 bpl tlday1 - -172b : a003 ldy #3 ;testing store result -172d : a200 ldx #0 -172f : b90302 tstay lda abst,y -1732 : 49c3 eor #$c3 -1734 : d91702 cmp abs1,y - trap_ne ;store to abs data -1737 : d0fe > bne * ;failed not equal (non zero) - -1739 : 8a txa -173a : 990302 sta abst,y ;clear -173d : 88 dey -173e : 10ef bpl tstay - -1740 : a003 ldy #3 -1742 : tlday2 - set_stat 0 - > load_flag 0 -1742 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1744 : 48 > pha ;use stack to load status -1745 : 28 > plp - -1746 : b91702 lda abs1,y -1749 : 08 php ;test stores do not alter flags -174a : 49c3 eor #$c3 -174c : 28 plp -174d : 9130 sta (indt),y -174f : 08 php ;flags after load/store sequence -1750 : 49c3 eor #$c3 -1752 : d124 cmp (ind1),y ;test result - trap_ne -1754 : d0fe > bne * ;failed not equal (non zero) - -1756 : 68 pla ;load status - eor_flag 0 -1757 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1759 : d91c02 cmp fLDx,y ;test flags - trap_ne -175c : d0fe > bne * ;failed not equal (non zero) - -175e : 88 dey -175f : 10e1 bpl tlday2 - -1761 : a003 ldy #3 -1763 : tlday3 - set_stat $ff - > load_flag $ff -1763 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1765 : 48 > pha ;use stack to load status -1766 : 28 > plp - -1767 : b91702 lda abs1,y -176a : 08 php ;test stores do not alter flags -176b : 49c3 eor #$c3 -176d : 28 plp -176e : 9130 sta (indt),y -1770 : 08 php ;flags after load/store sequence -1771 : 49c3 eor #$c3 -1773 : d124 cmp (ind1),y ;test result - trap_ne -1775 : d0fe > bne * ;failed not equal (non zero) - -1777 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1778 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -177a : d91c02 cmp fLDx,y ;test flags - trap_ne -177d : d0fe > bne * ;failed not equal (non zero) - -177f : 88 dey -1780 : 10e1 bpl tlday3 - -1782 : a003 ldy #3 ;testing store result -1784 : a200 ldx #0 -1786 : b90302 tstay1 lda abst,y -1789 : 49c3 eor #$c3 -178b : d91702 cmp abs1,y - trap_ne ;store to abs data -178e : d0fe > bne * ;failed not equal (non zero) - -1790 : 8a txa -1791 : 990302 sta abst,y ;clear -1794 : 88 dey -1795 : 10ef bpl tstay1 - -1797 : a206 ldx #6 -1799 : a003 ldy #3 -179b : tldax4 - set_stat 0 - > load_flag 0 -179b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -179d : 48 > pha ;use stack to load status -179e : 28 > plp - -179f : a124 lda (ind1,x) -17a1 : 08 php ;test stores do not alter flags -17a2 : 49c3 eor #$c3 -17a4 : 28 plp -17a5 : 8130 sta (indt,x) -17a7 : 08 php ;flags after load/store sequence -17a8 : 49c3 eor #$c3 -17aa : d91702 cmp abs1,y ;test result - trap_ne -17ad : d0fe > bne * ;failed not equal (non zero) - -17af : 68 pla ;load status - eor_flag 0 -17b0 : 4930 > eor #0|fao ;invert expected flags + always on bits - -17b2 : d91c02 cmp fLDx,y ;test flags - trap_ne -17b5 : d0fe > bne * ;failed not equal (non zero) - -17b7 : ca dex -17b8 : ca dex -17b9 : 88 dey -17ba : 10df bpl tldax4 - -17bc : a206 ldx #6 -17be : a003 ldy #3 -17c0 : tldax5 - set_stat $ff - > load_flag $ff -17c0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -17c2 : 48 > pha ;use stack to load status -17c3 : 28 > plp - -17c4 : a124 lda (ind1,x) -17c6 : 08 php ;test stores do not alter flags -17c7 : 49c3 eor #$c3 -17c9 : 28 plp -17ca : 8130 sta (indt,x) -17cc : 08 php ;flags after load/store sequence -17cd : 49c3 eor #$c3 -17cf : d91702 cmp abs1,y ;test result - trap_ne -17d2 : d0fe > bne * ;failed not equal (non zero) - -17d4 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -17d5 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -17d7 : d91c02 cmp fLDx,y ;test flags - trap_ne -17da : d0fe > bne * ;failed not equal (non zero) - -17dc : ca dex -17dd : ca dex -17de : 88 dey -17df : 10df bpl tldax5 - -17e1 : a003 ldy #3 ;testing store result -17e3 : a200 ldx #0 -17e5 : b90302 tstay2 lda abst,y -17e8 : 49c3 eor #$c3 -17ea : d91702 cmp abs1,y - trap_ne ;store to abs data -17ed : d0fe > bne * ;failed not equal (non zero) - -17ef : 8a txa -17f0 : 990302 sta abst,y ;clear -17f3 : 88 dey -17f4 : 10ef bpl tstay2 - next_test -17f6 : ad0002 > lda test_case ;previous test -17f9 : c916 > cmp #test_num - > trap_ne ;test is out of sequence -17fb : d0fe > bne * ;failed not equal (non zero) - > -0017 = >test_num = test_num + 1 -17fd : a917 > lda #test_num ;*** next tests' number -17ff : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; indexed wraparound test (only zp should wrap) -1802 : a2fd ldx #3+$fa -1804 : b519 tldax6 lda zp1-$fa&$ff,x ;wrap on indexed zp -1806 : 9d0901 sta abst-$fa,x ;no STX abs,x! -1809 : ca dex -180a : e0fa cpx #$fa -180c : b0f6 bcs tldax6 -180e : a2fd ldx #3+$fa -1810 : bd1d01 tldax7 lda abs1-$fa,x ;no wrap on indexed abs -1813 : 9512 sta zpt-$fa&$ff,x -1815 : ca dex -1816 : e0fa cpx #$fa -1818 : b0f6 bcs tldax7 - -181a : a203 ldx #3 ;testing wraparound result -181c : a000 ldy #0 -181e : b50c tstax1 lda zpt,x -1820 : d513 cmp zp1,x - trap_ne ;store to zp,x data -1822 : d0fe > bne * ;failed not equal (non zero) - -1824 : 940c sty zpt,x ;clear -1826 : bd0302 lda abst,x -1829 : dd1702 cmp abs1,x - trap_ne ;store to abs,x data -182c : d0fe > bne * ;failed not equal (non zero) - -182e : 8a txa -182f : 9d0302 sta abst,x ;clear -1832 : ca dex -1833 : 10e9 bpl tstax1 - -1835 : a0fb ldy #3+$f8 -1837 : a2fe ldx #6+$f8 -1839 : a12c tlday4 lda (ind1-$f8&$ff,x) ;wrap on indexed zp indirect -183b : 990b01 sta abst-$f8,y -183e : ca dex -183f : ca dex -1840 : 88 dey -1841 : c0f8 cpy #$f8 -1843 : b0f4 bcs tlday4 -1845 : a003 ldy #3 ;testing wraparound result -1847 : a200 ldx #0 -1849 : b90302 tstay4 lda abst,y -184c : d91702 cmp abs1,y - trap_ne ;store to abs data -184f : d0fe > bne * ;failed not equal (non zero) - -1851 : 8a txa -1852 : 990302 sta abst,y ;clear -1855 : 88 dey -1856 : 10f1 bpl tstay4 - -1858 : a0fb ldy #3+$f8 -185a : b91f01 tlday5 lda abs1-$f8,y ;no wrap on indexed abs -185d : 9138 sta (inwt),y -185f : 88 dey -1860 : c0f8 cpy #$f8 -1862 : b0f6 bcs tlday5 -1864 : a003 ldy #3 ;testing wraparound result -1866 : a200 ldx #0 -1868 : b90302 tstay5 lda abst,y -186b : d91702 cmp abs1,y - trap_ne ;store to abs data -186e : d0fe > bne * ;failed not equal (non zero) - -1870 : 8a txa -1871 : 990302 sta abst,y ;clear -1874 : 88 dey -1875 : 10f1 bpl tstay5 - -1877 : a0fb ldy #3+$f8 -1879 : a2fe ldx #6+$f8 -187b : b12e tlday6 lda (inw1),y ;no wrap on zp indirect indexed -187d : 8138 sta (indt-$f8&$ff,x) -187f : ca dex -1880 : ca dex -1881 : 88 dey -1882 : c0f8 cpy #$f8 -1884 : b0f5 bcs tlday6 -1886 : a003 ldy #3 ;testing wraparound result -1888 : a200 ldx #0 -188a : b90302 tstay6 lda abst,y -188d : d91702 cmp abs1,y - trap_ne ;store to abs data -1890 : d0fe > bne * ;failed not equal (non zero) - -1892 : 8a txa -1893 : 990302 sta abst,y ;clear -1896 : 88 dey -1897 : 10f1 bpl tstay6 - next_test -1899 : ad0002 > lda test_case ;previous test -189c : c917 > cmp #test_num - > trap_ne ;test is out of sequence -189e : d0fe > bne * ;failed not equal (non zero) - > -0018 = >test_num = test_num + 1 -18a0 : a918 > lda #test_num ;*** next tests' number -18a2 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; LDA / STA - zp / abs / # - set_stat 0 - > load_flag 0 -18a5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -18a7 : 48 > pha ;use stack to load status -18a8 : 28 > plp - -18a9 : a513 lda zp1 -18ab : 08 php ;test stores do not alter flags -18ac : 49c3 eor #$c3 -18ae : 28 plp -18af : 8d0302 sta abst -18b2 : 08 php ;flags after load/store sequence -18b3 : 49c3 eor #$c3 -18b5 : c9c3 cmp #$c3 ;test result - trap_ne -18b7 : d0fe > bne * ;failed not equal (non zero) - -18b9 : 68 pla ;load status - eor_flag 0 -18ba : 4930 > eor #0|fao ;invert expected flags + always on bits - -18bc : cd1c02 cmp fLDx ;test flags - trap_ne -18bf : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -18c1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -18c3 : 48 > pha ;use stack to load status -18c4 : 28 > plp - -18c5 : a514 lda zp1+1 -18c7 : 08 php ;test stores do not alter flags -18c8 : 49c3 eor #$c3 -18ca : 28 plp -18cb : 8d0402 sta abst+1 -18ce : 08 php ;flags after load/store sequence -18cf : 49c3 eor #$c3 -18d1 : c982 cmp #$82 ;test result - trap_ne -18d3 : d0fe > bne * ;failed not equal (non zero) - -18d5 : 68 pla ;load status - eor_flag 0 -18d6 : 4930 > eor #0|fao ;invert expected flags + always on bits - -18d8 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -18db : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -18dd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -18df : 48 > pha ;use stack to load status -18e0 : 28 > plp - -18e1 : a515 lda zp1+2 -18e3 : 08 php ;test stores do not alter flags -18e4 : 49c3 eor #$c3 -18e6 : 28 plp -18e7 : 8d0502 sta abst+2 -18ea : 08 php ;flags after load/store sequence -18eb : 49c3 eor #$c3 -18ed : c941 cmp #$41 ;test result - trap_ne -18ef : d0fe > bne * ;failed not equal (non zero) - -18f1 : 68 pla ;load status - eor_flag 0 -18f2 : 4930 > eor #0|fao ;invert expected flags + always on bits - -18f4 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -18f7 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -18f9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -18fb : 48 > pha ;use stack to load status -18fc : 28 > plp - -18fd : a516 lda zp1+3 -18ff : 08 php ;test stores do not alter flags -1900 : 49c3 eor #$c3 -1902 : 28 plp -1903 : 8d0602 sta abst+3 -1906 : 08 php ;flags after load/store sequence -1907 : 49c3 eor #$c3 -1909 : c900 cmp #0 ;test result - trap_ne -190b : d0fe > bne * ;failed not equal (non zero) - -190d : 68 pla ;load status - eor_flag 0 -190e : 4930 > eor #0|fao ;invert expected flags + always on bits - -1910 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1913 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1915 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1917 : 48 > pha ;use stack to load status -1918 : 28 > plp - -1919 : a513 lda zp1 -191b : 08 php ;test stores do not alter flags -191c : 49c3 eor #$c3 -191e : 28 plp -191f : 8d0302 sta abst -1922 : 08 php ;flags after load/store sequence -1923 : 49c3 eor #$c3 -1925 : c9c3 cmp #$c3 ;test result - trap_ne -1927 : d0fe > bne * ;failed not equal (non zero) - -1929 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -192a : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -192c : cd1c02 cmp fLDx ;test flags - trap_ne -192f : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1931 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1933 : 48 > pha ;use stack to load status -1934 : 28 > plp - -1935 : a514 lda zp1+1 -1937 : 08 php ;test stores do not alter flags -1938 : 49c3 eor #$c3 -193a : 28 plp -193b : 8d0402 sta abst+1 -193e : 08 php ;flags after load/store sequence -193f : 49c3 eor #$c3 -1941 : c982 cmp #$82 ;test result - trap_ne -1943 : d0fe > bne * ;failed not equal (non zero) - -1945 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1946 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1948 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -194b : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -194d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -194f : 48 > pha ;use stack to load status -1950 : 28 > plp - -1951 : a515 lda zp1+2 -1953 : 08 php ;test stores do not alter flags -1954 : 49c3 eor #$c3 -1956 : 28 plp -1957 : 8d0502 sta abst+2 -195a : 08 php ;flags after load/store sequence -195b : 49c3 eor #$c3 -195d : c941 cmp #$41 ;test result - trap_ne -195f : d0fe > bne * ;failed not equal (non zero) - -1961 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1962 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1964 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1967 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1969 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -196b : 48 > pha ;use stack to load status -196c : 28 > plp - -196d : a516 lda zp1+3 -196f : 08 php ;test stores do not alter flags -1970 : 49c3 eor #$c3 -1972 : 28 plp -1973 : 8d0602 sta abst+3 -1976 : 08 php ;flags after load/store sequence -1977 : 49c3 eor #$c3 -1979 : c900 cmp #0 ;test result - trap_ne -197b : d0fe > bne * ;failed not equal (non zero) - -197d : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -197e : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1980 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1983 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1985 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1987 : 48 > pha ;use stack to load status -1988 : 28 > plp - -1989 : ad1702 lda abs1 -198c : 08 php ;test stores do not alter flags -198d : 49c3 eor #$c3 -198f : 28 plp -1990 : 850c sta zpt -1992 : 08 php ;flags after load/store sequence -1993 : 49c3 eor #$c3 -1995 : c513 cmp zp1 ;test result - trap_ne -1997 : d0fe > bne * ;failed not equal (non zero) - -1999 : 68 pla ;load status - eor_flag 0 -199a : 4930 > eor #0|fao ;invert expected flags + always on bits - -199c : cd1c02 cmp fLDx ;test flags - trap_ne -199f : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -19a1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -19a3 : 48 > pha ;use stack to load status -19a4 : 28 > plp - -19a5 : ad1802 lda abs1+1 -19a8 : 08 php ;test stores do not alter flags -19a9 : 49c3 eor #$c3 -19ab : 28 plp -19ac : 850d sta zpt+1 -19ae : 08 php ;flags after load/store sequence -19af : 49c3 eor #$c3 -19b1 : c514 cmp zp1+1 ;test result - trap_ne -19b3 : d0fe > bne * ;failed not equal (non zero) - -19b5 : 68 pla ;load status - eor_flag 0 -19b6 : 4930 > eor #0|fao ;invert expected flags + always on bits - -19b8 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -19bb : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -19bd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -19bf : 48 > pha ;use stack to load status -19c0 : 28 > plp - -19c1 : ad1902 lda abs1+2 -19c4 : 08 php ;test stores do not alter flags -19c5 : 49c3 eor #$c3 -19c7 : 28 plp -19c8 : 850e sta zpt+2 -19ca : 08 php ;flags after load/store sequence -19cb : 49c3 eor #$c3 -19cd : c515 cmp zp1+2 ;test result - trap_ne -19cf : d0fe > bne * ;failed not equal (non zero) - -19d1 : 68 pla ;load status - eor_flag 0 -19d2 : 4930 > eor #0|fao ;invert expected flags + always on bits - -19d4 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -19d7 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -19d9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -19db : 48 > pha ;use stack to load status -19dc : 28 > plp - -19dd : ad1a02 lda abs1+3 -19e0 : 08 php ;test stores do not alter flags -19e1 : 49c3 eor #$c3 -19e3 : 28 plp -19e4 : 850f sta zpt+3 -19e6 : 08 php ;flags after load/store sequence -19e7 : 49c3 eor #$c3 -19e9 : c516 cmp zp1+3 ;test result - trap_ne -19eb : d0fe > bne * ;failed not equal (non zero) - -19ed : 68 pla ;load status - eor_flag 0 -19ee : 4930 > eor #0|fao ;invert expected flags + always on bits - -19f0 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -19f3 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -19f5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -19f7 : 48 > pha ;use stack to load status -19f8 : 28 > plp - -19f9 : ad1702 lda abs1 -19fc : 08 php ;test stores do not alter flags -19fd : 49c3 eor #$c3 -19ff : 28 plp -1a00 : 850c sta zpt -1a02 : 08 php ;flags after load/store sequence -1a03 : 49c3 eor #$c3 -1a05 : c513 cmp zp1 ;test result - trap_ne -1a07 : d0fe > bne * ;failed not equal (non zero) - -1a09 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1a0a : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1a0c : cd1c02 cmp fLDx ;test flags - trap_ne -1a0f : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1a11 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1a13 : 48 > pha ;use stack to load status -1a14 : 28 > plp - -1a15 : ad1802 lda abs1+1 -1a18 : 08 php ;test stores do not alter flags -1a19 : 49c3 eor #$c3 -1a1b : 28 plp -1a1c : 850d sta zpt+1 -1a1e : 08 php ;flags after load/store sequence -1a1f : 49c3 eor #$c3 -1a21 : c514 cmp zp1+1 ;test result - trap_ne -1a23 : d0fe > bne * ;failed not equal (non zero) - -1a25 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1a26 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1a28 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1a2b : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1a2d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1a2f : 48 > pha ;use stack to load status -1a30 : 28 > plp - -1a31 : ad1902 lda abs1+2 -1a34 : 08 php ;test stores do not alter flags -1a35 : 49c3 eor #$c3 -1a37 : 28 plp -1a38 : 850e sta zpt+2 -1a3a : 08 php ;flags after load/store sequence -1a3b : 49c3 eor #$c3 -1a3d : c515 cmp zp1+2 ;test result - trap_ne -1a3f : d0fe > bne * ;failed not equal (non zero) - -1a41 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1a42 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1a44 : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1a47 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1a49 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1a4b : 48 > pha ;use stack to load status -1a4c : 28 > plp - -1a4d : ad1a02 lda abs1+3 -1a50 : 08 php ;test stores do not alter flags -1a51 : 49c3 eor #$c3 -1a53 : 28 plp -1a54 : 850f sta zpt+3 -1a56 : 08 php ;flags after load/store sequence -1a57 : 49c3 eor #$c3 -1a59 : c516 cmp zp1+3 ;test result - trap_ne -1a5b : d0fe > bne * ;failed not equal (non zero) - -1a5d : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1a5e : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1a60 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1a63 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1a65 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1a67 : 48 > pha ;use stack to load status -1a68 : 28 > plp - -1a69 : a9c3 lda #$c3 -1a6b : 08 php -1a6c : cd1702 cmp abs1 ;test result - trap_ne -1a6f : d0fe > bne * ;failed not equal (non zero) - -1a71 : 68 pla ;load status - eor_flag 0 -1a72 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1a74 : cd1c02 cmp fLDx ;test flags - trap_ne -1a77 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1a79 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1a7b : 48 > pha ;use stack to load status -1a7c : 28 > plp - -1a7d : a982 lda #$82 -1a7f : 08 php -1a80 : cd1802 cmp abs1+1 ;test result - trap_ne -1a83 : d0fe > bne * ;failed not equal (non zero) - -1a85 : 68 pla ;load status - eor_flag 0 -1a86 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1a88 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1a8b : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1a8d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1a8f : 48 > pha ;use stack to load status -1a90 : 28 > plp - -1a91 : a941 lda #$41 -1a93 : 08 php -1a94 : cd1902 cmp abs1+2 ;test result - trap_ne -1a97 : d0fe > bne * ;failed not equal (non zero) - -1a99 : 68 pla ;load status - eor_flag 0 -1a9a : 4930 > eor #0|fao ;invert expected flags + always on bits - -1a9c : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1a9f : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1aa1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1aa3 : 48 > pha ;use stack to load status -1aa4 : 28 > plp - -1aa5 : a900 lda #0 -1aa7 : 08 php -1aa8 : cd1a02 cmp abs1+3 ;test result - trap_ne -1aab : d0fe > bne * ;failed not equal (non zero) - -1aad : 68 pla ;load status - eor_flag 0 -1aae : 4930 > eor #0|fao ;invert expected flags + always on bits - -1ab0 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1ab3 : d0fe > bne * ;failed not equal (non zero) - - - set_stat $ff - > load_flag $ff -1ab5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1ab7 : 48 > pha ;use stack to load status -1ab8 : 28 > plp - -1ab9 : a9c3 lda #$c3 -1abb : 08 php -1abc : cd1702 cmp abs1 ;test result - trap_ne -1abf : d0fe > bne * ;failed not equal (non zero) - -1ac1 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1ac2 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1ac4 : cd1c02 cmp fLDx ;test flags - trap_ne -1ac7 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1ac9 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1acb : 48 > pha ;use stack to load status -1acc : 28 > plp - -1acd : a982 lda #$82 -1acf : 08 php -1ad0 : cd1802 cmp abs1+1 ;test result - trap_ne -1ad3 : d0fe > bne * ;failed not equal (non zero) - -1ad5 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1ad6 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1ad8 : cd1d02 cmp fLDx+1 ;test flags - trap_ne -1adb : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1add : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1adf : 48 > pha ;use stack to load status -1ae0 : 28 > plp - -1ae1 : a941 lda #$41 -1ae3 : 08 php -1ae4 : cd1902 cmp abs1+2 ;test result - trap_ne -1ae7 : d0fe > bne * ;failed not equal (non zero) - -1ae9 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1aea : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1aec : cd1e02 cmp fLDx+2 ;test flags - trap_ne -1aef : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -1af1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1af3 : 48 > pha ;use stack to load status -1af4 : 28 > plp - -1af5 : a900 lda #0 -1af7 : 08 php -1af8 : cd1a02 cmp abs1+3 ;test result - trap_ne -1afb : d0fe > bne * ;failed not equal (non zero) - -1afd : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1afe : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1b00 : cd1f02 cmp fLDx+3 ;test flags - trap_ne -1b03 : d0fe > bne * ;failed not equal (non zero) - - -1b05 : a200 ldx #0 -1b07 : a50c lda zpt -1b09 : 49c3 eor #$c3 -1b0b : c513 cmp zp1 - trap_ne ;store to zp data -1b0d : d0fe > bne * ;failed not equal (non zero) - -1b0f : 860c stx zpt ;clear -1b11 : ad0302 lda abst -1b14 : 49c3 eor #$c3 -1b16 : cd1702 cmp abs1 - trap_ne ;store to abs data -1b19 : d0fe > bne * ;failed not equal (non zero) - -1b1b : 8e0302 stx abst ;clear -1b1e : a50d lda zpt+1 -1b20 : 49c3 eor #$c3 -1b22 : c514 cmp zp1+1 - trap_ne ;store to zp data -1b24 : d0fe > bne * ;failed not equal (non zero) - -1b26 : 860d stx zpt+1 ;clear -1b28 : ad0402 lda abst+1 -1b2b : 49c3 eor #$c3 -1b2d : cd1802 cmp abs1+1 - trap_ne ;store to abs data -1b30 : d0fe > bne * ;failed not equal (non zero) - -1b32 : 8e0402 stx abst+1 ;clear -1b35 : a50e lda zpt+2 -1b37 : 49c3 eor #$c3 -1b39 : c515 cmp zp1+2 - trap_ne ;store to zp data -1b3b : d0fe > bne * ;failed not equal (non zero) - -1b3d : 860e stx zpt+2 ;clear -1b3f : ad0502 lda abst+2 -1b42 : 49c3 eor #$c3 -1b44 : cd1902 cmp abs1+2 - trap_ne ;store to abs data -1b47 : d0fe > bne * ;failed not equal (non zero) - -1b49 : 8e0502 stx abst+2 ;clear -1b4c : a50f lda zpt+3 -1b4e : 49c3 eor #$c3 -1b50 : c516 cmp zp1+3 - trap_ne ;store to zp data -1b52 : d0fe > bne * ;failed not equal (non zero) - -1b54 : 860f stx zpt+3 ;clear -1b56 : ad0602 lda abst+3 -1b59 : 49c3 eor #$c3 -1b5b : cd1a02 cmp abs1+3 - trap_ne ;store to abs data -1b5e : d0fe > bne * ;failed not equal (non zero) - -1b60 : 8e0602 stx abst+3 ;clear - next_test -1b63 : ad0002 > lda test_case ;previous test -1b66 : c918 > cmp #test_num - > trap_ne ;test is out of sequence -1b68 : d0fe > bne * ;failed not equal (non zero) - > -0019 = >test_num = test_num + 1 -1b6a : a919 > lda #test_num ;*** next tests' number -1b6c : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing bit test & compares BIT CPX CPY CMP all addressing modes - ; BIT - zp / abs - set_a $ff,0 - > load_flag 0 -1b6f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b71 : 48 > pha ;use stack to load status -1b72 : a9ff > lda #$ff ;precharge accu -1b74 : 28 > plp - -1b75 : 2416 bit zp1+3 ;00 - should set Z / clear NV - tst_a $ff,fz -1b77 : 08 > php ;save flags -1b78 : c9ff > cmp #$ff ;test result - > trap_ne -1b7a : d0fe > bne * ;failed not equal (non zero) - > -1b7c : 68 > pla ;load status -1b7d : 48 > pha - > cmp_flag fz -1b7e : c932 > cmp #(fz |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b80 : d0fe > bne * ;failed not equal (non zero) - > -1b82 : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1b83 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b85 : 48 > pha ;use stack to load status -1b86 : a901 > lda #1 ;precharge accu -1b88 : 28 > plp - -1b89 : 2415 bit zp1+2 ;41 - should set V (M6) / clear NZ - tst_a 1,fv -1b8b : 08 > php ;save flags -1b8c : c901 > cmp #1 ;test result - > trap_ne -1b8e : d0fe > bne * ;failed not equal (non zero) - > -1b90 : 68 > pla ;load status -1b91 : 48 > pha - > cmp_flag fv -1b92 : c970 > cmp #(fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b94 : d0fe > bne * ;failed not equal (non zero) - > -1b96 : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1b97 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b99 : 48 > pha ;use stack to load status -1b9a : a901 > lda #1 ;precharge accu -1b9c : 28 > plp - -1b9d : 2414 bit zp1+1 ;82 - should set N (M7) & Z / clear V - tst_a 1,fnz -1b9f : 08 > php ;save flags -1ba0 : c901 > cmp #1 ;test result - > trap_ne -1ba2 : d0fe > bne * ;failed not equal (non zero) - > -1ba4 : 68 > pla ;load status -1ba5 : 48 > pha - > cmp_flag fnz -1ba6 : c9b2 > cmp #(fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ba8 : d0fe > bne * ;failed not equal (non zero) - > -1baa : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1bab : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1bad : 48 > pha ;use stack to load status -1bae : a901 > lda #1 ;precharge accu -1bb0 : 28 > plp - -1bb1 : 2413 bit zp1 ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,fnv -1bb3 : 08 > php ;save flags -1bb4 : c901 > cmp #1 ;test result - > trap_ne -1bb6 : d0fe > bne * ;failed not equal (non zero) - > -1bb8 : 68 > pla ;load status -1bb9 : 48 > pha - > cmp_flag fnv -1bba : c9f0 > cmp #(fnv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bbc : d0fe > bne * ;failed not equal (non zero) - > -1bbe : 28 > plp ;restore status - - - set_a $ff,$ff - > load_flag $ff -1bbf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1bc1 : 48 > pha ;use stack to load status -1bc2 : a9ff > lda #$ff ;precharge accu -1bc4 : 28 > plp - -1bc5 : 2416 bit zp1+3 ;00 - should set Z / clear NV - tst_a $ff,~fnv -1bc7 : 08 > php ;save flags -1bc8 : c9ff > cmp #$ff ;test result - > trap_ne -1bca : d0fe > bne * ;failed not equal (non zero) - > -1bcc : 68 > pla ;load status -1bcd : 48 > pha - > cmp_flag ~fnv -1bce : c93f > cmp #(~fnv |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bd0 : d0fe > bne * ;failed not equal (non zero) - > -1bd2 : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1bd3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1bd5 : 48 > pha ;use stack to load status -1bd6 : a901 > lda #1 ;precharge accu -1bd8 : 28 > plp - -1bd9 : 2415 bit zp1+2 ;41 - should set V (M6) / clear NZ - tst_a 1,~fnz -1bdb : 08 > php ;save flags -1bdc : c901 > cmp #1 ;test result - > trap_ne -1bde : d0fe > bne * ;failed not equal (non zero) - > -1be0 : 68 > pla ;load status -1be1 : 48 > pha - > cmp_flag ~fnz -1be2 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1be4 : d0fe > bne * ;failed not equal (non zero) - > -1be6 : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1be7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1be9 : 48 > pha ;use stack to load status -1bea : a901 > lda #1 ;precharge accu -1bec : 28 > plp - -1bed : 2414 bit zp1+1 ;82 - should set N (M7) & Z / clear V - tst_a 1,~fv -1bef : 08 > php ;save flags -1bf0 : c901 > cmp #1 ;test result - > trap_ne -1bf2 : d0fe > bne * ;failed not equal (non zero) - > -1bf4 : 68 > pla ;load status -1bf5 : 48 > pha - > cmp_flag ~fv -1bf6 : c9bf > cmp #(~fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bf8 : d0fe > bne * ;failed not equal (non zero) - > -1bfa : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1bfb : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1bfd : 48 > pha ;use stack to load status -1bfe : a901 > lda #1 ;precharge accu -1c00 : 28 > plp - -1c01 : 2413 bit zp1 ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,~fz -1c03 : 08 > php ;save flags -1c04 : c901 > cmp #1 ;test result - > trap_ne -1c06 : d0fe > bne * ;failed not equal (non zero) - > -1c08 : 68 > pla ;load status -1c09 : 48 > pha - > cmp_flag ~fz -1c0a : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c0c : d0fe > bne * ;failed not equal (non zero) - > -1c0e : 28 > plp ;restore status - - - set_a $ff,0 - > load_flag 0 -1c0f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c11 : 48 > pha ;use stack to load status -1c12 : a9ff > lda #$ff ;precharge accu -1c14 : 28 > plp - -1c15 : 2c1a02 bit abs1+3 ;00 - should set Z / clear NV - tst_a $ff,fz -1c18 : 08 > php ;save flags -1c19 : c9ff > cmp #$ff ;test result - > trap_ne -1c1b : d0fe > bne * ;failed not equal (non zero) - > -1c1d : 68 > pla ;load status -1c1e : 48 > pha - > cmp_flag fz -1c1f : c932 > cmp #(fz |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c21 : d0fe > bne * ;failed not equal (non zero) - > -1c23 : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1c24 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c26 : 48 > pha ;use stack to load status -1c27 : a901 > lda #1 ;precharge accu -1c29 : 28 > plp - -1c2a : 2c1902 bit abs1+2 ;41 - should set V (M6) / clear NZ - tst_a 1,fv -1c2d : 08 > php ;save flags -1c2e : c901 > cmp #1 ;test result - > trap_ne -1c30 : d0fe > bne * ;failed not equal (non zero) - > -1c32 : 68 > pla ;load status -1c33 : 48 > pha - > cmp_flag fv -1c34 : c970 > cmp #(fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c36 : d0fe > bne * ;failed not equal (non zero) - > -1c38 : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1c39 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c3b : 48 > pha ;use stack to load status -1c3c : a901 > lda #1 ;precharge accu -1c3e : 28 > plp - -1c3f : 2c1802 bit abs1+1 ;82 - should set N (M7) & Z / clear V - tst_a 1,fnz -1c42 : 08 > php ;save flags -1c43 : c901 > cmp #1 ;test result - > trap_ne -1c45 : d0fe > bne * ;failed not equal (non zero) - > -1c47 : 68 > pla ;load status -1c48 : 48 > pha - > cmp_flag fnz -1c49 : c9b2 > cmp #(fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c4b : d0fe > bne * ;failed not equal (non zero) - > -1c4d : 28 > plp ;restore status - - set_a 1,0 - > load_flag 0 -1c4e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c50 : 48 > pha ;use stack to load status -1c51 : a901 > lda #1 ;precharge accu -1c53 : 28 > plp - -1c54 : 2c1702 bit abs1 ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,fnv -1c57 : 08 > php ;save flags -1c58 : c901 > cmp #1 ;test result - > trap_ne -1c5a : d0fe > bne * ;failed not equal (non zero) - > -1c5c : 68 > pla ;load status -1c5d : 48 > pha - > cmp_flag fnv -1c5e : c9f0 > cmp #(fnv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c60 : d0fe > bne * ;failed not equal (non zero) - > -1c62 : 28 > plp ;restore status - - - set_a $ff,$ff - > load_flag $ff -1c63 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c65 : 48 > pha ;use stack to load status -1c66 : a9ff > lda #$ff ;precharge accu -1c68 : 28 > plp - -1c69 : 2c1a02 bit abs1+3 ;00 - should set Z / clear NV - tst_a $ff,~fnv -1c6c : 08 > php ;save flags -1c6d : c9ff > cmp #$ff ;test result - > trap_ne -1c6f : d0fe > bne * ;failed not equal (non zero) - > -1c71 : 68 > pla ;load status -1c72 : 48 > pha - > cmp_flag ~fnv -1c73 : c93f > cmp #(~fnv |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c75 : d0fe > bne * ;failed not equal (non zero) - > -1c77 : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1c78 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c7a : 48 > pha ;use stack to load status -1c7b : a901 > lda #1 ;precharge accu -1c7d : 28 > plp - -1c7e : 2c1902 bit abs1+2 ;41 - should set V (M6) / clear NZ - tst_a 1,~fnz -1c81 : 08 > php ;save flags -1c82 : c901 > cmp #1 ;test result - > trap_ne -1c84 : d0fe > bne * ;failed not equal (non zero) - > -1c86 : 68 > pla ;load status -1c87 : 48 > pha - > cmp_flag ~fnz -1c88 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c8a : d0fe > bne * ;failed not equal (non zero) - > -1c8c : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1c8d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c8f : 48 > pha ;use stack to load status -1c90 : a901 > lda #1 ;precharge accu -1c92 : 28 > plp - -1c93 : 2c1802 bit abs1+1 ;82 - should set N (M7) & Z / clear V - tst_a 1,~fv -1c96 : 08 > php ;save flags -1c97 : c901 > cmp #1 ;test result - > trap_ne -1c99 : d0fe > bne * ;failed not equal (non zero) - > -1c9b : 68 > pla ;load status -1c9c : 48 > pha - > cmp_flag ~fv -1c9d : c9bf > cmp #(~fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c9f : d0fe > bne * ;failed not equal (non zero) - > -1ca1 : 28 > plp ;restore status - - set_a 1,$ff - > load_flag $ff -1ca2 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1ca4 : 48 > pha ;use stack to load status -1ca5 : a901 > lda #1 ;precharge accu -1ca7 : 28 > plp - -1ca8 : 2c1702 bit abs1 ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,~fz -1cab : 08 > php ;save flags -1cac : c901 > cmp #1 ;test result - > trap_ne -1cae : d0fe > bne * ;failed not equal (non zero) - > -1cb0 : 68 > pla ;load status -1cb1 : 48 > pha - > cmp_flag ~fz -1cb2 : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cb4 : d0fe > bne * ;failed not equal (non zero) - > -1cb6 : 28 > plp ;restore status - - next_test -1cb7 : ad0002 > lda test_case ;previous test -1cba : c919 > cmp #test_num - > trap_ne ;test is out of sequence -1cbc : d0fe > bne * ;failed not equal (non zero) - > -001a = >test_num = test_num + 1 -1cbe : a91a > lda #test_num ;*** next tests' number -1cc0 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; CPX - zp / abs / # - set_x $80,0 - > load_flag 0 -1cc3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1cc5 : 48 > pha ;use stack to load status -1cc6 : a280 > ldx #$80 ;precharge index x -1cc8 : 28 > plp - -1cc9 : e417 cpx zp7f - tst_stat fc -1ccb : 08 > php ;save status -1ccc : 68 > pla ;use stack to retrieve status -1ccd : 48 > pha - > cmp_flag fc -1cce : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cd0 : d0fe > bne * ;failed not equal (non zero) - > -1cd2 : 28 > plp ;restore status - -1cd3 : ca dex -1cd4 : e417 cpx zp7f - tst_stat fzc -1cd6 : 08 > php ;save status -1cd7 : 68 > pla ;use stack to retrieve status -1cd8 : 48 > pha - > cmp_flag fzc -1cd9 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cdb : d0fe > bne * ;failed not equal (non zero) - > -1cdd : 28 > plp ;restore status - -1cde : ca dex -1cdf : e417 cpx zp7f - tst_x $7e,fn -1ce1 : 08 > php ;save flags -1ce2 : e07e > cpx #$7e ;test result - > trap_ne -1ce4 : d0fe > bne * ;failed not equal (non zero) - > -1ce6 : 68 > pla ;load status -1ce7 : 48 > pha - > cmp_flag fn -1ce8 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cea : d0fe > bne * ;failed not equal (non zero) - > -1cec : 28 > plp ;restore status - - set_x $80,$ff - > load_flag $ff -1ced : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1cef : 48 > pha ;use stack to load status -1cf0 : a280 > ldx #$80 ;precharge index x -1cf2 : 28 > plp - -1cf3 : e417 cpx zp7f - tst_stat ~fnz -1cf5 : 08 > php ;save status -1cf6 : 68 > pla ;use stack to retrieve status -1cf7 : 48 > pha - > cmp_flag ~fnz -1cf8 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cfa : d0fe > bne * ;failed not equal (non zero) - > -1cfc : 28 > plp ;restore status - -1cfd : ca dex -1cfe : e417 cpx zp7f - tst_stat ~fn -1d00 : 08 > php ;save status -1d01 : 68 > pla ;use stack to retrieve status -1d02 : 48 > pha - > cmp_flag ~fn -1d03 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d05 : d0fe > bne * ;failed not equal (non zero) - > -1d07 : 28 > plp ;restore status - -1d08 : ca dex -1d09 : e417 cpx zp7f - tst_x $7e,~fzc -1d0b : 08 > php ;save flags -1d0c : e07e > cpx #$7e ;test result - > trap_ne -1d0e : d0fe > bne * ;failed not equal (non zero) - > -1d10 : 68 > pla ;load status -1d11 : 48 > pha - > cmp_flag ~fzc -1d12 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d14 : d0fe > bne * ;failed not equal (non zero) - > -1d16 : 28 > plp ;restore status - - - set_x $80,0 - > load_flag 0 -1d17 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1d19 : 48 > pha ;use stack to load status -1d1a : a280 > ldx #$80 ;precharge index x -1d1c : 28 > plp - -1d1d : ec1b02 cpx abs7f - tst_stat fc -1d20 : 08 > php ;save status -1d21 : 68 > pla ;use stack to retrieve status -1d22 : 48 > pha - > cmp_flag fc -1d23 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d25 : d0fe > bne * ;failed not equal (non zero) - > -1d27 : 28 > plp ;restore status - -1d28 : ca dex -1d29 : ec1b02 cpx abs7f - tst_stat fzc -1d2c : 08 > php ;save status -1d2d : 68 > pla ;use stack to retrieve status -1d2e : 48 > pha - > cmp_flag fzc -1d2f : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d31 : d0fe > bne * ;failed not equal (non zero) - > -1d33 : 28 > plp ;restore status - -1d34 : ca dex -1d35 : ec1b02 cpx abs7f - tst_x $7e,fn -1d38 : 08 > php ;save flags -1d39 : e07e > cpx #$7e ;test result - > trap_ne -1d3b : d0fe > bne * ;failed not equal (non zero) - > -1d3d : 68 > pla ;load status -1d3e : 48 > pha - > cmp_flag fn -1d3f : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d41 : d0fe > bne * ;failed not equal (non zero) - > -1d43 : 28 > plp ;restore status - - set_x $80,$ff - > load_flag $ff -1d44 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1d46 : 48 > pha ;use stack to load status -1d47 : a280 > ldx #$80 ;precharge index x -1d49 : 28 > plp - -1d4a : ec1b02 cpx abs7f - tst_stat ~fnz -1d4d : 08 > php ;save status -1d4e : 68 > pla ;use stack to retrieve status -1d4f : 48 > pha - > cmp_flag ~fnz -1d50 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d52 : d0fe > bne * ;failed not equal (non zero) - > -1d54 : 28 > plp ;restore status - -1d55 : ca dex -1d56 : ec1b02 cpx abs7f - tst_stat ~fn -1d59 : 08 > php ;save status -1d5a : 68 > pla ;use stack to retrieve status -1d5b : 48 > pha - > cmp_flag ~fn -1d5c : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d5e : d0fe > bne * ;failed not equal (non zero) - > -1d60 : 28 > plp ;restore status - -1d61 : ca dex -1d62 : ec1b02 cpx abs7f - tst_x $7e,~fzc -1d65 : 08 > php ;save flags -1d66 : e07e > cpx #$7e ;test result - > trap_ne -1d68 : d0fe > bne * ;failed not equal (non zero) - > -1d6a : 68 > pla ;load status -1d6b : 48 > pha - > cmp_flag ~fzc -1d6c : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d6e : d0fe > bne * ;failed not equal (non zero) - > -1d70 : 28 > plp ;restore status - - - set_x $80,0 - > load_flag 0 -1d71 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1d73 : 48 > pha ;use stack to load status -1d74 : a280 > ldx #$80 ;precharge index x -1d76 : 28 > plp - -1d77 : e07f cpx #$7f - tst_stat fc -1d79 : 08 > php ;save status -1d7a : 68 > pla ;use stack to retrieve status -1d7b : 48 > pha - > cmp_flag fc -1d7c : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d7e : d0fe > bne * ;failed not equal (non zero) - > -1d80 : 28 > plp ;restore status - -1d81 : ca dex -1d82 : e07f cpx #$7f - tst_stat fzc -1d84 : 08 > php ;save status -1d85 : 68 > pla ;use stack to retrieve status -1d86 : 48 > pha - > cmp_flag fzc -1d87 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d89 : d0fe > bne * ;failed not equal (non zero) - > -1d8b : 28 > plp ;restore status - -1d8c : ca dex -1d8d : e07f cpx #$7f - tst_x $7e,fn -1d8f : 08 > php ;save flags -1d90 : e07e > cpx #$7e ;test result - > trap_ne -1d92 : d0fe > bne * ;failed not equal (non zero) - > -1d94 : 68 > pla ;load status -1d95 : 48 > pha - > cmp_flag fn -1d96 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1d98 : d0fe > bne * ;failed not equal (non zero) - > -1d9a : 28 > plp ;restore status - - set_x $80,$ff - > load_flag $ff -1d9b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1d9d : 48 > pha ;use stack to load status -1d9e : a280 > ldx #$80 ;precharge index x -1da0 : 28 > plp - -1da1 : e07f cpx #$7f - tst_stat ~fnz -1da3 : 08 > php ;save status -1da4 : 68 > pla ;use stack to retrieve status -1da5 : 48 > pha - > cmp_flag ~fnz -1da6 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1da8 : d0fe > bne * ;failed not equal (non zero) - > -1daa : 28 > plp ;restore status - -1dab : ca dex -1dac : e07f cpx #$7f - tst_stat ~fn -1dae : 08 > php ;save status -1daf : 68 > pla ;use stack to retrieve status -1db0 : 48 > pha - > cmp_flag ~fn -1db1 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1db3 : d0fe > bne * ;failed not equal (non zero) - > -1db5 : 28 > plp ;restore status - -1db6 : ca dex -1db7 : e07f cpx #$7f - tst_x $7e,~fzc -1db9 : 08 > php ;save flags -1dba : e07e > cpx #$7e ;test result - > trap_ne -1dbc : d0fe > bne * ;failed not equal (non zero) - > -1dbe : 68 > pla ;load status -1dbf : 48 > pha - > cmp_flag ~fzc -1dc0 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1dc2 : d0fe > bne * ;failed not equal (non zero) - > -1dc4 : 28 > plp ;restore status - - next_test -1dc5 : ad0002 > lda test_case ;previous test -1dc8 : c91a > cmp #test_num - > trap_ne ;test is out of sequence -1dca : d0fe > bne * ;failed not equal (non zero) - > -001b = >test_num = test_num + 1 -1dcc : a91b > lda #test_num ;*** next tests' number -1dce : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; CPY - zp / abs / # - set_y $80,0 - > load_flag 0 -1dd1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1dd3 : 48 > pha ;use stack to load status -1dd4 : a080 > ldy #$80 ;precharge index y -1dd6 : 28 > plp - -1dd7 : c417 cpy zp7f - tst_stat fc -1dd9 : 08 > php ;save status -1dda : 68 > pla ;use stack to retrieve status -1ddb : 48 > pha - > cmp_flag fc -1ddc : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1dde : d0fe > bne * ;failed not equal (non zero) - > -1de0 : 28 > plp ;restore status - -1de1 : 88 dey -1de2 : c417 cpy zp7f - tst_stat fzc -1de4 : 08 > php ;save status -1de5 : 68 > pla ;use stack to retrieve status -1de6 : 48 > pha - > cmp_flag fzc -1de7 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1de9 : d0fe > bne * ;failed not equal (non zero) - > -1deb : 28 > plp ;restore status - -1dec : 88 dey -1ded : c417 cpy zp7f - tst_y $7e,fn -1def : 08 > php ;save flags -1df0 : c07e > cpy #$7e ;test result - > trap_ne -1df2 : d0fe > bne * ;failed not equal (non zero) - > -1df4 : 68 > pla ;load status -1df5 : 48 > pha - > cmp_flag fn -1df6 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1df8 : d0fe > bne * ;failed not equal (non zero) - > -1dfa : 28 > plp ;restore status - - set_y $80,$ff - > load_flag $ff -1dfb : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1dfd : 48 > pha ;use stack to load status -1dfe : a080 > ldy #$80 ;precharge index y -1e00 : 28 > plp - -1e01 : c417 cpy zp7f - tst_stat ~fnz -1e03 : 08 > php ;save status -1e04 : 68 > pla ;use stack to retrieve status -1e05 : 48 > pha - > cmp_flag ~fnz -1e06 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e08 : d0fe > bne * ;failed not equal (non zero) - > -1e0a : 28 > plp ;restore status - -1e0b : 88 dey -1e0c : c417 cpy zp7f - tst_stat ~fn -1e0e : 08 > php ;save status -1e0f : 68 > pla ;use stack to retrieve status -1e10 : 48 > pha - > cmp_flag ~fn -1e11 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e13 : d0fe > bne * ;failed not equal (non zero) - > -1e15 : 28 > plp ;restore status - -1e16 : 88 dey -1e17 : c417 cpy zp7f - tst_y $7e,~fzc -1e19 : 08 > php ;save flags -1e1a : c07e > cpy #$7e ;test result - > trap_ne -1e1c : d0fe > bne * ;failed not equal (non zero) - > -1e1e : 68 > pla ;load status -1e1f : 48 > pha - > cmp_flag ~fzc -1e20 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e22 : d0fe > bne * ;failed not equal (non zero) - > -1e24 : 28 > plp ;restore status - - - set_y $80,0 - > load_flag 0 -1e25 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1e27 : 48 > pha ;use stack to load status -1e28 : a080 > ldy #$80 ;precharge index y -1e2a : 28 > plp - -1e2b : cc1b02 cpy abs7f - tst_stat fc -1e2e : 08 > php ;save status -1e2f : 68 > pla ;use stack to retrieve status -1e30 : 48 > pha - > cmp_flag fc -1e31 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e33 : d0fe > bne * ;failed not equal (non zero) - > -1e35 : 28 > plp ;restore status - -1e36 : 88 dey -1e37 : cc1b02 cpy abs7f - tst_stat fzc -1e3a : 08 > php ;save status -1e3b : 68 > pla ;use stack to retrieve status -1e3c : 48 > pha - > cmp_flag fzc -1e3d : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e3f : d0fe > bne * ;failed not equal (non zero) - > -1e41 : 28 > plp ;restore status - -1e42 : 88 dey -1e43 : cc1b02 cpy abs7f - tst_y $7e,fn -1e46 : 08 > php ;save flags -1e47 : c07e > cpy #$7e ;test result - > trap_ne -1e49 : d0fe > bne * ;failed not equal (non zero) - > -1e4b : 68 > pla ;load status -1e4c : 48 > pha - > cmp_flag fn -1e4d : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e4f : d0fe > bne * ;failed not equal (non zero) - > -1e51 : 28 > plp ;restore status - - set_y $80,$ff - > load_flag $ff -1e52 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1e54 : 48 > pha ;use stack to load status -1e55 : a080 > ldy #$80 ;precharge index y -1e57 : 28 > plp - -1e58 : cc1b02 cpy abs7f - tst_stat ~fnz -1e5b : 08 > php ;save status -1e5c : 68 > pla ;use stack to retrieve status -1e5d : 48 > pha - > cmp_flag ~fnz -1e5e : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e60 : d0fe > bne * ;failed not equal (non zero) - > -1e62 : 28 > plp ;restore status - -1e63 : 88 dey -1e64 : cc1b02 cpy abs7f - tst_stat ~fn -1e67 : 08 > php ;save status -1e68 : 68 > pla ;use stack to retrieve status -1e69 : 48 > pha - > cmp_flag ~fn -1e6a : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e6c : d0fe > bne * ;failed not equal (non zero) - > -1e6e : 28 > plp ;restore status - -1e6f : 88 dey -1e70 : cc1b02 cpy abs7f - tst_y $7e,~fzc -1e73 : 08 > php ;save flags -1e74 : c07e > cpy #$7e ;test result - > trap_ne -1e76 : d0fe > bne * ;failed not equal (non zero) - > -1e78 : 68 > pla ;load status -1e79 : 48 > pha - > cmp_flag ~fzc -1e7a : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e7c : d0fe > bne * ;failed not equal (non zero) - > -1e7e : 28 > plp ;restore status - - - set_y $80,0 - > load_flag 0 -1e7f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1e81 : 48 > pha ;use stack to load status -1e82 : a080 > ldy #$80 ;precharge index y -1e84 : 28 > plp - -1e85 : c07f cpy #$7f - tst_stat fc -1e87 : 08 > php ;save status -1e88 : 68 > pla ;use stack to retrieve status -1e89 : 48 > pha - > cmp_flag fc -1e8a : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e8c : d0fe > bne * ;failed not equal (non zero) - > -1e8e : 28 > plp ;restore status - -1e8f : 88 dey -1e90 : c07f cpy #$7f - tst_stat fzc -1e92 : 08 > php ;save status -1e93 : 68 > pla ;use stack to retrieve status -1e94 : 48 > pha - > cmp_flag fzc -1e95 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e97 : d0fe > bne * ;failed not equal (non zero) - > -1e99 : 28 > plp ;restore status - -1e9a : 88 dey -1e9b : c07f cpy #$7f - tst_y $7e,fn -1e9d : 08 > php ;save flags -1e9e : c07e > cpy #$7e ;test result - > trap_ne -1ea0 : d0fe > bne * ;failed not equal (non zero) - > -1ea2 : 68 > pla ;load status -1ea3 : 48 > pha - > cmp_flag fn -1ea4 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ea6 : d0fe > bne * ;failed not equal (non zero) - > -1ea8 : 28 > plp ;restore status - - set_y $80,$ff - > load_flag $ff -1ea9 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1eab : 48 > pha ;use stack to load status -1eac : a080 > ldy #$80 ;precharge index y -1eae : 28 > plp - -1eaf : c07f cpy #$7f - tst_stat ~fnz -1eb1 : 08 > php ;save status -1eb2 : 68 > pla ;use stack to retrieve status -1eb3 : 48 > pha - > cmp_flag ~fnz -1eb4 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1eb6 : d0fe > bne * ;failed not equal (non zero) - > -1eb8 : 28 > plp ;restore status - -1eb9 : 88 dey -1eba : c07f cpy #$7f - tst_stat ~fn -1ebc : 08 > php ;save status -1ebd : 68 > pla ;use stack to retrieve status -1ebe : 48 > pha - > cmp_flag ~fn -1ebf : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ec1 : d0fe > bne * ;failed not equal (non zero) - > -1ec3 : 28 > plp ;restore status - -1ec4 : 88 dey -1ec5 : c07f cpy #$7f - tst_y $7e,~fzc -1ec7 : 08 > php ;save flags -1ec8 : c07e > cpy #$7e ;test result - > trap_ne -1eca : d0fe > bne * ;failed not equal (non zero) - > -1ecc : 68 > pla ;load status -1ecd : 48 > pha - > cmp_flag ~fzc -1ece : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ed0 : d0fe > bne * ;failed not equal (non zero) - > -1ed2 : 28 > plp ;restore status - - next_test -1ed3 : ad0002 > lda test_case ;previous test -1ed6 : c91b > cmp #test_num - > trap_ne ;test is out of sequence -1ed8 : d0fe > bne * ;failed not equal (non zero) - > -001c = >test_num = test_num + 1 -1eda : a91c > lda #test_num ;*** next tests' number -1edc : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; CMP - zp / abs / # - set_a $80,0 - > load_flag 0 -1edf : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1ee1 : 48 > pha ;use stack to load status -1ee2 : a980 > lda #$80 ;precharge accu -1ee4 : 28 > plp - -1ee5 : c517 cmp zp7f - tst_a $80,fc -1ee7 : 08 > php ;save flags -1ee8 : c980 > cmp #$80 ;test result - > trap_ne -1eea : d0fe > bne * ;failed not equal (non zero) - > -1eec : 68 > pla ;load status -1eed : 48 > pha - > cmp_flag fc -1eee : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ef0 : d0fe > bne * ;failed not equal (non zero) - > -1ef2 : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -1ef3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1ef5 : 48 > pha ;use stack to load status -1ef6 : a97f > lda #$7f ;precharge accu -1ef8 : 28 > plp - -1ef9 : c517 cmp zp7f - tst_a $7f,fzc -1efb : 08 > php ;save flags -1efc : c97f > cmp #$7f ;test result - > trap_ne -1efe : d0fe > bne * ;failed not equal (non zero) - > -1f00 : 68 > pla ;load status -1f01 : 48 > pha - > cmp_flag fzc -1f02 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f04 : d0fe > bne * ;failed not equal (non zero) - > -1f06 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -1f07 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f09 : 48 > pha ;use stack to load status -1f0a : a97e > lda #$7e ;precharge accu -1f0c : 28 > plp - -1f0d : c517 cmp zp7f - tst_a $7e,fn -1f0f : 08 > php ;save flags -1f10 : c97e > cmp #$7e ;test result - > trap_ne -1f12 : d0fe > bne * ;failed not equal (non zero) - > -1f14 : 68 > pla ;load status -1f15 : 48 > pha - > cmp_flag fn -1f16 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f18 : d0fe > bne * ;failed not equal (non zero) - > -1f1a : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -1f1b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f1d : 48 > pha ;use stack to load status -1f1e : a980 > lda #$80 ;precharge accu -1f20 : 28 > plp - -1f21 : c517 cmp zp7f - tst_a $80,~fnz -1f23 : 08 > php ;save flags -1f24 : c980 > cmp #$80 ;test result - > trap_ne -1f26 : d0fe > bne * ;failed not equal (non zero) - > -1f28 : 68 > pla ;load status -1f29 : 48 > pha - > cmp_flag ~fnz -1f2a : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f2c : d0fe > bne * ;failed not equal (non zero) - > -1f2e : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -1f2f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f31 : 48 > pha ;use stack to load status -1f32 : a97f > lda #$7f ;precharge accu -1f34 : 28 > plp - -1f35 : c517 cmp zp7f - tst_a $7f,~fn -1f37 : 08 > php ;save flags -1f38 : c97f > cmp #$7f ;test result - > trap_ne -1f3a : d0fe > bne * ;failed not equal (non zero) - > -1f3c : 68 > pla ;load status -1f3d : 48 > pha - > cmp_flag ~fn -1f3e : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f40 : d0fe > bne * ;failed not equal (non zero) - > -1f42 : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -1f43 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f45 : 48 > pha ;use stack to load status -1f46 : a97e > lda #$7e ;precharge accu -1f48 : 28 > plp - -1f49 : c517 cmp zp7f - tst_a $7e,~fzc -1f4b : 08 > php ;save flags -1f4c : c97e > cmp #$7e ;test result - > trap_ne -1f4e : d0fe > bne * ;failed not equal (non zero) - > -1f50 : 68 > pla ;load status -1f51 : 48 > pha - > cmp_flag ~fzc -1f52 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f54 : d0fe > bne * ;failed not equal (non zero) - > -1f56 : 28 > plp ;restore status - - - set_a $80,0 - > load_flag 0 -1f57 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f59 : 48 > pha ;use stack to load status -1f5a : a980 > lda #$80 ;precharge accu -1f5c : 28 > plp - -1f5d : cd1b02 cmp abs7f - tst_a $80,fc -1f60 : 08 > php ;save flags -1f61 : c980 > cmp #$80 ;test result - > trap_ne -1f63 : d0fe > bne * ;failed not equal (non zero) - > -1f65 : 68 > pla ;load status -1f66 : 48 > pha - > cmp_flag fc -1f67 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f69 : d0fe > bne * ;failed not equal (non zero) - > -1f6b : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -1f6c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f6e : 48 > pha ;use stack to load status -1f6f : a97f > lda #$7f ;precharge accu -1f71 : 28 > plp - -1f72 : cd1b02 cmp abs7f - tst_a $7f,fzc -1f75 : 08 > php ;save flags -1f76 : c97f > cmp #$7f ;test result - > trap_ne -1f78 : d0fe > bne * ;failed not equal (non zero) - > -1f7a : 68 > pla ;load status -1f7b : 48 > pha - > cmp_flag fzc -1f7c : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f7e : d0fe > bne * ;failed not equal (non zero) - > -1f80 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -1f81 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f83 : 48 > pha ;use stack to load status -1f84 : a97e > lda #$7e ;precharge accu -1f86 : 28 > plp - -1f87 : cd1b02 cmp abs7f - tst_a $7e,fn -1f8a : 08 > php ;save flags -1f8b : c97e > cmp #$7e ;test result - > trap_ne -1f8d : d0fe > bne * ;failed not equal (non zero) - > -1f8f : 68 > pla ;load status -1f90 : 48 > pha - > cmp_flag fn -1f91 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f93 : d0fe > bne * ;failed not equal (non zero) - > -1f95 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -1f96 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f98 : 48 > pha ;use stack to load status -1f99 : a980 > lda #$80 ;precharge accu -1f9b : 28 > plp - -1f9c : cd1b02 cmp abs7f - tst_a $80,~fnz -1f9f : 08 > php ;save flags -1fa0 : c980 > cmp #$80 ;test result - > trap_ne -1fa2 : d0fe > bne * ;failed not equal (non zero) - > -1fa4 : 68 > pla ;load status -1fa5 : 48 > pha - > cmp_flag ~fnz -1fa6 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fa8 : d0fe > bne * ;failed not equal (non zero) - > -1faa : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -1fab : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1fad : 48 > pha ;use stack to load status -1fae : a97f > lda #$7f ;precharge accu -1fb0 : 28 > plp - -1fb1 : cd1b02 cmp abs7f - tst_a $7f,~fn -1fb4 : 08 > php ;save flags -1fb5 : c97f > cmp #$7f ;test result - > trap_ne -1fb7 : d0fe > bne * ;failed not equal (non zero) - > -1fb9 : 68 > pla ;load status -1fba : 48 > pha - > cmp_flag ~fn -1fbb : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fbd : d0fe > bne * ;failed not equal (non zero) - > -1fbf : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -1fc0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1fc2 : 48 > pha ;use stack to load status -1fc3 : a97e > lda #$7e ;precharge accu -1fc5 : 28 > plp - -1fc6 : cd1b02 cmp abs7f - tst_a $7e,~fzc -1fc9 : 08 > php ;save flags -1fca : c97e > cmp #$7e ;test result - > trap_ne -1fcc : d0fe > bne * ;failed not equal (non zero) - > -1fce : 68 > pla ;load status -1fcf : 48 > pha - > cmp_flag ~fzc -1fd0 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fd2 : d0fe > bne * ;failed not equal (non zero) - > -1fd4 : 28 > plp ;restore status - - - set_a $80,0 - > load_flag 0 -1fd5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1fd7 : 48 > pha ;use stack to load status -1fd8 : a980 > lda #$80 ;precharge accu -1fda : 28 > plp - -1fdb : c97f cmp #$7f - tst_a $80,fc -1fdd : 08 > php ;save flags -1fde : c980 > cmp #$80 ;test result - > trap_ne -1fe0 : d0fe > bne * ;failed not equal (non zero) - > -1fe2 : 68 > pla ;load status -1fe3 : 48 > pha - > cmp_flag fc -1fe4 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fe6 : d0fe > bne * ;failed not equal (non zero) - > -1fe8 : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -1fe9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1feb : 48 > pha ;use stack to load status -1fec : a97f > lda #$7f ;precharge accu -1fee : 28 > plp - -1fef : c97f cmp #$7f - tst_a $7f,fzc -1ff1 : 08 > php ;save flags -1ff2 : c97f > cmp #$7f ;test result - > trap_ne -1ff4 : d0fe > bne * ;failed not equal (non zero) - > -1ff6 : 68 > pla ;load status -1ff7 : 48 > pha - > cmp_flag fzc -1ff8 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ffa : d0fe > bne * ;failed not equal (non zero) - > -1ffc : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -1ffd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1fff : 48 > pha ;use stack to load status -2000 : a97e > lda #$7e ;precharge accu -2002 : 28 > plp - -2003 : c97f cmp #$7f - tst_a $7e,fn -2005 : 08 > php ;save flags -2006 : c97e > cmp #$7e ;test result - > trap_ne -2008 : d0fe > bne * ;failed not equal (non zero) - > -200a : 68 > pla ;load status -200b : 48 > pha - > cmp_flag fn -200c : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -200e : d0fe > bne * ;failed not equal (non zero) - > -2010 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -2011 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2013 : 48 > pha ;use stack to load status -2014 : a980 > lda #$80 ;precharge accu -2016 : 28 > plp - -2017 : c97f cmp #$7f - tst_a $80,~fnz -2019 : 08 > php ;save flags -201a : c980 > cmp #$80 ;test result - > trap_ne -201c : d0fe > bne * ;failed not equal (non zero) - > -201e : 68 > pla ;load status -201f : 48 > pha - > cmp_flag ~fnz -2020 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2022 : d0fe > bne * ;failed not equal (non zero) - > -2024 : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -2025 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2027 : 48 > pha ;use stack to load status -2028 : a97f > lda #$7f ;precharge accu -202a : 28 > plp - -202b : c97f cmp #$7f - tst_a $7f,~fn -202d : 08 > php ;save flags -202e : c97f > cmp #$7f ;test result - > trap_ne -2030 : d0fe > bne * ;failed not equal (non zero) - > -2032 : 68 > pla ;load status -2033 : 48 > pha - > cmp_flag ~fn -2034 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2036 : d0fe > bne * ;failed not equal (non zero) - > -2038 : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -2039 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -203b : 48 > pha ;use stack to load status -203c : a97e > lda #$7e ;precharge accu -203e : 28 > plp - -203f : c97f cmp #$7f - tst_a $7e,~fzc -2041 : 08 > php ;save flags -2042 : c97e > cmp #$7e ;test result - > trap_ne -2044 : d0fe > bne * ;failed not equal (non zero) - > -2046 : 68 > pla ;load status -2047 : 48 > pha - > cmp_flag ~fzc -2048 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -204a : d0fe > bne * ;failed not equal (non zero) - > -204c : 28 > plp ;restore status - - -204d : a204 ldx #4 ;with indexing by X - set_a $80,0 - > load_flag 0 -204f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2051 : 48 > pha ;use stack to load status -2052 : a980 > lda #$80 ;precharge accu -2054 : 28 > plp - -2055 : d513 cmp zp1,x - tst_a $80,fc -2057 : 08 > php ;save flags -2058 : c980 > cmp #$80 ;test result - > trap_ne -205a : d0fe > bne * ;failed not equal (non zero) - > -205c : 68 > pla ;load status -205d : 48 > pha - > cmp_flag fc -205e : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2060 : d0fe > bne * ;failed not equal (non zero) - > -2062 : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -2063 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2065 : 48 > pha ;use stack to load status -2066 : a97f > lda #$7f ;precharge accu -2068 : 28 > plp - -2069 : d513 cmp zp1,x - tst_a $7f,fzc -206b : 08 > php ;save flags -206c : c97f > cmp #$7f ;test result - > trap_ne -206e : d0fe > bne * ;failed not equal (non zero) - > -2070 : 68 > pla ;load status -2071 : 48 > pha - > cmp_flag fzc -2072 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2074 : d0fe > bne * ;failed not equal (non zero) - > -2076 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -2077 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2079 : 48 > pha ;use stack to load status -207a : a97e > lda #$7e ;precharge accu -207c : 28 > plp - -207d : d513 cmp zp1,x - tst_a $7e,fn -207f : 08 > php ;save flags -2080 : c97e > cmp #$7e ;test result - > trap_ne -2082 : d0fe > bne * ;failed not equal (non zero) - > -2084 : 68 > pla ;load status -2085 : 48 > pha - > cmp_flag fn -2086 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2088 : d0fe > bne * ;failed not equal (non zero) - > -208a : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -208b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -208d : 48 > pha ;use stack to load status -208e : a980 > lda #$80 ;precharge accu -2090 : 28 > plp - -2091 : d513 cmp zp1,x - tst_a $80,~fnz -2093 : 08 > php ;save flags -2094 : c980 > cmp #$80 ;test result - > trap_ne -2096 : d0fe > bne * ;failed not equal (non zero) - > -2098 : 68 > pla ;load status -2099 : 48 > pha - > cmp_flag ~fnz -209a : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -209c : d0fe > bne * ;failed not equal (non zero) - > -209e : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -209f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -20a1 : 48 > pha ;use stack to load status -20a2 : a97f > lda #$7f ;precharge accu -20a4 : 28 > plp - -20a5 : d513 cmp zp1,x - tst_a $7f,~fn -20a7 : 08 > php ;save flags -20a8 : c97f > cmp #$7f ;test result - > trap_ne -20aa : d0fe > bne * ;failed not equal (non zero) - > -20ac : 68 > pla ;load status -20ad : 48 > pha - > cmp_flag ~fn -20ae : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20b0 : d0fe > bne * ;failed not equal (non zero) - > -20b2 : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -20b3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -20b5 : 48 > pha ;use stack to load status -20b6 : a97e > lda #$7e ;precharge accu -20b8 : 28 > plp - -20b9 : d513 cmp zp1,x - tst_a $7e,~fzc -20bb : 08 > php ;save flags -20bc : c97e > cmp #$7e ;test result - > trap_ne -20be : d0fe > bne * ;failed not equal (non zero) - > -20c0 : 68 > pla ;load status -20c1 : 48 > pha - > cmp_flag ~fzc -20c2 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20c4 : d0fe > bne * ;failed not equal (non zero) - > -20c6 : 28 > plp ;restore status - - - set_a $80,0 - > load_flag 0 -20c7 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -20c9 : 48 > pha ;use stack to load status -20ca : a980 > lda #$80 ;precharge accu -20cc : 28 > plp - -20cd : dd1702 cmp abs1,x - tst_a $80,fc -20d0 : 08 > php ;save flags -20d1 : c980 > cmp #$80 ;test result - > trap_ne -20d3 : d0fe > bne * ;failed not equal (non zero) - > -20d5 : 68 > pla ;load status -20d6 : 48 > pha - > cmp_flag fc -20d7 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20d9 : d0fe > bne * ;failed not equal (non zero) - > -20db : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -20dc : a900 > lda #0 ;allow test to change I-flag (no mask) - > -20de : 48 > pha ;use stack to load status -20df : a97f > lda #$7f ;precharge accu -20e1 : 28 > plp - -20e2 : dd1702 cmp abs1,x - tst_a $7f,fzc -20e5 : 08 > php ;save flags -20e6 : c97f > cmp #$7f ;test result - > trap_ne -20e8 : d0fe > bne * ;failed not equal (non zero) - > -20ea : 68 > pla ;load status -20eb : 48 > pha - > cmp_flag fzc -20ec : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20ee : d0fe > bne * ;failed not equal (non zero) - > -20f0 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -20f1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -20f3 : 48 > pha ;use stack to load status -20f4 : a97e > lda #$7e ;precharge accu -20f6 : 28 > plp - -20f7 : dd1702 cmp abs1,x - tst_a $7e,fn -20fa : 08 > php ;save flags -20fb : c97e > cmp #$7e ;test result - > trap_ne -20fd : d0fe > bne * ;failed not equal (non zero) - > -20ff : 68 > pla ;load status -2100 : 48 > pha - > cmp_flag fn -2101 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2103 : d0fe > bne * ;failed not equal (non zero) - > -2105 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -2106 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2108 : 48 > pha ;use stack to load status -2109 : a980 > lda #$80 ;precharge accu -210b : 28 > plp - -210c : dd1702 cmp abs1,x - tst_a $80,~fnz -210f : 08 > php ;save flags -2110 : c980 > cmp #$80 ;test result - > trap_ne -2112 : d0fe > bne * ;failed not equal (non zero) - > -2114 : 68 > pla ;load status -2115 : 48 > pha - > cmp_flag ~fnz -2116 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2118 : d0fe > bne * ;failed not equal (non zero) - > -211a : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -211b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -211d : 48 > pha ;use stack to load status -211e : a97f > lda #$7f ;precharge accu -2120 : 28 > plp - -2121 : dd1702 cmp abs1,x - tst_a $7f,~fn -2124 : 08 > php ;save flags -2125 : c97f > cmp #$7f ;test result - > trap_ne -2127 : d0fe > bne * ;failed not equal (non zero) - > -2129 : 68 > pla ;load status -212a : 48 > pha - > cmp_flag ~fn -212b : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -212d : d0fe > bne * ;failed not equal (non zero) - > -212f : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -2130 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2132 : 48 > pha ;use stack to load status -2133 : a97e > lda #$7e ;precharge accu -2135 : 28 > plp - -2136 : dd1702 cmp abs1,x - tst_a $7e,~fzc -2139 : 08 > php ;save flags -213a : c97e > cmp #$7e ;test result - > trap_ne -213c : d0fe > bne * ;failed not equal (non zero) - > -213e : 68 > pla ;load status -213f : 48 > pha - > cmp_flag ~fzc -2140 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2142 : d0fe > bne * ;failed not equal (non zero) - > -2144 : 28 > plp ;restore status - - -2145 : a004 ldy #4 ;with indexing by Y -2147 : a208 ldx #8 ;with indexed indirect - set_a $80,0 - > load_flag 0 -2149 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -214b : 48 > pha ;use stack to load status -214c : a980 > lda #$80 ;precharge accu -214e : 28 > plp - -214f : d91702 cmp abs1,y - tst_a $80,fc -2152 : 08 > php ;save flags -2153 : c980 > cmp #$80 ;test result - > trap_ne -2155 : d0fe > bne * ;failed not equal (non zero) - > -2157 : 68 > pla ;load status -2158 : 48 > pha - > cmp_flag fc -2159 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -215b : d0fe > bne * ;failed not equal (non zero) - > -215d : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -215e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2160 : 48 > pha ;use stack to load status -2161 : a97f > lda #$7f ;precharge accu -2163 : 28 > plp - -2164 : d91702 cmp abs1,y - tst_a $7f,fzc -2167 : 08 > php ;save flags -2168 : c97f > cmp #$7f ;test result - > trap_ne -216a : d0fe > bne * ;failed not equal (non zero) - > -216c : 68 > pla ;load status -216d : 48 > pha - > cmp_flag fzc -216e : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2170 : d0fe > bne * ;failed not equal (non zero) - > -2172 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -2173 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2175 : 48 > pha ;use stack to load status -2176 : a97e > lda #$7e ;precharge accu -2178 : 28 > plp - -2179 : d91702 cmp abs1,y - tst_a $7e,fn -217c : 08 > php ;save flags -217d : c97e > cmp #$7e ;test result - > trap_ne -217f : d0fe > bne * ;failed not equal (non zero) - > -2181 : 68 > pla ;load status -2182 : 48 > pha - > cmp_flag fn -2183 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2185 : d0fe > bne * ;failed not equal (non zero) - > -2187 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -2188 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -218a : 48 > pha ;use stack to load status -218b : a980 > lda #$80 ;precharge accu -218d : 28 > plp - -218e : d91702 cmp abs1,y - tst_a $80,~fnz -2191 : 08 > php ;save flags -2192 : c980 > cmp #$80 ;test result - > trap_ne -2194 : d0fe > bne * ;failed not equal (non zero) - > -2196 : 68 > pla ;load status -2197 : 48 > pha - > cmp_flag ~fnz -2198 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -219a : d0fe > bne * ;failed not equal (non zero) - > -219c : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -219d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -219f : 48 > pha ;use stack to load status -21a0 : a97f > lda #$7f ;precharge accu -21a2 : 28 > plp - -21a3 : d91702 cmp abs1,y - tst_a $7f,~fn -21a6 : 08 > php ;save flags -21a7 : c97f > cmp #$7f ;test result - > trap_ne -21a9 : d0fe > bne * ;failed not equal (non zero) - > -21ab : 68 > pla ;load status -21ac : 48 > pha - > cmp_flag ~fn -21ad : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21af : d0fe > bne * ;failed not equal (non zero) - > -21b1 : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -21b2 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -21b4 : 48 > pha ;use stack to load status -21b5 : a97e > lda #$7e ;precharge accu -21b7 : 28 > plp - -21b8 : d91702 cmp abs1,y - tst_a $7e,~fzc -21bb : 08 > php ;save flags -21bc : c97e > cmp #$7e ;test result - > trap_ne -21be : d0fe > bne * ;failed not equal (non zero) - > -21c0 : 68 > pla ;load status -21c1 : 48 > pha - > cmp_flag ~fzc -21c2 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21c4 : d0fe > bne * ;failed not equal (non zero) - > -21c6 : 28 > plp ;restore status - - - set_a $80,0 - > load_flag 0 -21c7 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -21c9 : 48 > pha ;use stack to load status -21ca : a980 > lda #$80 ;precharge accu -21cc : 28 > plp - -21cd : c124 cmp (ind1,x) - tst_a $80,fc -21cf : 08 > php ;save flags -21d0 : c980 > cmp #$80 ;test result - > trap_ne -21d2 : d0fe > bne * ;failed not equal (non zero) - > -21d4 : 68 > pla ;load status -21d5 : 48 > pha - > cmp_flag fc -21d6 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21d8 : d0fe > bne * ;failed not equal (non zero) - > -21da : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -21db : a900 > lda #0 ;allow test to change I-flag (no mask) - > -21dd : 48 > pha ;use stack to load status -21de : a97f > lda #$7f ;precharge accu -21e0 : 28 > plp - -21e1 : c124 cmp (ind1,x) - tst_a $7f,fzc -21e3 : 08 > php ;save flags -21e4 : c97f > cmp #$7f ;test result - > trap_ne -21e6 : d0fe > bne * ;failed not equal (non zero) - > -21e8 : 68 > pla ;load status -21e9 : 48 > pha - > cmp_flag fzc -21ea : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21ec : d0fe > bne * ;failed not equal (non zero) - > -21ee : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -21ef : a900 > lda #0 ;allow test to change I-flag (no mask) - > -21f1 : 48 > pha ;use stack to load status -21f2 : a97e > lda #$7e ;precharge accu -21f4 : 28 > plp - -21f5 : c124 cmp (ind1,x) - tst_a $7e,fn -21f7 : 08 > php ;save flags -21f8 : c97e > cmp #$7e ;test result - > trap_ne -21fa : d0fe > bne * ;failed not equal (non zero) - > -21fc : 68 > pla ;load status -21fd : 48 > pha - > cmp_flag fn -21fe : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2200 : d0fe > bne * ;failed not equal (non zero) - > -2202 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -2203 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2205 : 48 > pha ;use stack to load status -2206 : a980 > lda #$80 ;precharge accu -2208 : 28 > plp - -2209 : c124 cmp (ind1,x) - tst_a $80,~fnz -220b : 08 > php ;save flags -220c : c980 > cmp #$80 ;test result - > trap_ne -220e : d0fe > bne * ;failed not equal (non zero) - > -2210 : 68 > pla ;load status -2211 : 48 > pha - > cmp_flag ~fnz -2212 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2214 : d0fe > bne * ;failed not equal (non zero) - > -2216 : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -2217 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2219 : 48 > pha ;use stack to load status -221a : a97f > lda #$7f ;precharge accu -221c : 28 > plp - -221d : c124 cmp (ind1,x) - tst_a $7f,~fn -221f : 08 > php ;save flags -2220 : c97f > cmp #$7f ;test result - > trap_ne -2222 : d0fe > bne * ;failed not equal (non zero) - > -2224 : 68 > pla ;load status -2225 : 48 > pha - > cmp_flag ~fn -2226 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2228 : d0fe > bne * ;failed not equal (non zero) - > -222a : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -222b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -222d : 48 > pha ;use stack to load status -222e : a97e > lda #$7e ;precharge accu -2230 : 28 > plp - -2231 : c124 cmp (ind1,x) - tst_a $7e,~fzc -2233 : 08 > php ;save flags -2234 : c97e > cmp #$7e ;test result - > trap_ne -2236 : d0fe > bne * ;failed not equal (non zero) - > -2238 : 68 > pla ;load status -2239 : 48 > pha - > cmp_flag ~fzc -223a : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -223c : d0fe > bne * ;failed not equal (non zero) - > -223e : 28 > plp ;restore status - - - set_a $80,0 - > load_flag 0 -223f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2241 : 48 > pha ;use stack to load status -2242 : a980 > lda #$80 ;precharge accu -2244 : 28 > plp - -2245 : d124 cmp (ind1),y - tst_a $80,fc -2247 : 08 > php ;save flags -2248 : c980 > cmp #$80 ;test result - > trap_ne -224a : d0fe > bne * ;failed not equal (non zero) - > -224c : 68 > pla ;load status -224d : 48 > pha - > cmp_flag fc -224e : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2250 : d0fe > bne * ;failed not equal (non zero) - > -2252 : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -2253 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2255 : 48 > pha ;use stack to load status -2256 : a97f > lda #$7f ;precharge accu -2258 : 28 > plp - -2259 : d124 cmp (ind1),y - tst_a $7f,fzc -225b : 08 > php ;save flags -225c : c97f > cmp #$7f ;test result - > trap_ne -225e : d0fe > bne * ;failed not equal (non zero) - > -2260 : 68 > pla ;load status -2261 : 48 > pha - > cmp_flag fzc -2262 : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2264 : d0fe > bne * ;failed not equal (non zero) - > -2266 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -2267 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2269 : 48 > pha ;use stack to load status -226a : a97e > lda #$7e ;precharge accu -226c : 28 > plp - -226d : d124 cmp (ind1),y - tst_a $7e,fn -226f : 08 > php ;save flags -2270 : c97e > cmp #$7e ;test result - > trap_ne -2272 : d0fe > bne * ;failed not equal (non zero) - > -2274 : 68 > pla ;load status -2275 : 48 > pha - > cmp_flag fn -2276 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2278 : d0fe > bne * ;failed not equal (non zero) - > -227a : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -227b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -227d : 48 > pha ;use stack to load status -227e : a980 > lda #$80 ;precharge accu -2280 : 28 > plp - -2281 : d124 cmp (ind1),y - tst_a $80,~fnz -2283 : 08 > php ;save flags -2284 : c980 > cmp #$80 ;test result - > trap_ne -2286 : d0fe > bne * ;failed not equal (non zero) - > -2288 : 68 > pla ;load status -2289 : 48 > pha - > cmp_flag ~fnz -228a : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -228c : d0fe > bne * ;failed not equal (non zero) - > -228e : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -228f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2291 : 48 > pha ;use stack to load status -2292 : a97f > lda #$7f ;precharge accu -2294 : 28 > plp - -2295 : d124 cmp (ind1),y - tst_a $7f,~fn -2297 : 08 > php ;save flags -2298 : c97f > cmp #$7f ;test result - > trap_ne -229a : d0fe > bne * ;failed not equal (non zero) - > -229c : 68 > pla ;load status -229d : 48 > pha - > cmp_flag ~fn -229e : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -22a0 : d0fe > bne * ;failed not equal (non zero) - > -22a2 : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -22a3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -22a5 : 48 > pha ;use stack to load status -22a6 : a97e > lda #$7e ;precharge accu -22a8 : 28 > plp - -22a9 : d124 cmp (ind1),y - tst_a $7e,~fzc -22ab : 08 > php ;save flags -22ac : c97e > cmp #$7e ;test result - > trap_ne -22ae : d0fe > bne * ;failed not equal (non zero) - > -22b0 : 68 > pla ;load status -22b1 : 48 > pha - > cmp_flag ~fzc -22b2 : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -22b4 : d0fe > bne * ;failed not equal (non zero) - > -22b6 : 28 > plp ;restore status - - next_test -22b7 : ad0002 > lda test_case ;previous test -22ba : c91c > cmp #test_num - > trap_ne ;test is out of sequence -22bc : d0fe > bne * ;failed not equal (non zero) - > -001d = >test_num = test_num + 1 -22be : a91d > lda #test_num ;*** next tests' number -22c0 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing shifts - ASL LSR ROL ROR all addressing modes - ; shifts - accumulator -22c3 : a203 ldx #3 -22c5 : tasl - set_ax zp1,0 - > load_flag 0 -22c5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -22c7 : 48 > pha ;use stack to load status -22c8 : b513 > lda zp1,x ;precharge accu -22ca : 28 > plp - -22cb : 0a asl a - tst_ax rASL,fASL,0 -22cc : 08 > php ;save flags -22cd : dd2002 > cmp rASL,x ;test result - > trap_ne -22d0 : d0fe > bne * ;failed not equal (non zero) - > -22d2 : 68 > pla ;load status - > eor_flag 0 -22d3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -22d5 : dd3002 > cmp fASL,x ;test flags - > trap_ne ; -22d8 : d0fe > bne * ;failed not equal (non zero) - > - -22da : ca dex -22db : 10e8 bpl tasl -22dd : a203 ldx #3 -22df : tasl1 - set_ax zp1,$ff - > load_flag $ff -22df : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -22e1 : 48 > pha ;use stack to load status -22e2 : b513 > lda zp1,x ;precharge accu -22e4 : 28 > plp - -22e5 : 0a asl a - tst_ax rASL,fASL,$ff-fnzc -22e6 : 08 > php ;save flags -22e7 : dd2002 > cmp rASL,x ;test result - > trap_ne -22ea : d0fe > bne * ;failed not equal (non zero) - > -22ec : 68 > pla ;load status - > eor_flag $ff-fnzc -22ed : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -22ef : dd3002 > cmp fASL,x ;test flags - > trap_ne ; -22f2 : d0fe > bne * ;failed not equal (non zero) - > - -22f4 : ca dex -22f5 : 10e8 bpl tasl1 - -22f7 : a203 ldx #3 -22f9 : tlsr - set_ax zp1,0 - > load_flag 0 -22f9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -22fb : 48 > pha ;use stack to load status -22fc : b513 > lda zp1,x ;precharge accu -22fe : 28 > plp - -22ff : 4a lsr a - tst_ax rLSR,fLSR,0 -2300 : 08 > php ;save flags -2301 : dd2802 > cmp rLSR,x ;test result - > trap_ne -2304 : d0fe > bne * ;failed not equal (non zero) - > -2306 : 68 > pla ;load status - > eor_flag 0 -2307 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2309 : dd3802 > cmp fLSR,x ;test flags - > trap_ne ; -230c : d0fe > bne * ;failed not equal (non zero) - > - -230e : ca dex -230f : 10e8 bpl tlsr -2311 : a203 ldx #3 -2313 : tlsr1 - set_ax zp1,$ff - > load_flag $ff -2313 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2315 : 48 > pha ;use stack to load status -2316 : b513 > lda zp1,x ;precharge accu -2318 : 28 > plp - -2319 : 4a lsr a - tst_ax rLSR,fLSR,$ff-fnzc -231a : 08 > php ;save flags -231b : dd2802 > cmp rLSR,x ;test result - > trap_ne -231e : d0fe > bne * ;failed not equal (non zero) - > -2320 : 68 > pla ;load status - > eor_flag $ff-fnzc -2321 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2323 : dd3802 > cmp fLSR,x ;test flags - > trap_ne ; -2326 : d0fe > bne * ;failed not equal (non zero) - > - -2328 : ca dex -2329 : 10e8 bpl tlsr1 - -232b : a203 ldx #3 -232d : trol - set_ax zp1,0 - > load_flag 0 -232d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -232f : 48 > pha ;use stack to load status -2330 : b513 > lda zp1,x ;precharge accu -2332 : 28 > plp - -2333 : 2a rol a - tst_ax rROL,fROL,0 -2334 : 08 > php ;save flags -2335 : dd2002 > cmp rROL,x ;test result - > trap_ne -2338 : d0fe > bne * ;failed not equal (non zero) - > -233a : 68 > pla ;load status - > eor_flag 0 -233b : 4930 > eor #0|fao ;invert expected flags + always on bits - > -233d : dd3002 > cmp fROL,x ;test flags - > trap_ne ; -2340 : d0fe > bne * ;failed not equal (non zero) - > - -2342 : ca dex -2343 : 10e8 bpl trol -2345 : a203 ldx #3 -2347 : trol1 - set_ax zp1,$ff-fc - > load_flag $ff-fc -2347 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -2349 : 48 > pha ;use stack to load status -234a : b513 > lda zp1,x ;precharge accu -234c : 28 > plp - -234d : 2a rol a - tst_ax rROL,fROL,$ff-fnzc -234e : 08 > php ;save flags -234f : dd2002 > cmp rROL,x ;test result - > trap_ne -2352 : d0fe > bne * ;failed not equal (non zero) - > -2354 : 68 > pla ;load status - > eor_flag $ff-fnzc -2355 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2357 : dd3002 > cmp fROL,x ;test flags - > trap_ne ; -235a : d0fe > bne * ;failed not equal (non zero) - > - -235c : ca dex -235d : 10e8 bpl trol1 - -235f : a203 ldx #3 -2361 : trolc - set_ax zp1,fc - > load_flag fc -2361 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -2363 : 48 > pha ;use stack to load status -2364 : b513 > lda zp1,x ;precharge accu -2366 : 28 > plp - -2367 : 2a rol a - tst_ax rROLc,fROLc,0 -2368 : 08 > php ;save flags -2369 : dd2402 > cmp rROLc,x ;test result - > trap_ne -236c : d0fe > bne * ;failed not equal (non zero) - > -236e : 68 > pla ;load status - > eor_flag 0 -236f : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2371 : dd3402 > cmp fROLc,x ;test flags - > trap_ne ; -2374 : d0fe > bne * ;failed not equal (non zero) - > - -2376 : ca dex -2377 : 10e8 bpl trolc -2379 : a203 ldx #3 -237b : trolc1 - set_ax zp1,$ff - > load_flag $ff -237b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -237d : 48 > pha ;use stack to load status -237e : b513 > lda zp1,x ;precharge accu -2380 : 28 > plp - -2381 : 2a rol a - tst_ax rROLc,fROLc,$ff-fnzc -2382 : 08 > php ;save flags -2383 : dd2402 > cmp rROLc,x ;test result - > trap_ne -2386 : d0fe > bne * ;failed not equal (non zero) - > -2388 : 68 > pla ;load status - > eor_flag $ff-fnzc -2389 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -238b : dd3402 > cmp fROLc,x ;test flags - > trap_ne ; -238e : d0fe > bne * ;failed not equal (non zero) - > - -2390 : ca dex -2391 : 10e8 bpl trolc1 - -2393 : a203 ldx #3 -2395 : tror - set_ax zp1,0 - > load_flag 0 -2395 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2397 : 48 > pha ;use stack to load status -2398 : b513 > lda zp1,x ;precharge accu -239a : 28 > plp - -239b : 6a ror a - tst_ax rROR,fROR,0 -239c : 08 > php ;save flags -239d : dd2802 > cmp rROR,x ;test result - > trap_ne -23a0 : d0fe > bne * ;failed not equal (non zero) - > -23a2 : 68 > pla ;load status - > eor_flag 0 -23a3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -23a5 : dd3802 > cmp fROR,x ;test flags - > trap_ne ; -23a8 : d0fe > bne * ;failed not equal (non zero) - > - -23aa : ca dex -23ab : 10e8 bpl tror -23ad : a203 ldx #3 -23af : tror1 - set_ax zp1,$ff-fc - > load_flag $ff-fc -23af : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -23b1 : 48 > pha ;use stack to load status -23b2 : b513 > lda zp1,x ;precharge accu -23b4 : 28 > plp - -23b5 : 6a ror a - tst_ax rROR,fROR,$ff-fnzc -23b6 : 08 > php ;save flags -23b7 : dd2802 > cmp rROR,x ;test result - > trap_ne -23ba : d0fe > bne * ;failed not equal (non zero) - > -23bc : 68 > pla ;load status - > eor_flag $ff-fnzc -23bd : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -23bf : dd3802 > cmp fROR,x ;test flags - > trap_ne ; -23c2 : d0fe > bne * ;failed not equal (non zero) - > - -23c4 : ca dex -23c5 : 10e8 bpl tror1 - -23c7 : a203 ldx #3 -23c9 : trorc - set_ax zp1,fc - > load_flag fc -23c9 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -23cb : 48 > pha ;use stack to load status -23cc : b513 > lda zp1,x ;precharge accu -23ce : 28 > plp - -23cf : 6a ror a - tst_ax rRORc,fRORc,0 -23d0 : 08 > php ;save flags -23d1 : dd2c02 > cmp rRORc,x ;test result - > trap_ne -23d4 : d0fe > bne * ;failed not equal (non zero) - > -23d6 : 68 > pla ;load status - > eor_flag 0 -23d7 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -23d9 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne ; -23dc : d0fe > bne * ;failed not equal (non zero) - > - -23de : ca dex -23df : 10e8 bpl trorc -23e1 : a203 ldx #3 -23e3 : trorc1 - set_ax zp1,$ff - > load_flag $ff -23e3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -23e5 : 48 > pha ;use stack to load status -23e6 : b513 > lda zp1,x ;precharge accu -23e8 : 28 > plp - -23e9 : 6a ror a - tst_ax rRORc,fRORc,$ff-fnzc -23ea : 08 > php ;save flags -23eb : dd2c02 > cmp rRORc,x ;test result - > trap_ne -23ee : d0fe > bne * ;failed not equal (non zero) - > -23f0 : 68 > pla ;load status - > eor_flag $ff-fnzc -23f1 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -23f3 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne ; -23f6 : d0fe > bne * ;failed not equal (non zero) - > - -23f8 : ca dex -23f9 : 10e8 bpl trorc1 - next_test -23fb : ad0002 > lda test_case ;previous test -23fe : c91d > cmp #test_num - > trap_ne ;test is out of sequence -2400 : d0fe > bne * ;failed not equal (non zero) - > -001e = >test_num = test_num + 1 -2402 : a91e > lda #test_num ;*** next tests' number -2404 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; shifts - zeropage -2407 : a203 ldx #3 -2409 : tasl2 - set_z zp1,0 - > load_flag 0 -2409 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -240b : 48 > pha ;use stack to load status -240c : b513 > lda zp1,x ;load to zeropage -240e : 850c > sta zpt -2410 : 28 > plp - -2411 : 060c asl zpt - tst_z rASL,fASL,0 -2413 : 08 > php ;save flags -2414 : a50c > lda zpt -2416 : dd2002 > cmp rASL,x ;test result - > trap_ne -2419 : d0fe > bne * ;failed not equal (non zero) - > -241b : 68 > pla ;load status - > eor_flag 0 -241c : 4930 > eor #0|fao ;invert expected flags + always on bits - > -241e : dd3002 > cmp fASL,x ;test flags - > trap_ne -2421 : d0fe > bne * ;failed not equal (non zero) - > - -2423 : ca dex -2424 : 10e3 bpl tasl2 -2426 : a203 ldx #3 -2428 : tasl3 - set_z zp1,$ff - > load_flag $ff -2428 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -242a : 48 > pha ;use stack to load status -242b : b513 > lda zp1,x ;load to zeropage -242d : 850c > sta zpt -242f : 28 > plp - -2430 : 060c asl zpt - tst_z rASL,fASL,$ff-fnzc -2432 : 08 > php ;save flags -2433 : a50c > lda zpt -2435 : dd2002 > cmp rASL,x ;test result - > trap_ne -2438 : d0fe > bne * ;failed not equal (non zero) - > -243a : 68 > pla ;load status - > eor_flag $ff-fnzc -243b : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -243d : dd3002 > cmp fASL,x ;test flags - > trap_ne -2440 : d0fe > bne * ;failed not equal (non zero) - > - -2442 : ca dex -2443 : 10e3 bpl tasl3 - -2445 : a203 ldx #3 -2447 : tlsr2 - set_z zp1,0 - > load_flag 0 -2447 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2449 : 48 > pha ;use stack to load status -244a : b513 > lda zp1,x ;load to zeropage -244c : 850c > sta zpt -244e : 28 > plp - -244f : 460c lsr zpt - tst_z rLSR,fLSR,0 -2451 : 08 > php ;save flags -2452 : a50c > lda zpt -2454 : dd2802 > cmp rLSR,x ;test result - > trap_ne -2457 : d0fe > bne * ;failed not equal (non zero) - > -2459 : 68 > pla ;load status - > eor_flag 0 -245a : 4930 > eor #0|fao ;invert expected flags + always on bits - > -245c : dd3802 > cmp fLSR,x ;test flags - > trap_ne -245f : d0fe > bne * ;failed not equal (non zero) - > - -2461 : ca dex -2462 : 10e3 bpl tlsr2 -2464 : a203 ldx #3 -2466 : tlsr3 - set_z zp1,$ff - > load_flag $ff -2466 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2468 : 48 > pha ;use stack to load status -2469 : b513 > lda zp1,x ;load to zeropage -246b : 850c > sta zpt -246d : 28 > plp - -246e : 460c lsr zpt - tst_z rLSR,fLSR,$ff-fnzc -2470 : 08 > php ;save flags -2471 : a50c > lda zpt -2473 : dd2802 > cmp rLSR,x ;test result - > trap_ne -2476 : d0fe > bne * ;failed not equal (non zero) - > -2478 : 68 > pla ;load status - > eor_flag $ff-fnzc -2479 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -247b : dd3802 > cmp fLSR,x ;test flags - > trap_ne -247e : d0fe > bne * ;failed not equal (non zero) - > - -2480 : ca dex -2481 : 10e3 bpl tlsr3 - -2483 : a203 ldx #3 -2485 : trol2 - set_z zp1,0 - > load_flag 0 -2485 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2487 : 48 > pha ;use stack to load status -2488 : b513 > lda zp1,x ;load to zeropage -248a : 850c > sta zpt -248c : 28 > plp - -248d : 260c rol zpt - tst_z rROL,fROL,0 -248f : 08 > php ;save flags -2490 : a50c > lda zpt -2492 : dd2002 > cmp rROL,x ;test result - > trap_ne -2495 : d0fe > bne * ;failed not equal (non zero) - > -2497 : 68 > pla ;load status - > eor_flag 0 -2498 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -249a : dd3002 > cmp fROL,x ;test flags - > trap_ne -249d : d0fe > bne * ;failed not equal (non zero) - > - -249f : ca dex -24a0 : 10e3 bpl trol2 -24a2 : a203 ldx #3 -24a4 : trol3 - set_z zp1,$ff-fc - > load_flag $ff-fc -24a4 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -24a6 : 48 > pha ;use stack to load status -24a7 : b513 > lda zp1,x ;load to zeropage -24a9 : 850c > sta zpt -24ab : 28 > plp - -24ac : 260c rol zpt - tst_z rROL,fROL,$ff-fnzc -24ae : 08 > php ;save flags -24af : a50c > lda zpt -24b1 : dd2002 > cmp rROL,x ;test result - > trap_ne -24b4 : d0fe > bne * ;failed not equal (non zero) - > -24b6 : 68 > pla ;load status - > eor_flag $ff-fnzc -24b7 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -24b9 : dd3002 > cmp fROL,x ;test flags - > trap_ne -24bc : d0fe > bne * ;failed not equal (non zero) - > - -24be : ca dex -24bf : 10e3 bpl trol3 - -24c1 : a203 ldx #3 -24c3 : trolc2 - set_z zp1,fc - > load_flag fc -24c3 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -24c5 : 48 > pha ;use stack to load status -24c6 : b513 > lda zp1,x ;load to zeropage -24c8 : 850c > sta zpt -24ca : 28 > plp - -24cb : 260c rol zpt - tst_z rROLc,fROLc,0 -24cd : 08 > php ;save flags -24ce : a50c > lda zpt -24d0 : dd2402 > cmp rROLc,x ;test result - > trap_ne -24d3 : d0fe > bne * ;failed not equal (non zero) - > -24d5 : 68 > pla ;load status - > eor_flag 0 -24d6 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -24d8 : dd3402 > cmp fROLc,x ;test flags - > trap_ne -24db : d0fe > bne * ;failed not equal (non zero) - > - -24dd : ca dex -24de : 10e3 bpl trolc2 -24e0 : a203 ldx #3 -24e2 : trolc3 - set_z zp1,$ff - > load_flag $ff -24e2 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -24e4 : 48 > pha ;use stack to load status -24e5 : b513 > lda zp1,x ;load to zeropage -24e7 : 850c > sta zpt -24e9 : 28 > plp - -24ea : 260c rol zpt - tst_z rROLc,fROLc,$ff-fnzc -24ec : 08 > php ;save flags -24ed : a50c > lda zpt -24ef : dd2402 > cmp rROLc,x ;test result - > trap_ne -24f2 : d0fe > bne * ;failed not equal (non zero) - > -24f4 : 68 > pla ;load status - > eor_flag $ff-fnzc -24f5 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -24f7 : dd3402 > cmp fROLc,x ;test flags - > trap_ne -24fa : d0fe > bne * ;failed not equal (non zero) - > - -24fc : ca dex -24fd : 10e3 bpl trolc3 - -24ff : a203 ldx #3 -2501 : tror2 - set_z zp1,0 - > load_flag 0 -2501 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2503 : 48 > pha ;use stack to load status -2504 : b513 > lda zp1,x ;load to zeropage -2506 : 850c > sta zpt -2508 : 28 > plp - -2509 : 660c ror zpt - tst_z rROR,fROR,0 -250b : 08 > php ;save flags -250c : a50c > lda zpt -250e : dd2802 > cmp rROR,x ;test result - > trap_ne -2511 : d0fe > bne * ;failed not equal (non zero) - > -2513 : 68 > pla ;load status - > eor_flag 0 -2514 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2516 : dd3802 > cmp fROR,x ;test flags - > trap_ne -2519 : d0fe > bne * ;failed not equal (non zero) - > - -251b : ca dex -251c : 10e3 bpl tror2 -251e : a203 ldx #3 -2520 : tror3 - set_z zp1,$ff-fc - > load_flag $ff-fc -2520 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -2522 : 48 > pha ;use stack to load status -2523 : b513 > lda zp1,x ;load to zeropage -2525 : 850c > sta zpt -2527 : 28 > plp - -2528 : 660c ror zpt - tst_z rROR,fROR,$ff-fnzc -252a : 08 > php ;save flags -252b : a50c > lda zpt -252d : dd2802 > cmp rROR,x ;test result - > trap_ne -2530 : d0fe > bne * ;failed not equal (non zero) - > -2532 : 68 > pla ;load status - > eor_flag $ff-fnzc -2533 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2535 : dd3802 > cmp fROR,x ;test flags - > trap_ne -2538 : d0fe > bne * ;failed not equal (non zero) - > - -253a : ca dex -253b : 10e3 bpl tror3 - -253d : a203 ldx #3 -253f : trorc2 - set_z zp1,fc - > load_flag fc -253f : a901 > lda #fc ;allow test to change I-flag (no mask) - > -2541 : 48 > pha ;use stack to load status -2542 : b513 > lda zp1,x ;load to zeropage -2544 : 850c > sta zpt -2546 : 28 > plp - -2547 : 660c ror zpt - tst_z rRORc,fRORc,0 -2549 : 08 > php ;save flags -254a : a50c > lda zpt -254c : dd2c02 > cmp rRORc,x ;test result - > trap_ne -254f : d0fe > bne * ;failed not equal (non zero) - > -2551 : 68 > pla ;load status - > eor_flag 0 -2552 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2554 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -2557 : d0fe > bne * ;failed not equal (non zero) - > - -2559 : ca dex -255a : 10e3 bpl trorc2 -255c : a203 ldx #3 -255e : trorc3 - set_z zp1,$ff - > load_flag $ff -255e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2560 : 48 > pha ;use stack to load status -2561 : b513 > lda zp1,x ;load to zeropage -2563 : 850c > sta zpt -2565 : 28 > plp - -2566 : 660c ror zpt - tst_z rRORc,fRORc,$ff-fnzc -2568 : 08 > php ;save flags -2569 : a50c > lda zpt -256b : dd2c02 > cmp rRORc,x ;test result - > trap_ne -256e : d0fe > bne * ;failed not equal (non zero) - > -2570 : 68 > pla ;load status - > eor_flag $ff-fnzc -2571 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2573 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -2576 : d0fe > bne * ;failed not equal (non zero) - > - -2578 : ca dex -2579 : 10e3 bpl trorc3 - next_test -257b : ad0002 > lda test_case ;previous test -257e : c91e > cmp #test_num - > trap_ne ;test is out of sequence -2580 : d0fe > bne * ;failed not equal (non zero) - > -001f = >test_num = test_num + 1 -2582 : a91f > lda #test_num ;*** next tests' number -2584 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; shifts - absolute -2587 : a203 ldx #3 -2589 : tasl4 - set_abs zp1,0 - > load_flag 0 -2589 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -258b : 48 > pha ;use stack to load status -258c : b513 > lda zp1,x ;load to memory -258e : 8d0302 > sta abst -2591 : 28 > plp - -2592 : 0e0302 asl abst - tst_abs rASL,fASL,0 -2595 : 08 > php ;save flags -2596 : ad0302 > lda abst -2599 : dd2002 > cmp rASL,x ;test result - > trap_ne -259c : d0fe > bne * ;failed not equal (non zero) - > -259e : 68 > pla ;load status - > eor_flag 0 -259f : 4930 > eor #0|fao ;invert expected flags + always on bits - > -25a1 : dd3002 > cmp fASL,x ;test flags - > trap_ne -25a4 : d0fe > bne * ;failed not equal (non zero) - > - -25a6 : ca dex -25a7 : 10e0 bpl tasl4 -25a9 : a203 ldx #3 -25ab : tasl5 - set_abs zp1,$ff - > load_flag $ff -25ab : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -25ad : 48 > pha ;use stack to load status -25ae : b513 > lda zp1,x ;load to memory -25b0 : 8d0302 > sta abst -25b3 : 28 > plp - -25b4 : 0e0302 asl abst - tst_abs rASL,fASL,$ff-fnzc -25b7 : 08 > php ;save flags -25b8 : ad0302 > lda abst -25bb : dd2002 > cmp rASL,x ;test result - > trap_ne -25be : d0fe > bne * ;failed not equal (non zero) - > -25c0 : 68 > pla ;load status - > eor_flag $ff-fnzc -25c1 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -25c3 : dd3002 > cmp fASL,x ;test flags - > trap_ne -25c6 : d0fe > bne * ;failed not equal (non zero) - > - -25c8 : ca dex -25c9 : 10e0 bpl tasl5 - -25cb : a203 ldx #3 -25cd : tlsr4 - set_abs zp1,0 - > load_flag 0 -25cd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -25cf : 48 > pha ;use stack to load status -25d0 : b513 > lda zp1,x ;load to memory -25d2 : 8d0302 > sta abst -25d5 : 28 > plp - -25d6 : 4e0302 lsr abst - tst_abs rLSR,fLSR,0 -25d9 : 08 > php ;save flags -25da : ad0302 > lda abst -25dd : dd2802 > cmp rLSR,x ;test result - > trap_ne -25e0 : d0fe > bne * ;failed not equal (non zero) - > -25e2 : 68 > pla ;load status - > eor_flag 0 -25e3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -25e5 : dd3802 > cmp fLSR,x ;test flags - > trap_ne -25e8 : d0fe > bne * ;failed not equal (non zero) - > - -25ea : ca dex -25eb : 10e0 bpl tlsr4 -25ed : a203 ldx #3 -25ef : tlsr5 - set_abs zp1,$ff - > load_flag $ff -25ef : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -25f1 : 48 > pha ;use stack to load status -25f2 : b513 > lda zp1,x ;load to memory -25f4 : 8d0302 > sta abst -25f7 : 28 > plp - -25f8 : 4e0302 lsr abst - tst_abs rLSR,fLSR,$ff-fnzc -25fb : 08 > php ;save flags -25fc : ad0302 > lda abst -25ff : dd2802 > cmp rLSR,x ;test result - > trap_ne -2602 : d0fe > bne * ;failed not equal (non zero) - > -2604 : 68 > pla ;load status - > eor_flag $ff-fnzc -2605 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2607 : dd3802 > cmp fLSR,x ;test flags - > trap_ne -260a : d0fe > bne * ;failed not equal (non zero) - > - -260c : ca dex -260d : 10e0 bpl tlsr5 - -260f : a203 ldx #3 -2611 : trol4 - set_abs zp1,0 - > load_flag 0 -2611 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2613 : 48 > pha ;use stack to load status -2614 : b513 > lda zp1,x ;load to memory -2616 : 8d0302 > sta abst -2619 : 28 > plp - -261a : 2e0302 rol abst - tst_abs rROL,fROL,0 -261d : 08 > php ;save flags -261e : ad0302 > lda abst -2621 : dd2002 > cmp rROL,x ;test result - > trap_ne -2624 : d0fe > bne * ;failed not equal (non zero) - > -2626 : 68 > pla ;load status - > eor_flag 0 -2627 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2629 : dd3002 > cmp fROL,x ;test flags - > trap_ne -262c : d0fe > bne * ;failed not equal (non zero) - > - -262e : ca dex -262f : 10e0 bpl trol4 -2631 : a203 ldx #3 -2633 : trol5 - set_abs zp1,$ff-fc - > load_flag $ff-fc -2633 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -2635 : 48 > pha ;use stack to load status -2636 : b513 > lda zp1,x ;load to memory -2638 : 8d0302 > sta abst -263b : 28 > plp - -263c : 2e0302 rol abst - tst_abs rROL,fROL,$ff-fnzc -263f : 08 > php ;save flags -2640 : ad0302 > lda abst -2643 : dd2002 > cmp rROL,x ;test result - > trap_ne -2646 : d0fe > bne * ;failed not equal (non zero) - > -2648 : 68 > pla ;load status - > eor_flag $ff-fnzc -2649 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -264b : dd3002 > cmp fROL,x ;test flags - > trap_ne -264e : d0fe > bne * ;failed not equal (non zero) - > - -2650 : ca dex -2651 : 10e0 bpl trol5 - -2653 : a203 ldx #3 -2655 : trolc4 - set_abs zp1,fc - > load_flag fc -2655 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -2657 : 48 > pha ;use stack to load status -2658 : b513 > lda zp1,x ;load to memory -265a : 8d0302 > sta abst -265d : 28 > plp - -265e : 2e0302 rol abst - tst_abs rROLc,fROLc,0 -2661 : 08 > php ;save flags -2662 : ad0302 > lda abst -2665 : dd2402 > cmp rROLc,x ;test result - > trap_ne -2668 : d0fe > bne * ;failed not equal (non zero) - > -266a : 68 > pla ;load status - > eor_flag 0 -266b : 4930 > eor #0|fao ;invert expected flags + always on bits - > -266d : dd3402 > cmp fROLc,x ;test flags - > trap_ne -2670 : d0fe > bne * ;failed not equal (non zero) - > - -2672 : ca dex -2673 : 10e0 bpl trolc4 -2675 : a203 ldx #3 -2677 : trolc5 - set_abs zp1,$ff - > load_flag $ff -2677 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2679 : 48 > pha ;use stack to load status -267a : b513 > lda zp1,x ;load to memory -267c : 8d0302 > sta abst -267f : 28 > plp - -2680 : 2e0302 rol abst - tst_abs rROLc,fROLc,$ff-fnzc -2683 : 08 > php ;save flags -2684 : ad0302 > lda abst -2687 : dd2402 > cmp rROLc,x ;test result - > trap_ne -268a : d0fe > bne * ;failed not equal (non zero) - > -268c : 68 > pla ;load status - > eor_flag $ff-fnzc -268d : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -268f : dd3402 > cmp fROLc,x ;test flags - > trap_ne -2692 : d0fe > bne * ;failed not equal (non zero) - > - -2694 : ca dex -2695 : 10e0 bpl trolc5 - -2697 : a203 ldx #3 -2699 : tror4 - set_abs zp1,0 - > load_flag 0 -2699 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -269b : 48 > pha ;use stack to load status -269c : b513 > lda zp1,x ;load to memory -269e : 8d0302 > sta abst -26a1 : 28 > plp - -26a2 : 6e0302 ror abst - tst_abs rROR,fROR,0 -26a5 : 08 > php ;save flags -26a6 : ad0302 > lda abst -26a9 : dd2802 > cmp rROR,x ;test result - > trap_ne -26ac : d0fe > bne * ;failed not equal (non zero) - > -26ae : 68 > pla ;load status - > eor_flag 0 -26af : 4930 > eor #0|fao ;invert expected flags + always on bits - > -26b1 : dd3802 > cmp fROR,x ;test flags - > trap_ne -26b4 : d0fe > bne * ;failed not equal (non zero) - > - -26b6 : ca dex -26b7 : 10e0 bpl tror4 -26b9 : a203 ldx #3 -26bb : tror5 - set_abs zp1,$ff-fc - > load_flag $ff-fc -26bb : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -26bd : 48 > pha ;use stack to load status -26be : b513 > lda zp1,x ;load to memory -26c0 : 8d0302 > sta abst -26c3 : 28 > plp - -26c4 : 6e0302 ror abst - tst_abs rROR,fROR,$ff-fnzc -26c7 : 08 > php ;save flags -26c8 : ad0302 > lda abst -26cb : dd2802 > cmp rROR,x ;test result - > trap_ne -26ce : d0fe > bne * ;failed not equal (non zero) - > -26d0 : 68 > pla ;load status - > eor_flag $ff-fnzc -26d1 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -26d3 : dd3802 > cmp fROR,x ;test flags - > trap_ne -26d6 : d0fe > bne * ;failed not equal (non zero) - > - -26d8 : ca dex -26d9 : 10e0 bpl tror5 - -26db : a203 ldx #3 -26dd : trorc4 - set_abs zp1,fc - > load_flag fc -26dd : a901 > lda #fc ;allow test to change I-flag (no mask) - > -26df : 48 > pha ;use stack to load status -26e0 : b513 > lda zp1,x ;load to memory -26e2 : 8d0302 > sta abst -26e5 : 28 > plp - -26e6 : 6e0302 ror abst - tst_abs rRORc,fRORc,0 -26e9 : 08 > php ;save flags -26ea : ad0302 > lda abst -26ed : dd2c02 > cmp rRORc,x ;test result - > trap_ne -26f0 : d0fe > bne * ;failed not equal (non zero) - > -26f2 : 68 > pla ;load status - > eor_flag 0 -26f3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -26f5 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -26f8 : d0fe > bne * ;failed not equal (non zero) - > - -26fa : ca dex -26fb : 10e0 bpl trorc4 -26fd : a203 ldx #3 -26ff : trorc5 - set_abs zp1,$ff - > load_flag $ff -26ff : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2701 : 48 > pha ;use stack to load status -2702 : b513 > lda zp1,x ;load to memory -2704 : 8d0302 > sta abst -2707 : 28 > plp - -2708 : 6e0302 ror abst - tst_abs rRORc,fRORc,$ff-fnzc -270b : 08 > php ;save flags -270c : ad0302 > lda abst -270f : dd2c02 > cmp rRORc,x ;test result - > trap_ne -2712 : d0fe > bne * ;failed not equal (non zero) - > -2714 : 68 > pla ;load status - > eor_flag $ff-fnzc -2715 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2717 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -271a : d0fe > bne * ;failed not equal (non zero) - > - -271c : ca dex -271d : 10e0 bpl trorc5 - next_test -271f : ad0002 > lda test_case ;previous test -2722 : c91f > cmp #test_num - > trap_ne ;test is out of sequence -2724 : d0fe > bne * ;failed not equal (non zero) - > -0020 = >test_num = test_num + 1 -2726 : a920 > lda #test_num ;*** next tests' number -2728 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; shifts - zp indexed -272b : a203 ldx #3 -272d : tasl6 - set_zx zp1,0 - > load_flag 0 -272d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -272f : 48 > pha ;use stack to load status -2730 : b513 > lda zp1,x ;load to indexed zeropage -2732 : 950c > sta zpt,x -2734 : 28 > plp - -2735 : 160c asl zpt,x - tst_zx rASL,fASL,0 -2737 : 08 > php ;save flags -2738 : b50c > lda zpt,x -273a : dd2002 > cmp rASL,x ;test result - > trap_ne -273d : d0fe > bne * ;failed not equal (non zero) - > -273f : 68 > pla ;load status - > eor_flag 0 -2740 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2742 : dd3002 > cmp fASL,x ;test flags - > trap_ne -2745 : d0fe > bne * ;failed not equal (non zero) - > - -2747 : ca dex -2748 : 10e3 bpl tasl6 -274a : a203 ldx #3 -274c : tasl7 - set_zx zp1,$ff - > load_flag $ff -274c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -274e : 48 > pha ;use stack to load status -274f : b513 > lda zp1,x ;load to indexed zeropage -2751 : 950c > sta zpt,x -2753 : 28 > plp - -2754 : 160c asl zpt,x - tst_zx rASL,fASL,$ff-fnzc -2756 : 08 > php ;save flags -2757 : b50c > lda zpt,x -2759 : dd2002 > cmp rASL,x ;test result - > trap_ne -275c : d0fe > bne * ;failed not equal (non zero) - > -275e : 68 > pla ;load status - > eor_flag $ff-fnzc -275f : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2761 : dd3002 > cmp fASL,x ;test flags - > trap_ne -2764 : d0fe > bne * ;failed not equal (non zero) - > - -2766 : ca dex -2767 : 10e3 bpl tasl7 - -2769 : a203 ldx #3 -276b : tlsr6 - set_zx zp1,0 - > load_flag 0 -276b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -276d : 48 > pha ;use stack to load status -276e : b513 > lda zp1,x ;load to indexed zeropage -2770 : 950c > sta zpt,x -2772 : 28 > plp - -2773 : 560c lsr zpt,x - tst_zx rLSR,fLSR,0 -2775 : 08 > php ;save flags -2776 : b50c > lda zpt,x -2778 : dd2802 > cmp rLSR,x ;test result - > trap_ne -277b : d0fe > bne * ;failed not equal (non zero) - > -277d : 68 > pla ;load status - > eor_flag 0 -277e : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2780 : dd3802 > cmp fLSR,x ;test flags - > trap_ne -2783 : d0fe > bne * ;failed not equal (non zero) - > - -2785 : ca dex -2786 : 10e3 bpl tlsr6 -2788 : a203 ldx #3 -278a : tlsr7 - set_zx zp1,$ff - > load_flag $ff -278a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -278c : 48 > pha ;use stack to load status -278d : b513 > lda zp1,x ;load to indexed zeropage -278f : 950c > sta zpt,x -2791 : 28 > plp - -2792 : 560c lsr zpt,x - tst_zx rLSR,fLSR,$ff-fnzc -2794 : 08 > php ;save flags -2795 : b50c > lda zpt,x -2797 : dd2802 > cmp rLSR,x ;test result - > trap_ne -279a : d0fe > bne * ;failed not equal (non zero) - > -279c : 68 > pla ;load status - > eor_flag $ff-fnzc -279d : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -279f : dd3802 > cmp fLSR,x ;test flags - > trap_ne -27a2 : d0fe > bne * ;failed not equal (non zero) - > - -27a4 : ca dex -27a5 : 10e3 bpl tlsr7 - -27a7 : a203 ldx #3 -27a9 : trol6 - set_zx zp1,0 - > load_flag 0 -27a9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -27ab : 48 > pha ;use stack to load status -27ac : b513 > lda zp1,x ;load to indexed zeropage -27ae : 950c > sta zpt,x -27b0 : 28 > plp - -27b1 : 360c rol zpt,x - tst_zx rROL,fROL,0 -27b3 : 08 > php ;save flags -27b4 : b50c > lda zpt,x -27b6 : dd2002 > cmp rROL,x ;test result - > trap_ne -27b9 : d0fe > bne * ;failed not equal (non zero) - > -27bb : 68 > pla ;load status - > eor_flag 0 -27bc : 4930 > eor #0|fao ;invert expected flags + always on bits - > -27be : dd3002 > cmp fROL,x ;test flags - > trap_ne -27c1 : d0fe > bne * ;failed not equal (non zero) - > - -27c3 : ca dex -27c4 : 10e3 bpl trol6 -27c6 : a203 ldx #3 -27c8 : trol7 - set_zx zp1,$ff-fc - > load_flag $ff-fc -27c8 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -27ca : 48 > pha ;use stack to load status -27cb : b513 > lda zp1,x ;load to indexed zeropage -27cd : 950c > sta zpt,x -27cf : 28 > plp - -27d0 : 360c rol zpt,x - tst_zx rROL,fROL,$ff-fnzc -27d2 : 08 > php ;save flags -27d3 : b50c > lda zpt,x -27d5 : dd2002 > cmp rROL,x ;test result - > trap_ne -27d8 : d0fe > bne * ;failed not equal (non zero) - > -27da : 68 > pla ;load status - > eor_flag $ff-fnzc -27db : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -27dd : dd3002 > cmp fROL,x ;test flags - > trap_ne -27e0 : d0fe > bne * ;failed not equal (non zero) - > - -27e2 : ca dex -27e3 : 10e3 bpl trol7 - -27e5 : a203 ldx #3 -27e7 : trolc6 - set_zx zp1,fc - > load_flag fc -27e7 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -27e9 : 48 > pha ;use stack to load status -27ea : b513 > lda zp1,x ;load to indexed zeropage -27ec : 950c > sta zpt,x -27ee : 28 > plp - -27ef : 360c rol zpt,x - tst_zx rROLc,fROLc,0 -27f1 : 08 > php ;save flags -27f2 : b50c > lda zpt,x -27f4 : dd2402 > cmp rROLc,x ;test result - > trap_ne -27f7 : d0fe > bne * ;failed not equal (non zero) - > -27f9 : 68 > pla ;load status - > eor_flag 0 -27fa : 4930 > eor #0|fao ;invert expected flags + always on bits - > -27fc : dd3402 > cmp fROLc,x ;test flags - > trap_ne -27ff : d0fe > bne * ;failed not equal (non zero) - > - -2801 : ca dex -2802 : 10e3 bpl trolc6 -2804 : a203 ldx #3 -2806 : trolc7 - set_zx zp1,$ff - > load_flag $ff -2806 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2808 : 48 > pha ;use stack to load status -2809 : b513 > lda zp1,x ;load to indexed zeropage -280b : 950c > sta zpt,x -280d : 28 > plp - -280e : 360c rol zpt,x - tst_zx rROLc,fROLc,$ff-fnzc -2810 : 08 > php ;save flags -2811 : b50c > lda zpt,x -2813 : dd2402 > cmp rROLc,x ;test result - > trap_ne -2816 : d0fe > bne * ;failed not equal (non zero) - > -2818 : 68 > pla ;load status - > eor_flag $ff-fnzc -2819 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -281b : dd3402 > cmp fROLc,x ;test flags - > trap_ne -281e : d0fe > bne * ;failed not equal (non zero) - > - -2820 : ca dex -2821 : 10e3 bpl trolc7 - -2823 : a203 ldx #3 -2825 : tror6 - set_zx zp1,0 - > load_flag 0 -2825 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2827 : 48 > pha ;use stack to load status -2828 : b513 > lda zp1,x ;load to indexed zeropage -282a : 950c > sta zpt,x -282c : 28 > plp - -282d : 760c ror zpt,x - tst_zx rROR,fROR,0 -282f : 08 > php ;save flags -2830 : b50c > lda zpt,x -2832 : dd2802 > cmp rROR,x ;test result - > trap_ne -2835 : d0fe > bne * ;failed not equal (non zero) - > -2837 : 68 > pla ;load status - > eor_flag 0 -2838 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -283a : dd3802 > cmp fROR,x ;test flags - > trap_ne -283d : d0fe > bne * ;failed not equal (non zero) - > - -283f : ca dex -2840 : 10e3 bpl tror6 -2842 : a203 ldx #3 -2844 : tror7 - set_zx zp1,$ff-fc - > load_flag $ff-fc -2844 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -2846 : 48 > pha ;use stack to load status -2847 : b513 > lda zp1,x ;load to indexed zeropage -2849 : 950c > sta zpt,x -284b : 28 > plp - -284c : 760c ror zpt,x - tst_zx rROR,fROR,$ff-fnzc -284e : 08 > php ;save flags -284f : b50c > lda zpt,x -2851 : dd2802 > cmp rROR,x ;test result - > trap_ne -2854 : d0fe > bne * ;failed not equal (non zero) - > -2856 : 68 > pla ;load status - > eor_flag $ff-fnzc -2857 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2859 : dd3802 > cmp fROR,x ;test flags - > trap_ne -285c : d0fe > bne * ;failed not equal (non zero) - > - -285e : ca dex -285f : 10e3 bpl tror7 - -2861 : a203 ldx #3 -2863 : trorc6 - set_zx zp1,fc - > load_flag fc -2863 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -2865 : 48 > pha ;use stack to load status -2866 : b513 > lda zp1,x ;load to indexed zeropage -2868 : 950c > sta zpt,x -286a : 28 > plp - -286b : 760c ror zpt,x - tst_zx rRORc,fRORc,0 -286d : 08 > php ;save flags -286e : b50c > lda zpt,x -2870 : dd2c02 > cmp rRORc,x ;test result - > trap_ne -2873 : d0fe > bne * ;failed not equal (non zero) - > -2875 : 68 > pla ;load status - > eor_flag 0 -2876 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2878 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -287b : d0fe > bne * ;failed not equal (non zero) - > - -287d : ca dex -287e : 10e3 bpl trorc6 -2880 : a203 ldx #3 -2882 : trorc7 - set_zx zp1,$ff - > load_flag $ff -2882 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2884 : 48 > pha ;use stack to load status -2885 : b513 > lda zp1,x ;load to indexed zeropage -2887 : 950c > sta zpt,x -2889 : 28 > plp - -288a : 760c ror zpt,x - tst_zx rRORc,fRORc,$ff-fnzc -288c : 08 > php ;save flags -288d : b50c > lda zpt,x -288f : dd2c02 > cmp rRORc,x ;test result - > trap_ne -2892 : d0fe > bne * ;failed not equal (non zero) - > -2894 : 68 > pla ;load status - > eor_flag $ff-fnzc -2895 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2897 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -289a : d0fe > bne * ;failed not equal (non zero) - > - -289c : ca dex -289d : 10e3 bpl trorc7 - next_test -289f : ad0002 > lda test_case ;previous test -28a2 : c920 > cmp #test_num - > trap_ne ;test is out of sequence -28a4 : d0fe > bne * ;failed not equal (non zero) - > -0021 = >test_num = test_num + 1 -28a6 : a921 > lda #test_num ;*** next tests' number -28a8 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; shifts - abs indexed -28ab : a203 ldx #3 -28ad : tasl8 - set_absx zp1,0 - > load_flag 0 -28ad : a900 > lda #0 ;allow test to change I-flag (no mask) - > -28af : 48 > pha ;use stack to load status -28b0 : b513 > lda zp1,x ;load to indexed memory -28b2 : 9d0302 > sta abst,x -28b5 : 28 > plp - -28b6 : 1e0302 asl abst,x - tst_absx rASL,fASL,0 -28b9 : 08 > php ;save flags -28ba : bd0302 > lda abst,x -28bd : dd2002 > cmp rASL,x ;test result - > trap_ne -28c0 : d0fe > bne * ;failed not equal (non zero) - > -28c2 : 68 > pla ;load status - > eor_flag 0 -28c3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -28c5 : dd3002 > cmp fASL,x ;test flags - > trap_ne -28c8 : d0fe > bne * ;failed not equal (non zero) - > - -28ca : ca dex -28cb : 10e0 bpl tasl8 -28cd : a203 ldx #3 -28cf : tasl9 - set_absx zp1,$ff - > load_flag $ff -28cf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -28d1 : 48 > pha ;use stack to load status -28d2 : b513 > lda zp1,x ;load to indexed memory -28d4 : 9d0302 > sta abst,x -28d7 : 28 > plp - -28d8 : 1e0302 asl abst,x - tst_absx rASL,fASL,$ff-fnzc -28db : 08 > php ;save flags -28dc : bd0302 > lda abst,x -28df : dd2002 > cmp rASL,x ;test result - > trap_ne -28e2 : d0fe > bne * ;failed not equal (non zero) - > -28e4 : 68 > pla ;load status - > eor_flag $ff-fnzc -28e5 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -28e7 : dd3002 > cmp fASL,x ;test flags - > trap_ne -28ea : d0fe > bne * ;failed not equal (non zero) - > - -28ec : ca dex -28ed : 10e0 bpl tasl9 - -28ef : a203 ldx #3 -28f1 : tlsr8 - set_absx zp1,0 - > load_flag 0 -28f1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -28f3 : 48 > pha ;use stack to load status -28f4 : b513 > lda zp1,x ;load to indexed memory -28f6 : 9d0302 > sta abst,x -28f9 : 28 > plp - -28fa : 5e0302 lsr abst,x - tst_absx rLSR,fLSR,0 -28fd : 08 > php ;save flags -28fe : bd0302 > lda abst,x -2901 : dd2802 > cmp rLSR,x ;test result - > trap_ne -2904 : d0fe > bne * ;failed not equal (non zero) - > -2906 : 68 > pla ;load status - > eor_flag 0 -2907 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2909 : dd3802 > cmp fLSR,x ;test flags - > trap_ne -290c : d0fe > bne * ;failed not equal (non zero) - > - -290e : ca dex -290f : 10e0 bpl tlsr8 -2911 : a203 ldx #3 -2913 : tlsr9 - set_absx zp1,$ff - > load_flag $ff -2913 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2915 : 48 > pha ;use stack to load status -2916 : b513 > lda zp1,x ;load to indexed memory -2918 : 9d0302 > sta abst,x -291b : 28 > plp - -291c : 5e0302 lsr abst,x - tst_absx rLSR,fLSR,$ff-fnzc -291f : 08 > php ;save flags -2920 : bd0302 > lda abst,x -2923 : dd2802 > cmp rLSR,x ;test result - > trap_ne -2926 : d0fe > bne * ;failed not equal (non zero) - > -2928 : 68 > pla ;load status - > eor_flag $ff-fnzc -2929 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -292b : dd3802 > cmp fLSR,x ;test flags - > trap_ne -292e : d0fe > bne * ;failed not equal (non zero) - > - -2930 : ca dex -2931 : 10e0 bpl tlsr9 - -2933 : a203 ldx #3 -2935 : trol8 - set_absx zp1,0 - > load_flag 0 -2935 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2937 : 48 > pha ;use stack to load status -2938 : b513 > lda zp1,x ;load to indexed memory -293a : 9d0302 > sta abst,x -293d : 28 > plp - -293e : 3e0302 rol abst,x - tst_absx rROL,fROL,0 -2941 : 08 > php ;save flags -2942 : bd0302 > lda abst,x -2945 : dd2002 > cmp rROL,x ;test result - > trap_ne -2948 : d0fe > bne * ;failed not equal (non zero) - > -294a : 68 > pla ;load status - > eor_flag 0 -294b : 4930 > eor #0|fao ;invert expected flags + always on bits - > -294d : dd3002 > cmp fROL,x ;test flags - > trap_ne -2950 : d0fe > bne * ;failed not equal (non zero) - > - -2952 : ca dex -2953 : 10e0 bpl trol8 -2955 : a203 ldx #3 -2957 : trol9 - set_absx zp1,$ff-fc - > load_flag $ff-fc -2957 : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -2959 : 48 > pha ;use stack to load status -295a : b513 > lda zp1,x ;load to indexed memory -295c : 9d0302 > sta abst,x -295f : 28 > plp - -2960 : 3e0302 rol abst,x - tst_absx rROL,fROL,$ff-fnzc -2963 : 08 > php ;save flags -2964 : bd0302 > lda abst,x -2967 : dd2002 > cmp rROL,x ;test result - > trap_ne -296a : d0fe > bne * ;failed not equal (non zero) - > -296c : 68 > pla ;load status - > eor_flag $ff-fnzc -296d : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -296f : dd3002 > cmp fROL,x ;test flags - > trap_ne -2972 : d0fe > bne * ;failed not equal (non zero) - > - -2974 : ca dex -2975 : 10e0 bpl trol9 - -2977 : a203 ldx #3 -2979 : trolc8 - set_absx zp1,fc - > load_flag fc -2979 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -297b : 48 > pha ;use stack to load status -297c : b513 > lda zp1,x ;load to indexed memory -297e : 9d0302 > sta abst,x -2981 : 28 > plp - -2982 : 3e0302 rol abst,x - tst_absx rROLc,fROLc,0 -2985 : 08 > php ;save flags -2986 : bd0302 > lda abst,x -2989 : dd2402 > cmp rROLc,x ;test result - > trap_ne -298c : d0fe > bne * ;failed not equal (non zero) - > -298e : 68 > pla ;load status - > eor_flag 0 -298f : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2991 : dd3402 > cmp fROLc,x ;test flags - > trap_ne -2994 : d0fe > bne * ;failed not equal (non zero) - > - -2996 : ca dex -2997 : 10e0 bpl trolc8 -2999 : a203 ldx #3 -299b : trolc9 - set_absx zp1,$ff - > load_flag $ff -299b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -299d : 48 > pha ;use stack to load status -299e : b513 > lda zp1,x ;load to indexed memory -29a0 : 9d0302 > sta abst,x -29a3 : 28 > plp - -29a4 : 3e0302 rol abst,x - tst_absx rROLc,fROLc,$ff-fnzc -29a7 : 08 > php ;save flags -29a8 : bd0302 > lda abst,x -29ab : dd2402 > cmp rROLc,x ;test result - > trap_ne -29ae : d0fe > bne * ;failed not equal (non zero) - > -29b0 : 68 > pla ;load status - > eor_flag $ff-fnzc -29b1 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -29b3 : dd3402 > cmp fROLc,x ;test flags - > trap_ne -29b6 : d0fe > bne * ;failed not equal (non zero) - > - -29b8 : ca dex -29b9 : 10e0 bpl trolc9 - -29bb : a203 ldx #3 -29bd : tror8 - set_absx zp1,0 - > load_flag 0 -29bd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -29bf : 48 > pha ;use stack to load status -29c0 : b513 > lda zp1,x ;load to indexed memory -29c2 : 9d0302 > sta abst,x -29c5 : 28 > plp - -29c6 : 7e0302 ror abst,x - tst_absx rROR,fROR,0 -29c9 : 08 > php ;save flags -29ca : bd0302 > lda abst,x -29cd : dd2802 > cmp rROR,x ;test result - > trap_ne -29d0 : d0fe > bne * ;failed not equal (non zero) - > -29d2 : 68 > pla ;load status - > eor_flag 0 -29d3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -29d5 : dd3802 > cmp fROR,x ;test flags - > trap_ne -29d8 : d0fe > bne * ;failed not equal (non zero) - > - -29da : ca dex -29db : 10e0 bpl tror8 -29dd : a203 ldx #3 -29df : tror9 - set_absx zp1,$ff-fc - > load_flag $ff-fc -29df : a9fe > lda #$ff-fc ;allow test to change I-flag (no mask) - > -29e1 : 48 > pha ;use stack to load status -29e2 : b513 > lda zp1,x ;load to indexed memory -29e4 : 9d0302 > sta abst,x -29e7 : 28 > plp - -29e8 : 7e0302 ror abst,x - tst_absx rROR,fROR,$ff-fnzc -29eb : 08 > php ;save flags -29ec : bd0302 > lda abst,x -29ef : dd2802 > cmp rROR,x ;test result - > trap_ne -29f2 : d0fe > bne * ;failed not equal (non zero) - > -29f4 : 68 > pla ;load status - > eor_flag $ff-fnzc -29f5 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -29f7 : dd3802 > cmp fROR,x ;test flags - > trap_ne -29fa : d0fe > bne * ;failed not equal (non zero) - > - -29fc : ca dex -29fd : 10e0 bpl tror9 - -29ff : a203 ldx #3 -2a01 : trorc8 - set_absx zp1,fc - > load_flag fc -2a01 : a901 > lda #fc ;allow test to change I-flag (no mask) - > -2a03 : 48 > pha ;use stack to load status -2a04 : b513 > lda zp1,x ;load to indexed memory -2a06 : 9d0302 > sta abst,x -2a09 : 28 > plp - -2a0a : 7e0302 ror abst,x - tst_absx rRORc,fRORc,0 -2a0d : 08 > php ;save flags -2a0e : bd0302 > lda abst,x -2a11 : dd2c02 > cmp rRORc,x ;test result - > trap_ne -2a14 : d0fe > bne * ;failed not equal (non zero) - > -2a16 : 68 > pla ;load status - > eor_flag 0 -2a17 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2a19 : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -2a1c : d0fe > bne * ;failed not equal (non zero) - > - -2a1e : ca dex -2a1f : 10e0 bpl trorc8 -2a21 : a203 ldx #3 -2a23 : trorc9 - set_absx zp1,$ff - > load_flag $ff -2a23 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2a25 : 48 > pha ;use stack to load status -2a26 : b513 > lda zp1,x ;load to indexed memory -2a28 : 9d0302 > sta abst,x -2a2b : 28 > plp - -2a2c : 7e0302 ror abst,x - tst_absx rRORc,fRORc,$ff-fnzc -2a2f : 08 > php ;save flags -2a30 : bd0302 > lda abst,x -2a33 : dd2c02 > cmp rRORc,x ;test result - > trap_ne -2a36 : d0fe > bne * ;failed not equal (non zero) - > -2a38 : 68 > pla ;load status - > eor_flag $ff-fnzc -2a39 : 497c > eor #$ff-fnzc|fao ;invert expected flags + always on bits - > -2a3b : dd3c02 > cmp fRORc,x ;test flags - > trap_ne -2a3e : d0fe > bne * ;failed not equal (non zero) - > - -2a40 : ca dex -2a41 : 10e0 bpl trorc9 - next_test -2a43 : ad0002 > lda test_case ;previous test -2a46 : c921 > cmp #test_num - > trap_ne ;test is out of sequence -2a48 : d0fe > bne * ;failed not equal (non zero) - > -0022 = >test_num = test_num + 1 -2a4a : a922 > lda #test_num ;*** next tests' number -2a4c : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing memory increment/decrement - INC DEC all addressing modes - ; zeropage -2a4f : a200 ldx #0 -2a51 : a97e lda #$7e -2a53 : 850c sta zpt -2a55 : tinc - set_stat 0 - > load_flag 0 -2a55 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2a57 : 48 > pha ;use stack to load status -2a58 : 28 > plp - -2a59 : e60c inc zpt - tst_z rINC,fINC,0 -2a5b : 08 > php ;save flags -2a5c : a50c > lda zpt -2a5e : dd4002 > cmp rINC,x ;test result - > trap_ne -2a61 : d0fe > bne * ;failed not equal (non zero) - > -2a63 : 68 > pla ;load status - > eor_flag 0 -2a64 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2a66 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2a69 : d0fe > bne * ;failed not equal (non zero) - > - -2a6b : e8 inx -2a6c : e002 cpx #2 -2a6e : d004 bne tinc1 -2a70 : a9fe lda #$fe -2a72 : 850c sta zpt -2a74 : e005 tinc1 cpx #5 -2a76 : d0dd bne tinc -2a78 : ca dex -2a79 : e60c inc zpt -2a7b : tdec - set_stat 0 - > load_flag 0 -2a7b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2a7d : 48 > pha ;use stack to load status -2a7e : 28 > plp - -2a7f : c60c dec zpt - tst_z rINC,fINC,0 -2a81 : 08 > php ;save flags -2a82 : a50c > lda zpt -2a84 : dd4002 > cmp rINC,x ;test result - > trap_ne -2a87 : d0fe > bne * ;failed not equal (non zero) - > -2a89 : 68 > pla ;load status - > eor_flag 0 -2a8a : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2a8c : dd4502 > cmp fINC,x ;test flags - > trap_ne -2a8f : d0fe > bne * ;failed not equal (non zero) - > - -2a91 : ca dex -2a92 : 300a bmi tdec1 -2a94 : e001 cpx #1 -2a96 : d0e3 bne tdec -2a98 : a981 lda #$81 -2a9a : 850c sta zpt -2a9c : d0dd bne tdec -2a9e : tdec1 -2a9e : a200 ldx #0 -2aa0 : a97e lda #$7e -2aa2 : 850c sta zpt -2aa4 : tinc10 - set_stat $ff - > load_flag $ff -2aa4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2aa6 : 48 > pha ;use stack to load status -2aa7 : 28 > plp - -2aa8 : e60c inc zpt - tst_z rINC,fINC,$ff-fnz -2aaa : 08 > php ;save flags -2aab : a50c > lda zpt -2aad : dd4002 > cmp rINC,x ;test result - > trap_ne -2ab0 : d0fe > bne * ;failed not equal (non zero) - > -2ab2 : 68 > pla ;load status - > eor_flag $ff-fnz -2ab3 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2ab5 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2ab8 : d0fe > bne * ;failed not equal (non zero) - > - -2aba : e8 inx -2abb : e002 cpx #2 -2abd : d004 bne tinc11 -2abf : a9fe lda #$fe -2ac1 : 850c sta zpt -2ac3 : e005 tinc11 cpx #5 -2ac5 : d0dd bne tinc10 -2ac7 : ca dex -2ac8 : e60c inc zpt -2aca : tdec10 - set_stat $ff - > load_flag $ff -2aca : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2acc : 48 > pha ;use stack to load status -2acd : 28 > plp - -2ace : c60c dec zpt - tst_z rINC,fINC,$ff-fnz -2ad0 : 08 > php ;save flags -2ad1 : a50c > lda zpt -2ad3 : dd4002 > cmp rINC,x ;test result - > trap_ne -2ad6 : d0fe > bne * ;failed not equal (non zero) - > -2ad8 : 68 > pla ;load status - > eor_flag $ff-fnz -2ad9 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2adb : dd4502 > cmp fINC,x ;test flags - > trap_ne -2ade : d0fe > bne * ;failed not equal (non zero) - > - -2ae0 : ca dex -2ae1 : 300a bmi tdec11 -2ae3 : e001 cpx #1 -2ae5 : d0e3 bne tdec10 -2ae7 : a981 lda #$81 -2ae9 : 850c sta zpt -2aeb : d0dd bne tdec10 -2aed : tdec11 - next_test -2aed : ad0002 > lda test_case ;previous test -2af0 : c922 > cmp #test_num - > trap_ne ;test is out of sequence -2af2 : d0fe > bne * ;failed not equal (non zero) - > -0023 = >test_num = test_num + 1 -2af4 : a923 > lda #test_num ;*** next tests' number -2af6 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; absolute memory -2af9 : a200 ldx #0 -2afb : a97e lda #$7e -2afd : 8d0302 sta abst -2b00 : tinc2 - set_stat 0 - > load_flag 0 -2b00 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2b02 : 48 > pha ;use stack to load status -2b03 : 28 > plp - -2b04 : ee0302 inc abst - tst_abs rINC,fINC,0 -2b07 : 08 > php ;save flags -2b08 : ad0302 > lda abst -2b0b : dd4002 > cmp rINC,x ;test result - > trap_ne -2b0e : d0fe > bne * ;failed not equal (non zero) - > -2b10 : 68 > pla ;load status - > eor_flag 0 -2b11 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2b13 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2b16 : d0fe > bne * ;failed not equal (non zero) - > - -2b18 : e8 inx -2b19 : e002 cpx #2 -2b1b : d005 bne tinc3 -2b1d : a9fe lda #$fe -2b1f : 8d0302 sta abst -2b22 : e005 tinc3 cpx #5 -2b24 : d0da bne tinc2 -2b26 : ca dex -2b27 : ee0302 inc abst -2b2a : tdec2 - set_stat 0 - > load_flag 0 -2b2a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2b2c : 48 > pha ;use stack to load status -2b2d : 28 > plp - -2b2e : ce0302 dec abst - tst_abs rINC,fINC,0 -2b31 : 08 > php ;save flags -2b32 : ad0302 > lda abst -2b35 : dd4002 > cmp rINC,x ;test result - > trap_ne -2b38 : d0fe > bne * ;failed not equal (non zero) - > -2b3a : 68 > pla ;load status - > eor_flag 0 -2b3b : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2b3d : dd4502 > cmp fINC,x ;test flags - > trap_ne -2b40 : d0fe > bne * ;failed not equal (non zero) - > - -2b42 : ca dex -2b43 : 300b bmi tdec3 -2b45 : e001 cpx #1 -2b47 : d0e1 bne tdec2 -2b49 : a981 lda #$81 -2b4b : 8d0302 sta abst -2b4e : d0da bne tdec2 -2b50 : tdec3 -2b50 : a200 ldx #0 -2b52 : a97e lda #$7e -2b54 : 8d0302 sta abst -2b57 : tinc12 - set_stat $ff - > load_flag $ff -2b57 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2b59 : 48 > pha ;use stack to load status -2b5a : 28 > plp - -2b5b : ee0302 inc abst - tst_abs rINC,fINC,$ff-fnz -2b5e : 08 > php ;save flags -2b5f : ad0302 > lda abst -2b62 : dd4002 > cmp rINC,x ;test result - > trap_ne -2b65 : d0fe > bne * ;failed not equal (non zero) - > -2b67 : 68 > pla ;load status - > eor_flag $ff-fnz -2b68 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2b6a : dd4502 > cmp fINC,x ;test flags - > trap_ne -2b6d : d0fe > bne * ;failed not equal (non zero) - > - -2b6f : e8 inx -2b70 : e002 cpx #2 -2b72 : d005 bne tinc13 -2b74 : a9fe lda #$fe -2b76 : 8d0302 sta abst -2b79 : e005 tinc13 cpx #5 -2b7b : d0da bne tinc12 -2b7d : ca dex -2b7e : ee0302 inc abst -2b81 : tdec12 - set_stat $ff - > load_flag $ff -2b81 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2b83 : 48 > pha ;use stack to load status -2b84 : 28 > plp - -2b85 : ce0302 dec abst - tst_abs rINC,fINC,$ff-fnz -2b88 : 08 > php ;save flags -2b89 : ad0302 > lda abst -2b8c : dd4002 > cmp rINC,x ;test result - > trap_ne -2b8f : d0fe > bne * ;failed not equal (non zero) - > -2b91 : 68 > pla ;load status - > eor_flag $ff-fnz -2b92 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2b94 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2b97 : d0fe > bne * ;failed not equal (non zero) - > - -2b99 : ca dex -2b9a : 300b bmi tdec13 -2b9c : e001 cpx #1 -2b9e : d0e1 bne tdec12 -2ba0 : a981 lda #$81 -2ba2 : 8d0302 sta abst -2ba5 : d0da bne tdec12 -2ba7 : tdec13 - next_test -2ba7 : ad0002 > lda test_case ;previous test -2baa : c923 > cmp #test_num - > trap_ne ;test is out of sequence -2bac : d0fe > bne * ;failed not equal (non zero) - > -0024 = >test_num = test_num + 1 -2bae : a924 > lda #test_num ;*** next tests' number -2bb0 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; zeropage indexed -2bb3 : a200 ldx #0 -2bb5 : a97e lda #$7e -2bb7 : 950c tinc4 sta zpt,x - set_stat 0 - > load_flag 0 -2bb9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2bbb : 48 > pha ;use stack to load status -2bbc : 28 > plp - -2bbd : f60c inc zpt,x - tst_zx rINC,fINC,0 -2bbf : 08 > php ;save flags -2bc0 : b50c > lda zpt,x -2bc2 : dd4002 > cmp rINC,x ;test result - > trap_ne -2bc5 : d0fe > bne * ;failed not equal (non zero) - > -2bc7 : 68 > pla ;load status - > eor_flag 0 -2bc8 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2bca : dd4502 > cmp fINC,x ;test flags - > trap_ne -2bcd : d0fe > bne * ;failed not equal (non zero) - > - -2bcf : b50c lda zpt,x -2bd1 : e8 inx -2bd2 : e002 cpx #2 -2bd4 : d002 bne tinc5 -2bd6 : a9fe lda #$fe -2bd8 : e005 tinc5 cpx #5 -2bda : d0db bne tinc4 -2bdc : ca dex -2bdd : a902 lda #2 -2bdf : 950c tdec4 sta zpt,x - set_stat 0 - > load_flag 0 -2be1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2be3 : 48 > pha ;use stack to load status -2be4 : 28 > plp - -2be5 : d60c dec zpt,x - tst_zx rINC,fINC,0 -2be7 : 08 > php ;save flags -2be8 : b50c > lda zpt,x -2bea : dd4002 > cmp rINC,x ;test result - > trap_ne -2bed : d0fe > bne * ;failed not equal (non zero) - > -2bef : 68 > pla ;load status - > eor_flag 0 -2bf0 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2bf2 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2bf5 : d0fe > bne * ;failed not equal (non zero) - > - -2bf7 : b50c lda zpt,x -2bf9 : ca dex -2bfa : 3008 bmi tdec5 -2bfc : e001 cpx #1 -2bfe : d0df bne tdec4 -2c00 : a981 lda #$81 -2c02 : d0db bne tdec4 -2c04 : tdec5 -2c04 : a200 ldx #0 -2c06 : a97e lda #$7e -2c08 : 950c tinc14 sta zpt,x - set_stat $ff - > load_flag $ff -2c0a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2c0c : 48 > pha ;use stack to load status -2c0d : 28 > plp - -2c0e : f60c inc zpt,x - tst_zx rINC,fINC,$ff-fnz -2c10 : 08 > php ;save flags -2c11 : b50c > lda zpt,x -2c13 : dd4002 > cmp rINC,x ;test result - > trap_ne -2c16 : d0fe > bne * ;failed not equal (non zero) - > -2c18 : 68 > pla ;load status - > eor_flag $ff-fnz -2c19 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2c1b : dd4502 > cmp fINC,x ;test flags - > trap_ne -2c1e : d0fe > bne * ;failed not equal (non zero) - > - -2c20 : b50c lda zpt,x -2c22 : e8 inx -2c23 : e002 cpx #2 -2c25 : d002 bne tinc15 -2c27 : a9fe lda #$fe -2c29 : e005 tinc15 cpx #5 -2c2b : d0db bne tinc14 -2c2d : ca dex -2c2e : a902 lda #2 -2c30 : 950c tdec14 sta zpt,x - set_stat $ff - > load_flag $ff -2c32 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2c34 : 48 > pha ;use stack to load status -2c35 : 28 > plp - -2c36 : d60c dec zpt,x - tst_zx rINC,fINC,$ff-fnz -2c38 : 08 > php ;save flags -2c39 : b50c > lda zpt,x -2c3b : dd4002 > cmp rINC,x ;test result - > trap_ne -2c3e : d0fe > bne * ;failed not equal (non zero) - > -2c40 : 68 > pla ;load status - > eor_flag $ff-fnz -2c41 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2c43 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2c46 : d0fe > bne * ;failed not equal (non zero) - > - -2c48 : b50c lda zpt,x -2c4a : ca dex -2c4b : 3008 bmi tdec15 -2c4d : e001 cpx #1 -2c4f : d0df bne tdec14 -2c51 : a981 lda #$81 -2c53 : d0db bne tdec14 -2c55 : tdec15 - next_test -2c55 : ad0002 > lda test_case ;previous test -2c58 : c924 > cmp #test_num - > trap_ne ;test is out of sequence -2c5a : d0fe > bne * ;failed not equal (non zero) - > -0025 = >test_num = test_num + 1 -2c5c : a925 > lda #test_num ;*** next tests' number -2c5e : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; memory indexed -2c61 : a200 ldx #0 -2c63 : a97e lda #$7e -2c65 : 9d0302 tinc6 sta abst,x - set_stat 0 - > load_flag 0 -2c68 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2c6a : 48 > pha ;use stack to load status -2c6b : 28 > plp - -2c6c : fe0302 inc abst,x - tst_absx rINC,fINC,0 -2c6f : 08 > php ;save flags -2c70 : bd0302 > lda abst,x -2c73 : dd4002 > cmp rINC,x ;test result - > trap_ne -2c76 : d0fe > bne * ;failed not equal (non zero) - > -2c78 : 68 > pla ;load status - > eor_flag 0 -2c79 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2c7b : dd4502 > cmp fINC,x ;test flags - > trap_ne -2c7e : d0fe > bne * ;failed not equal (non zero) - > - -2c80 : bd0302 lda abst,x -2c83 : e8 inx -2c84 : e002 cpx #2 -2c86 : d002 bne tinc7 -2c88 : a9fe lda #$fe -2c8a : e005 tinc7 cpx #5 -2c8c : d0d7 bne tinc6 -2c8e : ca dex -2c8f : a902 lda #2 -2c91 : 9d0302 tdec6 sta abst,x - set_stat 0 - > load_flag 0 -2c94 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2c96 : 48 > pha ;use stack to load status -2c97 : 28 > plp - -2c98 : de0302 dec abst,x - tst_absx rINC,fINC,0 -2c9b : 08 > php ;save flags -2c9c : bd0302 > lda abst,x -2c9f : dd4002 > cmp rINC,x ;test result - > trap_ne -2ca2 : d0fe > bne * ;failed not equal (non zero) - > -2ca4 : 68 > pla ;load status - > eor_flag 0 -2ca5 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2ca7 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2caa : d0fe > bne * ;failed not equal (non zero) - > - -2cac : bd0302 lda abst,x -2caf : ca dex -2cb0 : 3008 bmi tdec7 -2cb2 : e001 cpx #1 -2cb4 : d0db bne tdec6 -2cb6 : a981 lda #$81 -2cb8 : d0d7 bne tdec6 -2cba : tdec7 -2cba : a200 ldx #0 -2cbc : a97e lda #$7e -2cbe : 9d0302 tinc16 sta abst,x - set_stat $ff - > load_flag $ff -2cc1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2cc3 : 48 > pha ;use stack to load status -2cc4 : 28 > plp - -2cc5 : fe0302 inc abst,x - tst_absx rINC,fINC,$ff-fnz -2cc8 : 08 > php ;save flags -2cc9 : bd0302 > lda abst,x -2ccc : dd4002 > cmp rINC,x ;test result - > trap_ne -2ccf : d0fe > bne * ;failed not equal (non zero) - > -2cd1 : 68 > pla ;load status - > eor_flag $ff-fnz -2cd2 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2cd4 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2cd7 : d0fe > bne * ;failed not equal (non zero) - > - -2cd9 : bd0302 lda abst,x -2cdc : e8 inx -2cdd : e002 cpx #2 -2cdf : d002 bne tinc17 -2ce1 : a9fe lda #$fe -2ce3 : e005 tinc17 cpx #5 -2ce5 : d0d7 bne tinc16 -2ce7 : ca dex -2ce8 : a902 lda #2 -2cea : 9d0302 tdec16 sta abst,x - set_stat $ff - > load_flag $ff -2ced : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2cef : 48 > pha ;use stack to load status -2cf0 : 28 > plp - -2cf1 : de0302 dec abst,x - tst_absx rINC,fINC,$ff-fnz -2cf4 : 08 > php ;save flags -2cf5 : bd0302 > lda abst,x -2cf8 : dd4002 > cmp rINC,x ;test result - > trap_ne -2cfb : d0fe > bne * ;failed not equal (non zero) - > -2cfd : 68 > pla ;load status - > eor_flag $ff-fnz -2cfe : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2d00 : dd4502 > cmp fINC,x ;test flags - > trap_ne -2d03 : d0fe > bne * ;failed not equal (non zero) - > - -2d05 : bd0302 lda abst,x -2d08 : ca dex -2d09 : 3008 bmi tdec17 -2d0b : e001 cpx #1 -2d0d : d0db bne tdec16 -2d0f : a981 lda #$81 -2d11 : d0d7 bne tdec16 -2d13 : tdec17 - next_test -2d13 : ad0002 > lda test_case ;previous test -2d16 : c925 > cmp #test_num - > trap_ne ;test is out of sequence -2d18 : d0fe > bne * ;failed not equal (non zero) - > -0026 = >test_num = test_num + 1 -2d1a : a926 > lda #test_num ;*** next tests' number -2d1c : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing logical instructions - AND EOR ORA all addressing modes - ; AND -2d1f : a203 ldx #3 ;immediate -2d21 : b51c tand lda zpAN,x -2d23 : 8d0902 sta ex_andi+1 ;set AND # operand - set_ax absANa,0 - > load_flag 0 -2d26 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2d28 : 48 > pha ;use stack to load status -2d29 : bd5a02 > lda absANa,x ;precharge accu -2d2c : 28 > plp - -2d2d : 200802 jsr ex_andi ;execute AND # in RAM - tst_ax absrlo,absflo,0 -2d30 : 08 > php ;save flags -2d31 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2d34 : d0fe > bne * ;failed not equal (non zero) - > -2d36 : 68 > pla ;load status - > eor_flag 0 -2d37 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2d39 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2d3c : d0fe > bne * ;failed not equal (non zero) - > - -2d3e : ca dex -2d3f : 10e0 bpl tand -2d41 : a203 ldx #3 -2d43 : b51c tand1 lda zpAN,x -2d45 : 8d0902 sta ex_andi+1 ;set AND # operand - set_ax absANa,$ff - > load_flag $ff -2d48 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2d4a : 48 > pha ;use stack to load status -2d4b : bd5a02 > lda absANa,x ;precharge accu -2d4e : 28 > plp - -2d4f : 200802 jsr ex_andi ;execute AND # in RAM - tst_ax absrlo,absflo,$ff-fnz -2d52 : 08 > php ;save flags -2d53 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2d56 : d0fe > bne * ;failed not equal (non zero) - > -2d58 : 68 > pla ;load status - > eor_flag $ff-fnz -2d59 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2d5b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2d5e : d0fe > bne * ;failed not equal (non zero) - > - -2d60 : ca dex -2d61 : 10e0 bpl tand1 - -2d63 : a203 ldx #3 ;zp -2d65 : b51c tand2 lda zpAN,x -2d67 : 850c sta zpt - set_ax absANa,0 - > load_flag 0 -2d69 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2d6b : 48 > pha ;use stack to load status -2d6c : bd5a02 > lda absANa,x ;precharge accu -2d6f : 28 > plp - -2d70 : 250c and zpt - tst_ax absrlo,absflo,0 -2d72 : 08 > php ;save flags -2d73 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2d76 : d0fe > bne * ;failed not equal (non zero) - > -2d78 : 68 > pla ;load status - > eor_flag 0 -2d79 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2d7b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2d7e : d0fe > bne * ;failed not equal (non zero) - > - -2d80 : ca dex -2d81 : 10e2 bpl tand2 -2d83 : a203 ldx #3 -2d85 : b51c tand3 lda zpAN,x -2d87 : 850c sta zpt - set_ax absANa,$ff - > load_flag $ff -2d89 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2d8b : 48 > pha ;use stack to load status -2d8c : bd5a02 > lda absANa,x ;precharge accu -2d8f : 28 > plp - -2d90 : 250c and zpt - tst_ax absrlo,absflo,$ff-fnz -2d92 : 08 > php ;save flags -2d93 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2d96 : d0fe > bne * ;failed not equal (non zero) - > -2d98 : 68 > pla ;load status - > eor_flag $ff-fnz -2d99 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2d9b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2d9e : d0fe > bne * ;failed not equal (non zero) - > - -2da0 : ca dex -2da1 : 10e2 bpl tand3 - -2da3 : a203 ldx #3 ;abs -2da5 : b51c tand4 lda zpAN,x -2da7 : 8d0302 sta abst - set_ax absANa,0 - > load_flag 0 -2daa : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2dac : 48 > pha ;use stack to load status -2dad : bd5a02 > lda absANa,x ;precharge accu -2db0 : 28 > plp - -2db1 : 2d0302 and abst - tst_ax absrlo,absflo,0 -2db4 : 08 > php ;save flags -2db5 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2db8 : d0fe > bne * ;failed not equal (non zero) - > -2dba : 68 > pla ;load status - > eor_flag 0 -2dbb : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2dbd : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2dc0 : d0fe > bne * ;failed not equal (non zero) - > - -2dc2 : ca dex -2dc3 : 10e0 bpl tand4 -2dc5 : a203 ldx #3 -2dc7 : b51c tand5 lda zpAN,x -2dc9 : 8d0302 sta abst - set_ax absANa,$ff - > load_flag $ff -2dcc : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2dce : 48 > pha ;use stack to load status -2dcf : bd5a02 > lda absANa,x ;precharge accu -2dd2 : 28 > plp - -2dd3 : 2d0302 and abst - tst_ax absrlo,absflo,$ff-fnz -2dd6 : 08 > php ;save flags -2dd7 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2dda : d0fe > bne * ;failed not equal (non zero) - > -2ddc : 68 > pla ;load status - > eor_flag $ff-fnz -2ddd : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2ddf : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2de2 : d0fe > bne * ;failed not equal (non zero) - > - -2de4 : ca dex -2de5 : 1002 bpl tand6 - -2de7 : a203 ldx #3 ;zp,x -2de9 : tand6 - set_ax absANa,0 - > load_flag 0 -2de9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2deb : 48 > pha ;use stack to load status -2dec : bd5a02 > lda absANa,x ;precharge accu -2def : 28 > plp - -2df0 : 351c and zpAN,x - tst_ax absrlo,absflo,0 -2df2 : 08 > php ;save flags -2df3 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2df6 : d0fe > bne * ;failed not equal (non zero) - > -2df8 : 68 > pla ;load status - > eor_flag 0 -2df9 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2dfb : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2dfe : d0fe > bne * ;failed not equal (non zero) - > - -2e00 : ca dex -2e01 : 10e6 bpl tand6 -2e03 : a203 ldx #3 -2e05 : tand7 - set_ax absANa,$ff - > load_flag $ff -2e05 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2e07 : 48 > pha ;use stack to load status -2e08 : bd5a02 > lda absANa,x ;precharge accu -2e0b : 28 > plp - -2e0c : 351c and zpAN,x - tst_ax absrlo,absflo,$ff-fnz -2e0e : 08 > php ;save flags -2e0f : dd6202 > cmp absrlo,x ;test result - > trap_ne -2e12 : d0fe > bne * ;failed not equal (non zero) - > -2e14 : 68 > pla ;load status - > eor_flag $ff-fnz -2e15 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2e17 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2e1a : d0fe > bne * ;failed not equal (non zero) - > - -2e1c : ca dex -2e1d : 10e6 bpl tand7 - -2e1f : a203 ldx #3 ;abs,x -2e21 : tand8 - set_ax absANa,0 - > load_flag 0 -2e21 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2e23 : 48 > pha ;use stack to load status -2e24 : bd5a02 > lda absANa,x ;precharge accu -2e27 : 28 > plp - -2e28 : 3d4e02 and absAN,x - tst_ax absrlo,absflo,0 -2e2b : 08 > php ;save flags -2e2c : dd6202 > cmp absrlo,x ;test result - > trap_ne -2e2f : d0fe > bne * ;failed not equal (non zero) - > -2e31 : 68 > pla ;load status - > eor_flag 0 -2e32 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2e34 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2e37 : d0fe > bne * ;failed not equal (non zero) - > - -2e39 : ca dex -2e3a : 10e5 bpl tand8 -2e3c : a203 ldx #3 -2e3e : tand9 - set_ax absANa,$ff - > load_flag $ff -2e3e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2e40 : 48 > pha ;use stack to load status -2e41 : bd5a02 > lda absANa,x ;precharge accu -2e44 : 28 > plp - -2e45 : 3d4e02 and absAN,x - tst_ax absrlo,absflo,$ff-fnz -2e48 : 08 > php ;save flags -2e49 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2e4c : d0fe > bne * ;failed not equal (non zero) - > -2e4e : 68 > pla ;load status - > eor_flag $ff-fnz -2e4f : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2e51 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2e54 : d0fe > bne * ;failed not equal (non zero) - > - -2e56 : ca dex -2e57 : 10e5 bpl tand9 - -2e59 : a003 ldy #3 ;abs,y -2e5b : tand10 - set_ay absANa,0 - > load_flag 0 -2e5b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2e5d : 48 > pha ;use stack to load status -2e5e : b95a02 > lda absANa,y ;precharge accu -2e61 : 28 > plp - -2e62 : 394e02 and absAN,y - tst_ay absrlo,absflo,0 -2e65 : 08 > php ;save flags -2e66 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2e69 : d0fe > bne * ;failed not equal (non zero) - > -2e6b : 68 > pla ;load status - > eor_flag 0 -2e6c : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2e6e : d96602 > cmp absflo,y ;test flags - > trap_ne -2e71 : d0fe > bne * ;failed not equal (non zero) - > - -2e73 : 88 dey -2e74 : 10e5 bpl tand10 -2e76 : a003 ldy #3 -2e78 : tand11 - set_ay absANa,$ff - > load_flag $ff -2e78 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2e7a : 48 > pha ;use stack to load status -2e7b : b95a02 > lda absANa,y ;precharge accu -2e7e : 28 > plp - -2e7f : 394e02 and absAN,y - tst_ay absrlo,absflo,$ff-fnz -2e82 : 08 > php ;save flags -2e83 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2e86 : d0fe > bne * ;failed not equal (non zero) - > -2e88 : 68 > pla ;load status - > eor_flag $ff-fnz -2e89 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2e8b : d96602 > cmp absflo,y ;test flags - > trap_ne -2e8e : d0fe > bne * ;failed not equal (non zero) - > - -2e90 : 88 dey -2e91 : 10e5 bpl tand11 - -2e93 : a206 ldx #6 ;(zp,x) -2e95 : a003 ldy #3 -2e97 : tand12 - set_ay absANa,0 - > load_flag 0 -2e97 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2e99 : 48 > pha ;use stack to load status -2e9a : b95a02 > lda absANa,y ;precharge accu -2e9d : 28 > plp - -2e9e : 213a and (indAN,x) - tst_ay absrlo,absflo,0 -2ea0 : 08 > php ;save flags -2ea1 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2ea4 : d0fe > bne * ;failed not equal (non zero) - > -2ea6 : 68 > pla ;load status - > eor_flag 0 -2ea7 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2ea9 : d96602 > cmp absflo,y ;test flags - > trap_ne -2eac : d0fe > bne * ;failed not equal (non zero) - > - -2eae : ca dex -2eaf : ca dex -2eb0 : 88 dey -2eb1 : 10e4 bpl tand12 -2eb3 : a206 ldx #6 -2eb5 : a003 ldy #3 -2eb7 : tand13 - set_ay absANa,$ff - > load_flag $ff -2eb7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2eb9 : 48 > pha ;use stack to load status -2eba : b95a02 > lda absANa,y ;precharge accu -2ebd : 28 > plp - -2ebe : 213a and (indAN,x) - tst_ay absrlo,absflo,$ff-fnz -2ec0 : 08 > php ;save flags -2ec1 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2ec4 : d0fe > bne * ;failed not equal (non zero) - > -2ec6 : 68 > pla ;load status - > eor_flag $ff-fnz -2ec7 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2ec9 : d96602 > cmp absflo,y ;test flags - > trap_ne -2ecc : d0fe > bne * ;failed not equal (non zero) - > - -2ece : ca dex -2ecf : ca dex -2ed0 : 88 dey -2ed1 : 10e4 bpl tand13 - -2ed3 : a003 ldy #3 ;(zp),y -2ed5 : tand14 - set_ay absANa,0 - > load_flag 0 -2ed5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2ed7 : 48 > pha ;use stack to load status -2ed8 : b95a02 > lda absANa,y ;precharge accu -2edb : 28 > plp - -2edc : 313a and (indAN),y - tst_ay absrlo,absflo,0 -2ede : 08 > php ;save flags -2edf : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2ee2 : d0fe > bne * ;failed not equal (non zero) - > -2ee4 : 68 > pla ;load status - > eor_flag 0 -2ee5 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2ee7 : d96602 > cmp absflo,y ;test flags - > trap_ne -2eea : d0fe > bne * ;failed not equal (non zero) - > - -2eec : 88 dey -2eed : 10e6 bpl tand14 -2eef : a003 ldy #3 -2ef1 : tand15 - set_ay absANa,$ff - > load_flag $ff -2ef1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2ef3 : 48 > pha ;use stack to load status -2ef4 : b95a02 > lda absANa,y ;precharge accu -2ef7 : 28 > plp - -2ef8 : 313a and (indAN),y - tst_ay absrlo,absflo,$ff-fnz -2efa : 08 > php ;save flags -2efb : d96202 > cmp absrlo,y ;test result - > trap_ne ; -2efe : d0fe > bne * ;failed not equal (non zero) - > -2f00 : 68 > pla ;load status - > eor_flag $ff-fnz -2f01 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2f03 : d96602 > cmp absflo,y ;test flags - > trap_ne -2f06 : d0fe > bne * ;failed not equal (non zero) - > - -2f08 : 88 dey -2f09 : 10e6 bpl tand15 - next_test -2f0b : ad0002 > lda test_case ;previous test -2f0e : c926 > cmp #test_num - > trap_ne ;test is out of sequence -2f10 : d0fe > bne * ;failed not equal (non zero) - > -0027 = >test_num = test_num + 1 -2f12 : a927 > lda #test_num ;*** next tests' number -2f14 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; EOR -2f17 : a203 ldx #3 ;immediate - self modifying code -2f19 : b520 teor lda zpEO,x -2f1b : 8d0c02 sta ex_eori+1 ;set EOR # operand - set_ax absEOa,0 - > load_flag 0 -2f1e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2f20 : 48 > pha ;use stack to load status -2f21 : bd5e02 > lda absEOa,x ;precharge accu -2f24 : 28 > plp - -2f25 : 200b02 jsr ex_eori ;execute EOR # in RAM - tst_ax absrlo,absflo,0 -2f28 : 08 > php ;save flags -2f29 : dd6202 > cmp absrlo,x ;test result - > trap_ne -2f2c : d0fe > bne * ;failed not equal (non zero) - > -2f2e : 68 > pla ;load status - > eor_flag 0 -2f2f : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2f31 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2f34 : d0fe > bne * ;failed not equal (non zero) - > - -2f36 : ca dex -2f37 : 10e0 bpl teor -2f39 : a203 ldx #3 -2f3b : b520 teor1 lda zpEO,x -2f3d : 8d0c02 sta ex_eori+1 ;set EOR # operand - set_ax absEOa,$ff - > load_flag $ff -2f40 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2f42 : 48 > pha ;use stack to load status -2f43 : bd5e02 > lda absEOa,x ;precharge accu -2f46 : 28 > plp - -2f47 : 200b02 jsr ex_eori ;execute EOR # in RAM - tst_ax absrlo,absflo,$ff-fnz -2f4a : 08 > php ;save flags -2f4b : dd6202 > cmp absrlo,x ;test result - > trap_ne -2f4e : d0fe > bne * ;failed not equal (non zero) - > -2f50 : 68 > pla ;load status - > eor_flag $ff-fnz -2f51 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2f53 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2f56 : d0fe > bne * ;failed not equal (non zero) - > - -2f58 : ca dex -2f59 : 10e0 bpl teor1 - -2f5b : a203 ldx #3 ;zp -2f5d : b520 teor2 lda zpEO,x -2f5f : 850c sta zpt - set_ax absEOa,0 - > load_flag 0 -2f61 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2f63 : 48 > pha ;use stack to load status -2f64 : bd5e02 > lda absEOa,x ;precharge accu -2f67 : 28 > plp - -2f68 : 450c eor zpt - tst_ax absrlo,absflo,0 -2f6a : 08 > php ;save flags -2f6b : dd6202 > cmp absrlo,x ;test result - > trap_ne -2f6e : d0fe > bne * ;failed not equal (non zero) - > -2f70 : 68 > pla ;load status - > eor_flag 0 -2f71 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2f73 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2f76 : d0fe > bne * ;failed not equal (non zero) - > - -2f78 : ca dex -2f79 : 10e2 bpl teor2 -2f7b : a203 ldx #3 -2f7d : b520 teor3 lda zpEO,x -2f7f : 850c sta zpt - set_ax absEOa,$ff - > load_flag $ff -2f81 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2f83 : 48 > pha ;use stack to load status -2f84 : bd5e02 > lda absEOa,x ;precharge accu -2f87 : 28 > plp - -2f88 : 450c eor zpt - tst_ax absrlo,absflo,$ff-fnz -2f8a : 08 > php ;save flags -2f8b : dd6202 > cmp absrlo,x ;test result - > trap_ne -2f8e : d0fe > bne * ;failed not equal (non zero) - > -2f90 : 68 > pla ;load status - > eor_flag $ff-fnz -2f91 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2f93 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2f96 : d0fe > bne * ;failed not equal (non zero) - > - -2f98 : ca dex -2f99 : 10e2 bpl teor3 - -2f9b : a203 ldx #3 ;abs -2f9d : b520 teor4 lda zpEO,x -2f9f : 8d0302 sta abst - set_ax absEOa,0 - > load_flag 0 -2fa2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2fa4 : 48 > pha ;use stack to load status -2fa5 : bd5e02 > lda absEOa,x ;precharge accu -2fa8 : 28 > plp - -2fa9 : 4d0302 eor abst - tst_ax absrlo,absflo,0 -2fac : 08 > php ;save flags -2fad : dd6202 > cmp absrlo,x ;test result - > trap_ne -2fb0 : d0fe > bne * ;failed not equal (non zero) - > -2fb2 : 68 > pla ;load status - > eor_flag 0 -2fb3 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2fb5 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2fb8 : d0fe > bne * ;failed not equal (non zero) - > - -2fba : ca dex -2fbb : 10e0 bpl teor4 -2fbd : a203 ldx #3 -2fbf : b520 teor5 lda zpEO,x -2fc1 : 8d0302 sta abst - set_ax absEOa,$ff - > load_flag $ff -2fc4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2fc6 : 48 > pha ;use stack to load status -2fc7 : bd5e02 > lda absEOa,x ;precharge accu -2fca : 28 > plp - -2fcb : 4d0302 eor abst - tst_ax absrlo,absflo,$ff-fnz -2fce : 08 > php ;save flags -2fcf : dd6202 > cmp absrlo,x ;test result - > trap_ne -2fd2 : d0fe > bne * ;failed not equal (non zero) - > -2fd4 : 68 > pla ;load status - > eor_flag $ff-fnz -2fd5 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2fd7 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2fda : d0fe > bne * ;failed not equal (non zero) - > - -2fdc : ca dex -2fdd : 1002 bpl teor6 - -2fdf : a203 ldx #3 ;zp,x -2fe1 : teor6 - set_ax absEOa,0 - > load_flag 0 -2fe1 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2fe3 : 48 > pha ;use stack to load status -2fe4 : bd5e02 > lda absEOa,x ;precharge accu -2fe7 : 28 > plp - -2fe8 : 5520 eor zpEO,x - tst_ax absrlo,absflo,0 -2fea : 08 > php ;save flags -2feb : dd6202 > cmp absrlo,x ;test result - > trap_ne -2fee : d0fe > bne * ;failed not equal (non zero) - > -2ff0 : 68 > pla ;load status - > eor_flag 0 -2ff1 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2ff3 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -2ff6 : d0fe > bne * ;failed not equal (non zero) - > - -2ff8 : ca dex -2ff9 : 10e6 bpl teor6 -2ffb : a203 ldx #3 -2ffd : teor7 - set_ax absEOa,$ff - > load_flag $ff -2ffd : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2fff : 48 > pha ;use stack to load status -3000 : bd5e02 > lda absEOa,x ;precharge accu -3003 : 28 > plp - -3004 : 5520 eor zpEO,x - tst_ax absrlo,absflo,$ff-fnz -3006 : 08 > php ;save flags -3007 : dd6202 > cmp absrlo,x ;test result - > trap_ne -300a : d0fe > bne * ;failed not equal (non zero) - > -300c : 68 > pla ;load status - > eor_flag $ff-fnz -300d : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -300f : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -3012 : d0fe > bne * ;failed not equal (non zero) - > - -3014 : ca dex -3015 : 10e6 bpl teor7 - -3017 : a203 ldx #3 ;abs,x -3019 : teor8 - set_ax absEOa,0 - > load_flag 0 -3019 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -301b : 48 > pha ;use stack to load status -301c : bd5e02 > lda absEOa,x ;precharge accu -301f : 28 > plp - -3020 : 5d5202 eor absEO,x - tst_ax absrlo,absflo,0 -3023 : 08 > php ;save flags -3024 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3027 : d0fe > bne * ;failed not equal (non zero) - > -3029 : 68 > pla ;load status - > eor_flag 0 -302a : 4930 > eor #0|fao ;invert expected flags + always on bits - > -302c : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -302f : d0fe > bne * ;failed not equal (non zero) - > - -3031 : ca dex -3032 : 10e5 bpl teor8 -3034 : a203 ldx #3 -3036 : teor9 - set_ax absEOa,$ff - > load_flag $ff -3036 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -3038 : 48 > pha ;use stack to load status -3039 : bd5e02 > lda absEOa,x ;precharge accu -303c : 28 > plp - -303d : 5d5202 eor absEO,x - tst_ax absrlo,absflo,$ff-fnz -3040 : 08 > php ;save flags -3041 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3044 : d0fe > bne * ;failed not equal (non zero) - > -3046 : 68 > pla ;load status - > eor_flag $ff-fnz -3047 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -3049 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -304c : d0fe > bne * ;failed not equal (non zero) - > - -304e : ca dex -304f : 10e5 bpl teor9 - -3051 : a003 ldy #3 ;abs,y -3053 : teor10 - set_ay absEOa,0 - > load_flag 0 -3053 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -3055 : 48 > pha ;use stack to load status -3056 : b95e02 > lda absEOa,y ;precharge accu -3059 : 28 > plp - -305a : 595202 eor absEO,y - tst_ay absrlo,absflo,0 -305d : 08 > php ;save flags -305e : d96202 > cmp absrlo,y ;test result - > trap_ne ; -3061 : d0fe > bne * ;failed not equal (non zero) - > -3063 : 68 > pla ;load status - > eor_flag 0 -3064 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -3066 : d96602 > cmp absflo,y ;test flags - > trap_ne -3069 : d0fe > bne * ;failed not equal (non zero) - > - -306b : 88 dey -306c : 10e5 bpl teor10 -306e : a003 ldy #3 -3070 : teor11 - set_ay absEOa,$ff - > load_flag $ff -3070 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -3072 : 48 > pha ;use stack to load status -3073 : b95e02 > lda absEOa,y ;precharge accu -3076 : 28 > plp - -3077 : 595202 eor absEO,y - tst_ay absrlo,absflo,$ff-fnz -307a : 08 > php ;save flags -307b : d96202 > cmp absrlo,y ;test result - > trap_ne ; -307e : d0fe > bne * ;failed not equal (non zero) - > -3080 : 68 > pla ;load status - > eor_flag $ff-fnz -3081 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -3083 : d96602 > cmp absflo,y ;test flags - > trap_ne -3086 : d0fe > bne * ;failed not equal (non zero) - > - -3088 : 88 dey -3089 : 10e5 bpl teor11 - -308b : a206 ldx #6 ;(zp,x) -308d : a003 ldy #3 -308f : teor12 - set_ay absEOa,0 - > load_flag 0 -308f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -3091 : 48 > pha ;use stack to load status -3092 : b95e02 > lda absEOa,y ;precharge accu -3095 : 28 > plp - -3096 : 4142 eor (indEO,x) - tst_ay absrlo,absflo,0 -3098 : 08 > php ;save flags -3099 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -309c : d0fe > bne * ;failed not equal (non zero) - > -309e : 68 > pla ;load status - > eor_flag 0 -309f : 4930 > eor #0|fao ;invert expected flags + always on bits - > -30a1 : d96602 > cmp absflo,y ;test flags - > trap_ne -30a4 : d0fe > bne * ;failed not equal (non zero) - > - -30a6 : ca dex -30a7 : ca dex -30a8 : 88 dey -30a9 : 10e4 bpl teor12 -30ab : a206 ldx #6 -30ad : a003 ldy #3 -30af : teor13 - set_ay absEOa,$ff - > load_flag $ff -30af : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -30b1 : 48 > pha ;use stack to load status -30b2 : b95e02 > lda absEOa,y ;precharge accu -30b5 : 28 > plp - -30b6 : 4142 eor (indEO,x) - tst_ay absrlo,absflo,$ff-fnz -30b8 : 08 > php ;save flags -30b9 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -30bc : d0fe > bne * ;failed not equal (non zero) - > -30be : 68 > pla ;load status - > eor_flag $ff-fnz -30bf : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -30c1 : d96602 > cmp absflo,y ;test flags - > trap_ne -30c4 : d0fe > bne * ;failed not equal (non zero) - > - -30c6 : ca dex -30c7 : ca dex -30c8 : 88 dey -30c9 : 10e4 bpl teor13 - -30cb : a003 ldy #3 ;(zp),y -30cd : teor14 - set_ay absEOa,0 - > load_flag 0 -30cd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -30cf : 48 > pha ;use stack to load status -30d0 : b95e02 > lda absEOa,y ;precharge accu -30d3 : 28 > plp - -30d4 : 5142 eor (indEO),y - tst_ay absrlo,absflo,0 -30d6 : 08 > php ;save flags -30d7 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -30da : d0fe > bne * ;failed not equal (non zero) - > -30dc : 68 > pla ;load status - > eor_flag 0 -30dd : 4930 > eor #0|fao ;invert expected flags + always on bits - > -30df : d96602 > cmp absflo,y ;test flags - > trap_ne -30e2 : d0fe > bne * ;failed not equal (non zero) - > - -30e4 : 88 dey -30e5 : 10e6 bpl teor14 -30e7 : a003 ldy #3 -30e9 : teor15 - set_ay absEOa,$ff - > load_flag $ff -30e9 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -30eb : 48 > pha ;use stack to load status -30ec : b95e02 > lda absEOa,y ;precharge accu -30ef : 28 > plp - -30f0 : 5142 eor (indEO),y - tst_ay absrlo,absflo,$ff-fnz -30f2 : 08 > php ;save flags -30f3 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -30f6 : d0fe > bne * ;failed not equal (non zero) - > -30f8 : 68 > pla ;load status - > eor_flag $ff-fnz -30f9 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -30fb : d96602 > cmp absflo,y ;test flags - > trap_ne -30fe : d0fe > bne * ;failed not equal (non zero) - > - -3100 : 88 dey -3101 : 10e6 bpl teor15 - next_test -3103 : ad0002 > lda test_case ;previous test -3106 : c927 > cmp #test_num - > trap_ne ;test is out of sequence -3108 : d0fe > bne * ;failed not equal (non zero) - > -0028 = >test_num = test_num + 1 -310a : a928 > lda #test_num ;*** next tests' number -310c : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; OR -310f : a203 ldx #3 ;immediate - self modifying code -3111 : b518 tora lda zpOR,x -3113 : 8d0f02 sta ex_orai+1 ;set ORA # operand - set_ax absORa,0 - > load_flag 0 -3116 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -3118 : 48 > pha ;use stack to load status -3119 : bd5602 > lda absORa,x ;precharge accu -311c : 28 > plp - -311d : 200e02 jsr ex_orai ;execute ORA # in RAM - tst_ax absrlo,absflo,0 -3120 : 08 > php ;save flags -3121 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3124 : d0fe > bne * ;failed not equal (non zero) - > -3126 : 68 > pla ;load status - > eor_flag 0 -3127 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -3129 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -312c : d0fe > bne * ;failed not equal (non zero) - > - -312e : ca dex -312f : 10e0 bpl tora -3131 : a203 ldx #3 -3133 : b518 tora1 lda zpOR,x -3135 : 8d0f02 sta ex_orai+1 ;set ORA # operand - set_ax absORa,$ff - > load_flag $ff -3138 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -313a : 48 > pha ;use stack to load status -313b : bd5602 > lda absORa,x ;precharge accu -313e : 28 > plp - -313f : 200e02 jsr ex_orai ;execute ORA # in RAM - tst_ax absrlo,absflo,$ff-fnz -3142 : 08 > php ;save flags -3143 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3146 : d0fe > bne * ;failed not equal (non zero) - > -3148 : 68 > pla ;load status - > eor_flag $ff-fnz -3149 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -314b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -314e : d0fe > bne * ;failed not equal (non zero) - > - -3150 : ca dex -3151 : 10e0 bpl tora1 - -3153 : a203 ldx #3 ;zp -3155 : b518 tora2 lda zpOR,x -3157 : 850c sta zpt - set_ax absORa,0 - > load_flag 0 -3159 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -315b : 48 > pha ;use stack to load status -315c : bd5602 > lda absORa,x ;precharge accu -315f : 28 > plp - -3160 : 050c ora zpt - tst_ax absrlo,absflo,0 -3162 : 08 > php ;save flags -3163 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3166 : d0fe > bne * ;failed not equal (non zero) - > -3168 : 68 > pla ;load status - > eor_flag 0 -3169 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -316b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -316e : d0fe > bne * ;failed not equal (non zero) - > - -3170 : ca dex -3171 : 10e2 bpl tora2 -3173 : a203 ldx #3 -3175 : b518 tora3 lda zpOR,x -3177 : 850c sta zpt - set_ax absORa,$ff - > load_flag $ff -3179 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -317b : 48 > pha ;use stack to load status -317c : bd5602 > lda absORa,x ;precharge accu -317f : 28 > plp - -3180 : 050c ora zpt - tst_ax absrlo,absflo,$ff-fnz -3182 : 08 > php ;save flags -3183 : dd6202 > cmp absrlo,x ;test result - > trap_ne -3186 : d0fe > bne * ;failed not equal (non zero) - > -3188 : 68 > pla ;load status - > eor_flag $ff-fnz -3189 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -318b : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -318e : d0fe > bne * ;failed not equal (non zero) - > - -3190 : ca dex -3191 : 10e2 bpl tora3 - -3193 : a203 ldx #3 ;abs -3195 : b518 tora4 lda zpOR,x -3197 : 8d0302 sta abst - set_ax absORa,0 - > load_flag 0 -319a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -319c : 48 > pha ;use stack to load status -319d : bd5602 > lda absORa,x ;precharge accu -31a0 : 28 > plp - -31a1 : 0d0302 ora abst - tst_ax absrlo,absflo,0 -31a4 : 08 > php ;save flags -31a5 : dd6202 > cmp absrlo,x ;test result - > trap_ne -31a8 : d0fe > bne * ;failed not equal (non zero) - > -31aa : 68 > pla ;load status - > eor_flag 0 -31ab : 4930 > eor #0|fao ;invert expected flags + always on bits - > -31ad : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -31b0 : d0fe > bne * ;failed not equal (non zero) - > - -31b2 : ca dex -31b3 : 10e0 bpl tora4 -31b5 : a203 ldx #3 -31b7 : b518 tora5 lda zpOR,x -31b9 : 8d0302 sta abst - set_ax absORa,$ff - > load_flag $ff -31bc : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -31be : 48 > pha ;use stack to load status -31bf : bd5602 > lda absORa,x ;precharge accu -31c2 : 28 > plp - -31c3 : 0d0302 ora abst - tst_ax absrlo,absflo,$ff-fnz -31c6 : 08 > php ;save flags -31c7 : dd6202 > cmp absrlo,x ;test result - > trap_ne -31ca : d0fe > bne * ;failed not equal (non zero) - > -31cc : 68 > pla ;load status - > eor_flag $ff-fnz -31cd : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -31cf : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -31d2 : d0fe > bne * ;failed not equal (non zero) - > - -31d4 : ca dex -31d5 : 1002 bpl tora6 - -31d7 : a203 ldx #3 ;zp,x -31d9 : tora6 - set_ax absORa,0 - > load_flag 0 -31d9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -31db : 48 > pha ;use stack to load status -31dc : bd5602 > lda absORa,x ;precharge accu -31df : 28 > plp - -31e0 : 1518 ora zpOR,x - tst_ax absrlo,absflo,0 -31e2 : 08 > php ;save flags -31e3 : dd6202 > cmp absrlo,x ;test result - > trap_ne -31e6 : d0fe > bne * ;failed not equal (non zero) - > -31e8 : 68 > pla ;load status - > eor_flag 0 -31e9 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -31eb : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -31ee : d0fe > bne * ;failed not equal (non zero) - > - -31f0 : ca dex -31f1 : 10e6 bpl tora6 -31f3 : a203 ldx #3 -31f5 : tora7 - set_ax absORa,$ff - > load_flag $ff -31f5 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -31f7 : 48 > pha ;use stack to load status -31f8 : bd5602 > lda absORa,x ;precharge accu -31fb : 28 > plp - -31fc : 1518 ora zpOR,x - tst_ax absrlo,absflo,$ff-fnz -31fe : 08 > php ;save flags -31ff : dd6202 > cmp absrlo,x ;test result - > trap_ne -3202 : d0fe > bne * ;failed not equal (non zero) - > -3204 : 68 > pla ;load status - > eor_flag $ff-fnz -3205 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -3207 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -320a : d0fe > bne * ;failed not equal (non zero) - > - -320c : ca dex -320d : 10e6 bpl tora7 - -320f : a203 ldx #3 ;abs,x -3211 : tora8 - set_ax absORa,0 - > load_flag 0 -3211 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -3213 : 48 > pha ;use stack to load status -3214 : bd5602 > lda absORa,x ;precharge accu -3217 : 28 > plp - -3218 : 1d4a02 ora absOR,x - tst_ax absrlo,absflo,0 -321b : 08 > php ;save flags -321c : dd6202 > cmp absrlo,x ;test result - > trap_ne -321f : d0fe > bne * ;failed not equal (non zero) - > -3221 : 68 > pla ;load status - > eor_flag 0 -3222 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -3224 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -3227 : d0fe > bne * ;failed not equal (non zero) - > - -3229 : ca dex -322a : 10e5 bpl tora8 -322c : a203 ldx #3 -322e : tora9 - set_ax absORa,$ff - > load_flag $ff -322e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -3230 : 48 > pha ;use stack to load status -3231 : bd5602 > lda absORa,x ;precharge accu -3234 : 28 > plp - -3235 : 1d4a02 ora absOR,x - tst_ax absrlo,absflo,$ff-fnz -3238 : 08 > php ;save flags -3239 : dd6202 > cmp absrlo,x ;test result - > trap_ne -323c : d0fe > bne * ;failed not equal (non zero) - > -323e : 68 > pla ;load status - > eor_flag $ff-fnz -323f : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -3241 : dd6602 > cmp absflo,x ;test flags - > trap_ne ; -3244 : d0fe > bne * ;failed not equal (non zero) - > - -3246 : ca dex -3247 : 10e5 bpl tora9 - -3249 : a003 ldy #3 ;abs,y -324b : tora10 - set_ay absORa,0 - > load_flag 0 -324b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -324d : 48 > pha ;use stack to load status -324e : b95602 > lda absORa,y ;precharge accu -3251 : 28 > plp - -3252 : 194a02 ora absOR,y - tst_ay absrlo,absflo,0 -3255 : 08 > php ;save flags -3256 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -3259 : d0fe > bne * ;failed not equal (non zero) - > -325b : 68 > pla ;load status - > eor_flag 0 -325c : 4930 > eor #0|fao ;invert expected flags + always on bits - > -325e : d96602 > cmp absflo,y ;test flags - > trap_ne -3261 : d0fe > bne * ;failed not equal (non zero) - > - -3263 : 88 dey -3264 : 10e5 bpl tora10 -3266 : a003 ldy #3 -3268 : tora11 - set_ay absORa,$ff - > load_flag $ff -3268 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -326a : 48 > pha ;use stack to load status -326b : b95602 > lda absORa,y ;precharge accu -326e : 28 > plp - -326f : 194a02 ora absOR,y - tst_ay absrlo,absflo,$ff-fnz -3272 : 08 > php ;save flags -3273 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -3276 : d0fe > bne * ;failed not equal (non zero) - > -3278 : 68 > pla ;load status - > eor_flag $ff-fnz -3279 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -327b : d96602 > cmp absflo,y ;test flags - > trap_ne -327e : d0fe > bne * ;failed not equal (non zero) - > - -3280 : 88 dey -3281 : 10e5 bpl tora11 - -3283 : a206 ldx #6 ;(zp,x) -3285 : a003 ldy #3 -3287 : tora12 - set_ay absORa,0 - > load_flag 0 -3287 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -3289 : 48 > pha ;use stack to load status -328a : b95602 > lda absORa,y ;precharge accu -328d : 28 > plp - -328e : 014a ora (indOR,x) - tst_ay absrlo,absflo,0 -3290 : 08 > php ;save flags -3291 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -3294 : d0fe > bne * ;failed not equal (non zero) - > -3296 : 68 > pla ;load status - > eor_flag 0 -3297 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -3299 : d96602 > cmp absflo,y ;test flags - > trap_ne -329c : d0fe > bne * ;failed not equal (non zero) - > - -329e : ca dex -329f : ca dex -32a0 : 88 dey -32a1 : 10e4 bpl tora12 -32a3 : a206 ldx #6 -32a5 : a003 ldy #3 -32a7 : tora13 - set_ay absORa,$ff - > load_flag $ff -32a7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -32a9 : 48 > pha ;use stack to load status -32aa : b95602 > lda absORa,y ;precharge accu -32ad : 28 > plp - -32ae : 014a ora (indOR,x) - tst_ay absrlo,absflo,$ff-fnz -32b0 : 08 > php ;save flags -32b1 : d96202 > cmp absrlo,y ;test result - > trap_ne ; -32b4 : d0fe > bne * ;failed not equal (non zero) - > -32b6 : 68 > pla ;load status - > eor_flag $ff-fnz -32b7 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -32b9 : d96602 > cmp absflo,y ;test flags - > trap_ne -32bc : d0fe > bne * ;failed not equal (non zero) - > - -32be : ca dex -32bf : ca dex -32c0 : 88 dey -32c1 : 10e4 bpl tora13 - -32c3 : a003 ldy #3 ;(zp),y -32c5 : tora14 - set_ay absORa,0 - > load_flag 0 -32c5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -32c7 : 48 > pha ;use stack to load status -32c8 : b95602 > lda absORa,y ;precharge accu -32cb : 28 > plp - -32cc : 114a ora (indOR),y - tst_ay absrlo,absflo,0 -32ce : 08 > php ;save flags -32cf : d96202 > cmp absrlo,y ;test result - > trap_ne ; -32d2 : d0fe > bne * ;failed not equal (non zero) - > -32d4 : 68 > pla ;load status - > eor_flag 0 -32d5 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -32d7 : d96602 > cmp absflo,y ;test flags - > trap_ne -32da : d0fe > bne * ;failed not equal (non zero) - > - -32dc : 88 dey -32dd : 10e6 bpl tora14 -32df : a003 ldy #3 -32e1 : tora15 - set_ay absORa,$ff - > load_flag $ff -32e1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -32e3 : 48 > pha ;use stack to load status -32e4 : b95602 > lda absORa,y ;precharge accu -32e7 : 28 > plp - -32e8 : 114a ora (indOR),y - tst_ay absrlo,absflo,$ff-fnz -32ea : 08 > php ;save flags -32eb : d96202 > cmp absrlo,y ;test result - > trap_ne ; -32ee : d0fe > bne * ;failed not equal (non zero) - > -32f0 : 68 > pla ;load status - > eor_flag $ff-fnz -32f1 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -32f3 : d96602 > cmp absflo,y ;test flags - > trap_ne -32f6 : d0fe > bne * ;failed not equal (non zero) - > - -32f8 : 88 dey -32f9 : 10e6 bpl tora15 - if I_flag = 3 -32fb : 58 cli - endif - next_test -32fc : ad0002 > lda test_case ;previous test -32ff : c928 > cmp #test_num - > trap_ne ;test is out of sequence -3301 : d0fe > bne * ;failed not equal (non zero) - > -0029 = >test_num = test_num + 1 -3303 : a929 > lda #test_num ;*** next tests' number -3305 : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; full binary add/subtract test - ; iterates through all combinations of operands and carry input - ; uses increments/decrements to predict result & result flags -3308 : d8 cld -3309 : a20e ldx #ad2 ;for indexed test -330b : a0ff ldy #$ff ;max range -330d : a900 lda #0 ;start with adding zeroes & no carry -330f : 850c sta adfc ;carry in - for diag -3311 : 850d sta ad1 ;operand 1 - accumulator -3313 : 850e sta ad2 ;operand 2 - memory or immediate -3315 : 8d0302 sta ada2 ;non zp -3318 : 850f sta adrl ;expected result bits 0-7 -331a : 8510 sta adrh ;expected result bit 8 (carry out) -331c : a9ff lda #$ff ;complemented operand 2 for subtract -331e : 8512 sta sb2 -3320 : 8d0402 sta sba2 ;non zp -3323 : a902 lda #2 ;expected Z-flag -3325 : 8511 sta adrf -3327 : 18 tadd clc ;test with carry clear -3328 : 20a235 jsr chkadd -332b : e60c inc adfc ;now with carry -332d : e60f inc adrl ;result +1 -332f : 08 php ;save N & Z from low result -3330 : 08 php -3331 : 68 pla ;accu holds expected flags -3332 : 2982 and #$82 ;mask N & Z -3334 : 28 plp -3335 : d002 bne tadd1 -3337 : e610 inc adrh ;result bit 8 - carry -3339 : 0510 tadd1 ora adrh ;merge C to expected flags -333b : 8511 sta adrf ;save expected flags except overflow -333d : 38 sec ;test with carry set -333e : 20a235 jsr chkadd -3341 : c60c dec adfc ;same for operand +1 but no carry -3343 : e60d inc ad1 -3345 : d0e0 bne tadd ;iterate op1 -3347 : a900 lda #0 ;preset result to op2 when op1 = 0 -3349 : 8510 sta adrh -334b : ee0302 inc ada2 -334e : e60e inc ad2 -3350 : 08 php ;save NZ as operand 2 becomes the new result -3351 : 68 pla -3352 : 2982 and #$82 ;mask N00000Z0 -3354 : 8511 sta adrf ;no need to check carry as we are adding to 0 -3356 : c612 dec sb2 ;complement subtract operand 2 -3358 : ce0402 dec sba2 -335b : a50e lda ad2 -335d : 850f sta adrl -335f : d0c6 bne tadd ;iterate op2 - if disable_decimal < 1 - next_test -3361 : ad0002 > lda test_case ;previous test -3364 : c929 > cmp #test_num - > trap_ne ;test is out of sequence -3366 : d0fe > bne * ;failed not equal (non zero) - > -002a = >test_num = test_num + 1 -3368 : a92a > lda #test_num ;*** next tests' number -336a : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; decimal add/subtract test - ; *** WARNING - tests documented behavior only! *** - ; only valid BCD operands are tested, N V Z flags are ignored - ; iterates through all valid combinations of operands and carry input - ; uses increments/decrements to predict result & carry flag -336d : f8 sed -336e : a20e ldx #ad2 ;for indexed test -3370 : a0ff ldy #$ff ;max range -3372 : a999 lda #$99 ;start with adding 99 to 99 with carry -3374 : 850d sta ad1 ;operand 1 - accumulator -3376 : 850e sta ad2 ;operand 2 - memory or immediate -3378 : 8d0302 sta ada2 ;non zp -337b : 850f sta adrl ;expected result bits 0-7 -337d : a901 lda #1 ;set carry in & out -337f : 850c sta adfc ;carry in - for diag -3381 : 8510 sta adrh ;expected result bit 8 (carry out) -3383 : a900 lda #0 ;complemented operand 2 for subtract -3385 : 8512 sta sb2 -3387 : 8d0402 sta sba2 ;non zp -338a : 38 tdad sec ;test with carry set -338b : 206f34 jsr chkdad -338e : c60c dec adfc ;now with carry clear -3390 : a50f lda adrl ;decimal adjust result -3392 : d008 bne tdad1 ;skip clear carry & preset result 99 (9A-1) -3394 : c610 dec adrh -3396 : a999 lda #$99 -3398 : 850f sta adrl -339a : d012 bne tdad3 -339c : 290f tdad1 and #$f ;lower nibble mask -339e : d00c bne tdad2 ;no decimal adjust needed -33a0 : c60f dec adrl ;decimal adjust (?0-6) -33a2 : c60f dec adrl -33a4 : c60f dec adrl -33a6 : c60f dec adrl -33a8 : c60f dec adrl -33aa : c60f dec adrl -33ac : c60f tdad2 dec adrl ;result -1 -33ae : 18 tdad3 clc ;test with carry clear -33af : 206f34 jsr chkdad -33b2 : e60c inc adfc ;same for operand -1 but with carry -33b4 : a50d lda ad1 ;decimal adjust operand 1 -33b6 : f015 beq tdad5 ;iterate operand 2 -33b8 : 290f and #$f ;lower nibble mask -33ba : d00c bne tdad4 ;skip decimal adjust -33bc : c60d dec ad1 ;decimal adjust (?0-6) -33be : c60d dec ad1 -33c0 : c60d dec ad1 -33c2 : c60d dec ad1 -33c4 : c60d dec ad1 -33c6 : c60d dec ad1 -33c8 : c60d tdad4 dec ad1 ;operand 1 -1 -33ca : 4c8a33 jmp tdad ;iterate op1 - -33cd : a999 tdad5 lda #$99 ;precharge op1 max -33cf : 850d sta ad1 -33d1 : a50e lda ad2 ;decimal adjust operand 2 -33d3 : f030 beq tdad7 ;end of iteration -33d5 : 290f and #$f ;lower nibble mask -33d7 : d018 bne tdad6 ;skip decimal adjust -33d9 : c60e dec ad2 ;decimal adjust (?0-6) -33db : c60e dec ad2 -33dd : c60e dec ad2 -33df : c60e dec ad2 -33e1 : c60e dec ad2 -33e3 : c60e dec ad2 -33e5 : e612 inc sb2 ;complemented decimal adjust for subtract (?9+6) -33e7 : e612 inc sb2 -33e9 : e612 inc sb2 -33eb : e612 inc sb2 -33ed : e612 inc sb2 -33ef : e612 inc sb2 -33f1 : c60e tdad6 dec ad2 ;operand 2 -1 -33f3 : e612 inc sb2 ;complemented operand for subtract -33f5 : a512 lda sb2 -33f7 : 8d0402 sta sba2 ;copy as non zp operand -33fa : a50e lda ad2 -33fc : 8d0302 sta ada2 ;copy as non zp operand -33ff : 850f sta adrl ;new result since op1+carry=00+carry +op2=op2 -3401 : e610 inc adrh ;result carry -3403 : d085 bne tdad ;iterate op2 -3405 : tdad7 - next_test -3405 : ad0002 > lda test_case ;previous test -3408 : c92a > cmp #test_num - > trap_ne ;test is out of sequence -340a : d0fe > bne * ;failed not equal (non zero) - > -002b = >test_num = test_num + 1 -340c : a92b > lda #test_num ;*** next tests' number -340e : 8d0002 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; decimal/binary switch test - ; tests CLD, SED, PLP, RTI to properly switch between decimal & binary opcode - ; tables -3411 : 18 clc -3412 : d8 cld -3413 : 08 php -3414 : a955 lda #$55 -3416 : 6955 adc #$55 -3418 : c9aa cmp #$aa - trap_ne ;expected binary result after cld -341a : d0fe > bne * ;failed not equal (non zero) - -341c : 18 clc -341d : f8 sed -341e : 08 php -341f : a955 lda #$55 -3421 : 6955 adc #$55 -3423 : c910 cmp #$10 - trap_ne ;expected decimal result after sed -3425 : d0fe > bne * ;failed not equal (non zero) - -3427 : d8 cld -3428 : 28 plp -3429 : a955 lda #$55 -342b : 6955 adc #$55 -342d : c910 cmp #$10 - trap_ne ;expected decimal result after plp D=1 -342f : d0fe > bne * ;failed not equal (non zero) - -3431 : 28 plp -3432 : a955 lda #$55 -3434 : 6955 adc #$55 -3436 : c9aa cmp #$aa - trap_ne ;expected binary result after plp D=0 -3438 : d0fe > bne * ;failed not equal (non zero) - -343a : 18 clc -343b : a934 lda #hi bin_rti_ret ;emulated interrupt for rti -343d : 48 pha -343e : a955 lda #lo bin_rti_ret -3440 : 48 pha -3441 : 08 php -3442 : f8 sed -3443 : a934 lda #hi dec_rti_ret ;emulated interrupt for rti -3445 : 48 pha -3446 : a94c lda #lo dec_rti_ret -3448 : 48 pha -3449 : 08 php -344a : d8 cld -344b : 40 rti -344c : dec_rti_ret -344c : a955 lda #$55 -344e : 6955 adc #$55 -3450 : c910 cmp #$10 - trap_ne ;expected decimal result after rti D=1 -3452 : d0fe > bne * ;failed not equal (non zero) - -3454 : 40 rti -3455 : bin_rti_ret -3455 : a955 lda #$55 -3457 : 6955 adc #$55 -3459 : c9aa cmp #$aa - trap_ne ;expected binary result after rti D=0 -345b : d0fe > bne * ;failed not equal (non zero) - - endif - -345d : ad0002 lda test_case -3460 : c92b cmp #test_num - trap_ne ;previous test is out of sequence -3462 : d0fe > bne * ;failed not equal (non zero) - -3464 : a9f0 lda #$f0 ;mark opcode testing complete -3466 : 8d0002 sta test_case - - ; final RAM integrity test - ; verifies that none of the previous tests has altered RAM outside of the - ; designated write areas. - check_ram - > ;RAM check disabled - RAM size not set - - ; *** DEBUG INFO *** - ; to debug checksum errors uncomment check_ram in the next_test macro to - ; narrow down the responsible opcode. - ; may give false errors when monitor, OS or other background activity is - ; allowed during previous tests. - - - ; S U C C E S S ************************************************ - ; ------------- - success ;if you get here everything went well -3469 : 4c6934 > jmp * ;test passed, no errors - - ; ------------- - ; S U C C E S S ************************************************ -346c : 4c0004 jmp start ;run again - - if disable_decimal < 1 - ; core subroutine of the decimal add/subtract test - ; *** WARNING - tests documented behavior only! *** - ; only valid BCD operands are tested, N V Z flags are ignored - ; iterates through all valid combinations of operands and carry input - ; uses increments/decrements to predict result & carry flag -346f : chkdad - ; decimal ADC / SBC zp -346f : 08 php ;save carry for subtract -3470 : a50d lda ad1 -3472 : 650e adc ad2 ;perform add -3474 : 08 php -3475 : c50f cmp adrl ;check result - trap_ne ;bad result -3477 : d0fe > bne * ;failed not equal (non zero) - -3479 : 68 pla ;check flags -347a : 2901 and #1 ;mask carry -347c : c510 cmp adrh - trap_ne ;bad carry -347e : d0fe > bne * ;failed not equal (non zero) - -3480 : 28 plp -3481 : 08 php ;save carry for next add -3482 : a50d lda ad1 -3484 : e512 sbc sb2 ;perform subtract -3486 : 08 php -3487 : c50f cmp adrl ;check result - trap_ne ;bad result -3489 : d0fe > bne * ;failed not equal (non zero) - -348b : 68 pla ;check flags -348c : 2901 and #1 ;mask carry -348e : c510 cmp adrh - trap_ne ;bad flags -3490 : d0fe > bne * ;failed not equal (non zero) - -3492 : 28 plp - ; decimal ADC / SBC abs -3493 : 08 php ;save carry for subtract -3494 : a50d lda ad1 -3496 : 6d0302 adc ada2 ;perform add -3499 : 08 php -349a : c50f cmp adrl ;check result - trap_ne ;bad result -349c : d0fe > bne * ;failed not equal (non zero) - -349e : 68 pla ;check flags -349f : 2901 and #1 ;mask carry -34a1 : c510 cmp adrh - trap_ne ;bad carry -34a3 : d0fe > bne * ;failed not equal (non zero) - -34a5 : 28 plp -34a6 : 08 php ;save carry for next add -34a7 : a50d lda ad1 -34a9 : ed0402 sbc sba2 ;perform subtract -34ac : 08 php -34ad : c50f cmp adrl ;check result - trap_ne ;bad result -34af : d0fe > bne * ;failed not equal (non zero) - -34b1 : 68 pla ;check flags -34b2 : 2901 and #1 ;mask carry -34b4 : c510 cmp adrh - trap_ne ;bad carry -34b6 : d0fe > bne * ;failed not equal (non zero) - -34b8 : 28 plp - ; decimal ADC / SBC # -34b9 : 08 php ;save carry for subtract -34ba : a50e lda ad2 -34bc : 8d1202 sta ex_adci+1 ;set ADC # operand -34bf : a50d lda ad1 -34c1 : 201102 jsr ex_adci ;execute ADC # in RAM -34c4 : 08 php -34c5 : c50f cmp adrl ;check result - trap_ne ;bad result -34c7 : d0fe > bne * ;failed not equal (non zero) - -34c9 : 68 pla ;check flags -34ca : 2901 and #1 ;mask carry -34cc : c510 cmp adrh - trap_ne ;bad carry -34ce : d0fe > bne * ;failed not equal (non zero) - -34d0 : 28 plp -34d1 : 08 php ;save carry for next add -34d2 : a512 lda sb2 -34d4 : 8d1502 sta ex_sbci+1 ;set SBC # operand -34d7 : a50d lda ad1 -34d9 : 201402 jsr ex_sbci ;execute SBC # in RAM -34dc : 08 php -34dd : c50f cmp adrl ;check result - trap_ne ;bad result -34df : d0fe > bne * ;failed not equal (non zero) - -34e1 : 68 pla ;check flags -34e2 : 2901 and #1 ;mask carry -34e4 : c510 cmp adrh - trap_ne ;bad carry -34e6 : d0fe > bne * ;failed not equal (non zero) - -34e8 : 28 plp - ; decimal ADC / SBC zp,x -34e9 : 08 php ;save carry for subtract -34ea : a50d lda ad1 -34ec : 7500 adc 0,x ;perform add -34ee : 08 php -34ef : c50f cmp adrl ;check result - trap_ne ;bad result -34f1 : d0fe > bne * ;failed not equal (non zero) - -34f3 : 68 pla ;check flags -34f4 : 2901 and #1 ;mask carry -34f6 : c510 cmp adrh - trap_ne ;bad carry -34f8 : d0fe > bne * ;failed not equal (non zero) - -34fa : 28 plp -34fb : 08 php ;save carry for next add -34fc : a50d lda ad1 -34fe : f504 sbc sb2-ad2,x ;perform subtract -3500 : 08 php -3501 : c50f cmp adrl ;check result - trap_ne ;bad result -3503 : d0fe > bne * ;failed not equal (non zero) - -3505 : 68 pla ;check flags -3506 : 2901 and #1 ;mask carry -3508 : c510 cmp adrh - trap_ne ;bad carry -350a : d0fe > bne * ;failed not equal (non zero) - -350c : 28 plp - ; decimal ADC / SBC abs,x -350d : 08 php ;save carry for subtract -350e : a50d lda ad1 -3510 : 7df501 adc ada2-ad2,x ;perform add -3513 : 08 php -3514 : c50f cmp adrl ;check result - trap_ne ;bad result -3516 : d0fe > bne * ;failed not equal (non zero) - -3518 : 68 pla ;check flags -3519 : 2901 and #1 ;mask carry -351b : c510 cmp adrh - trap_ne ;bad carry -351d : d0fe > bne * ;failed not equal (non zero) - -351f : 28 plp -3520 : 08 php ;save carry for next add -3521 : a50d lda ad1 -3523 : fdf601 sbc sba2-ad2,x ;perform subtract -3526 : 08 php -3527 : c50f cmp adrl ;check result - trap_ne ;bad result -3529 : d0fe > bne * ;failed not equal (non zero) - -352b : 68 pla ;check flags -352c : 2901 and #1 ;mask carry -352e : c510 cmp adrh - trap_ne ;bad carry -3530 : d0fe > bne * ;failed not equal (non zero) - -3532 : 28 plp - ; decimal ADC / SBC abs,y -3533 : 08 php ;save carry for subtract -3534 : a50d lda ad1 -3536 : 790401 adc ada2-$ff,y ;perform add -3539 : 08 php -353a : c50f cmp adrl ;check result - trap_ne ;bad result -353c : d0fe > bne * ;failed not equal (non zero) - -353e : 68 pla ;check flags -353f : 2901 and #1 ;mask carry -3541 : c510 cmp adrh - trap_ne ;bad carry -3543 : d0fe > bne * ;failed not equal (non zero) - -3545 : 28 plp -3546 : 08 php ;save carry for next add -3547 : a50d lda ad1 -3549 : f90501 sbc sba2-$ff,y ;perform subtract -354c : 08 php -354d : c50f cmp adrl ;check result - trap_ne ;bad result -354f : d0fe > bne * ;failed not equal (non zero) - -3551 : 68 pla ;check flags -3552 : 2901 and #1 ;mask carry -3554 : c510 cmp adrh - trap_ne ;bad carry -3556 : d0fe > bne * ;failed not equal (non zero) - -3558 : 28 plp - ; decimal ADC / SBC (zp,x) -3559 : 08 php ;save carry for subtract -355a : a50d lda ad1 -355c : 6144 adc (lo adi2-ad2,x) ;perform add -355e : 08 php -355f : c50f cmp adrl ;check result - trap_ne ;bad result -3561 : d0fe > bne * ;failed not equal (non zero) - -3563 : 68 pla ;check flags -3564 : 2901 and #1 ;mask carry -3566 : c510 cmp adrh - trap_ne ;bad carry -3568 : d0fe > bne * ;failed not equal (non zero) - -356a : 28 plp -356b : 08 php ;save carry for next add -356c : a50d lda ad1 -356e : e146 sbc (lo sbi2-ad2,x) ;perform subtract -3570 : 08 php -3571 : c50f cmp adrl ;check result - trap_ne ;bad result -3573 : d0fe > bne * ;failed not equal (non zero) - -3575 : 68 pla ;check flags -3576 : 2901 and #1 ;mask carry -3578 : c510 cmp adrh - trap_ne ;bad carry -357a : d0fe > bne * ;failed not equal (non zero) - -357c : 28 plp - ; decimal ADC / SBC (abs),y -357d : 08 php ;save carry for subtract -357e : a50d lda ad1 -3580 : 7156 adc (adiy2),y ;perform add -3582 : 08 php -3583 : c50f cmp adrl ;check result - trap_ne ;bad result -3585 : d0fe > bne * ;failed not equal (non zero) - -3587 : 68 pla ;check flags -3588 : 2901 and #1 ;mask carry -358a : c510 cmp adrh - trap_ne ;bad carry -358c : d0fe > bne * ;failed not equal (non zero) - -358e : 28 plp -358f : 08 php ;save carry for next add -3590 : a50d lda ad1 -3592 : f158 sbc (sbiy2),y ;perform subtract -3594 : 08 php -3595 : c50f cmp adrl ;check result - trap_ne ;bad result -3597 : d0fe > bne * ;failed not equal (non zero) - -3599 : 68 pla ;check flags -359a : 2901 and #1 ;mask carry -359c : c510 cmp adrh - trap_ne ;bad carry -359e : d0fe > bne * ;failed not equal (non zero) - -35a0 : 28 plp -35a1 : 60 rts - endif - - ; core subroutine of the full binary add/subtract test - ; iterates through all combinations of operands and carry input - ; uses increments/decrements to predict result & result flags -35a2 : a511 chkadd lda adrf ;add V-flag if overflow -35a4 : 2983 and #$83 ;keep N-----ZC / clear V -35a6 : 48 pha -35a7 : a50d lda ad1 ;test sign unequal between operands -35a9 : 450e eor ad2 -35ab : 300a bmi ckad1 ;no overflow possible - operands have different sign -35ad : a50d lda ad1 ;test sign equal between operands and result -35af : 450f eor adrl -35b1 : 1004 bpl ckad1 ;no overflow occured - operand and result have same sign -35b3 : 68 pla -35b4 : 0940 ora #$40 ;set V -35b6 : 48 pha -35b7 : 68 ckad1 pla -35b8 : 8511 sta adrf ;save expected flags - ; binary ADC / SBC zp -35ba : 08 php ;save carry for subtract -35bb : a50d lda ad1 -35bd : 650e adc ad2 ;perform add -35bf : 08 php -35c0 : c50f cmp adrl ;check result - trap_ne ;bad result -35c2 : d0fe > bne * ;failed not equal (non zero) - -35c4 : 68 pla ;check flags -35c5 : 29c3 and #$c3 ;mask NV----ZC -35c7 : c511 cmp adrf - trap_ne ;bad flags -35c9 : d0fe > bne * ;failed not equal (non zero) - -35cb : 28 plp -35cc : 08 php ;save carry for next add -35cd : a50d lda ad1 -35cf : e512 sbc sb2 ;perform subtract -35d1 : 08 php -35d2 : c50f cmp adrl ;check result - trap_ne ;bad result -35d4 : d0fe > bne * ;failed not equal (non zero) - -35d6 : 68 pla ;check flags -35d7 : 29c3 and #$c3 ;mask NV----ZC -35d9 : c511 cmp adrf - trap_ne ;bad flags -35db : d0fe > bne * ;failed not equal (non zero) - -35dd : 28 plp - ; binary ADC / SBC abs -35de : 08 php ;save carry for subtract -35df : a50d lda ad1 -35e1 : 6d0302 adc ada2 ;perform add -35e4 : 08 php -35e5 : c50f cmp adrl ;check result - trap_ne ;bad result -35e7 : d0fe > bne * ;failed not equal (non zero) - -35e9 : 68 pla ;check flags -35ea : 29c3 and #$c3 ;mask NV----ZC -35ec : c511 cmp adrf - trap_ne ;bad flags -35ee : d0fe > bne * ;failed not equal (non zero) - -35f0 : 28 plp -35f1 : 08 php ;save carry for next add -35f2 : a50d lda ad1 -35f4 : ed0402 sbc sba2 ;perform subtract -35f7 : 08 php -35f8 : c50f cmp adrl ;check result - trap_ne ;bad result -35fa : d0fe > bne * ;failed not equal (non zero) - -35fc : 68 pla ;check flags -35fd : 29c3 and #$c3 ;mask NV----ZC -35ff : c511 cmp adrf - trap_ne ;bad flags -3601 : d0fe > bne * ;failed not equal (non zero) - -3603 : 28 plp - ; binary ADC / SBC # -3604 : 08 php ;save carry for subtract -3605 : a50e lda ad2 -3607 : 8d1202 sta ex_adci+1 ;set ADC # operand -360a : a50d lda ad1 -360c : 201102 jsr ex_adci ;execute ADC # in RAM -360f : 08 php -3610 : c50f cmp adrl ;check result - trap_ne ;bad result -3612 : d0fe > bne * ;failed not equal (non zero) - -3614 : 68 pla ;check flags -3615 : 29c3 and #$c3 ;mask NV----ZC -3617 : c511 cmp adrf - trap_ne ;bad flags -3619 : d0fe > bne * ;failed not equal (non zero) - -361b : 28 plp -361c : 08 php ;save carry for next add -361d : a512 lda sb2 -361f : 8d1502 sta ex_sbci+1 ;set SBC # operand -3622 : a50d lda ad1 -3624 : 201402 jsr ex_sbci ;execute SBC # in RAM -3627 : 08 php -3628 : c50f cmp adrl ;check result - trap_ne ;bad result -362a : d0fe > bne * ;failed not equal (non zero) - -362c : 68 pla ;check flags -362d : 29c3 and #$c3 ;mask NV----ZC -362f : c511 cmp adrf - trap_ne ;bad flags -3631 : d0fe > bne * ;failed not equal (non zero) - -3633 : 28 plp - ; binary ADC / SBC zp,x -3634 : 08 php ;save carry for subtract -3635 : a50d lda ad1 -3637 : 7500 adc 0,x ;perform add -3639 : 08 php -363a : c50f cmp adrl ;check result - trap_ne ;bad result -363c : d0fe > bne * ;failed not equal (non zero) - -363e : 68 pla ;check flags -363f : 29c3 and #$c3 ;mask NV----ZC -3641 : c511 cmp adrf - trap_ne ;bad flags -3643 : d0fe > bne * ;failed not equal (non zero) - -3645 : 28 plp -3646 : 08 php ;save carry for next add -3647 : a50d lda ad1 -3649 : f504 sbc sb2-ad2,x ;perform subtract -364b : 08 php -364c : c50f cmp adrl ;check result - trap_ne ;bad result -364e : d0fe > bne * ;failed not equal (non zero) - -3650 : 68 pla ;check flags -3651 : 29c3 and #$c3 ;mask NV----ZC -3653 : c511 cmp adrf - trap_ne ;bad flags -3655 : d0fe > bne * ;failed not equal (non zero) - -3657 : 28 plp - ; binary ADC / SBC abs,x -3658 : 08 php ;save carry for subtract -3659 : a50d lda ad1 -365b : 7df501 adc ada2-ad2,x ;perform add -365e : 08 php -365f : c50f cmp adrl ;check result - trap_ne ;bad result -3661 : d0fe > bne * ;failed not equal (non zero) - -3663 : 68 pla ;check flags -3664 : 29c3 and #$c3 ;mask NV----ZC -3666 : c511 cmp adrf - trap_ne ;bad flags -3668 : d0fe > bne * ;failed not equal (non zero) - -366a : 28 plp -366b : 08 php ;save carry for next add -366c : a50d lda ad1 -366e : fdf601 sbc sba2-ad2,x ;perform subtract -3671 : 08 php -3672 : c50f cmp adrl ;check result - trap_ne ;bad result -3674 : d0fe > bne * ;failed not equal (non zero) - -3676 : 68 pla ;check flags -3677 : 29c3 and #$c3 ;mask NV----ZC -3679 : c511 cmp adrf - trap_ne ;bad flags -367b : d0fe > bne * ;failed not equal (non zero) - -367d : 28 plp - ; binary ADC / SBC abs,y -367e : 08 php ;save carry for subtract -367f : a50d lda ad1 -3681 : 790401 adc ada2-$ff,y ;perform add -3684 : 08 php -3685 : c50f cmp adrl ;check result - trap_ne ;bad result -3687 : d0fe > bne * ;failed not equal (non zero) - -3689 : 68 pla ;check flags -368a : 29c3 and #$c3 ;mask NV----ZC -368c : c511 cmp adrf - trap_ne ;bad flags -368e : d0fe > bne * ;failed not equal (non zero) - -3690 : 28 plp -3691 : 08 php ;save carry for next add -3692 : a50d lda ad1 -3694 : f90501 sbc sba2-$ff,y ;perform subtract -3697 : 08 php -3698 : c50f cmp adrl ;check result - trap_ne ;bad result -369a : d0fe > bne * ;failed not equal (non zero) - -369c : 68 pla ;check flags -369d : 29c3 and #$c3 ;mask NV----ZC -369f : c511 cmp adrf - trap_ne ;bad flags -36a1 : d0fe > bne * ;failed not equal (non zero) - -36a3 : 28 plp - ; binary ADC / SBC (zp,x) -36a4 : 08 php ;save carry for subtract -36a5 : a50d lda ad1 -36a7 : 6144 adc (lo adi2-ad2,x) ;perform add -36a9 : 08 php -36aa : c50f cmp adrl ;check result - trap_ne ;bad result -36ac : d0fe > bne * ;failed not equal (non zero) - -36ae : 68 pla ;check flags -36af : 29c3 and #$c3 ;mask NV----ZC -36b1 : c511 cmp adrf - trap_ne ;bad flags -36b3 : d0fe > bne * ;failed not equal (non zero) - -36b5 : 28 plp -36b6 : 08 php ;save carry for next add -36b7 : a50d lda ad1 -36b9 : e146 sbc (lo sbi2-ad2,x) ;perform subtract -36bb : 08 php -36bc : c50f cmp adrl ;check result - trap_ne ;bad result -36be : d0fe > bne * ;failed not equal (non zero) - -36c0 : 68 pla ;check flags -36c1 : 29c3 and #$c3 ;mask NV----ZC -36c3 : c511 cmp adrf - trap_ne ;bad flags -36c5 : d0fe > bne * ;failed not equal (non zero) - -36c7 : 28 plp - ; binary ADC / SBC (abs),y -36c8 : 08 php ;save carry for subtract -36c9 : a50d lda ad1 -36cb : 7156 adc (adiy2),y ;perform add -36cd : 08 php -36ce : c50f cmp adrl ;check result - trap_ne ;bad result -36d0 : d0fe > bne * ;failed not equal (non zero) - -36d2 : 68 pla ;check flags -36d3 : 29c3 and #$c3 ;mask NV----ZC -36d5 : c511 cmp adrf - trap_ne ;bad flags -36d7 : d0fe > bne * ;failed not equal (non zero) - -36d9 : 28 plp -36da : 08 php ;save carry for next add -36db : a50d lda ad1 -36dd : f158 sbc (sbiy2),y ;perform subtract -36df : 08 php -36e0 : c50f cmp adrl ;check result - trap_ne ;bad result -36e2 : d0fe > bne * ;failed not equal (non zero) - -36e4 : 68 pla ;check flags -36e5 : 29c3 and #$c3 ;mask NV----ZC -36e7 : c511 cmp adrf - trap_ne ;bad flags -36e9 : d0fe > bne * ;failed not equal (non zero) - -36eb : 28 plp -36ec : 60 rts - - ; target for the jump absolute test -36ed : 88 dey -36ee : 88 dey -36ef : test_far -36ef : 08 php ;either SP or Y count will fail, if we do not hit -36f0 : 88 dey -36f1 : 88 dey -36f2 : 88 dey -36f3 : 28 plp - trap_cs ;flags loaded? -36f4 : b0fe > bcs * ;failed carry set - - trap_vs -36f6 : 70fe > bvs * ;failed overflow set - - trap_mi -36f8 : 30fe > bmi * ;failed minus (bit 7 set) - - trap_eq -36fa : f0fe > beq * ;failed equal (zero) - -36fc : c946 cmp #'F' ;registers loaded? - trap_ne -36fe : d0fe > bne * ;failed not equal (non zero) - -3700 : e041 cpx #'A' - trap_ne -3702 : d0fe > bne * ;failed not equal (non zero) - -3704 : c04f cpy #('R'-3) - trap_ne -3706 : d0fe > bne * ;failed not equal (non zero) - -3708 : 48 pha ;save a,x -3709 : 8a txa -370a : 48 pha -370b : ba tsx -370c : e0fd cpx #$fd ;check SP - trap_ne -370e : d0fe > bne * ;failed not equal (non zero) - -3710 : 68 pla ;restore x -3711 : aa tax - set_stat $ff - > load_flag $ff -3712 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -3714 : 48 > pha ;use stack to load status -3715 : 28 > plp - -3716 : 68 pla ;restore a -3717 : e8 inx ;return registers with modifications -3718 : 49aa eor #$aa ;N=1, V=1, Z=0, C=1 -371a : 4c0f09 jmp far_ret - - ; target for the jump indirect test -371d : 00 align -371e : 2737 ptr_tst_ind dw test_ind -3720 : 6409 ptr_ind_ret dw ind_ret - trap ;runover protection -3722 : 4c2237 > jmp * ;failed anyway - -3725 : 88 dey -3726 : 88 dey -3727 : test_ind -3727 : 08 php ;either SP or Y count will fail, if we do not hit -3728 : 88 dey -3729 : 88 dey -372a : 88 dey -372b : 28 plp - trap_cs ;flags loaded? -372c : b0fe > bcs * ;failed carry set - - trap_vs -372e : 70fe > bvs * ;failed overflow set - - trap_mi -3730 : 30fe > bmi * ;failed minus (bit 7 set) - - trap_eq -3732 : f0fe > beq * ;failed equal (zero) - -3734 : c949 cmp #'I' ;registers loaded? - trap_ne -3736 : d0fe > bne * ;failed not equal (non zero) - -3738 : e04e cpx #'N' - trap_ne -373a : d0fe > bne * ;failed not equal (non zero) - -373c : c041 cpy #('D'-3) - trap_ne -373e : d0fe > bne * ;failed not equal (non zero) - -3740 : 48 pha ;save a,x -3741 : 8a txa -3742 : 48 pha -3743 : ba tsx -3744 : e0fd cpx #$fd ;check SP - trap_ne -3746 : d0fe > bne * ;failed not equal (non zero) - -3748 : 68 pla ;restore x -3749 : aa tax - set_stat $ff - > load_flag $ff -374a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -374c : 48 > pha ;use stack to load status -374d : 28 > plp - -374e : 68 pla ;restore a -374f : e8 inx ;return registers with modifications -3750 : 49aa eor #$aa ;N=1, V=1, Z=0, C=1 -3752 : 6c2037 jmp (ptr_ind_ret) - trap ;runover protection -3755 : 4c5537 > jmp * ;failed anyway - -3758 : 4c0004 jmp start ;catastrophic error - cannot continue - - ; target for the jump subroutine test -375b : 88 dey -375c : 88 dey -375d : test_jsr -375d : 08 php ;either SP or Y count will fail, if we do not hit -375e : 88 dey -375f : 88 dey -3760 : 88 dey -3761 : 28 plp - trap_cs ;flags loaded? -3762 : b0fe > bcs * ;failed carry set - - trap_vs -3764 : 70fe > bvs * ;failed overflow set - - trap_mi -3766 : 30fe > bmi * ;failed minus (bit 7 set) - - trap_eq -3768 : f0fe > beq * ;failed equal (zero) - -376a : c94a cmp #'J' ;registers loaded? - trap_ne -376c : d0fe > bne * ;failed not equal (non zero) - -376e : e053 cpx #'S' - trap_ne -3770 : d0fe > bne * ;failed not equal (non zero) - -3772 : c04f cpy #('R'-3) - trap_ne -3774 : d0fe > bne * ;failed not equal (non zero) - -3776 : 48 pha ;save a,x -3777 : 8a txa -3778 : 48 pha -3779 : ba tsx ;sp -4? (return addr,a,x) -377a : e0fb cpx #$fb - trap_ne -377c : d0fe > bne * ;failed not equal (non zero) - -377e : adff01 lda $1ff ;propper return on stack -3781 : c909 cmp #hi(jsr_ret) - trap_ne -3783 : d0fe > bne * ;failed not equal (non zero) - -3785 : adfe01 lda $1fe -3788 : c99a cmp #lo(jsr_ret) - trap_ne -378a : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -378c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -378e : 48 > pha ;use stack to load status -378f : 28 > plp - -3790 : 68 pla ;pull x,a -3791 : aa tax -3792 : 68 pla -3793 : e8 inx ;return registers with modifications -3794 : 49aa eor #$aa ;N=1, V=1, Z=0, C=1 -3796 : 60 rts - trap ;runover protection -3797 : 4c9737 > jmp * ;failed anyway - -379a : 4c0004 jmp start ;catastrophic error - cannot continue - - ;trap in case of unexpected IRQ, NMI, BRK, RESET - BRK test target -379d : nmi_trap - trap ;check stack for conditions at NMI -379d : 4c9d37 > jmp * ;failed anyway - -37a0 : 4c0004 jmp start ;catastrophic error - cannot continue -37a3 : res_trap - trap ;unexpected RESET -37a3 : 4ca337 > jmp * ;failed anyway - -37a6 : 4c0004 jmp start ;catastrophic error - cannot continue - -37a9 : 88 dey -37aa : 88 dey -37ab : irq_trap ;BRK test or unextpected BRK or IRQ -37ab : 08 php ;either SP or Y count will fail, if we do not hit -37ac : 88 dey -37ad : 88 dey -37ae : 88 dey - ;next traps could be caused by unexpected BRK or IRQ - ;check stack for BREAK and originating location - ;possible jump/branch into weeds (uninitialized space) -37af : c9bd cmp #$ff-'B' ;BRK pass 2 registers loaded? -37b1 : f042 beq break2 -37b3 : c942 cmp #'B' ;BRK pass 1 registers loaded? - trap_ne -37b5 : d0fe > bne * ;failed not equal (non zero) - -37b7 : e052 cpx #'R' - trap_ne -37b9 : d0fe > bne * ;failed not equal (non zero) - -37bb : c048 cpy #'K'-3 - trap_ne -37bd : d0fe > bne * ;failed not equal (non zero) - -37bf : 850a sta irq_a ;save registers during break test -37c1 : 860b stx irq_x -37c3 : ba tsx ;test break on stack -37c4 : bd0201 lda $102,x - cmp_flag 0 ;break test should have B=1 & unused=1 on stack -37c7 : c930 > cmp #(0 |fao)&m8 ;expected flags + always on bits - - trap_ne ; - no break flag on stack -37c9 : d0fe > bne * ;failed not equal (non zero) - -37cb : 68 pla - cmp_flag intdis ;should have added interrupt disable -37cc : c934 > cmp #(intdis |fao)&m8 ;expected flags + always on bits - - trap_ne -37ce : d0fe > bne * ;failed not equal (non zero) - -37d0 : ba tsx -37d1 : e0fc cpx #$fc ;sp -3? (return addr, flags) - trap_ne -37d3 : d0fe > bne * ;failed not equal (non zero) - -37d5 : adff01 lda $1ff ;propper return on stack -37d8 : c909 cmp #hi(brk_ret0) - trap_ne -37da : d0fe > bne * ;failed not equal (non zero) - -37dc : adfe01 lda $1fe -37df : c9d1 cmp #lo(brk_ret0) - trap_ne -37e1 : d0fe > bne * ;failed not equal (non zero) - - load_flag $ff -37e3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -37e5 : 48 pha -37e6 : a60b ldx irq_x -37e8 : e8 inx ;return registers with modifications -37e9 : a50a lda irq_a -37eb : 49aa eor #$aa -37ed : 28 plp ;N=1, V=1, Z=1, C=1 but original flags should be restored -37ee : 40 rti - trap ;runover protection -37ef : 4cef37 > jmp * ;failed anyway - -37f2 : 4c0004 jmp start ;catastrophic error - cannot continue - -37f5 : break2 ;BRK pass 2 -37f5 : e0ad cpx #$ff-'R' - trap_ne -37f7 : d0fe > bne * ;failed not equal (non zero) - -37f9 : c0b1 cpy #$ff-'K'-3 - trap_ne -37fb : d0fe > bne * ;failed not equal (non zero) - -37fd : 850a sta irq_a ;save registers during break test -37ff : 860b stx irq_x -3801 : ba tsx ;test break on stack -3802 : bd0201 lda $102,x - cmp_flag $ff ;break test should have B=1 -3805 : c9ff > cmp #($ff |fao)&m8 ;expected flags + always on bits - - trap_ne ; - no break flag on stack -3807 : d0fe > bne * ;failed not equal (non zero) - -3809 : 68 pla -380a : 0908 ora #decmode ;ignore decmode cleared if 65c02 - cmp_flag $ff ;actual passed flags -380c : c9ff > cmp #($ff |fao)&m8 ;expected flags + always on bits - - trap_ne -380e : d0fe > bne * ;failed not equal (non zero) - -3810 : ba tsx -3811 : e0fc cpx #$fc ;sp -3? (return addr, flags) - trap_ne -3813 : d0fe > bne * ;failed not equal (non zero) - -3815 : adff01 lda $1ff ;propper return on stack -3818 : c909 cmp #hi(brk_ret1) - trap_ne -381a : d0fe > bne * ;failed not equal (non zero) - -381c : adfe01 lda $1fe -381f : c9f7 cmp #lo(brk_ret1) - trap_ne -3821 : d0fe > bne * ;failed not equal (non zero) - - load_flag intdis -3823 : a904 > lda #intdis ;allow test to change I-flag (no mask) - -3825 : 48 pha -3826 : a60b ldx irq_x -3828 : e8 inx ;return registers with modifications -3829 : a50a lda irq_a -382b : 49aa eor #$aa -382d : 28 plp ;N=0, V=0, Z=0, C=0 but original flags should be restored -382e : 40 rti - trap ;runover protection -382f : 4c2f38 > jmp * ;failed anyway - -3832 : 4c0004 jmp start ;catastrophic error - cannot continue - - if report = 1 - include "report.i65" - endif - - ;copy of data to initialize BSS segment - if load_data_direct != 1 - zp_init - zp1_ db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR - zp7f_ db $7f ;test pattern for compare - ;logical zeropage operands - zpOR_ db 0,$1f,$71,$80 ;test pattern for OR - zpAN_ db $0f,$ff,$7f,$80 ;test pattern for AND - zpEO_ db $ff,$0f,$8f,$8f ;test pattern for EOR - ;indirect addressing pointers - ind1_ dw abs1 ;indirect pointer to pattern in absolute memory - dw abs1+1 - dw abs1+2 - dw abs1+3 - dw abs7f - inw1_ dw abs1-$f8 ;indirect pointer for wrap-test pattern - indt_ dw abst ;indirect pointer to store area in absolute memory - dw abst+1 - dw abst+2 - dw abst+3 - inwt_ dw abst-$f8 ;indirect pointer for wrap-test store - indAN_ dw absAN ;indirect pointer to AND pattern in absolute memory - dw absAN+1 - dw absAN+2 - dw absAN+3 - indEO_ dw absEO ;indirect pointer to EOR pattern in absolute memory - dw absEO+1 - dw absEO+2 - dw absEO+3 - indOR_ dw absOR ;indirect pointer to OR pattern in absolute memory - dw absOR+1 - dw absOR+2 - dw absOR+3 - ;add/subtract indirect pointers - adi2_ dw ada2 ;indirect pointer to operand 2 in absolute memory - sbi2_ dw sba2 ;indirect pointer to complemented operand 2 (SBC) - adiy2_ dw ada2-$ff ;with offset for indirect indexed - sbiy2_ dw sba2-$ff - zp_end - if (zp_end - zp_init) != (zp_bss_end - zp_bss) - ;force assembler error if size is different - ERROR ERROR ERROR ;mismatch between bss and zeropage data - endif - data_init - ex_and_ and #0 ;execute immediate opcodes - rts - ex_eor_ eor #0 ;execute immediate opcodes - rts - ex_ora_ ora #0 ;execute immediate opcodes - rts - ex_adc_ adc #0 ;execute immediate opcodes - rts - ex_sbc_ sbc #0 ;execute immediate opcodes - rts - abs1_ db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR - abs7f_ db $7f ;test pattern for compare - ;loads - fLDx_ db fn,fn,0,fz ;expected flags for load - ;shifts - rASL_ ;expected result ASL & ROL -carry - rROL_ db $86,$04,$82,0 ; " - rROLc_ db $87,$05,$83,1 ;expected result ROL +carry - rLSR_ ;expected result LSR & ROR -carry - rROR_ db $61,$41,$20,0 ; " - rRORc_ db $e1,$c1,$a0,$80 ;expected result ROR +carry - fASL_ ;expected flags for shifts - fROL_ db fnc,fc,fn,fz ;no carry in - fROLc_ db fnc,fc,fn,0 ;carry in - fLSR_ - fROR_ db fc,0,fc,fz ;no carry in - fRORc_ db fnc,fn,fnc,fn ;carry in - ;increments (decrements) - rINC_ db $7f,$80,$ff,0,1 ;expected result for INC/DEC - fINC_ db 0,fn,fn,fz,0 ;expected flags for INC/DEC - ;logical memory operand - absOR_ db 0,$1f,$71,$80 ;test pattern for OR - absAN_ db $0f,$ff,$7f,$80 ;test pattern for AND - absEO_ db $ff,$0f,$8f,$8f ;test pattern for EOR - ;logical accu operand - absORa_ db 0,$f1,$1f,0 ;test pattern for OR - absANa_ db $f0,$ff,$ff,$ff ;test pattern for AND - absEOa_ db $ff,$f0,$f0,$0f ;test pattern for EOR - ;logical results - absrlo_ db 0,$ff,$7f,$80 - absflo_ db fz,fn,0,fn - data_end - if (data_end - data_init) != (data_bss_end - data_bss) - ;force assembler error if size is different - ERROR ERROR ERROR ;mismatch between bss and data - endif - - vec_init - dw nmi_trap - dw res_trap - dw irq_trap - vec_bss equ $fffa - endif ;end of RAM init data - - if (load_data_direct = 1) & (ROM_vectors = 1) -fffa = org $fffa ;vectors -fffa : 9d37 dw nmi_trap -fffc : a337 dw res_trap -fffe : ab37 dw irq_trap - endif - -fffa = end start - -No errors in pass 2. -Wrote binary from address $0000 through $ffff. -Total size 65536 bytes. -Program start address is at $0400 (1024). - \ No newline at end of file diff --git a/core6502/testdata/65C02_extended_opcodes_test.bin b/core6502/testdata/65C02_extended_opcodes_test.bin deleted file mode 100644 index b1ea946..0000000 Binary files a/core6502/testdata/65C02_extended_opcodes_test.bin and /dev/null differ diff --git a/core6502/testdata/65C02_extended_opcodes_test.lst b/core6502/testdata/65C02_extended_opcodes_test.lst deleted file mode 100644 index d44487e..0000000 --- a/core6502/testdata/65C02_extended_opcodes_test.lst +++ /dev/null @@ -1,11510 +0,0 @@ -AS65 Assembler for R6502 [1.42]. Copyright 1994-2007, Frank A. Kingswood Page 1 ------------------------------------------------- 65C02_extended_opcodes_test.a65c ------------------------------------------------ - -2884 lines read, no errors in pass 1. - ; - ; 6 5 C 0 2 E X T E N D E D O P C O D E S T E S T - ; - ; Copyright (C) 2013-2017 Klaus Dormann - ; - ; This program is free software: you can redistribute it and/or modify - ; it under the terms of the GNU General Public License as published by - ; the Free Software Foundation, either version 3 of the License, or - ; (at your option) any later version. - ; - ; This program is distributed in the hope that it will be useful, - ; but WITHOUT ANY WARRANTY; without even the implied warranty of - ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - ; GNU General Public License for more details. - ; - ; You should have received a copy of the GNU General Public License - ; along with this program. If not, see . - - - ; This program is designed to test all additional 65C02 opcodes, addressing - ; modes and functionality not available in the NMOS version of the 6502. - ; The 6502_functional_test is a prerequisite to this test. - ; NMI, IRQ, STP & WAI are covered in the 6502_interrupt_test. - ; - ; version 04-dec-2017 - ; contact info at http://2m5.de or email K@2m5.de - ; - ; assembled with AS65 from http://www.kingswood-consulting.co.uk/assemblers/ - ; command line switches: -l -m -s2 -w -x -h0 - ; | | | | | no page headers in listing - ; | | | | 65C02 extensions - ; | | | wide listing (133 char/col) - ; | | write intel hex file instead of binary - ; | expand macros in listing - ; generate pass2 listing - ; - ; No IO - should be run from a monitor with access to registers. - ; To run load intel hex image with a load command, than alter PC to 400 hex - ; (code_segment) and enter a go command. - ; Loop on program counter determines error or successful completion of test. - ; Check listing for relevant traps (jump/branch *). - ; Please note that in early tests some instructions will have to be used before - ; they are actually tested! - ; - ; RESET, NMI or IRQ should not occur and will be trapped if vectors are enabled. - ; Tests documented behavior of the original 65C02 only! - ; Decimal ops will only be tested with valid BCD operands and the V flag will - ; be ignored as it is absolutely useless in decimal mode. - ; - ; Debugging hints: - ; Most of the code is written sequentially. if you hit a trap, check the - ; immediately preceeding code for the instruction to be tested. Results are - ; tested first, flags are checked second by pushing them onto the stack and - ; pulling them to the accumulator after the result was checked. The "real" - ; flags are no longer valid for the tested instruction at this time! - ; If the tested instruction was indexed, the relevant index (X or Y) must - ; also be checked. Opposed to the flags, X and Y registers are still valid. - ; - ; versions: - ; 19-jul-2013 1st version distributed for testing - ; 23-jul-2013 fixed BRA out of range due to larger trap macros - ; added RAM integrity check - ; 16-aug-2013 added error report to standard output option - ; 23-aug-2015 change revoked - ; 24-aug-2015 all self modifying immediate opcodes now execute in data RAM - ; 28-aug-2015 fixed decimal adc/sbc immediate only testing carry - ; 09-feb-2017 fixed RMB/SMB tested when they shouldn't be tested - ; 04-dec-2017 fixed BRK not tested for actually going through the IRQ vector - ; added option to skip the remainder of a failing test - ; in report.i65 - ; added skip override to undefined opcode as NOP test - - - ; C O N F I G U R A T I O N - - ;ROM_vectors writable (0=no, 1=yes) - ;if ROM vectors can not be used interrupts will not be trapped - ;as a consequence BRK can not be tested but will be emulated to test RTI -0001 = ROM_vectors = 1 - - ;load_data_direct (0=move from code segment, 1=load directly) - ;loading directly is preferred but may not be supported by your platform - ;0 produces only consecutive object code, 1 is not suitable for a binary image -0001 = load_data_direct = 1 - - ;I_flag behavior (0=force enabled, 1=force disabled, 2=prohibit change, 3=allow - ;change) 2 requires extra code and is not recommended. -0003 = I_flag = 3 - - ;configure memory - try to stay away from memory used by the system - ;zero_page memory start address, $4e (78) consecutive Bytes required - ; add 2 if I_flag = 2 -000a = zero_page = $a - - ;data_segment memory start address, $63 (99) consecutive Bytes required - ; + 12 Bytes at data_segment + $f9 (JMP indirect page cross test) -0200 = data_segment = $200 - if (data_segment & $ff) != 0 - ERROR ERROR ERROR low byte of data_segment MUST be $00 !! - endif - - ;code_segment memory start address, 10kB of consecutive space required - ; add 1 kB if I_flag = 2 -0400 = code_segment = $400 - - ;added WDC only opcodes WAI & STP (0=test as NOPs, >0=no test) -0001 = wdc_op = 1 - - ;added Rockwell & WDC opcodes BBR, BBS, RMB & SMB - ;(0=test as NOPs, 1=full test, >1=no test) -0001 = rkwl_wdc_op = 1 - - ;skip testing all undefined opcodes override - ;0=test as NOP, >0=skip -0000 = skip_nop = 0 - - ;report errors through I/O channel (0=use standard self trap loops, 1=include - ;report.i65 as I/O channel, add 3 kB) -0000 = report = 0 - - ;RAM integrity test option. Checks for undesired RAM writes. - ;set lowest non RAM or RAM mirror address page (-1=disable, 0=64k, $40=16k) - ;leave disabled if a monitor, OS or background interrupt is allowed to alter RAM -ffff = ram_top = -1 - - noopt ;do not take shortcuts - - ;macros for error & success traps to allow user modification - ;example: - ;trap macro - ; jsr my_error_handler - ; endm - ;trap_eq macro - ; bne skip\? - ; trap ;failed equal (zero) - ;skip\? - ; endm - ; - ; my_error_handler should pop the calling address from the stack and report it. - ; putting larger portions of code (more than 3 bytes) inside the trap macro - ; may lead to branch range problems for some tests. - if report = 0 - trap macro - jmp * ;failed anyway - endm - trap_eq macro - beq * ;failed equal (zero) - endm - trap_ne macro - bne * ;failed not equal (non zero) - endm - trap_cs macro - bcs * ;failed carry set - endm - trap_cc macro - bcc * ;failed carry clear - endm - trap_mi macro - bmi * ;failed minus (bit 7 set) - endm - trap_pl macro - bpl * ;failed plus (bit 7 clear) - endm - trap_vs macro - bvs * ;failed overflow set - endm - trap_vc macro - bvc * ;failed overflow clear - endm - ; please observe that during the test the stack gets invalidated - ; therefore a RTS inside the success macro is not possible - success macro - jmp * ;test passed, no errors - endm - endif - if report = 1 - trap macro - jsr report_error - endm - trap_eq macro - bne skip\? - trap ;failed equal (zero) - skip\? - endm - trap_ne macro - beq skip\? - trap ;failed not equal (non zero) - skip\? - endm - trap_cs macro - bcc skip\? - trap ;failed carry set - skip\? - endm - trap_cc macro - bcs skip\? - trap ;failed carry clear - skip\? - endm - trap_mi macro - bpl skip\? - trap ;failed minus (bit 7 set) - skip\? - endm - trap_pl macro - bmi skip\? - trap ;failed plus (bit 7 clear) - skip\? - endm - trap_vs macro - bvc skip\? - trap ;failed overflow set - skip\? - endm - trap_vc macro - bvs skip\? - trap ;failed overflow clear - skip\? - endm - ; please observe that during the test the stack gets invalidated - ; therefore a RTS inside the success macro is not possible - success macro - jsr report_success - endm - endif - - -0001 = carry equ %00000001 ;flag bits in status -0002 = zero equ %00000010 -0004 = intdis equ %00000100 -0008 = decmode equ %00001000 -0010 = break equ %00010000 -0020 = reserv equ %00100000 -0040 = overfl equ %01000000 -0080 = minus equ %10000000 - -0001 = fc equ carry -0002 = fz equ zero -0003 = fzc equ carry+zero -0040 = fv equ overfl -0042 = fvz equ overfl+zero -0080 = fn equ minus -0081 = fnc equ minus+carry -0082 = fnz equ minus+zero -0083 = fnzc equ minus+zero+carry -00c0 = fnv equ minus+overfl - -0030 = fao equ break+reserv ;bits always on after PHP, BRK -0034 = fai equ fao+intdis ;+ forced interrupt disable -00ff = m8 equ $ff ;8 bit mask -00fb = m8i equ $ff&~intdis ;8 bit mask - interrupt disable - - ;macros to allow masking of status bits. - ;masking of interrupt enable/disable on load and compare - ;masking of always on bits after PHP or BRK (unused & break) on compare - if I_flag = 0 - load_flag macro - lda #\1&m8i ;force enable interrupts (mask I) - endm - cmp_flag macro - cmp #(\1|fao)&m8i ;I_flag is always enabled + always on bits - endm - eor_flag macro - eor #(\1&m8i|fao) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 1 - load_flag macro - lda #\1|intdis ;force disable interrupts - endm - cmp_flag macro - cmp #(\1|fai)&m8 ;I_flag is always disabled + always on bits - endm - eor_flag macro - eor #(\1|fai) ;invert expected flags + always on bits + I - endm - endif - if I_flag = 2 - load_flag macro - lda #\1 - ora flag_I_on ;restore I-flag - and flag_I_off - endm - cmp_flag macro - eor flag_I_on ;I_flag is never changed - cmp #(\1|fao)&m8i ;expected flags + always on bits, mask I - endm - eor_flag macro - eor flag_I_on ;I_flag is never changed - eor #(\1&m8i|fao) ;mask I, invert expected flags + always on bits - endm - endif - if I_flag = 3 - load_flag macro - lda #\1 ;allow test to change I-flag (no mask) - endm - cmp_flag macro - cmp #(\1|fao)&m8 ;expected flags + always on bits - endm - eor_flag macro - eor #\1|fao ;invert expected flags + always on bits - endm - endif - - ;macros to set (register|memory|zeropage) & status - set_stat macro ;setting flags in the processor status register - load_flag \1 - pha ;use stack to load status - plp - endm - - set_a macro ;precharging accu & status - load_flag \2 - pha ;use stack to load status - lda #\1 ;precharge accu - plp - endm - - set_x macro ;precharging index & status - load_flag \2 - pha ;use stack to load status - ldx #\1 ;precharge index x - plp - endm - - set_y macro ;precharging index & status - load_flag \2 - pha ;use stack to load status - ldy #\1 ;precharge index y - plp - endm - - set_ax macro ;precharging indexed accu & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;precharge accu - plp - endm - - set_ay macro ;precharging indexed accu & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,y ;precharge accu - plp - endm - - set_z macro ;precharging indexed zp & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to zeropage - sta zpt - plp - endm - - set_zx macro ;precharging zp,x & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to indexed zeropage - sta zpt,x - plp - endm - - set_abs macro ;precharging indexed memory & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to memory - sta abst - plp - endm - - set_absx macro ;precharging abs,x & immediate status - load_flag \2 - pha ;use stack to load status - lda \1,x ;load to indexed memory - sta abst,x - plp - endm - - ;macros to test (register|memory|zeropage) & status & (mask) - tst_stat macro ;testing flags in the processor status register - php ;save status - pla ;use stack to retrieve status - pha - cmp_flag \1 - trap_ne - plp ;restore status - endm - - tst_a macro ;testing result in accu & flags - php ;save flags - cmp #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_as macro ;testing result in accu & flags, save accu - pha - php ;save flags - cmp #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - pla - endm - - tst_x macro ;testing result in x index & flags - php ;save flags - cpx #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_y macro ;testing result in y index & flags - php ;save flags - cpy #\1 ;test result - trap_ne - pla ;load status - pha - cmp_flag \2 - trap_ne - plp ;restore status - endm - - tst_ax macro ;indexed testing result in accu & flags - php ;save flags - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne ; - endm - - tst_ay macro ;indexed testing result in accu & flags - php ;save flags - cmp \1,y ;test result - trap_ne ; - pla ;load status - eor_flag \3 - cmp \2,y ;test flags - trap_ne - endm - - tst_z macro ;indexed testing result in zp & flags - php ;save flags - lda zpt - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_zx macro ;testing result in zp,x & flags - php ;save flags - lda zpt,x - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_abs macro ;indexed testing result in memory & flags - php ;save flags - lda abst - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - tst_absx macro ;testing result in abs,x & flags - php ;save flags - lda abst,x - cmp \1,x ;test result - trap_ne - pla ;load status - eor_flag \3 - cmp \2,x ;test flags - trap_ne - endm - - ; RAM integrity test - ; verifies that none of the previous tests has altered RAM outside of the - ; designated write areas. - ; uses zpt word as indirect pointer, zpt+2 word as checksum - if ram_top > -1 - check_ram macro - cld - lda #0 - sta zpt ;set low byte of indirect pointer - sta zpt+3 ;checksum high byte - ldx #11 ;reset modifiable RAM - ccs1\? sta jxi_tab,x ;JMP indirect page cross area - dex - bpl ccs1\? - clc - ldx #zp_bss-zero_page ;zeropage - write test area - ccs3\? adc zero_page,x - bcc ccs2\? - inc zpt+3 ;carry to high byte - clc - ccs2\? inx - bne ccs3\? - ldx #hi(abs1) ;set high byte of indirect pointer - stx zpt+1 - ldy #lo(abs1) ;data after write & execute test area - ccs5\? adc (zpt),y - bcc ccs4\? - inc zpt+3 ;carry to high byte - clc - ccs4\? iny - bne ccs5\? - inx ;advance RAM high address - stx zpt+1 - cpx #ram_top - bne ccs5\? - sta zpt+2 ;checksum low is - cmp ram_chksm ;checksum low expected - trap_ne ;checksum mismatch - lda zpt+3 ;checksum high is - cmp ram_chksm+1 ;checksum high expected - trap_ne ;checksum mismatch - endm - else - check_ram macro - ;RAM check disabled - RAM size not set - endm - endif - - next_test macro ;make sure, tests don't jump the fence - lda test_case ;previous test - cmp #test_num - trap_ne ;test is out of sequence - test_num = test_num + 1 - lda #test_num ;*** next tests' number - sta test_case - ;check_ram ;uncomment to find altered RAM after each test - endm - - if load_data_direct = 1 - data - else - bss ;uninitialized segment, copy of data at end of code! - endif - ; org zero_page -0000 = org 0 ;edited to provide binaries loading from 0 -0000 : 00000000000000.. ds zero_page - ;break test interrupt save -000a : 00 irq_a ds 1 ;a register -000b : 00 irq_x ds 1 ;x register - if I_flag = 2 - ;masking for I bit in status - flag_I_on ds 1 ;or mask to load flags - flag_I_off ds 1 ;and mask to load flags - endif -000c : zpt ;5 bytes store/modify test area - ;add/subtract operand generation and result/flag prediction -000c : 00 adfc ds 1 ;carry flag before op -000d : 00 ad1 ds 1 ;operand 1 - accumulator -000e : 00 ad2 ds 1 ;operand 2 - memory / immediate -000f : 00 adrl ds 1 ;expected result bits 0-7 -0010 : 00 adrh ds 1 ;expected result bit 8 (carry) -0011 : 00 adrf ds 1 ;expected flags NV0000ZC (-V in decimal mode) -0012 : 00 sb2 ds 1 ;operand 2 complemented for subtract -0013 : zp_bss -0013 : c3824100 zp1 db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR -0017 : 7f zp7f db $7f ;test pattern for compare - ;logical zeropage operands -0018 : 001f7180 zpOR db 0,$1f,$71,$80 ;test pattern for OR -001c : 0fff7f80 zpAN db $0f,$ff,$7f,$80 ;test pattern for AND -0020 : ff0f8f8f zpEO db $ff,$0f,$8f,$8f ;test pattern for EOR - ;indirect addressing pointers -0024 : 1002 ind1 dw abs1 ;indirect pointer to pattern in absolute memory -0026 : 1102 dw abs1+1 -0028 : 1202 dw abs1+2 -002a : 1302 dw abs1+3 -002c : 1402 dw abs7f -002e : 1801 inw1 dw abs1-$f8 ;indirect pointer for wrap-test pattern -0030 : 0502 indt dw abst ;indirect pointer to store area in absolute memory -0032 : 0602 dw abst+1 -0034 : 0702 dw abst+2 -0036 : 0802 dw abst+3 -0038 : 0d01 inwt dw abst-$f8 ;indirect pointer for wrap-test store -003a : 4702 indAN dw absAN ;indirect pointer to AND pattern in absolute memory -003c : 4802 dw absAN+1 -003e : 4902 dw absAN+2 -0040 : 4a02 dw absAN+3 -0042 : 4b02 indEO dw absEO ;indirect pointer to EOR pattern in absolute memory -0044 : 4c02 dw absEO+1 -0046 : 4d02 dw absEO+2 -0048 : 4e02 dw absEO+3 -004a : 4302 indOR dw absOR ;indirect pointer to OR pattern in absolute memory -004c : 4402 dw absOR+1 -004e : 4502 dw absOR+2 -0050 : 4602 dw absOR+3 - ;add/subtract indirect pointers -0052 : 0502 adi2 dw ada2 ;indirect pointer to operand 2 in absolute memory -0054 : 0602 sbi2 dw sba2 ;indirect pointer to complemented operand 2 (SBC) -0056 : 0601 adiy2 dw ada2-$ff ;with offset for indirect indexed -0058 : 0701 sbiy2 dw sba2-$ff -005a : zp_bss_end - -0200 = org data_segment -0200 : 0000 pg_x ds 2 ;high JMP indirect address for page cross bug -0202 : 00 test_case ds 1 ;current test number -0203 : 0000 ram_chksm ds 2 ;checksum for RAM integrity test - ;add/subtract operand copy - abs tests write area -0205 : abst ;5 bytes store/modify test area -0205 : 00 ada2 ds 1 ;operand 2 -0206 : 00 sba2 ds 1 ;operand 2 complemented for subtract -0207 : 000000 ds 3 ;fill remaining bytes -020a : data_bss - if load_data_direct = 1 -020a : 6900 ex_adci adc #0 ;execute immediate opcodes -020c : 60 rts -020d : e900 ex_sbci sbc #0 ;execute immediate opcodes -020f : 60 rts - else - ex_adci ds 3 - ex_sbci ds 3 - endif -0210 : c3824100 abs1 db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR -0214 : 7f abs7f db $7f ;test pattern for compare - ;loads -0215 : 80800002 fLDx db fn,fn,0,fz ;expected flags for load - ;shifts -0219 : rASL ;expected result ASL & ROL -carry -0219 : 86048200 rROL db $86,$04,$82,0 ; " -021d : 87058301 rROLc db $87,$05,$83,1 ;expected result ROL +carry -0221 : rLSR ;expected result LSR & ROR -carry -0221 : 61412000 rROR db $61,$41,$20,0 ; " -0225 : e1c1a080 rRORc db $e1,$c1,$a0,$80 ;expected result ROR +carry -0229 : fASL ;expected flags for shifts -0229 : 81018002 fROL db fnc,fc,fn,fz ;no carry in -022d : 81018000 fROLc db fnc,fc,fn,0 ;carry in -0231 : fLSR -0231 : 01000102 fROR db fc,0,fc,fz ;no carry in -0235 : 81808180 fRORc db fnc,fn,fnc,fn ;carry in - ;increments (decrements) -0239 : 7f80ff0001 rINC db $7f,$80,$ff,0,1 ;expected result for INC/DEC -023e : 0080800200 fINC db 0,fn,fn,fz,0 ;expected flags for INC/DEC - ;logical memory operand -0243 : 001f7180 absOR db 0,$1f,$71,$80 ;test pattern for OR -0247 : 0fff7f80 absAN db $0f,$ff,$7f,$80 ;test pattern for AND -024b : ff0f8f8f absEO db $ff,$0f,$8f,$8f ;test pattern for EOR - ;logical accu operand -024f : 00f11f00 absORa db 0,$f1,$1f,0 ;test pattern for OR -0253 : f0ffffff absANa db $f0,$ff,$ff,$ff ;test pattern for AND -0257 : fff0f00f absEOa db $ff,$f0,$f0,$0f ;test pattern for EOR - ;logical results -025b : 00ff7f80 absrlo db 0,$ff,$7f,$80 -025f : 02800080 absflo db fz,fn,0,fn -0263 : data_bss_end - ;define area for page crossing JMP (abs) & JMP (abs,x) test -02f9 = jxi_tab equ data_segment + $100 - 7 ;JMP (jxi_tab,x) x=6 -02fd = ji_tab equ data_segment + $100 - 3 ;JMP (ji_tab+2) -0300 = jxp_tab equ data_segment + $100 ;JMP (jxp_tab-255) x=255 - - - code -0400 = org code_segment -0400 : d8 start cld -0401 : a2ff ldx #$ff -0403 : 9a txs -0404 : a900 lda #0 ;*** test 0 = initialize -0406 : 8d0202 sta test_case -0000 = test_num = 0 - - ;stop interrupts before initializing BSS - if I_flag = 1 - sei - endif - - ;initialize I/O for report channel - if report = 1 - jsr report_init - endif - - ;initialize BSS segment - if load_data_direct != 1 - ldx #zp_end-zp_init-1 - ld_zp lda zp_init,x - sta zp_bss,x - dex - bpl ld_zp - ldx #data_end-data_init-1 - ld_data lda data_init,x - sta data_bss,x - dex - bpl ld_data - if ROM_vectors = 1 - ldx #5 - ld_vect lda vec_init,x - sta vec_bss,x - dex - bpl ld_vect - endif - endif - - ;retain status of interrupt flag - if I_flag = 2 - php - pla - and #4 ;isolate flag - sta flag_I_on ;or mask - eor #lo(~4) ;reverse - sta flag_I_off ;and mask - endif - - ;generate checksum for RAM integrity test - if ram_top > -1 - lda #0 - sta zpt ;set low byte of indirect pointer - sta ram_chksm+1 ;checksum high byte - ldx #11 ;reset modifiable RAM - gcs1 sta jxi_tab,x ;JMP indirect page cross area - dex - bpl gcs1 - clc - ldx #zp_bss-zero_page ;zeropage - write test area - gcs3 adc zero_page,x - bcc gcs2 - inc ram_chksm+1 ;carry to high byte - clc - gcs2 inx - bne gcs3 - ldx #hi(abs1) ;set high byte of indirect pointer - stx zpt+1 - ldy #lo(abs1) ;data after write & execute test area - gcs5 adc (zpt),y - bcc gcs4 - inc ram_chksm+1 ;carry to high byte - clc - gcs4 iny - bne gcs5 - inx ;advance RAM high address - stx zpt+1 - cpx #ram_top - bne gcs5 - sta ram_chksm ;checksum complete - endif - next_test -0409 : ad0202 > lda test_case ;previous test -040c : c900 > cmp #test_num - > trap_ne ;test is out of sequence -040e : d0fe > bne * ;failed not equal (non zero) - > -0001 = >test_num = test_num + 1 -0410 : a901 > lda #test_num ;*** next tests' number -0412 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ;testing stack operations PHX PHY PLX PLY -0415 : a999 lda #$99 ;protect a -0417 : a2ff ldx #$ff ;initialize stack -0419 : 9a txs -041a : a255 ldx #$55 -041c : da phx -041d : a2aa ldx #$aa -041f : da phx -0420 : ecfe01 cpx $1fe ;on stack ? - trap_ne -0423 : d0fe > bne * ;failed not equal (non zero) - -0425 : ba tsx -0426 : e0fd cpx #$fd ;sp decremented? - trap_ne -0428 : d0fe > bne * ;failed not equal (non zero) - -042a : 7a ply -042b : c0aa cpy #$aa ;successful retreived from stack? - trap_ne -042d : d0fe > bne * ;failed not equal (non zero) - -042f : 7a ply -0430 : c055 cpy #$55 - trap_ne -0432 : d0fe > bne * ;failed not equal (non zero) - -0434 : ccff01 cpy $1ff ;remains on stack? - trap_ne -0437 : d0fe > bne * ;failed not equal (non zero) - -0439 : ba tsx -043a : e0ff cpx #$ff ;sp incremented? - trap_ne -043c : d0fe > bne * ;failed not equal (non zero) - - -043e : a0a5 ldy #$a5 -0440 : 5a phy -0441 : a05a ldy #$5a -0443 : 5a phy -0444 : ccfe01 cpy $1fe ;on stack ? - trap_ne -0447 : d0fe > bne * ;failed not equal (non zero) - -0449 : ba tsx -044a : e0fd cpx #$fd ;sp decremented? - trap_ne -044c : d0fe > bne * ;failed not equal (non zero) - -044e : fa plx -044f : e05a cpx #$5a ;successful retreived from stack? - trap_ne -0451 : d0fe > bne * ;failed not equal (non zero) - -0453 : fa plx -0454 : e0a5 cpx #$a5 - trap_ne -0456 : d0fe > bne * ;failed not equal (non zero) - -0458 : ecff01 cpx $1ff ;remains on stack? - trap_ne -045b : d0fe > bne * ;failed not equal (non zero) - -045d : ba tsx -045e : e0ff cpx #$ff ;sp incremented? - trap_ne -0460 : d0fe > bne * ;failed not equal (non zero) - -0462 : c999 cmp #$99 ;unchanged? - trap_ne -0464 : d0fe > bne * ;failed not equal (non zero) - - next_test -0466 : ad0202 > lda test_case ;previous test -0469 : c901 > cmp #test_num - > trap_ne ;test is out of sequence -046b : d0fe > bne * ;failed not equal (non zero) - > -0002 = >test_num = test_num + 1 -046d : a902 > lda #test_num ;*** next tests' number -046f : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; test PHX does not alter flags or X but PLX does -0472 : a0aa ldy #$aa ;protect y - set_x 1,$ff ;push - > load_flag $ff -0474 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0476 : 48 > pha ;use stack to load status -0477 : a201 > ldx #1 ;precharge index x -0479 : 28 > plp - -047a : da phx - tst_x 1,$ff -047b : 08 > php ;save flags -047c : e001 > cpx #1 ;test result - > trap_ne -047e : d0fe > bne * ;failed not equal (non zero) - > -0480 : 68 > pla ;load status -0481 : 48 > pha - > cmp_flag $ff -0482 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0484 : d0fe > bne * ;failed not equal (non zero) - > -0486 : 28 > plp ;restore status - - set_x 0,0 - > load_flag 0 -0487 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0489 : 48 > pha ;use stack to load status -048a : a200 > ldx #0 ;precharge index x -048c : 28 > plp - -048d : da phx - tst_x 0,0 -048e : 08 > php ;save flags -048f : e000 > cpx #0 ;test result - > trap_ne -0491 : d0fe > bne * ;failed not equal (non zero) - > -0493 : 68 > pla ;load status -0494 : 48 > pha - > cmp_flag 0 -0495 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0497 : d0fe > bne * ;failed not equal (non zero) - > -0499 : 28 > plp ;restore status - - set_x $ff,$ff - > load_flag $ff -049a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -049c : 48 > pha ;use stack to load status -049d : a2ff > ldx #$ff ;precharge index x -049f : 28 > plp - -04a0 : da phx - tst_x $ff,$ff -04a1 : 08 > php ;save flags -04a2 : e0ff > cpx #$ff ;test result - > trap_ne -04a4 : d0fe > bne * ;failed not equal (non zero) - > -04a6 : 68 > pla ;load status -04a7 : 48 > pha - > cmp_flag $ff -04a8 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -04aa : d0fe > bne * ;failed not equal (non zero) - > -04ac : 28 > plp ;restore status - - set_x 1,0 - > load_flag 0 -04ad : a900 > lda #0 ;allow test to change I-flag (no mask) - > -04af : 48 > pha ;use stack to load status -04b0 : a201 > ldx #1 ;precharge index x -04b2 : 28 > plp - -04b3 : da phx - tst_x 1,0 -04b4 : 08 > php ;save flags -04b5 : e001 > cpx #1 ;test result - > trap_ne -04b7 : d0fe > bne * ;failed not equal (non zero) - > -04b9 : 68 > pla ;load status -04ba : 48 > pha - > cmp_flag 0 -04bb : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -04bd : d0fe > bne * ;failed not equal (non zero) - > -04bf : 28 > plp ;restore status - - set_x 0,$ff - > load_flag $ff -04c0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -04c2 : 48 > pha ;use stack to load status -04c3 : a200 > ldx #0 ;precharge index x -04c5 : 28 > plp - -04c6 : da phx - tst_x 0,$ff -04c7 : 08 > php ;save flags -04c8 : e000 > cpx #0 ;test result - > trap_ne -04ca : d0fe > bne * ;failed not equal (non zero) - > -04cc : 68 > pla ;load status -04cd : 48 > pha - > cmp_flag $ff -04ce : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -04d0 : d0fe > bne * ;failed not equal (non zero) - > -04d2 : 28 > plp ;restore status - - set_x $ff,0 - > load_flag 0 -04d3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -04d5 : 48 > pha ;use stack to load status -04d6 : a2ff > ldx #$ff ;precharge index x -04d8 : 28 > plp - -04d9 : da phx - tst_x $ff,0 -04da : 08 > php ;save flags -04db : e0ff > cpx #$ff ;test result - > trap_ne -04dd : d0fe > bne * ;failed not equal (non zero) - > -04df : 68 > pla ;load status -04e0 : 48 > pha - > cmp_flag 0 -04e1 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -04e3 : d0fe > bne * ;failed not equal (non zero) - > -04e5 : 28 > plp ;restore status - - set_x 0,$ff ;pull - > load_flag $ff -04e6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -04e8 : 48 > pha ;use stack to load status -04e9 : a200 > ldx #0 ;precharge index x -04eb : 28 > plp - -04ec : fa plx - tst_x $ff,$ff-zero -04ed : 08 > php ;save flags -04ee : e0ff > cpx #$ff ;test result - > trap_ne -04f0 : d0fe > bne * ;failed not equal (non zero) - > -04f2 : 68 > pla ;load status -04f3 : 48 > pha - > cmp_flag $ff-zero -04f4 : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -04f6 : d0fe > bne * ;failed not equal (non zero) - > -04f8 : 28 > plp ;restore status - - set_x $ff,0 - > load_flag 0 -04f9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -04fb : 48 > pha ;use stack to load status -04fc : a2ff > ldx #$ff ;precharge index x -04fe : 28 > plp - -04ff : fa plx - tst_x 0,zero -0500 : 08 > php ;save flags -0501 : e000 > cpx #0 ;test result - > trap_ne -0503 : d0fe > bne * ;failed not equal (non zero) - > -0505 : 68 > pla ;load status -0506 : 48 > pha - > cmp_flag zero -0507 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0509 : d0fe > bne * ;failed not equal (non zero) - > -050b : 28 > plp ;restore status - - set_x $fe,$ff - > load_flag $ff -050c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -050e : 48 > pha ;use stack to load status -050f : a2fe > ldx #$fe ;precharge index x -0511 : 28 > plp - -0512 : fa plx - tst_x 1,$ff-zero-minus -0513 : 08 > php ;save flags -0514 : e001 > cpx #1 ;test result - > trap_ne -0516 : d0fe > bne * ;failed not equal (non zero) - > -0518 : 68 > pla ;load status -0519 : 48 > pha - > cmp_flag $ff-zero-minus -051a : c97d > cmp #($ff-zero-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -051c : d0fe > bne * ;failed not equal (non zero) - > -051e : 28 > plp ;restore status - - set_x 0,0 - > load_flag 0 -051f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0521 : 48 > pha ;use stack to load status -0522 : a200 > ldx #0 ;precharge index x -0524 : 28 > plp - -0525 : fa plx - tst_x $ff,minus -0526 : 08 > php ;save flags -0527 : e0ff > cpx #$ff ;test result - > trap_ne -0529 : d0fe > bne * ;failed not equal (non zero) - > -052b : 68 > pla ;load status -052c : 48 > pha - > cmp_flag minus -052d : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -052f : d0fe > bne * ;failed not equal (non zero) - > -0531 : 28 > plp ;restore status - - set_x $ff,$ff - > load_flag $ff -0532 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0534 : 48 > pha ;use stack to load status -0535 : a2ff > ldx #$ff ;precharge index x -0537 : 28 > plp - -0538 : fa plx - tst_x 0,$ff-minus -0539 : 08 > php ;save flags -053a : e000 > cpx #0 ;test result - > trap_ne -053c : d0fe > bne * ;failed not equal (non zero) - > -053e : 68 > pla ;load status -053f : 48 > pha - > cmp_flag $ff-minus -0540 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0542 : d0fe > bne * ;failed not equal (non zero) - > -0544 : 28 > plp ;restore status - - set_x $fe,0 - > load_flag 0 -0545 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0547 : 48 > pha ;use stack to load status -0548 : a2fe > ldx #$fe ;precharge index x -054a : 28 > plp - -054b : fa plx - tst_x 1,0 -054c : 08 > php ;save flags -054d : e001 > cpx #1 ;test result - > trap_ne -054f : d0fe > bne * ;failed not equal (non zero) - > -0551 : 68 > pla ;load status -0552 : 48 > pha - > cmp_flag 0 -0553 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0555 : d0fe > bne * ;failed not equal (non zero) - > -0557 : 28 > plp ;restore status - -0558 : c0aa cpy #$aa ;Y unchanged - trap_ne -055a : d0fe > bne * ;failed not equal (non zero) - - next_test -055c : ad0202 > lda test_case ;previous test -055f : c902 > cmp #test_num - > trap_ne ;test is out of sequence -0561 : d0fe > bne * ;failed not equal (non zero) - > -0003 = >test_num = test_num + 1 -0563 : a903 > lda #test_num ;*** next tests' number -0565 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; test PHY does not alter flags or Y but PLY does -0568 : a255 ldx #$55 ;x & a protected - set_y 1,$ff ;push - > load_flag $ff -056a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -056c : 48 > pha ;use stack to load status -056d : a001 > ldy #1 ;precharge index y -056f : 28 > plp - -0570 : 5a phy - tst_y 1,$ff -0571 : 08 > php ;save flags -0572 : c001 > cpy #1 ;test result - > trap_ne -0574 : d0fe > bne * ;failed not equal (non zero) - > -0576 : 68 > pla ;load status -0577 : 48 > pha - > cmp_flag $ff -0578 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -057a : d0fe > bne * ;failed not equal (non zero) - > -057c : 28 > plp ;restore status - - set_y 0,0 - > load_flag 0 -057d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -057f : 48 > pha ;use stack to load status -0580 : a000 > ldy #0 ;precharge index y -0582 : 28 > plp - -0583 : 5a phy - tst_y 0,0 -0584 : 08 > php ;save flags -0585 : c000 > cpy #0 ;test result - > trap_ne -0587 : d0fe > bne * ;failed not equal (non zero) - > -0589 : 68 > pla ;load status -058a : 48 > pha - > cmp_flag 0 -058b : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -058d : d0fe > bne * ;failed not equal (non zero) - > -058f : 28 > plp ;restore status - - set_y $ff,$ff - > load_flag $ff -0590 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0592 : 48 > pha ;use stack to load status -0593 : a0ff > ldy #$ff ;precharge index y -0595 : 28 > plp - -0596 : 5a phy - tst_y $ff,$ff -0597 : 08 > php ;save flags -0598 : c0ff > cpy #$ff ;test result - > trap_ne -059a : d0fe > bne * ;failed not equal (non zero) - > -059c : 68 > pla ;load status -059d : 48 > pha - > cmp_flag $ff -059e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05a0 : d0fe > bne * ;failed not equal (non zero) - > -05a2 : 28 > plp ;restore status - - set_y 1,0 - > load_flag 0 -05a3 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -05a5 : 48 > pha ;use stack to load status -05a6 : a001 > ldy #1 ;precharge index y -05a8 : 28 > plp - -05a9 : 5a phy - tst_y 1,0 -05aa : 08 > php ;save flags -05ab : c001 > cpy #1 ;test result - > trap_ne -05ad : d0fe > bne * ;failed not equal (non zero) - > -05af : 68 > pla ;load status -05b0 : 48 > pha - > cmp_flag 0 -05b1 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05b3 : d0fe > bne * ;failed not equal (non zero) - > -05b5 : 28 > plp ;restore status - - set_y 0,$ff - > load_flag $ff -05b6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -05b8 : 48 > pha ;use stack to load status -05b9 : a000 > ldy #0 ;precharge index y -05bb : 28 > plp - -05bc : 5a phy - tst_y 0,$ff -05bd : 08 > php ;save flags -05be : c000 > cpy #0 ;test result - > trap_ne -05c0 : d0fe > bne * ;failed not equal (non zero) - > -05c2 : 68 > pla ;load status -05c3 : 48 > pha - > cmp_flag $ff -05c4 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05c6 : d0fe > bne * ;failed not equal (non zero) - > -05c8 : 28 > plp ;restore status - - set_y $ff,0 - > load_flag 0 -05c9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -05cb : 48 > pha ;use stack to load status -05cc : a0ff > ldy #$ff ;precharge index y -05ce : 28 > plp - -05cf : 5a phy - tst_y $ff,0 -05d0 : 08 > php ;save flags -05d1 : c0ff > cpy #$ff ;test result - > trap_ne -05d3 : d0fe > bne * ;failed not equal (non zero) - > -05d5 : 68 > pla ;load status -05d6 : 48 > pha - > cmp_flag 0 -05d7 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05d9 : d0fe > bne * ;failed not equal (non zero) - > -05db : 28 > plp ;restore status - - set_y 0,$ff ;pull - > load_flag $ff -05dc : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -05de : 48 > pha ;use stack to load status -05df : a000 > ldy #0 ;precharge index y -05e1 : 28 > plp - -05e2 : 7a ply - tst_y $ff,$ff-zero -05e3 : 08 > php ;save flags -05e4 : c0ff > cpy #$ff ;test result - > trap_ne -05e6 : d0fe > bne * ;failed not equal (non zero) - > -05e8 : 68 > pla ;load status -05e9 : 48 > pha - > cmp_flag $ff-zero -05ea : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05ec : d0fe > bne * ;failed not equal (non zero) - > -05ee : 28 > plp ;restore status - - set_y $ff,0 - > load_flag 0 -05ef : a900 > lda #0 ;allow test to change I-flag (no mask) - > -05f1 : 48 > pha ;use stack to load status -05f2 : a0ff > ldy #$ff ;precharge index y -05f4 : 28 > plp - -05f5 : 7a ply - tst_y 0,zero -05f6 : 08 > php ;save flags -05f7 : c000 > cpy #0 ;test result - > trap_ne -05f9 : d0fe > bne * ;failed not equal (non zero) - > -05fb : 68 > pla ;load status -05fc : 48 > pha - > cmp_flag zero -05fd : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -05ff : d0fe > bne * ;failed not equal (non zero) - > -0601 : 28 > plp ;restore status - - set_y $fe,$ff - > load_flag $ff -0602 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0604 : 48 > pha ;use stack to load status -0605 : a0fe > ldy #$fe ;precharge index y -0607 : 28 > plp - -0608 : 7a ply - tst_y 1,$ff-zero-minus -0609 : 08 > php ;save flags -060a : c001 > cpy #1 ;test result - > trap_ne -060c : d0fe > bne * ;failed not equal (non zero) - > -060e : 68 > pla ;load status -060f : 48 > pha - > cmp_flag $ff-zero-minus -0610 : c97d > cmp #($ff-zero-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0612 : d0fe > bne * ;failed not equal (non zero) - > -0614 : 28 > plp ;restore status - - set_y 0,0 - > load_flag 0 -0615 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0617 : 48 > pha ;use stack to load status -0618 : a000 > ldy #0 ;precharge index y -061a : 28 > plp - -061b : 7a ply - tst_y $ff,minus -061c : 08 > php ;save flags -061d : c0ff > cpy #$ff ;test result - > trap_ne -061f : d0fe > bne * ;failed not equal (non zero) - > -0621 : 68 > pla ;load status -0622 : 48 > pha - > cmp_flag minus -0623 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0625 : d0fe > bne * ;failed not equal (non zero) - > -0627 : 28 > plp ;restore status - - set_y $ff,$ff - > load_flag $ff -0628 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -062a : 48 > pha ;use stack to load status -062b : a0ff > ldy #$ff ;precharge index y -062d : 28 > plp - -062e : 7a ply - tst_y 0,$ff-minus -062f : 08 > php ;save flags -0630 : c000 > cpy #0 ;test result - > trap_ne -0632 : d0fe > bne * ;failed not equal (non zero) - > -0634 : 68 > pla ;load status -0635 : 48 > pha - > cmp_flag $ff-minus -0636 : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0638 : d0fe > bne * ;failed not equal (non zero) - > -063a : 28 > plp ;restore status - - set_y $fe,0 - > load_flag 0 -063b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -063d : 48 > pha ;use stack to load status -063e : a0fe > ldy #$fe ;precharge index y -0640 : 28 > plp - -0641 : 7a ply - tst_y 1,0 -0642 : 08 > php ;save flags -0643 : c001 > cpy #1 ;test result - > trap_ne -0645 : d0fe > bne * ;failed not equal (non zero) - > -0647 : 68 > pla ;load status -0648 : 48 > pha - > cmp_flag 0 -0649 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -064b : d0fe > bne * ;failed not equal (non zero) - > -064d : 28 > plp ;restore status - -064e : e055 cpx #$55 ;x unchanged? - trap_ne -0650 : d0fe > bne * ;failed not equal (non zero) - - next_test -0652 : ad0202 > lda test_case ;previous test -0655 : c903 > cmp #test_num - > trap_ne ;test is out of sequence -0657 : d0fe > bne * ;failed not equal (non zero) - > -0004 = >test_num = test_num + 1 -0659 : a904 > lda #test_num ;*** next tests' number -065b : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; PC modifying instructions (BRA, BBR, BBS, 1, 2, 3 byte NOPs, JMP(abs,x)) - ; testing unconditional branch BRA - -065e : a281 ldx #$81 ;protect unused registers -0660 : a07e ldy #$7e - set_a 0,$ff - > load_flag $ff -0662 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0664 : 48 > pha ;use stack to load status -0665 : a900 > lda #0 ;precharge accu -0667 : 28 > plp - -0668 : 8003 bra br1 ;branch should always be taken - trap -066a : 4c6a06 > jmp * ;failed anyway - -066d : br1 - tst_a 0,$ff -066d : 08 > php ;save flags -066e : c900 > cmp #0 ;test result - > trap_ne -0670 : d0fe > bne * ;failed not equal (non zero) - > -0672 : 68 > pla ;load status -0673 : 48 > pha - > cmp_flag $ff -0674 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0676 : d0fe > bne * ;failed not equal (non zero) - > -0678 : 28 > plp ;restore status - - set_a $ff,0 - > load_flag 0 -0679 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -067b : 48 > pha ;use stack to load status -067c : a9ff > lda #$ff ;precharge accu -067e : 28 > plp - -067f : 8003 bra br2 ;branch should always be taken - trap -0681 : 4c8106 > jmp * ;failed anyway - -0684 : br2 - tst_a $ff,0 -0684 : 08 > php ;save flags -0685 : c9ff > cmp #$ff ;test result - > trap_ne -0687 : d0fe > bne * ;failed not equal (non zero) - > -0689 : 68 > pla ;load status -068a : 48 > pha - > cmp_flag 0 -068b : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -068d : d0fe > bne * ;failed not equal (non zero) - > -068f : 28 > plp ;restore status - -0690 : e081 cpx #$81 - trap_ne -0692 : d0fe > bne * ;failed not equal (non zero) - -0694 : c07e cpy #$7e - trap_ne -0696 : d0fe > bne * ;failed not equal (non zero) - - next_test -0698 : ad0202 > lda test_case ;previous test -069b : c904 > cmp #test_num - > trap_ne ;test is out of sequence -069d : d0fe > bne * ;failed not equal (non zero) - > -0005 = >test_num = test_num + 1 -069f : a905 > lda #test_num ;*** next tests' number -06a1 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - -06a4 : a000 ldy #0 ;branch range test -06a6 : 8061 bra bra0 - -06a8 : c001 bra1 cpy #1 - trap_ne ;long range backward -06aa : d0fe > bne * ;failed not equal (non zero) - -06ac : c8 iny -06ad : 8053 bra bra2 - -06af : c003 bra3 cpy #3 - trap_ne ;long range backward -06b1 : d0fe > bne * ;failed not equal (non zero) - -06b3 : c8 iny -06b4 : 8045 bra bra4 - -06b6 : c005 bra5 cpy #5 - trap_ne ;long range backward -06b8 : d0fe > bne * ;failed not equal (non zero) - -06ba : c8 iny -06bb : a000 ldy #0 -06bd : 8004 bra brf0 - -06bf : c8 iny -06c0 : c8 iny -06c1 : c8 iny -06c2 : c8 iny -06c3 : 8003 brf0 bra brf1 - -06c5 : c8 iny -06c6 : c8 iny -06c7 : c8 iny -06c8 : c8 brf1 iny -06c9 : 8002 bra brf2 - -06cb : c8 iny -06cc : c8 iny -06cd : c8 brf2 iny -06ce : c8 iny -06cf : 8001 bra brf3 - -06d1 : c8 iny -06d2 : c8 brf3 iny -06d3 : c8 iny -06d4 : c8 iny -06d5 : 8000 bra brf4 - -06d7 : c8 brf4 iny -06d8 : c8 iny -06d9 : c8 iny -06da : c8 iny -06db : c00a cpy #10 - trap_ne ;short range forward -06dd : d0fe > bne * ;failed not equal (non zero) - -06df : 8012 bra brb0 - -06e1 : 88 brb4 dey -06e2 : 88 dey -06e3 : 88 dey -06e4 : 88 dey -06e5 : 800e bra brb5 - -06e7 : 88 brb3 dey -06e8 : 88 dey -06e9 : 88 dey -06ea : 80f5 bra brb4 - -06ec : 88 brb2 dey -06ed : 88 dey -06ee : 80f7 bra brb3 - -06f0 : 88 brb1 dey -06f1 : 80f9 bra brb2 - -06f3 : 80fb brb0 bra brb1 - -06f5 : c000 brb5 cpy #0 - trap_ne ;short range backward -06f7 : d0fe > bne * ;failed not equal (non zero) - -06f9 : 8015 bra bra6 - -06fb : c004 bra4 cpy #4 - trap_ne ;long range forward -06fd : d0fe > bne * ;failed not equal (non zero) - -06ff : c8 iny -0700 : 80b4 bra bra5 - -0702 : c002 bra2 cpy #2 - trap_ne ;long range forward -0704 : d0fe > bne * ;failed not equal (non zero) - -0706 : c8 iny -0707 : 80a6 bra bra3 - -0709 : c000 bra0 cpy #0 - trap_ne ;long range forward -070b : d0fe > bne * ;failed not equal (non zero) - -070d : c8 iny -070e : 8098 bra bra1 - -0710 : bra6 - next_test -0710 : ad0202 > lda test_case ;previous test -0713 : c905 > cmp #test_num - > trap_ne ;test is out of sequence -0715 : d0fe > bne * ;failed not equal (non zero) - > -0006 = >test_num = test_num + 1 -0717 : a906 > lda #test_num ;*** next tests' number -0719 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - if rkwl_wdc_op = 1 - ; testing BBR & BBS - - bbt macro ;\1 = bitnum - lda #(1<<\1) ;testing 1 bit on - sta zpt - set_a $33,0 ;with flags off - bbr \1,zpt,fail1\? - bbs \1,zpt,ok1\? - trap ;bbs branch not taken - fail1\? - trap ;bbr branch taken - ok1\? - tst_a $33,0 - set_a $cc,$ff ;with flags on - bbr \1,zpt,fail2\? - bbs \1,zpt,ok2\? - trap ;bbs branch not taken - fail2\? - trap ;bbr branch taken - ok2\? - tst_a $cc,$ff - lda zpt - cmp #(1<<\1) - trap_ne ;zp altered - lda #$ff-(1<<\1) ;testing 1 bit off - sta zpt - set_a $33,0 ;with flags off - bbs \1,zpt,fail3\? - bbr \1,zpt,ok3\? - trap ;bbr branch not taken - fail3\? - trap ;bbs branch taken - ok3\? - tst_a $33,0 - set_a $cc,$ff ;with flags on - bbs \1,zpt,fail4\? - bbr \1,zpt,ok4\? - trap ;bbr branch not taken - fail4\? - trap ;bbs branch taken - ok4\? - tst_a $cc,$ff - lda zpt - cmp #$ff-(1<<\1) - trap_ne ;zp altered - endm - -071c : a211 ldx #$11 ;test bbr/bbs integrity -071e : a022 ldy #$22 - bbt 0 -0720 : a901 > lda #(1<<0) ;testing 1 bit on -0722 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0724 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0726 : 48 > pha ;use stack to load status -0727 : a933 > lda #$33 ;precharge accu -0729 : 28 > plp - > -072a : 0f0c06 > bbr 0,zpt,fail10196 -072d : 8f0c06 > bbs 0,zpt,ok10196 - > trap ;bbs branch not taken -0730 : 4c3007 > jmp * ;failed anyway - > -0733 : >fail10196 - > trap ;bbr branch taken -0733 : 4c3307 > jmp * ;failed anyway - > -0736 : >ok10196 - > tst_a $33,0 -0736 : 08 > php ;save flags -0737 : c933 > cmp #$33 ;test result - > trap_ne -0739 : d0fe > bne * ;failed not equal (non zero) - > -073b : 68 > pla ;load status -073c : 48 > pha - > cmp_flag 0 -073d : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -073f : d0fe > bne * ;failed not equal (non zero) - > -0741 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0742 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0744 : 48 > pha ;use stack to load status -0745 : a9cc > lda #$cc ;precharge accu -0747 : 28 > plp - > -0748 : 0f0c06 > bbr 0,zpt,fail20196 -074b : 8f0c06 > bbs 0,zpt,ok20196 - > trap ;bbs branch not taken -074e : 4c4e07 > jmp * ;failed anyway - > -0751 : >fail20196 - > trap ;bbr branch taken -0751 : 4c5107 > jmp * ;failed anyway - > -0754 : >ok20196 - > tst_a $cc,$ff -0754 : 08 > php ;save flags -0755 : c9cc > cmp #$cc ;test result - > trap_ne -0757 : d0fe > bne * ;failed not equal (non zero) - > -0759 : 68 > pla ;load status -075a : 48 > pha - > cmp_flag $ff -075b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -075d : d0fe > bne * ;failed not equal (non zero) - > -075f : 28 > plp ;restore status - > -0760 : a50c > lda zpt -0762 : c901 > cmp #(1<<0) - > trap_ne ;zp altered -0764 : d0fe > bne * ;failed not equal (non zero) - > -0766 : a9fe > lda #$ff-(1<<0) ;testing 1 bit off -0768 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -076a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -076c : 48 > pha ;use stack to load status -076d : a933 > lda #$33 ;precharge accu -076f : 28 > plp - > -0770 : 8f0c06 > bbs 0,zpt,fail30196 -0773 : 0f0c06 > bbr 0,zpt,ok30196 - > trap ;bbr branch not taken -0776 : 4c7607 > jmp * ;failed anyway - > -0779 : >fail30196 - > trap ;bbs branch taken -0779 : 4c7907 > jmp * ;failed anyway - > -077c : >ok30196 - > tst_a $33,0 -077c : 08 > php ;save flags -077d : c933 > cmp #$33 ;test result - > trap_ne -077f : d0fe > bne * ;failed not equal (non zero) - > -0781 : 68 > pla ;load status -0782 : 48 > pha - > cmp_flag 0 -0783 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0785 : d0fe > bne * ;failed not equal (non zero) - > -0787 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0788 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -078a : 48 > pha ;use stack to load status -078b : a9cc > lda #$cc ;precharge accu -078d : 28 > plp - > -078e : 8f0c06 > bbs 0,zpt,fail40196 -0791 : 0f0c06 > bbr 0,zpt,ok40196 - > trap ;bbr branch not taken -0794 : 4c9407 > jmp * ;failed anyway - > -0797 : >fail40196 - > trap ;bbs branch taken -0797 : 4c9707 > jmp * ;failed anyway - > -079a : >ok40196 - > tst_a $cc,$ff -079a : 08 > php ;save flags -079b : c9cc > cmp #$cc ;test result - > trap_ne -079d : d0fe > bne * ;failed not equal (non zero) - > -079f : 68 > pla ;load status -07a0 : 48 > pha - > cmp_flag $ff -07a1 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07a3 : d0fe > bne * ;failed not equal (non zero) - > -07a5 : 28 > plp ;restore status - > -07a6 : a50c > lda zpt -07a8 : c9fe > cmp #$ff-(1<<0) - > trap_ne ;zp altered -07aa : d0fe > bne * ;failed not equal (non zero) - > - - bbt 1 -07ac : a902 > lda #(1<<1) ;testing 1 bit on -07ae : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -07b0 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -07b2 : 48 > pha ;use stack to load status -07b3 : a933 > lda #$33 ;precharge accu -07b5 : 28 > plp - > -07b6 : 1f0c06 > bbr 1,zpt,fail10231 -07b9 : 9f0c06 > bbs 1,zpt,ok10231 - > trap ;bbs branch not taken -07bc : 4cbc07 > jmp * ;failed anyway - > -07bf : >fail10231 - > trap ;bbr branch taken -07bf : 4cbf07 > jmp * ;failed anyway - > -07c2 : >ok10231 - > tst_a $33,0 -07c2 : 08 > php ;save flags -07c3 : c933 > cmp #$33 ;test result - > trap_ne -07c5 : d0fe > bne * ;failed not equal (non zero) - > -07c7 : 68 > pla ;load status -07c8 : 48 > pha - > cmp_flag 0 -07c9 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07cb : d0fe > bne * ;failed not equal (non zero) - > -07cd : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -07ce : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -07d0 : 48 > pha ;use stack to load status -07d1 : a9cc > lda #$cc ;precharge accu -07d3 : 28 > plp - > -07d4 : 1f0c06 > bbr 1,zpt,fail20231 -07d7 : 9f0c06 > bbs 1,zpt,ok20231 - > trap ;bbs branch not taken -07da : 4cda07 > jmp * ;failed anyway - > -07dd : >fail20231 - > trap ;bbr branch taken -07dd : 4cdd07 > jmp * ;failed anyway - > -07e0 : >ok20231 - > tst_a $cc,$ff -07e0 : 08 > php ;save flags -07e1 : c9cc > cmp #$cc ;test result - > trap_ne -07e3 : d0fe > bne * ;failed not equal (non zero) - > -07e5 : 68 > pla ;load status -07e6 : 48 > pha - > cmp_flag $ff -07e7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -07e9 : d0fe > bne * ;failed not equal (non zero) - > -07eb : 28 > plp ;restore status - > -07ec : a50c > lda zpt -07ee : c902 > cmp #(1<<1) - > trap_ne ;zp altered -07f0 : d0fe > bne * ;failed not equal (non zero) - > -07f2 : a9fd > lda #$ff-(1<<1) ;testing 1 bit off -07f4 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -07f6 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -07f8 : 48 > pha ;use stack to load status -07f9 : a933 > lda #$33 ;precharge accu -07fb : 28 > plp - > -07fc : 9f0c06 > bbs 1,zpt,fail30231 -07ff : 1f0c06 > bbr 1,zpt,ok30231 - > trap ;bbr branch not taken -0802 : 4c0208 > jmp * ;failed anyway - > -0805 : >fail30231 - > trap ;bbs branch taken -0805 : 4c0508 > jmp * ;failed anyway - > -0808 : >ok30231 - > tst_a $33,0 -0808 : 08 > php ;save flags -0809 : c933 > cmp #$33 ;test result - > trap_ne -080b : d0fe > bne * ;failed not equal (non zero) - > -080d : 68 > pla ;load status -080e : 48 > pha - > cmp_flag 0 -080f : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0811 : d0fe > bne * ;failed not equal (non zero) - > -0813 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0814 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0816 : 48 > pha ;use stack to load status -0817 : a9cc > lda #$cc ;precharge accu -0819 : 28 > plp - > -081a : 9f0c06 > bbs 1,zpt,fail40231 -081d : 1f0c06 > bbr 1,zpt,ok40231 - > trap ;bbr branch not taken -0820 : 4c2008 > jmp * ;failed anyway - > -0823 : >fail40231 - > trap ;bbs branch taken -0823 : 4c2308 > jmp * ;failed anyway - > -0826 : >ok40231 - > tst_a $cc,$ff -0826 : 08 > php ;save flags -0827 : c9cc > cmp #$cc ;test result - > trap_ne -0829 : d0fe > bne * ;failed not equal (non zero) - > -082b : 68 > pla ;load status -082c : 48 > pha - > cmp_flag $ff -082d : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -082f : d0fe > bne * ;failed not equal (non zero) - > -0831 : 28 > plp ;restore status - > -0832 : a50c > lda zpt -0834 : c9fd > cmp #$ff-(1<<1) - > trap_ne ;zp altered -0836 : d0fe > bne * ;failed not equal (non zero) - > - - bbt 2 -0838 : a904 > lda #(1<<2) ;testing 1 bit on -083a : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -083c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -083e : 48 > pha ;use stack to load status -083f : a933 > lda #$33 ;precharge accu -0841 : 28 > plp - > -0842 : 2f0c06 > bbr 2,zpt,fail10266 -0845 : af0c06 > bbs 2,zpt,ok10266 - > trap ;bbs branch not taken -0848 : 4c4808 > jmp * ;failed anyway - > -084b : >fail10266 - > trap ;bbr branch taken -084b : 4c4b08 > jmp * ;failed anyway - > -084e : >ok10266 - > tst_a $33,0 -084e : 08 > php ;save flags -084f : c933 > cmp #$33 ;test result - > trap_ne -0851 : d0fe > bne * ;failed not equal (non zero) - > -0853 : 68 > pla ;load status -0854 : 48 > pha - > cmp_flag 0 -0855 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0857 : d0fe > bne * ;failed not equal (non zero) - > -0859 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -085a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -085c : 48 > pha ;use stack to load status -085d : a9cc > lda #$cc ;precharge accu -085f : 28 > plp - > -0860 : 2f0c06 > bbr 2,zpt,fail20266 -0863 : af0c06 > bbs 2,zpt,ok20266 - > trap ;bbs branch not taken -0866 : 4c6608 > jmp * ;failed anyway - > -0869 : >fail20266 - > trap ;bbr branch taken -0869 : 4c6908 > jmp * ;failed anyway - > -086c : >ok20266 - > tst_a $cc,$ff -086c : 08 > php ;save flags -086d : c9cc > cmp #$cc ;test result - > trap_ne -086f : d0fe > bne * ;failed not equal (non zero) - > -0871 : 68 > pla ;load status -0872 : 48 > pha - > cmp_flag $ff -0873 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0875 : d0fe > bne * ;failed not equal (non zero) - > -0877 : 28 > plp ;restore status - > -0878 : a50c > lda zpt -087a : c904 > cmp #(1<<2) - > trap_ne ;zp altered -087c : d0fe > bne * ;failed not equal (non zero) - > -087e : a9fb > lda #$ff-(1<<2) ;testing 1 bit off -0880 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0882 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0884 : 48 > pha ;use stack to load status -0885 : a933 > lda #$33 ;precharge accu -0887 : 28 > plp - > -0888 : af0c06 > bbs 2,zpt,fail30266 -088b : 2f0c06 > bbr 2,zpt,ok30266 - > trap ;bbr branch not taken -088e : 4c8e08 > jmp * ;failed anyway - > -0891 : >fail30266 - > trap ;bbs branch taken -0891 : 4c9108 > jmp * ;failed anyway - > -0894 : >ok30266 - > tst_a $33,0 -0894 : 08 > php ;save flags -0895 : c933 > cmp #$33 ;test result - > trap_ne -0897 : d0fe > bne * ;failed not equal (non zero) - > -0899 : 68 > pla ;load status -089a : 48 > pha - > cmp_flag 0 -089b : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -089d : d0fe > bne * ;failed not equal (non zero) - > -089f : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -08a0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -08a2 : 48 > pha ;use stack to load status -08a3 : a9cc > lda #$cc ;precharge accu -08a5 : 28 > plp - > -08a6 : af0c06 > bbs 2,zpt,fail40266 -08a9 : 2f0c06 > bbr 2,zpt,ok40266 - > trap ;bbr branch not taken -08ac : 4cac08 > jmp * ;failed anyway - > -08af : >fail40266 - > trap ;bbs branch taken -08af : 4caf08 > jmp * ;failed anyway - > -08b2 : >ok40266 - > tst_a $cc,$ff -08b2 : 08 > php ;save flags -08b3 : c9cc > cmp #$cc ;test result - > trap_ne -08b5 : d0fe > bne * ;failed not equal (non zero) - > -08b7 : 68 > pla ;load status -08b8 : 48 > pha - > cmp_flag $ff -08b9 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -08bb : d0fe > bne * ;failed not equal (non zero) - > -08bd : 28 > plp ;restore status - > -08be : a50c > lda zpt -08c0 : c9fb > cmp #$ff-(1<<2) - > trap_ne ;zp altered -08c2 : d0fe > bne * ;failed not equal (non zero) - > - - bbt 3 -08c4 : a908 > lda #(1<<3) ;testing 1 bit on -08c6 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -08c8 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -08ca : 48 > pha ;use stack to load status -08cb : a933 > lda #$33 ;precharge accu -08cd : 28 > plp - > -08ce : 3f0c06 > bbr 3,zpt,fail10301 -08d1 : bf0c06 > bbs 3,zpt,ok10301 - > trap ;bbs branch not taken -08d4 : 4cd408 > jmp * ;failed anyway - > -08d7 : >fail10301 - > trap ;bbr branch taken -08d7 : 4cd708 > jmp * ;failed anyway - > -08da : >ok10301 - > tst_a $33,0 -08da : 08 > php ;save flags -08db : c933 > cmp #$33 ;test result - > trap_ne -08dd : d0fe > bne * ;failed not equal (non zero) - > -08df : 68 > pla ;load status -08e0 : 48 > pha - > cmp_flag 0 -08e1 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -08e3 : d0fe > bne * ;failed not equal (non zero) - > -08e5 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -08e6 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -08e8 : 48 > pha ;use stack to load status -08e9 : a9cc > lda #$cc ;precharge accu -08eb : 28 > plp - > -08ec : 3f0c06 > bbr 3,zpt,fail20301 -08ef : bf0c06 > bbs 3,zpt,ok20301 - > trap ;bbs branch not taken -08f2 : 4cf208 > jmp * ;failed anyway - > -08f5 : >fail20301 - > trap ;bbr branch taken -08f5 : 4cf508 > jmp * ;failed anyway - > -08f8 : >ok20301 - > tst_a $cc,$ff -08f8 : 08 > php ;save flags -08f9 : c9cc > cmp #$cc ;test result - > trap_ne -08fb : d0fe > bne * ;failed not equal (non zero) - > -08fd : 68 > pla ;load status -08fe : 48 > pha - > cmp_flag $ff -08ff : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0901 : d0fe > bne * ;failed not equal (non zero) - > -0903 : 28 > plp ;restore status - > -0904 : a50c > lda zpt -0906 : c908 > cmp #(1<<3) - > trap_ne ;zp altered -0908 : d0fe > bne * ;failed not equal (non zero) - > -090a : a9f7 > lda #$ff-(1<<3) ;testing 1 bit off -090c : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -090e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0910 : 48 > pha ;use stack to load status -0911 : a933 > lda #$33 ;precharge accu -0913 : 28 > plp - > -0914 : bf0c06 > bbs 3,zpt,fail30301 -0917 : 3f0c06 > bbr 3,zpt,ok30301 - > trap ;bbr branch not taken -091a : 4c1a09 > jmp * ;failed anyway - > -091d : >fail30301 - > trap ;bbs branch taken -091d : 4c1d09 > jmp * ;failed anyway - > -0920 : >ok30301 - > tst_a $33,0 -0920 : 08 > php ;save flags -0921 : c933 > cmp #$33 ;test result - > trap_ne -0923 : d0fe > bne * ;failed not equal (non zero) - > -0925 : 68 > pla ;load status -0926 : 48 > pha - > cmp_flag 0 -0927 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0929 : d0fe > bne * ;failed not equal (non zero) - > -092b : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -092c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -092e : 48 > pha ;use stack to load status -092f : a9cc > lda #$cc ;precharge accu -0931 : 28 > plp - > -0932 : bf0c06 > bbs 3,zpt,fail40301 -0935 : 3f0c06 > bbr 3,zpt,ok40301 - > trap ;bbr branch not taken -0938 : 4c3809 > jmp * ;failed anyway - > -093b : >fail40301 - > trap ;bbs branch taken -093b : 4c3b09 > jmp * ;failed anyway - > -093e : >ok40301 - > tst_a $cc,$ff -093e : 08 > php ;save flags -093f : c9cc > cmp #$cc ;test result - > trap_ne -0941 : d0fe > bne * ;failed not equal (non zero) - > -0943 : 68 > pla ;load status -0944 : 48 > pha - > cmp_flag $ff -0945 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0947 : d0fe > bne * ;failed not equal (non zero) - > -0949 : 28 > plp ;restore status - > -094a : a50c > lda zpt -094c : c9f7 > cmp #$ff-(1<<3) - > trap_ne ;zp altered -094e : d0fe > bne * ;failed not equal (non zero) - > - - bbt 4 -0950 : a910 > lda #(1<<4) ;testing 1 bit on -0952 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0954 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0956 : 48 > pha ;use stack to load status -0957 : a933 > lda #$33 ;precharge accu -0959 : 28 > plp - > -095a : 4f0c06 > bbr 4,zpt,fail10336 -095d : cf0c06 > bbs 4,zpt,ok10336 - > trap ;bbs branch not taken -0960 : 4c6009 > jmp * ;failed anyway - > -0963 : >fail10336 - > trap ;bbr branch taken -0963 : 4c6309 > jmp * ;failed anyway - > -0966 : >ok10336 - > tst_a $33,0 -0966 : 08 > php ;save flags -0967 : c933 > cmp #$33 ;test result - > trap_ne -0969 : d0fe > bne * ;failed not equal (non zero) - > -096b : 68 > pla ;load status -096c : 48 > pha - > cmp_flag 0 -096d : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -096f : d0fe > bne * ;failed not equal (non zero) - > -0971 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0972 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0974 : 48 > pha ;use stack to load status -0975 : a9cc > lda #$cc ;precharge accu -0977 : 28 > plp - > -0978 : 4f0c06 > bbr 4,zpt,fail20336 -097b : cf0c06 > bbs 4,zpt,ok20336 - > trap ;bbs branch not taken -097e : 4c7e09 > jmp * ;failed anyway - > -0981 : >fail20336 - > trap ;bbr branch taken -0981 : 4c8109 > jmp * ;failed anyway - > -0984 : >ok20336 - > tst_a $cc,$ff -0984 : 08 > php ;save flags -0985 : c9cc > cmp #$cc ;test result - > trap_ne -0987 : d0fe > bne * ;failed not equal (non zero) - > -0989 : 68 > pla ;load status -098a : 48 > pha - > cmp_flag $ff -098b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -098d : d0fe > bne * ;failed not equal (non zero) - > -098f : 28 > plp ;restore status - > -0990 : a50c > lda zpt -0992 : c910 > cmp #(1<<4) - > trap_ne ;zp altered -0994 : d0fe > bne * ;failed not equal (non zero) - > -0996 : a9ef > lda #$ff-(1<<4) ;testing 1 bit off -0998 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -099a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -099c : 48 > pha ;use stack to load status -099d : a933 > lda #$33 ;precharge accu -099f : 28 > plp - > -09a0 : cf0c06 > bbs 4,zpt,fail30336 -09a3 : 4f0c06 > bbr 4,zpt,ok30336 - > trap ;bbr branch not taken -09a6 : 4ca609 > jmp * ;failed anyway - > -09a9 : >fail30336 - > trap ;bbs branch taken -09a9 : 4ca909 > jmp * ;failed anyway - > -09ac : >ok30336 - > tst_a $33,0 -09ac : 08 > php ;save flags -09ad : c933 > cmp #$33 ;test result - > trap_ne -09af : d0fe > bne * ;failed not equal (non zero) - > -09b1 : 68 > pla ;load status -09b2 : 48 > pha - > cmp_flag 0 -09b3 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -09b5 : d0fe > bne * ;failed not equal (non zero) - > -09b7 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -09b8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -09ba : 48 > pha ;use stack to load status -09bb : a9cc > lda #$cc ;precharge accu -09bd : 28 > plp - > -09be : cf0c06 > bbs 4,zpt,fail40336 -09c1 : 4f0c06 > bbr 4,zpt,ok40336 - > trap ;bbr branch not taken -09c4 : 4cc409 > jmp * ;failed anyway - > -09c7 : >fail40336 - > trap ;bbs branch taken -09c7 : 4cc709 > jmp * ;failed anyway - > -09ca : >ok40336 - > tst_a $cc,$ff -09ca : 08 > php ;save flags -09cb : c9cc > cmp #$cc ;test result - > trap_ne -09cd : d0fe > bne * ;failed not equal (non zero) - > -09cf : 68 > pla ;load status -09d0 : 48 > pha - > cmp_flag $ff -09d1 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -09d3 : d0fe > bne * ;failed not equal (non zero) - > -09d5 : 28 > plp ;restore status - > -09d6 : a50c > lda zpt -09d8 : c9ef > cmp #$ff-(1<<4) - > trap_ne ;zp altered -09da : d0fe > bne * ;failed not equal (non zero) - > - - bbt 5 -09dc : a920 > lda #(1<<5) ;testing 1 bit on -09de : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -09e0 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -09e2 : 48 > pha ;use stack to load status -09e3 : a933 > lda #$33 ;precharge accu -09e5 : 28 > plp - > -09e6 : 5f0c06 > bbr 5,zpt,fail10371 -09e9 : df0c06 > bbs 5,zpt,ok10371 - > trap ;bbs branch not taken -09ec : 4cec09 > jmp * ;failed anyway - > -09ef : >fail10371 - > trap ;bbr branch taken -09ef : 4cef09 > jmp * ;failed anyway - > -09f2 : >ok10371 - > tst_a $33,0 -09f2 : 08 > php ;save flags -09f3 : c933 > cmp #$33 ;test result - > trap_ne -09f5 : d0fe > bne * ;failed not equal (non zero) - > -09f7 : 68 > pla ;load status -09f8 : 48 > pha - > cmp_flag 0 -09f9 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -09fb : d0fe > bne * ;failed not equal (non zero) - > -09fd : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -09fe : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0a00 : 48 > pha ;use stack to load status -0a01 : a9cc > lda #$cc ;precharge accu -0a03 : 28 > plp - > -0a04 : 5f0c06 > bbr 5,zpt,fail20371 -0a07 : df0c06 > bbs 5,zpt,ok20371 - > trap ;bbs branch not taken -0a0a : 4c0a0a > jmp * ;failed anyway - > -0a0d : >fail20371 - > trap ;bbr branch taken -0a0d : 4c0d0a > jmp * ;failed anyway - > -0a10 : >ok20371 - > tst_a $cc,$ff -0a10 : 08 > php ;save flags -0a11 : c9cc > cmp #$cc ;test result - > trap_ne -0a13 : d0fe > bne * ;failed not equal (non zero) - > -0a15 : 68 > pla ;load status -0a16 : 48 > pha - > cmp_flag $ff -0a17 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a19 : d0fe > bne * ;failed not equal (non zero) - > -0a1b : 28 > plp ;restore status - > -0a1c : a50c > lda zpt -0a1e : c920 > cmp #(1<<5) - > trap_ne ;zp altered -0a20 : d0fe > bne * ;failed not equal (non zero) - > -0a22 : a9df > lda #$ff-(1<<5) ;testing 1 bit off -0a24 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0a26 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0a28 : 48 > pha ;use stack to load status -0a29 : a933 > lda #$33 ;precharge accu -0a2b : 28 > plp - > -0a2c : df0c06 > bbs 5,zpt,fail30371 -0a2f : 5f0c06 > bbr 5,zpt,ok30371 - > trap ;bbr branch not taken -0a32 : 4c320a > jmp * ;failed anyway - > -0a35 : >fail30371 - > trap ;bbs branch taken -0a35 : 4c350a > jmp * ;failed anyway - > -0a38 : >ok30371 - > tst_a $33,0 -0a38 : 08 > php ;save flags -0a39 : c933 > cmp #$33 ;test result - > trap_ne -0a3b : d0fe > bne * ;failed not equal (non zero) - > -0a3d : 68 > pla ;load status -0a3e : 48 > pha - > cmp_flag 0 -0a3f : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a41 : d0fe > bne * ;failed not equal (non zero) - > -0a43 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0a44 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0a46 : 48 > pha ;use stack to load status -0a47 : a9cc > lda #$cc ;precharge accu -0a49 : 28 > plp - > -0a4a : df0c06 > bbs 5,zpt,fail40371 -0a4d : 5f0c06 > bbr 5,zpt,ok40371 - > trap ;bbr branch not taken -0a50 : 4c500a > jmp * ;failed anyway - > -0a53 : >fail40371 - > trap ;bbs branch taken -0a53 : 4c530a > jmp * ;failed anyway - > -0a56 : >ok40371 - > tst_a $cc,$ff -0a56 : 08 > php ;save flags -0a57 : c9cc > cmp #$cc ;test result - > trap_ne -0a59 : d0fe > bne * ;failed not equal (non zero) - > -0a5b : 68 > pla ;load status -0a5c : 48 > pha - > cmp_flag $ff -0a5d : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a5f : d0fe > bne * ;failed not equal (non zero) - > -0a61 : 28 > plp ;restore status - > -0a62 : a50c > lda zpt -0a64 : c9df > cmp #$ff-(1<<5) - > trap_ne ;zp altered -0a66 : d0fe > bne * ;failed not equal (non zero) - > - - bbt 6 -0a68 : a940 > lda #(1<<6) ;testing 1 bit on -0a6a : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0a6c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0a6e : 48 > pha ;use stack to load status -0a6f : a933 > lda #$33 ;precharge accu -0a71 : 28 > plp - > -0a72 : 6f0c06 > bbr 6,zpt,fail10406 -0a75 : ef0c06 > bbs 6,zpt,ok10406 - > trap ;bbs branch not taken -0a78 : 4c780a > jmp * ;failed anyway - > -0a7b : >fail10406 - > trap ;bbr branch taken -0a7b : 4c7b0a > jmp * ;failed anyway - > -0a7e : >ok10406 - > tst_a $33,0 -0a7e : 08 > php ;save flags -0a7f : c933 > cmp #$33 ;test result - > trap_ne -0a81 : d0fe > bne * ;failed not equal (non zero) - > -0a83 : 68 > pla ;load status -0a84 : 48 > pha - > cmp_flag 0 -0a85 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0a87 : d0fe > bne * ;failed not equal (non zero) - > -0a89 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0a8a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0a8c : 48 > pha ;use stack to load status -0a8d : a9cc > lda #$cc ;precharge accu -0a8f : 28 > plp - > -0a90 : 6f0c06 > bbr 6,zpt,fail20406 -0a93 : ef0c06 > bbs 6,zpt,ok20406 - > trap ;bbs branch not taken -0a96 : 4c960a > jmp * ;failed anyway - > -0a99 : >fail20406 - > trap ;bbr branch taken -0a99 : 4c990a > jmp * ;failed anyway - > -0a9c : >ok20406 - > tst_a $cc,$ff -0a9c : 08 > php ;save flags -0a9d : c9cc > cmp #$cc ;test result - > trap_ne -0a9f : d0fe > bne * ;failed not equal (non zero) - > -0aa1 : 68 > pla ;load status -0aa2 : 48 > pha - > cmp_flag $ff -0aa3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0aa5 : d0fe > bne * ;failed not equal (non zero) - > -0aa7 : 28 > plp ;restore status - > -0aa8 : a50c > lda zpt -0aaa : c940 > cmp #(1<<6) - > trap_ne ;zp altered -0aac : d0fe > bne * ;failed not equal (non zero) - > -0aae : a9bf > lda #$ff-(1<<6) ;testing 1 bit off -0ab0 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0ab2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0ab4 : 48 > pha ;use stack to load status -0ab5 : a933 > lda #$33 ;precharge accu -0ab7 : 28 > plp - > -0ab8 : ef0c06 > bbs 6,zpt,fail30406 -0abb : 6f0c06 > bbr 6,zpt,ok30406 - > trap ;bbr branch not taken -0abe : 4cbe0a > jmp * ;failed anyway - > -0ac1 : >fail30406 - > trap ;bbs branch taken -0ac1 : 4cc10a > jmp * ;failed anyway - > -0ac4 : >ok30406 - > tst_a $33,0 -0ac4 : 08 > php ;save flags -0ac5 : c933 > cmp #$33 ;test result - > trap_ne -0ac7 : d0fe > bne * ;failed not equal (non zero) - > -0ac9 : 68 > pla ;load status -0aca : 48 > pha - > cmp_flag 0 -0acb : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0acd : d0fe > bne * ;failed not equal (non zero) - > -0acf : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0ad0 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0ad2 : 48 > pha ;use stack to load status -0ad3 : a9cc > lda #$cc ;precharge accu -0ad5 : 28 > plp - > -0ad6 : ef0c06 > bbs 6,zpt,fail40406 -0ad9 : 6f0c06 > bbr 6,zpt,ok40406 - > trap ;bbr branch not taken -0adc : 4cdc0a > jmp * ;failed anyway - > -0adf : >fail40406 - > trap ;bbs branch taken -0adf : 4cdf0a > jmp * ;failed anyway - > -0ae2 : >ok40406 - > tst_a $cc,$ff -0ae2 : 08 > php ;save flags -0ae3 : c9cc > cmp #$cc ;test result - > trap_ne -0ae5 : d0fe > bne * ;failed not equal (non zero) - > -0ae7 : 68 > pla ;load status -0ae8 : 48 > pha - > cmp_flag $ff -0ae9 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0aeb : d0fe > bne * ;failed not equal (non zero) - > -0aed : 28 > plp ;restore status - > -0aee : a50c > lda zpt -0af0 : c9bf > cmp #$ff-(1<<6) - > trap_ne ;zp altered -0af2 : d0fe > bne * ;failed not equal (non zero) - > - - bbt 7 -0af4 : a980 > lda #(1<<7) ;testing 1 bit on -0af6 : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0af8 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0afa : 48 > pha ;use stack to load status -0afb : a933 > lda #$33 ;precharge accu -0afd : 28 > plp - > -0afe : 7f0c06 > bbr 7,zpt,fail10441 -0b01 : ff0c06 > bbs 7,zpt,ok10441 - > trap ;bbs branch not taken -0b04 : 4c040b > jmp * ;failed anyway - > -0b07 : >fail10441 - > trap ;bbr branch taken -0b07 : 4c070b > jmp * ;failed anyway - > -0b0a : >ok10441 - > tst_a $33,0 -0b0a : 08 > php ;save flags -0b0b : c933 > cmp #$33 ;test result - > trap_ne -0b0d : d0fe > bne * ;failed not equal (non zero) - > -0b0f : 68 > pla ;load status -0b10 : 48 > pha - > cmp_flag 0 -0b11 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b13 : d0fe > bne * ;failed not equal (non zero) - > -0b15 : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0b16 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0b18 : 48 > pha ;use stack to load status -0b19 : a9cc > lda #$cc ;precharge accu -0b1b : 28 > plp - > -0b1c : 7f0c06 > bbr 7,zpt,fail20441 -0b1f : ff0c06 > bbs 7,zpt,ok20441 - > trap ;bbs branch not taken -0b22 : 4c220b > jmp * ;failed anyway - > -0b25 : >fail20441 - > trap ;bbr branch taken -0b25 : 4c250b > jmp * ;failed anyway - > -0b28 : >ok20441 - > tst_a $cc,$ff -0b28 : 08 > php ;save flags -0b29 : c9cc > cmp #$cc ;test result - > trap_ne -0b2b : d0fe > bne * ;failed not equal (non zero) - > -0b2d : 68 > pla ;load status -0b2e : 48 > pha - > cmp_flag $ff -0b2f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b31 : d0fe > bne * ;failed not equal (non zero) - > -0b33 : 28 > plp ;restore status - > -0b34 : a50c > lda zpt -0b36 : c980 > cmp #(1<<7) - > trap_ne ;zp altered -0b38 : d0fe > bne * ;failed not equal (non zero) - > -0b3a : a97f > lda #$ff-(1<<7) ;testing 1 bit off -0b3c : 850c > sta zpt - > set_a $33,0 ;with flags off - > load_flag 0 -0b3e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0b40 : 48 > pha ;use stack to load status -0b41 : a933 > lda #$33 ;precharge accu -0b43 : 28 > plp - > -0b44 : ff0c06 > bbs 7,zpt,fail30441 -0b47 : 7f0c06 > bbr 7,zpt,ok30441 - > trap ;bbr branch not taken -0b4a : 4c4a0b > jmp * ;failed anyway - > -0b4d : >fail30441 - > trap ;bbs branch taken -0b4d : 4c4d0b > jmp * ;failed anyway - > -0b50 : >ok30441 - > tst_a $33,0 -0b50 : 08 > php ;save flags -0b51 : c933 > cmp #$33 ;test result - > trap_ne -0b53 : d0fe > bne * ;failed not equal (non zero) - > -0b55 : 68 > pla ;load status -0b56 : 48 > pha - > cmp_flag 0 -0b57 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b59 : d0fe > bne * ;failed not equal (non zero) - > -0b5b : 28 > plp ;restore status - > - > set_a $cc,$ff ;with flags on - > load_flag $ff -0b5c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0b5e : 48 > pha ;use stack to load status -0b5f : a9cc > lda #$cc ;precharge accu -0b61 : 28 > plp - > -0b62 : ff0c06 > bbs 7,zpt,fail40441 -0b65 : 7f0c06 > bbr 7,zpt,ok40441 - > trap ;bbr branch not taken -0b68 : 4c680b > jmp * ;failed anyway - > -0b6b : >fail40441 - > trap ;bbs branch taken -0b6b : 4c6b0b > jmp * ;failed anyway - > -0b6e : >ok40441 - > tst_a $cc,$ff -0b6e : 08 > php ;save flags -0b6f : c9cc > cmp #$cc ;test result - > trap_ne -0b71 : d0fe > bne * ;failed not equal (non zero) - > -0b73 : 68 > pla ;load status -0b74 : 48 > pha - > cmp_flag $ff -0b75 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0b77 : d0fe > bne * ;failed not equal (non zero) - > -0b79 : 28 > plp ;restore status - > -0b7a : a50c > lda zpt -0b7c : c97f > cmp #$ff-(1<<7) - > trap_ne ;zp altered -0b7e : d0fe > bne * ;failed not equal (non zero) - > - -0b80 : e011 cpx #$11 - trap_ne ;x overwritten -0b82 : d0fe > bne * ;failed not equal (non zero) - -0b84 : c022 cpy #$22 - trap_ne ;y overwritten -0b86 : d0fe > bne * ;failed not equal (non zero) - - next_test -0b88 : ad0202 > lda test_case ;previous test -0b8b : c906 > cmp #test_num - > trap_ne ;test is out of sequence -0b8d : d0fe > bne * ;failed not equal (non zero) - > -0007 = >test_num = test_num + 1 -0b8f : a907 > lda #test_num ;*** next tests' number -0b91 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - bbrc macro ;\1 = bitnum - bbr \1,zpt,skip\? - eor #(1<<\1) - skip\? - endm - bbsc macro ;\1 = bitnum - bbs \1,zpt,skip\? - eor #(1<<\1) - skip\? - endm - -0b94 : a900 lda #0 ;combined bit test -0b96 : 850c sta zpt -0b98 : a900 bbcl lda #0 - bbrc 0 -0b9a : 0f0c02 > bbr 0,zpt,skip0480 -0b9d : 4901 > eor #(1<<0) -0b9f : >skip0480 - - bbrc 1 -0b9f : 1f0c02 > bbr 1,zpt,skip0481 -0ba2 : 4902 > eor #(1<<1) -0ba4 : >skip0481 - - bbrc 2 -0ba4 : 2f0c02 > bbr 2,zpt,skip0482 -0ba7 : 4904 > eor #(1<<2) -0ba9 : >skip0482 - - bbrc 3 -0ba9 : 3f0c02 > bbr 3,zpt,skip0483 -0bac : 4908 > eor #(1<<3) -0bae : >skip0483 - - bbrc 4 -0bae : 4f0c02 > bbr 4,zpt,skip0484 -0bb1 : 4910 > eor #(1<<4) -0bb3 : >skip0484 - - bbrc 5 -0bb3 : 5f0c02 > bbr 5,zpt,skip0485 -0bb6 : 4920 > eor #(1<<5) -0bb8 : >skip0485 - - bbrc 6 -0bb8 : 6f0c02 > bbr 6,zpt,skip0486 -0bbb : 4940 > eor #(1<<6) -0bbd : >skip0486 - - bbrc 7 -0bbd : 7f0c02 > bbr 7,zpt,skip0487 -0bc0 : 4980 > eor #(1<<7) -0bc2 : >skip0487 - -0bc2 : 450c eor zpt - trap_ne ;failed bbr bitnum in accu -0bc4 : d0fe > bne * ;failed not equal (non zero) - -0bc6 : a9ff lda #$ff - bbsc 0 -0bc8 : 8f0c02 > bbs 0,zpt,skip0489 -0bcb : 4901 > eor #(1<<0) -0bcd : >skip0489 - - bbsc 1 -0bcd : 9f0c02 > bbs 1,zpt,skip0490 -0bd0 : 4902 > eor #(1<<1) -0bd2 : >skip0490 - - bbsc 2 -0bd2 : af0c02 > bbs 2,zpt,skip0491 -0bd5 : 4904 > eor #(1<<2) -0bd7 : >skip0491 - - bbsc 3 -0bd7 : bf0c02 > bbs 3,zpt,skip0492 -0bda : 4908 > eor #(1<<3) -0bdc : >skip0492 - - bbsc 4 -0bdc : cf0c02 > bbs 4,zpt,skip0493 -0bdf : 4910 > eor #(1<<4) -0be1 : >skip0493 - - bbsc 5 -0be1 : df0c02 > bbs 5,zpt,skip0494 -0be4 : 4920 > eor #(1<<5) -0be6 : >skip0494 - - bbsc 6 -0be6 : ef0c02 > bbs 6,zpt,skip0495 -0be9 : 4940 > eor #(1<<6) -0beb : >skip0495 - - bbsc 7 -0beb : ff0c02 > bbs 7,zpt,skip0496 -0bee : 4980 > eor #(1<<7) -0bf0 : >skip0496 - -0bf0 : 450c eor zpt - trap_ne ;failed bbs bitnum in accu -0bf2 : d0fe > bne * ;failed not equal (non zero) - -0bf4 : e60c inc zpt -0bf6 : d0a0 bne bbcl - next_test -0bf8 : ad0202 > lda test_case ;previous test -0bfb : c907 > cmp #test_num - > trap_ne ;test is out of sequence -0bfd : d0fe > bne * ;failed not equal (non zero) - > -0008 = >test_num = test_num + 1 -0bff : a908 > lda #test_num ;*** next tests' number -0c01 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - endif - - ; testing NOP - - nop_test macro ;\1 = opcode, \2 = # of bytes - ldy #$42 - ldx #4-\2 - db \1 ;test nop length - if \2 = 1 - dex - dex - endif - if \2 = 2 - iny - dex - endif - if \2 = 3 - iny - iny - endif - dex - trap_ne ;wrong number of bytes - set_a $ff-\1,0 - db \1 ;test nop integrity - flags off - nop - nop - tst_a $ff-\1,0 - set_a $aa-\1,$ff - db \1 ;test nop integrity - flags on - nop - nop - tst_a $aa-\1,$ff - cpy #$42 - trap_ne ;y changed - cpx #0 - trap_ne ;x changed - endm - - if skip_nop = 0 - nop_test $02,2 -0c04 : a042 > ldy #$42 -0c06 : a202 > ldx #4-2 -0c08 : 02 > db $02 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0c09 : c8 > iny -0c0a : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0c0b : ca > dex - > trap_ne ;wrong number of bytes -0c0c : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$02,0 - > load_flag 0 -0c0e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0c10 : 48 > pha ;use stack to load status -0c11 : a9fd > lda #$ff-$02 ;precharge accu -0c13 : 28 > plp - > -0c14 : 02 > db $02 ;test nop integrity - flags off -0c15 : ea > nop -0c16 : ea > nop - > tst_a $ff-$02,0 -0c17 : 08 > php ;save flags -0c18 : c9fd > cmp #$ff-$02 ;test result - > trap_ne -0c1a : d0fe > bne * ;failed not equal (non zero) - > -0c1c : 68 > pla ;load status -0c1d : 48 > pha - > cmp_flag 0 -0c1e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c20 : d0fe > bne * ;failed not equal (non zero) - > -0c22 : 28 > plp ;restore status - > - > set_a $aa-$02,$ff - > load_flag $ff -0c23 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0c25 : 48 > pha ;use stack to load status -0c26 : a9a8 > lda #$aa-$02 ;precharge accu -0c28 : 28 > plp - > -0c29 : 02 > db $02 ;test nop integrity - flags on -0c2a : ea > nop -0c2b : ea > nop - > tst_a $aa-$02,$ff -0c2c : 08 > php ;save flags -0c2d : c9a8 > cmp #$aa-$02 ;test result - > trap_ne -0c2f : d0fe > bne * ;failed not equal (non zero) - > -0c31 : 68 > pla ;load status -0c32 : 48 > pha - > cmp_flag $ff -0c33 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c35 : d0fe > bne * ;failed not equal (non zero) - > -0c37 : 28 > plp ;restore status - > -0c38 : c042 > cpy #$42 - > trap_ne ;y changed -0c3a : d0fe > bne * ;failed not equal (non zero) - > -0c3c : e000 > cpx #0 - > trap_ne ;x changed -0c3e : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $22,2 -0c40 : a042 > ldy #$42 -0c42 : a202 > ldx #4-2 -0c44 : 22 > db $22 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0c45 : c8 > iny -0c46 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0c47 : ca > dex - > trap_ne ;wrong number of bytes -0c48 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$22,0 - > load_flag 0 -0c4a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0c4c : 48 > pha ;use stack to load status -0c4d : a9dd > lda #$ff-$22 ;precharge accu -0c4f : 28 > plp - > -0c50 : 22 > db $22 ;test nop integrity - flags off -0c51 : ea > nop -0c52 : ea > nop - > tst_a $ff-$22,0 -0c53 : 08 > php ;save flags -0c54 : c9dd > cmp #$ff-$22 ;test result - > trap_ne -0c56 : d0fe > bne * ;failed not equal (non zero) - > -0c58 : 68 > pla ;load status -0c59 : 48 > pha - > cmp_flag 0 -0c5a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c5c : d0fe > bne * ;failed not equal (non zero) - > -0c5e : 28 > plp ;restore status - > - > set_a $aa-$22,$ff - > load_flag $ff -0c5f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0c61 : 48 > pha ;use stack to load status -0c62 : a988 > lda #$aa-$22 ;precharge accu -0c64 : 28 > plp - > -0c65 : 22 > db $22 ;test nop integrity - flags on -0c66 : ea > nop -0c67 : ea > nop - > tst_a $aa-$22,$ff -0c68 : 08 > php ;save flags -0c69 : c988 > cmp #$aa-$22 ;test result - > trap_ne -0c6b : d0fe > bne * ;failed not equal (non zero) - > -0c6d : 68 > pla ;load status -0c6e : 48 > pha - > cmp_flag $ff -0c6f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c71 : d0fe > bne * ;failed not equal (non zero) - > -0c73 : 28 > plp ;restore status - > -0c74 : c042 > cpy #$42 - > trap_ne ;y changed -0c76 : d0fe > bne * ;failed not equal (non zero) - > -0c78 : e000 > cpx #0 - > trap_ne ;x changed -0c7a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $42,2 -0c7c : a042 > ldy #$42 -0c7e : a202 > ldx #4-2 -0c80 : 42 > db $42 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0c81 : c8 > iny -0c82 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0c83 : ca > dex - > trap_ne ;wrong number of bytes -0c84 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$42,0 - > load_flag 0 -0c86 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0c88 : 48 > pha ;use stack to load status -0c89 : a9bd > lda #$ff-$42 ;precharge accu -0c8b : 28 > plp - > -0c8c : 42 > db $42 ;test nop integrity - flags off -0c8d : ea > nop -0c8e : ea > nop - > tst_a $ff-$42,0 -0c8f : 08 > php ;save flags -0c90 : c9bd > cmp #$ff-$42 ;test result - > trap_ne -0c92 : d0fe > bne * ;failed not equal (non zero) - > -0c94 : 68 > pla ;load status -0c95 : 48 > pha - > cmp_flag 0 -0c96 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0c98 : d0fe > bne * ;failed not equal (non zero) - > -0c9a : 28 > plp ;restore status - > - > set_a $aa-$42,$ff - > load_flag $ff -0c9b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0c9d : 48 > pha ;use stack to load status -0c9e : a968 > lda #$aa-$42 ;precharge accu -0ca0 : 28 > plp - > -0ca1 : 42 > db $42 ;test nop integrity - flags on -0ca2 : ea > nop -0ca3 : ea > nop - > tst_a $aa-$42,$ff -0ca4 : 08 > php ;save flags -0ca5 : c968 > cmp #$aa-$42 ;test result - > trap_ne -0ca7 : d0fe > bne * ;failed not equal (non zero) - > -0ca9 : 68 > pla ;load status -0caa : 48 > pha - > cmp_flag $ff -0cab : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cad : d0fe > bne * ;failed not equal (non zero) - > -0caf : 28 > plp ;restore status - > -0cb0 : c042 > cpy #$42 - > trap_ne ;y changed -0cb2 : d0fe > bne * ;failed not equal (non zero) - > -0cb4 : e000 > cpx #0 - > trap_ne ;x changed -0cb6 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $62,2 -0cb8 : a042 > ldy #$42 -0cba : a202 > ldx #4-2 -0cbc : 62 > db $62 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0cbd : c8 > iny -0cbe : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0cbf : ca > dex - > trap_ne ;wrong number of bytes -0cc0 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$62,0 - > load_flag 0 -0cc2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0cc4 : 48 > pha ;use stack to load status -0cc5 : a99d > lda #$ff-$62 ;precharge accu -0cc7 : 28 > plp - > -0cc8 : 62 > db $62 ;test nop integrity - flags off -0cc9 : ea > nop -0cca : ea > nop - > tst_a $ff-$62,0 -0ccb : 08 > php ;save flags -0ccc : c99d > cmp #$ff-$62 ;test result - > trap_ne -0cce : d0fe > bne * ;failed not equal (non zero) - > -0cd0 : 68 > pla ;load status -0cd1 : 48 > pha - > cmp_flag 0 -0cd2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0cd4 : d0fe > bne * ;failed not equal (non zero) - > -0cd6 : 28 > plp ;restore status - > - > set_a $aa-$62,$ff - > load_flag $ff -0cd7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0cd9 : 48 > pha ;use stack to load status -0cda : a948 > lda #$aa-$62 ;precharge accu -0cdc : 28 > plp - > -0cdd : 62 > db $62 ;test nop integrity - flags on -0cde : ea > nop -0cdf : ea > nop - > tst_a $aa-$62,$ff -0ce0 : 08 > php ;save flags -0ce1 : c948 > cmp #$aa-$62 ;test result - > trap_ne -0ce3 : d0fe > bne * ;failed not equal (non zero) - > -0ce5 : 68 > pla ;load status -0ce6 : 48 > pha - > cmp_flag $ff -0ce7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ce9 : d0fe > bne * ;failed not equal (non zero) - > -0ceb : 28 > plp ;restore status - > -0cec : c042 > cpy #$42 - > trap_ne ;y changed -0cee : d0fe > bne * ;failed not equal (non zero) - > -0cf0 : e000 > cpx #0 - > trap_ne ;x changed -0cf2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $82,2 -0cf4 : a042 > ldy #$42 -0cf6 : a202 > ldx #4-2 -0cf8 : 82 > db $82 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0cf9 : c8 > iny -0cfa : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0cfb : ca > dex - > trap_ne ;wrong number of bytes -0cfc : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$82,0 - > load_flag 0 -0cfe : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0d00 : 48 > pha ;use stack to load status -0d01 : a97d > lda #$ff-$82 ;precharge accu -0d03 : 28 > plp - > -0d04 : 82 > db $82 ;test nop integrity - flags off -0d05 : ea > nop -0d06 : ea > nop - > tst_a $ff-$82,0 -0d07 : 08 > php ;save flags -0d08 : c97d > cmp #$ff-$82 ;test result - > trap_ne -0d0a : d0fe > bne * ;failed not equal (non zero) - > -0d0c : 68 > pla ;load status -0d0d : 48 > pha - > cmp_flag 0 -0d0e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d10 : d0fe > bne * ;failed not equal (non zero) - > -0d12 : 28 > plp ;restore status - > - > set_a $aa-$82,$ff - > load_flag $ff -0d13 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0d15 : 48 > pha ;use stack to load status -0d16 : a928 > lda #$aa-$82 ;precharge accu -0d18 : 28 > plp - > -0d19 : 82 > db $82 ;test nop integrity - flags on -0d1a : ea > nop -0d1b : ea > nop - > tst_a $aa-$82,$ff -0d1c : 08 > php ;save flags -0d1d : c928 > cmp #$aa-$82 ;test result - > trap_ne -0d1f : d0fe > bne * ;failed not equal (non zero) - > -0d21 : 68 > pla ;load status -0d22 : 48 > pha - > cmp_flag $ff -0d23 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d25 : d0fe > bne * ;failed not equal (non zero) - > -0d27 : 28 > plp ;restore status - > -0d28 : c042 > cpy #$42 - > trap_ne ;y changed -0d2a : d0fe > bne * ;failed not equal (non zero) - > -0d2c : e000 > cpx #0 - > trap_ne ;x changed -0d2e : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $c2,2 -0d30 : a042 > ldy #$42 -0d32 : a202 > ldx #4-2 -0d34 : c2 > db $c2 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0d35 : c8 > iny -0d36 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0d37 : ca > dex - > trap_ne ;wrong number of bytes -0d38 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$c2,0 - > load_flag 0 -0d3a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0d3c : 48 > pha ;use stack to load status -0d3d : a93d > lda #$ff-$c2 ;precharge accu -0d3f : 28 > plp - > -0d40 : c2 > db $c2 ;test nop integrity - flags off -0d41 : ea > nop -0d42 : ea > nop - > tst_a $ff-$c2,0 -0d43 : 08 > php ;save flags -0d44 : c93d > cmp #$ff-$c2 ;test result - > trap_ne -0d46 : d0fe > bne * ;failed not equal (non zero) - > -0d48 : 68 > pla ;load status -0d49 : 48 > pha - > cmp_flag 0 -0d4a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d4c : d0fe > bne * ;failed not equal (non zero) - > -0d4e : 28 > plp ;restore status - > - > set_a $aa-$c2,$ff - > load_flag $ff -0d4f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0d51 : 48 > pha ;use stack to load status -0d52 : a9e8 > lda #$aa-$c2 ;precharge accu -0d54 : 28 > plp - > -0d55 : c2 > db $c2 ;test nop integrity - flags on -0d56 : ea > nop -0d57 : ea > nop - > tst_a $aa-$c2,$ff -0d58 : 08 > php ;save flags -0d59 : c9e8 > cmp #$aa-$c2 ;test result - > trap_ne -0d5b : d0fe > bne * ;failed not equal (non zero) - > -0d5d : 68 > pla ;load status -0d5e : 48 > pha - > cmp_flag $ff -0d5f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d61 : d0fe > bne * ;failed not equal (non zero) - > -0d63 : 28 > plp ;restore status - > -0d64 : c042 > cpy #$42 - > trap_ne ;y changed -0d66 : d0fe > bne * ;failed not equal (non zero) - > -0d68 : e000 > cpx #0 - > trap_ne ;x changed -0d6a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $e2,2 -0d6c : a042 > ldy #$42 -0d6e : a202 > ldx #4-2 -0d70 : e2 > db $e2 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0d71 : c8 > iny -0d72 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0d73 : ca > dex - > trap_ne ;wrong number of bytes -0d74 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$e2,0 - > load_flag 0 -0d76 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0d78 : 48 > pha ;use stack to load status -0d79 : a91d > lda #$ff-$e2 ;precharge accu -0d7b : 28 > plp - > -0d7c : e2 > db $e2 ;test nop integrity - flags off -0d7d : ea > nop -0d7e : ea > nop - > tst_a $ff-$e2,0 -0d7f : 08 > php ;save flags -0d80 : c91d > cmp #$ff-$e2 ;test result - > trap_ne -0d82 : d0fe > bne * ;failed not equal (non zero) - > -0d84 : 68 > pla ;load status -0d85 : 48 > pha - > cmp_flag 0 -0d86 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d88 : d0fe > bne * ;failed not equal (non zero) - > -0d8a : 28 > plp ;restore status - > - > set_a $aa-$e2,$ff - > load_flag $ff -0d8b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0d8d : 48 > pha ;use stack to load status -0d8e : a9c8 > lda #$aa-$e2 ;precharge accu -0d90 : 28 > plp - > -0d91 : e2 > db $e2 ;test nop integrity - flags on -0d92 : ea > nop -0d93 : ea > nop - > tst_a $aa-$e2,$ff -0d94 : 08 > php ;save flags -0d95 : c9c8 > cmp #$aa-$e2 ;test result - > trap_ne -0d97 : d0fe > bne * ;failed not equal (non zero) - > -0d99 : 68 > pla ;load status -0d9a : 48 > pha - > cmp_flag $ff -0d9b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0d9d : d0fe > bne * ;failed not equal (non zero) - > -0d9f : 28 > plp ;restore status - > -0da0 : c042 > cpy #$42 - > trap_ne ;y changed -0da2 : d0fe > bne * ;failed not equal (non zero) - > -0da4 : e000 > cpx #0 - > trap_ne ;x changed -0da6 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $44,2 -0da8 : a042 > ldy #$42 -0daa : a202 > ldx #4-2 -0dac : 44 > db $44 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0dad : c8 > iny -0dae : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0daf : ca > dex - > trap_ne ;wrong number of bytes -0db0 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$44,0 - > load_flag 0 -0db2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0db4 : 48 > pha ;use stack to load status -0db5 : a9bb > lda #$ff-$44 ;precharge accu -0db7 : 28 > plp - > -0db8 : 44 > db $44 ;test nop integrity - flags off -0db9 : ea > nop -0dba : ea > nop - > tst_a $ff-$44,0 -0dbb : 08 > php ;save flags -0dbc : c9bb > cmp #$ff-$44 ;test result - > trap_ne -0dbe : d0fe > bne * ;failed not equal (non zero) - > -0dc0 : 68 > pla ;load status -0dc1 : 48 > pha - > cmp_flag 0 -0dc2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0dc4 : d0fe > bne * ;failed not equal (non zero) - > -0dc6 : 28 > plp ;restore status - > - > set_a $aa-$44,$ff - > load_flag $ff -0dc7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0dc9 : 48 > pha ;use stack to load status -0dca : a966 > lda #$aa-$44 ;precharge accu -0dcc : 28 > plp - > -0dcd : 44 > db $44 ;test nop integrity - flags on -0dce : ea > nop -0dcf : ea > nop - > tst_a $aa-$44,$ff -0dd0 : 08 > php ;save flags -0dd1 : c966 > cmp #$aa-$44 ;test result - > trap_ne -0dd3 : d0fe > bne * ;failed not equal (non zero) - > -0dd5 : 68 > pla ;load status -0dd6 : 48 > pha - > cmp_flag $ff -0dd7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0dd9 : d0fe > bne * ;failed not equal (non zero) - > -0ddb : 28 > plp ;restore status - > -0ddc : c042 > cpy #$42 - > trap_ne ;y changed -0dde : d0fe > bne * ;failed not equal (non zero) - > -0de0 : e000 > cpx #0 - > trap_ne ;x changed -0de2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $54,2 -0de4 : a042 > ldy #$42 -0de6 : a202 > ldx #4-2 -0de8 : 54 > db $54 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0de9 : c8 > iny -0dea : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0deb : ca > dex - > trap_ne ;wrong number of bytes -0dec : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$54,0 - > load_flag 0 -0dee : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0df0 : 48 > pha ;use stack to load status -0df1 : a9ab > lda #$ff-$54 ;precharge accu -0df3 : 28 > plp - > -0df4 : 54 > db $54 ;test nop integrity - flags off -0df5 : ea > nop -0df6 : ea > nop - > tst_a $ff-$54,0 -0df7 : 08 > php ;save flags -0df8 : c9ab > cmp #$ff-$54 ;test result - > trap_ne -0dfa : d0fe > bne * ;failed not equal (non zero) - > -0dfc : 68 > pla ;load status -0dfd : 48 > pha - > cmp_flag 0 -0dfe : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e00 : d0fe > bne * ;failed not equal (non zero) - > -0e02 : 28 > plp ;restore status - > - > set_a $aa-$54,$ff - > load_flag $ff -0e03 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0e05 : 48 > pha ;use stack to load status -0e06 : a956 > lda #$aa-$54 ;precharge accu -0e08 : 28 > plp - > -0e09 : 54 > db $54 ;test nop integrity - flags on -0e0a : ea > nop -0e0b : ea > nop - > tst_a $aa-$54,$ff -0e0c : 08 > php ;save flags -0e0d : c956 > cmp #$aa-$54 ;test result - > trap_ne -0e0f : d0fe > bne * ;failed not equal (non zero) - > -0e11 : 68 > pla ;load status -0e12 : 48 > pha - > cmp_flag $ff -0e13 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e15 : d0fe > bne * ;failed not equal (non zero) - > -0e17 : 28 > plp ;restore status - > -0e18 : c042 > cpy #$42 - > trap_ne ;y changed -0e1a : d0fe > bne * ;failed not equal (non zero) - > -0e1c : e000 > cpx #0 - > trap_ne ;x changed -0e1e : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $d4,2 -0e20 : a042 > ldy #$42 -0e22 : a202 > ldx #4-2 -0e24 : d4 > db $d4 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0e25 : c8 > iny -0e26 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0e27 : ca > dex - > trap_ne ;wrong number of bytes -0e28 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$d4,0 - > load_flag 0 -0e2a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e2c : 48 > pha ;use stack to load status -0e2d : a92b > lda #$ff-$d4 ;precharge accu -0e2f : 28 > plp - > -0e30 : d4 > db $d4 ;test nop integrity - flags off -0e31 : ea > nop -0e32 : ea > nop - > tst_a $ff-$d4,0 -0e33 : 08 > php ;save flags -0e34 : c92b > cmp #$ff-$d4 ;test result - > trap_ne -0e36 : d0fe > bne * ;failed not equal (non zero) - > -0e38 : 68 > pla ;load status -0e39 : 48 > pha - > cmp_flag 0 -0e3a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e3c : d0fe > bne * ;failed not equal (non zero) - > -0e3e : 28 > plp ;restore status - > - > set_a $aa-$d4,$ff - > load_flag $ff -0e3f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0e41 : 48 > pha ;use stack to load status -0e42 : a9d6 > lda #$aa-$d4 ;precharge accu -0e44 : 28 > plp - > -0e45 : d4 > db $d4 ;test nop integrity - flags on -0e46 : ea > nop -0e47 : ea > nop - > tst_a $aa-$d4,$ff -0e48 : 08 > php ;save flags -0e49 : c9d6 > cmp #$aa-$d4 ;test result - > trap_ne -0e4b : d0fe > bne * ;failed not equal (non zero) - > -0e4d : 68 > pla ;load status -0e4e : 48 > pha - > cmp_flag $ff -0e4f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e51 : d0fe > bne * ;failed not equal (non zero) - > -0e53 : 28 > plp ;restore status - > -0e54 : c042 > cpy #$42 - > trap_ne ;y changed -0e56 : d0fe > bne * ;failed not equal (non zero) - > -0e58 : e000 > cpx #0 - > trap_ne ;x changed -0e5a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $f4,2 -0e5c : a042 > ldy #$42 -0e5e : a202 > ldx #4-2 -0e60 : f4 > db $f4 ;test nop length - > if 2 = 1 - > dex - > dex - > endif - > if 2 = 2 -0e61 : c8 > iny -0e62 : ca > dex - > endif - > if 2 = 3 - > iny - > iny - > endif -0e63 : ca > dex - > trap_ne ;wrong number of bytes -0e64 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$f4,0 - > load_flag 0 -0e66 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0e68 : 48 > pha ;use stack to load status -0e69 : a90b > lda #$ff-$f4 ;precharge accu -0e6b : 28 > plp - > -0e6c : f4 > db $f4 ;test nop integrity - flags off -0e6d : ea > nop -0e6e : ea > nop - > tst_a $ff-$f4,0 -0e6f : 08 > php ;save flags -0e70 : c90b > cmp #$ff-$f4 ;test result - > trap_ne -0e72 : d0fe > bne * ;failed not equal (non zero) - > -0e74 : 68 > pla ;load status -0e75 : 48 > pha - > cmp_flag 0 -0e76 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e78 : d0fe > bne * ;failed not equal (non zero) - > -0e7a : 28 > plp ;restore status - > - > set_a $aa-$f4,$ff - > load_flag $ff -0e7b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0e7d : 48 > pha ;use stack to load status -0e7e : a9b6 > lda #$aa-$f4 ;precharge accu -0e80 : 28 > plp - > -0e81 : f4 > db $f4 ;test nop integrity - flags on -0e82 : ea > nop -0e83 : ea > nop - > tst_a $aa-$f4,$ff -0e84 : 08 > php ;save flags -0e85 : c9b6 > cmp #$aa-$f4 ;test result - > trap_ne -0e87 : d0fe > bne * ;failed not equal (non zero) - > -0e89 : 68 > pla ;load status -0e8a : 48 > pha - > cmp_flag $ff -0e8b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0e8d : d0fe > bne * ;failed not equal (non zero) - > -0e8f : 28 > plp ;restore status - > -0e90 : c042 > cpy #$42 - > trap_ne ;y changed -0e92 : d0fe > bne * ;failed not equal (non zero) - > -0e94 : e000 > cpx #0 - > trap_ne ;x changed -0e96 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $5c,3 -0e98 : a042 > ldy #$42 -0e9a : a201 > ldx #4-3 -0e9c : 5c > db $5c ;test nop length - > if 3 = 1 - > dex - > dex - > endif - > if 3 = 2 - > iny - > dex - > endif - > if 3 = 3 -0e9d : c8 > iny -0e9e : c8 > iny - > endif -0e9f : ca > dex - > trap_ne ;wrong number of bytes -0ea0 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$5c,0 - > load_flag 0 -0ea2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0ea4 : 48 > pha ;use stack to load status -0ea5 : a9a3 > lda #$ff-$5c ;precharge accu -0ea7 : 28 > plp - > -0ea8 : 5c > db $5c ;test nop integrity - flags off -0ea9 : ea > nop -0eaa : ea > nop - > tst_a $ff-$5c,0 -0eab : 08 > php ;save flags -0eac : c9a3 > cmp #$ff-$5c ;test result - > trap_ne -0eae : d0fe > bne * ;failed not equal (non zero) - > -0eb0 : 68 > pla ;load status -0eb1 : 48 > pha - > cmp_flag 0 -0eb2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0eb4 : d0fe > bne * ;failed not equal (non zero) - > -0eb6 : 28 > plp ;restore status - > - > set_a $aa-$5c,$ff - > load_flag $ff -0eb7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0eb9 : 48 > pha ;use stack to load status -0eba : a94e > lda #$aa-$5c ;precharge accu -0ebc : 28 > plp - > -0ebd : 5c > db $5c ;test nop integrity - flags on -0ebe : ea > nop -0ebf : ea > nop - > tst_a $aa-$5c,$ff -0ec0 : 08 > php ;save flags -0ec1 : c94e > cmp #$aa-$5c ;test result - > trap_ne -0ec3 : d0fe > bne * ;failed not equal (non zero) - > -0ec5 : 68 > pla ;load status -0ec6 : 48 > pha - > cmp_flag $ff -0ec7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ec9 : d0fe > bne * ;failed not equal (non zero) - > -0ecb : 28 > plp ;restore status - > -0ecc : c042 > cpy #$42 - > trap_ne ;y changed -0ece : d0fe > bne * ;failed not equal (non zero) - > -0ed0 : e000 > cpx #0 - > trap_ne ;x changed -0ed2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $dc,3 -0ed4 : a042 > ldy #$42 -0ed6 : a201 > ldx #4-3 -0ed8 : dc > db $dc ;test nop length - > if 3 = 1 - > dex - > dex - > endif - > if 3 = 2 - > iny - > dex - > endif - > if 3 = 3 -0ed9 : c8 > iny -0eda : c8 > iny - > endif -0edb : ca > dex - > trap_ne ;wrong number of bytes -0edc : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$dc,0 - > load_flag 0 -0ede : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0ee0 : 48 > pha ;use stack to load status -0ee1 : a923 > lda #$ff-$dc ;precharge accu -0ee3 : 28 > plp - > -0ee4 : dc > db $dc ;test nop integrity - flags off -0ee5 : ea > nop -0ee6 : ea > nop - > tst_a $ff-$dc,0 -0ee7 : 08 > php ;save flags -0ee8 : c923 > cmp #$ff-$dc ;test result - > trap_ne -0eea : d0fe > bne * ;failed not equal (non zero) - > -0eec : 68 > pla ;load status -0eed : 48 > pha - > cmp_flag 0 -0eee : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ef0 : d0fe > bne * ;failed not equal (non zero) - > -0ef2 : 28 > plp ;restore status - > - > set_a $aa-$dc,$ff - > load_flag $ff -0ef3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0ef5 : 48 > pha ;use stack to load status -0ef6 : a9ce > lda #$aa-$dc ;precharge accu -0ef8 : 28 > plp - > -0ef9 : dc > db $dc ;test nop integrity - flags on -0efa : ea > nop -0efb : ea > nop - > tst_a $aa-$dc,$ff -0efc : 08 > php ;save flags -0efd : c9ce > cmp #$aa-$dc ;test result - > trap_ne -0eff : d0fe > bne * ;failed not equal (non zero) - > -0f01 : 68 > pla ;load status -0f02 : 48 > pha - > cmp_flag $ff -0f03 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0f05 : d0fe > bne * ;failed not equal (non zero) - > -0f07 : 28 > plp ;restore status - > -0f08 : c042 > cpy #$42 - > trap_ne ;y changed -0f0a : d0fe > bne * ;failed not equal (non zero) - > -0f0c : e000 > cpx #0 - > trap_ne ;x changed -0f0e : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $fc,3 -0f10 : a042 > ldy #$42 -0f12 : a201 > ldx #4-3 -0f14 : fc > db $fc ;test nop length - > if 3 = 1 - > dex - > dex - > endif - > if 3 = 2 - > iny - > dex - > endif - > if 3 = 3 -0f15 : c8 > iny -0f16 : c8 > iny - > endif -0f17 : ca > dex - > trap_ne ;wrong number of bytes -0f18 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$fc,0 - > load_flag 0 -0f1a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0f1c : 48 > pha ;use stack to load status -0f1d : a903 > lda #$ff-$fc ;precharge accu -0f1f : 28 > plp - > -0f20 : fc > db $fc ;test nop integrity - flags off -0f21 : ea > nop -0f22 : ea > nop - > tst_a $ff-$fc,0 -0f23 : 08 > php ;save flags -0f24 : c903 > cmp #$ff-$fc ;test result - > trap_ne -0f26 : d0fe > bne * ;failed not equal (non zero) - > -0f28 : 68 > pla ;load status -0f29 : 48 > pha - > cmp_flag 0 -0f2a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0f2c : d0fe > bne * ;failed not equal (non zero) - > -0f2e : 28 > plp ;restore status - > - > set_a $aa-$fc,$ff - > load_flag $ff -0f2f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0f31 : 48 > pha ;use stack to load status -0f32 : a9ae > lda #$aa-$fc ;precharge accu -0f34 : 28 > plp - > -0f35 : fc > db $fc ;test nop integrity - flags on -0f36 : ea > nop -0f37 : ea > nop - > tst_a $aa-$fc,$ff -0f38 : 08 > php ;save flags -0f39 : c9ae > cmp #$aa-$fc ;test result - > trap_ne -0f3b : d0fe > bne * ;failed not equal (non zero) - > -0f3d : 68 > pla ;load status -0f3e : 48 > pha - > cmp_flag $ff -0f3f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0f41 : d0fe > bne * ;failed not equal (non zero) - > -0f43 : 28 > plp ;restore status - > -0f44 : c042 > cpy #$42 - > trap_ne ;y changed -0f46 : d0fe > bne * ;failed not equal (non zero) - > -0f48 : e000 > cpx #0 - > trap_ne ;x changed -0f4a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $03,1 -0f4c : a042 > ldy #$42 -0f4e : a203 > ldx #4-1 -0f50 : 03 > db $03 ;test nop length - > if 1 = 1 -0f51 : ca > dex -0f52 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -0f53 : ca > dex - > trap_ne ;wrong number of bytes -0f54 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$03,0 - > load_flag 0 -0f56 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0f58 : 48 > pha ;use stack to load status -0f59 : a9fc > lda #$ff-$03 ;precharge accu -0f5b : 28 > plp - > -0f5c : 03 > db $03 ;test nop integrity - flags off -0f5d : ea > nop -0f5e : ea > nop - > tst_a $ff-$03,0 -0f5f : 08 > php ;save flags -0f60 : c9fc > cmp #$ff-$03 ;test result - > trap_ne -0f62 : d0fe > bne * ;failed not equal (non zero) - > -0f64 : 68 > pla ;load status -0f65 : 48 > pha - > cmp_flag 0 -0f66 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0f68 : d0fe > bne * ;failed not equal (non zero) - > -0f6a : 28 > plp ;restore status - > - > set_a $aa-$03,$ff - > load_flag $ff -0f6b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0f6d : 48 > pha ;use stack to load status -0f6e : a9a7 > lda #$aa-$03 ;precharge accu -0f70 : 28 > plp - > -0f71 : 03 > db $03 ;test nop integrity - flags on -0f72 : ea > nop -0f73 : ea > nop - > tst_a $aa-$03,$ff -0f74 : 08 > php ;save flags -0f75 : c9a7 > cmp #$aa-$03 ;test result - > trap_ne -0f77 : d0fe > bne * ;failed not equal (non zero) - > -0f79 : 68 > pla ;load status -0f7a : 48 > pha - > cmp_flag $ff -0f7b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0f7d : d0fe > bne * ;failed not equal (non zero) - > -0f7f : 28 > plp ;restore status - > -0f80 : c042 > cpy #$42 - > trap_ne ;y changed -0f82 : d0fe > bne * ;failed not equal (non zero) - > -0f84 : e000 > cpx #0 - > trap_ne ;x changed -0f86 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $13,1 -0f88 : a042 > ldy #$42 -0f8a : a203 > ldx #4-1 -0f8c : 13 > db $13 ;test nop length - > if 1 = 1 -0f8d : ca > dex -0f8e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -0f8f : ca > dex - > trap_ne ;wrong number of bytes -0f90 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$13,0 - > load_flag 0 -0f92 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0f94 : 48 > pha ;use stack to load status -0f95 : a9ec > lda #$ff-$13 ;precharge accu -0f97 : 28 > plp - > -0f98 : 13 > db $13 ;test nop integrity - flags off -0f99 : ea > nop -0f9a : ea > nop - > tst_a $ff-$13,0 -0f9b : 08 > php ;save flags -0f9c : c9ec > cmp #$ff-$13 ;test result - > trap_ne -0f9e : d0fe > bne * ;failed not equal (non zero) - > -0fa0 : 68 > pla ;load status -0fa1 : 48 > pha - > cmp_flag 0 -0fa2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0fa4 : d0fe > bne * ;failed not equal (non zero) - > -0fa6 : 28 > plp ;restore status - > - > set_a $aa-$13,$ff - > load_flag $ff -0fa7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0fa9 : 48 > pha ;use stack to load status -0faa : a997 > lda #$aa-$13 ;precharge accu -0fac : 28 > plp - > -0fad : 13 > db $13 ;test nop integrity - flags on -0fae : ea > nop -0faf : ea > nop - > tst_a $aa-$13,$ff -0fb0 : 08 > php ;save flags -0fb1 : c997 > cmp #$aa-$13 ;test result - > trap_ne -0fb3 : d0fe > bne * ;failed not equal (non zero) - > -0fb5 : 68 > pla ;load status -0fb6 : 48 > pha - > cmp_flag $ff -0fb7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0fb9 : d0fe > bne * ;failed not equal (non zero) - > -0fbb : 28 > plp ;restore status - > -0fbc : c042 > cpy #$42 - > trap_ne ;y changed -0fbe : d0fe > bne * ;failed not equal (non zero) - > -0fc0 : e000 > cpx #0 - > trap_ne ;x changed -0fc2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $23,1 -0fc4 : a042 > ldy #$42 -0fc6 : a203 > ldx #4-1 -0fc8 : 23 > db $23 ;test nop length - > if 1 = 1 -0fc9 : ca > dex -0fca : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -0fcb : ca > dex - > trap_ne ;wrong number of bytes -0fcc : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$23,0 - > load_flag 0 -0fce : a900 > lda #0 ;allow test to change I-flag (no mask) - > -0fd0 : 48 > pha ;use stack to load status -0fd1 : a9dc > lda #$ff-$23 ;precharge accu -0fd3 : 28 > plp - > -0fd4 : 23 > db $23 ;test nop integrity - flags off -0fd5 : ea > nop -0fd6 : ea > nop - > tst_a $ff-$23,0 -0fd7 : 08 > php ;save flags -0fd8 : c9dc > cmp #$ff-$23 ;test result - > trap_ne -0fda : d0fe > bne * ;failed not equal (non zero) - > -0fdc : 68 > pla ;load status -0fdd : 48 > pha - > cmp_flag 0 -0fde : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0fe0 : d0fe > bne * ;failed not equal (non zero) - > -0fe2 : 28 > plp ;restore status - > - > set_a $aa-$23,$ff - > load_flag $ff -0fe3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -0fe5 : 48 > pha ;use stack to load status -0fe6 : a987 > lda #$aa-$23 ;precharge accu -0fe8 : 28 > plp - > -0fe9 : 23 > db $23 ;test nop integrity - flags on -0fea : ea > nop -0feb : ea > nop - > tst_a $aa-$23,$ff -0fec : 08 > php ;save flags -0fed : c987 > cmp #$aa-$23 ;test result - > trap_ne -0fef : d0fe > bne * ;failed not equal (non zero) - > -0ff1 : 68 > pla ;load status -0ff2 : 48 > pha - > cmp_flag $ff -0ff3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -0ff5 : d0fe > bne * ;failed not equal (non zero) - > -0ff7 : 28 > plp ;restore status - > -0ff8 : c042 > cpy #$42 - > trap_ne ;y changed -0ffa : d0fe > bne * ;failed not equal (non zero) - > -0ffc : e000 > cpx #0 - > trap_ne ;x changed -0ffe : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $33,1 -1000 : a042 > ldy #$42 -1002 : a203 > ldx #4-1 -1004 : 33 > db $33 ;test nop length - > if 1 = 1 -1005 : ca > dex -1006 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1007 : ca > dex - > trap_ne ;wrong number of bytes -1008 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$33,0 - > load_flag 0 -100a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -100c : 48 > pha ;use stack to load status -100d : a9cc > lda #$ff-$33 ;precharge accu -100f : 28 > plp - > -1010 : 33 > db $33 ;test nop integrity - flags off -1011 : ea > nop -1012 : ea > nop - > tst_a $ff-$33,0 -1013 : 08 > php ;save flags -1014 : c9cc > cmp #$ff-$33 ;test result - > trap_ne -1016 : d0fe > bne * ;failed not equal (non zero) - > -1018 : 68 > pla ;load status -1019 : 48 > pha - > cmp_flag 0 -101a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -101c : d0fe > bne * ;failed not equal (non zero) - > -101e : 28 > plp ;restore status - > - > set_a $aa-$33,$ff - > load_flag $ff -101f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1021 : 48 > pha ;use stack to load status -1022 : a977 > lda #$aa-$33 ;precharge accu -1024 : 28 > plp - > -1025 : 33 > db $33 ;test nop integrity - flags on -1026 : ea > nop -1027 : ea > nop - > tst_a $aa-$33,$ff -1028 : 08 > php ;save flags -1029 : c977 > cmp #$aa-$33 ;test result - > trap_ne -102b : d0fe > bne * ;failed not equal (non zero) - > -102d : 68 > pla ;load status -102e : 48 > pha - > cmp_flag $ff -102f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1031 : d0fe > bne * ;failed not equal (non zero) - > -1033 : 28 > plp ;restore status - > -1034 : c042 > cpy #$42 - > trap_ne ;y changed -1036 : d0fe > bne * ;failed not equal (non zero) - > -1038 : e000 > cpx #0 - > trap_ne ;x changed -103a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $43,1 -103c : a042 > ldy #$42 -103e : a203 > ldx #4-1 -1040 : 43 > db $43 ;test nop length - > if 1 = 1 -1041 : ca > dex -1042 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1043 : ca > dex - > trap_ne ;wrong number of bytes -1044 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$43,0 - > load_flag 0 -1046 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1048 : 48 > pha ;use stack to load status -1049 : a9bc > lda #$ff-$43 ;precharge accu -104b : 28 > plp - > -104c : 43 > db $43 ;test nop integrity - flags off -104d : ea > nop -104e : ea > nop - > tst_a $ff-$43,0 -104f : 08 > php ;save flags -1050 : c9bc > cmp #$ff-$43 ;test result - > trap_ne -1052 : d0fe > bne * ;failed not equal (non zero) - > -1054 : 68 > pla ;load status -1055 : 48 > pha - > cmp_flag 0 -1056 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1058 : d0fe > bne * ;failed not equal (non zero) - > -105a : 28 > plp ;restore status - > - > set_a $aa-$43,$ff - > load_flag $ff -105b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -105d : 48 > pha ;use stack to load status -105e : a967 > lda #$aa-$43 ;precharge accu -1060 : 28 > plp - > -1061 : 43 > db $43 ;test nop integrity - flags on -1062 : ea > nop -1063 : ea > nop - > tst_a $aa-$43,$ff -1064 : 08 > php ;save flags -1065 : c967 > cmp #$aa-$43 ;test result - > trap_ne -1067 : d0fe > bne * ;failed not equal (non zero) - > -1069 : 68 > pla ;load status -106a : 48 > pha - > cmp_flag $ff -106b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -106d : d0fe > bne * ;failed not equal (non zero) - > -106f : 28 > plp ;restore status - > -1070 : c042 > cpy #$42 - > trap_ne ;y changed -1072 : d0fe > bne * ;failed not equal (non zero) - > -1074 : e000 > cpx #0 - > trap_ne ;x changed -1076 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $53,1 -1078 : a042 > ldy #$42 -107a : a203 > ldx #4-1 -107c : 53 > db $53 ;test nop length - > if 1 = 1 -107d : ca > dex -107e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -107f : ca > dex - > trap_ne ;wrong number of bytes -1080 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$53,0 - > load_flag 0 -1082 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1084 : 48 > pha ;use stack to load status -1085 : a9ac > lda #$ff-$53 ;precharge accu -1087 : 28 > plp - > -1088 : 53 > db $53 ;test nop integrity - flags off -1089 : ea > nop -108a : ea > nop - > tst_a $ff-$53,0 -108b : 08 > php ;save flags -108c : c9ac > cmp #$ff-$53 ;test result - > trap_ne -108e : d0fe > bne * ;failed not equal (non zero) - > -1090 : 68 > pla ;load status -1091 : 48 > pha - > cmp_flag 0 -1092 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1094 : d0fe > bne * ;failed not equal (non zero) - > -1096 : 28 > plp ;restore status - > - > set_a $aa-$53,$ff - > load_flag $ff -1097 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1099 : 48 > pha ;use stack to load status -109a : a957 > lda #$aa-$53 ;precharge accu -109c : 28 > plp - > -109d : 53 > db $53 ;test nop integrity - flags on -109e : ea > nop -109f : ea > nop - > tst_a $aa-$53,$ff -10a0 : 08 > php ;save flags -10a1 : c957 > cmp #$aa-$53 ;test result - > trap_ne -10a3 : d0fe > bne * ;failed not equal (non zero) - > -10a5 : 68 > pla ;load status -10a6 : 48 > pha - > cmp_flag $ff -10a7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -10a9 : d0fe > bne * ;failed not equal (non zero) - > -10ab : 28 > plp ;restore status - > -10ac : c042 > cpy #$42 - > trap_ne ;y changed -10ae : d0fe > bne * ;failed not equal (non zero) - > -10b0 : e000 > cpx #0 - > trap_ne ;x changed -10b2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $63,1 -10b4 : a042 > ldy #$42 -10b6 : a203 > ldx #4-1 -10b8 : 63 > db $63 ;test nop length - > if 1 = 1 -10b9 : ca > dex -10ba : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -10bb : ca > dex - > trap_ne ;wrong number of bytes -10bc : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$63,0 - > load_flag 0 -10be : a900 > lda #0 ;allow test to change I-flag (no mask) - > -10c0 : 48 > pha ;use stack to load status -10c1 : a99c > lda #$ff-$63 ;precharge accu -10c3 : 28 > plp - > -10c4 : 63 > db $63 ;test nop integrity - flags off -10c5 : ea > nop -10c6 : ea > nop - > tst_a $ff-$63,0 -10c7 : 08 > php ;save flags -10c8 : c99c > cmp #$ff-$63 ;test result - > trap_ne -10ca : d0fe > bne * ;failed not equal (non zero) - > -10cc : 68 > pla ;load status -10cd : 48 > pha - > cmp_flag 0 -10ce : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -10d0 : d0fe > bne * ;failed not equal (non zero) - > -10d2 : 28 > plp ;restore status - > - > set_a $aa-$63,$ff - > load_flag $ff -10d3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -10d5 : 48 > pha ;use stack to load status -10d6 : a947 > lda #$aa-$63 ;precharge accu -10d8 : 28 > plp - > -10d9 : 63 > db $63 ;test nop integrity - flags on -10da : ea > nop -10db : ea > nop - > tst_a $aa-$63,$ff -10dc : 08 > php ;save flags -10dd : c947 > cmp #$aa-$63 ;test result - > trap_ne -10df : d0fe > bne * ;failed not equal (non zero) - > -10e1 : 68 > pla ;load status -10e2 : 48 > pha - > cmp_flag $ff -10e3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -10e5 : d0fe > bne * ;failed not equal (non zero) - > -10e7 : 28 > plp ;restore status - > -10e8 : c042 > cpy #$42 - > trap_ne ;y changed -10ea : d0fe > bne * ;failed not equal (non zero) - > -10ec : e000 > cpx #0 - > trap_ne ;x changed -10ee : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $73,1 -10f0 : a042 > ldy #$42 -10f2 : a203 > ldx #4-1 -10f4 : 73 > db $73 ;test nop length - > if 1 = 1 -10f5 : ca > dex -10f6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -10f7 : ca > dex - > trap_ne ;wrong number of bytes -10f8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$73,0 - > load_flag 0 -10fa : a900 > lda #0 ;allow test to change I-flag (no mask) - > -10fc : 48 > pha ;use stack to load status -10fd : a98c > lda #$ff-$73 ;precharge accu -10ff : 28 > plp - > -1100 : 73 > db $73 ;test nop integrity - flags off -1101 : ea > nop -1102 : ea > nop - > tst_a $ff-$73,0 -1103 : 08 > php ;save flags -1104 : c98c > cmp #$ff-$73 ;test result - > trap_ne -1106 : d0fe > bne * ;failed not equal (non zero) - > -1108 : 68 > pla ;load status -1109 : 48 > pha - > cmp_flag 0 -110a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -110c : d0fe > bne * ;failed not equal (non zero) - > -110e : 28 > plp ;restore status - > - > set_a $aa-$73,$ff - > load_flag $ff -110f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1111 : 48 > pha ;use stack to load status -1112 : a937 > lda #$aa-$73 ;precharge accu -1114 : 28 > plp - > -1115 : 73 > db $73 ;test nop integrity - flags on -1116 : ea > nop -1117 : ea > nop - > tst_a $aa-$73,$ff -1118 : 08 > php ;save flags -1119 : c937 > cmp #$aa-$73 ;test result - > trap_ne -111b : d0fe > bne * ;failed not equal (non zero) - > -111d : 68 > pla ;load status -111e : 48 > pha - > cmp_flag $ff -111f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1121 : d0fe > bne * ;failed not equal (non zero) - > -1123 : 28 > plp ;restore status - > -1124 : c042 > cpy #$42 - > trap_ne ;y changed -1126 : d0fe > bne * ;failed not equal (non zero) - > -1128 : e000 > cpx #0 - > trap_ne ;x changed -112a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $83,1 -112c : a042 > ldy #$42 -112e : a203 > ldx #4-1 -1130 : 83 > db $83 ;test nop length - > if 1 = 1 -1131 : ca > dex -1132 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1133 : ca > dex - > trap_ne ;wrong number of bytes -1134 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$83,0 - > load_flag 0 -1136 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1138 : 48 > pha ;use stack to load status -1139 : a97c > lda #$ff-$83 ;precharge accu -113b : 28 > plp - > -113c : 83 > db $83 ;test nop integrity - flags off -113d : ea > nop -113e : ea > nop - > tst_a $ff-$83,0 -113f : 08 > php ;save flags -1140 : c97c > cmp #$ff-$83 ;test result - > trap_ne -1142 : d0fe > bne * ;failed not equal (non zero) - > -1144 : 68 > pla ;load status -1145 : 48 > pha - > cmp_flag 0 -1146 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1148 : d0fe > bne * ;failed not equal (non zero) - > -114a : 28 > plp ;restore status - > - > set_a $aa-$83,$ff - > load_flag $ff -114b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -114d : 48 > pha ;use stack to load status -114e : a927 > lda #$aa-$83 ;precharge accu -1150 : 28 > plp - > -1151 : 83 > db $83 ;test nop integrity - flags on -1152 : ea > nop -1153 : ea > nop - > tst_a $aa-$83,$ff -1154 : 08 > php ;save flags -1155 : c927 > cmp #$aa-$83 ;test result - > trap_ne -1157 : d0fe > bne * ;failed not equal (non zero) - > -1159 : 68 > pla ;load status -115a : 48 > pha - > cmp_flag $ff -115b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -115d : d0fe > bne * ;failed not equal (non zero) - > -115f : 28 > plp ;restore status - > -1160 : c042 > cpy #$42 - > trap_ne ;y changed -1162 : d0fe > bne * ;failed not equal (non zero) - > -1164 : e000 > cpx #0 - > trap_ne ;x changed -1166 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $93,1 -1168 : a042 > ldy #$42 -116a : a203 > ldx #4-1 -116c : 93 > db $93 ;test nop length - > if 1 = 1 -116d : ca > dex -116e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -116f : ca > dex - > trap_ne ;wrong number of bytes -1170 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$93,0 - > load_flag 0 -1172 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1174 : 48 > pha ;use stack to load status -1175 : a96c > lda #$ff-$93 ;precharge accu -1177 : 28 > plp - > -1178 : 93 > db $93 ;test nop integrity - flags off -1179 : ea > nop -117a : ea > nop - > tst_a $ff-$93,0 -117b : 08 > php ;save flags -117c : c96c > cmp #$ff-$93 ;test result - > trap_ne -117e : d0fe > bne * ;failed not equal (non zero) - > -1180 : 68 > pla ;load status -1181 : 48 > pha - > cmp_flag 0 -1182 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1184 : d0fe > bne * ;failed not equal (non zero) - > -1186 : 28 > plp ;restore status - > - > set_a $aa-$93,$ff - > load_flag $ff -1187 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1189 : 48 > pha ;use stack to load status -118a : a917 > lda #$aa-$93 ;precharge accu -118c : 28 > plp - > -118d : 93 > db $93 ;test nop integrity - flags on -118e : ea > nop -118f : ea > nop - > tst_a $aa-$93,$ff -1190 : 08 > php ;save flags -1191 : c917 > cmp #$aa-$93 ;test result - > trap_ne -1193 : d0fe > bne * ;failed not equal (non zero) - > -1195 : 68 > pla ;load status -1196 : 48 > pha - > cmp_flag $ff -1197 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1199 : d0fe > bne * ;failed not equal (non zero) - > -119b : 28 > plp ;restore status - > -119c : c042 > cpy #$42 - > trap_ne ;y changed -119e : d0fe > bne * ;failed not equal (non zero) - > -11a0 : e000 > cpx #0 - > trap_ne ;x changed -11a2 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $a3,1 -11a4 : a042 > ldy #$42 -11a6 : a203 > ldx #4-1 -11a8 : a3 > db $a3 ;test nop length - > if 1 = 1 -11a9 : ca > dex -11aa : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -11ab : ca > dex - > trap_ne ;wrong number of bytes -11ac : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$a3,0 - > load_flag 0 -11ae : a900 > lda #0 ;allow test to change I-flag (no mask) - > -11b0 : 48 > pha ;use stack to load status -11b1 : a95c > lda #$ff-$a3 ;precharge accu -11b3 : 28 > plp - > -11b4 : a3 > db $a3 ;test nop integrity - flags off -11b5 : ea > nop -11b6 : ea > nop - > tst_a $ff-$a3,0 -11b7 : 08 > php ;save flags -11b8 : c95c > cmp #$ff-$a3 ;test result - > trap_ne -11ba : d0fe > bne * ;failed not equal (non zero) - > -11bc : 68 > pla ;load status -11bd : 48 > pha - > cmp_flag 0 -11be : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -11c0 : d0fe > bne * ;failed not equal (non zero) - > -11c2 : 28 > plp ;restore status - > - > set_a $aa-$a3,$ff - > load_flag $ff -11c3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -11c5 : 48 > pha ;use stack to load status -11c6 : a907 > lda #$aa-$a3 ;precharge accu -11c8 : 28 > plp - > -11c9 : a3 > db $a3 ;test nop integrity - flags on -11ca : ea > nop -11cb : ea > nop - > tst_a $aa-$a3,$ff -11cc : 08 > php ;save flags -11cd : c907 > cmp #$aa-$a3 ;test result - > trap_ne -11cf : d0fe > bne * ;failed not equal (non zero) - > -11d1 : 68 > pla ;load status -11d2 : 48 > pha - > cmp_flag $ff -11d3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -11d5 : d0fe > bne * ;failed not equal (non zero) - > -11d7 : 28 > plp ;restore status - > -11d8 : c042 > cpy #$42 - > trap_ne ;y changed -11da : d0fe > bne * ;failed not equal (non zero) - > -11dc : e000 > cpx #0 - > trap_ne ;x changed -11de : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $b3,1 -11e0 : a042 > ldy #$42 -11e2 : a203 > ldx #4-1 -11e4 : b3 > db $b3 ;test nop length - > if 1 = 1 -11e5 : ca > dex -11e6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -11e7 : ca > dex - > trap_ne ;wrong number of bytes -11e8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$b3,0 - > load_flag 0 -11ea : a900 > lda #0 ;allow test to change I-flag (no mask) - > -11ec : 48 > pha ;use stack to load status -11ed : a94c > lda #$ff-$b3 ;precharge accu -11ef : 28 > plp - > -11f0 : b3 > db $b3 ;test nop integrity - flags off -11f1 : ea > nop -11f2 : ea > nop - > tst_a $ff-$b3,0 -11f3 : 08 > php ;save flags -11f4 : c94c > cmp #$ff-$b3 ;test result - > trap_ne -11f6 : d0fe > bne * ;failed not equal (non zero) - > -11f8 : 68 > pla ;load status -11f9 : 48 > pha - > cmp_flag 0 -11fa : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -11fc : d0fe > bne * ;failed not equal (non zero) - > -11fe : 28 > plp ;restore status - > - > set_a $aa-$b3,$ff - > load_flag $ff -11ff : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1201 : 48 > pha ;use stack to load status -1202 : a9f7 > lda #$aa-$b3 ;precharge accu -1204 : 28 > plp - > -1205 : b3 > db $b3 ;test nop integrity - flags on -1206 : ea > nop -1207 : ea > nop - > tst_a $aa-$b3,$ff -1208 : 08 > php ;save flags -1209 : c9f7 > cmp #$aa-$b3 ;test result - > trap_ne -120b : d0fe > bne * ;failed not equal (non zero) - > -120d : 68 > pla ;load status -120e : 48 > pha - > cmp_flag $ff -120f : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1211 : d0fe > bne * ;failed not equal (non zero) - > -1213 : 28 > plp ;restore status - > -1214 : c042 > cpy #$42 - > trap_ne ;y changed -1216 : d0fe > bne * ;failed not equal (non zero) - > -1218 : e000 > cpx #0 - > trap_ne ;x changed -121a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $c3,1 -121c : a042 > ldy #$42 -121e : a203 > ldx #4-1 -1220 : c3 > db $c3 ;test nop length - > if 1 = 1 -1221 : ca > dex -1222 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1223 : ca > dex - > trap_ne ;wrong number of bytes -1224 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$c3,0 - > load_flag 0 -1226 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1228 : 48 > pha ;use stack to load status -1229 : a93c > lda #$ff-$c3 ;precharge accu -122b : 28 > plp - > -122c : c3 > db $c3 ;test nop integrity - flags off -122d : ea > nop -122e : ea > nop - > tst_a $ff-$c3,0 -122f : 08 > php ;save flags -1230 : c93c > cmp #$ff-$c3 ;test result - > trap_ne -1232 : d0fe > bne * ;failed not equal (non zero) - > -1234 : 68 > pla ;load status -1235 : 48 > pha - > cmp_flag 0 -1236 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1238 : d0fe > bne * ;failed not equal (non zero) - > -123a : 28 > plp ;restore status - > - > set_a $aa-$c3,$ff - > load_flag $ff -123b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -123d : 48 > pha ;use stack to load status -123e : a9e7 > lda #$aa-$c3 ;precharge accu -1240 : 28 > plp - > -1241 : c3 > db $c3 ;test nop integrity - flags on -1242 : ea > nop -1243 : ea > nop - > tst_a $aa-$c3,$ff -1244 : 08 > php ;save flags -1245 : c9e7 > cmp #$aa-$c3 ;test result - > trap_ne -1247 : d0fe > bne * ;failed not equal (non zero) - > -1249 : 68 > pla ;load status -124a : 48 > pha - > cmp_flag $ff -124b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -124d : d0fe > bne * ;failed not equal (non zero) - > -124f : 28 > plp ;restore status - > -1250 : c042 > cpy #$42 - > trap_ne ;y changed -1252 : d0fe > bne * ;failed not equal (non zero) - > -1254 : e000 > cpx #0 - > trap_ne ;x changed -1256 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $d3,1 -1258 : a042 > ldy #$42 -125a : a203 > ldx #4-1 -125c : d3 > db $d3 ;test nop length - > if 1 = 1 -125d : ca > dex -125e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -125f : ca > dex - > trap_ne ;wrong number of bytes -1260 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$d3,0 - > load_flag 0 -1262 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1264 : 48 > pha ;use stack to load status -1265 : a92c > lda #$ff-$d3 ;precharge accu -1267 : 28 > plp - > -1268 : d3 > db $d3 ;test nop integrity - flags off -1269 : ea > nop -126a : ea > nop - > tst_a $ff-$d3,0 -126b : 08 > php ;save flags -126c : c92c > cmp #$ff-$d3 ;test result - > trap_ne -126e : d0fe > bne * ;failed not equal (non zero) - > -1270 : 68 > pla ;load status -1271 : 48 > pha - > cmp_flag 0 -1272 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1274 : d0fe > bne * ;failed not equal (non zero) - > -1276 : 28 > plp ;restore status - > - > set_a $aa-$d3,$ff - > load_flag $ff -1277 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1279 : 48 > pha ;use stack to load status -127a : a9d7 > lda #$aa-$d3 ;precharge accu -127c : 28 > plp - > -127d : d3 > db $d3 ;test nop integrity - flags on -127e : ea > nop -127f : ea > nop - > tst_a $aa-$d3,$ff -1280 : 08 > php ;save flags -1281 : c9d7 > cmp #$aa-$d3 ;test result - > trap_ne -1283 : d0fe > bne * ;failed not equal (non zero) - > -1285 : 68 > pla ;load status -1286 : 48 > pha - > cmp_flag $ff -1287 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1289 : d0fe > bne * ;failed not equal (non zero) - > -128b : 28 > plp ;restore status - > -128c : c042 > cpy #$42 - > trap_ne ;y changed -128e : d0fe > bne * ;failed not equal (non zero) - > -1290 : e000 > cpx #0 - > trap_ne ;x changed -1292 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $e3,1 -1294 : a042 > ldy #$42 -1296 : a203 > ldx #4-1 -1298 : e3 > db $e3 ;test nop length - > if 1 = 1 -1299 : ca > dex -129a : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -129b : ca > dex - > trap_ne ;wrong number of bytes -129c : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$e3,0 - > load_flag 0 -129e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -12a0 : 48 > pha ;use stack to load status -12a1 : a91c > lda #$ff-$e3 ;precharge accu -12a3 : 28 > plp - > -12a4 : e3 > db $e3 ;test nop integrity - flags off -12a5 : ea > nop -12a6 : ea > nop - > tst_a $ff-$e3,0 -12a7 : 08 > php ;save flags -12a8 : c91c > cmp #$ff-$e3 ;test result - > trap_ne -12aa : d0fe > bne * ;failed not equal (non zero) - > -12ac : 68 > pla ;load status -12ad : 48 > pha - > cmp_flag 0 -12ae : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -12b0 : d0fe > bne * ;failed not equal (non zero) - > -12b2 : 28 > plp ;restore status - > - > set_a $aa-$e3,$ff - > load_flag $ff -12b3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -12b5 : 48 > pha ;use stack to load status -12b6 : a9c7 > lda #$aa-$e3 ;precharge accu -12b8 : 28 > plp - > -12b9 : e3 > db $e3 ;test nop integrity - flags on -12ba : ea > nop -12bb : ea > nop - > tst_a $aa-$e3,$ff -12bc : 08 > php ;save flags -12bd : c9c7 > cmp #$aa-$e3 ;test result - > trap_ne -12bf : d0fe > bne * ;failed not equal (non zero) - > -12c1 : 68 > pla ;load status -12c2 : 48 > pha - > cmp_flag $ff -12c3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -12c5 : d0fe > bne * ;failed not equal (non zero) - > -12c7 : 28 > plp ;restore status - > -12c8 : c042 > cpy #$42 - > trap_ne ;y changed -12ca : d0fe > bne * ;failed not equal (non zero) - > -12cc : e000 > cpx #0 - > trap_ne ;x changed -12ce : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $f3,1 -12d0 : a042 > ldy #$42 -12d2 : a203 > ldx #4-1 -12d4 : f3 > db $f3 ;test nop length - > if 1 = 1 -12d5 : ca > dex -12d6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -12d7 : ca > dex - > trap_ne ;wrong number of bytes -12d8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$f3,0 - > load_flag 0 -12da : a900 > lda #0 ;allow test to change I-flag (no mask) - > -12dc : 48 > pha ;use stack to load status -12dd : a90c > lda #$ff-$f3 ;precharge accu -12df : 28 > plp - > -12e0 : f3 > db $f3 ;test nop integrity - flags off -12e1 : ea > nop -12e2 : ea > nop - > tst_a $ff-$f3,0 -12e3 : 08 > php ;save flags -12e4 : c90c > cmp #$ff-$f3 ;test result - > trap_ne -12e6 : d0fe > bne * ;failed not equal (non zero) - > -12e8 : 68 > pla ;load status -12e9 : 48 > pha - > cmp_flag 0 -12ea : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -12ec : d0fe > bne * ;failed not equal (non zero) - > -12ee : 28 > plp ;restore status - > - > set_a $aa-$f3,$ff - > load_flag $ff -12ef : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -12f1 : 48 > pha ;use stack to load status -12f2 : a9b7 > lda #$aa-$f3 ;precharge accu -12f4 : 28 > plp - > -12f5 : f3 > db $f3 ;test nop integrity - flags on -12f6 : ea > nop -12f7 : ea > nop - > tst_a $aa-$f3,$ff -12f8 : 08 > php ;save flags -12f9 : c9b7 > cmp #$aa-$f3 ;test result - > trap_ne -12fb : d0fe > bne * ;failed not equal (non zero) - > -12fd : 68 > pla ;load status -12fe : 48 > pha - > cmp_flag $ff -12ff : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1301 : d0fe > bne * ;failed not equal (non zero) - > -1303 : 28 > plp ;restore status - > -1304 : c042 > cpy #$42 - > trap_ne ;y changed -1306 : d0fe > bne * ;failed not equal (non zero) - > -1308 : e000 > cpx #0 - > trap_ne ;x changed -130a : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $0b,1 -130c : a042 > ldy #$42 -130e : a203 > ldx #4-1 -1310 : 0b > db $0b ;test nop length - > if 1 = 1 -1311 : ca > dex -1312 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1313 : ca > dex - > trap_ne ;wrong number of bytes -1314 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$0b,0 - > load_flag 0 -1316 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1318 : 48 > pha ;use stack to load status -1319 : a9f4 > lda #$ff-$0b ;precharge accu -131b : 28 > plp - > -131c : 0b > db $0b ;test nop integrity - flags off -131d : ea > nop -131e : ea > nop - > tst_a $ff-$0b,0 -131f : 08 > php ;save flags -1320 : c9f4 > cmp #$ff-$0b ;test result - > trap_ne -1322 : d0fe > bne * ;failed not equal (non zero) - > -1324 : 68 > pla ;load status -1325 : 48 > pha - > cmp_flag 0 -1326 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1328 : d0fe > bne * ;failed not equal (non zero) - > -132a : 28 > plp ;restore status - > - > set_a $aa-$0b,$ff - > load_flag $ff -132b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -132d : 48 > pha ;use stack to load status -132e : a99f > lda #$aa-$0b ;precharge accu -1330 : 28 > plp - > -1331 : 0b > db $0b ;test nop integrity - flags on -1332 : ea > nop -1333 : ea > nop - > tst_a $aa-$0b,$ff -1334 : 08 > php ;save flags -1335 : c99f > cmp #$aa-$0b ;test result - > trap_ne -1337 : d0fe > bne * ;failed not equal (non zero) - > -1339 : 68 > pla ;load status -133a : 48 > pha - > cmp_flag $ff -133b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -133d : d0fe > bne * ;failed not equal (non zero) - > -133f : 28 > plp ;restore status - > -1340 : c042 > cpy #$42 - > trap_ne ;y changed -1342 : d0fe > bne * ;failed not equal (non zero) - > -1344 : e000 > cpx #0 - > trap_ne ;x changed -1346 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $1b,1 -1348 : a042 > ldy #$42 -134a : a203 > ldx #4-1 -134c : 1b > db $1b ;test nop length - > if 1 = 1 -134d : ca > dex -134e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -134f : ca > dex - > trap_ne ;wrong number of bytes -1350 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$1b,0 - > load_flag 0 -1352 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1354 : 48 > pha ;use stack to load status -1355 : a9e4 > lda #$ff-$1b ;precharge accu -1357 : 28 > plp - > -1358 : 1b > db $1b ;test nop integrity - flags off -1359 : ea > nop -135a : ea > nop - > tst_a $ff-$1b,0 -135b : 08 > php ;save flags -135c : c9e4 > cmp #$ff-$1b ;test result - > trap_ne -135e : d0fe > bne * ;failed not equal (non zero) - > -1360 : 68 > pla ;load status -1361 : 48 > pha - > cmp_flag 0 -1362 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1364 : d0fe > bne * ;failed not equal (non zero) - > -1366 : 28 > plp ;restore status - > - > set_a $aa-$1b,$ff - > load_flag $ff -1367 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1369 : 48 > pha ;use stack to load status -136a : a98f > lda #$aa-$1b ;precharge accu -136c : 28 > plp - > -136d : 1b > db $1b ;test nop integrity - flags on -136e : ea > nop -136f : ea > nop - > tst_a $aa-$1b,$ff -1370 : 08 > php ;save flags -1371 : c98f > cmp #$aa-$1b ;test result - > trap_ne -1373 : d0fe > bne * ;failed not equal (non zero) - > -1375 : 68 > pla ;load status -1376 : 48 > pha - > cmp_flag $ff -1377 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1379 : d0fe > bne * ;failed not equal (non zero) - > -137b : 28 > plp ;restore status - > -137c : c042 > cpy #$42 - > trap_ne ;y changed -137e : d0fe > bne * ;failed not equal (non zero) - > -1380 : e000 > cpx #0 - > trap_ne ;x changed -1382 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $2b,1 -1384 : a042 > ldy #$42 -1386 : a203 > ldx #4-1 -1388 : 2b > db $2b ;test nop length - > if 1 = 1 -1389 : ca > dex -138a : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -138b : ca > dex - > trap_ne ;wrong number of bytes -138c : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$2b,0 - > load_flag 0 -138e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1390 : 48 > pha ;use stack to load status -1391 : a9d4 > lda #$ff-$2b ;precharge accu -1393 : 28 > plp - > -1394 : 2b > db $2b ;test nop integrity - flags off -1395 : ea > nop -1396 : ea > nop - > tst_a $ff-$2b,0 -1397 : 08 > php ;save flags -1398 : c9d4 > cmp #$ff-$2b ;test result - > trap_ne -139a : d0fe > bne * ;failed not equal (non zero) - > -139c : 68 > pla ;load status -139d : 48 > pha - > cmp_flag 0 -139e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -13a0 : d0fe > bne * ;failed not equal (non zero) - > -13a2 : 28 > plp ;restore status - > - > set_a $aa-$2b,$ff - > load_flag $ff -13a3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -13a5 : 48 > pha ;use stack to load status -13a6 : a97f > lda #$aa-$2b ;precharge accu -13a8 : 28 > plp - > -13a9 : 2b > db $2b ;test nop integrity - flags on -13aa : ea > nop -13ab : ea > nop - > tst_a $aa-$2b,$ff -13ac : 08 > php ;save flags -13ad : c97f > cmp #$aa-$2b ;test result - > trap_ne -13af : d0fe > bne * ;failed not equal (non zero) - > -13b1 : 68 > pla ;load status -13b2 : 48 > pha - > cmp_flag $ff -13b3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -13b5 : d0fe > bne * ;failed not equal (non zero) - > -13b7 : 28 > plp ;restore status - > -13b8 : c042 > cpy #$42 - > trap_ne ;y changed -13ba : d0fe > bne * ;failed not equal (non zero) - > -13bc : e000 > cpx #0 - > trap_ne ;x changed -13be : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $3b,1 -13c0 : a042 > ldy #$42 -13c2 : a203 > ldx #4-1 -13c4 : 3b > db $3b ;test nop length - > if 1 = 1 -13c5 : ca > dex -13c6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -13c7 : ca > dex - > trap_ne ;wrong number of bytes -13c8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$3b,0 - > load_flag 0 -13ca : a900 > lda #0 ;allow test to change I-flag (no mask) - > -13cc : 48 > pha ;use stack to load status -13cd : a9c4 > lda #$ff-$3b ;precharge accu -13cf : 28 > plp - > -13d0 : 3b > db $3b ;test nop integrity - flags off -13d1 : ea > nop -13d2 : ea > nop - > tst_a $ff-$3b,0 -13d3 : 08 > php ;save flags -13d4 : c9c4 > cmp #$ff-$3b ;test result - > trap_ne -13d6 : d0fe > bne * ;failed not equal (non zero) - > -13d8 : 68 > pla ;load status -13d9 : 48 > pha - > cmp_flag 0 -13da : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -13dc : d0fe > bne * ;failed not equal (non zero) - > -13de : 28 > plp ;restore status - > - > set_a $aa-$3b,$ff - > load_flag $ff -13df : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -13e1 : 48 > pha ;use stack to load status -13e2 : a96f > lda #$aa-$3b ;precharge accu -13e4 : 28 > plp - > -13e5 : 3b > db $3b ;test nop integrity - flags on -13e6 : ea > nop -13e7 : ea > nop - > tst_a $aa-$3b,$ff -13e8 : 08 > php ;save flags -13e9 : c96f > cmp #$aa-$3b ;test result - > trap_ne -13eb : d0fe > bne * ;failed not equal (non zero) - > -13ed : 68 > pla ;load status -13ee : 48 > pha - > cmp_flag $ff -13ef : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -13f1 : d0fe > bne * ;failed not equal (non zero) - > -13f3 : 28 > plp ;restore status - > -13f4 : c042 > cpy #$42 - > trap_ne ;y changed -13f6 : d0fe > bne * ;failed not equal (non zero) - > -13f8 : e000 > cpx #0 - > trap_ne ;x changed -13fa : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $4b,1 -13fc : a042 > ldy #$42 -13fe : a203 > ldx #4-1 -1400 : 4b > db $4b ;test nop length - > if 1 = 1 -1401 : ca > dex -1402 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -1403 : ca > dex - > trap_ne ;wrong number of bytes -1404 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$4b,0 - > load_flag 0 -1406 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1408 : 48 > pha ;use stack to load status -1409 : a9b4 > lda #$ff-$4b ;precharge accu -140b : 28 > plp - > -140c : 4b > db $4b ;test nop integrity - flags off -140d : ea > nop -140e : ea > nop - > tst_a $ff-$4b,0 -140f : 08 > php ;save flags -1410 : c9b4 > cmp #$ff-$4b ;test result - > trap_ne -1412 : d0fe > bne * ;failed not equal (non zero) - > -1414 : 68 > pla ;load status -1415 : 48 > pha - > cmp_flag 0 -1416 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1418 : d0fe > bne * ;failed not equal (non zero) - > -141a : 28 > plp ;restore status - > - > set_a $aa-$4b,$ff - > load_flag $ff -141b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -141d : 48 > pha ;use stack to load status -141e : a95f > lda #$aa-$4b ;precharge accu -1420 : 28 > plp - > -1421 : 4b > db $4b ;test nop integrity - flags on -1422 : ea > nop -1423 : ea > nop - > tst_a $aa-$4b,$ff -1424 : 08 > php ;save flags -1425 : c95f > cmp #$aa-$4b ;test result - > trap_ne -1427 : d0fe > bne * ;failed not equal (non zero) - > -1429 : 68 > pla ;load status -142a : 48 > pha - > cmp_flag $ff -142b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -142d : d0fe > bne * ;failed not equal (non zero) - > -142f : 28 > plp ;restore status - > -1430 : c042 > cpy #$42 - > trap_ne ;y changed -1432 : d0fe > bne * ;failed not equal (non zero) - > -1434 : e000 > cpx #0 - > trap_ne ;x changed -1436 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $5b,1 -1438 : a042 > ldy #$42 -143a : a203 > ldx #4-1 -143c : 5b > db $5b ;test nop length - > if 1 = 1 -143d : ca > dex -143e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -143f : ca > dex - > trap_ne ;wrong number of bytes -1440 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$5b,0 - > load_flag 0 -1442 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1444 : 48 > pha ;use stack to load status -1445 : a9a4 > lda #$ff-$5b ;precharge accu -1447 : 28 > plp - > -1448 : 5b > db $5b ;test nop integrity - flags off -1449 : ea > nop -144a : ea > nop - > tst_a $ff-$5b,0 -144b : 08 > php ;save flags -144c : c9a4 > cmp #$ff-$5b ;test result - > trap_ne -144e : d0fe > bne * ;failed not equal (non zero) - > -1450 : 68 > pla ;load status -1451 : 48 > pha - > cmp_flag 0 -1452 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1454 : d0fe > bne * ;failed not equal (non zero) - > -1456 : 28 > plp ;restore status - > - > set_a $aa-$5b,$ff - > load_flag $ff -1457 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1459 : 48 > pha ;use stack to load status -145a : a94f > lda #$aa-$5b ;precharge accu -145c : 28 > plp - > -145d : 5b > db $5b ;test nop integrity - flags on -145e : ea > nop -145f : ea > nop - > tst_a $aa-$5b,$ff -1460 : 08 > php ;save flags -1461 : c94f > cmp #$aa-$5b ;test result - > trap_ne -1463 : d0fe > bne * ;failed not equal (non zero) - > -1465 : 68 > pla ;load status -1466 : 48 > pha - > cmp_flag $ff -1467 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1469 : d0fe > bne * ;failed not equal (non zero) - > -146b : 28 > plp ;restore status - > -146c : c042 > cpy #$42 - > trap_ne ;y changed -146e : d0fe > bne * ;failed not equal (non zero) - > -1470 : e000 > cpx #0 - > trap_ne ;x changed -1472 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $6b,1 -1474 : a042 > ldy #$42 -1476 : a203 > ldx #4-1 -1478 : 6b > db $6b ;test nop length - > if 1 = 1 -1479 : ca > dex -147a : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -147b : ca > dex - > trap_ne ;wrong number of bytes -147c : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$6b,0 - > load_flag 0 -147e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1480 : 48 > pha ;use stack to load status -1481 : a994 > lda #$ff-$6b ;precharge accu -1483 : 28 > plp - > -1484 : 6b > db $6b ;test nop integrity - flags off -1485 : ea > nop -1486 : ea > nop - > tst_a $ff-$6b,0 -1487 : 08 > php ;save flags -1488 : c994 > cmp #$ff-$6b ;test result - > trap_ne -148a : d0fe > bne * ;failed not equal (non zero) - > -148c : 68 > pla ;load status -148d : 48 > pha - > cmp_flag 0 -148e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1490 : d0fe > bne * ;failed not equal (non zero) - > -1492 : 28 > plp ;restore status - > - > set_a $aa-$6b,$ff - > load_flag $ff -1493 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1495 : 48 > pha ;use stack to load status -1496 : a93f > lda #$aa-$6b ;precharge accu -1498 : 28 > plp - > -1499 : 6b > db $6b ;test nop integrity - flags on -149a : ea > nop -149b : ea > nop - > tst_a $aa-$6b,$ff -149c : 08 > php ;save flags -149d : c93f > cmp #$aa-$6b ;test result - > trap_ne -149f : d0fe > bne * ;failed not equal (non zero) - > -14a1 : 68 > pla ;load status -14a2 : 48 > pha - > cmp_flag $ff -14a3 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -14a5 : d0fe > bne * ;failed not equal (non zero) - > -14a7 : 28 > plp ;restore status - > -14a8 : c042 > cpy #$42 - > trap_ne ;y changed -14aa : d0fe > bne * ;failed not equal (non zero) - > -14ac : e000 > cpx #0 - > trap_ne ;x changed -14ae : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $7b,1 -14b0 : a042 > ldy #$42 -14b2 : a203 > ldx #4-1 -14b4 : 7b > db $7b ;test nop length - > if 1 = 1 -14b5 : ca > dex -14b6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -14b7 : ca > dex - > trap_ne ;wrong number of bytes -14b8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$7b,0 - > load_flag 0 -14ba : a900 > lda #0 ;allow test to change I-flag (no mask) - > -14bc : 48 > pha ;use stack to load status -14bd : a984 > lda #$ff-$7b ;precharge accu -14bf : 28 > plp - > -14c0 : 7b > db $7b ;test nop integrity - flags off -14c1 : ea > nop -14c2 : ea > nop - > tst_a $ff-$7b,0 -14c3 : 08 > php ;save flags -14c4 : c984 > cmp #$ff-$7b ;test result - > trap_ne -14c6 : d0fe > bne * ;failed not equal (non zero) - > -14c8 : 68 > pla ;load status -14c9 : 48 > pha - > cmp_flag 0 -14ca : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -14cc : d0fe > bne * ;failed not equal (non zero) - > -14ce : 28 > plp ;restore status - > - > set_a $aa-$7b,$ff - > load_flag $ff -14cf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -14d1 : 48 > pha ;use stack to load status -14d2 : a92f > lda #$aa-$7b ;precharge accu -14d4 : 28 > plp - > -14d5 : 7b > db $7b ;test nop integrity - flags on -14d6 : ea > nop -14d7 : ea > nop - > tst_a $aa-$7b,$ff -14d8 : 08 > php ;save flags -14d9 : c92f > cmp #$aa-$7b ;test result - > trap_ne -14db : d0fe > bne * ;failed not equal (non zero) - > -14dd : 68 > pla ;load status -14de : 48 > pha - > cmp_flag $ff -14df : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -14e1 : d0fe > bne * ;failed not equal (non zero) - > -14e3 : 28 > plp ;restore status - > -14e4 : c042 > cpy #$42 - > trap_ne ;y changed -14e6 : d0fe > bne * ;failed not equal (non zero) - > -14e8 : e000 > cpx #0 - > trap_ne ;x changed -14ea : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $8b,1 -14ec : a042 > ldy #$42 -14ee : a203 > ldx #4-1 -14f0 : 8b > db $8b ;test nop length - > if 1 = 1 -14f1 : ca > dex -14f2 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -14f3 : ca > dex - > trap_ne ;wrong number of bytes -14f4 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$8b,0 - > load_flag 0 -14f6 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -14f8 : 48 > pha ;use stack to load status -14f9 : a974 > lda #$ff-$8b ;precharge accu -14fb : 28 > plp - > -14fc : 8b > db $8b ;test nop integrity - flags off -14fd : ea > nop -14fe : ea > nop - > tst_a $ff-$8b,0 -14ff : 08 > php ;save flags -1500 : c974 > cmp #$ff-$8b ;test result - > trap_ne -1502 : d0fe > bne * ;failed not equal (non zero) - > -1504 : 68 > pla ;load status -1505 : 48 > pha - > cmp_flag 0 -1506 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1508 : d0fe > bne * ;failed not equal (non zero) - > -150a : 28 > plp ;restore status - > - > set_a $aa-$8b,$ff - > load_flag $ff -150b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -150d : 48 > pha ;use stack to load status -150e : a91f > lda #$aa-$8b ;precharge accu -1510 : 28 > plp - > -1511 : 8b > db $8b ;test nop integrity - flags on -1512 : ea > nop -1513 : ea > nop - > tst_a $aa-$8b,$ff -1514 : 08 > php ;save flags -1515 : c91f > cmp #$aa-$8b ;test result - > trap_ne -1517 : d0fe > bne * ;failed not equal (non zero) - > -1519 : 68 > pla ;load status -151a : 48 > pha - > cmp_flag $ff -151b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -151d : d0fe > bne * ;failed not equal (non zero) - > -151f : 28 > plp ;restore status - > -1520 : c042 > cpy #$42 - > trap_ne ;y changed -1522 : d0fe > bne * ;failed not equal (non zero) - > -1524 : e000 > cpx #0 - > trap_ne ;x changed -1526 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $9b,1 -1528 : a042 > ldy #$42 -152a : a203 > ldx #4-1 -152c : 9b > db $9b ;test nop length - > if 1 = 1 -152d : ca > dex -152e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -152f : ca > dex - > trap_ne ;wrong number of bytes -1530 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$9b,0 - > load_flag 0 -1532 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1534 : 48 > pha ;use stack to load status -1535 : a964 > lda #$ff-$9b ;precharge accu -1537 : 28 > plp - > -1538 : 9b > db $9b ;test nop integrity - flags off -1539 : ea > nop -153a : ea > nop - > tst_a $ff-$9b,0 -153b : 08 > php ;save flags -153c : c964 > cmp #$ff-$9b ;test result - > trap_ne -153e : d0fe > bne * ;failed not equal (non zero) - > -1540 : 68 > pla ;load status -1541 : 48 > pha - > cmp_flag 0 -1542 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1544 : d0fe > bne * ;failed not equal (non zero) - > -1546 : 28 > plp ;restore status - > - > set_a $aa-$9b,$ff - > load_flag $ff -1547 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1549 : 48 > pha ;use stack to load status -154a : a90f > lda #$aa-$9b ;precharge accu -154c : 28 > plp - > -154d : 9b > db $9b ;test nop integrity - flags on -154e : ea > nop -154f : ea > nop - > tst_a $aa-$9b,$ff -1550 : 08 > php ;save flags -1551 : c90f > cmp #$aa-$9b ;test result - > trap_ne -1553 : d0fe > bne * ;failed not equal (non zero) - > -1555 : 68 > pla ;load status -1556 : 48 > pha - > cmp_flag $ff -1557 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1559 : d0fe > bne * ;failed not equal (non zero) - > -155b : 28 > plp ;restore status - > -155c : c042 > cpy #$42 - > trap_ne ;y changed -155e : d0fe > bne * ;failed not equal (non zero) - > -1560 : e000 > cpx #0 - > trap_ne ;x changed -1562 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $ab,1 -1564 : a042 > ldy #$42 -1566 : a203 > ldx #4-1 -1568 : ab > db $ab ;test nop length - > if 1 = 1 -1569 : ca > dex -156a : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -156b : ca > dex - > trap_ne ;wrong number of bytes -156c : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$ab,0 - > load_flag 0 -156e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1570 : 48 > pha ;use stack to load status -1571 : a954 > lda #$ff-$ab ;precharge accu -1573 : 28 > plp - > -1574 : ab > db $ab ;test nop integrity - flags off -1575 : ea > nop -1576 : ea > nop - > tst_a $ff-$ab,0 -1577 : 08 > php ;save flags -1578 : c954 > cmp #$ff-$ab ;test result - > trap_ne -157a : d0fe > bne * ;failed not equal (non zero) - > -157c : 68 > pla ;load status -157d : 48 > pha - > cmp_flag 0 -157e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1580 : d0fe > bne * ;failed not equal (non zero) - > -1582 : 28 > plp ;restore status - > - > set_a $aa-$ab,$ff - > load_flag $ff -1583 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1585 : 48 > pha ;use stack to load status -1586 : a9ff > lda #$aa-$ab ;precharge accu -1588 : 28 > plp - > -1589 : ab > db $ab ;test nop integrity - flags on -158a : ea > nop -158b : ea > nop - > tst_a $aa-$ab,$ff -158c : 08 > php ;save flags -158d : c9ff > cmp #$aa-$ab ;test result - > trap_ne -158f : d0fe > bne * ;failed not equal (non zero) - > -1591 : 68 > pla ;load status -1592 : 48 > pha - > cmp_flag $ff -1593 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1595 : d0fe > bne * ;failed not equal (non zero) - > -1597 : 28 > plp ;restore status - > -1598 : c042 > cpy #$42 - > trap_ne ;y changed -159a : d0fe > bne * ;failed not equal (non zero) - > -159c : e000 > cpx #0 - > trap_ne ;x changed -159e : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $bb,1 -15a0 : a042 > ldy #$42 -15a2 : a203 > ldx #4-1 -15a4 : bb > db $bb ;test nop length - > if 1 = 1 -15a5 : ca > dex -15a6 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -15a7 : ca > dex - > trap_ne ;wrong number of bytes -15a8 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$bb,0 - > load_flag 0 -15aa : a900 > lda #0 ;allow test to change I-flag (no mask) - > -15ac : 48 > pha ;use stack to load status -15ad : a944 > lda #$ff-$bb ;precharge accu -15af : 28 > plp - > -15b0 : bb > db $bb ;test nop integrity - flags off -15b1 : ea > nop -15b2 : ea > nop - > tst_a $ff-$bb,0 -15b3 : 08 > php ;save flags -15b4 : c944 > cmp #$ff-$bb ;test result - > trap_ne -15b6 : d0fe > bne * ;failed not equal (non zero) - > -15b8 : 68 > pla ;load status -15b9 : 48 > pha - > cmp_flag 0 -15ba : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -15bc : d0fe > bne * ;failed not equal (non zero) - > -15be : 28 > plp ;restore status - > - > set_a $aa-$bb,$ff - > load_flag $ff -15bf : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -15c1 : 48 > pha ;use stack to load status -15c2 : a9ef > lda #$aa-$bb ;precharge accu -15c4 : 28 > plp - > -15c5 : bb > db $bb ;test nop integrity - flags on -15c6 : ea > nop -15c7 : ea > nop - > tst_a $aa-$bb,$ff -15c8 : 08 > php ;save flags -15c9 : c9ef > cmp #$aa-$bb ;test result - > trap_ne -15cb : d0fe > bne * ;failed not equal (non zero) - > -15cd : 68 > pla ;load status -15ce : 48 > pha - > cmp_flag $ff -15cf : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -15d1 : d0fe > bne * ;failed not equal (non zero) - > -15d3 : 28 > plp ;restore status - > -15d4 : c042 > cpy #$42 - > trap_ne ;y changed -15d6 : d0fe > bne * ;failed not equal (non zero) - > -15d8 : e000 > cpx #0 - > trap_ne ;x changed -15da : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $eb,1 -15dc : a042 > ldy #$42 -15de : a203 > ldx #4-1 -15e0 : eb > db $eb ;test nop length - > if 1 = 1 -15e1 : ca > dex -15e2 : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -15e3 : ca > dex - > trap_ne ;wrong number of bytes -15e4 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$eb,0 - > load_flag 0 -15e6 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -15e8 : 48 > pha ;use stack to load status -15e9 : a914 > lda #$ff-$eb ;precharge accu -15eb : 28 > plp - > -15ec : eb > db $eb ;test nop integrity - flags off -15ed : ea > nop -15ee : ea > nop - > tst_a $ff-$eb,0 -15ef : 08 > php ;save flags -15f0 : c914 > cmp #$ff-$eb ;test result - > trap_ne -15f2 : d0fe > bne * ;failed not equal (non zero) - > -15f4 : 68 > pla ;load status -15f5 : 48 > pha - > cmp_flag 0 -15f6 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -15f8 : d0fe > bne * ;failed not equal (non zero) - > -15fa : 28 > plp ;restore status - > - > set_a $aa-$eb,$ff - > load_flag $ff -15fb : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -15fd : 48 > pha ;use stack to load status -15fe : a9bf > lda #$aa-$eb ;precharge accu -1600 : 28 > plp - > -1601 : eb > db $eb ;test nop integrity - flags on -1602 : ea > nop -1603 : ea > nop - > tst_a $aa-$eb,$ff -1604 : 08 > php ;save flags -1605 : c9bf > cmp #$aa-$eb ;test result - > trap_ne -1607 : d0fe > bne * ;failed not equal (non zero) - > -1609 : 68 > pla ;load status -160a : 48 > pha - > cmp_flag $ff -160b : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -160d : d0fe > bne * ;failed not equal (non zero) - > -160f : 28 > plp ;restore status - > -1610 : c042 > cpy #$42 - > trap_ne ;y changed -1612 : d0fe > bne * ;failed not equal (non zero) - > -1614 : e000 > cpx #0 - > trap_ne ;x changed -1616 : d0fe > bne * ;failed not equal (non zero) - > - - nop_test $fb,1 -1618 : a042 > ldy #$42 -161a : a203 > ldx #4-1 -161c : fb > db $fb ;test nop length - > if 1 = 1 -161d : ca > dex -161e : ca > dex - > endif - > if 1 = 2 - > iny - > dex - > endif - > if 1 = 3 - > iny - > iny - > endif -161f : ca > dex - > trap_ne ;wrong number of bytes -1620 : d0fe > bne * ;failed not equal (non zero) - > - > set_a $ff-$fb,0 - > load_flag 0 -1622 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1624 : 48 > pha ;use stack to load status -1625 : a904 > lda #$ff-$fb ;precharge accu -1627 : 28 > plp - > -1628 : fb > db $fb ;test nop integrity - flags off -1629 : ea > nop -162a : ea > nop - > tst_a $ff-$fb,0 -162b : 08 > php ;save flags -162c : c904 > cmp #$ff-$fb ;test result - > trap_ne -162e : d0fe > bne * ;failed not equal (non zero) - > -1630 : 68 > pla ;load status -1631 : 48 > pha - > cmp_flag 0 -1632 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1634 : d0fe > bne * ;failed not equal (non zero) - > -1636 : 28 > plp ;restore status - > - > set_a $aa-$fb,$ff - > load_flag $ff -1637 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1639 : 48 > pha ;use stack to load status -163a : a9af > lda #$aa-$fb ;precharge accu -163c : 28 > plp - > -163d : fb > db $fb ;test nop integrity - flags on -163e : ea > nop -163f : ea > nop - > tst_a $aa-$fb,$ff -1640 : 08 > php ;save flags -1641 : c9af > cmp #$aa-$fb ;test result - > trap_ne -1643 : d0fe > bne * ;failed not equal (non zero) - > -1645 : 68 > pla ;load status -1646 : 48 > pha - > cmp_flag $ff -1647 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1649 : d0fe > bne * ;failed not equal (non zero) - > -164b : 28 > plp ;restore status - > -164c : c042 > cpy #$42 - > trap_ne ;y changed -164e : d0fe > bne * ;failed not equal (non zero) - > -1650 : e000 > cpx #0 - > trap_ne ;x changed -1652 : d0fe > bne * ;failed not equal (non zero) - > - - if rkwl_wdc_op = 0 ;NOPs not available on Rockwell & WDC 65C02 - nop_test $07,1 - nop_test $17,1 - nop_test $27,1 - nop_test $37,1 - nop_test $47,1 - nop_test $57,1 - nop_test $67,1 - nop_test $77,1 - nop_test $87,1 - nop_test $97,1 - nop_test $a7,1 - nop_test $b7,1 - nop_test $c7,1 - nop_test $d7,1 - nop_test $e7,1 - nop_test $f7,1 - nop_test $0f,1 - nop_test $1f,1 - nop_test $2f,1 - nop_test $3f,1 - nop_test $4f,1 - nop_test $5f,1 - nop_test $6f,1 - nop_test $7f,1 - nop_test $8f,1 - nop_test $9f,1 - nop_test $af,1 - nop_test $bf,1 - nop_test $cf,1 - nop_test $df,1 - nop_test $ef,1 - nop_test $ff,1 - endif - if wdc_op = 0 ;NOPs not available on WDC 65C02 (WAI, STP) - nop_test $cb,1 - nop_test $db,1 - endif - next_test -1654 : ad0202 > lda test_case ;previous test -1657 : c908 > cmp #test_num - > trap_ne ;test is out of sequence -1659 : d0fe > bne * ;failed not equal (non zero) - > -0009 = >test_num = test_num + 1 -165b : a909 > lda #test_num ;*** next tests' number -165d : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - endif - - ; jump indirect (test page cross bug is fixed) -1660 : a203 ldx #3 ;prepare table -1662 : bd8b26 ji1 lda ji_adr,x -1665 : 9dfd02 sta ji_tab,x -1668 : ca dex -1669 : 10f7 bpl ji1 -166b : a928 lda #hi(ji_px) ;high address if page cross bug -166d : 8d0002 sta pg_x - set_stat 0 - > load_flag 0 -1670 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1672 : 48 > pha ;use stack to load status -1673 : 28 > plp - -1674 : a949 lda #'I' -1676 : a24e ldx #'N' -1678 : a044 ldy #'D' ;N=0, V=0, Z=0, C=0 -167a : 6cfd02 jmp (ji_tab) -167d : ea nop - trap_ne ;runover protection -167e : d0fe > bne * ;failed not equal (non zero) - - -1680 : 88 dey -1681 : 88 dey -1682 : 08 ji_ret php ;either SP or Y count will fail, if we do not hit -1683 : 88 dey -1684 : 88 dey -1685 : 88 dey -1686 : 28 plp - trap_eq ;returned flags OK? -1687 : f0fe > beq * ;failed equal (zero) - - trap_pl -1689 : 10fe > bpl * ;failed plus (bit 7 clear) - - trap_cc -168b : 90fe > bcc * ;failed carry clear - - trap_vc -168d : 50fe > bvc * ;failed overflow clear - -168f : c9e3 cmp #('I'^$aa) ;returned registers OK? - trap_ne -1691 : d0fe > bne * ;failed not equal (non zero) - -1693 : e04f cpx #('N'+1) - trap_ne -1695 : d0fe > bne * ;failed not equal (non zero) - -1697 : c03e cpy #('D'-6) - trap_ne -1699 : d0fe > bne * ;failed not equal (non zero) - -169b : ba tsx ;SP check -169c : e0ff cpx #$ff - trap_ne -169e : d0fe > bne * ;failed not equal (non zero) - - next_test -16a0 : ad0202 > lda test_case ;previous test -16a3 : c909 > cmp #test_num - > trap_ne ;test is out of sequence -16a5 : d0fe > bne * ;failed not equal (non zero) - > -000a = >test_num = test_num + 1 -16a7 : a90a > lda #test_num ;*** next tests' number -16a9 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; jump indexed indirect -16ac : a20b ldx #11 ;prepare table -16ae : bdc726 jxi1 lda jxi_adr,x -16b1 : 9df902 sta jxi_tab,x -16b4 : ca dex -16b5 : 10f7 bpl jxi1 -16b7 : a927 lda #hi(jxi_px) ;high address if page cross bug -16b9 : 8d0002 sta pg_x - set_stat 0 - > load_flag 0 -16bc : a900 > lda #0 ;allow test to change I-flag (no mask) - > -16be : 48 > pha ;use stack to load status -16bf : 28 > plp - -16c0 : a958 lda #'X' -16c2 : a204 ldx #4 -16c4 : a049 ldy #'I' ;N=0, V=0, Z=0, C=0 -16c6 : 7cf902 jmp (jxi_tab,x) -16c9 : ea nop - trap_ne ;runover protection -16ca : d0fe > bne * ;failed not equal (non zero) - - -16cc : 88 dey -16cd : 88 dey -16ce : 08 jxi_ret php ;either SP or Y count will fail, if we do not hit -16cf : 88 dey -16d0 : 88 dey -16d1 : 88 dey -16d2 : 28 plp - trap_eq ;returned flags OK? -16d3 : f0fe > beq * ;failed equal (zero) - - trap_pl -16d5 : 10fe > bpl * ;failed plus (bit 7 clear) - - trap_cc -16d7 : 90fe > bcc * ;failed carry clear - - trap_vc -16d9 : 50fe > bvc * ;failed overflow clear - -16db : c9f2 cmp #('X'^$aa) ;returned registers OK? - trap_ne -16dd : d0fe > bne * ;failed not equal (non zero) - -16df : e006 cpx #6 - trap_ne -16e1 : d0fe > bne * ;failed not equal (non zero) - -16e3 : c043 cpy #('I'-6) - trap_ne -16e5 : d0fe > bne * ;failed not equal (non zero) - -16e7 : ba tsx ;SP check -16e8 : e0ff cpx #$ff - trap_ne -16ea : d0fe > bne * ;failed not equal (non zero) - - -16ec : a908 lda #lo(jxp_ok) ;test with index causing a page cross -16ee : 8d0003 sta jxp_tab -16f1 : a917 lda #hi(jxp_ok) -16f3 : 8d0103 sta jxp_tab+1 -16f6 : a905 lda #lo(jxp_px) -16f8 : 8d0002 sta pg_x -16fb : a917 lda #hi(jxp_px) -16fd : 8d0102 sta pg_x+1 -1700 : a2ff ldx #$ff -1702 : 7c0102 jmp (jxp_tab-$ff,x) - -1705 : jxp_px - trap ;page cross by index to wrong page -1705 : 4c0517 > jmp * ;failed anyway - - -1708 : jxp_ok - next_test -1708 : ad0202 > lda test_case ;previous test -170b : c90a > cmp #test_num - > trap_ne ;test is out of sequence -170d : d0fe > bne * ;failed not equal (non zero) - > -000b = >test_num = test_num + 1 -170f : a90b > lda #test_num ;*** next tests' number -1711 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - if ROM_vectors = 1 - ; test BRK clears decimal mode - load_flag 0 ;with interrupts enabled if allowed! -1714 : a900 > lda #0 ;allow test to change I-flag (no mask) - -1716 : 48 pha -1717 : a942 lda #'B' -1719 : a252 ldx #'R' -171b : a04b ldy #'K' -171d : 28 plp ;N=0, V=0, Z=0, C=0 -171e : 00 brk -171f : 88 dey ;should not be executed -1720 : brk_ret0 ;address of break return -1720 : 08 php ;either SP or Y count will fail, if we do not hit -1721 : 88 dey -1722 : 88 dey -1723 : 88 dey -1724 : c9e8 cmp #'B'^$aa ;returned registers OK? - ;the IRQ vector was never executed if A & X stay unmodified - trap_ne -1726 : d0fe > bne * ;failed not equal (non zero) - -1728 : e053 cpx #'R'+1 - trap_ne -172a : d0fe > bne * ;failed not equal (non zero) - -172c : c045 cpy #'K'-6 - trap_ne -172e : d0fe > bne * ;failed not equal (non zero) - -1730 : 68 pla ;returned flags OK (unchanged)? - cmp_flag 0 -1731 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - - trap_ne -1733 : d0fe > bne * ;failed not equal (non zero) - -1735 : ba tsx ;sp? -1736 : e0ff cpx #$ff - trap_ne -1738 : d0fe > bne * ;failed not equal (non zero) - - ;pass 2 - load_flag $ff ;with interrupts disabled if allowed! -173a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -173c : 48 pha -173d : a9bd lda #$ff-'B' -173f : a2ad ldx #$ff-'R' -1741 : a0b4 ldy #$ff-'K' -1743 : 28 plp ;N=1, V=1, Z=1, C=1 -1744 : 00 brk -1745 : 88 dey ;should not be executed -1746 : brk_ret1 ;address of break return -1746 : 08 php ;either SP or Y count will fail, if we do not hit -1747 : 88 dey -1748 : 88 dey -1749 : 88 dey -174a : c917 cmp #($ff-'B')^$aa ;returned registers OK? - ;the IRQ vector was never executed if A & X stay unmodified - trap_ne -174c : d0fe > bne * ;failed not equal (non zero) - -174e : e0ae cpx #$ff-'R'+1 - trap_ne -1750 : d0fe > bne * ;failed not equal (non zero) - -1752 : c0ae cpy #$ff-'K'-6 - trap_ne -1754 : d0fe > bne * ;failed not equal (non zero) - -1756 : 68 pla ;returned flags OK (unchanged)? - cmp_flag $ff -1757 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - - trap_ne -1759 : d0fe > bne * ;failed not equal (non zero) - -175b : ba tsx ;sp? -175c : e0ff cpx #$ff - trap_ne -175e : d0fe > bne * ;failed not equal (non zero) - - next_test -1760 : ad0202 > lda test_case ;previous test -1763 : c90b > cmp #test_num - > trap_ne ;test is out of sequence -1765 : d0fe > bne * ;failed not equal (non zero) - > -000c = >test_num = test_num + 1 -1767 : a90c > lda #test_num ;*** next tests' number -1769 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - endif - - ; testing accumulator increment/decrement INC A & DEC A -176c : a2ac ldx #$ac ;protect x & y -176e : a0dc ldy #$dc - set_a $fe,$ff - > load_flag $ff -1770 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1772 : 48 > pha ;use stack to load status -1773 : a9fe > lda #$fe ;precharge accu -1775 : 28 > plp - -1776 : 1a inc a ;ff - tst_as $ff,$ff-zero -1777 : 48 > pha -1778 : 08 > php ;save flags -1779 : c9ff > cmp #$ff ;test result - > trap_ne -177b : d0fe > bne * ;failed not equal (non zero) - > -177d : 68 > pla ;load status -177e : 48 > pha - > cmp_flag $ff-zero -177f : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1781 : d0fe > bne * ;failed not equal (non zero) - > -1783 : 28 > plp ;restore status -1784 : 68 > pla - -1785 : 1a inc a ;00 - tst_as 0,$ff-minus -1786 : 48 > pha -1787 : 08 > php ;save flags -1788 : c900 > cmp #0 ;test result - > trap_ne -178a : d0fe > bne * ;failed not equal (non zero) - > -178c : 68 > pla ;load status -178d : 48 > pha - > cmp_flag $ff-minus -178e : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1790 : d0fe > bne * ;failed not equal (non zero) - > -1792 : 28 > plp ;restore status -1793 : 68 > pla - -1794 : 1a inc a ;01 - tst_as 1,$ff-minus-zero -1795 : 48 > pha -1796 : 08 > php ;save flags -1797 : c901 > cmp #1 ;test result - > trap_ne -1799 : d0fe > bne * ;failed not equal (non zero) - > -179b : 68 > pla ;load status -179c : 48 > pha - > cmp_flag $ff-minus-zero -179d : c97d > cmp #($ff-minus-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -179f : d0fe > bne * ;failed not equal (non zero) - > -17a1 : 28 > plp ;restore status -17a2 : 68 > pla - -17a3 : 3a dec a ;00 - tst_as 0,$ff-minus -17a4 : 48 > pha -17a5 : 08 > php ;save flags -17a6 : c900 > cmp #0 ;test result - > trap_ne -17a8 : d0fe > bne * ;failed not equal (non zero) - > -17aa : 68 > pla ;load status -17ab : 48 > pha - > cmp_flag $ff-minus -17ac : c97f > cmp #($ff-minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -17ae : d0fe > bne * ;failed not equal (non zero) - > -17b0 : 28 > plp ;restore status -17b1 : 68 > pla - -17b2 : 3a dec a ;ff - tst_as $ff,$ff-zero -17b3 : 48 > pha -17b4 : 08 > php ;save flags -17b5 : c9ff > cmp #$ff ;test result - > trap_ne -17b7 : d0fe > bne * ;failed not equal (non zero) - > -17b9 : 68 > pla ;load status -17ba : 48 > pha - > cmp_flag $ff-zero -17bb : c9fd > cmp #($ff-zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -17bd : d0fe > bne * ;failed not equal (non zero) - > -17bf : 28 > plp ;restore status -17c0 : 68 > pla - -17c1 : 3a dec a ;fe - set_a $fe,0 - > load_flag 0 -17c2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -17c4 : 48 > pha ;use stack to load status -17c5 : a9fe > lda #$fe ;precharge accu -17c7 : 28 > plp - -17c8 : 1a inc a ;ff - tst_as $ff,minus -17c9 : 48 > pha -17ca : 08 > php ;save flags -17cb : c9ff > cmp #$ff ;test result - > trap_ne -17cd : d0fe > bne * ;failed not equal (non zero) - > -17cf : 68 > pla ;load status -17d0 : 48 > pha - > cmp_flag minus -17d1 : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -17d3 : d0fe > bne * ;failed not equal (non zero) - > -17d5 : 28 > plp ;restore status -17d6 : 68 > pla - -17d7 : 1a inc a ;00 - tst_as 0,zero -17d8 : 48 > pha -17d9 : 08 > php ;save flags -17da : c900 > cmp #0 ;test result - > trap_ne -17dc : d0fe > bne * ;failed not equal (non zero) - > -17de : 68 > pla ;load status -17df : 48 > pha - > cmp_flag zero -17e0 : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -17e2 : d0fe > bne * ;failed not equal (non zero) - > -17e4 : 28 > plp ;restore status -17e5 : 68 > pla - -17e6 : 1a inc a ;01 - tst_as 1,0 -17e7 : 48 > pha -17e8 : 08 > php ;save flags -17e9 : c901 > cmp #1 ;test result - > trap_ne -17eb : d0fe > bne * ;failed not equal (non zero) - > -17ed : 68 > pla ;load status -17ee : 48 > pha - > cmp_flag 0 -17ef : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -17f1 : d0fe > bne * ;failed not equal (non zero) - > -17f3 : 28 > plp ;restore status -17f4 : 68 > pla - -17f5 : 3a dec a ;00 - tst_as 0,zero -17f6 : 48 > pha -17f7 : 08 > php ;save flags -17f8 : c900 > cmp #0 ;test result - > trap_ne -17fa : d0fe > bne * ;failed not equal (non zero) - > -17fc : 68 > pla ;load status -17fd : 48 > pha - > cmp_flag zero -17fe : c932 > cmp #(zero|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1800 : d0fe > bne * ;failed not equal (non zero) - > -1802 : 28 > plp ;restore status -1803 : 68 > pla - -1804 : 3a dec a ;ff - tst_as $ff,minus -1805 : 48 > pha -1806 : 08 > php ;save flags -1807 : c9ff > cmp #$ff ;test result - > trap_ne -1809 : d0fe > bne * ;failed not equal (non zero) - > -180b : 68 > pla ;load status -180c : 48 > pha - > cmp_flag minus -180d : c9b0 > cmp #(minus|fao)&m8 ;expected flags + always on bits - > - > trap_ne -180f : d0fe > bne * ;failed not equal (non zero) - > -1811 : 28 > plp ;restore status -1812 : 68 > pla - -1813 : e0ac cpx #$ac - trap_ne ;x altered during test -1815 : d0fe > bne * ;failed not equal (non zero) - -1817 : c0dc cpy #$dc - trap_ne ;y altered during test -1819 : d0fe > bne * ;failed not equal (non zero) - -181b : ba tsx -181c : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -181e : d0fe > bne * ;failed not equal (non zero) - - next_test -1820 : ad0202 > lda test_case ;previous test -1823 : c90c > cmp #test_num - > trap_ne ;test is out of sequence -1825 : d0fe > bne * ;failed not equal (non zero) - > -000d = >test_num = test_num + 1 -1827 : a90d > lda #test_num ;*** next tests' number -1829 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing load / store accumulator LDA / STA (zp) -182c : a299 ldx #$99 ;protect x & y -182e : a066 ldy #$66 - set_stat 0 - > load_flag 0 -1830 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1832 : 48 > pha ;use stack to load status -1833 : 28 > plp - -1834 : b224 lda (ind1) -1836 : 08 php ;test stores do not alter flags -1837 : 49c3 eor #$c3 -1839 : 28 plp -183a : 9230 sta (indt) -183c : 08 php ;flags after load/store sequence -183d : 49c3 eor #$c3 -183f : c9c3 cmp #$c3 ;test result - trap_ne -1841 : d0fe > bne * ;failed not equal (non zero) - -1843 : 68 pla ;load status - eor_flag 0 -1844 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1846 : cd1502 cmp fLDx ;test flags - trap_ne -1849 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -184b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -184d : 48 > pha ;use stack to load status -184e : 28 > plp - -184f : b226 lda (ind1+2) -1851 : 08 php ;test stores do not alter flags -1852 : 49c3 eor #$c3 -1854 : 28 plp -1855 : 9232 sta (indt+2) -1857 : 08 php ;flags after load/store sequence -1858 : 49c3 eor #$c3 -185a : c982 cmp #$82 ;test result - trap_ne -185c : d0fe > bne * ;failed not equal (non zero) - -185e : 68 pla ;load status - eor_flag 0 -185f : 4930 > eor #0|fao ;invert expected flags + always on bits - -1861 : cd1602 cmp fLDx+1 ;test flags - trap_ne -1864 : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1866 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1868 : 48 > pha ;use stack to load status -1869 : 28 > plp - -186a : b228 lda (ind1+4) -186c : 08 php ;test stores do not alter flags -186d : 49c3 eor #$c3 -186f : 28 plp -1870 : 9234 sta (indt+4) -1872 : 08 php ;flags after load/store sequence -1873 : 49c3 eor #$c3 -1875 : c941 cmp #$41 ;test result - trap_ne -1877 : d0fe > bne * ;failed not equal (non zero) - -1879 : 68 pla ;load status - eor_flag 0 -187a : 4930 > eor #0|fao ;invert expected flags + always on bits - -187c : cd1702 cmp fLDx+2 ;test flags - trap_ne -187f : d0fe > bne * ;failed not equal (non zero) - - set_stat 0 - > load_flag 0 -1881 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1883 : 48 > pha ;use stack to load status -1884 : 28 > plp - -1885 : b22a lda (ind1+6) -1887 : 08 php ;test stores do not alter flags -1888 : 49c3 eor #$c3 -188a : 28 plp -188b : 9236 sta (indt+6) -188d : 08 php ;flags after load/store sequence -188e : 49c3 eor #$c3 -1890 : c900 cmp #0 ;test result - trap_ne -1892 : d0fe > bne * ;failed not equal (non zero) - -1894 : 68 pla ;load status - eor_flag 0 -1895 : 4930 > eor #0|fao ;invert expected flags + always on bits - -1897 : cd1802 cmp fLDx+3 ;test flags - trap_ne -189a : d0fe > bne * ;failed not equal (non zero) - -189c : e099 cpx #$99 - trap_ne ;x altered during test -189e : d0fe > bne * ;failed not equal (non zero) - -18a0 : c066 cpy #$66 - trap_ne ;y altered during test -18a2 : d0fe > bne * ;failed not equal (non zero) - - -18a4 : a003 ldy #3 ;testing store result -18a6 : a200 ldx #0 -18a8 : b90502 tstai1 lda abst,y -18ab : 49c3 eor #$c3 -18ad : d91002 cmp abs1,y - trap_ne ;store to indirect data -18b0 : d0fe > bne * ;failed not equal (non zero) - -18b2 : 8a txa -18b3 : 990502 sta abst,y ;clear -18b6 : 88 dey -18b7 : 10ef bpl tstai1 - -18b9 : a299 ldx #$99 ;protect x & y -18bb : a066 ldy #$66 - set_stat $ff - > load_flag $ff -18bd : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -18bf : 48 > pha ;use stack to load status -18c0 : 28 > plp - -18c1 : b224 lda (ind1) -18c3 : 08 php ;test stores do not alter flags -18c4 : 49c3 eor #$c3 -18c6 : 28 plp -18c7 : 9230 sta (indt) -18c9 : 08 php ;flags after load/store sequence -18ca : 49c3 eor #$c3 -18cc : c9c3 cmp #$c3 ;test result - trap_ne -18ce : d0fe > bne * ;failed not equal (non zero) - -18d0 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -18d1 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -18d3 : cd1502 cmp fLDx ;test flags - trap_ne -18d6 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -18d8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -18da : 48 > pha ;use stack to load status -18db : 28 > plp - -18dc : b226 lda (ind1+2) -18de : 08 php ;test stores do not alter flags -18df : 49c3 eor #$c3 -18e1 : 28 plp -18e2 : 9232 sta (indt+2) -18e4 : 08 php ;flags after load/store sequence -18e5 : 49c3 eor #$c3 -18e7 : c982 cmp #$82 ;test result - trap_ne -18e9 : d0fe > bne * ;failed not equal (non zero) - -18eb : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -18ec : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -18ee : cd1602 cmp fLDx+1 ;test flags - trap_ne -18f1 : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -18f3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -18f5 : 48 > pha ;use stack to load status -18f6 : 28 > plp - -18f7 : b228 lda (ind1+4) -18f9 : 08 php ;test stores do not alter flags -18fa : 49c3 eor #$c3 -18fc : 28 plp -18fd : 9234 sta (indt+4) -18ff : 08 php ;flags after load/store sequence -1900 : 49c3 eor #$c3 -1902 : c941 cmp #$41 ;test result - trap_ne -1904 : d0fe > bne * ;failed not equal (non zero) - -1906 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1907 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1909 : cd1702 cmp fLDx+2 ;test flags - trap_ne -190c : d0fe > bne * ;failed not equal (non zero) - - set_stat $ff - > load_flag $ff -190e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1910 : 48 > pha ;use stack to load status -1911 : 28 > plp - -1912 : b22a lda (ind1+6) -1914 : 08 php ;test stores do not alter flags -1915 : 49c3 eor #$c3 -1917 : 28 plp -1918 : 9236 sta (indt+6) -191a : 08 php ;flags after load/store sequence -191b : 49c3 eor #$c3 -191d : c900 cmp #0 ;test result - trap_ne -191f : d0fe > bne * ;failed not equal (non zero) - -1921 : 68 pla ;load status - eor_flag lo~fnz ;mask bits not altered -1922 : 497d > eor #lo~fnz |fao ;invert expected flags + always on bits - -1924 : cd1802 cmp fLDx+3 ;test flags - trap_ne -1927 : d0fe > bne * ;failed not equal (non zero) - -1929 : e099 cpx #$99 - trap_ne ;x altered during test -192b : d0fe > bne * ;failed not equal (non zero) - -192d : c066 cpy #$66 - trap_ne ;y altered during test -192f : d0fe > bne * ;failed not equal (non zero) - - -1931 : a003 ldy #3 ;testing store result -1933 : a200 ldx #0 -1935 : b90502 tstai2 lda abst,y -1938 : 49c3 eor #$c3 -193a : d91002 cmp abs1,y - trap_ne ;store to indirect data -193d : d0fe > bne * ;failed not equal (non zero) - -193f : 8a txa -1940 : 990502 sta abst,y ;clear -1943 : 88 dey -1944 : 10ef bpl tstai2 -1946 : ba tsx -1947 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -1949 : d0fe > bne * ;failed not equal (non zero) - - next_test -194b : ad0202 > lda test_case ;previous test -194e : c90d > cmp #test_num - > trap_ne ;test is out of sequence -1950 : d0fe > bne * ;failed not equal (non zero) - > -000e = >test_num = test_num + 1 -1952 : a90e > lda #test_num ;*** next tests' number -1954 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing STZ - zp / abs / zp,x / abs,x -1957 : a07b ldy #123 ;protect y -1959 : a204 ldx #4 ;precharge test area -195b : a907 lda #7 -195d : 950c tstz1 sta zpt,x -195f : 0a asl a -1960 : ca dex -1961 : 10fa bpl tstz1 -1963 : a204 ldx #4 - set_a $55,$ff - > load_flag $ff -1965 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1967 : 48 > pha ;use stack to load status -1968 : a955 > lda #$55 ;precharge accu -196a : 28 > plp - -196b : 640c stz zpt -196d : 640d stz zpt+1 -196f : 640e stz zpt+2 -1971 : 640f stz zpt+3 -1973 : 6410 stz zpt+4 - tst_a $55,$ff -1975 : 08 > php ;save flags -1976 : c955 > cmp #$55 ;test result - > trap_ne -1978 : d0fe > bne * ;failed not equal (non zero) - > -197a : 68 > pla ;load status -197b : 48 > pha - > cmp_flag $ff -197c : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -197e : d0fe > bne * ;failed not equal (non zero) - > -1980 : 28 > plp ;restore status - -1981 : b50c tstz2 lda zpt,x ;verify zeros stored - trap_ne ;non zero after STZ zp -1983 : d0fe > bne * ;failed not equal (non zero) - -1985 : ca dex -1986 : 10f9 bpl tstz2 -1988 : a204 ldx #4 ;precharge test area -198a : a907 lda #7 -198c : 950c tstz3 sta zpt,x -198e : 0a asl a -198f : ca dex -1990 : 10fa bpl tstz3 -1992 : a204 ldx #4 - set_a $aa,0 - > load_flag 0 -1994 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1996 : 48 > pha ;use stack to load status -1997 : a9aa > lda #$aa ;precharge accu -1999 : 28 > plp - -199a : 640c stz zpt -199c : 640d stz zpt+1 -199e : 640e stz zpt+2 -19a0 : 640f stz zpt+3 -19a2 : 6410 stz zpt+4 - tst_a $aa,0 -19a4 : 08 > php ;save flags -19a5 : c9aa > cmp #$aa ;test result - > trap_ne -19a7 : d0fe > bne * ;failed not equal (non zero) - > -19a9 : 68 > pla ;load status -19aa : 48 > pha - > cmp_flag 0 -19ab : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -19ad : d0fe > bne * ;failed not equal (non zero) - > -19af : 28 > plp ;restore status - -19b0 : b50c tstz4 lda zpt,x ;verify zeros stored - trap_ne ;non zero after STZ zp -19b2 : d0fe > bne * ;failed not equal (non zero) - -19b4 : ca dex -19b5 : 10f9 bpl tstz4 - -19b7 : a204 ldx #4 ;precharge test area -19b9 : a907 lda #7 -19bb : 9d0502 tstz5 sta abst,x -19be : 0a asl a -19bf : ca dex -19c0 : 10f9 bpl tstz5 -19c2 : a204 ldx #4 - set_a $55,$ff - > load_flag $ff -19c4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -19c6 : 48 > pha ;use stack to load status -19c7 : a955 > lda #$55 ;precharge accu -19c9 : 28 > plp - -19ca : 9c0502 stz abst -19cd : 9c0602 stz abst+1 -19d0 : 9c0702 stz abst+2 -19d3 : 9c0802 stz abst+3 -19d6 : 9c0902 stz abst+4 - tst_a $55,$ff -19d9 : 08 > php ;save flags -19da : c955 > cmp #$55 ;test result - > trap_ne -19dc : d0fe > bne * ;failed not equal (non zero) - > -19de : 68 > pla ;load status -19df : 48 > pha - > cmp_flag $ff -19e0 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -19e2 : d0fe > bne * ;failed not equal (non zero) - > -19e4 : 28 > plp ;restore status - -19e5 : bd0502 tstz6 lda abst,x ;verify zeros stored - trap_ne ;non zero after STZ abs -19e8 : d0fe > bne * ;failed not equal (non zero) - -19ea : ca dex -19eb : 10f8 bpl tstz6 -19ed : a204 ldx #4 ;precharge test area -19ef : a907 lda #7 -19f1 : 9d0502 tstz7 sta abst,x -19f4 : 0a asl a -19f5 : ca dex -19f6 : 10f9 bpl tstz7 -19f8 : a204 ldx #4 - set_a $aa,0 - > load_flag 0 -19fa : a900 > lda #0 ;allow test to change I-flag (no mask) - > -19fc : 48 > pha ;use stack to load status -19fd : a9aa > lda #$aa ;precharge accu -19ff : 28 > plp - -1a00 : 9c0502 stz abst -1a03 : 9c0602 stz abst+1 -1a06 : 9c0702 stz abst+2 -1a09 : 9c0802 stz abst+3 -1a0c : 9c0902 stz abst+4 - tst_a $aa,0 -1a0f : 08 > php ;save flags -1a10 : c9aa > cmp #$aa ;test result - > trap_ne -1a12 : d0fe > bne * ;failed not equal (non zero) - > -1a14 : 68 > pla ;load status -1a15 : 48 > pha - > cmp_flag 0 -1a16 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1a18 : d0fe > bne * ;failed not equal (non zero) - > -1a1a : 28 > plp ;restore status - -1a1b : bd0502 tstz8 lda abst,x ;verify zeros stored - trap_ne ;non zero after STZ abs -1a1e : d0fe > bne * ;failed not equal (non zero) - -1a20 : ca dex -1a21 : 10f8 bpl tstz8 - -1a23 : a204 ldx #4 ;precharge test area -1a25 : a907 lda #7 -1a27 : 950c tstz11 sta zpt,x -1a29 : 0a asl a -1a2a : ca dex -1a2b : 10fa bpl tstz11 -1a2d : a204 ldx #4 -1a2f : tstz15 - set_a $55,$ff - > load_flag $ff -1a2f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1a31 : 48 > pha ;use stack to load status -1a32 : a955 > lda #$55 ;precharge accu -1a34 : 28 > plp - -1a35 : 740c stz zpt,x - tst_a $55,$ff -1a37 : 08 > php ;save flags -1a38 : c955 > cmp #$55 ;test result - > trap_ne -1a3a : d0fe > bne * ;failed not equal (non zero) - > -1a3c : 68 > pla ;load status -1a3d : 48 > pha - > cmp_flag $ff -1a3e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1a40 : d0fe > bne * ;failed not equal (non zero) - > -1a42 : 28 > plp ;restore status - -1a43 : ca dex -1a44 : 10e9 bpl tstz15 -1a46 : a204 ldx #4 -1a48 : b50c tstz12 lda zpt,x ;verify zeros stored - trap_ne ;non zero after STZ zp -1a4a : d0fe > bne * ;failed not equal (non zero) - -1a4c : ca dex -1a4d : 10f9 bpl tstz12 -1a4f : a204 ldx #4 ;precharge test area -1a51 : a907 lda #7 -1a53 : 950c tstz13 sta zpt,x -1a55 : 0a asl a -1a56 : ca dex -1a57 : 10fa bpl tstz13 -1a59 : a204 ldx #4 -1a5b : tstz16 - set_a $aa,0 - > load_flag 0 -1a5b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1a5d : 48 > pha ;use stack to load status -1a5e : a9aa > lda #$aa ;precharge accu -1a60 : 28 > plp - -1a61 : 740c stz zpt,x - tst_a $aa,0 -1a63 : 08 > php ;save flags -1a64 : c9aa > cmp #$aa ;test result - > trap_ne -1a66 : d0fe > bne * ;failed not equal (non zero) - > -1a68 : 68 > pla ;load status -1a69 : 48 > pha - > cmp_flag 0 -1a6a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1a6c : d0fe > bne * ;failed not equal (non zero) - > -1a6e : 28 > plp ;restore status - -1a6f : ca dex -1a70 : 10e9 bpl tstz16 -1a72 : a204 ldx #4 -1a74 : b50c tstz14 lda zpt,x ;verify zeros stored - trap_ne ;non zero after STZ zp -1a76 : d0fe > bne * ;failed not equal (non zero) - -1a78 : ca dex -1a79 : 10f9 bpl tstz14 - -1a7b : a204 ldx #4 ;precharge test area -1a7d : a907 lda #7 -1a7f : 9d0502 tstz21 sta abst,x -1a82 : 0a asl a -1a83 : ca dex -1a84 : 10f9 bpl tstz21 -1a86 : a204 ldx #4 -1a88 : tstz25 - set_a $55,$ff - > load_flag $ff -1a88 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1a8a : 48 > pha ;use stack to load status -1a8b : a955 > lda #$55 ;precharge accu -1a8d : 28 > plp - -1a8e : 9e0502 stz abst,x - tst_a $55,$ff -1a91 : 08 > php ;save flags -1a92 : c955 > cmp #$55 ;test result - > trap_ne -1a94 : d0fe > bne * ;failed not equal (non zero) - > -1a96 : 68 > pla ;load status -1a97 : 48 > pha - > cmp_flag $ff -1a98 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1a9a : d0fe > bne * ;failed not equal (non zero) - > -1a9c : 28 > plp ;restore status - -1a9d : ca dex -1a9e : 10e8 bpl tstz25 -1aa0 : a204 ldx #4 -1aa2 : bd0502 tstz22 lda abst,x ;verify zeros stored - trap_ne ;non zero after STZ zp -1aa5 : d0fe > bne * ;failed not equal (non zero) - -1aa7 : ca dex -1aa8 : 10f8 bpl tstz22 -1aaa : a204 ldx #4 ;precharge test area -1aac : a907 lda #7 -1aae : 9d0502 tstz23 sta abst,x -1ab1 : 0a asl a -1ab2 : ca dex -1ab3 : 10f9 bpl tstz23 -1ab5 : a204 ldx #4 -1ab7 : tstz26 - set_a $aa,0 - > load_flag 0 -1ab7 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1ab9 : 48 > pha ;use stack to load status -1aba : a9aa > lda #$aa ;precharge accu -1abc : 28 > plp - -1abd : 9e0502 stz abst,x - tst_a $aa,0 -1ac0 : 08 > php ;save flags -1ac1 : c9aa > cmp #$aa ;test result - > trap_ne -1ac3 : d0fe > bne * ;failed not equal (non zero) - > -1ac5 : 68 > pla ;load status -1ac6 : 48 > pha - > cmp_flag 0 -1ac7 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ac9 : d0fe > bne * ;failed not equal (non zero) - > -1acb : 28 > plp ;restore status - -1acc : ca dex -1acd : 10e8 bpl tstz26 -1acf : a204 ldx #4 -1ad1 : bd0502 tstz24 lda abst,x ;verify zeros stored - trap_ne ;non zero after STZ zp -1ad4 : d0fe > bne * ;failed not equal (non zero) - -1ad6 : ca dex -1ad7 : 10f8 bpl tstz24 - -1ad9 : c07b cpy #123 - trap_ne ;y altered during test -1adb : d0fe > bne * ;failed not equal (non zero) - -1add : ba tsx -1ade : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -1ae0 : d0fe > bne * ;failed not equal (non zero) - - next_test -1ae2 : ad0202 > lda test_case ;previous test -1ae5 : c90e > cmp #test_num - > trap_ne ;test is out of sequence -1ae7 : d0fe > bne * ;failed not equal (non zero) - > -000f = >test_num = test_num + 1 -1ae9 : a90f > lda #test_num ;*** next tests' number -1aeb : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing BIT - zp,x / abs,x / # -1aee : a042 ldy #$42 -1af0 : a203 ldx #3 - set_a $ff,0 - > load_flag 0 -1af2 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1af4 : 48 > pha ;use stack to load status -1af5 : a9ff > lda #$ff ;precharge accu -1af7 : 28 > plp - -1af8 : 3413 bit zp1,x ;00 - should set Z / clear NV - tst_a $ff,fz -1afa : 08 > php ;save flags -1afb : c9ff > cmp #$ff ;test result - > trap_ne -1afd : d0fe > bne * ;failed not equal (non zero) - > -1aff : 68 > pla ;load status -1b00 : 48 > pha - > cmp_flag fz -1b01 : c932 > cmp #(fz |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b03 : d0fe > bne * ;failed not equal (non zero) - > -1b05 : 28 > plp ;restore status - -1b06 : ca dex - set_a 1,0 - > load_flag 0 -1b07 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b09 : 48 > pha ;use stack to load status -1b0a : a901 > lda #1 ;precharge accu -1b0c : 28 > plp - -1b0d : 3413 bit zp1,x ;41 - should set V (M6) / clear NZ - tst_a 1,fv -1b0f : 08 > php ;save flags -1b10 : c901 > cmp #1 ;test result - > trap_ne -1b12 : d0fe > bne * ;failed not equal (non zero) - > -1b14 : 68 > pla ;load status -1b15 : 48 > pha - > cmp_flag fv -1b16 : c970 > cmp #(fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b18 : d0fe > bne * ;failed not equal (non zero) - > -1b1a : 28 > plp ;restore status - -1b1b : ca dex - set_a 1,0 - > load_flag 0 -1b1c : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b1e : 48 > pha ;use stack to load status -1b1f : a901 > lda #1 ;precharge accu -1b21 : 28 > plp - -1b22 : 3413 bit zp1,x ;82 - should set N (M7) & Z / clear V - tst_a 1,fnz -1b24 : 08 > php ;save flags -1b25 : c901 > cmp #1 ;test result - > trap_ne -1b27 : d0fe > bne * ;failed not equal (non zero) - > -1b29 : 68 > pla ;load status -1b2a : 48 > pha - > cmp_flag fnz -1b2b : c9b2 > cmp #(fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b2d : d0fe > bne * ;failed not equal (non zero) - > -1b2f : 28 > plp ;restore status - -1b30 : ca dex - set_a 1,0 - > load_flag 0 -1b31 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b33 : 48 > pha ;use stack to load status -1b34 : a901 > lda #1 ;precharge accu -1b36 : 28 > plp - -1b37 : 3413 bit zp1,x ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,fnv -1b39 : 08 > php ;save flags -1b3a : c901 > cmp #1 ;test result - > trap_ne -1b3c : d0fe > bne * ;failed not equal (non zero) - > -1b3e : 68 > pla ;load status -1b3f : 48 > pha - > cmp_flag fnv -1b40 : c9f0 > cmp #(fnv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b42 : d0fe > bne * ;failed not equal (non zero) - > -1b44 : 28 > plp ;restore status - - - set_a 1,$ff - > load_flag $ff -1b45 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1b47 : 48 > pha ;use stack to load status -1b48 : a901 > lda #1 ;precharge accu -1b4a : 28 > plp - -1b4b : 3413 bit zp1,x ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,~fz -1b4d : 08 > php ;save flags -1b4e : c901 > cmp #1 ;test result - > trap_ne -1b50 : d0fe > bne * ;failed not equal (non zero) - > -1b52 : 68 > pla ;load status -1b53 : 48 > pha - > cmp_flag ~fz -1b54 : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b56 : d0fe > bne * ;failed not equal (non zero) - > -1b58 : 28 > plp ;restore status - -1b59 : e8 inx - set_a 1,$ff - > load_flag $ff -1b5a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1b5c : 48 > pha ;use stack to load status -1b5d : a901 > lda #1 ;precharge accu -1b5f : 28 > plp - -1b60 : 3413 bit zp1,x ;82 - should set N (M7) & Z / clear V - tst_a 1,~fv -1b62 : 08 > php ;save flags -1b63 : c901 > cmp #1 ;test result - > trap_ne -1b65 : d0fe > bne * ;failed not equal (non zero) - > -1b67 : 68 > pla ;load status -1b68 : 48 > pha - > cmp_flag ~fv -1b69 : c9bf > cmp #(~fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b6b : d0fe > bne * ;failed not equal (non zero) - > -1b6d : 28 > plp ;restore status - -1b6e : e8 inx - set_a 1,$ff - > load_flag $ff -1b6f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1b71 : 48 > pha ;use stack to load status -1b72 : a901 > lda #1 ;precharge accu -1b74 : 28 > plp - -1b75 : 3413 bit zp1,x ;41 - should set V (M6) / clear NZ - tst_a 1,~fnz -1b77 : 08 > php ;save flags -1b78 : c901 > cmp #1 ;test result - > trap_ne -1b7a : d0fe > bne * ;failed not equal (non zero) - > -1b7c : 68 > pla ;load status -1b7d : 48 > pha - > cmp_flag ~fnz -1b7e : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b80 : d0fe > bne * ;failed not equal (non zero) - > -1b82 : 28 > plp ;restore status - -1b83 : e8 inx - set_a $ff,$ff - > load_flag $ff -1b84 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1b86 : 48 > pha ;use stack to load status -1b87 : a9ff > lda #$ff ;precharge accu -1b89 : 28 > plp - -1b8a : 3413 bit zp1,x ;00 - should set Z / clear NV - tst_a $ff,~fnv -1b8c : 08 > php ;save flags -1b8d : c9ff > cmp #$ff ;test result - > trap_ne -1b8f : d0fe > bne * ;failed not equal (non zero) - > -1b91 : 68 > pla ;load status -1b92 : 48 > pha - > cmp_flag ~fnv -1b93 : c93f > cmp #(~fnv |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1b95 : d0fe > bne * ;failed not equal (non zero) - > -1b97 : 28 > plp ;restore status - - - set_a $ff,0 - > load_flag 0 -1b98 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1b9a : 48 > pha ;use stack to load status -1b9b : a9ff > lda #$ff ;precharge accu -1b9d : 28 > plp - -1b9e : 3c1002 bit abs1,x ;00 - should set Z / clear NV - tst_a $ff,fz -1ba1 : 08 > php ;save flags -1ba2 : c9ff > cmp #$ff ;test result - > trap_ne -1ba4 : d0fe > bne * ;failed not equal (non zero) - > -1ba6 : 68 > pla ;load status -1ba7 : 48 > pha - > cmp_flag fz -1ba8 : c932 > cmp #(fz |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1baa : d0fe > bne * ;failed not equal (non zero) - > -1bac : 28 > plp ;restore status - -1bad : ca dex - set_a 1,0 - > load_flag 0 -1bae : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1bb0 : 48 > pha ;use stack to load status -1bb1 : a901 > lda #1 ;precharge accu -1bb3 : 28 > plp - -1bb4 : 3c1002 bit abs1,x ;41 - should set V (M6) / clear NZ - tst_a 1,fv -1bb7 : 08 > php ;save flags -1bb8 : c901 > cmp #1 ;test result - > trap_ne -1bba : d0fe > bne * ;failed not equal (non zero) - > -1bbc : 68 > pla ;load status -1bbd : 48 > pha - > cmp_flag fv -1bbe : c970 > cmp #(fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bc0 : d0fe > bne * ;failed not equal (non zero) - > -1bc2 : 28 > plp ;restore status - -1bc3 : ca dex - set_a 1,0 - > load_flag 0 -1bc4 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1bc6 : 48 > pha ;use stack to load status -1bc7 : a901 > lda #1 ;precharge accu -1bc9 : 28 > plp - -1bca : 3c1002 bit abs1,x ;82 - should set N (M7) & Z / clear V - tst_a 1,fnz -1bcd : 08 > php ;save flags -1bce : c901 > cmp #1 ;test result - > trap_ne -1bd0 : d0fe > bne * ;failed not equal (non zero) - > -1bd2 : 68 > pla ;load status -1bd3 : 48 > pha - > cmp_flag fnz -1bd4 : c9b2 > cmp #(fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bd6 : d0fe > bne * ;failed not equal (non zero) - > -1bd8 : 28 > plp ;restore status - -1bd9 : ca dex - set_a 1,0 - > load_flag 0 -1bda : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1bdc : 48 > pha ;use stack to load status -1bdd : a901 > lda #1 ;precharge accu -1bdf : 28 > plp - -1be0 : 3c1002 bit abs1,x ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,fnv -1be3 : 08 > php ;save flags -1be4 : c901 > cmp #1 ;test result - > trap_ne -1be6 : d0fe > bne * ;failed not equal (non zero) - > -1be8 : 68 > pla ;load status -1be9 : 48 > pha - > cmp_flag fnv -1bea : c9f0 > cmp #(fnv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1bec : d0fe > bne * ;failed not equal (non zero) - > -1bee : 28 > plp ;restore status - - - set_a 1,$ff - > load_flag $ff -1bef : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1bf1 : 48 > pha ;use stack to load status -1bf2 : a901 > lda #1 ;precharge accu -1bf4 : 28 > plp - -1bf5 : 3c1002 bit abs1,x ;c3 - should set N (M7) & V (M6) / clear Z - tst_a 1,~fz -1bf8 : 08 > php ;save flags -1bf9 : c901 > cmp #1 ;test result - > trap_ne -1bfb : d0fe > bne * ;failed not equal (non zero) - > -1bfd : 68 > pla ;load status -1bfe : 48 > pha - > cmp_flag ~fz -1bff : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c01 : d0fe > bne * ;failed not equal (non zero) - > -1c03 : 28 > plp ;restore status - -1c04 : e8 inx - set_a 1,$ff - > load_flag $ff -1c05 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c07 : 48 > pha ;use stack to load status -1c08 : a901 > lda #1 ;precharge accu -1c0a : 28 > plp - -1c0b : 3c1002 bit abs1,x ;82 - should set N (M7) & Z / clear V - tst_a 1,~fv -1c0e : 08 > php ;save flags -1c0f : c901 > cmp #1 ;test result - > trap_ne -1c11 : d0fe > bne * ;failed not equal (non zero) - > -1c13 : 68 > pla ;load status -1c14 : 48 > pha - > cmp_flag ~fv -1c15 : c9bf > cmp #(~fv|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c17 : d0fe > bne * ;failed not equal (non zero) - > -1c19 : 28 > plp ;restore status - -1c1a : e8 inx - set_a 1,$ff - > load_flag $ff -1c1b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c1d : 48 > pha ;use stack to load status -1c1e : a901 > lda #1 ;precharge accu -1c20 : 28 > plp - -1c21 : 3c1002 bit abs1,x ;41 - should set V (M6) / clear NZ - tst_a 1,~fnz -1c24 : 08 > php ;save flags -1c25 : c901 > cmp #1 ;test result - > trap_ne -1c27 : d0fe > bne * ;failed not equal (non zero) - > -1c29 : 68 > pla ;load status -1c2a : 48 > pha - > cmp_flag ~fnz -1c2b : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c2d : d0fe > bne * ;failed not equal (non zero) - > -1c2f : 28 > plp ;restore status - -1c30 : e8 inx - set_a $ff,$ff - > load_flag $ff -1c31 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c33 : 48 > pha ;use stack to load status -1c34 : a9ff > lda #$ff ;precharge accu -1c36 : 28 > plp - -1c37 : 3c1002 bit abs1,x ;00 - should set Z / clear NV - tst_a $ff,~fnv -1c3a : 08 > php ;save flags -1c3b : c9ff > cmp #$ff ;test result - > trap_ne -1c3d : d0fe > bne * ;failed not equal (non zero) - > -1c3f : 68 > pla ;load status -1c40 : 48 > pha - > cmp_flag ~fnv -1c41 : c93f > cmp #(~fnv |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c43 : d0fe > bne * ;failed not equal (non zero) - > -1c45 : 28 > plp ;restore status - - - set_a $ff,0 - > load_flag 0 -1c46 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c48 : 48 > pha ;use stack to load status -1c49 : a9ff > lda #$ff ;precharge accu -1c4b : 28 > plp - -1c4c : 8900 bit #$00 ;00 - should set Z - tst_a $ff,fz -1c4e : 08 > php ;save flags -1c4f : c9ff > cmp #$ff ;test result - > trap_ne -1c51 : d0fe > bne * ;failed not equal (non zero) - > -1c53 : 68 > pla ;load status -1c54 : 48 > pha - > cmp_flag fz -1c55 : c932 > cmp #(fz |fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c57 : d0fe > bne * ;failed not equal (non zero) - > -1c59 : 28 > plp ;restore status - -1c5a : ca dex - set_a 1,0 - > load_flag 0 -1c5b : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c5d : 48 > pha ;use stack to load status -1c5e : a901 > lda #1 ;precharge accu -1c60 : 28 > plp - -1c61 : 8941 bit #$41 ;41 - should clear Z - tst_a 1,0 -1c63 : 08 > php ;save flags -1c64 : c901 > cmp #1 ;test result - > trap_ne -1c66 : d0fe > bne * ;failed not equal (non zero) - > -1c68 : 68 > pla ;load status -1c69 : 48 > pha - > cmp_flag 0 -1c6a : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c6c : d0fe > bne * ;failed not equal (non zero) - > -1c6e : 28 > plp ;restore status - - ; *** DEBUG INFO *** - ; if it fails the previous test and your BIT # has set the V flag - ; see http://forum.6502.org/viewtopic.php?f=2&t=2241&p=27243#p27239 - ; why it shouldn't alter N or V flags on a BIT # -1c6f : ca dex - set_a 1,0 - > load_flag 0 -1c70 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c72 : 48 > pha ;use stack to load status -1c73 : a901 > lda #1 ;precharge accu -1c75 : 28 > plp - -1c76 : 8982 bit #$82 ;82 - should set Z - tst_a 1,fz -1c78 : 08 > php ;save flags -1c79 : c901 > cmp #1 ;test result - > trap_ne -1c7b : d0fe > bne * ;failed not equal (non zero) - > -1c7d : 68 > pla ;load status -1c7e : 48 > pha - > cmp_flag fz -1c7f : c932 > cmp #(fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c81 : d0fe > bne * ;failed not equal (non zero) - > -1c83 : 28 > plp ;restore status - -1c84 : ca dex - set_a 1,0 - > load_flag 0 -1c85 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1c87 : 48 > pha ;use stack to load status -1c88 : a901 > lda #1 ;precharge accu -1c8a : 28 > plp - -1c8b : 89c3 bit #$c3 ;c3 - should clear Z - tst_a 1,0 -1c8d : 08 > php ;save flags -1c8e : c901 > cmp #1 ;test result - > trap_ne -1c90 : d0fe > bne * ;failed not equal (non zero) - > -1c92 : 68 > pla ;load status -1c93 : 48 > pha - > cmp_flag 0 -1c94 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1c96 : d0fe > bne * ;failed not equal (non zero) - > -1c98 : 28 > plp ;restore status - - - set_a 1,$ff - > load_flag $ff -1c99 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1c9b : 48 > pha ;use stack to load status -1c9c : a901 > lda #1 ;precharge accu -1c9e : 28 > plp - -1c9f : 89c3 bit #$c3 ;c3 - clear Z - tst_a 1,~fz -1ca1 : 08 > php ;save flags -1ca2 : c901 > cmp #1 ;test result - > trap_ne -1ca4 : d0fe > bne * ;failed not equal (non zero) - > -1ca6 : 68 > pla ;load status -1ca7 : 48 > pha - > cmp_flag ~fz -1ca8 : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1caa : d0fe > bne * ;failed not equal (non zero) - > -1cac : 28 > plp ;restore status - -1cad : e8 inx - set_a 1,$ff - > load_flag $ff -1cae : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1cb0 : 48 > pha ;use stack to load status -1cb1 : a901 > lda #1 ;precharge accu -1cb3 : 28 > plp - -1cb4 : 8982 bit #$82 ;82 - should set Z - tst_a 1,$ff -1cb6 : 08 > php ;save flags -1cb7 : c901 > cmp #1 ;test result - > trap_ne -1cb9 : d0fe > bne * ;failed not equal (non zero) - > -1cbb : 68 > pla ;load status -1cbc : 48 > pha - > cmp_flag $ff -1cbd : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cbf : d0fe > bne * ;failed not equal (non zero) - > -1cc1 : 28 > plp ;restore status - -1cc2 : e8 inx - set_a 1,$ff - > load_flag $ff -1cc3 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1cc5 : 48 > pha ;use stack to load status -1cc6 : a901 > lda #1 ;precharge accu -1cc8 : 28 > plp - -1cc9 : 8941 bit #$41 ;41 - should clear Z - tst_a 1,~fz -1ccb : 08 > php ;save flags -1ccc : c901 > cmp #1 ;test result - > trap_ne -1cce : d0fe > bne * ;failed not equal (non zero) - > -1cd0 : 68 > pla ;load status -1cd1 : 48 > pha - > cmp_flag ~fz -1cd2 : c9fd > cmp #(~fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1cd4 : d0fe > bne * ;failed not equal (non zero) - > -1cd6 : 28 > plp ;restore status - -1cd7 : e8 inx - set_a $ff,$ff - > load_flag $ff -1cd8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1cda : 48 > pha ;use stack to load status -1cdb : a9ff > lda #$ff ;precharge accu -1cdd : 28 > plp - -1cde : 8900 bit #$00 ;00 - should set Z - tst_a $ff,$ff -1ce0 : 08 > php ;save flags -1ce1 : c9ff > cmp #$ff ;test result - > trap_ne -1ce3 : d0fe > bne * ;failed not equal (non zero) - > -1ce5 : 68 > pla ;load status -1ce6 : 48 > pha - > cmp_flag $ff -1ce7 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ce9 : d0fe > bne * ;failed not equal (non zero) - > -1ceb : 28 > plp ;restore status - - -1cec : e003 cpx #3 - trap_ne ;x altered during test -1cee : d0fe > bne * ;failed not equal (non zero) - -1cf0 : c042 cpy #$42 - trap_ne ;y altered during test -1cf2 : d0fe > bne * ;failed not equal (non zero) - -1cf4 : ba tsx -1cf5 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -1cf7 : d0fe > bne * ;failed not equal (non zero) - - next_test -1cf9 : ad0202 > lda test_case ;previous test -1cfc : c90f > cmp #test_num - > trap_ne ;test is out of sequence -1cfe : d0fe > bne * ;failed not equal (non zero) - > -0010 = >test_num = test_num + 1 -1d00 : a910 > lda #test_num ;*** next tests' number -1d02 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing TRB, TSB - zp / abs - - trbt macro ;\1 = memory, \2 = flags - sty \1 - load_flag \2 - pha - lda zpt+1 - plp - trb \1 - php - cmp zpt+1 - trap_ne ;accu was changed - pla - pha - ora #fz ;mask Z - cmp_flag \2|fz - trap_ne ;flags changed except Z - pla - and #fz - cmp zpt+2 - trap_ne ;Z flag invalid - lda zpt+3 - cmp zpt - trap_ne ;altered bits in memory wrong - endm - - tsbt macro ;\1 = memory, \2 = flags - sty \1 - load_flag \2 - pha - lda zpt+1 - plp - tsb \1 - php - cmp zpt+1 - trap_ne ;accu was changed - pla - pha - ora #fz ;mask Z - cmp_flag \2|fz - trap_ne ;flags changed except Z - pla - and #fz - cmp zpt+2 - trap_ne ;Z flag invalid - lda zpt+4 - cmp zpt - trap_ne ;altered bits in memory wrong - endm - -1d05 : a2c0 ldx #$c0 -1d07 : a000 ldy #0 ;op1 - memory save - ; zpt ;op1 - memory modifiable -1d09 : 640d stz zpt+1 ;op2 - accu - ; zpt+2 ;and flags - ; zpt+3 ;memory after reset - ; zpt+4 ;memory after set - -1d0b : 98 tbt1 tya -1d0c : 250d and zpt+1 ;set Z by anding the 2 operands -1d0e : 08 php -1d0f : 68 pla -1d10 : 2902 and #fz ;mask Z -1d12 : 850e sta zpt+2 -1d14 : 98 tya ;reset op1 bits by op2 -1d15 : 49ff eor #$ff -1d17 : 050d ora zpt+1 -1d19 : 49ff eor #$ff -1d1b : 850f sta zpt+3 -1d1d : 98 tya ;set op1 bits by op2 -1d1e : 050d ora zpt+1 -1d20 : 8510 sta zpt+4 - - trbt zpt,$ff -1d22 : 840c > sty zpt - > load_flag $ff -1d24 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1d26 : 48 > pha -1d27 : a50d > lda zpt+1 -1d29 : 28 > plp -1d2a : 140c > trb zpt -1d2c : 08 > php -1d2d : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1d2f : d0fe > bne * ;failed not equal (non zero) - > -1d31 : 68 > pla -1d32 : 48 > pha -1d33 : 0902 > ora #fz ;mask Z - > cmp_flag $ff|fz -1d35 : c9ff > cmp #($ff|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1d37 : d0fe > bne * ;failed not equal (non zero) - > -1d39 : 68 > pla -1d3a : 2902 > and #fz -1d3c : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1d3e : d0fe > bne * ;failed not equal (non zero) - > -1d40 : a50f > lda zpt+3 -1d42 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1d44 : d0fe > bne * ;failed not equal (non zero) - > - - trbt abst,$ff -1d46 : 8c0502 > sty abst - > load_flag $ff -1d49 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1d4b : 48 > pha -1d4c : a50d > lda zpt+1 -1d4e : 28 > plp -1d4f : 1c0502 > trb abst -1d52 : 08 > php -1d53 : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1d55 : d0fe > bne * ;failed not equal (non zero) - > -1d57 : 68 > pla -1d58 : 48 > pha -1d59 : 0902 > ora #fz ;mask Z - > cmp_flag $ff|fz -1d5b : c9ff > cmp #($ff|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1d5d : d0fe > bne * ;failed not equal (non zero) - > -1d5f : 68 > pla -1d60 : 2902 > and #fz -1d62 : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1d64 : d0fe > bne * ;failed not equal (non zero) - > -1d66 : a50f > lda zpt+3 -1d68 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1d6a : d0fe > bne * ;failed not equal (non zero) - > - - trbt zpt,0 -1d6c : 840c > sty zpt - > load_flag 0 -1d6e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1d70 : 48 > pha -1d71 : a50d > lda zpt+1 -1d73 : 28 > plp -1d74 : 140c > trb zpt -1d76 : 08 > php -1d77 : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1d79 : d0fe > bne * ;failed not equal (non zero) - > -1d7b : 68 > pla -1d7c : 48 > pha -1d7d : 0902 > ora #fz ;mask Z - > cmp_flag 0|fz -1d7f : c932 > cmp #(0|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1d81 : d0fe > bne * ;failed not equal (non zero) - > -1d83 : 68 > pla -1d84 : 2902 > and #fz -1d86 : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1d88 : d0fe > bne * ;failed not equal (non zero) - > -1d8a : a50f > lda zpt+3 -1d8c : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1d8e : d0fe > bne * ;failed not equal (non zero) - > - - trbt abst,0 -1d90 : 8c0502 > sty abst - > load_flag 0 -1d93 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1d95 : 48 > pha -1d96 : a50d > lda zpt+1 -1d98 : 28 > plp -1d99 : 1c0502 > trb abst -1d9c : 08 > php -1d9d : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1d9f : d0fe > bne * ;failed not equal (non zero) - > -1da1 : 68 > pla -1da2 : 48 > pha -1da3 : 0902 > ora #fz ;mask Z - > cmp_flag 0|fz -1da5 : c932 > cmp #(0|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1da7 : d0fe > bne * ;failed not equal (non zero) - > -1da9 : 68 > pla -1daa : 2902 > and #fz -1dac : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1dae : d0fe > bne * ;failed not equal (non zero) - > -1db0 : a50f > lda zpt+3 -1db2 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1db4 : d0fe > bne * ;failed not equal (non zero) - > - - tsbt zpt,$ff -1db6 : 840c > sty zpt - > load_flag $ff -1db8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1dba : 48 > pha -1dbb : a50d > lda zpt+1 -1dbd : 28 > plp -1dbe : 040c > tsb zpt -1dc0 : 08 > php -1dc1 : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1dc3 : d0fe > bne * ;failed not equal (non zero) - > -1dc5 : 68 > pla -1dc6 : 48 > pha -1dc7 : 0902 > ora #fz ;mask Z - > cmp_flag $ff|fz -1dc9 : c9ff > cmp #($ff|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1dcb : d0fe > bne * ;failed not equal (non zero) - > -1dcd : 68 > pla -1dce : 2902 > and #fz -1dd0 : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1dd2 : d0fe > bne * ;failed not equal (non zero) - > -1dd4 : a510 > lda zpt+4 -1dd6 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1dd8 : d0fe > bne * ;failed not equal (non zero) - > - - tsbt abst,$ff -1dda : 8c0502 > sty abst - > load_flag $ff -1ddd : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1ddf : 48 > pha -1de0 : a50d > lda zpt+1 -1de2 : 28 > plp -1de3 : 0c0502 > tsb abst -1de6 : 08 > php -1de7 : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1de9 : d0fe > bne * ;failed not equal (non zero) - > -1deb : 68 > pla -1dec : 48 > pha -1ded : 0902 > ora #fz ;mask Z - > cmp_flag $ff|fz -1def : c9ff > cmp #($ff|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1df1 : d0fe > bne * ;failed not equal (non zero) - > -1df3 : 68 > pla -1df4 : 2902 > and #fz -1df6 : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1df8 : d0fe > bne * ;failed not equal (non zero) - > -1dfa : a510 > lda zpt+4 -1dfc : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1dfe : d0fe > bne * ;failed not equal (non zero) - > - - tsbt zpt,0 -1e00 : 840c > sty zpt - > load_flag 0 -1e02 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1e04 : 48 > pha -1e05 : a50d > lda zpt+1 -1e07 : 28 > plp -1e08 : 040c > tsb zpt -1e0a : 08 > php -1e0b : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1e0d : d0fe > bne * ;failed not equal (non zero) - > -1e0f : 68 > pla -1e10 : 48 > pha -1e11 : 0902 > ora #fz ;mask Z - > cmp_flag 0|fz -1e13 : c932 > cmp #(0|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1e15 : d0fe > bne * ;failed not equal (non zero) - > -1e17 : 68 > pla -1e18 : 2902 > and #fz -1e1a : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1e1c : d0fe > bne * ;failed not equal (non zero) - > -1e1e : a510 > lda zpt+4 -1e20 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1e22 : d0fe > bne * ;failed not equal (non zero) - > - - tsbt abst,0 -1e24 : 8c0502 > sty abst - > load_flag 0 -1e27 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1e29 : 48 > pha -1e2a : a50d > lda zpt+1 -1e2c : 28 > plp -1e2d : 0c0502 > tsb abst -1e30 : 08 > php -1e31 : c50d > cmp zpt+1 - > trap_ne ;accu was changed -1e33 : d0fe > bne * ;failed not equal (non zero) - > -1e35 : 68 > pla -1e36 : 48 > pha -1e37 : 0902 > ora #fz ;mask Z - > cmp_flag 0|fz -1e39 : c932 > cmp #(0|fz|fao)&m8 ;expected flags + always on bits - > - > trap_ne ;flags changed except Z -1e3b : d0fe > bne * ;failed not equal (non zero) - > -1e3d : 68 > pla -1e3e : 2902 > and #fz -1e40 : c50e > cmp zpt+2 - > trap_ne ;Z flag invalid -1e42 : d0fe > bne * ;failed not equal (non zero) - > -1e44 : a510 > lda zpt+4 -1e46 : c50c > cmp zpt - > trap_ne ;altered bits in memory wrong -1e48 : d0fe > bne * ;failed not equal (non zero) - > - - -1e4a : c8 iny ;iterate op1 -1e4b : d004 bne tbt3 -1e4d : e60d inc zpt+1 ;iterate op2 -1e4f : f003 beq tbt2 -1e51 : 4c0b1d tbt3 jmp tbt1 -1e54 : tbt2 -1e54 : e0c0 cpx #$c0 - trap_ne ;x altered during test -1e56 : d0fe > bne * ;failed not equal (non zero) - -1e58 : ba tsx -1e59 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -1e5b : d0fe > bne * ;failed not equal (non zero) - - next_test -1e5d : ad0202 > lda test_case ;previous test -1e60 : c910 > cmp #test_num - > trap_ne ;test is out of sequence -1e62 : d0fe > bne * ;failed not equal (non zero) - > -0011 = >test_num = test_num + 1 -1e64 : a911 > lda #test_num ;*** next tests' number -1e66 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - if rkwl_wdc_op = 1 - ; testing RMB, SMB - zp - rmbt macro ;\1 = bitnum - lda #$ff - sta zpt - set_a $a5,0 - rmb \1,zpt - tst_a $a5,0 - lda zpt - cmp #$ff-(1<<\1) - trap_ne ;wrong bits set or cleared - lda #1<<\1 - sta zpt - set_a $5a,$ff - rmb \1,zpt - tst_a $5a,$ff - lda zpt - trap_ne ;wrong bits set or cleared - endm - smbt macro ;\1 = bitnum - lda #$ff-(1<<\1) - sta zpt - set_a $a5,0 - smb \1,zpt - tst_a $a5,0 - lda zpt - cmp #$ff - trap_ne ;wrong bits set or cleared - lda #0 - sta zpt - set_a $5a,$ff - smb \1,zpt - tst_a $5a,$ff - lda zpt - cmp #1<<\1 - trap_ne ;wrong bits set or cleared - endm - -1e69 : a2ba ldx #$ba ;protect x & y -1e6b : a0d0 ldy #$d0 - rmbt 0 -1e6d : a9ff > lda #$ff -1e6f : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1e71 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1e73 : 48 > pha ;use stack to load status -1e74 : a9a5 > lda #$a5 ;precharge accu -1e76 : 28 > plp - > -1e77 : 070c > rmb 0,zpt - > tst_a $a5,0 -1e79 : 08 > php ;save flags -1e7a : c9a5 > cmp #$a5 ;test result - > trap_ne -1e7c : d0fe > bne * ;failed not equal (non zero) - > -1e7e : 68 > pla ;load status -1e7f : 48 > pha - > cmp_flag 0 -1e80 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1e82 : d0fe > bne * ;failed not equal (non zero) - > -1e84 : 28 > plp ;restore status - > -1e85 : a50c > lda zpt -1e87 : c9fe > cmp #$ff-(1<<0) - > trap_ne ;wrong bits set or cleared -1e89 : d0fe > bne * ;failed not equal (non zero) - > -1e8b : a901 > lda #1<<0 -1e8d : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1e8f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1e91 : 48 > pha ;use stack to load status -1e92 : a95a > lda #$5a ;precharge accu -1e94 : 28 > plp - > -1e95 : 070c > rmb 0,zpt - > tst_a $5a,$ff -1e97 : 08 > php ;save flags -1e98 : c95a > cmp #$5a ;test result - > trap_ne -1e9a : d0fe > bne * ;failed not equal (non zero) - > -1e9c : 68 > pla ;load status -1e9d : 48 > pha - > cmp_flag $ff -1e9e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ea0 : d0fe > bne * ;failed not equal (non zero) - > -1ea2 : 28 > plp ;restore status - > -1ea3 : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1ea5 : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 1 -1ea7 : a9ff > lda #$ff -1ea9 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1eab : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1ead : 48 > pha ;use stack to load status -1eae : a9a5 > lda #$a5 ;precharge accu -1eb0 : 28 > plp - > -1eb1 : 170c > rmb 1,zpt - > tst_a $a5,0 -1eb3 : 08 > php ;save flags -1eb4 : c9a5 > cmp #$a5 ;test result - > trap_ne -1eb6 : d0fe > bne * ;failed not equal (non zero) - > -1eb8 : 68 > pla ;load status -1eb9 : 48 > pha - > cmp_flag 0 -1eba : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ebc : d0fe > bne * ;failed not equal (non zero) - > -1ebe : 28 > plp ;restore status - > -1ebf : a50c > lda zpt -1ec1 : c9fd > cmp #$ff-(1<<1) - > trap_ne ;wrong bits set or cleared -1ec3 : d0fe > bne * ;failed not equal (non zero) - > -1ec5 : a902 > lda #1<<1 -1ec7 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1ec9 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1ecb : 48 > pha ;use stack to load status -1ecc : a95a > lda #$5a ;precharge accu -1ece : 28 > plp - > -1ecf : 170c > rmb 1,zpt - > tst_a $5a,$ff -1ed1 : 08 > php ;save flags -1ed2 : c95a > cmp #$5a ;test result - > trap_ne -1ed4 : d0fe > bne * ;failed not equal (non zero) - > -1ed6 : 68 > pla ;load status -1ed7 : 48 > pha - > cmp_flag $ff -1ed8 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1eda : d0fe > bne * ;failed not equal (non zero) - > -1edc : 28 > plp ;restore status - > -1edd : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1edf : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 2 -1ee1 : a9ff > lda #$ff -1ee3 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1ee5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1ee7 : 48 > pha ;use stack to load status -1ee8 : a9a5 > lda #$a5 ;precharge accu -1eea : 28 > plp - > -1eeb : 270c > rmb 2,zpt - > tst_a $a5,0 -1eed : 08 > php ;save flags -1eee : c9a5 > cmp #$a5 ;test result - > trap_ne -1ef0 : d0fe > bne * ;failed not equal (non zero) - > -1ef2 : 68 > pla ;load status -1ef3 : 48 > pha - > cmp_flag 0 -1ef4 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ef6 : d0fe > bne * ;failed not equal (non zero) - > -1ef8 : 28 > plp ;restore status - > -1ef9 : a50c > lda zpt -1efb : c9fb > cmp #$ff-(1<<2) - > trap_ne ;wrong bits set or cleared -1efd : d0fe > bne * ;failed not equal (non zero) - > -1eff : a904 > lda #1<<2 -1f01 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1f03 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f05 : 48 > pha ;use stack to load status -1f06 : a95a > lda #$5a ;precharge accu -1f08 : 28 > plp - > -1f09 : 270c > rmb 2,zpt - > tst_a $5a,$ff -1f0b : 08 > php ;save flags -1f0c : c95a > cmp #$5a ;test result - > trap_ne -1f0e : d0fe > bne * ;failed not equal (non zero) - > -1f10 : 68 > pla ;load status -1f11 : 48 > pha - > cmp_flag $ff -1f12 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f14 : d0fe > bne * ;failed not equal (non zero) - > -1f16 : 28 > plp ;restore status - > -1f17 : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1f19 : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 3 -1f1b : a9ff > lda #$ff -1f1d : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1f1f : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f21 : 48 > pha ;use stack to load status -1f22 : a9a5 > lda #$a5 ;precharge accu -1f24 : 28 > plp - > -1f25 : 370c > rmb 3,zpt - > tst_a $a5,0 -1f27 : 08 > php ;save flags -1f28 : c9a5 > cmp #$a5 ;test result - > trap_ne -1f2a : d0fe > bne * ;failed not equal (non zero) - > -1f2c : 68 > pla ;load status -1f2d : 48 > pha - > cmp_flag 0 -1f2e : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f30 : d0fe > bne * ;failed not equal (non zero) - > -1f32 : 28 > plp ;restore status - > -1f33 : a50c > lda zpt -1f35 : c9f7 > cmp #$ff-(1<<3) - > trap_ne ;wrong bits set or cleared -1f37 : d0fe > bne * ;failed not equal (non zero) - > -1f39 : a908 > lda #1<<3 -1f3b : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1f3d : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f3f : 48 > pha ;use stack to load status -1f40 : a95a > lda #$5a ;precharge accu -1f42 : 28 > plp - > -1f43 : 370c > rmb 3,zpt - > tst_a $5a,$ff -1f45 : 08 > php ;save flags -1f46 : c95a > cmp #$5a ;test result - > trap_ne -1f48 : d0fe > bne * ;failed not equal (non zero) - > -1f4a : 68 > pla ;load status -1f4b : 48 > pha - > cmp_flag $ff -1f4c : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f4e : d0fe > bne * ;failed not equal (non zero) - > -1f50 : 28 > plp ;restore status - > -1f51 : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1f53 : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 4 -1f55 : a9ff > lda #$ff -1f57 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1f59 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f5b : 48 > pha ;use stack to load status -1f5c : a9a5 > lda #$a5 ;precharge accu -1f5e : 28 > plp - > -1f5f : 470c > rmb 4,zpt - > tst_a $a5,0 -1f61 : 08 > php ;save flags -1f62 : c9a5 > cmp #$a5 ;test result - > trap_ne -1f64 : d0fe > bne * ;failed not equal (non zero) - > -1f66 : 68 > pla ;load status -1f67 : 48 > pha - > cmp_flag 0 -1f68 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f6a : d0fe > bne * ;failed not equal (non zero) - > -1f6c : 28 > plp ;restore status - > -1f6d : a50c > lda zpt -1f6f : c9ef > cmp #$ff-(1<<4) - > trap_ne ;wrong bits set or cleared -1f71 : d0fe > bne * ;failed not equal (non zero) - > -1f73 : a910 > lda #1<<4 -1f75 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1f77 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1f79 : 48 > pha ;use stack to load status -1f7a : a95a > lda #$5a ;precharge accu -1f7c : 28 > plp - > -1f7d : 470c > rmb 4,zpt - > tst_a $5a,$ff -1f7f : 08 > php ;save flags -1f80 : c95a > cmp #$5a ;test result - > trap_ne -1f82 : d0fe > bne * ;failed not equal (non zero) - > -1f84 : 68 > pla ;load status -1f85 : 48 > pha - > cmp_flag $ff -1f86 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1f88 : d0fe > bne * ;failed not equal (non zero) - > -1f8a : 28 > plp ;restore status - > -1f8b : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1f8d : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 5 -1f8f : a9ff > lda #$ff -1f91 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1f93 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1f95 : 48 > pha ;use stack to load status -1f96 : a9a5 > lda #$a5 ;precharge accu -1f98 : 28 > plp - > -1f99 : 570c > rmb 5,zpt - > tst_a $a5,0 -1f9b : 08 > php ;save flags -1f9c : c9a5 > cmp #$a5 ;test result - > trap_ne -1f9e : d0fe > bne * ;failed not equal (non zero) - > -1fa0 : 68 > pla ;load status -1fa1 : 48 > pha - > cmp_flag 0 -1fa2 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fa4 : d0fe > bne * ;failed not equal (non zero) - > -1fa6 : 28 > plp ;restore status - > -1fa7 : a50c > lda zpt -1fa9 : c9df > cmp #$ff-(1<<5) - > trap_ne ;wrong bits set or cleared -1fab : d0fe > bne * ;failed not equal (non zero) - > -1fad : a920 > lda #1<<5 -1faf : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1fb1 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1fb3 : 48 > pha ;use stack to load status -1fb4 : a95a > lda #$5a ;precharge accu -1fb6 : 28 > plp - > -1fb7 : 570c > rmb 5,zpt - > tst_a $5a,$ff -1fb9 : 08 > php ;save flags -1fba : c95a > cmp #$5a ;test result - > trap_ne -1fbc : d0fe > bne * ;failed not equal (non zero) - > -1fbe : 68 > pla ;load status -1fbf : 48 > pha - > cmp_flag $ff -1fc0 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fc2 : d0fe > bne * ;failed not equal (non zero) - > -1fc4 : 28 > plp ;restore status - > -1fc5 : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -1fc7 : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 6 -1fc9 : a9ff > lda #$ff -1fcb : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -1fcd : a900 > lda #0 ;allow test to change I-flag (no mask) - > -1fcf : 48 > pha ;use stack to load status -1fd0 : a9a5 > lda #$a5 ;precharge accu -1fd2 : 28 > plp - > -1fd3 : 670c > rmb 6,zpt - > tst_a $a5,0 -1fd5 : 08 > php ;save flags -1fd6 : c9a5 > cmp #$a5 ;test result - > trap_ne -1fd8 : d0fe > bne * ;failed not equal (non zero) - > -1fda : 68 > pla ;load status -1fdb : 48 > pha - > cmp_flag 0 -1fdc : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1fde : d0fe > bne * ;failed not equal (non zero) - > -1fe0 : 28 > plp ;restore status - > -1fe1 : a50c > lda zpt -1fe3 : c9bf > cmp #$ff-(1<<6) - > trap_ne ;wrong bits set or cleared -1fe5 : d0fe > bne * ;failed not equal (non zero) - > -1fe7 : a940 > lda #1<<6 -1fe9 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -1feb : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -1fed : 48 > pha ;use stack to load status -1fee : a95a > lda #$5a ;precharge accu -1ff0 : 28 > plp - > -1ff1 : 670c > rmb 6,zpt - > tst_a $5a,$ff -1ff3 : 08 > php ;save flags -1ff4 : c95a > cmp #$5a ;test result - > trap_ne -1ff6 : d0fe > bne * ;failed not equal (non zero) - > -1ff8 : 68 > pla ;load status -1ff9 : 48 > pha - > cmp_flag $ff -1ffa : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -1ffc : d0fe > bne * ;failed not equal (non zero) - > -1ffe : 28 > plp ;restore status - > -1fff : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -2001 : d0fe > bne * ;failed not equal (non zero) - > - - rmbt 7 -2003 : a9ff > lda #$ff -2005 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -2007 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2009 : 48 > pha ;use stack to load status -200a : a9a5 > lda #$a5 ;precharge accu -200c : 28 > plp - > -200d : 770c > rmb 7,zpt - > tst_a $a5,0 -200f : 08 > php ;save flags -2010 : c9a5 > cmp #$a5 ;test result - > trap_ne -2012 : d0fe > bne * ;failed not equal (non zero) - > -2014 : 68 > pla ;load status -2015 : 48 > pha - > cmp_flag 0 -2016 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2018 : d0fe > bne * ;failed not equal (non zero) - > -201a : 28 > plp ;restore status - > -201b : a50c > lda zpt -201d : c97f > cmp #$ff-(1<<7) - > trap_ne ;wrong bits set or cleared -201f : d0fe > bne * ;failed not equal (non zero) - > -2021 : a980 > lda #1<<7 -2023 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -2025 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2027 : 48 > pha ;use stack to load status -2028 : a95a > lda #$5a ;precharge accu -202a : 28 > plp - > -202b : 770c > rmb 7,zpt - > tst_a $5a,$ff -202d : 08 > php ;save flags -202e : c95a > cmp #$5a ;test result - > trap_ne -2030 : d0fe > bne * ;failed not equal (non zero) - > -2032 : 68 > pla ;load status -2033 : 48 > pha - > cmp_flag $ff -2034 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2036 : d0fe > bne * ;failed not equal (non zero) - > -2038 : 28 > plp ;restore status - > -2039 : a50c > lda zpt - > trap_ne ;wrong bits set or cleared -203b : d0fe > bne * ;failed not equal (non zero) - > - - smbt 0 -203d : a9fe > lda #$ff-(1<<0) -203f : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -2041 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2043 : 48 > pha ;use stack to load status -2044 : a9a5 > lda #$a5 ;precharge accu -2046 : 28 > plp - > -2047 : 870c > smb 0,zpt - > tst_a $a5,0 -2049 : 08 > php ;save flags -204a : c9a5 > cmp #$a5 ;test result - > trap_ne -204c : d0fe > bne * ;failed not equal (non zero) - > -204e : 68 > pla ;load status -204f : 48 > pha - > cmp_flag 0 -2050 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2052 : d0fe > bne * ;failed not equal (non zero) - > -2054 : 28 > plp ;restore status - > -2055 : a50c > lda zpt -2057 : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -2059 : d0fe > bne * ;failed not equal (non zero) - > -205b : a900 > lda #0 -205d : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -205f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2061 : 48 > pha ;use stack to load status -2062 : a95a > lda #$5a ;precharge accu -2064 : 28 > plp - > -2065 : 870c > smb 0,zpt - > tst_a $5a,$ff -2067 : 08 > php ;save flags -2068 : c95a > cmp #$5a ;test result - > trap_ne -206a : d0fe > bne * ;failed not equal (non zero) - > -206c : 68 > pla ;load status -206d : 48 > pha - > cmp_flag $ff -206e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2070 : d0fe > bne * ;failed not equal (non zero) - > -2072 : 28 > plp ;restore status - > -2073 : a50c > lda zpt -2075 : c901 > cmp #1<<0 - > trap_ne ;wrong bits set or cleared -2077 : d0fe > bne * ;failed not equal (non zero) - > - - smbt 1 -2079 : a9fd > lda #$ff-(1<<1) -207b : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -207d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -207f : 48 > pha ;use stack to load status -2080 : a9a5 > lda #$a5 ;precharge accu -2082 : 28 > plp - > -2083 : 970c > smb 1,zpt - > tst_a $a5,0 -2085 : 08 > php ;save flags -2086 : c9a5 > cmp #$a5 ;test result - > trap_ne -2088 : d0fe > bne * ;failed not equal (non zero) - > -208a : 68 > pla ;load status -208b : 48 > pha - > cmp_flag 0 -208c : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -208e : d0fe > bne * ;failed not equal (non zero) - > -2090 : 28 > plp ;restore status - > -2091 : a50c > lda zpt -2093 : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -2095 : d0fe > bne * ;failed not equal (non zero) - > -2097 : a900 > lda #0 -2099 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -209b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -209d : 48 > pha ;use stack to load status -209e : a95a > lda #$5a ;precharge accu -20a0 : 28 > plp - > -20a1 : 970c > smb 1,zpt - > tst_a $5a,$ff -20a3 : 08 > php ;save flags -20a4 : c95a > cmp #$5a ;test result - > trap_ne -20a6 : d0fe > bne * ;failed not equal (non zero) - > -20a8 : 68 > pla ;load status -20a9 : 48 > pha - > cmp_flag $ff -20aa : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20ac : d0fe > bne * ;failed not equal (non zero) - > -20ae : 28 > plp ;restore status - > -20af : a50c > lda zpt -20b1 : c902 > cmp #1<<1 - > trap_ne ;wrong bits set or cleared -20b3 : d0fe > bne * ;failed not equal (non zero) - > - - smbt 2 -20b5 : a9fb > lda #$ff-(1<<2) -20b7 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -20b9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -20bb : 48 > pha ;use stack to load status -20bc : a9a5 > lda #$a5 ;precharge accu -20be : 28 > plp - > -20bf : a70c > smb 2,zpt - > tst_a $a5,0 -20c1 : 08 > php ;save flags -20c2 : c9a5 > cmp #$a5 ;test result - > trap_ne -20c4 : d0fe > bne * ;failed not equal (non zero) - > -20c6 : 68 > pla ;load status -20c7 : 48 > pha - > cmp_flag 0 -20c8 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20ca : d0fe > bne * ;failed not equal (non zero) - > -20cc : 28 > plp ;restore status - > -20cd : a50c > lda zpt -20cf : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -20d1 : d0fe > bne * ;failed not equal (non zero) - > -20d3 : a900 > lda #0 -20d5 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -20d7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -20d9 : 48 > pha ;use stack to load status -20da : a95a > lda #$5a ;precharge accu -20dc : 28 > plp - > -20dd : a70c > smb 2,zpt - > tst_a $5a,$ff -20df : 08 > php ;save flags -20e0 : c95a > cmp #$5a ;test result - > trap_ne -20e2 : d0fe > bne * ;failed not equal (non zero) - > -20e4 : 68 > pla ;load status -20e5 : 48 > pha - > cmp_flag $ff -20e6 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -20e8 : d0fe > bne * ;failed not equal (non zero) - > -20ea : 28 > plp ;restore status - > -20eb : a50c > lda zpt -20ed : c904 > cmp #1<<2 - > trap_ne ;wrong bits set or cleared -20ef : d0fe > bne * ;failed not equal (non zero) - > - - smbt 3 -20f1 : a9f7 > lda #$ff-(1<<3) -20f3 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -20f5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -20f7 : 48 > pha ;use stack to load status -20f8 : a9a5 > lda #$a5 ;precharge accu -20fa : 28 > plp - > -20fb : b70c > smb 3,zpt - > tst_a $a5,0 -20fd : 08 > php ;save flags -20fe : c9a5 > cmp #$a5 ;test result - > trap_ne -2100 : d0fe > bne * ;failed not equal (non zero) - > -2102 : 68 > pla ;load status -2103 : 48 > pha - > cmp_flag 0 -2104 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2106 : d0fe > bne * ;failed not equal (non zero) - > -2108 : 28 > plp ;restore status - > -2109 : a50c > lda zpt -210b : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -210d : d0fe > bne * ;failed not equal (non zero) - > -210f : a900 > lda #0 -2111 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -2113 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2115 : 48 > pha ;use stack to load status -2116 : a95a > lda #$5a ;precharge accu -2118 : 28 > plp - > -2119 : b70c > smb 3,zpt - > tst_a $5a,$ff -211b : 08 > php ;save flags -211c : c95a > cmp #$5a ;test result - > trap_ne -211e : d0fe > bne * ;failed not equal (non zero) - > -2120 : 68 > pla ;load status -2121 : 48 > pha - > cmp_flag $ff -2122 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2124 : d0fe > bne * ;failed not equal (non zero) - > -2126 : 28 > plp ;restore status - > -2127 : a50c > lda zpt -2129 : c908 > cmp #1<<3 - > trap_ne ;wrong bits set or cleared -212b : d0fe > bne * ;failed not equal (non zero) - > - - smbt 4 -212d : a9ef > lda #$ff-(1<<4) -212f : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -2131 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2133 : 48 > pha ;use stack to load status -2134 : a9a5 > lda #$a5 ;precharge accu -2136 : 28 > plp - > -2137 : c70c > smb 4,zpt - > tst_a $a5,0 -2139 : 08 > php ;save flags -213a : c9a5 > cmp #$a5 ;test result - > trap_ne -213c : d0fe > bne * ;failed not equal (non zero) - > -213e : 68 > pla ;load status -213f : 48 > pha - > cmp_flag 0 -2140 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2142 : d0fe > bne * ;failed not equal (non zero) - > -2144 : 28 > plp ;restore status - > -2145 : a50c > lda zpt -2147 : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -2149 : d0fe > bne * ;failed not equal (non zero) - > -214b : a900 > lda #0 -214d : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -214f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2151 : 48 > pha ;use stack to load status -2152 : a95a > lda #$5a ;precharge accu -2154 : 28 > plp - > -2155 : c70c > smb 4,zpt - > tst_a $5a,$ff -2157 : 08 > php ;save flags -2158 : c95a > cmp #$5a ;test result - > trap_ne -215a : d0fe > bne * ;failed not equal (non zero) - > -215c : 68 > pla ;load status -215d : 48 > pha - > cmp_flag $ff -215e : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2160 : d0fe > bne * ;failed not equal (non zero) - > -2162 : 28 > plp ;restore status - > -2163 : a50c > lda zpt -2165 : c910 > cmp #1<<4 - > trap_ne ;wrong bits set or cleared -2167 : d0fe > bne * ;failed not equal (non zero) - > - - smbt 5 -2169 : a9df > lda #$ff-(1<<5) -216b : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -216d : a900 > lda #0 ;allow test to change I-flag (no mask) - > -216f : 48 > pha ;use stack to load status -2170 : a9a5 > lda #$a5 ;precharge accu -2172 : 28 > plp - > -2173 : d70c > smb 5,zpt - > tst_a $a5,0 -2175 : 08 > php ;save flags -2176 : c9a5 > cmp #$a5 ;test result - > trap_ne -2178 : d0fe > bne * ;failed not equal (non zero) - > -217a : 68 > pla ;load status -217b : 48 > pha - > cmp_flag 0 -217c : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -217e : d0fe > bne * ;failed not equal (non zero) - > -2180 : 28 > plp ;restore status - > -2181 : a50c > lda zpt -2183 : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -2185 : d0fe > bne * ;failed not equal (non zero) - > -2187 : a900 > lda #0 -2189 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -218b : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -218d : 48 > pha ;use stack to load status -218e : a95a > lda #$5a ;precharge accu -2190 : 28 > plp - > -2191 : d70c > smb 5,zpt - > tst_a $5a,$ff -2193 : 08 > php ;save flags -2194 : c95a > cmp #$5a ;test result - > trap_ne -2196 : d0fe > bne * ;failed not equal (non zero) - > -2198 : 68 > pla ;load status -2199 : 48 > pha - > cmp_flag $ff -219a : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -219c : d0fe > bne * ;failed not equal (non zero) - > -219e : 28 > plp ;restore status - > -219f : a50c > lda zpt -21a1 : c920 > cmp #1<<5 - > trap_ne ;wrong bits set or cleared -21a3 : d0fe > bne * ;failed not equal (non zero) - > - - smbt 6 -21a5 : a9bf > lda #$ff-(1<<6) -21a7 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -21a9 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -21ab : 48 > pha ;use stack to load status -21ac : a9a5 > lda #$a5 ;precharge accu -21ae : 28 > plp - > -21af : e70c > smb 6,zpt - > tst_a $a5,0 -21b1 : 08 > php ;save flags -21b2 : c9a5 > cmp #$a5 ;test result - > trap_ne -21b4 : d0fe > bne * ;failed not equal (non zero) - > -21b6 : 68 > pla ;load status -21b7 : 48 > pha - > cmp_flag 0 -21b8 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21ba : d0fe > bne * ;failed not equal (non zero) - > -21bc : 28 > plp ;restore status - > -21bd : a50c > lda zpt -21bf : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -21c1 : d0fe > bne * ;failed not equal (non zero) - > -21c3 : a900 > lda #0 -21c5 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -21c7 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -21c9 : 48 > pha ;use stack to load status -21ca : a95a > lda #$5a ;precharge accu -21cc : 28 > plp - > -21cd : e70c > smb 6,zpt - > tst_a $5a,$ff -21cf : 08 > php ;save flags -21d0 : c95a > cmp #$5a ;test result - > trap_ne -21d2 : d0fe > bne * ;failed not equal (non zero) - > -21d4 : 68 > pla ;load status -21d5 : 48 > pha - > cmp_flag $ff -21d6 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21d8 : d0fe > bne * ;failed not equal (non zero) - > -21da : 28 > plp ;restore status - > -21db : a50c > lda zpt -21dd : c940 > cmp #1<<6 - > trap_ne ;wrong bits set or cleared -21df : d0fe > bne * ;failed not equal (non zero) - > - - smbt 7 -21e1 : a97f > lda #$ff-(1<<7) -21e3 : 850c > sta zpt - > set_a $a5,0 - > load_flag 0 -21e5 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -21e7 : 48 > pha ;use stack to load status -21e8 : a9a5 > lda #$a5 ;precharge accu -21ea : 28 > plp - > -21eb : f70c > smb 7,zpt - > tst_a $a5,0 -21ed : 08 > php ;save flags -21ee : c9a5 > cmp #$a5 ;test result - > trap_ne -21f0 : d0fe > bne * ;failed not equal (non zero) - > -21f2 : 68 > pla ;load status -21f3 : 48 > pha - > cmp_flag 0 -21f4 : c930 > cmp #(0|fao)&m8 ;expected flags + always on bits - > - > trap_ne -21f6 : d0fe > bne * ;failed not equal (non zero) - > -21f8 : 28 > plp ;restore status - > -21f9 : a50c > lda zpt -21fb : c9ff > cmp #$ff - > trap_ne ;wrong bits set or cleared -21fd : d0fe > bne * ;failed not equal (non zero) - > -21ff : a900 > lda #0 -2201 : 850c > sta zpt - > set_a $5a,$ff - > load_flag $ff -2203 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2205 : 48 > pha ;use stack to load status -2206 : a95a > lda #$5a ;precharge accu -2208 : 28 > plp - > -2209 : f70c > smb 7,zpt - > tst_a $5a,$ff -220b : 08 > php ;save flags -220c : c95a > cmp #$5a ;test result - > trap_ne -220e : d0fe > bne * ;failed not equal (non zero) - > -2210 : 68 > pla ;load status -2211 : 48 > pha - > cmp_flag $ff -2212 : c9ff > cmp #($ff|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2214 : d0fe > bne * ;failed not equal (non zero) - > -2216 : 28 > plp ;restore status - > -2217 : a50c > lda zpt -2219 : c980 > cmp #1<<7 - > trap_ne ;wrong bits set or cleared -221b : d0fe > bne * ;failed not equal (non zero) - > - -221d : e0ba cpx #$ba - trap_ne ;x altered during test -221f : d0fe > bne * ;failed not equal (non zero) - -2221 : c0d0 cpy #$d0 - trap_ne ;y altered during test -2223 : d0fe > bne * ;failed not equal (non zero) - -2225 : ba tsx -2226 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -2228 : d0fe > bne * ;failed not equal (non zero) - - next_test -222a : ad0202 > lda test_case ;previous test -222d : c911 > cmp #test_num - > trap_ne ;test is out of sequence -222f : d0fe > bne * ;failed not equal (non zero) - > -0012 = >test_num = test_num + 1 -2231 : a912 > lda #test_num ;*** next tests' number -2233 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - endif - - ; testing CMP - (zp) -2236 : a2de ldx #$de ;protect x & y -2238 : a0ad ldy #$ad - set_a $80,0 - > load_flag 0 -223a : a900 > lda #0 ;allow test to change I-flag (no mask) - > -223c : 48 > pha ;use stack to load status -223d : a980 > lda #$80 ;precharge accu -223f : 28 > plp - -2240 : d22c cmp (ind1+8) - tst_a $80,fc -2242 : 08 > php ;save flags -2243 : c980 > cmp #$80 ;test result - > trap_ne -2245 : d0fe > bne * ;failed not equal (non zero) - > -2247 : 68 > pla ;load status -2248 : 48 > pha - > cmp_flag fc -2249 : c931 > cmp #(fc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -224b : d0fe > bne * ;failed not equal (non zero) - > -224d : 28 > plp ;restore status - - set_a $7f,0 - > load_flag 0 -224e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2250 : 48 > pha ;use stack to load status -2251 : a97f > lda #$7f ;precharge accu -2253 : 28 > plp - -2254 : d22c cmp (ind1+8) - tst_a $7f,fzc -2256 : 08 > php ;save flags -2257 : c97f > cmp #$7f ;test result - > trap_ne -2259 : d0fe > bne * ;failed not equal (non zero) - > -225b : 68 > pla ;load status -225c : 48 > pha - > cmp_flag fzc -225d : c933 > cmp #(fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -225f : d0fe > bne * ;failed not equal (non zero) - > -2261 : 28 > plp ;restore status - - set_a $7e,0 - > load_flag 0 -2262 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2264 : 48 > pha ;use stack to load status -2265 : a97e > lda #$7e ;precharge accu -2267 : 28 > plp - -2268 : d22c cmp (ind1+8) - tst_a $7e,fn -226a : 08 > php ;save flags -226b : c97e > cmp #$7e ;test result - > trap_ne -226d : d0fe > bne * ;failed not equal (non zero) - > -226f : 68 > pla ;load status -2270 : 48 > pha - > cmp_flag fn -2271 : c9b0 > cmp #(fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2273 : d0fe > bne * ;failed not equal (non zero) - > -2275 : 28 > plp ;restore status - - set_a $80,$ff - > load_flag $ff -2276 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2278 : 48 > pha ;use stack to load status -2279 : a980 > lda #$80 ;precharge accu -227b : 28 > plp - -227c : d22c cmp (ind1+8) - tst_a $80,~fnz -227e : 08 > php ;save flags -227f : c980 > cmp #$80 ;test result - > trap_ne -2281 : d0fe > bne * ;failed not equal (non zero) - > -2283 : 68 > pla ;load status -2284 : 48 > pha - > cmp_flag ~fnz -2285 : c97d > cmp #(~fnz|fao)&m8 ;expected flags + always on bits - > - > trap_ne -2287 : d0fe > bne * ;failed not equal (non zero) - > -2289 : 28 > plp ;restore status - - set_a $7f,$ff - > load_flag $ff -228a : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -228c : 48 > pha ;use stack to load status -228d : a97f > lda #$7f ;precharge accu -228f : 28 > plp - -2290 : d22c cmp (ind1+8) - tst_a $7f,~fn -2292 : 08 > php ;save flags -2293 : c97f > cmp #$7f ;test result - > trap_ne -2295 : d0fe > bne * ;failed not equal (non zero) - > -2297 : 68 > pla ;load status -2298 : 48 > pha - > cmp_flag ~fn -2299 : c97f > cmp #(~fn|fao)&m8 ;expected flags + always on bits - > - > trap_ne -229b : d0fe > bne * ;failed not equal (non zero) - > -229d : 28 > plp ;restore status - - set_a $7e,$ff - > load_flag $ff -229e : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -22a0 : 48 > pha ;use stack to load status -22a1 : a97e > lda #$7e ;precharge accu -22a3 : 28 > plp - -22a4 : d22c cmp (ind1+8) - tst_a $7e,~fzc -22a6 : 08 > php ;save flags -22a7 : c97e > cmp #$7e ;test result - > trap_ne -22a9 : d0fe > bne * ;failed not equal (non zero) - > -22ab : 68 > pla ;load status -22ac : 48 > pha - > cmp_flag ~fzc -22ad : c9fc > cmp #(~fzc|fao)&m8 ;expected flags + always on bits - > - > trap_ne -22af : d0fe > bne * ;failed not equal (non zero) - > -22b1 : 28 > plp ;restore status - -22b2 : e0de cpx #$de - trap_ne ;x altered during test -22b4 : d0fe > bne * ;failed not equal (non zero) - -22b6 : c0ad cpy #$ad - trap_ne ;y altered during test -22b8 : d0fe > bne * ;failed not equal (non zero) - -22ba : ba tsx -22bb : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -22bd : d0fe > bne * ;failed not equal (non zero) - - next_test -22bf : ad0202 > lda test_case ;previous test -22c2 : c912 > cmp #test_num - > trap_ne ;test is out of sequence -22c4 : d0fe > bne * ;failed not equal (non zero) - > -0013 = >test_num = test_num + 1 -22c6 : a913 > lda #test_num ;*** next tests' number -22c8 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; testing logical instructions - AND EOR ORA (zp) -22cb : a242 ldx #$42 ;protect x & y - -22cd : a000 ldy #0 ;AND -22cf : a53a lda indAN ;set indirect address -22d1 : 850c sta zpt -22d3 : a53b lda indAN+1 -22d5 : 850d sta zpt+1 -22d7 : tand1 - set_ay absANa,0 - > load_flag 0 -22d7 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -22d9 : 48 > pha ;use stack to load status -22da : b95302 > lda absANa,y ;precharge accu -22dd : 28 > plp - -22de : 320c and (zpt) - tst_ay absrlo,absflo,0 -22e0 : 08 > php ;save flags -22e1 : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -22e4 : d0fe > bne * ;failed not equal (non zero) - > -22e6 : 68 > pla ;load status - > eor_flag 0 -22e7 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -22e9 : d95f02 > cmp absflo,y ;test flags - > trap_ne -22ec : d0fe > bne * ;failed not equal (non zero) - > - -22ee : e60c inc zpt -22f0 : c8 iny -22f1 : c004 cpy #4 -22f3 : d0e2 bne tand1 -22f5 : 88 dey -22f6 : c60c dec zpt -22f8 : tand2 - set_ay absANa,$ff - > load_flag $ff -22f8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -22fa : 48 > pha ;use stack to load status -22fb : b95302 > lda absANa,y ;precharge accu -22fe : 28 > plp - -22ff : 320c and (zpt) - tst_ay absrlo,absflo,$ff-fnz -2301 : 08 > php ;save flags -2302 : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -2305 : d0fe > bne * ;failed not equal (non zero) - > -2307 : 68 > pla ;load status - > eor_flag $ff-fnz -2308 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -230a : d95f02 > cmp absflo,y ;test flags - > trap_ne -230d : d0fe > bne * ;failed not equal (non zero) - > - -230f : c60c dec zpt -2311 : 88 dey -2312 : 10e4 bpl tand2 - -2314 : a000 ldy #0 ;EOR -2316 : a542 lda indEO ;set indirect address -2318 : 850c sta zpt -231a : a543 lda indEO+1 -231c : 850d sta zpt+1 -231e : teor1 - set_ay absEOa,0 - > load_flag 0 -231e : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2320 : 48 > pha ;use stack to load status -2321 : b95702 > lda absEOa,y ;precharge accu -2324 : 28 > plp - -2325 : 520c eor (zpt) - tst_ay absrlo,absflo,0 -2327 : 08 > php ;save flags -2328 : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -232b : d0fe > bne * ;failed not equal (non zero) - > -232d : 68 > pla ;load status - > eor_flag 0 -232e : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2330 : d95f02 > cmp absflo,y ;test flags - > trap_ne -2333 : d0fe > bne * ;failed not equal (non zero) - > - -2335 : e60c inc zpt -2337 : c8 iny -2338 : c004 cpy #4 -233a : d0e2 bne teor1 -233c : 88 dey -233d : c60c dec zpt -233f : teor2 - set_ay absEOa,$ff - > load_flag $ff -233f : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2341 : 48 > pha ;use stack to load status -2342 : b95702 > lda absEOa,y ;precharge accu -2345 : 28 > plp - -2346 : 520c eor (zpt) - tst_ay absrlo,absflo,$ff-fnz -2348 : 08 > php ;save flags -2349 : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -234c : d0fe > bne * ;failed not equal (non zero) - > -234e : 68 > pla ;load status - > eor_flag $ff-fnz -234f : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2351 : d95f02 > cmp absflo,y ;test flags - > trap_ne -2354 : d0fe > bne * ;failed not equal (non zero) - > - -2356 : c60c dec zpt -2358 : 88 dey -2359 : 10e4 bpl teor2 - -235b : a000 ldy #0 ;ORA -235d : a54a lda indOR ;set indirect address -235f : 850c sta zpt -2361 : a54b lda indOR+1 -2363 : 850d sta zpt+1 -2365 : tora1 - set_ay absORa,0 - > load_flag 0 -2365 : a900 > lda #0 ;allow test to change I-flag (no mask) - > -2367 : 48 > pha ;use stack to load status -2368 : b94f02 > lda absORa,y ;precharge accu -236b : 28 > plp - -236c : 120c ora (zpt) - tst_ay absrlo,absflo,0 -236e : 08 > php ;save flags -236f : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -2372 : d0fe > bne * ;failed not equal (non zero) - > -2374 : 68 > pla ;load status - > eor_flag 0 -2375 : 4930 > eor #0|fao ;invert expected flags + always on bits - > -2377 : d95f02 > cmp absflo,y ;test flags - > trap_ne -237a : d0fe > bne * ;failed not equal (non zero) - > - -237c : e60c inc zpt -237e : c8 iny -237f : c004 cpy #4 -2381 : d0e2 bne tora1 -2383 : 88 dey -2384 : c60c dec zpt -2386 : tora2 - set_ay absORa,$ff - > load_flag $ff -2386 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -2388 : 48 > pha ;use stack to load status -2389 : b94f02 > lda absORa,y ;precharge accu -238c : 28 > plp - -238d : 120c ora (zpt) - tst_ay absrlo,absflo,$ff-fnz -238f : 08 > php ;save flags -2390 : d95b02 > cmp absrlo,y ;test result - > trap_ne ; -2393 : d0fe > bne * ;failed not equal (non zero) - > -2395 : 68 > pla ;load status - > eor_flag $ff-fnz -2396 : 497d > eor #$ff-fnz|fao ;invert expected flags + always on bits - > -2398 : d95f02 > cmp absflo,y ;test flags - > trap_ne -239b : d0fe > bne * ;failed not equal (non zero) - > - -239d : c60c dec zpt -239f : 88 dey -23a0 : 10e4 bpl tora2 - -23a2 : e042 cpx #$42 - trap_ne ;x altered during test -23a4 : d0fe > bne * ;failed not equal (non zero) - -23a6 : ba tsx -23a7 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -23a9 : d0fe > bne * ;failed not equal (non zero) - - next_test -23ab : ad0202 > lda test_case ;previous test -23ae : c913 > cmp #test_num - > trap_ne ;test is out of sequence -23b0 : d0fe > bne * ;failed not equal (non zero) - > -0014 = >test_num = test_num + 1 -23b2 : a914 > lda #test_num ;*** next tests' number -23b4 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - if I_flag = 3 -23b7 : 58 cli - endif - - ; full binary add/subtract test - (zp) only - ; iterates through all combinations of operands and carry input - ; uses increments/decrements to predict result & result flags -23b8 : d8 cld -23b9 : a20e ldx #ad2 ;for indexed test -23bb : a0ff ldy #$ff ;max range -23bd : a900 lda #0 ;start with adding zeroes & no carry -23bf : 850c sta adfc ;carry in - for diag -23c1 : 850d sta ad1 ;operand 1 - accumulator -23c3 : 850e sta ad2 ;operand 2 - memory or immediate -23c5 : 8d0502 sta ada2 ;non zp -23c8 : 850f sta adrl ;expected result bits 0-7 -23ca : 8510 sta adrh ;expected result bit 8 (carry out) -23cc : a9ff lda #$ff ;complemented operand 2 for subtract -23ce : 8512 sta sb2 -23d0 : 8d0602 sta sba2 ;non zp -23d3 : a902 lda #2 ;expected Z-flag -23d5 : 8511 sta adrf -23d7 : 18 tadd clc ;test with carry clear -23d8 : 204e26 jsr chkadd -23db : e60c inc adfc ;now with carry -23dd : e60f inc adrl ;result +1 -23df : 08 php ;save N & Z from low result -23e0 : 08 php -23e1 : 68 pla ;accu holds expected flags -23e2 : 2982 and #$82 ;mask N & Z -23e4 : 28 plp -23e5 : d002 bne tadd1 -23e7 : e610 inc adrh ;result bit 8 - carry -23e9 : 0510 tadd1 ora adrh ;merge C to expected flags -23eb : 8511 sta adrf ;save expected flags except overflow -23ed : 38 sec ;test with carry set -23ee : 204e26 jsr chkadd -23f1 : c60c dec adfc ;same for operand +1 but no carry -23f3 : e60d inc ad1 -23f5 : d0e0 bne tadd ;iterate op1 -23f7 : a900 lda #0 ;preset result to op2 when op1 = 0 -23f9 : 8510 sta adrh -23fb : ee0502 inc ada2 -23fe : e60e inc ad2 -2400 : 08 php ;save NZ as operand 2 becomes the new result -2401 : 68 pla -2402 : 2982 and #$82 ;mask N00000Z0 -2404 : 8511 sta adrf ;no need to check carry as we are adding to 0 -2406 : c612 dec sb2 ;complement subtract operand 2 -2408 : ce0602 dec sba2 -240b : a50e lda ad2 -240d : 850f sta adrl -240f : d0c6 bne tadd ;iterate op2 - -2411 : e00e cpx #ad2 - trap_ne ;x altered during test -2413 : d0fe > bne * ;failed not equal (non zero) - -2415 : c0ff cpy #$ff - trap_ne ;y altered during test -2417 : d0fe > bne * ;failed not equal (non zero) - -2419 : ba tsx -241a : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -241c : d0fe > bne * ;failed not equal (non zero) - - next_test -241e : ad0202 > lda test_case ;previous test -2421 : c914 > cmp #test_num - > trap_ne ;test is out of sequence -2423 : d0fe > bne * ;failed not equal (non zero) - > -0015 = >test_num = test_num + 1 -2425 : a915 > lda #test_num ;*** next tests' number -2427 : 8d0202 > sta test_case - > ;check_ram ;uncomment to find altered RAM after each test - - - ; decimal add/subtract test - ; *** WARNING - tests documented behavior only! *** - ; only valid BCD operands are tested, the V flag is ignored - ; although V is declared as beeing valid on the 65C02 it has absolutely - ; no use in BCD math. No sign = no overflow! - ; iterates through all valid combinations of operands and carry input - ; uses increments/decrements to predict result & carry flag -242a : f8 sed -242b : a20e ldx #ad2 ;for indexed test -242d : a0ff ldy #$ff ;max range -242f : a999 lda #$99 ;start with adding 99 to 99 with carry -2431 : 850d sta ad1 ;operand 1 - accumulator -2433 : 850e sta ad2 ;operand 2 - memory or immediate -2435 : 8d0502 sta ada2 ;non zp -2438 : 850f sta adrl ;expected result bits 0-7 -243a : a901 lda #1 ;set carry in & out -243c : 850c sta adfc ;carry in - for diag -243e : 8510 sta adrh ;expected result bit 8 (carry out) -2440 : a981 lda #$81 ;set N & C (99 + 99 + C = 99 + C) -2442 : 8511 sta adrf -2444 : a900 lda #0 ;complemented operand 2 for subtract -2446 : 8512 sta sb2 -2448 : 8d0602 sta sba2 ;non zp -244b : 38 tdad sec ;test with carry set -244c : 20f724 jsr chkdad -244f : c60c dec adfc ;now with carry clear -2451 : a50f lda adrl ;decimal adjust result -2453 : d008 bne tdad1 ;skip clear carry & preset result 99 (9A-1) -2455 : c610 dec adrh -2457 : a999 lda #$99 -2459 : 850f sta adrl -245b : d012 bne tdad3 -245d : 290f tdad1 and #$f ;lower nibble mask -245f : d00c bne tdad2 ;no decimal adjust needed -2461 : c60f dec adrl ;decimal adjust (?0-6) -2463 : c60f dec adrl -2465 : c60f dec adrl -2467 : c60f dec adrl -2469 : c60f dec adrl -246b : c60f dec adrl -246d : c60f tdad2 dec adrl ;result -1 -246f : 08 tdad3 php ;save valid flags -2470 : 68 pla -2471 : 2982 and #$82 ;N-----Z- -2473 : 0510 ora adrh ;N-----ZC -2475 : 8511 sta adrf -2477 : 18 clc ;test with carry clear -2478 : 20f724 jsr chkdad -247b : e60c inc adfc ;same for operand -1 but with carry -247d : a50d lda ad1 ;decimal adjust operand 1 -247f : f015 beq tdad5 ;iterate operand 2 -2481 : 290f and #$f ;lower nibble mask -2483 : d00c bne tdad4 ;skip decimal adjust -2485 : c60d dec ad1 ;decimal adjust (?0-6) -2487 : c60d dec ad1 -2489 : c60d dec ad1 -248b : c60d dec ad1 -248d : c60d dec ad1 -248f : c60d dec ad1 -2491 : c60d tdad4 dec ad1 ;operand 1 -1 -2493 : 4c4b24 jmp tdad ;iterate op1 - -2496 : a999 tdad5 lda #$99 ;precharge op1 max -2498 : 850d sta ad1 -249a : a50e lda ad2 ;decimal adjust operand 2 -249c : f039 beq tdad7 ;end of iteration -249e : 290f and #$f ;lower nibble mask -24a0 : d018 bne tdad6 ;skip decimal adjust -24a2 : c60e dec ad2 ;decimal adjust (?0-6) -24a4 : c60e dec ad2 -24a6 : c60e dec ad2 -24a8 : c60e dec ad2 -24aa : c60e dec ad2 -24ac : c60e dec ad2 -24ae : e612 inc sb2 ;complemented decimal adjust for subtract (?9+6) -24b0 : e612 inc sb2 -24b2 : e612 inc sb2 -24b4 : e612 inc sb2 -24b6 : e612 inc sb2 -24b8 : e612 inc sb2 -24ba : c60e tdad6 dec ad2 ;operand 2 -1 -24bc : e612 inc sb2 ;complemented operand for subtract -24be : a512 lda sb2 -24c0 : 8d0602 sta sba2 ;copy as non zp operand -24c3 : a50e lda ad2 -24c5 : 8d0502 sta ada2 ;copy as non zp operand -24c8 : 850f sta adrl ;new result since op1+carry=00+carry +op2=op2 -24ca : 08 php ;save flags -24cb : 68 pla -24cc : 2982 and #$82 ;N-----Z- -24ce : 0901 ora #1 ;N-----ZC -24d0 : 8511 sta adrf -24d2 : e610 inc adrh ;result carry -24d4 : 4c4b24 jmp tdad ;iterate op2 - -24d7 : e00e tdad7 cpx #ad2 - trap_ne ;x altered during test -24d9 : d0fe > bne * ;failed not equal (non zero) - -24db : c0ff cpy #$ff - trap_ne ;y altered during test -24dd : d0fe > bne * ;failed not equal (non zero) - -24df : ba tsx -24e0 : e0ff cpx #$ff - trap_ne ;sp push/pop mismatch -24e2 : d0fe > bne * ;failed not equal (non zero) - -24e4 : d8 cld - -24e5 : ad0202 lda test_case -24e8 : c915 cmp #test_num - trap_ne ;previous test is out of sequence -24ea : d0fe > bne * ;failed not equal (non zero) - -24ec : a9f0 lda #$f0 ;mark opcode testing complete -24ee : 8d0202 sta test_case - - ; final RAM integrity test - ; verifies that none of the previous tests has altered RAM outside of the - ; designated write areas. - check_ram - > ;RAM check disabled - RAM size not set - - ; *** DEBUG INFO *** - ; to debug checksum errors uncomment check_ram in the next_test macro to - ; narrow down the responsible opcode. - ; may give false errors when monitor, OS or other background activity is - ; allowed during previous tests. - - - ; S U C C E S S ************************************************ - ; ------------- - success ;if you get here everything went well -24f1 : 4cf124 > jmp * ;test passed, no errors - - ; ------------- - ; S U C C E S S ************************************************ -24f4 : 4c0004 jmp start ;run again - - ; core subroutine of the decimal add/subtract test - ; *** WARNING - tests documented behavior only! *** - ; only valid BCD operands are tested, V flag is ignored - ; iterates through all valid combinations of operands and carry input - ; uses increments/decrements to predict result & carry flag -24f7 : chkdad - ; decimal ADC / SBC zp -24f7 : 08 php ;save carry for subtract -24f8 : a50d lda ad1 -24fa : 650e adc ad2 ;perform add -24fc : 08 php -24fd : c50f cmp adrl ;check result - trap_ne ;bad result -24ff : d0fe > bne * ;failed not equal (non zero) - -2501 : 68 pla ;check flags -2502 : 2983 and #$83 ;mask N-----ZC -2504 : c511 cmp adrf - trap_ne ;bad flags -2506 : d0fe > bne * ;failed not equal (non zero) - -2508 : 28 plp -2509 : 08 php ;save carry for next add -250a : a50d lda ad1 -250c : e512 sbc sb2 ;perform subtract -250e : 08 php -250f : c50f cmp adrl ;check result - trap_ne ;bad result -2511 : d0fe > bne * ;failed not equal (non zero) - -2513 : 68 pla ;check flags -2514 : 2983 and #$83 ;mask N-----ZC -2516 : c511 cmp adrf - trap_ne ;bad flags -2518 : d0fe > bne * ;failed not equal (non zero) - -251a : 28 plp - ; decimal ADC / SBC abs -251b : 08 php ;save carry for subtract -251c : a50d lda ad1 -251e : 6d0502 adc ada2 ;perform add -2521 : 08 php -2522 : c50f cmp adrl ;check result - trap_ne ;bad result -2524 : d0fe > bne * ;failed not equal (non zero) - -2526 : 68 pla ;check flags -2527 : 2983 and #$83 ;mask N-----ZC -2529 : c511 cmp adrf - trap_ne ;bad flags -252b : d0fe > bne * ;failed not equal (non zero) - -252d : 28 plp -252e : 08 php ;save carry for next add -252f : a50d lda ad1 -2531 : ed0602 sbc sba2 ;perform subtract -2534 : 08 php -2535 : c50f cmp adrl ;check result - trap_ne ;bad result -2537 : d0fe > bne * ;failed not equal (non zero) - -2539 : 68 pla ;check flags -253a : 2983 and #$83 ;mask N-----ZC -253c : c511 cmp adrf - trap_ne ;bad flags -253e : d0fe > bne * ;failed not equal (non zero) - -2540 : 28 plp - ; decimal ADC / SBC # -2541 : 08 php ;save carry for subtract -2542 : a50e lda ad2 -2544 : 8d0b02 sta ex_adci+1 ;set ADC # operand -2547 : a50d lda ad1 -2549 : 200a02 jsr ex_adci ;execute ADC # in RAM -254c : 08 php -254d : c50f cmp adrl ;check result - trap_ne ;bad result -254f : d0fe > bne * ;failed not equal (non zero) - -2551 : 68 pla ;check flags -2552 : 2983 and #$83 ;mask N-----ZC -2554 : c511 cmp adrf - trap_ne ;bad flags -2556 : d0fe > bne * ;failed not equal (non zero) - -2558 : 28 plp -2559 : 08 php ;save carry for next add -255a : a512 lda sb2 -255c : 8d0e02 sta ex_sbci+1 ;set SBC # operand -255f : a50d lda ad1 -2561 : 200d02 jsr ex_sbci ;execute SBC # in RAM -2564 : 08 php -2565 : c50f cmp adrl ;check result - trap_ne ;bad result -2567 : d0fe > bne * ;failed not equal (non zero) - -2569 : 68 pla ;check flags -256a : 2983 and #$83 ;mask N-----ZC -256c : c511 cmp adrf - trap_ne ;bad flags -256e : d0fe > bne * ;failed not equal (non zero) - -2570 : 28 plp - ; decimal ADC / SBC zp,x -2571 : 08 php ;save carry for subtract -2572 : a50d lda ad1 -2574 : 7500 adc 0,x ;perform add -2576 : 08 php -2577 : c50f cmp adrl ;check result - trap_ne ;bad result -2579 : d0fe > bne * ;failed not equal (non zero) - -257b : 68 pla ;check flags -257c : 2983 and #$83 ;mask N-----ZC -257e : c511 cmp adrf - trap_ne ;bad flags -2580 : d0fe > bne * ;failed not equal (non zero) - -2582 : 28 plp -2583 : 08 php ;save carry for next add -2584 : a50d lda ad1 -2586 : f504 sbc sb2-ad2,x ;perform subtract -2588 : 08 php -2589 : c50f cmp adrl ;check result - trap_ne ;bad result -258b : d0fe > bne * ;failed not equal (non zero) - -258d : 68 pla ;check flags -258e : 2983 and #$83 ;mask N-----ZC -2590 : c511 cmp adrf - trap_ne ;bad flags -2592 : d0fe > bne * ;failed not equal (non zero) - -2594 : 28 plp - ; decimal ADC / SBC abs,x -2595 : 08 php ;save carry for subtract -2596 : a50d lda ad1 -2598 : 7df701 adc ada2-ad2,x ;perform add -259b : 08 php -259c : c50f cmp adrl ;check result - trap_ne ;bad result -259e : d0fe > bne * ;failed not equal (non zero) - -25a0 : 68 pla ;check flags -25a1 : 2983 and #$83 ;mask N-----ZC -25a3 : c511 cmp adrf - trap_ne ;bad flags -25a5 : d0fe > bne * ;failed not equal (non zero) - -25a7 : 28 plp -25a8 : 08 php ;save carry for next add -25a9 : a50d lda ad1 -25ab : fdf801 sbc sba2-ad2,x ;perform subtract -25ae : 08 php -25af : c50f cmp adrl ;check result - trap_ne ;bad result -25b1 : d0fe > bne * ;failed not equal (non zero) - -25b3 : 68 pla ;check flags -25b4 : 2983 and #$83 ;mask N-----ZC -25b6 : c511 cmp adrf - trap_ne ;bad flags -25b8 : d0fe > bne * ;failed not equal (non zero) - -25ba : 28 plp - ; decimal ADC / SBC abs,y -25bb : 08 php ;save carry for subtract -25bc : a50d lda ad1 -25be : 790601 adc ada2-$ff,y ;perform add -25c1 : 08 php -25c2 : c50f cmp adrl ;check result - trap_ne ;bad result -25c4 : d0fe > bne * ;failed not equal (non zero) - -25c6 : 68 pla ;check flags -25c7 : 2983 and #$83 ;mask N-----ZC -25c9 : c511 cmp adrf - trap_ne ;bad flags -25cb : d0fe > bne * ;failed not equal (non zero) - -25cd : 28 plp -25ce : 08 php ;save carry for next add -25cf : a50d lda ad1 -25d1 : f90701 sbc sba2-$ff,y ;perform subtract -25d4 : 08 php -25d5 : c50f cmp adrl ;check result - trap_ne ;bad result -25d7 : d0fe > bne * ;failed not equal (non zero) - -25d9 : 68 pla ;check flags -25da : 2983 and #$83 ;mask N-----ZC -25dc : c511 cmp adrf - trap_ne ;bad flags -25de : d0fe > bne * ;failed not equal (non zero) - -25e0 : 28 plp - ; decimal ADC / SBC (zp,x) -25e1 : 08 php ;save carry for subtract -25e2 : a50d lda ad1 -25e4 : 6144 adc (lo adi2-ad2,x) ;perform add -25e6 : 08 php -25e7 : c50f cmp adrl ;check result - trap_ne ;bad result -25e9 : d0fe > bne * ;failed not equal (non zero) - -25eb : 68 pla ;check flags -25ec : 2983 and #$83 ;mask N-----ZC -25ee : c511 cmp adrf - trap_ne ;bad flags -25f0 : d0fe > bne * ;failed not equal (non zero) - -25f2 : 28 plp -25f3 : 08 php ;save carry for next add -25f4 : a50d lda ad1 -25f6 : e146 sbc (lo sbi2-ad2,x) ;perform subtract -25f8 : 08 php -25f9 : c50f cmp adrl ;check result - trap_ne ;bad result -25fb : d0fe > bne * ;failed not equal (non zero) - -25fd : 68 pla ;check flags -25fe : 2983 and #$83 ;mask N-----ZC -2600 : c511 cmp adrf - trap_ne ;bad flags -2602 : d0fe > bne * ;failed not equal (non zero) - -2604 : 28 plp - ; decimal ADC / SBC (abs),y -2605 : 08 php ;save carry for subtract -2606 : a50d lda ad1 -2608 : 7156 adc (adiy2),y ;perform add -260a : 08 php -260b : c50f cmp adrl ;check result - trap_ne ;bad result -260d : d0fe > bne * ;failed not equal (non zero) - -260f : 68 pla ;check flags -2610 : 2983 and #$83 ;mask N-----ZC -2612 : c511 cmp adrf - trap_ne ;bad flags -2614 : d0fe > bne * ;failed not equal (non zero) - -2616 : 28 plp -2617 : 08 php ;save carry for next add -2618 : a50d lda ad1 -261a : f158 sbc (sbiy2),y ;perform subtract -261c : 08 php -261d : c50f cmp adrl ;check result - trap_ne ;bad result -261f : d0fe > bne * ;failed not equal (non zero) - -2621 : 68 pla ;check flags -2622 : 2983 and #$83 ;mask N-----ZC -2624 : c511 cmp adrf - trap_ne ;bad flags -2626 : d0fe > bne * ;failed not equal (non zero) - -2628 : 28 plp - ; decimal ADC / SBC (zp) -2629 : 08 php ;save carry for subtract -262a : a50d lda ad1 -262c : 7252 adc (adi2) ;perform add -262e : 08 php -262f : c50f cmp adrl ;check result - trap_ne ;bad result -2631 : d0fe > bne * ;failed not equal (non zero) - -2633 : 68 pla ;check flags -2634 : 2983 and #$83 ;mask N-----ZC -2636 : c511 cmp adrf - trap_ne ;bad flags -2638 : d0fe > bne * ;failed not equal (non zero) - -263a : 28 plp -263b : 08 php ;save carry for next add -263c : a50d lda ad1 -263e : f254 sbc (sbi2) ;perform subtract -2640 : 08 php -2641 : c50f cmp adrl ;check result - trap_ne ;bad result -2643 : d0fe > bne * ;failed not equal (non zero) - -2645 : 68 pla ;check flags -2646 : 2983 and #$83 ;mask N-----ZC -2648 : c511 cmp adrf - trap_ne ;bad flags -264a : d0fe > bne * ;failed not equal (non zero) - -264c : 28 plp -264d : 60 rts - - ; core subroutine of the full binary add/subtract test - ; iterates through all combinations of operands and carry input - ; uses increments/decrements to predict result & result flags -264e : a511 chkadd lda adrf ;add V-flag if overflow -2650 : 2983 and #$83 ;keep N-----ZC / clear V -2652 : 48 pha -2653 : a50d lda ad1 ;test sign unequal between operands -2655 : 450e eor ad2 -2657 : 300a bmi ckad1 ;no overflow possible - operands have different sign -2659 : a50d lda ad1 ;test sign equal between operands and result -265b : 450f eor adrl -265d : 1004 bpl ckad1 ;no overflow occured - operand and result have same sign -265f : 68 pla -2660 : 0940 ora #$40 ;set V -2662 : 48 pha -2663 : 68 ckad1 pla -2664 : 8511 sta adrf ;save expected flags - ; binary ADC / SBC (zp) -2666 : 08 php ;save carry for subtract -2667 : a50d lda ad1 -2669 : 7252 adc (adi2) ;perform add -266b : 08 php -266c : c50f cmp adrl ;check result - trap_ne ;bad result -266e : d0fe > bne * ;failed not equal (non zero) - -2670 : 68 pla ;check flags -2671 : 29c3 and #$c3 ;mask NV----ZC -2673 : c511 cmp adrf - trap_ne ;bad flags -2675 : d0fe > bne * ;failed not equal (non zero) - -2677 : 28 plp -2678 : 08 php ;save carry for next add -2679 : a50d lda ad1 -267b : f254 sbc (sbi2) ;perform subtract -267d : 08 php -267e : c50f cmp adrl ;check result - trap_ne ;bad result -2680 : d0fe > bne * ;failed not equal (non zero) - -2682 : 68 pla ;check flags -2683 : 29c3 and #$c3 ;mask NV----ZC -2685 : c511 cmp adrf - trap_ne ;bad flags -2687 : d0fe > bne * ;failed not equal (non zero) - -2689 : 28 plp -268a : 60 rts - - ; target for the jump indirect test -268b : 9126 ji_adr dw test_ji -268d : 8216 dw ji_ret - -268f : 88 dey -2690 : 88 dey -2691 : test_ji -2691 : 08 php ;either SP or Y count will fail, if we do not hit -2692 : 88 dey -2693 : 88 dey -2694 : 88 dey -2695 : 28 plp - trap_cs ;flags loaded? -2696 : b0fe > bcs * ;failed carry set - - trap_vs -2698 : 70fe > bvs * ;failed overflow set - - trap_mi -269a : 30fe > bmi * ;failed minus (bit 7 set) - - trap_eq -269c : f0fe > beq * ;failed equal (zero) - -269e : c949 cmp #'I' ;registers loaded? - trap_ne -26a0 : d0fe > bne * ;failed not equal (non zero) - -26a2 : e04e cpx #'N' - trap_ne -26a4 : d0fe > bne * ;failed not equal (non zero) - -26a6 : c041 cpy #('D'-3) - trap_ne -26a8 : d0fe > bne * ;failed not equal (non zero) - -26aa : 48 pha ;save a,x -26ab : 8a txa -26ac : 48 pha -26ad : ba tsx -26ae : e0fd cpx #$fd ;check SP - trap_ne -26b0 : d0fe > bne * ;failed not equal (non zero) - -26b2 : 68 pla ;restore x -26b3 : aa tax - set_stat $ff - > load_flag $ff -26b4 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -26b6 : 48 > pha ;use stack to load status -26b7 : 28 > plp - -26b8 : 68 pla ;restore a -26b9 : e8 inx ;return registers with modifications -26ba : 49aa eor #$aa ;N=1, V=1, Z=0, C=1 -26bc : 6cff02 jmp (ji_tab+2) -26bf : ea nop -26c0 : ea nop - trap ;runover protection -26c1 : 4cc126 > jmp * ;failed anyway - -26c4 : 4c0004 jmp start ;catastrophic error - cannot continue - - ; target for the jump indirect test -26c7 : 0e27 jxi_adr dw trap_ind -26c9 : 0e27 dw trap_ind -26cb : d526 dw test_jxi ;+4 -26cd : ce16 dw jxi_ret ;+6 -26cf : 0e27 dw trap_ind -26d1 : 0e27 dw trap_ind - -26d3 : 88 dey -26d4 : 88 dey -26d5 : test_jxi -26d5 : 08 php ;either SP or Y count will fail, if we do not hit -26d6 : 88 dey -26d7 : 88 dey -26d8 : 88 dey -26d9 : 28 plp - trap_cs ;flags loaded? -26da : b0fe > bcs * ;failed carry set - - trap_vs -26dc : 70fe > bvs * ;failed overflow set - - trap_mi -26de : 30fe > bmi * ;failed minus (bit 7 set) - - trap_eq -26e0 : f0fe > beq * ;failed equal (zero) - -26e2 : c958 cmp #'X' ;registers loaded? - trap_ne -26e4 : d0fe > bne * ;failed not equal (non zero) - -26e6 : e004 cpx #4 - trap_ne -26e8 : d0fe > bne * ;failed not equal (non zero) - -26ea : c046 cpy #('I'-3) - trap_ne -26ec : d0fe > bne * ;failed not equal (non zero) - -26ee : 48 pha ;save a,x -26ef : 8a txa -26f0 : 48 pha -26f1 : ba tsx -26f2 : e0fd cpx #$fd ;check SP - trap_ne -26f4 : d0fe > bne * ;failed not equal (non zero) - -26f6 : 68 pla ;restore x -26f7 : aa tax - set_stat $ff - > load_flag $ff -26f8 : a9ff > lda #$ff ;allow test to change I-flag (no mask) - > -26fa : 48 > pha ;use stack to load status -26fb : 28 > plp - -26fc : 68 pla ;restore a -26fd : e8 inx ;return registers with modifications -26fe : e8 inx -26ff : 49aa eor #$aa ;N=1, V=1, Z=0, C=1 -2701 : 7cf902 jmp (jxi_tab,x) -2704 : ea nop -2705 : ea nop - trap ;runover protection -2706 : 4c0627 > jmp * ;failed anyway - -2709 : 4c0004 jmp start ;catastrophic error - cannot continue - - ; JMP (abs,x) with bad x -270c : ea nop -270d : ea nop -270e : trap_ind -270e : ea nop -270f : ea nop - trap ;near miss indexed indirect jump -2710 : 4c1027 > jmp * ;failed anyway - -2713 : 4c0004 jmp start ;catastrophic error - cannot continue - - ;trap in case of unexpected IRQ, NMI, BRK, RESET -2716 : nmi_trap - trap ;check stack for conditions at NMI -2716 : 4c1627 > jmp * ;failed anyway - -2719 : 4c0004 jmp start ;catastrophic error - cannot continue -271c : res_trap - trap ;unexpected RESET -271c : 4c1c27 > jmp * ;failed anyway - -271f : 4c0004 jmp start ;catastrophic error - cannot continue - -2722 : 88 dey -2723 : 88 dey -2724 : irq_trap ;BRK test or unextpected BRK or IRQ -2724 : 08 php ;either SP or Y count will fail, if we do not hit -2725 : 88 dey -2726 : 88 dey -2727 : 88 dey - ;next traps could be caused by unexpected BRK or IRQ - ;check stack for BREAK and originating location - ;possible jump/branch into weeds (uninitialized space) -2728 : c9bd cmp #$ff-'B' ;BRK pass 2 registers loaded? -272a : f042 beq break2 -272c : c942 cmp #'B' ;BRK pass 1 registers loaded? - trap_ne -272e : d0fe > bne * ;failed not equal (non zero) - -2730 : e052 cpx #'R' - trap_ne -2732 : d0fe > bne * ;failed not equal (non zero) - -2734 : c048 cpy #'K'-3 - trap_ne -2736 : d0fe > bne * ;failed not equal (non zero) - -2738 : 850a sta irq_a ;save registers during break test -273a : 860b stx irq_x -273c : ba tsx ;test break on stack -273d : bd0201 lda $102,x - cmp_flag 0 ;break test should have B=1 & unused=1 on stack -2740 : c930 > cmp #(0 |fao)&m8 ;expected flags + always on bits - - trap_ne ;possible no break flag on stack -2742 : d0fe > bne * ;failed not equal (non zero) - -2744 : 68 pla - cmp_flag intdis ;should have added interrupt disable -2745 : c934 > cmp #(intdis |fao)&m8 ;expected flags + always on bits - - trap_ne -2747 : d0fe > bne * ;failed not equal (non zero) - -2749 : ba tsx -274a : e0fc cpx #$fc ;sp -3? (return addr, flags) - trap_ne -274c : d0fe > bne * ;failed not equal (non zero) - -274e : adff01 lda $1ff ;propper return on stack -2751 : c917 cmp #hi(brk_ret0) - trap_ne -2753 : d0fe > bne * ;failed not equal (non zero) - -2755 : adfe01 lda $1fe -2758 : c920 cmp #lo(brk_ret0) - trap_ne -275a : d0fe > bne * ;failed not equal (non zero) - - load_flag $ff -275c : a9ff > lda #$ff ;allow test to change I-flag (no mask) - -275e : 48 pha -275f : a60b ldx irq_x -2761 : e8 inx ;return registers with modifications -2762 : a50a lda irq_a -2764 : 49aa eor #$aa -2766 : 28 plp ;N=1, V=1, Z=1, C=1 but original flags should be restored -2767 : 40 rti - trap ;runover protection -2768 : 4c6827 > jmp * ;failed anyway - -276b : 4c0004 jmp start ;catastrophic error - cannot continue - -276e : break2 ;BRK pass 2 -276e : e0ad cpx #$ff-'R' - trap_ne -2770 : d0fe > bne * ;failed not equal (non zero) - -2772 : c0b1 cpy #$ff-'K'-3 - trap_ne -2774 : d0fe > bne * ;failed not equal (non zero) - -2776 : 850a sta irq_a ;save registers during break test -2778 : 860b stx irq_x -277a : ba tsx ;test break on stack -277b : bd0201 lda $102,x - cmp_flag $ff ;break test should have B=1 -277e : c9ff > cmp #($ff |fao)&m8 ;expected flags + always on bits - - trap_ne ;possibly no break flag on stack -2780 : d0fe > bne * ;failed not equal (non zero) - -2782 : 68 pla - cmp_flag $ff-decmode ;actual passed flags should have decmode cleared -2783 : c9f7 > cmp #($ff-decmode |fao)&m8 ;expected flags + always on bits - - trap_ne -2785 : d0fe > bne * ;failed not equal (non zero) - -2787 : ba tsx -2788 : e0fc cpx #$fc ;sp -3? (return addr, flags) - trap_ne -278a : d0fe > bne * ;failed not equal (non zero) - -278c : adff01 lda $1ff ;propper return on stack -278f : c917 cmp #hi(brk_ret1) - trap_ne -2791 : d0fe > bne * ;failed not equal (non zero) - -2793 : adfe01 lda $1fe -2796 : c946 cmp #lo(brk_ret1) - trap_ne -2798 : d0fe > bne * ;failed not equal (non zero) - - load_flag intdis -279a : a904 > lda #intdis ;allow test to change I-flag (no mask) - -279c : 48 pha -279d : a60b ldx irq_x -279f : e8 inx ;return registers with modifications -27a0 : a50a lda irq_a -27a2 : 49aa eor #$aa -27a4 : 28 plp ;N=0, V=0, Z=0, C=0 but original flags should be restored -27a5 : 40 rti - trap ;runover protection -27a6 : 4ca627 > jmp * ;failed anyway - -27a9 : 4c0004 jmp start ;catastrophic error - cannot continue - - if report = 1 - include "report.i65" - endif - - ;copy of data to initialize BSS segment - if load_data_direct != 1 - zp_init - zp1_ db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR - zp7f_ db $7f ;test pattern for compare - ;logical zeropage operands - zpOR_ db 0,$1f,$71,$80 ;test pattern for OR - zpAN_ db $0f,$ff,$7f,$80 ;test pattern for AND - zpEO_ db $ff,$0f,$8f,$8f ;test pattern for EOR - ;indirect addressing pointers - ind1_ dw abs1 ;indirect pointer to pattern in absolute memory - dw abs1+1 - dw abs1+2 - dw abs1+3 - dw abs7f - inw1_ dw abs1-$f8 ;indirect pointer for wrap-test pattern - indt_ dw abst ;indirect pointer to store area in absolute memory - dw abst+1 - dw abst+2 - dw abst+3 - inwt_ dw abst-$f8 ;indirect pointer for wrap-test store - indAN_ dw absAN ;indirect pointer to AND pattern in absolute memory - dw absAN+1 - dw absAN+2 - dw absAN+3 - indEO_ dw absEO ;indirect pointer to EOR pattern in absolute memory - dw absEO+1 - dw absEO+2 - dw absEO+3 - indOR_ dw absOR ;indirect pointer to OR pattern in absolute memory - dw absOR+1 - dw absOR+2 - dw absOR+3 - ;add/subtract indirect pointers - adi2_ dw ada2 ;indirect pointer to operand 2 in absolute memory - sbi2_ dw sba2 ;indirect pointer to complemented operand 2 (SBC) - adiy2_ dw ada2-$ff ;with offset for indirect indexed - sbiy2_ dw sba2-$ff - zp_end - if (zp_end - zp_init) != (zp_bss_end - zp_bss) - ;force assembler error if size is different - ERROR ERROR ERROR ;mismatch between bss and zeropage data - endif - data_init - ex_adc_ adc #0 ;execute immediate opcodes - rts - ex_sbc_ sbc #0 ;execute immediate opcodes - rts - abs1_ db $c3,$82,$41,0 ;test patterns for LDx BIT ROL ROR ASL LSR - abs7f_ db $7f ;test pattern for compare - ;loads - fLDx_ db fn,fn,0,fz ;expected flags for load - ;shifts - rASL_ ;expected result ASL & ROL -carry - rROL_ db $86,$04,$82,0 ; " - rROLc_ db $87,$05,$83,1 ;expected result ROL +carry - rLSR_ ;expected result LSR & ROR -carry - rROR_ db $61,$41,$20,0 ; " - rRORc_ db $e1,$c1,$a0,$80 ;expected result ROR +carry - fASL_ ;expected flags for shifts - fROL_ db fnc,fc,fn,fz ;no carry in - fROLc_ db fnc,fc,fn,0 ;carry in - fLSR_ - fROR_ db fc,0,fc,fz ;no carry in - fRORc_ db fnc,fn,fnc,fn ;carry in - ;increments (decrements) - rINC_ db $7f,$80,$ff,0,1 ;expected result for INC/DEC - fINC_ db 0,fn,fn,fz,0 ;expected flags for INC/DEC - ;logical memory operand - absOR_ db 0,$1f,$71,$80 ;test pattern for OR - absAN_ db $0f,$ff,$7f,$80 ;test pattern for AND - absEO_ db $ff,$0f,$8f,$8f ;test pattern for EOR - ;logical accu operand - absORa_ db 0,$f1,$1f,0 ;test pattern for OR - absANa_ db $f0,$ff,$ff,$ff ;test pattern for AND - absEOa_ db $ff,$f0,$f0,$0f ;test pattern for EOR - ;logical results - absrlo_ db 0,$ff,$7f,$80 - absflo_ db fz,fn,0,fn - data_end - if (data_end - data_init) != (data_bss_end - data_bss) - ;force assembler error if size is different - ERROR ERROR ERROR ;mismatch between bss and data - endif - - vec_init - dw nmi_trap - dw res_trap - dw irq_trap - vec_bss equ $fffa - endif ;end of RAM init data - - ; code at end of image due to the need to add blank space as required - if ($ff & (ji_ret - * - 2)) < ($ff & (jxi_ret - * - 2)) - ; JMP (abs) when $xxff and $xx00 are from same page - ds lo(ji_ret - * - 2) - nop - nop - ji_px nop ;low address byte matched with ji_ret - nop - trap ;jmp indirect page cross bug - - ; JMP (abs,x) when $xxff and $xx00 are from same page - ds lo(jxi_ret - * - 2) - nop - nop - jxi_px nop ;low address byte matched with jxi_ret - nop - trap ;jmp indexed indirect page cross bug - else - ; JMP (abs,x) when $xxff and $xx00 are from same page -27ac : 00000000000000.. ds lo(jxi_ret - * - 2) -27cc : ea nop -27cd : ea nop -27ce : ea jxi_px nop ;low address byte matched with jxi_ret -27cf : ea nop - trap ;jmp indexed indirect page cross bug -27d0 : 4cd027 > jmp * ;failed anyway - - - ; JMP (abs) when $xxff and $xx00 are from same page -27d3 : 00000000000000.. ds lo(ji_ret - * - 2) -2880 : ea nop -2881 : ea nop -2882 : ea ji_px nop ;low address byte matched with ji_ret -2883 : ea nop - trap ;jmp indirect page cross bug -2884 : 4c8428 > jmp * ;failed anyway - - endif - - if (load_data_direct = 1) & (ROM_vectors = 1) -fffa = org $fffa ;vectors -fffa : 1627 dw nmi_trap -fffc : 1c27 dw res_trap -fffe : 2427 dw irq_trap - endif - -fffa = end start - -No errors in pass 2. -Wrote binary from address $0000 through $ffff. -Total size 65536 bytes. -Program start address is at $0400 (1024). - \ No newline at end of file diff --git a/go.mod b/go.mod index f886ce1..e48ba2d 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3 github.com/godbus/dbus/v5 v5.0.3 // indirect github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect + github.com/ivanizag/iz6502 v1.2.1 github.com/kr/text v0.2.0 // indirect github.com/pkg/profile v1.5.0 github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/go.sum b/go.sum index 0da064a..6748231 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8= github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw= +github.com/ivanizag/iz6502 v1.2.1 h1:nwrKzSKVhG9mO6kUE68o07aX6Qn5AuA6WFm4twCx8mA= +github.com/ivanizag/iz6502 v1.2.1/go.mod h1:h4gbw3IK6WCYawi00kBhQ4ACeQkGWgqbUeAgDaQpy6s= github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc= github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= diff --git a/romX.go b/romX.go index a83f4d3..b51baa2 100644 --- a/romX.go +++ b/romX.go @@ -3,7 +3,7 @@ package izapple2 import ( "fmt" - "github.com/ivanizag/izapple2/core6502" + "github.com/ivanizag/iz6502" ) /* @@ -31,7 +31,7 @@ go run *.go -rom ROMX.FIRM.dump -disk ROM\ X\ 20-10-22.dsk type romX struct { a *Apple2 - memory core6502.Memory + memory iz6502.Memory activationStep int systemBank uint8 mainBank uint8 @@ -74,7 +74,7 @@ const ( */ ) -func newRomX(a *Apple2, memory core6502.Memory) (*romX, error) { +func newRomX(a *Apple2, memory iz6502.Memory) (*romX, error) { var rx romX rx.a = a rx.memory = memory