Skip to content

Commit

Permalink
Refactor timing set, ntsc colour, phase, type and quality
Browse files Browse the repository at this point in the history
  • Loading branch information
IanSB committed Feb 25, 2023
1 parent 3e2ca4c commit 39fd5ac
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 141 deletions.
6 changes: 3 additions & 3 deletions src/geometry.c
Expand Up @@ -449,7 +449,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
capinfo->bpp = 4; //force 4bpp for teletext
} else if (capinfo->sample_width >= SAMPLE_WIDTH_9LO && capinfo->bpp == 4) {
capinfo->bpp = 8; //force at least 8bpp in 12 bit modes as no capture loops for capture into 4bpp buffer
} else if (capinfo->sample_width == SAMPLE_WIDTH_6 && (capinfo->bpp < 8 || (capinfo->bpp > 8 && (get_core_1_available() == 0 || get_ntsctype() == NTSCTYPE_SIMPLE)))) {
} else if (capinfo->sample_width == SAMPLE_WIDTH_6 && (capinfo->bpp < 8 || (capinfo->bpp > 8 && (get_core_1_available() == 0 || get_parameter(F_NTSC_TYPE) == NTSCTYPE_SIMPLE)))) {
capinfo->bpp = 8; //force 8bpp in 6 bit modes as no capture loops for 6 bit capture into 4 or 16 bpp buffer
} else if (capinfo->sample_width <= SAMPLE_WIDTH_3 && capinfo->bpp > 8) {
capinfo->bpp = 8; //force 8bpp in 1 & 3 bit modes as no capture loops for 1 or 3 bit capture into 16bpp buffer
Expand Down Expand Up @@ -527,7 +527,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
}

