summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/gtia.h
blob: 8b4b58611b582d9d7b9df4307fa1c446c6ec5522 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***************************************************************************

    Atari 400/800

    GTIA  graphics television interface adapter

    Juergen Buchmueller, June 1998

***************************************************************************/

#ifndef __GTIA_H__
#define __GTIA_H__

#include "includes/atari.h"

typedef struct _gtia_interface gtia_interface;
struct _gtia_interface
{
	UINT8 (*console_read)(void);
	void (*console_write)(UINT8 data);
};




/* reading registers */
typedef struct _gtia_readregs gtia_readregs;
struct _gtia_readregs
{
	UINT8	m0pf;		/* d000 missile 0 playfield collisions */
	UINT8	m1pf;		/* d001 missile 1 playfield collisions */
	UINT8	m2pf;		/* d002 missile 2 playfield collisions */
	UINT8	m3pf;		/* d003 missile 3 playfield collisions */
	UINT8	p0pf;		/* d004 player 0 playfield collisions */
	UINT8	p1pf;		/* d005 player 1 playfield collisions */
	UINT8	p2pf;		/* d006 player 2 playfield collisions */
	UINT8	p3pf;		/* d007 player 3 playfield collisions */
	UINT8	m0pl;		/* d008 missile 0 player collisions */
	UINT8	m1pl;		/* d009 missile 1 player collisions */
	UINT8	m2pl;		/* d00a missile 2 player collisions */
	UINT8	m3pl;		/* d00b missile 3 player collisions */
	UINT8	p0pl;		/* d00c player 0 player collisions */
	UINT8	p1pl;		/* d00d player 1 player collisions */
	UINT8	p2pl;		/* d00e player 2 player collisions */
	UINT8	p3pl;		/* d00f player 3 player collisions */
	UINT8	but[4];		/* d010-d013 button stick 0-3 */
	UINT8	pal;		/* d014 PAL/NTSC config (D3,2,1 0=PAL, 1=NTSC */
	UINT8	gtia15; 	/* d015 nothing */
	UINT8	gtia16; 	/* d016 nothing */
	UINT8	gtia17; 	/* d017 nothing */
	UINT8	gtia18; 	/* d018 nothing */
	UINT8	gtia19; 	/* d019 nothing */
	UINT8	gtia1a; 	/* d01a nothing */
	UINT8	gtia1b; 	/* d01b nothing */
	UINT8	gtia1c; 	/* d01c nothing */
	UINT8	gtia1d; 	/* d01d nothing */
	UINT8	gtia1e; 	/* d01e nothing */
	UINT8	cons;		/* d01f console keys */
};

/* writing registers */
typedef struct _gtia_writeregs gtia_writeregs;
struct _gtia_writeregs
{
	UINT8	hposp0; 	/* d000 player 0 horz position */
	UINT8	hposp1; 	/* d001 player 1 horz position */
	UINT8	hposp2; 	/* d002 player 2 horz position */
	UINT8	hposp3; 	/* d003 player 3 horz position */
	UINT8	hposm0; 	/* d004 missile 0 horz position */
	UINT8	hposm1; 	/* d005 missile 1 horz position */
	UINT8	hposm2; 	/* d006 missile 2 horz position */
	UINT8	hposm3; 	/* d007 missile 3 horz position */
	UINT8	sizep0; 	/* d008 size player 0 */
	UINT8	sizep1; 	/* d009 size player 1 */
	UINT8	sizep2; 	/* d00a size player 2 */
	UINT8	sizep3; 	/* d00b size player 3 */
    UINT8   sizem;      /* d00c size missiles */
	UINT8	grafp0[2];	/* d00d graphics data for player 0 */
	UINT8	grafp1[2];	/* d00e graphics data for player 1 */
	UINT8	grafp2[2];	/* d00f graphics data for player 2 */
	UINT8	grafp3[2];	/* d010 graphics data for player 3 */
	UINT8	grafm[2];	/* d011 graphics data for missiles */
	UINT8	colpm0; 	/* d012 color for player/missile 0 */
	UINT8	colpm1; 	/* d013 color for player/missile 1 */
	UINT8	colpm2; 	/* d014 color for player/missile 2 */
	UINT8	colpm3; 	/* d015 color for player/missile 3 */
	UINT8	colpf0; 	/* d016 playfield color 0 */
	UINT8	colpf1; 	/* d017 playfield color 1 */
	UINT8	colpf2; 	/* d018 playfield color 2 */
	UINT8	colpf3; 	/* d019 playfield color 3 */
	UINT8	colbk;		/* d01a background playfield */
	UINT8	prior;		/* d01b priority select */
	UINT8	vdelay; 	/* d01c delay until vertical retrace */
	UINT8	gractl; 	/* d01d graphics control */
	UINT8	hitclr; 	/* d01e clear collisions */
	UINT8	cons;		/* d01f write console (speaker) */
};

/* helpers */
typedef struct _gtia_helpervars gtia_helpervars;
struct _gtia_helpervars
{
	UINT8	grafp0; 	/* optimized graphics data player 0 */
	UINT8	grafp1; 	/* optimized graphics data player 1 */
	UINT8	grafp2; 	/* optimized graphics data player 2 */
	UINT8	grafp3; 	/* optimized graphics data player 3 */
	UINT8	grafm0; 	/* optimized graphics data missile 0 */
	UINT8	grafm1; 	/* optimized graphics data missile 1 */
	UINT8	grafm2; 	/* optimized graphics data missile 2 */
	UINT8	grafm3; 	/* optimized graphics data missile 3 */
	UINT32	hitclr_frames;/* frames gone since last hitclr */
	UINT8	sizem;		/* optimized size missiles */
	UINT8	usedp;		/* mask for used player colors */
	UINT8	usedm0; 	/* mask for used missile 0 color */
	UINT8	usedm1; 	/* mask for used missile 1 color */
	UINT8	usedm2; 	/* mask for used missile 2 color */
	UINT8	usedm3; 	/* mask for used missile 3 color */
	UINT8	vdelay_m0;	/* vertical delay for missile 0 */
	UINT8	vdelay_m1;	/* vertical delay for missile 1 */
	UINT8	vdelay_m2;	/* vertical delay for missile 2 */
	UINT8	vdelay_m3;	/* vertical delay for missile 3 */
	UINT8	vdelay_p0;	/* vertical delay for player 0 */
	UINT8	vdelay_p1;	/* vertical delay for player 1 */
	UINT8	vdelay_p2;	/* vertical delay for player 2 */
	UINT8	vdelay_p3;	/* vertical delay for player 3 */
};

typedef struct _gtia_struct gtia_struct;
struct _gtia_struct
{
	gtia_interface intf;
	gtia_readregs	r;			/* read registers */
	gtia_writeregs	w;			/* write registers */
	gtia_helpervars	h;			/* helper variables */
};



extern gtia_struct gtia;

void gtia_init(const gtia_interface *intf);
READ8_HANDLER( atari_gtia_r );
WRITE8_HANDLER( atari_gtia_w );

void gtia_mode_1_32(VIDEO *video);
void gtia_mode_1_40(VIDEO *video);
void gtia_mode_1_48(VIDEO *video);
void gtia_mode_2_32(VIDEO *video);
void gtia_mode_2_40(VIDEO *video);
void gtia_mode_2_48(VIDEO *video);
void gtia_mode_3_32(VIDEO *video);
void gtia_mode_3_40(VIDEO *video);
void gtia_mode_3_48(VIDEO *video);
void gtia_render(VIDEO *video);

#endif /* __GTIA_H__ */