50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
|
//
|
||
|
// Created by william on 5/1/24.
|
||
|
//
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include "ppu_view.h"
|
||
|
|
||
|
void ppv_print_line(PpuView *view, byte reg, int line, char *fmt) {
|
||
|
int reg_value = view->ppu->registers[reg];
|
||
|
window_print(view->window, 0, line, fmt);
|
||
|
|
||
|
for (int i = 0; i < 0x8; i++) {
|
||
|
byte mask = 0x80 >> i;
|
||
|
byte bit = (reg_value & mask) >> (8 - i - 1);
|
||
|
|
||
|
int print_offset = 10 + i;
|
||
|
if (i > 3) {
|
||
|
print_offset += 1;
|
||
|
}
|
||
|
|
||
|
window_print(view->window, print_offset, line, "%d", bit);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ppv_print(PpuView *view) {
|
||
|
ppv_print_line(view, PPU_REGISTER_CTRL, 0, " CTRL:");
|
||
|
ppv_print_line(view, PPU_REGISTER_MASK, 1, " MASK:");
|
||
|
ppv_print_line(view, PPU_REGISTER_STATUS, 2, " STATUS:");
|
||
|
ppv_print_line(view, PPU_REGISTER_OAM_ADDR, 3, "OAM_ADDR:");
|
||
|
ppv_print_line(view, PPU_REGISTER_OAM_DATA, 4, "OAM_DATA:");
|
||
|
ppv_print_line(view, PPU_REGISTER_SCROLL, 5, " SCROLL:");
|
||
|
ppv_print_line(view, PPU_REGISTER_ADDR, 6, " ADDR:");
|
||
|
ppv_print_line(view, PPU_REGISTER_DATA, 7, " DATA:");
|
||
|
}
|
||
|
|
||
|
PpuView *ppv_init(PPU *ppu, int x, int y) {
|
||
|
PpuView *view = malloc(sizeof(PpuView));
|
||
|
view->window = malloc(sizeof(Window));
|
||
|
view->ppu = ppu;
|
||
|
|
||
|
window_init(view->window, x, y, PPU_VIEW_WIDTH, PPU_VIEW_HEIGHT, "PPU VIEW");
|
||
|
ppv_print(view);
|
||
|
|
||
|
return view;
|
||
|
}
|
||
|
|
||
|
void ppv_uninit(PpuView *view) {
|
||
|
free(view->window);
|
||
|
free(view);
|
||
|
}
|