1
0
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:
Peter Evans 2018-01-12 13:57:48 -06:00
parent e56ed9ea43
commit 7d6886a3a8
16 changed files with 57 additions and 58 deletions

View File

@ -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 *);

View File

@ -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

View File

@ -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

View File

@ -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);
} }
} }

View File

@ -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;
} }

View File

@ -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.

View File

@ -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).
// //

View File

@ -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;
} }
/* /*

View File

@ -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);
} }
/* /*

View File

@ -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)

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);

View File

@ -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);

View File

@ -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)