diff --git a/addresses.lds b/addresses.lds index a49809a..c5115e7 100644 --- a/addresses.lds +++ b/addresses.lds @@ -11,8 +11,10 @@ modem = 0xa0600000; aica = 0xa0700000; aica_rtc = 0xa0710000; +system_boot_rom = 0xa0000000; aica_wave_memory = 0xa0800000; -texture_memory = 0xa5000000; +texture_memory64 = 0xa4000000; +texture_memory32 = 0xa5000000; system_memory = 0xac000000; ta_fifo_polygon_converter = 0x10000000; ta_fifo_yuv_converter = 0x10800000; diff --git a/example/font.cpp b/example/font.cpp index 316dc3a..4491b75 100644 --- a/example/font.cpp +++ b/example/font.cpp @@ -142,7 +142,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, const char * s, const uint32_t l void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -172,8 +172,8 @@ inline void inflate_character(const uint8_t * src, const uint8_t c) //serial::character('\n'); } - auto mem = reinterpret_cast(0xa400'0000); - auto texture = reinterpret_cast(mem->texture); + auto mem = reinterpret_cast(texture_memory64); + auto texture = reinterpret_cast(mem->texture); uint32_t offset = 8 * 8 * character_index; union { diff --git a/example/macaw.cpp b/example/macaw.cpp index 95719a3..d80de67 100644 --- a/example/macaw.cpp +++ b/example/macaw.cpp @@ -77,7 +77,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -93,7 +93,7 @@ void copy_macaw_texture() { auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_cube.cpp b/example/macaw_cube.cpp index c68f765..7781a5d 100644 --- a/example/macaw_cube.cpp +++ b/example/macaw_cube.cpp @@ -109,7 +109,7 @@ void transform(ta_parameter_writer& parameter, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -125,7 +125,7 @@ void copy_macaw_texture() { auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_multipass.cpp b/example/macaw_multipass.cpp index 2cb1c52..df2fcd8 100644 --- a/example/macaw_multipass.cpp +++ b/example/macaw_multipass.cpp @@ -84,7 +84,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(uint32_t render_passes) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -104,7 +104,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_twiddle.cpp b/example/macaw_twiddle.cpp index c5d46cb..88aff2c 100644 --- a/example/macaw_twiddle.cpp +++ b/example/macaw_twiddle.cpp @@ -82,7 +82,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -102,7 +102,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); uint16_t temp[size / 3]; for (uint32_t px = 0; px < size / 3; px++) { diff --git a/example/sprite.cpp b/example/sprite.cpp index 1f45781..7a1f70d 100644 --- a/example/sprite.cpp +++ b/example/sprite.cpp @@ -55,7 +55,7 @@ uint32_t transform(uint32_t * ta_parameter_buf) void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); diff --git a/example/translucency.cpp b/example/translucency.cpp index 2c67004..02a1961 100644 --- a/example/translucency.cpp +++ b/example/translucency.cpp @@ -95,7 +95,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -115,7 +115,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/memorymap.hpp b/memorymap.hpp index 80ce5eb..1d550ed 100644 --- a/memorymap.hpp +++ b/memorymap.hpp @@ -2,7 +2,8 @@ extern volatile uint32_t system_boot_rom[0x200000] __asm("system_boot_rom"); extern volatile uint32_t aica_wave_memory[0x200000] __asm("aica_wave_memory"); -extern volatile uint32_t texture_memory[0x800000] __asm("texture_memory"); +extern volatile uint32_t texture_memory64[0x800000] __asm("texture_memory64"); +extern volatile uint32_t texture_memory32[0x800000] __asm("texture_memory32"); extern volatile uint32_t system_memory[0x1000000] __asm("system_memory"); extern volatile uint32_t ta_fifo_polygon_converter[0x800000] __asm("ta_fifo_polygon_converter"); extern volatile uint32_t ta_fifo_yuv_converter[0x800000] __asm("ta_fifo_yuv_converter"); diff --git a/regs/memorymap.csv b/regs/memorymap.csv index 89fb7e7..22aed79 100644 --- a/regs/memorymap.csv +++ b/regs/memorymap.csv @@ -17,8 +17,8 @@ "0","0x01000000","0x01FFFFFF","External Device","16MB",, "0","0x02000000","0x03FFFFFF","Mirror of 0x00000000 - 0x1FFFFFFF","32MB",, ,,,,,, -"1","0x04000000","0x04FFFFFF","Texture memory 64bit access","8MB",, -"1","0x05000000","0x05FFFFFF","Texture memory 32bit access","8MB",,"texture_memory" +"1","0x04000000","0x04FFFFFF","Texture memory 64bit access","8MB",,"texture_memory64" +"1","0x05000000","0x05FFFFFF","Texture memory 32bit access","8MB",,"texture_memory32" "1","0x06000000","0x06FFFFFF","Mirror of 0x04000000 - 0x06FFFFFF","32MB",, ,,,,,, "2","0x08000000","0x0bffffff","Unassigned","-",, diff --git a/regs/memorymap.ods b/regs/memorymap.ods index dd874ac..9b1f000 100644 Binary files a/regs/memorymap.ods and b/regs/memorymap.ods differ diff --git a/twiddle.hpp b/twiddle.hpp index 0c0075d..8576826 100644 --- a/twiddle.hpp +++ b/twiddle.hpp @@ -58,7 +58,7 @@ static_assert(from_xy(0b000, 0b110) == 20); static_assert(from_xy(0b000, 0b111) == 21); template -void texture(T * dst, const T * src, const uint32_t width, const uint32_t height) +void texture(volatile T * dst, const T * src, const uint32_t width, const uint32_t height) { for (uint32_t y = 0; y < height; y++) { for (uint32_t x = 0; x < width; x++) { diff --git a/vga.cpp b/vga.cpp index efb8254..0e1d8ae 100644 --- a/vga.cpp +++ b/vga.cpp @@ -146,7 +146,7 @@ void vga() void vga_fill_framebuffer() { - volatile uint16_t * vram = reinterpret_cast(texture_memory); + volatile uint16_t * vram = reinterpret_cast(texture_memory32); for (int y = 0; y < 480; y++) { for (int x = 0; x < 640; x++) { struct hsv hsv = {(y * 255) / 480, 255, 255};