1 /***************************************************************************
2     68000 Program Code Addresses
3     Addresses to data within the Master and Sub CPU Program ROMs.
4 
5     These are typically large blocks of data that we don't want to include
6     in the codebase.
7 
8     Where needed addresses from the separate Japanese version are also
9     included. These are denoted by entries ending _J
10 
11     Copyright Chris White.
12     See license.txt for more details.
13 ***************************************************************************/
14 
15 #pragma once
16 
17 // ----------------------------------------------------------------------------
18 // Text Structures
19 // ----------------------------------------------------------------------------
20 
21 // Text1 = Use BlitText1 routine | Text2 = Use BlitText2 routine
22 
23 // Text: Credits
24 const uint16_t TEXT1_CREDIT  = 0x6D38;
25 const uint16_t TEXT1_CREDITS = 0x6D48;
26 const uint16_t TEXT1_CLEAR_CREDITS = 0x6D58;
27 const uint16_t TEXT1_FREEPLAY = 0x6D6C;
28 
29 // Text: Course Map
30 const uint16_t TEXT2_COURSEMAP = 0xBBC2;
31 
32 // Text: Press Start
33 const uint16_t TEXT1_PRESS_START = 0xBBD0;
34 const uint16_t TEXT1_CLEAR_START = 0xBBEC;
35 
36 // Text: Insert Coins
37 const uint16_t TEXT1_INSERT_COINS = 0xBC08;
38 const uint16_t TEXT1_CLEAR_COINS  = 0xBC1E;
39 
40 // Text: Game Over
41 const uint16_t TEXT2_GAMEOVER = 0xBCB0;
42 
43 // Text: Select Music By Steering
44 const uint16_t TEXT2_SELECT_MUSIC = 0xBCBE;
45 
46 // Text: 1986 Sega
47 const uint16_t TEXT1_1986_SEGA = 0xBCF2;
48 
49 // Text: Copyright Symbol
50 const uint16_t TEXT1_COPYRIGHT = 0xBD04;
51 
52 // Text: Magical Sound Shower
53 const uint16_t TEXT2_MAGICAL = 0xCE04;
54 
55 // Text: Passing Breeze
56 const uint16_t TEXT2_BREEZE = 0xCE1E;
57 
58 // Text: Splash Wave
59 const uint16_t TEXT2_SPLASH = 0xCE38;
60 
61 // Text: Your Score
62 const uint16_t TEXT1_YOURSCORE = 0xD5E0;
63 
64 // Text: Best OutRunners
65 const uint16_t TEXT2_BEST_OR = 0xD5F2;
66 
67 // Text: Score, Name, Route, Record
68 const uint16_t TEXT1_SCORE_ETC = 0xD606;
69 
70 // Text: ABCDEFGHIJKLMNOPQRSTUVWXYZ
71 const uint16_t TEXT2_ALPHABET = 0xD5C2;
72 
73 // Text: Extend Time
74 const uint16_t TEXT1_EXTEND1 = 0x90DC;
75 const uint16_t TEXT1_EXTEND2 = 0x90F6;
76 
77 // Text: Clear Extend Time
78 const uint16_t TEXT1_EXTEND_CLEAR1 = 0x9110;
79 const uint16_t TEXT1_EXTEND_CLEAR2 = 0x912A;
80 
81 // Text: Laptime
82 const uint16_t TEXT1_LAPTIME1 = 0x9144;
83 const uint16_t TEXT1_LAPTIME2 = 0x9150;
84 
85 // Text: Clear Laptime
86 const uint16_t TEXT1_LAPTIME_CLEAR1 = 0x915C;
87 const uint16_t TEXT1_LAPTIME_CLEAR2 = 0x917A;
88 
89 // Text: Easter Egg
90 const uint16_t TEXT1_EASTER       = 0x91B4;
91 const uint16_t TEXT1_EASTER_CLEAR = 0x91D6;
92 
93 // Text: Bonus Points Section
94 const uint16_t TEXT2_BONUS_POINTS = 0x9C0C;
95 const uint16_t TEXT1_BONUS_STOP   = 0x9C1C;
96 const uint16_t TEXT1_BONUS_SEC    = 0x9C26;
97 const uint16_t TEXT1_BONUS_X      = 0x9C34;
98 const uint16_t TEXT1_BONUS_PTS    = 0x9C3E;
99 const uint16_t TEXT1_BONUS_100K   = 0x9C4A;
100 const uint16_t TEXT2_BONUS_CLEAR1 = 0x9C52;
101 const uint16_t TEXT2_BONUS_CLEAR2 = 0x9C64;
102 const uint16_t TEXT2_BONUS_CLEAR3 = 0x9C78;
103 
104 // ----------------------------------------------------------------------------
105 // HUD
106 // ----------------------------------------------------------------------------
107 
108 // SCORE Graphic (2 Lines)
109 const uint16_t HUD_SCORE1 = 0xBC3E;
110 const uint16_t HUD_SCORE2 = 0xBC4C;
111 
112 // TIME Graphic (2 Lines)
113 const uint16_t HUD_TIME1 = 0xBC5A;
114 const uint16_t HUD_TIME2 = 0xBC66;
115 
116 // KPH (2 Lines)
117 const uint16_t HUD_KPH1 = 0xBC72;
118 const uint16_t HUD_KPH2 = 0xBC7E;
119 
120 // STAGE (2 Lines)
121 const uint16_t HUD_STAGE1 = 0xBC8A;
122 const uint16_t HUD_STAGE2 = 0xBC98;
123 
124 // Number "1" to appear after stage
125 const uint16_t HUD_ONE = 0xBCA6;
126 
127 // LAP (2 Lines)
128 const uint16_t HUD_LAP1 = 0xBCDA;
129 const uint16_t HUD_LAP2 = 0xBCE6;
130 
131 // ----------------------------------------------------------------------------
132 // Tilemaps
133 // ----------------------------------------------------------------------------
134 
135 // Tilemap hardware addresses
136 const uint32_t HW_FG_PSEL       = 0xE80;
137 const uint32_t HW_BG_PSEL       = 0xE82;
138 const uint32_t HW_BG_HSCROLL    = 0xE9A;
139 const uint32_t HW_FG_VSCROLL    = 0xE90;
140 const uint32_t HW_BG_VSCROLL    = 0xE92;
141 const uint32_t HW_FG_HSCROLL    = 0xE98;
142 
143 // In-Game Tilemap Defaults
144 const uint32_t TILES_PAGE_FG1     = 0x17E4C;
145 const uint32_t TILES_PAGE_BG1     = 0x17E5C;
146 const uint32_t TILES_PAGE_FG2     = 0x17E68;  // Used for road split
147 const uint32_t TILES_PAGE_BG2     = 0x17E78;  // Used for road split
148 const uint32_t TILES_DEF_LOOKUP   = 0x17E84;  // Tilemap default lookup indexes, for values in table below
149 const uint32_t TILES_DEF_LOOKUP_J = 0x178E4;
150 const uint32_t TILES_TABLE        = 0x17EAC;  // Stage Tilemap Default Values
151 const uint32_t TILES_TABLE_J      = 0x1790c;
152 
153 const uint32_t TILES_MINIMAP    = 0x8C04;
154 
155 // Table of h_scroll offsets (words) for road split
156 // Note the h_scroll is set manually during the road split from the actual road position
157 const uint32_t H_SCROLL_TABLE   = 0x30B00;
158 
159 // Tilemap: Music Selection Screen
160 const uint32_t TILEMAP_MUSIC_SELECT = 0x383F2;
161 
162 // ----------------------------------------------------------------------------
163 // Palettes
164 // ----------------------------------------------------------------------------
165 
166 // In-Game Tilemap Palettes
167 const uint32_t TILEMAP_PALS = 0xDF9C;
168 
169 // Palette: Music Select Screen
170 const uint32_t PAL_MUSIC_SELECT = 0x175CC;
171 
172 // Table of long addresses of ground colours
173 const uint32_t PAL_GND_TABLE = 0x17350;
174 
175 // Table of palette addresses
176 const uint32_t PAL_SKY_TABLE = 0x17590;
177 
178 // Palette Data: Best Outrunners Name Entry
179 const uint32_t PAL_BESTOR = 0x17DCC;
180 
181 // ----------------------------------------------------------------------------
182 // Sprites
183 // ----------------------------------------------------------------------------
184 
185 // Sprite Animation Sequences For Crashes
186 //
187 // +00 [Long] Sprite Data Frame Address
188 // +04 [Byte] Bit 7: Set to H-Flip Sprite
189 //            Bit 0: Set Sprite to Sprite Priority Higher (Unused so far?)
190 // +05 [Byte] Sprite Colour Palette
191 // +06 [Byte] Passenger Frame
192 //            OR FOR Passenger Sprites: X Offset
193 // +07 [Byte] Set to denote end of frame sequence
194 //            OR FOR Passenger Sprites: Y Offset
195 
196 const uint32_t SPRITE_CRASH_SPIN1        = 0x2294;
197 const uint32_t SPRITE_CRASH_SPIN2        = 0x22D4;
198 const uint32_t SPRITE_BUMP_DATA1         = 0x2314;
199 const uint32_t SPRITE_BUMP_DATA2         = 0x232C;
200 const uint32_t SPRITE_CRASH_MAN1         = 0x2344;
201 const uint32_t SPRITE_CRASH_GIRL1        = 0x23B4;
202 const uint32_t SPRITE_CRASH_FLIP         = 0x2424; // Flip: Car
203 const uint32_t SPRITE_CRASH_FLIP_MAN1    = 0x2464; // Flip: Man
204 const uint32_t SPRITE_CRASH_FLIP_GIRL1   = 0x255C; // Flip: Girl
205 const uint32_t SPRITE_CRASH_FLIP_MAN2    = 0x24DC; // Post Flip: Man
206 const uint32_t SPRITE_CRASH_FLIP_GIRL2   = 0x25D4; // Post Flip: Girl
207 const uint32_t SPRITE_CRASH_MAN2         = 0x2604;
208 const uint32_t SPRITE_CRASH_GIRL2        = 0x2660;
209 
210 const uint32_t SPRITE_CRASH_SPIN1_J      = SPRITE_CRASH_SPIN1 - 12;
211 const uint32_t SPRITE_CRASH_SPIN2_J      = SPRITE_CRASH_SPIN2 - 12;
212 const uint32_t SPRITE_BUMP_DATA1_J       = SPRITE_BUMP_DATA1  - 12;
213 const uint32_t SPRITE_BUMP_DATA2_J       = SPRITE_BUMP_DATA2  - 12;
214 const uint32_t SPRITE_CRASH_MAN1_J       = SPRITE_CRASH_MAN1  - 12;
215 const uint32_t SPRITE_CRASH_GIRL1_J      = SPRITE_CRASH_GIRL1 - 12;
216 const uint32_t SPRITE_CRASH_FLIP_J       = SPRITE_CRASH_FLIP  - 12;      // Flip: Car
217 const uint32_t SPRITE_CRASH_FLIP_MAN1_J  = SPRITE_CRASH_FLIP_MAN1 - 12;  // Flip: Man
218 const uint32_t SPRITE_CRASH_FLIP_GIRL1_J = SPRITE_CRASH_FLIP_GIRL1 - 12; // Flip: Girl
219 const uint32_t SPRITE_CRASH_FLIP_MAN2_J  = SPRITE_CRASH_FLIP_MAN2 - 12;  // Post Flip: Man
220 const uint32_t SPRITE_CRASH_FLIP_GIRL2_J = SPRITE_CRASH_FLIP_GIRL2 - 12; // Post Flip: Girl
221 const uint32_t SPRITE_CRASH_MAN2_J       = SPRITE_CRASH_MAN2 - 12;
222 const uint32_t SPRITE_CRASH_GIRL2_J      = SPRITE_CRASH_GIRL2 - 12;
223 
224 // Sprite Default Properties
225 //
226 // +0: Sprite Properties
227 // +1: Draw Properties
228 // +2: Sprite Priority
229 // +3: Sprite Palette
230 // +4: Sprite Type
231 // +6: Sprite X World
232 // +8: Sprite Y World
233 // +A: Sprite Z
234 // +C: Routine Address
235 const uint32_t SPRITE_DEF_PROPS1   = 0x2B70;
236 const uint32_t SPRITE_DEF_PROPS1_J = 0x2B64;
237 
238 // Best OutRunners Sprites
239 const uint32_t SPRITE_DEF_PROPS2   = 0x2FB2;
240 const uint32_t SPRITE_DEF_PROPS2_J = 0x2FA6;
241 
242 // Sprite: Cloud Frames
243 const uint32_t SPRITE_CLOUD_FRAMES   = 0x4246;
244 const uint32_t SPRITE_CLOUD_FRAMES_J = 0x423A;
245 
246 // Sprite: Mini Tree Frames
247 const uint32_t SPRITE_MINITREE_FRAMES   = 0x435C;
248 const uint32_t SPRITE_MINITREE_FRAMES_J = 0x4350;
249 
250 // Sprite: Grass Frames (Vary in thickness. Closer to the camera = Need Thicker Sprite.)
251 const uint32_t SPRITE_GRASS_FRAMES   = 0x4548;
252 const uint32_t SPRITE_GRASS_FRAMES_J = 0x453C;
253 
254 // Sprite: Sand Frames
255 const uint32_t SPRITE_SAND_FRAMES   = 0x4588;
256 const uint32_t SPRITE_SAND_FRAMES_J = 0x457C;
257 
258 // Sprite: Stone Frames
259 const uint32_t SPRITE_STONE_FRAMES   = 0x45C8;
260 const uint32_t SPRITE_STONE_FRAMES_J = 0x45BC;
261 
262 // Sprite: Water Frames (Vary in thickness. Closer to the camera = Need Thicker Sprite.)
263 const uint32_t SPRITE_WATER_FRAMES   = 0x4608;
264 const uint32_t SPRITE_WATER_FRAMES_J = 0x45FC;
265 
266 // Sprite: Shadow Frames
267 const uint32_t SPRITE_SHDW_FRAMES   = 0x7862;
268 const uint32_t SPRITE_SHDW_FRAMES_J = 0x7794;
269 
270 // Sprite: Ferrari Frames, Offsets
271 const uint32_t SPRITE_FERRARI_FRAMES   = 0x9ECC;
272 const uint32_t SPRITE_FERRARI_FRAMES_J = 0x9CF2;
273 
274 // Sprite: Frame Data For Ferrari Skid
275 const uint32_t SPRITE_SKID_FRAMES   = 0x9F1C;
276 const uint32_t SPRITE_SKID_FRAMES_J = 0x9D3A;
277 
278 // Sprite: Passenger Frames (2 Frames for each, hair up and hair down)
279 const uint32_t SPRITE_PASS_FRAMES   = 0xA6EC;
280 const uint32_t SPRITE_PASS_FRAMES_J = 0xA512;
281 
282 // Table of smoke data from wheels
283 const uint32_t SMOKE_DATA   = 0xACC6;
284 const uint32_t SMOKE_DATA_J = 0xAAEC;
285 
286 // Table of spray data from wheels
287 const uint32_t SPRAY_DATA   = 0xAD06;
288 const uint32_t SPRAY_DATA_J = 0xAB2C;
289 
290 // Sprite: Shadow Data
291 const uint32_t SPRITE_SHADOW_DATA   = 0x103B6;
292 const uint32_t SPRITE_SHADOW_DATA_J = 0xFE16;
293 
294 // Sprite: Passenger Skid Frames
295 const uint32_t SPRITE_PASS1_SKIDL   = 0x1107C;
296 const uint32_t SPRITE_PASS1_SKIDR   = 0x110C2;
297 const uint32_t SPRITE_PASS2_SKIDL   = 0x110CC;
298 const uint32_t SPRITE_PASS2_SKIDR   = 0x11112;
299 const uint32_t SPRITE_PASS1_SKIDL_J = 0x10ADC;
300 const uint32_t SPRITE_PASS1_SKIDR_J = 0x10B22;
301 const uint32_t SPRITE_PASS2_SKIDL_J = 0x10B2C;
302 const uint32_t SPRITE_PASS2_SKIDR_J = 0x10B72;
303 
304 // Long addresses of sprite data for hardware
305 const uint32_t SPRITE_TYPE_TABLE   = 0x11ED2;
306 const uint32_t SPRITE_TYPE_TABLE_J = 0x11932;
307 
308 // Master Sprite Table
309 //
310 // Each one of the following addresses contains the following:
311 //
312 // [+0] Sprite Frequency Value Bitmask [Word]
313 // [+2] Reload Value For Sprite Info Offset [Word]
314 // [+4] Start of table with x,y,type,palette etc.
315 const uint32_t SPRITE_MASTER_TABLE   = 0x1A43C;
316 const uint32_t SPRITE_MASTER_TABLE_J = 0x19C96;
317 
318 // OutRun logo data
319 const uint32_t SPRITE_LOGO_BG      = 0x11162;
320 const uint32_t SPRITE_LOGO_CAR     = 0x1128E;
321 const uint32_t SPRITE_LOGO_BIRD1   = 0x112C0;
322 const uint32_t SPRITE_LOGO_BIRD2   = 0x112F2;
323 const uint32_t SPRITE_LOGO_BASE    = 0x1125C;
324 const uint32_t SPRITE_LOGO_TEXT    = 0x11194;
325 const uint32_t SPRITE_LOGO_PALM1   = 0x111C6;
326 const uint32_t SPRITE_LOGO_PALM2   = 0x111F8;
327 const uint32_t SPRITE_LOGO_PALM3   = 0x1122A;
328 const uint32_t SPRITE_LOGO_BG_J    = SPRITE_LOGO_BG - 0x5A0;
329 const uint32_t SPRITE_LOGO_CAR_J   = SPRITE_LOGO_CAR - 0x5A0;
330 const uint32_t SPRITE_LOGO_BIRD1_J = SPRITE_LOGO_BIRD1 - 0x5A0;
331 const uint32_t SPRITE_LOGO_BIRD2_J = SPRITE_LOGO_BIRD2 - 0x5A0;
332 const uint32_t SPRITE_LOGO_BASE_J  = SPRITE_LOGO_BASE - 0x5A0;
333 const uint32_t SPRITE_LOGO_TEXT_J  = SPRITE_LOGO_TEXT - 0x5A0;
334 const uint32_t SPRITE_LOGO_PALM1_J = SPRITE_LOGO_PALM1 - 0x5A0;
335 const uint32_t SPRITE_LOGO_PALM2_J = SPRITE_LOGO_PALM2 - 0x5A0;
336 const uint32_t SPRITE_LOGO_PALM3_J = SPRITE_LOGO_PALM3 - 0x5A0;
337 
338 // Music Selection Screen - Sprite Data
339 const uint32_t SPRITE_FM_LEFT       = 0x11892;
340 const uint32_t SPRITE_FM_CENTRE     = 0x1189C;
341 const uint32_t SPRITE_FM_RIGHT      = 0x118A6;
342 const uint32_t SPRITE_DIAL_LEFT     = 0x118B0;
343 const uint32_t SPRITE_DIAL_CENTRE   = 0x118BA;
344 const uint32_t SPRITE_DIAL_RIGHT    = 0x118C4;
345 const uint32_t SPRITE_EQ            = 0x118CE; // EQ Sprite, Part of Radio
346 const uint32_t SPRITE_RADIO         = 0x118D8;
347 const uint32_t SPRITE_HAND_LEFT     = 0x118E2;
348 const uint32_t SPRITE_HAND_CENTRE   = 0x118EC;
349 const uint32_t SPRITE_HAND_RIGHT    = 0x118F6;
350 
351 const uint32_t SPRITE_FM_LEFT_J     = SPRITE_FM_LEFT - 0x5A0;
352 const uint32_t SPRITE_FM_CENTRE_J   = SPRITE_FM_CENTRE - 0x5A0;
353 const uint32_t SPRITE_FM_RIGHT_J    = SPRITE_FM_RIGHT - 0x5A0;
354 const uint32_t SPRITE_DIAL_LEFT_J   = SPRITE_DIAL_LEFT - 0x5A0;
355 const uint32_t SPRITE_DIAL_CENTRE_J = SPRITE_DIAL_CENTRE - 0x5A0;
356 const uint32_t SPRITE_DIAL_RIGHT_J  = SPRITE_DIAL_RIGHT - 0x5A0;
357 const uint32_t SPRITE_EQ_J          = SPRITE_EQ - 0x5A0;
358 const uint32_t SPRITE_RADIO_J       = SPRITE_RADIO - 0x5A0;
359 const uint32_t SPRITE_HAND_LEFT_J   = SPRITE_HAND_LEFT - 0x5A0;
360 const uint32_t SPRITE_HAND_CENTRE_J = SPRITE_HAND_CENTRE - 0x5A0;
361 const uint32_t SPRITE_HAND_RIGHT_J  = SPRITE_HAND_RIGHT - 0x5A0;
362 
363 // Shadow data
364 const uint32_t SPRITE_SHDW_SMALL   = 0x1193C;
365 const uint32_t SPRITE_SHDW_SMALL_J = 0x1139C;
366 
367 // Sprite Collision X Offsets [Signed]
368 // Table is indexed with the type of sprite.
369 //
370 // Format:
371 // Word 1: X-Left Offset
372 // Word 2: X-Right Offset
373 const uint32_t SPRITE_X_OFFS = 0x1212A;
374 
375 // Sprite Zoom Lookup Table.
376 // Table Of Longs that represent X & Y Zoom Value
377 const uint32_t SPRITE_ZOOM_LOOKUP = 0x28000;
378 
379 const uint32_t MOVEMENT_LOOKUP_Z = 0x30900;
380 
381 // Table to alter sprite based on its y position.
382 //
383 // Input = Y Position
384 //
385 // Format:
386 //
387 // +0: Frame Number To Use
388 // +2: Entry In Zoom Lookup Table
389 const uint32_t MAP_Y_TO_FRAME = 0x30A00;
390 
391 // ----------------------------------------------------------------------------
392 // Road
393 // ----------------------------------------------------------------------------
394 
395 // Road Data Lookup Table
396 // Long Addresses where road data is looked up from.
397 // Note this only contains the road data itself. Namely the x position, and the length of each segment.
398 //
399 // The height and width are fetched from elsewhere.
400 // The sprites etc are fetched from elsewhere.
401 //
402 // Same location in both Jap and USA Roms.
403 //
404 // Note: Although 1AD92 might not be used, this seems to be a section of road with road split / checkpoint sign
405 const uint32_t ROAD_DATA_LOOKUP = 0x1224;
406 
407 // Lookup table of road height information.
408 // Each entry is a long address into this rom.
409 const uint32_t ROAD_HEIGHT_LOOKUP   = 0x220A;
410 const uint32_t ROAD_HEIGHT_LOOKUP_J = 0x21F6;
411 
412 // Data for Road Split (Same Address for Jap and USA Roms)
413 const uint32_t ROAD_DATA_SPLIT = 0x3A33E;
414 
415 // Data for Road Bonus (Same Address for Jap and USA Roms)
416 const uint32_t ROAD_DATA_BONUS = 0x3ACA0;
417 
418 // Data for Road Background Colour (Same Address for Jap and USA Roms)
419 const uint32_t ROAD_BGCOLOR = 0x109EE;
420 
421 // Segment data for End Sequences (Master CPU Code)
422 const uint32_t ROAD_SEG_TABLE_END   = 0xE514;
423 const uint32_t ROAD_SEG_TABLE_END_J = 0xE1FE;
424 
425 // Road Segment Table Information (Master CPU Code)
426 const uint32_t ROAD_SEG_TABLE   = 0xE528;
427 const uint32_t ROAD_SEG_TABLE_J = 0xE212;
428 
429 // Segment data for Road Split (Master CPU Code)
430 const uint32_t ROAD_SEG_TABLE_SPLIT   = 0x1DFA4;
431 const uint32_t ROAD_SEG_TABLE_SPLIT_J = 0x1D5A6;
432 
433 
434 // ----------------------------------------------------------------------------
435 // Traffic Data
436 // ----------------------------------------------------------------------------
437 
438 // Traffic Property Table
439 const uint32_t TRAFFIC_PROPS   = 0x4CFA;
440 const uint32_t TRAFFIC_PROPS_J = 0x4CDE;
441 
442 // There are six types of traffic in OutRun:
443 // Lorry, Pickup, Beetle, BMW, Corvette, Porsche.
444 //
445 // Each has 5 directional frames, including horizontal flipping.
446 // Some vehicles have different frames for inclines.
447 //
448 // Format is [0x20 byte boundaries]:
449 //
450 // [+0] Straight Frame
451 // [+4] Straight Frame (same as above)
452 // [+8] Right Frame
453 // [+C] Rightmost Frame
454 //
455 // [+10] Straight Frame  [uphill version]
456 // [+14] Straight Frame  [uphill version] (same as above)
457 // [+18] Right Frame     [uphill version]
458 // [+1C] Rightmost Frame [uphill version]
459 
460 const uint32_t TRAFFIC_DATA     = 0x5424;
461 const uint32_t TRAFFIC_DATA_J   = 0x5362;
462 
463 const uint32_t SPRITE_PORSCHE   = 0xF290;
464 const uint32_t SPRITE_PORSCHE_J = 0xED22;
465 
466 // ----------------------------------------------------------------------------
467 // Animation Sequences
468 // ----------------------------------------------------------------------------
469 
470 // Flag Waver
471 const uint32_t ANIM_SEQ_FLAG   = 0x12382;
472 const uint32_t ANIM_SEQ_FLAG_J = ANIM_SEQ_FLAG - 0x5A0;
473 
474 // Ferrari Drive-In Sequence
475 const uint32_t ANIM_FERRARI_CURR   = 0x12970;
476 const uint32_t ANIM_FERRARI_NEXT   = 0x129C0;
477 const uint32_t ANIM_FERRARI_CURR_J = ANIM_FERRARI_CURR - 0x5A0;
478 const uint32_t ANIM_FERRARI_NEXT_J = ANIM_FERRARI_NEXT - 0x5A0;
479 
480 const uint32_t ANIM_PASS1_CURR   = 0x129C8;
481 const uint32_t ANIM_PASS1_NEXT   = 0x12A18;
482 const uint32_t ANIM_PASS1_CURR_J = ANIM_PASS1_CURR - 0x5A0;
483 const uint32_t ANIM_PASS1_NEXT_J = ANIM_PASS1_NEXT - 0x5A0;
484 
485 const uint32_t ANIM_PASS2_CURR   = 0x12A20;
486 const uint32_t ANIM_PASS2_NEXT   = 0x12A70;
487 const uint32_t ANIM_PASS2_CURR_J = ANIM_PASS2_CURR - 0x5A0;
488 const uint32_t ANIM_PASS2_NEXT_J = ANIM_PASS2_NEXT - 0x5A0;
489 
490 // ----------------------------------------------------------------------------
491 // End Sequence / Bonus Mode
492 // ----------------------------------------------------------------------------
493 
494 // Ferrari Sprite Frame Data For Bonus Mode
495 //
496 // +0 [Long]: Address of frame
497 // +4 [Byte]: Passenger Offset (always 0!)
498 // +5 [Byte]: Ferrari X Change
499 // +6 [Byte]: Sprite Colour Palette
500 // +7 [Byte]: H-Flip
501 const uint32_t ANIM_FERRARI_FRAMES   = 0xA2F0;
502 const uint32_t ANIM_FERRARI_FRAMES_J = 0xA116;
503 
504 // Note each table is used by every end sequence animation.
505 // And contains the variance for that particular animation.
506 const uint32_t ANIM_ENDSEQ_OBJ1      = 0x124B0; // Ferrari Door Opening
507 const uint32_t ANIM_ENDSEQ_OBJ2      = 0x124D8; // Ferrari Interior
508 const uint32_t ANIM_ENDSEQ_OBJ3      = 0x12500; // Car Shadow & Man Sprite
509 const uint32_t ANIM_ENDSEQ_OBJ4      = 0x12528; // Man Shadow & Female Sprite
510 const uint32_t ANIM_ENDSEQ_OBJ5      = 0x12550; // Female Shadow & Person Presenting Trophy
511 const uint32_t ANIM_ENDSEQ_OBJ6      = 0x12578;
512 const uint32_t ANIM_ENDSEQ_OBJ7      = 0x125A0;
513 const uint32_t ANIM_ENDSEQ_OBJ8      = 0x125C8; // Animation Data Sequence For Trophy Person
514 const uint32_t ANIM_ENDSEQ_OBJA      = 0x125F0;
515 const uint32_t ANIM_ENDSEQ_OBJB      = 0x12618;
516 const uint32_t ANIM_END_TABLE        = 0x123A2; // Start/End Animation Sequence Markers (Only End Markers Appear To Be Used)
517 const uint32_t ANIM_ENDSEQ_OBJ1_J    = ANIM_ENDSEQ_OBJ1 - 0x5A0;
518 const uint32_t ANIM_ENDSEQ_OBJ2_J    = ANIM_ENDSEQ_OBJ2 - 0x5A0;
519 const uint32_t ANIM_ENDSEQ_OBJ3_J    = ANIM_ENDSEQ_OBJ3 - 0x5A0;
520 const uint32_t ANIM_ENDSEQ_OBJ4_J    = ANIM_ENDSEQ_OBJ4 - 0x5A0;
521 const uint32_t ANIM_ENDSEQ_OBJ5_J    = ANIM_ENDSEQ_OBJ5 - 0x5A0;
522 const uint32_t ANIM_ENDSEQ_OBJ6_J    = ANIM_ENDSEQ_OBJ6 - 0x5A0;
523 const uint32_t ANIM_ENDSEQ_OBJ7_J    = ANIM_ENDSEQ_OBJ7 - 0x5A0;
524 const uint32_t ANIM_ENDSEQ_OBJ8_J    = ANIM_ENDSEQ_OBJ8 - 0x5A0;
525 const uint32_t ANIM_ENDSEQ_OBJA_J    = ANIM_ENDSEQ_OBJA - 0x5A0;
526 const uint32_t ANIM_ENDSEQ_OBJB_J    = ANIM_ENDSEQ_OBJB - 0x5A0;
527 const uint32_t ANIM_END_TABLE_J      = ANIM_END_TABLE   - 0x5A0;
528 // ----------------------------------------------------------------------------
529 // Course Map Data
530 // ----------------------------------------------------------------------------
531 
532 // Course Map Sprite Data
533 const uint32_t SPRITE_COURSEMAP   = 0x26BE;
534 const uint32_t SPRITE_COURSEMAP_J = 0x26B2; // Japanese ROMs
535 
536 // Coursemap Sprite Components
537 const uint32_t SPRITE_COURSEMAP_TOP   = 0x3784;
538 const uint32_t SPRITE_COURSEMAP_BOT   = 0x386C;
539 const uint32_t SPRITE_COURSEMAP_END   = 0x3954;
540 const uint32_t SPRITE_COURSEMAP_TOP_J = SPRITE_COURSEMAP_TOP - 12;
541 const uint32_t SPRITE_COURSEMAP_BOT_J = SPRITE_COURSEMAP_BOT - 12;
542 const uint32_t SPRITE_COURSEMAP_END_J = SPRITE_COURSEMAP_END - 12;
543 
544 // Minicar
545 const uint32_t SPRITE_MINICAR_RIGHT   = 0x10C58;
546 const uint32_t SPRITE_MINICAR_UP      = 0x10C62;
547 const uint32_t SPRITE_MINICAR_DOWN    = 0x10C6C;
548 const uint32_t SPRITE_MINICAR_RIGHT_J = SPRITE_MINICAR_RIGHT - 0x5A0;
549 const uint32_t SPRITE_MINICAR_UP_J    = SPRITE_MINICAR_UP - 0x5A0;
550 const uint32_t SPRITE_MINICAR_DOWN_J  = SPRITE_MINICAR_DOWN - 0x5A0;
551 
552 // Convert route information to piece index to colour
553 const uint32_t MAP_ROUTE_LOOKUP = 0x3636;
554 
555 // X and Y Movement table for Minicar
556 const uint32_t MAP_MOVEMENT_LEFT = 0x3A34;
557 const uint32_t MAP_MOVEMENT_RIGHT = 0x3AB4;
558 
559 // ----------------------------------------------------------------------------
560 // Best OutRunners Data
561 // ----------------------------------------------------------------------------
562 
563 // Tiles for minicars that run across the text layer
564 const uint32_t TILES_MINICARS1 = 0xD62A;
565 const uint32_t TILES_MINICARS2 = 0xD670; // smoke tiles
566 
567 // Default Score Data
568 const uint32_t DEFAULT_SCORES  = 0xD676;
569 
570 // Alphabet characters for initial entry
571 const uint32_t TILES_ALPHABET  = 0xD5A4;
572 
573 // ----------------------------------------------------------------------------
574 // Music Selection Data
575 // ----------------------------------------------------------------------------
576 
577 // Palette to cycle the graphical equalizer on the radio
578 const uint32_t MUSIC_EQ_PAL = 0xCCAA;
579 
580 // ----------------------------------------------------------------------------
581 // Data
582 // ----------------------------------------------------------------------------
583 
584 // X,Y Offsets of passenger 1 (Man) from car
585 //
586 // Format
587 //
588 // Word 1: Frame 1 X Offset
589 // Word 2: Frame 1 Y Offset
590 // Word 3: Frame 1 X Offset H-FLIP
591 // Word 4: Frame 1 Y Offset H-FLIP
592 //
593 // Word 5: Frame 2 X Offset
594 // Word 6: Frame 2 Y Offset
595 //
596 // etc.
597 const uint32_t PASS1_OFFSET = 0xA6FC;
598 const uint32_t PASS2_OFFSET = 0xA75C;
599 
600 // Map stage ID to number 0-14
601 const uint32_t MAP_STAGE_ID = 0xDDB4;
602 
603 // Width / Height Table for sprites
604 const uint32_t WH_TABLE = 0x20000;
605 
606 // Movement Lookup Table
607 // Used by:
608 // - Logo Bird Animation In Attract Mode
609 // - Car Flip In Crash Scenario
610 //
611 // Entries
612 // 0     - 0xFF : X Position
613 // 0x100 - 0x1FF: Y Position
614 const uint32_t DATA_MOVEMENT = 0x30800;