home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Emulation
/
Atari800
/
gtia_older.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-08-06
|
22KB
|
1,190 lines
/*
* Scanline Generation
* Player Missile Graphics
* Collision Detection
* Playfield Priorities
* Issues cpu cycles during frame redraw.
*/
#include <stdio.h>
#include <string.h>
#ifndef AMIGA
#include "config.h"
#endif
#include "atari.h"
#include "cpu.h"
#include "pia.h"
#include "pokey.h"
#include "gtia.h"
#include "antic.h"
#include "pia.h"
#include "platform.h"
#define FALSE 0
#define TRUE 1
static char *rcsid = "$Id: gtia.c,v 1.17 1997/02/15 13:57:11 david Exp $";
extern int DELAYED_SERIN_IRQ;
extern int DELAYED_SEROUT_IRQ;
extern int DELAYED_XMTDONE_IRQ;
extern int rom_inserted;
extern int colpf1_fiddled;
UBYTE COLBK;
UBYTE COLPF0;
UBYTE COLPF1;
UBYTE COLPF2;
UBYTE COLPF3;
UBYTE COLPM0;
UBYTE COLPM1;
UBYTE COLPM2;
UBYTE COLPM3;
UBYTE GRAFM;
UBYTE GRAFP0;
UBYTE GRAFP1;
UBYTE GRAFP2;
UBYTE GRAFP3;
UBYTE HPOSP0;
UBYTE HPOSP1;
UBYTE HPOSP2;
UBYTE HPOSP3;
UBYTE HPOSM0;
UBYTE HPOSM1;
UBYTE HPOSM2;
UBYTE HPOSM3;
UBYTE SIZEP0;
UBYTE SIZEP1;
UBYTE SIZEP2;
UBYTE SIZEP3;
UBYTE SIZEM;
UBYTE M0PF;
UBYTE M1PF;
UBYTE M2PF;
UBYTE M3PF;
UBYTE M0PL;
UBYTE M1PL;
UBYTE M2PL;
UBYTE M3PL;
UBYTE P0PF;
UBYTE P1PF;
UBYTE P2PF;
UBYTE P3PF;
UBYTE P0PL;
UBYTE P1PL;
UBYTE P2PL;
UBYTE P3PL;
UBYTE PRIOR;
UBYTE GRACTL;
/*
*****************************************************************
* *
* Section : Player Missile Graphics *
* Original Author : David Firth *
* Date Written : 28th May 1995 *
* Version : 1.0 *
* *
*****************************************************************
*/
static int global_hposp0;
static int global_hposp1;
static int global_hposp2;
static int global_hposp3;
static int global_hposm0;
static int global_hposm1;
static int global_hposm2;
static int global_hposm3;
static int global_sizep0;
static int global_sizep1;
static int global_sizep2;
static int global_sizep3;
static int global_sizem;
#ifdef DIRECT_VIDEO
static UBYTE colour_to_pf[256];
#endif
/*
=========================================
Width of each bit within a Player/Missile
=========================================
*/
static UBYTE pm_scanline[ATARI_WIDTH];
UBYTE colour_lookup[9];
int colour_translation_table[256];
static UBYTE GTIA_XLate[]={0,1,2,3,4,5,6,7,8,8,8,8,4,5,6,7};
int next_console_value = 7;
extern int ypos;
extern UWORD regPC;
UWORD pl0adr;
UWORD pl1adr;
UWORD pl2adr;
UWORD pl3adr;
UWORD m0123adr;
static int PM_XPos[256];
static UBYTE PM_Width[4] = { 2, 4, 2, 8};
void GTIA_Initialise (int *argc, char *argv[])
{
int i;
for (i=0;i<256;i++)
PM_XPos[i] = (i - 0x20) << 1;
#ifdef DIRECT_VIDEO
printf ("GTIA: Screen Generation compiled with DIRECT_VIDEO\n");
for (i=0;i<256;i++)
colour_to_pf[i] = 0x00;
#endif
for (i=0;i<9;i++)
colour_lookup[i] = 0x00;
PRIOR = 0x00;
}
/* 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;
}
void PM_ScanLine (void)
{
static UBYTE pf_collision_bit[9] =
{
0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x04, 0x08,
0x00
};
/*
=============================
Display graphics for Player 0
=============================
*/
if (GRAFP0)
{
UBYTE grafp0 = GRAFP0;
int sizep0 = global_sizep0;
int hposp0 = global_hposp0;
int i;
for (i=0;i<8;i++)
{
if (grafp0 & 0x80)
{
int j;
for (j=0;j<sizep0;j++)
{
if ((hposp0 >= 0) && (hposp0 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposp0];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposp0] |= 0x01;
P0PF |= pf_collision_bit[playfield];
}
hposp0++;
}
}
else
{
hposp0 += sizep0;
}
grafp0 = grafp0 << 1;
}
}
/*
=============================
Display graphics for Player 1
=============================
*/
if (GRAFP1)
{
UBYTE grafp1 = GRAFP1;
int sizep1 = global_sizep1;
int hposp1 = global_hposp1;
int i;
for (i=0;i<8;i++)
{
if (grafp1 & 0x80)
{
int j;
for (j=0;j<sizep1;j++)
{
if ((hposp1 >= 0) && (hposp1 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposp1];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposp1] |= 0x02;
P1PF |= pf_collision_bit[playfield];
}
hposp1++;
}
}
else
{
hposp1 += sizep1;
}
grafp1 = grafp1 << 1;
}
}
/*
=============================
Display graphics for Player 2
=============================
*/
if (GRAFP2)
{
UBYTE grafp2 = GRAFP2;
int sizep2 = global_sizep2;
int hposp2 = global_hposp2;
int i;
for (i=0;i<8;i++)
{
if (grafp2 & 0x80)
{
int j;
for (j=0;j<sizep2;j++)
{
if ((hposp2 >= 0) && (hposp2 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposp2];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposp2] |= 0x04;
P2PF |= pf_collision_bit[playfield];
}
hposp2++;
}
}
else
{
hposp2 += sizep2;
}
grafp2 = grafp2 << 1;
}
}
/*
=============================
Display graphics for Player 3
=============================
*/
if (GRAFP3)
{
UBYTE grafp3 = GRAFP3;
int sizep3 = global_sizep3;
int hposp3 = global_hposp3;
int i;
for (i=0;i<8;i++)
{
if (grafp3 & 0x80)
{
int j;
for (j=0;j<sizep3;j++)
{
if ((hposp3 >= 0) && (hposp3 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposp3];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposp3] |= 0x08;
P3PF |= pf_collision_bit[playfield];
}
hposp3++;
}
}
else
{
hposp3 += sizep3;
}
grafp3 = grafp3 << 1;
}
}
/*
=============================
Display graphics for Missiles
=============================
*/
if (GRAFM)
{
UBYTE grafm = GRAFM;
int hposm0 = global_hposm0;
int hposm1 = global_hposm1;
int hposm2 = global_hposm2;
int hposm3 = global_hposm3;
int sizem = global_sizem;
int i;
for (i=0;i<8;i++)
{
if (grafm & 0x80)
{
int j;
for (j=0;j<sizem;j++)
{
switch (i & 0x06)
{
case 0x00 :
if ((hposm3 >= 0) && (hposm3 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposm3];
UBYTE player = pm_scanline[hposm3];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposm3] |= 0x80;
M3PF |= pf_collision_bit[playfield];
M3PL |= player;
}
hposm3++;
break;
case 0x02 :
if ((hposm2 >= 0) && (hposm2 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposm2];
UBYTE player = pm_scanline[hposm2];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposm2] |= 0x40;
M2PF |= pf_collision_bit[playfield];
M2PL |= player;
}
hposm2++;
break;
case 0x04 :
if ((hposm1 >= 0) && (hposm1 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposm1];
UBYTE player = pm_scanline[hposm1];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposm1] |= 0x20;
M1PF |= pf_collision_bit[playfield];
M1PL |= player;
}
hposm1++;
break;
case 0x06 :
if ((hposm0 >= 0) && (hposm0 < ATARI_WIDTH))
{
UBYTE playfield = scrn_ptr[hposm0];
UBYTE player = pm_scanline[hposm0];
#ifdef DIRECT_VIDEO
playfield = colour_to_pf[playfield];
#endif
pm_scanline[hposm0] |= 0x10;
M0PF |= pf_collision_bit[playfield];
M0PL |= player;
}
hposm0++;
break;
}
}
}
else
{
switch (i & 0x06)
{
case 0x00 :
hposm3 += sizem;
break;
case 0x02 :
hposm2 += sizem;
break;
case 0x04 :
hposm1 += sizem;
break;
case 0x06 :
hposm0 += sizem;
break;
}
}
grafm = grafm << 1;
}
}
}
/*
======================================
Plot Player/Missile Data onto Scanline
======================================
*/
void PM_DrawLine(void)
{
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 */
};
int xpos;
UBYTE *pf,*pm;
xpos=0,pf=scrn_ptr,pm=pm_scanline;
switch (PRIOR & 0xc0) {
case 0x00: /* Ordinary display modes */
for (;xpos<ATARI_WIDTH;xpos++,pm++,pf++) {
UBYTE pm_pixel,pf_pixel,colreg;
pm_pixel = *pm;
pf_pixel = *pf;
if (pm_pixel) {
UBYTE player;
int which_player;
int which_missile;
player = pm_pixel & 0x0f;
if (player & 0x01)
P0PL |= player;
if (player & 0x02)
P1PL |= player;
if (player & 0x04)
P2PL |= player;
if (player & 0x08)
P3PL |= player;
which_player = which_pm_lookup[pm_pixel & 0x0f];
which_missile = which_pm_lookup[(pm_pixel >> 4) & 0x0f];
colreg = WhichColourReg (pf_pixel, which_player, which_missile);
} else colreg = pf_pixel;
if (colreg==5 && colpf1_fiddled)
*pf = (colour_lookup[5] & 0x0f) | (colour_lookup[6] & 0xf0);
else
*pf = colour_lookup[colreg];
}
break;
case 0x40: /* Graphics 9 */
for(;xpos<ATARI_WIDTH;xpos++,pm++,pf++) {
int nibble;
UBYTE pm_pixel,pf_pixel,playfield_color;
pm_pixel = *pm;
if ((xpos & 0x03) == 0x00) {
nibble = (((pf[0] & 0x01))<<3)|
(((pf[1] & 0x01))<<2)|
(((pf[2] & 0x01))<<1)|
(((pf[3] & 0x01)));
pf_pixel=colour_translation_table[(COLBK & 0xf0) | nibble];
}
if (pm_pixel) {
UBYTE colreg;
UBYTE player;
int which_player;
int which_missile;
player = pm_pixel & 0x0f;
if (player & 0x01)
P0PL |= player;
if (player & 0x02)
P1PL |= player;
if (player & 0x04)
P2PL |= player;
if (player & 0x08)
P3PL |= player;
which_player = which_pm_lookup[pm_pixel & 0x0f];
which_missile = which_pm_lookup[(pm_pixel >> 4) & 0x0f];
colreg = WhichColourReg (COLBK, which_player, which_missile);
if (colreg == COLBK)
*pf = pf_pixel;
else
*pf = colour_lookup[colreg];
} else
*pf = pf_pixel;
}
break;
case 0x80: /* Graphics 10 */
for(;xpos<ATARI_WIDTH;xpos++,pm++,pf++) {
int nibble;
UBYTE pm_pixel,pf_pixel,playfield_color;
pm_pixel = *pm;
if ((xpos & 0x03) == 0x00) {
nibble = (((pf[0] & 0x01))<<3)|
(((pf[1] & 0x01))<<2)|
(((pf[2] & 0x01))<<1)|
(((pf[3] & 0x01)));
pf_pixel=colour_lookup[GTIA_XLate[nibble]];
}
if (pm_pixel) {
UBYTE colreg;
UBYTE player;
int which_player;
int which_missile;
player = pm_pixel & 0x0f;
if (player & 0x01)
P0PL |= player;
if (player & 0x02)
P1PL |= player;
if (player & 0x04)
P2PL |= player;
if (player & 0x08)
P3PL |= player;
which_player = which_pm_lookup[pm_pixel & 0x0f];
which_missile = which_pm_lookup[(pm_pixel >> 4) & 0x0f];
colreg = WhichColourReg (COLBK, which_player, which_missile);
if (colreg == COLBK)
*pf = pf_pixel;
else
*pf = colour_lookup[colreg];
} else
*pf = pf_pixel;
}
break;
case 0xc0: /* Graphics 11 */
for(;xpos<ATARI_WIDTH;xpos++,pf++,pm++) {
int nibble;
UBYTE pm_pixel,pf_pixel,playfield_color;
pm_pixel = *pm;
if ((xpos & 0x03) == 0x00) {
nibble = (((pf[0] & 0x01))<<3)|
(((pf[1] & 0x01))<<2)|
(((pf[2] & 0x01))<<1)|
(((pf[3] & 0x01)));
if (nibble)
pf_pixel = colour_translation_table[(nibble << 4) | (COLBK & 0x0f)];
else
pf_pixel = colour_translation_table[(nibble << 4)];
}
if (pm_pixel) {
UBYTE colreg;
UBYTE player;
int which_player;
int which_missile;
player = pm_pixel & 0x0f;
if (player & 0x01)
P0PL |= player;
if (player & 0x02)
P1PL |= player;
if (player & 0x04)
P2PL |= player;
if (player & 0x08)
P3PL |= player;
which_player = which_pm_lookup[pm_pixel & 0x0f];
which_missile = which_pm_lookup[(pm_pixel >> 4) & 0x0f];
colreg = WhichColourReg (COLBK, which_player, which_missile);
if (colreg == COLBK)
*pf = pf_pixel;
else
*pf = colour_lookup[colreg];
} else
*pf = pf_pixel;
}
break;
}
memset (pm_scanline, 0, ATARI_WIDTH);
}
void Atari_ScanLine (int cycles)
{
int i;
if (DELAYED_SERIN_IRQ > 0)
{
if (--DELAYED_SERIN_IRQ == 0)
{
if (IRQEN & 0x20)
{
#ifdef DEBUG2
printf ("SERIO: SERIN Interrupt triggered\n");
#endif
IRQST &= 0xdf;
IRQ = 1;
}
#ifdef DEBUG2
else
{
printf ("SERIO: SERIN Interrupt missed\n");
}
#endif
}
}
if (DELAYED_SEROUT_IRQ > 0)
{
if (--DELAYED_SEROUT_IRQ == 0)
{
if (IRQEN & 0x10)
{
#ifdef DEBUG2
printf ("SERIO: SEROUT Interrupt triggered\n");
#endif
IRQST &= 0xef;
IRQ = 1;
}
#ifdef DEBUG2
else
{
printf ("SERIO: SEROUT Interrupt missed\n");
}
#endif
}
}
if (DELAYED_XMTDONE_IRQ > 0)
{
if (--DELAYED_XMTDONE_IRQ == 0)
{
if (IRQEN & 0x08)
{
#ifdef DEBUG2
printf ("SERIO: XMTDONE Interrupt triggered\n");
#endif
IRQST &= 0xf7;
IRQ = 1;
}
#ifdef DEBUG2
else
{
printf ("SERIO: XMTDONE Interrupt missed\n");
}
#endif
}
}
if ((!wsync_halt) && (cycles>0))
GO (cycles);
#ifdef DIRECT_VIDEO
for (i=0;i<dmactl_xmin_noscroll;i++)
scrn_ptr[i] = colour_lookup[8];
for (i=dmactl_xmax_noscroll;i<ATARI_WIDTH;i++)
scrn_ptr[i] = colour_lookup[8];
#else
for (i=0;i<dmactl_xmin_noscroll;i++)
scrn_ptr[i] = PF_COLBK;
for (i=dmactl_xmax_noscroll;i<ATARI_WIDTH;i++)
scrn_ptr[i] = PF_COLBK;
#endif
PM_ScanLine ();
PM_DrawLine ();
scrn_ptr += ATARI_WIDTH;
ypos++;
if (wsync_halt)
{
if (!(--wsync_halt))
GO (107);
}
else
{
GO (7);
}
}
void FiddlePF1(UBYTE byte)
{
COLPF1 = byte;
#ifdef DIRECT_VIDEO
setcolreg (5, byte);
#else
colour_lookup[5] = colour_translation_table[byte];
#endif
}
UBYTE GTIA_GetByte (UWORD addr)
{
UBYTE byte;
addr &= 0xff1f;
switch (addr)
{
case _CONSOL :
if (next_console_value != 7)
{
byte = next_console_value;
next_console_value = 0x07;
}
else
{
byte = Atari_CONSOL ();
}
break;
case _M0PF :
byte = M0PF;
break;
case _M1PF :
byte = M1PF;
break;
case _M2PF :
byte = M2PF;
break;
case _M3PF :
byte = M3PF;
break;
case _M0PL :
byte = M0PL;
break;
case _M1PL :
byte = M1PL;
break;
case _M2PL :
byte = M2PL;
break;
case _M3PL :
byte = M3PL;
break;
case _P0PF :
byte = P0PF;
break;
case _P1PF :
byte = P1PF;
break;
case _P2PF :
byte = P2PF;
break;
case _P3PF :
byte = P3PF;
break;
case _P0PL :
byte = P0PL & 0xfe;
break;
case _P1PL :
byte = P1PL & 0xfd;
break;
case _P2PL :
byte = P2PL & 0xfb;
break;
case _P3PL :
byte = P3PL & 0xf7;
break;
case _PAL :
if (tv_mode == PAL)
byte = 0x00;
else
byte = 0x0e;
break;
case _TRIG0 :
byte = Atari_TRIG (0);
break;
case _TRIG1 :
byte = Atari_TRIG (1);
break;
case _TRIG2 :
byte = Atari_TRIG (2);
break;
case _TRIG3 :
if (machine==Atari) byte = Atari_TRIG (3);
else byte = (rom_inserted)?(1):(0);
break;
}
return byte;
}
#ifdef DIRECT_VIDEO
void setcolreg (int pf, UBYTE colour)
{
colour_to_pf[colour_lookup[pf]] = 0x00;
colour_lookup[pf] = colour_translation_table[colour];
while (colour_to_pf[colour_lookup[pf]] != 0)
{
colour++;
colour_lookup[pf] = colour_translation_table[colour];
}
colour_to_pf[colour_lookup[pf]] = pf;
}
#endif
int GTIA_PutByte (UWORD addr, UBYTE byte)
{
addr &= 0xff1f;
switch (addr)
{
case _COLBK :
COLBK = byte;
#ifdef DIRECT_VIDEO
setcolreg (8, byte);
#else
colour_lookup[8] = colour_translation_table[byte];
#endif
break;
case _COLPF0 :
COLPF0 = byte;
#ifdef DIRECT_VIDEO
setcolreg (4, byte);
#else
colour_lookup[4] = colour_translation_table[byte];
#endif
break;
case _COLPF1 :
COLPF1 = byte;
#ifdef DIRECT_VIDEO
setcolreg (5, byte);
#else
colour_lookup[5] = colour_translation_table[byte];
#endif
/* colpf1_fiddled=0; */
break;
case _COLPF2 :
COLPF2 = byte;
#ifdef DIRECT_VIDEO
setcolreg (6, byte);
#else
colour_lookup[6] = colour_translation_table[byte];
#endif
break;
case _COLPF3 :
COLPF3 = byte;
#ifdef DIRECT_VIDEO
setcolreg (7, byte);
#else
colour_lookup[7] = colour_translation_table[byte];
#endif
break;
case _COLPM0 :
COLPM0 = byte;
colour_lookup[0] = colour_translation_table[byte];
break;
case _COLPM1 :
COLPM1 = byte;
colour_lookup[1] = colour_translation_table[byte];
break;
case _COLPM2 :
COLPM2 = byte;
colour_lookup[2] = colour_translation_table[byte];
break;
case _COLPM3 :
COLPM3 = byte;
colour_lookup[3] = colour_translation_table[byte];
break;
case _CONSOL :
break;
case _GRAFM :
GRAFM = byte;
break;
case _GRAFP0 :
GRAFP0 = byte;
break;
case _GRAFP1 :
GRAFP1 = byte;
break;
case _GRAFP2 :
GRAFP2 = byte;
break;
case _GRAFP3 :
GRAFP3 = byte;
break;
case _HITCLR :
M0PF = M1PF = M2PF = M3PF = 0;
P0PF = P1PF = P2PF = P3PF = 0;
M0PL = M1PL = M2PL = M3PL = 0;
P0PL = P1PL = P2PL = P3PL = 0;
break;
case _HPOSM0 :
HPOSM0 = byte;
global_hposm0 = PM_XPos[byte];
break;
case _HPOSM1 :
HPOSM1 = byte;
global_hposm1 = PM_XPos[byte];
break;
case _HPOSM2 :
HPOSM2 = byte;
global_hposm2 = PM_XPos[byte];
break;
case _HPOSM3 :
HPOSM3 = byte;
global_hposm3 = PM_XPos[byte];
break;
case _HPOSP0 :
HPOSP0 = byte;
global_hposp0 = PM_XPos[byte];
break;
case _HPOSP1 :
HPOSP1 = byte;
global_hposp1 = PM_XPos[byte];
break;
case _HPOSP2 :
HPOSP2 = byte;
global_hposp2 = PM_XPos[byte];
break;
case _HPOSP3 :
HPOSP3 = byte;
global_hposp3 = PM_XPos[byte];
break;
case _SIZEM :
SIZEM = byte;
global_sizem = PM_Width[byte & 0x03];
break;
case _SIZEP0 :
SIZEP0 = byte;
global_sizep0 = PM_Width[byte & 0x03];
break;
case _SIZEP1 :
SIZEP1 = byte;
global_sizep1 = PM_Width[byte & 0x03];
break;
case _SIZEP2 :
SIZEP2 = byte;
global_sizep2 = PM_Width[byte & 0x03];
break;
case _SIZEP3 :
SIZEP3 = byte;
global_sizep3 = PM_Width[byte & 0x03];
break;
case _PRIOR :
PRIOR = byte;
break;
case _GRACTL :
GRACTL = byte;
break;
default:
break;
}
return FALSE;
}