mirror of
https://github.com/holub/mame
synced 2025-05-25 23:35:26 +03:00
Added driver_data struct and save states to n8080.c
This commit is contained in:
parent
09cb5b9ffc
commit
b5af35345a
@ -10,25 +10,9 @@
|
||||
#include "sound/dac.h"
|
||||
#include "includes/n8080.h"
|
||||
|
||||
static int n8080_hardware;
|
||||
|
||||
static emu_timer* sound_timer[3];
|
||||
|
||||
static int helifire_dac_phase;
|
||||
|
||||
static const double ATTACK_RATE = 10e-6 * 500;
|
||||
static const double DECAY_RATE = 10e-6 * 16000;
|
||||
|
||||
static double helifire_dac_volume;
|
||||
static double helifire_dac_timing;
|
||||
|
||||
static UINT16 prev_sound_pins;
|
||||
static UINT16 curr_sound_pins;
|
||||
|
||||
static int mono_flop[3];
|
||||
|
||||
|
||||
|
||||
static const sn76477_interface sheriff_sn76477_interface =
|
||||
{
|
||||
RES_K(36) , /* 04 */
|
||||
@ -85,16 +69,17 @@ static const sn76477_interface spacefev_sn76477_interface =
|
||||
};
|
||||
|
||||
|
||||
static void spacefev_update_SN76477_status(const device_config *sn)
|
||||
static void spacefev_update_SN76477_status( const device_config *sn )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)sn->machine->driver_data;
|
||||
double dblR0 = RES_M(1.0);
|
||||
double dblR1 = RES_M(1.5);
|
||||
|
||||
if (!mono_flop[0])
|
||||
if (!state->mono_flop[0])
|
||||
{
|
||||
dblR0 = 1 / (1 / RES_K(150) + 1 / dblR0); /* ? */
|
||||
}
|
||||
if (!mono_flop[1])
|
||||
if (!state->mono_flop[1])
|
||||
{
|
||||
dblR1 = 1 / (1 / RES_K(620) + 1 / dblR1); /* ? */
|
||||
}
|
||||
@ -104,19 +89,20 @@ static void spacefev_update_SN76477_status(const device_config *sn)
|
||||
sn76477_vco_res_w(sn, dblR1);
|
||||
|
||||
sn76477_enable_w(sn,
|
||||
!mono_flop[0] &&
|
||||
!mono_flop[1] &&
|
||||
!mono_flop[2]);
|
||||
!state->mono_flop[0] &&
|
||||
!state->mono_flop[1] &&
|
||||
!state->mono_flop[2]);
|
||||
|
||||
sn76477_vco_w(sn, mono_flop[1]);
|
||||
sn76477_vco_w(sn, state->mono_flop[1]);
|
||||
|
||||
sn76477_mixer_b_w(sn, mono_flop[0]);
|
||||
sn76477_mixer_b_w(sn, state->mono_flop[0]);
|
||||
}
|
||||
|
||||
|
||||
static void sheriff_update_SN76477_status(const device_config *sn)
|
||||
static void sheriff_update_SN76477_status( const device_config *sn )
|
||||
{
|
||||
if (mono_flop[1])
|
||||
n8080_state *state = (n8080_state *)sn->machine->driver_data;
|
||||
if (state->mono_flop[1])
|
||||
{
|
||||
sn76477_vco_voltage_w(sn, 5);
|
||||
}
|
||||
@ -126,45 +112,48 @@ static void sheriff_update_SN76477_status(const device_config *sn)
|
||||
}
|
||||
|
||||
sn76477_enable_w(sn,
|
||||
!mono_flop[0] &&
|
||||
!mono_flop[1]);
|
||||
!state->mono_flop[0] &&
|
||||
!state->mono_flop[1]);
|
||||
|
||||
sn76477_vco_w(sn, mono_flop[0]);
|
||||
sn76477_vco_w(sn, state->mono_flop[0]);
|
||||
|
||||
sn76477_mixer_b_w(sn, !mono_flop[0]);
|
||||
sn76477_mixer_b_w(sn, !state->mono_flop[0]);
|
||||
}
|
||||
|
||||
|
||||
static void update_SN76477_status(const device_config *device)
|
||||
static void update_SN76477_status( const device_config *device )
|
||||
{
|
||||
if (n8080_hardware == 1)
|
||||
n8080_state *state = (n8080_state *)device->machine->driver_data;
|
||||
if (state->n8080_hardware == 1)
|
||||
{
|
||||
spacefev_update_SN76477_status(device);
|
||||
}
|
||||
if (n8080_hardware == 2)
|
||||
if (state->n8080_hardware == 2)
|
||||
{
|
||||
sheriff_update_SN76477_status(device);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void start_mono_flop(const device_config *sn, int n, attotime expire)
|
||||
static void start_mono_flop( const device_config *sn, int n, attotime expire )
|
||||
{
|
||||
mono_flop[n] = 1;
|
||||
n8080_state *state = (n8080_state *)sn->machine->driver_data;
|
||||
state->mono_flop[n] = 1;
|
||||
|
||||
update_SN76477_status(sn);
|
||||
|
||||
timer_adjust_oneshot(sound_timer[n], expire, n);
|
||||
timer_adjust_oneshot(state->sound_timer[n], expire, n);
|
||||
}
|
||||
|
||||
|
||||
static void stop_mono_flop(const device_config *sn, int n)
|
||||
static void stop_mono_flop( const device_config *sn, int n )
|
||||
{
|
||||
mono_flop[n] = 0;
|
||||
n8080_state *state = (n8080_state *)sn->machine->driver_data;
|
||||
state->mono_flop[n] = 0;
|
||||
|
||||
update_SN76477_status(sn);
|
||||
|
||||
timer_adjust_oneshot(sound_timer[n], attotime_never, n);
|
||||
timer_adjust_oneshot(state->sound_timer[n], attotime_never, n);
|
||||
}
|
||||
|
||||
|
||||
@ -174,10 +163,11 @@ static TIMER_CALLBACK( stop_mono_flop_callback )
|
||||
}
|
||||
|
||||
|
||||
static void spacefev_sound_pins_changed(running_machine *machine)
|
||||
static void spacefev_sound_pins_changed( running_machine *machine )
|
||||
{
|
||||
const device_config *sn = devtag_get_device(machine, "snsnd");
|
||||
UINT16 changes = ~curr_sound_pins & prev_sound_pins;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
UINT16 changes = ~state->curr_sound_pins & state->prev_sound_pins;
|
||||
|
||||
if (changes & (1 << 0x3))
|
||||
{
|
||||
@ -206,10 +196,11 @@ static void spacefev_sound_pins_changed(running_machine *machine)
|
||||
}
|
||||
|
||||
|
||||
static void sheriff_sound_pins_changed(running_machine *machine)
|
||||
static void sheriff_sound_pins_changed( running_machine *machine )
|
||||
{
|
||||
const device_config *sn = devtag_get_device(machine, "snsnd");
|
||||
UINT16 changes = ~curr_sound_pins & prev_sound_pins;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
UINT16 changes = ~state->curr_sound_pins & state->prev_sound_pins;
|
||||
|
||||
if (changes & (1 << 0x6))
|
||||
{
|
||||
@ -230,13 +221,14 @@ static void sheriff_sound_pins_changed(running_machine *machine)
|
||||
}
|
||||
|
||||
|
||||
static void helifire_sound_pins_changed(running_machine *machine)
|
||||
static void helifire_sound_pins_changed( running_machine *machine )
|
||||
{
|
||||
UINT16 changes = ~curr_sound_pins & prev_sound_pins;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
UINT16 changes = ~state->curr_sound_pins & state->prev_sound_pins;
|
||||
|
||||
/* ((curr_sound_pins >> 0xA) & 1) not emulated */
|
||||
/* ((curr_sound_pins >> 0xB) & 1) not emulated */
|
||||
/* ((curr_sound_pins >> 0xC) & 1) not emulated */
|
||||
/* ((state->curr_sound_pins >> 0xa) & 1) not emulated */
|
||||
/* ((state->curr_sound_pins >> 0xb) & 1) not emulated */
|
||||
/* ((state->curr_sound_pins >> 0xc) & 1) not emulated */
|
||||
|
||||
if (changes & (1 << 6))
|
||||
{
|
||||
@ -245,30 +237,26 @@ static void helifire_sound_pins_changed(running_machine *machine)
|
||||
}
|
||||
|
||||
|
||||
static void sound_pins_changed(running_machine *machine)
|
||||
static void sound_pins_changed( running_machine *machine )
|
||||
{
|
||||
if (n8080_hardware == 1)
|
||||
{
|
||||
spacefev_sound_pins_changed(machine);
|
||||
}
|
||||
if (n8080_hardware == 2)
|
||||
{
|
||||
sheriff_sound_pins_changed(machine);
|
||||
}
|
||||
if (n8080_hardware == 3)
|
||||
{
|
||||
helifire_sound_pins_changed(machine);
|
||||
}
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
prev_sound_pins = curr_sound_pins;
|
||||
if (state->n8080_hardware == 1)
|
||||
spacefev_sound_pins_changed(machine);
|
||||
if (state->n8080_hardware == 2)
|
||||
sheriff_sound_pins_changed(machine);
|
||||
if (state->n8080_hardware == 3)
|
||||
helifire_sound_pins_changed(machine);
|
||||
|
||||
state->prev_sound_pins = state->curr_sound_pins;
|
||||
}
|
||||
|
||||
|
||||
static void delayed_sound_1(running_machine *machine, int data)
|
||||
static void delayed_sound_1( running_machine *machine, int data )
|
||||
{
|
||||
static UINT8 prev_data = 0;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
curr_sound_pins &= ~(
|
||||
state->curr_sound_pins &= ~(
|
||||
(1 << 0x7) |
|
||||
(1 << 0x5) |
|
||||
(1 << 0x6) |
|
||||
@ -276,26 +264,26 @@ static void delayed_sound_1(running_machine *machine, int data)
|
||||
(1 << 0x4) |
|
||||
(1 << 0x1));
|
||||
|
||||
if (~data & 0x01) curr_sound_pins |= 1 << 0x7;
|
||||
if (~data & 0x02) curr_sound_pins |= 1 << 0x5; /* pulse */
|
||||
if (~data & 0x04) curr_sound_pins |= 1 << 0x6; /* pulse */
|
||||
if (~data & 0x08) curr_sound_pins |= 1 << 0x3; /* pulse (except in Helifire) */
|
||||
if (~data & 0x10) curr_sound_pins |= 1 << 0x4; /* pulse (except in Helifire) */
|
||||
if (~data & 0x20) curr_sound_pins |= 1 << 0x1;
|
||||
if (~data & 0x01) state->curr_sound_pins |= 1 << 0x7;
|
||||
if (~data & 0x02) state->curr_sound_pins |= 1 << 0x5; /* pulse */
|
||||
if (~data & 0x04) state->curr_sound_pins |= 1 << 0x6; /* pulse */
|
||||
if (~data & 0x08) state->curr_sound_pins |= 1 << 0x3; /* pulse (except in Helifire) */
|
||||
if (~data & 0x10) state->curr_sound_pins |= 1 << 0x4; /* pulse (except in Helifire) */
|
||||
if (~data & 0x20) state->curr_sound_pins |= 1 << 0x1;
|
||||
|
||||
if (n8080_hardware == 1)
|
||||
if (state->n8080_hardware == 1)
|
||||
{
|
||||
if (data & ~prev_data & 0x10)
|
||||
if (data & ~state->prev_snd_data & 0x10)
|
||||
{
|
||||
spacefev_start_red_cannon(machine);
|
||||
}
|
||||
|
||||
spacefev_red_screen = data & 0x08;
|
||||
state->spacefev_red_screen = data & 0x08;
|
||||
}
|
||||
|
||||
sound_pins_changed(machine);
|
||||
|
||||
prev_data = data;
|
||||
state->prev_snd_data = data;
|
||||
}
|
||||
|
||||
|
||||
@ -305,31 +293,29 @@ static TIMER_CALLBACK( delayed_sound_1_callback )
|
||||
}
|
||||
|
||||
|
||||
static void delayed_sound_2(running_machine *machine, int data)
|
||||
static void delayed_sound_2( running_machine *machine, int data )
|
||||
{
|
||||
curr_sound_pins &= ~(
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state->curr_sound_pins &= ~(
|
||||
(1 << 0x8) |
|
||||
(1 << 0x9) |
|
||||
(1 << 0xA) |
|
||||
(1 << 0xB) |
|
||||
(1 << 0xa) |
|
||||
(1 << 0xb) |
|
||||
(1 << 0x2) |
|
||||
(1 << 0xC));
|
||||
(1 << 0xc));
|
||||
|
||||
if (~data & 0x01) curr_sound_pins |= 1 << 0x8;
|
||||
if (~data & 0x02) curr_sound_pins |= 1 << 0x9;
|
||||
if (~data & 0x04) curr_sound_pins |= 1 << 0xA;
|
||||
if (~data & 0x08) curr_sound_pins |= 1 << 0xB;
|
||||
if (~data & 0x10) curr_sound_pins |= 1 << 0x2; /* pulse */
|
||||
if (~data & 0x20) curr_sound_pins |= 1 << 0xC;
|
||||
if (~data & 0x01) state->curr_sound_pins |= 1 << 0x8;
|
||||
if (~data & 0x02) state->curr_sound_pins |= 1 << 0x9;
|
||||
if (~data & 0x04) state->curr_sound_pins |= 1 << 0xa;
|
||||
if (~data & 0x08) state->curr_sound_pins |= 1 << 0xb;
|
||||
if (~data & 0x10) state->curr_sound_pins |= 1 << 0x2; /* pulse */
|
||||
if (~data & 0x20) state->curr_sound_pins |= 1 << 0xc;
|
||||
|
||||
if (n8080_hardware == 1)
|
||||
{
|
||||
if (state->n8080_hardware == 1)
|
||||
flip_screen_set_no_update(machine, data & 0x20);
|
||||
}
|
||||
if (n8080_hardware == 3)
|
||||
{
|
||||
helifire_flash = data & 0x20;
|
||||
}
|
||||
if (state->n8080_hardware == 3)
|
||||
state->helifire_flash = data & 0x20;
|
||||
|
||||
sound_pins_changed(machine);
|
||||
}
|
||||
@ -354,16 +340,17 @@ WRITE8_HANDLER( n8080_sound_2_w )
|
||||
|
||||
static READ8_HANDLER( n8080_8035_p1_r )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
UINT8 val = 0;
|
||||
|
||||
if ((curr_sound_pins >> 0xB) & 1) val |= 0x01;
|
||||
if ((curr_sound_pins >> 0xA) & 1) val |= 0x02;
|
||||
if ((curr_sound_pins >> 0x9) & 1) val |= 0x04;
|
||||
if ((curr_sound_pins >> 0x8) & 1) val |= 0x08;
|
||||
if ((curr_sound_pins >> 0x5) & 1) val |= 0x10;
|
||||
if ((curr_sound_pins >> 0x3) & 1) val |= 0x20;
|
||||
if ((curr_sound_pins >> 0x2) & 1) val |= 0x40;
|
||||
if ((curr_sound_pins >> 0x1) & 1) val |= 0x80;
|
||||
if ((state->curr_sound_pins >> 0xb) & 1) val |= 0x01;
|
||||
if ((state->curr_sound_pins >> 0xa) & 1) val |= 0x02;
|
||||
if ((state->curr_sound_pins >> 0x9) & 1) val |= 0x04;
|
||||
if ((state->curr_sound_pins >> 0x8) & 1) val |= 0x08;
|
||||
if ((state->curr_sound_pins >> 0x5) & 1) val |= 0x10;
|
||||
if ((state->curr_sound_pins >> 0x3) & 1) val |= 0x20;
|
||||
if ((state->curr_sound_pins >> 0x2) & 1) val |= 0x40;
|
||||
if ((state->curr_sound_pins >> 0x1) & 1) val |= 0x80;
|
||||
|
||||
return val;
|
||||
}
|
||||
@ -371,32 +358,37 @@ static READ8_HANDLER( n8080_8035_p1_r )
|
||||
|
||||
static READ8_HANDLER( n8080_8035_t0_r )
|
||||
{
|
||||
return (curr_sound_pins >> 0x7) & 1;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return (state->curr_sound_pins >> 0x7) & 1;
|
||||
}
|
||||
static READ8_HANDLER( n8080_8035_t1_r )
|
||||
{
|
||||
return (curr_sound_pins >> 0xC) & 1;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return (state->curr_sound_pins >> 0xc) & 1;
|
||||
}
|
||||
|
||||
|
||||
static READ8_HANDLER( helifire_8035_t0_r )
|
||||
{
|
||||
return (curr_sound_pins >> 0x3) & 1;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return (state->curr_sound_pins >> 0x3) & 1;
|
||||
}
|
||||
static READ8_HANDLER( helifire_8035_t1_r )
|
||||
{
|
||||
return (curr_sound_pins >> 0x4) & 1;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return (state->curr_sound_pins >> 0x4) & 1;
|
||||
}
|
||||
|
||||
|
||||
static READ8_HANDLER( helifire_8035_external_ram_r )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
UINT8 val = 0;
|
||||
|
||||
if ((curr_sound_pins >> 0x7) & 1) val |= 0x01;
|
||||
if ((curr_sound_pins >> 0x8) & 1) val |= 0x02;
|
||||
if ((curr_sound_pins >> 0x9) & 1) val |= 0x04;
|
||||
if ((curr_sound_pins >> 0x1) & 1) val |= 0x08;
|
||||
if ((state->curr_sound_pins >> 0x7) & 1) val |= 0x01;
|
||||
if ((state->curr_sound_pins >> 0x8) & 1) val |= 0x02;
|
||||
if ((state->curr_sound_pins >> 0x9) & 1) val |= 0x04;
|
||||
if ((state->curr_sound_pins >> 0x1) & 1) val |= 0x08;
|
||||
|
||||
return val;
|
||||
}
|
||||
@ -404,7 +396,8 @@ static READ8_HANDLER( helifire_8035_external_ram_r )
|
||||
|
||||
static READ8_HANDLER( helifire_8035_p2_r )
|
||||
{
|
||||
return ((curr_sound_pins >> 0xC) & 1) ? 0x10 : 0x00; /* not used */
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return ((state->curr_sound_pins >> 0xc) & 1) ? 0x10 : 0x00; /* not used */
|
||||
}
|
||||
|
||||
|
||||
@ -416,38 +409,41 @@ static WRITE8_HANDLER( n8080_dac_w )
|
||||
|
||||
static WRITE8_HANDLER( helifire_dac_w )
|
||||
{
|
||||
dac_data_w(devtag_get_device(space->machine, "dac"), data * helifire_dac_volume);
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
dac_data_w(devtag_get_device(space->machine, "dac"), data * state->helifire_dac_volume);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( helifire_sound_ctrl_w )
|
||||
{
|
||||
helifire_dac_phase = data & 0x80;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
state->helifire_dac_phase = data & 0x80;
|
||||
|
||||
/* data & 0x40 not emulated */
|
||||
/* data & 0x20 not emulated */
|
||||
|
||||
if (helifire_dac_phase)
|
||||
if (state->helifire_dac_phase)
|
||||
{
|
||||
helifire_dac_timing = ATTACK_RATE * log(1 - helifire_dac_volume);
|
||||
state->helifire_dac_timing = ATTACK_RATE * log(1 - state->helifire_dac_volume);
|
||||
}
|
||||
else
|
||||
{
|
||||
helifire_dac_timing = DECAY_RATE * log(helifire_dac_volume);
|
||||
state->helifire_dac_timing = DECAY_RATE * log(state->helifire_dac_volume);
|
||||
}
|
||||
|
||||
helifire_dac_timing += attotime_to_double(timer_get_time(space->machine));
|
||||
state->helifire_dac_timing += attotime_to_double(timer_get_time(space->machine));
|
||||
}
|
||||
|
||||
|
||||
static TIMER_CALLBACK( spacefev_vco_voltage_timer )
|
||||
{
|
||||
const device_config *sn = devtag_get_device(machine, "snsnd");
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
double voltage = 0;
|
||||
|
||||
if (mono_flop[2])
|
||||
if (state->mono_flop[2])
|
||||
{
|
||||
voltage = 5 * (1 - exp(- attotime_to_double(timer_timeelapsed(sound_timer[2])) / 0.22));
|
||||
voltage = 5 * (1 - exp(- attotime_to_double(timer_timeelapsed(state->sound_timer[2])) / 0.22));
|
||||
}
|
||||
|
||||
sn76477_vco_voltage_w(sn, voltage);
|
||||
@ -456,66 +452,113 @@ static TIMER_CALLBACK( spacefev_vco_voltage_timer )
|
||||
|
||||
static TIMER_CALLBACK( helifire_dac_volume_timer )
|
||||
{
|
||||
double t = helifire_dac_timing - attotime_to_double(timer_get_time(machine));
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
double t = state->helifire_dac_timing - attotime_to_double(timer_get_time(machine));
|
||||
|
||||
if (helifire_dac_phase)
|
||||
if (state->helifire_dac_phase)
|
||||
{
|
||||
helifire_dac_volume = 1 - exp(t / ATTACK_RATE);
|
||||
state->helifire_dac_volume = 1 - exp(t / ATTACK_RATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
helifire_dac_volume = exp(t / DECAY_RATE);
|
||||
state->helifire_dac_volume = exp(t / DECAY_RATE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_RESET( spacefev_sound )
|
||||
MACHINE_START( spacefev_sound )
|
||||
{
|
||||
n8080_hardware = 1;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state->sound_timer[0] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
state->sound_timer[1] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
state->sound_timer[2] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
|
||||
state_save_register_global(machine, state->prev_snd_data);
|
||||
state_save_register_global(machine, state->prev_sound_pins);
|
||||
state_save_register_global(machine, state->curr_sound_pins);
|
||||
state_save_register_global(machine, state->n8080_hardware);
|
||||
state_save_register_global_array(machine, state->mono_flop);
|
||||
}
|
||||
|
||||
MACHINE_RESET( spacefev_sound )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
state->n8080_hardware = 1;
|
||||
|
||||
timer_pulse(machine, ATTOTIME_IN_HZ(1000), NULL, 0, spacefev_vco_voltage_timer);
|
||||
|
||||
sound_timer[0] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
sound_timer[1] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
sound_timer[2] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
|
||||
mono_flop[0] = 0;
|
||||
mono_flop[1] = 0;
|
||||
mono_flop[2] = 0;
|
||||
state->mono_flop[0] = 0;
|
||||
state->mono_flop[1] = 0;
|
||||
state->mono_flop[2] = 0;
|
||||
state->prev_snd_data = 0;
|
||||
state->prev_sound_pins = 0;
|
||||
state->curr_sound_pins = 0;
|
||||
|
||||
delayed_sound_1(machine, 0);
|
||||
delayed_sound_2(machine, 0);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_RESET( sheriff_sound )
|
||||
MACHINE_START( sheriff_sound )
|
||||
{
|
||||
n8080_hardware = 2;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
sound_timer[0] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
sound_timer[1] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
state->sound_timer[0] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
state->sound_timer[1] = timer_alloc(machine, stop_mono_flop_callback, NULL);
|
||||
|
||||
mono_flop[0] = 0;
|
||||
mono_flop[1] = 0;
|
||||
state_save_register_global(machine, state->prev_snd_data);
|
||||
state_save_register_global(machine, state->prev_sound_pins);
|
||||
state_save_register_global(machine, state->curr_sound_pins);
|
||||
state_save_register_global(machine, state->n8080_hardware);
|
||||
state_save_register_global_array(machine, state->mono_flop);
|
||||
}
|
||||
|
||||
MACHINE_RESET( sheriff_sound )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
state->n8080_hardware = 2;
|
||||
|
||||
state->mono_flop[0] = 0;
|
||||
state->mono_flop[1] = 0;
|
||||
state->prev_snd_data = 0;
|
||||
state->prev_sound_pins = 0;
|
||||
state->curr_sound_pins = 0;
|
||||
|
||||
delayed_sound_1(machine, 0);
|
||||
delayed_sound_2(machine, 0);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_RESET( helifire_sound )
|
||||
MACHINE_START( helifire_sound )
|
||||
{
|
||||
n8080_hardware = 3;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state_save_register_global(machine, state->prev_snd_data);
|
||||
state_save_register_global(machine, state->prev_sound_pins);
|
||||
state_save_register_global(machine, state->curr_sound_pins);
|
||||
state_save_register_global(machine, state->n8080_hardware);
|
||||
state_save_register_global(machine, state->helifire_dac_volume);
|
||||
state_save_register_global(machine, state->helifire_dac_timing);
|
||||
state_save_register_global(machine, state->helifire_dac_phase);
|
||||
}
|
||||
|
||||
MACHINE_RESET( helifire_sound )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
state->n8080_hardware = 3;
|
||||
|
||||
timer_pulse(machine, ATTOTIME_IN_HZ(1000), NULL, 0, helifire_dac_volume_timer);
|
||||
|
||||
helifire_dac_volume = 1;
|
||||
helifire_dac_timing = 0;
|
||||
state->helifire_dac_volume = 1;
|
||||
state->helifire_dac_timing = 0;
|
||||
state->helifire_dac_phase = 0;
|
||||
state->prev_snd_data = 0;
|
||||
state->prev_sound_pins = 0;
|
||||
state->curr_sound_pins = 0;
|
||||
|
||||
delayed_sound_1(machine, 0);
|
||||
delayed_sound_2(machine, 0);
|
||||
|
||||
helifire_dac_phase = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -553,8 +596,6 @@ MACHINE_DRIVER_START( spacefev_sound )
|
||||
MDRV_CPU_PROGRAM_MAP(n8080_sound_cpu_map)
|
||||
MDRV_CPU_IO_MAP(n8080_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_RESET(spacefev_sound)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -574,8 +615,6 @@ MACHINE_DRIVER_START( sheriff_sound )
|
||||
MDRV_CPU_PROGRAM_MAP(n8080_sound_cpu_map)
|
||||
MDRV_CPU_IO_MAP(n8080_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_RESET(sheriff_sound)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -595,8 +634,6 @@ MACHINE_DRIVER_START( helifire_sound )
|
||||
MDRV_CPU_PROGRAM_MAP(n8080_sound_cpu_map)
|
||||
MDRV_CPU_IO_MAP(helifire_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_RESET(helifire_sound)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -16,36 +16,36 @@
|
||||
|
||||
#define MASTER_CLOCK XTAL_20_16MHz
|
||||
|
||||
static unsigned shift_data;
|
||||
static unsigned shift_bits;
|
||||
static int inte;
|
||||
|
||||
static WRITE8_HANDLER( n8080_shift_bits_w )
|
||||
{
|
||||
shift_bits = data & 7;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
state->shift_bits = data & 7;
|
||||
}
|
||||
static WRITE8_HANDLER( n8080_shift_data_w )
|
||||
{
|
||||
shift_data = (shift_data >> 8) | (data << 8);
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
state->shift_data = (state->shift_data >> 8) | (data << 8);
|
||||
}
|
||||
|
||||
|
||||
static READ8_HANDLER( n8080_shift_r )
|
||||
{
|
||||
return shift_data >> (8 - shift_bits);
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
return state->shift_data >> (8 - state->shift_bits);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_cpu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_BASE(&videoram)
|
||||
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_BASE_MEMBER(n8080_state, videoram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( helifire_main_cpu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_BASE(&videoram)
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE(&colorram)
|
||||
AM_RANGE(0x4000, 0x7fff) AM_RAM AM_BASE_MEMBER(n8080_state, videoram)
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE_MEMBER(n8080_state, colorram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
@ -63,130 +63,8 @@ static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(n8080_video_control_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Interrupts */
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( rst1_tick )
|
||||
{
|
||||
int state = inte ? ASSERT_LINE : CLEAR_LINE;
|
||||
|
||||
/* V7 = 1, V6 = 0 */
|
||||
cputag_set_input_line_and_vector(timer->machine, "maincpu", INPUT_LINE_IRQ0, state, 0xcf);
|
||||
}
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( rst2_tick )
|
||||
{
|
||||
int state = inte ? ASSERT_LINE : CLEAR_LINE;
|
||||
|
||||
/* vblank */
|
||||
cputag_set_input_line_and_vector(timer->machine, "maincpu", INPUT_LINE_IRQ0, state, 0xd7);
|
||||
}
|
||||
|
||||
static WRITE_LINE_DEVICE_HANDLER( n8080_inte_callback )
|
||||
{
|
||||
inte = state;
|
||||
}
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( n8080_status_callback )
|
||||
{
|
||||
if (data & I8085_STATUS_INTA)
|
||||
{
|
||||
/* interrupt acknowledge */
|
||||
cpu_set_input_line(device, INPUT_LINE_IRQ0, CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static I8085_CONFIG( n8080_cpu_config )
|
||||
{
|
||||
DEVCB_HANDLER(n8080_status_callback), /* STATUS changed callback */
|
||||
DEVCB_LINE(n8080_inte_callback), /* INTE changed callback */
|
||||
DEVCB_NULL, /* SID changed callback (8085A only) */
|
||||
DEVCB_NULL /* SOD changed callback (8085A only) */
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( spacefev )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8)
|
||||
MDRV_PALETTE_INIT(n8080)
|
||||
MDRV_VIDEO_START(spacefev)
|
||||
MDRV_VIDEO_UPDATE(spacefev)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( spacefev_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( sheriff )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8)
|
||||
MDRV_PALETTE_INIT(n8080)
|
||||
MDRV_VIDEO_START(sheriff)
|
||||
MDRV_VIDEO_UPDATE(sheriff)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( sheriff_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( helifire )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(helifire_main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8 + 0x400)
|
||||
MDRV_PALETTE_INIT(helifire)
|
||||
MDRV_VIDEO_START(helifire)
|
||||
MDRV_VIDEO_UPDATE(helifire)
|
||||
MDRV_VIDEO_EOF(helifire)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( helifire_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
/* Input ports */
|
||||
|
||||
static INPUT_PORTS_START( spacefev )
|
||||
PORT_START("IN0")
|
||||
@ -487,8 +365,7 @@ static INPUT_PORTS_START( helifire )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ))
|
||||
|
||||
/* potentiometers */
|
||||
|
||||
PORT_START("POT0") /* 04 */
|
||||
PORT_START("POT0")
|
||||
PORT_DIPNAME( 0xff, 0x50, "VR1 sun brightness" )
|
||||
PORT_DIPSETTING( 0x00, "00" )
|
||||
PORT_DIPSETTING( 0x10, "10" )
|
||||
@ -499,7 +376,7 @@ static INPUT_PORTS_START( helifire )
|
||||
PORT_DIPSETTING( 0x60, "60" )
|
||||
PORT_DIPSETTING( 0x70, "70" )
|
||||
|
||||
PORT_START("POT1") /* 05 */
|
||||
PORT_START("POT1")
|
||||
PORT_DIPNAME( 0xff, 0x00, "VR2 sea brightness" )
|
||||
PORT_DIPSETTING( 0x00, "00" )
|
||||
PORT_DIPSETTING( 0x10, "10" )
|
||||
@ -509,10 +386,227 @@ static INPUT_PORTS_START( helifire )
|
||||
PORT_DIPSETTING( 0x50, "50" )
|
||||
PORT_DIPSETTING( 0x60, "60" )
|
||||
PORT_DIPSETTING( 0x70, "70" )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/* Interrupts */
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( rst1_tick )
|
||||
{
|
||||
n8080_state *n8080 = (n8080_state *)timer->machine->driver_data;
|
||||
int state = n8080->inte ? ASSERT_LINE : CLEAR_LINE;
|
||||
|
||||
/* V7 = 1, V6 = 0 */
|
||||
cputag_set_input_line_and_vector(timer->machine, "maincpu", INPUT_LINE_IRQ0, state, 0xcf);
|
||||
}
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( rst2_tick )
|
||||
{
|
||||
n8080_state *n8080 = (n8080_state *)timer->machine->driver_data;
|
||||
int state = n8080->inte ? ASSERT_LINE : CLEAR_LINE;
|
||||
|
||||
/* vblank */
|
||||
cputag_set_input_line_and_vector(timer->machine, "maincpu", INPUT_LINE_IRQ0, state, 0xd7);
|
||||
}
|
||||
|
||||
static WRITE_LINE_DEVICE_HANDLER( n8080_inte_callback )
|
||||
{
|
||||
n8080_state *n8080 = (n8080_state *)device->machine->driver_data;
|
||||
n8080->inte = state;
|
||||
}
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( n8080_status_callback )
|
||||
{
|
||||
if (data & I8085_STATUS_INTA)
|
||||
{
|
||||
/* interrupt acknowledge */
|
||||
cpu_set_input_line(device, INPUT_LINE_IRQ0, CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static I8085_CONFIG( n8080_cpu_config )
|
||||
{
|
||||
DEVCB_HANDLER(n8080_status_callback), /* STATUS changed callback */
|
||||
DEVCB_LINE(n8080_inte_callback), /* INTE changed callback */
|
||||
DEVCB_NULL, /* SID changed callback (8085A only) */
|
||||
DEVCB_NULL /* SOD changed callback (8085A only) */
|
||||
};
|
||||
|
||||
static MACHINE_START( n8080 )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state_save_register_global(machine, state->shift_data);
|
||||
state_save_register_global(machine, state->shift_bits);
|
||||
state_save_register_global(machine, state->inte);
|
||||
}
|
||||
|
||||
static MACHINE_START( spacefev )
|
||||
{
|
||||
MACHINE_START_CALL(n8080);
|
||||
MACHINE_START_CALL(spacefev_sound);
|
||||
}
|
||||
|
||||
static MACHINE_START( sheriff )
|
||||
{
|
||||
MACHINE_START_CALL(n8080);
|
||||
MACHINE_START_CALL(sheriff_sound);
|
||||
}
|
||||
|
||||
static MACHINE_START( helifire )
|
||||
{
|
||||
MACHINE_START_CALL(n8080);
|
||||
MACHINE_START_CALL(helifire_sound);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_RESET( n8080 )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state->shift_data = 0;
|
||||
state->shift_bits = 0;
|
||||
state->inte = 0;
|
||||
}
|
||||
|
||||
static MACHINE_RESET( spacefev )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
MACHINE_RESET_CALL(n8080);
|
||||
MACHINE_RESET_CALL(spacefev_sound);
|
||||
|
||||
state->spacefev_red_screen = 0;
|
||||
state->spacefev_red_cannon = 0;
|
||||
}
|
||||
|
||||
static MACHINE_RESET( sheriff )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
MACHINE_RESET_CALL(n8080);
|
||||
MACHINE_RESET_CALL(sheriff_sound);
|
||||
|
||||
state->sheriff_color_mode = 0;
|
||||
state->sheriff_color_data = 0;
|
||||
}
|
||||
|
||||
static MACHINE_RESET( helifire )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
MACHINE_RESET_CALL(n8080);
|
||||
MACHINE_RESET_CALL(helifire_sound);
|
||||
|
||||
state->helifire_mv = 0;
|
||||
state->helifire_sc = 0;
|
||||
state->helifire_flash = 0;
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( spacefev )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(n8080_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
MDRV_MACHINE_START(spacefev)
|
||||
MDRV_MACHINE_RESET(spacefev)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8)
|
||||
MDRV_PALETTE_INIT(n8080)
|
||||
MDRV_VIDEO_START(spacefev)
|
||||
MDRV_VIDEO_UPDATE(spacefev)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( spacefev_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( sheriff )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(n8080_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
MDRV_MACHINE_START(sheriff)
|
||||
MDRV_MACHINE_RESET(sheriff)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8)
|
||||
MDRV_PALETTE_INIT(n8080)
|
||||
MDRV_VIDEO_START(sheriff)
|
||||
MDRV_VIDEO_UPDATE(sheriff)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( sheriff_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( helifire )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(n8080_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, MASTER_CLOCK / 10)
|
||||
MDRV_CPU_CONFIG(n8080_cpu_config)
|
||||
MDRV_CPU_PROGRAM_MAP(helifire_main_cpu_map)
|
||||
MDRV_CPU_IO_MAP(main_io_map)
|
||||
|
||||
MDRV_MACHINE_START(helifire)
|
||||
MDRV_MACHINE_RESET(helifire)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(256, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 255, 16, 239)
|
||||
|
||||
MDRV_PALETTE_LENGTH(8 + 0x400)
|
||||
MDRV_PALETTE_INIT(helifire)
|
||||
MDRV_VIDEO_START(helifire)
|
||||
MDRV_VIDEO_UPDATE(helifire)
|
||||
MDRV_VIDEO_EOF(helifire)
|
||||
|
||||
MDRV_TIMER_ADD_SCANLINE("rst1", rst1_tick, "screen", 128, 256)
|
||||
MDRV_TIMER_ADD_SCANLINE("rst2", rst2_tick, "screen", 240, 256)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_IMPORT_FROM( helifire_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
/*
|
||||
Space Fever (3 sets, Space Fever?, High Splitter?, Space Launcher?)
|
||||
Nintendo, 1979
|
||||
@ -824,14 +918,14 @@ ROM_START( helifirea )
|
||||
ROM_END
|
||||
|
||||
|
||||
GAME( 1979, spacefev, 0, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (New Ver.)", 0 )
|
||||
GAME( 1979, spacefevo, spacefev, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (Old Ver.)", 0 )
|
||||
GAME( 1979, spacefevo2, spacefev, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (Older Ver.)", 0 )
|
||||
GAME( 1979, highsplt, 0, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 1)", 0 )
|
||||
GAME( 1979, highsplta, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 2)", 0 )
|
||||
GAME( 1979, highspltb, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (alt Sound)", 0 )
|
||||
GAME( 1979, spacelnc, 0, spacefev, spacelnc, 0, ROT270, "Nintendo", "Space Launcher", GAME_NOT_WORKING )
|
||||
GAME( 1979, sheriff, 0, sheriff, sheriff, 0, ROT270, "Nintendo", "Sheriff", 0 )
|
||||
GAME( 1980, bandido, sheriff, sheriff, bandido, 0, ROT270, "Exidy", "Bandido", 0 )
|
||||
GAME( 1980, helifire, 0, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL )
|
||||
GAME( 1980, helifirea, helifire, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 2)", GAME_NOT_WORKING | GAME_NO_COCKTAIL )
|
||||
GAME( 1979, spacefev, 0, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (New Ver.)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, spacefevo, spacefev, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (Old Ver.)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, spacefevo2, spacefev, spacefev, spacefev, 0, ROT270, "Nintendo", "Space Fever (Older Ver.)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, highsplt, 0, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 1)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, highsplta, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 2)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, highspltb, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (alt Sound)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, spacelnc, 0, spacefev, spacelnc, 0, ROT270, "Nintendo", "Space Launcher", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1979, sheriff, 0, sheriff, sheriff, 0, ROT270, "Nintendo", "Sheriff", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1980, bandido, sheriff, sheriff, bandido, 0, ROT270, "Exidy", "Bandido", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1980, helifire, 0, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1980, helifirea, helifire, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 2)", GAME_NOT_WORKING | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
|
@ -1,10 +1,43 @@
|
||||
|
||||
typedef struct _n8080_state n8080_state;
|
||||
struct _n8080_state
|
||||
{
|
||||
/* memory pointers */
|
||||
UINT8 * videoram;
|
||||
UINT8 * colorram; // for helifire
|
||||
|
||||
/* video-related */
|
||||
emu_timer* cannon_timer;
|
||||
int spacefev_red_screen;
|
||||
int spacefev_red_cannon;
|
||||
int sheriff_color_mode;
|
||||
int sheriff_color_data;
|
||||
int helifire_flash;
|
||||
UINT8 helifire_LSFR[63];
|
||||
unsigned helifire_mv;
|
||||
unsigned helifire_sc; /* IC56 */
|
||||
|
||||
/* sound-related */
|
||||
int n8080_hardware;
|
||||
emu_timer* sound_timer[3];
|
||||
int helifire_dac_phase;
|
||||
double helifire_dac_volume;
|
||||
double helifire_dac_timing;
|
||||
UINT16 prev_sound_pins;
|
||||
UINT16 curr_sound_pins;
|
||||
int mono_flop[3];
|
||||
UINT8 prev_snd_data;
|
||||
|
||||
/* other */
|
||||
unsigned shift_data;
|
||||
unsigned shift_bits;
|
||||
int inte;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*----------- defined in video/n8080.c -----------*/
|
||||
|
||||
extern int helifire_flash;
|
||||
|
||||
extern int spacefev_red_screen;
|
||||
extern int spacefev_red_cannon;
|
||||
|
||||
WRITE8_HANDLER( n8080_video_control_w );
|
||||
|
||||
PALETTE_INIT( n8080 );
|
||||
@ -26,6 +59,12 @@ MACHINE_DRIVER_EXTERN( spacefev_sound );
|
||||
MACHINE_DRIVER_EXTERN( sheriff_sound );
|
||||
MACHINE_DRIVER_EXTERN( helifire_sound );
|
||||
|
||||
MACHINE_START( spacefev_sound );
|
||||
MACHINE_START( sheriff_sound );
|
||||
MACHINE_START( helifire_sound );
|
||||
MACHINE_RESET( spacefev_sound );
|
||||
MACHINE_RESET( sheriff_sound );
|
||||
MACHINE_RESET( helifire_sound );
|
||||
|
||||
WRITE8_HANDLER( n8080_sound_1_w );
|
||||
WRITE8_HANDLER( n8080_sound_2_w );
|
||||
|
||||
|
@ -7,27 +7,13 @@
|
||||
#include "driver.h"
|
||||
#include "includes/n8080.h"
|
||||
|
||||
int spacefev_red_screen;
|
||||
int spacefev_red_cannon;
|
||||
|
||||
int helifire_flash;
|
||||
|
||||
static emu_timer* cannon_timer;
|
||||
|
||||
static int sheriff_color_mode;
|
||||
static int sheriff_color_data;
|
||||
|
||||
static UINT8 helifire_LSFR[63];
|
||||
|
||||
static unsigned helifire_mv;
|
||||
static unsigned helifire_sc; /* IC56 */
|
||||
|
||||
|
||||
WRITE8_HANDLER( n8080_video_control_w )
|
||||
{
|
||||
sheriff_color_mode = (data >> 3) & 3;
|
||||
sheriff_color_data = (data >> 0) & 7;
|
||||
n8080_state *state = (n8080_state *)space->machine->driver_data;
|
||||
|
||||
state->sheriff_color_mode = (data >> 3) & 3;
|
||||
state->sheriff_color_data = (data >> 0) & 7;
|
||||
flip_screen_set_no_update(space->machine, data & 0x20);
|
||||
}
|
||||
|
||||
@ -37,7 +23,7 @@ PALETTE_INIT( n8080 )
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
palette_set_color_rgb(machine,i,pal1bit(i >> 0),pal1bit(i >> 1),pal1bit(i >> 2));
|
||||
palette_set_color_rgb(machine, i, pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
|
||||
}
|
||||
|
||||
|
||||
@ -51,86 +37,92 @@ PALETTE_INIT( helifire )
|
||||
{
|
||||
int level = 0xff * exp(-3 * i / 255.); /* capacitor discharge */
|
||||
|
||||
palette_set_color(machine,0x000 + 8 + i, MAKE_RGB(0x00, 0x00, level)); /* shades of blue */
|
||||
palette_set_color(machine,0x100 + 8 + i, MAKE_RGB(0x00, 0xC0, level)); /* shades of blue w/ green star */
|
||||
palette_set_color(machine, 0x000 + 8 + i, MAKE_RGB(0x00, 0x00, level)); /* shades of blue */
|
||||
palette_set_color(machine, 0x100 + 8 + i, MAKE_RGB(0x00, 0xC0, level)); /* shades of blue w/ green star */
|
||||
|
||||
palette_set_color(machine,0x200 + 8 + i, MAKE_RGB(level, 0x00, 0x00)); /* shades of red */
|
||||
palette_set_color(machine,0x300 + 8 + i, MAKE_RGB(level, 0xC0, 0x00)); /* shades of red w/ green star */
|
||||
palette_set_color(machine, 0x200 + 8 + i, MAKE_RGB(level, 0x00, 0x00)); /* shades of red */
|
||||
palette_set_color(machine, 0x300 + 8 + i, MAKE_RGB(level, 0xC0, 0x00)); /* shades of red w/ green star */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void spacefev_start_red_cannon(running_machine *machine)
|
||||
void spacefev_start_red_cannon( running_machine *machine )
|
||||
{
|
||||
spacefev_red_cannon = 1;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
timer_adjust_oneshot(cannon_timer, ATTOTIME_IN_USEC(550 * 68 * 10), 0);
|
||||
state->spacefev_red_cannon = 1;
|
||||
timer_adjust_oneshot(state->cannon_timer, ATTOTIME_IN_USEC(550 * 68 * 10), 0);
|
||||
}
|
||||
|
||||
|
||||
static TIMER_CALLBACK( spacefev_stop_red_cannon )
|
||||
{
|
||||
spacefev_red_cannon = 0;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
timer_adjust_oneshot(cannon_timer, attotime_never, 0);
|
||||
state->spacefev_red_cannon = 0;
|
||||
timer_adjust_oneshot(state->cannon_timer, attotime_never, 0);
|
||||
}
|
||||
|
||||
|
||||
static void helifire_next_line(running_machine *machine)
|
||||
static void helifire_next_line( running_machine *machine )
|
||||
{
|
||||
helifire_mv++;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
if (helifire_sc % 4 == 2)
|
||||
state->helifire_mv++;
|
||||
|
||||
if (state->helifire_sc % 4 == 2)
|
||||
{
|
||||
helifire_mv %= 256;
|
||||
state->helifire_mv %= 256;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (flip_screen_get(machine))
|
||||
{
|
||||
helifire_mv %= 255;
|
||||
}
|
||||
state->helifire_mv %= 255;
|
||||
else
|
||||
{
|
||||
helifire_mv %= 257;
|
||||
}
|
||||
state->helifire_mv %= 257;
|
||||
}
|
||||
|
||||
if (helifire_mv == 128)
|
||||
if (state->helifire_mv == 128)
|
||||
{
|
||||
helifire_sc++;
|
||||
state->helifire_sc++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( spacefev )
|
||||
{
|
||||
cannon_timer = timer_alloc(machine, spacefev_stop_red_cannon, NULL);
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
state->cannon_timer = timer_alloc(machine, spacefev_stop_red_cannon, NULL);
|
||||
|
||||
flip_screen_set_no_update(machine, 0);
|
||||
|
||||
spacefev_red_screen = 0;
|
||||
spacefev_red_cannon = 0;
|
||||
state_save_register_global(machine, state->spacefev_red_screen);
|
||||
state_save_register_global(machine, state->spacefev_red_cannon);
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( sheriff )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
|
||||
flip_screen_set_no_update(machine, 0);
|
||||
|
||||
sheriff_color_mode = 0;
|
||||
sheriff_color_data = 0;
|
||||
state_save_register_global(machine, state->sheriff_color_mode);
|
||||
state_save_register_global(machine, state->sheriff_color_data);
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( helifire )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
UINT8 data = 0;
|
||||
|
||||
int i;
|
||||
|
||||
helifire_mv = 0;
|
||||
helifire_sc = 0;
|
||||
state_save_register_global(machine, state->helifire_mv);
|
||||
state_save_register_global(machine, state->helifire_sc);
|
||||
state_save_register_global(machine, state->helifire_flash);
|
||||
state_save_register_global_array(machine, state->helifire_LSFR);
|
||||
|
||||
for (i = 0; i < 63; i++)
|
||||
{
|
||||
@ -140,23 +132,22 @@ VIDEO_START( helifire )
|
||||
|
||||
data = (data << 1) | (bit & 1);
|
||||
|
||||
helifire_LSFR[i] = data;
|
||||
state->helifire_LSFR[i] = data;
|
||||
}
|
||||
|
||||
flip_screen_set_no_update(machine, 0);
|
||||
|
||||
helifire_flash = 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_UPDATE( spacefev )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)screen->machine->driver_data;
|
||||
UINT8 mask = flip_screen_get(screen->machine) ? 0xff : 0x00;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
|
||||
const UINT8* pRAM = videoram;
|
||||
const UINT8* pRAM = state->videoram;
|
||||
const UINT8* pPROM = memory_region(screen->machine, "proms");
|
||||
|
||||
for (y = 0; y < 256; y++)
|
||||
@ -169,17 +160,15 @@ VIDEO_UPDATE( spacefev )
|
||||
|
||||
UINT8 color = 0;
|
||||
|
||||
if (spacefev_red_screen)
|
||||
{
|
||||
if (state->spacefev_red_screen)
|
||||
color = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT8 val = pPROM[x >> 3];
|
||||
|
||||
if ((x >> 3) == 0x06)
|
||||
{
|
||||
color = spacefev_red_cannon ? 1 : 7;
|
||||
color = state->spacefev_red_cannon ? 1 : 7;
|
||||
}
|
||||
|
||||
if ((x >> 3) == 0x1b)
|
||||
@ -222,6 +211,7 @@ VIDEO_UPDATE( spacefev )
|
||||
|
||||
VIDEO_UPDATE( sheriff )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)screen->machine->driver_data;
|
||||
UINT8 mask = flip_screen_get(screen->machine) ? 0xff : 0x00;
|
||||
|
||||
const UINT8* pPROM = memory_region(screen->machine, "proms");
|
||||
@ -229,7 +219,7 @@ VIDEO_UPDATE( sheriff )
|
||||
int x;
|
||||
int y;
|
||||
|
||||
const UINT8* pRAM = videoram;
|
||||
const UINT8* pRAM = state->videoram;
|
||||
|
||||
for (y = 0; y < 256; y++)
|
||||
{
|
||||
@ -241,20 +231,14 @@ VIDEO_UPDATE( sheriff )
|
||||
|
||||
UINT8 color = pPROM[32 * (y >> 3) + (x >> 3)];
|
||||
|
||||
if (sheriff_color_mode == 1 && !(color & 8))
|
||||
{
|
||||
color = sheriff_color_data ^ 7;
|
||||
}
|
||||
if (state->sheriff_color_mode == 1 && !(color & 8))
|
||||
color = state->sheriff_color_data ^ 7;
|
||||
|
||||
if (sheriff_color_mode == 2)
|
||||
{
|
||||
color = sheriff_color_data ^ 7;
|
||||
}
|
||||
if (state->sheriff_color_mode == 2)
|
||||
color = state->sheriff_color_data ^ 7;
|
||||
|
||||
if (sheriff_color_mode == 3)
|
||||
{
|
||||
if (state->sheriff_color_mode == 3)
|
||||
color = 7;
|
||||
}
|
||||
|
||||
for (n = 0; n < 8; n++)
|
||||
{
|
||||
@ -270,13 +254,14 @@ VIDEO_UPDATE( sheriff )
|
||||
|
||||
VIDEO_UPDATE( helifire )
|
||||
{
|
||||
n8080_state *state = (n8080_state *)screen->machine->driver_data;
|
||||
int SUN_BRIGHTNESS = input_port_read(screen->machine, "POT0");
|
||||
int SEA_BRIGHTNESS = input_port_read(screen->machine, "POT1");
|
||||
|
||||
static const int wave[8] = { 0, 1, 2, 2, 2, 1, 0, 0 };
|
||||
|
||||
unsigned saved_mv = helifire_mv;
|
||||
unsigned saved_sc = helifire_sc;
|
||||
unsigned saved_mv = state->helifire_mv;
|
||||
unsigned saved_sc = state->helifire_sc;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
@ -285,7 +270,7 @@ VIDEO_UPDATE( helifire )
|
||||
{
|
||||
UINT16* pLine = BITMAP_ADDR16(bitmap, y, 0);
|
||||
|
||||
int level = 120 + wave[helifire_mv & 7];
|
||||
int level = 120 + wave[state->helifire_mv & 7];
|
||||
|
||||
/* draw sky */
|
||||
|
||||
@ -296,28 +281,28 @@ VIDEO_UPDATE( helifire )
|
||||
|
||||
/* draw stars */
|
||||
|
||||
if (helifire_mv % 8 == 4) /* upper half */
|
||||
if (state->helifire_mv % 8 == 4) /* upper half */
|
||||
{
|
||||
int step = (320 * (helifire_mv - 0)) % sizeof helifire_LSFR;
|
||||
int step = (320 * (state->helifire_mv - 0)) % sizeof state->helifire_LSFR;
|
||||
|
||||
int data =
|
||||
((helifire_LSFR[step] & 1) << 6) |
|
||||
((helifire_LSFR[step] & 2) << 4) |
|
||||
((helifire_LSFR[step] & 4) << 2) |
|
||||
((helifire_LSFR[step] & 8) << 0);
|
||||
((state->helifire_LSFR[step] & 1) << 6) |
|
||||
((state->helifire_LSFR[step] & 2) << 4) |
|
||||
((state->helifire_LSFR[step] & 4) << 2) |
|
||||
((state->helifire_LSFR[step] & 8) << 0);
|
||||
|
||||
pLine[0x80 + data] |= 0x100;
|
||||
}
|
||||
|
||||
if (helifire_mv % 8 == 5) /* lower half */
|
||||
if (state->helifire_mv % 8 == 5) /* lower half */
|
||||
{
|
||||
int step = (320 * (helifire_mv - 1)) % sizeof helifire_LSFR;
|
||||
int step = (320 * (state->helifire_mv - 1)) % sizeof state->helifire_LSFR;
|
||||
|
||||
int data =
|
||||
((helifire_LSFR[step] & 1) << 6) |
|
||||
((helifire_LSFR[step] & 2) << 4) |
|
||||
((helifire_LSFR[step] & 4) << 2) |
|
||||
((helifire_LSFR[step] & 8) << 0);
|
||||
((state->helifire_LSFR[step] & 1) << 6) |
|
||||
((state->helifire_LSFR[step] & 2) << 4) |
|
||||
((state->helifire_LSFR[step] & 4) << 2) |
|
||||
((state->helifire_LSFR[step] & 8) << 0);
|
||||
|
||||
pLine[0x00 + data] |= 0x100;
|
||||
}
|
||||
@ -341,16 +326,16 @@ VIDEO_UPDATE( helifire )
|
||||
{
|
||||
if (flip_screen_get(screen->machine))
|
||||
{
|
||||
if ((videoram[offset ^ 0x1fff] << n) & 0x80)
|
||||
if ((state->videoram[offset ^ 0x1fff] << n) & 0x80)
|
||||
{
|
||||
pLine[x + n] = colorram[offset ^ 0x1fff] & 7;
|
||||
pLine[x + n] = state->colorram[offset ^ 0x1fff] & 7;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((videoram[offset] >> n) & 1)
|
||||
if ((state->videoram[offset] >> n) & 1)
|
||||
{
|
||||
pLine[x + n] = colorram[offset] & 7;
|
||||
pLine[x + n] = state->colorram[offset] & 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -361,15 +346,16 @@ VIDEO_UPDATE( helifire )
|
||||
helifire_next_line(screen->machine);
|
||||
}
|
||||
|
||||
helifire_mv = saved_mv;
|
||||
helifire_sc = saved_sc;
|
||||
state->helifire_mv = saved_mv;
|
||||
state->helifire_sc = saved_sc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_EOF( helifire )
|
||||
{
|
||||
int n = (video_screen_get_frame_number(machine->primary_screen) >> 1) % sizeof helifire_LSFR;
|
||||
n8080_state *state = (n8080_state *)machine->driver_data;
|
||||
int n = (video_screen_get_frame_number(machine->primary_screen) >> 1) % sizeof state->helifire_LSFR;
|
||||
|
||||
int i;
|
||||
|
||||
@ -379,9 +365,9 @@ VIDEO_EOF( helifire )
|
||||
int G = (i & 2);
|
||||
int B = (i & 4);
|
||||
|
||||
if (helifire_flash)
|
||||
if (state->helifire_flash)
|
||||
{
|
||||
if (helifire_LSFR[n] & 0x20)
|
||||
if (state->helifire_LSFR[n] & 0x20)
|
||||
{
|
||||
G |= B;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user