mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
Use calculated vertical start/end values in display port adapters, fix fields+ interlace mode.
This commit is contained in:
parent
89b857cc59
commit
619f77e817
@ -307,16 +307,12 @@ static void blank_generic(struct vidbuffer *src, struct vidbuffer *dst, int oddl
|
||||
{
|
||||
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||
int y, vdbl;
|
||||
int ystart, yend, isntsc;
|
||||
|
||||
isntsc = (beamcon0 & 0x20) ? 0 : 1;
|
||||
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
|
||||
isntsc = currprefs.ntscmode ? 1 : 0;
|
||||
int ystart, yend;
|
||||
|
||||
vdbl = avidinfo->ychange;
|
||||
|
||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
||||
ystart = minfirstline;
|
||||
yend = maxvpos;
|
||||
|
||||
for (y = ystart; y < yend; y++) {
|
||||
int yoff = (((y * 2 + oddlines) - src->yoffset) / vdbl);
|
||||
@ -723,9 +719,9 @@ static bool do_dctv(struct vidbuffer *src, struct vidbuffer *dst)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = dctv(src, dst, false, lof_store ? 0 : 1);
|
||||
v = dctv(src, dst, false, lof_store ? 1 : 0);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = dctv(src, dst, false, 0);
|
||||
v |= dctv(src, dst, false, 1);
|
||||
@ -1211,9 +1207,9 @@ static bool do_firecracker24(struct vidbuffer *src, struct vidbuffer *dst)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = firecracker24(src, dst, false, lof_store ? 0 : 1);
|
||||
v = firecracker24(src, dst, false, lof_store ? 1 : 0);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = firecracker24(src, dst, false, 0);
|
||||
v |= firecracker24(src, dst, false, 1);
|
||||
@ -1657,9 +1653,9 @@ static bool do_videodac18(struct vidbuffer *src, struct vidbuffer *dst)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = videodac18(src, dst, false, lof_store ? 0 : 1);
|
||||
v = videodac18(src, dst, false, lof_store ? 1 : 0);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = videodac18(src, dst, false, 0);
|
||||
v |= videodac18(src, dst, false, 1);
|
||||
@ -1883,9 +1879,9 @@ static bool do_hame(struct vidbuffer *src, struct vidbuffer *dst)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = ham_e(src, dst, false, lof_store ? 0 : 1);
|
||||
if (v && currprefs.gfx_iscanlines >= 1)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
v = ham_e(src, dst, false, lof_store ? 1 : 0);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = ham_e(src, dst, false, 0);
|
||||
v |= ham_e(src, dst, false, 1);
|
||||
@ -2403,7 +2399,7 @@ static bool do_genlock(struct vidbuffer *src, struct vidbuffer *dst, bool double
|
||||
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||
|
||||
int y, x, vdbl, hdbl;
|
||||
int ystart, yend, isntsc;
|
||||
int ystart, yend;
|
||||
int mix1 = 0, mix2 = 0;
|
||||
|
||||
int genlock_image_pixbytes = 4;
|
||||
@ -2414,10 +2410,6 @@ static bool do_genlock(struct vidbuffer *src, struct vidbuffer *dst, bool double
|
||||
|
||||
uae_u8 *genlock_image = NULL;
|
||||
|
||||
isntsc = (beamcon0 & 0x20) ? 0 : 1;
|
||||
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
|
||||
isntsc = currprefs.ntscmode ? 1 : 0;
|
||||
|
||||
#if VIDEOGRAB
|
||||
if (currprefs.genlock_image == 5) {
|
||||
genlock_blank = false;
|
||||
@ -2544,8 +2536,8 @@ skip:
|
||||
else
|
||||
hdbl = 2; // lores
|
||||
|
||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
||||
ystart = minfirstline;
|
||||
yend = maxvpos;
|
||||
|
||||
init_noise();
|
||||
|
||||
@ -2661,9 +2653,9 @@ bool emulate_genlock(struct vidbuffer *src, struct vidbuffer *dst, bool zclken)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = do_genlock(src, dst, false, lof_store ? 0 : 1, zclken);
|
||||
if (v && currprefs.gfx_iscanlines > 1)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
v = do_genlock(src, dst, false, lof_store ? 1 : 0, zclken);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = do_genlock(src, dst, false, 0, zclken);
|
||||
v |= do_genlock(src, dst, false, 1, zclken);
|
||||
@ -2686,19 +2678,15 @@ static bool do_grayscale(struct vidbuffer *src, struct vidbuffer *dst, bool doub
|
||||
{
|
||||
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||
int y, x, vdbl;
|
||||
int ystart, yend, isntsc;
|
||||
|
||||
isntsc = (beamcon0 & 0x20) ? 0 : 1;
|
||||
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
|
||||
isntsc = currprefs.ntscmode ? 1 : 0;
|
||||
int ystart, yend;
|
||||
|
||||
if (avidinfo->ychange == 1)
|
||||
vdbl = 0;
|
||||
else
|
||||
vdbl = 1;
|
||||
|
||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
||||
ystart = minfirstline;
|
||||
yend = maxvpos;
|
||||
|
||||
uae_u8 r = 0, g = 0, b = 0;
|
||||
for (y = ystart; y < yend; y++) {
|
||||
@ -2742,9 +2730,9 @@ bool emulate_grayscale(struct vidbuffer *src, struct vidbuffer *dst)
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = do_grayscale(src, dst, false, lof_store ? 0 : 1);
|
||||
v = do_grayscale(src, dst, false, lof_store ? 1 : 0);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = do_grayscale(src, dst, false, 0);
|
||||
v |= do_grayscale(src, dst, false, 1);
|
||||
@ -3535,9 +3523,9 @@ static bool do_opalvision(struct vidbuffer *src, struct vidbuffer *dst, int line
|
||||
bool v;
|
||||
if (interlace_seen) {
|
||||
if (currprefs.gfx_iscanlines) {
|
||||
v = opalvision(src, dst, false, lof_store ? 0 : 1, line, opal);
|
||||
if (v && currprefs.gfx_iscanlines >= 1)
|
||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
||||
v = opalvision(src, dst, false, lof_store ? 1 : 0, line, opal);
|
||||
if (v && currprefs.gfx_iscanlines >= 2)
|
||||
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||
} else {
|
||||
v = opalvision(src, dst, false, 0, line, opal);
|
||||
v |= opalvision(src, dst, false, 1, line, opal);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user