vga: made video RAM size configurable at machine configuration (#9289)

This commit is contained in:
Ivan Vangelista 2022-02-10 04:03:14 +01:00 committed by GitHub
parent c49b3026a1
commit 553c256108
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 100 additions and 54 deletions

View File

@ -115,9 +115,6 @@ void mach32_device::device_start()
{
ati_vga_device::device_start();
ati.vga_chip_id = 0x00; // correct?
vga.svga_intf.vram_size = 0x400000;
vga.memory.resize(vga.svga_intf.vram_size);
memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
}
void mach32_device::device_reset()

View File

@ -75,10 +75,10 @@ void s3virge_vga_device::device_start()
vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.seq_regcount = 0x1c;
vga.svga_intf.crtc_regcount = 0x19;
vga.svga_intf.vram_size = 0x400000;
vga.memory.resize(vga.svga_intf.vram_size);
vga.memory = std::make_unique<uint8_t []>(vga.svga_intf.vram_size);
memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
save_item(vga.memory,"Video RAM");
save_pointer(vga.memory, "Video RAM", vga.svga_intf.vram_size);
save_item(vga.crtc.data,"CRTC Registers");
save_item(vga.sequencer.data,"Sequencer Registers");
save_item(vga.attribute.data,"Attribute Registers");

View File

@ -36,7 +36,9 @@ void isa16_svga_cirrus_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(cirrus_gd5430_device::screen_update));
CIRRUS_GD5430(config, m_vga, 0).set_screen("screen");
CIRRUS_GD5430(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x200000);
}
//-------------------------------------------------
@ -114,7 +116,9 @@ void isa16_svga_cirrus_gd542x_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update("vga", FUNC(cirrus_gd5428_device::screen_update));
CIRRUS_GD5428(config, m_vga, 0).set_screen("screen");
CIRRUS_GD5428(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x200000);
}
//-------------------------------------------------

View File

@ -57,7 +57,9 @@ void isa16_svga_s3_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(s3_vga_device::screen_update));
S3_VGA(config, m_vga, 0).set_screen("screen");
S3_VGA(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x100000);
}
//-------------------------------------------------
@ -160,7 +162,9 @@ void isa16_s3virge_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(s3virge_vga_device::screen_update));
S3VIRGE(config, m_vga, 0).set_screen("screen");
S3VIRGE(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
m_vga->linear_config_changed().set(FUNC(isa16_s3virge_device::linear_config_changed_w));
}
@ -250,7 +254,9 @@ void isa16_s3virgedx_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(s3virgedx_vga_device::screen_update));
S3VIRGEDX(config, m_vga, 0).set_screen("screen");
S3VIRGEDX(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
m_vga->linear_config_changed().set(FUNC(isa16_s3virgedx_device::linear_config_changed_w));
}
@ -364,7 +370,9 @@ void isa16_stealth3d2kpro_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(s3virgedx_rev1_vga_device::screen_update));
S3VIRGEDX1(config, m_vga, 0).set_screen("screen");
S3VIRGEDX1(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
m_vga->linear_config_changed().set(FUNC(isa16_stealth3d2kpro_device::linear_config_changed_w));
}

View File

@ -36,7 +36,9 @@ void isa16_svga_tgui9680_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(trident_vga_device::screen_update));
TRIDENT_VGA(config, m_vga, 0).set_screen("screen");
TRIDENT_VGA(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x200000);
}
//-------------------------------------------------

View File

@ -35,7 +35,9 @@ void isa8_svga_et4k_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(tseng_vga_device::screen_update));
TSENG_VGA(config, m_vga, 0).set_screen("screen");
TSENG_VGA(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x100000);
}
//-------------------------------------------------

View File

@ -160,8 +160,7 @@ void trident_vga_device::device_start()
{
zero();
int i;
for (i = 0; i < 0x100; i++)
for (int i = 0; i < 0x100; i++)
set_pen_color(i, 0, 0, 0);
// Avoid an infinite loop when displaying. 0 is not possible anyway.
@ -170,11 +169,10 @@ void trident_vga_device::device_start()
// copy over interfaces
vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.vram_size = 0x200000;
vga.memory.resize(vga.svga_intf.vram_size);
vga.memory = std::make_unique<uint8_t []>(vga.svga_intf.vram_size);
memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
save_item(NAME(vga.memory));
save_pointer(NAME(vga.memory), vga.svga_intf.vram_size);
save_pointer(vga.crtc.data,"CRTC Registers",0x100);
save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
save_pointer(vga.attribute.data,"Attribute Registers", 0x15);

View File

@ -33,7 +33,9 @@ void isa8_vga_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(vga_device::screen_update));
VGA(config, m_vga, 0).set_screen("screen");
VGA(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x100000);
}
//-------------------------------------------------

View File

