alpha68k.cpp: Cleanups and clock corrections (nw)

This commit is contained in:
AJR 2018-05-11 16:07:05 -04:00
parent 1b2ff8511a
commit c8b72e09bf
3 changed files with 39 additions and 107 deletions

View File

@ -283,43 +283,17 @@ READ16_MEMBER(alpha68k_state::jongbou_inputs_r)
/******************************************************************************/
WRITE16_MEMBER(alpha68k_state::kyros_sound_w)
{
if(ACCESSING_BITS_8_15)
m_soundlatch->write(space, 0, (data >> 8) & 0xff);
}
WRITE16_MEMBER(alpha68k_state::alpha68k_II_sound_w)
{
if(ACCESSING_BITS_0_7)
m_soundlatch->write(space, 0, data & 0xff);
}
WRITE16_MEMBER(alpha68k_state::alpha68k_V_sound_w)
{
/* Sound & fix bank select are in the same word */
if(ACCESSING_BITS_0_7)
m_soundlatch->write(space, 0, data & 0xff);
if(ACCESSING_BITS_8_15)
alpha68k_V_video_bank_w((data >> 8) & 0xff);
}
//AT
WRITE16_MEMBER(alpha68k_state::paddlema_soundlatch_w)
WRITE8_MEMBER(alpha68k_state::paddlema_soundlatch_w)
{
if (ACCESSING_BITS_0_7)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(0, HOLD_LINE);
}
WRITE16_MEMBER(alpha68k_state::tnextspc_soundlatch_w)
WRITE8_MEMBER(alpha68k_state::tnextspc_soundlatch_w)
{
if (ACCESSING_BITS_0_7)
{
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
m_soundlatch->write(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
//ZT
/******************************************************************************/
@ -652,7 +626,8 @@ void alpha68k_state::kyros_map(address_map &map)
map(0x060000, 0x060001).ram().share("videoram"); // MSB: watchdog, LSB: BGC
map(0x080000, 0x0801ff).rw(this, FUNC(alpha68k_state::kyros_alpha_trigger_r), FUNC(alpha68k_state::alpha_microcontroller_w));
map(0x0c0000, 0x0c0001).portr("IN0");
map(0x0e0000, 0x0e0001).rw(this, FUNC(alpha68k_state::kyros_dip_r), FUNC(alpha68k_state::kyros_sound_w));
map(0x0e0000, 0x0e0001).r(this, FUNC(alpha68k_state::kyros_dip_r));
map(0x0e0000, 0x0e0000).w("soundlatch", FUNC(generic_latch_8_device::write));
}
void alpha68k_state::alpha68k_I_map(address_map &map)
@ -664,7 +639,8 @@ void alpha68k_state::alpha68k_I_map(address_map &map)
map(0x180008, 0x180009).portr("IN4"); // LSB: DSW1
map(0x300000, 0x300001).portr("IN0"); // joy1, joy2
map(0x340000, 0x340001).portr("IN1"); // coin, start, service
map(0x380000, 0x380001).portr("IN2").w(this, FUNC(alpha68k_state::paddlema_soundlatch_w)); // LSB: sound latch write and RST38 trigger, joy3, joy4
map(0x380000, 0x380001).portr("IN2");
map(0x380001, 0x380001).w(this, FUNC(alpha68k_state::paddlema_soundlatch_w)); // LSB: sound latch write and RST38 trigger, joy3, joy4
}
void alpha68k_state::alpha68k_II_map(address_map &map)
@ -672,7 +648,7 @@ void alpha68k_state::alpha68k_II_map(address_map &map)
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x040fff).ram().share("shared_ram");
map(0x080000, 0x080001).r(this, FUNC(alpha68k_state::control_1_r)); /* Joysticks */
map(0x080000, 0x080001).w(this, FUNC(alpha68k_state::alpha68k_II_sound_w));
map(0x080001, 0x080001).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x0c0000, 0x0c0001).r(this, FUNC(alpha68k_state::control_2_r)); /* CN1 & Dip 1 */
map(0x0c0000, 0x0c00ff).w(this, FUNC(alpha68k_state::alpha68k_II_video_bank_w));
map(0x0c8000, 0x0c8001).r(this, FUNC(alpha68k_state::control_3_r)); /* Bottom of CN2 */
@ -691,7 +667,9 @@ void alpha68k_state::alpha68k_V_map(address_map &map)
{
map(0x000000, 0x03ffff).rom();
map(0x040000, 0x043fff).ram().share("shared_ram");
map(0x080000, 0x080001).rw(this, FUNC(alpha68k_state::control_1_r), FUNC(alpha68k_state::alpha68k_V_sound_w)); /* Joysticks */
map(0x080000, 0x080001).r(this, FUNC(alpha68k_state::control_1_r)); /* Joysticks */
map(0x080000, 0x080000).w(this, FUNC(alpha68k_state::alpha68k_V_video_bank_w));
map(0x080001, 0x080001).w("soundlatch", FUNC(generic_latch_8_device::write));
map(0x0c0000, 0x0c0001).r(this, FUNC(alpha68k_state::control_2_V_r)); /* Dip 2 */
map(0x0c0000, 0x0c00ff).w(this, FUNC(alpha68k_state::alpha68k_V_video_control_w));
map(0x0d8000, 0x0d8001).nopr(); /* IRQ ack? */
@ -724,14 +702,14 @@ void alpha68k_state::tnextspc_map(address_map &map)
map(0x0e0018, 0x0e0019).r(this, FUNC(alpha68k_state::sound_cpu_r));
map(0x0f0000, 0x0f0001).w(this, FUNC(alpha68k_state::tnextspc_unknown_w));
map(0x0f0002, 0x0f0005).w(this, FUNC(alpha68k_state::tnextspc_coin_counters_w));
map(0x0f0008, 0x0f0009).w(this, FUNC(alpha68k_state::tnextspc_soundlatch_w));
map(0x0f0009, 0x0f0009).w(this, FUNC(alpha68k_state::tnextspc_soundlatch_w));
}
/******************************************************************************/
WRITE8_MEMBER(alpha68k_state::sound_bank_w)
{
membank("bank7")->set_entry(data);
membank("bank7")->set_entry(data & 0x1f);
}
void alpha68k_state::sound_map(address_map &map)
@ -794,12 +772,13 @@ void alpha68k_state::tnextspc_sound_map(address_map &map)
void alpha68k_state::sound_portmap(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).rw(m_soundlatch, FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::clear_w));
map(0x08, 0x08).w("dac", FUNC(dac_byte_interface::write));
map.global_mask(0x0f);
map(0x00, 0x00).mirror(0x0f).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x00, 0x00).mirror(0x01).w(m_soundlatch, FUNC(generic_latch_8_device::clear_w));
map(0x08, 0x08).mirror(0x01).w("dac", FUNC(dac_byte_interface::write));
map(0x0a, 0x0b).w("ym2", FUNC(ym2413_device::write));
map(0x0c, 0x0d).w("ym1", FUNC(ym2203_device::write));
map(0x0e, 0x0e).w(this, FUNC(alpha68k_state::sound_bank_w));
map(0x0e, 0x0e).mirror(0x01).w(this, FUNC(alpha68k_state::sound_bank_w));
}
void alpha68k_state::kyros_sound_portmap(address_map &map)
@ -1918,7 +1897,7 @@ MACHINE_START_MEMBER(alpha68k_state,alpha68k_II)
// Pixel clock, assuming that it can't be 4 MHz because 4 MHz / 15,20 KHz = 263 HTOTAL (VERY unlikely).
#define ALPHA68K_PIXEL_CLOCK XTAL(24'000'000)/4
#define ALPHA68K_PIXEL_CLOCK (24_MHz_XTAL / 4)
#define ALPHA68K_HTOTAL 394
#define ALPHA68K_HBEND 0
#define ALPHA68K_HBSTART 256
@ -1990,12 +1969,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(alpha68k_state::kyros)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000)/4) /* Verified on bootleg PCB */
MCFG_DEVICE_ADD("maincpu", M68000, 24_MHz_XTAL / 4) /* Verified on bootleg PCB */
MCFG_DEVICE_PROGRAM_MAP(kyros_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", alpha68k_state, irq1_line_hold)
MCFG_DEVICE_PERIODIC_INT_DRIVER(alpha68k_state, irq2_line_hold, 60) // MCU irq
MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(24'000'000)/6) /* Verified on bootleg PCB */
MCFG_DEVICE_ADD("audiocpu", Z80, 24_MHz_XTAL / 6) /* Verified on bootleg PCB */
MCFG_DEVICE_PROGRAM_MAP(kyros_sound_map)
MCFG_DEVICE_IO_MAP(kyros_sound_portmap)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", alpha68k_state, irq0_line_hold)
@ -2025,13 +2004,13 @@ MACHINE_CONFIG_START(alpha68k_state::kyros)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_ADD("ym1", YM2203, XTAL(24'000'000)/12) /* Verified on bootleg PCB */
MCFG_DEVICE_ADD("ym1", YM2203, 24_MHz_XTAL / 12) /* Verified on bootleg PCB */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.35)
MCFG_DEVICE_ADD("ym2", YM2203, XTAL(24'000'000)/12) /* Verified on bootleg PCB */
MCFG_DEVICE_ADD("ym2", YM2203, 24_MHz_XTAL / 12) /* Verified on bootleg PCB */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.35)
MCFG_DEVICE_ADD("ym3", YM2203, XTAL(24'000'000)/12) /* Verified on bootleg PCB */
MCFG_DEVICE_ADD("ym3", YM2203, 24_MHz_XTAL / 12) /* Verified on bootleg PCB */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.9)
MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.75) // unknown DAC
@ -2163,7 +2142,6 @@ MACHINE_CONFIG_START(alpha68k_state::alpha68k_II)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_ADD("ym1", YM2203, 3000000)
MCFG_AY8910_PORT_A_READ_CB(READ8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, alpha68k_state, porta_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.65)
@ -2220,7 +2198,6 @@ MACHINE_CONFIG_START(alpha68k_state::alpha68k_II_gm)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_ADD("ym1", YM2203, 3000000)
MCFG_AY8910_PORT_A_READ_CB(READ8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, alpha68k_state, porta_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.65)
@ -2235,11 +2212,11 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(alpha68k_state::alpha68k_V)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 10000000) /* ? */
MCFG_DEVICE_ADD("maincpu", M68000, 20_MHz_XTAL / 2)
MCFG_DEVICE_PROGRAM_MAP(alpha68k_V_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", alpha68k_state, irq3_line_hold)/* VBL */
MCFG_DEVICE_ADD("audiocpu", Z80, /*3579545*/3579545*2) /* Unlikely but needed to stop nested NMI's */
MCFG_DEVICE_ADD("audiocpu", Z80, 24_MHz_XTAL / 4)
MCFG_DEVICE_PROGRAM_MAP(sound_map)
MCFG_DEVICE_IO_MAP(sound_portmap)
MCFG_DEVICE_PERIODIC_INT_DRIVER(alpha68k_state, alpha68k_sound_nmi, 8500)
@ -2268,66 +2245,24 @@ MACHINE_CONFIG_START(alpha68k_state::alpha68k_V)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_ADD("ym1", YM2203, 3000000)
MCFG_AY8910_PORT_A_READ_CB(READ8("soundlatch", generic_latch_8_device, read))
MCFG_DEVICE_ADD("ym1", YM2203, ALPHA68K_PIXEL_CLOCK / 2)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, alpha68k_state, porta_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.65)
MCFG_DEVICE_ADD("ym2", YM2413, 3579545)
MCFG_DEVICE_ADD("ym2", YM2413, 3.579545_MHz_XTAL)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.75) // unknown DAC
MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.75) // ALPHA-VOICE88 custom DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(alpha68k_state::alpha68k_V_sb)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", M68000, 10000000) /* ? */
MCFG_DEVICE_PROGRAM_MAP(alpha68k_V_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", alpha68k_state, irq3_line_hold)/* VBL */
MCFG_DEVICE_ADD("audiocpu", Z80, /*3579545*/3579545*2) /* Unlikely but needed to stop nested NMI's */
MCFG_DEVICE_PROGRAM_MAP(sound_map)
MCFG_DEVICE_IO_MAP(sound_portmap)
MCFG_DEVICE_PERIODIC_INT_DRIVER(alpha68k_state, alpha68k_sound_nmi, 8500)
MCFG_MACHINE_START_OVERRIDE(alpha68k_state,alpha68k_V)
MCFG_MACHINE_RESET_OVERRIDE(alpha68k_state,alpha68k_V)
alpha68k_V(config);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
// MCFG_SCREEN_REFRESH_RATE(60)
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
// MCFG_SCREEN_SIZE(32*8, 32*8)
// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_RAW_PARAMS(ALPHA68K_PIXEL_CLOCK,ALPHA68K_HTOTAL,ALPHA68K_HBEND,ALPHA68K_HBSTART,ALPHA68K_VTOTAL,ALPHA68K_VBEND,ALPHA68K_VBSTART)
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(alpha68k_state, screen_update_alpha68k_V_sb)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_V)
MCFG_PALETTE_ADD("palette", 4096)
MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
/* sound hardware */
SPEAKER(config, "speaker").front_center();
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_DEVICE_ADD("ym1", YM2203, 3000000)
MCFG_AY8910_PORT_A_READ_CB(READ8("soundlatch", generic_latch_8_device, read))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, alpha68k_state, porta_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.65)
MCFG_DEVICE_ADD("ym2", YM2413, 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
MCFG_DEVICE_ADD("dac", DAC_8BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.75) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
MACHINE_CONFIG_START(alpha68k_state::tnextspc)

View File

@ -63,11 +63,8 @@ public:
DECLARE_READ16_MEMBER(control_3_r);
DECLARE_READ16_MEMBER(control_4_r);
DECLARE_READ16_MEMBER(jongbou_inputs_r);
DECLARE_WRITE16_MEMBER(kyros_sound_w);
DECLARE_WRITE16_MEMBER(alpha68k_II_sound_w);
DECLARE_WRITE16_MEMBER(alpha68k_V_sound_w);
DECLARE_WRITE16_MEMBER(paddlema_soundlatch_w);
DECLARE_WRITE16_MEMBER(tnextspc_soundlatch_w);
DECLARE_WRITE8_MEMBER(paddlema_soundlatch_w);
DECLARE_WRITE8_MEMBER(tnextspc_soundlatch_w);
DECLARE_READ16_MEMBER(kyros_alpha_trigger_r);
DECLARE_READ16_MEMBER(alpha_II_trigger_r);
DECLARE_READ16_MEMBER(alpha_V_trigger_r);
@ -113,7 +110,7 @@ public:
uint32_t screen_update_alpha68k_V_sb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(alpha68k_sound_nmi);
void alpha68k_flipscreen_w( int flip );
void alpha68k_V_video_bank_w( int bank );
DECLARE_WRITE8_MEMBER(alpha68k_V_video_bank_w);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int j, int s, int e );
void draw_sprites_V( bitmap_ind16 &bitmap, const rectangle &cliprect, int j, int s, int e, int fx_mask, int fy_mask, int sprite_mask );
void draw_sprites_I( bitmap_ind16 &bitmap, const rectangle &cliprect, int c, int d, int yshift );

View File

@ -15,9 +15,9 @@ void alpha68k_state::alpha68k_flipscreen_w( int flip )
m_flipscreen = flip;
}
void alpha68k_state::alpha68k_V_video_bank_w( int bank )
WRITE8_MEMBER(alpha68k_state::alpha68k_V_video_bank_w)
{
m_bank_base = bank & 0xf;
m_bank_base = data & 0xf;
}
/******************************************************************************/