From e4e75db1414d6ca4b5f84b2bea566c5b4fefdf88 Mon Sep 17 00:00:00 2001 From: Sergey Svishchev Date: Wed, 15 Mar 2017 07:45:54 +0300 Subject: [PATCH] ibm6580: make memory size configurable; fix a Coverity finding; misc. --- src/mame/drivers/ibm6580.cpp | 72 +++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp index a3b020b0c9e..787355f84af 100644 --- a/src/mame/drivers/ibm6580.cpp +++ b/src/mame/drivers/ibm6580.cpp @@ -93,6 +93,7 @@ Displaywriter System Manual S544-2023-0 (?) -- mentioned in US patents 4648071 a #include "machine/pit8253.h" #include "machine/ibm6580_kbd.h" //nclude "machine/ibm6580_fdc.h" +#include "machine/ram.h" #include "machine/upd765.h" #include "screen.h" @@ -134,6 +135,7 @@ public: ibm6580_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_p_videoram(*this, "videoram") + , m_ram(*this, RAM_TAG) , m_maincpu(*this, "maincpu") , m_pic8259(*this, "pic8259") , m_pit8253(*this, "pit8253") @@ -200,6 +202,7 @@ private: bool floppy_mcu_cr_full(); required_shared_ptr m_p_videoram; + required_device m_ram; required_device m_maincpu; required_device m_pic8259; required_device m_pit8253; @@ -474,11 +477,6 @@ WRITE_LINE_MEMBER(ibm6580_state::floppy_intrq) m_floppy_idle = true; } -WRITE_LINE_MEMBER(ibm6580_state::floppy_hdl) -{ - m_floppy_hdl = !state; -} - WRITE_LINE_MEMBER(ibm6580_state::hrq_w) { m_maincpu->set_input_line(INPUT_LINE_HALT, state); @@ -648,6 +646,7 @@ READ8_MEMBER(ibm6580_state::floppy_r) case 5: // 815a data = m_fdc->fifo_r(space, offset); + break; case 6: // 815c if (!m_floppy_mcu_sr.empty()) @@ -680,7 +679,6 @@ READ8_MEMBER(ibm6580_state::floppy_r) static ADDRESS_MAP_START(ibm6580_mem, AS_PROGRAM, 16, ibm6580_state) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x00000, 0x3ffff) AM_RAM // system RAM AM_RANGE(0x90000, 0x90001) AM_WRITE(unk_latch_w) AM_RANGE(0xef000, 0xeffff) AM_RAM AM_SHARE("videoram") // 66-line vram starts at 0xec000 AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1", 0) @@ -688,10 +686,6 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(ibm6580_io, AS_IO, 16, ibm6580_state) ADDRESS_MAP_UNMAP_HIGH -// -// AM_RANGE(0x0028, 0x0028) AM_DEVREADWRITE8("upd8251", i8251_device, data_r, data_w) -// AM_RANGE(0x0029, 0x0029) AM_DEVREADWRITE8("upd8251", i8251_device, status_r, control_w) -// AM_RANGE(0x0000, 0x0007) AM_DEVREADWRITE8("pic8259", pic8259_device, read, write, 0x00ff) AM_RANGE(0x0008, 0x000f) AM_WRITE (pic_latch_w) AM_RANGE(0x0010, 0x0017) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0x00ff) @@ -699,8 +693,10 @@ static ADDRESS_MAP_START(ibm6580_io, AS_IO, 16, ibm6580_state) AM_RANGE(0x0040, 0x005f) AM_READWRITE8(p40_r, p40_w, 0x00ff) AM_RANGE(0x0070, 0x007f) AM_UNMAP AM_RANGE(0x0120, 0x0127) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0x00ff) - AM_RANGE(0x0140, 0x014f) AM_UNMAP - AM_RANGE(0x0160, 0x016f) AM_UNMAP + AM_RANGE(0x0140, 0x0141) AM_DEVREADWRITE8("upd8251a", i8251_device, data_r, data_w, 0x00ff) + AM_RANGE(0x0142, 0x0143) AM_DEVREADWRITE8("upd8251a", i8251_device, status_r, control_w, 0x00ff) + AM_RANGE(0x0160, 0x0161) AM_DEVREADWRITE8("upd8251b", i8251_device, data_r, data_w, 0x00ff) + AM_RANGE(0x0162, 0x0163) AM_DEVREADWRITE8("upd8251b", i8251_device, status_r, control_w, 0x00ff) AM_RANGE(0x4000, 0x400f) AM_UNMAP AM_RANGE(0x5000, 0x500f) AM_UNMAP AM_RANGE(0x6000, 0x601f) AM_UNMAP @@ -841,7 +837,12 @@ PALETTE_INIT_MEMBER( ibm6580_state, ibm6580 ) void ibm6580_state::machine_start() { - m_fdc->set_rate(500000); + address_space &program = m_maincpu->space(AS_PROGRAM); + + program.install_readwrite_bank(0, m_ram->size() - 1, "bank10"); + membank("bank10")->set_base(m_ram->pointer()); + + m_fdc->set_rate(500000); // XXX workaround } void ibm6580_state::machine_reset() @@ -869,14 +870,6 @@ void ibm6580_state::video_start() memset(m_p_videoram, 0x0, 0x1000); } -FLOPPY_FORMATS_MEMBER( ibm6580_state::floppy_formats ) - FLOPPY_HFE_FORMAT, - FLOPPY_IPF_FORMAT, - FLOPPY_MFI_FORMAT, - FLOPPY_TD0_FORMAT, - FLOPPY_IMD_FORMAT -FLOPPY_FORMATS_END0 - static SLOT_INTERFACE_START( dw_floppies ) SLOT_INTERFACE( "8sssd", IBM_6360 ) SLOT_INTERFACE_END @@ -887,6 +880,10 @@ static MACHINE_CONFIG_START( ibm6580, ibm6580_state ) MCFG_CPU_IO_MAP(ibm6580_io) MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("128K") + MCFG_RAM_EXTRA_OPTIONS("160K,192K,224K,256K,320K,384K") + MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_25MHz/2, 833, 0, 640, 428, 0, 400) MCFG_SCREEN_UPDATE_DRIVER(ibm6580_state, screen_update) @@ -925,9 +922,32 @@ static MACHINE_CONFIG_START( ibm6580, ibm6580_state ) MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(ibm6580_state, floppy_intrq)) // MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("pic8259", pic8259_device, ir4_w)) MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE("dma8257", i8257_device, dreq0_w)) -// MCFG_UPD765_HDL_CALLBACK(WRITELINE(ibm6580_state, floppy_hdl)) - MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", dw_floppies, "8sssd", ibm6580_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", dw_floppies, "8sssd", ibm6580_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", dw_floppies, "8sssd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", dw_floppies, "8sssd", floppy_image_device::default_floppy_formats) + + MCFG_DEVICE_ADD( "upd8251a", I8251, 0) + MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_txd)) + MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_dtr)) + MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_rts)) + MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w)) + MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w)) + + MCFG_RS232_PORT_ADD("rs232a", default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("upd8251a", i8251_device, write_rxd)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE("upd8251a", i8251_device, write_dsr)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("upd8251a", i8251_device, write_cts)) + + MCFG_DEVICE_ADD( "upd8251b", I8251, 0) + MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232b", rs232_port_device, write_txd)) + MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232b", rs232_port_device, write_dtr)) + MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232b", rs232_port_device, write_rts)) + MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w)) + MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w)) + + MCFG_RS232_PORT_ADD("rs232b", default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("upd8251b", i8251_device, write_rxd)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE("upd8251b", i8251_device, write_dsr)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("upd8251b", i8251_device, write_cts)) MCFG_SOFTWARE_LIST_ADD("flop_list", "ibm6580") MACHINE_CONFIG_END @@ -937,11 +957,11 @@ ROM_START( ibm6580 ) ROM_REGION16_LE( 0x4000, "user1", 0 ) ROM_DEFAULT_BIOS("old") - ROM_SYSTEM_BIOS(0, "old", "old bios") + ROM_SYSTEM_BIOS(0, "old", "old bios - 1981") ROMX_LOAD("8493823_8K.BIN", 0x0001, 0x2000, CRC(aa5524c0) SHA1(9938f2a82828b17966cb0be7fdbf73803c1f10d3),ROM_SKIP(1)|ROM_BIOS(1)) ROMX_LOAD("8493822_8K.BIN", 0x0000, 0x2000, CRC(90e7e73a) SHA1(d3ee7a4d2cb8f4920b5d95e8c7f4fef06599d24e),ROM_SKIP(1)|ROM_BIOS(1)) - ROM_SYSTEM_BIOS(1, "new", "new bios") + ROM_SYSTEM_BIOS(1, "new", "new bios - 1983?") // was downloaded via DDT86 ROMX_LOAD( "DWROM16KB.bin", 0x0000, 0x4000, BAD_DUMP CRC(ced87929) SHA1(907a46f288809bc93a1f59f3fbef18bd44be42d9),ROM_BIOS(2))