summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Patrick Mackinlay <pmackinlay@hotmail.com>2020-10-07 19:32:25 +0700
committer Patrick Mackinlay <pmackinlay@hotmail.com>2020-10-07 19:32:25 +0700
commita9844643c461ab4341feecfe76f6a5329c05cc76 (patch)
tree02cbe25c5544e401a962bd7f45353850e2d4396e /src
parent088cf0ad1995d29546d434f607015f141debf588 (diff)
ns32081: movif bug fixes
* fixed byte-sized operand case * fixed sign extension
Diffstat (limited to 'src')
-rw-r--r--src/devices/machine/ns32081.cpp21
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