[Scummvm-cvs-logs] SF.net SVN: scummvm: [29944] scummvm/trunk/backends/platform/ds

agent-q at users.sourceforge.net agent-q at users.sourceforge.net
Fri Dec 21 19:36:40 CET 2007


Revision: 29944
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29944&view=rev
Author:   agent-q
Date:     2007-12-21 10:36:40 -0800 (Fri, 21 Dec 2007)

Log Message:
-----------
Scaler corruption fixes, scaler console fixes, adding Lure target (except it doesn't quite work yet), adding function keys to virtual keyboard

Modified Paths:
--------------
    scummvm/trunk/backends/platform/ds/arm7/Makefile
    scummvm/trunk/backends/platform/ds/arm9/data/keyboard.raw
    scummvm/trunk/backends/platform/ds/arm9/makefile
    scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp
    scummvm/trunk/backends/platform/ds/arm9/source/dsmain.h
    scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.cpp
    scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.h
    scummvm/trunk/backends/platform/ds/arm9/source/fat/disc_io.h
    scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.cpp
    scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.h
    scummvm/trunk/backends/platform/ds/arm9/source/portdefs.cpp
    scummvm/trunk/backends/platform/ds/arm9/source/scummconsole.c
    scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.cpp
    scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.h

Modified: scummvm/trunk/backends/platform/ds/arm7/Makefile
===================================================================
--- scummvm/trunk/backends/platform/ds/arm7/Makefile	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm7/Makefile	2007-12-21 18:36:40 UTC (rev 29944)
@@ -68,7 +68,7 @@
 # list of directories containing libraries, this must be the top level containing
 # include and lib
 #---------------------------------------------------------------------------------
-LIBDIRS	:=	/home/neil/devkitpro/libnds home/neil/devkitpro/libnds/nds
+LIBDIRS	:=	/home/neil/devkitpror21/libnds home/neil/devkitpror21/libnds/nds
  
  
 #---------------------------------------------------------------------------------

Modified: scummvm/trunk/backends/platform/ds/arm9/data/keyboard.raw
===================================================================
(Binary files differ)

Modified: scummvm/trunk/backends/platform/ds/arm9/makefile
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/makefile	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/makefile	2007-12-21 18:36:40 UTC (rev 29944)
@@ -1,17 +1,52 @@
 #BUILD_PLUGINS = 1
 #libndsdir = $(DEVKITPRO)/libnds
-libndsdir = /home/neil/devkitpro/libnds
+libndsdir = /home/neil/devkitpror21/libnds
 
 # Select the build you want by uncommenting one of the following lines:
 
 
-DS_BUILD_A = 1
+
+ifeq ($(SCUMM_BUILD),a)
+        DS_BUILD_A = 1
+endif
+
+ifeq ($(SCUMM_BUILD),b)
+        DS_BUILD_B = 1
+endif
+
+ifeq ($(SCUMM_BUILD),c)
+        DS_BUILD_C = 1
+endif
+
+ifeq ($(SCUMM_BUILD),d)
+        DS_BUILD_D = 1
+endif
+
+ifeq ($(SCUMM_BUILD),e)
+        DS_BUILD_E = 1
+endif
+
+ifeq ($(SCUMM_BUILD),f)
+        DS_BUILD_F = 1
+endif
+
+ifeq ($(SCUMM_BUILD),g)
+        DS_BUILD_G = 1
+endif
+
+#DS_BUILD_A = 1
 #DS_BUILD_B = 1
 #DS_BUILD_C = 1
-#DS_BUILD_D = 1
+#DS_BUILD_D = 1		# started!
 #DS_BUILD_E = 1
 #DS_BUILD_F = 1
+#DS_BUILD_G = 1
 
+# To do:
+# - FAT cache?
+
+
+
 # Uncomment the following line to build in support for MP3 audio
 # using libmad:
 
@@ -71,6 +106,7 @@
 	USE_ARM_GFX_ASM = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-A
 endif
 
@@ -81,10 +117,10 @@
 	DISABLE_SCUMM = 1
 	DISABLE_SCUMM_7_8 = 1
 	DISABLE_AGOS = 1
-	#DISABLE_SKY = 1
+	#DISABLE_SKY = 1#
 	DISABLE_SWORD1 = 1
 	DISABLE_SWORD2 = 1
-	#DISABLE_QUEEN = 1
+	#DISABLE_QUEEN = 1#
 	DISABLE_SAGA = 1
 	DISABLE_KYRA = 1
 	DISABLE_GOB = 1
@@ -95,6 +131,7 @@
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-B
 endif
 
@@ -119,6 +156,7 @@
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-C
 endif
 
@@ -143,6 +181,7 @@
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-D
 endif
 
@@ -168,6 +207,7 @@
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-E
 endif
 
@@ -193,10 +233,40 @@
 	DISABLE_PARALLACTION = 1
 	DISABLE_CRUISE = 1
 	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
 	BUILD=scummvm-F
 
 endif
 
+
+
+ifdef DS_BUILD_G
+	DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_G
+	LOGO = logog.bmp
+	DISABLE_HE = 1
+	DISABLE_SCUMM = 1
+	DISABLE_SCUMM_7_8 = 1
+	DISABLE_AGOS = 1
+	DISABLE_SKY = 1
+	DISABLE_SWORD1 = 1
+	DISABLE_SWORD2 = 1
+	DISABLE_QUEEN = 1
+	DISABLE_SAGA = 1
+	DISABLE_KYRA = 1
+	DISABLE_GOB = 1
+	#DISABLE_LURE = 1
+	DISABLE_CINE = 1
+	DISABLE_AGI = 1
+	DISABLE_TOUCHE = 1
+	DISABLE_PARALLACTION = 1
+	DISABLE_CRUISE = 1
+	DISABLE_DRASCULA = 1
+	DISABLE_IGOR = 1
+	BUILD=scummvm-G
+
+endif
+
+
 ARM7BIN	:= -7 $(CURDIR)/../../arm7/arm7.bin
 ICON 		:= -b ../../../logo.bmp "ScummVM;By Neil Millstone;"
 
@@ -219,8 +289,19 @@
 endif
 		
 CXXFLAGS=	$(CFLAGS) -Wno-non-virtual-dtor	 -Wno-non-virtual-dtor \
-		-fno-exceptions -fno-rtti
+		-fno-exceptions -fno-rtti -mthumb-interwork
 
+#		-mthumb
+
+#		-fno-gcse\
+#		-fno-schedule-insns2
+
+#		-fno-inline-functions-called-once\
+#		-fno-gcse-lm\
+#		-fno-rerun-cse-after-loop\
+#		-fno-cse-follow-jumps -fno-cse-skip-blocks\
+
+
 ASFLAGS = -mcpu=arm9tdmi -mthumb-interwork
 DEFINES += -D__DS__ -DNDS -DARM9 -DNONSTANDARD_PORT -DDISABLE_FANCY_THEMES -DDISABLE_DEFAULT_SAVEFILEMANAGER -DARM
 ifdef USE_MAD
@@ -228,7 +309,7 @@
 endif
 
 
-LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt
+LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -Wl,--wrap,time -mno-fpu -Wl,-Map,map.txt
 
 INCLUDES= -I./ -I$(portdir)/$(BUILD) -I$(srcdir) -I$(srcdir)/common -I$(portdir)/source -I$(portdir)/source/compressor -I$(portdir)/source/fat \
 			-I$(srcdir)/backends/fs  -I$(srcdir)/backends/fs/ds -I$(portdir)/data -I$(libndsdir)/include -I$(portdir)/../commoninclude\
@@ -302,9 +383,17 @@
 
 LIBCARTRESET_OBJS := $(portdir)/source/libcartreset/cartreset.o
 			
-# Files in this list will be compiled with -O2, otherwise they will be compiled with -Os
-OPTLIST := actor.cpp ds_main.cpp osystem_ds.cpp blitters.cpp fmopl.cpp rate.cpp mixer.cpp
+# Files in this list will be optimisied for speed, otherwise they will be optimised for space
+OPTLIST := actor.cpp ds_main.cpp osystem_ds.cpp blitters.cpp fmopl.cpp rate.cpp mixer.cpp isomap.cpp image.cpp gfx.cpp sprite.cpp actor_path.cpp actor_walk.cpp
 #OPTLIST := 
+
+# Compiler options for files which should be optimised for speed
+OPT_SPEED := -O3
+
+# Compiler options for files which should be optimised for space
+OPT_SIZE := -Os -mthumb -fno-gcse -fno-schedule-insns2
+
+
 			
 OBJS := $(DATA_OBJS) $(LIBCARTRESET_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) $(FAT_OBJS) 
 		
@@ -396,7 +485,7 @@
 
 	$(MKDIR) $(*D)/$(DEPDIR)
 	$(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
-	$(CXX) -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d"              $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o $(if $(findstring $(notdir $<), $(OPTLIST)), -O2, -Os)
+	$(CXX) -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" $(if $(findstring $(notdir $<), $(OPTLIST)), $(OPT_SPEED), $(OPT_SIZE)) $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o 
 endif
 
 

Modified: scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp	2007-12-21 18:36:40 UTC (rev 29944)
@@ -210,6 +210,7 @@
 
 // Scale
 bool twoHundredPercentFixedScale = false;
+bool cpuScalerEnable = false;
 #define NUM_SUPPORTED_GAMES 17
 
 #ifdef USE_PROFILER
@@ -282,9 +283,18 @@
 
 bool isCpuScalerEnabled()
 {
-	return (ConfMan.hasKey("cpu_scaler", "ds") && ConfMan.getBool("cpu_scaler", "ds"));
+	return cpuScalerEnable;
 }
 
+
+void setCpuScalerEnable(bool enable) {
+	cpuScalerEnable = enable;
+}
+
+
+//	return (ConfMan.hasKey("cpu_scaler", "ds") && ConfMan.getBool("cpu_scaler", "ds"));
+
+
 //plays an 8 bit mono sample at 11025Hz
 void playSound(const void* data, u32 length, bool loop, bool adpcm, int rate)
 {
@@ -352,7 +362,14 @@
 #ifdef DISABLE_SCUMM
     if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight];
     for (int r = 0; r < gameHeight; r++) {
-		memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth);
+
+		u16* dst = (u16 *) (savedBuffer + (r * gameWidth));
+		u16* src = BG_GFX_SUB + (r * 256);
+
+		for (int x = 0; x < gameWidth >> 1; x++)
+		{
+			*dst++ = *src++;
+		}
 	}
 #endif
 }
