some more cleanup (nw)

This commit is contained in:
Miodrag Milanovic 2013-02-14 13:34:16 +00:00
parent 3bdc0ee891
commit c20b12eea3
8 changed files with 180 additions and 183 deletions

View File

@ -980,7 +980,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( slikz80_io_map, AS_IO, 8, itech8_state ) static ADDRESS_MAP_START( slikz80_io_map, AS_IO, 8, itech8_state )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(slikz80_port_r, slikz80_port_w) AM_RANGE(0x00, 0x00) AM_READWRITE(slikz80_port_r, slikz80_port_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -2636,17 +2636,17 @@ DRIVER_INIT_MEMBER(itech8_state,grmatch)
DRIVER_INIT_MEMBER(itech8_state,slikshot) DRIVER_INIT_MEMBER(itech8_state,slikshot)
{ {
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler (0x0180, 0x0180, FUNC(slikshot_z80_r)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler (0x0180, 0x0180, read8_delegate(FUNC(itech8_state::slikshot_z80_r),this));
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler (0x01cf, 0x01cf, FUNC(slikshot_z80_control_r)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler (0x01cf, 0x01cf, read8_delegate(FUNC(itech8_state::slikshot_z80_control_r),this));
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x01cf, 0x01cf, FUNC(slikshot_z80_control_w)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x01cf, 0x01cf, write8_delegate(FUNC(itech8_state::slikshot_z80_control_w),this));
} }
DRIVER_INIT_MEMBER(itech8_state,sstrike) DRIVER_INIT_MEMBER(itech8_state,sstrike)
{ {
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler (0x1180, 0x1180, FUNC(slikshot_z80_r)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler (0x1180, 0x1180, read8_delegate(FUNC(itech8_state::slikshot_z80_r),this));
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler (0x11cf, 0x11cf, FUNC(slikshot_z80_control_r)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler (0x11cf, 0x11cf, read8_delegate(FUNC(itech8_state::slikshot_z80_control_r),this));
machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x11cf, 0x11cf, FUNC(slikshot_z80_control_w)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x11cf, 0x11cf, write8_delegate(FUNC(itech8_state::slikshot_z80_control_w),this));
} }

View File

@ -93,8 +93,8 @@ static ADDRESS_MAP_START( maniach_map, AS_PROGRAM, 8, matmania_state )
AM_RANGE(0x3010, 0x3010) AM_READ_PORT("IN1") AM_WRITE(maniach_sh_command_w) AM_RANGE(0x3010, 0x3010) AM_READ_PORT("IN1") AM_WRITE(maniach_sh_command_w)
AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("scroll") AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("scroll")
AM_RANGE(0x3030, 0x3030) AM_READ_PORT("DSW1") AM_WRITENOP /* ?? */ AM_RANGE(0x3030, 0x3030) AM_READ_PORT("DSW1") AM_WRITENOP /* ?? */
AM_RANGE(0x3040, 0x3040) AM_READWRITE_LEGACY(maniach_mcu_r,maniach_mcu_w) AM_RANGE(0x3040, 0x3040) AM_READWRITE(maniach_mcu_r,maniach_mcu_w)
AM_RANGE(0x3041, 0x3041) AM_READ_LEGACY(maniach_mcu_status_r) AM_RANGE(0x3041, 0x3041) AM_READ(maniach_mcu_status_r)
AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_SHARE("paletteram") AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x4000, 0xffff) AM_ROM AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -120,12 +120,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( maniach_mcu_map, AS_PROGRAM, 8, matmania_state ) static ADDRESS_MAP_START( maniach_mcu_map, AS_PROGRAM, 8, matmania_state )
ADDRESS_MAP_GLOBAL_MASK(0x7ff) ADDRESS_MAP_GLOBAL_MASK(0x7ff)
AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(maniach_68705_port_a_r,maniach_68705_port_a_w) AM_RANGE(0x0000, 0x0000) AM_READWRITE(maniach_68705_port_a_r,maniach_68705_port_a_w)
AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(maniach_68705_port_b_r,maniach_68705_port_b_w) AM_RANGE(0x0001, 0x0001) AM_READWRITE(maniach_68705_port_b_r,maniach_68705_port_b_w)
AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(maniach_68705_port_c_r,maniach_68705_port_c_w) AM_RANGE(0x0002, 0x0002) AM_READWRITE(maniach_68705_port_c_r,maniach_68705_port_c_w)
AM_RANGE(0x0004, 0x0004) AM_WRITE_LEGACY(maniach_68705_ddr_a_w) AM_RANGE(0x0004, 0x0004) AM_WRITE(maniach_68705_ddr_a_w)
AM_RANGE(0x0005, 0x0005) AM_WRITE_LEGACY(maniach_68705_ddr_b_w) AM_RANGE(0x0005, 0x0005) AM_WRITE(maniach_68705_ddr_b_w)
AM_RANGE(0x0006, 0x0006) AM_WRITE_LEGACY(maniach_68705_ddr_c_w) AM_RANGE(0x0006, 0x0006) AM_WRITE(maniach_68705_ddr_c_w)
AM_RANGE(0x0010, 0x007f) AM_RAM AM_RANGE(0x0010, 0x007f) AM_RAM
AM_RANGE(0x0080, 0x07ff) AM_ROM AM_RANGE(0x0080, 0x07ff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -15,7 +15,22 @@
#include "machine/nvram.h" #include "machine/nvram.h"
#include "machine/amigafdc.h" #include "machine/amigafdc.h"
class mquake_state : public amiga_state
{
public:
mquake_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag) { }
DECLARE_DRIVER_INIT(mquake);
DECLARE_MACHINE_RESET(mquake);
DECLARE_WRITE8_MEMBER( mquake_cia_0_porta_w );
DECLARE_READ8_MEMBER( mquake_cia_0_portb_r );
DECLARE_WRITE8_MEMBER( mquake_cia_0_portb_w );
DECLARE_READ8_MEMBER( es5503_sample_r );
DECLARE_WRITE16_MEMBER( output_w );
DECLARE_READ16_MEMBER( coin_chip_r );
DECLARE_WRITE16_MEMBER( coin_chip_w );
};
/************************************* /*************************************
* *
@ -32,21 +47,19 @@
* *
*************************************/ *************************************/
static WRITE8_DEVICE_HANDLER( mquake_cia_0_porta_w ) WRITE8_MEMBER(mquake_state::mquake_cia_0_porta_w)
{ {
amiga_state *sta = device->machine().driver_data<amiga_state>();
/* switch banks as appropriate */ /* switch banks as appropriate */
sta->m_bank1->set_entry(data & 1); m_bank1->set_entry(data & 1);
/* swap the write handlers between ROM and bank 1 based on the bit */ /* swap the write handlers between ROM and bank 1 based on the bit */
if ((data & 1) == 0) if ((data & 1) == 0)
/* overlay disabled, map RAM on 0x000000 */ /* overlay disabled, map RAM on 0x000000 */
sta->m_maincpu->space(AS_PROGRAM).install_write_bank(0x000000, 0x07ffff, "bank1"); m_maincpu->space(AS_PROGRAM).install_write_bank(0x000000, 0x07ffff, "bank1");
else else
/* overlay enabled, map Amiga system ROM on 0x000000 */ /* overlay enabled, map Amiga system ROM on 0x000000 */
sta->m_maincpu->space(AS_PROGRAM).unmap_write(0x000000, 0x07ffff); m_maincpu->space(AS_PROGRAM).unmap_write(0x000000, 0x07ffff);
} }
@ -66,17 +79,17 @@ static WRITE8_DEVICE_HANDLER( mquake_cia_0_porta_w )
* *
*************************************/ *************************************/
static READ8_DEVICE_HANDLER( mquake_cia_0_portb_r ) READ8_MEMBER(mquake_state::mquake_cia_0_portb_r)
{ {
/* parallel port */ /* parallel port */
logerror("%s:CIA0_portb_r\n", space.machine().describe_context()); logerror("%s:CIA0_portb_r\n", machine().describe_context());
return 0xff; return 0xff;
} }
static WRITE8_DEVICE_HANDLER( mquake_cia_0_portb_w ) WRITE8_MEMBER(mquake_state::mquake_cia_0_portb_w)
{ {
/* parallel port */ /* parallel port */
logerror("%s:CIA0_portb_w(%02x)\n", space.machine().describe_context(), data); logerror("%s:CIA0_portb_w(%02x)\n", machine().describe_context(), data);
} }
@ -87,34 +100,34 @@ static WRITE8_DEVICE_HANDLER( mquake_cia_0_portb_w )
* *
*************************************/ *************************************/
static READ8_HANDLER( es5503_sample_r ) READ8_MEMBER(mquake_state::es5503_sample_r)
{ {
UINT8 *rom = space.machine().root_device().memregion("es5503")->base(); UINT8 *rom = memregion("es5503")->base();
es5503_device *es5503 = space.machine().device<es5503_device>("es5503"); es5503_device *es5503 = machine().device<es5503_device>("es5503");
return rom[offset + (es5503->get_channel_strobe() * 0x10000)]; return rom[offset + (es5503->get_channel_strobe() * 0x10000)];
} }
static ADDRESS_MAP_START( mquake_es5503_map, AS_0, 8, amiga_state ) static ADDRESS_MAP_START( mquake_es5503_map, AS_0, 8, mquake_state )
AM_RANGE(0x000000, 0x1ffff) AM_READ_LEGACY(es5503_sample_r) AM_RANGE(0x000000, 0x1ffff) AM_READ(es5503_sample_r)
ADDRESS_MAP_END ADDRESS_MAP_END
static WRITE16_HANDLER( output_w ) WRITE16_MEMBER(mquake_state::output_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
logerror("%06x:output_w(%x) = %02x\n", space.device().safe_pc(), offset, data); logerror("%06x:output_w(%x) = %02x\n", space.device().safe_pc(), offset, data);
} }
static READ16_HANDLER( coin_chip_r ) READ16_MEMBER(mquake_state::coin_chip_r)
{ {
if (offset == 1) if (offset == 1)
return space.machine().root_device().ioport("COINCHIP")->read(); return ioport("COINCHIP")->read();
logerror("%06x:coin_chip_r(%02x) & %04x\n", space.device().safe_pc(), offset, mem_mask); logerror("%06x:coin_chip_r(%02x) & %04x\n", space.device().safe_pc(), offset, mem_mask);
return 0xffff; return 0xffff;
} }
static WRITE16_HANDLER( coin_chip_w ) WRITE16_MEMBER(mquake_state::coin_chip_w)
{ {
logerror("%06x:coin_chip_w(%02x) = %04x & %04x\n", space.device().safe_pc(), offset, data, mem_mask); logerror("%06x:coin_chip_w(%02x) = %04x & %04x\n", space.device().safe_pc(), offset, data, mem_mask);
} }
@ -133,7 +146,7 @@ static WRITE16_HANDLER( coin_chip_w )
* *
*************************************/ *************************************/
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, amiga_state ) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, mquake_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram")
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w)
@ -145,8 +158,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, amiga_state )
AM_RANGE(0x204000, 0x2041ff) AM_DEVREADWRITE8("es5503", es5503_device, read, write, 0x00ff) AM_RANGE(0x204000, 0x2041ff) AM_DEVREADWRITE8("es5503", es5503_device, read, write, 0x00ff)
AM_RANGE(0x282000, 0x282001) AM_READ_PORT("SW.LO") AM_RANGE(0x282000, 0x282001) AM_READ_PORT("SW.LO")
AM_RANGE(0x282002, 0x282003) AM_READ_PORT("SW.HI") AM_RANGE(0x282002, 0x282003) AM_READ_PORT("SW.HI")
AM_RANGE(0x284000, 0x28400f) AM_WRITE_LEGACY(output_w) AM_RANGE(0x284000, 0x28400f) AM_WRITE(output_w)
AM_RANGE(0x286000, 0x28600f) AM_READWRITE_LEGACY(coin_chip_r, coin_chip_w) AM_RANGE(0x286000, 0x28600f) AM_READWRITE(coin_chip_r, coin_chip_w)
AM_RANGE(0x300000, 0x3bffff) AM_ROM AM_REGION("user2", 0) AM_RANGE(0x300000, 0x3bffff) AM_ROM AM_REGION("user2", 0)
AM_RANGE(0xf00000, 0xfbffff) AM_ROM AM_REGION("user2", 0) /* Custom ROM */ AM_RANGE(0xf00000, 0xfbffff) AM_ROM AM_REGION("user2", 0) /* Custom ROM */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -166,11 +179,11 @@ static INPUT_PORTS_START( mquake )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* JS1SW */ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* JS1SW */
PORT_START("JOY0DAT") PORT_START("JOY0DAT")
PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, amiga_state,amiga_joystick_convert, 0) PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mquake_state,amiga_joystick_convert, 0)
PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("JOY1DAT") PORT_START("JOY1DAT")
PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, amiga_state,amiga_joystick_convert, 1) PORT_BIT( 0x0303, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mquake_state,amiga_joystick_convert, 1)
PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("P1JOY") PORT_START("P1JOY")
@ -304,7 +317,7 @@ INPUT_PORTS_END
* *
*************************************/ *************************************/
MACHINE_RESET_MEMBER(amiga_state,mquake) MACHINE_RESET_MEMBER(mquake_state,mquake)
{ {
MACHINE_RESET_CALL_MEMBER(amiga); MACHINE_RESET_CALL_MEMBER(amiga);
} }
@ -322,9 +335,9 @@ static const legacy_mos6526_interface cia_0_intf =
DEVCB_NULL, DEVCB_NULL,
DEVCB_NULL, DEVCB_NULL,
DEVCB_INPUT_PORT("CIA0PORTA"), DEVCB_INPUT_PORT("CIA0PORTA"),
DEVCB_HANDLER(mquake_cia_0_porta_w), /* port A */ DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_porta_w), /* port A */
DEVCB_HANDLER(mquake_cia_0_portb_r), DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_r),
DEVCB_HANDLER(mquake_cia_0_portb_w) /* port B */ DEVCB_DRIVER_MEMBER(mquake_state,mquake_cia_0_portb_w) /* port B */
}; };
static const legacy_mos6526_interface cia_1_intf = static const legacy_mos6526_interface cia_1_intf =
@ -339,13 +352,13 @@ static const legacy_mos6526_interface cia_1_intf =
DEVCB_NULL DEVCB_NULL
}; };
static MACHINE_CONFIG_START( mquake, amiga_state ) static MACHINE_CONFIG_START( mquake, mquake_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, AMIGA_68000_NTSC_CLOCK) MCFG_CPU_ADD("maincpu", M68000, AMIGA_68000_NTSC_CLOCK)
MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_MACHINE_RESET_OVERRIDE(amiga_state,mquake) MCFG_MACHINE_RESET_OVERRIDE(mquake_state,mquake)
MCFG_NVRAM_ADD_0FILL("nvram") MCFG_NVRAM_ADD_0FILL("nvram")
/* video hardware */ /* video hardware */
@ -356,12 +369,12 @@ static MACHINE_CONFIG_START( mquake, amiga_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512*2, 262) MCFG_SCREEN_SIZE(512*2, 262)
MCFG_SCREEN_VISIBLE_AREA((129-8)*2, (449+8-1)*2, 44-8, 244+8-1) MCFG_SCREEN_VISIBLE_AREA((129-8)*2, (449+8-1)*2, 44-8, 244+8-1)
MCFG_SCREEN_UPDATE_DRIVER(amiga_state, screen_update_amiga) MCFG_SCREEN_UPDATE_DRIVER(mquake_state, screen_update_amiga)
MCFG_PALETTE_LENGTH(4096) MCFG_PALETTE_LENGTH(4096)
MCFG_PALETTE_INIT_OVERRIDE(amiga_state,amiga) MCFG_PALETTE_INIT_OVERRIDE(mquake_state,amiga)
MCFG_VIDEO_START_OVERRIDE(amiga_state,amiga) MCFG_VIDEO_START_OVERRIDE(mquake_state,amiga)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -427,7 +440,7 @@ ROM_END
* *
*************************************/ *************************************/
DRIVER_INIT_MEMBER(amiga_state,mquake) DRIVER_INIT_MEMBER(mquake_state,mquake)
{ {
static const amiga_machine_interface mquake_intf = static const amiga_machine_interface mquake_intf =
{ {
@ -453,4 +466,4 @@ DRIVER_INIT_MEMBER(amiga_state,mquake)
* *
*************************************/ *************************************/
GAME( 1987, mquake, 0, mquake, mquake, amiga_state, mquake, 0, "Sente", "Moonquake", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS ) GAME( 1987, mquake, 0, mquake, mquake, mquake_state, mquake, 0, "Sente", "Moonquake", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )

View File

@ -459,11 +459,9 @@ public:
int m_aga_sprite_dma_used_words[8]; int m_aga_sprite_dma_used_words[8];
DECLARE_CUSTOM_INPUT_MEMBER( amiga_joystick_convert ); DECLARE_CUSTOM_INPUT_MEMBER( amiga_joystick_convert );
DECLARE_DRIVER_INIT(mquake);
DECLARE_DRIVER_INIT(amiga); DECLARE_DRIVER_INIT(amiga);
DECLARE_DRIVER_INIT(cdtv); DECLARE_DRIVER_INIT(cdtv);
DECLARE_DRIVER_INIT(a3000); DECLARE_DRIVER_INIT(a3000);
DECLARE_MACHINE_RESET(mquake);
DECLARE_MACHINE_RESET(amiga); DECLARE_MACHINE_RESET(amiga);
DECLARE_VIDEO_START(amiga); DECLARE_VIDEO_START(amiga);
DECLARE_PALETTE_INIT(amiga); DECLARE_PALETTE_INIT(amiga);

View File

@ -110,13 +110,26 @@ public:
inline void consume_rle(int count); inline void consume_rle(int count);
void perform_blit(address_space &space); void perform_blit(address_space &space);
void itech8_update_interrupts(int periodic, int tms34061, int blitter); void itech8_update_interrupts(int periodic, int tms34061, int blitter);
/*----------- defined in machine/slikshot.c -----------*/
DECLARE_READ8_MEMBER( slikz80_port_r );
DECLARE_WRITE8_MEMBER( slikz80_port_w );
DECLARE_READ8_MEMBER( slikshot_z80_r );
DECLARE_READ8_MEMBER( slikshot_z80_control_r );
DECLARE_WRITE8_MEMBER( slikshot_z80_control_w );
void inters_to_vels(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 beams,
UINT8 *xres, UINT8 *vxres, UINT8 *vyres);
void vels_to_inters(UINT8 x, UINT8 vx, UINT8 vy,
UINT16 *inter1, UINT16 *inter2, UINT16 *inter3, UINT8 *beams);
void inters_to_words(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 *beams,
UINT16 *word1, UINT16 *word2, UINT16 *word3);
void words_to_sensors(UINT16 word1, UINT16 word2, UINT16 word3, UINT8 beams,
UINT16 *sens0, UINT16 *sens1, UINT16 *sens2, UINT16 *sens3);
void compute_sensors();
TIMER_CALLBACK_MEMBER( delayed_z80_control_w );
}; };
/*----------- defined in machine/slikshot.c -----------*/
DECLARE_READ8_HANDLER( slikz80_port_r );
DECLARE_WRITE8_HANDLER( slikz80_port_w );
DECLARE_READ8_HANDLER( slikshot_z80_r );
DECLARE_READ8_HANDLER( slikshot_z80_control_r );
DECLARE_WRITE8_HANDLER( slikshot_z80_control_w );

View File

@ -61,19 +61,17 @@ public:
DECLARE_MACHINE_RESET(maniach); DECLARE_MACHINE_RESET(maniach);
UINT32 screen_update_matmania(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_matmania(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_maniach(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_maniach(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
/*----------- defined in machine/maniach.c -----------*/
DECLARE_READ8_MEMBER( maniach_68705_port_a_r );
DECLARE_WRITE8_MEMBER( maniach_68705_port_a_w );
DECLARE_READ8_MEMBER( maniach_68705_port_b_r );
DECLARE_WRITE8_MEMBER( maniach_68705_port_b_w );
DECLARE_READ8_MEMBER( maniach_68705_port_c_r );
DECLARE_WRITE8_MEMBER( maniach_68705_port_c_w );
DECLARE_WRITE8_MEMBER( maniach_68705_ddr_a_w );
DECLARE_WRITE8_MEMBER( maniach_68705_ddr_b_w );
DECLARE_WRITE8_MEMBER( maniach_68705_ddr_c_w );
DECLARE_WRITE8_MEMBER( maniach_mcu_w );
DECLARE_READ8_MEMBER( maniach_mcu_r );
DECLARE_READ8_MEMBER( maniach_mcu_status_r );
}; };
/*----------- defined in machine/maniach.c -----------*/
DECLARE_READ8_HANDLER( maniach_68705_port_a_r );
DECLARE_WRITE8_HANDLER( maniach_68705_port_a_w );
DECLARE_READ8_HANDLER( maniach_68705_port_b_r );
DECLARE_WRITE8_HANDLER( maniach_68705_port_b_w );
DECLARE_READ8_HANDLER( maniach_68705_port_c_r );
DECLARE_WRITE8_HANDLER( maniach_68705_port_c_w );
DECLARE_WRITE8_HANDLER( maniach_68705_ddr_a_w );
DECLARE_WRITE8_HANDLER( maniach_68705_ddr_b_w );
DECLARE_WRITE8_HANDLER( maniach_68705_ddr_c_w );
DECLARE_WRITE8_HANDLER( maniach_mcu_w );
DECLARE_READ8_HANDLER( maniach_mcu_r );
DECLARE_READ8_HANDLER( maniach_mcu_status_r );

View File

@ -19,26 +19,21 @@
***************************************************************************/ ***************************************************************************/
READ8_HANDLER( maniach_68705_port_a_r ) READ8_MEMBER(matmania_state::maniach_68705_port_a_r )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); //logerror("%04x: 68705 port A read %02x\n", space.device().safe_pc(), m_port_a_in);
return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
//logerror("%04x: 68705 port A read %02x\n", space.device().safe_pc(), state->m_port_a_in);
return (state->m_port_a_out & state->m_ddr_a) | (state->m_port_a_in & ~state->m_ddr_a);
} }
WRITE8_HANDLER( maniach_68705_port_a_w ) WRITE8_MEMBER(matmania_state::maniach_68705_port_a_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>();
//logerror("%04x: 68705 port A write %02x\n", space.device().safe_pc(), data); //logerror("%04x: 68705 port A write %02x\n", space.device().safe_pc(), data);
state->m_port_a_out = data; m_port_a_out = data;
} }
WRITE8_HANDLER( maniach_68705_ddr_a_w ) WRITE8_MEMBER(matmania_state::maniach_68705_ddr_a_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); m_ddr_a = data;
state->m_ddr_a = data;
} }
@ -52,102 +47,88 @@ WRITE8_HANDLER( maniach_68705_ddr_a_w )
* 2 W when 0->1, copies port A to the latch for the main CPU * 2 W when 0->1, copies port A to the latch for the main CPU
*/ */
READ8_HANDLER( maniach_68705_port_b_r ) READ8_MEMBER(matmania_state::maniach_68705_port_b_r )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
return (state->m_port_b_out & state->m_ddr_b) | (state->m_port_b_in & ~state->m_ddr_b);
} }
WRITE8_HANDLER( maniach_68705_port_b_w ) WRITE8_MEMBER(matmania_state::maniach_68705_port_b_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>();
//logerror("%04x: 68705 port B write %02x\n", space.device().safe_pc(), data); //logerror("%04x: 68705 port B write %02x\n", space.device().safe_pc(), data);
if (BIT(state->m_ddr_b, 1) && BIT(~data, 1) && BIT(state->m_port_b_out, 1)) if (BIT(m_ddr_b, 1) && BIT(~data, 1) && BIT(m_port_b_out, 1))
{ {
state->m_port_a_in = state->m_from_main; m_port_a_in = m_from_main;
state->m_main_sent = 0; m_main_sent = 0;
//logerror("read command %02x from main cpu\n", state->m_port_a_in); //logerror("read command %02x from main cpu\n", m_port_a_in);
} }
if (BIT(state->m_ddr_b, 2) && BIT(data, 2) && BIT(~state->m_port_b_out, 2)) if (BIT(m_ddr_b, 2) && BIT(data, 2) && BIT(~m_port_b_out, 2))
{ {
//logerror("send command %02x to main cpu\n", state->m_port_a_out); //logerror("send command %02x to main cpu\n", m_port_a_out);
state->m_from_mcu = state->m_port_a_out; m_from_mcu = m_port_a_out;
state->m_mcu_sent = 1; m_mcu_sent = 1;
} }
state->m_port_b_out = data; m_port_b_out = data;
} }
WRITE8_HANDLER( maniach_68705_ddr_b_w ) WRITE8_MEMBER(matmania_state::maniach_68705_ddr_b_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); m_ddr_b = data;
state->m_ddr_b = data;
} }
READ8_HANDLER( maniach_68705_port_c_r ) READ8_MEMBER(matmania_state::maniach_68705_port_c_r )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); m_port_c_in = 0;
state->m_port_c_in = 0; if (m_main_sent)
m_port_c_in |= 0x01;
if (state->m_main_sent) if (!m_mcu_sent)
state->m_port_c_in |= 0x01; m_port_c_in |= 0x02;
if (!state->m_mcu_sent) //logerror("%04x: 68705 port C read %02x\n",m_space->device().safe_pc(), m_port_c_in);
state->m_port_c_in |= 0x02;
//logerror("%04x: 68705 port C read %02x\n",state->m_space->device().safe_pc(), state->m_port_c_in); return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
return (state->m_port_c_out & state->m_ddr_c) | (state->m_port_c_in & ~state->m_ddr_c);
} }
WRITE8_HANDLER( maniach_68705_port_c_w ) WRITE8_MEMBER(matmania_state::maniach_68705_port_c_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>();
//logerror("%04x: 68705 port C write %02x\n", space.device().safe_pc(), data); //logerror("%04x: 68705 port C write %02x\n", space.device().safe_pc(), data);
state->m_port_c_out = data; m_port_c_out = data;
} }
WRITE8_HANDLER( maniach_68705_ddr_c_w ) WRITE8_MEMBER(matmania_state::maniach_68705_ddr_c_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); m_ddr_c = data;
state->m_ddr_c = data;
} }
WRITE8_HANDLER( maniach_mcu_w ) WRITE8_MEMBER(matmania_state::maniach_mcu_w )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>();
//logerror("%04x: 3040_w %02x\n", space.device().safe_pc(), data); //logerror("%04x: 3040_w %02x\n", space.device().safe_pc(), data);
state->m_from_main = data; m_from_main = data;
state->m_main_sent = 1; m_main_sent = 1;
} }
READ8_HANDLER( maniach_mcu_r ) READ8_MEMBER(matmania_state::maniach_mcu_r )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>(); //logerror("%04x: 3040_r %02x\n", space.device().safe_pc(), m_from_mcu);
m_mcu_sent = 0;
//logerror("%04x: 3040_r %02x\n", space.device().safe_pc(), state->m_from_mcu); return m_from_mcu;
state->m_mcu_sent = 0;
return state->m_from_mcu;
} }
READ8_HANDLER( maniach_mcu_status_r ) READ8_MEMBER(matmania_state::maniach_mcu_status_r )
{ {
matmania_state *state = space.machine().driver_data<matmania_state>();
int res = 0; int res = 0;
/* bit 0 = when 0, mcu has sent data to the main cpu */ /* bit 0 = when 0, mcu has sent data to the main cpu */
/* bit 1 = when 1, mcu is ready to receive data from main cpu */ /* bit 1 = when 1, mcu is ready to receive data from main cpu */
//logerror("%04x: 3041_r\n", space.device().safe_pc()); //logerror("%04x: 3041_r\n", space.device().safe_pc());
if (!state->m_mcu_sent) if (!m_mcu_sent)
res |= 0x01; res |= 0x01;
if (!state->m_main_sent) if (!m_main_sent)
res |= 0x02; res |= 0x02;
return res; return res;

View File

@ -170,7 +170,7 @@ static void words_to_inters(UINT16 word1, UINT16 word2, UINT16 word3, UINT8 beam
* *
*************************************/ *************************************/
static void inters_to_vels(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 beams, void itech8_state::inters_to_vels(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 beams,
UINT8 *xres, UINT8 *vxres, UINT8 *vyres) UINT8 *xres, UINT8 *vxres, UINT8 *vyres)
{ {
UINT32 _27d8, _27c2; UINT32 _27d8, _27c2;
@ -243,7 +243,7 @@ static void inters_to_vels(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 be
* *
*************************************/ *************************************/
static void vels_to_inters(UINT8 x, UINT8 vx, UINT8 vy, void itech8_state::vels_to_inters(UINT8 x, UINT8 vx, UINT8 vy,
UINT16 *inter1, UINT16 *inter2, UINT16 *inter3, UINT8 *beams) UINT16 *inter1, UINT16 *inter2, UINT16 *inter3, UINT8 *beams)
{ {
UINT32 _27d8; UINT32 _27d8;
@ -296,7 +296,7 @@ static void vels_to_inters(UINT8 x, UINT8 vx, UINT8 vy,
* *
*************************************/ *************************************/
static void inters_to_words(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 *beams, void itech8_state::inters_to_words(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 *beams,
UINT16 *word1, UINT16 *word2, UINT16 *word3) UINT16 *word1, UINT16 *word2, UINT16 *word3)
{ {
UINT16 word2mod; UINT16 word2mod;
@ -358,7 +358,7 @@ static void inters_to_words(UINT16 inter1, UINT16 inter2, UINT16 inter3, UINT8 *
* *
*************************************/ *************************************/
static void words_to_sensors(UINT16 word1, UINT16 word2, UINT16 word3, UINT8 beams, void itech8_state::words_to_sensors(UINT16 word1, UINT16 word2, UINT16 word3, UINT8 beams,
UINT16 *sens0, UINT16 *sens1, UINT16 *sens2, UINT16 *sens3) UINT16 *sens0, UINT16 *sens1, UINT16 *sens2, UINT16 *sens3)
{ {
/* if bit 0 of the beams is set, sensor 1 fired first; otherwise sensor 0 fired */ /* if bit 0 of the beams is set, sensor 1 fired first; otherwise sensor 0 fired */
@ -382,23 +382,22 @@ static void words_to_sensors(UINT16 word1, UINT16 word2, UINT16 word3, UINT8 bea
* *
*************************************/ *************************************/
static void compute_sensors(running_machine &machine) void itech8_state::compute_sensors()
{ {
itech8_state *state = machine.driver_data<itech8_state>();
UINT16 inter1, inter2, inter3; UINT16 inter1, inter2, inter3;
UINT16 word1 = 0, word2 = 0, word3 = 0; UINT16 word1 = 0, word2 = 0, word3 = 0;
UINT8 beams; UINT8 beams;
/* skip if we're not ready */ /* skip if we're not ready */
if (state->m_sensor0 != 0 || state->m_sensor1 != 0 || state->m_sensor2 != 0 || state->m_sensor3 != 0) if (m_sensor0 != 0 || m_sensor1 != 0 || m_sensor2 != 0 || m_sensor3 != 0)
return; return;
/* reverse map the inputs */ /* reverse map the inputs */
vels_to_inters(state->m_curx, state->m_curvx, state->m_curvy, &inter1, &inter2, &inter3, &beams); vels_to_inters(m_curx, m_curvx, m_curvy, &inter1, &inter2, &inter3, &beams);
inters_to_words(inter1, inter2, inter3, &beams, &word1, &word2, &word3); inters_to_words(inter1, inter2, inter3, &beams, &word1, &word2, &word3);
words_to_sensors(word1, word2, word3, beams, &state->m_sensor0, &state->m_sensor1, &state->m_sensor2, &state->m_sensor3); words_to_sensors(word1, word2, word3, beams, &m_sensor0, &m_sensor1, &m_sensor2, &m_sensor3);
logerror("%15f: Sensor values: %04x %04x %04x %04x\n", machine.time().as_double(), state->m_sensor0, state->m_sensor1, state->m_sensor2, state->m_sensor3); logerror("%15f: Sensor values: %04x %04x %04x %04x\n", machine().time().as_double(), m_sensor0, m_sensor1, m_sensor2, m_sensor3);
} }
@ -409,25 +408,24 @@ static void compute_sensors(running_machine &machine)
* *
*************************************/ *************************************/
READ8_HANDLER( slikz80_port_r ) READ8_MEMBER(itech8_state::slikz80_port_r )
{ {
itech8_state *state = space.machine().driver_data<itech8_state>();
int result = 0; int result = 0;
/* if we have nothing, return 0x03 */ /* if we have nothing, return 0x03 */
if (!state->m_sensor0 && !state->m_sensor1 && !state->m_sensor2 && !state->m_sensor3) if (!m_sensor0 && !m_sensor1 && !m_sensor2 && !m_sensor3)
return 0x03 | (state->m_z80_clear_to_send << 7); return 0x03 | (m_z80_clear_to_send << 7);
/* 1 bit for each sensor */ /* 1 bit for each sensor */
if (state->m_sensor0) if (m_sensor0)
result |= 1, state->m_sensor0--; result |= 1, m_sensor0--;
if (state->m_sensor1) if (m_sensor1)
result |= 2, state->m_sensor1--; result |= 2, m_sensor1--;
if (state->m_sensor2) if (m_sensor2)
result |= 4, state->m_sensor2--; result |= 4, m_sensor2--;
if (state->m_sensor3) if (m_sensor3)
result |= 8, state->m_sensor3--; result |= 8, m_sensor3--;
result |= state->m_z80_clear_to_send << 7; result |= m_z80_clear_to_send << 7;
return result; return result;
} }
@ -440,11 +438,10 @@ READ8_HANDLER( slikz80_port_r )
* *
*************************************/ *************************************/
WRITE8_HANDLER( slikz80_port_w ) WRITE8_MEMBER(itech8_state::slikz80_port_w )
{ {
itech8_state *state = space.machine().driver_data<itech8_state>(); m_z80_port_val = data;
state->m_z80_port_val = data; m_z80_clear_to_send = 0;
state->m_z80_clear_to_send = 0;
} }
@ -455,12 +452,11 @@ WRITE8_HANDLER( slikz80_port_w )
* *
*************************************/ *************************************/
READ8_HANDLER( slikshot_z80_r ) READ8_MEMBER(itech8_state::slikshot_z80_r )
{ {
itech8_state *state = space.machine().driver_data<itech8_state>();
/* allow the Z80 to send us stuff now */ /* allow the Z80 to send us stuff now */
state->m_z80_clear_to_send = 1; m_z80_clear_to_send = 1;
return state->m_z80_port_val; return m_z80_port_val;
} }
@ -471,10 +467,9 @@ READ8_HANDLER( slikshot_z80_r )
* *
*************************************/ *************************************/
READ8_HANDLER( slikshot_z80_control_r ) READ8_MEMBER(itech8_state::slikshot_z80_control_r )
{ {
itech8_state *state = space.machine().driver_data<itech8_state>(); return m_z80_ctrl;
return state->m_z80_ctrl;
} }
@ -485,35 +480,34 @@ READ8_HANDLER( slikshot_z80_control_r )
* *
*************************************/ *************************************/
static TIMER_CALLBACK( delayed_z80_control_w ) TIMER_CALLBACK_MEMBER( itech8_state::delayed_z80_control_w )
{ {
itech8_state *state = machine.driver_data<itech8_state>();
int data = param; int data = param;
/* bit 4 controls the reset line on the Z80 */ /* bit 4 controls the reset line on the Z80 */
/* this is a big kludge: only allow a reset if the Z80 is stopped */ /* this is a big kludge: only allow a reset if the Z80 is stopped */
/* at its endpoint; otherwise, we never get a result from the Z80 */ /* at its endpoint; otherwise, we never get a result from the Z80 */
if ((data & 0x10) || machine.device("sub")->state().state_int(Z80_PC) == 0x13a) if ((data & 0x10) || machine().device("sub")->state().state_int(Z80_PC) == 0x13a)
{ {
machine.device("sub")->execute().set_input_line(INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE); machine().device("sub")->execute().set_input_line(INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE);
/* on the rising edge, make the crosshair visible again */ /* on the rising edge, make the crosshair visible again */
if ((data & 0x10) && !(state->m_z80_ctrl & 0x10)) if ((data & 0x10) && !(m_z80_ctrl & 0x10))
state->m_crosshair_vis = 1; m_crosshair_vis = 1;
} }
/* boost the interleave whenever this is written to */ /* boost the interleave whenever this is written to */
machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
/* stash the new value */ /* stash the new value */
state->m_z80_ctrl = data; m_z80_ctrl = data;
} }
WRITE8_HANDLER( slikshot_z80_control_w ) WRITE8_MEMBER(itech8_state::slikshot_z80_control_w )
{ {
space.machine().scheduler().synchronize(FUNC(delayed_z80_control_w), data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(itech8_state::delayed_z80_control_w),this), data);
} }
@ -593,7 +587,7 @@ UINT32 itech8_state::screen_update_slikshot(screen_device &screen, bitmap_rgb32
if (temp >= 0x90) temp = 0x90; if (temp >= 0x90) temp = 0x90;
m_curx = temp; m_curx = temp;
compute_sensors(machine()); compute_sensors();
// popmessage("V=%02x,%02x X=%02x", m_curvx, m_curvy, m_curx); // popmessage("V=%02x,%02x X=%02x", m_curvx, m_curvy, m_curx);
m_crosshair_vis = 0; m_crosshair_vis = 0;
} }