Previous 15994 Revisions Next

r9462 Wednesday 27th October, 2010 at 23:48:02 UTC by Angelo Salese
[PC-88VA]: Written basic sprite drawing routines
[src/mess/drivers]pc88va.c

src/mess/drivers/pc88va.c
r9461r9462
4040
4141}
4242
43static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
44{
45   UINT16 *tvram = (UINT16 *)memory_region(machine, "tvram");
46   int offs,i;
47
48   offs = tsp.spr_offset;
49   for(i=0;i<(0x100);i+=(8))
50   {
51      int xp,yp,sw,md,xsize,ysize,spda,fg_col,bc;
52      int x_i,y_i;
53
54      ysize = (tvram[(offs + i + 0) / 2] & 0xfc00) >> 10;
55      sw = (tvram[(offs + i + 0) / 2] & 0x200) >> 9;
56      yp = (tvram[(offs + i + 0) / 2] & 0x1ff);
57      xsize = (tvram[(offs + i + 2) / 2] & 0xf800) >> 11;
58      md = (tvram[(offs + i + 2) / 2] & 0x400) >> 10;
59      xp = (tvram[(offs + i + 2) / 2] & 0x3ff);
60      spda = (tvram[(offs + i + 4) / 2] & 0xffff);
61      fg_col = (tvram[(offs + i + 6) / 2] & 0xf0) >> 4;
62      bc = (tvram[(offs + i + 6) / 2] & 0x08) >> 3;
63
64      if(!sw)
65         continue;
66
67      if(yp & 0x100)
68      {
69         yp &= 0xff;
70         yp = 0x100 - yp;
71      }
72
73      if(0) // uhm, makes more sense without the sign?
74      if(xp & 0x200)
75      {
76         xp &= 0x1ff;
77         xp = 0x200 - xp;
78      }
79
80      if(md) // 1bpp mode
81      {
82         xsize = (xsize + 1) * 32;
83         ysize = (ysize + 1) * 4;
84
85         for(y_i=0;y_i<ysize;y_i++)
86         {
87            for(x_i=0;x_i<xsize;x_i++)
88            {
89               //UINT8 pen;
90
91               // TODO: hook up drawing routines
92
93               *BITMAP_ADDR32(bitmap, yp+y_i, xp+x_i) = machine->pens[fg_col];
94            }
95         }
96      }
97      else // 4bpp mode
98      {
99         xsize = (xsize + 1) * 8;
100         ysize = (ysize + 1) * 4;
101         // ...
102      }
103   }
104}
105
43106static VIDEO_UPDATE( pc88va )
44107{
108   bitmap_fill(bitmap, cliprect, 0);
109
110   if(tsp.spr_on)
111      draw_sprites(screen->machine,bitmap,cliprect);
112
45113   return 0;
46114}
47115
r9461r9462
899967
900968   MDRV_SCREEN_ADD("screen", RASTER)
901969   MDRV_SCREEN_REFRESH_RATE(60)
902   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
970   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
903971   MDRV_SCREEN_SIZE(640, 480)
904972   MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
905973   MDRV_PALETTE_LENGTH(32)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team