@@ -361,10 +378,19 @@
 #ifdef DISABLE_SCUMM
 	if (savedBuffer) {
 		for (int r = 0; r < gameHeight; r++) {
-			memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
-			memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth);
+
+			u16* dst = get8BitBackBuffer() + (r * 256);
+			u16* dst2 = BG_GFX_SUB + (r * 256);
+			u16* src = ((u16 *) (savedBuffer)) + (r * (gameWidth >> 1));
+
+			for (int x = 0; x < gameWidth >> 1; x++)
+			{
+				*dst++ = *src;
+				*dst2++ = *src++;
+			}
+			
 		}
-			
+
 		delete savedBuffer;
 		savedBuffer = NULL;
 	}
@@ -500,7 +526,7 @@
 	
 	if (isCpuScalerEnabled())
 	{
-		videoSetMode(MODE_5_2D | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE | DISPLAY_SPR_1D | DISPLAY_SPR_1D_BMP); 
+		videoSetMode(MODE_5_2D | (consoleEnable? DISPLAY_BG0_ACTIVE: 0) | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE | DISPLAY_SPR_1D | DISPLAY_SPR_1D_BMP); 
 		videoSetModeSub(MODE_3_2D /*| DISPLAY_BG0_ACTIVE*/ | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE | DISPLAY_SPR_1D | DISPLAY_SPR_1D_BMP); //sub bg 0 will be used to print text
 	
 		vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
@@ -548,22 +574,27 @@
 
 
 	// Do text stuff
-	BG0_CR = BG_MAP_BASE(0) | BG_TILE_BASE(1);
+	// console chars at 1C000 (7), map at 1D000 (74)
+
+	BG0_CR = BG_MAP_BASE(2) | BG_TILE_BASE(0);
 	BG0_Y0 = 0;
 	
 	// Restore palette entry used by text in the front-end	
 //	PALETTE_SUB[255] = savedPalEntry255;
+
+
 	
-	consoleInitDefault((u16*)SCREEN_BASE_BLOCK(0), (u16*)CHAR_BASE_BLOCK(1), 16);
+	consoleInitDefault((u16*)SCREEN_BASE_BLOCK(2), (u16*)CHAR_BASE_BLOCK(0), 16);
 	consolePrintSet(0, 23);
 	
 	if (!displayModeIs8Bit) {
 		for (int r = 0; r < 32 * 32; r++) {
-			((u16 *) SCREEN_BASE_BLOCK(0))[r] = buffer[r];
+			((u16 *) SCREEN_BASE_BLOCK(2))[r] = buffer[r];
 		}
 //		dmaCopyHalfWords(3, (u16 *) SCREEN_BASE_BLOCK(0), buffer, 32 * 32 * 2);
 	}
 	
+	initGame();
 	
 	if (!displayModeIs8Bit) restoreGameBackBuffer();
 	displayModeIs8Bit = true;
@@ -571,10 +602,10 @@
 	consolePrintf("done\n");
 	#endif
 
+
 	POWER_CR &= ~POWER_SWAP_LCDS;
 	
 	keyboardEnable = false;
-	initGame();
 	
 }
 
