Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/devices/video/315_5313.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2221,10 +2221,10 @@ void sega315_5313_device::render_videobuffer_to_screenbuffer(int scanline)
m_32x_scanline_helper_func(scanline);
if (!m_32x_scanline_func.isnull())
{
for (int srcx = 0, xx = 0, dstx = 0; srcx < horz; dstx++)
for (int srcx = 0, xx = 0, dstx = 0; srcx < 320; dstx++)
{
m_32x_scanline_func(srcx, m_video_renderline[srcx] & 0x20000, lineptr[dstx]);
if (++xx >= mul)
if (++xx >= 4)
{
srcx++;
xx = 0;
Expand Down
6 changes: 3 additions & 3 deletions src/mame/sega/mdconsole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ void md_cons_state::_32x_scanline_helper_callback(int scanline)

void md_cons_state::genesis_32x(machine_config &config)
{
md_ntsc(config);
md_ntsc(config, true);

m_vdp->set_md_32x_scanline(FUNC(md_cons_state::_32x_scanline_callback));
m_vdp->set_md_32x_scanline_helper(FUNC(md_cons_state::_32x_scanline_helper_callback));
Expand Down Expand Up @@ -468,7 +468,7 @@ void md_cons_state::genesis_32x(machine_config &config)

void md_cons_state::mdj_32x(machine_config &config)
{
md_ntsc(config);
md_ntsc(config, true);

m_vdp->set_md_32x_scanline(FUNC(md_cons_state::_32x_scanline_callback));
m_vdp->set_md_32x_scanline_helper(FUNC(md_cons_state::_32x_scanline_helper_callback));
Expand Down Expand Up @@ -503,7 +503,7 @@ void md_cons_state::mdj_32x(machine_config &config)

void md_cons_state::md_32x(machine_config &config)
{
md_pal(config);
md_pal(config, true);

m_vdp->set_md_32x_scanline(FUNC(md_cons_state::_32x_scanline_callback));
m_vdp->set_md_32x_scanline_helper(FUNC(md_cons_state::_32x_scanline_helper_callback));
Expand Down
36 changes: 18 additions & 18 deletions src/mame/sega/megadriv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,7 @@ void md_core_state::megadriv_timers(machine_config &config)
TIMER(config, m_scan_timer).configure_generic(m_vdp, FUNC(sega315_5313_device::megadriv_scanline_timer_callback));
}

void md_core_state::md_core_ntsc(machine_config &config)
void md_core_state::md_core_ntsc(machine_config &config, bool use_lcm_scaling)
{
M68000(config, m_maincpu, MASTER_CLOCK_NTSC / 7); // 7.67 MHz
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &md_core_state::cpu_space_map);
Expand All @@ -761,22 +761,22 @@ void md_core_state::md_core_ntsc(machine_config &config)
megadriv_timers(config);

SEGA315_5313(config, m_vdp, MASTER_CLOCK_NTSC, m_maincpu);
m_vdp->set_lcm_scaling(use_lcm_scaling);
m_vdp->set_is_pal(false);
m_vdp->vint_cb().set(FUNC(md_core_state::vdp_vint_cb));
m_vdp->hint_cb().set(FUNC(md_core_state::vdp_hint_cb));
m_vdp->set_screen("megadriv");

SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(MASTER_CLOCK_NTSC / 10 / 262 / 342); // same as SMS?
// m_screen->set_refresh_hz(double(MASTER_CLOCK_NTSC) / 8 / 262 / 427); // or 427 Htotal?
m_screen->set_refresh_hz(MASTER_CLOCK_NTSC / 3420 / 262); // 3420 clock per scanline
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually.
m_screen->set_size(64*8, 620);
m_screen->set_visarea(0, 32*8-1, 0, 28*8-1);
m_screen->set_size(64 * 8 * (use_lcm_scaling ? 5 : 1), 620);
m_screen->set_visarea(0, (32 * 8 * (use_lcm_scaling ? 5 : 1)) - 1, 0, 28 * 8-1);
m_screen->set_screen_update(FUNC(md_core_state::screen_update_megadriv)); /* Copies a bitmap */
m_screen->screen_vblank().set(FUNC(md_core_state::screen_vblank_megadriv)); /* Used to Sync the timing */
}

void md_core_state::md_core_pal(machine_config &config)
void md_core_state::md_core_pal(machine_config &config, bool use_lcm_scaling)
{
M68000(config, m_maincpu, MASTER_CLOCK_PAL / 7); // 7.67 MHz
m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &md_core_state::cpu_space_map);
Expand All @@ -785,17 +785,17 @@ void md_core_state::md_core_pal(machine_config &config)
megadriv_timers(config);

SEGA315_5313(config, m_vdp, MASTER_CLOCK_PAL, m_maincpu);
m_vdp->set_lcm_scaling(use_lcm_scaling);
m_vdp->set_is_pal(true);
m_vdp->vint_cb().set(FUNC(md_core_state::vdp_vint_cb));
m_vdp->hint_cb().set(FUNC(md_core_state::vdp_hint_cb));
m_vdp->set_screen("megadriv");

SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(MASTER_CLOCK_PAL / 10 / 313 / 342); // same as SMS?
// m_screen->set_refresh_hz(MASTER_CLOCK_PAL / 8 / 313 / 423); // or 423 Htotal?
m_screen->set_refresh_hz(MASTER_CLOCK_PAL / 3420 / 313); // 3420 clock per scanline
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); // Vblank handled manually.
m_screen->set_size(64*8, 620);
m_screen->set_visarea(0, 32*8-1, 0, 28*8-1);
m_screen->set_size(64 * 8 * (use_lcm_scaling ? 5 : 1), 620);
m_screen->set_visarea(0, (32*8 * (use_lcm_scaling ? 5 : 1)) - 1, 0, 28 * 8 - 1);
m_screen->set_screen_update(FUNC(md_core_state::screen_update_megadriv)); /* Copies a bitmap */
m_screen->screen_vblank().set(FUNC(md_core_state::screen_vblank_megadriv)); /* Used to Sync the timing */
}
Expand Down Expand Up @@ -843,9 +843,9 @@ void md_ctrl_state::ctrl2_6button(machine_config &config)
}


void md_base_state::md_ntsc(machine_config &config)
void md_base_state::md_ntsc(machine_config &config, bool use_lcm_scaling)
{
md_core_ntsc(config);
md_core_ntsc(config, use_lcm_scaling);

m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_68k_map);

Expand All @@ -870,9 +870,9 @@ void md_base_state::md_ntsc(machine_config &config)
m_ymsnd->add_route(1, "speaker", 0.50, 1);
}

