diff --git a/generate.sh b/generate.sh index d6da414..7f6a18a 100644 --- a/generate.sh +++ b/generate.sh @@ -1,12 +1,15 @@ python gen_decoder.py > c/decode.inc.c -python regs/holly.py ../dreamcast/regs/holly.csv > sega/dreamcast/holly/Holly.java +python regs/register_gen.py ../dreamcast/regs/holly.csv holly 0xa05f8000 > sega/dreamcast/holly/Holly.java +python regs/register_gen.py ../dreamcast/regs/systembus.csv systembus 0xa05f6800 > sega/dreamcast/systembus/Systembus.java python regs/bits_gen.py ../dreamcast/regs/core_bits.csv holly CoreBits > sega/dreamcast/holly/CoreBits.java python regs/bits_gen.py ../dreamcast/regs/ta_bits.csv holly TABits > sega/dreamcast/holly/TABits.java python regs/bits_gen.py ../dreamcast/regs/isp_tsp.csv holly ISPTSP > sega/dreamcast/holly/ISPTSP.java python regs/bits_gen.py ../dreamcast/regs/ta_parameter.csv holly TAParameter > sega/dreamcast/holly/TAParameter.java +python regs/bits_gen.py ../dreamcast/regs/systembus_bits.csv systembus SystembusBits > sega/dreamcast/systembus/SystembusBits.java + python regs/ta_parameters.py ../dreamcast/regs/vertex_parameter_format.csv holly TAVertexParameter > sega/dreamcast/holly/TAVertexParameter.java python regs/ta_parameters.py ../dreamcast/regs/global_parameter_format.csv holly TAGlobalParameter > sega/dreamcast/holly/TAGlobalParameter.java diff --git a/regs/register_gen.py b/regs/register_gen.py new file mode 100644 index 0000000..53233bc --- /dev/null +++ b/regs/register_gen.py @@ -0,0 +1,14 @@ +from csv_input import read_input +from generate import renderer +from register import parse_row, group_by_block +from register_java import generate_classes +import sys + +if __name__ == "__main__": + rows = read_input(sys.argv[1]) + package_name = sys.argv[2] + base_address = int(sys.argv[3], 16) + blocks = group_by_block(map(parse_row, rows)) + render, out = renderer(indent_length=4) + render(generate_classes(package_name, base_address, blocks)) + sys.stdout.write(out.getvalue()) diff --git a/regs/holly.py b/regs/register_java.py similarity index 52% rename from regs/holly.py rename to regs/register_java.py index d5af52d..7a3585c 100644 --- a/regs/holly.py +++ b/regs/register_java.py @@ -1,23 +1,12 @@ -from register import parse_row, group_by_block -from csv_input import read_input -import sys -from generate import renderer - def generate_register(base_address, register): yield f"public static final int {register.name} = {hex(base_address + register.address)};" def generate_classes(package_name, base_address, blocks): yield f"package sega.dreamcast.{package_name};" for block, registers in blocks: + if block.lower() != package_name.lower(): + continue yield f"public class {block.capitalize()} {{" for register in registers: yield from generate_register(base_address, register) yield "}" - -if __name__ == "__main__": - rows = read_input(sys.argv[1]) - blocks = group_by_block(map(parse_row, rows)) - render, out = renderer(indent_length=4) - holly_base_address = 0xa05f8000 - render(generate_classes("holly", holly_base_address, blocks)) - sys.stdout.write(out.getvalue()) diff --git a/sega/dreamcast/systembus/Systembus.java b/sega/dreamcast/systembus/Systembus.java new file mode 100644 index 0000000..f605ff8 --- /dev/null +++ b/sega/dreamcast/systembus/Systembus.java @@ -0,0 +1,39 @@ +package sega.dreamcast.systembus; + +public class Systembus { + public static final int C2DSTAT = 0xa05f6800; + public static final int C2DLEN = 0xa05f6804; + public static final int C2DST = 0xa05f6808; + public static final int SDSTAW = 0xa05f6810; + public static final int SDBAAW = 0xa05f6814; + public static final int SDWLT = 0xa05f6818; + public static final int SDLAS = 0xa05f681c; + public static final int SDST = 0xa05f6820; + public static final int DBREQM = 0xa05f6840; + public static final int BAVLWC = 0xa05f6844; + public static final int C2DPYRC = 0xa05f6848; + public static final int DMAXL = 0xa05f684c; + public static final int TFREM = 0xa05f6880; + public static final int LMMODE0 = 0xa05f6884; + public static final int LMMODE1 = 0xa05f6888; + public static final int FFST = 0xa05f688c; + public static final int SFRES = 0xa05f6890; + public static final int SBREV = 0xa05f689c; + public static final int RBSPLT = 0xa05f68a0; + public static final int ISTNRM = 0xa05f6900; + public static final int ISTEXT = 0xa05f6904; + public static final int ISTERR = 0xa05f6908; + public static final int IML2NRM = 0xa05f6910; + public static final int IML2EXT = 0xa05f6914; + public static final int IML2ERR = 0xa05f6918; + public static final int IML4NRM = 0xa05f6920; + public static final int IML4EXT = 0xa05f6924; + public static final int IML4ERR = 0xa05f6928; + public static final int IML6NRM = 0xa05f6930; + public static final int IML6EXT = 0xa05f6934; + public static final int IML6ERR = 0xa05f6938; + public static final int PDTNRM = 0xa05f6940; + public static final int PDTEXT = 0xa05f6944; + public static final int G2DTNRM = 0xa05f6950; + public static final int G2DTEXT = 0xa05f6954; +} diff --git a/sega/dreamcast/systembus/SystembusBits.java b/sega/dreamcast/systembus/SystembusBits.java new file mode 100644 index 0000000..bf437ff --- /dev/null +++ b/sega/dreamcast/systembus/SystembusBits.java @@ -0,0 +1,72 @@ +package sega.dreamcast.systembus; + +public class SystembusBits { + public static int c2dstat__texture_memory_start_address(int n) { + return (n & 335544288) << 0; + } + public static int c2dlen__transfer_length(int n) { + return (n & 16777184) << 0; + } + public static final int c2dst__start = 1 << 0; + public static final int istnrm__end_of_transferring_punch_through_list = 1 << 21; + public static final int istnrm__end_of_dma_sort_dma = 1 << 20; + public static final int istnrm__end_of_dma_ch2_dma = 1 << 19; + public static final int istnrm__end_of_dma_dev_dma = 1 << 18; + public static final int istnrm__end_of_dma_ext_dma2 = 1 << 17; + public static final int istnrm__end_of_dma_ext_dma1 = 1 << 16; + public static final int istnrm__end_of_dma_aica_dma = 1 << 15; + public static final int istnrm__end_of_dma_gd_dma = 1 << 14; + public static final int istnrm__maple_v_blank_over_interrupt = 1 << 13; + public static final int istnrm__end_of_dma_maple_dma = 1 << 12; + public static final int istnrm__end_of_dma_pvr_dma = 1 << 11; + public static final int istnrm__end_of_transferring_translucent_modifier_volume_list = 1 << 10; + public static final int istnrm__end_of_transferring_translucent_list = 1 << 9; + public static final int istnrm__end_of_transferring_opaque_modifier_volume_list = 1 << 8; + public static final int istnrm__end_of_transferring_opaque_list = 1 << 7; + public static final int istnrm__end_of_transferring_yuv = 1 << 6; + public static final int istnrm__h_blank_in_interrupt = 1 << 5; + public static final int istnrm__v_blank_out_interrupt = 1 << 4; + public static final int istnrm__v_blank_in_interrupt = 1 << 3; + public static final int istnrm__end_of_render_tsp = 1 << 2; + public static final int istnrm__end_of_render_isp = 1 << 1; + public static final int istnrm__end_of_render_video = 1 << 0; + public static final int isterr__sh4__if_access_inhibited_area = 1 << 31; + public static final int isterr__ddt__if_sort_dma_command_error = 1 << 28; + public static final int isterr__g2__time_out_in_cpu_access = 1 << 27; + public static final int isterr__g2__dev_dma_time_out = 1 << 26; + public static final int isterr__g2__ext_dma2_time_out = 1 << 25; + public static final int isterr__g2__ext_dma1_time_out = 1 << 24; + public static final int isterr__g2__aica_dma_time_out = 1 << 23; + public static final int isterr__g2__dev_dma_over_run = 1 << 22; + public static final int isterr__g2__ext_dma2_over_run = 1 << 21; + public static final int isterr__g2__ext_dma1_over_run = 1 << 20; + public static final int isterr__g2__aica_dma_over_run = 1 << 19; + public static final int isterr__g2__dev_dma_illegal_address_set = 1 << 18; + public static final int isterr__g2__ext_dma2_illegal_address_set = 1 << 17; + public static final int isterr__g2__ext_dma1_illegal_address_set = 1 << 16; + public static final int isterr__g2__aica_dma_illegal_address_set = 1 << 15; + public static final int isterr__g1__rom_flash_access_at_gd_dma = 1 << 14; + public static final int isterr__g1__gd_dma_over_run = 1 << 13; + public static final int isterr__g1__illegal_address_set = 1 << 12; + public static final int isterr__maple__illegal_command = 1 << 11; + public static final int isterr__maple__write_fifo_over_flow = 1 << 10; + public static final int isterr__maple__dma_over_run = 1 << 9; + public static final int isterr__maple__illegal_address_set = 1 << 8; + public static final int isterr__pvrif__dma_over_run = 1 << 7; + public static final int isterr__pvrif__illegal_address_set = 1 << 6; + public static final int isterr__ta__fifo_overflow = 1 << 5; + public static final int isterr__ta__illegal_parameter = 1 << 4; + public static final int isterr__ta__object_list_pointer_overflow = 1 << 3; + public static final int isterr__ta__isp_tsp_parameter_overflow = 1 << 2; + public static final int isterr__render__hazard_processing_of_strip_buffer = 1 << 1; + public static final int isterr__render__isp_out_of_cache = 1 << 0; + public static int ffst__holly_cpu_if_block_internal_write_buffer(int n) { + return (n >> 5) & 1; + } + public static int ffst__holly_g2_if_block_internal_write_buffer(int n) { + return (n >> 4) & 1; + } + public static int ffst__aica_internal_write_buffer(int n) { + return (n >> 0) & 1; + } +}