pandora: fix readme and pxml version
[picodrive.git] / pico / cd / gfx_dma.c
... / ...
CommitLineData
1/*
2 * PicoDrive
3 * (C) notaz, 2007
4 *
5 * This work is licensed under the terms of MAME license.
6 * See COPYING file in the top-level directory.
7 */
8
9#include "../pico_int.h"
10
11#include "cell_map.c"
12
13// check: Heart of the alien, jaguar xj 220
14PICO_INTERNAL void DmaSlowCell(u32 source, u32 a, int len, unsigned char inc)
15{
16 unsigned char *base;
17 u32 asrc, a2;
18 u16 *r;
19
20 base = Pico_mcd->word_ram1M[Pico_mcd->s68k_regs[3]&1];
21
22 switch (Pico.video.type)
23 {
24 case 1: // vram
25 r = PicoMem.vram;
26 for(; len; len--)
27 {
28 asrc = cell_map(source >> 2) << 2;
29 asrc |= source & 2;
30 // if(a&1) d=(d<<8)|(d>>8); // ??
31 VideoWriteVRAM(a, *(u16 *)(base + asrc));
32 source += 2;
33 // AutoIncrement
34 a=(u16)(a+inc);
35 }
36 break;
37
38 case 3: // cram
39 Pico.m.dirtyPal = 1;
40 r = PicoMem.cram;
41 for(a2=a&0x7f; len; len--)
42 {
43 asrc = cell_map(source >> 2) << 2;
44 asrc |= source & 2;
45 r[a2>>1] = *(u16 *)(base + asrc);
46 source += 2;
47 // AutoIncrement
48 a2+=inc;
49 // good dest?
50 if(a2 >= 0x80) break;
51 }
52 a=(a&0xff00)|a2;
53 break;
54
55 case 5: // vsram[a&0x003f]=d;
56 r = PicoMem.vsram;
57 for(a2=a&0x7f; len; len--)
58 {
59 asrc = cell_map(source >> 2) << 2;
60 asrc |= source & 2;
61 r[a2>>1] = *(u16 *)(base + asrc);
62 source += 2;
63 // AutoIncrement
64 a2+=inc;
65 // good dest?
66 if(a2 >= 0x80) break;
67 }
68 a=(a&0xff00)|a2;
69 break;
70 }
71 // remember addr
72 Pico.video.addr=(u16)a;
73}
74