summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/skeleton/aws.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/skeleton/aws.cpp')
-rw-r--r--src/mame/skeleton/aws.cpp143
1 files changed, 122 insertions, 21 deletions
diff --git a/src/mame/skeleton/aws.cpp b/src/mame/skeleton/aws.cpp
index e3b31dc502b..6b1f526eda1 100644
--- a/src/mame/skeleton/aws.cpp
+++ b/src/mame/skeleton/aws.cpp
@@ -14,6 +14,8 @@
#include "video/i8275.h"
#include "machine/z80sio.h"
#include "cpu/i86/i86.h"
+#include "machine/clock.h"
+#include "aws_kb.h"
#include "screen.h"
@@ -26,33 +28,43 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_dmac(*this, "dmac"),
- m_pic(*this, "pic"),
m_pit(*this, "pit"),
- m_fdc(*this, "fdc"),
m_crtc(*this, "crtc"),
- m_serial1(*this, "serial1"),
- //m_serial2(*this, "serial2")
- m_fontrom(*this, "fontrom")
+ m_serial(*this, "cpu_serial"),
+ m_clock(*this, "serial_clock"),
+ m_fontrom(*this, "fontrom"),
+ m_pic(*this, "pic"),
+ m_fdc(*this, "fdc"),
+ m_fdc_serial(*this, "fdc_serial"),
+ m_fdc_pit(*this, "fdc_pit")
{}
- void aws(machine_config &config);
+ void aws200(machine_config &config);
+ void aws220(machine_config &config);
+ void aws_base(machine_config &config);
+ void fdc_board(machine_config &config);
protected:
void aws_mem(address_map &map);
void aws_io(address_map &map);
+ void aws220_mem(address_map &map);
+ void aws220_io(address_map &map);
private:
required_device<i8086_cpu_device> m_maincpu;
required_device<i8257_device> m_dmac;
- required_device<pic8259_device> m_pic;
required_device<pit8253_device> m_pit;
- required_device<i8272a_device> m_fdc;
required_device<i8275_device> m_crtc;
- required_device<upd7201_device> m_serial1; // Cluster networking and Keyboard
-// required_device<upd7201_device> m_serial2; // RS-232C ports
-
+ required_device<upd7201_device> m_serial; // Cluster networking and Keyboard
+ required_device<clock_device> m_clock;
required_region_ptr<u8> m_fontrom;
+ // FDC board
+ optional_device<pic8259_device> m_pic;
+ optional_device<i8272a_device> m_fdc;
+ optional_device<upd7201_device> m_fdc_serial; // RS-232C ports
+ optional_device<pit8253_device> m_fdc_pit; // RS-232 channel timing, INT5 timing
+
void pit_out0_w(int state);
void pit_out1_w(int state);
void pit_out2_w(int state);
@@ -73,7 +85,8 @@ void aws_state::pit_out1_w(int state)
void aws_state::pit_out2_w(int state)
{
- m_serial1->dcdb_w(state);
+ m_serial->dcdb_w(state);
+ m_serial->txcb_w(state);
}
I8275_DRAW_CHARACTER_MEMBER(aws_state::display_pixels)
@@ -110,21 +123,34 @@ INPUT_PORTS_END
void aws_state::aws_mem(address_map &map)
{
+ map.unmap_value_high();
map(0x00000, 0x7ffff).ram();
map(0xff000, 0xfffff).rom().region("bios", 0);
}
+void aws_state::aws220_mem(address_map &map)
+{
+ aws_mem(map);
+ map(0xbf000, 0xbffff).rom().region("fdcrom", 0);
+}
+
void aws_state::aws_io(address_map &map)
{
map(0x0000, 0x000f).rw(m_dmac, FUNC(i8257_device::read), FUNC(i8257_device::write));
map(0x0020, 0x0023).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write)).umask16(0x00ff);
map(0x0040, 0x0047).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
- map(0x0060, 0x0067).rw(m_serial1, FUNC(upd7201_device::ba_cd_r), FUNC(upd7201_device::cd_ba_w)).umask16(0x00ff);
- // 0x80-0x8f - i8272/uPD765 floppy or 8X320 HDC
+ map(0x0060, 0x0067).rw(m_serial, FUNC(upd7201_device::ba_cd_r), FUNC(upd7201_device::ba_cd_w)).umask16(0x00ff);
+}
+
+void aws_state::aws220_io(address_map &map)
+{
+ aws_io(map);
+ // FDC board (plus RS-232)
map(0x0080, 0x008f).m(m_fdc, FUNC(i8272a_device::map));
map(0x00a0, 0x00a1).rw(m_pic,FUNC(pic8259_device::read), FUNC(pic8259_device::write));
// 0xa4 - Extended communication status/controller
// 0xa8-0xab - uPD7201 serial (RS-232)
+
// 0xac-0xaf - 8253 timer (RS-232)
// 0xb0 - Printer status/data
// 0xb4 - Extended DMA address (disk)
@@ -135,7 +161,12 @@ void aws_state::aws_io(address_map &map)
// 0xf4 - Disable parity, clear error
}
-void aws_state::aws(machine_config &config)
+static void keyboard(device_slot_interface &device)
+{
+ device.option_add("aws", AWS_KEYBOARD);
+}
+
+void aws_state::aws_base(machine_config &config)
{
// basic machine hardware
I8086(config, m_maincpu, 24_MHz_XTAL / 3);
@@ -156,9 +187,6 @@ void aws_state::aws(machine_config &config)
m_pit->set_clk<2>(76000); // 76kHz
m_pit->out_handler<2>().set(FUNC(aws_state::pit_out2_w)); // Timer interrupt
- UPD7201(config, m_serial1, 24_MHz_XTAL / 8);
- m_serial1->out_int_callback().set(m_pic,FUNC(pic8259_device::ir1_w));
-
// video
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_color(rgb_t::green());
@@ -174,21 +202,94 @@ void aws_state::aws(machine_config &config)
m_crtc->drq_wr_callback().set(m_dmac,FUNC(i8257_device::dreq2_w));
m_crtc->set_screen("screen");
- // FDC board
+}
+
+void aws_state::fdc_board(machine_config &config)
+{
I8272A(config, m_fdc, 0);
PIC8259(config, m_pic, 0);
+ PIT8253(config, m_fdc_pit, 0);
+ m_fdc_pit->set_clk<0>(19.6608_MHz_XTAL / 16); // 1.23 MHz
+// m_fdc_pit->out_handler<0>().set(FUNC(aws_state::pit_out0_w)); // INT5
+ m_fdc_pit->set_clk<1>(19.6608_MHz_XTAL / 16); // 1.23 MHz
+// m_fdc_pit->out_handler<1>().set(FUNC(aws_state::pit_out1_w)); // RS-232C port B
+ m_fdc_pit->set_clk<2>(19.6608_MHz_XTAL / 16); // 1.23 MHz
+// m_fdc_pit->out_handler<2>().set(FUNC(aws_state::pit_out2_w)); // RS-232C port A
+
+ UPD7201(config, m_fdc_serial, 24_MHz_XTAL / 8);
+}
+
+void aws_state::aws200(machine_config &config)
+{
+ aws_base(config);
+
+ UPD7201(config, m_serial, 24_MHz_XTAL / 8);
+ m_serial->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_INT0);
+ m_serial->out_txdb_callback().set("keyboard", FUNC(rs232_port_device::write_txd));
+
+ rs232_port_device &kbd(RS232_PORT(config, "keyboard", keyboard, "aws"));
+ kbd.rxd_handler().set(m_serial, FUNC(upd7201_device::rxb_w));
+
+ CLOCK(config, m_clock, 76000);
+ m_clock->signal_handler().set(m_serial, FUNC(upd7201_device::rxtxcb_w));
}
+void aws_state::aws220(machine_config &config)
+{
+ aws_base(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &aws_state::aws220_mem);
+ m_maincpu->set_addrmap(AS_IO, &aws_state::aws220_io);
+
+ fdc_board(config);
+
+ UPD7201(config, m_serial, 24_MHz_XTAL / 8);
+ m_serial->out_int_callback().set(m_pic,FUNC(pic8259_device::ir1_w));
+ m_serial->out_txdb_callback().set("keyboard", FUNC(rs232_port_device::write_txd));
+
+ rs232_port_device &kbd(RS232_PORT(config, "keyboard", keyboard, "aws"));
+ kbd.rxd_handler().set(m_serial, FUNC(upd7201_device::rxb_w));
+
+ CLOCK(config, m_clock, 76000);
+ m_clock->signal_handler().set(m_serial, FUNC(upd7201_device::rxtxcb_w));
+}
+
+
+ROM_START( aws200 )
+ ROM_REGION16_LE( 0x1000, "bios", 0)
+ ROM_SYSTEM_BIOS(0, "boot60", "CPU Bootstrap v6.0")
+ ROMX_LOAD( "72-00077_l.bin", 0x000000, 0x001000, CRC(87ca4912) SHA1(c4f7ecda8d007bb212166cfa3cdf494da3966ca9), ROM_BIOS(0) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(1, "dti12", "DTI 1.2")
+ ROMX_LOAD( "a-27077_l.bin", 0x000000, 0x001000, CRC(36e6d6d3) SHA1(95e8026dca5f52eed6af956073c0e46703b42171), ROM_BIOS(1) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(2, "memext", "MemExt")
+ ROMX_LOAD( "a-16310_l.bin", 0x000000, 0x001000, CRC(d96487c3) SHA1(1fe1b8fd82ea97fc93763bd3688392c43284ae5f), ROM_BIOS(2) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(3, "a17653", "A-17653")
+ ROMX_LOAD( "a-17653_l.bin", 0x000000, 0x001000, CRC(e104b328) SHA1(c537ac50ff8bed4ae09b9b172dd624327faf2590), ROM_BIOS(3) ) // bootstrap ROM v6.0
+
+ ROM_REGION( 0x1000, "fontrom", 0 )
+ ROM_LOAD( "72-00098_r.bin", 0x000000, 0x001000, CRC(e74c12a7) SHA1(0cde785aad1bdad5b44c41ba5b05bfb0eb0b1092) )
+ROM_END
+
+
ROM_START( aws220 )
ROM_REGION16_LE( 0x1000, "bios", 0)
- ROM_LOAD( "72-00077_l.bin", 0x000000, 0x001000, CRC(87ca4912) SHA1(c4f7ecda8d007bb212166cfa3cdf494da3966ca9) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(0, "boot60", "CPU Bootstrap v6.0")
+ ROMX_LOAD( "72-00077_l.bin", 0x000000, 0x001000, CRC(87ca4912) SHA1(c4f7ecda8d007bb212166cfa3cdf494da3966ca9), ROM_BIOS(0) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(1, "dti12", "DTI 1.2")
+ ROMX_LOAD( "a-27077_l.bin", 0x000000, 0x001000, CRC(36e6d6d3) SHA1(95e8026dca5f52eed6af956073c0e46703b42171), ROM_BIOS(1) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(2, "memext", "MemExt CDS 2.1")
+ ROMX_LOAD( "a-16310_l.bin", 0x000000, 0x001000, CRC(d96487c3) SHA1(1fe1b8fd82ea97fc93763bd3688392c43284ae5f), ROM_BIOS(2) ) // bootstrap ROM v6.0
+ ROM_SYSTEM_BIOS(3, "a17653", "A-17653")
+ ROMX_LOAD( "a-17653_l.bin", 0x000000, 0x001000, CRC(e104b328) SHA1(c537ac50ff8bed4ae09b9b172dd624327faf2590), ROM_BIOS(3) ) // bootstrap ROM v6.0
ROM_REGION( 0x1000, "fontrom", 0 )
ROM_LOAD( "72-00098_r.bin", 0x000000, 0x001000, CRC(e74c12a7) SHA1(0cde785aad1bdad5b44c41ba5b05bfb0eb0b1092) )
+ ROM_REGION16_LE( 0x1000, "fdcrom", 0 )
+ ROM_LOAD( "fdc_rom.bin", 0x000000, 0x001000, NO_DUMP ) // FDC board bootstrap ROM
ROM_END
} // anonymous namesapce
-COMP( 1982, aws220, 0, 0, aws, aws, aws_state, empty_init, "Convergent Technologies", "AWS-220", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
+COMP( 1981, aws200, 0, 0, aws200, aws, aws_state, empty_init, "Convergent Technologies", "AWS-200", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
+COMP( 1982, aws220, aws200, 0, aws220, aws, aws_state, empty_init, "Convergent Technologies", "AWS-220", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )