angle protection part 1 (nw)

This commit is contained in:
David Haywood 2014-09-19 14:20:41 +00:00
parent 7920aaf3fb
commit e02dce194c

View File

@ -11,6 +11,11 @@ Temporary split from raiden2.c, it'll be re-merged at some point.
Raiden 2 / DX checks if there's the string "RAIDEN" at start-up inside the eeprom, otherwise it dies.
Then it puts settings at 0x9e08 and 0x9e0a (bp 91acb)
the 333 ROM is a 0x10000 byte table (bytes values?)
followed by a 0x400 bytes (word values)?
the remaining space is 0xff
*/
#include "emu.h"
@ -34,14 +39,15 @@ public:
optional_device<eeprom_serial_93cxx_device> m_eeprom;
DECLARE_WRITE16_MEMBER(r2dx_angle_w);
DECLARE_WRITE16_MEMBER(r2dx_dx_w);
DECLARE_WRITE16_MEMBER(r2dx_dy_w);
DECLARE_WRITE16_MEMBER(r2dx_unk1_w);
DECLARE_WRITE16_MEMBER(r2dx_unk2_w);
DECLARE_WRITE16_MEMBER(r2dx_dx_w);
DECLARE_WRITE16_MEMBER(r2dx_dy_w);
DECLARE_READ16_MEMBER(rdx_angle_r);
DECLARE_READ16_MEMBER(rdx_dist_r);
DECLARE_READ16_MEMBER(r2dx_sin_r);
DECLARE_READ16_MEMBER(r2dx_cos_r);
@ -72,6 +78,7 @@ public:
int m_r2dxbank;
int m_r2dxgameselect;
INT16 m_r2dx_angle;
UINT32 screen_update_rdx_v33(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(rdx_v33_interrupt);
@ -227,11 +234,28 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_rom_bank_w)
//Olivier Galibert: 16-bits signed
//Olivier Galibert: write dx/dy at 424/426, get dist and angle at 432/430
// Angle protection 1:
// writes angle
WRITE16_MEMBER(r2dx_v33_state::r2dx_angle_w)
{
m_r2dx_angle = data;
}
// reads sin and cos
READ16_MEMBER(r2dx_v33_state::r2dx_sin_r)
{
double angle = m_r2dx_angle * M_PI / 128;
return int(2048*sin(angle));
}
READ16_MEMBER(r2dx_v33_state::r2dx_cos_r)
{
double angle = m_r2dx_angle * M_PI / 128;
return int(2048*cos(angle));
}
// Angle protection 2:
// write 2 co-ordinates?
WRITE16_MEMBER(r2dx_v33_state::r2dx_dx_w)
{
@ -242,26 +266,6 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_dy_w)
}
READ16_MEMBER(r2dx_v33_state::rdx_angle_r)
{
return 0x0000;
}
READ16_MEMBER(r2dx_v33_state::rdx_dist_r)
{
return 0x0000;
}
READ16_MEMBER(r2dx_v33_state::r2dx_sin_r)
{
return 0x0000;
}
READ16_MEMBER(r2dx_v33_state::r2dx_cos_r)
{
return 0x0000;
}
WRITE16_MEMBER(r2dx_v33_state::r2dx_unk1_w)
{
@ -272,6 +276,20 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_unk2_w)
}
// reads angle and distance
READ16_MEMBER(r2dx_v33_state::rdx_angle_r)
{
return 0x0000;
}
READ16_MEMBER(r2dx_v33_state::rdx_dist_r)
{
return 0x0000;
}
static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
AM_RANGE(0x00000, 0x003ff) AM_RAM // vectors copied here
@ -283,15 +301,16 @@ static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
AM_RANGE(0x00404, 0x00405) AM_WRITE(r2dx_rom_bank_w)
AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w)
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_r)
@ -352,15 +371,16 @@ static ADDRESS_MAP_START( nzeroteam_base_map, AS_PROGRAM, 16, r2dx_v33_state )
// 0x404 is bank on r2dx, this doesn't need it
// AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w) // not the same?
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_r)
@ -727,10 +747,12 @@ DRIVER_INIT_MEMBER(r2dx_v33_state,rdx_v33)
membank("okibank")->configure_entries(0, 4, memregion("oki")->base(), 0x40000);
membank("okibank")->set_entry(0);
// sensible defaults if booting as RDX - we set now set this later..
// membank("bank1")->set_entry(0x20+16);
// membank("bank2")->set_entry(0x20+3);
// membank("bank3")->set_entry(1);
// sensible defaults if booting as RDX - we set now set this later..
// membank("bank1")->set_entry(0x20+16);
// membank("bank2")->set_entry(0x20+3);
// membank("bank3")->set_entry(1);
}