mirror of
https://github.com/holub/mame
synced 2025-07-02 16:49:22 +03:00
mastboy.c, xorworld.c: added save state support (nw)
saa1099.c: added save state support (nw)
This commit is contained in:
parent
f9485757a8
commit
217c569fd2
@ -33,8 +33,8 @@ WRITE8_MEMBER( isa8_gblaster_device::saa1099_1_16_w )
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0 : m_saa1099_1->saa1099_control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_1->saa1099_data_w( space, offset, data ); break;
|
||||
case 0 : m_saa1099_1->control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_1->data_w( space, offset, data ); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,8 +42,8 @@ WRITE8_MEMBER( isa8_gblaster_device::saa1099_2_16_w )
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0 : m_saa1099_2->saa1099_control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_2->saa1099_data_w( space, offset, data ); break;
|
||||
case 0 : m_saa1099_2->control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_2->data_w( space, offset, data ); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -148,8 +148,8 @@ WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_1_16_w )
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0 : m_saa1099_1->saa1099_control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_1->saa1099_data_w( space, offset, data ); break;
|
||||
case 0 : m_saa1099_1->control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_1->data_w( space, offset, data ); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -157,8 +157,8 @@ WRITE8_MEMBER( isa8_sblaster1_0_device::saa1099_2_16_w )
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0 : m_saa1099_2->saa1099_control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_2->saa1099_data_w( space, offset, data ); break;
|
||||
case 0 : m_saa1099_2->control_w( space, offset, data ); break;
|
||||
case 1 : m_saa1099_2->data_w( space, offset, data ); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,6 +161,37 @@ void saa1099_device::device_start()
|
||||
|
||||
/* for each chip allocate one stream */
|
||||
m_stream = stream_alloc(0, 2, m_sample_rate);
|
||||
|
||||
save_item(NAME(m_noise_params));
|
||||
save_item(NAME(m_env_enable));
|
||||
save_item(NAME(m_env_reverse_right));
|
||||
save_item(NAME(m_env_mode));
|
||||
save_item(NAME(m_env_bits));
|
||||
save_item(NAME(m_env_clock));
|
||||
save_item(NAME(m_env_step));
|
||||
save_item(NAME(m_all_ch_enable));
|
||||
save_item(NAME(m_sync_state));
|
||||
save_item(NAME(m_selected_reg));
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
save_item(NAME(m_channels[i].frequency), i);
|
||||
save_item(NAME(m_channels[i].freq_enable), i);
|
||||
save_item(NAME(m_channels[i].noise_enable), i);
|
||||
save_item(NAME(m_channels[i].octave), i);
|
||||
save_item(NAME(m_channels[i].amplitude), i);
|
||||
save_item(NAME(m_channels[i].envelope), i);
|
||||
save_item(NAME(m_channels[i].counter), i);
|
||||
save_item(NAME(m_channels[i].freq), i);
|
||||
save_item(NAME(m_channels[i].level), i);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
save_item(NAME(m_noise[i].counter), i);
|
||||
save_item(NAME(m_noise[i].freq), i);
|
||||
save_item(NAME(m_noise[i].level), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -217,9 +248,9 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t *
|
||||
|
||||
/* eventually clock the envelope counters */
|
||||
if (ch == 1 && m_env_clock[0] == 0)
|
||||
saa1099_envelope(0);
|
||||
envelope_w(0);
|
||||
if (ch == 4 && m_env_clock[1] == 0)
|
||||
saa1099_envelope(1);
|
||||
envelope_w(1);
|
||||
}
|
||||
|
||||
/* if the noise is enabled */
|
||||
@ -266,7 +297,7 @@ void saa1099_device::sound_stream_update(sound_stream &stream, stream_sample_t *
|
||||
}
|
||||
|
||||
|
||||
void saa1099_device::saa1099_envelope(int ch)
|
||||
void saa1099_device::envelope_w(int ch)
|
||||
{
|
||||
if (m_env_enable[ch])
|
||||
{
|
||||
@ -309,7 +340,7 @@ void saa1099_device::saa1099_envelope(int ch)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( saa1099_device::saa1099_control_w )
|
||||
WRITE8_MEMBER( saa1099_device::control_w )
|
||||
{
|
||||
if ((data & 0xff) > 0x1c)
|
||||
{
|
||||
@ -322,14 +353,14 @@ WRITE8_MEMBER( saa1099_device::saa1099_control_w )
|
||||
{
|
||||
/* clock the envelope channels */
|
||||
if (m_env_clock[0])
|
||||
saa1099_envelope(0);
|
||||
envelope_w(0);
|
||||
if (m_env_clock[1])
|
||||
saa1099_envelope(1);
|
||||
envelope_w(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( saa1099_device::saa1099_data_w )
|
||||
WRITE8_MEMBER( saa1099_device::data_w )
|
||||
{
|
||||
int reg = m_selected_reg;
|
||||
int ch;
|
||||
|
@ -80,11 +80,11 @@ protected:
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
||||
|
||||
public:
|
||||
DECLARE_WRITE8_MEMBER( saa1099_control_w );
|
||||
DECLARE_WRITE8_MEMBER( saa1099_data_w );
|
||||
DECLARE_WRITE8_MEMBER( control_w );
|
||||
DECLARE_WRITE8_MEMBER( data_w );
|
||||
|
||||
private:
|
||||
void saa1099_envelope(int ch);
|
||||
void envelope_w(int ch);
|
||||
|
||||
private:
|
||||
sound_stream *m_stream; /* our stream */
|
||||
|
@ -526,8 +526,8 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bingor_io, AS_IO, 16, bingor_state )
|
||||
// AM_RANGE(0x0000, 0x00ff) AM_READ(test_r )
|
||||
AM_RANGE(0x0100, 0x0101) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x0102, 0x0103) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x0100, 0x0101) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x0102, 0x0103) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
// AM_RANGE(0x0200, 0x0201) AM_READ(test_r )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -295,8 +295,8 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( 68000_awp_map_saa, AS_PROGRAM, 16, jpmsys5_state )
|
||||
JPM_SYS5_COMMON_MAP
|
||||
AM_RANGE(0x0460a0, 0x0460a1) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x0460a2, 0x0460a3) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x0460a0, 0x0460a1) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x0460a2, 0x0460a3) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0x04c100, 0x04c105) AM_READWRITE(jpm_upd7759_r, jpm_upd7759_w) // do the SAA boards have the UPD?
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -155,8 +155,8 @@ public:
|
||||
static ADDRESS_MAP_START( manohman_map, AS_PROGRAM, 16, _manohman_state )
|
||||
AM_RANGE(0x000000, 0x01ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x100001) AM_NOP // smell to MAX696 watchdog...
|
||||
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x300002, 0x300003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x300000, 0x300001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x300002, 0x300003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0x500000, 0x503fff) AM_RAM
|
||||
AM_RANGE(0x600006, 0x600007) AM_RAM // write bitpatterns to compare with the 500000-503ff8 RAM testing.
|
||||
// AM_RANGE(0xYYYYYY, 0xYYYYYY) AM_RAM
|
||||
|
@ -445,19 +445,25 @@ class mastboy_state : public driver_device
|
||||
public:
|
||||
mastboy_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_nvram(*this, "nvram") ,
|
||||
m_workram(*this, "workram"),
|
||||
m_tileram(*this, "tileram"),
|
||||
m_colram(*this, "colram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_msm(*this, "msm"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_nvram(*this, "nvram") ,
|
||||
m_workram(*this, "workram"),
|
||||
m_tileram(*this, "tileram"),
|
||||
m_colram(*this, "colram") { }
|
||||
|
||||
required_shared_ptr<UINT8> m_nvram;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<UINT8> m_nvram;
|
||||
required_shared_ptr<UINT8> m_workram;
|
||||
required_shared_ptr<UINT8> m_tileram;
|
||||
required_shared_ptr<UINT8> m_colram;
|
||||
|
||||
UINT8* m_vram;
|
||||
UINT8 m_bank;
|
||||
int m_irq0_ack;
|
||||
@ -466,29 +472,29 @@ public:
|
||||
int m_m5205_part;
|
||||
int m_m5205_sambit0;
|
||||
int m_m5205_sambit1;
|
||||
|
||||
DECLARE_READ8_MEMBER(banked_ram_r);
|
||||
DECLARE_WRITE8_MEMBER(banked_ram_w);
|
||||
DECLARE_WRITE8_MEMBER(mastboy_bank_w);
|
||||
DECLARE_READ8_MEMBER(mastboy_backupram_r);
|
||||
DECLARE_WRITE8_MEMBER(mastboy_backupram_w);
|
||||
DECLARE_WRITE8_MEMBER(bank_w);
|
||||
DECLARE_READ8_MEMBER(backupram_r);
|
||||
DECLARE_WRITE8_MEMBER(backupram_w);
|
||||
DECLARE_WRITE8_MEMBER(backupram_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_mastboy_m5205_sambit0_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_mastboy_m5205_sambit1_w);
|
||||
DECLARE_WRITE8_MEMBER(mastboy_msm5205_data_w);
|
||||
DECLARE_WRITE8_MEMBER(mastboy_irq0_ack_w);
|
||||
DECLARE_READ8_MEMBER(mastboy_port_38_read);
|
||||
DECLARE_READ8_MEMBER(mastboy_nmi_read);
|
||||
DECLARE_WRITE8_MEMBER(mastboy_msm5205_reset_w);
|
||||
DECLARE_DRIVER_INIT(mastboy);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_sambit0_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_sambit1_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_data_w);
|
||||
DECLARE_WRITE8_MEMBER(irq0_ack_w);
|
||||
DECLARE_READ8_MEMBER(port_38_read);
|
||||
DECLARE_READ8_MEMBER(nmi_read);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_reset_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_mastboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(mastboy_interrupt);
|
||||
DECLARE_WRITE_LINE_MEMBER(mastboy_adpcm_int);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(interrupt);
|
||||
};
|
||||
|
||||
|
||||
@ -497,9 +503,11 @@ public:
|
||||
void mastboy_state::video_start()
|
||||
{
|
||||
m_gfxdecode->gfx(0)->set_source(m_vram);
|
||||
|
||||
save_pointer(NAME(m_vram), 0x10000);
|
||||
}
|
||||
|
||||
UINT32 mastboy_state::screen_update_mastboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 mastboy_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int y,x,i;
|
||||
int count = 0x000;
|
||||
@ -609,7 +617,7 @@ WRITE8_MEMBER(mastboy_state::banked_ram_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::mastboy_bank_w)
|
||||
WRITE8_MEMBER(mastboy_state::bank_w)
|
||||
{
|
||||
// controls access to banked ram / rom
|
||||
m_bank = data;
|
||||
@ -617,12 +625,12 @@ WRITE8_MEMBER(mastboy_state::mastboy_bank_w)
|
||||
|
||||
/* Backup RAM access */
|
||||
|
||||
READ8_MEMBER(mastboy_state::mastboy_backupram_r)
|
||||
READ8_MEMBER(mastboy_state::backupram_r)
|
||||
{
|
||||
return m_nvram[offset];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::mastboy_backupram_w)
|
||||
WRITE8_MEMBER(mastboy_state::backupram_w)
|
||||
{
|
||||
// if (m_backupram_enabled)
|
||||
// {
|
||||
@ -643,7 +651,7 @@ WRITE8_MEMBER(mastboy_state::backupram_enable_w)
|
||||
|
||||
/* MSM5205 Related */
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit0_w)
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_sambit0_w)
|
||||
{
|
||||
m_m5205_sambit0 = data & 1;
|
||||
m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
|
||||
@ -651,7 +659,7 @@ WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit0_w)
|
||||
logerror("msm5205 samplerate bit 0, set to %02x\n",data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit1_w)
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_sambit1_w)
|
||||
{
|
||||
m_m5205_sambit1 = data & 1;
|
||||
|
||||
@ -660,18 +668,18 @@ WRITE8_MEMBER(mastboy_state::msm5205_mastboy_m5205_sambit1_w)
|
||||
logerror("msm5205 samplerate bit 0, set to %02x\n",data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::mastboy_msm5205_reset_w)
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_reset_w)
|
||||
{
|
||||
m_m5205_part = 0;
|
||||
m_msm->reset_w(data & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::mastboy_msm5205_data_w)
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_data_w)
|
||||
{
|
||||
m_m5205_next = data;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mastboy_state::mastboy_adpcm_int)
|
||||
WRITE_LINE_MEMBER(mastboy_state::adpcm_int)
|
||||
{
|
||||
m_msm->data_w(m_m5205_next);
|
||||
m_m5205_next >>= 4;
|
||||
@ -684,14 +692,14 @@ WRITE_LINE_MEMBER(mastboy_state::mastboy_adpcm_int)
|
||||
|
||||
/* Interrupt Handling */
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::mastboy_irq0_ack_w)
|
||||
WRITE8_MEMBER(mastboy_state::irq0_ack_w)
|
||||
{
|
||||
m_irq0_ack = data;
|
||||
if ((data & 1) == 1)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mastboy_state::mastboy_interrupt)
|
||||
INTERRUPT_GEN_MEMBER(mastboy_state::interrupt)
|
||||
{
|
||||
if ((m_irq0_ack & 1) == 1)
|
||||
{
|
||||
@ -711,21 +719,21 @@ static ADDRESS_MAP_START( mastboy_map, AS_PROGRAM, 8, mastboy_state )
|
||||
|
||||
AM_RANGE(0xc000, 0xffff) AM_READWRITE(banked_ram_r,banked_ram_w) // mastboy bank area read / write
|
||||
|
||||
AM_RANGE(0xff000, 0xff7ff) AM_READWRITE(mastboy_backupram_r,mastboy_backupram_w) AM_SHARE("nvram")
|
||||
AM_RANGE(0xff000, 0xff7ff) AM_READWRITE(backupram_r,backupram_w) AM_SHARE("nvram")
|
||||
|
||||
AM_RANGE(0xff800, 0xff807) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xff808, 0xff80f) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xff810, 0xff817) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xff818, 0xff81f) AM_READ_PORT("DSW2")
|
||||
|
||||
AM_RANGE(0xff820, 0xff827) AM_WRITE(mastboy_bank_w)
|
||||
AM_RANGE(0xff828, 0xff828) AM_DEVWRITE("saa", saa1099_device, saa1099_data_w)
|
||||
AM_RANGE(0xff829, 0xff829) AM_DEVWRITE("saa", saa1099_device, saa1099_control_w)
|
||||
AM_RANGE(0xff830, 0xff830) AM_WRITE(mastboy_msm5205_data_w)
|
||||
AM_RANGE(0xff838, 0xff838) AM_WRITE(mastboy_irq0_ack_w)
|
||||
AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_mastboy_m5205_sambit0_w)
|
||||
AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_mastboy_m5205_sambit1_w)
|
||||
AM_RANGE(0xff83b, 0xff83b) AM_WRITE(mastboy_msm5205_reset_w)
|
||||
AM_RANGE(0xff820, 0xff827) AM_WRITE(bank_w)
|
||||
AM_RANGE(0xff828, 0xff828) AM_DEVWRITE("saa", saa1099_device, data_w)
|
||||
AM_RANGE(0xff829, 0xff829) AM_DEVWRITE("saa", saa1099_device, control_w)
|
||||
AM_RANGE(0xff830, 0xff830) AM_WRITE(msm5205_data_w)
|
||||
AM_RANGE(0xff838, 0xff838) AM_WRITE(irq0_ack_w)
|
||||
AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_sambit0_w)
|
||||
AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_sambit1_w)
|
||||
AM_RANGE(0xff83b, 0xff83b) AM_WRITE(msm5205_reset_w)
|
||||
AM_RANGE(0xff83c, 0xff83c) AM_WRITE(backupram_enable_w)
|
||||
|
||||
AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM
|
||||
@ -733,20 +741,20 @@ ADDRESS_MAP_END
|
||||
|
||||
/* Ports */
|
||||
|
||||
READ8_MEMBER(mastboy_state::mastboy_port_38_read)
|
||||
READ8_MEMBER(mastboy_state::port_38_read)
|
||||
{
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
READ8_MEMBER(mastboy_state::mastboy_nmi_read)
|
||||
READ8_MEMBER(mastboy_state::nmi_read)
|
||||
{
|
||||
// this is read in the NMI, it's related to the Z180 MMU I think, must return right value or game jumps to 0000
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( mastboy_io_map, AS_IO, 8, mastboy_state )
|
||||
AM_RANGE(0x38, 0x38) AM_READ(mastboy_port_38_read)
|
||||
AM_RANGE(0x39, 0x39) AM_READ(mastboy_nmi_read)
|
||||
AM_RANGE(0x38, 0x38) AM_READ(port_38_read)
|
||||
AM_RANGE(0x39, 0x39) AM_READ(nmi_read)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input Ports */
|
||||
@ -866,6 +874,19 @@ GFXDECODE_END
|
||||
|
||||
/* Machine Functions / Driver */
|
||||
|
||||
void mastboy_state::machine_start()
|
||||
{
|
||||
m_vram = memregion( "gfx1" )->base(); // makes decoding the RAM based tiles easier this way
|
||||
|
||||
save_item(NAME(m_bank));
|
||||
save_item(NAME(m_irq0_ack));
|
||||
save_item(NAME(m_backupram_enabled));
|
||||
save_item(NAME(m_m5205_next));
|
||||
save_item(NAME(m_m5205_part));
|
||||
save_item(NAME(m_m5205_sambit0));
|
||||
save_item(NAME(m_m5205_sambit1));
|
||||
}
|
||||
|
||||
void mastboy_state::machine_reset()
|
||||
{
|
||||
/* clear some ram */
|
||||
@ -885,7 +906,7 @@ static MACHINE_CONFIG_START( mastboy, mastboy_state )
|
||||
MCFG_CPU_ADD("maincpu", Z180, 12000000/2) /* HD647180X0CP6-1M1R */
|
||||
MCFG_CPU_PROGRAM_MAP(mastboy_map)
|
||||
MCFG_CPU_IO_MAP(mastboy_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mastboy_state, mastboy_interrupt)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mastboy_state, interrupt)
|
||||
|
||||
MCFG_NVRAM_ADD_1FILL("nvram")
|
||||
|
||||
@ -896,7 +917,7 @@ static MACHINE_CONFIG_START( mastboy, mastboy_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mastboy_state, screen_update_mastboy)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mastboy_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mastboy)
|
||||
@ -909,7 +930,7 @@ static MACHINE_CONFIG_START( mastboy, mastboy_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
MCFG_SOUND_ADD("msm", MSM5205, 384000)
|
||||
MCFG_MSM5205_VCLK_CB(WRITELINE(mastboy_state, mastboy_adpcm_int)) /* interrupt function */
|
||||
MCFG_MSM5205_VCLK_CB(WRITELINE(mastboy_state, adpcm_int)) /* interrupt function */
|
||||
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_SEX_4B) /* 4KHz 4-bit */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
@ -993,10 +1014,6 @@ ROM_START( mastboyi )
|
||||
/* 0x1c0000 to 0x1fffff EMPTY */
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(mastboy_state,mastboy)
|
||||
{
|
||||
m_vram = memregion( "gfx1" )->base(); // makes decoding the RAM based tiles easier this way
|
||||
}
|
||||
|
||||
GAME( 1991, mastboy, 0, mastboy, mastboy, mastboy_state, mastboy, ROT0, "Gaelco", "Master Boy (Spanish, PCB Rev A)", 0 )
|
||||
GAME( 1991, mastboyi, mastboy, mastboy, mastboy, mastboy_state, mastboy, ROT0, "Gaelco", "Master Boy (Italian, PCB Rev A)", 0 )
|
||||
GAME( 1991, mastboy, 0, mastboy, mastboy, driver_device, 0, ROT0, "Gaelco", "Master Boy (Spanish, PCB Rev A)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1991, mastboyi, mastboy, mastboy, mastboy, driver_device, 0, ROT0, "Gaelco", "Master Boy (Italian, PCB Rev A)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -1283,8 +1283,8 @@ static ADDRESS_MAP_START( mpu4_68k_map, AS_PROGRAM, 16, mpu4vid_state )
|
||||
AM_RANGE(0x000000, 0x7fffff) AM_ROM
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_SHARE("vid_mainram")
|
||||
// AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE8(ef9369_r, ef9369_w,0x00ff)
|
||||
/* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
|
||||
|
||||
@ -1303,8 +1303,8 @@ static ADDRESS_MAP_START( mpu4oki_68k_map, AS_PROGRAM, 16, mpu4vid_state )
|
||||
AM_RANGE(0x600000, 0x63ffff) AM_RAM /* The Mating Game has an extra 256kB RAM on the program card */
|
||||
// AM_RANGE(0x640000, 0x7fffff) AM_NOP /* Possible bug, reads and writes here */
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_SHARE("vid_mainram")
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE8(ef9369_r, ef9369_w,0x00ff)
|
||||
|
||||
AM_RANGE(0xb00000, 0xb0000f) AM_DEVREADWRITE8("scn2674_vid", scn2674_device, mpu4_vid_scn2674_r, mpu4_vid_scn2674_w,0x00ff)
|
||||
@ -1325,8 +1325,8 @@ static ADDRESS_MAP_START( bwbvid_68k_map, AS_PROGRAM, 16, mpu4vid_state )
|
||||
AM_RANGE(0x000000, 0x7fffff) AM_ROM
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_SHARE("vid_mainram")
|
||||
AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE8(ef9369_r, ef9369_w,0x00ff)
|
||||
// AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(bt471_r,bt471_w) //Some games use this
|
||||
/* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
|
||||
@ -1343,8 +1343,8 @@ static ADDRESS_MAP_START( bwbvid5_68k_map, AS_PROGRAM, 16, mpu4vid_state )
|
||||
AM_RANGE(0x000000, 0x7fffff) AM_ROM
|
||||
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_SHARE("vid_mainram")
|
||||
AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE8(ef9369_r, ef9369_w,0x00ff)
|
||||
//AM_RANGE(0xa00000, 0xa00003) AM_READWRITE8(bt471_r,bt471_w,0x00ff) Some games use this
|
||||
/* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
|
||||
|
@ -62,12 +62,12 @@ WRITE16_MEMBER(xorworld_state::eeprom_data_w)
|
||||
m_eeprom->di_write(data & 0x01);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(xorworld_state::xorworld_irq2_ack_w)
|
||||
WRITE16_MEMBER(xorworld_state::irq2_ack_w)
|
||||
{
|
||||
m_maincpu->set_input_line(2, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(xorworld_state::xorworld_irq6_ack_w)
|
||||
WRITE16_MEMBER(xorworld_state::irq6_ack_w)
|
||||
{
|
||||
m_maincpu->set_input_line(6, CLEAR_LINE);
|
||||
}
|
||||
@ -77,15 +77,15 @@ static ADDRESS_MAP_START( xorworld_map, AS_PROGRAM, 16, xorworld_state )
|
||||
AM_RANGE(0x200000, 0x200001) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x400000, 0x400001) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("saa", saa1099_device, saa1099_data_w, 0x00ff)
|
||||
AM_RANGE(0x800002, 0x800003) AM_DEVWRITE8("saa", saa1099_device, saa1099_control_w, 0x00ff)
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVWRITE8("saa", saa1099_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x800002, 0x800003) AM_DEVWRITE8("saa", saa1099_device, control_w, 0x00ff)
|
||||
AM_RANGE(0xa00008, 0xa00009) AM_WRITE(eeprom_chip_select_w)
|
||||
AM_RANGE(0xa0000a, 0xa0000b) AM_WRITE(eeprom_serial_clock_w)
|
||||
AM_RANGE(0xa0000c, 0xa0000d) AM_WRITE(eeprom_data_w)
|
||||
AM_RANGE(0xffc000, 0xffc7ff) AM_RAM_WRITE(xorworld_videoram16_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xffc000, 0xffc7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xffc800, 0xffc87f) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xffc880, 0xffc881) AM_WRITE(xorworld_irq2_ack_w)
|
||||
AM_RANGE(0xffc882, 0xffc883) AM_WRITE(xorworld_irq6_ack_w)
|
||||
AM_RANGE(0xffc880, 0xffc881) AM_WRITE(irq2_ack_w)
|
||||
AM_RANGE(0xffc882, 0xffc883) AM_WRITE(irq6_ack_w)
|
||||
AM_RANGE(0xffc884, 0xffffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -182,7 +182,7 @@ static MACHINE_CONFIG_START( xorworld, xorworld_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(xorworld_state, screen_update_xorworld)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(xorworld_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", xorworld)
|
||||
@ -235,4 +235,4 @@ DRIVER_INIT_MEMBER(xorworld_state,xorworld)
|
||||
}
|
||||
|
||||
|
||||
GAME( 1990, xorworld, 0, xorworld, xorworld, xorworld_state, xorworld, ROT0, "Gaelco", "Xor World (prototype)", 0 )
|
||||
GAME( 1990, xorworld, 0, xorworld, xorworld, xorworld_state, xorworld, ROT0, "Gaelco", "Xor World (prototype)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -5,30 +5,36 @@ class xorworld_state : public driver_device
|
||||
public:
|
||||
xorworld_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_eeprom(*this, "eeprom"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_spriteram(*this, "spriteram") { }
|
||||
|
||||
required_shared_ptr<UINT16> m_videoram;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
required_shared_ptr<UINT16> m_spriteram;
|
||||
DECLARE_WRITE16_MEMBER(xorworld_irq2_ack_w);
|
||||
DECLARE_WRITE16_MEMBER(xorworld_irq6_ack_w);
|
||||
DECLARE_WRITE16_MEMBER(xorworld_videoram16_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_chip_select_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_serial_clock_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_data_w);
|
||||
DECLARE_DRIVER_INIT(xorworld);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
virtual void video_start();
|
||||
DECLARE_PALETTE_INIT(xorworld);
|
||||
UINT32 screen_update_xorworld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<UINT16> m_videoram;
|
||||
required_shared_ptr<UINT16> m_spriteram;
|
||||
|
||||
tilemap_t *m_bg_tilemap;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(irq2_ack_w);
|
||||
DECLARE_WRITE16_MEMBER(irq6_ack_w);
|
||||
DECLARE_WRITE16_MEMBER(videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_chip_select_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_serial_clock_w);
|
||||
DECLARE_WRITE16_MEMBER(eeprom_data_w);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
|
||||
DECLARE_DRIVER_INIT(xorworld);
|
||||
virtual void video_start();
|
||||
DECLARE_PALETTE_INIT(xorworld);
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
};
|
||||
|
@ -49,10 +49,9 @@ PALETTE_INIT_MEMBER(xorworld_state, xorworld)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(xorworld_state::xorworld_videoram16_w)
|
||||
WRITE16_MEMBER(xorworld_state::videoram_w)
|
||||
{
|
||||
UINT16 *videoram = m_videoram;
|
||||
COMBINE_DATA(&videoram[offset]);
|
||||
COMBINE_DATA(&m_videoram[offset]);
|
||||
m_bg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
@ -68,8 +67,7 @@ WRITE16_MEMBER(xorworld_state::xorworld_videoram16_w)
|
||||
|
||||
TILE_GET_INFO_MEMBER(xorworld_state::get_bg_tile_info)
|
||||
{
|
||||
UINT16 *videoram = m_videoram;
|
||||
int data = videoram[tile_index];
|
||||
int data = m_videoram[tile_index];
|
||||
int code = data & 0x0fff;
|
||||
|
||||
SET_TILE_INFO_MEMBER(0, code, data >> 12, 0);
|
||||
@ -96,21 +94,18 @@ void xorworld_state::video_start()
|
||||
|
||||
void xorworld_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
UINT16 *spriteram16 = m_spriteram;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 0x40; i += 2)
|
||||
for (int i = 0; i < 0x40; i += 2)
|
||||
{
|
||||
int sx = spriteram16[i] & 0x00ff;
|
||||
int sy = 240 - (((spriteram16[i] & 0xff00) >> 8) & 0xff);
|
||||
int code = (spriteram16[i+1] & 0x0ffc) >> 2;
|
||||
int color = (spriteram16[i+1] & 0xf000) >> 12;
|
||||
int sx = m_spriteram[i] & 0x00ff;
|
||||
int sy = 240 - (((m_spriteram[i] & 0xff00) >> 8) & 0xff);
|
||||
int code = (m_spriteram[i+1] & 0x0ffc) >> 2;
|
||||
int color = (m_spriteram[i+1] & 0xf000) >> 12;
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, code, color, 0, 0, sx, sy, 0);
|
||||
}
|
||||
}
|
||||
|
||||
UINT32 xorworld_state::screen_update_xorworld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 xorworld_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
draw_sprites(bitmap, cliprect);
|
||||
|
@ -334,8 +334,8 @@ static ADDRESS_MAP_START( samcoupe_io, AS_IO, 8, samcoupe_state )
|
||||
AM_RANGE(0x00fd, 0x00fd) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_midi_r, samcoupe_midi_w)
|
||||
AM_RANGE(0x00fe, 0x00fe) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_keyboard_r, samcoupe_border_w)
|
||||
AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READ(samcoupe_attributes_r)
|
||||
AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, saa1099_data_w)
|
||||
AM_RANGE(0x01ff, 0x01ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, saa1099_control_w)
|
||||
AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, data_w)
|
||||
AM_RANGE(0x01ff, 0x01ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE("saa1099", saa1099_device, control_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user