brikett: add 4.194MHz cpu option

taitojc: add note about timing regression

alpha68k_i: small cleanup to spacing
This commit is contained in:
hap 2024-07-01 17:21:23 +02:00
parent a2c780588c
commit 3d357c07c0
6 changed files with 126 additions and 111 deletions

View File

@ -76,13 +76,14 @@ u32 alpha68k_I_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
{
bitmap.fill(m_palette->black_pen(), cliprect);
/* This appears to be correct priority */
// This appears to be correct priority
draw_sprites(bitmap, cliprect, 2, 0x0800);
draw_sprites(bitmap, cliprect, 3, 0x0c00);
draw_sprites(bitmap, cliprect, 1, 0x0400);
return 0;
}
/*
*
* Read/Write handler overrides
@ -108,7 +109,7 @@ void thenextspace_state::tnextspc_unknown_w(offs_t offset, u16 data)
}
// TODO: check me
u16 thenextspace_state::sound_cpu_r(){ return 1; }
u16 thenextspace_state::sound_cpu_r() { return 1; }
/*
@ -119,13 +120,13 @@ u16 thenextspace_state::sound_cpu_r(){ return 1; }
void paddlemania_state::main_map(address_map &map)
{
map(0x000000, 0x03ffff).rom(); // main program
map(0x080000, 0x083fff).ram(); // work RAM
map(0x100000, 0x103fff).ram().share("spriteram"); // video RAM
map(0x180000, 0x180001).portr("IN3").nopw(); // LSB: DSW0, MSB: watchdog(?)
map(0x180008, 0x180009).portr("IN4"); // LSB: DSW1
map(0x300000, 0x300001).portr("IN0"); // joy1, joy2
map(0x340000, 0x340001).portr("IN1"); // coin, start, service
map(0x000000, 0x03ffff).rom(); // main program
map(0x080000, 0x083fff).ram(); // work RAM
map(0x100000, 0x103fff).ram().share("spriteram"); // video RAM
map(0x180000, 0x180001).portr("IN3").nopw(); // LSB: DSW0, MSB: watchdog(?)
map(0x180008, 0x180009).portr("IN4"); // LSB: DSW1
map(0x300000, 0x300001).portr("IN0"); // joy1, joy2
map(0x340000, 0x340001).portr("IN1"); // coin, start, service
map(0x380000, 0x380001).portr("IN2");
map(0x380001, 0x380001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // LSB: sound latch write and RST38 trigger, joy3, joy4
}
@ -176,6 +177,7 @@ void thenextspace_state::sound_iomap(address_map &map)
map(0x7b, 0x7b).nopr(); // unknown read port
}
/*
*
* Gfx layout Defs
@ -185,19 +187,20 @@ void thenextspace_state::sound_iomap(address_map &map)
// TODO: merge with base driver somehow
static const gfx_layout charlayout =
{
8,8, /* 8x8 */
8,8,
RGN_FRAC(1,1),
4, /* 4 bits per pixel */
4,
{ STEP4(0,4) },
{ STEP4(8*4*4+3,-1), STEP4(3,-1) },
{ STEP8(0,4*4) },
32*8 /* every char takes 32 consecutive bytes */
32*8
};
static GFXDECODE_START( gfx_alpha68k_I )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 64 )
GFXDECODE_END
/*
*
* Input Defs
@ -230,7 +233,7 @@ GFXDECODE_END
#endif
static INPUT_PORTS_START( paddlema )
PORT_START("IN0") // (bottom players)
PORT_START("IN0") // (bottom players)
ALPHA68K_PLAYER_INPUT_LSB( 1, IPT_UNKNOWN, IPT_UNKNOWN, IP_ACTIVE_LOW )
ALPHA68K_PLAYER_INPUT_MSB( 2, IPT_UNKNOWN, IPT_UNKNOWN, IP_ACTIVE_LOW )
@ -248,50 +251,50 @@ static INPUT_PORTS_START( paddlema )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_SERVICE2 ) // "Test" ?
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_SERVICE2 ) // "Test" ?
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN2") // (top players)
PORT_START("IN2") // (top players)
ALPHA68K_PLAYER_INPUT_LSB( 3, IPT_UNKNOWN, IPT_UNKNOWN, IP_ACTIVE_LOW )
ALPHA68K_PLAYER_INPUT_MSB( 4, IPT_UNKNOWN, IPT_UNKNOWN, IP_ACTIVE_LOW )
PORT_START("IN3") //DSW0
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:8,7")
PORT_START("IN3") // DSW0
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:8,7")
PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:6,5")
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:6,5")
PORT_DIPSETTING( 0x0c, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW1:4,3") /* See notes for Game Time / Match Type combos */
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("SW1:4,3") // See notes for Game Time / Match Type combos
PORT_DIPSETTING( 0x00, "Default Time" )
PORT_DIPSETTING( 0x20, "+10 Seconds" )
PORT_DIPSETTING( 0x10, "+20 Seconds" )
PORT_DIPSETTING( 0x30, "+30 Seconds" )
PORT_DIPNAME( 0xc0, 0x40, "Match Type" ) PORT_DIPLOCATION("SW1:2,1") /* Styles are for Upright/Table & Single/Dual controls???? */
PORT_DIPSETTING( 0x80, "A to B" ) /* Manual shows "Upright Sytle B" */
PORT_DIPSETTING( 0x00, "A to C" ) /* Manual shows "Upright Sytle A" */
PORT_DIPSETTING( 0x40, "A to E" ) /* Manual shows "Table Sytle C" */
// PORT_DIPSETTING( 0xc0, "A to B" ) /* Manual shows "Table Sytle D" */
PORT_DIPNAME( 0xc0, 0x40, "Match Type" ) PORT_DIPLOCATION("SW1:2,1") // Styles are for Upright/Table & Single/Dual controls????
PORT_DIPSETTING( 0x80, "A to B" ) // Manual shows "Upright Sytle B"
PORT_DIPSETTING( 0x00, "A to C" ) // Manual shows "Upright Sytle A"
PORT_DIPSETTING( 0x40, "A to E" ) // Manual shows "Table Sytle C"
// PORT_DIPSETTING( 0xc0, "A to B" ) // Manual shows "Table Sytle D"
PORT_START("IN4") // DSW1
PORT_START("IN4") // DSW1
PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_HIGH, "SW2:8" )
PORT_DIPUNUSED_DIPLOC( 0x02, 0x01, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x04, 0x01, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x01, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x30, 0x00, "Game Mode" ) PORT_DIPLOCATION("SW2:4,3")
PORT_DIPUNUSED_DIPLOC( 0x02, 0x01, "SW2:7" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x04, 0x01, "SW2:6" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x08, 0x01, "SW2:5" ) // Listed as "Unused"
PORT_DIPNAME( 0x30, 0x00, "Game Mode" ) PORT_DIPLOCATION("SW2:4,3")
PORT_DIPSETTING( 0x20, "Demo Sounds Off" )
PORT_DIPSETTING( 0x00, "Demo Sounds On" )
PORT_DIPSETTING( 0x10, "Win Match Against CPU (Cheat)")
PORT_DIPSETTING( 0x30, "Freeze" )
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:2") /* Manual shows "Off" for this dipswitch */
PORT_DIPNAME( 0x40, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:2") // Manual shows "Off" for this dipswitch
PORT_DIPSETTING( 0x00, DEF_STR( English ) )
PORT_DIPSETTING( 0x40, DEF_STR( Japanese ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x80, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
INPUT_PORTS_END
@ -314,51 +317,52 @@ static INPUT_PORTS_START( tnextspc )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:2" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x04, 0x04, "Additional Bonus Life" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:2" ) // Listed as "Unused"
PORT_DIPNAME( 0x04, 0x04, "Additional Bonus Life" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x04, "2nd Extend ONLY" )
PORT_DIPSETTING( 0x00, "Every Extend" )
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" ) /* Listed as "Unused" */
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" ) // Listed as "Unused"
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,6")
PORT_DIPSETTING( 0x30, "A 1C/1C B 1C/2C" )
PORT_DIPSETTING( 0x20, "A 2C/1C B 1C/3C" )
PORT_DIPSETTING( 0x10, "A 3C/1C B 1C/5C" )
PORT_DIPSETTING( 0x00, "A 4C/1C B 1C/6C" )
PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:7,8")
PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:7,8")
PORT_DIPSETTING( 0xc0, "2" )
PORT_DIPSETTING( 0x80, "3" )
PORT_DIPSETTING( 0x40, "4" )
PORT_DIPSETTING( 0x00, "5" )
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x02, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x03, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3") PORT_CONDITION("DSW2",0x08,EQUALS,0x08)
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:3") PORT_CONDITION("DSW2",0x08,EQUALS,0x08)
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Game Mode" ) PORT_DIPLOCATION("SW2:3") PORT_CONDITION("DSW2",0x08,EQUALS,0x00)
PORT_DIPNAME( 0x04, 0x04, "Game Mode" ) PORT_DIPLOCATION("SW2:3") PORT_CONDITION("DSW2",0x08,EQUALS,0x00)
PORT_DIPSETTING( 0x00, "Freeze" )
PORT_DIPSETTING( 0x04, "Infinite Lives (Cheat)")
PORT_DIPNAME( 0x08, 0x08, "SW2:3 Demo Sound/Game Mode" ) PORT_DIPLOCATION("SW2:4")
PORT_DIPNAME( 0x08, 0x08, "SW2:3 Demo Sound/Game Mode" ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x08, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, "Game Mode" )
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x30, "100000 200000" )
PORT_DIPSETTING( 0x20, "150000 300000" )
PORT_DIPSETTING( 0x10, "300000 500000" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
INPUT_PORTS_END
/*
*
* Machine Config
@ -370,19 +374,19 @@ void alpha68k_I_state::base_config(machine_config &config)
MCFG_MACHINE_START_OVERRIDE(alpha68k_I_state,common)
MCFG_MACHINE_RESET_OVERRIDE(alpha68k_I_state,common)
/* sound hardware */
// sound hardware
SPEAKER(config, "speaker").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(24'000'000)/6)); // 4MHz (24MHz/6) verified
ym3812_device &ymsnd(YM3812(config, "ymsnd", 24_MHz_XTAL/6)); // 4MHz (24MHz/6) verified
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.add_route(ALL_OUTPUTS, "speaker", 1.0);
}
void alpha68k_I_state::video_config(machine_config &config, int yshift)
{
/* video hardware */
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
set_screen_raw_params(config);
m_screen->set_screen_update(FUNC(alpha68k_I_state::screen_update));
@ -398,12 +402,13 @@ void alpha68k_I_state::video_config(machine_config &config, int yshift)
void paddlemania_state::paddlema(machine_config &config)
{
base_config(config);
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(24'000'000)/4); // 6MHz (24MHz/4) verified
m_maincpu->set_addrmap(AS_PROGRAM, &paddlemania_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(paddlemania_state::irq1_line_hold)); /* VBL */
Z80(config, m_audiocpu, XTAL(24'000'000)/6); // 4MHz (24MHz/6) verified
// basic machine hardware
M68000(config, m_maincpu, 24_MHz_XTAL/4); // 6MHz (24MHz/4) verified
m_maincpu->set_addrmap(AS_PROGRAM, &paddlemania_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(paddlemania_state::irq1_line_hold)); // VBL
Z80(config, m_audiocpu, 24_MHz_XTAL/6); // 4MHz (24MHz/6) verified
m_audiocpu->set_addrmap(AS_PROGRAM, &paddlemania_state::sound_map);
video_config(config, 0);
@ -414,12 +419,13 @@ void paddlemania_state::paddlema(machine_config &config)
void thenextspace_state::tnextspc(machine_config &config)
{
base_config(config);
/* basic machine hardware */
M68000(config, m_maincpu, XTAL(18'000'000)/2); // 9MHz (18MHz/2) verified
m_maincpu->set_addrmap(AS_PROGRAM, &thenextspace_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(thenextspace_state::irq1_line_hold)); /* VBL */
Z80(config, m_audiocpu, XTAL(4'000'000)); // 4Mhz verified
// basic machine hardware
M68000(config, m_maincpu, 18_MHz_XTAL/2); // 9MHz (18MHz/2) verified
m_maincpu->set_addrmap(AS_PROGRAM, &thenextspace_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(thenextspace_state::irq1_line_hold)); // VBL
Z80(config, m_audiocpu, 4_MHz_XTAL); // 4MHz verified
m_audiocpu->set_addrmap(AS_PROGRAM, &thenextspace_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &thenextspace_state::sound_iomap);
@ -441,7 +447,7 @@ ROM_START( paddlema )
ROM_LOAD16_BYTE( "padlem.6h", 0x20000, 0x10000, CRC(8897555f) SHA1(7d30aa56a727700a6e02af92b065ed982a39ccc2) )
ROM_LOAD16_BYTE( "padlem.3h", 0x20001, 0x10000, CRC(f0fe9b9d) SHA1(2e7a80dc25c549e57b7698052f53562a9a608205) )
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_LOAD( "padlem.18c", 0x000000, 0x10000, CRC(9269778d) SHA1(bdc9100827f2e018db943d9f7d81b7936c155bf0) )
ROM_REGION( 0x80000, "gfx1", 0 )
@ -473,7 +479,7 @@ ROM_START( tnextspc )
ROM_LOAD16_BYTE( "ns_4.4", 0x00000, 0x20000, CRC(4617cba3) SHA1(615a1e67fc1c76d2be004b19a965f423b8daaf5c) ) // Silkscreened "4" @ 14L
ROM_LOAD16_BYTE( "ns_3.3", 0x00001, 0x20000, CRC(a6c47fef) SHA1(b7e4a0fffd5c44ed0b138c1ad04c3b6644ec463b) ) // Silkscreened "3" @ 11L
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_LOAD( "ns_1.1", 0x000000, 0x10000, CRC(fc26853c) SHA1(0118b048046a6125bba20dec081b936486eb1597) ) // Silkscreened "1" @ 18B
ROM_REGION( 0x080000, "gfx1", 0 )
@ -497,10 +503,10 @@ ROM_START( tnextspc2 ) // two bootleg PCBs have been found with the same ROMs as
ROM_LOAD16_BYTE( "ns_4.4", 0x00000, 0x20000, CRC(4617cba3) SHA1(615a1e67fc1c76d2be004b19a965f423b8daaf5c) ) // == b18.ic13
ROM_LOAD16_BYTE( "ns_3.3", 0x00001, 0x20000, CRC(a6c47fef) SHA1(b7e4a0fffd5c44ed0b138c1ad04c3b6644ec463b) ) // == b17.ic11
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_LOAD( "ns_1.1", 0x000000, 0x10000, CRC(fc26853c) SHA1(0118b048046a6125bba20dec081b936486eb1597) ) // == b1.ic129
ROM_REGION( 0x080000, "gfx1", 0 ) // EPROMs, graphics are odd/even interleaved
ROM_REGION( 0x080000, "gfx1", 0 ) // EPROMs, graphics are odd/even interleaved
ROM_LOAD16_BYTE( "b3.ic49", 0x00001, 0x10000, CRC(2bddf94d) SHA1(e064f48d0e3bb089753c1b59c863bb46bfa2bcee) )
ROM_LOAD16_BYTE( "b7.ic53", 0x00000, 0x10000, CRC(a8b13a9a) SHA1(2f808c17e97a272be14099c53b287e665dd90b14) )
ROM_LOAD16_BYTE( "b4.ic50", 0x20001, 0x10000, CRC(80c6c841) SHA1(ab0aa4cad6dcadae62f849e53c3c5cd909f77971) )
@ -528,7 +534,7 @@ ROM_START( tnextspcj )
ROM_LOAD16_BYTE( "ns_ver1_j4.4", 0x00000, 0x20000, CRC(5cdf710d) SHA1(c744e532f2f5a248d7b50a2e62cc77a0888d8dff) ) // Silkscreened "4" @ 14L
ROM_LOAD16_BYTE( "ns_ver1_j3.3", 0x00001, 0x20000, CRC(cd9532d0) SHA1(dbd7ced8f015334f0acb8d760f4d9d0299feef70) ) // Silkscreened "3" @ 11L
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_REGION( 0x10000, "audiocpu", 0 ) // Sound CPU
ROM_LOAD( "ns_1.1", 0x000000, 0x10000, CRC(fc26853c) SHA1(0118b048046a6125bba20dec081b936486eb1597) ) // Silkscreened "1" @ 18B
ROM_REGION( 0x080000, "gfx1", 0 )
@ -561,9 +567,8 @@ void thenextspace_state::init_tnextspc()
m_game_id = 0;
}
GAME( 1988, paddlema, 0, paddlema, paddlema, paddlemania_state, init_paddlema, ROT90, "SNK", "Paddle Mania", MACHINE_SUPPORTS_SAVE )
GAME( 1988, paddlema, 0, paddlema, paddlema, paddlemania_state, init_paddlema, ROT90, "SNK", "Paddle Mania", MACHINE_SUPPORTS_SAVE )
GAME( 1989, tnextspc, 0, tnextspc, tnextspc, thenextspace_state, init_tnextspc, ROT90, "SNK", "The Next Space (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1989, tnextspc2, tnextspc, tnextspc, tnextspc, thenextspace_state, init_tnextspc, ROT90, "SNK", "The Next Space (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1989, tnextspcj, tnextspc, tnextspc, tnextspc, thenextspace_state, init_tnextspc, ROT90, "SNK (Pasadena International Corp. license)", "The Next Space (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )

View File

@ -82,7 +82,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
*MP0169 TMS1000 1979, Conic Electronic Baseball
@MP0170 TMS1000 1979, Conic Football
*MP0171 TMS1000 1979, Tomy Soccer
*MP0186 TMS1000 1980, Hornby Railways Zero 1: Master Control Unit R944
*MP0186 TMS1000 1979, Hornby Railways Zero 1: R944 Master Control Unit
*MP0220 TMS1000 1980, Tomy Teacher
@MP0230 TMS1000 1980, Entex Blast It (6015)
@MP0271 TMS1000 1982, Tandy (Radio Shack) Monkey See
@ -144,6 +144,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
*MP3228 TMS1000 1979, Texas Instruments OEM melody chip
*MP3232 TMS1000 1979, Fonas 2 Player Baseball (no "MP" on chip label)
@MP3260 TMS1000 1979, Electroplay Quickfire
*MP3261 TMS1000 1979, Hornby Railways Zero 1: R947 Locomotive Module
@MP3300 TMS1000 1979, Milton Bradley Simon (Rev F)
@MP3301A TMS1000 1979, Milton Bradley Big Trak
*MP3310 TMS1000 1979, Texas Instruments OEM melody chip

View File

@ -12,7 +12,7 @@ in 1981, and in 1982 they released ESB 3000 and ESB 6000 for use with ESB II/III
Hardware notes:
1st model (Mephisto, Mephisto II 1981):
1st model (Mephisto, early Mephisto II):
- 2 PCBs: DH 4001-C(computer), DH 4002-C(LCD/keypad)
- CDP1802CE @ 3.579MHz
- CDP1852CE (I/O port chip), external port
@ -21,11 +21,16 @@ Hardware notes:
- piezo, TTL, 16-button keypad
- module slot
2nd model (Mephisto II 1982, Mephisto III): (listed differences)
2nd model (later Mephisto II): (listed differences)
- PCB label: DH 4005-101 00
- CDP1802ACE @ 3.579MHz or 4.194MHz (chess clock runs faster on 4.194MHz)
- 2*MWS5114E or 2*TC5514P (1KBx4 RAM)
3rd model (later Mephisto II, Mephisto III): (listed differences)
- PCB label: DH 4005-101 01
- CDP1802ACE @ 6.144MHz, later serials also seen with 1806 CPU
- 2 XTALs (3.579MHz and 6.144MHz), lower speed when running on battery
- 2*TC5514P (1KBx4 RAM), unpopulated on some Mephisto III
- 2*TC5514P may be unpopulated on some Mephisto III
Mephisto Junior: (listed differences)
- 2 PCBs: RAWE 003010 B(computer), RAWE 003010 A(LCD/keypad)
@ -79,6 +84,7 @@ BTANB:
#include "cpu/cosmac/cosmac.h"
#include "machine/cdp1852.h"
#include "machine/clock.h"
#include "machine/sensorboard.h"
#include "machine/timer.h"
#include "sound/dac.h"
@ -101,6 +107,7 @@ public:
brikett_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_clock(*this, "nmi_clock"),
m_extport(*this, "extport"),
m_board(*this, "board"),
m_display(*this, "display"),
@ -111,7 +118,7 @@ public:
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { if (newval) machine_reset(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
// machine configs
void mephisto(machine_config &config);
@ -122,11 +129,12 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void machine_reset() override { m_reset = true; }
private:
// devices/pointers
required_device<cdp1802_device> m_maincpu;
required_device<clock_device> m_irq_clock;
optional_device<cdp1852_device> m_extport;
optional_device<sensorboard_device> m_board;
required_device<mephisto_display1_device> m_display;
@ -149,10 +157,7 @@ private:
void mephisto_io(address_map &map);
void mephistoj_io(address_map &map);
void set_cpu_freq();
// I/O handlers
INTERRUPT_GEN_MEMBER(interrupt);
int clear_r();
u8 input_r(offs_t offset);
u8 sound_r();
@ -178,24 +183,31 @@ void brikett_state::machine_start()
save_item(NAME(m_esb_select));
}
void brikett_state::machine_reset()
INPUT_CHANGED_MEMBER(brikett_state::change_cpu_freq)
{
m_reset = true;
set_cpu_freq();
}
newval = m_inputs[4]->read();
void brikett_state::set_cpu_freq()
{
u8 inp = m_inputs[4]->read();
if (~inp & 0x40)
return;
inp = inp >> 4 & inp;
if (newval & 8)
{
/*
3rd hardware model has 2 XTALs, it will increase CPU voltage (and speed)
when running on mains power, the 3.579545MHz XTAL is still used for IRQ.
// 2nd hardware model has 2 XTALs, it will increase CPU voltage (and speed) when running on mains power,
// the 3.579545MHz XTAL is still used for IRQ. Mephisto III could be fitted with a 12MHz XTAL instead of 6.144MHz
// and a newer CDP1805CE CPU by Hobby Computer Centrale on request.
// (It is unexpected that the 1805 accepts such a high overclock, but tests show that it is indeed twice faster)
m_maincpu->set_unscaled_clock((inp & 2) ? 12_MHz_XTAL : ((inp & 1) ? 6.144_MHz_XTAL : 3.579545_MHz_XTAL));
Mephisto III could be fitted with a 12MHz XTAL instead of 6.144MHz and
a newer CDP1805CE CPU by Hobby Computer Centrale on request. (It is
unexpected that the 1805 accepts such a high overclock, but tests show
that it is indeed twice faster)
*/
static const XTAL freq[3] = { 3.579545_MHz_XTAL, 6.144_MHz_XTAL, 12_MHz_XTAL };
m_maincpu->set_unscaled_clock(freq[(newval & 3) % 3]);
}
else
{
m_maincpu->set_unscaled_clock((newval & 4) ? 4.194304_MHz_XTAL : 3.579545_MHz_XTAL);
}
// also change interrupt frequency
m_irq_clock->set_period(attotime::from_ticks(0x10000, (newval & 4) ? 4.194304_MHz_XTAL : 3.579545_MHz_XTAL));
}
@ -206,11 +218,6 @@ void brikett_state::set_cpu_freq()
// base hardware
INTERRUPT_GEN_MEMBER(brikett_state::interrupt)
{
m_maincpu->set_input_line(COSMAC_INPUT_LINE_INT, HOLD_LINE);
}
int brikett_state::clear_r()
{
// CLEAR low + WAIT high resets cpu
@ -368,13 +375,14 @@ static INPUT_PORTS_START( mephisto )
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("REV")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8")
PORT_START("IN.4") // 2nd model main PCB has 2 XTALs on PCB
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0) PORT_CONDITION("IN.4", 0x30, NOTEQUALS, 0x00)
PORT_START("IN.4") // 3rd model main PCB has 2 XTALs on PCB
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0) PORT_CONDITION("IN.4", 0x0c, EQUALS, 0x08)
PORT_CONFSETTING( 0x00, "3.579MHz (Battery)" )
PORT_CONFSETTING( 0x01, "6.144MHz (Mains)" )
PORT_CONFNAME( 0x70, 0x40, "Base Hardware" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x40, "1st Model (1980)" )
PORT_CONFSETTING( 0x70, "2nd Model (1982)" )
PORT_CONFNAME( 0x0c, 0x00, "Base Hardware" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x00, "1st Model (3.579MHz)" ) // or 2nd model with this XTAL
PORT_CONFSETTING( 0x04, "2nd Model (4.194MHz)" )
PORT_CONFSETTING( 0x08, "3rd Model (2 XTALs)" )
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("RES") PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, reset_button, 0)
@ -421,7 +429,7 @@ static INPUT_PORTS_START( mephisto3 )
PORT_CONFSETTING( 0x00, "3.579MHz (Battery)" )
PORT_CONFSETTING( 0x01, "6.144MHz (Mains)" )
PORT_CONFSETTING( 0x02, "12MHz (Special)" )
PORT_BIT(0x70, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT(0x0c, 0x08, IPT_CUSTOM) // 3rd model
INPUT_PORTS_END
@ -439,8 +447,9 @@ void brikett_state::mephistoj(machine_config &config)
m_maincpu->clear_cb().set(FUNC(brikett_state::clear_r));
m_maincpu->q_cb().set(m_display, FUNC(mephisto_display1_device::strobe_w)).invert();
const attotime irq_period = attotime::from_hz(4.194304_MHz_XTAL / 0x10000); // through SAJ300T
m_maincpu->set_periodic_int(FUNC(brikett_state::interrupt), irq_period);
const attotime irq_period = attotime::from_ticks(0x10000, 4.194304_MHz_XTAL); // through SAJ300T
CLOCK(config, m_irq_clock).set_period(irq_period);
m_irq_clock->signal_handler().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT, HOLD_LINE);
// video hardware
MEPHISTO_DISPLAY_MODULE1(config, m_display); // internal
@ -458,15 +467,14 @@ void brikett_state::mephisto(machine_config &config)
mephistoj(config);
// basic machine hardware
m_maincpu->set_clock(3.579545_MHz_XTAL); // see set_cpu_freq
m_maincpu->set_clock(3.579545_MHz_XTAL); // see change_cpu_freq
m_maincpu->set_addrmap(AS_PROGRAM, &brikett_state::mephisto_map);
m_maincpu->set_addrmap(AS_IO, &brikett_state::mephisto_io);
m_maincpu->tpb_cb().set(m_extport, FUNC(cdp1852_device::clock_w));
m_maincpu->ef1_cb().set_constant(0); // external port
m_maincpu->ef3_cb().set_constant(0); // external port, but unused
const attotime irq_period = attotime::from_hz(3.579545_MHz_XTAL / 0x10000); // through SAJ300T
m_maincpu->set_periodic_int(FUNC(brikett_state::interrupt), irq_period);
m_irq_clock->set_period(attotime::from_ticks(0x10000, 3.579545_MHz_XTAL));
CDP1852(config, m_extport);
m_extport->mode_cb().set_constant(1);

View File

@ -79,7 +79,7 @@ authors:hap
<element name="hlb" defstate="0">
<rect state="1"><color red="1" green="1" blue="1" /></rect>
</element>
<element name="bmask" defstate="1">
<element name="bmask" defstate="0">
<rect state="0"><color red="0" green="0" blue="0" /></rect>
</element>
@ -163,8 +163,8 @@ authors:hap
<!-- 2nd model has slightly different labels for SW/WS -->
<element ref="nothing" inputtag="IN.2" inputmask="0x04"><bounds x="10" y="20" width="3.7" height="3.7" /><color alpha="0.08" /></element>
<element ref="nothing" inputtag="IN.3" inputmask="0x01"><bounds x="15" y="20" width="3.7" height="3.7" /><color alpha="0.08" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x20" inputraw="yes"><bounds x="10.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x20" inputraw="yes"><bounds x="15.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x0c" inputraw="yes"><bounds x="10.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x0c" inputraw="yes"><bounds x="15.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="text_ba"><bounds x="0.5" y="10.1" width="1.3" height="1.8" /></element>
<element ref="text_bb"><bounds x="5.5" y="10.1" width="1.3" height="1.8" /></element>

View File

@ -387,7 +387,7 @@ authors:hap
<element name="hlb" defstate="0">
<rect state="1"><color red="1" green="1" blue="1" /></rect>
</element>
<element name="bmask" defstate="1">
<element name="bmask" defstate="0">
<rect state="0"><color red="0" green="0" blue="0" /></rect>
</element>
@ -471,8 +471,8 @@ authors:hap
<!-- 2nd model has slightly different labels for SW/WS -->
<element ref="nothing" inputtag="IN.2" inputmask="0x04"><bounds x="10" y="20" width="3.7" height="3.7" /><color alpha="0.08" /></element>
<element ref="nothing" inputtag="IN.3" inputmask="0x01"><bounds x="15" y="20" width="3.7" height="3.7" /><color alpha="0.08" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x20" inputraw="yes"><bounds x="10.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x20" inputraw="yes"><bounds x="15.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x0c" inputraw="yes"><bounds x="10.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="bmask" inputtag="IN.4" inputmask="0x0c" inputraw="yes"><bounds x="15.6" y="22.15" width="1.2" height="1.2" /></element>
<element ref="text_ba"><bounds x="0.5" y="10.1" width="1.3" height="1.8" /></element>
<element ref="text_bb"><bounds x="5.5" y="10.1" width="1.3" height="1.8" /></element>

View File

@ -14,8 +14,9 @@ Taito custom chips on this hardware:
- TC0870HVP : Vertex processor?
TODO:
- games are running at wrong speed(unthrottled?) compared to pcb recordings, easily noticeable on sidebs/sidebs2,
for example the selection screens are too fast, and the driving is almost twice as slow
- Games are running at wrong speed(unthrottled?) compared to pcb recordings, easily noticeable on sidebs/sidebs2,
for example the selection screens are too fast, and the driving is almost twice as slow. Even slower after
the m68k fpu/softfloat update since MAME 0.267.
- dendego intro object RAM usage has various gfx bugs (check video file)
- dendego title screen builds up and it shouldn't
- dendego attract mode train doesn't ride, demo mode doesn't set the throttle, but it does set the brake pressure