Previous 15994 Revisions Next

r9151 Friday 17th September, 2010 at 05:22:48 UTC by Barry Rodewald
[FMTOWNS] Implemented x3 and x4 horizontal zoom also, fixes background in Shadow of the Beast.
[src/mess/video]fmtowns.c

src/mess/video/fmtowns.c
r9150r9151
996996      }
997997   }
998998
999   if(hzoom == 3)
1000   {  // x3 horizontal zoom
1001      for(x=rect->min_x;x<rect->max_x;x+=3)
1002      {
1003         if(state->video.towns_video_reg[0] & 0x10)
1004            off &= 0x3ffff;  // 2 layers
1005         else
1006            off &= 0x7ffff;  // 1 layer
1007         colour = (state->towns_gfxvram[off+(layer*0x40000)+1] << 8) | state->towns_gfxvram[off+(layer*0x40000)];
1008         if(colour < 0x8000)
1009         {
1010            *BITMAP_ADDR32(bitmap,scanline,x) =
1011               ((colour & 0x001f) << 3)
1012               | ((colour & 0x7c00) << 1)
1013               | ((colour & 0x03e0) << 14);
1014            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1015               ((colour & 0x001f) << 3)
1016               | ((colour & 0x7c00) << 1)
1017               | ((colour & 0x03e0) << 14);
1018            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1019               ((colour & 0x001f) << 3)
1020               | ((colour & 0x7c00) << 1)
1021               | ((colour & 0x03e0) << 14);
1022         }
1023         off+=2;
1024      }
1025   }
1026
1027   if(hzoom == 4)
1028   {  // x4 horizontal zoom
1029      for(x=rect->min_x;x<rect->max_x;x+=4)
1030      {
1031         if(state->video.towns_video_reg[0] & 0x10)
1032            off &= 0x3ffff;  // 2 layers
1033         else
1034            off &= 0x7ffff;  // 1 layer
1035         colour = (state->towns_gfxvram[off+(layer*0x40000)+1] << 8) | state->towns_gfxvram[off+(layer*0x40000)];
1036         if(colour < 0x8000)
1037         {
1038            *BITMAP_ADDR32(bitmap,scanline,x) =
1039               ((colour & 0x001f) << 3)
1040               | ((colour & 0x7c00) << 1)
1041               | ((colour & 0x03e0) << 14);
1042            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1043               ((colour & 0x001f) << 3)
1044               | ((colour & 0x7c00) << 1)
1045               | ((colour & 0x03e0) << 14);
1046            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1047               ((colour & 0x001f) << 3)
1048               | ((colour & 0x7c00) << 1)
1049               | ((colour & 0x03e0) << 14);
1050            *BITMAP_ADDR32(bitmap,scanline,x+3) =
1051               ((colour & 0x001f) << 3)
1052               | ((colour & 0x7c00) << 1)
1053               | ((colour & 0x03e0) << 14);
1054         }
1055         off+=2;
1056      }
1057   }
1058
9991059   if(hzoom == 5)
10001060   {  // x5 horizontal zoom
10011061      for(x=rect->min_x;x<rect->max_x;x+=5)
r9150r9151
10311091         off+=2;
10321092      }
10331093   }
1034
10351094}
10361095
10371096void towns_crtc_draw_scan_layer_256(running_machine* machine, bitmap_t* bitmap,const rectangle* rect,int layer,int line,int scanline)
r9150r9151
11161175      }
11171176   }
11181177
1178   if(hzoom == 3)
1179   {  // x3 horizontal zoom
1180      for(x=rect->min_x;x<rect->max_x;x+=3)
1181      {
1182         colour = state->towns_gfxvram[off+(layer*0x40000)+1];
1183         if(colour != 0)
1184         {
1185            *BITMAP_ADDR32(bitmap,scanline,x) =
1186               (state->video.towns_palette_r[colour] << 16)
1187               | (state->video.towns_palette_g[colour] << 8)
1188               | (state->video.towns_palette_b[colour]);
1189            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1190               (state->video.towns_palette_r[colour] << 16)
1191               | (state->video.towns_palette_g[colour] << 8)
1192               | (state->video.towns_palette_b[colour]);
1193            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1194               (state->video.towns_palette_r[colour] << 16)
1195               | (state->video.towns_palette_g[colour] << 8)
1196               | (state->video.towns_palette_b[colour]);
1197         }
1198         off++;
1199      }
1200   }
1201
1202   if(hzoom == 4)
1203   {  // x4 horizontal zoom
1204      for(x=rect->min_x;x<rect->max_x;x+=4)
1205      {
1206         colour = state->towns_gfxvram[off+(layer*0x40000)+1];
1207         if(colour != 0)
1208         {
1209            *BITMAP_ADDR32(bitmap,scanline,x) =
1210               (state->video.towns_palette_r[colour] << 16)
1211               | (state->video.towns_palette_g[colour] << 8)
1212               | (state->video.towns_palette_b[colour]);
1213            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1214               (state->video.towns_palette_r[colour] << 16)
1215               | (state->video.towns_palette_g[colour] << 8)
1216               | (state->video.towns_palette_b[colour]);
1217            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1218               (state->video.towns_palette_r[colour] << 16)
1219               | (state->video.towns_palette_g[colour] << 8)
1220               | (state->video.towns_palette_b[colour]);
1221            *BITMAP_ADDR32(bitmap,scanline,x+3) =
1222               (state->video.towns_palette_r[colour] << 16)
1223               | (state->video.towns_palette_g[colour] << 8)
1224               | (state->video.towns_palette_b[colour]);
1225         }
1226         off++;
1227      }
1228   }
1229
11191230   if(hzoom == 5)
11201231   {  // x5 horizontal zoom
11211232      for(x=rect->min_x;x<rect->max_x;x+=5)
r9150r9151
12551366      }
12561367   }
12571368
1369   if(hzoom == 3)
1370   {  // x3 horizontal zoom
1371      for(x=rect->min_x;x<rect->max_x;x+=6)
1372      {
1373         if(state->video.towns_video_reg[0] & 0x10)
1374            off &= 0x3ffff;  // 2 layers
1375         else
1376            off &= 0x7ffff;  // 1 layer
1377         colour = state->towns_gfxvram[off+(layer*0x40000)] >> 4;
1378         if(colour != 0)
1379         {
1380            *BITMAP_ADDR32(bitmap,scanline,x+3) =
1381               (state->video.towns_palette_r[colour] << 16)
1382               | (state->video.towns_palette_g[colour] << 8)
1383               | (state->video.towns_palette_b[colour]);
1384            *BITMAP_ADDR32(bitmap,scanline,x+4) =
1385               (state->video.towns_palette_r[colour] << 16)
1386               | (state->video.towns_palette_g[colour] << 8)
1387               | (state->video.towns_palette_b[colour]);
1388            *BITMAP_ADDR32(bitmap,scanline,x+5) =
1389               (state->video.towns_palette_r[colour] << 16)
1390               | (state->video.towns_palette_g[colour] << 8)
1391               | (state->video.towns_palette_b[colour]);
1392         }
1393         colour = state->towns_gfxvram[off+(layer*0x40000)] & 0x0f;
1394         if(colour != 0)
1395         {
1396            *BITMAP_ADDR32(bitmap,scanline,x) =
1397               (state->video.towns_palette_r[colour] << 16)
1398               | (state->video.towns_palette_g[colour] << 8)
1399               | (state->video.towns_palette_b[colour]);
1400            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1401               (state->video.towns_palette_r[colour] << 16)
1402               | (state->video.towns_palette_g[colour] << 8)
1403               | (state->video.towns_palette_b[colour]);
1404            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1405               (state->video.towns_palette_r[colour] << 16)
1406               | (state->video.towns_palette_g[colour] << 8)
1407               | (state->video.towns_palette_b[colour]);
1408         }
1409         off++;
1410      }
1411   }
1412
1413   if(hzoom == 4)
1414   {  // x4 horizontal zoom
1415      for(x=rect->min_x;x<rect->max_x;x+=8)
1416      {
1417         if(state->video.towns_video_reg[0] & 0x10)
1418            off &= 0x3ffff;  // 2 layers
1419         else
1420            off &= 0x7ffff;  // 1 layer
1421         colour = state->towns_gfxvram[off+(layer*0x40000)] >> 4;
1422         if(colour != 0)
1423         {
1424            *BITMAP_ADDR32(bitmap,scanline,x+4) =
1425               (state->video.towns_palette_r[colour] << 16)
1426               | (state->video.towns_palette_g[colour] << 8)
1427               | (state->video.towns_palette_b[colour]);
1428            *BITMAP_ADDR32(bitmap,scanline,x+5) =
1429               (state->video.towns_palette_r[colour] << 16)
1430               | (state->video.towns_palette_g[colour] << 8)
1431               | (state->video.towns_palette_b[colour]);
1432            *BITMAP_ADDR32(bitmap,scanline,x+6) =
1433               (state->video.towns_palette_r[colour] << 16)
1434               | (state->video.towns_palette_g[colour] << 8)
1435               | (state->video.towns_palette_b[colour]);
1436            *BITMAP_ADDR32(bitmap,scanline,x+7) =
1437               (state->video.towns_palette_r[colour] << 16)
1438               | (state->video.towns_palette_g[colour] << 8)
1439               | (state->video.towns_palette_b[colour]);
1440         }
1441         colour = state->towns_gfxvram[off+(layer*0x40000)] & 0x0f;
1442         if(colour != 0)
1443         {
1444            *BITMAP_ADDR32(bitmap,scanline,x) =
1445               (state->video.towns_palette_r[colour] << 16)
1446               | (state->video.towns_palette_g[colour] << 8)
1447               | (state->video.towns_palette_b[colour]);
1448            *BITMAP_ADDR32(bitmap,scanline,x+1) =
1449               (state->video.towns_palette_r[colour] << 16)
1450               | (state->video.towns_palette_g[colour] << 8)
1451               | (state->video.towns_palette_b[colour]);
1452            *BITMAP_ADDR32(bitmap,scanline,x+2) =
1453               (state->video.towns_palette_r[colour] << 16)
1454               | (state->video.towns_palette_g[colour] << 8)
1455               | (state->video.towns_palette_b[colour]);
1456            *BITMAP_ADDR32(bitmap,scanline,x+3) =
1457               (state->video.towns_palette_r[colour] << 16)
1458               | (state->video.towns_palette_g[colour] << 8)
1459               | (state->video.towns_palette_b[colour]);
1460         }
1461         off++;
1462      }
1463   }
1464
12581465   if(hzoom == 5)
12591466   {  // x5 horizontal zoom
12601467      for(x=rect->min_x;x<rect->max_x;x+=10)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team