diff --git a/desmume/src/GPU.h b/desmume/src/GPU.h index 28d263fb6..6406356d1 100644 --- a/desmume/src/GPU.h +++ b/desmume/src/GPU.h @@ -421,11 +421,13 @@ static INLINE void GPU_ligne(Screen * screen, u16 l) { GPU * gpu = screen->gpu; u8 * dst = GPU_screen + (screen->offset + l) * 512; + u8 * mdst = GPU_screen + (MainScreen.offset + l) * 512; itemsForPriority_t * item; u8 spr[512]; u8 sprPrio[256]; u8 bgprio,prio; int i; + int vram_bank; u8 i8; u16 i16; u32 c; @@ -466,7 +468,33 @@ static INLINE void GPU_ligne(Screen * screen, u16 l) } return; } - + +/* +//addition from Normatt + if (gpu->core==0) + for(vram_bank=0; vram_bank<8; vram_bank++) { + switch (MMU.vram_mode[vram_bank]) + { + case 0: + case 1: + case 2: + case 3: + { + int ii = l * 256 * 2; + for (i=0; i<(256 * 2); i+=2) + { + u8 * vram = ARM9Mem.ARM9_ABG + MMU.vram_mode[vram_bank] * 0x20000; + T2WriteWord(mdst, i, T1ReadWord(vram, ii)); + ii+=2; + } + return; + } + default: + break; + } + } +*/ + c = T1ReadWord(ARM9Mem.ARM9_VMEM, gpu->core * 0x400); c |= (c<<16); diff --git a/desmume/src/MMU.c b/desmume/src/MMU.c index 288529da5..0d4075443 100644 --- a/desmume/src/MMU.c +++ b/desmume/src/MMU.c @@ -622,6 +622,33 @@ void FASTCALL MMU_write8(u32 proc, u32 adr, u8 val) { /* TODO: EEEK ! Controls for VRAMs A, B, C, D are missing ! */ /* TODO: Not all mappings of VRAMs are handled... (especially BG and OBJ modes) */ + case REG_VRAMCNTA: + case REG_VRAMCNTB: + case REG_VRAMCNTC: + case REG_VRAMCNTD: + if(proc == ARMCPU_ARM9) + { + switch(val & 0x1F) + { + case 1 : + MMU.vram_mode[adr-REG_VRAMCNTA] = 0; // BG-VRAM + //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*0); // BG-VRAM + break; + case 1 | (1 << 3) : + MMU.vram_mode[adr-REG_VRAMCNTA] = 1; // BG-VRAM + //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*1); // BG-VRAM + break; + case 1 | (2 << 3) : + MMU.vram_mode[adr-REG_VRAMCNTA] = 2; // BG-VRAM + //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*2); // BG-VRAM + break; + case 1 | (3 << 3) : + MMU.vram_mode[adr-REG_VRAMCNTA] = 3; // BG-VRAM + //MMU.vram_offset[0] = ARM9Mem.ARM9_ABG+(0x20000*3); // BG-VRAM + break; + } + } + break; case REG_VRAMCNTE : if(proc == ARMCPU_ARM9) { diff --git a/desmume/src/MMU.h b/desmume/src/MMU.h index ab975a4d9..c278af727 100644 --- a/desmume/src/MMU.h +++ b/desmume/src/MMU.h @@ -51,6 +51,8 @@ typedef struct { u8 ARM7_REG[0x10000]; u8 ARM7_WIRAM[0x10000]; + u8 vram_mode[9]; + //Shared ram u8 SWIRAM[0x8000]; diff --git a/desmume/src/gtk-glade/dTools/callbacks_dtools.h b/desmume/src/gtk-glade/dTools/callbacks_dtools.h index 8c2ef336b..6961e650b 100755 --- a/desmume/src/gtk-glade/dTools/callbacks_dtools.h +++ b/desmume/src/gtk-glade/dTools/callbacks_dtools.h @@ -43,3 +43,15 @@ void on_wtools_1_r_dispb_win0v_toggled(GtkToggleButton *togglebutton, gpointer u void on_wtools_1_r_dispb_win1v_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_wtools_1_r_dispb_winin_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_wtools_1_r_dispb_winout_toggled(GtkToggleButton *togglebutton, gpointer user_data); + +/* ***** ***** MEMORY VIEWER ***** ***** */ + +void on_wtools_2_MemView_show (GtkWidget *widget, gpointer user_data); +void on_wtools_2_r8_toggled (GtkToggleButton *togglebutton, gpointer user_data); +void on_wtools_2_r16_toggled (GtkToggleButton *togglebutton, gpointer user_data); +void on_wtools_2_r32_toggled (GtkToggleButton *togglebutton, gpointer user_data); +void on_wtools_2_GotoAddress_activate (GtkEntry *entry, gpointer user_data); +void on_wtools_2_GotoAddress_changed (GtkEntry *entry, gpointer user_data); +void on_wtools_2_GotoButton_clicked (GtkButton *button, gpointer user_data); +void on_wtools_2_scroll_scroll_child (GtkScrolledWindow *scrolledwindow, GtkScrollType scroll, gboolean horizontal, gpointer user_data); +gboolean on_wtools_2_draw_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); diff --git a/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade b/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade index 2acd17935..5d538e5bc 100755 --- a/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade +++ b/desmume/src/gtk-glade/glade/DeSmuMe_Dtools.glade @@ -370,6 +370,7 @@ False + True @@ -583,4 +584,243 @@ cpu : ARM9 + + memory viewer + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + DeSmuME.xpm + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + 2 + 6 + False + 0 + 0 + + + + True + True + 8 bit + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + 16 bit + True + GTK_RELIEF_NORMAL + True + False + False + True + wtools_2_r8 + + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + True + 32 bit + True + GTK_RELIEF_NORMAL + True + False + False + True + wtools_2_r8 + + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + GoTo: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 3 + 4 + 0 + 1 + fill + + + + + + + True + True + True + True + 10 + 0x0000000 + True + + False + + + + + 4 + 5 + 0 + 1 + + + + + + + True + True + Go! + True + GTK_RELIEF_NORMAL + True + + + + 5 + 6 + 0 + 1 + fill + + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + + True + + + + + + 0 + 6 + 1 + 2 + fill + + + + + 0 + True + True + + + + + +