diff options
author | 2020-10-07 19:32:25 +0700 | |
---|---|---|
committer | 2020-10-07 19:32:25 +0700 | |
commit | a9844643c461ab4341feecfe76f6a5329c05cc76 (patch) | |
tree | 02cbe25c5544e401a962bd7f45353850e2d4396e | |
parent | 088cf0ad1995d29546d434f607015f141debf588 (diff) |
ns32081: movif bug fixes
* fixed byte-sized operand case
* fixed sign extension
-rw-r--r-- | src/devices/machine/ns32081.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/devices/machine/ns32081.cpp b/src/devices/machine/ns32081.cpp index c7a231a6d59..c12972fc21e 100644 --- a/src/devices/machine/ns32081.cpp +++ b/src/devices/machine/ns32081.cpp @@ -206,7 +206,7 @@ void ns32081_device::write_op(u16 data) switch ((m_opword >> 3) & 7) { case 0: // movif - m_op[0].expected = size + 1; + m_op[0].expected = (size == SIZE_B) ? 2 : (size + 1); m_op[2].expected = f_length; break; case 1: // lfsr @@ -327,12 +327,19 @@ void ns32081_device::execute() // MOVif src,dest // gen,gen // read.i,write.f - if (single) - m_op[2].value = i32_to_f32(m_op[0].value).v; - else - m_op[2].value = i32_to_f64(m_op[0].value).v; - m_op[2].expected = f_length; - m_tcy = 53; + { + s32 const src = + (size == SIZE_D) ? s32(m_op[0].value) : + (size == SIZE_W) ? s16(m_op[0].value) : + s8(m_op[0].value); + + if (single) + m_op[2].value = i32_to_f32(src).v; + else + m_op[2].value = i32_to_f64(src).v; + m_op[2].expected = f_length; + m_tcy = 53; + } break; case 1: // LFSR src |