volfied.cpp: removed prefixes, used timer_alloc instead of timer_set (nw)

This commit is contained in:
Ivan Vangelista 2017-03-30 18:33:07 +02:00
parent ee251a82ea
commit 62d01e6654
4 changed files with 53 additions and 52 deletions

View File

@ -20,7 +20,8 @@ Volfied (c) 1989 Taito Corporation
OSC: 32MHz, 26.686MHz & 20MHz
TC0030CMD is a custom Z80 with embedded 8K ram + 8k rom (20MHz OSC is next to chip, 20MHz/4 = 5MHz(?))
TC0030CMD is a hybrid package ASIC containing NEC D78C11
(with 4k internal ROM) + 8k EPROM + 8k DRAM + logic.
Stephh's notes (based on the game M68000 code and some tests) :
@ -34,7 +35,7 @@ Stephh's notes (based on the game M68000 code and some tests) :
- These 3 games are 100% the same, only region differs !
- Coinage relies on the region (code at 0x00666a) :
* 0x0001 (Japan) uses TAITO_COINAGE_JAPAN_OLD
* 0x0002 (US) uses slighlty different TAITO_COINAGE_US :
* 0x0002 (US) uses slightly different TAITO_COINAGE_US :
in fact, as there is no possibility to continue a game,
what are used to be "Continue Price" Dip Switches are unused
* 0x0003 (World) uses TAITO_COINAGE_WORLD
@ -70,16 +71,16 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, volfied_state )
AM_RANGE(0x080000, 0x0fffff) AM_ROM /* tiles */
AM_RANGE(0x100000, 0x103fff) AM_RAM /* main */
AM_RANGE(0x200000, 0x203fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w)
AM_RANGE(0x400000, 0x47ffff) AM_READWRITE(volfied_video_ram_r, volfied_video_ram_w)
AM_RANGE(0x400000, 0x47ffff) AM_READWRITE(video_ram_r, video_ram_w)
AM_RANGE(0x500000, 0x503fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x600000, 0x600001) AM_WRITE(volfied_video_mask_w)
AM_RANGE(0x700000, 0x700001) AM_WRITE(volfied_sprite_ctrl_w)
AM_RANGE(0xd00000, 0xd00001) AM_READWRITE(volfied_video_ctrl_r, volfied_video_ctrl_w)
AM_RANGE(0x600000, 0x600001) AM_WRITE(video_mask_w)
AM_RANGE(0x700000, 0x700001) AM_WRITE(sprite_ctrl_w)
AM_RANGE(0xd00000, 0xd00001) AM_READWRITE(video_ctrl_r, video_ctrl_w)
AM_RANGE(0xe00000, 0xe00001) AM_DEVWRITE8("tc0140syt", tc0140syt_device, master_port_w, 0x00ff)
AM_RANGE(0xe00002, 0xe00003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, master_comm_r, master_comm_w, 0x00ff)
AM_RANGE(0xf00000, 0xf007ff) AM_READWRITE(volfied_cchip_ram_r, volfied_cchip_ram_w)
AM_RANGE(0xf00802, 0xf00803) AM_READWRITE(volfied_cchip_ctrl_r, volfied_cchip_ctrl_w)
AM_RANGE(0xf00c00, 0xf00c01) AM_WRITE(volfied_cchip_bank_w)
AM_RANGE(0xf00000, 0xf007ff) AM_READWRITE(cchip_ram_r, cchip_ram_w)
AM_RANGE(0xf00802, 0xf00803) AM_READWRITE(cchip_ctrl_r, cchip_ctrl_w)
AM_RANGE(0xf00c00, 0xf00c01) AM_WRITE(cchip_bank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8, volfied_state )
@ -210,12 +211,12 @@ GFXDECODE_END
void volfied_state::machine_start()
{
volfied_cchip_init();
cchip_init();
}
void volfied_state::machine_reset()
{
volfied_cchip_reset();
cchip_reset();
}
static MACHINE_CONFIG_START( volfied, volfied_state )
@ -237,7 +238,7 @@ static MACHINE_CONFIG_START( volfied, volfied_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(320, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 319, 8, 247)
MCFG_SCREEN_UPDATE_DRIVER(volfied_state, screen_update_volfied)
MCFG_SCREEN_UPDATE_DRIVER(volfied_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", volfied)

View File

@ -37,6 +37,7 @@ public:
uint8_t m_current_flag;
uint8_t m_cc_port;
uint8_t m_current_cmd;
emu_timer *m_cchip_timer;
/* devices */
required_device<cpu_device> m_maincpu;
@ -44,25 +45,25 @@ public:
required_device<pc090oj_device> m_pc090oj;
required_device<screen_device> m_screen;
DECLARE_WRITE16_MEMBER(volfied_cchip_ctrl_w);
DECLARE_WRITE16_MEMBER(volfied_cchip_bank_w);
DECLARE_WRITE16_MEMBER(volfied_cchip_ram_w);
DECLARE_READ16_MEMBER(volfied_cchip_ctrl_r);
DECLARE_READ16_MEMBER(volfied_cchip_ram_r);
DECLARE_READ16_MEMBER(volfied_video_ram_r);
DECLARE_WRITE16_MEMBER(volfied_video_ram_w);
DECLARE_WRITE16_MEMBER(volfied_video_ctrl_w);
DECLARE_READ16_MEMBER(volfied_video_ctrl_r);
DECLARE_WRITE16_MEMBER(volfied_video_mask_w);
DECLARE_WRITE16_MEMBER(volfied_sprite_ctrl_w);
DECLARE_WRITE16_MEMBER(cchip_ctrl_w);
DECLARE_WRITE16_MEMBER(cchip_bank_w);
DECLARE_WRITE16_MEMBER(cchip_ram_w);
DECLARE_READ16_MEMBER(cchip_ctrl_r);
DECLARE_READ16_MEMBER(cchip_ram_r);
DECLARE_READ16_MEMBER(video_ram_r);
DECLARE_WRITE16_MEMBER(video_ram_w);
DECLARE_WRITE16_MEMBER(video_ctrl_w);
DECLARE_READ16_MEMBER(video_ctrl_r);
DECLARE_WRITE16_MEMBER(video_mask_w);
DECLARE_WRITE16_MEMBER(sprite_ctrl_w);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
uint32_t screen_update_volfied(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(volfied_timer_callback);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(timer_callback);
void refresh_pixel_layer( bitmap_ind16 &bitmap );
void volfied_cchip_init();
void volfied_cchip_reset();
void cchip_init();
void cchip_reset();
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

View File

@ -5,9 +5,8 @@
Volfied C-Chip Protection
=========================
The C-Chip (Taito TC0030CMD) is an unidentified mask programmed
microcontroller of some sort with 64 pins. It probably has
about 2k of ROM and 8k of RAM.
The C-Chip (Taito TC0030CMD) contains a NEC D78C11 (with 4k internal ROM) +
8k EPROM + 8k DRAM + logic.
Cheat:
volfied:0:100191:00:001:Complete level with 99.9% Now!
@ -284,14 +283,14 @@ void volfied_state::device_timer(emu_timer &timer, device_timer_id id, int param
switch (id)
{
case TIMER_VOLFIED:
volfied_timer_callback(ptr, param);
timer_callback(ptr, param);
break;
default:
assert_always(false, "Unknown id in volfied_state::device_timer");
}
}
TIMER_CALLBACK_MEMBER(volfied_state::volfied_timer_callback)
TIMER_CALLBACK_MEMBER(volfied_state::timer_callback)
{
// Palette commands - palette data written to bank 0: $10 - $af
if (m_current_cmd >= 0x1 && m_current_cmd < 0x12)
@ -339,17 +338,17 @@ TIMER_CALLBACK_MEMBER(volfied_state::volfied_timer_callback)
*
*************************************/
WRITE16_MEMBER(volfied_state::volfied_cchip_ctrl_w)
WRITE16_MEMBER(volfied_state::cchip_ctrl_w)
{
/* value 2 is written here */
}
WRITE16_MEMBER(volfied_state::volfied_cchip_bank_w)
WRITE16_MEMBER(volfied_state::cchip_bank_w)
{
m_current_bank = data & 7;
}
WRITE16_MEMBER(volfied_state::volfied_cchip_ram_w)
WRITE16_MEMBER(volfied_state::cchip_ram_w)
{
m_cchip_ram[(m_current_bank * 0x400) + offset] = data;
@ -400,12 +399,12 @@ WRITE16_MEMBER(volfied_state::volfied_cchip_ram_w)
// Palette request cmd - verified to take around 122242 68000 cycles to complete
if (m_current_cmd >= 0x1 && m_current_cmd < 0x12)
{
timer_set(downcast<cpu_device *>(&space.device())->cycles_to_attotime(122242), TIMER_VOLFIED);
m_cchip_timer->adjust(m_maincpu->cycles_to_attotime(122242));
}
// Unknown cmd - verified to take around 105500 68000 cycles to complete
else if (m_current_cmd >= 0x81 && m_current_cmd < 0x92)
{
timer_set(downcast<cpu_device *>(&space.device())->cycles_to_attotime(105500), TIMER_VOLFIED);
m_cchip_timer->adjust(m_maincpu->cycles_to_attotime(105500));
}
else
{
@ -429,7 +428,7 @@ WRITE16_MEMBER(volfied_state::volfied_cchip_ram_w)
*
*************************************/
READ16_MEMBER(volfied_state::volfied_cchip_ctrl_r)
READ16_MEMBER(volfied_state::cchip_ctrl_r)
{
/*
Bit 2 = Error signal
@ -438,7 +437,7 @@ READ16_MEMBER(volfied_state::volfied_cchip_ctrl_r)
return 0x01; /* Return 0x05 for C-Chip error */
}
READ16_MEMBER(volfied_state::volfied_cchip_ram_r)
READ16_MEMBER(volfied_state::cchip_ram_r)
{
/* Check for input ports */
if (m_current_bank == 0)
@ -491,8 +490,10 @@ READ16_MEMBER(volfied_state::volfied_cchip_ram_r)
*
*************************************/
void volfied_state::volfied_cchip_init( )
void volfied_state::cchip_init()
{
m_cchip_timer = timer_alloc(TIMER_VOLFIED);
m_cchip_ram = make_unique_clear<uint8_t[]>(0x400 * 8);
save_item(NAME(m_current_bank));
@ -502,7 +503,7 @@ void volfied_state::volfied_cchip_init( )
save_pointer(NAME(m_cchip_ram.get()), 0x400 * 8);
}
void volfied_state::volfied_cchip_reset( )
void volfied_state::cchip_reset()
{
m_current_bank = 0;
m_current_flag = 0;

View File

@ -24,24 +24,24 @@ void volfied_state::video_start()
READ AND WRITE HANDLERS
*******************************************************/
READ16_MEMBER(volfied_state::volfied_video_ram_r)
READ16_MEMBER(volfied_state::video_ram_r)
{
return m_video_ram[offset];
}
WRITE16_MEMBER(volfied_state::volfied_video_ram_w)
WRITE16_MEMBER(volfied_state::video_ram_w)
{
mem_mask &= m_video_mask;
COMBINE_DATA(&m_video_ram[offset]);
}
WRITE16_MEMBER(volfied_state::volfied_video_ctrl_w)
WRITE16_MEMBER(volfied_state::video_ctrl_w)
{
COMBINE_DATA(&m_video_ctrl);
}
READ16_MEMBER(volfied_state::volfied_video_ctrl_r)
READ16_MEMBER(volfied_state::video_ctrl_r)
{
/* Could this be some kind of hardware collision detection? If bit 6 is
set the game will check for collisions with the large enemy, whereas
@ -52,12 +52,12 @@ READ16_MEMBER(volfied_state::volfied_video_ctrl_r)
return 0x60;
}
WRITE16_MEMBER(volfied_state::volfied_video_mask_w)
WRITE16_MEMBER(volfied_state::video_mask_w)
{
COMBINE_DATA(&m_video_mask);
}
WRITE16_MEMBER(volfied_state::volfied_sprite_ctrl_w)
WRITE16_MEMBER(volfied_state::sprite_ctrl_w)
{
m_pc090oj->set_sprite_ctrl((data & 0x3c) >> 2);
}
@ -69,8 +69,6 @@ WRITE16_MEMBER(volfied_state::volfied_sprite_ctrl_w)
void volfied_state::refresh_pixel_layer( bitmap_ind16 &bitmap )
{
int x, y;
/*********************************************************
VIDEO RAM has 2 screens x 256 rows x 512 columns x 16 bits
@ -98,9 +96,9 @@ void volfied_state::refresh_pixel_layer( bitmap_ind16 &bitmap )
if (m_video_ctrl & 1)
p += 0x20000;
for (y = 0; y < height; y++)
for (int y = 0; y < height; y++)
{
for (x = 1; x < width + 1; x++) // Hmm, 1 pixel offset is needed to align properly with sprites
for (int x = 1; x < width + 1; x++) // Hmm, 1 pixel offset is needed to align properly with sprites
{
int color = (p[x] << 2) & 0x700;
@ -121,7 +119,7 @@ void volfied_state::refresh_pixel_layer( bitmap_ind16 &bitmap )
}
}
uint32_t volfied_state::screen_update_volfied(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t volfied_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
screen.priority().fill(0, cliprect);
refresh_pixel_layer(bitmap);