implement more instructions
This commit is contained in:
parent
68ecbce235
commit
23008662ce
66
cpu.c
66
cpu.c
@ -244,7 +244,7 @@ bit(uint8_t arg)
|
||||
{
|
||||
regs.status.zero = (regs.a & arg) == 0;
|
||||
regs.status.overflow = (arg & (1 << 6)) > 0;
|
||||
regs.status.negative = (arg & (1 << 7)) > 0;
|
||||
STATUS_UPDATE_NEGATIVE(arg);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -329,7 +329,7 @@ cmp(uint8_t arg)
|
||||
|
||||
regs.status.carry = regs.a >= arg;
|
||||
regs.status.zero = regs.a == arg;
|
||||
regs.status.negative = (tmp & (1 << 7)) > 0;
|
||||
STATUS_UPDATE_NEGATIVE(tmp);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -341,7 +341,7 @@ cpx(uint8_t arg)
|
||||
|
||||
regs.status.carry = regs.x >= arg;
|
||||
regs.status.zero = regs.x == arg;
|
||||
regs.status.negative = (tmp & (1 << 7)) > 0;
|
||||
STATUS_UPDATE_NEGATIVE(tmp);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -353,37 +353,52 @@ cpy(uint8_t arg)
|
||||
|
||||
regs.status.carry = regs.y >= arg;
|
||||
regs.status.zero = regs.y == arg;
|
||||
regs.status.negative = (tmp & (1 << 7)) > 0;
|
||||
STATUS_UPDATE_NEGATIVE(tmp);
|
||||
}
|
||||
|
||||
static void
|
||||
dec(uint16_t mem)
|
||||
{
|
||||
memwrite(mem, peek(mem) - 1);
|
||||
|
||||
STATUS_UPDATE_ZERO(peek(mem));
|
||||
STATUS_UPDATE_NEGATIVE(peek(mem));
|
||||
}
|
||||
|
||||
static void
|
||||
dex(uint8_t arg)
|
||||
dex(void)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.x--;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.x);
|
||||
STATUS_UPDATE_NEGATIVE(regs.x);
|
||||
}
|
||||
|
||||
static void
|
||||
dey(uint8_t arg)
|
||||
dey(void)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.y--;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.y);
|
||||
STATUS_UPDATE_NEGATIVE(regs.y);
|
||||
}
|
||||
|
||||
static void
|
||||
eor(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.a ^= arg;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.a);
|
||||
STATUS_UPDATE_NEGATIVE(regs.a);
|
||||
}
|
||||
|
||||
static void
|
||||
inc(uint8_t arg)
|
||||
inc(uint16_t mem)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
memwrite(mem, peek(mem) + 1);
|
||||
|
||||
STATUS_UPDATE_ZERO(peek(mem));
|
||||
STATUS_UPDATE_NEGATIVE(peek(mem));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -398,13 +413,16 @@ inx(void)
|
||||
static void
|
||||
iny(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.y++;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.y);
|
||||
STATUS_UPDATE_NEGATIVE(regs.y);
|
||||
}
|
||||
|
||||
static void
|
||||
jmp(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.pc = arg;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -416,7 +434,6 @@ jsr(uint8_t arg)
|
||||
static void
|
||||
lda(uint8_t arg)
|
||||
{
|
||||
printf("arg1 $%02X\n", arg);
|
||||
regs.a = arg;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.a);
|
||||
@ -426,13 +443,19 @@ lda(uint8_t arg)
|
||||
static void
|
||||
ldx(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.x = arg;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.x);
|
||||
STATUS_UPDATE_NEGATIVE(regs.x);
|
||||
}
|
||||
|
||||
static void
|
||||
ldy(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.y = arg;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.y);
|
||||
STATUS_UPDATE_NEGATIVE(regs.y);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -444,13 +467,16 @@ lsr(uint8_t arg)
|
||||
static void
|
||||
nop(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
ora(uint8_t arg)
|
||||
{
|
||||
/* TODO: complete this */
|
||||
regs.a |= arg;
|
||||
|
||||
STATUS_UPDATE_ZERO(regs.a);
|
||||
STATUS_UPDATE_NEGATIVE(regs.a);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -975,11 +1001,11 @@ interpret(void)
|
||||
cycles += 7;
|
||||
break;
|
||||
case 0xca:
|
||||
dex(opcode_arg(AM_ACC));
|
||||
dex();
|
||||
cycles += 2;
|
||||
break;
|
||||
case 0x88:
|
||||
dey(opcode_arg(AM_ACC));
|
||||
dey();
|
||||
cycles += 2;
|
||||
break;
|
||||
case 0x49:
|
||||
|
Loading…
Reference in New Issue
Block a user