mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
angle protection part 1 (nw)
This commit is contained in:
parent
7920aaf3fb
commit
e02dce194c
@ -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.
|
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)
|
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"
|
#include "emu.h"
|
||||||
@ -34,14 +39,15 @@ public:
|
|||||||
optional_device<eeprom_serial_93cxx_device> m_eeprom;
|
optional_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||||
|
|
||||||
DECLARE_WRITE16_MEMBER(r2dx_angle_w);
|
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_unk1_w);
|
||||||
DECLARE_WRITE16_MEMBER(r2dx_unk2_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_angle_r);
|
||||||
DECLARE_READ16_MEMBER(rdx_dist_r);
|
DECLARE_READ16_MEMBER(rdx_dist_r);
|
||||||
|
|
||||||
DECLARE_READ16_MEMBER(r2dx_sin_r);
|
DECLARE_READ16_MEMBER(r2dx_sin_r);
|
||||||
DECLARE_READ16_MEMBER(r2dx_cos_r);
|
DECLARE_READ16_MEMBER(r2dx_cos_r);
|
||||||
|
|
||||||
@ -72,6 +78,7 @@ public:
|
|||||||
|
|
||||||
int m_r2dxbank;
|
int m_r2dxbank;
|
||||||
int m_r2dxgameselect;
|
int m_r2dxgameselect;
|
||||||
|
INT16 m_r2dx_angle;
|
||||||
|
|
||||||
UINT32 screen_update_rdx_v33(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update_rdx_v33(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
INTERRUPT_GEN_MEMBER(rdx_v33_interrupt);
|
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: 16-bits signed
|
||||||
//Olivier Galibert: write dx/dy at 424/426, get dist and angle at 432/430
|
//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)
|
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)
|
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)
|
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 )
|
static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
|
||||||
AM_RANGE(0x00000, 0x003ff) AM_RAM // vectors copied here
|
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(0x00404, 0x00405) AM_WRITE(r2dx_rom_bank_w)
|
||||||
AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w)
|
AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w)
|
||||||
|
|
||||||
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
|
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
|
||||||
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
|
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
|
||||||
|
|
||||||
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
|
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
|
||||||
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
|
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
|
||||||
|
|
||||||
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
|
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
|
||||||
|
|
||||||
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
|
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
|
||||||
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
|
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
|
||||||
|
|
||||||
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
|
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
|
||||||
AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_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
|
// 0x404 is bank on r2dx, this doesn't need it
|
||||||
// AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w) // not the same?
|
// AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w) // not the same?
|
||||||
|
|
||||||
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
|
AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
|
||||||
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
|
AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
|
||||||
|
|
||||||
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
|
AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
|
||||||
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
|
AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
|
||||||
|
|
||||||
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
|
AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
|
||||||
|
|
||||||
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
|
AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
|
||||||
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
|
AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
|
||||||
|
|
||||||
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
|
AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
|
||||||
AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_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")->configure_entries(0, 4, memregion("oki")->base(), 0x40000);
|
||||||
membank("okibank")->set_entry(0);
|
membank("okibank")->set_entry(0);
|
||||||
// sensible defaults if booting as RDX - we set now set this later..
|
// sensible defaults if booting as RDX - we set now set this later..
|
||||||
// membank("bank1")->set_entry(0x20+16);
|
// membank("bank1")->set_entry(0x20+16);
|
||||||
// membank("bank2")->set_entry(0x20+3);
|
// membank("bank2")->set_entry(0x20+3);
|
||||||
// membank("bank3")->set_entry(1);
|
// membank("bank3")->set_entry(1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user