add systembus

This commit is contained in:
Zack Buhman 2024-12-28 03:01:50 -06:00
parent a930408799
commit 9456365143
5 changed files with 131 additions and 14 deletions

View File

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

14
regs/register_gen.py Normal file
View File

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

View File

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

View File

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

View File

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