From 1d62461304e22bdc25099295db05fe4f47a31043 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 14 Aug 2024 17:00:49 +0200 Subject: mcs48: improve EA pin and add it to advision and mario, mario: mark sound mcu as NO_DUMP, remove USE_8039 --- src/devices/cpu/mcs48/mcs48.cpp | 128 +++++++++++++------------ src/devices/cpu/mcs48/mcs48.h | 20 ++-- src/mame/entex/advision.cpp | 16 ---- src/mame/nintendo/mario.cpp | 201 +++++++++++++++++++--------------------- src/mame/nintendo/mario.h | 60 ++++++------ src/mame/nintendo/mario_a.cpp | 97 ++++++------------- 6 files changed, 232 insertions(+), 290 deletions(-) diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp index ba950fc11b7..ce0dce03d7a 100644 --- a/src/devices/cpu/mcs48/mcs48.cpp +++ b/src/devices/cpu/mcs48/mcs48.cpp @@ -8,9 +8,6 @@ Based on the original work Copyright Dan Boris, an 8048 emulator TODO: - - EA pin - defined by architecture, must implement: - 1 means external access, bypassing internal ROM - reimplement as a push, not a pull - add CMOS devices, 1 new opcode (01 IDL) - add special 8022 opcodes (RAD, SEL AN0, SEL AN1, RETI) - according to the user manual, some opcodes(dis/enable timer/interrupt) @@ -139,6 +136,10 @@ #define R7 m_regptr[7] +/*************************************************************************** + DEVICE TYPES +***************************************************************************/ + DEFINE_DEVICE_TYPE(I8021, i8021_device, "i8021", "Intel 8021") DEFINE_DEVICE_TYPE(I8022, i8022_device, "i8022", "Intel 8022") DEFINE_DEVICE_TYPE(I8035, i8035_device, "i8035", "Intel 8035") @@ -164,53 +165,17 @@ DEFINE_DEVICE_TYPE(M58715, m58715_device, "m58715", "M58715") /*************************************************************************** - ADDRESS MAPS + CONSTRUCTOR ***************************************************************************/ -// FIXME: the memory maps should probably support rom banking for EA -void mcs48_cpu_device::program_10bit(address_map &map) -{ - map(0x000, 0x3ff).rom(); -} - -void mcs48_cpu_device::program_11bit(address_map &map) -{ - map(0x000, 0x7ff).rom(); -} - -void mcs48_cpu_device::program_12bit(address_map &map) -{ - map(0x000, 0xfff).rom(); -} - -void mcs48_cpu_device::data_6bit(address_map &map) -{ - map(0x00, 0x3f).ram().share("data"); -} - -void mcs48_cpu_device::data_7bit(address_map &map) -{ - map(0x00, 0x7f).ram().share("data"); -} - -void mcs48_cpu_device::data_8bit(address_map &map) -{ - map(0x00, 0xff).ram().share("data"); -} - - mcs48_cpu_device::mcs48_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int rom_size, int ram_size, uint8_t feature_mask, const mcs48_cpu_device::mcs48_ophandler *opcode_table) : cpu_device(mconfig, type, tag, owner, clock) , m_program_config("program", ENDIANNESS_LITTLE, 8, (feature_mask & MB_FEATURE) != 0 ? 12 : 11, 0, - (rom_size == 1024) ? address_map_constructor(FUNC(mcs48_cpu_device::program_10bit), this) : - (rom_size == 2048) ? address_map_constructor(FUNC(mcs48_cpu_device::program_11bit), this) : - (rom_size == 4096) ? address_map_constructor(FUNC(mcs48_cpu_device::program_12bit), this) : - address_map_constructor()) + rom_size ? address_map_constructor(FUNC(mcs48_cpu_device::program_map), this) : address_map_constructor()) , m_data_config("data", ENDIANNESS_LITTLE, 8, ((ram_size == 64) ? 6 : ((ram_size == 128) ? 7 : 8)), 0, - (ram_size == 64) ? address_map_constructor(FUNC(mcs48_cpu_device::data_6bit), this) : - (ram_size == 128) ? address_map_constructor(FUNC(mcs48_cpu_device::data_7bit), this) : - address_map_constructor(FUNC(mcs48_cpu_device::data_8bit), this)) + address_map_constructor(FUNC(mcs48_cpu_device::data_map), this)) , m_io_config("io", ENDIANNESS_LITTLE, 8, 8, 0) + , m_rom_view(*this, "rom_view") , m_port_in_cb(*this, 0xff) , m_port_out_cb(*this) , m_bus_in_cb(*this, 0xff) @@ -221,16 +186,17 @@ mcs48_cpu_device::mcs48_cpu_device(const machine_config &mconfig, device_type ty , m_psw(0) , m_dataptr(*this, "data") , m_feature_mask(feature_mask) - , m_int_rom_size(rom_size) + , m_rom_size(rom_size) + , m_ram_size(ram_size) , m_opcode_table(opcode_table) { // Sanity checks - if ( ram_size != 64 && ram_size != 128 && ram_size != 256 ) + if (ram_size != 64 && ram_size != 128 && ram_size != 256) { fatalerror("mcs48: Invalid RAM size\n"); } - if ( rom_size != 0 && rom_size != 1024 && rom_size != 2048 && rom_size != 4096 ) + if (rom_size != 0 && rom_size != 1024 && rom_size != 2048 && rom_size != 4096) { fatalerror("mcs48: Invalid ROM size\n"); } @@ -372,6 +338,30 @@ std::unique_ptr mcs48_cpu_device::create_disassembler() } +/*************************************************************************** + ADDRESS MAPS +***************************************************************************/ + +void mcs48_cpu_device::program_map(address_map &map) +{ + const uint16_t mask = m_rom_size - 1; + + // I802X does not have EA pin + if (m_feature_mask & I802X_FEATURE) + map(0, mask).rom(); + else + { + map(0, mask).view(m_rom_view); + m_rom_view[0](0, mask).rom(); + } +} + +void mcs48_cpu_device::data_map(address_map &map) +{ + map(0, m_ram_size - 1).ram().share("data"); +} + + /*************************************************************************** INLINE FUNCTIONS ***************************************************************************/ @@ -412,6 +402,23 @@ void mcs48_cpu_device::update_regptr() } +/*------------------------------------------------- + update_ea - apply EA pin (External Access input, + EA=1: external ROM, EA=0: internal ROM) +-------------------------------------------------*/ + +void mcs48_cpu_device::update_ea() +{ + if (m_rom_view.exists()) + { + if (m_ea) + m_rom_view.disable(); + else + m_rom_view.select(0); + } +} + + /*------------------------------------------------- push_pc_psw - push the m_pc and m_psw values onto the stack @@ -1104,6 +1111,7 @@ void mcs48_cpu_device::device_start() m_a = 0; m_psw = 0; m_f1 = false; + m_a11 = 0; m_p1 = 0; m_p2 = 0; m_timer = 0; @@ -1122,17 +1130,16 @@ void mcs48_cpu_device::device_start() m_timecount_enabled = 0; m_flags_enabled = false; m_dma_enabled = false; - m_a11 = 0; - - // External access line, EA=1: read from external rom, EA=0: read from internal rom - // FIXME: Current implementation suboptimal - m_ea = (m_int_rom_size ? 0 : 1); space(AS_PROGRAM).cache(m_program); space(AS_DATA).specific(m_data); - if(m_feature_mask & EXT_BUS_FEATURE) + if (m_feature_mask & EXT_BUS_FEATURE) space(AS_IO).specific(m_io); + // default EA pin state + m_ea = m_rom_size ? 0 : 1; + update_ea(); + // ensure that regptr is valid before get_info gets called update_regptr(); @@ -1151,11 +1158,10 @@ void mcs48_cpu_device::device_start() state_add(MCS48_P1, "P1", m_p1); state_add(MCS48_P2, "P2", m_p2); - for (int regnum = 0; regnum < 8; regnum++) { + for (int regnum = 0; regnum < 8; regnum++) state_add(MCS48_R0 + regnum, string_format("R%d", regnum).c_str(), m_rtemp).callimport().callexport(); - } - if (m_feature_mask & EXT_BUS_FEATURE) + if (!(m_feature_mask & I802X_FEATURE)) state_add(MCS48_EA, "EA", m_ea).mask(0x1); if (m_feature_mask & UPI41_FEATURE) @@ -1172,6 +1178,7 @@ void mcs48_cpu_device::device_start() save_item(NAME(m_a)); save_item(NAME(m_psw)); save_item(NAME(m_f1)); + save_item(NAME(m_a11)); save_item(NAME(m_p1)); save_item(NAME(m_p2)); save_item(NAME(m_ea)); @@ -1193,8 +1200,6 @@ void mcs48_cpu_device::device_start() save_item(NAME(m_flags_enabled)); save_item(NAME(m_dma_enabled)); - save_item(NAME(m_a11)); - set_icountptr(m_icount); } @@ -1311,6 +1316,7 @@ void mcs48_cpu_device::burn_cycles(int count) // if the counter is enabled, poll the T1 test input once for each cycle else if (m_timecount_enabled & COUNTER_ENABLED) + { for ( ; count > 0; count--, m_icount--) { m_t1_history = (m_t1_history << 1) | (test_r(1) & 1); @@ -1320,6 +1326,7 @@ void mcs48_cpu_device::burn_cycles(int count) timerover = true; } } + } // if either source caused a timer overflow, set the flags if (timerover) @@ -1377,7 +1384,7 @@ void mcs48_cpu_device::execute_run() uint8_t upi41_cpu_device::upi41_master_r(offs_t offset) { // if just reading the status, return it - if ((offset & 1) != 0) + if (offset & 1) return (m_sts & 0xf3) | (m_f1 ? 8 : 0) | ((m_psw & F_FLAG) ? 4 : 0); // if the output buffer was full, it gets cleared now @@ -1396,7 +1403,7 @@ uint8_t upi41_cpu_device::upi41_master_r(offs_t offset) write -------------------------------------------------*/ -TIMER_CALLBACK_MEMBER( upi41_cpu_device::master_callback ) +TIMER_CALLBACK_MEMBER(upi41_cpu_device::master_callback) { // data always goes to the input buffer m_dbbi = param & 0xff; @@ -1499,7 +1506,7 @@ void mcs48_cpu_device::state_string_export(const device_state_entry &entry, std: void mcs48_cpu_device::execute_set_input(int inputnum, int state) { - switch( inputnum ) + switch (inputnum) { case MCS48_INPUT_IRQ: m_irq_state = (state != CLEAR_LINE); @@ -1507,6 +1514,7 @@ void mcs48_cpu_device::execute_set_input(int inputnum, int state) case MCS48_INPUT_EA: m_ea = (state != CLEAR_LINE); + update_ea(); break; } } diff --git a/src/devices/cpu/mcs48/mcs48.h b/src/devices/cpu/mcs48/mcs48.h index 3640286a524..fb3724aa167 100644 --- a/src/devices/cpu/mcs48/mcs48.h +++ b/src/devices/cpu/mcs48/mcs48.h @@ -127,12 +127,8 @@ public: uint8_t p1_r() { return m_p1; } uint8_t p2_r() { return m_p2; } - void data_6bit(address_map &map); - void data_7bit(address_map &map); - void data_8bit(address_map &map); - void program_10bit(address_map &map); - void program_11bit(address_map &map); - void program_12bit(address_map &map); + void data_map(address_map &map); + void program_map(address_map &map); template void set_t0_clk_cb(T &&... args) { m_t0_clk_func.set(std::forward(args)...); } @@ -175,6 +171,7 @@ protected: address_space_config m_program_config; address_space_config m_data_config; address_space_config m_io_config; + memory_view m_rom_view; devcb_read8::array<2> m_port_in_cb; devcb_write8::array<2> m_port_out_cb; @@ -189,9 +186,10 @@ protected: uint16_t m_pc; // 16-bit program counter uint8_t m_a; // 8-bit accumulator - uint8_t * m_regptr; // pointer to r0-r7 + uint8_t *m_regptr; // pointer to r0-r7 uint8_t m_psw; // 8-bit PSW bool m_f1; // F1 flag (F0 is in PSW) + uint16_t m_a11; // A11 value, either 0x000 or 0x800 uint8_t m_p1; // 8-bit latched port 1 uint8_t m_p2; // 8-bit latched port 2 uint8_t m_ea; // 1-bit latched ea input @@ -213,8 +211,6 @@ protected: bool m_flags_enabled; // true if I/O flags have been enabled (UPI-41 only) bool m_dma_enabled; // true if DMA has been enabled (UPI-41 only) - uint16_t m_a11; // A11 value, either 0x000 or 0x800 - int m_icount; // Memory spaces @@ -225,7 +221,8 @@ protected: required_shared_ptr m_dataptr; uint8_t m_feature_mask; // processor feature flags - uint16_t m_int_rom_size; // internal rom size + uint16_t m_rom_size; // internal rom size + uint16_t m_ram_size; // internal ram size uint8_t m_rtemp; // temporary for import/export @@ -255,6 +252,7 @@ protected: uint8_t opcode_fetch(); uint8_t argument_fetch(); void update_regptr(); + void update_ea(); void push_pc_psw(); void pull_pc_psw(); void pull_pc(); @@ -634,7 +632,7 @@ protected: // construction/destruction upi41_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int rom_size, int ram_size); - TIMER_CALLBACK_MEMBER( master_callback ); + TIMER_CALLBACK_MEMBER(master_callback); }; class i8041a_device : public upi41_cpu_device diff --git a/src/mame/entex/advision.cpp b/src/mame/entex/advision.cpp index 4a703983219..b4d52932d7c 100644 --- a/src/mame/entex/advision.cpp +++ b/src/mame/entex/advision.cpp @@ -30,7 +30,6 @@ different rate, hence MAME configures a larger screen. In fact, the homebrew dem Code Red doesn't use the BIOS for it, and runs at 50*40 to save some RAM. TODO: -- EA banking is ugly, it can be turd-polished but the real issue is in mcs48 - display refresh is actually ~14Hz, but doing that will make MAME very sluggish BTANB: @@ -71,7 +70,6 @@ public: m_led_update(*this, "led_update"), m_led_off(*this, "led_off"), m_cart(*this, "cartslot"), - m_ea_bank(*this, "ea_bank"), m_joy(*this, "JOY"), m_conf(*this, "CONF") { } @@ -94,7 +92,6 @@ private: required_device m_led_update; required_device m_led_off; required_device m_cart; - required_memory_bank m_ea_bank; required_ioport m_joy; required_ioport m_conf; @@ -288,8 +285,6 @@ void advision_state::bankswitch_w(u8 data) // P12: 8048 EA pin m_maincpu->set_input_line(MCS48_INPUT_EA, BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE); - if (m_cart_rom) - m_ea_bank->set_entry(BIT(data, 2)); } u8 advision_state::ext_ram_r(offs_t offset) @@ -319,7 +314,6 @@ void advision_state::ext_ram_w(offs_t offset, u8 data) void advision_state::program_map(address_map &map) { map(0x0000, 0x0fff).r(m_cart, FUNC(generic_slot_device::read_rom)); - map(0x0000, 0x03ff).bankr("ea_bank"); } void advision_state::io_map(address_map &map) @@ -379,16 +373,6 @@ INPUT_PORTS_END void advision_state::machine_start() { - // configure EA banking - std::string region_tag; - m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); - - m_ea_bank->configure_entry(0, memregion("maincpu")->base()); - if (m_cart_rom) - m_ea_bank->configure_entry(1, m_cart_rom->base()); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, m_ea_bank); - m_ea_bank->set_entry(0); - // allocate display buffer m_display = std::make_unique(DISPLAY_WIDTH * 40); std::fill_n(m_display.get(), DISPLAY_WIDTH * 40, 0); diff --git a/src/mame/nintendo/mario.cpp b/src/mame/nintendo/mario.cpp index 6c426e4f70a..1be634efa15 100644 --- a/src/mame/nintendo/mario.cpp +++ b/src/mame/nintendo/mario.cpp @@ -2,26 +2,23 @@ // copyright-holders:Mirko Buffoni /*************************************************************************** -TODO: - - start up sound (Sound #2 should play but does not - Done: - - discrete sound - - hooked up z80dma - - combined memory maps - - statics in mario_state struct - - fixed save state issues - - combine sh_* writes into one routine - - Hooked up flipscreen - - Changed monitor orientation to ROT0 - - fixed mario0110u1gre - - rewrote driver, separate MACHINE_DRIVER(mario_audio) - - palette from schematics - - video timing from schematics - - driver configuration switch Nintendo/Std Monitor - - got rid of COLORTABLE - - clocks as defines in .h - - use XTAL_* +- discrete sound +- hooked up z80dma +- combined memory maps +- statics in mario_state struct +- fixed save state issues +- combine sh_* writes into one routine +- Hooked up flipscreen +- Changed monitor orientation to ROT0 +- fixed mario0110u1gre +- rewrote driver, separate MACHINE_DRIVER(mario_audio) +- palette from schematics +- video timing from schematics +- driver configuration switch Nintendo/Std Monitor +- got rid of COLORTABLE +- clocks as defines in .h +- use XTAL_* Mario Bros memory map (preliminary): @@ -379,7 +376,7 @@ void mario_state::mario(machine_config &config) void mario_state::masao(machine_config &config) { mario_base(config); - m_maincpu->set_clock(4000000); /* 4.000 MHz (?) */ + m_maincpu->set_clock(4000000); /* 4.000 MHz (?) */ m_maincpu->set_addrmap(AS_PROGRAM, &mario_state::masao_map); /* sound hardware */ @@ -395,138 +392,130 @@ void mario_state::masao(machine_config &config) ROM_START( mario ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "tma1-c-7f_g.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) /* Unknown revision */ - ROM_LOAD( "tma1-c-7e_g.7e", 0x2000, 0x2000, CRC(116b3856) SHA1(e372f846d0e5a2b9b47ebd0330293fcc8a12363f) ) - ROM_LOAD( "tma1-c-7d_g.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) - ROM_LOAD( "tma1-c-7c_g.7c", 0xf000, 0x1000, CRC(4a63d96b) SHA1(b09060b2c84ab77cc540a27b8f932cb60ec8d442) ) - - ROM_REGION( 0x1800, "audiocpu", 0 ) /* sound */ - /* internal rom */ - ROM_FILL( 0x0000, 0x0800, 0x00) - /* first half banked */ - ROM_LOAD( "tma1-c-6k_e.6k", 0x1000, 0x0800, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) - /* second half always read */ - ROM_CONTINUE( 0x0800, 0x0800) + ROM_LOAD( "tma1-c-7f_g.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) /* Unknown revision */ + ROM_LOAD( "tma1-c-7e_g.7e", 0x2000, 0x2000, CRC(116b3856) SHA1(e372f846d0e5a2b9b47ebd0330293fcc8a12363f) ) + ROM_LOAD( "tma1-c-7d_g.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) + ROM_LOAD( "tma1-c-7c_g.7c", 0xf000, 0x1000, CRC(4a63d96b) SHA1(b09060b2c84ab77cc540a27b8f932cb60ec8d442) ) + + ROM_REGION( 0x0800, "audiocpu", ROMREGION_ERASE00 ) + ROM_LOAD( "m58715-051p.5l", 0x0000, 0x0800, NO_DUMP ) // internal rom + + ROM_REGION( 0x1000, "soundrom", 0 ) + ROM_LOAD( "tma1-c-6k_e.6k", 0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "tma1-v-3f.3f", 0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) ) - ROM_LOAD( "tma1-v-3j.3j", 0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) ) + ROM_LOAD( "tma1-v-3f.3f", 0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) ) + ROM_LOAD( "tma1-v-3j.3j", 0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) ) ROM_REGION( 0x6000, "gfx2", 0 ) - ROM_LOAD( "tma1-v-7m.7m", 0x0000, 0x1000, CRC(22b7372e) SHA1(4a1c1e239cb6d483e76f50d7a3b941025963c6a3) ) - ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) - ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) - ROM_LOAD( "tma1-v-7s.7s", 0x3000, 0x1000, CRC(56f1d613) SHA1(9af6844dbaa3615433d0595e9e85e72493e31a54) ) - ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) - ROM_LOAD( "tma1-v-7u.7u", 0x5000, 0x1000, CRC(7baf5309) SHA1(d9194ff7b89a18273d37b47228fc7fb7e2a0ed1f) ) + ROM_LOAD( "tma1-v-7m.7m", 0x0000, 0x1000, CRC(22b7372e) SHA1(4a1c1e239cb6d483e76f50d7a3b941025963c6a3) ) + ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) + ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) + ROM_LOAD( "tma1-v-7s.7s", 0x3000, 0x1000, CRC(56f1d613) SHA1(9af6844dbaa3615433d0595e9e85e72493e31a54) ) + ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) + ROM_LOAD( "tma1-v-7u.7u", 0x5000, 0x1000, CRC(7baf5309) SHA1(d9194ff7b89a18273d37b47228fc7fb7e2a0ed1f) ) ROM_REGION( 0x0200, "proms", 0 ) - ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) + ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) ROM_REGION( 0x0020, "decoder_prom", 0 ) - ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ + ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ ROM_END ROM_START( mariof ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "tma1-c-7f_f.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) - ROM_LOAD( "tma1-c-7e_f.7e", 0x2000, 0x2000, CRC(94fb60d6) SHA1(e74d74aa27f87a164bdd453ab0076efeeb7d4ea3) ) - ROM_LOAD( "tma1-c-7d_f.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) - ROM_LOAD( "tma1-c-7c_f.7c", 0xf000, 0x1000, CRC(4a63d96b) SHA1(b09060b2c84ab77cc540a27b8f932cb60ec8d442) ) - - ROM_REGION( 0x1800, "audiocpu", 0 ) /* sound */ - /* internal rom */ - ROM_FILL( 0x0000, 0x0800, 0x00) - /* first half banked */ - ROM_LOAD( "tma1-c-6k_e.6k", 0x1000, 0x0800, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) - /* second half always read */ - ROM_CONTINUE( 0x0800, 0x0800) + ROM_LOAD( "tma1-c-7f_f.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) + ROM_LOAD( "tma1-c-7e_f.7e", 0x2000, 0x2000, CRC(94fb60d6) SHA1(e74d74aa27f87a164bdd453ab0076efeeb7d4ea3) ) + ROM_LOAD( "tma1-c-7d_f.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) + ROM_LOAD( "tma1-c-7c_f.7c", 0xf000, 0x1000, CRC(4a63d96b) SHA1(b09060b2c84ab77cc540a27b8f932cb60ec8d442) ) + + ROM_REGION( 0x0800, "audiocpu", ROMREGION_ERASE00 ) + ROM_LOAD( "m58715-051p.5l", 0x0000, 0x0800, NO_DUMP ) // internal rom + + ROM_REGION( 0x1000, "soundrom", 0 ) + ROM_LOAD( "tma1-c-6k_e.6k", 0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "tma1-v-3f.3f", 0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) ) - ROM_LOAD( "tma1-v-3j.3j", 0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) ) + ROM_LOAD( "tma1-v-3f.3f", 0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) ) + ROM_LOAD( "tma1-v-3j.3j", 0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) ) ROM_REGION( 0x6000, "gfx2", 0 ) - ROM_LOAD( "tma1-v-7m.7m", 0x0000, 0x1000, CRC(22b7372e) SHA1(4a1c1e239cb6d483e76f50d7a3b941025963c6a3) ) - ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) - ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) - ROM_LOAD( "tma1-v-7s.7s", 0x3000, 0x1000, CRC(56f1d613) SHA1(9af6844dbaa3615433d0595e9e85e72493e31a54) ) - ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) - ROM_LOAD( "tma1-v-7u.7u", 0x5000, 0x1000, CRC(7baf5309) SHA1(d9194ff7b89a18273d37b47228fc7fb7e2a0ed1f) ) + ROM_LOAD( "tma1-v-7m.7m", 0x0000, 0x1000, CRC(22b7372e) SHA1(4a1c1e239cb6d483e76f50d7a3b941025963c6a3) ) + ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) + ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) + ROM_LOAD( "tma1-v-7s.7s", 0x3000, 0x1000, CRC(56f1d613) SHA1(9af6844dbaa3615433d0595e9e85e72493e31a54) ) + ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) + ROM_LOAD( "tma1-v-7u.7u", 0x5000, 0x1000, CRC(7baf5309) SHA1(d9194ff7b89a18273d37b47228fc7fb7e2a0ed1f) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "tma1-c-4p_1.4p", 0x0000, 0x0200, CRC(8187d286) SHA1(8a6d8e622599f1aacaeb10f7b1a39a23c8a840a0) ) /* BPROM was a MB7124E read as 82S147 */ ROM_REGION( 0x0020, "decoder_prom", 0 ) - ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ + ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ ROM_END ROM_START( marioe ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "tma1-c-7f_e-1.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) - ROM_LOAD( "tma1-c-7e_e-3.7e", 0x2000, 0x2000, CRC(b09ab857) SHA1(35b91cd1c4c3dd2d543a1ea8ff7b951715727792) ) - ROM_LOAD( "tma1-c-7d_e-1.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) - ROM_LOAD( "tma1-c-7c_e-3.7c", 0xf000, 0x1000, CRC(0d31bd1c) SHA1(a2e238470ba2ea3c81225fec687f61f047c68c59) ) - - ROM_REGION( 0x1800, "audiocpu", 0 ) /* sound */ - /* internal rom */ - ROM_FILL( 0x0000, 0x0800, 0x00) - /* first half banked */ - ROM_LOAD( "tma1-c-6k_e.6k", 0x1000, 0x0800, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) - /* second half always read */ - ROM_CONTINUE( 0x0800, 0x0800) + ROM_LOAD( "tma1-c-7f_e-1.7f", 0x0000, 0x2000, CRC(c0c6e014) SHA1(36a04f9ca1c2a583477cb8a6f2ef94e044e08296) ) + ROM_LOAD( "tma1-c-7e_e-3.7e", 0x2000, 0x2000, CRC(b09ab857) SHA1(35b91cd1c4c3dd2d543a1ea8ff7b951715727792) ) + ROM_LOAD( "tma1-c-7d_e-1.7d", 0x4000, 0x2000, CRC(dcceb6c1) SHA1(b19804e69ce2c98cf276c6055c3a250316b96b45) ) + ROM_LOAD( "tma1-c-7c_e-3.7c", 0xf000, 0x1000, CRC(0d31bd1c) SHA1(a2e238470ba2ea3c81225fec687f61f047c68c59) ) + + ROM_REGION( 0x0800, "audiocpu", ROMREGION_ERASE00 ) + ROM_LOAD( "m58715-051p.5l", 0x0000, 0x0800, NO_DUMP ) // internal rom + + ROM_REGION( 0x1000, "soundrom", 0 ) + ROM_LOAD( "tma1-c-6k_e.6k", 0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) ROM_REGION( 0x2000, "gfx1", 0 ) ROM_LOAD( "tma1-v-3f.3f", 0x0000, 0x1000, CRC(28b0c42c) SHA1(46749568aff88a28c3b6a1ac423abd1b90742a4d) ) ROM_LOAD( "tma1-v-3j.3j", 0x1000, 0x1000, CRC(0c8cc04d) SHA1(15fae47d701dc1ef15c943cee6aa991776ecffdf) ) ROM_REGION( 0x6000, "gfx2", 0 ) - ROM_LOAD( "tma1-v.7m", 0x0000, 0x1000, CRC(d01c0e2c) SHA1(cd6cc9d69c36db15543601f5da2abf109cde43c9) ) - ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) - ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) - ROM_LOAD( "tma1-v.7s", 0x3000, 0x1000, CRC(ff856e6f) SHA1(2bc9ff18bb1842e8de2bc61ac828f1b175290bed) ) - ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) - ROM_LOAD( "tma1-v.7u", 0x5000, 0x1000, CRC(d2dbeb75) SHA1(676cf3e15252cd0d9e926ca15c3aa0caa39be269) ) + ROM_LOAD( "tma1-v.7m", 0x0000, 0x1000, CRC(d01c0e2c) SHA1(cd6cc9d69c36db15543601f5da2abf109cde43c9) ) + ROM_LOAD( "tma1-v-7n.7n", 0x1000, 0x1000, CRC(4f3a1f47) SHA1(0747d693b9482f6dd28b0bc484fd1d3e29d35654) ) + ROM_LOAD( "tma1-v-7p.7p", 0x2000, 0x1000, CRC(56be6ccd) SHA1(15a6e16c189d45f72761ebcbe9db5001bdecd659) ) + ROM_LOAD( "tma1-v.7s", 0x3000, 0x1000, CRC(ff856e6f) SHA1(2bc9ff18bb1842e8de2bc61ac828f1b175290bed) ) + ROM_LOAD( "tma1-v-7t.7t", 0x4000, 0x1000, CRC(641f0008) SHA1(589fe108c7c11278fd897f2ded8f0498bc149cfd) ) + ROM_LOAD( "tma1-v.7u", 0x5000, 0x1000, CRC(d2dbeb75) SHA1(676cf3e15252cd0d9e926ca15c3aa0caa39be269) ) ROM_REGION( 0x0200, "proms", 0 ) - ROM_LOAD( "tma1-c-4p_1.4p", 0x0000, 0x0200, CRC(8187d286) SHA1(8a6d8e622599f1aacaeb10f7b1a39a23c8a840a0) ) /* BPROM was a MB7124E read as 82S147 */ + ROM_LOAD( "tma1-c-4p_1.4p", 0x0000, 0x0200, CRC(8187d286) SHA1(8a6d8e622599f1aacaeb10f7b1a39a23c8a840a0) ) /* BPROM was a MB7124E read as 82S147 */ ROM_REGION( 0x0020, "decoder_prom", 0 ) - ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ + ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ ROM_END ROM_START( marioj ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "tma1c-a1.7f", 0x0000, 0x2000, CRC(b64b6330) SHA1(f7084251ac325bbfa3fb804da16a50622e1fd213) ) - ROM_LOAD( "tma1c-a2.7e", 0x2000, 0x2000, CRC(290c4977) SHA1(5af266be0ddc883c6548c90e4a9084024a1e91a0) ) - ROM_LOAD( "tma1c-a1.7d", 0x4000, 0x2000, CRC(f8575f31) SHA1(710d0e72fcfce700ed2a22fb9c7c392cc76b250b) ) - ROM_LOAD( "tma1c-a2.7c", 0xf000, 0x1000, CRC(a3c11e9e) SHA1(d0612b0f8c2ea4e798f551922a04a324f4ed5f3d) ) - - ROM_REGION( 0x1800, "audiocpu", 0 ) /* sound */ - /* internal rom */ - ROM_FILL( 0x0000, 0x0800, 0x00) - /* first half banked */ - ROM_LOAD( "tma1c-a.6k", 0x1000, 0x0800, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) - /* second half always read */ - ROM_CONTINUE( 0x0800, 0x0800) + ROM_LOAD( "tma1c-a1.7f", 0x0000, 0x2000, CRC(b64b6330) SHA1(f7084251ac325bbfa3fb804da16a50622e1fd213) ) + ROM_LOAD( "tma1c-a2.7e", 0x2000, 0x2000, CRC(290c4977) SHA1(5af266be0ddc883c6548c90e4a9084024a1e91a0) ) + ROM_LOAD( "tma1c-a1.7d", 0x4000, 0x2000, CRC(f8575f31) SHA1(710d0e72fcfce700ed2a22fb9c7c392cc76b250b) ) + ROM_LOAD( "tma1c-a2.7c", 0xf000, 0x1000, CRC(a3c11e9e) SHA1(d0612b0f8c2ea4e798f551922a04a324f4ed5f3d) ) + + ROM_REGION( 0x0800, "audiocpu", ROMREGION_ERASE00 ) + ROM_LOAD( "m58715-051p.5l", 0x0000, 0x0800, NO_DUMP ) // internal rom + + ROM_REGION( 0x1000, "soundrom", 0 ) + ROM_LOAD( "tma1c-a.6k", 0x0000, 0x1000, CRC(06b9ff85) SHA1(111a29bcb9cda0d935675fa26eca6b099a88427f) ) ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "tma1v-a.3f", 0x0000, 0x1000, CRC(adf49ee0) SHA1(11fc2cd197bfe3ecb6af55c3c7a326c94988d2bd) ) - ROM_LOAD( "tma1v-a.3j", 0x1000, 0x1000, CRC(a5318f2d) SHA1(e42f5e51804195c64a56addb18b7ad12c57bb09a) ) + ROM_LOAD( "tma1v-a.3f", 0x0000, 0x1000, CRC(adf49ee0) SHA1(11fc2cd197bfe3ecb6af55c3c7a326c94988d2bd) ) + ROM_LOAD( "tma1v-a.3j", 0x1000, 0x1000, CRC(a5318f2d) SHA1(e42f5e51804195c64a56addb18b7ad12c57bb09a) ) ROM_REGION( 0x6000, "gfx2", 0 ) - ROM_LOAD( "tma1v-a.7m", 0x0000, 0x1000, CRC(186762f8) SHA1(711fdd37392656bdd5027e020d51d083ccd7c407) ) - ROM_LOAD( "tma1v-a.7n", 0x1000, 0x1000, CRC(e0e08bba) SHA1(315eba2c10d426c9c0bb4e36987bf8ebed7df9a0) ) - ROM_LOAD( "tma1v-a.7p", 0x2000, 0x1000, CRC(7b27c8c1) SHA1(3fb2613ce19e353fbcc77b6817927794fb35810f) ) - ROM_LOAD( "tma1v-a.7s", 0x3000, 0x1000, CRC(912ba80a) SHA1(351fb5b160216eb10e281815d05a7165ca0e5909) ) - ROM_LOAD( "tma1v-a.7t", 0x4000, 0x1000, CRC(5cbb92a5) SHA1(a78a378e6d3060143dc456e9c33a5068da648331) ) - ROM_LOAD( "tma1v-a.7u", 0x5000, 0x1000, CRC(13afb9ed) SHA1(b29dcd91cf5e639ee50b734afc7a3afce79634df) ) + ROM_LOAD( "tma1v-a.7m", 0x0000, 0x1000, CRC(186762f8) SHA1(711fdd37392656bdd5027e020d51d083ccd7c407) ) + ROM_LOAD( "tma1v-a.7n", 0x1000, 0x1000, CRC(e0e08bba) SHA1(315eba2c10d426c9c0bb4e36987bf8ebed7df9a0) ) + ROM_LOAD( "tma1v-a.7p", 0x2000, 0x1000, CRC(7b27c8c1) SHA1(3fb2613ce19e353fbcc77b6817927794fb35810f) ) + ROM_LOAD( "tma1v-a.7s", 0x3000, 0x1000, CRC(912ba80a) SHA1(351fb5b160216eb10e281815d05a7165ca0e5909) ) + ROM_LOAD( "tma1v-a.7t", 0x4000, 0x1000, CRC(5cbb92a5) SHA1(a78a378e6d3060143dc456e9c33a5068da648331) ) + ROM_LOAD( "tma1v-a.7u", 0x5000, 0x1000, CRC(13afb9ed) SHA1(b29dcd91cf5e639ee50b734afc7a3afce79634df) ) ROM_REGION( 0x0200, "proms", 0 ) - ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) + ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) ROM_REGION( 0x0020, "decoder_prom", 0 ) - ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ + ROM_LOAD( "tma1-c-5p.5p", 0x0000, 0x0020, CRC(58d86098) SHA1(d654995004b9052b12d3b682a2b39530e70030fc) ) /* BPROM was a TBP18S030N read as 82S123, main cpu memory map decoding prom */ ROM_END ROM_START( masao ) @@ -552,7 +541,7 @@ ROM_START( masao ) ROM_LOAD( "tma1v-a.7u", 0x5000, 0x1000, CRC(13afb9ed) SHA1(b29dcd91cf5e639ee50b734afc7a3afce79634df) ) ROM_REGION( 0x0200, "proms", 0 ) - ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) + ROM_LOAD( "tma1-c-4p.4p", 0x0000, 0x0200, CRC(afc9bd41) SHA1(90b739c4c7f24a88b6ac5ca29b06c032906a2801) ) ROM_END diff --git a/src/mame/nintendo/mario.h b/src/mame/nintendo/mario.h index 8888a7c2a3f..601f05d79ca 100644 --- a/src/mame/nintendo/mario.h +++ b/src/mame/nintendo/mario.h @@ -26,25 +26,25 @@ * 7C -> 100 => 256 - 124 = 132 ==> 264 Scanlines */ -#define MASTER_CLOCK XTAL(24'000'000) -#define PIXEL_CLOCK (MASTER_CLOCK / 4) -#define CLOCK_1H (MASTER_CLOCK / 8) -#define CLOCK_16H (CLOCK_1H / 16) -#define CLOCK_1VF ((CLOCK_16H) / 12 / 2) -#define CLOCK_2VF ((CLOCK_1VF) / 2) - -#define HTOTAL (384) -#define HBSTART (256) -#define HBEND (0) -#define VTOTAL (264) -#define VBSTART (240) -#define VBEND (16) - -#define Z80_MASTER_CLOCK XTAL(8'000'000) -#define Z80_CLOCK (Z80_MASTER_CLOCK / 2) /* verified on pcb */ - -#define I8035_MASTER_CLOCK XTAL(11'000'000) /* verified on pcb: 730Khz */ -#define I8035_CLOCK (I8035_MASTER_CLOCK) +#define MASTER_CLOCK XTAL(24'000'000) +#define PIXEL_CLOCK (MASTER_CLOCK / 4) +#define CLOCK_1H (MASTER_CLOCK / 8) +#define CLOCK_16H (CLOCK_1H / 16) +#define CLOCK_1VF ((CLOCK_16H) / 12 / 2) +#define CLOCK_2VF ((CLOCK_1VF) / 2) + +#define HTOTAL (384) +#define HBSTART (256) +#define HBEND (0) +#define VTOTAL (264) +#define VBSTART (240) +#define VBEND (16) + +#define Z80_MASTER_CLOCK XTAL(8'000'000) +#define Z80_CLOCK (Z80_MASTER_CLOCK / 2) /* verified on pcb */ + +#define MCU_MASTER_CLOCK XTAL(11'000'000) /* verified on pcb: 730Khz */ +#define MCU_CLOCK (MCU_MASTER_CLOCK) class mario_state : public driver_device { @@ -56,6 +56,7 @@ public: m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_z80dma(*this, "z80dma"), + m_soundrom(*this, "soundrom"), m_soundlatch(*this, "soundlatch"), m_soundlatch2(*this, "soundlatch2"), m_soundlatch3(*this, "soundlatch3"), @@ -69,8 +70,7 @@ public: m_audio_dac(*this, "snd_nl:dac"), #endif m_spriteram(*this, "spriteram"), - m_videoram(*this, "videoram"), - m_monitor(0) + m_videoram(*this, "videoram") { } void mario_base(machine_config &config); @@ -86,6 +86,7 @@ private: required_device m_gfxdecode; required_device m_palette; required_device m_z80dma; + optional_region_ptr m_soundrom; optional_device m_soundlatch; optional_device m_soundlatch2; optional_device m_soundlatch3; @@ -104,19 +105,18 @@ private: required_shared_ptr m_videoram; /* sound state */ - uint8_t m_last = 0; - uint8_t m_portT = 0; - const char *m_eabank = nullptr; + uint8_t m_last = 0; + uint8_t m_portT = 0; /* video state */ - uint8_t m_gfx_bank = 0; - uint8_t m_palette_bank = 0; - uint16_t m_gfx_scroll = 0; - uint8_t m_flip = 0; + uint8_t m_gfx_bank = 0; + uint8_t m_palette_bank = 0; + uint16_t m_gfx_scroll = 0; + uint8_t m_flip = 0; tilemap_t *m_bg_tilemap = nullptr; - int m_monitor; + int m_monitor = 0; - bool m_nmi_mask = false; + bool m_nmi_mask = false; void nmi_mask_w(int state); void coin_counter_1_w(int state); void coin_counter_2_w(int state); diff --git a/src/mame/nintendo/mario_a.cpp b/src/mame/nintendo/mario_a.cpp index 94bf6a06bc1..b7e0ff774f3 100644 --- a/src/mame/nintendo/mario_a.cpp +++ b/src/mame/nintendo/mario_a.cpp @@ -18,28 +18,19 @@ * ****************************************************************/ -#define RUN_VCO_VOLTAGE (0.0) /* 5 in schematics */ +#define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A)) +#define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A)) -#define USE_8039 (0) /* set to 1 to try 8039 hack */ +#define MCU_T_R(N) ((m_soundlatch2->read() >> (N)) & 1) +#define MCU_T_W_AH(N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(m_portT); } while (0) -#define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A)) -#define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A)) +#define MCU_P1_R() (m_soundlatch3->read()) +#define MCU_P2_R() (m_soundlatch4->read()) +#define MCU_P1_W(D) m_soundlatch3->write(D) +#define MCU_P2_W(D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(D); } while (0) -#define I8035_T_R(N) ((m_soundlatch2->read() >> (N)) & 1) -#define I8035_T_W_AH(N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(m_portT); } while (0) - -#define I8035_P1_R() (m_soundlatch3->read()) -#define I8035_P2_R() (m_soundlatch4->read()) -#define I8035_P1_W(D) m_soundlatch3->write(D) - -#if (USE_8039) -#define I8035_P2_W(D) do { m_soundlatch4->write(D); } while (0) -#else -#define I8035_P2_W(D) do { set_ea(((D) & 0x20) ? 0 : 1); m_soundlatch4->write(D); } while (0) -#endif - -#define I8035_P1_W_AH(B,D) I8035_P1_W(ACTIVEHIGH_PORT_BIT(I8035_P1_R(),B,(D))) -#define I8035_P2_W_AH(B,D) I8035_P2_W(ACTIVEHIGH_PORT_BIT(I8035_P2_R(),B,(D))) +#define MCU_P1_W_AH(B,D) MCU_P1_W(ACTIVEHIGH_PORT_BIT(MCU_P1_R(),B,(D))) +#define MCU_P2_W_AH(B,D) MCU_P2_W(ACTIVEHIGH_PORT_BIT(MCU_P2_R(),B,(D))) #if OLD_SOUND @@ -395,6 +386,7 @@ static DISCRETE_SOUND_START(mario_discrete) DISCRETE_SOUND_END #endif + /**************************************************************** * * EA / Banking @@ -403,10 +395,7 @@ DISCRETE_SOUND_END void mario_state::set_ea(int ea) { - //printf("ea: %d\n", ea); - //m_audiocpu->set_input_line(MCS48_INPUT_EA, (ea) ? ASSERT_LINE : CLEAR_LINE); - if (m_eabank != nullptr) - membank(m_eabank)->set_entry(ea); + m_audiocpu->set_input_line(MCS48_INPUT_EA, ea ? ASSERT_LINE : CLEAR_LINE); } /**************************************************************** @@ -417,27 +406,14 @@ void mario_state::set_ea(int ea) void mario_state::sound_start() { - uint8_t *SND = memregion("audiocpu")->base(); - -#if USE_8039 - SND[0x1001] = 0x01; -#endif - - m_eabank = nullptr; if (m_audiocpu->type() != Z80) { + uint8_t *SND = memregion("audiocpu")->base(); - m_eabank = "bank1"; - m_audiocpu->space(AS_PROGRAM).install_read_bank(0x000, 0x7ff, membank("bank1")); - membank("bank1")->configure_entry(0, &SND[0]); - membank("bank1")->configure_entry(1, &SND[0x1000]); - -#if !USE_8039 // Hack to bootstrap MCU program into external MB1 SND[0x0000] = 0xf5; SND[0x0001] = 0x04; SND[0x0002] = 0x00; -#endif } save_item(NAME(m_last)); @@ -446,17 +422,11 @@ void mario_state::sound_start() void mario_state::sound_reset() { -#if USE_8039 - set_ea(1); -#endif - /* FIXME: convert to latch8 */ m_soundlatch->clear_w(); if (m_soundlatch2) m_soundlatch2->clear_w(); if (m_soundlatch3) m_soundlatch3->clear_w(); if (m_soundlatch4) m_soundlatch4->clear_w(); - if (m_soundlatch3) I8035_P1_W(0x00); /* Input port */ - if (m_soundlatch4) I8035_P2_W(0xff); /* Port is in high impedance state after reset */ m_last = 0; } @@ -469,34 +439,32 @@ void mario_state::sound_reset() uint8_t mario_state::mario_sh_p1_r() { - return I8035_P1_R(); + return MCU_P1_R(); } uint8_t mario_state::mario_sh_p2_r() { - return I8035_P2_R() & 0xEF; /* Bit 4 connected to GND! */ + return MCU_P2_R() & 0xef; /* Bit 4 connected to GND! */ } int mario_state::mario_sh_t0_r() { - return I8035_T_R(0); + return MCU_T_R(0); } int mario_state::mario_sh_t1_r() { - return I8035_T_R(1); + return MCU_T_R(1); } uint8_t mario_state::mario_sh_tune_r(offs_t offset) { - uint8_t *SND = memregion("audiocpu")->base(); - uint16_t mask = memregion("audiocpu")->bytes()-1; - uint8_t p2 = I8035_P2_R(); + uint8_t p2 = MCU_P2_R(); if ((p2 >> 7) & 1) return m_soundlatch->read(); else - return (SND[(0x1000 + (p2 & 0x0f) * 256 + offset) & mask]); + return m_soundrom[(p2 & 0x0f) << 8 | offset]; } void mario_state::mario_sh_sound_w(uint8_t data) @@ -510,12 +478,12 @@ void mario_state::mario_sh_sound_w(uint8_t data) void mario_state::mario_sh_p1_w(uint8_t data) { - I8035_P1_W(data); + MCU_P1_W(data); } void mario_state::mario_sh_p2_w(uint8_t data) { - I8035_P2_W(data); + MCU_P2_W(data); } /**************************************************************** @@ -574,26 +542,26 @@ void mario_state::mario_sh3_w(offs_t offset, uint8_t data) m_audiocpu->set_input_line(0,CLEAR_LINE); break; case 1: /* get coin */ - I8035_T_W_AH(0,data & 1); + MCU_T_W_AH(0,data & 1); break; case 2: /* ice */ - I8035_T_W_AH(1, data & 1); + MCU_T_W_AH(1, data & 1); break; case 3: /* crab */ - I8035_P1_W_AH(0, data & 1); + MCU_P1_W_AH(0, data & 1); break; case 4: /* turtle */ - I8035_P1_W_AH(1, data & 1); + MCU_P1_W_AH(1, data & 1); break; case 5: /* fly */ - I8035_P1_W_AH(2, data & 1); + MCU_P1_W_AH(2, data & 1); break; case 6: /* coin */ - I8035_P1_W_AH(3, data & 1); + MCU_P1_W_AH(3, data & 1); break; case 7: /* skid */ #if OLD_SOUND - m_discrete->write(space, DS_SOUND7_INP, data & 1); + m_discrete->write(DS_SOUND7_INP, data & 1); #else m_audio_snd7->write((data & 1) ^ 1); #endif @@ -609,8 +577,7 @@ void mario_state::mario_sh3_w(offs_t offset, uint8_t data) void mario_state::mario_sound_map(address_map &map) { - map(0x0000, 0x07ff).bankr("bank1"); - map(0x0800, 0x0fff).rom(); + map(0x0000, 0x0fff).rom().region(m_soundrom, 0); } void mario_state::mario_sound_io_map(address_map &map) @@ -635,11 +602,7 @@ void mario_state::masao_sound_map(address_map &map) void mario_state::mario_audio(machine_config &config) { -#if USE_8039 - i8039_device &audiocpu(I8039(config, "audiocpu", I8035_CLOCK)); /* 730 kHz */ -#else - m58715_device &audiocpu(M58715(config, m_audiocpu, I8035_CLOCK)); /* 730 kHz */ -#endif + m58715_device &audiocpu(M58715(config, m_audiocpu, MCU_CLOCK)); /* 730 kHz */ audiocpu.set_addrmap(AS_PROGRAM, &mario_state::mario_sound_map); audiocpu.set_addrmap(AS_IO, &mario_state::mario_sound_io_map); audiocpu.p1_in_cb().set(FUNC(mario_state::mario_sh_p1_r)); -- cgit v1.2.3