X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fcd%2Fgfx_dma.c;fp=pico%2Fcd%2Fgfx_dma.c;h=44fa7ab2f7fef1dc521639bb86976950af4e130b;hb=a93a80deda2211dc89ea543841e71cdaf6f65917;hp=0000000000000000000000000000000000000000;hpb=e53f0499fe2337c5efea7443d6e2322887cae593;p=picodrive.git diff --git a/pico/cd/gfx_dma.c b/pico/cd/gfx_dma.c new file mode 100644 index 0000000..44fa7ab --- /dev/null +++ b/pico/cd/gfx_dma.c @@ -0,0 +1,79 @@ +/* + * PicoDrive + * (C) notaz, 2007 + * + * This work is licensed under the terms of MAME license. + * See COPYING file in the top-level directory. + */ + +#include "../pico_int.h" + +#include "cell_map.c" + +#ifndef UTYPES_DEFINED +typedef unsigned short u16; +#endif + +// check: Heart of the alien, jaguar xj 220 +PICO_INTERNAL void DmaSlowCell(unsigned int source, unsigned int a, int len, unsigned char inc) +{ + unsigned char *base; + unsigned int asrc, a2; + u16 *r; + + base = Pico_mcd->word_ram1M[Pico_mcd->s68k_regs[3]&1]; + + switch (Pico.video.type) + { + case 1: // vram + r = Pico.vram; + for(; len; len--) + { + asrc = cell_map(source >> 2) << 2; + asrc |= source & 2; + // if(a&1) d=(d<<8)|(d>>8); // ?? + r[a>>1] = *(u16 *)(base + asrc); + source += 2; + // AutoIncrement + a=(u16)(a+inc); + } + rendstatus |= PDRAW_SPRITES_MOVED; + break; + + case 3: // cram + Pico.m.dirtyPal = 1; + r = Pico.cram; + for(a2=a&0x7f; len; len--) + { + asrc = cell_map(source >> 2) << 2; + asrc |= source & 2; + r[a2>>1] = *(u16 *)(base + asrc); + source += 2; + // AutoIncrement + a2+=inc; + // good dest? + if(a2 >= 0x80) break; + } + a=(a&0xff00)|a2; + break; + + case 5: // vsram[a&0x003f]=d; + r = Pico.vsram; + for(a2=a&0x7f; len; len--) + { + asrc = cell_map(source >> 2) << 2; + asrc |= source & 2; + r[a2>>1] = *(u16 *)(base + asrc); + source += 2; + // AutoIncrement + a2+=inc; + // good dest? + if(a2 >= 0x80) break; + } + a=(a&0xff00)|a2; + break; + } + // remember addr + Pico.video.addr=(u16)a; +} +