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
+
+
+
+
+
+