Merge branch 'sarah-walker-pcem:master' into master

This commit is contained in:
greatpsycho 2021-06-29 21:42:36 +09:00 committed by GitHub
commit 7a26bb4f1c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 5191 additions and 11 deletions

View file

@ -675,17 +675,14 @@ void keyboard_at_write(uint16_t port, uint8_t val, void *priv)
keyboard_at_adddata(0x00);
break;
case 0xe8: /* Super-286TR: turbo ON */
// TODO: 0xe8 is always followed by 0xba
// TODO: I don't know where to call cpu_set_turbo(1) to avoid slow POST after ctrl-alt-del when on low speed (if this is the real behavior!)
if (romset == ROM_HYUNDAI_SUPER286TR)
cpu_set_turbo(1); // 12 MHz
break;
case 0xe9: /* Super-286TR: turbo OFF */
if (romset == ROM_HYUNDAI_SUPER286TR)
cpu_set_turbo(0); // 8 MHz
break;
// AWARD BIOS: called after turbo ON/OFF in the
// Hyundai Super-286TR and probably other AWARD 286
// bioses. Related to the Turbo LEDs. Exact function
// can't be confirmed because the system in question
// has no such leds.
//case 0xe8: /* Turbo ON, always followed by 0xba */
//case 0xe9: /* Turbo OFF */
//break;
case 0xef: /*??? - sent by AMI486*/
break;

View file

@ -952,6 +952,7 @@ void *voodoo_card_init()
memset(voodoo, 0, sizeof(voodoo_t));
voodoo->bilinear_enabled = device_get_config_int("bilinear");
voodoo->dithersub_enabled = device_get_config_int("dithersub");
voodoo->scrfilter = device_get_config_int("dacfilter");
voodoo->texture_size = device_get_config_int("texture_memory");
voodoo->texture_mask = (voodoo->texture_size << 20) - 1;
@ -1098,8 +1099,10 @@ void *voodoo_2d3d_card_init(int type)
memset(voodoo, 0, sizeof(voodoo_t));
voodoo->bilinear_enabled = device_get_config_int("bilinear");
voodoo->dithersub_enabled = device_get_config_int("dithersub");
voodoo->scrfilter = device_get_config_int("dacfilter");
voodoo->render_threads = device_get_config_int("render_threads");
voodoo->odd_even_mask = voodoo->render_threads - 1;
#ifndef NO_CODEGEN
voodoo->use_recompiler = device_get_config_int("recompiler");
@ -1407,6 +1410,12 @@ static device_config_t voodoo_config[] =
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dithersub",
.description = "Dither subtraction",
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dacfilter",
.description = "Screen Filter",

View file

@ -2474,6 +2474,12 @@ static device_config_t banshee_sgram_config[] =
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dithersub",
.description = "Dither subtraction",
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dacfilter",
.description = "Screen Filter",
@ -2525,6 +2531,12 @@ static device_config_t banshee_sdram_config[] =
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dithersub",
.description = "Dither subtraction",
.type = CONFIG_BINARY,
.default_int = 1
},
{
.name = "dacfilter",
.description = "Screen Filter",

View file

@ -283,6 +283,7 @@ typedef struct voodoo_t
int swap_pending;
int bilinear_enabled;
int dithersub_enabled;
int fb_size;
uint32_t fb_mask;

File diff suppressed because it is too large Load diff

View file

@ -370,6 +370,7 @@ enum
FBZ_DEPTH_BIAS = (1 << 16),
FBZ_DITHER_SUB = (1 << 19),
FBZ_DEPTH_SOURCE = (1 << 20),
FBZ_PARAM_ADJUST = (1 << 26)
@ -689,3 +690,5 @@ enum
#define depth_op ( (params->fbzMode >> 5) & 7)
#define dither ( params->fbzMode & FBZ_DITHER)
#define dither2x2 (params->fbzMode & FBZ_DITHER_2x2)
#define dithersub (params->fbzMode & FBZ_DITHER_SUB)

View file

@ -1281,7 +1281,21 @@ static void voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, vood
ALPHA_TEST(src_a);
if (params->alphaMode & (1 << 4))
{
if (dithersub && !dither2x2 && voodoo->dithersub_enabled)
{
dest_r = dithersub_rb[dest_r][real_y & 3][x & 3];
dest_g = dithersub_g [dest_g][real_y & 3][x & 3];
dest_b = dithersub_rb[dest_b][real_y & 3][x & 3];
}
if (dithersub && dither2x2 && voodoo->dithersub_enabled)
{
dest_r = dithersub_rb2x2[dest_r][real_y & 1][x & 1];
dest_g = dithersub_g2x2 [dest_g][real_y & 1][x & 1];
dest_b = dithersub_rb2x2[dest_b][real_y & 1][x & 1];
}
ALPHA_BLEND(src_r, src_g, src_b, src_a);
}
if (update)
{