Cleaned up IBM/ATI 8514/A code (June 9th, 2025)

Replaced the magic numbers with actual enumerators for ease of understanding.
This commit is contained in:
TC1995
2025-06-09 17:31:56 +02:00
parent e5380bacd7
commit 4a98cef2bf
3 changed files with 40 additions and 25 deletions

View File

@@ -24,6 +24,19 @@
#define INT_FIFO_EMP (1 << 3) #define INT_FIFO_EMP (1 << 3)
#define INT_MASK 0xf #define INT_MASK 0xf
typedef enum {
IBM_8514A_TYPE = 0,
ATI_38800_TYPE,
ATI_68800_TYPE,
TYPE_MAX
} ibm8514_card_type;
typedef enum {
IBM = 0,
ATI,
EXTENSIONS_MAX
} ibm8514_extensions_t;
typedef struct hwcursor8514_t { typedef struct hwcursor8514_t {
int ena; int ena;
int x; int x;
@@ -58,7 +71,7 @@ typedef struct ibm8514_t {
int force_old_addr; int force_old_addr;
int type; int type;
int local; ibm8514_card_type local;
int bpp; int bpp;
int on; int on;
int accel_bpp; int accel_bpp;
@@ -246,7 +259,8 @@ typedef struct ibm8514_t {
int pitch; int pitch;
int ext_pitch; int ext_pitch;
int ext_crt_pitch; int ext_crt_pitch;
int extensions; ibm8514_extensions_t extensions;
int onboard;
int linear; int linear;
uint32_t vram_amount; uint32_t vram_amount;
int vram_512k_8514; int vram_512k_8514;
@@ -263,9 +277,9 @@ typedef struct ibm8514_t {
} ibm8514_t; } ibm8514_t;
#define IBM_8514A (((dev->local & 0xff) == 0x00) && (dev->extensions == 0x00)) #define IBM_8514A (((dev->local & 0xff) == IBM_8514A_TYPE) && (dev->extensions == IBM))
#define ATI_8514A_ULTRA (((dev->local & 0xff) == 0x00) && (dev->extensions == 0x01)) #define ATI_8514A_ULTRA (((dev->local & 0xff) == IBM_8514A_TYPE) && (dev->extensions == ATI))
#define ATI_GRAPHICS_ULTRA ((dev->local & 0xff) == 0x01) #define ATI_GRAPHICS_ULTRA ((dev->local & 0xff) == ATI_38800_TYPE)
#define ATI_MACH32 ((dev->local & 0xff) == 0x02) #define ATI_MACH32 ((dev->local & 0xff) == ATI_68800_TYPE)
#endif /*VIDEO_8514A_H*/ #endif /*VIDEO_8514A_H*/

View File

@@ -3693,10 +3693,10 @@ ibm8514_poll(void *priv)
svga->render8514(svga); svga->render8514(svga);
svga->x_add = (overscan_x >> 1); svga->x_add = svga->left_overscan;
ibm8514_render_overscan_left(dev, svga); ibm8514_render_overscan_left(dev, svga);
ibm8514_render_overscan_right(dev, svga); ibm8514_render_overscan_right(dev, svga);
svga->x_add = (overscan_x >> 1); svga->x_add = svga->left_overscan;
if (dev->hwcursor_on) { if (dev->hwcursor_on) {
if (svga->hwcursor_draw) if (svga->hwcursor_draw)
@@ -3796,7 +3796,7 @@ ibm8514_poll(void *priv)
dev->dispon = 1; dev->dispon = 1;
dev->displine = (dev->interlace && dev->oddeven) ? 1 : 0; dev->displine = (dev->interlace && dev->oddeven) ? 1 : 0;
svga->x_add = (overscan_x >> 1); svga->x_add = svga->left_overscan;
dev->hwcursor_on = 0; dev->hwcursor_on = 0;
dev->hwcursor_latch = dev->hwcursor; dev->hwcursor_latch = dev->hwcursor;
@@ -3966,7 +3966,7 @@ ibm8514_init(const device_t *info)
bios_addr = 0xc6000; bios_addr = 0xc6000;
switch (dev->extensions) { switch (dev->extensions) {
case 1: case ATI:
if (rom_present(BIOS_MACH8_ROM_PATH)) { if (rom_present(BIOS_MACH8_ROM_PATH)) {
mach_t * mach = (mach_t *) calloc(1, sizeof(mach_t)); mach_t * mach = (mach_t *) calloc(1, sizeof(mach_t));
svga->ext8514 = mach; svga->ext8514 = mach;
@@ -3977,13 +3977,14 @@ ibm8514_init(const device_t *info)
0, MEM_MAPPING_EXTERNAL); 0, MEM_MAPPING_EXTERNAL);
ati8514_init(svga, svga->ext8514, svga->dev8514); ati8514_init(svga, svga->ext8514, svga->dev8514);
mach->accel.scratch0 = ((((bios_addr >> 7) - 0x1000) >> 4)); mach->accel.scratch0 = ((bios_addr >> 7) - 0x1000) >> 4;
bios_rom_eeprom = mach->accel.scratch0; bios_rom_eeprom = mach->accel.scratch0;
if (dev->type & DEVICE_MCA) { if (dev->type & DEVICE_MCA) {
dev->pos_regs[0] = 0x88; dev->pos_regs[0] = 0x88;
dev->pos_regs[1] = 0x80; dev->pos_regs[1] = 0x80;
mach->eeprom.data[0] = 0x0000; mach->eeprom.data[0] = 0x0000;
mach->eeprom.data[1] = bios_rom_eeprom | ((bios_rom_eeprom | 0x01) << 8); mach->eeprom.data[1] = bios_rom_eeprom | ((bios_rom_eeprom | 0x01) << 8);
ibm8514_log("EEPROM Data1=%04x.\n", mach->eeprom.data[1]);
mca_add(ati8514_mca_read, ati8514_mca_write, ibm8514_mca_feedb, ibm8514_mca_reset, svga); mca_add(ati8514_mca_read, ati8514_mca_write, ibm8514_mca_feedb, ibm8514_mca_reset, svga);
ati_eeprom_load_mach8(&mach->eeprom, "ati8514_mca.nvr", 1); ati_eeprom_load_mach8(&mach->eeprom, "ati8514_mca.nvr", 1);
mem_mapping_disable(&dev->bios_rom.mapping); mem_mapping_disable(&dev->bios_rom.mapping);
@@ -4067,12 +4068,12 @@ static const device_config_t isa_ext8514_config[] = {
.description = "Vendor", .description = "Vendor",
.type = CONFIG_SELECTION, .type = CONFIG_SELECTION,
.default_string = NULL, .default_string = NULL,
.default_int = 0, .default_int = IBM,
.file_filter = NULL, .file_filter = NULL,
.spinner = { 0 }, .spinner = { 0 },
.selection = { .selection = {
{ .description = "IBM", .value = 0 }, { .description = "IBM", .value = IBM },
{ .description = "ATI", .value = 1 }, { .description = "ATI", .value = ATI },
{ .description = "" } { .description = "" }
}, },
.bios = { { 0 } } .bios = { { 0 } }
@@ -4127,12 +4128,12 @@ static const device_config_t mca_ext8514_config[] = {
.description = "Vendor", .description = "Vendor",
.type = CONFIG_SELECTION, .type = CONFIG_SELECTION,
.default_string = NULL, .default_string = NULL,
.default_int = 0, .default_int = IBM,
.file_filter = NULL, .file_filter = NULL,
.spinner = { 0 }, .spinner = { 0 },
.selection = { .selection = {
{ .description = "IBM", .value = 0 }, { .description = "IBM", .value = IBM },
{ .description = "ATI", .value = 1 }, { .description = "ATI", .value = ATI },
{ .description = "" } { .description = "" }
}, },
.bios = { { 0 } } .bios = { { 0 } }
@@ -4145,7 +4146,7 @@ const device_t gen8514_isa_device = {
.name = "IBM 8514/A clone (ISA)", .name = "IBM 8514/A clone (ISA)",
.internal_name = "8514_isa", .internal_name = "8514_isa",
.flags = DEVICE_ISA16, .flags = DEVICE_ISA16,
.local = 0, .local = IBM_8514A_TYPE,
.init = ibm8514_init, .init = ibm8514_init,
.close = ibm8514_close, .close = ibm8514_close,
.reset = NULL, .reset = NULL,
@@ -4159,7 +4160,7 @@ const device_t ibm8514_mca_device = {
.name = "IBM 8514/A (MCA)", .name = "IBM 8514/A (MCA)",
.internal_name = "8514_mca", .internal_name = "8514_mca",
.flags = DEVICE_MCA, .flags = DEVICE_MCA,
.local = 0, .local = IBM_8514A_TYPE,
.init = ibm8514_init, .init = ibm8514_init,
.close = ibm8514_close, .close = ibm8514_close,
.reset = NULL, .reset = NULL,

View File

@@ -7409,7 +7409,7 @@ const device_t mach8_vga_isa_device = {
.name = "ATI Mach8 (ATI Graphics Ultra) (ISA)", .name = "ATI Mach8 (ATI Graphics Ultra) (ISA)",
.internal_name = "mach8_vga_isa", .internal_name = "mach8_vga_isa",
.flags = DEVICE_ISA, .flags = DEVICE_ISA,
.local = 1, .local = ATI_38800_TYPE,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,
@@ -7423,7 +7423,7 @@ const device_t mach32_isa_device = {
.name = "ATI Mach32 (ISA)", .name = "ATI Mach32 (ISA)",
.internal_name = "mach32_isa", .internal_name = "mach32_isa",
.flags = DEVICE_ISA, .flags = DEVICE_ISA,
.local = 2, .local = ATI_68800_TYPE,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,
@@ -7437,7 +7437,7 @@ const device_t mach32_vlb_device = {
.name = "ATI Mach32 (VLB)", .name = "ATI Mach32 (VLB)",
.internal_name = "mach32_vlb", .internal_name = "mach32_vlb",
.flags = DEVICE_VLB, .flags = DEVICE_VLB,
.local = 2, .local = ATI_68800_TYPE,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,
@@ -7451,7 +7451,7 @@ const device_t mach32_mca_device = {
.name = "ATI Mach32 (MCA)", .name = "ATI Mach32 (MCA)",
.internal_name = "mach32_mca", .internal_name = "mach32_mca",
.flags = DEVICE_MCA, .flags = DEVICE_MCA,
.local = 2, .local = ATI_68800_TYPE,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,
@@ -7465,7 +7465,7 @@ const device_t mach32_pci_device = {
.name = "ATI Mach32 (PCI)", .name = "ATI Mach32 (PCI)",
.internal_name = "mach32_pci", .internal_name = "mach32_pci",
.flags = DEVICE_PCI, .flags = DEVICE_PCI,
.local = 2, .local = ATI_68800_TYPE,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,
@@ -7479,7 +7479,7 @@ const device_t mach32_onboard_pci_device = {
.name = "ATI Mach32 (PCI) On-Board", .name = "ATI Mach32 (PCI) On-Board",
.internal_name = "mach32_pci_onboard", .internal_name = "mach32_pci_onboard",
.flags = DEVICE_PCI, .flags = DEVICE_PCI,
.local = 2 | 0x100, .local = ATI_68800_TYPE | 0x100,
.init = mach8_init, .init = mach8_init,
.close = mach_close, .close = mach_close,
.reset = mach_reset, .reset = mach_reset,