programmatically create switch cases for opcodes based on opcode json

The JSON is from https://github.com/ericTheEchidna/65C02-JSON/ and
saved me a lot of time from writing the cases for each opcode by hand.
This commit is contained in:
Vineet K 2024-06-09 12:56:13 +05:30
parent 72e29b3d25
commit 207c6903f5
2 changed files with 1053 additions and 38 deletions

39
converter.py Normal file
View File

@ -0,0 +1,39 @@
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"])
for op in i["opcodes"]:
address_mode = i["opcodes"][op]["address_mode"]
if "Bit " in address_mode:
am = 'AM_REL'
else:
am = address_mode_table[address_mode]
bytes = i["opcodes"][op]["bytes"]
cycles = i["opcodes"][op]["cycles"]
print(f'''case {op}:
{instruction}(opcode_arg({am}));
cycles += {cycles};
break;''')

1052
cpu.c

File diff suppressed because it is too large Load Diff