Merge branch '86Box:master' into master

This commit is contained in:
starfrost
2025-03-21 23:53:27 +00:00
committed by GitHub
10 changed files with 144 additions and 57 deletions

View File

@@ -440,6 +440,75 @@ fatal_ex(const char *fmt, va_list ap)
fflush(stdlog);
}
/* Log a warning error, and display a UI message without exiting. */
void
warning(const char *fmt, ...)
{
char temp[1024];
va_list ap;
char *sp;
va_start(ap, fmt);
if (stdlog == NULL) {
if (log_path[0] != '\0') {
stdlog = plat_fopen(log_path, "w");
if (stdlog == NULL)
stdlog = stdout;
} else
stdlog = stdout;
}
vsprintf(temp, fmt, ap);
fprintf(stdlog, "%s", temp);
fflush(stdlog);
va_end(ap);
/* Make sure the message does not have a trailing newline. */
if ((sp = strchr(temp, '\n')) != NULL)
*sp = '\0';
do_pause(2);
ui_msgbox(MBX_ERROR | MBX_ANSI, temp);
fflush(stdlog);
do_pause(0);
}
void
warning_ex(const char *fmt, va_list ap)
{
char temp[1024];
char *sp;
if (stdlog == NULL) {
if (log_path[0] != '\0') {
stdlog = plat_fopen(log_path, "w");
if (stdlog == NULL)
stdlog = stdout;
} else
stdlog = stdout;
}
vsprintf(temp, fmt, ap);
fprintf(stdlog, "%s", temp);
fflush(stdlog);
/* Make sure the message does not have a trailing newline. */
if ((sp = strchr(temp, '\n')) != NULL)
*sp = '\0';
do_pause(2);
ui_msgbox(MBX_ERROR | MBX_ANSI, temp);
fflush(stdlog);
do_pause(0);
}
#ifdef ENABLE_PC_LOG
int pc_do_log = ENABLE_PC_LOG;

View File

@@ -486,19 +486,16 @@ mo_bus_speed(mo_t *dev)
{
double ret = -1.0;
if (dev && dev->drv && (dev->drv->bus_type == MO_BUS_SCSI)) {
dev->callback = -1.0; /* Speed depends on SCSI controller */
return 0.0;
} else {
if (dev && dev->drv)
ret = ide_atapi_get_period(dev->drv->ide_channel);
if (ret == -1.0) {
if (dev)
dev->callback = -1.0;
return 0.0;
} else
return ret * 1000000.0;
if (dev && dev->drv)
ret = ide_atapi_get_period(dev->drv->ide_channel);
if (ret == -1.0) {
if (dev)
dev->callback = -1.0;
ret = 0.0;
}
return ret;
}
static void
@@ -509,18 +506,10 @@ mo_command_common(mo_t *dev)
dev->tf->pos = 0;
if (dev->packet_status == PHASE_COMPLETE)
dev->callback = 0.0;
else {
double bytes_per_second;
if (dev->drv->bus_type == MO_BUS_SCSI) {
dev->callback = -1.0; /* Speed depends on SCSI controller */
return;
} else
bytes_per_second = mo_bus_speed(dev);
const double period = 1000000.0 / bytes_per_second;
dev->callback = period * (double) (dev->packet_len);
}
else if (dev->drv->bus_type == MO_BUS_SCSI)
dev->callback = -1.0; /* Speed depends on SCSI controller */
else
dev->callback = mo_bus_speed(dev) * (double) (dev->packet_len);
mo_set_callback(dev);
}

View File

@@ -567,19 +567,16 @@ zip_bus_speed(zip_t *dev)
{
double ret = -1.0;
if (dev && dev->drv && (dev->drv->bus_type == ZIP_BUS_SCSI)) {
dev->callback = -1.0; /* Speed depends on SCSI controller */
return 0.0;
} else {
if (dev && dev->drv)
ret = ide_atapi_get_period(dev->drv->ide_channel);
if (ret == -1.0) {
if (dev)
dev->callback = -1.0;
return 0.0;
} else
return ret * 1000000.0;
if (dev && dev->drv)
ret = ide_atapi_get_period(dev->drv->ide_channel);
if (ret == -1.0) {
if (dev)
dev->callback = -1.0;
ret = 0.0;
}
return ret;
}
static void
@@ -590,18 +587,10 @@ zip_command_common(zip_t *dev)
dev->tf->pos = 0;
if (dev->packet_status == PHASE_COMPLETE)
dev->callback = 0.0;
else {
double bytes_per_second;
if (dev->drv->bus_type == ZIP_BUS_SCSI) {
dev->callback = -1.0; /* Speed depends on SCSI controller */
return;
} else
bytes_per_second = zip_bus_speed(dev);
double period = 1000000.0 / bytes_per_second;
dev->callback = period * (double) (dev->packet_len);
}
else if (dev->drv->bus_type == ZIP_BUS_SCSI)
dev->callback = -1.0; /* Speed depends on SCSI controller */
else
dev->callback = zip_bus_speed(dev) * (double) (dev->packet_len);
zip_set_callback(dev);
}

