summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/fmtowns.cpp141
-rw-r--r--src/mame/includes/fmtowns.h29
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