Previous 199869 Revisions Next

r31951 Saturday 6th September, 2014 at 13:15:18 UTC by Fabio Priuli
(MESS) gtia: reduced a bit the #define obfuscation. nw.
[src/mame/video]gtia.c

trunk/src/mame/video/gtia.c
r31950r31951
818818/*     */   0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000
819819};
820820
821#define RENDER_PLAYER(player,color)             \
822static void render_##player##_w1(UINT8 *dst)    \
823{                                               \
824   if( gtia.h.graf##player & 0x80 )            \
825      dst[0] |= color;                        \
826   if( gtia.h.graf##player & 0x40 )            \
827      dst[1] |= color;                        \
828   if( gtia.h.graf##player & 0x20 )            \
829      dst[2] |= color;                        \
830   if( gtia.h.graf##player & 0x10 )            \
831      dst[3] |= color;                        \
832   if( gtia.h.graf##player & 0x08 )            \
833      dst[4] |= color;                        \
834   if( gtia.h.graf##player & 0x04 )            \
835      dst[5] |= color;                        \
836   if( gtia.h.graf##player & 0x02 )            \
837      dst[6] |= color;                        \
838   if( gtia.h.graf##player & 0x01 )            \
839      dst[7] |= color;                        \
840}                                               \
841static void render_##player##_w2(UINT8 *dst)    \
842{                                               \
843   if( gtia.h.graf##player & 0x80 )            \
844   {                                           \
845      dst[ 0] |= color;                       \
846      dst[ 1] |= color;                       \
847   }                                           \
848   if( gtia.h.graf##player & 0x40 )            \
849   {                                           \
850      dst[ 2] |= color;                       \
851      dst[ 3] |= color;                       \
852   }                                           \
853   if( gtia.h.graf##player & 0x20 )            \
854   {                                           \
855      dst[ 4] |= color;                       \
856      dst[ 5] |= color;                       \
857   }                                           \
858   if( gtia.h.graf##player & 0x10 )            \
859   {                                           \
860      dst[ 6] |= color;                       \
861      dst[ 7] |= color;                       \
862   }                                           \
863   if( gtia.h.graf##player & 0x08 )            \
864   {                                           \
865      dst[ 8] |= color;                       \
866      dst[ 9] |= color;                       \
867   }                                           \
868   if( gtia.h.graf##player & 0x04 )            \
869   {                                           \
870      dst[10] |= color;                       \
871      dst[11] |= color;                       \
872   }                                           \
873   if( gtia.h.graf##player & 0x02 )            \
874   {                                           \
875      dst[12] |= color;                       \
876      dst[13] |= color;                       \
877   }                                           \
878   if( gtia.h.graf##player & 0x01 )            \
879   {                                           \
880      dst[14] |= color;                       \
881      dst[15] |= color;                       \
882   }                                           \
883}                                               \
884static void render_##player##_w4(UINT8 *dst)    \
885{                                               \
886   if( gtia.h.graf##player & 0x80 )            \
887   {                                           \
888      dst[ 0] |= color;                       \
889      dst[ 1] |= color;                       \
890      dst[ 2] |= color;                       \
891      dst[ 3] |= color;                       \
892   }                                           \
893   if( gtia.h.graf##player & 0x40 )            \
894   {                                           \
895      dst[ 4] |= color;                       \
896      dst[ 5] |= color;                       \
897      dst[ 6] |= color;                       \
898      dst[ 7] |= color;                       \
899   }                                           \
900   if( gtia.h.graf##player & 0x20 )            \
901   {                                           \
902      dst[ 8] |= color;                       \
903      dst[ 9] |= color;                       \
904      dst[10] |= color;                       \
905      dst[11] |= color;                       \
906   }                                           \
907   if( gtia.h.graf##player & 0x10 )            \
908   {                                           \
909      dst[12] |= color;                       \
910      dst[13] |= color;                       \
911      dst[14] |= color;                       \
912      dst[15] |= color;                       \
913   }                                           \
914   if( gtia.h.graf##player & 0x08 )            \
915   {                                           \
916      dst[16] |= color;                       \
917      dst[17] |= color;                       \
918      dst[18] |= color;                       \
919      dst[19] |= color;                       \
920   }                                           \
921   if( gtia.h.graf##player & 0x04 )            \
922   {                                           \
923      dst[20] |= color;                       \
924      dst[21] |= color;                       \
925      dst[22] |= color;                       \
926      dst[23] |= color;                       \
927   }                                           \
928   if( gtia.h.graf##player & 0x02 )            \
929   {                                           \
930      dst[24] |= color;                       \
931      dst[25] |= color;                       \
932      dst[26] |= color;                       \
933      dst[27] |= color;                       \
934   }                                           \
935   if( gtia.h.graf##player & 0x01 )            \
936   {                                           \
937      dst[28] |= color;                       \
938      dst[29] |= color;                       \
939      dst[30] |= color;                       \
940      dst[31] |= color;                       \
941   }                                           \
942}                                               \
943static void (*const render_##player[4])(UINT8 *dst)={ \
944   render_##player##_w1,                       \
945   render_##player##_w2,                       \
946   render_##player##_w2,                       \
947   render_##player##_w4                        \
821static inline void player_render(UINT8 gfx, int size, UINT8 color, UINT8 *dst)
822{
823   // size is the number of bits in *dst to be filled: 1, 2 or 4
824   if (size == 3)
825      size = 2;
826   for (int i = 0; i < 8; i++)
827      if (BIT(gfx, 7 - i))
828         for (int s = 0; s < size; s++)
829            dst[i * size + s] |= color;
948830}
949831
950#define RENDER_MISSILE(missile,color)           \
951static void render_##missile##_w1(UINT8 *dst)   \
952{                                               \
953   if( gtia.h.graf##missile & 0x80 )           \
954      dst[0] |= color;                        \
955   if( gtia.h.graf##missile & 0x40 )           \
956      dst[1] |= color;                        \
957}                                               \
958static void render_##missile##_w2(UINT8 *dst)   \
959{                                               \
960   if( gtia.h.graf##missile & 0x80 )           \
961   {                                           \
962      dst[ 0] |= color;                       \
963      dst[ 1] |= color;                       \
964   }                                           \
965   if( gtia.h.graf##missile & 0x40 )           \
966   {                                           \
967      dst[ 2] |= color;                       \
968      dst[ 3] |= color;                       \
969   }                                           \
970}                                               \
971static void render_##missile##_w4(UINT8 *dst)   \
972{                                               \
973   if( gtia.h.graf##missile & 0x80 )           \
974   {                                           \
975      dst[ 0] |= color;                       \
976      dst[ 1] |= color;                       \
977      dst[ 2] |= color;                       \
978      dst[ 3] |= color;                       \
979   }                                           \
980   if( gtia.h.graf##missile & 0x40 )           \
981   {                                           \
982      dst[ 4] |= color;                       \
983      dst[ 5] |= color;                       \
984      dst[ 6] |= color;                       \
985      dst[ 7] |= color;                       \
986   }                                           \
987}                                               \
988static void (*const render_##missile[4])(UINT8 *dst) = { \
989   render_##missile##_w1,                      \
990   render_##missile##_w2,                      \
991   render_##missile##_w2,                      \
992   render_##missile##_w4                       \
832static inline void missile_render(UINT8 gfx, int size, UINT8 color, UINT8 *dst)
833{
834   // size is the number of bits in *dst to be filled: 1, 2 or 4
835   if (size == 3)
836      size = 2;
837   for (int i = 0; i < 2; i++)
838      if (BIT(gfx, 7 - i))
839         for (int s = 0; s < size; s++)
840            dst[i * size + s] |= color;
993841}
994842
995RENDER_PLAYER(p0,P0);
996RENDER_PLAYER(p1,P1);
997RENDER_PLAYER(p2,P2);
998RENDER_PLAYER(p3,P3);
999RENDER_MISSILE(m0,M0);
1000RENDER_MISSILE(m1,M1);
1001RENDER_MISSILE(m2,M2);
1002RENDER_MISSILE(m3,M3);
1003843
1004
1005844void gtia_render(VIDEO *video)
1006845{
1007846   int x;
r31950r31951
1011850   if( antic.scanline < VBL_END || antic.scanline >= 256 )
1012851      return;
1013852
1014   if( gtia.h.grafp0 )
1015      (*render_p0[gtia.w.sizep0])(&antic.pmbits[gtia.w.hposp0]);
853   if (gtia.h.grafp0)
854      player_render(gtia.h.grafp0, gtia.w.sizep0 + 1, P0, &antic.pmbits[gtia.w.hposp0]);
855   if (gtia.h.grafp1)
856      player_render(gtia.h.grafp1, gtia.w.sizep1 + 1, P1, &antic.pmbits[gtia.w.hposp1]);
857   if (gtia.h.grafp2)
858      player_render(gtia.h.grafp2, gtia.w.sizep2 + 1, P2, &antic.pmbits[gtia.w.hposp2]);
859   if (gtia.h.grafp3)
860      player_render(gtia.h.grafp3, gtia.w.sizep3 + 1, P3, &antic.pmbits[gtia.w.hposp3]);
861   
862   if (gtia.h.grafm0)
863      missile_render(gtia.h.grafm0, gtia.w.sizem + 1, M0, &antic.pmbits[gtia.w.hposm0]);
864   if (gtia.h.grafm1)
865      missile_render(gtia.h.grafm1, gtia.w.sizem + 1, M1, &antic.pmbits[gtia.w.hposm1]);
866   if (gtia.h.grafm2)
867      missile_render(gtia.h.grafm2, gtia.w.sizem + 1, M2, &antic.pmbits[gtia.w.hposm2]);
868   if (gtia.h.grafm3)
869      missile_render(gtia.h.grafm3, gtia.w.sizem + 1, M3, &antic.pmbits[gtia.w.hposm3]);
1016870
1017   if( gtia.h.grafp1 )
1018      (*render_p1[gtia.w.sizep1])(&antic.pmbits[gtia.w.hposp1]);
1019
1020   if( gtia.h.grafp2 )
1021      (*render_p2[gtia.w.sizep2])(&antic.pmbits[gtia.w.hposp2]);
1022
1023   if( gtia.h.grafp3 )
1024      (*render_p3[gtia.w.sizep3])(&antic.pmbits[gtia.w.hposp3]);
1025
1026   if( gtia.h.grafm0 )
1027      (*render_m0[gtia.w.sizem])(&antic.pmbits[gtia.w.hposm0]);
1028
1029   if( gtia.h.grafm1 )
1030      (*render_m1[gtia.w.sizem])(&antic.pmbits[gtia.w.hposm1]);
1031
1032   if( gtia.h.grafm2 )
1033      (*render_m2[gtia.w.sizem])(&antic.pmbits[gtia.w.hposm2]);
1034
1035   if( gtia.h.grafm3 )
1036      (*render_m3[gtia.w.sizem])(&antic.pmbits[gtia.w.hposm3]);
1037
1038871   src = antic.pmbits + PMOFFSET;
1039872   dst = antic.cclock + PMOFFSET - antic.hscrol_old;
1040873

Previous 199869 Revisions Next


© 1997-2024 The MAME Team