diff options
author | mooglyguy <therealmogminer@gmail.com> | 2017-09-02 14:44:48 +0200 |
---|---|---|
committer | mooglyguy <therealmogminer@gmail.com> | 2017-09-02 14:46:04 +0200 |
commit | e0c2b67676ed577788f7cd8bc418cf668306fd69 (patch) | |
tree | 919b1502b04d55fbddd66f9ba304fd567ee6ad93 | |
parent | c0e2e2c40df7ee6043800ce1fb9e9ea799d697ac (diff) |
nds: Added correct hashes and started in on I/O regs, nw
-rw-r--r-- | src/mame/drivers/nds.cpp | 116 | ||||
-rw-r--r-- | src/mame/includes/nds.h | 27 |
2 files changed, 129 insertions, 14 deletions
diff --git a/src/mame/drivers/nds.cpp b/src/mame/drivers/nds.cpp index 2b50fe42d36..485d7c45a42 100644 --- a/src/mame/drivers/nds.cpp +++ b/src/mame/drivers/nds.cpp @@ -11,15 +11,110 @@ #include "emu.h" #include "includes/nds.h" -static ADDRESS_MAP_START( nds_arm9_map, AS_PROGRAM, 32, nds_state ) - AM_RANGE(0x00000000, 0x00000fff) AM_ROM - AM_RANGE(0x02000000, 0x023fffff) AM_RAM AM_SHARE("mainram") -ADDRESS_MAP_END +#define VERBOSE_LEVEL (0) + +static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, const char *s_fmt, ...) +{ + if( VERBOSE_LEVEL >= n_level ) + { + va_list v; + char buf[ 32768 ]; + va_start( v, s_fmt ); + vsprintf( buf, s_fmt, v ); + va_end( v ); + device.logerror( "%08x: %s", device.machine().describe_context(), buf ); + } +} + +READ32_MEMBER(nds_state::arm7_io_r) +{ + switch(offset) + { + case POSTFLG_OFFSET: + /* Bit Use + * 0 0=Booting, 1=Booted (set by BIOS/firmware) + */ + return m_arm7_postflg; + default: + verboselog(*this, 0, "[ARM7] [IO] Unknown read: %08x (%08x)\n", offset*4, mem_mask); + break; + } + + return 0; +} + +WRITE32_MEMBER(nds_state::arm7_io_w) +{ + switch(offset) + { + case POSTFLG_OFFSET: + /* Bit Use + * 0 0=Booting, 1=Booted (set by BIOS/firmware) + */ + if (!(m_arm7_postflg & POSTFLG_PBF_MASK) && m_arm7->pc() < 0x4000) + { + m_arm7_postflg &= ~POSTFLG_PBF_MASK; + m_arm7_postflg |= data & POSTFLG_PBF_MASK; + } + break; + default: + verboselog(*this, 0, "[ARM7] [IO] Unknown write: %08x = %08x (%08x)\n", offset*4, data, mem_mask); + break; + } +} + +READ32_MEMBER(nds_state::arm9_io_r) +{ + switch(offset) + { + case POSTFLG_OFFSET: + /* Bit Use + * 0 0=Booting, 1=Booted (set by BIOS/firmware) + * 1 RAM + */ + return m_arm9_postflg; + default: + verboselog(*this, 0, "[ARM9] [IO] Unknown read: %08x (%08x)\n", offset*4, mem_mask); + break; + } + + return 0; +} + +WRITE32_MEMBER(nds_state::arm9_io_w) +{ + switch(offset) + { + case POSTFLG_OFFSET: + /* Bit Use + * 0 0=Booting, 1=Booted (set by BIOS/firmware) + * 1 RAM + */ + if (!(m_arm9_postflg & POSTFLG_PBF_MASK)) + { + m_arm9_postflg &= ~POSTFLG_PBF_MASK; + m_arm9_postflg |= data & POSTFLG_PBF_MASK; + } + m_arm9_postflg &= ~POSTFLG_RAM_MASK; + m_arm9_postflg |= data & POSTFLG_RAM_MASK; + break; + default: + verboselog(*this, 0, "[ARM7] [IO] Unknown write: %08x = %08x (%08x)\n", offset*4, data, mem_mask); + break; + } +} static ADDRESS_MAP_START( nds_arm7_map, AS_PROGRAM, 32, nds_state ) AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_RANGE(0x02000000, 0x023fffff) AM_RAM AM_SHARE("mainram") AM_RANGE(0x03800000, 0x0380ffff) AM_RAM + AM_RANGE(0x04000000, 0x0400ffff) AM_READWRITE(arm7_io_r, arm7_io_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( nds_arm9_map, AS_PROGRAM, 32, nds_state ) + AM_RANGE(0x00000000, 0x00000fff) AM_ROM + AM_RANGE(0x02000000, 0x023fffff) AM_RAM AM_SHARE("mainram") + AM_RANGE(0x04000000, 0x0400ffff) AM_READWRITE(arm9_io_r, arm9_io_w) ADDRESS_MAP_END static INPUT_PORTS_START( nds ) @@ -28,6 +123,8 @@ INPUT_PORTS_END void nds_state::machine_reset() { + m_arm7_postflg = 0; + m_arm9_postflg = 0; } void nds_state::machine_start() @@ -35,24 +132,23 @@ void nds_state::machine_start() } static MACHINE_CONFIG_START( nds ) + MCFG_CPU_ADD("arm7", ARM7, XTAL_33_333MHz) + MCFG_CPU_PROGRAM_MAP(nds_arm7_map) MCFG_CPU_ADD("arm9", ARM946ES, XTAL_66_6667MHz) MCFG_CPU_PROGRAM_MAP(nds_arm9_map) - - MCFG_CPU_ADD("arm7", ARM7, XTAL_33_333MHz) - MCFG_CPU_PROGRAM_MAP(nds_arm7_map) MACHINE_CONFIG_END /* Help identifying the region and revisions of the set would be greatly appreciated! */ ROM_START( nds ) ROM_REGION( 0x1000, "arm9", 0 ) - ROM_LOAD( "biosnds9.rom", 0x0000, 0x1000, CRC(12345678) SHA1(1234567812345678123456781234567812345678) ) + ROM_LOAD( "biosnds9.rom", 0x0000, 0x1000, CRC(2ab23573) SHA1(bfaac75f101c135e32e2aaf541de6b1be4c8c62d) ) ROM_REGION( 0x4000, "arm7", 0 ) - ROM_LOAD( "biosnds7.rom", 0x0000, 0x4000, CRC(87654321) SHA1(8765432187654321876543218765432187654321) ) + ROM_LOAD( "biosnds7.rom", 0x0000, 0x4000, CRC(1280f0d5) SHA1(24f67bdea115a2c847c8813a262502ee1607b7df) ) ROM_REGION32_LE( 0x40000, "firmware", 0 ) - ROM_LOAD( "firmware.bin", 0x0000, 0x40000, CRC(55aa6699) SHA1(55aa669955aa669955aa669955aa669955aa6699) ) + ROM_LOAD( "firmware.bin", 0x0000, 0x40000, CRC(945f9dc9) SHA1(cfe072921ee3fb93f688743f8beef89043c3e9ad) ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS diff --git a/src/mame/includes/nds.h b/src/mame/includes/nds.h index 8614a4eea3b..6f2a2f1d44b 100644 --- a/src/mame/includes/nds.h +++ b/src/mame/includes/nds.h @@ -11,19 +11,38 @@ class nds_state : public driver_device public: nds_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_arm9(*this, "arm9"), m_arm7(*this, "arm7"), + m_arm9(*this, "arm9"), m_firmware(*this, "firmware") { } - required_device<arm946es_cpu_device> m_arm9; - required_device<arm7_cpu_device> m_arm7; - void machine_start() override; void machine_reset() override; + // ARM7 + DECLARE_READ32_MEMBER(arm7_io_r); + DECLARE_WRITE32_MEMBER(arm7_io_w); + + // ARM9 + DECLARE_READ32_MEMBER(arm9_io_r); + DECLARE_WRITE32_MEMBER(arm9_io_w); + protected: + required_device<arm7_cpu_device> m_arm7; + required_device<arm946es_cpu_device> m_arm9; + required_region_ptr<uint32_t> m_firmware; + + enum { + POSTFLG_OFFSET = 0x300/4, + POSTFLG_PBF_SHIFT = 0, + POSTFLG_RAM_SHIFT = 1, + POSTFLG_PBF_MASK = (1 << POSTFLG_PBF_SHIFT), + POSTFLG_RAM_MASK = (1 << POSTFLG_RAM_SHIFT), + }; + + uint32_t m_arm7_postflg; + uint32_t m_arm9_postflg; }; #endif // INCLUDES_NDS_H |