Previous 15994 Revisions Next

r6899 Sunday 3rd January, 2010 at 13:59:13 UTC by Harmony
[ACAN] Added horizontal flip. [Harmony]
[src/mess/drivers]supracan.c

src/mess/drivers/supracan.c
r6898r6899
2929static UINT16 supracan_m6502_reset;
3030static UINT8 *supracan_soundram;
3131static UINT16 *supracan_soundram_16;
32static UINT16 supracan_video_regs[256];
3332static emu_timer *supracan_video_timer;
3433static UINT16 *supracan_vram;
3534
35static UINT16 supracan_video_regs[256];
36
37#define ACAN_VID_LAYER_EN   0x024/2
38#define ACAN_VID_XFORM32A_H   0x184/2
39#define ACAN_VID_XFORM32A_L   0x186/2
40#define ACAN_VID_XFORM32B_H   0x188/2
41#define ACAN_VID_XFORM32B_L   0x18a/2
42#define ACAN_VID_XFORM16A   0x18c/2
43#define ACAN_VID_XFORM16B   0x192/2
44
3645static READ16_HANDLER( supracan_unk1_r );
3746static WRITE16_HANDLER( supracan_soundram_w );
3847static WRITE16_HANDLER( supracan_sound_w );
r6898r6899
7382
7483   bitmap_fill(bitmap, cliprect, 0);
7584
76   count = 0x4400/2;
77
7885#if 0
79   for (y=0;y<64;y++)
8086   {
81      for (x=0;x<32;x += 8)
87      count = 0x4400/2;
88
89      for (y=0;y<64;y++)
8290      {
83         static UINT16 dot_data;
91         for (x = 0; x < 64; x += 16)
92         {
93            static UINT16 dot_data;
8494
85         /* FIXME: likely to be clutted */
86         dot_data = supracan_vram[count] ^ 0xffff;
95            dot_data = supracan_vram[count] ^ 0xffff;
8796
88         *BITMAP_ADDR16(bitmap, y, 128+x+0) = ((dot_data >> 14) & 0x0003) + 0x20;
89         *BITMAP_ADDR16(bitmap, y, 128+x+1) = ((dot_data >> 12) & 0x0003) + 0x20;
90         *BITMAP_ADDR16(bitmap, y, 128+x+2) = ((dot_data >> 10) & 0x0003) + 0x20;
91         *BITMAP_ADDR16(bitmap, y, 128+x+3) = ((dot_data >>  8) & 0x0003) + 0x20;
92         *BITMAP_ADDR16(bitmap, y, 128+x+4) = ((dot_data >>  6) & 0x0003) + 0x20;
93         *BITMAP_ADDR16(bitmap, y, 128+x+5) = ((dot_data >>  4) & 0x0003) + 0x20;
94         *BITMAP_ADDR16(bitmap, y, 128+x+6) = ((dot_data >>  2) & 0x0003) + 0x20;
95         *BITMAP_ADDR16(bitmap, y, 128+x+7) = ((dot_data >>  0) & 0x0003) + 0x20;
96         count++;
97            *BITMAP_ADDR16(bitmap, y, 128+x+ 0) = ((dot_data >> 15) & 0x0001) + 0x20;
98            *BITMAP_ADDR16(bitmap, y, 128+x+ 1) = ((dot_data >> 14) & 0x0001) + 0x20;
99            *BITMAP_ADDR16(bitmap, y, 128+x+ 2) = ((dot_data >> 13) & 0x0001) + 0x20;
100            *BITMAP_ADDR16(bitmap, y, 128+x+ 3) = ((dot_data >> 12) & 0x0001) + 0x20;
101            *BITMAP_ADDR16(bitmap, y, 128+x+ 4) = ((dot_data >> 11) & 0x0001) + 0x20;
102            *BITMAP_ADDR16(bitmap, y, 128+x+ 5) = ((dot_data >> 10) & 0x0001) + 0x20;
103            *BITMAP_ADDR16(bitmap, y, 128+x+ 6) = ((dot_data >>  9) & 0x0001) + 0x20;
104            *BITMAP_ADDR16(bitmap, y, 128+x+ 7) = ((dot_data >>  8) & 0x0001) + 0x20;
105            *BITMAP_ADDR16(bitmap, y, 128+x+ 8) = ((dot_data >>  7) & 0x0001) + 0x20;
106            *BITMAP_ADDR16(bitmap, y, 128+x+ 9) = ((dot_data >>  6) & 0x0001) + 0x20;
107            *BITMAP_ADDR16(bitmap, y, 128+x+10) = ((dot_data >>  5) & 0x0001) + 0x20;
108            *BITMAP_ADDR16(bitmap, y, 128+x+11) = ((dot_data >>  4) & 0x0001) + 0x20;
109            *BITMAP_ADDR16(bitmap, y, 128+x+12) = ((dot_data >>  3) & 0x0001) + 0x20;
110            *BITMAP_ADDR16(bitmap, y, 128+x+13) = ((dot_data >>  2) & 0x0001) + 0x20;
111            *BITMAP_ADDR16(bitmap, y, 128+x+14) = ((dot_data >>  1) & 0x0001) + 0x20;
112            *BITMAP_ADDR16(bitmap, y, 128+x+15) = ((dot_data >>  0) & 0x0001) + 0x20;
113            count++;
114         }
97115      }
98116   }
117#endif
99118
119#if 0
100120   count = 0x4200/2;
101121
102122   for (y=0;y<16;y++)
r6898r6899
134154   }
135155
136156   {
137      int x,y,xtile,ytile,xsize,ysize,bank,spr_offs,col,i,spr_base;
157      int x, y;
158      int xtile, ytile;
159      int xsize, ysize;
160      int bank;
161      int spr_offs;
162      int col;
163      int i;
164      int spr_base;
165      int hflip;
138166      //UINT8 *sprdata = (UINT8*)(&supracan_vram[0x1d000/2]);
139167
140168      spr_base = 0x1d000;
r6898r6899
145173         y = supracan_vram[i+0] & 0x0ff;
146174         spr_offs = supracan_vram[i+3] << 2;
147175         bank = (supracan_vram[i+1] & 0xf000) >> 12;
176         hflip = (supracan_vram[i+1] & 0x0800) ? 1 : 0;
148177
149178         if(supracan_vram[i+3] != 0)
150179         {
r6898r6899
189218                  ysize = 3;
190219                  break;
191220               case 0x442a:
192                  xsize = 2;
221                  xsize = 2 * (supracan_vram[i+1] & 7);
193222                  ysize = 3;
194223                  break;
195224               case 0x442c:
r6898r6899
226255                  ysize = 1;
227256                  break;
228257            }
258
229259            for(ytile = 0; ytile < ysize; ytile++)
230260            {
231               for(xtile = 0; xtile < xsize; xtile++)
261               if(hflip)
232262               {
233                  UINT16 data = supracan_vram[spr_offs/2+ytile*xsize+xtile];
234                  int tile = (bank * 0x200) + (data & 0x03ff);
235                  int xflip = data & 0x0800;
236                  int yflip = data & 0x0400;
237                  col = (data & 0xf000) >> 12;
238                  drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],tile,col,xflip,yflip,x+xtile*8,y+ytile*8,0);
263                  for(xtile = (xsize - 1); xtile >= 0; xtile--)
264                  {
265                     UINT16 data = supracan_vram[spr_offs/2+ytile*xsize+xtile];
266                     int tile = (bank * 0x200) + (data & 0x03ff);
267                     int xflip = (data & 0x0800) ? 0 : 1;
268                     int yflip = (data & 0x0400) ? 1 : 0;
269                     col = (data & 0xf000) >> 12;
270                     drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],tile,col,xflip,yflip,x+((xsize - 1) - xtile)*8,y+ytile*8,0);
271                  }
239272               }
273               else
274               {
275                  for(xtile = 0; xtile < xsize; xtile++)
276                  {
277                     UINT16 data = supracan_vram[spr_offs/2+ytile*xsize+xtile];
278                     int tile = (bank * 0x200) + (data & 0x03ff);
279                     int xflip = (data & 0x0800) ? 1 : 0;
280                     int yflip = (data & 0x0400) ? 1 : 0;
281                     col = (data & 0xf000) >> 12;
282                     drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],tile,col,xflip,yflip,x+xtile*8,y+ytile*8,0);
283                  }
284               }
240285            }
241286         }
242287      }
r6898r6899
545590            // ...
546591         }
547592         break;
593      // Affine transforms of some sort?
594      case ACAN_VID_XFORM32A_H:
595      case ACAN_VID_XFORM32A_L:
596      case ACAN_VID_XFORM32B_H:
597      case ACAN_VID_XFORM32B_L:
598      case ACAN_VID_XFORM16A:
599      case ACAN_VID_XFORM16B:
600         //printf( "%1.4f %1.4f %1.4f %1.4f\n", (INT32)((supracan_video_regs[ACAN_VID_XFORM32A_H] << 16) | supracan_video_regs[ACAN_VID_XFORM32A_L]) / 65536.0f, (INT32)((supracan_video_regs[ACAN_VID_XFORM32B_H] << 16) | supracan_video_regs[ACAN_VID_XFORM32B_L]) / 65536.0f, supracan_video_regs[ACAN_VID_XFORM16A] / 256.0f, supracan_video_regs[ACAN_VID_XFORM16B] / 256.0f);
601         break;
548602      default:
549603         verboselog(space->machine, 0, "supracan_video_w: Unknown register: %08x = %04x & %04x\n", 0xf00000 + (offset << 1), data, mem_mask);
550604         break;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team