mirror of
https://github.com/rkujawa/rk65c02.git
synced 2025-03-03 14:29:23 +00:00
Correct address calculation for absolute indirect and absolute indirect X modes.
This commit is contained in:
parent
8d2d694158
commit
735c3677ce
@ -156,17 +156,22 @@ emul_iny(rk65c02emu_t *e, void *id, instruction_t *i)
|
|||||||
void
|
void
|
||||||
emul_jmp(rk65c02emu_t *e, void *id, instruction_t *i)
|
emul_jmp(rk65c02emu_t *e, void *id, instruction_t *i)
|
||||||
{
|
{
|
||||||
uint16_t target;//, iaddr;
|
uint16_t target, iaddr;
|
||||||
|
|
||||||
switch (((instrdef_t *)id)->mode) {
|
switch (((instrdef_t *)id)->mode) {
|
||||||
case ABSOLUTE:
|
case ABSOLUTE:
|
||||||
target = i->op1 + (i->op2 << 8);
|
target = i->op1 + (i->op2 << 8);
|
||||||
break;
|
break;
|
||||||
case IABSOLUTE:
|
case IABSOLUTE:
|
||||||
target = bus_read_1(e->bus, i->op1);
|
iaddr = i->op1 + (i->op2 << 8);
|
||||||
target |= (bus_read_1(e->bus, i->op2) << 8);
|
target = bus_read_1(e->bus, iaddr);
|
||||||
// target = bus_read_1(e->bus, indirect);
|
target |= bus_read_1(e->bus, iaddr+1) << 8;
|
||||||
// target |= bus_read_1(e->bus, indirect + 1);
|
break;
|
||||||
|
case IABSOLUTEX:
|
||||||
|
iaddr = i->op1 + (i->op2 << 8) + e->regs.X;
|
||||||
|
target = bus_read_1(e->bus, iaddr);
|
||||||
|
target |= bus_read_1(e->bus, iaddr + 1) << 8;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false); /* should never happen, lol */
|
assert(false); /* should never happen, lol */
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user