X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fpico.c;h=54de78c99ca2a759285b38e7b893288bd6fb0771;hb=97d3f47fbe0cebff925dfab2a12c047415c85346;hp=aa2be38057c6410d44953141db7787bed6316fa9;hpb=be2c420828ab3c36ef652584fbdef0e0597c7028;p=picodrive.git diff --git a/pico/pico.c b/pico/pico.c index aa2be38..54de78c 100644 --- a/pico/pico.c +++ b/pico/pico.c @@ -10,17 +10,18 @@ #include "pico_int.h" #include "sound/ym2612.h" -int PicoVer=0x0133; struct Pico Pico; -int PicoOpt = 0; -int PicoSkipFrame = 0; // skip rendering frame? -int emustatus = 0; // rapid_ym2612, multi_ym_updates +int PicoOpt; +int PicoSkipFrame; // skip rendering frame? int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU int PicoPadInt[2]; // internal copy -int PicoAHW = 0; // active addon hardware: scd_active, 32x_active, svp_active, pico_active -int PicoRegionOverride = 0; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe -int PicoAutoRgnOrder = 0; -struct PicoSRAM SRam = {0,}; +int PicoAHW; // active addon hardware: PAHW_* +int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe +int PicoAutoRgnOrder; + +struct PicoSRAM SRam; +int emustatus; // rapid_ym2612, multi_ym_updates +int scanlines_total; void (*PicoWriteSound)(int len) = NULL; // called at the best time to send sound buffer (PsndOut) to hardware void (*PicoResetHook)(void) = NULL; @@ -76,6 +77,9 @@ void PicoPower(void) if (PicoAHW & PAHW_MCD) PicoPowerMCD(); + if (PicoOpt & POPT_EN_32X) + PicoPower32x(); + PicoReset(); } @@ -188,7 +192,7 @@ int PicoReset(void) if (!(PicoOpt & POPT_DIS_IDLE_DET)) SekInitIdleDet(); - if (!(PicoOpt & POPT_DIS_32X)) { + if (PicoOpt & POPT_EN_32X) { PicoReset32x(); return 0; } @@ -205,6 +209,20 @@ int PicoReset(void) return 0; } +// flush cinfig changes before emu loop starts +void PicoLoopPrepare(void) +{ + if (PicoRegionOverride) + // force setting possibly changed.. + Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0; + + // FIXME: PAL has 313 scanlines.. + scanlines_total = Pico.m.pal ? 312 : 262; + + if (PicoAHW & PAHW_32X) + p32x_pwm_refresh(); +} + // dma2vram settings are just hacks to unglitch Legend of Galahad (needs <= 104 to work) // same for Outrunners (92-121, when active is set to 24) @@ -302,11 +320,17 @@ void PicoFrame(void) return; } + // TODO: MCD+32X if (PicoAHW & PAHW_MCD) { PicoFrameMCD(); return; } + if (PicoAHW & PAHW_32X) { + PicoFrame32x(); + return; + } + //if(Pico.video.reg[12]&0x2) Pico.video.status ^= 0x10; // change odd bit in interlace mode PicoFrameStart();