mirror of
https://github.com/holub/mame
synced 2025-06-04 03:46:29 +03:00
SysteSP checkpoint: add protection keys, main board eeproms, basic system hookup, tetgiant boots to title
This commit is contained in:
parent
de598ccdff
commit
941116af2b
@ -74,6 +74,49 @@ G 171-8278G 315-6416 2x 512Mbit RMI
|
||||
#include "debugger.h"
|
||||
#include "includes/segasp.h"
|
||||
|
||||
READ64_MEMBER(segasp_state::sn_93c46a_r)
|
||||
{
|
||||
int res;
|
||||
|
||||
/* bit 3 is EEPROM data */
|
||||
res = m_eeprom->do_read() << 4;
|
||||
res |= (ioport("DSW")->read() << 4) & 0xC0; // note: only old REV D PCB have DSW here, newer does not, always 0 readed
|
||||
return res;
|
||||
}
|
||||
|
||||
WRITE64_MEMBER(segasp_state::sn_93c46a_w)
|
||||
{
|
||||
/* bit 4 is data */
|
||||
/* bit 2 is clock */
|
||||
/* bit 5 is cs */
|
||||
m_eeprom->di_write((data & 0x8) >> 3);
|
||||
m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_eeprom->clk_write((data & 0x4) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
READ64_MEMBER(segasp_state::sp_eeprom_r)
|
||||
{
|
||||
return m_sp_eeprom->do_read() << 4;
|
||||
}
|
||||
|
||||
WRITE64_MEMBER(segasp_state::sp_eeprom_w)
|
||||
{
|
||||
m_sp_eeprom->di_write(data & 1);
|
||||
m_sp_eeprom->cs_write((data & 2) ? ASSERT_LINE : CLEAR_LINE);
|
||||
m_sp_eeprom->clk_write((data & 4) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
READ64_MEMBER(segasp_state::sp_rombdflg_r)
|
||||
{
|
||||
// bit 0 - romboard type, 1 = M4
|
||||
// bit 1 - debug mode
|
||||
return 0x01;
|
||||
}
|
||||
|
||||
READ64_MEMBER(segasp_state::sp_io_r)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// todo, base DC / Naomi stuff should be in it's own map, differences only here, same for Naomi 2 etc.
|
||||
static ADDRESS_MAP_START( segasp_map, AS_PROGRAM, 64, segasp_state )
|
||||
@ -95,6 +138,9 @@ static ADDRESS_MAP_START( segasp_map, AS_PROGRAM, 64, segasp_state )
|
||||
|
||||
/* External Device */
|
||||
AM_RANGE(0x01000000, 0x0100ffff) AM_RAM // - banked access to ROM board address space
|
||||
AM_RANGE(0x01010100, 0x01010127) AM_READ(sp_io_r)
|
||||
AM_RANGE(0x01010128, 0x0101012f) AM_READWRITE(sp_eeprom_r, sp_eeprom_w )
|
||||
AM_RANGE(0x01010150, 0x01010157) AM_READ(sp_rombdflg_r)
|
||||
// AM_RANGE(0x01010000, 0x010101ff) // I/O regs
|
||||
|
||||
/* Area 1 */
|
||||
@ -124,13 +170,36 @@ static ADDRESS_MAP_START( segasp_map, AS_PROGRAM, 64, segasp_state )
|
||||
//AM_RANGE(0x1c000000, 0x1fffffff) AM_NOP // SH4 Internal
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( onchip_port, AS_IO, 64, segasp_state )
|
||||
AM_RANGE(0x00, 0x0f) AM_READWRITE(sn_93c46a_r, sn_93c46a_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
INPUT_PORTS_START( segasp )
|
||||
PORT_INCLUDE( naomi )
|
||||
|
||||
PORT_START("DSW")
|
||||
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Monitor" ) PORT_DIPLOCATION("SW:3")
|
||||
PORT_DIPSETTING( 0x04, "31 kHz" )
|
||||
PORT_DIPSETTING( 0x00, "15 kHz" )
|
||||
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW:4") // Must be ON, with off BIOS bootstrap will deadloop
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( segasp, naomi_base, segasp_state )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(segasp_map)
|
||||
MCFG_CPU_IO_MAP(onchip_port)
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C46_ADD("sp_eeprom")
|
||||
|
||||
// todo, not exactly NaomiM4 (see notes at top of driver) use custom board type here instead
|
||||
MCFG_NAOMI_M4_BOARD_ADD("rom_board", ":pic_readout", "naomibd_eeprom", ":boardid", WRITE8(dc_state, g1_irq))
|
||||
@ -151,23 +220,41 @@ MACHINE_CONFIG_END
|
||||
// Network/Media Board firmware VER 1.19(VxWorks), 1st half contain original 1.10 version
|
||||
#define SEGASP_NETFIRM \
|
||||
ROM_REGION( 0x200000, "netcpu", 0) \
|
||||
ROM_LOAD( "ic72", 0x00000000, 0x200000, CRC(a738ea1c) SHA1(d25187a973a7e166e70334f964363adf2be87257) )
|
||||
ROM_LOAD( "net_firm_119.ic72", 0x00000000, 0x200000, CRC(a738ea1c) SHA1(d25187a973a7e166e70334f964363adf2be87257) )
|
||||
|
||||
// keep M4 board code happy for now
|
||||
#define SEGASP_MISC \
|
||||
ROM_REGION( 0x800, "pic_readout", ROMREGION_ERASEFF ) \
|
||||
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x00)) \
|
||||
ROM_REGION( 0x84, "naomibd_eeprom", ROMREGION_ERASEFF )
|
||||
ROM_REGION( 0x04, "boardid", ROMREGION_ERASEVAL(0x04)) \
|
||||
ROM_REGION( 0x84, "naomibd_eeprom", ROMREGION_ERASEFF ) \
|
||||
ROM_REGION16_BE( 0x80, "main_eeprom", 0 ) \
|
||||
ROM_LOAD16_WORD( "mb_serial.ic57", 0x0000, 0x0080, CRC(e1e3c009) SHA1(66bc636c527389c3338f631d78c788b4bd4e93be) )
|
||||
|
||||
#define SEGASPEE_US \
|
||||
ROM_LOAD16_WORD( "mb_eeprom_us.ic54s", 0x0000, 0x0080, CRC(4186d7ab) SHA1(fc23da69a511a7643b6a066161bcfc3cdeeacf04) )
|
||||
|
||||
#define SEGASPEE_EXP \
|
||||
ROM_LOAD16_WORD( "mb_eeprom_exp.ic54s", 0x0000, 0x0080, CRC(947ddfad) SHA1(832a3db097af680d1d0eb9451b4650565f0cf8c7) )
|
||||
|
||||
#define SEGASP_US \
|
||||
ROM_REGION16_BE(0x80, "sp_eeprom", 0) \
|
||||
SEGASPEE_US
|
||||
|
||||
#define SEGASP_EXP \
|
||||
ROM_REGION16_BE(0x80, "sp_eeprom", 0) \
|
||||
SEGASPEE_EXP
|
||||
|
||||
ROM_START( segasp )
|
||||
SEGASP_BIOS
|
||||
SEGASP_NETFIRM
|
||||
SEGASP_MISC
|
||||
ROM_REGION16_BE(0x80, "sp_eeprom", 0)
|
||||
SEGASPEE_US
|
||||
SEGASPEE_EXP
|
||||
ROM_END
|
||||
|
||||
ROM_START( brickppl )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x10000000, "rom_board", ROMREGION_ERASE)
|
||||
@ -175,10 +262,14 @@ ROM_START( brickppl )
|
||||
ROM_LOAD( "ic63", 0x04000000, 0x4000000, CRC(4f3c0937) SHA1(72d68b66c57ff539b8058f80f1a15ffa44095460) )
|
||||
ROM_LOAD( "ic64", 0x08000000, 0x4000000, CRC(383e90d9) SHA1(eeca4b1bd0cd1fed7b85f045d71e0c7258d4350b) )
|
||||
ROM_LOAD( "ic65", 0x0c000000, 0x4000000, CRC(4c29b5ac) SHA1(9e6a79ad2d2498eed5b2590c8764222e7d6c0229) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0558-com.ic15", 0, 0x800, BAD_DUMP CRC(7592d004) SHA1(632373d807f54953d68c95a9f874ed3e8011f085) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( dinoking )
|
||||
SEGASP_BIOS
|
||||
SEGASP_US
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE)
|
||||
@ -190,10 +281,14 @@ ROM_START( dinoking )
|
||||
ROM_LOAD( "ic67s", 0x05000000, 0x01000000, CRC(42441393) SHA1(7ba94bc12ace699ea1159cece3d070fb35789d31) )
|
||||
ROM_LOAD( "ic68s", 0x06000000, 0x01000000, CRC(4a787a44) SHA1(4d8f348466187fb67ffff8605be151cea1f77ec6) )
|
||||
ROM_LOAD( "ic69s", 0x07000000, 0x01000000, CRC(c78e46c2) SHA1(b8224c68face23010414d13ebb4cc05a2a9dce8a) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0408-com.ic15", 0, 0x800, BAD_DUMP CRC(0e94daba) SHA1(4e9722333a29afd0dbadba78b16344b77a689610) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( dinokior )
|
||||
SEGASP_BIOS
|
||||
SEGASP_US
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE)
|
||||
@ -205,64 +300,91 @@ ROM_START( dinokior )
|
||||
ROM_LOAD( "ic67s", 0x05000000, 0x01000000, CRC(7bf77663) SHA1(51a0c867290dce11dcc49f61c1af0d4ed42b02f1) )
|
||||
ROM_LOAD( "ic68s", 0x06000000, 0x01000000, CRC(ff5ed2b8) SHA1(d8d86b3ed976c8c8fc51d225ae661e5f237b6e1d) )
|
||||
ROM_LOAD( "ic69s", 0x07000000, 0x01000000, CRC(ab8ac4eb) SHA1(e6b3ce796ae4887011e2764261f3f437dc9939f9) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0408-com.ic15", 0, 0x800, BAD_DUMP CRC(0e94daba) SHA1(4e9722333a29afd0dbadba78b16344b77a689610) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( lovebery )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE)
|
||||
ROM_LOAD( "ic62", 0x00000000, 0x4000000, CRC(1bd80ed0) SHA1(d50307573389ebe71e381a75deb83811fa397b94) )
|
||||
ROM_LOAD( "ic63", 0x04000000, 0x4000000, CRC(d3870287) SHA1(efd3630d54068f5a8caf242a48db410bedf48e7a) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0446-com.ic15", 0, 0x800, BAD_DUMP CRC(60f56bf2) SHA1(35e697aca7213e3fb1ebe75bb8991b1b992af6d9) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( lovebero )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE)
|
||||
ROM_LOAD( "ic62", 0x00000000, 0x4000000, CRC(0a23cea3) SHA1(1780d935b0d641769859b2022df8e4262e7bafd8) )
|
||||
ROM_LOAD( "ic63", 0x04000000, 0x4000000, CRC(d3870287) SHA1(efd3630d54068f5a8caf242a48db410bedf48e7a) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0446-com.ic15", 0, 0x800, BAD_DUMP CRC(60f56bf2) SHA1(35e697aca7213e3fb1ebe75bb8991b1b992af6d9) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( tetgiant )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASE)
|
||||
ROM_LOAD( "ic62", 0x00000000, 0x4000000, CRC(31ba1938) SHA1(9b5a05193b3df13cd7617a38913e0b0fbd61da44) )
|
||||
ROM_LOAD( "ic63", 0x04000000, 0x4000000, CRC(cb946213) SHA1(6195e33c44a1e8eb464dfc3558dc1c9b4d910ef3) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0604-com.ic15", 0, 0x800, BAD_DUMP CRC(e8dd2b86) SHA1(765ffd2e4a36302b1db0815e842c9656e29f2457) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( dinoki25 )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASEFF)
|
||||
|
||||
DISK_REGION( "cflash" )
|
||||
DISK_IMAGE( "mda-c0047", 0, SHA1(0f97291d9c5dbe3e66a5220da05aebdfaa78b35d) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0408-com.ic15", 0, 0x800, BAD_DUMP CRC(0e94daba) SHA1(4e9722333a29afd0dbadba78b16344b77a689610) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( loveber3 )
|
||||
SEGASP_BIOS
|
||||
SEGASP_US
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASEFF)
|
||||
|
||||
DISK_REGION( "cflash" )
|
||||
DISK_IMAGE( "mda-c0042", 0, SHA1(9992d90dae8ce7636e4153e02b779c27931b3be6) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0446-com.ic15", 0, 0x800, BAD_DUMP CRC(60f56bf2) SHA1(35e697aca7213e3fb1ebe75bb8991b1b992af6d9) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( tetgiano )
|
||||
SEGASP_BIOS
|
||||
SEGASP_EXP
|
||||
SEGASP_MISC
|
||||
|
||||
ROM_REGION( 0x08000000, "rom_board", ROMREGION_ERASEFF)
|
||||
|
||||
DISK_REGION( "cflash" )
|
||||
DISK_IMAGE( "mda-c0076", 0, SHA1(6987c888d2a3ada2d07f6396d47fdba507ca859d) )
|
||||
|
||||
ROM_REGION( 0x800, "pic_readout", 0 )
|
||||
ROM_LOAD( "317-0604-com.ic15", 0, 0x800, BAD_DUMP CRC(e8dd2b86) SHA1(765ffd2e4a36302b1db0815e842c9656e29f2457) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -10,11 +10,18 @@ class segasp_state : public naomi_state
|
||||
{
|
||||
public:
|
||||
segasp_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: naomi_state(mconfig, type, tag)
|
||||
{
|
||||
: naomi_state(mconfig, type, tag),
|
||||
m_sp_eeprom(*this, "sp_eeprom")
|
||||
{ }
|
||||
required_device<eeprom_serial_93cxx_device> m_sp_eeprom;
|
||||
|
||||
DECLARE_READ64_MEMBER(sp_eeprom_r);
|
||||
DECLARE_WRITE64_MEMBER(sp_eeprom_w);
|
||||
DECLARE_READ64_MEMBER(sp_rombdflg_r);
|
||||
DECLARE_READ64_MEMBER(sp_io_r);
|
||||
DECLARE_READ64_MEMBER(sn_93c46a_r);
|
||||
DECLARE_WRITE64_MEMBER(sn_93c46a_w);
|
||||
|
||||
}
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
|
@ -127,6 +127,8 @@ void naomi_m4_board::board_setup_address(UINT32 address, bool is_dma)
|
||||
|
||||
void naomi_m4_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
|
||||
{
|
||||
static UINT8 retzero[2] = { 0, 0 };
|
||||
|
||||
if (cfi_mode) {
|
||||
int fpr_num = 0;
|
||||
|
||||
@ -148,8 +150,15 @@ void naomi_m4_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
|
||||
limit = BUFFER_SIZE;
|
||||
|
||||
} else {
|
||||
base = m_region->base() + rom_cur_address;
|
||||
limit = m_region->bytes() - rom_cur_address;
|
||||
UINT32 size = m_region->bytes();
|
||||
if (rom_cur_address < size)
|
||||
{
|
||||
base = m_region->base() + rom_cur_address;
|
||||
limit = size - rom_cur_address;
|
||||
} else {
|
||||
base = retzero;
|
||||
limit = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user