Previous 199869 Revisions Next

r32206 Friday 19th September, 2014 at 14:20:41 UTC by David Haywood
angle protection part 1 (nw)
[src/mame/drivers]r2dx_v33.c

trunk/src/mame/drivers/r2dx_v33.c
r32205r32206
1111Raiden 2 / DX checks if there's the string "RAIDEN" at start-up inside the eeprom, otherwise it dies.
1212Then it puts settings at 0x9e08 and 0x9e0a (bp 91acb)
1313
14
15   the 333 ROM is a 0x10000 byte table (bytes values?)
16   followed by a 0x400 bytes (word values)?
17   the remaining space is 0xff
18
1419*/
1520
1621#include "emu.h"
r32205r32206
3439   optional_device<eeprom_serial_93cxx_device> m_eeprom;
3540
3641   DECLARE_WRITE16_MEMBER(r2dx_angle_w);
37   DECLARE_WRITE16_MEMBER(r2dx_dx_w);
38   DECLARE_WRITE16_MEMBER(r2dx_dy_w);
3942
4043   DECLARE_WRITE16_MEMBER(r2dx_unk1_w);
4144   DECLARE_WRITE16_MEMBER(r2dx_unk2_w);
45   DECLARE_WRITE16_MEMBER(r2dx_dx_w);
46   DECLARE_WRITE16_MEMBER(r2dx_dy_w);
4247
4348   DECLARE_READ16_MEMBER(rdx_angle_r);
4449   DECLARE_READ16_MEMBER(rdx_dist_r);
50
4551   DECLARE_READ16_MEMBER(r2dx_sin_r);
4652   DECLARE_READ16_MEMBER(r2dx_cos_r);
4753
r32205r32206
7278
7379   int m_r2dxbank;
7480   int m_r2dxgameselect;
81   INT16 m_r2dx_angle;
7582
7683   UINT32 screen_update_rdx_v33(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
7784   INTERRUPT_GEN_MEMBER(rdx_v33_interrupt);
r32205r32206
227234//Olivier Galibert: 16-bits signed
228235//Olivier Galibert: write dx/dy at 424/426, get dist and angle at 432/430
229236
237// Angle protection 1:
238// writes angle
230239WRITE16_MEMBER(r2dx_v33_state::r2dx_angle_w)
231240{
241   m_r2dx_angle = data;
242}
232243
244// reads sin and cos
245READ16_MEMBER(r2dx_v33_state::r2dx_sin_r)
246{
247   double angle = m_r2dx_angle * M_PI / 128;
248   return int(2048*sin(angle));
233249}
234250
251READ16_MEMBER(r2dx_v33_state::r2dx_cos_r)
252{
253   double angle = m_r2dx_angle * M_PI / 128;
254   return int(2048*cos(angle));
255}
256
257// Angle protection 2:
258// write 2 co-ordinates?
235259WRITE16_MEMBER(r2dx_v33_state::r2dx_dx_w)
236260{
237261
r32205r32206
242266
243267}
244268
245READ16_MEMBER(r2dx_v33_state::rdx_angle_r)
269WRITE16_MEMBER(r2dx_v33_state::r2dx_unk1_w)
246270{
247   return 0x0000;
271
248272}
249273
250READ16_MEMBER(r2dx_v33_state::rdx_dist_r)
274WRITE16_MEMBER(r2dx_v33_state::r2dx_unk2_w)
251275{
252   return 0x0000;
276
253277}
254278
255READ16_MEMBER(r2dx_v33_state::r2dx_sin_r)
279// reads angle and distance
280READ16_MEMBER(r2dx_v33_state::rdx_angle_r)
256281{
257282   return 0x0000;
258283}
259284
260READ16_MEMBER(r2dx_v33_state::r2dx_cos_r)
285READ16_MEMBER(r2dx_v33_state::rdx_dist_r)
261286{
262287   return 0x0000;
263288}
264289
265WRITE16_MEMBER(r2dx_v33_state::r2dx_unk1_w)
266{
267290
268}
269291
270WRITE16_MEMBER(r2dx_v33_state::r2dx_unk2_w)
271{
272292
273}
274293
275
276294static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
277295   AM_RANGE(0x00000, 0x003ff) AM_RAM // vectors copied here
278296
r32205r32206
283301   AM_RANGE(0x00404, 0x00405) AM_WRITE(r2dx_rom_bank_w)
284302   AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w)
285303
286   AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
287   AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
288
304   AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
305   AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
289306   AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
290307   AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
308
291309   AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
292310
293311   AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
294312   AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
313
295314   AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
296315   AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_r)
297316
r32205r32206
352371   // 0x404 is bank on r2dx, this doesn't need it
353372   // AM_RANGE(0x00406, 0x00407) AM_WRITE(tile_bank_w) // not the same?
354373
355   AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w) // frequent
356   AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w) // frequent
357
374   AM_RANGE(0x00420, 0x00421) AM_WRITE(r2dx_unk1_w)
375   AM_RANGE(0x00422, 0x00423) AM_WRITE(r2dx_unk2_w)
358376   AM_RANGE(0x00424, 0x00425) AM_WRITE(r2dx_dx_w)
359377   AM_RANGE(0x00426, 0x00427) AM_WRITE(r2dx_dy_w)
378
360379   AM_RANGE(0x00428, 0x00429) AM_WRITE(r2dx_angle_w)
361380
362381   AM_RANGE(0x00430, 0x00431) AM_READ(rdx_angle_r)
363382   AM_RANGE(0x00432, 0x00433) AM_READ(rdx_dist_r)
383
364384   AM_RANGE(0x00434, 0x00435) AM_READ(r2dx_sin_r)
365385   AM_RANGE(0x00436, 0x00437) AM_READ(r2dx_cos_r)
366386
r32205r32206
727747
728748   membank("okibank")->configure_entries(0, 4, memregion("oki")->base(), 0x40000);
729749   membank("okibank")->set_entry(0);
730//  sensible defaults if booting as RDX - we set now set this later..
731//   membank("bank1")->set_entry(0x20+16);
732//   membank("bank2")->set_entry(0x20+3);
733//   membank("bank3")->set_entry(1);
750   //  sensible defaults if booting as RDX - we set now set this later..
751   //   membank("bank1")->set_entry(0x20+16);
752   //   membank("bank2")->set_entry(0x20+3);
753   //   membank("bank3")->set_entry(1);
734754
735755
756
757
736758}
737759
738760DRIVER_INIT_MEMBER(r2dx_v33_state,nzerotea)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team