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

This commit is contained in:
OBattler
2025-12-23 03:44:30 +01:00
45 changed files with 1451 additions and 504 deletions

View File

@@ -36,7 +36,7 @@ if(MUNT_EXTERNAL)
endif()
project(86Box
VERSION 5.3
VERSION 5.4
DESCRIPTION "Emulator of x86-based systems"
HOMEPAGE_URL "https://86box.net"
LANGUAGES C CXX)

4
debian/changelog vendored
View File

@@ -1,5 +1,5 @@
86box (5.3) UNRELEASED; urgency=medium
86box (5.4) UNRELEASED; urgency=medium
* Bump release.
-- Jasmine Iwanek <jriwanek@gmail.com> Tue, 02 Dec 2025 15:24:58 +0100
-- Jasmine Iwanek <jriwanek@gmail.com> Tue, 23 Dec 2025 00:27:45 +0100

View File

@@ -192,11 +192,7 @@ codegen_allocator_clean_blocks(UNUSED(struct mem_block_t *block))
{
#if defined __ARM_EABI__ || defined __aarch64__ || defined _M_ARM64
while (1) {
# ifndef _MSC_VER
__clear_cache(&mem_block_alloc[block->offset], &mem_block_alloc[block->offset + MEM_BLOCK_SIZE]);
# else
FlushInstructionCache(GetCurrentProcess(), &mem_block_alloc[block->offset], MEM_BLOCK_SIZE);
# endif
if (block->next)
block = &mem_blocks[block->next - 1];
else

View File

@@ -446,16 +446,14 @@ typedef struct {
# define CPU_STATUS_MASK 0xffff0000
#endif
#ifdef _MSC_VER
# define COMPILE_TIME_ASSERT(expr) /*nada*/
#ifdef EXTREME_DEBUG
# define COMPILE_TIME_ASSERT(expr) typedef char COMP_TIME_ASSERT[(expr) ? 1 : 0];
#else
# ifdef EXTREME_DEBUG
# define COMPILE_TIME_ASSERT(expr) typedef char COMP_TIME_ASSERT[(expr) ? 1 : 0];
# else
# define COMPILE_TIME_ASSERT(expr) /*nada*/
# endif
# define COMPILE_TIME_ASSERT(expr) /*nada*/
#endif
COMPILE_TIME_ASSERT(sizeof(cpu_state_t) <= 128)
#define cpu_state_offset(MEMBER) ((uint8_t) ((uintptr_t) &cpu_state.MEMBER - (uintptr_t) &cpu_state - 128))

View File

@@ -33,9 +33,6 @@
#endif
#include "x87_timings.h"
#ifdef _MSC_VER
# include <intrin.h>
#endif
#include "x87_ops_conv.h"
#ifdef ENABLE_FPU_LOG
@@ -390,8 +387,7 @@ x87_compare(double a, double b)
if ((fpu_type < FPU_287XL) && !(cpu_state.npxc & 0x1000) && ((a == INFINITY) || (a == -INFINITY)) && ((b == INFINITY) || (b == -INFINITY)))
eb = ea;
# if !defined(_MSC_VER) || defined(__clang__)
/* Memory barrier, to force GCC to write to the input parameters
/* Memory barrier, to force GCC to write to the input parameters
* before the compare rather than after */
__asm volatile(""
:
@@ -406,17 +402,7 @@ x87_compare(double a, double b)
"fnstsw %0\n"
: "=m"(result)
: "m"(ea), "m"(eb));
# else
_ReadWriteBarrier();
_asm
{
fld eb
fld ea
fclex
fcompp
fnstsw result
}
# endif
return result & (FPU_SW_C0 | FPU_SW_C2 | FPU_SW_C3);
#else
@@ -451,7 +437,6 @@ x87_ucompare(double a, double b)
#ifdef X87_INLINE_ASM
uint32_t result;
# if !defined(_MSC_VER) || defined(__clang__)
/* Memory barrier, to force GCC to write to the input parameters
* before the compare rather than after */
__asm volatile(""
@@ -467,17 +452,6 @@ x87_ucompare(double a, double b)
"fnstsw %0\n"
: "=m"(result)
: "m"(a), "m"(b));
# else
_ReadWriteBarrier();
_asm
{
fld b
fld a
fclex
fcompp
fnstsw result
}
# endif
return result & (FPU_SW_C0 | FPU_SW_C2 | FPU_SW_C3);
#else

View File

@@ -33,7 +33,7 @@ typedef struct cart_t {
uint32_t base;
} cart_t;
char cart_fns[2][512];
char cart_fns[2][MAX_IMAGE_PATH_LEN];
char *cart_image_history[2][CART_IMAGE_HISTORY];
static cart_t carts[2];

View File

@@ -43,7 +43,7 @@
pc_cassette_t *cassette;
char cassette_fname[512];
char cassette_fname[MAX_IMAGE_PATH_LEN];
char cassette_mode[512];
char * cassette_image_history[CASSETTE_IMAGE_HISTORY];
unsigned long cassette_pos;

View File

@@ -104,7 +104,7 @@ static fdd_pending_op_t fdd_pending[FDD_NUM];
/* BIOS boot status tracking */
static bios_boot_status_t bios_boot_status = BIOS_BOOT_POST;
char floppyfns[FDD_NUM][512];
char floppyfns[FDD_NUM][MAX_IMAGE_PATH_LEN];
char *fdd_image_history[FDD_NUM][FLOPPY_IMAGE_HISTORY];
pc_timer_t fdd_poll_time[FDD_NUM];

View File

@@ -385,7 +385,7 @@ fdd_audio_load_profiles(void)
}
/* Load timing configurations */
profile->total_tracks = ini_section_get_int(section, "total_tracks", 80);
profile->total_tracks = ini_section_get_int(section, "total_tracks", 0);
audio_profile_count++;
}
@@ -553,7 +553,7 @@ load_profile_samples(int profile_id)
}
}
}
}
}
}
static drive_audio_samples_t *

