diff --git a/src/mame/drivers/sage2.cpp b/src/mame/drivers/sage2.cpp index 1246d559bf6..645f624f9e3 100644 --- a/src/mame/drivers/sage2.cpp +++ b/src/mame/drivers/sage2.cpp @@ -28,45 +28,6 @@ #include "bus/rs232/rs232.h" #include "softlist.h" -//************************************************************************** -// MEMORY MANAGEMENT UNIT -//************************************************************************** - -//------------------------------------------------- -// read - -//------------------------------------------------- - -READ8_MEMBER( sage2_state::read ) -{ - uint8_t data = 0xff; - - if (m_reset || (offset >= 0xfe0000 && offset < 0xff4000)) - { - data = m_rom[offset & 0x1fff]; - } - else if (offset < 0x080000) - { - data = m_ram->pointer()[offset]; - } - - return data; -} - - -//------------------------------------------------- -// write - -//------------------------------------------------- - -WRITE8_MEMBER( sage2_state::write ) -{ - if (offset < 0x080000) - { - m_ram->pointer()[offset] = data; - } -} - - - //************************************************************************** // ADDRESS MAPS //************************************************************************** @@ -77,7 +38,6 @@ WRITE8_MEMBER( sage2_state::write ) static ADDRESS_MAP_START( sage2_mem, AS_PROGRAM, 16, sage2_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xfeffff) AM_READWRITE8(read, write, 0xffff) AM_RANGE(0xffc000, 0xffc007) AM_DEVREADWRITE8(I8253_1_TAG, pit8253_device, read, write, 0x00ff) AM_RANGE(0xffc010, 0xffc01f) AM_NOP //AM_DEVREADWRITE8(TMS9914_TAG, tms9914_device, read, write, 0x00ff) AM_RANGE(0xffc020, 0xffc027) AM_DEVREADWRITE8(I8255A_0_TAG, i8255_device, read, write, 0x00ff) // i8255, DIPs + Floppy ctrl port @@ -417,17 +377,27 @@ DEVICE_INPUT_DEFAULTS_END void sage2_state::machine_start() { - // find memory regions - m_rom = memregion(M68000_TAG)->base(); + address_space &program = m_maincpu->space(AS_PROGRAM); + program.install_rom(0x000000, 0x001fff, 0x07e000, m_rom->base()); // Avoid the 68000 reading from lalaland in its reset handler } - void sage2_state::machine_reset() { - m_reset = 1; + address_space &program = m_maincpu->space(AS_PROGRAM); + program.unmap_readwrite(0x000000, 0x07ffff); + program.install_rom(0x000000, 0x001fff, 0x07e000, m_rom->base()); + program.install_read_handler(0xfe0000, 0xfe3fff, read16_delegate(FUNC(sage2_state::rom_r), this)); + m_maincpu->reset(); } - +READ16_MEMBER(sage2_state::rom_r) +{ + address_space &program = m_maincpu->space(AS_PROGRAM); + program.unmap_readwrite(0x000000, 0x07ffff); + program.install_ram(0, m_ram->size()-1, m_ram->pointer()); + program.install_rom(0xfe0000, 0xfe1fff, 0x002000, m_rom->base()); + return program.read_word(0xfe0000 | (offset*2)); +} //************************************************************************** // MACHINE DRIVERS @@ -530,9 +500,9 @@ MACHINE_CONFIG_END //------------------------------------------------- ROM_START( sage2 ) - ROM_REGION( 0x2000, M68000_TAG, 0 ) - ROM_LOAD16_BYTE( "sage2.u18", 0x0000, 0x1000, CRC(ca9b312d) SHA1(99436a6d166aa5280c3b2d28355c4d20528fe48c) ) - ROM_LOAD16_BYTE( "sage2.u17", 0x0001, 0x1000, CRC(27e25045) SHA1(041cd9d4617473d089f31f18cbb375046c3b61bb) ) + ROM_REGION16_BE( 0x2000, M68000_TAG, 0 ) + ROM_LOAD16_BYTE( "sage2.u18", 0x0001, 0x1000, CRC(ca9b312d) SHA1(99436a6d166aa5280c3b2d28355c4d20528fe48c) ) + ROM_LOAD16_BYTE( "sage2.u17", 0x0000, 0x1000, CRC(27e25045) SHA1(041cd9d4617473d089f31f18cbb375046c3b61bb) ) ROM_END @@ -545,20 +515,8 @@ ROM_END // DRIVER_INIT( sage2 ) //------------------------------------------------- -DIRECT_UPDATE_MEMBER(sage2_state::sage2_direct_update_handler) -{ - if (m_reset && address >= 0xfe0000) - { - m_reset = 0; - } - - return address; -} - DRIVER_INIT_MEMBER(sage2_state,sage2) { - address_space &program = machine().device(M68000_TAG)->space(AS_PROGRAM); - program.set_direct_update_handler(direct_update_delegate(&sage2_state::sage2_direct_update_handler, this)); } diff --git a/src/mame/includes/sage2.h b/src/mame/includes/sage2.h index ee375c24748..cede7207e9d 100644 --- a/src/mame/includes/sage2.h +++ b/src/mame/includes/sage2.h @@ -36,12 +36,12 @@ public: m_usart1(*this, I8251_1_TAG), m_fdc(*this, UPD765_TAG), m_ram(*this, RAM_TAG), + m_rom(*this, M68000_TAG), m_floppy0(*this, UPD765_TAG ":0"), m_floppy1(*this, UPD765_TAG ":1"), m_floppy(nullptr), m_centronics(*this, CENTRONICS_TAG), m_ieee488(*this, IEEE488_TAG), - m_reset(1), m_fdc_int(0), m_fdie(0) { } @@ -52,6 +52,7 @@ public: required_device m_usart1; required_device m_fdc; required_device m_ram; + required_memory_region m_rom; required_device m_floppy0; required_device m_floppy1; floppy_image_device *m_floppy; @@ -63,8 +64,7 @@ public: void update_fdc_int(); - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); + DECLARE_READ16_MEMBER(rom_r); DECLARE_WRITE_LINE_MEMBER( br1_w ); DECLARE_WRITE_LINE_MEMBER( br2_w ); DECLARE_WRITE8_MEMBER( ppi0_pc_w ); @@ -75,9 +75,6 @@ public: DECLARE_WRITE_LINE_MEMBER( fdc_irq ); - const uint8_t *m_rom; - int m_reset; - // floppy state int m_fdc_int; int m_fdie;