[Scummvm-cvs-logs] SF.net SVN: scummvm: [24788] scummvm/trunk/backends/platform/ds/arm9/source /dsmain.cpp

Tramboi at users.sourceforge.net Tramboi at users.sourceforge.net
Sat Nov 25 21:35:34 CET 2006


Revision: 24788
          http://svn.sourceforge.net/scummvm/?rev=24788&view=rev
Author:   Tramboi
Date:     2006-11-25 12:35:34 -0800 (Sat, 25 Nov 2006)

Log Message:
-----------
DS : High quality scaling.
Doesn't work on the second screen yet.
(switch cpuScaler in dsmain.cpp to test)

Modified Paths:
--------------
    scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp

Modified: scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp
===================================================================
--- scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp	2006-11-25 09:28:00 UTC (rev 24787)
+++ scummvm/trunk/backends/platform/ds/arm9/source/dsmain.cpp	2006-11-25 20:35:34 UTC (rev 24788)
@@ -138,6 +138,7 @@
 bool gameScreenSwap = false;
 bool cpuScaler = false;
 bool isCpuScalerEnabled();
+//#define HEAVY_LOGGING
 
 MouseMode mouseMode;
 
@@ -348,6 +349,8 @@
 	int bytes = (2 * (bufferSamples)) + 100;
 	
 	soundBuffer = (s16 *) malloc(bytes * 2);
+	if (!soundBuffer)
+		consolePrintf("Sound buffer alloc failed\n");
 
 
 	soundHiPart = true;
@@ -375,7 +378,9 @@
 void initGame() {
 	// This is a good time to check for left handed mode since the mode change is done as the game starts.
 	// There's probably a better way, but hey.
-//	consolePrintf("initing game\n");
+	#ifdef HEAVY_LOGGING
+	consolePrintf("initing game...");
+	#endif
 
 	static bool firstTime = true;
 
@@ -405,6 +410,9 @@
 		}
 
 	}
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
 
 }
 
@@ -430,6 +438,9 @@
 
 void displayMode8Bit() {
 
+#ifdef HEAVY_LOGGING
+	consolePrintf("displayMode8Bit...");
+#endif
 	u16 buffer[32 * 32];
 	
 	setKeyboardEnable(false);
@@ -440,32 +451,52 @@
 		}
 	}
 	
+	if (isCpuScalerEnabled())
+	{
+		videoSetMode(MODE_5_2D | 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
 	
-
-	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_0x6000000);
-	vramSetBankB(VRAM_B_MAIN_BG_0x6020000);
-
-	vramSetBankC(VRAM_C_SUB_BG_0x6200000);
-	vramSetBankD(VRAM_D_MAIN_BG_0x6040000);
+		vramSetBankA(VRAM_A_MAIN_BG_0x6000000);
+		vramSetBankB(VRAM_B_MAIN_BG_0x6020000);
 	
-	vramSetBankH(VRAM_H_LCD);
+		vramSetBankC(VRAM_C_SUB_BG_0x6200000);
+		vramSetBankD(VRAM_D_MAIN_BG_0x6040000);
+		
+		vramSetBankH(VRAM_H_LCD);
+	
+		BG3_CR = BG_BMP16_256x256 | BG_BMP_BASE(8);
 
-	BG3_CR = BG_BMP8_512x256 | BG_BMP_BASE(8);
+		BG3_XDX = 256;
+	    BG3_XDY = 0;
+	    BG3_YDX = 0;
+	    BG3_YDY = (int) ((200.0f / 192.0f) * 256);
+	    
+   		SUB_BG3_CR = BG_BMP16_256x256;
+	}
+	else
+	{
+		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_0x6000000);
+		vramSetBankB(VRAM_B_MAIN_BG_0x6020000);
 	
+		vramSetBankC(VRAM_C_SUB_BG_0x6200000);
+		vramSetBankD(VRAM_D_MAIN_BG_0x6040000);
+		
+		vramSetBankH(VRAM_H_LCD);
 	
-	BG3_XDX = (int) (((float) (gameWidth) / 256.0f) * 256);
-    BG3_XDY = 0;
-    BG3_YDX = 0;
-    BG3_YDY = (int) ((200.0f / 192.0f) * 256);
+		BG3_CR = BG_BMP8_512x256 | BG_BMP_BASE(8);
+		
+		BG3_XDX = (int) (((float) (gameWidth) / 256.0f) * 256);
+	    BG3_XDY = 0;
+	    BG3_YDX = 0;
+	    BG3_YDY = (int) ((200.0f / 192.0f) * 256);
 
