3d engine bits

This commit is contained in:
Zack Buhman 2024-08-31 23:13:43 -05:00
parent 9e6cd43860
commit 76dc15b1c0
7 changed files with 492 additions and 33 deletions

207
bits.h
View File

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

View File

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

View File

@ -127,14 +127,14 @@
0x320 RDLINES_COUNT 267 Rendering minimum fill
0x330 EDGE_COLOR_0_L 259 Edge marking color (Polygon IDs 3 upper bits are 000)
0x332 EDGE_COLOR_0_H 259 Edge marking color (Polygon IDs 3 upper bits are 001)
0x334 EDGE_COLOR_1_L 259 Edge marking color (Polygon IDs 3 upper bits are 010)
0x336 EDGE_COLOR_1_H 259 Edge marking color (Polygon IDs 3 upper bits are 011)
0x338 EDGE_COLOR_2_L 259 Edge marking color (Polygon IDs 3 upper bits are 100)
0x33a EDGE_COLOR_2_H 259 Edge marking color (Polygon IDs 3 upper bits are 101)
0x33c EDGE_COLOR_3_L 259 Edge marking color (Polygon IDs 3 upper bits are 110)
0x33e EDGE_COLOR_3_H 259 Edge marking color (Polygon IDs 3 upper bits are 111)
0x330 EDGE_COLOR_0 259 Edge marking color (Polygon IDs 3 upper bits are 000)
0x332
0x334 EDGE_COLOR_1 259 Edge marking color (Polygon IDs 3 upper bits are 010)
0x336
0x338 EDGE_COLOR_2 259 Edge marking color (Polygon IDs 3 upper bits are 100)
0x33a
0x33c EDGE_COLOR_3 259 Edge marking color (Polygon IDs 3 upper bits are 110)
0x33e
0x340 ALPHA_TEST_REF 258 Alpha test
0x350 CLEAR_COLOR 231 Color buffer initial value

View File

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

View File

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

