pc_vga: Use device_video_interface and configured screens instead of first_screen (nw)

This commit is contained in:
AJR 2018-03-03 15:19:44 -05:00
parent 128343eb7c
commit 17fff85189
16 changed files with 59 additions and 35 deletions

View File

@ -38,6 +38,7 @@ MACHINE_CONFIG_START(isa16_svga_cirrus_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5430, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------
@ -119,6 +120,7 @@ MACHINE_CONFIG_START(isa16_svga_cirrus_gd542x_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -48,6 +48,7 @@ MACHINE_CONFIG_START(isa16_svga_s3_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", S3_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------
@ -155,6 +156,7 @@ MACHINE_CONFIG_START(isa16_s3virge_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", S3VIRGE, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------
@ -237,6 +239,7 @@ MACHINE_CONFIG_START(isa16_s3virgedx_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", S3VIRGEDX, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------
@ -320,6 +323,7 @@ MACHINE_CONFIG_START(isa16_stealth3d2kpro_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", S3VIRGEDX1, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -38,6 +38,7 @@ MACHINE_CONFIG_START(isa16_svga_tgui9680_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", TRIDENT_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -37,6 +37,7 @@ MACHINE_CONFIG_START(isa8_svga_et4k_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", TSENG_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -34,6 +34,7 @@ MACHINE_CONFIG_START(isa8_vga_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -84,6 +84,7 @@ MACHINE_CONFIG_START(isa16_vga_gfxultra_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", ATI_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(isa16_vga_gfxultrapro_device::device_add_mconfig)
@ -94,6 +95,7 @@ MACHINE_CONFIG_START(isa16_vga_gfxultrapro_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", ATIMACH32, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(isa16_vga_mach64_device::device_add_mconfig)
@ -104,6 +106,7 @@ MACHINE_CONFIG_START(isa16_vga_mach64_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", ATIMACH64, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
//-------------------------------------------------

View File

@ -166,6 +166,7 @@ MACHINE_CONFIG_START(i82371sb_isa_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
// end-VGA-HACK
MACHINE_CONFIG_END

View File

@ -132,8 +132,8 @@ DEFINE_DEVICE_TYPE(MACH8, mach8_device, "mach8", "Mach8")
vga_device::vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, device_video_interface(mconfig, *this)
, m_palette(*this, "^palette")
, m_screen(*this,"^screen")
{
}
@ -224,7 +224,7 @@ TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
{
vga.crtc.start_addr = vga.crtc.start_addr_latch;
vga.attribute.pel_shift = vga.attribute.pel_shift_latch;
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
m_vblank_timer->adjust( screen().time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
}
TIMER_CALLBACK_MEMBER(s3_vga_device::vblank_timer_cb)
@ -235,7 +235,7 @@ TIMER_CALLBACK_MEMBER(s3_vga_device::vblank_timer_cb)
else
vga.crtc.start_addr = vga.crtc.start_addr_latch;
vga.attribute.pel_shift = vga.attribute.pel_shift_latch;
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
m_vblank_timer->adjust( screen().time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
}
void vga_device::device_start()
@ -463,7 +463,7 @@ void vga_device::vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect)
pen_t pen;
if(vga.crtc.cursor_enable)
vga.cursor.visible = machine().first_screen()->frame_number() & 0x10;
vga.cursor.visible = screen().frame_number() & 0x10;
else
vga.cursor.visible = 0;
@ -476,7 +476,7 @@ void vga_device::vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect)
attr = vga.memory[(pos<<1) + 1];
font_base = 0x20000+(ch<<5);
font_base += ((attr & 8) ? vga.sequencer.char_sel.A : vga.sequencer.char_sel.B)*0x2000;
blink_en = (vga.attribute.data[0x10]&8&&machine().first_screen()->frame_number() & 0x20) ? attr & 0x80 : 0;
blink_en = (vga.attribute.data[0x10]&8&&screen().frame_number() & 0x20) ? attr & 0x80 : 0;
fore_col = attr & 0xf;
back_col = (attr & 0x70) >> 4;
@ -494,7 +494,7 @@ void vga_device::vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect)
else
pen = vga.pens[back_col];
if(!machine().first_screen()->visible_area().contains(column*width+w, line+h))
if(!screen().visible_area().contains(column*width+w, line+h))
continue;
bitmapline[column*width+w] = pen;
@ -507,7 +507,7 @@ void vga_device::vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect)
else
pen = vga.pens[back_col];
if(!machine().first_screen()->visible_area().contains(column*width+w, line+h))
if(!screen().visible_area().contains(column*width+w, line+h))
continue;
bitmapline[column*width+w] = pen;
}
@ -518,7 +518,7 @@ void vga_device::vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect)
(h<=vga.crtc.cursor_scan_end)&&(h<height)&&(line+h<TEXT_LINES);
h++)
{
if(!machine().first_screen()->visible_area().contains(column*width, line+h))
if(!screen().visible_area().contains(column*width, line+h))
continue;
bitmap.plot_box(column*width, line+h, width, 1, vga.pens[attr&0xf]);
}
@ -563,7 +563,7 @@ void vga_device::vga_vh_ega(bitmap_rgb32 &bitmap, const rectangle &cliprect)
data[2]>>=1;
data[3]>>=1;
if(!machine().first_screen()->visible_area().contains(c+i-pel_shift, line + yi))
if(!screen().visible_area().contains(c+i-pel_shift, line + yi))
continue;
bitmapline[c+i-pel_shift] = pen;
}
@ -610,7 +610,7 @@ void vga_device::vga_vh_vga(bitmap_rgb32 &bitmap, const rectangle &cliprect)
for(xi=0;xi<8;xi++)
{
if(!machine().first_screen()->visible_area().contains(c+xi-(pel_shift), line + yi))
if(!screen().visible_area().contains(c+xi-(pel_shift), line + yi))
continue;
bitmapline[c+xi-(pel_shift)] = m_palette->pen(vga.memory[(pos & 0xffff)+((xi >> 1)*0x10000)]);
}
@ -637,7 +637,7 @@ void vga_device::vga_vh_vga(bitmap_rgb32 &bitmap, const rectangle &cliprect)
for(xi=0;xi<0x10;xi++)
{
if(!machine().first_screen()->visible_area().contains(c+xi-(pel_shift), line + yi))
if(!screen().visible_area().contains(c+xi-(pel_shift), line + yi))
continue;
bitmapline[c+xi-pel_shift] = m_palette->pen(vga.memory[(pos+(xi >> 1)) & 0xffff]);
}
@ -671,7 +671,7 @@ void vga_device::vga_vh_cga(bitmap_rgb32 &bitmap, const rectangle &cliprect)
for(xi=0;xi<4;xi++)
{
pen = vga.pens[(vga.memory[addr] >> (6-xi*2)) & 3];
if(!machine().first_screen()->visible_area().contains(x+xi, y * height + yi))
if(!screen().visible_area().contains(x+xi, y * height + yi))
continue;
bitmapline[x+xi] = pen;
}
@ -706,7 +706,7 @@ void vga_device::vga_vh_mono(bitmap_rgb32 &bitmap, const rectangle &cliprect)
for(xi=0;xi<8;xi++)
{
pen = vga.pens[(vga.memory[addr] >> (7-xi)) & 1];
if(!machine().first_screen()->visible_area().contains(x+xi, y * height + yi))
if(!screen().visible_area().contains(x+xi, y * height + yi))
continue;
bitmapline[x+xi] = pen;
}
@ -757,7 +757,7 @@ void svga_device::svga_vh_rgb8(bitmap_rgb32 &bitmap, const rectangle &cliprect)
for(xi=0;xi<8;xi++)
{
if(!machine().first_screen()->visible_area().contains(c+xi, line + yi))
if(!screen().visible_area().contains(c+xi, line + yi))
continue;
bitmapline[c+xi] = m_palette->pen(vga.memory[(pos+(xi))]);
}
@ -796,7 +796,7 @@ void svga_device::svga_vh_rgb15(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int r,g,b;
if(!machine().first_screen()->visible_area().contains(c+xi, line + yi))
if(!screen().visible_area().contains(c+xi, line + yi))
continue;
r = (MV(pos+xm)&0x7c00)>>10;
@ -840,7 +840,7 @@ void svga_device::svga_vh_rgb16(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int r,g,b;
if(!machine().first_screen()->visible_area().contains(c+xi, line + yi))
if(!screen().visible_area().contains(c+xi, line + yi))
continue;
r = (MV(pos+xm)&0xf800)>>11;
@ -884,7 +884,7 @@ void svga_device::svga_vh_rgb24(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int r,g,b;
if(!machine().first_screen()->visible_area().contains(c+xi, line + yi))
if(!screen().visible_area().contains(c+xi, line + yi))
continue;
r = (MD(pos+xm)&0xff0000)>>16;
@ -925,7 +925,7 @@ void svga_device::svga_vh_rgb32(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int r,g,b;
if(!machine().first_screen()->visible_area().contains(c+xi, line + yi))
if(!screen().visible_area().contains(c+xi, line + yi))
continue;
r = (MD(pos+xm)&0xff0000)>>16;
@ -1412,9 +1412,9 @@ void vga_device::recompute_params_clock(int divisor, int xtal)
pixel_clock = xtal / (((vga.sequencer.data[1]&8) >> 3) + 1);
refresh = HZ_TO_ATTOSECONDS(pixel_clock) * (hblank_period) * vblank_period;
machine().first_screen()->configure((hblank_period), (vblank_period), visarea, refresh );
screen().configure((hblank_period), (vblank_period), visarea, refresh );
//popmessage("%d %d\n",vga.crtc.horz_total * 8,vga.crtc.vert_total);
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
m_vblank_timer->adjust( screen().time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
}
void vga_device::recompute_params()
@ -1603,7 +1603,7 @@ uint8_t vga_device::vga_vblank()
res = 0;
vblank_start = vga.crtc.vert_blank_start;
vblank_end = vga.crtc.vert_blank_start + vga.crtc.vert_blank_end;
vpos = machine().first_screen()->vpos();
vpos = screen().vpos();
/* check if we are under vblank period */
if(vblank_end > vga.crtc.vert_total)
@ -1639,8 +1639,8 @@ READ8_MEMBER(vga_device::vga_crtc_r)
vga.attribute.state = 0;
data = 0;
hsync = machine().first_screen()->hblank() & 1;
vsync = vga_vblank(); //machine().first_screen()->vblank() & 1;
hsync = screen().hblank() & 1;
vsync = vga_vblank(); //screen().vblank() & 1;
data |= (hsync | vsync) & 1; // DD - display disable register
data |= (vsync & 1) << 3; // VRetrace register
@ -1691,10 +1691,10 @@ WRITE8_MEMBER(vga_device::vga_crtc_w)
}
crtc_reg_write(vga.crtc.index,data);
//machine().first_screen()->update_partial(machine().first_screen()->vpos());
//screen().update_partial(screen().vpos());
#if 0
if((vga.crtc.index & 0xfe) != 0x0e)
printf("%02x %02x %d\n",vga.crtc.index,data,machine().first_screen()->vpos());
printf("%02x %02x %d\n",vga.crtc.index,data,screen().vpos());
#endif
break;
@ -2583,7 +2583,7 @@ WRITE8_MEMBER(tseng_vga_device::port_03d0_w)
vga.crtc.data[vga.crtc.index] = data;
tseng_crtc_reg_write(vga.crtc.index,data);
//if((vga.crtc.index & 0xfe) != 0x0e)
// printf("%02x %02x %d\n",vga.crtc.index,data,machine().first_screen()->vpos());
// printf("%02x %02x %d\n",vga.crtc.index,data,screen().vpos());
break;
case 8:
et4k.reg_3d8 = data;
@ -5271,11 +5271,11 @@ READ8_MEMBER(ati_vga_device::ati_port_ext_r)
logerror("ATI20 read\n");
break;
case 0x28: // Vertical line counter (high)
ret = (machine().first_screen()->vpos() >> 8) & 0x03;
ret = (screen().vpos() >> 8) & 0x03;
logerror("ATI28 (vertical line high) read\n");
break;
case 0x29: // Vertical line counter (low)
ret = machine().first_screen()->vpos() & 0xff; // correct?
ret = screen().vpos() & 0xff; // correct?
logerror("ATI29 (vertical line low) read\n");
break;
case 0x2a:

View File

@ -15,7 +15,7 @@
// ======================> vga_device
class vga_device : public device_t
class vga_device : public device_t, public device_video_interface
{
friend class ibm8514a_device;
@ -231,7 +231,6 @@ protected:
emu_timer *m_vblank_timer;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
};

View File

@ -193,6 +193,7 @@ MACHINE_CONFIG_START(bebox_state::bebox)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ym3812", YM3812, 3579545)

View File

@ -481,6 +481,7 @@ MACHINE_CONFIG_START(gambl186_state::gambl186)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
MCFG_VIDEO_SET_SCREEN("screen")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -91,6 +91,7 @@ MACHINE_CONFIG_START(gaminator_state::gaminator)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", GAMTOR_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
/* unknown sound */

View File

@ -322,6 +322,7 @@ MACHINE_CONFIG_START(photoply_state::photoply)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5446, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_EEPROM_WRITE_TIME(attotime::from_usec(1))

View File

@ -371,6 +371,7 @@ MACHINE_CONFIG_START(pntnpuzl_state::pntnpuzl)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
ROM_START( pntnpuzl )

View File

@ -239,6 +239,7 @@ private:
rgb_t yuv_to_rgb(int y, int u, int v) const;
virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override;
std::string m_screen_tag;
int m_extcnt;
uint8_t m_extreg;
uint8_t m_interlace;
@ -251,10 +252,11 @@ DEFINE_DEVICE_TYPE(VIS_VGA, vis_vga_device, "vis_vga", "vis_vga")
vis_vga_device::vis_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: svga_device(mconfig, VIS_VGA, tag, owner, clock),
device_isa16_card_interface(mconfig, *this)
device_isa16_card_interface(mconfig, *this),
m_screen_tag(subtag("screen"))
{
m_palette.set_tag("palette");
m_screen.set_tag("screen");
set_screen(m_screen_tag.c_str());
}
MACHINE_CONFIG_START(vis_vga_device::device_add_mconfig)
@ -287,9 +289,9 @@ void vis_vga_device::recompute_params()
pixel_clock = xtal.value() / (((vga.sequencer.data[1]&8) >> 3) + 1);
refresh = HZ_TO_ATTOSECONDS(pixel_clock) * (hblank_period) * vblank_period;
machine().first_screen()->configure((hblank_period), (vblank_period), visarea, refresh );
screen().configure((hblank_period), (vblank_period), visarea, refresh );
//popmessage("%d %d\n",vga.crtc.horz_total * 8,vga.crtc.vert_total);
m_vblank_timer->adjust( machine().first_screen()->time_until_pos((vga.crtc.vert_blank_start + vga.crtc.vert_blank_end)) );
m_vblank_timer->adjust( screen().time_until_pos((vga.crtc.vert_blank_start + vga.crtc.vert_blank_end)) );
}
rgb_t vis_vga_device::yuv_to_rgb(int y, int u, int v) const
@ -327,7 +329,7 @@ void vis_vga_device::vga_vh_yuv8(bitmap_rgb32 &bitmap, const rectangle &cliprect
for(int xi=0;xi<8;xi+=4)
{
if(!m_screen->visible_area().contains(col+xi, line + yi))
if(!screen().visible_area().contains(col+xi, line + yi))
continue;
uint8_t a = vga.memory[pos + xi], b = vga.memory[pos + xi + 1];
uint8_t c = vga.memory[pos + xi + 2], d = vga.memory[pos + xi + 3];

View File

@ -147,6 +147,7 @@ MACHINE_CONFIG_START(pcat_base_state::pcvideo_vga)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(pcat_base_state::pcvideo_trident_vga)
@ -156,6 +157,7 @@ MACHINE_CONFIG_START(pcat_base_state::pcvideo_trident_vga)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", TRIDENT_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(pcat_base_state::pcvideo_s3_vga)
@ -165,6 +167,7 @@ MACHINE_CONFIG_START(pcat_base_state::pcvideo_s3_vga)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", S3_VGA, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
@ -175,6 +178,7 @@ MACHINE_CONFIG_START(pcat_base_state::pcvideo_cirrus_gd5428)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5428, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(pcat_base_state::pcvideo_cirrus_gd5430)
@ -184,6 +188,7 @@ MACHINE_CONFIG_START(pcat_base_state::pcvideo_cirrus_gd5430)
MCFG_PALETTE_ADD("palette", 0x100)
MCFG_DEVICE_ADD("vga", CIRRUS_GD5430, 0)
MCFG_VIDEO_SET_SCREEN("screen")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(pcat_base_state::pcat_common)