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 0x0f, 0x00, 0x10, 0x20,
61 0x0f, 0x06, 0x16, 0x26,
62 0x0f, 0x08, 0x18, 0x28,
63 0x0f, 0x0a, 0x1a, 0x2a,
65 0x0f, 0x00, 0x10, 0x20,
66 0x0f, 0x06, 0x16, 0x26,
67 0x0f, 0x08, 0x18, 0x28,
68 0x0f, 0x0a, 0x1a, 0x2a,
70 0, 5, 1, 0x28, 0, 6, 0xb, 0x36,
71 0, 9, 10, 11, 0, 13, 14, 15,
72 0, 30, 31, 32, 0, 40, 41, 42,
73 0, 20, 21, 22, 0, 11, 12, 13
77 for (i = 0; i < 16; i++)
78 bg_palette_tbl_set(i, plt[i]);
79 for (i = 0; i < 16; i++)
80 spr_palette_tbl_set(i, plt[i + 16]);
82 for (i = 0; i < 960; i++)
83 name_tbl_set(0, i, 0);
85 for (i = 0; i < 64; i++)
86 attr_tbl_set(0, i, 0);
88 //name_tbl_set(0, 205, 2);
89 name_tbl_set(0, 205, 'D');
90 name_tbl_set(0, 206, 'e');
91 name_tbl_set(0, 207, 'e');
92 name_tbl_set(0, 208, '!');
93 name_tbl_set(0, 209, '!');
94 //205 = palette gp2 00011011b
96 attr_tbl_set(0, 11, 0x1b);
99 name_tbl_set(0, 300, 1);
100 attr_tbl_set(0, 0, 0x65);
102 for (i = 0; i < 960; i++)
106 struct sprite_attr sa;
111 set_sprite(30, 100, 'd', sa);
113 set_sprite(50, 100, 'd', sa);
115 set_sprite(70, 105, 'd', sa);
119 //void dump_vram(int type, int bank, unsigned short addr, int size);
121 dump_vram(VRAM_DUMP_TYPE_PTN, 0, 0, 0x100);
122 dump_vram(VRAM_DUMP_TYPE_NAME, 0, 0, 300);
123 dump_vram(VRAM_DUMP_TYPE_ATTR, 0, 0, 64);
124 dump_vram(VRAM_DUMP_TYPE_PLT, 0, 0, 16);
128 int main(int argc, char** argv) {
131 ret = ppucore_init();
133 fprintf(stderr, "ppucore init error.\n");
136 ret = load_cartridge("sample1.nes");
138 fprintf(stderr, "load cartridge error.\n");
142 /* get vga shared memory */
143 if((disp_data = (struct rgb15 *)vga_shm_get()) == NULL)
145 fprintf(stderr, "error attaching shared memory.\n");
149 memset(disp_data, 0, VGA_SHM_SIZE);
150 set_vga_base((unsigned char*)disp_data);
157 vga_shm_free(disp_data);