mirror of
https://github.com/holub/mame
synced 2025-05-06 22:35:43 +03:00
Checkpoint (nw)
This commit is contained in:
parent
64f9a674d1
commit
a0bd75459b
@ -30,13 +30,19 @@
|
|||||||
- (fixed) player walks on spot on stage clear;
|
- (fixed) player walks on spot on stage clear;
|
||||||
- several enemies seems to not like a missing min/max range limit for a specific operation?
|
- several enemies seems to not like a missing min/max range limit for a specific operation?
|
||||||
(when i.e. first boss goes to bottom of the screen and become unreachable)
|
(when i.e. first boss goes to bottom of the screen and become unreachable)
|
||||||
|
- (btanb) Throw is made by quickly double jumping (!)
|
||||||
heated barrel
|
heated barrel
|
||||||
- gives random value to hi-score if you continue (only the first time, not a bug?);
|
- gives random value to hi-score if you continue (only the first time, not a bug?);
|
||||||
- (fixed?) throws random address exceptions at level 3 and above, a RAM address arrives corrupt in the snippet at 0x136a;
|
- (fixed?) throws random address exceptions at level 3 and above, a RAM address arrives corrupt in the snippet at 0x136a;
|
||||||
- (fixed?) some corrupt sprites, probably a non-fatal version of the one above;
|
- (fixed?) some corrupt sprites, probably a non-fatal version of the one above;
|
||||||
- stage 2 boss attacks only in vertical (regressed with the 130e / 3b30 / 42c2 command merge);
|
- stage 2 boss attacks only in vertical (regressed with the 130e / 3b30 / 42c2 command merge);
|
||||||
- (fixed) level 3+ boss movements looks wrong;
|
- (fixed) level 3+ boss movements looks wrong;
|
||||||
- missiles doesn't seem to like our 6200 hookup here;
|
- stage 3 "homing" missiles doesn't seem to like our 6200 hookup here, except it's NOT 6200!?
|
||||||
|
sd gundam
|
||||||
|
- stage 3 mid-boss still has the sprite garbage bug;
|
||||||
|
- stage 4: has sprite stuck on bottom-left of screen;
|
||||||
|
- palette dims too much on attract / continue screen.
|
||||||
|
It's known that the DMA data arrangement gives same results on a real Legionnaire board, so shrug
|
||||||
|
|
||||||
|
|
||||||
Tech notes:
|
Tech notes:
|
||||||
@ -331,7 +337,7 @@ WRITE16_MEMBER(raiden2cop_device::cop_pgm_data_w)
|
|||||||
logerror("addmem16 (r%x)\n", reg);
|
logerror("addmem16 (r%x)\n", reg);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
logerror("?\n");
|
logerror("? %x(r%x)\n",off,reg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,20 +13,17 @@
|
|||||||
#define LOG_Commands 0
|
#define LOG_Commands 0
|
||||||
#define LOG_Phytagoras 0
|
#define LOG_Phytagoras 0
|
||||||
#define LOG_Division 0
|
#define LOG_Division 0
|
||||||
|
#define LOG_Move0205 0
|
||||||
|
#define LOG_Move0905 0
|
||||||
|
|
||||||
#define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_devcb) \
|
#define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_devcb) \
|
||||||
devcb = &raiden2cop_device::set_m_videoramout_cb(*device, DEVCB_##_devcb);
|
devcb = &raiden2cop_device::set_m_videoramout_cb(*device, DEVCB_##_devcb);
|
||||||
|
|
||||||
#define MCFG_CPU_IS_68K(value) \
|
|
||||||
raiden2cop_device::set_cpu_is_68k(*device, value);
|
|
||||||
|
|
||||||
#define MCFG_RAIDEN2COP_ADD(_tag ) \
|
#define MCFG_RAIDEN2COP_ADD(_tag ) \
|
||||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0) \
|
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0)
|
||||||
MCFG_CPU_IS_68K(0)
|
|
||||||
|
|
||||||
#define MCFG_LEGIONNACOP_ADD(_tag ) \
|
#define MCFG_LEGIONNACOP_ADD(_tag ) \
|
||||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0) \
|
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0)
|
||||||
MCFG_CPU_IS_68K(1)
|
|
||||||
|
|
||||||
|
|
||||||
class raiden2cop_device : public device_t
|
class raiden2cop_device : public device_t
|
||||||
|
@ -20,10 +20,13 @@
|
|||||||
00 - 0105 ( 00) ( 105) : (180, 2e0, 0a0, 000, 000, 000, 000, 000) 6 fffb (zeroteamsr)
|
00 - 0105 ( 00) ( 105) : (180, 2e0, 0a0, 000, 000, 000, 000, 000) 6 fffb (zeroteamsr)
|
||||||
*/
|
*/
|
||||||
void raiden2cop_device::execute_0205(int offset, UINT16 data)
|
void raiden2cop_device::execute_0205(int offset, UINT16 data)
|
||||||
{
|
{
|
||||||
int ppos = m_host_space->read_dword(cop_regs[0] + 0x04 + offset * 4);
|
int ppos = m_host_space->read_dword(cop_regs[0] + 0x04 + offset * 4);
|
||||||
int npos = ppos + m_host_space->read_dword(cop_regs[0] + 0x10 + offset * 4);
|
int npos = ppos + m_host_space->read_dword(cop_regs[0] + 0x10 + offset * 4);
|
||||||
int delta = (npos >> 16) - (ppos >> 16);
|
int delta = (npos >> 16) - (ppos >> 16);
|
||||||
|
#if LOG_Move0205
|
||||||
|
// ...
|
||||||
|
#endif
|
||||||
m_host_space->write_dword(cop_regs[0] + 4 + offset * 4, npos);
|
m_host_space->write_dword(cop_regs[0] + 4 + offset * 4, npos);
|
||||||
cop_write_word(cop_regs[0] + 0x1e + offset * 4, cop_read_word(cop_regs[0] + 0x1e + offset * 4) + delta);
|
cop_write_word(cop_regs[0] + 0x1e + offset * 4, cop_read_word(cop_regs[0] + 0x1e + offset * 4) + delta);
|
||||||
}
|
}
|
||||||
@ -38,6 +41,10 @@ void raiden2cop_device::execute_0205(int offset, UINT16 data)
|
|||||||
|
|
||||||
void raiden2cop_device::execute_0904(int offset, UINT16 data)
|
void raiden2cop_device::execute_0904(int offset, UINT16 data)
|
||||||
{
|
{
|
||||||
|
#if LOG_Move0905
|
||||||
|
printf("cmd %04x: %08x %08x [%08x]\n",data, m_host_space->read_dword(cop_regs[0] + 16 + offset * 4),m_host_space->read_dword(cop_regs[0] + 0x28 + offset * 4),cop_regs[0]);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (data&0x0001)
|
if (data&0x0001)
|
||||||
m_host_space->write_dword(cop_regs[0] + 16 + offset * 4, m_host_space->read_dword(cop_regs[0] + 16 + offset * 4) + m_host_space->read_dword(cop_regs[0] + 0x28 + offset * 4));
|
m_host_space->write_dword(cop_regs[0] + 16 + offset * 4, m_host_space->read_dword(cop_regs[0] + 16 + offset * 4) + m_host_space->read_dword(cop_regs[0] + 0x28 + offset * 4));
|
||||||
else /* X Se Dae and Zero Team uses this variant */
|
else /* X Se Dae and Zero Team uses this variant */
|
||||||
@ -57,7 +64,7 @@ void raiden2cop_device::execute_0904(int offset, UINT16 data)
|
|||||||
// triggered with 130e, 138e
|
// triggered with 130e, 138e
|
||||||
void raiden2cop_device::execute_130e(int offset, UINT16 data)
|
void raiden2cop_device::execute_130e(int offset, UINT16 data)
|
||||||
{
|
{
|
||||||
// this can't be right
|
// this can't be right, or bits 15-12 from mask have different meaning ...
|
||||||
execute_338e(offset, data);
|
execute_338e(offset, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +162,7 @@ void raiden2cop_device::execute_338e(int offset, UINT16 data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if LOG_Phytagoras
|
#if LOG_Phytagoras
|
||||||
printf("cmd %04x: dx = %d dy = %d angle = %02x\n",data,dx,dy,cop_angle);
|
printf("cmd %04x: dx = %d dy = %d angle = %02x %04x\n",data,dx,dy,cop_angle);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (data & 0x0080) {
|
if (data & 0x0080) {
|
||||||
@ -299,7 +306,7 @@ void raiden2cop_device::execute_6200(int offset, UINT16 data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cop_write_word(cop_regs[primary_reg], flags);
|
cop_write_word(cop_regs[primary_reg], flags);
|
||||||
|
|
||||||
if (!m_host_endian)
|
if (!m_host_endian)
|
||||||
cop_write_byte(cop_regs[primary_reg] + primary_offset, angle);
|
cop_write_byte(cop_regs[primary_reg] + primary_offset, angle);
|
||||||
else // angle is a byte, but grainbow (cave mid-boss) is only happy with write-word, could be more endian weirdness, or it always writes a word?
|
else // angle is a byte, but grainbow (cave mid-boss) is only happy with write-word, could be more endian weirdness, or it always writes a word?
|
||||||
|
Loading…
Reference in New Issue
Block a user