Merge remote-tracking branch 'origin/master' into feature/machine_and_kb

This commit is contained in:
OBattler
2021-09-18 19:43:31 +02:00
3 changed files with 16 additions and 33 deletions

View File

@@ -104,4 +104,11 @@ if(MSVC_TOOLSET_VERSION GREATER_EQUAL 142 AND ARCH STREQUAL "arm64")
endif()
endif()
# HACK: MinGW does not have `timespec_get`
include(CheckSymbolExists)
check_symbol_exists(timespec_get time.h HAS_TIMESPEC_GET)
if(HAS_TIMESPEC_GET)
add_compile_definitions(HAS_TIMESPEC_GET)
endif()
add_subdirectory(src)

View File

@@ -1929,11 +1929,13 @@ fdc_data(fdc_t *fdc, uint8_t data, int last)
return -1;
if (!fdc->fifo || (fdc->tfifo < 1)) {
dma_channel_write(fdc->dma_ch, data);
fdc->data_ready = 1;
fdc->stat = 0xd0;
fdc->fifobufpos = 0;
result = dma_channel_write(fdc->dma_ch, data);
if (result & DMA_OVER) {
fdc->tc = 1;
return -1;

View File

@@ -2,17 +2,14 @@
#include <stdio.h>
#include <time.h>
#include <pthread.h>
#ifndef _MSC_VER
#include <sys/param.h>
#include <unistd.h>
#endif
#ifdef _WIN32
#include <windows.h>
#endif
#include <inttypes.h>
#include <86box/86box.h>
#include <86box/plat.h>
#ifndef HAS_TIMESPEC_GET
# define timespec_get(ts, _) clock_gettime(CLOCK_REALTIME, ts)
#endif
typedef struct event_pthread_t
{
@@ -108,25 +105,13 @@ thread_wait_event(event_t *handle, int timeout)
event_pthread_t *event = (event_pthread_t *)handle;
struct timespec abstime;
#ifdef _MSC_VER
/* Taken from https://stackoverflow.com/a/31335254 with some modifications. */
FILETIME systime;
uint64_t systimeint = 0;
GetSystemTimeAsFileTime(&systime);
systimeint |= systime.dwLowDateTime;
systimeint |= (uint64_t)systime.dwHighDateTime << 32i64;
systimeint -= 116444736000000000i64;
abstime.tv_sec = systimeint / 10000000i64;
abstime.tv_nsec = systimeint % 10000000i64 * 100;
#else
clock_gettime(CLOCK_REALTIME, &abstime);
timespec_get(&abstime, TIME_UTC);
abstime.tv_nsec += (timeout % 1000) * 1000000;
abstime.tv_sec += (timeout / 1000);
if (abstime.tv_nsec > 1000000000) {
abstime.tv_nsec -= 1000000000;
abstime.tv_sec++;
}
#endif
pthread_mutex_lock(&event->mutex);
if (timeout == -1) {
@@ -152,17 +137,6 @@ thread_destroy_event(event_t *handle)
}
void
thread_sleep(int t)
{
#ifdef _WIN32
Sleep(t);
#else
usleep(t * 1000);
#endif
}
mutex_t *
thread_create_mutex(void)
{