summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/k053252.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/k053252.cpp')
-rw-r--r--src/devices/machine/k053252.cpp56
1 files changed, 23 insertions, 33 deletions
diff --git a/src/devices/machine/k053252.cpp b/src/devices/machine/k053252.cpp
index 050a7faea90..54f2274bd2d 100644
--- a/src/devices/machine/k053252.cpp
+++ b/src/devices/machine/k053252.cpp
@@ -62,6 +62,8 @@ TODO:
#include "emu.h"
#include "k053252.h"
+#include "multibyte.h"
+
DEFINE_DEVICE_TYPE(K053252, k053252_device, "k053252", "K053252 Timing/Interrupt Controller")
@@ -86,12 +88,6 @@ k053252_device::k053252_device(const machine_config &mconfig, const char *tag, d
void k053252_device::device_start()
{
- m_int1_en_cb.resolve_safe();
- m_int2_en_cb.resolve_safe();
- m_int1_ack_cb.resolve_safe();
- m_int2_ack_cb.resolve_safe();
- m_int_time_cb.resolve_safe();
-
save_item(NAME(m_regs));
save_item(NAME(m_hc));
save_item(NAME(m_hfp));
@@ -109,9 +105,7 @@ void k053252_device::device_start()
void k053252_device::device_reset()
{
- int i;
-
- for (i = 0; i < 16; i++)
+ for (int i = 0; i < 16; i++)
m_regs[i] = 0;
m_regs[0x08] = 1; // Xexex apparently does a wrong assignment for VC (sets up the INT enable register instead)
@@ -121,21 +115,21 @@ void k053252_device::device_reset()
void k053252_device::reset_internal_state()
{
- m_hc=0;
- m_hfp=0;
- m_hbp=0;
- m_vc=0;
- m_vfp=0;
- m_vbp=0;
- m_vsw=0;
- m_hsw=0;
+ m_hc = 0;
+ m_hfp = 0;
+ m_hbp = 0;
+ m_vc = 0;
+ m_vfp = 0;
+ m_vbp = 0;
+ m_vsw = 0;
+ m_hsw = 0;
}
/*****************************************************************************
DEVICE HANDLERS
*****************************************************************************/
-READ8_MEMBER( k053252_device::read )
+uint8_t k053252_device::read(offs_t offset)
{
//TODO: debugger_access()
switch(offset)
@@ -143,9 +137,9 @@ READ8_MEMBER( k053252_device::read )
/* VCT read-back */
// TODO: correct?
case 0x0e:
- return ((screen().vpos()-m_vc) >> 8) & 1;
+ return ((screen().vpos() - m_vc) >> 8) & 1;
case 0x0f:
- return (screen().vpos()-m_vc) & 0xff;
+ return (screen().vpos() - m_vc) & 0xff;
default:
//popmessage("Warning: k053252 read %02x, contact MAMEdev",offset);
break;
@@ -188,7 +182,7 @@ void k053252_device::res_change()
}
}
-WRITE8_MEMBER( k053252_device::write )
+void k053252_device::write(offs_t offset, uint8_t data)
{
m_regs[offset] = data;
@@ -196,23 +190,20 @@ WRITE8_MEMBER( k053252_device::write )
{
case 0x00:
case 0x01:
- m_hc = (m_regs[1]&0xff);
- m_hc |= ((m_regs[0]&0x03)<<8);
+ m_hc = get_u16be(&m_regs[0])&0x03ff;
m_hc++;
logerror("%d (%04x) HC set\n",m_hc,m_hc);
res_change();
break;
case 0x02:
case 0x03:
- m_hfp = (m_regs[3]&0xff);
- m_hfp |= ((m_regs[2]&0x01)<<8);
+ m_hfp = get_u16be(&m_regs[2])&0x01ff;
logerror("%d (%04x) HFP set\n",m_hfp,m_hfp);
res_change();
break;
case 0x04:
case 0x05:
- m_hbp = (m_regs[5]&0xff);
- m_hbp |= ((m_regs[4]&0x01)<<8);
+ m_hbp = get_u16be(&m_regs[4])&0x01ff;
logerror("%d (%04x) HBP set\n",m_hbp,m_hbp);
res_change();
break;
@@ -220,26 +211,25 @@ WRITE8_MEMBER( k053252_device::write )
case 0x07: m_int2_en_cb(data); break;
case 0x08:
case 0x09:
- m_vc = (m_regs[9]&0xff);
- m_vc |= ((m_regs[8]&0x01)<<8);
+ m_vc = get_u16be(&m_regs[8])&0x01ff;
m_vc++;
logerror("%d (%04x) VC set\n",m_vc,m_vc);
res_change();
break;
case 0x0a:
- m_vfp = (m_regs[0x0a]&0xff);
+ m_vfp = (m_regs[0x0a]&0xff);
logerror("%d (%04x) VFP set\n",m_vfp,m_vfp);
res_change();
break;
case 0x0b:
- m_vbp = (m_regs[0x0b]&0xff);
+ m_vbp = (m_regs[0x0b]&0xff);
m_vbp++;
logerror("%d (%04x) VBP set\n",m_vbp,m_vbp);
res_change();
break;
case 0x0c:
- m_vsw = ((m_regs[0x0c]&0xf0) >> 4) + 1;
- m_hsw = ((m_regs[0x0c]&0x0f) >> 0) + 1;
+ m_vsw = ((m_regs[0x0c]&0xf0) >> 4) + 1;
+ m_hsw = ((m_regs[0x0c]&0x0f) >> 0) + 1;
logerror("%02x VSW / %02x HSW set\n",m_vsw,m_hsw);
res_change();
break;