View File

@@ -18,11 +18,7 @@
#include <string.h>
#include <stdlib.h>
#include <wchar.h>
#ifndef _MSC_VER
#include <unistd.h>
#else
#include <io.h>
#endif
#define HAVE_STDARG_H
#include <86box/86box.h>
#include <86box/timer.h>

View File

@@ -47,7 +47,7 @@
/* Recently used images */
#define MAX_PREV_IMAGES 10
#define MAX_IMAGE_PATH_LEN 2048
#define MAX_IMAGE_PATH_LEN 4096
/* Max UUID Length */
#define MAX_UUID_LEN 64

View File

@@ -21,7 +21,7 @@ extern "C" {
#define CART_IMAGE_HISTORY 10
extern char cart_fns[2][512];
extern char cart_fns[2][MAX_IMAGE_PATH_LEN];
extern char *cart_image_history[2][CART_IMAGE_HISTORY];
extern void cart_load(int drive, char *fn);

View File

@@ -157,7 +157,7 @@ void pc_cas_advance(pc_cassette_t *cas);
extern pc_cassette_t *cassette;
extern char cassette_fname[512];
extern char cassette_fname[MAX_IMAGE_PATH_LEN];
extern char cassette_mode[512];
extern char * cassette_image_history[CASSETTE_IMAGE_HISTORY];
extern unsigned long cassette_pos;

View File

@@ -323,8 +323,8 @@ typedef struct cdrom {
void *priv;
char image_path[1024];
char prev_image_path[1280];
char image_path[MAX_IMAGE_PATH_LEN];
char prev_image_path[MAX_IMAGE_PATH_LEN + 256];
uint32_t sound_on;
uint32_t cdrom_capacity;

View File

@@ -96,7 +96,7 @@ typedef struct DRIVE {
} DRIVE;
extern DRIVE drives[FDD_NUM];
extern char floppyfns[FDD_NUM][512];
extern char floppyfns[FDD_NUM][MAX_IMAGE_PATH_LEN];
extern char *fdd_image_history[FDD_NUM][FLOPPY_IMAGE_HISTORY];
extern pc_timer_t fdd_poll_time[FDD_NUM];
extern int ui_writeprot[FDD_NUM];

View File

@@ -161,7 +161,7 @@ typedef struct hard_disk_t {
void *priv;
char fn[1024]; /* Name of current image file */
char fn[MAX_IMAGE_PATH_LEN]; /* Name of current image file */
/* Differential VHD parent file */
char vhd_parent[1280];

View File

@@ -113,8 +113,8 @@ typedef struct mo_drive_t {
FILE *fp;
void *priv;
char image_path[1024];
char prev_image_path[1024];
char image_path[MAX_IMAGE_PATH_LEN];
char prev_image_path[MAX_IMAGE_PATH_LEN + 256];
char *image_history[MO_IMAGE_HISTORY];

View File

@@ -69,19 +69,10 @@ extern int strnicmp(const char *s1, const char *s2, size_t n);
# define fseeko64 fseeko
# define ftello64 ftello
# define off64_t off_t
#elif defined(_MSC_VER)
// # define fopen64 fopen
# define fseeko64 _fseeki64
# define ftello64 _ftelli64
# define off64_t off_t
#endif
#ifdef _MSC_VER
# define UNUSED(arg) arg
#else
/* A hack (GCC-specific?) to allow us to ignore unused parameters. */
# define UNUSED(arg) __attribute__((unused)) arg
#endif
/* Return the size (in wchar's) of a wchar_t array. */
#define sizeof_w(x) (sizeof((x)) / sizeof(wchar_t))
@@ -90,28 +81,23 @@ extern int strnicmp(const char *s1, const char *s2, size_t n);
# include <atomic>
# define atomic_flag_t std::atomic_flag
# define atomic_bool_t std::atomic_bool
extern "C" {
#else
# include <stdatomic.h>
# define atomic_flag_t atomic_flag
# define atomic_bool_t atomic_bool
#endif
#if defined(_MSC_VER)
# define ssize_t intptr_t
#endif
#ifdef _MSC_VER
# define fallthrough do {} while (0) /* fallthrough */
#if __has_attribute(fallthrough)
# define fallthrough __attribute__((fallthrough))
#else
# if __has_attribute(fallthrough)
# define fallthrough __attribute__((fallthrough))
# else
# if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
# endif
# define fallthrough do {} while (0) /* fallthrough */
# if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
# endif
# define fallthrough do {} while (0) /* fallthrough */
#endif
#endif
/* Global variables residing in the platform module. */

View File

@@ -16,18 +16,16 @@
#define EMU_PLAT_FALLTHROUGH_H
#ifndef EMU_PLAT_H
#ifdef _MSC_VER
# define fallthrough do {} while (0) /* fallthrough */
#if __has_attribute(fallthrough)
# define fallthrough __attribute__((fallthrough))
#else
# if __has_attribute(fallthrough)
# define fallthrough __attribute__((fallthrough))
# else
# if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
# endif
# define fallthrough do {} while (0) /* fallthrough */
# if __has_attribute(__fallthrough__)
# define fallthrough __attribute__((__fallthrough__))
# endif
# define fallthrough do {} while (0) /* fallthrough */
#endif
#endif
#endif /*EMU_PLAT_FALLTHROUGH_H*/

View File

@@ -19,12 +19,9 @@
#define EMU_PLAT_UNUSED_H
#ifndef EMU_PLAT_H
#ifdef _MSC_VER
# define UNUSED(arg) arg
#else
/* A hack (GCC-specific?) to allow us to ignore unused parameters. */
# define UNUSED(arg) __attribute__((unused)) arg
#endif
#endif
#endif
#endif /*EMU_PLAT_UNUSED_H*/

View File

@@ -91,8 +91,8 @@ typedef struct rdisk_drive_t {
FILE *fp;
void *priv;
char image_path[1024];
char prev_image_path[1024];
char image_path[MAX_IMAGE_PATH_LEN];
char prev_image_path[MAX_IMAGE_PATH_LEN + 256];
char *image_history[RDISK_IMAGE_HISTORY];

View File

@@ -122,6 +122,9 @@ extern const device_t adlib_device;
extern const device_t adlib_mca_device;
extern const device_t adgold_device;
/* Analog Devices AD1816 */
extern const device_t ad1816_device;
/* Aztech Sound Galaxy 16 */
extern const device_t azt2316a_device;
extern const device_t acermagic_s20_device;

View File

@@ -8,11 +8,7 @@
#ifndef VIDEO_VOODOO_CODEGEN_X86_64_H
#define VIDEO_VOODOO_CODEGEN_X86_64_H
#ifdef _MSC_VER
# include <intrin.h>
#else
# include <xmmintrin.h>
#endif
#include <xmmintrin.h>
#define BLOCK_NUM 8
#define BLOCK_MASK (BLOCK_NUM - 1)

View File

@@ -8,11 +8,7 @@
#ifndef VIDEO_VOODOO_CODEGEN_X86_H
#define VIDEO_VOODOO_CODEGEN_X86_H
#ifdef _MSC_VER
# include <intrin.h>
#else
# include <xmmintrin.h>
#endif
#include <xmmintrin.h>
#define BLOCK_NUM 8
#define BLOCK_MASK (BLOCK_NUM - 1)

View File

@@ -33,9 +33,9 @@
#include <stdint.h>
#include <stdio.h>
#include <time.h>
#include <86box/86box.h>
#include <86box/timer.h>
#include <86box/fdd.h>
#include <86box/86box.h>
#include <86box/device.h>
#include <86box/fdc.h>
#include <86box/fdc_ext.h>

View File

@@ -52,9 +52,7 @@
#include <stdlib.h>
#include <wchar.h>
#include <time.h>
#ifndef _MSC_VER
#include <sys/time.h>
#endif
#include <stdbool.h>
#define HAVE_STDARG_H
#include <86box/86box.h>

View File

@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <wchar.h>
#define HAVE_STDARG_H
#include <86box/86box.h>
#include <86box/scsi_device.h>
#include <86box/cdrom.h>
#include <86box/log.h>

File diff suppressed because it is too large Load Diff

View File

@@ -166,13 +166,13 @@ msgid "Generic RGBI color monitor"
msgstr "Monitor a colores RGBI genérico"
msgid "&Amber monitor"
msgstr "Monitor Ámb&ar"
msgstr "Monitor ámb&ar"
msgid "&Green monitor"
msgstr "Monitor &Verde"
msgstr "Monitor &verde"
msgid "&White monitor"
msgstr "Monitor &Blanco"
msgstr "Monitor &blanco"
msgid "Grayscale &conversion type"
msgstr "&Conversión a grises"
@@ -283,10 +283,10 @@ msgid "Preferences"
msgstr "Preferencias"
msgid "Sound Gain"
msgstr "Ganancia de Sonido"
msgstr "Ganancia de sonido"
msgid "New Image"
msgstr "Nueva Imagen"
msgstr "Nueva imagen"
msgid "Settings"
msgstr "Configuraciones"
@@ -754,10 +754,10 @@ msgid "Parallel ports:"
msgstr "Puertos paralelos:"
msgid "Storage controllers"
msgstr "Controladoras de Almacenamiento"
msgstr "Controladoras de almacenamiento"
msgid "Hard disks"
msgstr "Discos Duros"
msgstr "Discos duros"
msgid "Disks:"
msgstr "Discos:"
@@ -991,7 +991,7 @@ msgid "Hardware not available"
msgstr "Equipo no disponible"
msgid "Make sure %1 is installed and that you are on a %1-compatible network connection."
msgstr "Asegúrate de que %1 está instalado y de que estás en una conexión de red compatible con %1."
msgstr "Asegúree de que %1 está instalado y de que estás en una conexión de red compatible con %1."
msgid "Invalid configuration"
msgstr "Configuración inválida"
@@ -1018,7 +1018,7 @@ msgid "CD-ROM images"
msgstr "Imágenes de CD-ROM"
msgid "%1 Device Configuration"
msgstr "%1 configuración de dispositivo"
msgstr "Configuración de dispositivo %1"
msgid "Monitor in sleep mode"
msgstr "Monitor en modo ahorro"
@@ -1192,7 +1192,7 @@ msgid "System location:"
msgstr "Ubicación del sistema:"
msgid "System name and location"
msgstr "Nombre y ubicaciónd el sistema"
msgstr "Nombre y ubicación del sistema"
msgid "Enter the name of the system and choose the location"
msgstr "Escribir el nombre del sistema y escoger la ubicación"
@@ -1363,10 +1363,10 @@ msgid "Custom (large)…"
msgstr "A medida (grande)…"
msgid "Add New Hard Disk"
msgstr "Añadir Nuevo Disco Duro"
msgstr "Añadir nuevo disco duro"
msgid "Add Existing Hard Disk"
msgstr "Añadir Disco Duro Existente"
msgstr "Añadir disco duro existente"
msgid "HDI disk images cannot be larger than 4 GB."
msgstr "Las imágenes de disco HDI no pueden superar los 4 GB."
@@ -1375,7 +1375,7 @@ msgid "Disk images cannot be larger than 127 GB."
msgstr "Las imágenes de disco no pueden superar los 127 GB."
msgid "Hard disk images"
msgstr "Imágenes de Disco Duro"
msgstr "Imágenes de disco duro"
msgid "Unable to read file"
msgstr "No se pudo leer el archivo"

View File

@@ -19,7 +19,7 @@ msgid "&Keyboard requires capture"
msgstr "C&apturer le clavier"
msgid "&Right CTRL is left ALT"
msgstr "CTRL &Droite devient ALT Gauche"
msgstr "CTRL &droite devient ALT gauche"
msgid "&Hard reset"
msgstr "&Hard reset"
@@ -28,7 +28,7 @@ msgid "&Ctrl+Alt+Del"
msgstr "&Ctrl+Alt+Suppr"
msgid "Ctrl+Alt+&Esc"
msgstr "Ctrl+Alt+&Esc"
msgstr "Ctrl+A&lt+Échap"
msgid "&Pause"
msgstr "&Pause"
@@ -79,7 +79,7 @@ msgid "Force &4:3 display ratio"
msgstr "Forcer le ratio &4:3"
msgid "&Window scale factor"
msgstr "Facteur d'&Echelle"
msgstr "Facteur d'éch&elle"
msgid "&0.5x"
msgstr "&0.5x"
@@ -112,7 +112,7 @@ msgid "&8x"
msgstr "&8x"
msgid "Fi&lter method"
msgstr "Mét&hode de Filtre"
msgstr "Mét&hode de filtre"
msgid "&Nearest"
msgstr "&Plus proche"
@@ -139,16 +139,16 @@ msgid "&Square pixels (Keep ratio)"
msgstr "Pixels &carrés (Conserver le ratio)"
msgid "&Integer scale"
msgstr "&Echelle entière"
msgstr "Éch&elle entière"
msgid "4:&3 Integer scale"
msgstr "Echelle entière 4:&3"
msgstr "Échelle entière 4:&3"
msgid "EGA/(S)&VGA settings"
msgstr "Réglages EGA/(S)&VGA"
msgid "&Inverted VGA monitor"
msgstr "Moniteur VGA &Inversé"
msgstr "Moniteur VGA &inversé"
msgid "VGA screen &type"
msgstr "&Type d'écran VGA"
@@ -160,22 +160,22 @@ msgid "RGB (no brown)"
msgstr "RVB (sans brun)"
msgid "&RGB Grayscale"
msgstr "Niveau de Gris &RVB"
msgstr "Niveau de gris &RVB"
msgid "Generic RGBI color monitor"
msgstr "Moniteur couleur RVB générique"
msgid "&Amber monitor"
msgstr "Moniteur &Ambre"
msgstr "Moniteur &ambre"
msgid "&Green monitor"
msgstr "Moniteur &Vert"
msgstr "Moniteur &vert"
msgid "&White monitor"
msgstr "Moniteur &Blanc"
msgstr "Moniteur &blanc"
msgid "Grayscale &conversion type"
msgstr "Type de &conversion du niveau de Gris"
msgstr "Type de &conversion du niveau de gris"
msgid "BT&601 (NTSC/PAL)"
msgstr "BT&601 (NTSC/PAL)"
@@ -220,7 +220,7 @@ msgid "Enable &Discord integration"
msgstr "Activer l'intégration &Discord"
msgid "Sound &gain…"
msgstr "&Gain Son…"
msgstr "&Gain son…"
msgid "Begin trace"
msgstr "Démarrer traces"
@@ -235,16 +235,16 @@ msgid "&Documentation…"
msgstr "&Documentation…"
msgid "&About 86Box…"
msgstr "&A Propos de 86Box…"
msgstr "À &propos de 86Box…"
msgid "&New image…"
msgstr "&Nouvelle image…"
msgid "&Existing image…"
msgstr "Image &Existante…"
msgstr "Image &existante…"
msgid "Existing image (&Write-protected)…"
msgstr "Image Existante (&Lecture seule)…"
msgstr "Image existante (&Lecture seule)…"
msgid "&Record"
msgstr "En&registrer"
@@ -256,7 +256,7 @@ msgid "&Rewind to the beginning"
msgstr "&Revenir au debut"
msgid "&Fast forward to the end"
msgstr "Avance rapide jusqu'à la &Fin"
msgstr "Avance rapide jusqu'à la &fin"
msgid "E&ject"
msgstr "É&jecter"
@@ -595,7 +595,7 @@ msgid "Type:"
msgstr "Type :"
msgid "Image Format:"
msgstr "Format Image :"
msgstr "Format image :"
msgid "Block Size:"
msgstr "Taille du bloc :"
@@ -1300,7 +1300,7 @@ msgid "Warning"
msgstr "Avertissement"
msgid "&Kill"
msgstr "Fo&rcer Extinction"
msgstr "Fo&rcer extinction"
msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?"
msgstr "La fermeture forcée d'une machine virtuelle peut entraîner une perte de données. Ne procédez ainsi que si le processus 86Box est bloqué.\n\nVoulez-vous vraiment fermer la machine virtuelle « %1 » ?"
@@ -1459,10 +1459,10 @@ msgid "Differencing VHD (.vhd)"
msgstr "VHD différentiel (.vhd)"
msgid "Large blocks (2 MB)"
msgstr "Grands Blocs (2 Mo)"
msgstr "Grands blocs (2 Mo)"
msgid "Small blocks (512 KB)"
msgstr "Petits Blocs (512 Ko)"
msgstr "Petits blocs (512 Ko)"
msgid "VHD files"
msgstr "Fichiers VHD"
@@ -1624,10 +1624,10 @@ msgid "List of MCA devices:"
msgstr "Liste des dispositifs MCA :"
msgid "&Tablet tool"
msgstr "Outil Tablette"
msgstr "Outil tablette"
msgid "About &Qt"
msgstr "A propos de &Qt"
msgstr "À propos de &Qt"
msgid "&MCA devices…"
msgstr "Dispositifs MCA…"
@@ -1684,7 +1684,7 @@ msgid "Use target framerate:"
msgstr "Utiliser le taux de rafraîchissement cible :"
msgid " fps"
msgstr " Images par seconde"
msgstr " images par seconde"
msgid "VSync"
msgstr "VSync"
@@ -2707,7 +2707,7 @@ msgid "Ask for confirmation before saving settings"
msgstr "Demander confirmation avant de sauvegarder les réglages"
msgid "Ask for confirmation before hard resetting"
msgstr "Demander confirmation avant Hard Reset"
msgstr "Demander confirmation avant hard reset"
msgid "Ask for confirmation before quitting"
msgstr "Demander confirmation avant de quitter"
@@ -2743,7 +2743,7 @@ msgid "Shader Manager"
msgstr "Gestionnaire de shader"
msgid "Shader Configuration"
msgstr "Configuration Shader"
msgstr "Configuration du shader"
msgid "Add"
msgstr "Ajouter"

View File

@@ -17,6 +17,7 @@
#include <cstdint>
extern "C" {
#include <86box/86box.h>
#include <86box/hdd.h>
#include <86box/scsi.h>
#include <86box/cdrom.h>

View File

@@ -17,9 +17,9 @@
#include "qt_machinestatus.hpp"
extern "C" {
#include <86box/86box.h>
#include <86box/hdd.h>
#include <86box/timer.h>
#include <86box/86box.h>
#include <86box/device.h>
#include <86box/cartridge.h>
#include <86box/cassette.h>

View File

@@ -668,7 +668,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
else
fi.setFile(fn);
if (!fi.fileName().isEmpty() && (fn.left(5) == "wp://")) {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn.right(fn.length() - 5);
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : "🔒 " + fn.right(fn.length() - 5);
imageHistoryUpdatePos->setIcon(getIconWithIndicator(menu_icon, pixmap_size, QIcon::Normal, WriteProtected));
} else {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn;
@@ -696,7 +696,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
else
fi.setFile(fn);
if (!fi.fileName().isEmpty() && (fn.left(5) == "wp://")) {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn.right(fn.length() - 5);
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : "🔒 " + fn.right(fn.length() - 5);
imageHistoryUpdatePos->setIcon(getIconWithIndicator(menu_icon, pixmap_size, QIcon::Normal, WriteProtected));
} else {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn;
@@ -735,7 +735,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
else
fi.setFile(fn);
if (!fi.fileName().isEmpty() && (fn.left(5) == "wp://")) {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn.right(fn.length() - 5);
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : "🔒 " + fn.right(fn.length() - 5);
imageHistoryUpdatePos->setIcon(getIconWithIndicator(menu_icon, pixmap_size, QIcon::Normal, WriteProtected));
} else {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn;
@@ -754,7 +754,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
else
fi.setFile(fn);
if (!fi.fileName().isEmpty() && (fn.left(5) == "wp://")) {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn.right(fn.length() - 5);
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : "🔒 " + fn.right(fn.length() - 5);
imageHistoryUpdatePos->setIcon(getIconWithIndicator(menu_icon, pixmap_size, QIcon::Normal, WriteProtected));
} else {
menu_item_name = fi.fileName().isEmpty() ? tr("Reload previous image") : fn;

View File

@@ -19,9 +19,13 @@
#include <cstdlib>
#include <cstring>
extern "C" {
#include "86box/86box.h"
#include "86box/hdd.h"
#include "86box/scsi.h"
#include "86box/cdrom.h"
}
#include "qt_settings_bus_tracking.hpp"
SettingsBusTracking::SettingsBusTracking()

View File

@@ -18,6 +18,7 @@
#include "ui_qt_settingsotherremovable.h"
extern "C" {
#include <86box/86box.h>
#include <86box/timer.h>
#include <86box/scsi_device.h>
#include <86box/mo.h>

View File

@@ -149,11 +149,11 @@ VMManagerDetails::VMManagerDetails(QWidget *parent)
cadButton->setEnabled(false);
cadButton->setToolTip(tr("Ctrl+Alt+Del"));
ui->toolButtonHolder->layout()->addWidget(configureButton);
ui->toolButtonHolder->layout()->addWidget(startPauseButton);
ui->toolButtonHolder->layout()->addWidget(resetButton);
ui->toolButtonHolder->layout()->addWidget(stopButton);
ui->toolButtonHolder->layout()->addWidget(startPauseButton);
ui->toolButtonHolder->layout()->addWidget(cadButton);
ui->toolButtonHolder->layout()->addWidget(configureButton);
ui->notesTextEdit->setEnabled(false);

View File

@@ -31,6 +31,7 @@ add_library(snd OBJECT
snd_ps1.c
snd_adlib.c
snd_adlibgold.c
snd_ad1816.c
snd_ad1848.c
snd_audiopci.c
snd_azt2316a.c

1000
src/sound/snd_ad1816.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -137,6 +137,7 @@ static const SOUND_CARD sound_cards[] = {
{ &adlib_device },
/* ISA16 */
{ &acermagic_s20_device },
{ &ad1816_device },
{ &azt2316a_device },
{ &azt1605_device },
{ &sb_goldfinch_device },

View File

@@ -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 5.3
%global romver 5.4
Name: 86Box
Version: 5.3
Version: 5.4
Release: 1%{?dist}
Summary: Classic PC emulator
License: GPLv2+
@@ -121,5 +121,5 @@ popd
%{_datadir}/%{name}/roms
%changelog
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.3-1
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.4-1
- Bump release

View File

@@ -11,7 +11,7 @@
</categories>
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
<releases>
<release version="5.3" date="2025-12-02"/>
<release version="5.4" date="2025-12-23"/>
</releases>
<content_rating type="oars-1.1" />
<description>

View File

@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <wchar.h>
#define HAVE_STDARG_H
#include <86box/86box.h>
#include <86box/scsi_device.h>
#include <86box/cdrom.h>
#include <86box/log.h>

View File

@@ -51,16 +51,10 @@ rdtsc(void)
#if defined(__x86_64__)
unsigned int hi;
unsigned int lo;
# ifdef _MSC_VER
__asm {
rdtsc
mov hi, edx ; EDX:EAX is already standard return!!
mov lo, eax
}
# else
__asm__ __volatile__("rdtsc"
: "=a"(lo), "=d"(hi));
# endif
return ((unsigned long long) lo) | (((unsigned long long) hi) << 32);
#else
return time(NULL);

View File

@@ -91,7 +91,7 @@ svga_render_blank(svga_t *svga)
line_width -= svga->x_add;
}
if (((svga->hdisp + svga->scrollcache) > 0) && (line_width >= 0))
if ((line_ptr != NULL) && ((svga->hdisp + svga->scrollcache) > 0) && (line_width >= 0))
memset(line_ptr, 0, line_width);
}
@@ -106,7 +106,7 @@ svga_render_overscan_left(svga_t *svga)
uint32_t *line_ptr = svga->monitor->target_buffer->line[svga->displine + svga->y_add];
if (svga->x_add >= 0) for (int i = 0; i < svga->x_add; i++)
if ((line_ptr != NULL) && (svga->x_add >= 0)) for (int i = 0; i < svga->x_add; i++)
*line_ptr++ = svga->overscan_color;
}
@@ -121,10 +121,15 @@ svga_render_overscan_right(svga_t *svga)
if (svga->scrblank || (svga->hdisp <= 0))
return;
uint32_t *line_ptr = &svga->monitor->target_buffer->line[svga->displine + svga->y_add][svga->x_add + svga->hdisp];
uint32_t *line_ptr = svga->monitor->target_buffer->line[svga->displine + svga->y_add];
right = overscan_x - svga->left_overscan;
for (int i = 0; i < right; i++)
*line_ptr++ = svga->overscan_color;
if (line_ptr != NULL) {
line_ptr += svga->x_add + svga->hdisp;
for (int i = 0; i < right; i++)
*line_ptr++ = svga->overscan_color;
}
}
void

View File

@@ -1,6 +1,6 @@
{
"name": "86box",
"version-string": "5.3",
"version-string": "5.4",
"homepage": "https://86box.net/",
"documentation": "https://86box.readthedocs.io/",
"license": "GPL-2.0-or-later",