mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
just a little more cleanup (nw)
This commit is contained in:
parent
9663775fba
commit
54701050f7
@ -22,16 +22,55 @@ Inputs and Dip Switches by Stephh
|
||||
class acefruit_state : public driver_device
|
||||
{
|
||||
public:
|
||||
acefruit_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
enum
|
||||
{
|
||||
TIMER_ACEFRUIT_REFRESH
|
||||
};
|
||||
|
||||
acefruit_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_colorram(*this, "colorram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_port_payout(*this, "PAYOUT"),
|
||||
m_port_coinage(*this, "COINAGE"),
|
||||
m_lamps(*this, "lamp%u", 0U),
|
||||
m_solenoids(*this, "solenoid%u", 0U),
|
||||
m_refresh_timer(nullptr)
|
||||
{ }
|
||||
|
||||
DECLARE_DRIVER_INIT(sidewndr);
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(sidewndr_payout_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(starspnr_coinage_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(starspnr_payout_r);
|
||||
|
||||
void acefruit(machine_config &config);
|
||||
|
||||
protected:
|
||||
DECLARE_WRITE8_MEMBER(acefruit_colorram_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_coin_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_sound_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_lamp_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_solenoid_w);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
DECLARE_PALETTE_INIT(acefruit);
|
||||
uint32_t screen_update_acefruit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(acefruit_vblank);
|
||||
void acefruit_update_irq(int vpos);
|
||||
|
||||
void acefruit_io(address_map &map);
|
||||
void acefruit_map(address_map &map);
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_colorram;
|
||||
@ -39,32 +78,11 @@ public:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
optional_ioport m_port_payout;
|
||||
optional_ioport m_port_coinage;
|
||||
output_finder<16> m_lamps;
|
||||
output_finder<8> m_solenoids;
|
||||
emu_timer *m_refresh_timer;
|
||||
DECLARE_WRITE8_MEMBER(acefruit_colorram_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_coin_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_sound_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_lamp_w);
|
||||
DECLARE_WRITE8_MEMBER(acefruit_solenoid_w);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(sidewndr_payout_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(starspnr_coinage_r);
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(starspnr_payout_r);
|
||||
DECLARE_DRIVER_INIT(sidewndr);
|
||||
virtual void video_start() override;
|
||||
DECLARE_PALETTE_INIT(acefruit);
|
||||
uint32_t screen_update_acefruit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(acefruit_vblank);
|
||||
void acefruit_update_irq(int vpos);
|
||||
|
||||
enum
|
||||
{
|
||||
TIMER_ACEFRUIT_REFRESH
|
||||
};
|
||||
|
||||
void acefruit(machine_config &config);
|
||||
void acefruit_io(address_map &map);
|
||||
void acefruit_map(address_map &map);
|
||||
protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
};
|
||||
|
||||
|
||||
@ -109,6 +127,12 @@ void acefruit_state::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
}
|
||||
}
|
||||
|
||||
void acefruit_state::machine_start()
|
||||
{
|
||||
m_lamps.resolve();
|
||||
m_solenoids.resolve();
|
||||
}
|
||||
|
||||
void acefruit_state::video_start()
|
||||
{
|
||||
m_refresh_timer = timer_alloc(TIMER_ACEFRUIT_REFRESH);
|
||||
@ -211,9 +235,9 @@ CUSTOM_INPUT_MEMBER(acefruit_state::sidewndr_payout_r)
|
||||
switch (bit_mask)
|
||||
{
|
||||
case 0x01:
|
||||
return ((ioport("PAYOUT")->read() & bit_mask) >> 0);
|
||||
return ((m_port_payout->read() & bit_mask) >> 0);
|
||||
case 0x02:
|
||||
return ((ioport("PAYOUT")->read() & bit_mask) >> 1);
|
||||
return ((m_port_payout->read() & bit_mask) >> 1);
|
||||
default:
|
||||
logerror("sidewndr_payout_r : invalid %02X bit_mask\n",bit_mask);
|
||||
return 0;
|
||||
@ -227,13 +251,13 @@ CUSTOM_INPUT_MEMBER(acefruit_state::starspnr_coinage_r)
|
||||
switch (bit_mask)
|
||||
{
|
||||
case 0x01:
|
||||
return ((ioport("COINAGE")->read() & bit_mask) >> 0);
|
||||
return ((m_port_coinage->read() & bit_mask) >> 0);
|
||||
case 0x02:
|
||||
return ((ioport("COINAGE")->read() & bit_mask) >> 1);
|
||||
return ((m_port_coinage->read() & bit_mask) >> 1);
|
||||
case 0x04:
|
||||
return ((ioport("COINAGE")->read() & bit_mask) >> 2);
|
||||
return ((m_port_coinage->read() & bit_mask) >> 2);
|
||||
case 0x08:
|
||||
return ((ioport("COINAGE")->read() & bit_mask) >> 3);
|
||||
return ((m_port_coinage->read() & bit_mask) >> 3);
|
||||
default:
|
||||
logerror("starspnr_coinage_r : invalid %02X bit_mask\n",bit_mask);
|
||||
return 0;
|
||||
@ -247,11 +271,11 @@ CUSTOM_INPUT_MEMBER(acefruit_state::starspnr_payout_r)
|
||||
switch (bit_mask)
|
||||
{
|
||||
case 0x01:
|
||||
return ((ioport("PAYOUT")->read() & bit_mask) >> 0);
|
||||
return ((m_port_payout->read() & bit_mask) >> 0);
|
||||
case 0x02:
|
||||
return ((ioport("PAYOUT")->read() & bit_mask) >> 1);
|
||||
return ((m_port_payout->read() & bit_mask) >> 1);
|
||||
case 0x04:
|
||||
return ((ioport("PAYOUT")->read() & bit_mask) >> 2);
|
||||
return ((m_port_payout->read() & bit_mask) >> 2);
|
||||
default:
|
||||
logerror("starspnr_payout_r : invalid %02X bit_mask\n",bit_mask);
|
||||
return 0;
|
||||
@ -275,22 +299,14 @@ WRITE8_MEMBER(acefruit_state::acefruit_sound_w)
|
||||
|
||||
WRITE8_MEMBER(acefruit_state::acefruit_lamp_w)
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 8; i++ )
|
||||
{
|
||||
output().set_lamp_value( ( offset * 8 ) + i, ( data >> i ) & 1 );
|
||||
}
|
||||
for (int i = 0; i < 8; i++)
|
||||
m_lamps[(offset << 3) | i] = BIT(data, i);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(acefruit_state::acefruit_solenoid_w)
|
||||
{
|
||||
int i;
|
||||
|
||||
for( i = 0; i < 8; i++ )
|
||||
{
|
||||
output().set_indexed_value( "solenoid", i, ( data >> i ) & 1 );
|
||||
}
|
||||
for (int i = 0; i < 8; i++)
|
||||
m_solenoids[i] = BIT(data, i);
|
||||
}
|
||||
|
||||
PALETTE_INIT_MEMBER(acefruit_state, acefruit)
|
||||
|
@ -59,8 +59,13 @@ public:
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_beep(*this, "beeper")
|
||||
, m_keyboard(*this, "LINE.%u", 0)
|
||||
{ }
|
||||
{ }
|
||||
|
||||
void glasgow(machine_config &config);
|
||||
void amsterd(machine_config &config);
|
||||
void dallas32(machine_config &config);
|
||||
|
||||
protected:
|
||||
DECLARE_WRITE16_MEMBER(glasgow_lcd_w);
|
||||
DECLARE_WRITE16_MEMBER(glasgow_lcd_flag_w);
|
||||
DECLARE_READ16_MEMBER(glasgow_keys_r);
|
||||
@ -88,12 +93,10 @@ public:
|
||||
DECLARE_MACHINE_START(glasgow);
|
||||
DECLARE_MACHINE_RESET(glasgow);
|
||||
|
||||
void glasgow(machine_config &config);
|
||||
void dallas32(machine_config &config);
|
||||
void amsterd(machine_config &config);
|
||||
void amsterd_mem(address_map &map);
|
||||
void dallas32_mem(address_map &map);
|
||||
void glasgow_mem(address_map &map);
|
||||
|
||||
private:
|
||||
uint8_t m_lcd_shift_counter;
|
||||
uint8_t m_led7;
|
||||
@ -117,15 +120,15 @@ private:
|
||||
required_ioport_array<8> m_keyboard;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
struct BOARD_FIELD // FIXME: global structure
|
||||
{
|
||||
uint8_t field;
|
||||
uint8_t piece;
|
||||
} BOARD_FIELD;
|
||||
} BOARD_FIELD;
|
||||
|
||||
BOARD_FIELD l_board[8][8];
|
||||
BOARD_FIELD l_board[8][8]; // FIXME: mutable global state
|
||||
|
||||
/* starts at bottom left corner */
|
||||
/* starts at bottom left corner */
|
||||
const BOARD_FIELD l_start_board[8][8] =
|
||||
{
|
||||
{ {7,10}, {6,8}, {5,9}, {4,11}, {3,12}, {2,9}, {1,8}, {0,10} },
|
||||
@ -730,6 +733,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(glasgow_state::amsterd)
|
||||
glasgow(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(amsterd_mem)
|
||||
@ -737,10 +741,11 @@ MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(glasgow_state::dallas32)
|
||||
glasgow(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_REPLACE("maincpu", M68020, 14000000)
|
||||
MCFG_CPU_PROGRAM_MAP(dallas32_mem)
|
||||
MCFG_MACHINE_START_OVERRIDE(glasgow_state, dallas32 )
|
||||
MCFG_MACHINE_START_OVERRIDE(glasgow_state, dallas32)
|
||||
|
||||
MCFG_DEVICE_REMOVE("nmi_timer")
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", glasgow_state, update_nmi32, attotime::from_hz(50))
|
||||
|
@ -75,12 +75,8 @@ ToDo:
|
||||
#include "gts1.lh"
|
||||
|
||||
#define VERBOSE 1
|
||||
#include "logmacro.h"
|
||||
|
||||
#if VERBOSE
|
||||
#define LOG(x) logerror x
|
||||
#else
|
||||
#define LOG(x)
|
||||
#endif
|
||||
|
||||
class gts1_state : public genpin_class
|
||||
{
|
||||
@ -88,11 +84,15 @@ public:
|
||||
gts1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: genpin_class(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_dips(*this, "DSW%u", 0)
|
||||
, m_switches(*this, "X.%u", 0)
|
||||
{ }
|
||||
|
||||
DECLARE_DRIVER_INIT(gts1);
|
||||
|
||||
void gts1(machine_config &config);
|
||||
|
||||
protected:
|
||||
DECLARE_READ8_MEMBER (gts1_solenoid_r);
|
||||
DECLARE_WRITE8_MEMBER(gts1_solenoid_w);
|
||||
DECLARE_READ8_MEMBER (gts1_switches_r);
|
||||
@ -106,13 +106,16 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(gts1_io_w);
|
||||
DECLARE_READ8_MEMBER (gts1_pa_r);
|
||||
DECLARE_WRITE8_MEMBER(gts1_do_w);
|
||||
void gts1(machine_config &config);
|
||||
|
||||
virtual void machine_reset() override;
|
||||
|
||||
void gts1_map(address_map &map);
|
||||
void gts1_data(address_map &map);
|
||||
void gts1_io(address_map &map);
|
||||
void gts1_map(address_map &map);
|
||||
|
||||
private:
|
||||
virtual void machine_reset() override;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport_array<3> m_dips;
|
||||
required_ioport_array<5> m_switches;
|
||||
uint8_t m_strobe; //!< switches strobe lines (5 lower bits used)
|
||||
uint8_t m_nvram_addr; //!< NVRAM address
|
||||
@ -346,7 +349,7 @@ DRIVER_INIT_MEMBER(gts1_state,gts1)
|
||||
READ8_MEMBER (gts1_state::gts1_solenoid_r)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
LOG(("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -355,45 +358,45 @@ WRITE8_MEMBER(gts1_state::gts1_solenoid_w)
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
LOG(("%s: outhole <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: outhole <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 1:
|
||||
LOG(("%s: knocker <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: knocker <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 2:
|
||||
LOG(("%s: tens chime <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: tens chime <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 3:
|
||||
LOG(("%s: hundreds chime <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: hundreds chime <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 4:
|
||||
LOG(("%s: thousands chime <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: thousands chime <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 5:
|
||||
LOG(("%s: no. 6 <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: no. 6 <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 6:
|
||||
LOG(("%s: no. 7 <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: no. 7 <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 7:
|
||||
LOG(("%s: no. 8 <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: no. 8 <- %x\n", __FUNCTION__, data);
|
||||
break;
|
||||
case 8: case 9: case 10: case 11:
|
||||
LOG(("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data);
|
||||
break;
|
||||
case 12: // spare
|
||||
LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
|
||||
break;
|
||||
case 13: // RAM control E2
|
||||
LOG(("%s: RAM control E2 <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: RAM control E2 <- %x\n", __FUNCTION__, data);
|
||||
m_nvram_e2 = (data & 1) ? true : false;
|
||||
break;
|
||||
case 14: // RAM control W/R
|
||||
LOG(("%s: RAM control W/R <- %x\n", __FUNCTION__, data));
|
||||
LOG("%s: RAM control W/R <- %x\n", __FUNCTION__, data);
|
||||
m_nvram_wr = (data & 1) ? true : false;
|
||||
break;
|
||||
case 15: // spare
|
||||
LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -409,13 +412,13 @@ READ8_MEMBER (gts1_state::gts1_switches_r)
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG(("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data));
|
||||
LOG("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gts1_state::gts1_switches_w)
|
||||
{
|
||||
LOG(("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data);
|
||||
if (offset < 5) {
|
||||
// outputs O-0 to O-4 are the 5 strobe lines
|
||||
m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset);
|
||||
@ -462,7 +465,7 @@ WRITE8_MEMBER(gts1_state::gts1_display_w)
|
||||
};
|
||||
uint8_t a = ttl7448_mod[(data >> 0) & 15];
|
||||
uint8_t b = ttl7448_mod[(data >> 4) & 15];
|
||||
// LOG(("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b));
|
||||
// LOG("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b);
|
||||
if ((offset % 8) < 7) {
|
||||
output().set_indexed_value("digit8_", offset, a);
|
||||
output().set_indexed_value("digit8_", offset + 16, b);
|
||||
@ -505,7 +508,7 @@ READ8_MEMBER (gts1_state::gts1_nvram_r)
|
||||
uint8_t* nvram = memregion("nvram")->base();
|
||||
assert(nvram != nullptr);
|
||||
data = nvram[m_nvram_addr];
|
||||
LOG(("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data));
|
||||
LOG("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data);
|
||||
}
|
||||
break;
|
||||
case 1: // group B
|
||||
@ -533,7 +536,7 @@ WRITE8_MEMBER(gts1_state::gts1_nvram_w)
|
||||
break;
|
||||
case 2: // group C - data bits 3:0 of NVRAM
|
||||
if (m_nvram_wr && m_nvram_e2) {
|
||||
LOG(("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15));
|
||||
LOG("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15);
|
||||
uint8_t* nvram = memregion("nvram")->base();
|
||||
assert(nvram != nullptr);
|
||||
nvram[m_nvram_addr] = data & 15;
|
||||
@ -553,7 +556,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
switch (offset) {
|
||||
case 0: // group A switches S01-S04, S09-S12, S17-S20
|
||||
if (m_z30_out & 1) {
|
||||
uint8_t dsw0 = ioport("DSW0")->read();
|
||||
uint8_t dsw0 = m_dips[0]->read();
|
||||
if (0 == BIT(dsw0,0)) // S01
|
||||
data &= ~(1 << 3);
|
||||
if (0 == BIT(dsw0,1)) // S02
|
||||
@ -564,7 +567,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
data &= ~(1 << 0);
|
||||
}
|
||||
if (m_z30_out & 2) {
|
||||
uint8_t dsw1 = ioport("DSW1")->read();
|
||||
uint8_t dsw1 = m_dips[1]->read();
|
||||
if (0 == BIT(dsw1,0)) // S09
|
||||
data &= ~(1 << 0);
|
||||
if (0 == BIT(dsw1,1)) // S10
|
||||
@ -575,7 +578,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
data &= ~(1 << 3);
|
||||
}
|
||||
if (m_z30_out & 4) {
|
||||
uint8_t dsw2 = ioport("DSW2")->read();
|
||||
uint8_t dsw2 = m_dips[2]->read();
|
||||
if (0 == BIT(dsw2,0)) // S17
|
||||
data &= ~(1 << 0);
|
||||
if (0 == BIT(dsw2,1)) // S18
|
||||
@ -588,7 +591,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
break;
|
||||
case 1: // group B switches S05-S08, S09-S12, S17-S20
|
||||
if (m_z30_out & 1) {
|
||||
uint8_t dsw0 = ioport("DSW0")->read();
|
||||
uint8_t dsw0 = m_dips[0]->read();
|
||||
if (0 == BIT(dsw0,4)) // S05
|
||||
data &= ~(1 << 3);
|
||||
if (0 == BIT(dsw0,5)) // S06
|
||||
@ -599,7 +602,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
data &= ~(1 << 0);
|
||||
}
|
||||
if (m_z30_out & 2) {
|
||||
uint8_t dsw1 = ioport("DSW1")->read();
|
||||
uint8_t dsw1 = m_dips[1]->read();
|
||||
if (0 == BIT(dsw1,4)) // S13
|
||||
data &= ~(1 << 0);
|
||||
if (0 == BIT(dsw1,5)) // S14
|
||||
@ -610,7 +613,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
|
||||
data &= ~(1 << 3);
|
||||
}
|
||||
if (m_z30_out & 4) {
|
||||
uint8_t dsw2 = ioport("DSW2")->read();
|
||||
uint8_t dsw2 = m_dips[2]->read();
|
||||
if (0 == BIT(dsw2,4)) // S21
|
||||
data &= ~(1 << 0);
|
||||
if (0 == BIT(dsw2,5)) // S22
|
||||
@ -654,13 +657,13 @@ WRITE8_MEMBER(gts1_state::gts1_lamp_apm_w)
|
||||
READ8_MEMBER (gts1_state::gts1_io_r)
|
||||
{
|
||||
const uint8_t data = 0x0f;
|
||||
LOG(("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(gts1_state::gts1_io_w)
|
||||
{
|
||||
LOG(("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data));
|
||||
LOG("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER (gts1_state::gts1_pa_r)
|
||||
@ -668,7 +671,7 @@ READ8_MEMBER (gts1_state::gts1_pa_r)
|
||||
// return ROM nibble
|
||||
uint8_t *ROM = memregion("maincpu")->base();
|
||||
uint8_t data = ROM[0x2000 + m_6351_addr] & 0x0f;
|
||||
LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data));
|
||||
LOG("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -676,7 +679,7 @@ WRITE8_MEMBER(gts1_state::gts1_do_w)
|
||||
{
|
||||
// write address lines (DO1-4 to A0-3, DIO1-4 to A4-7)
|
||||
m_6351_addr = (m_6351_addr & 0x300) | data;
|
||||
LOG(("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr));
|
||||
LOG("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr);
|
||||
}
|
||||
|
||||
|
||||
|
@ -68,12 +68,12 @@ enum int_levels
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE_LINE_MEMBER(jpmsys5_state::generate_tms34061_interrupt)
|
||||
WRITE_LINE_MEMBER(jpmsys5v_state::generate_tms34061_interrupt)
|
||||
{
|
||||
m_maincpu->set_input_line(INT_TMS34061, state);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w)
|
||||
WRITE16_MEMBER(jpmsys5v_state::sys5_tms34061_w)
|
||||
{
|
||||
int func = (offset >> 19) & 3;
|
||||
int row = (offset >> 7) & 0x1ff;
|
||||
@ -96,7 +96,7 @@ WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w)
|
||||
m_tms34061->write(space, col | 1, row, func, data & 0xff);
|
||||
}
|
||||
|
||||
READ16_MEMBER(jpmsys5_state::sys5_tms34061_r)
|
||||
READ16_MEMBER(jpmsys5v_state::sys5_tms34061_r)
|
||||
{
|
||||
uint16_t data = 0;
|
||||
int func = (offset >> 19) & 3;
|
||||
@ -122,7 +122,7 @@ READ16_MEMBER(jpmsys5_state::sys5_tms34061_r)
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(jpmsys5_state::ramdac_w)
|
||||
WRITE16_MEMBER(jpmsys5v_state::ramdac_w)
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
@ -147,7 +147,7 @@ WRITE16_MEMBER(jpmsys5_state::ramdac_w)
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t jpmsys5_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
uint32_t jpmsys5v_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
@ -179,12 +179,11 @@ uint32_t jpmsys5_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb
|
||||
|
||||
void jpmsys5_state::sys5_draw_lamps()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i <8; i++)
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
output().set_lamp_value( (16*m_lamp_strobe)+i, (m_muxram[(4*m_lamp_strobe)] & (1 << i)) !=0);
|
||||
output().set_lamp_value((16*m_lamp_strobe)+i+8, (m_muxram[(4*m_lamp_strobe) +1 ] & (1 << i)) !=0);
|
||||
output().set_indexed_value("sys5led",(8*m_lamp_strobe)+i,(m_muxram[(4*m_lamp_strobe) +2 ] & (1 << i)) !=0);
|
||||
m_lamps [(m_lamp_strobe << 4) | i] = BIT(m_muxram[(m_lamp_strobe << 2) | 0], i);
|
||||
m_lamps [(m_lamp_strobe << 4) | i | 8] = BIT(m_muxram[(m_lamp_strobe << 2) | 1], i);
|
||||
m_sys5leds[(m_lamp_strobe << 3) | i] = BIT(m_muxram[(m_lamp_strobe << 2) | 2], i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,11 +193,9 @@ void jpmsys5_state::sys5_draw_lamps()
|
||||
*
|
||||
****************************************/
|
||||
|
||||
WRITE16_MEMBER(jpmsys5_state::rombank_w)
|
||||
WRITE16_MEMBER(jpmsys5v_state::rombank_w)
|
||||
{
|
||||
uint8_t *rom = memregion("maincpu")->base();
|
||||
data &= 0x1f;
|
||||
membank("bank1")->set_base(&rom[0x20000 + 0x20000 * data]);
|
||||
m_rombank->set_entry(data & 0x1f);
|
||||
}
|
||||
|
||||
READ16_MEMBER(jpmsys5_state::coins_r)
|
||||
@ -304,7 +301,7 @@ ADDRESS_MAP_START(jpmsys5_state::m68000_awp_map_saa)
|
||||
AM_RANGE(0x04c100, 0x04c105) AM_READWRITE(jpm_upd7759_r, jpm_upd7759_w) // do the SAA boards have the UPD?
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(jpmsys5_state::m68000_map)
|
||||
ADDRESS_MAP_START(jpmsys5v_state::m68000_map)
|
||||
AM_IMPORT_FROM(jpm_sys5_common_map)
|
||||
AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE(rombank_w) // extra on video system (rom board?) (although regular games do write here?)
|
||||
AM_RANGE(0x020000, 0x03ffff) AM_ROMBANK("bank1") // extra on video system (rom board?)
|
||||
@ -318,63 +315,56 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Touchscreen controller simulation
|
||||
*
|
||||
*************************************/
|
||||
/*************************************
|
||||
*
|
||||
* Touchscreen controller simulation
|
||||
*
|
||||
*************************************/
|
||||
|
||||
/* Serial bit transmission callback */
|
||||
TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb)
|
||||
TIMER_CALLBACK_MEMBER(jpmsys5v_state::touch_cb)
|
||||
{
|
||||
switch (m_touch_state)
|
||||
{
|
||||
case IDLE:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case START:
|
||||
{
|
||||
m_touch_shift_cnt = 0;
|
||||
m_acia6850_2->write_rxd(0);
|
||||
m_touch_state = DATA;
|
||||
break;
|
||||
}
|
||||
case DATA:
|
||||
{
|
||||
m_acia6850_2->write_rxd((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
|
||||
case IDLE:
|
||||
break;
|
||||
|
||||
if (++m_touch_shift_cnt == 8)
|
||||
m_touch_state = STOP1;
|
||||
case START:
|
||||
m_touch_shift_cnt = 0;
|
||||
m_acia6850[2]->write_rxd(0);
|
||||
m_touch_state = DATA;
|
||||
break;
|
||||
|
||||
break;
|
||||
}
|
||||
case STOP1:
|
||||
case DATA:
|
||||
m_acia6850[2]->write_rxd((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
|
||||
|
||||
if (++m_touch_shift_cnt == 8)
|
||||
m_touch_state = STOP1;
|
||||
|
||||
break;
|
||||
|
||||
case STOP1:
|
||||
m_acia6850[2]->write_rxd(1);
|
||||
m_touch_state = STOP2;
|
||||
break;
|
||||
|
||||
case STOP2:
|
||||
m_acia6850[2]->write_rxd(1);
|
||||
|
||||
if (++m_touch_data_count == 3)
|
||||
{
|
||||
m_acia6850_2->write_rxd(1);
|
||||
m_touch_state = STOP2;
|
||||
break;
|
||||
m_touch_timer->reset();
|
||||
m_touch_state = IDLE;
|
||||
}
|
||||
case STOP2:
|
||||
else
|
||||
{
|
||||
m_acia6850_2->write_rxd(1);
|
||||
|
||||
if (++m_touch_data_count == 3)
|
||||
{
|
||||
m_touch_timer->reset();
|
||||
m_touch_state = IDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_touch_state = START;
|
||||
}
|
||||
|
||||
break;
|
||||
m_touch_state = START;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(jpmsys5_state::touchscreen_press)
|
||||
INPUT_CHANGED_MEMBER(jpmsys5v_state::touchscreen_press)
|
||||
{
|
||||
if (newval == 0)
|
||||
{
|
||||
@ -382,8 +372,8 @@ INPUT_CHANGED_MEMBER(jpmsys5_state::touchscreen_press)
|
||||
|
||||
/* Each touch screen packet is 3 bytes */
|
||||
m_touch_data[0] = 0x2a;
|
||||
m_touch_data[1] = 0x7 - (ioport("TOUCH_Y")->read() >> 5) + 0x30;
|
||||
m_touch_data[2] = (ioport("TOUCH_X")->read() >> 5) + 0x30;
|
||||
m_touch_data[1] = 0x7 - (m_touch_axes[1]->read() >> 5) + 0x30;
|
||||
m_touch_data[2] = (m_touch_axes[0]->read() >> 5) + 0x30;
|
||||
|
||||
/* Start sending the data to the 68000 serially */
|
||||
m_touch_data_count = 0;
|
||||
@ -453,7 +443,7 @@ static INPUT_PORTS_START( monopoly )
|
||||
PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("TOUCH_PUSH")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, jpmsys5_state,touchscreen_press, nullptr)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, jpmsys5v_state,touchscreen_press, nullptr)
|
||||
|
||||
PORT_START("TOUCH_X")
|
||||
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
|
||||
@ -476,37 +466,26 @@ READ8_MEMBER(jpmsys5_state::u29_porta_r)
|
||||
{
|
||||
int meter_bit =0;
|
||||
|
||||
if (m_meters != nullptr)
|
||||
if (m_meters)
|
||||
{
|
||||
int combined_meter = m_meters->GetActivity(0) | m_meters->GetActivity(1) |
|
||||
m_meters->GetActivity(2) | m_meters->GetActivity(3) |
|
||||
m_meters->GetActivity(4) | m_meters->GetActivity(5) |
|
||||
m_meters->GetActivity(6) | m_meters->GetActivity(7);
|
||||
|
||||
if(combined_meter)
|
||||
{
|
||||
if (combined_meter)
|
||||
meter_bit = 0x80;
|
||||
}
|
||||
else
|
||||
{
|
||||
meter_bit = 0x00;
|
||||
}
|
||||
|
||||
return m_direct_port->read() | meter_bit;
|
||||
}
|
||||
|
||||
else
|
||||
return m_direct_port->read() | meter_bit;
|
||||
return m_direct_port->read() | meter_bit;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(jpmsys5_state::u29_portb_w)
|
||||
{
|
||||
if (m_meters != nullptr)
|
||||
if (m_meters)
|
||||
{
|
||||
for (int meter = 0; meter < 8; meter ++)
|
||||
{
|
||||
for (int meter = 0; meter < 8; meter++)
|
||||
m_meters->update(meter, (data & (1 << meter)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -539,11 +518,8 @@ WRITE_LINE_MEMBER(jpmsys5_state::u26_o1_callback)
|
||||
{
|
||||
if (!state) //falling edge
|
||||
{
|
||||
m_lamp_strobe++;
|
||||
if (m_lamp_strobe >15)
|
||||
{
|
||||
m_lamp_strobe =0;
|
||||
}
|
||||
if (++m_lamp_strobe > 15)
|
||||
m_lamp_strobe = 0;
|
||||
}
|
||||
sys5_draw_lamps();
|
||||
}
|
||||
@ -577,36 +553,27 @@ WRITE_LINE_MEMBER(jpmsys5_state::a2_tx_w)
|
||||
m_a2_data_out = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(jpmsys5_state::write_acia_clock)
|
||||
{
|
||||
m_acia6850_0->write_txc(state);
|
||||
m_acia6850_0->write_rxc(state);
|
||||
m_acia6850_1->write_txc(state);
|
||||
m_acia6850_1->write_rxc(state);
|
||||
m_acia6850_2->write_txc(state);
|
||||
m_acia6850_2->write_rxc(state);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Initialisation
|
||||
*
|
||||
*************************************/
|
||||
|
||||
MACHINE_START_MEMBER(jpmsys5_state,jpmsys5v)
|
||||
void jpmsys5v_state::machine_start()
|
||||
{
|
||||
membank("bank1")->set_base(memregion("maincpu")->base()+0x20000);
|
||||
m_touch_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jpmsys5_state::touch_cb),this));
|
||||
jpmsys5_state::machine_start();
|
||||
|
||||
m_rombank->configure_entries(0, 32, memregion("maincpu")->base() + 0x20000, 0x20000);
|
||||
m_rombank->set_entry(0);
|
||||
m_touch_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jpmsys5v_state::touch_cb),this));
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v)
|
||||
void jpmsys5v_state::machine_reset()
|
||||
{
|
||||
jpmsys5_state::machine_reset();
|
||||
|
||||
m_touch_timer->reset();
|
||||
m_touch_state = IDLE;
|
||||
m_acia6850_2->write_rxd(1);
|
||||
m_acia6850_2->write_dcd(0);
|
||||
m_vfd->reset();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -616,40 +583,42 @@ MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
MACHINE_CONFIG_START(jpmsys5_state::jpmsys5v)
|
||||
MACHINE_CONFIG_START(jpmsys5v_state::jpmsys5v)
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL(8'000'000))
|
||||
MCFG_CPU_PROGRAM_MAP(m68000_map)
|
||||
|
||||
MCFG_DEVICE_ADD("acia6850_0", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a0_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a0_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("acia6850_1", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a1_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a1_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a2_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a2_tx_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_S16LF01_ADD("vfd",0)//for debug ports
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5v)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5v)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL(40'000'000) / 4, 676, 20*4, 147*4, 256, 0, 254)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jpmsys5_state, screen_update_jpmsys5v)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jpmsys5v_state, screen_update_jpmsys5v)
|
||||
|
||||
MCFG_DEVICE_ADD("tms34061", TMS34061, 0)
|
||||
MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */
|
||||
MCFG_TMS34061_VRAM_SIZE(0x40000) /* size of video RAM */
|
||||
MCFG_TMS34061_INTERRUPT_CB(WRITELINE(jpmsys5_state, generate_tms34061_interrupt)) /* interrupt gen callback */
|
||||
MCFG_TMS34061_INTERRUPT_CB(WRITELINE(jpmsys5v_state, generate_tms34061_interrupt)) /* interrupt gen callback */
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 16)
|
||||
|
||||
@ -663,18 +632,18 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5v)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||
|
||||
MCFG_DEVICE_ADD("6821pia", PIA6821, 0)
|
||||
MCFG_PIA_READPA_HANDLER(READ8(jpmsys5_state, u29_porta_r))
|
||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(jpmsys5_state, u29_portb_w))
|
||||
MCFG_PIA_CA2_HANDLER(WRITELINE(jpmsys5_state, u29_ca2_w))
|
||||
MCFG_PIA_CB2_HANDLER(WRITELINE(jpmsys5_state, u29_cb2_w))
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(jpmsys5_state, pia_irq))
|
||||
MCFG_PIA_IRQB_HANDLER(WRITELINE(jpmsys5_state, pia_irq))
|
||||
MCFG_PIA_READPA_HANDLER(READ8(jpmsys5v_state, u29_porta_r))
|
||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(jpmsys5v_state, u29_portb_w))
|
||||
MCFG_PIA_CA2_HANDLER(WRITELINE(jpmsys5v_state, u29_ca2_w))
|
||||
MCFG_PIA_CB2_HANDLER(WRITELINE(jpmsys5v_state, u29_cb2_w))
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(jpmsys5v_state, pia_irq))
|
||||
MCFG_PIA_IRQB_HANDLER(WRITELINE(jpmsys5v_state, pia_irq))
|
||||
|
||||
/* 6840 PTM */
|
||||
MCFG_DEVICE_ADD("6840ptm", PTM6840, 1000000)
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
|
||||
MCFG_PTM6840_O1_CB(WRITELINE(jpmsys5_state, u26_o1_callback))
|
||||
MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5_state, ptm_irq))
|
||||
MCFG_PTM6840_O1_CB(WRITELINE(jpmsys5v_state, u26_o1_callback))
|
||||
MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5v_state, ptm_irq))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
READ16_MEMBER(jpmsys5_state::mux_awp_r)
|
||||
@ -812,15 +781,16 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
MACHINE_START_MEMBER(jpmsys5_state,jpmsys5)
|
||||
void jpmsys5_state::machine_start()
|
||||
{
|
||||
// membank("bank1")->set_base(memregion("maincpu")->base()+0x20000);
|
||||
m_lamps.resolve();
|
||||
m_sys5leds.resolve();
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5)
|
||||
void jpmsys5_state::machine_reset()
|
||||
{
|
||||
m_acia6850_2->write_rxd(1);
|
||||
m_acia6850_2->write_dcd(0);
|
||||
m_acia6850[2]->write_rxd(1);
|
||||
m_acia6850[2]->write_dcd(0);
|
||||
m_vfd->reset();
|
||||
}
|
||||
|
||||
@ -850,13 +820,16 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5_ym)
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_S16LF01_ADD("vfd",0)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5)
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("upd7759", UPD7759, UPD7759_STANDARD_CLOCK)
|
||||
@ -903,13 +876,16 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5)
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_S16LF01_ADD("vfd",0)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5)
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("upd7759", UPD7759, UPD7759_STANDARD_CLOCK)
|
||||
@ -1036,8 +1012,8 @@ ROM_END
|
||||
|
||||
|
||||
/* Video based titles */
|
||||
GAME( 1994, monopoly , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", 0 )
|
||||
GAME( 1994, monopolya , monopoly , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", 0 )
|
||||
GAME( 1995, monoplcl , monopoly , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", 0 )
|
||||
GAME( 1995, monopldx , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", 0 )
|
||||
GAME( 199?, cashcade , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
|
||||
GAME( 1994, monopoly , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", 0 )
|
||||
GAME( 1994, monopolya , monopoly , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", 0 )
|
||||
GAME( 1995, monoplcl , monopoly , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", 0 )
|
||||
GAME( 1995, monopldx , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", 0 )
|
||||
GAME( 199?, cashcade , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
|
||||
|
@ -1,5 +1,9 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Philip Bennett, James Wallace, David Haywood
|
||||
#ifndef MAME_INCLUDES_JPMSYS5_H
|
||||
#define MAME_INCLUDES_JPMSYS5_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/6821pia.h"
|
||||
@ -20,54 +24,27 @@ public:
|
||||
jpmsys5_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_acia6850_0(*this, "acia6850_0"),
|
||||
m_acia6850_1(*this, "acia6850_1"),
|
||||
m_acia6850_2(*this, "acia6850_2"),
|
||||
m_acia6850(*this, "acia6850_%u", 0U),
|
||||
m_upd7759(*this, "upd7759"),
|
||||
m_tms34061(*this, "tms34061"),
|
||||
m_vfd(*this, "vfd"),
|
||||
m_direct_port(*this, "DIRECT"),
|
||||
m_palette(*this, "palette"),
|
||||
m_meters(*this, "meters") { }
|
||||
m_meters(*this, "meters"),
|
||||
m_lamps(*this, "lamp%u", 0U),
|
||||
m_sys5leds(*this, "sys5led%u", 0U)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<acia6850_device> m_acia6850_0;
|
||||
required_device<acia6850_device> m_acia6850_1;
|
||||
required_device<acia6850_device> m_acia6850_2;
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
optional_device<tms34061_device> m_tms34061;
|
||||
optional_device<s16lf01_device> m_vfd;
|
||||
required_ioport m_direct_port;
|
||||
optional_device<palette_device> m_palette;
|
||||
optional_device<meters_device> m_meters; //jpmsys5v doesn't use this
|
||||
void jpmsys5(machine_config &config);
|
||||
void jpmsys5_ym(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
uint8_t m_palette_val[16][3];
|
||||
int m_pal_addr;
|
||||
int m_pal_idx;
|
||||
int m_touch_state;
|
||||
emu_timer *m_touch_timer;
|
||||
int m_touch_data_count;
|
||||
int m_touch_data[3];
|
||||
int m_touch_shift_cnt;
|
||||
int m_lamp_strobe;
|
||||
int m_mpxclk;
|
||||
int m_muxram[255];
|
||||
int m_alpha_clock;
|
||||
int m_chop;
|
||||
uint8_t m_a0_data_out;
|
||||
uint8_t m_a1_data_out;
|
||||
uint8_t m_a2_data_out;
|
||||
DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
|
||||
DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
|
||||
DECLARE_READ16_MEMBER(sys5_tms34061_r);
|
||||
DECLARE_WRITE16_MEMBER(ramdac_w);
|
||||
DECLARE_WRITE16_MEMBER(rombank_w);
|
||||
DECLARE_READ16_MEMBER(coins_r);
|
||||
DECLARE_WRITE16_MEMBER(coins_w);
|
||||
DECLARE_READ16_MEMBER(unk_r);
|
||||
DECLARE_WRITE16_MEMBER(mux_w);
|
||||
DECLARE_READ16_MEMBER(mux_r);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(touchscreen_press);
|
||||
DECLARE_WRITE16_MEMBER(jpm_upd7759_w);
|
||||
DECLARE_READ16_MEMBER(jpm_upd7759_r);
|
||||
DECLARE_WRITE_LINE_MEMBER(ptm_irq);
|
||||
@ -81,21 +58,80 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(a0_tx_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(a1_tx_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(a2_tx_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
|
||||
DECLARE_READ16_MEMBER(mux_awp_r);
|
||||
DECLARE_READ16_MEMBER(coins_awp_r);
|
||||
void sys5_draw_lamps();
|
||||
DECLARE_MACHINE_START(jpmsys5v);
|
||||
DECLARE_MACHINE_RESET(jpmsys5v);
|
||||
DECLARE_MACHINE_START(jpmsys5);
|
||||
DECLARE_MACHINE_RESET(jpmsys5);
|
||||
uint32_t screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(touch_cb);
|
||||
void jpmsys5(machine_config &config);
|
||||
void jpmsys5_ym(machine_config &config);
|
||||
void jpmsys5v(machine_config &config);
|
||||
|
||||
void jpm_sys5_common_map(address_map &map);
|
||||
void m68000_awp_map(address_map &map);
|
||||
void m68000_awp_map_saa(address_map &map);
|
||||
void m68000_map(address_map &map);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device_array<acia6850_device, 3> m_acia6850;
|
||||
|
||||
private:
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
optional_device<s16lf01_device> m_vfd;
|
||||
required_ioport m_direct_port;
|
||||
optional_device<meters_device> m_meters; //jpmsys5v doesn't use this
|
||||
output_finder<16 * 16> m_lamps;
|
||||
output_finder<16 * 8> m_sys5leds;
|
||||
|
||||
int m_lamp_strobe;
|
||||
int m_mpxclk;
|
||||
int m_muxram[255];
|
||||
int m_alpha_clock;
|
||||
int m_chop;
|
||||
uint8_t m_a0_data_out;
|
||||
uint8_t m_a1_data_out;
|
||||
uint8_t m_a2_data_out;
|
||||
};
|
||||
|
||||
|
||||
class jpmsys5v_state : public jpmsys5_state
|
||||
{
|
||||
public:
|
||||
jpmsys5v_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
jpmsys5_state(mconfig, type, tag),
|
||||
m_tms34061(*this, "tms34061"),
|
||||
m_palette(*this, "palette"),
|
||||
m_rombank(*this, "bank1"),
|
||||
m_touch_axes(*this, { "TOUCH_X", "TOUCH_Y" }),
|
||||
m_touch_timer(nullptr)
|
||||
{ }
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER(touchscreen_press);
|
||||
|
||||
void jpmsys5v(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
|
||||
DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
|
||||
DECLARE_READ16_MEMBER(sys5_tms34061_r);
|
||||
DECLARE_WRITE16_MEMBER(ramdac_w);
|
||||
DECLARE_WRITE16_MEMBER(rombank_w);
|
||||
uint32_t screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(touch_cb);
|
||||
|
||||
void m68000_map(address_map &map);
|
||||
|
||||
private:
|
||||
required_device<tms34061_device> m_tms34061;
|
||||
required_device<palette_device> m_palette;
|
||||
required_memory_bank m_rombank;
|
||||
required_ioport_array<2> m_touch_axes;
|
||||
|
||||
uint8_t m_palette_val[16][3];
|
||||
int m_pal_addr;
|
||||
int m_pal_idx;
|
||||
int m_touch_state;
|
||||
emu_timer *m_touch_timer;
|
||||
int m_touch_data_count;
|
||||
int m_touch_data[3];
|
||||
int m_touch_shift_cnt;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_JPMSYS5_H
|
||||
|
Loading…
Reference in New Issue
Block a user