diff options
Diffstat (limited to 'backends/platform/ds/arm9/source/dsmain.cpp')
| -rw-r--r-- | backends/platform/ds/arm9/source/dsmain.cpp | 176 | 
1 files changed, 120 insertions, 56 deletions
| diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 6ba19cc053..f959074d49 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -61,6 +61,14 @@  // - Make save/restore game screen use scaler buffer +// 1.0.0! +// - Fix text on tabs on config screen +// - Remove ini file debug msg +// - Memory size for ite +// - Try discworld? + + +  //#define USE_LIBCARTRESET @@ -103,22 +111,63 @@ extern "C" u32 getExceptionAddress( u32 opcodeAddress, u32 thumbState);  extern const char __itcm_start[];  static const char *registerNames[] =  	{	"r0","r1","r2","r3","r4","r5","r6","r7", -		"r8 ","r9 ","r10","r11","r12","sp ","lr ","pc " }; +		"r8 ","r9 ","r10","r11","r12","sp ","lr ","pc" }; + +#ifdef WRAP_MALLOC -/*  extern "C" void* __real_malloc(size_t size); +void* operator new (size_t size) +{ +	register unsigned int reg asm("lr"); +	volatile unsigned int poo = reg; + +	void* res = __real_malloc(size); + +	if (!res) +	{ +//		*((u8 *) NULL) = 0; +		consolePrintf("Failed alloc (new) %d (%x)\n", size, poo); +		return NULL; +	} + +	return res; +} + +  extern "C" void* __wrap_malloc(size_t size) { +/*	u32 addr; + +	asm("mov %0, lr" +		: "=r" (addr) +		: +		: );*/ + +	register unsigned int reg asm("lr"); +	volatile unsigned int poo = reg; + + +	if (size == 0) +	{ +		static int zeroSize = 0; +		consolePrintf("0 size malloc (%d)", zeroSize++); +	} +  	void* res = __real_malloc(size);  	if (res) { +		if (size > 100 * 1024) { +			consolePrintf("Allocated %d (%d)\n", size, poo); +		}  		return res;  	} else { -		consolePrintf("Failed alloc %d\n", size); + +//		*((u8 *) NULL) = 0; +		consolePrintf("Failed alloc %d (%x)\n", size, poo);  		return NULL;  	}  } -*/ +#endif  namespace DS { @@ -197,7 +246,7 @@ bool gameScreenSwap = false;  bool isCpuScalerEnabled();  //#define HEAVY_LOGGING -MouseMode mouseMode; +MouseMode mouseMode = MOUSE_LEFT;  int storedMouseX = 0;  int storedMouseY = 0; @@ -355,6 +404,10 @@ void setSensitivity(int sensitivity) {  	touchPadSensitivity = sensitivity;  } +void setGamma(int gamma) { +	OSystem_DS::instance()->setGammaValue(gamma); +} +  void setTopScreenZoom(int percentage) {  		// 100    256  		// 150	  192 @@ -426,18 +479,18 @@ int getGameHeight() {  void initSprites() {  	for (int i = 0; i < 128; i++) { -	   sprites[i].attribute[0] = ATTR0_DISABLED; -	   sprites[i].attribute[1] = 0; -	   sprites[i].attribute[2] = 0; -	   sprites[i].filler = 0; -    } +		sprites[i].attribute[0] = ATTR0_DISABLED; +		sprites[i].attribute[1] = 0; +		sprites[i].attribute[2] = 0; +		sprites[i].filler = 0; +	}  	for (int i = 0; i < 128; i++) { -	   spritesMain[i].attribute[0] = ATTR0_DISABLED; -	   spritesMain[i].attribute[1] = 0; -	   spritesMain[i].attribute[2] = 0; -	   spritesMain[i].filler = 0; -    } +		spritesMain[i].attribute[0] = ATTR0_DISABLED; +		spritesMain[i].attribute[1] = 0; +		spritesMain[i].attribute[2] = 0; +		spritesMain[i].filler = 0; +	}  	updateOAM();  } @@ -502,7 +555,6 @@ void initGame() {  //	static bool firstTime = true; -  	setOptions();  	//strcpy(gameName, ConfMan.getActiveDomain().c_str()); @@ -592,9 +644,9 @@ void displayMode8Bit() {  		BG3_CR = BG_BMP16_256x256 | BG_BMP_BASE(8);  		BG3_XDX = 256; -	    BG3_XDY = 0; -	    BG3_YDX = 0; -	    BG3_YDY = (int) ((200.0f / 192.0f) * 256); +		BG3_XDY = 0; +		BG3_YDX = 0; +		BG3_YDY = (int) ((200.0f / 192.0f) * 256);  	} else {  		videoSetMode(MODE_5_2D | (consoleEnable? DISPLAY_BG0_ACTIVE: 0) | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE | DISPLAY_SPR_1D | DISPLAY_SPR_1D_BMP); @@ -611,9 +663,9 @@ void displayMode8Bit() {  		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); +		BG3_XDY = 0; +		BG3_YDX = 0; +		BG3_YDY = (int) ((200.0f / 192.0f) * 256);  	}  	SUB_BG3_CR = BG_BMP8_512x256; @@ -625,11 +677,13 @@ void displayMode8Bit() { -	if (consoleEnable) { -		consoleInit(NULL, 0, BgType_Text4bpp, BgSize_T_256x256, 2, 0, true); -		// Move the cursor to the bottom of the screen using ANSI escape code -		consolePrintf("\033[23;0f"); -	} +	consoleInit(NULL, 0, BgType_Text4bpp, BgSize_T_256x256, 2, 0, true); + +	// Set this again because consoleinit resets it +	videoSetMode(MODE_5_2D | (consoleEnable? DISPLAY_BG0_ACTIVE: 0) | DISPLAY_BG3_ACTIVE | DISPLAY_SPR_ACTIVE | DISPLAY_SPR_1D | DISPLAY_SPR_1D_BMP); + +	// Move the cursor to the bottom of the screen using ANSI escape code +	consolePrintf("\033[23;0f");  	for (int r = 0; r < 32 * 32; r++) { @@ -638,7 +692,9 @@ void displayMode8Bit() {  	}  	// ConsoleInit destroys the hardware palette :-( -	OSystem_DS::instance()->restoreHardwarePalette(); +	if (OSystem_DS::instance()) { +		OSystem_DS::instance()->restoreHardwarePalette(); +	}  //	BG_PALETTE_SUB[255] = RGB15(31,31,31);//by default font will be rendered with color 255 @@ -912,12 +968,12 @@ void displayMode16BitFlipBuffer() {  			}  		}  	} else if (isCpuScalerEnabled()) { -        //#define SCALER_PROFILE +		//#define SCALER_PROFILE -        #ifdef SCALER_PROFILE -	    TIMER1_CR = TIMER_ENABLE | TIMER_DIV_1024; -        u16 t0 = TIMER1_DATA; -        #endif +		#ifdef SCALER_PROFILE +		TIMER1_CR = TIMER_ENABLE | TIMER_DIV_1024; +		u16 t0 = TIMER1_DATA; +		#endif  		const u8* back = (const u8*)get8BitBackBuffer();  		u16* base = BG_GFX + 0x10000;  		Rescale_320x256xPAL8_To_256x256x1555( @@ -928,19 +984,19 @@ void displayMode16BitFlipBuffer() {  			BG_PALETTE,  			getGameHeight() ); -        #ifdef SCALER_PROFILE -        // 10 pixels : 1ms -        u16 t1 = TIMER1_DATA; -	    TIMER1_CR &= ~TIMER_ENABLE; -        u32 dt = t1 - t0; -        u32 dt_us = (dt * 10240) / 334; -        u32 dt_10ms = dt_us / 100; -        int i; -        for(i=0; i<dt_10ms; ++i) -            base[i] = ((i/10)&1) ? 0xFFFF : 0x801F; -        for(; i<256; ++i) -            base[i] = 0x8000; -        #endif +		#ifdef SCALER_PROFILE +		// 10 pixels : 1ms +		u16 t1 = TIMER1_DATA; +		TIMER1_CR &= ~TIMER_ENABLE; +		u32 dt = t1 - t0; +		u32 dt_us = (dt * 10240) / 334; +		u32 dt_10ms = dt_us / 100; +		int i; +		for(i=0; i<dt_10ms; ++i) +			base[i] = ((i/10)&1) ? 0xFFFF : 0x801F; +		for(; i<256; ++i) +			base[i] = 0x8000; +		#endif  	}  	#ifdef HEAVY_LOGGING  	consolePrintf("done\n"); @@ -1209,9 +1265,9 @@ void setKeyboardEnable(bool en) {  				}  			}  /* -            for (int r = 0; r < (512 * 256) >> 1; r++) -                BG_GFX_SUB[r] = buffer[r]; -  */ +			for (int r = 0; r < (512 * 256) >> 1; r++) +				BG_GFX_SUB[r] = buffer[r]; +*/  			SUB_DISPLAY_CR &= ~DISPLAY_BG1_ACTIVE;	// Turn off keyboard layer  			SUB_DISPLAY_CR |= DISPLAY_BG3_ACTIVE;	// Turn on game layer  		} else { @@ -1597,7 +1653,7 @@ void addEventsToQueue() {  				doButtonSelectMode(system);  			} -			if (((!(getKeysHeld() & KEY_L)) && (!(getKeysHeld() & KEY_R)) || (indyFightState))  && (displayModeIs8Bit)) { +			if (((!(getKeysHeld() & KEY_L)) && (!(getKeysHeld() & KEY_R)) || (indyFightState)) && (displayModeIs8Bit)) {  				// Controls specific to the control method @@ -2031,9 +2087,9 @@ void VBlankHandler(void) {  	SUB_BG3_CY = subScY + (shakePos << 8);*/  	/*SUB_BG3_XDX = (int) (subScreenWidth / 256.0f * 256); -    SUB_BG3_XDY = 0; -    SUB_BG3_YDX = 0; -    SUB_BG3_YDY = (int) (subScreenHeight / 192.0f * 256);*/ +	SUB_BG3_XDY = 0; +	SUB_BG3_YDX = 0; +	SUB_BG3_YDY = (int) (subScreenHeight / 192.0f * 256);*/  	static int ratio = (320 << 8) / SCUMM_GAME_WIDTH; @@ -2886,7 +2942,6 @@ void powerOff() {  void dsExceptionHandler() {  	consolePrintf("Blue screen of death");  	setExceptionHandler(NULL); -	while(1);  	u32	currentMode = getCPSR() & 0x1f;  	u32 thumbState = ((*(u32*)0x027FFD90) & 0x20); @@ -2918,7 +2973,7 @@ void dsExceptionHandler() {  	int i;  	for ( i=0; i < 8; i++ ) { -		consolePrintf(	"  %s: %08X   %s: %08X\n", +		consolePrintf("  %s: %08X   %s: %08X\n",  					registerNames[i], exceptionRegisters[i],  					registerNames[i+8],exceptionRegisters[i+8]);  	} @@ -3025,7 +3080,7 @@ int main(void) {  	consolePrintf("-------------------------------\n");  	consolePrintf("ScummVM DS\n");  	consolePrintf("Ported by Neil Millstone\n"); -	consolePrintf("Version 0.13.1 beta1 "); +	consolePrintf("Version 1.0.0 RC1 ");  #if defined(DS_BUILD_A)  	consolePrintf("build A\n");  	consolePrintf("Lucasarts SCUMM games (SCUMM)\n"); @@ -3219,3 +3274,12 @@ int cygprofile_getHBlanks() {  	return DS::hBlankCount;  }  #endif + + +extern "C" void consolePrintf(const char * format, ...) { +	char buffer[256]; +	va_list args; +	va_start(args, format); +	viprintf(format, args); +	va_end(args); +} | 
