
  if (PRIOR & 0xc0)
    {
      UBYTE *t_scrn_ptr1; /* Input Pointer */
      UBYTE *t_scrn_ptr2; /* Output Pointer */
      int xpos;
      int nibble;

      t_scrn_ptr1 = scrn_ptr;
      t_scrn_ptr2 = scrn_ptr;

      for (xpos=0;xpos<ATARI_WIDTH;xpos++)
	{
	  UBYTE pf_pixel;
	  UBYTE colour;

	  pf_pixel = *t_scrn_ptr1++;
#ifdef DIRECT_VIDEO
	  pf_pixel = colour_to_pf[pf_pixel];
#endif

	  if ((xpos & 0x03) == 0x00)
	    nibble = 0;

	  nibble <<= 1;

	  if (pf_pixel == PF_COLPF1)
	    nibble += 1;

	  if ((xpos & 0x03) == 0x03)
	    {
	      switch (PRIOR & 0xc0)
		{
		case 0x40 :
		  colour = colour_translation_table[(COLBK & 0xf0) | nibble];
		  break;
		case 0x80 :
		  colour = colour_lookup[GTIA_XLate[nibble]];
		  break;
		case 0xc0 :
		  if (nibble)
		    colour = colour_translation_table[(nibble << 4) | (COLBK & 0x0f)];
		  else
		    colour = colour_translation_table[(nibble << 4)];

		  break;
		}

	      *t_scrn_ptr2++ = colour;
	      *t_scrn_ptr2++ = colour;
	      *t_scrn_ptr2++ = colour;
	      *t_scrn_ptr2++ = colour;
	    }
	}

      scrn_ptr = t_scrn_ptr2;
    }
#ifndef DIRECT_VIDEO
  else
    {
      UBYTE *t_scrn_ptr;
      int xpos;

      t_scrn_ptr = scrn_ptr;

      for (xpos=0;xpos<ATARI_WIDTH;xpos++)
	{
	  UBYTE colreg;
	  UBYTE colour;

	  colreg = *t_scrn_ptr;
	  if (colreg==5 && colpf1_fiddled)
	    colour = (colour_lookup[5] & 0x0f) | (colour_lookup[6] & 0xf0);
	  else
	    colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

/*
	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;

	  colreg = *t_scrn_ptr;
	  colour = colour_lookup[colreg];
	  *t_scrn_ptr++ = colour;
*/
	}

      scrn_ptr = t_scrn_ptr;
    }
#else
  else
    {
      scrn_ptr += ATARI_WIDTH;
    }
#endif


/* player  = player # to display or 0xff for none
   missile = missle # to display or 0xff for none
   pixel   = screen register to display at this position
*/
UBYTE WhichColourReg (int pf_pixel, int player, int missile)
{
  UBYTE colreg;

  if (colpf1_fiddled && pf_pixel==5 && ((PRIOR & 0xC0)==0))
    return pf_pixel;
  /* That's actually not quite correct, we should display the hue of the
     colPF1 with the colour of the player, but so what... */

  switch (PRIOR & 0x1f)
    {
    case 0x01 : /* RIVER RAID */
      if (missile < player)
	colreg = missile;
      else
	colreg = player;
      break;
    case 0x02 : /* MOUNTAIN KING */
      if (player < 2)
	{
	  colreg = player;
	}
      else if (pf_pixel < 7)
	{
	  colreg = pf_pixel;
	}
      else if (pf_pixel == 7)
	{
	  if (missile != 0xff)
	    colreg = missile;
	  else
	    colreg = pf_pixel;
	}
      else if (player < 4)
	{
	  colreg = player;
	}
      else
	{
	  colreg = pf_pixel;
	}
      break;
    case 0x00 :  /* That's also not quite correct. We should display here
		    a mixture of the player color and the playfield */
    case 0x04 :
      if (pf_pixel > 7)
	{
	  if (missile < player)
	    colreg = missile;
	  else
	    colreg = player;
	}
      else
	{
	  colreg = pf_pixel;
	}
      break;
    case 0x08 : /* RALLY SPEEDWAY */
      if (pf_pixel > 5)
	{
	  if (missile < player)
	    colreg = missile;
	  else
	    colreg = player;
	}
      else
	{
	  colreg = pf_pixel;
	}
      break;
    case 0x11 : /* PAC-MAN, STAR RAIDERS, ASTEROIDS, FROGGER DELUXE, KANGAROO */
      if (player != 0xff)
	colreg = player;
      else {
	if (missile != 0xff)
	  colreg = 7;
	else 
	  colreg = pf_pixel;
      }
      break;
    case 0x12 : /* ZONE RANGER */
      if (player < 2)
	{
	  colreg = player;
	}
      else if (pf_pixel < 7)
	{
	  colreg = pf_pixel;
	}
      else if (pf_pixel == 7)
	{
	  if (missile != 0xff)
	    colreg = missile;
	  else
	    colreg = pf_pixel;
	}
      else if (player < 4)
	{
	  colreg = player;
	}
      else
	{
	  colreg = pf_pixel;
	}
      break;   
    case 0x10 :  /* That's also not quite correct. We should display here
		    a mixture of the player color and the playfield */
    case 0x14 : /* ATARI CHESS, FORT APOCALYPSE */
      if (missile != 0xff)
	{
	  colreg = 7;/* Missles are COLPF3 now and have hence priority */
	  /*
	  if (pf_pixel > 7)
	    colreg = 7;  Missile using COLPF3 
	  else
	    colreg = pf_pixel;
	  */
	}
      else
	{
	  if (pf_pixel > 7)
	    colreg = player;
	  else
	    colreg = pf_pixel;
	}
      break;
    case 0x18 : /* THE LAST STARTFIGHTER */
      if (pf_pixel > 5)
	{
	  if (missile < player)
	    colreg = 7; /* Missile using COLPF3 */
	  else
	    colreg = player;
	}
      else
	{
	  colreg = pf_pixel;
	}
      break;
    default :
      printf ("Unsupported PRIOR = %02x\n", PRIOR);
    }

  return colreg;
}

  static int which_pm_lookup[16] =
    {
      0xff, /* 0000 - None */
      0x00, /* 0001 - Player 0 */
      0x01, /* 0010 - Player 1 */
      0x00, /* 0011 - Player 0 */
      0x02, /* 0100 - Player 2 */
      0x00, /* 0101 - Player 0 */
      0x01, /* 0110 - Player 1 */
      0x00, /* 0111 - Player 0 */
      0x03, /* 1000 - Player 3 */
      0x00, /* 1001 - Player 0 */
      0x01, /* 1010 - Player 1 */
      0x00, /* 1011 - Player 0 */
      0x02, /* 1100 - Player 2 */
      0x00, /* 1101 - Player 0 */
      0x01, /* 1110 - Player 1 */
      0x00  /* 1111 - Player 0 */
    };
