diff --git a/src/mame/drivers/r2dx_v33.c b/src/mame/drivers/r2dx_v33.c index 65299400295..ee47e6ea82a 100644 --- a/src/mame/drivers/r2dx_v33.c +++ b/src/mame/drivers/r2dx_v33.c @@ -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 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); + + }