@@ -722,7 +753,7 @@
 	if (displayModeIs8Bit) {
 		saveGameBackBuffer();
 		for (int r = 0; r < 32 * 32; r++) {
-			buffer[r] = ((u16 *) SCREEN_BASE_BLOCK(0))[r];
+			buffer[r] = ((u16 *) SCREEN_BASE_BLOCK(2))[r];
 		}
 	}
 
@@ -846,7 +877,7 @@
 
 u16* get8BitBackBuffer() {
 	if (isCpuScalerEnabled())
-		return BG_GFX;
+		return BG_GFX + 0x60000;
 	else
 		return BG_GFX + 0x10000;		// 16bit qty!
 }
@@ -1047,10 +1078,10 @@
 	if (keyboardEnable) {
 
 
-		DS::drawKeyboard(1, 14, backupBank);
+		DS::drawKeyboard(1, 15, backupBank);
 		
 		
-		SUB_BG1_CR = BG_TILE_BASE(1) | BG_MAP_BASE(14);
+		SUB_BG1_CR = BG_TILE_BASE(1) | BG_MAP_BASE(15);
 
 		if (displayModeIs8Bit) {
 			SUB_DISPLAY_CR |= DISPLAY_BG1_ACTIVE;	// Turn on keyboard layer
@@ -2568,7 +2599,7 @@
 	consolePrintf("-------------------------------\n");
 	consolePrintf("ScummVM DS\n");
 	consolePrintf("Ported by Neil Millstone\n");
-	consolePrintf("Version 0.11.0SVN ");
+	consolePrintf("Version 0.11.0 beta1 ");
 #if defined(DS_BUILD_A)
 	consolePrintf("build A\n");
 	consolePrintf("Lucasarts SCUMM games (SCUMM)\n");
@@ -2579,7 +2610,7 @@
 	consolePrintf("-------------------------------\n");
 #elif defined(DS_BUILD_C)
 	consolePrintf("build C\n");
-	consolePrintf("Simon the Sorcerer 1/2 (SIMON)\n");
+	consolePrintf("Simon/Elvira (AGOS)\n");
 	consolePrintf("-------------------------------\n");
 #elif defined(DS_BUILD_D)
 	consolePrintf("build D\n");
@@ -2587,12 +2618,16 @@
 	consolePrintf("-------------------------------\n");
 #elif defined(DS_BUILD_E)
 	consolePrintf("build E\n");
-	consolePrintf("Inherit the earth (SAGA)\n");
+	consolePrintf("ITE/IHNM (SAGA)\n");
 	consolePrintf("-------------------------------\n");
 #elif defined(DS_BUILD_F)
 	consolePrintf("build F\n");
 	consolePrintf("The Legend of Kyrandia (KYRA)\n");
 	consolePrintf("-------------------------------\n");
+#elif defined(DS_BUILD_G)
+	consolePrintf("build F\n");
+	consolePrintf("Lure of the Temptress (LURE)\n");
+	consolePrintf("-------------------------------\n");
 #endif
 	consolePrintf("L/R + D-pad/pen:    Scroll view\n");
 	consolePrintf("D-pad left:   Left mouse button\n");
@@ -2730,6 +2765,8 @@
 	char* argv[3] = {"/scummvmds", "--config=scummvme.ini"};
 #elif defined(DS_BUILD_F)
 	char* argv[3] = {"/scummvmds", "--config=scummvmf.ini"};
+#elif defined(DS_BUILD_G)
+	char* argv[3] = {"/scummvmds", "--config=scummvmg.ini"};
 #endif
 
 #ifdef DS_NON_SCUMM_BUILD	

Modified: scummvm/trunk/backends/platform/ds/arm9/source/dsmain.h
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/dsmain.h	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/dsmain.h	2007-12-21 18:36:40 UTC (rev 29944)
@@ -129,6 +129,7 @@
 void 	setIndyFightState(bool st);
 bool 	getIndyFightState();
 bool    isCpuScalerEnabled();
+void	setCpuScalerEnable(bool enable);
 
 // Display
 bool 	getIsDisplayMode8Bit();

Modified: scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.cpp	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.cpp	2007-12-21 18:36:40 UTC (rev 29944)
@@ -58,9 +58,9 @@
 	_highQualityAudioCheckbox = new GUI::CheckboxWidget(this, 20, 85, 250, 20, "High quality audio (slower) (reboot)", 0, 'T');
 	_disablePowerOff = new GUI::CheckboxWidget(this, 20, 100, 250, 20, "Disable power off on quit", 0, 'T');
 	_showCursorCheckbox = new GUI::CheckboxWidget(this, 20, 115, 130, 20, "Show mouse cursor", 0, 'T');
-    #ifdef ALLOW_CPU_SCALER
+#ifdef ALLOW_CPU_SCALER
 	_cpuScaler = new GUI::CheckboxWidget(this, 160, 115, 90, 20, "CPU scaler", 0, 'T');
-    #endif
+#endif
 	_snapToBorderCheckbox = new GUI::CheckboxWidget(this, 20, 130, 250, 20, "Snap to border", 0, 'T');
 
 	new GUI::StaticTextWidget(this, 20, 145, 110, 15, "Touch X Offset", GUI::kTextAlignLeft);
@@ -156,26 +156,29 @@
 }
 
 DSOptionsDialog::~DSOptionsDialog() {
+	DS::setIndyFightState(_indyFightCheckbox->getState());
+	ConfMan.flushToDisk();
+}
+
+void DSOptionsDialog::updateConfigManager() {
 	ConfMan.setBool("lefthanded", _leftHandedCheckbox->getState(), "ds");
 	ConfMan.setBool("unscaled", _unscaledCheckbox->getState(), "ds");
 	ConfMan.setBool("twohundredpercent", _twoHundredPercentCheckbox->getState(), "ds");
 	ConfMan.setBool("22khzaudio", _highQualityAudioCheckbox->getState(), "ds");
 	ConfMan.setBool("disablepoweroff", _disablePowerOff->getState(), "ds");
-    #ifdef ALLOW_CPU_SCALER
+#ifdef ALLOW_CPU_SCALER
 	ConfMan.setBool("cpu_scaler", _cpuScaler->getState(), "ds");
-    #endif
+#endif
 	ConfMan.setInt("xoffset", _touchX->getValue(), "ds");
 	ConfMan.setInt("yoffset", _touchY->getValue(), "ds");
 	ConfMan.setBool("showcursor", _showCursorCheckbox->getState(), "ds");
 	ConfMan.setBool("snaptoborder", _snapToBorderCheckbox->getState(), "ds");
 	DS::setOptions();
-	DS::setIndyFightState(_indyFightCheckbox->getState());
-	ConfMan.flushToDisk();
 }
 
-
 void DSOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
 	if (cmd == GUI::kCloseCmd) {
+		updateConfigManager();
 		close();
 	}
 
@@ -236,9 +239,10 @@
 
 	DSOptionsDialog* d = new DSOptionsDialog();
 	d->runModal();
+	consolePrintf("deleting dialog\n");
 	delete d;
 	
-	
+	consolePrintf("going to 8 bit\n");
 	DS::displayMode8Bit();
 
 	togglePause();
@@ -292,7 +296,14 @@
 	} else {
 		DS::setTouchXOffset(0);
 	}
