-}\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
-static const int dma_timings[] = {\r
- 96, 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
-};\r
-\r
-static const int dma_bsycles[] = {\r
- (488<<8)/96, (488<<8)/167, (488<<8)/166, (488<<8)/83,\r
- (488<<8)/102, (488<<8)/205, (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
-};\r
-\r
-PICO_INTERNAL int CheckDMA(void)\r
-{\r
- int burn = 0, xfers_can, dma_op = Pico.video.reg[0x17]>>6; // see gens for 00 and 01 modes\r
- int xfers = Pico.m.dma_xfers;\r
- int dma_op1;\r
-\r
- if(!(dma_op&2)) dma_op = (Pico.video.type==1) ? 0 : 1; // setting dma_timings offset here according to Gens\r
- dma_op1 = dma_op;\r
- if(Pico.video.reg[12] & 1) dma_op |= 4; // 40 cell mode?\r
- if(!(Pico.video.status&8)&&(Pico.video.reg[1]&0x40)) dma_op|=8; // active display?\r
- xfers_can = dma_timings[dma_op];\r
- if(xfers <= xfers_can)\r
- {\r
- if(dma_op&2) Pico.video.status&=~2; // dma no longer busy\r
- else {\r
- burn = xfers * dma_bsycles[dma_op] >> 8; // have to be approximate because can't afford division..\r
- }\r
- Pico.m.dma_xfers = 0;\r
- } else {\r
- if(!(dma_op&2)) burn = 488;\r
- Pico.m.dma_xfers -= xfers_can;\r
- }\r