mirror of
https://github.com/holub/mame
synced 2025-05-06 14:25:54 +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;
|
||||
- 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)
|
||||
- (btanb) Throw is made by quickly double jumping (!)
|
||||
heated barrel
|
||||
- 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?) 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);
|
||||
- (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:
|
||||
@ -331,7 +337,7 @@ WRITE16_MEMBER(raiden2cop_device::cop_pgm_data_w)
|
||||
logerror("addmem16 (r%x)\n", reg);
|
||||
break;
|
||||
default:
|
||||
logerror("?\n");
|
||||
logerror("? %x(r%x)\n",off,reg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -13,20 +13,17 @@
|
||||
#define LOG_Commands 0
|
||||
#define LOG_Phytagoras 0
|
||||
#define LOG_Division 0
|
||||
#define LOG_Move0205 0
|
||||
#define LOG_Move0905 0
|
||||
|
||||
#define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_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 ) \
|
||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0) \
|
||||
MCFG_CPU_IS_68K(0)
|
||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0)
|
||||
|
||||
#define MCFG_LEGIONNACOP_ADD(_tag ) \
|
||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0) \
|
||||
MCFG_CPU_IS_68K(1)
|
||||
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0)
|
||||
|
||||
|
||||
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)
|
||||
*/
|
||||
void raiden2cop_device::execute_0205(int offset, UINT16 data)
|
||||
{
|
||||
{
|
||||
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 delta = (npos >> 16) - (ppos >> 16);
|
||||
#if LOG_Move0205
|
||||
// ...
|
||||
#endif
|
||||
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);
|
||||
}
|
||||
@ -38,6 +41,10 @@ void raiden2cop_device::execute_0205(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)
|
||||
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 */
|
||||
@ -57,7 +64,7 @@ void raiden2cop_device::execute_0904(int offset, UINT16 data)
|
||||
// triggered with 130e, 138e
|
||||
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);
|
||||
}
|
||||
|
||||
@ -155,7 +162,7 @@ void raiden2cop_device::execute_338e(int offset, UINT16 data)
|
||||
}
|
||||
|
||||
#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
|
||||
|
||||
if (data & 0x0080) {
|
||||
@ -299,7 +306,7 @@ void raiden2cop_device::execute_6200(int offset, UINT16 data)
|
||||
}
|
||||
|
||||
cop_write_word(cop_regs[primary_reg], flags);
|
||||
|
||||
|
||||
if (!m_host_endian)
|
||||
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?
|
||||
|
Loading…
Reference in New Issue
Block a user