diff options
Diffstat (limited to 'src')
122 files changed, 2809 insertions, 2263 deletions
diff --git a/src/devices/bus/hexbus/hx5102.cpp b/src/devices/bus/hexbus/hx5102.cpp index bf0f9d541cb..10558fd641d 100644 --- a/src/devices/bus/hexbus/hx5102.cpp +++ b/src/devices/bus/hexbus/hx5102.cpp @@ -121,8 +121,7 @@ void hx5102_device::memmap(address_map &map) */ void hx5102_device::crumap(address_map &map) { - map(0x17e0>>4, 0x17fe>>4).r(FUNC(hx5102_device::cruread)); - map(0x17e0>>1, 0x17fe>>1).w(FUNC(hx5102_device::cruwrite)); + map(0x17e0, 0x17ff).rw(FUNC(hx5102_device::cruread), FUNC(hx5102_device::cruwrite)); } hx5102_device::hx5102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock): @@ -475,7 +474,7 @@ READ8_MEMBER(hx5102_device::cruread) crubits |= ((ioport("HXDIP")->read())<<4); - return crubits; + return BIT(crubits, offset); } /* diff --git a/src/devices/bus/ti99/gromport/cartridges.cpp b/src/devices/bus/ti99/gromport/cartridges.cpp index 7e93029f97f..ddef0c5cd81 100644 --- a/src/devices/bus/ti99/gromport/cartridges.cpp +++ b/src/devices/bus/ti99/gromport/cartridges.cpp @@ -826,15 +826,11 @@ READ8Z_MEMBER(ti99_super_cartridge::crureadz) // SRL R0,1 Restore Bank Number (optional) // RT - // Our implementation in MESS always gets 8 bits in one go. Also, the address - // is twice the bit number. That is, the offset value is always a multiple - // of 0x10. - if ((offset & 0xfff0) == 0x0800) { LOGMASKED(LOG_CRU, "CRU accessed at %04x\n", offset); uint8_t val = 0x02 << (m_ram_page << 1); - *value = (val >> ((offset - 0x0800)>>1)) & 0xff; + *value = BIT(val, (offset & 0x000e) >> 1); } } @@ -1231,7 +1227,7 @@ READ8Z_MEMBER(ti99_pagedcru_cartridge::crureadz) { page = page-(bit/2); // 4 page flags per 8 bits } - *value = 1 << (page*2+1); + *value = (offset & 0x000e) == (page * 4 + 2) ? 1 : 0; } } diff --git a/src/devices/bus/ti99/internal/992board.cpp b/src/devices/bus/ti99/internal/992board.cpp index 330bcee4566..2f712d92712 100644 --- a/src/devices/bus/ti99/internal/992board.cpp +++ b/src/devices/bus/ti99/internal/992board.cpp @@ -458,13 +458,13 @@ void io992_device::device_start() READ8_MEMBER(io992_device::cruread) { - int address = offset << 4; + int address = offset << 1; uint8_t value = 0x7f; // All Hexbus lines high double inp = 0; int i; uint8_t bit = 1; - switch (address) + switch (address & 0xf800) { case 0xe000: // CRU E000-E7fE: Keyboard @@ -494,7 +494,7 @@ READ8_MEMBER(io992_device::cruread) LOGMASKED(LOG_CRU, "CRU %04x -> %02x\n", address, value); - return value; + return BIT(value, offset & 7); } WRITE8_MEMBER(io992_device::cruwrite) diff --git a/src/devices/bus/ti99/peb/bwg.cpp b/src/devices/bus/ti99/peb/bwg.cpp index c7aa2c903b7..e0a1b9c767a 100644 --- a/src/devices/bus/ti99/peb/bwg.cpp +++ b/src/devices/bus/ti99/peb/bwg.cpp @@ -338,7 +338,7 @@ READ8Z_MEMBER(snug_bwg_device::crureadz) if ((offset & 0xff00)==m_cru_base) { - if ((offset & 0x00ff)==0) + if ((offset & 0x00f0)==0) { // Check what drives are not connected reply = ((m_floppy[0] != nullptr)? 0 : 0x02) // DSK1 @@ -355,7 +355,7 @@ READ8Z_MEMBER(snug_bwg_device::crureadz) reply |= (m_dip34 << 6); // Invert all - *value = ~reply; + *value = ~BIT(reply, (offset >> 1) & 7); } else *value = 0; diff --git a/src/devices/bus/ti99/peb/evpc.cpp b/src/devices/bus/ti99/peb/evpc.cpp index fc5591112d5..7b2a74658c7 100644 --- a/src/devices/bus/ti99/peb/evpc.cpp +++ b/src/devices/bus/ti99/peb/evpc.cpp @@ -323,8 +323,9 @@ READ8Z_MEMBER(snug_enhanced_video_device::crureadz) { if ((offset & 0x00f0)==0) // offset 0 delivers bits 0-7 (address 00-0f) { - *value = ~(ioport("EVPC-SW1")->read() | (ioport("EVPC-SW3")->read()<<2) + uint8_t p = ~(ioport("EVPC-SW1")->read() | (ioport("EVPC-SW3")->read()<<2) | (ioport("EVPC-SW4")->read()<<3) | (ioport("EVPC-SW8")->read()<<7)); + *value = BIT(p, (offset >> 1) & 7); } } } diff --git a/src/devices/bus/ti99/peb/hfdc.cpp b/src/devices/bus/ti99/peb/hfdc.cpp index 97ac8d403ab..f9c2e9656cc 100644 --- a/src/devices/bus/ti99/peb/hfdc.cpp +++ b/src/devices/bus/ti99/peb/hfdc.cpp @@ -376,7 +376,7 @@ READ8Z_MEMBER(myarc_hfdc_device::crureadz) uint8_t reply; if ((offset & 0xff00)==m_cru_base) { - if ((offset & 0x00ff)==0) // CRU bits 0-7 + if ((offset & 0x00f0)==0) // CRU bits 0-7 { if (m_see_switches) { @@ -390,7 +390,7 @@ READ8Z_MEMBER(myarc_hfdc_device::crureadz) if (!m_motor_running) reply |= 0x04; if (m_wait_for_hd1) reply |= 0x08; } - *value = reply; + *value = BIT(reply, (offset >> 1) & 7); } else // CRU bits 8+ { diff --git a/src/devices/bus/ti99/peb/ti_fdc.cpp b/src/devices/bus/ti99/peb/ti_fdc.cpp index 530dc71d987..c2a4fe7490a 100644 --- a/src/devices/bus/ti99/peb/ti_fdc.cpp +++ b/src/devices/bus/ti99/peb/ti_fdc.cpp @@ -201,7 +201,7 @@ READ8Z_MEMBER(ti_fdc_device::crureadz) if ((offset & 0xff00)==m_cru_base) { uint8_t reply = 0; - if ((offset & 0x07) == 0) + if ((offset & 0x0070) == 0) { // Selected drive reply |= ((m_DSEL)<<1); @@ -212,7 +212,7 @@ READ8Z_MEMBER(ti_fdc_device::crureadz) // Selected side if (m_SIDSEL==ASSERT_LINE) reply |= 0x80; } - *value = reply; + *value = BIT(reply, (offset >> 1) & 0x07); LOGMASKED(LOG_CRU, "Read CRU = %02x\n", *value); } } diff --git a/src/devices/bus/ti99/peb/ti_rs232.cpp b/src/devices/bus/ti99/peb/ti_rs232.cpp index fb7ce4eaa0a..15194444851 100644 --- a/src/devices/bus/ti99/peb/ti_rs232.cpp +++ b/src/devices/bus/ti99/peb/ti_rs232.cpp @@ -254,17 +254,17 @@ READ8Z_MEMBER(ti_rs232_pio_device::crureadz) if ((m_signals[0] & tms9902_device::CTS)!=0) reply |= 0x20; if ((m_signals[1] & tms9902_device::CTS)!=0) reply |= 0x40; if (m_led) reply |= 0x80; - *value = reply; + *value = BIT(reply, (offset>>1) & 7); return; } if ((offset & 0x00c0)==0x0040) { - *value = m_uart0->cruread(space, offset>>4, 0xff); + *value = m_uart0->cruread(space, offset>>1, 0xff); return; } if ((offset & 0x00c0)==0x0080) { - *value = m_uart1->cruread(space, offset>>4, 0xff); + *value = m_uart1->cruread(space, offset>>1, 0xff); return; } } diff --git a/src/devices/bus/ti99/peb/tn_ide.cpp b/src/devices/bus/ti99/peb/tn_ide.cpp index 243450fd34f..e569fc090b4 100644 --- a/src/devices/bus/ti99/peb/tn_ide.cpp +++ b/src/devices/bus/ti99/peb/tn_ide.cpp @@ -71,9 +71,7 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::crureadz) uint8_t reply = 0; if ((offset & 0xff00)==m_cru_base) { - int bit = (offset >> 4) & 7; - - if (bit==0) + if ((offset & 0x0070) == 0) { reply = m_cru_register & 0x30; reply |= 8; /* IDE bus IORDY always set */ @@ -84,7 +82,7 @@ READ8Z_MEMBER(nouspikel_ide_interface_device::crureadz) if (!m_ata_irq) reply |= 1; } - *value = reply; + *value = BIT(reply, (offset >> 1) & 7); } } diff --git a/src/devices/bus/ti99/peb/tn_usbsm.cpp b/src/devices/bus/ti99/peb/tn_usbsm.cpp index c558579445e..f4f198053df 100644 --- a/src/devices/bus/ti99/peb/tn_usbsm.cpp +++ b/src/devices/bus/ti99/peb/tn_usbsm.cpp @@ -93,9 +93,8 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::crureadz) if ((offset & 0xff00)==m_cru_base) { uint8_t reply = 0; - offset &= 3; - if (offset == 0) + if ((offset & 0x0030) == 0) { // bit // 0 >1x00 0: USB Host controller requests interrupt. @@ -117,7 +116,7 @@ READ8Z_MEMBER(nouspikel_usb_smartmedia_device::crureadz) else if (!m_smartmedia->is_protected()) reply |= 0x80; } - *value = reply; + *value = BIT(reply, (offset >> 1) & 7); } } diff --git a/src/devices/bus/ti99x/990_dk.cpp b/src/devices/bus/ti99x/990_dk.cpp index 118804ddb2b..a634bba7a24 100644 --- a/src/devices/bus/ti99x/990_dk.cpp +++ b/src/devices/bus/ti99x/990_dk.cpp @@ -709,19 +709,16 @@ READ8_MEMBER( fd800_legacy_device::cru_r ) { int reply = 0; - switch (offset) + offset &= 31; + if (offset < 16) { - case 0: - case 1: // receive buffer - reply = m_recv_buf >> (offset*8); - break; - - case 2: - case 3: + reply = BIT(m_recv_buf, offset); + } + else + { // status register - reply = m_stat_reg >> ((offset-2)*8); - break; + reply = BIT(m_stat_reg, offset - 16); } return reply; diff --git a/src/devices/cpu/amis2000/amis2000.h b/src/devices/cpu/amis2000/amis2000.h index 2739461b44b..58665c7f6bc 100644 --- a/src/devices/cpu/amis2000/amis2000.h +++ b/src/devices/cpu/amis2000/amis2000.h @@ -30,12 +30,13 @@ public: // S2000 has a hardcoded 7seg table, that (unlike S2200) is officially // uncustomizable, but wildfire proves to be an exception to that rule. - void set_7seg_table(const u8 *ptr) { m_7seg_table = ptr; } + void set_7seg_table(const u8 *ptr) { m_7seg_table = ptr; } // d0=A, d1=B, etc. void data_64x4(address_map &map); void data_80x4(address_map &map); void program_1_5k(address_map &map); void program_1k(address_map &map); + protected: // construction/destruction amis2000_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 bu_bits, u8 callstack_bits, u8 callstack_depth, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data) diff --git a/src/devices/cpu/amis2000/amis2000op.cpp b/src/devices/cpu/amis2000/amis2000op.cpp index e67ee6d153b..92c2eaae3dc 100644 --- a/src/devices/cpu/amis2000/amis2000op.cpp +++ b/src/devices/cpu/amis2000/amis2000op.cpp @@ -220,11 +220,13 @@ void amis2000_base_device::op_disn() // DISN: set D-latch to ACC+carry via on-die segment decoder static const u8 lut_segment_decoder[0x10] = { - // 0-F digits in bit order [DP]abcdefg - 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, 0x77, 0x1f, 0x4e, 0x3d, 0x4f, 0x47 + 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, // 0-7 + 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 // 8-F }; - const u8 *ptr = (m_7seg_table != nullptr) ? m_7seg_table : lut_segment_decoder; - m_d = ptr[m_acc] | (m_carry ? 0x80 : 0x00); + const u8 *lut = (m_7seg_table != nullptr) ? m_7seg_table : lut_segment_decoder; + + // segments are in order [DP]abcdefg + m_d = bitswap<7>(lut[m_acc],0,1,2,3,4,5,6) | (m_carry ? 0x80 : 0x00); d_latch_out(true); } @@ -500,7 +502,6 @@ void amis2000_base_device::op_rf2() } - // AMI S2152 specific handlers void amis2152_cpu_device::d2f_timer_clock() diff --git a/src/devices/cpu/tms9900/tms9900.cpp b/src/devices/cpu/tms9900/tms9900.cpp index 8f092a3159d..d1576197247 100644 --- a/src/devices/cpu/tms9900/tms9900.cpp +++ b/src/devices/cpu/tms9900/tms9900.cpp @@ -182,11 +182,11 @@ tms99xx_device::tms99xx_device(const machine_config &mconfig, device_type type, : cpu_device(mconfig, type, tag, owner, clock), m_program_config("program", ENDIANNESS_BIG, data_width, prg_addr_bits), m_setoffset_config("setoffset", ENDIANNESS_BIG, data_width, prg_addr_bits), - m_io_config("cru", ENDIANNESS_BIG, 8, cru_addr_bits), + m_io_config("cru", ENDIANNESS_LITTLE, 8, cru_addr_bits + 1, 1), m_prgspace(nullptr), m_cru(nullptr), m_prgaddr_mask((1<<prg_addr_bits)-1), - m_cruaddr_mask((1<<cru_addr_bits)-1), + m_cruaddr_mask((2<<cru_addr_bits)-2), m_clock_out_line(*this), m_wait_line(*this), m_holda_line(*this), @@ -1625,67 +1625,70 @@ void tms99xx_device::register_write() idempotent (i.e. they must not change the state of the queried device). Read returns the number of consecutive CRU bits, with increasing CRU address - from the least significant to the most significant bit; right-aligned + from the least significant to the most significant bit; right-aligned (in + other words, little-endian as opposed to the big-endian order of memory words). There seems to be no handling of wait states during CRU operations on the TMS9900. The TMS9995, in contrast, respects wait states during the transmission of each single bit. + The current emulation of the CRU space involves a 1-bit address shift, + reflecting the one-to-one correspondence between CRU bits and words (not + bytes) in the lower part of the memory space. (On the TMS9980A and TMS9995, + CRUOUT is multiplexed with the least significant address line.) Thus, what + TI's documentation calls the software address (the R12 base value plus the + bit offset multiplied by 2) is used in address maps and CPU-side operations. + MAME's memory architecture automatically translates these to right-justified + hardware addresses in the process of decoding offsets for read/write handlers, + which is more typical of what peripheral devices expect. (Note also that + address spaces do not support data widths narrower than 8 bits, so these + handlers must specify 8-bit types despite only one bit being useful.) + Usage of this method: CRU write: First bit is at rightmost position of m_value. */ void tms99xx_device::cru_input_operation() { - int value, value1; - int offset, location; - - location = (m_cru_address >> 4) & (m_cruaddr_mask>>3); - offset = (m_cru_address>>1) & 0x07; - - // Read 8 bits (containing the desired bits) - value = m_cru->read_byte(location); + offs_t cruaddr = m_cru_address & m_cruaddr_mask; + uint16_t value = 0; - if ((offset + m_count) > 8) // spans two 8 bit cluster + for (int i = 0; i < m_count; i++) { - // Read next 8 bits - location = (location + 1) & (m_cruaddr_mask>>3); - value1 = m_cru->read_byte(location); - value |= (value1 << 8); + // Poll one bit at a time + bool cruin = BIT(m_cru->read_byte(cruaddr), 0); + if (cruin) + value |= 1 << i; - if ((offset + m_count) > 16) // spans three 8 bit cluster - { - // Read next 8 bits - location = (location + 1) & (m_cruaddr_mask>>3); - value1 = m_cru->read_byte(location); - value |= (value1 << 16); - } - } + if (TRACE_CRU) logerror("CRU input operation, address %04x, value %d\n", cruaddr, cruin ? 1 : 0); - // On each machine cycle (2 clocks) only one CRU bit is transmitted - pulse_clock(m_count<<1); + // Increment the CRU address + cruaddr = (cruaddr + 2) & m_cruaddr_mask; - // Shift back the bits so that the first bit is at the rightmost place - m_value = (value >> offset); + // On each machine cycle (2 clocks) only one CRU bit is transmitted + pulse_clock(2); + } - // Mask out what we want - m_value &= (0x0000ffff >> (16-m_count)); + m_value = value; } void tms99xx_device::cru_output_operation() { - int value; - int location; - location = (m_cru_address >> 1) & m_cruaddr_mask; - value = m_value; + offs_t cruaddr = m_cru_address & m_cruaddr_mask; + uint16_t value = m_value; // Write m_count bits from cru_address - for (int i=0; i < m_count; i++) + for (int i = 0; i < m_count; i++) { - if (TRACE_CRU) logerror("CRU output operation, address %04x, value %d\n", location<<1, value & 0x01); - m_cru->write_byte(location, (value & 0x01)); + if (TRACE_CRU) logerror("CRU output operation, address %04x, value %d\n", cruaddr, BIT(value, 0)); + + // Write one bit at a time + m_cru->write_byte(cruaddr, BIT(value, 0)); value >>= 1; - location = (location + 1) & m_cruaddr_mask; + + // Increment the CRU address + cruaddr = (cruaddr + 2) & m_cruaddr_mask; + pulse_clock(2); } } diff --git a/src/devices/cpu/tms9900/tms9995.cpp b/src/devices/cpu/tms9900/tms9995.cpp index 67a0439a8ba..ae1b74e8237 100644 --- a/src/devices/cpu/tms9900/tms9995.cpp +++ b/src/devices/cpu/tms9900/tms9995.cpp @@ -170,7 +170,7 @@ tms9995_device::tms9995_device(const machine_config &mconfig, device_type type, PC_debug(0), m_program_config("program", ENDIANNESS_BIG, 8, 16), m_setoffset_config("setoffset", ENDIANNESS_BIG, 8, 16), - m_io_config("cru", ENDIANNESS_BIG, 8, 16), + m_io_config("cru", ENDIANNESS_LITTLE, 8, 16, 1), m_prgspace(nullptr), m_sospace(nullptr), m_cru(nullptr), @@ -288,8 +288,6 @@ void tms9995_device::device_start() save_item(NAME(m_cru_address)); save_item(NAME(m_cru_value)); save_item(NAME(m_cru_first_read)); - save_item(NAME(m_cru_bits_left)); - save_item(NAME(m_cru_read)); save_pointer(NAME(m_flag),16); save_item(NAME(IR)); save_item(NAME(m_pre_IR)); @@ -2096,8 +2094,8 @@ void tms9995_device::return_with_address_copy() */ -#define CRUREADMASK 0x0fff -#define CRUWRITEMASK 0x7fff +#define CRUREADMASK 0xfffe +#define CRUWRITEMASK 0xfffe void tms9995_device::cru_output_operation() { @@ -2133,7 +2131,7 @@ void tms9995_device::cru_output_operation() // of the CPU. However, no wait states are generated for internal // accesses. ([1], section 2.3.3.2) - m_cru->write_byte((m_cru_address >> 1)& CRUWRITEMASK, (m_cru_value & 0x01)); + m_cru->write_byte(m_cru_address & CRUWRITEMASK, (m_cru_value & 0x01)); m_cru_value >>= 1; m_cru_address = (m_cru_address + 2) & 0xfffe; m_count--; @@ -2154,55 +2152,28 @@ void tms9995_device::cru_output_operation() void tms9995_device::cru_input_operation() { - uint16_t crubit; - uint8_t crubyte; - - // Reading is different, since MESS uses 8 bit transfers - // We read 8 bits in one go, then iterate another min(n-1,7) times to allow - // for wait states. - - // read_byte for CRU delivers the first bit on the rightmost position - - int offset = (m_cru_address>>1) & 0x07; - - if (m_cru_first_read || m_cru_bits_left == 0) + if (m_cru_first_read) { - // Read next 8 bits - // 00000000 0rrrrrrr r - // v - // ........ ........ X....... ........ - // - crubyte = m_cru->read_byte((m_cru_address >> 4)& CRUREADMASK); - LOGMASKED(LOG_DETAIL, "Need to get next 8 bits (addresses %04x-%04x): %02x\n", (m_cru_address&0xfff0)+14, m_cru_address&0xfff0, crubyte); - m_cru_read = crubyte << 15; - m_cru_bits_left = 8; - - if (m_cru_first_read) - { - m_cru_read >>= offset; - m_cru_bits_left -= offset; - m_cru_value = 0; - m_cru_first_read = false; - m_pass = m_count; - } - LOGMASKED(LOG_DETAIL, "adjusted value for shift: %06x\n", m_cru_read); + m_cru_value = 0; + m_cru_first_read = false; + m_pass = m_count; } - crubit = (m_cru_read & 0x8000); + bool crubit = BIT(m_cru->read_byte(m_cru_address & CRUREADMASK), 0); m_cru_value = (m_cru_value >> 1) & 0x7fff; // During internal reading, the CRUIN line will be ignored. We emulate this // by overwriting the bit which we got from outside. Also, READY is ignored. if (m_cru_address == 0x1fda) { - crubit = m_mid_flag? 0x8000 : 0x0000; + crubit = m_mid_flag; m_check_ready = false; } else { if ((m_cru_address & 0xffe0)==0x1ee0) { - crubit = (m_flag[(m_cru_address>>1)&0x000f]==true)? 0x8000 : 0x0000; + crubit = m_flag[(m_cru_address>>1)&0x000f]; m_check_ready = false; } else @@ -2211,18 +2182,14 @@ void tms9995_device::cru_input_operation() } } - LOGMASKED(LOG_CRU, "CRU input operation, address %04x, value %d\n", m_cru_address, (crubit & 0x8000)>>15); + LOGMASKED(LOG_CRU, "CRU input operation, address %04x, value %d\n", m_cru_address, crubit ? 1 : 0); - m_cru_value |= crubit; + if (crubit) + m_cru_value |= 0x8000; m_cru_address = (m_cru_address + 2) & 0xfffe; - m_cru_bits_left--; - if (m_pass > 1) - { - m_cru_read >>= 1; - } - else + if (m_pass == 1) { // This is the final shift. For both byte and word length transfers, // the first bit is always m_cru_value & 0x0001. diff --git a/src/devices/cpu/tms9900/tms9995.h b/src/devices/cpu/tms9900/tms9995.h index 72dfc2960a1..531e5208a41 100644 --- a/src/devices/cpu/tms9900/tms9995.h +++ b/src/devices/cpu/tms9900/tms9995.h @@ -245,8 +245,6 @@ private: uint16_t m_cru_address; uint16_t m_cru_value; bool m_cru_first_read; - int m_cru_bits_left; - uint32_t m_cru_read; // CPU-internal CRU flags bool m_flag[16]; diff --git a/src/devices/machine/tms9901.cpp b/src/devices/machine/tms9901.cpp index af01c6ac7fe..aadfec82f20 100644 --- a/src/devices/machine/tms9901.cpp +++ b/src/devices/machine/tms9901.cpp @@ -279,9 +279,9 @@ READ8_MEMBER( tms9901_device::read ) { int answer = 0; - offset &= 0x003; + offset &= 0x01f; - switch (offset) + switch (offset >> 3) { case 0: if (m_clock_mode) @@ -356,7 +356,7 @@ READ8_MEMBER( tms9901_device::read ) break; } - return answer; + return BIT(answer, offset & 7); } /* diff --git a/src/devices/machine/tms9902.cpp b/src/devices/machine/tms9902.cpp index 93e48cf03a2..bf0071889f0 100644 --- a/src/devices/machine/tms9902.cpp +++ b/src/devices/machine/tms9902.cpp @@ -482,44 +482,105 @@ READ8_MEMBER( tms9902_device::cruread ) { uint8_t answer = 0; - offset &= 0x0003; - - switch (offset) + switch (offset & 31) { - case 3: // Bits 31-24 - if (m_INT) answer |= 0x80; - if (m_LDCTRL || m_LDIR || m_LRDR || m_LXDR || m_BRKON) answer |= 0x40; - if (m_DSCH) answer |= 0x20; - if (m_CTSin) answer |= 0x10; - if (m_DSRin) answer |= 0x08; - if (m_RTSout) answer |= 0x04; - if (m_TIMELP) answer |= 0x02; - if (m_TIMERR) answer |= 0x01; + case 31: + answer = m_INT; + break; + + case 30: + answer = (m_LDCTRL || m_LDIR || m_LRDR || m_LXDR || m_BRKON); + break; + + case 29: + answer = m_DSCH; + break; + + case 28: + answer = m_CTSin; + break; + + case 27: + answer = m_DSRin; + break; + + case 26: + answer = m_RTSout; + break; + + case 25: + answer = m_TIMELP; + break; + + case 24: + answer = m_TIMERR; + break; + + case 23: + answer = m_XSRE; + break; + + case 22: + answer = m_XBRE; + break; + + case 21: + answer = m_RBRL; + break; + + case 20: + answer = (m_DSCH && m_DSCENB); + break; + + case 19: + answer = (m_TIMELP && m_TIMENB); + break; + + case 17: + answer = (m_XBRE && m_XBIENB); + break; + + case 16: + answer = (m_RBRL && m_RIENB); + break; + + case 15: + answer = m_RIN; + break; + + case 14: + answer = m_RSBD; + break; + + case 13: + answer = m_RFBD; + break; + + case 12: + answer = m_RFER; + break; + + case 11: + answer = m_ROVER; break; - case 2: // Bits 23-16 - if (m_XSRE) answer |= 0x80; - if (m_XBRE) answer |= 0x40; - if (m_RBRL) answer |= 0x20; - if (m_DSCH && m_DSCENB) answer |= 0x10; - if (m_TIMELP && m_TIMENB) answer |= 0x08; - if (m_XBRE && m_XBIENB) answer |= 0x02; - if (m_RBRL && m_RIENB) answer |= 0x01; + case 10: + answer = m_RPER; break; - case 1: // Bits 15-8 - if (m_RIN) answer |= 0x80; - if (m_RSBD) answer |= 0x40; - if (m_RFBD) answer |= 0x20; - if (m_RFER) answer |= 0x10; - if (m_ROVER) answer |= 0x08; - if (m_RPER) answer |= 0x04; - if (m_RPER || m_RFER || m_ROVER) answer |= 0x02; + case 9: + answer = (m_RPER || m_RFER || m_ROVER); break; - case 0: // Bits 7-0 - LOGCRU("Reading received byte = %02x\n", m_RBR); - answer = m_RBR; + case 7: + case 6: + case 5: + case 4: + case 3: + case 2: + case 1: + case 0: + answer = BIT(m_RBR, offset & 31); break; } if (VERBOSE & LOG_DETAIL) LOGCRU("Reading flag bits %d - %d = %02x\n", ((offset+1)*8-1), offset*8, answer); diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index ac5359ae07f..4a55eba7bae 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -18,6 +18,7 @@ #define LOG_MATCH (1U << 10) // Sector matching #define LOG_STATE (1U << 11) // State machine #define LOG_LIVE (1U << 12) // Live states +#define LOG_DONE (1U << 13) // Command done #define VERBOSE (LOG_GENERAL | LOG_WARN ) @@ -38,6 +39,7 @@ #define LOGMATCH(...) LOGMASKED(LOG_MATCH, __VA_ARGS__) #define LOGSTATE(...) LOGMASKED(LOG_STATE, __VA_ARGS__) #define LOGLIVE(...) LOGMASKED(LOG_LIVE, __VA_ARGS__) +#define LOGDONE(...) LOGMASKED(LOG_DONE, __VA_ARGS__) DEFINE_DEVICE_TYPE(UPD765A, upd765a_device, "upd765a", "NEC uPD765A FDC") DEFINE_DEVICE_TYPE(UPD765B, upd765b_device, "upd765b", "NEC uPD765B FDC") @@ -1484,7 +1486,7 @@ void upd765_family_device::execute_command(int cmd) void upd765_family_device::command_end(floppy_info &fi, bool data_completion) { - LOGCOMMAND("command done (%s) - %s\n", data_completion ? "data" : "seek", results()); + LOGDONE("command done (%s) - %s\n", data_completion ? "data" : "seek", results()); fi.main_state = fi.sub_state = IDLE; if(data_completion) data_irq = true; @@ -1756,7 +1758,16 @@ void upd765_family_device::read_data_continue(floppy_info &fi) fi.sub_state = COMMAND_DONE; break; } + // MZ: This st1 handling ensures that both HX5102 floppy and the + // Speedlock protection scheme are properly working. + // a) HX5102 requires that the ND flag not be set when no address + // marks could be found on the track at all (particularly due to + // wrong density) + // b) Speedlock requires the ND flag be set when there are valid + // sectors on the track, but the desired sector is missing, also + // when it has no valid address marks st1 &= ~ST1_MA; + st1 |= ST1_ND; if(!sector_matches()) { if(cur_live.idbuf[0] != command[2]) { if(cur_live.idbuf[0] == 0xff) @@ -1768,6 +1779,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) live_start(fi, SEARCH_ADDRESS_MARK_HEADER); return; } + st1 &= ~ST1_ND; LOGRW("reading sector %02x %02x %02x %02x\n", cur_live.idbuf[0], cur_live.idbuf[1], @@ -1786,11 +1798,6 @@ void upd765_family_device::read_data_continue(floppy_info &fi) case SCAN_ID_FAILED: LOGSTATE("SCAN_ID_FAILED\n"); fi.st0 |= ST0_FAIL; - // MZ: The HX5102 does not correctly detect a FM/MFM mismatch - // when the ND bit is set, because in the firmware the ND bit wins - // against MA, and thus concludes that the format is correct - // but the sector is missing. - // st1 |= ST1_ND; fi.sub_state = COMMAND_DONE; break; @@ -1862,7 +1869,7 @@ void upd765_family_device::write_data_start(floppy_info &fi) fi.main_state = WRITE_DATA; fi.sub_state = HEAD_LOAD; mfm = command[0] & 0x40; - LOGRW("command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", + LOGCOMMAND("command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", command[0] & 0x08 ? " deleted" : "", command[0] & 0x80 ? " mt" : "", command[0] & 0x40 ? " mfm" : "", @@ -1930,6 +1937,11 @@ void upd765_family_device::write_data_continue(floppy_info &fi) break; } st1 &= ~ST1_MA; + LOGRW("writing sector %02x %02x %02x %02x\n", + cur_live.idbuf[0], + cur_live.idbuf[1], + cur_live.idbuf[2], + cur_live.idbuf[3]); sector_size = calc_sector_size(cur_live.idbuf[3]); fifo_expect(sector_size, true); fi.sub_state = SECTOR_WRITTEN; @@ -2002,7 +2014,7 @@ void upd765_family_device::read_track_start(floppy_info &fi) mfm = command[0] & 0x40; sectors_read = 0; - LOGRW("command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", + LOGCOMMAND("command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", command[0] & 0x40 ? " mfm" : "", command[0], command[1], @@ -2326,8 +2338,7 @@ void upd765_family_device::read_id_continue(floppy_info &fi) case SCAN_ID_FAILED: LOGSTATE("SCAN_ID_FAILED\n"); fi.st0 |= ST0_FAIL; - // st1 |= ST1_ND|ST1_MA; - st1 = ST1_MA; + st1 |= ST1_ND|ST1_MA; fi.sub_state = COMMAND_DONE; break; diff --git a/src/devices/machine/x2201.cpp b/src/devices/machine/x2201.cpp index ec252d1b8dd..90d731b7e3e 100644 --- a/src/devices/machine/x2201.cpp +++ b/src/devices/machine/x2201.cpp @@ -128,17 +128,6 @@ u8 x2201_device::read(offs_t offset) //------------------------------------------------- -// read_byte - read 8 bits of data from RAM -// (FIXME: remove once CRU reads are 1-bit) -//------------------------------------------------- - -u8 x2201_device::read_byte(offs_t offset) -{ - return m_ram[offset & 127]; -} - - -//------------------------------------------------- // write - write one bit of data to RAM //------------------------------------------------- diff --git a/src/devices/machine/x2201.h b/src/devices/machine/x2201.h index 670c69b349c..1d873850df1 100644 --- a/src/devices/machine/x2201.h +++ b/src/devices/machine/x2201.h @@ -38,7 +38,6 @@ public: // read/write handlers u8 read(offs_t offset); - u8 read_byte(offs_t offset); // hack void write(offs_t offset, u8 data); // control lines diff --git a/src/devices/sound/pokey.cpp b/src/devices/sound/pokey.cpp index a7f175ddd1a..231dc01e8bf 100644 --- a/src/devices/sound/pokey.cpp +++ b/src/devices/sound/pokey.cpp @@ -161,8 +161,6 @@ #define CLK_28 1 #define CLK_114 2 -static const int clock_divisors[3] = {1, DIV_64, DIV_15}; - constexpr unsigned pokey_device::FREQ_17_EXACT; @@ -253,7 +251,8 @@ void pokey_device::device_start() m_pot_counter = 0; m_kbd_cnt = 0; m_out_filter = 0; - m_output = 0; + m_out_raw = 0; + m_old_raw_inval = true; m_kbd_state = 0; /* reset more internal state */ @@ -435,14 +434,7 @@ void pokey_device::execute_run() { do { - uint32_t new_out = step_one_clock(); - if (m_output != new_out) - { - //printf("forced update %08d %08x\n", m_icount, m_output); - m_stream->update(); - m_output = new_out; - } - + step_one_clock(); m_icount--; } while (m_icount > 0); @@ -570,25 +562,12 @@ void pokey_device::step_pot() * */ -uint32_t pokey_device::step_one_clock(void) +void pokey_device::step_one_clock(void) { - int const base_clock = (m_AUDCTL & CLK_15KHZ) ? CLK_114 : CLK_28; - + /* Clocks only count if we are not in a reset */ if (m_SKCTL & SK_RESET) { - /* Clocks only count if we are not in a reset */ - int clock_triggered[3] = {0,0,0}; - int clk; - for (clk = 0; clk < 3; clk++) - { - m_clock_cnt[clk]++; - if (m_clock_cnt[clk] >= clock_divisors[clk]) - { - m_clock_cnt[clk] = 0; - clock_triggered[clk] = 1; - } - } - + /* polynom pointers */ if (++m_p4 == 0x0000f) m_p4 = 0; if (++m_p5 == 0x0001f) @@ -598,7 +577,23 @@ uint32_t pokey_device::step_one_clock(void) if (++m_p17 == 0x1ffff) m_p17 = 0; - clk = (m_AUDCTL & CH1_HICLK) ? CLK_1 : base_clock; + /* CLK_1: no presacler */ + int clock_triggered[3] = {1,0,0}; + /* CLK_28: prescaler 63.9211 kHz */ + if (++m_clock_cnt[CLK_28] >= DIV_64) + { + m_clock_cnt[CLK_28] = 0; + clock_triggered[CLK_28] = 1; + } + /* CLK_114 prescaler 15.6999 kHz */ + if (++m_clock_cnt[CLK_114] >= DIV_15) + { + m_clock_cnt[CLK_114] = 0; + clock_triggered[CLK_114] = 1; + } + + int const base_clock = (m_AUDCTL & CLK_15KHZ) ? CLK_114 : CLK_28; + int clk = (m_AUDCTL & CH1_HICLK) ? CLK_1 : base_clock; if (clock_triggered[clk]) m_channel[CHAN1].inc_chan(); @@ -682,12 +677,23 @@ uint32_t pokey_device::step_one_clock(void) m_channel[CHAN1].m_filter_sample = 1; } - uint32_t sum = 0; - for (int ch = 0; ch < 4; ch++) + if (m_old_raw_inval) { - sum |= (((((m_channel[ch].m_output ^ m_channel[ch].m_filter_sample) || (m_channel[ch].m_AUDC & VOLUME_ONLY)) ? (m_channel[ch].m_AUDC & VOLUME_MASK) : 0 )) << (ch * 4)); + uint32_t sum = 0; + for (int ch = 0; ch < 4; ch++) + { + sum |= (((m_channel[ch].m_output ^ m_channel[ch].m_filter_sample) || (m_channel[ch].m_AUDC & VOLUME_ONLY)) ? + ((m_channel[ch].m_AUDC & VOLUME_MASK) << (ch * 4)) : 0); + } + + if (m_out_raw != sum) + { + //printf("forced update %08d %08x\n", m_icount, m_out_raw); + m_stream->update(); + } + m_old_raw_inval = false; + m_out_raw = sum; } - return sum; } //------------------------------------------------- @@ -704,7 +710,7 @@ void pokey_device::sound_stream_update(sound_stream &stream, stream_sample_t **i { int32_t out = 0; for (int i = 0; i < 4; i++) - out += ((m_output >> (4*i)) & 0x0f); + out += ((m_out_raw >> (4*i)) & 0x0f); out *= POKEY_DEFAULT_GAIN; out = (out > 0x7fff) ? 0x7fff : out; while( samples > 0 ) @@ -715,7 +721,7 @@ void pokey_device::sound_stream_update(sound_stream &stream, stream_sample_t **i } else if (m_output_type == RC_LOWPASS) { - double rTot = m_voltab[m_output]; + double rTot = m_voltab[m_out_raw]; double V0 = rTot / (rTot+m_r_pullup) * m_v_ref / 5.0 * 32767.0; double mult = (m_cap == 0.0) ? 1.0 : 1.0 - exp(-(rTot + m_r_pullup) / (m_cap * m_r_pullup * rTot) * m_clock_period.as_double()); @@ -731,7 +737,7 @@ void pokey_device::sound_stream_update(sound_stream &stream, stream_sample_t **i } else if (m_output_type == OPAMP_C_TO_GROUND) { - double rTot = m_voltab[m_output]; + double rTot = m_voltab[m_out_raw]; /* In this configuration there is a capacitor in parallel to the pokey output to ground. * With a LM324 in LTSpice this causes the opamp circuit to oscillate at around 100 kHz. * We are ignoring the capacitor here, since this oscillation would not be audible. @@ -753,7 +759,7 @@ void pokey_device::sound_stream_update(sound_stream &stream, stream_sample_t **i } else if (m_output_type == OPAMP_LOW_PASS) { - double rTot = m_voltab[m_output]; + double rTot = m_voltab[m_out_raw]; /* This post-pokey stage usually has a low-pass filter behind it * It is approximated by not adding in VRef below. */ @@ -771,7 +777,7 @@ void pokey_device::sound_stream_update(sound_stream &stream, stream_sample_t **i } else if (m_output_type == DISCRETE_VAR_R) { - int32_t out = m_voltab[m_output]; + int32_t out = m_voltab[m_out_raw]; while( samples > 0 ) { *buffer++ = out; @@ -898,6 +904,7 @@ void pokey_device::write_internal(offs_t offset, uint8_t data) case AUDC1_C: LOG_SOUND(("POKEY '%s' AUDC1 $%02x (%s)\n", tag(), data, audc2str(data))); m_channel[CHAN1].m_AUDC = data; + m_old_raw_inval = true; break; case AUDF2_C: @@ -908,6 +915,7 @@ void pokey_device::write_internal(offs_t offset, uint8_t data) case AUDC2_C: LOG_SOUND(("POKEY '%s' AUDC2 $%02x (%s)\n", tag(), data, audc2str(data))); m_channel[CHAN2].m_AUDC = data; + m_old_raw_inval = true; break; case AUDF3_C: @@ -918,6 +926,7 @@ void pokey_device::write_internal(offs_t offset, uint8_t data) case AUDC3_C: LOG_SOUND(("POKEY '%s' AUDC3 $%02x (%s)\n", tag(), data, audc2str(data))); m_channel[CHAN3].m_AUDC = data; + m_old_raw_inval = true; break; case AUDF4_C: @@ -928,6 +937,7 @@ void pokey_device::write_internal(offs_t offset, uint8_t data) case AUDC4_C: LOG_SOUND(("POKEY '%s' AUDC4 $%02x (%s)\n", tag(), data, audc2str(data))); m_channel[CHAN4].m_AUDC = data; + m_old_raw_inval = true; break; case AUDCTL_C: @@ -952,7 +962,7 @@ void pokey_device::write_internal(offs_t offset, uint8_t data) m_channel[i].m_output = 0; m_channel[i].m_filter_sample = (i<2 ? 1 : 0); } - + m_old_raw_inval = true; break; case SKREST_C: @@ -1070,6 +1080,7 @@ inline void pokey_device::process_channel(int ch) m_channel[ch].m_output = (m_poly9[m_p9] & 1); else m_channel[ch].m_output = (m_poly17[m_p17] & 1); + m_old_raw_inval = true; } } diff --git a/src/devices/sound/pokey.h b/src/devices/sound/pokey.h index 0fa9e21a17d..7e63e89e54d 100644 --- a/src/devices/sound/pokey.h +++ b/src/devices/sound/pokey.h @@ -264,7 +264,7 @@ private: static constexpr int POKEY_CHANNELS = 4; - uint32_t step_one_clock(); + void step_one_clock(); void step_keyboard(); void step_pot(); @@ -284,10 +284,11 @@ private: pokey_channel m_channel[POKEY_CHANNELS]; - uint32_t m_output; /* raw output */ - double m_out_filter; /* filtered output */ + uint32_t m_out_raw; /* raw output */ + bool m_old_raw_inval; /* true: recalc m_out_raw required */ + double m_out_filter; /* filtered output */ - int32_t m_clock_cnt[3]; /* clock counters */ + int32_t m_clock_cnt[3]; /* clock counters */ uint32_t m_p4; /* poly4 index */ uint32_t m_p5; /* poly5 index */ uint32_t m_p9; /* poly9 index */ diff --git a/src/devices/sound/spkrdev.h b/src/devices/sound/spkrdev.h index 7542d943793..49e953b5d40 100644 --- a/src/devices/sound/spkrdev.h +++ b/src/devices/sound/spkrdev.h @@ -21,9 +21,9 @@ public: ~speaker_sound_device() {} // configuration - void set_levels(int num_levels, const int16_t *levels) { m_num_levels = num_levels; m_levels = levels;} + void set_levels(int num_levels, const int16_t *levels) { m_num_levels = num_levels; m_levels = levels; } - void level_w(int new_level); + void level_w(int new_level); // can use as writeline protected: // device-level overrides diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp index da4a015a1c6..fe8e4a0119b 100644 --- a/src/devices/video/mc6845.cpp +++ b/src/devices/video/mc6845.cpp @@ -582,8 +582,6 @@ void mc6845_device::recompute_parameters(bool postload) m_hsync_off_pos = hsync_off_pos; m_vsync_on_pos = vsync_on_pos; m_vsync_off_pos = vsync_off_pos; - if (!postload) // set m_line_counter to 0 on normal operation, but not on postload - m_line_counter = 0; } } diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index e49a0f626b2..092e44d9555 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -742,6 +742,13 @@ void memory_manager::allocate(device_memory_interface &memory) // allocate one of the appropriate type switch (spaceconfig->data_width() | (spaceconfig->addr_shift() + 4)) { + case 8|(4+1): + if (spaceconfig->endianness() == ENDIANNESS_LITTLE) + memory.allocate<address_space_specific<0, 1, ENDIANNESS_LITTLE>>(*this, spacenum); + else + memory.allocate<address_space_specific<0, 1, ENDIANNESS_BIG >>(*this, spacenum); + break; + case 8|(4-0): if (spaceconfig->endianness() == ENDIANNESS_LITTLE) memory.allocate<address_space_specific<0, 0, ENDIANNESS_LITTLE>>(*this, spacenum); @@ -2643,6 +2650,8 @@ template<int Width, int AddrShift, int Endian> memory_access_cache<Width, AddrSh } +template class memory_access_cache<0, 1, ENDIANNESS_LITTLE>; +template class memory_access_cache<0, 1, ENDIANNESS_BIG>; template class memory_access_cache<0, 0, ENDIANNESS_LITTLE>; template class memory_access_cache<0, 0, ENDIANNESS_BIG>; template class memory_access_cache<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp index 84a592fbfbd..ccaa4ed650e 100644 --- a/src/emu/emumem_hedp.cpp +++ b/src/emu/emumem_hedp.cpp @@ -170,6 +170,8 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_i +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16_delegate>; @@ -193,6 +195,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64_dele template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8m_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8m_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8m_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8m_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16m_delegate>; @@ -216,6 +220,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64m_del template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64m_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64m_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8s_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8s_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8s_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8s_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16s_delegate>; @@ -239,6 +245,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64s_del template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64s_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64s_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8sm_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8sm_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8sm_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8sm_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16sm_delegate>; @@ -262,6 +270,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64sm_de template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64sm_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64sm_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8mo_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8mo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8mo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8mo_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16mo_delegate>; @@ -285,6 +295,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64mo_de template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64mo_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64mo_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8smo_delegate>; +template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8smo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8smo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8smo_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16smo_delegate>; @@ -308,6 +320,8 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64smo_d template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64smo_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64smo_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16_delegate>; @@ -331,6 +345,8 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64_de template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8m_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8m_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8m_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8m_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16m_delegate>; @@ -354,6 +370,8 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64m_d template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64m_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64m_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8s_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8s_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8s_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8s_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16s_delegate>; @@ -377,6 +395,8 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64s_d template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64s_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64s_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8sm_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8sm_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8sm_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8sm_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16sm_delegate>; @@ -400,6 +420,8 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64sm_ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64sm_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64sm_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8mo_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8mo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8mo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8mo_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16mo_delegate>; @@ -423,6 +445,8 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64mo_ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64mo_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64mo_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8smo_delegate>; +template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8smo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8smo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8smo_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16smo_delegate>; @@ -447,6 +471,8 @@ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64smo template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64smo_delegate>; +template class handler_entry_read_ioport<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_ioport<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_ioport<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_ioport<1, 3, ENDIANNESS_LITTLE>; @@ -470,6 +496,8 @@ template class handler_entry_read_ioport<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_ioport<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_ioport<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_ioport<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_ioport<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_ioport<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_ioport<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr0.cpp b/src/emu/emumem_hedr0.cpp index b39b88263dc..92deb472e03 100644 --- a/src/emu/emumem_hedr0.cpp +++ b/src/emu/emumem_hedr0.cpp @@ -5,6 +5,23 @@ #include "emumem_hedr.ipp" +template class handler_entry_read_dispatch< 1, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 1, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 2, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 2, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 3, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 3, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 4, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 4, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 5, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 5, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 6, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 6, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 7, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 7, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch< 8, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 8, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch< 1, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 1, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch< 2, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr1.cpp b/src/emu/emumem_hedr1.cpp index 5a06dab08c3..86aa8452791 100644 --- a/src/emu/emumem_hedr1.cpp +++ b/src/emu/emumem_hedr1.cpp @@ -4,6 +4,23 @@ #include "emu.h" #include "emumem_hedr.ipp" +template class handler_entry_read_dispatch< 9, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch< 9, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<10, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<10, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<11, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<11, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<12, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<12, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<13, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<13, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<14, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<14, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<15, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<15, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<16, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<16, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch< 9, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 9, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<10, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr2.cpp b/src/emu/emumem_hedr2.cpp index 4c80f2423c4..a59bc746f9e 100644 --- a/src/emu/emumem_hedr2.cpp +++ b/src/emu/emumem_hedr2.cpp @@ -4,6 +4,23 @@ #include "emu.h" #include "emumem_hedr.ipp" +template class handler_entry_read_dispatch<17, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<17, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<18, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<18, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<19, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<19, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<20, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<20, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<21, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<21, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<22, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<22, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<23, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<23, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<24, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<24, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch<17, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<17, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<18, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr3.cpp b/src/emu/emumem_hedr3.cpp index 97fa6d1c9e3..aa325b5b5a8 100644 --- a/src/emu/emumem_hedr3.cpp +++ b/src/emu/emumem_hedr3.cpp @@ -5,6 +5,23 @@ #include "emumem_hedr.ipp" +template class handler_entry_read_dispatch<25, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<25, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<26, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<26, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<27, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<27, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<28, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<28, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<29, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<29, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<30, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<30, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<31, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<31, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_read_dispatch<32, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_dispatch<32, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_read_dispatch<25, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<25, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<26, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw0.cpp b/src/emu/emumem_hedw0.cpp index 6a1d0b99699..acfbd3362c3 100644 --- a/src/emu/emumem_hedw0.cpp +++ b/src/emu/emumem_hedw0.cpp @@ -5,6 +5,23 @@ #include "emumem_hedw.ipp" +template class handler_entry_write_dispatch< 1, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 1, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 2, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 2, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 3, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 3, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 4, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 4, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 5, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 5, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 6, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 6, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 7, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 7, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch< 8, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 8, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch< 1, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 1, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch< 2, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw1.cpp b/src/emu/emumem_hedw1.cpp index 4f62d45de4d..d3d3b9e5f81 100644 --- a/src/emu/emumem_hedw1.cpp +++ b/src/emu/emumem_hedw1.cpp @@ -4,6 +4,23 @@ #include "emu.h" #include "emumem_hedw.ipp" +template class handler_entry_write_dispatch< 9, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch< 9, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<10, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<10, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<11, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<11, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<12, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<12, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<13, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<13, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<14, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<14, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<15, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<15, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<16, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<16, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch< 9, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 9, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<10, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw2.cpp b/src/emu/emumem_hedw2.cpp index b00eb38311d..8e6fc4c4dcf 100644 --- a/src/emu/emumem_hedw2.cpp +++ b/src/emu/emumem_hedw2.cpp @@ -4,6 +4,23 @@ #include "emu.h" #include "emumem_hedw.ipp" +template class handler_entry_write_dispatch<17, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<17, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<18, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<18, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<19, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<19, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<20, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<20, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<21, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<21, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<22, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<22, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<23, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<23, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<24, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<24, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch<17, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<17, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<18, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw3.cpp b/src/emu/emumem_hedw3.cpp index 539736655cc..4a423133483 100644 --- a/src/emu/emumem_hedw3.cpp +++ b/src/emu/emumem_hedw3.cpp @@ -5,6 +5,23 @@ #include "emumem_hedw.ipp" +template class handler_entry_write_dispatch<25, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<25, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<26, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<26, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<27, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<27, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<28, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<28, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<29, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<29, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<30, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<30, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<31, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<31, 0, 1, ENDIANNESS_BIG>; +template class handler_entry_write_dispatch<32, 0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_dispatch<32, 0, 1, ENDIANNESS_BIG>; + template class handler_entry_write_dispatch<25, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<25, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<26, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hem.cpp b/src/emu/emumem_hem.cpp index 45f83d75d12..1a2963951f1 100644 --- a/src/emu/emumem_hem.cpp +++ b/src/emu/emumem_hem.cpp @@ -95,6 +95,8 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_m +template class handler_entry_read_memory<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_memory<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_memory<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory<1, 3, ENDIANNESS_LITTLE>; @@ -118,6 +120,8 @@ template class handler_entry_read_memory<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_memory<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_memory<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_memory<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_memory<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory<1, 3, ENDIANNESS_LITTLE>; @@ -142,6 +146,8 @@ template class handler_entry_write_memory<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<3, -3, ENDIANNESS_BIG>; +template class handler_entry_read_memory_bank<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_memory_bank<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<1, 3, ENDIANNESS_LITTLE>; @@ -165,6 +171,8 @@ template class handler_entry_read_memory_bank<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_memory_bank<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_memory_bank<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory_bank<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hep.cpp b/src/emu/emumem_hep.cpp index 97bdf759a38..f411dcb522c 100644 --- a/src/emu/emumem_hep.cpp +++ b/src/emu/emumem_hep.cpp @@ -50,6 +50,8 @@ template<int Width, int AddrShift, int Endian> void handler_entry_write_passthro np->detach(handlers); } +template class handler_entry_read_passthrough<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_passthrough<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<1, 3, ENDIANNESS_LITTLE>; @@ -73,6 +75,8 @@ template class handler_entry_read_passthrough<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_passthrough<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_passthrough<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_passthrough<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_het.cpp b/src/emu/emumem_het.cpp index 5d948eccfeb..87f3d35dc10 100644 --- a/src/emu/emumem_het.cpp +++ b/src/emu/emumem_het.cpp @@ -42,6 +42,8 @@ template<int Width, int AddrShift, int Endian> handler_entry_write_tap<Width, Ad +template class handler_entry_read_tap<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_tap<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_tap<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_tap<1, 3, ENDIANNESS_LITTLE>; @@ -65,6 +67,8 @@ template class handler_entry_read_tap<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_tap<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_tap<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_tap<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_tap<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_tap<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_tap<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heu.cpp b/src/emu/emumem_heu.cpp index 7b071e36c52..8a62d8aa5e2 100644 --- a/src/emu/emumem_heu.cpp +++ b/src/emu/emumem_heu.cpp @@ -230,6 +230,8 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_u } +template class handler_entry_read_units<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_units<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_units<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_units<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_units<1, 3, ENDIANNESS_LITTLE>; @@ -253,6 +255,8 @@ template class handler_entry_read_units<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_units<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_units<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_units<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_units<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_units<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_units<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_units<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heun.cpp b/src/emu/emumem_heun.cpp index e76ddfe7078..c25d77bbd33 100644 --- a/src/emu/emumem_heun.cpp +++ b/src/emu/emumem_heun.cpp @@ -64,6 +64,8 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_n } +template class handler_entry_read_unmapped<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_unmapped<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<1, 3, ENDIANNESS_LITTLE>; @@ -87,6 +89,8 @@ template class handler_entry_read_unmapped<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_unmapped<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_unmapped<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<1, 3, ENDIANNESS_LITTLE>; @@ -111,6 +115,8 @@ template class handler_entry_write_unmapped<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<3, -3, ENDIANNESS_BIG>; +template class handler_entry_read_nop<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_read_nop<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_nop<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_nop<1, 3, ENDIANNESS_LITTLE>; @@ -134,6 +140,8 @@ template class handler_entry_read_nop<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_nop<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<3, -3, ENDIANNESS_BIG>; +template class handler_entry_write_nop<0, 1, ENDIANNESS_LITTLE>; +template class handler_entry_write_nop<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_nop<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_nop<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_nop<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/mame/drivers/brkthru.cpp b/src/mame/drivers/brkthru.cpp index 7b6494cb511..7293fe25c9b 100644 --- a/src/mame/drivers/brkthru.cpp +++ b/src/mame/drivers/brkthru.cpp @@ -133,6 +133,12 @@ Notes: Connectors: 2x flat cable to upper board + +brkthru, brkthruj and brkthrut have a Self Test Mode not mentioned anywhere +in the manual. It is accessed by holding down both player 1 and player 2 start +buttons while powering up the game. It can be accessed in MAME by holding the +buttons down after the game has started then pressing F3 to reset the game. + ***************************************************************************/ #include "emu.h" diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp index e127ba600ab..85b6d95daee 100644 --- a/src/mame/drivers/cortex.cpp +++ b/src/mame/drivers/cortex.cpp @@ -98,18 +98,15 @@ void cortex_state::mem_map(address_map &map) void cortex_state::io_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x0007).mirror(0x18).w("control", FUNC(ls259_device::write_d0)); - map(0x0000, 0x0000).r(FUNC(cortex_state::pio_r)); - map(0x0001, 0x0001).r(FUNC(cortex_state::keyboard_r)); - //AM_RANGE(0x0040, 0x005f) AM_DEVWRITE("uart1", tms9902_device, cruwrite) // RS232 (r12 = 80-bf) - //AM_RANGE(0x0008, 0x000b) AM_DEVREAD("uart1", tms9902_device, cruread) // RS232 - //AM_RANGE(0x00c0, 0x00df) AM_DEVWRITE("uart2", tms9902_device, cruwrite) // Cassette (r12 = 180-1bf) - //AM_RANGE(0x0018, 0x001b) AM_DEVREAD("uart2", tms9902_device, cruread) // Cassette - //AM_RANGE(0x00e0, 0x00ff) AM_WRITE("dma", tms9911_device, write) // r12 = 1c0-1fe - //AM_RANGE(0x001c, 0x001f) AM_READ("dma", tms9911_device, read) // if reading is needed - //AM_RANGE(0x0400, 0x0407) AM_WRITE(cent_data_w) // r12 = 800-80e - //AM_RANGE(0x0408, 0x0408) AM_WRITE(cent_strobe_w) // r12 = 810 - //AM_RANGE(0x0081, 0x0081) AM_READ(cent_stat_r) // CRU 409 (r12 = 812) + map(0x0000, 0x000f).mirror(0x30).w("control", FUNC(ls259_device::write_d0)); + map(0x0000, 0x0007).r(FUNC(cortex_state::pio_r)); + map(0x0008, 0x000f).r(FUNC(cortex_state::keyboard_r)); + //map(0x0080, 0x00bf).rw("uart1", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); // RS232 (r12 = 80-bf) + //map(0x0180, 0x01bf).rw("uart2", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); // Cassette (r12 = 180-1bf) + //map(0x01c0, 0x01ff).rw("dma", FUNC(tms9911_device::read), FUNC(tms9911_device::write)); // r12 = 1c0-1fe + //map(0x0800, 0x080f).w(cortex_state::cent_data_w)); // r12 = 800-80e + //map(0x0810, 0x0811).w(FUNC(cortex_state::cent_strobe_w)); // r12 = 810 + //map(0x0812, 0x0813).r(FUNC(cortex_state::cent_stat_r)); // CRU 409 (r12 = 812) } /* Input ports */ @@ -125,12 +122,26 @@ INPUT_PORTS_END READ8_MEMBER( cortex_state::pio_r ) { - return (m_kbd_ack ? 0x20 : 0) | (m_vdp_int ? 0x40 : 0) | m_io_dsw->read() | 0x93; + switch (offset) + { + case 5: + return m_kbd_ack; + + case 6: + return m_vdp_int; + + case 2: + case 3: + return BIT(m_io_dsw->read(), offset); + + default: + return 1; + } } READ8_MEMBER( cortex_state::keyboard_r ) { - return m_term_data; + return BIT(m_term_data, offset); } WRITE_LINE_MEMBER( cortex_state::keyboard_ack_w ) diff --git a/src/mame/drivers/cosmic.cpp b/src/mame/drivers/cosmic.cpp index 010331b4b98..1413d03eb01 100644 --- a/src/mame/drivers/cosmic.cpp +++ b/src/mame/drivers/cosmic.cpp @@ -340,7 +340,15 @@ READ8_MEMBER(cosmic_state::cosmica_pixel_clock_r) READ8_MEMBER(cosmic_state::cosmicg_port_0_r) { /* The top four address lines from the CRTC are bits 0-3 */ - return (m_in_ports[0]->read() & 0xf0) | ((m_screen->vpos() & 0xf0) >> 4); + if (offset >= 4) + return BIT(m_in_ports[0]->read(), offset); + else + return BIT(m_screen->vpos(), offset + 4); +} + +READ8_MEMBER(cosmic_state::cosmicg_port_1_r) +{ + return BIT(m_in_ports[1]->read(), offset); } READ8_MEMBER(cosmic_state::magspot_coinage_dip_r) @@ -415,10 +423,10 @@ void cosmic_state::cosmicg_map(address_map &map) void cosmic_state::cosmicg_io_map(address_map &map) { - map(0x00, 0x00).r(FUNC(cosmic_state::cosmicg_port_0_r)); - map(0x01, 0x01).portr("IN1"); - map(0x00, 0x15).w(FUNC(cosmic_state::cosmicg_output_w)); - map(0x16, 0x17).w(FUNC(cosmic_state::cosmic_color_register_w)); + map(0x0000, 0x000f).r(FUNC(cosmic_state::cosmicg_port_0_r)); + map(0x0010, 0x001f).r(FUNC(cosmic_state::cosmicg_port_1_r)); + map(0x0000, 0x002b).w(FUNC(cosmic_state::cosmicg_output_w)); + map(0x002c, 0x002f).w(FUNC(cosmic_state::cosmic_color_register_w)); } diff --git a/src/mame/drivers/evmbug.cpp b/src/mame/drivers/evmbug.cpp index e487bcb873b..ad78722fbb7 100644 --- a/src/mame/drivers/evmbug.cpp +++ b/src/mame/drivers/evmbug.cpp @@ -59,10 +59,8 @@ void evmbug_state::mem_map(address_map &map) void evmbug_state::io_map(address_map &map) { map.unmap_value_high(); - //AM_RANGE(0x0000, 0x0003) AM_DEVREAD("uart1", tms9902_device, cruread) - //AM_RANGE(0x0000, 0x001f) AM_DEVWRITE("uart1", tms9902_device, cruwrite) - map(0x0000, 0x0003).r(FUNC(evmbug_state::rs232_r)); - map(0x0000, 0x001f).w(FUNC(evmbug_state::rs232_w)); + //map(0x0000, 0x003f).rw("uart1", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); + map(0x0000, 0x003f).rw(FUNC(evmbug_state::rs232_r), FUNC(evmbug_state::rs232_w)); } /* Input ports */ @@ -71,16 +69,19 @@ INPUT_PORTS_END READ8_MEMBER( evmbug_state::rs232_r ) { - if (offset == 0) - return m_term_data; - else - if (offset == 2) - return (m_rbrl ? 0x20 : 0) | 0xc0; - else + if (offset < 8) + return BIT(m_term_data, offset); + else if (offset == 21) + return m_rbrl; + else if (offset == 22 || offset == 23) + return 1; + else if (offset == 15) { m_rin ^= 1; - return m_rin << 7; + return m_rin; } + else + return 0; } WRITE8_MEMBER( evmbug_state::rs232_w ) diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp index ede3c861d3e..c3213bc002e 100644 --- a/src/mame/drivers/galaxian.cpp +++ b/src/mame/drivers/galaxian.cpp @@ -5988,8 +5988,8 @@ DISCRETE_SOUND_END * *************************************/ -MACHINE_CONFIG_START(galaxian_state::galaxian_base) - +void galaxian_state::galaxian_base(machine_config &config) +{ // basic machine hardware Z80(config, m_maincpu, GALAXIAN_PIXEL_CLOCK/3/2); m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::galaxian_map); @@ -6000,18 +6000,18 @@ MACHINE_CONFIG_START(galaxian_state::galaxian_base) GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian); PALETTE(config, m_palette, FUNC(galaxian_state::galaxian_palette), 32); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(GALAXIAN_PIXEL_CLOCK, GALAXIAN_HTOTAL, GALAXIAN_HBEND, GALAXIAN_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(galaxian_state, screen_update_galaxian) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, galaxian_state, vblank_interrupt_w)) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(GALAXIAN_PIXEL_CLOCK, GALAXIAN_HTOTAL, GALAXIAN_HBEND, GALAXIAN_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART); + m_screen->set_screen_update(FUNC(galaxian_state::screen_update_galaxian)); + m_screen->screen_vblank().set(FUNC(galaxian_state::vblank_interrupt_w)); // sound hardware SPEAKER(config, "speaker").front_center(); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(galaxian_state::sidam_bootleg_base) +void galaxian_state::sidam_bootleg_base(machine_config &config) +{ galaxian_base(config); /* basic machine hardware */ @@ -6020,9 +6020,8 @@ MACHINE_CONFIG_START(galaxian_state::sidam_bootleg_base) /* video hardware */ m_gfxdecode->set_info(gfx_sidam); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_RAW_PARAMS(12_MHz_XTAL, SIDAM_HTOTAL, SIDAM_HBEND, SIDAM_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART) -MACHINE_CONFIG_END + m_screen->set_raw(12_MHz_XTAL, SIDAM_HTOTAL, SIDAM_HBEND, SIDAM_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART); +} void galaxian_state::konami_base(machine_config &config) @@ -6043,12 +6042,12 @@ void galaxian_state::konami_base(machine_config &config) } -MACHINE_CONFIG_START(galaxian_state::konami_sound_1x_ay8910) - +void galaxian_state::konami_sound_1x_ay8910(machine_config &config) +{ /* 2nd CPU to drive sound */ - MCFG_DEVICE_ADD("audiocpu", Z80, KONAMI_SOUND_CLOCK/8) - MCFG_DEVICE_PROGRAM_MAP(frogger_sound_map) - MCFG_DEVICE_IO_MAP(frogger_sound_portmap) + Z80(config, m_audiocpu, KONAMI_SOUND_CLOCK/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::frogger_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::frogger_sound_portmap); GENERIC_LATCH_8(config, m_soundlatch); @@ -6062,17 +6061,16 @@ MACHINE_CONFIG_START(galaxian_state::konami_sound_1x_ay8910) m_ay8910[0]->add_route(1, "konami", 1.0, 1); m_ay8910[0]->add_route(2, "konami", 1.0, 2); - MCFG_DEVICE_ADD("konami", DISCRETE, konami_sound_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.75) -MACHINE_CONFIG_END - + DISCRETE(config, m_discrete, konami_sound_discrete).add_route(ALL_OUTPUTS, "speaker", 0.75); +} -MACHINE_CONFIG_START(galaxian_state::konami_sound_2x_ay8910) +void galaxian_state::konami_sound_2x_ay8910(machine_config &config) +{ /* 2nd CPU to drive sound */ - MCFG_DEVICE_ADD("audiocpu", Z80, KONAMI_SOUND_CLOCK/8) - MCFG_DEVICE_PROGRAM_MAP(konami_sound_map) - MCFG_DEVICE_IO_MAP(konami_sound_portmap) + Z80(config, m_audiocpu, KONAMI_SOUND_CLOCK/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::konami_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::konami_sound_portmap); GENERIC_LATCH_8(config, m_soundlatch); @@ -6093,9 +6091,8 @@ MACHINE_CONFIG_START(galaxian_state::konami_sound_2x_ay8910) m_ay8910[1]->add_route(1, "konami", 1.0, 4); m_ay8910[1]->add_route(2, "konami", 1.0, 5); - MCFG_DEVICE_ADD("konami", DISCRETE, konami_sound_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) -MACHINE_CONFIG_END + DISCRETE(config, m_discrete, konami_sound_discrete).add_route(ALL_OUTPUTS, "speaker", 0.5); +} void galaxian_state::scramble_base(machine_config &config) @@ -6157,22 +6154,21 @@ void galaxian_state::pacmanbl(machine_config &config) m_gfxdecode->set_info(gfx_pacmanbl); } -MACHINE_CONFIG_START(galaxian_state::tenspot) +void galaxian_state::tenspot(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_ADD("selectcpu", Z80, GALAXIAN_PIXEL_CLOCK/3/2) // ?? mhz - MCFG_DEVICE_PROGRAM_MAP(tenspot_select_map) - //MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse) + z80_device &selectcpu(Z80(config, "selectcpu", GALAXIAN_PIXEL_CLOCK/3/2)); // ?? mhz + selectcpu.set_addrmap(AS_PROGRAM, &galaxian_state::tenspot_select_map); + //selectcpu.set_vblank_int("screen", FUNC(galaxian_state::nmi_line_pulse)); /* separate tile/sprite ROMs */ m_gfxdecode->set_info(gfx_tenspot); - // MCFG_CPU_VBLANK_INT("screen", nmi_line_pulse) /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, galaxian_state, tenspot_interrupt_w)) -MACHINE_CONFIG_END + m_screen->screen_vblank().set(FUNC(galaxian_state::tenspot_interrupt_w)); +} void galaxian_state::zigzag(machine_config &config) { @@ -6298,30 +6294,32 @@ void galaxian_state::jumpbug(machine_config &config) } -MACHINE_CONFIG_START(galaxian_state::checkman) +void galaxian_state::checkman(machine_config &config) +{ mooncrst(config); /* basic machine hardware */ - MCFG_DEVICE_ADD("audiocpu", Z80, 1620000) /* 1.62 MHz */ - MCFG_DEVICE_PROGRAM_MAP(checkman_sound_map) - MCFG_DEVICE_IO_MAP(checkman_sound_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxian_state, irq0_line_hold) /* NMIs are triggered by the main CPU */ + Z80(config, m_audiocpu, 1620000); /* 1.62 MHz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::checkman_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::checkman_sound_portmap); + m_audiocpu->set_vblank_int("screen", FUNC(galaxian_state::irq0_line_hold)); /* NMIs are triggered by the main CPU */ GENERIC_LATCH_8(config, m_soundlatch); /* sound hardware */ AY8910(config, m_ay8910[0], 1789750).add_route(ALL_OUTPUTS, "speaker", 0.5); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxian_state::checkmaj) +void galaxian_state::checkmaj(machine_config &config) +{ galaxian_base(config); // basic machine hardware m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::galaxian_map_base); // no discrete sound - MCFG_DEVICE_ADD("audiocpu", Z80, 1620000) - MCFG_DEVICE_PROGRAM_MAP(checkmaj_sound_map) + Z80(config, m_audiocpu, 1620000); + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::checkmaj_sound_map); TIMER(config, "irq0").configure_scanline(FUNC(galaxian_state::checkmaj_irq0_gen), "screen", 0, 8); @@ -6331,7 +6329,7 @@ MACHINE_CONFIG_START(galaxian_state::checkmaj) AY8910(config, m_ay8910[0], 1620000); m_ay8910[0]->port_a_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read)); m_ay8910[0]->add_route(ALL_OUTPUTS, "speaker", 2); -MACHINE_CONFIG_END +} void galaxian_state::mshuttle(machine_config &config) @@ -6377,16 +6375,16 @@ void galaxian_state::frogger(machine_config &config) } -MACHINE_CONFIG_START(galaxian_state::froggermc) +void galaxian_state::froggermc(machine_config &config) +{ galaxian_base(config); konami_sound_1x_ay8910(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::froggermc_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(DEVICE_SELF, galaxian_state, froggermc_audiocpu_irq_ack) -MACHINE_CONFIG_END + m_audiocpu->set_irq_acknowledge_callback(FUNC(galaxian_state::froggermc_audiocpu_irq_ack)); +} void galaxian_state::froggers(machine_config &config) @@ -6456,35 +6454,37 @@ void galaxian_state::scramble(machine_config &config) m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::theend_protection_w)); } -MACHINE_CONFIG_START(galaxian_state::jungsub) +void galaxian_state::jungsub(machine_config &config) +{ galaxian_base(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::jungsub_map); m_maincpu->set_addrmap(AS_IO, &galaxian_state::jungsub_io_map); - MCFG_DEVICE_ADD("audiocpu", Z80, GALAXIAN_PIXEL_CLOCK / 3 / 2) // clock not verified - MCFG_DEVICE_PROGRAM_MAP(checkman_sound_map) - MCFG_DEVICE_IO_MAP(checkman_sound_portmap) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxian_state, irq0_line_hold) + Z80(config, m_audiocpu, GALAXIAN_PIXEL_CLOCK / 3 / 2); // clock not verified + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::checkman_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::checkman_sound_portmap); + m_audiocpu->set_vblank_int("screen", FUNC(galaxian_state::irq0_line_hold)); GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); /* sound hardware */ AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK / 3 / 2 / 2).add_route(ALL_OUTPUTS, "speaker", 0.5); // clock not verified -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxian_state::explorer) // Sidam 10800 +void galaxian_state::explorer(machine_config &config) // Sidam 10800 +{ sidam_bootleg_base(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::explorer_map); /* 2nd CPU to drive sound */ - MCFG_DEVICE_ADD("audiocpu", Z80, 12_MHz_XTAL / 2 / 2 / 2) /* clock not verified */ - MCFG_DEVICE_PROGRAM_MAP(konami_sound_map) - MCFG_DEVICE_IO_MAP(konami_sound_portmap) + Z80(config, m_audiocpu, 12_MHz_XTAL / 2 / 2 / 2); /* clock not verified */ + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::konami_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::konami_sound_portmap); GENERIC_LATCH_8(config, m_soundlatch); @@ -6496,15 +6496,15 @@ MACHINE_CONFIG_START(galaxian_state::explorer) // Sidam 10800 AY8912(config, m_ay8910[1], 12_MHz_XTAL / 2 / 2 / 2); /* matches PCB, needs verification */ m_ay8910[0]->port_a_read_callback().set(FUNC(galaxian_state::konami_sound_timer_r)); m_ay8910[0]->add_route(ALL_OUTPUTS, "speaker", 0.25); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxian_state::takeoff) // Sidam 10900, with 1 x AY-3-8912 +void galaxian_state::takeoff(machine_config &config) // Sidam 10900, with 1 x AY-3-8912 +{ explorer(config); /* 2nd CPU to drive sound */ - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(takeoff_sound_map) - MCFG_DEVICE_IO_MAP(takeoff_sound_portmap) + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::takeoff_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::takeoff_sound_portmap); /* sound hardware */ config.device_remove("8910.0"); @@ -6513,18 +6513,20 @@ MACHINE_CONFIG_START(galaxian_state::takeoff) // Sidam 10900, with 1 x AY-3-8912 ay8912_device &ay8912(AY8912(config, "8912", XTAL(12'000'000) / 8)); ay8912.port_a_read_callback().set(FUNC(galaxian_state::explorer_sound_latch_r)); ay8912.add_route(ALL_OUTPUTS, "speaker", 0.25); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxian_state::amigo2) // marked "AMI", but similar to above +void galaxian_state::amigo2(machine_config &config) // marked "AMI", but similar to above +{ sidam_bootleg_base(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::amigo2_map); // 2nd CPU to drive sound - MCFG_DEVICE_ADD("audiocpu", Z80, 12_MHz_XTAL / 2 / 2 / 2) // clock not verified - MCFG_DEVICE_PROGRAM_MAP(konami_sound_map) - MCFG_DEVICE_IO_MAP(konami_sound_portmap) + Z80(config, m_audiocpu, 12_MHz_XTAL / 2 / 2 / 2); // clock not verified + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::konami_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::konami_sound_portmap); + GENERIC_LATCH_8(config, m_soundlatch); /* sound hardware */ @@ -6534,17 +6536,17 @@ MACHINE_CONFIG_START(galaxian_state::amigo2) // marked "AMI", but similar to abo m_ay8910[0]->add_route(ALL_OUTPUTS, "speaker", 0.25); AY8910(config, m_ay8910[1], 12_MHz_XTAL / 2 / 2 / 2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* matches PCB, needs verification */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxian_state::scorpion) +void galaxian_state::scorpion(machine_config &config) +{ scramble_base(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(scorpion_sound_map) - MCFG_DEVICE_IO_MAP(scorpion_sound_portmap) + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_sound_map); + m_audiocpu->set_addrmap(AS_IO, &galaxian_state::scorpion_sound_portmap); m_ppi8255[1]->in_pc_callback().set(FUNC(galaxian_state::scorpion_protection_r)); m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::scorpion_protection_w)); @@ -6556,7 +6558,7 @@ MACHINE_CONFIG_START(galaxian_state::scorpion) m_ay8910[2]->add_route(ALL_OUTPUTS, "speaker", 0.25); DIGITALKER(config, m_digitalker, 4_MHz_XTAL).add_route(ALL_OUTPUTS, "speaker", 0.16); -MACHINE_CONFIG_END +} void galaxian_state::sfx(machine_config &config) @@ -6689,25 +6691,25 @@ void galaxian_state::froggeram(machine_config &config) } -MACHINE_CONFIG_START(galaxian_state::turpins) // the ROMs came from a blister, so there aren't PCB infos available. Chip types and clocks are guessed. +void galaxian_state::turpins(machine_config &config) // the ROMs came from a blister, so there aren't PCB infos available. Chip types and clocks are guessed. +{ scobra(config); // alternate memory map m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::turpins_map); - MCFG_DEVICE_MODIFY("audiocpu") - MCFG_DEVICE_PROGRAM_MAP(turpins_sound_map) -MACHINE_CONFIG_END + m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::turpins_sound_map); +} -MACHINE_CONFIG_START(galaxian_state::anteater) +void galaxian_state::anteater(machine_config &config) +{ scobra(config); /* quiet down the sounds */ - MCFG_DEVICE_MODIFY("konami") - MCFG_SOUND_ROUTES_RESET() - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25) -MACHINE_CONFIG_END + m_discrete->reset_routes(); + m_discrete->add_route(ALL_OUTPUTS, "speaker", 0.25); +} void galaxian_state::anteateruk(machine_config &config) diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp index c87e568e3ba..45ed0e73615 100644 --- a/src/mame/drivers/galaxold.cpp +++ b/src/mame/drivers/galaxold.cpp @@ -588,7 +588,7 @@ void galaxold_state::dkongjrmc_map(address_map &map) } -void galaxold_state::tazzmang(address_map &map) +void galaxold_state::tazzmang_map(address_map &map) { map(0x0000, 0x5fff).rom(); map(0x7000, 0x7000).portr("DSW0"); /* mirror */ @@ -614,7 +614,7 @@ void galaxold_state::tazzmang(address_map &map) } -void galaxold_state::bongo(address_map &map) +void galaxold_state::bongo_map(address_map &map) { map(0x0000, 0x5fff).rom(); map(0x8000, 0x83ff).ram(); @@ -668,7 +668,7 @@ void galaxold_state::ozon1_io_map(address_map &map) } -void galaxold_state::hunchbkg(address_map &map) +void galaxold_state::hunchbkg_map(address_map &map) { map(0x0000, 0x0fff).rom(); map(0x1480, 0x14bf).mirror(0x6000).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); @@ -694,7 +694,7 @@ void galaxold_state::hunchbkg(address_map &map) } /* hunchbkg style */ -void galaxold_state::spcwarp(address_map &map) +void galaxold_state::spcwarp_map(address_map &map) { map(0x0000, 0x0fff).rom(); map(0x1480, 0x14bf).mirror(0x6000).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram"); @@ -2253,11 +2253,11 @@ static GFXDECODE_START( gfx_4in1 ) GFXDECODE_END -MACHINE_CONFIG_START(galaxold_state::galaxold_base) - +void galaxold_state::galaxold_base(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, PIXEL_CLOCK/2) /* 3.072 MHz */ - MCFG_DEVICE_PROGRAM_MAP(galaxold_map) + Z80(config, m_maincpu, PIXEL_CLOCK/2); /* 3.072 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::galaxold_map); MCFG_MACHINE_RESET_OVERRIDE(galaxold_state,galaxold) @@ -2275,58 +2275,56 @@ MACHINE_CONFIG_START(galaxold_state::galaxold_base) GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian); PALETTE(config, m_palette, FUNC(galaxold_state::galaxold_palette), 32+2+64); // 32 for the characters, 2 for the bullets, 64 for the stars - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(galaxold_state, screen_update_galaxold) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); + m_screen->set_palette(m_palette); MCFG_VIDEO_START_OVERRIDE(galaxold_state,galaxold) /* sound hardware */ SPEAKER(config, "speaker").front_center(); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(galaxold_state::galaxian_audio) - MCFG_DEVICE_ADD("cust", GALAXIAN, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.4) +} - MCFG_DEVICE_ADD(GAL_AUDIO, DISCRETE, galaxian_discrete) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) -MACHINE_CONFIG_END +void galaxold_state::galaxian_audio(machine_config &config) +{ + GALAXIAN(config, "cust", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); -MACHINE_CONFIG_START(galaxold_state::mooncrst_audio) - MCFG_DEVICE_ADD("cust", GALAXIAN, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.4) + DISCRETE(config, GAL_AUDIO, galaxian_discrete).add_route(ALL_OUTPUTS, "speaker", 1.0); +} - MCFG_DEVICE_ADD(GAL_AUDIO, DISCRETE, mooncrst_discrete) +void galaxold_state::mooncrst_audio(machine_config &config) +{ + GALAXIAN(config, "cust", 0).add_route(ALL_OUTPUTS, "speaker", 0.4); - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) -MACHINE_CONFIG_END + DISCRETE(config, GAL_AUDIO, mooncrst_discrete).add_route(ALL_OUTPUTS, "speaker", 1.0); +} -MACHINE_CONFIG_START(galaxold_state::galaxian) +void galaxold_state::galaxian(machine_config &config) +{ galaxold_base(config); /* basic machine hardware */ /* sound hardware */ galaxian_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::mooncrst) +void galaxold_state::mooncrst(machine_config &config) +{ galaxold_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(mooncrst_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::mooncrst_map); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state,mooncrst) /* sound hardware */ mooncrst_audio(config); -MACHINE_CONFIG_END +} // 'Videotron' // this is a 'cartridge' based system, taking plug-in game boards. @@ -2334,84 +2332,85 @@ MACHINE_CONFIG_END // but neither of the games we have (froggerv and hustlerb3) make use of either. There are a number // of unpopulated positions on the game board which presumably can be populated with code for the // 2nd Z80. -MACHINE_CONFIG_START(galaxold_state::videotron) +void galaxold_state::videotron(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(hustlerb3_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::hustlerb3_map); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state,mooncrst) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::porter) +void galaxold_state::porter(machine_config &config) +{ mooncrst(config); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state, pisces) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::scramblb) +void galaxold_state::scramblb(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(scramblb_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scramblb_map); /* video hardware */ m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background m_palette->set_init(FUNC(galaxold_state::scrambold_palette)); MCFG_VIDEO_START_OVERRIDE(galaxold_state,scrambold) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::scramb2) +void galaxold_state::scramb2(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(scramb2_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scramb2_map); /* video hardware */ m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background m_palette->set_init(FUNC(galaxold_state::scrambold_palette)); MCFG_VIDEO_START_OVERRIDE(galaxold_state,scrambold) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::scramb3) +void galaxold_state::scramb3(machine_config &config) +{ scramb2(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(scramb3_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scramb3_map); +} -MACHINE_CONFIG_START(galaxold_state::scrambler) +void galaxold_state::scrambler(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(scrambler_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scrambler_map); /* video hardware */ m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background m_palette->set_init(FUNC(galaxold_state::scrambold_palette)); MCFG_VIDEO_START_OVERRIDE(galaxold_state,scrambold) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::guttang) +void galaxold_state::guttang(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(guttang_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::guttang_map); /* video hardware */ m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background @@ -2419,64 +2418,64 @@ MACHINE_CONFIG_START(galaxold_state::guttang) // m_palette->set_init(FUNC(galaxold_state::scrambold_palette)); MCFG_VIDEO_START_OVERRIDE(galaxold_state,mooncrst) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::_4in1) +void galaxold_state::_4in1(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(_4in1_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::_4in1_map); /* video hardware */ m_gfxdecode->set_info(gfx_4in1); MCFG_VIDEO_START_OVERRIDE(galaxold_state,pisces) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::bagmanmc) +void galaxold_state::bagmanmc(machine_config &config) +{ mooncrst(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bagmanmc_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::bagmanmc_map); MCFG_MACHINE_RESET_OVERRIDE(galaxold_state, devilfsg ) /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state, bagmanmc) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::dkongjrm) +void galaxold_state::dkongjrm(machine_config &config) +{ mooncrst(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dkongjrm_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::dkongjrm_map); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state,dkongjrm) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::dkongjrmc) +void galaxold_state::dkongjrmc(machine_config &config) +{ mooncrst(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(dkongjrmc_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::dkongjrmc_map); MCFG_VIDEO_START_OVERRIDE(galaxold_state,dkongjrmc) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::rockclim) +void galaxold_state::rockclim(machine_config &config) +{ mooncrst(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(rockclim_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::rockclim_map); m_gfxdecode->set_info(gfx_rockclim); /* video hardware */ @@ -2484,19 +2483,18 @@ MACHINE_CONFIG_START(galaxold_state::rockclim) m_palette->set_entries(64+64+2); // 64 colors only, but still uses bullets so we need to keep the palette big m_palette->set_init(FUNC(galaxold_state::rockclim_palette)); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(64*8, 32*8) -MACHINE_CONFIG_END + m_screen->set_size(64*8, 32*8); +} -MACHINE_CONFIG_START(galaxold_state::ozon1) +void galaxold_state::ozon1(machine_config &config) +{ galaxold_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(ozon1_map) - MCFG_DEVICE_IO_MAP(ozon1_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxold_state, nmi_line_pulse) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::ozon1_map); + m_maincpu->set_addrmap(AS_IO, &galaxold_state::ozon1_io_map); + m_maincpu->set_vblank_int("screen", FUNC(galaxold_state::nmi_line_pulse)); MCFG_MACHINE_RESET_REMOVE() @@ -2506,11 +2504,11 @@ MACHINE_CONFIG_START(galaxold_state::ozon1) MCFG_VIDEO_START_OVERRIDE(galaxold_state,ozon1) AY8910(config, "aysnd", PIXEL_CLOCK/4).add_route(ALL_OUTPUTS, "speaker", 0.5); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(galaxold_state::drivfrcg) +void galaxold_state::drivfrcg(machine_config &config) +{ /* basic machine hardware */ s2650_device &maincpu(S2650(config, m_maincpu, MASTER_CLOCK/6)); maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::drivfrcg_program); @@ -2519,13 +2517,13 @@ MACHINE_CONFIG_START(galaxold_state::drivfrcg) maincpu.sense_handler().set("screen", FUNC(screen_device::vblank)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(16000.0/132/2) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(galaxold_state, screen_update_galaxold) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(16000.0/132/2); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); + m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 64); @@ -2537,38 +2535,38 @@ MACHINE_CONFIG_START(galaxold_state::drivfrcg) SPEAKER(config, "speaker").front_center(); galaxian_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::bongo) +void galaxold_state::bongo(machine_config &config) +{ galaxold_base(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(bongo) - MCFG_DEVICE_IO_MAP(bongo_io) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::bongo_map); + m_maincpu->set_addrmap(AS_IO, &galaxold_state::bongo_io); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(galaxold_state,bongo) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(galaxold_state, screen_update_galaxold) + + m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); /* sound hardware */ ay8910_device &aysnd(AY8910(config, "aysnd", PIXEL_CLOCK/4)); aysnd.port_a_read_callback().set_ioport("DSW1"); aysnd.add_route(ALL_OUTPUTS, "speaker", 0.5); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::hunchbkg) +void galaxold_state::hunchbkg(machine_config &config) +{ galaxold_base(config); /* basic machine hardware */ - MCFG_DEVICE_REPLACE("maincpu", S2650, PIXEL_CLOCK / 4) - - MCFG_DEVICE_PROGRAM_MAP(hunchbkg) - MCFG_DEVICE_DATA_MAP(hunchbkg_data) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(galaxold_state,hunchbkg_irq_callback) + S2650(config.replace(), m_maincpu, PIXEL_CLOCK / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::hunchbkg_map); + m_maincpu->set_addrmap(AS_DATA, &galaxold_state::hunchbkg_data); + m_maincpu->set_irq_acknowledge_callback(FUNC(galaxold_state::hunchbkg_irq_callback)); /* the nmi line seems to be inverted on the cpu plugin board */ m_7474_9m_1->comp_output_cb().set_inputline("maincpu", S2650_SENSE_LINE); @@ -2576,115 +2574,113 @@ MACHINE_CONFIG_START(galaxold_state::hunchbkg) MCFG_MACHINE_RESET_OVERRIDE(galaxold_state,hunchbkg) galaxian_audio(config); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::spcwarp) +void galaxold_state::spcwarp(machine_config &config) +{ hunchbkg(config); /* hunchbkg, but with a different memory map */ /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(spcwarp) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::spcwarp_map); +} -MACHINE_CONFIG_START(galaxold_state::tazzmang) +void galaxold_state::tazzmang(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tazzmang) -MACHINE_CONFIG_END - + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::tazzmang_map); +} -MACHINE_CONFIG_START(galaxold_state::racknrol) +void galaxold_state::racknrol(machine_config &config) +{ /* basic machine hardware */ s2650_device &maincpu(S2650(config, m_maincpu, PIXEL_CLOCK/2)); maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::racknrol_map); maincpu.set_addrmap(AS_IO, &galaxold_state::racknrol_io); maincpu.sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); // ??? - device = &maincpu; // FIXME: kill the following line - convert to a screen vblank callback - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt) + // FIXME: kill the following line - convert to a screen vblank callback + maincpu.set_vblank_int("screen", FUNC(galaxold_state::hunchbks_vh_interrupt)); /* video hardware */ GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian); PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 32); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(galaxold_state, screen_update_galaxold) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); + m_screen->set_palette(m_palette); MCFG_VIDEO_START_OVERRIDE(galaxold_state,racknrol) /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489A, PIXEL_CLOCK/2) // SN76489AN - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) -MACHINE_CONFIG_END - + SN76489A(config, "snsnd", PIXEL_CLOCK/2).add_route(ALL_OUTPUTS, "speaker", 1.0); // SN76489AN +} -MACHINE_CONFIG_START(galaxold_state::hexpoola) +void galaxold_state::hexpoola(machine_config &config) +{ /* basic machine hardware */ s2650_device &maincpu(S2650(config, m_maincpu, PIXEL_CLOCK/2)); maincpu.set_addrmap(AS_PROGRAM, &galaxold_state::racknrol_map); maincpu.set_addrmap(AS_IO, &galaxold_state::hexpoola_io); maincpu.set_addrmap(AS_DATA, &galaxold_state::hexpoola_data); maincpu.sense_handler().set(m_screen, FUNC(screen_device::vblank)).invert(); // ??? - device = &maincpu; // FIXME: kill the following line - convert to a screen vblank callback - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt) + // FIXME: kill the following line - convert to a screen vblank callback + maincpu.set_vblank_int("screen", FUNC(galaxold_state::hunchbks_vh_interrupt)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian); PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 32); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(galaxold_state, screen_update_galaxold) - MCFG_SCREEN_PALETTE(m_palette) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART); + m_screen->set_screen_update(FUNC(galaxold_state::screen_update_galaxold)); + m_screen->set_palette(m_palette); MCFG_VIDEO_START_OVERRIDE(galaxold_state,racknrol) /* sound hardware */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76496, PIXEL_CLOCK/2) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) -MACHINE_CONFIG_END + SN76496(config, "snsnd", PIXEL_CLOCK/2).add_route(ALL_OUTPUTS, "speaker", 1.0); +} -MACHINE_CONFIG_START(galaxold_state::ckongg) +void galaxold_state::ckongg(machine_config &config) +{ galaxian(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(ckongg_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::ckongg_map); m_gfxdecode->set_info(gfx_gmgalax); MCFG_VIDEO_START_OVERRIDE(galaxold_state,ckongs) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::ckongmc) +void galaxold_state::ckongmc(machine_config &config) +{ mooncrst(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(ckongmc_map) + m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::ckongmc_map); m_gfxdecode->set_info(gfx_gmgalax); MCFG_VIDEO_START_OVERRIDE(galaxold_state,ckongs) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(galaxold_state::bullsdrtg) +void galaxold_state::bullsdrtg(machine_config &config) +{ hexpoola(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_DATA_MAP(bullsdrtg_data_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_DATA, &galaxold_state::bullsdrtg_data_map); +} /*************************************************************************** diff --git a/src/mame/drivers/gei.cpp b/src/mame/drivers/gei.cpp index 277fbaa7bd3..f6726c18c9d 100644 --- a/src/mame/drivers/gei.cpp +++ b/src/mame/drivers/gei.cpp @@ -978,19 +978,20 @@ INTERRUPT_GEN_MEMBER(gei_state::vblank_irq) } -MACHINE_CONFIG_START(gei_state::getrivia) - MCFG_DEVICE_ADD("maincpu",Z80,4000000) /* 4 MHz */ - MCFG_DEVICE_PROGRAM_MAP(getrivia_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", gei_state, vblank_irq) +void gei_state::getrivia(machine_config &config) +{ + Z80(config, m_maincpu, 4000000); /* 4 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::getrivia_map); + m_maincpu->set_vblank_int("screen", FUNC(gei_state::vblank_irq)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_UPDATE_DRIVER(gei_state, screen_update) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(48, 511-48, 16, 255-16) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_screen_update(FUNC(gei_state::screen_update)); + m_screen->set_size(512, 256); + m_screen->set_visarea(48, 511-48, 16, 255-16); + m_screen->set_palette("palette"); PALETTE(config, "palette", palette_device::GBR_3BIT); @@ -1013,92 +1014,92 @@ MACHINE_CONFIG_START(gei_state::getrivia) DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.99); voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(gei_state::findout) +void gei_state::findout(machine_config &config) +{ getrivia(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(findout_map) + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::findout_map); m_ppi[1]->in_pc_callback().set(FUNC(gei_state::portC_r)); m_ppi[1]->out_pc_callback().set_nop(); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(gei_state::quizvid) +void gei_state::quizvid(machine_config &config) +{ findout(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(quizvid_map) + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::quizvid_map); PALETTE(config.replace(), "palette", palette_device::GRB_3BIT); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(gei_state::gselect) +void gei_state::gselect(machine_config &config) +{ getrivia(config); /* basic machine hardware */ config.device_remove("ticket"); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(gselect_map) + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::gselect_map); m_ppi[0]->out_pc_callback().set(FUNC(gei_state::sound2_w)); m_ppi[1]->in_pc_callback().set_ioport("IN2"); m_ppi[1]->out_pc_callback().set(FUNC(gei_state::nmi_w)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(gei_state::jokpokera) +void gei_state::jokpokera(machine_config &config) +{ getrivia(config); /* basic machine hardware */ config.device_remove("ticket"); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(gselect_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::gselect_map); +} -MACHINE_CONFIG_START(gei_state::amuse) +void gei_state::amuse(machine_config &config) +{ getrivia(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(amuse_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::amuse_map); +} -MACHINE_CONFIG_START(gei_state::gepoker) +void gei_state::gepoker(machine_config &config) +{ getrivia(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(gepoker_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::gepoker_map); +} -MACHINE_CONFIG_START(gei_state::amuse1) +void gei_state::amuse1(machine_config &config) +{ getrivia(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(amuse1_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::amuse1_map); +} -MACHINE_CONFIG_START(gei_state::suprpokr) +void gei_state::suprpokr(machine_config &config) +{ getrivia(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(suprpokr_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::suprpokr_map); +} -MACHINE_CONFIG_START(gei_state::sprtauth) +void gei_state::sprtauth(machine_config &config) +{ getrivia(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(sprtauth_map) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &gei_state::sprtauth_map); +} /*************************************************** diff --git a/src/mame/drivers/geneve.cpp b/src/mame/drivers/geneve.cpp index aee10998539..5aaa4cf9f82 100644 --- a/src/mame/drivers/geneve.cpp +++ b/src/mame/drivers/geneve.cpp @@ -306,11 +306,8 @@ void geneve_state::memmap_setoffset(address_map &map) */ void geneve_state::crumap(address_map &map) { - map(0x0000, 0x0fff).r(FUNC(geneve_state::cruread)); - map(0x0000, 0x0003).r(m_tms9901, FUNC(tms9901_device::read)); - - map(0x0000, 0x7fff).w(FUNC(geneve_state::cruwrite)); - map(0x0000, 0x001f).w(m_tms9901, FUNC(tms9901_device::write)); + map(0x0000, 0xffff).rw(FUNC(geneve_state::cruread), FUNC(geneve_state::cruwrite)); + map(0x0000, 0x003f).rw(m_tms9901, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); } static INPUT_PORTS_START(geneve_common) @@ -434,7 +431,7 @@ WRITE8_MEMBER ( geneve_state::cruwrite ) READ8_MEMBER( geneve_state::cruread ) { uint8_t value = 0; - int addroff = offset << 4; + uint16_t addroff = offset << 1; // Single step // 13c0 - 13fe: 0001 0011 11xx xxx0 diff --git a/src/mame/drivers/genpc.cpp b/src/mame/drivers/genpc.cpp index 39118e5dfc7..da5d14d25b9 100644 --- a/src/mame/drivers/genpc.cpp +++ b/src/mame/drivers/genpc.cpp @@ -54,21 +54,22 @@ static DEVICE_INPUT_DEFAULTS_START(vga) DEVICE_INPUT_DEFAULTS("DSW0",0x30, 0x00) DEVICE_INPUT_DEFAULTS_END -MACHINE_CONFIG_START(genpc_state::pcmda) +void genpc_state::pcmda(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8088, 4772720) - MCFG_DEVICE_PROGRAM_MAP(pc8_map) - MCFG_DEVICE_IO_MAP(pc8_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb) + I8088(config, m_maincpu, 4772720); + m_maincpu->set_addrmap(AS_PROGRAM, &genpc_state::pc8_map); + m_maincpu->set_addrmap(AS_IO, &genpc_state::pc8_io); + m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); IBM5160_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); - MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "mda", false) // FIXME: determine ISA bus clock - MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "com", false) - MCFG_DEVICE_ADD("isa3", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "fdc_xt", false) - MCFG_DEVICE_ADD("isa4", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "hdc", false) - MCFG_DEVICE_ADD("isa5", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "adlib", false) - MCFG_DEVICE_ADD("isa6", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) + ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "mda", false); // FIXME: determine ISA bus clock + ISA8_SLOT(config, "isa2", 0, "mb:isa", pc_isa8_cards, "com", false); + ISA8_SLOT(config, "isa3", 0, "mb:isa", pc_isa8_cards, "fdc_xt", false); + ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "hdc", false); + ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, "adlib", false); + ISA8_SLOT(config, "isa6", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); @@ -78,37 +79,37 @@ MACHINE_CONFIG_START(genpc_state::pcmda) /* software lists */ SOFTWARE_LIST(config, "disk_list").set_original("ibm5150"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(genpc_state::pcherc) +void genpc_state::pcherc(machine_config &config) +{ pcmda(config); - MCFG_DEVICE_MODIFY("isa1") - MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "hercules", false) -MACHINE_CONFIG_END + subdevice<isa8_slot_device>("isa1")->set_default_option("hercules"); +} -MACHINE_CONFIG_START(genpc_state::pccga) +void genpc_state::pccga(machine_config &config) +{ pcmda(config); subdevice<ibm5160_mb_device>("mb")->set_input_default(DEVICE_INPUT_DEFAULTS_NAME(cga)); - MCFG_DEVICE_MODIFY("isa1") - MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "cga", false) -MACHINE_CONFIG_END + subdevice<isa8_slot_device>("isa1")->set_default_option("cga"); +} -MACHINE_CONFIG_START(genpc_state::pcega) +void genpc_state::pcega(machine_config &config) +{ pccga(config); - MCFG_DEVICE_MODIFY("isa1") - MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "ega", false) + subdevice<isa8_slot_device>("isa1")->set_default_option("ega"); subdevice<ibm5160_mb_device>("mb")->set_input_default(DEVICE_INPUT_DEFAULTS_NAME(vga)); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(genpc_state::pcvga) +void genpc_state::pcvga(machine_config &config) +{ pcega(config); - MCFG_DEVICE_MODIFY("isa1") - MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "vga", false) -MACHINE_CONFIG_END + subdevice<isa8_slot_device>("isa1")->set_default_option("vga"); +} ROM_START(pc) ROM_REGION(0x02000, "bios", 0) diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp index ddc95ac1df3..199eb02f203 100644 --- a/src/mame/drivers/goldstar.cpp +++ b/src/mame/drivers/goldstar.cpp @@ -8443,22 +8443,22 @@ WRITE8_MEMBER(goldstar_state::ay8910_outputb_w) } -MACHINE_CONFIG_START(goldstar_state::goldstar) - +void goldstar_state::goldstar(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(goldstar_map) - MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::goldstar_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::goldstar_readport); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_goldstar); PALETTE(config, m_palette).set_format(palette_device::BGR_233, 256); @@ -8473,28 +8473,26 @@ MACHINE_CONFIG_START(goldstar_state::goldstar) aysnd.port_b_read_callback().set_ioport("DSW3"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, OKI_CLOCK, okim6295_device::PIN7_HIGH) /* clock frequency & pin 7 not verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - -MACHINE_CONFIG_END - + OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ +} -MACHINE_CONFIG_START(goldstar_state::goldstbl) +void goldstar_state::goldstbl(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(goldstar_map) - MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::goldstar_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::goldstar_readport); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_bl); PALETTE(config, m_palette).set_format(palette_device::BGR_233, 256); @@ -8509,9 +8507,8 @@ MACHINE_CONFIG_START(goldstar_state::goldstbl) aysnd.port_b_read_callback().set_ioport("DSW3"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, OKI_CLOCK, okim6295_device::PIN7_HIGH) /* clock frequency & pin 7 not verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ +} void goldstar_state::moonlght(machine_config &config) { @@ -8526,22 +8523,22 @@ void goldstar_state::goldfrui(machine_config &config) } -MACHINE_CONFIG_START(sanghopm_state::star100) - +void sanghopm_state::star100(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(star100_map) - MCFG_DEVICE_IO_MAP(star100_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &sanghopm_state::star100_map); + m_maincpu->set_addrmap(AS_IO, &sanghopm_state::star100_readport); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(sanghopm_state, screen_update_sangho) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(sanghopm_state::screen_update_sangho)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); PALETTE(config, m_palette).set_entries(0x100); RAMDAC(config, "ramdac", 0, "palette").set_addrmap(0, &sanghopm_state::ramdac_map); @@ -8559,30 +8556,28 @@ MACHINE_CONFIG_START(sanghopm_state::star100) aysnd.port_b_read_callback().set_ioport("DSW6"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, OKI_CLOCK, okim6295_device::PIN7_HIGH) /* clock frequency & pin 7 not verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - -MACHINE_CONFIG_END - + OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ +} -MACHINE_CONFIG_START(goldstar_state::super9) +void goldstar_state::super9(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(goldstar_map) -// MCFG_DEVICE_PROGRAM_MAP(nfm_map) - MCFG_DEVICE_IO_MAP(goldstar_readport) -// MCFG_DEVICE_IO_MAP(unkch_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::goldstar_map); +// m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::nfm_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::goldstar_readport); +// m_maincpu->set_addrmap(AS_IO, &goldstar_state::unkch_portmap); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_super9); PALETTE(config, m_palette).set_format(palette_device::BGR_233, 256); @@ -8597,9 +8592,8 @@ MACHINE_CONFIG_START(goldstar_state::super9) aysnd.port_b_read_callback().set_ioport("DSW3"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, OKI_CLOCK, okim6295_device::PIN7_HIGH) /* clock frequency & pin 7 not verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ +} void goldstar_state::cm_palette(palette_device &palette) const @@ -8647,12 +8641,12 @@ void goldstar_state::lucky8_palette(palette_device &palette) const } -MACHINE_CONFIG_START(cb3_state::ncb3) - +void cb3_state::ncb3(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(ncb3_map) - MCFG_DEVICE_IO_MAP(ncb3_readwriteport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &cb3_state::ncb3_map); + m_maincpu->set_addrmap(AS_IO, &cb3_state::ncb3_readwriteport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8667,14 +8661,14 @@ MACHINE_CONFIG_START(cb3_state::ncb3) m_ppi[2]->in_pa_callback().set_ioport("DSW2"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -8686,14 +8680,13 @@ MACHINE_CONFIG_START(cb3_state::ncb3) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW3"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} void cb3_state::cb3c(machine_config &config) { @@ -8726,12 +8719,12 @@ void cb3_state::cm97(machine_config &config) } -MACHINE_CONFIG_START(goldstar_state::wcherry) - +void goldstar_state::wcherry(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(wcherry_map) - MCFG_DEVICE_IO_MAP(wcherry_readwriteport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::wcherry_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::wcherry_readwriteport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8746,14 +8739,14 @@ MACHINE_CONFIG_START(goldstar_state::wcherry) m_ppi[2]->in_pa_callback().set_ioport("DSW2"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cb3e); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -8764,22 +8757,21 @@ MACHINE_CONFIG_START(goldstar_state::wcherry) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW3"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(cmaster_state::cm) +void cmaster_state::cm(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cm_map) - MCFG_DEVICE_IO_MAP(cm_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &cmaster_state::cm_map); + m_maincpu->set_addrmap(AS_IO, &cmaster_state::cm_portmap); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8792,14 +8784,14 @@ MACHINE_CONFIG_START(cmaster_state::cm) m_ppi[1]->in_pc_callback().set_ioport("DSW3"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cmbitmap); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -8813,7 +8805,7 @@ MACHINE_CONFIG_START(cmaster_state::cm) aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW5"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} void cmaster_state::cmasterc(machine_config &config) { @@ -8822,12 +8814,12 @@ void cmaster_state::cmasterc(machine_config &config) } -MACHINE_CONFIG_START(goldstar_state::cmast91) - +void goldstar_state::cmast91(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cm_map) - MCFG_DEVICE_IO_MAP(cmast91_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::cm_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::cmast91_portmap); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8840,14 +8832,14 @@ MACHINE_CONFIG_START(goldstar_state::cmast91) m_ppi[1]->in_pc_callback().set_ioport("DSW3"); /* 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*8, 64*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_cmast91) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_cmast91)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cmast91); PALETTE(config, m_palette, FUNC(goldstar_state::cmast91_palette), 256); @@ -8861,7 +8853,7 @@ MACHINE_CONFIG_START(goldstar_state::cmast91) aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW5"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} @@ -8871,12 +8863,12 @@ WRITE_LINE_MEMBER(wingco_state::masked_irq) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } -MACHINE_CONFIG_START(wingco_state::lucky8) - +void wingco_state::lucky8(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(lucky8_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::lucky8_map); + //->m_maincpu->set_addrmap(AS_IO, &wingco_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8895,14 +8887,14 @@ MACHINE_CONFIG_START(wingco_state::lucky8) m_ppi[2]->out_pc_callback().set(FUNC(wingco_state::system_outputc_w)); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, wingco_state, masked_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(wingco_state::masked_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette)).set_format(palette_device::BGR_233, 256); @@ -8913,8 +8905,7 @@ MACHINE_CONFIG_START(wingco_state::lucky8) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ym2149_device &aysnd(YM2149(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW3"); @@ -8922,14 +8913,14 @@ MACHINE_CONFIG_START(wingco_state::lucky8) aysnd.port_a_write_callback().set(FUNC(goldstar_state::ay8910_outputa_w)); aysnd.port_b_write_callback().set(FUNC(goldstar_state::ay8910_outputb_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(wingco_state::bingowng) +} +void wingco_state::bingowng(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(lucky8_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::lucky8_map); + //m_maincpu->set_addrmap(AS_IO, &wingco_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -8948,14 +8939,14 @@ MACHINE_CONFIG_START(wingco_state::bingowng) m_ppi[2]->out_pc_callback().set(FUNC(wingco_state::system_outputc_w)); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(wingco_state, screen_update_bingowng) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, wingco_state, masked_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(wingco_state::screen_update_bingowng)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(wingco_state::masked_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -8966,8 +8957,7 @@ MACHINE_CONFIG_START(wingco_state::bingowng) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW3"); @@ -8975,7 +8965,7 @@ MACHINE_CONFIG_START(wingco_state::bingowng) aysnd.port_a_write_callback().set(FUNC(goldstar_state::ay8910_outputa_w)); aysnd.port_b_write_callback().set(FUNC(goldstar_state::ay8910_outputb_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} void wingco_state::bingownga(machine_config &config) { @@ -8984,54 +8974,53 @@ void wingco_state::bingownga(machine_config &config) } -MACHINE_CONFIG_START(wingco_state::flam7_w4) +void wingco_state::flam7_w4(machine_config &config) +{ lucky8(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(flaming7_map) + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::flaming7_map); m_ppi[0]->out_pc_callback().set(FUNC(wingco_state::fl7w4_outc802_w)); - MCFG_DEVICE_ADD(m_fl7w4_id, DS2401) -MACHINE_CONFIG_END + DS2401(config, m_fl7w4_id); +} -MACHINE_CONFIG_START(wingco_state::flaming7) +void wingco_state::flaming7(machine_config &config) +{ lucky8(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(flaming7_map) + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::flaming7_map); m_gfxdecode->set_info(gfx_flaming7); // to do serial protection. m_ppi[0]->out_pc_callback().set(FUNC(wingco_state::fl7w4_outc802_w)); - MCFG_DEVICE_ADD(m_fl7w4_id, DS2401) -MACHINE_CONFIG_END + DS2401(config, m_fl7w4_id); +} -MACHINE_CONFIG_START(wingco_state::flam7_tw) +void wingco_state::flam7_tw(machine_config &config) +{ lucky8(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(flaming7_map) + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::flaming7_map); m_gfxdecode->set_info(gfx_flam7_tw); // to do serial protection. m_ppi[0]->out_pc_callback().set(FUNC(wingco_state::fl7w4_outc802_w)); - MCFG_DEVICE_ADD(m_fl7w4_id, DS2401) -MACHINE_CONFIG_END + DS2401(config, m_fl7w4_id); +} -MACHINE_CONFIG_START(wingco_state::mbstar) +void wingco_state::mbstar(machine_config &config) +{ lucky8(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(mbstar_map) + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::mbstar_map); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(wingco_state, screen_update_mbstar) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_screen_update(FUNC(wingco_state::screen_update_mbstar)); +} @@ -9048,12 +9037,12 @@ void wingco_state::magodds_palette(palette_device &palette) const } } -MACHINE_CONFIG_START(wingco_state::magodds) - +void wingco_state::magodds(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(magodds_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::magodds_map); + //m_maincpu->set_addrmap(AS_IO, &wingco_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9072,14 +9061,14 @@ MACHINE_CONFIG_START(wingco_state::magodds) m_ppi[2]->out_pc_callback().set(FUNC(wingco_state::system_outputc_w)); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(wingco_state, screen_update_magical) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, wingco_state, masked_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(wingco_state::screen_update_magical)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(wingco_state::masked_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_magodds); PALETTE(config, m_palette, FUNC(wingco_state::magodds_palette), 256); @@ -9090,8 +9079,7 @@ MACHINE_CONFIG_START(wingco_state::magodds) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.00) // shut up annoying whine + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.00); // shut up annoying whine ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW3"); @@ -9099,15 +9087,15 @@ MACHINE_CONFIG_START(wingco_state::magodds) aysnd.port_a_write_callback().set(FUNC(goldstar_state::ay8910_outputa_w)); aysnd.port_b_write_callback().set(FUNC(goldstar_state::ay8910_outputb_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.80); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(goldstar_state::kkotnoli) +void goldstar_state::kkotnoli(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(kkotnoli_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::kkotnoli_map); + //m_maincpu->set_addrmap(AS_IO, &goldstar_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9122,14 +9110,14 @@ MACHINE_CONFIG_START(goldstar_state::kkotnoli) m_ppi[2]->in_pa_callback().set_ioport("DSW1"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -9139,18 +9127,16 @@ MACHINE_CONFIG_START(goldstar_state::kkotnoli) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) - -MACHINE_CONFIG_END - + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); +} -MACHINE_CONFIG_START(goldstar_state::ladylinr) +void goldstar_state::ladylinr(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(ladylinr_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::ladylinr_map); + //m_maincpu->set_addrmap(AS_IO, &goldstar_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9161,14 +9147,14 @@ MACHINE_CONFIG_START(goldstar_state::ladylinr) m_ppi[1]->in_pa_callback().set_ioport("DSW1"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -9179,19 +9165,18 @@ MACHINE_CONFIG_START(goldstar_state::ladylinr) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); AY8930(config, "aysnd", AY_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.50); // unused? -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(wingco_state::wcat3) +void wingco_state::wcat3(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(wcat3_map) - //MCFG_DEVICE_IO_MAP(goldstar_readport) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &wingco_state::wcat3_map); + //m_maincpu->set_addrmap(AS_IO, &wingco_state::goldstar_readport); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9210,14 +9195,14 @@ MACHINE_CONFIG_START(wingco_state::wcat3) m_ppi[2]->out_pc_callback().set(FUNC(wingco_state::system_outputc_w)); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -9228,8 +9213,7 @@ MACHINE_CONFIG_START(wingco_state::wcat3) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("snsnd", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "snsnd", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW3"); @@ -9237,17 +9221,16 @@ MACHINE_CONFIG_START(wingco_state::wcat3) aysnd.port_a_write_callback().set(FUNC(goldstar_state::ay8910_outputa_w)); aysnd.port_b_write_callback().set(FUNC(goldstar_state::ay8910_outputb_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - -MACHINE_CONFIG_END +} /* diff with cm machine driver: gfxdecode, OKI & portmap */ -MACHINE_CONFIG_START(cmaster_state::amcoe1) - +void cmaster_state::amcoe1(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cm_map) - MCFG_DEVICE_IO_MAP(amcoe1_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &cmaster_state::cm_map); + m_maincpu->set_addrmap(AS_IO, &cmaster_state::amcoe1_portmap); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9260,14 +9243,14 @@ MACHINE_CONFIG_START(cmaster_state::amcoe1) m_ppi[1]->in_pc_callback().set_ioport("DSW3"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cm); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -9282,28 +9265,27 @@ MACHINE_CONFIG_START(cmaster_state::amcoe1) aysnd.port_b_read_callback().set_ioport("DSW5"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); - MCFG_DEVICE_ADD("oki", OKIM6295, OKI_CLOCK, okim6295_device::PIN7_HIGH) /* clock frequency & pin 7 not verified */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6295(config, "oki", OKI_CLOCK, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); /* clock frequency & pin 7 not verified */ +} /* diff with cm machine driver: gfxdecode, OKI, portmap & tilemaps rect size/position */ -MACHINE_CONFIG_START(cmaster_state::amcoe1a) +void cmaster_state::amcoe1a(machine_config &config) +{ amcoe1(config); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(cmaster_state, screen_update_amcoe1a) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_screen_update(FUNC(cmaster_state::screen_update_amcoe1a)); +} /* diff with cm machine driver: gfxdecode, AY8910 volume & portmap */ -MACHINE_CONFIG_START(cmaster_state::amcoe2) - +void cmaster_state::amcoe2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cm_map) - MCFG_DEVICE_IO_MAP(amcoe2_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &cmaster_state::cm_map); + m_maincpu->set_addrmap(AS_IO, &cmaster_state::amcoe2_portmap); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9316,14 +9298,14 @@ MACHINE_CONFIG_START(cmaster_state::amcoe2) m_ppi[1]->in_pc_callback().set_ioport("DSW3"); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_cm); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -9337,17 +9319,17 @@ MACHINE_CONFIG_START(cmaster_state::amcoe2) aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW5"); aysnd.add_route(ALL_OUTPUTS, "mono", 2.00); /* analyzed for clips */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(cmaster_state::nfm) +void cmaster_state::nfm(machine_config &config) +{ amcoe2(config); /* basic machine hardware */ - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(nfm_map) + m_maincpu->set_addrmap(AS_PROGRAM, &cmaster_state::nfm_map); m_gfxdecode->set_info(gfx_nfm); -MACHINE_CONFIG_END +} WRITE_LINE_MEMBER(unkch_state::vblank_irq) @@ -9356,24 +9338,24 @@ WRITE_LINE_MEMBER(unkch_state::vblank_irq) m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } -MACHINE_CONFIG_START(unkch_state::unkch) - +void unkch_state::unkch(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(unkch_map) - MCFG_DEVICE_IO_MAP(unkch_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &unkch_state::unkch_map); + m_maincpu->set_addrmap(AS_IO, &unkch_state::unkch_portmap); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); /* 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*8, 64*8-1, 1*8, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(unkch_state, screen_update_unkch) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, unkch_state, vblank_irq)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 1*8, 31*8-1); + screen.set_screen_update(FUNC(unkch_state::screen_update_unkch)); + screen.set_palette(m_palette); + screen.screen_vblank().set(FUNC(unkch_state::vblank_irq)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_unkch); PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 512); @@ -9389,27 +9371,27 @@ MACHINE_CONFIG_START(unkch_state::unkch) /* payout hardware */ TICKET_DISPENSER(config, m_ticket_dispenser, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); -MACHINE_CONFIG_END +} // hw unknown - should be somewhat similar to cm -MACHINE_CONFIG_START(goldstar_state::pkrmast) - +void goldstar_state::pkrmast(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(cm_map) - MCFG_DEVICE_IO_MAP(pkrmast_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::cm_map); + m_maincpu->set_addrmap(AS_IO, &goldstar_state::pkrmast_portmap); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(HOLDLINE("maincpu", 0)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, 0, HOLD_LINE); GFXDECODE(config, m_gfxdecode, m_palette, gfx_pkrmast); PALETTE(config, m_palette, FUNC(goldstar_state::cm_palette), 256); @@ -9423,29 +9405,29 @@ MACHINE_CONFIG_START(goldstar_state::pkrmast) aysnd.port_a_read_callback().set_ioport("DSW4"); aysnd.port_b_read_callback().set_ioport("DSW5"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(unkch_state::megaline) +void unkch_state::megaline(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, CPU_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(megaline_map) - MCFG_DEVICE_IO_MAP(megaline_portmap) + Z80(config, m_maincpu, CPU_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &unkch_state::megaline_map); + m_maincpu->set_addrmap(AS_IO, &unkch_state::megaline_portmap); - //MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0) - //MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0) - //MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0) + //I8255A(config, m_ppi[0], 0); + //I8255A(config, m_ppi[1], 0); + //I8255A(config, m_ppi[2], 0); /* 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*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); +// screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_megaline); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -9456,14 +9438,11 @@ MACHINE_CONFIG_START(unkch_state::megaline) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn1", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn1", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("sn2", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn2", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("sn3", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn3", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); ay8910_device &aysnd(AY8910(config, "aysnd", AY_CLOCK)); aysnd.port_a_read_callback().set_ioport("DSW3"); @@ -9471,28 +9450,26 @@ MACHINE_CONFIG_START(unkch_state::megaline) aysnd.port_a_write_callback().set(FUNC(goldstar_state::ay8910_outputa_w)); aysnd.port_b_write_callback().set(FUNC(goldstar_state::ay8910_outputb_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); +} -MACHINE_CONFIG_END - - -MACHINE_CONFIG_START(unkch_state::bonusch) +void unkch_state::bonusch(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 12_MHz_XTAL / 2) - MCFG_DEVICE_PROGRAM_MAP(bonusch_map) - MCFG_DEVICE_IO_MAP(bonusch_portmap) + Z80(config, m_maincpu, 12_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &unkch_state::bonusch_map); + m_maincpu->set_addrmap(AS_IO, &unkch_state::bonusch_portmap); - MCFG_DEVICE_ADD("mcu", I80C51, 12_MHz_XTAL) - MCFG_DEVICE_DISABLE() + I80C51(config, "mcu", 12_MHz_XTAL).set_disable(); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(goldstar_state, screen_update_goldstar) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(goldstar_state::screen_update_goldstar)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_megaline); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette), 256); @@ -9502,25 +9479,20 @@ MACHINE_CONFIG_START(unkch_state::bonusch) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn1", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn1", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("sn2", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn2", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("sn3", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489(config, "sn3", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("sn4", SN76489, PSG_CLOCK) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) - -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(unkch_state::feverch) + SN76489(config, "sn4", PSG_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.80); +} - MCFG_DEVICE_ADD("maincpu", Z80, 12'000'000 / 2) // clock not verified - MCFG_DEVICE_PROGRAM_MAP(feverch_map) - MCFG_DEVICE_IO_MAP(feverch_portmap) +void unkch_state::feverch(machine_config &config) +{ + Z80(config, m_maincpu, 12'000'000 / 2); // clock not verified + m_maincpu->set_addrmap(AS_PROGRAM, &unkch_state::feverch_map); + m_maincpu->set_addrmap(AS_IO, &unkch_state::feverch_portmap); I8255A(config, m_ppi[0]); m_ppi[0]->in_pa_callback().set_ioport("IN0"); @@ -9537,13 +9509,13 @@ MACHINE_CONFIG_START(unkch_state::feverch) m_ppi[2]->in_pb_callback().set_ioport("DSW2"); m_ppi[2]->in_pc_callback().set_ioport("DSW3"); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(unkch_state, screen_update_unkch) - MCFG_SCREEN_PALETTE(m_palette) - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(unkch_state::screen_update_unkch)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ncb3); PALETTE(config, m_palette, FUNC(goldstar_state::lucky8_palette)).set_format(palette_device::BGR_233, 256); @@ -9552,15 +9524,12 @@ MACHINE_CONFIG_START(unkch_state::feverch) SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("sn1", SN76489A, 12'000'000 / 12) // actually SN76489AN, clock not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489A(config, "sn1", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified - MCFG_DEVICE_ADD("sn2", SN76489A, 12'000'000 / 12) // actually SN76489AN, clock not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) + SN76489A(config, "sn2", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified - MCFG_DEVICE_ADD("sn3", SN76489A, 12'000'000 / 12) // actually SN76489AN, clock not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END + SN76489A(config, "sn3", 12'000'000 / 12).add_route(ALL_OUTPUTS, "mono", 0.80); // actually SN76489AN, clock not verified +} /*************************************************************************** diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp index 9571ef96780..d445b869756 100644 --- a/src/mame/drivers/h19.cpp +++ b/src/mame/drivers/h19.cpp @@ -520,11 +520,12 @@ static GFXDECODE_START( gfx_h19 ) GFXDECODE_ENTRY( "chargen", 0x0000, h19_charlayout, 0, 1 ) GFXDECODE_END -MACHINE_CONFIG_START(h19_state::h19) +void h19_state::h19(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, H19_CLOCK) // From schematics - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, H19_CLOCK); // From schematics + m_maincpu->set_addrmap(AS_PROGRAM, &h19_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &h19_state::io_map); /* video hardware */ // TODO: make configurable, Heath offered 3 different CRTs - White, Green, Amber. @@ -564,9 +565,8 @@ MACHINE_CONFIG_START(h19_state::h19) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, H19_BEEP_FRQ) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + BEEP(config, m_beep, H19_BEEP_FRQ).add_route(ALL_OUTPUTS, "mono", 1.00); +} /* ROM definition */ ROM_START( h19 ) diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp index 02b075c3687..c4278cadb6f 100644 --- a/src/mame/drivers/halleys.cpp +++ b/src/mame/drivers/halleys.cpp @@ -1930,25 +1930,26 @@ void halleys_state::machine_reset() } -MACHINE_CONFIG_START(halleys_state::halleys) - MCFG_DEVICE_ADD("maincpu", MC6809E, XTAL(19'968'000)/12) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(halleys_map) +void halleys_state::halleys(machine_config &config) +{ + MC6809E(config, m_maincpu, XTAL(19'968'000)/12); /* verified on pcb */ + m_maincpu->set_addrmap(AS_PROGRAM, &halleys_state::halleys_map); + TIMER(config, "scantimer").configure_scanline(FUNC(halleys_state::halleys_scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(6'000'000)/2) /* verified on pcb */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) - MCFG_DEVICE_PERIODIC_INT_DRIVER(halleys_state, irq0_line_hold, (double)6000000/(4*16*16*10*16)) + Z80(config, m_audiocpu, XTAL(6'000'000)/2); /* verified on pcb */ + m_audiocpu->set_addrmap(AS_PROGRAM, &halleys_state::sound_map); + m_audiocpu->set_periodic_int(FUNC(halleys_state::irq0_line_hold), attotime::from_hz((double)6000000/(4*16*16*10*16))); // video hardware - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(59.50) /* verified on PCB */ - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(SCREEN_WIDTH, SCREEN_HEIGHT) - MCFG_SCREEN_VISIBLE_AREA(VIS_MINX, VIS_MAXX, VIS_MINY, VIS_MAXY) - MCFG_SCREEN_UPDATE_DRIVER(halleys_state, screen_update_halleys) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(59.50); /* verified on PCB */ + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(SCREEN_WIDTH, SCREEN_HEIGHT); + screen.set_visarea(VIS_MINX, VIS_MAXX, VIS_MINY, VIS_MAXY); + screen.set_screen_update(FUNC(halleys_state::screen_update_halleys)); + screen.set_palette(m_palette); PALETTE(config, m_palette, FUNC(halleys_state::halleys_palette), PALETTE_SIZE); @@ -1966,19 +1967,19 @@ MACHINE_CONFIG_START(halleys_state::halleys) ym2149_device &ay4(YM2149(config, "ay4", XTAL(6'000'000)/4)); /* verified on pcb */ ay4.port_b_write_callback().set(FUNC(halleys_state::sndnmi_msk_w)); ay4.add_route(ALL_OUTPUTS, "mono", 0.15); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(halleys_state::benberob) +void halleys_state::benberob(machine_config &config) +{ halleys(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_CLOCK(XTAL(19'968'000)/12) /* not verified but pcb identical to halley's comet */ + + m_maincpu->set_clock(XTAL(19'968'000)/12); /* not verified but pcb identical to halley's comet */ subdevice<timer_device>("scantimer")->set_callback(FUNC(halleys_state::benberob_scanline)); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(halleys_state, screen_update_benberob) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_screen_update(FUNC(halleys_state::screen_update_benberob)); +} //************************************************************************** diff --git a/src/mame/drivers/hanaawas.cpp b/src/mame/drivers/hanaawas.cpp index 1b015188f85..30dc91670bb 100644 --- a/src/mame/drivers/hanaawas.cpp +++ b/src/mame/drivers/hanaawas.cpp @@ -215,23 +215,23 @@ void hanaawas_state::machine_reset() m_mux = 0; } -MACHINE_CONFIG_START(hanaawas_state::hanaawas) - +void hanaawas_state::hanaawas(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80,18432000/6) /* 3.072 MHz ??? */ - MCFG_DEVICE_PROGRAM_MAP(hanaawas_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", hanaawas_state, irq0_line_assert) + Z80(config, m_maincpu, 18432000/6); /* 3.072 MHz ??? */ + m_maincpu->set_addrmap(AS_PROGRAM, &hanaawas_state::hanaawas_map); + m_maincpu->set_addrmap(AS_IO, &hanaawas_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(hanaawas_state::irq0_line_assert)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(hanaawas_state, screen_update_hanaawas) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1); + screen.set_screen_update(FUNC(hanaawas_state::screen_update_hanaawas)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_hanaawas); PALETTE(config, "palette", FUNC(hanaawas_state::hanaawas_palette), 32 * 8, 16); @@ -243,7 +243,7 @@ MACHINE_CONFIG_START(hanaawas_state::hanaawas) aysnd.port_a_read_callback().set_ioport("DSW"); aysnd.port_b_write_callback().set(FUNC(hanaawas_state::hanaawas_portB_w)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/hapyfish.cpp b/src/mame/drivers/hapyfish.cpp index 4c2d7b0a5e0..8681e2723af 100644 --- a/src/mame/drivers/hapyfish.cpp +++ b/src/mame/drivers/hapyfish.cpp @@ -241,19 +241,19 @@ void hapyfish_state::init_mini2440() // do nothing } -MACHINE_CONFIG_START(hapyfish_state::hapyfish) - MCFG_DEVICE_ADD("maincpu", ARM920T, 100000000) - MCFG_DEVICE_PROGRAM_MAP(hapyfish_map) - - MCFG_PALETTE_ADD("palette", 32768) +void hapyfish_state::hapyfish(machine_config &config) +{ + ARM920T(config, m_maincpu, 100000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hapyfish_state::hapyfish_map); - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(1024, 768) - MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479) + PALETTE(config, "palette").set_entries(32768); - MCFG_SCREEN_UPDATE_DEVICE("s3c2440", s3c2440_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(1024, 768); + screen.set_visarea(0, 639, 0, 479); + screen.set_screen_update("s3c2440", FUNC(s3c2440_device::screen_update)); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); @@ -283,7 +283,7 @@ MACHINE_CONFIG_START(hapyfish_state::hapyfish) NAND(config, m_nand2, 0); m_nand2->set_nand_type(nand_device::chip::K9LAG08U0M); m_nand2->rnb_wr_callback().set(m_s3c2440, FUNC(s3c2440_device::frnb_w)); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( hapyfish ) INPUT_PORTS_END diff --git a/src/mame/drivers/hazeltin.cpp b/src/mame/drivers/hazeltin.cpp index 75c456776cf..df405e038b0 100644 --- a/src/mame/drivers/hazeltin.cpp +++ b/src/mame/drivers/hazeltin.cpp @@ -695,20 +695,20 @@ GFXDECODE_END MACHINE_CONFIG_START(hazl1500_state::hazl1500) /* basic machine hardware */ - MCFG_DEVICE_ADD(CPU_TAG, I8080, XTAL(18'000'000)/9) // 18MHz crystal on schematics, using an i8224 clock gen/driver IC - MCFG_DEVICE_PROGRAM_MAP(hazl1500_mem) - MCFG_DEVICE_IO_MAP(hazl1500_io) + I8080(config, m_maincpu, XTAL(18'000'000)/9); // 18MHz crystal on schematics, using an i8224 clock gen/driver IC + m_maincpu->set_addrmap(AS_PROGRAM, &hazl1500_state::hazl1500_mem); + m_maincpu->set_addrmap(AS_IO, &hazl1500_state::hazl1500_io); config.m_perfect_cpu_quantum = subtag(CPU_TAG); INPUT_MERGER_ANY_HIGH(config, "mainint").output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); /* video hardware */ - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_UPDATE_DRIVER(hazl1500_state, screen_update_hazl1500) - //MCFG_SCREEN_RAW_PARAMS(XTAL(33'264'000) / 2, + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_screen_update(FUNC(hazl1500_state::screen_update_hazl1500)); + //m_screen->set_raw(XTAL(33'264'000) / 2, // SCREEN_HTOTAL, SCREEN_HSTART, SCREEN_HSTART + SCREEN_HDISP, // SCREEN_VTOTAL, SCREEN_VSTART, SCREEN_VSTART + SCREEN_VDISP); // TODO: Figure out exact visibility - MCFG_SCREEN_RAW_PARAMS(XTAL(33'264'000) / 2, + m_screen->set_raw(XTAL(33'264'000) / 2, SCREEN_HTOTAL, 0, SCREEN_HTOTAL, SCREEN_VTOTAL, 0, SCREEN_VTOTAL); diff --git a/src/mame/drivers/headonb.cpp b/src/mame/drivers/headonb.cpp index c3914f3003b..f4577a1056e 100644 --- a/src/mame/drivers/headonb.cpp +++ b/src/mame/drivers/headonb.cpp @@ -166,29 +166,29 @@ static GFXDECODE_START( gfx_headonb ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) GFXDECODE_END -MACHINE_CONFIG_START(headonb_state::headonb) - +void headonb_state::headonb(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080A, XTAL(20'000'000) / 10) // divider guessed - MCFG_DEVICE_PROGRAM_MAP(headonb_map) - MCFG_DEVICE_IO_MAP(headonb_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", headonb_state, irq0_line_hold) // where is irqack? + I8080A(config, m_maincpu, XTAL(20'000'000) / 10); // divider guessed + m_maincpu->set_addrmap(AS_PROGRAM, &headonb_state::headonb_map); + m_maincpu->set_addrmap(AS_IO, &headonb_state::headonb_io_map); + m_maincpu->set_vblank_int("screen", FUNC(headonb_state::irq0_line_hold)); // where is irqack? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1) - MCFG_SCREEN_UPDATE_DRIVER(headonb_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1); + screen.set_screen_update(FUNC(headonb_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_headonb); PALETTE(config, "palette", palette_device::MONOCHROME); /* sound hardware */ // TODO -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/hec2hrp.cpp b/src/mame/drivers/hec2hrp.cpp index 9a42aec9df5..b5e2c9f9349 100644 --- a/src/mame/drivers/hec2hrp.cpp +++ b/src/mame/drivers/hec2hrp.cpp @@ -394,23 +394,25 @@ static void minidisc_floppies(device_slot_interface &device) } -MACHINE_CONFIG_START(hec2hrp_state::hec2hr) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrp_mem) - MCFG_DEVICE_IO_MAP(hec2hrp_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) /* put on the Z80 irq in Hz*/ +void hec2hrp_state::hec2hr(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrp_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2hrp_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ + MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrp) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrp) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -420,25 +422,27 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2hr) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} + +void hec2hrp_state::hec2hrp(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrp_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2hrp_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ -MACHINE_CONFIG_START(hec2hrp_state::hec2hrp) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrp_mem) - MCFG_DEVICE_IO_MAP(hec2hrp_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) /* put on the Z80 irq in Hz*/ MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrp) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrp) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -448,39 +452,43 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2hrp) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} static void hector_floppies(device_slot_interface &device) { device.option_add("525hd", FLOPPY_525_HD); } -MACHINE_CONFIG_START(hec2hrp_state::hec2mx40) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrx_mem) - MCFG_DEVICE_IO_MAP(hec2mx40_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) // put on the Z80 irq in Hz +void hec2hrp_state::hec2mx40(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2mx40_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ + + Z80(config, m_disc2cpu, 4_MHz_XTAL); + m_disc2cpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hecdisc2_mem); + m_disc2cpu->set_addrmap(AS_IO, &hec2hrp_state::hecdisc2_io); - 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, 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)); + FLOPPY_CONNECTOR(config, m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); FLOPPY_CONNECTOR(config, m_upd_connector[1], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); + MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrx) - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -490,35 +498,39 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mx40) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} + +void hec2hrp_state::hec2hrx(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2hrx_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ -MACHINE_CONFIG_START(hec2hrp_state::hec2hrx) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrx_mem) - MCFG_DEVICE_IO_MAP(hec2hrx_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) // put on the Z80 irq in Hz MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrx) - MCFG_DEVICE_ADD("disc2cpu", Z80, 4_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hecdisc2_mem) - MCFG_DEVICE_IO_MAP(hecdisc2_io) + Z80(config, m_disc2cpu, 4_MHz_XTAL); + m_disc2cpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hecdisc2_mem); + m_disc2cpu->set_addrmap(AS_IO, &hec2hrp_state::hecdisc2_io); + 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)); + FLOPPY_CONNECTOR(config, m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); FLOPPY_CONNECTOR(config, m_upd_connector[1], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -528,13 +540,15 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2hrx) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} + +void hec2hrp_state::hec2mdhrx(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2mdhrx_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ -MACHINE_CONFIG_START(hec2hrp_state::hec2mdhrx) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrx_mem) - MCFG_DEVICE_IO_MAP(hec2mdhrx_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) // put on the Z80 irq in Hz MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2mdhrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2mdhrx) @@ -542,16 +556,15 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mdhrx) FD1793(config, m_minidisc_fdc, 1_MHz_XTAL); FLOPPY_CONNECTOR(config, "wd179x:0", minidisc_floppies, "dd", hec2hrp_state::minidisc_formats); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -561,35 +574,39 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mdhrx) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} + +void hec2hrp_state::hec2mx80(machine_config &config) +{ + Z80(config, m_maincpu, 5_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hec2hrx_mem); + m_maincpu->set_addrmap(AS_IO, &hec2hrp_state::hec2mx80_io); + m_maincpu->set_periodic_int(FUNC(hec2hrp_state::irq0_line_hold), attotime::from_hz(50)); /* put on the Z80 irq in Hz*/ -MACHINE_CONFIG_START(hec2hrp_state::hec2mx80) - MCFG_DEVICE_ADD("maincpu", Z80, 5_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hec2hrx_mem) - MCFG_DEVICE_IO_MAP(hec2mx80_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hec2hrp_state, irq0_line_hold, 50) // put on the Z80 irq in Hz MCFG_MACHINE_RESET_OVERRIDE(hec2hrp_state,hec2hrx) MCFG_MACHINE_START_OVERRIDE(hec2hrp_state,hec2hrx) - MCFG_DEVICE_ADD("disc2cpu", Z80, 4_MHz_XTAL) - MCFG_DEVICE_PROGRAM_MAP(hecdisc2_mem) - MCFG_DEVICE_IO_MAP(hecdisc2_io) + Z80(config, m_disc2cpu, 4_MHz_XTAL); + m_disc2cpu->set_addrmap(AS_PROGRAM, &hec2hrp_state::hecdisc2_mem); + m_disc2cpu->set_addrmap(AS_IO, &hec2hrp_state::hecdisc2_io); + 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)); + FLOPPY_CONNECTOR(config, m_upd_connector[0], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); FLOPPY_CONNECTOR(config, m_upd_connector[1], hector_floppies, "525hd", floppy_image_device::default_floppy_formats); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(400)) /* 2500 not accurate */ - MCFG_SCREEN_SIZE(512, 230) - MCFG_SCREEN_VISIBLE_AREA(0, 243, 0, 227) - MCFG_SCREEN_UPDATE_DRIVER(hec2hrp_state, screen_update_hec2hrp) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(400)); /* 2500 not accurate */ + screen.set_size(512, 230); + screen.set_visarea(0, 243, 0, 227); + screen.set_screen_update(FUNC(hec2hrp_state::screen_update_hec2hrp)); + screen.set_palette(m_palette); - MCFG_PALETTE_ADD("palette", 16) + PALETTE(config, m_palette).set_entries(16); MCFG_VIDEO_START_OVERRIDE(hec2hrp_state,hec2hrp) hector_audio(config); @@ -599,7 +616,7 @@ MACHINE_CONFIG_START(hec2hrp_state::hec2mx80) m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED); PRINTER(config, m_printer, 0); -MACHINE_CONFIG_END +} ROM_START( hec2hr ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) diff --git a/src/mame/drivers/hh_amis2k.cpp b/src/mame/drivers/hh_amis2k.cpp index f0d4b354c68..06ab5ec3aee 100644 --- a/src/mame/drivers/hh_amis2k.cpp +++ b/src/mame/drivers/hh_amis2k.cpp @@ -2,352 +2,396 @@ // copyright-holders:hap /*************************************************************************** - Parker Brothers Wildfire, by Bob and Holly Doyle (prototype), and Garry Kitchen - * AMI S2150, labeled C10641 - - This is an electronic handheld pinball game. It has dozens of small leds - to create the illusion of a moving ball, and even the flippers are leds. - A drawing of a pinball table is added as overlay. - - NOTE!: MAME external artwork is required - + AMI S2000 series handhelds or other simple devices. TODO: - - driver needs a cleanup when another AMI S2000 handheld gets dumped/added - - - sound emulation could still be improved - - when the game strobes a led faster, it should appear brighter, for example when - the ball hits one of the bumpers - - 7seg decoder is guessed - - MCU clock is unknown + - were any other handhelds with this MCU released? + - wildfire sound can be improved, volume decay should be more steep at the start, + and the pitch sounds wrong too (latter is an MCU emulation problem) + - leds are sometimes strobed faster/longer to appear at a different brightness, + eg. wildfire bumpers ***************************************************************************/ #include "emu.h" + #include "cpu/amis2000/amis2000.h" #include "machine/timer.h" #include "sound/spkrdev.h" #include "speaker.h" -#include "wildfire.lh" // this is a test layout, use external artwork +// internal artwork +#include "wildfire.lh" -// master clock is a single stage RC oscillator: R=?K, C=?pf, -// S2000 default frequency is 850kHz -#define MASTER_CLOCK (850000) +//#include "hh_amis2k_test.lh" // common test-layout - use external artwork -class wildfire_state : public driver_device +class hh_amis2k_state : public driver_device { public: - wildfire_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_amis2k_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_inp_matrix(*this, "IN.%u", 0), + m_out_x(*this, "%u.%u", 0U, 0U), + m_out_a(*this, "%u.a", 0U), + m_out_digit(*this, "digit%u", 0U), m_speaker(*this, "speaker"), - m_a12_decay_timer(*this, "a12_decay"), - m_digits(*this, "digit%u", 0U), - m_lamps(*this, "lamp%u", 0U) + m_display_wait(33), + m_display_maxy(1), + m_display_maxx(0) { } - void wildfire(machine_config &config); + // devices + required_device<amis2000_base_device> m_maincpu; + optional_ioport_array<4> m_inp_matrix; // max 4 + output_finder<0x20, 0x20> m_out_x; + output_finder<0x20> m_out_a; + output_finder<0x20> m_out_digit; + optional_device<speaker_sound_device> m_speaker; -private: - virtual void machine_start() override; + // misc common + u16 m_a; // MCU address bus + u8 m_d; // MCU data bus + int m_f; // MCU F_out pin + u16 m_inp_mux; // multiplexed inputs mask - DECLARE_WRITE8_MEMBER(write_d); - DECLARE_WRITE16_MEMBER(write_a); - DECLARE_WRITE_LINE_MEMBER(write_f); + u8 read_inputs(int columns); - TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); + // display common + int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) + int m_display_maxy; // display matrix number of rows + int m_display_maxx; // display matrix number of columns (max 31 for now) + + u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on) + u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments + u8 m_display_decay[0x20][0x20]; // (internal use) - bool index_is_7segled(int index); + TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); void display_update(); + void set_display_size(int maxx, int maxy); + void set_display_segmask(u32 digits, u32 mask); + void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; +}; - TIMER_DEVICE_CALLBACK_MEMBER(reset_q2); - void write_a12(int state); - void sound_update(); - required_device<amis2152_cpu_device> m_maincpu; - required_device<speaker_sound_device> m_speaker; - required_device<timer_device> m_a12_decay_timer; +// machine start/reset - output_finder<3> m_digits; - output_finder<16 * 10> m_lamps; // only ones ending in 0-7 are used, 8-9 are unused +void hh_amis2k_state::machine_start() +{ + // resolve handlers + m_out_x.resolve(); + m_out_a.resolve(); + m_out_digit.resolve(); - u8 m_d; - u16 m_a; - u8 m_q2; - u8 m_q3; + // zerofill + memset(m_display_state, 0, sizeof(m_display_state)); + memset(m_display_decay, 0, sizeof(m_display_decay)); + memset(m_display_segmask, 0, sizeof(m_display_segmask)); - u16 m_display_state[0x10]; - u8 m_display_decay[0x100]; -}; + m_a = 0; + m_d = 0; + m_f = 0; + m_inp_mux = 0; + + // register for savestates + save_item(NAME(m_display_maxy)); + save_item(NAME(m_display_maxx)); + save_item(NAME(m_display_wait)); + + save_item(NAME(m_display_state)); + save_item(NAME(m_display_decay)); + save_item(NAME(m_display_segmask)); + + save_item(NAME(m_a)); + save_item(NAME(m_d)); + save_item(NAME(m_f)); + save_item(NAME(m_inp_mux)); +} + +void hh_amis2k_state::machine_reset() +{ +} /*************************************************************************** - LED Display + Helper Functions ***************************************************************************/ -// The device strobes the outputs very fast, it is unnoticeable to the user. +// The device may strobe the outputs very fast, it is unnoticeable to the user. // To prevent flickering here, we need to simulate a decay. -// decay time, in steps of 1ms -#define DISPLAY_DECAY_TIME 40 - -inline bool wildfire_state::index_is_7segled(int index) -{ - // first 3 A are 7segleds - return (index < 3); -} - -// lamp translation table: Lzz from patent US4334679 FIG.4 = MAME lampxxy, -// where xx is led column and y is led row, eg. lamp103 is output A10 D3 -// (note: 2 mistakes in the patent: the L19 between L12 and L14 should be L13, and L84 should of course be L48) -/* - L0 = - L10 = lamp60 L20 = lamp41 L30 = lamp53 L40 = lamp57 L50 = lamp110 - L1 = lamp107 L11 = lamp50 L21 = lamp42 L31 = lamp43 L41 = lamp66 L51 = lamp111 - L2 = lamp106 L12 = lamp61 L22 = lamp52 L32 = lamp54 L42 = lamp76 L52 = lamp112 - L3 = lamp105 L13 = lamp71 L23 = lamp63 L33 = lamp55 L43 = lamp86 L53 = lamp113 - L4 = lamp104 L14 = lamp81 L24 = lamp73 L34 = lamp117 L44 = lamp96 L60 = lamp30 - L5 = lamp103 L15 = lamp92 L25 = lamp115 L35 = lamp75 L45 = lamp67 L61 = lamp30(!) - L6 = lamp102 L16 = lamp82 L26 = lamp93 L36 = lamp95 L46 = lamp77 L62 = lamp31 - L7 = lamp101 L17 = lamp72 L27 = lamp94 L37 = lamp56 L47 = lamp87 L63 = lamp31(!) - L8 = lamp80 L18 = lamp114 L28 = lamp84 L38 = lamp65 L48 = lamp97 L70 = lamp33 - L9 = lamp70 L19 = lamp51 L29 = lamp116 L39 = lamp85 L49 = - -*/ - -void wildfire_state::display_update() +void hh_amis2k_state::display_update() { - u16 active_state[0x10]; - - for (int i = 0; i < 0x10; i++) + for (int y = 0; y < m_display_maxy; y++) { - // update current state - m_display_state[i] = (m_a >> i & 1) ? m_d : 0; - - active_state[i] = 0; + u32 active_state = 0; - for (int j = 0; j < 0x10; j++) + for (int x = 0; x <= m_display_maxx; x++) { - int di = j << 4 | i; - // turn on powered segments - if (m_display_state[i] >> j & 1) - m_display_decay[di] = DISPLAY_DECAY_TIME; + if (m_display_state[y] >> x & 1) + m_display_decay[y][x] = m_display_wait; // determine active state - int ds = (m_display_decay[di] != 0) ? 1 : 0; - active_state[i] |= (ds << j); + u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0; + active_state |= (ds << x); + + // output to y.x, or y.a when always-on + if (x != m_display_maxx) + m_out_x[y][x] = ds; + else + m_out_a[y] = ds; } - } - // on difference, send to output - for (int i = 0; i < 0x10; i++) - { - if (index_is_7segled(i)) - m_digits[i] = bitswap<7>(active_state[i],0,1,2,3,4,5,6); - - for (int j = 0; j < 8; j++) - m_lamps[(i * 10) + j] = BIT(active_state[i], j); + // output to digity + if (m_display_segmask[y] != 0) + m_out_digit[y] = active_state & m_display_segmask[y]; } } -TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::display_decay_tick) +TIMER_DEVICE_CALLBACK_MEMBER(hh_amis2k_state::display_decay_tick) { // slowly turn off unpowered segments - for (int i = 0; i < 0x100; i++) - if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i]) - m_display_decay[i]--; + for (int y = 0; y < m_display_maxy; y++) + for (int x = 0; x <= m_display_maxx; x++) + if (m_display_decay[y][x] != 0) + m_display_decay[y][x]--; display_update(); } - - -/*************************************************************************** - - Sound - -***************************************************************************/ - -// Sound output is via a speaker between transistors Q2(from A12) and Q3(from F_out) -// A12 to Q2 has a little electronic circuit going, causing a slight delay. -// (see patent US4334679 FIG.5, the 2 resistors are 10K and the cap is a 4.7uF electrolytic) - -// decay time, in steps of 1ms -#define A12_DECAY_TIME 5 /* a complete guess */ - -void wildfire_state::sound_update() +void hh_amis2k_state::set_display_size(int maxx, int maxy) { - m_speaker->level_w(m_q2 & m_q3); + m_display_maxx = maxx; + m_display_maxy = maxy; } -WRITE_LINE_MEMBER(wildfire_state::write_f) +void hh_amis2k_state::set_display_segmask(u32 digits, u32 mask) { - // F_out pin: speaker out - m_q3 = (state) ? 1 : 0; - sound_update(); + // set a segment mask per selected digit, but leave unselected ones alone + for (int i = 0; i < 0x20; i++) + { + if (digits & 1) + m_display_segmask[i] = mask; + digits >>= 1; + } } -TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::reset_q2) +void hh_amis2k_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) { - m_q2 = 0; - sound_update(); + set_display_size(maxx, maxy); + + // update current state + u32 mask = (1 << maxx) - 1; + for (int y = 0; y < maxy; y++) + m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; + + if (update) + display_update(); } -void wildfire_state::write_a12(int state) + +// generic input handlers + +u8 hh_amis2k_state::read_inputs(int columns) { - if (state) - { - m_a12_decay_timer->adjust(attotime::never); - m_q2 = state; - sound_update(); - } - else if (m_a >> 12 & 1) - { - // falling edge - m_a12_decay_timer->adjust(attotime::from_msec(A12_DECAY_TIME)); - } + u8 ret = 0; + + // read selected input rows + for (int i = 0; i < columns; i++) + if (m_inp_mux >> i & 1) + ret |= m_inp_matrix[i]->read(); + + return ret; } /*************************************************************************** - I/O + Minidrivers (subclass, I/O, Inputs, Machine Config, ROM Defs) ***************************************************************************/ -WRITE8_MEMBER(wildfire_state::write_d) -{ - // D0-D7: leds out - m_d = data; - display_update(); -} - -WRITE16_MEMBER(wildfire_state::write_a) -{ - data ^= 0x1fff; // active-low +namespace { - // A12: enable speaker - write_a12(data >> 12 & 1); +/*************************************************************************** - // A0-A2: select 7segleds - // A3-A11: select other leds - m_a = data; - display_update(); -} + Parker Brothers Wildfire, by Bob and Holly Doyle (prototype), and Garry Kitchen + * AMI S2150, labeled C10641 + * RC circuit for speaker volume decay (see patent US4334679 FIG.5, + the 2 resistors at A12 are 10K and the cap is 4.7uF) + This is an electronic handheld pinball game. It has dozens of small leds + to create the illusion of a moving ball, and even the flippers are leds. + A drawing of a pinball table is added as overlay. + led translation table: led Lzz from patent US4334679 FIG.4* = MAME y.x: + *note: 2 mistakes in it: L19 between L12 and L14 should be L13, and L84 should of course be L48 -/*************************************************************************** + 0 = - 10 = 6.6 20 = 4.5 30 = 5.3 40 = 5.7 50 = 11.6 + 1 = 10.7 11 = 5.6 21 = 4.4 31 = 4.3 41 = 6.0 51 = 11.5 + 2 = 10.0 12 = 6.5 22 = 5.4 32 = 5.2 42 = 7.0 52 = 11.4 + 3 = 10.1 13 = 7.5 23 = 6.3 33 = 5.1 43 = 8.0 53 = 11.3 + 4 = 10.2 14 = 8.5 24 = 7.3 34 = 11.7 44 = 9.0 60 = 3.6 + 5 = 10.3 15 = 9.4 25 = 11.1 35 = 7.1 45 = 6.7 61 = 3.6(!) + 6 = 10.4 16 = 8.4 26 = 9.3 36 = 9.1 46 = 7.7 62 = 3.5 + 7 = 10.5 17 = 7.4 27 = 9.2 37 = 5.0 47 = 8.7 63 = 3.5(!) + 8 = 8.6 18 = 11.2 28 = 8.2 38 = 6.1 48 = 9.7 70 = 3.3 + 9 = 7.6 19 = 5.5 29 = 11.0 39 = 8.1 49 = - - Inputs + NOTE!: MAME external artwork is required ***************************************************************************/ -static INPUT_PORTS_START( wildfire ) - PORT_START("IN1") // I - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Shooter Button") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Flipper") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Flipper") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END +class wildfire_state : public hh_amis2k_state +{ +public: + wildfire_state(const machine_config &mconfig, device_type type, const char *tag) : + hh_amis2k_state(mconfig, type, tag) + { } + + void prepare_display(); + DECLARE_WRITE8_MEMBER(write_d); + DECLARE_WRITE16_MEMBER(write_a); + DECLARE_WRITE_LINE_MEMBER(write_f); + void speaker_update(); + TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim); + double m_speaker_volume; + void wildfire(machine_config &config); +protected: + virtual void machine_start() override; +}; -/*************************************************************************** +void wildfire_state::machine_start() +{ + hh_amis2k_state::machine_start(); - Machine Config + // zerofill/init + m_speaker_volume = 0; + save_item(NAME(m_speaker_volume)); +} -***************************************************************************/ +// handlers -void wildfire_state::machine_start() +void wildfire_state::speaker_update() { - m_digits.resolve(); - m_lamps.resolve(); + if (~m_a & 0x1000) + m_speaker_volume = 1.0; - // zerofill - memset(m_display_state, 0, sizeof(m_display_state)); - memset(m_display_decay, 0, sizeof(m_display_decay)); + m_speaker->level_w(m_f * 0x7fff * m_speaker_volume); +} - m_d = 0; - m_a = 0; - m_q2 = 0; - m_q3 = 0; +TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::speaker_decay_sim) +{ + // volume decays when speaker is off (divisor and timer period determine duration) + m_speaker_volume /= 1.001; + speaker_update(); +} - // register for savestates - save_item(NAME(m_display_state)); - save_item(NAME(m_display_decay)); +void wildfire_state::prepare_display() +{ + // A0-A2 are 7segs + set_display_segmask(7, 0x7f); + display_matrix(8, 12, m_d, ~m_a); +} - save_item(NAME(m_d)); - save_item(NAME(m_a)); - save_item(NAME(m_q2)); - save_item(NAME(m_q3)); +WRITE8_MEMBER(wildfire_state::write_d) +{ + // D0-D7: led/7seg data + m_d = bitswap<8>(data,7,0,1,2,3,4,5,6); + prepare_display(); } -// LED segments A-G -enum +WRITE16_MEMBER(wildfire_state::write_a) { - lA = 0x40, - lB = 0x20, - lC = 0x10, - lD = 0x08, - lE = 0x04, - lF = 0x02, - lG = 0x01 -}; + // A0-A11: digit/led select + m_a = data; + prepare_display(); + // A12: speaker on + speaker_update(); +} + +WRITE_LINE_MEMBER(wildfire_state::write_f) +{ + // F: speaker out + m_f = state; + speaker_update(); +} + +// config + +static INPUT_PORTS_START( wildfire ) + PORT_START("IN.0") // I + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Shooter Button") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Flipper") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Flipper") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + +// 7seg decoder table differs from default, this one is made by hand static const u8 wildfire_7seg_table[0x10] = { - 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, // 0-9 unaltered - 0x77, // A -> unused? - lA+lB+lE+lF+lG, // b -> P - 0x4e, // C -> unused? - lD+lE+lF, // d -> L - 0x4f, // E -> unused? - lG // F -> - + 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, // 0, 1, 2, 3, 4, 5, 6, 7 + 0x7f, 0x6f, 0x77, 0x73, 0x39, 0x38, 0x79, 0x40 // 8, 9, ?, P, ?, L, ?, - }; +static s16 wildfire_speaker_levels[0x8000]; void wildfire_state::wildfire(machine_config &config) { /* basic machine hardware */ - AMI_S2152(config, m_maincpu, MASTER_CLOCK); + AMI_S2152(config, m_maincpu, 850000); // approximation - RC osc. R=?, C=? m_maincpu->set_7seg_table(wildfire_7seg_table); - m_maincpu->read_i().set_ioport("IN1"); + m_maincpu->read_i().set_ioport("IN.0"); m_maincpu->write_d().set(FUNC(wildfire_state::write_d)); m_maincpu->write_a().set(FUNC(wildfire_state::write_a)); m_maincpu->write_f().set(FUNC(wildfire_state::write_f)); - TIMER(config, "display_decay").configure_periodic(FUNC(wildfire_state::display_decay_tick), attotime::from_msec(1)); - TIMER(config, "a12_decay").configure_generic(FUNC(wildfire_state::reset_q2)); - + TIMER(config, "display_decay").configure_periodic(FUNC(hh_amis2k_state::display_decay_tick), attotime::from_msec(1)); config.set_default_layout(layout_wildfire); - /* no video! */ - /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); -} - + TIMER(config, "speaker_decay").configure_periodic(FUNC(wildfire_state::speaker_decay_sim), attotime::from_usec(100)); -/*************************************************************************** - - Game driver(s) + // set volume levels (set_output_gain is too slow for sub-frame intervals) + for (int i = 0; i < 0x8000; i++) + wildfire_speaker_levels[i] = i; + m_speaker->set_levels(0x8000, wildfire_speaker_levels); +} -***************************************************************************/ +// roms ROM_START( wildfire ) ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD( "us4341385", 0x0000, 0x0400, CRC(84ac0f1f) SHA1(1e00ddd402acfc2cc267c34eed4b89d863e2144f) ) // from patent US4334679, data should be correct (it included checksums). 1st half was dumped/verfied too. + // Typed in from patent US4334679, data should be correct(it included checksums). 1st half was also dumped/verfied with release version. + ROM_LOAD( "us4341385", 0x0000, 0x0400, CRC(84ac0f1f) SHA1(1e00ddd402acfc2cc267c34eed4b89d863e2144f) ) ROM_CONTINUE( 0x0600, 0x0200 ) ROM_END + +} // anonymous namespace + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + // YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS CONS( 1979, wildfire, 0, 0, wildfire, wildfire, wildfire_state, empty_init, "Parker Brothers", "Wildfire (patent)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) // note: pretty sure that it matches the commercial release diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp index 6df6b38d163..12fc8699438 100644 --- a/src/mame/drivers/hh_cop400.cpp +++ b/src/mame/drivers/hh_cop400.cpp @@ -77,6 +77,7 @@ public: u16 m_inp_mux; // multiplexed inputs mask u16 read_inputs(int columns, u16 colmask = ~0); + virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button); // display common int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) @@ -238,6 +239,12 @@ u16 hh_cop400_state::read_inputs(int columns, u16 colmask) return ret; } +INPUT_CHANGED_MEMBER(hh_cop400_state::reset_button) +{ + // when an input is directly wired to MCU reset pin + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); +} + /*************************************************************************** @@ -1061,8 +1068,6 @@ public: DECLARE_WRITE8_MEMBER(write_d); DECLARE_WRITE8_MEMBER(write_l); DECLARE_WRITE8_MEMBER(write_g); - - DECLARE_INPUT_CHANGED_MEMBER(reset_button); void funrlgl(machine_config &config); }; @@ -1101,15 +1106,9 @@ static INPUT_PORTS_START( funrlgl ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("RESET") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, funrlgl_state, reset_button, nullptr) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_cop400_state, reset_button, nullptr) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(funrlgl_state::reset_button) -{ - // middle button is directly tied to MCU reset pin - m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); -} - void funrlgl_state::funrlgl(machine_config &config) { /* basic machine hardware */ diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp index 46bad8ae23c..0d5447469e2 100644 --- a/src/mame/drivers/hh_hmcs40.cpp +++ b/src/mame/drivers/hh_hmcs40.cpp @@ -70,7 +70,6 @@ TODO: - - cdkong discrete sound (simple volume decay, simulated for now) - cgalaxn discrete sound (alien attacking sound effect) - gckong random lockups (tap the jump button repeatedly): mcu stack overflow, works ok if stack levels is increased, 38800 B rev. has more stack levels? @@ -2149,7 +2148,7 @@ public: DECLARE_WRITE8_MEMBER(plate_w); DECLARE_WRITE16_MEMBER(grid_w); - void speaker_decay_reset(); + void speaker_update(); TIMER_DEVICE_CALLBACK_MEMBER(speaker_decay_sim); double m_speaker_volume; void cdkong(machine_config &config); @@ -2169,19 +2168,20 @@ void cdkong_state::machine_start() // handlers -void cdkong_state::speaker_decay_reset() +void cdkong_state::speaker_update() { if (m_r[1] & 8) m_speaker_volume = 1.0; - m_speaker->set_output_gain(0, m_speaker_volume); + int level = (m_d & 8) ? 0x7fff : 0; + m_speaker->level_w(level * m_speaker_volume); } TIMER_DEVICE_CALLBACK_MEMBER(cdkong_state::speaker_decay_sim) { // volume decays when speaker is off (divisor and timer period determine duration) - speaker_decay_reset(); - m_speaker_volume /= 1.015; + speaker_update(); + m_speaker_volume /= 1.02; } void cdkong_state::prepare_display() @@ -2194,7 +2194,7 @@ WRITE8_MEMBER(cdkong_state::plate_w) { // R13: speaker on m_r[offset] = data; - speaker_decay_reset(); + speaker_update(); // R0x-R6x: vfd plate int shift = offset * 4; @@ -2205,7 +2205,8 @@ WRITE8_MEMBER(cdkong_state::plate_w) WRITE16_MEMBER(cdkong_state::grid_w) { // D3: speaker out - m_speaker->level_w(data >> 3 & 1); + m_d = data; + speaker_update(); // D4-D14: vfd grid m_grid = data >> 4 & 0x7ff; @@ -2226,6 +2227,8 @@ static INPUT_PORTS_START( cdkong ) PORT_BIT( 0x7ff8, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END +static s16 cdkong_speaker_levels[0x8000]; + void cdkong_state::cdkong(machine_config &config) { /* basic machine hardware */ @@ -2251,7 +2254,13 @@ void cdkong_state::cdkong(machine_config &config) /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25); + TIMER(config, "speaker_decay").configure_periodic(FUNC(cdkong_state::speaker_decay_sim), attotime::from_msec(1)); + + // set volume levels (set_output_gain is too slow for sub-frame intervals) + for (int i = 0; i < 0x8000; i++) + cdkong_speaker_levels[i] = i; + m_speaker->set_levels(0x8000, cdkong_speaker_levels); } // roms @@ -4419,7 +4428,7 @@ CONS( 1984, machiman, 0, 0, machiman, machiman, machiman_state, empty_in CONS( 1984, pairmtch, 0, 0, pairmtch, pairmtch, pairmtch_state, empty_init, "Bandai", "Pair Match", MACHINE_SUPPORTS_SAVE ) CONS( 1981, alnattck, 0, 0, alnattck, alnattck, alnattck_state, empty_init, "Coleco", "Alien Attack", MACHINE_SUPPORTS_SAVE ) -CONS( 1982, cdkong, 0, 0, cdkong, cdkong, cdkong_state, empty_init, "Coleco", "Donkey Kong (Coleco)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) +CONS( 1982, cdkong, 0, 0, cdkong, cdkong, cdkong_state, empty_init, "Coleco", "Donkey Kong (Coleco)", MACHINE_SUPPORTS_SAVE ) CONS( 1982, cgalaxn, 0, 0, cgalaxn, cgalaxn, cgalaxn_state, empty_init, "Coleco", "Galaxian (Coleco)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) CONS( 1981, cpacman, 0, 0, cpacman, cpacman, cpacman_state, empty_init, "Coleco", "Pac-Man (Coleco, Rev. 29)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, cpacman_state, empty_init, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/hh_melps4.cpp b/src/mame/drivers/hh_melps4.cpp index 8a52679a0b9..13cd63f5b28 100644 --- a/src/mame/drivers/hh_melps4.cpp +++ b/src/mame/drivers/hh_melps4.cpp @@ -47,7 +47,7 @@ public: u16 m_inp_mux; // multiplexed inputs mask u8 read_inputs(int columns); - DECLARE_INPUT_CHANGED_MEMBER(reset_button); + virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button); // display common int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) @@ -292,7 +292,7 @@ static INPUT_PORTS_START( cfrogger ) PORT_CONFSETTING( 0x00, "1" ) PORT_CONFSETTING( 0x08, "2" ) - PORT_START("IN.3") // fake + PORT_START("RESET") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_melps4_state, reset_button, nullptr) INPUT_PORTS_END @@ -416,7 +416,7 @@ static INPUT_PORTS_START( gjungler ) PORT_CONFSETTING( 0x00, "A" ) PORT_CONFSETTING( 0x08, "B" ) - PORT_START("IN.3") // fake + PORT_START("RESET") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_CHANGED_MEMBER(DEVICE_SELF, hh_melps4_state, reset_button, nullptr) INPUT_PORTS_END diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp index 89cf8c46628..0301dea356b 100644 --- a/src/mame/drivers/hh_pic16.cpp +++ b/src/mame/drivers/hh_pic16.cpp @@ -40,7 +40,6 @@ - tweak MCU frequency for games when video/audio recording surfaces(YouTube etc.) - some of the games rely on the fact that faster/longer strobed leds appear brighter, eg. hccbaskb(player led), .. - - leboom discrete sound for volume decay (simulated for now) - ttfball: discrete sound part, for volume gating? - what's the relation between hccbaskb and tbaskb? Is one the bootleg of the other? Or are they both made by the same subcontractor? @@ -101,6 +100,7 @@ public: u16 read_inputs(int columns, u16 colmask = ~0); u8 read_rotated_inputs(int columns, u8 rowmask = ~0); + virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button); // display common int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms) @@ -274,6 +274,12 @@ u8 hh_pic16_state::read_rotated_inputs(int columns, u8 rowmask) return ~ret & rowmask; } +INPUT_CHANGED_MEMBER(hh_pic16_state::reset_button) +{ + // when an input is directly wired to MCU MCLR pin + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); +} + /*************************************************************************** @@ -432,8 +438,6 @@ public: void prepare_display(); DECLARE_WRITE8_MEMBER(write_b); DECLARE_WRITE8_MEMBER(write_c); - - DECLARE_INPUT_CHANGED_MEMBER(reset_button); void pabball(machine_config &config); }; @@ -488,15 +492,9 @@ static INPUT_PORTS_START( pabball ) PORT_CONFSETTING( 0x20, "2" ) PORT_START("RESET") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, pabball_state, reset_button, nullptr) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_pic16_state, reset_button, nullptr) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(pabball_state::reset_button) -{ - // reset button is directly tied to MCLR pin - m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); -} - void pabball_state::pabball(machine_config &config) { /* basic machine hardware */ @@ -1859,7 +1857,7 @@ CONS( 1979, maniac, 0, 0, maniac, maniac, maniac_state, empty_ CONS( 1980, matchme, 0, 0, matchme, matchme, matchme_state, empty_init, "Kingsford", "Match Me", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1980, leboom, 0, 0, leboom, leboom, leboom_state, empty_init, "Lakeside", "Le Boom", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1980, leboom, 0, 0, leboom, leboom, leboom_state, empty_init, "Lakeside", "Le Boom", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1979, tbaskb, 0, 0, tbaskb, tbaskb, tbaskb_state, empty_init, "Tandy Radio Shack", "Electronic Basketball (Tandy)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index bcf21ed3c64..1bd835b36bd 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -394,6 +394,12 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask) return ret; } +INPUT_CHANGED_MEMBER(hh_tms1k_state::reset_button) +{ + // when an input is directly wired to MCU INIT pin + m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); +} + INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button) { m_power_on = (bool)(uintptr_t)param; @@ -2915,8 +2921,6 @@ public: DECLARE_WRITE16_MEMBER(write_r); DECLARE_WRITE16_MEMBER(write_o); DECLARE_READ8_MEMBER(read_k); - - DECLARE_INPUT_CHANGED_MEMBER(reset_button); void eleciq(machine_config &config); }; @@ -2999,15 +3003,9 @@ static INPUT_PORTS_START( eleciq ) PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("RESET") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, eleciq_state, reset_button, nullptr) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, reset_button, nullptr) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(eleciq_state::reset_button) -{ - // reset button is directly wired to TMS1000 INIT pin - m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); -} - void eleciq_state::eleciq(machine_config &config) { /* basic machine hardware */ @@ -4317,8 +4315,6 @@ public: DECLARE_WRITE16_MEMBER(write_r); DECLARE_WRITE16_MEMBER(write_o); DECLARE_READ8_MEMBER(read_k); - - DECLARE_INPUT_CHANGED_MEMBER(reset_button); void f2pbball(machine_config &config); }; @@ -4381,15 +4377,9 @@ static INPUT_PORTS_START( f2pbball ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_COCKTAIL PORT_NAME("P2 Fast") PORT_START("RESET") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, f2pbball_state, reset_button, nullptr) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, reset_button, nullptr) INPUT_PORTS_END -INPUT_CHANGED_MEMBER(f2pbball_state::reset_button) -{ - // reset button is directly wired to TMS1000 INIT pin - m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); -} - void f2pbball_state::f2pbball(machine_config &config) { /* basic machine hardware */ @@ -4671,7 +4661,7 @@ static INPUT_PORTS_START( gpoker ) PORT_START("IN.3") // R3 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_D) PORT_NAME("9/Deal") // DL, shares pad with 9 + PORT_BIT( 0x02, 0x02, IPT_CUSTOM ) PORT_CONDITION("FAKE", 0x03, NOTEQUALS, 0x00) // 9/DL PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Clear Entry") // CE @@ -4689,6 +4679,10 @@ static INPUT_PORTS_START( gpoker ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("Total") // T PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("Bet") // BT + + PORT_START("FAKE") // 9/DL are electronically the same button + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("Deal") // DL INPUT_PORTS_END void gpoker_state::gpoker(machine_config &config) @@ -4770,7 +4764,7 @@ WRITE16_MEMBER(gjackpot_state::write_r) DB] SP] [1] [2] [3] [DS] [DR] BT] HT] - [10/1] [T] [MD [CH [AC] + [10/0] [T] [MD [CH [AC] GO] ST] */ diff --git a/src/mame/drivers/hideseek.cpp b/src/mame/drivers/hideseek.cpp index fd85859aee7..8703174c3c3 100644 --- a/src/mame/drivers/hideseek.cpp +++ b/src/mame/drivers/hideseek.cpp @@ -2,7 +2,7 @@ // copyright-holders:Guru /* Hide & Seek -the AG-2 AX51201 should be the follow-up to the AG-1 AX51101 in gunpey.c +the AG-2 AX51201 should be the follow-up to the AG-1 AX51101 in gunpey.cpp AS: Current ROM code barely contains some valid SH-2 opcodes but not enough for a HD64F7045F28. i.e. It doesn't contain VBR set-up, valid irq routines, @@ -103,21 +103,21 @@ void hideseek_state::hideseek_palette(palette_device &palette) const -MACHINE_CONFIG_START(hideseek_state::hideseek) - +void hideseek_state::hideseek(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", SH2, 7372800 * 4 ) - MCFG_DEVICE_PROGRAM_MAP(mem_map) + SH2(config, m_maincpu, 7372800 * 4); + m_maincpu->set_addrmap(AS_PROGRAM, &hideseek_state::mem_map); // TIMER(config, "scantimer").configure_scanline(FUNC(hideseek_state::hideseek_scanline), "screen", 0, 1); /* 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*8, 64*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(hideseek_state, screen_update_hideseek) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 0*8, 32*8-1); + screen.set_screen_update(FUNC(hideseek_state::screen_update_hideseek)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(hideseek_state::hideseek_palette), 0x10000); GFXDECODE(config, "gfxdecode", "palette", gfx_hideseek); @@ -126,7 +126,7 @@ MACHINE_CONFIG_START(hideseek_state::hideseek) SPEAKER(config, "rspeaker").front_right(); /* sound : M9810 */ -MACHINE_CONFIG_END +} ROM_START( hideseek ) diff --git a/src/mame/drivers/higemaru.cpp b/src/mame/drivers/higemaru.cpp index ba32983ef19..75c6cc4f052 100644 --- a/src/mame/drivers/higemaru.cpp +++ b/src/mame/drivers/higemaru.cpp @@ -163,21 +163,21 @@ static GFXDECODE_START( gfx_higemaru ) GFXDECODE_END -MACHINE_CONFIG_START(higemaru_state::higemaru) - +void higemaru_state::higemaru(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000)/4) /* 3 MHz Sharp LH0080A Z80A-CPU-D */ - MCFG_DEVICE_PROGRAM_MAP(higemaru_map) + Z80(config, m_maincpu, XTAL(12'000'000)/4); /* 3 MHz Sharp LH0080A Z80A-CPU-D */ + m_maincpu->set_addrmap(AS_PROGRAM, &higemaru_state::higemaru_map); TIMER(config, "scantimer").configure_scanline(FUNC(higemaru_state::higemaru_scanline), "screen", 0, 1); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(higemaru_state, screen_update_higemaru) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(higemaru_state::screen_update_higemaru)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_higemaru); @@ -189,7 +189,7 @@ MACHINE_CONFIG_START(higemaru_state::higemaru) AY8910(config, "ay1", XTAL(12'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.25); AY8910(config, "ay2", XTAL(12'000'000)/8).add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/highvdeo.cpp b/src/mame/drivers/highvdeo.cpp index 365b5f9385c..ccce0c6d0c9 100644 --- a/src/mame/drivers/highvdeo.cpp +++ b/src/mame/drivers/highvdeo.cpp @@ -1219,20 +1219,21 @@ void highvdeo_state::ramdac_map(address_map &map) } -MACHINE_CONFIG_START(highvdeo_state::tv_vcf) - MCFG_DEVICE_ADD("maincpu", V30, XTAL(12'000'000)/2 ) // ? - MCFG_DEVICE_PROGRAM_MAP(tv_vcf_map) - MCFG_DEVICE_IO_MAP(tv_vcf_io) +void highvdeo_state::tv_vcf(machine_config &config) +{ + V30(config, m_maincpu, XTAL(12'000'000)/2); // ? + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::tv_vcf_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::tv_vcf_io); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DRIVER(highvdeo_state, screen_update_tourvisn) - MCFG_SCREEN_VBLANK_CALLBACK(ASSERTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(400, 300); + screen.set_visarea(0, 320-1, 0, 200-1); + screen.set_screen_update(FUNC(highvdeo_state::screen_update_tourvisn)); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI, ASSERT_LINE); PALETTE(config, m_palette).set_entries(0x100); ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); @@ -1242,144 +1243,141 @@ MACHINE_CONFIG_START(highvdeo_state::tv_vcf) SPEAKER(config, "mono").front_center(); //OkiM6376 - MCFG_DEVICE_ADD("oki", OKIM6376, XTAL(12'000'000)/2/2/20)//Guess, gives approx. same sample rate as previous emulation - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6376(config, m_okim6376, XTAL(12'000'000)/2/2/20).add_route(ALL_OUTPUTS, "mono", 1.0); //Guess, gives approx. same sample rate as previous emulation +} -MACHINE_CONFIG_START(highvdeo_state::tv_ncf) +void highvdeo_state::tv_ncf(machine_config &config) +{ tv_vcf(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tv_ncf_map) - MCFG_DEVICE_IO_MAP(tv_ncf_io) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::tv_ncf_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::tv_ncf_io); +} -MACHINE_CONFIG_START(highvdeo_state::nyjoker) +void highvdeo_state::nyjoker(machine_config &config) +{ tv_vcf(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(nyjoker_map) - MCFG_DEVICE_IO_MAP(nyjoker_io) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::nyjoker_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::nyjoker_io); +} -MACHINE_CONFIG_START(highvdeo_state::tv_tcf) +void highvdeo_state::tv_tcf(machine_config &config) +{ tv_vcf(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(tv_tcf_map) - MCFG_DEVICE_IO_MAP(tv_tcf_io) + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::tv_tcf_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::tv_tcf_io); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 400-1, 0, 300-1) + subdevice<screen_device>("screen")->set_visarea(0, 400-1, 0, 300-1); m_palette->set_format(palette_device::RGB_565, 0x100); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(highvdeo_state::newmcard) +void highvdeo_state::newmcard(machine_config &config) +{ tv_tcf(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(newmcard_map) - MCFG_DEVICE_IO_MAP(newmcard_io) + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::newmcard_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::newmcard_io); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1) -MACHINE_CONFIG_END + subdevice<screen_device>("screen")->set_visarea(0, 320-1, 0, 200-1); +} -MACHINE_CONFIG_START(highvdeo_state::record) +void highvdeo_state::record(machine_config &config) +{ newmcard(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(record_io) -MACHINE_CONFIG_END + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::record_io); +} -MACHINE_CONFIG_START(highvdeo_state::ciclone) +void highvdeo_state::ciclone(machine_config &config) +{ tv_tcf(config); - config.device_remove("maincpu"); - - MCFG_DEVICE_ADD("maincpu", I80186, 20000000 ) // ? - MCFG_DEVICE_PROGRAM_MAP(tv_tcf_map) - MCFG_DEVICE_IO_MAP(ciclone_io) -MACHINE_CONFIG_END + I80186(config.replace(), m_maincpu, 20000000); // ? + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::tv_tcf_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::ciclone_io); +} -MACHINE_CONFIG_START(highvdeo_state::brasil) - MCFG_DEVICE_ADD("maincpu", I80186, 20000000 ) // fashion doesn't like 20/2 Mhz - MCFG_DEVICE_PROGRAM_MAP(brasil_map) - MCFG_DEVICE_IO_MAP(brasil_io) +void highvdeo_state::brasil(machine_config &config) +{ + I80186(config, m_maincpu, 20000000); // fashion doesn't like 20/2 Mhz + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::brasil_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::brasil_io); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 400-1, 0, 300-1) - MCFG_SCREEN_UPDATE_DRIVER(highvdeo_state, screen_update_brasil) - MCFG_SCREEN_VBLANK_CALLBACK(ASSERTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(400, 300); + screen.set_visarea(0, 400-1, 0, 300-1); + screen.set_screen_update(FUNC(highvdeo_state::screen_update_brasil)); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI, ASSERT_LINE); PALETTE(config, m_palette, palette_device::RGB_565); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6376, XTAL(12'000'000)/2/2/20)//Guess, gives same sample rate as previous emulation - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6376(config, m_okim6376, XTAL(12'000'000)/2/2/20).add_route(ALL_OUTPUTS, "mono", 1.0); //Guess, gives same sample rate as previous emulation +} -MACHINE_CONFIG_START(highvdeo_state::fashion) +void highvdeo_state::fashion(machine_config &config) +{ brasil(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(fashion_io) -MACHINE_CONFIG_END -MACHINE_CONFIG_START(highvdeo_state::grancapi) - MCFG_DEVICE_ADD("maincpu", I80186, 20000000 ) - MCFG_DEVICE_PROGRAM_MAP(brasil_map) - MCFG_DEVICE_IO_MAP(grancapi_io) + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::fashion_io); +} + +void highvdeo_state::grancapi(machine_config &config) +{ + I80186(config, m_maincpu, 20000000); + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::brasil_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::grancapi_io); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 400-1, 0, 300-1) - MCFG_SCREEN_UPDATE_DRIVER(highvdeo_state, screen_update_brasil) - MCFG_SCREEN_VBLANK_CALLBACK(ASSERTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(400, 300); + screen.set_visarea(0, 400-1, 0, 300-1); + screen.set_screen_update(FUNC(highvdeo_state::screen_update_brasil)); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI, ASSERT_LINE); PALETTE(config, m_palette, palette_device::RGB_565); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6376, XTAL(12'000'000)/2/2/20)//Guess, gives same sample rate as previous emulation - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6376(config, m_okim6376, XTAL(12'000'000)/2/2/20).add_route(ALL_OUTPUTS, "mono", 1.0); //Guess, gives same sample rate as previous emulation +} -MACHINE_CONFIG_START(highvdeo_state::magicbom) - MCFG_DEVICE_ADD("maincpu", I80186, 20000000 ) - MCFG_DEVICE_PROGRAM_MAP(brasil_map) - MCFG_DEVICE_IO_MAP(magicbom_io) +void highvdeo_state::magicbom(machine_config &config) +{ + I80186(config, m_maincpu, 20000000); + m_maincpu->set_addrmap(AS_PROGRAM, &highvdeo_state::brasil_map); + m_maincpu->set_addrmap(AS_IO, &highvdeo_state::magicbom_io); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(400, 300) - MCFG_SCREEN_VISIBLE_AREA(0, 400-1, 0, 300-1) - MCFG_SCREEN_UPDATE_DRIVER(highvdeo_state, screen_update_brasil) - MCFG_SCREEN_VBLANK_CALLBACK(ASSERTLINE("maincpu", INPUT_LINE_NMI)) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(400, 300); + screen.set_visarea(0, 400-1, 0, 300-1); + screen.set_screen_update(FUNC(highvdeo_state::screen_update_brasil)); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI, ASSERT_LINE); PALETTE(config, m_palette, palette_device::RGB_565); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("oki", OKIM6376, XTAL(12'000'000)/2/2/20)//Guess, gives same sample rate as previous emulation - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + OKIM6376(config, m_okim6376, XTAL(12'000'000)/2/2/20).add_route(ALL_OUTPUTS, "mono", 1.0); //Guess, gives same sample rate as previous emulation +} ROM_START( tour4000 ) diff --git a/src/mame/drivers/hitme.cpp b/src/mame/drivers/hitme.cpp index a0aef7850e8..85f00383a99 100644 --- a/src/mame/drivers/hitme.cpp +++ b/src/mame/drivers/hitme.cpp @@ -314,22 +314,22 @@ void hitme_state::machine_reset() m_timeout_time = attotime::zero; } -MACHINE_CONFIG_START(hitme_state::hitme) - +void hitme_state::hitme(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8080, MASTER_CLOCK/16) - MCFG_DEVICE_PROGRAM_MAP(hitme_map) - MCFG_DEVICE_IO_MAP(hitme_portmap) + I8080(config, m_maincpu, MASTER_CLOCK/16); + m_maincpu->set_addrmap(AS_PROGRAM, &hitme_state::hitme_map); + m_maincpu->set_addrmap(AS_IO, &hitme_state::hitme_portmap); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(40*8, 19*10) - MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 19*10-1) - MCFG_SCREEN_UPDATE_DRIVER(hitme_state, screen_update_hitme) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(40*8, 19*10); + m_screen->set_visarea(0*8, 40*8-1, 0*8, 19*10-1); + m_screen->set_screen_update(FUNC(hitme_state::screen_update_hitme)); + m_screen->set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_hitme); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -337,7 +337,7 @@ MACHINE_CONFIG_START(hitme_state::hitme) /* sound hardware */ SPEAKER(config, "mono").front_center(); DISCRETE(config, m_discrete, hitme_discrete).add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} @@ -348,19 +348,19 @@ MACHINE_CONFIG_END Barricade or is the resolution set by a dip switch? */ -MACHINE_CONFIG_START(hitme_state::barricad) +void hitme_state::barricad(machine_config &config) +{ hitme(config); /* video hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_SIZE(32*8, 24*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 24*8-1) - MCFG_SCREEN_UPDATE_DRIVER(hitme_state, screen_update_barricad) + m_screen->set_size(32*8, 24*8); + m_screen->set_visarea(0*8, 32*8-1, 0*8, 24*8-1); + m_screen->set_screen_update(FUNC(hitme_state::screen_update_barricad)); m_gfxdecode->set_info(gfx_barricad); MCFG_VIDEO_START_OVERRIDE(hitme_state,barricad) -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/holeland.cpp b/src/mame/drivers/holeland.cpp index 8138b434bc7..1be272f5e98 100644 --- a/src/mame/drivers/holeland.cpp +++ b/src/mame/drivers/holeland.cpp @@ -274,13 +274,13 @@ static GFXDECODE_START( gfx_crzrally ) GFXDECODE_END -MACHINE_CONFIG_START(holeland_state::holeland) - +void holeland_state::holeland(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 3355700) /* measured 298ns on PCB */ - MCFG_DEVICE_PROGRAM_MAP(holeland_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold) + Z80(config, m_maincpu, 3355700); /* measured 298ns on PCB */ + m_maincpu->set_addrmap(AS_PROGRAM, &holeland_state::holeland_map); + m_maincpu->set_addrmap(AS_IO, &holeland_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(holeland_state::irq0_line_hold)); LS259(config, m_latch); // 3J m_latch->parallel_out_cb().set(FUNC(holeland_state::pal_offs_w)).mask(0x03); @@ -291,13 +291,13 @@ MACHINE_CONFIG_START(holeland_state::holeland) WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*16, 32*16) - MCFG_SCREEN_VISIBLE_AREA(0*16, 32*16-1, 2*16, 30*16-1) - MCFG_SCREEN_UPDATE_DRIVER(holeland_state, screen_update_holeland) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*16, 32*16); + screen.set_visarea(0*16, 32*16-1, 2*16, 30*16-1); + screen.set_screen_update(FUNC(holeland_state::screen_update_holeland)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_holeland); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256); @@ -319,7 +319,7 @@ MACHINE_CONFIG_START(holeland_state::holeland) sp0256_device &speech(SP0256(config, "speech", 3355700)); /* measured 298ns on PCB */ speech.data_request_callback().set_inputline("maincpu", INPUT_LINE_NMI); speech.add_route(ALL_OUTPUTS, "mono", 1.0); -MACHINE_CONFIG_END +} /* @@ -355,13 +355,13 @@ Notes: */ -MACHINE_CONFIG_START(holeland_state::crzrally) - +void holeland_state::crzrally(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 20000000/4) /* 5 MHz */ - MCFG_DEVICE_PROGRAM_MAP(crzrally_map) - MCFG_DEVICE_IO_MAP(io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold) + Z80(config, m_maincpu, 20000000/4); /* 5 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &holeland_state::crzrally_map); + m_maincpu->set_addrmap(AS_IO, &holeland_state::io_map); + m_maincpu->set_vblank_int("screen", FUNC(holeland_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1); @@ -372,13 +372,13 @@ MACHINE_CONFIG_START(holeland_state::crzrally) WATCHDOG_TIMER(config, "watchdog"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(59) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(holeland_state, screen_update_crzrally) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(59); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(32*8, 32*8); + screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(holeland_state::screen_update_crzrally)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_crzrally); PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256); @@ -396,7 +396,7 @@ MACHINE_CONFIG_START(holeland_state::crzrally) ay2.port_a_read_callback().set_ioport("DSW1"); ay2.port_b_read_callback().set_ioport("DSW2"); ay2.add_route(ALL_OUTPUTS, "mono", 0.25); -MACHINE_CONFIG_END +} /*************************************************************************** diff --git a/src/mame/drivers/homelab.cpp b/src/mame/drivers/homelab.cpp index cb5aa1c3e46..9e2165554f0 100644 --- a/src/mame/drivers/homelab.cpp +++ b/src/mame/drivers/homelab.cpp @@ -752,9 +752,9 @@ QUICKLOAD_LOAD_MEMBER( homelab_state,homelab) /* Machine driver */ MACHINE_CONFIG_START(homelab_state::homelab) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(8'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(homelab2_mem) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", homelab_state, homelab_frame) + Z80(config, m_maincpu, XTAL(8'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &homelab_state::homelab2_mem); + m_maincpu->set_vblank_int("screen", FUNC(homelab_state::homelab_frame)); /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER, rgb_t::green())); @@ -784,9 +784,9 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(homelab_state::homelab3) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(homelab3_mem) - MCFG_DEVICE_IO_MAP(homelab3_io) + Z80(config, m_maincpu, XTAL(12'000'000) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &homelab_state::homelab3_mem); + m_maincpu->set_addrmap(AS_IO, &homelab_state::homelab3_io); MCFG_MACHINE_RESET_OVERRIDE(homelab_state,homelab3) /* video hardware */ @@ -817,9 +817,9 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(homelab_state::brailab4) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(12'000'000) / 4) - MCFG_DEVICE_PROGRAM_MAP(brailab4_mem) - MCFG_DEVICE_IO_MAP(brailab4_io) + Z80(config, m_maincpu, XTAL(12'000'000) / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &homelab_state::brailab4_mem); + m_maincpu->set_addrmap(AS_IO, &homelab_state::brailab4_io); MCFG_MACHINE_RESET_OVERRIDE(homelab_state,brailab4) /* video hardware */ @@ -844,8 +844,7 @@ MACHINE_CONFIG_START(homelab_state::brailab4) WAVE(config, "wave", m_cass).add_route(ALL_OUTPUTS, "speaker", 0.25); - MCFG_DEVICE_ADD("mea8000", MEA8000, 3840000) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) + MEA8000(config, "mea8000", 3840000).add_route(ALL_OUTPUTS, "speaker", 1.0); CASSETTE(config, m_cass); MCFG_QUICKLOAD_ADD("quickload", homelab_state, homelab, "htp", attotime::from_seconds(18)) diff --git a/src/mame/drivers/homez80.cpp b/src/mame/drivers/homez80.cpp index 2bb6b6fd0b1..afe9586e22d 100644 --- a/src/mame/drivers/homez80.cpp +++ b/src/mame/drivers/homez80.cpp @@ -287,25 +287,26 @@ INTERRUPT_GEN_MEMBER(homez80_state::homez80_interrupt) m_irq ^= 1; } -MACHINE_CONFIG_START(homez80_state::homez80) +void homez80_state::homez80(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(8'000'000) / 2) - MCFG_DEVICE_PROGRAM_MAP(homez80_mem) - MCFG_DEVICE_IO_MAP(homez80_io) - MCFG_DEVICE_PERIODIC_INT_DRIVER(homez80_state, homez80_interrupt, 50) + Z80(config, m_maincpu, XTAL(8'000'000) / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &homez80_state::homez80_mem); + m_maincpu->set_addrmap(AS_IO, &homez80_state::homez80_io); + m_maincpu->set_periodic_int(FUNC(homez80_state::homez80_interrupt), attotime::from_hz(50)); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(homez80_state, screen_update) - MCFG_SCREEN_SIZE(344, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0, 344-1, 0, 32*8-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(homez80_state::screen_update)); + screen.set_size(344, 32*8); + screen.set_visarea(0, 344-1, 0, 32*8-1); + screen.set_palette("palette"); PALETTE(config, "palette", palette_device::MONOCHROME); GFXDECODE(config, "gfxdecode", "palette", gfx_homez80); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( homez80 ) diff --git a/src/mame/drivers/horizon.cpp b/src/mame/drivers/horizon.cpp index eb7f424f389..b34eabc09a6 100644 --- a/src/mame/drivers/horizon.cpp +++ b/src/mame/drivers/horizon.cpp @@ -179,7 +179,7 @@ static void horizon_s100_cards(device_slot_interface &device) //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( horizon ) +// machine_config( horizon ) //------------------------------------------------- void horizon_state::horizon(machine_config &config) diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 115a1b4a689..9416abc126b 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -1064,8 +1064,8 @@ double hornet_state::adc12138_input_callback(uint8_t input) return (double)(value) / 2047.0; } -MACHINE_CONFIG_START(hornet_state::hornet) - +void hornet_state::hornet(machine_config &config) +{ /* basic machine hardware */ PPC403GA(config, m_maincpu, XTAL(64'000'000) / 2); /* PowerPC 403GA 32MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &hornet_state::hornet_map); @@ -1125,9 +1125,10 @@ MACHINE_CONFIG_START(hornet_state::hornet) KONPPC(config, m_konppc, 0); m_konppc->set_num_boards(1); m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_HORNET); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hornet_state::hornet_2board) +void hornet_state::hornet_2board(machine_config &config) +{ hornet(config); ADSP21062(config, m_dsp2, XTAL(36'000'000)); @@ -1170,16 +1171,18 @@ MACHINE_CONFIG_START(hornet_state::hornet_2board) rscreen.set_screen_update(FUNC(hornet_state::screen_update_rscreen)); m_konppc->set_num_boards(2); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hornet_state::terabrst) +void hornet_state::terabrst(machine_config &config) +{ hornet(config); M68000(config, m_gn680, XTAL(32'000'000) / 2); /* 16MHz */ m_gn680->set_addrmap(AS_PROGRAM, &hornet_state::gn680_memmap); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hornet_state::hornet_2board_v2) +void hornet_state::hornet_2board_v2(machine_config &config) +{ hornet_2board(config); VOODOO_2(config.replace(), m_voodoo[0], STD_VOODOO_2_CLOCK); @@ -1195,7 +1198,7 @@ MACHINE_CONFIG_START(hornet_state::hornet_2board_v2) m_voodoo[1]->set_screen_tag("rscreen"); m_voodoo[1]->set_cpu_tag("dsp2"); // ?? m_voodoo[1]->vblank_callback().set(FUNC(hornet_state::voodoo_vblank_1)); -MACHINE_CONFIG_END +} void hornet_state::sscope2(machine_config &config) { diff --git a/src/mame/drivers/hotblock.cpp b/src/mame/drivers/hotblock.cpp index 7c63d22dc6b..c053f266313 100644 --- a/src/mame/drivers/hotblock.cpp +++ b/src/mame/drivers/hotblock.cpp @@ -207,21 +207,21 @@ static INPUT_PORTS_START( hotblock ) INPUT_PORTS_END -MACHINE_CONFIG_START(hotblock_state::hotblock) - +void hotblock_state::hotblock(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8088, 24_MHz_XTAL / 3) // Unknown clock - MCFG_DEVICE_PROGRAM_MAP(hotblock_map) - MCFG_DEVICE_IO_MAP(hotblock_io) + I8088(config, m_maincpu, 24_MHz_XTAL / 3); // Unknown clock + m_maincpu->set_addrmap(AS_PROGRAM, &hotblock_state::hotblock_map); + m_maincpu->set_addrmap(AS_IO, &hotblock_state::hotblock_io); // I2CMEM(config, m_i2cmem, 0).set_page_size(16).set_data_size(0x200); // 24C04 /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(24_MHz_XTAL / 3, 512, 0, 320, 312, 0, 200) // 15.625 kHz horizontal??? - MCFG_SCREEN_UPDATE_DRIVER(hotblock_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - MCFG_SCREEN_VBLANK_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) // right? + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(24_MHz_XTAL / 3, 512, 0, 320, 312, 0, 200); // 15.625 kHz horizontal??? + screen.set_screen_update(FUNC(hotblock_state::screen_update)); + screen.set_palette(m_palette); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_NMI); // right? PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x200/2); @@ -232,7 +232,7 @@ MACHINE_CONFIG_START(hotblock_state::hotblock) aysnd.port_a_read_callback().set_ioport("P1"); aysnd.port_b_read_callback().set_ioport("P2"); aysnd.add_route(ALL_OUTPUTS, "mono", 0.50); -MACHINE_CONFIG_END +} ROM_START( hotblock ) ROM_REGION( 0x100000, "maincpu", 0 ) diff --git a/src/mame/drivers/hotstuff.cpp b/src/mame/drivers/hotstuff.cpp index 6bde0ec44ac..e47e5c70e9c 100644 --- a/src/mame/drivers/hotstuff.cpp +++ b/src/mame/drivers/hotstuff.cpp @@ -101,19 +101,19 @@ void hotstuff_state::hotstuff_map(address_map &map) static INPUT_PORTS_START( hotstuff ) INPUT_PORTS_END -MACHINE_CONFIG_START(hotstuff_state::hotstuff) - - MCFG_DEVICE_ADD("maincpu", M68000, 16000000) - MCFG_DEVICE_PROGRAM_MAP(hotstuff_map) +void hotstuff_state::hotstuff(machine_config &config) +{ + M68000(config, m_maincpu, 16000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hotstuff_state::hotstuff_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(128*8, 64*8) - MCFG_SCREEN_VISIBLE_AREA((0x10*4)+8, 101*8-1, 0*8, 33*8-1) - MCFG_SCREEN_UPDATE_DRIVER(hotstuff_state, screen_update_hotstuff) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(128*8, 64*8); + screen.set_visarea((0x10*4)+8, 101*8-1, 0*8, 33*8-1); + screen.set_screen_update(FUNC(hotstuff_state::screen_update_hotstuff)); - MCFG_PALETTE_ADD("palette", 0x200) + PALETTE(config, "palette").set_entries(0x200); scc8530_device& scc1(SCC8530N(config, "scc1", 4915200)); scc1.out_int_callback().set_inputline(m_maincpu, M68K_IRQ_4); @@ -123,7 +123,7 @@ MACHINE_CONFIG_START(hotstuff_state::hotstuff) MC146818(config, m_rtc, XTAL(32'768)); m_rtc->irq().set_inputline("maincpu", M68K_IRQ_1); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/hp16500.cpp b/src/mame/drivers/hp16500.cpp index f3bc942d289..4ed4e5bd469 100644 --- a/src/mame/drivers/hp16500.cpp +++ b/src/mame/drivers/hp16500.cpp @@ -413,14 +413,15 @@ uint32_t hp16500_state::screen_update_hp16500(screen_device &screen, bitmap_rgb3 return 0; } -MACHINE_CONFIG_START(hp16500_state::hp1650) +void hp16500_state::hp1650(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(hp1650_map) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp16500_state::hp1650_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) - MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); mc6845_device &crtc(MC6845(config, "crtc", 25000000/9)); crtc.set_screen("screen"); @@ -429,20 +430,21 @@ MACHINE_CONFIG_START(hp16500_state::hp1650) crtc.set_update_row_callback(FUNC(hp16500_state::crtc_update_row_1650), this); crtc.out_vsync_callback().set(FUNC(hp16500_state::vsync_changed)); - MCFG_DEVICE_ADD("epci", MC2661, 5000000) + MC2661(config, "epci", 5000000); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp16500_state::hp1651) +void hp16500_state::hp1651(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(hp1651_map) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp16500_state::hp1651_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) - MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); mc6845_device &crtc(MC6845(config, "crtc", 25000000/9)); crtc.set_screen("screen"); @@ -451,20 +453,21 @@ MACHINE_CONFIG_START(hp16500_state::hp1651) crtc.set_update_row_callback(FUNC(hp16500_state::crtc_update_row_1650), this); crtc.out_vsync_callback().set(FUNC(hp16500_state::vsync_changed)); - MCFG_DEVICE_ADD("epci", MC2661, 5000000) + MC2661(config, "epci", 5000000); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp16500_state::hp16500a) +void hp16500_state::hp16500a(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) - MCFG_DEVICE_PROGRAM_MAP(hp16500a_map) + M68000(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp16500_state::hp16500a_map); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(25000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 ) - MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(25000000, 0x320, 0, 0x240, 0x19c, 0, 0x170); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); mc6845_device &crtc(MC6845(config, "crtc", 25000000/9)); crtc.set_screen("screen"); @@ -475,7 +478,7 @@ MACHINE_CONFIG_START(hp16500_state::hp16500a) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); -MACHINE_CONFIG_END +} void hp16500_state::hp16500b(machine_config &config) { diff --git a/src/mame/drivers/hp2100.cpp b/src/mame/drivers/hp2100.cpp index 4a4457f187e..2ea6920c822 100644 --- a/src/mame/drivers/hp2100.cpp +++ b/src/mame/drivers/hp2100.cpp @@ -249,8 +249,9 @@ private: static INPUT_PORTS_START( hp2100 ) INPUT_PORTS_END -MACHINE_CONFIG_START(hp2100_state::hp2100) -MACHINE_CONFIG_END +void hp2100_state::hp2100(machine_config &config) +{ +} ROM_START( hp2100 ) ROM_REGION( 0x0400, "maincpu", 0 ) diff --git a/src/mame/drivers/hp2640.cpp b/src/mame/drivers/hp2640.cpp index 816d403b9f6..ef357b12e3e 100644 --- a/src/mame/drivers/hp2640.cpp +++ b/src/mame/drivers/hp2640.cpp @@ -966,11 +966,12 @@ void hp2645_state::cpu_io_map(address_map &map) map(0x00, 0xff).w(FUNC(hp2645_state::mode_byte_w)); } -MACHINE_CONFIG_START(hp2645_state::hp2645) - MCFG_DEVICE_ADD("cpu" , I8080A , SYS_CLOCK / 2) - MCFG_DEVICE_PROGRAM_MAP(cpu_mem_map) - MCFG_DEVICE_IO_MAP(cpu_io_map) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(hp2645_state , irq_callback) +void hp2645_state::hp2645(machine_config &config) +{ + I8080A(config, m_cpu, SYS_CLOCK / 2); + m_cpu->set_addrmap(AS_PROGRAM, &hp2645_state::cpu_mem_map); + m_cpu->set_addrmap(AS_IO, &hp2645_state::cpu_io_map); + m_cpu->set_irq_acknowledge_callback(FUNC(hp2645_state::irq_callback)); TIMER(config, m_timer_10ms).configure_generic(FUNC(hp2645_state::timer_10ms_exp)); TIMER(config, m_timer_cursor_blink_inh).configure_generic(FUNC(hp2645_state::timer_cursor_blink_inh)); @@ -1005,8 +1006,7 @@ MACHINE_CONFIG_START(hp2645_state::hp2645) SPEAKER(config, "mono").front_center(); BEEP(config, m_beep, BEEP_FREQUENCY).add_route(ALL_OUTPUTS, "mono", 1.00); TIMER(config, m_timer_beep).configure_generic(FUNC(hp2645_state::timer_beep_exp)); - -MACHINE_CONFIG_END +} ROM_START(hp2645) ROM_REGION(0x5800 , "cpu" , 0) diff --git a/src/mame/drivers/hp49gp.cpp b/src/mame/drivers/hp49gp.cpp index bd88261dcf0..934a7f2a724 100644 --- a/src/mame/drivers/hp49gp.cpp +++ b/src/mame/drivers/hp49gp.cpp @@ -283,18 +283,19 @@ void hp49gp_state::init_hp49gp() lcd_spi_init(); } -MACHINE_CONFIG_START(hp49gp_state::hp49gp) - MCFG_DEVICE_ADD("maincpu", ARM9, 400000000) - MCFG_DEVICE_PROGRAM_MAP(hp49gp_map) +void hp49gp_state::hp49gp(machine_config &config) +{ + ARM9(config, m_maincpu, 400000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp49gp_state::hp49gp_map); - MCFG_PALETTE_ADD("palette", 32768) + PALETTE(config, "palette").set_entries(32768); - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(160, 85) - MCFG_SCREEN_VISIBLE_AREA(0, 131 - 1, 0, 80 - 1) - MCFG_SCREEN_UPDATE_DEVICE("s3c2410", s3c2410_device, screen_update) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(160, 85); + screen.set_visarea(0, 131 - 1, 0, 80 - 1); + screen.set_screen_update("s3c2410", FUNC(s3c2410_device::screen_update)); S3C2410(config, m_s3c2410, 12000000); m_s3c2410->set_palette_tag("palette"); @@ -302,7 +303,7 @@ MACHINE_CONFIG_START(hp49gp_state::hp49gp) m_s3c2410->gpio_port_r_callback().set(FUNC(hp49gp_state::s3c2410_gpio_port_r)); m_s3c2410->gpio_port_w_callback().set(FUNC(hp49gp_state::s3c2410_gpio_port_w)); m_s3c2410->set_lcd_flags(S3C24XX_INTERFACE_LCD_REVERSE); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( hp49gp ) PORT_START("ROW1") diff --git a/src/mame/drivers/hp9825.cpp b/src/mame/drivers/hp9825.cpp index 53a180be86b..39c92bbe7cc 100644 --- a/src/mame/drivers/hp9825.cpp +++ b/src/mame/drivers/hp9825.cpp @@ -622,7 +622,8 @@ void hp9825_state::set_dmar_slot(unsigned slot , int state) m_io_sys->set_dmar(uint8_t(sc) , state); } -MACHINE_CONFIG_START(hp9825_state::hp9825_base) +void hp9825_state::hp9825_base(machine_config &config) +{ HP_09825_67907(config , m_cpu , MAIN_CLOCK); // Just guessing... settings borrowed from hp9845 m_cpu->set_rw_cycles(6 , 6); @@ -673,7 +674,7 @@ MACHINE_CONFIG_START(hp9825_state::hp9825_base) } config.set_default_layout(layout_hp9825); -MACHINE_CONFIG_END +} #define IOP_MASK(x) BIT_MASK<ioport_value>((x)) @@ -844,10 +845,11 @@ private: void cpu_mem_map(address_map &map); }; -MACHINE_CONFIG_START(hp9825b_state::hp9825b) +void hp9825b_state::hp9825b(machine_config &config) +{ hp9825_base(config); m_cpu->set_addrmap(AS_PROGRAM , &hp9825b_state::cpu_mem_map); -MACHINE_CONFIG_END +} void hp9825b_state::cpu_mem_map(address_map &map) { @@ -901,12 +903,13 @@ private: bool is_rom(uint16_t addr , uint8_t cycle_type) const; }; -MACHINE_CONFIG_START(hp9825t_state::hp9825t) +void hp9825t_state::hp9825t(machine_config &config) +{ hp9825_base(config); m_cpu->set_addrmap(AS_PROGRAM , &hp9825t_state::cpu_mem_map); m_cpu->stm_cb().set(FUNC(hp9825t_state::stm)); m_cpu->opcode_cb().set(FUNC(hp9825t_state::opcode_fetch)); -MACHINE_CONFIG_END +} void hp9825t_state::machine_start() { diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp index cf8dd47754c..d4f64f10393 100644 --- a/src/mame/drivers/hp9845.cpp +++ b/src/mame/drivers/hp9845.cpp @@ -3532,35 +3532,37 @@ const uint8_t hp9845t_state::m_back_arrow_shape[] = { 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00 }; -MACHINE_CONFIG_START(hp9845_state::hp9845a) - //MCFG_DEVICE_ADD("lpu", HP_5061_3010, XTAL(11'400'000)) - //MCFG_DEVICE_ADD("ppu", HP_5061_3011, XTAL(11'400'000)) +void hp9845_state::hp9845a(machine_config &config) +{ + //HP_5061_3010(config, m_lpu, XTAL(11'400'000)); + //HP_5061_3011(config, m_ppu, XTAL(11'400'000)); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(hp9845_state, screen_update) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(560, 455) - MCFG_SCREEN_VISIBLE_AREA(0, 560-1, 0, 455-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(hp9845_state::screen_update)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(560, 455); + screen.set_visarea(0, 560-1, 0, 455-1); SOFTWARE_LIST(config, "optrom_list").set_original("hp9845a_rom"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp9845_state::hp9835a) - //MCFG_DEVICE_ADD("lpu", HP_5061_3001, XTAL(11'400'000)) - //MCFG_DEVICE_ADD("ppu", HP_5061_3001, XTAL(11'400'000)) +void hp9845_state::hp9835a(machine_config &config) +{ + //HP_5061_3001(config, m_lpu, XTAL(11'400'000)); + //HP_5061_301(1config, m_ppu, XTAL(11'400'000)); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_UPDATE_DRIVER(hp9845_state, screen_update) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(560, 455) - MCFG_SCREEN_VISIBLE_AREA(0, 560-1, 0, 455-1) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(hp9845_state::screen_update)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(560, 455); + screen.set_visarea(0, 560-1, 0, 455-1); SOFTWARE_LIST(config, "optrom_list").set_original("hp9835a_rom"); -MACHINE_CONFIG_END +} /* Global memory map in blocks of 32 kwords / 64 kbytes each: @@ -3623,7 +3625,8 @@ void hp9845_base_state::ppu_io_map(address_map &map) map(HP_MAKE_IOADDR(T15_PA, 0), HP_MAKE_IOADDR(T15_PA, 3)).rw(m_t15, FUNC(hp_taco_device::reg_r), FUNC(hp_taco_device::reg_w)); } -MACHINE_CONFIG_START(hp9845_base_state::hp9845_base) +void hp9845_base_state::hp9845_base(machine_config &config) +{ HP_5061_3001(config , m_lpu , 5700000); m_lpu->set_addrmap(AS_PROGRAM , &hp9845_base_state::global_mem_map); m_lpu->set_9845_boot_mode(true); @@ -3655,8 +3658,7 @@ MACHINE_CONFIG_START(hp9845_base_state::hp9845_base) // Beeper SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper" , BEEP , KEY_SCAN_OSCILLATOR / 512) - MCFG_SOUND_ROUTE(ALL_OUTPUTS , "mono" , 0.50) + BEEP(config, m_beeper , KEY_SCAN_OSCILLATOR / 512).add_route(ALL_OUTPUTS , "mono" , 0.50); TIMER(config, m_beep_timer).configure_generic(FUNC(hp9845_base_state::beeper_off)); @@ -3674,22 +3676,14 @@ MACHINE_CONFIG_START(hp9845_base_state::hp9845_base) // right-hand side and left-hand side drawers, respectively. // Here we do away with the distinction between LPU & PPU ROMs: in the end they // are visible to both CPUs at the same addresses. - MCFG_DEVICE_ADD("drawer1", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer2", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer3", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer4", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer5", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer6", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer7", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) - MCFG_DEVICE_ADD("drawer8", HP_OPTROM_SLOT, 0) - MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_devices, NULL, false) + HP_OPTROM_SLOT(config, "drawer1", 0); + HP_OPTROM_SLOT(config, "drawer2", 0); + HP_OPTROM_SLOT(config, "drawer3", 0); + HP_OPTROM_SLOT(config, "drawer4", 0); + HP_OPTROM_SLOT(config, "drawer5", 0); + HP_OPTROM_SLOT(config, "drawer6", 0); + HP_OPTROM_SLOT(config, "drawer7", 0); + HP_OPTROM_SLOT(config, "drawer8", 0); // I/O slots for (unsigned slot = 0; slot < 4; slot++) { @@ -3709,7 +3703,7 @@ MACHINE_CONFIG_START(hp9845_base_state::hp9845_base) prt.irq().set(FUNC(hp9845_base_state::prt_irl_w)); prt.flg().set([this](int state) { m_io_sys->set_flg(PRINTER_PA , state); }); prt.sts().set([this](int state) { m_io_sys->set_sts(PRINTER_PA , state); }); -MACHINE_CONFIG_END +} void hp9845b_state::hp9845b(machine_config &config) { @@ -3728,19 +3722,18 @@ void hp9845b_state::hp9845b(machine_config &config) SOFTWARE_LIST(config, "optrom_list").set_original("hp9845b_rom"); } -MACHINE_CONFIG_START(hp9845c_state::hp9845c) +void hp9845c_state::hp9845c(machine_config &config) +{ hp9845_base(config); // video hardware - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_UPDATE_DRIVER(hp9845c_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, hp9845c_state, vblank_w)) - MCFG_SCREEN_RAW_PARAMS(VIDEO_770_PIXEL_CLOCK , VIDEO_770_HTOTAL , VIDEO_770_HBEND , VIDEO_770_HBSTART , VIDEO_770_VTOTAL , VIDEO_770_VBEND , VIDEO_770_VBSTART) - MCFG_PALETTE_ADD("palette", 24) + m_screen->set_screen_update(FUNC(hp9845c_state::screen_update)); + m_screen->screen_vblank().set(FUNC(hp9845c_state::vblank_w)); + m_screen->set_raw(VIDEO_770_PIXEL_CLOCK , VIDEO_770_HTOTAL , VIDEO_770_HBEND , VIDEO_770_HBSTART , VIDEO_770_VTOTAL , VIDEO_770_VBEND , VIDEO_770_VBSTART); + PALETTE(config, m_palette).set_entries(24); TIMER(config, "scantimer").configure_scanline(FUNC(hp9845c_state::scanline_timer), "screen", 0, 1); SOFTWARE_LIST(config, "optrom_list").set_original("hp9845b_rom"); - -MACHINE_CONFIG_END +} void hp9845t_state::hp9845t(machine_config &config) { diff --git a/src/mame/drivers/hp9k.cpp b/src/mame/drivers/hp9k.cpp index 0ecf21bc482..c10eed0913b 100644 --- a/src/mame/drivers/hp9k.cpp +++ b/src/mame/drivers/hp9k.cpp @@ -394,20 +394,21 @@ WRITE8_MEMBER( hp9k_state::kbd_put ) } -MACHINE_CONFIG_START(hp9k_state::hp9k) +void hp9k_state::hp9k(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",M68000, XTAL(8'000'000)) - MCFG_DEVICE_PROGRAM_MAP(hp9k_mem) + M68000(config, m_maincpu, XTAL(8'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k_state::hp9k_mem); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(HP9816_ROWX*HP9816_CHDIMX, HP9816_ROWY*HP9816_CHDIMY) - MCFG_SCREEN_VISIBLE_AREA(0, (HP9816_ROWX*HP9816_CHDIMX)-1, 0, (HP9816_ROWY*HP9816_CHDIMY)-1) - MCFG_SCREEN_UPDATE_DRIVER(hp9k_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(HP9816_ROWX*HP9816_CHDIMX, HP9816_ROWY*HP9816_CHDIMY); + screen.set_visarea(0, (HP9816_ROWX*HP9816_CHDIMX)-1, 0, (HP9816_ROWY*HP9816_CHDIMY)-1); + screen.set_screen_update(FUNC(hp9k_state::screen_update)); + screen.set_palette("palette"); GFXDECODE(config, m_gfxdecode, "palette", gfx_hp9k); PALETTE(config, "palette", palette_device::MONOCHROME); @@ -416,7 +417,7 @@ MACHINE_CONFIG_START(hp9k_state::hp9k) m_6845->set_screen("screen"); m_6845->set_show_border_area(false); m_6845->set_char_width(8); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( hp9816 ) diff --git a/src/mame/drivers/hp9k_3xx.cpp b/src/mame/drivers/hp9k_3xx.cpp index 2baa5d17d9c..5a0d69e4311 100644 --- a/src/mame/drivers/hp9k_3xx.cpp +++ b/src/mame/drivers/hp9k_3xx.cpp @@ -334,12 +334,12 @@ void hp9k3xx_state::hp9k300(machine_config &config) config.set_default_layout(layout_hp9k_3xx); } -MACHINE_CONFIG_START(hp9k3xx_state::hp9k310) - +void hp9k3xx_state::hp9k310(machine_config &config) +{ hp9k300(config); - MCFG_DEVICE_ADD(m_maincpu, M68010, 10000000) - MCFG_DEVICE_PROGRAM_MAP(hp9k310_map) + M68010(config, m_maincpu, 10000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k310_map); add_dio16_bus(config); @@ -349,12 +349,12 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k310) DIO32_SLOT(config, "sl3", 0, "diobus", dio32_cards, "98643", false); DIO16_SLOT(config, "sl4", 0, "diobus", dio16_cards, "98644", false); DIO16_SLOT(config, "sl5", 0, "diobus", dio16_cards, nullptr, false); +} -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(hp9k3xx_state::hp9k320) - MCFG_DEVICE_ADD(m_maincpu, M68020FPU, 16670000) - MCFG_DEVICE_PROGRAM_MAP(hp9k320_map) +void hp9k3xx_state::hp9k320(machine_config &config) +{ + M68020FPU(config, m_maincpu, 16670000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k320_map); hp9k300(config); add_dio32_bus(config); @@ -366,11 +366,12 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k320) DIO32_SLOT(config, "sl4", 0, "diobus", dio32_cards, "98620", false); DIO32_SLOT(config, "sl5", 0, "diobus", dio32_cards, "98265a", false); DIO32_SLOT(config, "sl7", 0, "diobus", dio32_cards, nullptr, false); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp9k3xx_state::hp9k330) - MCFG_DEVICE_ADD(m_maincpu, M68020PMMU, 16670000) - MCFG_DEVICE_PROGRAM_MAP(hp9k330_map) +void hp9k3xx_state::hp9k330(machine_config &config) +{ + M68020PMMU(config, m_maincpu, 16670000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k330_map); hp9k300(config); add_dio32_bus(config); @@ -380,11 +381,12 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k330) DIO32_SLOT(config, "sl2", 0, "diobus", dio16_cards, "98603b", false); DIO32_SLOT(config, "sl3", 0, "diobus", dio16_cards, "98644", false); DIO32_SLOT(config, "sl4", 0, "diobus", dio16_cards, nullptr, false); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp9k3xx_state::hp9k332) - MCFG_DEVICE_ADD(m_maincpu, M68020PMMU, 16670000) - MCFG_DEVICE_PROGRAM_MAP(hp9k332_map) +void hp9k3xx_state::hp9k332(machine_config &config) +{ + M68020PMMU(config, m_maincpu, 16670000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k332_map); hp9k300(config); add_dio16_bus(config); @@ -394,22 +396,22 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k332) DIO16_SLOT(config, "sl2", 0, "diobus", dio16_cards, "98644", false); DIO16_SLOT(config, "sl3", 0, "diobus", dio16_cards, "98543", false); DIO16_SLOT(config, "sl4", 0, "diobus", dio16_cards, nullptr, false); +} -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(hp9k3xx_state::hp9k340) +void hp9k3xx_state::hp9k340(machine_config &config) +{ hp9k320(config); - MCFG_DEVICE_REPLACE(m_maincpu, M68030, 16670000) - MCFG_DEVICE_PROGRAM_MAP(hp9k330_map) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(hp9k3xx_state::hp9k360) + M68030(config.replace(), m_maincpu, 16670000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k330_map); +} +void hp9k3xx_state::hp9k360(machine_config &config) +{ hp9k300(config); - MCFG_DEVICE_ADD(m_maincpu, M68030, 25000000) - MCFG_DEVICE_PROGRAM_MAP(hp9k360_map) + M68030(config, m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k360_map); add_dio32_bus(config); @@ -419,30 +421,32 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k360) DIO32_SLOT(config, "sl3", 0, "diobus", dio32_cards, "98620", false); DIO32_SLOT(config, "sl4", 0, "diobus", dio32_cards, "98265a", false); DIO32_SLOT(config, "sl5", 0, "diobus", dio32_cards, nullptr, false); - -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hp9k3xx_state::hp9k370) +void hp9k3xx_state::hp9k370(machine_config &config) +{ hp9k360(config); - MCFG_DEVICE_REPLACE(m_maincpu, M68030, 33000000) - MCFG_DEVICE_PROGRAM_MAP(hp9k370_map) -MACHINE_CONFIG_END + M68030(config.replace(), m_maincpu, 33000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k370_map); +} -MACHINE_CONFIG_START(hp9k3xx_state::hp9k380) +void hp9k3xx_state::hp9k380(machine_config &config) +{ hp9k360(config); - MCFG_DEVICE_REPLACE(m_maincpu, M68040, 25000000) - MCFG_DEVICE_PROGRAM_MAP(hp9k380_map) -MACHINE_CONFIG_END + M68040(config.replace(), m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k380_map); +} -MACHINE_CONFIG_START(hp9k3xx_state::hp9k382) +void hp9k3xx_state::hp9k382(machine_config &config) +{ hp9k360(config); - MCFG_DEVICE_REPLACE(m_maincpu, M68040, 25000000) - MCFG_DEVICE_PROGRAM_MAP(hp9k382_map) -MACHINE_CONFIG_END + M68040(config.replace(), m_maincpu, 25000000); + m_maincpu->set_addrmap(AS_PROGRAM, &hp9k3xx_state::hp9k382_map); +} ROM_START( hp9k310 ) ROM_REGION( 0x20000, MAINCPU_TAG, 0 ) diff --git a/src/mame/drivers/hprot1.cpp b/src/mame/drivers/hprot1.cpp index a0839725314..2a30193de12 100644 --- a/src/mame/drivers/hprot1.cpp +++ b/src/mame/drivers/hprot1.cpp @@ -245,7 +245,8 @@ HD44780_PIXEL_UPDATE(hprot1_state::hprot1_pixel_update) } } -MACHINE_CONFIG_START(hprot1_state::hprot1) +void hprot1_state::hprot1(machine_config &config) +{ /* basic machine hardware */ I80C31(config, m_maincpu, XTAL(10'000'000)); m_maincpu->set_addrmap(AS_PROGRAM, &hprot1_state::i80c31_prg); @@ -255,13 +256,13 @@ MACHINE_CONFIG_START(hprot1_state::hprot1) m_maincpu->port_out_cb<3>().set(FUNC(hprot1_state::henry_p3_w)); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) - MCFG_SCREEN_SIZE(6*16, 9*2) - MCFG_SCREEN_VISIBLE_AREA(0, 6*16-1, 0, 9*2-1) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update)); + screen.set_size(6*16, 9*2); + screen.set_visarea(0, 6*16-1, 0, 9*2-1); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(hprot1_state::hprot1_palette), 2); GFXDECODE(config, "gfxdecode", "palette", gfx_hprot1); @@ -273,40 +274,40 @@ MACHINE_CONFIG_START(hprot1_state::hprot1) /* TODO: figure out which RTC chip is in use. */ /* TODO: emulate the ADM695AN chip (watchdog/brownout reset)*/ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hprot1_state::hprotr8a) +void hprot1_state::hprotr8a(machine_config &config) +{ hprot1(config); - MCFG_DEVICE_REPLACE("maincpu", I80C31, 11059200) // value of X1 cristal on the PCB - MCFG_DEVICE_PROGRAM_MAP(i80c31_prg) - MCFG_DEVICE_IO_MAP(i80c31_io) + I80C31(config.replace(), m_maincpu, 11059200); // value of X1 crystal on the PCB + m_maincpu->set_addrmap(AS_PROGRAM, &hprot1_state::i80c31_prg); + m_maincpu->set_addrmap(AS_IO, &hprot1_state::i80c31_io); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* TODO: add an RS232 interface (emulate MAX232N chip) (the board has GND/VCC/RX/TX pins available in a connector) */ /* TODO: add an I2C interface (the board has GND/VCC/SDA/SCL pins available in a connector) */ -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(hprot1_state::hprot2r6) +void hprot1_state::hprot2r6(machine_config &config) +{ hprot1(config); - MCFG_DEVICE_REPLACE("maincpu", I80C31, 11059200) // value of X1 cristal on the PCB - MCFG_DEVICE_PROGRAM_MAP(i80c31_prg) - MCFG_DEVICE_IO_MAP(i80c31_io) + I80C31(config.replace(), m_maincpu, 11059200); // value of X1 crystal on the PCB + m_maincpu->set_addrmap(AS_PROGRAM, &hprot1_state::i80c31_prg); + m_maincpu->set_addrmap(AS_IO, &hprot1_state::i80c31_io); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50); /* TODO: add an RS232 interface (emulate MAX232N chip) */ -MACHINE_CONFIG_END +} ROM_START( hprot1 ) ROM_REGION( 0x10000, "maincpu", 0 ) diff --git a/src/mame/drivers/huebler.cpp b/src/mame/drivers/huebler.cpp index e73246bd343..f8ce25a5d03 100644 --- a/src/mame/drivers/huebler.cpp +++ b/src/mame/drivers/huebler.cpp @@ -311,7 +311,8 @@ static GFXDECODE_START( gfx_amu880 ) GFXDECODE_END -MACHINE_CONFIG_START(amu880_state::amu880) +void amu880_state::amu880(machine_config &config) +{ /* basic machine hardware */ Z80(config, m_maincpu, XTAL(10'000'000)/4); // U880D m_maincpu->set_addrmap(AS_PROGRAM, &amu880_state::amu880_mem); @@ -321,9 +322,9 @@ MACHINE_CONFIG_START(amu880_state::amu880) TIMER(config, "keyboard").configure_periodic(FUNC(amu880_state::keyboard_tick), attotime::from_hz(1500)); /* video hardware */ - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_UPDATE_DRIVER(amu880_state, screen_update) - MCFG_SCREEN_RAW_PARAMS(9000000, 576, 0*6, 64*6, 320, 0*10, 24*10) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_screen_update(FUNC(amu880_state::screen_update)); + screen.set_raw(9000000, 576, 0*6, 64*6, 320, 0*10, 24*10); GFXDECODE(config, "gfxdecode", m_palette, gfx_amu880); PALETTE(config, m_palette, palette_device::MONOCHROME); @@ -352,7 +353,7 @@ MACHINE_CONFIG_START(amu880_state::amu880) /* internal ram */ RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} /* ROMs */ diff --git a/src/mame/drivers/hunter2.cpp b/src/mame/drivers/hunter2.cpp index 336d7dbbfd2..5271e19bd86 100644 --- a/src/mame/drivers/hunter2.cpp +++ b/src/mame/drivers/hunter2.cpp @@ -378,19 +378,20 @@ WRITE_LINE_MEMBER(hunter2_state::rxd_w) m_maincpu->set_input_line(NSC800_RSTB, ASSERT_LINE); } -MACHINE_CONFIG_START(hunter2_state::hunter2) +void hunter2_state::hunter2(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", NSC800, XTAL(4'000'000)) - MCFG_DEVICE_PROGRAM_MAP(hunter2_mem) - MCFG_DEVICE_IO_MAP(hunter2_io) + NSC800(config, m_maincpu, XTAL(4'000'000)); + m_maincpu->set_addrmap(AS_PROGRAM, &hunter2_state::hunter2_mem); + m_maincpu->set_addrmap(AS_IO, &hunter2_state::hunter2_io); /* video hardware */ - MCFG_SCREEN_ADD("screen", LCD) - MCFG_SCREEN_REFRESH_RATE(80) - MCFG_SCREEN_UPDATE_DEVICE("lcdc", hd61830_device, screen_update) - MCFG_SCREEN_SIZE(240, 128) - MCFG_SCREEN_VISIBLE_AREA(0, 239, 0, 63) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(80); + screen.set_screen_update("lcdc", FUNC(hd61830_device::screen_update)); + screen.set_size(240, 128); + screen.set_visarea(0, 239, 0, 63); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(hunter2_state::hunter2_palette), 2); hd61830_device &hd61830(HD61830(config, "lcdc", XTAL(4'915'200)/2/2)); // unknown clock @@ -398,8 +399,7 @@ MACHINE_CONFIG_START(hunter2_state::hunter2) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ mm58274c_device &rtc(MM58274C(config, "rtc", 0)); @@ -425,7 +425,7 @@ MACHINE_CONFIG_START(hunter2_state::hunter2) ADDRESS_MAP_BANK(config, "bank2").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000); ADDRESS_MAP_BANK(config, "bank3").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000); ADDRESS_MAP_BANK(config, "bank4").set_map(&hunter2_state::hunter2_banked_mem).set_endianness(ENDIANNESS_LITTLE).set_data_width(8).set_stride(0x4000); -MACHINE_CONFIG_END +} /* ROM definition */ ROM_START( hunter2 ) diff --git a/src/mame/drivers/hvyunit.cpp b/src/mame/drivers/hvyunit.cpp index 5ec161435b1..8290f0d6837 100644 --- a/src/mame/drivers/hvyunit.cpp +++ b/src/mame/drivers/hvyunit.cpp @@ -618,22 +618,22 @@ TIMER_DEVICE_CALLBACK_MEMBER(hvyunit_state::scanline) * *************************************/ -MACHINE_CONFIG_START(hvyunit_state::hvyunit) - - MCFG_DEVICE_ADD("master", Z80, XTAL(12'000'000)/2) /* 6MHz verified on PCB */ - MCFG_DEVICE_PROGRAM_MAP(master_memory) - MCFG_DEVICE_IO_MAP(master_io) +void hvyunit_state::hvyunit(machine_config &config) +{ + Z80(config, m_mastercpu, XTAL(12'000'000)/2); /* 6MHz verified on PCB */ + m_mastercpu->set_addrmap(AS_PROGRAM, &hvyunit_state::master_memory); + m_mastercpu->set_addrmap(AS_IO, &hvyunit_state::master_io); TIMER(config, "scantimer").configure_scanline(FUNC(hvyunit_state::scanline), "screen", 0, 1); - MCFG_DEVICE_ADD("slave", Z80, XTAL(12'000'000)/2) /* 6MHz verified on PCB */ - MCFG_DEVICE_PROGRAM_MAP(slave_memory) - MCFG_DEVICE_IO_MAP(slave_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", hvyunit_state, irq0_line_hold) + Z80(config, m_slavecpu, XTAL(12'000'000)/2); /* 6MHz verified on PCB */ + m_slavecpu->set_addrmap(AS_PROGRAM, &hvyunit_state::slave_memory); + m_slavecpu->set_addrmap(AS_IO, &hvyunit_state::slave_io); + m_slavecpu->set_vblank_int("screen", FUNC(hvyunit_state::irq0_line_hold)); - MCFG_DEVICE_ADD("soundcpu", Z80, XTAL(12'000'000)/2) /* 6MHz verified on PCB */ - MCFG_DEVICE_PROGRAM_MAP(sound_memory) - MCFG_DEVICE_IO_MAP(sound_io) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", hvyunit_state, irq0_line_hold) + Z80(config, m_soundcpu, XTAL(12'000'000)/2); /* 6MHz verified on PCB */ + m_soundcpu->set_addrmap(AS_PROGRAM, &hvyunit_state::sound_memory); + m_soundcpu->set_addrmap(AS_IO, &hvyunit_state::sound_io); + m_soundcpu->set_vblank_int("screen", FUNC(hvyunit_state::irq0_line_hold)); I80C51(config, m_mermaid, XTAL(12'000'000)/2); /* 6MHz verified on PCB */ m_mermaid->port_in_cb<0>().set(FUNC(hvyunit_state::mermaid_p0_r)); @@ -652,14 +652,14 @@ MACHINE_CONFIG_START(hvyunit_state::hvyunit) config.m_minimum_quantum = attotime::from_hz(6000); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(256, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 240-1) - MCFG_SCREEN_UPDATE_DRIVER(hvyunit_state, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, hvyunit_state, screen_vblank)) - MCFG_SCREEN_PALETTE(m_palette) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(58); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(256, 256); + screen.set_visarea(0, 256-1, 16, 240-1); + screen.set_screen_update(FUNC(hvyunit_state::screen_update)); + screen.screen_vblank().set(FUNC(hvyunit_state::screen_vblank)); + screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_hvyunit); PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 0x800); @@ -673,9 +673,8 @@ MACHINE_CONFIG_START(hvyunit_state::hvyunit) GENERIC_LATCH_8(config, m_soundlatch); m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI); - MCFG_DEVICE_ADD("ymsnd", YM2203, XTAL(12'000'000)/4) /* 3MHz verified on PCB */ - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END + YM2203(config, "ymsnd", XTAL(12'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.80); /* 3MHz verified on PCB */ +} diff --git a/src/mame/drivers/hx20.cpp b/src/mame/drivers/hx20.cpp index bdc4022405a..cd2dd29ff86 100644 --- a/src/mame/drivers/hx20.cpp +++ b/src/mame/drivers/hx20.cpp @@ -19,7 +19,7 @@ TODO: - - m6800.c rewrite + - m6800.cpp rewrite - keyboard interrupt - LCD controller - serial @@ -833,7 +833,7 @@ void hx20_state::machine_start() //************************************************************************** //------------------------------------------------- -// MACHINE_CONFIG( hx20 ) +// machine_config( hx20 ) //------------------------------------------------- MACHINE_CONFIG_START(hx20_state::hx20) @@ -859,13 +859,13 @@ MACHINE_CONFIG_START(hx20_state::hx20) m_subcpu->out_p4_cb().set(FUNC(hx20_state::slave_p4_w)); // video hardware - MCFG_SCREEN_ADD(SCREEN_TAG, LCD) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(120, 32) - MCFG_SCREEN_VISIBLE_AREA(0, 120-1, 0, 32-1) - MCFG_SCREEN_UPDATE_DRIVER(hx20_state, screen_update) - MCFG_SCREEN_PALETTE("palette") + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_LCD)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(120, 32); + screen.set_visarea(0, 120-1, 0, 32-1); + screen.set_screen_update(FUNC(hx20_state::screen_update)); + screen.set_palette("palette"); PALETTE(config, "palette", FUNC(hx20_state::hx20_palette), 2); @@ -903,7 +903,7 @@ MACHINE_CONFIG_END //------------------------------------------------- -// MACHINE_CONFIG( hx20 ) +// machine_config( hx20 ) //------------------------------------------------- void hx20_state::cm6000(machine_config &config) diff --git a/src/mame/drivers/hyhoo.cpp b/src/mame/drivers/hyhoo.cpp index 0a82b3dfcab..c8a739f01f9 100644 --- a/src/mame/drivers/hyhoo.cpp +++ b/src/mame/drivers/hyhoo.cpp @@ -226,23 +226,23 @@ static INPUT_PORTS_START( hyhoo2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END -MACHINE_CONFIG_START(hyhoo_state::hyhoo) - +void hyhoo_state::hyhoo(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, 5000000) /* 5.00 MHz ?? */ - MCFG_DEVICE_PROGRAM_MAP(hyhoo_map) - MCFG_DEVICE_IO_MAP(hyhoo_io_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", hyhoo_state, irq0_line_hold) + Z80(config, m_maincpu, 5000000); /* 5.00 MHz ?? */ + m_maincpu->set_addrmap(AS_PROGRAM, &hyhoo_state::hyhoo_map); + m_maincpu->set_addrmap(AS_IO, &hyhoo_state::hyhoo_io_map); + m_maincpu->set_vblank_int("screen", FUNC(hyhoo_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 16, 240-1) - MCFG_SCREEN_UPDATE_DRIVER(hyhoo_state, screen_update_hyhoo) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_size(512, 256); + m_screen->set_visarea(0, 512-1, 16, 240-1); + m_screen->set_screen_update(FUNC(hyhoo_state::screen_update_hyhoo)); NB1413M3(config, m_nb1413m3, 0, NB1413M3_HYHOO); @@ -258,7 +258,7 @@ MACHINE_CONFIG_START(hyhoo_state::hyhoo) voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -MACHINE_CONFIG_END +} void hyhoo_state::hyhoo2(machine_config &config) diff --git a/src/mame/drivers/hyperscan.cpp b/src/mame/drivers/hyperscan.cpp index a4b07977096..99ff480f937 100644 --- a/src/mame/drivers/hyperscan.cpp +++ b/src/mame/drivers/hyperscan.cpp @@ -621,22 +621,23 @@ void hyperscan_state::machine_reset() } -MACHINE_CONFIG_START(hyperscan_state::hyperscan) +void hyperscan_state::hyperscan(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", SCORE7, XTAL(27'000'000) * 4) // 108MHz S+core 7 - MCFG_DEVICE_PROGRAM_MAP(spg290_mem) + SCORE7(config, m_maincpu, XTAL(27'000'000) * 4); // 108MHz S+core 7 + m_maincpu->set_addrmap(AS_PROGRAM, &hyperscan_state::spg290_mem); SOFTWARE_LIST(config, "cd_list").set_original("hyperscan"); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DRIVER(hyperscan_state, spg290_screen_update) - MCFG_SCREEN_SIZE(640, 480) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, hyperscan_state, spg290_vblank_irq)) -MACHINE_CONFIG_END + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(50); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update(FUNC(hyperscan_state::spg290_screen_update)); + screen.set_size(640, 480); + screen.set_visarea(0, 640-1, 0, 480-1); + screen.screen_vblank().set(FUNC(hyperscan_state::spg290_vblank_irq)); +} /* ROM definition */ diff --git a/src/mame/drivers/hyprduel.cpp b/src/mame/drivers/hyprduel.cpp index 982b72ab30e..0f31f12ce74 100644 --- a/src/mame/drivers/hyprduel.cpp +++ b/src/mame/drivers/hyprduel.cpp @@ -432,30 +432,32 @@ MACHINE_START_MEMBER(hyprduel_state,hyprduel) m_vblank_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hyprduel_state::vblank_end_callback), this)); } -MACHINE_CONFIG_START(hyprduel_state::i4220_config) +void hyprduel_state::i4220_config(machine_config &config) +{ I4220(config, m_vdp, XTAL(26'666'000)); m_vdp->blit_irq_cb().set(FUNC(hyprduel_state::vdp_blit_end_w)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) - MCFG_SCREEN_REFRESH_RATE(60) // Unknown/Unverified - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, FIRST_VISIBLE_LINE, LAST_VISIBLE_LINE) - MCFG_SCREEN_UPDATE_DEVICE("vdp", imagetek_i4100_device, screen_update) - MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE("vdp", imagetek_i4100_device, screen_eof)) - MCFG_SCREEN_PALETTE(":vdp:palette") -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(hyprduel_state::hyprduel) + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_video_attributes(VIDEO_UPDATE_SCANLINE); + screen.set_refresh_hz(60); // Unknown/Unverified + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(320, 224); + screen.set_visarea(0, 320-1, FIRST_VISIBLE_LINE, LAST_VISIBLE_LINE); + screen.set_screen_update("vdp", FUNC(imagetek_i4100_device::screen_update)); + screen.screen_vblank().set("vdp", FUNC(imagetek_i4100_device::screen_eof)); + screen.set_palette(":vdp:palette"); +} +void hyprduel_state::hyprduel(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000,20000000/2) /* 10MHz */ - MCFG_DEVICE_PROGRAM_MAP(hyprduel_map) + M68000(config, m_maincpu, 20000000/2); /* 10MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &hyprduel_state::hyprduel_map); + TIMER(config, "scantimer").configure_scanline(FUNC(hyprduel_state::interrupt), "screen", 0, 1); - MCFG_DEVICE_ADD("sub", M68000,20000000/2) /* 10MHz */ - MCFG_DEVICE_PROGRAM_MAP(hyprduel_map2) + M68000(config, m_subcpu, 20000000/2); /* 10MHz */ + m_subcpu->set_addrmap(AS_PROGRAM, &hyprduel_state::hyprduel_map2); MCFG_MACHINE_START_OVERRIDE(hyprduel_state,hyprduel) @@ -469,21 +471,21 @@ MACHINE_CONFIG_START(hyprduel_state::hyprduel) ymsnd.irq_handler().set_inputline(m_subcpu, 1); ymsnd.add_route(ALL_OUTPUTS, "mono", 0.80); - MCFG_DEVICE_ADD("oki", OKIM6295, 4000000/16/16*132, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.57) -MACHINE_CONFIG_END - + OKIM6295(config, "oki", 4000000/16/16*132, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.57); // clock frequency & pin 7 not verified +} -MACHINE_CONFIG_START(hyprduel_state::magerror) +void hyprduel_state::magerror(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000,20000000/2) /* 10MHz */ - MCFG_DEVICE_PROGRAM_MAP(magerror_map) + M68000(config, m_maincpu, 20000000/2); /* 10MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &hyprduel_state::magerror_map); + TIMER(config, "scantimer").configure_scanline(FUNC(hyprduel_state::interrupt), "screen", 0, 1); - MCFG_DEVICE_ADD("sub", M68000,20000000/2) /* 10MHz */ - MCFG_DEVICE_PROGRAM_MAP(magerror_map2) - MCFG_DEVICE_PERIODIC_INT_DRIVER(hyprduel_state, irq1_line_hold, 968) /* tempo? */ + M68000(config, m_subcpu, 20000000/2); /* 10MHz */ + m_subcpu->set_addrmap(AS_PROGRAM, &hyprduel_state::magerror_map2); + m_subcpu->set_periodic_int(FUNC(hyprduel_state::irq1_line_hold), attotime::from_hz(968)); /* tempo? */ MCFG_MACHINE_START_OVERRIDE(hyprduel_state,hyprduel) @@ -493,12 +495,10 @@ MACHINE_CONFIG_START(hyprduel_state::magerror) /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("ymsnd", YM2413, 3579545) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + YM2413(config, "ymsnd", 3579545).add_route(ALL_OUTPUTS, "mono", 1.00); - MCFG_DEVICE_ADD("oki", OKIM6295, 4000000/16/16*132, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.57) -MACHINE_CONFIG_END + OKIM6295(config, "oki", 4000000/16/16*132, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.57); // clock frequency & pin 7 not verified +} /*************************************************************************** ROMs Loading diff --git a/src/mame/drivers/jpmmps.cpp b/src/mame/drivers/jpmmps.cpp index a1b00b147f1..c2f759d8a91 100644 --- a/src/mame/drivers/jpmmps.cpp +++ b/src/mame/drivers/jpmmps.cpp @@ -184,19 +184,19 @@ void jpmmps_state::jpmmps_map(address_map &map) void jpmmps_state::jpmmps_io_map(address_map &map) { - map.global_mask(0xff); - map(0x0000, 0x001f).rw(UART_IC5, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); + map.global_mask(0x1ff); + map(0x0000, 0x003f).rw(UART_IC5, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); -// AM_RANGE(0x0020, 0x0020) // power fail -// AM_RANGE(0x0021, 0x0021) // wd timeout -// AM_RANGE(0x0022, 0x0022) // invalid access -// AM_RANGE(0x0023, 0x0023) // clear down +// AM_RANGE(0x0040, 0x0041) // power fail +// AM_RANGE(0x0042, 0x0043) // wd timeout +// AM_RANGE(0x0044, 0x0045) // invalid access +// AM_RANGE(0x0046, 0x0047) // clear down -// AM_RANGE(0x0026, 0x0026) // uart4 int -// AM_RANGE(0x0027, 0x0027) // uart2 int +// AM_RANGE(0x004c, 0x004d) // uart4 int +// AM_RANGE(0x004e, 0x004f) // uart2 int - map(0x0040, 0x005f).rw(UART_IC10, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); - map(0x0060, 0x0067).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x0080, 0x00bf).rw(UART_IC10, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); + map(0x00c0, 0x00cf).w("mainlatch", FUNC(ls259_device::write_d0)); } diff --git a/src/mame/drivers/jpms80.cpp b/src/mame/drivers/jpms80.cpp index 718f91c464e..79092705dd5 100644 --- a/src/mame/drivers/jpms80.cpp +++ b/src/mame/drivers/jpms80.cpp @@ -101,21 +101,21 @@ void jpms80_state::jpms80_map(address_map &map) void jpms80_state::jpms80_io_map(address_map &map) { - map.global_mask(0x1ff); + map.global_mask(0x3ff); // AM_RANGE(0x0000, 0x001f) // I/O & Optic (in) - map(0x0000, 0x0007).w("outlatch0", FUNC(ls259_device::write_d0)); - map(0x0008, 0x000f).w("outlatch1", FUNC(ls259_device::write_d0)); - map(0x0010, 0x0017).w("outlatch2", FUNC(ls259_device::write_d0)); - map(0x0018, 0x001f).w("outlatch3", FUNC(ls259_device::write_d0)); - map(0x0020, 0x0027).w("outlatch4", FUNC(ls259_device::write_d0)); - map(0x0028, 0x002f).w("outlatch5", FUNC(ls259_device::write_d0)); - map(0x0030, 0x0037).w("outlatch6", FUNC(ls259_device::write_d0)); - map(0x0038, 0x003f).w("outlatch7", FUNC(ls259_device::write_d0)); - map(0x0040, 0x0047).w("outlatch8", FUNC(ls259_device::write_d0)); - map(0x0048, 0x004f).w("outlatch9", FUNC(ls259_device::write_d0)); - map(0x0050, 0x0057).w("outlatch10", FUNC(ls259_device::write_d0)); -// AM_RANGE(0x0140, 0x015f) // AY - map(0x01e0, 0x01ff).rw(m_acc, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); + map(0x0000, 0x000f).w("outlatch0", FUNC(ls259_device::write_d0)); + map(0x0010, 0x001f).w("outlatch1", FUNC(ls259_device::write_d0)); + map(0x0020, 0x002f).w("outlatch2", FUNC(ls259_device::write_d0)); + map(0x0030, 0x003f).w("outlatch3", FUNC(ls259_device::write_d0)); + map(0x0040, 0x004f).w("outlatch4", FUNC(ls259_device::write_d0)); + map(0x0050, 0x005f).w("outlatch5", FUNC(ls259_device::write_d0)); + map(0x0060, 0x006f).w("outlatch6", FUNC(ls259_device::write_d0)); + map(0x0070, 0x007f).w("outlatch7", FUNC(ls259_device::write_d0)); + map(0x0080, 0x008f).w("outlatch8", FUNC(ls259_device::write_d0)); + map(0x0090, 0x009f).w("outlatch9", FUNC(ls259_device::write_d0)); + map(0x00a0, 0x00af).w("outlatch10", FUNC(ls259_device::write_d0)); +// AM_RANGE(0x0380, 0x03bf) // AY + map(0x03c0, 0x03ff).rw(m_acc, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); // Lamps, Meters etc. can move around } diff --git a/src/mame/drivers/jubilee.cpp b/src/mame/drivers/jubilee.cpp index 799d18ebcaf..1fd5617df9f 100644 --- a/src/mame/drivers/jubilee.cpp +++ b/src/mame/drivers/jubilee.cpp @@ -569,19 +569,19 @@ READ8_MEMBER(jubilee_state::mux_port_r) { switch( mux_sel ) { - case 0x01: return ioport("IN0")->read(); - case 0x02: return ioport("IN1")->read(); /* muxed credits input is here! */ - case 0x03: return ioport("IN2")->read(); + case 0x01: return BIT(ioport("IN0")->read(), offset); + case 0x02: return BIT(ioport("IN1")->read(), offset); /* muxed credits input is here! */ + case 0x03: return BIT(ioport("IN2")->read(), offset); } - return 0xff; + return 1; } void jubilee_state::jubileep_cru_map(address_map &map) { - map(0x00c8, 0x00c8).r(FUNC(jubilee_state::mux_port_r)); /* multiplexed input port */ - map(0x0000, 0x07ff).w(FUNC(jubilee_state::unk_w)); + map(0x0c80, 0x0c8f).r(FUNC(jubilee_state::mux_port_r)); /* multiplexed input port */ + map(0x0000, 0x0fff).w(FUNC(jubilee_state::unk_w)); } /* I/O byte R/W diff --git a/src/mame/drivers/jvh.cpp b/src/mame/drivers/jvh.cpp index 0a2c546f366..d0acac1d6d9 100644 --- a/src/mame/drivers/jvh.cpp +++ b/src/mame/drivers/jvh.cpp @@ -49,28 +49,28 @@ void jvh_state::jvh_map(address_map &map) void jvh_state::escape_io(address_map &map) { - //AM_RANGE(0x01, 0x02) AM_READ(sw1_r) - //AM_RANGE(0x03, 0x05) AM_READ(dip_r) - //AM_RANGE(0x06, 0x07) AM_READ(sw6_r) - //AM_RANGE(0x10, 0x15) AM_WRITE(snd_w) - //AM_RANGE(0x16, 0x16) AM_WRITE(latch_w) - //AM_RANGE(0x17, 0x19) AM_WRITE(out1a_w) - //AM_RANGE(0x1a, 0x1a) AM_WRITE(enable_w) - //AM_RANGE(0x1b, 0x1f) AM_WRITE(out1b_w) - //AM_RANGE(0x20, 0x27) AM_WRITE(out2a_w) - //AM_RANGE(0x28, 0x2f) AM_WRITE(out2b_w) - //AM_RANGE(0x30, 0x37) AM_WRITE(out3a_w) - //AM_RANGE(0x3e, 0x3e) AM_WRITE(irq_enable) - //AM_RANGE(0x3f, 0x3f) AM_WRITE(zc_enable) - //AM_RANGE(0x40, 0x47) AM_WRITE(digit_w) - //AM_RANGE(0x48, 0x4b) AM_WRITE(bcd_w) - //AM_RANGE(0x4c, 0x50) AM_WRITE(panel_w) - //AM_RANGE(0x51, 0x55) AM_WRITE(col_w) - //AM_RANGE(0x58, 0x5f) AM_WRITE(out5b_w) - //AM_RANGE(0x60, 0x67) AM_WRITE(out6a_w) - //AM_RANGE(0x68, 0x6f) AM_WRITE(out6b_w) - //AM_RANGE(0x70, 0x74) AM_WRITE(out7a_w) - //AM_RANGE(0x75, 0x7f) AM_WRITE(sol_w) + //map(0x0010, 0x002f).r(FUNC(jvh_state::sw1_r)); + //map(0x0030, 0x005f).r(FUNC(jvh_state::dip_r)); + //map(0x0060, 0x007f).r(FUNC(jvh_state::sw6_r)); + //map(0x0020, 0x002b).w(FUNC(jvh_state::snd_w)); + //map(0x002c, 0x002d).w(FUNC(jvh_state::latch_w)); + //map(0x002e, 0x0033).w(FUNC(jvh_state::out1a_w)); + //map(0x0034, 0x0035).w(FUNC(jvh_state::enable_w)); + //map(0x0036, 0x003f).w(FUNC(jvh_state::out1b_w)); + //map(0x0040, 0x004f).w(FUNC(jvh_state::out2a_w)); + //map(0x0050, 0x005f).w(FUNC(jvh_state::out2b_w)); + //map(0x0060, 0x006f).w(FUNC(jvh_state::out3a_w)); + //map(0x007c, 0x007d).w(FUNC(jvh_state::irq_enable)); + //map(0x007e, 0x007f).w(FUNC(jvh_state::zc_enable)); + //map(0x0080, 0x008f).w(FUNC(jvh_state::digit_w)); + //map(0x0090, 0x0097).w(FUNC(jvh_state::bcd_w)); + //map(0x0098, 0x00a1).w(FUNC(jvh_state::panel_w)); + //map(0x00a2, 0x00ab).w(FUNC(jvh_state::col_w)); + //map(0x00b0, 0x00bf).w(FUNC(jvh_state::out5b_w)); + //map(0x00c0, 0x00cf).w(FUNC(jvh_state::out6a_w)); + //map(0x00d0, 0x00df).w(FUNC(jvh_state::out6b_w)); + //map(0x00e0, 0x00e9).w(FUNC(jvh_state::out7a_w)); + //map(0x00ea, 0x00ff).w(FUNC(jvh_state::sol_w)); } void jvh_state::movmastr_io(address_map &map) diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp index 4f15eb5af88..04202e11ff0 100644 --- a/src/mame/drivers/looping.cpp +++ b/src/mame/drivers/looping.cpp @@ -567,7 +567,7 @@ void looping_state::looping_map(address_map &map) void looping_state::looping_io_map(address_map &map) { - map(0x400, 0x407).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x0800, 0x080f).w("mainlatch", FUNC(ls259_device::write_d0)); } @@ -587,8 +587,8 @@ void looping_state::looping_sound_map(address_map &map) void looping_state::looping_sound_io_map(address_map &map) { - map(0x000, 0x007).w("sen0", FUNC(ls259_device::write_d0)); - map(0x008, 0x00f).w("sen1", FUNC(ls259_device::write_d0)); + map(0x0000, 0x000f).w("sen0", FUNC(ls259_device::write_d0)); + map(0x0010, 0x001f).w("sen1", FUNC(ls259_device::write_d0)); } diff --git a/src/mame/drivers/nsm.cpp b/src/mame/drivers/nsm.cpp index d8f10617a91..649e5ee0a84 100644 --- a/src/mame/drivers/nsm.cpp +++ b/src/mame/drivers/nsm.cpp @@ -65,18 +65,18 @@ void nsm_state::nsm_map(address_map &map) void nsm_state::nsm_io_map(address_map &map) { // 00-71 selected by IC600 (74LS151) - map(0x0000, 0x0001).r(FUNC(nsm_state::ff_r)); // 5v supply - map(0x0010, 0x0011).nopr(); // antenna - map(0x0020, 0x0021).nopr(); // reset circuit - map(0x0030, 0x0031).r(FUNC(nsm_state::ff_r)); // service plug - map(0x0040, 0x0041).r(FUNC(nsm_state::ff_r)); // service plug - map(0x0050, 0x0051).r(FUNC(nsm_state::ff_r)); // test of internal battery - map(0x0060, 0x0061).r(FUNC(nsm_state::ff_r)); // sum of analog outputs of ay2 - //AM_RANGE(0x0070, 0x0071) AM_READNOP // serial data in - map(0x0f70, 0x0f7d).nopw(); - map(0x0fe4, 0x0fff).nopr(); - map(0x7fb0, 0x7fbf).w(FUNC(nsm_state::cru_w)); - map(0x7fd0, 0x7fd1).w(FUNC(nsm_state::oe_w)); + map(0x0000, 0x001f).r(FUNC(nsm_state::ff_r)); // 5v supply + map(0x0100, 0x011f).nopr(); // antenna + map(0x0200, 0x021f).nopr(); // reset circuit + map(0x0300, 0x031f).r(FUNC(nsm_state::ff_r)); // service plug + map(0x0400, 0x041f).r(FUNC(nsm_state::ff_r)); // service plug + map(0x0500, 0x051f).r(FUNC(nsm_state::ff_r)); // test of internal battery + map(0x0600, 0x061f).r(FUNC(nsm_state::ff_r)); // sum of analog outputs of ay2 + //map(0x0700, 0x071f).nopr(); // serial data in + map(0x1ee0, 0x1efb).nopw(); + map(0xfe40, 0xfff0).nopr(); + map(0xff60, 0xff7f).w(FUNC(nsm_state::cru_w)); + map(0xffa0, 0xffa3).w(FUNC(nsm_state::oe_w)); } static INPUT_PORTS_START( nsm ) diff --git a/src/mame/drivers/nsmpoker.cpp b/src/mame/drivers/nsmpoker.cpp index bfa658193d3..a9f4e995120 100644 --- a/src/mame/drivers/nsmpoker.cpp +++ b/src/mame/drivers/nsmpoker.cpp @@ -175,7 +175,7 @@ INTERRUPT_GEN_MEMBER(nsmpoker_state::nsmpoker_interrupt) READ8_MEMBER(nsmpoker_state::debug_r) { - return machine().rand() & 0xff; + return BIT(machine().rand(), offset); } @@ -194,8 +194,8 @@ void nsmpoker_state::nsmpoker_map(address_map &map) void nsmpoker_state::nsmpoker_portmap(address_map &map) { - map.global_mask(0xff); - map(0xf0, 0xf0).r(FUNC(nsmpoker_state::debug_r)); // kind of trap at beginning + map.global_mask(0xfff); + map(0xf00, 0xf0f).r(FUNC(nsmpoker_state::debug_r)); // kind of trap at beginning } /* I/O byte R/W diff --git a/src/mame/drivers/pachifev.cpp b/src/mame/drivers/pachifev.cpp index 1f52f99fadb..83644f137e9 100644 --- a/src/mame/drivers/pachifev.cpp +++ b/src/mame/drivers/pachifev.cpp @@ -167,7 +167,7 @@ void pachifev_state::pachifev_map(address_map &map) void pachifev_state::pachifev_cru(address_map &map) { - map(0x000, 0x000).r(FUNC(pachifev_state::controls_r)); + map(0x0000, 0x0001).r(FUNC(pachifev_state::controls_r)); } diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index d897d6f6a91..1b13df462e6 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -2434,7 +2434,9 @@ static INPUT_PORTS_START( dunkshot ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_MODIFY("DSW2") - //"SW2:1" unused + PORT_DIPNAME( 0x01, 0x00, "Winner Advances" ) PORT_DIPLOCATION("SW2:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -2451,7 +2453,9 @@ static INPUT_PORTS_START( dunkshot ) PORT_DIPNAME( 0x40, 0x40, "CPU Starts With +6 Pts." ) PORT_DIPLOCATION("SW2:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - //"SW2:8" unused + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("ANALOGX1") // fake analog X PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(75) PORT_KEYDELTA(5) PORT_PLAYER(1) PORT_REVERSE @@ -2479,6 +2483,15 @@ static INPUT_PORTS_START( dunkshot ) INPUT_PORTS_END +static INPUT_PORTS_START( dunkshoto ) + PORT_INCLUDE( dunkshot ) + + PORT_MODIFY("DSW2") + PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:1" ) + PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" ) +INPUT_PORTS_END + + static INPUT_PORTS_START( eswat ) PORT_INCLUDE( system16b_generic ) @@ -5288,6 +5301,9 @@ ROM_END // Cotton, Sega System 16B // CPU: FD1094 (317-0181A) // ROM Board type: 171-5704 +// Sega game ID: 833-8021-02 COTTON +// Main board: 837-8023-02 +// ROM board: 834-8022-02 // ROM_START( cotton ) ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code @@ -9254,9 +9270,9 @@ GAME( 1988, ddux, 0, system16b_fd1094, ddux, segas16b_stat GAME( 1988, dduxj, ddux, system16b_fd1094, ddux, segas16b_state, init_generic_5521, ROT0, "Sega", "Dynamite Dux (set 2, Japan) (FD1094 317-0094)", 0 ) GAME( 1988, ddux1, ddux, system16b_i8751, ddux, segas16b_state, init_ddux_5704, ROT0, "Sega", "Dynamite Dux (set 1) (8751 317-0095)", 0 ) -GAME( 1987, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev C, FD1089A 317-0022)", 0 ) -GAME( 1987, dunkshota, dunkshot, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev A, FD1089A 317-0022)", 0 ) -GAME( 1986, dunkshoto, dunkshot, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 ) +GAME( 1987, dunkshot, 0, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev C, FD1089A 317-0022)", 0 ) +GAME( 1987, dunkshota, dunkshot, system16b_fd1089a, dunkshot, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (Rev A, FD1089A 317-0022)", 0 ) +GAME( 1986, dunkshoto, dunkshot, system16b_fd1089a, dunkshoto, segas16b_state, init_dunkshot_5358_small,ROT0, "Sega", "Dunk Shot (FD1089A 317-0022)", 0 ) GAME( 1989, eswat, 0, system16b_fd1094_5797, eswat, segas16b_state, init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 4, World) (FD1094 317-0130)", 0 ) GAME( 1989, eswatu, eswat, system16b_fd1094_5797, eswat, segas16b_state, init_generic_5797, ROT0, "Sega", "E-Swat - Cyber Police (set 3, US) (FD1094 317-0129)", 0 ) diff --git a/src/mame/drivers/si5500.cpp b/src/mame/drivers/si5500.cpp index 9ff4e6b03a6..605466f5a07 100644 --- a/src/mame/drivers/si5500.cpp +++ b/src/mame/drivers/si5500.cpp @@ -41,7 +41,7 @@ private: u8 gpibpsi_input_r(offs_t offset); DECLARE_WRITE_LINE_MEMBER(gpibc_we_w); DECLARE_WRITE_LINE_MEMBER(gpibc_dbin_w); - u8 keypad_r(); + u8 keypad_r(offs_t offset); void mem_map(address_map &map); void cru_map(address_map &map); @@ -106,15 +106,13 @@ WRITE_LINE_MEMBER(si5500_state::gpibc_dbin_w) } } -u8 si5500_state::keypad_r() +u8 si5500_state::keypad_r(offs_t offset) { - u8 result = 0xff; - for (int n = 0; n < 4; n++) if (!BIT(m_keyplatch->output_state(), n)) - result &= m_keypad[n]->read(); - - return result; + if (!BIT(m_keypad[n]->read(), offset)) + return 0; + return 1; } void si5500_state::mem_map(address_map &map) @@ -125,28 +123,19 @@ void si5500_state::mem_map(address_map &map) void si5500_state::cru_map(address_map &map) { - // MAME currently has incompatible addressing for CRU reads and writes - map(0x00, 0x03).r(m_mainpsi, FUNC(tms9901_device::read)); - map(0x08, 0x0b).r("acc", FUNC(tms9902_device::cruread)); - map(0x0c, 0x0f).r("adpsi", FUNC(tms9901_device::read)); - map(0x16, 0x16).nopr(); - map(0x17, 0x17).r(FUNC(si5500_state::keypad_r)); - map(0x40, 0x43).r("nvrpsi", FUNC(tms9901_device::read)); - map(0x44, 0x47).r(m_gpibpsi, FUNC(tms9901_device::read)); - map(0x80, 0xff).r("novram", FUNC(x2201_device::read_byte)); - - map(0x000, 0x01f).w(m_mainpsi, FUNC(tms9901_device::write)); - map(0x040, 0x05f).w("acc", FUNC(tms9902_device::cruwrite)); - map(0x060, 0x07f).w("adpsi", FUNC(tms9901_device::write)); - map(0x080, 0x087).w("outlatch1", FUNC(ls259_device::write_d0)); - map(0x088, 0x08f).w("outlatch2", FUNC(ls259_device::write_d0)); - map(0x090, 0x097).w("outlatch3", FUNC(ls259_device::write_d0)); - map(0x0a0, 0x0a7).w("outlatch4", FUNC(ls259_device::write_d0)); - map(0x0a8, 0x0af).w("outlatch5", FUNC(ls259_device::write_d0)); - map(0x0b0, 0x0bf).w(m_keyplatch, FUNC(ls259_device::write_d0)); - map(0x200, 0x21f).w("nvrpsi", FUNC(tms9901_device::write)); - map(0x220, 0x23f).w(m_gpibpsi, FUNC(tms9901_device::write)); - map(0x400, 0x7ff).w("novram", FUNC(x2201_device::write)); + map(0x0000, 0x003f).rw(m_mainpsi, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); + map(0x0080, 0x00bf).rw("acc", FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); + map(0x00c0, 0x00ff).rw("adpsi", FUNC(tms9901_device::read), FUNC(tms9901_device::write)); + map(0x0100, 0x010f).w("outlatch1", FUNC(ls259_device::write_d0)); + map(0x0110, 0x011f).w("outlatch2", FUNC(ls259_device::write_d0)); + map(0x0120, 0x012f).w("outlatch3", FUNC(ls259_device::write_d0)); + map(0x0140, 0x014f).w("outlatch4", FUNC(ls259_device::write_d0)); + map(0x0150, 0x015f).w("outlatch5", FUNC(ls259_device::write_d0)); + map(0x0160, 0x016f).w(m_keyplatch, FUNC(ls259_device::write_d0)).nopr(); + map(0x0170, 0x017f).r(FUNC(si5500_state::keypad_r)); + map(0x0400, 0x043f).rw("nvrpsi", FUNC(tms9901_device::read), FUNC(tms9901_device::write)); + map(0x0440, 0x047f).rw(m_gpibpsi, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); + map(0x0800, 0x0fff).rw("novram", FUNC(x2201_device::read), FUNC(x2201_device::write)); } static INPUT_PORTS_START(si5500) diff --git a/src/mame/drivers/spg110.cpp b/src/mame/drivers/spg110.cpp index e87f6996ee7..e75bbe4faaa 100644 --- a/src/mame/drivers/spg110.cpp +++ b/src/mame/drivers/spg110.cpp @@ -8,6 +8,8 @@ "SunPlus PA7801" ( known as Sunplus SPG110? ) Classic Arcade Pinball + EA Sports (NHL95 + Madden 95) + Spiderman 5-in-1 (original release) *******************************************************************************/ @@ -78,5 +80,12 @@ ROM_START( jak_capb ) ROM_LOAD16_WORD_SWAP( "classicarcadepinball.bin", 0x000000, 0x200000, CRC(b643dab0) SHA1(f57d546758ba442e28b5f0f48b3819b2fc2eb7f7) ) ROM_END + +ROM_START( jak_spdmo ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "spidermaneyes.bin", 0x000000, 0x200000, CRC(d5eaa6ae) SHA1(df226d378b41cf6ef90b9f72e48ff5e66385dcba) ) +ROM_END + // JAKKS Pacific Inc TV games -CONS( 2004, jak_capb, 0, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2004, jak_capb, 0, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Classic Arcade Pinball (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2004, jak_spdmo, jak_spdm, 0, spg110_base, spg110, spg110_game_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Spider-Man (JAKKS Pacific TV Game) (older hardare)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // this is the smaller more 'square' style joystick that was originally released before the GameKey slot was added. diff --git a/src/mame/drivers/supertnk.cpp b/src/mame/drivers/supertnk.cpp index 451c9d57b58..92c009d8b86 100644 --- a/src/mame/drivers/supertnk.cpp +++ b/src/mame/drivers/supertnk.cpp @@ -346,8 +346,8 @@ void supertnk_state::supertnk_map(address_map &map) void supertnk_state::supertnk_io_map(address_map &map) { - map(0x0000, 0x0000).nopw(); - map(0x0400, 0x0407).w("outlatch", FUNC(ls259_device::write_d0)); + map(0x0000, 0x0001).nopw(); + map(0x0800, 0x080f).w("outlatch", FUNC(ls259_device::write_d0)); } diff --git a/src/mame/drivers/ti990_4.cpp b/src/mame/drivers/ti990_4.cpp index 00170f41f00..22520495a9a 100644 --- a/src/mame/drivers/ti990_4.cpp +++ b/src/mame/drivers/ti990_4.cpp @@ -115,8 +115,8 @@ void ti990_4_state::device_timer(emu_timer &timer, device_timer_id id, int param READ8_MEMBER( ti990_4_state::panel_read ) { - if (offset == 1) - return 0x48; + if (offset == 11 || offset == 14) + return 1; return 0; } @@ -227,47 +227,37 @@ void ti990_4_state::memmap(address_map &map) /* CRU map - 0x000-0xF7F: user devices - 0xF80-0xF9F: CRU interrupt + expansion control - 0xFA0-0xFAF: TILINE coupler interrupt control - 0xFB0-0xFCF: reserved - 0xFD0-0xFDF: memory mapping and memory protect - 0xFE0-0xFEF: internal interrupt control - 0xFF0-0xFFF: front panel + 0x0000-0x1EFF: user devices + 0x1F00-0x1F3F: CRU interrupt + expansion control + 0x1F40-0x1F5F: TILINE coupler interrupt control + 0x1F60-0x1F9F: reserved + 0x1FA0-0x1FBF: memory mapping and memory protect + 0x1FC0-0x1FDF: internal interrupt control + 0x1FF0-0x1FFF: front panel Default user map: - 0x000-0x00f: 733 ASR (int 6) - 0x010-0x01f: PROM programmer (wired to int 15, unused) - 0x020-0x02f: 804 card reader (int 4) - 0x030-0x03f: line printer (wired to int 14, unused) - 0x040-0x05f: FD800 floppy controller (int 7) - 0x060-0x07f: VDT1 (int 3 - wired to int 11, unused) - 0x080-0x09f: VDT2, or CRU expansion (int ??? - wired to int 10, unused) - 0x0a0-0x0bf: VDT3 (int ??? - wired to int 9, unused) + 0x0000-0x001f: 733 ASR (int 6) + 0x0020-0x003f: PROM programmer (wired to int 15, unused) + 0x0040-0x005f: 804 card reader (int 4) + 0x0060-0x007f: line printer (wired to int 14, unused) + 0x0080-0x00bf: FD800 floppy controller (int 7) + 0x00c0-0x00ff: VDT1 (int 3 - wired to int 11, unused) + 0x0100-0x013f: VDT2, or CRU expansion (int ??? - wired to int 10, unused) + 0x0140-0x017f: VDT3 (int ??? - wired to int 9, unused) */ void ti990_4_state::crumap(address_map &map) { - map(0x00, 0x01).r("asr733", FUNC(asr733_device::cru_r)); - map(0x00, 0x0f).w("asr733", FUNC(asr733_device::cru_w)); - - map(0x08, 0x0b).r(m_fd800, FUNC(fd800_legacy_device::cru_r)); - map(0x40, 0x5f).w(m_fd800, FUNC(fd800_legacy_device::cru_w)); - - map(0x1fe, 0x1ff).r(FUNC(ti990_4_state::panel_read)); - map(0xff0, 0xfff).w(FUNC(ti990_4_state::panel_write)); + map(0x0000, 0x001f).rw("asr733", FUNC(asr733_device::cru_r), FUNC(asr733_device::cru_w)); + map(0x0080, 0x00bf).rw(m_fd800, FUNC(fd800_legacy_device::cru_r), FUNC(fd800_legacy_device::cru_w)); + map(0x1fe0, 0x1fff).rw(FUNC(ti990_4_state::panel_read), FUNC(ti990_4_state::panel_write)); } void ti990_4_state::crumap_v(address_map &map) { - map(0x10, 0x11).r("vdt911", FUNC(vdt911_device::cru_r)); - map(0x80, 0x8f).w("vdt911", FUNC(vdt911_device::cru_w)); - - map(0x08, 0x0b).r(m_fd800, FUNC(fd800_legacy_device::cru_r)); - map(0x40, 0x5f).w(m_fd800, FUNC(fd800_legacy_device::cru_w)); - - map(0x1fe, 0x1ff).r(FUNC(ti990_4_state::panel_read)); - map(0xff0, 0xfff).w(FUNC(ti990_4_state::panel_write)); + map(0x0080, 0x00bf).rw(m_fd800, FUNC(fd800_legacy_device::cru_r), FUNC(fd800_legacy_device::cru_w)); + map(0x0100, 0x011f).rw("vdt911", FUNC(vdt911_device::cru_r), FUNC(vdt911_device::cru_w)); + map(0x1fe0, 0x1fff).rw(FUNC(ti990_4_state::panel_read), FUNC(ti990_4_state::panel_write)); } diff --git a/src/mame/drivers/ti99_2.cpp b/src/mame/drivers/ti99_2.cpp index 3a60b4ebf5d..85b2a79ef16 100644 --- a/src/mame/drivers/ti99_2.cpp +++ b/src/mame/drivers/ti99_2.cpp @@ -275,18 +275,13 @@ void ti99_2_state::memmap(address_map &map) /* CRU map - see description above - Note that the CRU address space has only even numbers, and the - read addresses in the emulation gather 8 bits in one go, so the address - is the bit number times 16. */ void ti99_2_state::crumap(address_map &map) { - map(0x0000, 0x0fff).r(m_io992, FUNC(bus::ti99::internal::io992_device::cruread)); - map(0x0000, 0x7fff).w(m_io992, FUNC(bus::ti99::internal::io992_device::cruwrite)); + map(0x0000, 0xffff).rw(m_io992, FUNC(bus::ti99::internal::io992_device::cruread), FUNC(bus::ti99::internal::io992_device::cruwrite)); // Mirror of CPU-internal flags (1ee0-1efe). Don't read. Write is OK. - map(0x01ee, 0x01ef).nopr(); - map(0x0f70, 0x0f7f).w(FUNC(ti99_2_state::intflag_write)); + map(0x1ee0, 0x1eff).nopr().w(FUNC(ti99_2_state::intflag_write)); } /* diff --git a/src/mame/drivers/ti99_4p.cpp b/src/mame/drivers/ti99_4p.cpp index 49f90ad6a60..a29e606a662 100644 --- a/src/mame/drivers/ti99_4p.cpp +++ b/src/mame/drivers/ti99_4p.cpp @@ -309,11 +309,8 @@ void ti99_4p_state::memmap_setoffset(address_map &map) void ti99_4p_state::crumap(address_map &map) { - map(0x0000, 0x01ff).r(FUNC(ti99_4p_state::cruread)); - map(0x0000, 0x003f).r(m_tms9901, FUNC(tms9901_device::read)); - - map(0x0000, 0x0fff).w(FUNC(ti99_4p_state::cruwrite)); - map(0x0000, 0x01ff).w(m_tms9901, FUNC(tms9901_device::write)); + map(0x0000, 0x1fff).rw(FUNC(ti99_4p_state::cruread), FUNC(ti99_4p_state::cruwrite)); + map(0x0000, 0x03ff).rw(m_tms9901, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); } /* diff --git a/src/mame/drivers/ti99_4x.cpp b/src/mame/drivers/ti99_4x.cpp index eaab596de3d..3a92e48df58 100644 --- a/src/mame/drivers/ti99_4x.cpp +++ b/src/mame/drivers/ti99_4x.cpp @@ -249,25 +249,11 @@ void ti99_4x_state::memmap_setoffset(address_map &map) The TMS9901 is incompletely decoded ---0 00xx xxcc ccc0 causing 16 mirrors (0000, 0040, 0080, 00c0, ... , 03c0) - - Reading is done by transfering 8 successive bits, so addresses refer to - 8 bit groups; writing, however, is done using output lines. The CRU base - address in the ti99 systems is twice the bit address: - - (base=0, bit=0x10) == (base=0x20,bit=0) - - Read: 0000 - 003f translates to base addresses 0000 - 03fe - 0000 - 01ff is the complete CRU address space 0000 - 1ffe (for TMS9900) - - Write:0000 - 01ff corresponds to bit 0 of base address 0000 - 03fe */ void ti99_4x_state::crumap(address_map &map) { - map(0x0000, 0x01ff).r(FUNC(ti99_4x_state::cruread)); - map(0x0000, 0x0003).mirror(0x003c).r(m_tms9901, FUNC(tms9901_device::read)); - - map(0x0000, 0x0fff).w(FUNC(ti99_4x_state::cruwrite)); - map(0x0000, 0x001f).mirror(0x01e0).w(m_tms9901, FUNC(tms9901_device::write)); + map(0x0000, 0x1fff).rw(FUNC(ti99_4x_state::cruread), FUNC(ti99_4x_state::cruwrite)); + map(0x0000, 0x003f).mirror(0x03c0).rw(m_tms9901, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); } @@ -419,15 +405,14 @@ INPUT_PORTS_END READ8_MEMBER( ti99_4x_state::cruread ) { - LOGMASKED(LOG_CRUREAD, "read access to CRU address %04x\n", offset << 4); + LOGMASKED(LOG_CRUREAD, "read access to CRU address %04x\n", offset << 1); uint8_t value = 0; // Let the gromport (not in the QI version) and the p-box behind the I/O port // decide whether they want to change the value at the CRU address - // Also, we translate the bit addresses to base addresses - if (m_model != MODEL_4QI) m_gromport->crureadz(space, offset<<4, &value); - m_ioport->crureadz(space, offset<<4, &value); + if (m_model != MODEL_4QI) m_gromport->crureadz(space, offset<<1, &value); + m_ioport->crureadz(space, offset<<1, &value); return value; } diff --git a/src/mame/drivers/ti99_8.cpp b/src/mame/drivers/ti99_8.cpp index 016dc17a284..1f1751baace 100644 --- a/src/mame/drivers/ti99_8.cpp +++ b/src/mame/drivers/ti99_8.cpp @@ -327,11 +327,8 @@ void ti99_8_state::memmap_setoffset(address_map &map) void ti99_8_state::crumap(address_map &map) { - map(0x0000, 0x02ff).r(FUNC(ti99_8_state::cruread)); - map(0x0000, 0x0003).r(m_tms9901, FUNC(tms9901_device::read)); - - map(0x0000, 0x17ff).w(FUNC(ti99_8_state::cruwrite)); - map(0x0000, 0x001f).w(m_tms9901, FUNC(tms9901_device::write)); + map(0x0000, 0x2fff).rw(FUNC(ti99_8_state::cruread), FUNC(ti99_8_state::cruwrite)); + map(0x0000, 0x003f).rw(m_tms9901, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); } /* ti99/8 : 54-key keyboard */ @@ -439,17 +436,16 @@ INPUT_PORTS_END READ8_MEMBER( ti99_8_state::cruread ) { - LOGMASKED(LOG_CRUREAD, "read access to CRU address %04x\n", offset << 4); + LOGMASKED(LOG_CRUREAD, "read access to CRU address %04x\n", offset); uint8_t value = 0; // Let the mapper, the gromport, and the p-box decide whether they want // to change the value at the CRU address - // Also, we translate the bit addresses to base addresses - m_mainboard->crureadz(space, offset<<4, &value); - m_gromport->crureadz(space, offset<<4, &value); - m_ioport->crureadz(space, offset<<4, &value); + m_mainboard->crureadz(space, offset<<1, &value); + m_gromport->crureadz(space, offset<<1, &value); + m_ioport->crureadz(space, offset<<1, &value); - LOGMASKED(LOG_CRU, "CRU %04x -> %02x\n", offset<<4, value); + LOGMASKED(LOG_CRU, "CRU %04x -> %x\n", offset<<1, value); return value; } diff --git a/src/mame/drivers/tm990189.cpp b/src/mame/drivers/tm990189.cpp index 73db95e309f..154f456b9cb 100644 --- a/src/mame/drivers/tm990189.cpp +++ b/src/mame/drivers/tm990189.cpp @@ -812,13 +812,9 @@ void tm990189_state::tm990_189_v_memmap(address_map &map) void tm990189_state::tm990_189_cru_map(address_map &map) { - map(0x0000, 0x003f).r(m_tms9901_usr, FUNC(tms9901_device::read)); /* user I/O tms9901 */ - map(0x0040, 0x006f).r(m_tms9901_sys, FUNC(tms9901_device::read)); /* system I/O tms9901 */ - map(0x0080, 0x00cf).r(m_tms9902, FUNC(tms9902_device::cruread)); /* optional tms9902 */ - - map(0x0000, 0x01ff).w(m_tms9901_usr, FUNC(tms9901_device::write)); /* user I/O tms9901 */ - map(0x0200, 0x03ff).w(m_tms9901_sys, FUNC(tms9901_device::write)); /* system I/O tms9901 */ - map(0x0400, 0x05ff).w(m_tms9902, FUNC(tms9902_device::cruwrite)); /* optional tms9902 */ + map(0x0000, 0x03ff).rw(m_tms9901_usr, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); /* user I/O tms9901 */ + map(0x0400, 0x07ff).rw(m_tms9901_sys, FUNC(tms9901_device::read), FUNC(tms9901_device::write)); /* system I/O tms9901 */ + map(0x0800, 0x0bff).rw(m_tms9902, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite)); /* optional tms9902 */ } void tm990189_state::tm990_189(machine_config &config) diff --git a/src/mame/drivers/tmspoker.cpp b/src/mame/drivers/tmspoker.cpp index 0a658e55cad..d9022124adb 100644 --- a/src/mame/drivers/tmspoker.cpp +++ b/src/mame/drivers/tmspoker.cpp @@ -355,7 +355,7 @@ READ8_MEMBER(tmspoker_state::unk_r) void tmspoker_state::tmspoker_cru_map(address_map &map) { - map(0x0000, 0x07ff).r(FUNC(tmspoker_state::unk_r)); + map(0x0000, 0x7fff).r(FUNC(tmspoker_state::unk_r)); } /* I/O byte R/W diff --git a/src/mame/drivers/tutor.cpp b/src/mame/drivers/tutor.cpp index e17d19012b8..5499cf23f73 100644 --- a/src/mame/drivers/tutor.cpp +++ b/src/mame/drivers/tutor.cpp @@ -296,17 +296,17 @@ READ8_MEMBER( tutor_state::key_r ) char port[12]; uint8_t value; - snprintf(port, ARRAY_LENGTH(port), "LINE%d", offset); + snprintf(port, ARRAY_LENGTH(port), "LINE%d", offset >> 3); value = ioport(port)->read(); /* hack for ports overlapping with joystick */ - if (offset == 4 || offset == 5) + if (offset >= 32 && offset < 48) { - snprintf(port, ARRAY_LENGTH(port), "LINE%d_alt", offset); + snprintf(port, ARRAY_LENGTH(port), "LINE%d_alt", offset >> 3); value |= ioport(port)->read(); } - return value; + return BIT(value, offset & 7); } @@ -600,8 +600,8 @@ void tutor_state::pyuutajr_mem(address_map &map) void tutor_state::tutor_io(address_map &map) { - map(0xec0, 0xec7).r(FUNC(tutor_state::key_r)); /*keyboard interface*/ - map(0xed0, 0xed0).r(FUNC(tutor_state::tutor_cassette_r)); /*cassette interface*/ + map(0xec00, 0xec7f).r(FUNC(tutor_state::key_r)); /*keyboard interface*/ + map(0xed00, 0xed01).r(FUNC(tutor_state::tutor_cassette_r)); /*cassette interface*/ } /* tutor keyboard: 56 keys diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp index 0e45470cb93..96b723e2a3f 100644 --- a/src/mame/drivers/vii.cpp +++ b/src/mame/drivers/vii.cpp @@ -7,38 +7,53 @@ Systems which run on the SPG243 SoC die markings show - "SunPlus QL8041" ( known as Sunplus SPG240? ) - JAKKS WWE - Fantastic 4 - Justice League - Dora the Explorer - Mattel Classic Sports + "SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 ) + + (all GameKeyReady units?) Disney Princess (GKR) Wheel of Fortune (GKR) - (all GameKeyReady units?) - - "SunPlus QL8041C" ( known as Sunplus SPG2?? ) + JAKKS WWE (GKR) + Fantastic 4 (GKR) + Justice League (GKR) + Dora the Explorer Nursery Rhyme (GKR) + Dora the Explorer Play Park (GKR) + Spiderman 5-in-1 (GKR) + etc. + + (other non GKR JAKKS games) + X-Men (Wolverine pad) + Avatar: The Last Airbender + + (other games) + Mattel Classic Sports + + "SunPlus QL8041C" ( known as Sunplus SPG2??, seems to be compatible with above, so probably just a chip revision ) Clickstart ( see clickstart.cpp instead) Wheel of Fortune 2nd Edition - + Spider-man - Villain Roundup "SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead Classic Arcade Pinball EA Sports (NHL95 + Madden 95) + Spiderman 5-in-1 (original release) It is unknown if the following are close to this architecture or not (no dumps yet) "SunPlus QU7073-P69A" Mortal Kombat + "Sunplus PU7799-P680?" (difficult to read) + Mission Paintball + "Sunplus QL8167" - Disney Princess (older) + Disney Princess (newer?) Go Diego Go + Shrek - Over the Hedge (this unit shows a GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB) + Marvel Heroes (Spider-man) + Spiderman 3 (Movie - black) -Disney Princess non-GKR is Sunplus QL8167. - - Status: + Status: Mostly working @@ -271,6 +286,7 @@ public: { } void icanguit(machine_config &config); + void icanpian(machine_config &config); private: virtual void machine_start() override; @@ -976,52 +992,52 @@ INPUT_PORTS_END static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and some strings to map, must be multiplexed somehow? PORT_START("P1") - PORT_DIPNAME( 0x0001, 0x0001, "P1" ) + PORT_DIPNAME( 0x0001, 0x0000, "P1" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -1076,10 +1092,87 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_START("P3") - PORT_DIPNAME( 0x0001, 0x0001, "P3" ) + PORT_DIPNAME( 0x0001, 0x0000, "P3" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Enter? + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( icanpian ) // this has an entire piano keyboard + extras + PORT_START("P1") // the keyboard keys are in here, but each seems triple mapped to 3 octaves so there must be multiplexing + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON4 ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON5 ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON6 ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON7 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON8 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON9 ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON10 ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON11 ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON12 ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON13 ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON14 ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON15 ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P2") + PORT_DIPNAME( 0x0001, 0x0001, "P2" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Enter? + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -1104,7 +1197,9 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -1120,6 +1215,44 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P3") + PORT_DIPNAME( 0x0001, 0x0000, "P3" ) // must be 'ON' to boot + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END @@ -1475,6 +1608,24 @@ void icanguit_state::icanguit(machine_config &config) SOFTWARE_LIST(config, "icanguit_cart").set_original("icanguit"); } +void icanguit_state::icanpian(machine_config &config) +{ + SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen); + + spg2xx_base(config); + + m_spg->porta_in().set_ioport("P1"); + m_spg->portb_in().set_ioport("P2"); + m_spg->portc_in().set_ioport("P3"); + + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "icanpian_cart"); + m_cart->set_width(GENERIC_ROM16_WIDTH); + m_cart->set_device_load(device_image_load_delegate(&icanguit_state::device_image_load_icanguit_cart, this)); + m_cart->set_must_be_loaded(true); + + SOFTWARE_LIST(config, "icanpian_cart").set_original("icanpian"); +} + void spg2xx_game_state::wireless60(machine_config &config) { @@ -1858,6 +2009,10 @@ ROM_START( icanguit ) // no internal ROM, requires a cartridge ROM_END +ROM_START( icanpian ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + // no internal ROM, requires a cartridge +ROM_END /* Wireless Air 60 @@ -2078,6 +2233,7 @@ CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, emp CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Mattel / Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 2007, icanpian, 0, 0, icanpian, icanpian, icanguit_state, empty_init, "Mattel / Fisher-Price", "I Can Play Piano", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // might not fit here. First 0x8000 bytes are blank (not too uncommon for these) then rest of rom looks like it's probably encrypted at least // could be later model VT based instead? even after decrypting (simple word xor) the vectors have a different format and are at a different location to the SunPlus titles diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp index a40f0bf3fcb..93351acb5de 100644 --- a/src/mame/drivers/xavix.cpp +++ b/src/mame/drivers/xavix.cpp @@ -1159,6 +1159,30 @@ static INPUT_PORTS_START( nostalgia ) INPUT_PORTS_END +static INPUT_PORTS_START( tak_geig ) + PORT_INCLUDE(xavix) + + PORT_MODIFY("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) // pause + + PORT_MODIFY("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) // pause + +INPUT_PORTS_END + + static INPUT_PORTS_START( rad_bb ) PORT_INCLUDE(xavix) @@ -1776,6 +1800,10 @@ ROM_START( ltv_tam ) ROM_END +ROM_START( tak_geig ) + ROM_REGION(0x400000, "bios", ROMREGION_ERASE00) + ROM_LOAD("geigeki.bin", 0x000000, 0x400000, CRC(bd0c3576) SHA1(06f614dbec0225ce4ed866b98450912986d72faf) ) +ROM_END /* The e-kara cartridges require the BIOS rom to map into 2nd external bus space as they fetch palette data from @@ -1819,6 +1847,13 @@ ROM_START( epitch ) ROM_RELOAD(0x000000, 0x100000) ROM_END +ROM_START( ekaramix ) + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + // also has a MX87L100C 28-pin chip in the unit, possibly the USB controller. Part of the ROM contains a FAT filesystem that could possibly appear as a USB drive on the PC? + ROM_LOAD( "ekaramix.bin", 0x600000, 0x200000, CRC(ee71576e) SHA1(26f8c9edcbbed77e86a1cb5a0b91c92a16fef433) ) + ROM_RELOAD(0x000000, 0x200000) +ROM_END + ROM_START( ddrfammt ) ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) ROM_LOAD( "ekara_ddr_ha010_81947.bin", 0x600000, 0x200000, CRC(737d5d1a) SHA1(a1043047056dd27bca69767ee2044461ec549465) ) @@ -1924,6 +1959,7 @@ CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_sta CONS( 200?, has_wamg, 0, 0, xavix, has_wamg, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 2002, tak_geig, 0, 0, xavix_nv, tak_geig, xavix_state, init_xavix, "Takara / SSD Company LTD", "Geigeki Go Go Shooting (Japan)", MACHINE_IMPERFECT_SOUND ) /* Music titles: Emulation note: SEEPROM write appears to work (save NVRAM file looks valid) but game fails to read it back properly, fails backup data checksum, and blanks it again. @@ -1939,6 +1975,9 @@ CONS( 2002, ekaraphs, ekara, 0, xavix_cart_ekara, ekara, xavix_ekara_s // epitch (at least the pichi pichi pitch mermaid starter pack) uses the same internal rom as the Japanese ekara, but has less buttons, so some features aren't available (some games also seem to expect to read it with a different layout eg 'a7' cart, but 'a5' cart doesn't, so must be a way to enable that mode, or bug in code?) CONS( 2003, epitch, 0, 0, xavix_cart_ekara, ekara, xavix_ekara_state, init_xavix, "Takara / SSD Company LTD", "e-pitch (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*| MACHINE_IS_BIOS_ROOT*/ ) // shows Japanese message without cart +// e-kara mix was another unit that allowed you to connect to a PC, unlike e-kara web it also functions as a regular device +CONS( 200?, ekaramix, 0, 0, xavix_cart_ekara, ekara, xavix_ekara_state, init_xavix, "Takara / SSD Company LTD", "e-kara Mix (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*| MACHINE_IS_BIOS_ROOT*/ ) + CONS( 2001, ddrfammt, 0, 0, xavix_cart_ddrfammt,ddrfammt, xavix_cart_state, init_xavix, "Takara / Konami / SSD Company LTD", "Dance Dance Revolution Family Mat (Japan)", MACHINE_IMPERFECT_SOUND/*|MACHINE_IS_BIOS_ROOT*/ ) @@ -1952,7 +1991,6 @@ CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_car CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_tam_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Chou Ninki Spot! Korogashi-Houdai Tamagotchi Resort (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) - /* SuperXaviX(?) (XaviX 2000 type CPU) hardware titles (2nd XaviX generation?) these use the SSD 2000 NEC 85605-621 type CPU diff --git a/src/mame/includes/cosmic.h b/src/mame/includes/cosmic.h index 9f19c85b4c7..7d4c6edddf1 100644 --- a/src/mame/includes/cosmic.h +++ b/src/mame/includes/cosmic.h @@ -75,6 +75,7 @@ public: DECLARE_WRITE8_MEMBER(dac_w); DECLARE_READ8_MEMBER(cosmica_pixel_clock_r); DECLARE_READ8_MEMBER(cosmicg_port_0_r); + DECLARE_READ8_MEMBER(cosmicg_port_1_r); DECLARE_READ8_MEMBER(magspot_coinage_dip_r); DECLARE_READ8_MEMBER(nomnlnd_port_0_1_r); DECLARE_WRITE8_MEMBER(flip_screen_w); diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h index 1891a08da76..651c145ce1a 100644 --- a/src/mame/includes/galaxian.h +++ b/src/mame/includes/galaxian.h @@ -426,7 +426,7 @@ protected: required_device<screen_device> m_screen; required_device<palette_device> m_palette; optional_device<generic_latch_8_device> m_soundlatch; - optional_device<discrete_device> m_discrete; + optional_device<discrete_sound_device> m_discrete; optional_ioport m_fake_select; optional_ioport_array<10> m_tenspot_game_dsw; diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h index 33ff44e778d..71c91132daf 100644 --- a/src/mame/includes/galaxold.h +++ b/src/mame/includes/galaxold.h @@ -300,7 +300,7 @@ public: void mooncrst_audio(machine_config &config); void _4in1_map(address_map &map); void bagmanmc_map(address_map &map); - void bongo(address_map &map); + void bongo_map(address_map &map); void bongo_io(address_map &map); void bullsdrtg_data_map(address_map &map); void ckongg_map(address_map &map); @@ -313,7 +313,7 @@ public: void guttang_map(address_map &map); void hexpoola_data(address_map &map); void hexpoola_io(address_map &map); - void hunchbkg(address_map &map); + void hunchbkg_map(address_map &map); void hunchbkg_data(address_map &map); void hustlerb3_map(address_map &map); void mooncrst_map(address_map &map); @@ -327,8 +327,8 @@ public: void scramb3_map(address_map &map); void scramblb_map(address_map &map); void scrambler_map(address_map &map); - void spcwarp(address_map &map); - void tazzmang(address_map &map); + void spcwarp_map(address_map &map); + void tazzmang_map(address_map &map); protected: virtual void machine_start() override { m_leds.resolve(); } diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h index fc5e47d3604..234a2f9b4be 100644 --- a/src/mame/includes/hh_tms1k.h +++ b/src/mame/includes/hh_tms1k.h @@ -57,6 +57,7 @@ public: u8 read_inputs(int columns); u8 read_rotated_inputs(int columns, u8 rowmask = 0xf); + virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button); virtual DECLARE_INPUT_CHANGED_MEMBER(power_button); virtual DECLARE_WRITE_LINE_MEMBER(auto_power_off); virtual void power_off(); diff --git a/src/mame/layout/phpball.lay b/src/mame/layout/phpball.lay index 411c4ffef27..bfaaf062914 100644 --- a/src/mame/layout/phpball.lay +++ b/src/mame/layout/phpball.lay @@ -22,52 +22,51 @@ <view name="Internal Layout"> <bounds left="0" right="100" top="0" bottom="178" /> - <bezel name="digit2" element="digit"><bounds x="25" y="4" width="10" height="15" /></bezel> - <bezel name="digit1" element="digit"><bounds x="35" y="4" width="10" height="15" /></bezel> - <bezel name="digit0" element="digit"><bounds x="45" y="4" width="10" height="15" /></bezel> + <bezel name="digit2" element="digit"><bounds x="26" y="4" width="10" height="15" /></bezel> + <bezel name="digit1" element="digit"><bounds x="36" y="4" width="10" height="15" /></bezel> + <bezel name="digit0" element="digit"><bounds x="46" y="4" width="10" height="15" /></bezel> - <bezel name="3.3" element="led"><bounds x="32.5" y="39.5" width="4.5" height="4.5" /></bezel> - <bezel name="3.1" element="led"><bounds x="41.5" y="39.5" width="4.5" height="4.5" /></bezel> - <bezel name="3.2" element="led"><bounds x="50.5" y="39.5" width="4.5" height="4.5" /></bezel> - <bezel name="5.4" element="led"><bounds x="6.5" y="46.5" width="4.5" height="4.5" /></bezel> - <bezel name="5.0" element="led"><bounds x="81" y="46.5" width="4.5" height="4.5" /></bezel> - <bezel name="5.1" element="led"><bounds x="81" y="92" width="4.5" height="4.5" /></bezel> - <bezel name="5.3" element="led"><bounds x="2.5" y="92" width="4.5" height="4.5" /></bezel> + <bezel name="3.3" element="led"><bounds x="32.5" y="39.5" width="4.5" height="4.5" /></bezel> <!-- 1 --> + <bezel name="3.1" element="led"><bounds x="41.5" y="39.5" width="4.5" height="4.5" /></bezel> <!-- 2 --> + <bezel name="3.2" element="led"><bounds x="50.5" y="39.5" width="4.5" height="4.5" /></bezel> <!-- 3 --> + <bezel name="4.0" element="led"><bounds x="41.5" y="51" width="4.5" height="4.5" /></bezel> <!-- 4 --> + <bezel name="4.1" element="led"><bounds x="56.5" y="60" width="4.5" height="4.5" /></bezel> <!-- 5 --> + <bezel name="4.2" element="led"><bounds x="56.5" y="78" width="4.5" height="4.5" /></bezel> <!-- 6 --> + <bezel name="4.3" element="led"><bounds x="41.5" y="87" width="4.5" height="4.5" /></bezel> <!-- 7 --> + <bezel name="4.4" element="led"><bounds x="26.5" y="78" width="4.5" height="4.5" /></bezel> <!-- 8 --> + <bezel name="4.5" element="led"><bounds x="26.5" y="60" width="4.5" height="4.5" /></bezel> <!-- 9 --> - <bezel name="4.0" element="led"><bounds x="41.5" y="51" width="4.5" height="4.5" /></bezel> - <bezel name="3.0" element="led"><bounds x="41.5" y="69.5" width="4.5" height="4.5" /></bezel> - <bezel name="4.3" element="led"><bounds x="41.5" y="87" width="4.5" height="4.5" /></bezel> - <bezel name="5.2" element="led"><bounds x="41.5" y="105" width="4.5" height="4.5" /></bezel> - <bezel name="6.1" element="led"><bounds x="41.5" y="123" width="4.5" height="4.5" /></bezel> - <bezel name="6.4" element="led"><bounds x="41.5" y="141" width="4.5" height="4.5" /></bezel> - <bezel name="7.1" element="led"><bounds x="41.5" y="171" width="4.5" height="4.5" /></bezel> + <bezel name="5.0" element="led"><bounds x="81" y="46.5" width="4.5" height="4.5" /></bezel> <!-- 10 --> + <bezel name="5.5" element="led"><bounds x="70.5" y="69.5" width="4.5" height="4.5" /></bezel> <!-- 11 --> + <bezel name="5.1" element="led"><bounds x="81" y="92" width="4.5" height="4.5" /></bezel> <!-- 12 --> + <bezel name="5.2" element="led"><bounds x="41.5" y="105" width="4.5" height="4.5" /></bezel> <!-- 13 --> + <bezel name="5.3" element="led"><bounds x="2.5" y="92" width="4.5" height="4.5" /></bezel> <!-- 14 --> + <bezel name="6.0" element="led"><bounds x="12.5" y="69.5" width="4.5" height="4.5" /></bezel> <!-- 15 --> + <bezel name="5.4" element="led"><bounds x="6.5" y="46.5" width="4.5" height="4.5" /></bezel> <!-- 16 --> + <bezel name="6.1" element="led"><bounds x="41.5" y="123" width="4.5" height="4.5" /></bezel> <!-- 17 --> + <bezel name="6.2" element="led"><bounds x="24" y="133" width="4.5" height="4.5" /></bezel> <!-- 18 --> + <bezel name="6.3" element="led"><bounds x="58.5" y="133" width="4.5" height="4.5" /></bezel> <!-- 19 --> - <bezel name="4.5" element="led"><bounds x="26.5" y="60" width="4.5" height="4.5" /></bezel> - <bezel name="4.1" element="led"><bounds x="56.5" y="60" width="4.5" height="4.5" /></bezel> - <bezel name="4.4" element="led"><bounds x="26.5" y="78" width="4.5" height="4.5" /></bezel> - <bezel name="4.2" element="led"><bounds x="56.5" y="78" width="4.5" height="4.5" /></bezel> - <bezel name="6.0" element="led"><bounds x="12.5" y="69.5" width="4.5" height="4.5" /></bezel> - <bezel name="6.5" element="led"><bounds x="12.5" y="149" width="4.5" height="4.5" /></bezel> - <bezel name="5.5" element="led"><bounds x="70.5" y="69.5" width="4.5" height="4.5" /></bezel> - <bezel name="7.0" element="led"><bounds x="70.5" y="149" width="4.5" height="4.5" /></bezel> + <bezel name="6.4" element="led"><bounds x="41.5" y="141" width="4.5" height="4.5" /></bezel> <!-- 20 --> + <bezel name="6.5" element="led"><bounds x="12.5" y="149" width="4.5" height="4.5" /></bezel> <!-- 21 --> + <bezel name="7.0" element="led"><bounds x="70.5" y="149" width="4.5" height="4.5" /></bezel> <!-- 22 --> + <bezel name="7.1" element="led"><bounds x="41.5" y="171" width="4.5" height="4.5" /></bezel> <!-- 23 --> + <bezel name="7.2" element="led"><bounds x="93" y="136.5" width="4.5" height="4.5" /></bezel> <!-- 24 --> + <bezel name="7.3" element="led"><bounds x="93" y="115" width="4.5" height="4.5" /></bezel> <!-- 25 --> + <bezel name="7.4" element="led"><bounds x="93" y="86.5" width="4.5" height="4.5" /></bezel> <!-- 26 --> - <bezel name="3.4" element="led"><bounds x="20.5" y="105" width="4.5" height="4.5" /></bezel> - <bezel name="3.5" element="led"><bounds x="62.5" y="105" width="4.5" height="4.5" /></bezel> - <bezel name="6.2" element="led"><bounds x="24" y="133" width="4.5" height="4.5" /></bezel> - <bezel name="6.3" element="led"><bounds x="58.5" y="133" width="4.5" height="4.5" /></bezel> - <bezel name="7.4" element="led"><bounds x="93" y="86.5" width="4.5" height="4.5" /></bezel> - <bezel name="7.3" element="led"><bounds x="93" y="115" width="4.5" height="4.5" /></bezel> - <bezel name="7.2" element="led"><bounds x="93" y="136.5" width="4.5" height="4.5" /></bezel> + <bezel name="3.0" element="led"><bounds x="41.5" y="69.5" width="4.5" height="4.5" /></bezel> <!-- A --> + <bezel name="3.4" element="led"><bounds x="20.5" y="105" width="4.5" height="4.5" /></bezel> <!-- B --> + <bezel name="3.5" element="led"><bounds x="62.5" y="105" width="4.5" height="4.5" /></bezel> <!-- C --> + <bezel name="8.0" element="led"><bounds x="7" y="115" width="4.5" height="4.5" /></bezel> <!-- D --> + <bezel name="8.1" element="led"><bounds x="76" y="115" width="4.5" height="4.5" /></bezel> <!-- E --> + <bezel name="8.2" element="led"><bounds x="35.5" y="156" width="4.5" height="4.5" /></bezel> <!-- F --> + <bezel name="8.3" element="led"><bounds x="47" y="156" width="4.5" height="4.5" /></bezel> <!-- G --> - <bezel name="8.0" element="led"><bounds x="7" y="115" width="4.5" height="4.5" /></bezel> - <bezel name="8.1" element="led"><bounds x="76" y="115" width="4.5" height="4.5" /></bezel> - <bezel name="8.2" element="led"><bounds x="35.5" y="156" width="4.5" height="4.5" /></bezel> - <bezel name="8.3" element="led"><bounds x="47" y="156" width="4.5" height="4.5" /></bezel> - - <bezel name="10.a" element="ledr"><bounds x="5.75" y="121" width="7" height="3" /></bezel> - <bezel name="9.a" element="ledr"><bounds x="74.75" y="121" width="7" height="3" /></bezel> - <bezel name="10.a" element="ledr"><bounds x="34.25" y="162" width="7" height="3" /></bezel> - <bezel name="9.a" element="ledr"><bounds x="45.75" y="162" width="7" height="3" /></bezel> + <bezel name="10.a" element="ledr"><bounds x="5.75" y="121" width="7" height="3" /></bezel> <!-- under D --> + <bezel name="9.a" element="ledr"><bounds x="74.75" y="121" width="7" height="3" /></bezel> <!-- under E --> + <bezel name="10.a" element="ledr"><bounds x="34.25" y="162" width="7" height="3" /></bezel> <!-- under F --> + <bezel name="9.a" element="ledr"><bounds x="45.75" y="162" width="7" height="3" /></bezel> <!-- under G --> </view> </mamelayout> diff --git a/src/mame/layout/raisedvl.lay b/src/mame/layout/raisedvl.lay index 07893968116..e1025d378e0 100644 --- a/src/mame/layout/raisedvl.lay +++ b/src/mame/layout/raisedvl.lay @@ -23,54 +23,49 @@ <bezel name="digit0" element="digit"><bounds x="147" y="318" width="13" height="20" /></bezel> <bezel element="digit"><bounds x="160" y="318" width="13" height="20" /></bezel> <!-- unconnected --> - <bezel name="4.0" element="led"><bounds x="162" y="12" width="6" height="6" /></bezel> - <bezel name="4.1" element="led"><bounds x="118" y="12" width="6" height="6" /></bezel> - - <bezel name="4.2" element="led"><bounds x="63" y="47" width="6" height="6" /></bezel> - <bezel name="4.3" element="led"><bounds x="99" y="58" width="6" height="6" /></bezel> - <bezel name="4.4" element="led"><bounds x="140" y="58" width="6" height="6" /></bezel> - <bezel name="4.5" element="led"><bounds x="184" y="58" width="6" height="6" /></bezel> - <bezel name="3.4" element="led"><bounds x="217" y="47" width="6" height="6" /></bezel> - - <bezel name="3.0" element="led"><bounds x="235" y="226" width="6" height="6" /></bezel> - <bezel name="3.1" element="led"><bounds x="235" y="190" width="6" height="6" /></bezel> - <bezel name="3.2" element="led"><bounds x="235" y="154" width="6" height="6" /></bezel> - <bezel name="3.3" element="led"><bounds x="235" y="119" width="6" height="6" /></bezel> - - <bezel name="5.0" element="led"><bounds x="176" y="98" width="6" height="6" /></bezel> - <bezel name="5.1" element="led"><bounds x="140" y="110" width="6" height="6" /></bezel> - <bezel name="5.2" element="led"><bounds x="103" y="98" width="6" height="6" /></bezel> - - <bezel name="7.2" element="led"><bounds x="126" y="141" width="6" height="6" /></bezel> - <bezel name="7.3" element="led"><bounds x="153" y="141" width="6" height="6" /></bezel> - <bezel name="5.4" element="led"><bounds x="103" y="165" width="6" height="6" /></bezel> - <bezel name="7.4" element="led"><bounds x="140" y="177" width="6" height="6" /></bezel> - <bezel name="5.3" element="led"><bounds x="176" y="165" width="6" height="6" /></bezel> - - <bezel name="6.4" element="led"><bounds x="58" y="233" width="6" height="6" /></bezel> - <bezel name="6.0" element="led"><bounds x="89" y="201" width="6" height="6" /></bezel> - <bezel name="6.3" element="led"><bounds x="140" y="231" width="6" height="6" /></bezel> - <bezel name="6.1" element="led"><bounds x="188" y="201" width="6" height="6" /></bezel> - <bezel name="6.2" element="led"><bounds x="219" y="233" width="6" height="6" /></bezel> - <bezel name="6.5" element="led"><bounds x="140" y="293" width="6" height="6" /></bezel> - - <bezel name="8.4" element="led"><bounds x="113" y="250" width="6" height="6" /></bezel> - <bezel name="9.4" element="led"><bounds x="165" y="250" width="6" height="6" /></bezel> - - <bezel name="7.0" element="led"><bounds x="96" y="270" width="6" height="6" /></bezel> - <bezel name="8.1" element="led"><bounds x="108" y="264" width="6" height="6" /></bezel> - <bezel name="8.0" element="led"><bounds x="120" y="258" width="6" height="6" /></bezel> - <bezel name="9.1" element="led"><bounds x="158" y="258" width="6" height="6" /></bezel> - <bezel name="9.0" element="led"><bounds x="170" y="264" width="6" height="6" /></bezel> - <bezel name="7.1" element="led"><bounds x="180" y="270" width="6" height="6" /></bezel> - - <bezel name="8.2" element="led"><bounds x="108" y="276" width="6" height="6" /></bezel> - <bezel name="8.5" element="led"><bounds x="120" y="271" width="6" height="6" /></bezel> - <bezel name="9.5" element="led"><bounds x="158" y="271" width="6" height="6" /></bezel> - <bezel name="9.3" element="led"><bounds x="170" y="276" width="6" height="6" /></bezel> - - <bezel name="8.3" element="led"><bounds x="120" y="282" width="6" height="6" /></bezel> - <bezel name="9.2" element="led"><bounds x="158" y="282" width="6" height="6" /></bezel> + <bezel name="3.0" element="led"><bounds x="235" y="226" width="6" height="6" /></bezel> <!-- 1 --> + <bezel name="3.1" element="led"><bounds x="235" y="190" width="6" height="6" /></bezel> <!-- 2 --> + <bezel name="3.2" element="led"><bounds x="235" y="154" width="6" height="6" /></bezel> <!-- 3 --> + <bezel name="3.3" element="led"><bounds x="235" y="119" width="6" height="6" /></bezel> <!-- 4 --> + <bezel name="3.4" element="led"><bounds x="217" y="47" width="6" height="6" /></bezel> <!-- 5 --> + <bezel name="4.0" element="led"><bounds x="162" y="12" width="6" height="6" /></bezel> <!-- 6 --> + <bezel name="4.1" element="led"><bounds x="118" y="12" width="6" height="6" /></bezel> <!-- 7 --> + <bezel name="4.2" element="led"><bounds x="63" y="47" width="6" height="6" /></bezel> <!-- 8 --> + <bezel name="4.3" element="led"><bounds x="99" y="58" width="6" height="6" /></bezel> <!-- 9 --> + + <bezel name="4.4" element="led"><bounds x="140" y="58" width="6" height="6" /></bezel> <!-- 10 --> + <bezel name="4.5" element="led"><bounds x="184" y="58" width="6" height="6" /></bezel> <!-- 11 --> + <bezel name="5.0" element="led"><bounds x="176" y="98" width="6" height="6" /></bezel> <!-- 13 --> + <bezel name="5.1" element="led"><bounds x="140" y="110" width="6" height="6" /></bezel> <!-- 14 --> + <bezel name="5.2" element="led"><bounds x="103" y="98" width="6" height="6" /></bezel> <!-- 15 --> + <bezel name="7.2" element="led"><bounds x="126" y="141" width="6" height="6" /></bezel> <!-- 17 --> + <bezel name="7.3" element="led"><bounds x="153" y="141" width="6" height="6" /></bezel> <!-- 18 --> + + <bezel name="5.3" element="led"><bounds x="176" y="165" width="6" height="6" /></bezel> <!-- 20 --> + <bezel name="5.4" element="led"><bounds x="103" y="165" width="6" height="6" /></bezel> <!-- 21 --> + <bezel name="6.0" element="led"><bounds x="89" y="201" width="6" height="6" /></bezel> <!-- 23 --> + <bezel name="6.1" element="led"><bounds x="188" y="201" width="6" height="6" /></bezel> <!-- 24 --> + <bezel name="6.2" element="led"><bounds x="219" y="233" width="6" height="6" /></bezel> <!-- 25 --> + <bezel name="6.3" element="led"><bounds x="140" y="231" width="6" height="6" /></bezel> <!-- 26 --> + <bezel name="6.4" element="led"><bounds x="58" y="233" width="6" height="6" /></bezel> <!-- 27 --> + <bezel name="8.4" element="led"><bounds x="113" y="250" width="6" height="6" /></bezel> <!-- 28 --> + <bezel name="9.4" element="led"><bounds x="165" y="250" width="6" height="6" /></bezel> <!-- 29 --> + + <bezel name="9.5" element="led"><bounds x="158" y="271" width="6" height="6" /></bezel> <!-- 30 --> + <bezel name="8.5" element="led"><bounds x="120" y="271" width="6" height="6" /></bezel> <!-- 31 --> + <bezel name="6.5" element="led"><bounds x="140" y="293" width="6" height="6" /></bezel> <!-- 32 --> + <bezel name="7.4" element="led"><bounds x="140" y="177" width="6" height="6" /></bezel> <!-- 33 --> + <bezel name="7.0" element="led"><bounds x="96" y="270" width="6" height="6" /></bezel> <!-- 34 --> + <bezel name="7.1" element="led"><bounds x="180" y="270" width="6" height="6" /></bezel> <!-- 35 --> + <bezel name="8.0" element="led"><bounds x="120" y="258" width="6" height="6" /></bezel> <!-- 36 --> + <bezel name="8.1" element="led"><bounds x="108" y="264" width="6" height="6" /></bezel> <!-- 37 --> + <bezel name="8.2" element="led"><bounds x="108" y="276" width="6" height="6" /></bezel> <!-- 38 --> + <bezel name="8.3" element="led"><bounds x="120" y="282" width="6" height="6" /></bezel> <!-- 39 --> + + <bezel name="9.2" element="led"><bounds x="158" y="282" width="6" height="6" /></bezel> <!-- 40 --> + <bezel name="9.3" element="led"><bounds x="170" y="276" width="6" height="6" /></bezel> <!-- 41 --> + <bezel name="9.0" element="led"><bounds x="170" y="264" width="6" height="6" /></bezel> <!-- 42 --> + <bezel name="9.1" element="led"><bounds x="158" y="258" width="6" height="6" /></bezel> <!-- 43 --> </view> </mamelayout> diff --git a/src/mame/layout/wildfire.lay b/src/mame/layout/wildfire.lay index 3c9a3fae054..c8782668f27 100644 --- a/src/mame/layout/wildfire.lay +++ b/src/mame/layout/wildfire.lay @@ -3,41 +3,126 @@ <!-- define elements --> - <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element> - <element name="digit" defstate="0"> <led7seg><color red="1.0" green="0.20" blue="0.22" /></led7seg> </element> + <element name="led" defstate="0"> - <disk state="0"><color red="0.2" green="0.04" blue="0.05" /></disk> + <disk state="0"><color red="0.14" green="0.02" blue="0.03" /></disk> <disk state="1"><color red="1.0" green="0.20" blue="0.22" /></disk> </element> <!-- build screen --> - <view name="Test Layout"> - <bounds left="0" right="64" top="0" bottom="64" /> - <bezel element="static_black"> - <bounds left="0" right="64" top="0" bottom="64" /> - </bezel> - - <bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel> - <bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel> - <bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel> - - <!-- 13*8 matrix (first 3 are the 7segs) --> - - <repeat count="13"> - <param name="ypos" start="20" increment="2" /> - <param name="rowno" start="0" increment="10" /> - <repeat count="8"> - <param name="xpos" start="0" increment="2" /> - <param name="lampno" start="~rowno~" increment="1" /> - <bezel name="lamp~lampno~" element="led"> - <bounds x="~xpos~" y="~ypos~" width="1" height="1" /> - </bezel> - </repeat> + <view name="Internal Layout"> + <bounds left="4" right="96.5" top="-2" bottom="172" /> + + <bezel name="digit0" element="digit"><bounds x="38" y="0" width="8" height="12" /></bezel> + <bezel name="digit1" element="digit"><bounds x="46" y="0" width="8" height="12" /></bezel> + <bezel name="digit2" element="digit"><bounds x="54" y="0" width="8" height="12" /></bezel> + + <bezel name="10.7" element="led"><bounds x="90.5" y="135" width="4" height="4" /></bezel> <!-- L1 --> + <bezel name="10.0" element="led"><bounds x="90.5" y="117" width="4" height="4" /></bezel> <!-- L2 --> + <bezel name="10.1" element="led"><bounds x="90.5" y="99" width="4" height="4" /></bezel> <!-- L3 --> + <bezel name="10.2" element="led"><bounds x="90.5" y="81.5" width="4" height="4" /></bezel> <!-- L4 --> + <bezel name="10.3" element="led"><bounds x="90.5" y="63.5" width="4" height="4" /></bezel> <!-- L5 --> + <bezel name="10.4" element="led"><bounds x="84" y="46" width="4" height="4" /></bezel> <!-- L6 --> + <bezel name="10.5" element="led"><bounds x="73" y="32.5" width="4" height="4" /></bezel> <!-- L7 --> + <bezel name="8.6" element="led"><bounds x="60.5" y="26" width="4" height="4" /></bezel> <!-- L8 --> + <bezel name="7.6" element="led"><bounds x="47.5" y="23.5" width="4" height="4" /></bezel> <!-- L9 --> + + <bezel name="6.6" element="led"><bounds x="34.5" y="26" width="4" height="4" /></bezel> <!-- L10 --> + <bezel name="5.6" element="led"><bounds x="21.5" y="32.5" width="4" height="4" /></bezel> <!-- L11 --> + <bezel name="6.5" element="led"><bounds x="34.5" y="43.5" width="4" height="4" /></bezel> <!-- L12 --> + <bezel name="7.5" element="led"><bounds x="47.5" y="41.5" width="4" height="4" /></bezel> <!-- L13 --> + <bezel name="8.5" element="led"><bounds x="60.5" y="43.5" width="4" height="4" /></bezel> <!-- L14 --> + <bezel name="9.4" element="led"><bounds x="73" y="54.5" width="4" height="4" /></bezel> <!-- L15 --> + <bezel name="8.4" element="led"><bounds x="65" y="59" width="4" height="4" /></bezel> <!-- L16 --> + <bezel name="7.4" element="led"><bounds x="52" y="65.5" width="4" height="4" /></bezel> <!-- L17 --> + <bezel name="11.2" element="led"><bounds x="34.5" y="57.5" width="4" height="4" /></bezel> <!-- L18 --> + <bezel name="5.5" element="led"><bounds x="21.5" y="54.5" width="4" height="4" /></bezel> <!-- L19 --> + + <bezel name="4.5" element="led"><bounds x="6.5" y="57.5" width="4" height="4" /></bezel> <!-- L20 --> + <bezel name="4.4" element="led"><bounds x="15.5" y="72.5" width="4" height="4" /></bezel> <!-- L21 --> + <bezel name="5.4" element="led"><bounds x="26" y="68" width="4" height="4" /></bezel> <!-- L22 --> + <bezel name="6.3" element="led"><bounds x="41" y="72.5" width="4" height="4" /></bezel> <!-- L23 --> + <bezel name="7.3" element="led"><bounds x="58.5" y="81.5" width="4" height="4" /></bezel> <!-- L24 --> + <bezel name="11.1" element="led"><bounds x="66.5" y="72.5" width="4" height="4" /></bezel> <!-- L25 --> + <bezel name="9.3" element="led"><bounds x="80" y="72.5" width="4" height="4" /></bezel> <!-- L26 --> + <bezel name="9.2" element="led"><bounds x="77.5" y="90" width="4" height="4" /></bezel> <!-- L27 --> + <bezel name="8.2" element="led"><bounds x="60.5" y="99" width="4" height="4" /></bezel> <!-- L28 --> + <bezel name="11.0" element="led"><bounds x="47.5" y="90" width="4" height="4" /></bezel> <!-- L29 --> + + <bezel name="5.3" element="led"><bounds x="30.5" y="81.5" width="4" height="4" /></bezel> <!-- L30 --> + <bezel name="4.3" element="led"><bounds x="17.5" y="90" width="4" height="4" /></bezel> <!-- L31 --> + <bezel name="5.2" element="led"><bounds x="32.5" y="90" width="4" height="4" /></bezel> <!-- L32 --> + <bezel name="5.1" element="led"><bounds x="21.5" y="108" width="4" height="4" /></bezel> <!-- L33 --> + <bezel name="11.7" element="led"><bounds x="32.5" y="108" width="4" height="4" /></bezel> <!-- L34 --> + <bezel name="7.1" element="led"><bounds x="47.5" y="112.5" width="4" height="4" /></bezel> <!-- L35 --> + <bezel name="9.1" element="led"><bounds x="73" y="108" width="4" height="4" /></bezel> <!-- L36 --> + <bezel name="5.0" element="led"><bounds x="13" y="126" width="4" height="4" /></bezel> <!-- L37 --> + <bezel name="6.1" element="led"><bounds x="32.5" y="121.5" width="4" height="4" /></bezel> <!-- L38 --> + <bezel name="8.1" element="led"><bounds x="63" y="121.5" width="4" height="4" /></bezel> <!-- L39 --> + + <bezel name="5.7" element="led"><bounds x="13" y="148.5" width="4" height="4" /></bezel> <!-- L40 --> + <bezel name="6.0" element="led"><bounds x="26" y="139" width="4" height="4" /></bezel> <!-- L41 --> + <bezel name="7.0" element="led"><bounds x="43" y="135" width="4" height="4" /></bezel> <!-- L42 --> + <bezel name="8.0" element="led"><bounds x="51.5" y="135" width="4" height="4" /></bezel> <!-- L43 --> + <bezel name="9.0" element="led"><bounds x="69" y="139" width="4" height="4" /></bezel> <!-- L44 --> + <bezel name="6.7" element="led"><bounds x="38.5" y="152.5" width="4" height="4" /></bezel> <!-- L45 --> + <bezel name="7.7" element="led"><bounds x="47.5" y="152.5" width="4" height="4" /></bezel> <!-- L46 --> + <bezel name="8.7" element="led"><bounds x="56.5" y="152.5" width="4" height="4" /></bezel> <!-- L47 --> + <bezel name="9.7" element="led"><bounds x="47.5" y="166" width="4" height="4" /></bezel> <!-- L48 --> + <bezel name="3.3" element="led"><bounds x="21.5" y="41.5" width="4" height="4" /></bezel> <!-- L70 --> + + <repeat count="40"> + <param name="x" start="10.8" increment="0.02308" /> + <param name="y" start="72" increment="-0.15128" /> + <bezel name="11.6" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L50 --> + </repeat> + + <repeat count="40"> + <param name="x" start="28.6" increment="0.11795" /> + <param name="y" start="119" increment="-0.07949" /> + <bezel name="11.5" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L51 --> + </repeat> + + <repeat count="40"> + <param name="x" start="78.7" increment="0.05128" /> + <param name="y" start="110.7" increment="-0.13846" /> + <bezel name="11.4" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L52 --> + </repeat> + + <repeat count="40"> + <param name="x" start="10.7" increment="0.15897" /> + <param name="y" start="154.7" increment="0.0" /> + <bezel name="11.3" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L53 --> + </repeat> + + <repeat count="40"> + <param name="x" start="61.8" increment="-0.11538" /> + <param name="y" start="151.4" increment="-0.12308" /> + <bezel name="3.6" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L60 --> + </repeat> + + <repeat count="40"> + <param name="x" start="76.3" increment="0.13333" /> + <param name="y" start="84.2" increment="0.03333" /> + <bezel name="3.6" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L61 --> + </repeat> + + <repeat count="40"> + <param name="x" start="34.2" increment="0.11538" /> + <param name="y" start="151.4" increment="-0.12308" /> + <bezel name="3.5" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L62 --> </repeat> + + <repeat count="40"> + <param name="x" start="14.2" increment="0.14615" /> + <param name="y" start="86.5" increment="-0.05897" /> + <bezel name="3.5" element="led"><bounds x="~x~" y="~y~" width="3" height="3" /></bezel> <!-- L63 --> + </repeat> + </view> </mamelayout> diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6f705e786c5..57c1db7f4a9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -38717,6 +38717,7 @@ vigilanto // (c) 1988 (US) @source:spg110.cpp jak_capb // +jak_spdmo // @source:vii.cpp jak_batm // The Batman, 2004 @@ -38752,6 +38753,7 @@ rad_fb2 // mattelcs // dreamlif // icanguit // +icanpian // @source:vsmile.cpp vsmile // @@ -39924,6 +39926,7 @@ rad_sbw // rad_bdp // has_wamg // ltv_tam // +tak_geig // ban_onep // ekara // ekaraa // @@ -39931,6 +39934,7 @@ ekaraj // ekarag // ekaraphs // epitch // +ekaramix // ddrfammt // popira // popira2 // diff --git a/src/mame/video/733_asr.cpp b/src/mame/video/733_asr.cpp index 17f68bba783..80995c2f415 100644 --- a/src/mame/video/733_asr.cpp +++ b/src/mame/video/733_asr.cpp @@ -315,7 +315,7 @@ READ8_MEMBER( asr733_device::cru_r ) { int reply = 0; - switch (offset) + switch (offset >> 3) { case 0: /* receive buffer */ @@ -328,7 +328,7 @@ READ8_MEMBER( asr733_device::cru_r ) break; } - return reply; + return BIT(reply, offset & 7); } /* diff --git a/src/mame/video/911_vdt.cpp b/src/mame/video/911_vdt.cpp index af57d9daf9a..694fdff5a2a 100644 --- a/src/mame/video/911_vdt.cpp +++ b/src/mame/video/911_vdt.cpp @@ -280,11 +280,11 @@ READ8_MEMBER( vdt911_device::cru_r ) { int reply=0; - offset &= 0x1; + offset &= 0xf; if (!m_word_select) { /* select word 0 */ - switch (offset) + switch (offset >> 3) { case 0: reply = m_display_RAM[m_cursor_address]; @@ -299,7 +299,7 @@ READ8_MEMBER( vdt911_device::cru_r ) } else { /* select word 1 */ - switch (offset) + switch (offset >> 3) { case 0: reply = m_cursor_address & 0xff; @@ -321,7 +321,7 @@ READ8_MEMBER( vdt911_device::cru_r ) } } - return reply; + return BIT(reply, offset & 3); } /* |