diff --git a/src/mame/drivers/special.cpp b/src/mame/drivers/special.cpp index 9940626739d..98e0aa91a79 100644 --- a/src/mame/drivers/special.cpp +++ b/src/mame/drivers/special.cpp @@ -21,8 +21,8 @@ /* Address maps */ void special_state::specialist_mem(address_map &map) { - map(0x0000, 0x2fff).bankrw("bank1"); // First bank - map(0x3000, 0x8fff).ram(); // RAM + map(0x0000, 0x3fff).bankrw("bank1"); // First bank, hacky, upon reset c000-ffff area should be mirrored at 0000, 4000 and 8000 + map(0x4000, 0x8fff).ram(); // RAM map(0x9000, 0xbfff).ram().share("videoram"); // Video RAM map(0xc000, 0xefff).rom(); // System ROM map(0xf800, 0xf803).mirror(0x7fc).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)); @@ -30,8 +30,8 @@ void special_state::specialist_mem(address_map &map) void special_state::specialp_mem(address_map &map) { - map(0x0000, 0x2fff).bankrw("bank1"); // First bank - map(0x3000, 0x7fff).ram(); // RAM + map(0x0000, 0x3fff).bankrw("bank1"); // First bank + map(0x4000, 0x7fff).ram(); // RAM map(0x8000, 0xbfff).ram().share("videoram"); // Video RAM map(0xc000, 0xefff).rom(); // System ROM map(0xf800, 0xf803).mirror(0x7fc).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write)); @@ -370,8 +370,6 @@ void special_state::special(machine_config &config) I8080(config, m_maincpu, 2000000); m_maincpu->set_addrmap(AS_PROGRAM, &special_state::specialist_mem); - MCFG_MACHINE_RESET_OVERRIDE(special_state, special ) - /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(50); @@ -463,7 +461,7 @@ void special_state::specimx(machine_config &config) m_ppi->in_pb_callback().set(FUNC(special_state::specimx_8255_portb_r)); m_ppi->out_pb_callback().set(FUNC(special_state::specialist_8255_portb_w)); m_ppi->in_pc_callback().set(FUNC(special_state::specialist_8255_portc_r)); - m_ppi->out_pc_callback().set(FUNC(special_state::specialist_8255_portc_w)); + m_ppi->out_pc_callback().set(FUNC(special_state::specialistmx_8255_portc_w)); FD1793(config, m_fdc, 8_MHz_XTAL / 8); m_fdc->drq_wr_callback().set(FUNC(special_state::fdc_drq)); @@ -514,7 +512,7 @@ void special_state::erik(machine_config &config) m_ppi->in_pb_callback().set(FUNC(special_state::specialist_8255_portb_r)); m_ppi->out_pb_callback().set(FUNC(special_state::specialist_8255_portb_w)); m_ppi->in_pc_callback().set(FUNC(special_state::specialist_8255_portc_r)); - m_ppi->out_pc_callback().set(FUNC(special_state::specialist_8255_portc_w)); + m_ppi->out_pc_callback().set(FUNC(special_state::specialistmx_8255_portc_w)); FD1793(config, m_fdc, 8_MHz_XTAL / 8); m_fdc->drq_wr_callback().set(FUNC(special_state::fdc_drq)); diff --git a/src/mame/includes/special.h b/src/mame/includes/special.h index 2f37552d329..26b9e206817 100644 --- a/src/mame/includes/special.h +++ b/src/mame/includes/special.h @@ -66,7 +66,6 @@ protected: private: enum { - TIMER_RESET, TIMER_PIT8253_GATES }; @@ -89,8 +88,8 @@ private: void specialist_8255_porta_w(uint8_t data); void specialist_8255_portb_w(uint8_t data); void specialist_8255_portc_w(uint8_t data); + void specialistmx_8255_portc_w(uint8_t data); - DECLARE_MACHINE_RESET(special); DECLARE_MACHINE_RESET(erik); void erik_palette(palette_device &palette) const; DECLARE_MACHINE_START(specimx); diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp index a09d7d31668..fa2fa90499e 100644 --- a/src/mame/machine/special.cpp +++ b/src/mame/machine/special.cpp @@ -20,7 +20,7 @@ void special_state::init_special() { /* set initialy ROM to be visible on first bank */ uint8_t *RAM = m_region_maincpu->base(); - memset(RAM,0x0000,0x3000); // make first page empty by default + memset(RAM,0x0000,0x4000); // make first page empty by default m_bank1->configure_entries(1, 2, RAM, 0x0000); m_bank1->configure_entries(0, 2, RAM, 0xc000); } @@ -109,15 +109,23 @@ void special_state::specialist_8255_portc_w(uint8_t data) m_cassette->output(BIT(data, 7) ? 1 : -1); m_dac->write(BIT(data, 5)); //beeper + + m_bank1->set_entry(BIT(data, 4)); +} + +void special_state::specialistmx_8255_portc_w(uint8_t data) +{ + m_specialist_8255_portc = data; + + m_cassette->output(BIT(data, 7) ? 1 : -1); + + m_dac->write(BIT(data, 5)); //beeper } void special_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch (id) { - case TIMER_RESET: - m_bank1->set_entry(0); - break; case TIMER_PIT8253_GATES: m_pit->write_gate0(0); m_pit->write_gate1(0); @@ -129,13 +137,6 @@ void special_state::device_timer(emu_timer &timer, device_timer_id id, int param } -MACHINE_RESET_MEMBER(special_state,special) -{ - timer_set(attotime::from_usec(10), TIMER_RESET); - m_bank1->set_entry(1); -} - - /* Specialist MX */