aboutsummaryrefslogtreecommitdiff
path: root/backends/gp32/gp32_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/gp32/gp32_main.cpp')
-rw-r--r--backends/gp32/gp32_main.cpp127
1 files changed, 9 insertions, 118 deletions
diff --git a/backends/gp32/gp32_main.cpp b/backends/gp32/gp32_main.cpp
index 65ab1ba223..1c1186e39a 100644
--- a/backends/gp32/gp32_main.cpp
+++ b/backends/gp32/gp32_main.cpp
@@ -22,125 +22,21 @@
#include "stdafx.h"
#include "common/scummsys.h"
-#include "common/scaler.h"
-#include "common/system.h"
-#include "backends/intern.h"
-#include "base/engine.h"
+#include "common/config-manager.h"
#include "backends/gp32/gp32std.h"
#include "backends/gp32/gp32std_grap.h"
#include "backends/gp32/gp32_launcher.h"
+#include "backends/gp32/globals.h"
-#include "backends/gp32/gp32_osys.h"
+GlobalVars g_vars;
extern "C" int scummvm_main(int argc, char *argv[]);
-extern void gp_delay(uint32 msecs);
-
-extern "C" void cpu_speed(int MCLK, int CLKDIV, int CLKMODE); // CPU Speed control (3 int's, clock, bus, dividor)
-
-// Where's better position?
-static int CLKDIV = 0x48013;
-static int MCLK = 40000000;
-static int CLKMODE = 0;
-static int HCLK = 40000000;
-static int PCLK = 40000000;
-/*
-int gp_getPCLK() {
- return PCLK;
-}
-
-int gp_getHCLK() {
- return HCLK;
-}
-*/
-void gp_clockSpeedChange(int freq, int magic, int div) {
- #define rTCFG0 (*(volatile unsigned *)0x15100000)
- #define rTCFG1 (*(volatile unsigned *)0x15100004)
- #define rTCNTB4 (*(volatile unsigned *)0x1510003c)
- unsigned int pclk;
- unsigned int prescaler0;
-
- /* Change CPU Speed */
- GpClockSpeedChange(freq, magic, div);
- pclk = GpPClkGet();
-
- /* Repair SDK timer - it forgets to set prescaler */
- prescaler0 = (pclk / (8000 * 40)) - 1;
- rTCFG0 = (rTCFG0 & 0xFFFFFF00) | prescaler0;
- rTCFG1 = 0x30033;
-
- /* Repair GpTickCountGet */
- rTCNTB4 = pclk / 1600;
-}
-
-void gp_setCpuSpeed(int freq) {
- switch (freq) {
- // overclocked
- case 168: { CLKDIV = 0x14000; MCLK = 168000000; CLKMODE = 3; break; }
- case 172: { CLKDIV = 0x23010; MCLK = 172000000; CLKMODE = 3; break; }
- case 176: { CLKDIV = 0x24010; MCLK = 176000000; CLKMODE = 3; break; }
- case 180: { CLKDIV = 0x16000; MCLK = 180000000; CLKMODE = 3; break; }
- case 184: { CLKDIV = 0x26010; MCLK = 184000000; CLKMODE = 3; break; }
- case 188: { CLKDIV = 0x27010; MCLK = 188000000; CLKMODE = 3; break; }
- case 192: { CLKDIV = 0x18000; MCLK = 192000000; CLKMODE = 3; break; }
- case 196: { CLKDIV = 0x29010; MCLK = 196000000; CLKMODE = 3; break; }
- case 200: { CLKDIV = 0x2A010; MCLK = 200000000; CLKMODE = 3; break; }
- case 204: { CLKDIV = 0x2b010; MCLK = 204000000; CLKMODE = 3; break; }
- case 208: { CLKDIV = 0x2c010; MCLK = 208000000; CLKMODE = 3; break; }
- case 212: { CLKDIV = 0x2d010; MCLK = 212000000; CLKMODE = 3; break; }
- case 216: { CLKDIV = 0x2e010; MCLK = 216000000; CLKMODE = 3; break; }
- case 220: { CLKDIV = 0x2f010; MCLK = 220000000; CLKMODE = 3; break; }
- case 224: { CLKDIV = 0x30010; MCLK = 224000000; CLKMODE = 3; break; }
- case 228: { CLKDIV = 0x1e000; MCLK = 228000000; CLKMODE = 3; break; }
- case 232: { CLKDIV = 0x32010; MCLK = 232000000; CLKMODE = 3; break; }
- case 236: { CLKDIV = 0x33010; MCLK = 236000000; CLKMODE = 3; break; }
- case 240: { CLKDIV = 0x20000; MCLK = 240000000; CLKMODE = 3; break; }
- case 244: { CLKDIV = 0x35010; MCLK = 244000000; CLKMODE = 3; break; }
- case 248: { CLKDIV = 0x36010; MCLK = 248000000; CLKMODE = 3; break; }
- case 252: { CLKDIV = 0x22000; MCLK = 252000000; CLKMODE = 3; break; }
- case 256: { CLKDIV = 0x38010; MCLK = 256000000; CLKMODE = 3; break; }
-
- // normal
-// case 166: { CLKDIV = 0x4B011; MCLK = 166000000; CLKMODE = 3; break; }
- case 166: { CLKDIV = 0x2f001; MCLK = 165000000; CLKMODE = 3; break; }
- case 164: { CLKDIV = 0x4a011; MCLK = 164000000; CLKMODE = 3; break; }
- case 160: { CLKDIV = 0x48011; MCLK = 160000000; CLKMODE = 3; break; }
-// case 156: { CLKDIV = 0x2c001; MCLK = 156000000; CLKMODE = 3; break; }
- case 156: { CLKDIV = 0x2c001; MCLK = 156000000; CLKMODE = 3; break; }
- case 144: { CLKDIV = 0x28001; MCLK = 144000000; CLKMODE = 3; break; }
-// case 133: { CLKDIV = 0x3a011; MCLK = 132000000; CLKMODE = 3; break; }
- case 133: { CLKDIV = (81 << 12) | (2 << 4) | 1; MCLK = 133500000; CLKMODE = 2; break; }
- case 132: { CLKDIV = 0x3a011; MCLK = 132000000; CLKMODE = 3; break; }
- case 120: { CLKDIV = 0x24001; MCLK = 120000000; CLKMODE = 2; break; }
-// case 100: { CLKDIV = 0x2b011; MCLK = 102000000; CLKMODE=2; break; }
- case 100: { CLKDIV =( 43 << 12) | (1 << 4) | 1; MCLK = 102000000; CLKMODE = 2; break; }
-// case 66: { CLKDIV = 0x25002; MCLK= 67500000; CLKMODE=2; break; }
- case 66: { CLKDIV = (37 << 12) | (0 << 4) | 2; MCLK= 67500000; CLKMODE = 2; break; }
- case 50: { CLKDIV = 0x2a012; MCLK= 50000000; CLKMODE = 0; break; }
-// case 40: { CLKDIV = 0x48013; MCLK= 40000000; CLKMODE = 0; break; }
- case 40: { CLKDIV = 0x48013; MCLK= 40000000; CLKMODE = 1; break; }
-// case 33: { CLKDIV = 0x25003; MCLK= 33750000; CLKMODE = 0; break; }
- case 33: { CLKDIV = (37 << 12) | (0 << 4) | 3; MCLK = 33750000; CLKMODE = 2; break; }
- case 22: { CLKDIV = 0x33023; MCLK = 22125000; CLKMODE = 0; break; }
- }
- if (CLKMODE==0) { HCLK = MCLK; PCLK = MCLK; }
- if (CLKMODE==1) { HCLK = MCLK; PCLK = MCLK / 2; }
- if (CLKMODE==2) { HCLK = MCLK / 2; PCLK = MCLK / 2; }
- if (CLKMODE==3) { HCLK = MCLK / 2; PCLK = MCLK / 4; }
- //cpu_speed(MCLK, CLKDIV, CLKMODE);
- gp_clockSpeedChange(MCLK, CLKDIV, CLKMODE);
-}
-
-void gp_Reset() {
- gp_setCpuSpeed(66);
- asm volatile("swi #4\n");
-}
-
void init() {
- gp_setCpuSpeed(66); // Default CPU Speed
+ gp_setCpuSpeed(40); // Default CPU Speed
GpGraphicModeSet(16, NULL);
@@ -152,28 +48,23 @@ void init() {
// error("Invalid Console");
gp_initFrameBuffer();
-
GpFatInit();
GpRelativePathSet("gp:\\gpmm");
- //ERR_CODE err_code;
- //err_code = GpDirCreate("temp", 0);
- // if (err_code != SM_OK) return;
- g_cpuSpeed = 120;
}
void GpMain(void *arg) {
init();
+ readConfigVars();
+
splashScreen();
-
+
//doConfig
- gp_setCpuSpeed(g_cpuSpeed);
- GPDEBUG("Set CPU Speed: %d", g_cpuSpeed);
+ gp_initGammaTable((float)g_vars.gammaRamp / 10000);
+ gp_setCpuSpeed(g_vars.cpuSpeed);
// FOR DEBUG PURPOSE!
int argc = 2;
- //char *argv[] = { "scummvm", "playfate" };
- //char *argv[] = { "scummvm", "-enull", "-pgp:\\game\\loomcd\\", "loomcd" };
//char *argv[] = { "scummvm", "-enull", "-pgp:\\game\\dott\\", "tentacle" };
char *argv[] = { "scummvm", "-enull", "-d3" };