This commit is contained in:
OBattler
2022-09-28 04:01:29 +02:00
17 changed files with 5468 additions and 5312 deletions

View File

@@ -158,7 +158,6 @@ cmake_dependent_option(OLIVETTI "Olivetti M290"
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
cmake_dependent_option(PAS16 "Pro Audio Spectrum 16" ON "DEV_BRANCH" OFF)
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
cmake_dependent_option(TANDY_ISA "Tandy PSG ISA clone boards" ON "DEV_BRANCH" OFF)
cmake_dependent_option(VGAWONDER "ATI VGA Wonder (ATI-18800)" ON "DEV_BRANCH" OFF)
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)

View File

@@ -2050,10 +2050,13 @@ save_general(void)
static void
save_monitor(int monitor_index)
{
char cat[sizeof("Monitor #") + 12] = { [0] = 0 };
char temp[512];
ini_section_t cat;
char name[sizeof("Monitor #") + 12] = { [0] = 0 };
char temp[512];
snprintf(name, sizeof(name), "Monitor #%i", monitor_index + 1);
cat = ini_find_or_create_section(config, name);
snprintf(cat, sizeof(cat), "Monitor #%i", monitor_index + 1);
if (window_remember) {
sprintf(temp, "%i, %i, %i, %i",
monitor_settings[monitor_index].mon_window_x, monitor_settings[monitor_index].mon_window_y,
@@ -2069,6 +2072,8 @@ save_monitor(int monitor_index)
ini_section_delete_var(cat, "window_coordinates");
ini_section_delete_var(cat, "window_maximized");
}
ini_delete_section_if_empty(config, cat);
}
/* Save "Machine" section. */

View File

@@ -6,7 +6,7 @@
#include <wchar.h>
#include <math.h>
#ifndef INFINITY
# define INFINITY (__builtin_inff())
# define INFINITY (__builtin_inff())
#endif
#define HAVE_STDARG_H
@@ -25,14 +25,12 @@
#include <86box/gdbstub.h>
#include "386_common.h"
#ifdef USE_NEW_DYNAREC
#include "codegen.h"
# include "codegen.h"
#endif
#undef CPU_BLOCK_END
#define CPU_BLOCK_END()
extern int codegen_flags_changed;
int tempc, oldcpl, optype, inttype, oddeven = 0;
@@ -41,225 +39,231 @@ int timetolive;
uint16_t oldcs;
uint32_t oldds, oldss, olddslimit, oldsslimit,
olddslimitw, oldsslimitw;
olddslimitw, oldsslimitw;
uint32_t oxpc;
uint32_t rmdat32;
uint32_t backupregs[16];
x86seg _oldds;
#ifdef ENABLE_386_LOG
int x386_do_log = ENABLE_386_LOG;
void
x386_log(const char *fmt, ...)
{
va_list ap;
if (x386_do_log) {
va_start(ap, fmt);
pclog_ex(fmt, ap);
va_end(ap);
va_start(ap, fmt);
pclog_ex(fmt, ap);
va_end(ap);
}
}
#else
#define x386_log(fmt, ...)
# define x386_log(fmt, ...)
#endif
#undef CPU_BLOCK_END
#define CPU_BLOCK_END()
#include "x86_flags.h"
#define getbytef() ((uint8_t)(fetchdat)); cpu_state.pc++
#define getwordf() ((uint16_t)(fetchdat)); cpu_state.pc+=2
#define getbyte2f() ((uint8_t)(fetchdat>>8)); cpu_state.pc++
#define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2
/*
#define getbytef() \
((uint8_t) (fetchdat)); \
cpu_state.pc++
#define getwordf() \
((uint16_t) (fetchdat)); \
cpu_state.pc += 2
#define getbyte2f() \
((uint8_t) (fetchdat >> 8)); \
cpu_state.pc++
#define getword2f() \
((uint16_t) (fetchdat >> 8)); \
cpu_state.pc += 2
*/
#define OP_TABLE(name) ops_ ## name
#define OP_TABLE(name) ops_##name
#if 0
#define CLOCK_CYCLES(c) \
{\
if (fpu_cycles > 0) {\
fpu_cycles -= (c);\
if (fpu_cycles < 0) {\
cycles += fpu_cycles;\
}\
} else {\
cycles -= (c);\
}\
}
# define CLOCK_CYCLES(c) \
{ \
if (fpu_cycles > 0) { \
fpu_cycles -= (c); \
if (fpu_cycles < 0) { \
cycles += fpu_cycles; \
} \
} else { \
cycles -= (c); \
} \
}
#define CLOCK_CYCLES_FPU(c) cycles -= (c)
#define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
# define CLOCK_CYCLES_FPU(c) cycles -= (c)
# define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
#else
#define CLOCK_CYCLES(c) cycles -= (c)
#define CLOCK_CYCLES_FPU(c) cycles -= (c)
#define CONCURRENCY_CYCLES(c)
# define CLOCK_CYCLES(c) cycles -= (c)
# define CLOCK_CYCLES_FPU(c) cycles -= (c)
# define CONCURRENCY_CYCLES(c)
#endif
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
#include "x86_ops.h"
void
exec386(int cycs)
{
int vector, tempi, cycdiff, oldcyc;
int cycle_period, ins_cycles;
int vector, tempi, cycdiff, oldcyc;
int cycle_period, ins_cycles;
uint32_t addr;
cycles += cycs;
while (cycles > 0) {
cycle_period = (timer_target - (uint32_t)tsc) + 1;
cycle_period = (timer_target - (uint32_t) tsc) + 1;
x86_was_reset = 0;
cycdiff = 0;
oldcyc = cycles;
while (cycdiff < cycle_period) {
ins_cycles = cycles;
x86_was_reset = 0;
cycdiff = 0;
oldcyc = cycles;
while (cycdiff < cycle_period) {
ins_cycles = cycles;
#ifndef USE_NEW_DYNAREC
oldcs=CS;
oldcpl=CPL;
oldcs = CS;
oldcpl = CPL;
#endif
cpu_state.oldpc = cpu_state.pc;
cpu_state.op32 = use32;
cpu_state.oldpc = cpu_state.pc;
cpu_state.op32 = use32;
#ifndef USE_NEW_DYNAREC
x86_was_reset = 0;
x86_was_reset = 0;
#endif
cpu_state.ea_seg = &cpu_state.seg_ds;
cpu_state.ssegs = 0;
cpu_state.ea_seg = &cpu_state.seg_ds;
cpu_state.ssegs = 0;
fetchdat = fastreadl(cs + cpu_state.pc);
fetchdat = fastreadl(cs + cpu_state.pc);
if (!cpu_state.abrt) {
if (!cpu_state.abrt) {
#ifdef ENABLE_386_LOG
if (in_smm)
x386_log("[%04X:%08X] %08X\n", CS, cpu_state.pc, fetchdat);
if (in_smm)
x386_log("[%04X:%08X] %08X\n", CS, cpu_state.pc, fetchdat);
#endif
opcode = fetchdat & 0xFF;
fetchdat >>= 8;
trap = cpu_state.flags & T_FLAG;
opcode = fetchdat & 0xFF;
fetchdat >>= 8;
trap = cpu_state.flags & T_FLAG;
cpu_state.pc++;
x86_opcodes[(opcode | cpu_state.op32) & 0x3ff](fetchdat);
if (x86_was_reset)
break;
}
cpu_state.pc++;
x86_opcodes[(opcode | cpu_state.op32) & 0x3ff](fetchdat);
if (x86_was_reset)
break;
}
#ifdef ENABLE_386_LOG
else if (in_smm)
x386_log("[%04X:%08X] ABRT\n", CS, cpu_state.pc);
else if (in_smm)
x386_log("[%04X:%08X] ABRT\n", CS, cpu_state.pc);
#endif
#ifndef USE_NEW_DYNAREC
if (!use32) cpu_state.pc &= 0xffff;
if (!use32)
cpu_state.pc &= 0xffff;
#endif
if (cpu_end_block_after_ins)
cpu_end_block_after_ins--;
if (cpu_end_block_after_ins)
cpu_end_block_after_ins--;
if (cpu_state.abrt) {
flags_rebuild();
tempi = cpu_state.abrt & ABRT_MASK;
cpu_state.abrt = 0;
x86_doabrt(tempi);
if (cpu_state.abrt) {
cpu_state.abrt = 0;
if (cpu_state.abrt) {
flags_rebuild();
tempi = cpu_state.abrt & ABRT_MASK;
cpu_state.abrt = 0;
x86_doabrt(tempi);
if (cpu_state.abrt) {
cpu_state.abrt = 0;
#ifndef USE_NEW_DYNAREC
CS = oldcs;
CS = oldcs;
#endif
cpu_state.pc = cpu_state.oldpc;
x386_log("Double fault\n");
pmodeint(8, 0);
if (cpu_state.abrt) {
cpu_state.abrt = 0;
softresetx86();
cpu_set_edx();
cpu_state.pc = cpu_state.oldpc;
x386_log("Double fault\n");
pmodeint(8, 0);
if (cpu_state.abrt) {
cpu_state.abrt = 0;
softresetx86();
cpu_set_edx();
#ifdef ENABLE_386_LOG
x386_log("Triple fault - reset\n");
x386_log("Triple fault - reset\n");
#endif
}
}
}
}
}
}
if (smi_line)
enter_smm_check(0);
else if (trap) {
flags_rebuild();
dr[6] |= 0x4000;
if (msw&1)
pmodeint(1,0);
else {
writememw(ss, (SP - 2) & 0xFFFF, cpu_state.flags);
writememw(ss, (SP - 4) & 0xFFFF, CS);
writememw(ss, (SP - 6) & 0xFFFF, cpu_state.pc);
SP -= 6;
addr = (1 << 2) + idt.base;
cpu_state.flags &= ~I_FLAG;
cpu_state.flags &= ~T_FLAG;
cpu_state.pc = readmemw(0, addr);
loadcs(readmemw(0, addr + 2));
}
} else if (nmi && nmi_enable && nmi_mask) {
cpu_state.oldpc = cpu_state.pc;
x86_int(2);
nmi_enable = 0;
if (smi_line)
enter_smm_check(0);
else if (trap) {
flags_rebuild();
dr[6] |= 0x4000;
if (msw & 1)
pmodeint(1, 0);
else {
writememw(ss, (SP - 2) & 0xFFFF, cpu_state.flags);
writememw(ss, (SP - 4) & 0xFFFF, CS);
writememw(ss, (SP - 6) & 0xFFFF, cpu_state.pc);
SP -= 6;
addr = (1 << 2) + idt.base;
cpu_state.flags &= ~I_FLAG;
cpu_state.flags &= ~T_FLAG;
cpu_state.pc = readmemw(0, addr);
loadcs(readmemw(0, addr + 2));
}
} else if (nmi && nmi_enable && nmi_mask) {
cpu_state.oldpc = cpu_state.pc;
x86_int(2);
nmi_enable = 0;
#ifdef OLD_NMI_BEHAVIOR
if (nmi_auto_clear) {
nmi_auto_clear = 0;
nmi = 0;
}
if (nmi_auto_clear) {
nmi_auto_clear = 0;
nmi = 0;
}
#else
nmi = 0;
nmi = 0;
#endif
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending && !cpu_end_block_after_ins) {
vector = picinterrupt();
if (vector != -1) {
flags_rebuild();
if (msw & 1)
pmodeint(vector, 0);
else {
writememw(ss, (SP - 2) & 0xFFFF, cpu_state.flags);
writememw(ss, (SP - 4) & 0xFFFF, CS);
writememw(ss, (SP - 6) & 0xFFFF, cpu_state.pc);
SP -= 6;
addr = (vector << 2) + idt.base;
cpu_state.flags &= ~I_FLAG;
cpu_state.flags &= ~T_FLAG;
cpu_state.pc = readmemw(0, addr);
loadcs(readmemw(0, addr + 2));
}
}
}
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending && !cpu_end_block_after_ins) {
vector = picinterrupt();
if (vector != -1) {
flags_rebuild();
if (msw & 1)
pmodeint(vector, 0);
else {
writememw(ss, (SP - 2) & 0xFFFF, cpu_state.flags);
writememw(ss, (SP - 4) & 0xFFFF, CS);
writememw(ss, (SP - 6) & 0xFFFF, cpu_state.pc);
SP -= 6;
addr = (vector << 2) + idt.base;
cpu_state.flags &= ~I_FLAG;
cpu_state.flags &= ~T_FLAG;
cpu_state.pc = readmemw(0, addr);
loadcs(readmemw(0, addr + 2));
}
}
}
ins_cycles -= cycles;
tsc += ins_cycles;
ins_cycles -= cycles;
tsc += ins_cycles;
cycdiff = oldcyc - cycles;
cycdiff = oldcyc - cycles;
if (timetolive) {
timetolive--;
if (!timetolive)
fatal("Life expired\n");
}
if (timetolive) {
timetolive--;
if (!timetolive)
fatal("Life expired\n");
}
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t) tsc))
timer_process_inline();
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t) tsc))
timer_process_inline();
#ifdef USE_GDBSTUB
if (gdbstub_instruction())
return;
if (gdbstub_instruction())
return;
#endif
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,461 +10,455 @@
x87_timings_t x87_timings;
x87_timings_t x87_concurrency;
const x87_timings_t x87_timings_8087 =
{
.f2xm1 = (310 + 630) / 2,
.fabs = (10 + 17) / 2,
.fadd = (70 + 100) / 2,
.fadd_32 = (90 + 120) / 2,
.fadd_64 = (95 + 125) / 2,
.fbld = (290 + 310) / 2,
.fbstp = (520 + 540) / 2,
.fchs = (10 + 17) / 2,
.fclex = (2 + 8) / 2,
.fcom = (40 + 50) / 2,
.fcom_32 = (60 + 70) / 2,
.fcom_64 = (65 + 75) / 2,
.fcos = 0, /*387+*/
.fincdecstp = (6 + 12) / 2,
.fdisi_eni = (6 + 12) / 2,
.fdiv = (193 + 203) / 2,
.fdiv_32 = (215 + 225) / 2,
.fdiv_64 = (220 + 230) / 2,
.ffree = (9 + 16) / 2,
.fadd_i16 = (102 + 137) / 2,
.fadd_i32 = (108 + 143) / 2,
.fcom_i16 = (72 + 86) / 2,
.fcom_i32 = (78 + 91) / 2,
.fdiv_i16 = (224 + 238) / 2,
.fdiv_i32 = (230 + 243) / 2,
.fild_16 = (46 + 54) / 2,
.fild_32 = (50 + 60) / 2,
.fild_64 = (60 + 68) / 2,
.fmul_i16 = (124 + 138) / 2,
.fmul_i32 = (130 + 144) / 2,
.finit = (2 + 8) / 2,
.fist_16 = (80 + 90) / 2,
.fist_32 = (82 + 92) / 2,
.fist_64 = (94 + 105) / 2,
.fld = (17 + 22) / 2,
.fld_32 = (38 + 56) / 2,
.fld_64 = (40 + 60) / 2,
.fld_80 = (53 + 65) / 2,
.fld_z1 = (11 + 21) / 2,
.fld_const = (15 + 24) / 2,
.fldcw = (7 + 14) / 2,
.fldenv = (35 + 45) / 2,
.fmul = (90 + 145) / 2,
.fmul_32 = (110 + 125) / 2,
.fmul_64 = (154 + 168) / 2,
.fnop = (10 + 16) / 2,
.fpatan = (250 + 800) / 2,
.fprem = (15 + 190) / 2,
.fprem1 = 0, /*387+*/
.fptan = (30 + 540) / 2,
.frndint = (16 + 50) / 2,
.frstor = (197 + 207) / 2,
.fsave = (197 + 207) / 2,
.fscale = (32 + 38) / 2,
.fsetpm = 0, /*287+*/
.fsin_cos = 0, /*387+*/
.fsincos = 0, /*387+*/
.fsqrt = (180 + 186) / 2,
.fst = (15 + 22) / 2,
.fst_32 = (84 + 90) / 2,
.fst_64 = (96 + 104) / 2,
.fst_80 = (52 + 58) / 2,
.fstcw_sw = (12 + 18) / 2,
.fstenv = (40 + 50) / 2,
.ftst = (38 + 48) / 2,
.fucom = 0, /*387+*/
.fwait = 4,
.fxam = (12 + 23) / 2,
.fxch = (10 + 15) / 2,
.fxtract = (27 + 55) / 2,
.fyl2x = (900 + 1100) / 2,
.fyl2xp1 = (700 + 1000) / 2
const x87_timings_t x87_timings_8087 = {
.f2xm1 = (310 + 630) / 2,
.fabs = (10 + 17) / 2,
.fadd = (70 + 100) / 2,
.fadd_32 = (90 + 120) / 2,
.fadd_64 = (95 + 125) / 2,
.fbld = (290 + 310) / 2,
.fbstp = (520 + 540) / 2,
.fchs = (10 + 17) / 2,
.fclex = (2 + 8) / 2,
.fcom = (40 + 50) / 2,
.fcom_32 = (60 + 70) / 2,
.fcom_64 = (65 + 75) / 2,
.fcos = 0, /*387+*/
.fincdecstp = (6 + 12) / 2,
.fdisi_eni = (6 + 12) / 2,
.fdiv = (193 + 203) / 2,
.fdiv_32 = (215 + 225) / 2,
.fdiv_64 = (220 + 230) / 2,
.ffree = (9 + 16) / 2,
.fadd_i16 = (102 + 137) / 2,
.fadd_i32 = (108 + 143) / 2,
.fcom_i16 = (72 + 86) / 2,
.fcom_i32 = (78 + 91) / 2,
.fdiv_i16 = (224 + 238) / 2,
.fdiv_i32 = (230 + 243) / 2,
.fild_16 = (46 + 54) / 2,
.fild_32 = (50 + 60) / 2,
.fild_64 = (60 + 68) / 2,
.fmul_i16 = (124 + 138) / 2,
.fmul_i32 = (130 + 144) / 2,
.finit = (2 + 8) / 2,
.fist_16 = (80 + 90) / 2,
.fist_32 = (82 + 92) / 2,
.fist_64 = (94 + 105) / 2,
.fld = (17 + 22) / 2,
.fld_32 = (38 + 56) / 2,
.fld_64 = (40 + 60) / 2,
.fld_80 = (53 + 65) / 2,
.fld_z1 = (11 + 21) / 2,
.fld_const = (15 + 24) / 2,
.fldcw = (7 + 14) / 2,
.fldenv = (35 + 45) / 2,
.fmul = (90 + 145) / 2,
.fmul_32 = (110 + 125) / 2,
.fmul_64 = (154 + 168) / 2,
.fnop = (10 + 16) / 2,
.fpatan = (250 + 800) / 2,
.fprem = (15 + 190) / 2,
.fprem1 = 0, /*387+*/
.fptan = (30 + 540) / 2,
.frndint = (16 + 50) / 2,
.frstor = (197 + 207) / 2,
.fsave = (197 + 207) / 2,
.fscale = (32 + 38) / 2,
.fsetpm = 0, /*287+*/
.fsin_cos = 0, /*387+*/
.fsincos = 0, /*387+*/
.fsqrt = (180 + 186) / 2,
.fst = (15 + 22) / 2,
.fst_32 = (84 + 90) / 2,
.fst_64 = (96 + 104) / 2,
.fst_80 = (52 + 58) / 2,
.fstcw_sw = (12 + 18) / 2,
.fstenv = (40 + 50) / 2,
.ftst = (38 + 48) / 2,
.fucom = 0, /*387+*/
.fwait = 4,
.fxam = (12 + 23) / 2,
.fxch = (10 + 15) / 2,
.fxtract = (27 + 55) / 2,
.fyl2x = (900 + 1100) / 2,
.fyl2xp1 = (700 + 1000) / 2
};
/*Mostly the same as 8087*/
const x87_timings_t x87_timings_287 =
{
.f2xm1 = (310 + 630) / 2,
.fabs = (10 + 17) / 2,
.fadd = (70 + 100) / 2,
.fadd_32 = (90 + 120) / 2,
.fadd_64 = (95 + 125) / 2,
.fbld = (290 + 310) / 2,
.fbstp = (520 + 540) / 2,
.fchs = (10 + 17) / 2,
.fclex = (2 + 8) / 2,
.fcom = (40 + 50) / 2,
.fcom_32 = (60 + 70) / 2,
.fcom_64 = (65 + 75) / 2,
.fcos = 0, /*387+*/
.fincdecstp = (6 + 12) / 2,
.fdisi_eni = 2,
.fdiv = (193 + 203) / 2,
.fdiv_32 = (215 + 225) / 2,
.fdiv_64 = (220 + 230) / 2,
.ffree = (9 + 16) / 2,
.fadd_i16 = (102 + 137) / 2,
.fadd_i32 = (108 + 143) / 2,
.fcom_i16 = (72 + 86) / 2,
.fcom_i32 = (78 + 91) / 2,
.fdiv_i16 = (224 + 238) / 2,
.fdiv_i32 = (230 + 243) / 2,
.fild_16 = (46 + 54) / 2,
.fild_32 = (50 + 60) / 2,
.fild_64 = (60 + 68) / 2,
.fmul_i16 = (124 + 138) / 2,
.fmul_i32 = (130 + 144) / 2,
.finit = (2 + 8) / 2,
.fist_16 = (80 + 90) / 2,
.fist_32 = (82 + 92) / 2,
.fist_64 = (94 + 105) / 2,
.fld = (17 + 22) / 2,
.fld_32 = (38 + 56) / 2,
.fld_64 = (40 + 60) / 2,
.fld_80 = (53 + 65) / 2,
.fld_z1 = (11 + 21) / 2,
.fld_const = (15 + 24) / 2,
.fldcw = (7 + 14) / 2,
.fldenv = (35 + 45) / 2,
.fmul = (90 + 145) / 2,
.fmul_32 = (110 + 125) / 2,
.fmul_64 = (154 + 168) / 2,
.fnop = (10 + 16) / 2,
.fpatan = (250 + 800) / 2,
.fprem = (15 + 190) / 2,
.fprem1 = 0, /*387+*/
.fptan = (30 + 540) / 2,
.frndint = (16 + 50) / 2,
.frstor = (197 + 207) / 2,
.fsave = (197 + 207) / 2,
.fscale = (32 + 38) / 2,
.fsetpm = (2 + 8) / 2, /*287+*/
.fsin_cos = 0, /*387+*/
.fsincos = 0, /*387+*/
.fsqrt = (180 + 186) / 2,
.fst = (15 + 22) / 2,
.fst_32 = (84 + 90) / 2,
.fst_64 = (96 + 104) / 2,
.fst_80 = (52 + 58) / 2,
.fstcw_sw = (12 + 18) / 2,
.fstenv = (40 + 50) / 2,
.ftst = (38 + 48) / 2,
.fucom = 0, /*387+*/
.fwait = 3,
.fxam = (12 + 23) / 2,
.fxch = (10 + 15) / 2,
.fxtract = (27 + 55) / 2,
.fyl2x = (900 + 1100) / 2,
.fyl2xp1 = (700 + 1000) / 2
const x87_timings_t x87_timings_287 = {
.f2xm1 = (310 + 630) / 2,
.fabs = (10 + 17) / 2,
.fadd = (70 + 100) / 2,
.fadd_32 = (90 + 120) / 2,
.fadd_64 = (95 + 125) / 2,
.fbld = (290 + 310) / 2,
.fbstp = (520 + 540) / 2,
.fchs = (10 + 17) / 2,
.fclex = (2 + 8) / 2,
.fcom = (40 + 50) / 2,
.fcom_32 = (60 + 70) / 2,
.fcom_64 = (65 + 75) / 2,
.fcos = 0, /*387+*/
.fincdecstp = (6 + 12) / 2,
.fdisi_eni = 2,
.fdiv = (193 + 203) / 2,
.fdiv_32 = (215 + 225) / 2,
.fdiv_64 = (220 + 230) / 2,
.ffree = (9 + 16) / 2,
.fadd_i16 = (102 + 137) / 2,
.fadd_i32 = (108 + 143) / 2,
.fcom_i16 = (72 + 86) / 2,
.fcom_i32 = (78 + 91) / 2,
.fdiv_i16 = (224 + 238) / 2,
.fdiv_i32 = (230 + 243) / 2,
.fild_16 = (46 + 54) / 2,
.fild_32 = (50 + 60) / 2,
.fild_64 = (60 + 68) / 2,
.fmul_i16 = (124 + 138) / 2,
.fmul_i32 = (130 + 144) / 2,
.finit = (2 + 8) / 2,
.fist_16 = (80 + 90) / 2,
.fist_32 = (82 + 92) / 2,
.fist_64 = (94 + 105) / 2,
.fld = (17 + 22) / 2,
.fld_32 = (38 + 56) / 2,
.fld_64 = (40 + 60) / 2,
.fld_80 = (53 + 65) / 2,
.fld_z1 = (11 + 21) / 2,
.fld_const = (15 + 24) / 2,
.fldcw = (7 + 14) / 2,
.fldenv = (35 + 45) / 2,
.fmul = (90 + 145) / 2,
.fmul_32 = (110 + 125) / 2,
.fmul_64 = (154 + 168) / 2,
.fnop = (10 + 16) / 2,
.fpatan = (250 + 800) / 2,
.fprem = (15 + 190) / 2,
.fprem1 = 0, /*387+*/
.fptan = (30 + 540) / 2,
.frndint = (16 + 50) / 2,
.frstor = (197 + 207) / 2,
.fsave = (197 + 207) / 2,
.fscale = (32 + 38) / 2,
.fsetpm = (2 + 8) / 2, /*287+*/
.fsin_cos = 0, /*387+*/
.fsincos = 0, /*387+*/
.fsqrt = (180 + 186) / 2,
.fst = (15 + 22) / 2,
.fst_32 = (84 + 90) / 2,
.fst_64 = (96 + 104) / 2,
.fst_80 = (52 + 58) / 2,
.fstcw_sw = (12 + 18) / 2,
.fstenv = (40 + 50) / 2,
.ftst = (38 + 48) / 2,
.fucom = 0, /*387+*/
.fwait = 3,
.fxam = (12 + 23) / 2,
.fxch = (10 + 15) / 2,
.fxtract = (27 + 55) / 2,
.fyl2x = (900 + 1100) / 2,
.fyl2xp1 = (700 + 1000) / 2
};
const x87_timings_t x87_timings_387 =
{
.f2xm1 = (211 + 476) / 2,
.fabs = 22,
.fadd = (23 + 34) / 2,
.fadd_32 = (24 + 32) / 2,
.fadd_64 = (29 + 37) / 2,
.fbld = (266 + 275) / 2,
.fbstp = (512 + 534) / 2,
.fchs = (24 + 25) / 2,
.fclex = 11,
.fcom = 24,
.fcom_32 = 26,
.fcom_64 = 31,
.fcos = (122 + 772) / 2,
.fincdecstp = 22,
.fdisi_eni = 2,
.fdiv = (88 + 91) / 2,
.fdiv_32 = 89,
.fdiv_64 = 94,
.ffree = 18,
.fadd_i16 = (71 + 85) / 2,
.fadd_i32 = (57 + 72) / 2,
.fcom_i16 = (71 + 75) / 2,
.fcom_i32 = (56 + 63) / 2,
.fdiv_i16 = (136 + 140) / 2,
.fdiv_i32 = (120 + 127) / 2,
.fild_16 = (61 + 65) / 2,
.fild_32 = (45 + 52) / 2,
.fild_64 = (56 + 67) / 2,
.fmul_i16 = (76 + 87) / 2,
.fmul_i32 = (61 + 82) / 2,
.finit = 33,
.fist_16 = (82 + 95) / 2,
.fist_32 = (79 + 93) / 2,
.fist_64 = (80 + 97) / 2,
.fld = 14,
.fld_32 = 20,
.fld_64 = 25,
.fld_80 = 44,
.fld_z1 = (20 + 24) / 2,
.fld_const = 40,
.fldcw = 19,
.fldenv = 71,
.fmul = (29 + 57) / 2,
.fmul_32 = (27 + 35) / 2,
.fmul_64 = (32 + 57) / 2,
.fnop = 12,
.fpatan = (314 + 487) / 2,
.fprem = (74 + 155) / 2,
.fprem1 = (95 + 185) / 2,
.fptan = (191 + 497) / 2,
.frndint = (66 + 80) / 2,
.frstor = 308,
.fsave = 375,
.fscale = (67 + 86) / 2,
.fsetpm = 12,
.fsin_cos = (122 + 771) / 2,
.fsincos = (194 + 809) / 2,
.fsqrt = (122 + 129) / 2,
.fst = 11,
.fst_32 = 44,
.fst_64 = 45,
.fst_80 = 53,
.fstcw_sw = 15,
.fstenv = 103,
.ftst = 28,
.fucom = 24,
.fwait = 6,
.fxam = (30 + 38) / 2,
.fxch = 18,
.fxtract = (70 + 76) / 2,
.fyl2x = (120 + 538) / 2,
.fyl2xp1 = (257 + 547) / 2
const x87_timings_t x87_timings_387 = {
.f2xm1 = (211 + 476) / 2,
.fabs = 22,
.fadd = (23 + 34) / 2,
.fadd_32 = (24 + 32) / 2,
.fadd_64 = (29 + 37) / 2,
.fbld = (266 + 275) / 2,
.fbstp = (512 + 534) / 2,
.fchs = (24 + 25) / 2,
.fclex = 11,
.fcom = 24,
.fcom_32 = 26,
.fcom_64 = 31,
.fcos = (122 + 772) / 2,
.fincdecstp = 22,
.fdisi_eni = 2,
.fdiv = (88 + 91) / 2,
.fdiv_32 = 89,
.fdiv_64 = 94,
.ffree = 18,
.fadd_i16 = (71 + 85) / 2,
.fadd_i32 = (57 + 72) / 2,
.fcom_i16 = (71 + 75) / 2,
.fcom_i32 = (56 + 63) / 2,
.fdiv_i16 = (136 + 140) / 2,
.fdiv_i32 = (120 + 127) / 2,
.fild_16 = (61 + 65) / 2,
.fild_32 = (45 + 52) / 2,
.fild_64 = (56 + 67) / 2,
.fmul_i16 = (76 + 87) / 2,
.fmul_i32 = (61 + 82) / 2,
.finit = 33,
.fist_16 = (82 + 95) / 2,
.fist_32 = (79 + 93) / 2,
.fist_64 = (80 + 97) / 2,
.fld = 14,
.fld_32 = 20,
.fld_64 = 25,
.fld_80 = 44,
.fld_z1 = (20 + 24) / 2,
.fld_const = 40,
.fldcw = 19,
.fldenv = 71,
.fmul = (29 + 57) / 2,
.fmul_32 = (27 + 35) / 2,
.fmul_64 = (32 + 57) / 2,
.fnop = 12,
.fpatan = (314 + 487) / 2,
.fprem = (74 + 155) / 2,
.fprem1 = (95 + 185) / 2,
.fptan = (191 + 497) / 2,
.frndint = (66 + 80) / 2,
.frstor = 308,
.fsave = 375,
.fscale = (67 + 86) / 2,
.fsetpm = 12,
.fsin_cos = (122 + 771) / 2,
.fsincos = (194 + 809) / 2,
.fsqrt = (122 + 129) / 2,
.fst = 11,
.fst_32 = 44,
.fst_64 = 45,
.fst_80 = 53,
.fstcw_sw = 15,
.fstenv = 103,
.ftst = 28,
.fucom = 24,
.fwait = 6,
.fxam = (30 + 38) / 2,
.fxch = 18,
.fxtract = (70 + 76) / 2,
.fyl2x = (120 + 538) / 2,
.fyl2xp1 = (257 + 547) / 2
};
const x87_timings_t x87_timings_486 =
{
.f2xm1 = (140 + 270) / 2,
.fabs = 3,
.fadd = (8 + 20) / 2,
.fadd_32 = (8 + 20) / 2,
.fadd_64 = (8 + 20) / 2,
.fbld = (70 + 103) / 2,
.fbstp = (172 + 176) / 2,
.fchs = 6,
.fclex = 7,
.fcom = 4,
.fcom_32 = 4,
.fcom_64 = 4,
.fcos = (257 + 354) / 2,
.fincdecstp = 3,
.fdisi_eni = 3,
.fdiv = 73,
.fdiv_32 = 73,
.fdiv_64 = 73,
.ffree = 3,
.fadd_i16 = (20 + 35) / 2,
.fadd_i32 = (19 + 32) / 2,
.fcom_i16 = (16 + 20) / 2,
.fcom_i32 = (15 + 17) / 2,
.fdiv_i16 = (85 + 89) / 2,
.fdiv_i32 = (84 + 86) / 2,
.fild_16 = (13 + 16) / 2,
.fild_32 = (9 + 12) / 2,
.fild_64 = (10 + 18) / 2,
.fmul_i16 = (23 + 27) / 2,
.fmul_i32 = (22 + 24) / 2,
.finit = 17,
.fist_16 = (29 + 34) / 2,
.fist_32 = (28 + 34) / 2,
.fist_64 = (29 + 34) / 2,
.fld = 4,
.fld_32 = 3,
.fld_64 = 3,
.fld_80 = 6,
.fld_z1 = 4,
.fld_const = 8,
.fldcw = 4,
.fldenv = 34,
.fmul = 16,
.fmul_32 = 11,
.fmul_64 = 14,
.fnop = 3,
.fpatan = (218 + 303) / 2,
.fprem = (70 + 138) / 2,
.fprem1 = (72 + 167) / 2,
.fptan = (200 + 273) / 2,
.frndint = (21 + 30) / 2,
.frstor = 120,
.fsave = 143,
.fscale = (30 + 32) / 2,
.fsetpm = 3,
.fsin_cos = (257 + 354) / 2,
.fsincos = (292 + 365) / 2,
.fsqrt = (83 + 87) / 2,
.fst = 3,
.fst_32 = 7,
.fst_64 = 8,
.fst_80 = 6,
.fstcw_sw = 3,
.fstenv = 56,
.ftst = 4,
.fucom = 4,
.fwait = (1 + 3) / 2,
.fxam = 8,
.fxch = 4,
.fxtract = (16 + 20) / 2,
.fyl2x = (196 + 329) / 2,
.fyl2xp1 = (171 + 326) / 2
const x87_timings_t x87_timings_486 = {
.f2xm1 = (140 + 270) / 2,
.fabs = 3,
.fadd = (8 + 20) / 2,
.fadd_32 = (8 + 20) / 2,
.fadd_64 = (8 + 20) / 2,
.fbld = (70 + 103) / 2,
.fbstp = (172 + 176) / 2,
.fchs = 6,
.fclex = 7,
.fcom = 4,
.fcom_32 = 4,
.fcom_64 = 4,
.fcos = (257 + 354) / 2,
.fincdecstp = 3,
.fdisi_eni = 3,
.fdiv = 73,
.fdiv_32 = 73,
.fdiv_64 = 73,
.ffree = 3,
.fadd_i16 = (20 + 35) / 2,
.fadd_i32 = (19 + 32) / 2,
.fcom_i16 = (16 + 20) / 2,
.fcom_i32 = (15 + 17) / 2,
.fdiv_i16 = (85 + 89) / 2,
.fdiv_i32 = (84 + 86) / 2,
.fild_16 = (13 + 16) / 2,
.fild_32 = (9 + 12) / 2,
.fild_64 = (10 + 18) / 2,
.fmul_i16 = (23 + 27) / 2,
.fmul_i32 = (22 + 24) / 2,
.finit = 17,
.fist_16 = (29 + 34) / 2,
.fist_32 = (28 + 34) / 2,
.fist_64 = (29 + 34) / 2,
.fld = 4,
.fld_32 = 3,
.fld_64 = 3,
.fld_80 = 6,
.fld_z1 = 4,
.fld_const = 8,
.fldcw = 4,
.fldenv = 34,
.fmul = 16,
.fmul_32 = 11,
.fmul_64 = 14,
.fnop = 3,
.fpatan = (218 + 303) / 2,
.fprem = (70 + 138) / 2,
.fprem1 = (72 + 167) / 2,
.fptan = (200 + 273) / 2,
.frndint = (21 + 30) / 2,
.frstor = 120,
.fsave = 143,
.fscale = (30 + 32) / 2,
.fsetpm = 3,
.fsin_cos = (257 + 354) / 2,
.fsincos = (292 + 365) / 2,
.fsqrt = (83 + 87) / 2,
.fst = 3,
.fst_32 = 7,
.fst_64 = 8,
.fst_80 = 6,
.fstcw_sw = 3,
.fstenv = 56,
.ftst = 4,
.fucom = 4,
.fwait = (1 + 3) / 2,
.fxam = 8,
.fxch = 4,
.fxtract = (16 + 20) / 2,
.fyl2x = (196 + 329) / 2,
.fyl2xp1 = (171 + 326) / 2
};
/* this should be used for FPUs with no concurrency.
some pre-486DX Cyrix FPUs reportedly are like this. */
const x87_timings_t x87_concurrency_none =
{
.f2xm1 = 0,
.fabs = 0,
.fadd = 0,
.fadd_32 = 0,
.fadd_64 = 0,
.fbld = 0,
.fbstp = 0,
.fchs = 0,
.fclex = 0,
.fcom = 0,
.fcom_32 = 0,
.fcom_64 = 0,
.fcos = 0,
.fincdecstp = 0,
.fdisi_eni = 0,
.fdiv = 0,
.fdiv_32 = 0,
.fdiv_64 = 0,
.ffree = 0,
.fadd_i16 = 0,
.fadd_i32 = 0,
.fcom_i16 = 0,
.fcom_i32 = 0,
.fdiv_i16 = 0,
.fdiv_i32 = 0,
.fild_16 = 0,
.fild_32 = 0,
.fild_64 = 0,
.fmul_i16 = 0,
.fmul_i32 = 0,
.finit = 0,
.fist_16 = 0,
.fist_32 = 0,
.fist_64 = 0,
.fld = 0,
.fld_32 = 0,
.fld_64 = 0,
.fld_80 = 0,
.fld_z1 = 0,
.fld_const = 0,
.fldcw = 0,
.fldenv = 0,
.fmul = 0,
.fmul_32 = 0,
.fmul_64 = 0,
.fnop = 0,
.fpatan = 0,
.fprem = 0,
.fprem1 = 0,
.fptan = 0,
.frndint = 0,
.frstor = 0,
.fsave = 0,
.fscale = 0,
.fsetpm = 0,
.fsin_cos = 0,
.fsincos = 0,
.fsqrt = 0,
.fst = 0,
.fst_32 = 0,
.fst_64 = 0,
.fst_80 = 0,
.fstcw_sw = 0,
.fstenv = 0,
.ftst = 0,
.fucom = 0,
.fwait = 0,
.fxam = 0,
.fxch = 0,
.fxtract = 0,
.fyl2x = 0,
.fyl2xp1 = 0,
const x87_timings_t x87_concurrency_none = {
.f2xm1 = 0,
.fabs = 0,
.fadd = 0,
.fadd_32 = 0,
.fadd_64 = 0,
.fbld = 0,
.fbstp = 0,
.fchs = 0,
.fclex = 0,
.fcom = 0,
.fcom_32 = 0,
.fcom_64 = 0,
.fcos = 0,
.fincdecstp = 0,
.fdisi_eni = 0,
.fdiv = 0,
.fdiv_32 = 0,
.fdiv_64 = 0,
.ffree = 0,
.fadd_i16 = 0,
.fadd_i32 = 0,
.fcom_i16 = 0,
.fcom_i32 = 0,
.fdiv_i16 = 0,
.fdiv_i32 = 0,
.fild_16 = 0,
.fild_32 = 0,
.fild_64 = 0,
.fmul_i16 = 0,
.fmul_i32 = 0,
.finit = 0,
.fist_16 = 0,
.fist_32 = 0,
.fist_64 = 0,
.fld = 0,
.fld_32 = 0,
.fld_64 = 0,
.fld_80 = 0,
.fld_z1 = 0,
.fld_const = 0,
.fldcw = 0,
.fldenv = 0,
.fmul = 0,
.fmul_32 = 0,
.fmul_64 = 0,
.fnop = 0,
.fpatan = 0,
.fprem = 0,
.fprem1 = 0,
.fptan = 0,
.frndint = 0,
.frstor = 0,
.fsave = 0,
.fscale = 0,
.fsetpm = 0,
.fsin_cos = 0,
.fsincos = 0,
.fsqrt = 0,
.fst = 0,
.fst_32 = 0,
.fst_64 = 0,
.fst_80 = 0,
.fstcw_sw = 0,
.fstenv = 0,
.ftst = 0,
.fucom = 0,
.fwait = 0,
.fxam = 0,
.fxch = 0,
.fxtract = 0,
.fyl2x = 0,
.fyl2xp1 = 0,
};
const x87_timings_t x87_concurrency_486 =
{
.f2xm1 = 2,
.fabs = 0,
.fadd = 7,
.fadd_32 = 7,
.fadd_64 = 7,
.fbld = 8,
.fbstp = 0,
.fchs = 0,
.fclex = 0,
.fcom = 1,
.fcom_32 = 1,
.fcom_64 = 1,
.fcos = 2,
.fincdecstp = 0,
.fdisi_eni = 0,
.fdiv = 70,
.fdiv_32 = 70,
.fdiv_64 = 70,
.ffree = 0,
.fadd_i16 = 7,
.fadd_i32 = 7,
.fcom_i16 = 1,
.fcom_i32 = 1,
.fdiv_i16 = 70,
.fdiv_i32 = 70,
.fild_16 = 4,
.fild_32 = 4,
.fild_64 = 8,
.fmul_i16 = 8,
.fmul_i32 = 8,
.finit = 0,
.fist_16 = 0,
.fist_32 = 0,
.fist_64 = 0,
.fld = 0,
.fld_32 = 0,
.fld_64 = 0,
.fld_80 = 0,
.fld_z1 = 0,
.fld_const = 2,
.fldcw = 0,
.fldenv = 0,
.fmul = 13,
.fmul_32 = 8,
.fmul_64 = 11,
.fnop = 0,
.fpatan = 5,
.fprem = 2,
.fprem1 = 6,
.fptan = 70,
.frndint = 0,
.frstor = 0,
.fsave = 0,
.fscale = 2,
.fsetpm = 0,
.fsin_cos = 2,
.fsincos = 2,
.fsqrt = 70,
.fst = 0,
.fst_32 = 0,
.fst_64 = 0,
.fst_80 = 0,
.fstcw_sw = 0,
.fstenv = 0,
.ftst = 1,
.fucom = 1,
.fwait = 0,
.fxam = 0,
.fxch = 0,
.fxtract = 4,
.fyl2x = 13,
.fyl2xp1 = 13,
const x87_timings_t x87_concurrency_486 = {
.f2xm1 = 2,
.fabs = 0,
.fadd = 7,
.fadd_32 = 7,
.fadd_64 = 7,
.fbld = 8,
.fbstp = 0,
.fchs = 0,
.fclex = 0,
.fcom = 1,
.fcom_32 = 1,
.fcom_64 = 1,
.fcos = 2,
.fincdecstp = 0,
.fdisi_eni = 0,
.fdiv = 70,
.fdiv_32 = 70,
.fdiv_64 = 70,
.ffree = 0,
.fadd_i16 = 7,
.fadd_i32 = 7,
.fcom_i16 = 1,
.fcom_i32 = 1,
.fdiv_i16 = 70,
.fdiv_i32 = 70,
.fild_16 = 4,
.fild_32 = 4,
.fild_64 = 8,
.fmul_i16 = 8,
.fmul_i32 = 8,
.finit = 0,
.fist_16 = 0,
.fist_32 = 0,
.fist_64 = 0,
.fld = 0,
.fld_32 = 0,
.fld_64 = 0,
.fld_80 = 0,
.fld_z1 = 0,
.fld_const = 2,
.fldcw = 0,
.fldenv = 0,
.fmul = 13,
.fmul_32 = 8,
.fmul_64 = 11,
.fnop = 0,
.fpatan = 5,
.fprem = 2,
.fprem1 = 6,
.fptan = 70,
.frndint = 0,
.frstor = 0,
.fsave = 0,
.fscale = 2,
.fsetpm = 0,
.fsin_cos = 2,
.fsincos = 2,
.fsqrt = 70,
.fst = 0,
.fst_32 = 0,
.fst_64 = 0,
.fst_80 = 0,
.fstcw_sw = 0,
.fstenv = 0,
.ftst = 1,
.fucom = 1,
.fwait = 0,
.fxam = 0,
.fxch = 0,
.fxtract = 4,
.fyl2x = 13,
.fyl2xp1 = 13,
};

View File

@@ -1,51 +1,51 @@
typedef struct
{
int f2xm1;
int fabs;
int fadd, fadd_32, fadd_64;
int fbld;
int fbstp;
int fchs;
int fclex;
int fcom, fcom_32, fcom_64;
int fcos;
int fincdecstp;
int fdisi_eni;
int fdiv, fdiv_32, fdiv_64;
int ffree;
int fadd_i16, fadd_i32;
int fcom_i16, fcom_i32;
int fdiv_i16, fdiv_i32;
int fild_16, fild_32, fild_64;
int fmul_i16, fmul_i32;
int finit;
int fist_16, fist_32, fist_64;
int fld, fld_32, fld_64, fld_80;
int fld_z1, fld_const;
int fldcw;
int fldenv;
int fmul, fmul_32, fmul_64;
int fnop;
int fpatan;
int fprem, fprem1;
int fptan;
int frndint;
int frstor;
int fsave;
int fscale;
int fsetpm;
int fsin_cos, fsincos;
int fsqrt;
int fst, fst_32, fst_64, fst_80;
int fstcw_sw;
int fstenv;
int ftst;
int fucom;
int fwait;
int fxam;
int fxch;
int fxtract;
int fyl2x, fyl2xp1;
int f2xm1;
int fabs;
int fadd, fadd_32, fadd_64;
int fbld;
int fbstp;
int fchs;
int fclex;
int fcom, fcom_32, fcom_64;
int fcos;
int fincdecstp;
int fdisi_eni;
int fdiv, fdiv_32, fdiv_64;
int ffree;
int fadd_i16, fadd_i32;
int fcom_i16, fcom_i32;
int fdiv_i16, fdiv_i32;
int fild_16, fild_32, fild_64;
int fmul_i16, fmul_i32;
int finit;
int fist_16, fist_32, fist_64;
int fld, fld_32, fld_64, fld_80;
int fld_z1, fld_const;
int fldcw;
int fldenv;
int fmul, fmul_32, fmul_64;
int fnop;
int fpatan;
int fprem, fprem1;
int fptan;
int frndint;
int frstor;
int fsave;
int fscale;
int fsetpm;
int fsin_cos, fsincos;
int fsqrt;
int fst, fst_32, fst_64, fst_80;
int fstcw_sw;
int fstenv;
int ftst;
int fucom;
int fwait;
int fxam;
int fxch;
int fxtract;
int fyl2x, fyl2xp1;
} x87_timings_t;
extern const x87_timings_t x87_timings_8087;

View File

@@ -102,10 +102,10 @@ extern const device_t ps1snd_device;
/* Tandy PSSJ */
extern const device_t pssj_device;
# if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
extern const device_t pssj_isa_device;
/* Tandy PSG */
extern const device_t tndy_device;
# endif
/* Creative Labs Sound Blaster */
extern const device_t sb_1_device;

View File

@@ -275,7 +275,7 @@ ini_detect_bom(char *fn)
#endif
if (f == NULL)
return (0);
fread(bom, 1, 3, f);
(void) !fread(bom, 1, 3, f);
if (bom[0] == 0xEF && bom[1] == 0xBB && bom[2] == 0xBF) {
fclose(f);
return 1;

View File

@@ -117,9 +117,5 @@ if(GUSMAX)
target_compile_definitions(snd PRIVATE USE_GUSMAX)
endif()
if(TANDY_ISA)
target_compile_definitions(snd PRIVATE USE_TANDY_ISA)
endif()
add_subdirectory(resid-fp)
target_link_libraries(86Box resid-fp)

View File

@@ -208,24 +208,22 @@ pssj_1e0_init(const device_t *info)
return pssj;
}
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
void *
pssj_isa_init(const device_t *info)
{
pssj_t *pssj = malloc(sizeof(pssj_t));
memset(pssj, 0, sizeof(pssj_t));
sn76489_init(&pssj->sn76489, 0x00c0, 0x0004, PSSJ, 3579545);
uint16_t addr = device_get_config_hex16("base");
io_sethandler(addr, 0x0004, pssj_read, NULL, NULL, pssj_write, NULL, NULL, pssj);
sn76489_init(&pssj->sn76489, addr, 0x0004, PSSJ, 3579545);
io_sethandler(addr + 0x04, 0x0004, pssj_read, NULL, NULL, pssj_write, NULL, NULL, pssj);
timer_add(&pssj->timer_count, pssj_callback, pssj, pssj->enable);
sound_add_handler(pssj_get_buffer, pssj);
return pssj;
}
#endif
void
pssj_close(void *p)
@@ -235,7 +233,6 @@ pssj_close(void *p)
free(pssj);
}
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
static const device_config_t pssj_isa_config[] = {
// clang-format off
{
@@ -251,6 +248,14 @@ static const device_config_t pssj_isa_config[] = {
.description = "0x0C0",
.value = 0x0C0
},
{
.description = "0x0E0",
.value = 0x0E0
},
{
.description = "0x1C0",
.value = 0x1C0
},
{
.description = "0x1E0",
.value = 0x1E0
@@ -259,13 +264,16 @@ static const device_config_t pssj_isa_config[] = {
.description = "0x2C0",
.value = 0x2C0
},
{
.description = "0x2E0",
.value = 0x2E0
},
{ .description = "" }
}
},
{ .name = "", .description = "", .type = CONFIG_END }
// clang-format on
};
#endif
const device_t pssj_device = {
.name = "Tandy PSSJ",
@@ -295,7 +303,6 @@ const device_t pssj_1e0_device = {
.config = NULL
};
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
const device_t pssj_isa_device = {
.name = "Tandy PSSJ Clone",
.internal_name = "pssj_isa",
@@ -309,4 +316,3 @@ const device_t pssj_isa_device = {
.force_redraw = NULL,
.config = pssj_isa_config
};
#endif

View File

@@ -209,6 +209,7 @@ sn76489_device_init(const device_t *info)
return sn76489;
}
void *
ncr8496_device_init(const device_t *info)
{
@@ -220,7 +221,6 @@ ncr8496_device_init(const device_t *info)
return sn76489;
}
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
void *
tndy_device_init(const device_t *info)
{
@@ -233,7 +233,6 @@ tndy_device_init(const device_t *info)
return sn76489;
}
#endif
void
sn76489_device_close(void *p)
@@ -243,7 +242,6 @@ sn76489_device_close(void *p)
free(sn76489);
}
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
static const device_config_t tndy_config[] = {
// clang-format off
{
@@ -259,6 +257,14 @@ static const device_config_t tndy_config[] = {
.description = "0x0C0",
.value = 0x0C0
},
{
.description = "0x0E0",
.value = 0x0E0
},
{
.description = "0x1C0",
.value = 0x1C0
},
{
.description = "0x1E0",
.value = 0x1E0
@@ -267,13 +273,16 @@ static const device_config_t tndy_config[] = {
.description = "0x2C0",
.value = 0x2C0
},
{
.description = "0x2E0",
.value = 0x2E0
},
{ .description = "" }
}
},
{ .name = "", .description = "", .type = CONFIG_END }
// clang-format on
};
#endif
const device_t sn76489_device = {
.name = "TI SN74689 PSG",
@@ -303,7 +312,6 @@ const device_t ncr8496_device = {
.config = NULL
};
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
const device_t tndy_device = {
.name = "TNDY",
.internal_name = "tndy",
@@ -317,4 +325,3 @@ const device_t tndy_device = {
.force_redraw = NULL,
.config = tndy_config
};
#endif

View File

@@ -131,10 +131,8 @@ static const SOUND_CARD sound_cards[] = {
#if defined(DEV_BRANCH) && defined(USE_PAS16)
{ &pas16_device },
#endif
#if defined(DEV_BRANCH) && defined(USE_TANDY_ISA)
{ &pssj_isa_device },
{ &tndy_device },
#endif
{ &wss_device },
{ &adlib_mca_device },
{ &ncr_business_audio_device },

View File

@@ -2688,7 +2688,7 @@ static void
rom = malloc(xga->bios_rom.sz);
memset(rom, 0xff, xga->bios_rom.sz);
(void) fread(rom, xga->bios_rom.sz, 1, f);
(void) !fread(rom, xga->bios_rom.sz, 1, f);
temp -= xga->bios_rom.sz;
(void) fclose(f);

View File

@@ -996,9 +996,9 @@ loadfont_common(FILE *f, int format)
for (d = 0; d < 4; d++) {
/* There are 4 fonts in the ROM */
for (c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */
fread(&fontdatm[256 * d + c][0], 1, 16, f);
(void) !fread(&fontdatm[256 * d + c][0], 1, 16, f);
for (c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */
fread(&fontdat[256 * d + c][0], 1, 8, f);
(void) !fread(&fontdat[256 * d + c][0], 1, 8, f);
fseek(f, 8, SEEK_CUR);
}
}

View File

@@ -79,9 +79,6 @@ ifeq ($(DEV_BUILD), y)
ifndef SIO_DETECT
SIO_DETECT := y
endif
ifndef TANDY_ISA
TANDY_ISA := y
endif
ifndef VGAWONDER
VGAWONDER := y
endif
@@ -143,9 +140,6 @@ else
ifndef SIO_DETECT
SIO_DETECT := n
endif
ifndef TANDY_ISA
TANDY_ISA := n
endif
ifndef VGAWONDER
VGAWONDER := n
endif
@@ -495,10 +489,6 @@ OPTS += -DUSE_SIO_DETECT
DEVBROBJ += sio_detect.o
endif
ifeq ($(TANDY_ISA), y)
OPTS += -DUSE_TANDY_ISA
endif
ifeq ($(VGAWONDER), y)
OPTS += -DUSE_VGAWONDER
endif