diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/fmtowns.cpp | 141 | ||||
-rw-r--r-- | src/mame/includes/fmtowns.h | 29 |
2 files changed, 112 insertions, 58 deletions
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index 5d70f477ccd..5b57ecc183a 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -492,12 +492,12 @@ READ8_MEMBER(towns_state::towns_floppy_r) { case 1: ret |= 0x0c; - if(m_flop[0]->get_device()->exists()) + if(m_flop[0]->get_device() && m_flop[0]->get_device()->exists()) ret |= 0x03; break; case 2: ret |= 0x0c; - if(m_flop[1]->get_device()->exists()) + if(m_flop[1]->get_device() && m_flop[1]->get_device()->exists()) ret |= 0x03; break; case 3: @@ -510,9 +510,11 @@ READ8_MEMBER(towns_state::towns_floppy_r) case 0x0e: // DRVCHG logerror("FDC: read from offset 0x0e\n"); if(m_towns_selected_drive == 1) - return m_flop[0]->get_device()->dskchg_r(); + if (m_flop[0]->get_device()) + return m_flop[0]->get_device()->dskchg_r(); if(m_towns_selected_drive == 2) - return m_flop[1]->get_device()->dskchg_r(); + if (m_flop[1]->get_device()) + return m_flop[1]->get_device()->dskchg_r(); return 0x00; default: logerror("FDC: read from invalid or unimplemented register %02x\n",offset); @@ -2181,7 +2183,6 @@ void towns_state::towns_mem(address_map &map) map(0x000da000, 0x000effff).ram(); //READWRITE(SMH_BANK(11),SMH_BANK(11)) map(0x000f0000, 0x000f7fff).ram(); //READWRITE(SMH_BANK(12),SMH_BANK(12)) map(0x000f8000, 0x000fffff).bankr("bank_f8000_r").bankw("bank_f8000_w"); -// AM_RANGE(0x00100000, 0x005fffff) AM_RAM // some extra RAM map(0x80000000, 0x8007ffff).rw(FUNC(towns_state::towns_gfx_high_r), FUNC(towns_state::towns_gfx_high_w)).mirror(0x80000); // VRAM map(0x80100000, 0x8017ffff).rw(FUNC(towns_state::towns_gfx_packed_r), FUNC(towns_state::towns_gfx_packed_w)).mirror(0x80000); // VRAM map(0x81000000, 0x8101ffff).rw(FUNC(towns_state::towns_spriteram_r), FUNC(towns_state::towns_spriteram_w)); // Sprite RAM @@ -2209,11 +2210,10 @@ void towns_state::marty_mem(address_map &map) map(0x000da000, 0x000effff).ram(); //READWRITE(SMH_BANK(11),SMH_BANK(11)) map(0x000f0000, 0x000f7fff).ram(); //READWRITE(SMH_BANK(12),SMH_BANK(12)) map(0x000f8000, 0x000fffff).bankr("bank_f8000_r").bankw("bank_f8000_w"); -// AM_RANGE(0x00100000, 0x005fffff) AM_RAM // some extra RAM - the Marty has 6MB RAM (not upgradable) map(0x00600000, 0x0067ffff).rom().region("user", 0x000000); // OS map(0x00680000, 0x0087ffff).rom().region("user", 0x280000); // EX ROM map(0x00a00000, 0x00a7ffff).rw(FUNC(towns_state::towns_gfx_high_r), FUNC(towns_state::towns_gfx_high_w)).mirror(0x180000); // VRAM - map(0x00b00000, 0x00b7ffff).rom().region("user", 0x180000); // FONT + map(0x00b00000, 0x00b7ffff).rw(FUNC(towns_state::towns_gfx_packed_r), FUNC(towns_state::towns_gfx_packed_w)).mirror(0x80000); // VRAM map(0x00c00000, 0x00c1ffff).rw(FUNC(towns_state::towns_spriteram_r), FUNC(towns_state::towns_spriteram_w)); // Sprite RAM map(0x00d00000, 0x00dfffff).rw(m_icmemcard, FUNC(fmt_icmem_device::mem_read), FUNC(fmt_icmem_device::mem_write)); map(0x00e80000, 0x00efffff).rom().region("user", 0x100000); // DIC ROM @@ -2237,7 +2237,7 @@ void towns_state::ux_mem(address_map &map) map(0x000f8000, 0x000fffff).bankr("bank_f8000_r").bankw("bank_f8000_w"); // AM_RANGE(0x00680000, 0x0087ffff) AM_ROM AM_REGION("user",0x280000) // EX ROM map(0x00a00000, 0x00a7ffff).rw(FUNC(towns_state::towns_gfx_high_r), FUNC(towns_state::towns_gfx_high_w)).mirror(0x180000); // VRAM - map(0x00b00000, 0x00b7ffff).rom().region("user", 0x180000); // FONT + map(0x00b00000, 0x00b7ffff).rw(FUNC(towns_state::towns_gfx_packed_r), FUNC(towns_state::towns_gfx_packed_w)).mirror(0x80000); // VRAM map(0x00c00000, 0x00c1ffff).rw(FUNC(towns_state::towns_spriteram_r), FUNC(towns_state::towns_spriteram_w)); // Sprite RAM map(0x00d00000, 0x00dfffff).rw(m_icmemcard, FUNC(fmt_icmem_device::mem_read), FUNC(fmt_icmem_device::mem_write)); map(0x00e00000, 0x00e7ffff).rom().region("user", 0x000000); // OS @@ -2296,8 +2296,6 @@ void towns_state::towns_io(address_map &map) map(0x0600, 0x0607).rw(FUNC(towns_state::towns_keyboard_r), FUNC(towns_state::towns_keyboard_w)).umask32(0x00ff00ff); // RS-232C interface map(0x0a00, 0x0a0b).rw(FUNC(towns_state::towns_serial_r), FUNC(towns_state::towns_serial_w)).umask32(0x00ff00ff); - // SCSI controller - map(0x0c30, 0x0c37).rw(m_scsi, FUNC(fmscsi_device::fmscsi_r), FUNC(fmscsi_device::fmscsi_w)).umask32(0x00ff00ff); // CMOS map(0x3000, 0x4fff).rw(FUNC(towns_state::towns_cmos_r), FUNC(towns_state::towns_cmos_w)).umask32(0x00ff00ff); // Something (MS-DOS wants this 0x41ff to be 1) @@ -2307,6 +2305,13 @@ void towns_state::towns_io(address_map &map) map(0xff80, 0xffff).rw(FUNC(towns_state::towns_video_cff80_r), FUNC(towns_state::towns_video_cff80_w)); } +void towns_state::towns2_io(address_map &map) +{ + // For FM Towns II models with integrated SCSI controller + towns_io(map); + map(0x0c30, 0x0c37).rw(m_scsi, FUNC(fmscsi_device::fmscsi_r), FUNC(fmscsi_device::fmscsi_w)).umask32(0x00ff00ff); +} + void towns_state::towns16_io(address_map &map) { // for the 386SX based systems // System ports @@ -2355,8 +2360,6 @@ void towns_state::towns16_io(address_map &map) map(0x0600, 0x0607).rw(FUNC(towns_state::towns_keyboard_r), FUNC(towns_state::towns_keyboard_w)).umask16(0x00ff); // RS-232C interface map(0x0a00, 0x0a0b).rw(FUNC(towns_state::towns_serial_r), FUNC(towns_state::towns_serial_w)).umask16(0x00ff); - // SCSI controller - map(0x0c30, 0x0c37).rw(m_scsi, FUNC(fmscsi_device::fmscsi_r), FUNC(fmscsi_device::fmscsi_w)).umask16(0x00ff); // CMOS map(0x3000, 0x4fff).rw(FUNC(towns_state::towns_cmos_r), FUNC(towns_state::towns_cmos_w)).umask16(0x00ff); // Something (MS-DOS wants this 0x41ff to be 1) @@ -2366,6 +2369,13 @@ void towns_state::towns16_io(address_map &map) map(0xff80, 0xffff).rw(FUNC(towns_state::towns_video_cff80_r), FUNC(towns_state::towns_video_cff80_w)); } +void towns_state::townsux_io(address_map &map) +{ + // For FM Towns II UX + towns16_io(map); + map(0x0c30, 0x0c37).rw(m_scsi, FUNC(fmscsi_device::fmscsi_r), FUNC(fmscsi_device::fmscsi_w)).umask16(0x00ff); +} + void towns_state::pcm_mem(address_map &map) { map.unmap_value_high(); @@ -2652,7 +2662,8 @@ void towns_state::driver_start() save_pointer(m_video.towns_crtc_reg,"CRTC registers",32); save_pointer(m_video.towns_video_reg,"Video registers",2); - m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,nullptr); + if (m_ram->size() > 0x100000) + m_maincpu->space(AS_PROGRAM).install_ram(0x100000,m_ram->size()-1,nullptr); } void marty_state::driver_start() @@ -2664,8 +2675,10 @@ void marty_state::driver_start() void towns_state::machine_start() { - m_flop[0]->get_device()->set_rpm(360); - m_flop[1]->get_device()->set_rpm(360); + if (m_flop[0]->get_device()) + m_flop[0]->get_device()->set_rpm(360); + if (m_flop[1]->get_device()) + m_flop[1]->get_device()->set_rpm(360); } void towns_state::machine_reset() @@ -2822,34 +2835,18 @@ void towns_state::towns_base(machine_config &config) CDROM(config, m_cdrom, 0).set_interface("fmt_cdrom"); SOFTWARE_LIST(config, "cd_list").set_original("fmtowns_cd"); - scsi_port_device &scsi(SCSI_PORT(config, "scsi", 0)); - scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0)); - scsi.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1)); - scsi.set_slot_device(3, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2)); - scsi.set_slot_device(4, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3)); - scsi.set_slot_device(5, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4)); - - FMSCSI(config, m_scsi, 0); - m_scsi->set_scsi_port("scsi"); - m_scsi->irq_handler().set(FUNC(towns_state::towns_scsi_irq)); - m_scsi->drq_handler().set(FUNC(towns_state::towns_scsi_drq)); - UPD71071(config, m_dma[0], 0); m_dma[0]->set_cpu_tag("maincpu"); m_dma[0]->set_clock(4000000); m_dma[0]->dma_read_callback<0>().set(FUNC(towns_state::towns_fdc_dma_r)); - m_dma[0]->dma_read_callback<1>().set(FUNC(towns_state::towns_scsi_dma_r)); m_dma[0]->dma_read_callback<3>().set(FUNC(towns_state::towns_state::towns_cdrom_dma_r)); m_dma[0]->dma_write_callback<0>().set(FUNC(towns_state::towns_fdc_dma_w)); - m_dma[0]->dma_write_callback<1>().set(FUNC(towns_state::towns_scsi_dma_w)); UPD71071(config, m_dma[1], 0); m_dma[1]->set_cpu_tag("maincpu"); m_dma[1]->set_clock(4000000); m_dma[1]->dma_read_callback<0>().set(FUNC(towns_state::towns_fdc_dma_r)); - m_dma[1]->dma_read_callback<1>().set(FUNC(towns_state::towns_scsi_dma_r)); m_dma[1]->dma_read_callback<3>().set(FUNC(towns_state::towns_state::towns_cdrom_dma_r)); m_dma[1]->dma_write_callback<0>().set(FUNC(towns_state::towns_fdc_dma_w)); - m_dma[1]->dma_write_callback<1>().set(FUNC(towns_state::towns_scsi_dma_w)); //MCFG_VIDEO_START_OVERRIDE(towns_state,towns) @@ -2868,8 +2865,11 @@ void towns_state::towns_base(machine_config &config) FMT_ICMEM(config, m_icmemcard, 0); - /* internal ram */ - RAM(config, m_ram).set_default_size("6M").set_extra_options("2M,4M,8M,16M,32M,64M,96M"); + /* + First-generation models: 1 MB onboard, 3 SIMM slots with 1 or 2 MB each, except slot 1 (limited to 1 MB). + Model 2 comes with a 1 MB SIMM preinstalled on slot 1, Model 1 doesn't. + */ + RAM(config, m_ram).set_default_size("2M").set_extra_options("1M,3M,4M,5M,6M"); MSM58321(config, m_rtc, 32768_Hz_XTAL); m_rtc->d0_handler().set(FUNC(towns_state::rtc_d0_w)); @@ -2893,11 +2893,29 @@ void towns16_state::townsux(machine_config &config) I386SX(config.replace(), m_maincpu, 16000000); m_maincpu->set_addrmap(AS_PROGRAM, &towns16_state::ux_mem); - m_maincpu->set_addrmap(AS_IO, &towns16_state::towns16_io); + m_maincpu->set_addrmap(AS_IO, &towns16_state::townsux_io); m_maincpu->set_vblank_int("screen", FUNC(towns_state::towns_vsync_irq)); m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); - m_ram->set_default_size("2M").set_extra_options("10M"); + scsi_port_device &scsi(SCSI_PORT(config, "scsi", 0)); + scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0)); + scsi.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1)); + scsi.set_slot_device(3, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2)); + scsi.set_slot_device(4, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3)); + scsi.set_slot_device(5, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4)); + + FMSCSI(config, m_scsi, 0); + m_scsi->set_scsi_port("scsi"); + m_scsi->irq_handler().set(FUNC(towns16_state::towns_scsi_irq)); + m_scsi->drq_handler().set(FUNC(towns16_state::towns_scsi_drq)); + + m_dma[0]->dma_read_callback<1>().set(FUNC(towns16_state::towns_scsi_dma_r)); + m_dma[0]->dma_write_callback<1>().set(FUNC(towns16_state::towns_scsi_dma_w)); + m_dma[1]->dma_read_callback<1>().set(FUNC(towns16_state::towns_scsi_dma_r)); + m_dma[1]->dma_write_callback<1>().set(FUNC(towns16_state::towns_scsi_dma_w)); + + // 2 MB onboard, one SIMM slot with 2-8 MB + m_ram->set_default_size("2M").set_extra_options("4M,6M,10M"); NVRAM(config, "nvram16", nvram_device::DEFAULT_ALL_0); } @@ -2906,37 +2924,65 @@ void towns_state::townssj(machine_config &config) { towns(config); - PENTIUM(config.replace(), m_maincpu, 66000000); + I486(config.replace(), m_maincpu, 66000000); m_maincpu->set_addrmap(AS_PROGRAM, &towns_state::towns_mem); - m_maincpu->set_addrmap(AS_IO, &towns_state::towns_io); + m_maincpu->set_addrmap(AS_IO, &towns_state::towns2_io); m_maincpu->set_vblank_int("screen", FUNC(towns_state::towns_vsync_irq)); m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); + + scsi_port_device &scsi(SCSI_PORT(config, "scsi", 0)); + scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0)); + scsi.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1)); + scsi.set_slot_device(3, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2)); + scsi.set_slot_device(4, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3)); + scsi.set_slot_device(5, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4)); - m_ram->set_default_size("8M").set_extra_options("40M,72M"); + FMSCSI(config, m_scsi, 0); + m_scsi->set_scsi_port("scsi"); + m_scsi->irq_handler().set(FUNC(towns_state::towns_scsi_irq)); + m_scsi->drq_handler().set(FUNC(towns_state::towns_scsi_drq)); + + m_dma[0]->dma_read_callback<1>().set(FUNC(towns_state::towns_scsi_dma_r)); + m_dma[0]->dma_write_callback<1>().set(FUNC(towns_state::towns_scsi_dma_w)); + m_dma[1]->dma_read_callback<1>().set(FUNC(towns_state::towns_scsi_dma_r)); + m_dma[1]->dma_write_callback<1>().set(FUNC(towns_state::towns_scsi_dma_w)); + + // 4 MB (SJ2/SJ2A) or 8 MB (SJ26/SJ53) onboard, 2 SIMM slots with 4-32 MB each + m_ram->set_default_size("8M").set_extra_options("4M,12M,16M,20M,24M,28M,32M,36M,40M,44M,48M,52M,56M,68M,72M"); } void towns_state::townshr(machine_config &config) { - towns(config); + townssj(config); I486(config.replace(), m_maincpu, 20000000); m_maincpu->set_addrmap(AS_PROGRAM, &towns_state::towns_mem); - m_maincpu->set_addrmap(AS_IO, &towns_state::towns_io); + m_maincpu->set_addrmap(AS_IO, &towns_state::towns2_io); m_maincpu->set_vblank_int("screen", FUNC(towns_state::towns_vsync_irq)); m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); - m_ram->set_default_size("4M").set_extra_options("12M,20M,28M"); + // 4 MB onboard, 3 SIMM slots with 2-8 MB each + m_ram->set_default_size("4M").set_extra_options("6M,8M,10M,12M,14M,16M,18M,20M,22M,24M,28M"); +} + +void towns_state::townsmx(machine_config &config) +{ + townssj(config); + + // 4 MB onboard, 3 SIMM slots with 2-32 MB each, MX170W/MX340W models come with a 4 MB SIMM preinstalled + m_ram->set_default_size("8M").set_extra_options("4M,6M,8M,10M,12M,14M,16M,18M,20M,22M,24M,26M,28M,30M,32M,36M,38M,40M,42M,44M,46M,48M,52M,53M,54M,56M,60M,68M,70M,72M,76M,84M,100M"); } void towns_state::townsftv(machine_config &config) { - towns(config); + townssj(config); I486(config.replace(), m_maincpu, 33000000); m_maincpu->set_addrmap(AS_PROGRAM, &towns_state::towns_mem); - m_maincpu->set_addrmap(AS_IO, &towns_state::towns_io); + m_maincpu->set_addrmap(AS_IO, &towns_state::towns2_io); m_maincpu->set_vblank_int("screen", FUNC(towns_state::towns_vsync_irq)); m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); - m_ram->set_default_size("6M").set_extra_options("32M,68M"); + // 4 MB onboard, 2 SIMM slots with 2-32 MB each, one of them with a 2 MB SIMM preinstalled + m_ram->set_default_size("6M").set_extra_options("4M,8M,10M,12M,14M,16M,20M,22M,24M,28M,36M,38M,40M,44M,52M,68M"); } void marty_state::marty(machine_config &config) @@ -2948,8 +2994,11 @@ void marty_state::marty(machine_config &config) m_maincpu->set_addrmap(AS_IO, &marty_state::towns16_io); m_maincpu->set_vblank_int("screen", FUNC(towns_state::towns_vsync_irq)); m_maincpu->set_irq_acknowledge_callback("pic8259_master", FUNC(pic8259_device::inta_cb)); + + FLOPPY_CONNECTOR(config.replace(), m_flop[1], towns_floppies, nullptr, towns_state::floppy_formats); - m_ram->set_default_size("6M"); + // 2 MB onboard, expandable to 4 MB with a Marty-only expansion card + m_ram->set_default_size("2M").set_extra_options("4M"); NVRAM(config, "nvram16", nvram_device::DEFAULT_ALL_0); } @@ -3083,7 +3132,7 @@ COMP( 1989, fmtowns, 0, 0, towns, towns, towns_state, empty_ COMP( 1989, fmtownsa, fmtowns, 0, towns, towns, towns_state, empty_init, "Fujitsu", "FM-Towns (alternate)", MACHINE_NOT_WORKING) COMP( 1991, fmtownsux, fmtowns, 0, townsux, towns, towns16_state, empty_init, "Fujitsu", "FM-Towns II UX", MACHINE_NOT_WORKING) COMP( 1992, fmtownshr, fmtowns, 0, townshr, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II HR", MACHINE_NOT_WORKING) -COMP( 1993, fmtownsmx, fmtowns, 0, townshr, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II MX", MACHINE_NOT_WORKING) +COMP( 1993, fmtownsmx, fmtowns, 0, townsmx, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II MX", MACHINE_NOT_WORKING) COMP( 1994, fmtownsftv, fmtowns, 0, townsftv, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II FreshTV", MACHINE_NOT_WORKING) COMP( 19??, fmtownssj, fmtowns, 0, townssj, towns, towns_state, empty_init, "Fujitsu", "FM-Towns II SJ", MACHINE_NOT_WORKING) CONS( 1993, fmtmarty, 0, 0, marty, marty, marty_state, empty_init, "Fujitsu", "FM-Towns Marty", MACHINE_NOT_WORKING) diff --git a/src/mame/includes/fmtowns.h b/src/mame/includes/fmtowns.h index 3989d750b5a..021a9072bdd 100644 --- a/src/mame/includes/fmtowns.h +++ b/src/mame/includes/fmtowns.h @@ -93,15 +93,16 @@ class towns_state : public driver_device : driver_device(mconfig, type, tag) , m_ram(*this, RAM_TAG) , m_maincpu(*this, "maincpu") + , m_dma(*this, "dma_%u", 1U) + , m_scsi(*this, "fmscsi") + , m_flop(*this, "fdc:%u", 0U) , m_speaker(*this, "speaker") , m_pic_master(*this, "pic8259_master") , m_pic_slave(*this, "pic8259_slave") , m_pit(*this, "pit") - , m_dma(*this, "dma_%u", 1U) , m_palette(*this, "palette256") , m_palette16(*this, "palette16_%u", 0U) , m_fdc(*this, "fdc") - , m_flop(*this, "fdc:%u", 0U) , m_icmemcard(*this, "icmemcard") , m_i8251(*this, "i8251") , m_rs232(*this, "rs232c") @@ -110,7 +111,6 @@ class towns_state : public driver_device , m_dma_1(*this, "dma_1") , m_cdrom(*this, "cdrom") , m_cdda(*this, "cdda") - , m_scsi(*this, "fmscsi") , m_bank_cb000_r(*this, "bank_cb000_r") , m_bank_cb000_w(*this, "bank_cb000_w") , m_bank_f8000_r(*this, "bank_f8000_r") @@ -138,10 +138,11 @@ class towns_state : public driver_device void towns(machine_config &config); void townsftv(machine_config &config); void townshr(machine_config &config); + void townsmx(machine_config &config); void townssj(machine_config &config); INTERRUPT_GEN_MEMBER(towns_vsync_irq); - + protected: uint16_t m_towns_machine_id; // default is 0x0101 @@ -149,6 +150,8 @@ protected: void pcm_mem(address_map &map); void towns16_io(address_map &map); void towns_io(address_map &map); + void towns2_io(address_map &map); + void townsux_io(address_map &map); void towns_mem(address_map &map); void ux_mem(address_map &map); @@ -156,6 +159,16 @@ protected: required_device<ram_device> m_ram; required_device<cpu_device> m_maincpu; + + required_device_array<upd71071_device, 2> m_dma; + optional_device<fmscsi_device> m_scsi; + required_device_array<floppy_connector, 2> m_flop; + DECLARE_FLOPPY_FORMATS(floppy_formats); + + DECLARE_WRITE_LINE_MEMBER(towns_scsi_irq); + DECLARE_WRITE_LINE_MEMBER(towns_scsi_drq); + DECLARE_READ16_MEMBER(towns_scsi_dma_r); + DECLARE_WRITE16_MEMBER(towns_scsi_dma_w); private: /* devices */ @@ -163,11 +176,9 @@ private: required_device<pic8259_device> m_pic_master; required_device<pic8259_device> m_pic_slave; required_device<pit8253_device> m_pit; - required_device_array<upd71071_device, 2> m_dma; required_device<palette_device> m_palette; required_device_array<palette_device, 2> m_palette16; required_device<mb8877_device> m_fdc; - required_device_array<floppy_connector, 2> m_flop; required_device<fmt_icmem_device> m_icmemcard; required_device<i8251_device> m_i8251; required_device<rs232_port_device> m_rs232; @@ -176,7 +187,6 @@ private: required_device<upd71071_device> m_dma_1; required_device<cdrom_image_device> m_cdrom; required_device<cdda_device> m_cdda; - required_device<fmscsi_device> m_scsi; required_memory_bank m_bank_cb000_r; required_memory_bank m_bank_cb000_w; @@ -400,14 +410,11 @@ private: TIMER_CALLBACK_MEMBER(towns_cdrom_read_byte); TIMER_CALLBACK_MEMBER(towns_sprite_done); TIMER_CALLBACK_MEMBER(towns_vblank_end); - DECLARE_WRITE_LINE_MEMBER(towns_scsi_irq); - DECLARE_WRITE_LINE_MEMBER(towns_scsi_drq); DECLARE_WRITE_LINE_MEMBER(towns_pit_out0_changed); DECLARE_WRITE_LINE_MEMBER(towns_pit_out1_changed); DECLARE_WRITE_LINE_MEMBER(pit2_out1_changed); DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_WRITE_LINE_MEMBER(towns_fm_irq); - DECLARE_FLOPPY_FORMATS(floppy_formats); void towns_crtc_refresh_mode(); void towns_update_kanji_offset(); void towns_update_palette(); @@ -428,8 +435,6 @@ private: void towns_cdrom_set_irq(int line,int state); uint8_t towns_cd_get_track(); DECLARE_READ16_MEMBER(towns_cdrom_dma_r); - DECLARE_READ16_MEMBER(towns_scsi_dma_r); - DECLARE_WRITE16_MEMBER(towns_scsi_dma_w); }; class towns16_state : public towns_state |