@ -82,7 +82,9 @@ void isa16_vga_gfxultra_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(ati_vga_device::screen_update));
ATI_VGA(config, m_vga, 0).set_screen("screen");
ATI_VGA(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x100000);
}
void isa16_vga_gfxultrapro_device::device_add_mconfig(machine_config &config)
@ -91,7 +93,9 @@ void isa16_vga_gfxultrapro_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(mach32_device::screen_update));
ATIMACH32(config, m_vga, 0).set_screen("screen");
ATIMACH32(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
}
void isa16_vga_mach64_device::device_add_mconfig(machine_config &config)
@ -100,7 +104,9 @@ void isa16_vga_mach64_device::device_add_mconfig(machine_config &config)
screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480);
screen.set_screen_update(m_vga, FUNC(mach64_device::screen_update));
ATIMACH64(config, m_vga, 0).set_screen("screen");
ATIMACH64(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
}

View File

@ -70,8 +70,7 @@ void cirrus_gd5428_device::device_start()
{
zero();
int i;
for (i = 0; i < 0x100; i++)
for (int i = 0; i < 0x100; i++)
set_pen_color(i, 0, 0, 0);
// Avoid an infinite loop when displaying. 0 is not possible anyway.
@ -81,11 +80,10 @@ void cirrus_gd5428_device::device_start()
vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.seq_regcount = 0x1f;
vga.svga_intf.crtc_regcount = 0x2d;
vga.svga_intf.vram_size = 0x200000;
vga.memory.resize(vga.svga_intf.vram_size);
vga.memory = std::make_unique<uint8_t []>(vga.svga_intf.vram_size);
memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
save_item(NAME(vga.memory));
save_pointer(NAME(vga.memory), vga.svga_intf.vram_size);
save_pointer(vga.crtc.data,"CRTC Registers",0x100);
save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
save_pointer(vga.attribute.data,"Attribute Registers", 0x15);

View File

@ -204,8 +204,8 @@ mach8_device::mach8_device(const machine_config &mconfig, const char *tag, devic
// zero everything, keep vtbls
void vga_device::zero()
{
memset(&vga.svga_intf, 0, sizeof(vga.svga_intf));
vga.memory.resize(0);
vga.svga_intf.seq_regcount = 0;
vga.svga_intf.crtc_regcount = 0;
memset(vga.pens, 0, sizeof(vga.pens));
vga.miscellaneous_output = 0;
vga.feature_control = 0;
@ -246,8 +246,7 @@ void vga_device::device_start()
{
zero();
int i;
for (i = 0; i < 0x100; i++)
for (int i = 0; i < 0x100; i++)
set_pen_color(i, 0, 0, 0);
// Avoid an infinite loop when displaying. 0 is not possible anyway.
@ -258,11 +257,10 @@ void vga_device::device_start()
vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.seq_regcount = 0x05;
vga.svga_intf.crtc_regcount = 0x19;
vga.svga_intf.vram_size = 0x100000;
vga.memory.resize(vga.svga_intf.vram_size);
vga.memory = std::make_unique<uint8_t []>(vga.svga_intf.vram_size);
memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
save_item(NAME(vga.memory));
save_pointer(NAME(vga.memory), vga.svga_intf.vram_size);
save_item(NAME(vga.pens));
save_item(NAME(vga.miscellaneous_output));
@ -6621,7 +6619,6 @@ void oak_oti111_vga_device::xga_write(offs_t offset, u8 data)
void oak_oti111_vga_device::device_start()
{
svga_device::device_start();
vga.svga_intf.vram_size = 0x100000;
std::fill(std::begin(m_oak_regs), std::end(m_oak_regs), 0);
}

View File

@ -39,6 +39,7 @@ public:
virtual TIMER_CALLBACK_MEMBER(vblank_timer_cb);
void set_offset(uint16_t val) { vga.crtc.offset = val; }
void set_vram_size(size_t vram_size) { vga.svga_intf.vram_size = vram_size; }
protected:
enum
@ -122,7 +123,7 @@ protected:
int crtc_regcount;
} svga_intf;
std::vector<uint8_t> memory;
std::unique_ptr<uint8_t []> memory;
uint32_t pens[16]; /* the current 16 pens */
uint8_t miscellaneous_output;

View File

@ -272,7 +272,9 @@ void virge_pci_device::device_add_mconfig(machine_config &config)
screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(s3virge_vga_device::screen_update));
S3VIRGE(config, m_vga, 0).set_screen("screen");
S3VIRGE(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
}
void virgedx_pci_device::device_add_mconfig(machine_config &config)
@ -281,7 +283,9 @@ void virgedx_pci_device::device_add_mconfig(machine_config &config)
screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(s3virge_vga_device::screen_update));
S3VIRGEDX(config, m_vga, 0).set_screen("screen");
S3VIRGEDX(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x400000);
}

View File

@ -190,8 +190,9 @@ void bebox_state::bebox_peripherals(machine_config &config)
screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480);
screen.set_screen_update(m_vga, FUNC(cirrus_gd5428_device::screen_update));
cirrus_gd5428_device &vga(CIRRUS_GD5428(config, m_vga, 0));
vga.set_screen("screen");
CIRRUS_GD5428(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x200000);
speaker_device &speaker(SPEAKER(config, "mono"));
speaker.front_center();

