Previous 199869 Revisions Next

r32015 Tuesday 9th September, 2014 at 07:24:50 UTC by Fabio Priuli
bye bye ANTIC_RENDERER. nw.
[src/mame/video]antic.c

trunk/src/mame/video/antic.c
r32014r32015
1919
2020#define LOG(x)  do { if (VERBOSE) logerror x; } while (0)
2121
22// declaration of renderer functions
23#define ANTIC_RENDERER(name) void name(address_space &space, VIDEO *video)
24
25static ANTIC_RENDERER( antic_mode_0_xx );
26static ANTIC_RENDERER( antic_mode_2_32 );
27static ANTIC_RENDERER( antic_mode_2_40 );
28static ANTIC_RENDERER( antic_mode_2_48 );
29static ANTIC_RENDERER( antic_mode_3_32 );
30static ANTIC_RENDERER( antic_mode_3_40 );
31static ANTIC_RENDERER( antic_mode_3_48 );
32static ANTIC_RENDERER( antic_mode_4_32 );
33static ANTIC_RENDERER( antic_mode_4_40 );
34static ANTIC_RENDERER( antic_mode_4_48 );
35static ANTIC_RENDERER( antic_mode_5_32 );
36static ANTIC_RENDERER( antic_mode_5_40 );
37static ANTIC_RENDERER( antic_mode_5_48 );
38static ANTIC_RENDERER( antic_mode_6_32 );
39static ANTIC_RENDERER( antic_mode_6_40 );
40static ANTIC_RENDERER( antic_mode_6_48 );
41static ANTIC_RENDERER( antic_mode_7_32 );
42static ANTIC_RENDERER( antic_mode_7_40 );
43static ANTIC_RENDERER( antic_mode_7_48 );
44static ANTIC_RENDERER( antic_mode_8_32 );
45static ANTIC_RENDERER( antic_mode_8_40 );
46static ANTIC_RENDERER( antic_mode_8_48 );
47static ANTIC_RENDERER( antic_mode_9_32 );
48static ANTIC_RENDERER( antic_mode_9_40 );
49static ANTIC_RENDERER( antic_mode_9_48 );
50static ANTIC_RENDERER( antic_mode_a_32 );
51static ANTIC_RENDERER( antic_mode_a_40 );
52static ANTIC_RENDERER( antic_mode_a_48 );
53static ANTIC_RENDERER( antic_mode_b_32 );
54static ANTIC_RENDERER( antic_mode_b_40 );
55static ANTIC_RENDERER( antic_mode_b_48 );
56static ANTIC_RENDERER( antic_mode_c_32 );
57static ANTIC_RENDERER( antic_mode_c_40 );
58static ANTIC_RENDERER( antic_mode_c_48 );
59static ANTIC_RENDERER( antic_mode_d_32 );
60static ANTIC_RENDERER( antic_mode_d_40 );
61static ANTIC_RENDERER( antic_mode_d_48 );
62static ANTIC_RENDERER( antic_mode_e_32 );
63static ANTIC_RENDERER( antic_mode_e_40 );
64static ANTIC_RENDERER( antic_mode_e_48 );
65static ANTIC_RENDERER( antic_mode_f_32 );
66static ANTIC_RENDERER( antic_mode_f_40 );
67static ANTIC_RENDERER( antic_mode_f_48 );
68static ANTIC_RENDERER( gtia_mode_1_32 );
69static ANTIC_RENDERER( gtia_mode_1_40 );
70static ANTIC_RENDERER( gtia_mode_1_48 );
71static ANTIC_RENDERER( gtia_mode_2_32 );
72static ANTIC_RENDERER( gtia_mode_2_40 );
73static ANTIC_RENDERER( gtia_mode_2_48 );
74static ANTIC_RENDERER( gtia_mode_3_32 );
75static ANTIC_RENDERER( gtia_mode_3_40 );
76static ANTIC_RENDERER( gtia_mode_3_48 );
77
78
79
8022/*************************************************************************
8123 * The priority tables tell which playfield, player or missile colors
8224 * have precedence about the others, depending on the contents of the
r32014r32015
1031973   }
1032974}
1033975
1034
1035static const atari_renderer_func renderer[2][19][5] = {
1036   /*   no playfield    narrow          normal          wide         */
1037   {
1038      {antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx},
1039      {antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx},
1040      {antic_mode_0_xx,antic_mode_2_32,antic_mode_2_40,antic_mode_2_48},
1041      {antic_mode_0_xx,antic_mode_3_32,antic_mode_3_40,antic_mode_3_48},
1042      {antic_mode_0_xx,antic_mode_4_32,antic_mode_4_40,antic_mode_4_48},
1043      {antic_mode_0_xx,antic_mode_5_32,antic_mode_5_40,antic_mode_5_48},
1044      {antic_mode_0_xx,antic_mode_6_32,antic_mode_6_40,antic_mode_6_48},
1045      {antic_mode_0_xx,antic_mode_7_32,antic_mode_7_40,antic_mode_7_48},
1046      {antic_mode_0_xx,antic_mode_8_32,antic_mode_8_40,antic_mode_8_48},
1047      {antic_mode_0_xx,antic_mode_9_32,antic_mode_9_40,antic_mode_9_48},
1048      {antic_mode_0_xx,antic_mode_a_32,antic_mode_a_40,antic_mode_a_48},
1049      {antic_mode_0_xx,antic_mode_b_32,antic_mode_b_40,antic_mode_b_48},
1050      {antic_mode_0_xx,antic_mode_c_32,antic_mode_c_40,antic_mode_c_48},
1051      {antic_mode_0_xx,antic_mode_d_32,antic_mode_d_40,antic_mode_d_48},
1052      {antic_mode_0_xx,antic_mode_e_32,antic_mode_e_40,antic_mode_e_48},
1053      {antic_mode_0_xx,antic_mode_f_32,antic_mode_f_40,antic_mode_f_48},
1054      {antic_mode_0_xx, gtia_mode_1_32, gtia_mode_1_40, gtia_mode_1_48},
1055      {antic_mode_0_xx, gtia_mode_2_32, gtia_mode_2_40, gtia_mode_2_48},
1056      {antic_mode_0_xx, gtia_mode_3_32, gtia_mode_3_40, gtia_mode_3_48},
1057   },
1058   /*   with hscrol enabled playfield width is +32 color clocks      */
1059   /*   no playfield    narrow->normal  normal->wide    wide->wide   */
1060   {
1061      {antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx},
1062      {antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx,antic_mode_0_xx},
1063      {antic_mode_0_xx,antic_mode_2_40,antic_mode_2_48,antic_mode_2_48},
1064      {antic_mode_0_xx,antic_mode_3_40,antic_mode_3_48,antic_mode_3_48},
1065      {antic_mode_0_xx,antic_mode_4_40,antic_mode_4_48,antic_mode_4_48},
1066      {antic_mode_0_xx,antic_mode_5_40,antic_mode_5_48,antic_mode_5_48},
1067      {antic_mode_0_xx,antic_mode_6_40,antic_mode_6_48,antic_mode_6_48},
1068      {antic_mode_0_xx,antic_mode_7_40,antic_mode_7_48,antic_mode_7_48},
1069      {antic_mode_0_xx,antic_mode_8_40,antic_mode_8_48,antic_mode_8_48},
1070      {antic_mode_0_xx,antic_mode_9_40,antic_mode_9_48,antic_mode_9_48},
1071      {antic_mode_0_xx,antic_mode_a_40,antic_mode_a_48,antic_mode_a_48},
1072      {antic_mode_0_xx,antic_mode_b_40,antic_mode_b_48,antic_mode_b_48},
1073      {antic_mode_0_xx,antic_mode_c_40,antic_mode_c_48,antic_mode_c_48},
1074      {antic_mode_0_xx,antic_mode_d_40,antic_mode_d_48,antic_mode_d_48},
1075      {antic_mode_0_xx,antic_mode_e_40,antic_mode_e_48,antic_mode_e_48},
1076      {antic_mode_0_xx,antic_mode_f_40,antic_mode_f_48,antic_mode_f_48},
1077      {antic_mode_0_xx, gtia_mode_1_40, gtia_mode_1_48, gtia_mode_1_48},
1078      {antic_mode_0_xx, gtia_mode_2_40, gtia_mode_2_48, gtia_mode_2_48},
1079      {antic_mode_0_xx, gtia_mode_3_40, gtia_mode_3_48, gtia_mode_3_48},
1080   }
1081};
1082
1083void antic_render(address_space &space, int param1, int param2, int param3)
1084{
1085   VIDEO *video = antic.video[antic.scanline];
1086   (*renderer[param1][param2][param3])(space, video);
1087}
1088
1089976/*************  ANTIC mode 00: *********************************
1090977 * generate 1-8 empty scanlines
1091978 ***************************************************************/
1092static ANTIC_RENDERER( antic_mode_0_xx )
979static inline void antic_mode_0_xx(address_space &space, VIDEO *video)
1093980{
1094981   PREPARE();
1095982   memset(dst, PBK, HWIDTH*4);
r32014r32015
11151002   POST_TXT(bytes);
11161003}
11171004
1118static ANTIC_RENDERER( antic_mode_2_32 )
1119{
1120   antic_mode_2(space, video, 32, 8);
1121}
1122static ANTIC_RENDERER( antic_mode_2_40 )
1123{
1124   antic_mode_2(space, video, 40, 4);
1125}
1126static ANTIC_RENDERER( antic_mode_2_48 )
1127{
1128   antic_mode_2(space, video, 48, 0);
1129}
1130
11311005/*************  ANTIC mode 03: *********************************
11321006 * character mode 8x10:2 (32/40/48 byte per line)
11331007 ***************************************************************/
r32014r32015
11421016   POST_TXT(bytes);
11431017}
11441018
1145static ANTIC_RENDERER( antic_mode_3_32 )
1146{
1147   antic_mode_3(space, video, 32, 8);
1148}
1149static ANTIC_RENDERER( antic_mode_3_40 )
1150{
1151   antic_mode_3(space, video, 40, 4);
1152}
1153static ANTIC_RENDERER( antic_mode_3_48 )
1154{
1155   antic_mode_3(space, video, 48, 0);
1156}
1157
11581019/*************  ANTIC mode 04: *********************************
11591020 * character mode 8x8:4 multi color (32/40/48 byte per line)
11601021 ***************************************************************/
r32014r32015
11691030   POST_TXT(bytes);
11701031}
11711032
1172static ANTIC_RENDERER( antic_mode_4_32 )
1173{
1174   antic_mode_4(space, video, 32, 8);
1175}
1176static ANTIC_RENDERER( antic_mode_4_40 )
1177{
1178   antic_mode_4(space, video, 40, 4);
1179}
1180static ANTIC_RENDERER( antic_mode_4_48 )
1181{
1182   antic_mode_4(space, video, 48, 0);
1183}
1184
11851033/*************  ANTIC mode 05: *********************************
11861034 * character mode 8x16:4 multi color (32/40/48 byte per line)
11871035 ***************************************************************/
r32014r32015
11961044   POST_TXT(bytes);
11971045}
11981046
1199static ANTIC_RENDERER( antic_mode_5_32 )
1200{
1201   antic_mode_5(space, video, 32, 8);
1202}
1203static ANTIC_RENDERER( antic_mode_5_40 )
1204{
1205   antic_mode_5(space, video, 40, 4);
1206}
1207static ANTIC_RENDERER( antic_mode_5_48 )
1208{
1209   antic_mode_5(space, video, 48, 0);
1210}
1211
12121047/*************  ANTIC mode 06: *********************************
12131048 * character mode 16x8:5 single color (16/20/24 byte per line)
12141049 ***************************************************************/
r32014r32015
12231058   POST_TXT(bytes);
12241059}
12251060
1226static ANTIC_RENDERER( antic_mode_6_32 )
1227{
1228   antic_mode_6(space, video, 16, 8);
1229}
1230static ANTIC_RENDERER( antic_mode_6_40 )
1231{
1232   antic_mode_6(space, video, 20, 4);
1233}
1234static ANTIC_RENDERER( antic_mode_6_48 )
1235{
1236   antic_mode_6(space, video, 24, 0);
1237}
1238
12391061/*************  ANTIC mode 07: *********************************
12401062 * character mode 16x16:5 single color (16/20/24 byte per line)
12411063 ***************************************************************/
r32014r32015
12501072   POST_TXT(bytes);
12511073}
12521074
1253static ANTIC_RENDERER( antic_mode_7_32 )
1254{
1255   antic_mode_7(space, video, 16, 8);
1256}
1257static ANTIC_RENDERER( antic_mode_7_40 )
1258{
1259   antic_mode_7(space, video, 20, 4);
1260}
1261static ANTIC_RENDERER( antic_mode_7_48 )
1262{
1263   antic_mode_7(space, video, 24, 0);
1264}
1265
12661075/*************  ANTIC mode 08: *********************************
12671076 * graphics mode 8x8:4 (8/10/12 byte per line)
12681077 ***************************************************************/
r32014r32015
12771086   POST_GFX(bytes);
12781087}
12791088
1280static ANTIC_RENDERER( antic_mode_8_32 )
1281{
1282   antic_mode_8(space, video, 8, 8);
1283}
1284static ANTIC_RENDERER( antic_mode_8_40 )
1285{
1286   antic_mode_8(space, video, 10, 4);
1287}
1288static ANTIC_RENDERER( antic_mode_8_48 )
1289{
1290   antic_mode_8(space, video, 12, 0);
1291}
1292
12931089/*************  ANTIC mode 09: *********************************
12941090 * graphics mode 4x4:2 (8/10/12 byte per line)
12951091 ***************************************************************/
r32014r32015
13041100   POST_GFX(bytes);
13051101}
13061102
1307static ANTIC_RENDERER( antic_mode_9_32 )
1308{
1309   antic_mode_9(space, video, 16, 8);
1310}
1311static ANTIC_RENDERER( antic_mode_9_40 )
1312{
1313   antic_mode_9(space, video, 20, 4);
1314}
1315static ANTIC_RENDERER( antic_mode_9_48 )
1316{
1317   antic_mode_9(space, video, 24, 0);
1318}
1319
13201103/*************  ANTIC mode 0A: *********************************
13211104 * graphics mode 4x4:4 (16/20/24 byte per line)
13221105 ***************************************************************/
r32014r32015
13311114   POST_GFX(bytes);
13321115}
13331116
1334static ANTIC_RENDERER( antic_mode_a_32 )
1335{
1336   antic_mode_a(space, video, 16, 8);
1337}
1338static ANTIC_RENDERER( antic_mode_a_40 )
1339{
1340   antic_mode_a(space, video, 20, 4);
1341}
1342static ANTIC_RENDERER( antic_mode_a_48 )
1343{
1344   antic_mode_a(space, video, 24, 0);
1345}
1346
13471117/*************  ANTIC mode 0B: *********************************
13481118 * graphics mode 2x2:2 (16/20/24 byte per line)
13491119 ***************************************************************/
r32014r32015
13581128   POST_GFX(bytes);
13591129}
13601130
1361static ANTIC_RENDERER( antic_mode_b_32 )
1362{
1363   antic_mode_b(space, video, 16, 8);
1364}
1365static ANTIC_RENDERER( antic_mode_b_40 )
1366{
1367   antic_mode_b(space, video, 20, 4);
1368}
1369static ANTIC_RENDERER( antic_mode_b_48 )
1370{
1371   antic_mode_b(space, video, 24, 0);
1372}
1373
13741131/*************  ANTIC mode 0C: *********************************
13751132 * graphics mode 2x1:2 (16/20/24 byte per line)
13761133 ***************************************************************/
r32014r32015
13851142   POST_GFX(bytes);
13861143}
13871144
1388static ANTIC_RENDERER( antic_mode_c_32 )
1389{
1390   antic_mode_c(space, video, 16, 8);
1391}
1392static ANTIC_RENDERER( antic_mode_c_40 )
1393{
1394   antic_mode_c(space, video, 20, 4);
1395}
1396static ANTIC_RENDERER( antic_mode_c_48 )
1397{
1398   antic_mode_c(space, video, 24, 0);
1399}
1400
14011145/*************  ANTIC mode 0D: *********************************
14021146 * graphics mode 2x2:4 (32/40/48 byte per line)
14031147 ***************************************************************/
r32014r32015
14121156   POST_GFX(bytes);
14131157}
14141158
1415static ANTIC_RENDERER( antic_mode_d_32 )
1416{
1417   antic_mode_d(space, video, 32, 8);
1418}
1419static ANTIC_RENDERER( antic_mode_d_40 )
1420{
1421   antic_mode_d(space, video, 40, 4);
1422}
1423static ANTIC_RENDERER( antic_mode_d_48 )
1424{
1425   antic_mode_d(space, video, 48, 0);
1426}
1427
14281159/*************  ANTIC mode 0E: *********************************
14291160 * graphics mode 2x1:4 (32/40/48 byte per line)
14301161 ***************************************************************/
r32014r32015
14391170   POST_GFX(bytes);
14401171}
14411172
1442static ANTIC_RENDERER( antic_mode_e_32 )
1443{
1444   antic_mode_e(space, video, 32, 8);
1445}
1446static ANTIC_RENDERER( antic_mode_e_40 )
1447{
1448   antic_mode_e(space, video, 40, 4);
1449}
1450static ANTIC_RENDERER( antic_mode_e_48 )
1451{
1452   antic_mode_e(space, video, 48, 0);
1453}
1454
14551173/*************  ANTIC mode 0F: *********************************
14561174 * graphics mode 1x1:2 (32/40/48 byte per line)
14571175 ***************************************************************/
r32014r32015
14661184   POST_GFX(bytes);
14671185}
14681186
1469static ANTIC_RENDERER( antic_mode_f_32 )
1470{
1471   antic_mode_f(space, video, 32, 8);
1472}
1473static ANTIC_RENDERER( antic_mode_f_40 )
1474{
1475   antic_mode_f(space, video, 40, 4);
1476}
1477static ANTIC_RENDERER( antic_mode_f_48 )
1478{
1479   antic_mode_f(space, video, 48, 0);
1480}
1481
14821187/*************  ANTIC mode 0F : GTIA mode 1 ********************
14831188 * graphics mode 8x1:16 (32/40/48 byte per line)
14841189 ***************************************************************/
r32014r32015
14931198   POST_GFX(bytes);
14941199}
14951200
1496static ANTIC_RENDERER( gtia_mode_1_32 )
1497{
1498   antic_mode_gtia1(space, video, 32, 8);
1499}
1500static ANTIC_RENDERER( gtia_mode_1_40 )
1501{
1502   antic_mode_gtia1(space, video, 40, 4);
1503}
1504static ANTIC_RENDERER( gtia_mode_1_48 )
1505{
1506   antic_mode_gtia1(space, video, 48, 0);
1507}
1508
15091201/*************  ANTIC mode 0F : GTIA mode 2 ********************
15101202 * graphics mode 8x1:16 (32/40/48 byte per line)
15111203 ***************************************************************/
r32014r32015
15201212   POST_GFX(bytes);
15211213}
15221214
1523static ANTIC_RENDERER( gtia_mode_2_32 )
1524{
1525   antic_mode_gtia2(space, video, 32, 8);
1526}
1527static ANTIC_RENDERER( gtia_mode_2_40 )
1528{
1529   antic_mode_gtia2(space, video, 40, 4);
1530}
1531static ANTIC_RENDERER( gtia_mode_2_48 )
1532{
1533   antic_mode_gtia2(space, video, 48, 0);
1534}
1535
15361215/*************  ANTIC mode 0F : GTIA mode 3 ********************
15371216 * graphics mode 8x1:16 (32/40/48 byte per line)
15381217 ***************************************************************/
r32014r32015
15471226   POST_GFX(bytes);
15481227}
15491228
1550static ANTIC_RENDERER( gtia_mode_3_32 )
1229
1230/*************  ANTIC render ********************/
1231
1232void antic_render(address_space &space, int param1, int param2, int param3)
15511233{
1552   antic_mode_gtia3(space, video, 32, 8);
1234   VIDEO *video = antic.video[antic.scanline];
1235   int add_bytes = 0, erase = 0;
1236   
1237   if (param3 == 0 || param2 <= 1)
1238   {
1239      antic_mode_0_xx(space, video);
1240      return;
1241   }
1242   
1243   if ((param3 == 1 || param3 == 2) && param1)
1244      param3++;
1245   
1246   switch (param3)
1247   {
1248      case 1:
1249         add_bytes = 32;
1250         erase = 8;
1251         break;
1252      case 2:
1253         add_bytes = 40;
1254         erase = 4;
1255         break;
1256      case 3:
1257         add_bytes = 48;
1258         erase = 0;
1259         break;
1260   }
1261   
1262   switch (param2)
1263   {
1264      case 0x02:
1265         antic_mode_2(space, video, add_bytes, erase);
1266         return;
1267      case 0x03:
1268         antic_mode_3(space, video, add_bytes, erase);
1269         return;
1270      case 0x04:
1271         antic_mode_4(space, video, add_bytes, erase);
1272         return;
1273      case 0x05:
1274         antic_mode_5(space, video, add_bytes, erase);
1275         return;
1276      case 0x06:
1277         antic_mode_6(space, video, add_bytes >> 1, erase);
1278         return;
1279      case 0x07:
1280         antic_mode_7(space, video, add_bytes >> 1, erase);
1281         return;
1282      case 0x08:
1283         antic_mode_8(space, video, add_bytes >> 2, erase);
1284         return;
1285      case 0x09:
1286         antic_mode_9(space, video, add_bytes >> 1, erase);
1287         return;
1288      case 0x0a:
1289         antic_mode_a(space, video, add_bytes >> 1, erase);
1290         return;
1291      case 0x0b:
1292         antic_mode_b(space, video, add_bytes >> 1, erase);
1293         return;
1294      case 0x0c:
1295         antic_mode_c(space, video, add_bytes >> 1, erase);
1296         return;
1297      case 0x0d:
1298         antic_mode_d(space, video, add_bytes, erase);
1299         return;
1300      case 0x0e:
1301         antic_mode_e(space, video, add_bytes, erase);
1302         return;
1303      case 0x0f:
1304         antic_mode_f(space, video, add_bytes, erase);
1305         return;
1306      case 0x10:
1307         antic_mode_gtia1(space, video, add_bytes, erase);
1308         return;
1309      case 0x11:
1310         antic_mode_gtia2(space, video, add_bytes, erase);
1311         return;
1312      case 0x12:
1313         antic_mode_gtia3(space, video, add_bytes, erase);
1314         return;
1315      default:
1316         return;
1317   }
15531318}
1554static ANTIC_RENDERER( gtia_mode_3_40 )
1555{
1556   antic_mode_gtia3(space, video, 40, 4);
1557}
1558static ANTIC_RENDERER( gtia_mode_3_48 )
1559{
1560   antic_mode_gtia3(space, video, 48, 0);
1561}
15621319
1320
1321
15631322/************************************************************************
15641323 * atari_vh_screenrefresh
15651324 * Refresh screen bitmap.

Previous 199869 Revisions Next


© 1997-2024 The MAME Team