From 76dc15b1c05026b5d9c0c3dabbb0e2ceccfebbf4 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 31 Aug 2024 23:13:43 -0500 Subject: [PATCH] 3d engine bits --- bits.h | 207 +++++++++++++++++++++++ graphics_engine_a.h | 24 +-- registers/0x04000000.txt | 16 +- registers/format_bits.py | 2 +- registers/graphics_engine_bits.csv | 255 ++++++++++++++++++++++++++++- registers/graphics_engine_bits.ods | Bin 20636 -> 24254 bytes registers/parse_bits.py | 21 ++- 7 files changed, 492 insertions(+), 33 deletions(-) diff --git a/bits.h b/bits.h index 0ee698d..3767937 100644 --- a/bits.h +++ b/bits.h @@ -113,6 +113,213 @@ #define BG3CNT__mosaic__enable (0x1 << 6) #define BG3CNT__character_base_block(v) (((v) & 0xf) << 2) #define BG3CNT__priority(v) (((v) & 0x3) << 0) +#define POWCNT__lcd_output_destination__a_to_lower__b_to_upper (0x0 << 15) +#define POWCNT__lcd_output_destination__a_to_upper__b_to_lower (0x1 << 15) +#define POWCNT__2d_graphics_engine_b__disable (0x0 << 9) +#define POWCNT__2d_graphics_engine_b__enable (0x1 << 9) +#define POWCNT__geometry_engine__disable (0x0 << 3) +#define POWCNT__geometry_engine__enable (0x1 << 3) +#define POWCNT__rendering_engine__disable (0x0 << 2) +#define POWCNT__rendering_engine__enable (0x1 << 2) +#define POWCNT__2d_graphics_engine_a__disable (0x0 << 1) +#define POWCNT__2d_graphics_engine_a__enable (0x1 << 1) +#define POWCNT__lcd__disable (0x0 << 0) +#define POWCNT__lcd__enable (0x1 << 0) +#define RDLINES_COUNT__rendered_lines_min(v) (((v) >> 0) & 0x3f) +#define ALPHA_TEST_REF__comparison_value(v) (((v) & 0x1f) << 0) +#define CLEAR_COLOR__clear_polygon_id(v) (((v) & 0x3f) << 24) +#define CLEAR_COLOR__alpha_value(v) (((v) & 0x1f) << 16) +#define CLEAR_COLOR__fog_enable (0x1 << 15) +#define CLEAR_COLOR__blue(v) (((v) & 0x1f) << 10) +#define CLEAR_COLOR__green(v) (((v) & 0x1f) << 5) +#define CLEAR_COLOR__red(v) (((v) & 0x1f) << 0) +#define CLEAR_DEPTH__value(v) (((v) & 0x7fff) << 0) +#define CLRIMAGE_OFFSET__y_offset(v) (((v) & 0xff) << 8) +#define CLRIMAGE_OFFSET__x_offset(v) (((v) & 0xff) << 0) +#define DISP3DCNT__clear_image__disable (0x0 << 14) +#define DISP3DCNT__clear_image__enable (0x1 << 14) +#define DISP3DCNT__polygon_list_ram_and_vertex_ram_overflow (0x1 << 13) +#define DISP3DCNT__color_buffer_underflow (0x1 << 12) +#define DISP3DCNT__fog_shift(v) (((v) & 0xf) << 8) +#define DISP3DCNT__fog_master__disable (0x0 << 7) +#define DISP3DCNT__fog_master__enable (0x1 << 7) +#define DISP3DCNT__fog_mode__blending_using_pixel_color_value_and_alpha_value (0x0 << 6) +#define DISP3DCNT__fog_mode__blending_using_only_pixel_alpha_value (0x1 << 6) +#define DISP3DCNT__edge_marking__disable (0x0 << 5) +#define DISP3DCNT__edge_marking__enable (0x1 << 5) +#define DISP3DCNT__anti_aliasing__disable (0x0 << 4) +#define DISP3DCNT__anti_aliasing__enable (0x1 << 4) +#define DISP3DCNT__alpha_blending__disable (0x0 << 3) +#define DISP3DCNT__alpha_blending__enable (0x1 << 3) +#define DISP3DCNT__alpha_test__disable (0x0 << 2) +#define DISP3DCNT__alpha_test__enable (0x1 << 2) +#define DISP3DCNT__toon_highlight__toon_shading (0x0 << 1) +#define DISP3DCNT__toon_highlight__highlight_shading (0x1 << 1) +#define DISP3DCNT__texture_mapping__disable (0x0 << 0) +#define DISP3DCNT__texture_mapping__enable (0x1 << 0) +#define MTX_MODE__matrix_mode__projection (0x0 << 0) +#define MTX_MODE__matrix_mode__position (0x1 << 0) +#define MTX_MODE__matrix_mode__position_and_vector (0x2 << 0) +#define MTX_MODE__matrix_mode__texture (0x3 << 0) +#define MTX_POP__number_of_pops(v) (((v) & 0x3f) << 0) +#define MTX_STORE__index(v) (((v) & 0x1f) << 0) +#define MTX_RESTORE__position(v) (((v) & 0x1f) << 0) +#define NORMAL__z_component(v) (((v) & 0x3ff) << 20) +#define NORMAL__y_component(v) (((v) & 0x3ff) << 10) +#define NORMAL__x_component(v) (((v) & 0x3ff) << 0) +#define TEXCOORD__t_coordinate(v) (((v) & 0xffff) << 16) +#define TEXCOORD__x_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_16__0__y_coordinate(v) (((v) & 0xffff) << 16) +#define VTX_16__0__x_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_16__1__z_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_10__z_coordinate(v) (((v) & 0x3ff) << 20) +#define VTX_10__y_coordinate(v) (((v) & 0x3ff) << 10) +#define VTX_10__x_coordinate(v) (((v) & 0x3ff) << 0) +#define VTX_XY__y_coordinate(v) (((v) & 0xffff) << 16) +#define VTX_XY__x_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_XZ__z_coordinate(v) (((v) & 0xffff) << 16) +#define VTX_XZ__z_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_YZ__z_coordinate(v) (((v) & 0xffff) << 16) +#define VTX_YZ__y_coordinate(v) (((v) & 0xffff) << 0) +#define VTX_DIFF__z_coordinate(v) (((v) & 0x3ff) << 20) +#define VTX_DIFF__y_coordinate(v) (((v) & 0x3ff) << 10) +#define VTX_DIFF__x_coordinate(v) (((v) & 0x3ff) << 0) +#define POLYGON_ATTR__polygon_id(v) (((v) & 0x3f) << 24) +#define POLYGON_ATTR__alpha_value(v) (((v) & 0x1f) << 16) +#define POLYGON_ATTR__fog__disable (0x0 << 15) +#define POLYGON_ATTR__fog__enable (0x1 << 15) +#define POLYGON_ATTR__depth_test_condition__render_when_depth_value_is_smaller_than_buffer_value (0x0 << 14) +#define POLYGON_ATTR__depth_test_condition__render_when_depth_value_is_equal_to_buffer_value (0x1 << 14) +#define POLYGON_ATTR__one_dot_polygon__do_not_render (0x0 << 13) +#define POLYGON_ATTR__one_dot_polygon__render (0x1 << 13) +#define POLYGON_ATTR__far_plane_intersection__delete (0x0 << 12) +#define POLYGON_ATTR__far_plane_intersection__clip (0x1 << 12) +#define POLYGON_ATTR__translucent_depth_value_update__do_not_update (0x0 << 11) +#define POLYGON_ATTR__translucent_depth_value_update__update (0x1 << 11) +#define POLYGON_ATTR__render_front_surface__disable (0x0 << 7) +#define POLYGON_ATTR__render_front_surface__enable (0x1 << 7) +#define POLYGON_ATTR__render_back_surface__disable (0x0 << 6) +#define POLYGON_ATTR__render_back_surface__enable (0x1 << 6) +#define POLYGON_ATTR__polygon_mode__modulation (0x0 << 4) +#define POLYGON_ATTR__polygon_mode__decal (0x1 << 4) +#define POLYGON_ATTR__polygon_mode__toon (0x2 << 4) +#define POLYGON_ATTR__polygon_mode__shadow (0x3 << 4) +#define POLYGON_ATTR__light_3__disable (0x0 << 3) +#define POLYGON_ATTR__light_3__enable (0x1 << 3) +#define POLYGON_ATTR__light_2__disable (0x0 << 2) +#define POLYGON_ATTR__light_2__enable (0x1 << 2) +#define POLYGON_ATTR__light_1__disable (0x0 << 1) +#define POLYGON_ATTR__light_1__enable (0x1 << 1) +#define POLYGON_ATTR__light_0__disable (0x0 << 0) +#define POLYGON_ATTR__light_0__enable (0x1 << 0) +#define TEXIMAGE_PARAM__texture_coordinate_transformation_mode__do_not_transform_texture_coordinates (0x0 << 30) +#define TEXIMAGE_PARAM__texture_coordinate_transformation_mode__texcoord_source (0x1 << 30) +#define TEXIMAGE_PARAM__texture_coordinate_transformation_mode__normal_source (0x2 << 30) +#define TEXIMAGE_PARAM__texture_coordinate_transformation_mode__vextex_source (0x3 << 30) +#define TEXIMAGE_PARAM__palette_color0_transparency__palette_setting (0x0 << 29) +#define TEXIMAGE_PARAM__palette_color0_transparency__always_transparent (0x1 << 29) +#define TEXIMAGE_PARAM__texture_format__no_texture (0x0 << 26) +#define TEXIMAGE_PARAM__texture_format__a3i5_translucent (0x1 << 26) +#define TEXIMAGE_PARAM__texture_format__4_color_palette (0x2 << 26) +#define TEXIMAGE_PARAM__texture_format__16_color_palette (0x3 << 26) +#define TEXIMAGE_PARAM__texture_format__256_color_palette (0x4 << 26) +#define TEXIMAGE_PARAM__texture_format__4x4_texel_compressed (0x5 << 26) +#define TEXIMAGE_PARAM__texture_format__a5i3_translucent (0x6 << 26) +#define TEXIMAGE_PARAM__texture_format__direct (0x7 << 26) +#define TEXIMAGE_PARAM__t_size__8_texels (0x0 << 23) +#define TEXIMAGE_PARAM__t_size__16_texels (0x1 << 23) +#define TEXIMAGE_PARAM__t_size__32_texels (0x2 << 23) +#define TEXIMAGE_PARAM__t_size__64_texels (0x3 << 23) +#define TEXIMAGE_PARAM__t_size__128_texels (0x4 << 23) +#define TEXIMAGE_PARAM__t_size__256_texels (0x5 << 23) +#define TEXIMAGE_PARAM__t_size__512_texels (0x6 << 23) +#define TEXIMAGE_PARAM__t_size__1024_texels (0x7 << 23) +#define TEXIMAGE_PARAM__s_size__8_texels (0x0 << 20) +#define TEXIMAGE_PARAM__s_size__16_texels (0x1 << 20) +#define TEXIMAGE_PARAM__s_size__32_texels (0x2 << 20) +#define TEXIMAGE_PARAM__s_size__64_texels (0x3 << 20) +#define TEXIMAGE_PARAM__s_size__128_texels (0x4 << 20) +#define TEXIMAGE_PARAM__s_size__256_texels (0x5 << 20) +#define TEXIMAGE_PARAM__s_size__512_texels (0x6 << 20) +#define TEXIMAGE_PARAM__s_size__1024_texels (0x7 << 20) +#define TEXIMAGE_PARAM__flip_t__do_not_flip (0x0 << 19) +#define TEXIMAGE_PARAM__flip_t__flip (0x1 << 19) +#define TEXIMAGE_PARAM__flip_s__do_not_flip (0x0 << 18) +#define TEXIMAGE_PARAM__flip_s__flip (0x1 << 18) +#define TEXIMAGE_PARAM__repeat_t__do_not_repeat (0x0 << 17) +#define TEXIMAGE_PARAM__repeat_t__repeat (0x1 << 17) +#define TEXIMAGE_PARAM__repeat_s__do_not_repeat (0x0 << 16) +#define TEXIMAGE_PARAM__repeat_s__repeat (0x1 << 16) +#define TEXIMAGE_PARAM__texture_starting_address(v) (((v) & 0xffff) << 0) +#define TEXPLTT_BASE__base_address(v) (((v) & 0x1fff) << 0) +#define DIF_AMB__ambient_blue(v) (((v) & 0x1f) << 26) +#define DIF_AMB__ambient_green(v) (((v) & 0x1f) << 21) +#define DIF_AMB__ambient_red(v) (((v) & 0x1f) << 16) +#define DIF_AMB__vertex_color__do_not_set_vertex_color (0x0 << 15) +#define DIF_AMB__vertex_color__set_diffuse_reflection_color_as_vertex_color (0x1 << 15) +#define DIF_AMB__diffuse_blue(v) (((v) & 0x1f) << 10) +#define DIF_AMB__diffuse_green(v) (((v) & 0x1f) << 5) +#define DIF_AMB__diffuse_red(v) (((v) & 0x1f) << 0) +#define SPE_EMI__emission_blue(v) (((v) & 0x1f) << 26) +#define SPE_EMI__emission_green(v) (((v) & 0x1f) << 21) +#define SPE_EMI__emission_red(v) (((v) & 0x1f) << 16) +#define SPE_EMI__shininess__disable (0x0 << 15) +#define SPE_EMI__shininess__enable (0x1 << 15) +#define SPE_EMI__specular_blue(v) (((v) & 0x1f) << 10) +#define SPE_EMI__specular_green(v) (((v) & 0x1f) << 5) +#define SPE_EMI__specular_red(v) (((v) & 0x1f) << 0) +#define LIGHT_VECTOR__light_number(v) (((v) & 0x3) << 30) +#define LIGHT_VECTOR__decimal_z(v) (((v) & 0x3ff) << 20) +#define LIGHT_VECTOR__decimal_y(v) (((v) & 0x3ff) << 10) +#define LIGHT_VECTOR__decimal_x(v) (((v) & 0x3ff) << 0) +#define LIGHT_COLOR__light_number(v) (((v) & 0x3) << 30) +#define LIGHT_COLOR__blue(v) (((v) & 0x1f) << 10) +#define LIGHT_COLOR__green(v) (((v) & 0x1f) << 5) +#define LIGHT_COLOR__red(v) (((v) & 0x1f) << 0) +#define SHININESS__4x_3(v) (((v) & 0xff) << 24) +#define SHININESS__4x_2(v) (((v) & 0xff) << 16) +#define SHININESS__4x_1(v) (((v) & 0xff) << 8) +#define SHININESS__4x_0(v) (((v) & 0xff) << 0) +#define BEGIN_VTXS__type__triangle (0x0 << 0) +#define BEGIN_VTXS__type__quadrilateral (0x1 << 0) +#define BEGIN_VTXS__type__triangle_strip (0x2 << 0) +#define BEGIN_VTXS__type__quadrilateral_strip (0x3 << 0) +#define SWAP_BUFFERS__depth_buffering__z_value (0x0 << 1) +#define SWAP_BUFFERS__depth_buffering__w_value (0x1 << 1) +#define SWAP_BUFFERS__translucent_polygon_y_sorting__auto_sort (0x0 << 0) +#define SWAP_BUFFERS__translucent_polygon_y_sorting__manual_sort (0x1 << 0) +#define VIEWPORT__y2(v) (((v) & 0xff) << 24) +#define VIEWPORT__x2(v) (((v) & 0xff) << 16) +#define VIEWPORT__y1(v) (((v) & 0xff) << 8) +#define VIEWPORT__x1(v) (((v) & 0xff) << 0) +#define BOX_TEST__0__y_coordinate(v) (((v) & 0xffff) << 16) +#define BOX_TEST__0__x_coordinate(v) (((v) & 0xffff) << 0) +#define BOX_TEST__1__width(v) (((v) & 0xffff) << 16) +#define BOX_TEST__1__z_coordinate(v) (((v) & 0xffff) << 0) +#define BOX_TEST__2__depth(v) (((v) & 0xffff) << 16) +#define BOX_TEST__2__height(v) (((v) & 0xffff) << 0) +#define POS_TEST__0__y_coordinate(v) (((v) & 0xffff) << 16) +#define POS_TEST__0__x_coordinate(v) (((v) & 0xffff) << 0) +#define POS_TEST__1__z_coordinate(v) (((v) & 0xffff) << 0) +#define VEC_TEST__decimal_z(v) (((v) & 0x3ff) << 20) +#define VEC_TEST__decimal_y(v) (((v) & 0x3ff) << 10) +#define VEC_TEST__decimal_x(v) (((v) & 0x3ff) << 0) +#define GXSTAT__command_fifo_interrupt_condition__disable (0x0 << 30) +#define GXSTAT__command_fifo_interrupt_condition__half_full (0x1 << 30) +#define GXSTAT__command_fifo_interrupt_condition__empty (0x2 << 30) +#define GXSTAT__geometry_engine_busy(v) (((v) >> 27) & 0x1) +#define GXSTAT__fifo_status__empty(v) (((v) >> 26) & 0x1) +#define GXSTAT__fifo_status__less_than_half_full(v) (((v) >> 25) & 0x1) +#define GXSTAT__fifo_status__full(v) (((v) >> 24) & 0x1) +#define GXSTAT__command_fifo_count(v) (((v) >> 16) & 0xff) +#define GXSTAT__matrix_stack_status__stack_overflow_or_underflow(v) (((v) >> 15) & 0x1) +#define GXSTAT__matrix_stack_status__stack_busy(v) (((v) >> 14) & 0x1) +#define GXSTAT__matrix_stack_status__projection_matrix_stack_level(v) (((v) >> 13) & 0x1) +#define GXSTAT__matrix_stack_status__position_and_vector_matrix_stack_level(v) (((v) >> 8) & 0x1f) +#define GXSTAT__test_status(v) (((v) >> 1) & 0x1) +#define GXSTAT__test_busy(v) (((v) >> 0) & 0x1) +#define LISTRAM_COUNT__counter(v) (((v) >> 0) & 0xfff) +#define VTXRAM_COUNT__counter(v) (((v) >> 0) & 0x1fff) #define OBJ_ATTRIBUTE_0__obj_shape__square (0x0 << 14) #define OBJ_ATTRIBUTE_0__obj_shape__long_rectangle (0x1 << 14) #define OBJ_ATTRIBUTE_0__obj_shape__tall_rectangle (0x2 << 14) diff --git a/graphics_engine_a.h b/graphics_engine_a.h index e2c0720..2e7e70c 100644 --- a/graphics_engine_a.h +++ b/graphics_engine_a.h @@ -101,14 +101,10 @@ struct graphics_engine_a { volatile uint8_t _pad14[26]; volatile uint16_t RDLINES_COUNT; volatile uint8_t _pad15[14]; - volatile uint16_t EDGE_COLOR_0_L; - volatile uint16_t EDGE_COLOR_0_H; - volatile uint16_t EDGE_COLOR_1_L; - volatile uint16_t EDGE_COLOR_1_H; - volatile uint16_t EDGE_COLOR_2_L; - volatile uint16_t EDGE_COLOR_2_H; - volatile uint16_t EDGE_COLOR_3_L; - volatile uint16_t EDGE_COLOR_3_H; + volatile uint32_t EDGE_COLOR_0; + volatile uint32_t EDGE_COLOR_1; + volatile uint32_t EDGE_COLOR_2; + volatile uint32_t EDGE_COLOR_3; volatile uint16_t ALPHA_TEST_REF; volatile uint8_t _pad16[14]; volatile uint32_t CLEAR_COLOR; @@ -333,14 +329,10 @@ static_assert((offsetof (struct graphics_engine_a, SQRT_RESULT)) == 0x2b4); static_assert((offsetof (struct graphics_engine_a, SQRT_PARAM)) == 0x2b8); static_assert((offsetof (struct graphics_engine_a, POWCNT)) == 0x304); static_assert((offsetof (struct graphics_engine_a, RDLINES_COUNT)) == 0x320); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_0_L)) == 0x330); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_0_H)) == 0x332); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_1_L)) == 0x334); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_1_H)) == 0x336); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_2_L)) == 0x338); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_2_H)) == 0x33a); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_3_L)) == 0x33c); -static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_3_H)) == 0x33e); +static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_0)) == 0x330); +static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_1)) == 0x334); +static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_2)) == 0x338); +static_assert((offsetof (struct graphics_engine_a, EDGE_COLOR_3)) == 0x33c); static_assert((offsetof (struct graphics_engine_a, ALPHA_TEST_REF)) == 0x340); static_assert((offsetof (struct graphics_engine_a, CLEAR_COLOR)) == 0x350); static_assert((offsetof (struct graphics_engine_a, CLEAR_DEPTH)) == 0x354); diff --git a/registers/0x04000000.txt b/registers/0x04000000.txt index 0566269..6efad7a 100644 --- a/registers/0x04000000.txt +++ b/registers/0x04000000.txt @@ -127,14 +127,14 @@ 0x320 RDLINES_COUNT 267 Rendering minimum fill -0x330 EDGE_COLOR_0_L 259 Edge marking color (Polygon ID’s 3 upper bits are 000) -0x332 EDGE_COLOR_0_H 259 Edge marking color (Polygon ID’s 3 upper bits are 001) -0x334 EDGE_COLOR_1_L 259 Edge marking color (Polygon ID’s 3 upper bits are 010) -0x336 EDGE_COLOR_1_H 259 Edge marking color (Polygon ID’s 3 upper bits are 011) -0x338 EDGE_COLOR_2_L 259 Edge marking color (Polygon ID’s 3 upper bits are 100) -0x33a EDGE_COLOR_2_H 259 Edge marking color (Polygon ID’s 3 upper bits are 101) -0x33c EDGE_COLOR_3_L 259 Edge marking color (Polygon ID’s 3 upper bits are 110) -0x33e EDGE_COLOR_3_H 259 Edge marking color (Polygon ID’s 3 upper bits are 111) +0x330 EDGE_COLOR_0 259 Edge marking color (Polygon ID’s 3 upper bits are 000) +0x332 +0x334 EDGE_COLOR_1 259 Edge marking color (Polygon ID’s 3 upper bits are 010) +0x336 +0x338 EDGE_COLOR_2 259 Edge marking color (Polygon ID’s 3 upper bits are 100) +0x33a +0x33c EDGE_COLOR_3 259 Edge marking color (Polygon ID’s 3 upper bits are 110) +0x33e 0x340 ALPHA_TEST_REF 258 Alpha test 0x350 CLEAR_COLOR 231 Color buffer initial value diff --git a/registers/format_bits.py b/registers/format_bits.py index 1a7e1c1..4af0886 100644 --- a/registers/format_bits.py +++ b/registers/format_bits.py @@ -24,7 +24,7 @@ def render_bit(prefix, bit): elif bit.value is None: # variable macro mask_value = mask_from_bits(bit.bits) - assert bit.mask & mask_value == mask_value, (bit.mask, mask_value) + assert bit.mask & mask_value == mask_value, (bit.mask, mask_value, bit) yield f"#define {macro_name}(v) (((v) & {hex(mask_value)}) << {min(bit.bits)})" else: assert False, bit diff --git a/registers/graphics_engine_bits.csv b/registers/graphics_engine_bits.csv index b05b1e8..ef5964d 100644 --- a/registers/graphics_engine_bits.csv +++ b/registers/graphics_engine_bits.csv @@ -40,8 +40,8 @@ "DISPCNT","bitmap_obj_mapping_mode","6-5","1d_mapping","0b10",, "DISPCNT","character_obj_mapping_mode",4,"2d_mapping",0,, "DISPCNT","character_obj_mapping_mode",4,"1d_mapping",1,, -"DISPCNT","2d_3d_display_selection_for_bg0",3,"display_2d_graphics",0,, -"DISPCNT","2d_3d_display_selection_for_bg0",3,"display_3d_graphics",1,, +"DISPCNT","display_selection_for_bg0",3,"2d_graphics",0,, +"DISPCNT","display_selection_for_bg0",3,"3d_graphics",1,, "DISPCNT","bg_mode","2-0","text0_text1_text2_text3",0,, "DISPCNT","bg_mode","2-0","text0_text1_text2_affine3",1,, "DISPCNT","bg_mode","2-0","text0_text1_affine2_affine3",2,, @@ -121,6 +121,249 @@ "BG3CNT",,"5-2","character_base_block",,"0b1111", "BG3CNT",,"1-0","priority",,"0b11", ,,,,,, +"POWCNT","lcd_output_destination",15,"a_to_lower__b_to_upper",0,, +"POWCNT","lcd_output_destination",15,"a_to_upper__b_to_lower",1,, +"POWCNT","2d_graphics_engine_b",9,"disable",0,, +"POWCNT","2d_graphics_engine_b",9,"enable",1,, +"POWCNT","geometry_engine",3,"disable",0,, +"POWCNT","geometry_engine",3,"enable",1,, +"POWCNT","rendering_engine",2,"disable",0,, +"POWCNT","rendering_engine",2,"enable",1,, +"POWCNT","2d_graphics_engine_a",1,"disable",0,, +"POWCNT","2d_graphics_engine_a",1,"enable",1,, +"POWCNT","lcd",0,"disable",0,, +"POWCNT","lcd",0,"enable",1,, +,,,,,, +"RDLINES_COUNT",,"5-0","rendered_lines_min",,, +,,,,,, +"ALPHA_TEST_REF",,"4-0","comparison_value",,"0b11111", +,,,,,, +"CLEAR_COLOR",,"29-24","clear_polygon_id",,"0b111111", +"CLEAR_COLOR",,"20-16","alpha_value",,"0b11111", +"CLEAR_COLOR",,15,"fog_enable",1,, +"CLEAR_COLOR",,"14-10","blue",,"0b11111", +"CLEAR_COLOR",,"9-5","green",,"0b11111", +"CLEAR_COLOR",,"4-0","red",,"0b11111", +,,,,,, +"CLEAR_DEPTH",,"14-0","value",,"0x7fff", +,,,,,, +"CLRIMAGE_OFFSET",,"15-8","y_offset",,"0xff", +"CLRIMAGE_OFFSET",,"7-0","x_offset",,"0xff", +,,,,,, +"DISP3DCNT","clear_image",14,"disable",0,, +"DISP3DCNT","clear_image",14,"enable",1,, +"DISP3DCNT",,13,"polygon_list_ram_and_vertex_ram_overflow",1,, +"DISP3DCNT",,12,"color_buffer_underflow",1,, +"DISP3DCNT",,"11-8","fog_shift",,"0b1111", +"DISP3DCNT","fog_master",7,"disable",0,, +"DISP3DCNT","fog_master",7,"enable",1,, +"DISP3DCNT","fog_mode",6,"blending_using_pixel_color_value_and_alpha_value",0,, +"DISP3DCNT","fog_mode",6,"blending_using_only_pixel_alpha_value",1,, +"DISP3DCNT","edge_marking",5,"disable",0,, +"DISP3DCNT","edge_marking",5,"enable",1,, +"DISP3DCNT","anti_aliasing",4,"disable",0,, +"DISP3DCNT","anti_aliasing",4,"enable",1,, +"DISP3DCNT","alpha_blending",3,"disable",0,, +"DISP3DCNT","alpha_blending",3,"enable",1,, +"DISP3DCNT","alpha_test",2,"disable",0,, +"DISP3DCNT","alpha_test",2,"enable",1,, +"DISP3DCNT","toon_highlight",1,"toon_shading",0,, +"DISP3DCNT","toon_highlight",1,"highlight_shading",1,, +"DISP3DCNT","texture_mapping",0,"disable",0,, +"DISP3DCNT","texture_mapping",0,"enable",1,, +,,,,,, +"MTX_MODE","matrix_mode","1-0","projection","0b00",, +"MTX_MODE","matrix_mode","1-0","position","0b01",, +"MTX_MODE","matrix_mode","1-0","position_and_vector","0b10",, +"MTX_MODE","matrix_mode","1-0","texture","0b11",, +,,,,,, +"MTX_POP",,"5-0","number_of_pops",,"0b111111", +,,,,,, +"MTX_STORE",,"4-0","index",,"0b11111", +,,,,,, +"MTX_RESTORE",,"4-0","position",,"0b11111", +,,,,,, +"NORMAL",,"29-20","z_component",,"0x7ff", +"NORMAL",,"19-10","y_component",,"0x7ff", +"NORMAL",,"9-0","x_component",,"0x7ff", +,,,,,, +"TEXCOORD",,"31-16","t_coordinate",,"0xffff", +"TEXCOORD",,"15-0","x_coordinate",,"0xffff", +,,,,,, +"VTX_16",0,"31-16","y_coordinate",,"0xffff", +"VTX_16",0,"15-0","x_coordinate",,"0xffff", +"VTX_16",1,"15-0","z_coordinate",,"0xffff", +,,,,,, +"VTX_10",,"29-20","z_coordinate",,"0x7ff", +"VTX_10",,"19-10","y_coordinate",,"0x7ff", +"VTX_10",,"9-0","x_coordinate",,"0x7ff", +,,,,,, +"VTX_XY",,"31-16","y_coordinate",,"0xffff", +"VTX_XY",,"15-0","x_coordinate",,"0xffff", +,,,,,, +"VTX_XZ",,"31-16","z_coordinate",,"0xffff", +"VTX_XZ",,"15-0","z_coordinate",,"0xffff", +,,,,,, +"VTX_YZ",,"31-16","z_coordinate",,"0xffff", +"VTX_YZ",,"15-0","y_coordinate",,"0xffff", +,,,,,, +"VTX_DIFF",,"29-20","z_coordinate",,"0x7ff", +"VTX_DIFF",,"19-10","y_coordinate",,"0x7ff", +"VTX_DIFF",,"9-0","x_coordinate",,"0x7ff", +,,,,,, +"POLYGON_ATTR",,"29-24","polygon_id",,"0b111111", +"POLYGON_ATTR",,"20-16","alpha_value",,"0b11111", +"POLYGON_ATTR","fog",15,"disable",0,, +"POLYGON_ATTR","fog",15,"enable",1,, +"POLYGON_ATTR","depth_test_condition",14,"render_when_depth_value_is_smaller_than_buffer_value",0,, +"POLYGON_ATTR","depth_test_condition",14,"render_when_depth_value_is_equal_to_buffer_value",1,, +"POLYGON_ATTR","one_dot_polygon",13,"do_not_render",0,, +"POLYGON_ATTR","one_dot_polygon",13,"render",1,, +"POLYGON_ATTR","far_plane_intersection",12,"delete",0,, +"POLYGON_ATTR","far_plane_intersection",12,"clip",1,, +"POLYGON_ATTR","translucent_depth_value_update",11,"do_not_update",0,, +"POLYGON_ATTR","translucent_depth_value_update",11,"update",1,, +"POLYGON_ATTR","render_front_surface",7,"disable",0,, +"POLYGON_ATTR","render_front_surface",7,"enable",1,, +"POLYGON_ATTR","render_back_surface",6,"disable",0,, +"POLYGON_ATTR","render_back_surface",6,"enable",1,, +"POLYGON_ATTR","polygon_mode","5-4","modulation","0b00",, +"POLYGON_ATTR","polygon_mode","5-4","decal","0b01",, +"POLYGON_ATTR","polygon_mode","5-4","toon","0b10",, +"POLYGON_ATTR","polygon_mode","5-4","shadow","0b11",, +"POLYGON_ATTR","light_3",3,"disable",0,, +"POLYGON_ATTR","light_3",3,"enable",1,, +"POLYGON_ATTR","light_2",2,"disable",0,, +"POLYGON_ATTR","light_2",2,"enable",1,, +"POLYGON_ATTR","light_1",1,"disable",0,, +"POLYGON_ATTR","light_1",1,"enable",1,, +"POLYGON_ATTR","light_0",0,"disable",0,, +"POLYGON_ATTR","light_0",0,"enable",1,, +,,,,,, +"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","do_not_transform_texture_coordinates","0b00",, +"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","texcoord_source","0b01",, +"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","normal_source","0b10",, +"TEXIMAGE_PARAM","texture_coordinate_transformation_mode","31-30","vextex_source","0b11",, +"TEXIMAGE_PARAM","palette_color0_transparency",29,"palette_setting",0,, +"TEXIMAGE_PARAM","palette_color0_transparency",29,"always_transparent",1,, +"TEXIMAGE_PARAM","texture_format","28-26","no_texture",0,, +"TEXIMAGE_PARAM","texture_format","28-26","a3i5_translucent",1,, +"TEXIMAGE_PARAM","texture_format","28-26","4_color_palette",2,, +"TEXIMAGE_PARAM","texture_format","28-26","16_color_palette",3,, +"TEXIMAGE_PARAM","texture_format","28-26","256_color_palette",4,, +"TEXIMAGE_PARAM","texture_format","28-26","4x4_texel_compressed",5,, +"TEXIMAGE_PARAM","texture_format","28-26","a5i3_translucent",6,, +"TEXIMAGE_PARAM","texture_format","28-26","direct",7,, +"TEXIMAGE_PARAM","t_size","25-23","8_texels",0,, +"TEXIMAGE_PARAM","t_size","25-23","16_texels",1,, +"TEXIMAGE_PARAM","t_size","25-23","32_texels",2,, +"TEXIMAGE_PARAM","t_size","25-23","64_texels",3,, +"TEXIMAGE_PARAM","t_size","25-23","128_texels",4,, +"TEXIMAGE_PARAM","t_size","25-23","256_texels",5,, +"TEXIMAGE_PARAM","t_size","25-23","512_texels",6,, +"TEXIMAGE_PARAM","t_size","25-23","1024_texels",7,, +"TEXIMAGE_PARAM","s_size","22-20","8_texels",0,, +"TEXIMAGE_PARAM","s_size","22-20","16_texels",1,, +"TEXIMAGE_PARAM","s_size","22-20","32_texels",2,, +"TEXIMAGE_PARAM","s_size","22-20","64_texels",3,, +"TEXIMAGE_PARAM","s_size","22-20","128_texels",4,, +"TEXIMAGE_PARAM","s_size","22-20","256_texels",5,, +"TEXIMAGE_PARAM","s_size","22-20","512_texels",6,, +"TEXIMAGE_PARAM","s_size","22-20","1024_texels",7,, +"TEXIMAGE_PARAM","flip_t",19,"do_not_flip",0,, +"TEXIMAGE_PARAM","flip_t",19,"flip",1,, +"TEXIMAGE_PARAM","flip_s",18,"do_not_flip",0,, +"TEXIMAGE_PARAM","flip_s",18,"flip",1,, +"TEXIMAGE_PARAM","repeat_t",17,"do_not_repeat",0,, +"TEXIMAGE_PARAM","repeat_t",17,"repeat",1,, +"TEXIMAGE_PARAM","repeat_s",16,"do_not_repeat",0,, +"TEXIMAGE_PARAM","repeat_s",16,"repeat",1,, +"TEXIMAGE_PARAM",,"15-0","texture_starting_address",,"0xffff", +,,,,,, +"TEXPLTT_BASE",,"12-0","base_address",,"0x1fff", +,,,,,, +"DIF_AMB",,"30-26","ambient_blue",,"0b11111", +"DIF_AMB",,"25-21","ambient_green",,"0b11111", +"DIF_AMB",,"20-16","ambient_red",,"0b11111", +"DIF_AMB","vertex_color",15,"do_not_set_vertex_color",0,, +"DIF_AMB","vertex_color",15,"set_diffuse_reflection_color_as_vertex_color",1,, +"DIF_AMB",,"14-10","diffuse_blue",,"0b11111", +"DIF_AMB",,"9-5","diffuse_green",,"0b11111", +"DIF_AMB",,"4-0","diffuse_red",,"0b11111", +,,,,,, +"SPE_EMI",,"30-26","emission_blue",,"0b11111", +"SPE_EMI",,"25-21","emission_green",,"0b11111", +"SPE_EMI",,"20-16","emission_red",,"0b11111", +"SPE_EMI","shininess",15,"disable",0,, +"SPE_EMI","shininess",15,"enable",1,, +"SPE_EMI",,"14-10","specular_blue",,"0b11111", +"SPE_EMI",,"9-5","specular_green",,"0b11111", +"SPE_EMI",,"4-0","specular_red",,"0b11111", +,,,,,, +"LIGHT_VECTOR",,"31-30","light_number",,"0b11", +"LIGHT_VECTOR",,"29-20","decimal_z",,"0x3ff", +"LIGHT_VECTOR",,"19-10","decimal_y",,"0x3ff", +"LIGHT_VECTOR",,"9-0","decimal_x",,"0x3ff", +,,,,,, +"LIGHT_COLOR",,"31-30","light_number",,"0b11", +"LIGHT_COLOR",,"14-10","blue",,"0b11111", +"LIGHT_COLOR",,"9-5","green",,"0b11111", +"LIGHT_COLOR",,"4-0","red",,"0b11111", +,,,,,, +"SHININESS",,"31-24","4x_3",,"0xff", +"SHININESS",,"23-16","4x_2",,"0xff", +"SHININESS",,"15-8","4x_1",,"0xff", +"SHININESS",,"7-0","4x_0",,"0xff", +,,,,,, +"BEGIN_VTXS","type","1-0","triangle","0b00",, +"BEGIN_VTXS","type","1-0","quadrilateral","0b01",, +"BEGIN_VTXS","type","1-0","triangle_strip","0b10",, +"BEGIN_VTXS","type","1-0","quadrilateral_strip","0b11",, +,,,,,, +"SWAP_BUFFERS","depth_buffering",1,"z_value",0,, +"SWAP_BUFFERS","depth_buffering",1,"w_value",1,, +"SWAP_BUFFERS","translucent_polygon_y_sorting",0,"auto_sort",0,, +"SWAP_BUFFERS","translucent_polygon_y_sorting",0,"manual_sort",1,, +,,,,,, +"VIEWPORT",,"31-24","y2",,"0xff", +"VIEWPORT",,"23-16","x2",,"0xff", +"VIEWPORT",,"15-8","y1",,"0xff", +"VIEWPORT",,"7-0","x1",,"0xff", +,,,,,, +"BOX_TEST",0,"31-16","y_coordinate",,"0xffff", +"BOX_TEST",0,"15-0","x_coordinate",,"0xffff", +"BOX_TEST",1,"31-16","width",,"0xffff", +"BOX_TEST",1,"15-0","z_coordinate",,"0xffff", +"BOX_TEST",2,"31-16","depth",,"0xffff", +"BOX_TEST",2,"15-0","height",,"0xffff", +,,,,,, +"POS_TEST",0,"31-16","y_coordinate",,"0xffff", +"POS_TEST",0,"15-0","x_coordinate",,"0xffff", +"POS_TEST",1,"15-0","z_coordinate",,"0xffff", +,,,,,, +"VEC_TEST",,"29-20","decimal_z",,"0x3ff", +"VEC_TEST",,"19-10","decimal_y",,"0x3ff", +"VEC_TEST",,"9-0","decimal_x",,"0x3ff", +,,,,,, +"GXSTAT","command_fifo_interrupt_condition","31-30","disable","0b00",, +"GXSTAT","command_fifo_interrupt_condition","31-30","half_full","0b01",, +"GXSTAT","command_fifo_interrupt_condition","31-30","empty","0b10",, +"GXSTAT",,27,"geometry_engine_busy",,, +"GXSTAT","fifo_status",26,"empty",,, +"GXSTAT","fifo_status",25,"less_than_half_full",,, +"GXSTAT","fifo_status",24,"full",,, +"GXSTAT",,"23-16","command_fifo_count",,, +"GXSTAT","matrix_stack_status",15,"stack_overflow_or_underflow",,, +"GXSTAT","matrix_stack_status",14,"stack_busy",,, +"GXSTAT","matrix_stack_status",13,"projection_matrix_stack_level",,, +"GXSTAT","matrix_stack_status","12-8","position_and_vector_matrix_stack_level",,, +"GXSTAT",,1,"test_status",,, +"GXSTAT",,0,"test_busy",,, +,,,,,, +"LISTRAM_COUNT",,"11-0","counter",,, +,,,,,, +"VTXRAM_COUNT",,"12-0","counter",,, +,,,,,, "OBJ_ATTRIBUTE_0","obj_shape","15-14","square","0b00",, "OBJ_ATTRIBUTE_0","obj_shape","15-14","long_rectangle","0b01",, "OBJ_ATTRIBUTE_0","obj_shape","15-14","tall_rectangle","0b10",, @@ -137,3 +380,11 @@ "OBJ_ATTRIBUTE_0","affine_transformation",8,"disable",0,, "OBJ_ATTRIBUTE_0","affine_transformation",8,"enable",1,, "OBJ_ATTRIBUTE_0",,"7-0","y_coordinate",,"0xff", +,,,,,, +"OBJ_ATTRIBUTE_1",,"15-14","obj_size",,"0b11", +"OBJ_ATTRIBUTE_1",,"13-9","affine_transformation_parameter",,"0b11111", +"OBJ_ATTRIBUTE_1",,"8-0","x_coordinate",,"0x1ff", +,,,,,, +"OBJ_ATTRIBUTE_2",,"15-12","color_parameter",,"0b1111", +"OBJ_ATTRIBUTE_2",,"11-10","display_priority",,"0b11", +"OBJ_ATTRIBUTE_2",,"9-0","character_name",,"0x3ff", diff --git a/registers/graphics_engine_bits.ods b/registers/graphics_engine_bits.ods index a7c21c5ec6563dd8ca08ced06618011eefda1d88..355208b9893fe264081fca358481301bb3a6af1d 100644 GIT binary patch delta 11554 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 VKPMaOziRkGVW!k*bkF~Q{|9I-xuO67 diff --git a/registers/parse_bits.py b/registers/parse_bits.py index ef01bcf..6c0d2d2 100644 --- a/registers/parse_bits.py +++ b/registers/parse_bits.py @@ -75,6 +75,7 @@ def aggregate_enums(aggregated_rows): enum_aggregated = defaultdict(list) all_bits = set() enum_bits = dict() + non_enum_bits = list() def assert_unique_ordered(bits, row): nonlocal all_bits @@ -82,20 +83,28 @@ def aggregate_enums(aggregated_rows): assert max(all_bits, default=32) > max(bits), (all_bits, bits) all_bits |= bits + def enum_bits_name(row): + return (row["register_name"], row["enum_name"]) + for row in aggregated_rows: bit = parse_row(row) assert row["bit_name"] != "", row if row["enum_name"] == "": - assert_unique_ordered(bit.bits, row) - non_enum.append(bit) - else: - if row["enum_name"] not in enum_bits: + if bit.bits not in non_enum_bits: assert_unique_ordered(bit.bits, row) + non_enum.append(bit) + non_enum_bits.append(bit.bits) + else: + if enum_bits_name(row) not in enum_bits: + if bit.bits not in enum_bits.values(): + #assert_unique_ordered(bit.bits, row) + pass non_enum.append(row["enum_name"]) else: - assert enum_bits[row["enum_name"]] == bit.bits, row + eb = enum_bits[enum_bits_name(row)] + assert eb == bit.bits or (eb & bit.bits) == set(), row - enum_bits[row["enum_name"]] = bit.bits + enum_bits[enum_bits_name(row)] = bit.bits enum_aggregated[row["enum_name"]].append(bit) return non_enum, dict(enum_aggregated)