home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Emulation / Atari800 / gtia_obsolete.c < prev    next >
C/C++ Source or Header  |  1997-08-07  |  6KB  |  288 lines

  1.  
  2.   if (PRIOR & 0xc0)
  3.     {
  4.       UBYTE *t_scrn_ptr1; /* Input Pointer */
  5.       UBYTE *t_scrn_ptr2; /* Output Pointer */
  6.       int xpos;
  7.       int nibble;
  8.  
  9.       t_scrn_ptr1 = scrn_ptr;
  10.       t_scrn_ptr2 = scrn_ptr;
  11.  
  12.       for (xpos=0;xpos<ATARI_WIDTH;xpos++)
  13.     {
  14.       UBYTE pf_pixel;
  15.       UBYTE colour;
  16.  
  17.       pf_pixel = *t_scrn_ptr1++;
  18. #ifdef DIRECT_VIDEO
  19.       pf_pixel = colour_to_pf[pf_pixel];
  20. #endif
  21.  
  22.       if ((xpos & 0x03) == 0x00)
  23.         nibble = 0;
  24.  
  25.       nibble <<= 1;
  26.  
  27.       if (pf_pixel == PF_COLPF1)
  28.         nibble += 1;
  29.  
  30.       if ((xpos & 0x03) == 0x03)
  31.         {
  32.           switch (PRIOR & 0xc0)
  33.         {
  34.         case 0x40 :
  35.           colour = colour_translation_table[(COLBK & 0xf0) | nibble];
  36.           break;
  37.         case 0x80 :
  38.           colour = colour_lookup[GTIA_XLate[nibble]];
  39.           break;
  40.         case 0xc0 :
  41.           if (nibble)
  42.             colour = colour_translation_table[(nibble << 4) | (COLBK & 0x0f)];
  43.           else
  44.             colour = colour_translation_table[(nibble << 4)];
  45.  
  46.           break;
  47.         }
  48.  
  49.           *t_scrn_ptr2++ = colour;
  50.           *t_scrn_ptr2++ = colour;
  51.           *t_scrn_ptr2++ = colour;
  52.           *t_scrn_ptr2++ = colour;
  53.         }
  54.     }
  55.  
  56.       scrn_ptr = t_scrn_ptr2;
  57.     }
  58. #ifndef DIRECT_VIDEO
  59.   else
  60.     {
  61.       UBYTE *t_scrn_ptr;
  62.       int xpos;
  63.  
  64.       t_scrn_ptr = scrn_ptr;
  65.  
  66.       for (xpos=0;xpos<ATARI_WIDTH;xpos++)
  67.     {
  68.       UBYTE colreg;
  69.       UBYTE colour;
  70.  
  71.       colreg = *t_scrn_ptr;
  72.       if (colreg==5 && colpf1_fiddled)
  73.         colour = (colour_lookup[5] & 0x0f) | (colour_lookup[6] & 0xf0);
  74.       else
  75.         colour = colour_lookup[colreg];
  76.       *t_scrn_ptr++ = colour;
  77.  
  78. /*
  79.       colreg = *t_scrn_ptr;
  80.       colour = colour_lookup[colreg];
  81.       *t_scrn_ptr++ = colour;
  82.  
  83.       colreg = *t_scrn_ptr;
  84.       colour = colour_lookup[colreg];
  85.       *t_scrn_ptr++ = colour;
  86.  
  87.       colreg = *t_scrn_ptr;
  88.       colour = colour_lookup[colreg];
  89.       *t_scrn_ptr++ = colour;
  90.  
  91.       colreg = *t_scrn_ptr;
  92.       colour = colour_lookup[colreg];
  93.       *t_scrn_ptr++ = colour;
  94.  
  95.       colreg = *t_scrn_ptr;
  96.       colour = colour_lookup[colreg];
  97.       *t_scrn_ptr++ = colour;
  98.  
  99.       colreg = *t_scrn_ptr;
  100.       colour = colour_lookup[colreg];
  101.       *t_scrn_ptr++ = colour;
  102.  
  103.       colreg = *t_scrn_ptr;
  104.       colour = colour_lookup[colreg];
  105.       *t_scrn_ptr++ = colour;
  106. */
  107.     }
  108.  
  109.       scrn_ptr = t_scrn_ptr;
  110.     }
  111. #else
  112.   else
  113.     {
  114.       scrn_ptr += ATARI_WIDTH;
  115.     }
  116. #endif
  117.  
  118.  
  119. /* player  = player # to display or 0xff for none
  120.    missile = missle # to display or 0xff for none
  121.    pixel   = screen register to display at this position
  122. */
  123. UBYTE WhichColourReg (int pf_pixel, int player, int missile)
  124. {
  125.   UBYTE colreg;
  126.  
  127.   if (colpf1_fiddled && pf_pixel==5 && ((PRIOR & 0xC0)==0))
  128.     return pf_pixel;
  129.   /* That's actually not quite correct, we should display the hue of the
  130.      colPF1 with the colour of the player, but so what... */
  131.  
  132.   switch (PRIOR & 0x1f)
  133.     {
  134.     case 0x01 : /* RIVER RAID */
  135.       if (missile < player)
  136.     colreg = missile;
  137.       else
  138.     colreg = player;
  139.       break;
  140.     case 0x02 : /* MOUNTAIN KING */
  141.       if (player < 2)
  142.     {
  143.       colreg = player;
  144.     }
  145.       else if (pf_pixel < 7)
  146.     {
  147.       colreg = pf_pixel;
  148.     }
  149.       else if (pf_pixel == 7)
  150.     {
  151.       if (missile != 0xff)
  152.         colreg = missile;
  153.       else
  154.         colreg = pf_pixel;
  155.     }
  156.       else if (player < 4)
  157.     {
  158.       colreg = player;
  159.     }
  160.       else
  161.     {
  162.       colreg = pf_pixel;
  163.     }
  164.       break;
  165.     case 0x00 :  /* That's also not quite correct. We should display here
  166.             a mixture of the player color and the playfield */
  167.     case 0x04 :
  168.       if (pf_pixel > 7)
  169.     {
  170.       if (missile < player)
  171.         colreg = missile;
  172.       else
  173.         colreg = player;
  174.     }
  175.       else
  176.     {
  177.       colreg = pf_pixel;
  178.     }
  179.       break;
  180.     case 0x08 : /* RALLY SPEEDWAY */
  181.       if (pf_pixel > 5)
  182.     {
  183.       if (missile < player)
  184.         colreg = missile;
  185.       else
  186.         colreg = player;
  187.     }
  188.       else
  189.     {
  190.       colreg = pf_pixel;
  191.     }
  192.       break;
  193.     case 0x11 : /* PAC-MAN, STAR RAIDERS, ASTEROIDS, FROGGER DELUXE, KANGAROO */
  194.       if (player != 0xff)
  195.     colreg = player;
  196.       else {
  197.     if (missile != 0xff)
  198.       colreg = 7;
  199.     else 
  200.       colreg = pf_pixel;
  201.       }
  202.       break;
  203.     case 0x12 : /* ZONE RANGER */
  204.       if (player < 2)
  205.     {
  206.       colreg = player;
  207.     }
  208.       else if (pf_pixel < 7)
  209.     {
  210.       colreg = pf_pixel;
  211.     }
  212.       else if (pf_pixel == 7)
  213.     {
  214.       if (missile != 0xff)
  215.         colreg = missile;
  216.       else
  217.         colreg = pf_pixel;
  218.     }
  219.       else if (player < 4)
  220.     {
  221.       colreg = player;
  222.     }
  223.       else
  224.     {
  225.       colreg = pf_pixel;
  226.     }
  227.       break;   
  228.     case 0x10 :  /* That's also not quite correct. We should display here
  229.             a mixture of the player color and the playfield */
  230.     case 0x14 : /* ATARI CHESS, FORT APOCALYPSE */
  231.       if (missile != 0xff)
  232.     {
  233.       colreg = 7;/* Missles are COLPF3 now and have hence priority */
  234.       /*
  235.       if (pf_pixel > 7)
  236.         colreg = 7;  Missile using COLPF3 
  237.       else
  238.         colreg = pf_pixel;
  239.       */
  240.     }
  241.       else
  242.     {
  243.       if (pf_pixel > 7)
  244.         colreg = player;
  245.       else
  246.         colreg = pf_pixel;
  247.     }
  248.       break;
  249.     case 0x18 : /* THE LAST STARTFIGHTER */
  250.       if (pf_pixel > 5)
  251.     {
  252.       if (missile < player)
  253.         colreg = 7; /* Missile using COLPF3 */
  254.       else
  255.         colreg = player;
  256.     }
  257.       else
  258.     {
  259.       colreg = pf_pixel;
  260.     }
  261.       break;
  262.     default :
  263.       printf ("Unsupported PRIOR = %02x\n", PRIOR);
  264.     }
  265.  
  266.   return colreg;
  267. }
  268.  
  269.   static int which_pm_lookup[16] =
  270.     {
  271.       0xff, /* 0000 - None */
  272.       0x00, /* 0001 - Player 0 */
  273.       0x01, /* 0010 - Player 1 */
  274.       0x00, /* 0011 - Player 0 */
  275.       0x02, /* 0100 - Player 2 */
  276.       0x00, /* 0101 - Player 0 */
  277.       0x01, /* 0110 - Player 1 */
  278.       0x00, /* 0111 - Player 0 */
  279.       0x03, /* 1000 - Player 3 */
  280.       0x00, /* 1001 - Player 0 */
  281.       0x01, /* 1010 - Player 1 */
  282.       0x00, /* 1011 - Player 0 */
  283.       0x02, /* 1100 - Player 2 */
  284.       0x00, /* 1101 - Player 0 */
  285.       0x01, /* 1110 - Player 1 */
  286.       0x00  /* 1111 - Player 0 */
  287.     };
  288.