-	
+
+#ifdef ALLOW_CPU_SCALER
+	if (ConfMan.hasKey("cpu_scaler", "ds")) {
+		DS::setCpuScalerEnable(ConfMan.getBool("cpu_scaler", "ds"));
+	} else {
+		DS::setCpuScalerEnable(false);
+	}
+#endif	
 }
 
 }

Modified: scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.h
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.h	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/dsoptions.h	2007-12-21 18:36:40 UTC (rev 29944)
@@ -43,6 +43,7 @@
 protected:
 	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
 	void togglePause();
+	void updateConfigManager();
 
 	GUI::SliderWidget* _touchX;
 	GUI::SliderWidget* _touchY;

Modified: scummvm/trunk/backends/platform/ds/arm9/source/fat/disc_io.h
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/fat/disc_io.h	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/fat/disc_io.h	2007-12-21 18:36:40 UTC (rev 29944)
@@ -46,6 +46,10 @@
 #define REG_EXMEMCNT REG_EXEMEMCNT 
 #endif
 
+#ifndef REG_EXEMEMCNT
+#define REG_EXEMEMCNT REG_EXMEMCNT
+#endif
+
 //----------------------------------------------------------------------
 
 #if defined _CF_USE_DMA && defined _CF_ALLOW_UNALIGNED

