1
0
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:
Radosław Kujawa 2017-01-20 10:41:56 +01:00
parent 3bcc7bb096
commit a50da41388
5 changed files with 47 additions and 6 deletions

View File

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

1 OP_BRK brk IMPLIED 1 NULL
35 OP_NOPI_23 nop IMMEDIATE 2 NULL
36 OP_NOPI_24 nop IMPLIED 1 NULL
37 OP_BIT_ZP bit ZP 2 NULL
38 OP_AND_ZP and ZP 2 NULL emul_and
39 OP_ROL_ZP rol ZP 2 NULL
40 OP_RMB2_ZP rmb2 ZP 2 NULL
41 OP_PLP plp IMPLIED 1 NULL
42 OP_AND_IMM and IMMEDIATE 2 NULL emul_and
43 OP_ROL rol ACCUMULATOR 1 NULL
44 OP_NOPI_2C nop IMPLIED 1 NULL
45 OP_BIT_ABS bit ABSOLUTE 3 NULL

View File

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

View File

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

View File

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

View File

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