mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 01:48:21 -07:00
Merge branch 'master' into feature/ich2
This commit is contained in:
@@ -35,7 +35,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 4.0
|
||||
VERSION 4.0.1
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
@@ -31,8 +31,6 @@ Performance may vary depending on both host and guest configuration. Most emulat
|
||||
It is also recommended to use a manager application with 86Box for easier handling of multiple virtual machines.
|
||||
|
||||
* [86Box Manager](https://github.com/86Box/86BoxManager) by [Overdoze](https://github.com/daviunic) (Windows only)
|
||||
* [86Box Manager Lite](https://github.com/insanemal/86box_manager_py) by [Insanemal](https://github.com/insanemal)
|
||||
* [WinBox for 86Box](https://github.com/86Box/WinBox-for-86Box) by Laci bá' (Windows only)
|
||||
* [Linbox-qt5](https://github.com/Dungeonseeker/linbox-qt5) by Dungeonseeker (Linux focused, should work on Windows though untested)
|
||||
* [MacBox for 86Box](https://github.com/Moonif/MacBox) by [Moonif](https://github.com/Moonif) (MacOS only)
|
||||
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -1,5 +1,5 @@
|
||||
86box (4.0) UNRELEASED; urgency=medium
|
||||
86box (4.0.1) UNRELEASED; urgency=medium
|
||||
|
||||
* Bump release.
|
||||
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Tue, 28 Feb 2023 00:02:16 -0500
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Thu, 12 Oct 2023 00:00:31 +0200
|
||||
|
||||
@@ -1233,19 +1233,6 @@ nearcall(uint16_t new_ip)
|
||||
push(&ret_ip);
|
||||
}
|
||||
|
||||
static void
|
||||
farcall(uint16_t new_cs, uint16_t new_ip, int jump)
|
||||
{
|
||||
if (jump)
|
||||
wait(1, 0);
|
||||
pfq_do_suspend();
|
||||
wait(3, 0);
|
||||
push(&CS);
|
||||
load_cs(new_cs);
|
||||
wait(2, 0);
|
||||
nearcall(new_ip);
|
||||
}
|
||||
|
||||
static void
|
||||
farcall2(uint16_t new_cs, uint16_t new_ip)
|
||||
{
|
||||
@@ -1320,20 +1307,6 @@ sw_int(uint16_t intr)
|
||||
push(&old_ip);
|
||||
}
|
||||
|
||||
static void
|
||||
int1(void)
|
||||
{
|
||||
wait(2, 0);
|
||||
intr_routine(1, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
int2(void)
|
||||
{
|
||||
wait(2, 0);
|
||||
intr_routine(2, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
int3(void)
|
||||
{
|
||||
@@ -1341,17 +1314,6 @@ int3(void)
|
||||
intr_routine(3, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
int_o(void)
|
||||
{
|
||||
wait(4, 0);
|
||||
|
||||
if (cpu_state.flags & V_FLAG) {
|
||||
wait(2, 0);
|
||||
intr_routine(4, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
interrupt_808x(uint16_t addr)
|
||||
{
|
||||
@@ -2098,19 +2060,6 @@ farret(int far)
|
||||
set_ip(new_ip);
|
||||
}
|
||||
|
||||
/* The IRET microcode routine. */
|
||||
static void
|
||||
iret_routine(void)
|
||||
{
|
||||
wait(1, 0);
|
||||
farret(1);
|
||||
if (is_nec)
|
||||
cpu_state.flags = pop() | 0x8002;
|
||||
else
|
||||
cpu_state.flags = pop() | 0x0002;
|
||||
wait(1, 0);
|
||||
}
|
||||
|
||||
/* Executes instructions up to the specified number of cycles. */
|
||||
void
|
||||
execx86(int cycs)
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#
|
||||
# 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
# running old operating systems and software designed for IBM
|
||||
# PC systems and compatibles from 1981 through fairly recent
|
||||
# system designs based on the PCI bus.
|
||||
#
|
||||
# This file is part of the 86Box distribution.
|
||||
#
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
#
|
||||
|
||||
add_library(808x OBJECT queue.c)
|
||||
@@ -1,192 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* 808x CPU emulation, mostly ported from reenigne's XTCE, which
|
||||
* is cycle-accurate.
|
||||
*
|
||||
* Authors: gloriouscow, <https://github.com/dbalsom>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2023 gloriouscow.
|
||||
* Copyright 2023 Miran Grca.
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include "cpu.h"
|
||||
#include "x86.h"
|
||||
#include <86box/machine.h>
|
||||
#include <86box/io.h>
|
||||
#include <86box/mem.h>
|
||||
#include <86box/rom.h>
|
||||
#include <86box/nmi.h>
|
||||
#include <86box/pic.h>
|
||||
#include <86box/ppi.h>
|
||||
#include <86box/timer.h>
|
||||
#include <86box/gdbstub.h>
|
||||
// #include "808x.h"
|
||||
#include "queue.h"
|
||||
|
||||
/* TODO: Move to cpu.h so this can eventually be reused for 286+ as well. */
|
||||
#define QUEUE_MAX 6
|
||||
|
||||
/* NOTE: When porting from Rust to C, please use uintptr_t and not size_t,
|
||||
so it can be printed with PRIuPTR. */
|
||||
typedef struct queue_t {
|
||||
uintptr_t size;
|
||||
uintptr_t len;
|
||||
uintptr_t back;
|
||||
uintptr_t front;
|
||||
uint8_t q[QUEUE_MAX];
|
||||
uint16_t preload;
|
||||
queue_delay_t delay;
|
||||
} queue_t;
|
||||
|
||||
static queue_t queue;
|
||||
|
||||
#ifdef ENABLE_QUEUE_LOG
|
||||
int queue_do_log = ENABLE_QUEUE_LOG;
|
||||
|
||||
static void
|
||||
queue_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (queue_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
# define queue_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
void
|
||||
queue_set_size(uintptr_t size)
|
||||
{
|
||||
if (size > QUEUE_MAX)
|
||||
fatal("Requested prefetch queue of %" PRIuPTR " bytes is too big\n", size);
|
||||
|
||||
queue.size = size;
|
||||
}
|
||||
|
||||
uintptr_t
|
||||
queue_get_len(void)
|
||||
{
|
||||
return queue.len;
|
||||
}
|
||||
|
||||
int
|
||||
queue_is_full(void)
|
||||
{
|
||||
return (queue.len != queue.size);
|
||||
}
|
||||
|
||||
uint16_t
|
||||
queue_get_preload(void)
|
||||
{
|
||||
uint16_t ret = queue.preload;
|
||||
queue.preload = 0x0000;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
queue_has_preload(void)
|
||||
{
|
||||
return (queue.preload & FLAG_PRELOADED) ? 1 : 0;
|
||||
}
|
||||
|
||||
void
|
||||
queue_set_preload(void)
|
||||
{
|
||||
uint8_t byte;
|
||||
|
||||
if (queue.len > 0) {
|
||||
byte = queue_pop();
|
||||
queue.preload = ((uint16_t) byte) | FLAG_PRELOADED;
|
||||
} else
|
||||
fatal("Tried to preload with empty queue\n");
|
||||
}
|
||||
|
||||
void
|
||||
queue_push8(uint8_t byte)
|
||||
{
|
||||
if (queue.len < queue.size) {
|
||||
queue.q[queue.front] = byte;
|
||||
queue.front = (queue.front + 1) % queue.size;
|
||||
queue.len++;
|
||||
|
||||
if (queue.len == 3)
|
||||
queue.delay = DELAY_WRITE;
|
||||
else
|
||||
queue.delay = DELAY_NONE;
|
||||
} else
|
||||
fatal("Queue overrun\n");
|
||||
}
|
||||
|
||||
void
|
||||
queue_push16(uint16_t word)
|
||||
{
|
||||
queue_push8((uint8_t) (word & 0xff));
|
||||
queue_push8((uint8_t) ((word >> 8) & 0xff));
|
||||
}
|
||||
|
||||
uint8_t
|
||||
queue_pop(void)
|
||||
{
|
||||
uint8_t byte = 0xff;
|
||||
|
||||
if (queue.len > 0) {
|
||||
byte = queue.q[queue.back];
|
||||
|
||||
queue.back = (queue.back + 1) % queue.size;
|
||||
queue.len--;
|
||||
|
||||
if (queue.len >= 3)
|
||||
queue.delay = DELAY_READ;
|
||||
else
|
||||
queue.delay = DELAY_NONE;
|
||||
} else
|
||||
fatal("Queue underrun\n");
|
||||
|
||||
return byte;
|
||||
}
|
||||
|
||||
queue_delay_t
|
||||
queue_get_delay(void)
|
||||
{
|
||||
return queue.delay;
|
||||
}
|
||||
|
||||
void
|
||||
queue_flush(void)
|
||||
{
|
||||
memset(&queue, 0x00, sizeof(queue_t));
|
||||
|
||||
queue.delay = DELAY_NONE;
|
||||
}
|
||||
|
||||
void
|
||||
queue_init(void)
|
||||
{
|
||||
queue_flush();
|
||||
|
||||
if (is8086)
|
||||
queue_set_size(6);
|
||||
else
|
||||
queue_set_size(4);
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Prefetch queue implementation header.
|
||||
*
|
||||
* Authors: gloriouscow, <https://github.com/dbalsom>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2023 gloriouscow.
|
||||
* Copyright 2023 Miran Grca.
|
||||
*/
|
||||
#ifndef EMU_QUEUE_H
|
||||
#define EMU_QUEUE_H
|
||||
|
||||
typedef enum queue_delay_t {
|
||||
DELAY_READ,
|
||||
DELAY_WRITE,
|
||||
DELAY_NONE
|
||||
} queue_delay_t;
|
||||
|
||||
#define FLAG_PRELOADED 0x8000
|
||||
|
||||
extern void queue_set_size(uintptr_t size);
|
||||
extern uintptr_t queue_get_len(void);
|
||||
extern int queue_is_full(void);
|
||||
extern uint16_t queue_get_preload(void);
|
||||
extern int queue_has_preload(void);
|
||||
extern void queue_set_preload(void);
|
||||
extern void queue_push8(uint8_t byte);
|
||||
extern void queue_push16(uint16_t word);
|
||||
extern uint8_t queue_pop(void);
|
||||
extern queue_delay_t queue_get_delay(void);
|
||||
extern void queue_flush(void);
|
||||
|
||||
extern void queue_init(void);
|
||||
|
||||
#endif /*EMU_QUEUE_H*/
|
||||
@@ -36,6 +36,3 @@ endif()
|
||||
|
||||
add_subdirectory(softfloat)
|
||||
target_link_libraries(86Box softfloat)
|
||||
|
||||
add_subdirectory(808x)
|
||||
target_link_libraries(86Box 808x)
|
||||
|
||||
@@ -22,12 +22,12 @@
|
||||
#define EMU_NAME "86Box"
|
||||
#define EMU_NAME_W LSTR(EMU_NAME)
|
||||
|
||||
#define EMU_VERSION "4.0"
|
||||
#define EMU_VERSION "4.0.1"
|
||||
#define EMU_VERSION_W LSTR(EMU_VERSION)
|
||||
#define EMU_VERSION_EX "3.50" /* frozen due to IDE re-detection behavior on Windows */
|
||||
#define EMU_VERSION_MAJ 4
|
||||
#define EMU_VERSION_MIN 0
|
||||
#define EMU_VERSION_PATCH 0
|
||||
#define EMU_VERSION_PATCH 1
|
||||
|
||||
#define EMU_BUILD_NUM 0
|
||||
|
||||
|
||||
@@ -373,7 +373,7 @@ machine_at_ms5119_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/ms5119/A37E.ROM",
|
||||
ret = bios_load_linear("roms/machines/ms5119/A37EB.ROM",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
|
||||
@@ -3861,7 +3861,7 @@ const device_t sb_16_device = {
|
||||
};
|
||||
|
||||
const device_t sb_vibra16s_onboard_device = {
|
||||
.name = "Sound Blaster Vibra 16S (On-Board)",
|
||||
.name = "Sound Blaster ViBRA 16S (On-Board)",
|
||||
.internal_name = "sb_vibra16s_onboard",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.local = FM_YMF289B,
|
||||
@@ -3875,7 +3875,7 @@ const device_t sb_vibra16s_onboard_device = {
|
||||
};
|
||||
|
||||
const device_t sb_vibra16s_device = {
|
||||
.name = "Sound Blaster Vibra 16S",
|
||||
.name = "Sound Blaster ViBRA 16S",
|
||||
.internal_name = "sb_vibra16s",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.local = FM_YMF289B,
|
||||
@@ -3889,7 +3889,7 @@ const device_t sb_vibra16s_device = {
|
||||
};
|
||||
|
||||
const device_t sb_vibra16xv_device = {
|
||||
.name = "Sound Blaster Vibra 16XV",
|
||||
.name = "Sound Blaster ViBRA 16XV",
|
||||
.internal_name = "sb_vibra16xv",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.local = 0,
|
||||
@@ -3903,7 +3903,7 @@ const device_t sb_vibra16xv_device = {
|
||||
};
|
||||
|
||||
const device_t sb_vibra16c_onboard_device = {
|
||||
.name = "Sound Blaster Vibra 16C (On-Board)",
|
||||
.name = "Sound Blaster ViBRA 16C (On-Board)",
|
||||
.internal_name = "sb_vibra16c_onboard",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.local = 1,
|
||||
@@ -3917,7 +3917,7 @@ const device_t sb_vibra16c_onboard_device = {
|
||||
};
|
||||
|
||||
const device_t sb_vibra16c_device = {
|
||||
.name = "Sound Blaster Vibra 16C",
|
||||
.name = "Sound Blaster ViBRA 16C",
|
||||
.internal_name = "sb_vibra16c",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.local = 1,
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
# After a successful build, you can install the RPMs as follows:
|
||||
# sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms*
|
||||
|
||||
%global romver 4.0
|
||||
%global romver 4.0.1
|
||||
|
||||
Name: 86Box
|
||||
Version: 4.0
|
||||
Version: 4.0.1
|
||||
Release: 1%{?dist}
|
||||
Summary: Classic PC emulator
|
||||
License: GPLv2+
|
||||
@@ -121,5 +121,5 @@ popd
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Sat Aug 26 2023 Robert de Rooy <robert.de.rooy[AT]gmail.com> 4.0-1
|
||||
* Thu Oct 12 2023 Robert de Rooy <robert.de.rooy[AT]gmail.com> 4.0.1-1
|
||||
- Bump release
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="4.0" date="2023-02-28"/>
|
||||
<release version="4.0.1" date="2023-10-12"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "86box",
|
||||
"version-string": "4.0",
|
||||
"version-string": "4.0.1",
|
||||
"homepage": "https://86box.net/",
|
||||
"documentation": "https://86box.readthedocs.io/",
|
||||
"license": "GPL-2.0-or-later",
|
||||
|
||||
Reference in New Issue
Block a user