Modified: scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.cpp	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.cpp	2007-12-21 18:36:40 UTC (rev 29944)
@@ -41,13 +41,15 @@
 OSystem_DS* OSystem_DS::_instance = NULL;
 
 OSystem_DS::OSystem_DS()
+	: eventNum(0), lastPenFrame(0), queuePos(0), _mixer(NULL), _timer(NULL), _frameBufferExists(false)
 {
-	eventNum = 0;
-	lastPenFrame = 0;
-	queuePos = 0;
+//	eventNum = 0;
+//	lastPenFrame = 0;
+//	queuePos = 0;
 	_instance = this;
-	_mixer = NULL;
-    _timer = NULL;
+//	_mixer = NULL;
+  //  _timer = NULL;
+	//_frameBufferExists = false;
 }
 
 OSystem_DS::~OSystem_DS() {
@@ -229,6 +231,18 @@
 
 void OSystem_DS::updateScreen()
 {
+
+	if (_frameBufferExists)
+	{
+		// Copy temp framebuffer back to screen
+		copyRectToScreen((byte *)_framebuffer.pixels, _framebuffer.pitch, 0, 0, _framebuffer.w, _framebuffer.h);
+	
+		// Free memory
+		_framebuffer.free();
+
+		_frameBufferExists = false;
+	}
+
 	DS::displayMode16BitFlipBuffer();
 	DS::doSoundCallback();
 //	DS::doTimerCallback();
@@ -495,51 +509,53 @@
 	}
 }
 