-	SUB_BG3_CR = BG_BMP8_512x256;
+		SUB_BG3_CR = BG_BMP8_512x256;
+	}	
 	
-	
-	
+
 	SUB_BG3_XDX = (int) (subScreenWidth / 256.0f * 256);
     SUB_BG3_XDY = 0;
     SUB_BG3_YDX = 0;
@@ -492,7 +523,10 @@
 	
 	if (!displayModeIs8Bit) restoreGameBackBuffer();
 	displayModeIs8Bit = true;
-	
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
+
 	POWER_CR &= ~POWER_SWAP_LCDS;
 	
 	keyboardEnable = false;
@@ -581,6 +615,9 @@
 
 
 void displayMode16Bit() {
+	#ifdef HEAVY_LOGGING
+	consolePrintf("displayMode16Bit...");
+	#endif
 
 	u16 buffer[32 * 32 * 2];
 
@@ -637,13 +674,18 @@
 	
 	POWER_CR &= ~POWER_SWAP_LCDS;
 
+	displayModeIs8Bit = false;
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
 
-
-	displayModeIs8Bit = false;
 }
 
 
 void displayMode16BitFlipBuffer() {
+	#ifdef HEAVY_LOGGING
+	consolePrintf("Flip %s...", displayModeIs8Bit ? "8bpp" : "16bpp");
+	#endif
 	if (!displayModeIs8Bit) {
 		u16* back = get16BitBackBuffer();
 	
@@ -664,6 +706,19 @@
 			}
 		}
 	}
+	else if (isCpuScalerEnabled())
+	{
+		const u8* back = (const u8*)get8BitBackBuffer();
+		u16* base = BG_GFX + 0x10000;
+		DS::Rescale_320x256xPAL8_To_256x256x1555( base,
+											      back,
+											      BG_PALETTE,
+											      256,
+											      512);
+	}
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
 }
 
 void setShakePos(int shakePos) {
@@ -676,7 +731,10 @@
 }
 
 u16* get8BitBackBuffer() {
-	return BG_GFX + 0x10000;		// 16bit qty!
+	if (cpuScaler)
+		return BG_GFX;
+	else
+		return BG_GFX + 0x10000;		// 16bit qty!
 }
 
 void setSoundProc(OSystem_DS::SoundProc proc, void* param) {
@@ -690,7 +748,11 @@
 // a horrible bodge.  Any advice on how to change the engine to output mono would be greatly
 // appreciated.
 void doSoundCallback() {
-	if ((soundCallback)) {
+	#ifdef HEAVY_LOGGING
+	consolePrintf("doSoundCallback...");
+	#endif
+
+	if (soundCallback) {
 		lastCallbackFrame = frameCount;
 		
 		for (int r = IPC->playingSection; r < IPC->playingSection + 4; r++) {
@@ -707,6 +769,9 @@
 		}
 		
 	}
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
 }
 
 void doTimerCallback() {
@@ -904,6 +969,9 @@
 }
 
 void addEventsToQueue() {
+	#ifdef HEAVY_LOGGING
+	consolePrintf("addEventsToQueue\n");
+	#endif
 	OSystem_DS* system = OSystem_DS::instance();
 	OSystem::Event event;
 
@@ -1262,7 +1330,7 @@
 		SUB_BG3_YDX = 0;
 		SUB_BG3_YDY = y;
 	} else {
-		if (cpuScaler && (!displayModeIs8Bit) && (x==320))
+		if (cpuScaler && (x==320))
 		{
 			BG3_XDX = 256;
 			BG3_XDY = 0;
@@ -1318,7 +1386,7 @@
 	//	consolePrintf("Guard band overwritten!");
 //  }
 
-//	consolePri ntf("X:%d Y:%d\n", getPenX(), getPenY());
+	//consolePrintf("X:%d Y:%d\n", getPenX(), getPenY());
 
 	static bool firstTime = true;
 
@@ -1679,10 +1747,16 @@
 	
 	
 	// Set up a millisecond timer
+	#ifdef HEAVY_LOGGING
+	consolePrintf("Setting up timer...");
+	#endif
 	TIMER0_CR = 0;
 	TIMER0_DATA = (u32) TIMER_FREQ(1000);
 	TIMER0_CR = TIMER_ENABLE | TIMER_DIV_1 | TIMER_IRQ_REQ;	
 	REG_IME = 1;
+	#ifdef HEAVY_LOGGING
+	consolePrintf("done\n");
+	#endif
 
 	PALETTE[255] = RGB15(0,0,31);
 


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