diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/bus/odyssey2/voice.cpp | 2 | ||||
-rw-r--r-- | src/devices/cpu/z80/r800.cpp | 5 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80.lst | 2909 | ||||
-rw-r--r-- | src/devices/cpu/z80/z80make.py | 8 | ||||
-rw-r--r-- | src/devices/machine/netlist.cpp | 35 | ||||
-rw-r--r-- | src/devices/machine/netlist.h | 12 | ||||
-rw-r--r-- | src/devices/sound/spkrdev.cpp | 2 | ||||
-rw-r--r-- | src/emu/resampler.cpp | 4 | ||||
-rw-r--r-- | src/emu/sound.cpp | 12 | ||||
-rw-r--r-- | src/emu/sound.h | 6 | ||||
-rw-r--r-- | src/frontend/mame/ui/audioeffects.cpp | 7 | ||||
-rw-r--r-- | src/mame/bmc/bmcpokr.cpp | 382 | ||||
-rw-r--r-- | src/mame/bmc/koftball.cpp | 150 | ||||
-rw-r--r-- | src/mame/capcom/cps2.cpp | 22 | ||||
-rw-r--r-- | src/mame/igs/igs_m027.cpp | 6 | ||||
-rw-r--r-- | src/mame/misc/carrera.cpp | 477 | ||||
-rw-r--r-- | src/mame/misc/gms.cpp | 143 |
17 files changed, 2221 insertions, 1961 deletions
diff --git a/src/devices/bus/odyssey2/voice.cpp b/src/devices/bus/odyssey2/voice.cpp index 9ca1ea26101..678757bb775 100644 --- a/src/devices/bus/odyssey2/voice.cpp +++ b/src/devices/bus/odyssey2/voice.cpp @@ -139,7 +139,7 @@ void o2_voice_device::device_add_mconfig(machine_config &config) // The Voice uses a speaker with its own volume control so the relative volumes to use are subjective, these sound good m_speech->add_route(ALL_OUTPUTS, "mono", 1.00); - O2_CART_SLOT(config, m_subslot, o2_cart, nullptr); + O2_CART_SLOT(config, m_subslot, o2_cart, nullptr).set_must_be_loaded(true); } ROM_START( o2voice ) diff --git a/src/devices/cpu/z80/r800.cpp b/src/devices/cpu/z80/r800.cpp index 648735462e6..419bbacef05 100644 --- a/src/devices/cpu/z80/r800.cpp +++ b/src/devices/cpu/z80/r800.cpp @@ -63,11 +63,6 @@ void r800_device::device_validity_check(validity_checker &valid) const /*************************************************************** - * adjust cycle count by n T-states - ***************************************************************/ -#define T(icount) { m_icount -= icount; } - -/*************************************************************** * SLL r8 ***************************************************************/ u8 r800_device::r800_sll(u8 value) diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst index b1aa31aa12d..53d1921e680 100644 --- a/src/devices/cpu/z80/z80.lst +++ b/src/devices/cpu/z80/z80.lst @@ -9,7 +9,7 @@ macro nomreq_addr %addr + 1 macro nomreq_ir %cycles - %cycles * call nomreq_addr (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f) + %cycles * @nomreq_addr (m_i << 8) | (m_r2 & 0x80) | (m_r & 0x7f) macro in %port m_iorq_cycles !! TDAT8 = m_io.read_interruptible(%port); @@ -21,22 +21,22 @@ macro rm %addr m_memrq_cycles !! TDAT8 = data_read(%addr); macro rm_reg %addr - call rm %addr - call nomreq_addr %addr + @rm %addr + @nomreq_addr %addr macro rm16 %addr - call rm %addr + @rm %addr TDAT_H = TDAT_L; - call rm %addr+1 + @rm %addr+1 using std::swap; std::swap(TDAT_H, TDAT_L); macro wm %addr m_memrq_cycles !! data_write(%addr, TDAT8); macro wm16 %addr - call wm %addr + @wm %addr TDAT8 = TDAT_H; - call wm %addr+1 + @wm %addr+1 macro wm16_sp %d16 SP--; @@ -60,17 +60,17 @@ macro arg PC++; macro arg16 - call arg + @arg TDAT_H = TDAT_L; - call arg + @arg using std::swap; swap(TDAT_H, TDAT_L); macro eax - call arg + @arg m_ea = (u16)(IX + (s8)TDAT8); WZ = m_ea; macro eay - call arg + @arg m_ea = (u16)(IY + (s8)TDAT8); WZ = m_ea; macro pop @@ -80,100 +80,100 @@ macro pop SP++; macro push %d16 - call nomreq_ir 1 - call wm16_sp %d16 + @nomreq_ir 1 + @wm16_sp %d16 macro jp - call arg16 + @arg16 PC = TDAT; WZ = PC; macro t6a84:jp - call arg16 + @arg16 PC = TDAT; WZ = PC; paged_jump(); macro jp_cond if (TDAT8) { - call arg16 + @arg16 PC = TDAT; WZ = PC; } else { // implicit do PC += 2 - call arg16 + @arg16 WZ = TDAT; } macro t6a84:jp_cond if (TDAT8) { - call arg16 + @arg16 PC = TDAT; WZ = PC; paged_jump(); } else { // implicit do PC += 2 - call arg16 + @arg16 WZ = TDAT; } macro jr - call arg - 5 * call nomreq_addr PC-1 + @arg + 5 * @nomreq_addr PC-1 PC += (s8)TDAT8; WZ = PC; macro t6a84:jr - call arg - 5 * call nomreq_addr PC-1 + @arg + 5 * @nomreq_addr PC-1 PC += (s8)TDAT8; WZ = PC; paged_jump(); macro r800:jr - call arg + @arg + 1 PC += (s8)TDAT8; WZ = PC; macro jr_cond if (TDAT8) { - call jr + @jr } else { - call arg + @arg } macro arg16_call - call arg16 + @arg16 m_ea = TDAT; - call nomreq_addr PC-1 + @nomreq_addr PC-1 WZ = m_ea; - call wm16_sp PC + @wm16_sp PC PC = m_ea; macro r800:arg16_call - call arg16 + @arg16 m_ea = TDAT; - call nomreq_addr PC-1 + @nomreq_addr PC-1 WZ = m_ea; - call wm16_sp PC + @wm16_sp PC PC = m_ea; macro call_cond if (TDAT8) { - call arg16_call + @arg16_call } else { - call arg16 + @arg16 WZ = TDAT; } macro ret_cond - call nomreq_ir 1 + @nomreq_ir 1 if (TDAT8) { - call pop + @pop PC = TDAT; WZ = PC; } macro retn - call pop + @pop 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); - call pop + @pop if (m_stackless) { m_pc.b.l = m_in_nextreg_cb(0xc2); m_pc.b.h = m_in_nextreg_cb(0xc3); @@ -183,25 +183,25 @@ macro z80n:retn LOGMASKED(LOG_INT, "RETN m_iff1:%d m_iff2:%d\n", m_iff1, m_iff2); WZ = PC; m_iff1 = m_iff2; macro reti - call pop + @pop PC = TDAT; WZ = PC; m_iff1 = m_iff2; daisy_call_reti_device(); macro t6a84:reti - call pop + @pop PC = TDAT; WZ = PC; m_iff1 = m_iff2; paged_reti(); daisy_call_reti_device(); macro ld_r_a - call nomreq_ir 1 + @nomreq_ir 1 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 macro ld_a_r - call nomreq_ir 1 + @nomreq_ir 1 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>(); @@ -212,14 +212,14 @@ macro r800:ld_a_r set_service_attention<SA_AFTER_LDAIR, 1>(); macro ld_i_a - call nomreq_ir 1 + @nomreq_ir 1 m_i = A; macro r800:ld_i_a m_i = A; macro ld_a_i - call nomreq_ir 1 + @nomreq_ir 1 A = m_i; set_f((F & CF) | SZ[A] | (m_iff2 << 2)); if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 1>(); @@ -230,270 +230,278 @@ macro r800:ld_a_i set_service_attention<SA_AFTER_LDAIR, 1>(); macro rst addr - call push PC + @push PC PC = addr; WZ = PC; macro rrd - call rm HL + @rm HL WZ = HL+1; - 4 * call nomreq_addr HL + 4 * @nomreq_addr HL TDAT_H = TDAT8; TDAT8 = (TDAT8 >> 4) | (A << 4); - call wm HL + @wm HL A = (A & 0xf0) | (TDAT_H & 0x0f); set_f((F & CF) | SZP[A]); macro rld - call rm HL + @rm HL WZ = HL+1; - 4 * call nomreq_addr HL + 4 * @nomreq_addr HL TDAT_H = TDAT8; TDAT8 = (TDAT8 << 4) | (A & 0x0f); - call wm HL + @wm HL A = (A & 0xf0) | (TDAT_H >> 4); set_f((F & CF) | SZP[A]); macro ex_sp %d16 - call pop - call nomreq_addr SP-1 - call wm16_sp %d16 + @pop + @nomreq_addr SP-1 + @wm16_sp %d16 %d16 = TDAT; - 2 * call nomreq_addr SP + 2 * @nomreq_addr SP WZ = TDAT; macro add16 - call nomreq_ir 7 + @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; } 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; } macro adc_hl - call nomreq_ir 7 + @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; } 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; } macro sbc_hl - call nomreq_ir 7 + @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; } 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; } macro ldi - call rm HL - call wm DE - 2 * call nomreq_addr DE + @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; macro r800:ldi - call rm HL - call wm DE - call nomreq_addr DE + @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; macro cpi - call rm HL - 5 * call nomreq_addr HL + @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; } macro r800:cpi - call rm HL - call nomreq_addr HL + @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; } macro ini - call nomreq_ir 1 - call in BC + @nomreq_ir 1 + @in BC WZ = BC + 1; B--; - call wm HL + @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; } macro r800:ini - call in BC + @in BC WZ = BC + 1; B--; - call wm HL + @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; } macro outi - call nomreq_ir 1 - call rm HL + @nomreq_ir 1 + @rm HL B--; WZ = BC + 1; - call out BC + @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; } macro r800:outi - call rm HL + @rm HL B--; WZ = BC + 1; - call out BC + @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; } macro ldd - call rm HL - call wm DE - 2 * call nomreq_addr DE + @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; } macro r800:ldd - call rm HL - call wm DE - call nomreq_addr DE + @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; } macro cpd - call rm HL - 5 * call nomreq_addr HL + @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; } macro r800:cpd - call rm HL - call nomreq_addr HL + @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; } macro ind - call nomreq_ir 1 - call in BC + @nomreq_ir 1 + @in BC WZ = BC - 1; B--; - call wm HL + @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; } macro r800:ind - call in BC + @in BC WZ = BC - 1; B--; - call wm HL + @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; } macro outd - call nomreq_ir 1 - call rm HL + @nomreq_ir 1 + @rm HL B--; WZ = BC - 1; - call out BC + @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; } macro r800:outd - call rm HL + @rm HL B--; WZ = BC - 1; - call out BC + @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; } macro ldir - call ldi + @ldi if (BC != 0) { - 5 * call nomreq_addr DE + 5 * @nomreq_addr DE PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro r800:ldir - call ldi + @ldi if (BC != 0) { - call nomreq_addr DE + @nomreq_addr DE PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro cpir - call cpi + @cpi if (BC != 0 && !(F & ZF)) { - 5 * call nomreq_addr HL + 5 * @nomreq_addr HL PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro r800:cpir - call cpi - call nomreq_addr HL + @cpi + @nomreq_addr HL if (BC != 0 && !(F & ZF)) { PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro inir - call ini + @ini if (B != 0) { - 5 * call nomreq_addr HL + 5 * @nomreq_addr HL PC -= 2; block_io_interrupted_flags(); } macro r800:inir - if (B == 1) - T(1); - call ini + if (B == 1) { + + 1 + ; + } + @ini if (B != 0) { PC -= 2; block_io_interrupted_flags(); } macro otir - call outi + @outi if (B != 0) { - 5 * call nomreq_addr BC + 5 * @nomreq_addr BC PC -= 2; block_io_interrupted_flags(); } macro r800:otir - if (B == 1) - T(1); - call outi + if (B == 1) { + + 1 + ; + } + @outi if (B != 0) { - 5 * call nomreq_addr BC + 5 * @nomreq_addr BC PC -= 2; block_io_interrupted_flags(); } macro lddr - call ldd + @ldd if (BC != 0) { - 5 * call nomreq_addr DE + 5 * @nomreq_addr DE PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro r800:lddr - call ldd + @ldd if (BC != 0) { - call nomreq_addr DE + @nomreq_addr DE PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro cpdr - call cpd + @cpd if (BC != 0 && !(F & ZF)) { - 5 * call nomreq_addr HL + 5 * @nomreq_addr HL PC -= 2; WZ = PC + 1; F &= ~(YF | XF); F |= (PC >> 8) & (YF | XF); } macro r800:cpdr - call cpd - call nomreq_addr HL /* suspected wrong. must be inside if? */ + @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); } macro indr - call ind + @ind if (B != 0) { - 5 * call nomreq_addr HL + 5 * @nomreq_addr HL PC -= 2; block_io_interrupted_flags(); } macro r800:indr - if (B == 1) - T(1); - call ind + if (B == 1) { + + 1 + ; + } + @ind if (B != 0) { PC -= 2; block_io_interrupted_flags(); } macro otdr - call outd + @outd if (B != 0) { - 5 * call nomreq_addr BC + 5 * @nomreq_addr BC PC -= 2; block_io_interrupted_flags(); } macro r800:otdr - if (B == 1) - T(1); - call outd + if (B == 1) { + + 1 + ; + } + @outd if (B != 0) { PC -= 2; block_io_interrupted_flags(); @@ -516,7 +524,7 @@ macro take_nmi m_iff1 = 0; m_r++; + 5 - call wm16_sp PC + @wm16_sp PC PC = 0x0066; WZ = PC; set_service_attention<SA_NMI_PENDING, 0>(); @@ -547,7 +555,7 @@ macro take_interrupt // Not precise in all cases. z80 must finish current instruction (NOP) to reach this state - in such case frame timings are shifter from cb event if calculated based on it. m_irqack_cb(1); m_r++; - call irqfetch + @irqfetch // 'interrupt latency' cycles + 2 // Interrupt mode 2. Call [i:databyte] @@ -557,9 +565,9 @@ macro take_interrupt // even, and all 8 bits will be used; even $FF is handled normally. // CALL opcode timing + 5 - call wm16_sp PC + @wm16_sp PC m_tmp_irq_vector = (m_tmp_irq_vector & 0xff) | (m_i << 8); - call rm16 m_tmp_irq_vector + @rm16 m_tmp_irq_vector PC = TDAT; LOGMASKED(LOG_INT, "IM2 [$%04x] = $%04x\n", m_tmp_irq_vector, PC); } else if (m_im == 1) { @@ -567,7 +575,7 @@ macro take_interrupt LOGMASKED(LOG_INT, "'%s' IM1 $0038\n", tag()); // RST $38 + 5 - call wm16_sp PC + @wm16_sp PC PC = 0x0038; } else { /* Interrupt mode 0. We check for CALL and JP instructions, @@ -580,7 +588,7 @@ macro take_interrupt if ((m_tmp_irq_vector & 0xff0000) == 0xcd0000) { // CALL $xxxx cycles + 11 - call wm16_sp PC + @wm16_sp PC PC = m_tmp_irq_vector & 0xffff; } else if ((m_tmp_irq_vector & 0xff0000) == 0xc30000) { // JP $xxxx cycles @@ -589,7 +597,7 @@ macro take_interrupt } else if ((m_tmp_irq_vector & 0xc7) == 0xc7) { // RST $xx cycles + 5 - call wm16_sp PC + @wm16_sp PC PC = m_tmp_irq_vector & 0x0038; } else if (m_tmp_irq_vector == 0xfb) { // EI cycles @@ -607,9 +615,9 @@ macro take_interrupt macro check_interrupts if (get_service_attention<SA_NMI_PENDING>()) { - call take_nmi + @take_nmi } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { // SA_IRQ_ON - call take_interrupt + @take_interrupt } macro z80n:check_interrupts @@ -619,9 +627,9 @@ macro z80n:check_interrupts m_out_nextreg_cb(0xc2, m_pc.b.l); m_out_nextreg_cb(0xc3, m_pc.b.h); } - call take_nmi + @take_nmi } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { - call take_interrupt + @take_interrupt } macro nsc800_take_interrupt @@ -632,13 +640,13 @@ macro nsc800_take_interrupt // 'interrupt latency' cycles + 7 if (m_nsc800_irq_state[0]) { - call wm16_sp PC + @wm16_sp PC PC = 0x003c; } else if (m_nsc800_irq_state[1]) { - call wm16_sp PC + @wm16_sp PC PC = 0x0034; } else if (m_nsc800_irq_state[2]) { - call wm16_sp PC + @wm16_sp PC PC = 0x002c; } else { + 2 * m_memrq_cycles @@ -651,11 +659,11 @@ macro nsc800_take_interrupt macro nsc800:check_interrupts if (get_service_attention<SA_NMI_PENDING>()) { - call take_nmi + @take_nmi } else if (get_service_attention<SA_NSC800_IRQ_ON>() && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { - call nsc800_take_interrupt + @nsc800_take_interrupt } else if (m_irq_state != CLEAR_LINE && m_iff1 && !get_service_attention<SA_AFTER_EI>()) { // SA_IRQ_ON - call take_interrupt + @take_interrupt } @@ -683,20 +691,20 @@ ffff set_service_attention<SA_BUSACK, 0>(); m_busack_cb(0); } - call check_interrupts + @check_interrupts set_service_attention<SA_AFTER_EI, 0>(); // SA_AFTER_EI if (HAS_LDAIR_QUIRK) set_service_attention<SA_AFTER_LDAIR, 0>(); // SA_AFTER_LDAIR if (m_halt) { // SA_HALT debugger_wait_hook(); - call rop + @rop PC--; continue; } } PRVPC = PC; debugger_instruction_hook(PC); - call rop + @rop m_ref = (0x00 << 16) | (TDAT8 << 8); goto process; @@ -724,9 +732,9 @@ cb05 # RLC L L = rlc(L); cb06 # RLC (HL) - call rm_reg HL + @rm_reg HL TDAT8 = rlc(TDAT8); - call wm HL + @wm HL cb07 # RLC A A = rlc(A); @@ -750,9 +758,9 @@ cb0d # RRC L L = rrc(L); cb0e # RRC (HL) - call rm_reg HL + @rm_reg HL TDAT8 = rrc(TDAT8); - call wm HL + @wm HL cb0f # RRC A A = rrc(A); @@ -776,9 +784,9 @@ cb15 # RL L L = rl(L); cb16 # RL (HL) - call rm_reg HL + @rm_reg HL TDAT8 = rl(TDAT8); - call wm HL + @wm HL cb17 # RL A A = rl(A); @@ -802,9 +810,9 @@ cb1d # RR L L = rr(L); cb1e # RR (HL) - call rm_reg HL + @rm_reg HL TDAT8 = rr(TDAT8); - call wm HL + @wm HL cb1f # RR A A = rr(A); @@ -828,9 +836,9 @@ cb25 # SLA L L = sla(L); cb26 # SLA (HL) - call rm_reg HL + @rm_reg HL TDAT8 = sla(TDAT8); - call wm HL + @wm HL cb27 # SLA A A = sla(A); @@ -854,9 +862,9 @@ cb2d # SRA L L = sra(L); cb2e # SRA (HL) - call rm_reg HL + @rm_reg HL TDAT8 = sra(TDAT8); - call wm HL + @wm HL cb2f # SRA A A = sra(A); @@ -880,9 +888,9 @@ cb35 # SLL L L = sll(L); cb36 # SLL (HL) - call rm_reg HL + @rm_reg HL TDAT8 = sll(TDAT8); - call wm HL + @wm HL cb37 # SLL A A = sll(A); @@ -906,9 +914,9 @@ cb3d # SRL L L = srl(L); cb3e # SRL (HL) - call rm_reg HL + @rm_reg HL TDAT8 = srl(TDAT8); - call wm HL + @wm HL cb3f # SRL A A = srl(A); @@ -932,7 +940,7 @@ cb45 # BIT 0,L bit(0, L); cb46 # BIT 0,(HL) - call rm_reg HL + @rm_reg HL bit_hl(0, TDAT8); cb47 # BIT 0,A @@ -957,7 +965,7 @@ cb4d # BIT 1,L bit(1, L); cb4e # BIT 1,(HL) - call rm_reg HL + @rm_reg HL bit_hl(1, TDAT8); cb4f # BIT 1,A @@ -982,7 +990,7 @@ cb55 # BIT 2,L bit(2, L); cb56 # BIT 2,(HL) - call rm_reg HL + @rm_reg HL bit_hl(2, TDAT8); cb57 # BIT 2,A @@ -1007,7 +1015,7 @@ cb5d # BIT 3,L bit(3, L); cb5e # BIT 3,(HL) - call rm_reg HL + @rm_reg HL bit_hl(3, TDAT8); cb5f # BIT 3,A @@ -1032,7 +1040,7 @@ cb65 # BIT 4,L bit(4, L); cb66 # BIT 4,(HL) - call rm_reg HL + @rm_reg HL bit_hl(4, TDAT8); cb67 # BIT 4,A @@ -1057,7 +1065,7 @@ cb6d # BIT 5,L bit(5, L); cb6e # BIT 5,(HL) - call rm_reg HL + @rm_reg HL bit_hl(5, TDAT8); cb6f # BIT 5,A @@ -1082,7 +1090,7 @@ cb75 # BIT 6,L bit(6, L); cb76 # BIT 6,(HL) - call rm_reg HL + @rm_reg HL bit_hl(6, TDAT8); cb77 # BIT 6,A @@ -1107,7 +1115,7 @@ cb7d # BIT 7,L bit(7, L); cb7e # BIT 7,(HL) - call rm_reg HL + @rm_reg HL bit_hl(7, TDAT8); cb7f # BIT 7,A @@ -1132,9 +1140,9 @@ cb85 # RES 0,L L = res(0, L); cb86 # RES 0,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(0, TDAT8); - call wm HL + @wm HL cb87 # RES 0,A A = res(0, A); @@ -1158,9 +1166,9 @@ cb8d # RES 1,L L = res(1, L); cb8e # RES 1,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(1, TDAT8); - call wm HL + @wm HL cb8f # RES 1,A A = res(1, A); @@ -1184,9 +1192,9 @@ cb95 # RES 2,L L = res(2, L); cb96 # RES 2,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(2, TDAT8); - call wm HL + @wm HL cb97 # RES 2,A A = res(2, A); @@ -1210,9 +1218,9 @@ cb9d # RES 3,L L = res(3, L); cb9e # RES 3,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(3, TDAT8); - call wm HL + @wm HL cb9f # RES 3,A A = res(3, A); @@ -1236,9 +1244,9 @@ cba5 # RES 4,L L = res(4, L); cba6 # RES 4,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(4, TDAT8); - call wm HL + @wm HL cba7 # RES 4,A A = res(4, A); @@ -1262,9 +1270,9 @@ cbad # RES 5,L L = res(5, L); cbae # RES 5,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(5, TDAT8); - call wm HL + @wm HL cbaf # RES 5,A A = res(5, A); @@ -1288,9 +1296,9 @@ cbb5 # RES 6,L L = res(6, L); cbb6 # RES 6,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(6, TDAT8); - call wm HL + @wm HL cbb7 # RES 6,A A = res(6, A); @@ -1314,9 +1322,9 @@ cbbd # RES 7,L L = res(7, L); cbbe # RES 7,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = res(7, TDAT8); - call wm HL + @wm HL cbbf # RES 7,A A = res(7, A); @@ -1340,9 +1348,9 @@ cbc5 # SET 0,L L = set(0, L); cbc6 # SET 0,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(0, TDAT8); - call wm HL + @wm HL cbc7 # SET 0,A A = set(0, A); @@ -1366,9 +1374,9 @@ cbcd # SET 1,L L = set(1, L); cbce # SET 1,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(1, TDAT8); - call wm HL + @wm HL cbcf # SET 1,A A = set(1, A); @@ -1392,9 +1400,9 @@ cbd5 # SET 2,L L = set(2, L); cbd6 # SET 2,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(2, TDAT8); - call wm HL + @wm HL cbd7 # SET 2,A A = set(2, A); @@ -1418,9 +1426,9 @@ cbdd # SET 3,L L = set(3, L); cbde # SET 3,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(3, TDAT8); - call wm HL + @wm HL cbdf # SET 3,A A = set(3, A); @@ -1444,9 +1452,9 @@ cbe5 # SET 4,L L = set(4, L); cbe6 # SET 4,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(4, TDAT8); - call wm HL + @wm HL cbe7 # SET 4,A A = set(4, A); @@ -1470,9 +1478,9 @@ cbed # SET 5,L L = set(5, L); cbee # SET 5,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(5, TDAT8); - call wm HL + @wm HL cbef # SET 5,A A = set(5, A); @@ -1496,9 +1504,9 @@ cbf5 # SET 6,L L = set(6, L); cbf6 # SET 6,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(6, TDAT8); - call wm HL + @wm HL cbf7 # SET 6,A A = set(6, A); @@ -1522,9 +1530,9 @@ cbfd # SET 7,L L = set(7, L); cbfe # SET 7,(HL) - call rm_reg HL + @rm_reg HL TDAT8 = set(7, TDAT8); - call wm HL + @wm HL cbff # SET 7,A A = set(7, A); @@ -1535,1164 +1543,1164 @@ cbff # SET 7,A # rotate, shift and bit operations with (IX+o) ########################################################## fe00 # RLC B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = rlc(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe01 # RLC C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = rlc(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe02 # RLC D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = rlc(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe03 # RLC E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = rlc(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe04 # RLC H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = rlc(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe05 # RLC L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = rlc(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe06 # RLC (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = rlc(TDAT8); - call wm m_ea + @wm m_ea fe07 # RLC A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = rlc(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe08 # RRC B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = rrc(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe09 # RRC C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = rrc(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe0a # RRC D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = rrc(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe0b # RRC E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = rrc(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe0c # RRC H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = rrc(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe0d # RRC L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = rrc(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe0e # RRC (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = rrc(TDAT8); - call wm m_ea + @wm m_ea fe0f # RRC A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = rrc(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe10 # RL B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = rl(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe11 # RL C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = rl(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe12 # RL D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = rl(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe13 # RL E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = rl(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe14 # RL H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = rl(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe15 # RL L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = rl(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe16 # RL (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = rl(TDAT8); - call wm m_ea + @wm m_ea fe17 # RL A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = rl(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe18 # RR B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = rr(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe19 # RR C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = rr(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe1a # RR D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = rr(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe1b # RR E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = rr(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe1c # RR H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = rr(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe1d # RR L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = rr(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe1e # RR (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = rr(TDAT8); - call wm m_ea + @wm m_ea fe1f # RR A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = rr(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe20 # SLA B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = sla(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe21 # SLA C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = sla(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe22 # SLA D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = sla(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe23 # SLA E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = sla(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe24 # SLA H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = sla(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe25 # SLA L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = sla(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe26 # SLA (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = sla(TDAT8); - call wm m_ea + @wm m_ea fe27 # SLA A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = sla(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe28 # SRA B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = sra(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe29 # SRA C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = sra(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe2a # SRA D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = sra(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe2b # SRA E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = sra(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe2c # SRA H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = sra(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe2d # SRA L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = sra(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe2e # SRA (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = sra(TDAT8); - call wm m_ea + @wm m_ea fe2f # SRA A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = sra(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe30 # SLL B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = sll(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe31 # SLL C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = sll(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe32 # SLL D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = sll(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe33 # SLL E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = sll(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe34 # SLL H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = sll(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe35 # SLL L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = sll(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe36 # SLL (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = sll(TDAT8); - call wm m_ea + @wm m_ea fe37 # SLL A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = sll(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe38 # SRL B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = srl(TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe39 # SRL C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = srl(TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe3a # SRL D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = srl(TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe3b # SRL E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = srl(TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe3c # SRL H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = srl(TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe3d # SRL L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = srl(TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe3e # SRL (XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = srl(TDAT8); - call wm m_ea + @wm m_ea fe3f # SRL A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = srl(TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe40 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe41 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe42 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe43 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe44 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe45 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe46 # BIT 0,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(0, TDAT8); fe47 # BIT 0,(XY+o) - call jump fe46 + @jump fe46 fe48 # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe49 # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe4a # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe4b # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe4c # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe4d # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe4e # BIT 1,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(1, TDAT8); fe4f # BIT 1,(XY+o) - call jump fe4e + @jump fe4e fe50 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe51 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe52 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe53 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe54 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe55 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe56 # BIT 2,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(2, TDAT8); fe57 # BIT 2,(XY+o) - call jump fe56 + @jump fe56 fe58 # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe59 # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe5a # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe5b # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe5c # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe5d # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe5e # BIT 3,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(3, TDAT8); fe5f # BIT 3,(XY+o) - call jump fe5e + @jump fe5e fe60 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe61 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe62 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe63 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe64 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe65 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe66 # BIT 4,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(4, TDAT8); fe67 # BIT 4,(XY+o) - call jump fe66 + @jump fe66 fe68 # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe69 # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe6a # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe6b # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe6c # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe6d # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe6e # BIT 5,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(5, TDAT8); fe6f # BIT 5,(XY+o) - call jump fe6e + @jump fe6e fe70 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe71 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe72 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe73 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe74 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe75 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe76 # BIT 6,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(6, TDAT8); fe77 # BIT 6,(XY+o) - call jump fe76 + @jump fe76 fe78 # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe79 # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe7a # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe7b # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe7c # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe7d # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe7e # BIT 7,(XY+o) - call rm_reg m_ea + @rm_reg m_ea bit_xy(7, TDAT8); fe7f # BIT 7,(XY+o) - call jump fe7e + @jump fe7e fe80 # RES 0,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(0, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe81 # RES 0,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(0, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe82 # RES 0,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(0, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe83 # RES 0,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(0, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe84 # RES 0,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(0, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe85 # RES 0,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(0, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe86 # RES 0,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(0, TDAT8); - call wm m_ea + @wm m_ea fe87 # RES 0,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(0, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe88 # RES 1,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(1, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe89 # RES 1,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(1, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe8a # RES 1,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(1, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe8b # RES 1,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(1, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe8c # RES 1,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(1, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe8d # RES 1,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(1, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe8e # RES 1,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(1, TDAT8); - call wm m_ea + @wm m_ea fe8f # RES 1,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(1, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe90 # RES 2,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(2, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe91 # RES 2,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(2, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe92 # RES 2,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(2, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe93 # RES 2,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(2, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe94 # RES 2,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(2, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe95 # RES 2,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(2, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe96 # RES 2,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(2, TDAT8); - call wm m_ea + @wm m_ea fe97 # RES 2,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(2, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fe98 # RES 3,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(3, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fe99 # RES 3,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(3, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fe9a # RES 3,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(3, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fe9b # RES 3,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(3, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fe9c # RES 3,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(3, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fe9d # RES 3,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(3, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fe9e # RES 3,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(3, TDAT8); - call wm m_ea + @wm m_ea fe9f # RES 3,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(3, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fea0 # RES 4,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(4, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fea1 # RES 4,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(4, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fea2 # RES 4,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(4, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fea3 # RES 4,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(4, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fea4 # RES 4,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(4, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fea5 # RES 4,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(4, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fea6 # RES 4,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(4, TDAT8); - call wm m_ea + @wm m_ea fea7 # RES 4,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(4, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fea8 # RES 5,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(5, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fea9 # RES 5,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(5, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feaa # RES 5,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(5, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea feab # RES 5,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(5, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea feac # RES 5,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(5, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fead # RES 5,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(5, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea feae # RES 5,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(5, TDAT8); - call wm m_ea + @wm m_ea feaf # RES 5,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(5, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea feb0 # RES 6,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(6, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea feb1 # RES 6,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(6, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feb2 # RES 6,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(6, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea feb3 # RES 6,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(6, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea feb4 # RES 6,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(6, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea feb5 # RES 6,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(6, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea feb6 # RES 6,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(6, TDAT8); - call wm m_ea + @wm m_ea feb7 # RES 6,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(6, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea feb8 # RES 7,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = res(7, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea feb9 # RES 7,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = res(7, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feba # RES 7,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = res(7, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea febb # RES 7,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = res(7, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea febc # RES 7,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = res(7, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea febd # RES 7,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = res(7, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea febe # RES 7,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = res(7, TDAT8); - call wm m_ea + @wm m_ea febf # RES 7,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = res(7, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fec0 # SET 0,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(0, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fec1 # SET 0,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(0, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fec2 # SET 0,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(0, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fec3 # SET 0,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(0, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fec4 # SET 0,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(0, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fec5 # SET 0,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(0, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fec6 # SET 0,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(0, TDAT8); - call wm m_ea + @wm m_ea fec7 # SET 0,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(0, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fec8 # SET 1,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(1, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fec9 # SET 1,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(1, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feca # SET 1,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(1, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fecb # SET 1,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(1, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fecc # SET 1,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(1, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fecd # SET 1,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(1, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fece # SET 1,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(1, TDAT8); - call wm m_ea + @wm m_ea fecf # SET 1,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(1, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fed0 # SET 2,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(2, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fed1 # SET 2,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(2, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fed2 # SET 2,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(2, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fed3 # SET 2,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(2, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fed4 # SET 2,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(2, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fed5 # SET 2,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(2, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fed6 # SET 2,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(2, TDAT8); - call wm m_ea + @wm m_ea fed7 # SET 2,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(2, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fed8 # SET 3,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(3, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fed9 # SET 3,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(3, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feda # SET 3,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(3, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fedb # SET 3,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(3, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fedc # SET 3,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(3, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fedd # SET 3,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(3, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fede # SET 3,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(3, TDAT8); - call wm m_ea + @wm m_ea fedf # SET 3,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(3, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fee0 # SET 4,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(4, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fee1 # SET 4,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(4, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fee2 # SET 4,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(4, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fee3 # SET 4,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(4, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fee4 # SET 4,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(4, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fee5 # SET 4,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(4, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fee6 # SET 4,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(4, TDAT8); - call wm m_ea + @wm m_ea fee7 # SET 4,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(4, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fee8 # SET 5,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(5, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fee9 # SET 5,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(5, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea feea # SET 5,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(5, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea feeb # SET 5,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(5, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea feec # SET 5,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(5, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea feed # SET 5,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(5, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea feee # SET 5,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(5, TDAT8); - call wm m_ea + @wm m_ea feef # SET 5,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(5, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fef0 # SET 6,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(6, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fef1 # SET 6,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(6, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fef2 # SET 6,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(6, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fef3 # SET 6,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(6, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fef4 # SET 6,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(6, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fef5 # SET 6,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(6, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fef6 # SET 6,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(6, TDAT8); - call wm m_ea + @wm m_ea fef7 # SET 6,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(6, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea fef8 # SET 7,B = (XY+o) - call rm_reg m_ea + @rm_reg m_ea B = set(7, TDAT8); TDAT8 = B; - call wm m_ea + @wm m_ea fef9 # SET 7,C = (XY+o) - call rm_reg m_ea + @rm_reg m_ea C = set(7, TDAT8); TDAT8 = C; - call wm m_ea + @wm m_ea fefa # SET 7,D = (XY+o) - call rm_reg m_ea + @rm_reg m_ea D = set(7, TDAT8); TDAT8 = D; - call wm m_ea + @wm m_ea fefb # SET 7,E = (XY+o) - call rm_reg m_ea + @rm_reg m_ea E = set(7, TDAT8); TDAT8 = E; - call wm m_ea + @wm m_ea fefc # SET 7,H = (XY+o) - call rm_reg m_ea + @rm_reg m_ea H = set(7, TDAT8); TDAT8 = H; - call wm m_ea + @wm m_ea fefd # SET 7,L = (XY+o) - call rm_reg m_ea + @rm_reg m_ea L = set(7, TDAT8); TDAT8 = L; - call wm m_ea + @wm m_ea fefe # SET 7,(XY+o) - call rm_reg m_ea + @rm_reg m_ea TDAT8 = set(7, TDAT8); - call wm m_ea + @wm m_ea feff # SET 7,A = (XY+o) - call rm_reg m_ea + @rm_reg m_ea A = set(7, TDAT8); TDAT8 = A; - call wm m_ea + @wm m_ea ########################################################## @@ -2700,150 +2708,150 @@ feff # SET 7,A = (XY+o) ########################################################## dd00 # DB DD illegal_1(); - call jump 0000 + @jump 0000 dd01 # DB DD illegal_1(); - call jump 0001 + @jump 0001 dd02 # DB DD illegal_1(); - call jump 0002 + @jump 0002 dd03 # DB DD illegal_1(); - call jump 0003 + @jump 0003 dd04 # DB DD illegal_1(); - call jump 0004 + @jump 0004 dd05 # DB DD illegal_1(); - call jump 0005 + @jump 0005 dd06 # DB DD illegal_1(); - call jump 0006 + @jump 0006 dd07 # DB DD illegal_1(); - call jump 0007 + @jump 0007 dd08 # DB DD illegal_1(); - call jump 0008 + @jump 0008 dd09 # ADD IX,BC TDAT = IX; TDAT2 = BC; - call add16 + @add16 IX = TDAT; dd0a # DB DD illegal_1(); - call jump 000a + @jump 000a dd0b # DB DD illegal_1(); - call jump 000b + @jump 000b dd0c # DB DD illegal_1(); - call jump 000c + @jump 000c dd0d # DB DD illegal_1(); - call jump 000d + @jump 000d dd0e # DB DD illegal_1(); - call jump 000e + @jump 000e dd0f # DB DD illegal_1(); - call jump 000f + @jump 000f dd10 # DB DD illegal_1(); - call jump 0010 + @jump 0010 dd11 # DB DD illegal_1(); - call jump 0011 + @jump 0011 dd12 # DB DD illegal_1(); - call jump 0012 + @jump 0012 dd13 # DB DD illegal_1(); - call jump 0013 + @jump 0013 dd14 # DB DD illegal_1(); - call jump 0014 + @jump 0014 dd15 # DB DD illegal_1(); - call jump 0015 + @jump 0015 dd16 # DB DD illegal_1(); - call jump 0016 + @jump 0016 dd17 # DB DD illegal_1(); - call jump 0017 + @jump 0017 dd18 # DB DD illegal_1(); - call jump 0018 + @jump 0018 dd19 # ADD IX,DE TDAT = IX; TDAT2 = DE; - call add16 + @add16 IX = TDAT; dd1a # DB DD illegal_1(); - call jump 001a + @jump 001a dd1b # DB DD illegal_1(); - call jump 001b + @jump 001b dd1c # DB DD illegal_1(); - call jump 001c + @jump 001c dd1d # DB DD illegal_1(); - call jump 001d + @jump 001d dd1e # DB DD illegal_1(); - call jump 001e + @jump 001e dd1f # DB DD illegal_1(); - call jump 001f + @jump 001f dd20 # DB DD illegal_1(); - call jump 0020 + @jump 0020 dd21 # LD IX,w - call arg16 + @arg16 IX = TDAT; dd22 # LD (w),IX - call arg16 + @arg16 m_ea = TDAT; TDAT = IX; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; dd23 # INC IX - call nomreq_ir 2 + @nomreq_ir 2 IX++; dd24 # INC HX @@ -2853,30 +2861,30 @@ dd25 # DEC HX dec(HX); dd26 # LD HX,n - call arg + @arg HX = TDAT8; dd27 # DB DD illegal_1(); - call jump 0027 + @jump 0027 dd28 # DB DD illegal_1(); - call jump 0028 + @jump 0028 dd29 # ADD IX,IX TDAT = IX; TDAT2 = IX; - call add16 + @add16 IX = TDAT; dd2a # LD IX,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea IX = TDAT; WZ = m_ea + 1; dd2b # DEC IX - call nomreq_ir 2 + @nomreq_ir 2 IX--; dd2c # INC LX @@ -2886,101 +2894,101 @@ dd2d # DEC LX dec(LX); dd2e # LD LX,n - call arg + @arg LX = TDAT8; dd2f # DB DD illegal_1(); - call jump 002f + @jump 002f dd30 # DB DD illegal_1(); - call jump 0030 + @jump 0030 dd31 # DB DD illegal_1(); - call jump 0031 + @jump 0031 dd32 # DB DD illegal_1(); - call jump 0032 + @jump 0032 dd33 # DB DD illegal_1(); - call jump 0033 + @jump 0033 dd34 # INC (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm_reg m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm_reg m_ea inc(TDAT8); - call wm m_ea + @wm m_ea dd35 # DEC (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm_reg m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm_reg m_ea dec(TDAT8); - call wm m_ea + @wm m_ea dd36 # LD (IX+o),n - call eax - call arg - 2 * call nomreq_addr PC-1 - call wm m_ea + @eax + @arg + 2 * @nomreq_addr PC-1 + @wm m_ea dd37 # DB DD illegal_1(); - call jump 0037 + @jump 0037 dd38 # DB DD illegal_1(); - call jump 0038 + @jump 0038 dd39 # ADD IX,SP TDAT = IX; TDAT2 = SP; - call add16 + @add16 IX = TDAT; dd3a # DB DD illegal_1(); - call jump 003a + @jump 003a dd3b # DB DD illegal_1(); - call jump 003b + @jump 003b dd3c # DB DD illegal_1(); - call jump 003c + @jump 003c dd3d # DB DD illegal_1(); - call jump 003d + @jump 003d dd3e # DB DD illegal_1(); - call jump 003e + @jump 003e dd3f # DB DD illegal_1(); - call jump 003f + @jump 003f dd40 # DB DD illegal_1(); - call jump 0040 + @jump 0040 dd41 # DB DD illegal_1(); - call jump 0041 + @jump 0041 dd42 # DB DD illegal_1(); - call jump 0042 + @jump 0042 dd43 # DB DD illegal_1(); - call jump 0043 + @jump 0043 dd44 # LD B,HX B = HX; @@ -2989,30 +2997,30 @@ dd45 # LD B,LX B = LX; dd46 # LD B,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea B = TDAT8; dd47 # DB DD illegal_1(); - call jump 0047 + @jump 0047 dd48 # DB DD illegal_1(); - call jump 0048 + @jump 0048 dd49 # DB DD illegal_1(); - call jump 0049 + @jump 0049 dd4a # DB DD illegal_1(); - call jump 004a + @jump 004a dd4b # DB DD illegal_1(); - call jump 004b + @jump 004b dd4c # LD C,HX C = HX; @@ -3021,30 +3029,30 @@ dd4d # LD C,LX C = LX; dd4e # LD C,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea C = TDAT8; dd4f # DB DD illegal_1(); - call jump 004f + @jump 004f dd50 # DB DD illegal_1(); - call jump 0050 + @jump 0050 dd51 # DB DD illegal_1(); - call jump 0051 + @jump 0051 dd52 # DB DD illegal_1(); - call jump 0052 + @jump 0052 dd53 # DB DD illegal_1(); - call jump 0053 + @jump 0053 dd54 # LD D,HX D = HX; @@ -3053,30 +3061,30 @@ dd55 # LD D,LX D = LX; dd56 # LD D,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea D = TDAT8; dd57 # DB DD illegal_1(); - call jump 0057 + @jump 0057 dd58 # DB DD illegal_1(); - call jump 0058 + @jump 0058 dd59 # DB DD illegal_1(); - call jump 0059 + @jump 0059 dd5a # DB DD illegal_1(); - call jump 005a + @jump 005a dd5b # DB DD illegal_1(); - call jump 005b + @jump 005b dd5c # LD E,HX E = HX; @@ -3085,14 +3093,14 @@ dd5d # LD E,LX E = LX; dd5e # LD E,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea E = TDAT8; dd5f # DB DD illegal_1(); - call jump 005f + @jump 005f dd60 # LD HX,B HX = B; @@ -3112,9 +3120,9 @@ dd65 # LD HX,LX HX = LX; dd66 # LD H,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea H = TDAT8; dd67 # LD HX,A @@ -3138,75 +3146,75 @@ dd6c # LD LX,HX dd6d # LD LX,LX dd6e # LD L,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea L = TDAT8; dd6f # LD LX,A LX = A; dd70 # LD (IX+o),B - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = B; - call wm m_ea + @wm m_ea dd71 # LD (IX+o),C - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = C; - call wm m_ea + @wm m_ea dd72 # LD (IX+o),D - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = D; - call wm m_ea + @wm m_ea dd73 # LD (IX+o),E - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = E; - call wm m_ea + @wm m_ea dd74 # LD (IX+o),H - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = H; - call wm m_ea + @wm m_ea dd75 # LD (IX+o),L - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = L; - call wm m_ea + @wm m_ea dd76 # DB DD illegal_1(); - call jump 0076 + @jump 0076 dd77 # LD (IX+o),A - call eax - 5 * call nomreq_addr PC-1 + @eax + 5 * @nomreq_addr PC-1 TDAT8 = A; - call wm m_ea + @wm m_ea dd78 # DB DD illegal_1(); - call jump 0078 + @jump 0078 dd79 # DB DD illegal_1(); - call jump 0079 + @jump 0079 dd7a # DB DD illegal_1(); - call jump 007a + @jump 007a dd7b # DB DD illegal_1(); - call jump 007b + @jump 007b dd7c # LD A,HX A = HX; @@ -3215,30 +3223,30 @@ dd7d # LD A,LX A = LX; dd7e # LD A,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea A = TDAT8; dd7f # DB DD illegal_1(); - call jump 007f + @jump 007f dd80 # DB DD illegal_1(); - call jump 0080 + @jump 0080 dd81 # DB DD illegal_1(); - call jump 0081 + @jump 0081 dd82 # DB DD illegal_1(); - call jump 0082 + @jump 0082 dd83 # DB DD illegal_1(); - call jump 0083 + @jump 0083 dd84 # ADD A,HX add_a(HX); @@ -3247,30 +3255,30 @@ dd85 # ADD A,LX add_a(LX); dd86 # ADD A,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea add_a(TDAT8); dd87 # DB DD illegal_1(); - call jump 0087 + @jump 0087 dd88 # DB DD illegal_1(); - call jump 0088 + @jump 0088 dd89 # DB DD illegal_1(); - call jump 0089 + @jump 0089 dd8a # DB DD illegal_1(); - call jump 008a + @jump 008a dd8b # DB DD illegal_1(); - call jump 008b + @jump 008b dd8c # ADC A,HX adc_a(HX); @@ -3279,30 +3287,30 @@ dd8d # ADC A,LX adc_a(LX); dd8e # ADC A,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea adc_a(TDAT8); dd8f # DB DD illegal_1(); - call jump 008f + @jump 008f dd90 # DB DD illegal_1(); - call jump 0090 + @jump 0090 dd91 # DB DD illegal_1(); - call jump 0091 + @jump 0091 dd92 # DB DD illegal_1(); - call jump 0092 + @jump 0092 dd93 # DB DD illegal_1(); - call jump 0093 + @jump 0093 dd94 # SUB HX sub_a(HX); @@ -3311,30 +3319,30 @@ dd95 # SUB LX sub_a(LX); dd96 # SUB (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea sub_a(TDAT8); dd97 # DB DD illegal_1(); - call jump 0097 + @jump 0097 dd98 # DB DD illegal_1(); - call jump 0098 + @jump 0098 dd99 # DB DD illegal_1(); - call jump 0099 + @jump 0099 dd9a # DB DD illegal_1(); - call jump 009a + @jump 009a dd9b # DB DD illegal_1(); - call jump 009b + @jump 009b dd9c # SBC A,HX sbc_a(HX); @@ -3343,30 +3351,30 @@ dd9d # SBC A,LX sbc_a(LX); dd9e # SBC A,(IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea sbc_a(TDAT8); dd9f # DB DD illegal_1(); - call jump 009f + @jump 009f dda0 # DB DD illegal_1(); - call jump 00a0 + @jump 00a0 dda1 # DB DD illegal_1(); - call jump 00a1 + @jump 00a1 dda2 # DB DD illegal_1(); - call jump 00a2 + @jump 00a2 dda3 # DB DD illegal_1(); - call jump 00a3 + @jump 00a3 dda4 # AND HX and_a(HX); @@ -3375,30 +3383,30 @@ dda5 # AND LX and_a(LX); dda6 # AND (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea and_a(TDAT8); dda7 # DB DD illegal_1(); - call jump 00a7 + @jump 00a7 dda8 # DB DD illegal_1(); - call jump 00a8 + @jump 00a8 dda9 # DB DD illegal_1(); - call jump 00a9 + @jump 00a9 ddaa # DB DD illegal_1(); - call jump 00aa + @jump 00aa ddab # DB DD illegal_1(); - call jump 00ab + @jump 00ab ddac # XOR HX xor_a(HX); @@ -3407,30 +3415,30 @@ ddad # XOR LX xor_a(LX); ddae # XOR (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea xor_a(TDAT8); ddaf # DB DD illegal_1(); - call jump 00af + @jump 00af ddb0 # DB DD illegal_1(); - call jump 00b0 + @jump 00b0 ddb1 # DB DD illegal_1(); - call jump 00b1 + @jump 00b1 ddb2 # DB DD illegal_1(); - call jump 00b2 + @jump 00b2 ddb3 # DB DD illegal_1(); - call jump 00b3 + @jump 00b3 ddb4 # OR HX or_a(HX); @@ -3439,30 +3447,30 @@ ddb5 # OR LX or_a(LX); ddb6 # OR (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea or_a(TDAT8); ddb7 # DB DD illegal_1(); - call jump 00b7 + @jump 00b7 ddb8 # DB DD illegal_1(); - call jump 00b8 + @jump 00b8 ddb9 # DB DD illegal_1(); - call jump 00b9 + @jump 00b9 ddba # DB DD illegal_1(); - call jump 00ba + @jump 00ba ddbb # DB DD illegal_1(); - call jump 00bb + @jump 00bb ddbc # CP HX cp(HX); @@ -3471,269 +3479,269 @@ ddbd # CP LX cp(LX); ddbe # CP (IX+o) - call eax - 5 * call nomreq_addr PC-1 - call rm m_ea + @eax + 5 * @nomreq_addr PC-1 + @rm m_ea cp(TDAT8); ddbf # DB DD illegal_1(); - call jump 00bf + @jump 00bf ddc0 # DB DD illegal_1(); - call jump 00c0 + @jump 00c0 ddc1 # DB DD illegal_1(); - call jump 00c1 + @jump 00c1 ddc2 # DB DD illegal_1(); - call jump 00c2 + @jump 00c2 ddc3 # DB DD illegal_1(); - call jump 00c3 + @jump 00c3 ddc4 # DB DD illegal_1(); - call jump 00c4 + @jump 00c4 ddc5 # DB DD illegal_1(); - call jump 00c5 + @jump 00c5 ddc6 # DB DD illegal_1(); - call jump 00c6 + @jump 00c6 ddc7 # DB DD illegal_1(); - call jump 00c7 + @jump 00c7 ddc8 # DB DD illegal_1(); - call jump 00c8 + @jump 00c8 ddc9 # DB DD illegal_1(); - call jump 00c9 + @jump 00c9 ddca # DB DD illegal_1(); - call jump 00ca + @jump 00ca ddcb # ** DD CB xx - call eax - call arg - 2 * call nomreq_addr PC-1 - call jump_prefixed 0xfe + @eax + @arg + 2 * @nomreq_addr PC-1 + @jump_prefixed 0xfe ddcc # DB DD illegal_1(); - call jump 00cc + @jump 00cc ddcd # DB DD illegal_1(); - call jump 00cd + @jump 00cd ddce # DB DD illegal_1(); - call jump 00ce + @jump 00ce ddcf # DB DD illegal_1(); - call jump 00cf + @jump 00cf ddd0 # DB DD illegal_1(); - call jump 00d0 + @jump 00d0 ddd1 # DB DD illegal_1(); - call jump 00d1 + @jump 00d1 ddd2 # DB DD illegal_1(); - call jump 00d2 + @jump 00d2 ddd3 # DB DD illegal_1(); - call jump 00d3 + @jump 00d3 ddd4 # DB DD illegal_1(); - call jump 00d4 + @jump 00d4 ddd5 # DB DD illegal_1(); - call jump 00d5 + @jump 00d5 ddd6 # DB DD illegal_1(); - call jump 00d6 + @jump 00d6 ddd7 # DB DD illegal_1(); - call jump 00d7 + @jump 00d7 ddd8 # DB DD illegal_1(); - call jump 00d8 + @jump 00d8 ddd9 # DB DD illegal_1(); - call jump 00d9 + @jump 00d9 ddda # DB DD illegal_1(); - call jump 00da + @jump 00da dddb # DB DD illegal_1(); - call jump 00db + @jump 00db dddc # DB DD illegal_1(); - call jump 00dc + @jump 00dc dddd # DB DD illegal_1(); - call jump 00dd + @jump 00dd ddde # DB DD illegal_1(); - call jump 00de + @jump 00de dddf # DB DD illegal_1(); - call jump 00df + @jump 00df dde0 # DB DD illegal_1(); - call jump 00e0 + @jump 00e0 dde1 # POP IX - call pop + @pop IX = TDAT; dde2 # DB DD illegal_1(); - call jump 00e2 + @jump 00e2 dde3 # EX (SP),IX - call ex_sp IX + @ex_sp IX dde4 # DB DD illegal_1(); - call jump 00e4 + @jump 00e4 dde5 # PUSH IX - call push IX + @push IX dde6 # DB DD illegal_1(); - call jump 00e6 + @jump 00e6 dde7 # DB DD illegal_1(); - call jump 00e7 + @jump 00e7 dde8 # DB DD illegal_1(); - call jump 00e8 + @jump 00e8 dde9 # JP (IX) PC = IX; ddea # DB DD illegal_1(); - call jump 00ea + @jump 00ea ddeb # DB DD illegal_1(); - call jump 00eb + @jump 00eb ddec # DB DD illegal_1(); - call jump 00ec + @jump 00ec dded # DB DD illegal_1(); - call jump 00ed + @jump 00ed ddee # DB DD illegal_1(); - call jump 00ee + @jump 00ee ddef # DB DD illegal_1(); - call jump 00ef + @jump 00ef ddf0 # DB DD illegal_1(); - call jump 00f0 + @jump 00f0 ddf1 # DB DD illegal_1(); - call jump 00f1 + @jump 00f1 ddf2 # DB DD illegal_1(); - call jump 00f2 + @jump 00f2 ddf3 # DB DD illegal_1(); - call jump 00f3 + @jump 00f3 ddf4 # DB DD illegal_1(); - call jump 00f4 + @jump 00f4 ddf5 # DB DD illegal_1(); - call jump 00f5 + @jump 00f5 ddf6 # DB DD illegal_1(); - call jump 00f6 + @jump 00f6 ddf7 # DB DD illegal_1(); - call jump 00f7 + @jump 00f7 ddf8 # DB DD illegal_1(); - call jump 00f8 + @jump 00f8 ddf9 # LD SP,IX - call nomreq_ir 2 + @nomreq_ir 2 SP = IX; ddfa # DB DD illegal_1(); - call jump 00fa + @jump 00fa ddfb # DB DD illegal_1(); - call jump 00fb + @jump 00fb ddfc # DB DD illegal_1(); - call jump 00fc + @jump 00fc ddfd # DB DD illegal_1(); - call jump 00fd + @jump 00fd ddfe # DB DD illegal_1(); - call jump 00fe + @jump 00fe ddff # DB DD illegal_1(); - call jump 00ff + @jump 00ff ########################################################## @@ -3741,150 +3749,150 @@ ddff # DB DD ########################################################## fd00 # DB FD illegal_1(); - call jump 0000 + @jump 0000 fd01 # DB FD illegal_1(); - call jump 0001 + @jump 0001 fd02 # DB FD illegal_1(); - call jump 0002 + @jump 0002 fd03 # DB FD illegal_1(); - call jump 0003 + @jump 0003 fd04 # DB FD illegal_1(); - call jump 0004 + @jump 0004 fd05 # DB FD illegal_1(); - call jump 0005 + @jump 0005 fd06 # DB FD illegal_1(); - call jump 0006 + @jump 0006 fd07 # DB FD illegal_1(); - call jump 0007 + @jump 0007 fd08 # DB FD illegal_1(); - call jump 0008 + @jump 0008 fd09 # ADD IY,BC TDAT = IY; TDAT2 = BC; - call add16 + @add16 IY = TDAT; fd0a # DB FD illegal_1(); - call jump 000a + @jump 000a fd0b # DB FD illegal_1(); - call jump 000b + @jump 000b fd0c # DB FD illegal_1(); - call jump 000c + @jump 000c fd0d # DB FD illegal_1(); - call jump 000d + @jump 000d fd0e # DB FD illegal_1(); - call jump 000e + @jump 000e fd0f # DB FD illegal_1(); - call jump 000f + @jump 000f fd10 # DB FD illegal_1(); - call jump 0010 + @jump 0010 fd11 # DB FD illegal_1(); - call jump 0011 + @jump 0011 fd12 # DB FD illegal_1(); - call jump 0012 + @jump 0012 fd13 # DB FD illegal_1(); - call jump 0013 + @jump 0013 fd14 # DB FD illegal_1(); - call jump 0014 + @jump 0014 fd15 # DB FD illegal_1(); - call jump 0015 + @jump 0015 fd16 # DB FD illegal_1(); - call jump 0016 + @jump 0016 fd17 # DB FD illegal_1(); - call jump 0017 + @jump 0017 fd18 # DB FD illegal_1(); - call jump 0018 + @jump 0018 fd19 # ADD IY,DE TDAT = IY; TDAT2 = DE; - call add16 + @add16 IY = TDAT; fd1a # DB FD illegal_1(); - call jump 001a + @jump 001a fd1b # DB FD illegal_1(); - call jump 001b + @jump 001b fd1c # DB FD illegal_1(); - call jump 001c + @jump 001c fd1d # DB FD illegal_1(); - call jump 001d + @jump 001d fd1e # DB FD illegal_1(); - call jump 001e + @jump 001e fd1f # DB FD illegal_1(); - call jump 001f + @jump 001f fd20 # DB FD illegal_1(); - call jump 0020 + @jump 0020 fd21 # LD IY,w - call arg16 + @arg16 IY = TDAT; fd22 # LD (w),IY - call arg16 + @arg16 m_ea = TDAT; TDAT = IY; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; fd23 # INC IY - call nomreq_ir 2 + @nomreq_ir 2 IY++; fd24 # INC HY @@ -3894,30 +3902,30 @@ fd25 # DEC HY dec(HY); fd26 # LD HY,n - call arg + @arg HY = TDAT8; fd27 # DB FD illegal_1(); - call jump 0027 + @jump 0027 fd28 # DB FD illegal_1(); - call jump 0028 + @jump 0028 fd29 # ADD IY,IY TDAT = IY; TDAT2 = IY; - call add16 + @add16 IY = TDAT; fd2a # LD IY,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea IY = TDAT; WZ = m_ea + 1; fd2b # DEC IY - call nomreq_ir 2 + @nomreq_ir 2 IY--; fd2c # INC LY @@ -3927,101 +3935,101 @@ fd2d # DEC LY dec(LY); fd2e # LD LY,n - call arg + @arg LY = TDAT8; fd2f # DB FD illegal_1(); - call jump 002f + @jump 002f fd30 # DB FD illegal_1(); - call jump 0030 + @jump 0030 fd31 # DB FD illegal_1(); - call jump 0031 + @jump 0031 fd32 # DB FD illegal_1(); - call jump 0032 + @jump 0032 fd33 # DB FD illegal_1(); - call jump 0033 + @jump 0033 fd34 # INC (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm_reg m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm_reg m_ea inc(TDAT8); - call wm m_ea + @wm m_ea fd35 # DEC (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm_reg m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm_reg m_ea dec(TDAT8); - call wm m_ea + @wm m_ea fd36 # LD (IY+o),n - call eay - call arg - 2 * call nomreq_addr PC-1 - call wm m_ea + @eay + @arg + 2 * @nomreq_addr PC-1 + @wm m_ea fd37 # DB FD illegal_1(); - call jump 0037 + @jump 0037 fd38 # DB FD illegal_1(); - call jump 0038 + @jump 0038 fd39 # ADD IY,SP TDAT = IY; TDAT2 = SP; - call add16 + @add16 IY = TDAT; fd3a # DB FD illegal_1(); - call jump 003a + @jump 003a fd3b # DB FD illegal_1(); - call jump 003b + @jump 003b fd3c # DB FD illegal_1(); - call jump 003c + @jump 003c fd3d # DB FD illegal_1(); - call jump 003d + @jump 003d fd3e # DB FD illegal_1(); - call jump 003e + @jump 003e fd3f # DB FD illegal_1(); - call jump 003f + @jump 003f fd40 # DB FD illegal_1(); - call jump 0040 + @jump 0040 fd41 # DB FD illegal_1(); - call jump 0041 + @jump 0041 fd42 # DB FD illegal_1(); - call jump 0042 + @jump 0042 fd43 # DB FD illegal_1(); - call jump 0043 + @jump 0043 fd44 # LD B,HY B = HY; @@ -4030,30 +4038,30 @@ fd45 # LD B,LY B = LY; fd46 # LD B,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea B = TDAT8; fd47 # DB FD illegal_1(); - call jump 0047 + @jump 0047 fd48 # DB FD illegal_1(); - call jump 0048 + @jump 0048 fd49 # DB FD illegal_1(); - call jump 0049 + @jump 0049 fd4a # DB FD illegal_1(); - call jump 004a + @jump 004a fd4b # DB FD illegal_1(); - call jump 004b + @jump 004b fd4c # LD C,HY C = HY; @@ -4062,30 +4070,30 @@ fd4d # LD C,LY C = LY; fd4e # LD C,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea C = TDAT8; fd4f # DB FD illegal_1(); - call jump 004f + @jump 004f fd50 # DB FD illegal_1(); - call jump 0050 + @jump 0050 fd51 # DB FD illegal_1(); - call jump 0051 + @jump 0051 fd52 # DB FD illegal_1(); - call jump 0052 + @jump 0052 fd53 # DB FD illegal_1(); - call jump 0053 + @jump 0053 fd54 # LD D,HY D = HY; @@ -4094,30 +4102,30 @@ fd55 # LD D,LY D = LY; fd56 # LD D,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea D = TDAT8; fd57 # DB FD illegal_1(); - call jump 0057 + @jump 0057 fd58 # DB FD illegal_1(); - call jump 0058 + @jump 0058 fd59 # DB FD illegal_1(); - call jump 0059 + @jump 0059 fd5a # DB FD illegal_1(); - call jump 005a + @jump 005a fd5b # DB FD illegal_1(); - call jump 005b + @jump 005b fd5c # LD E,HY E = HY; @@ -4126,14 +4134,14 @@ fd5d # LD E,LY E = LY; fd5e # LD E,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea E = TDAT8; fd5f # DB FD illegal_1(); - call jump 005f + @jump 005f fd60 # LD HY,B HY = B; @@ -4153,9 +4161,9 @@ fd65 # LD HY,LY HY = LY; fd66 # LD H,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea H = TDAT8; fd67 # LD HY,A @@ -4179,75 +4187,75 @@ fd6c # LD LY,HY fd6d # LD LY,LY fd6e # LD L,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea L = TDAT8; fd6f # LD LY,A LY = A; fd70 # LD (IY+o),B - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = B; - call wm m_ea + @wm m_ea fd71 # LD (IY+o),C - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = C; - call wm m_ea + @wm m_ea fd72 # LD (IY+o),D - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = D; - call wm m_ea + @wm m_ea fd73 # LD (IY+o),E - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = E; - call wm m_ea + @wm m_ea fd74 # LD (IY+o),H - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = H; - call wm m_ea + @wm m_ea fd75 # LD (IY+o),L - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = L; - call wm m_ea + @wm m_ea fd76 # DB FD illegal_1(); - call jump 0076 + @jump 0076 fd77 # LD (IY+o),A - call eay - 5 * call nomreq_addr PC-1 + @eay + 5 * @nomreq_addr PC-1 TDAT8 = A; - call wm m_ea + @wm m_ea fd78 # DB FD illegal_1(); - call jump 0078 + @jump 0078 fd79 # DB FD illegal_1(); - call jump 0079 + @jump 0079 fd7a # DB FD illegal_1(); - call jump 007a + @jump 007a fd7b # DB FD illegal_1(); - call jump 007b + @jump 007b fd7c # LD A,HY A = HY; @@ -4256,30 +4264,30 @@ fd7d # LD A,LY A = LY; fd7e # LD A,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea A = TDAT8; fd7f # DB FD illegal_1(); - call jump 007f + @jump 007f fd80 # DB FD illegal_1(); - call jump 0080 + @jump 0080 fd81 # DB FD illegal_1(); - call jump 0081 + @jump 0081 fd82 # DB FD illegal_1(); - call jump 0082 + @jump 0082 fd83 # DB FD illegal_1(); - call jump 0083 + @jump 0083 fd84 # ADD A,HY add_a(HY); @@ -4288,30 +4296,30 @@ fd85 # ADD A,LY add_a(LY); fd86 # ADD A,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea add_a(TDAT8); fd87 # DB FD illegal_1(); - call jump 0087 + @jump 0087 fd88 # DB FD illegal_1(); - call jump 0088 + @jump 0088 fd89 # DB FD illegal_1(); - call jump 0089 + @jump 0089 fd8a # DB FD illegal_1(); - call jump 008a + @jump 008a fd8b # DB FD illegal_1(); - call jump 008b + @jump 008b fd8c # ADC A,HY adc_a(HY); @@ -4320,30 +4328,30 @@ fd8d # ADC A,LY adc_a(LY); fd8e # ADC A,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea adc_a(TDAT8); fd8f # DB FD illegal_1(); - call jump 008f + @jump 008f fd90 # DB FD illegal_1(); - call jump 0090 + @jump 0090 fd91 # DB FD illegal_1(); - call jump 0091 + @jump 0091 fd92 # DB FD illegal_1(); - call jump 0092 + @jump 0092 fd93 # DB FD illegal_1(); - call jump 0093 + @jump 0093 fd94 # SUB HY sub_a(HY); @@ -4352,30 +4360,30 @@ fd95 # SUB LY sub_a(LY); fd96 # SUB (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea sub_a(TDAT8); fd97 # DB FD illegal_1(); - call jump 0097 + @jump 0097 fd98 # DB FD illegal_1(); - call jump 0098 + @jump 0098 fd99 # DB FD illegal_1(); - call jump 0099 + @jump 0099 fd9a # DB FD illegal_1(); - call jump 009a + @jump 009a fd9b # DB FD illegal_1(); - call jump 009b + @jump 009b fd9c # SBC A,HY sbc_a(HY); @@ -4384,30 +4392,30 @@ fd9d # SBC A,LY sbc_a(LY); fd9e # SBC A,(IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea sbc_a(TDAT8); fd9f # DB FD illegal_1(); - call jump 009f + @jump 009f fda0 # DB FD illegal_1(); - call jump 00a0 + @jump 00a0 fda1 # DB FD illegal_1(); - call jump 00a1 + @jump 00a1 fda2 # DB FD illegal_1(); - call jump 00a2 + @jump 00a2 fda3 # DB FD illegal_1(); - call jump 00a3 + @jump 00a3 fda4 # AND HY and_a(HY); @@ -4416,30 +4424,30 @@ fda5 # AND LY and_a(LY); fda6 # AND (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea and_a(TDAT8); fda7 # DB FD illegal_1(); - call jump 00a7 + @jump 00a7 fda8 # DB FD illegal_1(); - call jump 00a8 + @jump 00a8 fda9 # DB FD illegal_1(); - call jump 00a9 + @jump 00a9 fdaa # DB FD illegal_1(); - call jump 00aa + @jump 00aa fdab # DB FD illegal_1(); - call jump 00ab + @jump 00ab fdac # XOR HY xor_a(HY); @@ -4448,30 +4456,30 @@ fdad # XOR LY xor_a(LY); fdae # XOR (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea xor_a(TDAT8); fdaf # DB FD illegal_1(); - call jump 00af + @jump 00af fdb0 # DB FD illegal_1(); - call jump 00b0 + @jump 00b0 fdb1 # DB FD illegal_1(); - call jump 00b1 + @jump 00b1 fdb2 # DB FD illegal_1(); - call jump 00b2 + @jump 00b2 fdb3 # DB FD illegal_1(); - call jump 00b3 + @jump 00b3 fdb4 # OR HY or_a(HY); @@ -4480,30 +4488,30 @@ fdb5 # OR LY or_a(LY); fdb6 # OR (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea or_a(TDAT8); fdb7 # DB FD illegal_1(); - call jump 00b7 + @jump 00b7 fdb8 # DB FD illegal_1(); - call jump 00b8 + @jump 00b8 fdb9 # DB FD illegal_1(); - call jump 00b9 + @jump 00b9 fdba # DB FD illegal_1(); - call jump 00ba + @jump 00ba fdbb # DB FD illegal_1(); - call jump 00bb + @jump 00bb fdbc # CP HY cp(HY); @@ -4512,269 +4520,269 @@ fdbd # CP LY cp(LY); fdbe # CP (IY+o) - call eay - 5 * call nomreq_addr PC-1 - call rm m_ea + @eay + 5 * @nomreq_addr PC-1 + @rm m_ea cp(TDAT8); fdbf # DB FD illegal_1(); - call jump 00bf + @jump 00bf fdc0 # DB FD illegal_1(); - call jump 00c0 + @jump 00c0 fdc1 # DB FD illegal_1(); - call jump 00c1 + @jump 00c1 fdc2 # DB FD illegal_1(); - call jump 00c2 + @jump 00c2 fdc3 # DB FD illegal_1(); - call jump 00c3 + @jump 00c3 fdc4 # DB FD illegal_1(); - call jump 00c4 + @jump 00c4 fdc5 # DB FD illegal_1(); - call jump 00c5 + @jump 00c5 fdc6 # DB FD illegal_1(); - call jump 00c6 + @jump 00c6 fdc7 # DB FD illegal_1(); - call jump 00c7 + @jump 00c7 fdc8 # DB FD illegal_1(); - call jump 00c8 + @jump 00c8 fdc9 # DB FD illegal_1(); - call jump 00c9 + @jump 00c9 fdca # DB FD illegal_1(); - call jump 00ca + @jump 00ca fdcb # ** FD CB xx - call eay - call arg - 2 * call nomreq_addr PC-1 - call jump_prefixed 0xfe + @eay + @arg + 2 * @nomreq_addr PC-1 + @jump_prefixed 0xfe fdcc # DB FD illegal_1(); - call jump 00cc + @jump 00cc fdcd # DB FD illegal_1(); - call jump 00cd + @jump 00cd fdce # DB FD illegal_1(); - call jump 00ce + @jump 00ce fdcf # DB FD illegal_1(); - call jump 00cf + @jump 00cf fdd0 # DB FD illegal_1(); - call jump 00d0 + @jump 00d0 fdd1 # DB FD illegal_1(); - call jump 00d1 + @jump 00d1 fdd2 # DB FD illegal_1(); - call jump 00d2 + @jump 00d2 fdd3 # DB FD illegal_1(); - call jump 00d3 + @jump 00d3 fdd4 # DB FD illegal_1(); - call jump 00d4 + @jump 00d4 fdd5 # DB FD illegal_1(); - call jump 00d5 + @jump 00d5 fdd6 # DB FD illegal_1(); - call jump 00d6 + @jump 00d6 fdd7 # DB FD illegal_1(); - call jump 00d7 + @jump 00d7 fdd8 # DB FD illegal_1(); - call jump 00d8 + @jump 00d8 fdd9 # DB FD illegal_1(); - call jump 00d9 + @jump 00d9 fdda # DB FD illegal_1(); - call jump 00da + @jump 00da fddb # DB FD illegal_1(); - call jump 00db + @jump 00db fddc # DB FD illegal_1(); - call jump 00dc + @jump 00dc fddd # DB FD illegal_1(); - call jump 00dd + @jump 00dd fdde # DB FD illegal_1(); - call jump 00de + @jump 00de fddf # DB FD illegal_1(); - call jump 00df + @jump 00df fde0 # DB FD illegal_1(); - call jump 00e0 + @jump 00e0 fde1 # POP IY - call pop + @pop IY = TDAT; fde2 # DB FD illegal_1(); - call jump 00e2 + @jump 00e2 fde3 # EX (SP),IY - call ex_sp IY + @ex_sp IY fde4 # DB FD illegal_1(); - call jump 00e4 + @jump 00e4 fde5 # PUSH IY - call push IY + @push IY fde6 # DB FD illegal_1(); - call jump 00e6 + @jump 00e6 fde7 # DB FD illegal_1(); - call jump 00e7 + @jump 00e7 fde8 # DB FD illegal_1(); - call jump 00e8 + @jump 00e8 fde9 # JP (IY) PC = IY; fdea # DB FD illegal_1(); - call jump 00ea + @jump 00ea fdeb # DB FD illegal_1(); - call jump 00eb + @jump 00eb fdec # DB FD illegal_1(); - call jump 00ec + @jump 00ec fded # DB FD illegal_1(); - call jump 00ed + @jump 00ed fdee # DB FD illegal_1(); - call jump 00ee + @jump 00ee fdef # DB FD illegal_1(); - call jump 00ef + @jump 00ef fdf0 # DB FD illegal_1(); - call jump 00f0 + @jump 00f0 fdf1 # DB FD illegal_1(); - call jump 00f1 + @jump 00f1 fdf2 # DB FD illegal_1(); - call jump 00f2 + @jump 00f2 fdf3 # DB FD illegal_1(); - call jump 00f3 + @jump 00f3 fdf4 # DB FD illegal_1(); - call jump 00f4 + @jump 00f4 fdf5 # DB FD illegal_1(); - call jump 00f5 + @jump 00f5 fdf6 # DB FD illegal_1(); - call jump 00f6 + @jump 00f6 fdf7 # DB FD illegal_1(); - call jump 00f7 + @jump 00f7 fdf8 # DB FD illegal_1(); - call jump 00f8 + @jump 00f8 fdf9 # LD SP,IY - call nomreq_ir 2 + @nomreq_ir 2 SP = IY; fdfa # DB FD illegal_1(); - call jump 00fa + @jump 00fa fdfb # DB FD illegal_1(); - call jump 00fb + @jump 00fb fdfc # DB FD illegal_1(); - call jump 00fc + @jump 00fc fdfd # DB FD illegal_1(); - call jump 00fd + @jump 00fd fdfe # DB FD illegal_1(); - call jump 00fe + @jump 00fe fdff # DB FD illegal_1(); - call jump 00ff + @jump 00ff ########################################################## @@ -4973,215 +4981,215 @@ ed3f # DB ED illegal_2(); ed40 # IN B,(C) - call in BC + @in BC B = TDAT8; set_f((F & CF) | SZP[B]); WZ = BC + 1; ed41 # OUT (C),B TDAT8 = B; - call out BC + @out BC WZ = BC + 1; ed42 # SBC HL,BC TDAT = BC; - call sbc_hl + @sbc_hl ed43 # LD (w),BC - call arg16 + @arg16 m_ea = TDAT; TDAT = BC; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; ed44 # NEG neg(); ed45 # RETN - call retn + @retn ed46 # IM 0 m_im = 0; ed47 # LD i,A - call ld_i_a + @ld_i_a ed48 # IN C,(C) - call in BC + @in BC C = TDAT8; set_f((F & CF) | SZP[C]); WZ = BC + 1; ed49 # OUT (C),C TDAT8 = C; - call out BC + @out BC WZ = BC + 1; ed4a # ADC HL,BC TDAT = BC; - call adc_hl + @adc_hl ed4b # LD BC,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea BC = TDAT; WZ = m_ea + 1; ed4c # NEG neg(); ed4d # RETI - call reti + @reti ed4e # IM 0 m_im = 0; ed4f # LD r,A - call ld_r_a + @ld_r_a ed50 # IN D,(C) - call in BC + @in BC D = TDAT8; set_f((F & CF) | SZP[D]); WZ = BC + 1; ed51 # OUT (C),D TDAT8 = D; - call out BC + @out BC WZ = BC + 1; ed52 # SBC HL,DE TDAT = DE; - call sbc_hl + @sbc_hl ed53 # LD (w),DE - call arg16 + @arg16 m_ea = TDAT; TDAT = DE; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; ed54 # NEG neg(); ed55 # RETN - call retn + @retn ed56 # IM 1 m_im = 1; ed57 # LD A,i - call ld_a_i + @ld_a_i ed58 # IN E,(C) - call in BC + @in BC E = TDAT8; set_f((F & CF) | SZP[E]); WZ = BC + 1; ed59 # OUT (C),E TDAT8 = E; - call out BC + @out BC WZ = BC + 1; ed5a # ADC HL,DE TDAT = DE; - call adc_hl + @adc_hl ed5b # LD DE,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea DE = TDAT; WZ = m_ea + 1; ed5c # NEG neg(); ed5d # RETI - call reti + @reti ed5e # IM 2 m_im = 2; ed5f # LD A,r - call ld_a_r + @ld_a_r ed60 # IN H,(C) - call in BC + @in BC H = TDAT8; set_f((F & CF) | SZP[H]); WZ = BC + 1; ed61 # OUT (C),H TDAT8 = H; - call out BC + @out BC WZ = BC + 1; ed62 # SBC HL,HL TDAT = HL; - call sbc_hl + @sbc_hl ed63 # LD (w),HL - call arg16 + @arg16 m_ea = TDAT; TDAT = HL; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; ed64 # NEG neg(); ed65 # RETN - call retn + @retn ed66 # IM 0 m_im = 0; ed67 # RRD (HL) - call rrd + @rrd ed68 # IN L,(C) - call in BC + @in BC L = TDAT8; set_f((F & CF) | SZP[L]); WZ = BC + 1; ed69 # OUT (C),L TDAT8 = L; - call out BC + @out BC WZ = BC + 1; ed6a # ADC HL,HL TDAT = HL; - call adc_hl + @adc_hl ed6b # LD HL,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea HL = TDAT; WZ = m_ea + 1; ed6c # NEG neg(); ed6d # RETI - call reti + @reti ed6e # IM 0 m_im = 0; ed6f # RLD (HL) - call rld + @rld ed70 # IN 0,(C) - call in BC + @in BC set_f((F & CF) | SZP[TDAT8]); WZ = BC + 1; ed71 # OUT (C),0 TDAT8 = 0; - call out BC + @out BC WZ = BC + 1; ed72 # SBC HL,SP TDAT = SP; - call sbc_hl + @sbc_hl ed73 # LD (w),SP - call arg16 + @arg16 m_ea = TDAT; TDAT = SP; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; ed74 # NEG neg(); ed75 # RETN - call retn + @retn ed76 # IM 1 m_im = 1; @@ -5190,29 +5198,29 @@ ed77 # DB ED,77 illegal_2(); ed78 # IN A,(C) - call in BC + @in BC A = TDAT8; set_f((F & CF) | SZP[A]); WZ = BC + 1; ed79 # OUT (C),A TDAT8 = A; - call out BC + @out BC WZ = BC + 1; ed7a # ADC HL,SP TDAT = SP; - call adc_hl + @adc_hl ed7b # LD SP,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea SP = TDAT; WZ = m_ea + 1; ed7c # NEG neg(); ed7d # RETI - call reti + @reti ed7e # IM 2 m_im = 2; @@ -5317,16 +5325,16 @@ ed9f # DB ED illegal_2(); eda0 # LDI - call ldi + @ldi eda1 # CPI - call cpi + @cpi eda2 # INI - call ini + @ini eda3 # OUTI - call outi + @outi eda4 # DB ED illegal_2(); @@ -5341,16 +5349,16 @@ eda7 # DB ED illegal_2(); eda8 # LDD - call ldd + @ldd eda9 # CPD - call cpd + @cpd edaa # IND - call ind + @ind edab # OUTD - call outd + @outd edac # DB ED illegal_2(); @@ -5365,16 +5373,16 @@ edaf # DB ED illegal_2(); edb0 # LDIR - call ldir + @ldir edb1 # CPIR - call cpir + @cpir edb2 # INIR - call inir + @inir edb3 # OTIR - call otir + @otir edb4 # DB ED illegal_2(); @@ -5389,16 +5397,16 @@ edb7 # DB ED illegal_2(); edb8 # LDDR - call lddr + @lddr edb9 # CPDR - call cpdr + @cpdr edba # INDR - call indr + @indr edbb # OTDR - call otdr + @otdr edbc # DB ED illegal_2(); @@ -5611,16 +5619,16 @@ edff # DB ED 0000 # NOP 0001 # LD BC,w - call arg16 + @arg16 BC = TDAT; 0002 # LD (BC),A TDAT8 = A; - call wm BC + @wm BC WZ_L = (BC + 1) & 0xFF; WZ_H = A; 0003 # INC BC - call nomreq_ir 2 + @nomreq_ir 2 BC++; 0004 # INC B @@ -5630,7 +5638,7 @@ edff # DB ED dec(B); 0006 # LD B,n - call arg + @arg B = TDAT8; 0007 # RLCA @@ -5641,15 +5649,15 @@ edff # DB ED 0009 # ADD HL,BC TDAT = HL; TDAT2 = BC; - call add16 + @add16 HL = TDAT; 000a # LD A,(BC) - call rm BC + @rm BC A = TDAT8; WZ = BC+1; 000b # DEC BC - call nomreq_ir 2 + @nomreq_ir 2 BC--; 000c # INC C @@ -5659,28 +5667,28 @@ edff # DB ED dec(C); 000e # LD C,n - call arg + @arg C = TDAT8; 000f # RRCA rrca(); 0010 # DJNZ o - call nomreq_ir 1 + @nomreq_ir 1 TDAT8 = --B; - call jr_cond + @jr_cond 0011 # LD DE,w - call arg16 + @arg16 DE = TDAT; 0012 # LD (DE),A TDAT8 = A; - call wm DE + @wm DE WZ_L = (DE + 1) & 0xFF; WZ_H = A; 0013 # INC DE - call nomreq_ir 2 + @nomreq_ir 2 DE++; 0014 # INC D @@ -5690,26 +5698,26 @@ edff # DB ED dec(D); 0016 # LD D,n - call arg + @arg D = TDAT8; 0017 # RLA rla(); 0018 # JR o - call jr + @jr 0019 # ADD HL,DE TDAT = HL; TDAT2 = DE; - call add16 + @add16 HL = TDAT; 001a # LD A,(DE) - call rm DE + @rm DE A = TDAT8; WZ = DE + 1; 001b # DEC DE - call nomreq_ir 2 + @nomreq_ir 2 DE--; 001c # INC E @@ -5719,7 +5727,7 @@ edff # DB ED dec(E); 001e # LD E,n - call arg + @arg E = TDAT8; 001f # RRA @@ -5727,20 +5735,20 @@ edff # DB ED 0020 # JR NZ,o TDAT8 = !(F & ZF); - call jr_cond + @jr_cond 0021 # LD HL,w - call arg16 + @arg16 HL = TDAT; 0022 # LD (w),HL - call arg16 + @arg16 m_ea = TDAT; TDAT = HL; - call wm16 m_ea + @wm16 m_ea WZ = m_ea + 1; 0023 # INC HL - call nomreq_ir 2 + @nomreq_ir 2 HL++; 0024 # INC H @@ -5750,7 +5758,7 @@ edff # DB ED dec(H); 0026 # LD H,n - call arg + @arg H = TDAT8; 0027 # DAA @@ -5758,21 +5766,21 @@ edff # DB ED 0028 # JR Z,o TDAT8 = F & ZF; - call jr_cond + @jr_cond 0029 # ADD HL,HL TDAT = HL; TDAT2 = HL; - call add16 + @add16 HL = TDAT; 002a # LD HL,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm16 m_ea + @rm16 m_ea HL = TDAT; WZ = m_ea + 1; 002b # DEC HL - call nomreq_ir 2 + @nomreq_ir 2 HL--; 002c # INC L @@ -5782,7 +5790,7 @@ edff # DB ED dec(L); 002e # LD L,n - call arg + @arg L = TDAT8; 002f # CPL @@ -5790,56 +5798,56 @@ edff # DB ED 0030 # JR NC,o TDAT8 = !(F & CF); - call jr_cond + @jr_cond 0031 # LD SP,w - call arg16 + @arg16 SP = TDAT; 0032 # LD (w),A - call arg16 + @arg16 m_ea = TDAT; TDAT8 = A; - call wm m_ea + @wm m_ea WZ_L = (m_ea + 1) & 0xFF; WZ_H = A; 0033 # INC SP - call nomreq_ir 2 + @nomreq_ir 2 SP++; 0034 # INC (HL) - call rm_reg HL + @rm_reg HL inc(TDAT8); - call wm HL + @wm HL 0035 # DEC (HL) - call rm_reg HL + @rm_reg HL dec(TDAT8); - call wm HL + @wm HL 0036 # LD (HL),n - call arg - call wm HL + @arg + @wm HL 0037 # SCF set_f((F & (SF | ZF | PF)) | CF | (((F & Q) | A) & (YF | XF))); 0038 # JR C,o TDAT8 = F & CF; - call jr_cond + @jr_cond 0039 # ADD HL,SP TDAT = HL; TDAT2 = SP; - call add16 + @add16 HL = TDAT; 003a # LD A,(w) - call arg16 + @arg16 m_ea = TDAT; - call rm m_ea + @rm m_ea A = TDAT8; WZ = m_ea + 1; 003b # DEC SP - call nomreq_ir 2 + @nomreq_ir 2 SP--; 003c # INC A @@ -5849,7 +5857,7 @@ edff # DB ED dec(A); 003e # LD A,n - call arg + @arg A = TDAT8; 003f # CCF @@ -5873,7 +5881,7 @@ edff # DB ED B = L; 0046 # LD B,(HL) - call rm HL + @rm HL B = TDAT8; 0047 # LD B,A @@ -5897,7 +5905,7 @@ edff # DB ED C = L; 004e # LD C,(HL) - call rm HL + @rm HL C = TDAT8; 004f # LD C,A @@ -5921,7 +5929,7 @@ edff # DB ED D = L; 0056 # LD D,(HL) - call rm HL + @rm HL D = TDAT8; 0057 # LD D,A @@ -5945,7 +5953,7 @@ edff # DB ED E = L; 005e # LD E,(HL) - call rm HL + @rm HL E = TDAT8; 005f # LD E,A @@ -5969,7 +5977,7 @@ edff # DB ED H = L; 0066 # LD H,(HL) - call rm HL + @rm HL H = TDAT8; 0067 # LD H,A @@ -5993,7 +6001,7 @@ edff # DB ED 006d # LD L,L 006e # LD L,(HL) - call rm HL + @rm HL L = TDAT8; 006f # LD L,A @@ -6001,34 +6009,34 @@ edff # DB ED 0070 # LD (HL),B TDAT = B; - call wm HL + @wm HL 0071 # LD (HL),C TDAT = C; - call wm HL + @wm HL 0072 # LD (HL),D TDAT = D; - call wm HL + @wm HL 0073 # LD (HL),E TDAT = E; - call wm HL + @wm HL 0074 # LD (HL),H TDAT = H; - call wm HL + @wm HL 0075 # LD (HL),L TDAT = L; - call wm HL + @wm HL 0076 # HALT halt(); 0077 # LD (HL),A TDAT = A; - call wm HL + @wm HL 0078 # LD A,B A = B; @@ -6049,7 +6057,7 @@ edff # DB ED A = L; 007e # LD A,(HL) - call rm HL + @rm HL A = TDAT8; 007f # LD A,A @@ -6073,7 +6081,7 @@ edff # DB ED add_a(L); 0086 # ADD A,(HL) - call rm HL + @rm HL add_a(TDAT8); 0087 # ADD A,A @@ -6098,7 +6106,7 @@ edff # DB ED adc_a(L); 008e # ADC A,(HL) - call rm HL + @rm HL adc_a(TDAT8); 008f # ADC A,A @@ -6123,7 +6131,7 @@ edff # DB ED sub_a(L); 0096 # SUB (HL) - call rm HL + @rm HL sub_a(TDAT8); 0097 # SUB A @@ -6148,7 +6156,7 @@ edff # DB ED sbc_a(L); 009e # SBC A,(HL) - call rm HL + @rm HL sbc_a(TDAT8); 009f # SBC A,A @@ -6173,7 +6181,7 @@ edff # DB ED and_a(L); 00a6 # AND (HL) - call rm HL + @rm HL and_a(TDAT8); 00a7 # AND A @@ -6198,7 +6206,7 @@ edff # DB ED xor_a(L); 00ae # XOR (HL) - call rm HL + @rm HL xor_a(TDAT8); 00af # XOR A @@ -6223,7 +6231,7 @@ edff # DB ED or_a(L); 00b6 # OR (HL) - call rm HL + @rm HL or_a(TDAT8); 00b7 # OR A @@ -6248,7 +6256,7 @@ edff # DB ED cp(L); 00be # CP (HL) - call rm HL + @rm HL cp(TDAT8); 00bf # CP A @@ -6256,244 +6264,244 @@ edff # DB ED 00c0 # RET NZ TDAT8 = !(F & ZF); - call ret_cond + @ret_cond 00c1 # POP BC - call pop + @pop BC = TDAT; 00c2 # JP NZ,a TDAT8 = !(F & ZF); - call jp_cond + @jp_cond 00c3 # JP a - call jp + @jp 00c4 # CALL NZ,a TDAT8 = !(F & ZF); - call call_cond + @call_cond 00c5 # PUSH BC - call push BC + @push BC 00c6 # ADD A,n - call arg + @arg add_a(TDAT8); 00c7 # RST 0 - call rst 0x00 + @rst 0x00 00c8 # RET Z TDAT8 = (F & ZF); - call ret_cond + @ret_cond 00c9 # RET - call pop + @pop PC = TDAT; WZ = PC; 00ca # JP Z,a TDAT8 = F & ZF; - call jp_cond + @jp_cond 00cb # **** CB xx - call rop - call jump_prefixed 0xcb + @rop + @jump_prefixed 0xcb 00cc # CALL Z,a TDAT8 = F & ZF; - call call_cond + @call_cond 00cd # CALL a - call arg16_call + @arg16_call 00ce # ADC A,n - call arg + @arg adc_a(TDAT8); 00cf # RST 1 - call rst 0x08 + @rst 0x08 00d0 # RET NC TDAT8 = !(F & CF); - call ret_cond + @ret_cond 00d1 # POP DE - call pop + @pop DE = TDAT; 00d2 # JP NC,a TDAT8 = !(F & CF); - call jp_cond + @jp_cond 00d3 # OUT (n),A - call arg + @arg TDAT2 = TDAT8 | (A << 8); TDAT = A; - call out TDAT2 + @out TDAT2 WZ_L = ((TDAT2 & 0xff) + 1) & 0xff; WZ_H = A; 00d4 # CALL NC,a TDAT8 = !(F & CF); - call call_cond + @call_cond 00d5 # PUSH DE - call push DE + @push DE 00d6 # SUB n - call arg + @arg sub_a(TDAT8); 00d7 # RST 2 - call rst 0x10 + @rst 0x10 00d8 # RET C TDAT8 = (F & CF); - call ret_cond + @ret_cond 00d9 # EXX exx(); 00da # JP C,a TDAT8 = F & CF; - call jp_cond + @jp_cond 00db # IN A,(n) - call arg + @arg TDAT2 = TDAT8 | (A << 8); - call in TDAT2 + @in TDAT2 A = TDAT8; WZ = TDAT2 + 1; 00dc # CALL C,a TDAT8 = F & CF; - call call_cond + @call_cond 00dd # **** DD xx - call rop - call jump_prefixed 0xdd + @rop + @jump_prefixed 0xdd 00de # SBC A,n - call arg + @arg sbc_a(TDAT8); 00df # RST 3 - call rst 0x18 + @rst 0x18 00e0 # RET PO TDAT8 = !(F & PF); - call ret_cond + @ret_cond 00e1 # POP HL - call pop + @pop HL = TDAT; 00e2 # JP PO,a TDAT8 = !(F & PF); - call jp_cond + @jp_cond 00e3 # EX HL,(SP) - call ex_sp HL + @ex_sp HL 00e4 # CALL PO,a TDAT8 = !(F & PF); - call call_cond + @call_cond 00e5 # PUSH HL - call push HL + @push HL 00e6 # AND n - call arg + @arg and_a(TDAT8); 00e7 # RST 4 - call rst 0x20 + @rst 0x20 00e8 # RET PE TDAT8 = (F & PF); - call ret_cond + @ret_cond 00e9 # JP (HL) PC = HL; 00ea # JP PE,a TDAT8 = F & PF; - call jp_cond + @jp_cond 00eb # EX DE,HL using std::swap; swap(DE, HL); 00ec # CALL PE,a TDAT8 = F & PF; - call call_cond + @call_cond 00ed # **** ED xx - call rop - call jump_prefixed 0xed + @rop + @jump_prefixed 0xed 00ee # XOR n - call arg + @arg xor_a(TDAT8); 00ef # RST 5 - call rst 0x28 + @rst 0x28 00f0 # RET P TDAT8 = !(F & SF); - call ret_cond + @ret_cond 00f1 # POP AF - call pop + @pop AF = TDAT; 00f2 # JP P,a TDAT8 = !(F & SF); - call jp_cond + @jp_cond 00f3 # DI m_iff1 = m_iff2 = 0; 00f4 # CALL P,a TDAT8 = !(F & SF); - call call_cond + @call_cond 00f5 # PUSH AF - call push AF + @push AF 00f6 # OR n - call arg + @arg or_a(TDAT8); 00f7 # RST 6 - call rst 0x30 + @rst 0x30 00f8 # RET M TDAT8 = (F & SF); - call ret_cond + @ret_cond 00f9 # LD SP,HL - call nomreq_ir 2 + @nomreq_ir 2 SP = HL; 00fa # JP M,a TDAT8 = F & SF; - call jp_cond + @jp_cond 00fb # EI ei(); 00fc # CALL M,a TDAT8 = F & SF; - call call_cond + @call_cond 00fd # **** FD xx - call rop - call jump_prefixed 0xfd + @rop + @jump_prefixed 0xfd 00fe # CP n - call arg + @arg cp(TDAT8); 00ff # RST 7 - call rst 0x38 + @rst 0x38 @@ -7192,9 +7200,9 @@ r800:cb35 # SLL L L = r800_sll(L); r800:cb36 # SLL (HL) - call rm_reg HL + @rm_reg HL TDAT8 = r800_sll(TDAT8); - call wm HL + @wm HL r800:cb37 # SLL A A = r800_sll(A); @@ -8220,7 +8228,8 @@ r800:fdff # illegal illegal_1(); r800:ed46 # IM 0 - m_im = 0; T(1); + m_im = 0; + + 1 r800:ed4c # illegal illegal_2(); @@ -8235,7 +8244,8 @@ r800:ed55 # illegal illegal_2(); r800:ed56 # IM 1 - m_im = 1; T(1); + m_im = 1; + + 1 r800:ed5c # illegal illegal_2(); @@ -8244,7 +8254,8 @@ r800:ed5d # illegal illegal_2(); r800:ed5e # IM 2 - m_im = 2; T(1); + m_im = 2; + + 1 r800:ed64 # illegal illegal_2(); @@ -8259,7 +8270,8 @@ r800:ed6c # illegal illegal_2(); r800:ed6e # IM 0 - m_im = 0; T(1); + m_im = 0; + + 1 # ed70 became legal IN F,(C) @@ -8288,37 +8300,48 @@ r800:ed7f # illegal illegal_2(); r800:edc1 # MULUB A,B - mulub(B); T(12); + mulub(B); + + 12 r800:edc3 # MULUW HL,BC - muluw(BC); T(34); + muluw(BC); + + 34 r800:edc9 # MULUB A,C - mulub(C); T(12); + mulub(C); + + 12 r800:edd1 # MULUB A,D - mulub(D); T(12); + mulub(D); + + 12 r800:edd9 # MULUB A,E - mulub(E); T(12); + mulub(E); + + 12 r800:ede1 # MULUB A,H (undocumented) - mulub(H); T(12); + mulub(H); + + 12 r800:ede9 # MULUB A,L (undocumented) - mulub(L); T(12); + mulub(L); + + 12 r800:edf1 # MULUB A,A (undocumented) - mulub(A); T(12); + mulub(A); + + 12 r800:edf3 # MULUW HL,SP - muluw(SP); T(34); + muluw(SP); + + 34 r800:edf9 # MULUB A,A (undocumented) - mulub(A); T(12); + mulub(A); + + 12 r800:00f3 # DI - m_iff1 = m_iff2 = 0; T(1); + m_iff1 = m_iff2 = 0; + + 1 @@ -8327,9 +8350,9 @@ r800:00f3 # DI ########################################################## macro ldix { - call rm HL + @rm HL if (TDAT8 != A) { - call wm DE + @wm DE ; } HL++; @@ -8339,9 +8362,9 @@ macro ldix macro lddx { - call rm HL + @rm HL if (TDAT8 != A) { - call wm DE + @wm DE ; } DE++; @@ -8357,7 +8380,7 @@ z80n:ed24 # mirror a z80n:ed27 # test * TDAT_H = A; - call arg + @arg and_a(TDAT8); A = TDAT_H; @@ -8392,34 +8415,34 @@ z80n:ed33 # add bc,a BC += A; z80n:ed34 # add hl,** - call arg16 + @arg16 HL += TDAT; z80n:ed35 # add de,** - call arg16 + @arg16 DE += TDAT; z80n:ed36 # add bc,** - call arg16 + @arg16 BC += TDAT; z80n:ed8a # push ** - call arg + @arg TDAT_H = TDAT_L; - call arg - call push TDAT + @arg + @push TDAT z80n:ed90 # outinb - call rm HL - call out BC + @rm HL + @out BC HL++; z80n:ed91 # nextreg *,* - call arg16 + @arg16 m_out_nextreg_cb(TDAT_L, TDAT_H); z80n:ed92 # nextreg *,a - call arg + @arg m_out_nextreg_cb(TDAT8, A); z80n:ed93 # pixeldn @@ -8437,30 +8460,30 @@ z80n:ed95 # setae A = 0x80 >> (E & 7); z80n:ed98 # jp (c) - call in BC + @in BC PC = (PC & 0xc000) + (TDAT8 << 6); z80n:eda4 # ldix - call ldix + @ldix z80n:eda5 # ldws - call rm HL - call wm DE + @rm HL + @wm DE L++; inc(D); z80n:edac # lddx - call lddx + @lddx z80n:edb4 # ldirx - call ldix + @ldix if (BC != 0) PC -= 2; z80n:edb7 # ldpirx - call rm (HL & 0xfff8) + (E & 7) + @rm (HL & 0xfff8) + (E & 7) if (TDAT8 != A) { - call wm DE + @wm DE ; } DE++; @@ -8469,6 +8492,6 @@ z80n:edb7 # ldpirx PC -= 2; z80n:edbc # lddrx - call lddx + @lddx if (BC != 0) PC -= 2; diff --git a/src/devices/cpu/z80/z80make.py b/src/devices/cpu/z80/z80make.py index 023cdfd29ba..90b13dcfe5a 100644 --- a/src/devices/cpu/z80/z80make.py +++ b/src/devices/cpu/z80/z80make.py @@ -240,11 +240,11 @@ class OpcodeList: line_toc = line_toc[2:] line = " ".join(line_toc) for i in range(times): - if line_toc[0] == 'call': - name = line_toc[1] + if line_toc[0].startswith('@'): + name = line_toc[0][1:] arg = None - if len(line_toc) > 2: - arg = " ".join(line_toc[2:]) + if len(line_toc) > 1: + arg = " ".join(line_toc[1:]) if name in self.macros: macro = self.macros[name] ([out.extend(self.pre_process(il)) for il in macro.apply(arg)]) diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index 8d4d6cedf4d..a3d6ae3e656 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -322,6 +322,7 @@ class NETLIB_NAME(sound_in) : public sound_in_type public: using base_type = sound_in_type; using base_type::base_type; + sound_stream *m_stream = nullptr; }; netlist::setup_t &netlist_mame_device::setup() @@ -1387,6 +1388,11 @@ void netlist_mame_sound_device::device_start() std::vector<nld_sound_in *> indevs = netlist().get_device_list<nld_sound_in>(); for (auto &e : indevs) { + // We cannot use the resampler because the stream is not + // always audio. In particular the ay8910 may send a stream + // of resistor values, which would be destroyed by resampling. + + e->m_stream = stream_alloc(1, 0, SAMPLE_RATE_INPUT_ADAPTIVE); m_in.emplace(e->id(), e); const auto sample_time = netlist::netlist_time::from_raw(static_cast<netlist::netlist_time::internal_type>(nltime_from_attotime(m_attotime_per_clock).as_raw())); e->resolve_params(sample_time); @@ -1399,7 +1405,7 @@ void netlist_mame_sound_device::device_start() m_inbuffer.resize(m_in.size()); /* initialize the stream(s) */ - m_stream = stream_alloc(m_in.size(), m_out.size(), m_sound_clock); + m_stream = stream_alloc(0, m_out.size(), m_sound_clock); LOGDEVCALLS("sound device_start exit\n"); } @@ -1444,21 +1450,30 @@ void netlist_mame_sound_device::update_to_current_time() void netlist_mame_sound_device::sound_stream_update(sound_stream &stream) { - for (auto &e : m_in) + if (stream.input_count() == 1) { - auto clock_period = stream.sample_period(); - auto sample_time = netlist::netlist_time::from_raw(static_cast<netlist::netlist_time::internal_type>(nltime_from_attotime(clock_period).as_raw())); - m_inbuffer[e.first] = netlist_mame_sound_input_buffer(stream, e.first); - e.second->buffer_reset(sample_time, stream.samples(), &m_inbuffer[e.first]); + for (auto &e : m_in) + if (e.second->m_stream == &stream) + { + auto clock_period = stream.sample_period(); + auto sample_time = netlist::netlist_time::from_raw(static_cast<netlist::netlist_time::internal_type>(nltime_from_attotime(clock_period).as_raw())); + m_inbuffer[e.first] = netlist_mame_sound_input_buffer(stream); + e.second->buffer_reset(sample_time, stream.samples(), &m_inbuffer[e.first]); + return; + } + fatalerror("netlist: Got input from an unknown stream\n"); } int samples = stream.samples(); LOGDEBUG("samples %d\n", samples); - // end_time() is the time at the END of the last sample we're generating - // however, the sample value is the value at the START of that last sample, - // so subtract one sample period so that we only process up to the minimum - auto nl_target_time = nltime_from_attotime(stream.end_time() - stream.sample_period()); + // Ensure all input streams are up-to-date + for (auto &e : m_in) + if (e.second->m_stream) + e.second->m_stream->update(); + + // Get the start time of the last sample to generate + auto nl_target_time = nltime_from_attotime(stream.sample_to_time(stream.end_index() - 1)); auto nltime(netlist().exec().time()); if (nltime < nl_target_time) diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 67b6b7d143c..57fc6b05c3a 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -255,14 +255,18 @@ private: class netlist_mame_sound_input_buffer { public: - sound_stream *m_stream = nullptr; - int m_stream_input = 0; + std::vector<sound_stream::sample_t> m_buffer; netlist_mame_sound_input_buffer() {} - netlist_mame_sound_input_buffer(sound_stream &stream, int input) : m_stream(&stream), m_stream_input(input) { } + netlist_mame_sound_input_buffer(sound_stream &stream) { + int samples = stream.samples(); + m_buffer.resize(samples); + for (int i=0; i != samples; i++) + m_buffer[i] = stream.get(0, i); + } - sound_stream::sample_t operator[](std::size_t index) { return m_stream->get(m_stream_input, index); } + sound_stream::sample_t operator[](std::size_t index) { return m_buffer[index]; } }; // ---------------------------------------------------------------------------------------- diff --git a/src/devices/sound/spkrdev.cpp b/src/devices/sound/spkrdev.cpp index 841656ab4ac..16dc6199c2f 100644 --- a/src/devices/sound/spkrdev.cpp +++ b/src/devices/sound/spkrdev.cpp @@ -268,7 +268,7 @@ void speaker_sound_device::level_w(int new_level) /* This is redundant because time update has to be done within sound_stream_update() anyway, * however this ensures synchronization between the speaker and stream timing: */ - m_channel_last_sample_time = m_channel->sample_time(); + m_channel_last_sample_time = m_channel->end_time(); /* sample_time() may be ahead of us */ if (m_channel_last_sample_time > time) diff --git a/src/emu/resampler.cpp b/src/emu/resampler.cpp index b86e028ce04..18a5d9f4a21 100644 --- a/src/emu/resampler.cpp +++ b/src/emu/resampler.cpp @@ -231,7 +231,7 @@ u32 audio_resampler_hq::compute_gcd(u32 fs, u32 ft) u32 audio_resampler_hq::history_size() const { - return m_order_per_lane; + return m_order_per_lane + m_skip + 1; } void audio_resampler_hq::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const @@ -382,7 +382,7 @@ audio_resampler_lofi::audio_resampler_lofi(u32 fs, u32 ft) u32 audio_resampler_lofi::history_size() const { - return 5 * m_source_divide; + return 5 * m_source_divide + m_fs / m_ft + 1; } void audio_resampler_lofi::apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp index 696742a87e2..a08ede3f471 100644 --- a/src/emu/sound.cpp +++ b/src/emu/sound.cpp @@ -38,7 +38,7 @@ #define LOG_OSD_STREAMS (1U << 3) #define LOG_ORDER (1U << 4) -#define VERBOSE -1 +#define VERBOSE 0 #include "logmacro.h" @@ -498,12 +498,12 @@ u64 sound_stream::get_current_sample_index() const void sound_stream::update() { - if(!is_active() || m_in_update) + 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 - m_output_buffer.write_sample(); + 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) + 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 - m_output_buffer.write_sample(); + 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; @@ -859,7 +859,7 @@ void sound_manager::after_devices_init() void sound_manager::input_get(int id, sound_stream &stream) { u32 samples = stream.samples(); - u64 end_pos = stream.sample_index(); + u64 end_pos = stream.end_index(); u32 skip = stream.output_count(); for(const auto &step : m_microphones[id].m_input_mixing_steps) { diff --git a/src/emu/sound.h b/src/emu/sound.h index 6d699dbb8d9..57c96683f0a 100644 --- a/src/emu/sound.h +++ b/src/emu/sound.h @@ -35,7 +35,7 @@ For example, if you have a 10Hz clock, and call stream.update() at t=0.91, it will compute 10 samples (for clock edges 0.0, 0.1, 0.2, ..., 0.7, 0.8, and 0.9). And then if you ask the stream what its - current end time is (via stream.sample_time()), it will say t=1.0, + current end time is (via stream.end_time()), it will say t=1.0, which is in the future, because it knows it will hold that last sample until 1.0s. @@ -210,11 +210,9 @@ public: // sample id and timing of the first and last sample of the current update block, and first of the next sample block u64 start_index() const { return m_output_buffer.write_sample(); } - u64 end_index() const { return m_output_buffer.write_sample() + samples() - 1; } - u64 sample_index() const { return m_output_buffer.write_sample() + samples(); } + u64 end_index() const { return m_output_buffer.write_sample() + samples(); } attotime start_time() const { return sample_to_time(start_index()); } attotime end_time() const { return sample_to_time(end_index()); } - attotime sample_time() const { return sample_to_time(sample_index()); } // convert from absolute sample index to time attotime sample_to_time(u64 index) const; diff --git a/src/frontend/mame/ui/audioeffects.cpp b/src/frontend/mame/ui/audioeffects.cpp index f621f3adf21..eb94667f99f 100644 --- a/src/frontend/mame/ui/audioeffects.cpp +++ b/src/frontend/mame/ui/audioeffects.cpp @@ -214,6 +214,8 @@ u32 menu_audio_effects::flag_lat() const flag |= FLAG_LEFT_ARROW; if(latency < 0.0500) flag |= FLAG_RIGHT_ARROW; + if(machine().sound().resampler_type() != sound_manager::RESAMPLER_HQ) + flag |= FLAG_INVERT | FLAG_DISABLE; return flag; } @@ -225,6 +227,8 @@ u32 menu_audio_effects::flag_length() const flag |= FLAG_LEFT_ARROW; if(latency < 500) flag |= FLAG_RIGHT_ARROW; + if(machine().sound().resampler_type() != sound_manager::RESAMPLER_HQ) + flag |= FLAG_INVERT | FLAG_DISABLE; return flag; } @@ -236,6 +240,8 @@ u32 menu_audio_effects::flag_phases() const flag |= FLAG_LEFT_ARROW; if(latency < 1000) flag |= FLAG_RIGHT_ARROW; + if(machine().sound().resampler_type() != sound_manager::RESAMPLER_HQ) + flag |= FLAG_INVERT | FLAG_DISABLE; return flag; } @@ -253,6 +259,7 @@ void menu_audio_effects::populate() auto eff = sound.default_effect_chain(); for(u32 e = 0; e != eff.size(); e++) item_append(_(audio_effect::effect_names[eff[e]->type()]), 0, (void *)intptr_t((0xffff << 16) | e)); + item_append(_("Resampler"), FLAG_UI_HEADING | FLAG_DISABLE, nullptr); item_append(_("Type"), sound.resampler_type_names(sound.resampler_type()), flag_type(), (void *)RS_TYPE); item_append(_("HQ latency"), format_lat(sound.resampler_hq_latency()), flag_lat(), (void *)RS_LATENCY); diff --git a/src/mame/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index 95c0ec5808e..f8b94ae5e8f 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -681,7 +681,7 @@ static INPUT_PORTS_START( bmcpokr ) PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DIP1:1") PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPSETTING( 0x01, DEF_STR( No ) ) - PORT_DIPNAME( 0x02, 0x00, "Double-Up Game" ) PORT_DIPLOCATION("DIP1:2") + PORT_DIPNAME( 0x02, 0x00, "Double Up Game" ) PORT_DIPLOCATION("DIP1:2") PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) PORT_DIPSETTING( 0x02, DEF_STR( No ) ) PORT_DIPNAME( 0x04, 0x00, "Slot Machine" ) PORT_DIPLOCATION("DIP1:3") @@ -719,7 +719,7 @@ static INPUT_PORTS_START( bmcpokr ) PORT_DIPSETTING( 0x01, "97" ) PORT_DIPSETTING( 0x03, "98" ) PORT_DIPSETTING( 0x00, "99" ) - PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Rate" ) PORT_DIPLOCATION("DIP3:3,4") + PORT_DIPNAME( 0x0c, 0x0c, "Double Up Rate" ) PORT_DIPLOCATION("DIP3:3,4") PORT_DIPSETTING( 0x08, "93" ) PORT_DIPSETTING( 0x04, "94" ) PORT_DIPSETTING( 0x00, "95" ) @@ -780,17 +780,17 @@ static INPUT_PORTS_START( mjmaglmp ) PORT_START("DSW1") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DIP1:1") - PORT_DIPSETTING( 0x01, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x02, 0x00, "Double-Up Game" ) PORT_DIPLOCATION("DIP1:2") - PORT_DIPSETTING( 0x02, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "Double Up Game" ) PORT_DIPLOCATION("DIP1:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x04, 0x04, "Coin Sw. Function" ) PORT_DIPLOCATION("DIP1:3") PORT_DIPSETTING( 0x00, "Coin" ) PORT_DIPSETTING( 0x04, "Note" ) PORT_DIPNAME( 0x08, 0x08, "Pay Sw. Function" ) PORT_DIPLOCATION("DIP1:4") PORT_DIPSETTING( 0x00, "Pay-Out" ) - PORT_DIPSETTING( 0x08, "Key-Down" ) + PORT_DIPSETTING( 0x08, "Key-Out" ) PORT_DIPNAME( 0x10, 0x10, "Game Hint" ) PORT_DIPLOCATION("DIP1:5") PORT_DIPSETTING( 0x10, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) @@ -822,42 +822,42 @@ static INPUT_PORTS_START( mjmaglmp ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP2:8" ) PORT_START("DSW3") - PORT_DIPNAME( 0x03, 0x03, "Pay-Out Rate" ) PORT_DIPLOCATION("DIP3:1,2") - PORT_DIPSETTING( 0x02, "75" ) - PORT_DIPSETTING( 0x01, "82" ) - PORT_DIPSETTING( 0x03, "85" ) - PORT_DIPSETTING( 0x00, "88" ) - PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Rate" ) PORT_DIPLOCATION("DIP3:3,4") - PORT_DIPSETTING( 0x08, "95" ) - PORT_DIPSETTING( 0x04, "96" ) - PORT_DIPSETTING( 0x00, "97" ) - PORT_DIPSETTING( 0x0c, "98" ) - PORT_DIPNAME( 0x30, 0x30, "Game Enhance Type" ) PORT_DIPLOCATION("DIP3:5,6") + PORT_DIPNAME( 0x03, 0x03, "Payout Rate" ) PORT_DIPLOCATION("DIP3:1,2") + PORT_DIPSETTING( 0x02, "75%" ) + PORT_DIPSETTING( 0x01, "82%" ) + PORT_DIPSETTING( 0x03, "85%" ) + PORT_DIPSETTING( 0x00, "88%" ) + PORT_DIPNAME( 0x0c, 0x0c, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DIP3:3,4") + PORT_DIPSETTING( 0x08, "95%" ) + PORT_DIPSETTING( 0x04, "96%" ) + PORT_DIPSETTING( 0x00, "97%" ) + PORT_DIPSETTING( 0x0c, "98%" ) + PORT_DIPNAME( 0x30, 0x30, "Game Enhance Type" ) PORT_DIPLOCATION("DIP3:5,6") PORT_DIPSETTING( 0x10, "Small" ) PORT_DIPSETTING( 0x00, "Big" ) PORT_DIPSETTING( 0x30, "Normal" ) PORT_DIPSETTING( 0x20, "Bonus" ) - PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") + PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") PORT_DIPSETTING( 0x00, "300" ) PORT_DIPSETTING( 0x80, "500" ) PORT_DIPSETTING( 0x40, "1000" ) PORT_DIPSETTING( 0xc0, "2000" ) PORT_START("DSW4") - PORT_DIPNAME( 0x01, 0x01, "Max Bet" ) PORT_DIPLOCATION("DIP4:1") + PORT_DIPNAME( 0x01, 0x01, "Maximum Bet" ) PORT_DIPLOCATION("DIP4:1") PORT_DIPSETTING( 0x01, "10" ) PORT_DIPSETTING( 0x00, "20" ) - PORT_DIPNAME( 0x06, 0x06, "Min Bet" ) PORT_DIPLOCATION("DIP4:2,3") + PORT_DIPNAME( 0x06, 0x06, "Minimum Bet" ) PORT_DIPLOCATION("DIP4:2,3") PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x06, "3" ) PORT_DIPSETTING( 0x04, "6" ) PORT_DIPSETTING( 0x02, "9" ) - PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIP4:4,5") + PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIP4:4,5") PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-In" ) PORT_DIPLOCATION("DIP4:6,7") + PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-In" ) PORT_DIPLOCATION("DIP4:6,7") PORT_DIPSETTING( 0x40, "5" ) PORT_DIPSETTING( 0x60, "10" ) PORT_DIPSETTING( 0x20, "50" ) @@ -889,92 +889,95 @@ static INPUT_PORTS_START( fengyunh ) MAHJONG_KEYS_COMMON("DSW3", 0x01) PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x01, "Max Bet" ) PORT_DIPLOCATION("DIP4:1") // 最大押分 + PORT_DIPNAME( 0x01, 0x01, "Maximum Bet" ) PORT_DIPLOCATION("DIP4:1") // 最大押分 PORT_DIPSETTING( 0x01, "10" ) PORT_DIPSETTING( 0x00, "20" ) - PORT_DIPNAME( 0x06, 0x06, "Min Bet" ) PORT_DIPLOCATION("DIP4:2,3") // 最小押分 + PORT_DIPNAME( 0x06, 0x06, "Minimum Bet" ) PORT_DIPLOCATION("DIP4:2,3") // 最小押分 PORT_DIPSETTING( 0x00, "1" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x06, "6" ) PORT_DIPSETTING( 0x02, "9" ) - PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIP4:4,5") // 投幣單位 - PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) - PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-In" ) PORT_DIPLOCATION("DIP4:6,7") // 開分單位 + PORT_DIPNAME( 0x18, 0x18, DEF_STR(Coinage) ) PORT_DIPLOCATION("DIP4:4,5") // 投幣單位 + PORT_DIPSETTING( 0x18, DEF_STR(1C_1C) ) + PORT_DIPSETTING( 0x10, DEF_STR(1C_2C) ) + PORT_DIPSETTING( 0x08, DEF_STR(1C_3C) ) + PORT_DIPSETTING( 0x00, DEF_STR(1C_5C) ) + PORT_DIPNAME( 0x60, 0x60, "Key-In Unit" ) PORT_DIPLOCATION("DIP4:6,7") // 開分單位 PORT_DIPSETTING( 0x40, "5" ) PORT_DIPSETTING( 0x60, "10" ) PORT_DIPSETTING( 0x20, "50" ) PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0x80, 0x80, "Score Display Mode" ) PORT_DIPLOCATION("DIP4:8") // 計分方式 (sets how points, credits, bets, etc. are displayed) - PORT_DIPSETTING( 0x80, "Numbers" ) // 數字 (Arabic numerals) - PORT_DIPSETTING( 0x00, "Circle Tiles" ) // 筒子 (tong mahjong tiles representing digits) + PORT_DIPNAME( 0x80, 0x80, "Score Display Mode" ) PORT_DIPLOCATION("DIP4:8") // 計分方式 (sets how points, credits, bets, etc. are displayed) + PORT_DIPSETTING( 0x80, "Numbers" ) // 數字 (Arabic numerals) + PORT_DIPSETTING( 0x00, "Circle Tiles" ) // 筒子 (tong mahjong tiles representing digits) PORT_START("DSW2") - PORT_DIPNAME( 0x03, 0x03, "Pay-Out Rate" ) PORT_DIPLOCATION("DIP3:1,2") // 遊戲機率 - PORT_DIPSETTING( 0x02, "75" ) - PORT_DIPSETTING( 0x01, "78" ) - PORT_DIPSETTING( 0x03, "80" ) - PORT_DIPSETTING( 0x00, "85" ) - PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Rate" ) PORT_DIPLOCATION("DIP3:3,4") // 比倍機率 - PORT_DIPSETTING( 0x08, "95" ) - PORT_DIPSETTING( 0x04, "96" ) - PORT_DIPSETTING( 0x00, "97" ) - PORT_DIPSETTING( 0x0c, "98" ) - PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DIP3:5" ) // 出牌方式 - PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DIP3:6" ) // " - PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") + PORT_DIPNAME( 0x03, 0x03, "Payout Rate" ) PORT_DIPLOCATION("DIP3:1,2") // 遊戲機率 + PORT_DIPSETTING( 0x02, "75%" ) + PORT_DIPSETTING( 0x01, "78%" ) + PORT_DIPSETTING( 0x03, "80%" ) + PORT_DIPSETTING( 0x00, "85%" ) + PORT_DIPNAME( 0x0c, 0x0c, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DIP3:3,4") // 比倍機率 + PORT_DIPSETTING( 0x08, "95%" ) + PORT_DIPSETTING( 0x04, "96%" ) + PORT_DIPSETTING( 0x00, "97%" ) + PORT_DIPSETTING( 0x0c, "98%" ) + PORT_DIPNAME( 0x30, 0x30, "Deal Mode" ) PORT_DIPLOCATION("DIP3:5,6") // 出牌方式 + PORT_DIPSETTING( 0x30, DEF_STR(Normal) ) // 正常 + PORT_DIPSETTING( 0x20, "Increase Manguan" ) // 滿貫加強 + PORT_DIPSETTING( 0x10, "Increase Xiaopai" ) // 小牌加強 + PORT_DIPSETTING( 0x00, "Increase Dapai" ) // 大牌加強 + PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") // 破台限制 PORT_DIPSETTING( 0x80, "500" ) PORT_DIPSETTING( 0x40, "1000" ) PORT_DIPSETTING( 0xc0, "2000" ) PORT_DIPSETTING( 0x00, "3000" ) PORT_START("DSW3") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Controls ) ) PORT_DIPLOCATION("DIP2:1") // not displayed in test mode + PORT_DIPNAME( 0x01, 0x01, DEF_STR(Controls) ) PORT_DIPLOCATION("DIP2:1") // not displayed in test mode PORT_DIPSETTING( 0x01, "Keyboard" ) - PORT_DIPSETTING( 0x00, DEF_STR( Joystick ) ) - PORT_DIPNAME( 0x02, 0x02, "Key-In Limit" ) PORT_DIPLOCATION("DIP2:2") // 開分限制 + PORT_DIPSETTING( 0x00, DEF_STR(Joystick) ) + PORT_DIPNAME( 0x02, 0x02, "Key-In Limit" ) PORT_DIPLOCATION("DIP2:2") // 開分限制 PORT_DIPSETTING( 0x02, "1000" ) PORT_DIPSETTING( 0x00, "5000" ) - PORT_DIPNAME( 0x04, 0x04, "Jackpot" ) PORT_DIPLOCATION("DIP2:3") // 累積彩金 + PORT_DIPNAME( 0x04, 0x04, "Jackpot" ) PORT_DIPLOCATION("DIP2:3") // 累積彩金 PORT_DIPSETTING( 0x00, "50" ) PORT_DIPSETTING( 0x04, "100" ) - PORT_DIPNAME( 0x18, 0x18, "Double Over / Round Bonus" ) PORT_DIPLOCATION("DIP2:4,5") + PORT_DIPNAME( 0x18, 0x18, "Double Over / Round Bonus" ) PORT_DIPLOCATION("DIP2:4,5") // 比倍破台/比倍贈分 PORT_DIPSETTING( 0x10, "100 / 10" ) PORT_DIPSETTING( 0x18, "200 / 10" ) PORT_DIPSETTING( 0x08, "300 / 15" ) PORT_DIPSETTING( 0x00, "500 / 25" ) - PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-Out" ) PORT_DIPLOCATION("DIP2:6,7") // 洗分單位 + PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-Out" ) PORT_DIPLOCATION("DIP2:6,7") // 洗分單位 PORT_DIPSETTING( 0x40, "10" ) PORT_DIPSETTING( 0x20, "20" ) PORT_DIPSETTING( 0x60, "30" ) PORT_DIPSETTING( 0x00, "50" ) - PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP2:8" ) // not displayed in test mode + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP2:8" ) // not displayed in test mode PORT_START("DSW4") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DIP1:1") // not displayed in test mode - PORT_DIPSETTING( 0x01, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x02, 0x00, "Double-Up Game" ) PORT_DIPLOCATION("DIP1:2") // 比倍遊戲 - PORT_DIPSETTING( 0x02, DEF_STR( No ) ) // 無 - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x04, 0x04, "Credit Mode" ) PORT_DIPLOCATION("DIP1:3") // 進分方式 (sets coin input function) - PORT_DIPSETTING( 0x04, "Key-In" ) // 開分 - PORT_DIPSETTING( 0x00, "Coin" ) // 投幣 - PORT_DIPNAME( 0x08, 0x08, "Payout Mode" ) PORT_DIPLOCATION("DIP1:4") // 退分方式 - PORT_DIPSETTING( 0x08, "Key-Out" ) // 洗分 (Pay Out key pays out score at Key-Out rate) - PORT_DIPSETTING( 0x00, "Cash Out" ) // 退幣 (Pay Out key pays out score at rate set for coin input) - 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_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 - PORT_DIPSETTING( 0x00, "Mechanical" ) // 機械式 - PORT_DIPSETTING( 0x40, "Electronic" ) // 電子式 - PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP1:8" ) // not displayed in test mode + PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP1:1") // not displayed in test mode + PORT_DIPSETTING( 0x01, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x02, 0x00, "Double Up Game" ) PORT_DIPLOCATION("DIP1:2") // 比倍遊戲 + PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x04, 0x04, "Credit Mode" ) PORT_DIPLOCATION("DIP1:3") // 進分方式 (sets coin input function) + PORT_DIPSETTING( 0x04, "Key-In" ) // 開分 + PORT_DIPSETTING( 0x00, "Coin" ) // 投幣 + PORT_DIPNAME( 0x08, 0x08, "Payout Mode" ) PORT_DIPLOCATION("DIP1:4") // 退分方式 + PORT_DIPSETTING( 0x08, "Key-Out" ) // 洗分 (Pay Out key pays out score at Key-Out rate) + PORT_DIPSETTING( 0x00, "Return Coins" ) // 退幣 (Pay Out key pays out score at rate set for coin input) + 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_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 + PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 + PORT_DIPSETTING( 0x00, "Mechanical" ) // 機械式 + PORT_DIPSETTING( 0x40, "Electronic" ) // 電子式 + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP1:8" ) // not displayed in test mode // Credit Mode Payout Mode | Pay Out Rate Key Out Rate // -----------------------------+------------------------------ @@ -988,95 +991,98 @@ static INPUT_PORTS_START( shendeng ) PORT_INCLUDE(fengyunh) PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x01, 0x01, "Max Bet" ) PORT_DIPLOCATION("DIP4:1") // 最大押分 + PORT_DIPNAME( 0x01, 0x01, "Maximum Bet" ) PORT_DIPLOCATION("DIP4:1") // 最大押分 PORT_DIPSETTING( 0x01, "10" ) PORT_DIPSETTING( 0x00, "20" ) - PORT_DIPNAME( 0x06, 0x06, "Min Bet" ) PORT_DIPLOCATION("DIP4:2,3") // 最小押分 + PORT_DIPNAME( 0x06, 0x06, "Minimum Bet" ) PORT_DIPLOCATION("DIP4:2,3") // 最小押分 PORT_DIPSETTING( 0x06, "1" ) PORT_DIPSETTING( 0x04, "2" ) PORT_DIPSETTING( 0x02, "3" ) PORT_DIPSETTING( 0x00, "5" ) - PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIP4:4,5") // 投幣單位 - PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) - PORT_DIPNAME( 0x60, 0x60, "Credits Per Key-In" ) PORT_DIPLOCATION("DIP4:6,7") // 開分單位 + PORT_DIPNAME( 0x18, 0x18, DEF_STR(Coinage) ) PORT_DIPLOCATION("DIP4:4,5") // 投幣單位 + PORT_DIPSETTING( 0x00, DEF_STR(2C_1C) ) + PORT_DIPSETTING( 0x18, DEF_STR(1C_1C) ) + PORT_DIPSETTING( 0x10, DEF_STR(1C_2C) ) + PORT_DIPSETTING( 0x08, DEF_STR(1C_3C) ) + PORT_DIPNAME( 0x60, 0x60, "Key-In Unit" ) PORT_DIPLOCATION("DIP4:6,7") // 開分單位 PORT_DIPSETTING( 0x40, "5" ) PORT_DIPSETTING( 0x60, "10" ) PORT_DIPSETTING( 0x20, "50" ) PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0x80, 0x80, "Score Display Mode" ) PORT_DIPLOCATION("DIP4:8") // 計分方式 (sets how points, credits, bets, etc. are displayed) - PORT_DIPSETTING( 0x80, "Numbers" ) // 數字 (Arabic numerals) - PORT_DIPSETTING( 0x00, "Bamboo Tiles" ) // 索子 (suo mahjong tiles representing digits) + PORT_DIPNAME( 0x80, 0x80, "Score Display Mode" ) PORT_DIPLOCATION("DIP4:8") // 計分方式 (sets how points, credits, bets, etc. are displayed) + PORT_DIPSETTING( 0x80, "Numbers" ) // 數字 (Arabic numerals) + PORT_DIPSETTING( 0x00, "Bamboo Tiles" ) // 索子 (suo mahjong tiles representing digits) PORT_MODIFY("DSW2") - PORT_DIPNAME( 0x03, 0x03, "Pay-Out Rate" ) PORT_DIPLOCATION("DIP3:1,2") // 遊戲機率 - PORT_DIPSETTING( 0x02, "82" ) - PORT_DIPSETTING( 0x01, "88" ) - PORT_DIPSETTING( 0x03, "90" ) - PORT_DIPSETTING( 0x00, "93" ) - PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Rate" ) PORT_DIPLOCATION("DIP3:3,4") // 比倍機率 - PORT_DIPSETTING( 0x08, "93" ) - PORT_DIPSETTING( 0x04, "94" ) - PORT_DIPSETTING( 0x00, "95" ) - PORT_DIPSETTING( 0x0c, "96" ) - PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "DIP3:5" ) // 出牌方式 - PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "DIP3:6" ) // " - PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") + PORT_DIPNAME( 0x03, 0x03, "Payout Rate" ) PORT_DIPLOCATION("DIP3:1,2") // 遊戲機率 + PORT_DIPSETTING( 0x02, "82%" ) + PORT_DIPSETTING( 0x01, "88%" ) + PORT_DIPSETTING( 0x03, "90%" ) + PORT_DIPSETTING( 0x00, "93%" ) + PORT_DIPNAME( 0x0c, 0x0c, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DIP3:3,4") // 比倍機率 + PORT_DIPSETTING( 0x08, "93%" ) + PORT_DIPSETTING( 0x04, "94%" ) + PORT_DIPSETTING( 0x00, "95%" ) + PORT_DIPSETTING( 0x0c, "96%" ) + PORT_DIPNAME( 0x30, 0x30, "Deal Mode" ) PORT_DIPLOCATION("DIP3:5,6") // 出牌方式 + PORT_DIPSETTING( 0x30, DEF_STR(Normal) ) // 正常 + PORT_DIPSETTING( 0x20, "Increase Zhima" ) // 芝麻加強 + PORT_DIPSETTING( 0x10, "Increase Xiaopai" ) // 小牌加強 + PORT_DIPSETTING( 0x00, "Increase Dapai" ) // 大牌加強 + PORT_DIPNAME( 0xc0, 0xc0, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7,8") // 破台限制 PORT_DIPSETTING( 0x80, "500" ) PORT_DIPSETTING( 0xc0, "1000" ) PORT_DIPSETTING( 0x40, "2000" ) PORT_DIPSETTING( 0x00, "3000" ) PORT_MODIFY("DSW3") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Controls ) ) PORT_DIPLOCATION("DIP2:1") // not displayed in test mode + PORT_DIPNAME( 0x01, 0x01, DEF_STR(Controls) ) PORT_DIPLOCATION("DIP2:1") // not displayed in test mode PORT_DIPSETTING( 0x01, "Keyboard" ) - PORT_DIPSETTING( 0x00, DEF_STR( Joystick ) ) - PORT_DIPNAME( 0x02, 0x02, "Key-In Limit" ) PORT_DIPLOCATION("DIP2:2") // 開分限制 + PORT_DIPSETTING( 0x00, DEF_STR(Joystick) ) + PORT_DIPNAME( 0x02, 0x02, "Key-In Limit" ) PORT_DIPLOCATION("DIP2:2") // 開分限制 PORT_DIPSETTING( 0x02, "1000" ) PORT_DIPSETTING( 0x00, "5000" ) - PORT_DIPNAME( 0x04, 0x04, "Jackpot" ) PORT_DIPLOCATION("DIP2:3") // 累積彩金 + PORT_DIPNAME( 0x04, 0x04, "Jackpot" ) PORT_DIPLOCATION("DIP2:3") // 累積彩金 PORT_DIPSETTING( 0x00, "50" ) PORT_DIPSETTING( 0x04, "100" ) - PORT_DIPNAME( 0x18, 0x18, "Double Over / Round Bonus" ) PORT_DIPLOCATION("DIP2:4,5") + PORT_DIPNAME( 0x18, 0x18, "Double Over / Round Bonus" ) PORT_DIPLOCATION("DIP2:4,5") // 比倍破台/比倍贈分 PORT_DIPSETTING( 0x10, "100 / 10" ) PORT_DIPSETTING( 0x18, "200 / 10" ) PORT_DIPSETTING( 0x08, "300 / 15" ) PORT_DIPSETTING( 0x00, "500 / 25" ) - PORT_DIPNAME( 0xe0, 0xe0, "Cash Out Per Credit" ) PORT_DIPLOCATION("DIP2:6,7,8") // 彩票單位 (sets coins/tickets paid out per credit in cash out mode) - PORT_DIPSETTING( 0xe0, "1" ) - PORT_DIPSETTING( 0xc0, "2" ) - PORT_DIPSETTING( 0xa0, "5" ) - PORT_DIPSETTING( 0x80, "6" ) - PORT_DIPSETTING( 0x60, "7" ) - PORT_DIPSETTING( 0x40, "8" ) - PORT_DIPSETTING( 0x20, "9" ) - PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0xe0, 0xe0, "Payout Unit" ) PORT_DIPLOCATION("DIP2:6,7,8") // 彩票單位 (sets coins/tickets paid out per credit in cash out mode) + PORT_DIPSETTING( 0xe0, DEF_STR(1C_1C) ) + PORT_DIPSETTING( 0xc0, DEF_STR(2C_1C) ) + PORT_DIPSETTING( 0xa0, DEF_STR(5C_1C) ) + PORT_DIPSETTING( 0x80, DEF_STR(6C_1C) ) + PORT_DIPSETTING( 0x60, DEF_STR(7C_1C) ) + PORT_DIPSETTING( 0x40, DEF_STR(8C_1C) ) + PORT_DIPSETTING( 0x20, DEF_STR(9C_1C) ) + PORT_DIPSETTING( 0x00, "10 Coins/1 Credit" ) PORT_MODIFY("DSW4") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DIP1:1") // not displayed in test mode - PORT_DIPSETTING( 0x01, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x02, 0x00, "Double-Up Game" ) PORT_DIPLOCATION("DIP1:2") // 比倍遊戲 - PORT_DIPSETTING( 0x02, DEF_STR( No ) ) // 無 - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x04, 0x04, "Credit Mode" ) PORT_DIPLOCATION("DIP1:3") // 進分方式 (sets coin input function) - PORT_DIPSETTING( 0x04, "Key-In" ) // 開分 - PORT_DIPSETTING( 0x00, "Coin" ) // 投幣 - PORT_DIPNAME( 0x08, 0x08, "Payout Mode" ) PORT_DIPLOCATION("DIP1:4") // 退分方式 - PORT_DIPSETTING( 0x08, "Key-Out" ) // 洗分 (Pay Out key pays out score at rate set for coin input) - PORT_DIPSETTING( 0x00, "Cash Out" ) // 退幣 (Pay Out key pays out score at cash out rate) - 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_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 - PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 - PORT_DIPSETTING( 0x00, "Mechanical" ) // 機械式 - PORT_DIPSETTING( 0x40, "Electronic" ) // 電子式 - PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP1:8" ) // not displayed in test mode + PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP1:1") // not displayed in test mode + PORT_DIPSETTING( 0x01, DEF_STR(Off) ) + PORT_DIPSETTING( 0x00, DEF_STR(On) ) + PORT_DIPNAME( 0x02, 0x00, "Double Up Game" ) PORT_DIPLOCATION("DIP1:2") // 比倍遊戲 + PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x04, 0x04, "Credit Mode" ) PORT_DIPLOCATION("DIP1:3") // 進分方式 (sets coin input function) + PORT_DIPSETTING( 0x04, "Key-In" ) // 開分 + PORT_DIPSETTING( 0x00, "Coin" ) // 投幣 + PORT_DIPNAME( 0x08, 0x08, "Payout Mode" ) PORT_DIPLOCATION("DIP1:4") // 退分方式 + PORT_DIPSETTING( 0x08, "Key-Out" ) // 洗分 (Pay Out key pays out score at rate set for coin input) + PORT_DIPSETTING( 0x00, "Return Coins" ) // 退幣 (Pay Out key pays out score at cash out rate) + 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_DIPSETTING( 0x20, DEF_STR( No ) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // 有 + PORT_DIPNAME( 0x40, 0x40, "Coin Acceptor" ) PORT_DIPLOCATION("DIP1:7") // 投幣器 + PORT_DIPSETTING( 0x00, "Mechanical" ) // 機械式 + PORT_DIPSETTING( 0x40, "Electronic" ) // 電子式 + PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DIP1:8" ) // not displayed in test mode // Credit Mode Payout Mode | Pay Out Rate Key Out Rate // -----------------------------+------------------------------ @@ -1089,22 +1095,22 @@ INPUT_PORTS_END static INPUT_PORTS_START( xyddzhh ) PORT_START("INPUTS") // Entertainment controls: - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // choose - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH,IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(bmcpokr_state::hopper_r)) // TODO: verify? - PORT_SERVICE_NO_TOGGLE( 0x0400, IP_ACTIVE_LOW ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // no effect in test mode - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // pass - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_O) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH,IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(bmcpokr_state::hopper_r)) + PORT_SERVICE_NO_TOGGLE( 0x0400, IP_ACTIVE_LOW ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // no effect in test mode + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // bet + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // pass + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) MAHJONG_KEYS_COMMON("DSW2", 0x01) @@ -1113,22 +1119,22 @@ static INPUT_PORTS_START( xyddzhh ) // Maximum Bet is fixed to 40 according to test mode (no DIP determines it) PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP1:1") - PORT_DIPSETTING( 0x01, DEF_STR(Off) ) - PORT_DIPSETTING( 0x00, DEF_STR(On) ) - PORT_DIPNAME( 0x02, 0x02, "Key-Out Rate" ) PORT_DIPLOCATION("DIP1:2") - PORT_DIPSETTING( 0x02, "Key-In Rate" ) - PORT_DIPSETTING( 0x00, DEF_STR(Coinage) ) - PORT_DIPNAME( 0x04, 0x04, "Return Coins" ) PORT_DIPLOCATION("DIP1:3") - PORT_DIPSETTING( 0x04, DEF_STR(No) ) - PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) - PORT_DIPNAME( 0x08, 0x08, "Siren Sound" ) PORT_DIPLOCATION("DIP1:4") - PORT_DIPSETTING( 0x00, DEF_STR(Off) ) - PORT_DIPSETTING( 0x08, DEF_STR(On) ) - PORT_DIPNAME( 0x10, 0x10, "Auto Pass" ) PORT_DIPLOCATION("DIP1:5") - PORT_DIPSETTING( 0x00, DEF_STR(Off) ) - PORT_DIPSETTING( 0x10, DEF_STR(On) ) - PORT_DIPNAME( 0xe0, 0xe0, "Double-Up Game Jackpot" ) PORT_DIPLOCATION("DIP1:6,7,8") + PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP1:1") // 示範音樂 + PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x02, 0x02, "Key-Out Rate" ) PORT_DIPLOCATION("DIP1:2") // 洗分錶同 + PORT_DIPSETTING( 0x02, "Key-In Rate" ) // 開分 + PORT_DIPSETTING( 0x00, DEF_STR(Coinage) ) // 投幣 + PORT_DIPNAME( 0x04, 0x04, "Return Coins" ) PORT_DIPLOCATION("DIP1:3") // 退幣有無 + PORT_DIPSETTING( 0x04, DEF_STR(No) ) // 無 + PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) // 有 + PORT_DIPNAME( 0x08, 0x08, "Siren Sound" ) PORT_DIPLOCATION("DIP1:4") // 報警音效 + PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x08, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x10, 0x10, "Auto Pass" ) PORT_DIPLOCATION("DIP1:5") // 自動PASS + PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x10, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0xe0, 0xe0, "Double Up Game Jackpot" ) PORT_DIPLOCATION("DIP1:6,7,8") // 續玩破台 PORT_DIPSETTING( 0xc0, "5,000" ) PORT_DIPSETTING( 0xe0, "10,000" ) PORT_DIPSETTING( 0xa0, "15,000" ) @@ -1139,18 +1145,18 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x00, "50,000" ) PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x00, "Controls" ) PORT_DIPLOCATION("DIP2:1") - PORT_DIPSETTING( 0x01, "Mahjong" ) - PORT_DIPSETTING( 0x00, "Entertainment" ) - PORT_DIPNAME( 0x06, 0x06, "Double-Up Game Threshold" ) PORT_DIPLOCATION("DIP2:2,3") + PORT_DIPNAME( 0x01, 0x00, "Controls" ) PORT_DIPLOCATION("DIP2:1") // 版本 + PORT_DIPSETTING( 0x01, "Mahjong" ) // 麻將版 + PORT_DIPSETTING( 0x00, DEF_STR(Joystick) ) // 娛樂版 + PORT_DIPNAME( 0x06, 0x06, "Double Up Game Threshold" ) PORT_DIPLOCATION("DIP2:2,3") // 續玩過關 PORT_DIPSETTING( 0x06, "3000" ) PORT_DIPSETTING( 0x04, "4000" ) PORT_DIPSETTING( 0x02, "5000" ) PORT_DIPSETTING( 0x01, "6000" ) - PORT_DIPNAME( 0x08, 0x08, "Accumulated Bonus" ) PORT_DIPLOCATION("DIP2:4") + PORT_DIPNAME( 0x08, 0x08, "Accumulated Bonus" ) PORT_DIPLOCATION("DIP2:4") // 累積彩金 PORT_DIPSETTING( 0x08, "300" ) PORT_DIPSETTING( 0x00, "400" ) - PORT_DIPNAME( 0x70, 0x70, "Double-Up Game Payout Rate" ) PORT_DIPLOCATION("DIP2:5,6,7") + PORT_DIPNAME( 0x70, 0x70, "Double Up Game Payout Rate" ) PORT_DIPLOCATION("DIP2:5,6,7") // 續玩機率 PORT_DIPSETTING( 0x60, "92%" ) PORT_DIPSETTING( 0x50, "93%" ) PORT_DIPSETTING( 0x40, "94%" ) @@ -1159,12 +1165,12 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x20, "97%" ) PORT_DIPSETTING( 0x10, "98%" ) PORT_DIPSETTING( 0x00, "99%" ) - PORT_DIPNAME( 0x80, 0x80, "Double-Up Game" ) PORT_DIPLOCATION("DIP2:8") - PORT_DIPSETTING( 0x00, DEF_STR(Off) ) - PORT_DIPSETTING( 0x80, DEF_STR(On) ) + PORT_DIPNAME( 0x80, 0x80, "Double Up Game" ) PORT_DIPLOCATION("DIP2:8") // 續玩遊戲 + PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x80, DEF_STR(On) ) // 有 PORT_START("DSW3") - PORT_DIPNAME( 0x07, 0x07, DEF_STR(Coinage) ) PORT_DIPLOCATION("DIP3:1,2,3") + PORT_DIPNAME( 0x07, 0x07, DEF_STR(Coinage) ) PORT_DIPLOCATION("DIP3:1,2,3") // 投幣單位 PORT_DIPSETTING( 0x06, DEF_STR(1C_1C) ) PORT_DIPSETTING( 0x05, DEF_STR(1C_2C) ) PORT_DIPSETTING( 0x04, DEF_STR(1C_5C) ) @@ -1173,7 +1179,7 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x01, "1 Coin/50 Credits" ) PORT_DIPSETTING( 0x07, "1 Coin/100 Credits" ) PORT_DIPSETTING( 0x00, "1 Coin/200 Credits" ) - PORT_DIPNAME( 0x38, 0x38, "Key-In Rate" ) PORT_DIPLOCATION("DIP3:4,5,6") + PORT_DIPNAME( 0x38, 0x38, "Key-In Unit" ) PORT_DIPLOCATION("DIP3:4,5,6") // 開分單位 PORT_DIPSETTING( 0x30, "40" ) PORT_DIPSETTING( 0x28, "50" ) PORT_DIPSETTING( 0x38, "100" ) @@ -1182,15 +1188,15 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x10, "500" ) PORT_DIPSETTING( 0x08, "1000" ) PORT_DIPSETTING( 0x00, "2000" ) - PORT_DIPNAME( 0x40, 0x40, "Credit Limit" ) PORT_DIPLOCATION("DIP3:7") + PORT_DIPNAME( 0x40, 0x40, "Key-In Limit" ) PORT_DIPLOCATION("DIP3:7") // 開分限制 PORT_DIPSETTING( 0x00, "10,000" ) PORT_DIPSETTING( 0x40, "99,000" ) - PORT_DIPNAME( 0x80, 0x80, "Card Type" ) PORT_DIPLOCATION("DIP3:8") - PORT_DIPSETTING( 0x80, DEF_STR ( Normal ) ) - PORT_DIPSETTING( 0x00, "Graphics" ) + PORT_DIPNAME( 0x80, 0x80, "Card Type" ) PORT_DIPLOCATION("DIP3:8") // 牌型選項 + PORT_DIPSETTING( 0x80, DEF_STR(Normal) ) // 正常 + PORT_DIPSETTING( 0x00, "Graphics" ) // 圖型 PORT_START("DSW4") - PORT_DIPNAME( 0x07, 0x07, "Minimum Bet" ) PORT_DIPLOCATION("DIP4:1,2,3") + PORT_DIPNAME( 0x07, 0x07, "Minimum Bet" ) PORT_DIPLOCATION("DIP4:1,2,3") // 最小押分 PORT_DIPSETTING( 0x06, "1" ) PORT_DIPSETTING( 0x05, "2" ) PORT_DIPSETTING( 0x04, "3" ) @@ -1199,7 +1205,7 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x02, "15" ) PORT_DIPSETTING( 0x01, "20" ) PORT_DIPSETTING( 0x00, "40" ) - PORT_DIPNAME( 0x38, 0x38, "Payout Rate" ) PORT_DIPLOCATION("DIP4:4,5,6") + PORT_DIPNAME( 0x38, 0x38, "Payout Rate" ) PORT_DIPLOCATION("DIP4:4,5,6") // 遊戲機率 PORT_DIPSETTING( 0x30, "90%" ) PORT_DIPSETTING( 0x28, "91%" ) PORT_DIPSETTING( 0x20, "92%" ) @@ -1208,10 +1214,10 @@ static INPUT_PORTS_START( xyddzhh ) PORT_DIPSETTING( 0x10, "95%" ) PORT_DIPSETTING( 0x08, "96%" ) PORT_DIPSETTING( 0x00, "97%" ) - PORT_DIPNAME( 0x40, 0x40, "Market Setting" ) PORT_DIPLOCATION("DIP4:7") - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Jackpot" ) PORT_DIPLOCATION("DIP4:8") + PORT_DIPNAME( 0x40, 0x40, "Market Setting" ) PORT_DIPLOCATION("DIP4:7") // 炒場設定 + PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x40, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x80, 0x80, "Jackpot" ) PORT_DIPLOCATION("DIP4:8") // 系統破台 PORT_DIPSETTING( 0x00, "50,000" ) PORT_DIPSETTING( 0x80, "100,000" ) INPUT_PORTS_END diff --git a/src/mame/bmc/koftball.cpp b/src/mame/bmc/koftball.cpp index c986aa05b91..4c0b27894b4 100644 --- a/src/mame/bmc/koftball.cpp +++ b/src/mame/bmc/koftball.cpp @@ -7,14 +7,17 @@ King Of Football (c)1995 BMC preliminary driver by Tomasz Slanina TODO: -- lots of unknown writes / reads; -- one of the customs could contain a VIA6522-like core. bmc/bmcbowl.cpp uses the VIA6522 and the - accesses are similar; -- probably jxzh also supports the mahjong keyboard. Check if one of the dips enable it and where it - is read; -- better understanding of the koftball protection. +- Lots of unknown writes/reads. +- One of the customs could contain a VIA6522-like core. bmc/bmcbowl.cpp + uses the VIA6522 and the accesses are similar. +- jxzh and kaimenhu show a full mahjong keyboard in their key tests - is + this actually supported or is it vestigial? +- jxzh and kaimenhu bookkeeping menus do not clear the background. +- jxzh stops responding to inputs properly after winning a hand if + stripping sequences are enabled. +- jxzh last chance type A tiles are not visible. +- Better understanding of the koftball protection. --- MC68000P10 M28 (OKI 6295, next to ROM C9) @@ -22,7 +25,7 @@ BMC ADB40817(80 Pin PQFP - Google hits, but no datasheet or description) RAMDAC TRC1710-80PCA (Monolithic 256-word by 18bit Look-up Table & Triple Video DAC with 6-bit DACs) File 89C67 (Clone of YM2413. Next to 3.57954MHz OSC) OSC: 21.47727MHz & 3.57954MHz -2 8-way dipswitches +2 8-way DIP switches part # scratched 64 pin PLCC (soccer ball sticker over this chip ;-) ft5_v16_c5.u14 \ @@ -59,6 +62,37 @@ key-in unit 200 上分單位 key-in limit 5000 上分上限 credit limit 50000 得分上限 + +jxzh uses an unusual control scheme: +* use Start to draw a tile +* use Big (left) and Small (right) to select a tile to discard +* use Start to discard the selected tile +* Kan, Pon, Chi, Reach, Ron, Flip Flop and Bet function as expected in the main game +* use Big (left) and Small (right) to select a tile to exchange during "first chance" +* use Flip Flop to exchange the selected tile during "first chance" +* use Start to end "first chance" +* use Start to select a tile during "last chance" +* use Flip Flop to stake winnings on the double up game +* use Ron to take winnings + +kaimenhu appears to be just the first chance and double up games from +jxzh (i.e. like a draw poker game but with mahjong tiles and hands). + + +jxzh/kaimenhu test menu: + +pon input test 碰:按鍵測試 +kan graphics test 槓:圖型測試 +reach sound test 聽:音樂測試 +ron memory test 胡:記憶體測試 +chi DIP switch test 吃:DIP 測試 +big last hand test 大:前手牌測試 +test exit 離開 按《測試》 + + +kaimenhu has a full set of soft settings accessible from the bookeeping menu +(default password is Start eight times) + */ #include "emu.h" @@ -131,7 +165,7 @@ private: u8 m_gfx_ctrl = 0; u8 m_priority = 0; u8 m_backpen = 0; - std::unique_ptr<bitmap_ind16> m_pixbitmap; + bitmap_ind16 m_pixbitmap; u8 m_pixpal = 0; void irq_ack_w(u8 data); @@ -151,6 +185,7 @@ private: TIMER_DEVICE_CALLBACK_MEMBER(interrupt); + void common_mem(address_map &map) ATTR_COLD; void koftball_mem(address_map &map) ATTR_COLD; void jxzh_mem(address_map &map) ATTR_COLD; void kaimenhu_mem(address_map &map) ATTR_COLD; @@ -195,7 +230,7 @@ void koftball_state::video_start() m_tilemap[1]->set_transparent_pen(0); m_tilemap[3]->set_transparent_pen(0); - m_pixbitmap = std::make_unique<bitmap_ind16>(512, 256); + m_pixbitmap.allocate(512, 256); } // linear 512x256x4bpp @@ -247,13 +282,13 @@ u32 koftball_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c girl select after coin up prev screen prev screen over under 0x13 0x3a */ - m_pixbitmap->fill(0, cliprect); - draw_pixlayer(*m_pixbitmap, cliprect); + m_pixbitmap.fill(0, cliprect); + draw_pixlayer(m_pixbitmap, cliprect); bitmap.fill(m_backpen, cliprect); if (BIT(m_priority, 3)) - copyscrollbitmap_trans(bitmap, *m_pixbitmap, 0, 0, 0, 0, cliprect, 0); + copyscrollbitmap_trans(bitmap, m_pixbitmap, 0, 0, 0, 0, cliprect, 0); // TODO: or bit 1? if (BIT(m_gfx_ctrl, 5)) @@ -268,7 +303,7 @@ u32 koftball_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c } if (!BIT(m_priority, 3)) - copyscrollbitmap_trans(bitmap, *m_pixbitmap, 0, 0, 0, 0, cliprect, 0); + copyscrollbitmap_trans(bitmap, m_pixbitmap, 0, 0, 0, 0, cliprect, 0); return 0; } @@ -342,28 +377,25 @@ void koftball_state::kaimenhu_outputs_w(u8 data) // bit 7 always set? } -// FIXME: merge video maps -void koftball_state::koftball_mem(address_map &map) +void koftball_state::common_mem(address_map &map) { - map(0x000000, 0x01ffff).rom(); - map(0x220000, 0x22ffff).ram().share(m_main_ram); - map(0x260000, 0x260fff).ram().w(FUNC(koftball_state::videoram_w<0>)).share(m_videoram[0]); map(0x261000, 0x261fff).ram().w(FUNC(koftball_state::videoram_w<1>)).share(m_videoram[1]); map(0x262000, 0x262fff).ram().w(FUNC(koftball_state::videoram_w<2>)).share(m_videoram[2]); map(0x263000, 0x263fff).ram().w(FUNC(koftball_state::videoram_w<3>)).share(m_videoram[3]); + map(0x268000, 0x26ffff).ram(); map(0x280000, 0x29ffff).ram().share(m_pixram); + map(0x2a0007, 0x2a0007).w(FUNC(koftball_state::irq_ack_w)); map(0x2a0009, 0x2a0009).lw8(NAME([this] (u8 data) { m_irq_enable = data; })); map(0x2a000f, 0x2a000f).lw8(NAME([this] (u8 data) { m_priority = data; LOGGFX("GFX ctrl $2a000f (priority) %02x\n", data); })); map(0x2a0017, 0x2a0017).w(FUNC(koftball_state::pixpal_w)); map(0x2a0019, 0x2a0019).lw8(NAME([this] (u8 data) { m_backpen = data; LOGGFX("GFX ctrl $2a0019 (backpen) %02x\n", data); })); - map(0x2a001a, 0x2a001b).nopw(); - map(0x2a0000, 0x2a001f).r(FUNC(koftball_state::random_number_r)); + map(0x2b0000, 0x2b0001).portr("DSW"); - map(0x2d8000, 0x2d8001).r(FUNC(koftball_state::random_number_r)); + map(0x2da000, 0x2da003).w("ymsnd", FUNC(ym2413_device::write)).umask16(0xff00); map(0x2db001, 0x2db001).w("ramdac", FUNC(ramdac_device::index_w)); @@ -372,45 +404,43 @@ void koftball_state::koftball_mem(address_map &map) map(0x2db005, 0x2db005).w("ramdac", FUNC(ramdac_device::mask_w)); map(0x2dc000, 0x2dc000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x2f0000, 0x2f0003).portr("INPUTS"); - map(0x300001, 0x300001).w(FUNC(koftball_state::koftball_outputs_w)); + + map(0x2f0000, 0x2f0001).portr("INPUTS"); + map(0x320000, 0x320000).lw8(NAME([this] (u8 data) { m_gfx_ctrl = data; LOGGFX("GFX ctrl $320000 (layer enable) %02x\n", data); })); +} + +void koftball_state::koftball_mem(address_map &map) +{ + common_mem(map); + + map(0x000000, 0x01ffff).rom(); + map(0x220000, 0x22ffff).ram().share(m_main_ram); + + map(0x2a001a, 0x2a001b).nopw(); + map(0x2a0000, 0x2a001f).r(FUNC(koftball_state::random_number_r)); + map(0x2d8000, 0x2d8001).r(FUNC(koftball_state::random_number_r)); + + map(0x300001, 0x300001).w(FUNC(koftball_state::koftball_outputs_w)); + map(0x340000, 0x340001).r(FUNC(koftball_state::prot_r)); map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w)); } void koftball_state::jxzh_mem(address_map &map) { + common_mem(map); + map(0x000000, 0x03ffff).rom(); map(0x200000, 0x200fff).ram().share("nvram"); - map(0x260000, 0x260fff).ram().w(FUNC(koftball_state::videoram_w<0>)).share(m_videoram[0]); - map(0x261000, 0x261fff).ram().w(FUNC(koftball_state::videoram_w<1>)).share(m_videoram[1]); - map(0x262000, 0x262fff).ram().w(FUNC(koftball_state::videoram_w<2>)).share(m_videoram[2]); - map(0x263000, 0x263fff).ram().w(FUNC(koftball_state::videoram_w<3>)).share(m_videoram[3]); map(0x264b00, 0x264dff).ram(); // TODO: writes here at least at girl selection after coin up. Some kind of effect? - map(0x268000, 0x26ffff).ram(); - map(0x280000, 0x29ffff).ram().share(m_pixram); - map(0x2a0007, 0x2a0007).w(FUNC(koftball_state::irq_ack_w)); - map(0x2a0009, 0x2a0009).lw8(NAME([this] (u8 data) { m_irq_enable = data; })); - map(0x2a000f, 0x2a000f).lw8(NAME([this] (u8 data) { m_priority = data; LOGGFX("GFX ctrl $2a000f (priority) %02x\n", data); })); - map(0x2a0017, 0x2a0017).w(FUNC(koftball_state::pixpal_w)); - map(0x2a0019, 0x2a0019).lw8(NAME([this] (u8 data) { m_backpen = data; LOGGFX("GFX ctrl $2a0019 (backpen) %02x\n", data); })); map(0x2a001a, 0x2a001d).nopw(); map(0x2a0000, 0x2a001f).r(FUNC(koftball_state::random_number_r)); - map(0x2b0000, 0x2b0001).portr("DSW"); - map(0x2da000, 0x2da003).umask16(0xff00).w("ymsnd", FUNC(ym2413_device::write)); - - map(0x2db001, 0x2db001).w("ramdac", FUNC(ramdac_device::index_w)); - map(0x2db002, 0x2db003).nopr(); // reads here during some scene changes - map(0x2db003, 0x2db003).w("ramdac", FUNC(ramdac_device::pal_w)); - map(0x2db005, 0x2db005).w("ramdac", FUNC(ramdac_device::mask_w)); - map(0x2dc000, 0x2dc000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x2f0000, 0x2f0001).portr("INPUTS"); map(0x300001, 0x300001).w(FUNC(koftball_state::kaimenhu_outputs_w)); - map(0x320000, 0x320000).lw8(NAME([this] (u8 data) { m_gfx_ctrl = data; LOGGFX("GFX ctrl $320000 (layer enable) %02x\n", data); })); + map(0x340000, 0x340001).r(FUNC(koftball_state::prot_r)); map(0x360000, 0x360001).w(FUNC(koftball_state::prot_w)); map(0x380000, 0x380001).w(FUNC(koftball_state::prot_w)); @@ -509,16 +539,16 @@ static INPUT_PORTS_START( kaimenhu ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_NAME("%p Mahjong Ron / Take Score" ) // called take score (得分) in key test PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r)) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_SERVICE_NO_TOGGLE( 0x1000, IP_ACTIVE_LOW ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_NAME("%p Mahjong Small / Right") - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_NAME("%p Mahjong Big / Left") - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP) PORT_NAME("%p Mahjong Double Up / Change Tile") + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_NAME("%p Mahjong Small / Right") + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_NAME("%p Mahjong Big / Left") + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_NAME("%p Mahjong Flip Flop / Double Up" ) // called double up (比倍) in key test PORT_START("DSW") PORT_DIPNAME( 0x0001, 0x0001, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:8") @@ -542,7 +572,7 @@ static INPUT_PORTS_START( kaimenhu ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:2") PORT_DIPSETTING( 0x0040, DEF_STR(Off) ) PORT_DIPSETTING( 0x0000, DEF_STR(On) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPNAME( 0x0080, 0x0080, "Double Up Game" ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x0080, DEF_STR(Off) ) PORT_DIPSETTING( 0x0000, DEF_STR(On) ) PORT_DIPNAME( 0x0100, 0x0100, DEF_STR(Service_Mode) ) PORT_DIPLOCATION("SW2:8") @@ -580,6 +610,18 @@ static INPUT_PORTS_START( jxzh ) PORT_DIPSETTING( 0x0002, "1 2 4 8 12 16 24 32" ) PORT_DIPSETTING( 0x0001, "1 2 3 5 8 15 30 50" ) PORT_DIPSETTING( 0x0000, "1 2 3 5 10 25 50 100" ) + PORT_DIPNAME( 0x0040, 0x0040, "Last Chance Type" ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x0040, "A" ) // choose three of ten tiles + PORT_DIPSETTING( 0x0000, "B" ) // draw ten tiles + PORT_DIPNAME( 0x0400, 0x0400, "Nudity" ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x0400, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) + PORT_DIPNAME( 0x0800, 0x0800, "Auto Last Chance B" ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x0800, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // automatically draws tiles for last chance type B + PORT_DIPNAME( 0x2000, 0x0000, "Gal Voice" ) PORT_DIPLOCATION("SW2:3") + PORT_DIPSETTING( 0x2000, DEF_STR(Off) ) + PORT_DIPSETTING( 0x0000, DEF_STR(On) ) // calls discarded tiles INPUT_PORTS_END @@ -804,6 +846,6 @@ void koftball_state::init_koftball() } // anonymous namespace -GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "Zuqiu Wang - King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, jxzh, 0, jxzh, jxzh, koftball_state, empty_init, ROT0, "BMC", "Jinxiu Zhonghua", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1996, kaimenhu, jxzh, kaimenhu, kaimenhu, koftball_state, empty_init, ROT0, "BMC", "Kaimen Hu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "Zuqiu Wang - King of Football", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1996, jxzh, 0, jxzh, jxzh, koftball_state, empty_init, ROT0, "BMC", "Jinxiu Zhonghua", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +GAME( 1996, kaimenhu, 0, kaimenhu, kaimenhu, koftball_state, empty_init, ROT0, "BMC", "Kaimen Hu", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/capcom/cps2.cpp b/src/mame/capcom/cps2.cpp index 44c61e0a4e4..f7d6e36bdce 100644 --- a/src/mame/capcom/cps2.cpp +++ b/src/mame/capcom/cps2.cpp @@ -12893,17 +12893,17 @@ GAME( 2000, mmatrixj, mmatrix, cps2, cps2_2p1b, cps2_state, init_cps2, RO // Games released on CPS-2 hardware by Mitchell -GAME( 2000, mpang, 0, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Europe 001010)", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, mpangr1, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Europe 000925)", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, mpangu, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (USA 001010)", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, mpangj, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Japan 001011)", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, mpanga, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Asia 001010)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, pzloop2, 0, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Europe 010302)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, pzloop2j, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010226)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, pzloop2jr1, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010205)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, pzloop2jp, pzloop2, dead_cps2, pzloop2,cps2_state, init_pzloop2,ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010201 Publicity)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, choko, 0, cps2, choko, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, chokop, 0, dead_cps2, choko,cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820 Publicity)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mpang, 0, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Europe 001010)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mpangr1, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Europe 000925)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mpangu, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (USA 001010)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mpangj, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Japan 001011)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mpanga, mpang, cps2, cps2_2p1b, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Mighty! Pang (Asia 001010)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, pzloop2, 0, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Europe 010302)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, pzloop2j, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010226)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, pzloop2jr1, pzloop2, cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010205)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, pzloop2jp, pzloop2, dead_cps2, pzloop2, cps2_state, init_pzloop2, ROT0, "Mitchell (Capcom license)", "Puzz Loop 2 (Japan 010201 Publicity)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, choko, 0, cps2, choko, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, chokop, choko, dead_cps2, choko, cps2_state, init_cps2, ROT0, "Mitchell (Capcom license)", "Janpai Puzzle Choukou (Japan 010820 Publicity)", MACHINE_SUPPORTS_SAVE ) // Games released on CPS-2 hardware by Eighting/Raizing diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp index 45a2f96fba3..1d2297a4c1d 100644 --- a/src/mame/igs/igs_m027.cpp +++ b/src/mame/igs/igs_m027.cpp @@ -725,7 +725,7 @@ INPUT_PORTS_START( jking02 ) PORT_DIPNAME( 0x10, 0x10, "Password" ) PORT_DIPLOCATION("SW2:5") PORT_DIPSETTING( 0x10, DEF_STR(No) ) PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) - PORT_DIPNAME( 0x20, 0x20, "Double-Up Game" ) PORT_DIPLOCATION("SW2:6") + PORT_DIPNAME( 0x20, 0x20, "Double Up Game" ) PORT_DIPLOCATION("SW2:6") PORT_DIPSETTING( 0x20, DEF_STR(Off) ) PORT_DIPSETTING( 0x00, DEF_STR(On) ) PORT_DIPNAME( 0x40, 0x40, "Auto Stop" ) PORT_DIPLOCATION("SW2:7") @@ -1418,10 +1418,10 @@ INPUT_PORTS_START( oceanpar101us ) PORT_DIPNAME( 0x10, 0x10, "Auto Take" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x10, DEF_STR(No) ) PORT_DIPSETTING( 0x00, DEF_STR(Yes) ) - PORT_DIPNAME( 0x20, 0x20, "Double-Up Game" ) PORT_DIPLOCATION("SW1:6") + PORT_DIPNAME( 0x20, 0x20, "Double Up Game" ) PORT_DIPLOCATION("SW1:6") PORT_DIPSETTING( 0x00, DEF_STR(Off) ) PORT_DIPSETTING( 0x20, DEF_STR(On) ) - PORT_DIPNAME( 0xc0, 0xc0, "Double-Up Game Type" ) PORT_DIPLOCATION("SW1:7,8") + PORT_DIPNAME( 0xc0, 0xc0, "Double Up Game Type" ) PORT_DIPLOCATION("SW1:7,8") PORT_DIPSETTING( 0xc0, "Poker 1" ) PORT_DIPSETTING( 0x80, "Poker 2" ) PORT_DIPSETTING( 0x40, "Symbol" ) diff --git a/src/mame/misc/carrera.cpp b/src/mame/misc/carrera.cpp index 9e2bb3242db..3ad4b5be6d0 100644 --- a/src/mame/misc/carrera.cpp +++ b/src/mame/misc/carrera.cpp @@ -1,56 +1,117 @@ // license:BSD-3-Clause -// copyright-holders: David Haywood - -/* - -This is a simple 'Pairs' game called -Carrera or Bomberman by BS Electronics - - - -PCB Layout ----------- - -|----------------------------------------------| -| 22.1184MHz Z80 | -| ROM.IC1 | -|_ BATTERY ROM.IC22 | - | | - _| 6116 ROM.IC2 | -| | -| | -|J AY-3-8910 ROM.IC3 | -|A DSW1(8) | -|M | -|M DSW2(8) ROM.IC4 | -|A | -| DSW3(8) | -| ROM.IC5 | -|_ PROM.IC39 DSW4(8) | - | 6116 | - _| | -| HD6845 6116 | -|----------------------------------------------| -Notes: - Z80 @ 3.6864MHz [22.1184/6] - AY-3-8910 @ 1.8432MHz [22.1184/12] - - -Emulation Notes: - Corrupt Tile on the first R in Carrera? (unlikely to be a bug, HW is very simple..) - -TODO: -- Are colors 100% correct? Needs a reference to be sure. -- There are reel GFXs on the ROMs (near the end), left-over or there's a way to enable it? - Update: if you trigger a normal irq 0 instead of a NMI the game will change into a proper 8 liner game without inputs. Investigate on it... - Update 2: alantin, bsebmanbl, bsebmanbl2, drkseal start directly with the 8 liner game -- ncarrera has an undumped AT90S8515 MCU (8 bit AVR RISC core) - -*/ +// copyright-holders: David Haywood, Roberto Fresca, Grull Osgo + +/*********************************************************************** + + Carrera / Bomberman + by BS Electronics. + + Video slots stealth games with selectable bomberman or fruits themes. + The front game is normally a "memory" pairs game, where the objetive + is to clear the screen. + + You can change the tileset, the game title (Carrera/Bomberman), and + switch the type of game (amusement/gambling). + + Some sets don't allow the title change. + + + PCB Layout + ---------- + + |----------------------------------------------| + | 22.1184MHz Z80 | + | ROM.IC1 | + |_ BATTERY ROM.IC22 | + | | + _| 6116 ROM.IC2 | + | | + | | + |J AY-3-8910 ROM.IC3 | + |A DSW1(8) | + |M | + |M DSW2(8) ROM.IC4 | + |A | + | DSW3(8) | + | ROM.IC5 | + |_ PROM.IC39 DSW4(8) | + | 6116 | + _| | + | HD6845 6116 | + |----------------------------------------------| + + Notes: + Z80 @ 3.6864MHz [22.1184/6] + AY-3-8910 @ 1.8432MHz [22.1184/12] + + +************************************************************************ + + Technical notes: + ---------------- + + The two first sets (carrera and bsebman) have a "bug" in the title if + the NVRAM was created from zero. This "bug" is intended to see at first + sight if the game NVRAM was manipulated in some way. + + In fact, each boot the code paint the game title properly, and then + force the graphics bug if a special value hardcoded in NVRAM doesn't + match the expected. + + $1da3.......$1dd6 ; loops to paint the title/logo on screen. + + then... + + $1dd7 ld, a ($e300) 3a 00 e3 ; take the hardcoded value from NVRAM. + $1dda ld, ($f616), a 32 16 f6 ; place this value as tile index, + ; halfway the title top line ($f616), + ; creating the intended GFX bug. + + $1ddd ret c9 ; return from subroutine. + + + For other bootleg sets, if the hardcoded value doesn't match, they force + another tile index very close to the original, so is way less notorious + and only the technical trained people can see these minimal differences. + + Note: This behavior is by design and should not be interpreted as a software + defect. It allows operators to instantly identify units with reset or modified + NVRAM and maintains system integrity without preventing gameplay functionality. + + +************************************************************************ + + Updates: + + [2025-05] + + - Fix color bipolar PROM decode and palette calculation, + based on real games screenshots. + - Added NVRAM support for all games. + - Created default NVRAM for carrera and bsebman sets, + with harcoded critical values/registers needed to get + the games working. + - Workaround that fix the titles corruption for both + carrera and bsebman sets. + - Inputs and DIP switches. + - Fix alantin colors, based on the real game screenshots. + - Changed bsebman description to: + Carrera (Version 6.7) / Bomberman (Version 6.6) + - Added technical and game notes. + + + TODO: + + - Analyze the carrera/bomberman sets and rename them accordingly. + - ncarrera has an undumped AT90S8515 MCU (8 bit AVR RISC core) + + +***********************************************************************/ #include "emu.h" #include "cpu/z80/z80.h" +#include "machine/nvram.h" #include "sound/ay8910.h" #include "video/mc6845.h" @@ -88,10 +149,69 @@ private: }; +/************************************************* +* Video Hardware * +*************************************************/ + +uint32_t carrera_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + int count = 0; + + for (int y = 0; y < 32; y++) + { + for (int x = 0; x < 64; x++) + { + int tile = m_tileram[count & 0x7ff] | m_tileram[(count & 0x7ff) + 0x800] << 8; + + m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, tile, 0, 0, 0, x * 8, y * 8); + count++; + } + } + return 0; +} + +void carrera_state::palette(palette_device &palette) const +{ + uint8_t const *const color_prom = memregion("proms")->base(); + for (int i = 0; i < 0x20; ++i) + { + int bit0, bit1; + int const br_bit0 = BIT(color_prom[i], 6); + int const br_bit1 = BIT(color_prom[i], 7); + + bit0 = BIT(color_prom[i], 0); + bit1 = BIT(color_prom[i], 3); + int const b = 0x0e * br_bit1 + 0x1f * br_bit0 + 0x43 * bit0 + 0x8f * bit1; + bit0 = BIT(color_prom[i], 1); + bit1 = BIT(color_prom[i], 4); + int const g = 0x0e * br_bit1 + 0x1f * br_bit0 + 0x43 * bit0 + 0x8f * bit1; + bit0 = BIT(color_prom[i], 2); + bit1 = BIT(color_prom[i], 5); + int const r = 0x0e * br_bit1 + 0x1f * br_bit0 + 0x43 * bit0 + 0x8f * bit1; + + palette.set_pen_color(i, rgb_t(r, g, b)); + } +} + + +/************************************************* +* Read Write Handlers * +*************************************************/ + +uint8_t carrera_state::unknown_r() +{ + return machine().rand(); +} + + +/************************************************* +* Memory map information * +*************************************************/ + void carrera_state::prg_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0xe000, 0xe7ff).ram(); + map(0xe000, 0xe7ff).ram().share("nvram"); map(0xe800, 0xe800).w("crtc", FUNC(mc6845_device::address_w)); map(0xe801, 0xe801).w("crtc", FUNC(mc6845_device::register_w)); map(0xf000, 0xffff).ram().share(m_tileram); @@ -106,48 +226,35 @@ void carrera_state::io_map(address_map &map) map(0x03, 0x03).portr("IN3"); map(0x04, 0x04).portr("IN4"); map(0x05, 0x05).portr("IN5"); - map(0x06, 0x06).nopw(); // ? + map(0x06, 0x06).nopw(); // ? map(0x08, 0x09).w("aysnd", FUNC(ay8910_device::address_data_w)); } + +/************************************************* +* Input ports * +*************************************************/ + static INPUT_PORTS_START( carrera ) PORT_START("IN0") // Port 0 - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - // unused / unknown inputs, not dips - PORT_DIPNAME( 0x20, 0x20, "0" ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Master Reset") - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Up - Bet") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Down - Start") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Auto Start") // autoplay + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Master Reset") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_START("IN1") // Port 1 PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - // unused / unknown inputs, not dips - PORT_DIPNAME( 0x04, 0x04, "1" ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-3") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_D) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-6") PORT_CODE(KEYCODE_F) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Reset") // I suspect the 4 below are the 4xDSWs PORT_START("IN2") // Port 2 @@ -175,7 +282,7 @@ static INPUT_PORTS_START( carrera ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - + PORT_START("IN3") // Port 3 PORT_DIPNAME( 0x01, 0x01, "3" ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) @@ -203,58 +310,67 @@ static INPUT_PORTS_START( carrera ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("IN4") // Port 4 - PORT_DIPNAME( 0x01, 0x01, "4" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x07, 0x00, "Coinage B" ) PORT_DIPLOCATION("IN4:6,7,8") + PORT_DIPSETTING( 0x07, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPSETTING( 0x01, "20" ) + PORT_DIPSETTING( 0x02, "50" ) + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x04, "500" ) + PORT_DIPSETTING( 0x05, "1000" ) + PORT_DIPSETTING( 0x06, "1100" ) + PORT_DIPNAME( 0x08, 0x08, "Game Name" ) PORT_DIPLOCATION("IN4:5") + PORT_DIPSETTING( 0x08, "Bomber Man" ) + PORT_DIPSETTING( 0x00, "Carrera" ) + PORT_DIPNAME( 0x10, 0x10, "Bonus 10%" ) PORT_DIPLOCATION("IN4:4") + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x20, 0x20, "Key Out" ) PORT_DIPLOCATION("IN4:3") + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPSETTING( 0x20, "100" ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficult ) ) PORT_DIPLOCATION("IN4:2") + PORT_DIPSETTING( 0x40, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPNAME( 0x80, 0x80, "Max Bet" ) PORT_DIPLOCATION("IN4:1") + PORT_DIPSETTING( 0x80, "9" ) + PORT_DIPSETTING( 0x00, "5" ) PORT_START("IN5") // Port 5 - PORT_DIPNAME( 0x01, 0x01, "5" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "Playing Graphics" ) + PORT_DIPNAME( 0x07, 0x00, "Coinage A" ) PORT_DIPLOCATION("IN5:1,2,3") + PORT_DIPSETTING( 0x07, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPSETTING( 0x01, "20" ) + PORT_DIPSETTING( 0x02, "50" ) + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x04, "500" ) + PORT_DIPSETTING( 0x05, "1000" ) + PORT_DIPSETTING( 0x06, "1100" ) + PORT_DIPNAME( 0x08, 0x00, "Playing Graphics" ) PORT_DIPLOCATION("IN5:4") PORT_DIPSETTING( 0x08, "Bricks" ) PORT_DIPSETTING( 0x00, "Fruits" ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("IN5:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("IN5:6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Debug?" ) // displays numbers over the game area + + PORT_DIPNAME( 0x40, 0x40, "Game Mode" ) PORT_DIPLOCATION("IN5:7") + PORT_DIPSETTING( 0x40, "Gamble" ) + PORT_DIPSETTING( 0x00, "Amusement" ) + + // this one displays numbers over the game area + PORT_DIPNAME( 0x80, 0x80, "Debug?" ) PORT_DIPLOCATION("IN5:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END + +/************************************************* +* Graphics Layouts * +*************************************************/ + static const gfx_layout tiles8x8_layout = { 8,8, @@ -266,55 +382,19 @@ static const gfx_layout tiles8x8_layout = 8*8 }; + +/************************************************* +* Graphics Decode Information * +*************************************************/ + static GFXDECODE_START( gfx_carrera ) GFXDECODE_ENTRY( "tiles", 0, tiles8x8_layout, 0, 1 ) GFXDECODE_END -uint32_t carrera_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - int count = 0; - - for (int y = 0; y < 32; y++) - { - for (int x = 0; x < 64; x++) - { - int tile = m_tileram[count & 0x7ff] | m_tileram[(count & 0x7ff) + 0x800] << 8; - - m_gfxdecode->gfx(0)->opaque(bitmap, cliprect, tile, 0, 0, 0, x * 8, y * 8); - count++; - } - } - return 0; -} - -uint8_t carrera_state::unknown_r() -{ - return machine().rand(); -} - -void carrera_state::palette(palette_device &palette) const -{ - uint8_t const *const color_prom = memregion("proms")->base(); - for (int i = 0; i < 0x20; ++i) - { - int bit0, bit1; - int const br_bit0 = BIT(color_prom[i], 6); - int const br_bit1 = BIT(color_prom[i], 7); - - bit0 = BIT(color_prom[i], 0); - bit1 = BIT(color_prom[i], 3); - int const b = 0x0e * br_bit0 + 0x1f * br_bit1 + 0x43 * bit0 + 0x8f * bit1; - bit0 = BIT(color_prom[i], 1); - bit1 = BIT(color_prom[i], 4); - int const g = 0x0e * br_bit0 + 0x1f * br_bit1 + 0x43 * bit0 + 0x8f * bit1; - bit0 = BIT(color_prom[i], 2); - bit1 = BIT(color_prom[i], 5); - int const r = 0x0e * br_bit0 + 0x1f * br_bit1 + 0x43 * bit0 + 0x8f * bit1; - - palette.set_pen_color(i, rgb_t(r, g, b)); - } -} +/************************************************* +* Machine Drivers * +*************************************************/ void carrera_state::carrera(machine_config &config) { @@ -325,10 +405,11 @@ void carrera_state::carrera(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &carrera_state::prg_map); m_maincpu->set_addrmap(AS_IO, &carrera_state::io_map); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(512, 256); screen.set_visarea_full(); screen.set_screen_update(FUNC(carrera_state::screen_update)); @@ -353,6 +434,10 @@ void carrera_state::carrera(machine_config &config) } +/************************************************* +* ROM Load * +*************************************************/ + ROM_START( carrera ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(2385b9c8) SHA1(12d4397779e074096fbb23b114985f104366b79c) ) @@ -364,6 +449,9 @@ ROM_START( carrera ) ROM_LOAD( "27512.ic4", 0x30000, 0x10000, CRC(97433f36) SHA1(39f3c6b76ad540693682832aba6e4fc400ca3753) ) ROM_LOAD( "27512.ic5", 0x40000, 0x10000, CRC(ffa75920) SHA1(aa5619f5aabcdfa250bb24bcad101a8c512a1776) ) + ROM_REGION( 0x800, "nvram", 0 ) // default NVRAM + ROM_LOAD( "carrera_nvram.bin", 0x0000, 0x0800, CRC(b2ac3ddd) SHA1(22886fba71badbdfa754489057889b5326bbaf78) ) + ROM_REGION( 0x20, "proms", 0 ) ROM_LOAD( "82s123.ic39", 0x00, 0x20, CRC(af16359f) SHA1(1ff5c9d7807e52be09c0ded56fb68a47e41b3fcf) ) ROM_END @@ -379,15 +467,18 @@ ROM_START( bsebman ) ROM_LOAD( "ic4", 0x30000, 0x10000, CRC(6b569989) SHA1(e00263fae310094ad5119e3a9673fb342f643ddc) ) ROM_LOAD( "ic5", 0x40000, 0x10000, CRC(21635791) SHA1(514078694269582c33fb7dddd6171089f9e21ee2) ) + ROM_REGION( 0x800, "nvram", 0 ) // default NVRAM + ROM_LOAD( "carrera_nvram.bin", 0x0000, 0x0800, CRC(b2ac3ddd) SHA1(22886fba71badbdfa754489057889b5326bbaf78) ) + ROM_REGION( 0x20, "proms", 0 ) ROM_LOAD( "am27s19.ic39", 0x00, 0x20, CRC(af16359f) SHA1(1ff5c9d7807e52be09c0ded56fb68a47e41b3fcf) ) ROM_END ROM_START( bsebmanbl ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(7b896b33) SHA1(841d5c7853e18109b74cad44c9f0d91398add146) ) // SLDH + ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(7b896b33) SHA1(841d5c7853e18109b74cad44c9f0d91398add146) ) // SLDH - ROM_REGION( 0x50000, "tiles", 0 ) // still has BS GFX + ROM_REGION( 0x50000, "tiles", 0 ) // still has BS GFX ROM_LOAD( "27512.ic1", 0x00000, 0x10000, CRC(a16e914e) SHA1(09f2271f193a7bffd62ef6e428ecbf9aa1154860) ) ROM_LOAD( "27512.ic2", 0x10000, 0x10000, CRC(147036a5) SHA1(34b4818fe61c5b13220b0a2001987b68b655b2cb) ) ROM_LOAD( "27512.ic3", 0x20000, 0x10000, CRC(920eee0e) SHA1(85e6d5292b751c57c64d17858bd00292356599e3) ) @@ -399,10 +490,10 @@ ROM_START( bsebmanbl ) ROM_END ROM_START( bsebmanbl2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) // has Carrera, Avraam and Ballas strings + ROM_REGION( 0x10000, "maincpu", 0 ) // has Carrera, Avraam and Ballas strings ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(ca2c8962) SHA1(140a217bb0365ec55116ba483208bdf1d820a7af) ) - ROM_REGION( 0x50000, "tiles", 0 ) // hacked J.T. GFX instead of BS + ROM_REGION( 0x50000, "tiles", 0 ) // hacked J.T. GFX instead of BS ROM_LOAD( "27512.ic1", 0x00000, 0x10000, CRC(65ad616a) SHA1(e87d6d187ec5c99628d767a9720dd9d634e39c2d) ) ROM_LOAD( "27512.ic2", 0x10000, 0x10000, CRC(64004dcb) SHA1(f9af56035f00d3d914c8e83e941762cb6153fc16) ) ROM_LOAD( "27512.ic3", 0x20000, 0x10000, CRC(c6e0a838) SHA1(e30d0f28845f331839afc44fb7358be72d2a88cb) ) @@ -415,24 +506,24 @@ ROM_END ROM_START( alantin ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "alpro.ic22", 0x00000, 0x10000, CRC(1eb97b31) SHA1(7097cf344734a2b553356f9b9fd6453e584a6e3f) ) // 27512 + ROM_LOAD( "alpro.ic22", 0x00000, 0x10000, CRC(1eb97b31) SHA1(7097cf344734a2b553356f9b9fd6453e584a6e3f) ) // 27512 - ROM_REGION( 0x50000, "tiles", 0 ) // still has BS GFX + ROM_REGION( 0x50000, "tiles", 0 ) // still has BS GFX ROM_LOAD( "alantin1.ic1", 0x00000, 0x10000, CRC(feb49cfd) SHA1(696683375c832b4cd6db9eef0edf4919b90c97ef) ) ROM_LOAD( "alantin2.ic2", 0x10000, 0x10000, CRC(e79da4b9) SHA1(a80c5f6431fc755645a0c8cd0cb290669f0cbada) ) ROM_LOAD( "alantin3.ic3", 0x20000, 0x10000, CRC(73d7c748) SHA1(bf688b8f506859ed3c514915676b13cecfec0a81) ) ROM_LOAD( "alantin4.ic4", 0x30000, 0x10000, CRC(6a061afd) SHA1(f6d736bd284e97ab915adb249c371617daa02a36) ) ROM_LOAD( "alantin5.ic5", 0x40000, 0x10000, CRC(35d8fb1b) SHA1(5d7ff8089e16ebb792543eeb9cc682f9f5eba6fe) ) - ROM_REGION( 0x20, "proms", 0 ) - ROM_LOAD( "82s123.ic39", 0x00, 0x20, CRC(5b0e598f) SHA1(99a8e80229d684f2083634ae2d96bf1d4f13677c) ) + ROM_REGION( 0x20, "proms", 0 ) // swapping bytes through a driver init has no palette response. + ROM_LOAD16_WORD_SWAP( "82s123.ic39", 0x00, 0x20, CRC(5b0e598f) SHA1(99a8e80229d684f2083634ae2d96bf1d4f13677c) ) ROM_END ROM_START( drkseal ) - ROM_REGION( 0x10000, "maincpu", 0 ) // still shows Alantin and Avraam strings - ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(8a1732e5) SHA1(191de15d0ccf439991e3c0c258cbfeb79ef19002) ) // 1xxxxxxxxxxxxxxx = 0xFF + ROM_REGION( 0x10000, "maincpu", 0 ) // still shows Alantin and Avraam strings + ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(8a1732e5) SHA1(191de15d0ccf439991e3c0c258cbfeb79ef19002) ) // 1xxxxxxxxxxxxxxx = 0xFF - ROM_REGION( 0x50000, "tiles", 0 ) // shows Vegas copyright + ROM_REGION( 0x50000, "tiles", 0 ) // shows Vegas copyright ROM_LOAD( "27512.ic1", 0x00000, 0x10000, CRC(fd3b6bbc) SHA1(b1fe09772a5d9a07077038244517fc7169266893) ) ROM_LOAD( "27512.ic2", 0x10000, 0x10000, CRC(d3a048e3) SHA1(687d58b84ca5985f51755b09c8a8b2ef68d16399) ) ROM_LOAD( "27512.ic3", 0x20000, 0x10000, CRC(50b8f9ee) SHA1(4f31e36eb54fde40e409f0ac18bf87126174be33) ) @@ -443,16 +534,17 @@ ROM_START( drkseal ) ROM_LOAD( "82s123.ic39", 0x00, 0x20, CRC(03aadf73) SHA1(e5baf8c5e7276eb207357e4cbb694c75e8caab6a) ) ROM_END -// this set uses a newer 'TYPE C-2000' board with a 'Rania Original 2000 Type 8515' riser board (the Z80 and MC6845 have been moved here along with a AT90S8515 MCU) +// this set uses a newer 'TYPE C-2000' board with a 'Rania Original 2000 Type 8515' riser board +// (the Z80 and MC6845 have been moved here along with a AT90S8515 MCU) ROM_START( ncarrera ) - ROM_REGION( 0x10000, "maincpu", 0 ) // has 2001, Mpampis and Avraam strings - ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(3ec2dbca) SHA1(896fbccaf844c1fa5861b176c09e4a3707b3524f) ) // 1xxxxxxxxxxxxxxx = 0xFF + ROM_REGION( 0x10000, "maincpu", 0 ) // has 2001, Mpampis and Avraam strings + ROM_LOAD( "27512.ic22", 0x00000, 0x10000, CRC(3ec2dbca) SHA1(896fbccaf844c1fa5861b176c09e4a3707b3524f) ) // 1xxxxxxxxxxxxxxx = 0xFF ROM_REGION( 0x2200, "mcu", 0 ) ROM_LOAD( "internal_eeprom", 0x0000, 0x0200, NO_DUMP ) ROM_LOAD( "internal_flash", 0x0200, 0x2000, NO_DUMP ) - ROM_REGION( 0x50000, "tiles", 0 ) // has both New Carrera and New Bomberman GFX + ROM_REGION( 0x50000, "tiles", 0 ) // has both New Carrera and New Bomberman GFX ROM_LOAD( "27512.ic1", 0x00000, 0x10000, CRC(dbec54c7) SHA1(ca7e54c198ca8abeffba1b323a514678384c35f9) ) ROM_LOAD( "27512.ic2", 0x10000, 0x10000, CRC(8e8c2b6d) SHA1(001121e0b91d8e0efdc3f5f99c43e1751b4be758) ) ROM_LOAD( "27512.ic3", 0x20000, 0x10000, CRC(ac66cda8) SHA1(65fae21de9f9727c5d8198ff57b27d703a7518fc) ) @@ -466,10 +558,15 @@ ROM_END } // anonymous namespace -GAME( 19??, carrera, 0, carrera, carrera, carrera_state, empty_init, ROT0, "BS Electronics", "Carrera (Version 6.7)", MACHINE_SUPPORTS_SAVE ) -GAME( 19??, bsebman, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "BS Electronics", "Bomberman (Version 6.6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1999, bsebmanbl, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Ballas / Avraam)", "Bomberman (Version 6.6, Avraam bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs verifying of inputs -GAME( 1999, bsebmanbl2, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (J.T.)", "Bomberman (Version 6.6, J.T. bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs verifying of inputs -GAME( 1999, alantin, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Robert / Avraam)", "Alantin - Aladdin's Magic Lamp", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs verifying of inputs -GAME( 1999, drkseal, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Vegas)", "Dark Seal (8-liner)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs verifying of inputs -GAME( 2001, ncarrera, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (J.T.)", "New Carrera - Version 2000", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs MCU dump +/********************************************* +* Game Drivers * +*********************************************/ + +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS +GAME( 19??, carrera, 0, carrera, carrera, carrera_state, empty_init, ROT0, "BS Electronics", "Carrera (Version 6.7)", MACHINE_SUPPORTS_SAVE ) +GAME( 19??, bsebman, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "BS Electronics", "Carrera (Version 6.7) / Bomberman (Version 6.6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, bsebmanbl, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Ballas / Avraam)", "Bomberman (Version 6.6, Avraam bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, bsebmanbl2, carrera, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (J.T.)", "Bomberman (Version 6.6, J.T. bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, alantin, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Robert / Avraam)", "Alantin - Aladdin's Magic Lamp", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, drkseal, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (Vegas)", "Dark Seal (8-liner)", MACHINE_SUPPORTS_SAVE ) +GAME( 2001, ncarrera, 0, carrera, carrera, carrera_state, empty_init, ROT0, "bootleg (J.T.)", "New Carrera - Version 2000", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs MCU dump diff --git a/src/mame/misc/gms.cpp b/src/mame/misc/gms.cpp index c35e44609ca..c5271b4215d 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -131,6 +131,7 @@ public: , m_oki(*this, "oki") , m_ymsnd(*this, "ymsnd") , m_dsw(*this, "DSW%u", 1U) + , m_key(*this, "KEY%u", 0U) { } @@ -150,6 +151,8 @@ public: void init_sscs() ATTR_COLD; void init_super555() ATTR_COLD; + template <unsigned Shift> ioport_value keyboard_r(); + protected: virtual void video_start() override ATTR_COLD; @@ -165,6 +168,7 @@ protected: required_device<okim6295_device> m_oki; optional_device<ym2151_device> m_ymsnd; optional_ioport_array<4> m_dsw; + optional_ioport_array<5> m_key; uint16_t m_reels_toggle = 0; uint16_t m_tilebank = 0; @@ -225,6 +229,19 @@ private: TILE_GET_INFO_MEMBER(get_tile1_info); }; +template <unsigned Shift> +ioport_value gms_2layers_state::keyboard_r() +{ + unsigned const select = bitswap<5>(m_input_matrix, 6, 1, 5, 0, 4); + ioport_value result = 0x3f; + for (unsigned i = 0; 5 > i; ++i) + { + if (BIT(select, i)) + result &= m_key[i]->read(); + } + return result >> Shift; +} + uint16_t gms_2layers_state::unk_r() { return machine().rand(); @@ -1344,46 +1361,102 @@ static INPUT_PORTS_START( baile ) INPUT_PORTS_END static INPUT_PORTS_START( yyhm ) - PORT_INCLUDE( sc2in1 ) - - PORT_MODIFY("IN1") // TODO: likely incomplete - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + // 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) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x0080, EQUALS, 0x0000) PORT_SERVICE_NO_TOGGLE(0x02, IP_ACTIVE_LOW) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - 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_UNKNOWN ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) // also used to select in test mode - 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 ) + 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) - // Only 1 8-DIP bank on PCB. Dips' effects as per test mode. - PORT_MODIFY("DSW1") - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Test ) ) 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_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:3") - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, "Scoring Type" ) PORT_DIPLOCATION("SW1:4") - PORT_DIPSETTING( 0x0000, "Mahjong Tile Scoring" ) - PORT_DIPSETTING( 0x0008, "Numeric Scoring" ) + 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_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_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0002, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:3") // 示範音樂 + PORT_DIPSETTING( 0x0000, DEF_STR(Off) ) // 無 + PORT_DIPSETTING( 0x0004, DEF_STR(On) ) // 有 + PORT_DIPNAME( 0x0008, 0x0008, "Score Display" ) PORT_DIPLOCATION("SW1:4") // 計分方式 + PORT_DIPSETTING( 0x0008, "Numbers" ) // 數字計分 + PORT_DIPSETTING( 0x0000, "Circle Tiles" ) // 筒子計分 PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW1:5") // No effect listed in test mode PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW1:6") // " PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW1:7") // " - PORT_DIPNAME( 0x0080, 0x0000, "Connector" ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x0000, "Joystick" ) - PORT_DIPSETTING( 0x0080, "Mahjong" ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR(Controls) ) PORT_DIPLOCATION("SW1:8") // 操作方式 + PORT_DIPSETTING( 0x0080, "Mahjong" ) // 鍵盤 + PORT_DIPSETTING( 0x0000, DEF_STR(Joystick) ) // 搖桿 INPUT_PORTS_END static INPUT_PORTS_START( ballch ) |