1//============================================================================
2//
3// SSSS tt lll lll
4// SS SS tt ll ll
5// SS tttttt eeee ll ll aaaa
6// SSSS tt ee ee ll ll aa
7// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8// SS SS tt ee ll ll aa aa
9// SSSS ttt eeeee llll llll aaaaa
10//
11// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
12// and the Stella Team
13//
14// See the file "License.txt" for information on usage and redistribution of
15// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16//============================================================================
17
18#ifndef TIA_CONSTANTS_HXX
19#define TIA_CONSTANTS_HXX
20
21#include "bspf.hxx"
22
23namespace TIAConstants {
24
25 static constexpr uInt32 frameBufferWidth = 160;
26 static constexpr uInt32 frameBufferHeight = 320;
27 static constexpr uInt32 maxYStart = 64; // TODO - this may be removed
28 static constexpr uInt32 viewableWidth = 320;
29 static constexpr uInt32 viewableHeight = 240;
30 static constexpr uInt32 initialGarbageFrames = 10;
31
32 static constexpr uInt16
33 H_PIXEL = 160, H_CYCLES = 76, CYCLE_CLOCKS = 3,
34 H_CLOCKS = H_CYCLES * CYCLE_CLOCKS, // = 228
35 H_BLANK_CLOCKS = H_CLOCKS - H_PIXEL; // = 68
36}
37
38enum TIABit {
39 P0Bit = 0x01, // Bit for Player 0
40 M0Bit = 0x02, // Bit for Missle 0
41 P1Bit = 0x04, // Bit for Player 1
42 M1Bit = 0x08, // Bit for Missle 1
43 BLBit = 0x10, // Bit for Ball
44 PFBit = 0x20, // Bit for Playfield
45 ScoreBit = 0x40, // Bit for Playfield score mode
46 PriorityBit = 0x80 // Bit for Playfield priority
47};
48
49enum TIAColor {
50 BKColor = 0, // Color index for Background
51 PFColor = 1, // Color index for Playfield
52 P0Color = 2, // Color index for Player 0
53 P1Color = 3, // Color index for Player 1
54 M0Color = 4, // Color index for Missle 0
55 M1Color = 5, // Color index for Missle 1
56 BLColor = 6, // Color index for Ball
57 HBLANKColor = 7 // Color index for HMove blank area
58};
59
60enum class CollisionBit
61{
62 M0P1 = 1 << 0, // Missle0 - Player1 collision
63 M0P0 = 1 << 1, // Missle0 - Player0 collision
64 M1P0 = 1 << 2, // Missle1 - Player0 collision
65 M1P1 = 1 << 3, // Missle1 - Player1 collision
66 P0PF = 1 << 4, // Player0 - Playfield collision
67 P0BL = 1 << 5, // Player0 - Ball collision
68 P1PF = 1 << 6, // Player1 - Playfield collision
69 P1BL = 1 << 7, // Player1 - Ball collision
70 M0PF = 1 << 8, // Missle0 - Playfield collision
71 M0BL = 1 << 9, // Missle0 - Ball collision
72 M1PF = 1 << 10, // Missle1 - Playfield collision
73 M1BL = 1 << 11, // Missle1 - Ball collision
74 BLPF = 1 << 12, // Ball - Playfield collision
75 P0P1 = 1 << 13, // Player0 - Player1 collision
76 M0M1 = 1 << 14 // Missle0 - Missle1 collision
77};
78
79// TIA Write/Read register names
80enum TIARegister {
81 VSYNC = 0x00, // Write: vertical sync set-clear (D1)
82 VBLANK = 0x01, // Write: vertical blank set-clear (D7-6,D1)
83 WSYNC = 0x02, // Write: wait for leading edge of hrz. blank (strobe)
84 RSYNC = 0x03, // Write: reset hrz. sync counter (strobe)
85 NUSIZ0 = 0x04, // Write: number-size player-missle 0 (D5-0)
86 NUSIZ1 = 0x05, // Write: number-size player-missle 1 (D5-0)
87 COLUP0 = 0x06, // Write: color-lum player 0 (D7-1)
88 COLUP1 = 0x07, // Write: color-lum player 1 (D7-1)
89 COLUPF = 0x08, // Write: color-lum playfield (D7-1)
90 COLUBK = 0x09, // Write: color-lum background (D7-1)
91 CTRLPF = 0x0a, // Write: cntrl playfield ballsize & coll. (D5-4,D2-0)
92 REFP0 = 0x0b, // Write: reflect player 0 (D3)
93 REFP1 = 0x0c, // Write: reflect player 1 (D3)
94 PF0 = 0x0d, // Write: playfield register byte 0 (D7-4)
95 PF1 = 0x0e, // Write: playfield register byte 1 (D7-0)
96 PF2 = 0x0f, // Write: playfield register byte 2 (D7-0)
97 RESP0 = 0x10, // Write: reset player 0 (strobe)
98 RESP1 = 0x11, // Write: reset player 1 (strobe)
99 RESM0 = 0x12, // Write: reset missle 0 (strobe)
100 RESM1 = 0x13, // Write: reset missle 1 (strobe)
101 RESBL = 0x14, // Write: reset ball (strobe)
102 AUDC0 = 0x15, // Write: audio control 0 (D3-0)
103 AUDC1 = 0x16, // Write: audio control 1 (D4-0)
104 AUDF0 = 0x17, // Write: audio frequency 0 (D4-0)
105 AUDF1 = 0x18, // Write: audio frequency 1 (D3-0)
106 AUDV0 = 0x19, // Write: audio volume 0 (D3-0)
107 AUDV1 = 0x1a, // Write: audio volume 1 (D3-0)
108 GRP0 = 0x1b, // Write: graphics player 0 (D7-0)
109 GRP1 = 0x1c, // Write: graphics player 1 (D7-0)
110 ENAM0 = 0x1d, // Write: graphics (enable) missle 0 (D1)
111 ENAM1 = 0x1e, // Write: graphics (enable) missle 1 (D1)
112 ENABL = 0x1f, // Write: graphics (enable) ball (D1)
113 HMP0 = 0x20, // Write: horizontal motion player 0 (D7-4)
114 HMP1 = 0x21, // Write: horizontal motion player 1 (D7-4)
115 HMM0 = 0x22, // Write: horizontal motion missle 0 (D7-4)
116 HMM1 = 0x23, // Write: horizontal motion missle 1 (D7-4)
117 HMBL = 0x24, // Write: horizontal motion ball (D7-4)
118 VDELP0 = 0x25, // Write: vertical delay player 0 (D0)
119 VDELP1 = 0x26, // Write: vertical delay player 1 (D0)
120 VDELBL = 0x27, // Write: vertical delay ball (D0)
121 RESMP0 = 0x28, // Write: reset missle 0 to player 0 (D1)
122 RESMP1 = 0x29, // Write: reset missle 1 to player 1 (D1)
123 HMOVE = 0x2a, // Write: apply horizontal motion (strobe)
124 HMCLR = 0x2b, // Write: clear horizontal motion registers (strobe)
125 CXCLR = 0x2c, // Write: clear collision latches (strobe)
126
127 CXM0P = 0x00, // Read collision: D7=(M0,P1); D6=(M0,P0)
128 CXM1P = 0x01, // Read collision: D7=(M1,P0); D6=(M1,P1)
129 CXP0FB = 0x02, // Read collision: D7=(P0,PF); D6=(P0,BL)
130 CXP1FB = 0x03, // Read collision: D7=(P1,PF); D6=(P1,BL)
131 CXM0FB = 0x04, // Read collision: D7=(M0,PF); D6=(M0,BL)
132 CXM1FB = 0x05, // Read collision: D7=(M1,PF); D6=(M1,BL)
133 CXBLPF = 0x06, // Read collision: D7=(BL,PF); D6=(unused)
134 CXPPMM = 0x07, // Read collision: D7=(P0,P1); D6=(M0,M1)
135 INPT0 = 0x08, // Read pot port: D7
136 INPT1 = 0x09, // Read pot port: D7
137 INPT2 = 0x0a, // Read pot port: D7
138 INPT3 = 0x0b, // Read pot port: D7
139 INPT4 = 0x0c, // Read P1 joystick trigger: D7
140 INPT5 = 0x0d // Read P2 joystick trigger: D7
141};
142
143#endif // TIA_CONSTANTS_HXX
144