mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
New clones marked as NOT_WORKING
-------------------------------- Tetris (bootleg set 5) [Jorge Silva] - audio/nichisnd.cpp, audio/rax.cpp, drivers/usgames.cpp: used finder for memory banks
This commit is contained in:
parent
48ae7402e9
commit
3ee2758bb2
@ -1176,8 +1176,6 @@ files {
|
||||
MAME_DIR .. "src/mame/machine/nl_tank.cpp",
|
||||
MAME_DIR .. "src/mame/machine/nl_tank.h",
|
||||
MAME_DIR .. "src/mame/drivers/atetris.cpp",
|
||||
MAME_DIR .. "src/mame/includes/atetris.h",
|
||||
MAME_DIR .. "src/mame/video/atetris.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/avalnche.cpp",
|
||||
MAME_DIR .. "src/mame/includes/avalnche.h",
|
||||
MAME_DIR .. "src/mame/audio/avalnche.cpp",
|
||||
@ -5165,8 +5163,6 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/unkpoker.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/usbilliards.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/usgames.cpp",
|
||||
MAME_DIR .. "src/mame/includes/usgames.h",
|
||||
MAME_DIR .. "src/mame/video/usgames.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/vamphalf.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/vcombat.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/vectrex.cpp",
|
||||
|
@ -37,7 +37,8 @@ DEFINE_DEVICE_TYPE(NICHISND, nichisnd_device, "nichisnd", "Nichibutsu Sound Devi
|
||||
nichisnd_device::nichisnd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, NICHISND, tag, owner, clock),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_sound_rom(*this, "audiorom")
|
||||
m_sound_rom(*this, "audiorom"),
|
||||
m_soundbank(*this, "soundbank")
|
||||
{
|
||||
}
|
||||
|
||||
@ -45,7 +46,7 @@ void nichisnd_device::nichisnd_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x77ff).rom().region("audiorom", 0);
|
||||
map(0x7800, 0x7fff).ram();
|
||||
map(0x8000, 0xffff).bankr("soundbank");
|
||||
map(0x8000, 0xffff).bankr(m_soundbank);
|
||||
}
|
||||
|
||||
void nichisnd_device::nichisnd_io_map(address_map &map)
|
||||
@ -56,7 +57,7 @@ void nichisnd_device::nichisnd_io_map(address_map &map)
|
||||
|
||||
void nichisnd_device::soundbank_w(uint8_t data)
|
||||
{
|
||||
membank("soundbank")->set_entry(data & 0x03);
|
||||
m_soundbank->set_entry(data & 0x03);
|
||||
}
|
||||
|
||||
void nichisnd_device::soundlatch_clear_w(uint8_t data)
|
||||
@ -115,8 +116,8 @@ void nichisnd_device::device_start()
|
||||
SNDROM[0x0213] = 0x00; // DI -> NOP
|
||||
|
||||
// initialize sound rom bank
|
||||
membank("soundbank")->configure_entries(0, 3, m_sound_rom + 0x8000, 0x8000);
|
||||
membank("soundbank")->set_entry(0);
|
||||
m_soundbank->configure_entries(0, 3, m_sound_rom + 0x8000, 0x8000);
|
||||
m_soundbank->set_entry(0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -46,6 +46,7 @@ protected:
|
||||
private:
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_region_ptr<uint8_t> m_sound_rom;
|
||||
required_memory_bank m_soundbank;
|
||||
|
||||
void soundlatch_clear_w(uint8_t data);
|
||||
void soundbank_w(uint8_t data);
|
||||
|
@ -236,9 +236,9 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback )
|
||||
void acclaim_rax_device::update_data_ram_bank()
|
||||
{
|
||||
if (m_dmovlay_val == 0)
|
||||
membank("databank")->set_entry(0);
|
||||
m_adsp_data_bank->set_entry(0);
|
||||
else
|
||||
membank("databank")->set_entry(1 + m_data_bank);
|
||||
m_adsp_data_bank->set_entry(1 + m_data_bank);
|
||||
}
|
||||
|
||||
void acclaim_rax_device::ram_bank_w(uint16_t data)
|
||||
@ -281,7 +281,7 @@ void acclaim_rax_device::adsp_program_map(address_map &map)
|
||||
void acclaim_rax_device::adsp_data_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x1fff).bankrw("databank");
|
||||
map(0x0000, 0x1fff).bankrw(m_adsp_data_bank);
|
||||
map(0x2000, 0x3fdf).ram(); // Internal RAM
|
||||
map(0x3fe0, 0x3fff).rw(FUNC(acclaim_rax_device::adsp_control_r), FUNC(acclaim_rax_device::adsp_control_w));
|
||||
}
|
||||
@ -302,7 +302,7 @@ void acclaim_rax_device::device_start()
|
||||
|
||||
// 1 bank for internal
|
||||
m_banked_ram = make_unique_clear<uint16_t[]>(0x2000 * 5);
|
||||
membank("databank")->configure_entries(0, 5, &m_banked_ram[0], 0x2000*sizeof(uint16_t));
|
||||
m_adsp_data_bank->configure_entries(0, 5, &m_banked_ram[0], 0x2000*sizeof(uint16_t));
|
||||
}
|
||||
|
||||
void acclaim_rax_device::device_reset()
|
||||
|
@ -50,17 +50,177 @@
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "machine/slapstic.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "includes/atetris.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/eeprompar.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "sound/sn76496.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
|
||||
#define MASTER_CLOCK XTAL(14'318'181)
|
||||
#define BOOTLEG_CLOCK XTAL(14'745'600)
|
||||
namespace {
|
||||
|
||||
|
||||
class atetris_state : public driver_device
|
||||
{
|
||||
public:
|
||||
atetris_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_slapstic(*this, "slapstic"),
|
||||
m_slapstic_bank(*this, "slapstic_bank"),
|
||||
m_slapstic_region(*this, "maincpu"),
|
||||
m_videoram(*this, "videoram")
|
||||
{
|
||||
}
|
||||
|
||||
void atetris_base(machine_config &config);
|
||||
void atetris_pokey(machine_config &config);
|
||||
void atetris(machine_config &config);
|
||||
void atetrisb2(machine_config &config);
|
||||
void atetrisb5(machine_config &config);
|
||||
|
||||
void init_atetris();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
optional_device<atari_slapstic_device> m_slapstic;
|
||||
optional_memory_bank m_slapstic_bank;
|
||||
required_region_ptr<uint8_t> m_slapstic_region;
|
||||
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
|
||||
emu_timer *m_interrupt_timer;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
|
||||
void irq_ack_w(uint8_t data);
|
||||
void coincount_w(uint8_t data);
|
||||
void videoram_w(offs_t offset, uint8_t data);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(interrupt_gen);
|
||||
void reset_bank();
|
||||
|
||||
void atetrisb2_map(address_map &map);
|
||||
void atetrisb5_map(address_map &map);
|
||||
void main_map(address_map &map);
|
||||
};
|
||||
|
||||
class atetris_bartop_state : public atetris_state
|
||||
{
|
||||
public:
|
||||
atetris_bartop_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
atetris_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void atetrisbp(machine_config &config);
|
||||
|
||||
private:
|
||||
void output_w(uint8_t data);
|
||||
|
||||
void atetrisbp_map(address_map &map);
|
||||
};
|
||||
|
||||
class atetris_mcu_state : public atetris_state
|
||||
{
|
||||
public:
|
||||
atetris_mcu_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
atetris_state(mconfig, type, tag),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_soundlatch(*this, "soundlatch%u", 1U),
|
||||
m_sn(*this, "sn%u", 1U)
|
||||
{
|
||||
}
|
||||
|
||||
void atetrisb3(machine_config &config);
|
||||
|
||||
private:
|
||||
uint8_t mcu_bus_r();
|
||||
void mcu_p2_w(uint8_t data);
|
||||
void mcu_reg_w(offs_t offset, uint8_t data);
|
||||
|
||||
void atetrisb3_map(address_map &map);
|
||||
|
||||
required_device<i8749_device> m_mcu;
|
||||
required_device_array<generic_latch_8_device, 2> m_soundlatch;
|
||||
required_device_array<sn76496_base_device, 4> m_sn;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Tilemap callback
|
||||
*
|
||||
*************************************/
|
||||
|
||||
TILE_GET_INFO_MEMBER(atetris_state::get_tile_info)
|
||||
{
|
||||
int code = m_videoram[tile_index * 2] | ((m_videoram[tile_index * 2 + 1] & 7) << 8);
|
||||
int color = (m_videoram[tile_index * 2 + 1] & 0xf0) >> 4;
|
||||
|
||||
tileinfo.set(0, code, color, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Video RAM write
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void atetris_state::videoram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_videoram[offset] = data;
|
||||
m_bg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Video system start
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void atetris_state::video_start()
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(atetris_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main refresh
|
||||
*
|
||||
*************************************/
|
||||
|
||||
uint32_t atetris_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -73,10 +233,10 @@ TIMER_CALLBACK_MEMBER(atetris_state::interrupt_gen)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
/* assert/deassert the interrupt */
|
||||
// assert/deassert the interrupt
|
||||
m_maincpu->set_input_line(0, (scanline & 32) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
/* set the next timer */
|
||||
// set the next timer
|
||||
scanline += 32;
|
||||
if (scanline >= 256)
|
||||
scanline -= 256;
|
||||
@ -99,18 +259,21 @@ void atetris_state::irq_ack_w(uint8_t data)
|
||||
|
||||
void atetris_state::machine_start()
|
||||
{
|
||||
/* Prepare the rom bank */
|
||||
m_slapstic_bank->configure_entries(0, 2, m_slapstic_region, 0x4000);
|
||||
m_slapstic_bank->configure_entries(2, 2, m_slapstic_region, 0x4000);
|
||||
// Prepare the ROM bank
|
||||
if (m_slapstic_bank.found())
|
||||
{
|
||||
m_slapstic_bank->configure_entries(0, 2, m_slapstic_region, 0x4000);
|
||||
m_slapstic_bank->configure_entries(2, 2, m_slapstic_region, 0x4000);
|
||||
}
|
||||
|
||||
/* Allocate interrupt timer */
|
||||
m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(atetris_state::interrupt_gen),this));
|
||||
// Allocate interrupt timer
|
||||
m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(atetris_state::interrupt_gen), this));
|
||||
}
|
||||
|
||||
|
||||
void atetris_state::machine_reset()
|
||||
{
|
||||
/* start interrupts going (32V clocked by 16V) */
|
||||
// start interrupts going (32V clocked by 16V)
|
||||
m_interrupt_timer->adjust(m_screen->time_until_pos(48), 48);
|
||||
}
|
||||
|
||||
@ -133,8 +296,8 @@ void atetris_bartop_state::output_w(uint8_t data)
|
||||
{
|
||||
coincount_w(data);
|
||||
|
||||
/* atetrisbp: $3c00 also handles ROM bank selection */
|
||||
/* game writes 0x4 to select bank 0, 0x5 to select bank 1 */
|
||||
// atetrisbp: $3c00 also handles ROM bank selection
|
||||
// game writes 0x4 to select bank 0, 0x5 to select bank 1
|
||||
if (data & 4)
|
||||
m_slapstic_bank->set_entry(data & 1);
|
||||
}
|
||||
@ -146,11 +309,11 @@ void atetris_bartop_state::output_w(uint8_t data)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
/* full address map derived from schematics */
|
||||
// full address map derived from schematics
|
||||
void atetris_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram();
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_state::videoram_w)).share("videoram");
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_state::videoram_w)).share(m_videoram);
|
||||
map(0x2000, 0x20ff).mirror(0x0300).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
map(0x2400, 0x25ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));
|
||||
map(0x2800, 0x280f).mirror(0x03e0).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
@ -167,7 +330,7 @@ void atetris_state::main_map(address_map &map)
|
||||
void atetris_state::atetrisb2_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram();
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_state::videoram_w)).share("videoram");
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_state::videoram_w)).share(m_videoram);
|
||||
map(0x2000, 0x20ff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
map(0x2400, 0x25ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));
|
||||
map(0x2802, 0x2802).w("sn1", FUNC(sn76496_device::write));
|
||||
@ -189,7 +352,7 @@ void atetris_state::atetrisb2_map(address_map &map)
|
||||
void atetris_mcu_state::atetrisb3_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram();
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_mcu_state::videoram_w)).share("videoram");
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_mcu_state::videoram_w)).share(m_videoram);
|
||||
map(0x2000, 0x20ff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
map(0x2400, 0x27ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));
|
||||
map(0x2800, 0x281f).nopr().w(FUNC(atetris_mcu_state::mcu_reg_w));
|
||||
@ -204,10 +367,27 @@ void atetris_mcu_state::atetrisb3_map(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
void atetris_state::atetrisb5_map(address_map &map) // TODO: Pokeys and Slapstic are substituted by a big TTL board and an additional 2716 EPROM
|
||||
{
|
||||
map(0x0000, 0x0fff).ram();
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_state::videoram_w)).share(m_videoram);
|
||||
map(0x2000, 0x20ff).mirror(0x0300).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
// map(0x2400, 0x25ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));
|
||||
// map(0x2800, 0x280f).mirror(0x03e0).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
// map(0x2810, 0x281f).mirror(0x03e0).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
map(0x3000, 0x3000).mirror(0x03ff).w("watchdog", FUNC(watchdog_timer_device::reset_w));
|
||||
// map(0x3400, 0x3400).mirror(0x03ff).w("eeprom", FUNC(eeprom_parallel_28xx_device::unlock_write8));
|
||||
map(0x3800, 0x3800).mirror(0x03ff).w(FUNC(atetris_state::irq_ack_w));
|
||||
map(0x3c00, 0x3c00).mirror(0x03ff).w(FUNC(atetris_state::coincount_w));
|
||||
// map(0x4000, 0x7fff).bankr(m_slapstic_bank);
|
||||
map(0x8000, 0xffff).rom();
|
||||
}
|
||||
|
||||
|
||||
void atetris_bartop_state::atetrisbp_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram();
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_bartop_state::videoram_w)).share("videoram");
|
||||
map(0x1000, 0x1fff).ram().w(FUNC(atetris_bartop_state::videoram_w)).share(m_videoram);
|
||||
map(0x2000, 0x20ff).mirror(0x0300).ram().w("palette", FUNC(palette_device::write8)).share("palette");
|
||||
map(0x2400, 0x25ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write));
|
||||
map(0x2800, 0x280f).mirror(0x03e0).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
|
||||
@ -273,8 +453,8 @@ static INPUT_PORTS_START( atetris )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Freeze Step" ) PORT_DIPLOCATION("50H:!3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "50H:!2" ) /* Listed As "SPARE2 (Unused)" */
|
||||
PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "50H:!1" ) /* Listed As "SPARE1 (Unused)" */
|
||||
PORT_DIPUNUSED_DIPLOC( 0x10, 0x00, "50H:!2" ) // Listed As "SPARE2 (Unused)"
|
||||
PORT_DIPUNUSED_DIPLOC( 0x20, 0x00, "50H:!1" ) // Listed As "SPARE1 (Unused)"
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
|
||||
PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
|
||||
|
||||
@ -308,20 +488,8 @@ INPUT_PORTS_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 0,1,2,3 },
|
||||
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4},
|
||||
{ 0*4*8, 1*4*8, 2*4*8, 3*4*8, 4*4*8, 5*4*8, 6*4*8, 7*4*8},
|
||||
8*8*4
|
||||
};
|
||||
|
||||
|
||||
static GFXDECODE_START( gfx_atetris )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
|
||||
GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_msb, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -331,27 +499,30 @@ GFXDECODE_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
constexpr XTAL MASTER_CLOCK = XTAL(14'318'181);
|
||||
constexpr XTAL BOOTLEG_CLOCK = XTAL(14'745'600);
|
||||
|
||||
void atetris_state::atetris_base(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, MASTER_CLOCK/8);
|
||||
// basic machine hardware
|
||||
M6502(config, m_maincpu, MASTER_CLOCK / 8);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atetris_state::main_map);
|
||||
|
||||
WATCHDOG_TIMER(config, "watchdog");
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
GFXDECODE(config, m_gfxdecode, "palette", gfx_atetris);
|
||||
|
||||
PALETTE(config, "palette").set_format(palette_device::RGB_332, 256);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
/* note: these parameters are from published specs, not derived */
|
||||
/* the board uses an SOS-2 chip to generate video signals */
|
||||
m_screen->set_raw(MASTER_CLOCK/2, 456, 0, 336, 262, 0, 240);
|
||||
// note: these parameters are from published specs, not derived
|
||||
// the board uses an SOS-2 chip to generate video signals
|
||||
m_screen->set_raw(MASTER_CLOCK / 2, 456, 0, 336, 262, 0, 240);
|
||||
m_screen->set_screen_update(FUNC(atetris_state::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
}
|
||||
|
||||
@ -361,11 +532,11 @@ void atetris_state::atetris_pokey(machine_config &config)
|
||||
|
||||
EEPROM_2804(config, "eeprom").lock_after_write(true);
|
||||
|
||||
pokey_device &pokey1(POKEY(config, "pokey1", MASTER_CLOCK/8));
|
||||
pokey_device &pokey1(POKEY(config, "pokey1", MASTER_CLOCK / 8));
|
||||
pokey1.allpot_r().set_ioport("IN0");
|
||||
pokey1.add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
|
||||
pokey_device &pokey2(POKEY(config, "pokey2", MASTER_CLOCK/8));
|
||||
pokey_device &pokey2(POKEY(config, "pokey2", MASTER_CLOCK / 8));
|
||||
pokey2.allpot_r().set_ioport("IN1");
|
||||
pokey2.add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
@ -385,13 +556,21 @@ void atetris_state::atetrisb2(machine_config &config)
|
||||
config.device_remove("pokey1");
|
||||
config.device_remove("pokey2");
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_clock(BOOTLEG_CLOCK/8);
|
||||
// basic machine hardware
|
||||
m_maincpu->set_clock(BOOTLEG_CLOCK / 8);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atetris_state::atetrisb2_map);
|
||||
|
||||
SN76489A(config, "sn1", BOOTLEG_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
SN76489A(config, "sn2", BOOTLEG_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
SN76489(config, "sn3", BOOTLEG_CLOCK/8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
SN76489A(config, "sn1", BOOTLEG_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
SN76489A(config, "sn2", BOOTLEG_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
SN76489(config, "sn3", BOOTLEG_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
|
||||
void atetris_state::atetrisb5(machine_config &config)
|
||||
{
|
||||
atetris_base(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &atetris_bartop_state::atetrisb5_map);
|
||||
}
|
||||
|
||||
|
||||
@ -439,7 +618,7 @@ ROM_START( atetris )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "136066-1100.45f", 0x0000, 0x10000, CRC(2acbdb09) SHA1(5e1189227f26563fd3e5372121ea5c915620f892) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "136066-1101.35a", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) )
|
||||
ROM_END
|
||||
|
||||
@ -448,7 +627,7 @@ ROM_START( atetrisa )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "d1", 0x0000, 0x10000, CRC(2bcab107) SHA1(3cfb8df8cd3782f3ff7f6b32ff15c461352061ee) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "136066-1101.35a", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) )
|
||||
ROM_END
|
||||
|
||||
@ -457,27 +636,26 @@ ROM_START( atetrisb )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "tetris.01", 0x0000, 0x10000, CRC(944d15f6) SHA1(926fa5cb26b6e6a50bea455eec1f6d3fb92aa95c) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "tetris.02", 0x0000, 0x10000, CRC(5c4e7258) SHA1(58060681a728e74d69b2b6f5d02faa597ca6c226) )
|
||||
|
||||
/* there's an extra EEPROM, maybe used for protection crack, which */
|
||||
/* however doesn't seem to be required to run the game in this driver. */
|
||||
// there's an extra EEPROM, maybe used for protection crack, which however doesn't seem to be required to run the game in this driver.
|
||||
ROM_REGION( 0x0800, "user1", 0 )
|
||||
ROM_LOAD( "tetris.03", 0x0000, 0x0800, CRC(26618c0b) SHA1(4d6470bf3a79be3b0766e246abe00582d4c85a97) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( atetrisb2 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) // Some bootleg PCBs uses unmodified Atari ROMs
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) // Some bootleg PCBs use unmodified Atari ROMs
|
||||
ROM_LOAD( "k1-01", 0x0000, 0x10000, CRC(fa056809) SHA1(e4ccccdf9b04b68127c7b03ae263519cf00f94cb) ) // 27512
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 ) // Some bootleg PCBs uses unmodified Atari ROMs
|
||||
ROM_REGION( 0x10000, "tiles", 0 ) // Some bootleg PCBs use unmodified Atari ROMs
|
||||
ROM_LOAD( "136066-1101.35a", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) ) // 27512
|
||||
|
||||
ROM_REGION( 0x0020, "proms", 0 ) // currently unused
|
||||
ROM_LOAD( "m3-7603-5.prom1", 0x00000, 0x0020, CRC(79656af3) SHA1(bf55f100806520b291157c03999606367dd14ecc) ) // 82s123 or TBP18S030
|
||||
|
||||
/* Unused. It's usual to find PLDs with different hashes, but defining equivalent equations */
|
||||
// Unused. It's usual to find PLDs with different hashes, but defining equivalent equations
|
||||
ROM_REGION( 0x859, "plds", 0 )
|
||||
ROM_LOAD( "a-gal16v8-b.bin", 0x000, 0x117, CRC(b1dfab0f) SHA1(e9e4db5459617a35a13df4b7a4586dd1b7be04ac) ) // sub PCB - Same content as "b"
|
||||
ROM_LOAD( "b-gal16v8-b.bin", 0x117, 0x117, CRC(b1dfab0f) SHA1(e9e4db5459617a35a13df4b7a4586dd1b7be04ac) ) // sub PCB - Same content as "a"
|
||||
@ -523,7 +701,7 @@ ROM_START( atetrisb3 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "prg.bin", 0x0000, 0x10000, CRC(2bcab107) SHA1(3cfb8df8cd3782f3ff7f6b32ff15c461352061ee) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "gfx.bin", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) )
|
||||
|
||||
// 8749 (10 MHz OSC) emulates POKEYs
|
||||
@ -548,10 +726,22 @@ ROM_START( atetrisb4 ) // bootleg on an unusually big PCB for this game
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "1.bin", 0x0000, 0x10000, CRC(56589096) SHA1(df0ff776f3e3506c86d703d2283db59a576abea6) ) // only difference is the credits for 'video graphics' where changed
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "2.bin", 0x0000, 0x10000, CRC(70859030) SHA1(bb6bf88b75be3a81672e0aa30a8cbd7181bc87d0) ) // unique, but extremely similar to the one of the original
|
||||
ROM_END
|
||||
|
||||
ROM_START( atetrisb5 ) // this bootleg has a big sub board filled with TTL, presumably used for substituting the Slapstic and the Pokeys. If the sub board is disconnected the game doesn't boot.
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "tt1", 0x0000, 0x10000, CRC(2acbdb09) SHA1(5e1189227f26563fd3e5372121ea5c915620f892) ) // same data as the original
|
||||
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "tt2", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) ) // same data as the original
|
||||
|
||||
ROM_REGION( 0x800, "extra_rom", 0 ) // possibly involved in the Slapstic circumvention? It's positioned at the side of the main CPU ROM.
|
||||
ROM_LOAD( "2716", 0x000, 0x800, CRC(4a71c947) SHA1(873d7b63b2e59ccd9bb2519efd6d104969967e01) ) // BADADDR --xxxxxxxxx, but it has been redumped many times. 2716 is the chip type, it has no label.
|
||||
ROM_END
|
||||
|
||||
|
||||
/*
|
||||
atetb3482: Atari Tetris bootleg with additional UM3482 and Z80 (with its ROM)
|
||||
__________________________________________________________________
|
||||
@ -590,7 +780,7 @@ ROM_START( atetb3482 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "i4-d1.bin", 0x0000, 0x10000, CRC(2acbdb09) SHA1(5e1189227f26563fd3e5372121ea5c915620f892) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "f8-d2.bin", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) )
|
||||
|
||||
ROM_REGION( 0x8000, "soundcpu", 0 ) // Not hooked up
|
||||
@ -615,7 +805,7 @@ ROM_START( atetb3482 )
|
||||
Dump from visual decap with values padded to 8 bits, needs further analysis. */
|
||||
ROM_LOAD( "tempos.bin", 0x0000, 0x0010, BAD_DUMP CRC(c3a37f74) SHA1(67eac8c6530c202760d492f3e52c44f9cd183b46) )
|
||||
|
||||
/* Not dumped, unused */
|
||||
// Not dumped, unused
|
||||
ROM_REGION( 0x71c, "plds", 0 )
|
||||
ROM_LOAD( "pal16r4.1n" , 0x000, 0x104, NO_DUMP )
|
||||
ROM_LOAD( "pal16r4.7n" , 0x104, 0x104, NO_DUMP )
|
||||
@ -633,21 +823,21 @@ ex-Atari Employee.
|
||||
|
||||
PCB is screened : A044809
|
||||
|
||||
The PCB does not draw its power from the JAMMA connector, instead a
|
||||
small AC voltage is taken onboard and regulated down as this pcb has
|
||||
The PCB does not draw its power from the JAMMA connector, instead a
|
||||
small AC voltage is taken onboard and regulated down as this PCB has
|
||||
only a small power requirement!
|
||||
|
||||
The label on the rom says :
|
||||
The label on the rom says :
|
||||
|
||||
Tet_Rom_Rev1
|
||||
NO SLAPSTIC
|
||||
B4FF
|
||||
20-Apr-89
|
||||
|
||||
The cabinet is completely custom made by Atari, and this pcb differs
|
||||
greatly from the production pcb that we know of. The machine was operated
|
||||
The cabinet is completely custom made by Atari, and this PCB differs
|
||||
greatly from the production PCB that we know of. The machine was operated
|
||||
on location at a local bar but did not perform well so they decided it
|
||||
wasn't a viable game to make, its the only known example.
|
||||
wasn't a viable game to make, it's the only known example.
|
||||
|
||||
*/
|
||||
|
||||
@ -655,7 +845,7 @@ ROM_START( atetrisbp )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "tet_rom_rev1.40f", 0x0000, 0x10000, CRC(b6224e6c) SHA1(6b549317499e91a2f19ec282d927fba08f217488) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "8901-136066-1101.40p", 0x0000, 0x10000, CRC(84a1939f) SHA1(d8577985fc8ed4e74f74c68b7c00c4855b7c3270) BAD_DUMP ) // "© 1988 ATARI"; not dumped from this set
|
||||
ROM_END
|
||||
|
||||
@ -663,7 +853,7 @@ ROM_START( atetrisc )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "tetcktl1.rom", 0x0000, 0x10000, CRC(9afd1f4a) SHA1(323d1576d92c905e8e95108b39cabf6fa0c10db6) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "136066-1103.35a", 0x0000, 0x10000, CRC(ec2a7f93) SHA1(cb850141ffd1504f940fa156a39e71a4146d7fea) )
|
||||
ROM_END
|
||||
|
||||
@ -672,10 +862,12 @@ ROM_START( atetrisc2 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "136066-1102.45f", 0x0000, 0x10000, CRC(1bd28902) SHA1(ae8c34f082bce1f827bf60830f207c46cb282421) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_REGION( 0x10000, "tiles", 0 )
|
||||
ROM_LOAD( "136066-1103.35a", 0x0000, 0x10000, CRC(ec2a7f93) SHA1(cb850141ffd1504f940fa156a39e71a4146d7fea) )
|
||||
ROM_END
|
||||
|
||||
} // Anonymous namespace
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -690,7 +882,8 @@ GAME( 1988, atetrisb, atetris, atetris, atetris, atetris_state, empty
|
||||
GAME( 1988, atetrisb2, atetris, atetrisb2, atetris, atetris_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, atetrisb3, atetris, atetrisb3, atetris, atetris_mcu_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, atetrisb4, atetris, atetris, atetris, atetris_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 4)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, atetb3482, atetris, atetris, atetris, atetris_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 5, with UM3482)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1988, atetrisb5, atetris, atetrisb5, atetris, atetris_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 5)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, atetb3482, atetris, atetris, atetris, atetris_state, empty_init, ROT0, "bootleg", "Tetris (bootleg set 6, with UM3482)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1989, atetrisbp, atetris, atetrisbp, atetris, atetris_bartop_state, empty_init, ROT0, "Atari Games", "Tetris (bartop, prototype)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, atetrisc, atetris, atetris, atetrisc, atetris_state, empty_init, ROT270, "Atari Games", "Tetris (cocktail set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, atetrisc2, atetris, atetris, atetrisc, atetris_state, empty_init, ROT270, "Atari Games", "Tetris (cocktail set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -26,40 +26,140 @@ Sound: AY-3-8912A
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/usgames.h"
|
||||
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class usgames_state : public driver_device
|
||||
{
|
||||
public:
|
||||
usgames_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_charram(*this, "charram"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_leds(*this, "led%u", 0U)
|
||||
{ }
|
||||
|
||||
void usg32(machine_config &config);
|
||||
void usg185(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_charram;
|
||||
|
||||
required_memory_bank m_rombank;
|
||||
|
||||
output_finder<5> m_leds;
|
||||
|
||||
void rombank_w(uint8_t data);
|
||||
void lamps1_w(uint8_t data);
|
||||
void lamps2_w(uint8_t data);
|
||||
void charram_w(offs_t offset, uint8_t data);
|
||||
|
||||
void palette(palette_device &palette) const;
|
||||
|
||||
void usg185_map(address_map &map);
|
||||
void usgames_map(address_map &map);
|
||||
MC6845_UPDATE_ROW(update_row);
|
||||
};
|
||||
|
||||
|
||||
void usgames_state::palette(palette_device &palette) const
|
||||
{
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
int r = BIT(j, 0);
|
||||
int g = BIT(j, 1);
|
||||
int b = BIT(j, 2);
|
||||
int const i = BIT(j, 3);
|
||||
|
||||
r = 0xff * r;
|
||||
g = 0x7f * g * (i + 1);
|
||||
b = 0x7f * b * (i + 1);
|
||||
|
||||
palette.set_pen_color(j, rgb_t(r, g, b));
|
||||
}
|
||||
}
|
||||
|
||||
void usgames_state::video_start()
|
||||
{
|
||||
// assumes it can make an address mask from m_videoram.length() - 1
|
||||
assert(!(m_videoram.length() & (m_videoram.length() - 1)));
|
||||
|
||||
m_gfxdecode->gfx(0)->set_source(m_charram);
|
||||
}
|
||||
|
||||
void usgames_state::charram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_charram[offset] = data;
|
||||
m_gfxdecode->gfx(0)->mark_dirty(offset / 8);
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW(usgames_state::update_row)
|
||||
{
|
||||
uint32_t *pix = &bitmap.pix(y);
|
||||
ra &= 0x07;
|
||||
|
||||
for (int x = 0; x < x_count; x++)
|
||||
{
|
||||
int tile_index = (x + ma) & ((m_videoram.length() - 1) / 2);
|
||||
int tile = m_videoram[tile_index * 2];
|
||||
int attr = m_videoram[tile_index * 2 + 1];
|
||||
uint8_t bg_color = attr & 0xf;
|
||||
uint8_t fg_color = (attr & 0xf0) >> 4;
|
||||
|
||||
const uint8_t plane = m_charram[(tile << 3) | ra];
|
||||
for (int n = 7; n >= 0; n--)
|
||||
*pix++ = m_palette->pen(BIT(plane, n) ? fg_color : bg_color);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void usgames_state::machine_start()
|
||||
{
|
||||
m_leds.resolve();
|
||||
|
||||
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
|
||||
m_rombank->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
|
||||
}
|
||||
|
||||
void usgames_state::rombank_w(uint8_t data)
|
||||
{
|
||||
membank("bank1")->set_entry(data);
|
||||
m_rombank->set_entry(data);
|
||||
}
|
||||
|
||||
void usgames_state::lamps1_w(uint8_t data)
|
||||
{
|
||||
/* button lamps */
|
||||
// button lamps
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_leds[i] = BIT(data, i);
|
||||
|
||||
/* bit 5 toggles all the time - extra lamp? */
|
||||
// bit 5 toggles all the time - extra lamp?
|
||||
}
|
||||
|
||||
void usgames_state::lamps2_w(uint8_t data)
|
||||
{
|
||||
/* bit 5 toggles all the time - extra lamp? */
|
||||
// bit 5 toggles all the time - extra lamp?
|
||||
}
|
||||
|
||||
|
||||
@ -78,7 +178,7 @@ void usgames_state::usgames_map(address_map &map)
|
||||
map(0x2400, 0x2401).w("aysnd", FUNC(ay8912_device::address_data_w));
|
||||
map(0x2800, 0x2fff).ram().w(FUNC(usgames_state::charram_w)).share(m_charram);
|
||||
map(0x3000, 0x3fff).ram().share(m_videoram);
|
||||
map(0x4000, 0x7fff).bankr("bank1");
|
||||
map(0x4000, 0x7fff).bankr(m_rombank);
|
||||
map(0x8000, 0xffff).rom();
|
||||
}
|
||||
|
||||
@ -98,7 +198,7 @@ void usgames_state::usg185_map(address_map &map)
|
||||
map(0x2470, 0x2470).portr("UNK2");
|
||||
map(0x2800, 0x2fff).ram().w(FUNC(usgames_state::charram_w)).share(m_charram);
|
||||
map(0x3000, 0x3fff).ram().share(m_videoram);
|
||||
map(0x4000, 0x7fff).bankr("bank1");
|
||||
map(0x4000, 0x7fff).bankr(m_rombank);
|
||||
map(0x8000, 0xffff).rom();
|
||||
}
|
||||
|
||||
@ -191,7 +291,7 @@ static INPUT_PORTS_START( usg32 )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* From here, the hardware was slightly upgraded, but not too different. */
|
||||
// From here, the hardware was slightly upgraded, but not too different.
|
||||
static INPUT_PORTS_START( usg83 )
|
||||
PORT_INCLUDE( usg32 )
|
||||
|
||||
@ -202,41 +302,30 @@ static INPUT_PORTS_START( usg83 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8,
|
||||
0x100,
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_usgames )
|
||||
GFXDECODE_ENTRY( nullptr, 0x2800, charlayout, 0, 1 )
|
||||
GFXDECODE_ENTRY( nullptr, 0x2800, gfx_8x8x1, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
void usgames_state::usg32(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
// basic machine hardware
|
||||
MC6809(config, m_maincpu, 18_MHz_XTAL / 3); // 68B09P (divider not verified)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &usgames_state::usgames_map);
|
||||
m_maincpu->set_periodic_int(FUNC(usgames_state::irq0_line_hold), attotime::from_hz(5*60)); /* ?? */
|
||||
m_maincpu->set_periodic_int(FUNC(usgames_state::irq0_line_hold), attotime::from_hz(5*60)); // ??
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
||||
|
||||
/* video hardware */
|
||||
// video hardware
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(60);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
|
||||
screen.set_size(64*8, 32*8);
|
||||
screen.set_visarea(7*8, 57*8-1, 0*8, 31*8-1);
|
||||
screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, "palette", gfx_usgames);
|
||||
PALETTE(config, "palette", FUNC(usgames_state::usgames_palette), 16);
|
||||
PALETTE(config, "palette", FUNC(usgames_state::palette), 16);
|
||||
|
||||
mc6845_device &crtc(MC6845(config, "crtc", 18_MHz_XTAL / 16));
|
||||
crtc.set_screen("screen");
|
||||
@ -244,7 +333,7 @@ void usgames_state::usg32(machine_config &config)
|
||||
crtc.set_char_width(8);
|
||||
crtc.set_update_row_callback(FUNC(usgames_state::update_row));
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
AY8912(config, "aysnd", 2000000).add_route(ALL_OUTPUTS, "mono", 0.30);
|
||||
@ -260,40 +349,40 @@ void usgames_state::usg185(machine_config &config)
|
||||
ROM_START( usg32 )
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "usg32-0.bin", 0x08000, 0x08000, CRC(bc313387) SHA1(8df2e2736f14e965303993ae4105176bdd59f49d) )
|
||||
/* for the banked region */
|
||||
// for the banked region
|
||||
ROM_LOAD( "usg32-1.bin", 0x18000, 0x08000, CRC(baaea800) SHA1(1f35b8c0d40a923488c591497a3c3806d6d104e1) )
|
||||
ROM_LOAD( "usg32-2.bin", 0x28000, 0x08000, CRC(d73d7f48) SHA1(a76582b80acd38abbb6f0f61d27b2920a3128516) )
|
||||
ROM_LOAD( "usg32-3.bin", 0x38000, 0x08000, CRC(22747804) SHA1(b86af1db1733ddd0629843e44da9bc8d6b102eb6) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( superten ) /* Version 8.3 - You can't change the status of "Sexy Triv I" and "Sexy Triv II" */
|
||||
ROM_START( superten ) // Version 8.3 - You can't change the status of "Sexy Triv I" and "Sexy Triv II"
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "usg83-rom0.bin", 0x08000, 0x08000, CRC(aae84186) SHA1(8385b5c1dded1ea6f90c277b045778c7110a45db) ) /* FRI JUL 01 22:43:10 1988, Checksum=30DF19 */
|
||||
/* for the banked region */
|
||||
ROM_LOAD( "usg83-rom1.bin", 0x18000, 0x08000, CRC(7b520b6f) SHA1(2231e63fecc6e9026dd4b6ee3e21a74cc0e0ae44) ) /* WED JUL 13 02:01:33 1988, Checksum=26F176 */
|
||||
ROM_LOAD( "usg83-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) /* THU FEB 04 12:27:14 1988, Checksum=7068E1 */
|
||||
ROM_LOAD( "usg83-rom3.bin", 0x38000, 0x10000, CRC(4e110844) SHA1(b51c596a41760f1f0f70f49ae81f03d98a17fb6f) ) /* WED NOV 25 14:57:05 1987, Checksum=6E3126 */
|
||||
ROM_LOAD( "usg83-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) /* WED NOV 25 14:53:29 1987, Checksum DC7BF5 */
|
||||
ROM_LOAD( "usg83-rom0.bin", 0x08000, 0x08000, CRC(aae84186) SHA1(8385b5c1dded1ea6f90c277b045778c7110a45db) ) // FRI JUL 01 22:43:10 1988, Checksum=30DF19
|
||||
// for the banked region
|
||||
ROM_LOAD( "usg83-rom1.bin", 0x18000, 0x08000, CRC(7b520b6f) SHA1(2231e63fecc6e9026dd4b6ee3e21a74cc0e0ae44) ) // WED JUL 13 02:01:33 1988, Checksum=26F176
|
||||
ROM_LOAD( "usg83-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) // THU FEB 04 12:27:14 1988, Checksum=7068E1
|
||||
ROM_LOAD( "usg83-rom3.bin", 0x38000, 0x10000, CRC(4e110844) SHA1(b51c596a41760f1f0f70f49ae81f03d98a17fb6f) ) // WED NOV 25 14:57:05 1987, Checksum=6E3126
|
||||
ROM_LOAD( "usg83-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) // WED NOV 25 14:53:29 1987, Checksum DC7BF5
|
||||
ROM_END
|
||||
|
||||
ROM_START( usg83x ) /* Version 8.3x - You can change the status of "Sexy Triv I" */
|
||||
ROM_START( usg83x ) // Version 8.3x - You can change the status of "Sexy Triv I"
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "usg83x-rom0.bin", 0x08000, 0x08000, CRC(4ad9b6e0) SHA1(54940619511b37577bbcd9d05b941079ba793c72) ) /* FRI JUL 01 22:43:10 1988, Checksum=30DF51 */
|
||||
/* for the banked region */
|
||||
ROM_LOAD( "usg83-rom1.bin", 0x18000, 0x08000, CRC(7b520b6f) SHA1(2231e63fecc6e9026dd4b6ee3e21a74cc0e0ae44) ) /* WED JUL 13 02:01:33 1988, Checksum=26F176 */
|
||||
ROM_LOAD( "usg83-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) /* THU FEB 04 12:27:14 1988, Checksum=7068E1 */
|
||||
ROM_LOAD( "usg83x-rom3.bin", 0x38000, 0x08000, CRC(41c475ac) SHA1(48019843e2f57bf4c2fca5136e3d0a64de3dfc04) ) /* WED NOV 25 14:50:08 1987, Checksum=6E815F */
|
||||
ROM_LOAD( "usg83-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) /* WED NOV 25 14:53:29 1987, Checksum DC7BF5 */
|
||||
ROM_LOAD( "usg83x-rom0.bin", 0x08000, 0x08000, CRC(4ad9b6e0) SHA1(54940619511b37577bbcd9d05b941079ba793c72) ) // FRI JUL 01 22:43:10 1988, Checksum=30DF51
|
||||
// for the banked region
|
||||
ROM_LOAD( "usg83-rom1.bin", 0x18000, 0x08000, CRC(7b520b6f) SHA1(2231e63fecc6e9026dd4b6ee3e21a74cc0e0ae44) ) // WED JUL 13 02:01:33 1988, Checksum=26F176
|
||||
ROM_LOAD( "usg83-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) // THU FEB 04 12:27:14 1988, Checksum=7068E1
|
||||
ROM_LOAD( "usg83x-rom3.bin", 0x38000, 0x08000, CRC(41c475ac) SHA1(48019843e2f57bf4c2fca5136e3d0a64de3dfc04) ) // WED NOV 25 14:50:08 1987, Checksum=6E815F
|
||||
ROM_LOAD( "usg83-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) // WED NOV 25 14:53:29 1987, Checksum DC7BF5
|
||||
ROM_END
|
||||
|
||||
ROM_START( usg82 ) /* Version 8.2 - "Sport Triv" and "Rush Hour" aren't available by default */
|
||||
ROM_START( usg82 ) // Version 8.2 - "Sport Triv" and "Rush Hour" aren't available by default
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "usg82-rom0.bin", 0x08000, 0x08000, CRC(09c20b78) SHA1(8b622fef536e98e22866a15c6a5b5da583169e8c) ) /* MON FEB 08 11:23:01 1988, Checksum=31911A */
|
||||
/* for the banked region */
|
||||
ROM_LOAD( "usg82-rom1.bin", 0x18000, 0x08000, CRC(915a9ff4) SHA1(5007210ed46a9cea530c18a8c4a67b07b87cb781) ) /* FRI FEB 05 16:17:13 1988, Checksum=36B7A3 */
|
||||
ROM_LOAD( "usg82-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) /* THU FEB 04 12:27:14 1988, Checksum=7068E1 */
|
||||
ROM_LOAD( "usg82-rom3.bin", 0x38000, 0x10000, CRC(4e110844) SHA1(b51c596a41760f1f0f70f49ae81f03d98a17fb6f) ) /* WED NOV 25 14:57:05 1987, Checksum=6E3126 */
|
||||
ROM_LOAD( "usg82-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) /* WED NOV 25 14:53:29 1987, Checksum DC7BF5 */
|
||||
ROM_LOAD( "usg82-rom0.bin", 0x08000, 0x08000, CRC(09c20b78) SHA1(8b622fef536e98e22866a15c6a5b5da583169e8c) ) // MON FEB 08 11:23:01 1988, Checksum=31911A
|
||||
// for the banked region
|
||||
ROM_LOAD( "usg82-rom1.bin", 0x18000, 0x08000, CRC(915a9ff4) SHA1(5007210ed46a9cea530c18a8c4a67b07b87cb781) ) // FRI FEB 05 16:17:13 1988, Checksum=36B7A3
|
||||
ROM_LOAD( "usg82-rom2.bin", 0x28000, 0x08000, CRC(29fbb23b) SHA1(6c2c17897e60ec8d4cdeaf9b382ef00ab71f6e0a) ) // THU FEB 04 12:27:14 1988, Checksum=7068E1
|
||||
ROM_LOAD( "usg82-rom3.bin", 0x38000, 0x10000, CRC(4e110844) SHA1(b51c596a41760f1f0f70f49ae81f03d98a17fb6f) ) // WED NOV 25 14:57:05 1987, Checksum=6E3126
|
||||
ROM_LOAD( "usg82-rom4.bin", 0x48000, 0x08000, CRC(437697c4) SHA1(d14ae6f0b7adfb921c69ae3fdcd2cb525cb731fa) ) // WED NOV 25 14:53:29 1987, Checksum DC7BF5
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -350,10 +439,10 @@ Versions 18.3 and 18.6 confirmed to exist, just not currently dumped.
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( usgames ) /* Version 25.4x */
|
||||
ROM_START( usgames ) // Version 25.4x
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "version_25.4x_rom0_cs=324591.u12", 0x08000, 0x08000, CRC(766a855a) SHA1(e67ca9944d92192de423de6aa8a60f2e28b17db1) )
|
||||
/* for the banked region */
|
||||
// for the banked region
|
||||
ROM_LOAD( "version_25.4x_rom2_cs=6a42e7.u28", 0x1c000, 0x04000, CRC(d44d2ffa) SHA1(8bd756418b4f8ad11cb0f2044fb91c63d7771497) ) // ROM 2
|
||||
ROM_CONTINUE( 0x18000, 0x04000 )
|
||||
ROM_CONTINUE( 0x14000, 0x04000 )
|
||||
@ -373,10 +462,10 @@ ROM_START( usgames ) /* Version 25.4x */
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( usg187c ) /* Version 18.7C */
|
||||
ROM_START( usg187c ) // Version 18.7C
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "version_18.7c_rom0_cs=30a6ba.u12", 0x08000, 0x08000, CRC(2f4ed125) SHA1(6ea2ce263b8abe8d283d1c85d403ec908a422448) )
|
||||
/* for the banked region */
|
||||
// for the banked region
|
||||
ROM_LOAD( "version_18.7c_rom4_cs=90b95e.u36", 0x10000, 0x10000, CRC(b104744d) SHA1(fa2128c39a135b119ef625eed447afa523f912c0) )
|
||||
ROM_LOAD( "version_18.7c_rom3_cs=76aebf.u35", 0x20000, 0x10000, CRC(795e71c8) SHA1(852dceab906f79d05da67a81f855c71738662430) )
|
||||
ROM_LOAD( "version_18.7c_rom2_cs=8973c0.u28", 0x30000, 0x10000, CRC(c6ba8a81) SHA1(e826492626707e30782d4d2f42419357970d67b3) )
|
||||
@ -384,10 +473,10 @@ ROM_START( usg187c ) /* Version 18.7C */
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( usg185 ) /* Version 18.5 */
|
||||
ROM_START( usg185 ) // Version 18.5
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "version_18.5_rom0_cs=315d5c.u12", 0x08000, 0x08000, CRC(2cc68502) SHA1(e00b5bb5ca5a4a5f5ee3c8b0fd779659337f881f) )
|
||||
/* for the banked region */
|
||||
// for the banked region
|
||||
ROM_LOAD( "version_18.5_rom4_cs=90b95e.u36", 0x10000, 0x10000, CRC(b104744d) SHA1(fa2128c39a135b119ef625eed447afa523f912c0) )
|
||||
ROM_LOAD( "version_18.5_rom3_cs=76aebf.u35", 0x20000, 0x10000, CRC(795e71c8) SHA1(852dceab906f79d05da67a81f855c71738662430) )
|
||||
ROM_LOAD( "version_18.5_rom2_cs=8973c0.u28", 0x30000, 0x10000, CRC(c6ba8a81) SHA1(e826492626707e30782d4d2f42419357970d67b3) )
|
||||
@ -395,20 +484,22 @@ ROM_START( usg185 ) /* Version 18.5 */
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( usg182 ) /* Version 18.2 */
|
||||
ROM_START( usg182 ) // Version 18.2
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD( "version_18.2_rom0_cs=2e6ae3.u12", 0x08000, 0x08000, CRC(f5a053c1) SHA1(ae2740cd9af0af7a74a88720ebafd785bfc8614b) )
|
||||
/* for the banked region */
|
||||
// for the banked region
|
||||
ROM_LOAD( "version_18.2_rom4_cs=90b95e.u36", 0x10000, 0x10000, CRC(b104744d) SHA1(fa2128c39a135b119ef625eed447afa523f912c0) )
|
||||
ROM_LOAD( "version_18.2_rom3_cs=76aebf.u35", 0x20000, 0x10000, CRC(795e71c8) SHA1(852dceab906f79d05da67a81f855c71738662430) )
|
||||
ROM_LOAD( "version_18.2_rom2_cs=8973c0.u28", 0x30000, 0x10000, CRC(c6ba8a81) SHA1(e826492626707e30782d4d2f42419357970d67b3) )
|
||||
ROM_LOAD( "version_18.2_rom1_cs=2bf00d.u18", 0x48000, 0x08000, CRC(73bbc1c8) SHA1(9bb5067bf914b7c87a1ee29d6818de782fa28637) )
|
||||
ROM_END
|
||||
|
||||
} // Anonymous namespace
|
||||
|
||||
|
||||
GAME( 1987, usg32, 0, usg32, usg32, usgames_state, empty_init, ROT0, "U.S. Games", "Super Duper Casino (California V3.2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, superten, 0, usg32, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Super Ten V8.3", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, usg83x, superten, usg32, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Super Ten V8.3X", MACHINE_SUPPORTS_SAVE ) /* "Experimental" version?? */
|
||||
GAME( 1988, usg83x, superten, usg32, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Super Ten V8.3X", MACHINE_SUPPORTS_SAVE ) // "Experimental" version??
|
||||
GAME( 1988, usg82, superten, usg32, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Super Ten V8.2" , MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1992, usgames, 0, usg185, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Games V25.4X", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, usg187c, usgames, usg185, usg83, usgames_state, empty_init, ROT0, "U.S. Games", "Games V18.7C", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,112 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Zsolt Vasvari, Aaron Giles
|
||||
/*************************************************************************
|
||||
|
||||
Atari Tetris hardware
|
||||
|
||||
*************************************************************************/
|
||||
#ifndef MAME_INCLUDES_ATETRIS_H
|
||||
#define MAME_INCLUDES_ATETRIS_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/slapstic.h"
|
||||
#include "sound/sn76496.h"
|
||||
#include "screen.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
class atetris_state : public driver_device
|
||||
{
|
||||
public:
|
||||
atetris_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_slapstic(*this, "slapstic"),
|
||||
m_slapstic_bank(*this, "slapstic_bank"),
|
||||
m_slapstic_region(*this, "maincpu"),
|
||||
m_videoram(*this, "videoram")
|
||||
{
|
||||
}
|
||||
|
||||
void atetris_base(machine_config &config);
|
||||
void atetris_pokey(machine_config &config);
|
||||
void atetris(machine_config &config);
|
||||
void atetrisb2(machine_config &config);
|
||||
|
||||
void init_atetris();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
optional_device<atari_slapstic_device> m_slapstic;
|
||||
optional_memory_bank m_slapstic_bank;
|
||||
required_region_ptr<uint8_t> m_slapstic_region;
|
||||
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
|
||||
emu_timer *m_interrupt_timer;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
|
||||
void irq_ack_w(uint8_t data);
|
||||
void coincount_w(uint8_t data);
|
||||
void videoram_w(offs_t offset, uint8_t data);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(interrupt_gen);
|
||||
void reset_bank();
|
||||
|
||||
void atetrisb2_map(address_map &map);
|
||||
void main_map(address_map &map);
|
||||
};
|
||||
|
||||
class atetris_bartop_state : public atetris_state
|
||||
{
|
||||
public:
|
||||
atetris_bartop_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
atetris_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void atetrisbp(machine_config &config);
|
||||
|
||||
private:
|
||||
void output_w(uint8_t data);
|
||||
|
||||
void atetrisbp_map(address_map &map);
|
||||
};
|
||||
|
||||
class atetris_mcu_state : public atetris_state
|
||||
{
|
||||
public:
|
||||
atetris_mcu_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
atetris_state(mconfig, type, tag),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_soundlatch(*this, "soundlatch%u", 1U),
|
||||
m_sn(*this, "sn%u", 1U)
|
||||
{
|
||||
}
|
||||
|
||||
void atetrisb3(machine_config &config);
|
||||
|
||||
private:
|
||||
uint8_t mcu_bus_r();
|
||||
void mcu_p2_w(uint8_t data);
|
||||
void mcu_reg_w(offs_t offset, uint8_t data);
|
||||
|
||||
void atetrisb3_map(address_map &map);
|
||||
|
||||
required_device<i8749_device> m_mcu;
|
||||
required_device_array<generic_latch_8_device, 2> m_soundlatch;
|
||||
required_device_array<sn76496_base_device, 4> m_sn;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_ATETRIS_H
|
@ -1,53 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood, Nicola Salmoria
|
||||
#ifndef MAME_INCLUDES_USGAMES_H
|
||||
#define MAME_INCLUDES_USGAMES_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "emupal.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
class usgames_state : public driver_device
|
||||
{
|
||||
public:
|
||||
usgames_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_charram(*this, "charram"),
|
||||
m_leds(*this, "led%u", 0U),
|
||||
m_palette(*this, "palette")
|
||||
{ }
|
||||
|
||||
void usg32(machine_config &config);
|
||||
void usg185(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_charram;
|
||||
|
||||
output_finder<5> m_leds;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
void rombank_w(uint8_t data);
|
||||
void lamps1_w(uint8_t data);
|
||||
void lamps2_w(uint8_t data);
|
||||
void charram_w(offs_t offset, uint8_t data);
|
||||
|
||||
void usgames_palette(palette_device &palette) const;
|
||||
|
||||
void usg185_map(address_map &map);
|
||||
void usgames_map(address_map &map);
|
||||
MC6845_UPDATE_ROW(update_row);
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_USGAMES_H
|
@ -3119,6 +3119,7 @@ atetrisb // (bootleg)
|
||||
atetrisb2 // (bootleg)
|
||||
atetrisb3 // (bootleg)
|
||||
atetrisb4 // (bootleg)
|
||||
atetrisb5 // (bootleg)
|
||||
atetb3482 // (bootleg, with UM3482)
|
||||
atetrisbp //
|
||||
atetrisc // 136066 (c) 1989
|
||||
@ -36223,7 +36224,7 @@ ravens //
|
||||
ravens2 //
|
||||
|
||||
@source:rawthrillspc.cpp
|
||||
fnf // (c) 2014 Raw Thrills
|
||||
fnf // (c) 2004 Raw Thrills
|
||||
guitarheroac // (c) 2008 Raw Thrills / Activision / Konami
|
||||
|
||||
@source:rbisland.cpp
|
||||
|
@ -1,66 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Zsolt Vasvari, Aaron Giles
|
||||
/***************************************************************************
|
||||
|
||||
Atari Tetris hardware
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/atetris.h"
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Tilemap callback
|
||||
*
|
||||
*************************************/
|
||||
|
||||
TILE_GET_INFO_MEMBER(atetris_state::get_tile_info)
|
||||
{
|
||||
int code = m_videoram[tile_index * 2] | ((m_videoram[tile_index * 2 + 1] & 7) << 8);
|
||||
int color = (m_videoram[tile_index * 2 + 1] & 0xf0) >> 4;
|
||||
|
||||
tileinfo.set(0, code, color, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Video RAM write
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void atetris_state::videoram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_videoram[offset] = data;
|
||||
m_bg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Video system start
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void atetris_state::video_start()
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(atetris_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 64,32);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main refresh
|
||||
*
|
||||
*************************************/
|
||||
|
||||
uint32_t atetris_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
||||
return 0;
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood, Nicola Salmoria
|
||||
#include "emu.h"
|
||||
#include "includes/usgames.h"
|
||||
|
||||
|
||||
void usgames_state::usgames_palette(palette_device &palette) const
|
||||
{
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
int r = BIT(j, 0);
|
||||
int g = BIT(j, 1);
|
||||
int b = BIT(j, 2);
|
||||
int const i = BIT(j, 3);
|
||||
|
||||
r = 0xff * r;
|
||||
g = 0x7f * g * (i + 1);
|
||||
b = 0x7f * b * (i + 1);
|
||||
|
||||
palette.set_pen_color(j, rgb_t(r, g, b));
|
||||
}
|
||||
}
|
||||
|
||||
void usgames_state::video_start()
|
||||
{
|
||||
// assumes it can make an address mask from m_videoram.length() - 1
|
||||
assert(!(m_videoram.length() & (m_videoram.length() - 1)));
|
||||
|
||||
m_gfxdecode->gfx(0)->set_source(m_charram);
|
||||
}
|
||||
|
||||
void usgames_state::charram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_charram[offset] = data;
|
||||
m_gfxdecode->gfx(0)->mark_dirty(offset/8);
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW(usgames_state::update_row)
|
||||
{
|
||||
uint32_t *pix = &bitmap.pix(y);
|
||||
ra &= 0x07;
|
||||
|
||||
for (int x = 0; x < x_count; x++)
|
||||
{
|
||||
int tile_index = (x + ma) & ((m_videoram.length() - 1)/2);
|
||||
int tile = m_videoram[tile_index*2];
|
||||
int attr = m_videoram[tile_index*2+1];
|
||||
uint8_t bg_color = attr & 0xf;
|
||||
uint8_t fg_color = (attr & 0xf0) >> 4;
|
||||
|
||||
const uint8_t plane = m_charram[(tile << 3) | ra];
|
||||
for (int n = 7; n >= 0; n--)
|
||||
*pix++ = m_palette->pen(BIT(plane, n) ? fg_color : bg_color);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user