add blank todo opcode functions based on opcode json
This commit is contained in:
parent
207c6903f5
commit
76b9059b2e
31
converter_blank_funs.py
Normal file
31
converter_blank_funs.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
address_mode_table = {
|
||||||
|
'Implied': 'AM_ACC',
|
||||||
|
'Immediate': 'AM_IMM',
|
||||||
|
'Zero Page': 'AM_ZP',
|
||||||
|
'Zero Page, X': 'AM_ZP_X',
|
||||||
|
'Zero Page, Y': 'AM_ZP_Y',
|
||||||
|
'Absolute': 'AM_ABS',
|
||||||
|
'Absolute, X': 'AM_ABS_X',
|
||||||
|
'Absolute, Y': 'AM_ABS_Y',
|
||||||
|
'Indirect': 'AM_IND',
|
||||||
|
'(Indirect)': 'AM_IND',
|
||||||
|
'(Indirect, X)': 'AM_IND_X',
|
||||||
|
'(Indirect), Y': 'AM_IND_Y',
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://github.com/ericTheEchidna/65C02-JSON/
|
||||||
|
j = json.load(open('opcodes_65c02.json', 'r'))
|
||||||
|
|
||||||
|
#print(j)
|
||||||
|
|
||||||
|
for i in j:
|
||||||
|
#print(i)
|
||||||
|
instruction = str.lower(i["instruction"])
|
||||||
|
print('''
|
||||||
|
static void
|
||||||
|
''' + instruction + '''(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}''')
|
427
cpu.c
427
cpu.c
@ -110,7 +110,7 @@ opcode_arg(enum addressing_mode mode)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
adc(uint8_t arg)
|
adc(uint8_t arg)
|
||||||
{
|
{
|
||||||
uint16_t sum; // 16-bit sum makes it easier to determine carry flag
|
uint16_t sum; // 16-bit sum makes it easier to determine carry flag
|
||||||
@ -125,43 +125,198 @@ adc(uint8_t arg)
|
|||||||
STATUS_UPDATE_NEGATIVE(regs.a);
|
STATUS_UPDATE_NEGATIVE(regs.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
sbc(uint8_t arg)
|
and(uint8_t arg)
|
||||||
{
|
{
|
||||||
/* SBC is described online as ADC with argument as two's complement */
|
/* TODO: complete this */
|
||||||
adc(~arg + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
brk(void)
|
asl(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bbr(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bbs(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bcc(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bcs(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
beq(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bit(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bmi(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bne(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bpl(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bra(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
brk()
|
||||||
{
|
{
|
||||||
/* $00 */
|
|
||||||
/* TODO: push regs.pc and regs.status to stack and load IRQ vector */
|
/* TODO: push regs.pc and regs.status to stack and load IRQ vector */
|
||||||
regs.status.brk = 1;
|
regs.status.brk = 1;
|
||||||
return;
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
tax(void)
|
bvc(uint8_t arg)
|
||||||
{
|
{
|
||||||
/* $AA */
|
/* TODO: complete this */
|
||||||
regs.x = regs.a;
|
|
||||||
|
|
||||||
STATUS_UPDATE_ZERO(regs.x);
|
|
||||||
STATUS_UPDATE_NEGATIVE(regs.x);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
inx(void)
|
bvs(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clc(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cld(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cli(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clv(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cmp(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cpx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cpy(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dec(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dex(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dey(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eor(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
inc(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
inx()
|
||||||
{
|
{
|
||||||
/* $E8 */
|
|
||||||
regs.x++;
|
regs.x++;
|
||||||
|
|
||||||
STATUS_UPDATE_ZERO(regs.x);
|
STATUS_UPDATE_ZERO(regs.x);
|
||||||
STATUS_UPDATE_NEGATIVE(regs.x);
|
STATUS_UPDATE_NEGATIVE(regs.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
|
iny(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
jmp(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
jsr(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
lda(uint8_t arg)
|
lda(uint8_t arg)
|
||||||
{
|
{
|
||||||
printf("arg1 $%02X\n", arg);
|
printf("arg1 $%02X\n", arg);
|
||||||
@ -171,6 +326,238 @@ lda(uint8_t arg)
|
|||||||
STATUS_UPDATE_NEGATIVE(regs.a);
|
STATUS_UPDATE_NEGATIVE(regs.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ldx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ldy(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
lsr(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
nop(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ora(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pha(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
php(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
phx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
phy(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pla(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plp(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ply(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rmb(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rol(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ror(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rti(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rts(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sbc(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* SBC is described online as ADC with argument as two's complement */
|
||||||
|
adc(~arg + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sec(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sed(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sei(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
smb(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sta(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stp(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sty(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stz(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tax()
|
||||||
|
{
|
||||||
|
regs.x = regs.a;
|
||||||
|
|
||||||
|
STATUS_UPDATE_ZERO(regs.x);
|
||||||
|
STATUS_UPDATE_NEGATIVE(regs.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tay(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
trb(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tsb(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tsx(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
txa(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
txs(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tya(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
wai(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unp(uint8_t arg)
|
||||||
|
{
|
||||||
|
/* TODO: complete this */
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
interpret(void)
|
interpret(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user