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:
Ivan Vangelista 2022-01-19 18:13:00 +01:00
parent 48ae7402e9
commit 3ee2758bb2
11 changed files with 425 additions and 429 deletions

View File

@ -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",

View File

@ -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);
}

View File

@ -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);

View File

@ -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()

View File

@ -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 )

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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);
}
}