OSDN Git Service

vram bug fixed
[motonesemu/motonesemu.git] / emulator / ppucore / dummy-driver2.c
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <time.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <ctype.h>
7 #include <string.h>
8
9 #include "tools.h"
10 #include "vga.h"
11 #include "vram.h"
12 #include "sprite.h"
13
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);
21 void vga_xfer(void);
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);
25
26 struct timespec sleep_inteval = {0, 1000000 / VGA_REFRESH_RATE};
27
28
29 /*
30  * dummy function
31  * for cartridge.c
32  * */
33 int load_prg_rom(FILE* cartridge, int num_rom_bank) {
34 #define ROM_32K 0x8000
35     int len;
36     char *rom_buffer;
37
38     rom_buffer = malloc(ROM_32K);
39     if (rom_buffer == NULL)
40         return FALSE;
41     len = fread(rom_buffer, 1, ROM_32K, cartridge);
42     if (len != ROM_32K)
43         return FALSE;
44
45     free(rom_buffer);
46     return TRUE;
47 }
48
49 /*
50  * for debug.c
51  * */
52 int debug_mode = TRUE;
53 int critical_error = FALSE;
54 void dump_6502(int full) {
55 }
56
57 static void test_ppu(void) {
58     int i;
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,
64
65             0x0f, 0x00, 0x10, 0x20,
66             0x0f, 0x06, 0x16, 0x26,
67             0x0f, 0x08, 0x18, 0x28,
68             0x0f, 0x0a, 0x1a, 0x2a,
69 /*
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
74 */
75     };
76
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]);
81
82     for (i = 0; i < 960; i++) 
83         name_tbl_set(0, i, 0);
84
85     for (i = 0; i < 64; i++) 
86         attr_tbl_set(0, i, 0);
87
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 
95     //205 = 11
96     attr_tbl_set(0, 11, 0x1b);
97
98     //other test.
99     name_tbl_set(0, 300, 1);
100     attr_tbl_set(0, 0, 0x65);
101
102     for (i = 0; i < 960; i++) 
103         set_bgtile(i);
104
105     //sprite test
106     struct sprite_attr sa;
107     sa.palette = 2;
108     sa.priority = 1;
109     sa.flip_h = 0;
110     sa.flip_v = 0;
111     set_sprite(30, 100, 'd', sa);
112     sa.flip_h = 1;
113     set_sprite(50, 100, 'd', sa);
114     sa.flip_v = 1;
115     set_sprite(70, 105, 'd', sa);
116
117     vga_xfer();
118
119 //void dump_vram(int type, int bank, unsigned short addr, int size);
120 /*
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);
125 */
126 }
127
128 int main(int argc, char** argv) {
129     int ret;
130
131     ret = ppucore_init();
132     if (ret == FALSE) {
133         fprintf(stderr, "ppucore init error.\n");
134         return -1;
135     }
136     ret = load_cartridge("sample1.nes");
137     if (ret == FALSE) {
138         fprintf(stderr, "load cartridge error.\n");
139         return -1;
140     }
141
142     /* get vga shared memory */
143     if((disp_data = (struct rgb15 *)vga_shm_get()) == NULL)
144     {
145         fprintf(stderr, "error attaching shared memory.\n");
146         return -1;
147     }
148
149     memset(disp_data, 0, VGA_SHM_SIZE);
150     set_vga_base((unsigned char*)disp_data);
151
152
153     /////test...
154     test_ppu();
155
156     clean_ppucore();
157     vga_shm_free(disp_data);
158     
159     return 0;
160 }
161
162