if (geometry->setup_mode == SETUP_NORMAL) {
if (((get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA && get_ntsccolour() != 0)
if (((get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA && get_parameter(F_NTSC_COLOUR) != 0)
|| (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW)
|| (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW_AUTO))
&& capinfo->bpp == 8 && capinfo->sample_width <= SAMPLE_WIDTH_6) {
Expand All @@ -542,7 +542,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
capinfo->border = 0x12; // max green/Y
}

capinfo->ntscphase = get_adjusted_ntscphase() | (get_ntsccolour() << NTSC_ARTIFACT_SHIFT);
capinfo->ntscphase = get_adjusted_ntscphase() | (get_parameter(F_NTSC_COLOUR) << NTSC_ARTIFACT_SHIFT);
if (get_parameter(F_OUTPUT_INVERT) == INVERT_Y) {
capinfo->ntscphase |= NTSC_Y_INVERT;
}
Expand Down
117 changes: 52 additions & 65 deletions src/osd.c
Expand Up @@ -1137,33 +1137,16 @@ static int get_feature(int num) {
return get_ffosd();
case F_SWAP_ASPECT:
return get_stretch();
case F_PALETTE:
return palette;

case F_PALETTE_CONTROL:
return get_paletteControl();


case F_NTSC_COLOUR:
return get_ntsccolour();
case F_NTSC_PHASE:
return get_ntscphase();
case F_NTSC_TYPE:
return get_ntsctype();
case F_NTSC_QUALITY:
return get_ntscfringe();
case F_TINT:
return tint;
case F_SAT:
return saturation;
case F_CONT:
return contrast;
case F_BRIGHT:
return brightness;
case F_GAMMA:
return Pgamma;
case F_TIMING_SET:
return get_timingset();



case F_SCANLINES:
case F_SCANLINE_LEVEL:
case F_OUTPUT_COLOUR:
Expand All @@ -1182,6 +1165,18 @@ static int get_feature(int num) {
return get_parameter(num);


case F_PALETTE:
return palette;
case F_TINT:
return tint;
case F_SAT:
return saturation;
case F_CONT:
return contrast;
case F_BRIGHT:
return brightness;
case F_GAMMA:
return Pgamma;
case F_RETURN_POSITION:
return return_at_end;
case F_OVERCLOCK_CPU:
Expand Down Expand Up @@ -1278,59 +1273,22 @@ static void set_feature(int num, int value) {
set_fontsize(value);
}
break;
case F_PALETTE:
palette = value;
osd_update_palette();
break;

case F_PALETTE_CONTROL:
set_paletteControl(value);
int hidden = (value < PALETTECONTROL_NTSCARTIFACT_CGA);
features[F_NTSC_COLOUR].hidden = hidden;
features[F_NTSC_PHASE].hidden = hidden;
osd_update_palette();
break;
case F_NTSC_COLOUR:
set_ntsccolour(value);
osd_update_palette();
break;




case F_NTSC_PHASE:
set_ntscphase(value);
break;
case F_NTSC_TYPE:
set_ntsctype(value);
break;
case F_NTSC_QUALITY:
set_ntscfringe(value);
break;
case F_TINT:
tint = value;
osd_update_palette();
update_cga16_color();
break;
case F_SAT:
saturation = value;
osd_update_palette();
update_cga16_color();
break;
case F_CONT:
contrast = value;
osd_update_palette();
update_cga16_color();
break;
case F_BRIGHT:
brightness = value;
osd_update_palette();
update_cga16_color();
break;
case F_GAMMA:
Pgamma = value;
osd_update_palette();
break;
case F_TIMING_SET:
set_timingset(value);
break;


case F_SCANLINES:
case F_SCANLINE_LEVEL:
case F_GENLOCK_MODE:
Expand All @@ -1344,7 +1302,7 @@ static void set_feature(int num, int value) {
set_parameter(num, value);
break;


case F_NTSC_COLOUR:
case F_OUTPUT_COLOUR:
case F_OUTPUT_INVERT:
set_parameter(num, value);
Expand All @@ -1365,6 +1323,35 @@ static void set_feature(int num, int value) {
break;



case F_PALETTE:
palette = value;
osd_update_palette();
break;
case F_TINT:
tint = value;
osd_update_palette();
update_cga16_color();
break;
case F_SAT:
saturation = value;
osd_update_palette();
update_cga16_color();
break;
case F_CONT:
contrast = value;
osd_update_palette();
update_cga16_color();
break;
case F_BRIGHT:
brightness = value;
osd_update_palette();
update_cga16_color();
break;
case F_GAMMA:
Pgamma = value;
osd_update_palette();
break;
case F_RETURN_POSITION:
return_at_end = value;
cycle_menus();
Expand Down Expand Up @@ -4232,7 +4219,7 @@ void osd_update_palette() {
}


if (((get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA && get_ntsccolour() != 0)
if (((get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA && get_parameter(F_NTSC_COLOUR) != 0)
|| (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW)
|| (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW_AUTO))
&& capinfo->bpp == 8 && capinfo->sample_width <= SAMPLE_WIDTH_6) {
Expand Down Expand Up @@ -5043,7 +5030,7 @@ int osd_key(int key) {
set_feature(F_TIMING_SET, 1 - get_feature(F_TIMING_SET));
ret = 1;
osd_state = TIMINGSET_MESSAGE;
} else if (get_ntsccolour() && (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA || get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW || get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW_AUTO)) {
} else if (get_parameter(F_NTSC_COLOUR) && (get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_CGA || get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW || get_paletteControl() == PALETTECONTROL_NTSCARTIFACT_BW_AUTO)) {
set_feature(F_NTSC_PHASE, (get_feature(F_NTSC_PHASE) + 1) & 3);
ret = 1;
osd_state = NTSC_PHASE_MESSAGE;
Expand Down
96 changes: 41 additions & 55 deletions src/rgb_to_hdmi.c
Expand Up @@ -218,16 +218,11 @@ static int gscaling = GSCALING_INTEGER;
static int filtering = DEFAULT_FILTERING;
static int old_filtering = - 1;
static int frontend = 0;
static int timingset = 0;
static int border = 0;
static int ntscphase = 0;
static int ntsctype = 0;
static int ntscfringe = 0;
static int ffosd = 0;
static int fontsize = 0;
static int m7deinterlace = 6;
static int deinterlace = 0;
static int ntsccolour = 0;
static int lines_per_2_vsyncs = 0;
static int lines_per_vsync = 0;
static int one_line_time_ns = 0;
Expand Down Expand Up @@ -2851,13 +2846,7 @@ int get_frontend() {
return frontend;
}

void set_ntsccolour(int value) {
ntsccolour = value;
}

int get_ntsccolour() {
return ntsccolour;
}

void set_m7deinterlace(int mode) {
m7deinterlace = mode;
Expand Down Expand Up @@ -2892,42 +2881,15 @@ int get_fontsize() {
return fontsize;
}

void set_ntscphase(int value) {
if (ntscphase != value) {
ntscphase = value;
osd_update_palette();
update_cga16_color();
}
}

int get_ntscphase() {
return ntscphase;
}

void set_ntsctype(int value) {
ntsctype = value;
update_cga16_color();
}

int get_ntsctype() {
return ntsctype;
}

void set_ntscfringe(int value) {
ntscfringe = value;
update_cga16_color();
}

int get_ntscfringe() {
return ntscfringe;
}

int get_adjusted_ntscphase() {
int phase = ntscphase;
if (ntscfringe == FRINGE_SOFT) {
int phase = parameters[F_NTSC_PHASE];
if (parameters[F_NTSC_QUALITY] == FRINGE_SOFT) {
phase |= NTSC_SOFT;
}
if (ntscfringe == FRINGE_MEDIUM) {
if (parameters[F_NTSC_QUALITY] == FRINGE_MEDIUM) {
phase |= NTSC_MEDIUM;
}
return phase;
Expand All @@ -2942,15 +2904,6 @@ int get_border() {
return border;
}

void set_timingset(int value) {
timingset = value;
}

int get_timingset(){
return timingset;
}



int get_core_1_available() {
return core_1_available;
Expand All @@ -2973,6 +2926,10 @@ int get_50hz_state() {
return -1;
}





int get_parameter(int parameter) {
switch (parameter) {
//space for special case handling
Expand All @@ -2994,10 +2951,39 @@ int get_parameter(int parameter) {
}
}


void set_ntsccolour(int value) {
parameters[F_NTSC_COLOUR] = value;
}

void set_timingset(int value) {
parameters[F_TIMING_SET] = value;
}

void set_parameter(int parameter, int value) {
switch (parameter) {
//space for special case handling

case F_NTSC_PHASE:
{
if (parameters[F_NTSC_PHASE] != value) {
parameters[F_NTSC_PHASE] = value;
osd_update_palette();
update_cga16_color();
}
}
break;
case F_NTSC_TYPE:
{
parameters[F_NTSC_PHASE] = value;
update_cga16_color();
}
break;
case F_NTSC_QUALITY:
{
parameters[F_NTSC_QUALITY] = value;
update_cga16_color();
}
break;
case F_SCANLINES:
{
parameters[parameter] = value;
Expand Down Expand Up @@ -3108,7 +3094,7 @@ void calculate_fb_adjustment() {
void setup_profile(int profile_changed) {
geometry_set_mode(modeset);
capinfo->palette_control = paletteControl;
if ((capinfo->palette_control == PALETTECONTROL_NTSCARTIFACT_CGA && ntsccolour == 0)) {
if ((capinfo->palette_control == PALETTECONTROL_NTSCARTIFACT_CGA && parameters[F_NTSC_COLOUR] == 0)) {
capinfo->palette_control = PALETTECONTROL_OFF;
}
capinfo->palette_control |= (get_inhibit_palette_dimming16() << 31);
Expand Down Expand Up @@ -3274,7 +3260,7 @@ void rgb_to_hdmi_main() {
}

if (last_subprofile != subprofile || restart_profile) {
ntsc_status = (modeset << NTSC_LAST_IIGS_SHIFT) | (ntsccolour << NTSC_LAST_ARTIFACT_SHIFT);
ntsc_status = (modeset << NTSC_LAST_IIGS_SHIFT) | (parameters[F_NTSC_COLOUR] << NTSC_LAST_ARTIFACT_SHIFT);
}
geometry_get_fb_params(capinfo);
restart_profile = 0;
Expand Down Expand Up @@ -3548,7 +3534,7 @@ geometry_get_fb_params(capinfo);
cpld->update_capture_info(capinfo);
geometry_get_fb_params(capinfo);
capinfo->palette_control = paletteControl;
if ((capinfo->palette_control == PALETTECONTROL_NTSCARTIFACT_CGA && ntsccolour == 0)) {
if ((capinfo->palette_control == PALETTECONTROL_NTSCARTIFACT_CGA && parameters[F_NTSC_COLOUR] == 0)) {
capinfo->palette_control = PALETTECONTROL_OFF;
}
capinfo->palette_control |= (get_inhibit_palette_dimming16() << 31);
Expand Down Expand Up @@ -3577,7 +3563,7 @@ geometry_get_fb_params(capinfo);
}

} else if (parameters[F_AUTO_SWITCH] == AUTOSWITCH_MANUAL || parameters[F_AUTO_SWITCH] == AUTOSWITCH_IIGS_MANUAL) {
modeset = timingset;
modeset = parameters[F_TIMING_SET];
} else {
modeset = MODE_SET1;
}
Expand Down

0 comments on commit 39fd5ac

Please sign in to comment.