mirror of
https://github.com/rkujawa/rk65c02.git
synced 2025-04-20 08:37:58 +00:00
Implement AND emulation and test.
This commit is contained in:
parent
3bcc7bb096
commit
a50da41388
@ -35,11 +35,11 @@ OP_AND_IZPX,"and",IZPX,2,NULL
|
||||
OP_NOPI_23,"nop",IMMEDIATE,2,NULL
|
||||
OP_NOPI_24,"nop",IMPLIED,1,NULL
|
||||
OP_BIT_ZP,"bit",ZP,2,NULL
|
||||
OP_AND_ZP,"and",ZP,2,NULL
|
||||
OP_AND_ZP,"and",ZP,2,emul_and
|
||||
OP_ROL_ZP,"rol",ZP,2,NULL
|
||||
OP_RMB2_ZP,"rmb2",ZP,2,NULL
|
||||
OP_PLP,"plp",IMPLIED,1,NULL
|
||||
OP_AND_IMM,"and",IMMEDIATE,2,NULL
|
||||
OP_AND_IMM,"and",IMMEDIATE,2,emul_and
|
||||
OP_ROL,"rol",ACCUMULATOR,1,NULL
|
||||
OP_NOPI_2C,"nop",IMPLIED,1,NULL
|
||||
OP_BIT_ABS,"bit",ABSOLUTE,3,NULL
|
||||
|
|
@ -2,6 +2,20 @@
|
||||
|
||||
#include "emulation.h"
|
||||
|
||||
void
|
||||
emul_and(rk65c02emu_t *e, instruction_t *i)
|
||||
{
|
||||
instrdef_t id;
|
||||
id = instruction_decode(i->opcode);
|
||||
uint8_t rv;
|
||||
|
||||
rv = e->regs.A & (instruction_data_read_1(e, &id, i));
|
||||
e->regs.A = rv;
|
||||
|
||||
instruction_status_adjust_zero(e, e->regs.A);
|
||||
instruction_status_adjust_negative(e, e->regs.A);
|
||||
}
|
||||
|
||||
void
|
||||
emul_lda(rk65c02emu_t *e, instruction_t *i)
|
||||
{
|
||||
@ -10,8 +24,8 @@ emul_lda(rk65c02emu_t *e, instruction_t *i)
|
||||
|
||||
e->regs.A = instruction_data_read_1(e, &id, i);
|
||||
|
||||
instruction_status_adjust_zero(e->regs.A);
|
||||
instruction_status_adjust_negative(e->regs.A);
|
||||
instruction_status_adjust_zero(e, e->regs.A);
|
||||
instruction_status_adjust_negative(e, e->regs.A);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "rk65c02.h"
|
||||
#include "instruction.h"
|
||||
|
||||
void emul_and(rk65c02emu_t *, instruction_t *);
|
||||
void emul_lda(rk65c02emu_t *, instruction_t *);
|
||||
void emul_nop(rk65c02emu_t *, instruction_t *);
|
||||
void emul_stp(rk65c02emu_t *, instruction_t *);
|
||||
|
@ -5,7 +5,9 @@ VASM=vasm6502_std
|
||||
VASMFLAGS=-Fbin -c02
|
||||
|
||||
TESTS=test_bus test_emulation
|
||||
TESTROMS=test_emulation_nop.rom test_emulation_lda_imm.rom test_emulation_lda_zp.rom
|
||||
TESTROMS=test_emulation_and_imm.rom \
|
||||
test_emulation_nop.rom \
|
||||
test_emulation_lda_imm.rom test_emulation_lda_zp.rom
|
||||
|
||||
all : $(TESTS) $(TESTROMS)
|
||||
|
||||
|
@ -15,7 +15,8 @@ bool
|
||||
rom_start(rk65c02emu_t *e, const char *name)
|
||||
{
|
||||
e->regs.PC = ROM_LOAD_ADDR;
|
||||
bus_load_file(e->bus, ROM_LOAD_ADDR, name);
|
||||
if(!bus_load_file(e->bus, ROM_LOAD_ADDR, name))
|
||||
return false;
|
||||
rk65c02_start(e);
|
||||
|
||||
return true;
|
||||
@ -44,6 +45,28 @@ ATF_TC_BODY(emul_lda, tc)
|
||||
bus_finish(&b);
|
||||
}
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(emul_and);
|
||||
ATF_TC_BODY(emul_and, tc)
|
||||
{
|
||||
rk65c02emu_t e;
|
||||
bus_t b;
|
||||
|
||||
b = bus_init();
|
||||
e = rk65c02_init(&b);
|
||||
|
||||
/* AND immediate */
|
||||
e.regs.A = 0xFF;
|
||||
ATF_REQUIRE(rom_start(&e, "test_emulation_and_imm.rom"));
|
||||
ATF_CHECK(e.regs.A == 0xAA);
|
||||
|
||||
/* AND zero page */
|
||||
/* bus_write_1(&b, 0x10, 0xAE);
|
||||
ATF_REQUIRE(rom_start(&e, "test_emulation_and_zp.rom"));
|
||||
ATF_CHECK(e.regs.A == 0xAE);*/
|
||||
|
||||
bus_finish(&b);
|
||||
}
|
||||
|
||||
ATF_TC_WITHOUT_HEAD(emul_nop);
|
||||
ATF_TC_BODY(emul_nop, tc)
|
||||
{
|
||||
@ -66,6 +89,7 @@ ATF_TC_BODY(emul_nop, tc)
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
ATF_TP_ADD_TC(tp, emul_and);
|
||||
ATF_TP_ADD_TC(tp, emul_lda);
|
||||
ATF_TP_ADD_TC(tp, emul_nop);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user