aboutsummaryrefslogtreecommitdiffstats
path: root/src/uxn/devices/ppu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/uxn/devices/ppu.c')
-rw-r--r--src/uxn/devices/ppu.c29
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/*
4Copyright (c) 2021 Devine Lu Linvega 5Copyright (c) 2021 Devine Lu Linvega
@@ -14,11 +15,12 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14WITH REGARD TO THIS SOFTWARE. 15WITH 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
23static u32 unpack_icon_lut[256] = { 25static 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
214IWRAM_CODE 216IWRAM_CODE
215void 217void
218putfontchar(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
228IWRAM_CODE
229void
216putchr(u32 *layer, u16 x, u16 y, u8 *sprite, u8 color, 230putchr(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}