summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/konami/k051733.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/konami/k051733.cpp')
-rw-r--r--src/mame/konami/k051733.cpp65
1 files changed, 39 insertions, 26 deletions
diff --git a/src/mame/konami/k051733.cpp b/src/mame/konami/k051733.cpp
index 600e7bec0cc..43015793f62 100644
--- a/src/mame/konami/k051733.cpp
+++ b/src/mame/konami/k051733.cpp
@@ -110,10 +110,10 @@ u8 k051733_device::read(offs_t offset)
u16 const op3 = (m_ram[0x04] << 8) | m_ram[0x05];
u16 const rad = (m_ram[0x06] << 8) | m_ram[0x07];
- u16 const yobj1c = (m_ram[0x08] << 8) | m_ram[0x09];
- u16 const xobj1c = (m_ram[0x0a] << 8) | m_ram[0x0b];
- u16 const yobj2c = (m_ram[0x0c] << 8) | m_ram[0x0d];
- u16 const xobj2c = (m_ram[0x0e] << 8) | m_ram[0x0f];
+ u16 const y1 = (m_ram[0x08] << 8) | m_ram[0x09];
+ u16 const x1 = (m_ram[0x0a] << 8) | m_ram[0x0b];
+ u16 const y2 = (m_ram[0x0c] << 8) | m_ram[0x0d];
+ u16 const x2 = (m_ram[0x0e] << 8) | m_ram[0x0f];
switch (offset)
{
@@ -148,37 +148,50 @@ u8 k051733_device::read(offs_t offset)
return lfsr;
case 0x07:
- // note: Chequered Flag definitely wants all these bits to be enabled
- if (abs(xobj1c - xobj2c) > rad || abs(yobj1c - yobj2c) > rad)
+ {
+ const int dx = x2 - x1;
+ const int dy = y2 - y1;
+
+ // note: Chequered Flag definitely wants all these bits to be set
+ if (abs(dx) > rad || abs(dy) > rad)
return 0xff;
- else if (yobj1c > yobj2c)
- {
- if (xobj1c == xobj2c)
- return 0x06;
- else if (xobj1c > xobj2c)
- return 0x00;
- else
- return 0x04;
- }
- else if (yobj1c < yobj2c)
+ // octant angle
+ if (y1 >= y2)
{
- if (xobj1c == xobj2c)
- return 0x02;
- else if (xobj1c > xobj2c)
- return 0x01;
+ if (x1 >= x2)
+ {
+ if (dy >= dx)
+ return 0x00;
+ else
+ return 0x06;
+ }
else
- return 0x05;
+ {
+ if (dy >= -dx)
+ return 0x04;
+ else
+ return 0x07;
+ }
}
else
{
- if (xobj1c == xobj2c)
- return 0x00;
- else if (xobj1c > xobj2c)
- return 0x00;
+ if (x1 >= x2)
+ {
+ if (dy > -dx)
+ return 0x02;
+ else
+ return 0x01;
+ }
else
- return 0x04;
+ {
+ if (dy > dx)
+ return 0x03;
+ else
+ return 0x05;
+ }
}
+ }
}
return 0;