diff options
Diffstat (limited to 'src/mame/skeleton/aws.cpp')
| -rw-r--r-- | src/mame/skeleton/aws.cpp | 143 |
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 ) |
