mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
volfied.cpp: removed prefixes, used timer_alloc instead of timer_set (nw)
This commit is contained in:
parent
ee251a82ea
commit
62d01e6654
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user