mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
amusco: Fix PIT IRQs; game speed is much better now
pit8253: MSB-only counter writes need to lower outputs in mode 0
This commit is contained in:
parent
5ef3fe31e7
commit
e86f303d26
@ -288,6 +288,7 @@ void pit8253_device::set_output(pit8253_timer *timer, int output)
|
|||||||
if (output != timer->output)
|
if (output != timer->output)
|
||||||
{
|
{
|
||||||
timer->output = output;
|
timer->output = output;
|
||||||
|
LOG2(("set_output(): timer %d, %s\n", timer->index, output ? "low to high" : "high to low"));
|
||||||
|
|
||||||
switch (timer->index)
|
switch (timer->index)
|
||||||
{
|
{
|
||||||
@ -1007,6 +1008,11 @@ WRITE8_MEMBER( pit8253_device::write )
|
|||||||
|
|
||||||
load_count(timer, data << 8);
|
load_count(timer, data << 8);
|
||||||
simulate2(timer, 0);
|
simulate2(timer, 0);
|
||||||
|
|
||||||
|
if (CTRL_MODE(timer->control) == 0)
|
||||||
|
{
|
||||||
|
set_output(timer, 0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -77,6 +77,8 @@
|
|||||||
#define CPU_CLOCK MASTER_CLOCK / 4 /* guess */
|
#define CPU_CLOCK MASTER_CLOCK / 4 /* guess */
|
||||||
#define CRTC_CLOCK SECOND_CLOCK / 8 /* guess */
|
#define CRTC_CLOCK SECOND_CLOCK / 8 /* guess */
|
||||||
#define SND_CLOCK SECOND_CLOCK / 8 /* guess */
|
#define SND_CLOCK SECOND_CLOCK / 8 /* guess */
|
||||||
|
#define PIT_CLOCK0 SECOND_CLOCK / 8 /* guess */
|
||||||
|
#define PIT_CLOCK1 SECOND_CLOCK / 8 /* guess */
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/i86/i86.h"
|
#include "cpu/i86/i86.h"
|
||||||
@ -111,7 +113,6 @@ public:
|
|||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
DECLARE_READ8_MEMBER(hack_coin1_r);
|
DECLARE_READ8_MEMBER(hack_coin1_r);
|
||||||
DECLARE_READ8_MEMBER(hack_coin2_r);
|
DECLARE_READ8_MEMBER(hack_coin2_r);
|
||||||
DECLARE_READ8_MEMBER(hack_908_r);
|
|
||||||
DECLARE_READ8_MEMBER(mc6845_r);
|
DECLARE_READ8_MEMBER(mc6845_r);
|
||||||
DECLARE_WRITE8_MEMBER(mc6845_w);
|
DECLARE_WRITE8_MEMBER(mc6845_w);
|
||||||
DECLARE_WRITE8_MEMBER(output_a_w);
|
DECLARE_WRITE8_MEMBER(output_a_w);
|
||||||
@ -191,12 +192,6 @@ READ8_MEMBER(amusco_state::hack_coin2_r)
|
|||||||
return BIT(ioport("IN2")->read(), 2) ? 1 : 0;
|
return BIT(ioport("IN2")->read(), 2) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(amusco_state::hack_908_r)
|
|
||||||
{
|
|
||||||
// IRQ4 and other routines wait for bits of this to be set by IRQ2
|
|
||||||
return 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************
|
/*************************
|
||||||
* Memory Map Information *
|
* Memory Map Information *
|
||||||
*************************/
|
*************************/
|
||||||
@ -204,7 +199,6 @@ READ8_MEMBER(amusco_state::hack_908_r)
|
|||||||
static ADDRESS_MAP_START( amusco_mem_map, AS_PROGRAM, 8, amusco_state )
|
static ADDRESS_MAP_START( amusco_mem_map, AS_PROGRAM, 8, amusco_state )
|
||||||
AM_RANGE(0x006a6, 0x006a6) AM_READ(hack_coin1_r)
|
AM_RANGE(0x006a6, 0x006a6) AM_READ(hack_coin1_r)
|
||||||
AM_RANGE(0x006a8, 0x006a8) AM_READ(hack_coin2_r)
|
AM_RANGE(0x006a8, 0x006a8) AM_READ(hack_coin2_r)
|
||||||
AM_RANGE(0x00908, 0x00908) AM_READ(hack_908_r)
|
|
||||||
AM_RANGE(0x00000, 0x0ffff) AM_RAM
|
AM_RANGE(0x00000, 0x0ffff) AM_RAM
|
||||||
AM_RANGE(0xec000, 0xecfff) AM_RAM AM_SHARE("videoram") // placeholder
|
AM_RANGE(0xec000, 0xecfff) AM_RAM AM_SHARE("videoram") // placeholder
|
||||||
AM_RANGE(0xf8000, 0xfffff) AM_ROM
|
AM_RANGE(0xf8000, 0xfffff) AM_ROM
|
||||||
@ -372,7 +366,7 @@ static INPUT_PORTS_START( amusco )
|
|||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) // move down in service mode
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) // move down in service mode
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // move up in service mode
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // move up in service mode
|
||||||
|
|
||||||
PORT_START("IN2")
|
PORT_START("IN2") // TO DO: enabling IRQ4 produces COIN ERROR message
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) //PORT_WRITE_LINE_DEVICE_MEMBER("pic8259", pic8259_device, ir4_w)
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) //PORT_WRITE_LINE_DEVICE_MEMBER("pic8259", pic8259_device, ir4_w)
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) //PORT_WRITE_LINE_DEVICE_MEMBER("pic8259", pic8259_device, ir4_w)
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) //PORT_WRITE_LINE_DEVICE_MEMBER("pic8259", pic8259_device, ir4_w)
|
||||||
PORT_BIT( 0xf9, IP_ACTIVE_HIGH, IPT_UNUSED )
|
PORT_BIT( 0xf9, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
@ -435,10 +429,10 @@ static MACHINE_CONFIG_START( amusco, amusco_state )
|
|||||||
MCFG_PIC8259_ADD("pic8259", INPUTLINE("maincpu", 0), VCC, NOOP)
|
MCFG_PIC8259_ADD("pic8259", INPUTLINE("maincpu", 0), VCC, NOOP)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
|
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
|
||||||
//MCFG_PIT8253_CLK0(nnn)
|
MCFG_PIT8253_CLK0(PIT_CLOCK0)
|
||||||
//MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w))
|
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w))
|
||||||
//MCFG_PIT8253_CLK1(nnn)
|
MCFG_PIT8253_CLK1(PIT_CLOCK1)
|
||||||
//MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w))
|
MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w))
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("ppi_outputs", I8255, 0)
|
MCFG_DEVICE_ADD("ppi_outputs", I8255, 0)
|
||||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(amusco_state, output_a_w))
|
MCFG_I8255_OUT_PORTA_CB(WRITE8(amusco_state, output_a_w))
|
||||||
@ -479,7 +473,6 @@ static MACHINE_CONFIG_START( amusco, amusco_state )
|
|||||||
MCFG_MC6845_CHAR_WIDTH(8)
|
MCFG_MC6845_CHAR_WIDTH(8)
|
||||||
MCFG_MC6845_ADDR_CHANGED_CB(amusco_state, crtc_addr)
|
MCFG_MC6845_ADDR_CHANGED_CB(amusco_state, crtc_addr)
|
||||||
MCFG_MC6845_OUT_DE_CB(DEVWRITELINE("pic8259", pic8259_device, ir1_w)) // IRQ1 sets 0x918 bit 3
|
MCFG_MC6845_OUT_DE_CB(DEVWRITELINE("pic8259", pic8259_device, ir1_w)) // IRQ1 sets 0x918 bit 3
|
||||||
MCFG_MC6845_OUT_VSYNC_CB(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) // IRQ0 sets 0x665 to 0xff
|
|
||||||
MCFG_MC6845_UPDATE_ROW_CB(amusco_state, update_row)
|
MCFG_MC6845_UPDATE_ROW_CB(amusco_state, update_row)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
@ -537,5 +530,5 @@ ROM_END
|
|||||||
*************************/
|
*************************/
|
||||||
|
|
||||||
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
|
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
|
||||||
GAMEL( 1987, amusco, 0, amusco, amusco, driver_device, 0, ROT0, "Amusco", "American Music Poker (V1.4)", MACHINE_IMPERFECT_COLORS | MACHINE_NODEVICE_PRINTER, layout_amusco ) // runs much too fast; palette totally wrong
|
GAMEL( 1987, amusco, 0, amusco, amusco, driver_device, 0, ROT0, "Amusco", "American Music Poker (V1.4)", MACHINE_IMPERFECT_COLORS | MACHINE_NODEVICE_PRINTER, layout_amusco ) // palette totally wrong
|
||||||
GAME( 1988, draw88pkr, 0, amusco, amusco, driver_device, 0, ROT0, "BTE, Inc.", "Draw 88 Poker (V2.0)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_COLORS | MACHINE_NODEVICE_PRINTER )
|
GAME( 1988, draw88pkr, 0, amusco, amusco, driver_device, 0, ROT0, "BTE, Inc.", "Draw 88 Poker (V2.0)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_COLORS | MACHINE_NODEVICE_PRINTER )
|
||||||
|
Loading…
Reference in New Issue
Block a user