void md_base_state::md2_ntsc(machine_config &config)
void md_base_state::md2_ntsc(machine_config &config, bool use_lcm_scaling)
{
md_ntsc(config);
md_ntsc(config, use_lcm_scaling);

// Internalized YM3438 in VDP ASIC
YM3438(config.replace(), m_ymsnd, MASTER_CLOCK_NTSC / 7); // 7.67 MHz
Expand All @@ -882,9 +882,9 @@ void md_base_state::md2_ntsc(machine_config &config)

/************ PAL hardware has a different master clock *************/

void md_base_state::md_pal(machine_config &config)
void md_base_state::md_pal(machine_config &config, bool use_lcm_scaling)
{
md_core_pal(config);
md_core_pal(config, use_lcm_scaling);

m_maincpu->set_addrmap(AS_PROGRAM, &md_base_state::megadriv_68k_map);

Expand All @@ -908,9 +908,9 @@ void md_base_state::md_pal(machine_config &config)
m_ymsnd->add_route(1, "speaker", 0.50, 1);
}

void md_base_state::md2_pal(machine_config &config)
void md_base_state::md2_pal(machine_config &config, bool use_lcm_scaling)
{
md_pal(config);
md_pal(config, use_lcm_scaling);

// Internalized YM3438 in VDP ASIC
YM3438(config.replace(), m_ymsnd, MASTER_CLOCK_PAL / 7); /* 7.67 MHz */
Expand Down
13 changes: 6 additions & 7 deletions src/mame/sega/megadriv.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ class md_core_state : public driver_device

virtual void machine_reset() override ATTR_COLD;

void md_core_ntsc(machine_config &config);
void md_core_pal(machine_config &config);
void md_core_ntsc(machine_config &config, bool use_lcm_scaling = false);
void md_core_pal(machine_config &config, bool use_lcm_scaling = false);

void megadriv_tas_callback(offs_t offset, uint8_t data);

Expand Down Expand Up @@ -110,11 +110,10 @@ class md_base_state : public md_core_state

void megadriv_stop_scanline_timer();

void md_ntsc(machine_config &config);
void md2_ntsc(machine_config &config);
void md_pal(machine_config &config);
void md2_pal(machine_config &config);
void md_bootleg(machine_config &config);
void md_ntsc(machine_config &config, bool use_lcm_scaling = false);
void md2_ntsc(machine_config &config, bool use_lcm_scaling = false);
void md_pal(machine_config &config, bool use_lcm_scaling = false);
void md2_pal(machine_config &config, bool use_lcm_scaling = false);

virtual void machine_start() override ATTR_COLD;
virtual void machine_reset() override ATTR_COLD;
Expand Down
Loading