diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-23 17:37:16 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-23 17:37:16 +0200 |
commit | 0a3831824a4e93825c5b939f406545eead622fbe (patch) | |
tree | bd5fdcd4619f43c660a2677680f73a7faf50397e /src/uxn/devices/ppu.c | |
parent | 27472e8acf860d981425a751a4e92343ccdf387a (diff) | |
download | uxngba-0a3831824a4e93825c5b939f406545eead622fbe.tar.gz uxngba-0a3831824a4e93825c5b939f406545eead622fbe.zip |
Simplify and speed up the text engine
Diffstat (limited to 'src/uxn/devices/ppu.c')
-rw-r--r-- | src/uxn/devices/ppu.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/uxn/devices/ppu.c b/src/uxn/devices/ppu.c index 02267f0..64f3fb4 100644 --- a/src/uxn/devices/ppu.c +++ b/src/uxn/devices/ppu.c | |||
@@ -1,4 +1,5 @@ | |||
1 | #include "ppu.h" | 1 | #include "ppu.h" |
2 | #include "bd-font.c" | ||
2 | 3 | ||
3 | /* | 4 | /* |
4 | Copyright (c) 2021 Devine Lu Linvega | 5 | Copyright (c) 2021 Devine Lu Linvega |
@@ -14,11 +15,12 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
14 | WITH REGARD TO THIS SOFTWARE. | 15 | WITH REGARD TO THIS SOFTWARE. |
15 | */ | 16 | */ |
16 | 17 | ||
17 | #define FG_FRONT ((u32*)(MEM_VRAM)) | 18 | #define FG_FRONT ((u32*)(MEM_VRAM)) |
18 | #define BG_FRONT ((u32*)(MEM_VRAM + KB(20))) | 19 | #define BG_FRONT ((u32*)(MEM_VRAM + KB(20))) |
19 | #define FG_BACK ((u32*)(MEM_VRAM + KB(44))) | 20 | #define FG_BACK ((u32*)(MEM_VRAM + KB(44))) |
20 | #define BG_BACK ((u32*)(MEM_VRAM + KB(64))) | 21 | #define BG_BACK ((u32*)(MEM_VRAM + KB(64))) |
21 | #define TILE_MAP ((u32*)(MEM_VRAM + KB(40))) | 22 | #define TILE_MAP ((u32*)(MEM_VRAM + KB(40))) |
23 | #define FONT_DATA ((u32*)(MEM_VRAM + KB(84))) | ||
22 | 24 | ||
23 | static u32 unpack_icon_lut[256] = { | 25 | static u32 unpack_icon_lut[256] = { |
24 | 0x00000000, 0x00000001, 0x00000010, 0x00000011, 0x00000100, | 26 | 0x00000000, 0x00000001, 0x00000010, 0x00000011, 0x00000100, |
@@ -213,6 +215,18 @@ puticn(u32 *layer, u16 x, u16 y, u8 *sprite, u8 color, u8 flipx, u8 flipy) { | |||
213 | 215 | ||
214 | IWRAM_CODE | 216 | IWRAM_CODE |
215 | void | 217 | void |
218 | putfontchar(u32 *layer, u16 tile_x, u16 tile_y, u8 ch, u8 color) { | ||
219 | u32 pos = (tile_x + tile_y * 32) * 8; | ||
220 | u32 *tile_data = &layer[pos]; | ||
221 | u32 *font_data = &FONT_DATA[8 * ch]; | ||
222 | for (size_t i = 0; i < 8; ++i) { | ||
223 | tile_data[i] = font_data[i] * color; | ||
224 | } | ||
225 | dirty_tiles[tile_y] |= 1 << tile_x; | ||
226 | } | ||
227 | |||
228 | IWRAM_CODE | ||
229 | void | ||
216 | putchr(u32 *layer, u16 x, u16 y, u8 *sprite, u8 color, | 230 | putchr(u32 *layer, u16 x, u16 y, u8 *sprite, u8 color, |
217 | u8 flipx, u8 flipy) { | 231 | u8 flipx, u8 flipy) { |
218 | u8 sprline1, sprline2; | 232 | u8 sprline1, sprline2; |
@@ -316,7 +330,7 @@ initppu(Ppu *p, u8 hor, u8 ver, u8 pad) { | |||
316 | PAL_BUFFER_BG[2] = COLOR_RED; | 330 | PAL_BUFFER_BG[2] = COLOR_RED; |
317 | PAL_BUFFER_BG[3] = COLOR_BLUE; | 331 | PAL_BUFFER_BG[3] = COLOR_BLUE; |
318 | 332 | ||
319 | // Initialize memory map. | 333 | // Initialize background memory map. |
320 | u16 *mem_map_fg = SCREENBLOCK_MEM[sb_fg]; | 334 | u16 *mem_map_fg = SCREENBLOCK_MEM[sb_fg]; |
321 | u16 *mem_map_bg = SCREENBLOCK_MEM[sb_bg]; | 335 | u16 *mem_map_bg = SCREENBLOCK_MEM[sb_bg]; |
322 | size_t k = 0; | 336 | size_t k = 0; |
@@ -325,5 +339,8 @@ initppu(Ppu *p, u8 hor, u8 ver, u8 pad) { | |||
325 | mem_map_bg[i] = k + 32 * 4; | 339 | mem_map_bg[i] = k + 32 * 4; |
326 | } | 340 | } |
327 | 341 | ||
342 | // Load font data into VRAM. | ||
343 | unpack_tiles(&bd_font, FONT_DATA, 256); | ||
344 | |||
328 | return 1; | 345 | return 1; |
329 | } | 346 | } |