mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 18:08:20 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
74
.github/workflows/cmake_windows_msys2.yml
vendored
74
.github/workflows/cmake_windows_msys2.yml
vendored
@@ -18,7 +18,6 @@ on:
|
||||
- cmake/**
|
||||
- "**/CMakeLists.txt"
|
||||
- "CMakePresets.json"
|
||||
- .github/workflows/**
|
||||
- .github/workflows/cmake_windows_msys2.yml
|
||||
- vcpkg.json
|
||||
- "!**/Makefile*"
|
||||
@@ -26,9 +25,9 @@ on:
|
||||
jobs:
|
||||
|
||||
msys2:
|
||||
name: "${{ matrix.ui.name }}, ${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}"
|
||||
name: "${{ matrix.build.name }}, ${{ matrix.dynarec.name }}, ${{ matrix.environment.msystem }}"
|
||||
|
||||
runs-on: windows-2022
|
||||
runs-on: ${{ matrix.environment.runner }}
|
||||
|
||||
env:
|
||||
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
|
||||
@@ -41,47 +40,38 @@ jobs:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
build:
|
||||
# - name: Regular
|
||||
# preset: regular
|
||||
- name: Debug
|
||||
- name: Dev Debug
|
||||
preset: dev_debug
|
||||
slug: -Debug
|
||||
slug: -Dev-Debug
|
||||
- name: Dev
|
||||
preset: development
|
||||
slug: -Dev
|
||||
dynarec:
|
||||
- name: ODR
|
||||
new: off
|
||||
slug: -ODR
|
||||
- name: NDR
|
||||
new: on
|
||||
slug: -NDR
|
||||
ui:
|
||||
- name: Qt GUI
|
||||
qt: on
|
||||
static: on
|
||||
slug: -Qt
|
||||
packages: >-
|
||||
qt5-static:p
|
||||
vulkan-headers:p
|
||||
environment:
|
||||
# - msystem: MSYS
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
- msystem: MINGW64
|
||||
prefix: mingw-w64-x86_64
|
||||
toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# - msystem: CLANG64
|
||||
# prefix: mingw-w64-clang-x86_64
|
||||
# toolchain: ./cmake/llvm-win32-x86_64.cmake
|
||||
# - msystem: UCRT64
|
||||
# prefix: mingw-w64-ucrt-x86_64
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
slug: "-64"
|
||||
runner: windows-2022
|
||||
- msystem: CLANGARM64
|
||||
toolchain: ./cmake/flags-gcc-aarch64.cmake
|
||||
slug: -arm64
|
||||
runner: windows-11-arm
|
||||
exclude:
|
||||
- dynarec:
|
||||
new: off
|
||||
environment:
|
||||
msystem: CLANGARM64
|
||||
|
||||
steps:
|
||||
- name: Prepare MSYS2 environment
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
release: false
|
||||
release: true
|
||||
update: true
|
||||
msystem: ${{ matrix.environment.msystem }}
|
||||
pacboy: >-
|
||||
@@ -98,15 +88,17 @@ jobs:
|
||||
libslirp:p
|
||||
fluidsynth:p
|
||||
libserialport:p
|
||||
${{ matrix.ui.packages }}
|
||||
qt5-static:p
|
||||
vulkan-headers:p
|
||||
openmp:p
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
- name: Install sonar-scanner and build-wrapper
|
||||
uses: SonarSource/sonarcloud-github-c-cpp@v3
|
||||
# - name: Install sonar-scanner and build-wrapper
|
||||
# uses: SonarSource/sonarcloud-github-c-cpp@v3
|
||||
|
||||
- name: Configure CMake
|
||||
run: >-
|
||||
@@ -114,20 +106,20 @@ jobs:
|
||||
--toolchain ${{ matrix.environment.toolchain }}
|
||||
-D NEW_DYNAREC=${{ matrix.dynarec.new }}
|
||||
-D CMAKE_INSTALL_PREFIX=./build/artifacts
|
||||
-D QT=${{ matrix.ui.qt }}
|
||||
-D STATIC_BUILD=${{ matrix.ui.static }}
|
||||
|
||||
# - name: Build
|
||||
# run: |
|
||||
# .sonar/build-wrapper-win-x86/build-wrapper-win-x86-64.exe --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
.sonar/build-wrapper-win-x86/build-wrapper-win-x86-64.exe --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build
|
||||
run: cmake --build build
|
||||
|
||||
- name: Run sonar-scanner
|
||||
if: 0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: |
|
||||
.sonar/sonar-scanner-5.0.1.3006-windows/bin/sonar-scanner.bat --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
|
||||
# - name: Run sonar-scanner
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
# run: |
|
||||
# .sonar/sonar-scanner-5.0.1.3006-windows/bin/sonar-scanner.bat --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
|
||||
|
||||
- name: Generate package
|
||||
run: cmake --install build
|
||||
@@ -135,5 +127,5 @@ jobs:
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}'
|
||||
name: '86Box${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-Windows${{ matrix.environment.slug }}-gha${{ github.run_number }}'
|
||||
path: build/artifacts/**
|
||||
|
||||
@@ -36,7 +36,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 4.3
|
||||
VERSION 5.0
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -1,5 +1,5 @@
|
||||
86box (4.3) UNRELEASED; urgency=medium
|
||||
86box (5.0) UNRELEASED; urgency=medium
|
||||
|
||||
* Bump release.
|
||||
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Wed, 13 Nov 2024 06:31:46 +0100
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Wed, 16 Apr 2025 22:08:04 +0200
|
||||
|
||||
@@ -2274,13 +2274,73 @@ cdrom_read_disc_info_toc(cdrom_t *dev, uint8_t *b,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
cdrom_msf_to_lba(const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const uint8_t vendor_type)
|
||||
{
|
||||
int pos = sector;
|
||||
uint32_t lba;
|
||||
|
||||
if ((cdrom_sector_type & 0x0f) >= 0x08) {
|
||||
mult = cdrom_sector_type >> 4;
|
||||
pos /= mult;
|
||||
}
|
||||
|
||||
if (ismsf) {
|
||||
const int m = (pos >> 16) & 0xff;
|
||||
const int s = (pos >> 8) & 0xff;
|
||||
const int f = pos & 0xff;
|
||||
|
||||
lba = MSFtoLBA(m, s, f) - 150;
|
||||
} else {
|
||||
switch (vendor_type) {
|
||||
case 0x00:
|
||||
lba = pos;
|
||||
break;
|
||||
case 0x40: {
|
||||
const int m = bcd2bin((pos >> 24) & 0xff);
|
||||
const int s = bcd2bin((pos >> 16) & 0xff);
|
||||
const int f = bcd2bin((pos >> 8) & 0xff);
|
||||
|
||||
lba = MSFtoLBA(m, s, f) - 150;
|
||||
break;
|
||||
} case 0x80:
|
||||
lba = bcd2bin((pos >> 24) & 0xff);
|
||||
break;
|
||||
/* Never used values but the compiler complains. */
|
||||
default:
|
||||
lba = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return lba;
|
||||
}
|
||||
|
||||
int
|
||||
cdrom_is_track_audio(cdrom_t *dev, const int sector,
|
||||
const int ismsf, int cdrom_sector_type,
|
||||
const uint8_t vendor_type)
|
||||
{
|
||||
int audio = 0;
|
||||
uint32_t lba = cdrom_msf_to_lba(sector, ismsf,
|
||||
cdrom_sector_type, vendor_type);
|
||||
|
||||
if (dev->ops->get_track_type)
|
||||
audio = dev->ops->get_track_type(dev->local, lba);
|
||||
|
||||
audio &= CD_TRACK_AUDIO;
|
||||
|
||||
return audio;
|
||||
}
|
||||
|
||||
int
|
||||
cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const int cdrom_sector_flags,
|
||||
int *len, const uint8_t vendor_type)
|
||||
{
|
||||
int pos = sector;
|
||||
int ret = 0;
|
||||
int pos = sector;
|
||||
int ret = 0;
|
||||
const int old_type = cdrom_sector_type;
|
||||
|
||||
if ((cdrom_sector_type & 0x0f) >= 0x08) {
|
||||
mult = cdrom_sector_type >> 4;
|
||||
@@ -2298,38 +2358,12 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, const int sector, const int
|
||||
uint8_t *temp_b;
|
||||
uint8_t *b = temp_b = buffer;
|
||||
int audio = 0;
|
||||
uint32_t lba;
|
||||
uint32_t lba = cdrom_msf_to_lba(sector, ismsf,
|
||||
old_type, vendor_type);
|
||||
int mode2 = 0;
|
||||
|
||||
*len = 0;
|
||||
|
||||
if (ismsf) {
|
||||
const int m = (pos >> 16) & 0xff;
|
||||
const int s = (pos >> 8) & 0xff;
|
||||
const int f = pos & 0xff;
|
||||
|
||||
lba = MSFtoLBA(m, s, f) - 150;
|
||||
} else {
|
||||
switch (vendor_type) {
|
||||
case 0x00:
|
||||
lba = pos;
|
||||
break;
|
||||
case 0x40: {
|
||||
const int m = bcd2bin((pos >> 24) & 0xff);
|
||||
const int s = bcd2bin((pos >> 16) & 0xff);
|
||||
const int f = bcd2bin((pos >> 8) & 0xff);
|
||||
|
||||
lba = MSFtoLBA(m, s, f) - 150;
|
||||
break;
|
||||
} case 0x80:
|
||||
lba = bcd2bin((pos >> 24) & 0xff);
|
||||
break;
|
||||
/* Never used values but the compiler complains. */
|
||||
default:
|
||||
lba = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->ops->get_track_type)
|
||||
audio = dev->ops->get_track_type(dev->local, lba);
|
||||
|
||||
|
||||
@@ -146,7 +146,11 @@ sermouse_transmit_byte(mouse_t *dev, int do_next)
|
||||
serial_write_fifo(dev->serial, dev->buf[dev->buf_pos]);
|
||||
|
||||
if (do_next) {
|
||||
dev->buf_pos = (dev->buf_pos + 1) % dev->buf_len;
|
||||
/* If we have a buffer length of 0, pretend the state is STATE_SKIP_PACKET. */
|
||||
if (dev->buf_len == 0)
|
||||
dev->buf_pos = 0;
|
||||
else
|
||||
dev->buf_pos = (dev->buf_pos + 1) % dev->buf_len;
|
||||
|
||||
if (dev->buf_pos != 0)
|
||||
sermouse_set_period(dev, dev->transmit_period);
|
||||
@@ -747,7 +751,7 @@ sermouse_timer(void *priv)
|
||||
if (!dev->prompt && !dev->continuous)
|
||||
sermouse_transmit_report(dev, (dev->state == STATE_TRANSMIT_REPORT));
|
||||
else
|
||||
dev->state = STATE_IDLE;
|
||||
dev->state = STATE_IDLE;
|
||||
break;
|
||||
case STATE_TRANSMIT_REPORT:
|
||||
case STATE_TRANSMIT:
|
||||
|
||||
@@ -469,7 +469,7 @@ static hdd_preset_t hdd_speed_presets[] = {
|
||||
{ .name = "[ATA-2] Western Digital Caviar 22000", .internal_name = "AC22000", .model = "WDC AC22000LA", .zones = 8, .avg_spt = 130, .heads = 3, .rpm = 5200, .full_stroke_ms = 33, .track_seek_ms = 3.5, .rcache_num_seg = 4, .rcache_seg_size = 128, .max_multiple = 8 },
|
||||
{ .name = "[ATA-2] Western Digital Caviar 22100", .internal_name = "AC22100", .model = "WDC AC22100H", .zones = 8, .avg_spt = 140, .heads = 4, .rpm = 5200, .full_stroke_ms = 30, .track_seek_ms = 3, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 },
|
||||
{ .name = "[ATA-2] Western Digital Caviar 31200", .internal_name = "AC31200", .model = "WDC AC31200F", .zones = 8, .avg_spt = 210, .heads = 4, .rpm = 4500, .full_stroke_ms = 12, .track_seek_ms = 4, .rcache_num_seg = 8, .rcache_seg_size = 64, .max_multiple = 16 },
|
||||
{ .name = "[ATA-3] Connor CFS1275A", .internal_name = "CFS1275A", .model = "Connor Peripherals 1275MB - CFS1275A", .zones = 4, .avg_spt = 130, .heads = 2, .rpm = 4500, .full_stroke_ms = 25, .track_seek_ms = 3.8, .rcache_num_seg = 4, .rcache_seg_size = 64, .max_multiple = 16 }, // Either ATA-2 or ATA-3
|
||||
{ .name = "[ATA-3] Conner CFS1275A", .internal_name = "CFS1275A", .model = "Conner Peripherals 1275MB - CFS1275A", .zones = 4, .avg_spt = 130, .heads = 2, .rpm = 4500, .full_stroke_ms = 25, .track_seek_ms = 3.8, .rcache_num_seg = 4, .rcache_seg_size = 64, .max_multiple = 16 }, // Either ATA-2 or ATA-3
|
||||
{ .name = "[ATA-3] Fujitsu MPA3017AT", .internal_name = "MPA3017AT", .model = "FUJITSU MPA3017AT", .zones = 5, .avg_spt = 195, .heads = 2, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 3.2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 },
|
||||
{ .name = "[ATA-3] Fujitsu MPA3026AT", .internal_name = "MPA3026AT", .model = "FUJITSU MPA3026AT", .zones = 8, .avg_spt = 195, .heads = 3, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 3.2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 },
|
||||
{ .name = "[ATA-3] Fujitsu MPA3035AT", .internal_name = "MPA3035AT", .model = "FUJITSU MPA3035AT", .zones = 11, .avg_spt = 195, .heads = 4, .rpm = 5400, .full_stroke_ms = 20, .track_seek_ms = 3.2, .rcache_num_seg = 8, .rcache_seg_size = 128, .max_multiple = 16 },
|
||||
|
||||
@@ -425,6 +425,8 @@ extern uint8_t cdrom_mitsumi_audio_play(cdrom_t *dev, uint32_t pos, uint
|
||||
#endif
|
||||
extern uint8_t cdrom_read_disc_info_toc(cdrom_t *dev, uint8_t *b,
|
||||
const uint8_t track, const int type);
|
||||
extern int cdrom_is_track_audio(cdrom_t *dev, const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const uint8_t vendor_type);
|
||||
extern int cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, const int sector, const int ismsf,
|
||||
int cdrom_sector_type, const int cdrom_sector_flags,
|
||||
int *len, const uint8_t vendor_type);
|
||||
|
||||
@@ -441,6 +441,8 @@ extern int machine_at_ibmatquadtel_init(const machine_t *); // IBM AT with Quadt
|
||||
|
||||
extern int machine_at_ibmxt286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_pb286_init(const machine_t *);
|
||||
|
||||
extern int machine_at_siemens_init(const machine_t *); // Siemens PCD-2L. N82330 discrete machine. It segfaults in some places
|
||||
|
||||
extern int machine_at_wellamerastar_init(const machine_t *); // Wells American A*Star with custom award BIOS
|
||||
|
||||
@@ -583,6 +583,7 @@ extern const device_t ps1vga_mca_device;
|
||||
extern const device_t voodoo_device;
|
||||
extern const device_t voodoo_banshee_device;
|
||||
extern const device_t creative_voodoo_banshee_device;
|
||||
extern const device_t quantum3d_raven_device;
|
||||
extern const device_t voodoo_3_1000_device;
|
||||
extern const device_t voodoo_3_1000_agp_device;
|
||||
extern const device_t voodoo_3_2000_device;
|
||||
|
||||
@@ -332,6 +332,23 @@ machine_at_ibmxt286_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_pb286_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_interleaved("roms/machines/pb286/LB_V332P.BIN",
|
||||
"roms/machines/pb286/HB_V332P.BIN",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_ibm_common_init(model);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_siemens_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -3261,6 +3261,47 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has IBM AT KBC firmware. */
|
||||
/* To configure the BIOS, use PB_2330a_diag.IMA from MS-DOS 3.30 Packard Bell OEM, GSETUP might work too*/
|
||||
{
|
||||
.name = "[ISA] Packard Bell PB286",
|
||||
.internal_name = "pb286",
|
||||
.type = MACHINE_TYPE_286,
|
||||
.chipset = MACHINE_CHIPSET_DISCRETE,
|
||||
.init = machine_at_pb286_init,
|
||||
.p1_handler = NULL,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_286,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 0,
|
||||
.max_bus = 0,
|
||||
.min_voltage = 0,
|
||||
.max_voltage = 0,
|
||||
.min_multi = 0,
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_AT,
|
||||
.flags = MACHINE_FLAGS_NONE,
|
||||
.ram = {
|
||||
.min = 256,
|
||||
.max = 1024,
|
||||
.step = 128
|
||||
},
|
||||
.nvrmask = 63,
|
||||
.kbc_device = NULL,
|
||||
.kbc_p1 = 0xff,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* This has a Siemens proprietary KBC which is completely undocumented. */
|
||||
{
|
||||
.name = "[ISA] Siemens PCD-2L",
|
||||
|
||||
@@ -145,6 +145,24 @@ const char* fragment_shader_default_color_src =
|
||||
" outColor.a = 1.0;\n"
|
||||
"}\n";
|
||||
|
||||
#ifdef ENABLE_OGL3_LOG
|
||||
int ogl3_do_log = ENABLE_OGL3_LOG;
|
||||
|
||||
static void
|
||||
ogl3_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (ogl3_do_log) {
|
||||
va_start(ap, fmt);
|
||||
ogl3_log_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
# define ogl3_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
next_pow2(unsigned int n)
|
||||
{
|
||||
@@ -232,8 +250,8 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch
|
||||
main_window->showMessage(MBX_ERROR | MBX_FATAL, tr("GLSL Error"), tr("Could not compile shader:\n\n%1").arg(log).replace("\n", "<br>"));
|
||||
// wx_simple_messagebox("GLSL Error", "Could not compile shader:\n%s", log);
|
||||
|
||||
pclog("Could not compile shader: %s\n", log);
|
||||
// pclog("Shader: %s\n", program);
|
||||
ogl3_log("Could not compile shader: %s\n", log);
|
||||
// ogl3_log("Shader: %s\n", program);
|
||||
|
||||
free(log);
|
||||
return 0;
|
||||
@@ -348,7 +366,7 @@ OpenGLRenderer::create_texture(struct shader_texture *tex)
|
||||
tex->width = max_texture_size;
|
||||
if (tex->height > max_texture_size)
|
||||
tex->height = max_texture_size;
|
||||
pclog("Create texture with size %dx%d\n", tex->width, tex->height);
|
||||
ogl3_log("Create texture with size %dx%d\n", tex->width, tex->height);
|
||||
glw.glGenTextures(1, (GLuint *) &tex->id);
|
||||
glw.glBindTexture(GL_TEXTURE_2D, tex->id);
|
||||
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, tex->wrap_mode);
|
||||
@@ -452,7 +470,7 @@ OpenGLRenderer::create_fbo(struct shader_fbo *fbo)
|
||||
glw.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo->texture.id, 0);
|
||||
|
||||
if (glw.glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
|
||||
pclog("Could not create framebuffer!\n");
|
||||
ogl3_log("Could not create framebuffer!\n");
|
||||
|
||||
glw.glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
@@ -629,12 +647,12 @@ OpenGLRenderer::load_glslp(glsl_t *glsl, int num_shader, const char *f)
|
||||
struct shader_lut_texture *tex = &gshader->lut_textures[i];
|
||||
strcpy(tex->name, texture->name);
|
||||
|
||||
pclog("Load texture %s...\n", file);
|
||||
ogl3_log("Load texture %s...\n", file);
|
||||
|
||||
if (!load_texture(file, &tex->texture)) {
|
||||
//QMessageBox::critical(main_window, tr("GLSL Error"), tr("Could not load texture: %s").arg(file));
|
||||
main_window->showMessage(MBX_ERROR | MBX_FATAL, tr("GLSL Error"), tr("Could not load texture: %1").arg(file));
|
||||
pclog("Could not load texture %s!\n", file);
|
||||
ogl3_log("Could not load texture %s!\n", file);
|
||||
failed = 1;
|
||||
break;
|
||||
}
|
||||
@@ -676,16 +694,16 @@ OpenGLRenderer::load_glslp(glsl_t *glsl, int num_shader, const char *f)
|
||||
if (!strlen(pass->alias))
|
||||
sprintf(pass->alias, "Pass %u", (i + 1));
|
||||
|
||||
pclog("Creating pass %u (%s)\n", (i + 1), pass->alias);
|
||||
pclog("Loading shader %s...\n", shader->shader_fn);
|
||||
ogl3_log("Creating pass %u (%s)\n", (i + 1), pass->alias);
|
||||
ogl3_log("Loading shader %s...\n", shader->shader_fn);
|
||||
if (!shader->shader_program) {
|
||||
main_window->showMessage(MBX_ERROR | MBX_FATAL, tr("GLSL Error"), tr("Could not load shader: %1").arg(shader->shader_fn));
|
||||
// wx_simple_messagebox("GLSL Error", "Could not load shader: %s", shader->shader_fn);
|
||||
pclog("Could not load shader %s\n", shader->shader_fn);
|
||||
ogl3_log("Could not load shader %s\n", shader->shader_fn);
|
||||
failed = 1;
|
||||
break;
|
||||
} else
|
||||
pclog("Shader %s loaded\n", shader->shader_fn);
|
||||
ogl3_log("Shader %s loaded\n", shader->shader_fn);
|
||||
failed = !compile_shader(GL_VERTEX_SHADER, "#define VERTEX\n#define PARAMETER_UNIFORM\n",
|
||||
shader->shader_program, &pass->program.vertex_shader)
|
||||
|| !compile_shader(GL_FRAGMENT_SHADER, "#define FRAGMENT\n#define PARAMETER_UNIFORM\n",
|
||||
@@ -856,15 +874,15 @@ OpenGLRenderer::initialize()
|
||||
|
||||
glw.initializeOpenGLFunctions();
|
||||
|
||||
pclog("OpenGL information: [%s] %s (%s)\n", glw.glGetString(GL_VENDOR), glw.glGetString(GL_RENDERER), glw.glGetString(GL_VERSION));
|
||||
ogl3_log("OpenGL information: [%s] %s (%s)\n", glw.glGetString(GL_VENDOR), glw.glGetString(GL_RENDERER), glw.glGetString(GL_VERSION));
|
||||
glsl_version[0] = glsl_version[1] = -1;
|
||||
glw.glGetIntegerv(GL_MAJOR_VERSION, &glsl_version[0]);
|
||||
glw.glGetIntegerv(GL_MINOR_VERSION, &glsl_version[1]);
|
||||
if (glsl_version[0] < 3) {
|
||||
throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(glsl_version[0]).arg(glsl_version[1]));
|
||||
}
|
||||
pclog("Using OpenGL %s\n", glw.glGetString(GL_VERSION));
|
||||
pclog("Using Shading Language %s\n", glw.glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
ogl3_log("Using OpenGL %s\n", glw.glGetString(GL_VERSION));
|
||||
ogl3_log("Using Shading Language %s\n", glw.glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
|
||||
glslVersion = reinterpret_cast<const char *>(glw.glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
glslVersion.truncate(4);
|
||||
@@ -876,7 +894,7 @@ OpenGLRenderer::initialize()
|
||||
glslVersion.append(" core");
|
||||
|
||||
glw.glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size);
|
||||
pclog("Max texture size: %dx%d\n", max_texture_size, max_texture_size);
|
||||
ogl3_log("Max texture size: %dx%d\n", max_texture_size, max_texture_size);
|
||||
|
||||
glw.glEnable(GL_TEXTURE_2D);
|
||||
|
||||
@@ -1218,7 +1236,7 @@ OpenGLRenderer::render_pass(struct render_data *data)
|
||||
int i;
|
||||
GLuint texture_unit = 0;
|
||||
|
||||
// pclog("pass %d: %gx%g, %gx%g -> %gx%g, %gx%g, %gx%g\n", num_pass, pass->state.input_size[0],
|
||||
// ogl3_log("pass %d: %gx%g, %gx%g -> %gx%g, %gx%g, %gx%g\n", num_pass, pass->state.input_size[0],
|
||||
// pass->state.input_size[1], pass->state.input_texture_size[0], pass->state.input_texture_size[1],
|
||||
// pass->state.output_size[0], pass->state.output_size[1], pass->state.output_texture_size[0],
|
||||
// pass->state.output_texture_size[1], output_size[0], output_size[1]);
|
||||
|
||||
@@ -2610,6 +2610,11 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
dev->sector_len = 256;
|
||||
dev->sector_pos = ((((uint32_t) cdb[1]) & 0x1f) << 16) |
|
||||
(((uint32_t) cdb[2]) << 8) | ((uint32_t) cdb[3]);
|
||||
if (cdrom_is_track_audio(dev->drv, dev->sector_pos, msf,
|
||||
dev->sector_type, 0x00)) {
|
||||
scsi_cdrom_illegal_mode(dev);
|
||||
ret = 0;
|
||||
}
|
||||
scsi_cdrom_log(dev->log, "READ (6): Length: %i, LBA: %i\n",
|
||||
dev->sector_len, dev->sector_pos);
|
||||
break;
|
||||
@@ -2617,6 +2622,12 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
dev->sector_len = (cdb[7] << 8) | cdb[8];
|
||||
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) |
|
||||
(cdb[4] << 8) | cdb[5];
|
||||
if (cdrom_is_track_audio(dev->drv, dev->sector_pos, msf,
|
||||
dev->sector_type, dev->use_cdb_9 ?
|
||||
(cdb[9] & 0xc0) : 0x00)) {
|
||||
scsi_cdrom_illegal_mode(dev);
|
||||
ret = 0;
|
||||
}
|
||||
scsi_cdrom_log(dev->log, "READ (10): Length: %i, LBA: %i\n",
|
||||
dev->sector_len, dev->sector_pos);
|
||||
break;
|
||||
@@ -2627,6 +2638,12 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
dev->sector_pos = (((uint32_t) cdb[2]) << 24) |
|
||||
(((uint32_t) cdb[3]) << 16) |
|
||||
(((uint32_t) cdb[4]) << 8) | ((uint32_t) cdb[5]);
|
||||
if (cdrom_is_track_audio(dev->drv, dev->sector_pos, msf,
|
||||
dev->sector_type, dev->use_cdb_9 ?
|
||||
(cdb[9] & 0xc0) : 0x00)) {
|
||||
scsi_cdrom_illegal_mode(dev);
|
||||
ret = 0;
|
||||
}
|
||||
scsi_cdrom_log(dev->log, "READ (12): Length: %i, LBA: %i\n",
|
||||
dev->sector_len, dev->sector_pos);
|
||||
break;
|
||||
|
||||
@@ -1756,7 +1756,7 @@ static uint16_t
|
||||
pas16_readdmaw_stereo(pas16_t *pas16)
|
||||
{
|
||||
uint16_t ret;
|
||||
uint16_t ticks = (pas16->sys_conf_1 & 0x02) ? (1 + (pas16->dma < 5)) : 2;
|
||||
uint16_t ticks = (pas16->sys_conf_1 & 0x02) ? (1 + (pas16->dma < 5)) : 1;
|
||||
|
||||
ret = pas16_dma_readw(pas16, ticks);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
%global romver 4.1
|
||||
|
||||
Name: 86Box
|
||||
Version: 4.3
|
||||
Version: 5.0
|
||||
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> 4.3-1
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.0-1
|
||||
- Bump release
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="4.3" date="2024-11-13"/>
|
||||
<release version="5.0" date="2025-04-16"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
@@ -195,6 +195,7 @@ video_cards[] = {
|
||||
{ .device = &tgui9680_pci_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &voodoo_banshee_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &creative_voodoo_banshee_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &quantum3d_raven_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &voodoo_3_1000_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &voodoo_3_2000_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
{ .device = &voodoo_3_3000_device, .flags = VIDEO_FLAG_TYPE_NONE },
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
|
||||
#define ROM_BANSHEE "roms/video/voodoo/Pci_sg.rom"
|
||||
#define ROM_CREATIVE_BANSHEE "roms/video/voodoo/BlasterPCI.rom"
|
||||
#define ROM_QUANTUM3D_RAVEN "roms/video/voodoo/RVPD0224.rom"
|
||||
#define ROM_VOODOO3_1000 "roms/video/voodoo/1k11sg.rom"
|
||||
#define ROM_VOODOO3_2000 "roms/video/voodoo/2k11sd.rom"
|
||||
#define ROM_VOODOO3_3000 "roms/video/voodoo/3k12sd.rom"
|
||||
@@ -78,6 +79,7 @@ static uint8_t vb_filter_bx_g[256][256];
|
||||
|
||||
enum {
|
||||
TYPE_BANSHEE = 0,
|
||||
TYPE_QUANTUM3D_RAVEN,
|
||||
TYPE_V3_1000,
|
||||
TYPE_V3_2000,
|
||||
TYPE_V3_3000,
|
||||
@@ -3374,6 +3376,16 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int
|
||||
}
|
||||
break;
|
||||
|
||||
case TYPE_QUANTUM3D_RAVEN:
|
||||
/* This case basically exists only to set the subsystem ID correctly for SF: Rush, a vendor-locked game. */
|
||||
/* We set the type back to TYPE_BANSHEE so the card behaves as a regular Banshee (no 3D glasses emulation). */
|
||||
banshee->pci_regs[0x2c] = 0x9c;
|
||||
banshee->pci_regs[0x2d] = 0x13;
|
||||
banshee->pci_regs[0x2e] = banshee->agp ? 0x16 : 0x17;
|
||||
banshee->pci_regs[0x2f] = 0x00;
|
||||
banshee->type = TYPE_BANSHEE;
|
||||
break;
|
||||
|
||||
case TYPE_V3_1000:
|
||||
banshee->pci_regs[0x2c] = 0x1a;
|
||||
banshee->pci_regs[0x2d] = 0x12;
|
||||
@@ -3451,6 +3463,12 @@ creative_banshee_init(const device_t *info)
|
||||
return banshee_init_common(info, ROM_CREATIVE_BANSHEE, 0, TYPE_BANSHEE, VOODOO_BANSHEE, 0);
|
||||
}
|
||||
|
||||
static void *
|
||||
quantum3d_raven_init(const device_t *info)
|
||||
{
|
||||
return banshee_init_common(info, ROM_QUANTUM3D_RAVEN, 0, TYPE_QUANTUM3D_RAVEN, VOODOO_BANSHEE, 0);
|
||||
}
|
||||
|
||||
static void *
|
||||
v3_1000_init(const device_t *info)
|
||||
{
|
||||
@@ -3547,6 +3565,12 @@ creative_banshee_available(void)
|
||||
return rom_present(ROM_CREATIVE_BANSHEE);
|
||||
}
|
||||
|
||||
static int
|
||||
quantum3d_raven_available(void)
|
||||
{
|
||||
return rom_present(ROM_QUANTUM3D_RAVEN);
|
||||
}
|
||||
|
||||
static int
|
||||
v3_1000_available(void)
|
||||
{
|
||||
@@ -3883,6 +3907,20 @@ const device_t creative_voodoo_banshee_device = {
|
||||
.config = banshee_sdram_config
|
||||
};
|
||||
|
||||
const device_t quantum3d_raven_device = {
|
||||
.name = "Quantum3D Raven",
|
||||
.internal_name = "q3d_raven_pci",
|
||||
.flags = DEVICE_PCI,
|
||||
.local = 0,
|
||||
.init = quantum3d_raven_init,
|
||||
.close = banshee_close,
|
||||
.reset = NULL,
|
||||
.available = quantum3d_raven_available,
|
||||
.speed_changed = banshee_speed_changed,
|
||||
.force_redraw = banshee_force_redraw,
|
||||
.config = banshee_sdram_config
|
||||
};
|
||||
|
||||
const device_t voodoo_3_1000_device = {
|
||||
.name = "3dfx Voodoo3 1000",
|
||||
.internal_name = "voodoo3_1k_pci",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "86box",
|
||||
"version-string": "4.3",
|
||||
"version-string": "5.0",
|
||||
"homepage": "https://86box.net/",
|
||||
"documentation": "https://86box.readthedocs.io/",
|
||||
"license": "GPL-2.0-or-later",
|
||||
|
||||
Reference in New Issue
Block a user