- else if(source<Pico.romsize) { pd=(u16 *)(Pico.rom+(source&~1)); pdend=(u16 *)(Pico.rom+Pico.romsize); } // Rom\r
- else return; // Invalid source address\r
-\r
-#if 0\r
- // CPU is stopped during DMA, so we burn some cycles to compensate that\r
- if((Pico.video.status&8)||!(Pico.video.reg[1]&0x40)) { // vblank?\r
- burn = (len*(((488<<8)/167))>>8); // very approximate\r
- if(!(Pico.video.status&8)) burn+=burn>>1; // a hack for Legend of Galahad\r
- } else burn = DmaSlowBurn(len);\r
- SekCyclesBurn(burn);\r
-#else\r
- Pico.m.dma_bytes += len;\r
-#endif\r
- //if(!(Pico.video.status&8))\r
-// SekEndRun(0);\r
- //Pico.m.dma_endcycles = 0;//SekCyclesLeft;\r
- //Pico.m.dma_endcycles -= Pico.m.dma_endcycles>>3; // hack\r
- SekSetCyclesLeft(SekCyclesLeft - CheckDMA());\r
-// CheckDMA();\r
-// dprintf("DmaSlow burn: %i @ %06x", burn, SekPc);\r
+ else if(PicoMCD & 1) {\r
+ if(source<0x20000) { pd=(u16 *)(Pico_mcd->bios+(source&~1)); pdend=(u16 *)(Pico_mcd->bios+0x20000); } // Bios area\r
+ else { dprintf("unsupported src"); return; } // Invalid source address\r
+ } else {\r
+ if(source<Pico.romsize) { pd=(u16 *)(Pico.rom+(source&~1)); pdend=(u16 *)(Pico.rom+Pico.romsize); } // Rom\r
+ else { dprintf("invalid dma src"); return; } // Invalid source address\r
+ }\r