thief: Hook up PPI, verify XTALs, clean up machine configs

This commit is contained in:
Dirk Best 2017-04-29 11:32:09 +02:00
parent 955d8815be
commit 269a7abd65

View File

@ -15,8 +15,6 @@ Credits:
Shark Driver by Victor Trucco and Mike Balfour Shark Driver by Victor Trucco and Mike Balfour
Driver for Thief and NATO Defense by Phil Stroffolino Driver for Thief and NATO Defense by Phil Stroffolino
- 8255 emulation (ports 0x30..0x3f) could be better abstracted
- minor blitting glitches in playfield of Thief (XOR vs copy?) - minor blitting glitches in playfield of Thief (XOR vs copy?)
- Nato Defense gfx ROMs may be hooked up wrong; - Nato Defense gfx ROMs may be hooked up wrong;
@ -28,15 +26,13 @@ Credits:
#include "includes/thief.h" #include "includes/thief.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "sound/samples.h" #include "sound/samples.h"
#include "screen.h" #include "screen.h"
#include "speaker.h" #include "speaker.h"
#define MASTER_CLOCK XTAL_20MHz
INTERRUPT_GEN_MEMBER(thief_state::thief_interrupt) INTERRUPT_GEN_MEMBER(thief_state::thief_interrupt)
{ {
@ -105,53 +101,33 @@ WRITE8_MEMBER(thief_state::thief_input_select_w)
WRITE8_MEMBER( thief_state::tape_control_w ) WRITE8_MEMBER( thief_state::tape_control_w )
{ {
switch( data ) // avoid bogus coin counts after reset
{ if (data == 0x00)
case 0x02: /* coin meter on */ return;
break;
case 0x03: /* nop */ // 7---32-0 not used
break; // -6------ speaker right (crash track)
// --5----- tape motor
// ---4---- speaker left (talk track)
// ------1- coin meter
case 0x04: /* coin meter off */ machine().bookkeeping().coin_counter_w(0, BIT(data, 1) ? 0 : 1);
break;
case 0x08: /* talk track on */ tape_set_audio(kTalkTrack, BIT(data, 4) ? 0 : 1);
tape_set_audio( kTalkTrack, 1 ); tape_set_motor(BIT(data, 5) ? 0 : 1);
break; tape_set_audio(kCrashTrack, BIT(data, 6) ? 0 : 1);
case 0x09: /* talk track off */
tape_set_audio( kTalkTrack, 0 );
break;
case 0x0a: /* motor on */
tape_set_motor( 1 );
break;
case 0x0b: /* motor off */
tape_set_motor( 0 );
break;
case 0x0c: /* crash track on */
tape_set_audio( kCrashTrack, 1 );
break;
case 0x0d: /* crash track off */
tape_set_audio( kCrashTrack, 0 );
break;
}
} }
READ8_MEMBER( thief_state::thief_io_r ) READ8_MEMBER( thief_state::thief_io_r )
{ {
switch( m_input_select ) uint8_t data = 0xff;
{
case 0x01: return ioport("DSW1")->read(); if (BIT(m_input_select, 0)) data &= ioport("DSW1")->read();
case 0x02: return ioport("DSW2")->read(); if (BIT(m_input_select, 1)) data &= ioport("DSW2")->read();
case 0x04: return ioport("P1")->read(); if (BIT(m_input_select, 2)) data &= ioport("P1")->read();
case 0x08: return ioport("P2")->read(); if (BIT(m_input_select, 3)) data &= ioport("P2")->read();
}
return 0x00; return data;
} }
static ADDRESS_MAP_START( sharkatt_main_map, AS_PROGRAM, 8, thief_state ) static ADDRESS_MAP_START( sharkatt_main_map, AS_PROGRAM, 8, thief_state )
@ -177,9 +153,7 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, thief_state )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog */ AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog */
AM_RANGE(0x10, 0x10) AM_WRITE(thief_video_control_w) AM_RANGE(0x10, 0x10) AM_WRITE(thief_video_control_w)
AM_RANGE(0x30, 0x30) AM_WRITE(thief_input_select_w) /* 8255 */ AM_RANGE(0x30, 0x33) AM_MIRROR(0x0c) AM_DEVREADWRITE("ppi", i8255_device, read, write)
AM_RANGE(0x31, 0x31) AM_READ(thief_io_r) /* 8255 */
AM_RANGE(0x33, 0x33) AM_WRITE(tape_control_w)
AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay1", ay8910_device, address_data_w) AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
AM_RANGE(0x41, 0x41) AM_DEVREAD("ay1", ay8910_device, data_r) AM_RANGE(0x41, 0x41) AM_DEVREAD("ay1", ay8910_device, data_r)
AM_RANGE(0x42, 0x43) AM_DEVWRITE("ay2", ay8910_device, address_data_w) AM_RANGE(0x42, 0x43) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
@ -413,53 +387,18 @@ static const char *const natodef_sample_names[] =
}; };
static MACHINE_CONFIG_START( sharkatt, thief_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */
MCFG_CPU_PROGRAM_MAP(sharkatt_main_map)
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", thief_state, thief_interrupt)
/* 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, 0*8, 24*8-1)
MCFG_SCREEN_UPDATE_DRIVER(thief_state, screen_update_thief)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("tms", TMS9927, MASTER_CLOCK/4)
MCFG_TMS9927_CHAR_WIDTH(8)
MCFG_PALETTE_ADD("palette", 16)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay1", AY8910, 4000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("ay2", AY8910, 4000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("samples", SAMPLES, 0)
MCFG_SAMPLES_CHANNELS(2)
MCFG_SAMPLES_NAMES(sharkatt_sample_names)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( thief, thief_state ) static MACHINE_CONFIG_START( thief, thief_state )
MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz/2)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */
MCFG_CPU_PROGRAM_MAP(thief_main_map) MCFG_CPU_PROGRAM_MAP(thief_main_map)
MCFG_CPU_IO_MAP(io_map) MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", thief_state, thief_interrupt) MCFG_CPU_VBLANK_INT_DRIVER("screen", thief_state, thief_interrupt)
/* video hardware */ MCFG_DEVICE_ADD("ppi", I8255A, 0)
MCFG_I8255_OUT_PORTA_CB(WRITE8(thief_state, thief_input_select_w))
MCFG_I8255_IN_PORTB_CB(READ8(thief_state, thief_io_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(thief_state, tape_control_w))
// video hardware
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
@ -468,18 +407,18 @@ static MACHINE_CONFIG_START( thief, thief_state )
MCFG_SCREEN_UPDATE_DRIVER(thief_state, screen_update_thief) MCFG_SCREEN_UPDATE_DRIVER(thief_state, screen_update_thief)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("tms", TMS9927, MASTER_CLOCK/4) MCFG_DEVICE_ADD("tms", TMS9927, XTAL_20MHz/4)
MCFG_TMS9927_CHAR_WIDTH(8) MCFG_TMS9927_CHAR_WIDTH(8)
MCFG_PALETTE_ADD("palette", 16) MCFG_PALETTE_ADD("palette", 16)
/* sound hardware */ // sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay1", AY8910, 4000000/4) MCFG_SOUND_ADD("ay1", AY8910, XTAL_8MHz/2/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("ay2", AY8910, 4000000/4) MCFG_SOUND_ADD("ay2", AY8910, XTAL_8MHz/2/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("samples", SAMPLES, 0) MCFG_SOUND_ADD("samples", SAMPLES, 0)
@ -488,44 +427,23 @@ static MACHINE_CONFIG_START( thief, thief_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( sharkatt, thief )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(sharkatt_main_map)
static MACHINE_CONFIG_START( natodef, thief_state ) MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 24*8-1)
/* basic machine hardware */ MCFG_DEVICE_MODIFY("samples")
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */ MCFG_SAMPLES_NAMES(sharkatt_sample_names)
MCFG_CPU_PROGRAM_MAP(thief_main_map)
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", thief_state, thief_interrupt)
/* 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, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(thief_state, screen_update_thief)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("tms", TMS9927, MASTER_CLOCK/4)
MCFG_TMS9927_CHAR_WIDTH(8)
MCFG_PALETTE_ADD("palette", 16)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay1", AY8910, 4000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("ay2", AY8910, 4000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_SOUND_ADD("samples", SAMPLES, 0)
MCFG_SAMPLES_CHANNELS(2)
MCFG_SAMPLES_NAMES(natodef_sample_names)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( natodef, thief )
MCFG_DEVICE_MODIFY("samples")
MCFG_SAMPLES_NAMES(natodef_sample_names)
MACHINE_CONFIG_END
/**********************************************************/ /**********************************************************/
ROM_START( sharkatt ) ROM_START( sharkatt )