View File

@@ -194,15 +194,12 @@ extern __thread int is_cpu_thread; /* Is this the CPU thread? */
#ifdef HAVE_STDARG_H
extern void pclog_ex(const char *fmt, va_list ap);
extern void fatal_ex(const char *fmt, va_list ap);
extern void warning_ex(const char *fmt, va_list ap);
#endif
extern void pclog_toggle_suppr(void);
#ifdef _MSC_VER
extern void pclog(const char *fmt, ...);
extern void fatal(const char *fmt, ...);
#else
extern void pclog(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
extern void fatal(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
#endif
extern void warning(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
extern void set_screen_size(int x, int y);
extern void set_screen_size_monitor(int x, int y, int monitor_index);
extern void reset_screen_size(void);

View File

@@ -36,6 +36,7 @@ extern void log_out(void *priv, const char *fmt, va_list);
extern void log_out_cyclic(void* priv, const char *fmt, va_list);
#endif /*RELEASE_BUILD*/
extern void log_fatal(void *priv, const char *fmt, ...);
extern void log_warning(void *priv, const char *fmt, ...);
extern void *log_open(const char *dev_name);
extern void *log_open_cyclic(const char *dev_name);
extern void log_close(void *priv);

View File

@@ -164,6 +164,7 @@ extern uint32_t plat_language_code(char *langcode);
extern void plat_language_code_r(uint32_t lcid, char *outbuf, int len);
extern void plat_get_cpu_string(char *outbuf, uint8_t len);
extern void plat_set_thread_name(void *thread, const char *name);
extern void plat_break(void);
/* Resource management. */
extern wchar_t *plat_get_string(int id);

View File

@@ -842,3 +842,13 @@ plat_set_thread_name(void *thread, const char *name)
# endif
#endif
}
void
plat_break(void)
{
#ifdef Q_OS_WINDOWS
DebugBreak();
#else
raise(SIGTRAP);
#endif
}

View File

@@ -656,7 +656,7 @@ scsi_cdrom_bus_speed(scsi_cdrom_t *dev)
dev->callback = -1.0;
return 0.0;
} else
return ret * 1000000.0;
return 1000000.0 / ret;
}
}
@@ -1069,8 +1069,9 @@ scsi_cdrom_read_data(scsi_cdrom_t *dev, const int msf, const int type, const int
dev->block_len = temp_len;
if ((dev->drv->bus_type != CDROM_BUS_SCSI) &&
(scsi_cdrom_current_mode(dev) != 2))
(scsi_cdrom_current_mode(dev) != 2)) {
num = (dev->packet_len / dev->block_len);
}
}
dev->sector_pos++;
@@ -1126,7 +1127,7 @@ scsi_cdrom_read_blocks(scsi_cdrom_t *dev)
}
if (ret) {
if (!dev->sector_len) {
if (dev->sector_len == 0) {
scsi_cdrom_command_complete(dev);
return -1;
}

View File

@@ -400,7 +400,8 @@ scsi_disk_bus_speed(scsi_disk_t *dev)
dev->callback = -1.0;
return 0.0;
} else
return ret * 1000000.0;
/* We get bytes per µs, so divide 1000000.0 by it. */
return 1000000.0 / ret;
}
}
@@ -484,6 +485,10 @@ scsi_disk_command_common(scsi_disk_t *dev)
break;
}
/*
For ATAPI, this will be 1000000.0 / µs_per_byte, and this will
convert it back to µs_per_byte.
*/
period = 1000000.0 / bytes_per_second;
scsi_disk_log(dev->log, "Byte transfer period: %" PRIu64 " us\n",
(uint64_t) period);

View File

@@ -307,6 +307,31 @@ log_fatal(void *priv, const char *fmt, ...)
exit(-1);
}
void
log_warning(void *priv, const char *fmt, ...)
{
log_t *log = (log_t *) priv;
char temp[1024];
char fmt2[1024];
va_list ap;
if (log == NULL)
return;
if (log->cyclic_buff != NULL) {
for (int i = 0; i < LOG_SIZE_BUFFER_CYCLIC_LINES; i++)
if (log->cyclic_buff[i] != NULL)
free(log->cyclic_buff[i]);
free(log->cyclic_buff);
}
va_start(ap, fmt);
log_copy(log, fmt2, fmt, 1024);
vsprintf(temp, fmt2, ap);
warning_ex(fmt2, ap);
va_end(ap);
}
static void *
log_open_common(const char *dev_name, const int cyclic)
{