cvs: add logmacro, remove set_vblank_int

This commit is contained in:
hap 2024-11-28 10:47:17 +01:00
parent 972c6b2544
commit c42e64a78b
4 changed files with 58 additions and 58 deletions

View File

@ -102,16 +102,20 @@ TODO:
#include "speaker.h" #include "speaker.h"
// configurable logging
#define LOG_VIDEOFX (1U << 1)
#define LOG_SPEECH (1U << 2)
#define LOG_4BITDAC (1U << 3)
#define LOG_SHTRIGGER (1U << 4)
namespace { //#define VERBOSE (LOG_VIDEOFX)
#include "logmacro.h"
// Turn to 1 so all inputs are always available (this shall only be a debug feature) // Turn to 1 so all inputs are always available (this shall only be a debug feature)
#define CVS_SHOW_ALL_INPUTS 0 #define CVS_SHOW_ALL_INPUTS 0
namespace {
#define VERBOSE 0
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
class cvs_state : public cvs_base_state class cvs_state : public cvs_base_state
{ {
@ -152,9 +156,7 @@ protected:
private: private:
// memory pointers // memory pointers
memory_share_creator<uint8_t> m_palette_ram; memory_share_creator<uint8_t> m_palette_ram;
memory_share_creator<uint8_t> m_character_ram; /* only half is used, but memory_share_creator<uint8_t> m_character_ram; // only half is used, but we can use the same gfx_layout like this
by allocating twice the amount,
we can use the same gfx_layout */
required_shared_ptr<uint8_t> m_4_bit_dac_data; required_shared_ptr<uint8_t> m_4_bit_dac_data;
required_shared_ptr<uint8_t> m_tms5110_ctl_data; required_shared_ptr<uint8_t> m_tms5110_ctl_data;
required_shared_ptr<uint8_t> m_sh_trigger; required_shared_ptr<uint8_t> m_sh_trigger;
@ -182,11 +184,18 @@ private:
required_ioport_array<3> m_dsw; required_ioport_array<3> m_dsw;
output_finder<2> m_lamps; output_finder<2> m_lamps;
void audio_cpu_map(address_map &map) ATTR_COLD;
void main_cpu_data_map(address_map &map) ATTR_COLD;
void main_cpu_io_map(address_map &map) ATTR_COLD;
void main_cpu_map(address_map &map) ATTR_COLD;
void speech_cpu_map(address_map &map) ATTR_COLD;
uint8_t huncholy_prot_r(offs_t offset); uint8_t huncholy_prot_r(offs_t offset);
uint8_t superbik_prot_r(); uint8_t superbik_prot_r();
uint8_t hero_prot_r(offs_t offset); uint8_t hero_prot_r(offs_t offset);
int speech_rom_read_bit(); int speech_rom_read_bit();
void audio_cpu_interrupt(int state); void audio_cpu_interrupt(int state);
void main_cpu_interrupt(int state);
uint8_t input_r(offs_t offset); uint8_t input_r(offs_t offset);
void speech_rom_address_lo_w(uint8_t data); void speech_rom_address_lo_w(uint8_t data);
void speech_rom_address_hi_w(uint8_t data); void speech_rom_address_hi_w(uint8_t data);
@ -202,22 +211,12 @@ private:
void tms5110_pdc_w(offs_t offset, uint8_t data); void tms5110_pdc_w(offs_t offset, uint8_t data);
void palette(palette_device &palette) const ATTR_COLD; void palette(palette_device &palette) const ATTR_COLD;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(main_cpu_interrupt);
void set_pens(); void set_pens();
void audio_cpu_map(address_map &map) ATTR_COLD;
void main_cpu_data_map(address_map &map) ATTR_COLD;
void main_cpu_io_map(address_map &map) ATTR_COLD;
void main_cpu_map(address_map &map) ATTR_COLD;
void speech_cpu_map(address_map &map) ATTR_COLD;
template <uint8_t Which> uint8_t character_ram_r(offs_t offset); template <uint8_t Which> uint8_t character_ram_r(offs_t offset);
template <uint8_t Which> void character_ram_w(offs_t offset, uint8_t data); template <uint8_t Which> void character_ram_w(offs_t offset, uint8_t data);
}; };
static constexpr uint16_t SPRITE_PEN_BASE = 0x820;
static constexpr uint16_t BULLET_STAR_PEN = 0x828;
/****************************************************** /******************************************************
* Convert colour PROM to format for MAME colour map * * Convert colour PROM to format for MAME colour map *
* * * *
@ -227,6 +226,9 @@ static constexpr uint16_t BULLET_STAR_PEN = 0x828;
* colours are taken from SRAM and are programmable * * colours are taken from SRAM and are programmable *
******************************************************/ ******************************************************/
static constexpr uint16_t SPRITE_PEN_BASE = 0x820;
static constexpr uint16_t BULLET_STAR_PEN = 0x828;
void cvs_state::palette(palette_device &palette) const void cvs_state::palette(palette_device &palette) const
{ {
uint8_t const *const color_prom = memregion("proms")->base(); uint8_t const *const color_prom = memregion("proms")->base();
@ -276,23 +278,22 @@ void cvs_state::set_pens()
} }
void cvs_state::video_fx_w(uint8_t data) void cvs_state::video_fx_w(uint8_t data)
{ {
if (data & 0xce) if (data & 0xce)
logerror("%4x : CVS: Unimplemented CVS video fx = %2x\n", m_maincpu->pc(), data & 0xce); LOGMASKED(LOG_VIDEOFX, "%04x: Unimplemented CVS video fx = %2x\n", m_maincpu->pc(), data & 0xce);
m_stars_on = data & 0x01; m_stars_on = data & 0x01;
if (data & 0x02) logerror(" SHADE BRIGHTER TO RIGHT\n"); if (data & 0x02) LOGMASKED(LOG_VIDEOFX, " SHADE BRIGHTER TO RIGHT\n");
if (data & 0x04) logerror(" SCREEN ROTATE\n"); if (data & 0x04) LOGMASKED(LOG_VIDEOFX, " SCREEN ROTATE\n");
if (data & 0x08) logerror(" SHADE BRIGHTER TO LEFT\n"); if (data & 0x08) LOGMASKED(LOG_VIDEOFX, " SHADE BRIGHTER TO LEFT\n");
m_lamps[0] = BIT(data, 4); m_lamps[0] = BIT(data, 4);
m_lamps[1] = BIT(data, 5); m_lamps[1] = BIT(data, 5);
if (data & 0x40) logerror(" SHADE BRIGHTER TO BOTTOM\n"); if (data & 0x40) LOGMASKED(LOG_VIDEOFX, " SHADE BRIGHTER TO BOTTOM\n");
if (data & 0x80) logerror(" SHADE BRIGHTER TO TOP\n"); if (data & 0x80) LOGMASKED(LOG_VIDEOFX, " SHADE BRIGHTER TO TOP\n");
} }
@ -448,6 +449,7 @@ uint32_t cvs_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
} }
/************************************* /*************************************
* *
* Multiplexed memory access * Multiplexed memory access
@ -476,14 +478,12 @@ void cvs_state::character_ram_w(offs_t offset, uint8_t data)
* *
*************************************/ *************************************/
INTERRUPT_GEN_MEMBER(cvs_state::main_cpu_interrupt) void cvs_state::main_cpu_interrupt(int state)
{ {
m_maincpu->pulse_input_line(0, m_maincpu->minimum_quantum_time()); if (state)
m_maincpu->pulse_input_line(0, m_maincpu->minimum_quantum_time());
scroll_start();
} }
void cvs_state::audio_cpu_interrupt(int state) void cvs_state::audio_cpu_interrupt(int state)
{ {
m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
@ -534,7 +534,7 @@ void cvs_state::_4_bit_dac_data_w(offs_t offset, uint8_t data)
if (data != m_4_bit_dac_data[offset]) if (data != m_4_bit_dac_data[offset])
{ {
LOG(("4BIT: %d %d\n", offset, data)); LOGMASKED(LOG_4BITDAC, "4BIT: %d %d\n", offset, data);
m_4_bit_dac_data[offset] = data; m_4_bit_dac_data[offset] = data;
} }
@ -561,7 +561,7 @@ void cvs_state::sh_trigger_w(offs_t offset, uint8_t data)
if (data != m_sh_trigger[offset]) if (data != m_sh_trigger[offset])
{ {
LOG(("TRIG: %d %d\n", offset, data)); LOGMASKED(LOG_SHTRIGGER, "TRIG: %d %d\n", offset, data);
m_sh_trigger[offset] = data; m_sh_trigger[offset] = data;
} }
@ -570,6 +570,7 @@ void cvs_state::sh_trigger_w(offs_t offset, uint8_t data)
} }
/************************************* /*************************************
* *
* Speech hardware * Speech hardware
@ -580,13 +581,13 @@ void cvs_state::speech_rom_address_lo_w(uint8_t data)
{ {
// assuming that d0-d2 are cleared here // assuming that d0-d2 are cleared here
m_speech_rom_bit_address = (m_speech_rom_bit_address & 0xf800) | (data << 3); m_speech_rom_bit_address = (m_speech_rom_bit_address & 0xf800) | (data << 3);
LOG(("%04x : CVS: Speech Lo %02x Address = %04x\n", m_speechcpu->pc(), data, m_speech_rom_bit_address >> 3)); LOGMASKED(LOG_SPEECH, "%04x : CVS: Speech Lo %02x Address = %04x\n", m_speechcpu->pc(), data, m_speech_rom_bit_address >> 3);
} }
void cvs_state::speech_rom_address_hi_w(uint8_t data) void cvs_state::speech_rom_address_hi_w(uint8_t data)
{ {
m_speech_rom_bit_address = (m_speech_rom_bit_address & 0x07ff) | (data << 11); m_speech_rom_bit_address = (m_speech_rom_bit_address & 0x07ff) | (data << 11);
LOG(("%04x : CVS: Speech Hi %02x Address = %04x\n", m_speechcpu->pc(), data, m_speech_rom_bit_address >> 3)); LOGMASKED(LOG_SPEECH, "%04x : CVS: Speech Hi %02x Address = %04x\n", m_speechcpu->pc(), data, m_speech_rom_bit_address >> 3);
} }
@ -605,12 +606,12 @@ void cvs_state::tms5110_ctl_w(offs_t offset, uint8_t data)
*/ */
m_tms5110_ctl_data[offset] = (~data >> 7) & 0x01; m_tms5110_ctl_data[offset] = (~data >> 7) & 0x01;
uint8_t const ctl = 0 | // CTL1 uint8_t const ctl = 0 | // CTL1
(m_tms5110_ctl_data[1] << 1) | // CTL2 (m_tms5110_ctl_data[1] << 1) | // CTL2
(m_tms5110_ctl_data[2] << 2) | // CTL4 (m_tms5110_ctl_data[2] << 2) | // CTL4
(m_tms5110_ctl_data[1] << 3); // CTL8 (m_tms5110_ctl_data[1] << 3); // CTL8
LOG(("CVS: Speech CTL = %04x %02x %02x\n", ctl, offset, data)); LOGMASKED(LOG_SPEECH, "CVS: Speech CTL = %04x %02x %02x\n", ctl, offset, data);
m_tms5110->ctl_w(ctl); m_tms5110->ctl_w(ctl);
} }
@ -618,7 +619,7 @@ void cvs_state::tms5110_ctl_w(offs_t offset, uint8_t data)
void cvs_state::tms5110_pdc_w(offs_t offset, uint8_t data) void cvs_state::tms5110_pdc_w(offs_t offset, uint8_t data)
{ {
uint8_t const out = ((~data) >> 7) & 1; uint8_t const out = ((~data) >> 7) & 1;
LOG(("CVS: Speech PDC = %02x %02x\n", offset, out)); LOGMASKED(LOG_SPEECH, "CVS: Speech PDC = %02x %02x\n", offset, out);
m_tms5110->pdc_w(out); m_tms5110->pdc_w(out);
} }
@ -636,6 +637,7 @@ int cvs_state::speech_rom_read_bit()
} }
/************************************* /*************************************
* *
* Inter-CPU communications * Inter-CPU communications
@ -644,7 +646,7 @@ int cvs_state::speech_rom_read_bit()
void cvs_state::audio_command_w(uint8_t data) void cvs_state::audio_command_w(uint8_t data)
{ {
LOG(("data %02x\n", data)); //LOG(("data %02x\n", data));
// cause interrupt on audio CPU if bit 7 set // cause interrupt on audio CPU if bit 7 set
m_soundlatch->write(data); m_soundlatch->write(data);
audio_cpu_interrupt(data & 0x80 ? 1 : 0); audio_cpu_interrupt(data & 0x80 ? 1 : 0);
@ -729,6 +731,7 @@ void cvs_state::speech_cpu_map(address_map &map)
} }
/************************************* /*************************************
* *
* Standard CVS port definitions * Standard CVS port definitions
@ -1183,7 +1186,6 @@ void cvs_state::cvs(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &cvs_state::main_cpu_map); m_maincpu->set_addrmap(AS_PROGRAM, &cvs_state::main_cpu_map);
m_maincpu->set_addrmap(AS_IO, &cvs_state::main_cpu_io_map); m_maincpu->set_addrmap(AS_IO, &cvs_state::main_cpu_io_map);
m_maincpu->set_addrmap(AS_DATA, &cvs_state::main_cpu_data_map); m_maincpu->set_addrmap(AS_DATA, &cvs_state::main_cpu_data_map);
m_maincpu->set_vblank_int("screen", FUNC(cvs_state::main_cpu_interrupt));
m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank)); m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank));
m_maincpu->flag_handler().set([this] (int state) { m_ram_view.select(state); }); m_maincpu->flag_handler().set([this] (int state) { m_ram_view.select(state); });
m_maincpu->intack_handler().set_constant(0x03); m_maincpu->intack_handler().set_constant(0x03);
@ -1210,6 +1212,8 @@ void cvs_state::cvs(machine_config &config)
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1000)); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1000));
m_screen->set_screen_update(FUNC(cvs_state::screen_update)); m_screen->set_screen_update(FUNC(cvs_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(cvs_state::main_cpu_interrupt));
m_screen->screen_vblank().append(FUNC(cvs_state::scroll_start));
S2636(config, m_s2636[0], 0); S2636(config, m_s2636[0], 0);
m_s2636[0]->set_offsets(CVS_S2636_Y_OFFSET, CVS_S2636_X_OFFSET); m_s2636[0]->set_offsets(CVS_S2636_Y_OFFSET, CVS_S2636_X_OFFSET);
@ -1237,6 +1241,7 @@ void cvs_state::cvs(machine_config &config)
} }
/************************************* /*************************************
* *
* ROM definitions * ROM definitions
@ -1250,6 +1255,7 @@ void cvs_state::cvs(machine_config &config)
ROM_REGION( 0x0820, "proms", 0 ) \ ROM_REGION( 0x0820, "proms", 0 ) \
ROM_LOAD( "82s185.10h", 0x0000, 0x0800, CRC(c205bca6) SHA1(ec9bd220e75f7b067ede6139763ef8aca0fb7a29) ) \ ROM_LOAD( "82s185.10h", 0x0000, 0x0800, CRC(c205bca6) SHA1(ec9bd220e75f7b067ede6139763ef8aca0fb7a29) ) \
ROM_LOAD( "82s123.10k", 0x0800, 0x0020, CRC(b5221cec) SHA1(71d9830b33b1a8140b0fe1a2ba8024ba8e6e48e0) ) ROM_LOAD( "82s123.10k", 0x0800, 0x0020, CRC(b5221cec) SHA1(71d9830b33b1a8140b0fe1a2ba8024ba8e6e48e0) )
#define CVS_ROM_REGION_SPEECH_DATA(name, len, hash) \ #define CVS_ROM_REGION_SPEECH_DATA(name, len, hash) \
ROM_REGION( 0x1000, "speechdata", 0 ) \ ROM_REGION( 0x1000, "speechdata", 0 ) \
ROM_LOAD( name, 0x0000, len, hash ) ROM_LOAD( name, 0x0000, len, hash )
@ -1745,6 +1751,7 @@ ROM_START( huncholy )
ROM_END ROM_END
/************************************* /*************************************
* *
* Game specific initialization * Game specific initialization
@ -1841,6 +1848,7 @@ void cvs_state::init_huncholy()
} // anonymous namespace } // anonymous namespace
/************************************* /*************************************
* *
* Game drivers * Game drivers

View File

@ -39,9 +39,10 @@ uint8_t cvs_base_state::collision_clear_r()
// cvs stars hardware // cvs stars hardware
void cvs_base_state::scroll_start() void cvs_base_state::scroll_start(int state)
{ {
m_stars_scroll++; if (state)
m_stars_scroll++;
} }
void cvs_base_state::init_stars() void cvs_base_state::init_stars()

View File

@ -75,7 +75,7 @@ protected:
uint8_t collision_r(); uint8_t collision_r();
uint8_t collision_clear_r(); uint8_t collision_clear_r();
void scroll_start(); void scroll_start(int state);
void init_stars() ATTR_COLD; void init_stars() ATTR_COLD;
void update_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, const pen_t star_pen, bool update_always); void update_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, const pen_t star_pen, bool update_always);
}; };

View File

@ -110,7 +110,6 @@ protected:
tilemap_t *m_bg_tilemap = nullptr; tilemap_t *m_bg_tilemap = nullptr;
template <uint8_t Which> void video_w(offs_t offset, uint8_t data); template <uint8_t Which> void video_w(offs_t offset, uint8_t data);
void vblank_irq(int state);
void data_map(address_map &map) ATTR_COLD; void data_map(address_map &map) ATTR_COLD;
void io_map(address_map &map) ATTR_COLD; void io_map(address_map &map) ATTR_COLD;
@ -372,16 +371,6 @@ uint32_t astrowar_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
} }
void galaxia_state::vblank_irq(int state)
{
if (state)
{
m_maincpu->set_input_line(0, ASSERT_LINE);
scroll_start();
}
}
/******************************************************************************* /*******************************************************************************
I/O I/O
@ -587,7 +576,8 @@ void galaxia_state::galaxia(machine_config &config)
m_screen->set_visarea(0*8, 30*8-1, 2*8, 32*8-1); m_screen->set_visarea(0*8, 30*8-1, 2*8, 32*8-1);
m_screen->set_screen_update(FUNC(galaxia_state::screen_update)); m_screen->set_screen_update(FUNC(galaxia_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(galaxia_state::vblank_irq)); m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
m_screen->screen_vblank().append(FUNC(galaxia_state::scroll_start));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxia); GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxia);
PALETTE(config, m_palette, FUNC(galaxia_state::palette), 0x18+2); PALETTE(config, m_palette, FUNC(galaxia_state::palette), 0x18+2);
@ -628,7 +618,8 @@ void astrowar_state::astrowar(machine_config &config)
m_screen->set_visarea(1*8, 31*8-1, 2*8, 32*8-1); m_screen->set_visarea(1*8, 31*8-1, 2*8, 32*8-1);
m_screen->set_screen_update(FUNC(astrowar_state::screen_update)); m_screen->set_screen_update(FUNC(astrowar_state::screen_update));
m_screen->set_palette(m_palette); m_screen->set_palette(m_palette);
m_screen->screen_vblank().set(FUNC(astrowar_state::vblank_irq)); m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
m_screen->screen_vblank().append(FUNC(astrowar_state::scroll_start));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrowar); GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrowar);
PALETTE(config, m_palette, FUNC(astrowar_state::palette), 0x18+2); PALETTE(config, m_palette, FUNC(astrowar_state::palette), 0x18+2);