OSDN Git Service

ppu reg update
authorastoria-d <astoria-d@mail.goo.ne.jp>
Fri, 22 Mar 2013 02:21:17 +0000 (11:21 +0900)
committerastoria-d <astoria-d@mail.goo.ne.jp>
Fri, 22 Mar 2013 02:21:17 +0000 (11:21 +0900)
emulator/debug.c
emulator/ppucore/ppucore.c
emulator/ppucore/vscreen.c

index b7dc4a0..4c79e06 100644 (file)
@@ -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);
index 6c41b47..03187a4 100644 (file)
@@ -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);
index 68e3311..7a87646 100644 (file)
@@ -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);