X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fgizmondo%2Femu.c;h=97fd079392f7add1ab1cb96276b9f830f17eb071;hb=6bae2e90d459dcbff157252ddfa7b87d25b8309f;hp=b9116068e6f0d4e361c245a6903195771e67d3a1;hpb=1cb1584b86a5679b8d32ccfc190f6e76c920810f;p=picodrive.git diff --git a/platform/gizmondo/emu.c b/platform/gizmondo/emu.c index b911606..97fd079 100644 --- a/platform/gizmondo/emu.c +++ b/platform/gizmondo/emu.c @@ -140,13 +140,14 @@ void emu_setDefaultConfig(void) currentConfig.KeyBinds[11] = 1<<30; // vol down currentConfig.PicoCDBuffers = 0; currentConfig.scaling = 0; + defaultConfig.turbo_rate = 15; } -static int EmuScan16(unsigned int num, void *sdata) +static int EmuScanBegin16(unsigned int num) { if (!(Pico.video.reg[1]&8)) num += 8; - DrawLineDest = (unsigned short *) giz_screen + 321*(num+1); + DrawLineDest = (unsigned short *) giz_screen + 321 * num; if ((currentConfig.EmuOpt&0x4000) && (num&1) == 0) // (Pico.m.frame_count&1)) return 1; // skip next line @@ -154,11 +155,11 @@ static int EmuScan16(unsigned int num, void *sdata) return 0; } -static int EmuScan8(unsigned int num, void *sdata) +static int EmuScanBegin8(unsigned int num) { // draw like the fast renderer if (!(Pico.video.reg[1]&8)) num += 8; - HighCol = gfx_buffer + 328*(num+1); + HighCol = gfx_buffer + 328 * num; return 0; } @@ -253,7 +254,7 @@ static void blit(const char *fps, const char *notice) if (emu_opt & 2) osd_text(OSD_FPS_X, h, fps); } - if ((emu_opt & 0x400) && (PicoMCD & 1)) + if ((emu_opt & 0x400) && (PicoAHW & PAHW_MCD)) cd_leds(); } @@ -280,10 +281,10 @@ static void vidResetMode(void) if (PicoOpt&0x10) { } else if (currentConfig.EmuOpt&0x80) { PicoDrawSetColorFormat(1); - PicoScan = EmuScan16; + PicoScanBegin = EmuScanBegin16; } else { PicoDrawSetColorFormat(-1); - PicoScan = EmuScan8; + PicoScanBegin = EmuScanBegin8; } if ((PicoOpt&0x10) || !(currentConfig.EmuOpt&0x80)) { // setup pal for 8-bit modes @@ -343,21 +344,20 @@ static void SkipFrame(void) } /* forced frame to front buffer */ -void emu_forcedFrame(void) +void emu_forcedFrame(int opts) { int po_old = PicoOpt; int eo_old = currentConfig.EmuOpt; - PicoOpt &= ~0x0010; - PicoOpt |= 0x4080; // soft_scale | acc_sprites + PicoOpt &= ~0x10; + PicoOpt |= opts|POPT_ACC_SPRITES; currentConfig.EmuOpt |= 0x80; if (giz_screen == NULL) giz_screen = Framework2D_LockBuffer(1); PicoDrawSetColorFormat(1); - PicoScan = EmuScan16; - PicoScan((unsigned) -1, NULL); + PicoScanBegin = EmuScanBegin16; Pico.m.dirtyPal = 1; PicoFrameDrawOnly(); @@ -477,8 +477,11 @@ static void updateKeys(void) } } - PicoPad[0] = (unsigned short) allActions[0]; - PicoPad[1] = (unsigned short) allActions[1]; + PicoPad[0] = allActions[0] & 0xfff; + PicoPad[1] = allActions[1] & 0xfff; + + if (allActions[0] & 0x7000) emu_DoTurbo(&PicoPad[0], allActions[0]); + if (allActions[1] & 0x7000) emu_DoTurbo(&PicoPad[1], allActions[1]); events = (allActions[0] | allActions[1]) >> 16; @@ -546,7 +549,7 @@ void emu_Loop(void) reset_timing = 1; // prepare CD buffer - if (PicoMCD & 1) PicoCDBufferInit(); + if (PicoAHW & PAHW_MCD) PicoCDBufferInit(); // prepare sound stuff PsndOut = NULL; @@ -716,9 +719,6 @@ void emu_Loop(void) /* be sure correct framebuffer is locked */ giz_screen = Framework2D_LockBuffer((currentConfig.EmuOpt&0x8000) ? 0 : 1); - if (!(PicoOpt&0x10)) - PicoScan((unsigned) -1, NULL); - PicoFrame(); if (giz_screen == NULL) @@ -757,7 +757,7 @@ void emu_Loop(void) } - if (PicoMCD & 1) PicoCDBufferFree(); + if (PicoAHW & PAHW_MCD) PicoCDBufferFree(); if (PsndOut != NULL) { PsndOut = snd_cbuff = NULL;