-Graphics::Surface *OSystem_DS::lockScreen() {
-/*	// For now, we create a full temporary screen surface, to which we copy the
+
+Graphics::Surface* OSystem_DS::createTempFrameBuffer() {
+	// For now, we create a full temporary screen surface, to which we copy the
 	// the screen content. Later unlockScreen will copy everything back.
 	// Not very nice nor efficient, but at least works, and is not worse
 	// than in the bad old times where we used grabRawScreen + copyRectToScreen.
-	
+//	consolePrintf("lockScreen()\n");
 	_framebuffer.create(DS::getGameWidth(), DS::getGameHeight(), 1);
 
 	// Ensure we copy using 16 bit quantities due to limitation of VRAM addressing
-<<<<<<< .working
 	
+	size_t imageStrideInBytes = DS::isCpuScalerEnabled()? DS::getGameWidth() : 512;
+	size_t imageStrideInWords = imageStrideInBytes / 2;
 
-=======
-	
-    size_t imageStrideInBytes = DS::isCpuScalerEnabled()? DS::getGameWidth() : 512;
-    size_t imageStrideInWords = imageStrideInBytes / 2;
-
->>>>>>> .merge-right.r28656
 	u16* image = (u16 *) DS::get8BitBackBuffer();
-	for (int y = 0; y <  DS::getGameHeight(); y++)
-	{
-<<<<<<< .working
-		DC_FlushRange(image + (y << 8), DS::getGameWidth());
-=======
+	for (int y = 0; y <  DS::getGameHeight(); y++) {
 		DC_FlushRange(image + (y * imageStrideInWords), DS::getGameWidth());
->>>>>>> .merge-right.r28656
-		for (int x = 0; x < DS::getGameWidth() >> 1; x++)
-		{
-<<<<<<< .working
-			*(((u16 *) (_framebuffer.pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y << 8 + x];
-=======
-			*(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y * imageStrideInWords + x];
->>>>>>> .merge-right.r28656
+		for (int x = 0; x < DS::getGameWidth() >> 1; x++) {
+			*(((u16 *) (_framebuffer.pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[(y << 8) + x];
+//			*(((u16 *) (surf->pixels)) + y * (DS::getGameWidth() >> 1) + x) = image[y * imageStrideInWords + x];
 		}
 	}
+//	consolePrintf("lockScreen() done\n");
+	_frameBufferExists = true;
 
-	return &_framebuffer;*/
+	return &_framebuffer;
 }
 
