diff options
Diffstat (limited to 'src')
272 files changed, 4015 insertions, 3379 deletions
diff --git a/src/devices/bus/a2bus/corvfdc02.cpp b/src/devices/bus/a2bus/corvfdc02.cpp index 4b67b6e364f..7d4bc6ed785 100644 --- a/src/devices/bus/a2bus/corvfdc02.cpp +++ b/src/devices/bus/a2bus/corvfdc02.cpp @@ -54,7 +54,7 @@ ROM_END void a2bus_corvfdc02_device::device_add_mconfig(machine_config &config) { - UPD765A(config, m_fdc, true, false); + UPD765A(config, m_fdc, 8'000'000, true, false); m_fdc->intrq_wr_callback().set(FUNC(a2bus_corvfdc02_device::intrq_w)); m_fdc->drq_wr_callback().set(FUNC(a2bus_corvfdc02_device::drq_w)); FLOPPY_CONNECTOR(config, m_con1, corv_floppies, "525dsqd", a2bus_corvfdc02_device::corv_floppy_formats); diff --git a/src/devices/bus/amiga/zorro/a2058.cpp b/src/devices/bus/amiga/zorro/a2058.cpp new file mode 100644 index 00000000000..8fc58669d14 --- /dev/null +++ b/src/devices/bus/amiga/zorro/a2058.cpp @@ -0,0 +1,147 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + Commodore A2058 + + Zorro-II RAM Expansion (2, 4 or 8 MB) + +***************************************************************************/ + +#include "emu.h" +#include "a2058.h" + + +//************************************************************************** +// CONSTANTS / MACROS +//************************************************************************** + +#define VERBOSE 1 + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(A2058, a2058_device, "a2058", "CBM A2058 Fast Memory") + +//------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +static INPUT_PORTS_START( a2058 ) + PORT_START("config") + PORT_CONFNAME(0x03, 0x02, "A2058 Installed RAM") + PORT_CONFSETTING(0x00, "2 MB") + PORT_CONFSETTING(0x01, "4 MB") + PORT_CONFSETTING(0x02, "8 MB") + PORT_CONFSETTING(0x03, "Auto-Config disabled") +INPUT_PORTS_END + +ioport_constructor a2058_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( a2058 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// a2058_device - constructor +//------------------------------------------------- + +a2058_device::a2058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, A2058, tag, owner, clock), + device_zorro2_card_interface(mconfig, *this), + m_config(*this, "config"), + m_ram_size(0) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void a2058_device::device_start() +{ + // setup ram + m_ram = make_unique_clear<uint16_t[]>(0x800000/2); + + // register for save states + save_pointer(NAME(m_ram), 0x800000/2); + + set_zorro_device(); +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +void a2058_device::autoconfig_base_address(offs_t address) +{ + if (VERBOSE) + logerror("%s('%s'): autoconfig_base_address received: 0x%06x\n", shortname(), basetag(), address); + + if (VERBOSE) + logerror("-> installing a2058\n"); + + // stop responding to default autoconfig + m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f); + + // install access to the rom space + m_slot->m_space->install_ram(address, address + (m_ram_size << 20) - 1, m_ram.get()); + + // we're done + m_slot->cfgout_w(0); +} + +WRITE_LINE_MEMBER( a2058_device::cfgin_w ) +{ + if (VERBOSE) + logerror("%s('%s'): configin_w (%d)\n", shortname(), basetag(), state); + + if (state == 0) + { + // setup autoconfig + autoconfig_board_type(BOARD_TYPE_ZORRO2); + + // setup ram + switch (m_config->read()) + { + case 0: + autoconfig_board_size(BOARD_SIZE_2M); + m_ram_size = 0x200000 >> 20; + break; + case 1: + autoconfig_board_size(BOARD_SIZE_4M); + m_ram_size = 0x400000 >> 20; + break; + case 2: + autoconfig_board_size(BOARD_SIZE_8M); + m_ram_size = 0x800000 >> 20; + break; + case 3: + // auto-config disabled + m_ram_size = 0; + return; + } + + autoconfig_product(0x0a); + autoconfig_manufacturer(0x0202); + autoconfig_serial(0x00000000); + + autoconfig_link_into_memory(true); + autoconfig_rom_vector_valid(false); + autoconfig_multi_device(false); + autoconfig_8meg_preferred(false); + autoconfig_can_shutup(true); // ? + + // install autoconfig handler + m_slot->m_space->install_readwrite_handler(0xe80000, 0xe8007f, + read16_delegate(FUNC(amiga_autoconfig::autoconfig_read), static_cast<amiga_autoconfig *>(this)), + write16_delegate(FUNC(amiga_autoconfig::autoconfig_write), static_cast<amiga_autoconfig *>(this)), 0xffff); + } +} diff --git a/src/devices/bus/amiga/zorro/a2058.h b/src/devices/bus/amiga/zorro/a2058.h new file mode 100644 index 00000000000..0d3b6771c1f --- /dev/null +++ b/src/devices/bus/amiga/zorro/a2058.h @@ -0,0 +1,51 @@ +// license:GPL-2.0+ +// copyright-holders:Dirk Best +/*************************************************************************** + + Commodore A2058 + + Zorro-II RAM Expansion (2, 4 or 8 MB) + +***************************************************************************/ + +#ifndef MAME_BUS_AMIGA_ZORRO_A2058_H +#define MAME_BUS_AMIGA_ZORRO_A2058_H + +#pragma once + +#include "zorro.h" +#include "machine/autoconfig.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> a2058_device + +class a2058_device : public device_t, public device_zorro2_card_interface, public amiga_autoconfig +{ +public: + // construction/destruction + a2058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + + // device_zorro2_card_interface overrides + virtual DECLARE_WRITE_LINE_MEMBER( cfgin_w ) override; + + // amiga_autoconfig overrides + virtual void autoconfig_base_address(offs_t address) override; + +private: + required_ioport m_config; + std::unique_ptr<uint16_t[]> m_ram; + int m_ram_size; +}; + +// device type definition +DECLARE_DEVICE_TYPE(A2058, a2058_device) + +#endif // MAME_BUS_AMIGA_ZORRO_A2058_H diff --git a/src/devices/bus/amiga/zorro/cards.cpp b/src/devices/bus/amiga/zorro/cards.cpp index 13ae4691791..396069b537f 100644 --- a/src/devices/bus/amiga/zorro/cards.cpp +++ b/src/devices/bus/amiga/zorro/cards.cpp @@ -10,6 +10,7 @@ #include "cards.h" #include "a2052.h" +#include "a2058.h" #include "a2065.h" #include "a2232.h" #include "a590.h" @@ -39,6 +40,7 @@ void a2000_expansion_cards(device_slot_interface &device) void zorro2_cards(device_slot_interface &device) { device.option_add("a2052", A2052); + device.option_add("a2058", A2058); device.option_add("a2065", A2065); device.option_add("a2091", A2091); device.option_add("a2232", A2232); @@ -48,6 +50,7 @@ void zorro2_cards(device_slot_interface &device) void zorro3_cards(device_slot_interface &device) { device.option_add("a2052", A2052); + device.option_add("a2058", A2058); device.option_add("a2065", A2065); device.option_add("a2091", A2091); device.option_add("a2232", A2232); diff --git a/src/devices/bus/bbc/fdc/opus.cpp b/src/devices/bus/bbc/fdc/opus.cpp index de142f79da1..a8e2bb3c54d 100644 --- a/src/devices/bus/bbc/fdc/opus.cpp +++ b/src/devices/bus/bbc/fdc/opus.cpp @@ -95,7 +95,7 @@ ROM_END void bbc_opus8272_device::device_add_mconfig(machine_config &config) { - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8'000'000, true); m_fdc->intrq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(bbc_fdc_slot_device::intrq_w)); FLOPPY_CONNECTOR(config, m_floppy0, bbc_floppies_525, "525qd", bbc_opusfdc_device::floppy_formats).enable_sound(true); diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp index 9cd66c57b57..002c9a64dc7 100644 --- a/src/devices/bus/cbmiec/fd2000.cpp +++ b/src/devices/bus/cbmiec/fd2000.cpp @@ -217,9 +217,9 @@ FLOPPY_FORMATS_END void fd2000_device::add_common_devices(machine_config &config) { - M65C02(config, m_maincpu, XTAL(24'000'000)/12); + M65C02(config, m_maincpu, 24_MHz_XTAL / 12); - via6522_device &via(VIA6522(config, G65SC22P2_TAG, XTAL(24'000'000)/12)); + via6522_device &via(VIA6522(config, G65SC22P2_TAG, 24_MHz_XTAL / 12)); via.readpa_handler().set(FUNC(fd2000_device::via_pa_r)); via.readpb_handler().set(FUNC(fd2000_device::via_pb_r)); via.writepa_handler().set(FUNC(fd2000_device::via_pa_w)); @@ -230,7 +230,7 @@ void fd2000_device::device_add_mconfig(machine_config &config) { add_common_devices(config); m_maincpu->set_addrmap(AS_PROGRAM, &fd2000_device::fd2000_mem); - DP8473(config, m_fdc, 0); + DP8473(config, m_fdc, 24_MHz_XTAL); FLOPPY_CONNECTOR(config, DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats); } @@ -238,7 +238,7 @@ void fd4000_device::device_add_mconfig(machine_config &config) { add_common_devices(config); m_maincpu->set_addrmap(AS_PROGRAM, &fd4000_device::fd4000_mem); - PC8477A(config, m_fdc, 0); + PC8477A(config, m_fdc, 24_MHz_XTAL); FLOPPY_CONNECTOR(config, PC8477AV1_TAG":0", fd4000_floppies, "35hd", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats); } diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp index 6e75738d76a..80a60bcf6c0 100644 --- a/src/devices/bus/cpc/ddi1.cpp +++ b/src/devices/bus/cpc/ddi1.cpp @@ -41,7 +41,7 @@ const tiny_rom_entry *cpc_ddi1_device::device_rom_region() const // device machine config MACHINE_CONFIG_START(cpc_ddi1_device::device_add_mconfig) - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 4'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", ddi1_floppies, "3ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") diff --git a/src/devices/bus/ecbbus/grip.cpp b/src/devices/bus/ecbbus/grip.cpp index fab96c31634..655710cd0d5 100644 --- a/src/devices/bus/ecbbus/grip.cpp +++ b/src/devices/bus/ecbbus/grip.cpp @@ -458,8 +458,8 @@ MACHINE_CONFIG_START(ecb_grip21_device::device_add_mconfig) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(ecb_grip21_device, kb_w)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(ecb_grip21_device::kb_w)); MACHINE_CONFIG_END diff --git a/src/devices/bus/epson_sio/pf10.cpp b/src/devices/bus/epson_sio/pf10.cpp index 11e60f39282..462de5ecaa3 100644 --- a/src/devices/bus/epson_sio/pf10.cpp +++ b/src/devices/bus/epson_sio/pf10.cpp @@ -70,7 +70,7 @@ MACHINE_CONFIG_START(epson_pf10_device::device_add_mconfig) m_cpu->out_p2_cb().set(FUNC(epson_pf10_device::port2_w)); m_cpu->out_ser_tx_cb().set(FUNC(epson_pf10_device::hd6303_tx_w)); - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 4'000'000, false, true); MCFG_FLOPPY_DRIVE_ADD("upd765a:0", pf10_floppies, "smd165", floppy_image_device::default_floppy_formats) MCFG_EPSON_SIO_ADD("sio", nullptr) diff --git a/src/devices/bus/epson_sio/tf20.cpp b/src/devices/bus/epson_sio/tf20.cpp index fa625195b6d..22959af2730 100644 --- a/src/devices/bus/epson_sio/tf20.cpp +++ b/src/devices/bus/epson_sio/tf20.cpp @@ -102,7 +102,7 @@ MACHINE_CONFIG_START(epson_tf20_device::device_add_mconfig) m_mpsc->out_dtra_callback().set(FUNC(epson_tf20_device::dtra_w)); // floppy disk controller - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, XTAL_CR1, true, true); m_fdc->intrq_wr_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0); // floppy drives diff --git a/src/devices/bus/hexbus/hx5102.cpp b/src/devices/bus/hexbus/hx5102.cpp index 1fbced1bc80..bf0f9d541cb 100644 --- a/src/devices/bus/hexbus/hx5102.cpp +++ b/src/devices/bus/hexbus/hx5102.cpp @@ -688,7 +688,7 @@ void hx5102_device::device_add_mconfig(machine_config& config) // Not connected: Select lines (DS0, DS1), Head load (HDL), VCO // Tied to 1: READY // Tied to 0: TC - I8272A(config, m_floppy_ctrl, false); + I8272A(config, m_floppy_ctrl, 8'000'000, false); m_floppy_ctrl->intrq_wr_callback().set(FUNC(hx5102_device::fdc_irq_w)); m_floppy_ctrl->drq_wr_callback().set(FUNC(hx5102_device::fdc_drq_w)); diff --git a/src/devices/bus/iq151/disc2.cpp b/src/devices/bus/iq151/disc2.cpp index e3445d61897..db9919ef516 100644 --- a/src/devices/bus/iq151/disc2.cpp +++ b/src/devices/bus/iq151/disc2.cpp @@ -74,7 +74,7 @@ void iq151_disc2_device::device_reset() void iq151_disc2_device::device_add_mconfig(machine_config &config) { - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 8'000'000, false, true); FLOPPY_CONNECTOR(config, "fdc:1", iq151_disc2_floppies, "8sssd", iq151_disc2_device::floppy_formats); FLOPPY_CONNECTOR(config, "fdc:2", iq151_disc2_floppies, "8sssd", iq151_disc2_device::floppy_formats); } diff --git a/src/devices/bus/isa/fdc.cpp b/src/devices/bus/isa/fdc.cpp index 92930eb5aa8..f31b0f5f9dd 100644 --- a/src/devices/bus/isa/fdc.cpp +++ b/src/devices/bus/isa/fdc.cpp @@ -111,7 +111,7 @@ isa8_fdc_smc_device::isa8_fdc_smc_device(const machine_config &mconfig, const ch void isa8_fdc_smc_device::device_add_mconfig(machine_config &config) { - smc37c78_device &smc(SMC37C78(config, m_fdc)); + smc37c78_device &smc(SMC37C78(config, m_fdc, 24'000'000)); smc.intrq_wr_callback().set(FUNC(isa8_fdc_device::irq_w)); smc.drq_wr_callback().set(FUNC(isa8_fdc_device::drq_w)); FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "35hd", isa8_fdc_device::floppy_formats); @@ -124,7 +124,7 @@ isa8_fdc_ps2_device::isa8_fdc_ps2_device(const machine_config &mconfig, const ch void isa8_fdc_ps2_device::device_add_mconfig(machine_config &config) { - n82077aa_device &n82077aa(N82077AA(config, m_fdc, n82077aa_device::MODE_PS2)); + n82077aa_device &n82077aa(N82077AA(config, m_fdc, 24'000'000, n82077aa_device::MODE_PS2)); n82077aa.intrq_wr_callback().set(FUNC(isa8_fdc_device::irq_w)); n82077aa.drq_wr_callback().set(FUNC(isa8_fdc_device::drq_w)); FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "35hd", isa8_fdc_device::floppy_formats); @@ -137,7 +137,7 @@ isa8_fdc_superio_device::isa8_fdc_superio_device(const machine_config &mconfig, void isa8_fdc_superio_device::device_add_mconfig(machine_config &config) { - pc_fdc_superio_device &superio(PC_FDC_SUPERIO(config, m_fdc)); + pc_fdc_superio_device &superio(PC_FDC_SUPERIO(config, m_fdc, 24'000'000)); superio.intrq_wr_callback().set(FUNC(isa8_fdc_device::irq_w)); superio.drq_wr_callback().set(FUNC(isa8_fdc_device::drq_w)); FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "35hd", isa8_fdc_device::floppy_formats); diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp index d402403e4a6..8930a080d8f 100644 --- a/src/devices/bus/isa/mufdc.cpp +++ b/src/devices/bus/isa/mufdc.cpp @@ -47,7 +47,7 @@ static void drives(device_slot_interface &device) void mufdc_device::device_add_mconfig(machine_config &config) { - mcs3201_device &mcs3201(MCS3201(config, m_fdc)); + mcs3201_device &mcs3201(MCS3201(config, m_fdc, 24_MHz_XTAL)); mcs3201.input_handler().set(FUNC(mufdc_device::fdc_input_r)); mcs3201.intrq_wr_callback().set(FUNC(mufdc_device::fdc_irq_w)); mcs3201.drq_wr_callback().set(FUNC(mufdc_device::fdc_drq_w)); diff --git a/src/devices/bus/isbx/compis_fdc.cpp b/src/devices/bus/isbx/compis_fdc.cpp index 4a14beacb09..e1d464a37c2 100644 --- a/src/devices/bus/isbx/compis_fdc.cpp +++ b/src/devices/bus/isbx/compis_fdc.cpp @@ -56,7 +56,7 @@ static void compis_floppies(device_slot_interface &device) void compis_fdc_device::device_add_mconfig(machine_config &config) { - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8'000'000, true); m_fdc->intrq_wr_callback().set(FUNC(compis_fdc_device::fdc_irq)); m_fdc->drq_wr_callback().set(FUNC(compis_fdc_device::fdc_drq)); FLOPPY_CONNECTOR(config, m_floppy0, compis_floppies, "525qd", compis_fdc_device::floppy_formats); diff --git a/src/devices/bus/isbx/isbc_218a.cpp b/src/devices/bus/isbx/isbc_218a.cpp index b52054ae5db..9b142fa95ae 100644 --- a/src/devices/bus/isbx/isbc_218a.cpp +++ b/src/devices/bus/isbx/isbc_218a.cpp @@ -56,7 +56,7 @@ static void isbc_218a_floppies(device_slot_interface &device) void isbc_218a_device::device_add_mconfig(machine_config &config) { - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8_MHz_XTAL, true); m_fdc->intrq_wr_callback().set(FUNC(isbc_218a_device::fdc_irq)); m_fdc->drq_wr_callback().set(FUNC(isbc_218a_device::fdc_drq)); FLOPPY_CONNECTOR(config, m_floppy0, isbc_218a_floppies, "525dd", isbc_218a_device::floppy_formats); diff --git a/src/devices/bus/kc/d004.cpp b/src/devices/bus/kc/d004.cpp index b2345db03dc..188166640cd 100644 --- a/src/devices/bus/kc/d004.cpp +++ b/src/devices/bus/kc/d004.cpp @@ -152,18 +152,18 @@ void kc_d004_device::device_reset() void kc_d004_device::device_add_mconfig(machine_config &config) { - Z80(config, m_cpu, XTAL(8'000'000)/2); + Z80(config, m_cpu, 8_MHz_XTAL / 2); m_cpu->set_addrmap(AS_PROGRAM, &kc_d004_device::kc_d004_mem); m_cpu->set_addrmap(AS_IO, &kc_d004_device::kc_d004_io); m_cpu->set_daisy_config(kc_d004_daisy_chain); - z80ctc_device &ctc(Z80CTC(config, Z80CTC_TAG, XTAL(8'000'000)/2)); + z80ctc_device &ctc(Z80CTC(config, Z80CTC_TAG, 8_MHz_XTAL / 2)); ctc.intr_callback().set_inputline(Z80_TAG, 0); ctc.zc_callback<0>().set(Z80CTC_TAG, FUNC(z80ctc_device::trg1)); ctc.zc_callback<1>().set(Z80CTC_TAG, FUNC(z80ctc_device::trg2)); ctc.zc_callback<2>().set(Z80CTC_TAG, FUNC(z80ctc_device::trg3)); - UPD765A(config, m_fdc, 0); + UPD765A(config, m_fdc, 8_MHz_XTAL); m_fdc->set_ready_line_connected(false); m_fdc->set_select_lines_connected(false); m_fdc->intrq_wr_callback().set(FUNC(kc_d004_device::fdc_irq)); diff --git a/src/devices/bus/msx_cart/disk.cpp b/src/devices/bus/msx_cart/disk.cpp index cbaba85f01c..a0e03e54920 100644 --- a/src/devices/bus/msx_cart/disk.cpp +++ b/src/devices/bus/msx_cart/disk.cpp @@ -232,7 +232,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(msx_cart_fsfd1a_device::device_add_mconfig) - TC8566AF(config, m_fdc); + TC8566AF(config, m_fdc, 16'000'000); // Double sided 3.5" floppy drive MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk_device::floppy_formats) diff --git a/src/devices/bus/newbrain/fdc.cpp b/src/devices/bus/newbrain/fdc.cpp index c3378dd5108..597def0509b 100644 --- a/src/devices/bus/newbrain/fdc.cpp +++ b/src/devices/bus/newbrain/fdc.cpp @@ -109,7 +109,7 @@ MACHINE_CONFIG_START(newbrain_fdc_device::device_add_mconfig) MCFG_DEVICE_PROGRAM_MAP(newbrain_fdc_mem) MCFG_DEVICE_IO_MAP(newbrain_fdc_io) - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 8'000'000, false, true); m_fdc->intrq_wr_callback().set(FUNC(newbrain_fdc_device::fdc_int_w)); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats) diff --git a/src/devices/bus/spc1000/fdd.cpp b/src/devices/bus/spc1000/fdd.cpp index dd91cbe898c..f3d669fbf21 100644 --- a/src/devices/bus/spc1000/fdd.cpp +++ b/src/devices/bus/spc1000/fdd.cpp @@ -95,7 +95,7 @@ void spc1000_fdd_exp_device::device_add_mconfig(machine_config &config) m_ppi->out_pc_callback().set(FUNC(spc1000_fdd_exp_device::i8255_c_w)); // floppy disk controller - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 4'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_cpu, INPUT_LINE_IRQ0); // floppy drives diff --git a/src/devices/bus/vip/vp620.cpp b/src/devices/bus/vip/vp620.cpp index 66e057fa084..643a8856481 100644 --- a/src/devices/bus/vip/vp620.cpp +++ b/src/devices/bus/vip/vp620.cpp @@ -36,10 +36,11 @@ void vp620_device::kb_w(uint8_t data) // MACHINE_CONFIG_START( vp620 ) //------------------------------------------------- -MACHINE_CONFIG_START(vp620_device::device_add_mconfig) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(vp620_device, kb_w)) -MACHINE_CONFIG_END +void vp620_device::device_add_mconfig(machine_config &config) +{ + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(vp620_device::kb_w)); +} diff --git a/src/devices/cpu/i386/i386dasm.cpp b/src/devices/cpu/i386/i386dasm.cpp index e201c4c02a4..374f2a24a41 100644 --- a/src/devices/cpu/i386/i386dasm.cpp +++ b/src/devices/cpu/i386/i386dasm.cpp @@ -269,8 +269,8 @@ const i386_disassembler::I386_OPCODE i386_disassembler::i386_opcode_table1[256] // 0xf0 {"lock", 0, 0, 0, 0 }, {"???", 0, 0, 0, 0 }, - {"repne", PREFIX, 0, 0, 0 }, - {"rep", PREFIX, 0, 0, 0 }, + {"repne", PREFIX, 0, 0, 0, STEP_OVER}, + {"rep", PREFIX, 0, 0, 0, STEP_OVER}, {"hlt", 0, 0, 0, 0 }, {"cmc", 0, 0, 0, 0 }, {"groupF6", GROUP, 0, 0, 0 }, @@ -2842,6 +2842,7 @@ void i386_disassembler::decode_opcode(std::ostream &stream, const I386_OPCODE *o if ((op2 == 0x90) && !pre0f) pre0f = op1; decode_opcode(stream, &i386_opcode_table1[op2], op2, base_pc, pc, opcodes); + dasm_flags |= op->dasm_flags; return; case GROUP: diff --git a/src/devices/cpu/i86/i86.h b/src/devices/cpu/i86/i86.h index 55202931ae1..09b2696e38b 100644 --- a/src/devices/cpu/i86/i86.h +++ b/src/devices/cpu/i86/i86.h @@ -369,6 +369,9 @@ public: template <class Object> devcb_base &set_if_handler(Object &&cb) { return m_out_if_func.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_esc_opcode_handler(Object &&cb) { return m_esc_opcode_handler.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_esc_data_handler(Object &&cb) { return m_esc_data_handler.set_callback(std::forward<Object>(cb)); } + auto if_handler() { return m_out_if_func.bind(); } + auto esc_opcode_handler() { return m_esc_opcode_handler.bind(); } + auto esc_data_handler() { return m_esc_data_handler.bind(); } protected: i8086_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int data_bus_size); diff --git a/src/devices/cpu/mcs51/axc51-core.cpp b/src/devices/cpu/mcs51/axc51-core.cpp new file mode 100644 index 00000000000..a2c1790e3f7 --- /dev/null +++ b/src/devices/cpu/mcs51/axc51-core.cpp @@ -0,0 +1,28 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/***************************************************************************** + + AXC51-CORE (AppoTech Inc.) + + used in + + AX208 SoC + + *****************************************************************************/ + +#include "emu.h" +#include "debugger.h" +#include "axc51-core.h" +#include "axc51-core_dasm.h" + +DEFINE_DEVICE_TYPE(AX208, ax208_cpu_device, "ax208", "AppoTech AX208 (AXC51-CORE)") + +ax208_cpu_device::ax208_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mcs51_cpu_device(mconfig, AX208, tag, owner, clock, 0, 7) +{ +} + +std::unique_ptr<util::disasm_interface> ax208_cpu_device::create_disassembler() +{ + return std::make_unique<axc51core_disassembler>(); +} diff --git a/src/devices/cpu/mcs51/axc51-core.h b/src/devices/cpu/mcs51/axc51-core.h new file mode 100644 index 00000000000..3d2429bb55a --- /dev/null +++ b/src/devices/cpu/mcs51/axc51-core.h @@ -0,0 +1,32 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/***************************************************************************** + + AXC51-CORE (AppoTech Inc.) + + used in + + AX208 SoC + + *****************************************************************************/ + +#ifndef MAME_CPU_MCS51_AXC51_CORE_H +#define MAME_CPU_MCS51_AXC51_CORE_H + +#pragma once + +#include "mcs51.h" + +DECLARE_DEVICE_TYPE(AX208, ax208_cpu_device) + +class ax208_cpu_device : public mcs51_cpu_device +{ +public: + // construction/destruction + ax208_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; +}; + +#endif // MAME_CPU_MCS51_AXC51_CORE_H diff --git a/src/devices/cpu/mcs51/axc51-core_dasm.cpp b/src/devices/cpu/mcs51/axc51-core_dasm.cpp new file mode 100644 index 00000000000..dd9677965bc --- /dev/null +++ b/src/devices/cpu/mcs51/axc51-core_dasm.cpp @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/***************************************************************************** + + AXC51-CORE (AppoTech Inc.) + + used in + + AX208 SoC + + *****************************************************************************/ + +#include "emu.h" +#include "axc51-core_dasm.h" + +axc51core_disassembler::axc51core_disassembler() : mcs51_disassembler(default_names) +{ +} + + +offs_t axc51core_disassembler::disassemble_op(std::ostream &stream, unsigned PC, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms, uint8_t op) +{ + uint32_t flags = 0; + uint8_t prm = 0; + + switch( op ) + { + // unknown, probably the 16-bit extended ocpodes, see page 14 of AX208-SP-101-EN manual, encodings not specified! + // note, the other AXC51-CORE based manuals don't seem to mention these, are they really AX208 specific? + case 0xa5: + prm = params.r8(PC++); + util::stream_format(stream, "unknown ax208 a5 $%02X", prm); + break; + + default: + return mcs51_disassembler::disassemble_op(stream, PC, pc, opcodes, params, op); + } + + return (PC - pc) | flags | SUPPORTED; +} + + diff --git a/src/devices/cpu/mcs51/axc51-core_dasm.h b/src/devices/cpu/mcs51/axc51-core_dasm.h new file mode 100644 index 00000000000..222d3c1a16a --- /dev/null +++ b/src/devices/cpu/mcs51/axc51-core_dasm.h @@ -0,0 +1,31 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/***************************************************************************** + + AXC51-CORE (AppoTech Inc.) + + used in + + AX208 SoC + + *****************************************************************************/ + +#ifndef MAME_CPU_MCS51_AXC51_CORE_DASM_H +#define MAME_CPU_MCS51_AXC51_CORE_DASM_H + +#pragma once + +#include "mcs51dasm.h" + +class axc51core_disassembler : public mcs51_disassembler +{ +public: + axc51core_disassembler(); + virtual ~axc51core_disassembler() = default; + +protected: + virtual offs_t disassemble_op(std::ostream &stream, unsigned PC, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms, uint8_t op) override; +}; + + +#endif // MAME_CPU_MCS51_AXC51_CORE_DASM_H diff --git a/src/devices/cpu/mcs51/mcs51dasm.cpp b/src/devices/cpu/mcs51/mcs51dasm.cpp index fce9b90208f..2b857f74307 100644 --- a/src/devices/cpu/mcs51/mcs51dasm.cpp +++ b/src/devices/cpu/mcs51/mcs51dasm.cpp @@ -293,16 +293,14 @@ std::string mcs51_disassembler::get_bit_address( uint8_t arg ) const } } -offs_t mcs51_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) +offs_t mcs51_disassembler::disassemble_op(std::ostream &stream, unsigned PC, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms, uint8_t op) { uint32_t flags = 0; - unsigned PC = pc; std::string sym, sym2; - uint8_t op, data; + uint8_t data; uint16_t addr; int8_t rel; - op = opcodes.r8(PC++); switch( op ) { //NOP @@ -1109,6 +1107,13 @@ offs_t mcs51_disassembler::disassemble(std::ostream &stream, offs_t pc, const da return (PC - pc) | flags | SUPPORTED; } +offs_t mcs51_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) +{ + unsigned PC = pc; + uint8_t op = opcodes.r8(PC++); + return disassemble_op(stream, PC, pc, opcodes, params, op); +} + i8051_disassembler::i8051_disassembler() : mcs51_disassembler(default_names) { } diff --git a/src/devices/cpu/mcs51/mcs51dasm.h b/src/devices/cpu/mcs51/mcs51dasm.h index e00c755bb33..9cf7702361f 100644 --- a/src/devices/cpu/mcs51/mcs51dasm.h +++ b/src/devices/cpu/mcs51/mcs51dasm.h @@ -63,11 +63,14 @@ public: virtual u32 opcode_alignment() const override; virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; -private: - std::unordered_map<offs_t, const char *> m_names; +protected: + virtual offs_t disassemble_op(std::ostream &stream, unsigned PC, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms, uint8_t op); std::string get_data_address( uint8_t arg ) const; std::string get_bit_address( uint8_t arg ) const; +private: + std::unordered_map<offs_t, const char *> m_names; + }; class i8051_disassembler : public mcs51_disassembler diff --git a/src/devices/cpu/sc61860/sc61860.h b/src/devices/cpu/sc61860/sc61860.h index cd38606e486..57246e1d672 100644 --- a/src/devices/cpu/sc61860/sc61860.h +++ b/src/devices/cpu/sc61860/sc61860.h @@ -16,15 +16,16 @@ #pragma once /* - official names seam to be + Official names seem to be: ESR-H, ESR-J - (ESR-L SC62015 ist complete different) - */ + (ESR-L SC62015 is completely different) +*/ -/* unsolved problems - the processor has 8 kbyte internal rom - only readable with special instructions and program execution - 64 kb external ram (first 8kbyte not seen for program execution?) */ +/* Known Issues: + - The processor has an 8kbyte internal ROM which is only readable with + special instructions and program execution. + - 64kbyte external RAM (first 8kbytes not seen for program execution?) +*/ enum @@ -33,7 +34,7 @@ enum SC61860_P, SC61860_Q, SC61860_R, SC61860_CARRY, SC61860_ZERO, - // the following are in the internal ram! + // The following are in the internal RAM! SC61860_BA, SC61860_X, SC61860_Y, SC61860_I, SC61860_J, SC61860_K, SC61860_L, SC61860_V, SC61860_W, @@ -44,30 +45,6 @@ enum }; -#define MCFG_SC61860_READ_RESET_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_reset_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_READ_BRK_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_brk_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_READ_X_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_x_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_READ_A_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_ina_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_WRITE_A_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_outa_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_READ_B_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_inb_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_WRITE_B_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_outb_cb(DEVCB_##_devcb); - -#define MCFG_SC61860_WRITE_C_HANDLER(_devcb) \ - downcast<sc61860_device &>(*device).set_outc_cb(DEVCB_##_devcb); - class sc61860_device : public cpu_device { public: @@ -75,14 +52,14 @@ public: sc61860_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - template <class Object> devcb_base &set_reset_cb(Object &&cb) { return m_reset.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_brk_cb(Object &&cb) { return m_brk.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_x_cb(Object &&cb) { return m_x.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_ina_cb(Object &&cb) { return m_ina.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_outa_cb(Object &&cb) { return m_outa.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_inb_cb(Object &&cb) { return m_inb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_outb_cb(Object &&cb) { return m_outb.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_outc_cb(Object &&cb) { return m_outc.set_callback(std::forward<Object>(cb)); } + auto reset_cb() { return m_reset.bind(); } + auto brk_cb() { return m_brk.bind(); } + auto x_cb() { return m_x.bind(); } + auto in_a_cb() { return m_ina.bind(); } + auto out_a_cb() { return m_outa.bind(); } + auto in_b_cb() { return m_inb.bind(); } + auto out_b_cb() { return m_outb.bind(); } + auto out_c_cb() { return m_outc.bind(); } /* this is though for power on/off of the sharps */ uint8_t *internal_ram(); diff --git a/src/devices/cpu/scmp/scmp.h b/src/devices/cpu/scmp/scmp.h index 9a3a6f2fece..18ffac53b1a 100644 --- a/src/devices/cpu/scmp/scmp.h +++ b/src/devices/cpu/scmp/scmp.h @@ -22,12 +22,12 @@ public: scmp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - template <class Object> devcb_base &set_flag_out_cb(Object &&cb) { return m_flag_out_func.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_sout_cb(Object &&cb) { return m_sout_func.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_sin_cb(Object &&cb) { return m_sin_func.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_sensea_cb(Object &&cb) { return m_sensea_func.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_senseb_cb(Object &&cb) { return m_senseb_func.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_halt_cb(Object &&cb) { return m_halt_func.set_callback(std::forward<Object>(cb)); } + auto flag_out() { return m_flag_out_func.bind(); } + auto s_out() { return m_sout_func.bind(); } + auto s_in() { return m_sin_func.bind(); } + auto sense_a() { return m_sensea_func.bind(); } + auto sense_b() { return m_senseb_func.bind(); } + auto halt() { return m_halt_func.bind(); } protected: enum diff --git a/src/devices/machine/fdc37c93x.cpp b/src/devices/machine/fdc37c93x.cpp index d285bac1ee9..05c87fd38ef 100644 --- a/src/devices/machine/fdc37c93x.cpp +++ b/src/devices/machine/fdc37c93x.cpp @@ -243,7 +243,7 @@ FLOPPY_FORMATS_END void fdc37c93x_device::device_add_mconfig(machine_config &config) { // floppy disc controller - smc37c78_device &fdcdev(SMC37C78(config, floppy_controller_fdcdev)); + smc37c78_device &fdcdev(SMC37C78(config, floppy_controller_fdcdev, 24'000'000)); fdcdev.intrq_wr_callback().set(FUNC(fdc37c93x_device::irq_floppy_w)); fdcdev.drq_wr_callback().set(FUNC(fdc37c93x_device::drq_floppy_w)); FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "35hd", fdc37c93x_device::floppy_formats); diff --git a/src/devices/machine/jvsdev.cpp b/src/devices/machine/jvsdev.cpp index 20c3e538c5a..f55a836cd01 100644 --- a/src/devices/machine/jvsdev.cpp +++ b/src/devices/machine/jvsdev.cpp @@ -2,12 +2,10 @@ // copyright-holders:Olivier Galibert #include "emu.h" #include "jvsdev.h" -#include "jvshost.h" jvs_device::jvs_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, type, tag, owner, clock), jvs_outputs(0), jvs_address(0), jvs_reset_counter(0) + : device_t(mconfig, type, tag, owner, clock), jvs_outputs(0), host(*this, finder_base::DUMMY_TAG), jvs_address(0), jvs_reset_counter(0) { - jvs_host_tag = nullptr; next_device = nullptr; } @@ -188,9 +186,6 @@ bool jvs_device::get_address_set_line() void jvs_device::device_start() { - jvs_host *host = machine().device<jvs_host>(jvs_host_tag); - if(!host) - fatalerror("JVS device %s could not find JVS host %s\n", tag(), jvs_host_tag); host->add_device(this); save_item(NAME(jvs_address)); diff --git a/src/devices/machine/jvsdev.h b/src/devices/machine/jvsdev.h index 5002d807252..7a93b3ead04 100644 --- a/src/devices/machine/jvsdev.h +++ b/src/devices/machine/jvsdev.h @@ -5,18 +5,11 @@ #pragma once - -#define MCFG_JVS_DEVICE_ADD(_tag, _type, _host) \ - MCFG_DEVICE_ADD(_tag, _type, 0) \ - downcast<jvs_device &>(*device).set_jvs_host_tag(_host); - -class jvs_host; +#include "jvshost.h" class jvs_device : public device_t { public: - void set_jvs_host_tag(const char *host_tag) { jvs_host_tag = host_tag; } - void chain(jvs_device *dev); void message(uint8_t dest, const uint8_t *send_buffer, uint32_t send_size, uint8_t *recv_buffer, uint32_t &recv_size); bool get_address_set_line(); @@ -45,8 +38,9 @@ protected: virtual bool swoutputs(uint8_t count, const uint8_t *vals); virtual bool swoutputs(uint8_t id, uint8_t val); + required_device<jvs_host> host; + private: - const char *jvs_host_tag; jvs_device *next_device; uint8_t jvs_address; uint32_t jvs_reset_counter; diff --git a/src/devices/machine/keyboard.h b/src/devices/machine/keyboard.h index 247560b3dbb..4788d51f33b 100644 --- a/src/devices/machine/keyboard.h +++ b/src/devices/machine/keyboard.h @@ -7,18 +7,6 @@ /*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define KEYBOARDCB_PUT(cls, fnc) generic_keyboard_device::output_delegate((&cls::fnc), (#cls "::" #fnc), DEVICE_SELF, ((cls *)nullptr)) -#define KEYBOARDCB_DEVPUT(tag, cls, fnc) generic_keyboard_device::output_delegate((&cls::fnc), (#cls "::" #fnc), (tag), ((cls *)nullptr)) - -#define MCFG_GENERIC_KEYBOARD_CB(cb) \ - downcast<generic_keyboard_device &>(*device).set_keyboard_callback((KEYBOARDCB_##cb)); - - - -/*************************************************************************** DEVICE TYPE GLOBALS ***************************************************************************/ @@ -91,7 +79,18 @@ public: device_t *owner, u32 clock); - template <class Object> void set_keyboard_callback(Object &&cb) { m_keyboard_cb = std::forward<Object>(cb); } + template <class FunctionClass> + void set_keyboard_callback(void (FunctionClass::*callback)(u8 character), const char *name) + { + set_keyboard_callback(output_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); + } + // FIXME: this should be aware of current device for resolving the tag + template <class FunctionClass> + void set_keyboard_callback(const char *devname, void (FunctionClass::*callback)(u8 character), const char *name) + { + set_keyboard_callback(output_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); + } + void set_keyboard_callback(output_delegate callback) { m_keyboard_cb = callback; } virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/machine/pc_fdc.cpp b/src/devices/machine/pc_fdc.cpp index 35b83a82aac..601c4c813c5 100644 --- a/src/devices/machine/pc_fdc.cpp +++ b/src/devices/machine/pc_fdc.cpp @@ -75,7 +75,7 @@ void pc_fdc_family_device::dma_w(uint8_t data) void pc_fdc_family_device::device_add_mconfig(machine_config &config) { - UPD765A(config, fdc, false, false); + UPD765A(config, fdc, 8'000'000, false, false); fdc->intrq_wr_callback().set(FUNC(pc_fdc_family_device::irq_w)); fdc->drq_wr_callback().set(FUNC(pc_fdc_family_device::drq_w)); } diff --git a/src/devices/machine/pdc.cpp b/src/devices/machine/pdc.cpp index 23e6b1b45ac..99964762548 100644 --- a/src/devices/machine/pdc.cpp +++ b/src/devices/machine/pdc.cpp @@ -264,7 +264,7 @@ void pdc_device::device_add_mconfig(machine_config &config) //MCFG_QUANTUM_PERFECT_CPU(M6502_TAG) /* Floppy Disk Controller - uPD765a - NEC D765AC-2 */ - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 4'000'000, true, true); m_fdc->intrq_wr_callback().set(FUNC(pdc_device::fdc_irq)); m_fdc->drq_wr_callback().set(m_dma8237, FUNC(am9517a_device::dreq0_w)); //.invert(); diff --git a/src/devices/machine/terminal.cpp b/src/devices/machine/terminal.cpp index 2d18fd50a90..be9b501c687 100644 --- a/src/devices/machine/terminal.cpp +++ b/src/devices/machine/terminal.cpp @@ -334,8 +334,8 @@ MACHINE_CONFIG_START(generic_terminal_device::device_add_mconfig) MCFG_SCREEN_VISIBLE_AREA(0, generic_terminal_device::TERMINAL_WIDTH*8-1, 0, generic_terminal_device::TERMINAL_HEIGHT*10-1) MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, generic_terminal_device, update) - MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(generic_terminal_device, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, KEYBOARD_TAG, 0)); + keyboard.set_keyboard_callback(FUNC(generic_terminal_device::kbd_put)); SPEAKER(config, "bell").front_center(); MCFG_DEVICE_ADD("beeper", BEEP, 2'000) diff --git a/src/devices/machine/terminal.h b/src/devices/machine/terminal.h index e200de29cd6..bf2f81c07f7 100644 --- a/src/devices/machine/terminal.h +++ b/src/devices/machine/terminal.h @@ -13,14 +13,6 @@ /*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_GENERIC_TERMINAL_KEYBOARD_CB(cb) \ - downcast<generic_terminal_device &>(*device).set_keyboard_callback((KEYBOARDCB_##cb)); - - -/*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -31,7 +23,18 @@ class generic_terminal_device : public device_t public: generic_terminal_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> void set_keyboard_callback(Object &&cb) { m_keyboard_cb = std::forward<Object>(cb); } + template <class FunctionClass> + void set_keyboard_callback(void (FunctionClass::*callback)(u8 character), const char *name) + { + set_keyboard_callback(generic_keyboard_device::output_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); + } + // FIXME: this should be aware of current device for resolving the tag + template <class FunctionClass> + void set_keyboard_callback(const char *devname, void (FunctionClass::*callback)(u8 character), const char *name) + { + set_keyboard_callback(generic_keyboard_device::output_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); + } + void set_keyboard_callback(generic_keyboard_device::output_delegate callback) { m_keyboard_cb = callback; } DECLARE_WRITE8_MEMBER(write) { term_write(data); } diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 3925a866145..bfbf277449b 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -46,7 +46,7 @@ DEFINE_DEVICE_TYPE(UPD72065, upd72065_device, "upd72065", "NEC DEFINE_DEVICE_TYPE(I82072, i82072_device, "i82072", "Intel 82072 FDC") DEFINE_DEVICE_TYPE(SMC37C78, smc37c78_device, "smc37c78", "SMC FDC73C78 FDC") DEFINE_DEVICE_TYPE(N82077AA, n82077aa_device, "n82077aa", "Intel N82077AA FDC") -DEFINE_DEVICE_TYPE(PC_FDC_SUPERIO, pc_fdc_superio_device, "pc_fdc_superio", "PC FDC SUPERIO") +DEFINE_DEVICE_TYPE(PC_FDC_SUPERIO, pc_fdc_superio_device, "pc_fdc_superio", "Winbond PC FDC Super I/O") DEFINE_DEVICE_TYPE(DP8473, dp8473_device, "dp8473", "National Semiconductor DP8473 FDC") DEFINE_DEVICE_TYPE(PC8477A, pc8477a_device, "pc8477a", "National Semiconductor PC8477A FDC") DEFINE_DEVICE_TYPE(WD37C65C, wd37c65c_device, "wd37c65c", "Western Digital WD37C65C FDC") diff --git a/src/devices/machine/upd765.h b/src/devices/machine/upd765.h index 270a563bf0c..dd2e30ce78a 100644 --- a/src/devices/machine/upd765.h +++ b/src/devices/machine/upd765.h @@ -379,8 +379,8 @@ protected: class upd765a_device : public upd765_family_device { public: - upd765a_device(const machine_config &mconfig, const char *tag, device_t *owner, bool ready, bool select) - : upd765a_device(mconfig, tag, owner, 0U) + upd765a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, bool ready, bool select) + : upd765a_device(mconfig, tag, owner, clock) { set_ready_line_connected(ready); set_select_lines_connected(select); @@ -392,8 +392,8 @@ public: class upd765b_device : public upd765_family_device { public: - upd765b_device(const machine_config &mconfig, const char *tag, device_t *owner, bool ready, bool select) - : upd765b_device(mconfig, tag, owner, 0U) + upd765b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, bool ready, bool select) + : upd765b_device(mconfig, tag, owner, clock) { set_ready_line_connected(ready); set_select_lines_connected(select); @@ -405,8 +405,8 @@ public: class i8272a_device : public upd765_family_device { public: - i8272a_device(const machine_config &mconfig, const char *tag, device_t *owner, bool ready) - : i8272a_device(mconfig, tag, owner, 0U) + i8272a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, bool ready) + : i8272a_device(mconfig, tag, owner, clock) { set_ready_line_connected(ready); } @@ -417,12 +417,12 @@ public: class i82072_device : public upd765_family_device { public: - i82072_device(const machine_config &mconfig, const char *tag, device_t *owner, bool ready) - : i82072_device(mconfig, tag, owner) + i82072_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, bool ready) + : i82072_device(mconfig, tag, owner, clock) { set_ready_line_connected(ready); } - i82072_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 24'000'000); + i82072_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; @@ -456,7 +456,7 @@ private: class smc37c78_device : public upd765_family_device { public: - smc37c78_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + smc37c78_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; }; @@ -478,8 +478,8 @@ public: class n82077aa_device : public upd765_family_device { public: - n82077aa_device(const machine_config &mconfig, const char *tag, device_t *owner, int mode) - : n82077aa_device(mconfig, tag, owner, 0U) + n82077aa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, int mode) + : n82077aa_device(mconfig, tag, owner, clock) { set_mode(mode); } @@ -490,35 +490,35 @@ public: class pc_fdc_superio_device : public upd765_family_device { public: - pc_fdc_superio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + pc_fdc_superio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; }; class dp8473_device : public upd765_family_device { public: - dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + dp8473_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; }; class pc8477a_device : public upd765_family_device { public: - pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + pc8477a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; }; class wd37c65c_device : public upd765_family_device { public: - wd37c65c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + wd37c65c_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; }; class mcs3201_device : public upd765_family_device { public: - mcs3201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + mcs3201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers auto input_handler() { return m_input_handler.bind(); } @@ -535,7 +535,7 @@ private: class tc8566af_device : public upd765_family_device { public: - tc8566af_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + tc8566af_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp index 031bfffc290..68e3bf7c2d2 100644 --- a/src/emu/emuopts.cpp +++ b/src/emu/emuopts.cpp @@ -30,14 +30,14 @@ const options_entry emu_options::s_option_entries[] = // config options { nullptr, nullptr, OPTION_HEADER, "CORE CONFIGURATION OPTIONS" }, { OPTION_READCONFIG ";rc", "1", OPTION_BOOLEAN, "enable loading of configuration files" }, - { OPTION_WRITECONFIG ";wc", "0", OPTION_BOOLEAN, "writes configuration to (driver).ini on exit" }, + { OPTION_WRITECONFIG ";wc", "0", OPTION_BOOLEAN, "write configuration to (driver).ini on exit" }, // search path options { nullptr, nullptr, OPTION_HEADER, "CORE SEARCH PATH OPTIONS" }, - { OPTION_HOMEPATH, ".", OPTION_STRING, "path to home directory (read/write) location" }, - { OPTION_MEDIAPATH ";rp;biospath;bp", "roms", OPTION_STRING, "path to ROMsets and hard disk images" }, - { OPTION_HASHPATH ";hash_directory;hash", "hash", OPTION_STRING, "path to hash files" }, - { OPTION_SAMPLEPATH ";sp", "samples", OPTION_STRING, "path to samplesets" }, + { OPTION_HOMEPATH, ".", OPTION_STRING, "path to base folder for plugin data (read/write)" }, + { OPTION_MEDIAPATH ";rp;biospath;bp", "roms", OPTION_STRING, "path to ROM sets and hard disk images" }, + { OPTION_HASHPATH ";hash_directory;hash", "hash", OPTION_STRING, "path to software definition files" }, + { OPTION_SAMPLEPATH ";sp", "samples", OPTION_STRING, "path to audio sample sets" }, { OPTION_ARTPATH, "artwork", OPTION_STRING, "path to artwork files" }, { OPTION_CTRLRPATH, "ctrlr", OPTION_STRING, "path to controller definitions" }, { OPTION_INIPATH, ".;ini;ini/presets", OPTION_STRING, "path to ini files" }, @@ -45,7 +45,7 @@ const options_entry emu_options::s_option_entries[] = { OPTION_CHEATPATH, "cheat", OPTION_STRING, "path to cheat files" }, { OPTION_CROSSHAIRPATH, "crosshair", OPTION_STRING, "path to crosshair files" }, { OPTION_PLUGINSPATH, "plugins", OPTION_STRING, "path to plugin files" }, - { OPTION_LANGUAGEPATH, "language", OPTION_STRING, "path to language files" }, + { OPTION_LANGUAGEPATH, "language", OPTION_STRING, "path to UI translation files" }, { OPTION_SWPATH, "software", OPTION_STRING, "path to loose software" }, // output directory options @@ -61,7 +61,7 @@ const options_entry emu_options::s_option_entries[] = // state/playback options { nullptr, nullptr, OPTION_HEADER, "CORE STATE/PLAYBACK OPTIONS" }, { OPTION_STATE, nullptr, OPTION_STRING, "saved state to load" }, - { OPTION_AUTOSAVE, "0", OPTION_BOOLEAN, "enable automatic restore at startup, and automatic save at exit time" }, + { OPTION_AUTOSAVE, "0", OPTION_BOOLEAN, "automatically restore state on start and save on exit for supported systems" }, { OPTION_REWIND, "0", OPTION_BOOLEAN, "enable rewind savestates" }, { OPTION_REWIND_CAPACITY "(1-2048)", "100", OPTION_INTEGER, "rewind buffer size in megabytes" }, { OPTION_PLAYBACK ";pb", nullptr, OPTION_STRING, "playback an input file" }, @@ -81,24 +81,24 @@ const options_entry emu_options::s_option_entries[] = // performance options { nullptr, nullptr, OPTION_HEADER, "CORE PERFORMANCE OPTIONS" }, - { OPTION_AUTOFRAMESKIP ";afs", "0", OPTION_BOOLEAN, "enable automatic frameskip selection" }, + { OPTION_AUTOFRAMESKIP ";afs", "0", OPTION_BOOLEAN, "enable automatic frameskip adjustment to maintain emulation speed" }, { OPTION_FRAMESKIP ";fs(0-10)", "0", OPTION_INTEGER, "set frameskip to fixed value, 0-10 (autoframeskip must be disabled)" }, { OPTION_SECONDS_TO_RUN ";str", "0", OPTION_INTEGER, "number of emulated seconds to run before automatically exiting" }, - { OPTION_THROTTLE, "1", OPTION_BOOLEAN, "enable throttling to keep game running in sync with real time" }, + { OPTION_THROTTLE, "1", OPTION_BOOLEAN, "throttle emulation to keep system running in sync with real time" }, { OPTION_SLEEP, "1", OPTION_BOOLEAN, "enable sleeping, which gives time back to other applications when idle" }, { OPTION_SPEED "(0.01-100)", "1.0", OPTION_FLOAT, "controls the speed of gameplay, relative to realtime; smaller numbers are slower" }, - { OPTION_REFRESHSPEED ";rs", "0", OPTION_BOOLEAN, "automatically adjusts the speed of gameplay to keep the refresh rate lower than the screen" }, + { OPTION_REFRESHSPEED ";rs", "0", OPTION_BOOLEAN, "automatically adjust emulation speed to keep the emulated refresh rate slower than the host screen" }, // render options { nullptr, nullptr, OPTION_HEADER, "CORE RENDER OPTIONS" }, - { OPTION_KEEPASPECT ";ka", "1", OPTION_BOOLEAN, "constrain to the proper aspect ratio" }, - { OPTION_UNEVENSTRETCH ";ues", "1", OPTION_BOOLEAN, "allow non-integer stretch factors" }, - { OPTION_UNEVENSTRETCHX ";uesx", "0", OPTION_BOOLEAN, "allow non-integer stretch factors only on horizontal axis"}, - { OPTION_UNEVENSTRETCHY ";uesy", "0", OPTION_BOOLEAN, "allow non-integer stretch factors only on vertical axis"}, + { OPTION_KEEPASPECT ";ka", "1", OPTION_BOOLEAN, "maintain aspect ratio when scaling to fill output screen/window" }, + { OPTION_UNEVENSTRETCH ";ues", "1", OPTION_BOOLEAN, "allow non-integer ratios when scaling to fill output screen/window horizontally or vertically" }, + { OPTION_UNEVENSTRETCHX ";uesx", "0", OPTION_BOOLEAN, "allow non-integer ratios when scaling to fill output screen/window horizontally"}, + { OPTION_UNEVENSTRETCHY ";uesy", "0", OPTION_BOOLEAN, "allow non-integer ratios when scaling to fill otuput screen/window vertially"}, { OPTION_AUTOSTRETCHXY ";asxy", "0", OPTION_BOOLEAN, "automatically apply -unevenstretchx/y based on source native orientation"}, { OPTION_INTOVERSCAN ";ios", "0", OPTION_BOOLEAN, "allow overscan on integer scaled targets"}, - { OPTION_INTSCALEX ";sx", "0", OPTION_INTEGER, "set horizontal integer scale factor."}, - { OPTION_INTSCALEY ";sy", "0", OPTION_INTEGER, "set vertical integer scale."}, + { OPTION_INTSCALEX ";sx", "0", OPTION_INTEGER, "set horizontal integer scale factor"}, + { OPTION_INTSCALEY ";sy", "0", OPTION_INTEGER, "set vertical integer scale factor"}, // rotation options { nullptr, nullptr, OPTION_HEADER, "CORE ROTATION OPTIONS" }, @@ -112,7 +112,7 @@ const options_entry emu_options::s_option_entries[] = // artwork options { nullptr, nullptr, OPTION_HEADER, "CORE ARTWORK OPTIONS" }, - { OPTION_ARTWORK_CROP ";artcrop", "0", OPTION_BOOLEAN, "crop artwork to game screen size" }, + { OPTION_ARTWORK_CROP ";artcrop", "0", OPTION_BOOLEAN, "crop artwork so emulated screen image fills output screen/window in one axis" }, { OPTION_USE_BACKDROPS ";backdrop", "1", OPTION_BOOLEAN, "enable backdrops if artwork is enabled and available" }, { OPTION_USE_OVERLAYS ";overlay", "1", OPTION_BOOLEAN, "enable overlays if artwork is enabled and available" }, { OPTION_USE_BEZELS ";bezel", "1", OPTION_BOOLEAN, "enable bezels if artwork is enabled and available" }, @@ -144,7 +144,7 @@ const options_entry emu_options::s_option_entries[] = // input options { nullptr, nullptr, OPTION_HEADER, "CORE INPUT OPTIONS" }, - { OPTION_COIN_LOCKOUT ";coinlock", "1", OPTION_BOOLEAN, "enable coin lockouts to actually lock out coins" }, + { OPTION_COIN_LOCKOUT ";coinlock", "1", OPTION_BOOLEAN, "ignore coin inputs if coin lockout ouput is active" }, { OPTION_CTRLR, nullptr, OPTION_STRING, "preconfigure for specified controller" }, { OPTION_MOUSE, "0", OPTION_BOOLEAN, "enable mouse input" }, { OPTION_JOYSTICK ";joy", "1", OPTION_BOOLEAN, "enable joystick input" }, @@ -176,7 +176,7 @@ const options_entry emu_options::s_option_entries[] = { nullptr, nullptr, OPTION_HEADER, "CORE DEBUGGING OPTIONS" }, { OPTION_VERBOSE ";v", "0", OPTION_BOOLEAN, "display additional diagnostic information" }, { OPTION_LOG, "0", OPTION_BOOLEAN, "generate an error.log file" }, - { OPTION_OSLOG, "0", OPTION_BOOLEAN, "output error.log data to the system debugger" }, + { OPTION_OSLOG, "0", OPTION_BOOLEAN, "output error.log data to system diagnostic output (debugger or standard error)" }, { OPTION_DEBUG ";d", "0", OPTION_BOOLEAN, "enable/disable debugger" }, { OPTION_UPDATEINPAUSE, "0", OPTION_BOOLEAN, "keep calling video updates while in pause" }, { OPTION_DEBUGSCRIPT, nullptr, OPTION_STRING, "script for debugger" }, @@ -191,32 +191,32 @@ const options_entry emu_options::s_option_entries[] = // misc options { nullptr, nullptr, OPTION_HEADER, "CORE MISC OPTIONS" }, - { OPTION_DRC, "1", OPTION_BOOLEAN, "enable DRC cpu core if available" }, - { OPTION_DRC_USE_C, "0", OPTION_BOOLEAN, "force DRC use C backend" }, + { OPTION_DRC, "1", OPTION_BOOLEAN, "enable DRC CPU core if available" }, + { OPTION_DRC_USE_C, "0", OPTION_BOOLEAN, "force DRC to use C backend" }, { OPTION_DRC_LOG_UML, "0", OPTION_BOOLEAN, "write DRC UML disassembly log" }, { OPTION_DRC_LOG_NATIVE, "0", OPTION_BOOLEAN, "write DRC native disassembly log" }, { OPTION_BIOS, nullptr, OPTION_STRING, "select the system BIOS to use" }, { OPTION_CHEAT ";c", "0", OPTION_BOOLEAN, "enable cheat subsystem" }, - { OPTION_SKIP_GAMEINFO, "0", OPTION_BOOLEAN, "skip displaying the information screen at startup" }, + { OPTION_SKIP_GAMEINFO, "0", OPTION_BOOLEAN, "skip displaying the system information screen at startup" }, { OPTION_UI_FONT, "default", OPTION_STRING, "specify a font to use" }, { OPTION_UI, "cabinet", OPTION_STRING, "type of UI (simple|cabinet)" }, { OPTION_RAMSIZE ";ram", nullptr, OPTION_STRING, "size of RAM (if supported by driver)" }, - { OPTION_CONFIRM_QUIT, "0", OPTION_BOOLEAN, "display confirm quit screen on exit" }, - { OPTION_UI_MOUSE, "1", OPTION_BOOLEAN, "display ui mouse cursor" }, - { OPTION_LANGUAGE ";lang", "English", OPTION_STRING, "display language" }, - { OPTION_NVRAM_SAVE ";nvwrite", "1", OPTION_BOOLEAN, "save NVRAM on exit" }, + { OPTION_CONFIRM_QUIT, "0", OPTION_BOOLEAN, "ask for confirmation before exiting" }, + { OPTION_UI_MOUSE, "1", OPTION_BOOLEAN, "display UI mouse cursor" }, + { OPTION_LANGUAGE ";lang", "English", OPTION_STRING, "set UI display language" }, + { OPTION_NVRAM_SAVE ";nvwrite", "1", OPTION_BOOLEAN, "save NVRAM data on exit" }, { nullptr, nullptr, OPTION_HEADER, "SCRIPTING OPTIONS" }, { OPTION_AUTOBOOT_COMMAND ";ab", nullptr, OPTION_STRING, "command to execute after machine boot" }, - { OPTION_AUTOBOOT_DELAY, "0", OPTION_INTEGER, "timer delay in sec to trigger command execution on autoboot" }, - { OPTION_AUTOBOOT_SCRIPT ";script", nullptr, OPTION_STRING, "lua script to execute after machine boot" }, - { OPTION_CONSOLE, "0", OPTION_BOOLEAN, "enable emulator LUA console" }, - { OPTION_PLUGINS, "1", OPTION_BOOLEAN, "enable LUA plugin support" }, + { OPTION_AUTOBOOT_DELAY, "0", OPTION_INTEGER, "delay before executing autoboot command (seconds)" }, + { OPTION_AUTOBOOT_SCRIPT ";script", nullptr, OPTION_STRING, "Lua script to execute after machine boot" }, + { OPTION_CONSOLE, "0", OPTION_BOOLEAN, "enable emulator Lua console" }, + { OPTION_PLUGINS, "1", OPTION_BOOLEAN, "enable Lua plugin support" }, { OPTION_PLUGIN, nullptr, OPTION_STRING, "list of plugins to enable" }, { OPTION_NO_PLUGIN, nullptr, OPTION_STRING, "list of plugins to disable" }, { nullptr, nullptr, OPTION_HEADER, "HTTP SERVER OPTIONS" }, - { OPTION_HTTP, "0", OPTION_BOOLEAN, "HTTP server enable" }, + { OPTION_HTTP, "0", OPTION_BOOLEAN, "enable HTTP server" }, { OPTION_HTTP_PORT, "8080", OPTION_INTEGER, "HTTP server port" }, { OPTION_HTTP_ROOT, "web", OPTION_STRING, "HTTP server document root" }, diff --git a/src/lib/util/png.cpp b/src/lib/util/png.cpp index 0a3b616b01f..6b13f4f9593 100644 --- a/src/lib/util/png.cpp +++ b/src/lib/util/png.cpp @@ -705,7 +705,7 @@ public: { // read a chunk std::unique_ptr<std::uint8_t []> chunk_data; - std::uint32_t chunk_type, chunk_length; + std::uint32_t chunk_type = 0, chunk_length; error = read_chunk(fp, chunk_data, chunk_type, chunk_length); if (PNGERR_NONE == error) { diff --git a/src/mame/drivers/a5105.cpp b/src/mame/drivers/a5105.cpp index c4eec0078dc..6f0a31c9c9c 100644 --- a/src/mame/drivers/a5105.cpp +++ b/src/mame/drivers/a5105.cpp @@ -608,7 +608,7 @@ MACHINE_CONFIG_START(a5105_state::a5105) MCFG_CASSETTE_ADD( "cassette" ) - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765a:0", a5105_floppies, "525qd", a5105_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765a:1", a5105_floppies, "525qd", a5105_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765a:2", a5105_floppies, "525qd", a5105_state::floppy_formats) diff --git a/src/mame/drivers/abc80.cpp b/src/mame/drivers/abc80.cpp index 957288239c4..1508992d2d6 100644 --- a/src/mame/drivers/abc80.cpp +++ b/src/mame/drivers/abc80.cpp @@ -528,8 +528,8 @@ MACHINE_CONFIG_START(abc80_state::abc80) MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abc80_cards, "abcexp") RS232_PORT(config, RS232_TAG, default_rs232_devices, nullptr); - MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(abc80_state, kbd_w)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, KEYBOARD_TAG, 0)); + keyboard.set_keyboard_callback(FUNC(abc80_state::kbd_w)); MCFG_QUICKLOAD_ADD("quickload", abc80_state, bac, "bac", 2) diff --git a/src/mame/drivers/acrnsys.cpp b/src/mame/drivers/acrnsys.cpp index dff9c24849e..f24b1a4f120 100644 --- a/src/mame/drivers/acrnsys.cpp +++ b/src/mame/drivers/acrnsys.cpp @@ -360,7 +360,8 @@ void acrnsys_state::kbd_put_pb(uint8_t data) 6502 CPU Board - Part No. 200,000 ***************************************************************************/ -MACHINE_CONFIG_START(acrnsys_state::a6502) +void acrnsys_state::a6502(machine_config &config) +{ M6502(config, m_maincpu, 24_MHz_XTAL / 12); /* 1MHz 6502 CPU */ m_maincpu->set_addrmap(AS_PROGRAM, &acrnsys_state::a6502_mem); @@ -371,16 +372,17 @@ MACHINE_CONFIG_START(acrnsys_state::a6502) //m_ins8154->out_a().set(FUNC(acrnsys_state::ins8154_pa_w)); m_ins8154->in_b().set(FUNC(acrnsys_state::kbd_r)); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(acrnsys_state, kbd_put)) -MACHINE_CONFIG_END + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(acrnsys_state::kbd_put)); +} /*************************************************************************** 6502A CPU Board - Part No. 200,005 ***************************************************************************/ -MACHINE_CONFIG_START(acrnsys_state::a6502a) +void acrnsys_state::a6502a(machine_config &config) +{ M6502(config, m_maincpu, 24_MHz_XTAL / 12); /* 2MHz 6502A CPU */ m_maincpu->set_addrmap(AS_PROGRAM, &acrnsys_state::a6502a_mem); @@ -391,16 +393,17 @@ MACHINE_CONFIG_START(acrnsys_state::a6502a) //m_via6522->cb2_handler().set(FUNC(acrnsys_state::cass_w)); m_via6522->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>)); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(acrnsys_state, kbd_put)) -MACHINE_CONFIG_END + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(acrnsys_state::kbd_put)); +} /*************************************************************************** 6809 CPU Board - Part No. 200,012 ***************************************************************************/ -MACHINE_CONFIG_START(acrnsys_state::a6809) +void acrnsys_state::a6809(machine_config &config) +{ MC6809(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &acrnsys_state::a6809_mem); @@ -415,11 +418,12 @@ MACHINE_CONFIG_START(acrnsys_state::a6809) CENTRONICS(config, m_centronics, centronics_devices, "printer"); m_centronics->ack_handler().set(m_via6522, FUNC(via6522_device::write_ca1)); m_centronics->busy_handler().set(m_via6522, FUNC(via6522_device::write_pa7)); - MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") + output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out")); + m_centronics->set_output_latch(latch); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(acrnsys_state, kbd_put_pb)) -MACHINE_CONFIG_END + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(acrnsys_state::kbd_put_pb)); +} /*************************************************************************** diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp index 4c3bd332b27..815272e277c 100644 --- a/src/mame/drivers/alphatro.cpp +++ b/src/mame/drivers/alphatro.cpp @@ -47,14 +47,13 @@ #include "softlist.h" #include "speaker.h" -#define MAIN_CLOCK XTAL(4'000'000) - class alphatro_state : public driver_device { public: - alphatro_state(const machine_config &mconfig, device_type type, const char *tag) + alphatro_state(const machine_config &mconfig, device_type type, const char *tag, bool is_ntsc) : driver_device(mconfig, type, tag) + , m_is_ntsc(is_ntsc) , m_ram(*this, RAM_TAG) , m_p_videoram(*this, "videoram") , m_screen(*this, "screen") @@ -93,13 +92,13 @@ private: DECLARE_WRITE8_MEMBER(rama000_w); DECLARE_READ8_MEMBER (rame000_r); DECLARE_WRITE8_MEMBER(rame000_w); - DECLARE_READ8_MEMBER(port10_r); - DECLARE_WRITE8_MEMBER(port10_w); - DECLARE_WRITE8_MEMBER(port20_w); - DECLARE_READ8_MEMBER(port30_r); - DECLARE_WRITE8_MEMBER(port30_w); - DECLARE_READ8_MEMBER(portf0_r); - DECLARE_WRITE8_MEMBER(portf0_w); + uint8_t port10_r(); + void port10_w(uint8_t data); + void port20_w(uint8_t data); + uint8_t port30_r(); + void port30_w(uint8_t data); + uint8_t portf0_r(); + void portf0_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(txdata_callback); DECLARE_WRITE_LINE_MEMBER(hrq_w); DECLARE_WRITE_LINE_MEMBER(fdc_irq_w); @@ -118,6 +117,7 @@ private: void monbank_map(address_map &map); void rombank_map(address_map &map); + const bool m_is_ntsc; uint8_t *m_ram_ptr; required_device<ram_device> m_ram; required_shared_ptr<u8> m_p_videoram; @@ -146,6 +146,22 @@ private: required_device<generic_slot_device> m_cart; }; +class alphatro_pal_state : public alphatro_state +{ +public: + alphatro_pal_state(const machine_config &mconfig, device_type type, const char *tag) + : alphatro_state(mconfig, type, tag, false) + { } +}; + +class alphatro_ntsc_state : public alphatro_state +{ +public: + alphatro_ntsc_state(const machine_config &mconfig, device_type type, const char *tag) + : alphatro_state(mconfig, type, tag, true) + { } +}; + void alphatro_state::update_banking() { if (m_port_10 & 0x80) // RAM at 0000? @@ -213,7 +229,7 @@ WRITE8_MEMBER(alphatro_state::rama000_w) { m_ram_ptr[offset+0xa000] = data; } READ8_MEMBER (alphatro_state::rame000_r) { return m_ram_ptr[offset+0xe000]; } WRITE8_MEMBER(alphatro_state::rame000_w) { m_ram_ptr[offset+0xe000] = data; } -READ8_MEMBER( alphatro_state::port10_r ) +uint8_t alphatro_state::port10_r() { // Bit 0 -> 1 = FDC is installed, 0 = not // Bit 1 -> 1 = Graphic Board is installed, 0 = not @@ -222,7 +238,7 @@ READ8_MEMBER( alphatro_state::port10_r ) // Bit 6 -> 1 = NTSC, 0 = PAL // Bit 7 -> 1 = vblank or hblank, 0 = active display area - u8 retval = 0x40; + u8 retval = m_is_ntsc ? 0x40 : 0x00; // we'll get "FDC present" and "graphics expansion present" from the config switches retval |= (m_config->read() & 3); @@ -235,7 +251,7 @@ READ8_MEMBER( alphatro_state::port10_r ) return retval; } -WRITE8_MEMBER( alphatro_state::port10_w ) +void alphatro_state::port10_w(uint8_t data) { // Bit 0 -> 0 = 40 cols; 1 = 80 cols // Bit 1 -> 0 = display enable, 1 = display inhibit @@ -246,9 +262,17 @@ WRITE8_MEMBER( alphatro_state::port10_w ) // Bit 6 -> 1 = select ROM pack at A000, 0 = RAM at A000 // Bit 7 -> 0 = ROM enabled at 0, 1 = RAM enabled - m_port_10 = data; + if (BIT(data ^ m_port_10, 0)) + { + if (BIT(data, 0)) + m_crtc->set_unscaled_clock(16_MHz_XTAL / 8); + else if (m_is_ntsc || system_bios() == 3) // kludge for bios 2, which expects a NTSC clock even for ~50 Hz video + m_crtc->set_unscaled_clock(14.318181_MHz_XTAL / 16); + else + m_crtc->set_unscaled_clock(17.73447_MHz_XTAL / 16); + } - data &= 0xfe; + m_port_10 = data; m_beep->set_state(BIT(data, 4)); @@ -260,7 +284,7 @@ WRITE8_MEMBER( alphatro_state::port10_w ) update_banking(); } -WRITE8_MEMBER( alphatro_state::port20_w ) +void alphatro_state::port20_w(uint8_t data) { // Bit 0 -> 0 = CRTC reset release, 1 = CRTC reset enable // Bit 1 -> 0 = Centronics reset release, 1 = Centronics reset enable @@ -276,7 +300,7 @@ WRITE8_MEMBER( alphatro_state::port20_w ) update_banking(); } -READ8_MEMBER( alphatro_state::port30_r ) +uint8_t alphatro_state::port30_r() { // Bit 0 -> SIOC // Bit 1 -> 1 = vsync, 0 = not @@ -290,17 +314,17 @@ READ8_MEMBER( alphatro_state::port30_r ) return retval; } -WRITE8_MEMBER( alphatro_state::port30_w ) +void alphatro_state::port30_w(uint8_t data) { m_port_30 = data; } -READ8_MEMBER( alphatro_state::portf0_r ) +uint8_t alphatro_state::portf0_r() { return m_fdc_irq << 6; } -WRITE8_MEMBER( alphatro_state::portf0_w) +void alphatro_state::portf0_w(uint8_t data) { if ((data & 0x1) && !(m_port_f0)) { @@ -588,6 +612,8 @@ GFXDECODE_END void alphatro_state::machine_start() { + m_port_10 = 0x01; + save_item(NAME(m_port_10)); save_item(NAME(m_port_20)); save_item(NAME(m_cass_data)); @@ -598,7 +624,8 @@ void alphatro_state::machine_start() void alphatro_state::machine_reset() { m_ram_ptr = m_ram->pointer(); - m_port_10 = m_port_20 = 0; + port10_w(0); + m_port_20 = 0; update_banking(); m_cass_data[0] = m_cass_data[1] = m_cass_data[2] = m_cass_data[3] = 0; @@ -702,35 +729,36 @@ static void alphatro_floppies(device_slot_interface &device) MACHINE_CONFIG_START(alphatro_state::alphatro) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80,MAIN_CLOCK) + MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4) MCFG_DEVICE_PROGRAM_MAP(alphatro_map) MCFG_DEVICE_IO_MAP(alphatro_io) /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not correct - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + if (m_is_ntsc) + screen.set_raw(16_MHz_XTAL, 1016, 0, 640, 271, 0, 216); + else + screen.set_raw(16_MHz_XTAL, 1016, 0, 640, 314, 0, 240); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); + MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_alphatro) MCFG_PALETTE_ADD("palette", 9) // 8 colours + amber MCFG_PALETTE_INIT_OWNER(alphatro_state, alphatro) /* sound hardware */ SPEAKER(config, "mono").front_center(); - BEEP(config, "beeper", 950).add_route(ALL_OUTPUTS, "mono", 1.00); /* piezo-device needs to be measured */ + BEEP(config, "beeper", 16_MHz_XTAL / 4 / 13 / 128).add_route(ALL_OUTPUTS, "mono", 1.00); // nominally 2.4 kHz WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25); /* Devices */ - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 16_MHz_XTAL / 2, true, true); // clocked through SED-9420C m_fdc->intrq_wr_callback().set(FUNC(alphatro_state::fdc_irq_w)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(i8257_device::dreq2_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatro_floppies, "525dd", alphatro_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatro_floppies, "525dd", alphatro_state::floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list", "alphatro_flop") - I8257(config, m_dmac, MAIN_CLOCK); + I8257(config, m_dmac, 16_MHz_XTAL / 4); m_dmac->out_hrq_cb().set(FUNC(alphatro_state::hrq_w)); m_dmac->in_memr_cb().set(FUNC(alphatro_state::ram0000_r)); m_dmac->out_memw_cb().set(FUNC(alphatro_state::ram0000_w)); @@ -738,16 +766,16 @@ MACHINE_CONFIG_START(alphatro_state::alphatro) m_dmac->out_iow_cb<2>().set("fdc", FUNC(upd765a_device::mdma_w)); m_dmac->out_tc_cb().set("fdc", FUNC(upd765a_device::tc_line_w)); - MC6845(config, m_crtc, XTAL(12'288'000) / 8); // clk unknown + HD6845(config, m_crtc, 16_MHz_XTAL / 8); m_crtc->set_screen(m_screen); m_crtc->set_show_border_area(false); m_crtc->set_char_width(8); m_crtc->set_update_row_callback(FUNC(alphatro_state::crtc_update_row), this); - I8251(config, m_usart, 0); + I8251(config, m_usart, 16_MHz_XTAL / 4); m_usart->txd_handler().set(FUNC(alphatro_state::txdata_callback)); - clock_device &usart_clock(CLOCK(config, "usart_clock", 19218)); // 19218 to load a real tape, 19222 to load a tape made by this driver + clock_device &usart_clock(CLOCK(config, "usart_clock", /*16_MHz_XTAL / 4 / 13 / 16*/ 19218)); // 19218 to load a real tape, 19222 to load a tape made by this driver usart_clock.signal_handler().set(m_usart, FUNC(i8251_device::write_txc)); usart_clock.signal_handler().append(m_usart, FUNC(i8251_device::write_rxc)); @@ -806,4 +834,7 @@ ROM_START( alphatro ) ROMX_LOAD( "b40r_ic1067.bin", 0x0000, 0x1000, CRC(543e3ee8) SHA1(3e6c6f8c85d3a5d0735edfec52709c5670ff1646), ROM_BIOS(2) ) ROM_END -COMP( 1983, alphatro, 0, 0, alphatro, alphatro, alphatro_state, empty_init, "Triumph-Adler", "Alphatronic PC", MACHINE_SUPPORTS_SAVE ) +#define rom_alphatron rom_alphatro + +COMP( 1983, alphatro, 0, 0, alphatro, alphatro, alphatro_pal_state, empty_init, "Triumph-Adler", "Alphatronic PC (PAL)", MACHINE_SUPPORTS_SAVE ) +COMP( 1983, alphatron, alphatro, 0, alphatro, alphatro, alphatro_ntsc_state, empty_init, "Triumph-Adler", "Alphatronic PC (NTSC)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/altos486.cpp b/src/mame/drivers/altos486.cpp index 59c93029038..fa115fe4ae8 100644 --- a/src/mame/drivers/altos486.cpp +++ b/src/mame/drivers/altos486.cpp @@ -134,12 +134,12 @@ void altos486_state::altos486_z80_io(address_map &map) void altos486_state::altos486(machine_config &config) { - I80186(config, m_maincpu, XTAL(8'000'000)); + I80186(config, m_maincpu, 32_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &altos486_state::altos486_mem); m_maincpu->set_addrmap(AS_IO, &altos486_state::altos486_io); m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); // yes, really - z80_device &iocpu(Z80(config, "iocpu", XTAL(8'000'000) / 2)); + z80_device &iocpu(Z80(config, "iocpu", 32_MHz_XTAL / 8)); iocpu.set_addrmap(AS_PROGRAM, &altos486_state::altos486_z80_mem); iocpu.set_addrmap(AS_IO, &altos486_state::altos486_z80_io); @@ -150,10 +150,10 @@ void altos486_state::altos486(machine_config &config) I8255(config, "ppi8255"); - UPD765A(config, "fdc", false, false); + UPD765A(config, "fdc", 32_MHz_XTAL / 4, false, false); FLOPPY_CONNECTOR(config, "fdc:0", altos486_floppies, "525qd", altos486_state::floppy_formats).set_fixed(true); - z80sio0_device& sio0(Z80SIO0(config, "sio0", 4000000)); + z80sio0_device& sio0(Z80SIO0(config, "sio0", 32_MHz_XTAL / 8)); sio0.out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd)); sio0.out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr)); sio0.out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts)); @@ -162,7 +162,7 @@ void altos486_state::altos486(machine_config &config) sio0.out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts)); //sio0.out_int_callback().set(FUNC(altos486_state::sio_interrupt)); - z80sio0_device& sio1(Z80SIO0(config, "sio1", 4000000)); + z80sio0_device& sio1(Z80SIO0(config, "sio1", 32_MHz_XTAL / 8)); sio1.out_txda_callback().set("rs232c", FUNC(rs232_port_device::write_txd)); sio1.out_dtra_callback().set("rs232c", FUNC(rs232_port_device::write_dtr)); sio1.out_rtsa_callback().set("rs232c", FUNC(rs232_port_device::write_rts)); @@ -171,13 +171,13 @@ void altos486_state::altos486(machine_config &config) sio1.out_rtsb_callback().set("rs232d", FUNC(rs232_port_device::write_rts)); //sio1.out_int_callback().set(FUNC(altos486_state::sio_interrupt)); - z80sio0_device& sio2(Z80SIO0(config, "sio2", 4000000)); + z80sio0_device& sio2(Z80SIO0(config, "sio2", 32_MHz_XTAL / 8)); sio2.out_txda_callback().set("rs232_lp", FUNC(rs232_port_device::write_txd)); sio2.out_dtra_callback().set("rs232_lp", FUNC(rs232_port_device::write_dtr)); sio2.out_rtsa_callback().set("rs232_lp", FUNC(rs232_port_device::write_rts)); //sio2.out_int_callback().set(FUNC(altos486_state::sio_interrupt)); - i8274_device& i8274(I8274(config, "i8274", XTAL(16'000'000)/4)); + i8274_device& i8274(I8274(config, "i8274", 32_MHz_XTAL / 8)); i8274.out_txda_callback().set("rs422_wn", FUNC(rs232_port_device::write_txd)); i8274.out_dtra_callback().set("rs422_wn", FUNC(rs232_port_device::write_dtr)); i8274.out_rtsa_callback().set("rs422_wn", FUNC(rs232_port_device::write_rts)); @@ -215,14 +215,14 @@ void altos486_state::altos486(machine_config &config) rs422_wn.cts_handler().set("i8274", FUNC(z80dart_device::ctsa_w)); pit8253_device &pit0(PIT8253(config, "pit0", 0)); - pit0.set_clk<0>(XTAL(22'118'400)/18); - pit0.set_clk<1>(XTAL(22'118'400)/144); - pit0.set_clk<2>(XTAL(22'118'400)/18); + pit0.set_clk<0>(XTAL(22'118'400)/18); // FIXME + pit0.set_clk<1>(XTAL(22'118'400)/144); // FIXME + pit0.set_clk<2>(XTAL(22'118'400)/18); // FIXME pit8253_device &pit1(PIT8253(config, "pit1", 0)); - pit1.set_clk<0>(XTAL(22'118'400)/18); - pit1.set_clk<1>(XTAL(22'118'400)/144); - pit1.set_clk<2>(XTAL(22'118'400)/18); + pit1.set_clk<0>(XTAL(22'118'400)/18); // FIXME + pit1.set_clk<1>(XTAL(22'118'400)/144); // FIXME + pit1.set_clk<2>(XTAL(22'118'400)/18); // FIXME } diff --git a/src/mame/drivers/amstrad.cpp b/src/mame/drivers/amstrad.cpp index 5a12e859c66..60de93a33e7 100644 --- a/src/mame/drivers/amstrad.cpp +++ b/src/mame/drivers/amstrad.cpp @@ -985,7 +985,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(amstrad_state::cpc664) amstrad_base(config); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 16_MHz_XTAL / 4, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", amstrad_floppies, "3ssdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "35ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") @@ -1003,7 +1003,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(amstrad_state::cpc6128) amstrad_base(config); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 16_MHz_XTAL / 4, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", amstrad_floppies, "3ssdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", amstrad_floppies, "35ssdd", floppy_image_device::default_floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","cpc_flop") @@ -1089,7 +1089,7 @@ MACHINE_CONFIG_START(amstrad_state::cpcplus) MCFG_CASSETTE_INTERFACE("cpc_cass") MCFG_SOFTWARE_LIST_ADD("cass_list","cpc_cass") - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 40_MHz_XTAL / 10, true, true); cpcplus_cartslot(config); @@ -1176,7 +1176,7 @@ MACHINE_CONFIG_START(amstrad_state::aleste) MCFG_DEVICE_ADD("rtc", MC146818, 4.194304_MHz_XTAL) - I8272A(config.replace(), m_fdc, true); + I8272A(config.replace(), m_fdc, 16_MHz_XTAL / 4, true); MCFG_DEVICE_REMOVE("exp") MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0) diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp index e6ff479a44f..aaaff1b6707 100644 --- a/src/mame/drivers/amust.cpp +++ b/src/mame/drivers/amust.cpp @@ -463,7 +463,7 @@ MACHINE_CONFIG_START(amust_state::amust) crtc.out_hsync_callback().set(FUNC(amust_state::hsync_w)); crtc.out_vsync_callback().set(FUNC(amust_state::vsync_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->drq_wr_callback().set(FUNC(amust_state::drq_w)); m_fdc->intrq_wr_callback().set(FUNC(amust_state::intrq_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", amust_floppies, "525qd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/apc.cpp b/src/mame/drivers/apc.cpp index 297e5f83683..d55c88424ba 100644 --- a/src/mame/drivers/apc.cpp +++ b/src/mame/drivers/apc.cpp @@ -974,7 +974,7 @@ MACHINE_CONFIG_START(apc_state::apc) NVRAM(config, m_cmos, nvram_device::DEFAULT_ALL_1); UPD1990A(config, m_rtc); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(m_i8259_s, FUNC(pic8259_device::ir4_w)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq1_w)); MCFG_FLOPPY_DRIVE_ADD(m_fdc_connector[0], apc_floppies, "8", apc_floppy_formats) diff --git a/src/mame/drivers/atlantis.cpp b/src/mame/drivers/atlantis.cpp index 6dc37fc8cfe..0ad435ef004 100644 --- a/src/mame/drivers/atlantis.cpp +++ b/src/mame/drivers/atlantis.cpp @@ -809,8 +809,8 @@ DEVICE_INPUT_DEFAULTS_END * *************************************/ -MACHINE_CONFIG_START(atlantis_state::mwskins) - +void atlantis_state::mwskins(machine_config &config) +{ /* basic machine hardware */ VR4310LE(config, m_maincpu, 166666666); m_maincpu->set_icache_size(16384); @@ -860,8 +860,8 @@ MACHINE_CONFIG_START(atlantis_state::mwskins) m_ioasic->set_auto_ack(1); if DEBUG_CONSOLE { m_ioasic->serial_tx_handler().set(m_uart0, FUNC(generic_terminal_device::write)); - MCFG_DEVICE_ADD(m_uart0, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(DEVPUT("ioasic", midway_ioasic_device, serial_rx_w)) + GENERIC_TERMINAL(config, m_uart0, 0); + m_uart0->set_keyboard_callback("ioasic", FUNC(midway_ioasic_device::serial_rx_w)); } // TL16C552 UART @@ -891,7 +891,7 @@ MACHINE_CONFIG_START(atlantis_state::mwskins) com2.dsr_handler().set(m_uart2, FUNC(ins8250_uart_device::dsr_w)); com2.ri_handler().set(m_uart2, FUNC(ins8250_uart_device::ri_w)); com2.cts_handler().set(m_uart2, FUNC(ins8250_uart_device::cts_w)); -MACHINE_CONFIG_END +} /************************************* diff --git a/src/mame/drivers/attache.cpp b/src/mame/drivers/attache.cpp index bfd792e874c..6797007386c 100644 --- a/src/mame/drivers/attache.cpp +++ b/src/mame/drivers/attache.cpp @@ -1179,7 +1179,7 @@ MACHINE_CONFIG_START(attache_state::attache) m_dma->out_iow_callback<0>().set(FUNC(attache_state::fdc_dma_w)); // m_dma->out_dack_callback<0>().set(FUNC(attache_state::fdc_dack_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8_MHz_XTAL, true, true); m_fdc->intrq_wr_callback().set(m_ctc, FUNC(z80ctc_device::trg3)); m_fdc->drq_wr_callback().set(m_dma, FUNC(am9517a_device::dreq0_w)).invert(); FLOPPY_CONNECTOR(config, "fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); @@ -1267,7 +1267,7 @@ MACHINE_CONFIG_START(attache816_state::attache816) m_dma->out_iow_callback<0>().set(FUNC(attache_state::fdc_dma_w)); // m_dma->out_dack_callback<0>().set(FUNC(attache_state::fdc_dack_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8_MHz_XTAL, true, true); m_fdc->intrq_wr_callback().set(m_ctc, FUNC(z80ctc_device::trg3)); m_fdc->drq_wr_callback().set(m_dma, FUNC(am9517a_device::dreq0_w)).invert(); FLOPPY_CONNECTOR(config, "fdc:0", attache_floppies, "525dd", floppy_image_device::default_floppy_formats); diff --git a/src/mame/drivers/ax20.cpp b/src/mame/drivers/ax20.cpp index 4047d3ff3e1..0803fe9f5b3 100644 --- a/src/mame/drivers/ax20.cpp +++ b/src/mame/drivers/ax20.cpp @@ -149,7 +149,7 @@ MACHINE_CONFIG_START(ax20_state::ax20) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ax20) MCFG_PALETTE_ADD_MONOCHROME("palette") - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8'000'000, true); /* Devices */ MCFG_FLOPPY_DRIVE_ADD("fdc:0", ax20_floppies, "525dd", isa8_fdc_device::floppy_formats) diff --git a/src/mame/drivers/basic52.cpp b/src/mame/drivers/basic52.cpp index 3ed021fffb6..a6b0b2463da 100644 --- a/src/mame/drivers/basic52.cpp +++ b/src/mame/drivers/basic52.cpp @@ -117,7 +117,7 @@ void basic52_state::basic31(machine_config &config) /* video hardware */ GENERIC_TERMINAL(config, m_terminal, 0); - m_terminal->set_keyboard_callback(KEYBOARDCB_PUT(basic52_state, kbd_put)); + m_terminal->set_keyboard_callback(FUNC(basic52_state::kbd_put)); I8255(config, "ppi8255", 0); } diff --git a/src/mame/drivers/bebox.cpp b/src/mame/drivers/bebox.cpp index 50fe68e9899..7a8d888907a 100644 --- a/src/mame/drivers/bebox.cpp +++ b/src/mame/drivers/bebox.cpp @@ -222,7 +222,7 @@ void bebox_state::bebox_peripherals(machine_config &config) /*MCFG_PCI_BUS_DEVICE(12, nullptr, scsi53c810_pci_read, scsi53c810_pci_write)*/ - SMC37C78(config, m_smc37c78, 0); + SMC37C78(config, m_smc37c78, 24'000'000); m_smc37c78->intrq_wr_callback().set(FUNC(bebox_state::fdc_interrupt)); m_smc37c78->drq_wr_callback().set(m_dma8237[0], FUNC(am9517a_device::dreq2_w)); diff --git a/src/mame/drivers/besta.cpp b/src/mame/drivers/besta.cpp index 7748a3ed023..88c280dab56 100644 --- a/src/mame/drivers/besta.cpp +++ b/src/mame/drivers/besta.cpp @@ -134,18 +134,19 @@ void besta_state::machine_reset() } /* CP31 processor board */ -MACHINE_CONFIG_START(besta_state::besta) +void besta_state::besta(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68030, 2*16670000) - MCFG_DEVICE_PROGRAM_MAP(besta_mem) + M68030(config, m_maincpu, 2*16670000); + m_maincpu->set_addrmap(AS_PROGRAM, &besta_state::besta_mem); - MCFG_DEVICE_ADD ("pit1", PIT68230, 16670000 / 2) // XXX verify clock + PIT68230(config, m_pit1, 16670000 / 2); // XXX verify clock - MCFG_DEVICE_ADD ("pit2", PIT68230, 16670000 / 2) // XXX verify clock + PIT68230(config, m_pit2, 16670000 / 2); // XXX verify clock - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(besta_state, kbd_put)) -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(besta_state::kbd_put)); +} /* ROM definition */ diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp index 05d051ba298..44bbd8a9943 100644 --- a/src/mame/drivers/bigbord2.cpp +++ b/src/mame/drivers/bigbord2.cpp @@ -621,8 +621,8 @@ MACHINE_CONFIG_START(bigbord2_state::bigbord2) MCFG_DEVICE_ADD("outlatch1", LS259, 0) // U96 /* keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(bigbord2_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(bigbord2_state::kbd_put)); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/binbug.cpp b/src/mame/drivers/binbug.cpp index 5294579dc83..49d33c6ec1a 100644 --- a/src/mame/drivers/binbug.cpp +++ b/src/mame/drivers/binbug.cpp @@ -554,8 +554,8 @@ MACHINE_CONFIG_START(dg680_state::dg680) MCFG_PALETTE_ADD_MONOCHROME("palette") /* Keyboard */ - MCFG_DEVICE_ADD("keyb", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(dg680_state, kbd_put)) + generic_keyboard_device &keyb(GENERIC_KEYBOARD(config, "keyb", 0)); + keyb.set_keyboard_callback(FUNC(dg680_state::kbd_put)); /* Cassette */ MCFG_CASSETTE_ADD( "cassette" ) diff --git a/src/mame/drivers/bw12.cpp b/src/mame/drivers/bw12.cpp index bee069bbe1d..4af465d7974 100644 --- a/src/mame/drivers/bw12.cpp +++ b/src/mame/drivers/bw12.cpp @@ -580,7 +580,7 @@ MACHINE_CONFIG_START(bw12_state::common) /* devices */ MCFG_TIMER_DRIVER_ADD(FLOPPY_TIMER_TAG, bw12_state, floppy_motor_off_tick) - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 8'000'000, false, true); PIA6821(config, m_pia, 0); m_pia->readpa_handler().set(FUNC(bw12_state::pia_pa_r)); diff --git a/src/mame/drivers/cd2650.cpp b/src/mame/drivers/cd2650.cpp index e77327012e8..7067898726c 100644 --- a/src/mame/drivers/cd2650.cpp +++ b/src/mame/drivers/cd2650.cpp @@ -321,8 +321,8 @@ MACHINE_CONFIG_START(cd2650_state::cd2650) BEEP(config, "beeper", 950).add_route(ALL_OUTPUTS, "mono", 0.50); // guess /* Devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(cd2650_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(cd2650_state::kbd_put)); MCFG_CASSETTE_ADD( "cassette" ) MACHINE_CONFIG_END diff --git a/src/mame/drivers/cdc721.cpp b/src/mame/drivers/cdc721.cpp index 3b1557f78c2..28e6a5eb39c 100644 --- a/src/mame/drivers/cdc721.cpp +++ b/src/mame/drivers/cdc721.cpp @@ -329,6 +329,7 @@ MACHINE_CONFIG_START(cdc721_state::cdc721) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cdc721) CRT5037(config, m_crtc, 12.936_MHz_XTAL / 8).set_char_width(8); + m_crtc->set_screen("screen"); z80ctc_device& ctc(Z80CTC(config, "ctc", 6_MHz_XTAL)); // Zilog Z8430B (M1 pulled up) ctc.intr_callback().set(FUNC(cdc721_state::int_w<6>)); diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp index f618cd6eb1b..58508504108 100644 --- a/src/mame/drivers/cgc7900.cpp +++ b/src/mame/drivers/cgc7900.cpp @@ -478,8 +478,8 @@ MACHINE_CONFIG_START(cgc7900_state::cgc7900) AY8910(config, AY8910_TAG, XTAL(28'480'000)/16).add_route(ALL_OUTPUTS, "mono", 0.25); /* devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(cgc7900_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(cgc7900_state::kbd_put)); MCFG_DEVICE_ADD(MM58167_TAG, MM58167, XTAL(32'768)) MCFG_MM58167_IRQ_CALLBACK(WRITELINE(*this, cgc7900_state, irq<0x0>)) diff --git a/src/mame/drivers/chaos.cpp b/src/mame/drivers/chaos.cpp index ea6596c4de3..b785edcc42a 100644 --- a/src/mame/drivers/chaos.cpp +++ b/src/mame/drivers/chaos.cpp @@ -156,8 +156,8 @@ MACHINE_CONFIG_START(chaos_state::chaos) MCFG_DEVICE_DATA_MAP(data_map) /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(chaos_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(chaos_state::kbd_put)); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index 5ec11b46ef9..e3f1052e2ae 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -1873,14 +1873,28 @@ MACHINE_CONFIG_START(chihiro_state::chihiro_base) OHCI_USB_CONNECTOR(config, ":pci:02.0:port4", usb_baseboard, nullptr, false); MCFG_DEVICE_ADD("jvs_master", JVS_MASTER, 0) - MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "jvs_master", ":TILT", ":P1", ":P2", ":A0", ":A1", ":A2", ":A3", ":A4", ":A5", ":A6", ":A7", ":OUTPUT") + sega_837_13551_device &sega837(SEGA_837_13551(config, "837_13551", 0, "jvs_master")); + sega837.set_port_tag<0>("TILT"); + sega837.set_port_tag<1>("P1"); + sega837.set_port_tag<2>("P2"); + sega837.set_port_tag<3>("A0"); + sega837.set_port_tag<4>("A1"); + sega837.set_port_tag<5>("A2"); + sega837.set_port_tag<6>("A3"); + sega837.set_port_tag<7>("A4"); + sega837.set_port_tag<8>("A5"); + sega837.set_port_tag<9>("A6"); + sega837.set_port_tag<10>("A7"); + sega837.set_port_tag<11>("OUTPUT"); MACHINE_CONFIG_END -MACHINE_CONFIG_START(chihiro_state::chihirogd) +void chihiro_state::chihirogd(machine_config &config) +{ chihiro_base(config); - MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", "^pic", nullptr, NOOP) - MCFG_DEVICE_ADD("network", SEGA_NETWORK_BOARD, 0) -MACHINE_CONFIG_END + NAOMI_GDROM_BOARD(config, m_dimmboard, 0, ":gdrom", "pic"); + m_dimmboard->irq_callback().set_nop(); + SEGA_NETWORK_BOARD(config, "network", 0); +} #define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \ ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_BIOS(bios)) diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp index 418000d614b..bad87328cf2 100644 --- a/src/mame/drivers/cischeat.cpp +++ b/src/mame/drivers/cischeat.cpp @@ -2698,6 +2698,90 @@ GFX & Misc - GS90015-02 (100 pin PQFP), uses ROM 90015-31-R56 ROM_START( f1gpstar ) ROM_REGION( 0x100000, "cpu1", 0 ) + ROM_LOAD16_BYTE( "gp9188a27ver4.0.bin", 0x000000, 0x040000, CRC(47224c65) SHA1(1b09fe93b1896cf0706d4914ef956480c1ca231f) ) + ROM_LOAD16_BYTE( "gp9188a22ver4.0.bin", 0x000001, 0x040000, CRC(05ca6410) SHA1(3b8bfd1702c43c398bffda6931e5575110cc5962) ) + + ROM_REGION( 0x80000, "cpu2", 0 ) + /* Should Use ROMs: 90015-01.W06, 90015-02.W07, 90015-03.W08, 90015-04.W09 */ + ROM_LOAD16_BYTE( "9188a-16.v10", 0x000000, 0x020000, CRC(ef0f7ca9) SHA1(98ad687fdab67dd9f54b50cf21fd10ac34b61e7a) ) + ROM_LOAD16_BYTE( "9188a-11.v10", 0x000001, 0x020000, CRC(de292ea3) SHA1(04ed19045edb4edfff2b8fedac37c4a3352dfa76) ) + + ROM_REGION( 0x80000, "cpu3", 0 ) + /* Should Use ROMs: 90015-01.W06, 90015-02.W07, 90015-03.W08, 90015-04.W09 */ + ROM_LOAD16_BYTE( "9188a-6.v10", 0x000000, 0x020000, CRC(18ba0340) SHA1(e46e10a350f18cf3a46c0d3a0cb08fc369fced6d) ) + ROM_LOAD16_BYTE( "9188a-1.v10", 0x000001, 0x020000, CRC(109d2913) SHA1(e117556481e801d51b8526a143bc202dda222f7f) ) + + ROM_REGION( 0x40000, "soundcpu", 0 ) + ROM_LOAD16_BYTE( "9190a-2.v11", 0x000000, 0x020000, CRC(acb2fd80) SHA1(bbed505ce745490ae11df8efdd3633181cfd4dec) ) + ROM_LOAD16_BYTE( "9190a-1.v11", 0x000001, 0x020000, CRC(7cccadaf) SHA1(d1b79fbd0e27e8d479ef533fa00b18d1f2982dda) ) + + ROM_REGION16_BE( 0x80000, "user1", 0 ) /* second halves of program ROMs */ + ROM_LOAD16_BYTE( "9188a-26.v10", 0x000000, 0x040000, CRC(0b76673f) SHA1(cf29333ffb51250ae2d5363d612260f536cd15af) ) // cpu #1 + ROM_LOAD16_BYTE( "9188a-21.v10", 0x000001, 0x040000, CRC(3e098d77) SHA1(0bf7e8ca36086a7ae3d44a10b4ca43f869403eb0) ) + + ROM_REGION( 0x080000, "scroll0", 0 ) + ROM_LOAD( "90015-31.r56", 0x000000, 0x080000, CRC(0c8f0e2b) SHA1(6b0917a632c6beaca018146b6be66a3561b863b3) ) // scroll 0 + + ROM_REGION( 0x080000, "scroll1", 0 ) + ROM_LOAD( "90015-32.r57", 0x000000, 0x080000, CRC(9c921cfb) SHA1(006d4af6dbbc34bee05f3620ba0a947a568a2400) ) // scroll 1 + + ROM_REGION( 0x020000, "scroll2", 0 ) + ROM_LOAD( "9188a-30.v10", 0x000000, 0x020000, CRC(0ef1fbf1) SHA1(28fa0b677e70833954a5fc2fdce233d0dec4f43c) ) // scroll 2 + + ROM_REGION( 0x500000, "sprites", 0 ) /* sprites */ + ROM_LOAD16_BYTE( "90015-21.r46", 0x000000, 0x080000, CRC(6f30211f) SHA1(aedba39fc6aab7847a3a2314e152bc00615cbd72) ) + ROM_LOAD16_BYTE( "90015-22.r47", 0x000001, 0x080000, CRC(05a9a5da) SHA1(807c43c3ee76bce8e4874fa51d2453917b1e4f3b) ) + ROM_LOAD16_BYTE( "90015-23.r48", 0x100000, 0x080000, CRC(58e9c6d2) SHA1(b81208819dbc5887183855001c72d0d91d32fc4b) ) + ROM_LOAD16_BYTE( "90015-24.r49", 0x100001, 0x080000, CRC(abd6c91d) SHA1(ccbf47a37008a0ec64d7058225e6ba991b559a39) ) + ROM_LOAD16_BYTE( "90015-25.r50", 0x200000, 0x080000, CRC(7ded911f) SHA1(d0083c17266f03f70f2d4b2953237fed0cb0696c) ) + ROM_LOAD16_BYTE( "90015-26.r51", 0x200001, 0x080000, CRC(18a6c663) SHA1(b39cbb4b6d09150c7d1a8cf2cd3a96b61c265d83) ) + ROM_LOAD16_BYTE( "90015-27.r52", 0x300000, 0x080000, CRC(7378c82f) SHA1(3e65064a36393b5d6ecb118a560f3fccc5b3c3c2) ) + ROM_LOAD16_BYTE( "90015-28.r53", 0x300001, 0x080000, CRC(9944dacd) SHA1(722a0c152ef97830d5ab6251d5447293d951261f) ) + ROM_LOAD16_BYTE( "90015-29.r54", 0x400000, 0x080000, CRC(2cdec370) SHA1(9fd8e8d6783a6c820d1f580a8872b5cc59641aa9) ) + ROM_LOAD16_BYTE( "90015-30.r55", 0x400001, 0x080000, CRC(47e37604) SHA1(114eb01d3258bf481c01a8378f5f08b2bdeffbba) ) + + ROM_REGION( 0x200000, "road0", 0 ) + ROM_LOAD( "90015-05.w10", 0x000000, 0x080000, CRC(8eb48a23) SHA1(e394eb013dd1fdc1c30616ce356bebd187453d08) ) // Road 0 + ROM_LOAD( "90015-06.w11", 0x080000, 0x080000, CRC(32063a68) SHA1(587d35edec2755df11f4d63ff7bfd134a0f9fb36) ) + ROM_LOAD( "90015-07.w12", 0x100000, 0x080000, CRC(0d0d54f3) SHA1(8040945ea8f9487f0527140c90d6a66965c27ff4) ) + ROM_LOAD( "90015-08.w14", 0x180000, 0x080000, CRC(f48a42c5) SHA1(5caf50fbde682d7d1e4ec0cceacf0db7682b72a9) ) + + ROM_REGION( 0x100000, "road1", 0 ) + ROM_LOAD( "90015-09.w13", 0x000000, 0x080000, CRC(55f49315) SHA1(ad338cb53149ccea2dbe5ad890433c9f09a8211c) ) // Road 1 + ROM_LOAD( "90015-10.w15", 0x080000, 0x080000, CRC(678be0cb) SHA1(3857b549170b62b29644cf5ebdd4aac1afa9e420) ) + + ROM_REGION( 0x80000, "oki1", 0 ) /* samples */ + ROM_LOAD( "90015-34.w32", 0x000000, 0x080000, CRC(2ca9b062) SHA1(c01b8020b409d826c0ae69c153fdc5d89241771e) ) // 2 x 0x40000 + + ROM_REGION( 0x80000, "oki2", 0 ) /* samples */ + ROM_LOAD( "90015-33.w31", 0x000000, 0x080000, CRC(6121d247) SHA1(213c7c45bc3d57c09778b1d58dbb5fe26d0b2477) ) // 2 x 0x40000 + + ROM_REGION( 0x80000, "user2", 0 ) /* ? Unused ROMs ? */ +// "I know that one of the ROM images in the archive looks bad (90015-04.W09) +// however, it is good as far as I can tell. There were two of those ROMs +// (soldered) onto the board and I checked them both against each other. " + + ROM_LOAD( "90015-04.w09", 0x000000, 0x080000, CRC(5b324c81) SHA1(ce61f2ea29086a74bdcf9f4df8e2edb749e41da5) ) // x 2 xxxxxxxxx0xxxxxxxxx = 0x00 + ROM_LOAD( "90015-03.w08", 0x000000, 0x080000, CRC(ccf5b158) SHA1(06250762646e0da1fb71fd7b638492eaab3f5b7f) ) // x 2 FIXED BITS (000x000x) + ROM_LOAD( "90015-02.w07", 0x000000, 0x080000, CRC(fcbecc9b) SHA1(0670c276730ee282ef8c9599c00571b8d97725ab) ) // x 2 + ROM_LOAD( "90015-01.w06", 0x000000, 0x080000, CRC(ce4bfe6e) SHA1(d428eb3d5da3bd080957c585c5b72b94a7849fca) ) // x 2 FIXED BITS (000x000x) + + ROM_LOAD( "90015-20.r45", 0x000000, 0x080000, CRC(9d428fb7) SHA1(02f72938d73db932bd217620a175a05215f6016a) ) // x 2 + + ROM_LOAD( "ch9072-4", 0x000000, 0x001000, CRC(5bc23535) SHA1(2fd1b7184175c416b19e6570de7ecb0d897deb9a) ) // FIXED BITS (0000000x) + ROM_LOAD( "ch9072-5", 0x000000, 0x001000, CRC(0efac5b4) SHA1(a3e945aaf142bb62e0e791b8ca49a34891f31077) ) // FIXED BITS (xxxx0xxx) + ROM_LOAD( "ch9072-6", 0x000000, 0x001000, CRC(76ff63c5) SHA1(652754533cc14773f4d7590a65183349eed9eb62) ) + ROM_LOAD( "ch9072-8", 0x000000, 0x001000, CRC(ca04bace) SHA1(3771ef4bf7983e97e3346309fcb0271e17a6d359) ) // FIXED BITS (0xxx0xxx) + + ROM_LOAD( "pr88004q", 0x000000, 0x000200, CRC(9327dc37) SHA1(cfe7b144cdcd76170d47f1c4e0f72b6d4fca0c8d) ) // FIXED BITS (1xxxxxxx1111x1xx) + ROM_LOAD( "pr88004w", 0x000000, 0x000100, CRC(3d648467) SHA1(bf8dbaa2176c801f7370313425c87f0eefe8a3a4) ) // FIXED BITS (00xxxxxx) + + ROM_LOAD( "pr90015a", 0x000000, 0x000800, CRC(777583db) SHA1(8fd060a68fbb6156feb55afcfc5afd95999a8a62) ) // FIXED BITS (00000xxx0000xxxx) + ROM_LOAD( "pr90015b", 0x000000, 0x000100, CRC(be240dac) SHA1(6203b73c1a5e09e525380a78b555c3818929d5eb) ) // FIXED BITS (000xxxxx000xxxx1) +ROM_END + +ROM_START( f1gpstar3 ) + ROM_REGION( 0x100000, "cpu1", 0 ) ROM_LOAD16_BYTE( "gp9188a27ver3.0.ic125", 0x000000, 0x040000, CRC(e3ab0085) SHA1(c2de842f427d5e982a42467ca7354b728f63bf88) ) ROM_LOAD16_BYTE( "gp9188a22ver3.0.ic92", 0x000001, 0x040000, CRC(7022061b) SHA1(241261f79072f09dbc325185e8e5b039c592a491) ) @@ -2780,7 +2864,7 @@ ROM_START( f1gpstar ) ROM_LOAD( "pr90015b", 0x000000, 0x000100, CRC(be240dac) SHA1(6203b73c1a5e09e525380a78b555c3818929d5eb) ) // FIXED BITS (000xxxxx000xxxx1) ROM_END -ROM_START( f1gpstaro ) +ROM_START( f1gpstar2 ) ROM_REGION( 0x100000, "cpu1", 0 ) ROM_LOAD16_BYTE( "9188a-27.v20", 0x000000, 0x040000, CRC(0a9d3896) SHA1(5e3332a1b779dead1e4f9ef274a2f168721db0ed) ) ROM_LOAD16_BYTE( "9188a-22.v20", 0x000001, 0x040000, CRC(de15c9ca) SHA1(f356b02ca66b7e8ab0293e6e28fcd3f7996c80c8) ) @@ -3699,8 +3783,9 @@ void cischeat_state::init_captflag() GAMEL( 1989, bigrun, 0, bigrun, bigrun, cischeat_state, init_bigrun, ROT0, "Jaleco", "Big Run (11th Rallye version)", MACHINE_NODEVICE_LAN, layout_cischeat ) // there's a 13th Rallye version (1991) (only on the SNES? Could just be updated title, 1989 -> 11th Paris-Dakar ...) GAMEL( 1990, cischeat, 0, cischeat, cischeat, cischeat_state, init_cischeat, ROT0, "Jaleco", "Cisco Heat", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_cischeat ) -GAMEL( 1991, f1gpstar, 0, f1gpstar, f1gpstar, cischeat_state, init_f1gpstar, ROT0, "Jaleco", "Grand Prix Star (ver 3.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_f1gpstar ) -GAMEL( 1991, f1gpstaro, f1gpstar, f1gpstar, f1gpstar, cischeat_state, init_f1gpstar, ROT0, "Jaleco", "Grand Prix Star (ver 2.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_f1gpstar ) +GAMEL( 1992, f1gpstar, 0, f1gpstar, f1gpstar, cischeat_state, init_f1gpstar, ROT0, "Jaleco", "Grand Prix Star (ver 4.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_f1gpstar ) +GAMEL( 1991, f1gpstar3, f1gpstar, f1gpstar, f1gpstar, cischeat_state, init_f1gpstar, ROT0, "Jaleco", "Grand Prix Star (ver 3.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_f1gpstar ) +GAMEL( 1991, f1gpstar2, f1gpstar, f1gpstar, f1gpstar, cischeat_state, init_f1gpstar, ROT0, "Jaleco", "Grand Prix Star (ver 2.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN, layout_f1gpstar ) GAME( 1992, armchmp2, 0, armchmp2, armchmp2, cischeat_state, empty_init, ROT270, "Jaleco", "Arm Champs II (ver 2.7)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1992, armchmp2o2,armchmp2, armchmp2, armchmp2, cischeat_state, empty_init, ROT270, "Jaleco", "Arm Champs II (ver 2.6)", MACHINE_IMPERFECT_GRAPHICS ) GAME( 1992, armchmp2o, armchmp2, armchmp2, armchmp2, cischeat_state, empty_init, ROT270, "Jaleco", "Arm Champs II (ver 1.7)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp index 44e2e5c605b..5a17fa083a3 100644 --- a/src/mame/drivers/cobra.cpp +++ b/src/mame/drivers/cobra.cpp @@ -494,11 +494,19 @@ private: class cobra_jvs : public jvs_device { public: + template <typename T> + cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&jvs_host_tag, bool enable) + : cobra_jvs(mconfig, tag, owner, clock) + { + host.set_tag(std::forward<T>(jvs_host_tag)); + set_main_board(enable); + } + cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); //DECLARE_WRITE_LINE_MEMBER(coin_1_w); //DECLARE_WRITE_LINE_MEMBER(coin_2_w); - static void static_set_main_board(device_t &device, bool enable); + void set_main_board(bool enable) { is_main_board = enable; } void increase_coin_counter(uint8_t which); protected: @@ -524,12 +532,6 @@ cobra_jvs::cobra_jvs(const machine_config &mconfig, const char *tag, device_t *o m_coin_counter[1] = 0; } -void cobra_jvs::static_set_main_board(device_t &device, bool enable) -{ - cobra_jvs &jvsdev = downcast<cobra_jvs &>(device); - jvsdev.is_main_board = enable; -} - #if 0 WRITE_LINE_MEMBER(cobra_jvs::coin_1_w) { @@ -3333,13 +3335,10 @@ MACHINE_CONFIG_START(cobra_state::cobra) m_k001604->set_roz_mem_offset(0); // correct? m_k001604->set_palette(m_palette); - MCFG_DEVICE_ADD(m_jvs_host, COBRA_JVS_HOST, 4000000) - MCFG_JVS_DEVICE_ADD(m_jvs1, COBRA_JVS, "cobra_jvs_host") - cobra_jvs::static_set_main_board(*device, true); - MCFG_JVS_DEVICE_ADD(m_jvs2, COBRA_JVS, "cobra_jvs_host") - cobra_jvs::static_set_main_board(*device, true); - MCFG_JVS_DEVICE_ADD(m_jvs3, COBRA_JVS, "cobra_jvs_host") - cobra_jvs::static_set_main_board(*device, true); + COBRA_JVS_HOST(config, m_jvs_host, 4000000); + COBRA_JVS(config, m_jvs1, 0, m_jvs_host, true); + COBRA_JVS(config, m_jvs2, 0, m_jvs_host, true); + COBRA_JVS(config, m_jvs3, 0, m_jvs_host, true); MACHINE_CONFIG_END /*****************************************************************************/ diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp index c2d1f89f762..e127ba600ab 100644 --- a/src/mame/drivers/cortex.cpp +++ b/src/mame/drivers/cortex.cpp @@ -179,7 +179,8 @@ void cortex_state::init_init() membank("bankw0")->configure_entry(0, &main[0x00000]); } -MACHINE_CONFIG_START(cortex_state::cortex) +void cortex_state::cortex(machine_config &config) +{ /* basic machine hardware */ /* TMS9995 CPU @ 12.0 MHz */ // Standard variant, no overflow int @@ -205,17 +206,17 @@ MACHINE_CONFIG_START(cortex_state::cortex) crtc.set_vram_size(0x4000); SCREEN(config, "screen", SCREEN_TYPE_RASTER); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(cortex_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(cortex_state::kbd_put)); - //MCFG_DEVICE_ADD("uart1", TMS9902, XTAL(12'000'000) / 4) - //MCFG_DEVICE_ADD("uart2", TMS9902, XTAL(12'000'000) / 4) + //TMS9902(config, "uart1", XTAL(12'000'000) / 4); + //TMS9902(config, "uart2", XTAL(12'000'000) / 4); /* Sound */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 950) // guess - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05) -MACHINE_CONFIG_END + BEEP(config, m_beep, 950); // guess + m_beep->add_route(ALL_OUTPUTS, "mono", 0.05); +} /* ROM definition */ ROM_START( cortex ) diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp index 6ab94eacccc..2f5ad6bd244 100644 --- a/src/mame/drivers/cps2.cpp +++ b/src/mame/drivers/cps2.cpp @@ -674,7 +674,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps2_state::cps2_interrupt) { m_cps_b_regs[0x10/2] = 0; m_maincpu->set_input_line(4, HOLD_LINE); - cps2_set_sprite_priorities(); m_screen->update_partial(param); m_scancalls++; // popmessage("IRQ4 scancounter = %04i", param); @@ -685,7 +684,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps2_state::cps2_interrupt) { m_cps_b_regs[0x12 / 2] = 0; m_maincpu->set_input_line(4, HOLD_LINE); - cps2_set_sprite_priorities(); m_screen->update_partial(param); m_scancalls++; // popmessage("IRQ4 scancounter = %04i", param); @@ -696,11 +694,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(cps2_state::cps2_interrupt) m_cps_b_regs[0x10 / 2] = m_scanline1; m_cps_b_regs[0x12 / 2] = m_scanline2; m_maincpu->set_input_line(2, HOLD_LINE); - if(m_scancalls) - { - cps2_set_sprite_priorities(); - m_screen->update_partial(256); - } cps2_objram_latch(); } // popmessage("Raster calls = %i", m_scancalls); @@ -1322,7 +1315,7 @@ MACHINE_CONFIG_START(cps2_state::cps2) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MCFG_SCREEN_RAW_PARAMS(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(cps2_state, screen_update_cps1) + MCFG_SCREEN_UPDATE_DRIVER(cps2_state, screen_update_cps2) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, cps2_state, screen_vblank_cps1)) MCFG_SCREEN_PALETTE("palette") diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp index 62bb1a69693..631b0d1ef10 100644 --- a/src/mame/drivers/cxhumax.cpp +++ b/src/mame/drivers/cxhumax.cpp @@ -1073,7 +1073,7 @@ MACHINE_CONFIG_START(cxhumax_state::cxhumax) MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) + GENERIC_TERMINAL(config, m_terminal, 0); MACHINE_CONFIG_END ROM_START( hxhdci2k ) diff --git a/src/mame/drivers/cyclemb.cpp b/src/mame/drivers/cyclemb.cpp index a3eb91ea9b1..6b6bcf6c84c 100644 --- a/src/mame/drivers/cyclemb.cpp +++ b/src/mame/drivers/cyclemb.cpp @@ -72,7 +72,6 @@ Dumped by Chack'n ****************************************************************************************************/ #include "emu.h" -#include "machine/tait8741.h" #include "cpu/z80/z80.h" #include "machine/gen_latch.h" diff --git a/src/mame/drivers/czk80.cpp b/src/mame/drivers/czk80.cpp index 2123acca269..6eeca07ca68 100644 --- a/src/mame/drivers/czk80.cpp +++ b/src/mame/drivers/czk80.cpp @@ -62,8 +62,10 @@ public: void czk80(machine_config &config); void init_czk80(); +protected: + virtual void machine_reset() override; + private: - DECLARE_MACHINE_RESET(czk80); TIMER_CALLBACK_MEMBER(czk80_reset); DECLARE_READ8_MEMBER(port80_r); DECLARE_READ8_MEMBER(port81_r); @@ -153,7 +155,7 @@ TIMER_CALLBACK_MEMBER( czk80_state::czk80_reset) membank("bankr0")->set_entry(1); } -MACHINE_RESET_MEMBER( czk80_state, czk80 ) +void czk80_state::machine_reset() { machine().scheduler().timer_set(attotime::from_usec(3), timer_expired_delegate(FUNC(czk80_state::czk80_reset),this)); membank("bankr0")->set_entry(0); // point at rom @@ -185,35 +187,34 @@ void czk80_state::kbd_put(u8 data) m_term_data = data; } -MACHINE_CONFIG_START(czk80_state::czk80) +void czk80_state::czk80(machine_config &config) +{ /* basic machine hardware */ - Z80(config, m_maincpu, XTAL(16'000'000) / 4); + Z80(config, m_maincpu, 16_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &czk80_state::czk80_mem); m_maincpu->set_addrmap(AS_IO, &czk80_state::czk80_io); m_maincpu->set_daisy_config(daisy_chain); - MCFG_MACHINE_RESET_OVERRIDE(czk80_state, czk80) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(czk80_state::kbd_put)); + UPD765A(config, m_fdc, 8_MHz_XTAL, true, true); + FLOPPY_CONNECTOR(config, "fdc:0", czk80_floppies, "525dd", floppy_image_device::default_floppy_formats); - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(czk80_state, kbd_put)) - UPD765A(config, m_fdc, true, true); - MCFG_FLOPPY_DRIVE_ADD("fdc:0", czk80_floppies, "525dd", floppy_image_device::default_floppy_formats) - - z80ctc_device& ctc(Z80CTC(config, "ctc", XTAL(16'000'000) / 4)); + z80ctc_device& ctc(Z80CTC(config, "ctc", 16_MHz_XTAL / 4)); ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); ctc.zc_callback<0>().set(FUNC(czk80_state::ctc_z0_w)); ctc.zc_callback<1>().set(FUNC(czk80_state::ctc_z1_w)); ctc.zc_callback<2>().set(FUNC(czk80_state::ctc_z2_w)); - z80dart_device& dart(Z80DART(config, "dart", XTAL(16'000'000) / 4)); + z80dart_device& dart(Z80DART(config, "dart", 16_MHz_XTAL / 4)); //dart.out_txda_callback().set("rs232", FUNC(rs232_port_device::write_txd)); //dart.out_dtra_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); //dart.out_rtsa_callback().set("rs232", FUNC(rs232_port_device::write_rts)); dart.out_int_callback().set_inputline("maincpu", INPUT_LINE_IRQ0); - z80pio_device& pio(Z80PIO(config, "pio", XTAL(16'000'000)/4)); + z80pio_device& pio(Z80PIO(config, "pio", 16_MHz_XTAL / 4)); pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); -MACHINE_CONFIG_END +} /* ROM definition */ diff --git a/src/mame/drivers/d6809.cpp b/src/mame/drivers/d6809.cpp index 96f5c9cc371..9c5c8e1d543 100644 --- a/src/mame/drivers/d6809.cpp +++ b/src/mame/drivers/d6809.cpp @@ -198,11 +198,11 @@ MACHINE_CONFIG_START(d6809_state::d6809) MCFG_DEVICE_ADD("acia2", MOS6551, XTAL(14'745'600) / 8) // uses Q clock /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(d6809_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(d6809_state::kbd_put)); // Floppy - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); //m_fdc->drq_wr_callback().set(m_fdc, FUNC(upd765a_device::dack_w)); // pin not emulated MCFG_FLOPPY_DRIVE_ADD("fdc:0", floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp index c9a6f7b7678..dd2572d3388 100644 --- a/src/mame/drivers/dccons.cpp +++ b/src/mame/drivers/dccons.cpp @@ -606,7 +606,8 @@ MACHINE_CONFIG_START(dc_cons_state::dc) // MACRONIX_29LV160TMC(config, "dcflash"); - MCFG_MAPLE_DC_ADD( "maple_dc", "maincpu", dc_maple_irq ) + MAPLE_DC(config, m_maple, 0, m_maincpu); + m_maple->irq_callback().set(FUNC(dc_state::maple_irq)); MCFG_DC_CONTROLLER_ADD("dcctrl0", "maple_dc", 0, ":P1:0", ":P1:1", ":P1:A0", ":P1:A1", ":P1:A2", ":P1:A3", ":P1:A4", ":P1:A5") MCFG_DC_CONTROLLER_ADD("dcctrl1", "maple_dc", 1, ":P2:0", ":P2:1", ":P2:A0", ":P2:A1", ":P2:A2", ":P2:A3", ":P2:A4", ":P2:A5") MCFG_DC_CONTROLLER_ADD("dcctrl2", "maple_dc", 2, ":P3:0", ":P3:1", ":P3:A0", ":P3:A1", ":P3:A2", ":P3:A3", ":P3:A4", ":P3:A5") diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index 5ae9ad1aba1..c0cbaa5bd2b 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -1972,8 +1972,7 @@ MACHINE_CONFIG_START(dec8_state::lastmisn) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shackled) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,lastmisn) @@ -2037,8 +2036,7 @@ MACHINE_CONFIG_START(dec8_state::shackled) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shackled) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,shackled) @@ -2097,8 +2095,7 @@ MACHINE_CONFIG_START(dec8_state::gondo) INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gondo) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,gondo) @@ -2157,8 +2154,7 @@ MACHINE_CONFIG_START(dec8_state::garyoret) INPUT_MERGER_ALL_HIGH(config, m_nmigate).output_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_gondo) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,garyoret) @@ -2219,7 +2215,9 @@ MACHINE_CONFIG_START(dec8_state::ghostb) screen.set_palette("palette"); MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ghostb) - MCFG_DECO_RMC3_ADD_PROMS("palette","proms",1024) // xxxxBBBBGGGGRRRR with custom weighting + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting + m_palette->set_prom_region("proms"); + m_palette->set_init("palette", FUNC(deco_rmc3_device::palette_init_proms)); MCFG_VIDEO_START_OVERRIDE(dec8_state,ghostb) /* sound hardware */ @@ -2277,8 +2275,7 @@ MACHINE_CONFIG_START(dec8_state::csilver) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("sub", INPUT_LINE_NMI)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_shackled) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,lastmisn) @@ -2341,8 +2338,7 @@ MACHINE_CONFIG_START(dec8_state::oscar) MCFG_SCREEN_PALETTE("palette") MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_oscar) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(1024) + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,oscar) @@ -2395,8 +2391,7 @@ MACHINE_CONFIG_START(dec8_state::srdarwin) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_srdarwin) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(144) + DECO_RMC3(config, m_palette, 0, 144); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,srdarwin) @@ -2452,8 +2447,7 @@ MACHINE_CONFIG_START(dec8_state::cobracom) MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cobracom) - MCFG_DEVICE_ADD("palette", DECO_RMC3, 0) // xxxxBBBBGGGGRRRR with custom weighting - MCFG_DECO_RMC3_SET_PALETTE_SIZE(256) + DECO_RMC3(config, m_palette, 0, 256); // xxxxBBBBGGGGRRRR with custom weighting MCFG_VIDEO_START_OVERRIDE(dec8_state,cobracom) diff --git a/src/mame/drivers/decstation.cpp b/src/mame/drivers/decstation.cpp index 1a64c5735d6..dfd0e34e399 100644 --- a/src/mame/drivers/decstation.cpp +++ b/src/mame/drivers/decstation.cpp @@ -87,9 +87,11 @@ public: m_asc(*this, "scsibus:7:asc"), m_vrom(*this, "gfx"), m_bt459(*this, "bt459"), - m_lance(*this, "am79c90") + m_lance(*this, "am79c90"), + m_kn01vram(*this, "vram") { } + void kn01(machine_config &config); void kn02ba(machine_config &config); void init_decstation(); @@ -101,6 +103,13 @@ protected: DECLARE_READ32_MEMBER(cfb_r); DECLARE_WRITE32_MEMBER(cfb_w); + DECLARE_READ32_MEMBER(kn01_status_r); + DECLARE_WRITE32_MEMBER(kn01_control_w); + DECLARE_READ32_MEMBER(bt478_palette_r); + DECLARE_WRITE32_MEMBER(bt478_palette_w); + + DECLARE_READ32_MEMBER(dz_r); + void ncr5394(device_t *device); private: @@ -108,25 +117,32 @@ private: virtual void machine_reset() override; virtual void video_start() override; + uint32_t kn01_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - required_device<r3000a_device> m_maincpu; + required_device<mips1core_device_base> m_maincpu; required_device<screen_device> m_screen; - required_device<lk201_device> m_lk201; - required_device<dec_ioga_device> m_ioga; + optional_device<lk201_device> m_lk201; + optional_device<dec_ioga_device> m_ioga; required_device<mc146818_device> m_rtc; - required_device<z80scc_device> m_scc0, m_scc1; - required_device<ncr53c94_device> m_asc; - required_memory_region m_vrom; - required_device<bt459_device> m_bt459; + optional_device<z80scc_device> m_scc0, m_scc1; + optional_device<ncr53c94_device> m_asc; + optional_memory_region m_vrom; + optional_device<bt459_device> m_bt459; required_device<am79c90_device> m_lance; + optional_shared_ptr<uint32_t> m_kn01vram; + void kn01_map(address_map &map); void threemin_map(address_map &map); - uint8_t *m_vrom_ptr; - uint32_t m_vram[0x200000/4]; - uint32_t m_sfb[0x80]; + u8 *m_vrom_ptr; + u32 m_vram[0x200000/4]; + u32 m_sfb[0x80]; int m_copy_src; + + u32 m_kn01_control, m_kn01_status; + u32 m_palette[256], m_overlay[256]; + u8 m_r, m_g, m_b, m_entry, m_stage; }; /*************************************************************************** @@ -137,6 +153,26 @@ void decstation_state::video_start() { } +uint32_t decstation_state::kn01_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + uint32_t *scanline; + int x, y; + uint8_t pixels; + uint8_t *vram = (uint8_t *)m_kn01vram.target(); + + for (y = 0; y < 864; y++) + { + scanline = &bitmap.pix32(y); + for (x = 0; x < 1024; x++) + { + pixels = vram[(y * 1024) + x]; + *scanline++ = m_palette[pixels]; + } + } + + return 0; +} + uint32_t decstation_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { m_bt459->screen_update(screen, bitmap, cliprect, (uint8_t *)&m_vram[0]); @@ -298,6 +334,117 @@ WRITE32_MEMBER(decstation_state::cfb_w) } } +READ32_MEMBER(decstation_state::bt478_palette_r) +{ + u8 rv = 0; + + if (offset == 1) + { + switch (m_stage) + { + case 0: + m_stage++; + rv = (m_palette[m_entry] >> 16) & 0xff; + break; + + case 1: + m_stage++; + rv = (m_palette[m_entry] >> 8) & 0xff; + break; + + case 2: + rv = m_palette[m_entry] & 0xff; + m_entry++; + m_entry &= 0xff; + m_stage = 0; + } + } + else if (offset == 5) + { + switch (m_stage) + { + case 0: + m_stage++; + rv = (m_overlay[m_entry] >> 16) & 0xff; + break; + + case 1: + m_stage++; + rv = (m_overlay[m_entry] >> 8) & 0xff; + break; + + case 2: + rv = m_overlay[m_entry] & 0xff; + m_entry++; + m_entry &= 0xff; + m_stage = 0; + } + } + + return rv; +} + +WRITE32_MEMBER(decstation_state::bt478_palette_w) +{ + if ((offset == 0) || (offset == 3) || (offset == 4) || (offset == 7)) + { + m_entry = data & 0xff; + //printf("VDAC: entry %d\n", m_entry); + m_stage = 0; + m_r = m_g = m_b = 0; + } + else if (offset == 1) + { + switch (m_stage) + { + case 0: + m_r = data & 0xff; + m_stage++; + break; + + case 1: + m_g = data & 0xff; + m_stage++; + break; + + case 2: + m_b = data & 0xff; + m_palette[m_entry] = rgb_t(m_r, m_g, m_b); + //printf("palette[%d] = RGB(%02x, %02x, %02x)\n", m_entry, m_r, m_g, m_b); + m_entry++; + m_entry &= 0xff; + m_stage = 0; + m_r = m_g = m_b = 0; + break; + } + } + else if (offset == 5) + { + switch (m_stage) + { + case 0: + m_r = data & 0xff; + m_stage++; + break; + + case 1: + m_g = data & 0xff; + m_stage++; + break; + + case 2: + m_b = data & 0xff; + m_overlay[m_entry] = rgb_t(m_r, m_g, m_b); + //printf("overlay[%d] = RGB(%02x, %02x, %02x)\n", m_entry, m_r, m_g, m_b); + m_entry++; + m_entry &= 0xff; + m_stage = 0; + m_r = m_g = m_b = 0; + break; + } + } +} + /*************************************************************************** MACHINE FUNCTIONS ***************************************************************************/ @@ -310,7 +457,8 @@ WRITE_LINE_MEMBER(decstation_state::ioga_irq_w) void decstation_state::machine_start() { - m_vrom_ptr = m_vrom->base(); + if (m_vrom) + m_vrom_ptr = m_vrom->base(); save_item(NAME(m_vram)); save_item(NAME(m_sfb)); save_item(NAME(m_copy_src)); @@ -319,12 +467,44 @@ void decstation_state::machine_start() void decstation_state::machine_reset() { m_copy_src = 1; + m_entry = 0; + m_stage = 0; + m_r = m_g = m_b = 0; + m_kn01_status = 0; +} + +READ32_MEMBER(decstation_state::kn01_status_r) +{ + m_kn01_status ^= 0x200; // fake vint for now + return m_kn01_status; +} + +WRITE32_MEMBER(decstation_state::kn01_control_w) +{ + COMBINE_DATA(&m_kn01_control); +} + +READ32_MEMBER(decstation_state::dz_r) +{ + return 0x8000; } /*************************************************************************** ADDRESS MAPS ***************************************************************************/ +void decstation_state::kn01_map(address_map &map) +{ + map(0x00000000, 0x017fffff).ram(); + map(0x0fc00000, 0x0fcfffff).ram().share("vram"); + map(0x12000000, 0x1200001f).rw(FUNC(decstation_state::bt478_palette_r), FUNC(decstation_state::bt478_palette_w)); + //map(0x18000000, 0x18000007).rw(m_lance, FUNC(am79c90_device::regs_r), FUNC(am79c90_device::regs_w)).umask32(0x0000ffff); + map(0x1c000000, 0x1c000003).r(FUNC(decstation_state::dz_r)); + map(0x1d000000, 0x1d0000ff).rw(m_rtc, FUNC(mc146818_device::read_direct), FUNC(mc146818_device::write_direct)).umask32(0x000000ff); + map(0x1e000000, 0x1effffff).rw(FUNC(decstation_state::kn01_status_r), FUNC(decstation_state::kn01_control_w)); + map(0x1fc00000, 0x1fc3ffff).rom().region("user1", 0); +} + void decstation_state::threemin_map(address_map &map) { map(0x00000000, 0x07ffffff).ram(); // full 128 MB @@ -363,6 +543,23 @@ static void dec_scsi_devices(device_slot_interface &device) device.option_add_internal("asc", NCR53C94); } +MACHINE_CONFIG_START(decstation_state::kn01) + R2000(config, m_maincpu, 16.67_MHz_XTAL, 65536, 131072); + m_maincpu->set_endianness(ENDIANNESS_LITTLE); + m_maincpu->set_fpurev(0x340); + m_maincpu->in_brcond<0>().set(FUNC(decstation_state::brcond0_r)); + m_maincpu->set_addrmap(AS_PROGRAM, &decstation_state::kn01_map); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(69169800, 1280, 0, 1024, 901, 0, 864); + m_screen->set_screen_update(FUNC(decstation_state::kn01_screen_update)); + + AM79C90(config, m_lance, XTAL(12'500'000)); + + MC146818(config, m_rtc, XTAL(32'768)); + m_rtc->set_binary(true); +MACHINE_CONFIG_END + MACHINE_CONFIG_START(decstation_state::kn02ba) R3000A(config, m_maincpu, 33.333_MHz_XTAL, 65536, 131072); m_maincpu->set_endianness(ENDIANNESS_LITTLE); @@ -435,6 +632,11 @@ void decstation_state::init_decstation() ***************************************************************************/ +ROM_START( ds3100 ) + ROM_REGION32_LE( 0x40000, "user1", 0 ) + ROM_LOAD( "kn01-aa.v7.01.img", 0x000000, 0x040000, CRC(e2478aa7) SHA1(e789387c52df3e0d83fde97cb48314627ea90b93) ) +ROM_END + ROM_START( ds5k133 ) ROM_REGION32_LE( 0x40000, "user1", 0 ) // 5.7j sx @@ -445,4 +647,5 @@ ROM_START( ds5k133 ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1989, ds3100, 0, 0, kn01, decstation, decstation_state, init_decstation, "Digital Equipment Corporation", "DECstation 3100", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) COMP( 1992, ds5k133, 0, 0, kn02ba, decstation, decstation_state, init_decstation, "Digital Equipment Corporation", "DECstation 5000/133", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp index 745034b553f..49e6c57aae1 100644 --- a/src/mame/drivers/dim68k.cpp +++ b/src/mame/drivers/dim68k.cpp @@ -332,7 +332,7 @@ MACHINE_CONFIG_START(dim68k_state::dim68k) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - UPD765A(config, "fdc", true, true); // these options unknown + UPD765A(config, "fdc", 8'000'000, true, true); // these options unknown MCFG_FLOPPY_DRIVE_ADD("fdc:0", dim68k_floppies, "525hd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", dim68k_floppies, "525hd", floppy_image_device::default_floppy_formats) @@ -342,8 +342,8 @@ MACHINE_CONFIG_START(dim68k_state::dim68k) m_crtc->set_char_width(8); m_crtc->set_update_row_callback(FUNC(dim68k_state::crtc_update_row), this); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(dim68k_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(dim68k_state::kbd_put)); // software lists MCFG_SOFTWARE_LIST_ADD("flop_list", "dim68k") diff --git a/src/mame/drivers/dm7000.cpp b/src/mame/drivers/dm7000.cpp index 6e3b874ba26..827d49ba179 100644 --- a/src/mame/drivers/dm7000.cpp +++ b/src/mame/drivers/dm7000.cpp @@ -317,8 +317,8 @@ MACHINE_CONFIG_START(dm7000_state::dm7000) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) MCFG_SCREEN_UPDATE_DRIVER(dm7000_state, screen_update_dm7000) - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dm7000_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(dm7000_state::kbd_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/dms86.cpp b/src/mame/drivers/dms86.cpp index 43817b2c380..b266e87eeba 100644 --- a/src/mame/drivers/dms86.cpp +++ b/src/mame/drivers/dms86.cpp @@ -138,7 +138,8 @@ void dms86_state::kbd_put(u8 data) m_term_data = data; } -MACHINE_CONFIG_START(dms86_state::dms86) +void dms86_state::dms86(machine_config &config) +{ /* basic machine hardware */ I8086(config, m_maincpu, XTAL(14'745'600) / 3); // according to the manual... hmm m_maincpu->set_addrmap(AS_PROGRAM, &dms86_state::mem_map); @@ -173,9 +174,9 @@ MACHINE_CONFIG_START(dms86_state::dms86) rs232.dcd_handler().set(m_sio[0], FUNC(z80sio_device::dcdb_w)); // HiNet / Monitor switch rs232.cts_handler().set(m_sio[0], FUNC(z80sio_device::ctsb_w)).invert(); - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dms86_state, kbd_put)) -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(dms86_state::kbd_put)); +} /* ROM definition */ ROM_START( dms86 ) diff --git a/src/mame/drivers/dmv.cpp b/src/mame/drivers/dmv.cpp index 2671b7377b6..21ae4639d5e 100644 --- a/src/mame/drivers/dmv.cpp +++ b/src/mame/drivers/dmv.cpp @@ -822,7 +822,7 @@ MACHINE_CONFIG_START(dmv_state::dmv) m_dmac->out_iow_callback<3>().set(m_fdc, FUNC(i8272a_device::mdma_w)); m_dmac->out_dack_callback<3>().set(FUNC(dmv_state::dmac_dack3)); - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8'000'000, true); m_fdc->intrq_wr_callback().set(FUNC(dmv_state::fdc_irq)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w)); MCFG_FLOPPY_DRIVE_ADD("i8272:0", dmv_floppies, "525dd", dmv_state::floppy_formats) diff --git a/src/mame/drivers/dps1.cpp b/src/mame/drivers/dps1.cpp index e829be27e64..0690daab4f6 100644 --- a/src/mame/drivers/dps1.cpp +++ b/src/mame/drivers/dps1.cpp @@ -198,14 +198,14 @@ static void floppies(device_slot_interface &device) MACHINE_CONFIG_START(dps1_state::dps1) // basic machine hardware - Z80(config, m_maincpu, 4000000); + Z80(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &dps1_state::mem_map); m_maincpu->set_addrmap(AS_IO, &dps1_state::io_map); MCFG_MACHINE_RESET_OVERRIDE(dps1_state, dps1) /* video hardware */ - mc2661_device &uart(MC2661(config, "uart", XTAL(5'068'800))); + mc2661_device &uart(MC2661(config, "uart", 5.0688_MHz_XTAL)); // Signetics 2651N uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); uart.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); uart.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); @@ -219,7 +219,7 @@ MACHINE_CONFIG_START(dps1_state::dps1) AM9519(config, "am9519b", 0); // floppy - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 16_MHz_XTAL / 2, false, true); //m_fdc->intrq_wr_callback().set(FUNC(dps1_state::fdc_int_w)); // doesn't appear to be used m_fdc->drq_wr_callback().set(FUNC(dps1_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", floppies, "floppy0", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/dual68.cpp b/src/mame/drivers/dual68.cpp index 6369f029c8c..cb7d57789d4 100644 --- a/src/mame/drivers/dual68.cpp +++ b/src/mame/drivers/dual68.cpp @@ -103,8 +103,8 @@ MACHINE_CONFIG_START(dual68_state::dual68) MCFG_DEVICE_IO_MAP(sio4_io) /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dual68_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(dual68_state::kbd_put)); MCFG_DEVICE_ADD("usart1", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B MCFG_DEVICE_ADD("usart2", MC2661, 9.8304_MHz_XTAL / 2) // SCN2661B diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp index a9f95fabbeb..4943f29a49f 100644 --- a/src/mame/drivers/duet16.cpp +++ b/src/mame/drivers/duet16.cpp @@ -407,7 +407,7 @@ MACHINE_CONFIG_START(duet16_state::duet16) MCFG_INPUT_MERGER_ANY_HIGH("tmint") MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE("pic", pic8259_device, ir0_w)) // INT6 - UPD765A(config, m_fdc, true, false); + UPD765A(config, m_fdc, 8_MHz_XTAL, true, false); m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq0_w)); m_fdc->intrq_wr_callback().set(m_pic, FUNC(pic8259_device::ir3_w)); // INT4 MCFG_FLOPPY_DRIVE_ADD("fdc:0", duet16_floppies, "525qd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/ec65.cpp b/src/mame/drivers/ec65.cpp index 5ee46374159..2a86aeb2374 100644 --- a/src/mame/drivers/ec65.cpp +++ b/src/mame/drivers/ec65.cpp @@ -195,19 +195,19 @@ MACHINE_CONFIG_START(ec65_state::ec65) crtc.set_update_row_callback(FUNC(ec65_state::crtc_update_row), this); /* devices */ - MCFG_DEVICE_ADD(PIA6821_TAG, PIA6821, 0) + PIA6821(config, PIA6821_TAG, 0); - MCFG_DEVICE_ADD(ACIA6850_TAG, ACIA6850, 0) + ACIA6850(config, ACIA6850_TAG, 0); - MCFG_DEVICE_ADD(VIA6522_0_TAG, VIA6522, XTAL(4'000'000) / 4) + VIA6522(config, m_via_0, XTAL(4'000'000) / 4); - MCFG_DEVICE_ADD(VIA6522_1_TAG, VIA6522, XTAL(4'000'000) / 4) + VIA6522(config, m_via_1, XTAL(4'000'000) / 4); mos6551_device &acia(MOS6551(config, ACIA6551_TAG, 0)); acia.set_xtal(XTAL(1'843'200)); - MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(ec65_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, KEYBOARD_TAG, 0)); + keyboard.set_keyboard_callback(FUNC(ec65_state::kbd_put)); MACHINE_CONFIG_END MACHINE_CONFIG_START(ec65k_state::ec65k) diff --git a/src/mame/drivers/elwro800.cpp b/src/mame/drivers/elwro800.cpp index 778ff0052bf..33af3e7f4e9 100644 --- a/src/mame/drivers/elwro800.cpp +++ b/src/mame/drivers/elwro800.cpp @@ -579,7 +579,7 @@ MACHINE_CONFIG_START(elwro800_state::elwro800) MCFG_VIDEO_START_OVERRIDE(elwro800_state, spectrum) - UPD765A(config, "upd765", true, true); + UPD765A(config, "upd765", 8_MHz_XTAL / 2, true, true); I8255A(config, m_i8255, 0); m_i8255->in_pa_callback().set_ioport("JOY"); diff --git a/src/mame/drivers/ep64.cpp b/src/mame/drivers/ep64.cpp index 5f6dc493815..f008fe97d2a 100644 --- a/src/mame/drivers/ep64.cpp +++ b/src/mame/drivers/ep64.cpp @@ -577,8 +577,15 @@ MACHINE_CONFIG_START(ep64_state::ep64) MCFG_DEVICE_IO_MAP(ep64_io) // video hardware - MCFG_NICK_ADD(NICK_TAG, SCREEN_TAG, XTAL(8'000'000)) - MCFG_NICK_VIRQ_CALLBACK(WRITELINE(m_dave, dave_device, int1_w)) + screen_device& screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(ENTERPRISE_SCREEN_WIDTH, ENTERPRISE_SCREEN_HEIGHT); + screen.set_visarea(0, ENTERPRISE_SCREEN_WIDTH-1, 0, ENTERPRISE_SCREEN_HEIGHT-1); + screen.set_screen_update(NICK_TAG, FUNC(nick_device::screen_update)); + + NICK(config, m_nick, XTAL(8'000'000), SCREEN_TAG); + m_nick->virq_wr_callback().set(m_dave, FUNC(dave_device::int1_w)); // sound hardware MCFG_DAVE_ADD(m_dave, XTAL(8'000'000), dave_64k_mem, dave_io) diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp index 1ef57253fcf..8a7268333c2 100644 --- a/src/mame/drivers/equites.cpp +++ b/src/mame/drivers/equites.cpp @@ -388,8 +388,8 @@ D WRITE_LINE_MEMBER(equites_state::equites_8155_timer_pulse) { - if (!state) // active low - m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + if (!state) + m_audiocpu->set_input_line(I8085_TRAP_LINE, ASSERT_LINE); } TIMER_CALLBACK_MEMBER(equites_state::equites_frq_adjuster_callback) @@ -410,12 +410,12 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w) switch (offset) { case 0: // c0f8: NMI ack (written by NMI handler) - m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_audiocpu->set_input_line(I8085_TRAP_LINE, CLEAR_LINE); break; case 1: // c0f9: RST75 trigger (written by NMI handler) // Note: solder pad CP3 on the pcb would allow to disable this - m_audiocpu->pulse_input_line(I8085_RST75_LINE, m_audiocpu->minimum_quantum_time()); + m_audiocpu->pulse_input_line(I8085_RST75_LINE, attotime::zero); break; case 2: // c0fa: INTR trigger (written by NMI handler) @@ -1150,6 +1150,8 @@ void splndrbt_state::machine_start() void equites_state::machine_reset() { + m_audiocpu->set_input_line(I8085_INTR_LINE, CLEAR_LINE); + m_audiocpu->set_input_line(I8085_TRAP_LINE, CLEAR_LINE); } diff --git a/src/mame/drivers/eurocom2.cpp b/src/mame/drivers/eurocom2.cpp index 5b4a165f122..fa7f8f09d75 100644 --- a/src/mame/drivers/eurocom2.cpp +++ b/src/mame/drivers/eurocom2.cpp @@ -449,8 +449,8 @@ MACHINE_CONFIG_START(eurocom2_state::eurocom2) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(eurocom2_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(eurocom2_state::kbd_put)); PIA6821(config, m_pia1, 0); m_pia1->readca1_handler().set(FUNC(eurocom2_state::pia1_ca1_r)); // keyboard strobe diff --git a/src/mame/drivers/evmbug.cpp b/src/mame/drivers/evmbug.cpp index 1b14c6747b8..4d5669728b5 100644 --- a/src/mame/drivers/evmbug.cpp +++ b/src/mame/drivers/evmbug.cpp @@ -114,7 +114,8 @@ void evmbug_state::machine_reset() m_maincpu->reset_line(ASSERT_LINE); } -MACHINE_CONFIG_START(evmbug_state::evmbug) +void evmbug_state::evmbug(machine_config &config) +{ // basic machine hardware // TMS9995 CPU @ 12.0 MHz // We have no lines connected yet @@ -123,11 +124,11 @@ MACHINE_CONFIG_START(evmbug_state::evmbug) m_maincpu->set_addrmap(AS_IO, &evmbug_state::io_map); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(evmbug_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(evmbug_state::kbd_put)); - //MCFG_DEVICE_ADD("uart1", TMS9902, XTAL(12'000'000) / 4) -MACHINE_CONFIG_END + //TMS9902(config, "uart1", XTAL(12'000'000) / 4); +} /* ROM definition */ ROM_START( evmbug ) diff --git a/src/mame/drivers/fanucspmg.cpp b/src/mame/drivers/fanucspmg.cpp index 992b9f0fc09..3e14e07baf9 100644 --- a/src/mame/drivers/fanucspmg.cpp +++ b/src/mame/drivers/fanucspmg.cpp @@ -995,7 +995,7 @@ MACHINE_CONFIG_START(fanucspmg_state::fanucspmg) m_pic[1]->out_int_callback().set(m_pic[0], FUNC(pic8259_device::ir7_w)); m_pic[1]->in_sp_callback().set_constant(0); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(m_pic[0], FUNC(pic8259_device::ir3_w)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(i8257_device::dreq0_w)); MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", fanuc_floppies, "525dd", fanucspmg_state::floppy_formats) diff --git a/src/mame/drivers/fs3216.cpp b/src/mame/drivers/fs3216.cpp index 070faf92313..ed2b11b1852 100644 --- a/src/mame/drivers/fs3216.cpp +++ b/src/mame/drivers/fs3216.cpp @@ -178,7 +178,7 @@ void fs3216_state::fs3216(machine_config &config) Z80DART(config, "dart", 44.2368_MHz_XTAL / 8); // Z8470BPS - UPD765A(config, m_fdc, true, false); + UPD765A(config, m_fdc, 16_MHz_XTAL / 2, true, false); X2212(config, m_earom); diff --git a/src/mame/drivers/gridcomp.cpp b/src/mame/drivers/gridcomp.cpp index 8d1d2e12889..2c5d357fa3f 100644 --- a/src/mame/drivers/gridcomp.cpp +++ b/src/mame/drivers/gridcomp.cpp @@ -391,8 +391,8 @@ MACHINE_CONFIG_START(gridcomp_state::grid1101) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("keyboard", GRID_KEYBOARD, 0) - MCFG_GRID_KEYBOARD_CB(PUT(gridcomp_state, kbd_put)) + grid_keyboard_device &keyboard(GRID_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(gridcomp_state::kbd_put)); i7220_device &i7220(I7220(config, "i7220", XTAL(4'000'000))); i7220.set_data_size(3); // 3 1-Mbit MBM's diff --git a/src/mame/drivers/hec2hrp.cpp b/src/mame/drivers/hec2hrp.cpp index 9b5cd732fea..bfa41800e1f 100644 --- a/src/mame/drivers/hec2hrp.cpp +++ b/src/mame/drivers/hec2hrp.cpp @@ -464,7 +464,7 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mx40) MCFG_DEVICE_ADD("disc2cpu", Z80, 4_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(hecdisc2_mem) MCFG_DEVICE_IO_MAP(hecdisc2_io) - UPD765A(config, m_upd_fdc, false, true); + UPD765A(config, m_upd_fdc, 8'000'000, false, true); m_upd_fdc->intrq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_interrupt)); m_upd_fdc->drq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_dma_irq)); MCFG_FLOPPY_DRIVE_ADD(m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats) @@ -504,7 +504,7 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2hrx) MCFG_DEVICE_ADD("disc2cpu", Z80, 4_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(hecdisc2_mem) MCFG_DEVICE_IO_MAP(hecdisc2_io) - UPD765A(config, m_upd_fdc, false, true); + UPD765A(config, m_upd_fdc, 8'000'000, false, true); m_upd_fdc->intrq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_interrupt)); m_upd_fdc->drq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_dma_irq)); MCFG_FLOPPY_DRIVE_ADD(m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats) @@ -575,7 +575,7 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mx80) MCFG_DEVICE_ADD("disc2cpu", Z80, 4_MHz_XTAL) MCFG_DEVICE_PROGRAM_MAP(hecdisc2_mem) MCFG_DEVICE_IO_MAP(hecdisc2_io) - UPD765A(config, m_upd_fdc, false, true); + UPD765A(config, m_upd_fdc, 8'000'000, false, true); m_upd_fdc->intrq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_interrupt)); m_upd_fdc->drq_wr_callback().set(FUNC(hec2hrp_state::disc2_fdc_dma_irq)); MCFG_FLOPPY_DRIVE_ADD(m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/hp16500.cpp b/src/mame/drivers/hp16500.cpp index b4f15cc1029..f3bc942d289 100644 --- a/src/mame/drivers/hp16500.cpp +++ b/src/mame/drivers/hp16500.cpp @@ -65,7 +65,7 @@ public: m_mlc(*this, "mlc") { } - void hp16500(machine_config &config); + void hp16500b(machine_config &config); void hp16500a(machine_config &config); void hp1651(machine_config &config); void hp1650(machine_config &config); @@ -477,7 +477,8 @@ MACHINE_CONFIG_START(hp16500_state::hp16500a) SPEAKER(config, "rspeaker").front_right(); MACHINE_CONFIG_END -MACHINE_CONFIG_START(hp16500_state::hp16500) +void hp16500_state::hp16500b(machine_config &config) +{ /* basic machine hardware */ M68EC030(config, m_maincpu, 25'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &hp16500_state::hp16500_map); @@ -498,9 +499,11 @@ MACHINE_CONFIG_START(hp16500_state::hp16500) // later with a 16500b specific keyboard implementation HP_HIL_SLOT(config, "hil1", "mlc", hp_hil_devices, "hp_ipc_kbd"); + //WD37C65C(config, "fdc", 16_MHz_XTAL); + SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( hp16500 ) INPUT_PORTS_END @@ -534,4 +537,4 @@ ROM_END COMP( 1989, hp1650b, 0, 0, hp1650, hp16500, hp16500_state, empty_init, "Hewlett Packard", "HP 1650b", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) COMP( 1989, hp1651b, 0, 0, hp1651, hp16500, hp16500_state, empty_init, "Hewlett Packard", "HP 1651b", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) COMP( 1991, hp165ka0, 0, 0, hp16500a, hp16500, hp16500_state, empty_init, "Hewlett Packard", "HP 16500a", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) -COMP( 1991, hp16500b, 0, 0, hp16500, hp16500, hp16500_state, empty_init, "Hewlett Packard", "HP 16500b", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) +COMP( 1991, hp16500b, 0, 0, hp16500b, hp16500, hp16500_state, empty_init, "Hewlett Packard", "HP 16500b", MACHINE_NOT_WORKING|MACHINE_NO_SOUND) diff --git a/src/mame/drivers/hyhoo.cpp b/src/mame/drivers/hyhoo.cpp index acb753dd0d0..7e207e19d47 100644 --- a/src/mame/drivers/hyhoo.cpp +++ b/src/mame/drivers/hyhoo.cpp @@ -244,9 +244,7 @@ MACHINE_CONFIG_START(hyhoo_state::hyhoo) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 16, 240-1) MCFG_SCREEN_UPDATE_DRIVER(hyhoo_state, screen_update_hyhoo) - MCFG_NB1413M3_ADD("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HYHOO ) - + NB1413M3(config, m_nb1413m3, 0, NB1413M3_HYHOO); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -262,11 +260,11 @@ MACHINE_CONFIG_START(hyhoo_state::hyhoo) MACHINE_CONFIG_END -MACHINE_CONFIG_START(hyhoo_state::hyhoo2) +void hyhoo_state::hyhoo2(machine_config &config) +{ hyhoo(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HYHOO2 ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_HYHOO2); +} ROM_START( hyhoo ) diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp index 6bad9e72d5b..cf62f4b26c5 100644 --- a/src/mame/drivers/ibm6580.cpp +++ b/src/mame/drivers/ibm6580.cpp @@ -882,7 +882,7 @@ static void dw_floppies(device_slot_interface &device) } MACHINE_CONFIG_START(ibm6580_state::ibm6580) - MCFG_DEVICE_ADD("maincpu", I8086, XTAL(14'745'600)/3) + MCFG_DEVICE_ADD("maincpu", I8086, 14.7456_MHz_XTAL / 3) MCFG_DEVICE_PROGRAM_MAP(ibm6580_mem) MCFG_DEVICE_IO_MAP(ibm6580_io) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) @@ -890,7 +890,7 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580) RAM(config, RAM_TAG).set_default_size("128K").set_extra_options("160K,192K,224K,256K,320K,384K"); MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL(25'000'000)/2, 833, 0, 640, 428, 0, 400) + MCFG_SCREEN_RAW_PARAMS(25_MHz_XTAL / 2, 833, 0, 640, 428, 0, 400) MCFG_SCREEN_UPDATE_DRIVER(ibm6580_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ibm6580_state, vblank_w)) @@ -916,7 +916,7 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580) m_kbd->out_strobe_handler().set(FUNC(ibm6580_state::kb_strobe_w)); m_kbd->out_strobe_handler().append(m_ppi8255, FUNC(i8255_device::pc4_w)); - I8257(config, m_dma8257, XTAL(14'745'600)/3); + I8257(config, m_dma8257, 14.7456_MHz_XTAL / 3); m_dma8257->out_hrq_cb().set(FUNC(ibm6580_state::hrq_w)); m_dma8257->out_tc_cb().set(m_fdc, FUNC(upd765a_device::tc_line_w)); m_dma8257->in_memr_cb().set(FUNC(ibm6580_state::memory_read_byte)); @@ -924,7 +924,7 @@ MACHINE_CONFIG_START(ibm6580_state::ibm6580) m_dma8257->in_ior_cb<0>().set(m_fdc, FUNC(upd765a_device::mdma_r)); m_dma8257->out_iow_cb<0>().set(m_fdc, FUNC(upd765a_device::mdma_w)); - UPD765A(config, m_fdc, false, false); + UPD765A(config, m_fdc, 24_MHz_XTAL / 3, false, false); m_fdc->intrq_wr_callback().set(FUNC(ibm6580_state::floppy_intrq)); // m_fdc->intrq_wr_callback().append(m_pic8259, FUNC(pic8259_device::ir4_w)); m_fdc->drq_wr_callback().set(m_dma8257, FUNC(i8257_device::dreq0_w)); diff --git a/src/mame/drivers/ibmpcjr.cpp b/src/mame/drivers/ibmpcjr.cpp index 8829ed707c6..c1b64410518 100644 --- a/src/mame/drivers/ibmpcjr.cpp +++ b/src/mame/drivers/ibmpcjr.cpp @@ -660,7 +660,7 @@ MACHINE_CONFIG_START(pcjr_state::ibmpcjr) MCFG_CASSETTE_ADD( "cassette") MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED) - UPD765A(config, m_fdc, false, false); + UPD765A(config, m_fdc, 8'000'000, false, false); MCFG_FLOPPY_DRIVE_ADD("fdc:0", pcjr_floppies, "525dd", isa8_fdc_device::floppy_formats) MCFG_SLOT_FIXED(true) diff --git a/src/mame/drivers/imsai.cpp b/src/mame/drivers/imsai.cpp index 327d326ddc6..589d97fbeb6 100644 --- a/src/mame/drivers/imsai.cpp +++ b/src/mame/drivers/imsai.cpp @@ -105,18 +105,19 @@ void imsai_state::machine_reset() m_term_data = 0; } -MACHINE_CONFIG_START(imsai_state::imsai) +void imsai_state::imsai(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8085A, XTAL(6'000'000)) - MCFG_DEVICE_PROGRAM_MAP(imsai_mem) - MCFG_DEVICE_IO_MAP(imsai_io) + I8085A(config, m_maincpu, XTAL(6'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &imsai_state::imsai_mem); + m_maincpu->set_addrmap(AS_IO, &imsai_state::imsai_io); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(imsai_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(imsai_state::kbd_put)); /* Devices */ - MCFG_DEVICE_ADD("uart", I8251, 0) + I8251(config, "uart", 0); PIT8253(config, m_pit, 0); m_pit->set_clk<0>(6_MHz_XTAL / 3); // Timer 0: baud rate gen for 8251 @@ -124,7 +125,7 @@ MACHINE_CONFIG_START(imsai_state::imsai) m_pit->out_handler<0>().append("uart", FUNC(i8251_device::write_rxc)); m_pit->set_clk<1>(6_MHz_XTAL / 3); // Timer 1: user m_pit->set_clk<2>(6_MHz_XTAL / 3); // Timer 2: user -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( imsai ) diff --git a/src/mame/drivers/ipds.cpp b/src/mame/drivers/ipds.cpp index da688422ab2..96bd4f3e176 100644 --- a/src/mame/drivers/ipds.cpp +++ b/src/mame/drivers/ipds.cpp @@ -154,8 +154,8 @@ MACHINE_CONFIG_START(ipds_state::ipds) MCFG_I8275_CHARACTER_WIDTH(6) MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(ipds_state, crtc_display_pixels) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(ipds_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(ipds_state::kbd_put)); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp index d77bf234b14..70ca451f8b5 100644 --- a/src/mame/drivers/itech32.cpp +++ b/src/mame/drivers/itech32.cpp @@ -16,7 +16,7 @@ * Pairs Redemption (Child's version of pairs) * Driver's Edge (1 set) * World Class Bowling (13 sets) - * Street Fighter: The Movie (4 sets) + * Street Fighter: The Movie (5 sets) * Shuffleshot (3 sets) * Golden Tee 3D Golf (12 sets) * Golden Tee Golf '97 (7 sets) @@ -2886,7 +2886,7 @@ ROM_START( sftm ) /* Version 1.12, P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 RO ROM_END -ROM_START( sftm111 ) /* Version 1.11, P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ +ROM_START( sftm111 ) /* Version 1.11, P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) ROM_LOAD32_BYTE( "sfm_0_v1.11.prom0", 0x00000, 0x40000, CRC(28187ddc) SHA1(7e4fa285be9389c913fca849098a7c0d9404df7a) ) /* CAPCOM labels */ ROM_LOAD32_BYTE( "sfm_1_v1.11.prom1", 0x00001, 0x40000, CRC(ec2ce6fa) SHA1(b79aebb73ba77c2ebe081142853e81473743ac46) ) @@ -2922,7 +2922,7 @@ ROM_START( sftm111 ) /* Version 1.11, P/N 1064 REV 1 Mainboard, P/N 1073 REV ROM_END -ROM_START( sftm110 ) /* Version 1.10, P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ +ROM_START( sftm110 ) /* Version 1.10, P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) ROM_LOAD32_BYTE( "sfm_0_v1.1.prom0", 0x00000, 0x40000, CRC(00c0c63c) SHA1(39f614cca51fe7843c2158b6d9abdc52dc1b0bef) ) /* CAPCOM labels */ ROM_LOAD32_BYTE( "sfm_1_v1.1.prom1", 0x00001, 0x40000, CRC(d4d2a67e) SHA1(88069caf171bb9c5602bc493f1f1dafa26d2fc78) ) @@ -2958,7 +2958,43 @@ ROM_START( sftm110 ) /* Version 1.10, P/N 1064 REV 1 Mainboard, P/N 1073 REV ROM_END -ROM_START( sftmj ) /* Version 1.12N (Japan), P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ +ROM_START( sftmj114 ) /* Version 1.14N (Japan), P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ + ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) + ROM_LOAD32_BYTE( "sfmn_0_v1.14.prom0", 0x00000, 0x40000, CRC(2a0c0bb7) SHA1(5722a399ed5dff55d47e096fb04a5d5b16de2f9a) ) + ROM_LOAD32_BYTE( "sfmn_1_v1.14.prom1", 0x00001, 0x40000, CRC(088aa12c) SHA1(3c488068edea7ee726b7b837fedeeb0374a7b1ac) ) + ROM_LOAD32_BYTE( "sfmn_2_v1.14.prom2", 0x00002, 0x40000, CRC(7120836e) SHA1(219ca837d1396ec39bb08272d2d9060441e45daf) ) + ROM_LOAD32_BYTE( "sfmn_3_v1.14.prom3", 0x00003, 0x40000, CRC(84eb200d) SHA1(84150d978bd0b9f6363adde35c74fc5c77af6cf1) ) + + ROM_REGION( 0x48000, "soundcpu", 0 ) + ROM_LOAD( "sfm_snd_v1.11.u23", 0x10000, 0x38000, CRC(004854ed) SHA1(7ecb74dc3f45b038cc9904fea5c89d3e74fcbcf3) ) /* Labeled as "SFM SND V1.11 U23" */ + ROM_CONTINUE( 0x08000, 0x08000 ) + + ROM_REGION( 0x2080000, "gfx1", 0 ) + ROM_LOAD32_BYTE( "rm0-0.grm0_0", 0x0000000, 0x400000, CRC(09ef29cb) SHA1(430da5b00554582391478849d5b1547fe12eedbe) ) /* KM 23C3200AG-12 mask ROMs */ + ROM_LOAD32_BYTE( "rm0-1.grm0_1", 0x0000001, 0x400000, CRC(6f5910fa) SHA1(1979d19dd36a9118dfaf021e05302982be5dbe69) ) + ROM_LOAD32_BYTE( "rm0-2.grm0_2", 0x0000002, 0x400000, CRC(b8a2add5) SHA1(62e5bef936f014ac836c0cd5322eaba7018496b4) ) + ROM_LOAD32_BYTE( "rm0-3.grm0_3", 0x0000003, 0x400000, CRC(6b6ff867) SHA1(72bc95ef361f9238602f0e03aed0adac8b59d227) ) + ROM_LOAD32_BYTE( "rm1-0.grm1_0", 0x1000000, 0x400000, CRC(d5d65f77) SHA1(0bbb83bb42a442ef157472f3243ab44efa0c0aa0) ) + ROM_LOAD32_BYTE( "rm1-1.grm1_1", 0x1000001, 0x400000, CRC(90467e27) SHA1(217561664871c60b0193337e34020ddd336b8f15) ) + ROM_LOAD32_BYTE( "rm1-2.grm1_2", 0x1000002, 0x400000, CRC(903e56c2) SHA1(843ed9855ffdf37b100b3c5614139d552fd9cd6d) ) + ROM_LOAD32_BYTE( "rm1-3.grm1_3", 0x1000003, 0x400000, CRC(fac35686) SHA1(ba99ab265620575c14c46806dc543d1f9fd24462) ) + + /* GROM2_0 through GROM2_3 are unpopulated 23C32000 mask ROM locations */ + + ROM_LOAD32_BYTE( "sfm_grm3_0.grm3_0", 0x2000000, 0x020000, CRC(3e1f76f7) SHA1(8aefe376e7248a583a6af02e5f9b2a4b48cc91d7) ) + ROM_LOAD32_BYTE( "sfm_grm3_1.grm3_1", 0x2000001, 0x020000, CRC(578054b6) SHA1(99201959de28dbfd7692cedea4485751d3d4788f) ) + ROM_LOAD32_BYTE( "sfm_grm3_2.grm3_2", 0x2000002, 0x020000, CRC(9af2f698) SHA1(e679728d8eba9f09379e503fa380202cd9adfde1) ) + ROM_LOAD32_BYTE( "sfm_grm3_3.grm3_3", 0x2000003, 0x020000, CRC(cd38d1d6) SHA1(0cea60d6897b34eeb13997030f6ee7e1dfb3c833) ) + + ROM_REGION16_BE( 0x400000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "sfm_srom0.srom0", 0x000000, 0x200000, CRC(6ca1d3fc) SHA1(904f4c55a1bc83531a6d87ff706afd8cdfaee83b) ) /* Custom 42 Pin mask ROM sample set */ + + ROM_REGION16_BE( 0x400000, "ensoniq.3", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "sfm_srom3.srom3", 0x000000, 0x080000, CRC(4f181534) SHA1(e858a33b22558665427146ec79dfba48edc20c2c) ) +ROM_END + + +ROM_START( sftmj112 ) /* Version 1.12N (Japan), P/N 1064 REV 1 Mainboard, P/N 1073 REV 0 ROM board, P/N 1066 REV 2 Sound board */ ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) ROM_LOAD32_BYTE( "sfmn_0_v1.12.prom0", 0x00000, 0x40000, CRC(640a04a8) SHA1(adc7f5880962cbcc5f9f28e72a84070da6e2ec36) ) /* CAPCOM labels */ ROM_LOAD32_BYTE( "sfmn_1_v1.12.prom1", 0x00001, 0x40000, CRC(2a27b690) SHA1(f63c3665ec030ecc2d7a10ead182941ade1c79d0) ) @@ -3029,7 +3065,7 @@ ROM_START( shufshot ) /* Version 1.40 (PCB P/N 1083 Rev 2) */ ROM_END -ROM_START( shufshot139 ) /* Version 1.39 (PCB P/N 1083 Rev 2) */ +ROM_START( shufshot139 ) /* Version 1.39 (PCB P/N 1083 Rev 2) */ ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) ROM_LOAD32_BYTE( "shot_prom0_v1.39.prom0", 0x00000, 0x20000, CRC(e811fc4a) SHA1(9e1d8f64ac89ac865929f6a23f66d95eeeda3ac9) ) ROM_LOAD32_BYTE( "shot_prom1_v1.39.prom1", 0x00001, 0x20000, CRC(f9d120c5) SHA1(f94216f1fb6d810ddee98479e83f0719b30b768f) ) @@ -3064,7 +3100,7 @@ ROM_START( shufshot139 ) /* Version 1.39 (PCB P/N 1083 Rev 2) */ ROM_END -ROM_START( shufshot137 ) /* Version 1.37 (PCB P/N 1083 Rev 2) */ +ROM_START( shufshot137 ) /* Version 1.37 (PCB P/N 1083 Rev 2) */ ROM_REGION32_BE( CODE_SIZE, "user1", 0 ) ROM_LOAD32_BYTE( "shot_prom0_v1.37.prom0", 0x00000, 0x20000, CRC(6499c76f) SHA1(60fdaefb09088ac609addd40569bd7fab12593bc) ) ROM_LOAD32_BYTE( "shot_prom1_v1.37.prom1", 0x00001, 0x20000, CRC(64fb47a4) SHA1(32ce9d91b16b8aaf545c0a22842ad8d806727a17) ) @@ -4660,7 +4696,8 @@ GAME( 1995, wcbowl10, wcbowl, bloodstm, wcbowl, itech32_state, init_wcb GAME( 1995, sftm, 0, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ GAME( 1995, sftm111, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.11)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ GAME( 1995, sftm110, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.10)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ -GAME( 1995, sftmj, sftm, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1995, sftmj114, sftm, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.14N, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1995, sftmj112, sftm, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */ GAME( 1997, shufshot, 0, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.40)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */ GAME( 1997, shufshot139, shufshot, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.39)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */ GAME( 1997, shufshot137, shufshot, sftm, shufshto, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.37)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */ diff --git a/src/mame/drivers/jonos.cpp b/src/mame/drivers/jonos.cpp index 3641f690713..b7e74808269 100644 --- a/src/mame/drivers/jonos.cpp +++ b/src/mame/drivers/jonos.cpp @@ -192,8 +192,8 @@ MACHINE_CONFIG_START(jonos_state::jonos) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_jonos) MCFG_PALETTE_ADD_MONOCHROME("palette") - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(jonos_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(jonos_state::kbd_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/jupiter.cpp b/src/mame/drivers/jupiter.cpp index bea56375950..2f0f38d0b53 100644 --- a/src/mame/drivers/jupiter.cpp +++ b/src/mame/drivers/jupiter.cpp @@ -341,8 +341,8 @@ MACHINE_CONFIG_START(jupiter3_state::jupiter3) MCFG_FLOPPY_DRIVE_ADD(INS1771N1_TAG":0", jupiter_floppies, "525ssdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(INS1771N1_TAG":1", jupiter_floppies, nullptr, floppy_image_device::default_floppy_formats) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(jupiter3_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(jupiter3_state::kbd_put)); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); diff --git a/src/mame/drivers/karnov.cpp b/src/mame/drivers/karnov.cpp index bfd08cd9e87..1e009092a5e 100644 --- a/src/mame/drivers/karnov.cpp +++ b/src/mame/drivers/karnov.cpp @@ -789,7 +789,9 @@ MACHINE_CONFIG_START(karnov_state::karnov) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, karnov_state, vbint_w)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_karnov) - MCFG_DECO_RMC3_ADD_PROMS("palette","proms",1024) // xxxxBBBBGGGGRRRR with custom weighting + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting + m_palette->set_prom_region("proms"); + m_palette->set_init("palette", FUNC(deco_rmc3_device::palette_init_proms)); DECO_KARNOVSPRITES(config, m_spritegen, 0); m_spritegen->set_gfx_region(2); @@ -867,7 +869,9 @@ MACHINE_CONFIG_START(karnov_state::wndrplnt) MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, karnov_state, vbint_w)) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_karnov) - MCFG_DECO_RMC3_ADD_PROMS("palette","proms",1024) // xxxxBBBBGGGGRRRR with custom weighting + DECO_RMC3(config, m_palette, 0, 1024); // xxxxBBBBGGGGRRRR with custom weighting + m_palette->set_prom_region("proms"); + m_palette->set_init("palette", FUNC(deco_rmc3_device::palette_init_proms)); DECO_KARNOVSPRITES(config, m_spritegen, 0); m_spritegen->set_gfx_region(2); diff --git a/src/mame/drivers/kdt6.cpp b/src/mame/drivers/kdt6.cpp index e201993d87a..0b0c6eb6eca 100644 --- a/src/mame/drivers/kdt6.cpp +++ b/src/mame/drivers/kdt6.cpp @@ -709,7 +709,7 @@ MACHINE_CONFIG_START(kdt6_state::psi98) UPD1990A(config, m_rtc); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set("ctc1", FUNC(z80ctc_device::trg0)); m_fdc->drq_wr_callback().set(FUNC(kdt6_state::fdc_drq_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", kdt6_floppies, "fd55f", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/konamim2.cpp b/src/mame/drivers/konamim2.cpp index 1aeac3f1c40..14b6040f676 100644 --- a/src/mame/drivers/konamim2.cpp +++ b/src/mame/drivers/konamim2.cpp @@ -1316,7 +1316,7 @@ MACHINE_CONFIG_START(konamim2_state::m2) MCFG_DEVICE_PROGRAM_MAP(m2_main_s) // TODO: declaring as second screen causes palette confusion (wants to use palette from the other screen?) - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) + GENERIC_TERMINAL(config, m_terminal, 0); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/ksys573.cpp b/src/mame/drivers/ksys573.cpp index e5ef2bf3779..7d38ba861bb 100644 --- a/src/mame/drivers/ksys573.cpp +++ b/src/mame/drivers/ksys573.cpp @@ -1578,11 +1578,11 @@ WRITE_LINE_MEMBER( ksys573_state::salarymc_lamp_clk ) void ksys573_state::salarymc_cassette_install(device_t *device) { - devcb_base *devcb; - (void)devcb; - MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER( WRITELINE( *this, ksys573_state, salarymc_lamp_clk ) ) - MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER( WRITELINE( *this, ksys573_state, salarymc_lamp_rst ) ) - MCFG_KONAMI573_CASSETTE_Y_D7_HANDLER( WRITELINE( *this, ksys573_state, salarymc_lamp_d ) ) + konami573_cassette_y_device &cassette = downcast<konami573_cassette_y_device &>(*device); + + cassette.d5_handler().set(*this, FUNC(ksys573_state::salarymc_lamp_clk)); + cassette.d6_handler().set(*this, FUNC(ksys573_state::salarymc_lamp_rst)); + cassette.d7_handler().set(*this, FUNC(ksys573_state::salarymc_lamp_d)); } void ksys573_state::init_salarymc() @@ -1661,26 +1661,26 @@ WRITE_LINE_MEMBER( ksys573_state::hyperbbc_lamp_strobe3 ) void ksys573_state::hyperbbc_cassette_install(device_t *device) { - devcb_base *devcb; - (void)devcb; - MCFG_KONAMI573_CASSETTE_Y_D0_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_strobe3 ) ) // line shared with x76f100 sda - MCFG_KONAMI573_CASSETTE_Y_D1_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_strobe2 ) ) // line shared with x76f100 scl - MCFG_KONAMI573_CASSETTE_Y_D3_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_strobe1 ) ) // line shared with x76f100 rst - MCFG_KONAMI573_CASSETTE_Y_D4_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_green ) ) - MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_blue ) ) - MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_red ) ) - MCFG_KONAMI573_CASSETTE_Y_D7_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_start ) ) + konami573_cassette_y_device &cassette = downcast<konami573_cassette_y_device &>(*device); + + cassette.d0_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_strobe3)); // line shared with x76f100 sda + cassette.d1_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_strobe2)); // line shared with x76f100 scl + cassette.d3_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_strobe1)); // line shared with x76f100 rst + cassette.d4_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_green)); + cassette.d5_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_blue)); + cassette.d6_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_red)); + cassette.d7_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_start)); } void ksys573_state::hypbbc2p_cassette_install(device_t *device) { - devcb_base *devcb; - (void)devcb; - MCFG_KONAMI573_CASSETTE_Y_D0_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_strobe2 ) ) // line shared with x76f100 sda - MCFG_KONAMI573_CASSETTE_Y_D3_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_strobe1 ) ) // line shared with x76f100 rst - MCFG_KONAMI573_CASSETTE_Y_D4_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_green ) ) - MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_blue ) ) - MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER( WRITELINE( *this, ksys573_state, hyperbbc_lamp_red ) ) + konami573_cassette_y_device &cassette = downcast<konami573_cassette_y_device &>(*device); + + cassette.d0_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_strobe2)); // line shared with x76f100 sda + cassette.d3_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_strobe1)); // line shared with x76f100 rst + cassette.d4_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_green)); + cassette.d5_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_blue)); + cassette.d6_handler().set(*this, FUNC(ksys573_state::hyperbbc_lamp_red)); } void ksys573_state::init_hyperbbc() @@ -2108,8 +2108,8 @@ MACHINE_CONFIG_START(ksys573_state::konami573) MCFG_SLOT_OPTION_MACHINE_CONFIG( "cr589", cr589_config ) MCFG_SLOT_DEFAULT_OPTION( "cr589" ) - MCFG_DEVICE_ADD( "cassette", KONAMI573_CASSETTE_SLOT, 0 ) - MCFG_KONAMI573_CASSETTE_DSR_HANDLER(WRITELINE( "maincpu:sio1", psxsio1_device, write_dsr ) ) + konami573_cassette_slot_device &cassette(KONAMI573_CASSETTE_SLOT(config, "cassette", 0)); + cassette.dsr_handler().set("maincpu:sio1", FUNC(psxsio1_device::write_dsr)); // onboard flash FUJITSU_29F016A( config, "29f016a.31m" ); @@ -2196,49 +2196,49 @@ MACHINE_CONFIG_END // // Up to two carts can be used -MACHINE_CONFIG_START(ksys573_state::cassx) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_X ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassx(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_X ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::cassxi) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_XI ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassxi(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_XI ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::cassy) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_Y ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassy(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_Y ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::cassyi) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_YI ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassyi(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_YI ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::cassyyi) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_YI ) - MCFG_SLOT_OPTION_ADD( "install", KONAMI573_CASSETTE_YI ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassyyi(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_YI ); + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "install", KONAMI573_CASSETTE_YI ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::casszi) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_ZI ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::casszi(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_ZI ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} -MACHINE_CONFIG_START(ksys573_state::cassxzi) - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_ADD( "game", KONAMI573_CASSETTE_ZI ) - MCFG_SLOT_OPTION_ADD( "install", KONAMI573_CASSETTE_XI ) - MCFG_SLOT_DEFAULT_OPTION( "game" ) -MACHINE_CONFIG_END +void ksys573_state::cassxzi(machine_config &config) +{ + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "game", KONAMI573_CASSETTE_ZI ); + subdevice<konami573_cassette_slot_device>("cassette")->option_add( "install", KONAMI573_CASSETTE_XI ); + subdevice<konami573_cassette_slot_device>("cassette")->set_default_option( "game" ); +} // Dance Dance Revolution @@ -2434,29 +2434,29 @@ void ksys573_state::fbaitbc(machine_config & config) cassx(config); } -MACHINE_CONFIG_START(ksys573_state::hyperbbc) +void ksys573_state::hyperbbc(machine_config &config) +{ konami573(config); cassy(config); // The game doesn't check the security chip - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_MACHINE_CONFIG( "game", [this] (device_t *device) { hyperbbc_cassette_install(device); } ) -MACHINE_CONFIG_END + subdevice<konami573_cassette_slot_device>("cassette")->set_option_machine_config( "game", [this] (device_t *device) { hyperbbc_cassette_install(device); } ); +} -MACHINE_CONFIG_START(ksys573_state::hypbbc2p) +void ksys573_state::hypbbc2p(machine_config &config) +{ konami573(config); cassy(config); - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_MACHINE_CONFIG( "game", [this] (device_t *device) { hypbbc2p_cassette_install(device); } ) -MACHINE_CONFIG_END + subdevice<konami573_cassette_slot_device>("cassette")->set_option_machine_config( "game", [this] (device_t *device) { hypbbc2p_cassette_install(device); } ); +} -MACHINE_CONFIG_START(ksys573_state::salarymc) +void ksys573_state::salarymc(machine_config &config) +{ konami573(config); cassyi(config); - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_MACHINE_CONFIG( "game", [this] (device_t *device) { salarymc_cassette_install(device); } ) -MACHINE_CONFIG_END + subdevice<konami573_cassette_slot_device>("cassette")->set_option_machine_config( "game", [this] (device_t *device) { salarymc_cassette_install(device); } ); +} void ksys573_state::gchgchmp(machine_config &config) { @@ -2465,16 +2465,17 @@ void ksys573_state::gchgchmp(machine_config &config) cassx(config); } -MACHINE_CONFIG_START(ksys573_state::pnchmn) +void ksys573_state::pnchmn(machine_config &config) +{ + konami573(config); m_maincpu->set_addrmap(AS_PROGRAM, &ksys573_state::konami573a_map); cassxi(config); pccard1_32mb(config); - MCFG_DEVICE_MODIFY( "cassette" ) - MCFG_SLOT_OPTION_MACHINE_CONFIG( "game", [this] (device_t *device) { punchmania_cassette_install(device); } ) -MACHINE_CONFIG_END + subdevice<konami573_cassette_slot_device>("cassette")->set_option_machine_config( "game", [this] (device_t *device) { punchmania_cassette_install(device); } ); +} void ksys573_state::pnchmn2(machine_config &config) { diff --git a/src/mame/drivers/llc.cpp b/src/mame/drivers/llc.cpp index f203f4eb088..99baf74c5cb 100644 --- a/src/mame/drivers/llc.cpp +++ b/src/mame/drivers/llc.cpp @@ -240,8 +240,8 @@ MACHINE_CONFIG_START(llc_state::llc1) ctc.zc_callback<0>().set("z80ctc", FUNC(z80ctc_device::trg1)); ctc.zc_callback<1>().set("z80ctc", FUNC(z80ctc_device::trg3)); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(llc_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(llc_state::kbd_put)); MACHINE_CONFIG_END MACHINE_CONFIG_START(llc_state::llc2) diff --git a/src/mame/drivers/m5.cpp b/src/mame/drivers/m5.cpp index 3d9ee11c460..ecef78735a7 100644 --- a/src/mame/drivers/m5.cpp +++ b/src/mame/drivers/m5.cpp @@ -1443,7 +1443,7 @@ MACHINE_CONFIG_START(m5_state::m5) m_ppi->in_pc_callback().set(FUNC(m5_state::ppi_pc_r)); m_ppi->out_pc_callback().set(FUNC(m5_state::ppi_pc_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_fd5cpu, INPUT_LINE_IRQ0); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", m5_floppies, "525dd", m5_state::floppy_formats) diff --git a/src/mame/drivers/mbc200.cpp b/src/mame/drivers/mbc200.cpp index 4c22b3f5324..e87aa2a7af5 100644 --- a/src/mame/drivers/mbc200.cpp +++ b/src/mame/drivers/mbc200.cpp @@ -353,8 +353,8 @@ MACHINE_CONFIG_START(mbc200_state::mbc200) MCFG_FLOPPY_DRIVE_SOUND(true) /* Keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(mbc200_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(mbc200_state::kbd_put)); /* software lists */ MCFG_SOFTWARE_LIST_ADD("flop_list", "mbc200") diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp index e62bce4de00..636df2fba74 100644 --- a/src/mame/drivers/mbc55x.cpp +++ b/src/mame/drivers/mbc55x.cpp @@ -24,6 +24,7 @@ ToDo: #include "bus/rs232/rs232.h" #include "cpu/mcs48/mcs48.h" #include "machine/clock.h" +#include "machine/i8087.h" #include "machine/input_merger.h" #include "screen.h" #include "softlist.h" @@ -258,6 +259,14 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x) m_maincpu->set_addrmap(AS_PROGRAM, &mbc55x_state::mbc55x_mem); m_maincpu->set_addrmap(AS_IO, &mbc55x_state::mbc55x_io); m_maincpu->set_irq_acknowledge_callback(PIC8259_TAG, FUNC(pic8259_device::inta_cb)); + m_maincpu->esc_opcode_handler().set("coproc", FUNC(i8087_device::insn_w)); + m_maincpu->esc_data_handler().set("coproc", FUNC(i8087_device::addr_w)); + + i8087_device &i8087(I8087(config, "coproc", 14.318181_MHz_XTAL / 4)); + i8087.set_addrmap(AS_PROGRAM, &mbc55x_state::mbc55x_mem); + i8087.set_data_width(8); + i8087.irq().set(m_pic, FUNC(pic8259_device::ir6_w)); + i8087.busy().set_inputline("maincpu", INPUT_LINE_TEST); ADDRESS_MAP_BANK(config, m_iodecode); m_iodecode->endianness(ENDIANNESS_LITTLE); @@ -331,7 +340,7 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x) /* Software list */ MCFG_SOFTWARE_LIST_ADD("disk_list","mbc55x") - isa8_device &isa(ISA8(config, "isa", 0)); + isa8_device &isa(ISA8(config, "isa", 14.318181_MHz_XTAL / 4)); isa.set_cputag(m_maincpu); isa.irq7_callback().set(m_pic, FUNC(pic8259_device::ir7_w)); // all other IRQ and DRQ lines are NC //isa.iochck_callback().set_inputline(m_maincpu, INPUT_LINE_NMI)); diff --git a/src/mame/drivers/mdisk.cpp b/src/mame/drivers/mdisk.cpp new file mode 100644 index 00000000000..4551c485ac8 --- /dev/null +++ b/src/mame/drivers/mdisk.cpp @@ -0,0 +1,271 @@ +// license: GPL-2.0+ +// copyright-holders: Dirk Best +/*************************************************************************** + + mupid M-Disk Comp.-A + Grundig FL-100 + + Floppy disk station, usually connected to a mupid C2D2/C2A2 or the + Grundig PTC-100. + + Everything here is guessed based on the software and a PCB image. You + can see garbled output when you connect the builtin terminal to the + first serial port ('ser'). It does boot from floppy too, so presumely + only needs an emulated main system to work. + +***************************************************************************/ + +#include "emu.h" +#include "cpu/z80/z80.h" +#include "machine/clock.h" +#include "machine/i8251.h" +#include "machine/i8271.h" +#include "machine/ram.h" +#include "bus/rs232/rs232.h" +#include "imagedev/floppy.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class mdisk_state : public driver_device +{ +public: + mdisk_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_cpu(*this, "maincpu"), + m_ram(*this, "ram"), + m_fdc(*this, "fdc"), + m_floppy(*this, "fdc:%u", 0), + m_rom_timer(nullptr), + m_uart1_rxrdy(0), m_uart1_txrdy(0), + m_fdc_irq(0) + { } + + void mdisk(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + TIMER_CALLBACK_MEMBER(rom_timer_callback); + DECLARE_WRITE_LINE_MEMBER(uart1_rxrdy_w); + DECLARE_WRITE_LINE_MEMBER(uart1_txrdy_w); + DECLARE_WRITE_LINE_MEMBER(fdc_irq_w); + DECLARE_WRITE_LINE_MEMBER(fdc_motor_w); + DECLARE_WRITE8_MEMBER(fdc_side_w); + + void update_irq(uint8_t vector); + + required_device<z80_device> m_cpu; + required_device<ram_device> m_ram; + required_device<i8271_device> m_fdc; + required_device_array<floppy_connector, 2> m_floppy; + + void mdisk_mem(address_map &map); + void mdisk_io(address_map &map); + + emu_timer *m_rom_timer; + + int m_uart1_rxrdy, m_uart1_txrdy, m_fdc_irq; +}; + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void mdisk_state::mdisk_mem(address_map &map) +{ + map(0x0000, 0x1fff).bankr("bank1r").bankw("bank1w"); + map(0x2000, 0xffff).bankrw("bank2"); +} + +void mdisk_state::mdisk_io(address_map &map) +{ + map.global_mask(0xff); + map(0x20, 0x20).w(FUNC(mdisk_state::fdc_side_w)); + map(0x40, 0x40).rw("fdc", FUNC(i8271_device::data_r), FUNC(i8271_device::data_w)); + map(0x80, 0x81).rw("uart1", FUNC(i8251_device::read), FUNC(i8251_device::write)); + map(0x84, 0x85).rw("uart2", FUNC(i8251_device::read), FUNC(i8251_device::write)); + map(0x9c, 0x9e).m(m_fdc, FUNC(i8271_device::map)); +} + + +//************************************************************************** +// INPUTS +//************************************************************************** + +INPUT_PORTS_START( mdisk ) + PORT_START("front") + PORT_DIPNAME(0x01, 0x01, "Baudrate") + PORT_DIPSETTING(0x00, "4800") + PORT_DIPSETTING(0x01, "19200") +INPUT_PORTS_END + + +//************************************************************************** +// FLOPPY +//************************************************************************** + +WRITE_LINE_MEMBER(mdisk_state::fdc_motor_w) +{ + if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->mon_w(!state); + if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->mon_w(!state); +} + +WRITE8_MEMBER(mdisk_state::fdc_side_w) +{ + if (m_floppy[0]->get_device()) m_floppy[0]->get_device()->ss_w(BIT(data, 0)); + if (m_floppy[1]->get_device()) m_floppy[1]->get_device()->ss_w(BIT(data, 0)); +} + + +//************************************************************************** +// MACHINE +//************************************************************************** + +void mdisk_state::machine_start() +{ + // timer to switch rom to ram + m_rom_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mdisk_state::rom_timer_callback), this), nullptr); + + // register for save states + save_item(NAME(m_uart1_rxrdy)); + save_item(NAME(m_uart1_txrdy)); + save_item(NAME(m_fdc_irq)); +} + +void mdisk_state::machine_reset() +{ + // read from rom, write to ram + membank("bank1r")->set_base(memregion("firmware")->base()); + membank("bank1w")->set_base(m_ram->pointer()); + membank("bank2")->set_base(m_ram->pointer() + 0x2000); + + // timing unknown + m_rom_timer->adjust(attotime::from_msec(50)); + + m_uart1_rxrdy = 0; + m_uart1_txrdy = 0; + m_fdc_irq = 0; +} + +TIMER_CALLBACK_MEMBER(mdisk_state::rom_timer_callback) +{ + // switch in ram + logerror("Disabling ROM\n"); + membank("bank1r")->set_base(m_ram->pointer()); +} + +void mdisk_state::update_irq(uint8_t vector) +{ + if (m_uart1_rxrdy || m_uart1_txrdy || m_fdc_irq) + m_cpu->set_input_line_and_vector(INPUT_LINE_IRQ0, ASSERT_LINE, vector); + else + m_cpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); +} + +WRITE_LINE_MEMBER(mdisk_state::fdc_irq_w) +{ + m_fdc_irq = state; + update_irq(0x00); +} + +WRITE_LINE_MEMBER(mdisk_state::uart1_rxrdy_w) +{ + m_uart1_rxrdy = state; + update_irq(0x18); +} + +WRITE_LINE_MEMBER(mdisk_state::uart1_txrdy_w) +{ + m_uart1_txrdy = state; + update_irq(0x1c); +} + + +//************************************************************************** +// MACHINE DEFINITIONS +//************************************************************************** + +static void mdisk_floppies(device_slot_interface &device) +{ + device.option_add("525qd", FLOPPY_525_QD); +} + +void mdisk_state::mdisk(machine_config &config) +{ + Z80(config, m_cpu, 4_MHz_XTAL); + m_cpu->set_addrmap(AS_PROGRAM, &mdisk_state::mdisk_mem); + m_cpu->set_addrmap(AS_IO, &mdisk_state::mdisk_io); + + // 64k internal ram + RAM(config, m_ram).set_default_size("64K"); + + // uart 1 + i8251_device &uart1(I8251(config, "uart1", 4_MHz_XTAL)); + uart1.rxrdy_handler().set(FUNC(mdisk_state::uart1_rxrdy_w)); + uart1.txrdy_handler().set(FUNC(mdisk_state::uart1_txrdy_w)); + uart1.txd_handler().set("ser", FUNC(rs232_port_device::write_txd)); + uart1.rts_handler().set("ser", FUNC(rs232_port_device::write_rts)); + uart1.dtr_handler().set("ser", FUNC(rs232_port_device::write_dtr)); + + rs232_port_device &rs232_1(RS232_PORT(config, "ser", default_rs232_devices, nullptr)); + rs232_1.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232_1.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); + rs232_1.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + + // uart 2 + i8251_device &uart2(I8251(config, "uart2", 4_MHz_XTAL)); + uart2.txd_handler().set("aux", FUNC(rs232_port_device::write_txd)); + uart2.rts_handler().set("aux", FUNC(rs232_port_device::write_rts)); + uart2.dtr_handler().set("aux", FUNC(rs232_port_device::write_dtr)); + + rs232_port_device &rs232_2(RS232_PORT(config, "aux", default_rs232_devices, nullptr)); + rs232_2.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232_2.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); + rs232_2.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + + // selectable 4800 or 19200 + clock_device &uart_clock(CLOCK(config, "uart_clock", 4.9152_MHz_XTAL / 32)); // just 9600 for now + uart_clock.signal_handler().set("uart1", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart1", FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append("uart2", FUNC(i8251_device::write_rxc)); + + // floppy + I8271(config, m_fdc, 4_MHz_XTAL); + m_fdc->set_ready_line_connected(true); + m_fdc->intrq_wr_callback().set(FUNC(mdisk_state::fdc_irq_w)); + m_fdc->drq_wr_callback().set_inputline(m_cpu, INPUT_LINE_NMI); + m_fdc->hdl_wr_callback().set(FUNC(mdisk_state::fdc_motor_w)); + FLOPPY_CONNECTOR(config, m_floppy[0], mdisk_floppies, "525qd", floppy_image_device::default_floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], mdisk_floppies, "525qd", floppy_image_device::default_floppy_formats); +} + + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** + +ROM_START( mdisk ) + ROM_REGION(0x2000, "firmware", 0) + ROM_LOAD("motronic_0090_6815_16.00.bin", 0x0000, 0x2000, CRC(931b3410) SHA1(4593708268d5ef7ffcb330f91218fc0c845abf5e)) +ROM_END + +ROM_START( fl100 ) + ROM_REGION(0x2000, "firmware", 0) + ROM_LOAD("fl100.bin", 0x0000, 0x2000, CRC(68800982) SHA1(501c8877a18cef091476b780de605b2bea3853fb)) +ROM_END + + +//************************************************************************** +// SYSTEM DRIVERS +//************************************************************************** + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 198?, mdisk, 0, 0, mdisk, mdisk, mdisk_state, empty_init, "mupid", "M-Disk Comp.-A", MACHINE_NOT_WORKING ) +COMP( 198?, fl100, mdisk, 0, mdisk, mdisk, mdisk_state, empty_init, "Grundig", "FL-100", MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/mes.cpp b/src/mame/drivers/mes.cpp index 04f6a0c5193..9f695399564 100644 --- a/src/mame/drivers/mes.cpp +++ b/src/mame/drivers/mes.cpp @@ -152,8 +152,8 @@ MACHINE_CONFIG_START(mes_state::mes) Z80PIO(config, "pio", 0); Z80SIO(config, "sio", 0); - MCFG_DEVICE_ADD("keybd", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(mes_state, kbd_put)) + generic_keyboard_device &keybd(GENERIC_KEYBOARD(config, "keybd", 0)); + keybd.set_keyboard_callback(FUNC(mes_state::kbd_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp index 9a84a3de54f..50d0017fbc9 100644 --- a/src/mame/drivers/mhavoc.cpp +++ b/src/mame/drivers/mhavoc.cpp @@ -6,8 +6,8 @@ driver by Mike Appolo - Modified 10/08/2006 by Jess M. Askey to include support for Speech which was not stuffed on production - Major Havoc PCB's. However, the hardware if stuffed is functional. Speech is used in Major Havoc Return + Modified 10/08/2006 by Jess M. Askey to include support for Speech which was not used on production + Major Havoc PCB's. However, the hardware if used is functional. Speech is used in Major Havoc Return to Vax. Games supported: @@ -620,7 +620,7 @@ MACHINE_CONFIG_END ROM_START( mhavoc ) /* Alpha Processor ROMs */ - ROM_REGION( 0x20000, "alpha", 0 ) /* 152KB for ROMs */ + ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */ /* Vector Generator ROM */ ROM_LOAD( "136025.210", 0x05000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) ) @@ -633,8 +633,9 @@ ROM_START( mhavoc ) ROM_LOAD( "136025.318", 0x14000, 0x4000, CRC(ba935067) SHA1(05ad81e7a1982b9d8fddb48502546f48b5dc21b7) ) /* page 2+3 */ /* Paged Vector Generator ROM */ - ROM_LOAD( "136025.106", 0x18000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ - ROM_LOAD( "136025.107", 0x1c000, 0x4000, CRC(5f81c5f3) SHA1(be4055727a2d4536e37ec20150deffdb5af5b01f) ) /* page 2+3 */ + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "136025.106", 0x0000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ + ROM_LOAD( "136025.107", 0x4000, 0x4000, CRC(5f81c5f3) SHA1(be4055727a2d4536e37ec20150deffdb5af5b01f) ) /* page 2+3 */ /* Gamma Processor ROM */ ROM_REGION( 0x10000, "gamma", 0 ) @@ -648,7 +649,7 @@ ROM_END ROM_START( mhavoc2 ) /* Alpha Processor ROMs */ - ROM_REGION( 0x20000, "alpha", 0 ) + ROM_REGION( 0x18000, "alpha", 0 ) /* Vector Generator ROM */ ROM_LOAD( "136025.110", 0x05000, 0x2000, CRC(16eef583) SHA1(277252bd716dd96d5b98ec5e33a3a6a3bc1a9abf) ) @@ -661,8 +662,9 @@ ROM_START( mhavoc2 ) ROM_LOAD( "136025.109", 0x14000, 0x4000, CRC(4d766827) SHA1(7697bf6f92bff0e62850ed75ff66008a08583ef7) ) /* page 2+3 */ /* Paged Vector Generator ROM */ - ROM_LOAD( "136025.106", 0x18000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ - ROM_LOAD( "136025.107", 0x1c000, 0x4000, CRC(5f81c5f3) SHA1(be4055727a2d4536e37ec20150deffdb5af5b01f) ) /* page 2+3 */ + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "136025.106", 0x0000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ + ROM_LOAD( "136025.107", 0x4000, 0x4000, CRC(5f81c5f3) SHA1(be4055727a2d4536e37ec20150deffdb5af5b01f) ) /* page 2+3 */ /* the last 0x1000 is used for the 2 RAM pages */ @@ -678,7 +680,7 @@ ROM_END ROM_START( mhavocrv ) /* Alpha Processor ROMs */ - ROM_REGION( 0x20000, "alpha", 0 ) /* 152KB for ROMs */ + ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */ /* Vector Generator ROM */ ROM_LOAD( "136025.210", 0x05000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) ) @@ -691,8 +693,9 @@ ROM_START( mhavocrv ) ROM_LOAD( "136025.918", 0x14000, 0x4000, CRC(84735445) SHA1(21aacd862ce8911d257c6f48ead119ee5bb0b60d) ) /* page 2+3 */ /* Paged Vector Generator ROM */ - ROM_LOAD( "136025.106", 0x18000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ - ROM_LOAD( "136025.907", 0x1c000, 0x4000, CRC(4deea2c9) SHA1(c4107581748a3f2d2084de2a4f120abd67a52189) ) /* page 2+3 */ + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "136025.106", 0x0000, 0x4000, CRC(2ca83c76) SHA1(cc1adca32f70af30c4590e9fd6b056b051ccdb38) ) /* page 0+1 */ + ROM_LOAD( "136025.907", 0x4000, 0x4000, CRC(4deea2c9) SHA1(c4107581748a3f2d2084de2a4f120abd67a52189) ) /* page 2+3 */ /* the last 0x1000 is used for the 2 RAM pages */ @@ -708,7 +711,7 @@ ROM_END ROM_START( mhavocp ) /* Alpha Processor ROMs */ - ROM_REGION( 0x20000, "alpha", 0 ) + ROM_REGION( 0x18000, "alpha", 0 ) /* Vector Generator ROM */ ROM_LOAD( "136025.010", 0x05000, 0x2000, CRC(3050c0e6) SHA1(f19a9538996d949cdca7e6abd4f04e8ff6e0e2c1) ) @@ -721,8 +724,9 @@ ROM_START( mhavocp ) ROM_LOAD( "136025.018", 0x14000, 0x4000, CRC(a8c35ccd) SHA1(c243a5407557390a64c6560d857f5031f839973f) ) /* Paged Vector Generator ROM */ - ROM_LOAD( "136025.006", 0x18000, 0x4000, CRC(e272ed41) SHA1(0de395d1c4300a64da7f45746d7b550779e36a21) ) - ROM_LOAD( "136025.007", 0x1c000, 0x4000, CRC(e152c9d8) SHA1(79d0938fa9ad262c7f28c5a8ad21004a4dec9ed8) ) + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "136025.006", 0x0000, 0x4000, CRC(e272ed41) SHA1(0de395d1c4300a64da7f45746d7b550779e36a21) ) + ROM_LOAD( "136025.007", 0x4000, 0x4000, CRC(e152c9d8) SHA1(79d0938fa9ad262c7f28c5a8ad21004a4dec9ed8) ) /* the last 0x1000 is used for the 2 RAM pages */ @@ -737,7 +741,7 @@ ROM_END ROM_START( alphaone ) - ROM_REGION( 0x20000, "alpha", 0 ) + ROM_REGION( 0x18000, "alpha", 0 ) /* Vector Generator ROM */ ROM_LOAD( "vec5000.tw", 0x05000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) ) @@ -752,8 +756,9 @@ ROM_START( alphaone ) ROM_LOAD( "page01.tw", 0x10000, 0x4000, CRC(cbf3b05a) SHA1(1dfaf9300a252c9c921f06167160a59cdf329726) ) /* Paged Vector Generator ROM */ - ROM_LOAD( "vec_pg01.tw", 0x18000, 0x4000, CRC(e392a94d) SHA1(b5843da97d7aa5767c87c29660115efc5ad9ad54) ) - ROM_LOAD( "vec_pg23.tw", 0x1c000, 0x4000, CRC(1ff74292) SHA1(90e61c48544c62d905e207bba5c67ae7694e86a5) ) + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "vec_pg01.tw", 0x0000, 0x4000, CRC(e392a94d) SHA1(b5843da97d7aa5767c87c29660115efc5ad9ad54) ) + ROM_LOAD( "vec_pg23.tw", 0x4000, 0x4000, CRC(1ff74292) SHA1(90e61c48544c62d905e207bba5c67ae7694e86a5) ) /* the last 0x1000 is used for the 2 RAM pages */ @@ -764,7 +769,7 @@ ROM_END ROM_START( alphaonea ) - ROM_REGION( 0x20000, "alpha", 0 ) + ROM_REGION( 0x18000, "alpha", 0 ) /* Vector Generator ROM */ ROM_LOAD( "vec5000.tw", 0x05000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) ) @@ -779,8 +784,9 @@ ROM_START( alphaonea ) ROM_LOAD( "page01.tw", 0x10000, 0x4000, CRC(cbf3b05a) SHA1(1dfaf9300a252c9c921f06167160a59cdf329726) ) /* Paged Vector Generator ROM */ - ROM_LOAD( "vec_pg01.tw", 0x18000, 0x4000, CRC(e392a94d) SHA1(b5843da97d7aa5767c87c29660115efc5ad9ad54) ) - ROM_LOAD( "vec_pg23.tw", 0x1c000, 0x4000, CRC(1ff74292) SHA1(90e61c48544c62d905e207bba5c67ae7694e86a5) ) + ROM_REGION( 0x8000, "avgdvg", 0 ) + ROM_LOAD( "vec_pg01.tw", 0x0000, 0x4000, CRC(e392a94d) SHA1(b5843da97d7aa5767c87c29660115efc5ad9ad54) ) + ROM_LOAD( "vec_pg23.tw", 0x4000, 0x4000, CRC(1ff74292) SHA1(90e61c48544c62d905e207bba5c67ae7694e86a5) ) /* the last 0x1000 is used for the 2 RAM pages */ diff --git a/src/mame/drivers/microdec.cpp b/src/mame/drivers/microdec.cpp index 7449b881c9c..ad3d925352f 100644 --- a/src/mame/drivers/microdec.cpp +++ b/src/mame/drivers/microdec.cpp @@ -226,7 +226,7 @@ void microdec_state::microdec(machine_config &config) rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); FLOPPY_CONNECTOR(config, "fdc:0", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true); //FLOPPY_CONNECTOR(config, "fdc:1", microdec_floppies, "525hd", floppy_image_device::default_floppy_formats).enable_sound(true); diff --git a/src/mame/drivers/mikromik.cpp b/src/mame/drivers/mikromik.cpp index 3598457087c..11be36e599c 100644 --- a/src/mame/drivers/mikromik.cpp +++ b/src/mame/drivers/mikromik.cpp @@ -490,7 +490,7 @@ MACHINE_CONFIG_START(mm1_state::mm1) m_pit->set_clk<2>(6.144_MHz_XTAL/2/2); m_pit->out_handler<2>().set(FUNC(mm1_state::auxc_w)); - UPD765A(config, m_fdc, /* 16_MHz_XTAL/2/2, */ true, true); + UPD765A(config, m_fdc, 16_MHz_XTAL/2, true, true); m_fdc->intrq_wr_callback().set_inputline(m_maincpu, I8085_RST55_LINE); m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w)); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", mm1_floppies, "525qd", mm1_state::floppy_formats) diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp index 118f25be403..39db2ca1e04 100644 --- a/src/mame/drivers/mk14.cpp +++ b/src/mame/drivers/mk14.cpp @@ -69,7 +69,7 @@ private: virtual void machine_reset() override; virtual void machine_start() override; - required_device<cpu_device> m_maincpu; + required_device<scmp_device> m_maincpu; required_ioport_array<8> m_keyboard; required_device<cassette_image_device> m_cass; required_device<dac_bit_interface> m_dac; @@ -201,12 +201,18 @@ void mk14_state::machine_start() m_digits.resolve(); } -MACHINE_CONFIG_START(mk14_state::mk14) +void mk14_state::mk14(machine_config &config) +{ /* basic machine hardware */ // IC1 1SP-8A/600 (8060) SC/MP Microprocessor - MCFG_DEVICE_ADD("maincpu", INS8060, XTAL(4'433'619)) - MCFG_SCMP_CONFIG(WRITELINE(*this, mk14_state, cass_w), NOOP, READLINE(*this, mk14_state, cass_r), CONSTANT(0), READLINE(*this, mk14_state, cass_r), NOOP) - MCFG_DEVICE_PROGRAM_MAP(mem_map) + INS8060(config, m_maincpu, XTAL(4'433'619)); + m_maincpu->flag_out().set(FUNC(mk14_state::cass_w)); + m_maincpu->s_out().set_nop(); + m_maincpu->s_in().set(FUNC(mk14_state::cass_r)); + m_maincpu->sense_a().set_constant(0); + m_maincpu->sense_b().set(FUNC(mk14_state::cass_r)); + m_maincpu->halt().set_nop(); + m_maincpu->set_addrmap(AS_PROGRAM, &mk14_state::mem_map); /* video hardware */ config.set_default_layout(layout_mk14); @@ -214,19 +220,21 @@ MACHINE_CONFIG_START(mk14_state::mk14) // sound SPEAKER(config, "speaker").front_center(); WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "speaker", 0.05); - MCFG_DEVICE_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) - MCFG_DEVICE_ADD("dac8", ZN425E, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) // Ferranti ZN425E - MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) - MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) - MCFG_SOUND_ROUTE(0, "dac8", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac8", -1.0, DAC_VREF_NEG_INPUT) + DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25); + ZN425E(config, "dac8", 0).add_route(ALL_OUTPUTS, "speaker", 0.5); // Ferranti ZN425E + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); + vref.set_output(5.0); + vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac8", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac8", -1.0, DAC_VREF_NEG_INPUT); /* devices */ ins8154_device &ic8(INS8154(config, "ic8")); ic8.out_a().set(FUNC(mk14_state::port_a_w)); ic8.out_b().set("dac8", FUNC(dac_byte_interface::data_w)); - MCFG_CASSETTE_ADD( "cassette" ) -MACHINE_CONFIG_END + CASSETTE(config, m_cass); +} /* ROM definition */ ROM_START( mk14 ) diff --git a/src/mame/drivers/mod8.cpp b/src/mame/drivers/mod8.cpp index d2320f6961c..5d4f7589d61 100644 --- a/src/mame/drivers/mod8.cpp +++ b/src/mame/drivers/mod8.cpp @@ -154,8 +154,8 @@ MACHINE_CONFIG_START(mod8_state::mod8) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(mod8_state,mod8_irq_callback) /* video hardware */ - MCFG_DEVICE_ADD(TELEPRINTER_TAG, TELEPRINTER, 0) - MCFG_GENERIC_TELEPRINTER_KEYBOARD_CB(PUT(mod8_state, kbd_put)) + TELEPRINTER(config, m_teleprinter, 0); + m_teleprinter->set_keyboard_callback(FUNC(mod8_state::kbd_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index d97a4094984..37298b9b9d4 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -6099,7 +6099,7 @@ ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mo ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END -ROM_START( daytona93 ) /* Daytona USA (Deluxe cabinet, '93 version. There is said to be a Deluxe '94 edition) */ +ROM_START( daytona93 ) /* Daytona USA, Deluxe cabinet, '93 version, ROM board ID# 834-10536-01 - There is said to be a Deluxe '94 edition */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program ROM_LOAD32_WORD("epr-16530a.12", 0x000000, 0x020000, CRC(39e962b5) SHA1(b98a1faabb4f1eff707a94c32224c7820f259874) ) ROM_LOAD32_WORD("epr-16531a.13", 0x000002, 0x020000, CRC(693126eb) SHA1(779734ba536db67e14760d52e8d8d7db07816481) ) diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index 57bde9ef2f0..e856f29449f 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -2769,7 +2769,7 @@ ROM_START( vf3a ) /* step 1.0, Sega game ID# is 833-12712, ROM board ID# 834-1 ROM_FILL( 0x000000, 0x800000, 0x0000 ) ROM_END -ROM_START( vf3tb ) /* step 1.0? */ +ROM_START( vf3tb ) /* step 1.0?, Sega game ID# is 833-13279 VIRTUA FIGHTER 3TB */ ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */ // CROM ROM_LOAD64_WORD_SWAP( "epr-20126.17", 0x600006, 0x080000, CRC(27ecd3b0) SHA1(a9b913294ac925adb501d3b47f346006b70dfcd6) ) @@ -4673,7 +4673,7 @@ ROM_START( dirtdvlsg ) /* Step 2.1 presumable German version, might be origina ROM_PARAMETER( ":315_5881:key", "29290f17" ) ROM_END -ROM_START( daytona2 ) /* Step 2.1, ROM board ID# 834-13428 DAYTONA USA2, Security board ID# 837-13507-COM */ +ROM_START( daytona2 ) /* Step 2.1, Sega game ID# is 833-13427, ROM board ID# 834-13428 DAYTONA USA2, Security board ID# 837-13507-COM */ ROM_REGION64_BE( 0x8800000, "user1", 0 ) /* program + data ROMs */ // CROM ROM_LOAD64_WORD_SWAP( "epr-20861a.17", 0x000006, 0x200000, CRC(89ba8e78) SHA1(7d27124b976a63fdadd16551a664b2cc8cc08e79) ) diff --git a/src/mame/drivers/modellot.cpp b/src/mame/drivers/modellot.cpp index a531ecc61f6..365d41e9464 100644 --- a/src/mame/drivers/modellot.cpp +++ b/src/mame/drivers/modellot.cpp @@ -197,8 +197,8 @@ MACHINE_CONFIG_START(modellot_state::modellot) MCFG_PALETTE_ADD_MONOCHROME("palette") /* Devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(modellot_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(modellot_state::kbd_put)); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/monon_color.cpp b/src/mame/drivers/monon_color.cpp new file mode 100644 index 00000000000..de441dd1195 --- /dev/null +++ b/src/mame/drivers/monon_color.cpp @@ -0,0 +1,121 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/*************************************************************************** + Monon Color - Chinese handheld + + see + https://gbatemp.net/threads/the-monon-color-a-new-video-game-console-from-china.467788/ + https://twitter.com/Splatoon2weird/status/1072182093206052864 + + uses AX208 CPU (custom 8051 @ 96Mhz with single cycle instructions, extended '16 bit' opcodes + integrated video, jpeg decoder etc.) + https://docplayer.net/52724058-Ax208-product-specification.html + +***************************************************************************/ + +#include "emu.h" +#include "cpu/mcs51/axc51-core.h" +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" + +class monon_color_state : public driver_device +{ +public: + monon_color_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_cart(*this, "cartslot"), + m_maincpu(*this, "maincpu"), + m_screen(*this, "screen"), + m_palette(*this, "palette") + { } + + void monon_color(machine_config &config); +protected: + // driver_device overrides + virtual void machine_start() override; + virtual void machine_reset() override; + + virtual void video_start() override; + + // screen updates + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); +private: + required_device<generic_slot_device> m_cart; + required_device<cpu_device> m_maincpu; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(monon_color_cart); +}; + +void monon_color_state::machine_start() +{ +} + +void monon_color_state::machine_reset() +{ +} + +void monon_color_state::video_start() +{ +} + + +uint32_t monon_color_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +static INPUT_PORTS_START( monon_color ) +INPUT_PORTS_END + + +MACHINE_CONFIG_START(monon_color_state::monon_color) + + /* basic machine hardware */ + MCFG_DEVICE_ADD("maincpu", AX208, 96000000) // (8051 / MCS51 derived) incomplete core! + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) + MCFG_SCREEN_UPDATE_DRIVER(monon_color_state, screen_update) + MCFG_SCREEN_SIZE(32*8, 32*8) + MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + MCFG_SCREEN_PALETTE("palette") + + MCFG_PALETTE_ADD("palette", 256) + + /* sound hardware */ + SPEAKER(config, "mono").front_center(); + + MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "monon_color_cart") + MCFG_GENERIC_EXTENSIONS("bin") + MCFG_GENERIC_WIDTH(GENERIC_ROM8_WIDTH) + MCFG_GENERIC_LOAD(monon_color_state, monon_color_cart) + MCFG_GENERIC_MANDATORY + + /* software lists */ + MCFG_SOFTWARE_LIST_ADD("cart_list","monon_color") +MACHINE_CONFIG_END + +DEVICE_IMAGE_LOAD_MEMBER( monon_color_state, monon_color_cart ) +{ + uint32_t size = m_cart->common_get_size("rom"); + std::vector<uint8_t> temp; + temp.resize(size); + m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); + m_cart->common_load_rom(&temp[0], size, "rom"); + + memcpy(memregion("maincpu")->base(), &temp[0], size); + + return image_init_result::PASS; +} + +ROM_START( mononcol ) + ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) +ROM_END + +CONS( 2011, mononcol, 0, 0, monon_color, monon_color, monon_color_state, empty_init, "M&D", "Monon Color", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/mpc3000.cpp b/src/mame/drivers/mpc3000.cpp index 0b8d94edd15..41db7183a7d 100644 --- a/src/mame/drivers/mpc3000.cpp +++ b/src/mame/drivers/mpc3000.cpp @@ -216,7 +216,7 @@ void mpc3000_state::mpc3000(machine_config &config) MCFG_PALETTE_ADD("palette", 2) MCFG_PALETTE_INIT_OWNER(mpc3000_state, mpc3000) - UPD72065(config, m_fdc, 0, true, true); // TODO: upd72068 supports motor control + UPD72065(config, m_fdc, 16_MHz_XTAL, true, true); // clocked by V53 CLKOUT (TODO: upd72068 supports motor control) //m_fdc->intrq_wr_callback().set(m_maincpu, FUNC(v53a_device::ir?_w)); //m_fdc->drq_wr_callback().set(m_maincpu, FUNC(v53a_device::drq?_w)); diff --git a/src/mame/drivers/ms9540.cpp b/src/mame/drivers/ms9540.cpp index 8463f146b2b..fc17a01d395 100644 --- a/src/mame/drivers/ms9540.cpp +++ b/src/mame/drivers/ms9540.cpp @@ -78,16 +78,16 @@ void ms9540_state::kbd_put(u8 data) m_term_data = data; } -MACHINE_CONFIG_START(ms9540_state::ms9540) +void ms9540_state::ms9540(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 8000000) // unknown clock - MCFG_DEVICE_PROGRAM_MAP(mem_map) + M68000(config, m_maincpu, 8000000); // unknown clock + m_maincpu->set_addrmap(AS_PROGRAM, &ms9540_state::mem_map); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(ms9540_state, kbd_put)) - -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(ms9540_state::kbd_put)); +} /* ROM definition */ ROM_START( ms9540 ) diff --git a/src/mame/drivers/msx.cpp b/src/mame/drivers/msx.cpp index 97355b6eeb2..2c0bd54d668 100644 --- a/src/mame/drivers/msx.cpp +++ b/src/mame/drivers/msx.cpp @@ -1310,7 +1310,7 @@ void msx_state::msx_mb8877a(machine_config & config) void msx_state::msx_tc8566af(machine_config &config) { - TC8566AF(config, "fdc"); + TC8566AF(config, "fdc", 16'000'000); } void msx_state::msx_microsol(machine_config &config) diff --git a/src/mame/drivers/mz3500.cpp b/src/mame/drivers/mz3500.cpp index 10a5b39383b..5fceed32114 100644 --- a/src/mame/drivers/mz3500.cpp +++ b/src/mame/drivers/mz3500.cpp @@ -827,7 +827,7 @@ MACHINE_CONFIG_START(mz3500_state::mz3500) ppi.out_pb_callback().set(FUNC(mz3500_state::mz3500_pb_w)); ppi.out_pc_callback().set(FUNC(mz3500_state::mz3500_pc_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_master, INPUT_LINE_IRQ0); MCFG_FLOPPY_DRIVE_ADD("upd765a:0", mz3500_floppies, "525ssdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765a:1", mz3500_floppies, "525ssdd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/mz6500.cpp b/src/mame/drivers/mz6500.cpp index 0e78bcdf745..c0db3e4506a 100644 --- a/src/mame/drivers/mz6500.cpp +++ b/src/mame/drivers/mz6500.cpp @@ -170,7 +170,7 @@ MACHINE_CONFIG_START(mz6500_state::mz6500) m_hgdc->set_addrmap(0, &mz6500_state::upd7220_map); m_hgdc->set_display_pixels_callback(FUNC(mz6500_state::hgdc_display_pixels), this); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8000000, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", mz6500_floppies, "525hd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", mz6500_floppies, "525hd", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END diff --git a/src/mame/drivers/nanos.cpp b/src/mame/drivers/nanos.cpp index 1c511c10adb..cec0b5669b9 100644 --- a/src/mame/drivers/nanos.cpp +++ b/src/mame/drivers/nanos.cpp @@ -516,7 +516,7 @@ MACHINE_CONFIG_START(nanos_state::nanos) m_pio->out_pb_callback().set(FUNC(nanos_state::port_b_w)); /* UPD765 */ - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 8'000'000, false, true); MCFG_FLOPPY_DRIVE_ADD(m_floppy, nanos_floppies, "525hd", nanos_state::floppy_formats) /* internal ram */ diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index ce48e989269..0e4753f86e5 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -2915,7 +2915,8 @@ MACHINE_CONFIG_START(dc_state::naomi_aw_base) MCFG_DEVICE_ADD("soundcpu", ARM7, ((XTAL(33'868'800)*2)/3)/8) // AICA bus clock is 2/3rds * 33.8688. ARM7 gets 1 bus cycle out of each 8. MCFG_DEVICE_PROGRAM_MAP(dc_audio_map) - MCFG_MAPLE_DC_ADD( "maple_dc", "maincpu", dc_maple_irq ) + MAPLE_DC(config, m_maple, 0, m_maincpu); + m_maple->irq_callback().set(FUNC(dc_state::maple_irq)); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2954,7 +2955,21 @@ MACHINE_CONFIG_START(naomi_state::naomi_base) // - unrolled NOPs then GPIO toggle - 12.76MHz (or 3.19M NOP instructions per second) // for now we use higher clock, otherwise earlier NAOMI BIOS revisions will not boot (see MT#06552). MCFG_MIE_ADD("mie", 16000000, "maple_dc", 0, nullptr, nullptr, nullptr, ":MIE.3", nullptr, ":MIE.5", nullptr, nullptr) - MCFG_SEGA_837_13551_DEVICE_ADD("837_13551", "mie", ":TILT", ":P1", ":P2", ":A0", ":A1", ":A2", ":A3", ":A4", ":A5", ":A6", ":A7", ":OUTPUT") + + sega_837_13551_device &sega837(SEGA_837_13551(config, "837_13551", 0, "mie")); + sega837.set_port_tag<0>("TILT"); + sega837.set_port_tag<1>("P1"); + sega837.set_port_tag<2>("P2"); + sega837.set_port_tag<3>("A0"); + sega837.set_port_tag<4>("A1"); + sega837.set_port_tag<5>("A2"); + sega837.set_port_tag<6>("A3"); + sega837.set_port_tag<7>("A4"); + sega837.set_port_tag<8>("A5"); + sega837.set_port_tag<9>("A6"); + sega837.set_port_tag<10>("A7"); + sega837.set_port_tag<11>("OUTPUT"); + EEPROM_93C46_8BIT(config, "mie_eeprom"); X76F100(config, "naomibd_eeprom"); @@ -2967,46 +2982,56 @@ MACHINE_CONFIG_END * Naomi 1, unprotected ROM sub-board */ -MACHINE_CONFIG_START(naomi_state::naomi) +void naomi_state::naomi(machine_config &config) +{ naomi_base(config); - MCFG_NAOMI_ROM_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_rom_board &rom_board(NAOMI_ROM_BOARD(config, "rom_board", 0, "naomibd_eeprom")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} /* * Naomi 1 GD-Rom */ -MACHINE_CONFIG_START(naomi_state::naomigd) +void naomi_state::naomigd(machine_config &config) +{ naomi_base(config); - MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_gdrom_board &rom_board(NAOMI_GDROM_BOARD(config, "rom_board", 0, "naomibd_eeprom", ":gdrom", "pic")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} /* * Naomi 1, M1 sub-board */ -MACHINE_CONFIG_START(naomi_state::naomim1) +void naomi_state::naomim1(machine_config &config) +{ naomi_base(config); - MCFG_NAOMI_M1_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_m1_board &rom_board(NAOMI_M1_BOARD(config, "rom_board", 0, "naomibd_eeprom")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} /* * Naomi 1, M2/3 sub-board */ -MACHINE_CONFIG_START(naomi_state::naomim2) +void naomi_state::naomim2(machine_config &config) +{ naomi_base(config); - MCFG_NAOMI_M2_BOARD_ADD("rom_board", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_m2_board &rom_board(NAOMI_M2_BOARD(config, "rom_board", 0, "naomibd_eeprom")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} /* * Naomi 1, M4 sub-board */ -MACHINE_CONFIG_START(naomi_state::naomim4) +void naomi_state::naomim4(machine_config &config) +{ naomi_base(config); - MCFG_NAOMI_M4_BOARD_ADD("rom_board", "pic_readout", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_m4_board &rom_board(NAOMI_M4_BOARD(config, "rom_board", 0, "naomibd_eeprom", "pic_readout")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} /* * Naomi M2 with Keyboard controllers @@ -3051,13 +3076,13 @@ void naomi2_state::naomi2_base(machine_config &config) // TODO: ELAN device } -MACHINE_CONFIG_START(naomi2_state::naomi2gd) +void naomi2_state::naomi2gd(machine_config &config) +{ naomigd(config); naomi2_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(naomi2_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &naomi2_state::naomi2_map); +} /* * Naomi 2, M1 sub-board @@ -3075,13 +3100,13 @@ MACHINE_CONFIG_END * Naomi 2, M2/3 sub-board */ -MACHINE_CONFIG_START(naomi2_state::naomi2m2) +void naomi2_state::naomi2m2(machine_config &config) +{ naomim2(config); naomi2_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(naomi2_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &naomi2_state::naomi2_map); +} /* * Atomiswave @@ -3094,7 +3119,8 @@ MACHINE_CONFIG_START(atomiswave_state::aw_base) MCFG_DEVICE_PROGRAM_MAP(aw_map) MCFG_DEVICE_IO_MAP(aw_port) MACRONIX_29L001MC(config, "awflash"); - MCFG_AW_ROM_BOARD_ADD("rom_board", "rom_key", WRITE8(*this, dc_state, g1_irq)) + aw_rom_board &rom_board(AW_ROM_BOARD(config, "rom_board", 0, "rom_key")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); MCFG_MACHINE_RESET_OVERRIDE(dc_state,dc_console) NVRAM(config, "sram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/nascom1.cpp b/src/mame/drivers/nascom1.cpp index c2b2f0f8faf..b0b0b6b80c7 100644 --- a/src/mame/drivers/nascom1.cpp +++ b/src/mame/drivers/nascom1.cpp @@ -1,5 +1,5 @@ // license:GPL-2.0+ -// copyright-holders:Dirk Best +// copyright-holders:Dirk Best,Paul Danials /*************************************************************************** Nascom 1/2/3 @@ -27,28 +27,14 @@ //************************************************************************** -// CONSTANTS/MACROS -//************************************************************************** - -#define NASCOM1_KEY_RESET 0x02 -#define NASCOM1_KEY_INCR 0x01 - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** -struct nascom1_portstat_t -{ - uint8_t stat_flags; - uint8_t stat_count; -}; - class nascom_state : public driver_device { public: - nascom_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + nascom_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_ram(*this, RAM_TAG), m_hd6402(*this, "hd6402"), @@ -83,12 +69,13 @@ private: required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; required_shared_ptr<uint8_t> m_videoram; - required_ioport_array<9> m_keyboard; + required_ioport_array<8> m_keyboard; int m_tape_size; uint8_t *m_tape_image; int m_tape_index; - nascom1_portstat_t m_portstat; + uint8_t m_kb_select; + uint8_t m_kb_control; DECLARE_READ_LINE_MEMBER(nascom1_hd6402_si); DECLARE_WRITE_LINE_MEMBER(nascom1_hd6402_so); @@ -159,10 +146,7 @@ private: READ8_MEMBER( nascom_state::nascom1_port_00_r ) { - if (m_portstat.stat_count < 9) - return ((m_keyboard[m_portstat.stat_count])->read() | ~0x7f); - - return 0xff; + return m_keyboard[m_kb_select]->read() | ~0x7f; } WRITE8_MEMBER( nascom_state::nascom1_port_00_w ) @@ -170,21 +154,15 @@ WRITE8_MEMBER( nascom_state::nascom1_port_00_w ) m_cassette->change_state( (data & 0x10) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR); - if (!(data & NASCOM1_KEY_RESET)) - { - if (m_portstat.stat_flags & NASCOM1_KEY_RESET) - m_portstat.stat_count = 0; - } - else - m_portstat.stat_flags = NASCOM1_KEY_RESET; + // d0 falling edge: increment keyboard matrix column select counter + if (m_kb_control & ~data & 1) + m_kb_select = (m_kb_select + 1) & 7; - if (!(data & NASCOM1_KEY_INCR)) - { - if (m_portstat.stat_flags & NASCOM1_KEY_INCR) - m_portstat.stat_count++; - } - else - m_portstat.stat_flags = NASCOM1_KEY_INCR; + // d1 falling edge: reset it + if (m_kb_control & ~data & 2) + m_kb_select = 0; + + m_kb_control = data & 3; } @@ -197,7 +175,6 @@ READ8_MEMBER( nascom_state::nascom1_port_01_r ) return m_hd6402->get_received_data(); } - WRITE8_MEMBER( nascom_state::nascom1_port_01_w ) { m_hd6402->set_transmit_data(data); @@ -342,6 +319,9 @@ image_init_result nascom2_state::load_cart(device_image_interface &image, generi void nascom_state::machine_reset() { + m_kb_select = 0; + m_kb_control = 0; + // Set up hd6402 pins m_hd6402->write_swe(1); @@ -528,8 +508,12 @@ void nascom2_state::nascom2c_mem(address_map &map) static INPUT_PORTS_START( nascom1 ) PORT_START("KEY.0") - PORT_BIT(0x6f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace ClearScreen") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(8) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("New Line") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') + PORT_BIT(0x48, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("KEY.1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') @@ -594,16 +578,15 @@ static INPUT_PORTS_START( nascom1 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("KEY.8") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace ClearScreen") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(8) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("New Line") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') - PORT_BIT(0x58, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(UCHAR_SHIFT_2) PORT_CHAR('@') INPUT_PORTS_END static INPUT_PORTS_START( nascom2 ) PORT_INCLUDE(nascom1) + PORT_MODIFY("KEY.0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Back CS") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(8) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter Escape") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CHAR(27) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_MODIFY("KEY.6") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('[') PORT_CHAR('\\') @@ -611,10 +594,6 @@ static INPUT_PORTS_START( nascom2 ) PORT_MODIFY("KEY.7") PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(']') PORT_CHAR('_') - PORT_MODIFY("KEY.8") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Back CS") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(8) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter Escape") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CHAR(27) - // link switch on board PORT_START("lsw1") PORT_DIPNAME(0x0f, 0x00, "Restart address") @@ -777,7 +756,12 @@ ROM_START( nascom2 ) ROM_SYSTEM_BIOS(0, "ns1", "NasSys 1") ROMX_LOAD("nassys1.rom", 0x0000, 0x0800, CRC(b6300716) SHA1(29da7d462ba3f569f70ed3ecd93b981f81c7adfa), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "ns3", "NasSys 3") - ROMX_LOAD("nassys3.rom", 0x0000, 0x0800, CRC(3da17373) SHA1(5fbda15765f04e4cd08cf95c8d82ce217889f240), ROM_BIOS(1)) + ROMX_LOAD("nassys3.rom", 0x0000, 0x0800, CRC(6804e675) SHA1(d55dccec2d1da992a39c38b0b6d24e3809073513), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(2, "ns3a", "NasSys 3 (AVC)") + ROMX_LOAD("nassys3a.rom", 0x0000, 0x0800, CRC(39d24a05) SHA1(7bfb574c1f8ce0f460a53b9a6c11c711aabccbb8), ROM_BIOS(2)) + ROM_SYSTEM_BIOS(3, "ns3n", "NasSys 3 (NET)") + ROMX_LOAD("nassys3n.rom", 0x0000, 0x0800, CRC(87ef62bb) SHA1(dab81511925be36044b3e8b0ba26a0c717fe83ae), ROM_BIOS(3)) + ROM_REGION(0x2000, "basic", 0) ROM_LOAD("basic.rom", 0x0000, 0x2000, CRC(5cb5197b) SHA1(c41669c2b6d6dea808741a2738426d97bccc9b07)) @@ -789,7 +773,11 @@ ROM_END ROM_START( nascom2c ) ROM_REGION(0x0800, "maincpu", 0) - ROM_LOAD("cpmboot.rom", 0x0000, 0x0800, CRC(44b67ffc) SHA1(60c8335f24798f8de7ad48a4cd03e56a60d87b63)) + ROM_DEFAULT_BIOS("cpm32") + ROM_SYSTEM_BIOS(0, "cpm21", "CP/M boot v2.1") + ROMX_LOAD("cpmbt21.rom", 0x0000, 0x0800, CRC(44b67ffc) SHA1(60c8335f24798f8de7ad48a4cd03e56a60d87b63), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "cpm32", "CP/M boot v3.2") + ROMX_LOAD("cpmbt32.rom", 0x0000, 0x0800, CRC(724f03ba) SHA1(d0958c231e5b121b6c4c97d03c76c207acf90f5a), ROM_BIOS(1)) ROM_REGION(0x1000, "gfx1", 0) ROM_LOAD("nascom1.chr", 0x0000, 0x0800, CRC(33e92a04) SHA1(be6e1cc80e7f95a032759f7df19a43c27ff93a52)) diff --git a/src/mame/drivers/nbmj8688.cpp b/src/mame/drivers/nbmj8688.cpp index 5a2f465b868..9dedd89aea4 100644 --- a/src/mame/drivers/nbmj8688.cpp +++ b/src/mame/drivers/nbmj8688.cpp @@ -2459,7 +2459,7 @@ MACHINE_CONFIG_START(nbmj8688_state::NBMJDRV_4096) MCFG_DEVICE_ADD("maincpu", Z80, 5000000) /* 5.00 MHz */ MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8688_state, irq0_line_hold) - MCFG_NB1413M3_ADD("nb1413m3") + NB1413M3(config, m_nb1413m3, 0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ @@ -2526,23 +2526,22 @@ MACHINE_CONFIG_START(nbmj8688_state::crystalg) MCFG_DEVICE_PROGRAM_MAP(secolove_map) MCFG_DEVICE_IO_MAP(crystalg_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_CRYSTALG ) + m_nb1413m3->set_type(NB1413M3_CRYSTALG); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::crystal2) +void nbmj8688_state::crystal2(machine_config &config) +{ crystalg(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_CRYSTAL2 ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_CRYSTAL2); +} -MACHINE_CONFIG_START(nbmj8688_state::nightlov) +void nbmj8688_state::nightlov(machine_config &config) +{ crystalg(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_NIGHTLOV ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_NIGHTLOV); +} MACHINE_CONFIG_START(nbmj8688_state::apparel) NBMJDRV_256(config); @@ -2552,8 +2551,7 @@ MACHINE_CONFIG_START(nbmj8688_state::apparel) MCFG_DEVICE_PROGRAM_MAP(secolove_map) MCFG_DEVICE_IO_MAP(secolove_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_APPAREL ) + m_nb1413m3->set_type(NB1413M3_APPAREL); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8688_state::mbmj_h12bit) @@ -2568,26 +2566,26 @@ MACHINE_CONFIG_START(nbmj8688_state::mbmj_h12bit) MCFG_VIDEO_START_OVERRIDE(nbmj8688_state,mbmj8688_hybrid_12bit) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::citylove) +void nbmj8688_state::citylove(machine_config &config) +{ mbmj_h12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_CITYLOVE ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_CITYLOVE); +} -MACHINE_CONFIG_START(nbmj8688_state::mcitylov) +void nbmj8688_state::mcitylov(machine_config &config) +{ mbmj_h12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MCITYLOV ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_MCITYLOV); +} -MACHINE_CONFIG_START(nbmj8688_state::secolove) +void nbmj8688_state::secolove(machine_config &config) +{ mbmj_h12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_SECOLOVE ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_SECOLOVE); +} /*Same as h12bit HW with different sound HW + NMI enable bit*/ MACHINE_CONFIG_START(nbmj8688_state::barline) @@ -2597,14 +2595,13 @@ MACHINE_CONFIG_START(nbmj8688_state::barline) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(barline_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_BARLINE ) + m_nb1413m3->set_type(NB1413M3_BARLINE); MCFG_DEVICE_REPLACE("psg", YM3812, 20000000/8) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.35) - MCFG_DEVICE_REMOVE("dac") - MCFG_DEVICE_REMOVE("vref") + config.device_remove("dac"); + config.device_remove("vref"); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8688_state::mbmj_p16bit) @@ -2628,7 +2625,7 @@ MACHINE_CONFIG_START(nbmj8688_state::mbmj_p16bit_LCD) MCFG_DEVICE_IO_MAP(secolove_io_map) MCFG_DEVICE_IO_MAP(p16bit_LCD_io_map) - MCFG_NB1413M3_ADD("nb1413m3") + NB1413M3(config, m_nb1413m3, 0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ @@ -2686,61 +2683,61 @@ MACHINE_CONFIG_START(nbmj8688_state::mbmj_p16bit_LCD) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::bijokkoy) +void nbmj8688_state::bijokkoy(machine_config &config) +{ mbmj_p16bit_LCD(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_BIJOKKOY ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_BIJOKKOY); +} -MACHINE_CONFIG_START(nbmj8688_state::bijokkog) +void nbmj8688_state::bijokkog(machine_config &config) +{ mbmj_p16bit_LCD(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_BIJOKKOG ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_BIJOKKOG); +} -MACHINE_CONFIG_START(nbmj8688_state::housemnq) +void nbmj8688_state::housemnq(machine_config &config) +{ mbmj_p16bit_LCD(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HOUSEMNQ ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_HOUSEMNQ); +} -MACHINE_CONFIG_START(nbmj8688_state::housemn2) +void nbmj8688_state::housemn2(machine_config &config) +{ mbmj_p16bit_LCD(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HOUSEMN2 ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_HOUSEMN2); +} -MACHINE_CONFIG_START(nbmj8688_state::livegal) +void nbmj8688_state::livegal(machine_config &config) +{ mbmj_p16bit_LCD(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_LIVEGAL ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_LIVEGAL); +} -MACHINE_CONFIG_START(nbmj8688_state::orangec) +void nbmj8688_state::orangec(machine_config &config) +{ mbmj_p16bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_ORANGEC ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_ORANGEC); +} -MACHINE_CONFIG_START(nbmj8688_state::orangeci) +void nbmj8688_state::orangeci(machine_config &config) +{ mbmj_p16bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_ORANGECI ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_ORANGECI); +} -MACHINE_CONFIG_START(nbmj8688_state::vipclub) +void nbmj8688_state::vipclub(machine_config &config) +{ mbmj_p16bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_VIPCLUB ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_VIPCLUB); +} MACHINE_CONFIG_START(nbmj8688_state::seiha) NBMJDRV_65536(config); @@ -2750,16 +2747,15 @@ MACHINE_CONFIG_START(nbmj8688_state::seiha) MCFG_DEVICE_PROGRAM_MAP(secolove_map) MCFG_DEVICE_IO_MAP(seiha_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_SEIHA ) + m_nb1413m3->set_type(NB1413M3_SEIHA); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::seiham) +void nbmj8688_state::seiham(machine_config &config) +{ seiha(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_SEIHAM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_SEIHAM); +} MACHINE_CONFIG_START(nbmj8688_state::mjgaiden) NBMJDRV_4096(config); @@ -2770,8 +2766,7 @@ MACHINE_CONFIG_START(nbmj8688_state::mjgaiden) MCFG_DEVICE_PROGRAM_MAP(ojousan_map) MCFG_DEVICE_IO_MAP(mjgaiden_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OJOUSAN ) + m_nb1413m3->set_type(NB1413M3_OJOUSAN); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8688_state::iemoto) @@ -2782,8 +2777,7 @@ MACHINE_CONFIG_START(nbmj8688_state::iemoto) MCFG_DEVICE_PROGRAM_MAP(secolove_map) MCFG_DEVICE_IO_MAP(iemoto_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_IEMOTO ) + m_nb1413m3->set_type(NB1413M3_IEMOTO); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8688_state::ojousan) @@ -2794,16 +2788,15 @@ MACHINE_CONFIG_START(nbmj8688_state::ojousan) MCFG_DEVICE_PROGRAM_MAP(ojousan_map) MCFG_DEVICE_IO_MAP(iemoto_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OJOUSAN ) + m_nb1413m3->set_type(NB1413M3_OJOUSAN); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::ojousanm) +void nbmj8688_state::ojousanm(machine_config &config) +{ ojousan(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OJOUSANM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_OJOUSANM); +} MACHINE_CONFIG_START(nbmj8688_state::swinggal) ojousan(config); @@ -2813,33 +2806,33 @@ MACHINE_CONFIG_START(nbmj8688_state::swinggal) MCFG_DEVICE_IO_MAP(iemoto_io_map) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::iemotom) +void nbmj8688_state::iemotom(machine_config &config) +{ ojousan(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_IEMOTOM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_IEMOTOM); +} -MACHINE_CONFIG_START(nbmj8688_state::ryuuha) +void nbmj8688_state::ryuuha(machine_config &config) +{ ojousan(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_RYUUHA ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_RYUUHA); +} -MACHINE_CONFIG_START(nbmj8688_state::korinai) +void nbmj8688_state::korinai(machine_config &config) +{ ojousan(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KORINAI ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KORINAI); +} -MACHINE_CONFIG_START(nbmj8688_state::korinaim) +void nbmj8688_state::korinaim(machine_config &config) +{ ojousan(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KORINAIM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KORINAIM); +} MACHINE_CONFIG_START(nbmj8688_state::mbmj_p12bit) NBMJDRV_4096(config); @@ -2850,40 +2843,40 @@ MACHINE_CONFIG_START(nbmj8688_state::mbmj_p12bit) MCFG_DEVICE_IO_MAP(kaguya_io_map) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::kaguya) +void nbmj8688_state::kaguya(machine_config &config) +{ mbmj_p12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KAGUYA ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KAGUYA); +} -MACHINE_CONFIG_START(nbmj8688_state::kaguya2) +void nbmj8688_state::kaguya2(machine_config &config) +{ mbmj_p12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KAGUYA2 ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KAGUYA2); +} -MACHINE_CONFIG_START(nbmj8688_state::kanatuen) +void nbmj8688_state::kanatuen(machine_config &config) +{ mbmj_p12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KANATUEN ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KANATUEN); +} -MACHINE_CONFIG_START(nbmj8688_state::kyuhito) +void nbmj8688_state::kyuhito(machine_config &config) +{ mbmj_p12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_KYUHITO ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_KYUHITO); +} -MACHINE_CONFIG_START(nbmj8688_state::idhimitu) +void nbmj8688_state::idhimitu(machine_config &config) +{ mbmj_p12bit(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_IDHIMITU ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_IDHIMITU); +} MACHINE_CONFIG_START(nbmj8688_state::mjsikaku) NBMJDRV_4096(config); @@ -2893,8 +2886,7 @@ MACHINE_CONFIG_START(nbmj8688_state::mjsikaku) MCFG_DEVICE_PROGRAM_MAP(mjsikaku_map) MCFG_DEVICE_IO_MAP(mjsikaku_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJSIKAKU ) + m_nb1413m3->set_type(NB1413M3_MJSIKAKU); /* sound hardware */ MCFG_DEVICE_REPLACE("psg", YM3812, 20000000/8) @@ -2909,8 +2901,7 @@ MACHINE_CONFIG_START(nbmj8688_state::mmsikaku) MCFG_DEVICE_PROGRAM_MAP(secolove_map) MCFG_DEVICE_IO_MAP(mmsikaku_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MMSIKAKU ) + m_nb1413m3->set_type(NB1413M3_MMSIKAKU); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8688_state::otonano) @@ -2920,16 +2911,15 @@ MACHINE_CONFIG_START(nbmj8688_state::otonano) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(otonano_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OTONANO ) + m_nb1413m3->set_type(NB1413M3_OTONANO); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8688_state::mjcamera) +void nbmj8688_state::mjcamera(machine_config &config) +{ otonano(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJCAMERA ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_MJCAMERA); +} ROM_START( crystalg ) ROM_REGION( 0x10000, "maincpu", 0 ) /* program */ diff --git a/src/mame/drivers/nbmj8891.cpp b/src/mame/drivers/nbmj8891.cpp index bed6adeb6bb..233225b3b3e 100644 --- a/src/mame/drivers/nbmj8891.cpp +++ b/src/mame/drivers/nbmj8891.cpp @@ -2197,8 +2197,7 @@ MACHINE_CONFIG_START(nbmj8891_state::gionbana) MCFG_DEVICE_IO_MAP(gionbana_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8891_state, irq0_line_hold) - MCFG_NB1413M3_ADD("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_GIONBANA ) + NB1413M3(config, m_nb1413m3, 0, NB1413M3_GIONBANA); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -2230,8 +2229,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mgion) MCFG_DEVICE_PROGRAM_MAP(mgion_map) MCFG_DEVICE_IO_MAP(mgion_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MGION ) + m_nb1413m3->set_type(NB1413M3_MGION); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END @@ -2244,8 +2242,7 @@ MACHINE_CONFIG_START(nbmj8891_state::omotesnd) MCFG_DEVICE_PROGRAM_MAP(omotesnd_map) MCFG_DEVICE_IO_MAP(omotesnd_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OMOTESND ) + m_nb1413m3->set_type(NB1413M3_OMOTESND); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2256,12 +2253,12 @@ MACHINE_CONFIG_START(nbmj8891_state::omotesnd) fmsnd.add_route(ALL_OUTPUTS, "speaker", 0.35); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8891_state::abunai) +void nbmj8891_state::abunai(machine_config &config) +{ gionbana(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_ABUNAI ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_ABUNAI); +} /* NBMJDRV2 */ MACHINE_CONFIG_START(nbmj8891_state::mjcamerb) @@ -2271,8 +2268,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mjcamerb) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(hanamomo_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJCAMERB ) + m_nb1413m3->set_type(NB1413M3_MJCAMERB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2289,8 +2285,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mmcamera) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(hanamomo_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MMCAMERA ) + m_nb1413m3->set_type(NB1413M3_MMCAMERA); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2308,8 +2303,7 @@ MACHINE_CONFIG_START(nbmj8891_state::hanamomo) MCFG_DEVICE_PROGRAM_MAP(hanamomo_map) MCFG_DEVICE_IO_MAP(hanamomo_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HANAMOMO ) + m_nb1413m3->set_type(NB1413M3_HANAMOMO); /* video hardware */ MCFG_SCREEN_MODIFY("screen") @@ -2325,28 +2319,25 @@ MACHINE_CONFIG_START(nbmj8891_state::msjiken) MCFG_DEVICE_PROGRAM_MAP(gionbana_map) MCFG_DEVICE_IO_MAP(msjiken_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MSJIKEN ) + m_nb1413m3->set_type(NB1413M3_MSJIKEN); MACHINE_CONFIG_END /* NBMJDRV3 */ MACHINE_CONFIG_START(nbmj8891_state::telmahjn) gionbana(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TELMAHJN ) + m_nb1413m3->set_type(NB1413M3_TELMAHJN); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(nbmj8891_state,_1layer) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8891_state::mgmen89) +void nbmj8891_state::mgmen89(machine_config &config) +{ telmahjn(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MGMEN89 ) - -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_MGMEN89); +} /* NBMJDRV4 */ MACHINE_CONFIG_START(nbmj8891_state::mjfocus) @@ -2354,26 +2345,25 @@ MACHINE_CONFIG_START(nbmj8891_state::mjfocus) /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJFOCUS ) + m_nb1413m3->set_type(NB1413M3_MJFOCUS); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(nbmj8891_state,_1layer) MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8891_state::pairsnb) +void nbmj8891_state::pairsnb(machine_config &config) +{ gionbana(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_PAIRSNB ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_PAIRSNB); +} -MACHINE_CONFIG_START(nbmj8891_state::pairsten) +void nbmj8891_state::pairsten(machine_config &config) +{ gionbana(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_PAIRSTEN ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_PAIRSTEN); +} /* NBMJDRV5 */ MACHINE_CONFIG_START(nbmj8891_state::mjnanpas) @@ -2383,8 +2373,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mjnanpas) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(club90s_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJNANPAS ) + m_nb1413m3->set_type(NB1413M3_MJNANPAS); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8891_state::maiko) @@ -2395,8 +2384,7 @@ MACHINE_CONFIG_START(nbmj8891_state::maiko) MCFG_DEVICE_PROGRAM_MAP(maiko_map) MCFG_DEVICE_IO_MAP(maiko_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MAIKO ) + m_nb1413m3->set_type(NB1413M3_MAIKO); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8891_state::mmaiko) @@ -2406,8 +2394,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mmaiko) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(mmaiko_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MMAIKO ) + m_nb1413m3->set_type(NB1413M3_MMAIKO); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END @@ -2420,8 +2407,7 @@ MACHINE_CONFIG_START(nbmj8891_state::lovehous) MCFG_DEVICE_PROGRAM_MAP(lovehous_map) MCFG_DEVICE_IO_MAP(lovehous_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_LOVEHOUS ) + m_nb1413m3->set_type(NB1413M3_LOVEHOUS); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END @@ -2433,8 +2419,7 @@ MACHINE_CONFIG_START(nbmj8891_state::hanaoji) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(hanaoji_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HANAOJI ) + m_nb1413m3->set_type(NB1413M3_HANAOJI); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END @@ -2465,8 +2450,7 @@ MACHINE_CONFIG_START(nbmj8891_state::scandal) MCFG_DEVICE_PROGRAM_MAP(scandalm_map) MCFG_DEVICE_IO_MAP(scandal_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_SCANDAL ) + m_nb1413m3->set_type(NB1413M3_SCANDAL); MACHINE_CONFIG_END MACHINE_CONFIG_START(nbmj8891_state::bananadr) @@ -2477,32 +2461,31 @@ MACHINE_CONFIG_START(nbmj8891_state::bananadr) MCFG_DEVICE_PROGRAM_MAP(scandalm_map) MCFG_DEVICE_IO_MAP(bananadr_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_BANANADR ) + m_nb1413m3->set_type(NB1413M3_BANANADR); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8891_state::club90s) +void nbmj8891_state::club90s(machine_config &config) +{ mjnanpas(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_CLUB90S ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_CLUB90S); +} -MACHINE_CONFIG_START(nbmj8891_state::mladyhtr) +void nbmj8891_state::mladyhtr(machine_config &config) +{ mjnanpas(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MLADYHTR ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_MLADYHTR); +} -MACHINE_CONFIG_START(nbmj8891_state::chinmoku) +void nbmj8891_state::chinmoku(machine_config &config) +{ mjnanpas(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_CHINMOKU ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_CHINMOKU); +} /* NBMJDRV6 */ MACHINE_CONFIG_START(nbmj8891_state::mjfocusm) @@ -2513,8 +2496,7 @@ MACHINE_CONFIG_START(nbmj8891_state::mjfocusm) MCFG_DEVICE_PROGRAM_MAP(scandalm_map) MCFG_DEVICE_IO_MAP(scandalm_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJFOCUSM ) + m_nb1413m3->set_type(NB1413M3_MJFOCUSM); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2530,12 +2512,12 @@ MACHINE_CONFIG_START(nbmj8891_state::mjfocusm) fmsnd.add_route(ALL_OUTPUTS, "speaker", 0.7); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8891_state::scandalm) +void nbmj8891_state::scandalm(machine_config &config) +{ mjfocusm(config); - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_SCANDALM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_SCANDALM); +} MACHINE_CONFIG_START(nbmj8891_state::taiwanmb) gionbana(config); @@ -2546,8 +2528,7 @@ MACHINE_CONFIG_START(nbmj8891_state::taiwanmb) MCFG_DEVICE_IO_MAP(taiwanmb_io_map) // MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8891_state, irq0_line_hold) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TAIWANMB ) + m_nb1413m3->set_type(NB1413M3_TAIWANMB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/drivers/nbmj8900.cpp b/src/mame/drivers/nbmj8900.cpp index 16cecc8a9ff..1280f139ddc 100644 --- a/src/mame/drivers/nbmj8900.cpp +++ b/src/mame/drivers/nbmj8900.cpp @@ -312,8 +312,7 @@ MACHINE_CONFIG_START(nbmj8900_state::ohpaipee) MCFG_DEVICE_IO_MAP(ohpaipee_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8900_state, irq0_line_hold) - MCFG_NB1413M3_ADD("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_OHPAIPEE ) + NB1413M3(config, m_nb1413m3, 0, NB1413M3_OHPAIPEE); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -345,8 +344,7 @@ MACHINE_CONFIG_START(nbmj8900_state::togenkyo) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(togenkyo_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TOGENKYO ) + m_nb1413m3->set_type(NB1413M3_TOGENKYO); MACHINE_CONFIG_END diff --git a/src/mame/drivers/nbmj8991.cpp b/src/mame/drivers/nbmj8991.cpp index 4e94edc3c3f..5e0a6d0f0e2 100644 --- a/src/mame/drivers/nbmj8991.cpp +++ b/src/mame/drivers/nbmj8991.cpp @@ -1335,7 +1335,7 @@ MACHINE_CONFIG_START(nbmj8991_state::nbmjdrv1) // galkoku MCFG_DEVICE_IO_MAP(galkoku_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8991_state, irq0_line_hold) - MCFG_NB1413M3_ADD("nb1413m3") + NB1413M3(config, m_nb1413m3, 0); /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1366,7 +1366,7 @@ MACHINE_CONFIG_START(nbmj8991_state::nbmjdrv2) // pstadium MCFG_DEVICE_IO_MAP(pstadium_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", nbmj8991_state, irq0_line_hold) - MCFG_NB1413M3_ADD("nb1413m3") + NB1413M3(config, m_nb1413m3, 0); MCFG_DEVICE_ADD("audiocpu", Z80, 4000000) /* 4.00 MHz */ MCFG_DEVICE_PROGRAM_MAP(nbmj8991_sound_map) @@ -1414,13 +1414,12 @@ void nbmj8991_state::nbmjdrv3(machine_config &config) // --------------------------------------------------------------------- -MACHINE_CONFIG_START(nbmj8991_state::galkoku) +void nbmj8991_state::galkoku(machine_config &config) +{ nbmjdrv1(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_GALKOKU ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_GALKOKU); +} MACHINE_CONFIG_START(nbmj8991_state::galkaika) @@ -1430,8 +1429,7 @@ MACHINE_CONFIG_START(nbmj8991_state::galkaika) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(galkaika_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_GALKAIKA ) + m_nb1413m3->set_type(NB1413M3_GALKAIKA); MACHINE_CONFIG_END @@ -1442,8 +1440,7 @@ MACHINE_CONFIG_START(nbmj8991_state::tokyogal) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(tokyogal_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TOKYOGAL ) + m_nb1413m3->set_type(NB1413M3_TOKYOGAL); MACHINE_CONFIG_END @@ -1454,29 +1451,26 @@ MACHINE_CONFIG_START(nbmj8991_state::tokimbsj) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(galkaika_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TOKIMBSJ ) + m_nb1413m3->set_type(NB1413M3_TOKIMBSJ); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8991_state::mcontest) +void nbmj8991_state::mcontest(machine_config &config) +{ nbmjdrv1(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MCONTEST ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_MCONTEST); +} -MACHINE_CONFIG_START(nbmj8991_state::uchuuai) +void nbmj8991_state::uchuuai(machine_config &config) +{ nbmjdrv1(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_UCHUUAI ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_UCHUUAI); +} MACHINE_CONFIG_START(nbmj8991_state::hyouban) @@ -1486,20 +1480,18 @@ MACHINE_CONFIG_START(nbmj8991_state::hyouban) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_IO_MAP(hyouban_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_HYOUBAN ) + m_nb1413m3->set_type(NB1413M3_HYOUBAN); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8991_state::pstadium) +void nbmj8991_state::pstadium(machine_config &config) +{ nbmjdrv2(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_PSTADIUM ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_PSTADIUM); +} MACHINE_CONFIG_START(nbmj8991_state::triplew1) @@ -1509,8 +1501,7 @@ MACHINE_CONFIG_START(nbmj8991_state::triplew1) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(triplew1_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TRIPLEW1 ) + m_nb1413m3->set_type(NB1413M3_TRIPLEW1); MACHINE_CONFIG_END @@ -1521,18 +1512,16 @@ MACHINE_CONFIG_START(nbmj8991_state::triplew2) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(triplew2_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_TRIPLEW2 ) + m_nb1413m3->set_type(NB1413M3_TRIPLEW2); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8991_state::ntopstar) +void nbmj8991_state::ntopstar(machine_config &config) +{ nbmjdrv2(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_NTOPSTAR ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_NTOPSTAR); +} MACHINE_CONFIG_START(nbmj8991_state::mjlstory) @@ -1542,38 +1531,34 @@ MACHINE_CONFIG_START(nbmj8991_state::mjlstory) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(mjlstory_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJLSTORY ) + m_nb1413m3->set_type(NB1413M3_MJLSTORY); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8991_state::vanilla) +void nbmj8991_state::vanilla(machine_config &config) +{ nbmjdrv2(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_VANILLA ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_VANILLA); +} MACHINE_CONFIG_START(nbmj8991_state::finalbny) nbmjdrv2(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_FINALBNY ) + m_nb1413m3->set_type(NB1413M3_FINALBNY); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END -MACHINE_CONFIG_START(nbmj8991_state::qmhayaku) +void nbmj8991_state::qmhayaku(machine_config &config) +{ nbmjdrv2(config); - /* basic machine hardware */ - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_QMHAYAKU ) -MACHINE_CONFIG_END + m_nb1413m3->set_type(NB1413M3_QMHAYAKU); +} MACHINE_CONFIG_START(nbmj8991_state::mjgottub) @@ -1583,8 +1568,7 @@ MACHINE_CONFIG_START(nbmj8991_state::mjgottub) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_PROGRAM_MAP(triplew1_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_MJGOTTUB ) + m_nb1413m3->set_type(NB1413M3_MJGOTTUB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); MACHINE_CONFIG_END @@ -1598,8 +1582,7 @@ MACHINE_CONFIG_START(nbmj8991_state::av2mj1bb) MCFG_DEVICE_PROGRAM_MAP(av2mj1bb_map) MCFG_DEVICE_IO_MAP(av2mj1bb_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_AV2MJ1BB ) + m_nb1413m3->set_type(NB1413M3_AV2MJ1BB); MACHINE_CONFIG_END @@ -1611,8 +1594,7 @@ MACHINE_CONFIG_START(nbmj8991_state::av2mj2rg) MCFG_DEVICE_PROGRAM_MAP(av2mj2rg_map) MCFG_DEVICE_IO_MAP(av2mj1bb_io_map) - MCFG_DEVICE_MODIFY("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_AV2MJ2RG ) + m_nb1413m3->set_type(NB1413M3_AV2MJ2RG); MACHINE_CONFIG_END diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp index 1630eb6aa6e..9401f3e773e 100644 --- a/src/mame/drivers/nc.cpp +++ b/src/mame/drivers/nc.cpp @@ -1483,7 +1483,7 @@ MACHINE_CONFIG_START(nc200_state::nc200) m_uart->rxrdy_handler().set(FUNC(nc200_state::nc200_rxrdy_callback)); m_uart->txrdy_handler().set(FUNC(nc200_state::nc200_txrdy_callback)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(FUNC(nc200_state::nc200_fdc_interrupt)); MCFG_FLOPPY_DRIVE_ADD("upd765:0", ibmpc_floppies, "525dd", ibmpc_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", ibmpc_floppies, "525dd", ibmpc_floppy_formats) diff --git a/src/mame/drivers/ngp.cpp b/src/mame/drivers/ngp.cpp index 287b7c884e3..2d383252057 100644 --- a/src/mame/drivers/ngp.cpp +++ b/src/mame/drivers/ngp.cpp @@ -860,7 +860,9 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(ngp_state::ngp) ngp_common(config); - MCFG_K1GE_ADD( "k1ge", 6.144_MHz_XTAL, "screen", WRITELINE( *this, ngp_state, ngp_vblank_pin_w ), WRITELINE( *this, ngp_state, ngp_hblank_pin_w ) ) + K1GE(config , m_k1ge, 6.144_MHz_XTAL, "screen"); + m_k1ge->vblank_callback().set(FUNC(ngp_state::ngp_vblank_pin_w)); + m_k1ge->hblank_callback().set(FUNC(ngp_state::ngp_hblank_pin_w)); MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_PALETTE("k1ge:palette") @@ -878,7 +880,9 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(ngp_state::ngpc) ngp_common(config); - MCFG_K2GE_ADD( "k1ge", 6.144_MHz_XTAL, "screen", WRITELINE( *this, ngp_state, ngp_vblank_pin_w ), WRITELINE( *this, ngp_state, ngp_hblank_pin_w ) ) + K2GE(config , m_k1ge, 6.144_MHz_XTAL, "screen"); + m_k1ge->vblank_callback().set(FUNC(ngp_state::ngp_vblank_pin_w)); + m_k1ge->hblank_callback().set(FUNC(ngp_state::ngp_hblank_pin_w)); MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_PALETTE("k1ge:palette") diff --git a/src/mame/drivers/okean240.cpp b/src/mame/drivers/okean240.cpp index ca108352322..30c102ce069 100644 --- a/src/mame/drivers/okean240.cpp +++ b/src/mame/drivers/okean240.cpp @@ -574,8 +574,8 @@ MACHINE_CONFIG_START(okean240_state::okean240) MCFG_DEVICE_REMOVE("uart") MCFG_DEVICE_REMOVE("rs232") subdevice<pit8253_device>("pit")->out_handler<1>().set_nop(); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(okean240_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(okean240_state::kbd_put)); MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp index bbf469f3c2e..65229b9fcb4 100644 --- a/src/mame/drivers/olyboss.cpp +++ b/src/mame/drivers/olyboss.cpp @@ -449,7 +449,7 @@ MACHINE_CONFIG_START( olyboss_state::olybossd ) AM9519(config, m_uic, 0); m_uic->out_int_callback().set_inputline("maincpu", 0); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(m_uic, FUNC(am9519_device::ireq2_w)).invert(); m_fdc->drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq0_w)); FLOPPY_CONNECTOR(config, m_fdd0, bosscd_floppies, "525qd", floppy_image_device::default_floppy_formats); @@ -476,8 +476,8 @@ MACHINE_CONFIG_START( olyboss_state::olybossd ) m_ppi->out_pc_callback().set(FUNC(olyboss_state::ppic_w)); /* keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(olyboss_state, keyboard_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(olyboss_state::keyboard_put)); MACHINE_CONFIG_END MACHINE_CONFIG_START( olyboss_state::olybossb ) @@ -515,7 +515,7 @@ MACHINE_CONFIG_START( olyboss_state::bossb85 ) PIC8259(config, m_pic, 0); m_pic->out_int_callback().set_inputline(m_maincpu, 0); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_maincpu, I8085_RST65_LINE); m_fdc->drq_wr_callback().set(m_dma, FUNC(i8257_device::dreq0_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", bossb_floppies, "525dd", floppy_image_device::default_floppy_formats) @@ -540,8 +540,8 @@ MACHINE_CONFIG_START( olyboss_state::bossb85 ) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) /* keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(olyboss_state, keyboard85_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(olyboss_state::keyboard85_put)); MACHINE_CONFIG_END MACHINE_CONFIG_START( olyboss_state::bossa85 ) diff --git a/src/mame/drivers/olytext.cpp b/src/mame/drivers/olytext.cpp index 9af7a15d98f..ed80b13dfd3 100644 --- a/src/mame/drivers/olytext.cpp +++ b/src/mame/drivers/olytext.cpp @@ -171,8 +171,8 @@ MACHINE_CONFIG_START( olytext_state::olytext ) MCFG_FLOPPY_DRIVE_SOUND(true) /* keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(olytext_state, keyboard_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(olytext_state::keyboard_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/p8k.cpp b/src/mame/drivers/p8k.cpp index 9e6625a21a7..a5302baf1aa 100644 --- a/src/mame/drivers/p8k.cpp +++ b/src/mame/drivers/p8k.cpp @@ -418,7 +418,7 @@ GFXDECODE_END MACHINE_CONFIG_START(p8k_state::p8k) /* basic machine hardware */ - z80_device& maincpu(Z80(config, "maincpu", XTAL(4'000'000))); + z80_device& maincpu(Z80(config, "maincpu", 16_MHz_XTAL / 4)); maincpu.set_daisy_config(p8k_daisy_chain); maincpu.set_addrmap(AS_PROGRAM, &p8k_state::p8k_memmap); maincpu.set_addrmap(AS_IO, &p8k_state::p8k_iomap); @@ -426,7 +426,7 @@ MACHINE_CONFIG_START(p8k_state::p8k) MCFG_MACHINE_RESET_OVERRIDE(p8k_state,p8k) /* peripheral hardware */ - z80dma_device& dma(Z80DMA(config, "dma", XTAL(4'000'000))); + z80dma_device& dma(Z80DMA(config, "dma", 16_MHz_XTAL / 4)); dma.out_busreq_callback().set(FUNC(p8k_state::p8k_dma_irq_w)); dma.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); dma.in_mreq_callback().set(FUNC(p8k_state::memory_read_byte)); @@ -450,7 +450,7 @@ MACHINE_CONFIG_START(p8k_state::p8k) // Baud Gen 0, Baud Gen 1, Baud Gen 2, ctc1.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - z80sio_device& sio(Z80SIO(config, "sio", XTAL(4'000'000))); + z80sio_device& sio(Z80SIO(config, "sio", 16_MHz_XTAL / 4)); sio.out_txdb_callback().set("rs232", FUNC(rs232_port_device::write_txd)); sio.out_dtrb_callback().set("rs232", FUNC(rs232_port_device::write_dtr)); sio.out_rtsb_callback().set("rs232", FUNC(rs232_port_device::write_rts)); @@ -460,7 +460,7 @@ MACHINE_CONFIG_START(p8k_state::p8k) rs232.rxd_handler().set("sio", FUNC(z80sio_device::rxb_w)); rs232.cts_handler().set("sio", FUNC(z80sio_device::ctsb_w)); - z80sio_device& sio1(Z80SIO(config, "sio1", XTAL(4'000'000))); + z80sio_device& sio1(Z80SIO(config, "sio1", 16_MHz_XTAL / 4)); sio1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); z80pio_device& pio0(Z80PIO(config, "pio0", 1229000)); @@ -473,7 +473,7 @@ MACHINE_CONFIG_START(p8k_state::p8k) m_pio2->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); m_pio2->in_pa_callback().set_ioport("DSW"); - I8272A(config, m_i8272, true); + I8272A(config, m_i8272, 16_MHz_XTAL / 8, true); m_i8272->drq_wr_callback().set("dma", FUNC(z80dma_device::rdy_w)); MCFG_FLOPPY_DRIVE_ADD("i8272:0", p8k_floppies, "525hd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("i8272:1", p8k_floppies, "525hd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp index 6958c1b4316..3e750193123 100644 --- a/src/mame/drivers/pasopia7.cpp +++ b/src/mame/drivers/pasopia7.cpp @@ -966,7 +966,7 @@ MACHINE_CONFIG_START(pasopia7_state::p7_base) m_ppi2->in_pc_callback().set(FUNC(pasopia7_state::nmi_reg_r)); m_ppi2->out_pc_callback().set(FUNC(pasopia7_state::nmi_reg_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD("fdc:0", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END diff --git a/src/mame/drivers/pastelg.cpp b/src/mame/drivers/pastelg.cpp index 82625ffa55f..9bb5ed4c1df 100644 --- a/src/mame/drivers/pastelg.cpp +++ b/src/mame/drivers/pastelg.cpp @@ -405,8 +405,7 @@ MACHINE_CONFIG_START(pastelg_state::pastelg) MCFG_DEVICE_IO_MAP(pastelg_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", pastelg_state, irq0_line_assert) // nmiclock not written, chip is 1411M1 instead of 1413M3 - MCFG_NB1413M3_ADD("nb1413m3") - MCFG_NB1413M3_TYPE( NB1413M3_PASTELG ) + NB1413M3(config, m_nb1413m3, 0, NB1413M3_PASTELG); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -466,7 +465,7 @@ MACHINE_CONFIG_START(pastelg_state::threeds) MCFG_DEVICE_IO_MAP(threeds_io_map) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", pastelg_state, irq0_line_assert) - MCFG_NB1413M3_ADD("nb1413m3") + NB1413M3(config, m_nb1413m3, 0); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ diff --git a/src/mame/drivers/patinho_feio.cpp b/src/mame/drivers/patinho_feio.cpp index fbdc3479590..92463e03178 100644 --- a/src/mame/drivers/patinho_feio.cpp +++ b/src/mame/drivers/patinho_feio.cpp @@ -134,8 +134,8 @@ void patinho_feio_state::teletype_kbd_input(u8 data) //I figured out that the data is provided inverted (2's complement) //based on a comment in the source code listing of the HEXAM program. //It is not clear though, if all I/O devices complement the data when - //communicating with the computer, or if this behavious is a particular - //caracteristics of the teletype. + //communicating with the computer, or if this behaviour is a particular + //characteristic of the teletype. m_maincpu->transfer_byte_from_external_device(0xB, ~data); } @@ -263,22 +263,22 @@ MACHINE_CONFIG_START(patinho_feio_state::patinho_feio) /* Teleprinter TeleType ASR33 - (max. speed: 10 characteres per second) + (max. speed: 10 characters per second) with paper tape reading (and optionally punching) capabilities */ MCFG_PATINHO_IODEV_WRITE_CB(0xB, WRITE8(*this, patinho_feio_state, teletype_data_w)) /* Papertape Reader Hewlett-Packard HP-2737-A - Optical Papertape Reader (max. speed: 300 characteres per second) */ + Optical Papertape Reader (max. speed: 300 characters per second) */ // MCFG_PATINHO_IODEV_READ_CB(0xE, READ8(*this, patinho_feio_state, papertapereader_data_r)) /* DECWRITER */ - MCFG_DEVICE_ADD("decwriter", TELEPRINTER, 0) - MCFG_GENERIC_TELEPRINTER_KEYBOARD_CB(PUT(patinho_feio_state, decwriter_kbd_input)) + teleprinter_device &decwriter(TELEPRINTER(config, "decwriter", 0)); + decwriter.set_keyboard_callback(FUNC(patinho_feio_state::decwriter_kbd_input)); /* Teletype */ - MCFG_DEVICE_ADD("teletype", TELEPRINTER, 1) - MCFG_GENERIC_TELEPRINTER_KEYBOARD_CB(PUT(patinho_feio_state, teletype_kbd_input)) + teleprinter_device &teletype(TELEPRINTER(config, "teletype", 1)); + teletype.set_keyboard_callback(FUNC(patinho_feio_state::teletype_kbd_input)); /* punched tape */ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "patinho_tape") diff --git a/src/mame/drivers/pc100.cpp b/src/mame/drivers/pc100.cpp index be1e7ac3e84..deee05ca664 100644 --- a/src/mame/drivers/pc100.cpp +++ b/src/mame/drivers/pc100.cpp @@ -667,7 +667,7 @@ MACHINE_CONFIG_START(pc100_state::pc100) //i8251.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); i8251.rxrdy_handler().set(m_pic, FUNC(pic8259_device::ir1_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(FUNC(pc100_state::irqnmi_w)); m_fdc->drq_wr_callback().set(FUNC(pc100_state::drqnmi_w)); diff --git a/src/mame/drivers/pc8801.cpp b/src/mame/drivers/pc8801.cpp index 67390407e52..aaef108e59a 100644 --- a/src/mame/drivers/pc8801.cpp +++ b/src/mame/drivers/pc8801.cpp @@ -2370,7 +2370,7 @@ MACHINE_CONFIG_START(pc8801_state::pc8801) d8255_slave.in_pc_callback().set(FUNC(pc8801_state::fdc_8255_c_r)); d8255_slave.out_pc_callback().set(FUNC(pc8801_state::fdc_8255_c_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set_inputline(m_fdccpu, INPUT_LINE_IRQ0); #if USE_PROPER_I8214 diff --git a/src/mame/drivers/pc88va.cpp b/src/mame/drivers/pc88va.cpp index 2c2b67d2ca1..5906ed879ce 100644 --- a/src/mame/drivers/pc88va.cpp +++ b/src/mame/drivers/pc88va.cpp @@ -1648,7 +1648,7 @@ MACHINE_CONFIG_START(pc88va_state::pc88va) m_dmac->in_memr_callback().set(FUNC(pc88va_state::dma_memr_cb)); m_dmac->out_memw_callback().set(FUNC(pc88va_state::dma_memw_cb)); - UPD765A(config, m_fdc, false, true); + UPD765A(config, m_fdc, 8000000, false, true); m_fdc->intrq_wr_callback().set(FUNC(pc88va_state::fdc_irq)); m_fdc->drq_wr_callback().set(FUNC(pc88va_state::fdc_drq)); FLOPPY_CONNECTOR(config, m_fdd[0], pc88va_floppies, "525hd", pc88va_state::floppy_formats); diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp index 8831b5e954a..a2fa19bd268 100644 --- a/src/mame/drivers/pc9801.cpp +++ b/src/mame/drivers/pc9801.cpp @@ -2351,7 +2351,7 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_common) I8251(config, m_sio, 0); - UPD765A(config, m_fdc_2hd, true, true); + UPD765A(config, m_fdc_2hd, 8'000'000, true, true); m_fdc_2hd->intrq_wr_callback().set(m_pic2, FUNC(pic8259_device::ir3_w)); m_fdc_2hd->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq2_w)).invert(); FLOPPY_CONNECTOR(config, "upd765_2hd:0", pc9801_floppies, "525hd", pc9801_state::floppy_formats); @@ -2401,7 +2401,7 @@ MACHINE_CONFIG_START(pc9801_state::pc9801) // TODO: maybe force dips to avoid beep error RAM(config, m_ram).set_default_size("640K").set_extra_options("128K,256K,384K,512K"); - UPD765A(config, m_fdc_2dd, false, true); + UPD765A(config, m_fdc_2dd, 8'000'000, false, true); m_fdc_2dd->intrq_wr_callback().set(FUNC(pc9801_state::fdc_2dd_irq)); m_fdc_2dd->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w)).invert(); FLOPPY_CONNECTOR(config, "upd765_2dd:0", pc9801_floppies, "525dd", pc9801_state::floppy_formats); diff --git a/src/mame/drivers/pcw.cpp b/src/mame/drivers/pcw.cpp index 3cb03bb101a..c0f1a3626f1 100644 --- a/src/mame/drivers/pcw.cpp +++ b/src/mame/drivers/pcw.cpp @@ -1261,7 +1261,7 @@ void pcw_state::pcw(machine_config &config) SPEAKER(config, "mono").front_center(); BEEP(config, m_beeper, 3750).add_route(ALL_OUTPUTS, "mono", 1.00); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 4'000'000, true, true); m_fdc->intrq_wr_callback().set(FUNC(pcw_state::pcw_fdc_interrupt)); FLOPPY_CONNECTOR(config, "upd765:0", pcw_floppies, "3dsdd", floppy_image_device::default_floppy_formats); diff --git a/src/mame/drivers/pcw16.cpp b/src/mame/drivers/pcw16.cpp index a74a4f76048..f05ee9717b5 100644 --- a/src/mame/drivers/pcw16.cpp +++ b/src/mame/drivers/pcw16.cpp @@ -1063,7 +1063,7 @@ MACHINE_CONFIG_START(pcw16_state::pcw16) pc_lpt_device &lpt(PC_LPT(config, "lpt")); lpt.irq_handler().set_inputline(m_maincpu, 0); - PC_FDC_SUPERIO(config, m_fdc); + PC_FDC_SUPERIO(config, m_fdc, 48_MHz_XTAL / 2); m_fdc->intrq_wr_callback().set(FUNC(pcw16_state::fdc_interrupt)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", pcw16_floppies, "35hd", pcw16_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:1", pcw16_floppies, "35hd", pcw16_state::floppy_formats) diff --git a/src/mame/drivers/pdp11.cpp b/src/mame/drivers/pdp11.cpp index e48405c021f..aa8dcbc9811 100644 --- a/src/mame/drivers/pdp11.cpp +++ b/src/mame/drivers/pdp11.cpp @@ -353,18 +353,19 @@ void pdp11_state::kbd_put(u8 data) m_teletype_status |= 0x80; } -MACHINE_CONFIG_START(pdp11_state::pdp11) +void pdp11_state::pdp11(machine_config &config) +{ /* basic machine hardware */ T11(config, m_maincpu, XTAL(4'000'000)); // Need proper CPU here m_maincpu->set_initial_mode(6 << 13); m_maincpu->set_addrmap(AS_PROGRAM, &pdp11_state::pdp11_mem); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(pdp11_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(pdp11_state::kbd_put)); RX01(config, "rx01", 0); -MACHINE_CONFIG_END +} MACHINE_CONFIG_START(pdp11_state::pdp11ub2) pdp11(config); diff --git a/src/mame/drivers/peoplepc.cpp b/src/mame/drivers/peoplepc.cpp index 10e4c8a4fe0..d747c97ed5c 100644 --- a/src/mame/drivers/peoplepc.cpp +++ b/src/mame/drivers/peoplepc.cpp @@ -290,7 +290,7 @@ MACHINE_CONFIG_START(peoplepc_state::olypeopl) m_dmac->in_ior_cb<0>().set("upd765", FUNC(upd765a_device::mdma_r)); m_dmac->out_iow_cb<0>().set("upd765", FUNC(upd765a_device::mdma_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set("pic8259_0", FUNC(pic8259_device::ir2_w)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(i8257_device::dreq0_w)); MCFG_FLOPPY_DRIVE_ADD("upd765:0", peoplepc_floppies, "525qd", peoplepc_state::floppy_formats) diff --git a/src/mame/drivers/pes.cpp b/src/mame/drivers/pes.cpp index 7abd62cd632..1e51fe6a583 100644 --- a/src/mame/drivers/pes.cpp +++ b/src/mame/drivers/pes.cpp @@ -263,7 +263,7 @@ void pes_state::pes(machine_config &config) m_speech->add_route(ALL_OUTPUTS, "mono", 1.0); GENERIC_TERMINAL(config, m_terminal, 0); - m_terminal->set_keyboard_callback(KEYBOARDCB_PUT(pes_state, pes_kbd_input)); + m_terminal->set_keyboard_callback(FUNC(pes_state::pes_kbd_input)); } /****************************************************************************** diff --git a/src/mame/drivers/pgm2.cpp b/src/mame/drivers/pgm2.cpp index 81741667e96..4ce4fe6e004 100644 --- a/src/mame/drivers/pgm2.cpp +++ b/src/mame/drivers/pgm2.cpp @@ -77,13 +77,13 @@ 06 - zoom something, 0F-7F, default 1F 08 - fg scroll x 0a - fg scroll y - 0e - resolution, 0 - low (kof98), 1 - high (rest of games) - 10 - ? orleg2 - 0x13, kov2nl, kof98, ddpdojt - 0x14 at init + 0e - resolution, 0 - low (kof98umh), 1 - high (rest of games), 2 - higher (kov3) + 10 - ? orleg2 - 0x13, kov2nl, kov3, kof98umh, ddpdojt - 0x14 at init 14 - sprite enable ? set to 0 before spriteram update, to 1 after - 16 - set to 1 before access to vrams/palettes, reset after. bits: 0 - bg ram and palette, 1 - fg ram and palette, 2 - sprite palette. + 16 - set to 1 before access to vrams/palettes, reset after. bits: 0 - bg RAM and palette, 1 - fg RAM and palette, 2 - sprite palette. 18 - vblank ack 1a - ? 0 at init - 1c - ? orleg2 - 5, kov2nl, kof, ddpdojt - 7 at init + 1c - ? orleg2 - 5, kov2nl, kov3, kof98umh, ddpdojt - 7 at init 1e - ? 2 at init 32 - shared RAM bank 34, 36 - ? 0 at init @@ -126,11 +126,11 @@ WRITE32_MEMBER(pgm2_state::sprite_encryption_w) m_realspritekey = bitswap<32>(m_spritekey ^ 0x90055555, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); } -void pgm2_state::postload() +void pgm2_state::device_post_load() { // make sure the encrypted area is in the correct state after we load a savestate because we don't want to have to save the whole rom. - memcpy(memregion("user1")->base(), &m_encrypted_copy[0], memregion("user1")->bytes()); + memcpy(m_mainrom->base(), &m_encrypted_copy[0], m_mainrom->bytes()); if (m_has_decrypted_kov3_module) { @@ -143,38 +143,31 @@ void pgm2_state::postload() if (m_romboard_ram) { - decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0x0200000); + decrypter.decrypter_rom((u16*)m_mainrom->base(), m_mainrom->bytes(), m_romboard_ram.bytes()); } else { - decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0); + decrypter.decrypter_rom((u16*)m_mainrom->base(), m_mainrom->bytes(), 0); } } } WRITE32_MEMBER(pgm2_state::encryption_do_w) { + igs036_decryptor decrypter(m_encryption_table); if (m_romboard_ram) { - igs036_decryptor decrypter(m_encryption_table); - decrypter.decrypter_rom((uint16_t*)&m_romboard_ram[0], 0x0200000, 0); - decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0x0200000); // assume the rom at 0x0200000 also gets decrypted as if it was at 0x0200000 even if it isn't used (the game has already copied it to RAM where it properly decrypted) - m_has_decrypted = 1; + decrypter.decrypter_rom((u16*)&m_romboard_ram[0], m_romboard_ram.bytes(), 0); + decrypter.decrypter_rom((u16*)m_mainrom->base(), m_mainrom->bytes(), m_romboard_ram.bytes()); // assume the rom at 0x0200000 also gets decrypted as if it was at 0x0200000 even if it isn't used (the game has already copied it to RAM where it properly decrypted) } else { - igs036_decryptor decrypter(m_encryption_table); - decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0); - m_has_decrypted = 1; + decrypter.decrypter_rom((u16*)m_mainrom->base(), m_mainrom->bytes(), 0); } + m_has_decrypted = true; } -INTERRUPT_GEN_MEMBER(pgm2_state::igs_interrupt) -{ - m_arm_aic->set_irq(12, ASSERT_LINE); -} - WRITE16_MEMBER(pgm2_state::share_bank_w) { COMBINE_DATA(&m_share_bank); @@ -190,7 +183,7 @@ WRITE8_MEMBER(pgm2_state::shareram_w) } -TIMER_DEVICE_CALLBACK_MEMBER(pgm2_state::igs_interrupt2) +TIMER_DEVICE_CALLBACK_MEMBER(pgm2_state::mcu_interrupt) { m_arm_aic->set_irq(3, ASSERT_LINE); } @@ -198,21 +191,21 @@ TIMER_DEVICE_CALLBACK_MEMBER(pgm2_state::igs_interrupt2) // "MPU" MCU HLE starts here // command delays are far from correct, might not work in other games // command results probably incorrect (except for explicit checked bytes) -void pgm2_state::mcu_command(address_space &space, bool is_command) +void pgm2_state::mcu_command(bool is_command) { - uint8_t cmd = m_mcu_regs[0] & 0xff; + u8 const cmd = m_mcu_regs[0] & 0xff; // if (is_command && cmd != 0xf6) // logerror("MCU command %08x %08x\n", m_mcu_regs[0], m_mcu_regs[1]); if (is_command) { m_mcu_last_cmd = cmd; - uint8_t status = 0xf7; // "command accepted" status + u8 status = 0xf7; // "command accepted" status int delay = 1; - uint8_t arg1 = m_mcu_regs[0] >> 8; - uint8_t arg2 = m_mcu_regs[0] >> 16; - uint8_t arg3 = m_mcu_regs[0] >> 24; + u8 arg1 = m_mcu_regs[0] >> 8; + u8 arg2 = m_mcu_regs[0] >> 16; + u8 arg3 = m_mcu_regs[0] >> 24; switch (cmd) { case 0xf6: // get result @@ -224,11 +217,11 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) m_mcu_result0 = m_mcu_regs[0]; m_mcu_result1 = m_mcu_regs[1]; break; - case 0xe1: // shared ram access (unimplemented) + case 0xe1: // shared RAM access (unimplemented) { // MCU access to RAM shared at 0x30100000, 2x banks, in the same time CPU and MCU access different banks - uint8_t mode = m_mcu_regs[0] >> 16; // 0 - ???, 1 - read, 2 - write - uint8_t data = m_mcu_regs[0] >> 24; + u8 mode = m_mcu_regs[0] >> 16; // 0 - ???, 1 - read, 2 - write + u8 data = m_mcu_regs[0] >> 24; if (mode == 2) { // where is offset ? so far assume this command fill whole page @@ -249,21 +242,21 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) status = 0xf4; m_mcu_result0 = cmd; break; - case 0xc2: // read data to shared ram + case 0xc2: // read data to shared RAM for (int i = 0; i < arg3; i++) { if (m_memcard[arg1 & 3]->present() != -1) - m_shareram[i + (~m_share_bank & 1) * 128] = m_memcard[arg1 & 3]->read(space, arg2 + i); + m_shareram[i + (~m_share_bank & 1) * 128] = m_memcard[arg1 & 3]->read(arg2 + i); else status = 0xf4; } m_mcu_result0 = cmd; break; - case 0xc3: // save data from shared ram + case 0xc3: // save data from shared RAM for (int i = 0; i < arg3; i++) { if (m_memcard[arg1 & 3]->present() != -1) - m_memcard[arg1 & 3]->write(space, arg2 + i, m_shareram[i + (~m_share_bank & 1) * 128]); + m_memcard[arg1 & 3]->write(arg2 + i, m_shareram[i + (~m_share_bank & 1) * 128]); else status = 0xf4; } @@ -272,9 +265,9 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) case 0xc4: // presumable read security mem (password only?) if (m_memcard[arg1 & 3]->present() != -1) { - m_mcu_result1 = m_memcard[arg1 & 3]->read_sec(space, 1) | - (m_memcard[arg1 & 3]->read_sec(space, 2) << 8) | - (m_memcard[arg1 & 3]->read_sec(space, 3) << 16); + m_mcu_result1 = m_memcard[arg1 & 3]->read_sec(1) | + (m_memcard[arg1 & 3]->read_sec(2) << 8) | + (m_memcard[arg1 & 3]->read_sec(3) << 16); } else status = 0xf4; @@ -282,14 +275,14 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) break; case 0xc5: // write security mem if (m_memcard[arg1 & 3]->present() != -1) - m_memcard[arg1 & 3]->write_sec(space, arg2 & 3, arg3); + m_memcard[arg1 & 3]->write_sec(arg2 & 3, arg3); else status = 0xf4; m_mcu_result0 = cmd; break; case 0xc6: // presumable write protection mem if (m_memcard[arg1 & 3]->present() != -1) - m_memcard[arg1 & 3]->write_prot(space, arg2 & 3, arg3); + m_memcard[arg1 & 3]->write_prot(arg2 & 3, arg3); else status = 0xf4; m_mcu_result0 = cmd; @@ -297,10 +290,10 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) case 0xc7: // read protection mem if (m_memcard[arg1 & 3]->present() != -1) { - m_mcu_result1 = m_memcard[arg1 & 3]->read_prot(space, 0) | - (m_memcard[arg1 & 3]->read_prot(space, 1) << 8) | - (m_memcard[arg1 & 3]->read_prot(space, 2) << 16) | - (m_memcard[arg1 & 3]->read_prot(space, 3) << 24); + m_mcu_result1 = m_memcard[arg1 & 3]->read_prot(0) | + (m_memcard[arg1 & 3]->read_prot(1) << 8) | + (m_memcard[arg1 & 3]->read_prot(2) << 16) | + (m_memcard[arg1 & 3]->read_prot(3) << 24); } else status = 0xf4; @@ -308,7 +301,7 @@ void pgm2_state::mcu_command(address_space &space, bool is_command) break; case 0xc8: // write data mem if (m_memcard[arg1 & 3]->present() != -1) - m_memcard[arg1 & 3]->write(space, arg2, arg3); + m_memcard[arg1 & 3]->write(arg2, arg3); else status = 0xf4; m_mcu_result0 = cmd; @@ -350,10 +343,10 @@ WRITE32_MEMBER(pgm2_state::mcu_w) COMBINE_DATA(&m_mcu_regs[reg]); if (reg == 2 && m_mcu_regs[2]) // irq to mcu - mcu_command(space, true); + mcu_command(true); if (reg == 5 && m_mcu_regs[5]) // ack to mcu (written at the end of irq handler routine) { - mcu_command(space, false); + mcu_command(false); m_arm_aic->set_irq(3, CLEAR_LINE); } } @@ -372,7 +365,7 @@ WRITE16_MEMBER(pgm2_state::unk30120014_w) else { // interesting data - //printf("unk30120014_w %d %04x\n", offset, data); + //logerror("unk30120014_w %d %04x\n", offset, data); } } @@ -400,22 +393,22 @@ WRITE16_MEMBER(pgm2_state::unk30120014_w) or security chip just waiting to be be written magic value at specific address in ROM area, and if this happen enable descrambling using hardcoded values. */ -READ_LINE_MEMBER(pgm2_state::module_data_r) +int pgm2_state::module_data_r() { return module_out_latch ? ASSERT_LINE : CLEAR_LINE; } -WRITE_LINE_MEMBER(pgm2_state::module_data_w) +void pgm2_state::module_data_w(int state) { module_in_latch = (state == ASSERT_LINE) ? 1 : 0; } -WRITE_LINE_MEMBER(pgm2_state::module_clk_w) +void pgm2_state::module_clk_w(int state) { if (module_prev_state != state && state == CLEAR_LINE) { if (module_clk_cnt < 80) { - int offs = module_clk_cnt / 8; - int bit = (module_clk_cnt & 7) ^ 7; + s8 const offs = module_clk_cnt / 8; + u8 const bit = (module_clk_cnt & 7) ^ 7; module_rcv_buf[offs] &= ~(1 << bit); module_rcv_buf[offs] |= module_in_latch << bit; @@ -444,9 +437,9 @@ WRITE_LINE_MEMBER(pgm2_state::module_clk_w) } else { - int offs = (module_clk_cnt - 80) / 8; - int bit = (module_clk_cnt & 7) ^ 7; - module_out_latch = (module_send_buf[offs] >> bit) & 1; + s8 const offs = (module_clk_cnt - 80) / 8; + u8 const bit = (module_clk_cnt & 7) ^ 7; + module_out_latch = BIT(module_send_buf[offs], bit); ++module_clk_cnt; if (module_clk_cnt >= 152) module_clk_cnt = 0; @@ -461,17 +454,17 @@ READ16_MEMBER(pgm2_state::module_rom_r) { if (offset == 4) module_sum_read = false; - uint32_t offs = ((offset - 1) * 2) ^ 2; + u32 const offs = ((offset - 1) * 2) ^ 2; return (module_key->sum[offs] ^ module_key->key[offs]) | ((module_key->sum[offs + 1] ^ module_key->key[offs + 1]) << 8); } - return ((uint16_t *)memregion("user1")->base())[offset]; + return ((u16 *)m_mainrom->base())[offset]; } WRITE16_MEMBER(pgm2_state::module_rom_w) { - //printf("module write %04X at %08X\n", data, offset); - uint32_t dec_val = ((module_key->key[0] | (module_key->key[1] << 8) | (module_key->key[2] << 16)) >> 6) & 0xffff; + //logerror("module write %04X at %08X\n", data, offset); + u32 const dec_val = ((module_key->key[0] | (module_key->key[1] << 8) | (module_key->key[2] << 16)) >> 6) & 0xffff; if (data == dec_val) { // might be wrong and normal data access enabled only after whole sequence complete @@ -499,15 +492,15 @@ WRITE16_MEMBER(pgm2_state::module_rom_w) // very primitive Atmel ARM PIO simulation, should be improved and devicified WRITE32_MEMBER(pgm2_state::pio_sodr_w) { - pio_out_data |= data & mem_mask; - module_data_w((pio_out_data & 0x100) ? ASSERT_LINE : CLEAR_LINE); - module_clk_w((pio_out_data & 0x200) ? ASSERT_LINE : CLEAR_LINE); + m_pio_out_data |= data & mem_mask; + module_data_w((m_pio_out_data & 0x100) ? ASSERT_LINE : CLEAR_LINE); + module_clk_w((m_pio_out_data & 0x200) ? ASSERT_LINE : CLEAR_LINE); } WRITE32_MEMBER(pgm2_state::pio_codr_w) { - pio_out_data &= ~(data & mem_mask); - module_data_w((pio_out_data & 0x100) ? ASSERT_LINE : CLEAR_LINE); - module_clk_w((pio_out_data & 0x200) ? ASSERT_LINE : CLEAR_LINE); + m_pio_out_data &= ~(data & mem_mask); + module_data_w((m_pio_out_data & 0x100) ? ASSERT_LINE : CLEAR_LINE); + module_clk_w((m_pio_out_data & 0x200) ? ASSERT_LINE : CLEAR_LINE); } READ32_MEMBER(pgm2_state::pio_pdsr_r) { @@ -516,9 +509,9 @@ READ32_MEMBER(pgm2_state::pio_pdsr_r) void pgm2_state::pgm2_map(address_map &map) { - map(0x00000000, 0x00003fff).rom(); //AM_REGION("user1", 0x00000) // internal ROM + map(0x00000000, 0x00003fff).rom(); //AM_REGION("mainrom", 0x00000) // internal ROM - map(0x02000000, 0x0200ffff).ram().share("sram"); // 'battery ram' (in CPU?) + map(0x02000000, 0x0200ffff).ram().share("sram"); // 'battery RAM' (in CPU?) map(0x03600000, 0x036bffff).rw(FUNC(pgm2_state::mcu_r), FUNC(pgm2_state::mcu_w)); @@ -527,7 +520,8 @@ void pgm2_state::pgm2_map(address_map &map) map(0x20000000, 0x2007ffff).ram().share("mainram"); - map(0x30000000, 0x30001fff).ram().share("sp_videoram"); // spriteram ('move' ram in test mode) + map(0x30000000, 0x30001fff).ram().share("sp_videoram"); // spriteram ('move' RAM in test mode) + map(0x30002000, 0x30003fff).ram(); // Second half of RAM 6 area of later RAM test, more sprite RAM or mirror of above? map(0x30020000, 0x30021fff).ram().w(FUNC(pgm2_state::bg_videoram_w)).share("bg_videoram"); map(0x30040000, 0x30045fff).ram().w(FUNC(pgm2_state::fg_videoram_w)).share("fg_videoram"); @@ -539,12 +533,14 @@ void pgm2_state::pgm2_map(address_map &map) map(0x300a0000, 0x300a07ff).ram().w(m_tx_palette, FUNC(palette_device::write32)).share("tx_palette"); map(0x300c0000, 0x300c01ff).ram().share("sp_zoom"); // sprite zoom table - it uploads the same data 4x, maybe xshrink,xgrow,yshrink,ygrow or just redundant mirrors + map(0x300c0200, 0x300c03ff).ram(); // Second half of RAM 4 area of later RAM test, more sprite zoom table or mirror of above? - /* linescroll ram - it clears to 0x3bf on startup which is enough bytes for 240 lines if each rowscroll value was 8 bytes, but each row is 4, + /* linescroll RAM - it clears to 0x3bf on startup which is enough bytes for 240 lines if each rowscroll value was 8 bytes, but each row is 4, so only half of this is used? or tx can do it too (unlikely, as orl2 writes 256 lines of data) maybe just bad mem check bounds on orleg2. It reports pass even if it fails the first byte but if the first byte passes it attempts to test 0x10000 bytes, which is far too big so what is the real size? */ map(0x300e0000, 0x300e03ff).ram().share("lineram").mirror(0x000fc00); + map(0x300f0000, 0x300fffff).ram(); // RAM 5 area of later RAM test, more linescroll RAM or mirror of above? map(0x30100000, 0x301000ff).rw(FUNC(pgm2_state::shareram_r), FUNC(pgm2_state::shareram_w)).umask32(0x00ff00ff); @@ -581,14 +577,14 @@ void pgm2_state::pgm2_map(address_map &map) void pgm2_state::pgm2_rom_map(address_map &map) { pgm2_map(map); - map(0x10000000, 0x10ffffff).rom().region("user1", 0); // external ROM + map(0x10000000, 0x10ffffff).rom().region("mainrom", 0); // external ROM } void pgm2_state::pgm2_ram_rom_map(address_map &map) { pgm2_map(map); map(0x10000000, 0x101fffff).ram().share("romboard_ram"); // we should also probably decrypt writes once the encryption is enabled, but the game never writes with it turned on anyway - map(0x10200000, 0x103fffff).rom().region("user1", 0); // external ROM + map(0x10200000, 0x103fffff).rom().region("mainrom", 0); // external ROM } void pgm2_state::pgm2_module_rom_map(address_map &map) @@ -655,10 +651,10 @@ static INPUT_PORTS_START( pgm2 ) PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_SERVICE1 ) // test key p1+p2 - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_SERVICE2 ) // test key p3+p4 - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_SERVICE3 ) // service key p1+p2 - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_SERVICE4 ) // service key p3+p4 + PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Test Key P1 & P2") // test key p1+p2 + PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Test Key P3 & P4") // test key p3+p4 + PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Service P1 & P2") // service key p1+p2 + PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Service P3 & P4") // service key p3+p4 PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -689,7 +685,7 @@ INPUT_PORTS_END WRITE_LINE_MEMBER(pgm2_state::irq) { -// printf("irq\n"); +// logerror("irq\n"); if (state == ASSERT_LINE) m_maincpu->set_input_line(ARM7_IRQ_LINE, ASSERT_LINE); else m_maincpu->set_input_line(ARM7_IRQ_LINE, CLEAR_LINE); } @@ -707,7 +703,7 @@ void pgm2_state::machine_start() save_item(NAME(m_mcu_last_cmd)); save_item(NAME(m_shareram)); save_item(NAME(m_share_bank)); - save_item(NAME(pio_out_data)); + save_item(NAME(m_pio_out_data)); save_item(NAME(module_in_latch)); save_item(NAME(module_sum_read)); save_item(NAME(module_out_latch)); @@ -715,8 +711,6 @@ void pgm2_state::machine_start() save_item(NAME(module_clk_cnt)); save_item(NAME(module_rcv_buf)); save_item(NAME(module_send_buf)); - - machine().save().register_postload(save_prepost_delegate(FUNC(pgm2_state::postload), this)); } void pgm2_state::machine_reset() @@ -727,12 +721,12 @@ void pgm2_state::machine_reset() m_share_bank = 0; // as the decryption is dynamic controlled by the program, restore the encrypted copy - memcpy(memregion("user1")->base(), &m_encrypted_copy[0], memregion("user1")->bytes()); + memcpy(m_mainrom->base(), &m_encrypted_copy[0], m_mainrom->bytes()); - m_has_decrypted = 0; - m_has_decrypted_kov3_module = 0; + m_has_decrypted = false; + m_has_decrypted_kov3_module = false; - pio_out_data = 0; + m_pio_out_data = 0; module_prev_state = 0; module_sum_read = false; module_clk_cnt = 151; // this needed because of "false" clock pulse happen during gpio init @@ -743,9 +737,9 @@ static const gfx_layout tiles8x8_layout = 8,8, RGN_FRAC(1,1), 4, - { 0, 1, 2, 3 }, + { STEP4(0,1) }, { 4, 0, 12, 8, 20, 16, 28, 24 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, + { STEP8(0,4*8) }, 32*8 }; @@ -755,11 +749,8 @@ static const gfx_layout tiles32x32x8_layout = RGN_FRAC(1,1), 7, { 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8, - 16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8, 24*8, 25*8, 26*8, 27*8, 28*8, 29*8, 30*8, 31*8 }, - { 0*256, 1*256, 2*256, 3*256, 4*256, 5*256, 6*256, 7*256, 8*256, 9*256, 10*256, 11*256, 12*256, 13*256, 14*256, 15*256, - 16*256, 17*256, 18*256, 19*256, 20*256, 21*256, 22*256, 23*256, 24*256, 25*256, 26*256, 27*256, 28*256, 29*256, 30*256, 31*256 - }, + { STEP32(0,8) }, + { STEP32(0,8*32) }, 256*32 }; @@ -771,73 +762,66 @@ static GFXDECODE_START( pgm2_bg ) GFXDECODE_ENTRY( "bgtile", 0, tiles32x32x8_layout, 0, 0x2000/4/0x80 ) GFXDECODE_END -MACHINE_CONFIG_START(pgm2_state::pgm2) - +void pgm2_state::pgm2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", IGS036, 100000000) // ?? ARM based CPU, has internal ROM. - MCFG_DEVICE_PROGRAM_MAP(pgm2_rom_map) + IGS036(config, m_maincpu, 100000000); // Unknown clock / divider + m_maincpu->set_addrmap(AS_PROGRAM, &pgm2_state::pgm2_rom_map); - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", pgm2_state, igs_interrupt) - MCFG_TIMER_DRIVER_ADD("mcu_timer", pgm2_state, igs_interrupt2) + TIMER(config, m_mcu_timer, 0).configure_generic(timer_device::expired_delegate(FUNC(pgm2_state::mcu_interrupt), this)); - ARM_AIC(config, "arm_aic", 0).irq_callback().set(FUNC(pgm2_state::irq)); + ARM_AIC(config, m_arm_aic, 0).irq_callback().set(FUNC(pgm2_state::irq)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 448-1, 0, 224-1) - MCFG_SCREEN_UPDATE_DRIVER(pgm2_state, screen_update_pgm2) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, pgm2_state, screen_vblank_pgm2)) - - MCFG_DEVICE_ADD("gfxdecode2", GFXDECODE, "tx_palette", pgm2_tx) - - MCFG_DEVICE_ADD("gfxdecode3", GFXDECODE, "bg_palette", pgm2_bg) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh(HZ_TO_ATTOSECONDS(60)); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(64*8, 32*8); + m_screen->set_visarea(0, 448-1, 0, 224-1); + m_screen->set_screen_update(FUNC(pgm2_state::screen_update)); + m_screen->screen_vblank().set(FUNC(pgm2_state::screen_vblank)); - MCFG_PALETTE_ADD("sp_palette", 0x4000/4) // sprites - MCFG_PALETTE_FORMAT(XRGB) + GFXDECODE(config, m_gfxdecode2, m_tx_palette, pgm2_tx); + GFXDECODE(config, m_gfxdecode3, m_bg_palette, pgm2_bg); - MCFG_PALETTE_ADD("tx_palette", 0x800/4) // text - MCFG_PALETTE_FORMAT(XRGB) - - MCFG_PALETTE_ADD("bg_palette", 0x2000/4) // bg - MCFG_PALETTE_FORMAT(XRGB) + PALETTE(config, m_sp_palette, 0x4000/4).set_format(PALETTE_FORMAT_XRGB); // sprites + PALETTE(config, m_tx_palette, 0x800/4).set_format(PALETTE_FORMAT_XRGB); // text + PALETTE(config, m_bg_palette, 0x2000/4).set_format(PALETTE_FORMAT_XRGB); // bg NVRAM(config, "sram", nvram_device::DEFAULT_ALL_0); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("ymz774", YMZ774, 16384000) // is clock correct ? - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + ymz774_device &ymz774(YMZ774(config, "ymz774", 16384000)); // is clock correct ? + ymz774.add_route(0, "lspeaker", 1.0); + ymz774.add_route(1, "rspeaker", 1.0); PGM2_MEMCARD(config, m_memcard[0], 0); PGM2_MEMCARD(config, m_memcard[1], 0); PGM2_MEMCARD(config, m_memcard[2], 0); PGM2_MEMCARD(config, m_memcard[3], 0); -MACHINE_CONFIG_END +} // not strictly needed as the video code supports changing on the fly, but makes recording easier etc. -MACHINE_CONFIG_START(pgm2_state::pgm2_lores) +void pgm2_state::pgm2_lores(machine_config &config) +{ pgm2(config); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) -MACHINE_CONFIG_END + m_screen->set_visarea(0, 320-1, 0, 240-1); +} -MACHINE_CONFIG_START(pgm2_state::pgm2_hires) +void pgm2_state::pgm2_hires(machine_config &config) +{ pgm2(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(pgm2_module_rom_map) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &pgm2_state::pgm2_module_rom_map); + m_screen->set_visarea(0, 512-1, 0, 240-1); +} -MACHINE_CONFIG_START(pgm2_state::pgm2_ramrom) +void pgm2_state::pgm2_ramrom(machine_config &config) +{ pgm2(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(pgm2_ram_rom_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &pgm2_state::pgm2_ram_rom_map); +} /* using macros for the video / sound roms because the locations never change between sets, and we're going to have a LOT of clones to cover all the internal rom regions and external rom revision @@ -846,7 +830,7 @@ MACHINE_CONFIG_END // Oriental Legend 2 #define ORLEG2_VIDEO_SOUND_ROMS \ - ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF ) \ + ROM_REGION( 0x200000, "tiles", ROMREGION_ERASE00 ) \ ROM_LOAD( "ig-a_text.u4", 0x00000000, 0x0200000, CRC(fa444c32) SHA1(31e5e3efa92d52bf9ab97a0ece51e3b77f52ce8a) ) \ \ ROM_REGION( 0x1000000, "bgtile", 0 ) \ @@ -879,15 +863,15 @@ MACHINE_CONFIG_END */ #define ORLEG2_PROGRAM_104(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v104" #extension ".u7", 0x000000, 0x800000, CRC(7c24a4f5) SHA1(3cd9f9264ef2aad0869afdf096e88eb8d74b2570) ) // V104 08-03-03 13:25:37 #define ORLEG2_PROGRAM_103(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v103" #extension ".u7", 0x000000, 0x800000, CRC(21c1fae8) SHA1(36eeb7a5e8dc8ee7c834f3ff1173c28cf6c2f1a3) ) // V103 08-01-30 14:45:17 #define ORLEG2_PROGRAM_101(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v101" #extension ".u7", 0x000000, 0x800000, CRC(45805b53) SHA1(f2a8399c821b75fadc53e914f6f318707e70787c) ) // V101 07-12-24 09:32:32 /* @@ -899,17 +883,17 @@ MACHINE_CONFIG_END #define ORLEG2_INTERNAL_CHINA \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "xyj2_cn.igs036", 0x00000000, 0x0004000, CRC(bcce7641) SHA1(c3b5cf6e9f6eae09b6785314777a52b34c3c7657) ) \ + ROM_LOAD( "xyj2_cn.igs036", 0x00000000, 0x0004000, CRC(bcce7641) SHA1(c3b5cf6e9f6eae09b6785314777a52b34c3c7657) ) /* Core V100 China */ \ ROM_REGION( 0x108, "default_card", 0 ) \ ROM_LOAD( "blank_orleg2_china_card.pg2", 0x000, 0x108, CRC(dc29556f) SHA1(2335cc7af25d4dd9763c6944d3f0eb50276de80a) ) #define ORLEG2_INTERNAL_OVERSEAS \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "ol2_fa.igs036", 0x00000000, 0x0004000, CRC(cc4d398a) SHA1(c50bcc81f02cd5aa8ad157d73209dc53bdedc023) ) + ROM_LOAD( "ol2_fa.igs036", 0x00000000, 0x0004000, CRC(cc4d398a) SHA1(c50bcc81f02cd5aa8ad157d73209dc53bdedc023) ) // Core V100 Oversea #define ORLEG2_INTERNAL_JAPAN \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "ol2_a10.igs036", 0x00000000, 0x0004000, CRC(69375284) SHA1(a120c6a3d8d7898cc3ca508abea78e5e54090c66) ) + ROM_LOAD( "ol2_a10.igs036", 0x00000000, 0x0004000, CRC(69375284) SHA1(a120c6a3d8d7898cc3ca508abea78e5e54090c66) ) // Core V100 Japan ROM_START( orleg2 ) ORLEG2_INTERNAL_OVERSEAS @@ -968,7 +952,7 @@ ROM_END // Knights of Valour 2 New Legend #define KOV2NL_VIDEO_SOUND_ROMS \ - ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF ) \ + ROM_REGION( 0x200000, "tiles", ROMREGION_ERASE00 ) \ ROM_LOAD( "ig-a3_text.u4", 0x00000000, 0x0200000, CRC(214530ff) SHA1(4231a02054b0345392a077042b95779fd45d6c22) ) \ \ ROM_REGION( 0x1000000, "bgtile", 0 ) \ @@ -990,22 +974,22 @@ ROM_END ROM_LOAD("gsyx_nvram", 0x00000000, 0x10000, CRC(22400c16) SHA1(f775a16299c30f2ce23d683161b910e06eff37c1) ) #define KOV2NL_PROGRAM_302(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v302" #extension ".u7", 0x00000000, 0x0800000, CRC(b19cf540) SHA1(25da5804bbfd7ef2cdf5cc5aabaa803d18b98929) ) // V302 08-12-03 15:27:34 #define KOV2NL_PROGRAM_301(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v301" #extension ".u7", 0x000000, 0x800000, CRC(c4595c2c) SHA1(09e379556ef76f81a63664f46d3f1415b315f384) ) // V301 08-09-09 09:44:53 #define KOV2NL_PROGRAM_300(prefix, extension) \ - ROM_REGION( 0x1000000, "user1", 0 ) \ + ROM_REGION( 0x1000000, "mainrom", 0 ) \ ROM_LOAD( #prefix "_v300" #extension ".u7", 0x000000, 0x800000, CRC(08da7552) SHA1(303b97d7694405474c8133a259303ccb49db48b1) ) // V300 08-08-06 18:21:23 // Region 0x00 - China #define KOV2NL_INTERNAL_CHINA \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "gsyx_igs036_china.rom", 0x00000000, 0x0004000, CRC(e09fe4ce) SHA1(c0cac64ef8727cbe79d503ec4df66ddb6f2c925e) ) \ + ROM_LOAD( "gsyx_igs036_china.rom", 0x00000000, 0x0004000, CRC(e09fe4ce) SHA1(c0cac64ef8727cbe79d503ec4df66ddb6f2c925e) ) /* Core V100 China */ \ ROM_REGION( 0x108, "default_card", 0 ) \ ROM_LOAD( "blank_gsyx_china.pg2", 0x000, 0x108, CRC(02842ae8) SHA1(a6cda633b09a706039a79b73db2c258094826f85) ) @@ -1025,7 +1009,7 @@ ROM_END // Region 0x05 - Overseas #define KOV2NL_INTERNAL_OVERSEA \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "kov2nl_igs036_oversea.rom", 0x00000000, 0x0004000, CRC(25ec60cd) SHA1(7dd12d2bc642bfa79520676fe5de458ce7d08ef6) ) \ + ROM_LOAD( "kov2nl_igs036_oversea.rom", 0x00000000, 0x0004000, CRC(25ec60cd) SHA1(7dd12d2bc642bfa79520676fe5de458ce7d08ef6) ) /* Core V100 oversea */ \ ROM_REGION( 0x108, "default_card", 0 ) \ ROM_LOAD( "blank_kov2nl_overseas_card.pg2", 0x000, 0x108, CRC(1155f01f) SHA1(60f7bed1461b362a3da687503cd72ed2d5e96f30) ) @@ -1070,7 +1054,7 @@ ROM_END // Dodonpachi Daioujou Tamashii #define DDPDOJT_VIDEO_SOUND_ROMS \ - ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF ) \ + ROM_REGION( 0x200000, "tiles", ROMREGION_ERASE00 ) \ ROM_LOAD( "ddpdoj_text.u1", 0x00000000, 0x0200000, CRC(f18141d1) SHA1(a16e0a76bc926a158bb92dfd35aca749c569ef50) ) \ \ ROM_REGION( 0x2000000, "bgtile", 0 ) \ @@ -1093,9 +1077,9 @@ ROM_END ROM_START( ddpdojt ) ROM_REGION( 0x04000, "maincpu", 0 ) - ROM_LOAD( "ddpdoj_igs036_china.rom", 0x00000000, 0x0004000, CRC(5db91464) SHA1(723d8086285805bd815e62120dfa9a4269bcd932) ) + ROM_LOAD( "ddpdoj_igs036_china.rom", 0x00000000, 0x0004000, CRC(5db91464) SHA1(723d8086285805bd815e62120dfa9a4269bcd932) ) // Core V100 China - ROM_REGION( 0x0200000, "user1", 0 ) + ROM_REGION( 0x0200000, "mainrom", 0 ) ROM_LOAD( "ddpdoj_v201cn.u4", 0x00000000, 0x0200000, CRC(89e4b760) SHA1(9fad1309da31d12a413731b416a8bbfdb304ed9e) ) // V201 10-03-27 17:45:12 DDPDOJT_VIDEO_SOUND_ROMS @@ -1111,7 +1095,7 @@ ROM_END */ #define KOV3_VIDEO_SOUND_ROMS \ - ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF ) \ + ROM_REGION( 0x200000, "tiles", ROMREGION_ERASE00 ) \ ROM_LOAD( "kov3_text.u1", 0x00000000, 0x0200000, CRC(198b52d6) SHA1(e4502abe7ba01053d16c02114f0c88a3f52f6f40) ) \ \ ROM_REGION( 0x2000000, "bgtile", 0 ) \ @@ -1134,7 +1118,7 @@ ROM_END #define KOV3_INTERNAL_CHINA \ ROM_REGION( 0x04000, "maincpu", 0 ) \ - ROM_LOAD( "kov3_igs036_china.rom", 0x00000000, 0x0004000, CRC(c7d33764) SHA1(5cd48f876e637d60391d39ac6e40bf243300cc75) ) \ + ROM_LOAD( "kov3_igs036_china.rom", 0x00000000, 0x0004000, CRC(c7d33764) SHA1(5cd48f876e637d60391d39ac6e40bf243300cc75) ) /* Core V100 China */ \ ROM_REGION( 0x108, "default_card", 0 ) \ ROM_LOAD( "blank_kov3_china_card.pg2", 0x000, 0x108, CRC(bd5a968f) SHA1(b9045eb70e02afda7810431c592208053d863980) ) @@ -1142,7 +1126,7 @@ ROM_END ROM_START( kov3 ) KOV3_INTERNAL_CHINA - ROM_REGION( 0x1000000, "user1", 0 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "kov3_v104cn_raw.bin", 0x00000000, 0x0800000, CRC(1b5cbd24) SHA1(6471d4842a08f404420dea2bd1c8b88798c80fd5) ) // V104 11-12-09 14:29:14 KOV3_VIDEO_SOUND_ROMS @@ -1151,7 +1135,7 @@ ROM_END ROM_START( kov3_102 ) KOV3_INTERNAL_CHINA - ROM_REGION( 0x1000000, "user1", 0 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "kov3_v102cn_raw.bin", 0x00000000, 0x0800000, CRC(61d0dabd) SHA1(959b22ef4e342ca39c2386549ac7274f9d580ab8) ) // V102 11-11-01 18:56:07 KOV3_VIDEO_SOUND_ROMS @@ -1160,7 +1144,7 @@ ROM_END ROM_START( kov3_101 ) KOV3_INTERNAL_CHINA - ROM_REGION( 0x1000000, "user1", 0 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "kov3_v101.bin", 0x00000000, 0x0800000, BAD_DUMP CRC(d6664449) SHA1(64d912425f018c3531951019b33e909657724547) ) // V101 11-10-03 14:37:29; dump was not raw, manually xored with fake value KOV3_VIDEO_SOUND_ROMS @@ -1169,7 +1153,7 @@ ROM_END ROM_START( kov3_100 ) KOV3_INTERNAL_CHINA - ROM_REGION( 0x1000000, "user1", 0 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "kov3_v100cn_raw.bin", 0x00000000, 0x0800000, CRC(93bca924) SHA1(ecaf2c4676eb3d9f5e4fdbd9388be41e51afa0e4) ) // V100 11-09-14 15:13:14 KOV3_VIDEO_SOUND_ROMS @@ -1186,7 +1170,7 @@ all others: SPANSION S99-50070 */ #define KOF98UMH_VIDEO_SOUND_ROMS \ - ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF ) \ + ROM_REGION( 0x200000, "tiles", ROMREGION_ERASE00 ) \ ROM_LOAD( "ig-d3_text.u1", 0x00000000, 0x0200000, CRC(9a0ea82e) SHA1(7844fd7e46c3fbb2164060f160da528254fd177e) ) \ \ ROM_REGION( 0x2000000, "bgtile", ROMREGION_ERASE00 ) \ @@ -1214,21 +1198,21 @@ all others: SPANSION S99-50070 ROM_START( kof98umh ) ROM_REGION( 0x04000, "maincpu", 0 ) - ROM_LOAD( "kof98umh_internal_rom.bin", 0x00000000, 0x0004000, CRC(3ed2e50f) SHA1(35310045d375d9dda36c325e35257123a7b5b8c7) ) + ROM_LOAD( "kof98umh_internal_rom.bin", 0x00000000, 0x0004000, CRC(3ed2e50f) SHA1(35310045d375d9dda36c325e35257123a7b5b8c7) ) // Core V100 China - ROM_REGION( 0x1000000, "user1", 0 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "kof98umh_v100cn.u4", 0x00000000, 0x1000000, CRC(2ea91e3b) SHA1(5a586bb99cc4f1b02e0db462d5aff721512e0640) ) // V100 09-08-23 17:52:03 KOF98UMH_VIDEO_SOUND_ROMS ROM_END -static void iga_u16_decode(uint16_t *rom, int len, int ixor) +static void iga_u16_decode(u16 *rom, int len, int ixor) { int i; for (i = 1; i < len / 2; i+=2) { - uint16_t x = ixor; + u16 x = ixor; if ( (i>>1) & 0x000001) x ^= 0x0010; if ( (i>>1) & 0x000002) x ^= 0x2004; @@ -1247,13 +1231,13 @@ static void iga_u16_decode(uint16_t *rom, int len, int ixor) } } -static void iga_u12_decode(uint16_t* rom, int len, int ixor) +static void iga_u12_decode(u16* rom, int len, int ixor) { int i; for (i = 0; i < len / 2; i+=2) { - uint16_t x = ixor; + u16 x = ixor; if ( (i>>1) & 0x000001) x ^= 0x9004; if ( (i>>1) & 0x000002) x ^= 0x0028; @@ -1272,7 +1256,7 @@ static void iga_u12_decode(uint16_t* rom, int len, int ixor) } } -static void sprite_colour_decode(uint16_t* rom, int len) +static void sprite_colour_decode(u16* rom, int len) { int i; @@ -1289,7 +1273,7 @@ static void sprite_colour_decode(uint16_t* rom, int len) READ32_MEMBER(pgm2_state::orleg2_speedup_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if ((pc == 0x1002faec) || (pc == 0x1002f9b8)) { if ((m_mainram[0x20114 / 4] == 0x00) && (m_mainram[0x20118 / 4] == 0x00)) @@ -1297,7 +1281,7 @@ READ32_MEMBER(pgm2_state::orleg2_speedup_r) } /*else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); }*/ return m_mainram[0x20114 / 4]; @@ -1305,7 +1289,7 @@ READ32_MEMBER(pgm2_state::orleg2_speedup_r) READ32_MEMBER(pgm2_state::kov2nl_speedup_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if ((pc == 0x10053a94) || (pc == 0x1005332c) || (pc == 0x1005327c)) { @@ -1315,7 +1299,7 @@ READ32_MEMBER(pgm2_state::kov2nl_speedup_r) /* else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); } */ @@ -1324,7 +1308,7 @@ READ32_MEMBER(pgm2_state::kov2nl_speedup_r) READ32_MEMBER(pgm2_state::kof98umh_speedup_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if (pc == 0x100028f6) { @@ -1334,7 +1318,7 @@ READ32_MEMBER(pgm2_state::kof98umh_speedup_r) /* else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); } */ @@ -1343,7 +1327,7 @@ READ32_MEMBER(pgm2_state::kof98umh_speedup_r) READ32_MEMBER(pgm2_state::kov3_speedup_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if ((pc == 0x1000729a) || (pc == 0x1000729e)) { @@ -1353,7 +1337,7 @@ READ32_MEMBER(pgm2_state::kov3_speedup_r) /* else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); } */ @@ -1365,7 +1349,7 @@ READ32_MEMBER(pgm2_state::kov3_speedup_r) READ32_MEMBER(pgm2_state::ddpdojt_speedup_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if (pc == 0x10001a7e) { @@ -1375,7 +1359,7 @@ READ32_MEMBER(pgm2_state::ddpdojt_speedup_r) /* else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); } */ @@ -1384,7 +1368,7 @@ READ32_MEMBER(pgm2_state::ddpdojt_speedup_r) READ32_MEMBER(pgm2_state::ddpdojt_speedup2_r) { - int pc = m_maincpu->pc(); + u32 const pc = m_maincpu->pc(); if (pc == 0x1008fefe || pc == 0x1008fbe8) { @@ -1394,7 +1378,7 @@ READ32_MEMBER(pgm2_state::ddpdojt_speedup2_r) /* else { - printf("pc is %08x\n", pc); + logerror("pc is %08x\n", pc); } */ @@ -1406,19 +1390,19 @@ READ32_MEMBER(pgm2_state::ddpdojt_speedup2_r) void pgm2_state::common_encryption_init() { // store off a copy of the encrypted rom so we can restore it later when needed - m_encrypted_copy.resize(memregion("user1")->bytes()); - memcpy(&m_encrypted_copy[0], memregion("user1")->base(), memregion("user1")->bytes()); + m_encrypted_copy.resize(m_mainrom->bytes()); + memcpy(&m_encrypted_copy[0], m_mainrom->base(), m_mainrom->bytes()); - uint16_t *src = (uint16_t *)memregion("sprites_mask")->base(); + u16 *src = (u16 *)memregion("sprites_mask")->base(); iga_u12_decode(src, memregion("sprites_mask")->bytes(), 0x0000); iga_u16_decode(src, memregion("sprites_mask")->bytes(), 0x0000); - m_sprite_predecrypted = 0; + m_sprite_predecrypted = false; - src = (uint16_t *)memregion("sprites_colour")->base(); + src = (u16 *)memregion("sprites_colour")->base(); sprite_colour_decode(src, memregion("sprites_colour")->bytes()); - m_has_decrypted = 0; + m_has_decrypted = false; } void pgm2_state::init_orleg2() @@ -1452,19 +1436,19 @@ void pgm2_state::init_kov3() m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000b4, 0x200000b7, read32_delegate(FUNC(pgm2_state::kov3_speedup_r),this)); } -void pgm2_state::decrypt_kov3_module(uint32_t addrxor, uint16_t dataxor) +void pgm2_state::decrypt_kov3_module(u32 addrxor, u16 dataxor) { - uint16_t *src = (uint16_t *)memregion("user1")->base(); - uint32_t size = memregion("user1")->bytes(); + u16 *src = (u16 *)m_mainrom->base(); + u32 size = m_mainrom->bytes(); - std::vector<uint16_t> buffer(size/2); + std::vector<u16> buffer(size/2); for (int i = 0; i < size/2; i++) buffer[i] = src[i^addrxor]^dataxor; memcpy(src, &buffer[0], size); - m_has_decrypted_kov3_module = 1; + m_has_decrypted_kov3_module = true; } void pgm2_state::init_kov3_104() diff --git a/src/mame/drivers/phunsy.cpp b/src/mame/drivers/phunsy.cpp index 3a83660c4f9..4de1d9e683e 100644 --- a/src/mame/drivers/phunsy.cpp +++ b/src/mame/drivers/phunsy.cpp @@ -372,8 +372,8 @@ MACHINE_CONFIG_START(phunsy_state::phunsy) SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(phunsy_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(phunsy_state::kbd_put)); MCFG_CASSETTE_ADD( "cassette" ) /* quickload */ diff --git a/src/mame/drivers/pocketc.cpp b/src/mame/drivers/pocketc.cpp index 060a5165af6..634a3ff7d4b 100644 --- a/src/mame/drivers/pocketc.cpp +++ b/src/mame/drivers/pocketc.cpp @@ -1,9 +1,9 @@ // license:GPL-2.0+ // copyright-holders:Peter Trauner /****************************************************************************** - sharp pocket computers - pc1401/pc1403 - PeT mess@utanet.at May 2000 + Sharp pocket computers + PC1401/PC1403 + PeT mess@utanet.at May 2000 ******************************************************************************/ #include "emu.h" @@ -13,17 +13,13 @@ #include "includes/pc1350.h" #include "includes/pc1403.h" -#include "cpu/sc61860/sc61860.h" #include "machine/ram.h" -#include "screen.h" +/* PC1430 lacks peek/poke operations */ +/* PC1280?? */ -/* pc1430 no peek poke operations! */ - -/* pc1280?? */ - -/* pc126x +/* PC126x port 1 ? 2 +6v @@ -37,7 +33,7 @@ 10 ib5 11 ib4 */ -/* pc1350 other keyboard, +/* PC1350 other keyboard, f2 instead f0 at port port 1 ? @@ -53,20 +49,20 @@ 11 ib4 */ -/* similar computers - pc1260/1261 - pc1402/1403 - pc1421 */ -/* pc140x +/* Similar Computers: + - PC1260/1261 + - PC1402/1403 + - PC1421 */ +/* PC140x a,b0..b5 keyboard matrix b0 off key c0 display on c1 counter reset c2 cpu halt c3 computer off - c4 beeper frequency (1 4kHz, 0 2kHz), or (c5=0) membran pos1/pos2 + c4 beeper frequency (1 4kHz, 0 2kHz), or (c5=0) membrane pos1/pos2 c5 beeper on - c6 beeper steuerung + c6 beeper control port 1 ? @@ -82,14 +78,13 @@ 11 ? */ -/* special keys - red c-ce and reset; warm boot, program NOT lost*/ +/* Special Leys Red C-CE and Reset; warm boot, program NOT lost */ void pc1401_state::pc1401_mem(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x3800, 0x47ff).ram(); - map(0x6000, 0x67ff).rw(FUNC(pc1401_state::pc1401_lcd_read), FUNC(pc1401_state::pc1401_lcd_write)).mirror(0x1000); + map(0x6000, 0x67ff).rw(FUNC(pc1401_state::lcd_read), FUNC(pc1401_state::lcd_write)).mirror(0x1000); map(0x8000, 0xffff).rom(); } @@ -97,7 +92,7 @@ void pc1401_state::pc1402_mem(address_map &map) { map(0x0000, 0x1fff).rom(); map(0x2000, 0x47ff).ram(); - map(0x6000, 0x67ff).rw(FUNC(pc1401_state::pc1401_lcd_read), FUNC(pc1401_state::pc1401_lcd_write)).mirror(0x1000); + map(0x6000, 0x67ff).rw(FUNC(pc1401_state::lcd_read), FUNC(pc1401_state::lcd_write)).mirror(0x1000); map(0x8000, 0xffff).rom(); } @@ -106,7 +101,7 @@ void pc1251_state::pc1250_mem(address_map &map) map(0x0000, 0x1fff).rom(); map(0x4000, 0x7fff).rom(); map(0xc000, 0xc7ff).ram(); // 2KB RAM - map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::pc1251_lcd_read), FUNC(pc1251_state::pc1251_lcd_write)); + map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::lcd_read), FUNC(pc1251_state::lcd_write)); } void pc1251_state::pc1251_mem(address_map &map) @@ -114,7 +109,7 @@ void pc1251_state::pc1251_mem(address_map &map) map(0x0000, 0x1fff).rom(); map(0x4000, 0x7fff).rom(); map(0xb800, 0xc7ff).ram(); // 4KB RAM - map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::pc1251_lcd_read), FUNC(pc1251_state::pc1251_lcd_write)); + map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::lcd_read), FUNC(pc1251_state::lcd_write)); } void pc1251_state::pc1255_mem(address_map &map) @@ -122,14 +117,13 @@ void pc1251_state::pc1255_mem(address_map &map) map(0x0000, 0x1fff).rom(); map(0x4000, 0x7fff).rom(); map(0xa000, 0xc7ff).ram(); // 10KB RAM - map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::pc1251_lcd_read), FUNC(pc1251_state::pc1251_lcd_write)); + map(0xf800, 0xf8ff).rw(FUNC(pc1251_state::lcd_read), FUNC(pc1251_state::lcd_write)); } void pc1251_state::pc1260_mem(address_map &map) { map(0x0000, 0x1fff).rom(); - map(0x2000, 0x20ff).rw(FUNC(pc1251_state::pc1251_lcd_read), FUNC(pc1251_state::pc1251_lcd_write)); - //map( 0x2800, 0x28ff) AM_READWRITE(pc1251_lcd_read, pc1251_lcd_write) + map(0x2000, 0x20ff).rw(FUNC(pc1251_state::lcd_read), FUNC(pc1251_state::lcd_write)); map(0x5800, 0x67ff).ram(); // 4KB RAM map(0x8000, 0xffff).rom(); } @@ -137,25 +131,23 @@ void pc1251_state::pc1260_mem(address_map &map) void pc1251_state::pc1261_mem(address_map &map) { map(0x0000, 0x1fff).rom(); - map(0x2000, 0x20ff).rw(FUNC(pc1251_state::pc1251_lcd_read), FUNC(pc1251_state::pc1251_lcd_write)); - //map( 0x2800, 0x28ff) AM_READWRITE(pc1251_lcd_read, pc1251_lcd_write) + map(0x2000, 0x20ff).rw(FUNC(pc1251_state::lcd_read), FUNC(pc1251_state::lcd_write)); map(0x4000, 0x67ff).ram(); // 10KB RAM map(0x8000, 0xffff).rom(); } - void pc1350_state::pc1350_mem(address_map &map) { map(0x0000, 0x1fff).rom(); - map(0x7000, 0x7eff).rw(FUNC(pc1350_state::pc1350_lcd_read), FUNC(pc1350_state::pc1350_lcd_write)); + map(0x7000, 0x7eff).rw(FUNC(pc1350_state::lcd_read), FUNC(pc1350_state::lcd_write)); map(0x8000, 0xffff).rom(); } void pc1403_state::pc1403_mem(address_map &map) { map(0x0000, 0x1fff).rom(); - map(0x3000, 0x30bf).rw(FUNC(pc1403_state::pc1403_lcd_read), FUNC(pc1403_state::pc1403_lcd_write)); - map(0x3800, 0x3fff).rw(FUNC(pc1403_state::pc1403_asic_read), FUNC(pc1403_state::pc1403_asic_write)); + map(0x3000, 0x30bf).rw(FUNC(pc1403_state::lcd_read), FUNC(pc1403_state::lcd_write)); + map(0x3800, 0x3fff).rw(FUNC(pc1403_state::asic_read), FUNC(pc1403_state::asic_write)); map(0x4000, 0x7fff).bankr("bank1"); map(0xe000, 0xffff).ram(); } @@ -163,34 +155,33 @@ void pc1403_state::pc1403_mem(address_map &map) void pc1403_state::pc1403h_mem(address_map &map) { map(0x0000, 0x1fff).rom(); - map(0x3000, 0x30bf).rw(FUNC(pc1403_state::pc1403_lcd_read), FUNC(pc1403_state::pc1403_lcd_write)); - map(0x3800, 0x3fff).rw(FUNC(pc1403_state::pc1403_asic_read), FUNC(pc1403_state::pc1403_asic_write)); + map(0x3000, 0x30bf).rw(FUNC(pc1403_state::lcd_read), FUNC(pc1403_state::lcd_write)); + map(0x3800, 0x3fff).rw(FUNC(pc1403_state::asic_read), FUNC(pc1403_state::asic_write)); map(0x4000, 0x7fff).bankr("bank1"); map(0x8000, 0xffff).ram(); } - #if 0 void pc1403_state::pc1421_readmem(address_map &map) { - map( 0x0000, 0x1fff).rom(); - map( 0x3800, 0x47ff).ram(); - map( 0x8000, 0xffff).rom(); + map(0x0000, 0x1fff).rom(); + map(0x3800, 0x47ff).ram(); + map(0x8000, 0xffff).rom(); } void pc1403_state::pc1421_writemem(address_map &map) { - map( 0x0000, 0x1fff).rom(); - map( 0x2000, 0x37ff).ram(); - map( 0x3800, 0x47ff).ram(); - map( 0x8000, 0xffff).rom(); + map(0x0000, 0x1fff).rom(); + map(0x2000, 0x37ff).ram(); + map(0x3800, 0x47ff).ram(); + map(0x8000, 0xffff).rom(); } #endif /* 2008-05 FP: the following input ports are based on the way ports are read, but I would like to have confirmation from technical docs before considering these correct. - If they need to be changed, you must also update the clickable artwork. + If they need to be changed, you must also update the clickable artwork. */ static INPUT_PORTS_START( pc1401 ) @@ -724,161 +715,143 @@ static GFXDECODE_START( gfx_pc1251 ) GFXDECODE_ENTRY( "gfx1", 0x0000, pc1251_charlayout, 0, 8 ) GFXDECODE_END -MACHINE_CONFIG_START(pocketc_state::pocketc) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) +void pocketc_state::pocketc_base(machine_config &config) +{ + config.m_minimum_quantum = attotime::from_hz(60); NVRAM(config, "cpu_nvram", nvram_device::DEFAULT_ALL_0); NVRAM(config, "ram_nvram", nvram_device::DEFAULT_ALL_0); - /* - aim: show sharp with keyboard - resolution depends on the dots of the lcd - (lcd dot displayed as 2x3 pixel) - it seems to have 3/4 ratio in the real pc1401 */ - /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(20) /* very early and slow lcd */ - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(594, 273) - MCFG_SCREEN_VISIBLE_AREA(0, 594-1, 0, 273-1) -// MCFG_SCREEN_SIZE(640, 273) -// MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 273-1) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_pc1401) - MCFG_PALETTE_ADD("palette", 8*2) - MCFG_PALETTE_INDIRECT_ENTRIES(6) - MCFG_PALETTE_INIT_OWNER( pocketc_state, pocketc ) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1401_state::pc1401) - pocketc(config); - MCFG_DEVICE_ADD("maincpu", SC61860, 192000) /* 7.8336 MHz */ - MCFG_DEVICE_PROGRAM_MAP(pc1401_mem) - MCFG_SC61860_READ_RESET_HANDLER(READLINE(*this, pc1401_state,pc1401_reset)) - MCFG_SC61860_READ_BRK_HANDLER(READLINE(*this, pc1401_state,pc1401_brk)) - MCFG_SC61860_READ_X_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_A_HANDLER(READ8(*this, pc1401_state,pc1401_ina)) - MCFG_SC61860_WRITE_A_HANDLER(WRITE8(*this, pc1401_state,pc1401_outa)) - MCFG_SC61860_READ_B_HANDLER(READ8(*this, pc1401_state,pc1401_inb)) - MCFG_SC61860_WRITE_B_HANDLER(WRITE8(*this, pc1401_state,pc1401_outb)) - MCFG_SC61860_WRITE_C_HANDLER(WRITE8(*this, pc1401_state,pc1401_outc)) - - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(pc1401_state, screen_update_pc1401) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1401_state::pc1402) + // TODO: Convert to an SVG + SCREEN(config, m_screen, SCREEN_TYPE_LCD); + m_screen->set_refresh_hz(20); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + m_screen->set_size(594, 273); + m_screen->set_visarea(0, 594-1, 0, 273-1); + m_screen->set_palette(m_palette); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_pc1401); + PALETTE(config, m_palette, 8*2); + m_palette->set_indirect_entries(6); + m_palette->set_init(palette_init_delegate(FUNC(pocketc_state::palette_init_pocketc), this)); +} + +void pc1401_state::pc1401(machine_config &config) +{ + pocketc_base(config); + SC61860(config, m_maincpu, 192000); /* 7.8336 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &pc1401_state::pc1401_mem); + m_maincpu->reset_cb().set(FUNC(pc1401_state::reset_r)); + m_maincpu->brk_cb().set(FUNC(pc1401_state::brk_r)); + m_maincpu->x_cb().set_constant(0); + m_maincpu->in_a_cb().set(FUNC(pc1401_state::in_a_r)); + m_maincpu->out_a_cb().set(FUNC(pc1401_state::out_a_w)); + m_maincpu->in_b_cb().set(FUNC(pc1401_state::in_b_r)); + m_maincpu->out_b_cb().set(FUNC(pc1401_state::out_b_w)); + m_maincpu->out_c_cb().set(FUNC(pc1401_state::out_c_w)); + + m_screen->set_screen_update(FUNC(pc1401_state::screen_update)); +} + +void pc1401_state::pc1402(machine_config &config) +{ pc1401(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1402_mem) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1251_state::pc1250) - pocketc(config); - MCFG_DEVICE_ADD("maincpu", SC61860, 192000) /* 7.8336 MHz */ - MCFG_DEVICE_PROGRAM_MAP( pc1250_mem) - MCFG_SC61860_READ_RESET_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_BRK_HANDLER(READLINE(*this, pc1251_state,pc1251_brk)) - MCFG_SC61860_READ_X_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_A_HANDLER(READ8(*this, pc1251_state,pc1251_ina)) - MCFG_SC61860_WRITE_A_HANDLER(WRITE8(*this, pc1251_state,pc1251_outa)) - MCFG_SC61860_READ_B_HANDLER(READ8(*this, pc1251_state,pc1251_inb)) - MCFG_SC61860_WRITE_B_HANDLER(WRITE8(*this, pc1251_state,pc1251_outb)) - MCFG_SC61860_WRITE_C_HANDLER(WRITE8(*this, pc1251_state,pc1251_outc)) + m_maincpu->set_addrmap(AS_PROGRAM, &pc1401_state::pc1402_mem); +} + +void pc1251_state::pc1250(machine_config &config) +{ + pocketc_base(config); + SC61860(config, m_maincpu, 192000); /* 7.8336 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &pc1251_state::pc1250_mem); + m_maincpu->reset_cb().set_constant(0); + m_maincpu->brk_cb().set(FUNC(pc1251_state::brk_r)); + m_maincpu->x_cb().set_constant(0); + m_maincpu->in_a_cb().set(FUNC(pc1251_state::in_a_r)); + m_maincpu->out_a_cb().set(FUNC(pc1251_state::out_a_w)); + m_maincpu->in_b_cb().set(FUNC(pc1251_state::in_b_r)); + m_maincpu->out_b_cb().set(FUNC(pc1251_state::out_b_w)); + m_maincpu->out_c_cb().set(FUNC(pc1251_state::out_c_w)); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(608, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 608-1, 0, 300-1) - MCFG_SCREEN_UPDATE_DRIVER(pc1251_state, screen_update_pc1251) - MCFG_GFXDECODE_MODIFY("gfxdecode", gfx_pc1251) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1251_state::pc1251) - pc1250(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1251_mem) -MACHINE_CONFIG_END + m_screen->set_size(608, 300); + m_screen->set_visarea(0, 608-1, 0, 300-1); + m_screen->set_screen_update(FUNC(pc1251_state::screen_update)); + m_gfxdecode->set_info(gfx_pc1251); +} -MACHINE_CONFIG_START(pc1251_state::pc1255) +void pc1251_state::pc1251(machine_config &config) +{ pc1250(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1255_mem) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &pc1251_state::pc1251_mem); +} -MACHINE_CONFIG_START(pc1251_state::pc1260) +void pc1251_state::pc1255(machine_config &config) +{ pc1250(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1260_mem) + m_maincpu->set_addrmap(AS_PROGRAM, &pc1251_state::pc1255_mem); +} - MCFG_MACHINE_START_OVERRIDE(pc1251_state, pc1260 ) -MACHINE_CONFIG_END +void pc1260_state::pc1260(machine_config &config) +{ + pc1250(config); + m_maincpu->set_addrmap(AS_PROGRAM, &pc1260_state::pc1260_mem); +} -MACHINE_CONFIG_START(pc1251_state::pc1261) +void pc1260_state::pc1261(machine_config &config) +{ pc1260(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1261_mem) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1350_state::pc1350) - pocketc(config); - MCFG_DEVICE_ADD("maincpu", SC61860, 192000) /* 7.8336 MHz */ - MCFG_DEVICE_PROGRAM_MAP( pc1350_mem) - MCFG_SC61860_READ_RESET_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_BRK_HANDLER(READLINE(*this, pc1350_state,pc1350_brk)) - MCFG_SC61860_READ_X_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_A_HANDLER(READ8(*this, pc1350_state,pc1350_ina)) - MCFG_SC61860_WRITE_A_HANDLER(WRITE8(*this, pc1350_state,pc1350_outa)) - MCFG_SC61860_READ_B_HANDLER(READ8(*this, pc1350_state,pc1350_inb)) - MCFG_SC61860_WRITE_B_HANDLER(WRITE8(*this, pc1350_state,pc1350_outb)) - MCFG_SC61860_WRITE_C_HANDLER(WRITE8(*this, pc1350_state,pc1350_outc)) - - /* - aim: show sharp with keyboard - resolution depends on the dots of the lcd - (lcd dot displayed as 2x2 pixel) */ + m_maincpu->set_addrmap(AS_PROGRAM, &pc1260_state::pc1261_mem); +} + +void pc1350_state::pc1350(machine_config &config) +{ + pocketc_base(config); + SC61860(config, m_maincpu, 192000); /* 7.8336 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &pc1350_state::pc1350_mem); + m_maincpu->reset_cb().set_constant(0); + m_maincpu->brk_cb().set(FUNC(pc1350_state::brk_r)); + m_maincpu->x_cb().set_constant(0); + m_maincpu->in_a_cb().set(FUNC(pc1350_state::in_a_r)); + m_maincpu->out_a_cb().set(FUNC(pc1350_state::out_a_w)); + m_maincpu->in_b_cb().set(FUNC(pc1350_state::in_b_r)); + m_maincpu->out_b_cb().set(FUNC(pc1350_state::out_b_w)); + m_maincpu->out_c_cb().set(FUNC(pc1350_state::out_c_w)); + /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(640, 252) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 252-1) - MCFG_SCREEN_UPDATE_DRIVER(pc1350_state, screen_update_pc1350) + m_screen->set_size(640, 252); + m_screen->set_visarea(0, 640-1, 0, 252-1); + m_screen->set_screen_update(FUNC(pc1350_state::screen_update)); /* internal ram */ - RAM(config, RAM_TAG).set_default_size("4K").set_extra_options("12K,20K"); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1403_state::pc1403) - pocketc(config); - MCFG_DEVICE_ADD( "maincpu", SC61860, 256000 ) - MCFG_DEVICE_PROGRAM_MAP( pc1403_mem) - MCFG_SC61860_READ_RESET_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_BRK_HANDLER(READLINE(*this, pc1403_state,pc1403_brk)) - MCFG_SC61860_READ_X_HANDLER(CONSTANT(0)) - MCFG_SC61860_READ_A_HANDLER(READ8(*this, pc1403_state,pc1403_ina)) - MCFG_SC61860_WRITE_A_HANDLER(WRITE8(*this, pc1403_state,pc1403_outa)) - MCFG_SC61860_READ_B_HANDLER(CONSTANT(0)) - MCFG_SC61860_WRITE_B_HANDLER(NOOP) - MCFG_SC61860_WRITE_C_HANDLER(WRITE8(*this, pc1403_state,pc1403_outc)) - - /* - aim: show sharp with keyboard - resolution depends on the dots of the lcd - (lcd dot displayed as 2x2 pixel) */ + RAM(config, m_ram).set_default_size("4K").set_extra_options("12K,20K"); +} + +void pc1403_state::pc1403(machine_config &config) +{ + pocketc_base(config); + SC61860(config, m_maincpu, 256000); + m_maincpu->set_addrmap(AS_PROGRAM, &pc1403_state::pc1403_mem); + m_maincpu->reset_cb().set_constant(0); + m_maincpu->brk_cb().set(FUNC(pc1403_state::brk_r)); + m_maincpu->x_cb().set_constant(0); + m_maincpu->in_a_cb().set(FUNC(pc1403_state::in_a_r)); + m_maincpu->out_a_cb().set(FUNC(pc1403_state::out_a_w)); + m_maincpu->in_b_cb().set_constant(0); + m_maincpu->out_b_cb().set_nop(); + m_maincpu->out_c_cb().set(FUNC(pc1403_state::out_c_w)); + /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(848, 320) - MCFG_SCREEN_VISIBLE_AREA(0, 848-1, 0, 320-1) -// MCFG_SCREEN_SIZE(848, 361) -// MCFG_SCREEN_VISIBLE_AREA(0, 848-1, 0, 361-1) - MCFG_SCREEN_UPDATE_DRIVER(pc1403_state, screen_update_pc1403) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(pc1403_state::pc1403h) + m_screen->set_size(848, 320); + m_screen->set_visarea(0, 848-1, 0, 320-1); + m_screen->set_screen_update(FUNC(pc1403_state::screen_update)); +} + +void pc1403_state::pc1403h(machine_config &config) +{ pc1403(config); - MCFG_DEVICE_MODIFY( "maincpu" ) - MCFG_DEVICE_PROGRAM_MAP( pc1403h_mem) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &pc1403_state::pc1403h_mem); +} ROM_START(pc1401) @@ -986,23 +959,23 @@ ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS // cpu sc61860 -COMP( 1982, pc1245, 0, 0, pc1250, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1245", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -COMP( 1982, pc1250, 0, 0, pc1250, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1250", MACHINE_NO_SOUND) -COMP( 1982, pc1251, pc1250, 0, pc1251, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1251", MACHINE_NO_SOUND) -COMP( 1982, pc1255, pc1250, 0, pc1255, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1255", MACHINE_NO_SOUND) -COMP( 1983, trs80pc3, pc1250, 0, pc1251, pc1251, pc1251_state, init_pc1251, "Tandy Radio Shack", "TRS-80 Pocket Computer PC-3", MACHINE_NO_SOUND) +COMP( 1982, pc1245, 0, 0, pc1250, pc1251, pc1251_state, empty_init, "Sharp", "Pocket Computer 1245", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1982, pc1250, 0, 0, pc1250, pc1251, pc1251_state, empty_init, "Sharp", "Pocket Computer 1250", MACHINE_NO_SOUND) +COMP( 1982, pc1251, pc1250, 0, pc1251, pc1251, pc1251_state, empty_init, "Sharp", "Pocket Computer 1251", MACHINE_NO_SOUND) +COMP( 1982, pc1255, pc1250, 0, pc1255, pc1251, pc1251_state, empty_init, "Sharp", "Pocket Computer 1255", MACHINE_NO_SOUND) +COMP( 1983, trs80pc3, pc1250, 0, pc1251, pc1251, pc1251_state, empty_init, "Tandy Radio Shack", "TRS-80 Pocket Computer PC-3", MACHINE_NO_SOUND) -COMP( 1982, pc1260, 0, 0, pc1260, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1260", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -COMP( 1982, pc1261, pc1260, 0, pc1261, pc1251, pc1251_state, init_pc1251, "Sharp", "Pocket Computer 1261/1262", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1982, pc1260, 0, 0, pc1260, pc1251, pc1260_state, empty_init, "Sharp", "Pocket Computer 1260", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1982, pc1261, pc1260, 0, pc1261, pc1251, pc1260_state, empty_init, "Sharp", "Pocket Computer 1261/1262", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) // pc1261/pc1262 -COMP( 1984, pc1350, 0, 0, pc1350, pc1350, pc1350_state, empty_init, "Sharp", "Pocket Computer 1350", MACHINE_NO_SOUND ) -COMP( 198?, pc1450, 0, 0, pc1350, pc1350, pc1350_state, empty_init, "Sharp", "Pocket Computer 1450", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1984, pc1350, 0, 0, pc1350, pc1350, pc1350_state, empty_init, "Sharp", "Pocket Computer 1350", MACHINE_NO_SOUND ) +COMP( 198?, pc1450, 0, 0, pc1350, pc1350, pc1350_state, empty_init, "Sharp", "Pocket Computer 1450", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -COMP( 1983, pc1401, 0, 0, pc1401, pc1401, pc1401_state, init_pc1401, "Sharp", "Pocket Computer 1401", MACHINE_NO_SOUND) -COMP( 1984, pc1402, pc1401, 0, pc1402, pc1401, pc1401_state, init_pc1401, "Sharp", "Pocket Computer 1402", MACHINE_NO_SOUND) -COMP( 198?, pc1360, pc1401, 0, pc1401, pc1401, pc1401_state, init_pc1401, "Sharp", "Pocket Computer 1360", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1983, pc1401, 0, 0, pc1401, pc1401, pc1401_state, empty_init, "Sharp", "Pocket Computer 1401", MACHINE_NO_SOUND) +COMP( 1984, pc1402, pc1401, 0, pc1402, pc1401, pc1401_state, empty_init, "Sharp", "Pocket Computer 1402", MACHINE_NO_SOUND) +COMP( 198?, pc1360, pc1401, 0, pc1401, pc1401, pc1401_state, empty_init, "Sharp", "Pocket Computer 1360", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 72kb rom, 32kb ram, cpu? pc1360 -COMP( 1986, pc1403, 0, 0, pc1403, pc1403, pc1403_state, init_pc1403, "Sharp", "Pocket Computer 1403", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) -COMP( 198?, pc1403h, pc1403, 0, pc1403h, pc1403, pc1403_state, init_pc1403, "Sharp", "Pocket Computer 1403H", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1986, pc1403, 0, 0, pc1403, pc1403, pc1403_state, empty_init, "Sharp", "Pocket Computer 1403", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 198?, pc1403h, pc1403, 0, pc1403h, pc1403, pc1403_state, empty_init, "Sharp", "Pocket Computer 1403H", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/poly.cpp b/src/mame/drivers/poly.cpp index e3d7fc38168..9853ee4f05c 100644 --- a/src/mame/drivers/poly.cpp +++ b/src/mame/drivers/poly.cpp @@ -315,8 +315,8 @@ MACHINE_CONFIG_START(poly_state::poly) //m_kr2376->strobe().set("pia1", FUNC(pia6821_device::cb1_w)); /* generic keyboard until ROM in KR2376-12 is known */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(poly_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(poly_state::kbd_put)); /* video control */ PIA6821(config, m_pia[0], 0); diff --git a/src/mame/drivers/powerbal.cpp b/src/mame/drivers/powerbal.cpp index 6af4771b3a0..27eae823577 100644 --- a/src/mame/drivers/powerbal.cpp +++ b/src/mame/drivers/powerbal.cpp @@ -551,7 +551,7 @@ void powerbal_state::draw_sprites_powerbal(bitmap_ind16 &bitmap, const rectangle code, color, flipx,0, - sx + m_xoffset,sy + m_yoffset,0); + sx + m_xoffset,sy + m_yoffset,m_sprtranspen); } } @@ -570,6 +570,7 @@ VIDEO_START_MEMBER(powerbal_state,atombjt) m_xoffset = 32; m_yoffset = 8; + m_sprtranspen = 0xf; m_bg_tilemap->set_scrollx(0, -64); } diff --git a/src/mame/drivers/prof180x.cpp b/src/mame/drivers/prof180x.cpp index a6ecb6ab273..5c50a37cf6c 100644 --- a/src/mame/drivers/prof180x.cpp +++ b/src/mame/drivers/prof180x.cpp @@ -253,7 +253,7 @@ MACHINE_CONFIG_START(prof180x_state::prof180x) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) /* devices */ - UPD765A(config, FDC9268_TAG, false, true); + UPD765A(config, FDC9268_TAG, 8'000'000, false, true); MCFG_FLOPPY_DRIVE_ADD(FDC9268_TAG ":0", prof180x_floppies, "35dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(FDC9268_TAG ":1", prof180x_floppies, "35dd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(FDC9268_TAG ":2", prof180x_floppies, "35dd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp index 11a596e0774..32c63660a2f 100644 --- a/src/mame/drivers/prof80.cpp +++ b/src/mame/drivers/prof80.cpp @@ -457,13 +457,14 @@ MACHINE_CONFIG_START(prof80_state::prof80) MCFG_DEVICE_IO_MAP(prof80_io) // MMU - MCFG_PROF80_MMU_ADD(m_mmu, prof80_mmu) + PROF80_MMU(config, m_mmu, 0); + m_mmu->set_addrmap(AS_PROGRAM, &prof80_state::prof80_mmu); // RTC UPD1990A(config, m_rtc); // FDC - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/proteus3.cpp b/src/mame/drivers/proteus3.cpp index 1a37cbaf089..39332f15078 100644 --- a/src/mame/drivers/proteus3.cpp +++ b/src/mame/drivers/proteus3.cpp @@ -402,8 +402,8 @@ MACHINE_CONFIG_START(proteus3_state::proteus3) m_pia->ca2_handler().set(FUNC(proteus3_state::ca2_w)); m_pia->irqb_handler().set_inputline("maincpu", M6800_IRQ_LINE); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(proteus3_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(proteus3_state::kbd_put)); /* cassette */ ACIA6850(config, m_acia1, 0); diff --git a/src/mame/drivers/ptcsol.cpp b/src/mame/drivers/ptcsol.cpp index cc151ef77e9..c6cd8ac2f5d 100644 --- a/src/mame/drivers/ptcsol.cpp +++ b/src/mame/drivers/ptcsol.cpp @@ -783,8 +783,8 @@ MACHINE_CONFIG_START(sol20_state::sol20) m_uart_s->set_rx_clock(4800.0); m_uart_s->set_auto_rdav(true); // ROD (pin 4) tied to RDD (pin 18) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(sol20_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(sol20_state::kbd_put)); MCFG_SOFTWARE_LIST_ADD("cass_list", "sol20_cass") MACHINE_CONFIG_END diff --git a/src/mame/drivers/pwrview.cpp b/src/mame/drivers/pwrview.cpp index e2e12f97988..f9295d7d81c 100644 --- a/src/mame/drivers/pwrview.cpp +++ b/src/mame/drivers/pwrview.cpp @@ -420,7 +420,7 @@ MACHINE_CONFIG_START(pwrview_state::pwrview) m_pit->set_clk<2>(XTAL(16'000'000)/16); // floppy disk controller - UPD765A(config, "fdc", true, true); // Rockwell R7675P + UPD765A(config, "fdc", 8'000'000, true, true); // Rockwell R7675P //fdc.intrq_wr_callback().set("pic1", FUNC(pic8259_device::ir6_w)); //fdc.drq_wr_callback().set(m_maincpu, FUNC(i80186_cpu_device::drq1_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", pwrview_floppies, "525dd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/pyl601.cpp b/src/mame/drivers/pyl601.cpp index 861df9814d6..76440684d7c 100644 --- a/src/mame/drivers/pyl601.cpp +++ b/src/mame/drivers/pyl601.cpp @@ -571,7 +571,7 @@ MACHINE_CONFIG_START(pyl601_state::pyl601) crtc.set_char_width(8); /* ? */ crtc.set_update_row_callback(FUNC(pyl601_state::pyl601_update_row), this); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", pyl601_floppies, "525hd", pyl601_state::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", pyl601_floppies, "525hd", pyl601_state::floppy_formats) MCFG_SOFTWARE_LIST_ADD("flop_list","pyl601") diff --git a/src/mame/drivers/qx10.cpp b/src/mame/drivers/qx10.cpp index 3303cb96d19..0c508a51f42 100644 --- a/src/mame/drivers/qx10.cpp +++ b/src/mame/drivers/qx10.cpp @@ -809,7 +809,7 @@ MACHINE_CONFIG_START(qx10_state::qx10) MC146818(config, m_rtc, 32.768_kHz_XTAL); m_rtc->irq().set(m_pic_s, FUNC(pic8259_device::ir2_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8'000'000, true, true); m_fdc->intrq_wr_callback().set(FUNC(qx10_state::qx10_upd765_interrupt)); m_fdc->drq_wr_callback().set(m_dma_1, FUNC(am9517a_device::dreq0_w)).invert(); FLOPPY_CONNECTOR(config, m_floppy[0], qx10_floppies, "525dd", floppy_image_device::default_floppy_formats); diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp index ce65e70c338..4441483d0f0 100644 --- a/src/mame/drivers/ravens.cpp +++ b/src/mame/drivers/ravens.cpp @@ -369,8 +369,8 @@ MACHINE_CONFIG_START(ravens_state::ravens2) MCFG_MACHINE_RESET_OVERRIDE(ravens_state, ravens2) /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(ravens_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(ravens_state::kbd_put)); /* quickload */ MCFG_QUICKLOAD_ADD("quickload", ravens_state, ravens, "pgm", 1) diff --git a/src/mame/drivers/rc702.cpp b/src/mame/drivers/rc702.cpp index 3118eb79565..42f71a295eb 100644 --- a/src/mame/drivers/rc702.cpp +++ b/src/mame/drivers/rc702.cpp @@ -362,15 +362,15 @@ MACHINE_CONFIG_START(rc702_state::rc702) m_dma->out_iow_callback<3>().set("crtc", FUNC(i8275_device::dack_w)); m_dma->out_dack_callback<1>().set(FUNC(rc702_state::dack1_w)); - UPD765A(config, m_fdc, true, true); + UPD765A(config, m_fdc, 8_MHz_XTAL, true, true); m_fdc->intrq_wr_callback().set(m_ctc1, FUNC(z80ctc_device::trg3)); m_fdc->drq_wr_callback().set(m_dma, FUNC(am9517a_device::dreq1_w)); MCFG_FLOPPY_DRIVE_ADD("fdc:0", floppies, "525qd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_SOUND(true) /* Keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(rc702_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(rc702_state::kbd_put)); TTL7474(config, m_7474, 0); m_7474->output_cb().set(FUNC(rc702_state::q_w)); diff --git a/src/mame/drivers/rc759.cpp b/src/mame/drivers/rc759.cpp index 5a6b107d558..89921ab5608 100644 --- a/src/mame/drivers/rc759.cpp +++ b/src/mame/drivers/rc759.cpp @@ -568,8 +568,8 @@ MACHINE_CONFIG_START(rc759_state::rc759) MCFG_I82730_SINT_HANDLER(WRITELINE(m_pic, pic8259_device, ir4_w)) // keyboard - MCFG_DEVICE_ADD("keyb", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(rc759_state, keyb_put)) + generic_keyboard_device &keyb(GENERIC_KEYBOARD(config, "keyb", 0)); + keyb.set_keyboard_callback(FUNC(rc759_state::keyb_put)); // cassette MCFG_CASSETTE_ADD("cas") diff --git a/src/mame/drivers/rm380z.cpp b/src/mame/drivers/rm380z.cpp index 45df7b155b7..56373e7f788 100644 --- a/src/mame/drivers/rm380z.cpp +++ b/src/mame/drivers/rm380z.cpp @@ -269,8 +269,8 @@ MACHINE_CONFIG_START(rm380z_state::rm380z) MCFG_FLOPPY_DRIVE_ADD("wd1771:1", rm380z_floppies, "sssd", floppy_image_device::default_floppy_formats) /* keyboard */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(rm380z_state, keyboard_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(rm380z_state::keyboard_put)); MACHINE_CONFIG_END MACHINE_CONFIG_START(rm380z_state::rm480z) @@ -292,8 +292,8 @@ MACHINE_CONFIG_START(rm380z_state::rm480z) // MCFG_PALETTE_ADD_MONOCHROME("palette") /* keyboard */ -// MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) -// MCFG_GENERIC_KEYBOARD_CB(PUT(rm380z_state, keyboard_put)) +// generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); +// keyboard.set_keyboard_callback(FUNC(rm380z_state::keyboard_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp index 67c24312192..945eef904e7 100644 --- a/src/mame/drivers/royalmah.cpp +++ b/src/mame/drivers/royalmah.cpp @@ -120,7 +120,8 @@ public: m_videoram(*this, "videoram"), m_audiocpu(*this, "audiocpu"), m_rtc(*this, "rtc"), - m_soundlatch(*this, "soundlatch") + m_soundlatch(*this, "soundlatch"), + m_mainbank(*this, "mainbank") { } void mjdiplob(machine_config &config); @@ -153,6 +154,7 @@ public: void init_dynax(); void init_jansou(); void init_suzume(); + void init_jongshin(); void init_ippatsu(); void init_mjifb(); void init_tontonb(); @@ -175,6 +177,8 @@ private: DECLARE_READ8_MEMBER(suzume_dsw_r); DECLARE_WRITE8_MEMBER(suzume_bank_w); + DECLARE_WRITE8_MEMBER(jongshin_bank_w); + DECLARE_WRITE8_MEMBER(mjapinky_bank_w); DECLARE_WRITE8_MEMBER(mjapinky_palbank_w); DECLARE_READ8_MEMBER(mjapinky_dsw_r); @@ -294,6 +298,7 @@ private: optional_device<cpu_device> m_audiocpu; optional_device<msm6242_device> m_rtc; optional_device<generic_latch_8_device> m_soundlatch; + optional_memory_bank m_mainbank; // used by most games uint8_t m_input_port_select; @@ -505,7 +510,7 @@ READ8_MEMBER(royalmah_state::suzume_dsw_r) WRITE8_MEMBER(royalmah_state::tahjong_bank_w) { - membank("mainbank")->set_entry(data & 0x01); + m_mainbank->set_entry(data & 0x01); } @@ -517,15 +522,21 @@ WRITE8_MEMBER(royalmah_state::suzume_bank_w) /* bits 6, 4 and 3 used for something input related? */ - membank("mainbank")->set_entry(data & 0x07); + m_mainbank->set_entry(data & 0x07); } +WRITE8_MEMBER(royalmah_state::jongshin_bank_w) +{ + logerror("%04x: bank %02x\n",m_maincpu->pc(),data); + + m_mainbank->set_entry((data & 0x07) >> 1); +} WRITE8_MEMBER(royalmah_state::mjapinky_bank_w) { m_rombank = data; - membank("mainbank")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } WRITE8_MEMBER(royalmah_state::mjapinky_palbank_w) @@ -548,7 +559,7 @@ WRITE8_MEMBER(royalmah_state::tontonb_bank_w) if (data == 0) return; // tontonb fix? - membank("mainbank")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } @@ -559,7 +570,7 @@ WRITE8_MEMBER(royalmah_state::dynax_bank_w) m_dsw_select = data & 0x60; - membank("mainbank")->set_entry(data & 0x1f); + m_mainbank->set_entry(data & 0x1f); } READ8_MEMBER(royalmah_state::daisyari_dsw_r) @@ -585,7 +596,7 @@ WRITE8_MEMBER(royalmah_state::daisyari_bank_w) address = 0x10000 + ((data & 0x30)>>4) * 0x10000 + (data & 0x1) * 0x8000; // printf("%08x %02x\n",address,data); - membank("mainbank")->set_base(&rom[address]); + m_mainbank->set_base(&rom[address]); /* bit 1 used too but unknown purpose. */ } @@ -607,7 +618,7 @@ WRITE8_MEMBER(royalmah_state::mjclub_bank_w) { m_dsw_select = data & 0xc0; - membank("mainbank")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); /* bit 5 used too but unknown purpose. */ } @@ -617,7 +628,7 @@ void royalmah_state::royalmah_map(address_map &map) { map(0x0000, 0x6fff).rom().nopw(); map(0x7000, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).bankr("mainbank"); // banked ROMs not present in royalmah + map(0x8000, 0xffff).bankr(m_mainbank); // banked ROMs not present in royalmah map(0x8000, 0xffff).writeonly().share("videoram"); } @@ -626,7 +637,7 @@ void royalmah_state::mjapinky_map(address_map &map) map(0x0000, 0x6fff).rom().nopw(); map(0x7000, 0x77ff).ram().share("nvram"); map(0x7800, 0x7fff).ram(); - map(0x8000, 0xffff).bankr("mainbank"); + map(0x8000, 0xffff).bankr(m_mainbank); map(0x8000, 0xffff).writeonly().share("videoram"); map(0x8000, 0x8000).r(FUNC(royalmah_state::mjapinky_dsw_r)); } @@ -634,7 +645,7 @@ void royalmah_state::mjapinky_map(address_map &map) void royalmah_state::tahjong_map(address_map &map) { map(0x0000, 0x3fff).rom().nopw(); - map(0x4000, 0x6fff).bankr("mainbank"); + map(0x4000, 0x6fff).bankr(m_mainbank); map(0x7000, 0x7fff).ram().share("nvram"); map(0x8000, 0xffff).writeonly().share("videoram"); } @@ -717,10 +728,10 @@ void royalmah_state::jongshin_iomap(address_map &map) map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_state::royalmah_palbank_w)); map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); - // map(0x80, 0x80).w(FUNC(royalmah_state::suzume_bank_w)); + // map(0x80, 0x80).w(FUNC(royalmah_state::???)); // set to 1 at start-up, then never changed? map(0x81, 0x81).portr("DSW2"); map(0x82, 0x82).portr("DSW3"); - map(0xc0, 0xc0).w(FUNC(royalmah_state::suzume_bank_w)); // moving this to 0x80 make a girl in the attract appear but doesn't fix mahjong tiles + map(0xc0, 0xc0).w(FUNC(royalmah_state::jongshin_bank_w)); } void royalmah_state::mjyarou_iomap(address_map &map) @@ -984,7 +995,7 @@ void royalmah_state::janptr96_map(address_map &map) map(0x0000, 0x5fff).rom(); map(0x6000, 0x6fff).bankrw("bank3").share("nvram"); // nvram map(0x7000, 0x7fff).bankrw("rambank"); // banked nvram - map(0x8000, 0xffff).bankr("mainbank"); + map(0x8000, 0xffff).bankr(m_mainbank); map(0x8000, 0xffff).writeonly().share("videoram"); } @@ -1007,7 +1018,7 @@ READ8_MEMBER(royalmah_state::janptr96_dsw_r) WRITE8_MEMBER(royalmah_state::janptr96_rombank_w) { - membank("mainbank")->set_entry(data & 0x3f); + m_mainbank->set_entry(data & 0x3f); } WRITE8_MEMBER(royalmah_state::janptr96_rambank_w) @@ -1216,7 +1227,7 @@ READ8_MEMBER(royalmah_state::mjtensin_p3_r) void royalmah_state::mjtensin_update_rombank() { - membank("mainbank")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 ); + m_mainbank->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 ); } WRITE8_MEMBER(royalmah_state::mjtensin_p4_w) { @@ -1242,7 +1253,7 @@ void royalmah_state::mjtensin_map(address_map &map) map(0x6ff1, 0x6ff1).w(FUNC(royalmah_state::mjderngr_palbank_w)); map(0x6ff3, 0x6ff3).w(FUNC(royalmah_state::mjtensin_6ff3_w)); map(0x7000, 0x7fff).ram().share("nvram"); - map(0x8000, 0xffff).bankr("mainbank"); + map(0x8000, 0xffff).bankr(m_mainbank); map(0x8000, 0xffff).writeonly().share("videoram"); } @@ -1253,7 +1264,7 @@ void royalmah_state::mjtensin_map(address_map &map) void royalmah_state::cafetime_update_rombank() { - membank("mainbank")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 ); + m_mainbank->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 ); } WRITE8_MEMBER(royalmah_state::cafetime_p4_w) { @@ -1308,7 +1319,7 @@ void royalmah_state::cafetime_map(address_map &map) map(0x7fe3, 0x7fe3).w(FUNC(royalmah_state::cafetime_7fe3_w)); map(0x7fe4, 0x7fe4).r(FUNC(royalmah_state::cafetime_7fe4_r)); map(0x7ff0, 0x7fff).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); - map(0x8000, 0xffff).bankr("mainbank"); + map(0x8000, 0xffff).bankr(m_mainbank); map(0x8000, 0xffff).writeonly().share("videoram"); } @@ -1825,34 +1836,34 @@ static INPUT_PORTS_START( jongshin ) PORT_INCLUDE( mjctrl2 ) PORT_START("DSW1") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5") - PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6") - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7") - PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW1:8") PORT_START("DSW2") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1") - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5") - PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6") - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7") - PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW2:8") // setting this causes the game to continually reset on title screen PORT_START("DSW3") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW3:1") - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW3:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW3:3") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW3:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW3:5") - PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW3:6") - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW3:7") - PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW3:8") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW3:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW3:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW3:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW3:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW3:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW3:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW3:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW3:8") INPUT_PORTS_END static INPUT_PORTS_START( mjyarou ) @@ -3668,7 +3679,7 @@ MACHINE_CONFIG_END void royalmah_state::jongshin(machine_config &config) { - suzume(config); + dondenmj(config); m_maincpu->set_addrmap(AS_IO, &royalmah_state::jongshin_iomap); } @@ -3989,7 +4000,7 @@ ROM_START( suzume ) ROM_END ROM_START( jongshin ) - ROM_REGION( 0x100000, "maincpu", 0 ) // all 2732 + ROM_REGION( 0x28000, "maincpu", 0 ) // all 2732 ROM_LOAD( "js1.p1", 0x00000, 0x1000, CRC(0c33eb1c) SHA1(4258f2df8e9d4d3fd3fd77c555bd36ced601c45f) ) ROM_LOAD( "js2.p2", 0x01000, 0x1000, CRC(a74bfa19) SHA1(378ec5dcddbe1c1e66b9ec0576b898442e3ba89c) ) ROM_LOAD( "js3.p3", 0x02000, 0x1000, CRC(7519804f) SHA1(4181e58964ae149e675c2aeb49edee6f5d06f6ed) ) @@ -5250,7 +5261,7 @@ ROM_END void royalmah_state::init_tahjong() { - membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); + m_mainbank->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); } void royalmah_state::init_jansou() @@ -5266,21 +5277,26 @@ void royalmah_state::init_jansou() void royalmah_state::init_dynax() { - membank("mainbank")->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x8000); + m_mainbank->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x8000); } void royalmah_state::init_ippatsu() { - membank("mainbank")->set_base(memregion("maincpu")->base() + 0x8000 ); + m_mainbank->set_base(memregion("maincpu")->base() + 0x8000 ); } void royalmah_state::init_suzume() { - membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000); + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000); save_item(NAME(m_suzume_bank)); } +void royalmah_state::init_jongshin() +{ + m_mainbank->configure_entries(0, 3, memregion("maincpu")->base() + 0x10000, 0x8000); +} + void royalmah_state::init_mjifb() { save_item(NAME(m_mjifb_rom_enable)); @@ -5288,12 +5304,12 @@ void royalmah_state::init_mjifb() void royalmah_state::init_tontonb() { - membank("mainbank")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x8000); + m_mainbank->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x8000); } void royalmah_state::init_janptr96() { - membank("mainbank")->configure_entries(0, 64, memregion("maincpu")->base() + 0x10000, 0x8000); + m_mainbank->configure_entries(0, 64, memregion("maincpu")->base() + 0x10000, 0x8000); m_janptr96_nvram = std::make_unique<uint8_t[]>(0x1000 * 9); membank("bank3")->set_base(m_janptr96_nvram.get()); @@ -5320,7 +5336,7 @@ GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, init_jansou GAME( 1986, dondenmj, 0, dondenmj, majs101b, royalmah_state, init_dynax, ROT0, "Dyna Electronics", "Don Den Mahjong [BET] (Japan)", 0 ) GAME( 1986, ippatsu, 0, ippatsu, ippatsu, royalmah_state, init_ippatsu, ROT0, "Public Software / Paradais", "Ippatsu Gyakuten [BET] (Japan)", 0 ) GAME( 1986, suzume, 0, suzume, suzume, royalmah_state, init_suzume, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 ) -GAME( 1986, jongshin, 0, jongshin, jongshin, royalmah_state, init_suzume, ROT0, "Dyna Electronics", "Jong Shin (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // mahjong tile GFX missing, controls work in test mode but not in game +GAME( 1986, jongshin, 0, jongshin, jongshin, royalmah_state, init_jongshin, ROT0, "Dyna Electronics", "Jong Shin (Japan)", 0 ) GAME( 1986, mjsiyoub, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Visco", "Mahjong Shiyou (Japan)", MACHINE_NOT_WORKING ) GAME( 1986, mjsenka, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Visco", "Mahjong Senka (Japan)", MACHINE_NOT_WORKING ) GAME( 1986, mjyarou, 0, mjyarou, mjyarou, royalmah_state, empty_init, ROT0, "Visco / Video System", "Mahjong Yarou [BET] (Japan, set 1)", MACHINE_IMPERFECT_GRAPHICS ) // girls aren't shown diff --git a/src/mame/drivers/rvoice.cpp b/src/mame/drivers/rvoice.cpp index f4c17174833..b8d8c3e6c93 100644 --- a/src/mame/drivers/rvoice.cpp +++ b/src/mame/drivers/rvoice.cpp @@ -360,15 +360,16 @@ void rvoice_state::null_kbd_put(u8 data) { } -MACHINE_CONFIG_START(rvoice_state::rvoicepc) +void rvoice_state::rvoicepc(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", HD63701, XTAL(7'372'800)) - MCFG_DEVICE_PROGRAM_MAP(hd63701_main_mem) + HD63701(config, m_maincpu, XTAL(7'372'800)); + m_maincpu->set_addrmap(AS_PROGRAM, &rvoice_state::hd63701_main_mem); - //MCFG_DEVICE_ADD("playercpu", HD63701, XTAL(7'372'800)) // not dumped yet - //MCFG_DEVICE_PROGRAM_MAP(hd63701_slave_mem) - //MCFG_DEVICE_IO_MAP(hd63701_slave_io) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + //hd63701_cpu_device &playercpu(HD63701(config "playercpu", XTAL(7'372'800))); // not dumped yet + //playercpu.set_addrmap(AS_PROGRAM, &rvoice_state::hd63701_slave_mem); + //playercpu.set_addrmap(AS_PROGRAM, &rvoice_state::hd63701_slave_io); + config.m_minimum_quantum = attotime::from_hz(60); mos6551_device &acia(MOS6551(config, "acia65c51", 0)); acia.set_xtal(1.8432_MHz_XTAL); @@ -376,10 +377,9 @@ MACHINE_CONFIG_START(rvoice_state::rvoicepc) /* video hardware */ /* sound hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(rvoice_state, null_kbd_put)) - -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(rvoice_state::null_kbd_put)); +} diff --git a/src/mame/drivers/sacstate.cpp b/src/mame/drivers/sacstate.cpp index 78fbaa66432..5f0e7a9c912 100644 --- a/src/mame/drivers/sacstate.cpp +++ b/src/mame/drivers/sacstate.cpp @@ -133,16 +133,17 @@ void sacstate_state::machine_reset() m_val = ioport("CONFIG")->read(); } -MACHINE_CONFIG_START(sacstate_state::sacstate) +void sacstate_state::sacstate(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",I8008, 800000) - MCFG_DEVICE_PROGRAM_MAP(sacstate_mem) - MCFG_DEVICE_IO_MAP(sacstate_io) + I8008(config, m_maincpu, 800000); + m_maincpu->set_addrmap(AS_PROGRAM, &sacstate_state::sacstate_mem); + m_maincpu->set_addrmap(AS_IO, &sacstate_state::sacstate_io); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(sacstate_state, kbd_put)) -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(sacstate_state::kbd_put)); +} /* ROM definition */ ROM_START( sacstate ) diff --git a/src/mame/drivers/sage2.cpp b/src/mame/drivers/sage2.cpp index 5e425f0f941..a995314c165 100644 --- a/src/mame/drivers/sage2.cpp +++ b/src/mame/drivers/sage2.cpp @@ -467,7 +467,7 @@ MACHINE_CONFIG_START(sage2_state::sage2) rs232b.rxd_handler().set(m_usart1, FUNC(i8251_device::write_rxd)); rs232b.dsr_handler().set(m_usart1, FUNC(i8251_device::write_dsr)); - UPD765A(config, m_fdc, false, false); + UPD765A(config, m_fdc, 8'000'000, false, false); m_fdc->intrq_wr_callback().set(FUNC(sage2_state::fdc_irq)); MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") diff --git a/src/mame/drivers/sapi1.cpp b/src/mame/drivers/sapi1.cpp index 9e3c3deb865..6acc55165fa 100644 --- a/src/mame/drivers/sapi1.cpp +++ b/src/mame/drivers/sapi1.cpp @@ -27,6 +27,8 @@ ToDo: Unable to proceed due to no info available (& in English). +ZPS stands for "Základní Počítačová Sestava" (basic computer system). + ****************************************************************************/ @@ -623,7 +625,7 @@ void sapi1_state::init_sapizps3b() /* Machine driver */ MACHINE_CONFIG_START(sapi1_state::sapi1) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(18'000'000) / 9) // Tesla MHB8080A + MHB8224 + MHB8228 + MCFG_DEVICE_ADD(m_maincpu, I8080A, XTAL(18'000'000) / 9) // Tesla MHB8080A + MHB8224 + MHB8228 MCFG_DEVICE_PROGRAM_MAP(sapi1_mem) MCFG_MACHINE_RESET_OVERRIDE(sapi1_state, sapi1) @@ -642,14 +644,15 @@ MACHINE_CONFIG_START(sapi1_state::sapi1) RAM(config, RAM_TAG).set_default_size("64K"); MACHINE_CONFIG_END -MACHINE_CONFIG_START(sapi1_state::sapi2) +void sapi1_state::sapi2(machine_config &config) +{ sapi1(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(sapi2_mem) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(sapi1_state, kbd_put)) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &sapi1_state::sapi2_mem); + + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(sapi1_state::kbd_put)); +} MACHINE_CONFIG_START(sapi1_state::sapi3) sapi2(config); diff --git a/src/mame/drivers/sbc6510.cpp b/src/mame/drivers/sbc6510.cpp index 9acf0c8bea7..8b2aac2908a 100644 --- a/src/mame/drivers/sbc6510.cpp +++ b/src/mame/drivers/sbc6510.cpp @@ -292,7 +292,7 @@ MACHINE_CONFIG_START(sbc6510_state::sbc6510) MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_sbc6510) /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) + GENERIC_TERMINAL(config, m_terminal, 0); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/segaorun.cpp b/src/mame/drivers/segaorun.cpp index ebd5612ff92..d6cc081746e 100644 --- a/src/mame/drivers/segaorun.cpp +++ b/src/mame/drivers/segaorun.cpp @@ -1169,10 +1169,9 @@ MACHINE_CONFIG_START(segaorun_state::outrun_base) m_i8255->in_pc_callback().set(FUNC(segaorun_state::unknown_portc_r)); m_i8255->out_pc_callback().set(FUNC(segaorun_state::video_control_w)); - MCFG_DEVICE_ADD("mapper", SEGA_315_5195_MEM_MAPPER, MASTER_CLOCK/4) - MCFG_SEGA_315_5195_CPU("maincpu") - MCFG_SEGA_315_5195_MAPPER_HANDLER(segaorun_state, memory_mapper) - MCFG_SEGA_315_5195_PBF_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) + SEGA_315_5195_MEM_MAPPER(config, m_mapper, MASTER_CLOCK/4, m_maincpu); + m_mapper->set_mapper(FUNC(segaorun_state::memory_mapper), this); + m_mapper->pbf().set_inputline(m_soundcpu, INPUT_LINE_NMI); // video hardware MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_segaorun) diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp index 46ca54d69c9..547e9ed959a 100644 --- a/src/mame/drivers/segas16a.cpp +++ b/src/mame/drivers/segas16a.cpp @@ -2077,6 +2077,7 @@ void segas16a_state::system16a_no7751(machine_config &config) m_soundcpu->set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap); config.device_remove("n7751"); + config.device_remove("n7751_8243"); config.device_remove("dac"); config.device_remove("vref"); @@ -2091,7 +2092,7 @@ void segas16a_state::system16a_no7751p(machine_config &config) z80.set_addrmap(AS_PROGRAM, &segas16a_state::sound_map); z80.set_addrmap(AS_IO, &segas16a_state::sound_no7751_portmap); z80.set_addrmap(AS_OPCODES, &segas16a_state::sound_decrypted_opcodes_map); - z80.set_decrypted_tag(":decrypted_opcodes"); + z80.set_decrypted_tag(":sound_decrypted_opcodes"); } /* diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 1bb18fc01a7..947cb7d5548 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -3725,8 +3725,8 @@ void segas16b_state::system16b(machine_config &config) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); SEGA_315_5195_MEM_MAPPER(config, m_mapper, MASTER_CLOCK_10MHz, m_maincpu); - m_mapper->set_mapper(FUNC(segas16b_state::memory_mapper)); - m_mapper->pbf().set_inputline("soundcpu", 0); + m_mapper->set_mapper(FUNC(segas16b_state::memory_mapper), this); + m_mapper->pbf().set_inputline(m_soundcpu, 0); // video hardware GFXDECODE(config, m_gfxdecode, "palette", gfx_segas16b); @@ -3962,23 +3962,23 @@ MACHINE_CONFIG_END // GAME-SPECIFIC MACHINE DRIVERS //************************************************************************** -MACHINE_CONFIG_START(segas16b_state::atomicp) // 10MHz CPU Clock verified +void segas16b_state::atomicp(machine_config &config) // 10MHz CPU Clock verified +{ system16b(config); // basic machine hardware - MCFG_DEVICE_REMOVE("soundcpu") - MCFG_DEVICE_REMOVE("sprites") + config.device_remove("soundcpu"); + config.device_remove("sprites"); - MCFG_DEVICE_MODIFY("mapper") - MCFG_SEGA_315_5195_PBF_CALLBACK(NOOP) + m_mapper->pbf().set_nop(); // sound hardware - MCFG_DEVICE_REMOVE("ym2151") - MCFG_DEVICE_ADD("ym2413", YM2413, XTAL(20'000'000)/4) // 20MHz OSC divided by 4 (verified) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + config.device_remove("ym2151"); + YM2413(config, m_ym2413, XTAL(20'000'000)/4); // 20MHz OSC divided by 4 (verified) + m_ym2413->add_route(ALL_OUTPUTS, "mono", 1.0); - MCFG_DEVICE_REMOVE("upd") -MACHINE_CONFIG_END + config.device_remove("upd"); +} MACHINE_CONFIG_START(segas16b_state::system16c) diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp index 4d667a0b82c..1c160bd3e47 100644 --- a/src/mame/drivers/segas18.cpp +++ b/src/mame/drivers/segas18.cpp @@ -1320,10 +1320,9 @@ MACHINE_CONFIG_START(segas18_state::system18) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_DEVICE_ADD("mapper", SEGA_315_5195_MEM_MAPPER, 10000000) - MCFG_SEGA_315_5195_CPU("maincpu") - MCFG_SEGA_315_5195_MAPPER_HANDLER(segas18_state, memory_mapper) - MCFG_SEGA_315_5195_PBF_CALLBACK(INPUTLINE("soundcpu", INPUT_LINE_NMI)) + SEGA_315_5195_MEM_MAPPER(config, m_mapper, 10000000, m_maincpu); + m_mapper->set_mapper(FUNC(segas18_state::memory_mapper), this); + m_mapper->pbf().set_inputline(m_soundcpu, INPUT_LINE_NMI); SEGA_315_5296(config, m_io, 16000000); m_io->in_pa_callback().set_ioport("P1"); @@ -1444,8 +1443,7 @@ MACHINE_CONFIG_START(segas18_state::system18_i8751) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_VBLANK_INT_REMOVE() - MCFG_DEVICE_MODIFY("mapper") - MCFG_SEGA_315_5195_MCU_INT_CALLBACK(INPUTLINE("mcu", INPUT_LINE_IRQ1)) + m_mapper->mcu_int().set_inputline(m_mcu, INPUT_LINE_IRQ1); MCFG_DEVICE_ADD("mcu", I8751, 8000000) MCFG_DEVICE_IO_MAP(mcu_io_map) @@ -1459,8 +1457,7 @@ MACHINE_CONFIG_START(segas18_state::system18_fd1094_i8751) MCFG_DEVICE_MODIFY("maincpu") MCFG_DEVICE_VBLANK_INT_REMOVE() - MCFG_DEVICE_MODIFY("mapper") - MCFG_SEGA_315_5195_MCU_INT_CALLBACK(INPUTLINE("mcu", INPUT_LINE_IRQ1)) + m_mapper->mcu_int().set_inputline(m_mcu, INPUT_LINE_IRQ1); MCFG_DEVICE_ADD("mcu", I8751, 8000000) MCFG_DEVICE_IO_MAP(mcu_io_map) diff --git a/src/mame/drivers/segasp.cpp b/src/mame/drivers/segasp.cpp index 5dd358870d8..0b80de4614f 100644 --- a/src/mame/drivers/segasp.cpp +++ b/src/mame/drivers/segasp.cpp @@ -302,19 +302,20 @@ INPUT_PORTS_START( segasp ) INPUT_PORTS_END -MACHINE_CONFIG_START(segasp_state::segasp) +void segasp_state::segasp(machine_config &config) +{ naomi_aw_base(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(segasp_map) - MCFG_DEVICE_IO_MAP(onchip_port) + m_maincpu->set_addrmap(AS_PROGRAM, &segasp_state::segasp_map); + m_maincpu->set_addrmap(AS_IO, &segasp_state::onchip_port); EEPROM_93C46_16BIT(config, "main_eeprom"); EEPROM_93C46_16BIT(config, "sp_eeprom"); // todo, not exactly NaomiM4 (see notes at top of driver) use custom board type here instead X76F100(config, "naomibd_eeprom"); // actually not present - MCFG_NAOMI_M4_BOARD_ADD("rom_board", "pic_readout", "naomibd_eeprom", WRITE8(*this, dc_state, g1_irq)) -MACHINE_CONFIG_END + naomi_m4_board &rom_board(NAOMI_M4_BOARD(config, "rom_board", 0, "naomibd_eeprom", "pic_readout")); + rom_board.irq_callback().set(FUNC(dc_state::g1_irq)); +} void segasp_state::init_segasp() { diff --git a/src/mame/drivers/segaxbd.cpp b/src/mame/drivers/segaxbd.cpp index 0bcaa287b21..02bf1f9eb00 100644 --- a/src/mame/drivers/segaxbd.cpp +++ b/src/mame/drivers/segaxbd.cpp @@ -1691,10 +1691,10 @@ MACHINE_CONFIG_START(segaxbd_state::xboard_base_mconfig ) MB3773(config, "watchdog"); - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_main") - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_subx") - MCFG_SEGA_315_5249_DIVIDER_ADD("divider_main") - MCFG_SEGA_315_5249_DIVIDER_ADD("divider_subx") + SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0); + SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0); + SEGA_315_5249_DIVIDER(config, "divider_main", 0); + SEGA_315_5249_DIVIDER(config, "divider_subx", 0); SEGA_315_5250_COMPARE_TIMER(config, m_cmptimer_1, 0); m_cmptimer_1->m68kint_callback().set(FUNC(segaxbd_state::timer_irq_w)); diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp index dcc68aa8236..f888407684c 100644 --- a/src/mame/drivers/segaybd.cpp +++ b/src/mame/drivers/segaybd.cpp @@ -1309,12 +1309,12 @@ MACHINE_CONFIG_START(segaybd_state::yboard) MCFG_MSM6253_IN2_ANALOG_PORT("ADC.2") MCFG_MSM6253_IN3_ANALOG_READ(segaybd_state, analog_mux) - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_main") - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_subx") - MCFG_SEGA_315_5248_MULTIPLIER_ADD("multiplier_suby") - MCFG_SEGA_315_5249_DIVIDER_ADD("divider_main") - MCFG_SEGA_315_5249_DIVIDER_ADD("divider_subx") - MCFG_SEGA_315_5249_DIVIDER_ADD("divider_suby") + SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0); + SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0); + SEGA_315_5248_MULTIPLIER(config, "multiplier_suby", 0); + SEGA_315_5249_DIVIDER(config, "divider_main", 0); + SEGA_315_5249_DIVIDER(config, "divider_subx", 0); + SEGA_315_5249_DIVIDER(config, "divider_suby", 0); // video hardware MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mame/drivers/sg1000.cpp b/src/mame/drivers/sg1000.cpp index 2344d2582a7..ce1a99ab3f1 100644 --- a/src/mame/drivers/sg1000.cpp +++ b/src/mame/drivers/sg1000.cpp @@ -649,7 +649,7 @@ MACHINE_CONFIG_START(sf7000_state::sf7000) rs232.rxd_handler().set(UPD8251_TAG, FUNC(i8251_device::write_rxd)); rs232.dsr_handler().set(UPD8251_TAG, FUNC(i8251_device::write_dsr)); - UPD765A(config, m_fdc, false, false); + UPD765A(config, m_fdc, 8'000'000, false, false); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", sf7000_floppies, "3ssdd", sf7000_state::floppy_formats) MCFG_DEVICE_ADD(m_centronics, CENTRONICS, centronics_devices, "printer") diff --git a/src/mame/drivers/snesb.cpp b/src/mame/drivers/snesb.cpp index c234473fba0..7eb81d905e4 100644 --- a/src/mame/drivers/snesb.cpp +++ b/src/mame/drivers/snesb.cpp @@ -174,6 +174,7 @@ public: void init_mk3snes(); void init_legendsb(); void init_rushbeat(); + void init_spidrmnb(); private: std::unique_ptr<int8_t[]> m_shared_ram; @@ -1111,6 +1112,72 @@ void snesb_state::init_rushbeat() init_snes(); } +void snesb_state::init_spidrmnb() +{ + uint8_t *src = memregion("user7")->base(); + uint8_t *dst = memregion("user3")->base(); + + static uint8_t address_tab_high[0x60] = { + 0x00, 0x11, 0x02, 0x13, 0x04, 0x15, 0x06, 0x17, 0x08, 0x19, 0x0a, 0x1b, 0x0c, 0x1d, 0x0e, 0x1f, + 0x20, 0x31, 0x22, 0x33, 0x24, 0x35, 0x26, 0x37, 0x28, 0x39, 0x2a, 0x3b, 0x2c, 0x3d, 0x2e, 0x3f, + 0x10, 0x01, 0x12, 0x03, 0x14, 0x05, 0x16, 0x07, 0x18, 0x09, 0x1a, 0x0b, 0x1c, 0x0d, 0x1e, 0x0f, + 0x30, 0x21, 0x32, 0x23, 0x34, 0x25, 0x36, 0x27, 0x38, 0x29, 0x3a, 0x2b, 0x3c, 0x2d, 0x3e, 0x2f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f + }; + + static uint8_t address_tab_low[0x40] = { + 0x14, 0x1d, 0x11, 0x3c, 0x0a, 0x29, 0x2d, 0x2e, 0x30, 0x32, 0x16, 0x36, 0x05, 0x25, 0x26, 0x37, + 0x20, 0x21, 0x27, 0x28, 0x33, 0x34, 0x23, 0x12, 0x1e, 0x1f, 0x3b, 0x24, 0x2c, 0x35, 0x38, 0x39, + 0x3d, 0x0c, 0x2a, 0x0d, 0x22, 0x18, 0x19, 0x1a, 0x03, 0x08, 0x04, 0x3a, 0x0b, 0x0f, 0x15, 0x17, + 0x1b, 0x13, 0x00, 0x1c, 0x2b, 0x01, 0x06, 0x2f, 0x07, 0x09, 0x02, 0x31, 0x10, 0x0e, 0x3f, 0x3e + }; + + static uint8_t data_table[0x100] = { + 0x6a, 0xf2, 0xe0, 0xea, 0xe8, 0x60, 0x62, 0xe2, 0x70, 0xfa, 0x7a, 0x78, 0xf0, 0x68, 0x72, 0xf8, + 0x4f, 0xd7, 0xc5, 0xcf, 0xcd, 0x45, 0x47, 0xc7, 0x55, 0xdf, 0x5f, 0x5d, 0xd5, 0x4d, 0x57, 0xdd, + 0x0e, 0x96, 0x84, 0x8e, 0x8c, 0x04, 0x06, 0x86, 0x14, 0x9e, 0x1e, 0x1c, 0x94, 0x0c, 0x16, 0x9c, + 0x6e, 0xf6, 0xe4, 0xee, 0xec, 0x64, 0x66, 0xe6, 0x74, 0xfe, 0x7e, 0x7c, 0xf4, 0x6c, 0x76, 0xfc, + 0x2e, 0xb6, 0xa4, 0xae, 0xac, 0x24, 0x26, 0xa6, 0x34, 0xbe, 0x3e, 0x3c, 0xb4, 0x2c, 0x36, 0xbc, + 0x0a, 0x92, 0x80, 0x8a, 0x88, 0x00, 0x02, 0x82, 0x10, 0x9a, 0x1a, 0x18, 0x90, 0x08, 0x12, 0x98, + 0x4a, 0xd2, 0xc0, 0xca, 0xc8, 0x40, 0x42, 0xc2, 0x50, 0xda, 0x5a, 0x58, 0xd0, 0x48, 0x52, 0xd8, + 0x4e, 0xd6, 0xc4, 0xce, 0xcc, 0x44, 0x46, 0xc6, 0x54, 0xde, 0x5e, 0x5c, 0xd4, 0x4c, 0x56, 0xdc, + 0x0b, 0x93, 0x81, 0x8b, 0x89, 0x01, 0x03, 0x83, 0x11, 0x9b, 0x1b, 0x19, 0x91, 0x09, 0x13, 0x99, + 0x6f, 0xf7, 0xe5, 0xef, 0xed, 0x65, 0x67, 0xe7, 0x75, 0xff, 0x7f, 0x7d, 0xf5, 0x6d, 0x77, 0xfd, + 0x6b, 0xf3, 0xe1, 0xeb, 0xe9, 0x61, 0x63, 0xe3, 0x71, 0xfb, 0x7b, 0x79, 0xf1, 0x69, 0x73, 0xf9, + 0x2b, 0xb3, 0xa1, 0xab, 0xa9, 0x21, 0x23, 0xa3, 0x31, 0xbb, 0x3b, 0x39, 0xb1, 0x29, 0x33, 0xb9, + 0x0f, 0x97, 0x85, 0x8f, 0x8d, 0x05, 0x07, 0x87, 0x15, 0x9f, 0x1f, 0x1d, 0x95, 0x0d, 0x17, 0x9d, + 0x2a, 0xb2, 0xa0, 0xaa, 0xa8, 0x20, 0x22, 0xa2, 0x30, 0xba, 0x3a, 0x38, 0xb0, 0x28, 0x32, 0xb8, + 0x4b, 0xd3, 0xc1, 0xcb, 0xc9, 0x41, 0x43, 0xc3, 0x51, 0xdb, 0x5b, 0x59, 0xd1, 0x49, 0x53, 0xd9, + 0x2f, 0xb7, 0xa5, 0xaf, 0xad, 0x25, 0x27, 0xa7, 0x35, 0xbf, 0x3f, 0x3d, 0xb5, 0x2d, 0x37, 0xbd + }; + + for (int i = 0; i < 0x300000; i++) + { + int j = (address_tab_high[i >> 15] << 15) + (i & 0x7fc0) + address_tab_low[i & 0x3f]; + + dst[i] = data_table[src[j]]; + + if (i >= 0x00000 && i < 0x10000) { + dst[i] = bitswap<8>(dst[i], 6, 7, 0, 3, 1, 4, 2, 5) ^ 0xff; + } + + if (i >= 0x10000 && i < 0x20000) { + dst[i] = bitswap<8>(dst[i], 0, 1, 4, 5, 3, 7, 6, 2); + } + + if (i >= 0x20000 && i < 0x30000) { + dst[i] = bitswap<8>(dst[i], 1, 3, 2, 6, 5, 4, 0, 7) ^ 0xff; + } + + if (i >= 0x30000 && i < 0x40000) { + dst[i] = bitswap<8>(dst[i], 4, 0, 7, 6, 2, 1, 5, 3); + } + } + + init_snes(); +} + ROM_START( kinstb ) ROM_REGION( 0x400000, "user3", 0 ) ROM_LOAD( "1.u14", 0x000000, 0x100000, CRC(70889919) SHA1(1451714cbdacb7f6ced2bc7afa478ad7264cf3b7) ) @@ -1301,6 +1368,21 @@ ROM_START( rushbeat ) ROM_LOAD( "ic22.bin", 0x180000, 0x80000, CRC(95a234d2) SHA1(31a556c8ed395f61ba198631ee086c18cc740792) ) ROM_END +ROM_START( spidrmnb ) + ROM_REGION( 0x300000, "user3", ROMREGION_ERASEFF ) + + ROM_REGION(0x100, "sound_ipl", 0) + ROM_LOAD("spc700.rom", 0, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) + + ROM_REGION(0x800, "user6", ROMREGION_ERASEFF) + + ROM_REGION( 0x300000, "user7", 0 ) + ROM_LOAD( "u31.bin", 0x000000, 0x0100000, CRC(d1034a76) SHA1(541dd92197ca2e4eb686e426c840aad847d02be8) ) + ROM_LOAD( "u32.bin", 0x100000, 0x0100000, CRC(fbe865b0) SHA1(25467a6faa912bf180c5dd7aecee77c3b5f207f8) ) + ROM_LOAD( "u33.bin", 0x200000, 0x0080000, CRC(ed874ca2) SHA1(cfc90b38ea2eea07e990f0b72d7c1af2a7076beb) ) + ROM_LOAD( "u34.bin", 0x280000, 0x0080000, CRC(7a09c9e0) SHA1(794965d5501ec0e21f1f3a8cb8fd66f913d42760) ) +ROM_END + GAME( 199?, kinstb, 0, kinstb, kinstb, snesb_state, init_kinstb, ROT0, "bootleg", "Killer Instinct (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 199?, mk3snes, 0, mk3snes, kinstb, snesb_state, init_mk3snes, ROT0, "bootleg", "Mortal Kombat 3 (SNES bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, ffight2b, 0, ffight2b, ffight2b, snesb_state, init_ffight2b, ROT0, "bootleg", "Final Fight 2 (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) @@ -1310,3 +1392,4 @@ GAME( 1997, sblast2b, 0, kinstb, sblast2b, snesb_state, init_sbl GAME( 1996, endless, 0, kinstb, endless, snesb_state, init_endless, ROT0, "bootleg", "Gundam Wing: Endless Duel (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1996, legendsb, 0, kinstb, kinstb, snesb_state, init_legendsb, ROT0, "bootleg", "Legend (SNES bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1997, rushbeat, 0, kinstb, kinstb, snesb_state, init_rushbeat, ROT0, "bootleg", "Rushing Beat (SNES bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1997, spidrmnb, 0, kinstb, kinstb, snesb_state, init_spidrmnb, ROT0, "bootleg", "Venom & Spider-Man - Separation Anxiety (SNES bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/snowbros.cpp b/src/mame/drivers/snowbros.cpp index 3d1f1541797..8fe6757691a 100644 --- a/src/mame/drivers/snowbros.cpp +++ b/src/mame/drivers/snowbros.cpp @@ -520,13 +520,37 @@ void snowbros_state::finalttr_map(address_map &map) } +// Yutnori protection. +// The sequence MEN is sent to the protection device, followed by the code request (4 bytes in all). +// After each byte, a number of NOPs are executed to give the device time to catch up. +// After the 4th byte, the code reads the device to get its response. +READ16_MEMBER(snowbros_state::yutnori_prot_r) +{ + switch(m_yutnori_prot_val) // the 4th byte + { + case 0x33: // C3B6 + return 0xcc; + case 0x60: // 4878 + return 0xf9; + case 0xb8: // D820 + return 0x74; + } + logerror("%s: Unhandled protection sequence found: %02X\n", machine().describe_context(), m_yutnori_prot_val); + return 0; +} + +WRITE16_MEMBER(snowbros_state::yutnori_prot_w) +{ + m_yutnori_prot_val = data; +} + void snowbros_state::yutnori_map(address_map &map) { map(0x000000, 0x03ffff).rom(); // 0x100000 clr.w on startup - // 0x200000 could be the protection device, it makes several writes, then executes an entire subroutine of NOPs.. + map(0x200000, 0x200001).rw(FUNC(snowbros_state::yutnori_prot_r),FUNC(snowbros_state::yutnori_prot_w)); // protection map(0x300000, 0x300001).portr("DSW1"); map(0x300002, 0x300003).portr("DSW2"); @@ -2890,13 +2914,9 @@ void snowbros_state::init_hyperpac() void snowbros_state::init_yutnori() { - // presumably related to the PIC protection - uint16_t *rom = (uint16_t *)memregion("maincpu")->base(); - rom[0x4878 / 2] = 0x4e71; - rom[0xd820 / 2] = 0x4e71; - rom[0xc3b6 / 2] = 0x4e71; - + m_yutnori_prot_val = 0; m_pandora->set_bg_pen(0xf0); + save_item(NAME(m_yutnori_prot_val)); } GAME( 1990, snowbros, 0, snowbros, snowbros, snowbros_state, empty_init, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 1)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/sorcerer.cpp b/src/mame/drivers/sorcerer.cpp index aada01930c0..0d611f2e7e9 100644 --- a/src/mame/drivers/sorcerer.cpp +++ b/src/mame/drivers/sorcerer.cpp @@ -484,8 +484,8 @@ MACHINE_CONFIG_START(sorcerer_state::sorcererd) MCFG_MACHINE_START_OVERRIDE(sorcerer_state, sorcererd ) - MCFG_DEVICE_ADD(m_fdc, MICROPOLIS, 0) - MCFG_MICROPOLIS_DEFAULT_DRIVE4_TAGS + MICROPOLIS(config, m_fdc, 0); + m_fdc->set_default_drive_tags(); MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(sorcerer_floppy_interface) FD1793(config, m_fdc2, 8_MHz_XTAL / 8); // confirmed clock diff --git a/src/mame/drivers/specpls3.cpp b/src/mame/drivers/specpls3.cpp index 15089e10516..deee57e2cec 100644 --- a/src/mame/drivers/specpls3.cpp +++ b/src/mame/drivers/specpls3.cpp @@ -389,7 +389,7 @@ MACHINE_CONFIG_START(spectrum_state::spectrum_plus3) MCFG_MACHINE_RESET_OVERRIDE(spectrum_state, spectrum_plus3 ) - UPD765A(config, m_upd765, true, true); + UPD765A(config, m_upd765, 4'000'000, true, true); MCFG_FLOPPY_DRIVE_ADD("upd765:0", specpls3_floppies, "3ssdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("upd765:1", specpls3_floppies, "3ssdd", floppy_image_device::default_floppy_formats) diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp index 52c3be8cbf7..79019164e21 100644 --- a/src/mame/drivers/tandy2k.cpp +++ b/src/mame/drivers/tandy2k.cpp @@ -851,7 +851,7 @@ MACHINE_CONFIG_START(tandy2k_state::tandy2k) PIC8259(config, m_pic1, 0); m_pic1->out_int_callback().set(m_maincpu, FUNC(i80186_cpu_device::int1_w)); - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 16_MHz_XTAL / 4, true); m_fdc->set_select_lines_connected(true); m_fdc->intrq_wr_callback().set(m_pic0, FUNC(pic8259_device::ir4_w)); m_fdc->drq_wr_callback().set(FUNC(tandy2k_state::fdc_drq_w)); diff --git a/src/mame/drivers/tavernie.cpp b/src/mame/drivers/tavernie.cpp index 86b58ee4e76..1c2e873ccc2 100644 --- a/src/mame/drivers/tavernie.cpp +++ b/src/mame/drivers/tavernie.cpp @@ -359,8 +359,8 @@ MACHINE_CONFIG_START(tavernie_state::ivg09) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(tavernie_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(tavernie_state::kbd_put)); mc6845_device &crtc(MC6845(config, "crtc", 1008000)); // unknown clock crtc.set_screen("screen"); diff --git a/src/mame/drivers/tim011.cpp b/src/mame/drivers/tim011.cpp index eabf4f92de8..5148f655404 100644 --- a/src/mame/drivers/tim011.cpp +++ b/src/mame/drivers/tim011.cpp @@ -140,8 +140,8 @@ MACHINE_CONFIG_START(tim011_state::tim011) // MCFG_DEVICE_ADD("keyboard",CDP1802, XTAL(1'750'000)) // CDP1802, unknown clock - // FDC9266 location U43 XTAL(8'000'000) - UPD765A(config, m_fdc, true, true); + // FDC9266 location U43 + UPD765A(config, m_fdc, XTAL(8'000'000), true, true); m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ2); /* floppy drives */ diff --git a/src/mame/drivers/tk80bs.cpp b/src/mame/drivers/tk80bs.cpp index 47cf0897071..fc26f3d365e 100644 --- a/src/mame/drivers/tk80bs.cpp +++ b/src/mame/drivers/tk80bs.cpp @@ -194,8 +194,8 @@ MACHINE_CONFIG_START(tk80bs_state::tk80bs) m_ppi->in_pa_callback().set(FUNC(tk80bs_state::port_a_r)); m_ppi->in_pb_callback().set(FUNC(tk80bs_state::port_b_r)); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(tk80bs_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(tk80bs_state::kbd_put)); MACHINE_CONFIG_END diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp index 327e63f9505..1c2e7af09cf 100644 --- a/src/mame/drivers/triforce.cpp +++ b/src/mame/drivers/triforce.cpp @@ -591,10 +591,12 @@ MACHINE_CONFIG_START(triforce_state::triforce_base) MACHINE_CONFIG_END -MACHINE_CONFIG_START(triforce_state::triforcegd) +void triforce_state::triforcegd(machine_config &config) +{ triforce_base(config); - MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", nullptr, NOOP) -MACHINE_CONFIG_END + naomi_gdrom_board &rom_board(NAOMI_GDROM_BOARD(config, "rom_board", 0, ":gdrom", "pic")); + rom_board.irq_callback().set_nop(); +} #define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \ diff --git a/src/mame/drivers/trs80m2.cpp b/src/mame/drivers/trs80m2.cpp index 76a95ab21ab..177b235dfab 100644 --- a/src/mame/drivers/trs80m2.cpp +++ b/src/mame/drivers/trs80m2.cpp @@ -776,8 +776,8 @@ MACHINE_CONFIG_START(trs80m2_state::trs80m2) TRS80M2_KEYBOARD(config, m_kb, 0); m_kb->clock_wr_callback().set(FUNC(trs80m2_state::kb_clock_w)); - MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(trs80m2_state, kbd_w)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, KEYBOARD_TAG, 0)); + keyboard.set_keyboard_callback(FUNC(trs80m2_state::kbd_w)); // internal RAM RAM(config, RAM_TAG).set_default_size("64K").set_extra_options("32K,96K,128K,160K,192K,224K,256K,288K,320K,352K,384K,416K,448K,480K,512K"); @@ -868,8 +868,8 @@ MACHINE_CONFIG_START(trs80m16_state::trs80m16) TRS80M2_KEYBOARD(config, m_kb, 0); m_kb->clock_wr_callback().set(FUNC(trs80m2_state::kb_clock_w)); - MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(trs80m2_state, kbd_w)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, KEYBOARD_TAG, 0)); + keyboard.set_keyboard_callback(FUNC(trs80m2_state::kbd_w)); // internal RAM RAM(config, RAM_TAG).set_default_size("256K").set_extra_options("512K,768K,1M"); diff --git a/src/mame/drivers/ts802.cpp b/src/mame/drivers/ts802.cpp index 1f3ca782d91..d8fcc909224 100644 --- a/src/mame/drivers/ts802.cpp +++ b/src/mame/drivers/ts802.cpp @@ -191,7 +191,8 @@ void ts802_state::init_ts802() membank("bankw0")->configure_entry(0, &main[0x0000]); } -MACHINE_CONFIG_START(ts802_state::ts802) +void ts802_state::ts802(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, 16_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &ts802_state::ts802_mem); @@ -199,8 +200,8 @@ MACHINE_CONFIG_START(ts802_state::ts802) //m_maincpu->set_daisy_config(daisy_chain_intf); // causes problems /* Devices */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(ts802_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(ts802_state::kbd_put)); z80dma_device& dma(Z80DMA(config, "dma", 16_MHz_XTAL / 4)); dma.out_busreq_callback().set_inputline(m_maincpu, INPUT_LINE_HALT); @@ -221,7 +222,7 @@ MACHINE_CONFIG_START(ts802_state::ts802) FD1793(config, "fdc", 4'000'000 / 2); // unknown clock FLOPPY_CONNECTOR(config, "fdc:0", ts802_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( ts802 ) diff --git a/src/mame/drivers/ts816.cpp b/src/mame/drivers/ts816.cpp index 62f2070594c..b6c59cccdb4 100644 --- a/src/mame/drivers/ts816.cpp +++ b/src/mame/drivers/ts816.cpp @@ -263,7 +263,8 @@ void ts816_state::init_ts816() membank("bank2")->configure_entry(1, &rams[0x1e000]); } -MACHINE_CONFIG_START(ts816_state::ts816) +void ts816_state::ts816(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(16'000'000) / 4); m_maincpu->set_addrmap(AS_PROGRAM, &ts816_state::ts816_mem); @@ -271,8 +272,8 @@ MACHINE_CONFIG_START(ts816_state::ts816) m_maincpu->set_daisy_config(daisy_chain); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(ts816_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(ts816_state::kbd_put)); //z80sio_device& sio0(Z80SIO(config, "sio0", XTAL(16'000'000) / 4)); //sio0.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); @@ -310,7 +311,7 @@ MACHINE_CONFIG_START(ts816_state::ts816) z80dma_device& dma(Z80DMA(config, "dma", XTAL(16'000'000) / 4)); //dma.out_busreq_callback().set(FUNC(ts816_state::busreq_w)); dma.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( ts816 ) diff --git a/src/mame/drivers/v6809.cpp b/src/mame/drivers/v6809.cpp index c9fbcad7fcc..d4122dea7e3 100644 --- a/src/mame/drivers/v6809.cpp +++ b/src/mame/drivers/v6809.cpp @@ -311,8 +311,8 @@ MACHINE_CONFIG_START(v6809_state::v6809) m_crtc->set_update_row_callback(FUNC(v6809_state::crtc_update_row), this); m_crtc->set_on_update_addr_change_callback(FUNC(v6809_state::crtc_update_addr), this); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(v6809_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(v6809_state::kbd_put)); // port A = drive select and 2 control lines ; port B = keyboard // CB2 connects to the interrupt pin of the RTC (the rtc code doesn't support it) diff --git a/src/mame/drivers/vax11.cpp b/src/mame/drivers/vax11.cpp index 6be5d7cde69..9a799f4e54e 100644 --- a/src/mame/drivers/vax11.cpp +++ b/src/mame/drivers/vax11.cpp @@ -140,18 +140,19 @@ void vax11_state::kbd_put(u8 data) m_term_status = 0xffff; } -MACHINE_CONFIG_START(vax11_state::vax11) +void vax11_state::vax11(machine_config &config) +{ /* basic machine hardware */ T11(config, m_maincpu, XTAL(4'000'000)); // Need proper CPU here m_maincpu->set_initial_mode(0 << 13); m_maincpu->set_addrmap(AS_PROGRAM, &vax11_state::vax11_mem); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(vax11_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(vax11_state::kbd_put)); RX01(config, "rx01", 0); -MACHINE_CONFIG_END +} ROM_START( vax785 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp index 0b9fa43acb5..2d307adb9fa 100644 --- a/src/mame/drivers/vk100.cpp +++ b/src/mame/drivers/vk100.cpp @@ -1043,6 +1043,7 @@ MACHINE_CONFIG_START(vk100_state::vk100) MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) H46505(config, m_crtc, 45.6192_MHz_XTAL/3/12); + m_crtc->set_screen("screen"); m_crtc->set_show_border_area(false); m_crtc->set_char_width(12); m_crtc->set_update_row_callback(FUNC(vk100_state::crtc_update_row), this); diff --git a/src/mame/drivers/votrpss.cpp b/src/mame/drivers/votrpss.cpp index 8d02332522e..756d567936b 100644 --- a/src/mame/drivers/votrpss.cpp +++ b/src/mame/drivers/votrpss.cpp @@ -262,8 +262,8 @@ MACHINE_CONFIG_START(votrpss_state::votrpss) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* Devices */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) - MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(votrpss_state, kbd_put)) + GENERIC_TERMINAL(config, m_terminal, 0); + m_terminal->set_keyboard_callback(FUNC(votrpss_state::kbd_put)); i8251_device &uart(I8251(config, "uart", 0)); uart.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); diff --git a/src/mame/drivers/wangpc.cpp b/src/mame/drivers/wangpc.cpp index 1be93bb9be3..4b0c4da1326 100644 --- a/src/mame/drivers/wangpc.cpp +++ b/src/mame/drivers/wangpc.cpp @@ -1327,7 +1327,7 @@ MACHINE_CONFIG_START(wangpc_state::wangpc) m_epci->dtr_handler().set(RS232_TAG, FUNC(rs232_port_device::write_dtr)); m_epci->txemt_dschg_handler().set(FUNC(wangpc_state::epci_irq_w)); - UPD765A(config, m_fdc, false, false); + UPD765A(config, m_fdc, 8'000'000, false, false); m_fdc->intrq_wr_callback().set(FUNC(wangpc_state::fdc_irq)); m_fdc->drq_wr_callback().set(FUNC(wangpc_state::fdc_drq)); MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", wangpc_floppies, "525dd", wangpc_state::floppy_formats) diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index 37930c5408c..4371aea9c12 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -1616,7 +1616,7 @@ MACHINE_CONFIG_START(x68k_state::x68000_base) FILTER_VOLUME(config, m_adpcm_out[0]).add_route(ALL_OUTPUTS, "lspeaker", 1.0); FILTER_VOLUME(config, m_adpcm_out[1]).add_route(ALL_OUTPUTS, "rspeaker", 1.0); - UPD72065(config, m_upd72065, 0, true, false); + UPD72065(config, m_upd72065, 16_MHz_XTAL / 2, true, false); // clocked through SED9420CAC m_upd72065->intrq_wr_callback().set(FUNC(x68k_state::fdc_irq)); m_upd72065->drq_wr_callback().set(m_hd63450, FUNC(hd63450_device::drq0_w)); FLOPPY_CONNECTOR(config, "upd72065:0", x68k_floppies, "525hd", x68k_state::floppy_formats); diff --git a/src/mame/drivers/z9001.cpp b/src/mame/drivers/z9001.cpp index 35a1e69c4b0..e29df35bee0 100644 --- a/src/mame/drivers/z9001.cpp +++ b/src/mame/drivers/z9001.cpp @@ -231,8 +231,8 @@ MACHINE_CONFIG_START(z9001_state::z9001) BEEP(config, "beeper", 800).add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(z9001_state, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(z9001_state::kbd_put)); MCFG_TIMER_DRIVER_ADD_PERIODIC("z9001_timer", z9001_state, timer_callback, attotime::from_msec(10)) z80pio_device& pio1(Z80PIO(config, "z80pio1", XTAL(9'830'400) / 4)); diff --git a/src/mame/drivers/zrt80.cpp b/src/mame/drivers/zrt80.cpp index c1df58bb97d..f4baf373946 100644 --- a/src/mame/drivers/zrt80.cpp +++ b/src/mame/drivers/zrt80.cpp @@ -312,7 +312,7 @@ void zrt80_state::zrt80(machine_config &config) m_8250->out_int_callback().set_inputline("maincpu", INPUT_LINE_IRQ0); generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); - keyboard.set_keyboard_callback(KEYBOARDCB_PUT(zrt80_state, kbd_put)); + keyboard.set_keyboard_callback(FUNC(zrt80_state::kbd_put)); } /* ROM definition */ diff --git a/src/mame/includes/cps1.h b/src/mame/includes/cps1.h index 70a8d5e9a8c..8134893c5e4 100644 --- a/src/mame/includes/cps1.h +++ b/src/mame/includes/cps1.h @@ -465,6 +465,7 @@ private: void cps2_objram_latch(); uint16_t *cps2_objbase(); virtual void render_layers(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override; + uint32_t screen_update_cps2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_MACHINE_START(cps2); virtual void video_start() override; diff --git a/src/mame/includes/dc.h b/src/mame/includes/dc.h index 0c8c8558a1d..707adb0cfc7 100644 --- a/src/mame/includes/dc.h +++ b/src/mame/includes/dc.h @@ -79,6 +79,7 @@ class dc_state : public driver_device DECLARE_WRITE64_MEMBER( dc_modem_w ); DECLARE_WRITE8_MEMBER( g1_irq ); DECLARE_WRITE8_MEMBER( pvr_irq ); + DECLARE_WRITE8_MEMBER( maple_irq ); DECLARE_READ64_MEMBER( sh4_soundram_r ); DECLARE_WRITE64_MEMBER( sh4_soundram_w ); DECLARE_WRITE_LINE_MEMBER(aica_irq); @@ -287,6 +288,4 @@ class dc_state : public driver_device #define IST_ERR_ISP_LIMIT 0x00000004 #define IST_ERR_PVRIF_ILL_ADDR 0x00000040 -void dc_maple_irq(running_machine &machine); - #endif // MAME_INCLUDES_DC_H diff --git a/src/mame/includes/mbc55x.h b/src/mame/includes/mbc55x.h index d841245aac2..4a73b3b44d9 100644 --- a/src/mame/includes/mbc55x.h +++ b/src/mame/includes/mbc55x.h @@ -114,7 +114,7 @@ public: void init_mbc55x(); - required_device<cpu_device> m_maincpu; + required_device<i8086_cpu_device> m_maincpu; required_device<address_map_bank_device> m_iodecode; uint32_t m_debug_machine; diff --git a/src/mame/includes/pc1251.h b/src/mame/includes/pc1251.h index 60fd39bd013..7d7bfb4e75c 100644 --- a/src/mame/includes/pc1251.h +++ b/src/mame/includes/pc1251.h @@ -12,68 +12,70 @@ #define MAME_INCLUDES_PC1251_H #include "pocketc.h" -#include "cpu/sc61860/sc61860.h" -#include "machine/nvram.h" -#include "emupal.h" - -#define PC1251_CONTRAST (ioport("DSW0")->read() & 0x07) - class pc1251_state : public pocketc_state { public: - enum - { - TIMER_POWER_UP - }; - pc1251_state(const machine_config &mconfig, device_type type, const char *tag) - : pocketc_state(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_cpu_nvram(*this, "cpu_nvram"), - m_ram_nvram(*this, "ram_nvram") { } - - uint8_t m_outa; - uint8_t m_outb; - int m_power; - uint8_t m_reg[0x100]; + : pocketc_state(mconfig, type, tag) + , m_keys(*this, "KEY%u", 0U) + , m_mode(*this, "MODE") + { } void init_pc1251(); - uint32_t screen_update_pc1251(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE8_MEMBER(pc1251_outa); - DECLARE_WRITE8_MEMBER(pc1251_outb); - DECLARE_WRITE8_MEMBER(pc1251_outc); - - DECLARE_READ_LINE_MEMBER(pc1251_reset); - DECLARE_READ_LINE_MEMBER(pc1251_brk); - DECLARE_READ8_MEMBER(pc1251_ina); - DECLARE_READ8_MEMBER(pc1251_inb); - DECLARE_READ8_MEMBER(pc1251_lcd_read); - DECLARE_WRITE8_MEMBER(pc1251_lcd_write); - virtual void machine_start() override; - DECLARE_MACHINE_START(pc1260); - required_device<sc61860_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; - void pc1261(machine_config &config); - void pc1260(machine_config &config); void pc1255(machine_config &config); void pc1251(machine_config &config); void pc1250(machine_config &config); + +protected: + virtual void machine_start() override; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void pc1250_mem(address_map &map); void pc1251_mem(address_map &map); void pc1255_mem(address_map &map); void pc1260_mem(address_map &map); void pc1261_mem(address_map &map); -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + DECLARE_WRITE8_MEMBER(out_b_w); + DECLARE_WRITE8_MEMBER(out_c_w); + + DECLARE_READ_LINE_MEMBER(reset_r); + DECLARE_READ8_MEMBER(in_a_r); + DECLARE_READ8_MEMBER(in_b_r); + DECLARE_READ8_MEMBER(lcd_read); + DECLARE_WRITE8_MEMBER(lcd_write); - required_device<nvram_device> m_cpu_nvram; - required_device<nvram_device> m_ram_nvram; +private: + required_ioport_array<10> m_keys; + required_ioport m_mode; + + uint8_t m_reg[0x100]; + + static const char *const s_def[5]; + static const char *const s_shift[5]; + static const char *const s_de[5]; + static const char *const s_g[5]; + static const char *const s_rad[5]; + static const char *const s_run[5]; + static const char *const s_pro[5]; + static const char *const s_rsv[5]; +}; + +class pc1260_state : public pc1251_state +{ +public: + pc1260_state(const machine_config &mconfig, device_type type, const char *tag) + : pc1251_state(mconfig, type, tag) + { } + + void pc1260(machine_config &config); + void pc1261(machine_config &config); + +protected: + virtual void machine_start() override; }; #endif // MAME_INCLUDES_PC1251_H diff --git a/src/mame/includes/pc1350.h b/src/mame/includes/pc1350.h index be52db0f3dd..5c206b9bb7f 100644 --- a/src/mame/includes/pc1350.h +++ b/src/mame/includes/pc1350.h @@ -12,51 +12,47 @@ #define MAME_INCLUDES_PC1350_H #include "pocketc.h" -#include "cpu/sc61860/sc61860.h" -#include "machine/nvram.h" #include "machine/ram.h" -#define PC1350_CONTRAST (ioport("DSW0")->read() & 0x07) - - class pc1350_state : public pocketc_state { public: - enum - { - TIMER_POWER_UP - }; - pc1350_state(const machine_config &mconfig, device_type type, const char *tag) - : pocketc_state(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_ram(*this, RAM_TAG) { } + : pocketc_state(mconfig, type, tag) + , m_ram(*this, RAM_TAG) + , m_keys(*this, "KEY%u", 0U) + { } - uint8_t m_outa; - uint8_t m_outb; - int m_power; - uint8_t m_reg[0x1000]; - uint32_t screen_update_pc1350(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void pc1350(machine_config &config); - DECLARE_WRITE8_MEMBER(pc1350_outa); - DECLARE_WRITE8_MEMBER(pc1350_outb); - DECLARE_WRITE8_MEMBER(pc1350_outc); +protected: + virtual void machine_start() override; - DECLARE_READ_LINE_MEMBER(pc1350_brk); - DECLARE_READ8_MEMBER(pc1350_ina); - DECLARE_READ8_MEMBER(pc1350_inb); - DECLARE_READ8_MEMBER(pc1350_lcd_read); - DECLARE_WRITE8_MEMBER(pc1350_lcd_write); - DECLARE_READ8_MEMBER(pc1350_keyboard_line_r); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - virtual void machine_start() override; - required_device<sc61860_device> m_maincpu; + void pc1350_mem(address_map &map); + + DECLARE_WRITE8_MEMBER(out_b_w); + DECLARE_WRITE8_MEMBER(out_c_w); + + DECLARE_READ8_MEMBER(in_a_r); + DECLARE_READ8_MEMBER(in_b_r); + DECLARE_READ8_MEMBER(lcd_read); + DECLARE_WRITE8_MEMBER(lcd_write); + DECLARE_READ8_MEMBER(keyboard_line_r); + +private: required_device<ram_device> m_ram; + required_ioport_array<12> m_keys; - void pc1350(machine_config &config); - void pc1350_mem(address_map &map); -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + uint8_t m_reg[0x1000]; + + static const char* const s_def[5]; + static const char* const s_shift[5]; + static const char* const s_run[5]; + static const char* const s_pro[5]; + static const char* const s_japan[5]; + static const char* const s_sml[5]; }; #endif // MAME_INCLUDES_PC1350_H diff --git a/src/mame/includes/pc1401.h b/src/mame/includes/pc1401.h index 11f66eb34b2..56fba456224 100644 --- a/src/mame/includes/pc1401.h +++ b/src/mame/includes/pc1401.h @@ -12,54 +12,53 @@ #define MAME_INCLUDES_PC1401_H #include "pocketc.h" -#include "cpu/sc61860/sc61860.h" -#include "machine/nvram.h" -#include "emupal.h" - -#define CONTRAST (ioport("DSW0")->read() & 0x07) - class pc1401_state : public pocketc_state { public: - enum - { - TIMER_POWER_UP - }; - pc1401_state(const machine_config &mconfig, device_type type, const char *tag) - : pocketc_state(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + : pocketc_state(mconfig, type, tag) + , m_keys(*this, "KEY%u", 0U) + { } - uint8_t m_portc; - uint8_t m_outa; - uint8_t m_outb; - int m_power; - uint8_t m_reg[0x100]; void init_pc1401(); - uint32_t screen_update_pc1401(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_READ_LINE_MEMBER(pc1401_reset); - DECLARE_READ_LINE_MEMBER(pc1401_brk); - DECLARE_WRITE8_MEMBER(pc1401_outa); - DECLARE_WRITE8_MEMBER(pc1401_outb); - DECLARE_WRITE8_MEMBER(pc1401_outc); - DECLARE_READ8_MEMBER(pc1401_ina); - DECLARE_READ8_MEMBER(pc1401_inb); - DECLARE_READ8_MEMBER(pc1401_lcd_read); - DECLARE_WRITE8_MEMBER(pc1401_lcd_write); - virtual void machine_start() override; - required_device<sc61860_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; void pc1401(machine_config &config); void pc1402(machine_config &config); + +protected: + virtual void machine_start() override; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void pc1401_mem(address_map &map); void pc1402_mem(address_map &map); -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + DECLARE_READ_LINE_MEMBER(reset_r); + DECLARE_WRITE8_MEMBER(out_b_w); + DECLARE_WRITE8_MEMBER(out_c_w); + DECLARE_READ8_MEMBER(in_a_r); + DECLARE_READ8_MEMBER(in_b_r); + DECLARE_READ8_MEMBER(lcd_read); + DECLARE_WRITE8_MEMBER(lcd_write); + +private: + required_ioport_array<13> m_keys; + + uint8_t m_portc; + uint8_t m_reg[0x100]; + + static const char* const s_line[5]; + static const char* const s_busy[5]; + static const char* const s_def[5]; + static const char* const s_shift[5]; + static const char* const s_hyp[5]; + static const char* const s_de[5]; + static const char* const s_g[5]; + static const char* const s_rad[5]; + static const char* const s_braces[5]; + static const char* const s_m[5]; + static const char* const s_e[5]; }; #endif // MAME_INCLUDES_PC1401_H diff --git a/src/mame/includes/pc1403.h b/src/mame/includes/pc1403.h index 8223728d380..0b6d1641150 100644 --- a/src/mame/includes/pc1403.h +++ b/src/mame/includes/pc1403.h @@ -12,61 +12,73 @@ #define MAME_INCLUDES_PC1403_H #include "pocketc.h" -#include "cpu/sc61860/sc61860.h" -#include "machine/nvram.h" -#include "emupal.h" - -#define CONTRAST (ioport("DSW0")->read() & 0x07) - class pc1403_state : public pocketc_state { public: - enum - { - TIMER_POWER_UP - }; - pc1403_state(const machine_config &mconfig, device_type type, const char *tag) - : pocketc_state(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + : pocketc_state(mconfig, type, tag) + , m_keys(*this, "KEY%u", 0U) + { } - uint8_t m_portc; - uint8_t m_outa; - int m_power; - uint8_t m_asic[4]; - int m_DOWN; - int m_RIGHT; - uint8_t m_reg[0x100]; + void pc1403(machine_config &config); + void pc1403h(machine_config &config); - void init_pc1403(); - uint32_t screen_update_pc1403(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_READ_LINE_MEMBER(pc1403_reset); - DECLARE_READ_LINE_MEMBER(pc1403_brk); - DECLARE_WRITE8_MEMBER(pc1403_outa); - DECLARE_WRITE8_MEMBER(pc1403_outc); - DECLARE_READ8_MEMBER(pc1403_ina); - - DECLARE_READ8_MEMBER(pc1403_asic_read); - DECLARE_WRITE8_MEMBER(pc1403_asic_write); - DECLARE_READ8_MEMBER(pc1403_lcd_read); - DECLARE_WRITE8_MEMBER(pc1403_lcd_write); - virtual void video_start() override; +protected: virtual void machine_start() override; - required_device<sc61860_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; + virtual void video_start() override; + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void pc1403h(machine_config &config); - void pc1403(machine_config &config); void pc1403_mem(address_map &map); void pc1403h_mem(address_map &map); void pc1421_readmem(address_map &map); void pc1421_writemem(address_map &map); + + DECLARE_READ_LINE_MEMBER(reset_r); + DECLARE_WRITE8_MEMBER(out_c_w); + DECLARE_READ8_MEMBER(in_a_r); + + DECLARE_READ8_MEMBER(asic_read); + DECLARE_WRITE8_MEMBER(asic_write); + DECLARE_READ8_MEMBER(lcd_read); + DECLARE_WRITE8_MEMBER(lcd_write); + + int m_down; + int m_right; + +private: + required_ioport_array<14> m_keys; + + uint8_t m_portc; + uint8_t m_asic[4]; + uint8_t m_reg[0x100]; + + static const char* const s_line[5]; + static const char* const s_busy[5]; + static const char* const s_def[5]; + static const char* const s_shift[5]; + static const char* const s_hyp[5]; + static const char* const s_de[5]; + static const char* const s_g[5]; + static const char* const s_rad[5]; + static const char* const s_braces[5]; + static const char* const s_m[5]; + static const char* const s_e[5]; + static const char* const s_kana[5]; + static const char* const s_shoo[5]; + static const char* const s_sml[5]; +}; + +class pc1403h_state : public pc1403_state +{ +public: + pc1403h_state(const machine_config &mconfig, device_type type, const char *tag) + : pc1403_state(mconfig, type, tag) + { } + protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void video_start() override; }; #endif // MAME_INCLUDES_PC1403_H diff --git a/src/mame/includes/pgm2.h b/src/mame/includes/pgm2.h index f935cda5b72..37303aa4baa 100644 --- a/src/mame/includes/pgm2.h +++ b/src/mame/includes/pgm2.h @@ -19,10 +19,10 @@ struct kov3_module_key { - uint8_t key[8]; - uint8_t sum[8]; - uint32_t addr_xor; // 22bit - uint16_t data_xor; + u8 key[8]; + u8 sum[8]; + u32 addr_xor; // 22bit + u16 data_xor; }; class pgm2_state : public driver_device @@ -51,9 +51,29 @@ public: m_bg_palette(*this, "bg_palette"), m_tx_palette(*this, "tx_palette"), m_mcu_timer(*this, "mcu_timer"), - m_memcard(*this, "memcard_p%u", 1U) + m_memcard(*this, "memcard_p%u", 1U), + m_mainrom(*this, "mainrom") { } + void init_kov2nl(); + void init_orleg2(); + void init_ddpdojt(); + void init_kov3(); + void init_kov3_104(); + void init_kov3_102(); + void init_kov3_101(); + void init_kov3_100(); + void init_kof98umh(); + + void pgm2_ramrom(machine_config &config); + void pgm2_lores(machine_config &config); + void pgm2(machine_config &config); + void pgm2_hires(machine_config &config); + void pgm2_map(address_map &map); + void pgm2_module_rom_map(address_map &map); + void pgm2_ram_rom_map(address_map &map); + void pgm2_rom_map(address_map &map); +private: DECLARE_READ32_MEMBER(unk_startup_r); DECLARE_READ32_MEMBER(rtc_r); DECLARE_READ32_MEMBER(mcu_r); @@ -71,9 +91,9 @@ public: DECLARE_READ32_MEMBER(pio_pdsr_r); DECLARE_WRITE16_MEMBER(module_rom_w); DECLARE_READ16_MEMBER(module_rom_r); - DECLARE_READ_LINE_MEMBER(module_data_r); - DECLARE_WRITE_LINE_MEMBER(module_data_w); - DECLARE_WRITE_LINE_MEMBER(module_clk_w); + int module_data_r(); + void module_data_w(int state); + void module_clk_w(int state); DECLARE_READ32_MEMBER(orleg2_speedup_r); DECLARE_READ32_MEMBER(kov2nl_speedup_r); @@ -87,112 +107,89 @@ public: DECLARE_WRITE32_MEMBER(encryption_do_w); DECLARE_WRITE32_MEMBER(sprite_encryption_w); - void init_kov2nl(); - void init_orleg2(); - void init_ddpdojt(); - void init_kov3(); - void init_kov3_104(); - void init_kov3_102(); - void init_kov3_101(); - void init_kov3_100(); - void init_kof98umh(); - - uint32_t screen_update_pgm2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_pgm2); - DECLARE_WRITE_LINE_MEMBER(irq); - - INTERRUPT_GEN_MEMBER(igs_interrupt); - TIMER_DEVICE_CALLBACK_MEMBER(igs_interrupt2); - - void pgm2_ramrom(machine_config &config); - void pgm2_lores(machine_config &config); - void pgm2(machine_config &config); - void pgm2_hires(machine_config &config); - void pgm2_map(address_map &map); - void pgm2_module_rom_map(address_map &map); - void pgm2_ram_rom_map(address_map &map); - void pgm2_rom_map(address_map &map); -private: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; + virtual void device_post_load() override; TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info); - void decrypt_kov3_module(uint32_t addrxor, uint16_t dataxor); + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(screen_vblank); + DECLARE_WRITE_LINE_MEMBER(irq); + + TIMER_DEVICE_CALLBACK_MEMBER(mcu_interrupt); + + void decrypt_kov3_module(u32 addrxor, u16 dataxor); tilemap_t *m_fg_tilemap; tilemap_t *m_bg_tilemap; - std::unique_ptr<uint32_t[]> m_spritebufferram; // buffered spriteram - - bitmap_ind16 m_sprite_bitmap; + std::unique_ptr<u32[]> m_spritebufferram; // buffered spriteram - void skip_sprite_chunk(int &palette_offset, uint32_t maskdata, int reverse); - void draw_sprite_pixel(const rectangle &cliprect, int palette_offset, int realx, int realy, int pal); - void draw_sprite_chunk(const rectangle &cliprect, int &palette_offset, int x, int realy, int sizex, int xdraw, int pal, uint32_t maskdata, uint32_t zoomx_bits, int repeats, int &realxdraw, int realdraw_inc, int palette_inc); - void draw_sprite_line(const rectangle &cliprect, int &mask_offset, int &palette_offset, int x, int realy, int flipx, int reverse, int sizex, int pal, int zoomybit, int zoomx_bits, int xrepeats); - void draw_sprites(screen_device &screen, const rectangle &cliprect, uint32_t* spriteram); - void copy_sprites_from_bitmap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri); - - uint32_t m_sprites_mask_mask; - uint32_t m_sprites_colour_mask; + void skip_sprite_chunk(u32 &palette_offset, u32 maskdata, bool reverse); + void draw_sprite_pixel(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 palette_offset, s16 realx, s16 realy, u16 pal, u8 pri); + void draw_sprite_chunk(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 &palette_offset, s16 x, s16 realy, + u16 sizex, int xdraw, u16 pal, u32 maskdata, u32 zoomx_bits, u8 repeats, s16 &realxdraw, s8 realdraw_inc, s8 palette_inc, u8 pri); + void draw_sprite_line(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 &mask_offset, u32 &palette_offset, s16 x, s16 realy, + bool flipx, bool reverse, u16 sizex, u16 pal, u8 zoomybit, u32 zoomx_bits, u8 xrepeats, u8 pri); + void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32* spriteram); void common_encryption_init(); - uint8_t m_encryption_table[0x100]; - int m_has_decrypted; // so we only do it once. - int m_has_decrypted_kov3_module; - uint32_t m_spritekey; - uint32_t m_realspritekey; - int m_sprite_predecrypted; - - uint8_t m_shareram[0x100]; - uint16_t m_share_bank; - uint32_t m_mcu_regs[8]; - uint32_t m_mcu_result0; - uint32_t m_mcu_result1; - uint8_t m_mcu_last_cmd; - void mcu_command(address_space &space, bool is_command); - - std::vector<uint8_t> m_encrypted_copy; - - uint32_t pio_out_data; + u8 m_encryption_table[0x100]; + bool m_has_decrypted; // so we only do it once. + bool m_has_decrypted_kov3_module; + u32 m_spritekey; + u32 m_realspritekey; + bool m_sprite_predecrypted; + + u8 m_shareram[0x100]; + u16 m_share_bank; + u32 m_mcu_regs[8]; + u32 m_mcu_result0; + u32 m_mcu_result1; + u8 m_mcu_last_cmd; + void mcu_command(bool is_command); + + std::vector<u8> m_encrypted_copy; + + u32 m_pio_out_data; const kov3_module_key *module_key; bool module_sum_read; - uint32_t module_in_latch; - uint32_t module_out_latch; + u32 module_in_latch; + u32 module_out_latch; int module_prev_state; int module_clk_cnt; - uint8_t module_rcv_buf[10]; - uint8_t module_send_buf[9]; - - void postload(); + u8 module_rcv_buf[10]; + u8 module_send_buf[9]; // devices required_device<cpu_device> m_maincpu; required_device<screen_device> m_screen; - required_shared_ptr<uint32_t> m_lineram; - required_shared_ptr<uint32_t> m_sp_zoom; - required_shared_ptr<uint32_t> m_mainram; - optional_shared_ptr<uint32_t> m_romboard_ram; - required_shared_ptr<uint32_t> m_fg_videoram; - required_shared_ptr<uint32_t> m_bg_videoram; - required_shared_ptr<uint32_t> m_sp_videoram; - required_shared_ptr<uint32_t> m_bgscroll; - required_shared_ptr<uint32_t> m_fgscroll; - required_shared_ptr<uint32_t> m_vidmode; + required_shared_ptr<u32> m_lineram; + required_shared_ptr<u32> m_sp_zoom; + required_shared_ptr<u32> m_mainram; + optional_shared_ptr<u32> m_romboard_ram; + required_shared_ptr<u32> m_fg_videoram; + required_shared_ptr<u32> m_bg_videoram; + required_shared_ptr<u32> m_sp_videoram; + required_shared_ptr<u32> m_bgscroll; + required_shared_ptr<u32> m_fgscroll; + required_shared_ptr<u32> m_vidmode; required_device<gfxdecode_device> m_gfxdecode2; required_device<gfxdecode_device> m_gfxdecode3; required_device<arm_aic_device> m_arm_aic; - required_region_ptr<uint8_t> m_sprites_mask; - required_region_ptr<uint8_t> m_sprites_colour; + required_region_ptr<u8> m_sprites_mask; + required_region_ptr<u8> m_sprites_colour; required_device<palette_device> m_sp_palette; required_device<palette_device> m_bg_palette; required_device<palette_device> m_tx_palette; required_device<timer_device> m_mcu_timer; optional_device_array<pgm2_memcard_device, 4> m_memcard; + + required_memory_region m_mainrom; }; #endif diff --git a/src/mame/includes/playmark.h b/src/mame/includes/playmark.h index 017d5ce7169..8bd73db762e 100644 --- a/src/mame/includes/playmark.h +++ b/src/mame/includes/playmark.h @@ -22,6 +22,7 @@ public: m_videoram3(*this, "videoram3"), m_spriteram(*this, "spriteram"), m_rowscroll(*this, "rowscroll"), + m_sprtranspen(0), m_oki(*this, "oki"), m_okibank(*this, "okibank"), m_eeprom(*this, "eeprom"), @@ -67,6 +68,7 @@ protected: int m_yoffset; int m_pri_masks[3]; uint16_t m_scroll[7]; + int m_sprtranspen; /* misc */ uint16_t m_snd_command; diff --git a/src/mame/includes/pocketc.h b/src/mame/includes/pocketc.h index 51e6865b246..6b21c0b07b1 100644 --- a/src/mame/includes/pocketc.h +++ b/src/mame/includes/pocketc.h @@ -9,26 +9,59 @@ #ifndef MAME_INCLUDES_POCKETC_H #define MAME_INCLUDES_POCKETC_H +#include "cpu/sc61860/sc61860.h" +#include "machine/nvram.h" #include "emupal.h" - -typedef const char *POCKETC_FIGURE[]; +#include "screen.h" class pocketc_state : public driver_device { public: pocketc_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) { } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_screen(*this, "screen") + , m_cpu_nvram(*this, "cpu_nvram") + , m_ram_nvram(*this, "ram_nvram") + , m_dsw0(*this, "DSW0") + , m_extra(*this, "EXTRA") + , m_power_timer(nullptr) + { } - void pocketc(machine_config &config); + void pocketc_base(machine_config &config); protected: - void pocketc_draw_special(bitmap_ind16 &bitmap,int x, int y, const POCKETC_FIGURE fig, int color); - - static const unsigned short pocketc_colortable[8][2]; + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; -private: DECLARE_PALETTE_INIT(pocketc); + void pocketc_draw_special(bitmap_ind16 &bitmap,int x, int y, const char* const *fig, int color); + + static const device_timer_id TIMER_POWER_UP = 0; + + DECLARE_WRITE8_MEMBER(out_a_w); + DECLARE_READ_LINE_MEMBER(brk_r); + + required_device<sc61860_device> m_maincpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_device<screen_device> m_screen; + required_device<nvram_device> m_cpu_nvram; + required_device<nvram_device> m_ram_nvram; + required_ioport m_dsw0; + required_ioport m_extra; + + uint8_t m_outa; + uint8_t m_outb; + int m_power; + emu_timer *m_power_timer; + + static const int colortable[8][2]; + static const rgb_t indirect_palette[6]; }; #endif // MAME_INCLUDES_POCKETC_H diff --git a/src/mame/includes/snowbros.h b/src/mame/includes/snowbros.h index 4e2fbb35296..b28dd51a5d7 100644 --- a/src/mame/includes/snowbros.h +++ b/src/mame/includes/snowbros.h @@ -67,6 +67,7 @@ private: int m_sb3_music_is_playing; int m_sb3_music; uint8_t m_semicom_prot_offset; + uint16_t m_yutnori_prot_val; DECLARE_WRITE8_MEMBER(snowbros_flipscreen_w); DECLARE_WRITE8_MEMBER(bootleg_flipscreen_w); @@ -83,6 +84,8 @@ private: DECLARE_WRITE8_MEMBER(twinadv_oki_bank_w); DECLARE_WRITE16_MEMBER(sb3_sound_w); DECLARE_READ16_MEMBER(toto_read); + DECLARE_WRITE16_MEMBER(yutnori_prot_w); + DECLARE_READ16_MEMBER(yutnori_prot_r); DECLARE_MACHINE_RESET(semiprot); DECLARE_MACHINE_RESET(finalttr); diff --git a/src/mame/machine/315-5881_crypt.h b/src/mame/machine/315-5881_crypt.h index 4e61c38066a..0d23b6d7527 100644 --- a/src/mame/machine/315-5881_crypt.h +++ b/src/mame/machine/315-5881_crypt.h @@ -10,9 +10,6 @@ typedef device_delegate<uint16_t (uint32_t)> sega_m2_read_delegate; DECLARE_DEVICE_TYPE(SEGA315_5881_CRYPT, sega_315_5881_crypt_device) -#define MCFG_SET_READ_CALLBACK( _class, _method) \ - downcast<sega_315_5881_crypt_device &>(*device).set_read_cb(sega_m2_read_delegate(&_class::_method, #_class "::" #_method, nullptr, (_class *)nullptr)); - class sega_315_5881_crypt_device : public device_t { diff --git a/src/mame/machine/awboard.cpp b/src/mame/machine/awboard.cpp index 7dd54c246d7..ee6fb7d5b73 100644 --- a/src/mame/machine/awboard.cpp +++ b/src/mame/machine/awboard.cpp @@ -177,13 +177,6 @@ aw_rom_board::aw_rom_board(const machine_config &mconfig, const char *tag, devic { } -void aw_rom_board::static_set_keyregion(device_t &device, const char *keyregion) -{ - aw_rom_board &dev = downcast<aw_rom_board &>(device); - dev.m_keyregion.set_tag(keyregion); -} - - /* We are using 20 bits keys with the following subfields' structure: bits 0-15 is a 16-bits XOR diff --git a/src/mame/machine/awboard.h b/src/mame/machine/awboard.h index 821e1c869da..f991c5dcbc5 100644 --- a/src/mame/machine/awboard.h +++ b/src/mame/machine/awboard.h @@ -7,16 +7,18 @@ #include "naomig1.h" -#define MCFG_AW_ROM_BOARD_ADD(_tag, _keyregion, _irq_cb) \ - MCFG_NAOMI_G1_ADD(_tag, AW_ROM_BOARD, _irq_cb) \ - aw_rom_board::static_set_keyregion(*device, _keyregion); class aw_rom_board : public naomi_g1_device { public: - aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T> + aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&keyregion_tag) + : aw_rom_board(mconfig, tag, owner, clock) + { + m_keyregion.set_tag(std::forward<T>(keyregion_tag)); + } - static void static_set_keyregion(device_t &device, const char *keyregion); + aw_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void submap(address_map &map) override; diff --git a/src/mame/machine/dc.cpp b/src/mame/machine/dc.cpp index 0108b7f6187..20d1db3ebf7 100644 --- a/src/mame/machine/dc.cpp +++ b/src/mame/machine/dc.cpp @@ -177,12 +177,14 @@ WRITE8_MEMBER(dc_state::pvr_irq) dc_update_interrupt_status(); } -void dc_maple_irq(running_machine &machine) +WRITE8_MEMBER(dc_state::maple_irq) { - dc_state *state = machine.driver_data<dc_state>(); - - state->dc_sysctrl_regs[SB_ISTNRM] |= IST_DMA_MAPLE; - state->dc_update_interrupt_status(); + switch(data) { + case maple_dc_device::DMA_MAPLE_IRQ: + dc_sysctrl_regs[SB_ISTNRM] |= IST_DMA_MAPLE; + break; + } + dc_update_interrupt_status(); } TIMER_CALLBACK_MEMBER(dc_state::ch2_dma_irq) diff --git a/src/mame/machine/gridkeyb.h b/src/mame/machine/gridkeyb.h index c70669dcb05..c4a41cd1589 100644 --- a/src/mame/machine/gridkeyb.h +++ b/src/mame/machine/gridkeyb.h @@ -9,18 +9,6 @@ /*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define GRIDKEYBCB_PUT(cls, fnc) grid_keyboard_device::output_delegate((&cls::fnc), (#cls "::" #fnc), DEVICE_SELF, ((cls *)nullptr)) -#define GRIDKEYBCB_DEVPUT(tag, cls, fnc) grid_keyboard_device::output_delegate((&cls::fnc), (#cls "::" #fnc), (tag), ((cls *)nullptr)) - -#define MCFG_GRID_KEYBOARD_CB(cb) \ - downcast<grid_keyboard_device &>(*device).set_keyboard_callback((GRIDKEYBCB_##cb)); - - - -/*************************************************************************** DEVICE TYPE GLOBALS ***************************************************************************/ @@ -52,7 +40,12 @@ public: device_t *owner, u32 clock); - template <class Object> void set_keyboard_callback(Object &&cb) { m_keyboard_cb = std::forward<Object>(cb); } + template <class FunctionClass> + void set_keyboard_callback(void (FunctionClass::*callback)(u16 character), const char *name) + { + set_keyboard_callback(output_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); + } + void set_keyboard_callback(output_delegate callback) { m_keyboard_cb = callback; } virtual ioport_constructor device_input_ports() const override; diff --git a/src/mame/machine/ibm6580_fdc.cpp b/src/mame/machine/ibm6580_fdc.cpp index 556cc718ef2..8a3e997ef62 100644 --- a/src/mame/machine/ibm6580_fdc.cpp +++ b/src/mame/machine/ibm6580_fdc.cpp @@ -31,7 +31,7 @@ const tiny_rom_entry *dw_fdc_device::device_rom_region() const void dw_fdc_device::device_add_mconfig(machine_config &config) { - I8048(config, m_mcu, XTAL(24'000'000)/4); // divisor is unverified + I8048(config, m_mcu, 24_MHz_XTAL / 4); // divisor is unverified // m_mcu->bus_in_cb().set(FUNC(dw_fdc_device::bus_r)); // m_mcu->bus_out_cb().set(FUNC(dw_fdc_device::bus_w)); m_mcu->p1_out_cb().set(FUNC(dw_fdc_device::p1_w)); @@ -41,7 +41,7 @@ void dw_fdc_device::device_add_mconfig(machine_config &config) I8255(config, "ppi8255", 0); - UPD765A(config, "upd765", false, false); + UPD765A(config, "upd765", 24_MHz_XTAL / 3, false, false); // m_upd_fdc->intrq_wr_callback().set("pic8259", FUNC(pic8259_device::ir4_w)); // m_upd_fdc->drq_wr_callback().set("dma8257", FUNC(dma8257_device::XXX)); // MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", wangpc_floppies, "525dd", wangpc_state::floppy_formats) diff --git a/src/mame/machine/isbc_208.cpp b/src/mame/machine/isbc_208.cpp index 22456234ad7..04789cd8ecf 100644 --- a/src/mame/machine/isbc_208.cpp +++ b/src/mame/machine/isbc_208.cpp @@ -41,7 +41,7 @@ void isbc_208_device::device_add_mconfig(machine_config &config) m_dmac->in_ior_callback<0>().set(m_fdc, FUNC(i8272a_device::mdma_r)); m_dmac->out_iow_callback<0>().set(m_fdc, FUNC(i8272a_device::mdma_w)); - I8272A(config, m_fdc, true); + I8272A(config, m_fdc, 8_MHz_XTAL, true); m_fdc->intrq_wr_callback().set(FUNC(isbc_208_device::irq_w)); m_fdc->drq_wr_callback().set(m_dmac, FUNC(am9517a_device::dreq0_w)); FLOPPY_CONNECTOR(config, "fdc:0", isbc_208_floppies, "525dd", isbc_208_device::floppy_formats); diff --git a/src/mame/machine/jvs13551.cpp b/src/mame/machine/jvs13551.cpp index 98464554036..877ccd6302f 100644 --- a/src/mame/machine/jvs13551.cpp +++ b/src/mame/machine/jvs13551.cpp @@ -43,9 +43,10 @@ const tiny_rom_entry *sega_837_13551_device::device_rom_region() const return ROM_NAME(jvs13551); } -MACHINE_CONFIG_START(sega_837_13551_device::device_add_mconfig) - MCFG_DEVICE_ADD("iomcu", TMP90PH44, 10000000) // unknown clock -MACHINE_CONFIG_END +void sega_837_13551_device::device_add_mconfig(machine_config &config) +{ + TMP90PH44(config, "iomcu", 10000000); // unknown clock +} ioport_constructor sega_837_13551_device::device_input_ports() const { @@ -53,8 +54,8 @@ ioport_constructor sega_837_13551_device::device_input_ports() const } sega_837_13551_device::sega_837_13551_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : jvs_device(mconfig, SEGA_837_13551, tag, owner, clock) +, port(*this, {finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG}) { - memset(port_tag, 0, sizeof(port_tag)); } const char *sega_837_13551_device::device_id() @@ -80,10 +81,6 @@ uint8_t sega_837_13551_device::comm_method_version() void sega_837_13551_device::device_start() { jvs_device::device_start(); - for (int i = 0; i < ARRAY_LENGTH(port_tag); i++) - { - port[i] = ioport(port_tag[i]); - } save_item(NAME(coin_counter)); } diff --git a/src/mame/machine/jvs13551.h b/src/mame/machine/jvs13551.h index 279937612c9..193877cdb16 100644 --- a/src/mame/machine/jvs13551.h +++ b/src/mame/machine/jvs13551.h @@ -7,28 +7,23 @@ #include "machine/jvsdev.h" -#define MCFG_SEGA_837_13551_DEVICE_ADD(_tag, _host, tilt, d0, d1, a0, a1, a2, a3, a4, a5, a6, a7, out) \ - MCFG_JVS_DEVICE_ADD(_tag, SEGA_837_13551, _host) \ - downcast<sega_837_13551_device &>(*device).set_port_tag(0, tilt); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(1, d0); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(2, d1); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(3, a0); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(4, a1); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(5, a2); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(6, a3); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(7, a4); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(8, a5); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(9, a6); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(10, a7); \ - downcast<sega_837_13551_device &>(*device).set_port_tag(11, out); class jvs_host; class sega_837_13551_device : public jvs_device { public: + template <typename T> + sega_837_13551_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&jvs_host_tag) + : sega_837_13551_device(mconfig, tag, owner, clock) + { + host.set_tag(std::forward<T>(jvs_host_tag)); + } + sega_837_13551_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void set_port_tag(int port, const char *tag) { port_tag[port] = tag; } + + template <uint8_t Which, typename T> + void set_port_tag(T &&port_tag) { port[Which].set_tag(std::forward<T>(port_tag)); } virtual const tiny_rom_entry *device_rom_region() const override; @@ -57,8 +52,7 @@ protected: virtual bool swoutputs(uint8_t id, uint8_t val) override; private: - const char *port_tag[12]; - ioport_port *port[12]; + optional_ioport_array<12> port; uint16_t coin_counter[2]; }; diff --git a/src/mame/machine/k573cass.h b/src/mame/machine/k573cass.h index 0481b5c02fd..30423d5464f 100644 --- a/src/mame/machine/k573cass.h +++ b/src/mame/machine/k573cass.h @@ -16,9 +16,6 @@ #include "machine/x76f100.h" #include "machine/zs01.h" -#define MCFG_KONAMI573_CASSETTE_DSR_HANDLER(_devcb) \ - downcast<konami573_cassette_slot_device &>(*device).set_dsr_handler(DEVCB_##_devcb); - DECLARE_DEVICE_TYPE(KONAMI573_CASSETTE_SLOT, konami573_cassette_slot_device) @@ -32,7 +29,7 @@ class konami573_cassette_slot_device : public device_t, public: konami573_cassette_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_dsr_handler(Object &&cb) { return m_dsr_handler.set_callback(std::forward<Object>(cb)); } + auto dsr_handler() { return m_dsr_handler.bind(); } DECLARE_WRITE_LINE_MEMBER(write_line_d0); DECLARE_WRITE_LINE_MEMBER(write_line_d1); @@ -140,31 +137,6 @@ private: DECLARE_DEVICE_TYPE(KONAMI573_CASSETTE_Y, konami573_cassette_y_device) - -#define MCFG_KONAMI573_CASSETTE_Y_D0_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d0_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D1_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d1_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D2_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d2_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D3_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d3_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D4_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d4_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D5_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d5_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D6_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d6_handler(DEVCB_##_devcb); - -#define MCFG_KONAMI573_CASSETTE_Y_D7_HANDLER(_devcb) \ - downcast<konami573_cassette_y_device &>(*device).set_d7_handler(DEVCB_##_devcb); - class konami573_cassette_y_device: public device_t, public konami573_cassette_interface { @@ -172,14 +144,14 @@ public: konami573_cassette_y_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - template <class Object> devcb_base &set_d0_handler(Object &&cb) { return m_d0_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d1_handler(Object &&cb) { return m_d1_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d2_handler(Object &&cb) { return m_d2_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d3_handler(Object &&cb) { return m_d3_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d4_handler(Object &&cb) { return m_d4_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d5_handler(Object &&cb) { return m_d5_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d6_handler(Object &&cb) { return m_d6_handler.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_d7_handler(Object &&cb) { return m_d7_handler.set_callback(std::forward<Object>(cb)); } + auto d0_handler() { return m_d0_handler.bind(); } + auto d1_handler() { return m_d1_handler.bind(); } + auto d2_handler() { return m_d2_handler.bind(); } + auto d3_handler() { return m_d3_handler.bind(); } + auto d4_handler() { return m_d4_handler.bind(); } + auto d5_handler() { return m_d5_handler.bind(); } + auto d6_handler() { return m_d6_handler.bind(); } + auto d7_handler() { return m_d7_handler.bind(); } virtual DECLARE_READ_LINE_MEMBER(read_line_secflash_sda) override; virtual DECLARE_WRITE_LINE_MEMBER(write_line_d0) override; diff --git a/src/mame/machine/maple-dc.cpp b/src/mame/machine/maple-dc.cpp index 2d1b962669a..77705c6556b 100644 --- a/src/mame/machine/maple-dc.cpp +++ b/src/mame/machine/maple-dc.cpp @@ -18,13 +18,13 @@ void maple_dc_device::amap(address_map &map) } maple_dc_device::maple_dc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, MAPLE_DC, tag, owner, clock) + : device_t(mconfig, MAPLE_DC, tag, owner, clock), + cpu(*this, finder_base::DUMMY_TAG), + irq_cb(*this) { // Do not move that in device_start or there will be a race // condition with the maple devices call to register_port. memset(devices, 0, sizeof(devices)); - cpu = nullptr; - irq_cb = nullptr; } void maple_dc_device::register_port(int port, maple_device *device) @@ -38,8 +38,8 @@ void maple_dc_device::register_port(int port, maple_device *device) void maple_dc_device::device_start() { logerror("maple_dc_device started\n"); - cpu = machine().device<sh4_device>(maincpu_tag); timer = timer_alloc(0); + irq_cb.resolve_safe(); mdstar = 0; @@ -86,8 +86,7 @@ void maple_dc_device::device_timer(emu_timer &timer, device_timer_id id, int par case DMA_DONE: dma_state = DMA_IDLE; mdst = 0; - if(irq_cb) - irq_cb(machine()); + irq_cb(DMA_MAPLE_IRQ); break; default: diff --git a/src/mame/machine/maple-dc.h b/src/mame/machine/maple-dc.h index 860294e2d4f..d0219f674fa 100644 --- a/src/mame/machine/maple-dc.h +++ b/src/mame/machine/maple-dc.h @@ -7,19 +7,25 @@ #include "cpu/sh/sh4.h" -#define MCFG_MAPLE_DC_ADD(_tag, _maincpu_tag, _irq_cb) \ - MCFG_DEVICE_ADD(_tag, MAPLE_DC, 0) \ - downcast<maple_dc_device &>(*device).set_maincpu_tag(_maincpu_tag); \ - downcast<maple_dc_device &>(*device).set_irq_cb(_irq_cb); - class maple_device; class maple_dc_device : public device_t { public: + enum { + DMA_MAPLE_IRQ + }; + + template <typename T> + maple_dc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag) + : maple_dc_device(mconfig, tag, owner, clock) + { + set_maincpu_tag(std::forward<T>(cpu_tag)); + } + maple_dc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void set_maincpu_tag(const char *new_maincpu_tag) { maincpu_tag = new_maincpu_tag; } - void set_irq_cb(void (*new_irq_cb)(running_machine &)) { irq_cb = new_irq_cb; } + template <typename T> void set_maincpu_tag(T &&cpu_tag) { cpu.set_tag(std::forward<T>(cpu_tag)); } + auto irq_callback() { return irq_cb.bind(); } DECLARE_READ32_MEMBER(sb_mdstar_r); // 5f6c04 DECLARE_WRITE32_MEMBER(sb_mdstar_w); @@ -59,7 +65,7 @@ private: maple_device *devices[4]; - sh4_device *cpu; + required_device<sh4_device> cpu; emu_timer *timer; uint32_t mdstar, mden, mdst, msys; @@ -67,11 +73,9 @@ private: uint32_t dma_state, dma_adr, dma_port, dma_dest; bool dma_endflag; - void (*irq_cb)(running_machine &); + devcb_write8 irq_cb; void dma_step(); - - const char *maincpu_tag; }; DECLARE_DEVICE_TYPE(MAPLE_DC, maple_dc_device) diff --git a/src/mame/machine/mhavoc.cpp b/src/mame/machine/mhavoc.cpp index fe4395c8c04..69f341fd71a 100644 --- a/src/mame/machine/mhavoc.cpp +++ b/src/mame/machine/mhavoc.cpp @@ -139,14 +139,14 @@ TIMER_CALLBACK_MEMBER(mhavoc_state::delayed_gamma_w) WRITE8_MEMBER(mhavoc_state::mhavoc_gamma_w) { - logerror(" writing to gamma processor: %02x (%d %d)\n", data, m_gamma_rcvd, m_alpha_xmtd); + //logerror(" writing to gamma processor: %02x (%d %d)\n", data, m_gamma_rcvd, m_alpha_xmtd); machine().scheduler().synchronize(timer_expired_delegate(FUNC(mhavoc_state::delayed_gamma_w),this), data); } READ8_MEMBER(mhavoc_state::mhavoc_alpha_r) { - logerror("\t\t\t\t\treading from alpha processor: %02x (%d %d)\n", m_alpha_data, m_gamma_rcvd, m_alpha_xmtd); + //logerror("\t\t\t\t\treading from alpha processor: %02x (%d %d)\n", m_alpha_data, m_gamma_rcvd, m_alpha_xmtd); m_gamma_rcvd = 1; m_alpha_xmtd = 0; return m_alpha_data; @@ -162,7 +162,7 @@ READ8_MEMBER(mhavoc_state::mhavoc_alpha_r) WRITE8_MEMBER(mhavoc_state::mhavoc_alpha_w) { - logerror("\t\t\t\t\twriting to alpha processor: %02x %d %d\n", data, m_alpha_rcvd, m_gamma_xmtd); + //logerror("\t\t\t\t\twriting to alpha processor: %02x %d %d\n", data, m_alpha_rcvd, m_gamma_xmtd); m_alpha_rcvd = 0; m_gamma_xmtd = 1; m_gamma_data = data; @@ -171,7 +171,7 @@ WRITE8_MEMBER(mhavoc_state::mhavoc_alpha_w) READ8_MEMBER(mhavoc_state::mhavoc_gamma_r) { - logerror(" reading from gamma processor: %02x (%d %d)\n", m_gamma_data, m_alpha_rcvd, m_gamma_xmtd); + //logerror(" reading from gamma processor: %02x (%d %d)\n", m_gamma_data, m_alpha_rcvd, m_gamma_xmtd); m_alpha_rcvd = 1; m_gamma_xmtd = 0; return m_gamma_data; @@ -258,7 +258,7 @@ WRITE8_MEMBER(mhavoc_state::mhavoc_out_0_w) m_gamma->set_input_line(INPUT_LINE_RESET, (data & 0x08) ? CLEAR_LINE : ASSERT_LINE); if (!(data & 0x08)) { - logerror("\t\t\t\t*** resetting gamma processor. ***\n"); + //logerror("\t\t\t\t*** resetting gamma processor. ***\n"); m_alpha_rcvd = 0; m_alpha_xmtd = 0; m_gamma_rcvd = 0; @@ -287,7 +287,7 @@ WRITE8_MEMBER(mhavoc_state::alphaone_out_0_w) /* Bit 0 = left coin counter */ machine().bookkeeping().coin_counter_w(0, data & 0x01); -logerror("alphaone_out_0_w(%02X)\n", data); + //logerror("alphaone_out_0_w(%02X)\n", data); } @@ -325,8 +325,7 @@ WRITE8_MEMBER(mhavoc_state::mhavocrv_speech_strobe_w) void mhavoc_state::init_mhavocrv() { - /* install the speech support that was only optionally stuffed for use */ - /* in the Return to Vax hack */ + // For Return to Vax, add support for the normally-unused speech module. m_gamma->space(AS_PROGRAM).install_write_handler(0x5800, 0x5800, write8_delegate(FUNC(mhavoc_state::mhavocrv_speech_data_w),this)); m_gamma->space(AS_PROGRAM).install_write_handler(0x5900, 0x5900, write8_delegate(FUNC(mhavoc_state::mhavocrv_speech_strobe_w),this)); } diff --git a/src/mame/machine/micropolis.h b/src/mame/machine/micropolis.h index 5f2dd3f7b08..7012690c5d8 100644 --- a/src/mame/machine/micropolis.h +++ b/src/mame/machine/micropolis.h @@ -18,25 +18,6 @@ /*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -#define MCFG_MICROPOLIS_DRIVE_TAGS(_tag1, _tag2, _tag3, _tag4) \ - downcast<micropolis_device &>(*device).set_drive_tags(_tag1, _tag2, _tag3, _tag4); - -#define MCFG_MICROPOLIS_DEFAULT_DRIVE4_TAGS \ - MCFG_MICROPOLIS_DRIVE_TAGS(FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3) - -#define MCFG_MICROPOLIS_DDEN_CALLBACK(_read) \ - downcast<micropolis_device &>(*device).set_dden_rd_callback(DEVCB_##_read); - -#define MCFG_MICROPOLIS_INTRQ_CALLBACK(_write) \ - downcast<micropolis_device &>(*device).set_intrq_wr_callback(DEVCB_##_write); - -#define MCFG_MICROPOLIS_DRQ_CALLBACK(_write) \ - downcast<micropolis_device &>(*device).set_drq_wr_callback(DEVCB_##_write); - -/*************************************************************************** MACROS ***************************************************************************/ @@ -45,9 +26,9 @@ class micropolis_device : public device_t public: micropolis_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_dden_rd_callback(Object &&cb) { return m_read_dden.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_intrq_wr_callback(Object &&cb) { return m_write_intrq.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_drq_wr_callback(Object &&cb) { return m_write_drq.set_callback(std::forward<Object>(cb)); } + auto dden_rd_callback() { return m_read_dden.bind(); } + auto intrq_wr_callback() { return m_write_intrq.bind(); } + auto drq_wr_callback() { return m_write_drq.bind(); } void set_drive_tags(const char *tag1, const char *tag2, const char *tag3, const char *tag4) { @@ -57,6 +38,8 @@ public: m_floppy_drive_tags[3] = tag4; } + void set_default_drive_tags() { set_drive_tags(FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3); } + void set_drive(uint8_t drive); // set current drive (0-3) DECLARE_READ8_MEMBER( status_r ); diff --git a/src/mame/machine/naomibd.cpp b/src/mame/machine/naomibd.cpp index ccff9807234..d0550d6f1c6 100644 --- a/src/mame/machine/naomibd.cpp +++ b/src/mame/machine/naomibd.cpp @@ -75,9 +75,9 @@ void naomi_board::submap(address_map &map) } naomi_board::naomi_board(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : naomi_g1_device(mconfig, type, tag, owner, clock) + : naomi_g1_device(mconfig, type, tag, owner, clock), + eeprom(*this, finder_base::DUMMY_TAG) { - eeprom_tag = nullptr; } void naomi_board::device_start() @@ -90,11 +90,6 @@ void naomi_board::device_start() save_item(NAME(dma_cur_offset)); save_item(NAME(pio_ready)); save_item(NAME(dma_ready)); - - if (eeprom_tag != nullptr) - eeprom = owner()->subdevice<x76f100_device>(eeprom_tag); - else - eeprom = nullptr; } void naomi_board::device_reset() diff --git a/src/mame/machine/naomibd.h b/src/mame/machine/naomibd.h index b6258ad16a6..1786120bd76 100644 --- a/src/mame/machine/naomibd.h +++ b/src/mame/machine/naomibd.h @@ -8,15 +8,9 @@ #include "machine/naomig1.h" #include "machine/x76f100.h" -#define MCFG_NAOMI_BOARD_ADD(_tag, type, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_G1_ADD(_tag, type, _irq_cb) \ - downcast<naomi_board &>(*device).set_eeprom_tag(_eeprom_tag); - class naomi_board : public naomi_g1_device { public: - void set_eeprom_tag(const char *_eeprom_tag) { eeprom_tag = _eeprom_tag; } - // Can be patched in the underlying class virtual void submap(address_map &map) override; @@ -51,13 +45,12 @@ protected: virtual void board_write(offs_t offset, uint16_t data); uint32_t rom_offset; + optional_device<x76f100_device> eeprom; + private: uint32_t dma_offset, dma_cur_offset; uint16_t dma_count; bool pio_ready, dma_ready; - - const char *eeprom_tag; - x76f100_device *eeprom; }; #endif // MAME_MACHINE_NAOMIBD_H diff --git a/src/mame/machine/naomig1.h b/src/mame/machine/naomig1.h index 0458246d815..8533b72b66e 100644 --- a/src/mame/machine/naomig1.h +++ b/src/mame/machine/naomig1.h @@ -7,10 +7,6 @@ #include "cpu/sh/sh4.h" -#define MCFG_NAOMI_G1_ADD(_tag, type, _irq_cb) \ - MCFG_DEVICE_ADD(_tag, type, 0) \ - downcast<naomi_g1_device *>(device)->set_irq_cb(DEVCB_ ## _irq_cb); - class naomi_g1_device : public device_t { public: @@ -20,7 +16,7 @@ public: typedef delegate<void (uint32_t main_adr, void *dma_ptr, uint32_t length, uint32_t size, bool to_mainram)> dma_cb; - template <class Object> void set_irq_cb(Object &&cb) { irq_cb.set_callback(std::forward<Object>(cb)); } + auto irq_callback() { return irq_cb.bind(); } void set_dma_cb(dma_cb cb) { _dma_cb = cb; } void amap(address_map &map); diff --git a/src/mame/machine/naomigd.cpp b/src/mame/machine/naomigd.cpp index b25db732944..ddf8716bd40 100644 --- a/src/mame/machine/naomigd.cpp +++ b/src/mame/machine/naomigd.cpp @@ -402,10 +402,10 @@ void naomi_gdrom_board::write_from_qword(uint8_t *region, uint64_t qword) } naomi_gdrom_board::naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : naomi_board(mconfig, NAOMI_GDROM_BOARD, tag, owner, clock) + : naomi_board(mconfig, NAOMI_GDROM_BOARD, tag, owner, clock), + picdata(*this, finder_base::DUMMY_TAG) { image_tag = nullptr; - pic_tag = nullptr; } void naomi_gdrom_board::find_file(const char *name, const uint8_t *dir_sector, uint32_t &file_start, uint32_t &file_size) @@ -465,11 +465,9 @@ void naomi_gdrom_board::device_start() uint64_t key; uint8_t netpic = 0; - memory_region *mr = memregion(pic_tag); - const uint8_t *picdata = mr->base(); if(picdata) { - if(memregion(pic_tag)->bytes() >= 0x4000) { + if(picdata.length() >= 0x4000) { printf("Real PIC binary found\n"); for(int i=0;i<7;i++) name[i] = picdata[0x7c0+i*2]; diff --git a/src/mame/machine/naomigd.h b/src/mame/machine/naomigd.h index 4736d274b66..c220e5a77eb 100644 --- a/src/mame/machine/naomigd.h +++ b/src/mame/machine/naomigd.h @@ -7,19 +7,32 @@ #include "machine/naomibd.h" -#define MCFG_NAOMI_GDROM_BOARD_ADD(_tag, _image_tag, _pic_tag, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_GDROM_BOARD, _eeprom_tag, _irq_cb) \ - downcast<naomi_gdrom_board &>(*device).set_tags(_image_tag, _pic_tag); class naomi_gdrom_board : public naomi_board { public: + template <typename T, typename U> + naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&eeprom_tag, const char *_image_tag, U &&picregion_tag) + : naomi_gdrom_board(mconfig, tag, owner, clock) + { + eeprom.set_tag(std::forward<T>(eeprom_tag)); + set_image_tag(_image_tag); + picdata.set_tag(std::forward<U>(picregion_tag)); + } + + template <typename T> + naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, const char *_image_tag, T &&picregion_tag) + : naomi_gdrom_board(mconfig, tag, owner, clock) + { + picdata.set_tag(std::forward<T>(picregion_tag)); + set_image_tag(_image_tag); + } + naomi_gdrom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void set_tags(const char *_image_tag, const char *_pic_tag) + void set_image_tag(const char *_image_tag) { image_tag = _image_tag; - pic_tag = _pic_tag; } uint8_t *memory(uint32_t &size) { size = dimm_data_size; return dimm_data; } @@ -37,7 +50,8 @@ protected: private: enum { FILENAME_LENGTH=24 }; - const char *image_tag, *pic_tag; + const char *image_tag; + optional_region_ptr<uint8_t> picdata; uint32_t dimm_cur_address; diff --git a/src/mame/machine/naomim1.h b/src/mame/machine/naomim1.h index ffad96cb947..b0702b7c772 100644 --- a/src/mame/machine/naomim1.h +++ b/src/mame/machine/naomim1.h @@ -7,12 +7,17 @@ #include "naomibd.h" -#define MCFG_NAOMI_M1_BOARD_ADD(_tag, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M1_BOARD, _eeprom_tag, _irq_cb) class naomi_m1_board : public naomi_board { public: + template <typename T> + naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&eeprom_tag) + : naomi_m1_board(mconfig, tag, owner, clock) + { + eeprom.set_tag(std::forward<T>(eeprom_tag)); + } + naomi_m1_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void submap(address_map &map) override; diff --git a/src/mame/machine/naomim2.cpp b/src/mame/machine/naomim2.cpp index 39e7b56c4fe..16368a77467 100644 --- a/src/mame/machine/naomim2.cpp +++ b/src/mame/machine/naomim2.cpp @@ -200,7 +200,8 @@ uint16_t naomi_m2_board::read_callback(uint32_t addr) } } -MACHINE_CONFIG_START(naomi_m2_board::device_add_mconfig) - MCFG_DEVICE_ADD("segam2crypt", SEGA315_5881_CRYPT, 0) - MCFG_SET_READ_CALLBACK(naomi_m2_board, read_callback) -MACHINE_CONFIG_END +void naomi_m2_board::device_add_mconfig(machine_config &config) +{ + SEGA315_5881_CRYPT(config, m_cryptdevice, 0); + m_cryptdevice->set_read_cb(FUNC(naomi_m2_board::read_callback)); +} diff --git a/src/mame/machine/naomim2.h b/src/mame/machine/naomim2.h index 3c8a3fba553..e94a5c26c8c 100644 --- a/src/mame/machine/naomim2.h +++ b/src/mame/machine/naomim2.h @@ -9,12 +9,16 @@ #include "315-5881_crypt.h" -#define MCFG_NAOMI_M2_BOARD_ADD(_tag, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M2_BOARD, _eeprom_tag, _irq_cb) - class naomi_m2_board : public naomi_board { public: + template <typename T> + naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&eeprom_tag) + : naomi_m2_board(mconfig, tag, owner, clock) + { + eeprom.set_tag(std::forward<T>(eeprom_tag)); + } + naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); uint32_t rom_cur_address; static const int RAM_SIZE = 65536; diff --git a/src/mame/machine/naomim4.h b/src/mame/machine/naomim4.h index 28ef730a1b3..1ecab27a87b 100644 --- a/src/mame/machine/naomim4.h +++ b/src/mame/machine/naomim4.h @@ -5,16 +5,19 @@ #include "naomibd.h" -#define MCFG_NAOMI_M4_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M4_BOARD, _eeprom_tag, _irq_cb) \ - downcast<naomi_m4_board &>(*device).set_tags(_key_tag); class naomi_m4_board : public naomi_board { public: - naomi_m4_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template <typename T, typename U> + naomi_m4_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&eeprom_tag, U &&keyregion_tag) + : naomi_m4_board(mconfig, tag, owner, clock) + { + eeprom.set_tag(std::forward<T>(eeprom_tag)); + m_key_data.set_tag(std::forward<U>(keyregion_tag)); + } - void set_tags(const char *key_tag) { m_key_data.set_tag(key_tag); } + naomi_m4_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void submap(address_map &map) override; diff --git a/src/mame/machine/naomirom.h b/src/mame/machine/naomirom.h index fc23b604058..76dad495ba9 100644 --- a/src/mame/machine/naomirom.h +++ b/src/mame/machine/naomirom.h @@ -5,12 +5,16 @@ #include "naomibd.h" -#define MCFG_NAOMI_ROM_BOARD_ADD(_tag, _eeprom_tag, _irq_cb) \ - MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_ROM_BOARD, _eeprom_tag, _irq_cb) - class naomi_rom_board : public naomi_board { public: + template <typename T> + naomi_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&eeprom_tag) + : naomi_rom_board(mconfig, tag, owner, clock) + { + eeprom.set_tag(std::forward<T>(eeprom_tag)); + } + naomi_rom_board(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: diff --git a/src/mame/machine/nb1413m3.h b/src/mame/machine/nb1413m3.h index 3c2c8001edf..f730f87341b 100644 --- a/src/mame/machine/nb1413m3.h +++ b/src/mame/machine/nb1413m3.h @@ -124,12 +124,15 @@ enum { NB1413M3_PAIRSTEN }; -#define MCFG_NB1413M3_TYPE(_type) \ - downcast<nb1413m3_device &>(*device).set_type(_type); - class nb1413m3_device : public device_t { public: + nb1413m3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, int type) : + nb1413m3_device(mconfig, tag, owner, clock) + { + set_type(type); + } + nb1413m3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); ~nb1413m3_device() {} @@ -200,8 +203,4 @@ INPUT_PORTS_EXTERN( nbhf2_ctrl ); DECLARE_DEVICE_TYPE(NB1413M3, nb1413m3_device) - -#define MCFG_NB1413M3_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, NB1413M3, 0) - #endif // MAME_MACHINE_NB1413M3_H diff --git a/src/mame/machine/pc1251.cpp b/src/mame/machine/pc1251.cpp index 852db32b352..7abc31af973 100644 --- a/src/mame/machine/pc1251.cpp +++ b/src/mame/machine/pc1251.cpp @@ -8,121 +8,72 @@ /* C-CE while reset, program will not be destroyed! */ - - -WRITE8_MEMBER(pc1251_state::pc1251_outa) -{ - m_outa = data; -} - -WRITE8_MEMBER(pc1251_state::pc1251_outb) +WRITE8_MEMBER(pc1251_state::out_b_w) { m_outb = data; } -WRITE8_MEMBER(pc1251_state::pc1251_outc) +WRITE8_MEMBER(pc1251_state::out_c_w) { } -READ8_MEMBER(pc1251_state::pc1251_ina) +READ8_MEMBER(pc1251_state::in_a_r) { int data = m_outa; - if (m_outb & 0x01) + if (BIT(m_outb, 0)) { - data |= ioport("KEY0")->read(); + data |= m_keys[0]->read(); /* At Power Up we fake a 'CL' pressure */ if (m_power) data |= 0x02; // problem with the deg lcd } - if (m_outb & 0x02) - data |= ioport("KEY1")->read(); - - if (m_outb & 0x04) - data |= ioport("KEY2")->read(); - - if (m_outa & 0x01) - data |= ioport("KEY3")->read(); + for (int bit = 0, key = 1; bit < 3; bit++, key++) + if (BIT(m_outb, bit)) + data |= m_keys[key]->read(); - if (m_outa & 0x02) - data |= ioport("KEY4")->read(); - - if (m_outa & 0x04) - data |= ioport("KEY5")->read(); - - if (m_outa & 0x08) - data |= ioport("KEY6")->read(); - - if (m_outa & 0x10) - data |= ioport("KEY7")->read(); - - if (m_outa & 0x20) - data |= ioport("KEY8")->read(); - - if (m_outa & 0x40) - data |= ioport("KEY9")->read(); + for (int bit = 0, key = 3; bit < 7; bit++, key++) + if (BIT(m_outa, bit)) + data |= m_keys[key]->read(); return data; } -READ8_MEMBER(pc1251_state::pc1251_inb) +READ8_MEMBER(pc1251_state::in_b_r) { int data = m_outb; - if (m_outb & 0x08) - data |= (ioport("MODE")->read() & 0x07); + if (BIT(m_outb, 3)) + data |= m_mode->read() & 0x07; return data; } -READ_LINE_MEMBER(pc1251_state::pc1251_brk) +READ_LINE_MEMBER(pc1251_state::reset_r) { - return (ioport("EXTRA")->read() & 0x01); -} - -READ_LINE_MEMBER(pc1251_state::pc1251_reset) -{ - return (ioport("EXTRA")->read() & 0x02); + return BIT(m_extra->read(), 1); } void pc1251_state::machine_start() { - uint8_t *ram = memregion("maincpu")->base() + 0x8000; - uint8_t *cpu = m_maincpu->internal_ram(); - - m_cpu_nvram->set_base(cpu, 96); - m_ram_nvram->set_base(ram, 0x4800); -} + pocketc_state::machine_start(); -MACHINE_START_MEMBER(pc1251_state,pc1260 ) -{ - uint8_t *ram = memregion("maincpu")->base() + 0x4000; - uint8_t *cpu = m_maincpu->internal_ram(); + m_ram_nvram->set_base(memregion("maincpu")->base() + 0x8000, 0x4800); - m_cpu_nvram->set_base(cpu, 96); - m_ram_nvram->set_base(ram, 0x2800); + uint8_t *gfx = memregion("gfx1")->base(); + for (int i = 0; i < 128; i++) + gfx[i] = i; } -void pc1251_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc1260_state::machine_start() { - switch (id) - { - case TIMER_POWER_UP: - m_power = 0; - break; - default: - assert_always(false, "Unknown id in pc1251_state::device_timer"); - } -} + pocketc_state::machine_start(); + + m_ram_nvram->set_base(memregion("maincpu")->base() + 0x4000, 0x2800); -void pc1251_state::init_pc1251() -{ uint8_t *gfx = memregion("gfx1")->base(); for (int i = 0; i < 128; i++) gfx[i] = i; - - m_power = 1; - timer_set(attotime::from_seconds(1), TIMER_POWER_UP); } diff --git a/src/mame/machine/pc1350.cpp b/src/mame/machine/pc1350.cpp index e7fa3699aff..b5f0d881877 100644 --- a/src/mame/machine/pc1350.cpp +++ b/src/mame/machine/pc1350.cpp @@ -7,102 +7,59 @@ #include "includes/pc1350.h" #include "machine/ram.h" - - -WRITE8_MEMBER(pc1350_state::pc1350_outa) -{ - m_outa=data; -} - -WRITE8_MEMBER(pc1350_state::pc1350_outb) +WRITE8_MEMBER(pc1350_state::out_b_w) { - m_outb=data; + m_outb = data; } -WRITE8_MEMBER(pc1350_state::pc1350_outc) +WRITE8_MEMBER(pc1350_state::out_c_w) { } -READ8_MEMBER(pc1350_state::pc1350_ina) +READ8_MEMBER(pc1350_state::in_a_r) { int data = m_outa; - int t = pc1350_keyboard_line_r(space,0); - - if (t & 0x01) - data |= ioport("KEY0")->read(); + int t = keyboard_line_r(space, 0); - if (t & 0x02) - data |= ioport("KEY1")->read(); + for (int bit = 0; bit < 6; bit++) + if (BIT(t, bit)) + data |= m_keys[bit]->read(); - if (t & 0x04) - data |= ioport("KEY2")->read(); + for (int bit = 0, key = 6; bit < 2; bit++, key++) + if (BIT(m_outa, bit)) + data |= m_keys[key]->read(); - if (t & 0x08) - data |= ioport("KEY3")->read(); - - if (t & 0x10) - data |= ioport("KEY4")->read(); - - if (t & 0x20) - data |= ioport("KEY5")->read(); - - if (m_outa & 0x01) - data |= ioport("KEY6")->read(); - - if (m_outa & 0x02) - data |= ioport("KEY7")->read(); - - if (m_outa & 0x04) + if (BIT(m_outa, 2)) { - data |= ioport("KEY8")->read(); + data |= m_keys[8]->read(); /* At Power Up we fake a 'CLS' pressure */ if (m_power) data |= 0x08; } - if (m_outa & 0x08) - data |= ioport("KEY9")->read(); - - if (m_outa & 0x10) - data |= ioport("KEY10")->read(); + for (int bit = 3, key = 9; bit < 5; bit++, key++) + if (BIT(m_outa, bit)) + data |= m_keys[key]->read(); if (m_outa & 0xc0) - data |= ioport("KEY11")->read(); + data |= m_keys[11]->read(); // missing lshift return data; } -READ8_MEMBER(pc1350_state::pc1350_inb) +READ8_MEMBER(pc1350_state::in_b_r) { return m_outb; } -READ_LINE_MEMBER(pc1350_state::pc1350_brk) -{ - return (ioport("EXTRA")->read() & 0x01); -} - -void pc1350_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_POWER_UP: - m_power=0; - break; - default: - assert_always(false, "Unknown id in pc1350_state::device_timer"); - } -} - void pc1350_state::machine_start() { - address_space &space = m_maincpu->space(AS_PROGRAM); + pocketc_state::machine_start(); - m_power = 1; - timer_set(attotime::from_seconds(1), TIMER_POWER_UP); + address_space &space = m_maincpu->space(AS_PROGRAM); space.install_readwrite_bank(0x6000, 0x6fff, "bank1"); membank("bank1")->set_base(&m_ram->pointer()[0x0000]); @@ -127,9 +84,5 @@ void pc1350_state::machine_start() space.nop_readwrite(0x2000, 0x3fff); } - uint8_t *ram = memregion("maincpu")->base() + 0x2000; - uint8_t *cpu = m_maincpu->internal_ram(); - - subdevice<nvram_device>("cpu_nvram")->set_base(cpu, 96); - subdevice<nvram_device>("ram_nvram")->set_base(ram, 0x5000); + m_ram_nvram->set_base(memregion("maincpu")->base() + 0x2000, 0x5000); } diff --git a/src/mame/machine/pc1401.cpp b/src/mame/machine/pc1401.cpp index d5a7b6fcaea..e29bc1e1ce3 100644 --- a/src/mame/machine/pc1401.cpp +++ b/src/mame/machine/pc1401.cpp @@ -21,222 +21,62 @@ 8 i/o device error 9 other errors*/ - - -WRITE8_MEMBER(pc1401_state::pc1401_outa) -{ - m_outa = data; -} - -WRITE8_MEMBER(pc1401_state::pc1401_outb) +WRITE8_MEMBER(pc1401_state::out_b_w) { m_outb = data; } -WRITE8_MEMBER(pc1401_state::pc1401_outc) +WRITE8_MEMBER(pc1401_state::out_c_w) { - //logerror("%g outc %.2x\n", machine.time().as_double(), data); m_portc = data; } -READ8_MEMBER(pc1401_state::pc1401_ina) +READ8_MEMBER(pc1401_state::in_a_r) { int data = m_outa; - if (m_outb & 0x01) - data |= ioport("KEY0")->read(); - - if (m_outb & 0x02) - data |= ioport("KEY1")->read(); - - if (m_outb & 0x04) - data |= ioport("KEY2")->read(); - - if (m_outb & 0x08) - data |= ioport("KEY3")->read(); - - if (m_outb & 0x10) - data |= ioport("KEY4")->read(); + for (int bit = 0; bit < 5; bit++) + if (BIT(m_outb, 0)) + data |= m_keys[bit]->read(); if (m_outb & 0x20) { - data |= ioport("KEY5")->read(); + data |= m_keys[5]->read(); /* At Power Up we fake a 'C-CE' pressure */ if (m_power) data |= 0x01; } - if (m_outa & 0x01) - data |= ioport("KEY6")->read(); - - if (m_outa & 0x02) - data |= ioport("KEY7")->read(); - - if (m_outa & 0x04) - data |= ioport("KEY8")->read(); - - if (m_outa & 0x08) - data |= ioport("KEY9")->read(); - - if (m_outa & 0x10) - data |= ioport("KEY10")->read(); - - if (m_outa & 0x20) - data |= ioport("KEY11")->read(); - - if (m_outa & 0x40) - data |= ioport("KEY12")->read(); + for (int bit = 0, key = 6; bit < 7; bit++, key++) + if (BIT(m_outa, bit)) + data |= m_keys[key]->read(); return data; } -READ8_MEMBER(pc1401_state::pc1401_inb) +READ8_MEMBER(pc1401_state::in_b_r) { - int data=m_outb; + int data = m_outb; - if (ioport("EXTRA")->read() & 0x04) + if (BIT(m_extra->read(), 2)) data |= 0x01; return data; } -READ_LINE_MEMBER(pc1401_state::pc1401_brk) +READ_LINE_MEMBER(pc1401_state::reset_r) { - return (ioport("EXTRA")->read() & 0x01); -} - -READ_LINE_MEMBER(pc1401_state::pc1401_reset) -{ - return (ioport("EXTRA")->read() & 0x02); + return (m_extra->read() & 0x02); } void pc1401_state::machine_start() { - uint8_t *ram = memregion("maincpu")->base() + 0x2000; - uint8_t *cpu = m_maincpu->internal_ram(); + pocketc_state::machine_start(); - subdevice<nvram_device>("cpu_nvram")->set_base(cpu, 96); - subdevice<nvram_device>("ram_nvram")->set_base(ram, 0x2800); -} + m_ram_nvram->set_base(memregion("maincpu")->base() + 0x2000, 0x2800); -void pc1401_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_POWER_UP: - m_power = 0; - break; - default: - assert_always(false, "Unknown id in pc1401_state::device_timer"); - } -} - -void pc1401_state::init_pc1401() -{ - int i; - uint8_t *gfx=memregion("gfx1")->base(); -#if 0 - static const char sucker[]={ - /* this routine dump the memory (start 0) - in an endless loop, - the pc side must be started before this - its here to allow verification of the decimal data - in mame disassembler - */ -#if 1 - 18,4,/*lip xl */ - 2,0,/*lia 0 startaddress low */ - 219,/*exam */ - 18,5,/*lip xh */ - 2,0,/*lia 0 startaddress high */ - 219,/*exam */ -/*400f x: */ - /* dump internal rom */ - 18,5,/*lip 4 */ - 89,/*ldm */ - 218,/*exab */ - 18,4,/*lip 5 */ - 89,/*ldm */ - 4,/*ix for increasing x */ - 0,0,/*lii,0 */ - 18,20,/*lip 20 */ - 53, /* */ - 18,20,/* lip 20 */ - 219,/*exam */ -#else - 18,4,/*lip xl */ - 2,255,/*lia 0 */ - 219,/*exam */ - 18,5,/*lip xh */ - 2,255,/*lia 0 */ - 219,/*exam */ -/*400f x: */ - /* dump external memory */ - 4, /*ix */ - 87,/* ldd */ -#endif - 218,/*exab */ - - - - 0,4,/*lii 4 */ - - /*a: */ - 218,/* exab */ - 90,/* sl */ - 218,/* exab */ - 18,94,/* lip 94 */ - 96,252,/* anma 252 */ - 2,2, /*lia 2 */ - 196,/* adcm */ - 95,/* outf */ - /*b: */ - 204,/*inb */ - 102,128,/*tsia 0x80 */ -#if 0 - 41,4,/* jnzm b */ -#else - /* input not working reliable! */ - /* so handshake removed, PC side must run with disabled */ - /* interrupt to not lose data */ - 78,20, /*wait 20 */ -#endif - - 218,/* exab */ - 90,/* sl */ - 218,/* exab */ - 18,94,/* lip 94 */ - 96,252,/*anma 252 */ - 2,0,/* lia 0 */ - 196,/*adcm */ - 95,/* outf */ - /*c: */ - 204,/*inb */ - 102,128,/*tsia 0x80 */ -#if 0 - 57,4,/* jzm c */ -#else - 78,20, /*wait 20 */ -#endif - - 65,/*deci */ - 41,34,/*jnzm a */ - - 41,41,/*jnzm x: */ - - 55,/* rtn */ - }; - - int i = 0; - for (; i < sizeof(sucker); i++) - pc1401_mem[0x4000 + i] = sucker[i]; - logerror("%d %d\n", i, 0x4000 + i); -#endif - - for (i = 0; i < 128; i++) + uint8_t *gfx = memregion("gfx1")->base(); + for (int i = 0; i < 128; i++) gfx[i] = i; - - m_power = 1; - timer_set(attotime::from_seconds(1), TIMER_POWER_UP); } diff --git a/src/mame/machine/pc1403.cpp b/src/mame/machine/pc1403.cpp index e0e84a515b3..36cb2b0eaaa 100644 --- a/src/mame/machine/pc1403.cpp +++ b/src/mame/machine/pc1403.cpp @@ -7,10 +7,12 @@ #include "includes/pc1403.h" #include "machine/ram.h" -/* C-CE while reset, program will not be destroyed! */ - +#define LOG_ASIC (1 << 0) +#define VERBSOE (0) +#include "logmacro.h" +/* C-CE while reset, program will not be destroyed! */ /* port 2: @@ -19,155 +21,84 @@ bits 0..6 keyboard output select matrix line */ -WRITE8_MEMBER(pc1403_state::pc1403_asic_write) +WRITE8_MEMBER(pc1403_state::asic_write) { - m_asic[offset>>9]=data; - switch( (offset>>9) ){ - case 0/*0x3800*/: - // output - logerror ("asic write %.4x %.2x\n",offset, data); - break; - case 1/*0x3a00*/: - logerror ("asic write %.4x %.2x\n",offset, data); - break; - case 2/*0x3c00*/: - membank("bank1")->set_base(memregion("user1")->base()+((data&7)<<14)); - logerror ("asic write %.4x %.2x\n",offset, data); - break; - case 3/*0x3e00*/: break; + m_asic[offset >> 9] = data; + switch (offset >> 9) + { + case 0: // 0x3800 + // output + LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); + break; + case 1: // 0x3a00 + LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); + break; + case 2: // 0x3c00 + membank("bank1")->set_base(memregion("user1")->base() + ((data & 7) << 14)); + LOGMASKED(LOG_ASIC, "asic write %.4x %.2x\n", offset, data); + break; + case 3: // 0x3e00 + break; } } -READ8_MEMBER(pc1403_state::pc1403_asic_read) +READ8_MEMBER(pc1403_state::asic_read) { - uint8_t data=m_asic[offset>>9]; - switch( (offset>>9) ){ - case 0: case 1: case 2: - logerror ("asic read %.4x %.2x\n",offset, data); - break; + uint8_t data = m_asic[offset >> 9]; + switch (offset >> 9) + { + case 0: + case 1: + case 2: + LOGMASKED(LOG_ASIC, "asic read %.4x %.2x\n", offset, data); + break; } return data; } -WRITE8_MEMBER(pc1403_state::pc1403_outa) +READ8_MEMBER(pc1403_state::in_a_r) { - m_outa=data; -} + uint8_t data = m_outa; -READ8_MEMBER(pc1403_state::pc1403_ina) -{ - uint8_t data=m_outa; + for (int bit = 0; bit < 7; bit++) + if (BIT(m_asic[3], bit)) + data |= m_keys[bit]->read(); - if (m_asic[3] & 0x01) - data |= ioport("KEY0")->read(); - - if (m_asic[3] & 0x02) - data |= ioport("KEY1")->read(); - - if (m_asic[3] & 0x04) - data |= ioport("KEY2")->read(); - - if (m_asic[3] & 0x08) - data |= ioport("KEY3")->read(); - - if (m_asic[3] & 0x10) - data |= ioport("KEY4")->read(); - - if (m_asic[3] & 0x20) - data |= ioport("KEY5")->read(); - - if (m_asic[3] & 0x40) - data |= ioport("KEY6")->read(); - - if (m_outa & 0x01) + if (BIT(m_outa, 0)) { - data |= ioport("KEY7")->read(); + data |= m_keys[7]->read(); /* At Power Up we fake a 'C-CE' pressure */ if (m_power) data |= 0x02; } - if (m_outa & 0x02) - data |= ioport("KEY8")->read(); - - if (m_outa & 0x04) - data |= ioport("KEY9")->read(); - - if (m_outa & 0x08) - data |= ioport("KEY10")->read(); - - if (m_outa & 0x10) - data |= ioport("KEY11")->read(); - - if (m_outa & 0x20) - data |= ioport("KEY12")->read(); - - if (m_outa & 0x40) - data |= ioport("KEY13")->read(); - - return data; -} - -#if 0 -READ8_MEMBER(pc1403_state::pc1403_inb) -{ - int data = m_outb; - - if (ioport("KEY13")->read()) - data |= 1; + for (int bit = 1, key = 8; bit < 7; bit++, key++) + if (BIT(m_outa, bit)) + data |= m_keys[key]->read(); return data; } -#endif -WRITE8_MEMBER(pc1403_state::pc1403_outc) +WRITE8_MEMBER(pc1403_state::out_c_w) { m_portc = data; -// logerror("%s %g pc %.4x outc %.2x\n", machine().describe_context(), machine().time().as_double(), data); -} - - -READ_LINE_MEMBER(pc1403_state::pc1403_brk) -{ - return (ioport("EXTRA")->read() & 0x01); } -READ_LINE_MEMBER(pc1403_state::pc1403_reset) +READ_LINE_MEMBER(pc1403_state::reset_r) { - return (ioport("EXTRA")->read() & 0x02); + return BIT(m_extra->read(), 1); } void pc1403_state::machine_start() { - uint8_t *ram = memregion("maincpu")->base() + 0x8000; - uint8_t *cpu = m_maincpu->internal_ram(); + pocketc_state::machine_start(); - subdevice<nvram_device>("cpu_nvram")->set_base(cpu, 96); - subdevice<nvram_device>("ram_nvram")->set_base(ram, 0x8000); -} - -void pc1403_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_POWER_UP: - m_power=0; - break; - default: - assert_always(false, "Unknown id in pc1403_state::device_timer"); - } -} - -void pc1403_state::init_pc1403() -{ - int i; - uint8_t *gfx=memregion("gfx1")->base(); - - for (i=0; i<128; i++) gfx[i]=i; + membank("bank1")->set_base(memregion("user1")->base()); - m_power = 1; - timer_set(attotime::from_seconds(1), TIMER_POWER_UP); + m_ram_nvram->set_base(memregion("maincpu")->base() + 0x8000, 0x8000); - membank("bank1")->set_base(memregion("user1")->base()); + uint8_t *gfx = memregion("gfx1")->base(); + for (int i = 0; i < 128; i++) + gfx[i] = i; } diff --git a/src/mame/machine/pgm2_memcard.cpp b/src/mame/machine/pgm2_memcard.cpp index 1897b90141b..3e52d7a4eb7 100644 --- a/src/mame/machine/pgm2_memcard.cpp +++ b/src/mame/machine/pgm2_memcard.cpp @@ -45,7 +45,7 @@ void pgm2_memcard_device::device_start() image_init_result pgm2_memcard_device::call_load() { - authenticated = false; + m_authenticated = false; if(length() != 0x108) return image_init_result::FAIL; @@ -65,7 +65,7 @@ image_init_result pgm2_memcard_device::call_load() void pgm2_memcard_device::call_unload() { - authenticated = false; + m_authenticated = false; fseek(0, SEEK_SET); fwrite(m_memcard_data, 0x100); fwrite(m_protection_data, 4); @@ -74,7 +74,7 @@ void pgm2_memcard_device::call_unload() image_init_result pgm2_memcard_device::call_create(int format_type, util::option_resolution *format_options) { - authenticated = false; + m_authenticated = false; // cards must contain valid defaults for each game / region or they don't work? memory_region *rgn = memregion("^default_card"); @@ -92,16 +92,16 @@ image_init_result pgm2_memcard_device::call_create(int format_type, util::option return image_init_result::PASS; } -void pgm2_memcard_device::auth(uint8_t p1, uint8_t p2, uint8_t p3) +void pgm2_memcard_device::auth(u8 p1, u8 p2, u8 p3) { if (m_security_data[0] & 7) { if (m_security_data[1] == p1 && m_security_data[2] == p2 && m_security_data[3] == p3) { - authenticated = true; + m_authenticated = true; m_security_data[0] = 7; } else { - authenticated = false; + m_authenticated = false; m_security_data[0] >>= 1; // hacky if (m_security_data[0] & 7) popmessage("Wrong IC Card password !!!\n"); @@ -111,39 +111,39 @@ void pgm2_memcard_device::auth(uint8_t p1, uint8_t p2, uint8_t p3) } } -READ8_MEMBER(pgm2_memcard_device::read) +u8 pgm2_memcard_device::read(offs_t offset) { return m_memcard_data[offset]; } -WRITE8_MEMBER(pgm2_memcard_device::write) +void pgm2_memcard_device::write(offs_t offset, u8 data) { - if (authenticated && (offset >= 0x20 || (m_protection_data[offset>>3] & (1 <<(offset & 7))))) + if (m_authenticated && (offset >= 0x20 || (m_protection_data[offset>>3] & (1 <<(offset & 7))))) { m_memcard_data[offset] = data; } } -READ8_MEMBER(pgm2_memcard_device::read_prot) +u8 pgm2_memcard_device::read_prot(offs_t offset) { return m_protection_data[offset]; } -WRITE8_MEMBER(pgm2_memcard_device::write_prot) +void pgm2_memcard_device::write_prot(offs_t offset, u8 data) { - if (authenticated) + if (m_authenticated) m_protection_data[offset] &= data; } -READ8_MEMBER(pgm2_memcard_device::read_sec) +u8 pgm2_memcard_device::read_sec(offs_t offset) { - if (!authenticated) + if (!m_authenticated) return 0xff; // guess return m_security_data[offset]; } -WRITE8_MEMBER(pgm2_memcard_device::write_sec) +void pgm2_memcard_device::write_sec(offs_t offset, u8 data) { - if (authenticated) + if (m_authenticated) m_security_data[offset] = data; } diff --git a/src/mame/machine/pgm2_memcard.h b/src/mame/machine/pgm2_memcard.h index 6068e7c4482..5f6d5455a97 100644 --- a/src/mame/machine/pgm2_memcard.h +++ b/src/mame/machine/pgm2_memcard.h @@ -43,21 +43,21 @@ public: // device-level overrides virtual void device_start() override; - DECLARE_READ8_MEMBER(read); - DECLARE_WRITE8_MEMBER(write); - DECLARE_READ8_MEMBER(read_prot); - DECLARE_WRITE8_MEMBER(write_prot); - DECLARE_READ8_MEMBER(read_sec); - DECLARE_WRITE8_MEMBER(write_sec); - void auth(uint8_t p1, uint8_t p2, uint8_t p3); + u8 read(offs_t offset); + void write(offs_t offset, u8 data); + u8 read_prot(offs_t offset); + void write_prot(offs_t offset, u8 data); + u8 read_sec(offs_t offset); + void write_sec(offs_t offset, u8 data); + void auth(u8 p1, u8 p2, u8 p3); /* returns the index of the current memory card, or -1 if none */ int present() { return is_loaded() ? 0 : -1; } private: - uint8_t m_memcard_data[0x100]; - uint8_t m_protection_data[4]; - uint8_t m_security_data[4]; - bool authenticated; + u8 m_memcard_data[0x100]; + u8 m_protection_data[4]; + u8 m_security_data[4]; + bool m_authenticated; }; diff --git a/src/mame/machine/pocketc.cpp b/src/mame/machine/pocketc.cpp new file mode 100644 index 00000000000..3b51ca442d0 --- /dev/null +++ b/src/mame/machine/pocketc.cpp @@ -0,0 +1,38 @@ +// license:GPL-2.0+ +// copyright-holders:Peter Trauner + +#include "includes/pocketc.h" + +WRITE8_MEMBER(pocketc_state::out_a_w) +{ + m_outa = data; +} + +READ_LINE_MEMBER(pocketc_state::brk_r) +{ + return BIT(m_extra->read(), 0); +} + +void pocketc_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_POWER_UP: + m_power = 0; + break; + default: + assert_always(false, "Unknown id in pocketc_state::device_timer"); + } +} + +void pocketc_state::machine_start() +{ + m_cpu_nvram->set_base(m_maincpu->internal_ram(), 96); + m_power_timer = timer_alloc(TIMER_POWER_UP); +} + +void pocketc_state::machine_reset() +{ + m_power = 1; + m_power_timer->adjust(attotime::from_seconds(1)); +} diff --git a/src/mame/machine/prof80mmu.h b/src/mame/machine/prof80mmu.h index 7c64f70cb5d..3ad54bb70dc 100644 --- a/src/mame/machine/prof80mmu.h +++ b/src/mame/machine/prof80mmu.h @@ -12,18 +12,6 @@ #pragma once - - -///************************************************************************* -// INTERFACE CONFIGURATION MACROS -///************************************************************************* - -#define MCFG_PROF80_MMU_ADD(_tag, _program_map) \ - MCFG_DEVICE_ADD(_tag, PROF80_MMU, 0) \ - MCFG_DEVICE_ADDRESS_MAP(AS_PROGRAM, _program_map) - - - ///************************************************************************* // TYPE DEFINITIONS ///************************************************************************* diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h index 5739e85855f..beaed7a9b33 100644 --- a/src/mame/machine/segaic16.h +++ b/src/mame/machine/segaic16.h @@ -19,26 +19,6 @@ //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_SEGA_315_5195_CPU(_cputag) \ - downcast<sega_315_5195_mapper_device &>(*device).set_cputag(_cputag); -#define MCFG_SEGA_315_5195_MAPPER_HANDLER(_class, _mapper) \ - downcast<sega_315_5195_mapper_device &>(*device).set_mapper(sega_315_5195_mapper_device::mapper_delegate(&_class::_mapper, #_class "::" #_mapper, nullptr, (_class *)nullptr)); -#define MCFG_SEGA_315_5195_PBF_CALLBACK(_devcb) \ - downcast<sega_315_5195_mapper_device &>(*device).set_pbf_callback(DEVCB_##_devcb); -#define MCFG_SEGA_315_5195_MCU_INT_CALLBACK(_devcb) \ - downcast<sega_315_5195_mapper_device &>(*device).set_mcu_int_callback(DEVCB_##_devcb); - -#define MCFG_SEGA_315_5248_MULTIPLIER_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, SEGA_315_5248_MULTIPLIER, 0) - -#define MCFG_SEGA_315_5249_DIVIDER_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, SEGA_315_5249_DIVIDER, 0) - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -62,7 +42,7 @@ protected: // internal helpers void palette_init(); -public: // -- stupid system16.c +public: // -- stupid system16.cpp // memory pointers required_shared_ptr<uint16_t> m_paletteram; protected: @@ -97,25 +77,8 @@ public: sega_315_5195_mapper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // configuration helpers - void set_cputag(const char *cpu) - { - m_cpu.set_tag(cpu); - m_cpuregion.set_tag(cpu); - } - - void set_mapper(mapper_delegate callback) { m_mapper = callback; } - template <class FunctionClass> void set_mapper(const char *devname - , void (FunctionClass::*callback)(sega_315_5195_mapper_device &, uint8_t), const char *name) - { - set_mapper(mapper_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); - } - template <class FunctionClass> void set_mapper(void (FunctionClass::*callback)(sega_315_5195_mapper_device &, uint8_t), const char *name) - { - set_mapper(mapper_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); - } + template <typename... T> void set_mapper(T &&... args) { m_mapper = mapper_delegate(std::forward<T>(args)...); } - template<class Object> devcb_base &set_pbf_callback(Object &&object) { return m_pbf_callback.set_callback(std::forward<Object>(object)); } - template<class Object> devcb_base &set_mcu_int_callback(Object &&object) { return m_mcu_int_callback.set_callback(std::forward<Object>(object)); } auto pbf() { return m_pbf_callback.bind(); } auto mcu_int() { return m_mcu_int_callback.bind(); } diff --git a/src/mame/machine/slapstic.cpp b/src/mame/machine/slapstic.cpp index d2cb18a75cc..67b30cae493 100644 --- a/src/mame/machine/slapstic.cpp +++ b/src/mame/machine/slapstic.cpp @@ -135,9 +135,10 @@ 137412-109 Road Blasters (some versions) 137412-110 Road Blasters 137412-110 APB - 137412-111 Pit Fighter - 137412-112 Pit Fighter (Europe) - 137412-113 Unknown (Europe) + 137412-111 Pit Fighter (Aug 09, 1990 to Aug 22, 1990) + 137412-112 Pit Fighter (Aug 22, 1990 to Oct 01, 1990) + 137412-113 Pit Fighter (Oct 09, 1990 to Oct 12, 1990) + 137412-114 Pit Fighter (Nov 01, 1990 and later) 137412-115 Race Drivin' DSK board 137412-116 Hydra 137412-116 Tournament Cyberball 2072 @@ -511,7 +512,7 @@ static const struct slapstic_data slapstic110 = * *************************************/ -/* slapstic 137412-111: Pit Fighter (confirmed) */ +/* slapstic 137412-111: Pit Fighter (Aug 09, 1990 to Aug 22, 1990) (confirmed) */ static const struct slapstic_data slapstic111 = { /* basic banking */ @@ -537,7 +538,7 @@ static const struct slapstic_data slapstic111 = }; -/* slapstic 137412-112: Pit Fighter (Japan) (confirmed) */ +/* slapstic 137412-112: Pit Fighter (Aug 22, 1990 to Oct 01, 1990) (confirmed) */ static const struct slapstic_data slapstic112 = { /* basic banking */ @@ -563,7 +564,7 @@ static const struct slapstic_data slapstic112 = }; -/* slapstic 137412-113: Unknown (Europe) (confirmed) */ +/* slapstic 137412-113: Pit Fighter (Oct 09, 1990 to Oct 12, 1990) (confirmed) */ static const struct slapstic_data slapstic113 = { /* basic banking */ @@ -589,7 +590,7 @@ static const struct slapstic_data slapstic113 = }; -/* slapstic 137412-114: Pit Fighter (rev 9) (confirmed) */ +/* slapstic 137412-114: Pit Fighter (Nov 01, 1990 and later) (confirmed) */ static const struct slapstic_data slapstic114 = { /* basic banking */ diff --git a/src/mame/machine/tait8741.h b/src/mame/machine/tait8741.h index ceb9b39e823..d80cc5649ea 100644 --- a/src/mame/machine/tait8741.h +++ b/src/mame/machine/tait8741.h @@ -6,7 +6,7 @@ #pragma once /**************************************************************************** - gladiatr and Great Swordsman set. + not used by anything. TODO: remove? ****************************************************************************/ /* NEC 8741 program mode */ @@ -14,38 +14,15 @@ #define TAITO8741_SLAVE 1 #define TAITO8741_PORT 2 -#define MCFG_TAITO8741_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, TAITO8741_4PACK, 0) - -#define MCFG_TAITO8741_PORT_HANDLERS(_devcb0, _devcb1, _devcb2, _devcb3) \ - downcast<taito8741_4pack_device &>(*device).set_port_handler_0_callback(DEVCB_##_devcb0); \ - downcast<taito8741_4pack_device &>(*device).set_port_handler_1_callback(DEVCB_##_devcb1); \ - downcast<taito8741_4pack_device &>(*device).set_port_handler_2_callback(DEVCB_##_devcb2); \ - downcast<taito8741_4pack_device &>(*device).set_port_handler_3_callback(DEVCB_##_devcb3); - -#define MCFG_TAITO8741_MODES(_mode0, _mode1, _mode2, _mode3) \ - downcast<taito8741_4pack_device &>(*device).set_mode(0, _mode0); \ - downcast<taito8741_4pack_device &>(*device).set_mode(1, _mode1); \ - downcast<taito8741_4pack_device &>(*device).set_mode(2, _mode2); \ - downcast<taito8741_4pack_device &>(*device).set_mode(3, _mode3); - - -#define MCFG_TAITO8741_CONNECT(_con0, _con1, _con2, _con3) \ - downcast<taito8741_4pack_device &>(*device).set_connect(0, _con0); \ - downcast<taito8741_4pack_device &>(*device).set_connect(1, _con1); \ - downcast<taito8741_4pack_device &>(*device).set_connect(2, _con2); \ - downcast<taito8741_4pack_device &>(*device).set_connect(3, _con3); - - class taito8741_4pack_device : public device_t { public: taito8741_4pack_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_port_handler_0_callback(Object &&cb) { return m_port_handler_0_r.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_port_handler_1_callback(Object &&cb) { return m_port_handler_1_r.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_port_handler_2_callback(Object &&cb) { return m_port_handler_2_r.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_port_handler_3_callback(Object &&cb) { return m_port_handler_3_r.set_callback(std::forward<Object>(cb)); } + auto port_handler_0_callback() { return m_port_handler_0_r.bind(); } + auto port_handler_1_callback() { return m_port_handler_1_r.bind(); } + auto port_handler_2_callback() { return m_port_handler_2_r.bind(); } + auto port_handler_3_callback() { return m_port_handler_3_r.bind(); } void set_mode(int num, uint8_t mode) { m_taito8741[num].mode = mode; } void set_connect(int num, int conn) { m_taito8741[num].connect = conn; } diff --git a/src/mame/machine/teleprinter.cpp b/src/mame/machine/teleprinter.cpp index 1bd3d21e07f..6cbc53090cf 100644 --- a/src/mame/machine/teleprinter.cpp +++ b/src/mame/machine/teleprinter.cpp @@ -218,8 +218,8 @@ MACHINE_CONFIG_START(teleprinter_device::device_add_mconfig) MCFG_SCREEN_SIZE(teleprinter_device::WIDTH*8, teleprinter_device::HEIGHT*8) MCFG_SCREEN_VISIBLE_AREA(0, teleprinter_device::WIDTH*8-1, 0, teleprinter_device::HEIGHT*8-1) MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, teleprinter_device, tp_update) - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(generic_terminal_device, kbd_put)) + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(FUNC(generic_terminal_device::kbd_put)); SPEAKER(config, "bell").front_center(); MCFG_DEVICE_ADD("beeper", BEEP, 2'000) diff --git a/src/mame/machine/teleprinter.h b/src/mame/machine/teleprinter.h index f33090399b4..d6817d88066 100644 --- a/src/mame/machine/teleprinter.h +++ b/src/mame/machine/teleprinter.h @@ -14,9 +14,6 @@ #define TELEPRINTER_TAG "teleprinter" #define TELEPRINTER_SCREEN_TAG "tty_screen" -#define MCFG_GENERIC_TELEPRINTER_KEYBOARD_CB(cb) \ - downcast<generic_terminal_device &>(*device).set_keyboard_callback(KEYBOARDCB_##cb); - /*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 867b3fe6840..2482b1a9e7d 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1115,6 +1115,7 @@ alphatp30 @source:alphatro.cpp alphatro // +alphatron // @source:altair.cpp al8800bt // @@ -9832,8 +9833,9 @@ armchmp2o2 // (c) 1992 Jaleco bigrun // (c) 1989 Jaleco captflag // (c) 1993 Jaleco cischeat // (c) 1990 Jaleco -f1gpstar // (c) 1991 Jaleco -f1gpstaro // (c) 1991 Jaleco +f1gpstar // (c) 1992 Jaleco +f1gpstar3 // (c) 1991 Jaleco +f1gpstar2 // (c) 1991 Jaleco f1gpstr2 // (c) 1993 Jaleco scudhamm // (c) 1994 Jaleco wildplt // (c) 1992 Jaleco @@ -11420,6 +11422,7 @@ decocass // decomult // @source:decstation.cpp +ds3100 // 1989 Digital Equipment Corporation (DECstation 3100) ds5k133 // 1993 Digital Equipment Corporation (DECstation 5000/133) @source:dectalk.cpp @@ -15821,7 +15824,8 @@ pairsred // (c) 1994 Strata/Incredible Technologies sftm // (c) 1995 Capcom/Incredible Technologies sftm110 // (c) 1995 Capcom/Incredible Technologies sftm111 // (c) 1995 Capcom/Incredible Technologies -sftmj // (c) 1995 Capcom/Incredible Technologies +sftmj114 // (c) 1995 Capcom/Incredible Technologies +sftmj112 // (c) 1995 Capcom/Incredible Technologies shufshot // (c) Strata/Incredible Technologies shufshot137 // (c) Strata/Incredible Technologies shufshot139 // (c) Strata/Incredible Technologies @@ -20832,6 +20836,10 @@ spyhunt2a // (c) 1987 trisport // (c) 1989 xenophob // (c) 1987 +@source:mdisk.cpp +mdisk // (c) 198? mupid Computer Ges.m.b.H. +fl100 // (c) 198? Grundig + @source:meadows.cpp bowl3d // [1978?] deadeye // [1978?] @@ -21795,6 +21803,9 @@ momokoe // (c) 1986 Jaleco (English text) monacogp // (c) 1980 Sega monacogpa // (c) 1980 Sega +@source:monon_color.cpp +mononcol // (c) 2011 M&D + @source:monty.cpp mmonty // Ritam monty // Ritam @@ -35409,6 +35420,7 @@ kinstb // bootleg mk3snes // bootleg rushbeat // bootleg sblast2b // bootleg +spidrmnb // bootleg @source:snk.cpp alphamis // (c) 1985 diff --git a/src/mame/mess.flt b/src/mame/mess.flt index e46bd83d48c..a4bb3be7c83 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -406,6 +406,7 @@ mc8020.cpp mc8030.cpp mcb216.cpp mccpm.cpp +mdisk.cpp megadriv.cpp megadriv_rad.cpp mekd2.cpp @@ -449,6 +450,7 @@ mod8.cpp modellot.cpp modena.cpp molecular.cpp +monon_color.cpp monty.cpp mpc3000.cpp mpf1.cpp diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp index ae5c5c60689..ebfa023efc3 100644 --- a/src/mame/video/avgdvg.cpp +++ b/src/mame/video/avgdvg.cpp @@ -892,7 +892,7 @@ void avg_mhavoc_device::update_databus() // mhavoc_data if (m_pc & 0x2000) { - bank = &machine().root_device().memregion("alpha")->base()[0x18000]; + bank = &machine().root_device().memregion("avgdvg")->base()[0]; m_data = bank[(m_map << 13) | ((m_pc ^ 1) & 0x1fff)]; } else diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp index 5607f3672bf..1e9bcb9396b 100644 --- a/src/mame/video/cps1.cpp +++ b/src/mame/video/cps1.cpp @@ -3126,6 +3126,13 @@ WRITE_LINE_MEMBER(cps_state::screen_vblank_cps1) } } + +uint32_t cps2_state::screen_update_cps2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + cps2_set_sprite_priorities(); + return screen_update_cps1(screen, bitmap, cliprect); +} + void cps2_state::cps2_set_sprite_priorities() { m_pri_ctrl = m_output[CPS2_OBJ_PRI /2]; diff --git a/src/mame/video/decrmc3.h b/src/mame/video/decrmc3.h index 11d12db7f32..5293c9c98a5 100644 --- a/src/mame/video/decrmc3.h +++ b/src/mame/video/decrmc3.h @@ -20,32 +20,6 @@ #pragma once - -//************************************************************************** -// DEVICE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_DECO_RMC3_ADD(_tag, _entries) \ - MCFG_DEVICE_ADD(_tag, DECO_RMC3, 0) \ - MCFG_DECO_RMC3_SET_PALETTE_SIZE(_entries) - -#define MCFG_DECO_RMC3_MODIFY MCFG_DEVICE_MODIFY - -#define MCFG_DECO_RMC3_SET_PALETTE_SIZE(_entries) \ - downcast<deco_rmc3_device &>(*device).set_entries(_entries); - -#define MCFG_DECO_RMC3_INDIRECT_ENTRIES(_entries) \ - downcast<deco_rmc3_device &>(*device).set_indirect_entries( _entries); - -// other standard palettes -#define MCFG_DECO_RMC3_ADD_PROMS(_tag, _region, _entries) \ - MCFG_DECO_RMC3_ADD(_tag, _entries) \ - downcast<deco_rmc3_device &>(*device).set_prom_region(_region); \ - downcast<deco_rmc3_device &>(*device).set_init(deco_rmc3_palette_init_delegate(FUNC(deco_rmc3_device::palette_init_proms), downcast<deco_rmc3_device *>(device))); - -//#define MCFG_DECO_RMC3_INIT_OWNER(_class, _method) -// downcast<deco_rmc3_device &>(*device).set_init(deco_rmc3_palette_init_delegate(&_class::PALETTE_INIT_NAME(_method), #_class "::palette_init_" #_method, this)); - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -59,15 +33,26 @@ class deco_rmc3_device : public device_t, public device_palette_interface { public: // construction/destruction + deco_rmc3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, u32 entries) + : deco_rmc3_device(mconfig, tag, owner, clock) + { + set_entries(entries); + } + deco_rmc3_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); // configuration void set_init(deco_rmc3_palette_init_delegate init) { m_init = init; } + template <class FunctionClass> void set_init(const char *devname, void (FunctionClass::*callback)(deco_rmc3_device &), const char *name) + { + set_init(deco_rmc3_palette_init_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr))); + } // void set_membits(int membits); // void set_endianness(endianness_t endianness); void set_entries(u32 entries) { m_entries = entries; } void set_indirect_entries(u32 entries) { m_indirect_entries = entries; } void set_prom_region(const char *region) { m_prom_region.set_tag(region); } + template <typename T> void set_prom_region(T &&tag) { m_prom_region.set_tag(std::forward<T>(tag)); } // palette RAM accessors memory_array &basemem() { return m_paletteram; } diff --git a/src/mame/video/k1ge.h b/src/mame/video/k1ge.h index 1fcac610cf2..de314b98d9a 100644 --- a/src/mame/video/k1ge.h +++ b/src/mame/video/k1ge.h @@ -13,23 +13,16 @@ #include "emupal.h" - -#define MCFG_K1GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ - MCFG_DEVICE_ADD( _tag, K1GE, _clock ) \ - MCFG_VIDEO_SET_SCREEN( _screen ) \ - downcast<k1ge_device &>(*device).set_vblank_callback(DEVCB_##_vblank ); \ - downcast<k1ge_device &>(*device).set_hblank_callback(DEVCB_##_hblank ); - -#define MCFG_K2GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ - MCFG_DEVICE_ADD( _tag, K2GE, _clock ) \ - MCFG_VIDEO_SET_SCREEN( _screen ) \ - downcast<k1ge_device &>(*device).set_vblank_callback(DEVCB_##_vblank ); \ - downcast<k1ge_device &>(*device).set_hblank_callback(DEVCB_##_hblank ); - - class k1ge_device : public device_t, public device_video_interface { public: + template <typename T> + k1ge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&screen_tag) + : k1ge_device(mconfig, tag, owner, clock) + { + set_screen(std::forward<T>(screen_tag)); + } + k1ge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); DECLARE_READ8_MEMBER( read ); @@ -38,8 +31,8 @@ public: void update( bitmap_ind16 &bitmap, const rectangle &cliprect ); // Static methods - template <class Object> devcb_base &set_vblank_callback(Object &&cb) { return m_vblank_pin_w.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_hblank_callback(Object &&cb) { return m_hblank_pin_w.set_callback(std::forward<Object>(cb)); } + auto vblank_callback() { return m_vblank_pin_w.bind(); } + auto hblank_callback() { return m_hblank_pin_w.bind(); } static const int K1GE_SCREEN_HEIGHT = 199; @@ -75,6 +68,13 @@ private: class k2ge_device : public k1ge_device { public: + template <typename T> + k2ge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&screen_tag) + : k2ge_device(mconfig, tag, owner, clock) + { + set_screen(std::forward<T>(screen_tag)); + } + k2ge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: diff --git a/src/mame/video/nick.h b/src/mame/video/nick.h index 3f2cc6452f2..a79493f2390 100644 --- a/src/mame/video/nick.h +++ b/src/mame/video/nick.h @@ -21,21 +21,6 @@ // INTERFACE CONFIGURATION MACROS ///************************************************************************* -#define MCFG_NICK_ADD(_tag, _screen_tag, _clock) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_REFRESH_RATE(50) \ - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) \ - MCFG_SCREEN_SIZE(ENTERPRISE_SCREEN_WIDTH, ENTERPRISE_SCREEN_HEIGHT) \ - MCFG_SCREEN_VISIBLE_AREA(0, ENTERPRISE_SCREEN_WIDTH-1, 0, ENTERPRISE_SCREEN_HEIGHT-1) \ - MCFG_SCREEN_UPDATE_DEVICE(_tag, nick_device, screen_update) \ - MCFG_DEVICE_ADD(_tag, NICK, _clock) \ - MCFG_VIDEO_SET_SCREEN(_screen_tag) - - -#define MCFG_NICK_VIRQ_CALLBACK(_write) \ - downcast<nick_device &>(*device).set_virq_wr_callback(DEVCB_##_write); - - /* there are 64us per line, although in reality about 50 are visible. */ #define ENTERPRISE_SCREEN_WIDTH (50*16) @@ -73,9 +58,16 @@ class nick_device : public device_t, { public: // construction/destruction + template <typename T> + nick_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&screen_tag) : + nick_device(mconfig, tag, owner, clock) + { + set_screen(std::forward<T>(screen_tag)); + } + nick_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template <class Object> devcb_base &set_virq_wr_callback(Object &&cb) { return m_write_virq.set_callback(std::forward<Object>(cb)); } + auto virq_wr_callback() { return m_write_virq.bind(); } virtual void vram_map(address_map &map); virtual void vio_map(address_map &map); diff --git a/src/mame/video/pc1251.cpp b/src/mame/video/pc1251.cpp index 0f2987592e2..32974c9a677 100644 --- a/src/mame/video/pc1251.cpp +++ b/src/mame/video/pc1251.cpp @@ -5,159 +5,129 @@ #include "includes/pocketc.h" #include "includes/pc1251.h" -static const POCKETC_FIGURE /*busy={ - "11 1 1 11 1 1", - "1 1 1 1 1 1 1", - "11 1 1 1 1 1", - "1 1 1 1 1 1", - "11 1 11 1e" -},*/ def={ +// TODO: Convert to SVG rendering or internal layout + +#define LOG_LCD (1 << 0) + +#define VERBOSE (0) +#include "logmacro.h" + +const char *const pc1251_state::s_def[5] = +{ "11 111 111", - "1 1 1 1", - "1 1 111 11", - "1 1 1 1", - "11 111 1e" -}, shift={ + "1 1 1 1 ", + "1 1 111 11 ", + "1 1 1 1 ", + "11 111 1 " +}; +const char *const pc1251_state::s_shift[5] = +{ " 11 1 1 1 111 111", - "1 1 1 1 1 1", - " 1 111 1 11 1", - " 1 1 1 1 1 1", - "11 1 1 1 1 1e" -}, /*hyp={ - "1 1 1 1 11", - "1 1 1 1 1 1", - "111 1 1 11", - "1 1 1 1", - "1 1 1 1e" -},*/ de={ + "1 1 1 1 1 1 ", + " 1 111 1 11 1 ", + " 1 1 1 1 1 1 ", + "11 1 1 1 1 1 " +}; +const char *const pc1251_state::s_de[5] = +{ "11 111", - "1 1 1", + "1 1 1 ", "1 1 111", - "1 1 1", - "11 111e" -}, g={ + "1 1 1 ", + "11 111" +}; +const char *const pc1251_state::s_g[5] = +{ " 11", - "1", + "1 ", "1 1", "1 1", - " 11e" -}, rad={ - "11 1 11", + " 11" +}; +const char *const pc1251_state::s_rad[5] = +{ + "11 1 11 ", "1 1 1 1 1 1", "11 111 1 1", "1 1 1 1 1 1", - "1 1 1 1 11e" -}, /*braces={ - " 1 1", - "1 1", - "1 1", - "1 1", - " 1 1e" -}, m={ - "1 1", - "11 11", - "1 1 1", - "1 1", - "1 1e" -}, e={ - "111", - "1", - "111", - "1", - "111e" -},*/ run={ + "1 1 1 1 11 " +}; +const char *const pc1251_state::s_run[5] = +{ "11 1 1 1 1", "1 1 1 1 11 1", "11 1 1 1 11", "1 1 1 1 1 1", - "1 1 1 1 1e" -}, pro={ + "1 1 1 1 1" +}; +const char *const pc1251_state::s_pro[5] = +{ "11 11 1 ", - "1 1 1 1 1 1", - "11 11 1 1", - "1 1 1 1 1", - "1 1 1 1e" -}, /*japan={ - " 1 1 11 1 1 1", - " 1 1 1 1 1 1 1 11 1", - " 1 111 11 111 1 11", - "1 1 1 1 1 1 1 1 1", - " 1 1 1 1 1 1 1 1e" -}, sml={ - " 11 1 1 1", - "1 111 1", - " 1 1 1 1", - " 1 1 1 1", - "11 1 1 111e" -},*/ rsv={ + "1 1 1 1 1 1 ", + "11 11 1 1 ", + "1 1 1 1 1 ", + "1 1 1 1 " +}; +const char *const pc1251_state::s_rsv[5] = +{ "11 11 1 1", "1 1 1 1 1", - "11 1 1 1", - "1 1 1 1 1", - "1 1 11 1e" + "11 1 1 1 ", + "1 1 1 1 1 ", + "1 1 11 1 " }; -READ8_MEMBER(pc1251_state::pc1251_lcd_read) +READ8_MEMBER(pc1251_state::lcd_read) { - uint8_t data = m_reg[offset&0xff]; - logerror("pc1251 read %.3x %.2x\n",offset,data); + uint8_t data = m_reg[offset & 0xff]; + LOGMASKED(LOG_LCD, "pc1251 read %.3x %.2x\n", offset, data); return data; } -WRITE8_MEMBER(pc1251_state::pc1251_lcd_write) +WRITE8_MEMBER(pc1251_state::lcd_write) { - logerror("pc1251 write %.3x %.2x\n",offset,data); - m_reg[offset&0xff] = data; + LOGMASKED(LOG_LCD, "pc1251 write %.3x %.2x\n", offset, data); + m_reg[offset & 0xff] = data; } #define DOWN 62 #define RIGHT 68 -uint32_t pc1251_state::screen_update_pc1251(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t pc1251_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int x, y, i, j; - int color[2]; + int color[2] = + { + 7, //pocketc_colortable[PC1251_CONTRAST][0], + 8, //pocketc_colortable[PC1251_CONTRAST][1] + }; bitmap.fill(11, cliprect); - /* HJB: we cannot initialize array with values from other arrays, thus... */ - color[0] = 7; //pocketc_colortable[PC1251_CONTRAST][0]; - color[1] = 8; //pocketc_colortable[PC1251_CONTRAST][1]; + const int contrast = m_dsw0->read() & 7; + int x = RIGHT; + int y = DOWN; + for (int i = 0; i < 60; x += 3) + for (int j = 0; j < 5; j++, i++, x += 3) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); - for (x=RIGHT,y=DOWN, i=0; i<60; x+=3) - { - for (j=0; j<5; j++, i++, x+=3) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i], - PC1251_CONTRAST,0,0, - x,y); - } - for (i=0x7b; i>=0x40; x+=3) - { - for (j=0; j<5; j++, i--, x+=3) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i], - PC1251_CONTRAST,0,0, - x,y); - } - - pocketc_draw_special(bitmap, RIGHT+134, DOWN-10, de, - m_reg[0x3c] & 0x08 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+142, DOWN-10, g, - m_reg[0x3c] & 0x04 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+146, DOWN-10, rad, - m_reg[0x3d] & 0x04 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, def, - m_reg[0x3c] & 0x01 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT, DOWN-10, shift, - m_reg[0x3d] & 0x02 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+38, DOWN-10, pro, - m_reg[0x3e] & 0x01 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+53, DOWN-10, run, - m_reg[0x3e] & 0x02 ? color[1] : color[0]); - pocketc_draw_special(bitmap, RIGHT+68, DOWN-10, rsv, - m_reg[0x3e] & 0x04 ? color[1] : color[0]); + for (int i = 0x7b; i >= 0x40; x += 3) + for (int j = 0; j < 5; j++, i--, x += 3) + m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i], contrast, 0, 0, x, y); /* 0x3c 1 def?, 4 g, 8 de 0x3d 2 shift, 4 rad, 8 error 0x3e 1 pro?, 2 run?, 4rsv?*/ + + pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, s_def, BIT(m_reg[0x3c], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+142, DOWN-10, s_g, BIT(m_reg[0x3c], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+134, DOWN-10, s_de, BIT(m_reg[0x3c], 3) ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT, DOWN-10, s_shift, BIT(m_reg[0x3d], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+146, DOWN-10, s_rad, BIT(m_reg[0x3d], 2) ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT+38, DOWN-10, s_pro, BIT(m_reg[0x3e], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+53, DOWN-10, s_run, BIT(m_reg[0x3e], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+68, DOWN-10, s_rsv, BIT(m_reg[0x3e], 2) ? color[1] : color[0]); + return 0; } diff --git a/src/mame/video/pc1350.cpp b/src/mame/video/pc1350.cpp index ab91563bce6..7f28f5f10e2 100644 --- a/src/mame/video/pc1350.cpp +++ b/src/mame/video/pc1350.cpp @@ -5,112 +5,76 @@ #include "includes/pocketc.h" #include "includes/pc1350.h" -static const POCKETC_FIGURE /*busy={ - "11 1 1 11 1 1", - "1 1 1 1 1 1 1", - "11 1 1 1 1 1", - "1 1 1 1 1 1", - "11 1 11 1e" -},*/ def={ +// TODO: Convert to SVG rendering or internal layout + +#define LOG_LCD (1 << 0) + +#define VERBOSE (0) +#include "logmacro.h" + +const char* const pc1350_state::s_def[5] = +{ "11 111 111", - "1 1 1 1", - "1 1 111 11", - "1 1 1 1", - "11 111 1e" -}, shift={ + "1 1 1 1 ", + "1 1 111 11 ", + "1 1 1 1 ", + "11 111 1 " +}; +const char* const pc1350_state::s_shift[5] = +{ " 11 1 1 1 111 111", - "1 1 1 1 1 1", - " 1 111 1 11 1", - " 1 1 1 1 1 1", - "11 1 1 1 1 1e" -}, /*hyp={ - "1 1 1 1 11", - "1 1 1 1 1 1", - "111 1 1 11", - "1 1 1 1", - "1 1 1 1e" -}, de={ - "11 111", - "1 1 1", - "1 1 111", - "1 1 1", - "11 111e" -}, g={ - " 11", - "1", - "1 1", - "1 1", - " 11e" -}, rad={ - "11 1 11", - "1 1 1 1 1 1", - "11 111 1 1", - "1 1 1 1 1 1", - "1 1 1 1 11e" -}, braces={ - " 1 1", - "1 1", - "1 1", - "1 1", - " 1 1e" -}, m={ - "1 1", - "11 11", - "1 1 1", - "1 1", - "1 1e" -}, e={ - "111", - "1", - "111", - "1", - "111e" -},*/ run={ + "1 1 1 1 1 1 ", + " 1 111 1 11 1 ", + " 1 1 1 1 1 1 ", + "11 1 1 1 1 1 " +}; +const char* const pc1350_state::s_run[5] = +{ "11 1 1 1 1", "1 1 1 1 11 1", "11 1 1 1 11", "1 1 1 1 1 1", - "1 1 1 1 1e" -}, pro={ - "11 11 1 ", + "1 1 1 1 1" +}; +const char* const pc1350_state::s_pro[5] = +{ + "11 11 1 ", "1 1 1 1 1 1", "11 11 1 1", "1 1 1 1 1", - "1 1 1 1e" -}, japan={ + "1 1 1 1 " +}; +const char* const pc1350_state::s_japan[5] = +{ " 1 1 11 1 1 1", " 1 1 1 1 1 1 1 11 1", " 1 111 11 111 1 11", "1 1 1 1 1 1 1 1 1", - " 1 1 1 1 1 1 1 1e" -}, sml={ - " 11 1 1 1", - "1 111 1", - " 1 1 1 1", - " 1 1 1 1", - "11 1 1 111e" -}/*, rsv={ - "11 11 1 1", - "1 1 1 1 1", - "11 1 1 1", - "1 1 1 1 1", - "1 1 11 1e" -}*/; + " 1 1 1 1 1 1 1 1" +}; +const char* const pc1350_state::s_sml[5] = +{ + " 11 1 1 1 ", + "1 111 1 ", + " 1 1 1 1 ", + " 1 1 1 1 ", + "11 1 1 111" +}; -READ8_MEMBER(pc1350_state::pc1350_lcd_read) +READ8_MEMBER(pc1350_state::lcd_read) { - uint8_t data = m_reg[offset&0xfff]; - logerror("pc1350 read %.3x %.2x\n",offset,data); + uint8_t data = m_reg[offset & 0xfff]; + LOGMASKED(LOG_LCD, "pc1350 read %.3x %.2x\n",offset,data); return data; } -WRITE8_MEMBER(pc1350_state::pc1350_lcd_write) +WRITE8_MEMBER(pc1350_state::lcd_write) { - logerror("pc1350 write %.3x %.2x\n",offset,data); - m_reg[offset&0xfff] = data; + LOGMASKED(LOG_LCD, "pc1350 write %.3x %.2x\n",offset,data); + m_reg[offset & 0xfff] = data; } -READ8_MEMBER(pc1350_state::pc1350_keyboard_line_r) +READ8_MEMBER(pc1350_state::keyboard_line_r) { return m_reg[0xe00]; } @@ -127,39 +91,33 @@ static const int pc1350_addr[4]={ 0, 0x40, 0x1e, 0x5e }; #define DOWN 45 #define RIGHT 76 -uint32_t pc1350_state::screen_update_pc1350(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t pc1350_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int x, y=DOWN, i, j, k=0, b; - int color[4]; - bitmap.fill(11, cliprect); - - /* HJB: we cannot initialize array with values from other arrays, thus... */ - color[0] = pocketc_colortable[PC1350_CONTRAST][0]; - color[1] = pocketc_colortable[PC1350_CONTRAST][1]; - color[2] = 8; - color[3] = 7; + const int contrast = m_dsw0->read() & 7; + int color[4] = + { + colortable[contrast][0], + colortable[contrast][1], + 8, + 7 + }; - for (k=0, y=DOWN; k<4; y+=16, k++) - for (x=RIGHT, i=pc1350_addr[k]; i<0xa00; i+=0x200) - for (j=0; j<=0x1d; j++, x+=2) - for (b = 0; b < 8; b++) - bitmap.plot_box(x, y + b * 2, 2, 2, color[(m_reg[j+i] >> b) & 1]); + bitmap.fill(11, cliprect); + for (int k = 0, y = DOWN; k < 4; y += 16, k++) + for (int x = RIGHT, i = pc1350_addr[k]; i < 0xa00; i += 0x200) + for (int j = 0; j <= 0x1d; j++, x+=2) + for (int bit = 0; bit < 8; bit++) + bitmap.plot_box(x, y + bit * 2, 2, 2, color[BIT(m_reg[j+i], bit)]); /* 783c: 0 SHIFT 1 DEF 4 RUN 5 PRO 6 JAPAN 7 SML */ - /* I don't know how they really look like in the lcd */ - pocketc_draw_special(bitmap, RIGHT-30, DOWN+45, shift, - m_reg[0x83c] & 0x01 ? color[2] : color[3]); - pocketc_draw_special(bitmap, RIGHT-30, DOWN+55, def, - m_reg[0x83c] & 0x02 ? color[2] : color[3]); - pocketc_draw_special(bitmap, RIGHT-30, DOWN+5, run, - m_reg[0x83c] & 0x10 ? color[2] : color[3]); - pocketc_draw_special(bitmap, RIGHT-30, DOWN+15, pro, - m_reg[0x83c] & 0x20 ? color[2] : color[3]); - pocketc_draw_special(bitmap, RIGHT-30, DOWN+25, japan, - m_reg[0x83c] & 0x40 ? color[2] : color[3]); - pocketc_draw_special(bitmap, RIGHT-30, DOWN+35, sml, - m_reg[0x83c] & 0x80 ? color[2] : color[3]); + /* I don't know how they really look like on the LCD */ + pocketc_draw_special(bitmap, RIGHT-30, DOWN+45, s_shift, BIT(m_reg[0x83c], 0) ? color[2] : color[3]); + pocketc_draw_special(bitmap, RIGHT-30, DOWN+55, s_def, BIT(m_reg[0x83c], 1) ? color[2] : color[3]); + pocketc_draw_special(bitmap, RIGHT-30, DOWN+5, s_run, BIT(m_reg[0x83c], 4) ? color[2] : color[3]); + pocketc_draw_special(bitmap, RIGHT-30, DOWN+15, s_pro, BIT(m_reg[0x83c], 5) ? color[2] : color[3]); + pocketc_draw_special(bitmap, RIGHT-30, DOWN+25, s_japan, BIT(m_reg[0x83c], 6) ? color[2] : color[3]); + pocketc_draw_special(bitmap, RIGHT-30, DOWN+35, s_sml, BIT(m_reg[0x83c], 7) ? color[2] : color[3]); return 0; } diff --git a/src/mame/video/pc1401.cpp b/src/mame/video/pc1401.cpp index be8b26c9d7a..08fb2cd911b 100644 --- a/src/mame/video/pc1401.cpp +++ b/src/mame/video/pc1401.cpp @@ -5,209 +5,176 @@ #include "includes/pocketc.h" #include "includes/pc1401.h" +// TODO: Convert to SVG rendering or internal layout + /* pc140x 16 5x7 with space between char 6000 .. 6027, 6067.. 6040 - 603c: 3 STAT - 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 HYP, 4 PRO, 5 RUN, 6 CAL - 607c: 0 E, 1 M, 2 (), 3 RAD, 4 G, 5 DE, 6 PRINT */ + 603c: 3 STAT + 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 HYP, 4 PRO, 5 RUN, 6 CAL + 607c: 0 E, 1 M, 2 (), 3 RAD, 4 G, 5 DE, 6 PRINT */ /* pc1421 16 5x7 with space between char 6000 .. 6027, 6067.. 6040 - 603c: 3 RUN - 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 BGN, 4 STAT, 5 FIN, 6 PRINT - 607c: 0 E, 1 M, 2 BAL, 3 INT, 4 PRN, 5 Sum-Sign, 6 PRO */ + 603c: 3 RUN + 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 BGN, 4 STAT, 5 FIN, 6 PRINT + 607c: 0 E, 1 M, 2 BAL, 3 INT, 4 PRN, 5 Sum-Sign, 6 PRO */ -READ8_MEMBER(pc1401_state::pc1401_lcd_read) +READ8_MEMBER(pc1401_state::lcd_read) { return m_reg[offset & 0xff]; } -WRITE8_MEMBER(pc1401_state::pc1401_lcd_write) +WRITE8_MEMBER(pc1401_state::lcd_write) { - m_reg[offset & 0xff]=data; + m_reg[offset & 0xff] = data; } -static const POCKETC_FIGURE line={ /* simple line */ +const char* const pc1401_state::s_line[5] = /* simple line */ +{ + " ", + " ", "11111", "11111", - "11111e" + "11111" }; -static const POCKETC_FIGURE busy={ +const char* const pc1401_state::s_busy[5] = +{ "11 1 1 11 1 1", "1 1 1 1 1 1 1", "11 1 1 1 1 1", - "1 1 1 1 1 1", - "11 1 11 1e" -}, def={ + "1 1 1 1 1 1 ", + "11 1 11 1 " +}; +const char* const pc1401_state::s_def[5] = +{ "11 111 111", - "1 1 1 1", - "1 1 111 11", - "1 1 1 1", - "11 111 1e" -}, shift={ + "1 1 1 1 ", + "1 1 111 11 ", + "1 1 1 1 ", + "11 111 1 " +}; +const char* const pc1401_state::s_shift[5] = +{ " 11 1 1 1 111 111", - "1 1 1 1 1 1", - " 1 111 1 11 1", - " 1 1 1 1 1 1", - "11 1 1 1 1 1e" -}, hyp={ - "1 1 1 1 11", + "1 1 1 1 1 1 ", + " 1 111 1 11 1 ", + " 1 1 1 1 1 1 ", + "11 1 1 1 1 1 " +}; +const char* const pc1401_state::s_hyp[5] = +{ + "1 1 1 1 11 ", "1 1 1 1 1 1", - "111 1 1 11", - "1 1 1 1", - "1 1 1 1e" -}, de={ + "111 1 1 11 ", + "1 1 1 1 ", + "1 1 1 1 " +}; +const char* const pc1401_state::s_de[5] = +{ "11 111", - "1 1 1", + "1 1 1 ", "1 1 111", - "1 1 1", - "11 111e" -}, g={ + "1 1 1 ", + "11 111" +}; +const char* const pc1401_state::s_g[5] = +{ " 11", - "1", + "1 ", "1 1", "1 1", - " 11e" -}, rad={ - "11 1 11", + " 11" +}; +const char* const pc1401_state::s_rad[5] = +{ + "11 1 11 ", "1 1 1 1 1 1", "11 111 1 1", "1 1 1 1 1 1", - "1 1 1 1 11e" -}, braces={ - " 1 1", + "1 1 1 1 11 " +}; +const char* const pc1401_state::s_braces[5] = +{ + " 1 1 ", "1 1", "1 1", "1 1", - " 1 1e" -}, m={ + " 1 1 " +}; +const char* const pc1401_state::s_m[5] = +{ "1 1", "11 11", "1 1 1", "1 1", - "1 1e" -}, e={ + "1 1" +}; +const char* const pc1401_state::s_e[5] = +{ "111", - "1", + "1 ", "111", - "1", - "111e" -}/*, run={ - "11 1 1 1 1", - "1 1 1 1 11 1", - "11 1 1 1 11", - "1 1 1 1 1 1", - "1 1 1 1 1e" -}, pro={ - "11 11 1 ", - "1 1 1 1 1 1", - "11 11 1 1", - "1 1 1 1 1", - "1 1 1 1e" -}, japan={ - " 1 1 11 1 1 1", - " 1 1 1 1 1 1 1 11 1", - " 1 111 11 111 1 11", - "1 1 1 1 1 1 1 1 1", - " 1 1 1 1 1 1 1 1e" -}, sml={ - " 11 1 1 1", - "1 111 1", - " 1 1 1 1", - " 1 1 1 1", - "11 1 1 111e" -}, rsv={ - "11 11 1 1", - "1 1 1 1 1", - "11 1 1 1", - "1 1 1 1 1", - "1 1 11 1e" -}*/; + "1 ", + "111" +}; #define DOWN 57 #define RIGHT 114 -uint32_t pc1401_state::screen_update_pc1401(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t pc1401_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int x, y, i, j; - int color[2]; - - bitmap.fill(11, cliprect); - + const int contrast = m_dsw0->read() & 7; + int color[2] = + { #if 0 - /* HJB: we cannot initialize array with values from other arrays, thus... */ - color[0] = pocketc_colortable[CONTRAST][0]; - color[1] = pocketc_colortable[CONTRAST][1]; + pocketc_colortable[contrast][0], + pocketc_colortable[contrast][1] #endif - /* Above can be unreadable or misleading at certain contrast settings, this is better */ - color[0] = 7; - color[1] = 8; + /* Above can be unreadable or misleading at certain contrast settings, this is better */ + 7, + 8 + }; - if (m_portc&1) + bitmap.fill(11, cliprect); + + if (BIT(m_portc, 0)) { - for (x=RIGHT,y=DOWN,i=0; i<0x28;x+=2) - { - for (j=0; j<5;j++,i++,x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0,x,y); - } - for (i=0x67; i>=0x40;x+=2) - { - for (j=0; j<5;j++,i--,x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0,x,y); - } + int x = RIGHT; + int y = DOWN; + for (int i = 0; i < 0x28; x += 2) + for (int j = 0; j < 5; j++, i++, x += 2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 0x67; i >= 0x40; x += 2) + for (int j = 0; j < 5; j++, i--, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); } - pocketc_draw_special(bitmap, RIGHT+149, DOWN+24, line, - m_reg[0x3c] & 0x08 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT, DOWN-10, busy, - m_reg[0x3d] & 0x01 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, def, - m_reg[0x3d] & 0x02 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+43, DOWN-10,shift, - m_reg[0x3d] & 0x04 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+63, DOWN-10,hyp, - m_reg[0x3d] & 0x08 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+38, DOWN+24,line, - m_reg[0x3d] & 0x10 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+23, DOWN+24,line, - m_reg[0x3d] & 0x20 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+8, DOWN+24,line, - m_reg[0x3d] & 0x40 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+183, DOWN-10,e, - m_reg[0x7c] & 0x01 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+176, DOWN-10,m, - m_reg[0x7c] & 0x02 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+168, DOWN-10,braces, - m_reg[0x7c] & 0x04 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+138, DOWN-10,rad, - m_reg[0x7c] & 0x08 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+134, DOWN-10,g, - m_reg[0x7c] & 0x10 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+126, DOWN-10,de, - m_reg[0x7c] & 0x20 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, RIGHT+165, DOWN+24,line, - m_reg[0x7c] & 0x40 ? color[1] : color[0]); - /* 603c: 3 STAT 603d: 0 BUSY, 1 DEF, 2 SHIFT, 3 HYP, 4 PRO, 5 RUN, 6 CAL 607c: 0 E, 1 M, 2 (), 3 RAD, 4 G, 5 DE, 6 PRINT */ + + pocketc_draw_special(bitmap, RIGHT+149, DOWN+24, s_line, BIT(m_reg[0x3c], 3) ? color[1] : color[0]); + + pocketc_draw_special(bitmap, RIGHT, DOWN-10, s_busy, BIT(m_reg[0x3d], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+18, DOWN-10, s_def, BIT(m_reg[0x3d], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+43, DOWN-10, s_shift, BIT(m_reg[0x3d], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+63, DOWN-10, s_hyp, BIT(m_reg[0x3d], 3) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+38, DOWN+24, s_line, BIT(m_reg[0x3d], 4) ? color[1] : color[0]); // pro + pocketc_draw_special(bitmap, RIGHT+23, DOWN+24, s_line, BIT(m_reg[0x3d], 5) ? color[1] : color[0]); // run + pocketc_draw_special(bitmap, RIGHT+8, DOWN+24, s_line, BIT(m_reg[0x3d], 6) ? color[1] : color[0]); // cal + + pocketc_draw_special(bitmap, RIGHT+183, DOWN-10, s_e, BIT(m_reg[0x7c], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+176, DOWN-10, s_m, BIT(m_reg[0x7c], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+168, DOWN-10, s_braces, BIT(m_reg[0x7c], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+138, DOWN-10, s_rad, BIT(m_reg[0x7c], 3) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+134, DOWN-10, s_g, BIT(m_reg[0x7c], 4) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+126, DOWN-10, s_de, BIT(m_reg[0x7c], 5) ? color[1] : color[0]); + pocketc_draw_special(bitmap, RIGHT+165, DOWN+24, s_line, BIT(m_reg[0x7c], 6) ? color[1] : color[0]); // print + return 0; } diff --git a/src/mame/video/pc1403.cpp b/src/mame/video/pc1403.cpp index c38cea3b84c..d007dd4c82c 100644 --- a/src/mame/video/pc1403.cpp +++ b/src/mame/video/pc1403.cpp @@ -2,20 +2,23 @@ // copyright-holders:Peter Trauner /***************************************************************************** * - * pc1403.c - * portable sharp pc1403 video emulator interface - * (sharp pocket computers) + * pc1403.cpp + * Portable Sharp PC1403 video emulator interface + * (Sharp pocket computers) * * Copyright (c) 2001 Peter Trauner, all rights reserved. * - * History of changes: + * Change Log: * 21.07.2001 Several changes listed below were made by Mario Konegger * (konegger@itp.tu-graz.ac.at) - * Placed the grafical symbols onto the right place and added - * some symbols, so the display is correct rebuit. - * Added a strange behaviour of the display concerning the on/off - * state and the BUSY-symbol, which I found out with experiments - * with my own pc1403. + * Placed the graphical symbols in the right place and added + * some symbols, so the display is correct. + * Added an edge case of the display regarding the on/off + * state and the BUSY symbol, which was found out with testing + * on an actual PC1403. + * + * To Do: Convert to SVG rendering or an internal layout + * *****************************************************************************/ #include "emu.h" @@ -26,221 +29,216 @@ void pc1403_state::video_start() { - if (strcmp(machine().system().name, "pc1403h") == 0) - { - m_DOWN = 69; - m_RIGHT = 155; - } - else - { - m_DOWN = 67; - m_RIGHT = 152; - } + m_down = 67; + m_right = 152; +} + +void pc1403h_state::video_start() +{ + m_down = 69; + m_right = 155; } -READ8_MEMBER(pc1403_state::pc1403_lcd_read) +READ8_MEMBER(pc1403_state::lcd_read) { return m_reg[offset]; } -WRITE8_MEMBER(pc1403_state::pc1403_lcd_write) +WRITE8_MEMBER(pc1403_state::lcd_write) { - m_reg[offset]=data; + m_reg[offset] = data; } -static const POCKETC_FIGURE line={ /* simple line */ +const char* const pc1403_state::s_line[5] = /* simple line */ +{ + " ", + " ", "11111", "11111", - "11111e" + "11111" }; -static const POCKETC_FIGURE busy={ + +const char* const pc1403_state::s_busy[5] = +{ "11 1 1 11 1 1", "1 1 1 1 1 1 1", "11 1 1 1 1 1", - "1 1 1 1 1 1", - "11 1 11 1e" -}, def={ + "1 1 1 1 1 1 ", + "11 1 11 1 " +}; +const char* const pc1403_state::s_def[5] = +{ "11 111 111", - "1 1 1 1", - "1 1 111 11", - "1 1 1 1", - "11 111 1e" -}, shift={ + "1 1 1 1 ", + "1 1 111 11 ", + "1 1 1 1 ", + "11 111 1 " +}; +const char* const pc1403_state::s_shift[5] = +{ " 11 1 1 1 111 111", - "1 1 1 1 1 1", - " 1 111 1 11 1", - " 1 1 1 1 1 1", - "11 1 1 1 1 1e" -}, hyp={ - "1 1 1 1 11", + "1 1 1 1 1 1 ", + " 1 111 1 11 1 ", + " 1 1 1 1 1 1 ", + "11 1 1 1 1 1 " +}; +const char* const pc1403_state::s_hyp[5] = +{ + "1 1 1 1 11 ", "1 1 1 1 1 1", - "111 1 1 11", - "1 1 1 1", - "1 1 1 1e" -}, de={ + "111 1 1 11 ", + "1 1 1 1 ", + "1 1 1 1 " +}; +const char* const pc1403_state::s_de[5] = +{ "11 111", - "1 1 1", + "1 1 1 ", "1 1 111", - "1 1 1", - "11 111e" -}, g={ + "1 1 1 ", + "11 111" +}; +const char* const pc1403_state::s_g[5] = +{ " 11", - "1", + "1 ", "1 1", "1 1", - " 11e" -}, rad={ - "11 1 11", + " 11" +}; +const char* const pc1403_state::s_rad[5] = +{ + "11 1 11 ", "1 1 1 1 1 1", "11 111 1 1", "1 1 1 1 1 1", - "1 1 1 1 11e" -}, braces={ - " 1 1", + "1 1 1 1 11 " +}; +const char* const pc1403_state::s_braces[5] = +{ + " 1 1 ", "1 1", "1 1", "1 1", - " 1 1e" -}, m={ + " 1 1 " +}; +const char* const pc1403_state::s_m[5] = +{ "1 1", "11 11", "1 1 1", "1 1", - "1 1e" -}, e={ + "1 1" +}; +const char* const pc1403_state::s_e[5] = +{ "111", - "1", + "1 ", "111", - "1", - "111e" -}, kana={ // katakana charset + "1 ", + "111" +}; +const char* const pc1403_state::s_kana[5] = // katakana charset +{ " 1 1 ", " 11111 111", " 1 1 1 ", " 1 1 1 ", - "1 1 1e" -}, shoo={ // minor + "1 1 1 " +}; +const char* const pc1403_state::s_shoo[5] = // minor +{ " 1 ", " 1 1 1 ", "1 1 1", " 1 ", - " 1e" -}, sml={ - " 11 1 1 1", - "1 111 1", - " 1 1 1 1", - " 1 1 1 1", - "11 1 1 111e" + " 1 " +}; +const char* const pc1403_state::s_sml[5] = +{ + " 11 1 1 1 ", + "1 111 1 ", + " 1 1 1 1 ", + " 1 1 1 1 ", + "11 1 1 111" }; -uint32_t pc1403_state::screen_update_pc1403(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t pc1403_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int x, y, i, j; - int color[3]; + const int contrast = m_dsw0->read() & 7; + int color[3] = + { + 7, + BIT(m_portc, 0) ? 8 : 7, + 8 + }; bitmap.fill(11, cliprect); - /* HJB: we cannot initialize array with values from other arrays, thus... */ - color[0] = 7; // pocketc_colortable[CONTRAST][0]; - color[2] = 8; // pocketc_colortable[CONTRAST][1]; - color[1] = (m_portc & 1) ? color[2] : color[0]; - - if (m_portc & 1) + if (BIT(m_portc, 0)) { - for (x=m_RIGHT, y=m_DOWN, i=0; i<6*5; x+=2) { - for (j=0; j<5; j++, i++, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } - for (i=9*5; i<12*5; x+=2) - { - for (j=0; j<5; j++, i++, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } - for (i=6*5; i<9*5; x+=2) - { - for (j=0; j<5; j++, i++, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } - for (i=0x7b-3*5; i>0x7b-6*5; x+=2) - { - for (j=0; j<5; j++, i--, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } - for (i=0x7b; i>0x7b-3*5; x+=2) - { - for (j=0; j<5; j++, i--, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } - for (i=0x7b-6*5; i>0x7b-12*5; x+=2) - { - for (j=0; j<5; j++, i--, x+=2) - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, m_reg[i],CONTRAST,0,0, - x,y); - } + int x = m_right; + int y = m_down; + for (int i = 0; i < 6*5; x+=2) + for (int j = 0; j < 5; j++, i++, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 9*5; i < 12*5; x+=2) + for (int j = 0; j < 5; j++, i++, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 6*5; i < 9*5; x += 2) + for (int j = 0; j < 5; j++, i++, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 0x7b - 3*5; i > 0x7b - 6*5; x+=2) + for (int j = 0; j < 5; j++, i--, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 0x7b; i > 0x7b - 3*5; x += 2) + for (int j = 0; j < 5; j++, i--, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); + + for (int i = 0x7b - 6*5; i > 0x7b - 12*5; x += 2) + for (int j = 0; j < 5; j++, i--, x+=2) + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, m_reg[i], contrast, 0, 0, x, y); } - /* if display is off, busy is always visible? it seems to behave like that. */ - /* But if computer is off, busy is hidden. */ - if(!(m_portc&8)) - { - if (m_portc&1) - pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, - m_reg[0x3d] & 1 ? color[2] : color[0]); - else pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, color[2]); + /* If the display is off, busy is always visible. But if the computer is off, busy is hidden. */ + if(!BIT(m_portc, 3)) + { + if (BIT(m_portc, 0)) + pocketc_draw_special(bitmap, m_right, m_down-13, s_busy, BIT(m_reg[0x3d], 0) ? color[2] : color[0]); + else + pocketc_draw_special(bitmap, m_right, m_down-13, s_busy, color[2]); } else - pocketc_draw_special(bitmap, m_RIGHT, m_DOWN-13, busy, color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+18, m_DOWN-13, def, - m_reg[0x3d] & 0x02 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+43, m_DOWN-13, shift, - m_reg[0x3d] & 0x04 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+63, m_DOWN-13, hyp, - m_reg[0x3d] & 0x08 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+155, m_DOWN-13, kana, - m_reg[0x3c] & 0x01 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+167, m_DOWN-13, shoo, - m_reg[0x3c] & 0x02 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+178, m_DOWN-13, sml, - m_reg[0x3c] & 0x04 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+191, m_DOWN-13, de, - m_reg[0x7c] & 0x20 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+199, m_DOWN-13, g, - m_reg[0x7c] & 0x10 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+203, m_DOWN-13, rad, - m_reg[0x7c] & 0x08 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+266, m_DOWN-13, braces, - m_reg[0x7c] & 0x04 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+274, m_DOWN-13, m, - m_reg[0x7c] & 0x02 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+281, m_DOWN-13, e, - m_reg[0x7c] & 0x01 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+10, m_DOWN+27, line /* empty */, - m_reg[0x3c] & 0x40 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+31, m_DOWN+27, line /*calc*/, - m_reg[0x3d] & 0x40 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+52, m_DOWN+27, line/*run*/, - m_reg[0x3d] & 0x20 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+73, m_DOWN+27, line/*prog*/, - m_reg[0x3d] & 0x10 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+94, m_DOWN+27, line /* empty */, - m_reg[0x3c] & 0x20 ? color[1] : color[0]); - - pocketc_draw_special(bitmap, m_RIGHT+232, m_DOWN+27, line/*matrix*/, - m_reg[0x3c] & 0x10 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+253, m_DOWN+27, line/*stat*/, - m_reg[0x3c] & 0x08 ? color[1] : color[0]); - pocketc_draw_special(bitmap, m_RIGHT+274, m_DOWN+27, line/*print*/, - m_reg[0x7c] & 0x40 ? color[1] : color[0]); + { + pocketc_draw_special(bitmap, m_right, m_down-13, s_busy, color[0]); + } + + pocketc_draw_special(bitmap, m_right+155, m_down-13, s_kana, BIT(m_reg[0x3c], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+167, m_down-13, s_shoo, BIT(m_reg[0x3c], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+178, m_down-13, s_sml, BIT(m_reg[0x3c], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+253, m_down+25, s_line, BIT(m_reg[0x3c], 3) ? color[1] : color[0]); // stat + pocketc_draw_special(bitmap, m_right+232, m_down+25, s_line, BIT(m_reg[0x3c], 4) ? color[1] : color[0]); // matrix + pocketc_draw_special(bitmap, m_right+94, m_down+25, s_line, BIT(m_reg[0x3c], 5) ? color[1] : color[0]); // empty + pocketc_draw_special(bitmap, m_right+10, m_down+25, s_line, BIT(m_reg[0x3c], 6) ? color[1] : color[0]); // empty + + pocketc_draw_special(bitmap, m_right+18, m_down-13, s_def, BIT(m_reg[0x3d], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+43, m_down-13, s_shift, BIT(m_reg[0x3d], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+63, m_down-13, s_hyp, BIT(m_reg[0x3d], 3) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+73, m_down+25, s_line, BIT(m_reg[0x3d], 4) ? color[1] : color[0]); // prog + pocketc_draw_special(bitmap, m_right+52, m_down+25, s_line, BIT(m_reg[0x3d], 5) ? color[1] : color[0]); // run + pocketc_draw_special(bitmap, m_right+31, m_down+25, s_line, BIT(m_reg[0x3d], 6) ? color[1] : color[0]); // calc + + pocketc_draw_special(bitmap, m_right+281, m_down-13, s_e, BIT(m_reg[0x7c], 0) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+274, m_down-13, s_m, BIT(m_reg[0x7c], 1) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+266, m_down-13, s_braces, BIT(m_reg[0x7c], 2) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+203, m_down-13, s_rad, BIT(m_reg[0x7c], 3) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+199, m_down-13, s_g, BIT(m_reg[0x7c], 4) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+191, m_down-13, s_de, BIT(m_reg[0x7c], 5) ? color[1] : color[0]); + pocketc_draw_special(bitmap, m_right+274, m_down+25, s_line, BIT(m_reg[0x7c], 6) ? color[1] : color[0]); // print return 0; } diff --git a/src/mame/video/pgm2.cpp b/src/mame/video/pgm2.cpp index 081a730668e..81353357227 100644 --- a/src/mame/video/pgm2.cpp +++ b/src/mame/video/pgm2.cpp @@ -4,31 +4,40 @@ #include "emu.h" #include "includes/pgm2.h" -inline void pgm2_state::draw_sprite_pixel(const rectangle &cliprect, int palette_offset, int realx, int realy, int pal) +inline void pgm2_state::draw_sprite_pixel(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 palette_offset, s16 realx, s16 realy, u16 pal, u8 pri) { if (cliprect.contains(realx, realy)) { - uint16_t pix = m_sprites_colour[palette_offset] & 0x3f; // there are some stray 0xff bytes in some roms, so mask - uint16_t pendat = pix + (pal * 0x40); - uint16_t* dstptr_bitmap = &m_sprite_bitmap.pix16(realy); - dstptr_bitmap[realx] = pendat; + u8 *dstpri = &m_screen->priority().pix8(realy); + if ((dstpri[realx] & 1) == 0) + { + if (!pri || ((dstpri[realx] & 2) == 0)) + { + u16 const pix = m_sprites_colour[palette_offset] & 0x3f; // there are some stray 0xff bytes in some roms, so mask + u16 const pendat = pix + (pal * 0x40); + u32* dstptr_bitmap = &bitmap.pix32(realy); + dstptr_bitmap[realx] = m_sp_palette->pen(pendat); + dstpri[realx] |= 1; + } + } } } -inline void pgm2_state::draw_sprite_chunk(const rectangle &cliprect, int &palette_offset, int x, int realy, int sizex, int xdraw, int pal, uint32_t maskdata, uint32_t zoomx_bits, int repeats, int &realxdraw, int realdraw_inc, int palette_inc) +inline void pgm2_state::draw_sprite_chunk(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 &palette_offset, s16 x, s16 realy, + u16 sizex, int xdraw, u16 pal, u32 maskdata, u32 zoomx_bits, u8 repeats, s16 &realxdraw, s8 realdraw_inc, s8 palette_inc, u8 pri) { for (int xchunk = 0; xchunk < 32; xchunk++) { - int pix, xzoombit; + u8 pix, xzoombit; if (palette_inc == -1) { - pix = (maskdata >> xchunk) & 1; - xzoombit = (zoomx_bits >> xchunk) & 1; + pix = BIT(maskdata, xchunk); + xzoombit = BIT(zoomx_bits, xchunk); } else { - pix = (maskdata >> (31 - xchunk)) & 1; - xzoombit = (zoomx_bits >> (31 - xchunk)) & 1; + pix = BIT(maskdata, 31 - xchunk); + xzoombit = BIT(zoomx_bits, 31 - xchunk); } if (pix) @@ -38,26 +47,26 @@ inline void pgm2_state::draw_sprite_chunk(const rectangle &cliprect, int &palett // draw it the base number of times for (int i = 0; i < repeats; i++) { - draw_sprite_pixel(cliprect, palette_offset, x + realxdraw, realy, pal); + draw_sprite_pixel(bitmap, cliprect, palette_offset, x + realxdraw, realy, pal, pri); realxdraw += realdraw_inc; } // draw it again if zoom bit is set if (xzoombit) { - draw_sprite_pixel(cliprect, palette_offset, x + realxdraw, realy, pal); + draw_sprite_pixel(bitmap, cliprect, palette_offset, x + realxdraw, realy, pal, pri); realxdraw += realdraw_inc; } palette_offset += palette_inc; - palette_offset &= m_sprites_colour_mask; + palette_offset &= m_sprites_colour.mask(); } else // shrink { - if (xzoombit) draw_sprite_pixel(cliprect, palette_offset, x + realxdraw, realy, pal); + if (xzoombit) draw_sprite_pixel(bitmap, cliprect, palette_offset, x + realxdraw, realy, pal, pri); palette_offset += palette_inc; - palette_offset &= m_sprites_colour_mask; + palette_offset &= m_sprites_colour.mask(); if (xzoombit) realxdraw += realdraw_inc; @@ -86,33 +95,34 @@ inline void pgm2_state::draw_sprite_chunk(const rectangle &cliprect, int &palett } -inline void pgm2_state::skip_sprite_chunk(int &palette_offset, uint32_t maskdata, int reverse) +inline void pgm2_state::skip_sprite_chunk(u32 &palette_offset, u32 maskdata, bool reverse) { - int bits = population_count_32(maskdata); + s32 bits = population_count_32(maskdata); if (!reverse) { - palette_offset+=bits; + palette_offset += bits; } else { - palette_offset-=bits; + palette_offset -= bits; } - palette_offset &= m_sprites_colour_mask; + palette_offset &= m_sprites_colour.mask(); } -inline void pgm2_state::draw_sprite_line(const rectangle &cliprect, int &mask_offset, int &palette_offset, int x, int realy, int flipx, int reverse, int sizex, int pal, int zoomybit, int zoomx_bits, int xrepeats) +inline void pgm2_state::draw_sprite_line(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32 &mask_offset, u32 &palette_offset, s16 x, s16 realy, + bool flipx, bool reverse, u16 sizex, u16 pal, u8 zoomybit, u32 zoomx_bits, u8 xrepeats, u8 pri) { - int realxdraw = 0; + s16 realxdraw = 0; if (flipx ^ reverse) realxdraw = (population_count_32(zoomx_bits) * sizex) - 1; for (int xdraw = 0; xdraw < sizex; xdraw++) { - uint32_t maskdata = m_sprites_mask[mask_offset + 0] << 24; + u32 maskdata = m_sprites_mask[mask_offset + 0] << 24; maskdata |= m_sprites_mask[mask_offset + 1] << 16; maskdata |= m_sprites_mask[mask_offset + 2] << 8; maskdata |= m_sprites_mask[mask_offset + 3] << 0; @@ -128,36 +138,32 @@ inline void pgm2_state::draw_sprite_line(const rectangle &cliprect, int &mask_of mask_offset += 4; } - - mask_offset &= m_sprites_mask_mask; + mask_offset &= m_sprites_mask.mask(); if (zoomybit) { if (!flipx) { - if (!reverse) draw_sprite_chunk(cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, 1, 1); - else draw_sprite_chunk(cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, -1, -1); + if (!reverse) draw_sprite_chunk(bitmap, cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, 1, 1, pri); + else draw_sprite_chunk(bitmap, cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, -1, -1, pri); } else { - if (!reverse) draw_sprite_chunk(cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, -1, 1); - else draw_sprite_chunk(cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, 1, -1); - + if (!reverse) draw_sprite_chunk(bitmap, cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, -1, 1, pri); + else draw_sprite_chunk(bitmap, cliprect, palette_offset, x, realy, sizex, xdraw, pal, maskdata, zoomx_bits, xrepeats, realxdraw, 1, -1, pri); } } else skip_sprite_chunk(palette_offset, maskdata, reverse); } } -void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, uint32_t* spriteram) +void pgm2_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, u32* spriteram) { - m_sprite_bitmap.fill(0x8000, cliprect); - - int endoflist = -1; + s32 endoflist = -1; - //printf("frame\n"); + //logerror("frame\n"); - for (int i = 0; i < 0x2000 / 4; i += 4) + for (int i = 0; i < m_sp_videoram.bytes() / 4; i += 4) { if (spriteram[i + 2] & 0x80000000) { @@ -166,47 +172,47 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, } } - if (endoflist != -1) + if (endoflist > 0) { - for (int i = 0; i < endoflist - 2; i += 4) + for (int i = endoflist - 4; i >= 0; i -= 4) { - //printf("sprite with %08x %08x %08x %08x\n", spriteram[i + 0], spriteram[i + 1], spriteram[i + 2], spriteram[i + 3]); + //logerror("sprite with %08x %08x %08x %08x\n", spriteram[i + 0], spriteram[i + 1], spriteram[i + 2], spriteram[i + 3]); - int x = (spriteram[i + 0] & 0x000007ff) >> 0; - int y = (spriteram[i + 0] & 0x003ff800) >> 11; - int pal = (spriteram[i + 0] & 0x0fc00000) >> 22; - int pri = (spriteram[i + 0] & 0x80000000) >> 31; + s16 x = (spriteram[i + 0] & 0x000007ff) >> 0; + s16 y = (spriteram[i + 0] & 0x003ff800) >> 11; + u16 pal = (spriteram[i + 0] & 0x0fc00000) >> 22; + u8 const pri = (spriteram[i + 0] & 0x80000000) >> 31; - int unk0 = (spriteram[i + 0] & 0x30000000) >> 0; + u32 const unk0 = (spriteram[i + 0] & 0x30000000) >> 0; // kov3 uses this in places (eg. horsemen special move heads) and shops when it can only possibly mean 'disable' // it is also used in places on kov2nl and orleg2, often the 'power up' effects surrounding your character to create an on/off flicker each frame - int disable = (spriteram[i + 0] & 0x40000000) >> 30; + bool disable = (spriteram[i + 0] & 0x40000000) >> 30; if (disable) continue; - int sizex = (spriteram[i + 1] & 0x0000003f) >> 0; - int sizey = (spriteram[i + 1] & 0x00007fc0) >> 6; - int flipx = (spriteram[i + 1] & 0x00800000) >> 23; - int reverse = (spriteram[i + 1] & 0x80000000) >> 31; // more of a 'reverse entire drawing' flag than y-flip, but used for that purpose - int zoomx = (spriteram[i + 1] & 0x007f0000) >> 16; - int zoomy = (spriteram[i + 1] & 0x7f000000) >> 24; - int unk1 = (spriteram[i + 1] & 0x00008000) >> 0; + u16 const sizex = (spriteram[i + 1] & 0x0000003f) >> 0; + u16 const sizey = (spriteram[i + 1] & 0x00007fc0) >> 6; + bool const flipx = (spriteram[i + 1] & 0x00800000) >> 23; + bool const reverse = (spriteram[i + 1] & 0x80000000) >> 31; // more of a 'reverse entire drawing' flag than y-flip, but used for that purpose + u8 const zoomx = (spriteram[i + 1] & 0x007f0000) >> 16; + u8 const zoomy = (spriteram[i + 1] & 0x7f000000) >> 24; + u32 const unk1 = (spriteram[i + 1] & 0x00008000) >> 0; if (unk0 || unk1) { //popmessage("sprite rendering unused bits set unk0 %08x unk1 %08x\n", unk0, unk1); } - int mask_offset = (spriteram[i + 2] << 1); - int palette_offset = (spriteram[i + 3]); + u32 mask_offset = (spriteram[i + 2] << 1); + u32 palette_offset = (spriteram[i + 3]); // use all the bits of zoom to lookup, probably why the table is copied 4x in RAM - uint32_t zoomy_bits = m_sp_zoom[zoomy]; - uint32_t zoomx_bits = m_sp_zoom[zoomx]; + u32 const zoomy_bits = m_sp_zoom[zoomy]; + u32 const zoomx_bits = m_sp_zoom[zoomx]; // but use these bits as the scale factor - int xrepeats = (zoomx & 0x60)>>5; - int yrepeats = (zoomy & 0x60)>>5; + u8 const xrepeats = (zoomx & 0x60)>>5; + u8 const yrepeats = (zoomy & 0x60)>>5; if (x & 0x400) x -= 0x800; if (y & 0x400) y -= 0x800; @@ -214,21 +220,19 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, if (reverse) mask_offset -= 2; - mask_offset &= m_sprites_mask_mask; - palette_offset &= m_sprites_colour_mask; + mask_offset &= m_sprites_mask.mask(); + palette_offset &= m_sprites_colour.mask(); - pal |= (pri << 6); // encode priority with the palette for manual mixing later + s16 realy = y; - int realy = y; - - int sourceline = 0; + s16 sourceline = 0; for (int ydraw = 0; ydraw < sizey; sourceline++) { - int zoomy_bit = (zoomy_bits >> (sourceline & 0x1f)) & 1; + u8 zoomy_bit = BIT(zoomy_bits, sourceline & 0x1f); // store these for when we need to draw a line twice - uint32_t pre_palette_offset = palette_offset; - uint32_t pre_mask_offset = mask_offset; + u32 const pre_palette_offset = palette_offset; + u32 const pre_mask_offset = mask_offset; if (yrepeats != 0) // grow { @@ -237,7 +241,7 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, // draw it the base number of times palette_offset = pre_palette_offset; mask_offset = pre_mask_offset; - draw_sprite_line(cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats); + draw_sprite_line(bitmap, cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats, pri); realy++; } @@ -245,7 +249,7 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, { palette_offset = pre_palette_offset; mask_offset = pre_mask_offset; - draw_sprite_line(cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats); + draw_sprite_line(bitmap, cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats, pri); realy++; } @@ -253,7 +257,7 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, } else // shrink { - draw_sprite_line(cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats); + draw_sprite_line(bitmap, cliprect, mask_offset, palette_offset, x, realy, flipx, reverse, sizex, pal, 1, zoomx_bits, xrepeats, pri); if (zoomy_bit) { @@ -266,38 +270,11 @@ void pgm2_state::draw_sprites(screen_device &screen, const rectangle &cliprect, } } -void pgm2_state::copy_sprites_from_bitmap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri) -{ - pri <<= 12; - - const pen_t *paldata = m_sp_palette->pens(); - uint16_t* srcptr_bitmap; - uint32_t* dstptr_bitmap; - - for (int y = cliprect.min_y; y <= cliprect.max_y; y++) - { - srcptr_bitmap = &m_sprite_bitmap.pix16(y); - dstptr_bitmap = &bitmap.pix32(y); - - for (int x = cliprect.min_x; x <= cliprect.max_x; x++) - { - uint16_t pix = srcptr_bitmap[x]; - - if (pix != 0x8000) - { - if ((pix&0x1000) == pri) - dstptr_bitmap[x] = paldata[pix & 0xfff]; - } - } - - } -} - -uint32_t pgm2_state::screen_update_pgm2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +u32 pgm2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int mode = m_vidmode[0] & 0x00030000; // other bits not used? + u32 const mode = m_vidmode[0] & 0x00030000; // other bits not used? - switch (mode>>16) + switch (mode >> 16) { default: case 0x00: m_screen->set_visible_area(0, 320 - 1, 0, 240 - 1); break; @@ -309,34 +286,30 @@ uint32_t pgm2_state::screen_update_pgm2(screen_device &screen, bitmap_rgb32 &bit m_fg_tilemap->set_scrolly(0, m_fgscroll[0] >> 16); m_bg_tilemap->set_scrolly(0, (m_bgscroll[0x0/4] & 0xffff0000)>>16 ); - for (int y = 0; y <= cliprect.max_y; y++) + for (s16 y = cliprect.top(); y <= cliprect.bottom(); y++) { - uint16_t linescroll = (y & 1) ? ((m_lineram[(y >> 1)] & 0xffff0000) >> 16) : (m_lineram[(y >> 1)] & 0x0000ffff); + u16 const linescroll = (y & 1) ? ((m_lineram[(y >> 1)] & 0xffff0000) >> 16) : (m_lineram[(y >> 1)] & 0x0000ffff); m_bg_tilemap->set_scrollx((y + ((m_bgscroll[0x0 / 4] & 0xffff0000) >> 16)) & 0x3ff, ((m_bgscroll[0x0 / 4] & 0x0000ffff) >> 0) + linescroll); } const pen_t *paldata = m_bg_palette->pens(); bitmap.fill(paldata[0], cliprect); // are there any places bg pen is showing so we know what it should be? + m_screen->priority().fill(0, cliprect); - draw_sprites(screen, cliprect, m_spritebufferram.get()); - - copy_sprites_from_bitmap(screen, bitmap, cliprect, 1); - - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - copy_sprites_from_bitmap(screen, bitmap, cliprect, 0); - + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 2); + draw_sprites(bitmap, cliprect, m_spritebufferram.get()); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } -WRITE_LINE_MEMBER(pgm2_state::screen_vblank_pgm2) +WRITE_LINE_MEMBER(pgm2_state::screen_vblank) { // rising edge if (state) { memcpy(m_spritebufferram.get(), m_sp_videoram, 0x2000); + m_arm_aic->set_irq(12, ASSERT_LINE); } } @@ -348,9 +321,9 @@ WRITE32_MEMBER(pgm2_state::fg_videoram_w) TILE_GET_INFO_MEMBER(pgm2_state::get_fg_tile_info) { - int tileno = (m_fg_videoram[tile_index] & 0x0003ffff) >> 0; - int colour = (m_fg_videoram[tile_index] & 0x007c0000) >> 18; // 5 bits - int flipxy = (m_fg_videoram[tile_index] & 0x01800000) >> 23; + u32 const tileno = (m_fg_videoram[tile_index] & 0x0003ffff) >> 0; + u8 const colour = (m_fg_videoram[tile_index] & 0x007c0000) >> 18; // 5 bits + u8 const flipxy = (m_fg_videoram[tile_index] & 0x01800000) >> 23; SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPXY(flipxy)); } @@ -363,9 +336,9 @@ WRITE32_MEMBER(pgm2_state::bg_videoram_w) TILE_GET_INFO_MEMBER(pgm2_state::get_bg_tile_info) { - int tileno = (m_bg_videoram[tile_index] & 0x0003ffff) >> 0; - int colour = (m_bg_videoram[tile_index] & 0x003c0000) >> 18; // 4 bits - int flipxy = (m_bg_videoram[tile_index] & 0x01800000) >> 23; + u32 const tileno = (m_bg_videoram[tile_index] & 0x0003ffff) >> 0; + u8 const colour = (m_bg_videoram[tile_index] & 0x003c0000) >> 18; // 4 bits + u8 const flipxy = (m_bg_videoram[tile_index] & 0x01800000) >> 23; SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPXY(flipxy)); } @@ -379,13 +352,8 @@ void pgm2_state::video_start() m_bg_tilemap->set_transparent_pen(0); m_bg_tilemap->set_scroll_rows(32 * 32); - m_spritebufferram = make_unique_clear<uint32_t[]>(0x2000 / 4); - - m_screen->register_screen_bitmap(m_sprite_bitmap); + m_spritebufferram = make_unique_clear<u32[]>(0x2000 / 4); save_pointer(NAME(m_spritebufferram), 0x2000 / 4); - - m_sprites_mask_mask = memregion("sprites_mask")->bytes() - 1; - m_sprites_colour_mask = memregion("sprites_colour")->bytes() - 1; } diff --git a/src/mame/video/playmark.cpp b/src/mame/video/playmark.cpp index 4601f6d4fa9..73d2ef93526 100644 --- a/src/mame/video/playmark.cpp +++ b/src/mame/video/playmark.cpp @@ -394,7 +394,7 @@ void playmark_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, color, flipx,0, sx + m_xoffset,sy + m_yoffset, - screen.priority(),m_pri_masks[pri],0); + screen.priority(),m_pri_masks[pri],m_sprtranspen); } } @@ -431,7 +431,7 @@ void playmark_state::bigtwinb_draw_sprites( screen_device &screen, bitmap_ind16 code, color, flipx,0, - sx + m_xoffset,sy + m_yoffset, 0); + sx + m_xoffset,sy + m_yoffset, m_sprtranspen); } } diff --git a/src/mame/video/pocketc.cpp b/src/mame/video/pocketc.cpp index 276b525d947..b93c2bda448 100644 --- a/src/mame/video/pocketc.cpp +++ b/src/mame/video/pocketc.cpp @@ -3,24 +3,20 @@ #include "emu.h" #include "includes/pocketc.h" -/* PC126x - 24x2 5x7 space between char - 2000 .. 203b, 2800 .. 283b - 2040 .. 207b, 2840 .. 287b - 203d: 0 BUSY, 1 PRINT, 3 JAPAN, 4 SMALL, 5 SHIFT, 6 DEF - 207c: 1 DEF 1 RAD 2 GRAD 5 ERROR 6 FLAG */ +// TODO: Convert to SVG rendering or internal layout -static const uint8_t pocketc_palette[] = +const rgb_t pocketc_state::indirect_palette[] = { - 99,107,99, - 94,111,103, - 255,255,255, - 255,255,255, - 60, 66, 60, - 0, 0, 0 + rgb_t( 99, 107, 99), + rgb_t( 94, 111, 103), + rgb_t(255, 255, 255), + rgb_t(255, 255, 255), + rgb_t( 60, 66, 60), + rgb_t( 0, 0, 0) }; -const unsigned short pocketc_state::pocketc_colortable[8][2] = { +const int pocketc_state::colortable[8][2] = +{ { 5, 4 }, { 5, 0 }, { 5, 2 }, @@ -33,38 +29,20 @@ const unsigned short pocketc_state::pocketc_colortable[8][2] = { PALETTE_INIT_MEMBER(pocketc_state, pocketc) { - uint8_t i=0, r, b, g, color_count = 6; - - while (color_count--) - { - r = pocketc_palette[i++]; g = pocketc_palette[i++]; b = pocketc_palette[i++]; - palette.set_indirect_color(5 - color_count, rgb_t(r, g, b)); - } + for (int i = 0; i < 6; i++) + palette.set_indirect_color(i, indirect_palette[i]); - for( i = 0; i < 8; i++ ) + for (int i = 0; i < 8; i++) { - palette.set_pen_indirect(i*2, pocketc_colortable[i][0]); - palette.set_pen_indirect(i*2+1, pocketc_colortable[i][1]); + palette.set_pen_indirect(i*2, colortable[i][0]); + palette.set_pen_indirect(i*2+1, colortable[i][1]); } } - -/* Draw an indicator (DEG, SHIFT, etc) */ -void pocketc_state::pocketc_draw_special(bitmap_ind16 &bitmap, int x, int y, const POCKETC_FIGURE fig, int color) +void pocketc_state::pocketc_draw_special(bitmap_ind16 &bitmap, int x, int y, const char* const *fig, int color) { - int i,j; - for (i=0; fig[i]; i++, y++) - { - for (j=0; fig[i][j]!=0; j++) - { - switch(fig[i][j]) - { - case '1': - bitmap.pix16(y, x+j) = color; - break; - case 'e': - return; - } - } - } + for (int i = 0; i < 5; i++, y++) + for (int j = 0; fig[i][j]; j++) + if (fig[i][j] != ' ') + bitmap.pix16(y, x + j) = color; } diff --git a/src/osd/modules/file/posixptty.cpp b/src/osd/modules/file/posixptty.cpp index 3eab9e45d0c..4a4bc9d8db9 100644 --- a/src/osd/modules/file/posixptty.cpp +++ b/src/osd/modules/file/posixptty.cpp @@ -22,7 +22,7 @@ #if defined(__FreeBSD_kernel__) || defined(__DragonFly__) #include <termios.h> #include <libutil.h> -#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__ANDROID__) +#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) #include <termios.h> #include <util.h> #elif defined(__linux__) || defined(EMSCRIPTEN) diff --git a/src/osd/modules/font/font_dwrite.cpp b/src/osd/modules/font/font_dwrite.cpp index 74e15af9265..f60ef7580c4 100644 --- a/src/osd/modules/font/font_dwrite.cpp +++ b/src/osd/modules/font/font_dwrite.cpp @@ -624,7 +624,7 @@ private: HR_RETHR(fonts->FindFamilyName(familyName.c_str(), &family_index, &exists)); if (!exists) { - osd_printf_error("Font with family name %S does not exist", familyName.c_str()); + osd_printf_error("Font with family name %S does not exist.\n", familyName.c_str()); return E_FAIL; } diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp index 88de1245b89..3cb67e6ded4 100644 --- a/src/osd/modules/lib/osdobj_common.cpp +++ b/src/osd/modules/lib/osdobj_common.cpp @@ -17,16 +17,16 @@ const options_entry osd_options::s_option_entries[] = { { nullptr, nullptr, OPTION_HEADER, "OSD KEYBOARD MAPPING OPTIONS" }, #ifdef SDLMAME_MACOSX - { OSDOPTION_UIMODEKEY, "DEL", OPTION_STRING, "Key to toggle keyboard mode" }, + { OSDOPTION_UIMODEKEY, "DEL", OPTION_STRING, "key to enable/disable MAME controls when emulated system has keyboard inputs" }, #else - { OSDOPTION_UIMODEKEY, "SCRLOCK", OPTION_STRING, "Key to toggle keyboard mode" }, + { OSDOPTION_UIMODEKEY, "SCRLOCK", OPTION_STRING, "key to enable/disable MAME controls when emulated system has keyboard inputs" }, #endif // SDLMAME_MACOSX { nullptr, nullptr, OPTION_HEADER, "OSD FONT OPTIONS" }, - { OSD_FONT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for ui font: " }, + { OSD_FONT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for UI font: " }, { nullptr, nullptr, OPTION_HEADER, "OSD OUTPUT OPTIONS" }, - { OSD_OUTPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for output: " }, + { OSD_OUTPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for output notifications: " }, { nullptr, nullptr, OPTION_HEADER, "OSD INPUT OPTIONS" }, { OSD_KEYBOARDINPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for keyboard input: " }, @@ -40,8 +40,8 @@ const options_entry osd_options::s_option_entries[] = { nullptr, nullptr, OPTION_HEADER, "OSD DEBUGGING OPTIONS" }, { OSDOPTION_DEBUGGER, OSDOPTVAL_AUTO, OPTION_STRING, "debugger used: " }, - { OSDOPTION_DEBUGGER_FONT ";dfont", OSDOPTVAL_AUTO, OPTION_STRING, "specifies the font to use for debugging" }, - { OSDOPTION_DEBUGGER_FONT_SIZE ";dfontsize", "0", OPTION_FLOAT, "specifies the font size to use for debugging" }, + { OSDOPTION_DEBUGGER_FONT ";dfont", OSDOPTVAL_AUTO, OPTION_STRING, "font to use for debugger views" }, + { OSDOPTION_DEBUGGER_FONT_SIZE ";dfontsize", "0", OPTION_FLOAT, "font size to use for debugger views" }, { OSDOPTION_WATCHDOG ";wdog", "0", OPTION_INTEGER, "force the program to terminate if no updates within specified number of seconds" }, { nullptr, nullptr, OPTION_HEADER, "OSD PERFORMANCE OPTIONS" }, @@ -51,10 +51,10 @@ const options_entry osd_options::s_option_entries[] = { nullptr, nullptr, OPTION_HEADER, "OSD VIDEO OPTIONS" }, // OS X can be trusted to have working hardware OpenGL, so default to it on for the best user experience { OSDOPTION_VIDEO, OSDOPTVAL_AUTO, OPTION_STRING, "video output method: " }, - { OSDOPTION_NUMSCREENS "(1-4)", "1", OPTION_INTEGER, "number of screens to create; usually, you want just one" }, + { OSDOPTION_NUMSCREENS "(1-4)", "1", OPTION_INTEGER, "number of output screens/windows to create; usually, you want just one" }, { OSDOPTION_WINDOW ";w", "0", OPTION_BOOLEAN, "enable window mode; otherwise, full screen mode is assumed" }, - { OSDOPTION_MAXIMIZE ";max", "1", OPTION_BOOLEAN, "default to maximized windows; otherwise, windows will be minimized" }, - { OSDOPTION_WAITVSYNC ";vs", "0", OPTION_BOOLEAN, "enable waiting for the start of VBLANK before flipping screens; reduces tearing effects" }, + { OSDOPTION_MAXIMIZE ";max", "1", OPTION_BOOLEAN, "default to maximized windows" }, + { OSDOPTION_WAITVSYNC ";vs", "0", OPTION_BOOLEAN, "enable waiting for the start of VBLANK before flipping screens (reduces tearing effects)" }, { OSDOPTION_SYNCREFRESH ";srf", "0", OPTION_BOOLEAN, "enable using the start of VBLANK for throttling instead of the game time" }, { OSD_MONITOR_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "monitor discovery method: " }, @@ -90,16 +90,16 @@ const options_entry osd_options::s_option_entries[] = { OSDOPTION_SWITCHRES, "0", OPTION_BOOLEAN, "enable resolution switching" }, { nullptr, nullptr, OPTION_HEADER, "OSD ACCELERATED VIDEO OPTIONS" }, - { OSDOPTION_FILTER ";glfilter;flt", "1", OPTION_BOOLEAN, "enable bilinear filtering on screen output" }, - { OSDOPTION_PRESCALE "(1-3)", "1", OPTION_INTEGER, "scale screen rendering by this amount in software" }, + { OSDOPTION_FILTER ";glfilter;flt", "1", OPTION_BOOLEAN, "use bilinear filtering when scaling emulated video" }, + { OSDOPTION_PRESCALE "(1-3)", "1", OPTION_INTEGER, "scale emulated video by this factor before applying filters/shaders" }, #if USE_OPENGL { nullptr, nullptr, OPTION_HEADER, "OpenGL-SPECIFIC OPTIONS" }, - { OSDOPTION_GL_FORCEPOW2TEXTURE, "0", OPTION_BOOLEAN, "force power of two textures (default no)" }, + { OSDOPTION_GL_FORCEPOW2TEXTURE, "0", OPTION_BOOLEAN, "force power-of-two texture sizes (default no)" }, { OSDOPTION_GL_NOTEXTURERECT, "0", OPTION_BOOLEAN, "don't use OpenGL GL_ARB_texture_rectangle (default on)" }, - { OSDOPTION_GL_VBO, "1", OPTION_BOOLEAN, "enable OpenGL VBO, if available (default on)" }, - { OSDOPTION_GL_PBO, "1", OPTION_BOOLEAN, "enable OpenGL PBO, if available (default on)" }, - { OSDOPTION_GL_GLSL, "0", OPTION_BOOLEAN, "enable OpenGL GLSL, if available (default off)" }, + { OSDOPTION_GL_VBO, "1", OPTION_BOOLEAN, "enable OpenGL VBO if available (default on)" }, + { OSDOPTION_GL_PBO, "1", OPTION_BOOLEAN, "enable OpenGL PBO if available (default on)" }, + { OSDOPTION_GL_GLSL, "0", OPTION_BOOLEAN, "enable OpenGL GLSL if available (default off)" }, { OSDOPTION_GLSL_FILTER, "1", OPTION_STRING, "enable OpenGL GLSL filtering instead of FF filtering 0-plain, 1-bilinear (default), 2-bicubic" }, { OSDOPTION_SHADER_MAME "0", OSDOPTVAL_NONE, OPTION_STRING, "custom OpenGL GLSL shader set mame bitmap 0" }, { OSDOPTION_SHADER_MAME "1", OSDOPTVAL_NONE, OPTION_STRING, "custom OpenGL GLSL shader set mame bitmap 1" }, @@ -136,7 +136,7 @@ const options_entry osd_options::s_option_entries[] = #ifdef SDLMAME_MACOSX { nullptr, nullptr, OPTION_HEADER, "CoreAudio-SPECIFIC OPTIONS" }, - { OSDOPTION_AUDIO_OUTPUT, OSDOPTVAL_AUTO, OPTION_STRING, "Audio output device" }, + { OSDOPTION_AUDIO_OUTPUT, OSDOPTVAL_AUTO, OPTION_STRING, "audio output device" }, { OSDOPTION_AUDIO_EFFECT "0", OSDOPTVAL_NONE, OPTION_STRING, "AudioUnit effect 0" }, { OSDOPTION_AUDIO_EFFECT "1", OSDOPTVAL_NONE, OPTION_STRING, "AudioUnit effect 1" }, { OSDOPTION_AUDIO_EFFECT "2", OSDOPTVAL_NONE, OPTION_STRING, "AudioUnit effect 2" }, @@ -214,8 +214,8 @@ void osd_common_t::register_options() REGISTER_MODULE(m_mod_man, FONT_SDL); REGISTER_MODULE(m_mod_man, FONT_NONE); - REGISTER_MODULE(m_mod_man, SOUND_XAUDIO2); REGISTER_MODULE(m_mod_man, SOUND_DSOUND); + REGISTER_MODULE(m_mod_man, SOUND_XAUDIO2); REGISTER_MODULE(m_mod_man, SOUND_COREAUDIO); REGISTER_MODULE(m_mod_man, SOUND_JS); REGISTER_MODULE(m_mod_man, SOUND_SDL); diff --git a/src/osd/modules/sound/sdl_sound.cpp b/src/osd/modules/sound/sdl_sound.cpp index f6dadca0026..b59f0cf9ea2 100644 --- a/src/osd/modules/sound/sdl_sound.cpp +++ b/src/osd/modules/sound/sdl_sound.cpp @@ -304,7 +304,7 @@ void sound_sdl::update_audio_stream(bool is_throttled, const int16_t *buffer, in if (stream_buffer->free_size() < bytes_this_frame) { if (LOG_SOUND) - fprintf(sound_log, "Overflow: DS=%lu FS=%lu BTF=%lu\n", data_size, free_size, bytes_this_frame); + fprintf(sound_log, "Overflow: DS=%zu FS=%zu BTF=%zu\n", data_size, free_size, bytes_this_frame); buffer_overflows++; return; } @@ -314,7 +314,7 @@ void sound_sdl::update_audio_stream(bool is_throttled, const int16_t *buffer, in size_t nfree_size = stream_buffer->free_size(); size_t ndata_size = stream_buffer->data_size(); if (LOG_SOUND) - fprintf(sound_log, "Appended data: DS=%lu(%lu) FS=%lu(%lu) BTF=%lu\n", data_size, ndata_size, free_size, nfree_size, bytes_this_frame); + fprintf(sound_log, "Appended data: DS=%zu(%zu) FS=%zu(%zu) BTF=%zu\n", data_size, ndata_size, free_size, nfree_size, bytes_this_frame); } @@ -350,7 +350,7 @@ static void sdl_callback(void *userdata, Uint8 *stream, int len) { thiz->buffer_underflows++; if (LOG_SOUND) - fprintf(sound_log, "Underflow at sdl_callback: DS=%lu FS=%lu Len=%d\n", data_size, free_size, len); + fprintf(sound_log, "Underflow at sdl_callback: DS=%zu FS=%zu Len=%d\n", data_size, free_size, len); // Maybe read whatever is left in the stream_buffer anyway? memset(stream, 0, len); @@ -364,7 +364,7 @@ static void sdl_callback(void *userdata, Uint8 *stream, int len) thiz->attenuate((int16_t *)stream, len); if (LOG_SOUND) - fprintf(sound_log, "callback: xfer DS=%lu FS=%lu Len=%d\n", data_size, free_size, len); + fprintf(sound_log, "callback: xfer DS=%zu FS=%zu Len=%d\n", data_size, free_size, len); } diff --git a/src/osd/modules/sound/xaudio2_sound.cpp b/src/osd/modules/sound/xaudio2_sound.cpp index 73573096f5a..1d9e1036f9a 100644 --- a/src/osd/modules/sound/xaudio2_sound.cpp +++ b/src/osd/modules/sound/xaudio2_sound.cpp @@ -196,11 +196,11 @@ private: std::thread m_audioThread; std::queue<xaudio2_buffer> m_queue; std::unique_ptr<bufferpool> m_buffer_pool; - uint32_t m_overflows; - uint32_t m_underflows; + uint32_t m_overflows; + uint32_t m_underflows; BOOL m_in_underflow; BOOL m_initialized; - OSD_DYNAMIC_API(xaudio2, "dwrite.dll"); + OSD_DYNAMIC_API(xaudio2, "XAudio2_9.dll", "XAudio2_8.dll"); OSD_DYNAMIC_API_FN(xaudio2, HRESULT, WINAPI, XAudio2Create, IXAudio2 **, uint32_t, XAUDIO2_PROCESSOR); public: diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp index ce8454b97db..f7d80a10484 100644 --- a/src/osd/sdl/sdlmain.cpp +++ b/src/osd/sdl/sdlmain.cpp @@ -109,7 +109,7 @@ const options_entry sdl_options::s_option_entries[] = { SDLOPTION_JOYINDEX "6", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #6" }, { SDLOPTION_JOYINDEX "7", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #7" }, { SDLOPTION_JOYINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #8" }, - { SDLOPTION_SIXAXIS, "0", OPTION_BOOLEAN, "Use special handling for PS3 Sixaxis controllers" }, + { SDLOPTION_SIXAXIS, "0", OPTION_BOOLEAN, "use special handling for PS3 Sixaxis controllers" }, #if (USE_XINPUT) // lightgun mapping @@ -145,10 +145,10 @@ const options_entry sdl_options::s_option_entries[] = { SDLOPTION_KEYBINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #8" }, // SDL low level driver options - { nullptr, nullptr, OPTION_HEADER, "SDL LOWLEVEL DRIVER OPTIONS" }, - { SDLOPTION_VIDEODRIVER ";vd", OSDOPTVAL_AUTO, OPTION_STRING, "sdl video driver to use ('x11', 'directfb', ... or 'auto' for SDL default" }, - { SDLOPTION_RENDERDRIVER ";rd", OSDOPTVAL_AUTO, OPTION_STRING, "sdl render driver to use ('software', 'opengl', 'directfb' ... or 'auto' for SDL default" }, - { SDLOPTION_AUDIODRIVER ";ad", OSDOPTVAL_AUTO, OPTION_STRING, "sdl audio driver to use ('alsa', 'arts', ... or 'auto' for SDL default" }, + { nullptr, nullptr, OPTION_HEADER, "SDL LOW-LEVEL DRIVER OPTIONS" }, + { SDLOPTION_VIDEODRIVER ";vd", OSDOPTVAL_AUTO, OPTION_STRING, "SDL video driver to use ('x11', 'directfb', ... or 'auto' for SDL default" }, + { SDLOPTION_RENDERDRIVER ";rd", OSDOPTVAL_AUTO, OPTION_STRING, "SDL render driver to use ('software', 'opengl', 'directfb' ... or 'auto' for SDL default" }, + { SDLOPTION_AUDIODRIVER ";ad", OSDOPTVAL_AUTO, OPTION_STRING, "SDL audio driver to use ('alsa', 'arts', ... or 'auto' for SDL default" }, #if USE_OPENGL { SDLOPTION_GL_LIB, SDLOPTVAL_GLLIB, OPTION_STRING, "alternative libGL.so to use; 'auto' for system default" }, #endif diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp index cb512948b26..9225acc0443 100644 --- a/src/osd/windows/winmain.cpp +++ b/src/osd/windows/winmain.cpp @@ -170,10 +170,10 @@ const options_entry windows_options::s_option_entries[] = // post-processing options { nullptr, nullptr, OPTION_HEADER, "DIRECT3D POST-PROCESSING OPTIONS" }, - { WINOPTION_HLSLPATH, "hlsl", OPTION_STRING, "path to hlsl files" }, - { WINOPTION_HLSL_ENABLE";hlsl", "0", OPTION_BOOLEAN, "enables HLSL post-processing (PS3.0 required)" }, - { WINOPTION_HLSL_OVERSAMPLING, "0", OPTION_BOOLEAN, "enables HLSL oversampling" }, - { WINOPTION_HLSL_WRITE, OSDOPTVAL_AUTO, OPTION_STRING, "enables HLSL AVI writing (huge disk bandwidth suggested)" }, + { WINOPTION_HLSLPATH, "hlsl", OPTION_STRING, "path to HLSL support files" }, + { WINOPTION_HLSL_ENABLE";hlsl", "0", OPTION_BOOLEAN, "enable HLSL post-processing (PS3.0 required)" }, + { WINOPTION_HLSL_OVERSAMPLING, "0", OPTION_BOOLEAN, "enable HLSL oversampling" }, + { WINOPTION_HLSL_WRITE, OSDOPTVAL_AUTO, OPTION_STRING, "enable HLSL AVI writing (huge disk bandwidth suggested)" }, { WINOPTION_HLSL_SNAP_WIDTH, "2048", OPTION_STRING, "HLSL upscaled-snapshot width" }, { WINOPTION_HLSL_SNAP_HEIGHT, "1536", OPTION_STRING, "HLSL upscaled-snapshot height" }, { WINOPTION_SHADOW_MASK_TILE_MODE, "0", OPTION_INTEGER, "shadow mask tile mode (0 for screen based, 1 for source based)" }, @@ -216,62 +216,62 @@ const options_entry windows_options::s_option_entries[] = { WINOPTION_POWER";fs_power", "1.0,1.0,1.0", OPTION_STRING, "signal power value (exponential)" }, { WINOPTION_FLOOR";fs_floor", "0.0,0.0,0.0", OPTION_STRING, "signal floor level" }, { WINOPTION_PHOSPHOR";fs_phosphor", "0.0,0.0,0.0", OPTION_STRING, "phosphorescence decay rate (0.0 is instant, 1.0 is forever)" }, - { WINOPTION_CHROMA_MODE, "3", OPTION_INTEGER, "Number of phosphors to use: 1 - monochrome, 2 - dichrome, 3 - trichrome (color)" }, - { WINOPTION_CHROMA_CONVERSION_GAIN, "0.299,0.587,0.114", OPTION_STRING, "Gain to be applied when summing RGB signal for monochrome and dichrome modes" }, - { WINOPTION_CHROMA_A, "0.64,0.33", OPTION_STRING, "Chromaticity coordinate for first phosphor" }, - { WINOPTION_CHROMA_B, "0.30,0.60", OPTION_STRING, "Chromaticity coordinate for second phosphor" }, - { WINOPTION_CHROMA_C, "0.15,0.06", OPTION_STRING, "Chromaticity coordinate for third phosphor" }, - { WINOPTION_CHROMA_Y_GAIN, "0.2126,0.7152,0.0722", OPTION_STRING, "Gain to be applied for each phosphor" }, + { WINOPTION_CHROMA_MODE, "3", OPTION_INTEGER, "number of phosphors to use: 1 - monochrome, 2 - dichrome, 3 - trichrome (color)" }, + { WINOPTION_CHROMA_CONVERSION_GAIN, "0.299,0.587,0.114", OPTION_STRING, "gain to be applied when summing RGB signal for monochrome and dichrome modes" }, + { WINOPTION_CHROMA_A, "0.64,0.33", OPTION_STRING, "chromaticity coordinate for first phosphor" }, + { WINOPTION_CHROMA_B, "0.30,0.60", OPTION_STRING, "chromaticity coordinate for second phosphor" }, + { WINOPTION_CHROMA_C, "0.15,0.06", OPTION_STRING, "chromaticity coordinate for third phosphor" }, + { WINOPTION_CHROMA_Y_GAIN, "0.2126,0.7152,0.0722", OPTION_STRING, "gain to be applied for each phosphor" }, /* NTSC simulation below this line */ { nullptr, nullptr, OPTION_HEADER, "NTSC POST-PROCESSING OPTIONS" }, - { WINOPTION_YIQ_ENABLE";yiq", "0", OPTION_BOOLEAN, "enables YIQ-space HLSL post-processing" }, - { WINOPTION_YIQ_JITTER";yiqj", "0.0", OPTION_FLOAT, "Jitter for the NTSC signal processing" }, - { WINOPTION_YIQ_CCVALUE";yiqcc", "3.57954545", OPTION_FLOAT, "Color Carrier frequency for NTSC signal processing" }, + { WINOPTION_YIQ_ENABLE";yiq", "0", OPTION_BOOLEAN, "enable YIQ-space HLSL post-processing" }, + { WINOPTION_YIQ_JITTER";yiqj", "0.0", OPTION_FLOAT, "jitter for the NTSC signal processing" }, + { WINOPTION_YIQ_CCVALUE";yiqcc", "3.57954545", OPTION_FLOAT, "color carrier frequency for NTSC signal processing" }, { WINOPTION_YIQ_AVALUE";yiqa", "0.5", OPTION_FLOAT, "A value for NTSC signal processing" }, { WINOPTION_YIQ_BVALUE";yiqb", "0.5", OPTION_FLOAT, "B value for NTSC signal processing" }, - { WINOPTION_YIQ_OVALUE";yiqo", "0.0", OPTION_FLOAT, "Outgoing Color Carrier phase offset for NTSC signal processing" }, - { WINOPTION_YIQ_PVALUE";yiqp", "1.0", OPTION_FLOAT, "Incoming Pixel Clock scaling value for NTSC signal processing" }, + { WINOPTION_YIQ_OVALUE";yiqo", "0.0", OPTION_FLOAT, "outgoing Color Carrier phase offset for NTSC signal processing" }, + { WINOPTION_YIQ_PVALUE";yiqp", "1.0", OPTION_FLOAT, "incoming Pixel Clock scaling value for NTSC signal processing" }, { WINOPTION_YIQ_NVALUE";yiqn", "1.0", OPTION_FLOAT, "Y filter notch width for NTSC signal processing" }, { WINOPTION_YIQ_YVALUE";yiqy", "6.0", OPTION_FLOAT, "Y filter cutoff frequency for NTSC signal processing" }, { WINOPTION_YIQ_IVALUE";yiqi", "1.2", OPTION_FLOAT, "I filter cutoff frequency for NTSC signal processing" }, { WINOPTION_YIQ_QVALUE";yiqq", "0.6", OPTION_FLOAT, "Q filter cutoff frequency for NTSC signal processing" }, - { WINOPTION_YIQ_SCAN_TIME";yiqsc", "52.6", OPTION_FLOAT, "Horizontal scanline duration for NTSC signal processing (in usec)" }, - { WINOPTION_YIQ_PHASE_COUNT";yiqpc", "2", OPTION_INTEGER, "Phase Count value for NTSC signal processing" }, + { WINOPTION_YIQ_SCAN_TIME";yiqsc", "52.6", OPTION_FLOAT, "horizontal scanline duration for NTSC signal processing (microseconds)" }, + { WINOPTION_YIQ_PHASE_COUNT";yiqpc", "2", OPTION_INTEGER, "phase count value for NTSC signal processing" }, /* Vector simulation below this line */ { nullptr, nullptr, OPTION_HEADER, "VECTOR POST-PROCESSING OPTIONS" }, - { WINOPTION_VECTOR_BEAM_SMOOTH";vecsmooth", "0.0", OPTION_FLOAT, "The vector beam smoothness" }, - { WINOPTION_VECTOR_LENGTH_SCALE";vecscale", "0.5", OPTION_FLOAT, "The maximum vector attenuation" }, - { WINOPTION_VECTOR_LENGTH_RATIO";vecratio", "0.5", OPTION_FLOAT, "The minimum vector length (vector length to screen size ratio) that is affected by the attenuation" }, + { WINOPTION_VECTOR_BEAM_SMOOTH";vecsmooth", "0.0", OPTION_FLOAT, "vector beam smoothness" }, + { WINOPTION_VECTOR_LENGTH_SCALE";vecscale", "0.5", OPTION_FLOAT, "maximum vector attenuation" }, + { WINOPTION_VECTOR_LENGTH_RATIO";vecratio", "0.5", OPTION_FLOAT, "minimum vector length affected by attenuation (vector length to screen size ratio)" }, /* Bloom below this line */ { nullptr, nullptr, OPTION_HEADER, "BLOOM POST-PROCESSING OPTIONS" }, { WINOPTION_BLOOM_BLEND_MODE, "0", OPTION_INTEGER, "bloom blend mode (0 for brighten, 1 for darken)" }, - { WINOPTION_BLOOM_SCALE, "0.0", OPTION_FLOAT, "Intensity factor for bloom" }, - { WINOPTION_BLOOM_OVERDRIVE, "1.0,1.0,1.0", OPTION_STRING, "Overdrive factor for bloom" }, - { WINOPTION_BLOOM_LEVEL0_WEIGHT, "1.0", OPTION_FLOAT, "Bloom level 0 weight (full-size target)" }, - { WINOPTION_BLOOM_LEVEL1_WEIGHT, "0.64", OPTION_FLOAT, "Bloom level 1 weight (1/4 smaller that level 0 target)" }, - { WINOPTION_BLOOM_LEVEL2_WEIGHT, "0.32", OPTION_FLOAT, "Bloom level 2 weight (1/4 smaller that level 1 target)" }, - { WINOPTION_BLOOM_LEVEL3_WEIGHT, "0.16", OPTION_FLOAT, "Bloom level 3 weight (1/4 smaller that level 2 target)" }, - { WINOPTION_BLOOM_LEVEL4_WEIGHT, "0.08", OPTION_FLOAT, "Bloom level 4 weight (1/4 smaller that level 3 target)" }, - { WINOPTION_BLOOM_LEVEL5_WEIGHT, "0.06", OPTION_FLOAT, "Bloom level 5 weight (1/4 smaller that level 4 target)" }, - { WINOPTION_BLOOM_LEVEL6_WEIGHT, "0.04", OPTION_FLOAT, "Bloom level 6 weight (1/4 smaller that level 5 target)" }, - { WINOPTION_BLOOM_LEVEL7_WEIGHT, "0.02", OPTION_FLOAT, "Bloom level 7 weight (1/4 smaller that level 6 target)" }, - { WINOPTION_BLOOM_LEVEL8_WEIGHT, "0.01", OPTION_FLOAT, "Bloom level 8 weight (1/4 smaller that level 7 target)" }, + { WINOPTION_BLOOM_SCALE, "0.0", OPTION_FLOAT, "intensity factor for bloom" }, + { WINOPTION_BLOOM_OVERDRIVE, "1.0,1.0,1.0", OPTION_STRING, "overdrive factor for bloom" }, + { WINOPTION_BLOOM_LEVEL0_WEIGHT, "1.0", OPTION_FLOAT, "bloom level 0 weight (full-size target)" }, + { WINOPTION_BLOOM_LEVEL1_WEIGHT, "0.64", OPTION_FLOAT, "bloom level 1 weight (1/4 smaller that level 0 target)" }, + { WINOPTION_BLOOM_LEVEL2_WEIGHT, "0.32", OPTION_FLOAT, "bloom level 2 weight (1/4 smaller that level 1 target)" }, + { WINOPTION_BLOOM_LEVEL3_WEIGHT, "0.16", OPTION_FLOAT, "bloom level 3 weight (1/4 smaller that level 2 target)" }, + { WINOPTION_BLOOM_LEVEL4_WEIGHT, "0.08", OPTION_FLOAT, "bloom level 4 weight (1/4 smaller that level 3 target)" }, + { WINOPTION_BLOOM_LEVEL5_WEIGHT, "0.06", OPTION_FLOAT, "bloom level 5 weight (1/4 smaller that level 4 target)" }, + { WINOPTION_BLOOM_LEVEL6_WEIGHT, "0.04", OPTION_FLOAT, "bloom level 6 weight (1/4 smaller that level 5 target)" }, + { WINOPTION_BLOOM_LEVEL7_WEIGHT, "0.02", OPTION_FLOAT, "bloom level 7 weight (1/4 smaller that level 6 target)" }, + { WINOPTION_BLOOM_LEVEL8_WEIGHT, "0.01", OPTION_FLOAT, "bloom level 8 weight (1/4 smaller that level 7 target)" }, { WINOPTION_LUT_TEXTURE, "", OPTION_STRING, "3D LUT texture filename for screen, PNG format" }, { WINOPTION_LUT_ENABLE, "0", OPTION_BOOLEAN, "Enables 3D LUT to be applied to screen after post-processing" }, { WINOPTION_UI_LUT_TEXTURE, "", OPTION_STRING, "3D LUT texture filename of UI, PNG format" }, - { WINOPTION_UI_LUT_ENABLE, "0", OPTION_BOOLEAN, "Enables 3D LUT to be applied to UI and artwork after post-processing" }, + { WINOPTION_UI_LUT_ENABLE, "0", OPTION_BOOLEAN, "enable 3D LUT to be applied to UI and artwork after post-processing" }, // full screen options { nullptr, nullptr, OPTION_HEADER, "FULL SCREEN OPTIONS" }, - { WINOPTION_TRIPLEBUFFER ";tb", "0", OPTION_BOOLEAN, "enables triple buffering" }, + { WINOPTION_TRIPLEBUFFER ";tb", "0", OPTION_BOOLEAN, "enable triple buffering" }, { WINOPTION_FULLSCREENBRIGHTNESS ";fsb(0.1-2.0)", "1.0", OPTION_FLOAT, "brightness value in full screen mode" }, { WINOPTION_FULLSCREENCONTRAST ";fsc(0.1-2.0)", "1.0", OPTION_FLOAT, "contrast value in full screen mode" }, { WINOPTION_FULLSCREENGAMMA ";fsg(0.1-3.0)", "1.0", OPTION_FLOAT, "gamma value in full screen mode" }, // input options { nullptr, nullptr, OPTION_HEADER, "INPUT DEVICE OPTIONS" }, - { WINOPTION_GLOBAL_INPUTS, "0", OPTION_BOOLEAN, "enables global inputs" }, - { WINOPTION_DUAL_LIGHTGUN ";dual", "0", OPTION_BOOLEAN, "enables dual lightgun input" }, + { WINOPTION_GLOBAL_INPUTS, "0", OPTION_BOOLEAN, "enable global inputs" }, + { WINOPTION_DUAL_LIGHTGUN ";dual", "0", OPTION_BOOLEAN, "enable dual lightgun input" }, { nullptr } }; diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index 23da7bb1669..e811991b872 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -87,6 +87,7 @@ using util::BIT; #include "cpu/mcs40/mcs40dasm.h" #include "cpu/mcs48/mcs48dsm.h" #include "cpu/mcs51/mcs51dasm.h" +#include "cpu/mcs51/axc51-core_dasm.h" #include "cpu/mcs96/i8x9xd.h" #include "cpu/mcs96/i8xc196d.h" #include "cpu/melps4/melps4d.h" @@ -315,6 +316,7 @@ static const dasm_table_entry dasm_table[] = { "arm7thumbb", be, 0, []() -> util::disasm_interface * { arm7_unidasm.t_flag = true; return new arm7_disassembler(&arm7_unidasm); } }, { "asap", le, 0, []() -> util::disasm_interface * { return new asap_disassembler; } }, { "avr8", le, 0, []() -> util::disasm_interface * { return new avr8_disassembler; } }, + { "axc51core", le, 0, []() -> util::disasm_interface * { return new axc51core_disassembler; } }, { "capricorn", le, 0, []() -> util::disasm_interface * { return new capricorn_disassembler; } }, { "ccpu", le, 0, []() -> util::disasm_interface * { return new ccpu_disassembler; } }, { "cdp1801", le, 0, []() -> util::disasm_interface * { return new cosmac_disassembler(cosmac_disassembler::TYPE_1801); } }, |