summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/upd7810/upd7810_opcodes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/upd7810/upd7810_opcodes.cpp')
-rw-r--r--src/devices/cpu/upd7810/upd7810_opcodes.cpp125
1 files changed, 30 insertions, 95 deletions
diff --git a/src/devices/cpu/upd7810/upd7810_opcodes.cpp b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
index dd610a40ff1..a737630acb9 100644
--- a/src/devices/cpu/upd7810/upd7810_opcodes.cpp
+++ b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
@@ -8126,14 +8126,13 @@ void upd7810_device::MOV_L_A()
void upd7810_device::INRW_wa()
{
PAIR ea = m_va;
- uint8_t tmp, m;
-
RDOPARG( ea.b.l );
- m = RM( ea.d );
- tmp = m + 1;
- ZHC_ADD( tmp, m, 0 );
- WM( ea.d, tmp );
- SKIP_CY;
+ uint8_t m = RM( ea.d ) + 1;
+ WM( ea.d, m );
+
+ if (m == 0)
+ PSW |= SK;
+ SET_Z(m);
}
/* 21: 0010 0001 */
@@ -8232,14 +8231,13 @@ void upd7810_device::LDAX_Hm()
void upd7810_device::DCRW_wa()
{
PAIR ea = m_va;
- uint8_t tmp, m;
-
RDOPARG( ea.b.l );
- m = RM( ea.d );
- tmp = m - 1;
- ZHC_SUB( tmp, m, 0 );
- WM( ea.d, tmp );
- SKIP_CY;
+ uint8_t m = RM( ea.d ) - 1;
+ WM( ea.d, m );
+
+ if (m == 0xff)
+ PSW |= SK;
+ SET_Z(m);
}
/* 31: 0011 0001 */
@@ -8368,28 +8366,25 @@ void upd7810_device::CALL_w()
/* 41: 0100 0001 */
void upd7810_device::INR_A()
{
- uint8_t tmp = A + 1;
- ZHC_ADD( tmp, A, 0 );
- A = tmp;
- SKIP_CY;
+ if (++A == 0)
+ PSW |= SK;
+ SET_Z(A);
}
/* 42: 0100 0010 */
void upd7810_device::INR_B()
{
- uint8_t tmp = B + 1;
- ZHC_ADD( tmp, B, 0 );
- B = tmp;
- SKIP_CY;
+ if (++B == 0)
+ PSW |= SK;
+ SET_Z(B);
}
/* 43: 0100 0011 */
void upd7810_device::INR_C()
{
- uint8_t tmp = C + 1;
- ZHC_ADD( tmp, C, 0 );
- C = tmp;
- SKIP_CY;
+ if (++C == 0)
+ PSW |= SK;
+ SET_Z(C);
}
/* 44: 0100 0100 llll llll hhhh hhhh */
@@ -8490,28 +8485,25 @@ void upd7810_device::EXH()
/* 51: 0101 0001 */
void upd7810_device::DCR_A()
{
- uint8_t tmp = A - 1;
- ZHC_SUB( tmp, A, 0 );
- A = tmp;
- SKIP_CY;
+ if (--A == 0xff)
+ PSW |= SK;
+ SET_Z(A);
}
/* 52: 0101 0010 */
void upd7810_device::DCR_B()
{
- uint8_t tmp = B - 1;
- ZHC_SUB( tmp, B, 0 );
- B = tmp;
- SKIP_CY;
+ if (--B == 0xff)
+ PSW |= SK;
+ SET_Z(B);
}
/* 53: 0101 0011 */
void upd7810_device::DCR_C()
{
- uint8_t tmp = C - 1;
- ZHC_SUB( tmp, C, 0 );
- C = tmp;
- SKIP_CY;
+ if (--C == 0xff)
+ PSW |= SK;
+ SET_Z(C);
}
/* 54: 0101 0100 llll llll hhhh hhhh */
@@ -9369,63 +9361,6 @@ void upd7810_device::CALT_7801()
PCH=RM(w.w.l+1);
}
-/* DCR(W) and INR(W) instructions do not modify the CY register on at least 78c05 and 78c06 */
-void upd7810_device::DCR_A_7801()
-{
- uint32_t old_CY = PSW & CY;
- DCR_A();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::DCR_B_7801()
-{
- uint32_t old_CY = PSW & CY;
- DCR_B();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::DCR_C_7801()
-{
- uint32_t old_CY = PSW & CY;
- DCR_C();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::DCRW_wa_7801()
-{
- uint32_t old_CY = PSW & CY;
- DCRW_wa();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::INR_A_7801()
-{
- uint32_t old_CY = PSW & CY;
- INR_A();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::INR_B_7801()
-{
- uint32_t old_CY = PSW & CY;
- INR_B();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::INR_C_7801()
-{
- uint32_t old_CY = PSW & CY;
- INR_C();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
-void upd7810_device::INRW_wa_7801()
-{
- uint32_t old_CY = PSW & CY;
- INRW_wa();
- PSW = ( PSW & ~CY ) | old_CY;
-}
-
void upd7810_device::IN()
{
logerror("unimplemented instruction: IN\n");