+
+Graphics::Surface *OSystem_DS::lockScreen() {
+	if (!_frameBufferExists) {
+		createTempFrameBuffer();
+	}
+
+	return &_framebuffer;
+}
+
 void OSystem_DS::unlockScreen() {
-/*	// Copy temp framebuffer back to screen
-	copyRectToScreen((byte *)_framebuffer.pixels, _framebuffer.pitch, 0, 0, _framebuffer.w, _framebuffer.h);
 
+//	consolePrintf("unlockScreen()\n");
+
+	// Copy temp framebuffer back to screen
+//	copyRectToScreen((byte *)_framebuffer.pixels, _framebuffer.pitch, 0, 0, _framebuffer.w, _framebuffer.h);
+
 	// Free memory
-	_framebuffer.free(); */
+//	_framebuffer.free();
+//	consolePrintf("unlockScreen() done\n");
 }
 
 void OSystem_DS::setFocusRectangle(const Common::Rect& rect) {

Modified: scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.h
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.h	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/osystem_ds.h	2007-12-21 18:36:40 UTC (rev 29944)
@@ -41,9 +41,8 @@
 
 
 class OSystem_DS : public OSystem {
-public:
+protected:
 
-	static OSystem_DS *instance() { return _instance; }
 	int eventNum;
 	int lastPenFrame;
 	
@@ -55,18 +54,22 @@
 	DSAudioMixer* _mixer;
 	DSTimerManager* _timer;
 	Graphics::Surface _framebuffer;
+	bool _frameBufferExists;
 
 
 	static OSystem_DS* _instance;
 	
+	Graphics::Surface* createTempFrameBuffer();
+
+public:
 	typedef void (*SoundProc)(void *param, byte *buf, int len);
 	typedef int  (*TimerProc)(int interval);
 
-public:
-
 	OSystem_DS();
 	virtual ~OSystem_DS();
 
+	static OSystem_DS *instance() { return _instance; }
+
 	virtual bool hasFeature(Feature f);
 	virtual void setFeatureState(Feature f, bool enable);
 	virtual bool getFeatureState(Feature f);

Modified: scummvm/trunk/backends/platform/ds/arm9/source/portdefs.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/portdefs.cpp	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/portdefs.cpp	2007-12-21 18:36:40 UTC (rev 29944)
@@ -24,7 +24,20 @@
 #include "nds/dma.h"
 #include "osystem_ds.h"
 
+/*
+extern "C" time_t __wrap_time(time_t* t) {
+	if (t) {
+		*t = OSystem_DS::instance()->getMillis() / 1000;
+	}
+
+	return OSystem_DS::instance()->getMillis() / 1000;
+}
+*/
+
+
+
 time_t DS_time(time_t) {
+	consolePrintf("Time!");
 	if (OSystem_DS::instance()) {
 		return 0xABCD1234 + (OSystem_DS::instance()->getMillis() / 1000);
 	} else {
@@ -33,6 +46,7 @@
 }
 
 time_t DS_time(long* t) {
+	consolePrintf("Time!");
 	if (OSystem_DS::instance()) {
 		if (t) *t = 0xABCD1234 + (OSystem_DS::instance()->getMillis() / 1000);
 		return 0xABCD1234 + (OSystem_DS::instance()->getMillis() / 1000);

Modified: scummvm/trunk/backends/platform/ds/arm9/source/scummconsole.c
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/scummconsole.c	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/scummconsole.c	2007-12-21 18:36:40 UTC (rev 29944)
@@ -140,7 +140,7 @@
 
 void consoleInitDefault(u16* map, u16* charBase, u8 bitDepth)
 {
-	consoleInit((u16 *) default_font_bin, charBase, 256, 0, map, CONSOLE_USE_COLOR255, bitDepth); 	
+	consoleInit((u16 *) default_font_bin, charBase, 128, 0, map, CONSOLE_USE_COLOR255, bitDepth); 	
 }
 
 void consolePrintSet(int x, int y)

Modified: scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.cpp	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.cpp	2007-12-21 18:36:40 UTC (rev 29944)
@@ -31,12 +31,12 @@
 
 struct key_data {
 	char keyNum;
-	char x, y;
+	signed char x, y;
 	int character;
 	bool pressed;
 };
 
-#define DS_NUM_KEYS 60
+#define DS_NUM_KEYS 72
 #define DS_SHIFT 2
 #define DS_BACKSPACE 8
 #define DS_RETURN 13
@@ -119,6 +119,20 @@
 	
 	// Close button
 	{56,				30,		0,		Common::KEYCODE_INVALID},
+
+	// Function keys (needed for AGI)
+	{57,				4,		-2,		Common::KEYCODE_F1},
+	{58,				6,		-2,		Common::KEYCODE_F2},
+	{59,				8,		-2,		Common::KEYCODE_F3},
+	{60,				10,		-2,		Common::KEYCODE_F4},
+	{61,				14,		-2,		Common::KEYCODE_F5},
+	{62,				16,		-2,		Common::KEYCODE_F6},
+	{63,				18,		-2,		Common::KEYCODE_F7},
+	{64,				20,		-2,		Common::KEYCODE_F8},
+	{65,				24,		-2,		Common::KEYCODE_F9},
+	{66,				26,		-2,		Common::KEYCODE_F10},
+	{67,				28,		-2,		Common::KEYCODE_F11},
+	{68,				30,		-2,		Common::KEYCODE_F12},
 	
 };
 
@@ -155,14 +169,14 @@
 }
 
 void drawKeyboard(int tileBase, int mapBase, u16* saveSpace) {
+	int keyboardDataSize = 4736 * 2;
 
-
 	for (int r = 0; r < 32 * 32; r++) {
 //		*saveSpace++ = ((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r];
-		((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r] = 127;
+		((u16 *) SCREEN_BASE_BLOCK_SUB(mapBase))[r] = 0;
 	}
 	
-	for (int r = 0; r < 4096; r++) {
+	for (int r = 0; r < KEYBOARD_DATA_SIZE / 2; r++) {
 //		*saveSpace++ = ((u16 *) CHAR_BASE_BLOCK_SUB(tileBase))[r];
 		((u16 *) CHAR_BASE_BLOCK_SUB(tileBase))[r] = ((u16 *) (keyboard_raw))[r];
 	}
@@ -174,7 +188,7 @@
 	// this is the font
 	for (int tile = 0; tile < 94; tile++) {
 		
-		u16* tileAddr = (u16 *) (CHAR_BASE_BLOCK_SUB(tileBase) + (8192 + (tile * 32)));
+		u16* tileAddr = (u16 *) (CHAR_BASE_BLOCK_SUB(tileBase) + ((KEYBOARD_DATA_SIZE) + (tile * 32)));
 		u8* src = ((u8 *) (_8x8font_tga_raw)) + 18 + tile * 8;
 
 		for (int y = 0 ; y < 8; y++) {
@@ -208,7 +222,7 @@
 	}
 	
 	keyboardX = -2;
-	keyboardY = 1;
+	keyboardY = 2;
 	
 	DS::mapBase = mapBase;
 	DS::tileBase = tileBase;
@@ -223,11 +237,11 @@
 	baseAddress = base;
 	
 	for (int r = 0; r < DS_NUM_KEYS; r++) {
-		base[(y + keys[r].y) * 32 + x + keys[r].x] = keys[r].keyNum * 2;
-		base[(y + keys[r].y) * 32 + x + keys[r].x + 1] = keys[r].keyNum * 2 + 1;
+		base[(y + keys[r].y) * 32 + x + keys[r].x] = 10 + keys[r].keyNum * 2;
+		base[(y + keys[r].y) * 32 + x + keys[r].x + 1] = 10 + keys[r].keyNum * 2 + 1;
 		
-		base[(y + keys[r].y + 1) * 32 + x + keys[r].x] = 128 + keys[r].keyNum * 2;
-		base[(y + keys[r].y + 1) * 32 + x + keys[r].x + 1] = 128 + keys[r].keyNum * 2 + 1;
+		base[(y + keys[r].y + 1) * 32 + x + keys[r].x] = 10 + 148 + keys[r].keyNum * 2;
+		base[(y + keys[r].y + 1) * 32 + x + keys[r].x + 1] = 10 + 148 + keys[r].keyNum * 2 + 1;
 		
 		keys[r].pressed = false;
 	}
@@ -240,7 +254,7 @@
 
 	for (int y = 12; y < 24; y++) {
 		for (int x = 0; x < 32; x++) {
-			baseAddress[y * 32 + x] = 127;
+			baseAddress[y * 32 + x] = 0;
 		}
 	}
 			
@@ -252,7 +266,7 @@
 		for (int p = 0; p < strlen(autoCompleteWord[r]); p++) {
 			char c = autoCompleteWord[r][p];
 			
-			int tile = c - 32 + 255;
+			int tile = c - 33 + (KEYBOARD_DATA_SIZE / 32);
 
 			if (selectedCompletion == r) {
 				tile |= 0x1000;
@@ -354,7 +368,35 @@
 	}
 }
 
+void createKeyEvent(int keyNum, Common::Event& event)
+{
+	event.kbd.flags = 0;
 
+	if ((keys[keyNum].character >= '0') && (keys[keyNum].character <= '9')) {
+
+		if (!DS::shiftState) {
+			event.kbd.ascii = keys[keyNum].character;
+			event.kbd.keycode = (Common::KeyCode) keys[keyNum].character; //Common::KEYCODE_INVALID;
+		} else {
+			event.kbd.keycode = (Common::KeyCode) (Common::KEYCODE_F1 - (keys[keyNum].character - '1'));
+			event.kbd.ascii = 0;
+		}					
+	
+	} else if ((keys[keyNum].character >= 'A') && (keys[keyNum].character <= 'Z')) {
+		
+		if ((!DS::shiftState) && (!DS::capsLockState)) {
+			event.kbd.ascii = keys[keyNum].character + 32; // Make key lowercase.
+		} else {
+			event.kbd.ascii = keys[keyNum].character;
+		}
+		
+		event.kbd.keycode = (Common::KeyCode) event.kbd.ascii;
+	} else {
+		event.kbd.ascii = keys[keyNum].character;
+		event.kbd.keycode = (Common::KeyCode) keys[keyNum].character;
+	}				
+}
+
 void addKeyboardEvents() {
 	updateTypeEvents();
 
@@ -398,40 +440,17 @@
 				if ((keys[r].character == Common::KEYCODE_INVALID)) {
 					// Close button
 					DS::closed = true;
-				} else	if ((keys[r].character >= '0') && (keys[r].character <= '9')) {
-
-					if (!DS::shiftState) {
-						event.kbd.ascii = keys[r].character;
-						event.kbd.keycode = Common::KEYCODE_INVALID;
-					} else {
-						event.kbd.keycode = (Common::KeyCode) (Common::KEYCODE_F1 - (keys[r].character - '1'));
-						event.kbd.ascii = 0;
-					}					
-				
-				} else if ((keys[r].character >= 'A') && (keys[r].character <= 'Z')) {
-					
-					if ((!DS::shiftState) && (!DS::capsLockState)) {
-						event.kbd.ascii = keys[r].character + 32; // Make key lowercase.
-					} else {
-						event.kbd.ascii = keys[r].character;
-					}
-					
-					event.kbd.keycode = (Common::KeyCode) event.kbd.ascii;
 				} else {
-					event.kbd.ascii = keys[r].character;
-					event.kbd.keycode = (Common::KeyCode) keys[r].character;
+					createKeyEvent(r, event);
 				}				
-			
 				
-				
 				//event.kbd.keycode = keys[r].character;		
 				//event.kbd.ascii = keys[r].character;		
 				event.type = Common::EVENT_KEYDOWN;
-				event.kbd.flags = 0;
 				system->addEvent(event);
 
-				event.type = Common::EVENT_KEYUP;
-				system->addEvent(event);
+//				event.type = Common::EVENT_KEYUP;
+//				system->addEvent(event);
 				
 				switch (keys[r].character) {
 					case DS_SHIFT: {
@@ -467,9 +486,18 @@
 	}
 	
 	if (DS::getPenReleased()) {
+		
 		for (int r = 0; r < DS_NUM_KEYS; r++) {
 			if (keys[r].pressed) {
 				DS::setKeyHighlight(r, false);
+
+			   	OSystem_DS* system = OSystem_DS::instance();
+				
+				Common::Event event;
+				createKeyEvent(r, event);
+				event.type = Common::EVENT_KEYUP;
+				system->addEvent(event);
+
 				keys[r].pressed = false;
 			}
 		}	

Modified: scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.h
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.h	2007-12-21 18:34:08 UTC (rev 29943)
+++ scummvm/trunk/backends/platform/ds/arm9/source/touchkeyboard.h	2007-12-21 18:36:40 UTC (rev 29944)
@@ -23,12 +23,15 @@
 #ifndef _TOUCHKEYBOARD_H_
 #define _TOUCHKEYBOARD_H_
 
+#include "osystem_ds.h"
+
 namespace DS {
 
 static const int NUM_WORDS = 12;
+static const int KEYBOARD_DATA_SIZE = 4736 * 2;
 
+void createKeyEvent(int keyNum, Common::Event& event);
 
-
 void drawKeyboard(int tileBase, int mapBase, u16* saveSpace);
 void restoreVRAM(int tileBase, int mapBase, u16* saveSpace);
 void addKeyboardEvents();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list