\r
struct PicoSRAM SRam;\r
int emustatus; // rapid_ym2612, multi_ym_updates\r
-int scanlines_total;\r
\r
void (*PicoWriteSound)(int len) = NULL; // called at the best time to send sound buffer (PsndOut) to hardware\r
void (*PicoResetHook)(void) = NULL;\r
\r
Pico.est.Pico_video = &Pico.video;\r
Pico.est.Pico_vram = Pico.vram;\r
+ Pico.est.PicoOpt = &PicoOpt;\r
\r
// Init CPUs:\r
SekInit();\r
PicoInitMCD();\r
PicoSVPInit();\r
Pico32xInit();\r
+\r
+ PicoDrawInit();\r
+ PicoDraw2Init();\r
}\r
\r
// to be called once on emu exit\r
// force setting possibly changed..\r
Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0;\r
\r
- // FIXME: PAL has 313 scanlines..\r
- scanlines_total = Pico.m.pal ? 312 : 262;\r
-\r
Pico.m.dirtyPal = 1;\r
rendstatus_old = -1;\r
}\r
\r
-\r
-// dma2vram settings are just hacks to unglitch Legend of Galahad (needs <= 104 to work)\r
-// same for Outrunners (92-121, when active is set to 24)\r
-// 96 is VR hack\r
+// this table is wrong and should be removed\r
+// keeping it for now to compensate wrong timing elswhere, mainly for Outrunners\r
static const int dma_timings[] = {\r
- 167, 167, 166, 83, // vblank: 32cell: dma2vram dma2[vs|c]ram vram_fill vram_copy\r
- 102, 205, 204, 102, // vblank: 40cell:\r
- 16, 16, 15, 8, // active: 32cell:\r
- 24, 18, 17, 9 // ...\r
+ 83, 166, 83, 83, // vblank: 32cell: dma2vram dma2[vs|c]ram vram_fill vram_copy\r
+ 102, 204, 102, 102, // vblank: 40cell:\r
+ 8, 16, 8, 8, // active: 32cell:\r
+ 17, 18, 9, 9 // ...\r
};\r
\r
static const int dma_bsycles[] = {\r
- (488<<8)/167, (488<<8)/167, (488<<8)/166, (488<<8)/83,\r
- (488<<8)/102, (488<<8)/233, (488<<8)/204, (488<<8)/102,\r
- (488<<8)/16, (488<<8)/16, (488<<8)/15, (488<<8)/8,\r
- (488<<8)/24, (488<<8)/18, (488<<8)/17, (488<<8)/9\r
+ (488<<8)/83, (488<<8)/166, (488<<8)/83, (488<<8)/83,\r
+ (488<<8)/102, (488<<8)/204, (488<<8)/102, (488<<8)/102,\r
+ (488<<8)/8, (488<<8)/16, (488<<8)/8, (488<<8)/8,\r
+ (488<<8)/9, (488<<8)/18, (488<<8)/9, (488<<8)/9\r
};\r
\r
// grossly inaccurate.. FIXME FIXXXMEE\r
Pico.m.dma_xfers -= xfers_can;\r
}\r
\r
- elprintf(EL_VDPDMA, "~Dma %i op=%i can=%i burn=%i [%i]", Pico.m.dma_xfers, dma_op1, xfers_can, burn, SekCyclesDone());\r
+ elprintf(EL_VDPDMA, "~Dma %i op=%i can=%i burn=%i [%u]",\r
+ Pico.m.dma_xfers, dma_op1, xfers_can, burn, SekCyclesDone());\r
//dprintf("~aim: %i, cnt: %i", SekCycleAim, SekCycleCnt);\r
return burn;\r
}\r
pprof_start(z80);\r
\r
elprintf(EL_BUSREQ, "z80 sync %i (%u|%u -> %u|%u)", cnt,\r
- z80_cycle_cnt, z80_cycle_cnt / 288,\r
- z80_cycle_aim, z80_cycle_aim / 288);\r
+ z80_cycle_cnt, z80_cycle_cnt / 228,\r
+ z80_cycle_aim, z80_cycle_aim / 228);\r
\r
if (cnt > 0)\r
z80_cycle_cnt += z80_run(cnt);\r