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