2024-07-12 13:07:16 -04:00
|
|
|
//
|
|
|
|
// Created by william on 12/07/24.
|
|
|
|
//
|
|
|
|
|
2024-07-12 18:52:54 -04:00
|
|
|
#include <assert.h>
|
2024-07-12 13:07:16 -04:00
|
|
|
#include "nametable_window.h"
|
|
|
|
|
2024-07-12 18:52:54 -04:00
|
|
|
#define NAMETABLE_BANK_SIZE 0x0400
|
|
|
|
|
2024-07-21 16:41:38 -04:00
|
|
|
void nametable_window_init(NesNametableWindow *window) {
|
2024-07-12 13:07:16 -04:00
|
|
|
int win_size = pattern_display_get_size(NW_ROW_TILE_COUNT);
|
|
|
|
window->sdl_context = window_init("Nametable", win_size, win_size, NW_SCALE);
|
|
|
|
|
2024-07-21 16:41:38 -04:00
|
|
|
pattern_display_init(&window->pattern_display, window->sdl_context.renderer, NW_ROW_TILE_COUNT, NW_ROW_TILE_COUNT - 2,
|
2024-07-12 18:52:54 -04:00
|
|
|
PATTERN_DISPLAY_DYNAMIC);
|
2024-07-12 13:07:16 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void nametable_window_uninit(NesNametableWindow *window) {
|
|
|
|
pattern_display_uninit(&window->pattern_display);
|
|
|
|
window_uninit(window->sdl_context);
|
|
|
|
}
|
|
|
|
|
2024-07-12 18:52:54 -04:00
|
|
|
static byte *nametable_window_read_byte(address addr, void *data) {
|
|
|
|
assert(addr < NAMETABLE_BANK_SIZE * 4);
|
|
|
|
assert(data != NULL);
|
|
|
|
|
2024-07-21 16:41:38 -04:00
|
|
|
byte **nametables = (byte **) data;
|
2024-07-12 18:52:54 -04:00
|
|
|
|
|
|
|
int bank = addr / NAMETABLE_BANK_SIZE;
|
|
|
|
int bank_addr = addr % NAMETABLE_BANK_SIZE;
|
|
|
|
|
|
|
|
switch (bank) {
|
|
|
|
case 0:
|
|
|
|
case 1:
|
2024-07-21 16:41:38 -04:00
|
|
|
return &nametables[0][bank_addr];
|
2024-07-12 18:52:54 -04:00
|
|
|
default:
|
2024-07-21 16:41:38 -04:00
|
|
|
return &nametables[1][bank_addr];
|
2024-07-12 18:52:54 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-21 16:41:38 -04:00
|
|
|
void nametable_window_update(NesNametableWindow *window, byte *nametable_0, byte *nametable_1) {
|
|
|
|
byte **nametables[2];
|
|
|
|
nametables[0] = &nametable_0;
|
|
|
|
nametables[1] = &nametable_1;
|
|
|
|
|
|
|
|
pattern_display_build(&window->pattern_display, &nametable_window_read_byte, nametables);
|
2024-07-12 13:07:16 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void nametable_window_render(NesNametableWindow *window) {
|
|
|
|
SDL_RenderClear(window->sdl_context.renderer);
|
|
|
|
pattern_display_render(&window->pattern_display, window->sdl_context.renderer);
|
|
|
|
}
|
|
|
|
|
|
|
|
void nametable_window_present(NesNametableWindow *window) {
|
|
|
|
SDL_RenderPresent(window->sdl_context.renderer);
|
|
|
|
}
|