mirror of
https://github.com/86Box/86Box.git
synced 2026-02-25 04:45:31 -07:00
Merge branch 'master' into pc98x1
This commit is contained in:
7
.ci/Jenkinsfile
vendored
7
.ci/Jenkinsfile
vendored
@@ -20,11 +20,12 @@ def repository = ['https://github.com/86Box/86Box.git', scm.userRemoteConfigs[0]
|
||||
def commitBrowser = ['https://github.com/86Box/86Box/commit/%s', null]
|
||||
def branch = ['master', scm.branches[0].name]
|
||||
def buildType = ['beta', 'alpha']
|
||||
def tarballFlags = ['', '-s']
|
||||
def buildBranch = env.JOB_BASE_NAME.contains('-') ? 1 : 0
|
||||
|
||||
def osArchs = [
|
||||
'Windows': ['32', '64'],
|
||||
'Linux': ['x86', 'x86_64', 'arm32', 'arm64'],
|
||||
'Windows': ['64'],
|
||||
'Linux': ['x86_64', 'arm64'],
|
||||
'macOS': ['x86_64+x86_64h+arm64']
|
||||
]
|
||||
|
||||
@@ -238,7 +239,7 @@ pipeline {
|
||||
dir("${env.WORKSPACE_TMP}/output") {
|
||||
/* Run source tarball creation process. */
|
||||
def packageName = "${env.JOB_BASE_NAME}-Source$buildSuffix"
|
||||
if (runBuild("-s \"$packageName\"") == 0) {
|
||||
if (runBuild("-s \"$packageName\" ${tarballFlags[buildBranch]}") == 0) {
|
||||
/* Archive resulting artifacts. */
|
||||
archiveArtifacts artifacts: "$packageName*"
|
||||
} else {
|
||||
|
||||
@@ -208,7 +208,7 @@ cmake_flags_extra=
|
||||
if [ -z "$package_name" -a -z "$tarball_name" ] || [ -n "$package_name" -a -z "$arch" ]
|
||||
then
|
||||
echo '[!] Usage: build.sh -b {package_name} {architecture} [-t] [cmake_flags...]'
|
||||
echo ' build.sh -s {source_tarball_name}'
|
||||
echo ' build.sh -s {source_tarball_name} [-t]'
|
||||
echo 'Dep. tree: build.sh -p [archive_tmp/path/to/binary]'
|
||||
exit 100
|
||||
fi
|
||||
@@ -228,7 +228,10 @@ then
|
||||
[ ! -d "$cwd" ] && mkdir -p "$cwd"
|
||||
|
||||
# Save current HEAD commit to VERSION.
|
||||
git log --stat -1 > VERSION || rm -f VERSION
|
||||
if [ $strip -eq 0 ]
|
||||
then
|
||||
git log --stat -1 > VERSION || rm -f VERSION
|
||||
fi
|
||||
|
||||
# Archive source.
|
||||
make_tar "$cwd/$tarball_name.tar"
|
||||
@@ -537,7 +540,7 @@ then
|
||||
fi
|
||||
|
||||
# Patch wget to remove libproxy support, as it depends on shared-mime-info which
|
||||
# fails to build for a 10.14 target, which we have to do despite wget only being
|
||||
# fails to build for a 10.13 target, which we have to do despite wget only being
|
||||
# a host dependency. MacPorts issue 69406 strongly implies this will not be fixed.
|
||||
wget_portfile="$macports/var/macports/sources/rsync.macports.org/macports/release/tarballs/ports/net/wget/Portfile"
|
||||
sudo sed -i -e 's/--enable-libproxy/--disable-libproxy/g' "$wget_portfile"
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
#
|
||||
# 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.
|
||||
# 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.
|
||||
# This file is part of the 86Box distribution.
|
||||
#
|
||||
# CMake build script.
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2021-2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
@@ -122,21 +123,21 @@ set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
||||
|
||||
# Optional features
|
||||
#
|
||||
# Option Description Def.
|
||||
# ------ ----------- ----
|
||||
option(RELEASE "Release build" OFF)
|
||||
option(DYNAREC "Dynamic recompiler" ON)
|
||||
option(OPENAL "OpenAL" ON)
|
||||
option(RTMIDI "RtMidi" ON)
|
||||
option(FLUIDSYNTH "FluidSynth" ON)
|
||||
option(MUNT "MUNT" ON)
|
||||
option(VNC "VNC renderer" OFF)
|
||||
option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF)
|
||||
option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF)
|
||||
option(GDBSTUB "Enable GDB stub server for debugging" OFF)
|
||||
option(DEV_BRANCH "Development branch" OFF)
|
||||
option(DISCORD "Discord Rich Presence support" ON)
|
||||
option(DEBUGREGS486 "Enable debug register opeartion on 486+ CPUs" OFF)
|
||||
# Option Description Def.
|
||||
# ------ ----------- ----
|
||||
option(RELEASE "Release build" OFF)
|
||||
option(DYNAREC "Dynamic recompiler" ON)
|
||||
option(OPENAL "OpenAL" ON)
|
||||
option(RTMIDI "RtMidi" ON)
|
||||
option(FLUIDSYNTH "FluidSynth" ON)
|
||||
option(MUNT "MUNT" ON)
|
||||
option(VNC "VNC renderer" OFF)
|
||||
option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF)
|
||||
option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF)
|
||||
option(GDBSTUB "Enable GDB stub server for debugging" OFF)
|
||||
option(DEV_BRANCH "Development branch" OFF)
|
||||
option(DISCORD "Discord Rich Presence support" ON)
|
||||
option(DEBUGREGS486 "Enable debug register opeartion on 486+ CPUs" OFF)
|
||||
|
||||
if(WIN32)
|
||||
set(QT ON)
|
||||
@@ -148,25 +149,25 @@ endif()
|
||||
|
||||
# Development branch features
|
||||
#
|
||||
# Option Description Def. Condition Otherwise
|
||||
# ------ ----------- ---- --------- ---------
|
||||
cmake_dependent_option(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(AN430TX "Intel AN430TX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CDROM_MITSUMI "Mitsumi CDROM" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(G100 "Matrox Productiva G100" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_RAMPAGE "AST Rampage" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_IAB "Intel Above Board" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_BRAT "BocaRAM/AT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPL4ML "OPL4-ML daughterboard" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PCL "Generic PCL5e Printer" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(WACOM "Wacom Input Devices" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
# Option Description Def. Condition Otherwise
|
||||
# ------ ----------- ---- ------------ ---------
|
||||
cmake_dependent_option(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(AN430TX "Intel AN430TX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CDROM_MITSUMI "Mitsumi CDROM" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(G100 "Matrox Productiva G100" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_RAMPAGE "AST Rampage" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_IAB "Intel Above Board" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_BRAT "BocaRAM/AT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPL4ML "OPL4-ML daughterboard" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PCL "Generic PCL5e Printer" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(WACOM "Wacom Input Devices" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
|
||||
# Ditto but for Qt
|
||||
if(QT)
|
||||
|
||||
@@ -12,16 +12,45 @@
|
||||
# dob205
|
||||
#
|
||||
# Copyright 2020-2022 David Hrdlička.
|
||||
# Copyright 2021 dob205.
|
||||
# Copyright 2021 dob205.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
if(APPLE)
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
endif()
|
||||
|
||||
add_executable(86Box 86box.c config.c log.c random.c timer.c io.c acpi.c apm.c
|
||||
dma.c ddma.c nmi.c pic.c pit.c pit_fast.c port_6x.c port_92.c ppi.c pci.c
|
||||
mca.c usb.c fifo.c fifo8.c device.c nvr.c nvr_at.c nvr_ps2.c
|
||||
machine_status.c ini.c cJSON.c)
|
||||
add_executable(86Box
|
||||
86box.c
|
||||
config.c
|
||||
log.c
|
||||
random.c
|
||||
timer.c
|
||||
io.c
|
||||
acpi.c
|
||||
apm.c
|
||||
dma.c
|
||||
ddma.c
|
||||
nmi.c
|
||||
pic.c
|
||||
pit.c
|
||||
pit_fast.c
|
||||
port_6x.c
|
||||
port_92.c
|
||||
ppi.c
|
||||
pci.c
|
||||
mca.c
|
||||
usb.c
|
||||
fifo.c
|
||||
fifo8.c
|
||||
device.c
|
||||
nvr.c
|
||||
nvr_at.c
|
||||
nvr_ps2.c
|
||||
machine_status.c
|
||||
ini.c
|
||||
cJSON.c
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
add_compile_definitions(_FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE=1 _LARGEFILE64_SOURCE=1)
|
||||
@@ -61,7 +90,10 @@ if(VNC)
|
||||
find_package(LibVNCServer)
|
||||
if(LibVNCServer_FOUND)
|
||||
add_compile_definitions(USE_VNC)
|
||||
add_library(vnc OBJECT vnc.c vnc_keymap.c)
|
||||
add_library(vnc OBJECT
|
||||
vnc.c
|
||||
vnc_keymap.c
|
||||
)
|
||||
target_link_libraries(86Box vnc LibVNCServer::vncserver)
|
||||
if(WIN32)
|
||||
target_link_libraries(86Box ws2_32)
|
||||
|
||||
@@ -9,15 +9,23 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
pkg_check_modules(SNDFILE REQUIRED IMPORTED_TARGET sndfile)
|
||||
|
||||
add_library(cdrom OBJECT cdrom.c cdrom_image_backend.c cdrom_image_viso.c cdrom_image.c cdrom_ioctl.c)
|
||||
add_library(cdrom OBJECT
|
||||
cdrom.c
|
||||
cdrom_image_backend.c
|
||||
cdrom_image_viso.c
|
||||
cdrom_image.c
|
||||
cdrom_ioctl.c
|
||||
)
|
||||
target_link_libraries(86Box PkgConfig::SNDFILE)
|
||||
|
||||
if(CDROM_MITSUMI)
|
||||
|
||||
@@ -9,20 +9,80 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1435.c ali1489.c
|
||||
ali1531.c ali1541.c ali1543.c ali1621.c ali6117.c ali1409.c headland.c ims8848.c intel_82335.c
|
||||
compaq_386.c contaq_82c59x.c cs4031.c intel_420ex.c intel_4x0.c intel_i450kx.c
|
||||
intel_sio.c intel_piix.c ../ioapic.c neat.c opti283.c opti291.c opti391.c opti495.c
|
||||
opti499.c opti602.c opti822.c opti895.c opti5x7.c scamp.c scat.c sis_85c310.c sis_85c4xx.c
|
||||
sis_85c496.c sis_85c50x.c sis_5511.c sis_5571.c sis_5581.c sis_5591.c sis_5600.c
|
||||
sis_5511_h2p.c sis_5571_h2p.c sis_5581_h2p.c sis_5591_h2p.c sis_5600_h2p.c
|
||||
sis_5513_p2i.c sis_5513_ide.c sis_5572_usb.c sis_5595_pmu.c sis_55xx.c via_vt82c49x.c
|
||||
via_vt82c505.c gc100.c stpc.c
|
||||
umc_8886.c umc_hb4.c umc_8890.c via_apollo.c via_pipc.c vl82c480.c wd76c10.c)
|
||||
add_library(chipset OBJECT
|
||||
82c100.c
|
||||
acc2168.c
|
||||
cs8230.c
|
||||
ali1429.c
|
||||
ali1435.c
|
||||
ali1489.c
|
||||
ali1531.c
|
||||
ali1541.c
|
||||
ali1543.c
|
||||
ali1621.c
|
||||
ali6117.c
|
||||
ali1409.c
|
||||
headland.c
|
||||
ims8848.c
|
||||
intel_82335.c
|
||||
compaq_386.c
|
||||
contaq_82c59x.c
|
||||
cs4031.c
|
||||
intel_420ex.c
|
||||
intel_4x0.c
|
||||
intel_i450kx.c
|
||||
intel_sio.c
|
||||
intel_piix.c
|
||||
../ioapic.c
|
||||
neat.c
|
||||
opti283.c
|
||||
opti291.c
|
||||
opti391.c
|
||||
opti495.c
|
||||
opti499.c
|
||||
opti602.c
|
||||
opti822.c
|
||||
opti895.c
|
||||
opti5x7.c
|
||||
scamp.c
|
||||
scat.c
|
||||
sis_85c310.c
|
||||
sis_85c4xx.c
|
||||
sis_85c496.c
|
||||
sis_85c50x.c
|
||||
sis_5511.c
|
||||
sis_5571.c
|
||||
sis_5581.c
|
||||
sis_5591.c
|
||||
sis_5600.c
|
||||
sis_5511_h2p.c
|
||||
sis_5571_h2p.c
|
||||
sis_5581_h2p.c
|
||||
sis_5591_h2p.c
|
||||
sis_5600_h2p.c
|
||||
sis_5513_p2i.c
|
||||
sis_5513_ide.c
|
||||
sis_5572_usb.c
|
||||
sis_5595_pmu.c
|
||||
sis_55xx.c
|
||||
via_vt82c49x.c
|
||||
via_vt82c505.c
|
||||
gc100.c
|
||||
stpc.c
|
||||
umc_8886.c
|
||||
umc_hb4.c
|
||||
umc_8890.c
|
||||
via_apollo.c
|
||||
via_pipc.c
|
||||
vl82c480.c
|
||||
wd76c10.c
|
||||
)
|
||||
|
||||
if(OLIVETTI)
|
||||
target_sources(chipset PRIVATE olivetti_eva.c)
|
||||
|
||||
@@ -9,19 +9,28 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
if(DYNAREC)
|
||||
add_library(dynarec OBJECT codegen.c codegen_ops.c)
|
||||
add_library(dynarec OBJECT
|
||||
codegen.c
|
||||
codegen_ops.c
|
||||
)
|
||||
|
||||
if(ARCH STREQUAL "i386")
|
||||
target_sources(dynarec PRIVATE codegen_x86.c
|
||||
codegen_accumulate_x86.c)
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_x86.c
|
||||
codegen_accumulate_x86.c
|
||||
)
|
||||
elseif(ARCH STREQUAL "x86_64")
|
||||
target_sources(dynarec PRIVATE codegen_x86-64.c
|
||||
codegen_accumulate_x86-64.c)
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_x86-64.c
|
||||
codegen_accumulate_x86-64.c
|
||||
)
|
||||
else()
|
||||
message(SEND_ERROR
|
||||
"Dynarec is incompatible with target platform ${ARCH}")
|
||||
|
||||
@@ -9,39 +9,71 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
if(DYNAREC)
|
||||
add_library(dynarec OBJECT codegen.c codegen_accumulate.c
|
||||
codegen_allocator.c codegen_block.c codegen_ir.c codegen_ops.c
|
||||
codegen_ops_3dnow.c codegen_ops_branch.c codegen_ops_arith.c
|
||||
codegen_ops_fpu_arith.c codegen_ops_fpu_constant.c
|
||||
codegen_ops_fpu_loadstore.c codegen_ops_fpu_misc.c
|
||||
codegen_ops_helpers.c codegen_ops_jump.c codegen_ops_logic.c
|
||||
codegen_ops_misc.c codegen_ops_mmx_arith.c codegen_ops_mmx_cmp.c
|
||||
codegen_ops_mmx_loadstore.c codegen_ops_mmx_logic.c
|
||||
codegen_ops_mmx_pack.c codegen_ops_mmx_shift.c codegen_ops_mov.c
|
||||
codegen_ops_shift.c codegen_ops_stack.c codegen_reg.c)
|
||||
add_library(dynarec OBJECT
|
||||
codegen.c
|
||||
codegen_accumulate.c
|
||||
codegen_allocator.c
|
||||
codegen_block.c
|
||||
codegen_ir.c
|
||||
codegen_ops.c
|
||||
codegen_ops_3dnow.c
|
||||
codegen_ops_branch.c
|
||||
codegen_ops_arith.c
|
||||
codegen_ops_fpu_arith.c
|
||||
codegen_ops_fpu_constant.c
|
||||
codegen_ops_fpu_loadstore.c
|
||||
codegen_ops_fpu_misc.c
|
||||
codegen_ops_helpers.c
|
||||
codegen_ops_jump.c
|
||||
codegen_ops_logic.c
|
||||
codegen_ops_misc.c
|
||||
codegen_ops_mmx_arith.c
|
||||
codegen_ops_mmx_cmp.c
|
||||
codegen_ops_mmx_loadstore.c
|
||||
codegen_ops_mmx_logic.c
|
||||
codegen_ops_mmx_pack.c
|
||||
codegen_ops_mmx_shift.c
|
||||
codegen_ops_mov.c
|
||||
codegen_ops_shift.c
|
||||
codegen_ops_stack.c
|
||||
codegen_reg.c
|
||||
)
|
||||
|
||||
if(ARCH STREQUAL "i386")
|
||||
target_sources(dynarec PRIVATE codegen_backend_x86.c
|
||||
codegen_backend_x86_ops.c codegen_backend_x86_ops_fpu.c
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_backend_x86.c
|
||||
codegen_backend_x86_ops.c
|
||||
codegen_backend_x86_ops_fpu.c
|
||||
codegen_backend_x86_ops_sse.c
|
||||
codegen_backend_x86_uops.c)
|
||||
codegen_backend_x86_uops.c
|
||||
)
|
||||
elseif(ARCH STREQUAL "x86_64")
|
||||
target_sources(dynarec PRIVATE codegen_backend_x86-64.c
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_backend_x86-64.c
|
||||
codegen_backend_x86-64_ops.c
|
||||
codegen_backend_x86-64_ops_sse.c
|
||||
codegen_backend_x86-64_uops.c)
|
||||
codegen_backend_x86-64_uops.c
|
||||
)
|
||||
elseif(ARCH STREQUAL "arm64")
|
||||
target_sources(dynarec PRIVATE codegen_backend_arm64.c
|
||||
codegen_backend_arm64_ops.c codegen_backend_arm64_uops.c
|
||||
codegen_backend_arm64_imm.c)
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_backend_arm64.c
|
||||
codegen_backend_arm64_ops.c
|
||||
codegen_backend_arm64_uops.c
|
||||
codegen_backend_arm64_imm.c
|
||||
)
|
||||
elseif(ARCH STREQUAL "arm")
|
||||
target_sources(dynarec PRIVATE codegen_backend_arm.c
|
||||
codegen_backend_arm_ops.c codegen_backend_arm_uops.c)
|
||||
target_sources(dynarec PRIVATE
|
||||
codegen_backend_arm.c
|
||||
codegen_backend_arm_ops.c
|
||||
codegen_backend_arm_uops.c
|
||||
)
|
||||
else()
|
||||
message(SEND_ERROR
|
||||
"Dynarec is incompatible with target platform ${ARCH}")
|
||||
|
||||
@@ -9,13 +9,28 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c
|
||||
386_dynarec.c x86_ops_mmx.c x86seg_common.c x86seg.c x86seg_2386.c x87.c
|
||||
x87_timings.c 8080.c)
|
||||
add_library(cpu OBJECT
|
||||
cpu.c
|
||||
cpu_table.c
|
||||
fpu.c x86.c
|
||||
808x.c
|
||||
386.c
|
||||
386_common.c
|
||||
386_dynarec.c
|
||||
x86_ops_mmx.c
|
||||
x86seg_common.c
|
||||
x86seg.c
|
||||
x86seg_2386.c
|
||||
x87.c
|
||||
x87_timings.c
|
||||
8080.c
|
||||
)
|
||||
|
||||
if(AMD_K5)
|
||||
target_compile_definitions(cpu PRIVATE USE_AMD_K5)
|
||||
@@ -39,10 +54,15 @@ endif()
|
||||
if(DYNAREC)
|
||||
target_sources(cpu PRIVATE 386_dynarec_ops.c)
|
||||
|
||||
add_library(cgt OBJECT codegen_timing_486.c
|
||||
codegen_timing_common.c codegen_timing_k6.c
|
||||
codegen_timing_pentium.c codegen_timing_p6.c
|
||||
codegen_timing_winchip.c codegen_timing_winchip2.c)
|
||||
add_library(cgt OBJECT
|
||||
codegen_timing_486.c
|
||||
codegen_timing_common.c
|
||||
codegen_timing_k6.c
|
||||
codegen_timing_pentium.c
|
||||
codegen_timing_p6.c
|
||||
codegen_timing_winchip.c
|
||||
codegen_timing_winchip2.c
|
||||
)
|
||||
endif()
|
||||
|
||||
add_subdirectory(softfloat3e)
|
||||
|
||||
@@ -9,22 +9,53 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2021 Andreas J. Reichel.
|
||||
# Copyright 2021-2022 Jasmine Iwanek.
|
||||
# Copyright 2021-2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c hwm_lm78.c hwm_gl518sm.c
|
||||
hwm_vt82c686.c ibm_5161.c isamem.c isartc.c ../lpt.c pci_bridge.c
|
||||
postcard.c serial.c unittester.c clock_ics9xxx.c isapnp.c i2c.c i2c_gpio.c
|
||||
smbus_piix4.c smbus_ali7101.c smbus_sis5595.c keyboard.c keyboard_xt.c
|
||||
kbc_at.c kbc_at_dev.c
|
||||
add_library(dev OBJECT
|
||||
bugger.c
|
||||
cassette.c
|
||||
cartridge.c
|
||||
hasp.c
|
||||
hwm.c
|
||||
hwm_lm75.c
|
||||
hwm_lm78.c
|
||||
hwm_gl518sm.c
|
||||
hwm_vt82c686.c
|
||||
ibm_5161.c
|
||||
isamem.c
|
||||
isartc.c
|
||||
../lpt.c
|
||||
pci_bridge.c
|
||||
postcard.c
|
||||
serial.c
|
||||
unittester.c
|
||||
clock_ics9xxx.c
|
||||
isapnp.c
|
||||
i2c.c
|
||||
i2c_gpio.c
|
||||
smbus_piix4.c
|
||||
smbus_ali7101.c
|
||||
smbus_sis5595.c
|
||||
keyboard.c
|
||||
keyboard_xt.c
|
||||
kbc_at.c
|
||||
kbc_at_dev.c
|
||||
keyboard_at.c
|
||||
mouse.c mouse_bus.c mouse_serial.c mouse_ps2.c nec_mate_unk.c phoenix_486_jumper.c
|
||||
mouse.c
|
||||
mouse_bus.c
|
||||
mouse_serial.c
|
||||
mouse_ps2.c
|
||||
nec_mate_unk.c
|
||||
phoenix_486_jumper.c
|
||||
serial_passthrough.c
|
||||
novell_cardkey.c
|
||||
mouse_microtouch_touchscreen.c)
|
||||
mouse_microtouch_touchscreen.c
|
||||
)
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
target_link_libraries(86Box atomic)
|
||||
|
||||
@@ -277,9 +277,26 @@ kbc_translate(atkbc_t *dev, uint8_t val)
|
||||
return ret;
|
||||
}
|
||||
|
||||
kbc_at_log("ATkbc: translate is %s, ", translate ? "on" : "off");
|
||||
#ifdef ENABLE_KEYBOARD_AT_LOG
|
||||
kbc_at_log("scan code: ");
|
||||
if (translate) {
|
||||
kbc_at_log("%02X (original: ", (nont_to_t[val] | dev->sc_or));
|
||||
if (dev->sc_or == 0x80)
|
||||
kbc_at_log("F0 ");
|
||||
kbc_at_log("%02X)\n", val);
|
||||
} else
|
||||
kbc_at_log("%02X\n", val);
|
||||
#endif
|
||||
|
||||
ret = translate ? (nont_to_t[val] | dev->sc_or) : val;
|
||||
|
||||
if (dev->sc_or == 0x80)
|
||||
dev->sc_or = 0;
|
||||
|
||||
/* Test for T3100E 'Fn' key (Right Alt / Right Ctrl) */
|
||||
if ((dev != NULL) && (kbc_ven == KBC_VEN_TOSHIBA) &&
|
||||
(keyboard_recv(0x138) || keyboard_recv(0x11d))) switch (val) {
|
||||
(keyboard_recv(0x138) || keyboard_recv(0x11d))) switch (ret) {
|
||||
case 0x4f:
|
||||
t3100e_notify_set(0x01);
|
||||
break; /* End */
|
||||
@@ -329,23 +346,6 @@ kbc_translate(atkbc_t *dev, uint8_t val)
|
||||
break;
|
||||
}
|
||||
|
||||
kbc_at_log("ATkbc: translate is %s, ", translate ? "on" : "off");
|
||||
#ifdef ENABLE_KEYBOARD_AT_LOG
|
||||
kbc_at_log("scan code: ");
|
||||
if (translate) {
|
||||
kbc_at_log("%02X (original: ", (nont_to_t[val] | dev->sc_or));
|
||||
if (dev->sc_or == 0x80)
|
||||
kbc_at_log("F0 ");
|
||||
kbc_at_log("%02X)\n", val);
|
||||
} else
|
||||
kbc_at_log("%02X\n", val);
|
||||
#endif
|
||||
|
||||
ret = translate ? (nont_to_t[val] | dev->sc_or) : val;
|
||||
|
||||
if (dev->sc_or == 0x80)
|
||||
dev->sc_or = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,14 +9,33 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(hdd OBJECT hdd.c hdd_image.c hdd_table.c hdc.c hdc_st506_xt.c
|
||||
hdc_st506_at.c hdc_xta.c hdc_esdi_at.c hdc_esdi_mca.c hdc_xtide.c
|
||||
hdc_ide.c hdc_ide_ali5213.c hdc_ide_opti611.c hdc_ide_cmd640.c hdc_ide_cmd646.c
|
||||
hdc_ide_sff8038i.c hdc_ide_um8673f.c hdc_ide_w83769f.c lba_enhancer.c)
|
||||
add_library(hdd OBJECT
|
||||
hdd.c
|
||||
hdd_image.c
|
||||
hdd_table.c
|
||||
hdc.c
|
||||
hdc_st506_xt.c
|
||||
hdc_st506_at.c
|
||||
hdc_xta.c
|
||||
hdc_esdi_at.c
|
||||
hdc_esdi_mca.c
|
||||
hdc_xtide.c
|
||||
hdc_ide.c
|
||||
hdc_ide_ali5213.c
|
||||
hdc_ide_opti611.c
|
||||
hdc_ide_cmd640.c
|
||||
hdc_ide_cmd646.c
|
||||
hdc_ide_sff8038i.c
|
||||
hdc_ide_um8673f.c
|
||||
hdc_ide_w83769f.c
|
||||
lba_enhancer.c
|
||||
)
|
||||
|
||||
add_library(zip OBJECT zip.c)
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
#include <time.h>
|
||||
#include <wchar.h>
|
||||
#include <errno.h>
|
||||
#ifdef __unix__
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include <86box/path.h>
|
||||
@@ -183,6 +186,7 @@ prepare_new_hard_disk(uint8_t id, uint64_t full_size)
|
||||
{
|
||||
uint64_t target_size = (full_size + hdd_images[id].base) - ftello64(hdd_images[id].file);
|
||||
|
||||
#ifndef __unix__
|
||||
uint32_t size;
|
||||
uint32_t t;
|
||||
|
||||
@@ -217,7 +221,16 @@ prepare_new_hard_disk(uint8_t id, uint64_t full_size)
|
||||
pclog_toggle_suppr();
|
||||
|
||||
free(empty_sector_1mb);
|
||||
#else
|
||||
pclog("Creating hard disk image: ");
|
||||
int ret = ftruncate(fileno(hdd_images[id].file), (size_t) target_size);
|
||||
|
||||
if (ret) {
|
||||
pclog("failed\n");
|
||||
fatal("Could not create hard disk image\n");
|
||||
}
|
||||
pclog("OK!\n");
|
||||
#endif
|
||||
hdd_images[id].last_sector = (uint32_t) (full_size >> 9) - 1;
|
||||
|
||||
hdd_images[id].loaded = 1;
|
||||
|
||||
@@ -9,13 +9,28 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_monster.c fdc_pii15xb.c
|
||||
fdi2raw.c fdd_common.c fdd_86f.c fdd_fdi.c fdd_imd.c fdd_img.c fdd_pcjs.c
|
||||
fdd_mfm.c fdd_td0.c)
|
||||
add_library(fdd OBJECT
|
||||
fdd.c
|
||||
fdc.c
|
||||
fdc_magitronic.c
|
||||
fdc_monster.c
|
||||
fdc_pii15xb.c
|
||||
fdi2raw.c
|
||||
fdd_common.c
|
||||
fdd_86f.c
|
||||
fdd_fdi.c
|
||||
fdd_imd.c
|
||||
fdd_img.c
|
||||
fdd_pcjs.c
|
||||
fdd_mfm.c
|
||||
fdd_td0.c
|
||||
)
|
||||
|
||||
add_subdirectory(lzw)
|
||||
target_link_libraries(86Box lzw)
|
||||
|
||||
@@ -9,9 +9,16 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(game OBJECT gameport.c joystick_standard.c
|
||||
joystick_ch_flightstick_pro.c joystick_sw_pad.c joystick_tm_fcs.c)
|
||||
add_library(game OBJECT
|
||||
gameport.c
|
||||
joystick_standard.c
|
||||
joystick_ch_flightstick_pro.c
|
||||
joystick_sw_pad.c
|
||||
joystick_tm_fcs.c
|
||||
)
|
||||
|
||||
@@ -408,6 +408,7 @@ typedef struct voodoo_t {
|
||||
atomic_int cmd_read;
|
||||
atomic_int cmd_written;
|
||||
atomic_int cmd_written_fifo;
|
||||
atomic_int cmd_written_fifo_2;
|
||||
|
||||
voodoo_params_t params_buffer[PARAM_SIZE];
|
||||
atomic_int params_read_idx[4];
|
||||
@@ -426,7 +427,20 @@ typedef struct voodoo_t {
|
||||
uint32_t cmdfifo_amax;
|
||||
int cmdfifo_holecount;
|
||||
|
||||
atomic_uint cmd_status;
|
||||
uint32_t cmdfifo_base_2;
|
||||
uint32_t cmdfifo_end_2;
|
||||
uint32_t cmdfifo_size_2;
|
||||
int cmdfifo_rp_2;
|
||||
int cmdfifo_ret_addr_2;
|
||||
int cmdfifo_in_sub_2;
|
||||
atomic_int cmdfifo_depth_rd_2;
|
||||
atomic_int cmdfifo_depth_wr_2;
|
||||
atomic_int cmdfifo_enabled_2;
|
||||
uint32_t cmdfifo_amin_2;
|
||||
uint32_t cmdfifo_amax_2;
|
||||
int cmdfifo_holecount_2;
|
||||
|
||||
atomic_uint cmd_status, cmd_status_2;
|
||||
|
||||
uint32_t sSetupMode;
|
||||
vert_t verts[4];
|
||||
|
||||
@@ -47,6 +47,8 @@ typedef struct xga_t {
|
||||
|
||||
uint8_t pos_regs[8];
|
||||
uint8_t disp_addr;
|
||||
uint8_t dac_mask;
|
||||
uint8_t dac_status;
|
||||
uint8_t cfg_reg;
|
||||
uint8_t instance;
|
||||
uint8_t op_mode;
|
||||
@@ -106,6 +108,10 @@ typedef struct xga_t {
|
||||
uint16_t old_pal_addr_idx;
|
||||
uint16_t sprite_pal_addr_idx_prefetch;
|
||||
|
||||
int dac_addr;
|
||||
int dac_pos;
|
||||
int dac_r;
|
||||
int dac_g;
|
||||
int v_total;
|
||||
int dispend;
|
||||
int v_syncstart;
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
# Authors: dob205,
|
||||
# Jerome Vernet
|
||||
# David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2021 dob205.
|
||||
# Copyright 2021 Jerome Vernet.
|
||||
# Copyright 2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
# Pick the bundle icon depending on the release channel
|
||||
|
||||
@@ -9,20 +9,51 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c
|
||||
add_library(mch OBJECT
|
||||
machine.c
|
||||
machine_table.c
|
||||
m_xt.c
|
||||
m_xt_compaq.c
|
||||
m_xt_philips.c
|
||||
m_xt_t1000.c m_xt_t1000_vid.c m_xt_xi8088.c m_xt_zenith.c m_pcjr.c
|
||||
m_amstrad.c m_europc.c m_elt.c m_xt_olivetti.c m_tandy.c m_v86p.c
|
||||
m_at.c m_at_commodore.c
|
||||
m_at_t3100e.c m_at_t3100e_vid.c m_ps1.c m_ps1_hdc.c m_ps2_isa.c
|
||||
m_ps2_mca.c m_at_compaq.c m_at_286_386sx.c m_at_386dx_486.c
|
||||
m_at_socket4.c m_at_socket5.c m_at_socket7_3v.c m_at_socket7.c
|
||||
m_at_sockets7.c m_at_socket8.c m_at_slot1.c m_at_slot2.c m_at_socket370.c
|
||||
m_at_misc.c)
|
||||
m_xt_t1000.c
|
||||
m_xt_t1000_vid.c
|
||||
m_xt_xi8088.c
|
||||
m_xt_zenith.c
|
||||
m_pcjr.c
|
||||
m_amstrad.c
|
||||
m_europc.c
|
||||
m_elt.c
|
||||
m_xt_olivetti.c
|
||||
m_tandy.c
|
||||
m_v86p.c
|
||||
m_at.c
|
||||
m_at_commodore.c
|
||||
m_at_t3100e.c
|
||||
m_at_t3100e_vid.c
|
||||
m_ps1.c
|
||||
m_ps1_hdc.c
|
||||
m_ps2_isa.c
|
||||
m_ps2_mca.c
|
||||
m_at_compaq.c
|
||||
m_at_286_386sx.c
|
||||
m_at_386dx_486.c
|
||||
m_at_socket4.c
|
||||
m_at_socket5.c
|
||||
m_at_socket7_3v.c
|
||||
m_at_socket7.c
|
||||
m_at_sockets7.c
|
||||
m_at_socket8.c
|
||||
m_at_slot1.c
|
||||
m_at_slot2.c
|
||||
m_at_socket370.c
|
||||
m_at_misc.c
|
||||
)
|
||||
|
||||
if(AN430TX)
|
||||
target_compile_definitions(mch PRIVATE USE_AN430TX)
|
||||
|
||||
@@ -9,9 +9,21 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(mem OBJECT catalyst_flash.c i2c_eeprom.c intel_flash.c mem.c mmu_2386.c
|
||||
rom.c row.c smram.c spd.c sst_flash.c)
|
||||
add_library(mem OBJECT
|
||||
catalyst_flash.c
|
||||
i2c_eeprom.c
|
||||
intel_flash.c
|
||||
mem.c
|
||||
mmu_2386.c
|
||||
rom.c
|
||||
row.c
|
||||
smram.c
|
||||
spd.c
|
||||
sst_flash.c
|
||||
)
|
||||
|
||||
@@ -9,13 +9,32 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
set(net_sources)
|
||||
list(APPEND net_sources network.c net_pcap.c net_slirp.c net_dp8390.c net_3c501.c
|
||||
net_3c503.c net_ne2000.c net_pcnet.c net_wd8003.c net_plip.c net_event.c net_null.c
|
||||
net_eeprom_nmc93cxx.c net_tulip.c net_rtl8139.c net_l80225.c net_modem.c utils/getline.c)
|
||||
list(APPEND net_sources
|
||||
network.c
|
||||
net_pcap.c
|
||||
net_slirp.c
|
||||
net_dp8390.c
|
||||
net_3c501.c
|
||||
net_3c503.c
|
||||
net_ne2000.c
|
||||
net_pcnet.c
|
||||
net_wd8003.c
|
||||
net_plip.c
|
||||
net_event.c
|
||||
net_null.c
|
||||
net_eeprom_nmc93cxx.c
|
||||
net_tulip.c
|
||||
net_rtl8139.c
|
||||
net_l80225.c
|
||||
net_modem.c
|
||||
utils/getline.c
|
||||
)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(SLIRP REQUIRED IMPORTED_TARGET slirp)
|
||||
|
||||
@@ -9,11 +9,19 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(print OBJECT png.c prt_cpmap.c prt_escp.c prt_text.c prt_ps.c)
|
||||
add_library(print OBJECT
|
||||
png.c
|
||||
prt_cpmap.c
|
||||
prt_escp.c
|
||||
prt_text.c
|
||||
prt_ps.c
|
||||
)
|
||||
|
||||
if(PCL)
|
||||
target_compile_definitions(print PRIVATE USE_PCL)
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
#
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
|
||||
# Find includes in corresponding build directories
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
@@ -232,9 +237,15 @@ if(WIN32 AND NOT CPPTHREADS)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_sources(plat PRIVATE win_serial_passthrough.c win_netsocket.c)
|
||||
target_sources(plat PRIVATE
|
||||
win_serial_passthrough.c
|
||||
win_netsocket.c
|
||||
)
|
||||
else()
|
||||
target_sources(plat PRIVATE ../unix/unix_serial_passthrough.c ../unix/unix_netsocket.c)
|
||||
target_sources(plat PRIVATE
|
||||
../unix/unix_serial_passthrough.c
|
||||
../unix/unix_netsocket.c
|
||||
)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
@@ -268,18 +279,14 @@ if (WIN32)
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(
|
||||
plat
|
||||
PRIVATE
|
||||
target_link_libraries(plat PRIVATE
|
||||
Qt${QT_MAJOR}::Widgets
|
||||
Qt${QT_MAJOR}::Gui
|
||||
Qt${QT_MAJOR}::Network
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
target_link_libraries(
|
||||
ui
|
||||
PRIVATE
|
||||
target_link_libraries(ui PRIVATE
|
||||
Qt${QT_MAJOR}::Widgets
|
||||
Qt${QT_MAJOR}::Gui
|
||||
Qt${QT_MAJOR}::OpenGL
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
#include "ui_qt_harddiskdialog.h"
|
||||
|
||||
extern "C" {
|
||||
#ifdef __unix__
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <86box/86box.h>
|
||||
#include <86box/hdd.h>
|
||||
#include "../disk/minivhd/minivhd.h"
|
||||
@@ -447,6 +450,7 @@ HarddiskDialog::onCreateNewFile()
|
||||
}
|
||||
|
||||
// formats 0, 1 and 2
|
||||
#ifndef __unix__
|
||||
connect(this, &HarddiskDialog::fileProgress, this, [this](int value) { ui->progressBar->setValue(value); QApplication::processEvents(); });
|
||||
ui->progressBar->setVisible(true);
|
||||
[size, &file, this] {
|
||||
@@ -469,6 +473,13 @@ HarddiskDialog::onCreateNewFile()
|
||||
}
|
||||
emit fileProgress(100);
|
||||
}();
|
||||
#else
|
||||
int ret = ftruncate(file.handle(), (size_t) size);
|
||||
|
||||
if (ret) {
|
||||
QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory."));
|
||||
}
|
||||
#endif
|
||||
|
||||
QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive."));
|
||||
setResult(QDialog::Accepted);
|
||||
|
||||
@@ -337,7 +337,7 @@ MediaHistoryManager::removeMissingImages(device_index_list_t &device_history)
|
||||
}
|
||||
|
||||
char *p = checked_path.toUtf8().data();
|
||||
char temp[1024] = { 0 };
|
||||
char temp[MAX_IMAGE_PATH_LEN -1] = { 0 };
|
||||
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1))
|
||||
|
||||
@@ -200,7 +200,11 @@ RendererStack::mousePressEvent(QMouseEvent *event)
|
||||
void
|
||||
RendererStack::wheelEvent(QWheelEvent *event)
|
||||
{
|
||||
mouse_set_z(event->pixelDelta().y());
|
||||
double numSteps = (double) event->angleDelta().y() / 120.0;
|
||||
|
||||
mouse_set_z((int) numSteps);
|
||||
|
||||
event->accept();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -9,10 +9,24 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(scsi OBJECT scsi.c scsi_device.c scsi_cdrom.c scsi_disk.c
|
||||
scsi_x54x.c scsi_aha154x.c scsi_buslogic.c scsi_ncr5380.c scsi_ncr53c400.c
|
||||
scsi_t128.c scsi_ncr53c8xx.c scsi_pcscsi.c scsi_spock.c)
|
||||
add_library(scsi OBJECT
|
||||
scsi.c
|
||||
scsi_device.c
|
||||
scsi_cdrom.c
|
||||
scsi_disk.c
|
||||
scsi_x54x.c
|
||||
scsi_aha154x.c
|
||||
scsi_buslogic.c
|
||||
scsi_ncr5380.c
|
||||
scsi_ncr53c400.c
|
||||
scsi_t128.c
|
||||
scsi_ncr53c8xx.c
|
||||
scsi_pcscsi.c
|
||||
scsi_spock.c
|
||||
)
|
||||
|
||||
@@ -9,18 +9,39 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(sio OBJECT sio_acc3221.c sio_ali5123.c sio_f82c710.c sio_82091aa.c
|
||||
sio_fdc37c6xx.c sio_fdc37c67x.c sio_fdc37c669.c sio_fdc37c93x.c sio_fdc37m60x.c
|
||||
add_library(sio OBJECT
|
||||
sio_acc3221.c
|
||||
sio_ali5123.c
|
||||
sio_f82c710.c
|
||||
sio_82091aa.c
|
||||
sio_fdc37c6xx.c
|
||||
sio_fdc37c67x.c
|
||||
sio_fdc37c669.c
|
||||
sio_fdc37c93x.c
|
||||
sio_fdc37m60x.c
|
||||
sio_it86x1f.c
|
||||
sio_pc87306.c sio_pc87307.c sio_pc87309.c sio_pc87310.c sio_pc87311.c sio_pc87332.c
|
||||
sio_prime3b.c sio_prime3c.c
|
||||
sio_w83787f.c sio_w83877f.c sio_w83977f.c
|
||||
sio_um8663f.c sio_um8669f.c
|
||||
sio_vl82c113.c sio_vt82c686.c)
|
||||
sio_pc87306.c
|
||||
sio_pc87307.c
|
||||
sio_pc87309.c
|
||||
sio_pc87310.c
|
||||
sio_pc87311.c
|
||||
sio_pc87332.c
|
||||
sio_prime3b.c
|
||||
sio_prime3c.c
|
||||
sio_w83787f.c
|
||||
sio_w83877f.c
|
||||
sio_w83977f.c
|
||||
sio_um8663f.c
|
||||
sio_um8669f.c
|
||||
sio_vl82c113.c
|
||||
sio_vt82c686.c
|
||||
)
|
||||
|
||||
if(SIO_DETECT)
|
||||
target_sources(sio PRIVATE sio_detect.c)
|
||||
|
||||
@@ -9,16 +9,49 @@
|
||||
# CMake build script.
|
||||
#
|
||||
# Authors: David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2020-2021 David Hrdlička.
|
||||
# Copyright 2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(snd OBJECT sound.c snd_opl.c snd_opl_nuked.c snd_opl_ymfm.cpp snd_resid.cpp
|
||||
midi.c snd_speaker.c snd_pssj.c snd_lpt_dac.c snd_ac97_codec.c snd_ac97_via.c
|
||||
snd_lpt_dss.c snd_ps1.c snd_adlib.c snd_adlibgold.c snd_ad1848.c snd_audiopci.c
|
||||
snd_azt2316a.c snd_cms.c snd_cmi8x38.c snd_cs423x.c snd_gus.c snd_sb.c snd_sb_dsp.c
|
||||
snd_emu8k.c snd_mpu401.c snd_pas16.c snd_sn76489.c snd_ssi2001.c snd_wss.c snd_ym7128.c
|
||||
snd_optimc.c esfmu/esfm.c esfmu/esfm_registers.c snd_opl_esfm.c)
|
||||
add_library(snd OBJECT
|
||||
sound.c
|
||||
snd_opl.c
|
||||
snd_opl_nuked.c
|
||||
snd_opl_ymfm.cpp
|
||||
snd_resid.cpp
|
||||
midi.c
|
||||
snd_speaker.c
|
||||
snd_pssj.c
|
||||
snd_lpt_dac.c
|
||||
snd_ac97_codec.c
|
||||
snd_ac97_via.c
|
||||
snd_lpt_dss.c
|
||||
snd_ps1.c
|
||||
snd_adlib.c
|
||||
snd_adlibgold.c
|
||||
snd_ad1848.c
|
||||
snd_audiopci.c
|
||||
snd_azt2316a.c
|
||||
snd_cms.c
|
||||
snd_cmi8x38.c
|
||||
snd_cs423x.c
|
||||
snd_gus.c
|
||||
snd_sb.c
|
||||
snd_sb_dsp.c
|
||||
snd_emu8k.c
|
||||
snd_mpu401.c
|
||||
snd_pas16.c
|
||||
snd_sn76489.c
|
||||
snd_ssi2001.c
|
||||
snd_wss.c
|
||||
snd_ym7128.c
|
||||
snd_optimc.c
|
||||
esfmu/esfm.c
|
||||
esfmu/esfm_registers.c
|
||||
snd_opl_esfm.c
|
||||
)
|
||||
|
||||
if(OPENAL)
|
||||
if(VCPKG_TOOLCHAIN)
|
||||
|
||||
@@ -1585,7 +1585,7 @@ ess_mixer_write(uint16_t addr, uint8_t val, void *priv)
|
||||
ess->opl.priv);
|
||||
}
|
||||
}
|
||||
switch ((mixer->regs[0x40] >> 5) & 0x7) {
|
||||
if (ess->mpu != NULL) switch ((mixer->regs[0x40] >> 5) & 0x7) {
|
||||
default:
|
||||
break;
|
||||
case 0:
|
||||
@@ -2288,7 +2288,8 @@ ess_x688_pnp_config_changed(UNUSED(const uint8_t ld), isapnp_device_config_t *co
|
||||
addr = ess->midi_addr;
|
||||
if (addr) {
|
||||
ess->midi_addr = 0;
|
||||
mpu401_change_addr(ess->mpu, 0);
|
||||
if (ess->mpu != NULL)
|
||||
mpu401_change_addr(ess->mpu, 0);
|
||||
io_removehandler(addr, 0x0002,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
@@ -2298,7 +2299,7 @@ ess_x688_pnp_config_changed(UNUSED(const uint8_t ld), isapnp_device_config_t *co
|
||||
|
||||
sb_dsp_setaddr(&ess->dsp, 0);
|
||||
sb_dsp_setirq(&ess->dsp, 0);
|
||||
if (ess->pnp == 3)
|
||||
if ((ess->pnp == 3) && (ess->mpu != NULL))
|
||||
mpu401_setirq(ess->mpu, -1);
|
||||
sb_dsp_setdma8(&ess->dsp, ISAPNP_DMA_DISABLED);
|
||||
sb_dsp_setdma16_8(&ess->dsp, ISAPNP_DMA_DISABLED);
|
||||
@@ -2357,7 +2358,8 @@ ess_x688_pnp_config_changed(UNUSED(const uint8_t ld), isapnp_device_config_t *co
|
||||
if (ess->pnp == 3) {
|
||||
addr = config->io[2].base;
|
||||
if (addr != ISAPNP_IO_DISABLED) {
|
||||
mpu401_change_addr(ess->mpu, addr);
|
||||
if (ess->mpu != NULL)
|
||||
mpu401_change_addr(ess->mpu, addr);
|
||||
io_sethandler(addr, 0x0002,
|
||||
ess_fm_midi_read, NULL, NULL,
|
||||
ess_fm_midi_write, NULL, NULL,
|
||||
@@ -2368,7 +2370,7 @@ ess_x688_pnp_config_changed(UNUSED(const uint8_t ld), isapnp_device_config_t *co
|
||||
val = config->irq[0].irq;
|
||||
if (val != ISAPNP_IRQ_DISABLED) {
|
||||
sb_dsp_setirq(&ess->dsp, val);
|
||||
if (ess->pnp == 3)
|
||||
if ((ess->pnp == 3) && (ess->mpu != NULL))
|
||||
mpu401_setirq(ess->mpu, val);
|
||||
}
|
||||
|
||||
@@ -2383,7 +2385,7 @@ ess_x688_pnp_config_changed(UNUSED(const uint8_t ld), isapnp_device_config_t *co
|
||||
case 1:
|
||||
if (ess->pnp == 3) { /* Game */
|
||||
gameport_remap(ess->gameport, (config->activate && (config->io[0].base != ISAPNP_IO_DISABLED)) ? config->io[0].base : 0);
|
||||
} else { /* MPU-401 */
|
||||
} else if (ess->mpu != NULL) { /* MPU-401 */
|
||||
mpu401_change_addr(ess->mpu, 0);
|
||||
mpu401_setirq(ess->mpu, -1);
|
||||
|
||||
|
||||
@@ -10,14 +10,19 @@
|
||||
#
|
||||
# Authors: Cacodemon345
|
||||
# David Hrdlička, <hrdlickadavid@outlook.com>
|
||||
# Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
#
|
||||
# Copyright 2021 Cacodemon345.
|
||||
# Copyright 2021 David Hrdlička.
|
||||
# Copyright 2021 Andreas J. Reichel.
|
||||
# Copyright 2021-2022 Jasmine Iwanek.
|
||||
# Copyright 2021-2024 Jasmine Iwanek.
|
||||
#
|
||||
|
||||
add_library(plat OBJECT unix.c unix_serial_passthrough.c unix_netsocket.c)
|
||||
add_library(plat OBJECT
|
||||
unix.c
|
||||
unix_serial_passthrough.c
|
||||
unix_netsocket.c
|
||||
)
|
||||
|
||||
if (NOT CPPTHREADS)
|
||||
target_sources(plat PRIVATE unix_thread.c)
|
||||
@@ -27,7 +32,11 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(86Box Threads::Threads)
|
||||
|
||||
add_library(ui OBJECT unix_sdl.c unix_cdrom.c dummy_cdrom_ioctl.c)
|
||||
add_library(ui OBJECT
|
||||
unix_sdl.c
|
||||
unix_cdrom.c
|
||||
dummy_cdrom_ioctl.c
|
||||
)
|
||||
target_compile_definitions(ui PUBLIC _FILE_OFFSET_BITS=64)
|
||||
target_link_libraries(ui ${CMAKE_DL_LIBS})
|
||||
|
||||
|
||||
@@ -222,12 +222,12 @@ voodoo_readl(uint32_t addr, void *priv)
|
||||
{
|
||||
int fifo_entries = FIFO_ENTRIES;
|
||||
int swap_count = voodoo->swap_count;
|
||||
int written = voodoo->cmd_written + voodoo->cmd_written_fifo;
|
||||
int written = voodoo->cmd_written + voodoo->cmd_written_fifo + voodoo->cmd_written_fifo_2;
|
||||
int busy = (written - voodoo->cmd_read) || (voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr);
|
||||
|
||||
if (SLI_ENABLED && voodoo->type != VOODOO_2) {
|
||||
voodoo_t *voodoo_other = (voodoo == voodoo->set->voodoos[0]) ? voodoo->set->voodoos[1] : voodoo->set->voodoos[0];
|
||||
int other_written = voodoo_other->cmd_written + voodoo_other->cmd_written_fifo;
|
||||
int other_written = voodoo_other->cmd_written + voodoo_other->cmd_written_fifo + voodoo->cmd_written_fifo_2;
|
||||
|
||||
if (voodoo_other->swap_count > swap_count)
|
||||
swap_count = voodoo_other->swap_count;
|
||||
|
||||
@@ -204,6 +204,17 @@ enum {
|
||||
cmdFifoDepth0 = 0x44,
|
||||
cmdHoleCnt0 = 0x48,
|
||||
|
||||
cmdBaseAddr1 = 0x50,
|
||||
cmdBaseSize1 = 0x50 + 0x4,
|
||||
cmdBump1 = 0x50 + 0x8,
|
||||
cmdRdPtrL1 = 0x50 + 0xc,
|
||||
cmdRdPtrH1 = 0x50 + 0x10,
|
||||
cmdAMin1 = 0x50 + 0x14,
|
||||
cmdAMax1 = 0x50 + 0x1c,
|
||||
cmdStatus1 = 0x50 + 0x20,
|
||||
cmdFifoDepth1 = 0x50 + 0x24,
|
||||
cmdHoleCnt1 = 0x50 + 0x28,
|
||||
|
||||
Agp_agpReqSize = 0x00,
|
||||
Agp_agpHostAddressLow = 0x04,
|
||||
Agp_agpHostAddressHigh = 0x08,
|
||||
@@ -1341,6 +1352,29 @@ banshee_cmd_read(banshee_t *banshee, uint32_t addr)
|
||||
ret = voodoo->cmdfifo_size;
|
||||
break;
|
||||
|
||||
case cmdBaseAddr1:
|
||||
ret = voodoo->cmdfifo_base_2 >> 12;
|
||||
// banshee_log("Read cmdfifo_base %08x\n", ret);
|
||||
break;
|
||||
|
||||
case cmdRdPtrL1:
|
||||
ret = voodoo->cmdfifo_rp_2;
|
||||
// banshee_log("Read cmdfifo_rp %08x\n", ret);
|
||||
break;
|
||||
|
||||
case cmdFifoDepth1:
|
||||
ret = voodoo->cmdfifo_depth_wr_2 - voodoo->cmdfifo_depth_rd_2;
|
||||
// banshee_log("Read cmdfifo_depth %08x\n", ret);
|
||||
break;
|
||||
|
||||
case cmdStatus1:
|
||||
ret = voodoo->cmd_status_2;
|
||||
break;
|
||||
|
||||
case cmdBaseSize1:
|
||||
ret = voodoo->cmdfifo_size_2;
|
||||
break;
|
||||
|
||||
case 0x108:
|
||||
break;
|
||||
|
||||
@@ -1625,6 +1659,45 @@ banshee_cmd_write(banshee_t *banshee, uint32_t addr, uint32_t val)
|
||||
voodoo->cmdfifo_depth_wr = val & 0xffff;
|
||||
break;
|
||||
|
||||
case cmdBaseAddr1:
|
||||
voodoo->cmdfifo_base_2 = (val & 0xfff) << 12;
|
||||
voodoo->cmdfifo_end_2 = voodoo->cmdfifo_base_2 + (((voodoo->cmdfifo_size_2 & 0xff) + 1) << 12);
|
||||
#if 0
|
||||
banshee_log("cmdfifo_base=%08x cmdfifo_end=%08x %08x\n", voodoo->cmdfifo_base, voodoo->cmdfifo_end, val);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case cmdBaseSize1:
|
||||
voodoo->cmdfifo_size_2 = val;
|
||||
voodoo->cmdfifo_end_2 = voodoo->cmdfifo_base_2 + (((voodoo->cmdfifo_size_2 & 0xff) + 1) << 12);
|
||||
voodoo->cmdfifo_enabled_2 = val & 0x100;
|
||||
if (!voodoo->cmdfifo_enabled_2)
|
||||
voodoo->cmdfifo_in_sub_2 = 0; /*Not sure exactly when this should be reset*/
|
||||
#if 0
|
||||
banshee_log("cmdfifo_base=%08x cmdfifo_end=%08x\n", voodoo->cmdfifo_base, voodoo->cmdfifo_end);
|
||||
#endif
|
||||
break;
|
||||
|
||||
#if 0
|
||||
voodoo->cmdfifo_end = ((val >> 16) & 0x3ff) << 12;
|
||||
banshee_log("CMDFIFO base=%08x end=%08x\n", voodoo->cmdfifo_base, voodoo->cmdfifo_end);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case cmdRdPtrL1:
|
||||
voodoo->cmdfifo_rp_2 = val;
|
||||
break;
|
||||
case cmdAMin1:
|
||||
voodoo->cmdfifo_amin_2 = val;
|
||||
break;
|
||||
case cmdAMax1:
|
||||
voodoo->cmdfifo_amax_2 = val;
|
||||
break;
|
||||
case cmdFifoDepth1:
|
||||
voodoo->cmdfifo_depth_rd_2 = 0;
|
||||
voodoo->cmdfifo_depth_wr_2 = val & 0xffff;
|
||||
break;
|
||||
|
||||
default:
|
||||
banshee_log("Unknown banshee_cmd_write: addr=%08x val=%08x reg=0x%03x\n", addr, val, addr & 0x1fc);
|
||||
break;
|
||||
@@ -2064,6 +2137,60 @@ banshee_write_linear_l(uint32_t addr, uint32_t val, void *priv)
|
||||
voodoo->cmdfifo_holecount = ((voodoo->cmdfifo_amax - voodoo->cmdfifo_amin) >> 2) - 1;
|
||||
#if 0
|
||||
banshee_log("CMDFIFO out of order: amin=%08x amax=%08x holecount=%i\n", voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (voodoo->cmdfifo_enabled_2 && addr >= voodoo->cmdfifo_base_2 && addr < voodoo->cmdfifo_end_2) {
|
||||
#if 0
|
||||
banshee_log("CMDFIFO write %08x %08x old amin=%08x amax=%08x hlcnt=%i depth_wr=%i rp=%08x\n", addr, val, voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount, voodoo->cmdfifo_depth_wr, voodoo->cmdfifo_rp);
|
||||
#endif
|
||||
if (addr == voodoo->cmdfifo_base_2 && !voodoo->cmdfifo_holecount_2) {
|
||||
#if 0
|
||||
if (voodoo->cmdfifo_holecount)
|
||||
fatal("CMDFIFO reset pointers while outstanding holes\n");
|
||||
#endif
|
||||
/*Reset pointers*/
|
||||
voodoo->cmdfifo_amin_2 = voodoo->cmdfifo_base_2;
|
||||
voodoo->cmdfifo_amax_2 = voodoo->cmdfifo_base_2;
|
||||
voodoo->cmdfifo_depth_wr_2++;
|
||||
voodoo_wake_fifo_thread(voodoo);
|
||||
} else if (voodoo->cmdfifo_holecount_2) {
|
||||
#if 0
|
||||
if ((addr <= voodoo->cmdfifo_amin && voodoo->cmdfifo_amin != -4) || addr >= voodoo->cmdfifo_amax)
|
||||
fatal("CMDFIFO holecount write outside of amin/amax - amin=%08x amax=%08x holecount=%i\n", voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount);
|
||||
banshee_log("holecount %i\n", voodoo->cmdfifo_holecount);
|
||||
#endif
|
||||
voodoo->cmdfifo_holecount_2--;
|
||||
if (!voodoo->cmdfifo_holecount_2) {
|
||||
/*Filled in holes, resume normal operation*/
|
||||
voodoo->cmdfifo_depth_wr_2 += ((voodoo->cmdfifo_amax_2 - voodoo->cmdfifo_amin_2) >> 2);
|
||||
voodoo->cmdfifo_amin_2 = voodoo->cmdfifo_amax_2;
|
||||
voodoo_wake_fifo_thread(voodoo);
|
||||
#if 0
|
||||
banshee_log("hole filled! amin=%08x amax=%08x added %i words\n", voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, words_to_add);
|
||||
#endif
|
||||
}
|
||||
} else if (addr == voodoo->cmdfifo_amax_2 + 4) {
|
||||
/*In-order write*/
|
||||
voodoo->cmdfifo_amin_2 = addr;
|
||||
voodoo->cmdfifo_amax_2 = addr;
|
||||
voodoo->cmdfifo_depth_wr_2++;
|
||||
voodoo_wake_fifo_thread(voodoo);
|
||||
} else {
|
||||
/*Out-of-order write*/
|
||||
if (addr < voodoo->cmdfifo_amin_2) {
|
||||
/*Reset back to start. Note that write is still out of order!*/
|
||||
voodoo->cmdfifo_amin_2 = voodoo->cmdfifo_base_2 - 4;
|
||||
}
|
||||
#if 0
|
||||
else if (addr < voodoo->cmdfifo_amax)
|
||||
fatal("Out-of-order write really out of order\n");
|
||||
#endif
|
||||
voodoo->cmdfifo_amax_2 = addr;
|
||||
voodoo->cmdfifo_holecount_2 = ((voodoo->cmdfifo_amax_2 - voodoo->cmdfifo_amin_2) >> 2) - 1;
|
||||
#if 0
|
||||
banshee_log("CMDFIFO out of order: amin=%08x amax=%08x holecount=%i\n", voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -3313,6 +3440,7 @@ banshee_init_common(const device_t *info, char *fn, int has_sgram, int type, int
|
||||
banshee->voodoo->tex_mem_w[1] = (uint16_t *) banshee->svga.vram;
|
||||
banshee->voodoo->texture_mask = banshee->svga.vram_mask;
|
||||
banshee->voodoo->cmd_status = (1 << 28);
|
||||
banshee->voodoo->cmd_status_2 = (1 << 28);
|
||||
voodoo_generate_filter_v1(banshee->voodoo);
|
||||
|
||||
banshee->vidSerialParallelPort = VIDSERIAL_DDC_DCK_W | VIDSERIAL_DDC_DDA_W;
|
||||
|
||||
@@ -188,6 +188,40 @@ cmdfifo_get_f(voodoo_t *voodoo)
|
||||
return tempif.f;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
cmdfifo_get_2(voodoo_t *voodoo)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
if (!voodoo->cmdfifo_in_sub_2) {
|
||||
while (voodoo->fifo_thread_run && (voodoo->cmdfifo_depth_rd_2 == voodoo->cmdfifo_depth_wr_2)) {
|
||||
thread_wait_event(voodoo->wake_fifo_thread, -1);
|
||||
thread_reset_event(voodoo->wake_fifo_thread);
|
||||
}
|
||||
}
|
||||
|
||||
val = *(uint32_t *) &voodoo->fb_mem[voodoo->cmdfifo_rp_2 & voodoo->fb_mask];
|
||||
|
||||
if (!voodoo->cmdfifo_in_sub_2)
|
||||
voodoo->cmdfifo_depth_rd_2++;
|
||||
voodoo->cmdfifo_rp_2 += 4;
|
||||
|
||||
// voodoo_fifo_log(" CMDFIFO get %08x\n", val);
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline float
|
||||
cmdfifo_get_f_2(voodoo_t *voodoo)
|
||||
{
|
||||
union {
|
||||
uint32_t i;
|
||||
float f;
|
||||
} tempif;
|
||||
|
||||
tempif.i = cmdfifo_get_2(voodoo);
|
||||
return tempif.f;
|
||||
}
|
||||
|
||||
enum {
|
||||
CMDFIFO3_PC_MASK_RGB = (1 << 10),
|
||||
CMDFIFO3_PC_MASK_ALPHA = (1 << 11),
|
||||
@@ -283,6 +317,7 @@ voodoo_fifo_thread(void *param)
|
||||
}
|
||||
|
||||
voodoo->cmd_status |= (1 << 24);
|
||||
voodoo->cmd_status_2 |= (1 << 24);
|
||||
|
||||
while (voodoo->cmdfifo_enabled && (voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr || voodoo->cmdfifo_in_sub)) {
|
||||
uint64_t start_time = plat_timer_read();
|
||||
@@ -545,6 +580,269 @@ voodoo_fifo_thread(void *param)
|
||||
end_time = plat_timer_read();
|
||||
voodoo->time += end_time - start_time;
|
||||
}
|
||||
|
||||
while (voodoo->cmdfifo_enabled_2 && (voodoo->cmdfifo_depth_rd_2 != voodoo->cmdfifo_depth_wr_2 || voodoo->cmdfifo_in_sub_2)) {
|
||||
uint64_t start_time = plat_timer_read();
|
||||
uint64_t end_time;
|
||||
uint32_t header = cmdfifo_get_2(voodoo);
|
||||
uint32_t addr;
|
||||
uint32_t mask;
|
||||
int smode;
|
||||
int num;
|
||||
int num_verticies;
|
||||
int v_num;
|
||||
|
||||
#if 0
|
||||
voodoo_fifo_log(" CMDFIFO header %08x at %08x\n", header, voodoo->cmdfifo_rp);
|
||||
#endif
|
||||
|
||||
voodoo->cmd_status_2 &= ~7;
|
||||
voodoo->cmd_status_2 |= (header & 7);
|
||||
voodoo->cmd_status_2 |= (1 << 11);
|
||||
switch (header & 7) {
|
||||
case 0:
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO0\n");
|
||||
#endif
|
||||
voodoo->cmd_status_2 = (voodoo->cmd_status_2 & 0xffff8fff) | (((header >> 3) & 7) << 12);
|
||||
switch ((header >> 3) & 7) {
|
||||
case 0: /*NOP*/
|
||||
break;
|
||||
|
||||
case 1: /*JSR*/
|
||||
#if 0
|
||||
voodoo_fifo_log("JSR %08x\n", (header >> 4) & 0xfffffc);
|
||||
#endif
|
||||
voodoo->cmdfifo_ret_addr_2 = voodoo->cmdfifo_rp_2;
|
||||
voodoo->cmdfifo_rp_2 = (header >> 4) & 0xfffffc;
|
||||
voodoo->cmdfifo_in_sub_2 = 1;
|
||||
break;
|
||||
|
||||
case 2: /*RET*/
|
||||
voodoo->cmdfifo_rp_2 = voodoo->cmdfifo_ret_addr_2;
|
||||
voodoo->cmdfifo_in_sub_2 = 0;
|
||||
break;
|
||||
|
||||
case 3: /*JMP local frame buffer*/
|
||||
voodoo->cmdfifo_rp_2 = (header >> 4) & 0xfffffc;
|
||||
#if 0
|
||||
voodoo_fifo_log("JMP to %08x %04x\n", voodoo->cmdfifo_rp, header);
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal("Bad CMDFIFO0 %08x\n", header);
|
||||
}
|
||||
voodoo->cmd_status_2 = (voodoo->cmd_status_2 & ~(1 << 27)) | (voodoo->cmdfifo_in_sub_2 << 27);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
num = header >> 16;
|
||||
addr = (header & 0x7ff8) >> 1;
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO1 addr=%08x\n",addr);
|
||||
#endif
|
||||
while (num--) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
if ((addr & (1 << 13)) && voodoo->type >= VOODOO_BANSHEE) {
|
||||
#if 0
|
||||
if (voodoo->type != VOODOO_BANSHEE)
|
||||
fatal("CMDFIFO1: Not Banshee\n");
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO1: write %08x %08x\n", addr, val);
|
||||
#endif
|
||||
voodoo_2d_reg_writel(voodoo, addr, val);
|
||||
} else {
|
||||
if ((addr & 0x3ff) == SST_triangleCMD || (addr & 0x3ff) == SST_ftriangleCMD || (addr & 0x3ff) == SST_fastfillCMD || (addr & 0x3ff) == SST_nopCMD)
|
||||
voodoo->cmd_written_fifo_2++;
|
||||
|
||||
if (voodoo->type >= VOODOO_BANSHEE && (addr & 0x3ff) == SST_swapbufferCMD)
|
||||
voodoo->cmd_written_fifo_2++;
|
||||
voodoo_reg_writel(addr, val, voodoo);
|
||||
}
|
||||
|
||||
if (header & (1 << 15))
|
||||
addr += 4;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (voodoo->type < VOODOO_2)
|
||||
fatal("CMDFIFO2: Not Voodoo 2\n");
|
||||
mask = (header >> 3);
|
||||
addr = 8;
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
|
||||
voodoo_2d_reg_writel(voodoo, addr, val);
|
||||
}
|
||||
|
||||
addr += 4;
|
||||
mask >>= 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
num = (header >> 29) & 7;
|
||||
mask = header; //(header >> 10) & 0xff;
|
||||
smode = (header >> 22) & 0xf;
|
||||
voodoo_reg_writel(SST_sSetupMode, ((header >> 10) & 0xff) | (smode << 16), voodoo);
|
||||
num_verticies = (header >> 6) & 0xf;
|
||||
v_num = 0;
|
||||
if (((header >> 3) & 7) == 2)
|
||||
v_num = 1;
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO3: num=%i verts=%i mask=%02x\n", num, num_verticies, (header >> 10) & 0xff);
|
||||
voodoo_fifo_log("CMDFIFO3 %02x %i\n", (header >> 10), (header >> 3) & 7);
|
||||
#endif
|
||||
|
||||
while (num_verticies--) {
|
||||
voodoo->verts[3].sVx = cmdfifo_get_f_2(voodoo);
|
||||
voodoo->verts[3].sVy = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_RGB) {
|
||||
if (header & CMDFIFO3_PC) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
voodoo->verts[3].sBlue = (float) (val & 0xff);
|
||||
voodoo->verts[3].sGreen = (float) ((val >> 8) & 0xff);
|
||||
voodoo->verts[3].sRed = (float) ((val >> 16) & 0xff);
|
||||
voodoo->verts[3].sAlpha = (float) ((val >> 24) & 0xff);
|
||||
} else {
|
||||
voodoo->verts[3].sRed = cmdfifo_get_f_2(voodoo);
|
||||
voodoo->verts[3].sGreen = cmdfifo_get_f_2(voodoo);
|
||||
voodoo->verts[3].sBlue = cmdfifo_get_f_2(voodoo);
|
||||
}
|
||||
}
|
||||
if ((mask & CMDFIFO3_PC_MASK_ALPHA) && !(header & CMDFIFO3_PC))
|
||||
voodoo->verts[3].sAlpha = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_Z)
|
||||
voodoo->verts[3].sVz = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_Wb)
|
||||
voodoo->verts[3].sWb = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_W0)
|
||||
voodoo->verts[3].sW0 = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_S0_T0) {
|
||||
voodoo->verts[3].sS0 = cmdfifo_get_f_2(voodoo);
|
||||
voodoo->verts[3].sT0 = cmdfifo_get_f_2(voodoo);
|
||||
}
|
||||
if (mask & CMDFIFO3_PC_MASK_W1)
|
||||
voodoo->verts[3].sW1 = cmdfifo_get_f_2(voodoo);
|
||||
if (mask & CMDFIFO3_PC_MASK_S1_T1) {
|
||||
voodoo->verts[3].sS1 = cmdfifo_get_f_2(voodoo);
|
||||
voodoo->verts[3].sT1 = cmdfifo_get_f_2(voodoo);
|
||||
}
|
||||
if (v_num)
|
||||
voodoo_reg_writel(SST_sDrawTriCMD, 0, voodoo);
|
||||
else
|
||||
voodoo_reg_writel(SST_sBeginTriCMD, 0, voodoo);
|
||||
v_num++;
|
||||
if (v_num == 3 && ((header >> 3) & 7) == 0)
|
||||
v_num = 0;
|
||||
}
|
||||
while (num--)
|
||||
cmdfifo_get_2(voodoo);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
num = (header >> 29) & 7;
|
||||
mask = (header >> 15) & 0x3fff;
|
||||
addr = (header & 0x7ff8) >> 1;
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO4 addr=%08x\n",addr);
|
||||
#endif
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
|
||||
if ((addr & (1 << 13)) && voodoo->type >= VOODOO_BANSHEE) {
|
||||
if (voodoo->type < VOODOO_BANSHEE)
|
||||
fatal("CMDFIFO1: Not Banshee\n");
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO1: write %08x %08x\n", addr, val);
|
||||
#endif
|
||||
|
||||
voodoo_2d_reg_writel(voodoo, addr, val);
|
||||
} else {
|
||||
if ((addr & 0x3ff) == SST_triangleCMD || (addr & 0x3ff) == SST_ftriangleCMD || (addr & 0x3ff) == SST_fastfillCMD || (addr & 0x3ff) == SST_nopCMD)
|
||||
voodoo->cmd_written_fifo_2++;
|
||||
|
||||
if (voodoo->type >= VOODOO_BANSHEE && (addr & 0x3ff) == SST_swapbufferCMD)
|
||||
voodoo->cmd_written_fifo_2++;
|
||||
voodoo_reg_writel(addr, val, voodoo);
|
||||
}
|
||||
}
|
||||
|
||||
addr += 4;
|
||||
mask >>= 1;
|
||||
}
|
||||
while (num--)
|
||||
cmdfifo_get_2(voodoo);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
#if 0
|
||||
if (header & 0x3fc00000)
|
||||
fatal("CMDFIFO packet 5 has byte disables set %08x\n", header);
|
||||
#endif
|
||||
num = (header >> 3) & 0x7ffff;
|
||||
addr = cmdfifo_get_2(voodoo) & 0xffffff;
|
||||
if (!num)
|
||||
num = 1;
|
||||
#if 0
|
||||
voodoo_fifo_log("CMDFIFO5 addr=%08x num=%i\n", addr, num);
|
||||
#endif
|
||||
switch (header >> 30) {
|
||||
case 0: /*Linear framebuffer (Banshee)*/
|
||||
case 1: /*Planar YUV*/
|
||||
if (voodoo->texture_present[0][(addr & voodoo->texture_mask) >> TEX_DIRTY_SHIFT]) {
|
||||
#if 0
|
||||
voodoo_fifo_log("texture_present at %08x %i\n", addr, (addr & voodoo->texture_mask) >> TEX_DIRTY_SHIFT);
|
||||
#endif
|
||||
flush_texture_cache(voodoo, addr & voodoo->texture_mask, 0);
|
||||
}
|
||||
if (voodoo->texture_present[1][(addr & voodoo->texture_mask) >> TEX_DIRTY_SHIFT]) {
|
||||
#if 0
|
||||
voodoo_fifo_log("texture_present at %08x %i\n", addr, (addr & voodoo->texture_mask) >> TEX_DIRTY_SHIFT);
|
||||
#endif
|
||||
flush_texture_cache(voodoo, addr & voodoo->texture_mask, 1);
|
||||
}
|
||||
while (num--) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
if (addr <= voodoo->fb_mask)
|
||||
*(uint32_t *) &voodoo->fb_mem[addr] = val;
|
||||
addr += 4;
|
||||
}
|
||||
break;
|
||||
case 2: /*Framebuffer*/
|
||||
while (num--) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
voodoo_fb_writel(addr, val, voodoo);
|
||||
addr += 4;
|
||||
}
|
||||
break;
|
||||
case 3: /*Texture*/
|
||||
while (num--) {
|
||||
uint32_t val = cmdfifo_get_2(voodoo);
|
||||
voodoo_tex_writel(addr, val, voodoo);
|
||||
addr += 4;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal("CMDFIFO packet 5 bad space %08x %08x\n", header, voodoo->cmdfifo_rp);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal("Bad CMDFIFO packet %08x %08x\n", header, voodoo->cmdfifo_rp);
|
||||
}
|
||||
|
||||
end_time = plat_timer_read();
|
||||
voodoo->time += end_time - start_time;
|
||||
}
|
||||
|
||||
voodoo->voodoo_busy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -417,8 +417,8 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
|
||||
case 0x60:
|
||||
xga->sprite_pal_addr_idx = (xga->sprite_pal_addr_idx & 0x3f00) | val;
|
||||
svga->dac_pos = 0;
|
||||
svga->dac_addr = val & 0xff;
|
||||
xga->dac_pos = 0;
|
||||
xga->dac_addr = val & 0xff;
|
||||
break;
|
||||
case 0x61:
|
||||
xga->sprite_pal_addr_idx = (xga->sprite_pal_addr_idx & 0xff) | ((val & 0x3f) << 8);
|
||||
@@ -430,8 +430,8 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
|
||||
case 0x62:
|
||||
xga->sprite_pal_addr_idx_prefetch = (xga->sprite_pal_addr_idx_prefetch & 0x3f00) | val;
|
||||
svga->dac_pos = 0;
|
||||
svga->dac_addr = val & 0xff;
|
||||
xga->dac_pos = 0;
|
||||
xga->dac_addr = val & 0xff;
|
||||
break;
|
||||
case 0x63:
|
||||
xga->sprite_pal_addr_idx_prefetch = (xga->sprite_pal_addr_idx_prefetch & 0xff) | ((val & 0x3f) << 8);
|
||||
@@ -439,29 +439,29 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
break;
|
||||
|
||||
case 0x64:
|
||||
svga->dac_mask = val;
|
||||
xga->dac_mask = val;
|
||||
break;
|
||||
|
||||
case 0x65:
|
||||
svga->fullchange = svga->monitor->mon_changeframecount;
|
||||
switch (svga->dac_pos) {
|
||||
switch (xga->dac_pos) {
|
||||
case 0:
|
||||
svga->dac_r = val;
|
||||
svga->dac_pos++;
|
||||
xga->dac_r = val;
|
||||
xga->dac_pos++;
|
||||
break;
|
||||
case 1:
|
||||
svga->dac_g = val;
|
||||
svga->dac_pos++;
|
||||
xga->dac_g = val;
|
||||
xga->dac_pos++;
|
||||
break;
|
||||
case 2:
|
||||
xga->pal_b = val;
|
||||
index = svga->dac_addr & 0xff;
|
||||
svga->vgapal[index].r = svga->dac_r;
|
||||
svga->vgapal[index].g = svga->dac_g;
|
||||
index = xga->dac_addr & 0xff;
|
||||
svga->vgapal[index].r = xga->dac_r;
|
||||
svga->vgapal[index].g = xga->dac_g;
|
||||
svga->vgapal[index].b = xga->pal_b;
|
||||
xga->pallook[index] = makecol32(svga->vgapal[index].r, svga->vgapal[index].g, svga->vgapal[index].b);
|
||||
svga->dac_pos = 0;
|
||||
svga->dac_addr = (svga->dac_addr + 1) & 0xff;
|
||||
xga->dac_pos = 0;
|
||||
xga->dac_addr = (xga->dac_addr + 1) & 0xff;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -474,13 +474,13 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
break;
|
||||
|
||||
case 0x67:
|
||||
svga->dac_r = val;
|
||||
xga->dac_r = val;
|
||||
break;
|
||||
case 0x68:
|
||||
xga->pal_b = val;
|
||||
break;
|
||||
case 0x69:
|
||||
svga->dac_g = val;
|
||||
xga->dac_g = val;
|
||||
break;
|
||||
|
||||
case 0x6a:
|
||||
@@ -730,24 +730,24 @@ xga_ext_inb(uint16_t addr, void *priv)
|
||||
break;
|
||||
|
||||
case 0x64:
|
||||
ret = svga->dac_mask;
|
||||
ret = xga->dac_mask;
|
||||
break;
|
||||
|
||||
case 0x65:
|
||||
index = svga->dac_addr & 0xff;
|
||||
switch (svga->dac_pos) {
|
||||
index = xga->dac_addr & 0xff;
|
||||
switch (xga->dac_pos) {
|
||||
case 0:
|
||||
svga->dac_pos++;
|
||||
xga->dac_pos++;
|
||||
ret = svga->vgapal[index].r;
|
||||
break;
|
||||
case 1:
|
||||
svga->dac_pos++;
|
||||
xga->dac_pos++;
|
||||
ret = svga->vgapal[index].g;
|
||||
break;
|
||||
case 2:
|
||||
svga->dac_pos = 0;
|
||||
svga->dac_addr = (svga->dac_addr + 1) & 0xff;
|
||||
ret = svga->vgapal[index].b;
|
||||
xga->dac_pos = 0;
|
||||
xga->dac_addr = (xga->dac_addr + 1) & 0xff;
|
||||
ret = svga->vgapal[index].b;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -760,13 +760,13 @@ xga_ext_inb(uint16_t addr, void *priv)
|
||||
break;
|
||||
|
||||
case 0x67:
|
||||
ret = svga->dac_r;
|
||||
ret = xga->dac_r;
|
||||
break;
|
||||
case 0x68:
|
||||
ret = xga->pal_b;
|
||||
break;
|
||||
case 0x69:
|
||||
ret = svga->dac_g;
|
||||
ret = xga->dac_g;
|
||||
break;
|
||||
|
||||
case 0x6a:
|
||||
|
||||
Reference in New Issue
Block a user