From ec85edbc14f43f75a13ffe02ac3b168e45d42ac1 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 31 Aug 2024 04:20:12 -0500 Subject: [PATCH] add oam, more bits --- addresses_arm9.lds | 3 +- bits.h | 131 +++++++++++++++++ ...graphics_engine_a.h => graphics_engine_a.h | 6 +- ...graphics_engine_b.h => graphics_engine_b.h | 6 +- io_registers.h | 11 ++ main.c | 4 +- oam.h | 37 +++++ registers/format.py | 13 +- registers/generate.sh | 8 +- registers/graphics_engine_bits.csv | 139 ++++++++++++++++++ registers/graphics_engine_bits.h | 50 ------- registers/graphics_engine_bits.ods | Bin 25983 -> 20536 bytes 12 files changed, 345 insertions(+), 63 deletions(-) create mode 100644 bits.h rename registers/graphics_engine_a.h => graphics_engine_a.h (99%) rename registers/graphics_engine_b.h => graphics_engine_b.h (97%) create mode 100644 io_registers.h create mode 100644 oam.h create mode 100644 registers/graphics_engine_bits.csv delete mode 100644 registers/graphics_engine_bits.h diff --git a/addresses_arm9.lds b/addresses_arm9.lds index b95a94c..efc9d5d 100644 --- a/addresses_arm9.lds +++ b/addresses_arm9.lds @@ -1,5 +1,4 @@ -graphics_engine_a = 0x04000000; -graphics_engine_b = 0x04001000; +io_registers = 0x04000000; pram = 0x05000000; vram = 0x06000000; oam = 0x07000000; diff --git a/bits.h b/bits.h new file mode 100644 index 0000000..b285648 --- /dev/null +++ b/bits.h @@ -0,0 +1,131 @@ +#define DISPCNT__obj_extended_palette (0x1 << 31) +#define DISPCNT__bg_extended_palette (0x1 << 30) +#define DISPCNT__bg_screen_base_offset(v) (((v) & 0x7) << 27) +#define DISPCNT__bg_character_base_offset(v) (((v) & 0x7) << 24) +#define DISPCNT__obj_processing_during_h_blank_period (0x1 << 23) +#define DISPCNT__obj_vram_capacity__128kb (0x0 << 22) +#define DISPCNT__obj_vram_capacity__256kb (0x1 << 22) +#define DISPCNT__character_vram_capacity__32kb (0x0 << 20) +#define DISPCNT__character_vram_capacity__64kb (0x1 << 20) +#define DISPCNT__character_vram_capacity__128kb (0x2 << 20) +#define DISPCNT__character_vram_capacity__256kb (0x3 << 20) +#define DISPCNT__display_vram_block__vram_a (0x0 << 18) +#define DISPCNT__display_vram_block__vram_b (0x1 << 18) +#define DISPCNT__display_vram_block__vram_c (0x2 << 18) +#define DISPCNT__display_vram_block__vram_d (0x3 << 18) +#define DISPCNT__display_mode__display_off (0x0 << 16) +#define DISPCNT__display_mode__graphics_display (0x1 << 16) +#define DISPCNT__display_mode__vram_display (0x2 << 16) +#define DISPCNT__display_mode__main_memory_display (0x3 << 16) +#define DISPCNT__obj_window__disable (0x0 << 15) +#define DISPCNT__obj_window__enable (0x1 << 15) +#define DISPCNT__window_1__disable (0x0 << 14) +#define DISPCNT__window_1__enable (0x1 << 14) +#define DISPCNT__window_0__disable (0x0 << 13) +#define DISPCNT__window_0__enable (0x1 << 13) +#define DISPCNT__obj__disable (0x0 << 12) +#define DISPCNT__obj__enable (0x1 << 12) +#define DISPCNT__bg3__disable (0x0 << 11) +#define DISPCNT__bg3__enable (0x1 << 11) +#define DISPCNT__bg2__disable (0x0 << 10) +#define DISPCNT__bg2__enable (0x1 << 10) +#define DISPCNT__bg1__disable (0x0 << 9) +#define DISPCNT__bg1__enable (0x1 << 9) +#define DISPCNT__bg0__disable (0x0 << 8) +#define DISPCNT__bg0__enable (0x1 << 8) +#define DISPCNT__2d_display_forced_blank (0x1 << 7) +#define DISPCNT__bitmap_obj_mapping_mode__2d_mapping_with_128_horizontal_dots (0x0 << 5) +#define DISPCNT__bitmap_obj_mapping_mode__2d_mapping_with_256_horizontal_dots (0x1 << 5) +#define DISPCNT__bitmap_obj_mapping_mode__1d_mapping (0x2 << 5) +#define DISPCNT__character_obj_mapping_mode__2d_mapping (0x0 << 4) +#define DISPCNT__character_obj_mapping_mode__1d_mapping (0x1 << 4) +#define DISPCNT__2d_3d_display_selection_for_bg0__display_2d_graphics (0x0 << 3) +#define DISPCNT__2d_3d_display_selection_for_bg0__display_3d_graphics (0x1 << 3) +#define DISPCNT__bg_mode__text0_text1_text2_text3 (0x0 << 0) +#define DISPCNT__bg_mode__text0_text1_text2_affine3 (0x1 << 0) +#define DISPCNT__bg_mode__text0_text1_affine2_affine3 (0x2 << 0) +#define DISPCNT__bg_mode__text0_text1_text2_extended3 (0x3 << 0) +#define DISPCNT__bg_mode__text0_text1_affine2_extended3 (0x4 << 0) +#define DISPCNT__bg_mode__text0_text1_extended2_extended3 (0x5 << 0) +#define DISPCNT__bg_mode__3d_large_screen_256_color_bitmap (0x6 << 0) +#define DISPSTAT__v_counter_match_interrupt_request__disable (0x0 << 5) +#define DISPSTAT__v_counter_match_interrupt_request__enable (0x1 << 5) +#define DISPSTAT__h_blank_interrupt_request__disable (0x0 << 4) +#define DISPSTAT__h_blank_interrupt_request__enable (0x1 << 4) +#define DISPSTAT__v_blank_interrupt_request__disable (0x0 << 3) +#define DISPSTAT__v_blank_interrupt_request__enable (0x1 << 3) +#define DISPSTAT__v_counter_match_detection__outside_a_matching_interval (0x0 << 2) +#define DISPSTAT__v_counter_match_detection__during_a_matching_interval (0x1 << 2) +#define DISPSTAT__h_blank_detection__outside_h_blank_interval (0x0 << 1) +#define DISPSTAT__h_blank_detection__during_h_blank_interval (0x1 << 1) +#define DISPSTAT__v_blank_detection__outside_v_blank_interval (0x0 << 0) +#define DISPSTAT__v_blank_detection__during_v_blank_interval (0x1 << 0) +#define VCOUNT__v_counter_value(v) (((v) >> 0) & 0x1ff) +#define BG0CNT__screen_size__256x256 (0x0 << 14) +#define BG0CNT__screen_size__512x256 (0x1 << 14) +#define BG0CNT__screen_size__256x512 (0x2 << 14) +#define BG0CNT__screen_size__512x512 (0x3 << 14) +#define BG0CNT__bg_extended_palette_slot__slot_0 (0x0 << 13) +#define BG0CNT__bg_extended_palette_slot__slot_2 (0x1 << 13) +#define BG0CNT__screen_base_block(v) (((v) & 0x1f) << 8) +#define BG0CNT__color_mode__16_color_mode (0x0 << 7) +#define BG0CNT__color_mode__256_color_mode (0x1 << 7) +#define BG0CNT__mosaic__disable (0x0 << 6) +#define BG0CNT__mosaic__enable (0x1 << 6) +#define BG0CNT__character_base_block(v) (((v) & 0xf) << 2) +#define BG0CNT__priority(v) (((v) & 0x3) << 0) +#define BG1CNT__screen_size__256x256 (0x0 << 14) +#define BG1CNT__screen_size__512x256 (0x1 << 14) +#define BG1CNT__screen_size__256x512 (0x2 << 14) +#define BG1CNT__screen_size__512x512 (0x3 << 14) +#define BG1CNT__bg_extended_palette_slot__slot_1 (0x0 << 13) +#define BG1CNT__bg_extended_palette_slot__slot_3 (0x1 << 13) +#define BG1CNT__screen_base_block(v) (((v) & 0x1f) << 8) +#define BG1CNT__color_mode__16_color_mode (0x0 << 7) +#define BG1CNT__color_mode__256_color_mode (0x1 << 7) +#define BG1CNT__mosaic__disable (0x0 << 6) +#define BG1CNT__mosaic__enable (0x1 << 6) +#define BG1CNT__character_base_block(v) (((v) & 0xf) << 2) +#define BG1CNT__priority(v) (((v) & 0x3) << 0) +#define BG2CNT__screen_size__256x256 (0x0 << 14) +#define BG2CNT__screen_size__512x256 (0x1 << 14) +#define BG2CNT__screen_size__256x512 (0x2 << 14) +#define BG2CNT__screen_size__512x512 (0x3 << 14) +#define BG2CNT__out_of_area_processing__transparent_display (0x0 << 13) +#define BG2CNT__out_of_area_processing__wraparound_display (0x1 << 13) +#define BG2CNT__screen_base_block(v) (((v) & 0x1f) << 8) +#define BG2CNT__color_mode__16_color_mode (0x0 << 7) +#define BG2CNT__color_mode__256_color_mode (0x1 << 7) +#define BG2CNT__mosaic__disable (0x0 << 6) +#define BG2CNT__mosaic__enable (0x1 << 6) +#define BG2CNT__character_base_block(v) (((v) & 0xf) << 2) +#define BG2CNT__priority(v) (((v) & 0x3) << 0) +#define BG3CNT__screen_size__256x256 (0x0 << 14) +#define BG3CNT__screen_size__512x256 (0x1 << 14) +#define BG3CNT__screen_size__256x512 (0x2 << 14) +#define BG3CNT__screen_size__512x512 (0x3 << 14) +#define BG3CNT__out_of_area_processing__transparent_display (0x0 << 13) +#define BG3CNT__out_of_area_processing__wraparound_display (0x1 << 13) +#define BG3CNT__screen_base_block(v) (((v) & 0x1f) << 8) +#define BG3CNT__color_mode__16_color_mode (0x0 << 7) +#define BG3CNT__color_mode__256_color_mode (0x1 << 7) +#define BG3CNT__mosaic__disable (0x0 << 6) +#define BG3CNT__mosaic__enable (0x1 << 6) +#define BG3CNT__character_base_block(v) (((v) & 0xf) << 2) +#define BG3CNT__priority(v) (((v) & 0x3) << 0) +#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) +#define OBJ_ATTRIBUTE_0__color_mode__16_color_mode (0x0 << 13) +#define OBJ_ATTRIBUTE_0__color_mode__256_color_mode (0x1 << 13) +#define OBJ_ATTRIBUTE_0__mosaic__off (0x0 << 12) +#define OBJ_ATTRIBUTE_0__mosaic__on (0x1 << 12) +#define OBJ_ATTRIBUTE_0__obj_mode__normal (0x0 << 10) +#define OBJ_ATTRIBUTE_0__obj_mode__translucent (0x1 << 10) +#define OBJ_ATTRIBUTE_0__obj_mode__obj_window (0x2 << 10) +#define OBJ_ATTRIBUTE_0__obj_mode__bitmap_obj (0x3 << 10) +#define OBJ_ATTRIBUTE_0__double_size__disable (0x0 << 9) +#define OBJ_ATTRIBUTE_0__double_size__enable (0x1 << 9) +#define OBJ_ATTRIBUTE_0__affine_transformation__disable (0x0 << 8) +#define OBJ_ATTRIBUTE_0__affine_transformation__enable (0x1 << 8) +#define OBJ_ATTRIBUTE_0__y_coordinate(v) (((v) & 0xff) << 0) diff --git a/registers/graphics_engine_a.h b/graphics_engine_a.h similarity index 99% rename from registers/graphics_engine_a.h rename to graphics_engine_a.h index b721dec..e2c0720 100644 --- a/registers/graphics_engine_a.h +++ b/graphics_engine_a.h @@ -1,3 +1,5 @@ +#pragma once + #include #include #define static_assert _Static_assert @@ -249,6 +251,7 @@ struct graphics_engine_a { volatile uint32_t VECMTX_RESULT_6; volatile uint32_t VECMTX_RESULT_7; volatile uint32_t VECMTX_RESULT_8; + volatile uint8_t _pad30[2396]; }; static_assert((offsetof (struct graphics_engine_a, DISPCNT)) == 0x000); static_assert((offsetof (struct graphics_engine_a, DISPSTAT)) == 0x004); @@ -466,5 +469,4 @@ static_assert((offsetof (struct graphics_engine_a, VECMTX_RESULT_5)) == 0x694); static_assert((offsetof (struct graphics_engine_a, VECMTX_RESULT_6)) == 0x698); static_assert((offsetof (struct graphics_engine_a, VECMTX_RESULT_7)) == 0x69c); static_assert((offsetof (struct graphics_engine_a, VECMTX_RESULT_8)) == 0x6a0); - -extern struct graphics_engine_a graphics_engine_a __asm("graphics_engine_a"); +static_assert((sizeof (struct graphics_engine_a)) == 0x1000); diff --git a/registers/graphics_engine_b.h b/graphics_engine_b.h similarity index 97% rename from registers/graphics_engine_b.h rename to graphics_engine_b.h index 1369205..471550d 100644 --- a/registers/graphics_engine_b.h +++ b/graphics_engine_b.h @@ -1,3 +1,5 @@ +#pragma once + #include #include #define static_assert _Static_assert @@ -42,6 +44,7 @@ struct graphics_engine_b { volatile uint16_t BLDY; volatile uint8_t _pad2[22]; volatile uint16_t MASTER_BRIGHT; + volatile uint8_t _pad3[2]; }; static_assert((offsetof (struct graphics_engine_b, DISPCNT)) == 0x000); static_assert((offsetof (struct graphics_engine_b, BG0CNT)) == 0x008); @@ -79,5 +82,4 @@ static_assert((offsetof (struct graphics_engine_b, BLDCNT)) == 0x050); static_assert((offsetof (struct graphics_engine_b, BLDALPHA)) == 0x052); static_assert((offsetof (struct graphics_engine_b, BLDY)) == 0x054); static_assert((offsetof (struct graphics_engine_b, MASTER_BRIGHT)) == 0x06c); - -extern struct graphics_engine_b graphics_engine_b __asm("graphics_engine_b"); +static_assert((sizeof (struct graphics_engine_b)) == 0x70); diff --git a/io_registers.h b/io_registers.h new file mode 100644 index 0000000..e527cd2 --- /dev/null +++ b/io_registers.h @@ -0,0 +1,11 @@ +#pragma once + +#include "graphics_engine_a.h" +#include "graphics_engine_b.h" + +struct io_registers { + struct graphics_engine_a a; + struct graphics_engine_b b; +}; + +extern struct io_registers io_registers __asm("io_registers"); diff --git a/main.c b/main.c index dd74991..9236345 100644 --- a/main.c +++ b/main.c @@ -1,8 +1,8 @@ -#include "registers/graphics_engine_a.h" +#include "io_registers.h" void main() { - graphics_engine_a.DISPCNT = (1 << 16); // DISPLAY_ON + io_registers.a.DISPCNT = (1 << 16); // DISPLAY_ON // palette ram *((volatile uint16_t *)(0x05000000)) = (7 << 10) | (31 << 5) | (19 << 0); diff --git a/oam.h b/oam.h new file mode 100644 index 0000000..486a040 --- /dev/null +++ b/oam.h @@ -0,0 +1,37 @@ +#include +#include + +#define static_assert _Static_assert + +struct obj { + volatile uint16_t attr[3]; + volatile uint16_t _0; +}; +static_assert((sizeof (struct obj)) == 8); + +struct param { + volatile uint16_t _0[3]; + volatile uint16_t pa; + volatile uint16_t _1[3]; + volatile uint16_t pb; + volatile uint16_t _2[3]; + volatile uint16_t pc; + volatile uint16_t _3[3]; + volatile uint16_t pd; +}; +static_assert((sizeof (struct param)) == 32); + +union oam { + struct obj obj[128]; + struct param param[32]; +}; +static_assert((sizeof (union oam)) == 0x400); + +struct oam_a_b { + union oam a; + union oam b; +}; +static_assert((offsetof (struct oam_a_b, a)) == 0x000); +static_assert((offsetof (struct oam_a_b, b)) == 0x400); + +extern struct oam_a_b oam __asm("oam"); diff --git a/registers/format.py b/registers/format.py index 1a32092..bc26c46 100644 --- a/registers/format.py +++ b/registers/format.py @@ -2,6 +2,7 @@ import sys from parse import register_descriptions struct_name = sys.argv[2] +struct_size = eval(sys.argv[3]) with open(sys.argv[1]) as f: buf = f.read() @@ -36,10 +37,19 @@ def c_source(registers): struct_offset += register.size + global struct_size + if struct_size == 0: + struct_size = (struct_offset + 3) // 4 * 4 + if struct_offset != struct_size: + assert struct_size > struct_offset, (hex(struct_offset), hex(struct_size)) + yield f"volatile uint8_t _pad{pad_ix}[{struct_size - struct_offset}];" + def c_asserts(registers): for register in registers: yield f"static_assert((offsetof (struct {struct_name}, {register.name})) == 0x{register.offset:03x});" +print("#pragma once") +print() print('#include ') print('#include ') print('#define static_assert _Static_assert') @@ -50,5 +60,4 @@ for line in c_source(registers): print('};') for line in c_asserts(registers): print(line) -print() -print(f'extern struct {struct_name} {struct_name} __asm("{struct_name}");') +print(f"static_assert((sizeof (struct {struct_name})) == {hex(struct_size)});") diff --git a/registers/generate.sh b/registers/generate.sh index 1ce89da..a0126ef 100644 --- a/registers/generate.sh +++ b/registers/generate.sh @@ -1,5 +1,7 @@ -python format.py 0x04000000.txt graphics_engine_a > graphics_engine_a.h -python format.py 0x04001000.txt graphics_engine_b > graphics_engine_b.h +set -eux + +python format.py 0x04000000.txt graphics_engine_a 0x1000 > ../graphics_engine_a.h +python format.py 0x04001000.txt graphics_engine_b 0 > ../graphics_engine_b.h make graphics_engine_bits.csv -python format_bits.py graphics_engine_bits.csv > graphics_engine_bits.h +python format_bits.py graphics_engine_bits.csv > ../bits.h diff --git a/registers/graphics_engine_bits.csv b/registers/graphics_engine_bits.csv new file mode 100644 index 0000000..b05b1e8 --- /dev/null +++ b/registers/graphics_engine_bits.csv @@ -0,0 +1,139 @@ +"register_name","enum_name","bits","bit_name","value","mask","description" +"DISPCNT",,31,"obj_extended_palette",1,, +"DISPCNT",,30,"bg_extended_palette",1,, +"DISPCNT",,"29-27","bg_screen_base_offset",,"0b111", +"DISPCNT",,"26-24","bg_character_base_offset",,"0b111", +"DISPCNT",,23,"obj_processing_during_h_blank_period",1,, +"DISPCNT","obj_vram_capacity",22,"128kb",0,, +"DISPCNT","obj_vram_capacity",22,"256kb",1,, +"DISPCNT","character_vram_capacity","21-20","32kb","0b00",, +"DISPCNT","character_vram_capacity","21-20","64kb","0b01",, +"DISPCNT","character_vram_capacity","21-20","128kb","0b10",, +"DISPCNT","character_vram_capacity","21-20","256kb","0b11",, +"DISPCNT","display_vram_block","19-18","vram_a","0b00",, +"DISPCNT","display_vram_block","19-18","vram_b","0b01",, +"DISPCNT","display_vram_block","19-18","vram_c","0b10",, +"DISPCNT","display_vram_block","19-18","vram_d","0b11",, +"DISPCNT","display_mode","17-16","display_off",0,, +"DISPCNT","display_mode","17-16","graphics_display",1,, +"DISPCNT","display_mode","17-16","vram_display",2,, +"DISPCNT","display_mode","17-16","main_memory_display",3,, +"DISPCNT","obj_window",15,"disable",0,, +"DISPCNT","obj_window",15,"enable",1,, +"DISPCNT","window_1",14,"disable",0,, +"DISPCNT","window_1",14,"enable",1,, +"DISPCNT","window_0",13,"disable",0,, +"DISPCNT","window_0",13,"enable",1,, +"DISPCNT","obj",12,"disable",0,, +"DISPCNT","obj",12,"enable",1,, +"DISPCNT","bg3",11,"disable",0,, +"DISPCNT","bg3",11,"enable",1,, +"DISPCNT","bg2",10,"disable",0,, +"DISPCNT","bg2",10,"enable",1,, +"DISPCNT","bg1",9,"disable",0,, +"DISPCNT","bg1",9,"enable",1,, +"DISPCNT","bg0",8,"disable",0,, +"DISPCNT","bg0",8,"enable",1,, +"DISPCNT",,7,"2d_display_forced_blank",1,, +"DISPCNT","bitmap_obj_mapping_mode","6-5","2d_mapping_with_128_horizontal_dots","0b00",, +"DISPCNT","bitmap_obj_mapping_mode","6-5","2d_mapping_with_256_horizontal_dots","0b01",, +"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","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,, +"DISPCNT","bg_mode","2-0","text0_text1_text2_extended3",3,, +"DISPCNT","bg_mode","2-0","text0_text1_affine2_extended3",4,, +"DISPCNT","bg_mode","2-0","text0_text1_extended2_extended3",5,, +"DISPCNT","bg_mode","2-0","3d_large_screen_256_color_bitmap",6,, +,,,,,, +"DISPSTAT","v_counter_match_interrupt_request",5,"disable",0,, +"DISPSTAT","v_counter_match_interrupt_request",5,"enable",1,, +"DISPSTAT","h_blank_interrupt_request",4,"disable",0,, +"DISPSTAT","h_blank_interrupt_request",4,"enable",1,, +"DISPSTAT","v_blank_interrupt_request",3,"disable",0,, +"DISPSTAT","v_blank_interrupt_request",3,"enable",1,, +"DISPSTAT","v_counter_match_detection",2,"outside_a_matching_interval",0,, +"DISPSTAT","v_counter_match_detection",2,"during_a_matching_interval",1,, +"DISPSTAT","h_blank_detection",1,"outside_h_blank_interval",0,, +"DISPSTAT","h_blank_detection",1,"during_h_blank_interval",1,, +"DISPSTAT","v_blank_detection",0,"outside_v_blank_interval",0,, +"DISPSTAT","v_blank_detection",0,"during_v_blank_interval",1,, +,,,,,, +"VCOUNT",,"8-0","v_counter_value",,, +,,,,,, +"BG0CNT","screen_size","15-14","256x256","0b00",, +"BG0CNT","screen_size","15-14","512x256","0b01",, +"BG0CNT","screen_size","15-14","256x512","0b10",, +"BG0CNT","screen_size","15-14","512x512","0b11",, +"BG0CNT","bg_extended_palette_slot",13,"slot_0",0,, +"BG0CNT","bg_extended_palette_slot",13,"slot_2",1,, +"BG0CNT",,"12-8","screen_base_block",,"0b11111", +"BG0CNT","color_mode",7,"16_color_mode",0,, +"BG0CNT","color_mode",7,"256_color_mode",1,, +"BG0CNT","mosaic",6,"disable",0,, +"BG0CNT","mosaic",6,"enable",1,, +"BG0CNT",,"5-2","character_base_block",,"0b1111", +"BG0CNT",,"1-0","priority",,"0b11", +,,,,,, +"BG1CNT","screen_size","15-14","256x256","0b00",, +"BG1CNT","screen_size","15-14","512x256","0b01",, +"BG1CNT","screen_size","15-14","256x512","0b10",, +"BG1CNT","screen_size","15-14","512x512","0b11",, +"BG1CNT","bg_extended_palette_slot",13,"slot_1",0,, +"BG1CNT","bg_extended_palette_slot",13,"slot_3",1,, +"BG1CNT",,"12-8","screen_base_block",,"0b11111", +"BG1CNT","color_mode",7,"16_color_mode",0,, +"BG1CNT","color_mode",7,"256_color_mode",1,, +"BG1CNT","mosaic",6,"disable",0,, +"BG1CNT","mosaic",6,"enable",1,, +"BG1CNT",,"5-2","character_base_block",,"0b1111", +"BG1CNT",,"1-0","priority",,"0b11", +,,,,,, +"BG2CNT","screen_size","15-14","256x256","0b00",, +"BG2CNT","screen_size","15-14","512x256","0b01",, +"BG2CNT","screen_size","15-14","256x512","0b10",, +"BG2CNT","screen_size","15-14","512x512","0b11",, +"BG2CNT","out_of_area_processing",13,"transparent_display",0,, +"BG2CNT","out_of_area_processing",13,"wraparound_display",1,, +"BG2CNT",,"12-8","screen_base_block",,"0b11111", +"BG2CNT","color_mode",7,"16_color_mode",0,, +"BG2CNT","color_mode",7,"256_color_mode",1,, +"BG2CNT","mosaic",6,"disable",0,, +"BG2CNT","mosaic",6,"enable",1,, +"BG2CNT",,"5-2","character_base_block",,"0b1111", +"BG2CNT",,"1-0","priority",,"0b11", +,,,,,, +"BG3CNT","screen_size","15-14","256x256","0b00",, +"BG3CNT","screen_size","15-14","512x256","0b01",, +"BG3CNT","screen_size","15-14","256x512","0b10",, +"BG3CNT","screen_size","15-14","512x512","0b11",, +"BG3CNT","out_of_area_processing",13,"transparent_display",0,, +"BG3CNT","out_of_area_processing",13,"wraparound_display",1,, +"BG3CNT",,"12-8","screen_base_block",,"0b11111", +"BG3CNT","color_mode",7,"16_color_mode",0,, +"BG3CNT","color_mode",7,"256_color_mode",1,, +"BG3CNT","mosaic",6,"disable",0,, +"BG3CNT","mosaic",6,"enable",1,, +"BG3CNT",,"5-2","character_base_block",,"0b1111", +"BG3CNT",,"1-0","priority",,"0b11", +,,,,,, +"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",, +"OBJ_ATTRIBUTE_0","color_mode",13,"16_color_mode",0,, +"OBJ_ATTRIBUTE_0","color_mode",13,"256_color_mode",1,, +"OBJ_ATTRIBUTE_0","mosaic",12,"off",0,, +"OBJ_ATTRIBUTE_0","mosaic",12,"on",1,, +"OBJ_ATTRIBUTE_0","obj_mode","11-10","normal","0b00",, +"OBJ_ATTRIBUTE_0","obj_mode","11-10","translucent","0b01",, +"OBJ_ATTRIBUTE_0","obj_mode","11-10","obj_window","0b10",, +"OBJ_ATTRIBUTE_0","obj_mode","11-10","bitmap_obj","0b11",, +"OBJ_ATTRIBUTE_0","double_size",9,"disable",0,, +"OBJ_ATTRIBUTE_0","double_size",9,"enable",1,, +"OBJ_ATTRIBUTE_0","affine_transformation",8,"disable",0,, +"OBJ_ATTRIBUTE_0","affine_transformation",8,"enable",1,, +"OBJ_ATTRIBUTE_0",,"7-0","y_coordinate",,"0xff", diff --git a/registers/graphics_engine_bits.h b/registers/graphics_engine_bits.h deleted file mode 100644 index 1be8ae1..0000000 --- a/registers/graphics_engine_bits.h +++ /dev/null @@ -1,50 +0,0 @@ -#define DISPCNT__obj_extended_palette (0x1 << 31) -#define DISPCNT__bg_extended_palette (0x1 << 30) -#define DISPCNT__bg_screen_base_offset(v) (((v) & 0x7) << 27) -#define DISPCNT__bg_character_base_offset(v) (((v) & 0x7) << 24) -#define DISPCNT__obj_processing_during_h_blank_period (0x1 << 23) -#define DISPCNT__obj_vram_capacity___128kb (0x0 << 22) -#define DISPCNT__obj_vram_capacity___256kb (0x1 << 22) -#define DISPCNT__character_vram_capacity___32kb (0x0 << 20) -#define DISPCNT__character_vram_capacity___64kb (0x1 << 20) -#define DISPCNT__character_vram_capacity___128kb (0x2 << 20) -#define DISPCNT__character_vram_capacity___256kb (0x3 << 20) -#define DISPCNT__display_vram_block__vram_a (0x0 << 18) -#define DISPCNT__display_vram_block__vram_b (0x1 << 18) -#define DISPCNT__display_vram_block__vram_c (0x2 << 18) -#define DISPCNT__display_vram_block__vram_d (0x3 << 18) -#define DISPCNT__display_mode__display_off (0x0 << 16) -#define DISPCNT__display_mode__graphics_display (0x1 << 16) -#define DISPCNT__display_mode__vram_display (0x2 << 16) -#define DISPCNT__display_mode__main_memory_display (0x3 << 16) -#define DISPCNT__obj_window__disable (0x0 << 15) -#define DISPCNT__obj_window__enable (0x1 << 15) -#define DISPCNT__window_1__disable (0x0 << 14) -#define DISPCNT__window_1__enable (0x1 << 14) -#define DISPCNT__window_0__disable (0x0 << 13) -#define DISPCNT__window_0__enable (0x1 << 13) -#define DISPCNT__obj__disable (0x0 << 12) -#define DISPCNT__obj__enable (0x1 << 12) -#define DISPCNT__bg3__disable (0x0 << 11) -#define DISPCNT__bg3__enable (0x1 << 11) -#define DISPCNT__bg2__disable (0x0 << 10) -#define DISPCNT__bg2__enable (0x1 << 10) -#define DISPCNT__bg1__disable (0x0 << 9) -#define DISPCNT__bg1__enable (0x1 << 9) -#define DISPCNT__bg0__disable (0x0 << 8) -#define DISPCNT__bg0__enable (0x1 << 8) -#define DISPCNT__2d_display_forced_blank (0x1 << 7) -#define DISPCNT__bitmap_obj_mapping_mode__2d_mapping_with_128_horizontal_dots (0x0 << 5) -#define DISPCNT__bitmap_obj_mapping_mode__2d_mapping_with_256_horizontal_dots (0x1 << 5) -#define DISPCNT__bitmap_obj_mapping_mode__1d_mapping (0x2 << 5) -#define DISPCNT__character_obj_mapping_mode__2d_mapping (0x0 << 4) -#define DISPCNT__character_obj_mapping_mode__1d_mapping (0x1 << 4) -#define DISPCNT__2d_3d_display_selection_for_bg0__display_2d_graphics (0x0 << 3) -#define DISPCNT__2d_3d_display_selection_for_bg0__display_3d_graphics (0x1 << 3) -#define DISPCNT__bg_mode__text0_text1_text2_text3 (0x0 << 0) -#define DISPCNT__bg_mode__text0_text1_text2_affine3 (0x1 << 0) -#define DISPCNT__bg_mode__text0_text1_affine2_affine3 (0x2 << 0) -#define DISPCNT__bg_mode__text0_text1_text2_extended3 (0x3 << 0) -#define DISPCNT__bg_mode__text0_text1_affine2_extended3 (0x4 << 0) -#define DISPCNT__bg_mode__text0_text1_extended2_extended3 (0x5 << 0) -#define DISPCNT__bg_mode__3d_large_screen_256_color_bitmap (0x6 << 0) diff --git a/registers/graphics_engine_bits.ods b/registers/graphics_engine_bits.ods index 1e3b66519ad4251b72954fe281765e2f89761c92..436800080ba212513234d3e9ecb6b3a0130f14b0 100644 GIT binary patch delta 16223 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 j-T*psB54=|+q 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