14 static struct rgb15 *disp_data;
15 void *vga_shm_get(void);
16 void vga_shm_free(void* addr);
17 int ppucore_init(void);
18 void clean_ppucore(void);
19 int load_cartridge(const char* cartridge);
20 void set_vga_base(unsigned char* base);
22 void dump_vram(int type, int bank, unsigned short addr, int size);
23 void set_bgtile(int tile_id);
24 void set_sprite(int x, int y, int tile_id, struct sprite_attr sa);
26 struct timespec sleep_inteval = {0, 1000000 / VGA_REFRESH_RATE};
33 int load_prg_rom(FILE* cartridge, int num_rom_bank) {
34 #define ROM_32K 0x8000
38 rom_buffer = malloc(ROM_32K);
39 if (rom_buffer == NULL)
41 len = fread(rom_buffer, 1, ROM_32K, cartridge);
52 int debug_mode = TRUE;
53 int critical_error = FALSE;
54 void dump_6502(int full) {
57 static void test_ppu(void) {
59 unsigned char plt[32] = {
60 0, 1, 2, 3, 0, 5, 6, 7,
61 0, 9, 10, 11, 0, 13, 14, 15,
62 0, 30, 31, 32, 0, 40, 41, 42,
63 0, 20, 21, 22, 0, 11, 12, 13
66 for (i = 0; i < 16; i++)
67 bg_palette_tbl_set(i, plt[i]);
68 for (i = 0; i < 16; i++)
69 spr_palette_tbl_set(i, plt[i + 16]);
71 for (i = 0; i < 960; i++)
72 name_tbl_set(0, i, 0);
74 for (i = 0; i < 64; i++)
75 attr_tbl_set(0, i, 0);
77 //name_tbl_set(0, 205, 2);
78 name_tbl_set(0, 205, 'D');
79 name_tbl_set(0, 206, 'e');
80 name_tbl_set(0, 207, 'e');
81 name_tbl_set(0, 208, '!');
82 name_tbl_set(0, 209, '!');
83 //205 = palette gp2 01100101b
85 attr_tbl_set(0, 11, 0x65);
88 name_tbl_set(0, 300, 1);
89 attr_tbl_set(0, 0, 0x65);
91 for (i = 0; i < 960; i++)
95 struct sprite_attr sa;
100 set_sprite(30, 100, 'd', sa);
102 set_sprite(50, 100, 'd', sa);
104 set_sprite(70, 105, 'd', sa);
108 //void dump_vram(int type, int bank, unsigned short addr, int size);
110 dump_vram(VRAM_DUMP_TYPE_PTN, 0, 0, 0x100);
111 dump_vram(VRAM_DUMP_TYPE_NAME, 0, 0, 300);
112 dump_vram(VRAM_DUMP_TYPE_ATTR, 0, 0, 64);
113 dump_vram(VRAM_DUMP_TYPE_PLT, 0, 0, 16);
117 int main(int argc, char** argv) {
120 ret = ppucore_init();
122 fprintf(stderr, "ppucore init error.\n");
125 ret = load_cartridge("sample1.nes");
127 fprintf(stderr, "load cartridge error.\n");
131 /* get vga shared memory */
132 if((disp_data = (struct rgb15 *)vga_shm_get()) == NULL)
134 fprintf(stderr, "error attaching shared memory.\n");
138 memset(disp_data, 0, VGA_SHM_SIZE);
139 set_vga_base((unsigned char*)disp_data);
146 vga_shm_free(disp_data);