1
0
mirror of https://github.com/rkujawa/rk65c02.git synced 2024-12-11 18:49:16 +00:00

Add PLA, PHA emulation.

This commit is contained in:
Radosław Kujawa 2017-01-20 22:26:13 +01:00
parent 657fb0cad2
commit 0dc7dac6a3
2 changed files with 26 additions and 3 deletions

View File

@ -70,7 +70,7 @@ OP_NOPI_45,"nop",ZP,2,NULL
OP_EOR_ZP,"eor",ZP,2,NULL
OP_LSR_ZP,"lsr",ZP,2,NULL
OP_RMB4_ZP,"rmb4",ZP,2,NULL
OP_PHA,"pha",IMPLIED,1,NULL
OP_PHA,"pha",IMPLIED,1,emul_pha
OP_EOR_IMM,"eor",IMMEDIATE,2,NULL
OP_LSR,"lsr",ACCUMULATOR,1,NULL
OP_NOPI_4C,"nop",IMPLIED,1,NULL
@ -102,7 +102,7 @@ OP_STZ_ZP,"stz",ZP,2,NULL
OP_ADC_ZP,"adc",ZP,2,NULL
OP_ROR_ZP,"ror",ZP,2,NULL
OP_RMB6_ZP,"rmb6",ZP,2,NULL
OP_PLA,"pla",IMPLIED,1,NULL
OP_PLA,"pla",IMPLIED,1,emul_pla
OP_ADC_IMM,"adc",IMMEDIATE,2,NULL
OP_ROR,"ror",ACCUMULATOR,1,NULL
OP_NOPI_6C,"nop",IMPLIED,1,NULL

1 OP_BRK brk IMPLIED 1 NULL
70 OP_EOR_ZP eor ZP 2 NULL
71 OP_LSR_ZP lsr ZP 2 NULL
72 OP_RMB4_ZP rmb4 ZP 2 NULL
73 OP_PHA pha IMPLIED 1 NULL emul_pha
74 OP_EOR_IMM eor IMMEDIATE 2 NULL
75 OP_LSR lsr ACCUMULATOR 1 NULL
76 OP_NOPI_4C nop IMPLIED 1 NULL
102 OP_ADC_ZP adc ZP 2 NULL
103 OP_ROR_ZP ror ZP 2 NULL
104 OP_RMB6_ZP rmb6 ZP 2 NULL
105 OP_PLA pla IMPLIED 1 NULL emul_pla
106 OP_ADC_IMM adc IMMEDIATE 2 NULL
107 OP_ROR ror ACCUMULATOR 1 NULL
108 OP_NOPI_6C nop IMPLIED 1 NULL

View File

@ -2,13 +2,15 @@
#include "emulation.h"
/* AND - logical AND */
void
emul_and(rk65c02emu_t *e, instruction_t *i)
{
instrdef_t id;
id = instruction_decode(i->opcode);
uint8_t rv;
id = instruction_decode(i->opcode);
rv = e->regs.A & (instruction_data_read_1(e, &id, i));
e->regs.A = rv;
@ -16,10 +18,12 @@ emul_and(rk65c02emu_t *e, instruction_t *i)
instruction_status_adjust_negative(e, e->regs.A);
}
/* LDA - load to accumulator */
void
emul_lda(rk65c02emu_t *e, instruction_t *i)
{
instrdef_t id;
id = instruction_decode(i->opcode);
e->regs.A = instruction_data_read_1(e, &id, i);
@ -28,12 +32,31 @@ emul_lda(rk65c02emu_t *e, instruction_t *i)
instruction_status_adjust_negative(e, e->regs.A);
}
/* NOP - do nothing */
void
emul_nop(rk65c02emu_t *e, instruction_t *i)
{
/* printf("nop!\n"); */
}
/* PHA - push accumulator to stack */
void
emul_pha(rk6502emu_t *e, instruction_t *i)
{
stack_push(e, e->regs.A);
}
/* PLA - pull from stack to accumulator */
void
emul_pla(rk65c02emu_t *e, instruciton_t *i)
{
e->regs.A = stack_pop(e);
instruction_status_adjust_zero(e, e->regs.A);
instruction_status_adjust_negative(e, e->regs.A);
}
/* STP - stop the processor */
void
emul_stp(rk65c02emu_t *e, instruction_t *i)
{