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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
/*************************************************************************
Sega Z80-3D system
*************************************************************************/
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "sound/discrete.h"
#include "sound/samples.h"
/* sprites are scaled in the analog domain; to give a better */
/* rendition of this, we scale in the X direction by this factor */
#define TURBO_X_SCALE 2
class turbo_state : public driver_device
{
public:
turbo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "subcpu"),
m_i8255_0(*this, "i8255_0"),
m_i8255_1(*this, "i8255_1"),
m_i8255_2(*this, "i8255_2"),
m_i8255_3(*this, "i8255_3"),
m_gfx1(*this, "gfx1"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_sprite_position(*this, "spritepos"),
m_samples(*this, "samples"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen")
{ }
/* device/memory pointers */
required_device<z80_device> m_maincpu;
optional_device<z80_device> m_subcpu;
required_device<i8255_device> m_i8255_0;
required_device<i8255_device> m_i8255_1;
optional_device<i8255_device> m_i8255_2;
optional_device<i8255_device> m_i8255_3;
required_memory_region m_gfx1;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_sprite_position;
required_device<samples_device> m_samples;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
UINT8 * m_buckrog_bitmap_ram;
/* machine states */
UINT8 m_i8279_scanlines;
/* sound state */
UINT8 m_turbo_osel;
UINT8 m_turbo_bsel;
UINT8 m_sound_state[3];
/* video state */
tilemap_t * m_fg_tilemap;
/* Turbo-specific states */
UINT8 m_turbo_opa;
UINT8 m_turbo_opb;
UINT8 m_turbo_opc;
UINT8 m_turbo_ipa;
UINT8 m_turbo_ipb;
UINT8 m_turbo_ipc;
UINT8 m_turbo_fbpla;
UINT8 m_turbo_fbcol;
UINT8 m_turbo_speed;
UINT8 m_turbo_collision;
UINT8 m_turbo_last_analog;
UINT8 m_turbo_accel;
/* Subroc-specific states */
UINT8 m_subroc3d_col;
UINT8 m_subroc3d_ply;
UINT8 m_subroc3d_flip;
UINT8 m_subroc3d_mdis;
UINT8 m_subroc3d_mdir;
UINT8 m_subroc3d_tdis;
UINT8 m_subroc3d_tdir;
UINT8 m_subroc3d_fdis;
UINT8 m_subroc3d_fdir;
UINT8 m_subroc3d_hdis;
UINT8 m_subroc3d_hdir;
/* Buck Rogers-specific states */
UINT8 m_buckrog_fchg;
UINT8 m_buckrog_mov;
UINT8 m_buckrog_obch;
UINT8 m_buckrog_command;
UINT8 m_buckrog_myship;
int m_last_sound_a;
struct sprite_info
{
UINT16 ve; /* VE0-15 signals for this row */
UINT8 lst; /* LST0-7 signals for this row */
UINT32 latched[8]; /* latched pixel data */
UINT8 plb[8]; /* latched PLB state */
UINT32 offset[8]; /* current offset for this row */
UINT32 frac[8]; /* leftover fraction */
UINT32 step[8]; /* stepping value */
};
DECLARE_WRITE8_MEMBER(scanlines_w);
DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(turbo_collision_r);
DECLARE_WRITE8_MEMBER(turbo_collision_clear_w);
DECLARE_WRITE8_MEMBER(turbo_analog_reset_w);
DECLARE_WRITE8_MEMBER(turbo_coin_and_lamp_w);
DECLARE_READ8_MEMBER(buckrog_cpu2_command_r);
DECLARE_READ8_MEMBER(buckrog_port_2_r);
DECLARE_READ8_MEMBER(buckrog_port_3_r);
DECLARE_WRITE8_MEMBER(turbo_videoram_w);
DECLARE_WRITE8_MEMBER(buckrog_bitmap_w);
DECLARE_WRITE8_MEMBER(turbo_ppi0a_w);
DECLARE_WRITE8_MEMBER(turbo_ppi0b_w);
DECLARE_WRITE8_MEMBER(turbo_ppi0c_w);
DECLARE_WRITE8_MEMBER(turbo_ppi1a_w);
DECLARE_WRITE8_MEMBER(turbo_ppi1b_w);
DECLARE_WRITE8_MEMBER(turbo_ppi1c_w);
DECLARE_WRITE8_MEMBER(turbo_ppi3c_w);
DECLARE_WRITE8_MEMBER(subroc3d_ppi0a_w);
DECLARE_WRITE8_MEMBER(subroc3d_ppi0c_w);
DECLARE_WRITE8_MEMBER(subroc3d_ppi0b_w);
DECLARE_WRITE8_MEMBER(buckrog_ppi0a_w);
DECLARE_WRITE8_MEMBER(buckrog_ppi0b_w);
DECLARE_WRITE8_MEMBER(buckrog_ppi0c_w);
DECLARE_WRITE8_MEMBER(buckrog_ppi1c_w);
DECLARE_READ8_MEMBER(turbo_analog_r);
DECLARE_WRITE8_MEMBER(buckrog_i8255_0_w);
DECLARE_DRIVER_INIT(buckrog_enc);
DECLARE_DRIVER_INIT(turbo_enc);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
DECLARE_VIDEO_START(turbo);
DECLARE_PALETTE_INIT(turbo);
DECLARE_PALETTE_INIT(subroc3d);
DECLARE_MACHINE_RESET(buckrog);
DECLARE_VIDEO_START(buckrog);
DECLARE_PALETTE_INIT(buckrog);
UINT32 screen_update_turbo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_subroc3d(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_buckrog(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(delayed_i8255_w);
DECLARE_WRITE8_MEMBER(turbo_sound_a_w);
DECLARE_WRITE8_MEMBER(turbo_sound_b_w);
DECLARE_WRITE8_MEMBER(turbo_sound_c_w);
DECLARE_WRITE8_MEMBER(subroc3d_sound_a_w);
DECLARE_WRITE8_MEMBER(subroc3d_sound_b_w);
DECLARE_WRITE8_MEMBER(subroc3d_sound_c_w);
DECLARE_WRITE8_MEMBER(buckrog_sound_a_w);
DECLARE_WRITE8_MEMBER(buckrog_sound_b_w);
inline UINT32 sprite_xscale(UINT8 dacinput, double vr1, double vr2, double cext);
void turbo_prepare_sprites(UINT8 y, sprite_info *info);
UINT32 turbo_get_sprite_bits(const UINT8 *sprite_gfxdata, UINT8 road, sprite_info *sprinfo);
void subroc3d_prepare_sprites(UINT8 y, sprite_info *info);
UINT32 subroc3d_get_sprite_bits(const UINT8 *sprite_gfxdata, sprite_info *sprinfo, UINT8 *plb);
void buckrog_prepare_sprites(UINT8 y, sprite_info *info);
UINT32 buckrog_get_sprite_bits(const UINT8 *sprite_gfxdata, sprite_info *sprinfo, UINT8 *plb);
void turbo_rom_decode();
};
/*----------- defined in audio/turbo.c -----------*/
MACHINE_CONFIG_EXTERN( turbo_samples );
MACHINE_CONFIG_EXTERN( subroc3d_samples );
MACHINE_CONFIG_EXTERN( buckrog_samples );
|