1 register_name enum_name bits bit_name value mask description
40 DISPCNT bitmap_obj_mapping_mode 6-5 1d_mapping 0b10
41 DISPCNT character_obj_mapping_mode 4 2d_mapping 0
42 DISPCNT character_obj_mapping_mode 4 1d_mapping 1
43 DISPCNT 2d_3d_display_selection_for_bg0 display_selection_for_bg0 3 display_2d_graphics 2d_graphics 0
44 DISPCNT 2d_3d_display_selection_for_bg0 display_selection_for_bg0 3 display_3d_graphics 3d_graphics 1
45 DISPCNT bg_mode 2-0 text0_text1_text2_text3 0
46 DISPCNT bg_mode 2-0 text0_text1_text2_affine3 1
47 DISPCNT bg_mode 2-0 text0_text1_affine2_affine3 2
121 BG3CNT 5-2 character_base_block 0b1111
122 BG3CNT 1-0 priority 0b11
123
124 POWCNT lcd_output_destination 15 a_to_lower__b_to_upper 0
125 POWCNT lcd_output_destination 15 a_to_upper__b_to_lower 1
126 POWCNT 2d_graphics_engine_b 9 disable 0
127 POWCNT 2d_graphics_engine_b 9 enable 1
128 POWCNT geometry_engine 3 disable 0
129 POWCNT geometry_engine 3 enable 1
130 POWCNT rendering_engine 2 disable 0
131 POWCNT rendering_engine 2 enable 1
132 POWCNT 2d_graphics_engine_a 1 disable 0
133 POWCNT 2d_graphics_engine_a 1 enable 1
134 POWCNT lcd 0 disable 0
135 POWCNT lcd 0 enable 1
136
137 RDLINES_COUNT 5-0 rendered_lines_min
138
139 ALPHA_TEST_REF 4-0 comparison_value 0b11111
140
141 CLEAR_COLOR 29-24 clear_polygon_id 0b111111
142 CLEAR_COLOR 20-16 alpha_value 0b11111
143 CLEAR_COLOR 15 fog_enable 1
144 CLEAR_COLOR 14-10 blue 0b11111
145 CLEAR_COLOR 9-5 green 0b11111
146 CLEAR_COLOR 4-0 red 0b11111
147
148 CLEAR_DEPTH 14-0 value 0x7fff
149
150 CLRIMAGE_OFFSET 15-8 y_offset 0xff
151 CLRIMAGE_OFFSET 7-0 x_offset 0xff
152
153 DISP3DCNT clear_image 14 disable 0
154 DISP3DCNT clear_image 14 enable 1
155 DISP3DCNT 13 polygon_list_ram_and_vertex_ram_overflow 1
156 DISP3DCNT 12 color_buffer_underflow 1
157 DISP3DCNT 11-8 fog_shift 0b1111
158 DISP3DCNT fog_master 7 disable 0
159 DISP3DCNT fog_master 7 enable 1
160 DISP3DCNT fog_mode 6 blending_using_pixel_color_value_and_alpha_value 0
161 DISP3DCNT fog_mode 6 blending_using_only_pixel_alpha_value 1
162 DISP3DCNT edge_marking 5 disable 0
163 DISP3DCNT edge_marking 5 enable 1
164 DISP3DCNT anti_aliasing 4 disable 0
165 DISP3DCNT anti_aliasing 4 enable 1
166 DISP3DCNT alpha_blending 3 disable 0
167 DISP3DCNT alpha_blending 3 enable 1
168 DISP3DCNT alpha_test 2 disable 0
169 DISP3DCNT alpha_test 2 enable 1
170 DISP3DCNT toon_highlight 1 toon_shading 0
171 DISP3DCNT toon_highlight 1 highlight_shading 1
172 DISP3DCNT texture_mapping 0 disable 0
173 DISP3DCNT texture_mapping 0 enable 1
174
175 MTX_MODE matrix_mode 1-0 projection 0b00
176 MTX_MODE matrix_mode 1-0 position 0b01
177 MTX_MODE matrix_mode 1-0 position_and_vector 0b10
178 MTX_MODE matrix_mode 1-0 texture 0b11
179
180 MTX_POP 5-0 number_of_pops 0b111111
181
182 MTX_STORE 4-0 index 0b11111
183
184 MTX_RESTORE 4-0 position 0b11111
185
186 NORMAL 29-20 z_component 0x7ff
187 NORMAL 19-10 y_component 0x7ff
188 NORMAL 9-0 x_component 0x7ff
189
190 TEXCOORD 31-16 t_coordinate 0xffff
191 TEXCOORD 15-0 x_coordinate 0xffff
192
193 VTX_16 0 31-16 y_coordinate 0xffff
194 VTX_16 0 15-0 x_coordinate 0xffff
195 VTX_16 1 15-0 z_coordinate 0xffff
196
197 VTX_10 29-20 z_coordinate 0x7ff
198 VTX_10 19-10 y_coordinate 0x7ff
199 VTX_10 9-0 x_coordinate 0x7ff
200
201 VTX_XY 31-16 y_coordinate 0xffff
202 VTX_XY 15-0 x_coordinate 0xffff
203
204 VTX_XZ 31-16 z_coordinate 0xffff
205 VTX_XZ 15-0 z_coordinate 0xffff
206
207 VTX_YZ 31-16 z_coordinate 0xffff
208 VTX_YZ 15-0 y_coordinate 0xffff
209
210 VTX_DIFF 29-20 z_coordinate 0x7ff
211 VTX_DIFF 19-10 y_coordinate 0x7ff
212 VTX_DIFF 9-0 x_coordinate 0x7ff
213
214 POLYGON_ATTR 29-24 polygon_id 0b111111
215 POLYGON_ATTR 20-16 alpha_value 0b11111
216 POLYGON_ATTR fog 15 disable 0
217 POLYGON_ATTR fog 15 enable 1
218 POLYGON_ATTR depth_test_condition 14 render_when_depth_value_is_smaller_than_buffer_value 0
219 POLYGON_ATTR depth_test_condition 14 render_when_depth_value_is_equal_to_buffer_value 1
220 POLYGON_ATTR one_dot_polygon 13 do_not_render 0
221 POLYGON_ATTR one_dot_polygon 13 render 1
222 POLYGON_ATTR far_plane_intersection 12 delete 0
223 POLYGON_ATTR far_plane_intersection 12 clip 1
224 POLYGON_ATTR translucent_depth_value_update 11 do_not_update 0
225 POLYGON_ATTR translucent_depth_value_update 11 update 1
226 POLYGON_ATTR render_front_surface 7 disable 0
227 POLYGON_ATTR render_front_surface 7 enable 1
228 POLYGON_ATTR render_back_surface 6 disable 0
229 POLYGON_ATTR render_back_surface 6 enable 1
230 POLYGON_ATTR polygon_mode 5-4 modulation 0b00
231 POLYGON_ATTR polygon_mode 5-4 decal 0b01
232 POLYGON_ATTR polygon_mode 5-4 toon 0b10
233 POLYGON_ATTR polygon_mode 5-4 shadow 0b11
234 POLYGON_ATTR light_3 3 disable 0
235 POLYGON_ATTR light_3 3 enable 1
236 POLYGON_ATTR light_2 2 disable 0
237 POLYGON_ATTR light_2 2 enable 1
238 POLYGON_ATTR light_1 1 disable 0
239 POLYGON_ATTR light_1 1 enable 1
240 POLYGON_ATTR light_0 0 disable 0
241 POLYGON_ATTR light_0 0 enable 1
242
243 TEXIMAGE_PARAM texture_coordinate_transformation_mode 31-30 do_not_transform_texture_coordinates 0b00
244 TEXIMAGE_PARAM texture_coordinate_transformation_mode 31-30 texcoord_source 0b01
245 TEXIMAGE_PARAM texture_coordinate_transformation_mode 31-30 normal_source 0b10
246 TEXIMAGE_PARAM texture_coordinate_transformation_mode 31-30 vextex_source 0b11
247 TEXIMAGE_PARAM palette_color0_transparency 29 palette_setting 0
248 TEXIMAGE_PARAM palette_color0_transparency 29 always_transparent 1
249 TEXIMAGE_PARAM texture_format 28-26 no_texture 0
250 TEXIMAGE_PARAM texture_format 28-26 a3i5_translucent 1
251 TEXIMAGE_PARAM texture_format 28-26 4_color_palette 2
252 TEXIMAGE_PARAM texture_format 28-26 16_color_palette 3
253 TEXIMAGE_PARAM texture_format 28-26 256_color_palette 4
254 TEXIMAGE_PARAM texture_format 28-26 4x4_texel_compressed 5
255 TEXIMAGE_PARAM texture_format 28-26 a5i3_translucent 6
256 TEXIMAGE_PARAM texture_format 28-26 direct 7
257 TEXIMAGE_PARAM t_size 25-23 8_texels 0
258 TEXIMAGE_PARAM t_size 25-23 16_texels 1
259 TEXIMAGE_PARAM t_size 25-23 32_texels 2
260 TEXIMAGE_PARAM t_size 25-23 64_texels 3
261 TEXIMAGE_PARAM t_size 25-23 128_texels 4
262 TEXIMAGE_PARAM t_size 25-23 256_texels 5
263 TEXIMAGE_PARAM t_size 25-23 512_texels 6
264 TEXIMAGE_PARAM t_size 25-23 1024_texels 7
265 TEXIMAGE_PARAM s_size 22-20 8_texels 0
266 TEXIMAGE_PARAM s_size 22-20 16_texels 1
267 TEXIMAGE_PARAM s_size 22-20 32_texels 2
268 TEXIMAGE_PARAM s_size 22-20 64_texels 3
269 TEXIMAGE_PARAM s_size 22-20 128_texels 4
270 TEXIMAGE_PARAM s_size 22-20 256_texels 5
271 TEXIMAGE_PARAM s_size 22-20 512_texels 6
272 TEXIMAGE_PARAM s_size 22-20 1024_texels 7
273 TEXIMAGE_PARAM flip_t 19 do_not_flip 0
274 TEXIMAGE_PARAM flip_t 19 flip 1
275 TEXIMAGE_PARAM flip_s 18 do_not_flip 0
276 TEXIMAGE_PARAM flip_s 18 flip 1
277 TEXIMAGE_PARAM repeat_t 17 do_not_repeat 0
278 TEXIMAGE_PARAM repeat_t 17 repeat 1
279 TEXIMAGE_PARAM repeat_s 16 do_not_repeat 0
280 TEXIMAGE_PARAM repeat_s 16 repeat 1
281 TEXIMAGE_PARAM 15-0 texture_starting_address 0xffff
282
283 TEXPLTT_BASE 12-0 base_address 0x1fff
284
285 DIF_AMB 30-26 ambient_blue 0b11111
286 DIF_AMB 25-21 ambient_green 0b11111
287 DIF_AMB 20-16 ambient_red 0b11111
288 DIF_AMB vertex_color 15 do_not_set_vertex_color 0
289 DIF_AMB vertex_color 15 set_diffuse_reflection_color_as_vertex_color 1
290 DIF_AMB 14-10 diffuse_blue 0b11111
291 DIF_AMB 9-5 diffuse_green 0b11111
292 DIF_AMB 4-0 diffuse_red 0b11111
293
294 SPE_EMI 30-26 emission_blue 0b11111
295 SPE_EMI 25-21 emission_green 0b11111
296 SPE_EMI 20-16 emission_red 0b11111
297 SPE_EMI shininess 15 disable 0
298 SPE_EMI shininess 15 enable 1
299 SPE_EMI 14-10 specular_blue 0b11111
300 SPE_EMI 9-5 specular_green 0b11111
301 SPE_EMI 4-0 specular_red 0b11111
302
303 LIGHT_VECTOR 31-30 light_number 0b11
304 LIGHT_VECTOR 29-20 decimal_z 0x3ff
305 LIGHT_VECTOR 19-10 decimal_y 0x3ff
306 LIGHT_VECTOR 9-0 decimal_x 0x3ff
307
308 LIGHT_COLOR 31-30 light_number 0b11
309 LIGHT_COLOR 14-10 blue 0b11111
310 LIGHT_COLOR 9-5 green 0b11111
311 LIGHT_COLOR 4-0 red 0b11111
312
313 SHININESS 31-24 4x_3 0xff
314 SHININESS 23-16 4x_2 0xff
315 SHININESS 15-8 4x_1 0xff
316 SHININESS 7-0 4x_0 0xff
317
318 BEGIN_VTXS type 1-0 triangle 0b00
319 BEGIN_VTXS type 1-0 quadrilateral 0b01
320 BEGIN_VTXS type 1-0 triangle_strip 0b10
321 BEGIN_VTXS type 1-0 quadrilateral_strip 0b11
322
323 SWAP_BUFFERS depth_buffering 1 z_value 0
324 SWAP_BUFFERS depth_buffering 1 w_value 1
325 SWAP_BUFFERS translucent_polygon_y_sorting 0 auto_sort 0
326 SWAP_BUFFERS translucent_polygon_y_sorting 0 manual_sort 1
327
328 VIEWPORT 31-24 y2 0xff
329 VIEWPORT 23-16 x2 0xff
330 VIEWPORT 15-8 y1 0xff
331 VIEWPORT 7-0 x1 0xff
332
333 BOX_TEST 0 31-16 y_coordinate 0xffff
334 BOX_TEST 0 15-0 x_coordinate 0xffff
335 BOX_TEST 1 31-16 width 0xffff
336 BOX_TEST 1 15-0 z_coordinate 0xffff
337 BOX_TEST 2 31-16 depth 0xffff
338 BOX_TEST 2 15-0 height 0xffff
339
340 POS_TEST 0 31-16 y_coordinate 0xffff
341 POS_TEST 0 15-0 x_coordinate 0xffff
342 POS_TEST 1 15-0 z_coordinate 0xffff
343
344 VEC_TEST 29-20 decimal_z 0x3ff
345 VEC_TEST 19-10 decimal_y 0x3ff
346 VEC_TEST 9-0 decimal_x 0x3ff
347
348 GXSTAT command_fifo_interrupt_condition 31-30 disable 0b00
349 GXSTAT command_fifo_interrupt_condition 31-30 half_full 0b01
350 GXSTAT command_fifo_interrupt_condition 31-30 empty 0b10
351 GXSTAT 27 geometry_engine_busy
352 GXSTAT fifo_status 26 empty
353 GXSTAT fifo_status 25 less_than_half_full
354 GXSTAT fifo_status 24 full
355 GXSTAT 23-16 command_fifo_count
356 GXSTAT matrix_stack_status 15 stack_overflow_or_underflow
357 GXSTAT matrix_stack_status 14 stack_busy
358 GXSTAT matrix_stack_status 13 projection_matrix_stack_level
359 GXSTAT matrix_stack_status 12-8 position_and_vector_matrix_stack_level
360 GXSTAT 1 test_status
361 GXSTAT 0 test_busy
362
363 LISTRAM_COUNT 11-0 counter
364
365 VTXRAM_COUNT 12-0 counter
366
367 OBJ_ATTRIBUTE_0 obj_shape 15-14 square 0b00
368 OBJ_ATTRIBUTE_0 obj_shape 15-14 long_rectangle 0b01
369 OBJ_ATTRIBUTE_0 obj_shape 15-14 tall_rectangle 0b10
380 OBJ_ATTRIBUTE_0 affine_transformation 8 disable 0
381 OBJ_ATTRIBUTE_0 affine_transformation 8 enable 1
382 OBJ_ATTRIBUTE_0 7-0 y_coordinate 0xff
383
384 OBJ_ATTRIBUTE_1 15-14 obj_size 0b11
385 OBJ_ATTRIBUTE_1 13-9 affine_transformation_parameter 0b11111
386 OBJ_ATTRIBUTE_1 8-0 x_coordinate 0x1ff
387
388 OBJ_ATTRIBUTE_2 15-12 color_parameter 0b1111
389 OBJ_ATTRIBUTE_2 11-10 display_priority 0b11
390 OBJ_ATTRIBUTE_2 9-0 character_name 0x3ff

Binary file not shown.

View File

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