View File

@ -513,7 +513,9 @@ void gambl186_state::gambl186(machine_config &config)
screen.set_raw(XTAL(25'174'800),900,0,640,526,0,480);
screen.set_screen_update("vga", FUNC(cirrus_gd5428_device::screen_update));
CIRRUS_GD5428(config, "vga", 0).set_screen("screen");
cirrus_gd5428_device &vga(CIRRUS_GD5428(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
// sound hardware
SPEAKER(config, "mono").front_center();

View File

@ -96,7 +96,9 @@ void gaminator_state::gaminator(machine_config &config)
screen.set_raw(XTAL(25'174'800),900,0,640,526,0,480);
screen.set_screen_update("vga", FUNC(gamtor_vga_device::screen_update));
GAMTOR_VGA(config, "vga", 0).set_screen("screen");
gamtor_vga_device &vga(GAMTOR_VGA(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x100000);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();

View File

@ -103,7 +103,9 @@ void konmedal020_state::gs471(machine_config &config)
screen.set_screen_update(m_vga, FUNC(vga_device::screen_update));
screen.screen_vblank().set_inputline(m_maincpu, M68K_IRQ_3);
OTI111(config, m_vga, 0).set_screen("screen");
OTI111(config, m_vga, 0);
m_vga->set_screen("screen");
m_vga->set_vram_size(0x100000);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();

View File

@ -211,7 +211,9 @@ void magtouch_state::magtouch(machine_config &config)
/* video hardware */
pcvideo_trident_vga(config);
TVGA9000_VGA(config.replace(), "vga", 0);
tvga9000_device &vga(TVGA9000_VGA(config.replace(), "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
pcat_common(config);

View File

@ -173,7 +173,9 @@ void pcat_dyn_state::pcat_dyn(machine_config &config)
/* video hardware */
pcvideo_trident_vga(config);
subdevice<screen_device>("screen")->set_refresh_hz(60);
TVGA9000_VGA(config.replace(), "vga", 0);
tvga9000_device &vga(TVGA9000_VGA(config.replace(), "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
pcat_common(config);

View File

@ -280,7 +280,10 @@ void photoply_state::photoply(machine_config &config)
screen.set_raw(XTAL(25'174'800),900,0,640,526,0,480);
screen.set_screen_update("vga", FUNC(cirrus_gd5446_device::screen_update));
CIRRUS_GD5446(config, "vga", 0).set_screen("screen");
cirrus_gd5446_device &vga(CIRRUS_GD5446(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
EEPROM_93C46_16BIT(config, "eeprom")
.write_time(attotime::from_usec(1))

View File

@ -264,6 +264,7 @@ vis_vga_device::vis_vga_device(const machine_config &mconfig, const char *tag, d
device_isa16_card_interface(mconfig, *this)
{
set_screen(*this, "screen");
set_vram_size(0x100000);
}
void vis_vga_device::device_add_mconfig(machine_config &config)

View File

@ -147,7 +147,9 @@ void pcat_base_state::pcvideo_vga(machine_config &config)
screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(vga_device::screen_update));
VGA(config, "vga", 0).set_screen("screen");
vga_device &vga(VGA(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x100000);
}
void pcat_base_state::pcvideo_trident_vga(machine_config &config)
@ -156,7 +158,9 @@ void pcat_base_state::pcvideo_trident_vga(machine_config &config)
screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(trident_vga_device::screen_update));
TRIDENT_VGA(config, "vga", 0).set_screen("screen");
trident_vga_device &vga(TRIDENT_VGA(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
}
void pcat_base_state::pcvideo_s3_vga(machine_config &config)
@ -165,7 +169,9 @@ void pcat_base_state::pcvideo_s3_vga(machine_config &config)
screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(s3_vga_device::screen_update));
S3_VGA(config, "vga", 0).set_screen("screen");
s3_vga_device &vga(S3_VGA(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x100000);
}
@ -175,7 +181,10 @@ void pcat_base_state::pcvideo_cirrus_gd5428(machine_config &config)
screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(cirrus_gd5428_device::screen_update));
CIRRUS_GD5428(config, "vga", 0).set_screen("screen");
cirrus_gd5428_device &vga(CIRRUS_GD5428(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
}
void pcat_base_state::pcvideo_cirrus_gd5430(machine_config &config)
@ -184,7 +193,10 @@ void pcat_base_state::pcvideo_cirrus_gd5430(machine_config &config)
screen.set_raw(25.1748_MHz_XTAL, 900, 0, 640, 526, 0, 480);
screen.set_screen_update("vga", FUNC(cirrus_gd5430_device::screen_update));
CIRRUS_GD5430(config, "vga", 0).set_screen("screen");
cirrus_gd5430_device &vga(CIRRUS_GD5430(config, "vga", 0));
vga.set_screen("screen");
vga.set_vram_size(0x200000);
}
void pcat_base_state::pcat_common(machine_config &config)