From a7271cb9dd6fedabea6ce12dc8de249cc220b284 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Thu, 7 Jun 2007 20:34:15 +0000 Subject: NDS : Attempt to not buffer overrun VRAM when doing saveGameBackBuffer/restoreGameBackBuffer when CPU scaler is on svn-id: r27176 --- backends/platform/ds/arm9/source/dsmain.cpp | 46 +++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 153ecfab87..21602c4f34 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -333,27 +333,49 @@ void initSprites() { void saveGameBackBuffer() { #ifdef DISABLE_SCUMM if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight]; - for (int r = 0; r < 200; r++) { - memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth); + if(isCpuScalerEnabled()) + { + memcpy(savedBuffer, get8BitBackBuffer(), gameWidth * gameHeight); } + else + { + for (int r = 0; r < gameHeight; r++) { + memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth); + } + } #endif } void restoreGameBackBuffer() { #ifdef DISABLE_SCUMM if (savedBuffer) { - for (int r = 0; r < 200; r++) { - memcpy(((u8 *) (BG_GFX_SUB)) + (r * 512), savedBuffer + (r * gameWidth), gameWidth); - memcpy(((u8 *) (get8BitBackBuffer())) + (r * 512), savedBuffer + (r * gameWidth), gameWidth); - } + if(isCpuScalerEnabled()) + { + memcpy(get8BitBackBuffer(), savedBuffer, gameWidth * gameHeight); + // TODO Synchronize with framebuffer if necessary + } + else + { + 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); + } + } + delete savedBuffer; savedBuffer = NULL; } -#endif - -#ifndef DISABLE_SCUMM - memset(get8BitBackBuffer(), 0, 512 * 256); - memset(BG_GFX_SUB, 0, 512 * 256); +#else + if(isCpuScalerEnabled()) + { + memset(get8BitBackBuffer(), 0, 320 * 200); + // TODO Synchronize with framebuffer if necessary + } + else + { + memset(get8BitBackBuffer(), 0, 512 * 256); + memset(BG_GFX_SUB, 0, 512 * 256); + } if (Scumm::g_scumm) { Scumm::g_scumm->markRectAsDirty(Scumm::kMainVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1); Scumm::g_scumm->markRectAsDirty(Scumm::kTextVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1); @@ -728,7 +750,7 @@ void displayMode16BitFlipBuffer() { } else if (isCpuScalerEnabled()) { - //#define SCALER_PROFILE + #define SCALER_PROFILE #ifdef SCALER_PROFILE TIMER1_CR = TIMER_ENABLE | TIMER_DIV_1024; -- cgit v1.2.3 From 72cfa9d8293aa897a89d577d9844a2a286d8f0e2 Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Tue, 12 Jun 2007 07:14:04 +0000 Subject: NDS : Attempt to not buffer overrun VRAM when doing saveGameBackBuffer/restoreGameBackBuffer ported to branch 0.10.0 svn-id: r27374 --- backends/platform/ds/arm9/source/dsmain.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 21602c4f34..644b66671a 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -750,7 +750,7 @@ void displayMode16BitFlipBuffer() { } else if (isCpuScalerEnabled()) { - #define SCALER_PROFILE + //#define SCALER_PROFILE #ifdef SCALER_PROFILE TIMER1_CR = TIMER_ENABLE | TIMER_DIV_1024; @@ -2505,4 +2505,3 @@ int main(void) int main() { DS::main(); } - -- cgit v1.2.3 From e5107cb9807b884e8b84ff25733d60575902039d Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Sun, 17 Jun 2007 19:37:07 +0000 Subject: NDS: setKeyboardEnable shouldn't overrun VRAM anymore when CPU scaler is on svn-id: r27515 --- backends/platform/ds/arm9/source/dsmain.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 644b66671a..45f0a16deb 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -1018,11 +1018,19 @@ void setKeyboardEnable(bool en) { // Copy the sub screen VRAM from the top screen - they should always be // the same. u16* buffer = get8BitBackBuffer(); - - for (int r = 0; r < (512 * 256) >> 1; r++) { - BG_GFX_SUB[r] = buffer[r]; - } - + + if(isCpuScalerEnabled()) + { + for (int y = 0; y < gameHeight; ++y) + for (int x = 0; x < gameWidth / 2; ++x) + BG_GFX_SUB[y*256 + x] = buffer[y*gameWidth/2 + x]; + } + else + { + 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 { -- cgit v1.2.3 From 1e048c1de6c68a9900ed5fa6de7852652317e74e Mon Sep 17 00:00:00 2001 From: Bertrand Augereau Date: Mon, 18 Jun 2007 07:06:24 +0000 Subject: NDS : Suppressed unneccessary complications regarding the backbuffer when CPU-scaled, basically it has the same stride than the regular one (512b) so most code doesn't have to change svn-id: r27517 --- backends/platform/ds/arm9/source/dsmain.cpp | 55 ++++++----------------------- 1 file changed, 11 insertions(+), 44 deletions(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 45f0a16deb..860aa41828 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -333,49 +333,25 @@ void initSprites() { void saveGameBackBuffer() { #ifdef DISABLE_SCUMM if (savedBuffer == NULL) savedBuffer = new u8[gameWidth * gameHeight]; - if(isCpuScalerEnabled()) - { - memcpy(savedBuffer, get8BitBackBuffer(), gameWidth * gameHeight); - } - else - { - for (int r = 0; r < gameHeight; r++) { - memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth); - } - } + for (int r = 0; r < gameHeight; r++) { + memcpy(savedBuffer + (r * gameWidth), ((u8 *) (get8BitBackBuffer())) + (r * 512), gameWidth); #endif } void restoreGameBackBuffer() { #ifdef DISABLE_SCUMM if (savedBuffer) { - if(isCpuScalerEnabled()) - { - memcpy(get8BitBackBuffer(), savedBuffer, gameWidth * gameHeight); - // TODO Synchronize with framebuffer if necessary - } - else - { - 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); - } - } + 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); + } delete savedBuffer; savedBuffer = NULL; } #else - if(isCpuScalerEnabled()) - { - memset(get8BitBackBuffer(), 0, 320 * 200); - // TODO Synchronize with framebuffer if necessary - } - else - { - memset(get8BitBackBuffer(), 0, 512 * 256); - memset(BG_GFX_SUB, 0, 512 * 256); - } + memset(get8BitBackBuffer(), 0, 512 * 256); + memset(BG_GFX_SUB, 0, 512 * 256); if (Scumm::g_scumm) { Scumm::g_scumm->markRectAsDirty(Scumm::kMainVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1); Scumm::g_scumm->markRectAsDirty(Scumm::kTextVirtScreen, 0, gameWidth - 1, 0, gameHeight - 1, 1); @@ -1019,18 +995,9 @@ void setKeyboardEnable(bool en) { // the same. u16* buffer = get8BitBackBuffer(); - if(isCpuScalerEnabled()) - { - for (int y = 0; y < gameHeight; ++y) - for (int x = 0; x < gameWidth / 2; ++x) - BG_GFX_SUB[y*256 + x] = buffer[y*gameWidth/2 + x]; - } - else - { - 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 { -- cgit v1.2.3 From 019cbf0e6c7957543379115cb95d1b96704405e6 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 18 Jun 2007 12:34:29 +0000 Subject: Added FIXME to dsmain.cpp about it not using SCUMMVM_VERSION (thus adding one more headache to the release process) svn-id: r27531 --- backends/platform/ds/arm9/source/dsmain.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 860aa41828..becb0205cb 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -2312,6 +2312,8 @@ int main(void) consolePrintf("-------------------------------\n"); consolePrintf("ScummVM DS\n"); consolePrintf("Ported by Neil Millstone\n"); + FIXME: Change this code to make use of base/internal_version.h + resp. uses gScummVMVersion from base/version.h consolePrintf("Version 0.10.0SVN "); #if defined(DS_BUILD_A) consolePrintf("build A\n"); -- cgit v1.2.3 From 2b23374468549722c8068d448d9bbf5e100d7301 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 22 Jun 2007 20:04:44 +0000 Subject: Converted lots of code to use Common::ASCII_* and COMMON::KEYCODE_* constants. This also revealed the evil mixing of keycodes and ascii we do in many places :-/ svn-id: r27616 --- backends/platform/ds/arm9/source/dsmain.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index becb0205cb..be5d0a14a2 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -1226,7 +1226,7 @@ void addEventsToQueue() { if (leftHandedSwap(getKeysChanged()) & KEY_UP) { event.type = getKeyEvent(leftHandedSwap(KEY_UP)); - event.kbd.keycode = SDLK_UP; + event.kbd.keycode = Common::KEYCODE_UP; event.kbd.ascii = 0; event.kbd.flags = 0; system->addEvent(event); @@ -1234,7 +1234,7 @@ void addEventsToQueue() { if (leftHandedSwap(getKeysChanged()) & KEY_DOWN) { event.type = getKeyEvent(leftHandedSwap(KEY_DOWN)); - event.kbd.keycode = SDLK_DOWN; + event.kbd.keycode = Common::KEYCODE_DOWN; event.kbd.ascii = 0; event.kbd.flags = 0; system->addEvent(event); @@ -1242,7 +1242,7 @@ void addEventsToQueue() { if (leftHandedSwap(getKeysDown()) & KEY_A) { event.type = getKeyEvent(leftHandedSwap(KEY_A)); - event.kbd.keycode = SDLK_RETURN; + event.kbd.keycode = Common::KEYCODE_RETURN; event.kbd.ascii = 0; event.kbd.flags = 0; system->addEvent(event); @@ -1253,8 +1253,8 @@ void addEventsToQueue() { if ((getKeysChanged() & KEY_START)) { event.type = getKeyEvent(KEY_START); - event.kbd.keycode = 319; // F5 - event.kbd.ascii = 319; + event.kbd.keycode = Common::ASCII_F5; // FIXME: Should be KEYCODE_F5 + event.kbd.ascii = Common::ASCII_F5; event.kbd.flags = 0; system->addEvent(event); } -- cgit v1.2.3 From 05a70fc8e404bd2003e8faa3bc1d4564918eca03 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 22 Jun 2007 23:43:17 +0000 Subject: Produce 'correct' keycode/ascii values for function keys svn-id: r27642 --- backends/platform/ds/arm9/source/dsmain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'backends/platform/ds/arm9/source/dsmain.cpp') diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index be5d0a14a2..af5addac66 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -1253,7 +1253,7 @@ void addEventsToQueue() { if ((getKeysChanged() & KEY_START)) { event.type = getKeyEvent(KEY_START); - event.kbd.keycode = Common::ASCII_F5; // FIXME: Should be KEYCODE_F5 + event.kbd.keycode = Common::KEYCODE_F5; event.kbd.ascii = Common::ASCII_F5; event.kbd.flags = 0; system->addEvent(event); -- cgit v1.2.3