mirror of
https://github.com/pevans/erc-c.git
synced 2024-12-21 08:30:55 +00:00
Change last_addr field to eff_addr
This commit is contained in:
parent
e56ed9ea43
commit
7d6886a3a8
@ -56,7 +56,6 @@
|
|||||||
*/
|
*/
|
||||||
#define APPLE2_BANK_OFFSET 0xD000
|
#define APPLE2_BANK_OFFSET 0xD000
|
||||||
|
|
||||||
|
|
||||||
extern SEGMENT_READER(apple2_mem_read_bank);
|
extern SEGMENT_READER(apple2_mem_read_bank);
|
||||||
extern SEGMENT_WRITER(apple2_mem_write_bank);
|
extern SEGMENT_WRITER(apple2_mem_write_bank);
|
||||||
extern int apple2_mem_init_peripheral_rom(apple2 *);
|
extern int apple2_mem_init_peripheral_rom(apple2 *);
|
||||||
|
@ -68,7 +68,7 @@ typedef struct {
|
|||||||
* memory. Another way of thinking of this is, this address is where
|
* memory. Another way of thinking of this is, this address is where
|
||||||
* we found the value we care about.
|
* we found the value we care about.
|
||||||
*/
|
*/
|
||||||
vm_16bit last_addr;
|
vm_16bit eff_addr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Our program counter register; this is what we'll use to determine
|
* Our program counter register; this is what we'll use to determine
|
||||||
|
@ -58,11 +58,11 @@ static int addr_modes[] = {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* This will both define the `eff_addr` variable (which is the effective
|
* This will both define the `eff_addr` variable (which is the effective
|
||||||
* address) and assign that value to the `last_addr` field of the cpu.
|
* address) and assign that value to the `eff_addr` field of the cpu.
|
||||||
*/
|
*/
|
||||||
#define EFF_ADDR(addr) \
|
#define EFF_ADDR(addr) \
|
||||||
vm_16bit eff_addr = addr; \
|
vm_16bit eff_addr = addr; \
|
||||||
cpu->last_addr = eff_addr
|
cpu->eff_addr = eff_addr
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A tiny convenience macro to help us define address resolver
|
* A tiny convenience macro to help us define address resolver
|
||||||
|
@ -59,8 +59,8 @@ DEFINE_INST(cpy)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(dec)
|
DEFINE_INST(dec)
|
||||||
{
|
{
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper - 1);
|
mos6502_set(cpu, cpu->eff_addr, oper - 1);
|
||||||
mos6502_modify_status(cpu, MOS_NEGATIVE | MOS_ZERO, oper - 1);
|
mos6502_modify_status(cpu, MOS_NEGATIVE | MOS_ZERO, oper - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,8 +90,8 @@ DEFINE_INST(dey)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(inc)
|
DEFINE_INST(inc)
|
||||||
{
|
{
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper + 1);
|
mos6502_set(cpu, cpu->eff_addr, oper + 1);
|
||||||
mos6502_modify_status(cpu, MOS_NEGATIVE | MOS_ZERO, oper + 1);
|
mos6502_modify_status(cpu, MOS_NEGATIVE | MOS_ZERO, oper + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,8 @@ DEFINE_INST(asl)
|
|||||||
|
|
||||||
oper <<= 1;
|
oper <<= 1;
|
||||||
|
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper);
|
mos6502_set(cpu, cpu->eff_addr, oper);
|
||||||
} else {
|
} else {
|
||||||
cpu->A = oper;
|
cpu->A = oper;
|
||||||
}
|
}
|
||||||
@ -97,8 +97,8 @@ DEFINE_INST(lsr)
|
|||||||
|
|
||||||
oper >>= 1;
|
oper >>= 1;
|
||||||
|
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper);
|
mos6502_set(cpu, cpu->eff_addr, oper);
|
||||||
} else {
|
} else {
|
||||||
cpu->A = oper;
|
cpu->A = oper;
|
||||||
}
|
}
|
||||||
@ -136,8 +136,8 @@ DEFINE_INST(rol)
|
|||||||
oper |= 0x01;
|
oper |= 0x01;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper);
|
mos6502_set(cpu, cpu->eff_addr, oper);
|
||||||
} else {
|
} else {
|
||||||
cpu->A = oper;
|
cpu->A = oper;
|
||||||
}
|
}
|
||||||
@ -163,8 +163,8 @@ DEFINE_INST(ror)
|
|||||||
oper |= 0x80;
|
oper |= 0x80;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu->last_addr) {
|
if (cpu->eff_addr) {
|
||||||
mos6502_set(cpu, cpu->last_addr, oper);
|
mos6502_set(cpu, cpu->eff_addr, oper);
|
||||||
} else {
|
} else {
|
||||||
cpu->A = oper;
|
cpu->A = oper;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* program counter to the last effective address.
|
* program counter to the last effective address.
|
||||||
*/
|
*/
|
||||||
#define JUMP_IF(cond) \
|
#define JUMP_IF(cond) \
|
||||||
if (cond) cpu->PC = cpu->last_addr; else cpu->PC += 2
|
if (cond) cpu->PC = cpu->eff_addr; else cpu->PC += 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Branch if the carry flag is clear.
|
* Branch if the carry flag is clear.
|
||||||
|
@ -157,7 +157,7 @@ mos6502_create(vm_segment *rmem, vm_segment *wmem)
|
|||||||
|
|
||||||
mos6502_set_memory(cpu, rmem, wmem);
|
mos6502_set_memory(cpu, rmem, wmem);
|
||||||
|
|
||||||
cpu->last_addr = 0;
|
cpu->eff_addr = 0;
|
||||||
cpu->PC = 0;
|
cpu->PC = 0;
|
||||||
cpu->A = 0;
|
cpu->A = 0;
|
||||||
cpu->X = 0;
|
cpu->X = 0;
|
||||||
@ -293,7 +293,7 @@ mos6502_cycles(mos6502 *cpu, vm_8bit opcode)
|
|||||||
addr_mode = mos6502_addr_mode(opcode);
|
addr_mode = mos6502_addr_mode(opcode);
|
||||||
|
|
||||||
// Mainly we care about the lo byte of the last effective address
|
// Mainly we care about the lo byte of the last effective address
|
||||||
lo_addr = cpu->last_addr & 0xFF;
|
lo_addr = cpu->eff_addr & 0xFF;
|
||||||
|
|
||||||
// Ok, here's the deal: if you are using an address mode that uses
|
// Ok, here's the deal: if you are using an address mode that uses
|
||||||
// any of the index registers, you need to return an additional
|
// any of the index registers, you need to return an additional
|
||||||
@ -359,7 +359,7 @@ mos6502_execute(mos6502 *cpu)
|
|||||||
// instruction handler cares about (if it cares about any such
|
// instruction handler cares about (if it cares about any such
|
||||||
// value). For example, the operand could be the literal value that
|
// value). For example, the operand could be the literal value that
|
||||||
// you pass into an instruction via immediate mode. As a
|
// you pass into an instruction via immediate mode. As a
|
||||||
// side-effect, resolver will set the last_addr field in cpu to the
|
// side-effect, resolver will set the eff_addr field in cpu to the
|
||||||
// effective address where the operand can be found in memory, or
|
// effective address where the operand can be found in memory, or
|
||||||
// zero if that does not apply (such as in immediate mode).
|
// zero if that does not apply (such as in immediate mode).
|
||||||
//
|
//
|
||||||
|
@ -26,7 +26,7 @@ DEFINE_INST(brk)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(jmp)
|
DEFINE_INST(jmp)
|
||||||
{
|
{
|
||||||
cpu->PC = cpu->last_addr;
|
cpu->PC = cpu->eff_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -37,7 +37,7 @@ DEFINE_INST(jmp)
|
|||||||
DEFINE_INST(jsr)
|
DEFINE_INST(jsr)
|
||||||
{
|
{
|
||||||
mos6502_push_stack(cpu, cpu->PC + 3);
|
mos6502_push_stack(cpu, cpu->PC + 3);
|
||||||
cpu->PC = cpu->last_addr;
|
cpu->PC = cpu->eff_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -75,7 +75,7 @@ DEFINE_INST(plp)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(sta)
|
DEFINE_INST(sta)
|
||||||
{
|
{
|
||||||
mos6502_set(cpu, cpu->last_addr, cpu->A);
|
mos6502_set(cpu, cpu->eff_addr, cpu->A);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -83,7 +83,7 @@ DEFINE_INST(sta)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(stx)
|
DEFINE_INST(stx)
|
||||||
{
|
{
|
||||||
mos6502_set(cpu, cpu->last_addr, cpu->X);
|
mos6502_set(cpu, cpu->eff_addr, cpu->X);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -91,7 +91,7 @@ DEFINE_INST(stx)
|
|||||||
*/
|
*/
|
||||||
DEFINE_INST(sty)
|
DEFINE_INST(sty)
|
||||||
{
|
{
|
||||||
mos6502_set(cpu, cpu->last_addr, cpu->Y);
|
mos6502_set(cpu, cpu->eff_addr, cpu->Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -107,7 +107,7 @@ Test(mos6502_addr, addr_mode_rel_positive)
|
|||||||
cpu->PC = 123;
|
cpu->PC = 123;
|
||||||
SET_PC_BYTE(cpu, 1, 88);
|
SET_PC_BYTE(cpu, 1, 88);
|
||||||
cr_assert_eq(mos6502_resolve_rel(cpu), 0);
|
cr_assert_eq(mos6502_resolve_rel(cpu), 0);
|
||||||
cr_assert_eq(cpu->last_addr, 213);
|
cr_assert_eq(cpu->eff_addr, 213);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_addr, addr_mode_rel_negative)
|
Test(mos6502_addr, addr_mode_rel_negative)
|
||||||
@ -115,7 +115,7 @@ Test(mos6502_addr, addr_mode_rel_negative)
|
|||||||
cpu->PC = 123;
|
cpu->PC = 123;
|
||||||
SET_PC_BYTE(cpu, 1, 216);
|
SET_PC_BYTE(cpu, 1, 216);
|
||||||
cr_assert_eq(mos6502_resolve_rel(cpu), 0);
|
cr_assert_eq(mos6502_resolve_rel(cpu), 0);
|
||||||
cr_assert_eq(cpu->last_addr, 85);
|
cr_assert_eq(cpu->eff_addr, 85);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_addr, addr_mode_zpg)
|
Test(mos6502_addr, addr_mode_zpg)
|
||||||
|
@ -64,7 +64,7 @@ Test(mos6502_arith, dec)
|
|||||||
mos6502_handle_dec(cpu, 0);
|
mos6502_handle_dec(cpu, 0);
|
||||||
cr_assert_neq(cpu->A, 4);
|
cr_assert_neq(cpu->A, 4);
|
||||||
|
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_set(cpu, 123, 44);
|
mos6502_set(cpu, 123, 44);
|
||||||
|
|
||||||
// Note _also_ that DEC expects the number to be decremented will be
|
// Note _also_ that DEC expects the number to be decremented will be
|
||||||
@ -90,7 +90,7 @@ Test(mos6502_arith, dey)
|
|||||||
|
|
||||||
Test(mos6502_arith, inc)
|
Test(mos6502_arith, inc)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_inc(cpu, 55);
|
mos6502_handle_inc(cpu, 55);
|
||||||
cr_assert_eq(mos6502_get(cpu, 123), 56);
|
cr_assert_eq(mos6502_get(cpu, 123), 56);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ Test(mos6502_bits, asl)
|
|||||||
mos6502_handle_asl(cpu, 5);
|
mos6502_handle_asl(cpu, 5);
|
||||||
cr_assert_eq(cpu->A, 10);
|
cr_assert_eq(cpu->A, 10);
|
||||||
|
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_asl(cpu, 22);
|
mos6502_handle_asl(cpu, 22);
|
||||||
cr_assert_eq(mos6502_get(cpu, 123), 44);
|
cr_assert_eq(mos6502_get(cpu, 123), 44);
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ Test(mos6502_bits, lsr)
|
|||||||
cr_assert_eq(cpu->A, 2);
|
cr_assert_eq(cpu->A, 2);
|
||||||
cr_assert_eq(cpu->P & MOS_CARRY, MOS_CARRY);
|
cr_assert_eq(cpu->P & MOS_CARRY, MOS_CARRY);
|
||||||
|
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_lsr(cpu, 22);
|
mos6502_handle_lsr(cpu, 22);
|
||||||
cr_assert_eq(mos6502_get(cpu, 123), 11);
|
cr_assert_eq(mos6502_get(cpu, 123), 11);
|
||||||
cr_assert_eq(cpu->P & MOS_CARRY, MOS_CARRY);
|
cr_assert_eq(cpu->P & MOS_CARRY, MOS_CARRY);
|
||||||
@ -95,7 +95,7 @@ Test(mos6502_bits, rol)
|
|||||||
mos6502_handle_rol(cpu, 8);
|
mos6502_handle_rol(cpu, 8);
|
||||||
cr_assert_eq(cpu->A, 16);
|
cr_assert_eq(cpu->A, 16);
|
||||||
|
|
||||||
cpu->last_addr = 234;
|
cpu->eff_addr = 234;
|
||||||
mos6502_handle_rol(cpu, 128);
|
mos6502_handle_rol(cpu, 128);
|
||||||
cr_assert_eq(mos6502_get(cpu, 234), 1);
|
cr_assert_eq(mos6502_get(cpu, 234), 1);
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ Test(mos6502_bits, ror)
|
|||||||
mos6502_handle_ror(cpu, 64);
|
mos6502_handle_ror(cpu, 64);
|
||||||
cr_assert_eq(cpu->A, 32);
|
cr_assert_eq(cpu->A, 32);
|
||||||
|
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_ror(cpu, 1);
|
mos6502_handle_ror(cpu, 1);
|
||||||
cr_assert_eq(mos6502_get(cpu, 123), 128);
|
cr_assert_eq(mos6502_get(cpu, 123), 128);
|
||||||
}
|
}
|
||||||
|
@ -8,96 +8,96 @@ TestSuite(mos6502_branch, .init = setup, .fini = teardown);
|
|||||||
|
|
||||||
Test(mos6502_branch, bcc)
|
Test(mos6502_branch, bcc)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bcc(cpu, 0);
|
mos6502_handle_bcc(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 123);
|
cr_assert_eq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_CARRY;
|
cpu->P |= MOS_CARRY;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bcc(cpu, 0);
|
mos6502_handle_bcc(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 127);
|
cr_assert_neq(cpu->PC, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bcs)
|
Test(mos6502_branch, bcs)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bcs(cpu, 0);
|
mos6502_handle_bcs(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 123);
|
cr_assert_neq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_CARRY;
|
cpu->P |= MOS_CARRY;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bcs(cpu, 0);
|
mos6502_handle_bcs(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 125);
|
cr_assert_eq(cpu->PC, 125);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, beq)
|
Test(mos6502_branch, beq)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_beq(cpu, 0);
|
mos6502_handle_beq(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 123);
|
cr_assert_neq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_ZERO;
|
cpu->P |= MOS_ZERO;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_beq(cpu, 0);
|
mos6502_handle_beq(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 125);
|
cr_assert_eq(cpu->PC, 125);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bmi)
|
Test(mos6502_branch, bmi)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bmi(cpu, 0);
|
mos6502_handle_bmi(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 123);
|
cr_assert_neq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_NEGATIVE;
|
cpu->P |= MOS_NEGATIVE;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bmi(cpu, 0);
|
mos6502_handle_bmi(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 125);
|
cr_assert_eq(cpu->PC, 125);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bne)
|
Test(mos6502_branch, bne)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bne(cpu, 0);
|
mos6502_handle_bne(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 123);
|
cr_assert_eq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_ZERO;
|
cpu->P |= MOS_ZERO;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bne(cpu, 0);
|
mos6502_handle_bne(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 127);
|
cr_assert_neq(cpu->PC, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bpl)
|
Test(mos6502_branch, bpl)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bpl(cpu, 0);
|
mos6502_handle_bpl(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 123);
|
cr_assert_eq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_NEGATIVE;
|
cpu->P |= MOS_NEGATIVE;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bpl(cpu, 0);
|
mos6502_handle_bpl(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 127);
|
cr_assert_neq(cpu->PC, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bvc)
|
Test(mos6502_branch, bvc)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bvc(cpu, 0);
|
mos6502_handle_bvc(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 123);
|
cr_assert_eq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_OVERFLOW;
|
cpu->P |= MOS_OVERFLOW;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bvc(cpu, 0);
|
mos6502_handle_bvc(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 127);
|
cr_assert_neq(cpu->PC, 127);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_branch, bvs)
|
Test(mos6502_branch, bvs)
|
||||||
{
|
{
|
||||||
cpu->last_addr = 123;
|
cpu->eff_addr = 123;
|
||||||
mos6502_handle_bvs(cpu, 0);
|
mos6502_handle_bvs(cpu, 0);
|
||||||
cr_assert_neq(cpu->PC, 123);
|
cr_assert_neq(cpu->PC, 123);
|
||||||
|
|
||||||
cpu->P |= MOS_OVERFLOW;
|
cpu->P |= MOS_OVERFLOW;
|
||||||
cpu->last_addr = 125;
|
cpu->eff_addr = 125;
|
||||||
mos6502_handle_bvs(cpu, 0);
|
mos6502_handle_bvs(cpu, 0);
|
||||||
cr_assert_eq(cpu->PC, 125);
|
cr_assert_eq(cpu->PC, 125);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ Test(mos6502, cycles)
|
|||||||
|
|
||||||
// In this case, we aren't cross a page boundary, and the number of
|
// In this case, we aren't cross a page boundary, and the number of
|
||||||
// cycles should stay at 4
|
// cycles should stay at 4
|
||||||
cpu->last_addr = 0x5070;
|
cpu->eff_addr = 0x5070;
|
||||||
cpu->X = 23;
|
cpu->X = 23;
|
||||||
cr_assert_eq(mos6502_cycles(cpu, 0x1D), 4);
|
cr_assert_eq(mos6502_cycles(cpu, 0x1D), 4);
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Test(mos6502_exec, brk)
|
|||||||
Test(mos6502_exec, jmp)
|
Test(mos6502_exec, jmp)
|
||||||
{
|
{
|
||||||
cpu->PC = 123;
|
cpu->PC = 123;
|
||||||
cpu->last_addr = 234;
|
cpu->eff_addr = 234;
|
||||||
mos6502_handle_jmp(cpu, 0);
|
mos6502_handle_jmp(cpu, 0);
|
||||||
|
|
||||||
cr_assert_eq(cpu->PC, 234);
|
cr_assert_eq(cpu->PC, 234);
|
||||||
@ -31,7 +31,7 @@ Test(mos6502_exec, jmp)
|
|||||||
Test(mos6502_exec, jsr)
|
Test(mos6502_exec, jsr)
|
||||||
{
|
{
|
||||||
cpu->PC = 123;
|
cpu->PC = 123;
|
||||||
cpu->last_addr = 235;
|
cpu->eff_addr = 235;
|
||||||
mos6502_handle_jsr(cpu, 0);
|
mos6502_handle_jsr(cpu, 0);
|
||||||
|
|
||||||
cr_assert_eq(cpu->PC, 235);
|
cr_assert_eq(cpu->PC, 235);
|
||||||
|
@ -61,25 +61,25 @@ Test(mos6502_loadstor, plp)
|
|||||||
Test(mos6502_loadstor, sta)
|
Test(mos6502_loadstor, sta)
|
||||||
{
|
{
|
||||||
cpu->A = 123;
|
cpu->A = 123;
|
||||||
cpu->last_addr = 555;
|
cpu->eff_addr = 555;
|
||||||
mos6502_handle_sta(cpu, 0);
|
mos6502_handle_sta(cpu, 0);
|
||||||
cr_assert_eq(mos6502_get(cpu, cpu->last_addr), cpu->A);
|
cr_assert_eq(mos6502_get(cpu, cpu->eff_addr), cpu->A);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_loadstor, stx)
|
Test(mos6502_loadstor, stx)
|
||||||
{
|
{
|
||||||
cpu->X = 222;
|
cpu->X = 222;
|
||||||
cpu->last_addr = 444;
|
cpu->eff_addr = 444;
|
||||||
mos6502_handle_stx(cpu, 0);
|
mos6502_handle_stx(cpu, 0);
|
||||||
cr_assert_eq(mos6502_get(cpu, cpu->last_addr), cpu->X);
|
cr_assert_eq(mos6502_get(cpu, cpu->eff_addr), cpu->X);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_loadstor, sty)
|
Test(mos6502_loadstor, sty)
|
||||||
{
|
{
|
||||||
cpu->Y = 111;
|
cpu->Y = 111;
|
||||||
cpu->last_addr = 253;
|
cpu->eff_addr = 253;
|
||||||
mos6502_handle_sty(cpu, 0);
|
mos6502_handle_sty(cpu, 0);
|
||||||
cr_assert_eq(mos6502_get(cpu, cpu->last_addr), cpu->Y);
|
cr_assert_eq(mos6502_get(cpu, cpu->eff_addr), cpu->Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(mos6502_loadstor, tax)
|
Test(mos6502_loadstor, tax)
|
||||||
|
Loading…
Reference in New Issue
Block a user