From 39d10899accf913b404fd1f21bb0be070a0f5290 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 9 Oct 2023 20:14:03 +0200 Subject: [PATCH] Sanitized some video code to avoid #include's inside headers, and added guards to include/86box/thread.h. --- src/include/86box/thread.h | 23 ++++++++ src/include/86box/vid_8514a.h | 2 +- src/include/86box/vid_svga.h | 14 ++--- src/include/86box/vid_xga.h | 2 +- src/video/vid_8514a.c | 53 ++++++++++-------- src/video/vid_ati68860_ramdac.c | 5 +- src/video/vid_ati_mach8.c | 50 +++++++++-------- src/video/vid_svga.c | 22 ++++---- src/video/vid_xga.c | 99 +++++++++++++++++---------------- 9 files changed, 154 insertions(+), 116 deletions(-) diff --git a/src/include/86box/thread.h b/src/include/86box/thread.h index 3f09bf8f9..4d5584787 100644 --- a/src/include/86box/thread.h +++ b/src/include/86box/thread.h @@ -1,3 +1,24 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Thread API header. + * + * + * + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2023 Sarah Walker. + * Copyright 2016-2023 Miran Grca. + */ +#ifndef THREAD_H +# define THREAD_H + #ifdef __cplusplus extern "C" { #endif @@ -44,3 +65,5 @@ extern int thread_release_mutex(mutex_t *mutex); #ifdef __cplusplus } #endif + +#endif /*THREAD_H*/ diff --git a/src/include/86box/vid_8514a.h b/src/include/86box/vid_8514a.h index a78434bd2..983e98cd1 100644 --- a/src/include/86box/vid_8514a.h +++ b/src/include/86box/vid_8514a.h @@ -15,7 +15,6 @@ * * Copyright 2022 TheCollector1995. */ - #ifndef VIDEO_8514A_H #define VIDEO_8514A_H @@ -203,4 +202,5 @@ typedef struct ibm8514_t { int ext_pitch; int ext_crt_pitch; } ibm8514_t; + #endif /*VIDEO_8514A_H*/ diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 2fd2acf50..f725996d8 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -16,11 +16,6 @@ * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. */ - -#include <86box/thread.h> -#include <86box/vid_8514a.h> -#include <86box/vid_xga.h> - #ifndef VIDEO_SVGA_H # define VIDEO_SVGA_H @@ -58,8 +53,6 @@ typedef union { } latch_t; typedef struct svga_t { - ibm8514_t dev8514; - xga_t xga; mem_mapping_t mapping; uint8_t fast; @@ -269,11 +262,14 @@ typedef struct svga_t { /* Pointer to monitor */ monitor_t *monitor; + + void * dev8514; + void * xga; } svga_t; extern int vga_on; -extern void ibm8514_poll(ibm8514_t *dev, svga_t *svga); +extern void ibm8514_poll(void *priv, svga_t *svga); extern void ibm8514_recalctimings(svga_t *svga); extern uint8_t ibm8514_ramdac_in(uint16_t port, void *priv); extern void ibm8514_ramdac_out(uint16_t port, uint8_t val, void *priv); @@ -283,7 +279,7 @@ extern void ibm8514_accel_out_pixtrans(svga_t *svga, uint16_t port, uint16_t extern void ibm8514_short_stroke_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, svga_t *svga, uint8_t ssv, int len); extern void ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, svga_t *svga, int len); -extern void xga_poll(xga_t *xga, svga_t *svga); +extern void xga_poll(void *priv, svga_t *svga); extern void xga_recalctimings(svga_t *svga); extern int svga_init(const device_t *info, svga_t *svga, void *priv, int memsize, diff --git a/src/include/86box/vid_xga.h b/src/include/86box/vid_xga.h index 739e30c5c..e5248b309 100644 --- a/src/include/86box/vid_xga.h +++ b/src/include/86box/vid_xga.h @@ -14,7 +14,6 @@ * * Copyright 2022 TheCollector1995. */ - #ifndef VIDEO_XGA_H #define VIDEO_XGA_H @@ -232,4 +231,5 @@ typedef struct xga_t { int big_endian_linear; } xga_t; + #endif /*VIDEO_XGA_H*/ diff --git a/src/video/vid_8514a.c b/src/video/vid_8514a.c index ef735852c..a2cabfb0d 100644 --- a/src/video/vid_8514a.c +++ b/src/video/vid_8514a.c @@ -34,6 +34,8 @@ #include <86box/plat.h> #include <86box/thread.h> #include <86box/video.h> +#include <86box/vid_8514a.h> +#include <86box/vid_xga.h> #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> #include "cpu.h" @@ -193,7 +195,7 @@ int ibm8514_active = 0; int ibm8514_cpu_src(svga_t *svga) { - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (!(dev->accel.cmd & 0x100)) return 0; @@ -207,7 +209,7 @@ ibm8514_cpu_src(svga_t *svga) int ibm8514_cpu_dest(svga_t *svga) { - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (!(dev->accel.cmd & 0x100)) return 0; @@ -221,7 +223,7 @@ ibm8514_cpu_dest(svga_t *svga) void ibm8514_accel_out_pixtrans(svga_t *svga, UNUSED(uint16_t port), uint16_t val, int len) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t nibble = 0; uint32_t pixelxfer = 0; uint32_t monoxfer = 0xffffffff; @@ -443,7 +445,7 @@ regular_nibble: static void ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; switch (port) { case 0x82e8: @@ -845,7 +847,7 @@ ibm8514_io_set(svga_t *svga) static void ibm8514_accel_out(uint16_t port, uint32_t val, svga_t *svga, int len) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (port & 0x8000) { ibm8514_accel_out_fifo(svga, port, val, len); @@ -993,7 +995,7 @@ ibm8514_accel_outw(uint16_t port, uint16_t val, void *priv) static uint32_t ibm8514_accel_in(uint16_t port, svga_t *svga, int len) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint32_t temp = 0; int cmd; int vpos = 0; @@ -1138,7 +1140,7 @@ ibm8514_accel_inw(uint16_t port, void *priv) void ibm8514_short_stroke_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, svga_t *svga, uint8_t ssv, int len) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (!cpu_input) { dev->accel.ssv_len = ssv & 0x0f; @@ -1156,7 +1158,7 @@ ibm8514_short_stroke_start(int count, int cpu_input, uint32_t mix_dat, uint32_t void ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, svga_t *svga, UNUSED(int len)) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint16_t *vram_w = (uint16_t *) dev->vram; uint16_t src_dat = 0; uint16_t dest_dat; @@ -3817,7 +3819,7 @@ bitblt: void ibm8514_render_8bpp(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint32_t *p; uint32_t dat; @@ -3855,7 +3857,7 @@ ibm8514_render_8bpp(svga_t *svga) void ibm8514_render_15bpp(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int x; uint32_t *p; uint32_t dat; @@ -3896,7 +3898,7 @@ ibm8514_render_15bpp(svga_t *svga) void ibm8514_render_16bpp(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int x; uint32_t *p; uint32_t dat; @@ -3937,7 +3939,7 @@ ibm8514_render_16bpp(svga_t *svga) void ibm8514_render_24bpp(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint32_t *p; uint32_t dat; @@ -3973,7 +3975,7 @@ ibm8514_render_24bpp(svga_t *svga) void ibm8514_render_BGR(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint32_t *p; uint32_t dat; @@ -4009,7 +4011,7 @@ ibm8514_render_BGR(svga_t *svga) void ibm8514_render_ABGR8888(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int x; uint32_t *p; uint32_t dat; @@ -4036,7 +4038,7 @@ ibm8514_render_ABGR8888(svga_t *svga) void ibm8514_render_RGBA8888(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int x; uint32_t *p; uint32_t dat; @@ -4090,8 +4092,9 @@ ibm8514_render_overscan_right(ibm8514_t *dev, svga_t *svga) } void -ibm8514_poll(ibm8514_t *dev, svga_t *svga) +ibm8514_poll(void *priv, svga_t *svga) { + ibm8514_t *dev = (ibm8514_t *) priv; uint32_t x; int wx; int wy; @@ -4238,7 +4241,7 @@ ibm8514_poll(ibm8514_t *dev, svga_t *svga) void ibm8514_recalctimings(svga_t *svga) { - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (dev->on) { dev->h_disp = (dev->hdisp + 1) << 3; @@ -4307,7 +4310,7 @@ static uint8_t ibm8514_mca_read(int port, void *priv) { const svga_t *svga = (svga_t *) priv; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; return (dev->pos_regs[port & 7]); } @@ -4316,7 +4319,7 @@ static void ibm8514_mca_write(int port, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; /* MCA does not write registers below 0x0100. */ if (port < 0x0102) @@ -4330,7 +4333,7 @@ static uint8_t ibm8514_mca_feedb(void *priv) { const svga_t *svga = (svga_t *) priv; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; return dev->pos_regs[2] & 1; } @@ -4341,8 +4344,10 @@ ibm8514_init(const device_t *info) if (svga_get_pri() == NULL) return NULL; - svga_t *svga = svga_get_pri(); - ibm8514_t *dev = &svga->dev8514; + svga_t *svga = svga_get_pri(); + ibm8514_t *dev = (ibm8514_t *) calloc(1, sizeof(ibm8514_t)); + + svga->dev8514 = dev; dev->vram_size = 1024 << 10; dev->vram = calloc(dev->vram_size, 1); @@ -4368,11 +4373,13 @@ static void ibm8514_close(void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (dev) { free(dev->vram); free(dev->changedvram); + + free(dev); } } diff --git a/src/video/vid_ati68860_ramdac.c b/src/video/vid_ati68860_ramdac.c index 169199826..4e76cb808 100644 --- a/src/video/vid_ati68860_ramdac.c +++ b/src/video/vid_ati68860_ramdac.c @@ -46,6 +46,7 @@ #include <86box/mem.h> #include <86box/timer.h> #include <86box/video.h> +#include <86box/vid_8514a.h> #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> #include <86box/plat_unused.h> @@ -68,7 +69,7 @@ void ati68860_ramdac_out(uint16_t addr, uint8_t val, void *priv, svga_t *svga) { ati68860_ramdac_t *ramdac = (ati68860_ramdac_t *) priv; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; switch (addr) { case 0: @@ -172,7 +173,7 @@ uint8_t ati68860_ramdac_in(uint16_t addr, void *priv, svga_t *svga) { const ati68860_ramdac_t *ramdac = (ati68860_ramdac_t *) priv; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t temp = 0; switch (addr) { diff --git a/src/video/vid_ati_mach8.c b/src/video/vid_ati_mach8.c index 1d3f6bbc8..42a2a9f02 100644 --- a/src/video/vid_ati_mach8.c +++ b/src/video/vid_ati_mach8.c @@ -36,6 +36,7 @@ #include <86box/video.h> #include <86box/i2c.h> #include <86box/vid_ddc.h> +#include <86box/vid_8514a.h> #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> #include <86box/vid_ati_eeprom.h> @@ -2299,7 +2300,7 @@ mach_out(uint16_t addr, uint8_t val, void *priv) { mach_t *mach = (mach_t *) priv; svga_t *svga = &mach->svga; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t old; uint8_t rs2; uint8_t rs3; @@ -2472,7 +2473,7 @@ mach_in(uint16_t addr, void *priv) { mach_t *mach = (mach_t *) priv; svga_t *svga = &mach->svga; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t temp = 0xff; uint8_t rs2; uint8_t rs3; @@ -2569,7 +2570,7 @@ static void mach_recalctimings(svga_t *svga) { const mach_t *mach = (mach_t *) svga->priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int clock_sel; clock_sel = ((svga->miscout >> 2) & 3) | ((mach->regs[0xbe] & 0x10) >> 1) | ((mach->regs[0xb9] & 2) << 1); @@ -3622,7 +3623,7 @@ static void mach_accel_out(uint16_t port, uint8_t val, mach_t *mach) { svga_t *svga = &mach->svga; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; mach_log("Port accel out = %04x, val = %04x.\n", port, val); @@ -4349,7 +4350,7 @@ static uint8_t mach_accel_in(uint16_t port, mach_t *mach) { svga_t *svga = &mach->svga; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t temp = 0; int vpos = 0; int vblankend = svga->vblankstart + svga->crtc[0x16]; @@ -4550,7 +4551,7 @@ mach_accel_outb(uint16_t port, uint8_t val, void *priv) svga_t *svga = &mach->svga; if (port & 0x8000) - mach_accel_out_fifo(mach, svga, &svga->dev8514, port, val, 1); + mach_accel_out_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, val, 1); else mach_accel_out(port, val, mach); } @@ -4562,7 +4563,7 @@ mach_accel_outw(uint16_t port, uint16_t val, void *priv) svga_t *svga = &mach->svga; if (port & 0x8000) - mach_accel_out_fifo(mach, svga, &svga->dev8514, port, val, 2); + mach_accel_out_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, val, 2); else { mach_accel_out(port, val, mach); mach_accel_out(port + 1, (val >> 8), mach); @@ -4576,8 +4577,8 @@ mach_accel_outl(uint16_t port, uint32_t val, void *priv) svga_t *svga = &mach->svga; if (port & 0x8000) { - mach_accel_out_fifo(mach, svga, &svga->dev8514, port, val & 0xffff, 2); - mach_accel_out_fifo(mach, svga, &svga->dev8514, port + 2, val >> 16, 2); + mach_accel_out_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, val & 0xffff, 2); + mach_accel_out_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port + 2, val >> 16, 2); } else { mach_accel_out(port, val, mach); mach_accel_out(port + 1, (val >> 8), mach); @@ -4593,7 +4594,7 @@ mach_accel_inb(uint16_t port, void *priv) uint8_t temp; if (port & 0x8000) - temp = mach_accel_in_fifo(mach, svga, &svga->dev8514, port, 1); + temp = mach_accel_in_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, 1); else temp = mach_accel_in(port, mach); @@ -4608,7 +4609,7 @@ mach_accel_inw(uint16_t port, void *priv) uint16_t temp; if (port & 0x8000) - temp = mach_accel_in_fifo(mach, svga, &svga->dev8514, port, 2); + temp = mach_accel_in_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, 2); else { temp = mach_accel_in(port, mach); temp |= (mach_accel_in(port + 1, mach) << 8); @@ -4624,8 +4625,8 @@ mach_accel_inl(uint16_t port, void *priv) uint32_t temp; if (port & 0x8000) { - temp = mach_accel_in_fifo(mach, svga, &svga->dev8514, port, 2); - temp = (mach_accel_in_fifo(mach, svga, &svga->dev8514, port + 2, 2) << 16); + temp = mach_accel_in_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port, 2); + temp = (mach_accel_in_fifo(mach, svga, (ibm8514_t *) svga->dev8514, port + 2, 2) << 16); } else { temp = mach_accel_in(port, mach); temp |= (mach_accel_in(port + 1, mach) << 8); @@ -4639,7 +4640,7 @@ static void mach32_write_linear(uint32_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; int writemask2 = svga->writemask; int reset_wm = 0; latch_t vall; @@ -4802,7 +4803,7 @@ static uint8_t mach32_read_linear(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint32_t latch_addr = 0; int readplane = svga->readplane; uint8_t count; @@ -5066,7 +5067,7 @@ static void mach32_updatemapping(mach_t *mach) { svga_t *svga = &mach->svga; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (mach->pci_bus && (!(mach->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_MEM))) { mem_mapping_disable(&svga->mapping); @@ -5129,7 +5130,7 @@ static void mach32_hwcursor_draw(svga_t *svga, int displine) { const mach_t *mach = (mach_t *) svga->priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint16_t dat; int comb; int offset = dev->hwcursor_latch.x - dev->hwcursor_latch.xoff; @@ -5452,7 +5453,7 @@ mach_mca_reset(void *priv) { mach_t *mach = (mach_t *) priv; svga_t *svga = &mach->svga; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; mem_mapping_disable(&mach->bios_rom.mapping); mem_mapping_disable(&mach->bios_rom2.mapping); @@ -5599,11 +5600,12 @@ mach8_init(const device_t *info) svga_t *svga; ibm8514_t *dev; - mach = malloc(sizeof(mach_t)); - memset(mach, 0x00, sizeof(mach_t)); + mach = calloc(1, sizeof(mach_t)); - svga = &mach->svga; - dev = &svga->dev8514; + svga = &mach->svga; + dev = (ibm8514_t *) calloc(1, sizeof(ibm8514_t)); + + svga->dev8514 = dev; mach->pci_bus = !!(info->flags & DEVICE_PCI); mach->vlb_bus = !!(info->flags & DEVICE_VLB); @@ -5800,11 +5802,13 @@ mach_close(void *priv) { mach_t *mach = (mach_t *) priv; svga_t *svga = &mach->svga; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; if (dev) { free(dev->vram); free(dev->changedvram); + + free(dev); } svga_close(svga); diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index e32575db7..c53053ac5 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -39,6 +39,8 @@ #include <86box/plat.h> #include <86box/ui.h> #include <86box/video.h> +#include <86box/vid_8514a.h> +#include <86box/vid_xga.h> #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> #include <86box/vid_xga_device.h> @@ -110,8 +112,8 @@ void svga_out(uint16_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; - xga_t *xga = &svga->xga; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; + xga_t *xga = (xga_t *) svga->xga; uint8_t o; uint8_t index; @@ -357,7 +359,7 @@ uint8_t svga_in(uint16_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; uint8_t index; uint8_t ret = 0xff; @@ -512,8 +514,8 @@ svga_in(uint16_t addr, void *priv) void svga_set_ramdac_type(svga_t *svga, int type) { - ibm8514_t *dev = &svga->dev8514; - xga_t *xga = &svga->xga; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; + xga_t *xga = (xga_t *) svga->xga; if (svga->ramdac_type != type) { svga->ramdac_type = type; @@ -548,7 +550,7 @@ svga_set_ramdac_type(svga_t *svga, int type) void svga_recalctimings(svga_t *svga) { - const ibm8514_t *dev = &svga->dev8514; + const ibm8514_t *dev = (ibm8514_t *) svga->dev8514; double crtcconst; double _dispontime; double _dispofftime; @@ -816,8 +818,8 @@ void svga_poll(void *priv) { svga_t *svga = (svga_t *) priv; - ibm8514_t *dev = &svga->dev8514; - xga_t *xga = &svga->xga; + ibm8514_t *dev = (ibm8514_t *) svga->dev8514; + xga_t *xga = (xga_t *) svga->xga; uint32_t x; uint32_t blink_delay; int wx; @@ -1229,7 +1231,7 @@ static __inline void svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; int writemask2 = svga->writemask; int reset_wm = 0; latch_t vall; @@ -1449,7 +1451,7 @@ static __inline uint8_t svga_read_common(uint32_t addr, uint8_t linear, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t latch_addr = 0; int readplane = svga->readplane; uint8_t count; diff --git a/src/video/vid_xga.c b/src/video/vid_xga.c index 915ac548a..21bde90fe 100644 --- a/src/video/vid_xga.c +++ b/src/video/vid_xga.c @@ -30,6 +30,7 @@ #include <86box/device.h> #include <86box/timer.h> #include <86box/video.h> +#include <86box/vid_xga.h> #include <86box/vid_svga.h> #include <86box/vid_svga_render.h> #include <86box/vid_xga_device.h> @@ -143,7 +144,7 @@ svga_xga_in(uint16_t addr, void *priv) void xga_updatemapping(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_log("OpMode = %x, linear base = %08x, aperture cntl = %d, access mode = %x, map = %x, " "endian reverse = %d, a5test = %d, XGA on = %d.\n", xga->op_mode, xga->linear_base, @@ -186,7 +187,7 @@ xga_updatemapping(svga_t *svga) void xga_recalctimings(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (xga->on) { xga->v_total = xga->vtotal + 1; @@ -505,7 +506,7 @@ static void xga_ext_outb(uint16_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_log("[%04X:%08X]: EXT OUTB = %02x, val = %02x\n", CS, cpu_state.pc, addr, val); @@ -567,7 +568,7 @@ static uint8_t xga_ext_inb(uint16_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t ret = 0; uint8_t index; @@ -906,7 +907,7 @@ xga_ext_inb(uint16_t addr, void *priv) static uint32_t xga_accel_read_pattern_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, int width) { - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; uint32_t addr = base; int bits; uint8_t byte; @@ -944,7 +945,7 @@ xga_accel_read_pattern_map_pixel(svga_t *svga, int x, int y, int map, uint32_t b static uint32_t xga_accel_read_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, int width, UNUSED(int usesrc)) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t addr = base; int bits; uint32_t byte; @@ -1024,7 +1025,7 @@ xga_accel_read_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, int static void xga_accel_write_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, uint32_t pixel, int width) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t addr = base; uint8_t byte; uint8_t mask; @@ -1125,7 +1126,7 @@ xga_accel_write_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, ui static void xga_short_stroke(svga_t *svga, uint8_t ssv) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t src_dat; uint32_t dest_dat; uint32_t old_dest_dat; @@ -1254,7 +1255,7 @@ xga_short_stroke(svga_t *svga, uint8_t ssv) static void xga_line_draw_write(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t src_dat; uint32_t dest_dat; uint32_t old_dest_dat; @@ -1476,7 +1477,7 @@ xga_line_draw_write(svga_t *svga) static void xga_bitblt(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t area_state = 0; uint32_t src_dat; uint32_t dest_dat; @@ -2283,7 +2284,7 @@ static void xga_memio_writeb(uint32_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_mem_write(addr, val, xga, svga, 1); @@ -2294,7 +2295,7 @@ static void xga_memio_writew(uint32_t addr, uint16_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_mem_write(addr, val, xga, svga, 2); @@ -2305,7 +2306,7 @@ static void xga_memio_writel(uint32_t addr, uint32_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_mem_write(addr, val, xga, svga, 4); @@ -2400,7 +2401,7 @@ static uint8_t xga_memio_readb(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t temp; temp = xga_mem_read(addr, xga, svga); @@ -2414,7 +2415,7 @@ static uint16_t xga_memio_readw(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint16_t temp; temp = xga_mem_read(addr, xga, svga); @@ -2429,7 +2430,7 @@ static uint32_t xga_memio_readl(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t temp; temp = xga_mem_read(addr, xga, svga); @@ -2445,7 +2446,7 @@ xga_memio_readl(uint32_t addr, void *priv) static void xga_hwcursor_draw(svga_t *svga, int displine) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t dat = 0; int offset = xga->hwcursor_latch.x - xga->hwcursor_latch.xoff; int x_pos; @@ -2531,7 +2532,7 @@ xga_render_overscan_right(xga_t *xga, svga_t *svga) static void xga_render_4bpp(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t *p; uint32_t dat; @@ -2572,7 +2573,7 @@ xga_render_4bpp(svga_t *svga) static void xga_render_8bpp(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t *p; uint32_t dat; @@ -2609,7 +2610,7 @@ xga_render_8bpp(svga_t *svga) static void xga_render_16bpp(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; int x; uint32_t *p; uint32_t dat; @@ -2650,7 +2651,7 @@ static void xga_write(uint32_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_write(addr, val, svga); @@ -2678,7 +2679,7 @@ static void xga_writew(uint32_t addr, uint16_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_writew(addr, val, svga); @@ -2693,7 +2694,7 @@ static void xga_writel(uint32_t addr, uint32_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_writel(addr, val, svga); @@ -2710,7 +2711,7 @@ static uint8_t xga_read(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t ret = 0xff; if (!xga->on) { @@ -2740,7 +2741,7 @@ static uint16_t xga_readw(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint16_t ret = 0xffff; if (!xga->on) { @@ -2758,7 +2759,7 @@ static uint32_t xga_readl(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint32_t ret = 0xffffffff; if (!xga->on) { @@ -2778,7 +2779,7 @@ static void xga_write_linear(uint32_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_write_linear(addr, val, svga); @@ -2810,7 +2811,7 @@ static void xga_writew_linear(uint32_t addr, uint16_t val, void *priv) { svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_writew_linear(addr, val, svga); @@ -2825,7 +2826,7 @@ static void xga_writel_linear(uint32_t addr, uint32_t val, void *priv) { svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; if (!xga->on) { svga_writel_linear(addr, val, svga); @@ -2842,7 +2843,7 @@ static uint8_t xga_read_linear(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; uint8_t ret = 0xff; if (!xga->on) @@ -2872,7 +2873,7 @@ static uint16_t xga_readw_linear(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; uint16_t ret; if (!xga->on) @@ -2888,7 +2889,7 @@ static uint32_t xga_readl_linear(uint32_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; uint32_t ret; if (!xga->on) @@ -2905,7 +2906,7 @@ xga_readl_linear(uint32_t addr, void *priv) static void xga_do_render(svga_t *svga) { - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; xga_log("DISPCNTL = %d, vga = %d.\n", xga->disp_cntl_2 & 7, vga_on); switch (xga->disp_cntl_2 & 7) { @@ -2936,8 +2937,9 @@ xga_do_render(svga_t *svga) } void -xga_poll(xga_t *xga, svga_t *svga) +xga_poll(void *priv, svga_t *svga) { + xga_t *xga = (xga_t *) priv; uint32_t x; int wx; int wy; @@ -3075,7 +3077,7 @@ static uint8_t xga_mca_read(int port, void *priv) { const svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; uint8_t ret = xga->pos_regs[port & 7]; if (((port & 7) == 3) && !(ret & 1)) /*Always enable the mapping.*/ @@ -3091,7 +3093,7 @@ static void xga_mca_write(int port, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; /* MCA does not write registers below 0x0100. */ if (port < 0x0102) @@ -3133,7 +3135,7 @@ static uint8_t xga_mca_feedb(void *priv) { const svga_t *svga = (svga_t *) priv; - const xga_t *xga = &svga->xga; + const xga_t *xga = (xga_t *) svga->xga; return xga->pos_regs[2] & 1; } @@ -3142,7 +3144,7 @@ static void xga_mca_reset(void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; mem_mapping_disable(&xga->bios_rom.mapping); mem_mapping_disable(&xga->memio_mapping); @@ -3155,7 +3157,7 @@ static void xga_reset(void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; mem_mapping_disable(&xga->bios_rom.mapping); mem_mapping_disable(&xga->memio_mapping); @@ -3169,7 +3171,7 @@ static uint8_t xga_pos_in(uint16_t addr, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; uint8_t ret = 0xff; if (!xga_standalone_enabled) { @@ -3285,7 +3287,7 @@ static void xga_pos_out(uint16_t addr, uint8_t val, void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (!xga_standalone_enabled) { switch (addr) { @@ -3337,10 +3339,12 @@ xga_init(const device_t *info) if (svga_get_pri() == NULL) return NULL; - svga_t *svga = svga_get_pri(); - xga_t *xga = &svga->xga; + svga_t *svga = svga_get_pri(); + xga_t *xga = (xga_t *) calloc(1, sizeof(xga_t)); FILE *fp; - uint8_t *rom = NULL; + uint8_t *rom = NULL; + + svga->xga = xga; xga->ext_mem_addr = device_get_config_hex16("ext_mem_addr"); xga->instance_isa = device_get_config_int("instance"); @@ -3427,8 +3431,7 @@ xga_init(const device_t *info) static void * svga_xga_init(const device_t *info) { - svga_t *svga = malloc(sizeof(svga_t)); - memset(svga, 0, sizeof(svga_t)); + svga_t *svga = (svga_t *) calloc(1, sizeof(svga_t)); video_inform(VIDEO_FLAG_TYPE_XGA, &timing_xga_isa); @@ -3451,11 +3454,13 @@ static void xga_close(void *priv) { svga_t *svga = (svga_t *) priv; - xga_t *xga = &svga->xga; + xga_t *xga = (xga_t *) svga->xga; if (svga) { free(xga->vram); free(xga->changedvram); + + free(xga); } }