diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/isa/ide.cpp | 7 | ||||
-rw-r--r-- | src/devices/bus/isa/mcd.cpp | 7 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.lst | 1128 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80make.py | 2 | ||||
-rw-r--r-- | src/emu/sound.cpp | 8 | ||||
-rw-r--r-- | src/mame/bmc/bmcpokr.cpp | 6 | ||||
-rw-r--r-- | src/mame/casio/cps2000.cpp | 21 | ||||
-rw-r--r-- | src/mame/itech/itech32.cpp | 9 | ||||
-rw-r--r-- | src/mame/misc/gms.cpp | 582 | ||||
-rw-r--r-- | src/mame/misc/xtom3d.cpp | 11 | ||||
-rw-r--r-- | src/mame/nec/pc9801.cpp | 7 | ||||
-rw-r--r-- | src/mame/pinball/macp.cpp | 8 | ||||
-rw-r--r-- | src/mame/skeleton/alesis_qs.cpp | 7 | ||||
-rw-r--r-- | src/mame/tvgames/generalplus_gp327902.cpp | 3 | ||||
-rw-r--r-- | src/mame/tvgames/generalplus_gpm453x_nand.cpp | 3 |
15 files changed, 1117 insertions, 692 deletions
diff --git a/src/devices/bus/isa/ide.cpp b/src/devices/bus/isa/ide.cpp index 9565851fafc..22ac0defe64 100644 --- a/src/devices/bus/isa/ide.cpp +++ b/src/devices/bus/isa/ide.cpp @@ -50,8 +50,8 @@ void isa16_ide_device::ide_interrupt(int state) void isa16_ide_device::cdrom_headphones(device_t *device) { cdda_device *cdda = device->subdevice<cdda_device>("cdda"); - cdda->add_route(0, "^^lheadphone", 1.0); - cdda->add_route(1, "^^rheadphone", 1.0); + cdda->add_route(0, "^^headphone", 1.0, 0); + cdda->add_route(1, "^^headphone", 1.0, 1); } static INPUT_PORTS_START( ide ) @@ -76,8 +76,7 @@ void isa16_ide_device::device_add_mconfig(machine_config &config) IDE_CONTROLLER(config, m_ide).options(ata_devices, "hdd", nullptr, false); m_ide->irq_handler().set(FUNC(isa16_ide_device::ide_interrupt)); - SPEAKER(config, "lheadphone").front_left(); - SPEAKER(config, "rheadphone").front_right(); + SPEAKER(config, "headphone", 2).front(); m_ide->slot(0).set_option_machine_config("cdrom", cdrom_headphones); m_ide->slot(1).set_option_machine_config("cdrom", cdrom_headphones); diff --git a/src/devices/bus/isa/mcd.cpp b/src/devices/bus/isa/mcd.cpp index 085ab3676b9..0b78d68a98f 100644 --- a/src/devices/bus/isa/mcd.cpp +++ b/src/devices/bus/isa/mcd.cpp @@ -26,11 +26,10 @@ DEFINE_DEVICE_TYPE(ISA16_MCD, mcd_isa_device, "mcd_isa", "Mitsumi ISA CD-ROM Ada void mcd_isa_device::device_add_mconfig(machine_config &config) { - SPEAKER(config, "lheadphone").front_left(); - SPEAKER(config, "rheadphone").front_right(); + SPEAKER(config, "headphone", 2).front(); CDDA(config, m_cdda); - m_cdda->add_route(0, "lheadphone", 1.0); - m_cdda->add_route(1, "rheadphone", 1.0); + m_cdda->add_route(0, "headphone", 1.0, 0); + m_cdda->add_route(1, "headphone", 1.0, 1); m_cdda->set_cdrom_tag(*this); } diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst index 53d1921e680..17298dffca5 100644 --- a/src/devices/cpu/z80/z80.lst +++ b/src/devices/cpu/z80/z80.lst @@ -28,7 +28,8 @@ macro rm16 %addr @rm %addr TDAT_H = TDAT_L; @rm %addr+1 - using std::swap; std::swap(TDAT_H, TDAT_L); + using std::swap; + swap(TDAT_H, TDAT_L); macro wm %addr m_memrq_cycles !! data_write(%addr, TDAT8); @@ -49,11 +50,17 @@ macro rop if (refresh_en) m_refresh_cb((I << 8) | (R2 & 0x80) | (R & 0x7f), 0x00, 0xff); + 2 - PC++; R++; Q = QT; QT = YF | XF; + PC++; + R++; + Q = QT; + QT = YF | XF; macro r800:rop m_m1_cycles !! TDAT8 = opcode_read(); - PC++; R++; Q = QT; QT = YF | XF; + PC++; + R++; + Q = QT; + QT = YF | XF; macro arg m_memrq_cycles !! TDAT8 = arg_read(); @@ -63,15 +70,18 @@ macro arg16 @arg TDAT_H = TDAT_L; @arg - using std::swap; swap(TDAT_H, TDAT_L); + using std::swap; + swap(TDAT_H, TDAT_L); macro eax @arg - m_ea = (u16)(IX + (s8)TDAT8); WZ = m_ea; + m_ea = (u16)(IX + (s8)TDAT8); + WZ = m_ea; macro eay @arg - m_ea = (u16)(IY + (s8)TDAT8); WZ = m_ea; + m_ea = (u16)(IY + (s8)TDAT8); + WZ = m_ea; macro pop m_memrq_cycles !! TDAT_L = stack_read(SP); @@ -85,17 +95,20 @@ macro push %d16 macro jp @arg16 - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; macro t6a84:jp @arg16 - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; paged_jump(); macro jp_cond if (TDAT8) { @arg16 - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; } else { // implicit do PC += 2 @arg16 @@ -105,7 +118,8 @@ macro jp_cond macro t6a84:jp_cond if (TDAT8) { @arg16 - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; paged_jump(); } else { // implicit do PC += 2 @@ -116,18 +130,21 @@ macro t6a84:jp_cond macro jr @arg 5 * @nomreq_addr PC-1 - PC += (s8)TDAT8; WZ = PC; + PC += (s8)TDAT8; + WZ = PC; macro t6a84:jr @arg 5 * @nomreq_addr PC-1 - PC += (s8)TDAT8; WZ = PC; + PC += (s8)TDAT8; + WZ = PC; paged_jump(); macro r800:jr @arg + 1 - PC += (s8)TDAT8; WZ = PC; + PC += (s8)TDAT8; + WZ = PC; macro jr_cond if (TDAT8) { @@ -164,12 +181,16 @@ macro ret_cond @nomreq_ir 1 if (TDAT8) { @pop - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; } macro retn @pop - PC = TDAT; LOGMASKED(LOG_INT, "RETN m_iff1:%d m_iff2:%d\n", m_iff1, m_iff2); WZ = PC; m_iff1 = m_iff2; + PC = TDAT; + LOGMASKED(LOG_INT, "RETN m_iff1:%d m_iff2:%d\n", m_iff1, m_iff2); + WZ = PC; + m_iff1 = m_iff2; macro z80n:retn m_out_retn_seen_cb(0); @@ -180,34 +201,44 @@ macro z80n:retn } else { PC = TDAT; } - LOGMASKED(LOG_INT, "RETN m_iff1:%d m_iff2:%d\n", m_iff1, m_iff2); WZ = PC; m_iff1 = m_iff2; + LOGMASKED(LOG_INT, "RETN m_iff1:%d m_iff2:%d\n", m_iff1, m_iff2); + WZ = PC; + m_iff1 = m_iff2; macro reti @pop - PC = TDAT; WZ = PC; m_iff1 = m_iff2; + PC = TDAT; + WZ = PC; + m_iff1 = m_iff2; daisy_call_reti_device(); macro t6a84:reti @pop - PC = TDAT; WZ = PC; m_iff1 = m_iff2; + PC = TDAT; + WZ = PC; + m_iff1 = m_iff2; paged_reti(); daisy_call_reti_device(); macro ld_r_a @nomreq_ir 1 - m_r = A; m_r2 = A & 0x80; // keep bit 7 of r + m_r = A; + m_r2 = A & 0x80; // keep bit 7 of r macro r800:ld_r_a - m_r = A; m_r2 = A & 0x80; // keep bit 7 of r + m_r = A; + m_r2 = A & 0x80; // keep bit 7 of r macro ld_a_r @nomreq_ir 1 - A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); + A = (m_r & 0x7f) | m_r2; + set_f((F & CF) | SZ[A] | (m_iff2 << 2)); if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 1>(); macro r800:ld_a_r - A = (m_r & 0x7f) | m_r2; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); + A = (m_r & 0x7f) | m_r2; + set_f((F & CF) | SZ[A] | (m_iff2 << 2)); if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 1>(); @@ -220,34 +251,41 @@ macro r800:ld_i_a macro ld_a_i @nomreq_ir 1 - A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); + A = m_i; + set_f((F & CF) | SZ[A] | (m_iff2 << 2)); if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 1>(); macro r800:ld_a_i - A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); + A = m_i; + set_f((F & CF) | SZ[A] | (m_iff2 << 2)); if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 1>(); macro rst addr @push PC - PC = addr; WZ = PC; + PC = addr; + WZ = PC; macro rrd @rm HL WZ = HL+1; 4 * @nomreq_addr HL - TDAT_H = TDAT8; TDAT8 = (TDAT8 >> 4) | (A << 4); + TDAT_H = TDAT8; + TDAT8 = (TDAT8 >> 4) | (A << 4); @wm HL - A = (A & 0xf0) | (TDAT_H & 0x0f); set_f((F & CF) | SZP[A]); + A = (A & 0xf0) | (TDAT_H & 0x0f); + set_f((F & CF) | SZP[A]); macro rld @rm HL WZ = HL+1; 4 * @nomreq_addr HL - TDAT_H = TDAT8; TDAT8 = (TDAT8 << 4) | (A & 0x0f); + TDAT_H = TDAT8; + TDAT8 = (TDAT8 << 4) | (A & 0x0f); @wm HL - A = (A & 0xf0) | (TDAT_H >> 4); set_f((F & CF) | SZP[A]); + A = (A & 0xf0) | (TDAT_H >> 4); + set_f((F & CF) | SZP[A]); macro ex_sp %d16 @pop @@ -258,148 +296,366 @@ macro ex_sp %d16 WZ = TDAT; macro add16 +{ @nomreq_ir 7 - { u32 res = TDAT + TDAT2; WZ = TDAT + 1; set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF))); TDAT = (u16)res; } + u32 res = TDAT + TDAT2; + WZ = TDAT + 1; + set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF))); + TDAT = (u16)res; +} macro r800:add16 - { u32 res = TDAT + TDAT2; WZ = TDAT + 1; set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF))); TDAT = (u16)res; } +{ + u32 res = TDAT + TDAT2; + WZ = TDAT + 1; + set_f((F & (SF | ZF | VF)) | (((TDAT ^ res ^ TDAT2) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (YF | XF))); + TDAT = (u16)res; +} macro adc_hl +{ @nomreq_ir 7 - { u32 res = HL + TDAT + (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL ^ 0x8000) & (TDAT ^ res) & 0x8000) >> 13)); HL = (u16)res; } + u32 res = HL + TDAT + (F & CF); + WZ = HL + 1; + set_f((((HL ^ res ^ TDAT) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL ^ 0x8000) & (TDAT ^ res) & 0x8000) >> 13)); + HL = (u16)res; +} macro r800:adc_hl - { u32 res = HL + TDAT + (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL ^ 0x8000) & (TDAT ^ res) & 0x8000) >> 13)); HL = (u16)res; } +{ + u32 res = HL + TDAT + (F & CF); + WZ = HL + 1; + set_f((((HL ^ res ^ TDAT) >> 8) & HF) | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL ^ 0x8000) & (TDAT ^ res) & 0x8000) >> 13)); + HL = (u16)res; +} macro sbc_hl +{ @nomreq_ir 7 - { u32 res = HL - TDAT - (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) &0x8000) >> 13)); HL = (u16)res; } + u32 res = HL - TDAT - (F & CF); + WZ = HL + 1; + set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) & 0x8000) >> 13)); + HL = (u16)res; +} macro r800:sbc_hl - { u32 res = HL - TDAT - (F & CF); WZ = HL + 1; set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) &0x8000) >> 13)); HL = (u16)res; } +{ + u32 res = HL - TDAT - (F & CF); + WZ = HL + 1; + set_f((((HL ^ res ^ TDAT) >> 8) & HF) | NF | ((res >> 16) & CF) | ((res >> 8) & (SF | YF | XF)) | ((res & 0xffff) ? 0 : ZF) | (((TDAT ^ HL) & (HL ^ res) & 0x8000) >> 13)); + HL = (u16)res; +} macro ldi @rm HL @wm DE 2 * @nomreq_addr DE - set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF; + set_f(F & (SF | ZF | CF)); + if ((A + TDAT8) & 0x02) + F |= YF; + if ((A + TDAT8) & 0x08) + F |= XF; + HL++; + DE++; + BC--; + if (BC) + F |= VF; macro r800:ldi @rm HL @wm DE @nomreq_addr DE - set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL++; DE++; BC--; if(BC) F |= VF; + set_f(F & (SF | ZF | CF)); + if ((A + TDAT8) & 0x02) + F |= YF; + if ((A + TDAT8) & 0x08) + F |= XF; + HL++; + DE++; + BC--; + if (BC) + F |= VF; macro cpi +{ @rm HL 5 * @nomreq_addr HL - { u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; } + u8 res = A - TDAT8; + WZ++; + HL++; + BC--; + set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); + if (F & HF) + res -= 1; + if (res & 0x02) + F |= YF; + if (res & 0x08) + F |= XF; + if (BC) + F |= VF; +} macro r800:cpi +{ @rm HL @nomreq_addr HL - { u8 res = A - TDAT8; WZ++; HL++; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; } + u8 res = A - TDAT8; + WZ++; + HL++; + BC--; + set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); + if (F & HF) + res -= 1; + if (res & 0x02) + F |= YF; + if (res & 0x08) + F |= XF; + if (BC) + F |= VF; +} macro ini +{ @nomreq_ir 1 @in BC - WZ = BC + 1; B--; + WZ = BC + 1; + B--; @wm HL - { HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL++; + set_f(SZ[B]); + unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro r800:ini +{ @in BC - WZ = BC + 1; B--; + WZ = BC + 1; + B--; @wm HL - { HL++; set_f(SZ[B]); unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL++; + set_f(SZ[B]); + unsigned t = (unsigned)((C + 1) & 0xff) + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro outi +{ @nomreq_ir 1 @rm HL - B--; WZ = BC + 1; + B--; + WZ = BC + 1; @out BC - { HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL++; + set_f(SZ[B]); + unsigned t = (unsigned)L + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro r800:outi +{ @rm HL - B--; WZ = BC + 1; + B--; + WZ = BC + 1; @out BC - { HL++; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL++; + set_f(SZ[B]); + unsigned t = (unsigned)L + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro ldd +{ @rm HL @wm DE 2 * @nomreq_addr DE - { set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; } + set_f(F & (SF | ZF | CF)); + if ((A + TDAT8) & 0x02) + F |= YF; + if ((A + TDAT8) & 0x08) + F |= XF; + HL--; + DE--; + BC--; + if (BC) + F |= VF; +} macro r800:ldd +{ @rm HL @wm DE @nomreq_addr DE - { set_f(F & (SF | ZF | CF)); if ((A + TDAT8) & 0x02) F |= YF; if ((A + TDAT8) & 0x08) F |= XF; HL--; DE--; BC--; if (BC) F |= VF; } + set_f(F & (SF | ZF | CF)); + if ((A + TDAT8) & 0x02) + F |= YF; + if ((A + TDAT8) & 0x08) + F |= XF; + HL--; + DE--; + BC--; + if (BC) + F |= VF; +} macro cpd +{ @rm HL 5 * @nomreq_addr HL - { u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; } + u8 res = A - TDAT8; + WZ--; + HL--; + BC--; + set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); + if (F & HF) + res -= 1; + if (res & 0x02) + F |= YF; + if (res & 0x08) + F |= XF; + if (BC) + F |= VF; +} macro r800:cpd +{ @rm HL @nomreq_addr HL - { u8 res = A - TDAT8; WZ--; HL--; BC--; set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); if (F & HF) res -= 1; if (res & 0x02) F |= YF; if (res & 0x08) F |= XF; if (BC) F |= VF; } + u8 res = A - TDAT8; + WZ--; + HL--; + BC--; + set_f((F & CF) | (SZ[res]&~(YF|XF)) | ((A^TDAT8^res)&HF) | NF); + if (F & HF) + res -= 1; + if (res & 0x02) + F |= YF; + if (res & 0x08) + F |= XF; + if (BC) + F |= VF; +} macro ind +{ @nomreq_ir 1 @in BC - WZ = BC - 1; B--; + WZ = BC - 1; + B--; @wm HL - { HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL--; + set_f(SZ[B]); + unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro r800:ind +{ @in BC - WZ = BC - 1; B--; + WZ = BC - 1; + B--; @wm HL - { HL--; set_f(SZ[B]); unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL--; + set_f(SZ[B]); + unsigned t = ((unsigned)(C - 1) & 0xff) + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro outd +{ @nomreq_ir 1 @rm HL - B--; WZ = BC - 1; + B--; + WZ = BC - 1; @out BC - { HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL--; + set_f(SZ[B]); + unsigned t = (unsigned)L + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro r800:outd +{ @rm HL - B--; WZ = BC - 1; + B--; + WZ = BC - 1; @out BC - { HL--; set_f(SZ[B]); unsigned t = (unsigned)L + (unsigned)TDAT8; if (TDAT8 & SF) F |= NF; if (t & 0x100) F |= HF | CF; F |= SZP[(u8)(t & 0x07) ^ B] & PF; } + HL--; + set_f(SZ[B]); + unsigned t = (unsigned)L + (unsigned)TDAT8; + if (TDAT8 & SF) + F |= NF; + if (t & 0x100) + F |= HF | CF; + F |= SZP[(u8)(t & 0x07) ^ B] & PF; +} macro ldir @ldi if (BC != 0) { 5 * @nomreq_addr DE - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro r800:ldir @ldi if (BC != 0) { @nomreq_addr DE - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro cpir @cpi if (BC != 0 && !(F & ZF)) { 5 * @nomreq_addr HL - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro r800:cpir @cpi @nomreq_addr HL if (BC != 0 && !(F & ZF)) { - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro inir @@ -445,28 +701,40 @@ macro lddr @ldd if (BC != 0) { 5 * @nomreq_addr DE - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro r800:lddr @ldd if (BC != 0) { @nomreq_addr DE - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro cpdr @cpd if (BC != 0 && !(F & ZF)) { 5 * @nomreq_addr HL - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro r800:cpdr @cpd @nomreq_addr HL /* suspected wrong. must be inside if? */ if (BC != 0 && !(F & ZF)) { - PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); + PC -= 2; + WZ = PC + 1; + F &= ~(YF | XF); + F |= (PC >> 8) & (YF | XF); } macro indr @@ -530,21 +798,21 @@ macro take_nmi set_service_attention<SA_NMI_PENDING, 0>(); macro irqfetch - { - // fetch the IRQ vector - device_z80daisy_interface *intf = daisy_get_irq_device(); - m_tmp_irq_vector = (intf != nullptr) ? intf->z80daisy_irq_ack() : standard_irq_callback(0, m_pc.w); - LOGMASKED(LOG_INT, "single INT m_tmp_irq_vector $%02x\n", m_tmp_irq_vector); - } +{ + // fetch the IRQ vector + device_z80daisy_interface *intf = daisy_get_irq_device(); + m_tmp_irq_vector = (intf != nullptr) ? intf->z80daisy_irq_ack() : standard_irq_callback(0, m_pc.w); + LOGMASKED(LOG_INT, "single INT m_tmp_irq_vector $%02x\n", m_tmp_irq_vector); +} macro t6a84:irqfetch - { - // fetch the IRQ vector - paged_irqfetch(); - device_z80daisy_interface *intf = daisy_get_irq_device(); - m_tmp_irq_vector = (intf != nullptr) ? intf->z80daisy_irq_ack() : standard_irq_callback(0, m_pc.w); - LOGMASKED(LOG_INT, "single INT m_tmp_irq_vector $%02x\n", m_tmp_irq_vector); - } +{ + // fetch the IRQ vector + paged_irqfetch(); + device_z80daisy_interface *intf = daisy_get_irq_device(); + m_tmp_irq_vector = (intf != nullptr) ? intf->z80daisy_irq_ack() : standard_irq_callback(0, m_pc.w); + LOGMASKED(LOG_INT, "single INT m_tmp_irq_vector $%02x\n", m_tmp_irq_vector); +} macro take_interrupt // check if processor was halted @@ -692,9 +960,9 @@ ffff m_busack_cb(0); } @check_interrupts - set_service_attention<SA_AFTER_EI, 0>(); // SA_AFTER_EI + set_service_attention<SA_AFTER_EI, 0>(); if (HAS_LDAIR_QUIRK) - set_service_attention<SA_AFTER_LDAIR, 0>(); // SA_AFTER_LDAIR + set_service_attention<SA_AFTER_LDAIR, 0>(); if (m_halt) { // SA_HALT debugger_wait_hook(); @rop @@ -1544,32 +1812,38 @@ cbff # SET 7,A ########################################################## fe00 # RLC B = (XY+o) @rm_reg m_ea - B = rlc(TDAT8); TDAT8 = B; + B = rlc(TDAT8); + TDAT8 = B; @wm m_ea fe01 # RLC C = (XY+o) @rm_reg m_ea - C = rlc(TDAT8); TDAT8 = C; + C = rlc(TDAT8); + TDAT8 = C; @wm m_ea fe02 # RLC D = (XY+o) @rm_reg m_ea - D = rlc(TDAT8); TDAT8 = D; + D = rlc(TDAT8); + TDAT8 = D; @wm m_ea fe03 # RLC E = (XY+o) @rm_reg m_ea - E = rlc(TDAT8); TDAT8 = E; + E = rlc(TDAT8); + TDAT8 = E; @wm m_ea fe04 # RLC H = (XY+o) @rm_reg m_ea - H = rlc(TDAT8); TDAT8 = H; + H = rlc(TDAT8); + TDAT8 = H; @wm m_ea fe05 # RLC L = (XY+o) @rm_reg m_ea - L = rlc(TDAT8); TDAT8 = L; + L = rlc(TDAT8); + TDAT8 = L; @wm m_ea fe06 # RLC (XY+o) @@ -1579,37 +1853,44 @@ fe06 # RLC (XY+o) fe07 # RLC A = (XY+o) @rm_reg m_ea - A = rlc(TDAT8); TDAT8 = A; + A = rlc(TDAT8); + TDAT8 = A; @wm m_ea fe08 # RRC B = (XY+o) @rm_reg m_ea - B = rrc(TDAT8); TDAT8 = B; + B = rrc(TDAT8); + TDAT8 = B; @wm m_ea fe09 # RRC C = (XY+o) @rm_reg m_ea - C = rrc(TDAT8); TDAT8 = C; + C = rrc(TDAT8); + TDAT8 = C; @wm m_ea fe0a # RRC D = (XY+o) @rm_reg m_ea - D = rrc(TDAT8); TDAT8 = D; + D = rrc(TDAT8); + TDAT8 = D; @wm m_ea fe0b # RRC E = (XY+o) @rm_reg m_ea - E = rrc(TDAT8); TDAT8 = E; + E = rrc(TDAT8); + TDAT8 = E; @wm m_ea fe0c # RRC H = (XY+o) @rm_reg m_ea - H = rrc(TDAT8); TDAT8 = H; + H = rrc(TDAT8); + TDAT8 = H; @wm m_ea fe0d # RRC L = (XY+o) @rm_reg m_ea - L = rrc(TDAT8); TDAT8 = L; + L = rrc(TDAT8); + TDAT8 = L; @wm m_ea fe0e # RRC (XY+o) @@ -1619,37 +1900,44 @@ fe0e # RRC (XY+o) fe0f # RRC A = (XY+o) @rm_reg m_ea - A = rrc(TDAT8); TDAT8 = A; + A = rrc(TDAT8); + TDAT8 = A; @wm m_ea fe10 # RL B = (XY+o) @rm_reg m_ea - B = rl(TDAT8); TDAT8 = B; + B = rl(TDAT8); + TDAT8 = B; @wm m_ea fe11 # RL C = (XY+o) @rm_reg m_ea - C = rl(TDAT8); TDAT8 = C; + C = rl(TDAT8); + TDAT8 = C; @wm m_ea fe12 # RL D = (XY+o) @rm_reg m_ea - D = rl(TDAT8); TDAT8 = D; + D = rl(TDAT8); + TDAT8 = D; @wm m_ea fe13 # RL E = (XY+o) @rm_reg m_ea - E = rl(TDAT8); TDAT8 = E; + E = rl(TDAT8); + TDAT8 = E; @wm m_ea fe14 # RL H = (XY+o) @rm_reg m_ea - H = rl(TDAT8); TDAT8 = H; + H = rl(TDAT8); + TDAT8 = H; @wm m_ea fe15 # RL L = (XY+o) @rm_reg m_ea - L = rl(TDAT8); TDAT8 = L; + L = rl(TDAT8); + TDAT8 = L; @wm m_ea fe16 # RL (XY+o) @@ -1659,37 +1947,44 @@ fe16 # RL (XY+o) fe17 # RL A = (XY+o) @rm_reg m_ea - A = rl(TDAT8); TDAT8 = A; + A = rl(TDAT8); + TDAT8 = A; @wm m_ea fe18 # RR B = (XY+o) @rm_reg m_ea - B = rr(TDAT8); TDAT8 = B; + B = rr(TDAT8); + TDAT8 = B; @wm m_ea fe19 # RR C = (XY+o) @rm_reg m_ea - C = rr(TDAT8); TDAT8 = C; + C = rr(TDAT8); + TDAT8 = C; @wm m_ea fe1a # RR D = (XY+o) @rm_reg m_ea - D = rr(TDAT8); TDAT8 = D; + D = rr(TDAT8); + TDAT8 = D; @wm m_ea fe1b # RR E = (XY+o) @rm_reg m_ea - E = rr(TDAT8); TDAT8 = E; + E = rr(TDAT8); + TDAT8 = E; @wm m_ea fe1c # RR H = (XY+o) @rm_reg m_ea - H = rr(TDAT8); TDAT8 = H; + H = rr(TDAT8); + TDAT8 = H; @wm m_ea fe1d # RR L = (XY+o) @rm_reg m_ea - L = rr(TDAT8); TDAT8 = L; + L = rr(TDAT8); + TDAT8 = L; @wm m_ea fe1e # RR (XY+o) @@ -1699,37 +1994,44 @@ fe1e # RR (XY+o) fe1f # RR A = (XY+o) @rm_reg m_ea - A = rr(TDAT8); TDAT8 = A; + A = rr(TDAT8); + TDAT8 = A; @wm m_ea fe20 # SLA B = (XY+o) @rm_reg m_ea - B = sla(TDAT8); TDAT8 = B; + B = sla(TDAT8); + TDAT8 = B; @wm m_ea fe21 # SLA C = (XY+o) @rm_reg m_ea - C = sla(TDAT8); TDAT8 = C; + C = sla(TDAT8); + TDAT8 = C; @wm m_ea fe22 # SLA D = (XY+o) @rm_reg m_ea - D = sla(TDAT8); TDAT8 = D; + D = sla(TDAT8); + TDAT8 = D; @wm m_ea fe23 # SLA E = (XY+o) @rm_reg m_ea - E = sla(TDAT8); TDAT8 = E; + E = sla(TDAT8); + TDAT8 = E; @wm m_ea fe24 # SLA H = (XY+o) @rm_reg m_ea - H = sla(TDAT8); TDAT8 = H; + H = sla(TDAT8); + TDAT8 = H; @wm m_ea fe25 # SLA L = (XY+o) @rm_reg m_ea - L = sla(TDAT8); TDAT8 = L; + L = sla(TDAT8); + TDAT8 = L; @wm m_ea fe26 # SLA (XY+o) @@ -1739,37 +2041,44 @@ fe26 # SLA (XY+o) fe27 # SLA A = (XY+o) @rm_reg m_ea - A = sla(TDAT8); TDAT8 = A; + A = sla(TDAT8); + TDAT8 = A; @wm m_ea fe28 # SRA B = (XY+o) @rm_reg m_ea - B = sra(TDAT8); TDAT8 = B; + B = sra(TDAT8); + TDAT8 = B; @wm m_ea fe29 # SRA C = (XY+o) @rm_reg m_ea - C = sra(TDAT8); TDAT8 = C; + C = sra(TDAT8); + TDAT8 = C; @wm m_ea fe2a # SRA D = (XY+o) @rm_reg m_ea - D = sra(TDAT8); TDAT8 = D; + D = sra(TDAT8); + TDAT8 = D; @wm m_ea fe2b # SRA E = (XY+o) @rm_reg m_ea - E = sra(TDAT8); TDAT8 = E; + E = sra(TDAT8); + TDAT8 = E; @wm m_ea fe2c # SRA H = (XY+o) @rm_reg m_ea - H = sra(TDAT8); TDAT8 = H; + H = sra(TDAT8); + TDAT8 = H; @wm m_ea fe2d # SRA L = (XY+o) @rm_reg m_ea - L = sra(TDAT8); TDAT8 = L; + L = sra(TDAT8); + TDAT8 = L; @wm m_ea fe2e # SRA (XY+o) @@ -1779,37 +2088,44 @@ fe2e # SRA (XY+o) fe2f # SRA A = (XY+o) @rm_reg m_ea - A = sra(TDAT8); TDAT8 = A; + A = sra(TDAT8); + TDAT8 = A; @wm m_ea fe30 # SLL B = (XY+o) @rm_reg m_ea - B = sll(TDAT8); TDAT8 = B; + B = sll(TDAT8); + TDAT8 = B; @wm m_ea fe31 # SLL C = (XY+o) @rm_reg m_ea - C = sll(TDAT8); TDAT8 = C; + C = sll(TDAT8); + TDAT8 = C; @wm m_ea fe32 # SLL D = (XY+o) @rm_reg m_ea - D = sll(TDAT8); TDAT8 = D; + D = sll(TDAT8); + TDAT8 = D; @wm m_ea fe33 # SLL E = (XY+o) @rm_reg m_ea - E = sll(TDAT8); TDAT8 = E; + E = sll(TDAT8); + TDAT8 = E; @wm m_ea fe34 # SLL H = (XY+o) @rm_reg m_ea - H = sll(TDAT8); TDAT8 = H; + H = sll(TDAT8); + TDAT8 = H; @wm m_ea fe35 # SLL L = (XY+o) @rm_reg m_ea - L = sll(TDAT8); TDAT8 = L; + L = sll(TDAT8); + TDAT8 = L; @wm m_ea fe36 # SLL (XY+o) @@ -1819,37 +2135,44 @@ fe36 # SLL (XY+o) fe37 # SLL A = (XY+o) @rm_reg m_ea - A = sll(TDAT8); TDAT8 = A; + A = sll(TDAT8); + TDAT8 = A; @wm m_ea fe38 # SRL B = (XY+o) @rm_reg m_ea - B = srl(TDAT8); TDAT8 = B; + B = srl(TDAT8); + TDAT8 = B; @wm m_ea fe39 # SRL C = (XY+o) @rm_reg m_ea - C = srl(TDAT8); TDAT8 = C; + C = srl(TDAT8); + TDAT8 = C; @wm m_ea fe3a # SRL D = (XY+o) @rm_reg m_ea - D = srl(TDAT8); TDAT8 = D; + D = srl(TDAT8); + TDAT8 = D; @wm m_ea fe3b # SRL E = (XY+o) @rm_reg m_ea - E = srl(TDAT8); TDAT8 = E; + E = srl(TDAT8); + TDAT8 = E; @wm m_ea fe3c # SRL H = (XY+o) @rm_reg m_ea - H = srl(TDAT8); TDAT8 = H; + H = srl(TDAT8); + TDAT8 = H; @wm m_ea fe3d # SRL L = (XY+o) @rm_reg m_ea - L = srl(TDAT8); TDAT8 = L; + L = srl(TDAT8); + TDAT8 = L; @wm m_ea fe3e # SRL (XY+o) @@ -1859,7 +2182,8 @@ fe3e # SRL (XY+o) fe3f # SRL A = (XY+o) @rm_reg m_ea - A = srl(TDAT8); TDAT8 = A; + A = srl(TDAT8); + TDAT8 = A; @wm m_ea fe40 # BIT 0,(XY+o) @@ -2064,32 +2388,38 @@ fe7f # BIT 7,(XY+o) fe80 # RES 0,B = (XY+o) @rm_reg m_ea - B = res(0, TDAT8); TDAT8 = B; + B = res(0, TDAT8); + TDAT8 = B; @wm m_ea fe81 # RES 0,C = (XY+o) @rm_reg m_ea - C = res(0, TDAT8); TDAT8 = C; + C = res(0, TDAT8); + TDAT8 = C; @wm m_ea fe82 # RES 0,D = (XY+o) @rm_reg m_ea - D = res(0, TDAT8); TDAT8 = D; + D = res(0, TDAT8); + TDAT8 = D; @wm m_ea fe83 # RES 0,E = (XY+o) @rm_reg m_ea - E = res(0, TDAT8); TDAT8 = E; + E = res(0, TDAT8); + TDAT8 = E; @wm m_ea fe84 # RES 0,H = (XY+o) @rm_reg m_ea - H = res(0, TDAT8); TDAT8 = H; + H = res(0, TDAT8); + TDAT8 = H; @wm m_ea fe85 # RES 0,L = (XY+o) @rm_reg m_ea - L = res(0, TDAT8); TDAT8 = L; + L = res(0, TDAT8); + TDAT8 = L; @wm m_ea fe86 # RES 0,(XY+o) @@ -2099,37 +2429,44 @@ fe86 # RES 0,(XY+o) fe87 # RES 0,A = (XY+o) @rm_reg m_ea - A = res(0, TDAT8); TDAT8 = A; + A = res(0, TDAT8); + TDAT8 = A; @wm m_ea fe88 # RES 1,B = (XY+o) @rm_reg m_ea - B = res(1, TDAT8); TDAT8 = B; + B = res(1, TDAT8); + TDAT8 = B; @wm m_ea fe89 # RES 1,C = (XY+o) @rm_reg m_ea - C = res(1, TDAT8); TDAT8 = C; + C = res(1, TDAT8); + TDAT8 = C; @wm m_ea fe8a # RES 1,D = (XY+o) @rm_reg m_ea - D = res(1, TDAT8); TDAT8 = D; + D = res(1, TDAT8); + TDAT8 = D; @wm m_ea fe8b # RES 1,E = (XY+o) @rm_reg m_ea - E = res(1, TDAT8); TDAT8 = E; + E = res(1, TDAT8); + TDAT8 = E; @wm m_ea fe8c # RES 1,H = (XY+o) @rm_reg m_ea - H = res(1, TDAT8); TDAT8 = H; + H = res(1, TDAT8); + TDAT8 = H; @wm m_ea fe8d # RES 1,L = (XY+o) @rm_reg m_ea - L = res(1, TDAT8); TDAT8 = L; + L = res(1, TDAT8); + TDAT8 = L; @wm m_ea fe8e # RES 1,(XY+o) @@ -2139,37 +2476,44 @@ fe8e # RES 1,(XY+o) fe8f # RES 1,A = (XY+o) @rm_reg m_ea - A = res(1, TDAT8); TDAT8 = A; + A = res(1, TDAT8); + TDAT8 = A; @wm m_ea fe90 # RES 2,B = (XY+o) @rm_reg m_ea - B = res(2, TDAT8); TDAT8 = B; + B = res(2, TDAT8); + TDAT8 = B; @wm m_ea fe91 # RES 2,C = (XY+o) @rm_reg m_ea - C = res(2, TDAT8); TDAT8 = C; + C = res(2, TDAT8); + TDAT8 = C; @wm m_ea fe92 # RES 2,D = (XY+o) @rm_reg m_ea - D = res(2, TDAT8); TDAT8 = D; + D = res(2, TDAT8); + TDAT8 = D; @wm m_ea fe93 # RES 2,E = (XY+o) @rm_reg m_ea - E = res(2, TDAT8); TDAT8 = E; + E = res(2, TDAT8); + TDAT8 = E; @wm m_ea fe94 # RES 2,H = (XY+o) @rm_reg m_ea - H = res(2, TDAT8); TDAT8 = H; + H = res(2, TDAT8); + TDAT8 = H; @wm m_ea fe95 # RES 2,L = (XY+o) @rm_reg m_ea - L = res(2, TDAT8); TDAT8 = L; + L = res(2, TDAT8); + TDAT8 = L; @wm m_ea fe96 # RES 2,(XY+o) @@ -2179,37 +2523,44 @@ fe96 # RES 2,(XY+o) fe97 # RES 2,A = (XY+o) @rm_reg m_ea - A = res(2, TDAT8); TDAT8 = A; + A = res(2, TDAT8); + TDAT8 = A; @wm m_ea fe98 # RES 3,B = (XY+o) @rm_reg m_ea - B = res(3, TDAT8); TDAT8 = B; + B = res(3, TDAT8); + TDAT8 = B; @wm m_ea fe99 # RES 3,C = (XY+o) @rm_reg m_ea - C = res(3, TDAT8); TDAT8 = C; + C = res(3, TDAT8); + TDAT8 = C; @wm m_ea fe9a # RES 3,D = (XY+o) @rm_reg m_ea - D = res(3, TDAT8); TDAT8 = D; + D = res(3, TDAT8); + TDAT8 = D; @wm m_ea fe9b # RES 3,E = (XY+o) @rm_reg m_ea - E = res(3, TDAT8); TDAT8 = E; + E = res(3, TDAT8); + TDAT8 = E; @wm m_ea fe9c # RES 3,H = (XY+o) @rm_reg m_ea - H = res(3, TDAT8); TDAT8 = H; + H = res(3, TDAT8); + TDAT8 = H; @wm m_ea fe9d # RES 3,L = (XY+o) @rm_reg m_ea - L = res(3, TDAT8); TDAT8 = L; + L = res(3, TDAT8); + TDAT8 = L; @wm m_ea fe9e # RES 3,(XY+o) @@ -2219,37 +2570,44 @@ fe9e # RES 3,(XY+o) fe9f # RES 3,A = (XY+o) @rm_reg m_ea - A = res(3, TDAT8); TDAT8 = A; + A = res(3, TDAT8); + TDAT8 = A; @wm m_ea fea0 # RES 4,B = (XY+o) @rm_reg m_ea - B = res(4, TDAT8); TDAT8 = B; + B = res(4, TDAT8); + TDAT8 = B; @wm m_ea fea1 # RES 4,C = (XY+o) @rm_reg m_ea - C = res(4, TDAT8); TDAT8 = C; + C = res(4, TDAT8); + TDAT8 = C; @wm m_ea fea2 # RES 4,D = (XY+o) @rm_reg m_ea - D = res(4, TDAT8); TDAT8 = D; + D = res(4, TDAT8); + TDAT8 = D; @wm m_ea fea3 # RES 4,E = (XY+o) @rm_reg m_ea - E = res(4, TDAT8); TDAT8 = E; + E = res(4, TDAT8); + TDAT8 = E; @wm m_ea fea4 # RES 4,H = (XY+o) @rm_reg m_ea - H = res(4, TDAT8); TDAT8 = H; + H = res(4, TDAT8); + TDAT8 = H; @wm m_ea fea5 # RES 4,L = (XY+o) @rm_reg m_ea - L = res(4, TDAT8); TDAT8 = L; + L = res(4, TDAT8); + TDAT8 = L; @wm m_ea fea6 # RES 4,(XY+o) @@ -2259,37 +2617,44 @@ fea6 # RES 4,(XY+o) fea7 # RES 4,A = (XY+o) @rm_reg m_ea - A = res(4, TDAT8); TDAT8 = A; + A = res(4, TDAT8); + TDAT8 = A; @wm m_ea fea8 # RES 5,B = (XY+o) @rm_reg m_ea - B = res(5, TDAT8); TDAT8 = B; + B = res(5, TDAT8); + TDAT8 = B; @wm m_ea fea9 # RES 5,C = (XY+o) @rm_reg m_ea - C = res(5, TDAT8); TDAT8 = C; + C = res(5, TDAT8); + TDAT8 = C; @wm m_ea feaa # RES 5,D = (XY+o) @rm_reg m_ea - D = res(5, TDAT8); TDAT8 = D; + D = res(5, TDAT8); + TDAT8 = D; @wm m_ea feab # RES 5,E = (XY+o) @rm_reg m_ea - E = res(5, TDAT8); TDAT8 = E; + E = res(5, TDAT8); + TDAT8 = E; @wm m_ea feac # RES 5,H = (XY+o) @rm_reg m_ea - H = res(5, TDAT8); TDAT8 = H; + H = res(5, TDAT8); + TDAT8 = H; @wm m_ea fead # RES 5,L = (XY+o) @rm_reg m_ea - L = res(5, TDAT8); TDAT8 = L; + L = res(5, TDAT8); + TDAT8 = L; @wm m_ea feae # RES 5,(XY+o) @@ -2299,37 +2664,44 @@ feae # RES 5,(XY+o) feaf # RES 5,A = (XY+o) @rm_reg m_ea - A = res(5, TDAT8); TDAT8 = A; + A = res(5, TDAT8); + TDAT8 = A; @wm m_ea feb0 # RES 6,B = (XY+o) @rm_reg m_ea - B = res(6, TDAT8); TDAT8 = B; + B = res(6, TDAT8); + TDAT8 = B; @wm m_ea feb1 # RES 6,C = (XY+o) @rm_reg m_ea - C = res(6, TDAT8); TDAT8 = C; + C = res(6, TDAT8); + TDAT8 = C; @wm m_ea feb2 # RES 6,D = (XY+o) @rm_reg m_ea - D = res(6, TDAT8); TDAT8 = D; + D = res(6, TDAT8); + TDAT8 = D; @wm m_ea feb3 # RES 6,E = (XY+o) @rm_reg m_ea - E = res(6, TDAT8); TDAT8 = E; + E = res(6, TDAT8); + TDAT8 = E; @wm m_ea feb4 # RES 6,H = (XY+o) @rm_reg m_ea - H = res(6, TDAT8); TDAT8 = H; + H = res(6, TDAT8); + TDAT8 = H; @wm m_ea feb5 # RES 6,L = (XY+o) @rm_reg m_ea - L = res(6, TDAT8); TDAT8 = L; + L = res(6, TDAT8); + TDAT8 = L; @wm m_ea feb6 # RES 6,(XY+o) @@ -2339,37 +2711,44 @@ feb6 # RES 6,(XY+o) feb7 # RES 6,A = (XY+o) @rm_reg m_ea - A = res(6, TDAT8); TDAT8 = A; + A = res(6, TDAT8); + TDAT8 = A; @wm m_ea feb8 # RES 7,B = (XY+o) @rm_reg m_ea - B = res(7, TDAT8); TDAT8 = B; + B = res(7, TDAT8); + TDAT8 = B; @wm m_ea feb9 # RES 7,C = (XY+o) @rm_reg m_ea - C = res(7, TDAT8); TDAT8 = C; + C = res(7, TDAT8); + TDAT8 = C; @wm m_ea feba # RES 7,D = (XY+o) @rm_reg m_ea - D = res(7, TDAT8); TDAT8 = D; + D = res(7, TDAT8); + TDAT8 = D; @wm m_ea febb # RES 7,E = (XY+o) @rm_reg m_ea - E = res(7, TDAT8); TDAT8 = E; + E = res(7, TDAT8); + TDAT8 = E; @wm m_ea febc # RES 7,H = (XY+o) @rm_reg m_ea - H = res(7, TDAT8); TDAT8 = H; + H = res(7, TDAT8); + TDAT8 = H; @wm m_ea febd # RES 7,L = (XY+o) @rm_reg m_ea - L = res(7, TDAT8); TDAT8 = L; + L = res(7, TDAT8); + TDAT8 = L; @wm m_ea febe # RES 7,(XY+o) @@ -2379,37 +2758,44 @@ febe # RES 7,(XY+o) febf # RES 7,A = (XY+o) @rm_reg m_ea - A = res(7, TDAT8); TDAT8 = A; + A = res(7, TDAT8); + TDAT8 = A; @wm m_ea fec0 # SET 0,B = (XY+o) @rm_reg m_ea - B = set(0, TDAT8); TDAT8 = B; + B = set(0, TDAT8); + TDAT8 = B; @wm m_ea fec1 # SET 0,C = (XY+o) @rm_reg m_ea - C = set(0, TDAT8); TDAT8 = C; + C = set(0, TDAT8); + TDAT8 = C; @wm m_ea fec2 # SET 0,D = (XY+o) @rm_reg m_ea - D = set(0, TDAT8); TDAT8 = D; + D = set(0, TDAT8); + TDAT8 = D; @wm m_ea fec3 # SET 0,E = (XY+o) @rm_reg m_ea - E = set(0, TDAT8); TDAT8 = E; + E = set(0, TDAT8); + TDAT8 = E; @wm m_ea fec4 # SET 0,H = (XY+o) @rm_reg m_ea - H = set(0, TDAT8); TDAT8 = H; + H = set(0, TDAT8); + TDAT8 = H; @wm m_ea fec5 # SET 0,L = (XY+o) @rm_reg m_ea - L = set(0, TDAT8); TDAT8 = L; + L = set(0, TDAT8); + TDAT8 = L; @wm m_ea fec6 # SET 0,(XY+o) @@ -2419,37 +2805,44 @@ fec6 # SET 0,(XY+o) fec7 # SET 0,A = (XY+o) @rm_reg m_ea - A = set(0, TDAT8); TDAT8 = A; + A = set(0, TDAT8); + TDAT8 = A; @wm m_ea fec8 # SET 1,B = (XY+o) @rm_reg m_ea - B = set(1, TDAT8); TDAT8 = B; + B = set(1, TDAT8); + TDAT8 = B; @wm m_ea fec9 # SET 1,C = (XY+o) @rm_reg m_ea - C = set(1, TDAT8); TDAT8 = C; + C = set(1, TDAT8); + TDAT8 = C; @wm m_ea feca # SET 1,D = (XY+o) @rm_reg m_ea - D = set(1, TDAT8); TDAT8 = D; + D = set(1, TDAT8); + TDAT8 = D; @wm m_ea fecb # SET 1,E = (XY+o) @rm_reg m_ea - E = set(1, TDAT8); TDAT8 = E; + E = set(1, TDAT8); + TDAT8 = E; @wm m_ea fecc # SET 1,H = (XY+o) @rm_reg m_ea - H = set(1, TDAT8); TDAT8 = H; + H = set(1, TDAT8); + TDAT8 = H; @wm m_ea fecd # SET 1,L = (XY+o) @rm_reg m_ea - L = set(1, TDAT8); TDAT8 = L; + L = set(1, TDAT8); + TDAT8 = L; @wm m_ea fece # SET 1,(XY+o) @@ -2459,37 +2852,44 @@ fece # SET 1,(XY+o) fecf # SET 1,A = (XY+o) @rm_reg m_ea - A = set(1, TDAT8); TDAT8 = A; + A = set(1, TDAT8); + TDAT8 = A; @wm m_ea fed0 # SET 2,B = (XY+o) @rm_reg m_ea - B = set(2, TDAT8); TDAT8 = B; + B = set(2, TDAT8); + TDAT8 = B; @wm m_ea fed1 # SET 2,C = (XY+o) @rm_reg m_ea - C = set(2, TDAT8); TDAT8 = C; + C = set(2, TDAT8); + TDAT8 = C; @wm m_ea fed2 # SET 2,D = (XY+o) @rm_reg m_ea - D = set(2, TDAT8); TDAT8 = D; + D = set(2, TDAT8); + TDAT8 = D; @wm m_ea fed3 # SET 2,E = (XY+o) @rm_reg m_ea - E = set(2, TDAT8); TDAT8 = E; + E = set(2, TDAT8); + TDAT8 = E; @wm m_ea fed4 # SET 2,H = (XY+o) @rm_reg m_ea - H = set(2, TDAT8); TDAT8 = H; + H = set(2, TDAT8); + TDAT8 = H; @wm m_ea fed5 # SET 2,L = (XY+o) @rm_reg m_ea - L = set(2, TDAT8); TDAT8 = L; + L = set(2, TDAT8); + TDAT8 = L; @wm m_ea fed6 # SET 2,(XY+o) @@ -2499,37 +2899,44 @@ fed6 # SET 2,(XY+o) fed7 # SET 2,A = (XY+o) @rm_reg m_ea - A = set(2, TDAT8); TDAT8 = A; + A = set(2, TDAT8); + TDAT8 = A; @wm m_ea fed8 # SET 3,B = (XY+o) @rm_reg m_ea - B = set(3, TDAT8); TDAT8 = B; + B = set(3, TDAT8); + TDAT8 = B; @wm m_ea fed9 # SET 3,C = (XY+o) @rm_reg m_ea - C = set(3, TDAT8); TDAT8 = C; + C = set(3, TDAT8); + TDAT8 = C; @wm m_ea feda # SET 3,D = (XY+o) @rm_reg m_ea - D = set(3, TDAT8); TDAT8 = D; + D = set(3, TDAT8); + TDAT8 = D; @wm m_ea fedb # SET 3,E = (XY+o) @rm_reg m_ea - E = set(3, TDAT8); TDAT8 = E; + E = set(3, TDAT8); + TDAT8 = E; @wm m_ea fedc # SET 3,H = (XY+o) @rm_reg m_ea - H = set(3, TDAT8); TDAT8 = H; + H = set(3, TDAT8); + TDAT8 = H; @wm m_ea fedd # SET 3,L = (XY+o) @rm_reg m_ea - L = set(3, TDAT8); TDAT8 = L; + L = set(3, TDAT8); + TDAT8 = L; @wm m_ea fede # SET 3,(XY+o) @@ -2539,37 +2946,44 @@ fede # SET 3,(XY+o) fedf # SET 3,A = (XY+o) @rm_reg m_ea - A = set(3, TDAT8); TDAT8 = A; + A = set(3, TDAT8); + TDAT8 = A; @wm m_ea fee0 # SET 4,B = (XY+o) @rm_reg m_ea - B = set(4, TDAT8); TDAT8 = B; + B = set(4, TDAT8); + TDAT8 = B; @wm m_ea fee1 # SET 4,C = (XY+o) @rm_reg m_ea - C = set(4, TDAT8); TDAT8 = C; + C = set(4, TDAT8); + TDAT8 = C; @wm m_ea fee2 # SET 4,D = (XY+o) @rm_reg m_ea - D = set(4, TDAT8); TDAT8 = D; + D = set(4, TDAT8); + TDAT8 = D; @wm m_ea fee3 # SET 4,E = (XY+o) @rm_reg m_ea - E = set(4, TDAT8); TDAT8 = E; + E = set(4, TDAT8); + TDAT8 = E; @wm m_ea fee4 # SET 4,H = (XY+o) @rm_reg m_ea - H = set(4, TDAT8); TDAT8 = H; + H = set(4, TDAT8); + TDAT8 = H; @wm m_ea fee5 # SET 4,L = (XY+o) @rm_reg m_ea - L = set(4, TDAT8); TDAT8 = L; + L = set(4, TDAT8); + TDAT8 = L; @wm m_ea fee6 # SET 4,(XY+o) @@ -2579,37 +2993,44 @@ fee6 # SET 4,(XY+o) fee7 # SET 4,A = (XY+o) @rm_reg m_ea - A = set(4, TDAT8); TDAT8 = A; + A = set(4, TDAT8); + TDAT8 = A; @wm m_ea fee8 # SET 5,B = (XY+o) @rm_reg m_ea - B = set(5, TDAT8); TDAT8 = B; + B = set(5, TDAT8); + TDAT8 = B; @wm m_ea fee9 # SET 5,C = (XY+o) @rm_reg m_ea - C = set(5, TDAT8); TDAT8 = C; + C = set(5, TDAT8); + TDAT8 = C; @wm m_ea feea # SET 5,D = (XY+o) @rm_reg m_ea - D = set(5, TDAT8); TDAT8 = D; + D = set(5, TDAT8); + TDAT8 = D; @wm m_ea feeb # SET 5,E = (XY+o) @rm_reg m_ea - E = set(5, TDAT8); TDAT8 = E; + E = set(5, TDAT8); + TDAT8 = E; @wm m_ea feec # SET 5,H = (XY+o) @rm_reg m_ea - H = set(5, TDAT8); TDAT8 = H; + H = set(5, TDAT8); + TDAT8 = H; @wm m_ea feed # SET 5,L = (XY+o) @rm_reg m_ea - L = set(5, TDAT8); TDAT8 = L; + L = set(5, TDAT8); + TDAT8 = L; @wm m_ea feee # SET 5,(XY+o) @@ -2619,37 +3040,44 @@ feee # SET 5,(XY+o) feef # SET 5,A = (XY+o) @rm_reg m_ea - A = set(5, TDAT8); TDAT8 = A; + A = set(5, TDAT8); + TDAT8 = A; @wm m_ea fef0 # SET 6,B = (XY+o) @rm_reg m_ea - B = set(6, TDAT8); TDAT8 = B; + B = set(6, TDAT8); + TDAT8 = B; @wm m_ea fef1 # SET 6,C = (XY+o) @rm_reg m_ea - C = set(6, TDAT8); TDAT8 = C; + C = set(6, TDAT8); + TDAT8 = C; @wm m_ea fef2 # SET 6,D = (XY+o) @rm_reg m_ea - D = set(6, TDAT8); TDAT8 = D; + D = set(6, TDAT8); + TDAT8 = D; @wm m_ea fef3 # SET 6,E = (XY+o) @rm_reg m_ea - E = set(6, TDAT8); TDAT8 = E; + E = set(6, TDAT8); + TDAT8 = E; @wm m_ea fef4 # SET 6,H = (XY+o) @rm_reg m_ea - H = set(6, TDAT8); TDAT8 = H; + H = set(6, TDAT8); + TDAT8 = H; @wm m_ea fef5 # SET 6,L = (XY+o) @rm_reg m_ea - L = set(6, TDAT8); TDAT8 = L; + L = set(6, TDAT8); + TDAT8 = L; @wm m_ea fef6 # SET 6,(XY+o) @@ -2659,37 +3087,44 @@ fef6 # SET 6,(XY+o) fef7 # SET 6,A = (XY+o) @rm_reg m_ea - A = set(6, TDAT8); TDAT8 = A; + A = set(6, TDAT8); + TDAT8 = A; @wm m_ea fef8 # SET 7,B = (XY+o) @rm_reg m_ea - B = set(7, TDAT8); TDAT8 = B; + B = set(7, TDAT8); + TDAT8 = B; @wm m_ea fef9 # SET 7,C = (XY+o) @rm_reg m_ea - C = set(7, TDAT8); TDAT8 = C; + C = set(7, TDAT8); + TDAT8 = C; @wm m_ea fefa # SET 7,D = (XY+o) @rm_reg m_ea - D = set(7, TDAT8); TDAT8 = D; + D = set(7, TDAT8); + TDAT8 = D; @wm m_ea fefb # SET 7,E = (XY+o) @rm_reg m_ea - E = set(7, TDAT8); TDAT8 = E; + E = set(7, TDAT8); + TDAT8 = E; @wm m_ea fefc # SET 7,H = (XY+o) @rm_reg m_ea - H = set(7, TDAT8); TDAT8 = H; + H = set(7, TDAT8); + TDAT8 = H; @wm m_ea fefd # SET 7,L = (XY+o) @rm_reg m_ea - L = set(7, TDAT8); TDAT8 = L; + L = set(7, TDAT8); + TDAT8 = L; @wm m_ea fefe # SET 7,(XY+o) @@ -2699,7 +3134,8 @@ fefe # SET 7,(XY+o) feff # SET 7,A = (XY+o) @rm_reg m_ea - A = set(7, TDAT8); TDAT8 = A; + A = set(7, TDAT8); + TDAT8 = A; @wm m_ea @@ -2743,7 +3179,8 @@ dd08 # DB DD @jump 0008 dd09 # ADD IX,BC - TDAT = IX; TDAT2 = BC; + TDAT = IX; + TDAT2 = BC; @add16 IX = TDAT; @@ -2808,7 +3245,8 @@ dd18 # DB DD @jump 0018 dd19 # ADD IX,DE - TDAT = IX; TDAT2 = DE; + TDAT = IX; + TDAT2 = DE; @add16 IX = TDAT; @@ -2846,7 +3284,8 @@ dd21 # LD IX,w dd22 # LD (w),IX @arg16 - m_ea = TDAT; TDAT = IX; + m_ea = TDAT; + TDAT = IX; @wm16 m_ea WZ = m_ea + 1; @@ -2873,7 +3312,8 @@ dd28 # DB DD @jump 0028 dd29 # ADD IX,IX - TDAT = IX; TDAT2 = IX; + TDAT = IX; + TDAT2 = IX; @add16 IX = TDAT; @@ -2881,7 +3321,8 @@ dd2a # LD IX,(w) @arg16 m_ea = TDAT; @rm16 m_ea - IX = TDAT; WZ = m_ea + 1; + IX = TDAT; + WZ = m_ea + 1; dd2b # DEC IX @nomreq_ir 2 @@ -2946,7 +3387,8 @@ dd38 # DB DD @jump 0038 dd39 # ADD IX,SP - TDAT = IX; TDAT2 = SP; + TDAT = IX; + TDAT2 = SP; @add16 IX = TDAT; @@ -3784,7 +4226,8 @@ fd08 # DB FD @jump 0008 fd09 # ADD IY,BC - TDAT = IY; TDAT2 = BC; + TDAT = IY; + TDAT2 = BC; @add16 IY = TDAT; @@ -3849,7 +4292,8 @@ fd18 # DB FD @jump 0018 fd19 # ADD IY,DE - TDAT = IY; TDAT2 = DE; + TDAT = IY; + TDAT2 = DE; @add16 IY = TDAT; @@ -3887,7 +4331,8 @@ fd21 # LD IY,w fd22 # LD (w),IY @arg16 - m_ea = TDAT; TDAT = IY; + m_ea = TDAT; + TDAT = IY; @wm16 m_ea WZ = m_ea + 1; @@ -3914,7 +4359,8 @@ fd28 # DB FD @jump 0028 fd29 # ADD IY,IY - TDAT = IY; TDAT2 = IY; + TDAT = IY; + TDAT2 = IY; @add16 IY = TDAT; @@ -3922,7 +4368,8 @@ fd2a # LD IY,(w) @arg16 m_ea = TDAT; @rm16 m_ea - IY = TDAT; WZ = m_ea + 1; + IY = TDAT; + WZ = m_ea + 1; fd2b # DEC IY @nomreq_ir 2 @@ -3987,7 +4434,8 @@ fd38 # DB FD @jump 0038 fd39 # ADD IY,SP - TDAT = IY; TDAT2 = SP; + TDAT = IY; + TDAT2 = SP; @add16 IY = TDAT; @@ -4982,7 +5430,9 @@ ed3f # DB ED ed40 # IN B,(C) @in BC - B = TDAT8; set_f((F & CF) | SZP[B]); WZ = BC + 1; + B = TDAT8; + set_f((F & CF) | SZP[B]); + WZ = BC + 1; ed41 # OUT (C),B TDAT8 = B; @@ -4995,7 +5445,8 @@ ed42 # SBC HL,BC ed43 # LD (w),BC @arg16 - m_ea = TDAT; TDAT = BC; + m_ea = TDAT; + TDAT = BC; @wm16 m_ea WZ = m_ea + 1; @@ -5013,7 +5464,9 @@ ed47 # LD i,A ed48 # IN C,(C) @in BC - C = TDAT8; set_f((F & CF) | SZP[C]); WZ = BC + 1; + C = TDAT8; + set_f((F & CF) | SZP[C]); + WZ = BC + 1; ed49 # OUT (C),C TDAT8 = C; @@ -5028,7 +5481,8 @@ ed4b # LD BC,(w) @arg16 m_ea = TDAT; @rm16 m_ea - BC = TDAT; WZ = m_ea + 1; + BC = TDAT; + WZ = m_ea + 1; ed4c # NEG neg(); @@ -5044,7 +5498,9 @@ ed4f # LD r,A ed50 # IN D,(C) @in BC - D = TDAT8; set_f((F & CF) | SZP[D]); WZ = BC + 1; + D = TDAT8; + set_f((F & CF) | SZP[D]); + WZ = BC + 1; ed51 # OUT (C),D TDAT8 = D; @@ -5057,7 +5513,8 @@ ed52 # SBC HL,DE ed53 # LD (w),DE @arg16 - m_ea = TDAT; TDAT = DE; + m_ea = TDAT; + TDAT = DE; @wm16 m_ea WZ = m_ea + 1; @@ -5075,7 +5532,9 @@ ed57 # LD A,i ed58 # IN E,(C) @in BC - E = TDAT8; set_f((F & CF) | SZP[E]); WZ = BC + 1; + E = TDAT8; + set_f((F & CF) | SZP[E]); + WZ = BC + 1; ed59 # OUT (C),E TDAT8 = E; @@ -5090,7 +5549,8 @@ ed5b # LD DE,(w) @arg16 m_ea = TDAT; @rm16 m_ea - DE = TDAT; WZ = m_ea + 1; + DE = TDAT; + WZ = m_ea + 1; ed5c # NEG neg(); @@ -5106,7 +5566,9 @@ ed5f # LD A,r ed60 # IN H,(C) @in BC - H = TDAT8; set_f((F & CF) | SZP[H]); WZ = BC + 1; + H = TDAT8; + set_f((F & CF) | SZP[H]); + WZ = BC + 1; ed61 # OUT (C),H TDAT8 = H; @@ -5119,7 +5581,8 @@ ed62 # SBC HL,HL ed63 # LD (w),HL @arg16 - m_ea = TDAT; TDAT = HL; + m_ea = TDAT; + TDAT = HL; @wm16 m_ea WZ = m_ea + 1; @@ -5137,7 +5600,9 @@ ed67 # RRD (HL) ed68 # IN L,(C) @in BC - L = TDAT8; set_f((F & CF) | SZP[L]); WZ = BC + 1; + L = TDAT8; + set_f((F & CF) | SZP[L]); + WZ = BC + 1; ed69 # OUT (C),L TDAT8 = L; @@ -5152,7 +5617,8 @@ ed6b # LD HL,(w) @arg16 m_ea = TDAT; @rm16 m_ea - HL = TDAT; WZ = m_ea + 1; + HL = TDAT; + WZ = m_ea + 1; ed6c # NEG neg(); @@ -5168,7 +5634,8 @@ ed6f # RLD (HL) ed70 # IN 0,(C) @in BC - set_f((F & CF) | SZP[TDAT8]); WZ = BC + 1; + set_f((F & CF) | SZP[TDAT8]); + WZ = BC + 1; ed71 # OUT (C),0 TDAT8 = 0; @@ -5181,7 +5648,8 @@ ed72 # SBC HL,SP ed73 # LD (w),SP @arg16 - m_ea = TDAT; TDAT = SP; + m_ea = TDAT; + TDAT = SP; @wm16 m_ea WZ = m_ea + 1; @@ -5199,7 +5667,9 @@ ed77 # DB ED,77 ed78 # IN A,(C) @in BC - A = TDAT8; set_f((F & CF) | SZP[A]); WZ = BC + 1; + A = TDAT8; + set_f((F & CF) | SZP[A]); + WZ = BC + 1; ed79 # OUT (C),A TDAT8 = A; @@ -5214,7 +5684,8 @@ ed7b # LD SP,(w) @arg16 m_ea = TDAT; @rm16 m_ea - SP = TDAT; WZ = m_ea + 1; + SP = TDAT; + WZ = m_ea + 1; ed7c # NEG neg(); @@ -5625,7 +6096,8 @@ edff # DB ED 0002 # LD (BC),A TDAT8 = A; @wm BC - WZ_L = (BC + 1) & 0xFF; WZ_H = A; + WZ_L = (BC + 1) & 0xFF; + WZ_H = A; 0003 # INC BC @nomreq_ir 2 @@ -5645,16 +6117,19 @@ edff # DB ED rlca(); 0008 # EX AF,AF' - using std::swap; swap(m_af, m_af2); + using std::swap; + swap(m_af, m_af2); 0009 # ADD HL,BC - TDAT = HL; TDAT2 = BC; + TDAT = HL; + TDAT2 = BC; @add16 HL = TDAT; 000a # LD A,(BC) @rm BC - A = TDAT8; WZ = BC+1; + A = TDAT8; + WZ = BC+1; 000b # DEC BC @nomreq_ir 2 @@ -5685,7 +6160,8 @@ edff # DB ED 0012 # LD (DE),A TDAT8 = A; @wm DE - WZ_L = (DE + 1) & 0xFF; WZ_H = A; + WZ_L = (DE + 1) & 0xFF; + WZ_H = A; 0013 # INC DE @nomreq_ir 2 @@ -5708,13 +6184,15 @@ edff # DB ED @jr 0019 # ADD HL,DE - TDAT = HL; TDAT2 = DE; + TDAT = HL; + TDAT2 = DE; @add16 HL = TDAT; 001a # LD A,(DE) @rm DE - A = TDAT8; WZ = DE + 1; + A = TDAT8; + WZ = DE + 1; 001b # DEC DE @nomreq_ir 2 @@ -5743,7 +6221,8 @@ edff # DB ED 0022 # LD (w),HL @arg16 - m_ea = TDAT; TDAT = HL; + m_ea = TDAT; + TDAT = HL; @wm16 m_ea WZ = m_ea + 1; @@ -5769,7 +6248,8 @@ edff # DB ED @jr_cond 0029 # ADD HL,HL - TDAT = HL; TDAT2 = HL; + TDAT = HL; + TDAT2 = HL; @add16 HL = TDAT; @@ -5777,7 +6257,8 @@ edff # DB ED @arg16 m_ea = TDAT; @rm16 m_ea - HL = TDAT; WZ = m_ea + 1; + HL = TDAT; + WZ = m_ea + 1; 002b # DEC HL @nomreq_ir 2 @@ -5794,7 +6275,8 @@ edff # DB ED L = TDAT8; 002f # CPL - A ^= 0xff; set_f((F & (SF | ZF | PF | CF)) | HF | NF | (A & (YF | XF))); + A ^= 0xff; + set_f((F & (SF | ZF | PF | CF)) | HF | NF | (A & (YF | XF))); 0030 # JR NC,o TDAT8 = !(F & CF); @@ -5806,9 +6288,11 @@ edff # DB ED 0032 # LD (w),A @arg16 - m_ea = TDAT; TDAT8 = A; + m_ea = TDAT; + TDAT8 = A; @wm m_ea - WZ_L = (m_ea + 1) & 0xFF; WZ_H = A; + WZ_L = (m_ea + 1) & 0xFF; + WZ_H = A; 0033 # INC SP @nomreq_ir 2 @@ -5836,7 +6320,8 @@ edff # DB ED @jr_cond 0039 # ADD HL,SP - TDAT = HL; TDAT2 = SP; + TDAT = HL; + TDAT2 = SP; @add16 HL = TDAT; @@ -5844,7 +6329,8 @@ edff # DB ED @arg16 m_ea = TDAT; @rm m_ea - A = TDAT8; WZ = m_ea + 1; + A = TDAT8; + WZ = m_ea + 1; 003b # DEC SP @nomreq_ir 2 @@ -6297,7 +6783,8 @@ edff # DB ED 00c9 # RET @pop - PC = TDAT; WZ = PC; + PC = TDAT; + WZ = PC; 00ca # JP Z,a TDAT8 = F & ZF; @@ -6338,7 +6825,8 @@ edff # DB ED TDAT2 = TDAT8 | (A << 8); TDAT = A; @out TDAT2 - WZ_L = ((TDAT2 & 0xff) + 1) & 0xff; WZ_H = A; + WZ_L = ((TDAT2 & 0xff) + 1) & 0xff; + WZ_H = A; 00d4 # CALL NC,a TDAT8 = !(F & CF); @@ -6369,7 +6857,8 @@ edff # DB ED @arg TDAT2 = TDAT8 | (A << 8); @in TDAT2 - A = TDAT8; WZ = TDAT2 + 1; + A = TDAT8; + WZ = TDAT2 + 1; 00dc # CALL C,a TDAT8 = F & CF; @@ -6427,7 +6916,8 @@ edff # DB ED @jp_cond 00eb # EX DE,HL - using std::swap; swap(DE, HL); + using std::swap; + swap(DE, HL); 00ec # CALL PE,a TDAT8 = F & PF; @@ -8349,28 +8839,28 @@ r800:00f3 # DI # Z80N ########################################################## macro ldix - { - @rm HL - if (TDAT8 != A) { - @wm DE - ; - } - HL++; - DE++; - BC--; +{ + @rm HL + if (TDAT8 != A) { + @wm DE + ; } + HL++; + DE++; + BC--; +} macro lddx - { - @rm HL - if (TDAT8 != A) { - @wm DE - ; - } - DE++; - HL--; - BC--; +{ + @rm HL + if (TDAT8 != A) { + @wm DE + ; } + DE++; + HL--; + BC--; +} z80n:ed23 # swapnib A = (A << 4) | (A >> 4); @@ -8388,10 +8878,10 @@ z80n:ed28 # bsla de,b DE <<= std::min(B & 31, 16); z80n:ed29 # bsra de,b - { - const u16 fill = (DE & 0x8000) ? ~u16(0) : u16(0); - DE = (DE >> std::min(B & 31, 16)) | (fill << (16 - std::min(B & 31, 16))); - } +{ + const u16 fill = (DE & 0x8000) ? ~u16(0) : u16(0); + DE = (DE >> std::min(B & 31, 16)) | (fill << (16 - std::min(B & 31, 16))); +} z80n:ed2a # bsrl de,b DE >>= std::min(B & 31, 16); diff --git a/src/devices/cpu/z80/z80make.py b/src/devices/cpu/z80/z80make.py index 90b13dcfe5a..c1c75d12fb6 100644 --- a/src/devices/cpu/z80/z80make.py +++ b/src/devices/cpu/z80/z80make.py @@ -29,7 +29,7 @@ class IndStr: return not self.str def has_indent(self): - return self.indent != '' + return self.indent != '' or self.str[0] == "{" or self.str[0] == "}" def strip_indent(self, n): if self.indent != '': diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp index 32c341529e0..a08ede3f471 100644 --- a/src/emu/sound.cpp +++ b/src/emu/sound.cpp @@ -498,12 +498,12 @@ u64 sound_stream::get_current_sample_index() const void sound_stream::update() { - if(!is_active() || m_in_update || m_device.machine().phase() <= machine_phase::INIT) + if(!is_active() || m_in_update || m_device.machine().phase() <= machine_phase::RESET) return; // Find out where we are and how much we have to do u64 idx = get_current_sample_index(); - m_samples_to_update = !idx ? 0 : idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1 + m_samples_to_update = idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1 if(m_samples_to_update > 0) { m_in_update = true; @@ -520,12 +520,12 @@ void sound_stream::update() void sound_stream::update_nodeps() { - if(!is_active() || m_in_update || m_device.machine().phase() <= machine_phase::INIT) + if(!is_active() || m_in_update || m_device.machine().phase() <= machine_phase::RESET) return; // Find out where we are and how much we have to do u64 idx = get_current_sample_index(); - m_samples_to_update = !idx ? 0 : idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1 + m_samples_to_update = idx - m_output_buffer.write_sample() + 1; // We want to include the current sample, hence the +1 if(m_samples_to_update > 0) { m_in_update = true; diff --git a/src/mame/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index f8b94ae5e8f..5b94ac115a4 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -794,7 +794,7 @@ static INPUT_PORTS_START( mjmaglmp ) PORT_DIPNAME( 0x10, 0x10, "Game Hint" ) PORT_DIPLOCATION("DIP1:5") PORT_DIPSETTING( 0x10, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x20, 0x20, "Direct Double" ) PORT_DIPLOCATION("DIP1:6") + PORT_DIPNAME( 0x20, 0x20, "Direct Double Up" ) PORT_DIPLOCATION("DIP1:6") PORT_DIPSETTING( 0x20, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") @@ -971,7 +971,7 @@ static INPUT_PORTS_START( fengyunh ) PORT_DIPNAME( 0x10, 0x10, "Game Hint" ) PORT_DIPLOCATION("DIP1:5") // 吃碰提示 PORT_DIPSETTING( 0x10, DEF_STR( No ) ) // 無 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x20, 0x20, "Direct Double" ) PORT_DIPLOCATION("DIP1:6") // 直接比倍 + PORT_DIPNAME( 0x20, 0x20, "Direct Double Up" ) PORT_DIPLOCATION("DIP1:6") // 直接比倍 PORT_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 @@ -1076,7 +1076,7 @@ static INPUT_PORTS_START( shendeng ) PORT_DIPNAME( 0x10, 0x10, "Game Hint" ) PORT_DIPLOCATION("DIP1:5") // 吃碰提示 PORT_DIPSETTING( 0x10, DEF_STR( No ) ) // 無 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x20, 0x20, "Direct Double" ) PORT_DIPLOCATION("DIP1:6") // 直接比倍 + PORT_DIPNAME( 0x20, 0x20, "Direct Double Up" ) PORT_DIPLOCATION("DIP1:6") // 直接比倍 PORT_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 diff --git a/src/mame/casio/cps2000.cpp b/src/mame/casio/cps2000.cpp index eba186ad19a..df68b1f60a3 100644 --- a/src/mame/casio/cps2000.cpp +++ b/src/mame/casio/cps2000.cpp @@ -312,8 +312,7 @@ void cps2000_state::cps2000(machine_config &config) MSM6200(config, m_kbd, 4.9468_MHz_XTAL); m_kbd->irq_cb().set_inputline(m_maincpu, UPD7810_INTF1); - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); + SPEAKER(config, "speaker", 2).front(); // UPD932(config, "upd932a", 4.9468_MHz_XTAL); // UPD932(config, "upd932b", 4.9468_MHz_XTAL); @@ -326,17 +325,17 @@ void cps2000_state::cps2000(machine_config &config) FILTER_RC(config, "bass_rc1").set_lowpass(RES_K(47), CAP_N(47)).add_route(0, "bass_rc2", 1.0); FILTER_RC(config, "bass_rc2").set_lowpass(RES_K(22), CAP_N(47)) - .add_route(0, "lspeaker", 0.25).add_route(0, "rspeaker", 0.25); + .add_route(0, "speaker", 0.25, 0).add_route(0, "speaker", 0.25, 1); UPD934G(config, m_pcm, 4.9468_MHz_XTAL / 4); - m_pcm->add_route(0, "lspeaker", 0.25); - m_pcm->add_route(0, "rspeaker", 0.125); - m_pcm->add_route(1, "lspeaker", 0.25); - m_pcm->add_route(1, "rspeaker", 0.125); - m_pcm->add_route(2, "lspeaker", 0.125); - m_pcm->add_route(2, "rspeaker", 0.25); - m_pcm->add_route(3, "lspeaker", 0.125); - m_pcm->add_route(3, "rspeaker", 0.25); + m_pcm->add_route(0, "speaker", 0.25, 0); + m_pcm->add_route(0, "speaker", 0.125, 1); + m_pcm->add_route(1, "speaker", 0.25, 0); + m_pcm->add_route(1, "speaker", 0.125, 1); + m_pcm->add_route(2, "speaker", 0.125, 0); + m_pcm->add_route(2, "speaker", 0.25, 1); + m_pcm->add_route(3, "speaker", 0.125, 0); + m_pcm->add_route(3, "speaker", 0.25, 1); } /**************************************************************************/ diff --git a/src/mame/itech/itech32.cpp b/src/mame/itech/itech32.cpp index ceb01d738a1..ca31776556d 100644 --- a/src/mame/itech/itech32.cpp +++ b/src/mame/itech/itech32.cpp @@ -1867,12 +1867,13 @@ void drivedge_state::drivedge(machine_config &config) m_screen->screen_vblank().set_nop(); // interrupt not used? - SPEAKER(config, "left_back").front_left(); // Sound PCB has hook-ups & AMPs for 5 channels - SPEAKER(config, "right_back").front_right(); // As per Sound Tests Menu: Left Front, Right Front, Left Rear, Right Rear, Under Seat + // Sound PCB has hook-ups & AMPs for 5 channels + // As per Sound Tests Menu: Left Front, Right Front, Left Rear, Right Rear, Under Seat + SPEAKER(config, "back", 2).rear(); m_ensoniq->set_channels(2); - m_ensoniq->add_route(2, "right_back", 0.1); // swapped stereo - m_ensoniq->add_route(3, "left_back", 0.1); + m_ensoniq->add_route(2, "back", 0.1, 1); // swapped stereo + m_ensoniq->add_route(3, "back", 0.1, 0); } void shoottv_state::shoottv(machine_config &config) diff --git a/src/mame/misc/gms.cpp b/src/mame/misc/gms.cpp index c5271b4215d..1ec7172a253 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -68,15 +68,19 @@ Hold service credit (9) and reset (F3) to enter service mode. TODO: +- work out how flip flop input is read in mahjong games in mahjong keyboard mode +- work out how payout/key-out input is read in mahjong games in mahjong keyboard mode +- work out how payout/key-out input is read in mahjong games in joystick mode - correct EEPROM hookup for all games (this would get rid of a lot of ROM patches) - hookup MCU and YM2151 / YM3812 sound for the mahjong games - hookup PIC16F84 for rbspm - emulate protection devices correctly instead of patching - hookup lamps and do layouts -- keyboard inputs for mahjong games - use real values for reel tilemaps offsets instead of hardcoded ones (would fix magslot) - complete inputs for baile, yyhm, jinpaish, ssanguoj, cjdlz (needs someone who understands Chinese and knows how to play) +- game logic seems broken in mahjong games (reach permitted when it shouldn't be, chi not + permitted when it should be, other issues) - game logic in baile seems broken (you always win), maybe due to the patches? - broken title GFX in yyhm (transparent pen problem?) - the newer games seem to use range 0x9e1000-0x9e1fff during gameplay @@ -474,29 +478,129 @@ void gms_2layers_state::mcu_io(address_map &map) map(0x0ff00, 0x0ffff).rw(FUNC(gms_2layers_state::mcu_io_r), FUNC(gms_2layers_state::mcu_io_w)); } + +#define GMS_MAHJONG_COMMON(dsw_port, dsw_bit, dsw_on) \ + PORT_START("IN1") \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) \ + PORT_BIT( 0x00fc, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x0c00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<0>)) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("IN2") \ + PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<4>)) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY0") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY1") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY2") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY3") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) \ + PORT_START("KEY4") \ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_CONDITION(dsw_port, dsw_bit, EQUALS, dsw_on) \ + PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION(dsw_port, dsw_bit, NOTEQUALS, dsw_on) + +#define GMS_MAHJONG_COINAGE(tag, loc) \ + PORT_DIPNAME( 0x0007, 0x0000, DEF_STR(Coinage) ) PORT_DIPLOCATION(loc ":1,2,3") /* 投幣比例 */ \ + PORT_DIPSETTING( 0x0000, DEF_STR(1C_1C) ) \ + PORT_DIPSETTING( 0x0001, DEF_STR(1C_2C) ) \ + PORT_DIPSETTING( 0x0002, DEF_STR(1C_3C) ) \ + PORT_DIPSETTING( 0x0003, DEF_STR(1C_5C) ) \ + PORT_DIPSETTING( 0x0004, "1 Coin/10 Credits" ) \ + PORT_DIPSETTING( 0x0005, "1 Coin/20 Credits" ) \ + PORT_DIPSETTING( 0x0006, "1 Coin/50 Credits" ) \ + PORT_DIPSETTING( 0x0007, "1 Coin/100 Credits" ) \ + PORT_DIPNAME( 0x0018, 0x0000, "Key-In Rate" ) PORT_DIPLOCATION(loc ":4,5") /* 投幣×開分倍率 */ \ + PORT_DIPSETTING( 0x0018, "5" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0000) \ + PORT_DIPSETTING( 0x0000, "10" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0000) \ + PORT_DIPSETTING( 0x0008, "20" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0000) \ + PORT_DIPSETTING( 0x0010, "50" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0000) \ + PORT_DIPSETTING( 0x0018, "10" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0001) \ + PORT_DIPSETTING( 0x0000, "20" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0001) \ + PORT_DIPSETTING( 0x0008, "40" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0001) \ + PORT_DIPSETTING( 0x0010, "100" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0001) \ + PORT_DIPSETTING( 0x0018, "15" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0002) \ + PORT_DIPSETTING( 0x0000, "30" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0002) \ + PORT_DIPSETTING( 0x0008, "60" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0002) \ + PORT_DIPSETTING( 0x0010, "150" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0002) \ + PORT_DIPSETTING( 0x0018, "25" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0003) \ + PORT_DIPSETTING( 0x0000, "50" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0003) \ + PORT_DIPSETTING( 0x0008, "100" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0003) \ + PORT_DIPSETTING( 0x0010, "250" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0003) \ + PORT_DIPSETTING( 0x0018, "50" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0004) \ + PORT_DIPSETTING( 0x0000, "100" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0004) \ + PORT_DIPSETTING( 0x0008, "200" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0004) \ + PORT_DIPSETTING( 0x0010, "500" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0004) \ + PORT_DIPSETTING( 0x0018, "100" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0005) \ + PORT_DIPSETTING( 0x0000, "200" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0005) \ + PORT_DIPSETTING( 0x0008, "400" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0005) \ + PORT_DIPSETTING( 0x0010, "1000" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0005) \ + PORT_DIPSETTING( 0x0018, "250" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0006) \ + PORT_DIPSETTING( 0x0000, "500" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0006) \ + PORT_DIPSETTING( 0x0008, "1000" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0006) \ + PORT_DIPSETTING( 0x0010, "2500" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0006) \ + PORT_DIPSETTING( 0x0018, "500" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0007) \ + PORT_DIPSETTING( 0x0000, "1000" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0007) \ + PORT_DIPSETTING( 0x0008, "2000" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0007) \ + PORT_DIPSETTING( 0x0010, "5000" ) PORT_CONDITION(tag, 0x0007, EQUALS, 0x0007) + + static INPUT_PORTS_START( rbmk ) - PORT_START("IN1") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + GMS_MAHJONG_COMMON("DSW2", 0x0080, 0x0000) - PORT_START("IN2") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_TOGGLE - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_TOGGLE - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_MODIFY("IN1") // 16bit + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + + PORT_MODIFY("IN2") // 16bit PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -561,31 +665,17 @@ static INPUT_PORTS_START( rbmk ) PORT_DIPSETTING( 0x8000, "Mahjong" ) PORT_DIPSETTING( 0x0000, "Chess" ) - PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as dsw2, second 8 as dsw5 - PORT_DIPNAME( 0x0007, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW2:1,2,3") - PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x0004, "1 Coin/10 Credits" ) - PORT_DIPSETTING( 0x0005, "1 Coin/20 Credits" ) - PORT_DIPSETTING( 0x0006, "1 Coin/50 Credits" ) - PORT_DIPSETTING( 0x0007, "1 Coin/100 Credits" ) - PORT_DIPNAME( 0x0018, 0x0000, "Credits per Note" ) PORT_DIPLOCATION("DSW2:4,5,") - PORT_DIPSETTING( 0x0018, "1 Note/5 Credits" ) - PORT_DIPSETTING( 0x0000, "1 Note/10 Credits" ) - PORT_DIPSETTING( 0x0008, "1 Note/20 Credits" ) - PORT_DIPSETTING( 0x0010, "1 Note/50 Credits" ) + GMS_MAHJONG_COINAGE("DSW2", "DSW2") PORT_DIPNAME( 0x0020, 0x0000, "Show Tiles after Reach" ) PORT_DIPLOCATION("DSW2:6") PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0040, 0x0000, "Pay Out Type" ) PORT_DIPLOCATION("DSW2:7") PORT_DIPSETTING( 0x0040, "Credits" ) PORT_DIPSETTING( 0x0000, "Coins" ) - PORT_DIPNAME( 0x0080, 0x0080, "Controls" ) PORT_DIPLOCATION("DSW2:8") // should default to keyboard, but set on joystick since the former isn't emulated yet + PORT_DIPNAME( 0x0080, 0x0080, "Controls" ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x0000, "Mahjong" ) PORT_DIPSETTING( 0x0080, DEF_STR( Joystick ) ) - PORT_DIPSETTING( 0x0000, "Keyboard" ) PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW5:1") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -671,28 +761,17 @@ INPUT_PORTS_END static INPUT_PORTS_START( ssanguoj ) - PORT_START("IN1") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + GMS_MAHJONG_COMMON("DSW1", 0x0080, 0x0000) - PORT_START("IN2") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_TOGGLE - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_TOGGLE - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_MODIFY("IN1") // 16bit + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + + PORT_MODIFY("IN2") // 16bit PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -708,32 +787,18 @@ static INPUT_PORTS_START( ssanguoj ) PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // Only 4 DIP banks are actually populated on PCBs (2 empty spaces), but test mode reads all 6. - // TODO: dips - PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as dsw1, second 8 as dsw4. - PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1") - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:2") - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:3") - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + // TODO: DIPs (apparently no settings display in game) + PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as DSW1, second 8 as DSW4. + GMS_MAHJONG_COINAGE("DSW1", "DSW1") PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6") PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7") PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, "Controls" ) PORT_DIPLOCATION("DSW1:8") // should default to keyboard, but set on joystick since the former isn't emulated yet - PORT_DIPSETTING( 0x0080, DEF_STR( Joystick ) ) - PORT_DIPSETTING( 0x0000, "Keyboard" ) + PORT_DIPNAME( 0x0080, 0x0000, "Controls" ) PORT_DIPLOCATION("DSW1:8") + PORT_DIPSETTING( 0x0000, "Mahjong" ) + PORT_DIPSETTING( 0x0080, DEF_STR(Joystick) ) PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:1") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -759,11 +824,10 @@ static INPUT_PORTS_START( ssanguoj ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as dsw2, second 8 as dsw5 - PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:1") - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as DSW2, second 8 as DSW5 + PORT_DIPNAME( 0x0001, 0x0000, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DSW2:1") + PORT_DIPSETTING( 0x0001, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:2") PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -782,9 +846,9 @@ static INPUT_PORTS_START( ssanguoj ) PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Version ) ) PORT_DIPLOCATION("DSW2:7") PORT_DIPSETTING( 0x0040, "8.9" ) PORT_DIPSETTING( 0x0000, "8.9-" ) - PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:8") - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Score Display Mode" ) PORT_DIPLOCATION("DSW2:8") // sets how points, credits, bets, etc. are displayed + PORT_DIPSETTING( 0x0080, "Numbers" ) // Arabic numerals + PORT_DIPSETTING( 0x0000, "Circle Tiles" ) // tong mahjong tiles representing digits PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:1") PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -810,7 +874,7 @@ static INPUT_PORTS_START( ssanguoj ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as dsw3, second 8 as dsw6 + PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as DSW3, second 8 as DSW6 PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:1") PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -820,9 +884,9 @@ static INPUT_PORTS_START( ssanguoj ) PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:3") PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:4") - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, "Odds Rate" ) PORT_DIPLOCATION("DSW3:4") + PORT_DIPSETTING( 0x0000, DEF_STR(Low) ) // 1 1 1 1 10 10 / 10 10 10 10 10 10) + PORT_DIPSETTING( 0x0008, DEF_STR(High) ) // 2 2 3 3 20 60 / 20 30 30 40 40 40) PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW3:5") PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -1361,90 +1425,24 @@ static INPUT_PORTS_START( baile ) INPUT_PORTS_END static INPUT_PORTS_START( yyhm ) - // TODO: missing flip flop and payout/keyout inputs in mahjong mode - // TODO: missing payout/keyout input in joystick mode - PORT_START("IN1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) + GMS_MAHJONG_COMMON("DSW1", 0x0080, 0x0080) + + PORT_MODIFY("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) - PORT_BIT( 0x00fc, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x0c00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<0>)) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) PORT_BIT( 0xf800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_START("IN2") - PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) PORT_CUSTOM_MEMBER(FUNC(gms_3layers_state::keyboard_r<4>)) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) + PORT_MODIFY("IN2") PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNKNOWN ) //PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // TODO: verify - PORT_START("KEY0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - - PORT_START("KEY1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - - PORT_START("KEY2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - - PORT_START("KEY3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - - PORT_START("KEY4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0080) - PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) - // Only 1 8-DIP bank on PCB. DIPs' effects as per test mode. PORT_START("DSW1") PORT_DIPNAME( 0x0001, 0x0001, DEF_STR(Service_Mode) ) PORT_DIPLOCATION("SW1:1") // 遊戲設定 PORT_DIPSETTING( 0x0001, DEF_STR(Off) ) // 正常 PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 開機進入 - PORT_DIPNAME( 0x0002, 0x0002, "Voice Announcements" ) PORT_DIPLOCATION("SW1:2") // 語音報牌 + PORT_DIPNAME( 0x0002, 0x0002, "Gal Voice" ) PORT_DIPLOCATION("SW1:2") // 語音報牌 PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 - PORT_DIPSETTING( 0x0002, DEF_STR(On) ) // 有 + PORT_DIPSETTING( 0x0002, DEF_STR(On) ) // 有 (calls discarded tiles) PORT_DIPNAME( 0x0004, 0x0004, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:3") // 示範音樂 PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 PORT_DIPSETTING( 0x0004, DEF_STR(On) ) // 有 @@ -1791,29 +1789,18 @@ static INPUT_PORTS_START( sball2k1 ) // default password for accessing game sett PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW3:8" ) INPUT_PORTS_END -static INPUT_PORTS_START( cjdlz ) // TODO - PORT_START("IN1") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) +static INPUT_PORTS_START( cjdlz ) + GMS_MAHJONG_COMMON("DSW2", 0x0080, 0x0000) - PORT_START("IN2") // 16bit - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_TOGGLE - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_TOGGLE - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_MODIFY("IN1") // 16bit + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x0080, EQUALS, 0x0080) + + PORT_MODIFY("IN2") // 16bit PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1829,152 +1816,107 @@ static INPUT_PORTS_START( cjdlz ) // TODO PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", FUNC(eeprom_serial_93cxx_device::do_read)) // Only 4 DIP banks are actually populated on PCBs, but test mode reads all 6. - // TODO: dips - PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as dsw1, second 8 as dsw4. - PORT_DIPNAME( 0x0007, 0x0000, "Pay Out Rate" ) PORT_DIPLOCATION("DSW1:1,2,3") - PORT_DIPSETTING( 0x0000, "72" ) - PORT_DIPSETTING( 0x0001, "75" ) - PORT_DIPSETTING( 0x0002, "78" ) - PORT_DIPSETTING( 0x0003, "80" ) - PORT_DIPSETTING( 0x0004, "82" ) - PORT_DIPSETTING( 0x0005, "85" ) - PORT_DIPSETTING( 0x0006, "88" ) - PORT_DIPSETTING( 0x0007, "90" ) - PORT_DIPNAME( 0x0008, 0x0000, "Odd Rate" ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x0008, DEF_STR( High ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Low ) ) - PORT_DIPNAME( 0x0010, 0x0000, "Double Up Direct" ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x0010, DEF_STR( No ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x0020, 0x0000, "Double Up" ) PORT_DIPLOCATION("DSW1:6") - PORT_DIPSETTING( 0x0020, DEF_STR( No ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x00c0, 0x0000, "Double Up Rate" ) PORT_DIPLOCATION("DSW1:7,8") - PORT_DIPSETTING( 0x0000, "70" ) - PORT_DIPSETTING( 0x0040, "75" ) - PORT_DIPSETTING( 0x0080, "80" ) - PORT_DIPSETTING( 0x00c0, "85" ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW4:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0e00, 0x0000, "Break Max" ) PORT_DIPLOCATION("DSW4:2,3,4") - PORT_DIPSETTING( 0x0000, "1000" ) - PORT_DIPSETTING( 0x0200, "2000" ) - PORT_DIPSETTING( 0x0400, "3000" ) - PORT_DIPSETTING( 0x0600, "5000" ) - PORT_DIPSETTING( 0x0800, "10000" ) - PORT_DIPSETTING( 0x0a00, "20000" ) - PORT_DIPSETTING( 0x0c00, "30000" ) - PORT_DIPSETTING( 0x0e00, "50000" ) - PORT_DIPNAME( 0x3000, 0x0000, "Credits Max" ) PORT_DIPLOCATION("DSW4:5,6") + PORT_START("DSW1") // 16bit, in test mode first 8 are recognized as DSW1, second 8 as DSW4. + PORT_DIPNAME( 0x0007, 0x0000, "Payout Rate" ) PORT_DIPLOCATION("DSW1:1,2,3") // 出牌率 + PORT_DIPSETTING( 0x0000, "72%" ) + PORT_DIPSETTING( 0x0001, "75%" ) + PORT_DIPSETTING( 0x0002, "78%" ) + PORT_DIPSETTING( 0x0003, "80%" ) + PORT_DIPSETTING( 0x0004, "82%" ) + PORT_DIPSETTING( 0x0005, "85%" ) + PORT_DIPSETTING( 0x0006, "88%" ) + PORT_DIPSETTING( 0x0007, "90%" ) + PORT_DIPNAME( 0x0008, 0x0000, "Odds Rate" ) PORT_DIPLOCATION("DSW1:4") // 役牌倍率 + PORT_DIPSETTING( 0x0000, DEF_STR(Low) ) // 低倍率 (1 2 3 3 5 20 / 5 8 10 10 10 10) + PORT_DIPSETTING( 0x0008, DEF_STR(High) ) // 高倍率 (2 3 5 5 10 50 / 10 20 30 40 40 40) + PORT_DIPNAME( 0x0010, 0x0000, "Direct Double Up" ) PORT_DIPLOCATION("DSW1:5") // 直接比倍 + PORT_DIPSETTING( 0x0000, DEF_STR(No) ) // 無 + PORT_DIPSETTING( 0x0010, DEF_STR(Yes) ) // 有 + PORT_DIPNAME( 0x0020, 0x0000, "Double Up Game" ) PORT_DIPLOCATION("DSW1:6") // 比倍有無 + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x00c0, 0x0000, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DSW1:7,8") // 比倍機率 + PORT_DIPSETTING( 0x0000, "70%" ) + PORT_DIPSETTING( 0x0040, "75%" ) + PORT_DIPSETTING( 0x0080, "80%" ) + PORT_DIPSETTING( 0x00c0, "85%" ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DSW4:1") // 示範音樂 + PORT_DIPSETTING( 0x0100, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0e00, 0x0000, "Score Limit" ) PORT_DIPLOCATION("DSW4:2,3,4") // 破台限制 (presumably limits winnings) + PORT_DIPSETTING( 0x0000, "1,000" ) + PORT_DIPSETTING( 0x0200, "2,000" ) + PORT_DIPSETTING( 0x0400, "3,000" ) + PORT_DIPSETTING( 0x0600, "5,000" ) + PORT_DIPSETTING( 0x0800, "10,000" ) + PORT_DIPSETTING( 0x0a00, "20,000" ) + PORT_DIPSETTING( 0x0c00, "30,000" ) + PORT_DIPSETTING( 0x0e00, "50,000" ) + PORT_DIPNAME( 0x3000, 0x0000, "Credit Limit" ) PORT_DIPLOCATION("DSW4:5,6") // 進分上限 (presumably limits credits purchased) PORT_DIPSETTING( 0x0000, "500" ) PORT_DIPSETTING( 0x1000, "1000" ) PORT_DIPSETTING( 0x2000, "2000" ) PORT_DIPSETTING( 0x3000, "5000" ) - PORT_DIPNAME( 0x4000, 0x0000, "Golden Rush" ) PORT_DIPLOCATION("DSW4:7") - PORT_DIPSETTING( 0x4000, "Less" ) - PORT_DIPSETTING( 0x0000, "More" ) - PORT_DIPNAME( 0x8000, 0x0000, "Number Type" ) PORT_DIPLOCATION("DSW4:8") - PORT_DIPSETTING( 0x8000, "Dice" ) - PORT_DIPSETTING( 0x0000, "Number" ) - - - PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as dsw2, second 8 as dsw5 - PORT_DIPNAME( 0x0007, 0x0000, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW2:1,2,3") - PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0003, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x0004, "1 Coin/10 Credits" ) - PORT_DIPSETTING( 0x0005, "1 Coin/20 Credits" ) - PORT_DIPSETTING( 0x0006, "1 Coin/50 Credits" ) - PORT_DIPSETTING( 0x0007, "1 Coin/100 Credits" ) - PORT_DIPNAME( 0x0018, 0x0000, "Credits per Note" ) PORT_DIPLOCATION("DSW2:4,5,") - PORT_DIPSETTING( 0x0018, "1 Note/5 Credits" ) - PORT_DIPSETTING( 0x0000, "1 Note/10 Credits" ) - PORT_DIPSETTING( 0x0008, "1 Note/20 Credits" ) - PORT_DIPSETTING( 0x0010, "1 Note/50 Credits" ) - PORT_DIPNAME( 0x0020, 0x0000, "Show Credits" ) PORT_DIPLOCATION("DSW2:6") - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0000, "Pay Out Type" ) PORT_DIPLOCATION("DSW2:7") - PORT_DIPSETTING( 0x0040, "Credits" ) - PORT_DIPSETTING( 0x0000, "Coins" ) - PORT_DIPNAME( 0x0080, 0x0080, "Controls" ) PORT_DIPLOCATION("DSW2:8") // should default to keyboard, but set on joystick since the former isn't emulated yet - PORT_DIPSETTING( 0x0080, DEF_STR( Joystick ) ) - PORT_DIPSETTING( 0x0000, "Keyboard" ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:2") - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:3") - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:4") - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:5") - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:6") - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:7") - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as dsw3, second 8 as dsw6 - PORT_DIPNAME( 0x0003, 0x0000, "Min Bet" ) PORT_DIPLOCATION("DSW3:1,2") + PORT_DIPNAME( 0x4000, 0x0000, "Dapai Frequency" ) PORT_DIPLOCATION("DSW4:7") // 大牌出現 + PORT_DIPSETTING( 0x4000, DEF_STR(Low) ) // 少 + PORT_DIPSETTING( 0x0000, DEF_STR(High) ) // 多 + PORT_DIPNAME( 0x8000, 0x0000, "Score Display Mode" ) PORT_DIPLOCATION("DSW4:8") // 計分方式 (sets how points, credits, bets, etc. are displayed) + PORT_DIPSETTING( 0x0000, "Numbers" ) // 數字計分 (Arabic numerals) + PORT_DIPSETTING( 0x8000, "Circle Tiles" ) // 筒子計分 (tong mahjong tiles representing digits) + + PORT_START("DSW2") // 16bit, in test mode first 8 are recognized as DSW2, second 8 as DSW5 + GMS_MAHJONG_COINAGE("DSW2", "DSW2") + PORT_DIPNAME( 0x0020, 0x0000, "Hide Credits" ) PORT_DIPLOCATION("DSW2:6") // 遊戲分數 + PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 顯示 + PORT_DIPSETTING( 0x0020, DEF_STR(On) ) // 不顯示 + PORT_DIPNAME( 0x0040, 0x0000, "Payout Mode" ) PORT_DIPLOCATION("DSW2:7") // 退幣退票方式 + PORT_DIPSETTING( 0x0000, "Return Coins" ) // 以投幣計 + PORT_DIPSETTING( 0x0040, "Key-Out" ) // 以開分計 + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR(Controls) ) PORT_DIPLOCATION("DSW2:8") // 操作方式 + PORT_DIPSETTING( 0x0000, "Mahjong" ) // 鍵盤 + PORT_DIPSETTING( 0x0080, DEF_STR(Joystick) ) // 搖桿 + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) // DSW5 shown in input test but not physically present + //PORT_DIPUNUSED_DIPLOC( 0x0100, 0x0000, "DSW5:1") + //PORT_DIPUNUSED_DIPLOC( 0x0200, 0x0000, "DSW5:2") + //PORT_DIPUNUSED_DIPLOC( 0x0400, 0x0000, "DSW5:3") + //PORT_DIPUNUSED_DIPLOC( 0x0800, 0x0000, "DSW5:4") + //PORT_DIPUNUSED_DIPLOC( 0x1000, 0x0000, "DSW5:5") + //PORT_DIPUNUSED_DIPLOC( 0x2000, 0x0000, "DSW5:6") + //PORT_DIPUNUSED_DIPLOC( 0x4000, 0x0000, "DSW5:7") + //PORT_DIPUNUSED_DIPLOC( 0x8000, 0x0000, "DSW5:8") + + PORT_START("DSW3") // 16bit, in test mode first 8 are recognized as DSW3, second 8 as DSW6 + PORT_DIPNAME( 0x0003, 0x0000, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:1,2") // 最小押分 PORT_DIPSETTING( 0x0000, "1" ) PORT_DIPSETTING( 0x0001, "2" ) PORT_DIPSETTING( 0x0002, "5" ) PORT_DIPSETTING( 0x0003, "10" ) - PORT_DIPNAME( 0x000c, 0x0000, "Max Bet" ) PORT_DIPLOCATION("DSW3:3,4") + PORT_DIPNAME( 0x000c, 0x0000, "Maximum Bet" ) PORT_DIPLOCATION("DSW3:3,4") // 最大押分 PORT_DIPSETTING( 0x0000, "10" ) PORT_DIPSETTING( 0x0004, "20" ) PORT_DIPSETTING( 0x0008, "30" ) PORT_DIPSETTING( 0x000c, "50" ) - PORT_DIPNAME( 0x0010, 0x0000, "Main Credits Game" ) PORT_DIPLOCATION("DSW3:5") - PORT_DIPSETTING( 0x0010, "Introduction" ) - PORT_DIPSETTING( 0x0000, "Lucky Door" ) - PORT_DIPNAME( 0x0020, 0x0000, "Insert Coin Continue" ) PORT_DIPLOCATION("DSW3:6") - PORT_DIPSETTING( 0x0000, "30 Seconds" ) - PORT_DIPSETTING( 0x0020, "Unlimited" ) - PORT_DIPNAME( 0x0040, 0x0000, "Introduction" ) PORT_DIPLOCATION("DSW3:7") + PORT_DIPNAME( 0x0010, 0x0000, "Main Credits Game" ) PORT_DIPLOCATION("DSW3:5") // 餘分遊戲 + PORT_DIPSETTING( 0x0010, "Introduction" ) // 入門篇 + PORT_DIPSETTING( 0x0000, "Lucky Door" ) // 幸運門 + PORT_DIPNAME( 0x0020, 0x0000, "Credit Timer" ) PORT_DIPLOCATION("DSW3:6") // 等待投幣時間 + PORT_DIPSETTING( 0x0020, DEF_STR(Off) ) // 無限 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 30 + PORT_DIPNAME( 0x0040, 0x0000, "Introduction" ) PORT_DIPLOCATION("DSW3:7") // 入門篇 PORT_DIPSETTING( 0x0040, "1" ) PORT_DIPSETTING( 0x0000, "2" ) - PORT_DIPNAME( 0x0080, 0x0000, "Tiles Sound" ) PORT_DIPLOCATION("DSW3:8") - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:1") - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:2") - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:3") - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:4") - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:5") - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:6") - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:7") - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW6:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, "Gal Voice" ) PORT_DIPLOCATION("DSW3:8") // 語音報牌 + PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // 有 (calls discarded tiles) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) // DSW6 shown in input test but not physically present + //PORT_DIPUNUSED_DIPLOC( 0x0100, 0x0000, "DSW6:1") + //PORT_DIPUNUSED_DIPLOC( 0x0200, 0x0000, "DSW6:2") + //PORT_DIPUNUSED_DIPLOC( 0x0400, 0x0000, "DSW6:3") + //PORT_DIPUNUSED_DIPLOC( 0x0800, 0x0000, "DSW6:4") + //PORT_DIPUNUSED_DIPLOC( 0x1000, 0x0000, "DSW6:5") + //PORT_DIPUNUSED_DIPLOC( 0x2000, 0x0000, "DSW6:6") + //PORT_DIPUNUSED_DIPLOC( 0x4000, 0x0000, "DSW6:7") + //PORT_DIPUNUSED_DIPLOC( 0x8000, 0x0000, "DSW6:8") INPUT_PORTS_END static INPUT_PORTS_START( hgly ) @@ -2377,13 +2319,13 @@ void gms_2layers_state::ssanguoj(machine_config &config) config.device_remove("ymsnd"); ym3812_device &ym(YM3812(config, "ym3812", 22_MHz_XTAL / 8)); - ym.add_route(0, "speaker", 0.60, 0); - ym.add_route(1, "speaker", 0.60, 1); + ym.add_route(ALL_OUTPUTS, "speaker", 0.60); } void gms_2layers_state::super555(machine_config &config) { rbmk(config); + m_maincpu->set_addrmap(AS_PROGRAM, &gms_2layers_state::super555_mem); config.device_remove("mcu"); diff --git a/src/mame/misc/xtom3d.cpp b/src/mame/misc/xtom3d.cpp index d714f134d9b..e479ac7a535 100644 --- a/src/mame/misc/xtom3d.cpp +++ b/src/mame/misc/xtom3d.cpp @@ -661,8 +661,8 @@ void xtom3d_state::romdisk_config(device_t *device) void xtom3d_state::piu10_config(device_t *device) { isa16_piu10 &piu10 = *downcast<isa16_piu10 *>(device); - piu10.add_route(0, ":lmicrophone", 0.25); - piu10.add_route(1, ":rmicrophone", 0.25); + piu10.add_route(0, ":microphone", 0.25, 0); + piu10.add_route(1, ":microphone", 0.25, 1); } // TODO: unverified PCI config space @@ -728,16 +728,15 @@ void xtom3d_state::xtom3d(machine_config &config) // TODO: stub for drive options (speed/drive type etc.) static void cdrom_config(device_t *device) { - device->subdevice<cdda_device>("cdda")->add_route(0, ":lmicrophone", 0.25); - device->subdevice<cdda_device>("cdda")->add_route(1, ":rmicrophone", 0.25); + device->subdevice<cdda_device>("cdda")->add_route(0, ":microphone", 0.25, 0); + device->subdevice<cdda_device>("cdda")->add_route(1, ":microphone", 0.25, 1); } void xtom3d_state::pumpitup(machine_config &config) { xtom3d(config); - SPEAKER(config, "lmicrophone").front_left(); - SPEAKER(config, "rmicrophone").front_right(); + SPEAKER(config, "microphone", 2).front(); m_pci_ide->subdevice<bus_master_ide_controller_device>("ide1")->slot(0).set_default_option("cdrom"); m_pci_ide->subdevice<bus_master_ide_controller_device>("ide1")->slot(0).set_option_machine_config("cdrom", cdrom_config); diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index c9e7bcb0211..641d6426563 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -2343,14 +2343,13 @@ void pc9801_state::pc9801_sasi(machine_config &config) void pc9801vm_state::cdrom_headphones(device_t *device) { cdda_device *cdda = device->subdevice<cdda_device>("cdda"); - cdda->add_route(0, "^^lheadphone", 1.0); - cdda->add_route(1, "^^rheadphone", 1.0); + cdda->add_route(0, "^^headphone", 1.0, 0); + cdda->add_route(1, "^^headphone", 1.0, 1); } void pc9801vm_state::pc9801_ide(machine_config &config) { - SPEAKER(config, "lheadphone").front_left(); - SPEAKER(config, "rheadphone").front_right(); + SPEAKER(config, "headphone", 2).front(); ATA_INTERFACE(config, m_ide[0]).options(ata_devices, "hdd", nullptr, false); m_ide[0]->irq_handler().set("ideirq", FUNC(input_merger_device::in_w<0>)); ATA_INTERFACE(config, m_ide[1]).options(pc9801_atapi_devices, "pc98_cd", nullptr, false); diff --git a/src/mame/pinball/macp.cpp b/src/mame/pinball/macp.cpp index 9ae7e1ae167..3805fa57246 100644 --- a/src/mame/pinball/macp.cpp +++ b/src/mame/pinball/macp.cpp @@ -363,20 +363,20 @@ void macp_state::mac16k(machine_config &config) genpin_audio(config); //2x AY8910 - SPEAKER(config, "lspkr").front_left(); + SPEAKER(config, "speaker", 2).front(); + AY8910(config, m_ay8910[0], 3'800'000/2); m_ay8910[0]->set_resistors_load(10e3,10e3,10e3); m_ay8910[0]->port_a_write_callback().set(FUNC(macp_state::ay0_a_w)); m_ay8910[0]->port_b_write_callback().set(FUNC(macp_state::ay0_b_w)); - m_ay8910[0]->add_route(ALL_OUTPUTS, "lspkr", 0.50); + m_ay8910[0]->add_route(ALL_OUTPUTS, "speaker", 0.50, 0); - SPEAKER(config, "rspkr").front_right(); AY8910(config, m_ay8910[1], 3'800'000/2); m_ay8910[1]->set_resistors_load(10e3,10e3,10e3); m_ay8910[1]->port_a_write_callback().set(FUNC(macp_state::ay1_a_w)); m_ay8910[1]->port_b_write_callback().set(FUNC(macp_state::ay1_b_w)); m_ay8910[1]->port_b_read_callback().set(FUNC(macp_state::ay1_b_r)); - m_ay8910[1]->add_route(ALL_OUTPUTS, "rspkr", 0.50); + m_ay8910[1]->add_route(ALL_OUTPUTS, "speaker", 0.50, 1); } void macp_state::mac32k(machine_config &config) diff --git a/src/mame/skeleton/alesis_qs.cpp b/src/mame/skeleton/alesis_qs.cpp index af28367e06e..73fe9aa2683 100644 --- a/src/mame/skeleton/alesis_qs.cpp +++ b/src/mame/skeleton/alesis_qs.cpp @@ -71,11 +71,10 @@ void qs_state::qs7(machine_config &config) //TODO: add LCD display controller here /* sound hardware */ - //SPEAKER(config, "left").front_left(); - //SPEAKER(config, "right").front_right(); + //SPEAKER(config, "speaker", 2).front(); //alesis_qs_series_device &sound(ALESIS_QS_SERIES(config, "sound", SND_CLOCK)); - //sound.add_route(0, "left", 1.0); - //sound.add_route(1, "right", 1.0); + //sound.add_route(0, "speaker", 1.0, 0); + //sound.add_route(1, "speaker", 1.0, 1); /* Interfaces */ //PCMCIA diff --git a/src/mame/tvgames/generalplus_gp327902.cpp b/src/mame/tvgames/generalplus_gp327902.cpp index 6b142d7c26a..b9ca53e121e 100644 --- a/src/mame/tvgames/generalplus_gp327902.cpp +++ b/src/mame/tvgames/generalplus_gp327902.cpp @@ -133,8 +133,7 @@ void generalplus_gp327902_game_state::gp327902(machine_config &config) m_screen->set_visarea(0, 320-1, 0, 240-1); m_screen->set_screen_update(FUNC(generalplus_gp327902_game_state::screen_update_gp327902)); - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); + SPEAKER(config, "speaker", 2).front(); TIMER(config, "timer").configure_periodic(FUNC(generalplus_gp327902_game_state::timer), attotime::from_hz(1000)); } diff --git a/src/mame/tvgames/generalplus_gpm453x_nand.cpp b/src/mame/tvgames/generalplus_gpm453x_nand.cpp index 124e4825bda..90daafa1b53 100644 --- a/src/mame/tvgames/generalplus_gpm453x_nand.cpp +++ b/src/mame/tvgames/generalplus_gpm453x_nand.cpp @@ -91,8 +91,7 @@ void generalplus_gpm453x_game_state::gpm453x(machine_config &config) m_screen->set_visarea(0, 320-1, 0, 240-1); m_screen->set_screen_update(FUNC(generalplus_gpm453x_game_state::screen_update)); - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); + SPEAKER(config, "speaker", 2).front(); } ROM_START( leapland ) |