mirror of
https://github.com/86Box/86Box.git
synced 2026-02-24 10:28:19 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
@@ -450,6 +450,7 @@ extern int machine_at_mr286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_neat_init(const machine_t *);
|
||||
extern int machine_at_neat_ami_init(const machine_t *);
|
||||
extern int machine_at_ataripc4_init(const machine_t *);
|
||||
|
||||
extern int machine_at_quadt386sx_init(const machine_t *);
|
||||
|
||||
@@ -916,6 +917,7 @@ extern int machine_xt86_init(const machine_t *);
|
||||
|
||||
extern int machine_xt_americxt_init(const machine_t *);
|
||||
extern int machine_xt_amixt_init(const machine_t *);
|
||||
extern int machine_xt_ataripc3_init(const machine_t *);
|
||||
extern int machine_xt_dtk_init(const machine_t *);
|
||||
extern int machine_xt_jukopc_init(const machine_t *);
|
||||
extern int machine_xt_openxt_init(const machine_t *);
|
||||
|
||||
@@ -2157,6 +2157,12 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
|
||||
addbyte(0xc2);
|
||||
}
|
||||
|
||||
addbyte(0xf3); /*MOVQ XMM15(colbfog), XMM0 */
|
||||
addbyte(0x44);
|
||||
addbyte(0x0f);
|
||||
addbyte(0x7e);
|
||||
addbyte(0xf8);
|
||||
|
||||
if (params->fogMode & FOG_ENABLE) {
|
||||
if (params->fogMode & FOG_CONSTANT) {
|
||||
addbyte(0x66); /*MOVD XMM3, params->fogColor[ESI]*/
|
||||
@@ -2580,17 +2586,17 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
|
||||
addbyte(0xef);
|
||||
addbyte(0xe4);
|
||||
break;
|
||||
case AFUNC_ASATURATE:
|
||||
addbyte(0x66); /*PMULLW XMM4, XMM11(minus_254)*/
|
||||
case AFUNC_ACOLORBEFOREFOG:
|
||||
addbyte(0x66); /*PMULLW XMM4, XMM15(colbfog)*/
|
||||
addbyte(0x41);
|
||||
addbyte(0x0f);
|
||||
addbyte(0xd5);
|
||||
addbyte(0xe3);
|
||||
addbyte(0xe7);
|
||||
addbyte(0xf3); /*MOVQ XMM5, XMM4*/
|
||||
addbyte(0x0f);
|
||||
addbyte(0x7e);
|
||||
addbyte(0xec);
|
||||
addbyte(0x66); /*PADDW XMM4, alookup[1*8]*/
|
||||
addbyte(0x66); /*PADDW XMM4, R10(alookup)[1*8]*/
|
||||
addbyte(0x41);
|
||||
addbyte(0x0f);
|
||||
addbyte(0xfd);
|
||||
@@ -2610,6 +2616,7 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
|
||||
addbyte(0x71);
|
||||
addbyte(0xd4);
|
||||
addbyte(8);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (src_afunc) {
|
||||
@@ -2762,7 +2769,36 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params,
|
||||
addbyte(0xef);
|
||||
addbyte(0xc0);
|
||||
break;
|
||||
case AFUNC_ACOLORBEFOREFOG:
|
||||
case AFUNC_ASATURATE:
|
||||
addbyte(0x66); /*PMULLW XMM0, XMM11(minus_254)*/
|
||||
addbyte(0x41);
|
||||
addbyte(0x0f);
|
||||
addbyte(0xd5);
|
||||
addbyte(0xc3);
|
||||
addbyte(0xf3); /*MOVQ XMM5, XMM0*/
|
||||
addbyte(0x0f);
|
||||
addbyte(0x7e);
|
||||
addbyte(0xe8);
|
||||
addbyte(0x66); /*PADDW XMM0, alookup[1*8]*/
|
||||
addbyte(0x41);
|
||||
addbyte(0x0f);
|
||||
addbyte(0xfd);
|
||||
addbyte(0x42);
|
||||
addbyte(8 * 2);
|
||||
addbyte(0x66); /*PSRLW XMM5, 8*/
|
||||
addbyte(0x0f);
|
||||
addbyte(0x71);
|
||||
addbyte(0xd5);
|
||||
addbyte(8);
|
||||
addbyte(0x66); /*PADDW XMM0, XMM5*/
|
||||
addbyte(0x0f);
|
||||
addbyte(0xfd);
|
||||
addbyte(0xc5);
|
||||
addbyte(0x66); /*PSRLW XMM0, 8*/
|
||||
addbyte(0x0f);
|
||||
addbyte(0x71);
|
||||
addbyte(0xd0);
|
||||
addbyte(8);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,11 +210,10 @@ void voodoo_codegen_close(voodoo_t *voodoo);
|
||||
newdest_g = (dest_g * (255 - dest_a)) / 255; \
|
||||
newdest_b = (dest_b * (255 - dest_a)) / 255; \
|
||||
break; \
|
||||
case AFUNC_ASATURATE: \
|
||||
_a = MIN(src_a, 1 - dest_a); \
|
||||
newdest_r = (dest_r * _a) / 255; \
|
||||
newdest_g = (dest_g * _a) / 255; \
|
||||
newdest_b = (dest_b * _a) / 255; \
|
||||
case AFUNC_ACOLORBEFOREFOG: \
|
||||
newdest_r = (dest_r * colbfog_r) / 255; \
|
||||
newdest_g = (dest_g * colbfog_g) / 255; \
|
||||
newdest_b = (dest_b * colbfog_b) / 255; \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
@@ -254,8 +253,11 @@ void voodoo_codegen_close(voodoo_t *voodoo);
|
||||
src_g = (src_g * (255 - dest_a)) / 255; \
|
||||
src_b = (src_b * (255 - dest_a)) / 255; \
|
||||
break; \
|
||||
case AFUNC_ACOLORBEFOREFOG: \
|
||||
fatal("AFUNC_ACOLORBEFOREFOG\n"); \
|
||||
case AFUNC_ASATURATE: \
|
||||
_a = MIN(src_a, 255 - dest_a); \
|
||||
src_r = (dest_r * _a) / 255; \
|
||||
src_g = (dest_g * _a) / 255; \
|
||||
src_b = (dest_b * _a) / 255; \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
|
||||
@@ -212,6 +212,37 @@ machine_at_neat_ami_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
// TODO
|
||||
// Onboard Paradise PVGA1A-JK VGA Graphics
|
||||
// Data Technology Corporation DTC7187 RLL Controller
|
||||
int
|
||||
machine_at_ataripc4_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_interleaved("roms/machines/ataripc4/AMI_PC4X_1.7_EVEN.BIN",
|
||||
"roms/machines/ataripc4/AMI_PC4X_1.7_ODD.BIN",
|
||||
#if 0
|
||||
ret = bios_load_interleaved("roms/machines/ataripc4/ami_pc4x_1.7_even.bin",
|
||||
"roms/machines/ataripc4/ami_pc4x_1.7_odd.bin",
|
||||
#endif
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
device_add(&neat_device);
|
||||
|
||||
if (fdc_current[0] == FDC_INTERNAL)
|
||||
device_add(&fdc_at_device);
|
||||
|
||||
device_add(&keyboard_at_ami_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_px286_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -212,6 +212,30 @@ machine_xt_amixt_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
// TODO
|
||||
// Onboard EGA Graphics (NSI Logic EVC315-S on early boards STMicroelectronics EGA on later revisions)
|
||||
// Adaptec ACB-2072 RLL Controller Card (Optional)
|
||||
// Atari PCM1 Mouse Support
|
||||
int
|
||||
machine_xt_ataripc3_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/ataripc3/AWARD_ATARI_PC_BIOS_3.08.BIN",
|
||||
0x000f8000, 32768, 0);
|
||||
#if 0
|
||||
ret = bios_load_linear("roms/machines/ataripc3/c101701-004 308.u61",
|
||||
0x000f8000, 0x8000, 0);
|
||||
#endif
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_xt_clone_init(model, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_xt_znic_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -484,6 +484,45 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8088] Atari PC 3",
|
||||
.internal_name = "ataripc3",
|
||||
.type = MACHINE_TYPE_8088,
|
||||
.chipset = MACHINE_CHIPSET_DISCRETE,
|
||||
.init = machine_xt_ataripc3_init,
|
||||
.p1_handler = NULL,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_8088,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 0,
|
||||
.max_bus = 0,
|
||||
.min_voltage = 0,
|
||||
.max_voltage = 0,
|
||||
.min_multi = 0,
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_PC,
|
||||
.flags = MACHINE_FDC,
|
||||
.ram = {
|
||||
.min = 64,
|
||||
.max = 640,
|
||||
.step = 64
|
||||
},
|
||||
.nvrmask = 0,
|
||||
.kbc_device = &keyboard_xtclone_device,
|
||||
.kbc_p1 = 0xff,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.fdc_device = NULL, //&fdc_xt_device,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8088] Bondwell BW230",
|
||||
.internal_name = "bw230",
|
||||
@@ -3405,6 +3444,45 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[NEAT] Atari PC 4",
|
||||
.internal_name = "ataripc4",
|
||||
.type = MACHINE_TYPE_286,
|
||||
.chipset = MACHINE_CHIPSET_NEAT,
|
||||
.init = machine_at_ataripc4_init,
|
||||
.p1_handler = NULL,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_286,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 0,
|
||||
.max_bus = 0,
|
||||
.min_voltage = 0,
|
||||
.max_voltage = 0,
|
||||
.min_multi = 0,
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_AT,
|
||||
.flags = MACHINE_FDC,
|
||||
.ram = {
|
||||
.min = 512,
|
||||
.max = 8192,
|
||||
.step = 128
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.kbc_device = &keyboard_at_ami_device,
|
||||
.kbc_p1 = 0xff,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.fdc_device = NULL, //&fdc_at_device,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* This has "AMI KEYBOARD BIOS", most likely 'F'. */
|
||||
{
|
||||
.name = "[NEAT] DataExpert 286",
|
||||
|
||||
@@ -252,6 +252,9 @@ voodoo_fb_writew(uint32_t addr, uint16_t val, void *priv)
|
||||
{
|
||||
rgba8_t write_data = colour_data;
|
||||
uint16_t new_depth = depth_data;
|
||||
int colbfog_r = 0;
|
||||
int colbfog_g = 0;
|
||||
int colbfog_b = 0;
|
||||
|
||||
if (params->fbzMode & FBZ_DEPTH_ENABLE) {
|
||||
uint16_t old_depth = *(uint16_t *) (&voodoo->fb_mem[write_addr_aux & voodoo->fb_mask]);
|
||||
@@ -262,6 +265,10 @@ voodoo_fb_writew(uint32_t addr, uint16_t val, void *priv)
|
||||
if ((params->fbzMode & FBZ_CHROMAKEY) && write_data.r == params->chromaKey_r && write_data.g == params->chromaKey_g && write_data.b == params->chromaKey_b)
|
||||
goto skip_pixel;
|
||||
|
||||
colbfog_r = write_data.r;
|
||||
colbfog_g = write_data.g;
|
||||
colbfog_b = write_data.b;
|
||||
|
||||
if (params->fogMode & FOG_ENABLE) {
|
||||
int32_t z = new_depth << 12;
|
||||
int64_t w_depth = (int64_t) (int32_t) new_depth;
|
||||
@@ -438,6 +445,9 @@ voodoo_fb_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
for (int c = 0; c < count; c++) {
|
||||
rgba8_t write_data = colour_data[c];
|
||||
uint16_t new_depth = depth_data[c];
|
||||
int colbfog_r = 0;
|
||||
int colbfog_g = 0;
|
||||
int colbfog_b = 0;
|
||||
|
||||
if (params->fbzMode & FBZ_DEPTH_ENABLE) {
|
||||
uint16_t old_depth = *(uint16_t *) (&voodoo->fb_mem[write_addr_aux & voodoo->fb_mask]);
|
||||
@@ -448,6 +458,10 @@ voodoo_fb_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
if ((params->fbzMode & FBZ_CHROMAKEY) && write_data.r == params->chromaKey_r && write_data.g == params->chromaKey_g && write_data.b == params->chromaKey_b)
|
||||
goto skip_pixel;
|
||||
|
||||
colbfog_r = write_data.r;
|
||||
colbfog_g = write_data.g;
|
||||
colbfog_b = write_data.b;
|
||||
|
||||
if (params->fogMode & FOG_ENABLE) {
|
||||
int32_t z = new_depth << 12;
|
||||
int64_t w_depth = new_depth;
|
||||
|
||||
@@ -967,6 +967,9 @@ voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *
|
||||
int src_g = 0;
|
||||
int src_b = 0;
|
||||
int src_a = 0;
|
||||
int colbfog_r = 0;
|
||||
int colbfog_g = 0;
|
||||
int colbfog_b = 0;
|
||||
int msel_r;
|
||||
int msel_g;
|
||||
int msel_b;
|
||||
@@ -1263,6 +1266,10 @@ voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *
|
||||
if (cca_invert_output)
|
||||
src_a ^= 0xff;
|
||||
|
||||
colbfog_r = src_r;
|
||||
colbfog_g = src_g;
|
||||
colbfog_b = src_b;
|
||||
|
||||
if (params->fogMode & FOG_ENABLE)
|
||||
APPLY_FOG(src_r, src_g, src_b, state->z, state->ia, state->w);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user