8514/A: Pitch no longer hardcoded to 1024, fixes 640x480x256 resolutions.

8514/A: More fixes to the accelerated engine, mainly in paintbrush (blackness brush).
SVGA: Preparation of the next batch.
This commit is contained in:
TC1995
2022-06-12 17:31:54 +02:00
parent 92c3768a48
commit da273446d1
2 changed files with 357 additions and 422 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
* Generic SVGA handling. * Generic SVGA handling.
* *
* This is intended to be used by another SVGA driver, * This is intended to be used by another SVGA driver,
* and not as a card in it's own right. * and not as a card in its own right.
* *
* *
* *
@@ -40,7 +40,6 @@
#include <86box/vid_svga.h> #include <86box/vid_svga.h>
#include <86box/vid_svga_render.h> #include <86box/vid_svga_render.h>
void svga_doblit(int wx, int wy, svga_t *svga); void svga_doblit(int wx, int wy, svga_t *svga);
svga_t *svga_8514; svga_t *svga_8514;
@@ -48,12 +47,12 @@ svga_t *svga_8514;
extern int cyc_total; extern int cyc_total;
extern uint8_t edatlookup[4][4]; extern uint8_t edatlookup[4][4];
uint8_t svga_rotate[8][256]; uint8_t svga_rotate[8][256];
/*Primary SVGA device. As multiple video cards are not yet supported this is the /*Primary SVGA device. As multiple video cards are not yet supported this is the
only SVGA device.*/ only SVGA device.*/
static svga_t *svga_pri; static svga_t *svga_pri;
int vga_on; int vga_on, ibm8514_on;
svga_t svga_t
*svga_get_pri() *svga_get_pri()
@@ -559,7 +558,8 @@ svga_recalctimings(svga_t *svga)
svga->recalctimings_ex(svga); svga->recalctimings_ex(svga);
} }
} else { } else {
ibm8514_recalctimings(svga); if (ibm8514_on && ibm8514_enabled)
ibm8514_recalctimings(svga);
} }
svga->y_add = (overscan_y >> 1) - (svga->crtc[8] & 0x1f); svga->y_add = (overscan_y >> 1) - (svga->crtc[8] & 0x1f);
@@ -657,7 +657,7 @@ svga_poll(void *p)
int wx, wy; int wx, wy;
int ret, old_ma; int ret, old_ma;
if (!vga_on) { if (!vga_on && ibm8514_enabled && ibm8514_on) {
ibm8514_poll(&svga->dev8514, svga); ibm8514_poll(&svga->dev8514, svga);
return; return;
} }
@@ -710,7 +710,7 @@ svga_poll(void *p)
if (svga->hwcursor_on || svga->dac_hwcursor_on || svga->overlay_on) { if (svga->hwcursor_on || svga->dac_hwcursor_on || svga->overlay_on) {
svga->changedvram[svga->ma >> 12] = svga->changedvram[(svga->ma >> 12) + 1] = svga->changedvram[svga->ma >> 12] = svga->changedvram[(svga->ma >> 12) + 1] =
svga->interlace ? 3 : 2; svga->interlace ? 3 : 2;
} }
if (svga->vertical_linedbl) { if (svga->vertical_linedbl) {
@@ -956,7 +956,7 @@ svga_init(const device_t *info, svga_t *svga, void *p, int memsize,
svga->decode_mask = 0x7fffff; svga->decode_mask = 0x7fffff;
svga->changedvram = calloc(memsize >> 12, 1); svga->changedvram = calloc(memsize >> 12, 1);
svga->recalctimings_ex = recalctimings_ex; svga->recalctimings_ex = recalctimings_ex;
svga->video_in = video_in; svga->video_in = video_in;
svga->video_out = video_out; svga->video_out = video_out;
svga->hwcursor_draw = hwcursor_draw; svga->hwcursor_draw = hwcursor_draw;
svga->overlay_draw = overlay_draw; svga->overlay_draw = overlay_draw;
@@ -991,11 +991,6 @@ svga_init(const device_t *info, svga_t *svga, void *p, int memsize,
svga_pri = svga; svga_pri = svga;
if (ibm8514_enabled)
svga_8514 = svga;
else
svga_8514 = NULL;
svga->ramdac_type = RAMDAC_6BIT; svga->ramdac_type = RAMDAC_6BIT;
svga->map8 = svga->pallook; svga->map8 = svga->pallook;