Merge pull request #4829 from 86Box/tc1995
Add a proper 1MB capable ATI 28800-6 BIOS
This commit is contained in:
@@ -326,6 +326,7 @@ extern const device_t ati18800_device;
|
|||||||
|
|
||||||
/* ATi 28800 */
|
/* ATi 28800 */
|
||||||
extern const device_t ati28800_device;
|
extern const device_t ati28800_device;
|
||||||
|
extern const device_t ati28800_wonder1024d_xl_plus_device;
|
||||||
extern const device_t ati28800k_device;
|
extern const device_t ati28800k_device;
|
||||||
extern const device_t ati28800k_spc4620p_device;
|
extern const device_t ati28800k_spc4620p_device;
|
||||||
extern const device_t ati28800k_spc6033p_device;
|
extern const device_t ati28800k_spc6033p_device;
|
||||||
|
|||||||
@@ -36,10 +36,11 @@
|
|||||||
#include <86box/vid_svga.h>
|
#include <86box/vid_svga.h>
|
||||||
#include <86box/vid_svga_render.h>
|
#include <86box/vid_svga_render.h>
|
||||||
|
|
||||||
#define VGAWONDERXL 1
|
#define VGAWONDERXL 1
|
||||||
#ifdef USE_XL24
|
#define VGAWONDERXLPLUS 2
|
||||||
# define VGAWONDERXL24 2
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
#endif /* USE_XL24 */
|
# define VGAWONDERXL24 3
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BIOS_ATIKOR_PATH "roms/video/ati28800/atikorvga.bin"
|
#define BIOS_ATIKOR_PATH "roms/video/ati28800/atikorvga.bin"
|
||||||
#define BIOS_ATIKOR_4620P_PATH_L "roms/machines/spc4620p/31005h.u8"
|
#define BIOS_ATIKOR_4620P_PATH_L "roms/machines/spc4620p/31005h.u8"
|
||||||
@@ -52,13 +53,14 @@
|
|||||||
#define BIOS_VGAXL_EVEN_PATH "roms/video/ati28800/xleven.bin"
|
#define BIOS_VGAXL_EVEN_PATH "roms/video/ati28800/xleven.bin"
|
||||||
#define BIOS_VGAXL_ODD_PATH "roms/video/ati28800/xlodd.bin"
|
#define BIOS_VGAXL_ODD_PATH "roms/video/ati28800/xlodd.bin"
|
||||||
|
|
||||||
#ifdef USE_XL24
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
# define BIOS_XL24_EVEN_PATH "roms/video/ati28800/112-14318-102.bin"
|
# define BIOS_XL24_EVEN_PATH "roms/video/ati28800/112-14318-102.bin"
|
||||||
# define BIOS_XL24_ODD_PATH "roms/video/ati28800/112-14319-102.bin"
|
# define BIOS_XL24_ODD_PATH "roms/video/ati28800/112-14319-102.bin"
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
|
|
||||||
#define BIOS_ROM_PATH "roms/video/ati28800/bios.bin"
|
#define BIOS_ROM_PATH "roms/video/ati28800/bios.bin"
|
||||||
#define BIOS_VGAXL_ROM_PATH "roms/video/ati28800/ATI_VGAWonder_XL.bin"
|
#define BIOS_VGAXL_ROM_PATH "roms/video/ati28800/ATI_VGAWonder_XL.bin"
|
||||||
|
#define BIOS_VGAXL_PLUS_ROM_PATH "roms/video/ati28800/VGAWonder1024D_XL_Plus_VGABIOS_U19.BIN"
|
||||||
|
|
||||||
typedef struct ati28800_t {
|
typedef struct ati28800_t {
|
||||||
svga_t svga;
|
svga_t svga;
|
||||||
@@ -183,7 +185,7 @@ ati28800_out(uint16_t addr, uint8_t val, void *priv)
|
|||||||
case 0x3C7:
|
case 0x3C7:
|
||||||
case 0x3C8:
|
case 0x3C8:
|
||||||
case 0x3C9:
|
case 0x3C9:
|
||||||
if (ati28800->type == 1)
|
if ((ati28800->type == VGAWONDERXL) || (ati28800->type == VGAWONDERXLPLUS))
|
||||||
sc1148x_ramdac_out(addr, 0, val, svga->ramdac, svga);
|
sc1148x_ramdac_out(addr, 0, val, svga->ramdac, svga);
|
||||||
else
|
else
|
||||||
svga_out(addr, val, svga);
|
svga_out(addr, val, svga);
|
||||||
@@ -339,7 +341,7 @@ ati28800_in(uint16_t addr, void *priv)
|
|||||||
case 0x3C7:
|
case 0x3C7:
|
||||||
case 0x3C8:
|
case 0x3C8:
|
||||||
case 0x3C9:
|
case 0x3C9:
|
||||||
if (ati28800->type == 1)
|
if ((ati28800->type == VGAWONDERXL) || (ati28800->type == VGAWONDERXLPLUS))
|
||||||
return sc1148x_ramdac_in(addr, 0, svga->ramdac, svga);
|
return sc1148x_ramdac_in(addr, 0, svga->ramdac, svga);
|
||||||
return svga_in(addr, svga);
|
return svga_in(addr, svga);
|
||||||
|
|
||||||
@@ -609,7 +611,17 @@ ati28800_init(const device_t *info)
|
|||||||
ati28800->svga.ramdac = device_add(&sc11486_ramdac_device);
|
ati28800->svga.ramdac = device_add(&sc11486_ramdac_device);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef USE_XL24
|
case VGAWONDERXLPLUS:
|
||||||
|
ati28800->id = 6;
|
||||||
|
rom_init(&ati28800->bios_rom,
|
||||||
|
BIOS_VGAXL_PLUS_ROM_PATH,
|
||||||
|
0xc0000, 0x8000, 0x7fff,
|
||||||
|
0, MEM_MAPPING_EXTERNAL);
|
||||||
|
ati28800->svga.ramdac = device_add(&sc11483_ramdac_device);
|
||||||
|
ati28800->memory = 1024;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
case VGAWONDERXL24:
|
case VGAWONDERXL24:
|
||||||
ati28800->id = 6;
|
ati28800->id = 6;
|
||||||
rom_init_interleaved(&ati28800->bios_rom,
|
rom_init_interleaved(&ati28800->bios_rom,
|
||||||
@@ -618,7 +630,7 @@ ati28800_init(const device_t *info)
|
|||||||
0xc0000, 0x10000, 0xffff,
|
0xc0000, 0x10000, 0xffff,
|
||||||
0, MEM_MAPPING_EXTERNAL);
|
0, MEM_MAPPING_EXTERNAL);
|
||||||
break;
|
break;
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ati28800->id = 5;
|
ati28800->id = 5;
|
||||||
@@ -653,11 +665,15 @@ ati28800_init(const device_t *info)
|
|||||||
ati_eeprom_load(&ati28800->eeprom, "ati28800xl.nvr", 0);
|
ati_eeprom_load(&ati28800->eeprom, "ati28800xl.nvr", 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef USE_XL24
|
case VGAWONDERXLPLUS:
|
||||||
|
ati_eeprom_load(&ati28800->eeprom, "ati28800_wonder1024d_xl_plus.nvr", 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
case VGAWONDERXL24:
|
case VGAWONDERXL24:
|
||||||
ati_eeprom_load(&ati28800->eeprom, "ati28800xl24.nvr", 0);
|
ati_eeprom_load(&ati28800->eeprom, "ati28800xl24.nvr", 0);
|
||||||
break;
|
break;
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ati_eeprom_load(&ati28800->eeprom, "ati28800.nvr", 0);
|
ati_eeprom_load(&ati28800->eeprom, "ati28800.nvr", 0);
|
||||||
@@ -685,13 +701,19 @@ compaq_ati28800_available(void)
|
|||||||
return (rom_present(BIOS_VGAXL_ROM_PATH));
|
return (rom_present(BIOS_VGAXL_ROM_PATH));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_XL24
|
static int
|
||||||
|
ati28800_wonder1024d_xl_plus_available(void)
|
||||||
|
{
|
||||||
|
return (rom_present(BIOS_VGAXL_PLUS_ROM_PATH));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
static int
|
static int
|
||||||
ati28800_wonderxl24_available(void)
|
ati28800_wonderxl24_available(void)
|
||||||
{
|
{
|
||||||
return (rom_present(BIOS_XL24_EVEN_PATH) && rom_present(BIOS_XL24_ODD_PATH));
|
return (rom_present(BIOS_XL24_EVEN_PATH) && rom_present(BIOS_XL24_ODD_PATH));
|
||||||
}
|
}
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ati28800_close(void *priv)
|
ati28800_close(void *priv)
|
||||||
@@ -749,7 +771,7 @@ static const device_config_t ati28800_config[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_XL24
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
static const device_config_t ati28800_wonderxl_config[] = {
|
static const device_config_t ati28800_wonderxl_config[] = {
|
||||||
{
|
{
|
||||||
.name = "memory",
|
.name = "memory",
|
||||||
@@ -778,7 +800,7 @@ static const device_config_t ati28800_wonderxl_config[] = {
|
|||||||
.type = CONFIG_END
|
.type = CONFIG_END
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
const device_t ati28800_device = {
|
const device_t ati28800_device = {
|
||||||
@@ -851,7 +873,21 @@ const device_t compaq_ati28800_device = {
|
|||||||
.config = ati28800_config
|
.config = ati28800_config
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_XL24
|
const device_t ati28800_wonder1024d_xl_plus_device = {
|
||||||
|
.name = "ATI 28800-6 (ATI VGA Wonder 1024D XL Plus)",
|
||||||
|
.internal_name = "ati28800_wonder1024d_xl_plus",
|
||||||
|
.flags = DEVICE_ISA,
|
||||||
|
.local = VGAWONDERXLPLUS,
|
||||||
|
.init = ati28800_init,
|
||||||
|
.close = ati28800_close,
|
||||||
|
.reset = NULL,
|
||||||
|
{ .available = ati28800_wonder1024d_xl_plus_available },
|
||||||
|
.speed_changed = ati28800_speed_changed,
|
||||||
|
.force_redraw = ati28800_force_redraw,
|
||||||
|
.config = NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(DEV_BRANCH) && defined(USE_XL24)
|
||||||
const device_t ati28800_wonderxl24_device = {
|
const device_t ati28800_wonderxl24_device = {
|
||||||
.name = "ATI-28800 (VGA Wonder XL24)",
|
.name = "ATI-28800 (VGA Wonder XL24)",
|
||||||
.internal_name = "ati28800w",
|
.internal_name = "ati28800w",
|
||||||
@@ -865,4 +901,4 @@ const device_t ati28800_wonderxl24_device = {
|
|||||||
.force_redraw = ati28800_force_redraw,
|
.force_redraw = ati28800_force_redraw,
|
||||||
.config = ati28800_wonderxl_config
|
.config = ati28800_wonderxl_config
|
||||||
};
|
};
|
||||||
#endif /* USE_XL24 */
|
#endif
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ video_cards[] = {
|
|||||||
{ &ati18800_vga88_device },
|
{ &ati18800_vga88_device },
|
||||||
{ &ati28800_device },
|
{ &ati28800_device },
|
||||||
{ &compaq_ati28800_device },
|
{ &compaq_ati28800_device },
|
||||||
|
{ &ati28800_wonder1024d_xl_plus_device },
|
||||||
#ifdef USE_XL24
|
#ifdef USE_XL24
|
||||||
{ &ati28800_wonderxl24_device },
|
{ &ati28800_wonderxl24_device },
|
||||||
#endif /* USE_XL24 */
|
#endif /* USE_XL24 */
|
||||||
|
|||||||
Reference in New Issue
Block a user