From: astoria-d Date: Fri, 22 Mar 2013 02:21:17 +0000 (+0900) Subject: ppu reg update X-Git-Tag: motonesemu-0.1.1~11 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f6c3b026a6bbf8bdfda419934fe61288fcdc77f9;p=motonesemu%2Fmotonesemu.git ppu reg update --- diff --git a/emulator/debug.c b/emulator/debug.c index b7dc4a0..4c79e06 100644 --- a/emulator/debug.c +++ b/emulator/debug.c @@ -14,6 +14,7 @@ void dump_mem(unsigned short addr, int size); unsigned char vram_data_get(unsigned short addr); unsigned char dbg_get_byte(unsigned short addr); unsigned short dbg_get_short(unsigned short addr); +void dump_ppu_reg(void); #define MAX_HISTORY 10 @@ -151,7 +152,7 @@ int emu_debug(void) { } } else if (!strcmp(buf, "pshow")){ - printf("not supported...\n"); + dump_ppu_reg(); } else { printf("unknown command [%s].\n", buf); diff --git a/emulator/ppucore/ppucore.c b/emulator/ppucore/ppucore.c index 6c41b47..03187a4 100644 --- a/emulator/ppucore/ppucore.c +++ b/emulator/ppucore/ppucore.c @@ -16,10 +16,10 @@ void set_monocolor (int mono); void set_nmi_pin(int val); void set_bg_pattern_bank(unsigned char bank); void set_spr_pattern_bank(unsigned char bank); -void set_name_tbl_base(unsigned char sw); +void set_bg_name_tbl_base(unsigned char sw); -static void dump_ppu_reg(void); +void dump_ppu_reg(void); /* * 6502 little endian @@ -186,7 +186,7 @@ void ppu_ctrl1_set(unsigned char data) { vram_addr_inc = (ctrl_reg1.addr_inc_size == 0 ? 1 : 32); //set main screen addr if (diff.name_tbl_sel) - set_name_tbl_base(ctrl_reg1.name_tbl_sel); + set_bg_name_tbl_base(ctrl_reg1.name_tbl_sel); //dprint("ctrl1: %x\n", data); //dump_ppu_reg(); @@ -309,7 +309,10 @@ void clean_ppucore(void) { clean_vscreen(); } -static void dump_ppu_reg(void) { +/* + * for debug.c + * */ +void dump_ppu_reg(void) { printf("control reg1\n"); printf(" nmi_vblank:%d\n", ctrl_reg1.nmi_vblank); printf(" sprite_size:%d\n", ctrl_reg1.sprite_size); diff --git a/emulator/ppucore/vscreen.c b/emulator/ppucore/vscreen.c index 68e3311..7a87646 100644 --- a/emulator/ppucore/vscreen.c +++ b/emulator/ppucore/vscreen.c @@ -24,7 +24,8 @@ static struct tile_rgb15 *vscreen; static unsigned char bg_pattern_bank; static unsigned char spr_pattern_bank; -static unsigned short name_tbl_base; +static unsigned short bg_name_tbl_base; +static unsigned char bg_attr_tbl_bank; void vscreenn_dot_get(int x, int y, struct rgb15 *col) { int tile_id, tile_id_x, tile_id_y; @@ -85,9 +86,9 @@ void set_bgtile(int tile_id) { struct tile_rgb15* set_data; int i,j; - load_attribute(0, tile_id, &plt); + load_attribute(bg_attr_tbl_bank, tile_id, &plt); - name_index = vram_data_get(name_tbl_base + tile_id); + name_index = vram_data_get(bg_name_tbl_base + tile_id); load_pattern(bg_pattern_bank, name_index, &ptn); set_data = vscreen + tile_id; @@ -156,28 +157,30 @@ void set_bg_pattern_bank(unsigned char bank) { void set_spr_pattern_bank(unsigned char bank) { spr_pattern_bank = bank; } -void set_name_tbl_base(unsigned char sw) { +void set_bg_name_tbl_base(unsigned char sw) { switch (sw) { case 0: - name_tbl_base = NAME0_START; + bg_name_tbl_base = NAME0_START; break; case 1: - name_tbl_base = NAME1_START; + bg_name_tbl_base = NAME1_START; break; case 2: - name_tbl_base = NAME2_START; + bg_name_tbl_base = NAME2_START; break; case 3: default: - name_tbl_base = NAME3_START; + bg_name_tbl_base = NAME3_START; break; } + bg_attr_tbl_bank = sw; } int vscreen_init(void) { bg_pattern_bank = 0; spr_pattern_bank = 0; - name_tbl_base = NAME0_START; + bg_name_tbl_base = NAME0_START; + bg_attr_tbl_bank = 0; vscreen = (struct tile_rgb15 *) malloc( sizeof (struct tile_rgb15) * VIRT_SCREEN_TILE_SIZE * VIRT_SCREEN_TILE_SIZE);