mirror of
https://github.com/holub/mame
synced 2025-06-04 20:06:28 +03:00
New 74LS259/9334/CD4099 devices
These humble 16-pin logic devices were commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings. Incidental to this update, coin counters and/or lockouts have been added to Atari System 1 games, Basketball, Gauntlet, Gyruss, Hana Yayoi, Hole Land, Jr. Pac-Man, Mahjong Sisters, Pooyan, Roc'n Rope, Squash, Thunder Hoop, Time Limit, Time Pilot '84 and many others. This also cleans up coin counter behavior in Sauro and Rally Bike. (nw) The purpose of committing this change, which has been several months in the making, early in the 0.189GIT cycle will be to allow time for fixing potential regressions; I've fixed a number of drivers that lost sound from this for various reasons (hnayayoi.cpp having missing or garbage ADPCM was particularly painful, since the three games in that driver all work slightly differently), but I can't test all affected drivers exhaustively. @Tafoid, don't bother running automated screen capture comparison tests on this, as many drivers are now expected to have the screen flipped for the first few seconds after reset.
This commit is contained in:
parent
9488a7703a
commit
dab683e78f
@ -427,6 +427,18 @@ if (MACHINES["TTL74181"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/74259.h,MACHINES["TTL74259"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["TTL74259"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/74259.cpp",
|
||||
MAME_DIR .. "src/devices/machine/74259.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/7474.h,MACHINES["TTL7474"] = true
|
||||
@ -766,20 +778,6 @@ if (MACHINES["CXD1095"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/dm9334.h,MACHINES["DM9334"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["DM9334"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/machine/dm9334.cpp",
|
||||
MAME_DIR .. "src/devices/machine/dm9334.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/machine/ds1204.h,MACHINES["DS1204"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
|
@ -375,6 +375,7 @@ MACHINES["TTL74157"] = true
|
||||
MACHINES["TTL74166"] = true
|
||||
--MACHINES["TTL74175"] = true
|
||||
MACHINES["TTL74181"] = true
|
||||
MACHINES["TTL74259"] = true
|
||||
MACHINES["TTL7474"] = true
|
||||
MACHINES["KBDC8042"] = true
|
||||
MACHINES["I8257"] = true
|
||||
@ -406,7 +407,6 @@ MACHINES["CR589"] = true
|
||||
--MACHINES["CS4031"] = true
|
||||
--MACHINES["CS8221"] = true
|
||||
MACHINES["CXD1095"] = true
|
||||
--MACHINES["DM9334"] = true
|
||||
MACHINES["DP8390"] = true
|
||||
MACHINES["DS1204"] = true
|
||||
MACHINES["DS1205"] = true
|
||||
|
@ -397,7 +397,6 @@ MACHINES["CR589"] = true
|
||||
MACHINES["CS4031"] = true
|
||||
MACHINES["CS8221"] = true
|
||||
MACHINES["CXD1095"] = true
|
||||
MACHINES["DM9334"] = true
|
||||
MACHINES["DP8390"] = true
|
||||
--MACHINES["DS1204"] = true
|
||||
MACHINES["DS1302"] = true
|
||||
@ -561,6 +560,7 @@ MACHINES["TTL74161"] = true
|
||||
MACHINES["TTL74164"] = true
|
||||
MACHINES["TTL74175"] = true
|
||||
MACHINES["TTL74181"] = true
|
||||
MACHINES["TTL74259"] = true
|
||||
MACHINES["TTL7474"] = true
|
||||
MACHINES["UPD1990A"] = true
|
||||
--MACHINES["UPD4992"] = true
|
||||
|
@ -57,6 +57,7 @@ MACHINES["6821PIA"] = true
|
||||
MACHINES["TTL74148"] = true
|
||||
MACHINES["TTL74153"] = true
|
||||
MACHINES["TTL7474"] = true
|
||||
MACHINES["TTL74259"] = true
|
||||
MACHINES["RIOT6532"] = true
|
||||
MACHINES["PIT8253"] = true
|
||||
MACHINES["Z80CTC"] = true
|
||||
|
@ -103,6 +103,7 @@ ti_pcode_card_device::ti_pcode_card_device(const machine_config &mconfig, const
|
||||
device_t(mconfig, TI99_P_CODE, tag, owner, clock),
|
||||
device_ti99_peribox_card_interface(mconfig, *this),
|
||||
m_rom(nullptr),
|
||||
m_crulatch(*this, "crulatch"),
|
||||
m_bank_select(0),
|
||||
m_active(false),
|
||||
m_clock_count(0),
|
||||
@ -254,18 +255,18 @@ READ8Z_MEMBER(ti_pcode_card_device::crureadz)
|
||||
WRITE8_MEMBER(ti_pcode_card_device::cruwrite)
|
||||
{
|
||||
if ((offset & 0xff00)==CRU_BASE)
|
||||
{
|
||||
int addr = offset & 0x00ff;
|
||||
m_crulatch->write_bit((offset & 0x80) >> 5 | (offset & 0x06) >> 1, data);
|
||||
}
|
||||
|
||||
if (addr==0)
|
||||
m_selected = (data != 0);
|
||||
WRITE_LINE_MEMBER(ti_pcode_card_device::pcpage_w)
|
||||
{
|
||||
m_selected = state;
|
||||
}
|
||||
|
||||
if (addr==0x80) // Bit 4 is on address line 8
|
||||
{
|
||||
m_bank_select = (data+1); // we're calling this bank 1 and bank 2
|
||||
if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select);
|
||||
}
|
||||
}
|
||||
WRITE_LINE_MEMBER(ti_pcode_card_device::ekrpg_w)
|
||||
{
|
||||
m_bank_select = state ? 2 : 1; // we're calling this bank 1 and bank 2
|
||||
if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select);
|
||||
}
|
||||
|
||||
void ti_pcode_card_device::device_start()
|
||||
@ -361,6 +362,10 @@ MACHINE_CONFIG_MEMBER( ti_pcode_card_device::device_add_mconfig )
|
||||
MCFG_GROM_ADD( PGROM5_TAG, 5, PCODE_GROM_TAG, 0xa000, WRITELINE(ti_pcode_card_device, ready_line))
|
||||
MCFG_GROM_ADD( PGROM6_TAG, 6, PCODE_GROM_TAG, 0xc000, WRITELINE(ti_pcode_card_device, ready_line))
|
||||
MCFG_GROM_ADD( PGROM7_TAG, 7, PCODE_GROM_TAG, 0xe000, WRITELINE(ti_pcode_card_device, ready_line))
|
||||
|
||||
MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_pcode_card_device, pcpage_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_pcode_card_device, ekrpg_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
const tiny_rom_entry *ti_pcode_card_device::device_rom_region() const
|
||||
|
@ -18,6 +18,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "peribox.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/tmc0430.h"
|
||||
|
||||
namespace bus { namespace ti99 { namespace peb {
|
||||
@ -45,11 +46,15 @@ protected:
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER( ready_line );
|
||||
DECLARE_WRITE_LINE_MEMBER(ready_line);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(pcpage_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(ekrpg_w);
|
||||
|
||||
void debugger_read(address_space& space, uint16_t addr, uint8_t& value);
|
||||
tmc0430_device* m_grom[8];
|
||||
uint8_t* m_rom;
|
||||
required_device<ls259_device> m_crulatch;
|
||||
int m_bank_select;
|
||||
bool m_active;
|
||||
int m_clock_count;
|
||||
|
@ -57,7 +57,7 @@ ti_fdc_device::ti_fdc_device(const machine_config &mconfig, const char *tag, dev
|
||||
m_address(0),
|
||||
m_DRQ(0),
|
||||
m_IRQ(0),
|
||||
m_lastval(0),
|
||||
m_crulatch(*this, "crulatch"),
|
||||
m_DVENA(0),
|
||||
m_inDsrArea(false),
|
||||
m_WAITena(false),
|
||||
@ -246,67 +246,57 @@ READ8Z_MEMBER(ti_fdc_device::crureadz)
|
||||
WRITE8_MEMBER(ti_fdc_device::cruwrite)
|
||||
{
|
||||
if ((offset & 0xff00)==m_cru_base)
|
||||
{
|
||||
int bit = (offset >> 1) & 0x07;
|
||||
switch (bit)
|
||||
{
|
||||
case 0:
|
||||
// (De)select the card. Indicated by a LED on the board.
|
||||
m_selected = (data!=0);
|
||||
if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected);
|
||||
break;
|
||||
m_crulatch->write_bit((offset >> 1) & 0x07, BIT(data, 0));
|
||||
}
|
||||
|
||||
case 1:
|
||||
// Activate motor
|
||||
if (data==1 && m_lastval==0)
|
||||
{ // On rising edge, set motor_running for 4.23s
|
||||
if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n");
|
||||
set_floppy_motors_running(true);
|
||||
}
|
||||
m_lastval = data;
|
||||
break;
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::dskpgena_w)
|
||||
{
|
||||
// (De)select the card. Indicated by a LED on the board.
|
||||
m_selected = state;
|
||||
if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected);
|
||||
}
|
||||
|
||||
case 2:
|
||||
// Set disk ready/hold (bit 2)
|
||||
// 0: ignore IRQ and DRQ
|
||||
// 1: TMS9900 is stopped until IRQ or DRQ are set
|
||||
// OR the motor stops rotating - rotates for 4.23s after write
|
||||
// to CRU bit 1
|
||||
m_WAITena = (data != 0);
|
||||
if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", data);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// Load disk heads (HLT pin) (bit 3). Not implemented.
|
||||
if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", data);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
m_DSEL = (data != 0)? (m_DSEL | 0x01) : (m_DSEL & 0xfe);
|
||||
set_drive();
|
||||
break;
|
||||
case 5:
|
||||
m_DSEL = (data != 0)? (m_DSEL | 0x02) : (m_DSEL & 0xfd);
|
||||
set_drive();
|
||||
break;
|
||||
case 6:
|
||||
m_DSEL = (data != 0)? (m_DSEL | 0x04) : (m_DSEL & 0xfb);
|
||||
set_drive();
|
||||
break;
|
||||
|
||||
case 7:
|
||||
// Select side of disk (bit 7)
|
||||
m_SIDSEL = (data==1)? ASSERT_LINE : CLEAR_LINE;
|
||||
if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", data);
|
||||
if (m_current != NONE) m_floppy[m_current]->ss_w(data);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::kaclk_w)
|
||||
{
|
||||
// Activate motor
|
||||
if (state)
|
||||
{ // On rising edge, set motor_running for 4.23s
|
||||
if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n");
|
||||
set_floppy_motors_running(true);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::waiten_w)
|
||||
{
|
||||
// Set disk ready/hold (bit 2)
|
||||
// 0: ignore IRQ and DRQ
|
||||
// 1: TMS9900 is stopped until IRQ or DRQ are set
|
||||
// OR the motor stops rotating - rotates for 4.23s after write
|
||||
// to CRU bit 1
|
||||
m_WAITena = state;
|
||||
if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::hlt_w)
|
||||
{
|
||||
// Load disk heads (HLT pin) (bit 3). Not implemented.
|
||||
if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::dsel_w)
|
||||
{
|
||||
m_DSEL = m_crulatch->q4_r() | (m_crulatch->q5_r() << 1) | (m_crulatch->q6_r() << 2);
|
||||
set_drive();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_fdc_device::sidsel_w)
|
||||
{
|
||||
// Select side of disk (bit 7)
|
||||
m_SIDSEL = state ? ASSERT_LINE : CLEAR_LINE;
|
||||
if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", state);
|
||||
if (m_current != NONE) m_floppy[m_current]->ss_w(state);
|
||||
}
|
||||
|
||||
void ti_fdc_device::set_drive()
|
||||
{
|
||||
switch (m_DSEL)
|
||||
@ -390,7 +380,6 @@ void ti_fdc_device::device_start()
|
||||
save_item(NAME(m_address));
|
||||
save_item(NAME(m_DRQ));
|
||||
save_item(NAME(m_IRQ));
|
||||
save_item(NAME(m_lastval));
|
||||
save_item(NAME(m_DVENA));
|
||||
save_item(NAME(m_inDsrArea));
|
||||
save_item(NAME(m_WAITena));
|
||||
@ -403,7 +392,6 @@ void ti_fdc_device::device_start()
|
||||
void ti_fdc_device::device_reset()
|
||||
{
|
||||
logerror("tifdc: TI FDC reset\n");
|
||||
m_lastval = 0;
|
||||
if (m_genmod)
|
||||
{
|
||||
m_select_mask = 0x1fe000;
|
||||
@ -471,6 +459,16 @@ MACHINE_CONFIG_MEMBER( ti_fdc_device::device_add_mconfig )
|
||||
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
MCFG_FLOPPY_DRIVE_ADD("2", tifdc_floppies, nullptr, ti_fdc_device::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
|
||||
MCFG_DEVICE_ADD("crulatch", LS259, 0) // U23
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_fdc_device, dskpgena_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_fdc_device, kaclk_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_fdc_device, waiten_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_fdc_device, hlt_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_fdc_device, sidsel_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
const tiny_rom_entry *ti_fdc_device::device_rom_region() const
|
||||
|
@ -17,6 +17,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "peribox.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "imagedev/floppy.h"
|
||||
|
||||
@ -48,8 +49,15 @@ protected:
|
||||
private:
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_irq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(dskpgena_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(kaclk_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(waiten_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(hlt_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(dsel_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(sidsel_w);
|
||||
|
||||
// For debugger access
|
||||
void debug_read(offs_t offset, uint8_t* value);
|
||||
@ -69,8 +77,8 @@ private:
|
||||
// Holds the status of the DRQ and IRQ lines.
|
||||
int m_DRQ, m_IRQ;
|
||||
|
||||
// Needed for triggering the motor monoflop
|
||||
uint8_t m_lastval;
|
||||
// Latched CRU outputs
|
||||
required_device<ls259_device> m_crulatch;
|
||||
|
||||
// Signal DVENA. When true, makes some drive turning.
|
||||
int m_DVENA;
|
||||
|
@ -131,6 +131,7 @@ namespace bus { namespace ti99 { namespace peb {
|
||||
ti_rs232_pio_device::ti_rs232_pio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, TI99_RS232, tag, owner, clock),
|
||||
device_ti99_peribox_card_interface(mconfig, *this),
|
||||
m_crulatch(*this, "crulatch"),
|
||||
m_piodev(nullptr),
|
||||
m_dsrrom(nullptr),
|
||||
m_pio_direction_in(false),
|
||||
@ -327,88 +328,91 @@ WRITE8_MEMBER(ti_rs232_pio_device::cruwrite)
|
||||
return;
|
||||
}
|
||||
|
||||
device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev);
|
||||
|
||||
int bit = (offset & 0x00ff)>>1;
|
||||
switch (bit)
|
||||
{
|
||||
case 0:
|
||||
m_selected = (data!=0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_pio_direction_in = (data!=0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if ((data!=0) != m_pio_handshakeout)
|
||||
{
|
||||
m_pio_handshakeout = (data!=0);
|
||||
if (m_pio_write && m_pio_writable && (!m_pio_direction_in))
|
||||
{ /* PIO in output mode */
|
||||
if (!m_pio_handshakeout)
|
||||
{ /* write data strobe */
|
||||
/* write data and acknowledge */
|
||||
uint8_t buf = m_pio_out_buffer;
|
||||
int ret = image->fwrite(&buf, 1);
|
||||
if (ret)
|
||||
m_pio_handshakein = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* end strobe */
|
||||
/* we can write some data: set receiver ready */
|
||||
m_pio_handshakein = 0;
|
||||
}
|
||||
}
|
||||
if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/)
|
||||
{ /* PIO in input mode */
|
||||
if (!m_pio_handshakeout)
|
||||
{ /* receiver ready */
|
||||
/* send data and strobe */
|
||||
uint8_t buf;
|
||||
if (image->fread(&buf, 1))
|
||||
m_pio_in_buffer = buf;
|
||||
m_pio_handshakein = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* data acknowledge */
|
||||
/* we can send some data: set transmitter ready */
|
||||
m_pio_handshakein = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m_pio_spareout = (data!=0);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
m_flag0 = (data!=0);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// Set the CTS line for RS232/1
|
||||
if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", data);
|
||||
output_line_state(0, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
// Set the CTS line for RS232/2
|
||||
if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", data);
|
||||
output_line_state(1, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
m_led = (data!=0);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
m_crulatch->write_bit(bit, data);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::selected_w)
|
||||
{
|
||||
m_selected = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_direction_in_w)
|
||||
{
|
||||
m_pio_direction_in = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w)
|
||||
{
|
||||
device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev);
|
||||
|
||||
m_pio_handshakeout = state;
|
||||
if (m_pio_write && m_pio_writable && (!m_pio_direction_in))
|
||||
{ /* PIO in output mode */
|
||||
if (!m_pio_handshakeout)
|
||||
{ /* write data strobe */
|
||||
/* write data and acknowledge */
|
||||
uint8_t buf = m_pio_out_buffer;
|
||||
int ret = image->fwrite(&buf, 1);
|
||||
if (ret)
|
||||
m_pio_handshakein = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* end strobe */
|
||||
/* we can write some data: set receiver ready */
|
||||
m_pio_handshakein = 0;
|
||||
}
|
||||
}
|
||||
if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/)
|
||||
{ /* PIO in input mode */
|
||||
if (!m_pio_handshakeout)
|
||||
{ /* receiver ready */
|
||||
/* send data and strobe */
|
||||
uint8_t buf;
|
||||
if (image->fread(&buf, 1))
|
||||
m_pio_in_buffer = buf;
|
||||
m_pio_handshakein = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* data acknowledge */
|
||||
/* we can send some data: set transmitter ready */
|
||||
m_pio_handshakein = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_spareout_w)
|
||||
{
|
||||
m_pio_spareout = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::flag0_w)
|
||||
{
|
||||
m_flag0 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::cts0_w)
|
||||
{
|
||||
// Set the CTS line for RS232/1
|
||||
if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", state);
|
||||
output_line_state(0, tms9902_device::CTS, state ? 0 : tms9902_device::CTS);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::cts1_w)
|
||||
{
|
||||
// Set the CTS line for RS232/2
|
||||
if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", state);
|
||||
output_line_state(1, tms9902_device::CTS, state ? 0 : tms9902_device::CTS);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ti_rs232_pio_device::led_w)
|
||||
{
|
||||
m_led = state;
|
||||
}
|
||||
|
||||
/*
|
||||
Memory read
|
||||
*/
|
||||
@ -1150,6 +1154,16 @@ MACHINE_CONFIG_MEMBER( ti_rs232_pio_device::device_add_mconfig )
|
||||
MCFG_DEVICE_ADD("serdev0", TI99_RS232_DEV, 0)
|
||||
MCFG_DEVICE_ADD("serdev1", TI99_RS232_DEV, 0)
|
||||
MCFG_DEVICE_ADD("piodev", TI99_PIO_DEV, 0)
|
||||
|
||||
MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_rs232_pio_device, selected_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_direction_in_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_handshake_out_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_spareout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_rs232_pio_device, flag0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_rs232_pio_device, cts0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_rs232_pio_device, cts1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_rs232_pio_device, led_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
const tiny_rom_entry *ti_rs232_pio_device::device_rom_region() const
|
||||
|
@ -16,6 +16,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "peribox.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/tms9902.h"
|
||||
|
||||
namespace bus { namespace ti99 { namespace peb {
|
||||
@ -45,14 +46,23 @@ protected:
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER( int0_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( int1_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( rcv0_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( rcv1_callback );
|
||||
DECLARE_WRITE8_MEMBER( xmit0_callback );
|
||||
DECLARE_WRITE8_MEMBER( xmit1_callback );
|
||||
DECLARE_WRITE8_MEMBER( ctrl0_callback );
|
||||
DECLARE_WRITE8_MEMBER( ctrl1_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER(int0_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(int1_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(rcv0_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(rcv1_callback);
|
||||
DECLARE_WRITE8_MEMBER(xmit0_callback);
|
||||
DECLARE_WRITE8_MEMBER(xmit1_callback);
|
||||
DECLARE_WRITE8_MEMBER(ctrl0_callback);
|
||||
DECLARE_WRITE8_MEMBER(ctrl1_callback);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(selected_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pio_direction_in_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pio_handshake_out_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pio_spareout_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flag0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(cts0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(cts1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led_w);
|
||||
|
||||
void incoming_dtr(int uartind, line_state value);
|
||||
void transmit_data(int uartind, uint8_t value);
|
||||
@ -66,6 +76,8 @@ private:
|
||||
void output_exception(int uartind, int param, uint8_t value);
|
||||
void ctrl_callback(int uartind, int type, uint8_t data);
|
||||
|
||||
required_device<ls259_device> m_crulatch;
|
||||
|
||||
// UART chips
|
||||
tms9902_device* m_uart[2];
|
||||
// Connected images (file or socket connection) that represent the
|
||||
|
391
src/devices/machine/74259.cpp
Normal file
391
src/devices/machine/74259.cpp
Normal file
@ -0,0 +1,391 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/**********************************************************************
|
||||
|
||||
74259/9334 8-Bit Addressable Latch
|
||||
|
||||
The normal latch mode of this device provides a simple write-only
|
||||
interface to up to 8 output lines. Its 3-bit address, 1-bit data
|
||||
and active-low write enable inputs were commonly connected to the
|
||||
bus lines of popular 8-bit microprocessors in the 1970s and 1980s.
|
||||
|
||||
The device may alternately serve as an active-high 1-of-8
|
||||
demultiplexer when the asynchronous parallel clear input is held
|
||||
low. The practical applications of this mode are more limited, and
|
||||
the clear input is usually asserted only during master reset.
|
||||
|
||||
The A0-A2 (or A,B,C) and D inputs may be sourced in various
|
||||
permutations, but it seems reasonable to assume, as the emulation
|
||||
here requires, that these four inputs should always be written
|
||||
simultaneously, since modifying them independently of each other
|
||||
while the latch is enabled for writing would cause additional and
|
||||
probably undesired changes to outputs.
|
||||
|
||||
The original TTL version of this device was introduced by Fairchild
|
||||
in the early 1970s as 9334 in their 9300 MSI series, and second-
|
||||
sourced by National Semiconductor as DM8334/DM9334 (the higher
|
||||
number being used for the military-rated version). TI copied and
|
||||
definitively renumbered many Fairchild MSI devices into their
|
||||
standard 5400/7400 series. While Schottky and later versions almost
|
||||
always use the 259 numbering (TI assigned SN74LS259 the alternative
|
||||
name of TIM9906 when promoting it as a CRU output interface for the
|
||||
TMS9900 family), older schematics sometimes suggest 9334 or DM8334
|
||||
as pin-compatible substitutes for 74LS259.
|
||||
|
||||
Other addressable latch devices include:
|
||||
- CD4099B: Part of RCA's standard CMOS logic series, this device
|
||||
offers the same functions as 74259/9334, though its pins are
|
||||
arranged rather differently. Like many CMOS devices in the 4000B
|
||||
series and the CMOS addressable latches listed below, its reset
|
||||
input is active high rather than active low, as is normal for
|
||||
TTL devices.
|
||||
- SN74256: A dual 4-bit latch with common control inputs and a
|
||||
pinout similar to 74259, this device subtracts one of its
|
||||
address lines and replaces it with a second data input which is
|
||||
loaded in parallel.
|
||||
- F4723B/4724B: These dual 4-bit (4723B) and 8-bit (4724B) latches
|
||||
likely became part of the 4000B series when Fairchild introduced
|
||||
their isoplanar CMOS line around 1974. They are pin-compatible
|
||||
with 74256 and 74259 except for having active high clear inputs.
|
||||
4723B (originally 34723) might actually have preceded 74256,
|
||||
since Fairchild's 1975 MOS CCD Data Book denies the existence of
|
||||
a TTL counterpart.
|
||||
- MC14599B: Motorola's moderately successful expansion of the
|
||||
4000B CMOS series includes this enhanced version of the CD4099B,
|
||||
which has a bidirectional data pin and additional read/write and
|
||||
chip select (active high) control inputs, allowing output bits
|
||||
to be read back.
|
||||
- NE590/591 Addressable Peripheral Drivers: Part of Signetics'
|
||||
linear catalogue, these combine addressable latches with high
|
||||
current drivers. NE590 has open collector Darlington outputs
|
||||
(inverting logic) and is pin-compatible with 74LS259. NE591 uses
|
||||
an extra chip select and sources outputs from a common collector
|
||||
line independent of Vcc; it lacks the demultiplex mode.
|
||||
|
||||
***********************************************************************
|
||||
|
||||
74259 Function Table Latch Selection Table
|
||||
|
||||
Inputs | Outputs Inputs | Output
|
||||
/C /E | Qa Qn A2 A1 A0 | Addressed
|
||||
---------+---------- -----------+-------------
|
||||
H L | D Qn L L L | Q0
|
||||
H H | Qa Qn L L H | Q1
|
||||
L L | Qa L L H L | Q2
|
||||
L H | L L L H H | Q3
|
||||
H L L | Q4
|
||||
Qa = output addressed H L H | Q5
|
||||
Qn = all other outputs H H L | Q6
|
||||
H H H | Q7
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "74259.h"
|
||||
|
||||
#define LOG_ALL_WRITES (0)
|
||||
#define LOG_UNDEFINED_WRITES (0)
|
||||
#define LOG_MYSTERY_BITS (0)
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
// device type definitions
|
||||
DEFINE_DEVICE_TYPE(LS259, ls259_device, "ls259", "74LS259 Addressable Latch")
|
||||
DEFINE_DEVICE_TYPE(HC259, hc259_device, "hc259", "74HC259 Addressable Latch")
|
||||
DEFINE_DEVICE_TYPE(HCT259, hct259_device, "hct259", "74HCT259 Addressable Latch")
|
||||
DEFINE_DEVICE_TYPE(F9334, f9334_device, "f9334", "Fairchild 9334 Addressable Latch")
|
||||
DEFINE_DEVICE_TYPE(CD4099, cd4099_device, "cd4099", "CD4099B Addressable Latch")
|
||||
|
||||
//**************************************************************************
|
||||
// ADDRESSABLE LATCH DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
addressable_latch_device::addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, type, tag, owner, clock),
|
||||
m_q_out_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}},
|
||||
m_parallel_out_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
for (devcb_write_line &cb : m_q_out_cb)
|
||||
cb.resolve();
|
||||
m_parallel_out_cb.resolve();
|
||||
|
||||
// initial input state
|
||||
m_address = 0;
|
||||
m_data = false;
|
||||
m_enable = false;
|
||||
m_clear = false;
|
||||
|
||||
// arbitrary initial output state
|
||||
m_q = 0xff;
|
||||
|
||||
save_item(NAME(m_address));
|
||||
save_item(NAME(m_data));
|
||||
save_item(NAME(m_enable));
|
||||
save_item(NAME(m_q));
|
||||
save_item(NAME(m_clear));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - reset the device
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::device_reset()
|
||||
{
|
||||
// assume clear upon reset
|
||||
clear_outputs(m_enable ? u8(m_data) << m_address : 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_bit - synchronously update one of the
|
||||
// eight output lines with a new data bit
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::write_bit(offs_t offset, bool d)
|
||||
{
|
||||
write_abcd(offset, d);
|
||||
enable_w(0);
|
||||
enable_w(1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_abcd - update address select and data
|
||||
// inputs without changing enable state
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::write_abcd(u8 a, bool d)
|
||||
{
|
||||
m_address = a & 7;
|
||||
m_data = d;
|
||||
|
||||
if (m_enable)
|
||||
{
|
||||
if (m_clear)
|
||||
clear_outputs(u8(m_data) << m_address);
|
||||
else
|
||||
update_bit();
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// enable_w - handle enable input (active low)
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER(addressable_latch_device::enable_w)
|
||||
{
|
||||
m_enable = !state;
|
||||
if (m_enable)
|
||||
update_bit();
|
||||
else if (m_clear)
|
||||
clear_outputs(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// update_bit - update one of the eight output
|
||||
// lines with a new data bit
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::update_bit()
|
||||
{
|
||||
// first verify that the selected bit is actually changing
|
||||
if (BIT(m_q, m_address) == m_data)
|
||||
return;
|
||||
|
||||
if (!m_clear)
|
||||
{
|
||||
// update selected bit with new data
|
||||
m_q = (m_q & ~(1 << m_address)) | (u8(m_data) << m_address);
|
||||
}
|
||||
else
|
||||
{
|
||||
// clear any other bit that was formerly set
|
||||
clear_outputs(0);
|
||||
m_q = u8(m_data) << m_address;
|
||||
}
|
||||
|
||||
// update output line via callback
|
||||
if (!m_q_out_cb[m_address].isnull())
|
||||
m_q_out_cb[m_address](m_data);
|
||||
|
||||
// update parallel output
|
||||
if (!m_parallel_out_cb.isnull())
|
||||
m_parallel_out_cb(0, m_q, 1 << m_address);
|
||||
|
||||
// do some logging
|
||||
if (LOG_ALL_WRITES || (LOG_UNDEFINED_WRITES && m_q_out_cb[m_address].isnull() && m_parallel_out_cb.isnull()))
|
||||
logerror("Q%d %s at %s\n", m_address, m_data ? "set" : "cleared", machine().describe_context());
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_d0 - bus-triggered write handler using
|
||||
// LSB of data (or CRUOUT on TMS99xx)
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(addressable_latch_device::write_d0)
|
||||
{
|
||||
if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x01 && data != 0xff)
|
||||
logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n",
|
||||
offset,
|
||||
BIT(data, 7) ? " D7" : "",
|
||||
BIT(data, 6) ? " D6" : "",
|
||||
BIT(data, 5) ? " D5" : "",
|
||||
BIT(data, 4) ? " D4" : "",
|
||||
BIT(data, 3) ? " D3" : "",
|
||||
BIT(data, 2) ? " D2" : "",
|
||||
BIT(data, 1) ? " D1" : "");
|
||||
|
||||
write_bit(offset, BIT(data, 0));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_d7 - bus-triggered write handler using
|
||||
// MSB of (8-bit) data
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(addressable_latch_device::write_d7)
|
||||
{
|
||||
if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x80 && data != 0xff)
|
||||
logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n",
|
||||
offset,
|
||||
BIT(data, 6) ? " D6" : "",
|
||||
BIT(data, 5) ? " D5" : "",
|
||||
BIT(data, 4) ? " D4" : "",
|
||||
BIT(data, 3) ? " D3" : "",
|
||||
BIT(data, 2) ? " D2" : "",
|
||||
BIT(data, 1) ? " D1" : "",
|
||||
BIT(data, 0) ? " D0" : "");
|
||||
|
||||
write_bit(offset, BIT(data, 7));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_a0 - write handler that uses lowest bit
|
||||
// of address bus as data input (data on bus is
|
||||
// ignored)
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(addressable_latch_device::write_a0)
|
||||
{
|
||||
write_bit(offset >> 1, offset & 1);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_nibble - write handler using LSB of
|
||||
// data as input and next three bits as address
|
||||
// (offset is ignored)
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(addressable_latch_device::write_nibble)
|
||||
{
|
||||
write_bit((data & 0x0e) >> 1, data & 0x01);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// clear - pulse clear line from bus write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER(addressable_latch_device::clear)
|
||||
{
|
||||
clear_outputs(m_enable ? u8(m_data) << m_address : 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// q[0-7]_r - read individual output lines
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER(addressable_latch_device::q0_r) { return BIT(m_q, 0); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q1_r) { return BIT(m_q, 1); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q2_r) { return BIT(m_q, 2); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q3_r) { return BIT(m_q, 3); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q4_r) { return BIT(m_q, 4); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q5_r) { return BIT(m_q, 5); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q6_r) { return BIT(m_q, 6); }
|
||||
READ_LINE_MEMBER(addressable_latch_device::q7_r) { return BIT(m_q, 7); }
|
||||
|
||||
//-------------------------------------------------
|
||||
// clear_w - handle clear/reset input
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER(addressable_latch_device::clear_w)
|
||||
{
|
||||
m_clear = is_cmos() ? bool(state) : !state;
|
||||
if (m_clear)
|
||||
clear_outputs(m_enable ? u8(m_data) << m_address : 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// clear_outputs - clear all output lines
|
||||
//-------------------------------------------------
|
||||
|
||||
void addressable_latch_device::clear_outputs(u8 new_q)
|
||||
{
|
||||
const u8 bits_changed = m_q ^ new_q;
|
||||
if (bits_changed == 0)
|
||||
return;
|
||||
|
||||
m_q = new_q;
|
||||
|
||||
// return any previously set output lines to clear state
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
if (BIT(bits_changed, bit) && !m_q_out_cb[bit].isnull())
|
||||
m_q_out_cb[bit](BIT(new_q, bit));
|
||||
|
||||
// update parallel output
|
||||
if (!m_parallel_out_cb.isnull())
|
||||
m_parallel_out_cb(0, new_q, bits_changed);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LS259 DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
ls259_device::ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: addressable_latch_device(mconfig, LS259, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// HC259 DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
hc259_device::hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: addressable_latch_device(mconfig, HC259, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// HCT259 DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
hct259_device::hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: addressable_latch_device(mconfig, HCT259, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// F9334 DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
f9334_device::f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: addressable_latch_device(mconfig, F9334, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// CD4099 DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
cd4099_device::cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: addressable_latch_device(mconfig, CD4099, tag, owner, clock)
|
||||
{
|
||||
}
|
173
src/devices/machine/74259.h
Normal file
173
src/devices/machine/74259.h
Normal file
@ -0,0 +1,173 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/**********************************************************************
|
||||
|
||||
74259/9334 8-Bit Addressable Latch
|
||||
|
||||
***********************************************************************
|
||||
____ ____
|
||||
A0 1 |* \_/ | 16 Vcc
|
||||
A1 2 | | 15 /C
|
||||
A2 3 | | 14 /E
|
||||
Q0 4 | SN74259 | 13 D
|
||||
Q1 5 | F 9334 | 12 Q7
|
||||
Q2 6 | | 11 Q6
|
||||
Q3 7 | | 10 Q5
|
||||
GND 8 |___________| 9 Q4
|
||||
|
||||
____ ____
|
||||
Q7 1 |* \_/ | 16 Vdd
|
||||
RESET 2 | | 15 Q6
|
||||
DATA 3 | | 14 Q5
|
||||
WRITE DISABLE 4 | | 13 Q4
|
||||
A0 5 | CD4099B | 12 Q3
|
||||
A1 6 | | 11 Q2
|
||||
A2 7 | | 10 Q1
|
||||
Vss 8 |___________| 9 Q0
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef DEVICES_MACHINE_74259_H
|
||||
#define DEVICES_MACHINE_74259_H
|
||||
|
||||
//**************************************************************************
|
||||
// CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 0, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 1, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 2, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 3, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 4, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 5, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 6, DEVCB_##_devcb);
|
||||
#define MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_q_out_cb(*device, 7, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(_devcb) \
|
||||
devcb = &addressable_latch_device::set_parallel_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> addressable_latch_device
|
||||
|
||||
class addressable_latch_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// static configuration
|
||||
template<class Object> static devcb_base &set_q_out_cb(device_t &device, int bit, Object object) { return downcast<addressable_latch_device &>(device).m_q_out_cb[bit].set_callback(object); }
|
||||
template<class Object> static devcb_base &set_parallel_out_cb(device_t &device, Object object) { return downcast<addressable_latch_device &>(device).m_parallel_out_cb.set_callback(object); }
|
||||
|
||||
// data write handlers
|
||||
void write_bit(offs_t offset, bool d);
|
||||
void write_abcd(u8 a, bool d);
|
||||
DECLARE_WRITE8_MEMBER(write_d0);
|
||||
DECLARE_WRITE8_MEMBER(write_d7);
|
||||
DECLARE_WRITE8_MEMBER(write_a0);
|
||||
DECLARE_WRITE8_MEMBER(write_nibble);
|
||||
DECLARE_WRITE8_MEMBER(clear);
|
||||
|
||||
// read handlers
|
||||
DECLARE_READ_LINE_MEMBER(q0_r);
|
||||
DECLARE_READ_LINE_MEMBER(q1_r);
|
||||
DECLARE_READ_LINE_MEMBER(q2_r);
|
||||
DECLARE_READ_LINE_MEMBER(q3_r);
|
||||
DECLARE_READ_LINE_MEMBER(q4_r);
|
||||
DECLARE_READ_LINE_MEMBER(q5_r);
|
||||
DECLARE_READ_LINE_MEMBER(q6_r);
|
||||
DECLARE_READ_LINE_MEMBER(q7_r);
|
||||
u8 output_state() const { return m_q; }
|
||||
|
||||
// control inputs
|
||||
DECLARE_WRITE_LINE_MEMBER(enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(clear_w);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
virtual bool is_cmos() const { return false; }
|
||||
|
||||
private:
|
||||
// internal helpers
|
||||
void update_bit();
|
||||
void clear_outputs(u8 new_q);
|
||||
|
||||
// device callbacks
|
||||
devcb_write_line m_q_out_cb[8]; // output line callback array
|
||||
devcb_write8 m_parallel_out_cb; // parallel output option
|
||||
|
||||
// internal state
|
||||
u8 m_address; // address input
|
||||
bool m_data; // data bit input
|
||||
u8 m_q; // latched output state
|
||||
bool m_enable; // enable/load active state
|
||||
bool m_clear; // clear/reset active state
|
||||
};
|
||||
|
||||
// ======================> ls259_device
|
||||
|
||||
class ls259_device : public addressable_latch_device
|
||||
{
|
||||
public:
|
||||
ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
};
|
||||
|
||||
// ======================> hc259_device
|
||||
|
||||
class hc259_device : public addressable_latch_device
|
||||
{
|
||||
public:
|
||||
hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
};
|
||||
|
||||
// ======================> hct259_device
|
||||
|
||||
class hct259_device : public addressable_latch_device
|
||||
{
|
||||
public:
|
||||
hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
};
|
||||
|
||||
// ======================> f9334_device
|
||||
|
||||
class f9334_device : public addressable_latch_device
|
||||
{
|
||||
public:
|
||||
f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
};
|
||||
|
||||
// ======================> cd4099_device
|
||||
|
||||
class cd4099_device : public addressable_latch_device
|
||||
{
|
||||
public:
|
||||
cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
protected:
|
||||
virtual bool is_cmos() const override { return true; }
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(LS259, ls259_device)
|
||||
DECLARE_DEVICE_TYPE(HC259, hc259_device)
|
||||
DECLARE_DEVICE_TYPE(HCT259, hct259_device)
|
||||
DECLARE_DEVICE_TYPE(F9334, f9334_device)
|
||||
DECLARE_DEVICE_TYPE(CD4099, cd4099_device)
|
||||
|
||||
#endif
|
@ -1,188 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
/*****************************************************************************
|
||||
|
||||
(DM)9334 8-Bit Addressable Latch
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "dm9334.h"
|
||||
|
||||
DEFINE_DEVICE_TYPE(DM9334, dm9334_device, "dm9934", "NS [DM]9934 8-bit Addressable Latch")
|
||||
|
||||
dm9334_device::dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, DM9334, tag, owner, clock)
|
||||
, m_out_func(*this)
|
||||
, m_q0_func(*this)
|
||||
, m_q1_func(*this)
|
||||
, m_q2_func(*this)
|
||||
, m_q3_func(*this)
|
||||
, m_q4_func(*this)
|
||||
, m_q5_func(*this)
|
||||
, m_q6_func(*this)
|
||||
, m_q7_func(*this)
|
||||
, m_e(0)
|
||||
, m_c(0)
|
||||
, m_d(0)
|
||||
, m_a(0)
|
||||
, m_out(0)
|
||||
{
|
||||
}
|
||||
|
||||
void dm9334_device::device_start()
|
||||
{
|
||||
init();
|
||||
|
||||
save_item(NAME(m_e));
|
||||
save_item(NAME(m_c));
|
||||
save_item(NAME(m_d));
|
||||
save_item(NAME(m_a));
|
||||
save_item(NAME(m_out));
|
||||
|
||||
m_out_func.resolve_safe();
|
||||
m_q0_func.resolve_safe();
|
||||
m_q1_func.resolve_safe();
|
||||
m_q2_func.resolve_safe();
|
||||
m_q3_func.resolve_safe();
|
||||
m_q4_func.resolve_safe();
|
||||
m_q5_func.resolve_safe();
|
||||
m_q6_func.resolve_safe();
|
||||
m_q7_func.resolve_safe();
|
||||
}
|
||||
|
||||
void dm9334_device::device_reset()
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
void dm9334_device::init()
|
||||
{
|
||||
m_e = 0;
|
||||
m_c = 0;
|
||||
m_d = 0;
|
||||
m_a = 0;
|
||||
m_out = 0;
|
||||
}
|
||||
|
||||
void dm9334_device::tick()
|
||||
{
|
||||
uint8_t last_out = m_out;
|
||||
|
||||
mode_t mode = static_cast<mode_t>((m_e << 1) | m_c);
|
||||
switch(mode)
|
||||
{
|
||||
case mode_t::CLEAR:
|
||||
m_out = 0;
|
||||
break;
|
||||
|
||||
case mode_t::DEMUX:
|
||||
m_out = (m_d << m_a);
|
||||
break;
|
||||
|
||||
case mode_t::MEMORY:
|
||||
// Preserve previous state
|
||||
break;
|
||||
|
||||
case mode_t::LATCH:
|
||||
m_out &= ~(1 << m_a);
|
||||
m_out |= (m_d << m_a);
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_out != last_out)
|
||||
{
|
||||
m_out_func(m_out);
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
if (BIT(m_out, bit) == BIT(last_out, bit))
|
||||
continue;
|
||||
|
||||
switch(bit)
|
||||
{
|
||||
case 0: m_q0_func(BIT(m_out, bit)); break;
|
||||
case 1: m_q1_func(BIT(m_out, bit)); break;
|
||||
case 2: m_q2_func(BIT(m_out, bit)); break;
|
||||
case 3: m_q3_func(BIT(m_out, bit)); break;
|
||||
case 4: m_q4_func(BIT(m_out, bit)); break;
|
||||
case 5: m_q5_func(BIT(m_out, bit)); break;
|
||||
case 6: m_q6_func(BIT(m_out, bit)); break;
|
||||
case 7: m_q7_func(BIT(m_out, bit)); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::e_w )
|
||||
{
|
||||
uint8_t last_e = m_e;
|
||||
m_e = state & 1;
|
||||
if (last_e != m_e)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::c_w )
|
||||
{
|
||||
uint8_t last_c = m_c;
|
||||
m_c = state & 1;
|
||||
if (last_c != m_c)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::d_w )
|
||||
{
|
||||
uint8_t last_d = m_d;
|
||||
m_d = state & 1;
|
||||
if (last_d != m_d)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::a0_w )
|
||||
{
|
||||
uint8_t last_a = m_a;
|
||||
m_a &= ~(1 << 0);
|
||||
m_a |= (state & 1) << 0;
|
||||
if (last_a != m_a)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::a1_w )
|
||||
{
|
||||
uint8_t last_a = m_a;
|
||||
m_a &= ~(1 << 1);
|
||||
m_a |= (state & 1) << 1;
|
||||
if (last_a != m_a)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( dm9334_device::a2_w )
|
||||
{
|
||||
uint8_t last_a = m_a;
|
||||
m_a &= ~(1 << 2);
|
||||
m_a |= (state & 1) << 2;
|
||||
if (last_a != m_a)
|
||||
tick();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( dm9334_device::a_w )
|
||||
{
|
||||
uint8_t last_a = m_a;
|
||||
m_a = data & 0x7;
|
||||
if (last_a != m_a)
|
||||
tick();
|
||||
}
|
||||
|
||||
READ8_MEMBER( dm9334_device::output_r )
|
||||
{
|
||||
return m_out;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( dm9334_device::q0_r ) { return BIT(m_out, 0); }
|
||||
READ_LINE_MEMBER( dm9334_device::q1_r ) { return BIT(m_out, 1); }
|
||||
READ_LINE_MEMBER( dm9334_device::q2_r ) { return BIT(m_out, 2); }
|
||||
READ_LINE_MEMBER( dm9334_device::q3_r ) { return BIT(m_out, 3); }
|
||||
READ_LINE_MEMBER( dm9334_device::q4_r ) { return BIT(m_out, 4); }
|
||||
READ_LINE_MEMBER( dm9334_device::q5_r ) { return BIT(m_out, 5); }
|
||||
READ_LINE_MEMBER( dm9334_device::q6_r ) { return BIT(m_out, 6); }
|
||||
READ_LINE_MEMBER( dm9334_device::q7_r ) { return BIT(m_out, 7); }
|
@ -1,182 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
/*****************************************************************************
|
||||
|
||||
(DM)9334 8-Bit Addressable Latch
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Connection Diagram:
|
||||
___ ___
|
||||
A0 1 |* u | 16 Vcc
|
||||
A1 2 | | 15 /C
|
||||
A2 3 | | 14 /E
|
||||
Q0 4 | | 13 D
|
||||
Q1 5 | | 12 Q7
|
||||
Q2 6 | | 11 Q6
|
||||
Q3 7 | | 10 Q5
|
||||
GND 8 |_______| 9 Q4
|
||||
|
||||
***********************************************************************
|
||||
|
||||
Function Tables:
|
||||
|
||||
/E /C Mode
|
||||
L H Addressable Latch
|
||||
H H Memory
|
||||
L L Active High Eight
|
||||
Channel Demultiplexer
|
||||
H L Clear
|
||||
|
||||
___________________________________________________________________________________________
|
||||
| Inputs | Present Output States | |
|
||||
|---------------------------|-------------------------------------------------| Mode |
|
||||
| /C /E | D | A0 A1 A2 | Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 | |
|
||||
|---------|---|-------------|-------------------------------------------------|-------------|
|
||||
| L H | X | X X X | L L L L L L L L | Clear |
|
||||
|---------|---|-------------|-------------------------------------------------|-------------|
|
||||
| L L | L | L L L | L L L L L L L L | |
|
||||
| L L | H | L L L | H L L L L L L L | |
|
||||
| L L | L | H L L | L L L L L L L L | |
|
||||
| L L | H | H L L | L H L L L L L L | |
|
||||
| * * | * | * | * | Demultiplex |
|
||||
| * * | * | * | * | |
|
||||
| * * | * | * | * | |
|
||||
| * * | * | * | * | |
|
||||
| L L | H | H H H | L L L L L L L H | |
|
||||
|---------|---|-------------|-------------------------------------------------|-------------|
|
||||
| H H | X | X X X | Qn-1 | Memory |
|
||||
|---------|---|-------------|-------------------------------------------------|-------------|
|
||||
| H L | L | L L L | L Qn-1 Qn-1 Qn-1 | |
|
||||
| H L | H | L L L | H Qn-1 Qn-1 | |
|
||||
| H L | L | H L L | Qn-1 L Qn-1 | |
|
||||
| H L | H | H L L | Qn-1 H Qn-1 | |
|
||||
| * * | * | * | * | |
|
||||
| * * | * | * | * | |
|
||||
| * * | * | * | * | |
|
||||
| H L | L | H H H | Qn-1 Qn-1 L | |
|
||||
| H L | H | H H H | Qn-1 Qn-1 H | |
|
||||
|---------|---|-------------|-------------------------------------------------|-------------|
|
||||
|
||||
X = Don't Care Condition
|
||||
L = Low Voltage Level
|
||||
H = High Voltage Level
|
||||
Qn-1 = Previous Output State
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_MACHINE_DM9334_H
|
||||
#define MAME_MACHINE_DM9334_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#define MCFG_DM9334_OUTPUT_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_out_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q0_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q0_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q1_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q1_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q2_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q2_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q3_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q3_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q4_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q4_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q5_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q5_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q6_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q6_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_Q7_CB(_devcb) \
|
||||
devcb = &dm9334_device::set_q7_cb(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_DM9334_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, DM9334, 0)
|
||||
|
||||
class dm9334_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// static configuration helpers
|
||||
template <class Object> static devcb_base &set_out_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_out_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q0_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q0_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q1_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q1_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q2_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q2_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q3_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q3_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q4_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q4_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q5_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q5_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q6_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q6_func.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_q7_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q7_func.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( e_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( c_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( d_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( a0_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( a1_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( a2_w );
|
||||
DECLARE_WRITE8_MEMBER( a_w );
|
||||
|
||||
DECLARE_READ8_MEMBER( output_r );
|
||||
DECLARE_READ_LINE_MEMBER( q0_r );
|
||||
DECLARE_READ_LINE_MEMBER( q1_r );
|
||||
DECLARE_READ_LINE_MEMBER( q2_r );
|
||||
DECLARE_READ_LINE_MEMBER( q3_r );
|
||||
DECLARE_READ_LINE_MEMBER( q4_r );
|
||||
DECLARE_READ_LINE_MEMBER( q5_r );
|
||||
DECLARE_READ_LINE_MEMBER( q6_r );
|
||||
DECLARE_READ_LINE_MEMBER( q7_r );
|
||||
|
||||
uint8_t get_output() const { return m_out; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
enum class mode_t
|
||||
{
|
||||
DEMUX = 0x00,
|
||||
LATCH = 0x01,
|
||||
CLEAR = 0x02,
|
||||
MEMORY = 0x03
|
||||
};
|
||||
|
||||
void init();
|
||||
void tick();
|
||||
|
||||
// callbacks
|
||||
devcb_write_line m_out_func;
|
||||
devcb_write_line m_q0_func;
|
||||
devcb_write_line m_q1_func;
|
||||
devcb_write_line m_q2_func;
|
||||
devcb_write_line m_q3_func;
|
||||
devcb_write_line m_q4_func;
|
||||
devcb_write_line m_q5_func;
|
||||
devcb_write_line m_q6_func;
|
||||
devcb_write_line m_q7_func;
|
||||
|
||||
// inputs
|
||||
uint8_t m_e; // pin 14
|
||||
uint8_t m_c; // pin 15
|
||||
uint8_t m_d; // pin 13
|
||||
uint8_t m_a; // pins 1-3 from LSB to MSB
|
||||
|
||||
// outputs
|
||||
uint8_t m_out; // pins 4-7 and 9-12 from LSB to MSB
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(DM9334, dm9334_device)
|
||||
|
||||
#endif // MAME_MACHINE_DM9334_H
|
@ -41,12 +41,22 @@ const tiny_rom_entry *wozfdc_device::device_rom_region() const
|
||||
return ROM_NAME( diskiing );
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
MACHINE_CONFIG_MEMBER( wozfdc_device::device_add_mconfig )
|
||||
MCFG_DEVICE_ADD("phaselatch", F9334, 0) // 9334 on circuit diagram but 74LS259 in parts list; actual chip may vary
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(wozfdc_device, set_phase))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
wozfdc_device::wozfdc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, type, tag, owner, clock)
|
||||
device_t(mconfig, type, tag, owner, clock),
|
||||
m_phaselatch(*this, "phaselatch")
|
||||
{
|
||||
}
|
||||
|
||||
@ -75,7 +85,6 @@ void wozfdc_device::device_start()
|
||||
save_item(NAME(mode_write));
|
||||
save_item(NAME(mode_load));
|
||||
save_item(NAME(active));
|
||||
save_item(NAME(phases));
|
||||
save_item(NAME(external_io_select));
|
||||
save_item(NAME(cycles));
|
||||
save_item(NAME(data_reg));
|
||||
@ -91,7 +100,6 @@ void wozfdc_device::device_reset()
|
||||
{
|
||||
floppy = nullptr;
|
||||
active = MODE_IDLE;
|
||||
phases = 0x00;
|
||||
mode_write = false;
|
||||
mode_load = false;
|
||||
last_6502_write = 0x00;
|
||||
@ -208,21 +216,16 @@ WRITE8_MEMBER(wozfdc_device::write)
|
||||
last_6502_write = data;
|
||||
}
|
||||
|
||||
void wozfdc_device::phase(int ph, bool on)
|
||||
WRITE8_MEMBER(wozfdc_device::set_phase)
|
||||
{
|
||||
if(on)
|
||||
phases |= 1 << ph;
|
||||
else
|
||||
phases &= ~(1 << ph);
|
||||
|
||||
if(floppy && active)
|
||||
floppy->seek_phase_w(phases);
|
||||
if (floppy && active)
|
||||
floppy->seek_phase_w(data);
|
||||
}
|
||||
|
||||
void wozfdc_device::control(int offset)
|
||||
{
|
||||
if(offset < 8)
|
||||
phase(offset >> 1, offset & 1);
|
||||
m_phaselatch->write_bit(offset >> 1, offset & 1);
|
||||
|
||||
else
|
||||
switch(offset) {
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "imagedev/floppy.h"
|
||||
#include "formats/flopimg.h"
|
||||
#include "machine/74259.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
@ -27,6 +28,7 @@ class wozfdc_device:
|
||||
public:
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
DECLARE_READ8_MEMBER(read);
|
||||
DECLARE_WRITE8_MEMBER(write);
|
||||
@ -40,7 +42,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
void control(int offset);
|
||||
void phase(int ph, bool on);
|
||||
DECLARE_WRITE8_MEMBER(set_phase);
|
||||
uint64_t time_to_cycles(const attotime &tm);
|
||||
attotime cycles_to_time(uint64_t cycles);
|
||||
void a3_update_drive_sel();
|
||||
@ -55,6 +57,8 @@ protected:
|
||||
floppy_connector *floppy0, *floppy1, *floppy2, *floppy3;
|
||||
floppy_image_device *floppy;
|
||||
|
||||
required_device<addressable_latch_device> m_phaselatch;
|
||||
|
||||
uint64_t cycles;
|
||||
uint8_t data_reg, address;
|
||||
attotime write_start_time;
|
||||
@ -66,7 +70,6 @@ protected:
|
||||
uint8_t last_6502_write;
|
||||
bool mode_write, mode_load;
|
||||
int active;
|
||||
uint8_t phases;
|
||||
emu_timer *timer, *delay_timer;
|
||||
bool external_drive_select;
|
||||
bool external_io_select;
|
||||
|
@ -263,9 +263,9 @@ uint32_t namco_audio_device::namco_update_one(stream_sample_t *buffer, int lengt
|
||||
0x1f: ch 2 volume
|
||||
*/
|
||||
|
||||
WRITE8_MEMBER( namco_device::pacman_sound_enable_w )
|
||||
WRITE_LINE_MEMBER(namco_device::pacman_sound_enable_w)
|
||||
{
|
||||
m_sound_enable = data;
|
||||
m_sound_enable = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( namco_device::pacman_sound_w )
|
||||
@ -491,9 +491,9 @@ WRITE8_MEMBER( namco_device::polepos_sound_w )
|
||||
0x3e ch 7 waveform select & frequency
|
||||
*/
|
||||
|
||||
void namco_15xx_device::mappy_sound_enable(int enable)
|
||||
WRITE_LINE_MEMBER(namco_15xx_device::mappy_sound_enable)
|
||||
{
|
||||
m_sound_enable = enable;
|
||||
m_sound_enable = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(namco_15xx_device::namco_15xx_w)
|
||||
|
@ -82,13 +82,13 @@ class namco_device : public namco_audio_device
|
||||
public:
|
||||
namco_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_WRITE8_MEMBER( pacman_sound_enable_w );
|
||||
DECLARE_WRITE8_MEMBER( pacman_sound_w );
|
||||
DECLARE_WRITE_LINE_MEMBER(pacman_sound_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(pacman_sound_w);
|
||||
|
||||
void polepos_sound_enable(int enable);
|
||||
|
||||
DECLARE_READ8_MEMBER( polepos_sound_r );
|
||||
DECLARE_WRITE8_MEMBER( polepos_sound_w );
|
||||
DECLARE_READ8_MEMBER(polepos_sound_r);
|
||||
DECLARE_WRITE8_MEMBER(polepos_sound_w);
|
||||
|
||||
protected:
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
|
||||
@ -104,7 +104,7 @@ public:
|
||||
DECLARE_READ8_MEMBER( sharedram_r );
|
||||
DECLARE_WRITE8_MEMBER( sharedram_w );
|
||||
|
||||
void mappy_sound_enable(int enable);
|
||||
DECLARE_WRITE_LINE_MEMBER(mappy_sound_enable);
|
||||
|
||||
protected:
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
|
||||
|
@ -48,28 +48,6 @@ static const discrete_555_cc_desc asteroid_thump_555cc =
|
||||
0.8 // VBE 2N3906 (Si)
|
||||
};
|
||||
|
||||
#define ASTEROID_SAUCER_SND_EN NODE_01
|
||||
#define ASTEROID_SAUCER_FIRE_EN NODE_02
|
||||
#define ASTEROID_SAUCER_SEL NODE_03
|
||||
#define ASTEROID_THRUST_EN NODE_04
|
||||
#define ASTEROID_SHIP_FIRE_EN NODE_05
|
||||
#define ASTEROID_LIFE_EN NODE_06
|
||||
#define ASTEROID_NOISE_RESET NODE_07
|
||||
|
||||
#define ASTEROID_THUMP_EN NODE_08
|
||||
#define ASTEROID_THUMP_DATA NODE_09
|
||||
#define ASTEROID_EXPLODE_DATA NODE_10
|
||||
#define ASTEROID_EXPLODE_PITCH NODE_11
|
||||
|
||||
#define ASTEROID_NOISE NODE_20
|
||||
#define ASTEROID_THUMP_SND NODE_21
|
||||
#define ASTEROID_SAUCER_SND NODE_22
|
||||
#define ASTEROID_LIFE_SND NODE_23
|
||||
#define ASTEROID_SAUCER_FIRE_SND NODE_24
|
||||
#define ASTEROID_SHIP_FIRE_SND NODE_25
|
||||
#define ASTEROID_EXPLODE_SND NODE_26
|
||||
#define ASTEROID_THRUST_SND NODE_27
|
||||
|
||||
DISCRETE_SOUND_START(asteroid)
|
||||
/************************************************/
|
||||
/* Asteroid Effects Relataive Gain Table */
|
||||
@ -308,17 +286,6 @@ WRITE8_MEMBER(asteroid_state::asteroid_thump_w)
|
||||
m_discrete->write(space, ASTEROID_THUMP_DATA, data & 0x0f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(asteroid_state::asteroid_sounds_w)
|
||||
{
|
||||
m_discrete->write(space, NODE_RELATIVE(ASTEROID_SAUCER_SND_EN, offset), data & 0x80);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(asteroid_state::astdelux_sounds_w)
|
||||
{
|
||||
/* Only ever activates the thrusters in Astdelux */
|
||||
m_discrete->write(space, ASTEROID_THRUST_EN, data & 0x80);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(asteroid_state::asteroid_noise_reset_w)
|
||||
{
|
||||
m_discrete->write(space, ASTEROID_NOISE_RESET, 0);
|
||||
|
@ -7,15 +7,6 @@
|
||||
*************************************************************************/
|
||||
#include "emu.h"
|
||||
#include "includes/avalnche.h"
|
||||
#include "sound/discrete.h"
|
||||
|
||||
|
||||
/* Avalanche Discrete Sound Input Nodes */
|
||||
#define AVALNCHE_AUD0_EN NODE_01
|
||||
#define AVALNCHE_AUD1_EN NODE_02
|
||||
#define AVALNCHE_AUD2_EN NODE_03
|
||||
#define AVALNCHE_SOUNDLVL_DATA NODE_04
|
||||
#define AVALNCHE_ATTRACT_EN NODE_05
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
@ -27,32 +18,6 @@ WRITE8_MEMBER(avalnche_state::avalnche_noise_amplitude_w)
|
||||
m_discrete->write(space, AVALNCHE_SOUNDLVL_DATA, data & 0x3f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalnche_attract_enable_w)
|
||||
{
|
||||
m_discrete->write(space, AVALNCHE_ATTRACT_EN, data & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalnche_audio_w)
|
||||
{
|
||||
int bit = data & 0x01;
|
||||
|
||||
switch (offset & 0x07)
|
||||
{
|
||||
case 0x00: /* AUD0 */
|
||||
m_discrete->write(space, AVALNCHE_AUD0_EN, bit);
|
||||
break;
|
||||
|
||||
case 0x01: /* AUD1 */
|
||||
m_discrete->write(space, AVALNCHE_AUD1_EN, bit);
|
||||
break;
|
||||
|
||||
case 0x02: /* AUD2 */
|
||||
default:
|
||||
m_discrete->write(space, AVALNCHE_AUD2_EN, bit);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Avalanche sound system analog emulation
|
||||
@ -130,8 +95,16 @@ DISCRETE_SOUND_END
|
||||
Catch memory audio output handlers
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::catch_audio_w)
|
||||
WRITE_LINE_MEMBER(avalnche_state::catch_aud0_w)
|
||||
{
|
||||
/* Different from avalnche, it plays a sound (offset 0/1/2) on data bit 0 rising edge.
|
||||
There's no indication that the game silences sound, it's probably done automatically. */
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(avalnche_state::catch_aud1_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(avalnche_state::catch_aud2_w)
|
||||
{
|
||||
}
|
||||
|
@ -23,11 +23,6 @@ WRITE8_MEMBER(bsktball_state::bsktball_note_w)
|
||||
m_discrete->write(space, BSKTBALL_NOTE_DATA, data); // Note
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bsktball_state::bsktball_noise_reset_w)
|
||||
{
|
||||
m_discrete->write(space, BSKTBALL_NOISE_EN, offset & 0x01);
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* bsktball Sound System Analog emulation */
|
||||
|
@ -28,18 +28,6 @@ WRITE8_MEMBER(canyon_state::canyon_explode_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(canyon_state::canyon_attract_w)
|
||||
{
|
||||
m_discrete->write(space, NODE_RELATIVE(CANYON_ATTRACT1_EN, (offset & 0x01)), offset & 0x02);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(canyon_state::canyon_whistle_w)
|
||||
{
|
||||
m_discrete->write(space, NODE_RELATIVE(CANYON_WHISTLE1_EN, (offset & 0x01)), offset & 0x02);
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* canyon Sound System Analog emulation */
|
||||
/************************************************************************/
|
||||
|
@ -69,30 +69,35 @@ MACHINE_CONFIG_MEMBER( cclimber_audio_device::device_add_mconfig )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
WRITE8_MEMBER( cclimber_audio_device::sample_select_w )
|
||||
WRITE8_MEMBER(cclimber_audio_device::sample_select_w)
|
||||
{
|
||||
m_sample_num = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( cclimber_audio_device::sample_rate_w )
|
||||
WRITE8_MEMBER(cclimber_audio_device::sample_rate_w)
|
||||
{
|
||||
/* calculate the sampling frequency */
|
||||
m_sample_freq = SND_CLOCK / 4 / (256 - data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( cclimber_audio_device::sample_volume_w )
|
||||
WRITE8_MEMBER(cclimber_audio_device::sample_volume_w)
|
||||
{
|
||||
m_sample_volume = data & 0x1f; /* range 0-31 */
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( cclimber_audio_device::sample_trigger_w )
|
||||
WRITE_LINE_MEMBER(cclimber_audio_device::sample_trigger_w)
|
||||
{
|
||||
if (data == 0)
|
||||
if (state == 0)
|
||||
return;
|
||||
|
||||
play_sample(32 * m_sample_num,m_sample_freq,m_sample_volume);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cclimber_audio_device::sample_trigger_w)
|
||||
{
|
||||
sample_trigger_w(data != 0);
|
||||
}
|
||||
|
||||
|
||||
void cclimber_audio_device::play_sample(int start,int freq,int volume)
|
||||
{
|
||||
|
@ -36,9 +36,10 @@ public:
|
||||
// construction/destruction
|
||||
cclimber_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_WRITE8_MEMBER( sample_trigger_w );
|
||||
DECLARE_WRITE8_MEMBER( sample_rate_w );
|
||||
DECLARE_WRITE8_MEMBER( sample_volume_w );
|
||||
DECLARE_WRITE_LINE_MEMBER(sample_trigger_w);
|
||||
DECLARE_WRITE8_MEMBER(sample_trigger_w);
|
||||
DECLARE_WRITE8_MEMBER(sample_rate_w);
|
||||
DECLARE_WRITE8_MEMBER(sample_volume_w);
|
||||
|
||||
protected:
|
||||
// device level overrides
|
||||
|
@ -36,9 +36,6 @@
|
||||
#define RISING_EDGE(bit, changed, val) (((changed) & (bit)) && ((val) & (bit)))
|
||||
#define FALLING_EDGE(bit, changed, val) (((changed) & (bit)) && !((val) & (bit)))
|
||||
|
||||
#define SOUNDVAL_RISING_EDGE(bit) RISING_EDGE(bit, bits_changed, sound_val)
|
||||
#define SOUNDVAL_FALLING_EDGE(bit) FALLING_EDGE(bit, bits_changed, sound_val)
|
||||
|
||||
#define SHIFTREG_RISING_EDGE(bit) RISING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift)
|
||||
#define SHIFTREG_FALLING_EDGE(bit) FALLING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift)
|
||||
|
||||
@ -46,26 +43,6 @@
|
||||
#define SHIFTREG2_FALLING_EDGE(bit) FALLING_EDGE(bit, (m_last_shift2 ^ m_current_shift), m_current_shift)
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Generic sound write
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w)
|
||||
{
|
||||
uint8_t oldval = m_sound_control;
|
||||
|
||||
/* form an 8-bit value with the new bit */
|
||||
m_sound_control = (m_sound_control & ~(1 << offset)) | ((data & 1) << offset);
|
||||
|
||||
/* if something changed, call the sound subroutine */
|
||||
if ((m_sound_control != oldval) && m_sound_handler)
|
||||
(this->*m_sound_handler)(m_sound_control, m_sound_control ^ oldval);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Generic sound init
|
||||
@ -75,7 +52,6 @@ WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w)
|
||||
void cinemat_state::sound_start()
|
||||
{
|
||||
/* register for save states */
|
||||
save_item(NAME(m_sound_control));
|
||||
save_item(NAME(m_current_shift));
|
||||
save_item(NAME(m_last_shift));
|
||||
save_item(NAME(m_last_shift2));
|
||||
@ -88,14 +64,8 @@ void cinemat_state::sound_start()
|
||||
}
|
||||
|
||||
|
||||
void cinemat_state::generic_init(sound_func sound_handler)
|
||||
void cinemat_state::sound_reset()
|
||||
{
|
||||
/* set the sound handler */
|
||||
m_sound_handler = sound_handler;
|
||||
|
||||
/* reset sound control */
|
||||
m_sound_control = 0x9f;
|
||||
|
||||
/* reset shift register values */
|
||||
m_current_shift = 0xffff;
|
||||
m_last_shift = 0xffff;
|
||||
@ -130,32 +100,44 @@ static const char *const spacewar_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::spacewar_sound0_w)
|
||||
{
|
||||
/* Explosion - rising edge */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
m_samples->start(0, (machine().rand() & 1) ? 0 : 6);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::spacewar_sound1_w)
|
||||
{
|
||||
/* Fire sound - rising edge */
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
if (state)
|
||||
m_samples->start(1, (machine().rand() & 1) ? 1 : 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::spacewar_sound2_w)
|
||||
{
|
||||
/* Player 1 thrust - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(3, 3, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x04))
|
||||
if (state)
|
||||
m_samples->stop(3);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::spacewar_sound3_w)
|
||||
{
|
||||
/* Player 2 thrust - 0=on, 1-off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(4, 4, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x08))
|
||||
if (state)
|
||||
m_samples->stop(4);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::spacewar_sound4_w)
|
||||
{
|
||||
/* Mute - 0=off, 1=on */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
if (!state)
|
||||
m_samples->start(2, 2, true); /* play idle sound */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
if (state)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -169,13 +151,13 @@ void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
}
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, spacewar )
|
||||
{
|
||||
generic_init(&cinemat_state::spacewar_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( spacewar_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, spacewar)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, spacewar_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, spacewar_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, spacewar_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, spacewar_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, spacewar_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -202,28 +184,32 @@ static const char *const barrier_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::barrier_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::barrier_sound0_w)
|
||||
{
|
||||
/* Player die - rising edge */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
m_samples->start(0, 0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::barrier_sound1_w)
|
||||
{
|
||||
/* Player move - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(1, 1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::barrier_sound2_w)
|
||||
{
|
||||
/* Enemy move - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(2, 2);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, barrier )
|
||||
{
|
||||
generic_init(&cinemat_state::barrier_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( barrier_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, barrier)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, barrier_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, barrier_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, barrier_sound2_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -248,35 +234,39 @@ static const char *const speedfrk_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::speedfrk_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound3_w)
|
||||
{
|
||||
/* on the falling edge of bit 0x08, clock the inverse of bit 0x04 into the top of the shiftreg */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
{
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~sound_val << 13) & 1);
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~m_outlatch->q2_r() << 13) & 1);
|
||||
/* high 12 bits control the frequency - counts from value to $FFF, carry triggers */
|
||||
/* another counter */
|
||||
|
||||
/* low 4 bits control the volume of the noise output (explosion?) */
|
||||
}
|
||||
|
||||
/* off-road - 1=on, 0=off */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_samples->start(0, 0, true);
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
m_samples->stop(0);
|
||||
|
||||
/* start LED is controlled by bit 0x02 */
|
||||
output().set_led_value(0, ~sound_val & 0x02);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, speedfrk )
|
||||
WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound4_w)
|
||||
{
|
||||
generic_init(&cinemat_state::speedfrk_sound_w);
|
||||
/* off-road - 1=on, 0=off */
|
||||
if (state)
|
||||
m_samples->start(0, 0, true);
|
||||
if (!state)
|
||||
m_samples->stop(0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::speedfrk_start_led_w)
|
||||
{
|
||||
/* start LED is controlled by bit 0x02 */
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( speedfrk_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, speedfrk)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, speedfrk_start_led_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -306,46 +296,62 @@ static const char *const starhawk_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::starhawk_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound0_w)
|
||||
{
|
||||
/* explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x01))
|
||||
if (!state)
|
||||
m_samples->start(0, 0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound1_w)
|
||||
{
|
||||
/* right laser - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(1, 1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound2_w)
|
||||
{
|
||||
/* left laser - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(2, 2);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound3_w)
|
||||
{
|
||||
/* K - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(3, 3, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x08))
|
||||
m_samples->stop(3);
|
||||
|
||||
/* master - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
m_samples->start(4, 4, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_samples->stop(4);
|
||||
|
||||
/* K exit - 1=on, 0=off */
|
||||
if (SOUNDVAL_RISING_EDGE(0x80))
|
||||
m_samples->start(3, 5, true);
|
||||
if (SOUNDVAL_FALLING_EDGE(0x80))
|
||||
if (state)
|
||||
m_samples->stop(3);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, starhawk )
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound4_w)
|
||||
{
|
||||
generic_init(&cinemat_state::starhawk_sound_w);
|
||||
/* master - 0=on, 1=off */
|
||||
if (!state)
|
||||
m_samples->start(4, 4, true);
|
||||
if (state)
|
||||
m_samples->stop(4);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starhawk_sound7_w)
|
||||
{
|
||||
/* K exit - 1=on, 0=off */
|
||||
if (state)
|
||||
m_samples->start(3, 5, true);
|
||||
if (!state)
|
||||
m_samples->stop(3);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( starhawk_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starhawk)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starhawk_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starhawk_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starhawk_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starhawk_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starhawk_sound4_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, starhawk_sound7_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -375,40 +381,56 @@ static const char *const sundance_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::sundance_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound0_w)
|
||||
{
|
||||
/* bong - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x01))
|
||||
if (!state)
|
||||
m_samples->start(0, 0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound1_w)
|
||||
{
|
||||
/* whoosh - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(1, 1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound2_w)
|
||||
{
|
||||
/* explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(2, 2);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound3_w)
|
||||
{
|
||||
/* ping - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(3, 3);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound4_w)
|
||||
{
|
||||
/* ping - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
if (!state)
|
||||
m_samples->start(4, 4);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::sundance_sound7_w)
|
||||
{
|
||||
/* hatch - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x80))
|
||||
if (!state)
|
||||
m_samples->start(5, 5);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, sundance )
|
||||
{
|
||||
generic_init(&cinemat_state::sundance_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( sundance_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, sundance)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, sundance_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, sundance_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, sundance_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, sundance_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, sundance_sound4_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, sundance_sound7_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -438,13 +460,13 @@ static const char *const tailg_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::tailg_sound_w)
|
||||
{
|
||||
/* the falling edge of bit 0x10 clocks bit 0x08 into the mux selected by bits 0x07 */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
if (!state)
|
||||
{
|
||||
/* update the shift register (actually just a simple mux) */
|
||||
m_current_shift = (m_current_shift & ~(1 << (sound_val & 7))) | (((sound_val >> 3) & 1) << (sound_val & 7));
|
||||
m_current_shift = (m_current_shift & ~(1 << (m_outlatch->output_state() & 7))) | (m_outlatch->q3_r() << (m_outlatch->output_state() & 7));
|
||||
|
||||
/* explosion - falling edge */
|
||||
if (SHIFTREG_FALLING_EDGE(0x01))
|
||||
@ -484,13 +506,9 @@ void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
}
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, tailg )
|
||||
{
|
||||
generic_init(&cinemat_state::tailg_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( tailg_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, tailg)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, tailg_sound_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -519,40 +537,52 @@ static const char *const warrior_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::warrior_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::warrior_sound0_w)
|
||||
{
|
||||
/* normal level - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x01))
|
||||
if (!state)
|
||||
m_samples->start(0, 0, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
m_samples->stop(0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::warrior_sound1_w)
|
||||
{
|
||||
/* hi level - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(1, 1, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
if (state)
|
||||
m_samples->stop(1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::warrior_sound2_w)
|
||||
{
|
||||
/* explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(2, 2);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::warrior_sound3_w)
|
||||
{
|
||||
/* fall - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(3, 3);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::warrior_sound4_w)
|
||||
{
|
||||
/* appear - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
if (!state)
|
||||
m_samples->start(4, 4);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, warrior )
|
||||
{
|
||||
generic_init(&cinemat_state::warrior_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( warrior_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, warrior)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, warrior_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, warrior_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, warrior_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, warrior_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, warrior_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -583,14 +613,17 @@ static const char *const armora_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::armora_sound4_w)
|
||||
{
|
||||
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::armora_sound0_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x01 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
{
|
||||
/* bits 0-4 control the tank sound speed */
|
||||
|
||||
@ -613,34 +646,43 @@ void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::armora_sound1_w)
|
||||
{
|
||||
/* tank sound - 0=on, 1=off */
|
||||
/* still not totally correct - should be multiple speeds based on remaining bits in shift reg */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(4, 4, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
if (state)
|
||||
m_samples->stop(4);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::armora_sound2_w)
|
||||
{
|
||||
/* beep sound - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(5, 5, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x04))
|
||||
if (state)
|
||||
m_samples->stop(5);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::armora_sound3_w)
|
||||
{
|
||||
/* chopper sound - 0=on, 1=off */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(6, 6, true);
|
||||
if (SOUNDVAL_RISING_EDGE(0x08))
|
||||
if (state)
|
||||
m_samples->stop(6);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, armora )
|
||||
{
|
||||
generic_init(&cinemat_state::armora_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( armora_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, armora)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, armora_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, armora_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, armora_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, armora_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, armora_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -677,14 +719,17 @@ static const char *const ripoff_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::ripoff_sound1_w)
|
||||
{
|
||||
/* on the rising edge of bit 0x02, clock bit 0x01 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | ((sound_val << 7) & 0x80);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q0_r() << 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::ripoff_sound2_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x04 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x04))
|
||||
if (state)
|
||||
{
|
||||
/* background - 0=on, 1=off, selected by bits 0x38 */
|
||||
if ((((m_current_shift ^ m_last_shift) & 0x38) && !(m_current_shift & 0x04)) || SHIFTREG_FALLING_EDGE(0x04))
|
||||
@ -705,27 +750,36 @@ void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::ripoff_sound3_w)
|
||||
{
|
||||
/* torpedo - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(2, 2);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::ripoff_sound4_w)
|
||||
{
|
||||
/* laser - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x10))
|
||||
if (!state)
|
||||
m_samples->start(3, 3);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::ripoff_sound7_w)
|
||||
{
|
||||
/* explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x80))
|
||||
if (!state)
|
||||
m_samples->start(4, 4);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, ripoff )
|
||||
{
|
||||
generic_init(&cinemat_state::ripoff_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( ripoff_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, ripoff)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, ripoff_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, ripoff_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, ripoff_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, ripoff_sound4_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, ripoff_sound7_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -757,16 +811,17 @@ static const char *const starcas_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::starcas_sound4_w)
|
||||
{
|
||||
uint32_t target_pitch;
|
||||
|
||||
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starcas_sound0_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x01 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
{
|
||||
/* fireball - falling edge */
|
||||
if (SHIFTREG_FALLING_EDGE(0x80))
|
||||
@ -795,7 +850,7 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
m_samples->stop(4);
|
||||
|
||||
/* latch the drone pitch */
|
||||
target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
|
||||
u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
|
||||
target_pitch = 0x5800 + (target_pitch << 12);
|
||||
|
||||
/* once per frame slide the pitch toward the target */
|
||||
@ -812,27 +867,36 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starcas_sound1_w)
|
||||
{
|
||||
/* loud explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(5, 5);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starcas_sound2_w)
|
||||
{
|
||||
/* soft explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(6, 6);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::starcas_sound3_w)
|
||||
{
|
||||
/* player fire - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(7, 7);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, starcas )
|
||||
{
|
||||
generic_init(&cinemat_state::starcas_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( starcas_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starcas)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starcas_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starcas_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starcas_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starcas_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starcas_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -864,14 +928,17 @@ static const char *const solarq_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::solarq_sound4_w)
|
||||
{
|
||||
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::solarq_sound1_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x02 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
if (state)
|
||||
{
|
||||
/* only the upper 8 bits matter */
|
||||
m_current_shift >>= 8;
|
||||
@ -929,9 +996,12 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::solarq_sound0_w)
|
||||
{
|
||||
/* clock music data on the rising edge of bit 0x01 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
{
|
||||
int freq, vol;
|
||||
|
||||
@ -954,13 +1024,11 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
}
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, solarq )
|
||||
{
|
||||
generic_init(&cinemat_state::solarq_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( solarq_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, solarq)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, solarq_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, solarq_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, solarq_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -996,14 +1064,17 @@ static const char *const boxingb_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::boxingb_sound4_w)
|
||||
{
|
||||
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::boxingb_sound1_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x02 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x02))
|
||||
if (state)
|
||||
{
|
||||
/* only the upper 8 bits matter */
|
||||
m_current_shift >>= 8;
|
||||
@ -1045,9 +1116,12 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::boxingb_sound0_w)
|
||||
{
|
||||
/* clock music data on the rising edge of bit 0x01 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
{
|
||||
int freq, vol;
|
||||
|
||||
@ -1072,23 +1146,29 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift2 = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::boxingb_sound2_w)
|
||||
{
|
||||
/* bounce - rising edge */
|
||||
if (SOUNDVAL_RISING_EDGE(0x04))
|
||||
if (state)
|
||||
m_samples->start(10, 10);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::boxingb_sound3_w)
|
||||
{
|
||||
/* bell - falling edge */
|
||||
if (SOUNDVAL_RISING_EDGE(0x08))
|
||||
if (state)
|
||||
m_samples->start(11, 11);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, boxingb )
|
||||
{
|
||||
generic_init(&cinemat_state::boxingb_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( boxingb_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, boxingb)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, boxingb_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, boxingb_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, boxingb_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, boxingb_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, boxingb_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1120,16 +1200,17 @@ static const char *const wotw_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::wotw_sound4_w)
|
||||
{
|
||||
uint32_t target_pitch;
|
||||
|
||||
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
|
||||
if (SOUNDVAL_RISING_EDGE(0x10))
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
|
||||
if (state)
|
||||
m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::wotw_sound0_w)
|
||||
{
|
||||
/* execute on the rising edge of bit 0x01 */
|
||||
if (SOUNDVAL_RISING_EDGE(0x01))
|
||||
if (state)
|
||||
{
|
||||
/* fireball - falling edge */
|
||||
if (SHIFTREG_FALLING_EDGE(0x80))
|
||||
@ -1158,7 +1239,7 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
m_samples->stop(4);
|
||||
|
||||
/* latch the drone pitch */
|
||||
target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
|
||||
u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
|
||||
target_pitch = 0x10000 + (target_pitch << 12);
|
||||
|
||||
/* once per frame slide the pitch toward the target */
|
||||
@ -1175,27 +1256,36 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
/* remember the previous value */
|
||||
m_last_shift = m_current_shift;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::wotw_sound1_w)
|
||||
{
|
||||
/* loud explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x02))
|
||||
if (!state)
|
||||
m_samples->start(5, 5);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::wotw_sound2_w)
|
||||
{
|
||||
/* soft explosion - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x04))
|
||||
if (!state)
|
||||
m_samples->start(6, 6);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cinemat_state::wotw_sound3_w)
|
||||
{
|
||||
/* player fire - falling edge */
|
||||
if (SOUNDVAL_FALLING_EDGE(0x08))
|
||||
if (!state)
|
||||
m_samples->start(7, 7);
|
||||
}
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, wotw )
|
||||
{
|
||||
generic_init(&cinemat_state::wotw_sound_w);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START( wotw_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, wotw)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, wotw_sound0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, wotw_sound1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, wotw_sound2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, wotw_sound3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, wotw_sound4_w))
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1220,14 +1310,11 @@ TIMER_CALLBACK_MEMBER( cinemat_state::synced_sound_w )
|
||||
}
|
||||
|
||||
|
||||
void cinemat_state::demon_sound_w(uint8_t sound_val, uint8_t bits_changed)
|
||||
WRITE_LINE_MEMBER(cinemat_state::demon_sound4_w)
|
||||
{
|
||||
/* all inputs are inverted */
|
||||
sound_val = ~sound_val;
|
||||
|
||||
/* watch for a 0->1 edge on bit 4 ("shift in") to clock in the new data */
|
||||
if ((bits_changed & 0x10) && (sound_val & 0x10))
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), sound_val & 0x0f);
|
||||
if (state)
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~m_outlatch->output_state() & 0x0f);
|
||||
}
|
||||
|
||||
|
||||
@ -1270,7 +1357,7 @@ WRITE8_MEMBER(cinemat_state::sound_output_w)
|
||||
SOUND_RESET_MEMBER( cinemat_state, demon )
|
||||
{
|
||||
/* generic init */
|
||||
generic_init(&cinemat_state::demon_sound_w);
|
||||
sound_reset();
|
||||
|
||||
/* reset the FIFO */
|
||||
m_sound_fifo_in = m_sound_fifo_out = 0;
|
||||
@ -1321,6 +1408,9 @@ MACHINE_CONFIG_START( demon_sound )
|
||||
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, demon)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, demon_sound4_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1348,17 +1438,16 @@ MACHINE_CONFIG_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(cinemat_state::qb3_sound_w)
|
||||
WRITE_LINE_MEMBER(cinemat_state::qb3_sound4_w)
|
||||
{
|
||||
uint16_t rega = m_maincpu->state_int(ccpu_cpu_device::CCPU_A);
|
||||
demon_sound_w(0x00 | (~rega & 0x0f), 0x10);
|
||||
machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~rega & 0x0f);
|
||||
}
|
||||
|
||||
|
||||
SOUND_RESET_MEMBER( cinemat_state, qb3 )
|
||||
{
|
||||
SOUND_RESET_CALL_MEMBER(demon);
|
||||
m_maincpu->space(AS_IO).install_write_handler(0x04, 0x04, write8_delegate(FUNC(cinemat_state::qb3_sound_w),this));
|
||||
|
||||
/* this patch prevents the sound ROM from eating itself when command $0A is sent */
|
||||
/* on a cube rotate */
|
||||
@ -1368,4 +1457,7 @@ SOUND_RESET_MEMBER( cinemat_state, qb3 )
|
||||
|
||||
MACHINE_CONFIG_DERIVED( qb3_sound, demon_sound )
|
||||
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, qb3)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, qb3_sound4_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -5,6 +5,7 @@
|
||||
* Nov 2010, Derrick Renaud
|
||||
************************************************************************/
|
||||
#include "emu.h"
|
||||
#include "speaker.h"
|
||||
#include "includes/copsnrob.h"
|
||||
#include "sound/discrete.h"
|
||||
|
||||
@ -589,7 +590,7 @@ DISCRETE_RESET(copsnrob_zings_555_astable)
|
||||
************************************************/
|
||||
|
||||
|
||||
DISCRETE_SOUND_START(copsnrob)
|
||||
static DISCRETE_SOUND_START(copsnrob)
|
||||
|
||||
/************************************************
|
||||
* Input register mapping
|
||||
@ -687,57 +688,29 @@ DISCRETE_SOUND_START(copsnrob)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
WRITE8_MEMBER(copsnrob_state::copsnrob_misc_w)
|
||||
WRITE_LINE_MEMBER(copsnrob_state::one_start_w)
|
||||
{
|
||||
uint8_t latched_data = m_ic_h3_data;
|
||||
uint8_t special_data = data & 0x01;
|
||||
|
||||
/* ignore if no change */
|
||||
if (((latched_data >> offset) & 0x01) == special_data)
|
||||
return;
|
||||
|
||||
if (special_data)
|
||||
latched_data |= 1 << offset;
|
||||
else
|
||||
latched_data &= ~(1 << offset);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
m_discrete->write(space, COPSNROB_MOTOR3_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
m_discrete->write(space, COPSNROB_MOTOR2_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
m_discrete->write(space, COPSNROB_MOTOR1_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
m_discrete->write(space, COPSNROB_MOTOR0_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
m_discrete->write(space, COPSNROB_SCREECH_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x05:
|
||||
m_discrete->write(space, COPSNROB_CRASH_INV, special_data);
|
||||
break;
|
||||
|
||||
case 0x06:
|
||||
/* One Start */
|
||||
output().set_led_value(0, !special_data);
|
||||
break;
|
||||
|
||||
case 0x07:
|
||||
m_discrete->write(space, COPSNROB_AUDIO_ENABLE, special_data);
|
||||
//machine().sound().system_mute(special_data);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
m_ic_h3_data = latched_data;
|
||||
/* One Start */
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
|
||||
MACHINE_CONFIG_START( copsnrob_audio )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
MCFG_DISCRETE_INTF(copsnrob)
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", F9334, 0) // H3 on audio board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR3_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR2_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR1_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR0_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_SCREECH_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_CRASH_INV>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(copsnrob_state, one_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_AUDIO_ENABLE>))
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -70,9 +70,9 @@ WRITE8_MEMBER(jedi_state::irq_ack_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(jedi_state::jedi_audio_reset_w)
|
||||
WRITE_LINE_MEMBER(jedi_state::audio_reset_w)
|
||||
{
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include "emu.h"
|
||||
#include "includes/sprint8.h"
|
||||
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
/* Discrete Sound Input Nodes */
|
||||
#define SPRINT8_CRASH_EN NODE_01
|
||||
@ -294,23 +296,39 @@ DISCRETE_SOUND_START( sprint8 )
|
||||
DISCRETE_TASK_END()
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
MACHINE_CONFIG_START( sprint8_audio )
|
||||
/* sound hardware */
|
||||
/* the proper way is to hook up 4 speakers, but they are not really
|
||||
* F/R/L/R speakers. Though you can pretend the 1-2 mix is the front. */
|
||||
MCFG_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */
|
||||
MCFG_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */
|
||||
MCFG_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */
|
||||
MCFG_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */
|
||||
|
||||
WRITE8_MEMBER(sprint8_state::crash_w)
|
||||
{
|
||||
m_discrete->write(space, SPRINT8_CRASH_EN, data & 0x01);
|
||||
}
|
||||
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
MCFG_DISCRETE_INTF(sprint8)
|
||||
MCFG_SOUND_ROUTE(0, "speaker_1_2", 1.0)
|
||||
/* volumes on other channels defaulted to off, */
|
||||
/* user can turn them up if needed. */
|
||||
/* The game does not sound good with all channels mixed to stereo. */
|
||||
MCFG_SOUND_ROUTE(1, "speaker_3_7", 0.0)
|
||||
MCFG_SOUND_ROUTE(2, "speaker_5_6", 0.0)
|
||||
MCFG_SOUND_ROUTE(3, "speaker_4_8", 0.0)
|
||||
|
||||
WRITE8_MEMBER(sprint8_state::screech_w)
|
||||
{
|
||||
m_discrete->write(space, SPRINT8_SCREECH_EN, data & 0x01);
|
||||
}
|
||||
MCFG_DEVICE_ADD("latch", F9334, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sprint8_state, int_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_CRASH_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_SCREECH_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sprint8_state, team_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_ATTRACT_EN>))
|
||||
|
||||
WRITE8_MEMBER(sprint8_state::attract_w)
|
||||
{
|
||||
m_discrete->write(space, SPRINT8_ATTRACT_EN, data & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sprint8_state::motor_w)
|
||||
{
|
||||
m_discrete->write(space, NODE_RELATIVE(SPRINT8_MOTOR1_EN, offset & 0x07), data & 0x01);
|
||||
}
|
||||
MCFG_DEVICE_ADD("motor", F9334, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR1_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR2_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR3_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR4_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR5_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR6_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR7_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR8_EN>))
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -14,26 +14,6 @@
|
||||
sub sound functions
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(subs_state::sonar1_w)
|
||||
{
|
||||
m_discrete->write(space, SUBS_SONAR1_EN, offset & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(subs_state::sonar2_w)
|
||||
{
|
||||
m_discrete->write(space, SUBS_SONAR2_EN, offset & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(subs_state::crash_w)
|
||||
{
|
||||
m_discrete->write(space, SUBS_CRASH_EN, offset & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(subs_state::explode_w)
|
||||
{
|
||||
m_discrete->write(space, SUBS_EXPLODE_EN, offset & 0x01);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(subs_state::noise_reset_w)
|
||||
{
|
||||
/* Pulse noise reset */
|
||||
|
@ -122,15 +122,22 @@ WRITE8_MEMBER( timeplt_audio_device::filter_w )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER( timeplt_audio_device::sh_irqtrigger_w )
|
||||
WRITE_LINE_MEMBER(timeplt_audio_device::sh_irqtrigger_w)
|
||||
{
|
||||
if (m_last_irq_state == 0 && data)
|
||||
if (m_last_irq_state == 0 && state)
|
||||
{
|
||||
/* setting bit 0 low then high triggers IRQ on the sound CPU */
|
||||
m_soundcpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
|
||||
}
|
||||
|
||||
m_last_irq_state = data;
|
||||
m_last_irq_state = state;
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(timeplt_audio_device::mute_w)
|
||||
{
|
||||
// controls pin 6 (DC audio mute) of LA4460 amplifier
|
||||
machine().sound().system_mute(state);
|
||||
}
|
||||
|
||||
|
||||
|
@ -14,9 +14,10 @@ class timeplt_audio_device : public device_t, public device_sound_interface
|
||||
public:
|
||||
timeplt_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_WRITE8_MEMBER( sh_irqtrigger_w );
|
||||
DECLARE_WRITE8_MEMBER( filter_w );
|
||||
DECLARE_READ8_MEMBER( portB_r );
|
||||
DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(mute_w);
|
||||
DECLARE_WRITE8_MEMBER(filter_w);
|
||||
DECLARE_READ8_MEMBER(portB_r);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
@ -61,6 +62,7 @@ public:
|
||||
ambush_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_outlatch(*this, "outlatch%u", 1),
|
||||
m_video_ram(*this, "video_ram"),
|
||||
m_sprite_ram(*this, "sprite_ram"),
|
||||
m_attribute_ram(*this, "attribute_ram"),
|
||||
@ -80,21 +82,24 @@ public:
|
||||
TILE_GET_INFO_MEMBER(mariobl_char_tile_info);
|
||||
TILE_GET_INFO_MEMBER(dkong3abl_char_tile_info);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(flip_screen_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
|
||||
DECLARE_WRITE8_MEMBER(scroll_ram_w);
|
||||
DECLARE_WRITE8_MEMBER(color_bank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(color_bank_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(color_bank_2_w);
|
||||
|
||||
DECLARE_MACHINE_START(ambush);
|
||||
DECLARE_MACHINE_START(mariobl);
|
||||
DECLARE_MACHINE_START(dkong3abl);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(unk_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
|
||||
DECLARE_WRITE8_MEMBER(output_latches_w);
|
||||
|
||||
private:
|
||||
void register_save_states();
|
||||
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
optional_device_array<ls259_device, 2> m_outlatch;
|
||||
required_shared_ptr<uint8_t> m_video_ram;
|
||||
required_shared_ptr<uint8_t> m_sprite_ram;
|
||||
required_shared_ptr<uint8_t> m_attribute_ram;
|
||||
@ -120,10 +125,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, ambush_state )
|
||||
AM_RANGE(0xc200, 0xc3ff) AM_RAM AM_SHARE("sprite_ram")
|
||||
AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_SHARE("video_ram")
|
||||
AM_RANGE(0xc800, 0xc800) AM_READ_PORT("sw1")
|
||||
AM_RANGE(0xcc00, 0xcc03) AM_WRITE(unk_w)
|
||||
AM_RANGE(0xcc04, 0xcc04) AM_WRITE(flip_screen_w)
|
||||
AM_RANGE(0xcc05, 0xcc05) AM_WRITE(color_bank_w)
|
||||
AM_RANGE(0xcc07, 0xcc07) AM_WRITE(coin_counter_w)
|
||||
AM_RANGE(0xcc00, 0xcc07) AM_WRITE(output_latches_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, ambush_state )
|
||||
@ -145,8 +147,7 @@ static ADDRESS_MAP_START( bootleg_map, AS_PROGRAM, 8, ambush_state )
|
||||
AM_RANGE(0x8000, 0x9fff) AM_ROM
|
||||
AM_RANGE(0xa000, 0xa000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
|
||||
AM_RANGE(0xa100, 0xa100) AM_READ_PORT("sw1")
|
||||
AM_RANGE(0xa204, 0xa204) AM_WRITE(coin_counter_w)
|
||||
AM_RANGE(0xa206, 0xa206) AM_WRITE(color_bank_w)
|
||||
AM_RANGE(0xa200, 0xa207) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xb000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xe000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -508,9 +509,9 @@ uint32_t ambush_state::screen_update_bootleg(screen_device &screen, bitmap_ind16
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ambush_state::flip_screen_w )
|
||||
WRITE_LINE_MEMBER(ambush_state::flip_screen_w)
|
||||
{
|
||||
flip_screen_set(data);
|
||||
flip_screen_set(state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ambush_state::scroll_ram_w )
|
||||
@ -519,9 +520,14 @@ WRITE8_MEMBER( ambush_state::scroll_ram_w )
|
||||
m_char_tilemap->set_scrolly(offset, data + 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ambush_state::color_bank_w )
|
||||
WRITE_LINE_MEMBER(ambush_state::color_bank_1_w)
|
||||
{
|
||||
m_color_bank = data & 0x03;
|
||||
m_color_bank = (m_color_bank & 0x02) | (state ? 0x01 : 0x00);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ambush_state::color_bank_2_w)
|
||||
{
|
||||
m_color_bank = (m_color_bank & 0x01) | (state ? 0x02 : 0x00);
|
||||
}
|
||||
|
||||
|
||||
@ -651,15 +657,20 @@ MACHINE_START_MEMBER( ambush_state, dkong3abl )
|
||||
m_char_tilemap->set_transparent_pen(0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ambush_state::coin_counter_w )
|
||||
WRITE_LINE_MEMBER(ambush_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x01);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x02);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( ambush_state::unk_w )
|
||||
WRITE_LINE_MEMBER(ambush_state::coin_counter_2_w)
|
||||
{
|
||||
logerror("unk_w: %02x = %02x\n", offset, data);
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ambush_state::output_latches_w)
|
||||
{
|
||||
m_outlatch[0]->write_bit(offset, BIT(data, 0));
|
||||
m_outlatch[1]->write_bit(offset, BIT(data, 1));
|
||||
}
|
||||
|
||||
|
||||
@ -673,6 +684,15 @@ static MACHINE_CONFIG_START( ambush )
|
||||
MCFG_CPU_IO_MAP(main_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", ambush_state, irq0_line_hold)
|
||||
|
||||
// addressable latches at 8B and 8C
|
||||
MCFG_DEVICE_ADD("outlatch1", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, flip_screen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w))
|
||||
MCFG_DEVICE_ADD("outlatch2", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_2_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ambush_state, ambush)
|
||||
@ -703,6 +723,13 @@ static MACHINE_CONFIG_DERIVED( mariobl, ambush )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(bootleg_map)
|
||||
|
||||
// To be verified: do these bootlegs only have one LS259?
|
||||
MCFG_DEVICE_REMOVE("outlatch1")
|
||||
MCFG_DEVICE_REMOVE("outlatch2")
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ambush_state, color_bank_1_w))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(ambush_state, mariobl)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
|
@ -42,6 +42,7 @@ II Plus: RAM options reduced to 16/32/48 KB.
|
||||
#include "includes/apple2.h"
|
||||
#include "video/apple2.h"
|
||||
|
||||
#include "machine/74259.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "imagedev/flopdrv.h"
|
||||
|
||||
@ -112,7 +113,8 @@ public:
|
||||
m_sysconfig(*this, "a2_config"),
|
||||
m_speaker(*this, A2_SPEAKER_TAG),
|
||||
m_cassette(*this, A2_CASSETTE_TAG),
|
||||
m_upperbank(*this, A2_UPPERBANK_TAG)
|
||||
m_upperbank(*this, A2_UPPERBANK_TAG),
|
||||
m_softlatch(*this, "softlatch")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -128,6 +130,7 @@ public:
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_device<address_map_bank_device> m_upperbank;
|
||||
required_device<addressable_latch_device> m_softlatch;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(apple2_interrupt);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(ay3600_repeat);
|
||||
@ -143,6 +146,14 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(ram_w);
|
||||
DECLARE_READ8_MEMBER(c000_r);
|
||||
DECLARE_WRITE8_MEMBER(c000_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(txt_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(mix_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(scr_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(res_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(an0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(an1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(an2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(an3_w);
|
||||
DECLARE_READ8_MEMBER(c080_r);
|
||||
DECLARE_WRITE8_MEMBER(c080_w);
|
||||
DECLARE_READ8_MEMBER(c100_r);
|
||||
@ -489,70 +500,11 @@ void napple2_state::do_io(address_space &space, int offset)
|
||||
m_speaker->level_w(m_speaker_state);
|
||||
break;
|
||||
|
||||
case 0x50: // graphics mode
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_graphics = true; break;
|
||||
|
||||
case 0x51: // text mode
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_graphics = false; break;
|
||||
|
||||
case 0x52: // no mix
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_mix = false; break;
|
||||
|
||||
case 0x53: // mixed mode
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_mix = true; break;
|
||||
|
||||
case 0x54: // set page 1
|
||||
machine().first_screen()->update_now();
|
||||
m_page2 = false;
|
||||
m_video->m_page2 = false;
|
||||
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: case 0x5e: case 0x5f:
|
||||
m_softlatch->write_bit((offset & 0x0e) >> 1, offset & 0x01);
|
||||
break;
|
||||
|
||||
case 0x55: // set page 2
|
||||
machine().first_screen()->update_now();
|
||||
m_page2 = true;
|
||||
m_video->m_page2 = true;
|
||||
break;
|
||||
|
||||
case 0x56: // select lo-res
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_hires = false; break;
|
||||
|
||||
case 0x57: // select hi-res
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_hires = true; break;
|
||||
|
||||
case 0x58: // AN0 off
|
||||
m_an0 = false; break;
|
||||
|
||||
case 0x59: // AN0 on
|
||||
m_an0 = true; break;
|
||||
|
||||
case 0x5a: // AN1 off
|
||||
m_an1 = false; break;
|
||||
|
||||
case 0x5b: // AN1 on
|
||||
m_an1 = true; break;
|
||||
|
||||
case 0x5c: // AN2 off
|
||||
m_an2 = false;
|
||||
m_video->m_an2 = false;
|
||||
break;
|
||||
|
||||
case 0x5d: // AN2 on
|
||||
m_an2 = true;
|
||||
m_video->m_an2 = true;
|
||||
break;
|
||||
|
||||
case 0x5e: // AN3 off
|
||||
m_an3 = false; break;
|
||||
|
||||
case 0x5f: // AN3 on
|
||||
m_an3 = true; break;
|
||||
|
||||
case 0x68: // IIgs STATE register, which ProDOS touches
|
||||
break;
|
||||
|
||||
@ -566,6 +518,56 @@ void napple2_state::do_io(address_space &space, int offset)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::txt_w)
|
||||
{
|
||||
// select graphics or text mode
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_graphics = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::mix_w)
|
||||
{
|
||||
// select mixed mode or nomix
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_mix = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::scr_w)
|
||||
{
|
||||
// select primary or secondary page
|
||||
machine().first_screen()->update_now();
|
||||
m_page2 = state;
|
||||
m_video->m_page2 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::res_w)
|
||||
{
|
||||
// select lo-res or hi-res
|
||||
machine().first_screen()->update_now();
|
||||
m_video->m_hires = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::an0_w)
|
||||
{
|
||||
m_an0 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::an1_w)
|
||||
{
|
||||
m_an1 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::an2_w)
|
||||
{
|
||||
m_an2 = state;
|
||||
m_video->m_an2 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(napple2_state::an3_w)
|
||||
{
|
||||
m_an3 = state;
|
||||
}
|
||||
|
||||
READ8_MEMBER(napple2_state::c000_r)
|
||||
{
|
||||
switch (offset)
|
||||
@ -1345,6 +1347,17 @@ static MACHINE_CONFIG_START( apple2_common )
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x3000)
|
||||
|
||||
/* soft switches */
|
||||
MCFG_DEVICE_ADD("softlatch", F9334, 0) // F14 (labeled 74LS259 on some boards and in the Apple ][ Reference Manual)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(napple2_state, txt_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(napple2_state, mix_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(napple2_state, scr_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(napple2_state, res_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(napple2_state, an0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(napple2_state, an1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(napple2_state, an2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(napple2_state, an3_w))
|
||||
|
||||
/* keyboard controller */
|
||||
MCFG_DEVICE_ADD(A2_KBDC_TAG, AY3600, 0)
|
||||
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
|
||||
|
@ -189,6 +189,7 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a
|
||||
#include "includes/asteroid.h"
|
||||
#include "audio/llander.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/atari_vg.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/discrete.h"
|
||||
@ -209,9 +210,19 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(asteroid_state::astdelux_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(asteroid_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset,data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(asteroid_state::coin_counter_center_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(asteroid_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(2, state);
|
||||
}
|
||||
|
||||
|
||||
@ -253,7 +264,7 @@ static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state )
|
||||
AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w)
|
||||
AM_RANGE(0x3a00, 0x3a00) AM_WRITE(asteroid_thump_w)
|
||||
AM_RANGE(0x3c00, 0x3c05) AM_WRITE(asteroid_sounds_w)
|
||||
AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000)
|
||||
AM_RANGE(0x5000, 0x57ff) AM_ROM /* vector rom */
|
||||
@ -276,10 +287,7 @@ static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state )
|
||||
AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w)
|
||||
AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
|
||||
AM_RANGE(0x3c00, 0x3c01) AM_WRITE(astdelux_led_w)
|
||||
AM_RANGE(0x3c03, 0x3c03) AM_WRITE(astdelux_sounds_w)
|
||||
AM_RANGE(0x3c04, 0x3c04) AM_WRITE(astdelux_bank_switch_w)
|
||||
AM_RANGE(0x3c05, 0x3c07) AM_WRITE(astdelux_coin_counter_w)
|
||||
AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000)
|
||||
AM_RANGE(0x4800, 0x57ff) AM_ROM /* vector rom */
|
||||
@ -651,6 +659,14 @@ static MACHINE_CONFIG_START( asteroid )
|
||||
MCFG_CPU_PROGRAM_MAP(asteroid_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, asteroid_interrupt, CLOCK_3KHZ/12)
|
||||
|
||||
MCFG_DEVICE_ADD("audiolatch", LS259, 0) // M10
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SND_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_FIRE_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SEL>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_THRUST_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SHIP_FIRE_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_LIFE_EN>))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -686,6 +702,17 @@ static MACHINE_CONFIG_DERIVED( astdelux, asteroid )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(astdelux_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("audiolatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(asteroid_state, start1_led_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(asteroid_state, start2_led_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP)
|
||||
// Q3 still activates the thrusters
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("ram1"))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("ram2"))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(asteroid_state, coin_counter_left_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(asteroid_state, coin_counter_center_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(asteroid_state, coin_counter_right_w))
|
||||
|
||||
MCFG_ATARIVGEAROM_ADD("earom")
|
||||
|
||||
/* sound hardware */
|
||||
@ -707,6 +734,8 @@ static MACHINE_CONFIG_DERIVED( llander, asteroid )
|
||||
MCFG_CPU_PROGRAM_MAP(llander_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12)
|
||||
|
||||
MCFG_DEVICE_REMOVE("audiolatch")
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6)
|
||||
MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070)
|
||||
|
@ -197,7 +197,6 @@ RoadBlasters (aka Future Vette):005*
|
||||
#include "machine/atarigen.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ym2151.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "video/atarimo.h"
|
||||
#include "speaker.h"
|
||||
@ -240,6 +239,13 @@ MACHINE_RESET_MEMBER(atarisy1_state,atarisy1)
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(atarisy1_state::music_reset_w)
|
||||
{
|
||||
// reset the YM2151 and YM3012
|
||||
if (!state)
|
||||
m_ymsnd->reset();
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -411,13 +417,31 @@ READ8_MEMBER(atarisy1_state::via_pb_r)
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Sound LED handlers
|
||||
* LED and coin counter handlers
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(atarisy1_state::led_w)
|
||||
WRITE_LINE_MEMBER(atarisy1_state::led_1_w)
|
||||
{
|
||||
output().set_led_value(offset, ~data & 1);
|
||||
machine().output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(atarisy1_state::led_2_w)
|
||||
{
|
||||
machine().output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(atarisy1_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(atarisy1_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -468,7 +492,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, atarisy1_state )
|
||||
AM_RANGE(0x1800, 0x1801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
|
||||
AM_RANGE(0x1810, 0x1810) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_command_r, sound_response_w)
|
||||
AM_RANGE(0x1820, 0x1820) AM_READ(switch_6502_r)
|
||||
AM_RANGE(0x1824, 0x1825) AM_WRITE(led_w)
|
||||
AM_RANGE(0x1820, 0x1827) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x1870, 0x187f) AM_DEVREADWRITE("pokey", pokey_device, read, write)
|
||||
AM_RANGE(0x4000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -723,6 +747,13 @@ static MACHINE_CONFIG_START( atarisy1 )
|
||||
|
||||
MCFG_ATARI_EEPROM_2804_ADD("eeprom")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 15H (TTL) or 14F (LSI)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(atarisy1_state, music_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(atarisy1_state, led_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(atarisy1_state, led_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(atarisy1_state, coin_counter_right_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(atarisy1_state, coin_counter_left_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD("joystick_timer", atarisy1_state, delayed_joystick_int)
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "emu.h"
|
||||
#include "includes/avalnche.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "screen.h"
|
||||
@ -87,9 +88,9 @@ uint32_t avalnche_state::screen_update_avalnche(screen_device &screen, bitmap_rg
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalance_video_invert_w)
|
||||
WRITE_LINE_MEMBER(avalnche_state::video_invert_w)
|
||||
{
|
||||
m_avalance_video_inverted = data & 0x01;
|
||||
m_avalance_video_inverted = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::catch_coin_counter_w)
|
||||
@ -98,19 +99,19 @@ WRITE8_MEMBER(avalnche_state::catch_coin_counter_w)
|
||||
machine().bookkeeping().coin_counter_w(1, data & 2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalance_credit_1_lamp_w)
|
||||
WRITE_LINE_MEMBER(avalnche_state::credit_1_lamp_w)
|
||||
{
|
||||
output().set_led_value(0, data & 1);
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalance_credit_2_lamp_w)
|
||||
WRITE_LINE_MEMBER(avalnche_state::credit_2_lamp_w)
|
||||
{
|
||||
output().set_led_value(1, data & 1);
|
||||
output().set_led_value(1, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(avalnche_state::avalance_start_lamp_w)
|
||||
WRITE_LINE_MEMBER(avalnche_state::start_lamp_w)
|
||||
{
|
||||
output().set_led_value(2, data & 1);
|
||||
output().set_led_value(2, state);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state )
|
||||
@ -121,12 +122,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state )
|
||||
AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE")
|
||||
AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP
|
||||
AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w)
|
||||
AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w)
|
||||
AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w)
|
||||
AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w)
|
||||
AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_audio_w)
|
||||
AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w)
|
||||
AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0x0fff) AM_WRITE(avalnche_noise_amplitude_w)
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -139,12 +135,7 @@ static ADDRESS_MAP_START( catch_map, AS_PROGRAM, 8, avalnche_state )
|
||||
AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE")
|
||||
AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP
|
||||
AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w)
|
||||
// AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w) /* It is attract_enable just like avalnche, but not hooked up yet. */
|
||||
AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w)
|
||||
AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w)
|
||||
AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(catch_audio_w)
|
||||
AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w)
|
||||
AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0)
|
||||
AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_WRITE(catch_coin_counter_w)
|
||||
AM_RANGE(0x7000, 0x7fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -243,7 +234,6 @@ void avalnche_state::machine_start()
|
||||
|
||||
void avalnche_state::machine_reset()
|
||||
{
|
||||
m_avalance_video_inverted = 0;
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( avalnche )
|
||||
@ -269,6 +259,16 @@ static MACHINE_CONFIG_START( avalnche )
|
||||
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
MCFG_DISCRETE_INTF(avalnche)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", F9334, 0) // F8
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(avalnche_state, credit_1_lamp_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_ATTRACT_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(avalnche_state, video_invert_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(avalnche_state, credit_2_lamp_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD0_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD1_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD2_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(avalnche_state, start_lamp_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( catch, avalnche )
|
||||
@ -281,6 +281,11 @@ static MACHINE_CONFIG_DERIVED( catch, avalnche )
|
||||
MCFG_DEVICE_REMOVE("discrete")
|
||||
MCFG_DEVICE_REMOVE("mono")
|
||||
|
||||
MCFG_DEVICE_MODIFY("latch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // It is attract_enable just like avalnche, but not hooked up yet.
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(avalnche_state, catch_aud0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(avalnche_state, catch_aud1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(avalnche_state, catch_aud2_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -73,14 +73,11 @@ DIP locations verified for:
|
||||
|
||||
void bagman_state::machine_start()
|
||||
{
|
||||
m_video_enable = true;
|
||||
|
||||
save_item(NAME(m_irq_mask));
|
||||
save_item(NAME(m_columnvalue));
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(bagman_state, bagman)
|
||||
{
|
||||
bagman_state::machine_start();
|
||||
save_item(NAME(m_ls259_buf));
|
||||
save_item(NAME(m_video_enable));
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(bagman_state, squaitsa)
|
||||
@ -96,39 +93,34 @@ MACHINE_START_MEMBER(bagman_state, squaitsa)
|
||||
WRITE8_MEMBER(bagman_state::ls259_w)
|
||||
{
|
||||
pal16r6_w(space, offset,data); /*this is just a simulation*/
|
||||
|
||||
if (m_ls259_buf[offset] != (data&1) )
|
||||
{
|
||||
m_ls259_buf[offset] = data&1;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
m_tmsprom->bit_w(space, 0, 7 - ((m_ls259_buf[0]<<2) | (m_ls259_buf[1]<<1) | (m_ls259_buf[2]<<0)));
|
||||
break;
|
||||
case 3:
|
||||
m_tmsprom->enable_w(m_ls259_buf[offset]);
|
||||
break;
|
||||
case 4:
|
||||
m_tmsprom->rom_csq_w(space, 0, m_ls259_buf[offset]);
|
||||
break;
|
||||
case 5:
|
||||
m_tmsprom->rom_csq_w(space, 1, m_ls259_buf[offset]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_tmslatch->write_bit(offset, data & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bagman_state::coincounter_w)
|
||||
WRITE_LINE_MEMBER(bagman_state::tmsprom_bit_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset,data);
|
||||
m_tmsprom->bit_w(machine().dummy_space(), 0, 7 - ((m_tmslatch->q0_r()<<2) | (m_tmslatch->q1_r()<<1) | (m_tmslatch->q2_r()<<0)));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bagman_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(bagman_state::tmsprom_csq0_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
m_tmsprom->rom_csq_w(machine().dummy_space(), 0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bagman_state::tmsprom_csq1_w)
|
||||
{
|
||||
m_tmsprom->rom_csq_w(machine().dummy_space(), 1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bagman_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bagman_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = state;
|
||||
if (!state)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state )
|
||||
@ -138,21 +130,16 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state )
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ(pal16r6_r)
|
||||
//AM_RANGE(0xa800, 0xa805) AM_READ(bagman_ls259_r) /*just for debugging purposes*/
|
||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable")
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xc000, 0xffff) AM_ROM /* Super Bagman only */
|
||||
AM_RANGE(0x9800, 0x981f) AM_WRITEONLY AM_SHARE("spriteram") /* hidden portion of color RAM */
|
||||
/* here only to initialize the pointer, */
|
||||
/* writes are handled by colorram_w */
|
||||
AM_RANGE(0xa800, 0xa805) AM_WRITE(ls259_w) /* TMS5110 driving state machine */
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w)
|
||||
AM_RANGE(0xa800, 0xa807) AM_WRITE(ls259_w) /* TMS5110 driving state machine */
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READNOP /* looks like watchdog from schematics */
|
||||
|
||||
#if 0
|
||||
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */
|
||||
AM_RANGE(0xb000, 0xb000) AM_WRITENOP /* ???? */
|
||||
AM_RANGE(0xb800, 0xb800) AM_WRITENOP /* ???? */
|
||||
#endif
|
||||
@ -169,17 +156,9 @@ static ADDRESS_MAP_START( pickin_map, AS_PROGRAM, 8, bagman_state )
|
||||
/* here only to initialize the pointer, */
|
||||
/* writes are handled by colorram_w */
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
|
||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable")
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("DSW")
|
||||
|
||||
|
||||
AM_RANGE(0xa005, 0xa005) AM_WRITENOP /* ???? */
|
||||
AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* ???? */
|
||||
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */
|
||||
|
||||
/* guess */
|
||||
AM_RANGE(0xb000, 0xb000) AM_DEVWRITE("ay2", ay8910_device, address_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w)
|
||||
@ -457,8 +436,8 @@ READ8_MEMBER(bagman_state::dial_input_p2_r)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(bagman_state::vblank_irq)
|
||||
{
|
||||
if(m_irq_mask)
|
||||
device.execute().set_input_line(0, HOLD_LINE);
|
||||
if (m_irq_mask)
|
||||
device.execute().set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
@ -470,7 +449,14 @@ static MACHINE_CONFIG_START( bagman )
|
||||
MCFG_CPU_IO_MAP(main_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(bagman_state, bagman)
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8H
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
|
||||
// video enable register not available on earlier hardware revision(s)
|
||||
// Bagman is supposed to have glitches during screen transitions
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -509,6 +495,19 @@ static MACHINE_CONFIG_START( bagman )
|
||||
MCFG_TMS5110_M0_CB(DEVWRITELINE("tmsprom", tmsprom_device, m0_w))
|
||||
MCFG_TMS5110_DATA_CB(DEVREADLINE("tmsprom", tmsprom_device, data_r))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("tmslatch", LS259, 0) // 7H
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("tmsprom", tmsprom_device, enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, tmsprom_csq0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bagman_state, tmsprom_csq1_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( sbagman, bagman )
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( pickin )
|
||||
@ -519,6 +518,16 @@ static MACHINE_CONFIG_START( pickin )
|
||||
MCFG_CPU_IO_MAP(main_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ????
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ????
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
@ -569,6 +578,16 @@ static MACHINE_CONFIG_START( botanic )
|
||||
MCFG_CPU_IO_MAP(main_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ????
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ????
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
@ -1014,25 +1033,17 @@ ROM_START( squaitsa )
|
||||
ROM_LOAD( "mmi6331.3r", 0x0020, 0x0020,CRC(86c1e7db) SHA1(5c974b51d770a555ddab5c23f03a666c6f286cbf) )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(bagman_state,bagman)
|
||||
{
|
||||
/* Unmap video enable register, not available on earlier hardware revision(s)
|
||||
Bagman is supposed to have glitches during screen transitions */
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xa003, 0xa003);
|
||||
*m_video_enable = 1;
|
||||
}
|
||||
|
||||
GAME( 1982, bagman, 0, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, 0, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito
|
||||
|
||||
GAME( 1982, bagman, 0, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, bagman, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito
|
||||
|
||||
GAME( 1984, sbagman, 0, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, sbagmans, sbagman, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, sbagman, 0, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, sbagmans, sbagman, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1983, pickin, 0, pickin, pickin, bagman_state, 0, ROT270, "Valadon Automation", "Pickin'", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "includes/bsktball.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -83,13 +84,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bsktball_state )
|
||||
AM_RANGE(0x0803, 0x0803) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0x1000, 0x1000) AM_WRITENOP /* Timer Reset */
|
||||
AM_RANGE(0x1010, 0x1010) AM_WRITE(bsktball_bounce_w) /* Crowd Amp / Bounce */
|
||||
AM_RANGE(0x1022, 0x1023) AM_WRITENOP /* Coin Counter */
|
||||
AM_RANGE(0x1024, 0x1025) AM_WRITE(bsktball_led1_w) /* LED 1 */
|
||||
AM_RANGE(0x1026, 0x1027) AM_WRITE(bsktball_led2_w) /* LED 2 */
|
||||
AM_RANGE(0x1028, 0x1029) AM_WRITE(bsktball_ld1_w) /* LD 1 */
|
||||
AM_RANGE(0x102a, 0x102b) AM_WRITE(bsktball_ld2_w) /* LD 2 */
|
||||
AM_RANGE(0x102c, 0x102d) AM_WRITE(bsktball_noise_reset_w) /* Noise Reset */
|
||||
AM_RANGE(0x102e, 0x102f) AM_WRITE(bsktball_nmion_w) /* NMI On */
|
||||
AM_RANGE(0x1020, 0x102f) AM_DEVWRITE("outlatch", f9334_device, write_a0)
|
||||
AM_RANGE(0x1030, 0x1030) AM_WRITE(bsktball_note_w) /* Music Ckt Note Dvsr */
|
||||
AM_RANGE(0x1800, 0x1bbf) AM_RAM_WRITE(bsktball_videoram_w) AM_SHARE("videoram") /* DISPLAY */
|
||||
AM_RANGE(0x1bc0, 0x1bff) AM_RAM AM_SHARE("motion")
|
||||
@ -229,7 +224,6 @@ void bsktball_state::machine_start()
|
||||
|
||||
void bsktball_state::machine_reset()
|
||||
{
|
||||
m_nmi_on = 0;
|
||||
// m_i256v = 0;
|
||||
m_ld1 = 0;
|
||||
m_ld2 = 0;
|
||||
@ -251,6 +245,14 @@ static MACHINE_CONFIG_START( bsktball )
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bsktball_state, bsktball_scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", F9334, 0) // M6
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // Coin Counter
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bsktball_state, led1_w)) // LED 1
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bsktball_state, led2_w)) // LED 2
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bsktball_state, ld1_w)) // LD 1
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bsktball_state, ld2_w)) // LD 2
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<BSKTBALL_NOISE_EN>)) // Noise Reset
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(bsktball_state, nmion_w)) // NMI On
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -95,9 +95,20 @@ READ8_MEMBER(canyon_state::canyon_options_r)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(canyon_state::canyon_led_w)
|
||||
WRITE8_MEMBER(canyon_state::output_latch_w)
|
||||
{
|
||||
output().set_led_value(offset & 0x01, offset & 0x02);
|
||||
// ADR1 = D, ADR8 = A2, ADR7 = A1, ADR0 = A0
|
||||
m_outlatch->write_bit((offset & 0x180) >> 6 | BIT(offset, 0), BIT(offset, 1));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(canyon_state::led1_w)
|
||||
{
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(canyon_state::led2_w)
|
||||
{
|
||||
output().set_led_value(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -115,9 +126,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, canyon_state )
|
||||
AM_RANGE(0x0400, 0x0401) AM_WRITE(canyon_motor_w)
|
||||
AM_RANGE(0x0500, 0x0500) AM_WRITE(canyon_explode_w)
|
||||
AM_RANGE(0x0501, 0x0501) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* watchdog, disabled in service mode */
|
||||
AM_RANGE(0x0600, 0x0603) AM_WRITE(canyon_whistle_w)
|
||||
AM_RANGE(0x0680, 0x0683) AM_WRITE(canyon_led_w)
|
||||
AM_RANGE(0x0700, 0x0703) AM_WRITE(canyon_attract_w)
|
||||
AM_RANGE(0x0600, 0x0603) AM_SELECT(0x0180) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(canyon_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x1000, 0x17ff) AM_READ(canyon_switches_r) AM_WRITENOP /* sloppy code writes here */
|
||||
AM_RANGE(0x1800, 0x1fff) AM_READ(canyon_options_r)
|
||||
@ -245,6 +254,14 @@ static MACHINE_CONFIG_START( canyon )
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", canyon_state, nmi_line_pulse)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", F9334, 0) // C7
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE1_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE2_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(canyon_state, led1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(canyon_state, led2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT1_EN>))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT2_EN>))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
|
||||
|
@ -285,10 +285,9 @@ READ8_MEMBER(cclimber_state::yamato_p1_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cclimber_state::toprollr_rombank_w)
|
||||
WRITE_LINE_MEMBER(cclimber_state::toprollr_rombank_w)
|
||||
{
|
||||
m_toprollr_rombank &= ~(1 << offset);
|
||||
m_toprollr_rombank |= (data & 1) << offset;
|
||||
m_toprollr_rombank = m_mainlatch->q5_r() | (m_mainlatch->q6_r() << 1);
|
||||
|
||||
if (m_toprollr_rombank < 3) {
|
||||
membank("bank1")->set_entry(m_toprollr_rombank);
|
||||
@ -296,6 +295,7 @@ WRITE8_MEMBER(cclimber_state::toprollr_rombank_w)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
MACHINE_RESET_MEMBER(cclimber_state,cclimber)
|
||||
{
|
||||
/* Disable interrupts, River Patrol / Silver Land needs this otherwise returns bad RAM on POST */
|
||||
@ -303,11 +303,11 @@ MACHINE_RESET_MEMBER(cclimber_state,cclimber)
|
||||
|
||||
m_toprollr_rombank = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
WRITE8_MEMBER(cclimber_state::nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(cclimber_state::nmi_mask_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
m_nmi_mask = state;
|
||||
}
|
||||
|
||||
|
||||
@ -335,10 +335,8 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(nmi_mask_w) //used by Crazy Kong Bootleg with alt levels and speed up
|
||||
AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
|
||||
@ -363,9 +361,8 @@ static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITE(cannonb_flip_screen_w) AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
|
||||
@ -380,10 +377,8 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_SHARE("spriteram")
|
||||
AM_RANGE(0x98fc, 0x98ff) AM_WRITEONLY AM_SHARE("bigspritectrl")
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("sidebg_enable")
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITEONLY AM_SHARE("palettebank")
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1") AM_WRITE(swimmer_sh_soundlatch_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("bgcolor")
|
||||
@ -410,8 +405,8 @@ static ADDRESS_MAP_START( yamato_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("COIN")
|
||||
@ -433,10 +428,8 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x9880, 0x995f) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x99dc, 0x99df) AM_RAM AM_SHARE("bigspritectrl")
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
|
||||
AM_RANGE(0xa005, 0xa006) AM_WRITE(toprollr_rombank_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
|
||||
@ -457,9 +450,8 @@ static ADDRESS_MAP_START( bagmanf_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") // wrong
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("colorram")
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM /* not used, but initialized */
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
|
||||
AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa800, 0xa800) AM_READNOP AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READNOP
|
||||
@ -1109,7 +1101,10 @@ static MACHINE_CONFIG_START( root )
|
||||
MCFG_CPU_IO_MAP(cclimber_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq)
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(cclimber_state,cclimber)
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -1129,6 +1124,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cclimber, root )
|
||||
MCFG_DEVICE_MODIFY("mainlatch") // 7J on CCG-1
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("cclimber_audio", cclimber_audio_device, sample_trigger_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("speaker")
|
||||
@ -1141,6 +1138,11 @@ static MACHINE_CONFIG_DERIVED( cclimberx, cclimber )
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ckongb, cclimber )
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) //used by Crazy Kong Bootleg with alt levels and speed up
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( cannonb, cclimber )
|
||||
|
||||
@ -1148,6 +1150,11 @@ static MACHINE_CONFIG_DERIVED( cannonb, cclimber )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(cannonb_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(cclimber_state, flip_screen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // not used
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", cannonb)
|
||||
MACHINE_CONFIG_END
|
||||
@ -1204,6 +1211,9 @@ static MACHINE_CONFIG_DERIVED( toprollr, cclimber )
|
||||
MCFG_SEGACRPT_SET_NUMBANKS(3)
|
||||
MCFG_SEGACRPT_SET_BANKSIZE(0x6000)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", toprollr)
|
||||
@ -1224,6 +1234,13 @@ static MACHINE_CONFIG_START( swimmer )
|
||||
MCFG_CPU_PROGRAM_MAP(swimmer_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, sidebg_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cclimber_state, palette_bank_w))
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80,XTAL_4MHz/2) /* verified on pcb */
|
||||
MCFG_CPU_PROGRAM_MAP(swimmer_audio_map)
|
||||
MCFG_CPU_IO_MAP(swimmer_audio_portmap)
|
||||
@ -2657,7 +2674,7 @@ GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, 0,
|
||||
GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, ckongpt2b, ckongpt2, cclimber, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// see bagman.cpp for parent
|
||||
GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, 0, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -419,6 +419,7 @@ each direction to assign the boundries.
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "cpu/s2650/s2650.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "machine/atari_vg.h"
|
||||
#include "sound/sn76496.h"
|
||||
@ -568,15 +569,15 @@ READ8_MEMBER(centiped_state::milliped_IN2_r)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(centiped_state::input_select_w)
|
||||
WRITE_LINE_MEMBER(centiped_state::input_select_w)
|
||||
{
|
||||
m_dsw_select = (~data >> 7) & 1;
|
||||
m_dsw_select = !state;
|
||||
}
|
||||
|
||||
/* used P2 controls if 1, P1 controls if 0 */
|
||||
WRITE8_MEMBER(centiped_state::control_select_w)
|
||||
WRITE_LINE_MEMBER(centiped_state::control_select_w)
|
||||
{
|
||||
m_control_select = (data >> 7) & 1;
|
||||
m_control_select = state;
|
||||
}
|
||||
|
||||
|
||||
@ -616,9 +617,27 @@ READ8_MEMBER(centiped_state::bullsdrt_data_port_r)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(centiped_state::led_w)
|
||||
WRITE_LINE_MEMBER(centiped_state::led_1_w)
|
||||
{
|
||||
output().set_led_value(offset, ~data & 0x80);
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(centiped_state::led_2_w)
|
||||
{
|
||||
output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(centiped_state::led_3_w)
|
||||
{
|
||||
output().set_led_value(2, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(centiped_state::led_4_w)
|
||||
{
|
||||
output().set_led_value(3, !state);
|
||||
}
|
||||
|
||||
|
||||
@ -628,15 +647,27 @@ READ8_MEMBER(centiped_state::caterplr_unknown_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(centiped_state::coin_count_w)
|
||||
WRITE_LINE_MEMBER(centiped_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(centiped_state::bullsdrt_coin_count_w)
|
||||
WRITE_LINE_MEMBER(centiped_state::coin_counter_center_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data);
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(centiped_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(2, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(centiped_state::bullsdrt_coin_count_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
@ -663,9 +694,7 @@ static ADDRESS_MAP_START( centiped_base_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x1680, 0x1680) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
|
||||
AM_RANGE(0x1700, 0x173f) AM_DEVREAD("earom", atari_vg_earom_device, read)
|
||||
AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x1c03, 0x1c04) AM_WRITE(led_w)
|
||||
AM_RANGE(0x1c07, 0x1c07) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x2000, 0x3fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -697,9 +726,7 @@ static ADDRESS_MAP_START( centipdb_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x4000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
|
||||
AM_RANGE(0x1700, 0x173f) AM_MIRROR(0x4000) AM_DEVREAD("earom", atari_vg_earom_device, read)
|
||||
AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x4000) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x1c00, 0x1c02) AM_MIRROR(0x4000) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x1c03, 0x1c04) AM_MIRROR(0x4000) AM_WRITE(led_w)
|
||||
AM_RANGE(0x1c07, 0x1c07) AM_MIRROR(0x4000) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x1c00, 0x1c07) AM_MIRROR(0x4000) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x2000, 0x27ff) AM_ROM
|
||||
AM_RANGE(0x2800, 0x3fff) AM_MIRROR(0x4000) AM_ROM
|
||||
AM_RANGE(0x6000, 0x67ff) AM_ROM
|
||||
@ -752,11 +779,7 @@ static ADDRESS_MAP_START( milliped_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3")
|
||||
AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read)
|
||||
AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
|
||||
AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w) /* TBEN */
|
||||
AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w) /* CNTRLSEL */
|
||||
AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x2700, 0x2700) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
|
||||
@ -800,11 +823,7 @@ static ADDRESS_MAP_START( multiped_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3")
|
||||
AM_RANGE(0x2030, 0x2030) AM_READNOP
|
||||
AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
|
||||
AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w)
|
||||
AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w)
|
||||
AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x2700, 0x2700) AM_WRITENOP
|
||||
@ -875,8 +894,7 @@ static ADDRESS_MAP_START( warlords_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x0c01, 0x0c01) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE("pokey", pokey_device, read, write)
|
||||
AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x1c03, 0x1c06) AM_WRITE(led_w)
|
||||
AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x5000, 0x7fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -903,10 +921,7 @@ static ADDRESS_MAP_START( mazeinv_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x2020, 0x2020) AM_READ(mazeinv_input_r)
|
||||
AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read)
|
||||
AM_RANGE(0x2480, 0x249f) AM_WRITE(mazeinv_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
|
||||
AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w)
|
||||
AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x2580, 0x2583) AM_WRITE(mazeinv_input_select_w)
|
||||
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
@ -933,9 +948,7 @@ static ADDRESS_MAP_START( bullsdrt_map, AS_PROGRAM, 8, centiped_state )
|
||||
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x6000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
|
||||
AM_RANGE(0x1300, 0x1300) AM_MIRROR(0x6000) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0x1400, 0x140f) AM_MIRROR(0x6000) AM_WRITE(centiped_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x1481, 0x1481) AM_MIRROR(0x6000) AM_WRITE(bullsdrt_coin_count_w)
|
||||
AM_RANGE(0x1483, 0x1484) AM_MIRROR(0x6000) AM_WRITE(led_w)
|
||||
AM_RANGE(0x1487, 0x1487) AM_MIRROR(0x6000) AM_WRITE(centiped_flip_screen_w)
|
||||
AM_RANGE(0x1480, 0x1487) AM_MIRROR(0x6000) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_NOP
|
||||
AM_RANGE(0x1800, 0x1bbf) AM_MIRROR(0x6000) AM_WRITE(centiped_videoram_w) AM_SHARE("videoram")
|
||||
@ -1692,6 +1705,13 @@ static MACHINE_CONFIG_START( centiped_base )
|
||||
|
||||
MCFG_ATARIVGEAROM_ADD("earom")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(centiped_state, coin_counter_left_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, coin_counter_center_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(centiped_state, coin_counter_right_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* timer */
|
||||
@ -1716,6 +1736,9 @@ static MACHINE_CONFIG_DERIVED( centiped, centiped_base )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(centiped_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch") // M10
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1732,6 +1755,9 @@ static MACHINE_CONFIG_DERIVED( caterplr, centiped_base )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(caterplr_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1747,6 +1773,9 @@ static MACHINE_CONFIG_DERIVED( centipdb, centiped_base )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(centipdb_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1763,6 +1792,9 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base )
|
||||
MCFG_CPU_PROGRAM_MAP(magworm_map)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(centiped_state,magworm)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch") // 12A
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1772,12 +1804,17 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( milliped, centiped )
|
||||
static MACHINE_CONFIG_DERIVED( milliped, centiped_base )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(milliped_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch") // 12E
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, input_select_w)) // TBEN
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, control_select_w)) // CNTRLSEL
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", milliped)
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
@ -1788,7 +1825,9 @@ static MACHINE_CONFIG_DERIVED( milliped, centiped )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_milliped)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8)
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8)
|
||||
MCFG_POKEY_ALLPOT_R_CB(IOPORT("DSW1"))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1809,12 +1848,17 @@ static MACHINE_CONFIG_DERIVED( multiped, milliped )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( warlords, centiped )
|
||||
static MACHINE_CONFIG_DERIVED( warlords, centiped_base )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(warlords_map)
|
||||
|
||||
// these extra LEDs also appear on Centipede schematics
|
||||
MCFG_DEVICE_MODIFY("outlatch") // P9
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, led_3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, led_4_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", warlords)
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
@ -1826,7 +1870,9 @@ static MACHINE_CONFIG_DERIVED( warlords, centiped )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_warlords)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8)
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8)
|
||||
MCFG_POKEY_POT0_R_CB(IOPORT("PADDLE0"))
|
||||
MCFG_POKEY_POT1_R_CB(IOPORT("PADDLE1"))
|
||||
MCFG_POKEY_POT2_R_CB(IOPORT("PADDLE2"))
|
||||
@ -1840,6 +1886,10 @@ static MACHINE_CONFIG_DERIVED( mazeinv, milliped )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(mazeinv_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_centiped)
|
||||
MACHINE_CONFIG_END
|
||||
@ -1855,6 +1905,12 @@ static MACHINE_CONFIG_START( bullsdrt )
|
||||
|
||||
MCFG_ATARIVGEAROM_ADD("earom")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, bullsdrt_coin_count_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -81,6 +81,7 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "includes/champbas.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -102,9 +103,9 @@ CUSTOM_INPUT_MEMBER(champbas_state::watchdog_bit2)
|
||||
return (0x10 - m_watchdog->get_vblank_counter()) >> 2 & 1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(champbas_state::irq_enable_w)
|
||||
WRITE_LINE_MEMBER(champbas_state::irq_enable_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
m_irq_mask = state;
|
||||
|
||||
if (!m_irq_mask)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
@ -123,15 +124,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(champbas_state::exctsccr_sound_irq)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(champbas_state::mcu_switch_w)
|
||||
WRITE_LINE_MEMBER(champbas_state::mcu_switch_w)
|
||||
{
|
||||
// switch shared RAM between CPU and MCU bus
|
||||
m_alpha_8201->bus_dir_w(data & 1);
|
||||
m_alpha_8201->bus_dir_w(state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(champbas_state::mcu_start_w)
|
||||
WRITE_LINE_MEMBER(champbas_state::mcu_start_w)
|
||||
{
|
||||
m_alpha_8201->mcu_start_w(data & 1);
|
||||
m_alpha_8201->mcu_start_w(state);
|
||||
}
|
||||
|
||||
/* champbja another protection */
|
||||
@ -190,14 +191,7 @@ static ADDRESS_MAP_START( champbas_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_RANGE(0xa080, 0xa080) AM_MIRROR(0x0020) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xa0c0, 0xa0c0) AM_READ_PORT("SYSTEM")
|
||||
|
||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0xa001, 0xa001) AM_WRITENOP // !WORK board output (no use?)
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(gfxbank_w)
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITE(palette_bank_w)
|
||||
AM_RANGE(0xa005, 0xa005) AM_WRITENOP // n.c.
|
||||
AM_RANGE(0xa006, 0xa006) AM_WRITENOP // no MCU
|
||||
AM_RANGE(0xa007, 0xa007) AM_WRITENOP // no MCU
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
|
||||
AM_RANGE(0xa060, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram")
|
||||
AM_RANGE(0xa080, 0xa080) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
@ -207,8 +201,6 @@ ADDRESS_MAP_END
|
||||
// base map + ALPHA-8x0x protection
|
||||
static ADDRESS_MAP_START( champbasj_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("alpha_8201", alpha_8201_device, ext_ram_r, ext_ram_w)
|
||||
AM_RANGE(0xa006, 0xa006) AM_WRITE(mcu_start_w)
|
||||
AM_RANGE(0xa007, 0xa007) AM_WRITE(mcu_switch_w)
|
||||
AM_IMPORT_FROM( champbas_map )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -231,25 +223,16 @@ static ADDRESS_MAP_START( champbb2_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_IMPORT_FROM( champbasj_map )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// talbot
|
||||
static ADDRESS_MAP_START( talbot_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITENOP // no gfxbank
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
|
||||
AM_IMPORT_FROM( champbasj_map )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// more sprites in exctsccr
|
||||
static ADDRESS_MAP_START( exctsccr_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_RANGE(0x7000, 0x7001) AM_UNMAP // aysnd is controlled by audiocpu
|
||||
AM_RANGE(0x7c00, 0x7fff) AM_RAM
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
|
||||
AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_IMPORT_FROM( champbasj_map )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// exctsccrb
|
||||
static ADDRESS_MAP_START( exctsccrb_map, AS_PROGRAM, 8, champbas_state )
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
|
||||
AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_IMPORT_FROM( champbasj_map )
|
||||
ADDRESS_MAP_END
|
||||
@ -524,9 +507,19 @@ static MACHINE_CONFIG_START( talbot )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6)
|
||||
MCFG_CPU_PROGRAM_MAP(talbot_map)
|
||||
MCFG_CPU_PROGRAM_MAP(champbasj_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // no gfxbank
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
|
||||
|
||||
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8)
|
||||
MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu")
|
||||
|
||||
@ -564,6 +557,16 @@ static MACHINE_CONFIG_START( champbas )
|
||||
MCFG_CPU_PROGRAM_MAP(champbas_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9D; 8G on Champion Baseball II Double Board Configuration
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(champbas_state, palette_bank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // no MCU
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // no MCU
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6)
|
||||
MCFG_CPU_PROGRAM_MAP(champbas_sound_map)
|
||||
|
||||
@ -603,6 +606,10 @@ static MACHINE_CONFIG_DERIVED( champbasj, champbas )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(champbasj_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
|
||||
|
||||
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8) // note: 8302 rom on champbb2 (same device!)
|
||||
MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu")
|
||||
MACHINE_CONFIG_END
|
||||
@ -636,6 +643,16 @@ static MACHINE_CONFIG_START( exctsccr )
|
||||
MCFG_CPU_PROGRAM_MAP(exctsccr_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4 )
|
||||
MCFG_CPU_PROGRAM_MAP(exctsccr_sound_map)
|
||||
MCFG_CPU_IO_MAP(exctsccr_sound_io_map)
|
||||
@ -697,6 +714,16 @@ static MACHINE_CONFIG_START( exctsccrb )
|
||||
MCFG_CPU_PROGRAM_MAP(exctsccrb_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6)
|
||||
MCFG_CPU_PROGRAM_MAP(champbas_sound_map)
|
||||
|
||||
|
@ -14,6 +14,7 @@ Tomasz Slanina
|
||||
#include "includes/changela.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "speaker.h"
|
||||
@ -132,24 +133,29 @@ READ8_MEMBER(changela_state::changela_2d_r)
|
||||
return (ioport("IN1")->read() & 0x20) | gas | (v8 << 4);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(changela_state::mcu_pc_0_w)
|
||||
WRITE_LINE_MEMBER(changela_state::mcu_pc_0_w)
|
||||
{
|
||||
m_mcu->pc_w(space, 0, 0xfe | (data & 0x01));
|
||||
m_mcu->pc_w(machine().dummy_space(), 0, 0xfe | state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(changela_state::changela_collision_reset_0)
|
||||
WRITE_LINE_MEMBER(changela_state::collision_reset_0_w)
|
||||
{
|
||||
m_collision_reset = data & 0x01;
|
||||
m_collision_reset = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(changela_state::changela_collision_reset_1)
|
||||
WRITE_LINE_MEMBER(changela_state::collision_reset_1_w)
|
||||
{
|
||||
m_tree_collision_reset = data & 0x01;
|
||||
m_tree_collision_reset = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(changela_state::changela_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(changela_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(changela_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -172,14 +178,11 @@ static ADDRESS_MAP_START( changela_map, AS_PROGRAM, 8, changela_state )
|
||||
AM_RANGE(0xd010, 0xd011) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w)
|
||||
|
||||
/* LS259 - U44 */
|
||||
AM_RANGE(0xd020, 0xd020) AM_WRITE(changela_collision_reset_0)
|
||||
AM_RANGE(0xd021, 0xd022) AM_WRITE(changela_coin_counter_w)
|
||||
//AM_RANGE(0xd023, 0xd023) AM_WRITENOP
|
||||
AM_RANGE(0xd020, 0xd027) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
|
||||
/* LS139 - U24 */
|
||||
AM_RANGE(0xd024, 0xd024) AM_READWRITE(changela_24_r, mcu_pc_0_w)
|
||||
AM_RANGE(0xd025, 0xd025) AM_READWRITE(changela_25_r, changela_collision_reset_1)
|
||||
AM_RANGE(0xd026, 0xd026) AM_WRITENOP
|
||||
AM_RANGE(0xd024, 0xd024) AM_READ(changela_24_r)
|
||||
AM_RANGE(0xd025, 0xd025) AM_READ(changela_25_r)
|
||||
AM_RANGE(0xd028, 0xd028) AM_READ(mcu_r)
|
||||
AM_RANGE(0xd02c, 0xd02c) AM_READ(changela_2c_r)
|
||||
AM_RANGE(0xd02d, 0xd02d) AM_READ(changela_2d_r)
|
||||
@ -419,6 +422,13 @@ static MACHINE_CONFIG_START( changela )
|
||||
MCFG_M68705_PORTC_W_CB(WRITE8(changela_state, changela_68705_port_c_w))
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", changela_state, chl_mcu_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // U44 on Sound I/O Board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(changela_state, collision_reset_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(changela_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(changela_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(changela_state, mcu_pc_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(changela_state, collision_reset_1_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -120,19 +120,17 @@ READ8_MEMBER(cinemat_state::coin_input_r)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(cinemat_state::coin_reset_w)
|
||||
WRITE_LINE_MEMBER(cinemat_state::coin_reset_w)
|
||||
{
|
||||
/* on the rising edge of a coin reset, clear the coin_detected flag */
|
||||
if (m_coin_last_reset != data && data != 0)
|
||||
if (state)
|
||||
m_coin_detected = 0;
|
||||
m_coin_last_reset = data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cinemat_state::mux_select_w)
|
||||
WRITE_LINE_MEMBER(cinemat_state::mux_select_w)
|
||||
{
|
||||
m_mux_select = data;
|
||||
cinemat_sound_control_w(space, 0x07, data);
|
||||
m_mux_select = state;
|
||||
}
|
||||
|
||||
|
||||
@ -272,7 +270,7 @@ READ8_MEMBER(cinemat_state::qb3_frame_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cinemat_state::qb3_ram_bank_w)
|
||||
WRITE_LINE_MEMBER(cinemat_state::qb3_ram_bank_w)
|
||||
{
|
||||
membank("bank1")->set_entry(m_maincpu->state_int(ccpu_cpu_device::CCPU_P) & 3);
|
||||
}
|
||||
@ -321,9 +319,7 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, cinemat_state )
|
||||
AM_RANGE(0x10, 0x16) AM_READ(switches_r)
|
||||
AM_RANGE(0x17, 0x17) AM_READ(coin_input_r)
|
||||
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE(coin_reset_w)
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(cinemat_vector_control_w)
|
||||
AM_RANGE(0x00, 0x07) AM_WRITE(cinemat_sound_control_w)
|
||||
AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -968,6 +964,10 @@ static MACHINE_CONFIG_START( cinemat_nojmi_4k )
|
||||
MCFG_CPU_DATA_MAP(data_map)
|
||||
MCFG_CPU_IO_MAP(io_map)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 7J on CCG-1
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cinemat_state, coin_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cinemat_state, vector_control_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_VECTOR_ADD("vector")
|
||||
MCFG_SCREEN_ADD("screen", VECTOR)
|
||||
@ -1048,6 +1048,9 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( tailg, cinemat_nojmi_8k )
|
||||
MCFG_FRAGMENT_ADD(tailg_sound)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1082,6 +1085,9 @@ static MACHINE_CONFIG_DERIVED( boxingb, cinemat_jmi_32k )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024, 0, 788)
|
||||
MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_color)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1112,6 +1118,9 @@ static MACHINE_CONFIG_DERIVED( qb3, cinemat_jmi_32k )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1120, 0, 780)
|
||||
MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_qb3color)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, qb3_ram_bank_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1434,23 +1443,15 @@ DRIVER_INIT_MEMBER(cinemat_state,sundance)
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(cinemat_state,tailg)
|
||||
{
|
||||
m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this));
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(cinemat_state,boxingb)
|
||||
{
|
||||
m_maincpu->space(AS_IO).install_read_handler(0x0c, 0x0f, read8_delegate(FUNC(cinemat_state::boxingb_dial_r),this));
|
||||
m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this));
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(cinemat_state,qb3)
|
||||
{
|
||||
m_maincpu->space(AS_IO).install_read_handler(0x0f, 0x0f, read8_delegate(FUNC(cinemat_state::qb3_frame_r),this));
|
||||
m_maincpu->space(AS_IO).install_write_handler(0x00, 0x00, write8_delegate(FUNC(cinemat_state::qb3_ram_bank_w),this));
|
||||
|
||||
membank("bank1")->configure_entries(0, 4, m_rambase, 0x100*2);
|
||||
}
|
||||
@ -1469,7 +1470,7 @@ GAMEL(1979, barrier, 0, barrier, barrier, cinemat_state, 0, ORIE
|
||||
GAME( 1979, speedfrk, 0, speedfrk, speedfrk, cinemat_state, speedfrk, ORIENTATION_FLIP_Y, "Vectorbeam", "Speed Freak", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starhawk, 0, starhawk, starhawk, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Star Hawk", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAMEL(1979, sundance, 0, sundance, sundance, cinemat_state, sundance, ORIENTATION_FLIP_X ^ ROT270, "Cinematronics", "Sundance", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sundance )
|
||||
GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, tailg, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg )
|
||||
GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg )
|
||||
GAME( 1979, warrior, 0, warrior, warrior, cinemat_state, 0, ORIENTATION_FLIP_Y, "Vectorbeam", "Warrior", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAMEL(1980, armora, 0, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora )
|
||||
GAMEL(1980, armorap, armora, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora )
|
||||
|
@ -43,7 +43,7 @@
|
||||
3200-327F: (W) Color RAM, Address bit 6 becomes the 9th bit of color RAM
|
||||
|
||||
3800: (W) Right Coin Counter
|
||||
3801: (W) Left Coint Counter
|
||||
3801: (W) Left Coin Counter
|
||||
3803: (W) Cocktail Output
|
||||
3806: (W) Start 2 LED
|
||||
3807: (W) Start 1 LED
|
||||
@ -121,6 +121,7 @@
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "speaker.h"
|
||||
@ -132,14 +133,24 @@
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(cloak_state::cloak_led_w)
|
||||
WRITE_LINE_MEMBER(cloak_state::start_led_1_w)
|
||||
{
|
||||
output().set_led_value(1 - offset, ~data & 0x80);
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cloak_state::cloak_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(cloak_state::start_led_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1 - offset, data & 0x80);
|
||||
output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cloak_state::coin_counter_l_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cloak_state::coin_counter_r_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cloak_state::cloak_custom_w)
|
||||
@ -183,10 +194,7 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, cloak_state )
|
||||
AM_RANGE(0x2f00, 0x2fff) AM_NOP
|
||||
AM_RANGE(0x3000, 0x30ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x3200, 0x327f) AM_WRITE(cloak_paletteram_w)
|
||||
AM_RANGE(0x3800, 0x3801) AM_WRITE(cloak_coin_counter_w)
|
||||
AM_RANGE(0x3803, 0x3803) AM_WRITE(cloak_flipscreen_w)
|
||||
AM_RANGE(0x3805, 0x3805) AM_WRITENOP // ???
|
||||
AM_RANGE(0x3806, 0x3807) AM_WRITE(cloak_led_w)
|
||||
AM_RANGE(0x3800, 0x3807) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x3c00, 0x3c00) AM_WRITE(cloak_irq_reset_0_w)
|
||||
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(cloak_nvram_enable_w)
|
||||
@ -328,6 +336,14 @@ static MACHINE_CONFIG_START( cloak )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 10B
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloak_state, coin_counter_r_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloak_state, coin_counter_l_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloak_state, cocktail_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cloak_state, start_led_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cloak_state, start_led_1_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -216,15 +216,27 @@ WRITE8_MEMBER(cloud9_state::irq_ack_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cloud9_state::cloud9_led_w)
|
||||
WRITE_LINE_MEMBER(cloud9_state::led1_w)
|
||||
{
|
||||
output().set_led_value(offset, ~data & 0x80);
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(cloud9_state::cloud9_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(cloud9_state::led2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 0x80);
|
||||
output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(cloud9_state::coin1_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(cloud9_state::coin2_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -272,9 +284,8 @@ static ADDRESS_MAP_START( cloud9_map, AS_PROGRAM, 8, cloud9_state )
|
||||
AM_RANGE(0x5400, 0x547f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x5480, 0x54ff) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x5500, 0x557f) AM_RAM_WRITE(cloud9_paletteram_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_WRITE(cloud9_video_control_w)
|
||||
AM_RANGE(0x5600, 0x5601) AM_MIRROR(0x0078) AM_WRITE(cloud9_coin_counter_w)
|
||||
AM_RANGE(0x5602, 0x5603) AM_MIRROR(0x0078) AM_WRITE(cloud9_led_w)
|
||||
AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_DEVWRITE("videolatch", ls259_device, write_d7) // video control registers
|
||||
AM_RANGE(0x5600, 0x5607) AM_MIRROR(0x0078) AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x5680, 0x56ff) AM_WRITE(nvram_store_w)
|
||||
AM_RANGE(0x5700, 0x577f) AM_WRITE(nvram_recall_w)
|
||||
AM_RANGE(0x5800, 0x5800) AM_MIRROR(0x007e) AM_READ_PORT("IN0")
|
||||
@ -410,6 +421,12 @@ static MACHINE_CONFIG_START( cloud9 )
|
||||
MCFG_CPU_ADD("maincpu", M6502, MASTER_CLOCK/8)
|
||||
MCFG_CPU_PROGRAM_MAP(cloud9_map)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloud9_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloud9_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cloud9_state, led1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloud9_state, led2_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
|
||||
@ -427,6 +444,8 @@ static MACHINE_CONFIG_START( cloud9 )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(cloud9_state, screen_update_cloud9)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -31,6 +31,7 @@ TODO:
|
||||
#include "audio/wiping.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -58,19 +59,14 @@ READ8_MEMBER(clshroad_state::input_r)
|
||||
|
||||
// irq/reset controls like in wiping.cpp
|
||||
|
||||
WRITE8_MEMBER(clshroad_state::subcpu_reset_w)
|
||||
WRITE_LINE_MEMBER(clshroad_state::main_irq_mask_w)
|
||||
{
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_main_irq_mask = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(clshroad_state::main_irq_mask_w)
|
||||
WRITE_LINE_MEMBER(clshroad_state::sound_irq_mask_w)
|
||||
{
|
||||
m_main_irq_mask = data & 1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(clshroad_state::sound_irq_mask_w)
|
||||
{
|
||||
m_sound_irq_mask = data & 1;
|
||||
m_sound_irq_mask = state;
|
||||
}
|
||||
|
||||
|
||||
@ -80,9 +76,7 @@ static ADDRESS_MAP_START( clshroad_map, AS_PROGRAM, 8, clshroad_state )
|
||||
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x9800, 0x9dff) AM_RAM
|
||||
AM_RANGE(0x9e00, 0x9fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(subcpu_reset_w)
|
||||
AM_RANGE(0xa001, 0xa001) AM_WRITE(main_irq_mask_w)
|
||||
AM_RANGE(0xa004, 0xa004) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa100, 0xa107) AM_READ(input_r)
|
||||
AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
|
||||
AM_RANGE(0xb000, 0xb003) AM_WRITEONLY AM_SHARE("vregs") // Scroll
|
||||
@ -93,7 +87,7 @@ static ADDRESS_MAP_START( clshroad_sound_map, AS_PROGRAM, 8, clshroad_state )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("custom", wiping_sound_device, sound_w)
|
||||
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0xa003, 0xa003) AM_WRITE(sound_irq_mask_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -287,6 +281,12 @@ static MACHINE_CONFIG_START( firebatl )
|
||||
MCFG_CPU_PROGRAM_MAP(clshroad_sound_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -322,6 +322,12 @@ static MACHINE_CONFIG_START( clshroad )
|
||||
//MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // never writes here?
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -60,7 +60,6 @@ Added Dip locations according to manual.
|
||||
#include "includes/copsnrob.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "copsnrob.lh"
|
||||
|
||||
@ -94,7 +93,7 @@ WRITE8_MEMBER(copsnrob_state::copsnrob_misc2_w)
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, copsnrob_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0500, 0x0507) AM_WRITE(copsnrob_misc_w)
|
||||
AM_RANGE(0x0500, 0x0507) AM_DEVWRITE("latch", f9334_device, write_d0)
|
||||
AM_RANGE(0x0600, 0x0600) AM_WRITEONLY AM_SHARE("trucky")
|
||||
AM_RANGE(0x0700, 0x07ff) AM_WRITEONLY AM_SHARE("truckram")
|
||||
AM_RANGE(0x0800, 0x08ff) AM_RAM AM_SHARE("bulletsram")
|
||||
@ -265,13 +264,7 @@ static MACHINE_CONFIG_START( copsnrob )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", copsnrob)
|
||||
MCFG_PALETTE_ADD_MONOCHROME("palette")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
MCFG_DISCRETE_INTF(copsnrob)
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MCFG_FRAGMENT_ADD(copsnrob_audio)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/tms9900/tms9995.h"
|
||||
#include "machine/74259.h"
|
||||
#include "video/tms9928a.h"
|
||||
|
||||
class cortex_state : public driver_device
|
||||
@ -51,8 +52,9 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( cortex_io, AS_IO, 8, cortex_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
//AM_RANGE(0x0000, 0x000f) AM_READWRITE(pio_r,pio_w)
|
||||
//AM_RANGE(0x0010, 0x001f) AM_READ(keyboard_r)
|
||||
AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0030) AM_DEVWRITE("control", ls259_device, write_a0)
|
||||
//AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0020) AM_READ(pio_r)
|
||||
//AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0020) AM_READ(keyboard_r)
|
||||
//AM_RANGE(0x0080, 0x00bf) AM_READWRITE(rs232_r,rs232_w)
|
||||
//AM_RANGE(0x0180, 0x01bf) AM_READWRITE(cass_r,cass_w)
|
||||
//AM_RANGE(0x0800, 0x080f) AM_WRITE(cent_data_w)
|
||||
@ -81,6 +83,15 @@ static MACHINE_CONFIG_START( cortex )
|
||||
// No lines connected yet
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, cortex_mem, cortex_io)
|
||||
|
||||
MCFG_DEVICE_ADD("control", LS259, 0) // IC64
|
||||
//MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cortex_state, basic_led_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cortex_state, keyboard_ack_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cortex_state, ebus_int_ack_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cortex_state, ebus_to_en_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cortex_state, disk_size_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cortex_state, eprom_on_off_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cortex_state, bell_en_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL_10_738635MHz / 2 )
|
||||
MCFG_TMS9928A_VRAM_SIZE(0x4000)
|
||||
|
@ -93,6 +93,7 @@ protected or a snippet should do the aforementioned string copy.
|
||||
#include "includes/crgolf.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/msm5205.h"
|
||||
#include "screen.h"
|
||||
@ -128,6 +129,10 @@ void crgolf_state::machine_start()
|
||||
save_item(NAME(m_sound_to_main_data));
|
||||
save_item(NAME(m_sample_offset));
|
||||
save_item(NAME(m_sample_count));
|
||||
save_item(NAME(m_color_select));
|
||||
save_item(NAME(m_screen_flip));
|
||||
save_item(NAME(m_screena_enable));
|
||||
save_item(NAME(m_screenb_enable));
|
||||
}
|
||||
|
||||
|
||||
@ -290,10 +295,34 @@ WRITE8_MEMBER(crgolf_state::crgolfhi_sample_w)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(crgolf_state::screen_select_w)
|
||||
|
||||
WRITE_LINE_MEMBER(crgolf_state::color_select_w)
|
||||
{
|
||||
// if (data & 0xfe) printf("vram_page_select_w %02x\n", data);
|
||||
m_vrambank->set_bank(data & 0x1);
|
||||
m_color_select = state;
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(crgolf_state::screen_flip_w)
|
||||
{
|
||||
m_screen_flip = state;
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(crgolf_state::screen_select_w)
|
||||
{
|
||||
m_vrambank->set_bank(state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(crgolf_state::screena_enable_w)
|
||||
{
|
||||
m_screena_enable = state;
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(crgolf_state::screenb_enable_w)
|
||||
{
|
||||
m_screenb_enable = state;
|
||||
}
|
||||
|
||||
|
||||
@ -308,11 +337,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, crgolf_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x5fff) AM_RAM
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x8003, 0x8003) AM_WRITEONLY AM_SHARE("color_select")
|
||||
AM_RANGE(0x8004, 0x8004) AM_WRITEONLY AM_SHARE("screen_flip")
|
||||
AM_RANGE(0x8005, 0x8005) AM_WRITE( screen_select_w )
|
||||
AM_RANGE(0x8006, 0x8006) AM_WRITEONLY AM_SHARE("screenb_enable")
|
||||
AM_RANGE(0x8007, 0x8007) AM_WRITEONLY AM_SHARE("screena_enable")
|
||||
AM_RANGE(0x8000, 0x8007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x8800, 0x8800) AM_READWRITE(sound_to_main_r, main_to_sound_w)
|
||||
AM_RANGE(0x9000, 0x9000) AM_WRITE(rom_bank_select_w)
|
||||
AM_RANGE(0xa000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
|
||||
@ -357,13 +382,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mastrglf_io, AS_IO, 8, crgolf_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
|
||||
AM_RANGE(0x03, 0x03) AM_WRITEONLY AM_SHARE("color_select")
|
||||
AM_RANGE(0x04, 0x04) AM_WRITEONLY AM_SHARE("screen_flip")
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE( screen_select_w )
|
||||
AM_RANGE(0x06, 0x06) AM_WRITEONLY AM_SHARE("screenb_enable")
|
||||
AM_RANGE(0x07, 0x07) AM_WRITEONLY AM_SHARE("screena_enable")
|
||||
|
||||
AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
// AM_RANGE(0x20, 0x20) AM_WRITE( main_to_sound_w )
|
||||
AM_RANGE(0x40, 0x40) AM_WRITE( main_to_sound_w )
|
||||
AM_RANGE(0xa0, 0xa0) AM_READ( sound_to_main_r )
|
||||
@ -505,6 +524,13 @@ static MACHINE_CONFIG_START( crgolf )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1H
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(crgolf_state, color_select_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(crgolf_state, screen_flip_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(crgolf_state, screen_select_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(crgolf_state, screenb_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(crgolf_state, screena_enable_w))
|
||||
|
||||
MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(vrambank_map)
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
|
||||
|
@ -4264,10 +4264,7 @@ static ADDRESS_MAP_START( htengoku_io_map, AS_IO, 8, ddenlovr_state )
|
||||
AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
|
||||
AM_RANGE( 0xc5, 0xc5 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
|
||||
AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(htengoku_blit_romregion_w) // Blitter ROM bank
|
||||
AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(yarunara_flipscreen_w)
|
||||
AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(yarunara_layer_half2_w) //
|
||||
AM_RANGE( 0xe5, 0xe5 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0xe0, 0xe7 ) AM_WRITE(yarunara_mainlatch_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
@ -4296,6 +4293,12 @@ static MACHINE_CONFIG_START( htengoku )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) //
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -14,6 +14,7 @@ TODO:
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6800/m6800.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "screen.h"
|
||||
|
||||
@ -68,7 +69,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(misc_w);
|
||||
DECLARE_WRITE8_MEMBER(cursor_load_w);
|
||||
DECLARE_WRITE8_MEMBER(interrupt_ack_w);
|
||||
DECLARE_WRITE8_MEMBER(output_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led1_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_READ8_MEMBER(scanline_r);
|
||||
|
||||
@ -244,37 +246,15 @@ WRITE8_MEMBER(destroyr_state::interrupt_ack_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(destroyr_state::output_w)
|
||||
WRITE_LINE_MEMBER(destroyr_state::led0_w)
|
||||
{
|
||||
if (offset & 8) misc_w(space, 8, data);
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
else switch (offset & 7)
|
||||
{
|
||||
case 0:
|
||||
output().set_led_value(0, data & 1);
|
||||
break;
|
||||
case 1:
|
||||
output().set_led_value(1, data & 1); /* no second LED present on cab */
|
||||
break;
|
||||
case 2:
|
||||
/* bit 0 => songate */
|
||||
break;
|
||||
case 3:
|
||||
/* bit 0 => launch */
|
||||
break;
|
||||
case 4:
|
||||
/* bit 0 => explosion */
|
||||
break;
|
||||
case 5:
|
||||
/* bit 0 => sonar */
|
||||
break;
|
||||
case 6:
|
||||
/* bit 0 => high explosion */
|
||||
break;
|
||||
case 7:
|
||||
/* bit 0 => low explosion */
|
||||
break;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(destroyr_state::led1_w)
|
||||
{
|
||||
output().set_led_value(1, state); /* no second LED present on cab */
|
||||
}
|
||||
|
||||
|
||||
@ -308,7 +288,9 @@ READ8_MEMBER(destroyr_state::scanline_r)
|
||||
static ADDRESS_MAP_START( destroyr_map, AS_PROGRAM, 8, destroyr_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0xf00) AM_RAM
|
||||
AM_RANGE(0x1000, 0x1fff) AM_READWRITE(input_r, output_w)
|
||||
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0xffe) AM_READ(input_r)
|
||||
AM_RANGE(0x1000, 0x1007) AM_MIRROR(0xff0) AM_DEVWRITE("outlatch", f9334_device, write_d0)
|
||||
AM_RANGE(0x1008, 0x1008) AM_MIRROR(0xff7) AM_WRITE(misc_w)
|
||||
AM_RANGE(0x2000, 0x2fff) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0xf00) AM_WRITEONLY AM_SHARE("alpha_nuram")
|
||||
AM_RANGE(0x4000, 0x401f) AM_MIRROR(0xfe0) AM_WRITEONLY AM_SHARE("major_obj_ram")
|
||||
@ -497,6 +479,16 @@ static MACHINE_CONFIG_START( destroyr )
|
||||
MCFG_CPU_PROGRAM_MAP(destroyr_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", F9334, 0) // F8
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(destroyr_state, led0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(destroyr_state, led1_w))
|
||||
// Q2 => songate
|
||||
// Q3 => launch
|
||||
// Q4 => explosion
|
||||
// Q5 => sonar
|
||||
// Q6 => high explosion
|
||||
// Q7 => low explosion
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "emu.h"
|
||||
#include "includes/dragrace.h"
|
||||
#include "cpu/m6800/m6800.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -38,82 +39,34 @@ TIMER_DEVICE_CALLBACK_MEMBER(dragrace_state::dragrace_frame_callback)
|
||||
}
|
||||
|
||||
|
||||
void dragrace_state::dragrace_update_misc_flags( address_space &space )
|
||||
WRITE8_MEMBER(dragrace_state::speed1_w)
|
||||
{
|
||||
/* 0x0900 = set 3SPEED1 0x00000001
|
||||
* 0x0901 = set 4SPEED1 0x00000002
|
||||
* 0x0902 = set 5SPEED1 0x00000004
|
||||
* 0x0903 = set 6SPEED1 0x00000008
|
||||
* 0x0904 = set 7SPEED1 0x00000010
|
||||
* 0x0905 = set EXPLOSION1 0x00000020
|
||||
* 0x0906 = set SCREECH1 0x00000040
|
||||
* 0x0920 - 0x0927 = clear 0x0900 - 0x0907
|
||||
|
||||
* 0x0909 = set KLEXPL1 0x00000200
|
||||
* 0x090b = set MOTOR1 0x00000800
|
||||
* 0x090c = set ATTRACT 0x00001000
|
||||
* 0x090d = set LOTONE 0x00002000
|
||||
* 0x090f = set Player 1 Start Lamp 0x00008000
|
||||
* 0x0928 - 0x092f = clear 0x0908 - 0x090f
|
||||
|
||||
* 0x0910 = set 3SPEED2 0x00010000
|
||||
* 0x0911 = set 4SPEED2 0x00020000
|
||||
* 0x0912 = set 5SPEED2 0x00040000
|
||||
* 0x0913 = set 6SPEED2 0x00080000
|
||||
* 0x0914 = set 7SPEED2 0x00100000
|
||||
* 0x0915 = set EXPLOSION2 0x00200000
|
||||
* 0x0916 = set SCREECH2 0x00400000
|
||||
* 0x0930 = clear 0x0910 - 0x0917
|
||||
|
||||
* 0x0919 = set KLEXPL2 0x02000000
|
||||
* 0x091b = set MOTOR2 0x08000000
|
||||
* 0x091d = set HITONE 0x20000000
|
||||
* 0x091f = set Player 2 Start Lamp 0x80000000
|
||||
* 0x0938 = clear 0x0918 - 0x091f
|
||||
*/
|
||||
output().set_led_value(0, m_misc_flags & 0x00008000);
|
||||
output().set_led_value(1, m_misc_flags & 0x80000000);
|
||||
|
||||
m_discrete->write(space, DRAGRACE_MOTOR1_DATA, ~m_misc_flags & 0x0000001f); // Speed1 data*
|
||||
m_discrete->write(space, DRAGRACE_EXPLODE1_EN, (m_misc_flags & 0x00000020) ? 1: 0); // Explosion1 enable
|
||||
m_discrete->write(space, DRAGRACE_SCREECH1_EN, (m_misc_flags & 0x00000040) ? 1: 0); // Screech1 enable
|
||||
m_discrete->write(space, DRAGRACE_KLEXPL1_EN, (m_misc_flags & 0x00000200) ? 1: 0); // KLEXPL1 enable
|
||||
m_discrete->write(space, DRAGRACE_MOTOR1_EN, (m_misc_flags & 0x00000800) ? 1: 0); // Motor1 enable
|
||||
|
||||
m_discrete->write(space, DRAGRACE_MOTOR2_DATA, (~m_misc_flags & 0x001f0000) >> 0x10); // Speed2 data*
|
||||
m_discrete->write(space, DRAGRACE_EXPLODE2_EN, (m_misc_flags & 0x00200000) ? 1: 0); // Explosion2 enable
|
||||
m_discrete->write(space, DRAGRACE_SCREECH2_EN, (m_misc_flags & 0x00400000) ? 1: 0); // Screech2 enable
|
||||
m_discrete->write(space, DRAGRACE_KLEXPL2_EN, (m_misc_flags & 0x02000000) ? 1: 0); // KLEXPL2 enable
|
||||
m_discrete->write(space, DRAGRACE_MOTOR2_EN, (m_misc_flags & 0x08000000) ? 1: 0); // Motor2 enable
|
||||
|
||||
m_discrete->write(space, DRAGRACE_ATTRACT_EN, (m_misc_flags & 0x00001000) ? 1: 0); // Attract enable
|
||||
m_discrete->write(space, DRAGRACE_LOTONE_EN, (m_misc_flags & 0x00002000) ? 1: 0); // LoTone enable
|
||||
m_discrete->write(space, DRAGRACE_HITONE_EN, (m_misc_flags & 0x20000000) ? 1: 0); // HiTone enable
|
||||
unsigned freq = ~data & 0x1f;
|
||||
m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR1_DATA, freq);
|
||||
|
||||
// the tachometers are driven from the same frequency generator that creates the engine sound
|
||||
output().set_value("tachometer", ~m_misc_flags & 0x0000001f);
|
||||
output().set_value("tachometer2", (~m_misc_flags & 0x001f0000) >> 0x10);
|
||||
output().set_value("tachometer", freq);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dragrace_state::dragrace_misc_w)
|
||||
WRITE8_MEMBER(dragrace_state::speed2_w)
|
||||
{
|
||||
/* Set/clear individual bit */
|
||||
uint32_t mask = 1 << offset;
|
||||
if (data & 0x01)
|
||||
m_misc_flags |= mask;
|
||||
else
|
||||
m_misc_flags &= (~mask);
|
||||
logerror("Set %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0900 + offset, mask, m_misc_flags, data & 0x01);
|
||||
dragrace_update_misc_flags(space);
|
||||
unsigned freq = ~data & 0x1f;
|
||||
m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR2_DATA, freq);
|
||||
|
||||
// the tachometers are driven from the same frequency generator that creates the engine sound
|
||||
output().set_value("tachometer2", freq);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dragrace_state::dragrace_misc_clear_w)
|
||||
WRITE_LINE_MEMBER(dragrace_state::p1_start_w)
|
||||
{
|
||||
/* Clear 8 bits */
|
||||
uint32_t mask = 0xff << (((offset >> 3) & 0x03) * 8);
|
||||
m_misc_flags &= (~mask);
|
||||
logerror("Clear %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0920 + offset, mask, m_misc_flags, data & 0x01);
|
||||
dragrace_update_misc_flags(space);
|
||||
// set Player 1 Start Lamp
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(dragrace_state::p2_start_w)
|
||||
{
|
||||
// set Player 2 Start Lamp
|
||||
output().set_led_value(1, state);
|
||||
}
|
||||
|
||||
READ8_MEMBER(dragrace_state::dragrace_input_r)
|
||||
@ -168,8 +121,14 @@ READ8_MEMBER(dragrace_state::dragrace_scanline_r)
|
||||
static ADDRESS_MAP_START( dragrace_map, AS_PROGRAM, 8, dragrace_state )
|
||||
AM_RANGE(0x0080, 0x00ff) AM_RAM
|
||||
AM_RANGE(0x0800, 0x083f) AM_READ(dragrace_input_r)
|
||||
AM_RANGE(0x0900, 0x091f) AM_WRITE(dragrace_misc_w)
|
||||
AM_RANGE(0x0920, 0x093f) AM_WRITE(dragrace_misc_clear_w)
|
||||
AM_RANGE(0x0900, 0x0907) AM_DEVWRITE("latch_f5", addressable_latch_device, write_d0)
|
||||
AM_RANGE(0x0908, 0x090f) AM_DEVWRITE("latch_a5", addressable_latch_device, write_d0)
|
||||
AM_RANGE(0x0910, 0x0917) AM_DEVWRITE("latch_h5", addressable_latch_device, write_d0)
|
||||
AM_RANGE(0x0918, 0x091f) AM_DEVWRITE("latch_e5", addressable_latch_device, write_d0)
|
||||
AM_RANGE(0x0920, 0x0927) AM_DEVWRITE("latch_f5", addressable_latch_device, clear)
|
||||
AM_RANGE(0x0928, 0x092f) AM_DEVWRITE("latch_a5", addressable_latch_device, clear)
|
||||
AM_RANGE(0x0930, 0x0937) AM_DEVWRITE("latch_h5", addressable_latch_device, clear)
|
||||
AM_RANGE(0x0938, 0x093f) AM_DEVWRITE("latch_e5", addressable_latch_device, clear)
|
||||
AM_RANGE(0x0a00, 0x0aff) AM_WRITEONLY AM_SHARE("playfield_ram")
|
||||
AM_RANGE(0x0b00, 0x0bff) AM_WRITEONLY AM_SHARE("position_ram")
|
||||
AM_RANGE(0x0c00, 0x0c00) AM_READ(dragrace_steering_r)
|
||||
@ -314,13 +273,11 @@ PALETTE_INIT_MEMBER(dragrace_state, dragrace)
|
||||
|
||||
void dragrace_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_misc_flags));
|
||||
save_item(NAME(m_gear));
|
||||
}
|
||||
|
||||
void dragrace_state::machine_reset()
|
||||
{
|
||||
m_misc_flags = 0;
|
||||
m_gear[0] = 0;
|
||||
m_gear[1] = 0;
|
||||
}
|
||||
@ -356,6 +313,29 @@ static MACHINE_CONFIG_START( dragrace )
|
||||
MCFG_DISCRETE_INTF(dragrace)
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("latch_f5", F9334, 0) // F5
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed1_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED1-7SPEED1
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE1_EN>)) // Explosion1 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH1_EN>)) // Screech1 enable
|
||||
|
||||
MCFG_DEVICE_ADD("latch_a5", F9334, 0) // A5
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL1_EN>)) // KLEXPL1 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR1_EN>)) // Motor1 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_ATTRACT_EN>)) // Attract enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_LOTONE_EN>)) // LoTone enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p1_start_w))
|
||||
|
||||
MCFG_DEVICE_ADD("latch_h5", F9334, 0) // H5
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed2_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED2-7SPEED2
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE2_EN>)) // Explosion2 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH2_EN>)) // Screech2 enable
|
||||
|
||||
MCFG_DEVICE_ADD("latch_e5", F9334, 0) // E5
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL2_EN>)) // KLEXPL2 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR2_EN>)) // Motor2 enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_HITONE_EN>)) // HiTone enable
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p2_start_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -116,8 +116,9 @@ WRITE8_MEMBER(dynax_state::dynax_vblank_ack_w)
|
||||
sprtmtch_update_irq();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::dynax_blitter_ack_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::blitter_ack_w)
|
||||
{
|
||||
// probably not exactly how this works
|
||||
m_blitter_irq = 0;
|
||||
sprtmtch_update_irq();
|
||||
}
|
||||
@ -152,15 +153,15 @@ WRITE8_MEMBER(dynax_state::jantouki_vblank_ack_w)
|
||||
jantouki_update_irq();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::jantouki_blitter_ack_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::jantouki_blitter_ack_w)
|
||||
{
|
||||
m_blitter_irq = data;
|
||||
m_blitter_irq = state;
|
||||
jantouki_update_irq();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::jantouki_blitter2_ack_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::jantouki_blitter2_ack_w)
|
||||
{
|
||||
m_blitter2_irq = data;
|
||||
m_blitter2_irq = state;
|
||||
jantouki_update_irq();
|
||||
}
|
||||
|
||||
@ -212,14 +213,14 @@ WRITE_LINE_MEMBER(dynax_state::jantouki_sound_callback)
|
||||
Sports Match
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_MEMBER(dynax_state::dynax_coincounter_0_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::coincounter_0_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::dynax_coincounter_1_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::coincounter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, data);
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
READ8_MEMBER(dynax_state::ret_ff)
|
||||
@ -286,12 +287,6 @@ WRITE8_MEMBER(dynax_state::hnoridur_rombank_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(dynax_state::hnoridur_palbank_w)
|
||||
{
|
||||
m_palbank = data & 0x0f;
|
||||
dynax_blit_palbank_w(space, 0, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::hnoridur_palette_w)
|
||||
{
|
||||
switch (m_hnoridur_bank)
|
||||
@ -428,6 +423,11 @@ WRITE8_MEMBER(dynax_state::adpcm_reset_w)
|
||||
m_msm->reset_w(~data & 1);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(dynax_state::adpcm_reset_kludge_w)
|
||||
{
|
||||
m_resetkludge = state;
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(dynax_state,adpcm)
|
||||
{
|
||||
/* start with the MSM5205 reset */
|
||||
@ -435,16 +435,6 @@ MACHINE_RESET_MEMBER(dynax_state,adpcm)
|
||||
m_msm->reset_w(1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::yarunara_layer_half_w)
|
||||
{
|
||||
hanamai_layer_half_w(space, 0, data >> 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::yarunara_layer_half2_w)
|
||||
{
|
||||
hnoridur_layer_half2_w(space, 0, data >> 1);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( cdracula_mem_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x0000, 0xbfff ) AM_ROM
|
||||
AM_RANGE( 0xc000, 0xffff ) AM_RAM
|
||||
@ -537,13 +527,7 @@ static ADDRESS_MAP_START( hanamai_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x6c, 0x6c ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits)
|
||||
AM_RANGE( 0x6d, 0x6d ) AM_WRITE(dynax_blit_palette23_w) //
|
||||
AM_RANGE( 0x6e, 0x6e ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x70, 0x70 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
|
||||
AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x72, 0x72 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x73, 0x73 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
|
||||
AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW
|
||||
AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8912_device, address_data_w) // AY8912
|
||||
// AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller
|
||||
@ -584,12 +568,8 @@ static ADDRESS_MAP_START( hnoridur_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x55, 0x55 ) AM_WRITENOP // ? VBlank IRQ Ack
|
||||
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ?
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
@ -601,14 +581,14 @@ WRITE8_MEMBER(dynax_state::hjingi_bank_w)
|
||||
m_hnoridur_bank = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::hjingi_lockout_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::hjingi_lockout_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0, (~data) & 0x01);
|
||||
machine().bookkeeping().coin_lockout_w(0, !state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::hjingi_hopper_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::hjingi_hopper_w)
|
||||
{
|
||||
m_hopper = data & 0x01;
|
||||
m_hopper = state;
|
||||
}
|
||||
|
||||
uint8_t dynax_state::hjingi_hopper_bit()
|
||||
@ -672,16 +652,10 @@ static ADDRESS_MAP_START( hjingi_io_map, AS_IO, 8, dynax_state )
|
||||
|
||||
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // Blitter Busy
|
||||
AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // Flip screen, layer half select, etc.
|
||||
|
||||
AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x72, 0x72 ) AM_WRITE(hjingi_hopper_w) // Hopper
|
||||
AM_RANGE( 0x73, 0x73 ) AM_WRITE(hjingi_lockout_w) // Coin Lockout
|
||||
AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counters, Hopper, Coin Lockout
|
||||
|
||||
AM_RANGE( 0x80, 0x80 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
|
||||
ADDRESS_MAP_END
|
||||
@ -760,14 +734,9 @@ WRITE8_MEMBER(dynax_state::yarunara_rombank_w)
|
||||
m_hnoridur_bank = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::yarunara_flipscreen_w)
|
||||
WRITE8_MEMBER(dynax_state::yarunara_mainlatch_w)
|
||||
{
|
||||
dynax_flipscreen_w(space, 0, BIT(data, 1));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::yarunara_flipscreen_inv_w)
|
||||
{
|
||||
dynax_flipscreen_w(space, 0, !BIT(data, 1));
|
||||
m_mainlatch->write_bit(offset, BIT(data, 1));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::yarunara_blit_romregion_w)
|
||||
@ -799,12 +768,7 @@ static ADDRESS_MAP_START( yarunara_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x4b, 0x4b ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT("DSW0") // DSW 1
|
||||
AM_RANGE( 0x4f, 0x4f ) AM_READ_PORT("DSW1") // DSW 2
|
||||
AM_RANGE( 0x50, 0x50 ) AM_WRITE(yarunara_flipscreen_w)
|
||||
AM_RANGE( 0x51, 0x51 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x52, 0x52 ) AM_WRITE(yarunara_layer_half2_w) //
|
||||
// 53 ?
|
||||
// 54 ?
|
||||
AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x50, 0x57 ) AM_WRITE(yarunara_mainlatch_w)
|
||||
AM_RANGE( 0x68, 0x68 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
|
||||
AM_RANGE( 0x69, 0x69 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
|
||||
AM_RANGE( 0x6a, 0x6a ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes
|
||||
@ -845,12 +809,8 @@ static ADDRESS_MAP_START( mcnpshnt_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x54, 0x54 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
|
||||
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ?
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -872,12 +832,7 @@ static ADDRESS_MAP_START( sprtmtch_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) //
|
||||
AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
// AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
|
||||
AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x44, 0x44 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
|
||||
AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -888,12 +843,7 @@ static ADDRESS_MAP_START( mjfriday_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x01, 0x01 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits)
|
||||
AM_RANGE( 0x02, 0x02 ) AM_WRITE(dynax_rombank_w) // BANK ROM Select
|
||||
AM_RANGE( 0x03, 0x03 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x10, 0x11 ) AM_WRITE(mjdialq2_blit_dest_w) // Destination Layer
|
||||
AM_RANGE( 0x12, 0x12 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
|
||||
AM_RANGE( 0x13, 0x13 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x14, 0x14 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x15, 0x15 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x16, 0x17 ) AM_WRITE(mjdialq2_layer_enable_w) // Layers Enable
|
||||
AM_RANGE( 0x10, 0x17 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x41, 0x47 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
// AM_RANGE( 0x50, 0x50 ) AM_WRITENOP // CRT Controller
|
||||
// AM_RANGE( 0x51, 0x51 ) AM_WRITENOP // CRT Controller
|
||||
@ -924,11 +874,8 @@ static ADDRESS_MAP_START( nanajign_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x16, 0x16 ) AM_READ_PORT("DSW2") // DSW3
|
||||
// AM_RANGE( 0x20, 0x21 ) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE( 0x31, 0x37 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter
|
||||
AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x51, 0x51 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x52, 0x52 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counter
|
||||
AM_RANGE( 0x50, 0x57 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y
|
||||
AM_RANGE( 0x6a, 0x6a ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
|
||||
@ -988,11 +935,7 @@ static ADDRESS_MAP_START( jantouki_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x54, 0x54 ) AM_READ_PORT("COINS") // Coins
|
||||
AM_RANGE( 0x55, 0x55 ) AM_READ_PORT("DSW0") // DSW1
|
||||
AM_RANGE( 0x56, 0x56 ) AM_READ_PORT("DSW1") // DSW2
|
||||
AM_RANGE( 0x58, 0x58 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter
|
||||
AM_RANGE( 0x5b, 0x5b ) AM_WRITE(dynax_blit2_palbank_w) // Layers Palettes (High Bit)
|
||||
AM_RANGE( 0x5d, 0x5d ) AM_WRITE(dynax_blit_palbank_w) //
|
||||
AM_RANGE( 0x5e, 0x5e ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x5f, 0x5f ) AM_WRITE(jantouki_blitter2_ack_w) // Blitter 2 IRQ Ack
|
||||
AM_RANGE( 0x58, 0x5f ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_blit_palette67_w) // Layers Palettes (Low Bits)
|
||||
AM_RANGE( 0x61, 0x61 ) AM_WRITE(dynax_blit_palette45_w) //
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_blit_palette23_w) //
|
||||
@ -1076,8 +1019,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w) //?
|
||||
// AM_RANGE( 0x20, 0x20 ) AM_WRITENOP // CRT Controller
|
||||
// AM_RANGE( 0x21, 0x21 ) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
|
||||
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y
|
||||
// AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
|
||||
@ -1090,10 +1032,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r) // DSW8 x 4
|
||||
AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("SW1") // DSW2
|
||||
AM_RANGE( 0xa1, 0xa7 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0xc2, 0xc2 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
// c3,c4 seem to be related to wrap around enable
|
||||
AM_RANGE( 0xc0, 0xc7 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
|
||||
AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
|
||||
AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes
|
||||
@ -1121,11 +1060,7 @@ static ADDRESS_MAP_START( mjembase_io_map, AS_IO, 8, dynax_state )
|
||||
// AM_RANGE( 0x40, 0x40 ) AM_WRITENOP // CRT Controller
|
||||
// AM_RANGE( 0x41, 0x41 ) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE( 0x61, 0x67 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
AM_RANGE( 0x80, 0x80 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x81, 0x81 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x82, 0x82 ) AM_WRITE(hnoridur_layer_half2_w) //
|
||||
AM_RANGE( 0x83, 0x83 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
|
||||
AM_RANGE( 0x84, 0x84 ) AM_WRITE(dynax_coincounter_1_w) //
|
||||
AM_RANGE( 0x80, 0x87 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0xa0, 0xa0 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
|
||||
AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
|
||||
AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(mjembase_blit_dest_w) // Destination Layer
|
||||
@ -1351,15 +1286,15 @@ void dynax_state::tenkai_show_6c()
|
||||
// popmessage("%02x %02x", m_tenkai_6c, m_tenkai_70);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::tenkai_6c_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::tenkai_6c_w)
|
||||
{
|
||||
m_tenkai_6c = data;
|
||||
m_tenkai_6c = state;
|
||||
tenkai_show_6c();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::tenkai_70_w)
|
||||
WRITE_LINE_MEMBER(dynax_state::tenkai_70_w)
|
||||
{
|
||||
m_tenkai_70 = data;
|
||||
m_tenkai_70 = state;
|
||||
tenkai_show_6c();
|
||||
}
|
||||
|
||||
@ -1374,6 +1309,11 @@ WRITE8_MEMBER(dynax_state::tenkai_blit_romregion_w)
|
||||
logerror("%04x: unmapped romregion=%02X\n", space.device().safe_pc(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::tenkai_mainlatch_w)
|
||||
{
|
||||
m_mainlatch->write_bit(offset >> 2, BIT(data, 1));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x0000, 0x5fff ) AM_ROM
|
||||
AM_RANGE( 0x6000, 0x6fff ) AM_RAM
|
||||
@ -1390,12 +1330,7 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x10050, 0x10050 ) AM_WRITE(tenkai_priority_w) // layer priority and enable
|
||||
AM_RANGE( 0x10054, 0x10054 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x10058, 0x10058 ) AM_WRITE(tenkai_blit_romregion_w) // Blitter ROM bank
|
||||
AM_RANGE( 0x10060, 0x10060 ) AM_WRITE(yarunara_flipscreen_inv_w) // Flip Screen
|
||||
AM_RANGE( 0x10064, 0x10064 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
|
||||
AM_RANGE( 0x10068, 0x10068 ) AM_WRITE(yarunara_layer_half2_w) //
|
||||
AM_RANGE( 0x1006c, 0x1006c ) AM_WRITE(tenkai_6c_w) // ?
|
||||
AM_RANGE( 0x10070, 0x10070 ) AM_WRITE(tenkai_70_w) // ?
|
||||
AM_RANGE( 0x1007c, 0x1007c ) AM_WRITENOP // IRQ Ack? (0,2)
|
||||
AM_RANGE( 0x10060, 0x1007f ) AM_WRITE(tenkai_mainlatch_w)
|
||||
AM_RANGE( 0x100c0, 0x100c0 ) AM_WRITE(tenkai_ipsel_w)
|
||||
AM_RANGE( 0x100c1, 0x100c1 ) AM_WRITE(tenkai_ip_w)
|
||||
AM_RANGE( 0x100c2, 0x100c3 ) AM_READ(tenkai_ip_r)
|
||||
@ -1488,18 +1423,9 @@ WRITE8_MEMBER(dynax_state::gekisha_8000_w)
|
||||
|
||||
case 0x8003: dynax_blit_backpen_w(space, offset - 0x03, data); return;
|
||||
|
||||
case 0x8010:
|
||||
case 0x8011: mjdialq2_blit_dest_w(space, offset - 0x10, data); return;
|
||||
|
||||
case 0x8012: dynax_blit_palbank_w(space, offset - 0x12, data); return;
|
||||
|
||||
case 0x8013: dynax_flipscreen_w(space, offset - 0x13, data); return;
|
||||
|
||||
case 0x8014: dynax_coincounter_0_w(space, offset - 0x14, data); return;
|
||||
case 0x8015: dynax_coincounter_1_w(space, offset - 0x15, data); return;
|
||||
|
||||
case 0x8016:
|
||||
case 0x8017: mjdialq2_layer_enable_w(space, offset - 0x16, data); return;
|
||||
case 0x8010: case 0x8011: case 0x8012: case 0x8013:
|
||||
case 0x8014: case 0x8015: case 0x8016: case 0x8017:
|
||||
m_mainlatch->write_bit(offset & 7, BIT(data, 0)); return;
|
||||
|
||||
case 0x8020:
|
||||
case 0x8021: gekisha_hopper_w(space, offset - 0x20, data); return;
|
||||
@ -1569,9 +1495,7 @@ static ADDRESS_MAP_START( cdracula_io_map, AS_IO, 8, dynax_state )
|
||||
AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) //
|
||||
AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
|
||||
AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
|
||||
AM_RANGE( 0x44, 0x44 ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack
|
||||
AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
|
||||
AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x60, 0x60 ) AM_READ_PORT("DSW2")
|
||||
AM_RANGE( 0x61, 0x61 ) AM_READ_PORT("DSW1")
|
||||
AM_RANGE( 0x6b, 0x6b ) AM_WRITE(cdracula_sound_rombank_w) // OKI Bank
|
||||
@ -4381,6 +4305,11 @@ static MACHINE_CONFIG_START( cdracula )
|
||||
|
||||
// MCFG_NVRAM_ADD_0FILL("nvram") // no battery
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(58.56)
|
||||
@ -4420,6 +4349,16 @@ static MACHINE_CONFIG_START( hanamai )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT // MSM5205 reset
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(dynax_state, adpcm_reset_kludge_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counters
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) //
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit)
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4474,6 +4413,16 @@ static MACHINE_CONFIG_START( hnoridur )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC25
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC61
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4521,6 +4470,18 @@ static MACHINE_CONFIG_START( hjingi )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, hjingi_hopper_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, hjingi_lockout_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4568,6 +4529,13 @@ static MACHINE_CONFIG_START( sprtmtch )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // UF12 on Intergirl
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4613,6 +4581,16 @@ static MACHINE_CONFIG_START( mjfriday )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4677,6 +4655,8 @@ static MACHINE_CONFIG_DERIVED( yarunara, hnoridur )
|
||||
|
||||
MCFG_NVRAM_REPLACE_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_REMOVE("outlatch") // ???
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 8, 256-1-8-1)
|
||||
|
||||
@ -4752,6 +4732,13 @@ static MACHINE_CONFIG_START( jantouki )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counter
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, blit2_palbank_w)) // Layers Palettes (High Bit)
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, jantouki_blitter2_ack_w)) // Blitter 2 IRQ Ack
|
||||
|
||||
/* video hardware */
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette
|
||||
@ -4830,6 +4817,12 @@ static MACHINE_CONFIG_DERIVED( mjelctrn, hnoridur )
|
||||
MCFG_CPU_IO_MAP(mjelctrn_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */
|
||||
|
||||
MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
|
||||
// Q3, Q4 seem to be related to wrap around enable
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(dynax_state,mjelctrn)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -4839,6 +4832,13 @@ static MACHINE_CONFIG_DERIVED( mjembase, hnoridur )
|
||||
MCFG_CPU_IO_MAP(mjembase_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */
|
||||
|
||||
MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(dynax_state,mjembase)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -4954,6 +4954,14 @@ static MACHINE_CONFIG_START( tenkai )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 10C on Ougon no Pai
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, tenkai_6c_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, tenkai_70_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // IRQ Ack?
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -4989,6 +4997,11 @@ static MACHINE_CONFIG_DERIVED( majrjhdx, tenkai )
|
||||
MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mjreach, tenkai )
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // not inverted
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
Mahjong Gekisha
|
||||
***************************************************************************/
|
||||
@ -5025,6 +5038,16 @@ static MACHINE_CONFIG_START( gekisha )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -6834,11 +6857,6 @@ ROM_START( mjreach )
|
||||
ROM_RELOAD( 0x80000, 0x80000 )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(dynax_state,mjreach)
|
||||
{
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x10060, 0x10060, write8_delegate(FUNC(dynax_state::yarunara_flipscreen_w),this));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Mahjong Tenkaigen
|
||||
@ -7512,7 +7530,7 @@ GAME( 1991, tenkaicb, tenkai, tenkai, tenkai, dynax_state, 0, ROT0,
|
||||
GAME( 1991, tenkaie, tenkai, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Tenkaigen (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, ougonpai, 0, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Ougon No Pai", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, ougonpaib,ougonpai, tenkai, tenkai, dynax_state, 0, ROT0, "bootleg", "Mahjong Ougon No Pai (bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, mjreach, 0, tenkai, mjreach, dynax_state, mjreach, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, mjreach, 0, mjreach, mjreach, dynax_state, 0, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, cdracula, 0, cdracula, cdracula, dynax_state, 0, ROT0, "Yun Sung (Escape license)","Castle Of Dracula", MACHINE_SUPPORTS_SAVE ) // not a dynax board
|
||||
GAME( 1995, shpeng, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "WSAC Systems?", "Sea Hunter Penguin", MACHINE_NO_COCKTAIL | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // not a dynax board. proms?
|
||||
GAME( 1995, intrgirl, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "Barko", "Intergirl", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // not a dynax board.
|
||||
|
@ -592,7 +592,7 @@ CUSTOM_INPUT_MEMBER(equites_state::gekisou_unknown_bit_r)
|
||||
|
||||
WRITE16_MEMBER(equites_state::gekisou_unknown_bit_w)
|
||||
{
|
||||
// data bit is A16 (offset)
|
||||
// data bit is A17 (offset)
|
||||
m_gekisou_unknown_bit = (offset == 0) ? 0 : 1;;
|
||||
}
|
||||
|
||||
@ -605,6 +605,12 @@ READ16_MEMBER(equites_state::equites_spriteram_kludge_r)
|
||||
return m_spriteram[0];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(equites_state::mainlatch_w)
|
||||
{
|
||||
// data bit is A17; address bits are A16(?)-A14 (offset is shifted by 1 here)
|
||||
m_mainlatch->write_bit((offset & 0xe000) >> 13, BIT(offset, 16));
|
||||
}
|
||||
|
||||
READ8_MEMBER(equites_state::mcu_ram_r)
|
||||
{
|
||||
if (m_fakemcu == nullptr)
|
||||
@ -621,20 +627,18 @@ WRITE8_MEMBER(equites_state::mcu_ram_w)
|
||||
m_mcuram[offset] = data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(equites_state::mcu_start_w)
|
||||
WRITE_LINE_MEMBER(equites_state::mcu_start_w)
|
||||
{
|
||||
// data bit is A16 (offset)
|
||||
if (m_fakemcu == nullptr)
|
||||
m_alpha_8201->mcu_start_w(offset != 0);
|
||||
m_alpha_8201->mcu_start_w(state != 0);
|
||||
else
|
||||
m_fakemcu->set_input_line(INPUT_LINE_HALT, (offset != 0) ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_fakemcu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(equites_state::mcu_switch_w)
|
||||
WRITE_LINE_MEMBER(equites_state::mcu_switch_w)
|
||||
{
|
||||
// data bit is A16 (offset)
|
||||
if (m_fakemcu == nullptr)
|
||||
m_alpha_8201->bus_dir_w(offset == 0);
|
||||
m_alpha_8201->bus_dir_w(state == 0);
|
||||
}
|
||||
|
||||
|
||||
@ -653,9 +657,7 @@ static ADDRESS_MAP_START( equites_map, AS_PROGRAM, 16, equites_state )
|
||||
AM_RANGE(0x100000, 0x1001ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x140000, 0x1407ff) AM_READWRITE8(mcu_ram_r, mcu_ram_w, 0x00ff)
|
||||
AM_RANGE(0x180000, 0x180001) AM_READ_PORT("IN1") AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
|
||||
AM_RANGE(0x184000, 0x184001) AM_SELECT(0x020000) AM_WRITE(equites_flipw_w)
|
||||
AM_RANGE(0x188000, 0x188001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w)
|
||||
AM_RANGE(0x18c000, 0x18c001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w)
|
||||
AM_RANGE(0x180000, 0x180001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0xff00)
|
||||
AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("IN0") AM_WRITE(equites_scrollreg_w)
|
||||
AM_RANGE(0x380000, 0x380001) AM_WRITE8(equites_bgcolor_w, 0xff00)
|
||||
AM_RANGE(0x780000, 0x780001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
|
||||
@ -675,10 +677,7 @@ static ADDRESS_MAP_START( splndrbt_map, AS_PROGRAM, 16, equites_state )
|
||||
AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_bgcolor_w, 0xff00) // note: addressmask does not apply here
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_flipb_w, 0x00ff)
|
||||
AM_RANGE(0x0c4000, 0x0c4001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w)
|
||||
AM_RANGE(0x0c8000, 0x0c8001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w)
|
||||
AM_RANGE(0x0cc000, 0x0cc001) AM_SELECT(0x020000) AM_WRITE(splndrbt_selchar_w)
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0x00ff)
|
||||
AM_RANGE(0x100000, 0x100001) AM_WRITE(splndrbt_bg_scrollx_w)
|
||||
AM_RANGE(0x140000, 0x140001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
|
||||
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(splndrbt_bg_scrolly_w)
|
||||
@ -1130,7 +1129,6 @@ void equites_state::machine_start()
|
||||
|
||||
void equites_state::machine_reset()
|
||||
{
|
||||
flip_screen_set(0);
|
||||
}
|
||||
|
||||
|
||||
@ -1141,6 +1139,11 @@ static MACHINE_CONFIG_START( equites )
|
||||
MCFG_CPU_PROGRAM_MAP(equites_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, equites_scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, flip_screen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, mcu_switch_w))
|
||||
|
||||
MCFG_FRAGMENT_ADD(common_sound)
|
||||
|
||||
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!)
|
||||
@ -1186,6 +1189,12 @@ static MACHINE_CONFIG_START( splndrbt )
|
||||
MCFG_CPU_PROGRAM_MAP(splndrbt_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, splndrbt_scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(equites_state, flip_screen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, mcu_start_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_switch_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, splndrbt_selchar_w))
|
||||
|
||||
MCFG_FRAGMENT_ADD(common_sound)
|
||||
|
||||
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!)
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "includes/fastfred.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -143,9 +144,9 @@ MACHINE_START_MEMBER(fastfred_state,imago)
|
||||
m_gfxdecode->gfx(1)->set_source(m_imago_sprites);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fastfred_state::imago_dma_irq_w)
|
||||
WRITE_LINE_MEMBER(fastfred_state::imago_dma_irq_w)
|
||||
{
|
||||
m_maincpu->set_input_line(0, data & 1 ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fastfred_state::imago_sprites_bank_w)
|
||||
@ -176,9 +177,9 @@ READ8_MEMBER(fastfred_state::imago_sprites_offset_r)
|
||||
return 0xff; //not really used
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fastfred_state::nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(fastfred_state::nmi_mask_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
m_nmi_mask = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fastfred_state::sound_nmi_mask_w)
|
||||
@ -196,15 +197,7 @@ static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8, fastfred_state )
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS") AM_WRITEONLY AM_SHARE("bgcolor")
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP
|
||||
AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
|
||||
AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
|
||||
AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w)
|
||||
AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
|
||||
AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
|
||||
AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w)
|
||||
AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w)
|
||||
AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -221,16 +214,7 @@ static ADDRESS_MAP_START( jumpcoas_map, AS_PROGRAM, 8, fastfred_state )
|
||||
AM_RANGE(0xe801, 0xe801) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0xe802, 0xe802) AM_READ_PORT("BUTTONS")
|
||||
AM_RANGE(0xe803, 0xe803) AM_READ_PORT("JOYS")
|
||||
AM_RANGE(0xf000, 0xf000) AM_WRITENOP // Unused, but initialized
|
||||
AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
|
||||
AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
|
||||
AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w)
|
||||
AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
|
||||
AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
|
||||
AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w)
|
||||
AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w)
|
||||
AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
//AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) // Why doesn't this work???
|
||||
AM_RANGE(0xf800, 0xf801) AM_READNOP AM_DEVWRITE("ay8910.1", ay8910_device, address_data_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -250,14 +234,8 @@ static ADDRESS_MAP_START( imago_map, AS_PROGRAM, 8, fastfred_state )
|
||||
AM_RANGE(0xd860, 0xd8ff) AM_RAM // Unused, but initialized
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS")
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP // writes 1 when level starts, 0 when game over
|
||||
AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
|
||||
AM_RANGE(0xf004, 0xf004) AM_WRITE(imago_dma_irq_w)
|
||||
AM_RANGE(0xf005, 0xf005) AM_WRITE(imago_charbank_w)
|
||||
AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
|
||||
AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xf400, 0xf400) AM_WRITENOP // writes 0 or 2
|
||||
AM_RANGE(0xf401, 0xf401) AM_WRITE(imago_sprites_bank_w)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READNOP AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
@ -659,6 +637,15 @@ static MACHINE_CONFIG_START( fastfred )
|
||||
MCFG_CPU_PROGRAM_MAP(sound_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(fastfred_state, sound_timer_irq, 4*60)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // "Control Signal Latch" at D10
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(fastfred_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(fastfred_state, colorbank1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(fastfred_state, colorbank2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, charbank1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, charbank2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(fastfred_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(fastfred_state, flip_screen_y_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -711,6 +698,11 @@ static MACHINE_CONFIG_DERIVED( imago, fastfred )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(imago_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // writes 1 when level starts, 0 when game over
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, imago_dma_irq_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, imago_charbank_w))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(fastfred_state,imago)
|
||||
|
||||
/* video hardware */
|
||||
|
@ -33,6 +33,7 @@ but requires a special level III player for proper control. Video: CAV. Audio: A
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "sound/tms5220.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/ldvp931.h"
|
||||
#include "machine/6532riot.h"
|
||||
#include "machine/gen_latch.h"
|
||||
@ -77,10 +78,11 @@ public:
|
||||
DECLARE_READ8_MEMBER(firefox_disc_status_r);
|
||||
DECLARE_READ8_MEMBER(firefox_disc_data_r);
|
||||
DECLARE_WRITE8_MEMBER(firefox_disc_read_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_disc_lock_w);
|
||||
DECLARE_WRITE8_MEMBER(audio_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_disc_reset_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_disc_write_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(firefox_disc_lock_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(audio_enable_left_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(audio_enable_right_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(firefox_disc_reset_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(firefox_disc_write_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_disc_data_w);
|
||||
DECLARE_WRITE8_MEMBER(tileram_w);
|
||||
DECLARE_WRITE8_MEMBER(tile_palette_w);
|
||||
@ -88,21 +90,23 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(firefox_objram_bank_w);
|
||||
DECLARE_READ8_MEMBER(sound_to_main_r);
|
||||
DECLARE_WRITE8_MEMBER(main_to_sound_w);
|
||||
DECLARE_WRITE8_MEMBER(sound_reset_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
|
||||
DECLARE_READ8_MEMBER(main_to_sound_r);
|
||||
DECLARE_WRITE8_MEMBER(sound_to_main_w);
|
||||
DECLARE_READ8_MEMBER(adc_r);
|
||||
DECLARE_WRITE8_MEMBER(adc_select_w);
|
||||
DECLARE_WRITE8_MEMBER(nvram_w);
|
||||
DECLARE_READ8_MEMBER(nvram_r);
|
||||
DECLARE_WRITE8_MEMBER(novram_recall_w);
|
||||
DECLARE_WRITE8_MEMBER(novram_store_w);
|
||||
DECLARE_WRITE8_MEMBER(rom_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(main_irq_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(main_firq_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(self_reset_w);
|
||||
DECLARE_WRITE8_MEMBER(led_w);
|
||||
DECLARE_WRITE8_MEMBER(firefox_coin_counter_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(led3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(mainflag_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(soundflag_r);
|
||||
DECLARE_READ8_MEMBER(riot_porta_r);
|
||||
@ -180,25 +184,30 @@ WRITE8_MEMBER(firefox_state::firefox_disc_read_w)
|
||||
m_n_disc_read_data = m_laserdisc->data_r();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::firefox_disc_lock_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::firefox_disc_lock_w)
|
||||
{
|
||||
m_n_disc_lock = data & 0x80;
|
||||
m_n_disc_lock = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::audio_enable_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::audio_enable_left_w)
|
||||
{
|
||||
m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0);
|
||||
m_laserdisc->set_output_gain(0, state ? 1.0 : 0.0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::firefox_disc_reset_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::audio_enable_right_w)
|
||||
{
|
||||
m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_laserdisc->set_output_gain(1, state ? 1.0 : 0.0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::firefox_disc_reset_w)
|
||||
{
|
||||
m_laserdisc->reset_w(state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
/* active low on dbb7 */
|
||||
WRITE8_MEMBER(firefox_state::firefox_disc_write_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::firefox_disc_write_w)
|
||||
{
|
||||
if ( ( data & 0x80 ) == 0 )
|
||||
if (state == 0)
|
||||
m_laserdisc->data_w(m_n_disc_data);
|
||||
}
|
||||
|
||||
@ -339,10 +348,10 @@ WRITE8_MEMBER(firefox_state::main_to_sound_w)
|
||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::sound_reset_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::sound_reset_w)
|
||||
{
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
|
||||
if ((data & 0x80) != 0)
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
if (state != 0)
|
||||
m_sound_to_main_flag = m_main_to_sound_flag = 0;
|
||||
}
|
||||
|
||||
@ -440,18 +449,6 @@ READ8_MEMBER(firefox_state::nvram_r)
|
||||
return (m_nvram_1c->read(space, offset) << 4) | (m_nvram_1d->read(space, offset) & 0x0f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::novram_recall_w)
|
||||
{
|
||||
m_nvram_1c->recall(data & 0x80);
|
||||
m_nvram_1d->recall(data & 0x80);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::novram_store_w)
|
||||
{
|
||||
m_nvram_1c->store(data & 0x80);
|
||||
m_nvram_1d->store(data & 0x80);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -488,14 +485,34 @@ WRITE8_MEMBER(firefox_state::self_reset_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(firefox_state::led_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::led0_w)
|
||||
{
|
||||
output().set_led_value(offset, ( data & 0x80 ) == 0 );
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(firefox_state::firefox_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(firefox_state::led1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 0x80 );
|
||||
output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led2_w)
|
||||
{
|
||||
output().set_led_value(2, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::led3_w)
|
||||
{
|
||||
output().set_led_value(3, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(firefox_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -549,15 +566,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, firefox_state )
|
||||
AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_read_w) /* DSKREAD */
|
||||
AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE(adc_select_w) /* ADCSTART */
|
||||
AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE(self_reset_w) /* AMUCK */
|
||||
AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE(novram_recall_w) /* LATCH0 -> NVRECALL */
|
||||
AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE(sound_reset_w) /* LATCH0 -> RSTSOUND */
|
||||
AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE(novram_store_w) /* LATCH0 -> NVRSTORE */
|
||||
AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_lock_w) /* LATCH0 -> LOCK */
|
||||
AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE(audio_enable_w) /* LATCH0 -> SWDSKR, SWDSKL */
|
||||
AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_reset_w) /* LATCH0 -> RSTDSK */
|
||||
AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_write_w) /* LATCH0 -> WRDSK */
|
||||
AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE(firefox_coin_counter_w) /* LATCH1 -> COIN COUNTERR, COUNTERL */
|
||||
AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE(led_w) /* LATCH1 -> LEDs */
|
||||
AM_RANGE(0x4280, 0x4287) AM_MIRROR(0x0040) AM_DEVWRITE("latch0", ls259_device, write_d7)
|
||||
AM_RANGE(0x4288, 0x428f) AM_MIRROR(0x0040) AM_DEVWRITE("latch1", ls259_device, write_d7)
|
||||
AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE(rom_bank_w) /* WRTREG */
|
||||
AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE(main_to_sound_w) /* WRSOUND */
|
||||
AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_data_w) /* DSKLATCH */
|
||||
@ -723,6 +733,26 @@ static MACHINE_CONFIG_START( firefox )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(60000))
|
||||
|
||||
MCFG_DEVICE_ADD("latch0", LS259, 0) // 7F
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, recall)) // NVRECALL
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, recall))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, sound_reset_w)) // RSTSOUND
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, store)) // NVRSTORE
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, store))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(firefox_state, firefox_disc_lock_w)) // LOCK
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, audio_enable_right_w)) // SWDSKR
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, audio_enable_left_w)) // SWDSKL
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, firefox_disc_reset_w)) // RSTDSK
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, firefox_disc_write_w)) // WRDSK
|
||||
|
||||
MCFG_DEVICE_ADD("latch1", LS259, 0) // 1F
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(firefox_state, coin_counter_right_w)) // COIN COUNTERR
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, coin_counter_left_w)) // COIN COUNTERL
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, led0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, led1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, led2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, led3_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_TIME_INIT(attotime::from_hz((double)MASTER_XTAL/8/16/16/16/16))
|
||||
|
||||
|
@ -20,6 +20,7 @@ TODO:
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/74259.h"
|
||||
#include "screen.h"
|
||||
|
||||
#define MASTER_CLOCK XTAL_12_096MHz
|
||||
@ -42,6 +43,7 @@ public:
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
m_outlatch(*this, "outlatch"),
|
||||
m_playfield_ram(*this, "playfield_ram") { }
|
||||
|
||||
/* devices */
|
||||
@ -49,6 +51,7 @@ public:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<f9334_device> m_outlatch;
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_playfield_ram;
|
||||
@ -79,6 +82,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(pitcher_vert_w);
|
||||
DECLARE_WRITE8_MEMBER(pitcher_horz_w);
|
||||
DECLARE_WRITE8_MEMBER(misc_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(lamp_w);
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(get_memory_offset);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
@ -273,29 +277,13 @@ WRITE8_MEMBER(flyball_state::pitcher_horz_w)
|
||||
|
||||
WRITE8_MEMBER(flyball_state::misc_w)
|
||||
{
|
||||
int bit = ~data & 1;
|
||||
// address and data lines passed through inverting buffers
|
||||
m_outlatch->write_d0(space, ~offset, ~data);
|
||||
}
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
output().set_led_value(0, bit);
|
||||
break;
|
||||
case 1:
|
||||
/* crowd very loud */
|
||||
break;
|
||||
case 2:
|
||||
/* footstep off-on */
|
||||
break;
|
||||
case 3:
|
||||
/* crowd off-on */
|
||||
break;
|
||||
case 4:
|
||||
/* crowd soft-loud */
|
||||
break;
|
||||
case 5:
|
||||
/* bat hit */
|
||||
break;
|
||||
}
|
||||
WRITE_LINE_MEMBER(flyball_state::lamp_w)
|
||||
{
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
|
||||
@ -468,6 +456,14 @@ static MACHINE_CONFIG_START( flyball )
|
||||
MCFG_CPU_PROGRAM_MAP(flyball_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", flyball_state, nmi_line_pulse)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", F9334, 0) // F7
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(flyball_state, lamp_w)) // 1 player lamp
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // crowd very loud
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // footstep off-on
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // crowd off-on
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // crowd soft-loud
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // bat hit
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -45,6 +45,7 @@ TODO:
|
||||
#include "includes/freekick.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/mc8123.h"
|
||||
#include "sound/sn76496.h"
|
||||
@ -58,27 +59,38 @@ TODO:
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(freekick_state::flipscreen_xy_w)
|
||||
WRITE_LINE_MEMBER(freekick_state::flipscreen_x_w)
|
||||
{
|
||||
/* flip Y/X could be the other way round... */
|
||||
if (offset)
|
||||
flip_screen_y_set(~data & 1);
|
||||
else
|
||||
flip_screen_x_set(~data & 1);
|
||||
flip_screen_x_set(!state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(freekick_state::flipscreen_w)
|
||||
WRITE_LINE_MEMBER(freekick_state::flipscreen_y_w)
|
||||
{
|
||||
flip_screen_set(~data & 1);
|
||||
flip_screen_y_set(!state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(freekick_state::flipscreen_w)
|
||||
{
|
||||
flip_screen_set(!state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(freekick_state::coin_w)
|
||||
WRITE_LINE_MEMBER(freekick_state::coin1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 1);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(freekick_state::spinner_select_w)
|
||||
WRITE_LINE_MEMBER(freekick_state::coin2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(freekick_state::spinner_select_w)
|
||||
{
|
||||
m_spinner = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(freekick_state::gigas_spinner_select_w)
|
||||
{
|
||||
m_spinner = data & 1;
|
||||
}
|
||||
@ -95,9 +107,9 @@ WRITE8_MEMBER(freekick_state::pbillrd_bankswitch_w)
|
||||
m_bank1d->set_entry(data & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(freekick_state::nmi_enable_w)
|
||||
WRITE_LINE_MEMBER(freekick_state::nmi_enable_w)
|
||||
{
|
||||
m_nmi_en = data & 1;
|
||||
m_nmi_en = state;
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(freekick_state::freekick_irqgen)
|
||||
@ -184,10 +196,8 @@ static ADDRESS_MAP_START( omega_map, AS_PROGRAM, 8, freekick_state )
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xd900, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
|
||||
AM_RANGE(0xe005, 0xe005) AM_WRITENOP
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ?
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
|
||||
@ -205,9 +215,7 @@ static ADDRESS_MAP_START( pbillrd_map, AS_PROGRAM, 8, freekick_state )
|
||||
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xd900, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xe000, 0xe001) AM_WRITE(flipscreen_xy_w)
|
||||
AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
|
||||
AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITE(pbillrd_bankswitch_w)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
|
||||
@ -229,13 +237,11 @@ static ADDRESS_MAP_START( freekick_map, AS_PROGRAM, 8, freekick_state )
|
||||
AM_RANGE(0xe800, 0xe8ff) AM_RAM AM_SHARE("spriteram") // sprites
|
||||
AM_RANGE(0xec00, 0xec03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
|
||||
AM_RANGE(0xf000, 0xf003) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xf802, 0xf802) AM_READNOP //MUST return bit 0 = 0, otherwise game resets
|
||||
AM_RANGE(0xf803, 0xf803) AM_READ(spinner_r)
|
||||
AM_RANGE(0xf802, 0xf803) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xf804, 0xf804) AM_WRITE(nmi_enable_w)
|
||||
AM_RANGE(0xf806, 0xf806) AM_WRITE(spinner_select_w)
|
||||
AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xfc00, 0xfc00) AM_DEVWRITE("sn1", sn76489a_device, write)
|
||||
AM_RANGE(0xfc01, 0xfc01) AM_DEVWRITE("sn2", sn76489a_device, write)
|
||||
AM_RANGE(0xfc02, 0xfc02) AM_DEVWRITE("sn3", sn76489a_device, write)
|
||||
@ -248,10 +254,8 @@ static ADDRESS_MAP_START( gigas_map, AS_PROGRAM, 8, freekick_state )
|
||||
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xd900, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
|
||||
AM_RANGE(0xe005, 0xe005) AM_WRITENOP
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ?
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
|
||||
@ -263,19 +267,19 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( omega_io_map, AS_IO, 8, freekick_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW3")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( gigas_io_map, AS_IO, 8, freekick_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( oigas_io_map, AS_IO, 8, freekick_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3
|
||||
AM_RANGE(0x02, 0x02) AM_READ(oigas_2_r)
|
||||
AM_RANGE(0x03, 0x03) AM_READ(oigas_3_r)
|
||||
@ -682,7 +686,6 @@ MACHINE_RESET_MEMBER(freekick_state,freekick)
|
||||
{
|
||||
m_romaddr = 0;
|
||||
m_spinner = 0;
|
||||
m_nmi_en = 0;
|
||||
m_ff_data = 0;
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, 0);
|
||||
@ -722,6 +725,13 @@ static MACHINE_CONFIG_START( omega )
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 3M
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_18_432MHz/3, 768/2, 0, 512/2, 263, 0+16, 224+16) // unknown divisor
|
||||
@ -755,6 +765,11 @@ static MACHINE_CONFIG_START( base )
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_12MHz/2, 768/2, 0, 512/2, 263, 0+16, 224+16)
|
||||
@ -781,8 +796,11 @@ static MACHINE_CONFIG_START( base )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( pbillrd, base )
|
||||
MCFG_DEVICE_MODIFY("outlatch") // 10K
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(freekick_state, flipscreen_y_w))
|
||||
/* flip Y/X could be the other way round... */
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_MACHINE_START_OVERRIDE(freekick_state,pbillrd)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
|
||||
MACHINE_CONFIG_END
|
||||
@ -802,6 +820,10 @@ static MACHINE_CONFIG_DERIVED( freekick, base )
|
||||
MCFG_CPU_PROGRAM_MAP(freekick_map)
|
||||
MCFG_CPU_IO_MAP(freekick_io_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch") // 5C
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(freekick_state, spinner_select_w))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
|
||||
|
||||
@ -828,6 +850,10 @@ static MACHINE_CONFIG_DERIVED( gigas, base )
|
||||
MCFG_CPU_IO_MAP(gigas_io_map)
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
|
||||
|
||||
@ -846,6 +872,10 @@ static MACHINE_CONFIG_DERIVED( gigasm, base )
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
|
||||
|
||||
|
@ -77,6 +77,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
|
||||
#include "includes/funkybee.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -88,9 +89,14 @@ READ8_MEMBER(funkybee_state::funkybee_input_port_0_r)
|
||||
return ioport("IN0")->read();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(funkybee_state::funkybee_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(funkybee_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(funkybee_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state )
|
||||
@ -99,9 +105,7 @@ static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state )
|
||||
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(funkybee_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(funkybee_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xe000, 0xe000) AM_WRITE(funkybee_scroll_w)
|
||||
AM_RANGE(0xe800, 0xe800) AM_WRITE(funkybee_flipscreen_w)
|
||||
AM_RANGE(0xe802, 0xe803) AM_WRITE(funkybee_coin_counter_w)
|
||||
AM_RANGE(0xe805, 0xe805) AM_WRITE(funkybee_gfx_bank_w)
|
||||
AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xf000, 0xf000) AM_READNOP /* IRQ Ack */
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ(funkybee_input_port_0_r) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1")
|
||||
@ -275,10 +279,7 @@ GFXDECODE_END
|
||||
void funkybee_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_gfx_bank));
|
||||
}
|
||||
|
||||
void funkybee_state::machine_reset()
|
||||
{
|
||||
m_gfx_bank = 0;
|
||||
}
|
||||
|
||||
@ -290,6 +291,12 @@ static MACHINE_CONFIG_START( funkybee )
|
||||
MCFG_CPU_IO_MAP(io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", funkybee_state, irq0_line_hold)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(funkybee_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(funkybee_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(funkybee_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(funkybee_state, gfx_bank_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -44,19 +44,29 @@ WRITE8_MEMBER(gaelco_state::bigkarnk_sound_command_w)
|
||||
m_audiocpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gaelco_state::bigkarnk_coin_w)
|
||||
WRITE8_MEMBER(gaelco_state::output_latch_w)
|
||||
{
|
||||
switch ((offset >> 3))
|
||||
{
|
||||
case 0x00: /* Coin Lockouts */
|
||||
case 0x01:
|
||||
machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
|
||||
break;
|
||||
case 0x02: /* Coin Counters */
|
||||
case 0x03:
|
||||
machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
|
||||
break;
|
||||
}
|
||||
m_outlatch->write_bit(offset >> 3, BIT(data, 0));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gaelco_state::coin1_lockout_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gaelco_state::coin2_lockout_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gaelco_state::coin1_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gaelco_state::coin2_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gaelco_state::OKIM6295_bankswitch_w)
|
||||
@ -120,8 +130,8 @@ static ADDRESS_MAP_START( bigkarnk_map, AS_PROGRAM, 16, gaelco_state )
|
||||
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SERVICE")
|
||||
AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff) /* Coin Counters + Coin Lockout */
|
||||
AM_RANGE(0x70000e, 0x70000f) AM_WRITE8(bigkarnk_sound_command_w, 0x00ff) /* Triggers a FIRQ on the sound CPU */
|
||||
AM_RANGE(0x70000a, 0x70003b) AM_WRITE8(bigkarnk_coin_w, 0x00ff) /* Coin Counters + Coin Lockout */
|
||||
AM_RANGE(0xff8000, 0xffffff) AM_RAM /* Work RAM */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -163,6 +173,7 @@ static ADDRESS_MAP_START( squash_map, AS_PROGRAM, 16, gaelco_state )
|
||||
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff)
|
||||
AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff)
|
||||
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
|
||||
AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */
|
||||
@ -180,6 +191,7 @@ static ADDRESS_MAP_START( thoop_map, AS_PROGRAM, 16, gaelco_state )
|
||||
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff)
|
||||
AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff)
|
||||
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
|
||||
AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */
|
||||
@ -510,6 +522,11 @@ static MACHINE_CONFIG_START( bigkarnk )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -578,6 +595,12 @@ static MACHINE_CONFIG_START( squash )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -611,6 +634,12 @@ static MACHINE_CONFIG_START( thoop )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) // not inverted
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) // not inverted
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -90,7 +90,7 @@ static ADDRESS_MAP_START( maniacsq_map, AS_PROGRAM, 16, gaelco2_state )
|
||||
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
|
||||
AM_RANGE(0x30004a, 0x30004b) AM_WRITENOP /* Sound muting? */
|
||||
AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */
|
||||
AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */
|
||||
AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */
|
||||
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
|
||||
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM */
|
||||
ADDRESS_MAP_END
|
||||
@ -272,10 +272,7 @@ static ADDRESS_MAP_START( bang_map, AS_PROGRAM, 16, bang_state )
|
||||
AM_RANGE(0x218008, 0x218009) AM_WRITENOP /* CLR INT Video */
|
||||
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x300002, 0x300003) AM_READNOP /* Random number generator? */
|
||||
AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */
|
||||
AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */
|
||||
AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */
|
||||
AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */
|
||||
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN")
|
||||
AM_RANGE(0x310000, 0x310001) AM_READ(p1_gun_x) AM_WRITE(bang_clr_gun_int_w) /* Gun 1P X */ /* CLR INT Gun */
|
||||
@ -324,6 +321,13 @@ static MACHINE_CONFIG_START( bang )
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
|
||||
|
||||
@ -472,7 +476,7 @@ static ADDRESS_MAP_START( alighunt_map, AS_PROGRAM, 16, gaelco2_state )
|
||||
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0") /* DSW #1 + Input 1P */
|
||||
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
|
||||
AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */
|
||||
AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */
|
||||
AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */
|
||||
AM_RANGE(0x500006, 0x500007) AM_WRITENOP /* ??? */
|
||||
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
|
||||
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
|
||||
@ -689,7 +693,7 @@ static ADDRESS_MAP_START( touchgo_map, AS_PROGRAM, 16, gaelco2_state )
|
||||
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
|
||||
AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* COINSW + Input 3P */
|
||||
AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW + Input 4P */
|
||||
AM_RANGE(0x500000, 0x50001f) AM_WRITE(touchgo_coin_w) /* Coin counters */
|
||||
AM_RANGE(0x500000, 0x500001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters */
|
||||
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
|
||||
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
|
||||
ADDRESS_MAP_END
|
||||
@ -809,6 +813,12 @@ static MACHINE_CONFIG_START( touchgo )
|
||||
MCFG_CPU_PROGRAM_MAP(touchgo_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("lscreen", gaelco2_state, irq6_line_hold)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin3_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco2_state, coin4_counter_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", 0x0400000)
|
||||
@ -1003,10 +1013,7 @@ static ADDRESS_MAP_START( snowboar_map, AS_PROGRAM, 16, gaelco2_state )
|
||||
AM_RANGE(0x212000, 0x213fff) AM_RAM /* Extra RAM */
|
||||
AM_RANGE(0x218004, 0x218009) AM_RAM AM_SHARE("vregs") /* Video Registers */
|
||||
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */
|
||||
AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */
|
||||
AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */
|
||||
AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */
|
||||
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN")
|
||||
AM_RANGE(0x310000, 0x31ffff) AM_READWRITE(snowboar_protection_r,snowboar_protection_w) AM_SHARE("snowboar_prot") /* Protection */
|
||||
@ -1054,6 +1061,13 @@ static MACHINE_CONFIG_START( snowboar )
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
|
||||
|
||||
@ -1187,9 +1201,7 @@ static ADDRESS_MAP_START( wrally2_map, AS_PROGRAM, 16, wrally2_state )
|
||||
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DIPSW #1 */
|
||||
AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* Inputs 2P + COINSW */
|
||||
AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW */
|
||||
AM_RANGE(0x400000, 0x400011) AM_WRITE(wrally2_coin_w) /* Coin Counters */
|
||||
AM_RANGE(0x400028, 0x400029) AM_WRITE(wrally2_adc_clk) /* ADCs clock-in line */
|
||||
AM_RANGE(0x400030, 0x400031) AM_WRITE(wrally2_adc_cs) /* ADCs chip select line */
|
||||
AM_RANGE(0x400000, 0x400001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters, etc. */
|
||||
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
|
||||
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
|
||||
ADDRESS_MAP_END
|
||||
@ -1293,6 +1305,12 @@ static MACHINE_CONFIG_START( wrally2 )
|
||||
MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2)
|
||||
MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_clk)) /* ADCs clock-in line */
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_cs)) /* ADCs chip select line */
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -253,16 +253,6 @@ WRITE16_MEMBER(gaelco3d_state::irq_ack_w)
|
||||
m_maincpu->set_input_line(2, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gaelco3d_state::irq_ack32_w)
|
||||
{
|
||||
if (mem_mask == 0xffff0000)
|
||||
irq_ack_w(space, offset, data, mem_mask >> 16);
|
||||
else if (ACCESSING_BITS_0_7)
|
||||
m_serial->tr_w(space, 0, data & 0x01);
|
||||
else
|
||||
logerror("%06X:irq_ack_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -290,52 +280,6 @@ READ16_MEMBER(gaelco3d_state::eeprom_data_r)
|
||||
return result;
|
||||
}
|
||||
|
||||
READ32_MEMBER(gaelco3d_state::eeprom_data32_r)
|
||||
{
|
||||
if (ACCESSING_BITS_16_31)
|
||||
return (eeprom_data_r(space, 0, mem_mask >> 16) << 16) | 0xffff;
|
||||
else if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
uint8_t data = m_serial->data_r(space,0);
|
||||
if (LOG)
|
||||
logerror("%06X:read(%02X) = %08X & %08X\n", m_maincpu->pc(), offset, data, mem_mask);
|
||||
return data | 0xffffff00;
|
||||
}
|
||||
else
|
||||
logerror("%06X:read(%02X) = mask %08X\n", m_maincpu->pc(), offset, mem_mask);
|
||||
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::eeprom_data_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_eeprom->di_write(data & 0x01);
|
||||
}
|
||||
else if (mem_mask != 0xffff)
|
||||
logerror("write mask: %08x data %08x\n", mem_mask, data);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::eeprom_clock_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::eeprom_cs_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -403,46 +347,29 @@ CUSTOM_INPUT_MEMBER(gaelco3d_state::analog_bit_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::analog_port_clock_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::analog_port_clock_w)
|
||||
{
|
||||
/* a zero/one combo is written here to clock the next analog port bit */
|
||||
if (ACCESSING_BITS_0_7)
|
||||
if (!state)
|
||||
{
|
||||
if (!(data & 0xff))
|
||||
{
|
||||
m_analog_ports[0] <<= 1;
|
||||
m_analog_ports[1] <<= 1;
|
||||
m_analog_ports[2] <<= 1;
|
||||
m_analog_ports[3] <<= 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LOG)
|
||||
logerror("%06X:analog_port_clock_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
m_analog_ports[0] <<= 1;
|
||||
m_analog_ports[1] <<= 1;
|
||||
m_analog_ports[2] <<= 1;
|
||||
m_analog_ports[3] <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::analog_port_latch_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::analog_port_latch_w)
|
||||
{
|
||||
/* a zero is written here to read the analog ports, and a one is written when finished */
|
||||
if (ACCESSING_BITS_0_7)
|
||||
if (!state)
|
||||
{
|
||||
if (!(data & 0xff))
|
||||
{
|
||||
m_analog_ports[0] = m_analog[0].read_safe(0);
|
||||
m_analog_ports[1] = m_analog[1].read_safe(0);
|
||||
m_analog_ports[2] = m_analog[2].read_safe(0);
|
||||
m_analog_ports[3] = m_analog[3].read_safe(0);
|
||||
}
|
||||
m_analog_ports[0] = m_analog[0].read_safe(0);
|
||||
m_analog_ports[1] = m_analog[1].read_safe(0);
|
||||
m_analog_ports[2] = m_analog[2].read_safe(0);
|
||||
m_analog_ports[3] = m_analog[3].read_safe(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LOG)
|
||||
logerror("%06X:analog_port_latch_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -481,31 +408,30 @@ WRITE8_MEMBER(gaelco3d_state::tms_iack_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::tms_reset_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::tms_reset_w)
|
||||
{
|
||||
/* this is set to 0 while data is uploaded, then set to $ffff after it is done */
|
||||
/* it does not ever appear to be touched after that */
|
||||
if (LOG)
|
||||
logerror("%06X:tms_reset_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
m_tms->set_input_line(INPUT_LINE_RESET, (data == 0xffff) ? CLEAR_LINE : ASSERT_LINE);
|
||||
logerror("%06X:tms_reset_w = %d\n", m_maincpu->pc(), state);
|
||||
m_tms->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::tms_irq_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::tms_irq_w)
|
||||
{
|
||||
/* this is written twice, 0,1, in quick succession */
|
||||
/* done after uploading, and after modifying the comm area */
|
||||
if (LOG)
|
||||
logerror("%06X:tms_irq_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_tms->set_input_line(0, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
|
||||
logerror("%06X:tms_irq_w = %d\n", m_maincpu->pc(), state);
|
||||
m_tms->set_input_line(0, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gaelco3d_state::tms_control3_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::tms_control3_w)
|
||||
{
|
||||
if (LOG)
|
||||
logerror("%06X:tms_control3_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
logerror("%06X:tms_control3_w = %d\n", m_maincpu->pc(), state);
|
||||
}
|
||||
|
||||
|
||||
@ -708,31 +634,22 @@ WRITE32_MEMBER(gaelco3d_state::adsp_tx_callback)
|
||||
*************************************/
|
||||
|
||||
|
||||
WRITE32_MEMBER(gaelco3d_state::radikalb_lamp_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::radikalb_lamp_w)
|
||||
{
|
||||
/* arbitrary data written */
|
||||
if (ACCESSING_BITS_0_7)
|
||||
logerror("%06X:unknown_127_w = %02X\n", space.device().safe_pc(), data & 0xff);
|
||||
else
|
||||
logerror("%06X:unknown_127_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
logerror("%06X:unknown_127_w = %d\n", m_maincpu->pc(), state);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gaelco3d_state::unknown_137_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::unknown_137_w)
|
||||
{
|
||||
/* only written $00 or $ff */
|
||||
if (ACCESSING_BITS_0_7)
|
||||
logerror("%06X:unknown_137_w = %02X\n", space.device().safe_pc(), data & 0xff);
|
||||
else
|
||||
logerror("%06X:unknown_137_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
logerror("%06X:unknown_137_w = %d\n", m_maincpu->pc(), state);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gaelco3d_state::unknown_13a_w)
|
||||
WRITE_LINE_MEMBER(gaelco3d_state::unknown_13a_w)
|
||||
{
|
||||
/* only written $0000 or $0001 */
|
||||
if (ACCESSING_BITS_0_15)
|
||||
logerror("%06X:unknown_13a_w = %04X\n", space.device().safe_pc(), data & 0xffff);
|
||||
else
|
||||
logerror("%06X:unknown_13a_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
|
||||
logerror("%06X:unknown_13a_w = %04X\n", m_maincpu->pc(), state);
|
||||
}
|
||||
|
||||
|
||||
@ -743,6 +660,16 @@ WRITE32_MEMBER(gaelco3d_state::unknown_13a_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(gaelco3d_state::mainlatch_68000_w)
|
||||
{
|
||||
m_mainlatch->write_bit(offset >> 2, BIT(data, 0));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gaelco3d_state::outlatch_68000_w)
|
||||
{
|
||||
m_outlatch->write_bit(offset >> 3, BIT(data, 0));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||
@ -753,27 +680,26 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state )
|
||||
AM_RANGE(0x51003c, 0x51003d) AM_READ_PORT("IN3")
|
||||
AM_RANGE(0x510040, 0x510041) AM_WRITE(sound_data_w)
|
||||
AM_RANGE(0x510042, 0x510043) AM_READ(sound_status_r)
|
||||
AM_RANGE(0x510100, 0x510101) AM_READ(eeprom_data_r)
|
||||
AM_RANGE(0x510100, 0x510101) AM_WRITE(irq_ack_w)
|
||||
AM_RANGE(0x510102, 0x510103) AM_DEVWRITE8("serial", gaelco_serial_device, tr_w, 0x00ff)
|
||||
AM_RANGE(0x510100, 0x510101) AM_READWRITE(eeprom_data_r, irq_ack_w)
|
||||
AM_RANGE(0x510102, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x00ff)
|
||||
AM_RANGE(0x510102, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68000_w, 0x00ff)
|
||||
AM_RANGE(0x510104, 0x510105) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff)
|
||||
AM_RANGE(0x51010a, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x00ff)
|
||||
AM_RANGE(0x510110, 0x510113) AM_WRITE(eeprom_data_w)
|
||||
AM_RANGE(0x510116, 0x510117) AM_WRITE(tms_control3_w)
|
||||
AM_RANGE(0x510118, 0x51011b) AM_WRITE(eeprom_clock_w)
|
||||
AM_RANGE(0x510120, 0x510123) AM_WRITE(eeprom_cs_w)
|
||||
AM_RANGE(0x51012a, 0x51012b) AM_WRITE(tms_reset_w)
|
||||
AM_RANGE(0x510132, 0x510133) AM_WRITE(tms_irq_w)
|
||||
AM_RANGE(0x510146, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x00ff)
|
||||
AM_RANGE(0x510156, 0x510157) AM_WRITE(analog_port_clock_w)
|
||||
AM_RANGE(0x510166, 0x510167) AM_WRITE(analog_port_latch_w)
|
||||
AM_RANGE(0x510176, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x00ff)
|
||||
AM_RANGE(0x510106, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68000_w, 0x00ff)
|
||||
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE(tms_comm_w) AM_SHARE("tms_comm_base")
|
||||
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
WRITE8_MEMBER(gaelco3d_state::mainlatch_68020_w)
|
||||
{
|
||||
m_mainlatch->write_bit(offset >> 1, BIT(data, 0));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gaelco3d_state::outlatch_68020_w)
|
||||
{
|
||||
m_outlatch->write_bit(offset >> 2, BIT(data, 0));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state )
|
||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||
AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(gaelco3d_paletteram_020_w) AM_SHARE("paletteram")
|
||||
@ -783,23 +709,11 @@ static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state )
|
||||
AM_RANGE(0x51003c, 0x51003f) AM_READ_PORT("IN3")
|
||||
AM_RANGE(0x510040, 0x510043) AM_READ16(sound_status_r, 0x0000ffff)
|
||||
AM_RANGE(0x510040, 0x510043) AM_WRITE16(sound_data_w, 0xffff0000)
|
||||
AM_RANGE(0x510100, 0x510103) AM_READ(eeprom_data32_r)
|
||||
AM_RANGE(0x510100, 0x510103) AM_WRITE(irq_ack32_w)
|
||||
AM_RANGE(0x510100, 0x510103) AM_READWRITE16(eeprom_data_r, irq_ack_w, 0xffff0000)
|
||||
AM_RANGE(0x510100, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x000000ff)
|
||||
AM_RANGE(0x510100, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68020_w, 0x000000ff)
|
||||
AM_RANGE(0x510104, 0x510107) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff0000)
|
||||
AM_RANGE(0x510108, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x000000ff)
|
||||
AM_RANGE(0x510110, 0x510113) AM_WRITE16(eeprom_data_w, 0x0000ffff)
|
||||
AM_RANGE(0x510114, 0x510117) AM_WRITE16(tms_control3_w, 0x0000ffff)
|
||||
AM_RANGE(0x510118, 0x51011b) AM_WRITE16(eeprom_clock_w, 0x0000ffff)
|
||||
AM_RANGE(0x510120, 0x510123) AM_WRITE16(eeprom_cs_w, 0x0000ffff)
|
||||
AM_RANGE(0x510124, 0x510127) AM_WRITE(radikalb_lamp_w)
|
||||
AM_RANGE(0x510128, 0x51012b) AM_WRITE16(tms_reset_w, 0x0000ffff)
|
||||
AM_RANGE(0x510130, 0x510133) AM_WRITE16(tms_irq_w, 0x0000ffff)
|
||||
AM_RANGE(0x510134, 0x510137) AM_WRITE(unknown_137_w)
|
||||
AM_RANGE(0x510138, 0x51013b) AM_WRITE(unknown_13a_w)
|
||||
AM_RANGE(0x510144, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x000000ff)
|
||||
AM_RANGE(0x510154, 0x510157) AM_WRITE16(analog_port_clock_w, 0x0000ffff)
|
||||
AM_RANGE(0x510164, 0x510167) AM_WRITE16(analog_port_latch_w, 0x0000ffff)
|
||||
AM_RANGE(0x510174, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x000000ff)
|
||||
AM_RANGE(0x510104, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68020_w, 0x000000ff)
|
||||
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE16(tms_comm_w, 0xffffffff) AM_SHARE("tms_comm_base")
|
||||
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base")
|
||||
ADDRESS_MAP_END
|
||||
@ -967,7 +881,6 @@ static MACHINE_CONFIG_START( gaelco3d )
|
||||
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
|
||||
MCFG_CPU_DATA_MAP(adsp_data_map)
|
||||
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
@ -977,6 +890,25 @@ static MACHINE_CONFIG_START( gaelco3d )
|
||||
MCFG_DEVICE_ADD("serial", GAELCO_SERIAL, 0)
|
||||
MCFG_GAELCO_SERIAL_IRQ_HANDLER(WRITELINE(gaelco3d_state, ser_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC5 on bottom board next to EEPROM
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, tr_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, rts_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, tms_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, tms_irq_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gaelco3d_state, unknown_13a_w))
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC2 on top board near edge connector
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco3d_state, tms_control3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco3d_state, radikalb_lamp_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco3d_state, unknown_137_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, irq_enable))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, analog_port_clock_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, analog_port_latch_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, unknown_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -520,27 +520,27 @@ Line up the LS32 so pin 7 is in line with Z80 pin 29
|
||||
Atach the 2 chips to the top of the Z80 with some glue
|
||||
Connect like this....
|
||||
|
||||
LS32 pin 1 tied to Z80 pin 22
|
||||
LS32 pin 2 tied to Z80 pin 19
|
||||
LS32 pin 1 tied to Z80 pin 22 (WR)
|
||||
LS32 pin 2 tied to Z80 pin 19 (MREQ)
|
||||
LS32 pin 3,4 tied together
|
||||
LS32 pin 5 tied to Z80 pin 4
|
||||
LS32 pin 5 tied to Z80 pin 4 (A14)
|
||||
LS32 pin 6 tied to pin 10 LS32
|
||||
LS32 pin 7 tied to Z80 pin 29 (GND)
|
||||
LS32 pin 8 tied to LS259 pin 14
|
||||
LS32 pin 9 tied to Z80 pin 5
|
||||
LS32 pin 9 tied to Z80 pin 5 (A15)
|
||||
LS32 pins 11, 12, 13 have NC
|
||||
LS32 pin 14 tied to Z80 pin 11 (+5V)
|
||||
|
||||
LS259 pin 1 tied to Z80 pin 30
|
||||
LS259 pin 2 tied to Z80 pin 31
|
||||
LS259 pin 3 tied to Z80 pin 32
|
||||
LS259 pin 1 tied to Z80 pin 30 (A0)
|
||||
LS259 pin 2 tied to Z80 pin 31 (A1)
|
||||
LS259 pin 3 tied to Z80 pin 32 (A2)
|
||||
LS259 pin 4 to ROM 8 (as above)
|
||||
LS259 pins 5, 6, 7 have NC
|
||||
LS259 pin 8 tied to Z80 pin 29 (GND)
|
||||
LS259 pins 9, 10, 11, 12 have NC
|
||||
LS259 pin 13 tied to Z80 pin 14
|
||||
LS259 pin 15 tied to Z80 pin 26
|
||||
LS259 pin 16 tied to Z80 pin 11
|
||||
LS259 pin 13 tied to Z80 pin 14 (D0)
|
||||
LS259 pin 15 tied to Z80 pin 26 (RESET)
|
||||
LS259 pin 16 tied to Z80 pin 11 (+5V)
|
||||
|
||||
|
||||
|
||||
@ -734,57 +734,28 @@ READ8_MEMBER(galaga_state::bosco_dsw_r)
|
||||
return bit0 | (bit1 << 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(galaga_state::galaga_flip_screen_w)
|
||||
WRITE_LINE_MEMBER(galaga_state::flip_screen_w)
|
||||
{
|
||||
flip_screen_set(data & 1);
|
||||
flip_screen_set(state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bosco_state::bosco_flip_screen_w)
|
||||
WRITE_LINE_MEMBER(galaga_state::irq1_clear_w)
|
||||
{
|
||||
flip_screen_set(~data & 1);
|
||||
m_main_irq_mask = state;
|
||||
if (!m_main_irq_mask)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(galaga_state::bosco_latch_w)
|
||||
WRITE_LINE_MEMBER(galaga_state::irq2_clear_w)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* IRQ1 */
|
||||
m_main_irq_mask = data & 1;
|
||||
if (!m_main_irq_mask)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
m_sub_irq_mask = state;
|
||||
if (!m_sub_irq_mask)
|
||||
m_subcpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
case 0x01: /* IRQ2 */
|
||||
m_sub_irq_mask = data & 1;
|
||||
if (!m_sub_irq_mask)
|
||||
m_subcpu->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 0x02: /* NMION */
|
||||
m_sub2_nmi_mask = !(data & 1);
|
||||
break;
|
||||
|
||||
case 0x03: /* RESET */
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_subcpu2->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
case 0x04: /* n.c. */
|
||||
break;
|
||||
|
||||
case 0x05: /* MOD 0 (xevious: n.c.) */
|
||||
m_custom_mod = (m_custom_mod & ~0x01) | ((data & 1) << 0);
|
||||
break;
|
||||
|
||||
case 0x06: /* MOD 1 (xevious: n.c.) */
|
||||
m_custom_mod = (m_custom_mod & ~0x02) | ((data & 1) << 1);
|
||||
break;
|
||||
|
||||
case 0x07: /* MOD 2 (xevious: n.c.) */
|
||||
m_custom_mod = (m_custom_mod & ~0x04) | ((data & 1) << 2);
|
||||
break;
|
||||
}
|
||||
WRITE_LINE_MEMBER(galaga_state::nmion_w)
|
||||
{
|
||||
m_sub2_nmi_mask = !state;
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(digdug_state::shifted_port_r){ return ioport((const char *)param)->read() >> 4; }
|
||||
@ -823,12 +794,6 @@ READ8_MEMBER(galaga_state::namco_52xx_si_r)
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(galaga_state::custom_mod_r)
|
||||
{
|
||||
/* MOD0-2 is connected to K1-3; K0 is left unconnected */
|
||||
return m_custom_mod << 1;
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER(galaga_state::cpu3_interrupt_callback)
|
||||
{
|
||||
int scanline = param;
|
||||
@ -849,28 +814,13 @@ MACHINE_START_MEMBER(galaga_state,galaga)
|
||||
{
|
||||
/* create the interrupt timer */
|
||||
m_cpu3_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaga_state::cpu3_interrupt_callback),this));
|
||||
m_custom_mod = 0;
|
||||
save_item(NAME(m_custom_mod));
|
||||
save_item(NAME(m_main_irq_mask));
|
||||
save_item(NAME(m_sub_irq_mask));
|
||||
save_item(NAME(m_sub2_nmi_mask));
|
||||
}
|
||||
|
||||
void galaga_state::bosco_latch_reset()
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
int i;
|
||||
|
||||
/* Reset all latches */
|
||||
for (i = 0;i < 8;i++)
|
||||
bosco_latch_w(space,i,0);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(galaga_state,galaga)
|
||||
{
|
||||
/* Reset all latches */
|
||||
bosco_latch_reset();
|
||||
|
||||
m_cpu3_interrupt_timer->adjust(m_screen->time_until_pos(64), 64);
|
||||
}
|
||||
|
||||
@ -886,7 +836,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
|
||||
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
|
||||
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
|
||||
AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx_0", namco_06xx_device, data_r, data_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx_0", namco_06xx_device, ctrl_r, ctrl_w)
|
||||
@ -899,8 +849,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state )
|
||||
AM_RANGE(0x9820, 0x9820) AM_WRITE(bosco_scrolly_w)
|
||||
AM_RANGE(0x9830, 0x9830) AM_WRITEONLY AM_SHARE("starcontrol")
|
||||
AM_RANGE(0x9840, 0x9840) AM_WRITE(bosco_starclr_w)
|
||||
AM_RANGE(0x9870, 0x9870) AM_WRITE(bosco_flip_screen_w)
|
||||
AM_RANGE(0x9874, 0x9875) AM_WRITEONLY AM_SHARE("bosco_starblink")
|
||||
AM_RANGE(0x9870, 0x9877) AM_DEVWRITE("videolatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -908,7 +857,7 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
|
||||
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
|
||||
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
|
||||
AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
|
||||
@ -916,8 +865,12 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state )
|
||||
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("galaga_ram1")
|
||||
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("galaga_ram2")
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("galaga_ram3")
|
||||
AM_RANGE(0xa000, 0xa005) AM_WRITEONLY AM_SHARE("starcontrol")
|
||||
AM_RANGE(0xa007, 0xa007) AM_WRITE(galaga_flip_screen_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( gatsbee_main_map, AS_PROGRAM, 8, galaga_state )
|
||||
AM_RANGE(0x0000, 0x0007) AM_MIRROR(0x3ff8) AM_DEVWRITE("extralatch", ls259_device, write_d0)
|
||||
AM_IMPORT_FROM(galaga_map)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -925,7 +878,7 @@ static ADDRESS_MAP_START( xevious_map, AS_PROGRAM, 8, xevious_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
|
||||
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
|
||||
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
|
||||
AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
|
||||
@ -945,7 +898,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
|
||||
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
|
||||
AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
|
||||
@ -954,7 +907,7 @@ static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state )
|
||||
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("digdug_objram") /* work RAM + sprite registers */
|
||||
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("digdug_posram") /* work RAM + sprite registers */
|
||||
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("digdug_flpram") /* work RAM + sprite registers */
|
||||
AM_RANGE(0xa000, 0xa007) AM_READNOP AM_WRITE(digdug_PORT_w) /* video latches (spurious reads when setting latch bits) */
|
||||
AM_RANGE(0xa000, 0xa007) AM_READNOP AM_DEVWRITE("videolatch", ls259_device, write_d0) /* video latches (spurious reads when setting latch bits) */
|
||||
AM_RANGE(0xb800, 0xb83f) AM_DEVREADWRITE("earom", atari_vg_earom_device, read, write) /* non volatile memory data */
|
||||
AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) /* non volatile memory control */
|
||||
ADDRESS_MAP_END
|
||||
@ -1619,6 +1572,13 @@ static MACHINE_CONFIG_START( bosco )
|
||||
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(bosco_map)
|
||||
|
||||
MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_NAMCO_50XX_ADD("50xx_1", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
MCFG_NAMCO_50XX_ADD("50xx_2", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
@ -1657,6 +1617,12 @@ static MACHINE_CONFIG_START( bosco )
|
||||
MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("50xx_2", namco_50xx_device, write))
|
||||
MCFG_NAMCO_06XX_WRITE_1_CB(DEVWRITE8("52xx", namco_52xx_device, write))
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0) // 1B on video board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, flip_screen_w)) MCFG_DEVCB_INVERT
|
||||
// Q4-Q5 to 05XX for starfield blink
|
||||
//MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITE("50xx_2", namco_50xx_device, reset_w))
|
||||
//MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITE("52xx", namco_52xx_device, reset_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
@ -1704,6 +1670,13 @@ static MACHINE_CONFIG_START( galaga )
|
||||
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(galaga_map)
|
||||
|
||||
MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L"))
|
||||
MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H"))
|
||||
@ -1722,6 +1695,10 @@ static MACHINE_CONFIG_START( galaga )
|
||||
MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("51xx", namco_51xx_device, write))
|
||||
MCFG_NAMCO_06XX_WRITE_3_CB(DEVWRITE8("54xx", namco_54xx_device, write))
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5K on video board
|
||||
// Q0-Q5 to 05XX for starfield control
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(galaga_state, flip_screen_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
@ -1775,6 +1752,14 @@ static MACHINE_CONFIG_DERIVED( galagab, galaga )
|
||||
MCFG_DEVICE_REMOVE("discrete")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( gatsbee, galaga )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(gatsbee_main_map)
|
||||
|
||||
MCFG_DEVICE_ADD("extralatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, gatsbee_bank_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( xevious )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1789,6 +1774,13 @@ static MACHINE_CONFIG_START( xevious )
|
||||
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(xevious_map)
|
||||
|
||||
MCFG_DEVICE_ADD("misclatch", LS259, 0) // 5K
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_NAMCO_50XX_ADD("50xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
|
||||
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
@ -1889,6 +1881,14 @@ static MACHINE_CONFIG_START( digdug )
|
||||
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(digdug_map)
|
||||
|
||||
MCFG_DEVICE_ADD("misclatch", LS259, 0) // 8R
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
// Q5-Q7 also used (see below)
|
||||
|
||||
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L"))
|
||||
MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H"))
|
||||
@ -1898,7 +1898,10 @@ static MACHINE_CONFIG_START( digdug )
|
||||
MCFG_NAMCO_51XX_OUTPUT_1_CB(WRITE8(galaga_state,out_1))
|
||||
|
||||
MCFG_NAMCO_53XX_ADD("53xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
|
||||
MCFG_NAMCO_53XX_K_CB(READ8(galaga_state,custom_mod_r))
|
||||
MCFG_NAMCO_53XX_K_CB(DEVREADLINE("misclatch", ls259_device, q7_r)) MCFG_DEVCB_BIT(3) // MOD 2 = K3
|
||||
MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q6_r)) MCFG_DEVCB_BIT(2) // MOD 1 = K2
|
||||
MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q5_r)) MCFG_DEVCB_BIT(1) // MOD 0 = K1
|
||||
// K0 is left unconnected
|
||||
MCFG_NAMCO_53XX_INPUT_0_CB(IOPORT("DSWA"))
|
||||
MCFG_NAMCO_53XX_INPUT_1_CB(IOPORT("DSWA_HI"))
|
||||
MCFG_NAMCO_53XX_INPUT_2_CB(IOPORT("DSWB"))
|
||||
@ -1911,6 +1914,12 @@ static MACHINE_CONFIG_START( digdug )
|
||||
MCFG_NAMCO_06XX_READ_1_CB(DEVREAD8("53xx", namco_53xx_device, read))
|
||||
MCFG_NAMCO_06XX_READ_REQUEST_1_CB(DEVWRITELINE("53xx", namco_53xx_device, read_request))
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5R
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(digdug_state, bg_select_w)) MCFG_DEVCB_MASK(0x33)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(digdug_state, tx_color_mode_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(digdug_state, bg_disable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(digdug_state, flip_screen_w))
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
/* synchronization of the CPUs */
|
||||
MCFG_MACHINE_START_OVERRIDE(galaga_state,galaga)
|
||||
@ -3412,14 +3421,6 @@ DRIVER_INIT_MEMBER(galaga_state,galaga)
|
||||
}
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(galaga_state,gatsbee)
|
||||
{
|
||||
DRIVER_INIT_CALL(galaga);
|
||||
|
||||
/* Gatsbee has a larger character ROM, we need a handler for banking */
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x1000, 0x1000, write8_delegate(FUNC(galaga_state::gatsbee_bank_w),this));
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(xevious_state,xevious)
|
||||
{
|
||||
@ -3496,7 +3497,7 @@ GAME( 1982, digsid, digdug, digdug, digdug, digdug_state, 0, ROT90
|
||||
/* Bootlegs with replacement I/O chips */
|
||||
|
||||
GAME( 1982, gallag, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Gallag", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1984, gatsbee, galaga, galagab, gatsbee, galaga_state, gatsbee, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1984, gatsbee, galaga, gatsbee, gatsbee, galaga_state, galaga, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1981, nebulbee, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Nebulous Bee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
GAME( 1982, xevios, xevious, xevious, xevious, xevious_state, xevios, ROT90, "bootleg", "Xevios", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -190,12 +190,10 @@ WRITE16_MEMBER(gauntlet_state::sound_reset_w)
|
||||
if ((oldword ^ m_sound_reset_val) & 1)
|
||||
{
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (m_sound_reset_val & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_soundctl->clear_w(m_sound_reset_val & 1);
|
||||
m_soundcomm->sound_cpu_reset();
|
||||
if (m_sound_reset_val & 1)
|
||||
{
|
||||
m_ym2151->reset();
|
||||
m_tms5220->reset();
|
||||
m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / 11);
|
||||
m_ym2151->set_output_gain(ALL_OUTPUTS, 0.0f);
|
||||
m_pokey->set_output_gain(ALL_OUTPUTS, 0.0f);
|
||||
m_tms5220->set_output_gain(ALL_OUTPUTS, 0.0f);
|
||||
@ -231,27 +229,28 @@ READ8_MEMBER(gauntlet_state::switch_6502_r)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(gauntlet_state::sound_ctl_w)
|
||||
WRITE_LINE_MEMBER(gauntlet_state::ym2151_reset_w)
|
||||
{
|
||||
switch (offset & 7)
|
||||
{
|
||||
case 0: /* music reset, bit D7, low reset */
|
||||
if (((data>>7)&1) == 0) m_ym2151->reset();
|
||||
break;
|
||||
if (state == 0)
|
||||
m_ym2151->reset();
|
||||
}
|
||||
|
||||
case 1: /* speech write, bit D7, active low */
|
||||
m_tms5220->wsq_w(data >> 7);
|
||||
break;
|
||||
WRITE_LINE_MEMBER(gauntlet_state::speech_squeak_w)
|
||||
{
|
||||
uint8_t data = 5 | (state ? 2 : 0);
|
||||
m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data));
|
||||
}
|
||||
|
||||
case 2: /* speech reset, bit D7, active low */
|
||||
m_tms5220->rsq_w(data >> 7);
|
||||
break;
|
||||
WRITE_LINE_MEMBER(gauntlet_state::coin_counter_left_w)
|
||||
{
|
||||
// coins 1 & 2 combined
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
case 3: /* speech squeak, bit D7 */
|
||||
data = 5 | ((data >> 6) & 2);
|
||||
m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data));
|
||||
break;
|
||||
}
|
||||
WRITE_LINE_MEMBER(gauntlet_state::coin_counter_right_w)
|
||||
{
|
||||
// coins 3 & 4 combined
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -325,7 +324,8 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gauntlet_state )
|
||||
AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x27c0) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w)
|
||||
AM_RANGE(0x1010, 0x101f) AM_MIRROR(0x27c0) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r)
|
||||
AM_RANGE(0x1020, 0x102f) AM_MIRROR(0x27c0) AM_READ_PORT("COIN") AM_WRITE(mixer_w)
|
||||
AM_RANGE(0x1030, 0x103f) AM_MIRROR(0x27c0) AM_READWRITE(switch_6502_r, sound_ctl_w)
|
||||
AM_RANGE(0x1030, 0x1030) AM_MIRROR(0x27cf) AM_READ(switch_6502_r)
|
||||
AM_RANGE(0x1030, 0x1037) AM_MIRROR(0x27c8) AM_DEVWRITE("soundctl", ls259_device, write_d7)
|
||||
AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x27c0) AM_DEVREADWRITE("pokey", pokey_device, read, write)
|
||||
AM_RANGE(0x1810, 0x1811) AM_MIRROR(0x27ce) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
|
||||
AM_RANGE(0x1820, 0x182f) AM_MIRROR(0x27c0) AM_DEVWRITE("tms", tms5220_device, data_w)
|
||||
@ -544,6 +544,14 @@ static MACHINE_CONFIG_START( gauntlet_base )
|
||||
MCFG_SOUND_ADD("tms", TMS5220C, ATARI_CLOCK_14MHz/2/11) /* potentially ATARI_CLOCK_14MHz/2/9 as well */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
|
||||
|
||||
MCFG_DEVICE_ADD("soundctl", LS259, 0) // 16T/U
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gauntlet_state, ym2151_reset_w)) // music reset, low reset
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("tms", tms5220_device, wsq_w)) // speech write, active low
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("tms", tms5220_device, rsq_w)) // speech reset, active low
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gauntlet_state, speech_squeak_w)) // speech squeak, low = 650 Hz
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(gauntlet_state, coin_counter_right_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gauntlet_state, coin_counter_left_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -195,6 +195,7 @@ TODO:
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
|
||||
#include "machine/74259.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
@ -205,12 +206,6 @@ TODO:
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
WRITE8_MEMBER(gladiatr_state::gladiatr_bankswitch_w)
|
||||
{
|
||||
// ROM bankswitching
|
||||
membank("bank1")->set_entry(data & 0x01);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(gladiatr_state,gladiator)
|
||||
{
|
||||
// 6809 bank memory set
|
||||
@ -258,9 +253,9 @@ READ8_MEMBER(gladiatr_state::gladiator_cpu_sound_command_r)
|
||||
return m_soundlatch->read(space,0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gladiatr_state::gladiatr_flipscreen_w)
|
||||
WRITE_LINE_MEMBER(gladiatr_state::flipscreen_w)
|
||||
{
|
||||
flip_screen_set(data & 1);
|
||||
flip_screen_set(state);
|
||||
}
|
||||
|
||||
|
||||
@ -512,12 +507,8 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( gladiatr_cpu1_io, AS_IO, 8, gladiatr_state )
|
||||
// ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0xc000, 0xc000) AM_WRITE(spritebuffer_w)
|
||||
AM_RANGE(0xc001, 0xc001) AM_WRITE(gladiatr_spritebank_w)
|
||||
AM_RANGE(0xc002, 0xc002) AM_WRITE(gladiatr_bankswitch_w)
|
||||
AM_RANGE(0xc004, 0xc004) AM_WRITE(gladiatr_irq_patch_w) /* !!! patch to 2nd CPU IRQ !!! */
|
||||
AM_RANGE(0xc007, 0xc007) AM_WRITE(gladiatr_flipscreen_w)
|
||||
AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xc09e, 0xc09f) AM_DEVREADWRITE("ucpu", upi41_cpu_device, upi41_master_r, upi41_master_w)
|
||||
AM_RANGE(0xc0bf, 0xc0bf) AM_NOP // watchdog_reset_w doesn't work
|
||||
ADDRESS_MAP_END
|
||||
@ -529,7 +520,7 @@ static ADDRESS_MAP_START( gladiatr_cpu2_io, AS_IO, 8, gladiatr_state )
|
||||
AM_RANGE(0x40, 0x40) AM_NOP // WRITE(sub_irq_ack_w)
|
||||
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("cctl", upi41_cpu_device, upi41_master_r, upi41_master_w)
|
||||
AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ccpu", upi41_cpu_device, upi41_master_r, upi41_master_w)
|
||||
AM_RANGE(0xa0, 0xa7) AM_NOP // filters on sound output
|
||||
AM_RANGE(0xa0, 0xa7) AM_DEVWRITE("filtlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xe0, 0xe0) AM_WRITE(gladiator_cpu_sound_command_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -751,6 +742,13 @@ static MACHINE_CONFIG_START( gladiatr )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(gladiatr_state,gladiator)
|
||||
MCFG_NVRAM_ADD_0FILL("nvram") // NEC uPD449 CMOS SRAM
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5L on main board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gladiatr_state, spritebuffer_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gladiatr_state, spritebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(MEMBANK("bank1"))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) // shadowed by aforementioned hack
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gladiatr_state, flipscreen_w))
|
||||
|
||||
MCFG_DEVICE_ADD("cctl", I8741, XTAL_12MHz/2) /* verified on pcb */
|
||||
MCFG_MCS48_PORT_T0_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(3)
|
||||
MCFG_MCS48_PORT_T1_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(2)
|
||||
@ -815,6 +813,8 @@ static MACHINE_CONFIG_START( gladiatr )
|
||||
MCFG_SOUND_ADD("msm", MSM5205, XTAL_455kHz) /* verified on pcb */
|
||||
MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* vclk input mode */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
|
||||
|
||||
MCFG_DEVICE_ADD("filtlatch", LS259, 0) // 9R - filters on sound output
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -79,19 +79,27 @@ WRITE16_MEMBER(glass_state::OKIM6295_bankswitch_w)
|
||||
|
||||
WRITE16_MEMBER(glass_state::coin_w)
|
||||
{
|
||||
switch (offset >> 3)
|
||||
{
|
||||
case 0x00: /* Coin Lockouts */
|
||||
case 0x01:
|
||||
machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
|
||||
break;
|
||||
case 0x02: /* Coin Counters */
|
||||
case 0x03:
|
||||
machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
|
||||
break;
|
||||
case 0x04: /* Sound Muting (if bit 0 == 1, sound output stream = 0) */
|
||||
break;
|
||||
}
|
||||
m_outlatch->write_bit(offset >> 3, BIT(data, 0));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(glass_state::coin1_lockout_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(0, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(glass_state::coin2_lockout_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_w(1, !state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(glass_state::coin1_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(glass_state::coin2_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -113,9 +121,9 @@ static ADDRESS_MAP_START( glass_map, AS_PROGRAM, 16, glass_state )
|
||||
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x700008, 0x700009) AM_WRITE(blitter_w) // serial blitter
|
||||
AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE(coin_w) // Coin Counters/Lockout
|
||||
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) // OKI6295 bankswitch
|
||||
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // OKI6295 status register
|
||||
AM_RANGE(0x70000a, 0x70004b) AM_WRITE(coin_w) // Coin Counters/Lockout
|
||||
AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE("shareram") // Work RAM (partially shared with DS5002FP)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -226,6 +234,13 @@ static MACHINE_CONFIG_START( glass )
|
||||
MCFG_CPU_PROGRAM_MAP(glass_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", glass_state, interrupt)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(glass_state, coin1_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(glass_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(glass_state, coin1_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(glass_state, coin2_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // Sound Muting (if bit 0 == 1, sound output stream = 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -27,8 +27,8 @@ Notes:
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/2203intf.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -41,9 +41,23 @@ WRITE8_MEMBER(gng_state::gng_bankswitch_w)
|
||||
membank("bank1")->set_entry((data & 0x03));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gng_state::gng_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(gng_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gng_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gng_state::ym_reset_w)
|
||||
{
|
||||
if (!state)
|
||||
{
|
||||
m_ym[0]->reset();
|
||||
m_ym[1]->reset();
|
||||
}
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state )
|
||||
@ -62,9 +76,7 @@ static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state )
|
||||
AM_RANGE(0x3b08, 0x3b09) AM_WRITE(gng_bgscrollx_w)
|
||||
AM_RANGE(0x3b0a, 0x3b0b) AM_WRITE(gng_bgscrolly_w)
|
||||
AM_RANGE(0x3c00, 0x3c00) AM_NOP /* watchdog? */
|
||||
AM_RANGE(0x3d00, 0x3d00) AM_WRITE(gng_flipscreen_w)
|
||||
// { 0x3d01, 0x3d01, reset sound cpu?
|
||||
AM_RANGE(0x3d02, 0x3d03) AM_WRITE(gng_coin_counter_w)
|
||||
AM_RANGE(0x3d00, 0x3d07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(gng_bankswitch_w)
|
||||
AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x6000, 0xffff) AM_ROM
|
||||
@ -353,6 +365,12 @@ static MACHINE_CONFIG_START( gng )
|
||||
MCFG_CPU_PROGRAM_MAP(sound_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(gng_state, irq0_line_hold, 4*60)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9B on A board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gng_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(gng_state, ym_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gng_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gng_state, coin_counter_2_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
|
@ -44,6 +44,12 @@ READ8_MEMBER(gomoku_state::input_port_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(gomoku_state::gomoku_latch_w)
|
||||
{
|
||||
m_latch->write_bit(offset, BIT(data, 1));
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state )
|
||||
AM_RANGE(0x0000, 0x47ff) AM_ROM
|
||||
AM_RANGE(0x4800, 0x4fff) AM_RAM
|
||||
@ -52,10 +58,7 @@ static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state )
|
||||
AM_RANGE(0x5800, 0x58ff) AM_RAM_WRITE(gomoku_bgram_w) AM_SHARE("bgram")
|
||||
AM_RANGE(0x6000, 0x601f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound1_w)
|
||||
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound2_w)
|
||||
AM_RANGE(0x7000, 0x7000) AM_WRITENOP
|
||||
AM_RANGE(0x7001, 0x7001) AM_WRITE(gomoku_flipscreen_w)
|
||||
AM_RANGE(0x7002, 0x7002) AM_WRITE(gomoku_bg_dispsw_w)
|
||||
AM_RANGE(0x7003, 0x7007) AM_WRITENOP
|
||||
AM_RANGE(0x7000, 0x7007) AM_WRITE(gomoku_latch_w)
|
||||
AM_RANGE(0x7800, 0x7807) AM_READ(input_port_r)
|
||||
AM_RANGE(0x7800, 0x7800) AM_WRITENOP
|
||||
ADDRESS_MAP_END
|
||||
@ -129,6 +132,11 @@ static MACHINE_CONFIG_START( gomoku )
|
||||
MCFG_CPU_PROGRAM_MAP(gomoku_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", gomoku_state, irq0_line_hold)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // 7J
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gomoku_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gomoku_state, bg_dispsw_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // start LED?
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -270,24 +270,30 @@ READ8_MEMBER(gridlee_state::random_num_r)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(gridlee_state::led_0_w)
|
||||
WRITE8_MEMBER(gridlee_state::latch_w)
|
||||
{
|
||||
output().set_led_value(0, data & 1);
|
||||
logerror("LED 0 %s\n", (data & 1) ? "on" : "off");
|
||||
m_latch->write_bit(offset >> 4, data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(gridlee_state::led_1_w)
|
||||
WRITE_LINE_MEMBER(gridlee_state::led_0_w)
|
||||
{
|
||||
output().set_led_value(1, data & 1);
|
||||
logerror("LED 1 %s\n", (data & 1) ? "on" : "off");
|
||||
output().set_led_value(0, state);
|
||||
logerror("LED 0 %s\n", state ? "on" : "off");
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(gridlee_state::led_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 1);
|
||||
logerror("coin counter %s\n", (data & 1) ? "on" : "off");
|
||||
output().set_led_value(1, state);
|
||||
logerror("LED 1 %s\n", state ? "on" : "off");
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(gridlee_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
logerror("coin counter %s\n", state ? "on" : "off");
|
||||
}
|
||||
|
||||
|
||||
@ -302,11 +308,7 @@ WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w)
|
||||
static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, gridlee_state )
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x0800, 0x7fff) AM_RAM_WRITE(gridlee_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x9000, 0x9000) AM_WRITE(led_0_w)
|
||||
AM_RANGE(0x9010, 0x9010) AM_WRITE(led_1_w)
|
||||
AM_RANGE(0x9020, 0x9020) AM_WRITE(gridlee_coin_counter_w)
|
||||
/* { 0x9060, 0x9060, unknown - only written to at startup */
|
||||
AM_RANGE(0x9070, 0x9070) AM_WRITE(gridlee_cocktail_flip_w)
|
||||
AM_RANGE(0x9000, 0x9000) AM_SELECT(0x0070) AM_WRITE(latch_w)
|
||||
AM_RANGE(0x9200, 0x9200) AM_WRITE(gridlee_palette_select_w)
|
||||
AM_RANGE(0x9380, 0x9380) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x9500, 0x9501) AM_READ(analog_port_r)
|
||||
@ -420,6 +422,13 @@ static MACHINE_CONFIG_START( gridlee )
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // type can only be guessed
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gridlee_state, led_0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gridlee_state, led_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gridlee_state, coin_counter_w))
|
||||
// Q6 unknown - only written to at startup
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gridlee_state, cocktail_flip_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(GRIDLEE_PIXEL_CLOCK, GRIDLEE_HTOTAL, GRIDLEE_HBEND, GRIDLEE_HBSTART, GRIDLEE_VTOTAL, GRIDLEE_VBEND, GRIDLEE_VBSTART)
|
||||
|
@ -64,6 +64,7 @@ and 1 SFX channel controlled by an 8039:
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/konami1.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -161,9 +162,9 @@ WRITE8_MEMBER(gyruss_state::gyruss_i8039_irq_w)
|
||||
m_audiocpu_2->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gyruss_state::master_nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(gyruss_state::master_nmi_mask_w)
|
||||
{
|
||||
m_master_nmi_mask = data & 1;
|
||||
m_master_nmi_mask = state;
|
||||
if (!m_master_nmi_mask)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
@ -175,6 +176,16 @@ WRITE8_MEMBER(gyruss_state::slave_irq_mask_w)
|
||||
m_subcpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gyruss_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gyruss_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x83ff) AM_RAM AM_SHARE("colorram")
|
||||
@ -187,8 +198,7 @@ static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state )
|
||||
AM_RANGE(0xc0c0, 0xc0c0) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xc0e0, 0xc0e0) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0xc180, 0xc180) AM_WRITE(master_nmi_mask_w)
|
||||
AM_RANGE(0xc185, 0xc185) AM_WRITEONLY AM_SHARE("flipscreen")
|
||||
AM_RANGE(0xc180, 0xc187) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_cpu2_map, AS_PROGRAM, 8, gyruss_state )
|
||||
@ -484,6 +494,12 @@ static MACHINE_CONFIG_START( gyruss )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3C
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gyruss_state, master_nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gyruss_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gyruss_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gyruss_state, flipscreen_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
|
@ -44,6 +44,8 @@ TODO:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/2203intf.h"
|
||||
#include "sound/msm5205.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -81,19 +83,25 @@ WRITE8_MEMBER(hnayayoi_state::adpcm_data_w)
|
||||
m_msm->data_w(data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hnayayoi_state::adpcm_vclk_w)
|
||||
|
||||
WRITE_LINE_MEMBER(hnayayoi_state::coin_counter_w)
|
||||
{
|
||||
m_msm->vclk_w(data & 1);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hnayayoi_state::adpcm_reset_w)
|
||||
|
||||
WRITE_LINE_MEMBER(hnayayoi_state::nmi_enable_w)
|
||||
{
|
||||
m_msm->reset_w(data & 1);
|
||||
m_nmi_enable = state;
|
||||
if (!state)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(hnayayoi_state::adpcm_reset_inv_w)
|
||||
|
||||
WRITE_LINE_MEMBER(hnayayoi_state::nmi_clock_w)
|
||||
{
|
||||
m_msm->reset_w(~data & 1);
|
||||
if (m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, state);
|
||||
}
|
||||
|
||||
|
||||
@ -113,8 +121,7 @@ static ADDRESS_MAP_START( hnayayoi_io_map, AS_IO, 8, hnayayoi_state )
|
||||
// AM_RANGE(0x09, 0x09) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE(0x0a, 0x0a) AM_WRITE(dynax_blitter_rev1_start_w)
|
||||
AM_RANGE(0x0c, 0x0c) AM_WRITE(dynax_blitter_rev1_clear_w)
|
||||
AM_RANGE(0x23, 0x23) AM_WRITE(adpcm_vclk_w)
|
||||
AM_RANGE(0x24, 0x24) AM_WRITE(adpcm_reset_w)
|
||||
AM_RANGE(0x20, 0x27) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x40, 0x40) AM_WRITE(keyboard_w)
|
||||
AM_RANGE(0x41, 0x41) AM_READ(keyboard_0_r)
|
||||
AM_RANGE(0x42, 0x42) AM_READ(keyboard_1_r)
|
||||
@ -135,8 +142,7 @@ static ADDRESS_MAP_START( hnfubuki_map, AS_PROGRAM, 8, hnayayoi_state )
|
||||
// AM_RANGE(0xff09, 0xff09) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE(0xff0a, 0xff0a) AM_WRITE(dynax_blitter_rev1_start_w)
|
||||
AM_RANGE(0xff0c, 0xff0c) AM_WRITE(dynax_blitter_rev1_clear_w)
|
||||
AM_RANGE(0xff23, 0xff23) AM_WRITE(adpcm_vclk_w)
|
||||
AM_RANGE(0xff24, 0xff24) AM_WRITE(adpcm_reset_inv_w)
|
||||
AM_RANGE(0xff20, 0xff27) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xff40, 0xff40) AM_WRITE(keyboard_w)
|
||||
AM_RANGE(0xff41, 0xff41) AM_READ(keyboard_0_r)
|
||||
AM_RANGE(0xff42, 0xff42) AM_READ(keyboard_1_r)
|
||||
@ -165,8 +171,7 @@ static ADDRESS_MAP_START( untoucha_io_map, AS_IO, 8, hnayayoi_state )
|
||||
AM_RANGE(0x1a, 0x1f) AM_WRITE(dynax_blitter_rev1_param_w)
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(dynax_blitter_rev1_clear_w)
|
||||
AM_RANGE(0x28, 0x28) AM_WRITE(dynax_blitter_rev1_start_w)
|
||||
AM_RANGE(0x31, 0x31) AM_WRITE(adpcm_vclk_w)
|
||||
AM_RANGE(0x32, 0x32) AM_WRITE(adpcm_reset_inv_w)
|
||||
AM_RANGE(0x30, 0x37) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x50, 0x50) AM_DEVWRITE("ymsnd", ym2203_device, write_port_w)
|
||||
AM_RANGE(0x51, 0x51) AM_DEVREAD("ymsnd", ym2203_device, read_port_r)
|
||||
// AM_RANGE(0x52, 0x52) AM_WRITENOP // CRT Controller
|
||||
@ -519,13 +524,11 @@ void hnayayoi_state::machine_start()
|
||||
save_item(NAME(m_blit_dest));
|
||||
save_item(NAME(m_blit_src));
|
||||
save_item(NAME(m_keyb));
|
||||
save_item(NAME(m_nmi_enable));
|
||||
}
|
||||
|
||||
void hnayayoi_state::machine_reset()
|
||||
{
|
||||
/* start with the MSM5205 reset */
|
||||
m_msm->reset_w(1);
|
||||
|
||||
m_palbank = 0;
|
||||
m_blit_layer = 0;
|
||||
m_blit_dest = 0;
|
||||
@ -541,11 +544,18 @@ static MACHINE_CONFIG_START( hnayayoi )
|
||||
MCFG_CPU_PROGRAM_MAP(hnayayoi_map)
|
||||
MCFG_CPU_IO_MAP(hnayayoi_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", hnayayoi_state, irq0_line_hold)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(hnayayoi_state, nmi_line_pulse, 8000)
|
||||
|
||||
MCFG_DEVICE_ADD("nmiclock", CLOCK, 8000)
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(hnayayoi_state, nmi_clock_w))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(hnayayoi_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MCFG_DEVCB_INVERT
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -577,6 +587,10 @@ MACHINE_CONFIG_END
|
||||
static MACHINE_CONFIG_DERIVED( hnfubuki, hnayayoi )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(hnfubuki_map)
|
||||
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch") // D5
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi )
|
||||
@ -584,6 +598,12 @@ static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi )
|
||||
MCFG_CPU_PROGRAM_MAP(untoucha_map)
|
||||
MCFG_CPU_IO_MAP(untoucha_io_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ?
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(hnayayoi_state,untoucha)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -25,13 +25,17 @@
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(holeland_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( holeland_map, AS_PROGRAM, 8, holeland_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM
|
||||
AM_RANGE(0xa000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("speech", sp0256_device, ald_w)
|
||||
AM_RANGE(0xc000, 0xc001) AM_WRITE(pal_offs_w)
|
||||
AM_RANGE(0xc006, 0xc007) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("latch", ls259_device, write_d0) AM_READNOP
|
||||
AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_SHARE("spriteram")
|
||||
@ -44,7 +48,7 @@ static ADDRESS_MAP_START( crzrally_map, AS_PROGRAM, 8, holeland_state )
|
||||
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xe800, 0xebff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xf000, 0xf000) AM_WRITE(scroll_w)
|
||||
AM_RANGE(0xf800, 0xf801) AM_WRITE(pal_offs_w)
|
||||
AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("latch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( io_map, AS_IO, 8, holeland_state )
|
||||
@ -276,6 +280,12 @@ static MACHINE_CONFIG_START( holeland )
|
||||
MCFG_CPU_IO_MAP(io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // 3J
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03)
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(holeland_state, flipscreen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(holeland_state, flipscreen_y_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -353,6 +363,10 @@ static MACHINE_CONFIG_START( crzrally )
|
||||
|
||||
MCFG_NVRAM_ADD_1FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03)
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -114,6 +114,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "includes/jedi.h"
|
||||
@ -226,9 +227,15 @@ WRITE8_MEMBER(jedi_state::a2d_select_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(jedi_state::jedi_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(jedi_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(jedi_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -273,12 +280,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jedi_state )
|
||||
AM_RANGE(0x1d00, 0x1d00) AM_MIRROR(0x007f) AM_NOP /* write: NVRAM store */
|
||||
AM_RANGE(0x1d80, 0x1d80) AM_MIRROR(0x007f) AM_READNOP AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x1e00, 0x1e00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(main_irq_ack_w)
|
||||
AM_RANGE(0x1e80, 0x1e81) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_coin_counter_w)
|
||||
AM_RANGE(0x1e82, 0x1e83) AM_MIRROR(0x0078) AM_NOP /* write: LED control - not used */
|
||||
AM_RANGE(0x1e84, 0x1e84) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("foreground_bank")
|
||||
AM_RANGE(0x1e85, 0x1e85) AM_MIRROR(0x0078) AM_NOP
|
||||
AM_RANGE(0x1e86, 0x1e86) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_audio_reset_w)
|
||||
AM_RANGE(0x1e87, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("video_off")
|
||||
AM_RANGE(0x1e80, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_DEVWRITE("outlatch", ls259_device, write_d7)
|
||||
AM_RANGE(0x1f00, 0x1f00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(jedi_audio_latch_w)
|
||||
AM_RANGE(0x1f80, 0x1f80) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(rom_banksel_w)
|
||||
AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("backgroundram")
|
||||
@ -343,6 +345,15 @@ static MACHINE_CONFIG_START( jedi )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 14J
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jedi_state, coin_counter_left_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jedi_state, coin_counter_right_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // LED control - not used
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // LED control - not used
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jedi_state, foreground_bank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(jedi_state, audio_reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jedi_state, video_off_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -1,11 +1,12 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ivan Vangelista
|
||||
// copyright-holders:AJR
|
||||
// PINBALL
|
||||
// Skeleton driver for Joctronic pinballs.
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74157.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/z80ctc.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -23,6 +24,7 @@ public:
|
||||
, m_soundcpu(*this, "soundcpu")
|
||||
, m_oki(*this, "oki")
|
||||
, m_adpcm_select(*this, "adpcm_select")
|
||||
, m_driver_latch(*this, "drivers%u", 1)
|
||||
, m_soundbank(*this, "soundbank")
|
||||
{ }
|
||||
|
||||
@ -63,6 +65,7 @@ private:
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
optional_device<msm5205_device> m_oki;
|
||||
optional_device<ls157_device> m_adpcm_select;
|
||||
optional_device_array<hc259_device, 6> m_driver_latch;
|
||||
optional_memory_bank m_soundbank;
|
||||
u8 m_soundlatch;
|
||||
bool m_adpcm_toggle;
|
||||
@ -124,7 +127,7 @@ static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, joctronic_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x4000) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_READ(csin_r) // CSIN
|
||||
AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // PORTDS
|
||||
AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // PORTDS
|
||||
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0fc7) AM_WRITE(display_1_w) // CSD1
|
||||
AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x0fc7) AM_WRITE(display_2_w) // CSD2
|
||||
AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0fc7) AM_WRITE(display_3_w) // CSD3
|
||||
@ -159,7 +162,8 @@ WRITE8_MEMBER(joctronic_state::display_strobe_w)
|
||||
|
||||
WRITE8_MEMBER(joctronic_state::drivers_w)
|
||||
{
|
||||
logerror("drivers[%d] = $%02X\n", offset, data);
|
||||
for (int i = 0; i < 6; ++i)
|
||||
m_driver_latch[i]->write_bit(offset, BIT(data, i));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(joctronic_state::display_ck_w)
|
||||
@ -171,7 +175,7 @@ static ADDRESS_MAP_START( slalom03_maincpu_map, AS_PROGRAM, 8, joctronic_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // CSPORT
|
||||
AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // CSPORT
|
||||
AM_RANGE(0xa008, 0xa008) AM_MIRROR(0x0fc7) AM_WRITE(display_strobe_w) // STROBE
|
||||
AM_RANGE(0xa010, 0xa017) AM_MIRROR(0x0fc0) AM_WRITE(drivers_w)
|
||||
AM_RANGE(0xa018, 0xa018) AM_MIRROR(0x0fc7) AM_WRITE(display_ck_w) // CKD
|
||||
@ -326,6 +330,11 @@ static MACHINE_CONFIG_START( joctronic )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram") // 5516
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC4 - exact type unknown
|
||||
//MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, display_select_w)) MCFG_DEVCB_MASK(0x07)
|
||||
//MCFG_DEVCB_CHAIN_OUTPUT(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(4)
|
||||
//MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(joctronic_state, display_reset_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/4) // 3 MHz
|
||||
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT
|
||||
@ -362,10 +371,22 @@ static MACHINE_CONFIG_START( slalom03 )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram") // 5516
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6 - exact type unknown
|
||||
//MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(joctronic_state, cont_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(3) MCFG_DEVCB_MASK(0x38)
|
||||
//MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(joctronic_state, slalom03_reset_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/2) // 6 MHz
|
||||
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
//MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT
|
||||
|
||||
MCFG_DEVICE_ADD("drivers1", HC259, 0)
|
||||
MCFG_DEVICE_ADD("drivers2", HC259, 0)
|
||||
MCFG_DEVICE_ADD("drivers3", HC259, 0)
|
||||
MCFG_DEVICE_ADD("drivers4", HC259, 0)
|
||||
MCFG_DEVICE_ADD("drivers5", HC259, 0)
|
||||
MCFG_DEVICE_ADD("drivers6", HC259, 0)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -104,6 +104,7 @@
|
||||
#include "includes/pacman.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -114,7 +115,7 @@ public:
|
||||
jrpacman_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: pacman_state(mconfig, type, tag) { }
|
||||
DECLARE_WRITE8_MEMBER(jrpacman_interrupt_vector_w);
|
||||
DECLARE_WRITE8_MEMBER(irq_mask_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
|
||||
DECLARE_DRIVER_INIT(jrpacman);
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
};
|
||||
@ -127,9 +128,9 @@ WRITE8_MEMBER(jrpacman_state::jrpacman_interrupt_vector_w)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(jrpacman_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(jrpacman_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
m_irq_mask = state;
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@ -144,20 +145,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jrpacman_state )
|
||||
AM_RANGE(0x4800, 0x4fef) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x503f) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("latch1", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x507f) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x5070) AM_WRITE(pengo_palettebank_w)
|
||||
AM_RANGE(0x5071, 0x5071) AM_WRITE(pengo_colortablebank_w)
|
||||
AM_RANGE(0x5073, 0x5073) AM_WRITE(jrpacman_bgpriority_w)
|
||||
AM_RANGE(0x5074, 0x5074) AM_WRITE(jrpacman_charbank_w)
|
||||
AM_RANGE(0x5075, 0x5075) AM_WRITE(jrpacman_spritebank_w)
|
||||
AM_RANGE(0x5070, 0x5077) AM_DEVWRITE("latch2", ls259_device, write_d0)
|
||||
AM_RANGE(0x5080, 0x50bf) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0x5080, 0x5080) AM_WRITE(jrpacman_scroll_w)
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_WRITENOP
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x8000, 0xdfff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -283,6 +278,21 @@ static MACHINE_CONFIG_START( jrpacman )
|
||||
MCFG_CPU_IO_MAP(port_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", jrpacman_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("latch1", LS259, 0) // 5P
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jrpacman_state, coin_counter_w))
|
||||
|
||||
MCFG_DEVICE_ADD("latch2", LS259, 0) // 1H
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, pengo_palettebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jrpacman_state, pengo_colortablebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, jrpacman_bgpriority_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jrpacman_state, jrpacman_charbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(jrpacman_state, jrpacman_spritebank_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60.606060)
|
||||
|
@ -86,6 +86,7 @@ Blitter source graphics
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/konami1.h"
|
||||
#include "machine/watchdog.h"
|
||||
@ -123,9 +124,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(sh_irqtrigger_w);
|
||||
DECLARE_WRITE8_MEMBER(i8039_irq_w);
|
||||
DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w);
|
||||
DECLARE_WRITE8_MEMBER(flip_screen_w);
|
||||
DECLARE_WRITE8_MEMBER(coincounter_w);
|
||||
DECLARE_WRITE8_MEMBER(irq_enable_w);
|
||||
DECLARE_READ8_MEMBER(portA_r);
|
||||
DECLARE_WRITE8_MEMBER(portB_w);
|
||||
|
||||
@ -276,25 +274,6 @@ WRITE8_MEMBER(junofrst_state::i8039_irqen_and_status_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(junofrst_state::flip_screen_w)
|
||||
{
|
||||
tutankhm_flip_screen_x_w(space, 0, data);
|
||||
tutankhm_flip_screen_y_w(space, 0, data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(junofrst_state::coincounter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(junofrst_state::irq_enable_w)
|
||||
{
|
||||
m_irq_enable = data & 1;
|
||||
if (!m_irq_enable)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_RAM AM_SHARE("videoram")
|
||||
AM_RANGE(0x8000, 0x800f) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
@ -304,10 +283,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state )
|
||||
AM_RANGE(0x8024, 0x8024) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x8028, 0x8028) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x802c, 0x802c) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x8030, 0x8030) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0x8031, 0x8032) AM_WRITE(coincounter_w)
|
||||
AM_RANGE(0x8033, 0x8033) AM_WRITEONLY AM_SHARE("scroll") /* not used in Juno */
|
||||
AM_RANGE(0x8034, 0x8035) AM_WRITE(flip_screen_w)
|
||||
AM_RANGE(0x8030, 0x8037) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x8040, 0x8040) AM_WRITE(sh_irqtrigger_w)
|
||||
AM_RANGE(0x8050, 0x8050) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0x8060, 0x8060) AM_WRITE(bankselect_w)
|
||||
@ -394,8 +370,6 @@ MACHINE_RESET_MEMBER(junofrst_state,junofrst)
|
||||
{
|
||||
m_i8039_status = 0;
|
||||
m_last_irq = 0;
|
||||
m_flip_x = 0;
|
||||
m_flip_y = 0;
|
||||
m_blitterdata[0] = 0;
|
||||
m_blitterdata[1] = 0;
|
||||
m_blitterdata[2] = 0;
|
||||
@ -426,6 +400,14 @@ static MACHINE_CONFIG_START( junofrst )
|
||||
MCFG_MCS48_PORT_P1_OUT_CB(DEVWRITE8("dac", dac_byte_interface, write))
|
||||
MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(junofrst_state, i8039_irqen_and_status_w))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(junofrst_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(junofrst_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(junofrst_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(junofrst_state, flip_screen_x_w)) // HFF
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(junofrst_state, flip_screen_y_w)) // VFLIP
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(junofrst_state,junofrst)
|
||||
|
@ -68,7 +68,7 @@ IO ports and memory map changes. Dip switches differ too.
|
||||
#include "includes/kchamp.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -78,17 +78,22 @@ IO ports and memory map changes. Dip switches differ too.
|
||||
* VS Version *
|
||||
********************/
|
||||
|
||||
WRITE8_MEMBER(kchamp_state::control_w)
|
||||
WRITE_LINE_MEMBER(kchamp_state::nmi_enable_w)
|
||||
{
|
||||
m_nmi_enable = data & 1;
|
||||
m_nmi_enable = state;
|
||||
if (!m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(kchamp_state::sound_reset_w)
|
||||
WRITE_LINE_MEMBER(kchamp_state::sound_reset_w)
|
||||
{
|
||||
if (!(data & 1))
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
if (!state)
|
||||
{
|
||||
m_ay[0]->reset();
|
||||
m_ay[1]->reset();
|
||||
sound_control_w(machine().dummy_space(), 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(kchamp_state::sound_control_w)
|
||||
@ -115,9 +120,8 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( kchampvs_io_map, AS_IO, 8, kchamp_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_WRITE(kchamp_flipscreen_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(control_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(sound_reset_w)
|
||||
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x40, 0x40) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0x80, 0x80) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0xc0, 0xc0) AM_READ_PORT("DSW")
|
||||
@ -170,8 +174,8 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( kchamp_io_map, AS_IO, 8, kchamp_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW") AM_WRITE(kchamp_flipscreen_w)
|
||||
AM_RANGE(0x81, 0x81) AM_WRITE(control_w)
|
||||
AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0x80, 0x87) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x90, 0x90) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x98, 0x98) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xa0, 0xa0) AM_READ_PORT("SYSTEM")
|
||||
@ -404,6 +408,11 @@ static MACHINE_CONFIG_START( kchampvs )
|
||||
MCFG_CPU_IO_MAP(kchampvs_sound_io_map) /* irq's triggered from main cpu */
|
||||
/* nmi's from msm5205 */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8C
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(kchamp_state, sound_reset_w))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchampvs)
|
||||
|
||||
/* video hardware */
|
||||
@ -460,6 +469,10 @@ static MACHINE_CONFIG_START( kchamp )
|
||||
/* irq's triggered from main cpu */
|
||||
/* nmi's from 125 Hz clock */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w))
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchamp)
|
||||
|
||||
/* video hardware */
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "includes/kyugo.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
@ -65,21 +66,14 @@ ADDRESS_MAP_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(kyugo_state::nmi_mask_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_sub_cpu_control_w)
|
||||
{
|
||||
m_subcpu->set_input_line(INPUT_LINE_HALT, data ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_nmi_mask = state;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( kyugo_main_portmap, AS_IO, 8, kyugo_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x07)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(kyugo_nmi_mask_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(kyugo_flipscreen_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(kyugo_sub_cpu_control_w)
|
||||
AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -499,11 +493,6 @@ void kyugo_state::machine_start()
|
||||
|
||||
void kyugo_state::machine_reset()
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
// must start with interrupts and sub CPU disabled
|
||||
m_nmi_mask = 0;
|
||||
kyugo_sub_cpu_control_w(space, 0, 0);
|
||||
|
||||
m_scroll_x_lo = 0;
|
||||
m_scroll_x_hi = 0;
|
||||
m_scroll_y = 0;
|
||||
@ -533,6 +522,10 @@ static MACHINE_CONFIG_START( kyugo_base )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kyugo_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kyugo_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -64,6 +64,7 @@ TODO:
|
||||
#include "includes/ladybug.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/sn76496.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -78,7 +79,7 @@ static ADDRESS_MAP_START( ladybug_map, AS_PROGRAM, 8, ladybug_state )
|
||||
AM_RANGE(0x9001, 0x9001) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x9002, 0x9002) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x9003, 0x9003) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(ladybug_flipscreen_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xb000, 0xbfff) AM_DEVWRITE("sn1", sn76489_device, write)
|
||||
AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("sn2", sn76489_device, write)
|
||||
AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(ladybug_videoram_w) AM_SHARE("videoram")
|
||||
@ -535,6 +536,9 @@ static MACHINE_CONFIG_START( ladybug )
|
||||
MCFG_PALETTE_INDIRECT_ENTRIES(32)
|
||||
MCFG_PALETTE_INIT_OWNER(ladybug_state,ladybug)
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0) // L5 on video board or H3 on single board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ladybug_state, flipscreen_w)) // no other outputs used
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(ladybug_state,ladybug)
|
||||
|
||||
/* sound hardware */
|
||||
|
@ -168,15 +168,33 @@ void liberatr_state::machine_reset()
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER( liberatr_state::led_w )
|
||||
WRITE8_MEMBER(liberatr_state::output_latch_w)
|
||||
{
|
||||
output().set_led_value(offset, ~data & 0x10);
|
||||
m_outlatch->write_bit(offset, BIT(data, 4));
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( liberatr_state::coin_counter_w )
|
||||
WRITE_LINE_MEMBER(liberatr_state::start_led_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset ^ 0x01, data & 0x10);
|
||||
output().set_led_value(0, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(liberatr_state::start_led_2_w)
|
||||
{
|
||||
output().set_led_value(1, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(liberatr_state::coin_counter_left_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(liberatr_state::coin_counter_right_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -187,17 +205,17 @@ WRITE8_MEMBER( liberatr_state::coin_counter_w )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER( liberatr_state::trackball_reset_w )
|
||||
WRITE_LINE_MEMBER(liberatr_state::trackball_reset_w)
|
||||
{
|
||||
/* on the rising edge of /ctrld, the /ld signal on the LS191 is released and the value of the switches */
|
||||
/* input becomes the starting point for the trackball counters */
|
||||
if (((data ^ m_ctrld) & 0x10) && (data & 0x10))
|
||||
if (!m_ctrld && state)
|
||||
{
|
||||
uint8_t trackball = ioport("FAKE")->read();
|
||||
uint8_t switches = ioport("IN0")->read();
|
||||
m_trackball_offset = ((trackball & 0xf0) - (switches & 0xf0)) | ((trackball - switches) & 0x0f);
|
||||
}
|
||||
m_ctrld = data & 0x10;
|
||||
m_ctrld = state;
|
||||
}
|
||||
|
||||
|
||||
@ -279,10 +297,7 @@ static ADDRESS_MAP_START( liberatr_map, AS_PROGRAM, 8, liberatr_state )
|
||||
AM_RANGE(0x6600, 0x6600) AM_WRITE(earom_control_w)
|
||||
AM_RANGE(0x6800, 0x6800) AM_WRITEONLY AM_SHARE("planet_frame")
|
||||
AM_RANGE(0x6a00, 0x6a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x6c00, 0x6c01) AM_WRITE(led_w)
|
||||
AM_RANGE(0x6c04, 0x6c04) AM_WRITE(trackball_reset_w)
|
||||
AM_RANGE(0x6c05, 0x6c06) AM_WRITE(coin_counter_w)
|
||||
AM_RANGE(0x6c07, 0x6c07) AM_WRITEONLY AM_SHARE("planet_select")
|
||||
AM_RANGE(0x6c00, 0x6c07) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x6e00, 0x6e3f) AM_WRITE(earom_w)
|
||||
AM_RANGE(0x7000, 0x701f) AM_DEVREADWRITE("pokey2", pokey_device, read, write)
|
||||
AM_RANGE(0x7800, 0x781f) AM_DEVREADWRITE("pokey1", pokey_device, read, write)
|
||||
@ -312,10 +327,7 @@ static ADDRESS_MAP_START( liberat2_map, AS_PROGRAM, 8, liberatr_state )
|
||||
AM_RANGE(0x4800, 0x483f) AM_READ(earom_r)
|
||||
AM_RANGE(0x4800, 0x4800) AM_WRITEONLY AM_SHARE("planet_frame")
|
||||
AM_RANGE(0x4a00, 0x4a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x4c00, 0x4c01) AM_WRITE(led_w)
|
||||
AM_RANGE(0x4c04, 0x4c04) AM_WRITE(trackball_reset_w)
|
||||
AM_RANGE(0x4c05, 0x4c06) AM_WRITE(coin_counter_w)
|
||||
AM_RANGE(0x4c07, 0x4c07) AM_WRITEONLY AM_SHARE("planet_select")
|
||||
AM_RANGE(0x4c00, 0x4c07) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x4e00, 0x4e3f) AM_WRITE(earom_w)
|
||||
AM_RANGE(0x5000, 0x501f) AM_DEVREADWRITE("pokey2", pokey_device, read, write)
|
||||
AM_RANGE(0x5800, 0x581f) AM_DEVREADWRITE("pokey1", pokey_device, read, write)
|
||||
@ -424,6 +436,16 @@ static MACHINE_CONFIG_START( liberatr )
|
||||
|
||||
MCFG_ER2055_ADD("earom")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(liberatr_state, start_led_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(liberatr_state, start_led_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // TBSWP
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // SPARE
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(liberatr_state, trackball_reset_w)) // CTRLD
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(liberatr_state, coin_counter_right_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(liberatr_state, coin_counter_left_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(liberatr_state, planet_select_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -112,6 +112,16 @@ static MACHINE_CONFIG_START( lisa )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // U4E
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(lisa_state, diag1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(lisa_state, diag2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(lisa_state, seg1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(lisa_state, seg2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(lisa_state, setup_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(lisa_state, sfmsk_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(lisa_state, vtmsk_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(lisa_state, hdmsk_w))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -58,6 +58,7 @@ L056-6 9A " " VLI-8-4 7A "
|
||||
#include "cpu/cop400/cop400.h"
|
||||
#include "cpu/tms9900/tms9995.h"
|
||||
#include "cpu/tms9900/tms9980a.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -115,7 +116,8 @@ public:
|
||||
m_dac(*this, "dac"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_soundlatch(*this, "soundlatch") { }
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_watchdog(*this, "watchdog") { }
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
@ -126,33 +128,29 @@ public:
|
||||
/* tilemaps */
|
||||
tilemap_t * m_bg_tilemap;
|
||||
|
||||
/* sound state */
|
||||
uint8_t m_sound[8];
|
||||
|
||||
int m_last;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(flip_screen_x_w);
|
||||
DECLARE_WRITE8_MEMBER(flip_screen_y_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
|
||||
DECLARE_WRITE8_MEMBER(looping_videoram_w);
|
||||
DECLARE_WRITE8_MEMBER(looping_colorram_w);
|
||||
DECLARE_WRITE8_MEMBER(level2_irq_set);
|
||||
DECLARE_WRITE8_MEMBER(main_irq_ack_w);
|
||||
DECLARE_WRITE8_MEMBER(looping_souint_clr);
|
||||
DECLARE_WRITE_LINE_MEMBER(level2_irq_set);
|
||||
DECLARE_WRITE_LINE_MEMBER(main_irq_ack_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(watchdog_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(looping_souint_clr);
|
||||
DECLARE_WRITE8_MEMBER(looping_soundlatch_w);
|
||||
DECLARE_WRITE8_MEMBER(ballon_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(ballon_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(out_0_w);
|
||||
DECLARE_WRITE8_MEMBER(out_2_w);
|
||||
DECLARE_READ8_MEMBER(adc_r);
|
||||
DECLARE_WRITE8_MEMBER(adc_w);
|
||||
DECLARE_WRITE8_MEMBER(plr2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(plr2_w);
|
||||
DECLARE_READ8_MEMBER(cop_unk_r);
|
||||
DECLARE_READ_LINE_MEMBER(cop_serial_r);
|
||||
DECLARE_WRITE8_MEMBER(cop_l_w);
|
||||
DECLARE_READ8_MEMBER(protection_r);
|
||||
DECLARE_WRITE_LINE_MEMBER(looping_spcint);
|
||||
DECLARE_WRITE8_MEMBER(looping_sound_sw);
|
||||
DECLARE_WRITE8_MEMBER(ay_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(speech_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(ay_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(speech_enable_w);
|
||||
DECLARE_DRIVER_INIT(looping);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
virtual void machine_start() override;
|
||||
@ -168,6 +166,7 @@ public:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<watchdog_timer_device> m_watchdog;
|
||||
};
|
||||
|
||||
|
||||
@ -248,16 +247,16 @@ void looping_state::video_start()
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(looping_state::flip_screen_x_w)
|
||||
WRITE_LINE_MEMBER(looping_state::flip_screen_x_w)
|
||||
{
|
||||
flip_screen_x_set(~data & 0x01);
|
||||
flip_screen_x_set(!state);
|
||||
m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::flip_screen_y_w)
|
||||
WRITE_LINE_MEMBER(looping_state::flip_screen_y_w)
|
||||
{
|
||||
flip_screen_y_set(~data & 0x01);
|
||||
flip_screen_y_set(!state);
|
||||
m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0);
|
||||
}
|
||||
|
||||
@ -345,7 +344,6 @@ uint32_t looping_state::screen_update_looping(screen_device &screen, bitmap_ind1
|
||||
|
||||
void looping_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_sound));
|
||||
}
|
||||
|
||||
void looping_state::machine_reset()
|
||||
@ -366,25 +364,30 @@ INTERRUPT_GEN_MEMBER(looping_state::looping_interrupt)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::level2_irq_set)
|
||||
WRITE_LINE_MEMBER(looping_state::level2_irq_set)
|
||||
{
|
||||
logerror("Level 2 int = %d\n", data);
|
||||
if (!(data & 1))
|
||||
logerror("Level 2 int = %d\n", state);
|
||||
if (state == 0)
|
||||
m_maincpu->set_input_line(INT_9995_INT1, ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::main_irq_ack_w)
|
||||
WRITE_LINE_MEMBER(looping_state::main_irq_ack_w)
|
||||
{
|
||||
if (data == 0)
|
||||
if (state == 0)
|
||||
m_maincpu->set_input_line(INT_9995_INT1, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::looping_souint_clr)
|
||||
WRITE_LINE_MEMBER(looping_state::watchdog_w)
|
||||
{
|
||||
logerror("Soundint clr = %d\n", data);
|
||||
if (data == 0)
|
||||
m_watchdog->watchdog_reset();
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(looping_state::looping_souint_clr)
|
||||
{
|
||||
logerror("Soundint clr = %d\n", state);
|
||||
if (state == 0)
|
||||
m_audiocpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
@ -421,8 +424,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw)
|
||||
0007 = AFA
|
||||
*/
|
||||
|
||||
m_sound[offset + 1] = data ^ 1;
|
||||
m_dac->write(((m_sound[2] << 1) + m_sound[3]) * m_sound[7]);
|
||||
m_dac->write(((BIT(~data, 2) << 1) + BIT(~data, 3)) * BIT(~data, 7));
|
||||
}
|
||||
|
||||
|
||||
@ -433,7 +435,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(looping_state::ay_enable_w)
|
||||
WRITE_LINE_MEMBER(looping_state::ay_enable_w)
|
||||
{
|
||||
device_t *device = machine().device("aysnd");
|
||||
int output;
|
||||
@ -441,24 +443,22 @@ WRITE8_MEMBER(looping_state::ay_enable_w)
|
||||
device_sound_interface *sound;
|
||||
device->interface(sound);
|
||||
for (output = 0; output < 3; output++)
|
||||
sound->set_output_gain(output, (data & 1) ? 1.0 : 0.0);
|
||||
sound->set_output_gain(output, state ? 1.0 : 0.0);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::speech_enable_w)
|
||||
WRITE_LINE_MEMBER(looping_state::speech_enable_w)
|
||||
{
|
||||
device_t *device = machine().device("tms");
|
||||
device_sound_interface *sound;
|
||||
device->interface(sound);
|
||||
sound->set_output_gain(0, (data & 1) ? 1.0 : 0.0);
|
||||
sound->set_output_gain(0, state ? 1.0 : 0.0);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(looping_state::ballon_enable_w)
|
||||
WRITE_LINE_MEMBER(looping_state::ballon_enable_w)
|
||||
{
|
||||
if (m_last != data)
|
||||
osd_printf_debug("ballon_enable_w = %d\n", data);
|
||||
m_last = data;
|
||||
osd_printf_debug("ballon_enable_w = %d\n", state);
|
||||
}
|
||||
|
||||
|
||||
@ -475,7 +475,7 @@ WRITE8_MEMBER(looping_state::out_2_w){ osd_printf_debug("out2 = %02X\n", data);
|
||||
READ8_MEMBER(looping_state::adc_r){ osd_printf_debug("%04X:ADC read\n", space.device().safe_pc()); return 0xff; }
|
||||
WRITE8_MEMBER(looping_state::adc_w){ osd_printf_debug("%04X:ADC write = %02X\n", space.device().safe_pc(), data); }
|
||||
|
||||
WRITE8_MEMBER(looping_state::plr2_w)
|
||||
WRITE_LINE_MEMBER(looping_state::plr2_w)
|
||||
{
|
||||
/* set to 1 after IDLE, cleared to 0 during processing */
|
||||
/* is this an LED on the PCB? */
|
||||
@ -545,9 +545,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state )
|
||||
AM_RANGE(0x9840, 0x987f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x9880, 0x98ff) AM_MIRROR(0x0700) AM_RAM
|
||||
|
||||
AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x07f8) AM_WRITE(level2_irq_set)
|
||||
AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_x_w)
|
||||
AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_y_w)
|
||||
AM_RANGE(0xb000, 0xb007) AM_MIRROR(0x07f8) AM_DEVWRITE("videolatch", ls259_device, write_d0)
|
||||
|
||||
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||
AM_RANGE(0xf800, 0xf800) AM_MIRROR(0x03fc) AM_READ_PORT("P1") AM_WRITE(out_0_w) /* /OUT0 */
|
||||
@ -557,14 +555,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( looping_io_map, AS_IO, 8, looping_state )
|
||||
/* 400 = A16 */
|
||||
/* 401 = A17 */
|
||||
/* 402 = COLOR 9 */
|
||||
AM_RANGE(0x403, 0x403) AM_WRITE(plr2_w)
|
||||
/* 404 = C0 */
|
||||
/* 405 = C1 */
|
||||
AM_RANGE(0x406, 0x406) AM_WRITE(main_irq_ack_w)
|
||||
AM_RANGE(0x407, 0x407) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x400, 0x407) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -582,12 +573,8 @@ static ADDRESS_MAP_START( looping_sound_map, AS_PROGRAM, 8, looping_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( looping_sound_io_map, AS_IO, 8, looping_state )
|
||||
AM_RANGE(0x000, 0x000) AM_WRITE(looping_souint_clr)
|
||||
AM_RANGE(0x001, 0x007) AM_WRITE(looping_sound_sw)
|
||||
AM_RANGE(0x008, 0x008) AM_WRITE(ay_enable_w)
|
||||
AM_RANGE(0x009, 0x009) AM_WRITE(speech_enable_w)
|
||||
AM_RANGE(0x00a, 0x00a) AM_WRITE(ballon_enable_w)
|
||||
AM_RANGE(0x00b, 0x00f) AM_NOP
|
||||
AM_RANGE(0x000, 0x007) AM_DEVWRITE("sen0", ls259_device, write_d0)
|
||||
AM_RANGE(0x008, 0x00f) AM_DEVWRITE("sen1", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -638,6 +625,16 @@ static MACHINE_CONFIG_START( looping )
|
||||
MCFG_COP400_READ_IN_CB(READ8(looping_state, cop_unk_r))
|
||||
MCFG_COP400_READ_SI_CB(READLINE(looping_state, cop_serial_r))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C9 on CPU board
|
||||
// Q0 = A16
|
||||
// Q1 = A17
|
||||
// Q2 = COLOR 9
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(looping_state, plr2_w))
|
||||
// Q4 = C0
|
||||
// Q5 = C1
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, main_irq_ack_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, watchdog_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -651,6 +648,11 @@ static MACHINE_CONFIG_START( looping )
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
MCFG_PALETTE_INIT_OWNER(looping_state, looping)
|
||||
|
||||
MCFG_DEVICE_ADD("videolatch", LS259, 0) // E2 on video board
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, level2_irq_set))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, flip_screen_y_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("speaker")
|
||||
|
||||
@ -667,6 +669,15 @@ static MACHINE_CONFIG_START( looping )
|
||||
MCFG_SOUND_ADD("dac", DAC_2BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.15) // unknown DAC
|
||||
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
|
||||
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
|
||||
|
||||
MCFG_DEVICE_ADD("sen0", LS259, 0) // B3 on sound board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, looping_souint_clr))
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(looping_state, looping_sound_sw))
|
||||
|
||||
MCFG_DEVICE_ADD("sen1", LS259, 0) // A1 on sound board with outputs connected to 4016 at B1
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, ay_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, speech_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(looping_state, ballon_enable_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -120,6 +120,7 @@ Dip locations verified for:
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/samples.h"
|
||||
@ -182,10 +183,11 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(m63_videoram_w);
|
||||
DECLARE_WRITE8_MEMBER(m63_colorram_w);
|
||||
DECLARE_WRITE8_MEMBER(m63_videoram2_w);
|
||||
DECLARE_WRITE8_MEMBER(m63_palbank_w);
|
||||
DECLARE_WRITE8_MEMBER(m63_flipscreen_w);
|
||||
DECLARE_WRITE8_MEMBER(fghtbskt_flipscreen_w);
|
||||
DECLARE_WRITE8_MEMBER(coin_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pal_bank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(m63_flipscreen_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(fghtbskt_flipscreen_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin2_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_irq_w);
|
||||
DECLARE_WRITE8_MEMBER(snddata_w);
|
||||
DECLARE_WRITE8_MEMBER(p1_w);
|
||||
@ -195,7 +197,7 @@ public:
|
||||
DECLARE_READ8_MEMBER(snddata_r);
|
||||
DECLARE_WRITE8_MEMBER(fghtbskt_samples_w);
|
||||
SAMPLES_START_CB_MEMBER(fghtbskt_sh_start);
|
||||
DECLARE_WRITE8_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
|
||||
DECLARE_DRIVER_INIT(wilytowr);
|
||||
DECLARE_DRIVER_INIT(fghtbskt);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
@ -285,27 +287,21 @@ WRITE8_MEMBER(m63_state::m63_videoram2_w)
|
||||
m_fg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(m63_state::m63_palbank_w)
|
||||
WRITE_LINE_MEMBER(m63_state::pal_bank_w)
|
||||
{
|
||||
if (m_pal_bank != (data & 0x01))
|
||||
{
|
||||
m_pal_bank = data & 0x01;
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
m_pal_bank = state;
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(m63_state::m63_flipscreen_w)
|
||||
WRITE_LINE_MEMBER(m63_state::m63_flipscreen_w)
|
||||
{
|
||||
if (flip_screen() != (~data & 0x01))
|
||||
{
|
||||
flip_screen_set(~data & 0x01);
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
flip_screen_set(!state);
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(m63_state::fghtbskt_flipscreen_w)
|
||||
WRITE_LINE_MEMBER(m63_state::fghtbskt_flipscreen_w)
|
||||
{
|
||||
flip_screen_set(data);
|
||||
flip_screen_set(state);
|
||||
m_fg_flag = flip_screen() ? TILE_FLIPX : 0;
|
||||
}
|
||||
|
||||
@ -388,9 +384,14 @@ uint32_t m63_state::screen_update_m63(screen_device &screen, bitmap_ind16 &bitma
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(m63_state::coin_w)
|
||||
WRITE_LINE_MEMBER(m63_state::coin1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 0x01);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(m63_state::coin2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(m63_state::snd_irq_w)
|
||||
@ -458,9 +459,9 @@ WRITE8_MEMBER(m63_state::fghtbskt_samples_w)
|
||||
m_samples->start_raw(0, m_samplebuf.get() + ((data & 0xf0) << 8), 0x2000, 8000);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(m63_state::nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(m63_state::nmi_mask_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
m_nmi_mask = state;
|
||||
}
|
||||
|
||||
|
||||
@ -473,10 +474,7 @@ static ADDRESS_MAP_START( m63_map, AS_PROGRAM, 8, m63_state )
|
||||
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_SHARE("videoram2")
|
||||
AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
|
||||
AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w)
|
||||
AM_RANGE(0xf006, 0xf007) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xf000, 0xf007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("P1") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITENOP /* continues game when in stop mode (cleared by NMI handler) */
|
||||
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1")
|
||||
@ -501,14 +499,8 @@ static ADDRESS_MAP_START( fghtbskt_map, AS_PROGRAM, 8, m63_state )
|
||||
AM_RANGE(0xf000, 0xf000) AM_WRITE(snd_irq_w)
|
||||
AM_RANGE(0xf001, 0xf001) AM_WRITENOP
|
||||
AM_RANGE(0xf002, 0xf002) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0xf800, 0xf800) AM_WRITENOP
|
||||
AM_RANGE(0xf801, 0xf801) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xf802, 0xf802) AM_WRITE(fghtbskt_flipscreen_w)
|
||||
AM_RANGE(0xf803, 0xf803) AM_WRITENOP
|
||||
AM_RANGE(0xf804, 0xf804) AM_WRITENOP
|
||||
AM_RANGE(0xf805, 0xf805) AM_WRITENOP
|
||||
AM_RANGE(0xf806, 0xf806) AM_WRITENOP
|
||||
AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w)
|
||||
AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w) // FIXME
|
||||
AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( i8039_map, AS_PROGRAM, 8, m63_state )
|
||||
@ -756,6 +748,13 @@ static MACHINE_CONFIG_START( m63 )
|
||||
MCFG_CPU_PROGRAM_MAP(m63_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // probably chip at E7 obscured by pulldown resistor
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(m63_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, m63_flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(m63_state, pal_bank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(m63_state, coin1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, coin2_w))
|
||||
|
||||
MCFG_CPU_ADD("soundcpu",I8039,XTAL_12MHz/4) /* ????? */
|
||||
MCFG_CPU_PROGRAM_MAP(i8039_map)
|
||||
MCFG_CPU_IO_MAP(i8039_port_map)
|
||||
@ -806,6 +805,11 @@ static MACHINE_CONFIG_START( fghtbskt )
|
||||
MCFG_CPU_PROGRAM_MAP(fghtbskt_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(m63_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, fghtbskt_flipscreen_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, fghtbskt_samples_w))
|
||||
|
||||
MCFG_CPU_ADD("soundcpu", I8039,XTAL_12MHz/4) /* ????? */
|
||||
MCFG_CPU_PROGRAM_MAP(i8039_map)
|
||||
MCFG_CPU_IO_MAP(i8039_port_map)
|
||||
|
@ -553,6 +553,7 @@ TODO:
|
||||
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "machine/74157.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
@ -581,160 +582,30 @@ TODO:
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
void mappy_state::common_latch_w(uint32_t offset)
|
||||
WRITE_LINE_MEMBER(mappy_state::int_on_w)
|
||||
{
|
||||
int bit = offset & 1;
|
||||
|
||||
switch (offset & 0x0e)
|
||||
{
|
||||
case 0x00: /* INT ON 2 */
|
||||
m_sub_irq_mask = bit;
|
||||
if (!bit)
|
||||
m_subcpu->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 0x02: /* INT ON */
|
||||
m_main_irq_mask = bit;
|
||||
if (!bit)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 0x04: /* n.c. */
|
||||
break;
|
||||
|
||||
case 0x06: /* SOUND ON */
|
||||
m_namco_15xx->mappy_sound_enable(bit);
|
||||
break;
|
||||
|
||||
case 0x0a: /* SUB RESET */
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
case 0x0c: /* n.c. */
|
||||
break;
|
||||
|
||||
case 0x0e: /* n.c. */
|
||||
break;
|
||||
}
|
||||
m_main_irq_mask = state;
|
||||
if (!state)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mappy_state::superpac_latch_w)
|
||||
WRITE_LINE_MEMBER(mappy_state::int_on_2_w)
|
||||
{
|
||||
int bit = offset & 1;
|
||||
|
||||
switch (offset & 0x0e)
|
||||
{
|
||||
case 0x08: /* 4 RESET */
|
||||
switch (m_type)
|
||||
{
|
||||
case GAME_SUPERPAC:
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
case GAME_PACNPAL:
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco59xx->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
case GAME_GROBDA:
|
||||
m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
common_latch_w(offset);
|
||||
break;
|
||||
}
|
||||
m_sub_irq_mask = state;
|
||||
if (!state)
|
||||
m_subcpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mappy_state::phozon_latch_w)
|
||||
WRITE_LINE_MEMBER(mappy_state::int_on_3_w)
|
||||
{
|
||||
int bit = offset & 1;
|
||||
|
||||
switch (offset & 0x0e)
|
||||
{
|
||||
case 0x04:
|
||||
m_sub2_irq_mask = bit;
|
||||
if (!bit)
|
||||
m_subcpu2->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 0x08:
|
||||
m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
case 0x0c:
|
||||
m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
default:
|
||||
common_latch_w(offset);
|
||||
break;
|
||||
}
|
||||
m_sub2_irq_mask = state;
|
||||
if (!state)
|
||||
m_subcpu2->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mappy_state::mappy_latch_w)
|
||||
WRITE_LINE_MEMBER(mappy_state::mappy_flip_w)
|
||||
{
|
||||
int bit = offset & 1;
|
||||
|
||||
switch (offset & 0x0e)
|
||||
{
|
||||
case 0x04: /* FLIP */
|
||||
flip_screen_set(bit);
|
||||
break;
|
||||
|
||||
case 0x08: /* 4 RESET */
|
||||
switch (m_type)
|
||||
{
|
||||
case GAME_MAPPY:
|
||||
m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco58xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
case GAME_DRUAGA:
|
||||
case GAME_DIGDUG2:
|
||||
m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
case GAME_MOTOS:
|
||||
m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
common_latch_w(offset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(mappy_state,superpac)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* Reset all latches */
|
||||
for (int i = 0; i < 0x10; i += 2)
|
||||
superpac_latch_w(space, i, 0);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(mappy_state,phozon)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* Reset all latches */
|
||||
for (int i = 0; i < 0x10; i += 2)
|
||||
phozon_latch_w(space, i, 0);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(mappy_state,mappy)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* Reset all latches */
|
||||
for (int i = 0; i < 0x10; i += 2)
|
||||
mappy_latch_w(space, i, 0);
|
||||
flip_screen_set(state);
|
||||
}
|
||||
|
||||
|
||||
@ -964,7 +835,7 @@ static ADDRESS_MAP_START( superpac_cpu1_map, AS_PROGRAM, 8, mappy_state )
|
||||
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
|
||||
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x5000, 0x500f) AM_WRITE(superpac_latch_w) /* various control bits */
|
||||
AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
|
||||
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0xa000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -975,7 +846,7 @@ static ADDRESS_MAP_START( phozon_cpu1_map, AS_PROGRAM, 8, mappy_state )
|
||||
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
|
||||
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x5000, 0x500f) AM_WRITE(phozon_latch_w) /* various control bits */
|
||||
AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
|
||||
AM_RANGE(0x7000, 0x7000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */
|
||||
ADDRESS_MAP_END
|
||||
@ -987,14 +858,14 @@ static ADDRESS_MAP_START( mappy_cpu1_map, AS_PROGRAM, 8, mappy_state )
|
||||
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
|
||||
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
|
||||
AM_RANGE(0x5000, 0x500f) AM_WRITE(mappy_latch_w) /* various control bits */
|
||||
AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
|
||||
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code (only a000-ffff in Mappy) */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( superpac_cpu2_map, AS_PROGRAM, 8, mappy_state )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */
|
||||
AM_RANGE(0x2000, 0x200f) AM_WRITE(superpac_latch_w) /* various control bits */
|
||||
AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
|
||||
AM_RANGE(0xe000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1005,7 +876,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mappy_cpu2_map, AS_PROGRAM, 8, mappy_state )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */
|
||||
AM_RANGE(0x2000, 0x200f) AM_WRITE(mappy_latch_w) /* various control bits */
|
||||
AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
|
||||
AM_RANGE(0xe000, 0xffff) AM_ROM /* ROM code */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1659,13 +1530,18 @@ static MACHINE_CONFIG_START( superpac_common )
|
||||
MCFG_CPU_PROGRAM_MAP(superpac_cpu2_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
/* synchronization of the CPUs */
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mappy_state,superpac)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", superpac)
|
||||
@ -1709,6 +1585,10 @@ static MACHINE_CONFIG_START( superpac )
|
||||
MCFG_DEVICE_ADD("dipmux", LS157, 0)
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( pacnpal )
|
||||
@ -1735,6 +1615,10 @@ static MACHINE_CONFIG_START( pacnpal )
|
||||
MCFG_DEVICE_ADD("dipmux", LS157, 0)
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco59xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1762,6 +1646,10 @@ static MACHINE_CONFIG_START( grobda )
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("dac", DAC_4BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.275) // alternate route to 15XX-related DAC?
|
||||
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
|
||||
@ -1784,12 +1672,21 @@ static MACHINE_CONFIG_START( phozon )
|
||||
MCFG_CPU_PROGRAM_MAP(phozon_cpu3_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub2_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5C
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, int_on_3_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
/* synchronization of the CPUs */
|
||||
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mappy_state,phozon)
|
||||
|
||||
MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0)
|
||||
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
|
||||
@ -1841,12 +1738,18 @@ static MACHINE_CONFIG_START( mappy_common )
|
||||
MCFG_CPU_PROGRAM_MAP(mappy_cpu2_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, mappy_flip_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
/* synchronization of the CPUs */
|
||||
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(mappy_state,mappy)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mappy)
|
||||
@ -1889,6 +1792,10 @@ static MACHINE_CONFIG_START( mappy )
|
||||
MCFG_DEVICE_ADD("dipmux", LS157, 0)
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( digdug2 )
|
||||
@ -1917,6 +1824,10 @@ static MACHINE_CONFIG_START( digdug2 )
|
||||
MCFG_DEVICE_ADD("dipmux", LS157, 0)
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( todruaga, digdug2 )
|
||||
@ -1951,6 +1862,10 @@ static MACHINE_CONFIG_START( motos )
|
||||
MCFG_DEVICE_ADD("dipmux", LS157, 0)
|
||||
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
|
||||
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -41,6 +41,7 @@ write
|
||||
#include "includes/marineb.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -53,26 +54,15 @@ void marineb_state::machine_reset()
|
||||
{
|
||||
m_palette_bank = 0;
|
||||
m_column_scroll = 0;
|
||||
m_flipscreen_x = 0;
|
||||
m_flipscreen_y = 0;
|
||||
m_marineb_active_low_flipscreen = 0;
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(marineb_state,springer)
|
||||
{
|
||||
marineb_state::machine_reset();
|
||||
|
||||
m_marineb_active_low_flipscreen = 1;
|
||||
}
|
||||
|
||||
void marineb_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_marineb_active_low_flipscreen));
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(marineb_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(marineb_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
m_irq_mask = state;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state )
|
||||
@ -84,9 +74,8 @@ static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state )
|
||||
AM_RANGE(0x9800, 0x9800) AM_WRITE(marineb_column_scroll_w)
|
||||
AM_RANGE(0x9a00, 0x9a00) AM_WRITE(marineb_palette_bank_0_w)
|
||||
AM_RANGE(0x9c00, 0x9c00) AM_WRITE(marineb_palette_bank_1_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0xa001, 0xa001) AM_WRITE(marineb_flipscreen_y_w)
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(marineb_flipscreen_x_w)
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") AM_WRITENOP /* also watchdog */
|
||||
@ -545,6 +534,10 @@ static MACHINE_CONFIG_START( marineb )
|
||||
MCFG_CPU_IO_MAP(marineb_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -580,7 +573,9 @@ MACHINE_CONFIG_END
|
||||
static MACHINE_CONFIG_DERIVED( springer, marineb )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
@ -634,7 +629,9 @@ MACHINE_CONFIG_END
|
||||
static MACHINE_CONFIG_DERIVED( bcruzm12, wanted )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer)
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -440,6 +440,7 @@
|
||||
#include "cpu/z180/z180.h"
|
||||
#include "sound/saa1099.h"
|
||||
#include "sound/msm5205.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/eeprompar.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -452,6 +453,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_msm(*this, "msm"),
|
||||
m_outlatch(*this, "outlatch"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_earom(*this, "earom") ,
|
||||
@ -461,6 +463,7 @@ public:
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<msm5205_device> m_msm;
|
||||
required_device<ls259_device> m_outlatch;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<eeprom_parallel_28xx_device> m_earom;
|
||||
@ -475,22 +478,17 @@ public:
|
||||
int m_earom_enabled;
|
||||
int m_m5205_next;
|
||||
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(bank_w);
|
||||
DECLARE_READ8_MEMBER(earom_r);
|
||||
DECLARE_WRITE8_MEMBER(earom_w);
|
||||
DECLARE_WRITE8_MEMBER(earom_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_sambit0_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_sambit1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(earom_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(msm5205_data_w);
|
||||
DECLARE_WRITE8_MEMBER(irq0_ack_w);
|
||||
DECLARE_WRITE_LINE_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() override;
|
||||
@ -647,40 +645,18 @@ WRITE8_MEMBER(mastboy_state::earom_w)
|
||||
// }
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::earom_enable_w)
|
||||
WRITE_LINE_MEMBER(mastboy_state::earom_enable_w)
|
||||
{
|
||||
/* This is some kind of enable / disable control for backup memory (see Charles's notes) but I'm not
|
||||
sure how it works in practice, if we use it then it writes a lot of data with it disabled */
|
||||
m_earom_enabled = data&1;
|
||||
m_earom_enabled = state;
|
||||
}
|
||||
|
||||
/* MSM5205 Related */
|
||||
|
||||
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) );
|
||||
|
||||
logerror("msm5205 samplerate bit 0, set to %02x\n",data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_sambit1_w)
|
||||
{
|
||||
m_m5205_sambit1 = data & 1;
|
||||
|
||||
m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
|
||||
|
||||
logerror("msm5205 samplerate bit 0, set to %02x\n",data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_reset_w)
|
||||
{
|
||||
m_m5205_part = 0;
|
||||
m_msm->reset_w(data & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::msm5205_data_w)
|
||||
{
|
||||
m_m5205_part = 0;
|
||||
m_m5205_next = data;
|
||||
}
|
||||
|
||||
@ -697,16 +673,15 @@ WRITE_LINE_MEMBER(mastboy_state::adpcm_int)
|
||||
|
||||
/* Interrupt Handling */
|
||||
|
||||
WRITE8_MEMBER(mastboy_state::irq0_ack_w)
|
||||
WRITE_LINE_MEMBER(mastboy_state::irq0_ack_w)
|
||||
{
|
||||
m_irq0_ack = data;
|
||||
if ((data & 1) == 1)
|
||||
if (state)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mastboy_state::interrupt)
|
||||
{
|
||||
if ((m_irq0_ack & 1) == 1)
|
||||
if (m_outlatch->q0_r() == 1)
|
||||
{
|
||||
device.execute().set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
@ -734,11 +709,7 @@ static ADDRESS_MAP_START( mastboy_map, AS_PROGRAM, 8, mastboy_state )
|
||||
AM_RANGE(0xff820, 0xff827) AM_WRITE(bank_w)
|
||||
AM_RANGE(0xff828, 0xff829) AM_DEVWRITE("saa", saa1099_device, write)
|
||||
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(earom_enable_w)
|
||||
AM_RANGE(0xff838, 0xff83f) AM_DEVWRITE("outlatch", ls259_device, write_d0)
|
||||
|
||||
AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -887,8 +858,6 @@ void mastboy_state::machine_start()
|
||||
save_item(NAME(m_earom_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()
|
||||
@ -898,10 +867,6 @@ void mastboy_state::machine_reset()
|
||||
memset( m_tileram, 0x00, 0x01000);
|
||||
memset( m_colram, 0x00, 0x00200);
|
||||
memset( m_vram, 0x00, 0x10000);
|
||||
|
||||
m_m5205_part = 0;
|
||||
m_msm->reset_w(1);
|
||||
m_irq0_ack = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -914,6 +879,12 @@ static MACHINE_CONFIG_START( mastboy )
|
||||
|
||||
MCFG_EEPROM_2816_ADD("earom")
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC17
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mastboy_state, irq0_ack_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, s2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, s1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mastboy_state, earom_enable_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -15,6 +15,7 @@ To enter service mode, keep 1&2 pressed on reset
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/konami1.h"
|
||||
#include "machine/watchdog.h"
|
||||
@ -75,21 +76,24 @@ WRITE8_MEMBER(megazone_state::i8039_irqen_and_status_w)
|
||||
m_i8039_status = (data & 0x70) >> 4;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(megazone_state::megazone_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(megazone_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1 - offset, data); /* 1-offset, because coin counters are in reversed order */
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(megazone_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(megazone_state::coin_counter_2_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(megazone_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = state;
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( megazone_map, AS_PROGRAM, 8, megazone_state )
|
||||
AM_RANGE(0x0000, 0x0001) AM_WRITE(megazone_coin_counter_w) /* coin counter 2, coin counter 1 */
|
||||
AM_RANGE(0x0005, 0x0005) AM_WRITE(megazone_flipscreen_w)
|
||||
AM_RANGE(0x0007, 0x0007) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x0000, 0x0007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x1000, 0x1000) AM_WRITEONLY AM_SHARE("scrolly")
|
||||
AM_RANGE(0x1800, 0x1800) AM_WRITEONLY AM_SHARE("scrollx")
|
||||
@ -224,7 +228,6 @@ void megazone_state::machine_start()
|
||||
|
||||
void megazone_state::machine_reset()
|
||||
{
|
||||
m_flipscreen = 0;
|
||||
m_i8039_status = 0;
|
||||
}
|
||||
|
||||
@ -255,6 +258,12 @@ static MACHINE_CONFIG_START( megazone )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(900))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 13A
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(megazone_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(megazone_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(megazone_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(megazone_state, irq_mask_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -120,6 +120,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
|
||||
#include "includes/mermaid.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/msm5205.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -128,20 +129,30 @@ Stephh's notes (based on the games Z80 code and some tests) :
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::mermaid_ay8910_write_port_w)
|
||||
{
|
||||
if (m_ay8910_enable[0]) m_ay1->data_w(space, offset, data);
|
||||
if (m_ay8910_enable[1]) m_ay2->data_w(space, offset, data);
|
||||
if (m_ay8910_enable[0]) m_ay8910[0]->data_w(space, offset, data);
|
||||
if (m_ay8910_enable[1]) m_ay8910[1]->data_w(space, offset, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::mermaid_ay8910_control_port_w)
|
||||
{
|
||||
if (m_ay8910_enable[0]) m_ay1->address_w(space, offset, data);
|
||||
if (m_ay8910_enable[1]) m_ay2->address_w(space, offset, data);
|
||||
if (m_ay8910_enable[0]) m_ay8910[0]->address_w(space, offset, data);
|
||||
if (m_ay8910_enable[1]) m_ay8910[1]->address_w(space, offset, data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(mermaid_state::ay1_enable_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
m_ay8910_enable[0] = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mermaid_state::ay2_enable_w)
|
||||
{
|
||||
m_ay8910_enable[1] = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mermaid_state::nmi_mask_w)
|
||||
{
|
||||
m_nmi_mask = state;
|
||||
}
|
||||
|
||||
/* Memory Map */
|
||||
@ -156,18 +167,9 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state )
|
||||
AM_RANGE(0xd880, 0xd8bf) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(mermaid_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xe000, 0xe001) AM_RAM AM_SHARE("ay8910_enable")
|
||||
AM_RANGE(0xe002, 0xe004) AM_WRITENOP // ???
|
||||
AM_RANGE(0xe005, 0xe005) AM_WRITE(mermaid_flip_screen_x_w)
|
||||
AM_RANGE(0xe006, 0xe006) AM_WRITE(mermaid_flip_screen_y_w)
|
||||
AM_RANGE(0xe007, 0xe007) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1") AM_WRITENOP // ???
|
||||
AM_RANGE(0xe801, 0xe801) AM_WRITENOP // ???
|
||||
AM_RANGE(0xe802, 0xe802) AM_WRITENOP // ???
|
||||
AM_RANGE(0xe803, 0xe803) AM_WRITENOP // ???
|
||||
AM_RANGE(0xe804, 0xe804) AM_WRITE(rougien_gfxbankswitch1_w)
|
||||
AM_RANGE(0xe805, 0xe805) AM_WRITE(rougien_gfxbankswitch2_w)
|
||||
AM_RANGE(0xe807, 0xe807) AM_WRITENOP // ???
|
||||
AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("latch1", ls259_device, write_d0)
|
||||
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("latch2", ls259_device, write_d0)
|
||||
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P2")
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ(mermaid_collision_r)
|
||||
AM_RANGE(0xf802, 0xf802) AM_WRITENOP // ???
|
||||
@ -175,36 +177,27 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state )
|
||||
AM_RANGE(0xf807, 0xf807) AM_WRITE(mermaid_ay8910_control_port_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::rougien_sample_rom_lo_w)
|
||||
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_lo_w)
|
||||
{
|
||||
m_adpcm_rom_sel = (data & 1) | (m_adpcm_rom_sel & 2);
|
||||
m_adpcm_rom_sel = state | (m_adpcm_rom_sel & 2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::rougien_sample_rom_hi_w)
|
||||
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_hi_w)
|
||||
{
|
||||
m_adpcm_rom_sel = ((data & 1)<<1) | (m_adpcm_rom_sel & 1);
|
||||
m_adpcm_rom_sel = (state <<1) | (m_adpcm_rom_sel & 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mermaid_state::rougien_sample_playback_w)
|
||||
WRITE_LINE_MEMBER(mermaid_state::rougien_sample_playback_w)
|
||||
{
|
||||
if((m_adpcm_play_reg & 1) && ((data & 1) == 0))
|
||||
if (state)
|
||||
{
|
||||
m_adpcm_pos = m_adpcm_rom_sel*0x1000;
|
||||
m_adpcm_end = m_adpcm_pos+0x1000;
|
||||
m_adpcm_idle = 0;
|
||||
m_adpcm->reset_w(0);
|
||||
}
|
||||
|
||||
m_adpcm_play_reg = data & 1;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( rougien_map, AS_PROGRAM, 8, mermaid_state )
|
||||
AM_RANGE(0xe002, 0xe002) AM_WRITE(rougien_sample_playback_w)
|
||||
AM_RANGE(0xe802, 0xe802) AM_WRITE(rougien_sample_rom_hi_w)
|
||||
AM_RANGE(0xe803, 0xe803) AM_WRITE(rougien_sample_rom_lo_w)
|
||||
AM_IMPORT_FROM( mermaid_map )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input Ports */
|
||||
|
||||
static INPUT_PORTS_START( mermaid )
|
||||
@ -371,6 +364,7 @@ void mermaid_state::machine_start()
|
||||
save_item(NAME(m_coll_bit6));
|
||||
save_item(NAME(m_rougien_gfxbank1));
|
||||
save_item(NAME(m_rougien_gfxbank2));
|
||||
save_item(NAME(m_ay8910_enable));
|
||||
|
||||
save_item(NAME(m_adpcm_pos));
|
||||
save_item(NAME(m_adpcm_end));
|
||||
@ -436,6 +430,19 @@ static MACHINE_CONFIG_START( mermaid )
|
||||
MCFG_CPU_PROGRAM_MAP(mermaid_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mermaid_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("latch1", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mermaid_state, ay1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mermaid_state, ay2_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ???
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mermaid_state, flip_screen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mermaid_state, nmi_mask_w))
|
||||
|
||||
MCFG_DEVICE_ADD("latch2", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ???
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // very frequent
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -465,8 +472,12 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( rougien, mermaid )
|
||||
|
||||
MCFG_DEVICE_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(rougien_map)
|
||||
MCFG_DEVICE_MODIFY("latch1")
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_playback_w))
|
||||
|
||||
MCFG_DEVICE_MODIFY("latch2")
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_hi_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_lo_w))
|
||||
|
||||
MCFG_PALETTE_MODIFY("palette")
|
||||
MCFG_PALETTE_INIT_OWNER(mermaid_state,rougien)
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
@ -31,14 +32,16 @@ public:
|
||||
mjsister_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_mainlatch(*this, "mainlatch%u", 1),
|
||||
m_palette(*this, "palette"),
|
||||
m_dac(*this, "dac") { }
|
||||
m_dac(*this, "dac"),
|
||||
m_rombank(*this, "bank1") { }
|
||||
|
||||
/* video-related */
|
||||
std::unique_ptr<bitmap_ind16> m_tmpbitmap0;
|
||||
std::unique_ptr<bitmap_ind16> m_tmpbitmap1;
|
||||
int m_flip_screen;
|
||||
int m_video_enable;
|
||||
bool m_flip_screen;
|
||||
bool m_video_enable;
|
||||
int m_screen_redraw;
|
||||
int m_vrambank;
|
||||
int m_colorbank;
|
||||
@ -46,9 +49,7 @@ public:
|
||||
/* misc */
|
||||
int m_input_sel1;
|
||||
int m_input_sel2;
|
||||
|
||||
int m_rombank0;
|
||||
int m_rombank1;
|
||||
bool m_irq_enable;
|
||||
|
||||
uint32_t m_dac_adr;
|
||||
uint32_t m_dac_bank;
|
||||
@ -58,23 +59,32 @@ public:
|
||||
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device_array<ls259_device, 2> m_mainlatch;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<dac_byte_interface> m_dac;
|
||||
|
||||
/* memory */
|
||||
required_memory_bank m_rombank;
|
||||
uint8_t m_videoram0[0x8000];
|
||||
uint8_t m_videoram1[0x8000];
|
||||
DECLARE_WRITE8_MEMBER(videoram_w);
|
||||
DECLARE_WRITE8_MEMBER(dac_adr_s_w);
|
||||
DECLARE_WRITE8_MEMBER(dac_adr_e_w);
|
||||
DECLARE_WRITE8_MEMBER(banksel1_w);
|
||||
DECLARE_WRITE8_MEMBER(banksel2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(rombank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(colorbank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(video_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(vrambank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(dac_bank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(input_sel1_w);
|
||||
DECLARE_WRITE8_MEMBER(input_sel2_w);
|
||||
DECLARE_READ8_MEMBER(keys_r);
|
||||
TIMER_CALLBACK_MEMBER(dac_callback);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
INTERRUPT_GEN_MEMBER(interrupt);
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void redraw();
|
||||
@ -227,56 +237,47 @@ WRITE8_MEMBER(mjsister_state::dac_adr_e_w)
|
||||
m_dac_busy = 1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mjsister_state::banksel1_w)
|
||||
WRITE_LINE_MEMBER(mjsister_state::rombank_w)
|
||||
{
|
||||
int tmp = m_colorbank;
|
||||
|
||||
switch (data)
|
||||
{
|
||||
case 0x0: m_rombank0 = 0 ; break;
|
||||
case 0x1: m_rombank0 = 1 ; break;
|
||||
|
||||
case 0x2: m_flip_screen = 0 ; break;
|
||||
case 0x3: m_flip_screen = 1 ; break;
|
||||
|
||||
case 0x4: m_colorbank &= 0xfe; break;
|
||||
case 0x5: m_colorbank |= 0x01; break;
|
||||
case 0x6: m_colorbank &= 0xfd; break;
|
||||
case 0x7: m_colorbank |= 0x02; break;
|
||||
case 0x8: m_colorbank &= 0xfb; break;
|
||||
case 0x9: m_colorbank |= 0x04; break;
|
||||
|
||||
case 0xa: m_video_enable = 0 ; break;
|
||||
case 0xb: m_video_enable = 1 ; break;
|
||||
|
||||
case 0xe: m_vrambank = 0 ; break;
|
||||
case 0xf: m_vrambank = 1 ; break;
|
||||
|
||||
default:
|
||||
logerror("%04x p30_w:%02x\n", space.device().safe_pc(), data);
|
||||
}
|
||||
|
||||
if (tmp != m_colorbank)
|
||||
m_screen_redraw = 1;
|
||||
|
||||
membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
|
||||
m_rombank->set_entry((m_mainlatch[0]->q0_r() << 1) | m_mainlatch[1]->q6_r());
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mjsister_state::banksel2_w)
|
||||
WRITE_LINE_MEMBER(mjsister_state::flip_screen_w)
|
||||
{
|
||||
switch (data)
|
||||
{
|
||||
case 0xa: m_dac_bank = 0; break;
|
||||
case 0xb: m_dac_bank = 1; break;
|
||||
m_flip_screen = state;
|
||||
}
|
||||
|
||||
case 0xc: m_rombank1 = 0; break;
|
||||
case 0xd: m_rombank1 = 1; break;
|
||||
WRITE_LINE_MEMBER(mjsister_state::colorbank_w)
|
||||
{
|
||||
m_colorbank = (m_mainlatch[0]->output_state() >> 2) & 7;
|
||||
redraw();
|
||||
}
|
||||
|
||||
default:
|
||||
logerror("%04x p31_w:%02x\n", space.device().safe_pc(), data);
|
||||
}
|
||||
WRITE_LINE_MEMBER(mjsister_state::video_enable_w)
|
||||
{
|
||||
m_video_enable = state;
|
||||
}
|
||||
|
||||
membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
|
||||
WRITE_LINE_MEMBER(mjsister_state::irq_enable_w)
|
||||
{
|
||||
m_irq_enable = state;
|
||||
if (!m_irq_enable)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mjsister_state::vrambank_w)
|
||||
{
|
||||
m_vrambank = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mjsister_state::dac_bank_w)
|
||||
{
|
||||
m_dac_bank = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mjsister_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mjsister_state::input_sel1_w)
|
||||
@ -326,8 +327,8 @@ static ADDRESS_MAP_START( mjsister_io_map, AS_IO, 8, mjsister_state )
|
||||
AM_RANGE(0x12, 0x12) AM_DEVWRITE("aysnd", ay8910_device, data_w)
|
||||
AM_RANGE(0x20, 0x20) AM_READ(keys_r)
|
||||
AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x30, 0x30) AM_WRITE(banksel1_w)
|
||||
AM_RANGE(0x31, 0x31) AM_WRITE(banksel2_w)
|
||||
AM_RANGE(0x30, 0x30) AM_DEVWRITE("mainlatch1", ls259_device, write_nibble)
|
||||
AM_RANGE(0x31, 0x31) AM_DEVWRITE("mainlatch2", ls259_device, write_nibble)
|
||||
AM_RANGE(0x32, 0x32) AM_WRITE(input_sel1_w)
|
||||
AM_RANGE(0x33, 0x33) AM_WRITE(input_sel2_w)
|
||||
AM_RANGE(0x34, 0x34) AM_WRITE(dac_adr_s_w)
|
||||
@ -444,7 +445,7 @@ void mjsister_state::machine_start()
|
||||
{
|
||||
uint8_t *ROM = memregion("maincpu")->base();
|
||||
|
||||
membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x8000);
|
||||
m_rombank->configure_entries(0, 4, &ROM[0x10000], 0x8000);
|
||||
|
||||
m_dac_timer = timer_alloc(TIMER_DAC);
|
||||
|
||||
@ -455,8 +456,7 @@ void mjsister_state::machine_start()
|
||||
save_item(NAME(m_colorbank));
|
||||
save_item(NAME(m_input_sel1));
|
||||
save_item(NAME(m_input_sel2));
|
||||
save_item(NAME(m_rombank0));
|
||||
save_item(NAME(m_rombank1));
|
||||
save_item(NAME(m_irq_enable));
|
||||
save_item(NAME(m_dac_adr));
|
||||
save_item(NAME(m_dac_bank));
|
||||
save_item(NAME(m_dac_adr_s));
|
||||
@ -470,18 +470,19 @@ void mjsister_state::machine_reset()
|
||||
m_flip_screen = 0;
|
||||
m_video_enable = 0;
|
||||
m_screen_redraw = 0;
|
||||
m_vrambank = 0;
|
||||
m_colorbank = 0;
|
||||
m_input_sel1 = 0;
|
||||
m_input_sel2 = 0;
|
||||
m_rombank0 = 0;
|
||||
m_rombank1 = 0;
|
||||
m_dac_adr = 0;
|
||||
m_dac_bank = 0;
|
||||
m_dac_adr_s = 0;
|
||||
m_dac_adr_e = 0;
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mjsister_state::interrupt)
|
||||
{
|
||||
if (m_irq_enable)
|
||||
m_maincpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( mjsister )
|
||||
|
||||
@ -489,8 +490,22 @@ static MACHINE_CONFIG_START( mjsister )
|
||||
MCFG_CPU_ADD("maincpu", Z80, MCLK/2) /* 6.000 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(mjsister_map)
|
||||
MCFG_CPU_IO_MAP(mjsister_io_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, irq0_line_hold, 2*60)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, interrupt, 2*60)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch1", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mjsister_state, rombank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mjsister_state, flip_screen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, video_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mjsister_state, vrambank_w))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch2", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, coin_counter_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, dac_bank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, rombank_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "includes/mouser.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -25,15 +26,14 @@
|
||||
|
||||
/* Mouser has external masking circuitry around
|
||||
* the NMI input on the main CPU */
|
||||
WRITE8_MEMBER(mouser_state::mouser_nmi_enable_w)
|
||||
WRITE_LINE_MEMBER(mouser_state::nmi_enable_w)
|
||||
{
|
||||
//logerror("nmi_enable %02x\n", data);
|
||||
m_nmi_enable = data;
|
||||
m_nmi_enable = state;
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mouser_state::mouser_nmi_interrupt)
|
||||
{
|
||||
if (BIT(m_nmi_enable, 0))
|
||||
if (m_nmi_enable)
|
||||
nmi_line_pulse(device);
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ WRITE8_MEMBER(mouser_state::mouser_sound_nmi_clear_w)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mouser_state::mouser_sound_nmi_assert)
|
||||
{
|
||||
if (BIT(m_nmi_enable, 0))
|
||||
if (m_nmi_enable)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
|
||||
@ -71,9 +71,8 @@ static ADDRESS_MAP_START( mouser_map, AS_PROGRAM, 8, mouser_state )
|
||||
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("videoram")
|
||||
AM_RANGE(0x9800, 0x9cff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram")
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(mouser_nmi_enable_w) /* bit 0 = NMI Enable */
|
||||
AM_RANGE(0xa001, 0xa001) AM_WRITE(mouser_flip_screen_x_w)
|
||||
AM_RANGE(0xa002, 0xa002) AM_WRITE(mouser_flip_screen_y_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("P2") AM_WRITE(mouser_sound_interrupt_w) /* byte to sound cpu */
|
||||
@ -198,7 +197,6 @@ void mouser_state::machine_start()
|
||||
void mouser_state::machine_reset()
|
||||
{
|
||||
m_sound_byte = 0;
|
||||
m_nmi_enable = 0;
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( mouser )
|
||||
@ -214,6 +212,10 @@ static MACHINE_CONFIG_START( mouser )
|
||||
MCFG_CPU_IO_MAP(mouser_sound_io_map)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(mouser_state, mouser_sound_nmi_assert, 4*60) /* ??? This controls the sound tempo */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // type unconfirmed
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mouser_state, nmi_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mouser_state, flip_screen_x_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mouser_state, flip_screen_y_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -54,6 +54,7 @@ So this is the correct behavior of real hardware, not an emulation bug.
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -103,55 +104,40 @@ TIMER_DEVICE_CALLBACK_MEMBER(nemesis_state::gx400_interrupt)
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::gx400_irq1_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::irq_enable_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_irq1_on = data & 0x0001;
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
machine().bookkeeping().coin_lockout_w(1, data & 0x0100);
|
||||
m_irq_on = state;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::gx400_irq2_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::irq1_enable_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_irq2_on = data & 0x0001;
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
machine().bookkeeping().coin_lockout_w(0, data & 0x0100);
|
||||
m_irq1_on = state;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::gx400_irq4_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::irq2_enable_w)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
m_irq4_on = data & 0x0100;
|
||||
m_irq2_on = state;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::nemesis_irq_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::irq4_enable_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_irq_on = data & 0xff;
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
machine().bookkeeping().coin_lockout_global_w(data & 0x0100);
|
||||
m_irq4_on = state;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::konamigt_irq_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::coin1_lockout_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_irq_on = data & 0xff;
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
machine().bookkeeping().coin_lockout_w(1, data & 0x0100);
|
||||
machine().bookkeeping().coin_lockout_w(0, state);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::konamigt_irq2_enable_word_w)
|
||||
WRITE_LINE_MEMBER(nemesis_state::coin2_lockout_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
m_irq2_on = data & 0xff;
|
||||
machine().bookkeeping().coin_lockout_w(1, state);
|
||||
}
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
machine().bookkeeping().coin_lockout_w(0, data & 0x0100);
|
||||
WRITE_LINE_MEMBER(nemesis_state::sound_irq_w)
|
||||
{
|
||||
if (state)
|
||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
|
||||
}
|
||||
|
||||
|
||||
@ -286,12 +272,8 @@ static ADDRESS_MAP_START( nemesis_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST")
|
||||
AM_RANGE(0x05e000, 0x05e001) AM_WRITE(nemesis_irq_enable_word_w)
|
||||
AM_RANGE(0x05e002, 0x05e003) AM_WRITENOP /* not used irq */
|
||||
AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
|
||||
AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
|
||||
AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */
|
||||
AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
|
||||
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -320,12 +302,8 @@ static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
|
||||
AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
|
||||
AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */
|
||||
AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
|
||||
AM_RANGE(0x060000, 0x07ffff) AM_RAM /* WORK RAM */
|
||||
AM_RANGE(0x080000, 0x0bffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -352,12 +330,8 @@ static ADDRESS_MAP_START( konamigt_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST")
|
||||
AM_RANGE(0x05e000, 0x05e001) AM_WRITE(konamigt_irq2_enable_word_w)
|
||||
AM_RANGE(0x05e002, 0x05e003) AM_WRITE(konamigt_irq_enable_word_w)
|
||||
AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
|
||||
AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
|
||||
AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */
|
||||
AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
|
||||
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
|
||||
AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r)
|
||||
ADDRESS_MAP_END
|
||||
@ -386,12 +360,8 @@ static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
|
||||
AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
|
||||
AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */
|
||||
AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
|
||||
AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
|
||||
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
|
||||
AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r)
|
||||
AM_RANGE(0x080000, 0x0bffff) AM_ROM
|
||||
@ -606,9 +576,7 @@ static ADDRESS_MAP_START( hcrash_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x0c0008, 0x0c0009) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* watchdog probably */
|
||||
AM_RANGE(0x0c000a, 0x0c000b) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x0c2000, 0x0c2001) AM_READ(konamigt_input_word_r) /* Konami GT control */
|
||||
AM_RANGE(0x0c2800, 0x0c2801) AM_WRITENOP
|
||||
AM_RANGE(0x0c2802, 0x0c2803) AM_WRITE(gx400_irq2_enable_word_w) // or at 0x0c2804 ?
|
||||
AM_RANGE(0x0c2804, 0x0c2805) AM_WRITENOP
|
||||
AM_RANGE(0x0c2800, 0x0c280f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) // ???
|
||||
AM_RANGE(0x0c4000, 0x0c4001) AM_READ_PORT("IN1") AM_WRITE(selected_ip_word_w)
|
||||
AM_RANGE(0x0c4002, 0x0c4003) AM_READ(selected_ip_word_r) AM_WRITENOP /* WEC Le Mans 24 control. latches the value read previously */
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(nemesis_videoram2_word_w) AM_SHARE("videoram2") /* VRAM */
|
||||
@ -1468,9 +1436,6 @@ void nemesis_state::machine_start()
|
||||
void nemesis_state::machine_reset()
|
||||
{
|
||||
m_irq_on = 0;
|
||||
m_irq1_on = 0;
|
||||
m_irq2_on = 0;
|
||||
m_irq4_on = 0;
|
||||
m_gx400_irq1_cnt = 0;
|
||||
m_frame_counter = 1;
|
||||
m_selected_ip = 0;
|
||||
@ -1491,6 +1456,16 @@ static MACHINE_CONFIG_START( nemesis )
|
||||
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* From schematics, should be accurate */
|
||||
MCFG_CPU_PROGRAM_MAP(sound_map) /* fixed */
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0) // 13J
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(nemesis_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0) // 11K
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -1548,6 +1523,18 @@ static MACHINE_CONFIG_START( gx400 )
|
||||
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -1608,6 +1595,17 @@ static MACHINE_CONFIG_START( konamigt )
|
||||
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(sound_map)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -1665,6 +1663,18 @@ static MACHINE_CONFIG_START( rf2_gx400 )
|
||||
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -1922,6 +1932,11 @@ static MACHINE_CONFIG_START( hcrash )
|
||||
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(sal_sound_map)
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ?
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) // or at 0x0c2804 ?
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ?
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
@ -2672,6 +2687,18 @@ static MACHINE_CONFIG_START( bubsys )
|
||||
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
|
||||
|
||||
MCFG_DEVICE_ADD("intlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -39,7 +39,7 @@ Atari Orbit Driver
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(orbit_state::nmi_32v)
|
||||
{
|
||||
int scanline = param;
|
||||
int nmistate = (scanline & 32) && (m_misc_flags & 4);
|
||||
int nmistate = (scanline & 32) && m_latch->q2_r();
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, nmistate ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
@ -64,37 +64,23 @@ INTERRUPT_GEN_MEMBER(orbit_state::orbit_interrupt)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void orbit_state::update_misc_flags(address_space &space, uint8_t val)
|
||||
|
||||
WRITE_LINE_MEMBER(orbit_state::coin_lockout_w)
|
||||
{
|
||||
m_misc_flags = val;
|
||||
|
||||
/* BIT0 => UNUSED */
|
||||
/* BIT1 => LOCKOUT */
|
||||
/* BIT2 => NMI ENABLE */
|
||||
/* BIT3 => HEAT RST LED */
|
||||
/* BIT4 => PANEL BUS OC */
|
||||
/* BIT5 => PANEL STROBE */
|
||||
/* BIT6 => HYPER LED */
|
||||
/* BIT7 => WARNING SND */
|
||||
|
||||
m_discrete->write(space, ORBIT_WARNING_EN, BIT(m_misc_flags, 7));
|
||||
|
||||
output().set_led_value(0, BIT(m_misc_flags, 3));
|
||||
output().set_led_value(1, BIT(m_misc_flags, 6));
|
||||
|
||||
machine().bookkeeping().coin_lockout_w(0, !BIT(m_misc_flags, 1));
|
||||
machine().bookkeeping().coin_lockout_w(1, !BIT(m_misc_flags, 1));
|
||||
machine().bookkeeping().coin_lockout_w(0, !state);
|
||||
machine().bookkeeping().coin_lockout_w(1, !state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(orbit_state::orbit_misc_w)
|
||||
WRITE_LINE_MEMBER(orbit_state::heat_rst_led_w)
|
||||
{
|
||||
uint8_t bit = offset >> 1;
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
if (offset & 1)
|
||||
update_misc_flags(space, m_misc_flags | (1 << bit));
|
||||
else
|
||||
update_misc_flags(space, m_misc_flags & ~(1 << bit));
|
||||
|
||||
WRITE_LINE_MEMBER(orbit_state::hyper_led_w)
|
||||
{
|
||||
output().set_led_value(1, state);
|
||||
}
|
||||
|
||||
|
||||
@ -118,7 +104,7 @@ static ADDRESS_MAP_START( orbit_map, AS_PROGRAM, 8, orbit_state )
|
||||
AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_w)
|
||||
AM_RANGE(0x3900, 0x3900) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_amp_w)
|
||||
AM_RANGE(0x3a00, 0x3a00) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_amp_w)
|
||||
AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_WRITE(orbit_misc_w)
|
||||
AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_DEVWRITE("latch", f9334_device, write_a0)
|
||||
AM_RANGE(0x3e00, 0x3e00) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_rst_w)
|
||||
AM_RANGE(0x3f00, 0x3f00) AM_MIRROR(0x00ff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x6000, 0x7fff) AM_ROM
|
||||
@ -274,13 +260,11 @@ GFXDECODE_END
|
||||
|
||||
void orbit_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_misc_flags));
|
||||
save_item(NAME(m_flip_screen));
|
||||
}
|
||||
|
||||
void orbit_state::machine_reset()
|
||||
{
|
||||
update_misc_flags(generic_space(), 0);
|
||||
m_flip_screen = 0;
|
||||
}
|
||||
|
||||
@ -300,6 +284,20 @@ static MACHINE_CONFIG_START( orbit )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("32v", orbit_state, nmi_32v, "screen", 0, 32)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", F9334, 0) // M6
|
||||
/* BIT0 => UNUSED */
|
||||
/* BIT1 => LOCKOUT */
|
||||
/* BIT2 => NMI ENABLE */
|
||||
/* BIT3 => HEAT RST LED */
|
||||
/* BIT4 => PANEL BUS OC */
|
||||
/* BIT5 => PANEL STROBE */
|
||||
/* BIT6 => HYPER LED */
|
||||
/* BIT7 => WARNING SND */
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(orbit_state, coin_lockout_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(orbit_state, heat_rst_led_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(orbit_state, hyper_led_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ORBIT_WARNING_EN>))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -345,7 +345,7 @@ Boards:
|
||||
#include "cpu/s2650/s2650.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "machine/74259.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/sn76496.h"
|
||||
#include "screen.h"
|
||||
@ -415,9 +415,9 @@ INTERRUPT_GEN_MEMBER(pacman_state::vblank_nmi)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pacman_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(pacman_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
m_irq_mask = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pacman_state::pacman_interrupt_vector_w)
|
||||
@ -507,21 +507,27 @@ WRITE8_MEMBER(pacman_state::nmouse_interrupt_vector_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(pacman_state::pacman_leds_w)
|
||||
WRITE_LINE_MEMBER(pacman_state::led1_w)
|
||||
{
|
||||
output().set_led_value(offset,data & 1);
|
||||
output().set_led_value(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(pacman_state::pacman_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(pacman_state::led2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset,data & 1);
|
||||
output().set_led_value(1, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(pacman_state::pacman_coin_lockout_global_w)
|
||||
WRITE_LINE_MEMBER(pacman_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_global_w(~data & 0x01);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(pacman_state::coin_lockout_global_w)
|
||||
{
|
||||
machine().bookkeeping().coin_lockout_global_w(!state);
|
||||
}
|
||||
|
||||
|
||||
@ -971,13 +977,7 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", addressable_latch_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -988,8 +988,6 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2")
|
||||
ADDRESS_MAP_END
|
||||
// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
|
||||
// exist on any Pacman or Puckman board I have seen. DW
|
||||
|
||||
static ADDRESS_MAP_START( patched_opcodes_map, AS_OPCODES, 8, pacman_state )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM AM_SHARE("patched_opcodes")
|
||||
@ -1003,13 +1001,7 @@ static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8, pacman_state )
|
||||
// AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
// AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
// AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
// AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5080, 0x509f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x50a0, 0x50af) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
// AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1028,13 +1020,7 @@ static ADDRESS_MAP_START( mspacman_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1068,13 +1054,7 @@ static ADDRESS_MAP_START( woodpek_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1101,13 +1081,7 @@ static ADDRESS_MAP_START( numcrash_map, AS_PROGRAM, 8, pacman_state )
|
||||
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
// AM_RANGE(0x5002, 0x5002) AM_WRITENOP
|
||||
// AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
|
||||
// AM_RANGE(0x5004, 0x5005) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
// AM_RANGE(0x5006, 0x5006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
// AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
// AM_RANGE(0x5070, 0x507f) AM_WRITENOP
|
||||
@ -1129,17 +1103,12 @@ static ADDRESS_MAP_START( alibaba_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4ef0, 0x4eff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x4f00, 0x4fff) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("latch1", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x506f) AM_MIRROR(0xaf00) AM_WRITE(alibaba_sound_w) /* the sound region is not contiguous */
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") /* actually at 5050-505f, here to point to free RAM */
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x50c1, 0x50c1) AM_MIRROR(0xaf00) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x50c2, 0x50c2) AM_MIRROR(0xaf00) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x50c3, 0x50ff) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
AM_RANGE(0x50c0, 0x50c7) AM_MIRROR(0xaf00) AM_DEVWRITE("latch2", ls259_device, write_d0)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1")
|
||||
@ -1158,13 +1127,7 @@ static ADDRESS_MAP_START( dremshpr_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP /* unknown */
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
// AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1189,13 +1152,7 @@ static ADDRESS_MAP_START( epos_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1216,10 +1173,7 @@ static ADDRESS_MAP_START( s2650games_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x1490, 0x149f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("s2650_spriteram")
|
||||
AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0x6000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram")
|
||||
AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY
|
||||
AM_RANGE(0x1500, 0x1502) AM_MIRROR(0x6000) AM_WRITENOP
|
||||
AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x1504, 0x1506) AM_MIRROR(0x6000) AM_WRITENOP
|
||||
AM_RANGE(0x1507, 0x1507) AM_MIRROR(0x6000) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x1500, 0x1507) AM_MIRROR(0x6000) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x1508, 0x155f) AM_MIRROR(0x6000) AM_WRITEONLY
|
||||
AM_RANGE(0x1560, 0x156f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x1570, 0x157f) AM_MIRROR(0x6000) AM_WRITEONLY
|
||||
@ -1243,10 +1197,7 @@ static ADDRESS_MAP_START( rocktrv2_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0x4c00, 0x4fff) AM_RAM
|
||||
AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x5fe0, 0x5fe3) AM_WRITE(rocktrv2_prot_data_w) AM_SHARE("rocktrv2_prot")
|
||||
@ -1270,10 +1221,7 @@ static ADDRESS_MAP_START( bigbucks_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0x4c00, 0x4fff) AM_RAM
|
||||
AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_WRITENOP /*?*/
|
||||
AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x5000, 0x503f) AM_READ_PORT("IN0")
|
||||
@ -1293,13 +1241,7 @@ static ADDRESS_MAP_START( mschamp_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1319,12 +1261,8 @@ static ADDRESS_MAP_START( superabc_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
|
||||
AM_RANGE(0x4800, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("28c16.u17") // nvram
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf3c) AM_WRITE(superabc_bank_w)
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1346,13 +1284,7 @@ static ADDRESS_MAP_START( crushs_map, AS_PROGRAM, 8, pacman_state )
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
|
||||
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
|
||||
AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_WRITENOP // doesn't use pacman sound hw
|
||||
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
|
||||
@ -1376,13 +1308,7 @@ static ADDRESS_MAP_START( pengojpm_map, AS_PROGRAM, 8, pacman_state )
|
||||
// AM_RANGE(0x8800, 0x8bff) AM_READ(pacman_read_nop) AM_WRITENOP
|
||||
AM_RANGE(0x8c00, 0x8fef) AM_RAM
|
||||
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x9000, 0x9000) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x9001, 0x9001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x9002, 0x9002) AM_WRITENOP
|
||||
AM_RANGE(0x9003, 0x9003) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x9004, 0x9005) AM_WRITENOP // AM_WRITE(pacman_leds_w)
|
||||
AM_RANGE(0x9006, 0x9006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
|
||||
AM_RANGE(0x9007, 0x9007) AM_WRITE(pacman_coin_counter_w)
|
||||
AM_RANGE(0x9000, 0x9007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x9040, 0x905f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
|
||||
AM_RANGE(0x9060, 0x906f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x9070, 0x907f) AM_WRITENOP
|
||||
@ -3551,6 +3477,17 @@ static MACHINE_CONFIG_START( pacman )
|
||||
MCFG_CPU_IO_MAP(writeport)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 74LS259 at 8K or 4099 at 7K
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
|
||||
// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
|
||||
// exist on any Pacman or Puckman board I have seen. DW
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_VBLANK_INIT("screen", 16)
|
||||
|
||||
@ -3575,9 +3512,12 @@ static MACHINE_CONFIG_START( pacman )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( pacmanp, pacman )
|
||||
static MACHINE_CONFIG_DERIVED( maketrax, pacman )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(patched_opcodes_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch") // 8K on original boards
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // outputs 4-7 go to protection chip at 6P
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( pengojpm, pacman )
|
||||
@ -3593,6 +3533,15 @@ static MACHINE_CONFIG_DERIVED( birdiy, pacman )
|
||||
MCFG_CPU_PROGRAM_MAP(birdiy_map)
|
||||
MCFG_CPU_IO_MAP(0)
|
||||
|
||||
MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
|
||||
//MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(pacman_state,birdiy)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -3620,6 +3569,9 @@ static MACHINE_CONFIG_DERIVED( mspacman, pacman )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(mspacman_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3635,6 +3587,10 @@ static MACHINE_CONFIG_DERIVED( numcrash, pacman )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(numcrash_map)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // ???
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ???
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( alibaba, pacman )
|
||||
@ -3642,6 +3598,17 @@ static MACHINE_CONFIG_DERIVED( alibaba, pacman )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(alibaba_map)
|
||||
|
||||
MCFG_DEVICE_REMOVE("mainlatch")
|
||||
MCFG_DEVICE_ADD("latch1", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
|
||||
MCFG_DEVICE_ADD("latch2", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3657,6 +3624,9 @@ static MACHINE_CONFIG_DERIVED( dremshpr, pacman )
|
||||
MCFG_DEVICE_REMOVE("namco")
|
||||
MCFG_SOUND_ADD("ay8910", AY8910, 14318000/8)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3716,6 +3686,9 @@ static MACHINE_CONFIG_DERIVED( vanvan, pacman )
|
||||
MCFG_SOUND_ADD("sn2", SN76496, 1789750)
|
||||
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3729,6 +3702,9 @@ static MACHINE_CONFIG_DERIVED( bigbucks, pacman )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) /*?*/
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3742,6 +3718,16 @@ static MACHINE_CONFIG_DERIVED( s2650games, pacman )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, s2650_interrupt)
|
||||
MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_DEVICE_MODIFY("mainlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP)
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
|
||||
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", s2650games)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
@ -7330,20 +7316,20 @@ GAME( 1985, jumpshotp,jumpshot, pacman, jumpshotp,pacman_state, jumpshot, ROT
|
||||
|
||||
GAME( 1985, shootbul, 0, pacman, shootbul, pacman_state, jumpshot, ROT90, "Bally Midway", "Shoot the Bull", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1981, crush, 0, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush, 0, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush2, crush, pacman, maketrax, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural Esco Electric, Ltd.", "Crush Roller (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush3, crush, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush3, crush, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush4, crush, pacman, maketrax, pacman_state, eyes, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 4)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crush5, crush, crush4, crush4, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural TWT", "Crush Roller (set 5)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, maketrax, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, maketrxb, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, korosuke, crush, pacmanp, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel?
|
||||
GAME( 1981, maketrax, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, maketrxb, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, korosuke, crush, maketrax, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel?
|
||||
GAME( 1981, crushrlf, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (Famaresa PCB)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushbl, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushbl2, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushbl3, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushbl2, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushbl3, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, crushs, crush, crushs, crushs, pacman_state, 0, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", MACHINE_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text
|
||||
GAME( 1981, mbrush, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, mbrush, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, paintrlr, crush, pacman, paintrlr, pacman_state, 0, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1982, eyes, 0, pacman, eyes, pacman_state, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -30,6 +30,7 @@ Boards:
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -46,49 +47,27 @@ Boards:
|
||||
INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_master_interrupt)
|
||||
{
|
||||
if (m_irq_enable_a)
|
||||
device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE);
|
||||
device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_slave_interrupt)
|
||||
{
|
||||
if (m_irq_enable_b)
|
||||
device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE);
|
||||
device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pandoras_state::pandoras_int_control_w)
|
||||
WRITE_LINE_MEMBER(pandoras_state::cpua_irq_enable_w)
|
||||
{
|
||||
/* byte 0: irq enable (CPU A)
|
||||
byte 2: coin counter 1
|
||||
byte 3: coin counter 2
|
||||
byte 5: flip screen
|
||||
byte 6: irq enable (CPU B)
|
||||
byte 7: NMI to CPU B
|
||||
if (!state)
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
m_irq_enable_a = state;
|
||||
}
|
||||
|
||||
other bytes unknown */
|
||||
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: if (!data)
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
m_irq_enable_a = data;
|
||||
break;
|
||||
case 0x02: machine().bookkeeping().coin_counter_w(0,data & 0x01);
|
||||
break;
|
||||
case 0x03: machine().bookkeeping().coin_counter_w(1,data & 0x01);
|
||||
break;
|
||||
case 0x05: pandoras_flipscreen_w(space, 0, data);
|
||||
break;
|
||||
case 0x06: if (!data)
|
||||
m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
m_irq_enable_b = data;
|
||||
break;
|
||||
case 0x07: m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
break;
|
||||
|
||||
default: logerror("%04x: (irq_ctrl) write %02x to %02x\n",space.device().safe_pc(), data, offset);
|
||||
break;
|
||||
}
|
||||
WRITE_LINE_MEMBER(pandoras_state::cpub_irq_enable_w)
|
||||
{
|
||||
if (!state)
|
||||
m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
|
||||
m_irq_enable_b = state;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pandoras_state::pandoras_cpua_irqtrigger_w)
|
||||
@ -127,13 +106,22 @@ WRITE8_MEMBER(pandoras_state::pandoras_z80_irqtrigger_w)
|
||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(pandoras_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(pandoras_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( pandoras_master_map, AS_PROGRAM, 8, pandoras_state )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("spriteram") /* Work RAM (Shared with CPU B) */
|
||||
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU B) */
|
||||
AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU B) */
|
||||
AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */
|
||||
AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */
|
||||
AM_RANGE(0x1a00, 0x1a00) AM_WRITE(pandoras_scrolly_w) /* bg scroll */
|
||||
AM_RANGE(0x1c00, 0x1c00) AM_WRITE(pandoras_z80_irqtrigger_w) /* cause INT on the Z80 */
|
||||
AM_RANGE(0x1e00, 0x1e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound command to the Z80 */
|
||||
@ -149,7 +137,7 @@ static ADDRESS_MAP_START( pandoras_slave_map, AS_PROGRAM, 8, pandoras_state )
|
||||
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU A) */
|
||||
AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU A) */
|
||||
AM_RANGE(0x1800, 0x1800) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */
|
||||
AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */
|
||||
AM_RANGE(0x1a00, 0x1a00) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x1a01, 0x1a01) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x1a02, 0x1a02) AM_READ_PORT("P2")
|
||||
@ -304,11 +292,7 @@ void pandoras_state::machine_reset()
|
||||
{
|
||||
m_firq_old_data_a = 0;
|
||||
m_firq_old_data_b = 0;
|
||||
m_irq_enable_a = 0;
|
||||
m_irq_enable_b = 0;
|
||||
m_i8039_status = 0;
|
||||
|
||||
m_flipscreen = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(pandoras_state::pandoras_portA_r)
|
||||
@ -343,6 +327,15 @@ static MACHINE_CONFIG_START( pandoras )
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - needed for correct synchronization of the sound CPUs */
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pandoras_state, cpua_irq_enable_w)) // ENA
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // OFSET - unknown
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pandoras_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pandoras_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pandoras_state, flipscreen_w)) // FLIP
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pandoras_state, cpub_irq_enable_w)) // ENB
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(INPUTLINE("sub", INPUT_LINE_NMI)) MCFG_DEVCB_INVERT // RESETB
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -67,6 +67,7 @@
|
||||
#include "includes/pacman.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/segacrpt_device.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
@ -77,8 +78,9 @@ class pengo_state : public pacman_state
|
||||
public:
|
||||
pengo_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: pacman_state(mconfig, type, tag), m_decrypted_opcodes(*this, "decrypted_opcodes") { }
|
||||
DECLARE_WRITE8_MEMBER(pengo_coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(irq_mask_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
|
||||
DECLARE_DRIVER_INIT(penta);
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
|
||||
@ -115,14 +117,19 @@ public:
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(pengo_state::pengo_coin_counter_w)
|
||||
WRITE_LINE_MEMBER(pengo_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 1);
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pengo_state::irq_mask_w)
|
||||
WRITE_LINE_MEMBER(pengo_state::coin_counter_2_w)
|
||||
{
|
||||
m_irq_mask = data & 1;
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(pengo_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = state;
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
|
||||
@ -135,14 +142,8 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
|
||||
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x9000, 0x903f) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x9040, 0x907f) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
|
||||
AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x9044, 0x9045) AM_WRITE(pengo_coin_counter_w)
|
||||
AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
|
||||
AM_RANGE(0x9047, 0x9047) AM_WRITE(pengo_gfxbank_w)
|
||||
AM_RANGE(0x9070, 0x9070) AM_WRITENOP
|
||||
AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
|
||||
AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("IN0")
|
||||
ADDRESS_MAP_END
|
||||
@ -164,15 +165,8 @@ static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8, pengo_state )
|
||||
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
|
||||
AM_RANGE(0x9030, 0x9030) AM_WRITE(jrpacman_scroll_w)
|
||||
AM_RANGE(0x9040, 0x904f) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
|
||||
AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
|
||||
AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
|
||||
AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
|
||||
AM_RANGE(0x9044, 0x9044) AM_WRITE(jrpacman_bgpriority_w)
|
||||
AM_RANGE(0x9045, 0x9045) AM_WRITE(jrpacman_spritebank_w)
|
||||
AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
|
||||
AM_RANGE(0x9047, 0x9047) AM_WRITE(jrpacman_charbank_w)
|
||||
AM_RANGE(0x9070, 0x9070) AM_WRITENOP
|
||||
AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
|
||||
AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("P1")
|
||||
ADDRESS_MAP_END
|
||||
@ -380,6 +374,18 @@ static MACHINE_CONFIG_START( pengo )
|
||||
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", pengo_state, vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // U27
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pengo_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pengo_state, pengo_palettebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pengo_state, flipscreen_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pengo_state, pengo_colortablebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, pengo_gfxbank_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pengo)
|
||||
MCFG_PALETTE_ADD("palette", 128*4)
|
||||
@ -422,6 +428,11 @@ static MACHINE_CONFIG_DERIVED( jrpacmbl, pengo )
|
||||
MCFG_CPU_PROGRAM_MAP(jrpacmbl_map)
|
||||
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_OPCODES)
|
||||
|
||||
MCFG_DEVICE_MODIFY("latch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, jrpacman_bgpriority_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, jrpacman_spritebank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, jrpacman_charbank_w))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -296,6 +296,7 @@ Notes & Todo:
|
||||
|
||||
#include "cpu/m6502/n2a03.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/rp5h01.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
@ -307,9 +308,9 @@ Notes & Todo:
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
WRITE8_MEMBER(playch10_state::up8w_w)
|
||||
WRITE_LINE_MEMBER(playch10_state::up8w_w)
|
||||
{
|
||||
m_up_8w = data & 1;
|
||||
m_up_8w = state;
|
||||
}
|
||||
|
||||
READ8_MEMBER(playch10_state::ram_8w_r)
|
||||
@ -361,18 +362,12 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bios_io_map, AS_IO, 8, playch10_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS") AM_WRITE(pc10_SDCS_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1") AM_WRITE(pc10_CNTRLMASK_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2") AM_WRITE(pc10_DISPMASK_w)
|
||||
AM_RANGE(0x03, 0x03) AM_READWRITE(pc10_detectclr_r, pc10_SOUNDMASK_w)
|
||||
AM_RANGE(0x04, 0x04) AM_WRITE(pc10_GAMERES_w)
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE(pc10_GAMESTOP_w)
|
||||
AM_RANGE(0x06, 0x07) AM_WRITENOP
|
||||
AM_RANGE(0x08, 0x08) AM_WRITE(pc10_NMIENABLE_w)
|
||||
AM_RANGE(0x09, 0x09) AM_WRITE(pc10_DOGDI_w)
|
||||
AM_RANGE(0x0a, 0x0a) AM_WRITE(pc10_PPURES_w)
|
||||
AM_RANGE(0x0b, 0x0e) AM_WRITE(pc10_CARTSEL_w)
|
||||
AM_RANGE(0x0f, 0x0f) AM_WRITE(up8w_w)
|
||||
AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS")
|
||||
AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1")
|
||||
AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2")
|
||||
AM_RANGE(0x03, 0x03) AM_READ(pc10_detectclr_r)
|
||||
AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch1", ls259_device, write_d0)
|
||||
AM_RANGE(0x08, 0x0f) AM_DEVWRITE("outlatch2", ls259_device, write_d0)
|
||||
AM_RANGE(0x10, 0x13) AM_WRITE(time_w) AM_SHARE("timedata")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -655,6 +650,20 @@ static MACHINE_CONFIG_START( playch10 )
|
||||
MCFG_CPU_ADD("cart", N2A03, NTSC_APU_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(cart_map)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch1", LS259, 0) // 7D
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, SDCS_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, CNTRLMASK_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, DISPMASK_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(playch10_state, SOUNDMASK_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("cart", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // GAMERES
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("cart", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT // GAMESTOP
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch2", LS259, 0) // 7E
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, NMIENABLE_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, DOGDI_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, PPURES_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(playch10_state, up8w_w))
|
||||
MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(playch10_state, CARTSEL_w)) MCFG_DEVCB_MASK(0x78) MCFG_DEVCB_RSHIFT(-3)
|
||||
|
||||
// video hardware
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", playch10)
|
||||
|
@ -225,6 +225,7 @@ Todo:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/z8000/z8000.h"
|
||||
#include "cpu/mb88xx/mb88xx.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/namco06.h"
|
||||
#include "machine/namco51.h"
|
||||
#include "machine/namco53.h"
|
||||
@ -289,53 +290,36 @@ READ8_MEMBER(polepos_state::polepos_ready_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(polepos_state::polepos_latch_w)
|
||||
WRITE_LINE_MEMBER(polepos_state::iosel_w)
|
||||
{
|
||||
int bit = data & 1;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00: /* IRQON */
|
||||
m_main_irq_mask = bit;
|
||||
if (!bit)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 0x01: /* IOSEL */
|
||||
// polepos_mcu_enable_w(offset,data);
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x02: /* CLSON */
|
||||
m_namco_sound->polepos_sound_enable(bit);
|
||||
if (!bit)
|
||||
{
|
||||
machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(space, 0, 0);
|
||||
machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(space, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x03: /* GASEL */
|
||||
m_adc_input = bit;
|
||||
break;
|
||||
|
||||
case 0x04: /* RESB */
|
||||
m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
case 0x05: /* RESA */
|
||||
m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
|
||||
break;
|
||||
|
||||
case 0x06: /* SB0 */
|
||||
m_auto_start_mask = !bit;
|
||||
break;
|
||||
|
||||
case 0x07: /* CHACL */
|
||||
polepos_chacl_w(space,offset,data);
|
||||
break;
|
||||
WRITE_LINE_MEMBER(polepos_state::clson_w)
|
||||
{
|
||||
m_namco_sound->polepos_sound_enable(state);
|
||||
if (!state)
|
||||
{
|
||||
machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(machine().dummy_space(), 0, 0);
|
||||
machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(machine().dummy_space(), 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(polepos_state::gasel_w)
|
||||
{
|
||||
m_adc_input = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(polepos_state::sb0_w)
|
||||
{
|
||||
m_auto_start_mask = !state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(polepos_state::chacl_w)
|
||||
{
|
||||
polepos_chacl_w(machine().dummy_space(), 0, state);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(polepos_state::polepos_z8002_nvi_enable_w)
|
||||
{
|
||||
data &= 1;
|
||||
@ -414,7 +398,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
if (((scanline == 64) || (scanline == 192)) && m_main_irq_mask) // 64V
|
||||
if (((scanline == 64) || (scanline == 192)) && m_latch->q0_r()) // 64V
|
||||
m_maincpu->set_input_line(0, ASSERT_LINE);
|
||||
|
||||
if (scanline == 240 && m_sub_irq_mask) // VBLANK
|
||||
@ -427,13 +411,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline)
|
||||
|
||||
MACHINE_RESET_MEMBER(polepos_state,polepos)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
int i;
|
||||
|
||||
/* Reset all latches */
|
||||
for (i = 0; i < 8; i++)
|
||||
polepos_latch_w(space, i, 0);
|
||||
|
||||
/* set the interrupt vectors (this shouldn't be needed) */
|
||||
m_subcpu->set_input_line_vector(0, Z8000_NVI);
|
||||
m_subcpu2->set_input_line_vector(0, Z8000_NVI);
|
||||
@ -459,7 +436,7 @@ static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8, polepos_state )
|
||||
AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
|
||||
AM_RANGE(0x9100, 0x9100) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0cff) AM_READ(polepos_ready_r) /* READY */
|
||||
AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_WRITE(polepos_latch_w) /* misc latches */
|
||||
AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_DEVWRITE("latch", ls259_device, write_d0)
|
||||
AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x0cff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0xa200, 0xa200) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_lsb_w) /* Car Sound ( Lower Nibble ) */
|
||||
AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_msb_w) /* Car Sound ( Upper Nibble ) */
|
||||
@ -920,6 +897,16 @@ static MACHINE_CONFIG_START( polepos )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0) // at 8E on polepos
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16)
|
||||
@ -1018,6 +1005,16 @@ static MACHINE_CONFIG_START( topracern )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("latch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16)
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "audio/timeplt.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "screen.h"
|
||||
@ -37,14 +38,26 @@ INTERRUPT_GEN_MEMBER(pooyan_state::interrupt)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(pooyan_state::irq_enable_w)
|
||||
WRITE_LINE_MEMBER(pooyan_state::irq_enable_w)
|
||||
{
|
||||
m_irq_enable = data & 1;
|
||||
m_irq_enable = state;
|
||||
if (!m_irq_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(pooyan_state::coin_counter_1_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(pooyan_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Memory maps
|
||||
@ -65,10 +78,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pooyan_state )
|
||||
AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x5e1f) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x5e7f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
|
||||
AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x5e7f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0xa180, 0xa180) AM_MIRROR(0x5e78) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0xa181, 0xa181) AM_MIRROR(0x5e78) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
|
||||
AM_RANGE(0xa183, 0xa183) AM_MIRROR(0x5e78) AM_WRITENOP // ???
|
||||
AM_RANGE(0xa187, 0xa187) AM_MIRROR(0x5e78) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xa180, 0xa187) AM_MIRROR(0x5e78) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -182,12 +192,6 @@ void pooyan_state::machine_start()
|
||||
}
|
||||
|
||||
|
||||
void pooyan_state::machine_reset()
|
||||
{
|
||||
m_irq_enable = 0;
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( pooyan )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -195,6 +199,15 @@ static MACHINE_CONFIG_START( pooyan )
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", pooyan_state, interrupt)
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B2
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pooyan_state, irq_enable_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pooyan_state, coin_counter_1_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pooyan_state, coin_counter_2_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // PAY OUT - not used
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pooyan_state, flipscreen_w))
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
|
||||
/* video hardware */
|
||||
|
@ -47,119 +47,80 @@ void prof80_state::motor(int mon)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ls259_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
void prof80_state::ls259_w(int fa, int sa, int fb, int sb)
|
||||
WRITE_LINE_MEMBER(prof80_state::ready_w)
|
||||
{
|
||||
switch (sa)
|
||||
if (m_ready != state)
|
||||
{
|
||||
case 0: // C0/TDI
|
||||
m_rtc->data_in_w(fa);
|
||||
m_rtc->c0_w(fa);
|
||||
m_c0 = fa;
|
||||
break;
|
||||
|
||||
case 1: // C1
|
||||
m_rtc->c1_w(fa);
|
||||
m_c1 = fa;
|
||||
break;
|
||||
|
||||
case 2: // C2
|
||||
m_rtc->c2_w(fa);
|
||||
m_c2 = fa;
|
||||
break;
|
||||
|
||||
case 3: // READY
|
||||
if (m_ready != fa)
|
||||
{
|
||||
m_fdc->set_ready_line_connected(!fa);
|
||||
m_fdc->ready_w(!fa);
|
||||
m_ready = fa;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // TCK
|
||||
m_rtc->clk_w(fa);
|
||||
break;
|
||||
|
||||
case 5: // IN USE
|
||||
//m_floppy->inuse_w(fa);
|
||||
break;
|
||||
|
||||
case 6: // _MOTOR
|
||||
if (fa)
|
||||
{
|
||||
// trigger floppy motor off NE555 timer
|
||||
int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6
|
||||
|
||||
timer_set(attotime::from_msec(t), TIMER_ID_MOTOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
// turn on floppy motor
|
||||
motor(0);
|
||||
|
||||
// reset floppy motor off NE555 timer
|
||||
timer_set(attotime::never, TIMER_ID_MOTOR);
|
||||
}
|
||||
break;
|
||||
|
||||
case 7: // SELECT
|
||||
if (m_select != fa)
|
||||
{
|
||||
//m_fdc->set_select_lines_connected(fa);
|
||||
m_select = fa;
|
||||
}
|
||||
break;
|
||||
m_fdc->set_ready_line_connected(!state);
|
||||
m_fdc->ready_w(!state);
|
||||
m_ready = state;
|
||||
}
|
||||
}
|
||||
|
||||
switch (sb)
|
||||
|
||||
WRITE_LINE_MEMBER(prof80_state::inuse_w)
|
||||
{
|
||||
//m_floppy->inuse_w(state);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(prof80_state::motor_w)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
case 0: // RESF
|
||||
if (fb) m_fdc->soft_reset();
|
||||
break;
|
||||
// trigger floppy motor off NE555 timer
|
||||
int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6
|
||||
|
||||
case 1: // MINI
|
||||
break;
|
||||
timer_set(attotime::from_msec(t), TIMER_ID_MOTOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
// turn on floppy motor
|
||||
motor(0);
|
||||
|
||||
case 2: // _RTS
|
||||
m_rs232a->write_rts(fb);
|
||||
break;
|
||||
// reset floppy motor off NE555 timer
|
||||
timer_set(attotime::never, TIMER_ID_MOTOR);
|
||||
}
|
||||
}
|
||||
|
||||
case 3: // TX
|
||||
m_rs232a->write_txd(fb);
|
||||
break;
|
||||
|
||||
case 4: // _MSTOP
|
||||
if (!fb)
|
||||
{
|
||||
// turn off floppy motor
|
||||
motor(1);
|
||||
WRITE_LINE_MEMBER(prof80_state::select_w)
|
||||
{
|
||||
if (m_select != state)
|
||||
{
|
||||
//m_fdc->set_select_lines_connected(state);
|
||||
m_select = state;
|
||||
}
|
||||
}
|
||||
|
||||
// reset floppy motor off NE555 timer
|
||||
timer_set(attotime::never, TIMER_ID_MOTOR);
|
||||
}
|
||||
break;
|
||||
|
||||
case 5: // TXP
|
||||
m_rs232b->write_txd(fb);
|
||||
break;
|
||||
WRITE_LINE_MEMBER(prof80_state::resf_w)
|
||||
{
|
||||
if (state)
|
||||
m_fdc->soft_reset();
|
||||
}
|
||||
|
||||
case 6: // TSTB
|
||||
m_rtc->stb_w(fb);
|
||||
break;
|
||||
|
||||
case 7: // MME
|
||||
m_mmu->mme_w(fb);
|
||||
break;
|
||||
WRITE_LINE_MEMBER(prof80_state::mini_w)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(prof80_state::mstop_w)
|
||||
{
|
||||
if (!state)
|
||||
{
|
||||
// turn off floppy motor
|
||||
motor(1);
|
||||
|
||||
// reset floppy motor off NE555 timer
|
||||
timer_set(attotime::never, TIMER_ID_MOTOR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// flr_w -
|
||||
// flr_w - flag register
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( prof80_state::flr_w )
|
||||
@ -179,13 +140,8 @@ WRITE8_MEMBER( prof80_state::flr_w )
|
||||
|
||||
*/
|
||||
|
||||
int fa = BIT(data, 7);
|
||||
int sa = (data >> 4) & 0x07;
|
||||
|
||||
int fb = BIT(data, 0);
|
||||
int sb = (data >> 1) & 0x07;
|
||||
|
||||
ls259_w(fa, sa, fb, sb);
|
||||
m_flra->write_bit((data >> 4) & 0x07, BIT(data, 7));
|
||||
m_flrb->write_bit((data >> 1) & 0x07, BIT(data, 0));
|
||||
}
|
||||
|
||||
|
||||
@ -258,9 +214,9 @@ READ8_MEMBER( prof80_state::status2_r )
|
||||
{
|
||||
case 0: js4 = 0; break;
|
||||
case 1: js4 = 1; break;
|
||||
case 2: js4 = !m_c0; break;
|
||||
case 3: js4 = !m_c1; break;
|
||||
case 4: js4 = !m_c2; break;
|
||||
case 2: js4 = !m_flra->q0_r(); break;
|
||||
case 3: js4 = !m_flra->q1_r(); break;
|
||||
case 4: js4 = !m_flra->q2_r(); break;
|
||||
}
|
||||
|
||||
data |= js4 << 4;
|
||||
@ -270,9 +226,9 @@ READ8_MEMBER( prof80_state::status2_r )
|
||||
{
|
||||
case 0: js5 = 0; break;
|
||||
case 1: js5 = 1; break;
|
||||
case 2: js5 = !m_c0; break;
|
||||
case 3: js5 = !m_c1; break;
|
||||
case 4: js5 = !m_c2; break;
|
||||
case 2: js5 = !m_flra->q0_r(); break;
|
||||
case 3: js5 = !m_flra->q1_r(); break;
|
||||
case 4: js5 = !m_flra->q2_r(); break;
|
||||
}
|
||||
|
||||
data |= js5 << 4;
|
||||
@ -472,26 +428,12 @@ void prof80_state::machine_start()
|
||||
m_rtc->oe_w(1);
|
||||
|
||||
// register for state saving
|
||||
save_item(NAME(m_c0));
|
||||
save_item(NAME(m_c1));
|
||||
save_item(NAME(m_c2));
|
||||
save_item(NAME(m_motor));
|
||||
save_item(NAME(m_ready));
|
||||
save_item(NAME(m_select));
|
||||
}
|
||||
|
||||
|
||||
void prof80_state::machine_reset()
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
ls259_w(0, i, 0, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE DRIVERS
|
||||
@ -507,15 +449,40 @@ static MACHINE_CONFIG_START( prof80 )
|
||||
MCFG_CPU_PROGRAM_MAP(prof80_mem)
|
||||
MCFG_CPU_IO_MAP(prof80_io)
|
||||
|
||||
// devices
|
||||
// MMU
|
||||
MCFG_PROF80_MMU_ADD(MMU_TAG, prof80_mmu)
|
||||
|
||||
// RTC
|
||||
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NOOP, NOOP)
|
||||
|
||||
// FDC
|
||||
MCFG_UPD765A_ADD(UPD765_TAG, true, true)
|
||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats)
|
||||
|
||||
// DEMUX latches
|
||||
MCFG_DEVICE_ADD(FLR_A_TAG, LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, data_in_w)) // TDI
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c0_w)) // C0
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c1_w)) // C1
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c2_w)) // C2
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(prof80_state, ready_w)) // READY
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, clk_w)) // TCK
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(prof80_state, inuse_w)) // IN USE
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(prof80_state, motor_w)) // _MOTOR
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(prof80_state, select_w)) // SELECT
|
||||
MCFG_DEVICE_ADD(FLR_B_TAG, LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(prof80_state, resf_w)) // RESF
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(prof80_state, mini_w)) // MINI
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) // _RTS
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) // TX
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(prof80_state, mstop_w)) // _MSTOP
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_txd)) // TXP
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, stb_w)) // TSTB
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE(MMU_TAG, prof80_mmu_device, mme_w)) // MME
|
||||
|
||||
// ECB bus
|
||||
MCFG_ECBBUS_ADD()
|
||||
MCFG_ECBBUS_SLOT_ADD(1, "ecb_1", ecbbus_cards, "grip21")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user