summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/r2dx_v33.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/r2dx_v33.cpp')
-rw-r--r--src/mame/drivers/r2dx_v33.cpp196
1 files changed, 95 insertions, 101 deletions
diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp
index 5e3edf03489..1e27f46dc40 100644
--- a/src/mame/drivers/r2dx_v33.cpp
+++ b/src/mame/drivers/r2dx_v33.cpp
@@ -99,32 +99,32 @@ public:
private:
- DECLARE_WRITE16_MEMBER(angle_w);
- DECLARE_WRITE16_MEMBER(dx_w);
- DECLARE_WRITE16_MEMBER(dy_w);
- DECLARE_WRITE16_MEMBER(sdistl_w);
- DECLARE_WRITE16_MEMBER(sdisth_w);
- DECLARE_READ16_MEMBER(angle_r);
- DECLARE_READ16_MEMBER(dist_r);
- DECLARE_READ16_MEMBER(sin_r);
- DECLARE_READ16_MEMBER(cos_r);
-
- DECLARE_WRITE8_MEMBER(tile_bank_w);
- DECLARE_READ16_MEMBER(rdx_v33_unknown_r);
- DECLARE_WRITE16_MEMBER(mcu_xval_w);
- DECLARE_WRITE16_MEMBER(mcu_yval_w);
- DECLARE_WRITE16_MEMBER(mcu_table_w);
- DECLARE_WRITE16_MEMBER(mcu_table2_w);
- DECLARE_WRITE16_MEMBER(mcu_prog_w);
- DECLARE_WRITE16_MEMBER(mcu_prog_w2);
- DECLARE_WRITE16_MEMBER(mcu_prog_offs_w);
- DECLARE_WRITE16_MEMBER(rdx_v33_eeprom_w);
- DECLARE_WRITE16_MEMBER(zerotm2k_eeprom_w);
- DECLARE_WRITE16_MEMBER(r2dx_rom_bank_w);
-
- DECLARE_WRITE16_MEMBER(tilemapdma_w);
- DECLARE_WRITE16_MEMBER(paldma_w);
- DECLARE_READ16_MEMBER(r2dx_debug_r);
+ void angle_w(offs_t offset, u16 data, u16 mem_mask);
+ void dx_w(offs_t offset, u16 data, u16 mem_mask);
+ void dy_w(offs_t offset, u16 data, u16 mem_mask);
+ void sdistl_w(offs_t offset, u16 data, u16 mem_mask);
+ void sdisth_w(offs_t offset, u16 data, u16 mem_mask);
+ u16 angle_r();
+ u16 dist_r();
+ u16 sin_r();
+ u16 cos_r();
+
+ void tile_bank_w(u8 data);
+ u16 rdx_v33_unknown_r();
+ void mcu_xval_w(u16 data);
+ void mcu_yval_w(u16 data);
+ void mcu_table_w(offs_t offset, u16 data);
+ void mcu_table2_w(offs_t offset, u16 data);
+ void mcu_prog_w(u16 data);
+ void mcu_prog_w2(u16 data);
+ void mcu_prog_offs_w(u16 data);
+ void rdx_v33_eeprom_w(u8 data);
+ void zerotm2k_eeprom_w(u16 data);
+ void r2dx_rom_bank_w(u16 data);
+
+ void tilemapdma_w(address_space &space, u16 data);
+ void paldma_w(address_space &space, u16 data);
+ u16 r2dx_debug_r();
DECLARE_MACHINE_RESET(r2dx_v33);
DECLARE_MACHINE_RESET(nzeroteam);
@@ -142,15 +142,15 @@ private:
int m_r2dxbank;
int m_r2dxgameselect;
- uint16_t m_dx, m_dy, m_angle;
- uint32_t m_sdist;
- uint16_t m_mcu_prog[0x800];
+ u16 m_dx, m_dy, m_angle;
+ u32 m_sdist;
+ u16 m_mcu_prog[0x800];
int m_mcu_prog_offs;
- uint16_t m_mcu_xval, m_mcu_yval;
- uint16_t m_mcu_data[9];
+ u16 m_mcu_xval, m_mcu_yval;
+ u16 m_mcu_data[9];
optional_device<eeprom_serial_93cxx_device> m_eeprom;
- required_region_ptr<uint8_t> m_math;
+ required_region_ptr<u8> m_math;
optional_memory_bank m_okibank;
};
@@ -172,23 +172,26 @@ void r2dx_v33_state::machine_start()
save_item(NAME(m_mcu_data));
}
-WRITE8_MEMBER(r2dx_v33_state::tile_bank_w)
+void r2dx_v33_state::tile_bank_w(u8 data)
{
int new_bank;
new_bank = ((data & 0x10)>>4);
- if(new_bank != m_bg_bank) {
+ if (new_bank != m_bg_bank)
+ {
m_bg_bank = new_bank;
m_background_layer->mark_all_dirty();
}
new_bank = 2 + ((data & 0x20)>>5);
- if(new_bank != m_mid_bank) {
+ if (new_bank != m_mid_bank)
+ {
m_mid_bank = new_bank;
m_midground_layer->mark_all_dirty();
}
new_bank = 4 | (data & 3);
- if(new_bank != m_fg_bank) {
+ if (new_bank != m_fg_bank)
+ {
m_fg_bank = new_bank;
m_foreground_layer->mark_all_dirty();
}
@@ -200,43 +203,35 @@ void r2dx_v33_state::r2dx_setbanking()
m_mainbank[1]->set_entry(m_r2dxgameselect);
}
-WRITE16_MEMBER(r2dx_v33_state::rdx_v33_eeprom_w)
+void r2dx_v33_state::rdx_v33_eeprom_w(u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
- m_eeprom->di_write((data & 0x20) >> 5);
- m_eeprom->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
+ m_eeprom->clk_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
+ m_eeprom->di_write((data & 0x20) >> 5);
+ m_eeprom->cs_write((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
- // 0x40 - coin counter 1?
- // 0x80 - coin counter 2?
+ // 0x40 - coin counter 1?
+ // 0x80 - coin counter 2?
- // 0x04 is active in Raiden DX mode, it could be part of the rom bank (which half of the rom to use) or the FG tile bank (or both?)
- // the bit gets set if it reads RAIDENDX from the EEPROM
- m_r2dxgameselect = (data & 0x04) >> 2;
+ // 0x04 is active in Raiden DX mode, it could be part of the rom bank (which half of the rom to use) or the FG tile bank (or both?)
+ // the bit gets set if it reads RAIDENDX from the EEPROM
+ m_r2dxgameselect = (data & 0x04) >> 2;
- m_tx_bank = m_r2dxgameselect;
- m_text_layer->mark_all_dirty();
+ m_tx_bank = m_r2dxgameselect;
+ m_text_layer->mark_all_dirty();
- r2dx_setbanking();
-
- m_okibank->set_entry(data&3);
+ r2dx_setbanking();
- }
- else
- {
- logerror("eeprom_w MSB used %04x",data);
- }
+ m_okibank->set_entry(data&3);
}
/* new zero team uses the copd3 protection... and uploads a 0x400 byte table, probably the mcu code, encrypted */
-WRITE16_MEMBER(r2dx_v33_state::mcu_prog_w)
+void r2dx_v33_state::mcu_prog_w(u16 data)
{
m_mcu_prog[m_mcu_prog_offs*2] = data;
}
-WRITE16_MEMBER(r2dx_v33_state::mcu_prog_w2)
+void r2dx_v33_state::mcu_prog_w2(u16 data)
{
m_mcu_prog[m_mcu_prog_offs*2+1] = data;
@@ -257,25 +252,25 @@ WRITE16_MEMBER(r2dx_v33_state::mcu_prog_w2)
#endif
}
-WRITE16_MEMBER(r2dx_v33_state::mcu_prog_offs_w)
+void r2dx_v33_state::mcu_prog_offs_w(u16 data)
{
m_mcu_prog_offs = data;
}
-READ16_MEMBER(r2dx_v33_state::rdx_v33_unknown_r)
+u16 r2dx_v33_state::rdx_v33_unknown_r()
{
return machine().rand();
}
/* something sent to the MCU for X/Y global screen calculating ... */
-WRITE16_MEMBER(r2dx_v33_state::mcu_xval_w)
+void r2dx_v33_state::mcu_xval_w(u16 data)
{
m_mcu_xval = data;
//popmessage("%04x %04x",m_mcu_xval,m_mcu_yval);
}
-WRITE16_MEMBER(r2dx_v33_state::mcu_yval_w)
+void r2dx_v33_state::mcu_yval_w(u16 data)
{
m_mcu_yval = data;
//popmessage("%04x %04x",m_mcu_xval,m_mcu_yval);
@@ -283,103 +278,103 @@ WRITE16_MEMBER(r2dx_v33_state::mcu_yval_w)
/* 0x400-0x407 seems some DMA hook-up, 0x420-0x427 looks like some x/y sprite calculation routine */
-WRITE16_MEMBER(r2dx_v33_state::mcu_table_w)
+void r2dx_v33_state::mcu_table_w(offs_t offset, u16 data)
{
m_mcu_data[offset] = data;
//popmessage("%04x %04x %04x %04x | %04x %04x %04x %04x",m_mcu_data[0/2],m_mcu_data[2/2],m_mcu_data[4/2],m_mcu_data[6/2],m_mcu_data[8/2],m_mcu_data[0xa/2],m_mcu_data[0xc/2],m_mcu_data[0xe/2]);
}
-WRITE16_MEMBER(r2dx_v33_state::mcu_table2_w)
+void r2dx_v33_state::mcu_table2_w(offs_t offset, u16 data)
{
-// printf("mcu_table2_w %04x %04x\n", data, mem_mask);
+// printf("mcu_table2_w %04x\n", data);
m_mcu_data[offset+4] = data;
//popmessage("%04x %04x %04x %04x | %04x %04x %04x %04x",m_mcu_data[0/2],m_mcu_data[2/2],m_mcu_data[4/2],m_mcu_data[6/2],m_mcu_data[8/2],m_mcu_data[0xa/2],m_mcu_data[0xc/2],m_mcu_data[0xe/2]);
}
-WRITE16_MEMBER(r2dx_v33_state::r2dx_rom_bank_w)
+void r2dx_v33_state::r2dx_rom_bank_w(u16 data)
{
- //printf("rom bank %04x %04x\n", data, mem_mask);
+ //printf("rom bank %04x\n", data);
m_r2dxbank = data & 0xf;
r2dx_setbanking();
}
-WRITE16_MEMBER(r2dx_v33_state::angle_w)
+void r2dx_v33_state::angle_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_angle);
}
-WRITE16_MEMBER(r2dx_v33_state::dx_w)
+void r2dx_v33_state::dx_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_dx);
}
-WRITE16_MEMBER(r2dx_v33_state::dy_w)
+void r2dx_v33_state::dy_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_dy);
}
-READ16_MEMBER(r2dx_v33_state::angle_r)
+u16 r2dx_v33_state::angle_r()
{
return m_math[((m_dy & 0xff) << 8) | (m_dx & 0xff)];
}
-READ16_MEMBER(r2dx_v33_state::dist_r)
+u16 r2dx_v33_state::dist_r()
{
return sqrt(double(m_sdist));
}
-READ16_MEMBER(r2dx_v33_state::sin_r)
+u16 r2dx_v33_state::sin_r()
{
int off = 65536 + (m_angle & 0xff)*4;
return (m_math[off+0]) | (m_math[off+1] << 8);
}
-READ16_MEMBER(r2dx_v33_state::cos_r)
+u16 r2dx_v33_state::cos_r()
{
int off = 65536 + (m_angle & 0xff)*4;
return (m_math[off+2]) | (m_math[off+3] << 8);
}
-WRITE16_MEMBER(r2dx_v33_state::sdistl_w)
+void r2dx_v33_state::sdistl_w(offs_t offset, u16 data, u16 mem_mask)
{
- m_sdist = (m_sdist & (0xffff0000 | uint16_t(~mem_mask))) | (data & mem_mask);
+ m_sdist = (m_sdist & (0xffff0000 | u16(~mem_mask))) | (data & mem_mask);
}
-WRITE16_MEMBER(r2dx_v33_state::sdisth_w)
+void r2dx_v33_state::sdisth_w(offs_t offset, u16 data, u16 mem_mask)
{
- m_sdist = (m_sdist & (0x0000ffff | (uint16_t(~mem_mask)) << 16)) | ((data & mem_mask) << 16);
+ m_sdist = (m_sdist & (0x0000ffff | (u16(~mem_mask)) << 16)) | ((data & mem_mask) << 16);
}
// these DMA operations seem to use hardcoded addresses on this hardware
-WRITE16_MEMBER(r2dx_v33_state::tilemapdma_w)
+void r2dx_v33_state::tilemapdma_w(address_space &space, u16 data)
{
int src = 0xd000;
for (int i = 0; i < 0x2800 / 2; i++)
{
- uint16_t tileval = space.read_word(src);
+ u16 tileval = space.read_word(src);
src += 2;
m_videoram_private_w(space, i, tileval, 0xffff);
}
}
-WRITE16_MEMBER(r2dx_v33_state::paldma_w)
+void r2dx_v33_state::paldma_w(address_space &space, u16 data)
{
int src = 0x1f000;
for (int i = 0; i < 0x1000 / 2; i++)
{
- uint16_t palval = space.read_word(src);
+ u16 palval = space.read_word(src);
src += 2;
m_palette->write16(i, palval);
}
}
-READ16_MEMBER(r2dx_v33_state::r2dx_debug_r)
+u16 r2dx_v33_state::r2dx_debug_r()
{
// read once on startup, needed for player collisions to work
return 0xffff;
@@ -407,14 +402,14 @@ void r2dx_v33_state::rdx_v33_map(address_map &map)
map(0x00436, 0x00437).r(FUNC(r2dx_v33_state::cos_r));
map(0x00600, 0x0063f).rw("crtc", FUNC(seibu_crtc_device::read), FUNC(seibu_crtc_device::write));
- //AM_RANGE(0x00640, 0x006bf) AM_DEVREADWRITE("obj", seibu_encrypted_sprite_device, read, write)
+ //map(0x00640, 0x006bf).rw("obj", FUNC(seibu_encrypted_sprite_device::read), FUNC(seibu_encrypted_sprite_device::write));
map(0x0068e, 0x0068f).nopw(); // sprite buffering
map(0x006b0, 0x006b1).w(FUNC(r2dx_v33_state::mcu_prog_w)); // could be encryption key uploads just like raiden2.cpp ?
map(0x006b2, 0x006b3).w(FUNC(r2dx_v33_state::mcu_prog_w2));
-// AM_RANGE(0x006b4, 0x006b5) AM_WRITENOP
-// AM_RANGE(0x006b6, 0x006b7) AM_WRITENOP
+// map(0x006b4, 0x006b5).nopw();
+// map(0x006b6, 0x006b7).nopw();
map(0x006bc, 0x006bd).w(FUNC(r2dx_v33_state::mcu_prog_offs_w));
-// AM_RANGE(0x006be, 0x006bf) AM_WRITENOP
+// map(0x006be, 0x006bf).nopw();
// sprite protection not 100% verified as the same
map(0x006c0, 0x006c1).rw(FUNC(r2dx_v33_state::sprite_prot_off_r), FUNC(r2dx_v33_state::sprite_prot_off_w));
@@ -426,7 +421,7 @@ void r2dx_v33_state::rdx_v33_map(address_map &map)
map(0x006dc, 0x006dd).rw(FUNC(r2dx_v33_state::sprite_prot_maxx_r), FUNC(r2dx_v33_state::sprite_prot_maxx_w));
map(0x006de, 0x006df).w(FUNC(r2dx_v33_state::sprite_prot_src_w));
- map(0x00700, 0x00701).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
+ map(0x00700, 0x00700).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
map(0x00740, 0x00741).r(FUNC(r2dx_v33_state::r2dx_debug_r));
map(0x00744, 0x00745).portr("INPUT");
map(0x0074c, 0x0074d).portr("SYSTEM");
@@ -439,13 +434,13 @@ void r2dx_v33_state::rdx_v33_map(address_map &map)
map(0x0c000, 0x0c7ff).ram().share("spriteram");
map(0x0c800, 0x0cfff).ram();
- map(0x0d000, 0x0d7ff).ram(); //_WRITE(background_w) AM_SHARE("back_data")
- map(0x0d800, 0x0dfff).ram(); //_WRITE(foreground_w) AM_SHARE("fore_data")
- map(0x0e000, 0x0e7ff).ram(); //_WRITE(midground_w) AM_SHARE("mid_data")
- map(0x0e800, 0x0f7ff).ram(); //_WRITE(text_w) AM_SHARE("text_data")
+ map(0x0d000, 0x0d7ff).ram(); //.w(FUNC(r2dx_v33_state::background_w)).share("back_data");
+ map(0x0d800, 0x0dfff).ram(); //.w(FUNC(r2dx_v33_state::foreground_w).share("fore_data");
+ map(0x0e000, 0x0e7ff).ram(); //.w(FUNC(r2dx_v33_state::midground_w).share("mid_data");
+ map(0x0e800, 0x0f7ff).ram(); //.w(FUNC(r2dx_v33_state::text_w).share("text_data");
map(0x0f800, 0x0ffff).ram(); /* Stack area */
map(0x10000, 0x1efff).ram();
- map(0x1f000, 0x1ffff).ram(); //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ map(0x1f000, 0x1ffff).ram(); //.w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x20000, 0x2ffff).bankr("mainbank1").nopw();
map(0x30000, 0xfffff).bankr("mainbank2").nopw();
@@ -459,7 +454,7 @@ void r2dx_v33_state::nzeroteam_base_map(address_map &map)
map(0x00400, 0x00401).w(FUNC(r2dx_v33_state::tilemapdma_w)); // tilemaps to private buffer
map(0x00402, 0x00403).w(FUNC(r2dx_v33_state::paldma_w)); // palettes to private buffer
// 0x404 is bank on r2dx, this doesn't need it
- // AM_RANGE(0x00406, 0x00406) AM_WRITE(tile_bank_w) // not the same?
+ // map(0x00406, 0x00406).w(FUNC(r2dx_v33_state::tile_bank_w)); // not the same?
map(0x00406, 0x00407).noprw(); // always 6022, supposed to be the tile bank but ignores the actual value???
@@ -485,7 +480,7 @@ void r2dx_v33_state::nzeroteam_base_map(address_map &map)
// map(0x006d8, 0x006d9).w(FUNC(r2dx_v33_state::bbbbll_w)); // scroll?
// map(0x006dc, 0x006dd).r(FUNC(r2dx_v33_state::nzerotea_unknown_r));
// map(0x006de, 0x006df).w(FUNC(r2dx_v33_state::mcu_unkaa_w)); // mcu command related?
-// map(0x00700, 0x00701).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
+// map(0x00700, 0x00700).w(FUNC(r2dx_v33_state::rdx_v33_eeprom_w));
// map(0x00762, 0x00763).r(FUNC(r2dx_v33_state::nzerotea_unknown_r));
@@ -517,9 +512,9 @@ void r2dx_v33_state::nzerotea_map(address_map &map)
map(0x0074c, 0x0074d).portr("SYSTEM");
}
-WRITE16_MEMBER(r2dx_v33_state::zerotm2k_eeprom_w)
+void r2dx_v33_state::zerotm2k_eeprom_w(u16 data)
{
-// printf("zerotm2k_eeprom_w %04x %04x\n", data, mem_mask);
+// printf("zerotm2k_eeprom_w %04x\n", data);
m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE);
m_eeprom->di_write((data & 0x04) >> 2);
@@ -853,10 +848,10 @@ void r2dx_v33_state::init_zerotm2k()
// no sprite encryption(!)
// BG tile rom has 2 lines swapped
- uint8_t *src = memregion("gfx2")->base()+0x100000;
+ u8 *src = memregion("gfx2")->base()+0x100000;
const int len = 0x080000;
- std::vector<uint8_t> buffer(len);
+ std::vector<u8> buffer(len);
for (int i = 0; i < len; i ++)
buffer[i] = src[bitswap<32>(i,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,5,6,4,3,2,1,0)];
memcpy(src, &buffer[0], len);
@@ -965,7 +960,6 @@ ROM_START( r2dx_v33_r2 )
ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
-
ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples */
ROM_LOAD( "pcm.099", 0x00000, 0x100000, CRC(97ca2907) SHA1(bfe8189300cf72089d0beaeab8b1a0a1a4f0a5b6) )