Merge pull request #3044 from Cacodemon345/svga-multi-monitor
Add SVGA multi-monitor support
This commit is contained in:
@@ -33,6 +33,8 @@
|
|||||||
# define FLAG_RAMDAC_SHIFT 64
|
# define FLAG_RAMDAC_SHIFT 64
|
||||||
# define FLAG_128K_MASK 128
|
# define FLAG_128K_MASK 128
|
||||||
|
|
||||||
|
struct monitor_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int ena,
|
int ena,
|
||||||
x, y, xoff, yoff, cur_xsize, cur_ysize,
|
x, y, xoff, yoff, cur_xsize, cur_ysize,
|
||||||
@@ -170,6 +172,12 @@ typedef struct svga_t {
|
|||||||
uint32_t (*remap_func)(struct svga_t *svga, uint32_t in_addr);
|
uint32_t (*remap_func)(struct svga_t *svga, uint32_t in_addr);
|
||||||
|
|
||||||
void *ramdac, *clock_gen;
|
void *ramdac, *clock_gen;
|
||||||
|
|
||||||
|
/* Monitor Index */
|
||||||
|
uint8_t monitor_index;
|
||||||
|
|
||||||
|
/* Pointer to monitor */
|
||||||
|
monitor_t* monitor;
|
||||||
} svga_t;
|
} svga_t;
|
||||||
|
|
||||||
extern int vga_on, ibm8514_on;
|
extern int vga_on, ibm8514_on;
|
||||||
|
@@ -506,6 +506,7 @@ typedef struct voodoo_t {
|
|||||||
uint8_t *vram, *changedvram;
|
uint8_t *vram, *changedvram;
|
||||||
|
|
||||||
void *p;
|
void *p;
|
||||||
|
uint8_t monitor_index;
|
||||||
} voodoo_t;
|
} voodoo_t;
|
||||||
|
|
||||||
typedef struct voodoo_set_t {
|
typedef struct voodoo_set_t {
|
||||||
|
@@ -178,7 +178,7 @@ SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (video_card_available(c) && device_is_valid(video_dev, machineId) && !(video_card_get_flags(c) == video_card_get_flags(videoCard))) {
|
if (video_card_available(c) && device_is_valid(video_dev, machineId) && !(video_card_get_flags(c) == video_card_get_flags(videoCard) && (video_card_get_flags(c) != VIDEO_FLAG_TYPE_SPECIAL))) {
|
||||||
ui->comboBoxVideoSecondary->addItem(name, c);
|
ui->comboBoxVideoSecondary->addItem(name, c);
|
||||||
if (c == curVideoCard_2)
|
if (c == curVideoCard_2)
|
||||||
ui->comboBoxVideoSecondary->setCurrentIndex(ui->comboBoxVideoSecondary->count() - 1);
|
ui->comboBoxVideoSecondary->setCurrentIndex(ui->comboBoxVideoSecondary->count() - 1);
|
||||||
|
@@ -525,7 +525,7 @@ gd54xx_overlay_draw(svga_t *svga, int displine)
|
|||||||
uint8_t *src2 = &svga->vram[(svga->ma - (svga->hdisp * bytesperpix)) & svga->vram_display_mask];
|
uint8_t *src2 = &svga->vram[(svga->ma - (svga->hdisp * bytesperpix)) & svga->vram_display_mask];
|
||||||
int occl, ckval;
|
int occl, ckval;
|
||||||
|
|
||||||
p = &((uint32_t *) buffer32->line[displine])[gd54xx->overlay.region1size + svga->x_add];
|
p = &((uint32_t *) svga->monitor->target_buffer->line[displine])[gd54xx->overlay.region1size + svga->x_add];
|
||||||
src2 += gd54xx->overlay.region1size * bytesperpix;
|
src2 += gd54xx->overlay.region1size * bytesperpix;
|
||||||
|
|
||||||
OVERLAY_SAMPLE();
|
OVERLAY_SAMPLE();
|
||||||
@@ -1858,16 +1858,16 @@ gd54xx_hwcursor_draw(svga_t *svga, int displine)
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
/* The pixel is shown in the cursor background color */
|
/* The pixel is shown in the cursor background color */
|
||||||
((uint32_t *) buffer32->line[displine])[offset + svga->x_add] = bgcol;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[offset + svga->x_add] = bgcol;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* The pixel is shown as the inverse of the original screen pixel
|
/* The pixel is shown as the inverse of the original screen pixel
|
||||||
(XOR cursor) */
|
(XOR cursor) */
|
||||||
((uint32_t *) buffer32->line[displine])[offset + svga->x_add] ^= 0xffffff;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[offset + svga->x_add] ^= 0xffffff;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
/* The pixel is shown in the cursor foreground color */
|
/* The pixel is shown in the cursor foreground color */
|
||||||
((uint32_t *) buffer32->line[displine])[offset + svga->x_add] = fgcol;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[offset + svga->x_add] = fgcol;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2219,7 +2219,7 @@ gd54xx_readw_linear(uint32_t addr, void *p)
|
|||||||
temp |= (svga_readb_linear(addr, svga) << 8);
|
temp |= (svga_readb_linear(addr, svga) << 8);
|
||||||
|
|
||||||
if (svga->fast)
|
if (svga->fast)
|
||||||
cycles -= video_timing_read_w;
|
cycles -= svga->monitor->mon_video_timing_read_w;
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
case 3:
|
case 3:
|
||||||
@@ -2268,7 +2268,7 @@ gd54xx_readl_linear(uint32_t addr, void *p)
|
|||||||
temp |= (svga_readb_linear(addr + 2, svga) << 24);
|
temp |= (svga_readb_linear(addr + 2, svga) << 24);
|
||||||
|
|
||||||
if (svga->fast)
|
if (svga->fast)
|
||||||
cycles -= video_timing_read_l;
|
cycles -= svga->monitor->mon_video_timing_read_l;
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
case 2:
|
case 2:
|
||||||
@@ -2278,7 +2278,7 @@ gd54xx_readl_linear(uint32_t addr, void *p)
|
|||||||
temp |= (svga_readb_linear(addr, svga) << 24);
|
temp |= (svga_readb_linear(addr, svga) << 24);
|
||||||
|
|
||||||
if (svga->fast)
|
if (svga->fast)
|
||||||
cycles -= video_timing_read_l;
|
cycles -= svga->monitor->mon_video_timing_read_l;
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
case 3:
|
case 3:
|
||||||
@@ -2454,7 +2454,7 @@ gd54xx_writew_linear(uint32_t addr, uint16_t val, void *p)
|
|||||||
svga_writeb_linear(addr, val >> 8, svga);
|
svga_writeb_linear(addr, val >> 8, svga);
|
||||||
|
|
||||||
if (svga->fast)
|
if (svga->fast)
|
||||||
cycles -= video_timing_write_w;
|
cycles -= svga->monitor->mon_video_timing_write_w;
|
||||||
case 3:
|
case 3:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -4267,7 +4267,7 @@ gd54xx_force_redraw(void *p)
|
|||||||
{
|
{
|
||||||
gd54xx_t *gd54xx = (gd54xx_t *) p;
|
gd54xx_t *gd54xx = (gd54xx_t *) p;
|
||||||
|
|
||||||
gd54xx->svga.fullchange = changeframecount;
|
gd54xx->svga.fullchange = gd54xx->svga.monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
@@ -1776,7 +1776,7 @@ s3_accel_write_fifo_l(s3_t *s3, uint32_t addr, uint32_t val)
|
|||||||
case 0x8180:
|
case 0x8180:
|
||||||
s3->streams.pri_ctrl = val;
|
s3->streams.pri_ctrl = val;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x8184:
|
case 0x8184:
|
||||||
s3->streams.chroma_ctrl = val;
|
s3->streams.chroma_ctrl = val;
|
||||||
@@ -1806,37 +1806,37 @@ s3_accel_write_fifo_l(s3_t *s3, uint32_t addr, uint32_t val)
|
|||||||
case 0x81c0:
|
case 0x81c0:
|
||||||
s3->streams.pri_fb0 = val & 0x3fffff;
|
s3->streams.pri_fb0 = val & 0x3fffff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81c4:
|
case 0x81c4:
|
||||||
s3->streams.pri_fb1 = val & 0x3fffff;
|
s3->streams.pri_fb1 = val & 0x3fffff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81c8:
|
case 0x81c8:
|
||||||
s3->streams.pri_stride = val & 0xfff;
|
s3->streams.pri_stride = val & 0xfff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81cc:
|
case 0x81cc:
|
||||||
s3->streams.buffer_ctrl = val;
|
s3->streams.buffer_ctrl = val;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d0:
|
case 0x81d0:
|
||||||
s3->streams.sec_fb0 = val;
|
s3->streams.sec_fb0 = val;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d4:
|
case 0x81d4:
|
||||||
s3->streams.sec_fb1 = val;
|
s3->streams.sec_fb1 = val;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81d8:
|
case 0x81d8:
|
||||||
s3->streams.sec_stride = val;
|
s3->streams.sec_stride = val;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81dc:
|
case 0x81dc:
|
||||||
s3->streams.overlay_ctrl = val;
|
s3->streams.overlay_ctrl = val;
|
||||||
@@ -1864,28 +1864,28 @@ s3_accel_write_fifo_l(s3_t *s3, uint32_t addr, uint32_t val)
|
|||||||
s3->streams.pri_x = (val >> 16) & 0x7ff;
|
s3->streams.pri_x = (val >> 16) & 0x7ff;
|
||||||
s3->streams.pri_y = val & 0x7ff;
|
s3->streams.pri_y = val & 0x7ff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81f4:
|
case 0x81f4:
|
||||||
s3->streams.pri_size = val;
|
s3->streams.pri_size = val;
|
||||||
s3->streams.pri_w = (val >> 16) & 0x7ff;
|
s3->streams.pri_w = (val >> 16) & 0x7ff;
|
||||||
s3->streams.pri_h = val & 0x7ff;
|
s3->streams.pri_h = val & 0x7ff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81f8:
|
case 0x81f8:
|
||||||
s3->streams.sec_start = val;
|
s3->streams.sec_start = val;
|
||||||
s3->streams.sec_x = (val >> 16) & 0x7ff;
|
s3->streams.sec_x = (val >> 16) & 0x7ff;
|
||||||
s3->streams.sec_y = val & 0x7ff;
|
s3->streams.sec_y = val & 0x7ff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
case 0x81fc:
|
case 0x81fc:
|
||||||
s3->streams.sec_size = val;
|
s3->streams.sec_size = val;
|
||||||
s3->streams.sec_w = (val >> 16) & 0x7ff;
|
s3->streams.sec_w = (val >> 16) & 0x7ff;
|
||||||
s3->streams.sec_h = val & 0x7ff;
|
s3->streams.sec_h = val & 0x7ff;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8504:
|
case 0x8504:
|
||||||
@@ -2891,7 +2891,7 @@ s3_out(uint16_t addr, uint8_t val, void *p)
|
|||||||
if ((((svga->crtc[0x67] & 0xc) != 0xc) && (s3->chip >= S3_TRIO64V)) || (s3->chip < S3_TRIO64V))
|
if ((((svga->crtc[0x67] & 0xc) != 0xc) && (s3->chip >= S3_TRIO64V)) || (s3->chip < S3_TRIO64V))
|
||||||
svga->ma_latch |= (s3->ma_ext << 16);
|
svga->ma_latch |= (s3->ma_ext << 16);
|
||||||
} else {
|
} else {
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3626,10 +3626,10 @@ s3_accel_out(uint16_t port, uint8_t val, void *p)
|
|||||||
s3->accel.advfunc_cntl = val;
|
s3->accel.advfunc_cntl = val;
|
||||||
if ((s3->chip > S3_86C805) && ((svga->crtc[0x50] & 0xc1) == 0x80)) {
|
if ((s3->chip > S3_86C805) && ((svga->crtc[0x50] & 0xc1) == 0x80)) {
|
||||||
s3->width = (val & 4) ? 1600 : 800;
|
s3->width = (val & 4) ? 1600 : 800;
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
} else if (s3->chip <= S3_86C805) {
|
} else if (s3->chip <= S3_86C805) {
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
}
|
}
|
||||||
if (s3->chip > S3_86C924)
|
if (s3->chip > S3_86C924)
|
||||||
@@ -5653,16 +5653,16 @@ polygon_setup(s3_t *s3)
|
|||||||
#define WRITE(addr, dat) \
|
#define WRITE(addr, dat) \
|
||||||
if (s3->bpp == 0 && !s3->color_16bit) { \
|
if (s3->bpp == 0 && !s3->color_16bit) { \
|
||||||
svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \
|
svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \
|
||||||
svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = changeframecount; \
|
svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; \
|
||||||
} else if (s3->bpp == 1 || s3->color_16bit) { \
|
} else if (s3->bpp == 1 || s3->color_16bit) { \
|
||||||
vram_w[dword_remap_w(svga, addr) & (s3->vram_mask >> 1)] = dat; \
|
vram_w[dword_remap_w(svga, addr) & (s3->vram_mask >> 1)] = dat; \
|
||||||
svga->changedvram[(dword_remap_w(svga, addr) & (s3->vram_mask >> 1)) >> 11] = changeframecount; \
|
svga->changedvram[(dword_remap_w(svga, addr) & (s3->vram_mask >> 1)) >> 11] = svga->monitor->mon_changeframecount; \
|
||||||
} else if (s3->bpp == 2) { \
|
} else if (s3->bpp == 2) { \
|
||||||
svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \
|
svga->vram[dword_remap(svga, addr) & s3->vram_mask] = dat; \
|
||||||
svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = changeframecount; \
|
svga->changedvram[(dword_remap(svga, addr) & s3->vram_mask) >> 12] = svga->monitor->mon_changeframecount; \
|
||||||
} else { \
|
} else { \
|
||||||
vram_l[dword_remap_l(svga, addr) & (s3->vram_mask >> 2)] = dat; \
|
vram_l[dword_remap_l(svga, addr) & (s3->vram_mask >> 2)] = dat; \
|
||||||
svga->changedvram[(dword_remap_l(svga, addr) & (s3->vram_mask >> 2)) >> 10] = changeframecount; \
|
svga->changedvram[(dword_remap_l(svga, addr) & (s3->vram_mask >> 2)) >> 10] = svga->monitor->mon_changeframecount; \
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline void
|
static __inline void
|
||||||
@@ -8554,7 +8554,7 @@ s3_force_redraw(void *p)
|
|||||||
{
|
{
|
||||||
s3_t *s3 = (s3_t *) p;
|
s3_t *s3 = (s3_t *) p;
|
||||||
|
|
||||||
s3->svga.fullchange = changeframecount;
|
s3->svga.fullchange = s3->svga.monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const device_config_t s3_orchid_86c911_config[] = {
|
static const device_config_t s3_orchid_86c911_config[] = {
|
||||||
|
@@ -84,24 +84,24 @@ void
|
|||||||
svga_set_override(svga_t *svga, int val)
|
svga_set_override(svga_t *svga, int val)
|
||||||
{
|
{
|
||||||
if (svga->override && !val)
|
if (svga->override && !val)
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
svga->override = val;
|
svga->override = val;
|
||||||
|
|
||||||
if (!val) {
|
if (!val) {
|
||||||
/* Override turned off, restore overscan X and Y per the CRTC. */
|
/* Override turned off, restore overscan X and Y per the CRTC. */
|
||||||
if (enable_overscan) {
|
if (enable_overscan) {
|
||||||
overscan_y = (svga->rowcount + 1) << 1;
|
svga->monitor->mon_overscan_y = (svga->rowcount + 1) << 1;
|
||||||
|
|
||||||
if (overscan_y < 16)
|
if (svga->monitor->mon_overscan_y < 16)
|
||||||
overscan_y = 16;
|
svga->monitor->mon_overscan_y = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
overscan_x = (svga->seqregs[1] & 1) ? 16 : 18;
|
svga->monitor->mon_overscan_x = (svga->seqregs[1] & 1) ? 16 : 18;
|
||||||
|
|
||||||
if (svga->seqregs[1] & 8)
|
if (svga->seqregs[1] & 8)
|
||||||
overscan_x <<= 1;
|
svga->monitor->mon_overscan_x <<= 1;
|
||||||
} else
|
} else
|
||||||
overscan_x = overscan_y = 16;
|
svga->monitor->mon_overscan_x = svga->monitor->mon_overscan_y = 16;
|
||||||
/* Override turned off, fix overcan X and Y to 16. */
|
/* Override turned off, fix overcan X and Y to 16. */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,11 +124,11 @@ svga_out(uint16_t addr, uint8_t val, void *p)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((svga->attraddr == 0x13) && (svga->attrregs[0x13] != val))
|
if ((svga->attraddr == 0x13) && (svga->attrregs[0x13] != val))
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
o = svga->attrregs[svga->attraddr & 31];
|
o = svga->attrregs[svga->attraddr & 31];
|
||||||
svga->attrregs[svga->attraddr & 31] = val;
|
svga->attrregs[svga->attraddr & 31] = val;
|
||||||
if (svga->attraddr < 16)
|
if (svga->attraddr < 16)
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
if (svga->attraddr == 0x10 || svga->attraddr == 0x14 || svga->attraddr < 0x10) {
|
if (svga->attraddr == 0x10 || svga->attraddr == 0x14 || svga->attraddr < 0x10) {
|
||||||
for (c = 0; c < 16; c++) {
|
for (c = 0; c < 16; c++) {
|
||||||
if (svga->attrregs[0x10] & 0x80) {
|
if (svga->attrregs[0x10] & 0x80) {
|
||||||
@@ -137,7 +137,7 @@ svga_out(uint16_t addr, uint8_t val, void *p)
|
|||||||
svga->egapal[c] = (svga->attrregs[c] & 0x3f) | ((svga->attrregs[0x14] & 0xc) << 4);
|
svga->egapal[c] = (svga->attrregs[c] & 0x3f) | ((svga->attrregs[0x14] & 0xc) << 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
/* Recalculate timings on change of attribute register 0x11
|
/* Recalculate timings on change of attribute register 0x11
|
||||||
(overscan border color) too. */
|
(overscan border color) too. */
|
||||||
@@ -150,7 +150,7 @@ svga_out(uint16_t addr, uint8_t val, void *p)
|
|||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
} else if (svga->attraddr == 0x12) {
|
} else if (svga->attraddr == 0x12) {
|
||||||
if ((val & 0xf) != svga->plane_mask)
|
if ((val & 0xf) != svga->plane_mask)
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
svga->plane_mask = val & 0xf;
|
svga->plane_mask = val & 0xf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,7 @@ svga_out(uint16_t addr, uint8_t val, void *p)
|
|||||||
case 0x3c9:
|
case 0x3c9:
|
||||||
if (svga->adv_flags & FLAG_RAMDAC_SHIFT)
|
if (svga->adv_flags & FLAG_RAMDAC_SHIFT)
|
||||||
val <<= 2;
|
val <<= 2;
|
||||||
svga->fullchange = changeframecount;
|
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||||
switch (svga->dac_pos) {
|
switch (svga->dac_pos) {
|
||||||
case 0:
|
case 0:
|
||||||
svga->dac_r = val;
|
svga->dac_r = val;
|
||||||
@@ -552,19 +552,19 @@ svga_recalctimings(svga_t *svga)
|
|||||||
svga->char_width = (svga->seqregs[1] & 1) ? 8 : 9;
|
svga->char_width = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||||
|
|
||||||
if (enable_overscan) {
|
if (enable_overscan) {
|
||||||
overscan_y = (svga->rowcount + 1) << 1;
|
svga->monitor->mon_overscan_y = (svga->rowcount + 1) << 1;
|
||||||
|
|
||||||
if (overscan_y < 16)
|
if (svga->monitor->mon_overscan_y < 16)
|
||||||
overscan_y = 16;
|
svga->monitor->mon_overscan_y = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) {
|
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) {
|
||||||
overscan_x = (svga->seqregs[1] & 1) ? 16 : 18;
|
svga->monitor->mon_overscan_x = (svga->seqregs[1] & 1) ? 16 : 18;
|
||||||
|
|
||||||
if (svga->seqregs[1] & 8)
|
if (svga->seqregs[1] & 8)
|
||||||
overscan_x <<= 1;
|
svga->monitor->mon_overscan_x <<= 1;
|
||||||
} else
|
} else
|
||||||
overscan_x = 16;
|
svga->monitor->mon_overscan_x = 16;
|
||||||
|
|
||||||
if (vga_on) {
|
if (vga_on) {
|
||||||
if (svga->recalctimings_ex) {
|
if (svga->recalctimings_ex) {
|
||||||
@@ -577,8 +577,8 @@ svga_recalctimings(svga_t *svga)
|
|||||||
xga_recalctimings(svga);
|
xga_recalctimings(svga);
|
||||||
}
|
}
|
||||||
|
|
||||||
svga->y_add = (overscan_y >> 1) - (svga->crtc[8] & 0x1f);
|
svga->y_add = (svga->monitor->mon_overscan_y >> 1) - (svga->crtc[8] & 0x1f);
|
||||||
svga->x_add = (overscan_x >> 1);
|
svga->x_add = (svga->monitor->mon_overscan_x >> 1);
|
||||||
|
|
||||||
if (svga->vblankstart < svga->dispend)
|
if (svga->vblankstart < svga->dispend)
|
||||||
svga->dispend = svga->vblankstart;
|
svga->dispend = svga->vblankstart;
|
||||||
@@ -631,10 +631,10 @@ svga_do_render(svga_t *svga)
|
|||||||
if (!svga->override) {
|
if (!svga->override) {
|
||||||
svga->render(svga);
|
svga->render(svga);
|
||||||
|
|
||||||
svga->x_add = (overscan_x >> 1);
|
svga->x_add = (svga->monitor->mon_overscan_x >> 1);
|
||||||
svga_render_overscan_left(svga);
|
svga_render_overscan_left(svga);
|
||||||
svga_render_overscan_right(svga);
|
svga_render_overscan_right(svga);
|
||||||
svga->x_add = (overscan_x >> 1) - svga->scrollcache;
|
svga->x_add = (svga->monitor->mon_overscan_x >> 1) - svga->scrollcache;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (svga->overlay_on) {
|
if (svga->overlay_on) {
|
||||||
@@ -719,7 +719,7 @@ svga_poll(void *p)
|
|||||||
svga->ma &= svga->vram_display_mask;
|
svga->ma &= svga->vram_display_mask;
|
||||||
if (svga->firstline == 2000) {
|
if (svga->firstline == 2000) {
|
||||||
svga->firstline = svga->displine;
|
svga->firstline = svga->displine;
|
||||||
video_wait_for_buffer();
|
video_wait_for_buffer_monitor(svga->monitor_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (svga->hwcursor_on || svga->dac_hwcursor_on || svga->overlay_on) {
|
if (svga->hwcursor_on || svga->dac_hwcursor_on || svga->overlay_on) {
|
||||||
@@ -813,7 +813,7 @@ svga_poll(void *p)
|
|||||||
svga->sc = 0;
|
svga->sc = 0;
|
||||||
if (svga->attrregs[0x10] & 0x20) {
|
if (svga->attrregs[0x10] & 0x20) {
|
||||||
svga->scrollcache = 0;
|
svga->scrollcache = 0;
|
||||||
svga->x_add = (overscan_x >> 1);
|
svga->x_add = (svga->monitor->mon_overscan_x >> 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -870,7 +870,7 @@ svga_poll(void *p)
|
|||||||
|
|
||||||
svga->oddeven ^= 1;
|
svga->oddeven ^= 1;
|
||||||
|
|
||||||
changeframecount = svga->interlace ? 3 : 2;
|
svga->monitor->mon_changeframecount = svga->interlace ? 3 : 2;
|
||||||
svga->vslines = 0;
|
svga->vslines = 0;
|
||||||
|
|
||||||
if (svga->interlace && svga->oddeven)
|
if (svga->interlace && svga->oddeven)
|
||||||
@@ -909,7 +909,7 @@ svga_poll(void *p)
|
|||||||
if ((svga->seqregs[1] & 8) || (svga->render == svga_render_8bpp_lowres))
|
if ((svga->seqregs[1] & 8) || (svga->render == svga_render_8bpp_lowres))
|
||||||
svga->scrollcache <<= 1;
|
svga->scrollcache <<= 1;
|
||||||
|
|
||||||
svga->x_add = (overscan_x >> 1) - svga->scrollcache;
|
svga->x_add = (svga->monitor->mon_overscan_x >> 1) - svga->scrollcache;
|
||||||
|
|
||||||
svga->linecountff = 0;
|
svga->linecountff = 0;
|
||||||
|
|
||||||
@@ -938,6 +938,8 @@ svga_init(const device_t *info, svga_t *svga, void *p, int memsize,
|
|||||||
int c, d, e;
|
int c, d, e;
|
||||||
|
|
||||||
svga->p = p;
|
svga->p = p;
|
||||||
|
svga->monitor_index = monitor_index_global;
|
||||||
|
svga->monitor = &monitors[svga->monitor_index];
|
||||||
|
|
||||||
for (c = 0; c < 256; c++) {
|
for (c = 0; c < 256; c++) {
|
||||||
e = c;
|
e = c;
|
||||||
@@ -951,8 +953,8 @@ svga_init(const device_t *info, svga_t *svga, void *p, int memsize,
|
|||||||
svga->attrregs[0x11] = 0;
|
svga->attrregs[0x11] = 0;
|
||||||
svga->overscan_color = 0x000000;
|
svga->overscan_color = 0x000000;
|
||||||
|
|
||||||
overscan_x = 16;
|
svga->monitor->mon_overscan_x = 16;
|
||||||
overscan_y = 32;
|
svga->monitor->mon_overscan_y = 32;
|
||||||
svga->x_add = 8;
|
svga->x_add = 8;
|
||||||
svga->y_add = 16;
|
svga->y_add = 16;
|
||||||
|
|
||||||
@@ -1075,7 +1077,7 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *p)
|
|||||||
if (svga->adv_flags & FLAG_ADDR_BY8)
|
if (svga->adv_flags & FLAG_ADDR_BY8)
|
||||||
writemask2 = svga->seqregs[2];
|
writemask2 = svga->seqregs[2];
|
||||||
|
|
||||||
cycles -= video_timing_write_b;
|
cycles -= svga->monitor->mon_video_timing_write_b;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
if (xga_enabled) {
|
if (xga_enabled) {
|
||||||
@@ -1136,7 +1138,7 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *p)
|
|||||||
|
|
||||||
addr &= svga->vram_mask;
|
addr &= svga->vram_mask;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = svga->monitor->mon_changeframecount;
|
||||||
|
|
||||||
count = 4;
|
count = 4;
|
||||||
if (svga->adv_flags & FLAG_LATCH8)
|
if (svga->adv_flags & FLAG_LATCH8)
|
||||||
@@ -1276,7 +1278,7 @@ svga_read_common(uint32_t addr, uint8_t linear, void *p)
|
|||||||
if (svga->adv_flags & FLAG_ADDR_BY8)
|
if (svga->adv_flags & FLAG_ADDR_BY8)
|
||||||
readplane = svga->gdcreg[4] & 7;
|
readplane = svga->gdcreg[4] & 7;
|
||||||
|
|
||||||
cycles -= video_timing_read_b;
|
cycles -= svga->monitor->mon_video_timing_read_b;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
if (xga_enabled) {
|
if (xga_enabled) {
|
||||||
@@ -1405,11 +1407,11 @@ svga_doblit(int wx, int wy, svga_t *svga)
|
|||||||
int i, j;
|
int i, j;
|
||||||
int xs_temp, ys_temp;
|
int xs_temp, ys_temp;
|
||||||
|
|
||||||
y_add = (enable_overscan) ? overscan_y : 0;
|
y_add = (enable_overscan) ? svga->monitor->mon_overscan_y : 0;
|
||||||
x_add = (enable_overscan) ? overscan_x : 0;
|
x_add = (enable_overscan) ? svga->monitor->mon_overscan_x : 0;
|
||||||
y_start = (enable_overscan) ? 0 : (overscan_y >> 1);
|
y_start = (enable_overscan) ? 0 : (svga->monitor->mon_overscan_y >> 1);
|
||||||
x_start = (enable_overscan) ? 0 : (overscan_x >> 1);
|
x_start = (enable_overscan) ? 0 : (svga->monitor->mon_overscan_x >> 1);
|
||||||
bottom = (overscan_y >> 1) + (svga->crtc[8] & 0x1f);
|
bottom = (svga->monitor->mon_overscan_y >> 1) + (svga->crtc[8] & 0x1f);
|
||||||
|
|
||||||
if (svga->vertical_linedbl) {
|
if (svga->vertical_linedbl) {
|
||||||
y_add <<= 1;
|
y_add <<= 1;
|
||||||
@@ -1432,12 +1434,12 @@ svga_doblit(int wx, int wy, svga_t *svga)
|
|||||||
if (ys_temp < 32)
|
if (ys_temp < 32)
|
||||||
ys_temp = 200;
|
ys_temp = 200;
|
||||||
|
|
||||||
if ((svga->crtc[0x17] & 0x80) && ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get())) {
|
if ((svga->crtc[0x17] & 0x80) && ((xs_temp != svga->monitor->mon_xsize) || (ys_temp != svga->monitor->mon_ysize) || video_force_resize_get_monitor(svga->monitor_index))) {
|
||||||
/* Screen res has changed.. fix up, and let them know. */
|
/* Screen res has changed.. fix up, and let them know. */
|
||||||
xsize = xs_temp;
|
svga->monitor->mon_xsize = xs_temp;
|
||||||
ysize = ys_temp;
|
svga->monitor->mon_ysize = ys_temp;
|
||||||
|
|
||||||
if ((xsize > 1984) || (ysize > 2016)) {
|
if ((svga->monitor->mon_xsize > 1984) || (svga->monitor->mon_ysize > 2016)) {
|
||||||
/* 2048x2048 is the biggest safe render texture, to account for overscan,
|
/* 2048x2048 is the biggest safe render texture, to account for overscan,
|
||||||
we suppress overscan starting from x 1984 and y 2016. */
|
we suppress overscan starting from x 1984 and y 2016. */
|
||||||
x_add = 0;
|
x_add = 0;
|
||||||
@@ -1449,30 +1451,30 @@ svga_doblit(int wx, int wy, svga_t *svga)
|
|||||||
/* Block resolution changes while in DPMS mode to avoid getting a bogus
|
/* Block resolution changes while in DPMS mode to avoid getting a bogus
|
||||||
screen width (320). We're already rendering a blank screen anyway. */
|
screen width (320). We're already rendering a blank screen anyway. */
|
||||||
if (!svga->dpms)
|
if (!svga->dpms)
|
||||||
set_screen_size(xsize + x_add, ysize + y_add);
|
set_screen_size_monitor(svga->monitor->mon_xsize + x_add, svga->monitor->mon_ysize + y_add, svga->monitor_index);
|
||||||
|
|
||||||
if (video_force_resize_get())
|
if (video_force_resize_get_monitor(svga->monitor_index))
|
||||||
video_force_resize_set(0);
|
video_force_resize_set_monitor(0, svga->monitor_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((wx >= 160) && ((wy + 1) >= 120)) {
|
if ((wx >= 160) && ((wy + 1) >= 120)) {
|
||||||
/* Draw (overscan_size - scroll size) lines of overscan on top and bottom. */
|
/* Draw (overscan_size - scroll size) lines of overscan on top and bottom. */
|
||||||
for (i = 0; i < svga->y_add; i++) {
|
for (i = 0; i < svga->y_add; i++) {
|
||||||
p = &buffer32->line[i & 0x7ff][0];
|
p = &svga->monitor->target_buffer->line[i & 0x7ff][0];
|
||||||
|
|
||||||
for (j = 0; j < (xsize + x_add); j++)
|
for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++)
|
||||||
p[j] = svga->overscan_color;
|
p[j] = svga->overscan_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < bottom; i++) {
|
for (i = 0; i < bottom; i++) {
|
||||||
p = &buffer32->line[(ysize + svga->y_add + i) & 0x7ff][0];
|
p = &svga->monitor->target_buffer->line[(svga->monitor->mon_ysize + svga->y_add + i) & 0x7ff][0];
|
||||||
|
|
||||||
for (j = 0; j < (xsize + x_add); j++)
|
for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++)
|
||||||
p[j] = svga->overscan_color;
|
p[j] = svga->overscan_color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
video_blit_memtoscreen(x_start, y_start, xsize + x_add, ysize + y_add);
|
video_blit_memtoscreen_monitor(x_start, y_start, svga->monitor->mon_xsize + x_add, svga->monitor->mon_ysize + y_add, svga->monitor_index);
|
||||||
|
|
||||||
if (svga->vertical_linedbl)
|
if (svga->vertical_linedbl)
|
||||||
svga->vertical_linedbl >>= 1;
|
svga->vertical_linedbl >>= 1;
|
||||||
@@ -1492,7 +1494,7 @@ svga_writeb_linear(uint32_t addr, uint8_t val, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return;
|
return;
|
||||||
addr &= svga->vram_mask;
|
addr &= svga->vram_mask;
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = svga->monitor->mon_changeframecount;
|
||||||
*(uint8_t *) &svga->vram[addr] = val;
|
*(uint8_t *) &svga->vram[addr] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1507,7 +1509,7 @@ svga_writew_common(uint32_t addr, uint16_t val, uint8_t linear, void *p)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cycles -= video_timing_write_w;
|
cycles -= svga->monitor->mon_video_timing_write_w;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
addr = svga_decode_addr(svga, addr, 1);
|
addr = svga_decode_addr(svga, addr, 1);
|
||||||
@@ -1521,12 +1523,12 @@ svga_writew_common(uint32_t addr, uint16_t val, uint8_t linear, void *p)
|
|||||||
uint32_t addr2 = svga->translate_address(addr, p);
|
uint32_t addr2 = svga->translate_address(addr, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = val & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = val & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
addr2 = svga->translate_address(addr + 1, p);
|
addr2 = svga->translate_address(addr + 1, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1534,7 +1536,7 @@ svga_writew_common(uint32_t addr, uint16_t val, uint8_t linear, void *p)
|
|||||||
return;
|
return;
|
||||||
addr &= svga->vram_mask;
|
addr &= svga->vram_mask;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = svga->monitor->mon_changeframecount;
|
||||||
*(uint16_t *) &svga->vram[addr] = val;
|
*(uint16_t *) &svga->vram[addr] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1563,7 +1565,7 @@ svga_writel_common(uint32_t addr, uint32_t val, uint8_t linear, void *p)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cycles -= video_timing_write_l;
|
cycles -= svga->monitor->mon_video_timing_write_l;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
addr = svga_decode_addr(svga, addr, 1);
|
addr = svga_decode_addr(svga, addr, 1);
|
||||||
@@ -1577,22 +1579,22 @@ svga_writel_common(uint32_t addr, uint32_t val, uint8_t linear, void *p)
|
|||||||
uint32_t addr2 = svga->translate_address(addr, p);
|
uint32_t addr2 = svga->translate_address(addr, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = val & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = val & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
addr2 = svga->translate_address(addr + 1, p);
|
addr2 = svga->translate_address(addr + 1, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
addr2 = svga->translate_address(addr + 2, p);
|
addr2 = svga->translate_address(addr + 2, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = (val >> 16) & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = (val >> 16) & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
addr2 = svga->translate_address(addr + 3, p);
|
addr2 = svga->translate_address(addr + 3, p);
|
||||||
if (addr2 < svga->vram_max) {
|
if (addr2 < svga->vram_max) {
|
||||||
svga->vram[addr2 & svga->vram_mask] = (val >> 24) & 0xff;
|
svga->vram[addr2 & svga->vram_mask] = (val >> 24) & 0xff;
|
||||||
svga->changedvram[addr2 >> 12] = changeframecount;
|
svga->changedvram[addr2 >> 12] = svga->monitor->mon_changeframecount;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1600,7 +1602,7 @@ svga_writel_common(uint32_t addr, uint32_t val, uint8_t linear, void *p)
|
|||||||
return;
|
return;
|
||||||
addr &= svga->vram_mask;
|
addr &= svga->vram_mask;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = svga->monitor->mon_changeframecount;
|
||||||
*(uint32_t *) &svga->vram[addr] = val;
|
*(uint32_t *) &svga->vram[addr] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1639,7 +1641,7 @@ svga_readw_common(uint32_t addr, uint8_t linear, void *p)
|
|||||||
if (!svga->fast)
|
if (!svga->fast)
|
||||||
return svga_read_common(addr, linear, p) | (svga_read_common(addr + 1, linear, p) << 8);
|
return svga_read_common(addr, linear, p) | (svga_read_common(addr + 1, linear, p) << 8);
|
||||||
|
|
||||||
cycles -= video_timing_read_w;
|
cycles -= svga->monitor->mon_video_timing_read_w;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
addr = svga_decode_addr(svga, addr, 0);
|
addr = svga_decode_addr(svga, addr, 0);
|
||||||
@@ -1686,7 +1688,7 @@ svga_readl_common(uint32_t addr, uint8_t linear, void *p)
|
|||||||
return svga_read_common(addr, linear, p) | (svga_read_common(addr + 1, linear, p) << 8) | (svga_read_common(addr + 2, linear, p) << 16) | (svga_read_common(addr + 3, linear, p) << 24);
|
return svga_read_common(addr, linear, p) | (svga_read_common(addr + 1, linear, p) << 8) | (svga_read_common(addr + 2, linear, p) << 16) | (svga_read_common(addr + 3, linear, p) << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
cycles -= video_timing_read_l;
|
cycles -= svga->monitor->mon_video_timing_read_l;
|
||||||
|
|
||||||
if (!linear) {
|
if (!linear) {
|
||||||
addr = svga_decode_addr(svga, addr, 0);
|
addr = svga_decode_addr(svga, addr, 0);
|
||||||
|
@@ -67,7 +67,7 @@ svga_render_blank(svga_t *svga)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t *line_ptr = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
uint32_t *line_ptr = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
uint32_t line_width = (uint32_t) (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t);
|
uint32_t line_width = (uint32_t) (svga->hdisp + svga->scrollcache) * char_width * sizeof(uint32_t);
|
||||||
memset(line_ptr, 0, line_width);
|
memset(line_ptr, 0, line_width);
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ svga_render_overscan_left(svga_t *svga)
|
|||||||
if (svga->scrblank || (svga->hdisp == 0))
|
if (svga->scrblank || (svga->hdisp == 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t *line_ptr = buffer32->line[svga->displine + svga->y_add];
|
uint32_t *line_ptr = svga->monitor->target_buffer->line[svga->displine + svga->y_add];
|
||||||
for (i = 0; i < svga->x_add; i++)
|
for (i = 0; i < svga->x_add; i++)
|
||||||
*line_ptr++ = svga->overscan_color;
|
*line_ptr++ = svga->overscan_color;
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ svga_render_overscan_right(svga_t *svga)
|
|||||||
if (svga->scrblank || (svga->hdisp == 0))
|
if (svga->scrblank || (svga->hdisp == 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32_t *line_ptr = &buffer32->line[svga->displine + svga->y_add][svga->x_add + svga->hdisp];
|
uint32_t *line_ptr = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add + svga->hdisp];
|
||||||
right = (overscan_x >> 1);
|
right = (overscan_x >> 1);
|
||||||
for (i = 0; i < right; i++)
|
for (i = 0; i < right; i++)
|
||||||
*line_ptr++ = svga->overscan_color;
|
*line_ptr++ = svga->overscan_color;
|
||||||
@@ -124,7 +124,7 @@ svga_render_text_40(svga_t *svga)
|
|||||||
svga->lastline_draw = svga->displine;
|
svga->lastline_draw = svga->displine;
|
||||||
|
|
||||||
if (svga->fullchange) {
|
if (svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
xinc = (svga->seqregs[1] & 1) ? 16 : 18;
|
xinc = (svga->seqregs[1] & 1) ? 16 : 18;
|
||||||
|
|
||||||
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
||||||
@@ -198,7 +198,7 @@ svga_render_text_80(svga_t *svga)
|
|||||||
svga->lastline_draw = svga->displine;
|
svga->lastline_draw = svga->displine;
|
||||||
|
|
||||||
if (svga->fullchange) {
|
if (svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||||
|
|
||||||
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
for (x = 0; x < (svga->hdisp + svga->scrollcache); x += xinc) {
|
||||||
@@ -271,7 +271,7 @@ svga_render_text_80_ksc5601(svga_t *svga)
|
|||||||
svga->lastline_draw = svga->displine;
|
svga->lastline_draw = svga->displine;
|
||||||
|
|
||||||
if (svga->fullchange) {
|
if (svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
xinc = (svga->seqregs[1] & 1) ? 8 : 9;
|
||||||
|
|
||||||
@@ -394,7 +394,7 @@ svga_render_2bpp_lowres(svga_t *svga)
|
|||||||
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||||
|
|
||||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -442,7 +442,7 @@ svga_render_2bpp_lowres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -491,7 +491,7 @@ svga_render_2bpp_highres(svga_t *svga)
|
|||||||
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
changed_offset = ((svga->ma << 1) + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||||
|
|
||||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -539,7 +539,7 @@ svga_render_2bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -588,7 +588,7 @@ svga_render_2bpp_headland_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -641,7 +641,7 @@ svga_render_4bpp_lowres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -701,7 +701,7 @@ svga_render_4bpp_lowres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -759,7 +759,7 @@ svga_render_4bpp_highres(svga_t *svga)
|
|||||||
changed_offset = (svga->ma + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
changed_offset = (svga->ma + (svga->sc & ~svga->crtc[0x17] & 3) * 0x8000) >> 12;
|
||||||
|
|
||||||
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_offset] || svga->changedvram[changed_offset + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -819,7 +819,7 @@ svga_render_4bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -874,7 +874,7 @@ svga_render_8bpp_lowres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -897,7 +897,7 @@ svga_render_8bpp_lowres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -946,7 +946,7 @@ svga_render_8bpp_highres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -974,7 +974,7 @@ svga_render_8bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1026,7 +1026,7 @@ svga_render_8bpp_tseng_lowres(svga_t *svga)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1068,7 +1068,7 @@ svga_render_8bpp_tseng_highres(svga_t *svga)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1129,7 +1129,7 @@ svga_render_15bpp_lowres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1153,7 +1153,7 @@ svga_render_15bpp_lowres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1200,7 +1200,7 @@ svga_render_15bpp_highres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1230,7 +1230,7 @@ svga_render_15bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1281,7 +1281,7 @@ svga_render_15bpp_mix_lowres(svga_t *svga)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1316,7 +1316,7 @@ svga_render_15bpp_mix_highres(svga_t *svga)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1361,7 +1361,7 @@ svga_render_16bpp_lowres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1383,7 +1383,7 @@ svga_render_16bpp_lowres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1430,7 +1430,7 @@ svga_render_16bpp_highres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1460,7 +1460,7 @@ svga_render_16bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1526,14 +1526,14 @@ svga_render_24bpp_lowres(svga_t *svga)
|
|||||||
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
||||||
svga->ma += 3;
|
svga->ma += 3;
|
||||||
svga->ma &= svga->vram_display_mask;
|
svga->ma &= svga->vram_display_mask;
|
||||||
buffer32->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] = buffer32->line[svga->displine + svga->y_add][(x << 1) + 1 + svga->x_add] = fg;
|
svga->monitor->target_buffer->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] = svga->monitor->target_buffer->line[svga->displine + svga->y_add][(x << 1) + 1 + svga->x_add] = fg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1588,7 +1588,7 @@ svga_render_24bpp_highres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1615,7 +1615,7 @@ svga_render_24bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1677,14 +1677,14 @@ svga_render_32bpp_lowres(svga_t *svga)
|
|||||||
dat = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
dat = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16);
|
||||||
svga->ma += 4;
|
svga->ma += 4;
|
||||||
svga->ma &= svga->vram_display_mask;
|
svga->ma &= svga->vram_display_mask;
|
||||||
buffer32->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] = buffer32->line[svga->displine + svga->y_add][(x << 1) + 1 + svga->x_add] = dat;
|
svga->monitor->target_buffer->line[svga->displine + svga->y_add][(x << 1) + svga->x_add] = svga->monitor->target_buffer->line[svga->displine + svga->y_add][(x << 1) + 1 + svga->x_add] = dat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1724,7 +1724,7 @@ svga_render_32bpp_highres(svga_t *svga)
|
|||||||
|
|
||||||
if (svga->force_old_addr) {
|
if (svga->force_old_addr) {
|
||||||
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange) {
|
if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->changedvram[(svga->ma >> 12) + 2] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1741,7 +1741,7 @@ svga_render_32bpp_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1781,7 +1781,7 @@ svga_render_ABGR8888_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
@@ -1820,7 +1820,7 @@ svga_render_RGBA8888_highres(svga_t *svga)
|
|||||||
changed_addr = svga->remap_func(svga, svga->ma);
|
changed_addr = svga->remap_func(svga, svga->ma);
|
||||||
|
|
||||||
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
if (svga->changedvram[changed_addr >> 12] || svga->changedvram[(changed_addr >> 12) + 1] || svga->fullchange) {
|
||||||
p = &buffer32->line[svga->displine + svga->y_add][svga->x_add];
|
p = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add];
|
||||||
|
|
||||||
if (svga->firstline_draw == 2000)
|
if (svga->firstline_draw == 2000)
|
||||||
svga->firstline_draw = svga->displine;
|
svga->firstline_draw = svga->displine;
|
||||||
|
@@ -163,10 +163,10 @@ video_cards[] = {
|
|||||||
{ &et4000w32p_pci_device },
|
{ &et4000w32p_pci_device },
|
||||||
{ &gd5430_pci_device, },
|
{ &gd5430_pci_device, },
|
||||||
{ &gd5434_pci_device },
|
{ &gd5434_pci_device },
|
||||||
{ &gd5436_pci_device },
|
{ &gd5436_pci_device, VIDEO_FLAG_TYPE_SPECIAL },
|
||||||
{ &gd5440_pci_device },
|
{ &gd5440_pci_device },
|
||||||
{ &gd5446_pci_device },
|
{ &gd5446_pci_device, VIDEO_FLAG_TYPE_SPECIAL },
|
||||||
{ &gd5446_stb_pci_device },
|
{ &gd5446_stb_pci_device,VIDEO_FLAG_TYPE_SPECIAL },
|
||||||
{ &gd5480_pci_device },
|
{ &gd5480_pci_device },
|
||||||
{ &s3_spea_mercury_lite_86c928_pci_device },
|
{ &s3_spea_mercury_lite_86c928_pci_device },
|
||||||
{ &s3_diamond_stealth64_964_pci_device },
|
{ &s3_diamond_stealth64_964_pci_device },
|
||||||
@@ -350,7 +350,6 @@ video_reset(int card)
|
|||||||
if (!(card == VID_NONE)
|
if (!(card == VID_NONE)
|
||||||
&& !machine_has_flags(machine, MACHINE_VIDEO_ONLY)
|
&& !machine_has_flags(machine, MACHINE_VIDEO_ONLY)
|
||||||
&& gfxcard_2 != 0
|
&& gfxcard_2 != 0
|
||||||
&& (video_cards[gfxcard_2].flags != video_cards[gfxcard].flags)
|
|
||||||
&& device_is_valid(video_card_getdevice(gfxcard_2), machine)) {
|
&& device_is_valid(video_card_getdevice(gfxcard_2), machine)) {
|
||||||
video_monitor_init(1);
|
video_monitor_init(1);
|
||||||
monitor_index_global = 1;
|
monitor_index_global = 1;
|
||||||
|
@@ -453,7 +453,7 @@ banshee_render_16bpp_tiled(svga_t *svga)
|
|||||||
{
|
{
|
||||||
banshee_t *banshee = (banshee_t *) svga->p;
|
banshee_t *banshee = (banshee_t *) svga->p;
|
||||||
int x;
|
int x;
|
||||||
uint32_t *p = &((uint32_t *) buffer32->line[svga->displine + svga->y_add])[svga->x_add];
|
uint32_t *p = &((uint32_t *) svga->monitor->target_buffer->line[svga->displine + svga->y_add])[svga->x_add];
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
int drawn = 0;
|
int drawn = 0;
|
||||||
|
|
||||||
@@ -1602,6 +1602,10 @@ banshee_read_linear(uint32_t addr, void *p)
|
|||||||
|
|
||||||
cycles -= voodoo->read_time;
|
cycles -= voodoo->read_time;
|
||||||
|
|
||||||
|
if ((banshee->pci_regs[0x30] & 0x01) && addr >= banshee->bios_rom.mapping.base && addr < (banshee->bios_rom.mapping.base + banshee->bios_rom.sz))
|
||||||
|
{
|
||||||
|
return rom_read(addr & (banshee->bios_rom.sz - 1), &banshee->bios_rom);
|
||||||
|
}
|
||||||
addr &= svga->decode_mask;
|
addr &= svga->decode_mask;
|
||||||
if (addr >= voodoo->tile_base) {
|
if (addr >= voodoo->tile_base) {
|
||||||
int x, y;
|
int x, y;
|
||||||
@@ -1616,7 +1620,7 @@ banshee_read_linear(uint32_t addr, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return 0xff;
|
return 0xff;
|
||||||
|
|
||||||
cycles -= video_timing_read_b;
|
cycles -= svga->monitor->mon_video_timing_read_b;
|
||||||
|
|
||||||
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
||||||
|
|
||||||
@@ -1634,6 +1638,10 @@ banshee_read_linear_w(uint32_t addr, void *p)
|
|||||||
return banshee_read_linear(addr, p) | (banshee_read_linear(addr + 1, p) << 8);
|
return banshee_read_linear(addr, p) | (banshee_read_linear(addr + 1, p) << 8);
|
||||||
|
|
||||||
cycles -= voodoo->read_time;
|
cycles -= voodoo->read_time;
|
||||||
|
if ((banshee->pci_regs[0x30] & 0x01) && addr >= banshee->bios_rom.mapping.base && addr < (banshee->bios_rom.mapping.base + banshee->bios_rom.sz))
|
||||||
|
{
|
||||||
|
return rom_readw(addr & (banshee->bios_rom.sz - 1), &banshee->bios_rom);
|
||||||
|
}
|
||||||
addr &= svga->decode_mask;
|
addr &= svga->decode_mask;
|
||||||
if (addr >= voodoo->tile_base) {
|
if (addr >= voodoo->tile_base) {
|
||||||
int x, y;
|
int x, y;
|
||||||
@@ -1648,7 +1656,7 @@ banshee_read_linear_w(uint32_t addr, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return 0xff;
|
return 0xff;
|
||||||
|
|
||||||
cycles -= video_timing_read_w;
|
cycles -= svga->monitor->mon_video_timing_read_w;
|
||||||
|
|
||||||
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
||||||
|
|
||||||
@@ -1667,6 +1675,10 @@ banshee_read_linear_l(uint32_t addr, void *p)
|
|||||||
|
|
||||||
cycles -= voodoo->read_time;
|
cycles -= voodoo->read_time;
|
||||||
|
|
||||||
|
if ((banshee->pci_regs[0x30] & 0x01) && addr >= banshee->bios_rom.mapping.base && addr < (banshee->bios_rom.mapping.base + banshee->bios_rom.sz))
|
||||||
|
{
|
||||||
|
return rom_readl(addr & (banshee->bios_rom.sz - 1), &banshee->bios_rom);
|
||||||
|
}
|
||||||
addr &= svga->decode_mask;
|
addr &= svga->decode_mask;
|
||||||
if (addr >= voodoo->tile_base) {
|
if (addr >= voodoo->tile_base) {
|
||||||
int x, y;
|
int x, y;
|
||||||
@@ -1681,7 +1693,7 @@ banshee_read_linear_l(uint32_t addr, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return 0xff;
|
return 0xff;
|
||||||
|
|
||||||
cycles -= video_timing_read_l;
|
cycles -= svga->monitor->mon_video_timing_read_l;
|
||||||
|
|
||||||
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
// banshee_log("read_linear: addr=%08x val=%02x\n", addr, svga->vram[addr & svga->vram_mask]);
|
||||||
|
|
||||||
@@ -1712,7 +1724,7 @@ banshee_write_linear(uint32_t addr, uint8_t val, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cycles -= video_timing_write_b;
|
cycles -= svga->monitor->mon_video_timing_write_b;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = changeframecount;
|
||||||
svga->vram[addr & svga->vram_mask] = val;
|
svga->vram[addr & svga->vram_mask] = val;
|
||||||
@@ -1747,7 +1759,7 @@ banshee_write_linear_w(uint32_t addr, uint16_t val, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cycles -= video_timing_write_w;
|
cycles -= svga->monitor->mon_video_timing_write_w;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = changeframecount;
|
||||||
*(uint16_t *) &svga->vram[addr & svga->vram_mask] = val;
|
*(uint16_t *) &svga->vram[addr & svga->vram_mask] = val;
|
||||||
@@ -1790,7 +1802,7 @@ banshee_write_linear_l(uint32_t addr, uint32_t val, void *p)
|
|||||||
if (addr >= svga->vram_max)
|
if (addr >= svga->vram_max)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cycles -= video_timing_write_l;
|
cycles -= svga->monitor->mon_video_timing_write_l;
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = changeframecount;
|
||||||
*(uint32_t *) &svga->vram[addr & svga->vram_mask] = val;
|
*(uint32_t *) &svga->vram[addr & svga->vram_mask] = val;
|
||||||
@@ -1862,7 +1874,7 @@ banshee_hwcursor_draw(svga_t *svga, int displine)
|
|||||||
if (x_off > -8) {
|
if (x_off > -8) {
|
||||||
for (xx = 0; xx < 8; xx++) {
|
for (xx = 0; xx < 8; xx++) {
|
||||||
if (plane0[x >> 3] & (1 << 7))
|
if (plane0[x >> 3] & (1 << 7))
|
||||||
((uint32_t *) buffer32->line[displine])[x_off + xx + svga->x_add] = (plane1[x >> 3] & (1 << 7)) ? col1 : col0;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[x_off + xx + svga->x_add] = (plane1[x >> 3] & (1 << 7)) ? col1 : col0;
|
||||||
|
|
||||||
plane0[x >> 3] <<= 1;
|
plane0[x >> 3] <<= 1;
|
||||||
plane1[x >> 3] <<= 1;
|
plane1[x >> 3] <<= 1;
|
||||||
@@ -1877,9 +1889,9 @@ banshee_hwcursor_draw(svga_t *svga, int displine)
|
|||||||
if (x_off > -8) {
|
if (x_off > -8) {
|
||||||
for (xx = 0; xx < 8; xx++) {
|
for (xx = 0; xx < 8; xx++) {
|
||||||
if (!(plane0[x >> 3] & (1 << 7)))
|
if (!(plane0[x >> 3] & (1 << 7)))
|
||||||
((uint32_t *) buffer32->line[displine])[x_off + xx + svga->x_add] = (plane1[x >> 3] & (1 << 7)) ? col1 : col0;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[x_off + xx + svga->x_add] = (plane1[x >> 3] & (1 << 7)) ? col1 : col0;
|
||||||
else if (plane1[x >> 3] & (1 << 7))
|
else if (plane1[x >> 3] & (1 << 7))
|
||||||
((uint32_t *) buffer32->line[displine])[x_off + xx + svga->x_add] ^= 0xffffff;
|
((uint32_t *) svga->monitor->target_buffer->line[displine])[x_off + xx + svga->x_add] ^= 0xffffff;
|
||||||
|
|
||||||
plane0[x >> 3] <<= 1;
|
plane0[x >> 3] <<= 1;
|
||||||
plane1[x >> 3] <<= 1;
|
plane1[x >> 3] <<= 1;
|
||||||
@@ -2204,7 +2216,7 @@ banshee_overlay_draw(svga_t *svga, int displine)
|
|||||||
// pclog("displine=%i addr=%08x %08x %08x %08x\n", displine, svga->overlay_latch.addr, src_addr, voodoo->overlay.vidOverlayDvdy, *(uint32_t *)src);
|
// pclog("displine=%i addr=%08x %08x %08x %08x\n", displine, svga->overlay_latch.addr, src_addr, voodoo->overlay.vidOverlayDvdy, *(uint32_t *)src);
|
||||||
// if (src_addr >= 0x800000)
|
// if (src_addr >= 0x800000)
|
||||||
// fatal("overlay out of range!\n");
|
// fatal("overlay out of range!\n");
|
||||||
p = &((uint32_t *) buffer32->line[displine])[svga->overlay_latch.x + svga->x_add];
|
p = &((uint32_t *) svga->monitor->target_buffer->line[displine])[svga->overlay_latch.x + svga->x_add];
|
||||||
|
|
||||||
if (banshee->voodoo->scrfilter && banshee->voodoo->scrfilterEnabled)
|
if (banshee->voodoo->scrfilter && banshee->voodoo->scrfilterEnabled)
|
||||||
skip_filtering = ((banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_MASK) != VIDPROCCFG_FILTER_MODE_BILINEAR && !(banshee->vidProcCfg & VIDPROCCFG_H_SCALE_ENABLE) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_4X4) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_2X2));
|
skip_filtering = ((banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_MASK) != VIDPROCCFG_FILTER_MODE_BILINEAR && !(banshee->vidProcCfg & VIDPROCCFG_H_SCALE_ENABLE) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_4X4) && !(banshee->vidProcCfg & VIDPROCCFG_FILTER_MODE_DITHER_2X2));
|
||||||
|
@@ -495,6 +495,7 @@ void
|
|||||||
voodoo_callback(void *p)
|
voodoo_callback(void *p)
|
||||||
{
|
{
|
||||||
voodoo_t *voodoo = (voodoo_t *) p;
|
voodoo_t *voodoo = (voodoo_t *) p;
|
||||||
|
monitor_t* monitor = &monitors[voodoo->monitor_index];
|
||||||
|
|
||||||
if (voodoo->fbiInit0 & FBIINIT0_VGA_PASS) {
|
if (voodoo->fbiInit0 & FBIINIT0_VGA_PASS) {
|
||||||
if (voodoo->line < voodoo->v_disp) {
|
if (voodoo->line < voodoo->v_disp) {
|
||||||
@@ -518,7 +519,7 @@ voodoo_callback(void *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (draw_voodoo->dirty_line[draw_line]) {
|
if (draw_voodoo->dirty_line[draw_line]) {
|
||||||
uint32_t *p = &buffer32->line[voodoo->line + 8][8];
|
uint32_t *p = &monitor->target_buffer->line[voodoo->line + 8][8];
|
||||||
uint16_t *src = (uint16_t *) &draw_voodoo->fb_mem[draw_voodoo->front_offset + draw_line * draw_voodoo->row_width];
|
uint16_t *src = (uint16_t *) &draw_voodoo->fb_mem[draw_voodoo->front_offset + draw_line * draw_voodoo->row_width];
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
@@ -526,14 +527,14 @@ voodoo_callback(void *p)
|
|||||||
|
|
||||||
if (voodoo->line < voodoo->dirty_line_low) {
|
if (voodoo->line < voodoo->dirty_line_low) {
|
||||||
voodoo->dirty_line_low = voodoo->line;
|
voodoo->dirty_line_low = voodoo->line;
|
||||||
video_wait_for_buffer();
|
video_wait_for_buffer_monitor(voodoo->monitor_index);
|
||||||
}
|
}
|
||||||
if (voodoo->line > voodoo->dirty_line_high)
|
if (voodoo->line > voodoo->dirty_line_high)
|
||||||
voodoo->dirty_line_high = voodoo->line;
|
voodoo->dirty_line_high = voodoo->line;
|
||||||
|
|
||||||
/* Draw left overscan. */
|
/* Draw left overscan. */
|
||||||
for (x = 0; x < 8; x++)
|
for (x = 0; x < 8; x++)
|
||||||
buffer32->line[voodoo->line + 8][x] = 0x00000000;
|
monitor->target_buffer->line[voodoo->line + 8][x] = 0x00000000;
|
||||||
|
|
||||||
if (voodoo->scrfilter && voodoo->scrfilterEnabled) {
|
if (voodoo->scrfilter && voodoo->scrfilterEnabled) {
|
||||||
uint8_t *fil = malloc((voodoo->h_disp) * 3); /* interleaved 24-bit RGB */
|
uint8_t *fil = malloc((voodoo->h_disp) * 3); /* interleaved 24-bit RGB */
|
||||||
@@ -556,7 +557,7 @@ voodoo_callback(void *p)
|
|||||||
|
|
||||||
/* Draw right overscan. */
|
/* Draw right overscan. */
|
||||||
for (x = 0; x < 8; x++)
|
for (x = 0; x < 8; x++)
|
||||||
buffer32->line[voodoo->line + 8][voodoo->h_disp + x + 8] = 0x00000000;
|
monitor->target_buffer->line[voodoo->line + 8][voodoo->h_disp + x + 8] = 0x00000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user