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;
|
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||||
int y, vdbl;
|
int y, vdbl;
|
||||||
int ystart, yend, isntsc;
|
int ystart, yend;
|
||||||
|
|
||||||
isntsc = (beamcon0 & 0x20) ? 0 : 1;
|
|
||||||
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
|
|
||||||
isntsc = currprefs.ntscmode ? 1 : 0;
|
|
||||||
|
|
||||||
vdbl = avidinfo->ychange;
|
vdbl = avidinfo->ychange;
|
||||||
|
|
||||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
ystart = minfirstline;
|
||||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
yend = maxvpos;
|
||||||
|
|
||||||
for (y = ystart; y < yend; y++) {
|
for (y = ystart; y < yend; y++) {
|
||||||
int yoff = (((y * 2 + oddlines) - src->yoffset) / vdbl);
|
int yoff = (((y * 2 + oddlines) - src->yoffset) / vdbl);
|
||||||
@ -723,9 +719,9 @@ static bool do_dctv(struct vidbuffer *src, struct vidbuffer *dst)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
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)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = dctv(src, dst, false, 0);
|
v = dctv(src, dst, false, 0);
|
||||||
v |= dctv(src, dst, false, 1);
|
v |= dctv(src, dst, false, 1);
|
||||||
@ -1211,9 +1207,9 @@ static bool do_firecracker24(struct vidbuffer *src, struct vidbuffer *dst)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
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)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = firecracker24(src, dst, false, 0);
|
v = firecracker24(src, dst, false, 0);
|
||||||
v |= firecracker24(src, dst, false, 1);
|
v |= firecracker24(src, dst, false, 1);
|
||||||
@ -1657,9 +1653,9 @@ static bool do_videodac18(struct vidbuffer *src, struct vidbuffer *dst)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
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)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = videodac18(src, dst, false, 0);
|
v = videodac18(src, dst, false, 0);
|
||||||
v |= videodac18(src, dst, false, 1);
|
v |= videodac18(src, dst, false, 1);
|
||||||
@ -1883,9 +1879,9 @@ static bool do_hame(struct vidbuffer *src, struct vidbuffer *dst)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
if (currprefs.gfx_iscanlines) {
|
||||||
v = ham_e(src, dst, false, lof_store ? 0 : 1);
|
v = ham_e(src, dst, false, lof_store ? 1 : 0);
|
||||||
if (v && currprefs.gfx_iscanlines >= 1)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = ham_e(src, dst, false, 0);
|
v = ham_e(src, dst, false, 0);
|
||||||
v |= ham_e(src, dst, false, 1);
|
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;
|
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||||
|
|
||||||
int y, x, vdbl, hdbl;
|
int y, x, vdbl, hdbl;
|
||||||
int ystart, yend, isntsc;
|
int ystart, yend;
|
||||||
int mix1 = 0, mix2 = 0;
|
int mix1 = 0, mix2 = 0;
|
||||||
|
|
||||||
int genlock_image_pixbytes = 4;
|
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;
|
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 VIDEOGRAB
|
||||||
if (currprefs.genlock_image == 5) {
|
if (currprefs.genlock_image == 5) {
|
||||||
genlock_blank = false;
|
genlock_blank = false;
|
||||||
@ -2544,8 +2536,8 @@ skip:
|
|||||||
else
|
else
|
||||||
hdbl = 2; // lores
|
hdbl = 2; // lores
|
||||||
|
|
||||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
ystart = minfirstline;
|
||||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
yend = maxvpos;
|
||||||
|
|
||||||
init_noise();
|
init_noise();
|
||||||
|
|
||||||
@ -2661,9 +2653,9 @@ bool emulate_genlock(struct vidbuffer *src, struct vidbuffer *dst, bool zclken)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
if (currprefs.gfx_iscanlines) {
|
||||||
v = do_genlock(src, dst, false, lof_store ? 0 : 1, zclken);
|
v = do_genlock(src, dst, false, lof_store ? 1 : 0, zclken);
|
||||||
if (v && currprefs.gfx_iscanlines > 1)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = do_genlock(src, dst, false, 0, zclken);
|
v = do_genlock(src, dst, false, 0, zclken);
|
||||||
v |= do_genlock(src, dst, false, 1, 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;
|
struct vidbuf_description *avidinfo = &adisplays[dst->monitor_id].gfxvidinfo;
|
||||||
int y, x, vdbl;
|
int y, x, vdbl;
|
||||||
int ystart, yend, isntsc;
|
int ystart, yend;
|
||||||
|
|
||||||
isntsc = (beamcon0 & 0x20) ? 0 : 1;
|
|
||||||
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
|
|
||||||
isntsc = currprefs.ntscmode ? 1 : 0;
|
|
||||||
|
|
||||||
if (avidinfo->ychange == 1)
|
if (avidinfo->ychange == 1)
|
||||||
vdbl = 0;
|
vdbl = 0;
|
||||||
else
|
else
|
||||||
vdbl = 1;
|
vdbl = 1;
|
||||||
|
|
||||||
ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL;
|
ystart = minfirstline;
|
||||||
yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL;
|
yend = maxvpos;
|
||||||
|
|
||||||
uae_u8 r = 0, g = 0, b = 0;
|
uae_u8 r = 0, g = 0, b = 0;
|
||||||
for (y = ystart; y < yend; y++) {
|
for (y = ystart; y < yend; y++) {
|
||||||
@ -2742,9 +2730,9 @@ bool emulate_grayscale(struct vidbuffer *src, struct vidbuffer *dst)
|
|||||||
bool v;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
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)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = do_grayscale(src, dst, false, 0);
|
v = do_grayscale(src, dst, false, 0);
|
||||||
v |= do_grayscale(src, dst, false, 1);
|
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;
|
bool v;
|
||||||
if (interlace_seen) {
|
if (interlace_seen) {
|
||||||
if (currprefs.gfx_iscanlines) {
|
if (currprefs.gfx_iscanlines) {
|
||||||
v = opalvision(src, dst, false, lof_store ? 0 : 1, line, opal);
|
v = opalvision(src, dst, false, lof_store ? 1 : 0, line, opal);
|
||||||
if (v && currprefs.gfx_iscanlines >= 1)
|
if (v && currprefs.gfx_iscanlines >= 2)
|
||||||
blank_generic(src, dst, lof_store ? 1 : 0);
|
blank_generic(src, dst, lof_store ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
v = opalvision(src, dst, false, 0, line, opal);
|
v = opalvision(src, dst, false, 0, line, opal);
|
||||||
v |= opalvision(src, dst, false, 1, line, opal);
|
v |= opalvision(src, dst, false, 1, line, opal);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user