Merge branch '86Box:master' into changeable_icon_set

This commit is contained in:
Laci bá
2021-11-14 21:38:20 +01:00
committed by GitHub
53 changed files with 3736 additions and 976 deletions

147
.ci/Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,147 @@
/*
* 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.
*
* Jenkins build pipeline definition.
*
*
*
* Authors: RichardG, <richardg867@gmail.com>
*
* Copyright 2021 RichardG.
*/
/* Run this on /script to get all approvals required to sync build numbers across jobs:
def approval = org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get()
approval.approveSignature('staticMethod jenkins.model.Jenkins getInstance')
approval.approveSignature('method hudson.model.ItemGroup getItem java.lang.String')
approval.approveSignature('field hudson.model.Job nextBuildNumber')
approval.approveSignature('method hudson.model.Job saveNextBuildNumber')
*/
def gitClone() {
cleanWs()
if (env.GIT_COMMIT == null)
env.GIT_COMMIT = BRANCH
println "[-] Building git tag [${env.GIT_COMMIT}]"
def scmVars = checkout scm: [$class: 'GitSCM',
branches: [[name: env.GIT_COMMIT]],
userRemoteConfigs: [[url: 'https://github.com/86Box/86Box.git']]]
env.GIT_COMMIT = scmVars.GIT_COMMIT
}
def windowsBuild() {
bat 'C:\\msys64\\msys2_shell.cmd -msys2 -defterm -here -no-start -c "exec .ci/build.sh"'
}
def unixBuild() {
sh 'chmod u+x .ci/build.sh && exec .ci/build.sh'
}
def saveArtifacts() {
archiveArtifacts artifacts: "${env.JOB_BASE_NAME}-*"
}
def anySuccess = false
def buildChain = [
'86Box': '86Box-Dev',
'86Box-Dev': '86Box-DevODR',
'86Box-DevODR': '86Box-Debug',
'86Box-TestBuildPleaseIgnore': '86Box-TestBuildPleaseIgnore2'
]
pipeline {
agent none
parameters {
string(name: 'BUILD_TYPE',
defaultValue: 'beta', /* !!! CHANGE HERE !!! for build type */
description: "Build type to pass on to CMake. Don't change this, you should instead change the default value on .ci/Jenkinsfile")
string(name: 'BRANCH',
defaultValue: 'master',
description: "Used internally to make sure all downstream builds use the same commit. Don't change this.")
}
environment {
DISCORD_WEBHOOK_URL = credentials('discord-webhook-url')
}
stages {
stage('Build Windows') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
node('windows') {
gitClone()
windowsBuild()
saveArtifacts()
}
script {
anySuccess = true
}
}
}
}
stage('Build Linux') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
node('debian') {
gitClone()
unixBuild()
saveArtifacts()
}
script {
anySuccess = true
}
}
}
}
}
post {
always {
script {
if (buildChain[env.JOB_BASE_NAME]) {
def nextJob = buildChain[env.JOB_BASE_NAME]
try {
/* Set next build number for this job. */
def job = Jenkins.instance.getItem(nextJob)
job.nextBuildNumber = env.BUILD_NUMBER as Integer
job.saveNextBuildNumber()
} catch (Exception e) {
println "[!] Could not set next build number for [$nextJob], make sure all required script approvals are in place"
}
/* Trigger this job. */
build propagate: false,
wait: false,
job: nextJob,
parameters: [
string(name: 'BUILD_TYPE', value: BUILD_TYPE),
string(name: 'BRANCH', value: env.GIT_COMMIT)
]
}
if (!anySuccess) {
println "[!] Failing build because all build stages failed"
currentBuild.result = 'FAILURE'
}
if (!env.JOB_BASE_NAME.contains("TestBuildPleaseIgnore")) {
discordSend webhookURL: DISCORD_WEBHOOK_URL
ircNotify()
}
}
}
}
}

584
.ci/build.sh Normal file
View File

@@ -0,0 +1,584 @@
#!/bin/sh
#
# 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.
#
# Jenkins build script.
#
#
# Authors: RichardG, <richardg867@gmail.com>
#
# Copyright 2021 RichardG.
#
#
# While this script was made for our Jenkins infrastructure, you can run it
# to produce Jenkins-like builds on your local machine by following these notes:
#
# - Run build.sh without parameters to see its usage
# - For Windows (MSYS MinGW) builds:
# - Packaging requires 7-Zip on Program Files
# - Packaging the Ghostscript DLL requires 32-bit and/or 64-bit Ghostscript on Program Files
# - Packaging the FluidSynth DLL requires it to be at /home/86Box/dll32/libfluidsynth.dll
# and/or /home/86Box/dll64/libfluidsynth64.dll (for 32-bit and 64-bit builds respectively)
# - Packaging the Discord DLL requires wget (MSYS should come with it)
# - For Linux builds:
# - Only Debian and derivatives are supported
# - dpkg and apt-get are called through sudo to manage dependencies
# - For macOS builds:
# - TBD
#
alias is_windows='[ ! -z "$MSYSTEM" ]'
alias is_mac='uname -s | grep -q Darwin'
try_make() {
# Try makefiles on two locations. I don't know what causes
# CMake to pick ./ instead of build/, but :worksonmymachine:
if [ -e "build/Makefile" ]
then
build_dir="$(pwd)/build"
cd build
make -j$(nproc) $*
local status=$?
cd ..
return $status
elif [ -e "Makefile" ]
then
build_dir="$(pwd)"
make -j$(nproc) $*
return $?
else
echo [!] No makefile found
return 1
fi
}
make_tar() {
# Install dependencies.
if ! which tar xz > /dev/null 2>&1
then
which apt-get > /dev/null 2>&1 && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tar xz-utils
fi
# Determine the best supported compression type.
local compression_flag=
local compression_ext=
if which xz > /dev/null 2>&1
then
local compression_flag=-J
local compression_ext=.xz
elif which bzip2 > /dev/null 2>&1
then
local compression_flag=-j
local compression_ext=.bz2
elif which gzip > /dev/null 2>&1
then
local compression_flag=-z
local compression_ext=.gz
fi
# Make tar verbose if requested.
[ ! -z "$VERBOSE" ] && local compression_flag="$compression_flag -v"
# tar is notorious for having many diverging implementations. For instance,
# the flags we use to strip UID/GID metadata can be --owner/group (GNU),
# --uid/gid (bsdtar) or even none at all (MSYS2 bsdtar). Account for such
# flag differences by checking if they're mentioned on the help text.
local ownership_flags=
local tar_help=$(tar --help 2>&1)
if echo $tar_help | grep -q -- --owner
then
local ownership_flags="--owner=0 --group=0"
elif echo $tar_help | grep -q -- --uid
then
local ownership_flags="--uid 0 --gid 0"
fi
# Run tar.
tar -c $compression_flag -f "$1$compression_ext" $ownership_flags *
return $?
}
build() {
# Create a line gap between builds.
[ $first_build -eq 0 ] && echo
first_build=0
# Set argument and environment variables.
local job_name=$JOB_BASE_NAME
local build_type=$BUILD_TYPE
local git_hash=$(echo $GIT_COMMIT | cut -c1-8)
local arch=$1
shift
local cmake_flags=$*
local cmake_flags_extra=
# Check if at least the job name was received.
if [ -z "$job_name" ]
then
echo [!] Missing environment variables: received JOB_BASE_NAME=[$JOB_BASE_NAME] BUILD_TYPE=[$BUILD_TYPE] BUILD_NUMBER=[$BUILD_NUMBER] GIT_COMMIT=[$GIT_COMMIT]
return 1
fi
echo [-] Building [$job_name] [$build_type] [$build_qualifier] [$git_hash] for [$arch] with flags [$cmake_flags]
# Switch to the correct directory.
cd "$cwd"
[ -e "build.sh" ] && cd ..
# Perform platform-specific setup.
if is_windows
then
# Switch into the correct MSYSTEM if required.
local msys=MINGW$arch
[ ! -d "/$msys" ] && local msys=CLANG$arch
if [ -d "/$msys" ]
then
if [ "$MSYSTEM" != "$msys" ]
then
# Call build with the correct MSYSTEM.
echo [-] Switching to MSYSTEM [$msys]
cd "$cwd"
CHERE_INVOKING=yes MSYSTEM="$msys" JOB_BASE_NAME="$JOB_BASE_NAME" BUILD_TYPE="$BUILD_TYPE" BUILD_NUMBER="$BUILD_NUMBER" GIT_COMMIT="$GIT_COMMIT" \
bash -lc 'exec "'$0'" -b "'$arch'" '$cmake_flags && job_status=0 # make sure the main script exits cleanly on any success
return $?
fi
else
echo [!] No MSYSTEM for architecture [$arch]
return 2
fi
echo [-] Using MSYSTEM [$MSYSTEM]
elif is_mac
then
# macOS lacks nproc, but sysctl can do the same job.
alias nproc='sysctl -n hw.logicalcpu'
else
# Determine Debian architecture.
case $arch in
x86) local arch_deb="i386";;
x86_64) local arch_deb="amd64";;
arm32) local arch_deb="armhf";;
*) local arch_deb="$arch";;
esac
# Establish general and architecture-specific dependencies.
local pkgs="cmake git tar xz-utils dpkg-dev rpm"
if [ "$(dpkg --print-architecture)" = "$arch_deb" ]
then
local pkgs="$pkgs build-essential"
else
sudo dpkg --add-architecture $arch_deb
local pkgs="$pkgs crossbuild-essential-$arch_deb"
fi
local libpkgs=""
local longest_libpkg=0
for pkg in libc6-dev linux-libc-dev libopenal-dev libfreetype6-dev libsdl2-dev libpng-dev
do
local libpkgs="$libpkgs $pkg:$arch_deb"
local length=$(echo -n $pkg | sed 's/-dev$//g' | wc -c)
[ $length -gt $longest_libpkg ] && longest_libpkg=$length
done
# Determine GNU toolchain architecture.
case $arch in
x86) local arch_gnu="i686-linux-gnu";;
arm32) local arch_gnu="arm-linux-gnueabihf";;
arm64) local arch_gnu="aarch64-linux-gnu";;
*) local arch_gnu="$arch-linux-gnu";;
esac
# Create CMake toolchain file.
cat << EOF > toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR $arch)
set(CMAKE_AR $arch_gnu-ar)
set(CMAKE_ASM_COMPILER $arch_gnu-gcc)
set(CMAKE_C_COMPILER $arch_gnu-gcc)
set(CMAKE_CXX_COMPILER $arch_gnu-g++)
set(CMAKE_LINKER $arch_gnu-ld)
set(CMAKE_OBJCOPY $arch_gnu-objcopy)
set(CMAKE_RANLIB $arch_gnu-ranlib)
set(CMAKE_SIZE $arch_gnu-size)
set(CMAKE_STRIP $arch_gnu-strip)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
EOF
local cmake_flags_extra="$cmake_flags_extra -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake"
# Install or update dependencies.
echo [-] Installing dependencies through apt
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install $pkgs $libpkgs
sudo apt-get clean
fi
# Clean workspace.
echo [-] Cleaning workspace
try_make clean > /dev/null
find . \( -name Makefile -o -name CMakeCache.txt -o -name CMakeFiles \) -exec rm -rf "{}" \; 2> /dev/null
rm -rf build
# Determine available dynarec types for this architecture, and
# also specify ARCH right away to skip the arch_detect process.
case $arch in
# old dynarec available
32 | x86) local cmake_flags_extra="$cmake_flags_extra -D ARCH=i386";;
64 | x86_64) local cmake_flags_extra="$cmake_flags_extra -D ARCH=x86_64";;
# new dynarec only
ARM32 | arm32) local cmake_flags_extra="$cmake_flags_extra -D NEW_DYNAREC=ON -D ARCH=arm";;
ARM64 | arm64) local cmake_flags_extra="$cmake_flags_extra -D NEW_DYNAREC=ON -D ARCH=arm64";;
# no dynarec
*) local cmake_flags_extra="$cmake_flags_extra -D DYNAREC=OFF";;
esac
# Determine additional CMake flags.
[ ! -z "$build_type" ] && local cmake_flags_extra="$cmake_flags_extra -D BUILD_TYPE=\"$build_type\""
[ ! -z "$build_qualifier" ] && local cmake_flags_extra="$cmake_flags_extra -D EMU_BUILD=\"$build_qualifier\""
[ ! -z "$build_number" ] && local cmake_flags_extra="$cmake_flags_extra -D EMU_BUILD_NUM=\"$build_number\""
[ ! -z "$git_hash" ] && local cmake_flags_extra="$cmake_flags_extra -D EMU_GIT_HASH=\"$git_hash\""
local cmake_flags_extra="$cmake_flags_extra -D EMU_COPYRIGHT_YEAR=\"$(date +%Y)\""
# Run CMake.
echo [-] Running CMake with flags [$cmake_flags $cmake_flags_extra]
eval cmake -G \"Unix Makefiles\" $cmake_flags $cmake_flags_extra .
local status=$?
if [ $? -gt 0 ]
then
echo [!] CMake failed with status [$status]
return 3
fi
# Run actual build.
echo [-] Running build
try_make
local status=$?
if [ $status -gt 0 ]
then
echo [!] Make failed with status [$status]
return 4
fi
# Create temporary directory for archival.
echo [-] Gathering archive files
rm -rf archive_tmp
mkdir archive_tmp
if [ ! -d "archive_tmp" ]
then
echo [!] Archive directory creation failed
return 5
fi
# Archive the executable and its dependencies.
# The executable should always be archived last for the check after this block.
local status=$?
if is_windows
then
# Determine Program Files directory for Ghostscript and 7-Zip.
# Manual checks because MSYS is bad at passing the ProgramFiles variables.
local pf="/c/Program Files"
local sevenzip="$pf/7-Zip/7z.exe"
[ "$arch" = "32" -a -d "/c/Program Files (x86)" ] && pf="/c/Program Files (x86)"
# Archive freetype from local MSYS installation.
.ci/static2dll.sh -p freetype2 /$MSYSTEM/lib/libfreetype.a archive_tmp/libfreetype.dll
# Archive Ghostscript DLL from local official distribution installation.
for gs in "$pf"/gs/gs*.*.*
do
cp -p "$gs"/bin/gsdll*.dll archive_tmp/
done
# Archive Discord Game SDK DLL from their CDN.
local discordarch=
[ "$arch" = "32" ] && local discordarch=x86
[ "$arch" = "64" ] && local discordarch=x86_64
if [ ! -z "$discordarch" ]
then
[ ! -e "discord_game_sdk.zip" ] && wget -qOdiscord_game_sdk.zip https://dl-game-sdk.discordapp.net/2.5.6/discord_game_sdk.zip
"$sevenzip" e -y -oarchive_tmp discord_game_sdk.zip lib/$discordarch/discord_game_sdk.dll
fi
# Archive other DLLs from local directory.
cp -p /home/$project/dll$arch/* archive_tmp/
# Archive executable.
mv "$build_dir"/src/$project.exe archive_tmp/
local status=$?
elif is_mac
then
# TBD
:
else
# Archive readme with library package versions.
echo Libraries used to compile this $arch build of $project: > archive_tmp/README
dpkg-query -f '${Package} ${Version}\n' -W $libpkgs | sed "s/-dev / /g" | while IFS=" " read pkg version
do
for i in $(seq $(expr $longest_libpkg - $(echo -n $pkg | wc -c)))
do
echo -n " " >> archive_tmp/README
done
echo $pkg $version >> archive_tmp/README
done
# Archive executable.
mv "$build_dir"/src/$project archive_tmp/
local status=$?
fi
# Check if the executable move succeeded.
if [ $status -gt 0 ]
then
echo [!] Executable move failed with status [$status]
return 6
fi
# Produce artifact archive.
echo [-] Creating artifact archive
cd archive_tmp
if is_windows
then
# Create zip.
"$sevenzip" a -y -mx9 "..\\$job_name-Windows-$arch$build_fn.zip" *
local status=$?
elif is_mac
then
# TBD
:
else
# Create binary tarball.
make_tar ../$job_name-Linux-$arch$build_fn.tar
local status=$?
fi
cd ..
# Check if the archival succeeded.
if [ $status -gt 0 ]
then
echo [!] Artifact archive creation failed with status [$status]
return 7
fi
# All good.
echo [-] Build of [$job_name] [$build_type] [$build_qualifier] [$git_hash] for [$arch] with flags [$cmake_flags] successful
job_status=0
}
tarball() {
# Create a line gap between builds.
[ $first_build -eq 0 ] && echo
first_build=0
# Set argument and environment variables.
local job_name=$JOB_BASE_NAME
# Check if the job name was received.
if [ -z "$job_name" ]
then
echo [!] Missing environment variable: received JOB_BASE_NAME=[$JOB_BASE_NAME]
return 1
fi
echo [-] Making source tarball for [$job_name]
# Switch to the correct directory.
cd "$cwd"
[ -e "build.sh" ] && cd ..
# Clean local tree of gitignored files.
git clean -dfX
# Save current HEAD commit to VERSION.
git log -1 > VERSION || rm -f VERSION
# Archive source.
make_tar $job_name-Source$build_fn.tar
# Check if the archival succeeded.
if [ $? -gt 0 ]
then
echo [!] Tarball creation failed with status [$status]
return 2
fi
echo [-] Source tarball for [$job_name] created successfully
}
# Set common variables.
project=86Box
cwd=$(pwd)
first_build=1
job_status=1
# Parse arguments.
single_build=0
tarball=0
args=0
while [ $# -gt 0 ]
do
case $1 in
-b)
# Execute single build.
[ -z "$JOB_BASE_NAME" ] && JOB_BASE_NAME=$project-Custom
single_build=1
shift
break
;;
-t)
# Create tarball.
[ -z "$JOB_BASE_NAME" ] && JOB_BASE_NAME=$project
tarball=1
shift
;;
*)
# Allow for manually specifying Jenkins variables.
if [ $args -eq 0 ]
then
JOB_BASE_NAME=$1
args=1
elif [ $args -eq 1 ]
then
BUILD_TYPE=$1
args=2
elif [ $args -eq 2 ]
then
BUILD_NUMBER=$1
args=3
elif [ $args -eq 3 ]
then
GIT_COMMIT=$1
args=4
fi
shift
;;
esac
done
# Check if at least the job name was specified.
if [ -z "$JOB_BASE_NAME" ]
then
echo [!] Manual usage: build.sh [{job_name} [{build_type} [{build_number'|"'build_qualifier'"'} [git_hash]]]] [-t] [-b {architecture} [cmake_flags...]]
exit 100
fi
# Generate build information. Note that variable names are case sensitive.
build_number=$BUILD_NUMBER
if echo $build_number | grep -q " "
then
# A full build qualifier was specified.
build_qualifier="$build_number"
build_fn="-"$(echo "$build_number" | rev | cut -f1 -d" " | rev | tr '\\/:*?"<>|' '_')
build_number= # no build number
elif [ ! -z "$build_number" ]
then
# A build number was specified.
build_qualifier="build $build_number"
build_fn="-b$build_number"
build_number=$(echo "$build_number" | sed "s/[^0-9]//g") # remove non-numeric characters from build number
else
# No build data was specified.
build_number=
build_qualifier=
build_fn=
fi
# Make tarball if requested.
if [ $tarball -ne 0 ]
then
tarball
status=$?
[ $single_build -eq 0 ] && exit $status
fi
# Run single build if requested.
if [ $single_build -ne 0 ]
then
build $*
exit $?
fi
# Run builds according to the Jenkins job name.
case $JOB_BASE_NAME in
$project | $project-TestBuildPleaseIgnore*)
if is_windows
then
build 32 --preset=regular
build 64 --preset=regular
elif is_mac
then
build Universal --preset=regular
else
tarball
build x86 --preset=regular
build x86_64 --preset=regular
build arm32 --preset=regular
build arm64 --preset=regular
fi
;;
$project-Debug)
if is_windows
then
build 32 --preset=debug
build 64 --preset=debug
elif is_mac
then
build Universal --preset=debug
else
build x86 --preset=debug
build x86_64 --preset=debug
build arm32 --preset=debug
build arm64 --preset=debug
fi
;;
$project-Dev)
if is_windows
then
build 32 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
build 64 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
elif is_mac
then
build Universal --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
else
build x86 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
build x86_64 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
build arm32 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
build arm64 --preset=experimental -D NEW_DYNAREC=ON -D VNC=OFF
fi
;;
$project-DevODR)
if is_windows
then
build 32 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
build 64 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
elif is_mac
then
build Universal --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
else
build x86 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
build x86_64 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
build arm32 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
build arm64 --preset=experimental -D NEW_DYNAREC=OFF -D VNC=OFF
fi
;;
*)
echo [!] Unknown job name $JOB_BASE_NAME
exit 1
;;
esac
echo
echo [-] Exiting with status [$job_status]
exit $job_status

160
.ci/static2dll.sh Normal file
View File

@@ -0,0 +1,160 @@
#!/bin/sh
#
# 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.
#
# Script for converting MinGW static libraries into a DLL.
#
#
# Authors: RichardG, <richardg867@gmail.com>
#
# Copyright 2021 RichardG.
#
def_file="static2dll.def"
seen_file="static2dll.seen"
libs_file="static2dll.libs"
find_lib() {
# Try to find a static library's file.
local msystem_lib="/$(echo $MSYSTEM | tr '[:upper:]' '[:lower:]')/lib/lib"
if [ -e "$msystem_lib$1.a" ]
then
echo "$msystem_lib$1.a"
elif [ -e "$msystem_lib$1.dll.a" ]
then
echo "$msystem_lib$1.dll.a"
else
# Return dynamic reference to the library.
echo "-l$1"
return 1
fi
}
add_lib() {
# Always make sure this lib is listed after the last lib that depends on it.
old_libs=$(cat "$libs_file")
rm -f "$libs_file"
for lib in $old_libs
do
[ "$lib" != "$*" ] && echo "$lib" >> "$libs_file"
done
echo "$*" >> "$libs_file"
# Add libstdc++ in the end if required.
if echo "$*" | grep -q "/"
then
grep -Eq -- "__cxa_|__gxx_" "$1" 2> /dev/null && add_lib -static -lstdc++
fi
# Add libiconv for libintl.
if echo "$*" | grep -q "libintl"
then
add_lib $(find_lib iconv)
fi
# Add libuuid for glib.
if echo "$*" | grep -q "libglib"
then
add_lib $(find_lib uuid)
fi
}
run_pkgconfig() {
local cache_file="static2dll.$1.cache"
if [ -e "$cache_file" ]
then
cat "$cache_file"
else
pkg-config --static --libs "$1" 2> /dev/null | tee "$cache_file"
fi
}
parse_pkgconfig() {
# Parse arguments.
local layers=$1
shift
local input_lib_name=$1
shift
# Don't process the same file again.
grep -q '^'$input_lib_name'$' "$seen_file" && return
echo $input_lib_name >> "$seen_file"
echo "$layers" parse_pkgconfig $input_lib_name
# Parse pkg-config arguments.
for arg in $*
do
local arg_base="$(echo $arg | cut -c1-2)"
if [ "x$arg_base" = "x-l" ]
then
# Don't process the same lib again.
local lib_name="$(echo $arg | cut -c3-)"
[ "x$lib_name" == "x$input_lib_name" ] && continue
# Add lib path.
add_lib "$(find_lib $lib_name)"
# Get this lib's dependencies through pkg-config.
local pkgconfig="$(run_pkgconfig "$lib_name")"
[ $? -eq 0 ] && parse_pkgconfig "$layers"'>' "$lib_name" $pkgconfig || echo $lib_name >> "$seen_file"
elif [ "x$(echo $arg_base | cut -c1)" = "x-" ]
then
# Ignore other arguments.
continue
else
# Add lib path.
add_lib "$arg"
fi
done
}
# Parse arguments.
case $1 in
-p) # -p pkg_config_name static_lib_path out_dll
shift
base_pkgconfig=$(run_pkgconfig "$1")
base_path="$2"
base_name="$1"
;;
*) # pc_path static_lib_path out_dll
base_pkgconfig="$(grep ^Libs.private: $1 | cut -d: -f2-)"
base_path="$2"
base_name="$2"
;;
esac
# Check arguments.
if [ -z "$base_pkgconfig" -o -z "$base_path" -o -z "$base_name" ]
then
echo Usage:
echo static2dll.sh -p {pkgconfig_package_name} {static_lib_path} {out_dll_name}
echo static2dll.sh {pc_file_path} {static_lib_path} {out_dll_name}
exit 1
fi
# Produce .def file.
echo LIBRARY $(basename "$3") > "$def_file"
echo EXPORTS >> "$def_file"
nm "$base_path" | grep " [TC] " | sed "/ _/s// /" | awk '{ print $3 }' >> "$def_file"
# Parse dependencies recursively.
rm -f "$seen_file" "$libs_file" "$libs_file.tmp"
touch "$seen_file" "$libs_file"
parse_pkgconfig '>' $base_name $base_pkgconfig
# Produce final DLL.
dllwrap --def "$def_file" -o "$3" -Wl,--allow-multiple-definition "$base_path" $(cat "$libs_file")
status=$?
[ $status -eq 0 ] && rm -f "$def_file" "$seen_file" "$libs_file" "static2dll.*.cache"
# Update final DLL timestamp.
touch -r "$base_path" "$3"
exit $status

View File

@@ -152,7 +152,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: sudo apt install gcc-11 g++-11 libfreetype-dev libsdl2-dev libpng-dev libopenal-dev libc6-dev
run: sudo apt update && sudo apt install gcc-11 g++-11 libfreetype-dev libsdl2-dev libpng-dev libopenal-dev libc6-dev
- name: Configure CMake
run: >-
cmake -S . -B build

48
.gitignore vendored
View File

@@ -1,15 +1,39 @@
src/*.o
src/*.exe
src/*.res
src/*.d
src/*.cfg
src/*.log
src/*.dll
src/*.dmp
src/NUL
src/nvr/
src/roms/
/.vs
# CMake
/CMakeUserPresets.json
/CMakeCache.txt
/build
CMakeFiles
Makefile
*.a
*.cmake
/src/*.exe
/src/86Box
/src/include/86box/version.h
# Legacy Makefile
/src/*.o
/src/*.d
/src/*.res
/src/*.dll
/src/NUL
# State
/src/*.cfg
/src/*.log
/src/*.dmp
/src/nvr/
/src/printer/
/src/roms/
/src/screenshots/
# Build scripts
/archive_tmp
/static2dll.*
/*.zip
/*.tar
/*.tar.*
/VERSION
# Visual Studio Code
/.vs
/.vscode

View File

@@ -23,7 +23,7 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
project(86Box
VERSION 3.0
DESCRIPTION "Emulator of x86-based systems"
HOMEPAGE_URL "https://86box.github.io/"
HOMEPAGE_URL "https://86box.net"
LANGUAGES C CXX)
# Detect the target architecture by trying to compile `src/arch_detect.c`
@@ -88,6 +88,15 @@ CMAKE_DEPENDENT_OPTION(VNC "VNC renderer" ON "DEV_BRANCH" OFF)
CMAKE_DEPENDENT_OPTION(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
CMAKE_DEPENDENT_OPTION(VECT486VL "HP Vectra 486VL" ON "DEV_BRANCH" OFF)
string(TOLOWER "${BUILD_TYPE}" BUILD_TYPE_LOWER)
if(BUILD_TYPE_LOWER STREQUAL "release")
add_compile_definitions(RELEASE_BUILD)
elseif(BUILD_TYPE_LOWER STREQUAL "beta")
add_compile_definitions(BETA_BUILD)
elseif(BUILD_TYPE_LOWER STREQUAL "alpha")
add_compile_definitions(ALPHA_BUILD)
endif()
# HACK: Avoid a MSVC2019 compiler bug on ARM64 Debug builds
if(MSVC_TOOLSET_VERSION GREATER_EQUAL 142 AND ARCH STREQUAL "arm64")
# Define a cache option in case somebody wants to disable this workaround

View File

@@ -16,8 +16,8 @@
"CMAKE_CXX_FLAGS_RELEASE": "-g0 -O3",
"CMAKE_C_FLAGS_DEBUG": "-ggdb -Og",
"CMAKE_CXX_FLAGS_DEBUG": "-ggdb -Og",
"CMAKE_C_FLAGS_OPTIMIZED": "-march=native -mtune=native -O3 -ffp-contract=last -flto",
"CMAKE_CXX_FLAGS_OPTIMIZED": "-march=native -mtune=native -O3 -ffp-contract=last -flto"
"CMAKE_C_FLAGS_OPTIMIZED": "-march=native -mtune=native -O3 -ffp-contract=fast -flto",
"CMAKE_CXX_FLAGS_OPTIMIZED": "-march=native -mtune=native -O3 -ffp-contract=fast -flto"
},
"hidden": true,
"binaryDir": "build"

View File

@@ -197,7 +197,7 @@ int unscaled_size_y = SCREEN_RES_Y; /* current unscaled size Y */
int efscrnsz_y = SCREEN_RES_Y;
static wchar_t mouse_msg[2][200];
static wchar_t mouse_msg[3][200];
#ifndef RELEASE_BUILD
@@ -681,7 +681,7 @@ usage:
info = localtime(&now);
strftime(temp, sizeof(temp), "%Y/%m/%d %H:%M:%S", info);
pclog("#\n# %ls v%ls logfile, created %s\n#\n",
EMU_NAME_W, EMU_VERSION_W, temp);
EMU_NAME_W, EMU_VERSION_FULL_W, temp);
pclog("# VM: %s\n#\n", vm_name);
pclog("# Emulator path: %s\n", exe_path);
pclog("# Userfiles path: %s\n", usr_path);
@@ -1063,11 +1063,13 @@ void update_mouse_msg()
mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name)+1);
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
EMU_NAME_W, EMU_VERSION_W, wmachine, wcpufamily, wcpu,
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
plat_get_string(IDS_2077));
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
EMU_NAME_W, EMU_VERSION_W, wmachine, wcpufamily, wcpu,
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls",
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu);
}
void
@@ -1153,6 +1155,7 @@ static void _ui_window_title(void *s)
void
pc_run(void)
{
int mouse_msg_idx;
wchar_t temp[200];
/* Trigger a hard reset if one is pending. */
@@ -1177,7 +1180,8 @@ pc_run(void)
}
if (title_update) {
swprintf(temp, sizeof_w(temp), mouse_msg[!!mouse_capture], fps);
mouse_msg_idx = (mouse_type == MOUSE_TYPE_NONE) ? 2 : !!mouse_capture;
swprintf(temp, sizeof_w(temp), mouse_msg[mouse_msg_idx], fps);
#ifdef __APPLE__
/* Needed due to modifying the UI on the non-main thread is a big no-no. */
dispatch_async_f(dispatch_get_main_queue(), wcsdup((const wchar_t *) temp), _ui_window_title);

View File

@@ -138,6 +138,15 @@ find_package(PNG REQUIRED)
include_directories(${PNG_INCLUDE_DIRS})
target_link_libraries(86Box PNG::PNG)
if(NOT CMAKE_PROJECT_VERSION_PATCH)
set(CMAKE_PROJECT_VERSION_PATCH 0)
endif()
if(NOT EMU_BUILD_NUM)
set(EMU_BUILD_NUM 0)
endif()
if(NOT EMU_COPYRIGHT_YEAR)
set(EMU_COPYRIGHT_YEAR 2021)
endif()
configure_file(include/86box/version.h.in include/86box/version.h @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)

View File

@@ -14,7 +14,7 @@
#
add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1489.c ali1531.c ali1541.c ali1543.c
ali1621.c ali6117.c headland.c intel_82335.c contaq_82c59x.c cs4031.c intel_420ex.c
ali1621.c ali6117.c headland.c ims8848.c intel_82335.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 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 via_vt82c49x.c via_vt82c505.c sis_85c310.c

View File

@@ -29,6 +29,7 @@
#include <86box/chipset.h>
#include <86box/spd.h>
#include <86box/machine.h>
#include <86box/video.h>
enum
@@ -58,6 +59,7 @@ typedef struct
uint8_t mem_state[256];
int type;
smram_t *smram_low, *smram_high;
void *agpgart;
} i4x0_t;
@@ -204,14 +206,25 @@ i4x0_smram_handler_phase1(i4x0_t *dev)
static void
i4x0_mask_bar(uint8_t *regs)
i4x0_mask_bar(uint8_t *regs, void *agpgart)
{
uint32_t bar;
/* Make sure the aperture's base is aligned to its size. */
bar = (regs[0x13] << 24) | (regs[0x12] << 16);
bar &= (((uint32_t) regs[0xb4] << 22) | 0xf0000000);
regs[0x12] = (bar >> 16) & 0xff;
regs[0x13] = (bar >> 24) & 0xff;
if (!agpgart)
return;
/* Map aperture and GART. */
agpgart_set_aperture(agpgart,
bar,
((uint32_t) (uint8_t) (~regs[0xb4] & 0x3f) + 1) << 22,
!!(regs[0x51] & 0x02));
agpgart_set_gart(agpgart, (regs[0xb9] << 8) | (regs[0xba] << 16) | (regs[0xbb] << 24));
}
@@ -319,7 +332,7 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
case INTEL_440BX: case INTEL_440ZX:
case INTEL_440GX:
regs[0x12] = (val & 0xc0);
i4x0_mask_bar(regs);
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -329,7 +342,7 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
case INTEL_440BX: case INTEL_440ZX:
case INTEL_440GX:
regs[0x13] = val;
i4x0_mask_bar(regs);
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -407,15 +420,19 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
break;
case INTEL_440LX:
regs[0x51] = (regs[0x51] & 0x40) | (val & 0x87);
i4x0_mask_bar(regs, dev->agpgart);
break;
case INTEL_440EX:
regs[0x51] = (val & 0x86);
i4x0_mask_bar(regs, dev->agpgart);
break;
case INTEL_440BX: case INTEL_440ZX:
regs[0x51] = (regs[0x51] & 0x70) | (val & 0x8f);
i4x0_mask_bar(regs, dev->agpgart);
break;
case INTEL_440GX:
regs[0x51] = (regs[0x51] & 0xb0) | (val & 0x4f);
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -1070,7 +1087,7 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
case INTEL_440BX: case INTEL_440ZX:
case INTEL_440GX:
regs[0xb4] = (val & 0x3f);
i4x0_mask_bar(regs);
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -1080,6 +1097,7 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
case INTEL_440BX: case INTEL_440ZX:
case INTEL_440GX:
regs[0xb9] = (val & 0xf0);
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -1090,6 +1108,7 @@ i4x0_write(int func, int addr, uint8_t val, void *priv)
case INTEL_440BX: case INTEL_440ZX:
case INTEL_440GX:
regs[addr] = val;
i4x0_mask_bar(regs, dev->agpgart);
break;
}
break;
@@ -1589,10 +1608,13 @@ static void
pci_add_card(PCI_ADD_NORTHBRIDGE, i4x0_read, i4x0_write, dev);
if ((dev->type >= INTEL_440BX) && !(regs[0x7a] & 0x02))
if ((dev->type >= INTEL_440BX) && !(regs[0x7a] & 0x02)) {
device_add((dev->type == INTEL_440GX) ? &i440gx_agp_device : &i440bx_agp_device);
else if (dev->type >= INTEL_440LX)
dev->agpgart = device_add(&agpgart_device);
} else if (dev->type >= INTEL_440LX) {
device_add(&i440lx_agp_device);
dev->agpgart = device_add(&agpgart_device);
}
return dev;
}

View File

@@ -33,6 +33,7 @@
#include <86box/pci.h>
#include <86box/chipset.h>
#include <86box/spd.h>
#include <86box/video.h>
#define VIA_585 0x05851000
#define VIA_595 0x05950000
@@ -50,6 +51,7 @@ typedef struct via_apollo_t
uint8_t pci_conf[256];
smram_t *smram;
void *agpgart;
} via_apollo_t;
@@ -86,6 +88,25 @@ apollo_smram_map(via_apollo_t *dev, int smm, uint32_t host_base, uint32_t size,
}
static void
apollo_agp_map(via_apollo_t *dev)
{
/* Make sure the aperture's base is aligned to its size. */
dev->pci_conf[0x12] &= dev->pci_conf[0x84] << 4;
dev->pci_conf[0x13] &= 0xf0 | (dev->pci_conf[0x84] >> 4);
if (!dev->agpgart)
return;
/* Map aperture and GART. */
agpgart_set_aperture(dev->agpgart,
(dev->pci_conf[0x12] << 16) | (dev->pci_conf[0x13] << 24),
((uint32_t) (uint8_t) ~dev->pci_conf[0x84] + 1) << 20,
!!(dev->pci_conf[0x88] & 0x02));
agpgart_set_gart(dev->agpgart, (dev->pci_conf[0x89] << 8) | (dev->pci_conf[0x8a] << 16) | (dev->pci_conf[0x8b] << 24));
}
static void
via_apollo_setup(via_apollo_t *dev)
{
@@ -220,6 +241,8 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
((addr >= 0xaa) && (addr < 0xac)) || ((addr > 0xad) && (addr < 0xf0)) ||
((addr >= 0xf8) && (addr < 0xfc)))
return;
if (((addr == 0x12) || (addr == 0x13)) && (dev->id < VIA_597))
return;
if (((addr == 0x78) || (addr >= 0xad)) && (dev->id == VIA_597))
return;
if (((addr == 0x67) || ((addr >= 0xf0) && (addr < 0xfc))) && (dev->id < VIA_691))
@@ -259,9 +282,11 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
break;
case 0x12: /* Graphics Aperture Base */
dev->pci_conf[0x12] = (val & 0xf0);
apollo_agp_map(dev);
break;
case 0x13: /* Graphics Aperture Base */
dev->pci_conf[0x13] = val;
apollo_agp_map(dev);
break;
case 0x50: /* Cache Control 1 */
@@ -579,20 +604,23 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
dev->pci_conf[0x84] = val;
else
dev->pci_conf[0x84] = (dev->pci_conf[0x84] & ~0xf0) | (val & 0xf0);
apollo_agp_map(dev);
break;
case 0x88:
if((dev->id == VIA_693A) || (dev->id == VIA_8601))
dev->pci_conf[0x88] = (dev->pci_conf[0x88] & ~0x06) | (val & 0x06);
else
dev->pci_conf[0x88] = (dev->pci_conf[0x88] & ~0x07) | (val & 0x07);
apollo_agp_map(dev);
break;
case 0x89:
dev->pci_conf[0x89] = val & 0xf0;
apollo_agp_map(dev);
break;
case 0x8a:
case 0x8b:
if((dev->id == VIA_693A) || (dev->id == VIA_8601))
dev->pci_conf[addr] = val;
else
dev->pci_conf[0x89] = (dev->pci_conf[0x89] & ~0xf0) | (val & 0xf0);
dev->pci_conf[addr] = val;
apollo_agp_map(dev);
break;
case 0xa8:
@@ -705,6 +733,9 @@ via_apollo_init(const device_t *info)
break;
}
if (dev->id >= VIA_597)
dev->agpgart = device_add(&agpgart_device);
if ((dev->id >= VIA_694) && (dev->id != VIA_8601))
dev->drb_unit = 16;
else if (dev->id >= VIA_597)

View File

@@ -631,6 +631,16 @@ load_machine(void)
machine = machine_get_machine_from_internal_name("cmdsl386sx16");
else if (! strcmp(p, "cbm_sl386sx25"))
machine = machine_get_machine_from_internal_name("cmdsl386sx25");
else if (! strcmp(p, "mr586"))
machine = machine_get_machine_from_internal_name("p54tp4xe_mr");
else if (! strcmp(p, "pcv240"))
machine = machine_get_machine_from_internal_name("pcv90");
else if (! strcmp(p, "tsunamiatx"))
machine = machine_get_machine_from_internal_name("s1846");
else if (! strcmp(p, "trinity371"))
machine = machine_get_machine_from_internal_name("s1857");
else if (! strcmp(p, "63a"))
machine = machine_get_machine_from_internal_name("63a1");
else if (! strcmp(p, "award386dx")) /* ...merged machines... */
machine = machine_get_machine_from_internal_name("award495");
else if (! strcmp(p, "ami386dx"))

View File

@@ -2294,7 +2294,7 @@ amd_k_invalid_rdmsr:
EDX = tsc >> 32;
break;
}
pclog("RDMSR: ECX = %08X, val = %08X%08X\n", ECX, EDX, EAX);
cpu_log("RDMSR: ECX = %08X, val = %08X%08X\n", ECX, EDX, EAX);
break;
case CPU_PENTIUMPRO:
@@ -2700,7 +2700,7 @@ amd_k_invalid_wrmsr:
case CPU_CxGX1:
case CPU_Cx6x86MX:
#endif
pclog("WRMSR: ECX = %08X, val = %08X%08X\n", ECX, EDX, EAX);
cpu_log("WRMSR: ECX = %08X, val = %08X%08X\n", ECX, EDX, EAX);
switch (ECX) {
case 0x10:
tsc = EAX | ((uint64_t)EDX << 32);

View File

@@ -774,6 +774,9 @@ const cpu_family_t cpu_families[] = {
.name = "K6 (Model 7)",
.internal_name = "k6_m7",
.cpus = (const CPU[]) {
{"100", CPU_K6, fpus_internal, 100000000, 1.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */
{"133", CPU_K6, fpus_internal, 133333333, 2.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12,12, 6, 6, 16}, /* out of spec */
{"166", CPU_K6, fpus_internal, 166666666, 2.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20}, /* out of spec */
{"200", CPU_K6, fpus_internal, 200000000, 3.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18,18, 9, 9, 24},
{"233", CPU_K6, fpus_internal, 233333333, 3.5, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21,21,10,10, 28},
{"266", CPU_K6, fpus_internal, 266666666, 4.0, 2200, 0x570, 0x570, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24,24,12,12, 32},
@@ -786,6 +789,10 @@ const cpu_family_t cpu_families[] = {
.name = "K6-2",
.internal_name = "k6_2",
.cpus = (const CPU[]) {
{"100", CPU_K6_2, fpus_internal, 100000000, 1.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */
{"133", CPU_K6_2, fpus_internal, 133333333, 2.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */
{"166", CPU_K6_2, fpus_internal, 166666666, 2.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */
{"200", CPU_K6_2, fpus_internal, 200000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */
{"233", CPU_K6_2, fpus_internal, 233333333, 3.5, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28},
{"266", CPU_K6_2, fpus_internal, 266666666, 4.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32},
{"300", CPU_K6_2, fpus_internal, 300000000, 3.0, 2200, 0x580, 0x580, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36},
@@ -808,11 +815,24 @@ const cpu_family_t cpu_families[] = {
.name = "K6-2+",
.internal_name = "k6_2p",
.cpus = (const CPU[]) {
{"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54},
{"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57},
{"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60},
{"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64},
{"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66},
{"100", CPU_K6_2P, fpus_internal, 100000000, 1.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */
{"133", CPU_K6_2P, fpus_internal, 133333333, 2.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */
{"166", CPU_K6_2P, fpus_internal, 166666666, 2.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */
{"200", CPU_K6_2P, fpus_internal, 200000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */
{"233", CPU_K6_2P, fpus_internal, 233333333, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */
{"266", CPU_K6_2P, fpus_internal, 266666666, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */
{"300", CPU_K6_2P, fpus_internal, 300000000, 3.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */
{"333", CPU_K6_2P, fpus_internal, 332500000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */
{"350", CPU_K6_2P, fpus_internal, 350000000, 3.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */
{"366", CPU_K6_2P, fpus_internal, 366666666, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */
{"380", CPU_K6_2P, fpus_internal, 380000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */
{"400/66", CPU_K6_2P, fpus_internal, 400000000, 6.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */
{"400/100", CPU_K6_2P, fpus_internal, 400000000, 4.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48}, /* out of spec */
{"450", CPU_K6_2P, fpus_internal, 450000000, 4.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54},
{"475", CPU_K6_2P, fpus_internal, 475000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57},
{"500", CPU_K6_2P, fpus_internal, 500000000, 5.0, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45, 45, 15, 15, 60},
{"533", CPU_K6_2P, fpus_internal, 533333333, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48, 48, 17, 17, 64},
{"550", CPU_K6_2P, fpus_internal, 550000000, 5.5, 2000, 0x5d4, 0x5d4, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 50, 50, 17, 17, 66},
{"", 0}
}
}, {
@@ -821,6 +841,17 @@ const cpu_family_t cpu_families[] = {
.name = "K6-III",
.internal_name = "k6_3",
.cpus = (const CPU[]) {
{"100", CPU_K6_3, fpus_internal, 100000000, 1.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 9, 9, 4, 4, 12}, /* out of spec */
{"133", CPU_K6_3, fpus_internal, 133333333, 2.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */
{"166", CPU_K6_3, fpus_internal, 166666666, 2.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */
{"200", CPU_K6_3, fpus_internal, 200000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */
{"233", CPU_K6_3, fpus_internal, 233333333, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */
{"266", CPU_K6_3, fpus_internal, 266666666, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */
{"300", CPU_K6_3, fpus_internal, 300000000, 3.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */
{"333", CPU_K6_3, fpus_internal, 332500000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */
{"350", CPU_K6_3, fpus_internal, 350000000, 3.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */
{"366", CPU_K6_3, fpus_internal, 366666666, 5.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */
{"380", CPU_K6_3, fpus_internal, 380000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */
{"400", CPU_K6_3, fpus_internal, 400000000, 4.0, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48},
{"450", CPU_K6_3, fpus_internal, 450000000, 4.5, 2200, 0x591, 0x591, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54},
{"", 0}
@@ -831,7 +862,17 @@ const cpu_family_t cpu_families[] = {
.name = "K6-III+",
.internal_name = "k6_3p",
.cpus = (const CPU[]) {
{"100", CPU_K6_3P, fpus_internal, 100000000, 1.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9},
{"100", CPU_K6_3P, fpus_internal, 100000000, 1.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 7, 7, 4, 4, 9}, /* out of spec */
{"133", CPU_K6_3P, fpus_internal, 133333333, 2.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 12, 12, 6, 6, 16}, /* out of spec */
{"166", CPU_K6_3P, fpus_internal, 166666666, 2.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15, 15, 7, 7, 20}, /* out of spec */
{"200", CPU_K6_3P, fpus_internal, 200000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 18, 18, 9, 9, 24}, /* out of spec */
{"233", CPU_K6_3P, fpus_internal, 233333333, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 21, 21, 10, 10, 28}, /* out of spec */
{"266", CPU_K6_3P, fpus_internal, 266666666, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 24, 24, 12, 12, 32}, /* out of spec */
{"300", CPU_K6_3P, fpus_internal, 300000000, 3.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27, 27, 9, 9, 36}, /* out of spec */
{"333", CPU_K6_3P, fpus_internal, 332500000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 30, 30, 11, 11, 40}, /* out of spec */
{"350", CPU_K6_3P, fpus_internal, 350000000, 3.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32, 32, 11, 11, 42}, /* out of spec */
{"366", CPU_K6_3P, fpus_internal, 366666666, 5.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33, 33, 17, 17, 44}, /* out of spec */
{"380", CPU_K6_3P, fpus_internal, 380000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 34, 34, 12, 12, 46}, /* out of spec */
{"400", CPU_K6_3P, fpus_internal, 400000000, 4.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36, 36, 12, 12, 48},
{"450", CPU_K6_3P, fpus_internal, 450000000, 4.5, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41, 41, 14, 14, 54},
{"475", CPU_K6_3P, fpus_internal, 475000000, 5.0, 2000, 0x5d0, 0x5d0, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43, 43, 15, 15, 57},
@@ -1522,11 +1563,18 @@ static const cpu_legacy_table_t cpus_K56[] = {
{"k6_m6", 166666666, 2.5},
{"k6_m6", 200000000, 3.0},
{"k6_m6", 233333333, 3.5},
{"k6_m7", 200000000, 3.0},
{"k6_m7", 100000000, 1.5},
{"k6_m7", 133333333, 2.0},
{"k6_m7", 166666666, 2.5},
{"k6_m7", 200000000, 3.0},
{"k6_m7", 233333333, 3.5},
{"k6_m7", 266666666, 4.0},
{"k6_m7", 300000000, 4.5},
{"k6_2", 233333333, 3.5},
{"k6_2", 100000000, 1.5},
{"k6_2", 133333333, 2.0},
{"k6_2", 166666666, 2.5},
{"k6_2", 200000000, 3.0},
{"k6_2", 233333333, 3.5},
{"k6_2", 266666666, 4.0},
{"k6_2", 300000000, 4.5},
{"k6_2", 366666666, 5.5},
@@ -1534,14 +1582,24 @@ static const cpu_legacy_table_t cpus_K56[] = {
};
static const cpu_legacy_table_t cpus_K56_SS7[] = {
{"k6_m6", 166666666, 2.5},
{"k6_m6", 66666666, 1.0},
{"k6_m6", 100000000, 1.5},
{"k6_m6", 133333333, 2.0},
{"k6_m6", 166666666, 2.5},
{"k6_m6", 200000000, 3.0},
{"k6_m6", 233333333, 3.5},
{"k6_m7", 200000000, 3.0},
{"k6_m7", 100000000, 1.5},
{"k6_m7", 133333333, 2.0},
{"k6_m7", 166666666, 2.5},
{"k6_m7", 200000000, 3.0},
{"k6_m7", 233333333, 3.5},
{"k6_m7", 266666666, 4.0},
{"k6_m7", 300000000, 4.5},
{"k6_2", 233333333, 3.5},
{"k6_2", 100000000, 1.5},
{"k6_2", 133333333, 2.0},
{"k6_2", 166666666, 2.5},
{"k6_2", 200000000, 3.0},
{"k6_2", 233333333, 3.5},
{"k6_2", 266666666, 4.0},
{"k6_2", 300000000, 3.0},
{"k6_2", 332500000, 3.5},
@@ -1554,15 +1612,49 @@ static const cpu_legacy_table_t cpus_K56_SS7[] = {
{"k6_2", 500000000, 5.0},
{"k6_2", 533333333, 5.5},
{"k6_2", 550000000, 5.5},
{"k6_2p", 450000000, 4.5},
{"k6_2p", 100000000, 1.5},
{"k6_2p", 133333333, 2.0},
{"k6_2p", 166666666, 2.5},
{"k6_2p", 200000000, 3.0},
{"k6_2p", 233333333, 3.5},
{"k6_2p", 266666666, 4.0},
{"k6_2p", 300000000, 3.0},
{"k6_2p", 332500000, 3.5},
{"k6_2p", 350000000, 3.5},
{"k6_2p", 366666666, 5.5},
{"k6_2p", 380000000, 4.0},
{"k6_2p", 400000000, 4.0},
{"k6_2p", 450000000, 4.5},
{"k6_2p", 475000000, 5.0},
{"k6_2p", 500000000, 5.0},
{"k6_2p", 533333333, 5.5},
{"k6_2p", 550000000, 5.5},
{"k6_3", 400000000, 4.0},
{"k6_3", 100000000, 1.5},
{"k6_3", 133333333, 2.0},
{"k6_3", 166666666, 2.5},
{"k6_3", 200000000, 3.0},
{"k6_3", 233333333, 3.5},
{"k6_3", 266666666, 4.0},
{"k6_3", 300000000, 3.0},
{"k6_3", 332500000, 3.5},
{"k6_3", 350000000, 3.5},
{"k6_3", 366666666, 5.5},
{"k6_3", 380000000, 4.0},
{"k6_3", 400000000, 4.0},
{"k6_3", 450000000, 4.5},
{"k6_3p", 75000000, 1.5},
{"k6_3p", 400000000, 4.0},
{"k6_3p", 100000000, 1.5},
{"k6_3p", 133333333, 2.0},
{"k6_3p", 166666666, 2.5},
{"k6_3p", 200000000, 3.0},
{"k6_3p", 233333333, 3.5},
{"k6_3p", 266666666, 4.0},
{"k6_3p", 300000000, 3.0},
{"k6_3p", 332500000, 3.5},
{"k6_3p", 350000000, 3.5},
{"k6_3p", 366666666, 5.5},
{"k6_3p", 380000000, 4.0},
{"k6_3p", 400000000, 4.0},
{"k6_3p", 450000000, 4.5},
{"k6_3p", 475000000, 5.0},
{"k6_3p", 500000000, 5.0},

View File

@@ -1247,8 +1247,12 @@ write64_generic(void *priv, uint8_t val)
} else {
if (((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) &&
((dev->flags & KBC_VEN_MASK) != KBC_VEN_INTEL_AMI))
#if 0
add_to_kbc_queue_front(dev, (dev->input_port | fixed_bits) &
(((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0xeb : 0xef), 0, 0x00);
#else
add_to_kbc_queue_front(dev, ((dev->input_port | fixed_bits) & 0xf0) | (((dev->flags & KBC_VEN_MASK) == KBC_VEN_ACER) ? 0x08 : 0x0c), 0, 0x00);
#endif
else
add_to_kbc_queue_front(dev, dev->input_port | fixed_bits, 0, 0x00);
dev->input_port = ((dev->input_port + 1) & 3) |
@@ -1316,6 +1320,11 @@ write60_ami(void *priv, uint8_t val)
}
return 0;
case 0xc1:
kbd_log("ATkbc: AMI MegaKey - write %02X to input port\n", val);
dev->input_port = val;
return 0;
case 0xcb: /* set keyboard mode */
kbd_log("ATkbc: AMI - set keyboard mode\n");
dev->ami_flags = val;
@@ -1471,6 +1480,24 @@ write64_ami(void *priv, uint8_t val)
add_data(dev, 0x00);
return 0;
case 0xc1: /* write input port */
kbd_log("ATkbc: AMI MegaKey - write input port\n");
dev->want60 = 1;
return 0;
case 0xc4:
/* set KBC line P14 low */
kbd_log("ATkbc: set KBC line P14 (input port bit 4) low\n");
dev->input_port &= 0xef;
add_data(dev, 0x00);
return 0;
case 0xc5:
/* set KBC line P15 low */
kbd_log("ATkbc: set KBC line P15 (input port bit 5) low\n");
dev->input_port &= 0xdf;
add_data(dev, 0x00);
return 0;
case 0xc8:
/*
* unblock KBC lines P22/P23
@@ -1489,6 +1516,19 @@ write64_ami(void *priv, uint8_t val)
dev->output_locked = 1;
return 0;
case 0xcc:
/* set KBC line P14 high */
kbd_log("ATkbc: set KBC line P14 (input port bit 4) high\n");
dev->input_port |= 0x10;
add_data(dev, 0x00);
return 0;
case 0xcd:
/* set KBC line P15 high */
kbd_log("ATkbc: set KBC line P15 (input port bit 5) high\n");
dev->input_port |= 0x20;
add_data(dev, 0x00);
return 0;
case 0xef: /* ??? - sent by AMI486 */
kbd_log("ATkbc: ??? - sent by AMI486\n");
return 0;

View File

@@ -408,7 +408,7 @@ extern void machine_at_award_common_init(const machine_t *);
extern void machine_at_sp4_common_init(const machine_t *model);
extern int machine_at_excalibur_pci_init(const machine_t *);
extern int machine_at_excaliburpci_init(const machine_t *);
extern int machine_at_p5mp3_init(const machine_t *);
extern int machine_at_dellxp60_init(const machine_t *);
extern int machine_at_opti560l_init(const machine_t *);
@@ -422,7 +422,7 @@ extern int machine_at_excalibur_init(const machine_t *);
extern int machine_at_p5vl_init(const machine_t *);
extern int machine_at_excalibur_pci_2_init(const machine_t *);
extern int machine_at_excaliburpci2_init(const machine_t *);
extern int machine_at_p5sp4_init(const machine_t *);
#ifdef EMU_DEVICE_H
@@ -437,7 +437,6 @@ extern int machine_at_430nx_init(const machine_t *);
extern int machine_at_acerv30_init(const machine_t *);
extern int machine_at_apollo_init(const machine_t *);
extern int machine_at_exp8551_init(const machine_t *);
extern int machine_at_vectra54_init(const machine_t *);
extern int machine_at_zappa_init(const machine_t *);
extern int machine_at_powermatev_init(const machine_t *);
extern int machine_at_mb500n_init(const machine_t *);
@@ -450,13 +449,10 @@ extern int machine_at_hot543_init(const machine_t *);
extern int machine_at_p54sp4_init(const machine_t *);
extern int machine_at_sq588_init(const machine_t *);
#ifdef EMU_DEVICE_H
#define at_vectra54_get_device at_endeavor_get_device
#endif
/* m_at_socket7_3v.c */
extern int machine_at_p54tp4xe_init(const machine_t *);
extern int machine_at_mr586_init(const machine_t *);
extern int machine_at_p54tp4xe_mr_init(const machine_t *);
extern int machine_at_gw2katx_init(const machine_t *);
extern int machine_at_thor_init(const machine_t *);
extern int machine_at_mrthor_init(const machine_t *);
@@ -474,9 +470,11 @@ extern int machine_at_p5vxb_init(const machine_t *);
extern int machine_at_gw2kte_init(const machine_t *);
extern int machine_at_ap5s_init(const machine_t *);
extern int machine_at_vectra54_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern const device_t *at_endeavor_get_device(void);
#define at_vectra54_get_device at_endeavor_get_device
extern const device_t *at_thor_get_device(void);
#define at_mrthor_get_device at_thor_get_device
extern const device_t *at_pb640_get_device(void);
@@ -488,7 +486,7 @@ extern int machine_at_p55t2p4_init(const machine_t *);
extern int machine_at_m7shi_init(const machine_t *);
extern int machine_at_tc430hx_init(const machine_t *);
extern int machine_at_equium5200_init(const machine_t *);
extern int machine_at_pcv240_init(const machine_t *);
extern int machine_at_pcv90_init(const machine_t *);
extern int machine_at_p65up5_cp55t2d_init(const machine_t *);
extern int machine_at_ap5vm_init(const machine_t *);
@@ -546,7 +544,7 @@ extern int machine_at_v60n_init(const machine_t *);
extern int machine_at_vs440fx_init(const machine_t *);
extern int machine_at_ap440fx_init(const machine_t *);
extern int machine_at_mb600n_init(const machine_t *);
extern int machine_at_8500ttc_init(const machine_t *);
extern int machine_at_8600ttc_init(const machine_t *);
extern int machine_at_m6mi_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
@@ -570,7 +568,7 @@ extern int machine_at_bf6_init(const machine_t *);
extern int machine_at_ax6bc_init(const machine_t *);
extern int machine_at_atc6310bxii_init(const machine_t *);
extern int machine_at_686bx_init(const machine_t *);
extern int machine_at_tsunamiatx_init(const machine_t *);
extern int machine_at_s1846_init(const machine_t *);
extern int machine_at_p6sba_init(const machine_t *);
extern int machine_at_ficka6130_init(const machine_t *);
extern int machine_at_p3v133_init(const machine_t *);
@@ -582,7 +580,11 @@ extern int machine_at_borapro_init(const machine_t *);
extern int machine_at_ms6168_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern const device_t *at_tsunamiatx_get_device(void);
extern const device_t *at_s1846_get_device(void);
#define at_s1857_get_device at_s1846_get_device
#define at_gt694va_get_device at_s1846_get_device
extern const device_t *at_ms6168_get_device(void);
#define at_borapro_get_device at_ms6168_get_device
#endif
/* m_at_slot2.c */
@@ -597,13 +599,13 @@ extern int machine_at_cubx_init(const machine_t *);
extern int machine_at_atc7020bxii_init(const machine_t *);
extern int machine_at_ambx133_init(const machine_t *);
extern int machine_at_awo671r_init(const machine_t *);
extern int machine_at_63a_init(const machine_t *);
extern int machine_at_63a1_init(const machine_t *);
extern int machine_at_s370sba_init(const machine_t *);
extern int machine_at_apas3_init(const machine_t *);
extern int machine_at_gt694va_init(const machine_t *);
extern int machine_at_cuv4xls_init(const machine_t *);
extern int machine_at_6via90ap_init(const machine_t *);
extern int machine_at_trinity371_init(const machine_t *);
extern int machine_at_s1857_init(const machine_t *);
extern int machine_at_p6bap_init(const machine_t *);
/* m_at_misc.c */

View File

@@ -18,14 +18,97 @@
# define EMU_SND_AC97_H
#define AC97_VENDOR_ID(f, s, t, dev) ((((f) & 0xff) << 24) | (((s) & 0xff) << 16) | (((t) & 0xff) << 8) | ((dev) & 0xff))
/* Misc support bits (misc_flags). Most of these are not part of any
registers, but control enabling/disabling of registers and bits. */
#define AC97_MASTER_6B (1 << 0) /* register 02 bits [13,5] (ML5/MR5) */
#define AC97_AUXOUT (1 << 1) /* register 04 */
#define AC97_AUXOUT_6B (1 << 2) /* register 04 bits [13,5] (ML5/MR5) */
#define AC97_MONOOUT (1 << 3) /* register 06 */
#define AC97_MONOOUT_6B (1 << 4) /* register 06 bit 5 (MM5) */
#define AC97_PCBEEP (1 << 5) /* register 0A */
#define AC97_PCBEEP_GEN (1 << 6) /* register 0A bits [12:5] (F[7:0]) */
#define AC97_PHONE (1 << 9) /* register 0C */
#define AC97_VIDEO (1 << 10) /* register 14 */
#define AC97_AUXIN (1 << 11) /* register 16 */
#define AC97_POP (1 << 15) /* register 20 bit 15 (POP) - definition shared with General Purpose bits */
#define AC97_MS (1 << 8) /* register 20 bit 8 (MS) - definition shared with General Purpose bits */
#define AC97_LPBK (1 << 7) /* register 20 bit 7 (LPBK) - definition shared with General Purpose bits */
#define AC97_DSA (1 << 12) /* register 28 bits [5:4] (DSA[1:0]) */
#define AC97_LFE_6B (1 << 13) /* register 36 bit 13 (LFE5) */
#define AC97_CENTER_6B (1 << 14) /* register 36 bit 5 (CNT5) */
#define AC97_SURR_6B (1 << 16) /* register 38 bits [13,5] (LSR5/RSR5) */
/* Reset bits (reset_flags), register 00. */
#define AC97_MICPCM (1 << 0)
#define AC97_MODEMLINE (1 << 1)
#define AC97_TONECTL (1 << 2)
#define AC97_SIMSTEREO (1 << 3)
#define AC97_HPOUT (1 << 4)
#define AC97_LOUDNESS (1 << 5)
#define AC97_DAC_18B (1 << 6)
#define AC97_DAC_20B (1 << 7)
#define AC97_ADC_18B (1 << 8)
#define AC97_ADC_20B (1 << 9)
#define AC97_3D_SHIFT 10
/* Extended Audio ID bits (extid_flags), register 28. */
#define AC97_VRA (1 << 0)
#define AC97_DRA (1 << 1)
#define AC97_SPDIF (1 << 2)
#define AC97_VRM (1 << 3)
#define AC97_CDAC (1 << 6)
#define AC97_SDAC (1 << 7)
#define AC97_LDAC (1 << 8)
#define AC97_AMAP (1 << 9)
#define AC97_REV_2_1 (0 << 10)
#define AC97_REV_2_2 (1 << 10)
#define AC97_REV_2_3 (2 << 10)
#define AC97_REV_MASK (3 << 10)
/* Volume bits. */
#define AC97_MUTE (1 << 15)
#define AC97_MUTE_L (1 << 15)
#define AC97_MUTE_R (1 << 7)
/* General Purpose bits, register 20. */
/* POP already defined */
#define AC97_ST (1 << 14)
#define AC97_3D (1 << 13)
#define AC97_LD (1 << 12)
#define AC97_DRSS_MASK (3 << 10)
#define AC97_MIX (1 << 9)
/* MS already defined */
/* LPBK already defined */
/* Extended Audio Status/Control bits, register 2A. */
#define AC97_SPSA_SHIFT 4
#define AC97_SPSA_MASK 3
#define AC97_MADC (1 << 9)
#define AC97_SPCV (1 << 10)
#define AC97_PRI (1 << 11)
#define AC97_PRJ (1 << 12)
#define AC97_PRK (1 << 13)
#define AC97_PRL (1 << 14)
typedef struct {
uint32_t vendor_id;
uint8_t codec_id, regs[128];
const uint16_t index, value, write_mask;
} ac97_vendor_reg_t;
typedef struct {
uint32_t vendor_id, max_rate, misc_flags;
uint16_t reset_flags, extid_flags,
powerdown_mask, regs[64];
uint8_t codec_id, vendor_reg_page_max;
const ac97_vendor_reg_t *vendor_regs;
uint16_t *vendor_reg_pages;
} ac97_codec_t;
extern uint8_t ac97_codec_read(ac97_codec_t *dev, uint8_t reg);
extern void ac97_codec_write(ac97_codec_t *dev, uint8_t reg, uint8_t val);
extern uint16_t ac97_codec_readw(ac97_codec_t *dev, uint8_t reg);
extern void ac97_codec_writew(ac97_codec_t *dev, uint8_t reg, uint16_t val);
extern void ac97_codec_reset(void *priv);
extern void ac97_codec_getattn(void *priv, uint8_t reg, int *l, int *r);
extern uint32_t ac97_codec_getrate(void *priv, uint8_t reg);

View File

@@ -13,19 +13,43 @@
* Copyright 2020 Miran Grca.
*/
#define _LSTR(s) L ## s
#define LSTR(s) _LSTR(s)
/* Version info. */
#define EMU_NAME "@CMAKE_PROJECT_NAME@"
#define EMU_NAME_W L"@CMAKE_PROJECT_NAME@"
#define EMU_NAME_W LSTR(EMU_NAME)
#define EMU_VERSION "@CMAKE_PROJECT_VERSION@"
#define EMU_VERSION_W L"@CMAKE_PROJECT_VERSION@"
#define EMU_VERSION_EX "@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@0"
#define EMU_VERSION_W LSTR(EMU_VERSION)
#define EMU_VERSION_EX "@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@@CMAKE_PROJECT_VERSION_PATCH@"
#define EMU_VERSION_MAJ @CMAKE_PROJECT_VERSION_MAJOR@
#define EMU_VERSION_MIN @CMAKE_PROJECT_VERSION_MINOR@
#define EMU_VERSION_PATCH @CMAKE_PROJECT_VERSION_PATCH@
#define COPYRIGHT_YEAR "2020"
#cmakedefine EMU_BUILD "@EMU_BUILD@"
#define EMU_BUILD_NUM @EMU_BUILD_NUM@
#cmakedefine EMU_GIT_HASH "@EMU_GIT_HASH@"
#ifdef EMU_BUILD
# define EMU_BUILD_W LSTR(EMU_BUILD)
# define EMU_VERSION_FULL EMU_VERSION " [" EMU_BUILD "]"
# define EMU_VERSION_FULL_W EMU_VERSION_W L" [" EMU_BUILD_W L"]"
#else
# define EMU_VERSION_FULL EMU_VERSION
# define EMU_VERSION_FULL_W EMU_VERSION_W
#endif
#ifdef EMU_GIT_HASH
# define EMU_GIT_HASH_W LSTR(EMU_GIT_HASH)
#endif
#define COPYRIGHT_YEAR "@EMU_COPYRIGHT_YEAR@"
/* Web URL info. */
#define EMU_SITE L"@CMAKE_PROJECT_HOMEPAGE_URL@"
#define EMU_SITE L"86box.net"
#define EMU_ROMS_URL L"https://github.com/86Box/roms/releases/latest"
#define EMU_DOCS_URL L"https://86box.readthedocs.io"
#ifdef RELEASE_BUILD
# define EMU_DOCS_URL L"https://86box.readthedocs.io/en/v@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@/"
#else
# define EMU_DOCS_URL L"https://86box.readthedocs.io"
#endif

View File

@@ -3361,12 +3361,6 @@ voodoo_recomp++;
void voodoo_codegen_init(voodoo_t *voodoo)
{
int c;
#if defined(__linux__) || defined(__APPLE__)
void *start;
size_t len;
long pagesize = sysconf(_SC_PAGESIZE);
long pagemask = ~(pagesize - 1);
#endif
voodoo->codegen_data = plat_mmap(sizeof(voodoo_x86_data_t) * BLOCK_NUM*4, 1);

View File

@@ -194,6 +194,9 @@ extern void svga_dump_vram(void);
extern uint32_t video_color_transform(uint32_t color);
extern void agpgart_set_aperture(void *handle, uint32_t base, uint32_t size, int enable);
extern void agpgart_set_gart(void *handle, uint32_t base);
#ifdef __cplusplus
}
#endif
@@ -432,6 +435,9 @@ extern const device_t velocity_100_agp_device;
/* Wyse 700 */
extern const device_t wy700_device;
/* AGP GART */
extern const device_t agpgart_device;
#endif

View File

@@ -13,19 +13,32 @@
* Copyright 2020 Miran Grca.
*/
#define _LSTR(s) L ## s
#define LSTR(s) _LSTR(s)
/* Version info. */
#define EMU_NAME "86Box"
#define EMU_NAME_W L"86Box"
#define EMU_NAME_W LSTR(EMU_NAME)
#define EMU_VERSION "3.0"
#define EMU_VERSION_W L"3.0"
#define EMU_VERSION_W LSTR(EMU_VERSION)
#define EMU_VERSION_EX "3.00"
#define EMU_VERSION_MAJ 3
#define EMU_VERSION_MIN 0
#define EMU_VERSION_PATCH 0
#define COPYRIGHT_YEAR "2020"
#define EMU_BUILD_NUM 0
#define EMU_VERSION_FULL EMU_VERSION
#define EMU_VERSION_FULL_W EMU_VERSION_W
#define COPYRIGHT_YEAR "2021"
/* Web URL info. */
#define EMU_SITE L"86box.net"
#define EMU_ROMS_URL L"https://github.com/86Box/roms/releases/latest"
#define EMU_DOCS_URL L"https://86box.readthedocs.io"
#ifdef RELEASE_BUILD
# define EMU_DOCS_URL L"https://86box.readthedocs.io/en/v3.0/"
#else
# define EMU_DOCS_URL L"https://86box.readthedocs.io"
#endif

View File

@@ -444,11 +444,11 @@ machine_at_p6sba_init(const machine_t *model)
int
machine_at_tsunamiatx_init(const machine_t *model)
machine_at_s1846_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/tsunamiatx/bx46200f.rom",
ret = bios_load_linear("roms/machines/s1846/bx46200f.rom",
0x000c0000, 262144, 0);
if (bios_only || !ret)
@@ -468,23 +468,22 @@ machine_at_tsunamiatx_init(const machine_t *model)
pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
device_add(&i440bx_device);
device_add(&piix4e_device);
device_add(&pc87309_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&intel_flash_bxt_device);
spd_register(SPD_TYPE_SDRAM, 0x7, 256);
if (sound_card_current == SOUND_INTERNAL) {
device_add(&es1371_onboard_device);
device_add(&cs4297_device); /* found on other Tyan boards around the same time */
}
device_add(&pc87309_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&intel_flash_bxt_device);
spd_register(SPD_TYPE_SDRAM, 0x7, 256);
return ret;
}
const device_t *
at_tsunamiatx_get_device(void)
at_s1846_get_device(void)
{
return &es1371_onboard_device;
}
@@ -660,13 +659,16 @@ machine_at_ms6168_common_init(const machine_t *model)
}
const device_t *
at_ms6168_get_device(void)
{
return &voodoo_3_2000_agp_onboard_8m_device;
}
int
machine_at_borapro_init(const machine_t *model)
{
/* AMI 440ZX Board. Packard Bell OEM of the MSI MS-6168
MIGHT REQUIRE MORE EXCESSIVE TESTING!
Reports emmersive amounts of RAM like few Intel OEM boards
we have. */
int ret;
ret = bios_load_linear("roms/machines/borapro/MS6168V2.50",

View File

@@ -37,6 +37,7 @@
#include "cpu.h"
#include <86box/machine.h>
#include <86box/clock.h>
#include <86box/sound.h>
#include <86box/snd_ac97.h>
@@ -76,11 +77,11 @@ machine_at_s370slm_init(const machine_t *model)
int
machine_at_trinity371_init(const machine_t *model)
machine_at_s1857_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/trinity371/BX57200A.ROM",
ret = bios_load_linear("roms/machines/s1857/BX57200A.ROM",
0x000c0000, 262144, 0);
if (bios_only || !ret)
@@ -104,6 +105,11 @@ machine_at_trinity371_init(const machine_t *model)
device_add(&w83977ef_370_device);
device_add(&intel_flash_bxt_device);
if (sound_card_current == SOUND_INTERNAL) {
device_add(&es1371_onboard_device);
device_add(&cs4297_device); /* found on other Tyan boards around the same time */
}
return ret;
}
@@ -278,7 +284,7 @@ machine_at_awo671r_init(const machine_t *model)
int
machine_at_63a_init(const machine_t *model)
machine_at_63a1_init(const machine_t *model)
{
int ret;
@@ -376,6 +382,11 @@ machine_at_gt694va_init(const machine_t *model)
hwm_values.fans[2] = 0; /* unused */
hwm_values.temperatures[2] = 0; /* unused */
if (sound_card_current == SOUND_INTERNAL) {
device_add(&es1371_onboard_device);
device_add(&cs4297_device); /* assumed */
}
return ret;
}
@@ -452,7 +463,8 @@ machine_at_6via90ap_init(const machine_t *model)
hwm_values.temperatures[1] += 2; /* System offset */
hwm_values.temperatures[2] = 0; /* unused */
device_add(&alc100_device); /* ALC100P identified on similar Acorp boards (694TA, 6VIA90A1) */
if (sound_card_current == SOUND_INTERNAL)
device_add(&alc100_device); /* ALC100P identified on similar Acorp boards (694TA, 6VIA90A1) */
return ret;
}

View File

@@ -112,11 +112,11 @@ machine_at_sp4_common_init(const machine_t *model)
int
machine_at_excalibur_pci_init(const machine_t *model)
machine_at_excaliburpci_init(const machine_t *model)
{
int ret;
ret = bios_load_linear_inverted("roms/machines/excalibur_pci/S701P.ROM",
ret = bios_load_linear_inverted("roms/machines/excaliburpci/S701P.ROM",
0x000e0000, 131072, 0);
if (bios_only || !ret)
@@ -423,11 +423,11 @@ machine_at_p5vl_init(const machine_t *model)
int
machine_at_excalibur_pci_2_init(const machine_t *model)
machine_at_excaliburpci2_init(const machine_t *model)
{
int ret;
ret = bios_load_linear_inverted("roms/machines/excalibur_pci-2/S722P.ROM",
ret = bios_load_linear_inverted("roms/machines/excaliburpci2/S722P.ROM",
0x000e0000, 131072, 0);
if (bios_only || !ret)

View File

@@ -468,37 +468,6 @@ machine_at_430nx_init(const machine_t *model)
}
int
machine_at_p54tp4xe_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/p54tp4xe/t15i0302.awd",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init(model);
/* Award BIOS, SMC FDC37C665. */
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2);
pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3);
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
device_add(&keyboard_ps2_pci_device);
device_add(&i430fx_device);
device_add(&piix_device);
device_add(&fdc37c665_device);
device_add(&intel_flash_bxt_device);
return ret;
}
int
machine_at_endeavor_init(const machine_t *model)
{
@@ -631,40 +600,6 @@ machine_at_apollo_init(const machine_t *model)
}
int
machine_at_vectra54_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/vectra54/GT0724.22",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init_ex(model, 2);
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0);
pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2);
if (gfxcard == VID_INTERNAL)
device_add(&s3_phoenix_trio64_onboard_pci_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&i430fx_device);
device_add(&piix_device);
device_add(&fdc37c931apm_device);
device_add(&sst_flash_29ee010_device);
return ret;
}
int
machine_at_powermatev_init(const machine_t *model)
{

View File

@@ -194,40 +194,6 @@ machine_at_exp8551_init(const machine_t *model)
}
int
machine_at_vectra54_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/vectra54/GT0724.22",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init_ex(model, 2);
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0);
pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2);
if (gfxcard == VID_INTERNAL)
device_add(&s3_phoenix_trio64_onboard_pci_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&i430fx_device);
device_add(&piix_device);
device_add(&fdc37c931apm_device);
device_add(&sst_flash_29ee010_device);
return ret;
}
int
machine_at_zappa_init(const machine_t *model)
{

View File

@@ -246,15 +246,15 @@ machine_at_equium5200_init(const machine_t *model)
int
machine_at_pcv240_init(const machine_t *model)
machine_at_pcv90_init(const machine_t *model)
{
int ret;
ret = bios_load_linear_combined2("roms/machines/pcv240/1010DD04.BIO",
"roms/machines/pcv240/1010DD04.BI1",
"roms/machines/pcv240/1010DD04.BI2",
"roms/machines/pcv240/1010DD04.BI3",
"roms/machines/pcv240/1010DD04.RCV",
ret = bios_load_linear_combined2("roms/machines/pcv90/1010DD04.BIO",
"roms/machines/pcv90/1010DD04.BI1",
"roms/machines/pcv90/1010DD04.BI2",
"roms/machines/pcv90/1010DD04.BI3",
"roms/machines/pcv90/1010DD04.RCV",
0x3a000, 128);
if (bios_only || !ret)

View File

@@ -72,20 +72,11 @@ machine_at_thor_common_init(const machine_t *model, int mr)
}
int
machine_at_p54tp4xe_init(const machine_t *model)
static void
machine_at_p54tp4xe_common_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/p54tp4xe/t15i0302.awd",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init(model);
/* Award BIOS, SMC FDC37C665. */
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4);
@@ -98,37 +89,38 @@ machine_at_p54tp4xe_init(const machine_t *model)
device_add(&piix_device);
device_add(&fdc37c665_device);
device_add(&intel_flash_bxt_device);
}
int
machine_at_p54tp4xe_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/p54tp4xe/t15i0302.awd",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_p54tp4xe_common_init(model);
return ret;
}
int
machine_at_mr586_init(const machine_t *model)
machine_at_p54tp4xe_mr_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/mr586/TRITON.BIO",
ret = bios_load_linear("roms/machines/p54tp4xe_mr/TRITON.BIO",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init(model);
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2);
pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3);
device_add(&i430fx_device);
device_add(&piix_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&fdc37c665_device);
device_add(&intel_flash_bxt_device);
machine_at_p54tp4xe_common_init(model);
return ret;
}
@@ -552,3 +544,37 @@ machine_at_ap5s_init(const machine_t *model)
return ret;
}
int
machine_at_vectra54_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/vectra54/GT0724.22",
0x000e0000, 131072, 0);
if (bios_only || !ret)
return ret;
machine_at_common_init_ex(model, 2);
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0);
pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2);
if (gfxcard == VID_INTERNAL)
device_add(&s3_phoenix_trio64_onboard_pci_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&i430fx_device);
device_add(&piix_device);
device_add(&fdc37c931apm_device);
device_add(&sst_flash_29ee010_device);
return ret;
}

View File

@@ -232,11 +232,11 @@ machine_at_ap440fx_init(const machine_t *model)
}
int
machine_at_8500ttc_init(const machine_t *model)
machine_at_8600ttc_init(const machine_t *model)
{
int ret;
ret = bios_load_linear("roms/machines/8500ttc/TTC0715B.ROM",
ret = bios_load_linear("roms/machines/8600ttc/TTC0715B.ROM",
0x000e0000, 131072, 0);
if (bios_only || !ret)

View File

@@ -40,6 +40,7 @@
#include <86box/video.h>
#include "cpu.h"
#include <86box/machine.h>
#include <86box/sound.h>
#include <86box/snd_ac97.h>
#include <86box/clock.h>
@@ -280,7 +281,8 @@ machine_at_ficva503a_init(const machine_t *model)
hwm_values.temperatures[1] += 2; /* System offset */
hwm_values.temperatures[2] = 0; /* unused */
device_add(&wm9701a_device); /* on daughtercard */
if (sound_card_current == SOUND_INTERNAL)
device_add(&wm9701a_device); /* on daughtercard */
return ret;
}

View File

@@ -451,18 +451,18 @@ const machine_t machines[] = {
of type 'H'. */
{ "[SiS 496] Zida Tomato 4DP", "4dps", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 1024, 261120, 1024, 255, machine_at_4dps_init, NULL },
/* This has the UMC 88xx on-chip KBC. */
{ "[UMC 888x] A-Trend ATC-1415", "atc1415", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 65536, 1024, 255, machine_at_atc1415_init, NULL },
{ "[UMC 8881] A-Trend ATC-1415", "atc1415", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 65536, 1024, 255, machine_at_atc1415_init, NULL },
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[UMC 888x] ECS Elite UM8810PAIO", "ecs486", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_ecs486_init, NULL },
{ "[UMC 8881] ECS Elite UM8810PAIO", "ecs486", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_ecs486_init, NULL },
/* Has AMIKey Z(!) KBC firmware. */
{ "[UMC 888x] Epson Action PC 2600", "actionpc2600", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 262144, 1024, 255, machine_at_actionpc2600_init, NULL },
{ "[UMC 8881] Epson Action PC 2600", "actionpc2600", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 262144, 1024, 255, machine_at_actionpc2600_init, NULL },
/* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in
in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */
{ "[UMC 888x] PC Chips M919", "m919", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_VLB | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_m919_init, NULL },
{ "[UMC 8881] PC Chips M919", "m919", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_VLB | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_m919_init, NULL },
/* Has IBM PS/2 Type 1 KBC firmware. Uses a mysterious I/O port C05. */
{ "[UMC 888x] Samsung SPC7700P-LW", "spc7700p-lw", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_spc7700p_lw_init, NULL },
{ "[UMC 8881] Samsung SPC7700P-LW", "spc7700p-lw", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_spc7700p_lw_init, NULL },
/* This has a Holtek KBC. */
{ "[UMC 888x] Shuttle HOT-433A", "hot433", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 262144, 1024, 255, machine_at_hot433_init, NULL },
{ "[UMC 8881] Shuttle HOT-433A", "hot433", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 262144, 1024, 255, machine_at_hot433_init, NULL },
/* Has a VIA VT82C406 KBC+RTC that likely has identical commands to the VT82C42N. */
{ "[VIA VT82C496G] DFI G486VPA", "g486vpa", MACHINE_TYPE_486_S3, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCIV | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_g486vpa_init, NULL },
/* Has a VIA VT82C42N KBC. */
@@ -493,7 +493,7 @@ const machine_t machines[] = {
connector.
The boot block for BIOS recovery requires an unknown bit on port 805h
to be clear. */
{ "[i430LX] AMI Excalibur PCI Pentium", "excalibur_pci", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 2048, 131072, 2048, 127, machine_at_excalibur_pci_init, NULL },
{ "[i430LX] AMI Excalibur PCI Pentium", "excaliburpci", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 2048, 131072, 2048, 127, machine_at_excaliburpci_init, NULL },
/* Has AMIKey F KBC firmware (AMIKey). */
{ "[i430LX] ASUS P/I-P5MP3", "p5mp3", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE, 2048, 196608, 2048, 127, machine_at_p5mp3_init, NULL },
/* Has IBM PS/2 Type 1 KBC firmware. */
@@ -517,7 +517,7 @@ const machine_t machines[] = {
/* This uses an AMI KBC firmware in PS/2 mode (it sends command A5 with the
PS/2 "Load Security" meaning), most likely MegaKey as it sends command AF
(Set Extended Controller RAM) just like the later Intel AMI BIOS'es. */
{ "[OPTi 597] AMI Excalibur VLB", "excalibur", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_VLB | MACHINE_BUS_PS2 | MACHINE_IDE, 2048, 65536, 2048, 127, machine_at_excalibur_init, NULL },
{ "[OPTi 597] AMI Excalibur VLB", "excalibur", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 60000000, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_VLB | MACHINE_BUS_PS2 | MACHINE_IDE, 2048, 65536, 2048, 127, machine_at_excalibur_init, NULL },
/* OPTi 596/597/822 */
/* This has AMIKey 'F' KBC firmware. */
@@ -525,9 +525,9 @@ const machine_t machines[] = {
/* SiS 50x */
/* This has an unknown AMI KBC firmware, most likely AMIKey / type 'F'. */
{ "[SiS 50x] AMI Excalibur PCI-II Pentium ISA","excalibur_pci-2", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_excalibur_pci_2_init, NULL },
{ "[SiS 501] AMI Excalibur PCI-II Pentium ISA","excaliburpci2", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_excaliburpci2_init, NULL },
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[SiS 50x] ASUS PCI/I-P5SP4", "p5sp4", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p5sp4_init, NULL },
{ "[SiS 501] ASUS PCI/I-P5SP4", "p5sp4", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p5sp4_init, NULL },
/* Socket 5 machines */
/* 430NX */
@@ -546,9 +546,6 @@ const machine_t machines[] = {
{ "[i430FX] AMI Apollo", "apollo", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_apollo_init, NULL },
/* Has AMIKey H KBC firmware. */
{ "[i430FX] Dataexpert EXP8551", "exp8551", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_exp8551_init, NULL },
/* The BIOS does not send a single non-standard KBC command, but the board has a SMC Super I/O
chip with on-chip KBC and AMI MegaKey KBC firmware. */
{ "[i430FX] HP Vectra VL 5 Series 4", "vectra54", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO, 8192, 131072, 8192, 511, machine_at_vectra54_init, at_vectra54_get_device },
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
PC87306 Super I/O chip, command 0xA1 returns '5'.
Command 0xA0 copyright string: (C)1994 AMI . */
@@ -567,24 +564,27 @@ const machine_t machines[] = {
{ "[OPTi 597] TMC PAT54PV", "pat54pv", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_K5, CPU_5K86), 50000000, 66666667, 3520, 3520, 1.5, 1.5, MACHINE_VLB, 2048, 65536, 2048, 127, machine_at_pat54pv_init, NULL },
/* OPTi 596/597/822 */
{ "[OPTi 597] Shuttle HOT-543", "hot543", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3520, 3520, 1.5, 1.5, MACHINE_PCI | MACHINE_VLB, 8192, 131072, 8192, 127, machine_at_hot543_init, NULL },
{ "[OPTi 597] Shuttle HOT-543", "hot543", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3520, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_VLB, 8192, 131072, 8192, 127, machine_at_hot543_init, NULL },
/* SiS 85C50x */
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[SiS 85C50x] ASUS PCI/I-P54SP4", "p54sp4", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_K5, CPU_5K86), 40000000, 66666667, 3380, 3520, 1.5, 1.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p54sp4_init, NULL },
{ "[SiS 501] ASUS PCI/I-P54SP4", "p54sp4", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_K5, CPU_5K86), 40000000, 66666667, 3380, 3520, 1.5, 1.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p54sp4_init, NULL },
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[SiS 85C50x] BCM SQ-588", "sq588", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_PENTIUMMMX), 50000000, 66666667, 3520, 3520, 1.5, 1.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_sq588_init, NULL },
{ "[SiS 501] BCM SQ-588", "sq588", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, CPU_BLOCK(CPU_PENTIUMMMX), 50000000, 66666667, 3520, 3520, 1.5, 1.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_sq588_init, NULL },
/* Socket 7 (Single Voltage) machines */
/* 430FX */
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[i430FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3600, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p54tp4xe_init, NULL },
/* This has an AMIKey-2, which is an updated version of type 'H'. */
{ "[i430FX] ASUS P/I-P54TP4XE (MR BIOS)", "mr586", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3600, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_mr586_init, NULL },
{ "[i430FX] ASUS P/I-P54TP4XE (MR BIOS)", "p54tp4xe_mr", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3600, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p54tp4xe_mr_init, NULL },
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
PC87306 Super I/O chip, command 0xA1 returns '5'.
Command 0xA0 copyright string: (C)1994 AMI . */
{ "[i430FX] Gateway 2000 Thor", "gw2katx", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_gw2katx_init, NULL },
/* The BIOS does not send a single non-standard KBC command, but the board has a SMC Super I/O
chip with on-chip KBC and AMI MegaKey KBC firmware. */
{ "[i430FX] HP Vectra VL 5 Series 4", "vectra54", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO, 8192, 131072, 8192, 511, machine_at_vectra54_init, at_vectra54_get_device },
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
PC87306 Super I/O chip, command 0xA1 returns '5'.
Command 0xA0 copyright string: (C)1994 AMI . */
@@ -616,7 +616,7 @@ const machine_t machines[] = {
{ "[i430HX] Biostar MB-8500TUC", "8500tuc", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 524288, 8192, 127, machine_at_8500tuc_init, NULL },
/* [TEST] Unable to determine what KBC this has. A list on a Danish site shows
the BIOS as having a -0 string, indicating non-AMI KBC firmware. */
{ "[i430HX] SuperMicro Super P55T2S", "p55t2s", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3300, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 127, machine_at_p55t2s_init, NULL },
{ "[i430HX] Supermicro P55T2S", "p55t2s", MACHINE_TYPE_SOCKET7_3V, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3300, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 127, machine_at_p55t2s_init, NULL },
/* 430VX */
/* Has AMIKey H KBC firmware (AMIKey-2). */
@@ -650,7 +650,7 @@ const machine_t machines[] = {
PC87306 Super I/O chip, command 0xA1 returns '5'.
Command 0xA0 copyright string: (C)1994 AMI .
Yes, this is an Intel AMI BIOS with a fancy splash screen. */
{ "[i430HX] Sony Vaio PCV-240", "pcv240", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 2800, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 196608, 8192, 127, machine_at_pcv240_init, NULL },
{ "[i430HX] Sony Vaio PCV-90", "pcv90", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 2800, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 196608, 8192, 127, machine_at_pcv90_init, NULL },
/* The base board has AMIKey-2 (updated 'H') KBC firmware. */
{ "[i430HX] ASUS P/I-P65UP5 (C-P55T2D)", "p65up5_cp55t2d", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 2500, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 524288, 8192, 127, machine_at_p65up5_cp55t2d_init, NULL },
@@ -698,7 +698,7 @@ const machine_t machines[] = {
/* The BIOS sends KBC command BB and expects it to output a byte, which is AMI KBC behavior. */
{ "[i430TX] PC Partner MB540N", "mb540n", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 60000000, 66666667, 2700, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 262144, 8192, 255, machine_at_mb540n_init, NULL },
/* [TEST] Has AMIKey 'H' KBC firmware. */
{ "[i430TX] SuperMicro Super P5MMS98", "p5mms98", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 2100, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 262144, 8192, 255, machine_at_p5mms98_init, NULL },
{ "[i430TX] Supermicro P5MMS98", "p5mms98", MACHINE_TYPE_SOCKET7, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 2100, 3520, 1.5, 3.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 262144, 8192, 255, machine_at_p5mms98_init, NULL },
/* Apollo VPX */
/* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA
@@ -760,7 +760,7 @@ const machine_t machines[] = {
{ "[i440FX] ASUS P/I-P65UP5 (C-P6ND)", "p65up5_cp6nd", MACHINE_TYPE_SOCKET8, CPU_PKG_SOCKET8, 0, 60000000, 66666667, 2100, 3500, 1.5, 8.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192,1048576, 8192, 127, machine_at_p65up5_cp6nd_init, NULL },
/* The MB-8600TTX has an AMIKey 'F' KBC firmware, so I'm going to assume so does
the MB-8600TTC until someone can actually identify it. */
{ "[i440FX] Biostar MB-8600TTC", "8600ttc", MACHINE_TYPE_SOCKET8, CPU_PKG_SOCKET8, 0, 50000000, 66666667, 2900, 3300, 2.0, 5.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192,1048576, 8192, 127, machine_at_8500ttc_init, NULL },
{ "[i440FX] Biostar MB-8600TTC", "8600ttc", MACHINE_TYPE_SOCKET8, CPU_PKG_SOCKET8, 0, 50000000, 66666667, 2900, 3300, 2.0, 5.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192,1048576, 8192, 127, machine_at_8600ttc_init, NULL },
{ "[i440FX] Gigabyte GA-686NX", "686nx", MACHINE_TYPE_SOCKET8, CPU_PKG_SOCKET8, 0, 60000000, 66666667, 2100, 3500, 2.0, 5.5, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 524288, 8192, 127, machine_at_686nx_init, NULL },
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
PC87306 Super I/O chip, command 0xA1 returns '5'.
@@ -823,18 +823,18 @@ const machine_t machines[] = {
{ "[i440BX] HP Vectra VEi 8", "vei8", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192,1048576, 8192, 255, machine_at_vei8_init, NULL },
/* Has a National Semiconductors PC87309 Super I/O chip with on-chip KBC
with most likely AMIKey-2 KBC firmware. */
{ "[i440BX] Tyan Tsunami ATX", "tsunamiatx", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 112121212, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_SOUND, 8192,1048576, 8192, 255, machine_at_tsunamiatx_init, at_tsunamiatx_get_device },
{ "[i440BX] Tyan Tsunami ATX", "s1846", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 112121212, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_SOUND, 8192,1048576, 8192, 255, machine_at_s1846_init, at_s1846_get_device },
/* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440BX] SuperMicro Super P6SBA", "p6sba", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_p6sba_init, NULL },
{ "[i440BX] Supermicro P6SBA", "p6sba", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_p6sba_init, NULL },
/* 440ZX */
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440ZX] MSI MS-6168", "ms6168", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND,8192, 524288, 8192, 255, machine_at_ms6168_init, NULL },
{ "[i440ZX] MSI MS-6168", "ms6168", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND,8192, 524288, 8192, 255, machine_at_ms6168_init, at_ms6168_get_device },
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440ZX] Packard Bell Bora Pro", "borapro", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 66666667, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND,8192, 524288, 8192, 255, machine_at_borapro_init, NULL },
{ "[i440ZX] Packard Bell Bora Pro", "borapro", MACHINE_TYPE_SLOT1, CPU_PKG_SLOT1, 0, 66666667, 66666667, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND,8192, 524288, 8192, 255, machine_at_borapro_init, at_borapro_get_device },
/* SMSC VictoryBX-66 */
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
@@ -865,13 +865,13 @@ const machine_t machines[] = {
{ "[i440GX] Gigabyte GA-6GXU", "6gxu", MACHINE_TYPE_SLOT2, CPU_PKG_SLOT2, 0, 100000000, 133333333, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 16384,2097152,16384, 511, machine_at_6gxu_init, NULL },
/* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440GX] SuperMicro Super S2DGE", "s2dge", MACHINE_TYPE_SLOT2, CPU_PKG_SLOT2, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 16384,2097152,16384, 511, machine_at_s2dge_init, NULL },
{ "[i440GX] Supermicro S2DGE", "s2dge", MACHINE_TYPE_SLOT2, CPU_PKG_SLOT2, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 16384,2097152,16384, 511, machine_at_s2dge_init, NULL },
/* PGA370 machines */
/* 440LX */
/* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440LX] SuperMicro Super 370SLM", "s370slm", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 100000000, 1800, 3500, MACHINE_MULTIPLIER_FIXED, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_s370slm_init, NULL },
{ "[i440LX] Supermicro 370SLM", "s370slm", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 100000000, 1800, 3500, MACHINE_MULTIPLIER_FIXED, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_s370slm_init, NULL },
/* 440BX */
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
@@ -885,12 +885,12 @@ const machine_t machines[] = {
{ "[i440BX] AmazePC AM-BX133", "ambx133", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 133333333, 1300, 3500, 1.5, 8.0, /* limits assumed */ MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_ambx133_init, NULL },
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440BX] Tyan Trinity 371", "trinity371", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 133333333, 1300, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_trinity371_init, NULL },
{ "[i440BX] Tyan Trinity 371", "s1857", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 133333333, 1300, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 786432, 8192, 255, machine_at_s1857_init, at_s1857_get_device },
/* 440ZX */
/* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[i440ZX] Soltek SL-63A1", "63a", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 524288, 8192, 255, machine_at_63a_init, NULL },
{ "[i440ZX] Soltek SL-63A1", "63a1", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 100000000, 1800, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 524288, 8192, 255, machine_at_63a1_init, NULL },
/* SMSC VictoryBX-66 */
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
@@ -912,7 +912,7 @@ const machine_t machines[] = {
{ "[VIA Apollo Pro133A] ASUS CUV4X-LS", "cuv4xls", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 150000000, 1300, 3500, 1.5, 8.0, (MACHINE_AGP & ~MACHINE_AT) | MACHINE_BUS_PS2 | MACHINE_BUS_AC97 | MACHINE_IDE_DUAL,16384,4194304, 8192, 255, machine_at_cuv4xls_init, NULL },
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
firmware. */
{ "[VIA Apollo Pro133A] BCM GT694VA", "gt694va", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 133333333, 1300, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 16384,3145728, 8192, 255, machine_at_gt694va_init, NULL },
{ "[VIA Apollo Pro133A] BCM GT694VA", "gt694va", MACHINE_TYPE_SOCKET370, CPU_PKG_SOCKET370, 0, 66666667, 133333333, 1300, 3500, 1.5, 8.0, MACHINE_AGP | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 16384,3145728, 8192, 255, machine_at_gt694va_init, at_gt694va_get_device },
/* Miscellaneous/Fake/Hypervisor machines */
/* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC

View File

@@ -87,7 +87,7 @@
#ifdef _WIN32
# define PATH_FREETYPE_DLL "freetype.dll"
# define PATH_FREETYPE_DLL "libfreetype.dll"
#else
# define PATH_FREETYPE_DLL "libfreetype.so.6"
#endif

View File

@@ -44,11 +44,15 @@
#define gs_error_Quit -101
#ifdef _WIN32
#define PATH_GHOSTSCRIPT_DLL "gsdll32.dll"
#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
# define PATH_GHOSTSCRIPT_DLL "gsdll32.dll"
#else
# define PATH_GHOSTSCRIPT_DLL "gsdll64.dll"
#endif
#elif defined __APPLE__
#define PATH_GHOSTSCRIPT_DLL "libgs.dylib"
#else
#define PATH_GHOSTSCRIPT_DLL "libgs.so"
#define PATH_GHOSTSCRIPT_DLL "libgs.so.9"
#endif
#define POSTSCRIPT_BUFFER_LENGTH 65536
@@ -344,8 +348,6 @@ ps_init(void *lpt)
dev->ctrl = 0x04;
dev->lpt = lpt;
reset_ps(dev);
/* Try loading the DLL. */
ghostscript_handle = dynld_module(PATH_GHOSTSCRIPT_DLL, ghostscript_imports);
if (ghostscript_handle == NULL)
@@ -369,6 +371,8 @@ ps_init(void *lpt)
timer_add(&dev->pulse_timer, pulse_timer, dev, 0);
timer_add(&dev->timeout_timer, timeout_timer, dev, 0);
reset_ps(dev);
return(dev);
}

View File

@@ -224,11 +224,15 @@ void* fluidsynth_init(const device_t *info)
/* Try loading the DLL. */
#ifdef _WIN32
# if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64))
fluidsynth_handle = dynld_module("libfluidsynth.dll", fluidsynth_imports);
# else
fluidsynth_handle = dynld_module("libfluidsynth64.dll", fluidsynth_imports);
# endif
#elif defined __APPLE__
fluidsynth_handle = dynld_module("libfluidsynth.dylib", fluidsynth_imports);
#else
fluidsynth_handle = dynld_module("libfluidsynth.so", fluidsynth_imports);
fluidsynth_handle = dynld_module("libfluidsynth.so.3", fluidsynth_imports);
#endif
if (fluidsynth_handle == NULL)
{

View File

@@ -25,15 +25,63 @@
#include <86box/io.h>
#include <86box/snd_ac97.h>
#define AC97_VENDOR_ID(f, s, t, dev) ((((f) & 0xff) << 24) | (((s) & 0xff) << 16) | (((t) & 0xff) << 8) | ((dev) & 0xff))
enum {
AC97_CODEC_AD1881 = AC97_VENDOR_ID('A', 'D', 'S', 0x40),
AC97_CODEC_ALC100 = AC97_VENDOR_ID('A', 'L', 'C', 0x20),
AC97_CODEC_CS4297 = AC97_VENDOR_ID('C', 'R', 'Y', 0x03),
AC97_CODEC_CS4297A = AC97_VENDOR_ID('C', 'R', 'Y', 0x11),
AC97_CODEC_WM9701A = AC97_VENDOR_ID('W', 'M', 'L', 0x00)
AC97_CODEC_AD1881,
AC97_CODEC_ALC100,
AC97_CODEC_CS4297,
AC97_CODEC_CS4297A,
AC97_CODEC_WM9701A
};
static const struct {
const uint32_t vendor_id, max_rate, misc_flags; /* definitions for misc_flags in snd_ac97.h */
const uint16_t reset_flags, extid_flags, /* definitions in snd_ac97.h */
powerdown_mask; /* bits [7:0] => register 26 bits [15:8]; bits [11:8] => register 2A bits [14:11] */
const ac97_vendor_reg_t *vendor_regs; /* bits [11:8] of index are the page number if applicable (registers [60:6F]) */
} ac97_codecs[] = {
[AC97_CODEC_AD1881] = {
.vendor_id = AC97_VENDOR_ID('A', 'D', 'S', 0x40),
.max_rate = 48000,
.misc_flags = AC97_MASTER_6B | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_POP | AC97_MS | AC97_LPBK,
.reset_flags = (1 << AC97_3D_SHIFT), /* datasheet contradicts itself on AC97_HPOUT */
.extid_flags = AC97_VRA,
.powerdown_mask = 0x0bf
},
[AC97_CODEC_ALC100] = {
.vendor_id = AC97_VENDOR_ID('A', 'L', 'C', 0x20),
.max_rate = 48000,
.misc_flags = AC97_AUXOUT | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_POP | AC97_MS | AC97_LPBK,
.reset_flags = (22 << AC97_3D_SHIFT),
.extid_flags = AC97_AMAP,
.powerdown_mask = 0x0bf
},
[AC97_CODEC_CS4297] = {
.vendor_id = AC97_VENDOR_ID('C', 'R', 'Y', 0x03),
.max_rate = 48000,
.misc_flags = AC97_MASTER_6B | AC97_AUXOUT | AC97_AUXOUT_6B | AC97_MONOOUT | AC97_MONOOUT_6B | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_MS | AC97_LPBK,
.reset_flags = AC97_HPOUT | AC97_DAC_18B | AC97_ADC_18B,
.extid_flags = 0,
.powerdown_mask = 0x07f,
.vendor_regs = (const ac97_vendor_reg_t[]) {{0x05a, 0x0301, 0x0000}, {0}}
},
[AC97_CODEC_CS4297A] = {
.vendor_id = AC97_VENDOR_ID('C', 'R', 'Y', 0x11),
.max_rate = 48000,
.misc_flags = AC97_MASTER_6B | AC97_AUXOUT | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_MS | AC97_LPBK,
.reset_flags = AC97_HPOUT | AC97_DAC_20B | AC97_ADC_18B | (6 << AC97_3D_SHIFT),
.extid_flags = AC97_AMAP,
.powerdown_mask = 0x0ff,
.vendor_regs = (const ac97_vendor_reg_t[]) {{0x05e, 0x0000, 0x01b0}, {0x060, 0x0023, 0x0001}, {0x068, 0x0000, 0xdfff}, {0}}
},
[AC97_CODEC_WM9701A] = {
.vendor_id = AC97_VENDOR_ID('W', 'M', 'L', 0x00),
.max_rate = 48000,
.misc_flags = AC97_AUXOUT | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_MS | AC97_LPBK,
.reset_flags = AC97_DAC_18B | AC97_ADC_18B,
.extid_flags = 0,
.powerdown_mask = 0x03f
}
};
@@ -56,6 +104,8 @@ ac97_codec_log(const char *fmt, ...)
#endif
static const int32_t codec_attn[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20,
25, 32, 41, 51, 65, 82, 103, 130, 164, 206, 260, 327, 412, 519, 653, 822,
1036, 1304, 1641, 2067, 2602, 3276, 4125, 5192, 6537, 8230, 10362, 13044, 16422, 20674, 26027, 32767,
41305, 52068, 65636, 82739, 104299, 131477, 165737, 208925
@@ -66,147 +116,296 @@ int ac97_codec_count = 0, ac97_modem_codec_count = 0,
ac97_codec_id = 0, ac97_modem_codec_id = 0;
uint8_t
ac97_codec_read(ac97_codec_t *dev, uint8_t reg)
uint16_t
ac97_codec_readw(ac97_codec_t *dev, uint8_t reg)
{
uint8_t ret = dev->regs[reg & 0x7f];
/* Redirect a read from extended pages 1+ to the right array. */
reg &= 0x7e;
uint16_t ret = dev->regs[0x24 >> 1] & 0x000f;
if ((ret > 0) && (reg >= 0x60) && (reg < 0x6f))
ret = (ret <= dev->vendor_reg_page_max) ? dev->vendor_reg_pages[(ret << 3) | ((reg & 0x0e) >> 1)] : 0;
else
ret = dev->regs[reg >> 1];
ac97_codec_log("AC97 Codec %d: read(%02X) = %02X\n", dev->codec_id, reg, ret);
ac97_codec_log("AC97 Codec %d: readw(%02X) = %04X\n", dev->codec_id, reg, ret);
return ret;
}
void
ac97_codec_write(ac97_codec_t *dev, uint8_t reg, uint8_t val)
ac97_codec_writew(ac97_codec_t *dev, uint8_t reg, uint16_t val)
{
uint8_t i;
ac97_codec_log("AC97 Codec %d: writew(%02X, %04X)\n", dev->codec_id, reg, val);
ac97_codec_log("AC97 Codec %d: write(%02X, %02X)\n", dev->codec_id, reg, val);
reg &= 0x7f;
reg &= 0x7e;
uint16_t i = 0, prev = dev->regs[reg >> 1];
int j;
switch (reg) {
case 0x00: case 0x01: /* Reset / ID code */
case 0x00: /* Reset / ID code */
ac97_codec_reset(dev);
return;
case 0x08: case 0x09: /* Master Tone Control (optional) */
case 0x0d: /* Phone Volume MSB */
case 0x0f: /* Mic Volume MSB */
case 0x1e: case 0x1f: /* Record Gain Mic (optional) */
case 0x22: case 0x23: /* 3D Control (optional) */
case 0x24: case 0x25: /* Audio Interrupt and Paging Mechanism (optional) */
case 0x26: /* Powerdown Ctrl/Stat LSB */
case 0x28: case 0x29: /* Extended Audio ID */
case 0x2b: /* Extended Audio Status/Control MSB */
//case 0x36 ... 0x59: /* Linux tests for audio capability by writing to 38-39 */
case 0x5a ... 0x5f: /* Vendor Reserved */
//case 0x60 ... 0x6f:
case 0x70 ... 0x7f: /* Vendor Reserved */
/* Read-only registers. */
return;
case 0x02: /* Master Volume */
val &= 0xbf3f;
case 0x02: /* Master Volume LSB */
case 0x04: /* Aux Out Volume LSB */
case 0x06: /* Mono Volume LSB */
val &= 0x3f;
/* fall-through */
case 0x03: /* Master Volume MSB */
case 0x05: /* Aux Out Volume MSB */
val &= 0xbf;
/* Limit level to a maximum of 011111. */
if (val & 0x20) {
val &= ~0x20;
val |= 0x1f;
/* Convert 1xxxxx to 011111 where unsupported, per specification. */
if (!(dev->misc_flags & AC97_MASTER_6B)) {
clamp_5b: if (val & 0x2000)
val = (val & ~0x2000) | 0x1f00;
clamp_5b_r: if (val & 0x0020)
val = (val & ~0x0020) | 0x001f;
}
break;
case 0x07: /* Mono Volume MSB */
case 0x0b: /* PC Beep Volume MSB */
case 0x20: /* General Purpose LSB */
val &= 0x80;
case 0x04: /* Aux Out Volume */
if (!(dev->misc_flags & AC97_AUXOUT))
return;
val &= 0xbf3f;
/* Convert 1xxxxx to 011111 where unsupported, per specification. */
if (!(dev->misc_flags & AC97_AUXOUT_6B))
goto clamp_5b;
break;
case 0x0a: /* PC Beep Volume LSB */
val &= 0x1e;
case 0x06: /* Mono Out Volume */
if (!(dev->misc_flags & AC97_MONOOUT))
return;
val &= 0x803f;
/* Convert 1xxxxx to 011111 where unsupported, per specification. */
if (!(dev->misc_flags & AC97_MONOOUT_6B))
goto clamp_5b_r;
break;
case 0x0c: /* Phone Volume LSB */
case 0x10: /* Line In Volume LSB */
case 0x12: /* CD Volume LSB */
case 0x14: /* Video Volume LSB */
case 0x16: /* Aux In Volume LSB */
case 0x18: /* PCM Out Volume LSB */
val &= 0x1f;
case 0x08: /* Master Tone Control */
if (!(dev->reset_flags & AC97_TONECTL))
return;
val &= 0x0f0f;
break;
case 0x0e: /* Mic Volume LSB */
val &= 0x5f;
case 0x0a: /* PC Beep Volume */
if (dev->misc_flags & AC97_PCBEEP)
i |= 0x801e;
if (dev->misc_flags & AC97_PCBEEP_GEN)
i |= 0x1fe0;
val &= i;
break;
case 0x11: /* Line In Volume MSB */
case 0x13: /* CD Volume MSB */
case 0x15: /* Video Volume MSB */
case 0x17: /* Aux In Volume MSB */
case 0x19: /* PCM Out Volume MSB */
val &= 0x9f;
case 0x0c: /* Phone Volume */
if (!(dev->misc_flags & AC97_PHONE))
return;
val &= 0x801f;
break;
case 0x1a: case 0x1b: /* Record Select */
val &= 0x07;
case 0x0e: /* Mic Volume */
val &= 0x805f;
break;
case 0x1c: /* Record Gain LSB */
val &= 0x0f;
case 0x10: /* Line In Volume */
case 0x12: /* CD Volume */
case 0x18: /* PCM Out Volume */
line_gain: val &= 0x9f1f;
break;
case 0x1d: /* Record Gain MSB */
val &= 0x8f;
case 0x14: /* Video Volume */
if (!(dev->misc_flags & AC97_VIDEO))
return;
goto line_gain;
case 0x16: /* Aux In Volume */
if (!(dev->misc_flags & AC97_AUXIN))
return;
goto line_gain;
case 0x1a: /* Record Select Control */
val &= 0x0707;
break;
case 0x21: /* General Purpose MSB */
val &= 0x83;
case 0x1c: /* Record Gain */
val &= 0x8f0f;
break;
case 0x2a: /* Extended Audio Status/Control LSB */
#ifdef AC97_CODEC_FULL_RATE_RANGE /* enable DRA (double rate) support */
val &= 0x0b;
#else
val &= 0x09;
#endif
case 0x1e: /* Record Gain Mic */
if (!(dev->reset_flags & AC97_MICPCM))
return;
val &= 0x800f;
break;
case 0x20: /* General Purpose */
i = AC97_MIX | (dev->misc_flags & (AC97_POP | AC97_MS | AC97_LPBK));
if (dev->reset_flags >> AC97_3D_SHIFT)
i |= AC97_3D;
if (dev->reset_flags & AC97_SIMSTEREO)
i |= AC97_ST;
if (dev->reset_flags & AC97_LOUDNESS)
i |= AC97_LD;
if (dev->extid_flags & AC97_DRA)
i |= AC97_DRSS_MASK;
val &= i;
break;
case 0x22: /* 3D Control */
switch (dev->reset_flags >> AC97_3D_SHIFT) {
case 1: /* Analog Devices */
case 6: /* Crystal */
val &= 0x000f;
break;
case 22: /* Avance Logic / Realtek */
val &= 0x0003;
break;
default:
return;
}
break;
case 0x24: /* Audio Interrupt and Paging Mechanism */
if ((dev->extid_flags & AC97_REV_MASK) < AC97_REV_2_3)
return;
val &= 0x000f;
break;
case 0x26: /* Powerdown Control/Status */
i = dev->powerdown_mask << 8;
val = (val & i) | (prev & ~i);
break;
case 0x28: /* Extended Audio ID */
if (dev->misc_flags & AC97_DSA)
i |= 0x0030;
val = (val & i) | (prev & ~i);
break;
case 0x2a: /* Extended Audio Status/Control */
i = dev->extid_flags & (AC97_VRA | AC97_DRA | AC97_SPDIF | AC97_VRM);
if (dev->extid_flags & AC97_SPDIF)
i |= AC97_SPSA_MASK << AC97_SPSA_SHIFT;
i |= (dev->powerdown_mask << 3) & 0x7800; /* multichannel powerdowns */
val = (val & i) | (prev & ~i);
/* Reset DAC sample rates to 48 KHz (96 KHz with DRA) if VRA is being cleared. */
if (!(val & 0x01)) {
if (!(val & AC97_VRA)) {
for (i = 0x2c; i <= 0x30; i += 2)
*((uint16_t *) &dev->regs[i]) = 48000;
dev->regs[i >> 1] = 48000;
}
/* Reset ADC sample rates to 48 KHz if VRM is being cleared. */
if (!(val & 0x08)) {
if (!(val & AC97_VRM)) {
for (i = 0x32; i <= 0x34; i += 2)
*((uint16_t *) &dev->regs[i]) = 48000;
dev->regs[i >> 1] = 48000;
}
break;
case 0x2c ... 0x35: /* DAC/ADC Rates */
/* Writable only if VRA/VRM is set. */
i = (reg >= 0x32) ? 0x08 : 0x01;
if (!(dev->regs[0x2a] & i))
case 0x2c: /* PCM Front DAC Rate */
case 0x32: /* PCM L/R ADC Rate */
rate: /* Writable only if VRA/VRM is set. */
i = (reg >= 0x32) ? AC97_VRM : AC97_VRA;
if (!(dev->extid_flags & i))
return;
#ifndef AC97_CODEC_FULL_RATE_RANGE
/* Limit to 48 KHz on MSB write. */
if ((reg & 1) && (((val << 8) | dev->regs[reg & 0x7e]) > 48000)) {
*((uint16_t *) &dev->regs[reg & 0x7e]) = 48000;
/* Limit to maximum rate. */
if (val > dev->max_rate)
val = dev->max_rate;
break;
case 0x2e: /* PCM Surround DAC Rate */
if (!(dev->extid_flags & AC97_SDAC))
return;
goto rate;
case 0x30: /* PCM LFE DAC Rate */
if (!(dev->extid_flags & AC97_LDAC))
return;
goto rate;
case 0x34: /* Mic ADC Rate */
if (!(dev->reset_flags & AC97_MICPCM))
return;
goto rate;
case 0x36: /* Center/LFE Volume */
if (dev->extid_flags & AC97_LDAC)
i |= 0xbf00;
if (dev->extid_flags & AC97_CDAC)
i |= 0x00bf;
val &= i;
/* Convert 1xxxxx to 011111 where unsupported, per specification. */
if (!(dev->misc_flags & AC97_LFE_6B) && (val & 0x2000))
val = (val & ~0x2000) | 0x1f00;
if (!(dev->misc_flags & AC97_CENTER_6B))
goto clamp_5b_r;
break;
case 0x38: /* Surround Volume */
if (!(dev->extid_flags & AC97_SDAC))
return;
val &= 0xbfbf;
/* Convert 1xxxxx to 011111 where unsupported, per specification. */
if (!(dev->misc_flags & AC97_SURR_6B))
goto clamp_5b;
break;
case 0x3a: /* S/PDIF Control */
if (!(dev->extid_flags & AC97_SPDIF))
return;
break;
case 0x60 ... 0x6e: /* Extended */
/* Get extended register page. */
i = dev->regs[0x24 >> 1] & 0x000f;
/* Redirect a write to page 1+ to the right array, part 1. */
if (i > 0) {
/* Don't overflow the pages. */
if (i > dev->vendor_reg_page_max)
return;
/* Get actual previous value. */
prev = dev->vendor_reg_pages[(i << 3) | ((reg & 0x0e) >> 1)];
}
i <<= 8;
/* fall-through */
case 0x5a ... 0x5e: /* Vendor Reserved */
case 0x70 ... 0x7a:
/* Stop if no vendor-specific registers are defined. */
if (!dev->vendor_regs)
return;
/* Look for a matching vendor-specific register. */
i |= reg;
for (j = 0; dev->vendor_regs[j].index; j++) {
/* If a match was found, inject written bits. */
if (dev->vendor_regs[j].index == i) {
val = (val & dev->vendor_regs[j].write_mask) | (prev & ~dev->vendor_regs[j].write_mask);
break;
}
}
/* No match found. */
if (!dev->vendor_regs[j].index)
return;
/* Redirect a write to page 1+ to the right array, part 2. */
i >>= 8;
if (i > 0) {
dev->vendor_reg_pages[(i << 3) | ((reg & 0x0e) >> 1)] = val;
return;
}
#endif
break;
case 0x7c: /* Vendor ID1 */
case 0x7e: /* Vendor ID2 */
return;
}
dev->regs[reg] = val;
dev->regs[reg >> 1] = val;
}
@@ -214,38 +413,59 @@ void
ac97_codec_reset(void *priv)
{
ac97_codec_t *dev = (ac97_codec_t *) priv;
uint8_t i;
uint16_t i, j;
ac97_codec_log("AC97 Codec %d: reset()\n", dev->codec_id);
memset(dev->regs, 0, sizeof(dev->regs));
/* Set default level and gain values. */
for (i = 0x02; i <= 0x18; i += 2) {
if (i == 0x08)
continue;
if (i >= 0x0c)
dev->regs[i] = 0x08;
dev->regs[i | 1] = (i >= 0x10) ? 0x88 : 0x80;
dev->regs[0x02 >> 1] = AC97_MUTE;
if (dev->misc_flags & AC97_AUXOUT)
dev->regs[0x04 >> 1] = AC97_MUTE;
if (dev->misc_flags & AC97_MONOOUT)
dev->regs[0x06 >> 1] = AC97_MUTE;
if (dev->misc_flags & AC97_PHONE)
dev->regs[0x0c >> 1] = AC97_MUTE | 0x0008;
dev->regs[0x0e >> 1] = AC97_MUTE | 0x0008; /* mic */
dev->regs[0x10 >> 1] = dev->regs[0x12 >> 1] = dev->regs[0x18 >> 1] = AC97_MUTE | 0x0808; /* line in, CD, PCM out */
if (dev->misc_flags & AC97_VIDEO)
dev->regs[0x14 >> 1] = AC97_MUTE | 0x0808;
if (dev->misc_flags & AC97_AUXIN)
dev->regs[0x14 >> 1] = AC97_MUTE | 0x0808;
if (dev->misc_flags & AC97_LDAC)
dev->regs[0x36 >> 1] = AC97_MUTE_L;
if (dev->misc_flags & AC97_CDAC)
dev->regs[0x36 >> 1] |= AC97_MUTE_R;
if (dev->misc_flags & AC97_SDAC)
dev->regs[0x38 >> 1] = AC97_MUTE_L | AC97_MUTE_R;
/* Set flags. */
dev->regs[0x00 >> 1] = dev->reset_flags;
dev->regs[0x26 >> 1] = 0x000f; /* codec ready */
dev->regs[0x28 >> 1] = (dev->codec_id << 14) | dev->extid_flags;
ac97_codec_writew(dev, 0x2a, 0x0000); /* reset variable DAC/ADC sample rates */
i = dev->extid_flags & (AC97_CDAC | AC97_SDAC | AC97_LDAC);
dev->regs[0x2a >> 1] |= i | (i << 5); /* any additional DACs are ready but powered down */
if (dev->extid_flags & AC97_SPDIF)
dev->regs[0x2a >> 1] |= AC97_SPCV;
if (dev->reset_flags & AC97_MICPCM)
dev->regs[0x2a >> 1] |= AC97_MADC | AC97_PRL;
/* Set vendor ID. */
dev->regs[0x7c >> 1] = dev->vendor_id >> 16;
dev->regs[0x7e >> 1] = dev->vendor_id;
/* Set vendor-specific registers. */
if (dev->vendor_regs) {
for (j = 0; dev->vendor_regs[j].index; j++) {
i = (dev->vendor_regs[j].index >> 8) & 0x000f;
if (i > 0)
dev->vendor_reg_pages[(i << 3) | (dev->vendor_regs[j].index >> 1)] = dev->vendor_regs[j].value;
else
dev->regs[dev->vendor_regs[j].index >> 1] = dev->vendor_regs[j].value;
}
}
/* Flag codec as ready. */
dev->regs[0x26] = 0x0f;
/* Set up variable sample rate support. */
#ifdef AC97_CODEC_FULL_RATE_RANGE /* enable DRA (double rate) support */
dev->regs[0x28] = 0x0b;
#else
dev->regs[0x28] = 0x09;
#endif
ac97_codec_write(dev, 0x2a, 0x00); /* reset DAC/ADC sample rates */
/* Set codec and vendor IDs. */
dev->regs[0x29] = (dev->codec_id << 6) | 0x02;
dev->regs[0x7c] = dev->vendor_id >> 16;
dev->regs[0x7d] = dev->vendor_id >> 24;
dev->regs[0x7e] = dev->vendor_id;
dev->regs[0x7f] = dev->vendor_id >> 8;
}
@@ -253,24 +473,38 @@ void
ac97_codec_getattn(void *priv, uint8_t reg, int *l, int *r)
{
ac97_codec_t *dev = (ac97_codec_t *) priv;
uint8_t r_val = dev->regs[reg],
l_val = dev->regs[reg | 1];
uint16_t val = dev->regs[reg >> 1];
if (l_val & 0x80) { /* mute */
/* Apply full mute and powerdowns. */
int full_mute = (reg < 0x36);
if ((full_mute && (val & AC97_MUTE)) || /* full mute */
(dev->regs[0x26 >> 1] & 0x3e00) || /* DAC powerdown */
((reg == 0x38) && (dev->regs[0x2a >> 1] & AC97_PRJ))) { /* surround DAC powerdown */
*l = 0;
*r = 0;
return;
} else { /* per-channel mute */
/* Determine attenuation value. */
uint8_t l_val = val >> 8, r_val = val;
if (reg <= 0x06) { /* 6-bit level */
*l = codec_attn[0x3f - (l_val & 0x3f)];
*r = codec_attn[0x3f - (r_val & 0x3f)];
} else { /* 5-bit gain */
*l = codec_attn[0x47 - (l_val & 0x1f)];
*r = codec_attn[0x47 - (r_val & 0x1f)];
}
/* Apply per-channel mute and center/LFE powerdowns where applicable. */
if (!full_mute) {
if ((val & AC97_MUTE_L) || /* left mute */
((reg == 0x36) && (dev->regs[0x2a >> 1] & AC97_PRK))) /* LFE DAC powerdown */
*l = 0;
if ((val & AC97_MUTE_R) || /* right mute */
((reg == 0x36) && (dev->regs[0x2a >> 1] & AC97_PRI))) /* center DAC powerdown */
*r = 0;
}
}
l_val &= 0x1f;
r_val &= 0x1f;
if (reg < 0x10) { /* 5-bit level (converted from 6-bit on register write) */
*l = codec_attn[0x1f - l_val];
*r = codec_attn[0x1f - r_val];
} else { /* 5-bit gain */
*l = codec_attn[0x27 - l_val];
*r = codec_attn[0x27 - r_val];
}
ac97_codec_log("AC97 Codec %d: getattn(%02X) = %d %d\n", dev->codec_id, reg, *l, *r);
}
@@ -280,13 +514,11 @@ ac97_codec_getrate(void *priv, uint8_t reg)
ac97_codec_t *dev = (ac97_codec_t *) priv;
/* Get configured sample rate, which is always 48000 if VRA/VRM is not set. */
uint32_t ret = *((uint16_t *) &dev->regs[reg]);
uint32_t ret = dev->regs[reg >> 1];
#ifdef AC97_CODEC_FULL_RATE_RANGE
/* If this is a DAC, double sample rate if DRA is set. */
if ((reg < 0x32) && (dev->regs[0x2a] & 0x02))
/* If this is the PCM DAC, double sample rate if DRA is set. */
if ((reg == 0x2c) && (dev->regs[0x2a >> 1] & AC97_DRA))
ret <<= 1;
#endif
ac97_codec_log("AC97 Codec %d: getrate(%02X) = %d\n", dev->codec_id, reg, ret);
@@ -300,7 +532,12 @@ ac97_codec_init(const device_t *info)
ac97_codec_t *dev = malloc(sizeof(ac97_codec_t));
memset(dev, 0, sizeof(ac97_codec_t));
dev->vendor_id = info->local;
dev->vendor_id = ac97_codecs[info->local].vendor_id;
dev->max_rate = ac97_codecs[info->local].max_rate;
dev->extid_flags = ac97_codecs[info->local].extid_flags;
dev->misc_flags = ac97_codecs[info->local].misc_flags;
dev->powerdown_mask = ac97_codecs[info->local].powerdown_mask;
dev->vendor_regs = ac97_codecs[info->local].vendor_regs;
ac97_codec_log("AC97 Codec %d: init(%c%c%c%02X)\n", ac97_codec_id, (dev->vendor_id >> 24) & 0xff, (dev->vendor_id >> 16) & 0xff, (dev->vendor_id >> 8) & 0xff, dev->vendor_id & 0xff);
/* Associate this codec to the current controller. */
@@ -315,6 +552,26 @@ ac97_codec_init(const device_t *info)
ac97_codec += sizeof(ac97_codec_t *);
dev->codec_id = ac97_codec_id++;
/* Allocate vendor-specific register pages if required. */
if (dev->vendor_regs) {
/* Get the highest vendor-specific register page number. */
int i, j;
dev->vendor_reg_page_max = 0;
for (j = 0; dev->vendor_regs[j].index; j++) {
i = (dev->vendor_regs[j].index >> 8) & 0x000f;
if (i > dev->vendor_reg_page_max)
dev->vendor_reg_page_max = i;
}
/* Allocate pages 1+. */
if (dev->vendor_reg_page_max > 0) {
ac97_codec_log("AC97 Codec %d: Allocating %d vendor-specific register pages\n", dev->codec_id, dev->vendor_reg_page_max);
i = 16 * dev->vendor_reg_page_max;
dev->vendor_reg_pages = (uint16_t *) malloc(i);
memset(dev->vendor_reg_pages, 0, i);
}
}
/* Initialize codec registers. */
ac97_codec_reset(dev);
@@ -329,6 +586,8 @@ ac97_codec_close(void *priv)
ac97_codec_log("AC97 Codec %d: close()\n", dev->codec_id);
if (dev->vendor_reg_pages)
free(dev->vendor_reg_pages);
free(dev);
}

View File

@@ -39,7 +39,12 @@ typedef struct {
int32_t sample_count;
uint8_t entry_flags, fifo[32], restart;
pc_timer_t timer;
int16_t out_l, out_r;
int vol_l, vol_r, pos;
int32_t buffer[SOUNDBUFLEN * 2];
uint64_t timer_latch;
pc_timer_t dma_timer, poll_timer;
} ac97_via_sgd_t;
typedef struct _ac97_via_ {
@@ -56,12 +61,7 @@ typedef struct _ac97_via_ {
ac97_codec_t *codec[2][2];
ac97_via_sgd_t sgd[6];
pc_timer_t timer_count, timer_count_fm;
uint64_t timer_latch, timer_latch_fm;
int16_t out_l, out_r, fm_out_l, fm_out_r;
int master_vol_l, master_vol_r, pcm_vol_l, pcm_vol_r, cd_vol_l, cd_vol_r;
int32_t buffer[SOUNDBUFLEN * 2], fm_buffer[SOUNDBUFLEN * 2];
int pos, fm_pos;
int master_vol_l, master_vol_r, cd_vol_l, cd_vol_r;
} ac97_via_t;
@@ -142,13 +142,13 @@ ac97_via_write_control(void *priv, uint8_t modem, uint8_t val)
/* Start or stop PCM playback. */
i = (val & 0xf4) == 0xc4;
if (i && !dev->pcm_enabled)
timer_advance_u64(&dev->timer_count, dev->timer_latch);
timer_advance_u64(&dev->sgd[0].poll_timer, dev->sgd[0].timer_latch);
dev->pcm_enabled = i;
/* Start or stop FM playback. */
i = (val & 0xf2) == 0xc2;
if (i && !dev->fm_enabled)
timer_advance_u64(&dev->timer_count_fm, dev->timer_latch);
timer_advance_u64(&dev->sgd[2].poll_timer, dev->sgd[2].timer_latch);
dev->fm_enabled = i;
/* Update primary audio codec state. */
@@ -176,13 +176,14 @@ ac97_via_update_irqs(ac97_via_t *dev)
static void
ac97_via_update_codec(ac97_via_t *dev) {
ac97_via_update_codec(ac97_via_t *dev)
{
/* Get primary audio codec. */
ac97_codec_t *codec = dev->codec[0][0];
/* Update volumes according to codec registers. */
ac97_codec_getattn(codec, 0x02, &dev->master_vol_l, &dev->master_vol_r);
ac97_codec_getattn(codec, 0x18, &dev->pcm_vol_l, &dev->pcm_vol_r);
ac97_codec_getattn(codec, 0x18, &dev->sgd[0].vol_l, &dev->sgd[0].vol_r);
ac97_codec_getattn(codec, 0x12, &dev->cd_vol_l, &dev->cd_vol_r);
/* Update sample rate according to codec registers and the variable sample rate flag. */
@@ -375,19 +376,18 @@ ac97_via_sgd_write(uint16_t addr, uint8_t val, void *priv)
if (codec) {
/* Read from or write to codec. */
if (val & 0x80) {
if (val & 1) { /* return 0x00 on unaligned reads */
if (val & 1) { /* return 0x0000 on unaligned reads (real 686B behavior) */
dev->sgd_regs[0x80] = dev->sgd_regs[0x81] = 0x00;
} else {
dev->sgd_regs[0x80] = dev->codec_shadow[modem].regs_codec[i][val] = ac97_codec_read(codec, val);
dev->sgd_regs[0x81] = dev->codec_shadow[modem].regs_codec[i][val | 1] = ac97_codec_read(codec, val | 1);
*((uint16_t *) &dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = *((uint16_t *) &dev->sgd_regs[0x80]) =
ac97_codec_readw(codec, val);
}
/* Flag data/status/index for this codec as valid. */
if (val & 0x80)
dev->sgd_regs[0x83] |= 0x02 << (i << 1);
dev->sgd_regs[0x83] |= 0x02 << (i << 1);
} else if (!(val & 1)) { /* do nothing on unaligned writes */
ac97_codec_write(codec, val, dev->codec_shadow[modem].regs_codec[i][val] = dev->sgd_regs[0x80]);
ac97_codec_write(codec, val | 1, dev->codec_shadow[modem].regs_codec[i][val | 1] = dev->sgd_regs[0x81]);
ac97_codec_writew(codec, val,
*((uint16_t *) &dev->codec_shadow[modem].regs_codec[i][val & 0x7f]) = *((uint16_t *) &dev->sgd_regs[0x80]));
/* Update primary audio codec state if that codec was written to. */
if (!modem && !i)
@@ -503,10 +503,10 @@ ac97_via_remap_modem_codec(void *priv, uint16_t new_io_base, uint8_t enable)
static void
ac97_via_update(ac97_via_t *dev)
ac97_via_update_stereo(ac97_via_t *dev, ac97_via_sgd_t *sgd)
{
int32_t l = (((dev->out_l * dev->pcm_vol_l) >> 15) * dev->master_vol_l) >> 15,
r = (((dev->out_r * dev->pcm_vol_r) >> 15) * dev->master_vol_r) >> 15;
int32_t l = (((sgd->out_l * sgd->vol_l) >> 15) * dev->master_vol_l) >> 15,
r = (((sgd->out_r * sgd->vol_r) >> 15) * dev->master_vol_r) >> 15;
if (l < -32768)
l = -32768;
@@ -517,19 +517,9 @@ ac97_via_update(ac97_via_t *dev)
else if (r > 32767)
r = 32767;
for (; dev->pos < sound_pos_global; dev->pos++) {
dev->buffer[dev->pos*2] = l;
dev->buffer[dev->pos*2 + 1] = r;
}
}
static void
ac97_via_update_fm(ac97_via_t *dev)
{
for (; dev->fm_pos < sound_pos_global; dev->fm_pos++) {
dev->fm_buffer[dev->fm_pos*2] = dev->fm_out_l;
dev->fm_buffer[dev->fm_pos*2 + 1] = dev->fm_out_r;
for (; sgd->pos < sound_pos_global; sgd->pos++) {
sgd->buffer[sgd->pos*2] = l;
sgd->buffer[sgd->pos*2 + 1] = r;
}
}
@@ -546,7 +536,7 @@ ac97_via_sgd_process(void *priv)
return;
/* Schedule next run. */
timer_on_auto(&sgd->timer, 10.0);
timer_on_auto(&sgd->dma_timer, 10.0);
/* Process SGD if it's active, and the FIFO has room or is disabled. */
if ((sgd_status == 0x80) && (sgd->always_run || ((sgd->fifo_end - sgd->fifo_pos) <= (sizeof(sgd->fifo) - 4)))) {
@@ -652,38 +642,38 @@ ac97_via_sgd_process(void *priv)
static void
ac97_via_poll(void *priv)
ac97_via_poll_stereo(void *priv)
{
ac97_via_t *dev = (ac97_via_t *) priv;
ac97_via_sgd_t *sgd = &dev->sgd[0]; /* Audio Read */
/* Schedule next run if PCM playback is enabled. */
if (dev->pcm_enabled)
timer_advance_u64(&dev->timer_count, dev->timer_latch);
timer_advance_u64(&sgd->poll_timer, sgd->timer_latch);
/* Update audio buffer. */
ac97_via_update(dev);
/* Update stereo audio buffer. */
ac97_via_update_stereo(dev, sgd);
/* Feed next sample from the FIFO. */
switch (dev->sgd_regs[0x02] & 0x30) {
switch (dev->sgd_regs[sgd->id | 0x2] & 0x30) {
case 0x00: /* Mono, 8-bit PCM */
if ((sgd->fifo_end - sgd->fifo_pos) >= 1) {
dev->out_l = dev->out_r = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
sgd->out_l = sgd->out_r = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
return;
}
break;
case 0x10: /* Stereo, 8-bit PCM */
if ((sgd->fifo_end - sgd->fifo_pos) >= 2) {
dev->out_l = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
dev->out_r = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
sgd->out_l = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
sgd->out_r = (sgd->fifo[sgd->fifo_pos++ & (sizeof(sgd->fifo) - 1)] ^ 0x80) << 8;
return;
}
break;
case 0x20: /* Mono, 16-bit PCM */
if ((sgd->fifo_end - sgd->fifo_pos) >= 2) {
dev->out_l = dev->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->out_l = sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->fifo_pos += 2;
return;
}
@@ -691,9 +681,9 @@ ac97_via_poll(void *priv)
case 0x30: /* Stereo, 16-bit PCM */
if ((sgd->fifo_end - sgd->fifo_pos) >= 4) {
dev->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->fifo_pos += 2;
dev->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->fifo_pos += 2;
return;
}
@@ -701,7 +691,7 @@ ac97_via_poll(void *priv)
}
/* Feed silence if the FIFO is empty. */
dev->out_l = dev->out_r = 0;
sgd->out_l = sgd->out_r = 0;
}
@@ -713,23 +703,23 @@ ac97_via_poll_fm(void *priv)
/* Schedule next run if FM playback is enabled. */
if (dev->fm_enabled)
timer_advance_u64(&dev->timer_count_fm, dev->timer_latch_fm);
timer_advance_u64(&sgd->poll_timer, sgd->timer_latch);
/* Update FM audio buffer. */
ac97_via_update_fm(dev);
ac97_via_update_stereo(dev, sgd);
/* Feed next sample from the FIFO.
The data format is not documented, but it probes as 16-bit stereo at 24 KHz. */
if ((sgd->fifo_end - sgd->fifo_pos) >= 4) {
dev->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->out_l = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->fifo_pos += 2;
dev->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->out_r = *((uint16_t *) &sgd->fifo[sgd->fifo_pos & (sizeof(sgd->fifo) - 1)]);
sgd->fifo_pos += 2;
return;
}
/* Feed silence if the FIFO is empty. */
dev->fm_out_l = dev->fm_out_r = 0;
sgd->out_l = sgd->out_r = 0;
}
@@ -738,15 +728,15 @@ ac97_via_get_buffer(int32_t *buffer, int len, void *priv)
{
ac97_via_t *dev = (ac97_via_t *) priv;
ac97_via_update(dev);
ac97_via_update_fm(dev);
ac97_via_update_stereo(dev, &dev->sgd[0]);
ac97_via_update_stereo(dev, &dev->sgd[2]);
for (int c = 0; c < len * 2; c++) {
buffer[c] += dev->buffer[c] / 2;
buffer[c] += dev->fm_buffer[c] / 2;
buffer[c] += dev->sgd[0].buffer[c] / 2;
buffer[c] += dev->sgd[2].buffer[c] / 2;
}
dev->pos = dev->fm_pos = 0;
dev->sgd[0].pos = dev->sgd[2].pos = 0;
}
@@ -773,8 +763,8 @@ ac97_via_speed_changed(void *priv)
else
freq = 48000.0;
dev->timer_latch = (uint64_t) ((double) TIMER_USEC * (1000000.0 / freq));
dev->timer_latch_fm = (uint64_t) ((double) TIMER_USEC * (1000000.0 / 24000.0));
dev->sgd[0].timer_latch = (uint64_t) ((double) TIMER_USEC * (1000000.0 / freq));
dev->sgd[2].timer_latch = (uint64_t) ((double) TIMER_USEC * (1000000.0 / 24000.0));
}
@@ -801,12 +791,16 @@ ac97_via_init(const device_t *info)
if ((i != 0) && (i != 2))
dev->sgd[i].always_run = 1;
timer_add(&dev->sgd[i].timer, ac97_via_sgd_process, &dev->sgd[i], 0);
/* No volume control on FM SGD that I know of. */
if (i == 2)
dev->sgd[i].vol_l = dev->sgd[i].vol_r = 32767;
timer_add(&dev->sgd[i].dma_timer, ac97_via_sgd_process, &dev->sgd[i], 0);
}
/* Set up playback pollers. */
timer_add(&dev->timer_count, ac97_via_poll, dev, 0);
timer_add(&dev->timer_count_fm, ac97_via_poll_fm, dev, 0);
timer_add(&dev->sgd[0].poll_timer, ac97_via_poll_stereo, dev, 0);
timer_add(&dev->sgd[2].poll_timer, ac97_via_poll_fm, dev, 0);
ac97_via_speed_changed(dev);
/* Set up playback handler. */

View File

@@ -1013,13 +1013,10 @@ es1371_outl(uint16_t port, uint32_t val, void *p)
case 0x14:
if (val & CODEC_READ) {
dev->codec_ctrl &= 0x00ff0000;
val = (val >> 16) & 0x7e;
dev->codec_ctrl |= ac97_codec_read(dev->codec, val);
dev->codec_ctrl |= ac97_codec_read(dev->codec, val | 1) << 8;
dev->codec_ctrl |= ac97_codec_readw(dev->codec, val >> 16);
} else {
dev->codec_ctrl = val & 0x00ffffff;
ac97_codec_write(dev->codec, (val >> 16) & 0x7e, val & 0xff);
ac97_codec_write(dev->codec, ((val >> 16) & 0x7e) | 1, val >> 8);
ac97_codec_writew(dev->codec, val >> 16, val);
ac97_codec_getattn(dev->codec, 0x02, &dev->master_vol_l, &dev->master_vol_r);
ac97_codec_getattn(dev->codec, 0x12, &dev->cd_vol_l, &dev->cd_vol_r);

View File

@@ -110,6 +110,7 @@ static const SOUND_CARD sound_cards[] =
{ "sbmcv", &sb_mcv_device },
{ "sbpromcv", &sb_pro_mcv_device },
{ "es1371", &es1371_device },
{ "ad1881", &ad1881_device },
{ "cs4297a", &cs4297a_device },
{ "", NULL }
};

View File

@@ -50,6 +50,7 @@ SDL_mutex *blitmtx;
SDL_threadID eventthread;
static int exit_event = 0;
static int fullscreen_pending = 0;
uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for now all set to LCID of en-US
static const uint16_t sdl_to_xt[0x200] =
{
@@ -1235,6 +1236,15 @@ uint32_t plat_language_code(char* langcode)
return 0;
}
/* Converts back the language code to LCID */
void
plat_language_code_r(uint32_t lcid, char* outbuf, int len)
{
/* or maybe not */
return;
}
void joystick_init(void) {}
void joystick_close(void) {}
void joystick_process(void) {}

View File

@@ -13,7 +13,7 @@
# Copyright 2020,2021 David Hrdlička.
#
add_library(vid OBJECT video.c vid_table.c vid_cga.c vid_cga_comp.c
add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c
vid_compaq_cga.c vid_mda.c vid_hercules.c vid_herculesplus.c
vid_incolor.c vid_colorplus.c vid_genius.c vid_pgc.c vid_im1024.c
vid_sigma.c vid_wy700.c vid_ega.c vid_ega_render.c vid_svga.c

193
src/video/agpgart.c Normal file
View File

@@ -0,0 +1,193 @@
/*
* 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.
*
* AGP Graphics Address Remapping Table remapping emulation.
*
*
*
* Authors: RichardG, <richardg867@gmail.com>
*
* Copyright 2021 RichardG.
*/
#include <stdarg.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#define HAVE_STDARG_H
#include <86box/86box.h>
#include <86box/device.h>
#include <86box/mem.h>
typedef struct {
int aperture_enable;
uint32_t aperture_base, aperture_size, aperture_mask, gart_base;
mem_mapping_t aperture_mapping;
} agpgart_t;
#ifdef ENABLE_AGPGART_LOG
int agpgart_do_log = ENABLE_AGPGART_LOG;
static void
agpgart_log(const char *fmt, ...)
{
va_list ap;
if (agpgart_do_log) {
va_start(ap, fmt);
pclog_ex(fmt, ap);
va_end(ap);
}
}
#else
#define agpgart_log(fmt, ...)
#endif
void
agpgart_set_aperture(void *handle, uint32_t base, uint32_t size, int enable)
{
agpgart_t *dev = (agpgart_t *) handle;
agpgart_log("AGP GART: set_aperture(%08X, %d, %d)\n", base, size, enable);
/* Disable old aperture mapping. */
mem_mapping_disable(&dev->aperture_mapping);
/* Set new aperture base address, size and mask. */
dev->aperture_base = base;
dev->aperture_size = size;
dev->aperture_mask = size - 1;
/* Enable new aperture mapping if requested. */
if (dev->aperture_base && dev->aperture_size && dev->aperture_enable) {
mem_mapping_set_addr(&dev->aperture_mapping, dev->aperture_base, dev->aperture_size);
mem_mapping_enable(&dev->aperture_mapping);
}
}
void
agpgart_set_gart(void *handle, uint32_t base)
{
agpgart_t *dev = (agpgart_t *) handle;
agpgart_log("AGP GART: set_gart(%08X)\n", base);
/* Set GART base address. */
dev->gart_base = base;
}
static uint32_t
agpgart_translate(uint32_t addr, agpgart_t *dev)
{
/* Extract the bits we care about. */
addr &= dev->aperture_mask;
/* Get the GART pointer for this page. */
register uint32_t gart_ptr = mem_readl_phys(dev->gart_base + ((addr >> 10) & 0xfffffffc)) & 0xfffff000;
/* Return remapped address with the page offset. */
return gart_ptr | (addr & 0x00000fff);
}
static uint8_t
agpgart_aperture_readb(uint32_t addr, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
return mem_readb_phys(agpgart_translate(addr, dev));
}
static uint16_t
agpgart_aperture_readw(uint32_t addr, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
return mem_readw_phys(agpgart_translate(addr, dev));
}
static uint32_t
agpgart_aperture_readl(uint32_t addr, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
return mem_readl_phys(agpgart_translate(addr, dev));
}
static void
agpgart_aperture_writeb(uint32_t addr, uint8_t val, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
mem_writeb_phys(agpgart_translate(addr, dev), val);
}
static void
agpgart_aperture_writew(uint32_t addr, uint16_t val, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
mem_writew_phys(agpgart_translate(addr, dev), val);
}
static void
agpgart_aperture_writel(uint32_t addr, uint32_t val, void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
mem_writel_phys(agpgart_translate(addr, dev), val);
}
static void *
agpgart_init(const device_t *info)
{
agpgart_t *dev = malloc(sizeof(agpgart_t));
memset(dev, 0, sizeof(agpgart_t));
agpgart_log("AGP GART: init()\n");
/* Create aperture mapping. */
mem_mapping_add(&dev->aperture_mapping, 0, 0,
agpgart_aperture_readb, agpgart_aperture_readw, agpgart_aperture_readl,
agpgart_aperture_writeb, agpgart_aperture_writew, agpgart_aperture_writel,
NULL, MEM_MAPPING_EXTERNAL, dev);
return dev;
}
static void
agpgart_close(void *priv)
{
agpgart_t *dev = (agpgart_t *) priv;
agpgart_log("AGP GART: close()\n");
/* Disable aperture. */
mem_mapping_disable(&dev->aperture_mapping);
free(dev);
}
const device_t agpgart_device =
{
"AGP Graphics Address Remapping Table",
DEVICE_PCI,
0,
agpgart_init, agpgart_close, NULL,
{ NULL },
NULL,
NULL,
NULL
};

View File

@@ -483,6 +483,10 @@ tgui_out(uint16_t addr, uint8_t val, void *p)
tgui_recalcmapping(tgui);
break;
case 0x37:
i2c_gpio_set(tgui->i2c, (val & 0x02) || !(val & 0x04), (val & 0x01) || !(val & 0x08));
break;
case 0x40: case 0x41: case 0x42: case 0x43:
case 0x44: case 0x45: case 0x46: case 0x47:
if (tgui->type >= TGUI_9440) {
@@ -581,7 +585,7 @@ tgui_in(uint16_t addr, void *p)
return svga->seqregs[0x0e];
}
break;
case 0x3C6:
if (tgui->type == TGUI_9400CXI)
return tkd8001_ramdac_in(addr, svga->ramdac, svga);
@@ -589,13 +593,13 @@ tgui_in(uint16_t addr, void *p)
return tgui->ramdac_ctrl;
tgui->ramdac_state++;
break;
case 0x3C7: case 0x3C8: case 0x3C9:
if (tgui->type == TGUI_9400CXI)
return tkd8001_ramdac_in(addr, svga->ramdac, svga);
tgui->ramdac_state = 0;
break;
case 0x3CF:
if (tgui->type == TGUI_9400CXI && svga->gdcaddr >= 16 && svga->gdcaddr < 32)
return tgui->ext_gdc_regs[svga->gdcaddr & 15];
@@ -605,7 +609,19 @@ tgui_in(uint16_t addr, void *p)
case 0x3D4:
return svga->crtcreg;
case 0x3D5:
temp = svga->crtc[svga->crtcreg];
temp = svga->crtc[svga->crtcreg];
if (svga->crtcreg == 0x37) {
if (!(temp & 0x04)) {
temp &= ~0x02;
if (i2c_gpio_get_scl(tgui->i2c))
temp |= 0x02;
}
if (!(temp & 0x08)) {
temp &= ~0x01;
if (i2c_gpio_get_sda(tgui->i2c))
temp |= 0x01;
}
}
return temp;
case 0x3d8:
return tgui->tgui_3d8;
@@ -3000,7 +3016,7 @@ static void *tgui_init(const device_t *info)
if (tgui->pci && (tgui->type >= TGUI_9440)) {
if (tgui->has_bios)
tgui->card = pci_add_card(PCI_ADD_VIDEO, tgui_pci_read, tgui_pci_write, tgui);
tgui->card = pci_add_card(PCI_ADD_VIDEO, tgui_pci_read, tgui_pci_write, tgui);
else
tgui->card = pci_add_card(PCI_ADD_VIDEO | PCI_ADD_STRICT, tgui_pci_read, tgui_pci_write, tgui);
}
@@ -3013,10 +3029,9 @@ static void *tgui_init(const device_t *info)
tgui->pci_regs[0x33] = 0x00;
}
if (tgui->type >= TGUI_9440)
if (tgui->type >= TGUI_9440) {
svga->packed_chain4 = 1;
if (tgui->type >= TGUI_9660) {
tgui->i2c = i2c_gpio_init("ddc_tgui");
tgui->ddc = ddc_init(i2c_gpio_get_bus(tgui->i2c));
}
@@ -3045,6 +3060,9 @@ void tgui_close(void *p)
svga_close(&tgui->svga);
ddc_close(tgui->ddc);
i2c_gpio_close(tgui->i2c);
free(tgui);
}

View File

@@ -311,8 +311,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,0,0
PRODUCTVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,0,0
FILEVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,EMU_VERSION_PATCH,EMU_BUILD_NUM
PRODUCTVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,EMU_VERSION_PATCH,EMU_BUILD_NUM
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -331,7 +331,7 @@ BEGIN
VALUE "FileDescription", EMU_NAME "\0"
VALUE "FileVersion", EMU_VERSION "\0"
VALUE "InternalName", EMU_NAME "\0"
VALUE "LegalCopyright", "Copyright \xc2\xa9 2007-2020 " EMU_NAME " contributors\0"
VALUE "LegalCopyright", "Copyright \xc2\xa9 2007-" COPYRIGHT_YEAR " " EMU_NAME " contributors\0"
VALUE "OriginalFilename", "86box.exe\0"
VALUE "ProductName", EMU_NAME "\0"
VALUE "ProductVersion", EMU_VERSION "\0"
@@ -361,4 +361,5 @@ END
#include "languages/en-US.rc"
#include "languages/hu-HU.rc"
#include "languages/hu-HU.rc"
#include "languages/pt-BR.rc"

View File

@@ -723,7 +723,7 @@ SNDOBJ := sound.o \
snd_wss.o \
snd_ym7128.o
VIDOBJ := video.o \
VIDOBJ := agpgart.o video.o \
vid_table.o \
vid_cga.o vid_cga_comp.o \
vid_compaq_cga.o \

View File

@@ -0,0 +1,458 @@
DLG_PROG_SETT DIALOG DISCARDABLE 0, 0, 240, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION STR_PROG_SETT
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON STR_OK, IDOK, 123, 65, 50, 14
PUSHBUTTON STR_CANCEL, IDCANCEL, 179, 65, 50, 14
COMBOBOX IDC_COMBO_LANG, 13, 18, 213, 22, CBS_DROPDOWNLIST | CBS_HASSTRINGS
AUTOCHECKBOX STR_GLOBAL, IDC_CHECKBOX_GLOBAL, 13, 50, 217, 8 , WS_DISABLED
PUSHBUTTON STR_DEFAULT, IDC_BUTTON_DEFAULT, 162, 32, 60, 14
LTEXT STR_LANGUAGE, 0, 13, 8, 34, 8
END
DLG_SND_GAIN DIALOG DISCARDABLE 0, 0, 113, 136
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION STR_SND_GAIN
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON STR_OK,IDOK,57,7,50,14
PUSHBUTTON STR_CANCEL,IDCANCEL,57,24,50,14
CONTROL STR_GAIN,IDC_SLIDER_GAIN,"msctls_trackbar32",TBS_VERT |
TBS_BOTH | TBS_AUTOTICKS | WS_TABSTOP,15,20,20,109
CTEXT STR_GAIN,IDT_1746,10,7,32,9,SS_CENTERIMAGE
END
DLG_NEW_FLOPPY DIALOG DISCARDABLE 0, 0, 226, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION STR_NEW_FLOPPY
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON STR_OK,IDOK,104,65,50,14
PUSHBUTTON STR_CANCEL,IDCANCEL,162,65,50,14
LTEXT STR_FILE_NAME,IDT_1749,7,6,44,12,SS_CENTERIMAGE
LTEXT STR_DISK_SIZE,IDT_1750,7,25,44,12,SS_CENTERIMAGE
LTEXT STR_RPM_MODE,IDT_1751,7,45,44,12,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_FILE_NAME,53,5,150,14,ES_AUTOHSCROLL | ES_READONLY
COMBOBOX IDC_COMBO_DISK_SIZE,53,25,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO_RPM_MODE,53,45,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_CFILE,206,5,13,14
LTEXT STR_PROGRESS,IDT_1757,7,45,44,12,SS_CENTERIMAGE
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,53,45,166,14
END
DLG_CONFIG DIALOG DISCARDABLE 0, 0, 376, 256
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION STR_CONFIG
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON STR_OK,IDOK,246,235,50,14
PUSHBUTTON STR_CANCEL,IDCANCEL,307,235,50,14
CONTROL "List2",IDC_SETTINGSCATLIST,"SysListView32",LVS_REPORT | LVS_NOCOLUMNHEADER |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,100,212
CONTROL "",-1,"Static",SS_BLACKFRAME | SS_SUNKEN,1,226,373,1
END
DLG_SPECIFY_DIM DIALOG DISCARDABLE 0, 0, 175, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION STR_SPECIFY_DIM
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_WIDTH,IDT_1709,7,9,24,12
EDITTEXT IDC_EDIT_WIDTH,33,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_WIDTHSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,76,6,
12,12
LTEXT STR_HEIGHT,IDT_1710,97,9,24,12
EDITTEXT IDC_EDIT_HEIGHT,123,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_HEIGHTSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,166,6,
12,12
CONTROL STR_LOCK_TO_SIZE,IDC_CHECK_LOCK_SIZE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,26,94,10
DEFPUSHBUTTON STR_OK,IDOK,30,45,50,14
PUSHBUTTON STR_CANCEL,IDCANCEL,99,45,50,14
END
DLG_CFG_MACHINE DIALOG DISCARDABLE 107, 0, 305, 200
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_MACHINE_TYPE,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_MACHINE_TYPE,IDT_1708,7,9,60,10
COMBOBOX IDC_COMBO_MACHINE,71,26,138,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_MACHINE,IDT_1701,7,28,60,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_MACHINE,214,26,46,12
COMBOBOX IDC_COMBO_CPU_TYPE,71,45,110,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CPU_TYPE,IDT_1702,7,47,59,10
COMBOBOX IDC_COMBO_CPU,215,45,45,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_SPEED,IDT_1704,189,47,24,10
COMBOBOX IDC_COMBO_FPU,71,64,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_FPU,IDT_1707,7,66,59,10
COMBOBOX IDC_COMBO_WS,71,83,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_WAIT_STATES,IDT_1703,7,85,60,10
EDITTEXT IDC_MEMTEXT,70,102,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_MEMSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,113,101,
12,12
LTEXT STR_MB,IDT_1705,123,104,10,10
LTEXT STR_MEMORY,IDT_1706,7,104,30,10
GROUPBOX STR_TIME_SYNC,IDC_TIME_SYNC,7,135,100,56
CONTROL STR_DISABLED,IDC_RADIO_TS_DISABLED,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,147,84,10
CONTROL STR_ENABLED_LOCAL, IDC_RADIO_TS_LOCAL,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,161,84,10
CONTROL STR_ENABLED_UTC, IDC_RADIO_TS_UTC,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,84,10
#ifdef USE_DYNAREC
CONTROL STR_DYNAREC,IDC_CHECK_DYNAREC,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
#endif
END
DLG_CFG_VIDEO DIALOG DISCARDABLE 107, 0, 267, 45
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_VIDEO,IDT_1707,7,9,48,10
COMBOBOX IDC_COMBO_VIDEO,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_VID,222,7,38,12
CONTROL STR_VOODOO,IDC_CHECK_VOODOO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,27,199,10
PUSHBUTTON STR_CONFIGURE,IDC_BUTTON_VOODOO,222,26,38,12
END
DLG_CFG_INPUT DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_MOUSE,IDT_1709,7,9,57,10
COMBOBOX IDC_COMBO_MOUSE,71,7,140,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_MOUSE,214,7,46,12
LTEXT STR_JOYSTICK,IDT_1710,7,27,58,10
COMBOBOX IDC_COMBO_JOYSTICK,71,25,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_JOY1,IDC_JOY1,7,44,50,14
PUSHBUTTON STR_JOY2,IDC_JOY2,74,44,50,14
PUSHBUTTON STR_JOY3,IDC_JOY3,141,44,50,14
PUSHBUTTON STR_JOY4,IDC_JOY4,209,44,50,14
END
DLG_CFG_SOUND DIALOG DISCARDABLE 107, 0, 267, 201
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_SOUND,71,7,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_SOUND,IDT_1711,7,9,59,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SND,214,7,46,12
COMBOBOX IDC_COMBO_MIDI,71,26,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_MIDI,IDT_1712,7,28,59,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_MIDI,214,26,46,12
COMBOBOX IDC_COMBO_MIDI_IN,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_MIDI_IN,IDT_1713,7,47,59,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_MIDI_IN,214,45,46,12
CONTROL STR_MPU401,IDC_CHECK_MPU401,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_MPU401,214,64,46,12
CONTROL STR_SSI,IDC_CHECK_SSI,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,84,95,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SSI,214,82,46,12
CONTROL STR_CMS,IDC_CHECK_CMS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,102,95,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_CMS,214,100,46,12
CONTROL STR_GUS,IDC_CHECK_GUS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_GUS,214,118,46,12
CONTROL STR_FLOAT,IDC_CHECK_FLOAT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,94,10
END
DLG_CFG_NETWORK DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_NET_TYPE,IDT_1714,7,9,59,10
COMBOBOX IDC_COMBO_NET_TYPE,71,7,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_PCAP,IDT_1715,7,28,59,10
COMBOBOX IDC_COMBO_PCAP,71,26,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT STR_NET,IDT_1716,7,47,59,10
COMBOBOX IDC_COMBO_NET,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_NET,214,44,46,12
END
DLG_CFG_PORTS DIALOG DISCARDABLE 107, 0, 267, 135
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_LPT1,IDT_1717,7,9,61,10
COMBOBOX IDC_COMBO_LPT1,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_LPT2,IDT_1718,7,28,61,10
COMBOBOX IDC_COMBO_LPT2,71,26,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_LPT3,IDT_1719,7,47,61,10
COMBOBOX IDC_COMBO_LPT3,71,45,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL STR_SERIAL1,IDC_CHECK_SERIAL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,64,94,10
CONTROL STR_SERIAL2,IDC_CHECK_SERIAL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,64,94,10
CONTROL STR_SERIAL3,IDC_CHECK_SERIAL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,82,94,10
CONTROL STR_SERIAL4,IDC_CHECK_SERIAL4,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,82,94,10
CONTROL STR_PARALLEL1,IDC_CHECK_PARALLEL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,100,94,10
CONTROL STR_PARALLEL2,IDC_CHECK_PARALLEL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,100,94,10
CONTROL STR_PARALLEL3,IDC_CHECK_PARALLEL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,118,94,10
END
DLG_CFG_STORAGE DIALOG DISCARDABLE 107, 0, 267, 203
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_HDC,IDT_1718,7,9,64,10
COMBOBOX IDC_COMBO_HDC,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_HDC,222,7,38,12
LTEXT STR_FDC,IDT_1768,7,28,64,10
COMBOBOX IDC_COMBO_FDC,64,26,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_FDC,222,26,38,12
CONTROL STR_IDE_TER,IDC_CHECK_IDE_TER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,47,199,10
PUSHBUTTON STR_CONFIGURE,IDC_BUTTON_IDE_TER,222,45,38,12
CONTROL STR_IDE_QUA,IDC_CHECK_IDE_QUA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON STR_CONFIGURE,IDC_BUTTON_IDE_QUA,222,64,38,12
GROUPBOX STR_SCSI,IDC_GROUP_SCSI,7,85,253,93
LTEXT STR_SCSI_1,IDT_1763,16,102,48,10
COMBOBOX IDC_COMBO_SCSI_1,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SCSI_1,213,100,38,12
LTEXT STR_SCSI_2,IDT_1764,16,121,48,10
COMBOBOX IDC_COMBO_SCSI_2,73,119,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SCSI_2,213,119,38,12
LTEXT STR_SCSI_3,IDT_1765,16,140,48,10
COMBOBOX IDC_COMBO_SCSI_3,73,138,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SCSI_3,213,138,38,12
LTEXT STR_SCSI_4,IDT_1766,16,159,48,10
COMBOBOX IDC_COMBO_SCSI_4,73,157,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_SCSI_4,213,157,38,12
CONTROL STR_CASSETTE,IDC_CHECK_CASSETTE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,185,94,10
END
DLG_CFG_HARD_DISKS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_HARD_DISKS,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,92
LTEXT STR_HDD,IDT_1720,7,7,253,8
PUSHBUTTON STR_NEW,IDC_BUTTON_HDD_ADD_NEW,60,137,62,10
PUSHBUTTON STR_EXISTING,IDC_BUTTON_HDD_ADD,129,137,62,10
PUSHBUTTON STR_REMOVE,IDC_BUTTON_HDD_REMOVE,198,137,62,10
COMBOBOX IDC_COMBO_HD_BUS,33,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BUS,IDT_1721,7,119,24,8
COMBOBOX IDC_COMBO_HD_CHANNEL,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CHANNEL,IDT_1722,131,119,38,8
COMBOBOX IDC_COMBO_HD_ID,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_ID,IDT_1723,131,119,38,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
END
DLG_CFG_HARD_DISKS_ADD DIALOG DISCARDABLE 0, 0, 219, 149
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Add Hard Disk"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON STR_OK,IDOK,55,127,50,14
PUSHBUTTON STR_CANCEL,IDCANCEL,112,127,50,14
EDITTEXT IDC_EDIT_HD_FILE_NAME,7,16,153,12
PUSHBUTTON STR_SPECIFY,IDC_CFILE,167,16,44,12
EDITTEXT IDC_EDIT_HD_SPT,183,34,28,12
EDITTEXT IDC_EDIT_HD_HPC,112,34,28,12
EDITTEXT IDC_EDIT_HD_CYL,42,34,28,12
EDITTEXT IDC_EDIT_HD_SIZE,42,52,28,12
COMBOBOX IDC_COMBO_HD_TYPE,113,52,98,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_SECTORS,IDT_1726,154,35,27,10
LTEXT STR_HEADS,IDT_1727,81,35,29,8
LTEXT STR_CYLS,IDT_1728,7,35,32,12
LTEXT STR_SIZE_MB,IDT_1729,7,54,33,8
LTEXT STR_TYPE,IDT_1730,86,54,24,8
LTEXT STR_FILE_NAME,IDT_1731,7,7,204,9
COMBOBOX IDC_COMBO_HD_BUS,33,71,58,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BUS,IDT_1721,7,73,24,8
COMBOBOX IDC_COMBO_HD_CHANNEL,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CHANNEL,IDT_1722,99,73,34,8
COMBOBOX IDC_COMBO_HD_ID,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_ID,IDT_1723,99,73,34,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_IMG_FORMAT,IDT_1774,7,92,50,12
COMBOBOX IDC_COMBO_HD_IMG_FORMAT,58,90,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BLOCK_SIZE,IDT_1775,7,111,50,12
COMBOBOX IDC_COMBO_HD_BLOCK_SIZE,58,109,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_PROGRESS,IDT_1752,7,7,204,9
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,7,16,204,12
END
DLG_CFG_FLOPPY_AND_CDROM_DRIVES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_FLOPPY_DRIVES,"SysListView32",
LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,60
LTEXT STR_FLOPPY_DRIVES,IDT_1737,7,7,253,8
COMBOBOX IDC_COMBO_FD_TYPE,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_TYPE,IDT_1738,7,87,24,8
CONTROL STR_TURBO,IDC_CHECKTURBO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,131,86,64,10
CONTROL STR_CHECKBPB,IDC_CHECKBPB,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,196,86,64,10
CONTROL "List1",IDC_LIST_CDROM_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,117,253,60
LTEXT STR_CDROM_DRIVES,IDT_1739,7,107,253,8
COMBOBOX IDC_COMBO_CD_BUS,33,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BUS,IDT_1740,7,187,24,8
COMBOBOX IDC_COMBO_CD_ID,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_ID,IDT_1741,131,187,38,8
COMBOBOX IDC_COMBO_CD_CHANNEL_IDE,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CHANNEL,IDT_1742,131,187,38,8
COMBOBOX IDC_COMBO_CD_SPEED,33,205,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_SPEED,IDT_1758,7,207,24,8
END
DLG_CFG_OTHER_REMOVABLE_DEVICES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_MO_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,17,253,60
LTEXT STR_MO_DRIVES,IDT_1769,7,7,253,8
COMBOBOX IDC_COMBO_MO_BUS,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BUS,IDT_1770,7,87,24,8
COMBOBOX IDC_COMBO_MO_ID,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_ID,IDT_1771,131,87,38,8
COMBOBOX IDC_COMBO_MO_CHANNEL_IDE,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CHANNEL,IDT_1772,131,87,38,8
COMBOBOX IDC_COMBO_MO_TYPE,33,105,120,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_TYPE,IDT_1773,7,107,24,8
CONTROL "List1",IDC_LIST_ZIP_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,137,253,60
LTEXT STR_ZIP_DRIVES,IDT_1759,7,127,253,8
COMBOBOX IDC_COMBO_ZIP_BUS,23,205,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_BUS,IDT_1753,7,207,14,8
COMBOBOX IDC_COMBO_ZIP_ID,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_ID,IDT_1754,120,207,28,8
COMBOBOX IDC_COMBO_ZIP_CHANNEL_IDE,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT STR_CHANNEL,IDT_1755,120,207,28,8
CONTROL STR_250,IDC_CHECK250,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,218,205,44,10
END
DLG_CFG_PERIPHERALS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT STR_ISARTC,IDT_1767,7,9,48,10
COMBOBOX IDC_COMBO_ISARTC,64,7,155,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_ISARTC,222,7,38,12
GROUPBOX STR_ISAMEM,IDC_GROUP_ISAMEM,7,28,253,93
LTEXT STR_ISAMEM_1,IDT_1763,16,45,48,10
COMBOBOX IDC_COMBO_ISAMEM_1,73,43,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_ISAMEM_1,213,43,38,12
LTEXT STR_ISAMEM_2,IDT_1764,16,64,48,10
COMBOBOX IDC_COMBO_ISAMEM_2,73,62,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_ISAMEM_2,213,62,38,12
LTEXT STR_ISAMEM_3,IDT_1765,16,83,48,10
COMBOBOX IDC_COMBO_ISAMEM_3,73,81,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_ISAMEM_3,213,81,38,12
LTEXT STR_ISAMEM_4,IDT_1766,16,102,48,10
COMBOBOX IDC_COMBO_ISAMEM_4,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON STR_CONFIGURE,IDC_CONFIGURE_ISAMEM_4,213,100,38,12
CONTROL STR_BUGGER,IDC_CHECK_BUGGER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,128,94,10
CONTROL STR_POSTCARD,IDC_CHECK_POSTCARD,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,128,94,10
END

View File

@@ -6,6 +6,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(65001)
#endif //_WIN32
#define AUTHORS
/////////////////////////////////////////////////////////////////////////////
//
// Menu
@@ -271,473 +273,125 @@ END
// Dialog
//
DLG_PROG_SETT DIALOG DISCARDABLE 0, 0, 240, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Change Display Language"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 123, 65, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 179, 65, 50, 14
COMBOBOX IDC_COMBO_LANG, 13, 18, 213, 22, CBS_DROPDOWNLIST | CBS_HASSTRINGS
AUTOCHECKBOX "Save these settings as &global defaults", IDC_CHECKBOX_GLOBAL, 13, 50, 217, 8 , WS_DISABLED
PUSHBUTTON "&Default", IDC_BUTTON_DEFAULT, 162, 32, 60, 14
LTEXT "Language:", 0, 13, 8, 34, 8
END
#define STR_PROG_SETT "Change Display Language"
#define STR_SND_GAIN "Sound Gain"
#define STR_NEW_FLOPPY "New Image"
#define STR_CONFIG "86Box Settings"
#define STR_SPECIFY_DIM "Specify Main Window Dimensions"
DLG_STATUS DIALOG DISCARDABLE 0, 0, 186, 386
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Status"
FONT 9, "Segoe UI"
BEGIN
LTEXT "1",IDT_SDEVICE,16,16,180,1000
LTEXT "1",IDT_STEXT,16,186,180,1000
END
#define STR_OK "OK"
#define STR_CANCEL "Cancel"
#define STR_GLOBAL "Save these settings as &global defaults"
#define STR_DEFAULT "&Default"
#define STR_LANGUAGE "Language:"
DLG_SND_GAIN DIALOG DISCARDABLE 0, 0, 113, 136
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Sound Gain"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,57,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,57,24,50,14
CONTROL "Gain",IDC_SLIDER_GAIN,"msctls_trackbar32",TBS_VERT |
TBS_BOTH | TBS_AUTOTICKS | WS_TABSTOP,15,20,20,109
CTEXT "Gain",IDT_1746,10,7,32,9,SS_CENTERIMAGE
END
#define STR_GAIN "Gain"
DLG_NEW_FLOPPY DIALOG DISCARDABLE 0, 0, 226, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "New Image"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,104,65,50,14
PUSHBUTTON "Cancel",IDCANCEL,162,65,50,14
LTEXT "File name:",IDT_1749,7,6,44,12,SS_CENTERIMAGE
LTEXT "Disk size:",IDT_1750,7,25,44,12,SS_CENTERIMAGE
LTEXT "RPM mode:",IDT_1751,7,45,44,12,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_FILE_NAME,53,5,150,14,ES_AUTOHSCROLL | ES_READONLY
COMBOBOX IDC_COMBO_DISK_SIZE,53,25,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO_RPM_MODE,53,45,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_CFILE,206,5,13,14
LTEXT "Progress:",IDT_1757,7,45,44,12,SS_CENTERIMAGE
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,53,45,166,14
END
#define STR_FILE_NAME "File name:"
#define STR_DISK_SIZE "Disk size:"
#define STR_RPM_MODE "RPM mode:"
#define STR_PROGRESS "Progress:"
DLG_CONFIG DIALOG DISCARDABLE 0, 0, 376, 256
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "86Box Settings"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,246,235,50,14
PUSHBUTTON "Cancel",IDCANCEL,307,235,50,14
CONTROL "List2",IDC_SETTINGSCATLIST,"SysListView32",LVS_REPORT | LVS_NOCOLUMNHEADER |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,100,212
CONTROL "",-1,"Static",SS_BLACKFRAME | SS_SUNKEN,1,226,373,1
END
#define STR_WIDTH "Width:"
#define STR_HEIGHT "Height:"
#define STR_LOCK_TO_SIZE "Lock to this size"
DLG_SPECIFY_DIM DIALOG DISCARDABLE 0, 0, 175, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Specify Main Window Dimensions"
FONT 9, "Segoe UI"
BEGIN
LTEXT "Width:",IDT_1709,7,9,24,12
EDITTEXT IDC_EDIT_WIDTH,33,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_WIDTHSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,76,6,
12,12
LTEXT "Height:",IDT_1710,97,9,24,12
EDITTEXT IDC_EDIT_HEIGHT,123,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_HEIGHTSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,166,6,
12,12
CONTROL "Lock to this size",IDC_CHECK_LOCK_SIZE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,26,94,10
DEFPUSHBUTTON "OK",IDOK,30,45,50,14
PUSHBUTTON "Cancel",IDCANCEL,99,45,50,14
END
#define STR_MACHINE_TYPE "Machine type:"
#define STR_MACHINE "Machine:"
#define STR_CONFIGURE "Configure"
#define STR_CPU_TYPE "CPU type:"
#define STR_SPEED "Speed:"
#define STR_FPU "FPU:"
#define STR_WAIT_STATES "Wait states:"
#define STR_MB "MB"
#define STR_MEMORY "Memory:"
#define STR_TIME_SYNC "Time synchronization"
#define STR_DISABLED "Disabled"
#define STR_ENABLED_LOCAL "Enabled (local time)"
#define STR_ENABLED_UTC "Enabled (UTC)"
#define STR_DYNAREC "Dynamic Recompiler"
DLG_CFG_MACHINE DIALOG DISCARDABLE 107, 0, 305, 200
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_MACHINE_TYPE,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Machine type:",IDT_1708,7,9,60,10
COMBOBOX IDC_COMBO_MACHINE,71,26,138,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Machine:",IDT_1701,7,28,60,10
PUSHBUTTON "Configure",IDC_CONFIGURE_MACHINE,214,26,46,12
COMBOBOX IDC_COMBO_CPU_TYPE,71,45,110,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "CPU type:",IDT_1702,7,47,59,10
COMBOBOX IDC_COMBO_CPU,215,45,45,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Speed:",IDT_1704,189,47,24,10
COMBOBOX IDC_COMBO_FPU,71,64,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "FPU:",IDT_1707,7,66,59,10
COMBOBOX IDC_COMBO_WS,71,83,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Wait states:",IDT_1703,7,85,60,10
EDITTEXT IDC_MEMTEXT,70,102,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_MEMSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,113,101,
12,12
LTEXT "MB",IDT_1705,123,104,10,10
LTEXT "Memory:",IDT_1706,7,104,30,10
GROUPBOX "Time synchronization",IDC_TIME_SYNC,7,135,100,56
CONTROL "Disabled",IDC_RADIO_TS_DISABLED,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,147,84,10
CONTROL "Enabled (local time)", IDC_RADIO_TS_LOCAL,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,161,84,10
CONTROL "Enabled (UTC)", IDC_RADIO_TS_UTC,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,84,10
#ifdef USE_DYNAREC
CONTROL "Dynamic Recompiler",IDC_CHECK_DYNAREC,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
#endif
END
#define STR_VIDEO "Video:"
#define STR_VOODOO "Voodoo Graphics"
DLG_CFG_VIDEO DIALOG DISCARDABLE 107, 0, 267, 45
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Video:",IDT_1707,7,9,48,10
COMBOBOX IDC_COMBO_VIDEO,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_VID,222,7,38,12
CONTROL "Voodoo Graphics",IDC_CHECK_VOODOO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,27,199,10
PUSHBUTTON "Configure",IDC_BUTTON_VOODOO,222,26,38,12
END
#define STR_MOUSE "Mouse:"
#define STR_JOYSTICK "Joystick:"
#define STR_JOY1 "Joystick 1..."
#define STR_JOY2 "Joystick 2..."
#define STR_JOY3 "Joystick 3..."
#define STR_JOY4 "Joystick 4..."
DLG_CFG_INPUT DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Mouse:",IDT_1709,7,9,57,10
COMBOBOX IDC_COMBO_MOUSE,71,7,140,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_MOUSE,214,7,46,12
LTEXT "Joystick:",IDT_1710,7,27,58,10
COMBOBOX IDC_COMBO_JOYSTICK,71,25,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Joystick 1...",IDC_JOY1,7,44,50,14
PUSHBUTTON "Joystick 2...",IDC_JOY2,74,44,50,14
PUSHBUTTON "Joystick 3...",IDC_JOY3,141,44,50,14
PUSHBUTTON "Joystick 4...",IDC_JOY4,209,44,50,14
END
#define STR_SOUND "Sound card:"
#define STR_MIDI "MIDI Out Device:"
#define STR_MIDI_IN "MIDI In Device:"
#define STR_MPU401 "Standalone MPU-401"
#define STR_SSI "Innovation SSI-2001"
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Use FLOAT32 sound"
DLG_CFG_SOUND DIALOG DISCARDABLE 107, 0, 267, 201
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_SOUND,71,7,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Sound card:",IDT_1711,7,9,59,10
PUSHBUTTON "Configure",IDC_CONFIGURE_SND,214,7,46,12
#define STR_NET_TYPE "Network type:"
#define STR_PCAP "PCap device:"
#define STR_NET "Network adapter:"
COMBOBOX IDC_COMBO_MIDI,71,26,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "MIDI Out Device:",IDT_1712,7,28,59,10
PUSHBUTTON "Configure",IDC_CONFIGURE_MIDI,214,26,46,12
#define STR_LPT1 "LPT1 Device"
#define STR_LPT2 "LPT2 Device"
#define STR_LPT3 "LPT3 Device"
#define STR_SERIAL1 "Serial port 1"
#define STR_SERIAL2 "Serial port 2"
#define STR_SERIAL3 "Serial port 3"
#define STR_SERIAL4 "Serial port 4"
#define STR_PARALLEL1 "Parallel port 1"
#define STR_PARALLEL2 "Parallel port 2"
#define STR_PARALLEL3 "Parallel port 3"
COMBOBOX IDC_COMBO_MIDI_IN,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "MIDI In Device:",IDT_1713,7,47,59,10
PUSHBUTTON "Configure",IDC_CONFIGURE_MIDI_IN,214,45,46,12
#define STR_HDC "HD Controller:"
#define STR_FDC "FD Controller:"
#define STR_IDE_TER "Tertiary IDE Controller"
#define STR_IDE_QUA "Quaternary IDE Controller"
#define STR_SCSI "SCSI"
#define STR_SCSI_1 "Controller 1:"
#define STR_SCSI_2 "Controller 2:"
#define STR_SCSI_3 "Controller 3:"
#define STR_SCSI_4 "Controller 4:"
#define STR_CASSETTE "Cassette"
CONTROL "Standalone MPU-401",IDC_CHECK_MPU401,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON "Configure",IDC_CONFIGURE_MPU401,214,64,46,12
#define STR_HDD "Hard disks:"
#define STR_NEW "&New..."
#define STR_EXISTING "&Existing..."
#define STR_REMOVE "&Remove"
#define STR_BUS "Bus:"
#define STR_CHANNEL "Channel:"
#define STR_ID "ID:"
CONTROL "Innovation SSI-2001",IDC_CHECK_SSI,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,84,95,10
PUSHBUTTON "Configure",IDC_CONFIGURE_SSI,214,82,46,12
#define STR_SPECIFY "&Specify..."
#define STR_SECTORS "Sectors:"
#define STR_HEADS "Heads:"
#define STR_CYLS "Cylinders:"
#define STR_SIZE_MB "Size (MB):"
#define STR_TYPE "Type:"
#define STR_IMG_FORMAT "Image Format:"
#define STR_BLOCK_SIZE "Block Size:"
CONTROL "CMS / Game Blaster",IDC_CHECK_CMS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,102,95,10
PUSHBUTTON "Configure",IDC_CONFIGURE_CMS,214,100,46,12
#define STR_FLOPPY_DRIVES "Floppy drives:"
#define STR_TURBO "Turbo timings"
#define STR_CHECKBPB "Check BPB"
#define STR_CDROM_DRIVES "CD-ROM drives:"
CONTROL "Gravis Ultrasound",IDC_CHECK_GUS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
PUSHBUTTON "Configure",IDC_CONFIGURE_GUS,214,118,46,12
CONTROL "Use FLOAT32 sound",IDC_CHECK_FLOAT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,94,10
END
#define STR_MO_DRIVES "MO drives:"
#define STR_ZIP_DRIVES "ZIP drives:"
#define STR_250 "ZIP 250"
DLG_CFG_NETWORK DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Network type:",IDT_1714,7,9,59,10
COMBOBOX IDC_COMBO_NET_TYPE,71,7,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
#define STR_ISARTC "ISA RTC:"
#define STR_ISAMEM "ISA Memory Expansion"
#define STR_ISAMEM_1 "Card 1:"
#define STR_ISAMEM_2 "Card 2:"
#define STR_ISAMEM_3 "Card 3:"
#define STR_ISAMEM_4 "Card 4:"
#define STR_BUGGER "ISABugger device"
#define STR_POSTCARD "POST card"
LTEXT "PCap device:",IDT_1715,7,28,59,10
COMBOBOX IDC_COMBO_PCAP,71,26,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Network adapter:",IDT_1716,7,47,59,10
COMBOBOX IDC_COMBO_NET,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_NET,214,44,46,12
END
DLG_CFG_PORTS DIALOG DISCARDABLE 107, 0, 267, 135
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "LPT1 Device:",IDT_1717,7,9,61,10
COMBOBOX IDC_COMBO_LPT1,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "LPT2 Device:",IDT_1718,7,28,61,10
COMBOBOX IDC_COMBO_LPT2,71,26,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "LPT3 Device:",IDT_1719,7,47,61,10
COMBOBOX IDC_COMBO_LPT3,71,45,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "Serial port 1",IDC_CHECK_SERIAL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,64,94,10
CONTROL "Serial port 2",IDC_CHECK_SERIAL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,64,94,10
CONTROL "Serial port 3",IDC_CHECK_SERIAL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,82,94,10
CONTROL "Serial port 4",IDC_CHECK_SERIAL4,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,82,94,10
CONTROL "Parallel port 1",IDC_CHECK_PARALLEL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,100,94,10
CONTROL "Parallel port 2",IDC_CHECK_PARALLEL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,100,94,10
CONTROL "Parallel port 3",IDC_CHECK_PARALLEL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,118,94,10
END
DLG_CFG_STORAGE DIALOG DISCARDABLE 107, 0, 267, 203
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "HD Controller:",IDT_1718,7,9,64,10
COMBOBOX IDC_COMBO_HDC,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_HDC,222,7,38,12
LTEXT "FD Controller:",IDT_1768,7,28,64,10
COMBOBOX IDC_COMBO_FDC,64,26,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_FDC,222,26,38,12
CONTROL "Tertiary IDE Controller",IDC_CHECK_IDE_TER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,47,199,10
PUSHBUTTON "Configure",IDC_BUTTON_IDE_TER,222,45,38,12
CONTROL "Quaternary IDE Controller",IDC_CHECK_IDE_QUA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON "Configure",IDC_BUTTON_IDE_QUA,222,64,38,12
GROUPBOX "SCSI",IDC_GROUP_SCSI,7,85,253,93
LTEXT "Controller 1:",IDT_1763,16,102,48,10
COMBOBOX IDC_COMBO_SCSI_1,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_SCSI_1,213,100,38,12
LTEXT "Controller 2:",IDT_1764,16,121,48,10
COMBOBOX IDC_COMBO_SCSI_2,73,119,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_SCSI_2,213,119,38,12
LTEXT "Controller 3:",IDT_1765,16,140,48,10
COMBOBOX IDC_COMBO_SCSI_3,73,138,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_SCSI_3,213,138,38,12
LTEXT "Controller 4:",IDT_1766,16,159,48,10
COMBOBOX IDC_COMBO_SCSI_4,73,157,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_SCSI_4,213,157,38,12
CONTROL "Cassette",IDC_CHECK_CASSETTE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,185,94,10
END
DLG_CFG_HARD_DISKS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_HARD_DISKS,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,92
LTEXT "Hard disks:",IDT_1720,7,7,253,8
PUSHBUTTON "&New...",IDC_BUTTON_HDD_ADD_NEW,60,137,62,10
PUSHBUTTON "&Existing...",IDC_BUTTON_HDD_ADD,129,137,62,10
PUSHBUTTON "&Remove",IDC_BUTTON_HDD_REMOVE,198,137,62,10
COMBOBOX IDC_COMBO_HD_BUS,33,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bus:",IDT_1721,7,119,24,8
COMBOBOX IDC_COMBO_HD_CHANNEL,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Channel:",IDT_1722,131,119,38,8
COMBOBOX IDC_COMBO_HD_ID,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1723,131,119,38,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
END
DLG_CFG_HARD_DISKS_ADD DIALOG DISCARDABLE 0, 0, 219, 149
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Add Hard Disk"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,55,127,50,14
PUSHBUTTON "Cancel",IDCANCEL,112,127,50,14
EDITTEXT IDC_EDIT_HD_FILE_NAME,7,16,153,12
PUSHBUTTON "&Specify...",IDC_CFILE,167,16,44,12
EDITTEXT IDC_EDIT_HD_SPT,183,34,28,12
EDITTEXT IDC_EDIT_HD_HPC,112,34,28,12
EDITTEXT IDC_EDIT_HD_CYL,42,34,28,12
EDITTEXT IDC_EDIT_HD_SIZE,42,52,28,12
COMBOBOX IDC_COMBO_HD_TYPE,113,52,98,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Sectors:",IDT_1726,154,35,27,10
LTEXT "Heads:",IDT_1727,81,35,29,8
LTEXT "Cylinders:",IDT_1728,7,35,32,12
LTEXT "Size (MB):",IDT_1729,7,54,33,8
LTEXT "Type:",IDT_1730,86,54,24,8
LTEXT "File name:",IDT_1731,7,7,204,9
COMBOBOX IDC_COMBO_HD_BUS,33,71,58,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bus:",IDT_1721,7,73,24,8
COMBOBOX IDC_COMBO_HD_CHANNEL,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Channel:",IDT_1722,99,73,34,8
COMBOBOX IDC_COMBO_HD_ID,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1723,99,73,34,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Image Format:",IDT_1774,7,92,50,12
COMBOBOX IDC_COMBO_HD_IMG_FORMAT,58,90,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Block Size:",IDT_1775,7,111,50,12
COMBOBOX IDC_COMBO_HD_BLOCK_SIZE,58,109,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Progress:",IDT_1752,7,7,204,9
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,7,16,204,12
END
DLG_CFG_FLOPPY_AND_CDROM_DRIVES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_FLOPPY_DRIVES,"SysListView32",
LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,60
LTEXT "Floppy drives:",IDT_1737,7,7,253,8
COMBOBOX IDC_COMBO_FD_TYPE,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Type:",IDT_1738,7,87,24,8
CONTROL "Turbo timings",IDC_CHECKTURBO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,131,86,64,10
CONTROL "Check BPB",IDC_CHECKBPB,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,196,86,64,10
CONTROL "List1",IDC_LIST_CDROM_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,117,253,60
LTEXT "CD-ROM drives:",IDT_1739,7,107,253,8
COMBOBOX IDC_COMBO_CD_BUS,33,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bus:",IDT_1740,7,187,24,8
COMBOBOX IDC_COMBO_CD_ID,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1741,131,187,38,8
COMBOBOX IDC_COMBO_CD_CHANNEL_IDE,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Channel:",IDT_1742,131,187,38,8
COMBOBOX IDC_COMBO_CD_SPEED,33,205,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Speed:",IDT_1758,7,207,24,8
END
DLG_CFG_OTHER_REMOVABLE_DEVICES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_MO_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,17,253,60
LTEXT "MO drives:",IDT_1769,7,7,253,8
COMBOBOX IDC_COMBO_MO_BUS,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bus:",IDT_1770,7,87,24,8
COMBOBOX IDC_COMBO_MO_ID,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1771,131,87,38,8
COMBOBOX IDC_COMBO_MO_CHANNEL_IDE,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Channel:",IDT_1772,131,87,38,8
COMBOBOX IDC_COMBO_MO_TYPE,33,105,120,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Type:",IDT_1773,7,107,24,8
CONTROL "List1",IDC_LIST_ZIP_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,137,253,60
LTEXT "ZIP drives:",IDT_1759,7,127,253,8
COMBOBOX IDC_COMBO_ZIP_BUS,23,205,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bus:",IDT_1753,7,207,14,8
COMBOBOX IDC_COMBO_ZIP_ID,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1754,120,207,28,8
COMBOBOX IDC_COMBO_ZIP_CHANNEL_IDE,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Channel:",IDT_1755,120,207,28,8
CONTROL "ZIP 250",IDC_CHECK250,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,218,205,44,10
END
DLG_CFG_PERIPHERALS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "ISA RTC:",IDT_1767,7,9,48,10
COMBOBOX IDC_COMBO_ISARTC,64,7,155,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_ISARTC,222,7,38,12
GROUPBOX "ISA Memory Expansion",IDC_GROUP_ISAMEM,7,28,253,93
LTEXT "Card 1:",IDT_1763,16,45,48,10
COMBOBOX IDC_COMBO_ISAMEM_1,73,43,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_ISAMEM_1,213,43,38,12
LTEXT "Card 2:",IDT_1764,16,64,48,10
COMBOBOX IDC_COMBO_ISAMEM_2,73,62,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_ISAMEM_2,213,62,38,12
LTEXT "Card 3:",IDT_1765,16,83,48,10
COMBOBOX IDC_COMBO_ISAMEM_3,73,81,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_ISAMEM_3,213,81,38,12
LTEXT "Card 4:",IDT_1766,16,102,48,10
COMBOBOX IDC_COMBO_ISAMEM_4,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configure",IDC_CONFIGURE_ISAMEM_4,213,100,38,12
CONTROL "ISABugger device",IDC_CHECK_BUGGER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,128,94,10
CONTROL "POST card",IDC_CHECK_POSTCARD,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,128,94,10
END
#include "dialogs.rc"
/////////////////////////////////////////////////////////////////////////////
//
@@ -833,19 +487,7 @@ BEGIN
IDS_2124 "About 86Box"
IDS_2125 "86Box v" EMU_VERSION
IDS_2126 "An emulator of old computers\n\n"
"Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\n"
/*
Here uncomment following line and add your name like "Translated by: <your name goes here>\n\n".
If such a line exists with name of previous translators, don't erase their name, just add yours to the end of line.
*/
//"Translated by: <your name goes here>\n\n"
"Released under the GNU General Public License version 2 or later. See LICENSE for more information."
IDS_2126 "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
IDS_2127 "OK"
IDS_2128 "Hardware not available"
#ifdef _WIN32
@@ -995,4 +637,4 @@ END
#define IDS_LANG_ENUS IDS_7168
// English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

View File

@@ -834,18 +834,7 @@ BEGIN
IDS_2123 "Mentés"
IDS_2124 "A 86Box névjegye"
IDS_2125 "86Box v" EMU_VERSION
IDS_2126 "Régi számítógépek emulátora\n\n"
"Fejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\n"
/*
Translate the following line as "Translated by: <your name goes here>\n\n".
If there were previous translators, don't erase their name, just add yours to the end of line.
*/
"Fordította: Laci bá'\n\n"
"Megjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt."
IDS_2126 "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt."
IDS_2127 "OK"
IDS_2128 "Hardver nem elérhető"
#ifdef _WIN32
@@ -995,4 +984,4 @@ END
#define IDS_LANG_ENUS IDS_7168
// Hungarian resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

987
src/win/languages/pt-BR.rc Normal file
View File

@@ -0,0 +1,987 @@
////////////////////////////////////////////////////////////////////////////
// Portuguese (pt-BR) resources
//
// Translated by Altieres Lima da Silva, 2021
//
#ifdef _WIN32
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
#pragma code_page(65001)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
MainMenu MENU DISCARDABLE
BEGIN
POPUP "&Ação"
BEGIN
MENUITEM "&Teclado requer captura", IDM_ACTION_KBD_REQ_CAPTURE
MENUITEM "CTRL &direito é o ALT esquerdo", IDM_ACTION_RCTRL_IS_LALT
MENUITEM SEPARATOR
MENUITEM "&Reinicialização completa...", IDM_ACTION_HRESET
MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD
MENUITEM SEPARATOR
MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC
MENUITEM SEPARATOR
MENUITEM "&Pausar", IDM_ACTION_PAUSE
MENUITEM SEPARATOR
MENUITEM "&Sair...", IDM_ACTION_EXIT
END
POPUP "&Exibir"
BEGIN
MENUITEM "&Ocultar barra de status", IDM_VID_HIDE_STATUS_BAR
MENUITEM SEPARATOR
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
MENUITEM SEPARATOR
POPUP "&Renderizador"
BEGIN
MENUITEM "&SDL (Software)", IDM_VID_SDL_SW
MENUITEM "SDL (&Hardware)", IDM_VID_SDL_HW
MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL
#if defined(DEV_BRANCH) && defined(USE_OPENGL)
MENUITEM "Open&GL (Núcleo 3.3)", IDM_VID_OPENGL_CORE
#endif
#ifdef USE_VNC
MENUITEM "&VNC", IDM_VID_VNC
#endif
END
MENUITEM SEPARATOR
MENUITEM "Especificar as dimensões...", IDM_VID_SPECIFY_DIM
MENUITEM "F&orçar proporção de tela em 4:3", IDM_VID_FORCE43
POPUP "&Fator de redimensionamento da janela"
BEGIN
MENUITEM "&0,5x", IDM_VID_SCALE_1X
MENUITEM "&1x", IDM_VID_SCALE_2X
MENUITEM "1,&5x", IDM_VID_SCALE_3X
MENUITEM "&2x", IDM_VID_SCALE_4X
END
POPUP "Método de filtragem"
BEGIN
MENUITEM "&Mais próximo", IDM_VID_FILTER_NEAREST
MENUITEM "&Linear", IDM_VID_FILTER_LINEAR
END
MENUITEM "Escala Hi&DPI", IDM_VID_HIDPI
MENUITEM "&Idioma de exibição...", IDM_VID_PROG_SETT
MENUITEM SEPARATOR
MENUITEM "&Tela cheia\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
POPUP "Modo de &redimensionamento da tela cheia"
BEGIN
MENUITEM "&Tela cheia esticada", IDM_VID_FS_FULL
MENUITEM "&4:3", IDM_VID_FS_43
MENUITEM "Pixel&s quadrados (manter proporção)", IDM_VID_FS_KEEPRATIO
MENUITEM "&Redimensionamento com valores inteiros", IDM_VID_FS_INT
END
POPUP "Configurações E&GA/(S)VGA"
BEGIN
MENUITEM "Monitor VGA &invertido", IDM_VID_INVERT
POPUP "&Tipo de tela VGA"
BEGIN
MENUITEM "&Cor RGB", IDM_VID_GRAY_RGB
MENUITEM "Escala de cinza &RGB", IDM_VID_GRAY_MONO
MENUITEM "Monitor &âmbar", IDM_VID_GRAY_AMBER
MENUITEM "Monitor &verde", IDM_VID_GRAY_GREEN
MENUITEM "Monitor &branco", IDM_VID_GRAY_WHITE
END
POPUP "Tipo de &conversão de escala de cinza"
BEGIN
MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601
MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709
MENUITEM "&Média", IDM_VID_GRAYCT_AVE
END
END
MENUITEM SEPARATOR
MENUITEM "Overscan do CGA/PCjr/Tandy/E&GA/(S)VGA", IDM_VID_OVERSCAN
MENUITEM "Alterar contraste para exibição &monocromática", IDM_VID_CGACON
END
MENUITEM "&Mídia", IDM_MEDIA
POPUP "&Ferramentas"
BEGIN
MENUITEM "&Configurações...", IDM_CONFIG
MENUITEM "&Atualizar ícones da barra de status", IDM_UPDATE_ICONS
MENUITEM SEPARATOR
MENUITEM "Alterar o &idioma de exibição...", IDM_VID_PROG_SETT
# ifdef USE_DISCORD
MENUITEM SEPARATOR
MENUITEM "Ativar integração com o &Discord", IDM_DISCORD
# endif
MENUITEM SEPARATOR
MENUITEM "Capturar &tela\tCtrl+F11", IDM_ACTION_SCREENSHOT
MENUITEM SEPARATOR
MENUITEM "&Ganho de som...", IDM_SND_GAIN
#ifdef MTR_ENABLED
MENUITEM SEPARATOR
MENUITEM "Inicio do rastreamento\tCtrl+T", IDM_ACTION_BEGIN_TRACE
MENUITEM "Fim do rastreamento\tCtrl+T", IDM_ACTION_END_TRACE
#endif
END
#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS)
POPUP "&Registros"
BEGIN
# ifdef ENABLE_BUSLOGIC_LOG
MENUITEM "Ativar registros da BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC
# endif
# ifdef ENABLE_CDROM_LOG
MENUITEM "Ativar registros do CD-ROM\tCtrl+F5", IDM_LOG_CDROM
# endif
# ifdef ENABLE_D86F_LOG
MENUITEM "Ativar registros do disquete (86F)\tCtrl+F6", IDM_LOG_D86F
# endif
# ifdef ENABLE_FDC_LOG
MENUITEM "Ativar registros do controlador de disquete\tCtrl+F7", IDM_LOG_FDC
# endif
# ifdef ENABLE_IDE_LOG
MENUITEM "Ativar registros da IDE\tCtrl+F8", IDM_LOG_IDE
# endif
# ifdef ENABLE_SERIAL_LOG
MENUITEM "Ativar registros da porta serial\tCtrl+F3", IDM_LOG_SERIAL
# endif
# ifdef ENABLE_NIC_LOG
MENUITEM "Ativar registros da rede\tCtrl+F9", IDM_LOG_NIC
# endif
# ifdef ENABLE_LOG_COMMANDS
# ifdef ENABLE_LOG_TOGGLES
MENUITEM SEPARATOR
# endif
# ifdef ENABLE_LOG_BREAKPOINT
MENUITEM "&Registro de ponto de parada\tCtrl+F10", IDM_LOG_BREAKPOINT
# endif
# ifdef ENABLE_VRAM_DUMP
MENUITEM "Despejo da RAM de &vídeo\tCtrl+F1", IDM_DUMP_VRAM
# endif
# endif
END
#endif
POPUP "&Ajuda"
BEGIN
MENUITEM "&Documentação...", IDM_DOCS
MENUITEM "&Sobre o 86Box...", IDM_ABOUT
END
END
StatusBarMenu MENU DISCARDABLE
BEGIN
MENUITEM SEPARATOR
END
CassetteSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nova imagem...", IDM_CASSETTE_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Imagem existente...", IDM_CASSETTE_IMAGE_EXISTING
MENUITEM "Imagem existente (&protegida contra escrita)...", IDM_CASSETTE_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "&Gravar", IDM_CASSETTE_RECORD
MENUITEM "&Reproduzir", IDM_CASSETTE_PLAY
MENUITEM "&Rebobinar até o começo", IDM_CASSETTE_REWIND
MENUITEM "&Avançar até o fim", IDM_CASSETTE_FAST_FORWARD
MENUITEM SEPARATOR
MENUITEM "E&jetar", IDM_CASSETTE_EJECT
END
END
CartridgeSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Imagem...", IDM_CARTRIDGE_IMAGE
MENUITEM SEPARATOR
MENUITEM "E&jetar", IDM_CARTRIDGE_EJECT
END
END
FloppySubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nova imagem...", IDM_FLOPPY_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Imagem existente...", IDM_FLOPPY_IMAGE_EXISTING
MENUITEM "Imagem existente (&protegida contra escrita)...", IDM_FLOPPY_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "E&xportar para 86F...", IDM_FLOPPY_EXPORT_TO_86F
MENUITEM SEPARATOR
MENUITEM "E&jetar", IDM_FLOPPY_EJECT
END
END
CdromSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Sem som", IDM_CDROM_MUTE
MENUITEM SEPARATOR
MENUITEM "&Vazio", IDM_CDROM_EMPTY
MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD
MENUITEM SEPARATOR
MENUITEM "&Imagem", IDM_CDROM_IMAGE
END
END
ZIPSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nova imagem...", IDM_ZIP_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Imagem existente...", IDM_ZIP_IMAGE_EXISTING
MENUITEM "Imagem existente (&protegida contra escrita)...", IDM_ZIP_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "E&jetar", IDM_ZIP_EJECT
MENUITEM "&Recarregar imagem anterior", IDM_ZIP_RELOAD
END
END
MOSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nova imagem...", IDM_MO_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Imagem existente...", IDM_MO_IMAGE_EXISTING
MENUITEM "Imagem existente (&protegida contra escrita)...", IDM_MO_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "E&jetar", IDM_MO_EJECT
MENUITEM "&Recarregar imagem anterior", IDM_MO_RELOAD
END
END
#if defined(DEV_BRANCH) && defined(USE_OPENGL)
VidGLSubMenu MENU DISCARDABLE
BEGIN
POPUP "&Taxa de quadro pretendida"
BEGIN
MENUITEM "&Sincronizar com vídeo", IDM_VID_GL_FPS_BLITTER
MENUITEM "&25 qps", IDM_VID_GL_FPS_25
MENUITEM "&30 qps", IDM_VID_GL_FPS_30
MENUITEM "&50 qps", IDM_VID_GL_FPS_50
MENUITEM "&60 qps", IDM_VID_GL_FPS_60
MENUITEM "&75 qps", IDM_VID_GL_FPS_75
END
MENUITEM "Sincronização &vertical", IDM_VID_GL_VSYNC
MENUITEM "&Selecionar shader...", IDM_VID_GL_SHADER
MENUITEM "&Remover shader", IDM_VID_GL_NOSHADER
END
#endif
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
DLG_PROG_SETT DIALOG DISCARDABLE 0, 0, 240, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Alterar idioma de exibição"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 123, 65, 50, 14
PUSHBUTTON "Cancelar", IDCANCEL, 179, 65, 50, 14
COMBOBOX IDC_COMBO_LANG, 13, 18, 213, 22, CBS_DROPDOWNLIST | CBS_HASSTRINGS
AUTOCHECKBOX "Use estas configurações como &padrões globais", IDC_CHECKBOX_GLOBAL, 13, 50, 217, 8, WS_DISABLED
PUSHBUTTON "&Padrão", IDC_BUTTON_DEFAULT, 162, 32, 60, 14
LTEXT "Idioma:", 0, 13, 8, 34, 8
END
DLG_STATUS DIALOG DISCARDABLE 0, 0, 186, 386
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Status"
FONT 9, "Segoe UI"
BEGIN
LTEXT "1",IDT_SDEVICE,16,16,180,1000
LTEXT "1",IDT_STEXT,16,186,180,1000
END
DLG_SND_GAIN DIALOG DISCARDABLE 0, 0, 113, 136
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Ganho de som"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,57,7,50,14
PUSHBUTTON "Cancelar",IDCANCEL,57,24,50,14
CONTROL "Ganho",IDC_SLIDER_GAIN,"msctls_trackbar32",TBS_VERT |
TBS_BOTH | TBS_AUTOTICKS | WS_TABSTOP,15,20,20,109
CTEXT "Ganho",IDT_1746,10,7,32,9,SS_CENTERIMAGE
END
DLG_NEW_FLOPPY DIALOG DISCARDABLE 0, 0, 226, 86
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nova imagem de disquete"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,104,65,50,14
PUSHBUTTON "Cancelar",IDCANCEL,162,65,50,14
LTEXT "Nome:",IDT_1749,7,6,44,12,SS_CENTERIMAGE
LTEXT "Tamanho:",IDT_1750,7,25,44,12,SS_CENTERIMAGE
LTEXT "Modo RPM:",IDT_1751,7,45,44,12,SS_CENTERIMAGE
EDITTEXT IDC_EDIT_FILE_NAME,53,5,150,14,ES_AUTOHSCROLL | ES_READONLY
COMBOBOX IDC_COMBO_DISK_SIZE,53,25,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO_RPM_MODE,53,45,166,14,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...",IDC_CFILE,206,5,13,14
LTEXT "Progresso:",IDT_1757,7,45,44,12,SS_CENTERIMAGE
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,53,45,166,14
END
DLG_CONFIG DIALOG DISCARDABLE 0, 0, 376, 256
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Configurações do 86Box"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,246,235,50,14
PUSHBUTTON "Cancelar",IDCANCEL,307,235,50,14
CONTROL "List2",IDC_SETTINGSCATLIST,"SysListView32",LVS_REPORT | LVS_NOCOLUMNHEADER |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,7,100,212
CONTROL "",-1,"Static",SS_BLACKFRAME | SS_SUNKEN,1,226,373,1
END
DLG_SPECIFY_DIM DIALOG DISCARDABLE 0, 0, 175, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Especifique as dimensões da janela principal"
FONT 9, "Segoe UI"
BEGIN
LTEXT "Largura:",IDT_1709,7,9,24,12
EDITTEXT IDC_EDIT_WIDTH,33,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_WIDTHSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS, 76, 6, 12, 12
LTEXT "Altura:",IDT_1710,97,9,24,12
EDITTEXT IDC_EDIT_HEIGHT,123,7,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_HEIGHTSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,166, 6, 12, 12
CONTROL "Trava nesse tamanho",IDC_CHECK_LOCK_SIZE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,26,94,10
DEFPUSHBUTTON "OK",IDOK,30,45,50,14
PUSHBUTTON "Cancelar",IDCANCEL,99,45,50,14
END
DLG_CFG_MACHINE DIALOG DISCARDABLE 107, 0, 305, 200
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_MACHINE_TYPE,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Tipo de máquina:",IDT_1708,7,9,60,10
COMBOBOX IDC_COMBO_MACHINE,71,26,138,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Máquina:",IDT_1701,7,28,60,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_MACHINE,214,26,46,12
COMBOBOX IDC_COMBO_CPU_TYPE,71,45,110,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Tipo de CPU:",IDT_1702,7,47,59,10
COMBOBOX IDC_COMBO_CPU,215,45,45,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Veloc.:",IDT_1704,189,47,24,10
COMBOBOX IDC_COMBO_FPU,71,64,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "FPU:",IDT_1707,7,66,59,10
COMBOBOX IDC_COMBO_WS,71,83,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Estados de espera:",IDT_1703,7,85,60,10
EDITTEXT IDC_MEMTEXT,70,102,45,12,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_MEMSPIN,"msctls_updown32",UDS_SETBUDDYINT |
UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS,113,101,
12,12
LTEXT "MB",IDT_1705,123,104,10,10
LTEXT "Memória:",IDT_1706,7,104,30,10
GROUPBOX "Sincronização de tempo",IDC_TIME_SYNC,7,135,100,56
CONTROL "Desativada",IDC_RADIO_TS_DISABLED,"Button",
BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,147,84,10
CONTROL "Ativada (hora local)", IDC_RADIO_TS_LOCAL,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,161,84,10
CONTROL "Ativada (UTC)", IDC_RADIO_TS_UTC,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,84,10
#ifdef USE_DYNAREC
CONTROL "Recompilador dinâmico",IDC_CHECK_DYNAREC,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
#endif
END
DLG_CFG_VIDEO DIALOG DISCARDABLE 107, 0, 267, 45
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Vídeo:",IDT_1707,7,9,48,10
COMBOBOX IDC_COMBO_VIDEO,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_VID,222,7,38,12
CONTROL "3DFX Voodoo",IDC_CHECK_VOODOO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,27,199,10
PUSHBUTTON "Configurar",IDC_BUTTON_VOODOO,222,26,38,12
END
DLG_CFG_INPUT DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Mouse:",IDT_1709,7,9,57,10
COMBOBOX IDC_COMBO_MOUSE,71,7,140,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_MOUSE,214,7,46,12
LTEXT "Joystick:",IDT_1710,7,27,58,10
COMBOBOX IDC_COMBO_JOYSTICK,71,25,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Joystick 1...",IDC_JOY1,7,44,50,14
PUSHBUTTON "Joystick 2...",IDC_JOY2,74,44,50,14
PUSHBUTTON "Joystick 3...",IDC_JOY3,141,44,50,14
PUSHBUTTON "Joystick 4...",IDC_JOY4,209,44,50,14
END
DLG_CFG_SOUND DIALOG DISCARDABLE 107, 0, 267, 201
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
COMBOBOX IDC_COMBO_SOUND,71,7,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Placa de som:",IDT_1711,7,9,59,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_SND,214,7,46,12
COMBOBOX IDC_COMBO_MIDI,71,26,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Disp. saída MIDI:",IDT_1712,7,28,59,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_MIDI,214,26,46,12
COMBOBOX IDC_COMBO_MIDI_IN,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Disp. entrada MIDI:",IDT_1713,7,47,59,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_MIDI_IN,214,45,46,12
CONTROL "MPU-401 autônomo",IDC_CHECK_MPU401,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_MPU401,214,64,46,12
CONTROL "Innovation SSI-2001",IDC_CHECK_SSI,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,84,95,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_SSI,214,82,46,12
CONTROL "CMS / Game Blaster",IDC_CHECK_CMS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,102,95,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_CMS,214,100,46,12
CONTROL "Gravis Ultrasound",IDC_CHECK_GUS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10
PUSHBUTTON "Configurar",IDC_CONFIGURE_GUS,214,118,46,12
CONTROL "Usar som FLOAT32",IDC_CHECK_FLOAT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,94,10
END
DLG_CFG_NETWORK DIALOG DISCARDABLE 107, 0, 267, 65
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Tipo de rede:",IDT_1714,7,9,59,10
COMBOBOX IDC_COMBO_NET_TYPE,71,7,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Dispositivo PCap:",IDT_1715,7,28,59,10
COMBOBOX IDC_COMBO_PCAP,71,26,189,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
LTEXT "Adaptador de rede:",IDT_1716,7,47,59,10
COMBOBOX IDC_COMBO_NET,71,45,140,120,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_NET,214,44,46,12
END
DLG_CFG_PORTS DIALOG DISCARDABLE 107, 0, 267, 135
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Dispositivo LPT1:",IDT_1717,7,9,61,10
COMBOBOX IDC_COMBO_LPT1,71,7,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Dispositivo LPT2:",IDT_1718,7,28,61,10
COMBOBOX IDC_COMBO_LPT2,71,26,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Dispositivo LPT3:",IDT_1719,7,47,61,10
COMBOBOX IDC_COMBO_LPT3,71,45,189,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
CONTROL "Porta serial 1",IDC_CHECK_SERIAL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,64,94,10
CONTROL "Porta serial 2",IDC_CHECK_SERIAL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,64,94,10
CONTROL "Porta serial 3",IDC_CHECK_SERIAL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,82,94,10
CONTROL "Porta serial 4",IDC_CHECK_SERIAL4,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,82,94,10
CONTROL "Porta paralela 1",IDC_CHECK_PARALLEL1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,100,94,10
CONTROL "Porta paralela 2",IDC_CHECK_PARALLEL2,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,100,94,10
CONTROL "Porta paralela 3",IDC_CHECK_PARALLEL3,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,118,94,10
END
DLG_CFG_STORAGE DIALOG DISCARDABLE 107, 0, 267, 203
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "Controlador HD:",IDT_1718,7,9,64,10
COMBOBOX IDC_COMBO_HDC,64,7,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_HDC,222,7,38,12
LTEXT "Controlador FD:",IDT_1768,7,28,64,10
COMBOBOX IDC_COMBO_FDC,64,26,155,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_FDC,222,26,38,12
CONTROL "Controlador IDE terciário",IDC_CHECK_IDE_TER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,47,199,10
PUSHBUTTON "Configurar",IDC_BUTTON_IDE_TER,222,45,38,12
CONTROL "Controlador IDE quaternário",IDC_CHECK_IDE_QUA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,66,199,10
PUSHBUTTON "Configurar",IDC_BUTTON_IDE_QUA,222,64,38,12
GROUPBOX "SCSI",IDC_GROUP_SCSI,7,85,253,93
LTEXT "Controlador 1:",IDT_1763,16,102,48,10
COMBOBOX IDC_COMBO_SCSI_1,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_SCSI_1,213,100,38,12
LTEXT "Controlador 2:",IDT_1764,16,121,48,10
COMBOBOX IDC_COMBO_SCSI_2,73,119,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_SCSI_2,213,119,38,12
LTEXT "Controlador 3:",IDT_1765,16,140,48,10
COMBOBOX IDC_COMBO_SCSI_3,73,138,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_SCSI_3,213,138,38,12
LTEXT "Controlador 4:",IDT_1766,16,159,48,10
COMBOBOX IDC_COMBO_SCSI_4,73,157,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_SCSI_4,213,157,38,12
CONTROL "Cassete",IDC_CHECK_CASSETTE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,185,94,10
END
DLG_CFG_HARD_DISKS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_HARD_DISKS,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,92
LTEXT "Discos rígidos:",IDT_1720,7,7,253,8
PUSHBUTTON "&Novo...",IDC_BUTTON_HDD_ADD_NEW,60,137,62,10
PUSHBUTTON "&Existente...",IDC_BUTTON_HDD_ADD,129,137,62,10
PUSHBUTTON "&Remover",IDC_BUTTON_HDD_REMOVE,198,137,62,10
COMBOBOX IDC_COMBO_HD_BUS,33,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Barram.:",IDT_1721,7,119,25,8
COMBOBOX IDC_COMBO_HD_CHANNEL,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Canal:",IDT_1722,131,119,38,8
COMBOBOX IDC_COMBO_HD_ID,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1723,131,119,38,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,170,117,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
END
DLG_CFG_HARD_DISKS_ADD DIALOG DISCARDABLE 0, 0, 219, 149
STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Adicionar disco rígido"
FONT 9, "Segoe UI"
BEGIN
DEFPUSHBUTTON "OK",IDOK,55,127,50,14
PUSHBUTTON "Cancelar",IDCANCEL,112,127,50,14
EDITTEXT IDC_EDIT_HD_FILE_NAME,7,16,153,12
PUSHBUTTON "&Especificar...",IDC_CFILE,167,16,44,12
EDITTEXT IDC_EDIT_HD_SPT,183,34,28,12
EDITTEXT IDC_EDIT_HD_HPC,112,34,28,12
EDITTEXT IDC_EDIT_HD_CYL,42,34,28,12
EDITTEXT IDC_EDIT_HD_SIZE,42,52,28,12
COMBOBOX IDC_COMBO_HD_TYPE,113,52,98,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Setores:",IDT_1726,154,35,27,10
LTEXT "Cabeças:",IDT_1727,81,35,29,8
LTEXT "Cilindros:",IDT_1728,7,35,32,12
LTEXT "Tamanho (MB):",IDT_1729,7,54,33,8
LTEXT "Tipo:",IDT_1730,86,54,24,8
LTEXT "Nome do arquivo:",IDT_1731,7,7,204,9
COMBOBOX IDC_COMBO_HD_BUS,34,71,58,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Barram.:",IDT_1721,7,73,25,8
COMBOBOX IDC_COMBO_HD_CHANNEL,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Canal:",IDT_1722,99,73,34,8
COMBOBOX IDC_COMBO_HD_ID,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1723,99,73,34,8
COMBOBOX IDC_COMBO_HD_CHANNEL_IDE,134,71,77,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Formato da imagem:",IDT_1774,7,89,50,15
COMBOBOX IDC_COMBO_HD_IMG_FORMAT,58,90,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Tamanho do bloco:",IDT_1775,7,107,50,15
COMBOBOX IDC_COMBO_HD_BLOCK_SIZE,58,109,153,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Progresso:",IDT_1752,7,7,204,9
CONTROL "IMGCreateProgress",IDC_PBAR_IMG_CREATE,"msctls_progress32",PBS_SMOOTH |
WS_BORDER,7,16,204,12
END
DLG_CFG_FLOPPY_AND_CDROM_DRIVES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_FLOPPY_DRIVES,"SysListView32",
LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,18,253,60
LTEXT "Unidades de disquete:",IDT_1737,7,7,253,8
COMBOBOX IDC_COMBO_FD_TYPE,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Tipo:",IDT_1738,7,87,24,8
CONTROL "Turbo",IDC_CHECKTURBO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,131,86,64,10
CONTROL "Verificar BPB",IDC_CHECKBPB,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,196,86,64,10
CONTROL "List1",IDC_LIST_CDROM_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,117,253,60
LTEXT "Unidades de CD-ROM:",IDT_1739,7,107,253,8
COMBOBOX IDC_COMBO_CD_BUS,33,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Barram.:",IDT_1740,7,187,25,8
COMBOBOX IDC_COMBO_CD_ID,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1741,131,187,38,8
COMBOBOX IDC_COMBO_CD_CHANNEL_IDE,170,185,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Canal:",IDT_1742,131,187,38,8
COMBOBOX IDC_COMBO_CD_SPEED,33,205,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Veloc.:",IDT_1758,7,207,24,8
END
DLG_CFG_OTHER_REMOVABLE_DEVICES DIALOG DISCARDABLE 107, 0, 267, 222
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
CONTROL "List1",IDC_LIST_MO_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,17,253,60
LTEXT "Unidades magneto-ópticas:",IDT_1769,7,7,253,8
COMBOBOX IDC_COMBO_MO_BUS,33,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Barram.:",IDT_1770,7,87,25,8
COMBOBOX IDC_COMBO_MO_ID,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1771,131,87,38,8
COMBOBOX IDC_COMBO_MO_CHANNEL_IDE,170,85,90,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Canal:",IDT_1772,131,87,38,8
COMBOBOX IDC_COMBO_MO_TYPE,33,105,120,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Tipo:",IDT_1773,7,107,24,8
CONTROL "List1",IDC_LIST_ZIP_DRIVES,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER |
WS_TABSTOP,7,137,253,60
LTEXT "Unidades ZIP:",IDT_1759,7,127,253,8
COMBOBOX IDC_COMBO_ZIP_BUS,33,205,70,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Barram.:",IDT_1753,7,207,26,8
COMBOBOX IDC_COMBO_ZIP_ID,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "ID:",IDT_1754,120,207,28,8
COMBOBOX IDC_COMBO_ZIP_CHANNEL_IDE,149,205,61,12,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Canal:",IDT_1755,120,207,28,8
CONTROL "ZIP 250",IDC_CHECK250,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,218,205,44,10
END
DLG_CFG_PERIPHERALS DIALOG DISCARDABLE 107, 0, 267, 154
STYLE DS_CONTROL | WS_CHILD
FONT 9, "Segoe UI"
BEGIN
LTEXT "RTC ISA:",IDT_1767,7,9,48,10
COMBOBOX IDC_COMBO_ISARTC,64,7,155,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_ISARTC,222,7,38,12
GROUPBOX "Expansão da memória ISA",IDC_GROUP_ISAMEM,7,28,253,93
LTEXT "Placa 1:",IDT_1763,16,45,48,10
COMBOBOX IDC_COMBO_ISAMEM_1,73,43,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_ISAMEM_1,213,43,38,12
LTEXT "Placa 2:",IDT_1764,16,64,48,10
COMBOBOX IDC_COMBO_ISAMEM_2,73,62,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_ISAMEM_2,213,62,38,12
LTEXT "Placa 3:",IDT_1765,16,83,48,10
COMBOBOX IDC_COMBO_ISAMEM_3,73,81,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_ISAMEM_3,213,81,38,12
LTEXT "Placa 4:",IDT_1766,16,102,48,10
COMBOBOX IDC_COMBO_ISAMEM_4,73,100,137,120,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Configurar",IDC_CONFIGURE_ISAMEM_4,213,100,38,12
CONTROL "Dispositivo ISABugger",IDC_CHECK_BUGGER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,128,94,10
CONTROL "Placa de diagnóstico",IDC_CHECK_POSTCARD,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,147,128,94,10
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
2048 "86Box"
IDS_2049 "Erro"
IDS_2050 "Erro fatal"
IDS_2051 "<reserved>"
IDS_2052 "Use CTRL+ALT+PAGE DOWN para retornar ao janela"
IDS_2053 "Velocidade"
IDS_2054 "ZIP %03i %i (%s): %ls"
IDS_2055 "Imagens ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
IDS_2056 "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, <a href=""https://github.com/86Box/roms/releases/latest"">baixe</a> um conjunto de ROM e extraia no diretório ""roms""."
IDS_2057 "(vazio)"
IDS_2058 "Imagens ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Todos os arquivos (*.*)\0*.*\0"
IDS_2059 "Turbo"
IDS_2060 "Lig."
IDS_2061 "Desl."
IDS_2062 "Todas as imagens (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Imagens de setor básico (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Imagens de superfície (*.86F)\0*.86F\0"
IDS_2063 "A máquina ""%hs"" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível."
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_2064 "A placa de vídeo ""%hs"" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível."
IDS_2065 "Máquina"
IDS_2066 "Vídeo"
IDS_2067 "Dispositivos de entrada"
IDS_2068 "Som"
IDS_2069 "Rede"
IDS_2070 "Portas (COM & LPT)"
IDS_2071 "Controladores de armaz."
IDS_2072 "Discos rígidos"
IDS_2073 "Disquete & CD-ROM"
IDS_2074 "Dispos. removíveis"
IDS_2075 "Outros periféricos"
IDS_2076 "Imagens de superfície (*.86F)\0*.86F\0"
IDS_2077 "Clique para capturar o mouse"
IDS_2078 "Aperte F8+F12 para liberar o mouse"
IDS_2079 "Aperte F8+F12 ou botão do meio para liberar o mouse"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_2080 "Não foi possível inicializar o FluidSynth"
IDS_2081 "Barramento"
IDS_2082 "Arquivo"
IDS_2083 "CI"
IDS_2084 "CA"
IDS_2085 "SE"
IDS_2086 "MB"
IDS_2087 "Verificar BPB"
IDS_2088 "KB"
IDS_2089 "Não conseguiu inicializar o renderizador de vídeo."
IDS_2090 "Padrão"
IDS_2091 "%i estado(s) de espera"
IDS_2092 "Tipo"
IDS_2093 "Não foi possível configurar o PCap"
IDS_2094 "Nenhum dispositivo PCap encontrado"
IDS_2095 "Dispositivo PCap inválido"
IDS_2096 "Joystick padrão de 2 botões"
IDS_2097 "Joystick padrão de 4 botões"
IDS_2098 "Joystick padrão de 6 botões"
IDS_2099 "Joystick padrão de 8 botões"
IDS_2100 "CH Flightstick Pro"
IDS_2101 "Microsoft SideWinder Pad"
IDS_2102 "Thrustmaster Flight Control System"
IDS_2103 "Nada"
IDS_2104 "Não foi possível carregar os aceleradores do teclado."
IDS_2105 "Não foi possível registrar a entrada bruta."
IDS_2106 "%u"
IDS_2107 "%u MB (CHS: %i, %i, %i)"
IDS_2108 "Disquete %i (%s): %ls"
IDS_2109 "Todas as imagens (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Imagens de setor avançado (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagens de setor básico (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Imagens de fluxo (*.FDI)\0*.FDI\0Imagens de superfície (*.86F;*.MFM)\0*.86F;*.MFM\0Todos os arquivos (*.*)\0*.*\0"
IDS_2110 "Não foi possível inicializar o FreeType"
IDS_2111 "Não é possível inicializar o SDL, é necessário o SDL2.dll"
IDS_2112 "Tem certeza de que deseja reiniciar completamente a máquina emulada?"
IDS_2113 "Tem certeza de que deseja sair do 86Box?"
IDS_2114 "Não é possível inicializar o Ghostscript"
IDS_2115 "MO %i (%ls): %ls"
IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0"
IDS_2117 "Bem-vindo ao 86Box!"
IDS_2118 "Controle interno"
IDS_2119 "Sair"
IDS_2120 "Nenhum ROM encontrada"
IDS_2121 "Você deseja salvar as configurações?"
IDS_2122 "Isto fará com que a máquina emulada seja reinicializada."
IDS_2123 "Salvar"
IDS_2124 "Sobre o 86Box"
IDS_2125 "86Box versão" EMU_VERSION
IDS_2126 "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações."
IDS_2127 "OK"
IDS_2128 "Hardware não disponível"
#ifdef _WIN32
#define LIB_NAME_PCAP "WinPcap"
#else
#define LIB_NAME_PCAP "libpcap"
#endif
IDS_2129 "Certifique-se de que " LIB_NAME_PCAP " esteja instalado e que você tenha uma " LIB_NAME_PCAP " -conexão de rede compatível."
IDS_2130 "Configuração inválida"
#ifdef _WIN32
#define LIB_NAME_FREETYPE "freetype.dll"
#else
#define LIB_NAME_FREETYPE "libfreetype"
#endif
IDS_2131 LIB_NAME_FREETYPE " é necessário para emulação de impressora ESC/P."
#ifdef _WIN32
#define LIB_NAME_GS "gsdll32.dll"
#else
#define LIB_NAME_GS "libgs"
#endif
IDS_2132 LIB_NAME_GS " é necessário para a conversão automática de arquivos PostScript para PDF.\n\nQualquer documento enviado para a impressora genérica PostScript será salvo como arquivos PostScript (.ps)."
#ifdef _WIN32
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
#else
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
#endif
IDS_2133 LIB_NAME_FLUIDSYNTH " é necessário para a saída MIDI FluidSynth."
IDS_2134 "Entrando no modo de tela cheia"
IDS_2135 "Não exibir esta mensagem novamente"
IDS_2136 "Não sair"
IDS_2137 "Reiniciar"
IDS_2138 "Não reiniciar"
IDS_2139 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0"
IDS_2140 "Imagens de CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Todos os arquivos (*.*)\0*.*\0"
IDS_2141 "Configuração do dispositivo %hs"
IDS_2142 "Monitor em modo de suspensão"
IDS_2143 "Shaders OpenGL (*.GLSL)\0*.GLSL\0Todos os arquivos (*.*)\0*.*\0"
IDS_2144 "Opções do OpenGL"
IDS_2145 "Você está carregando uma configuração não suportada"
IDS_2146 "A filtragem do tipo CPU baseada na máquina selecionada é desativada para esta máquina emulada.\n\nIsto torna possível escolher uma CPU que de outra forma seria incompatível com a máquina selecionada. Entretanto, você pode encontrar incompatibilidades com a BIOS da máquina ou outro software.\n\nA ativação desta configuração não é oficialmente suportada e qualquer relatório de erro arquivado pode ser fechado como inválido."
IDS_2147 "Continuar"
IDS_2148 "Cassete: %s"
IDS_2149 "Imagens de cassete (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Todos os arquivos (*.*)\0*.*\0"
IDS_2150 "Cartucho %i: %ls"
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os arquivos (*.*)\0*.*\0"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_4096 "Disco rígido (%s)"
IDS_4097 "%01i:%01i"
IDS_4098 "%01i"
IDS_4099 "As unidades de CD-ROM MFM/RLL ou ESDI nunca existiram"
IDS_4100 "Personalizado..."
IDS_4101 "Personalizado (grande)..."
IDS_4102 "Adicionar novo disco rígido"
IDS_4103 "Adicionar disco rígido existente"
IDS_4104 "As imagens de disco HDI não podem ser maiores do que 4GB."
IDS_4105 "As imagens de disco não podem ser maiores do que 127GB."
IDS_4106 "Imagens de disco rígido (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Todos os arquivos (*.*)\0*.*\0"
IDS_4107 "Não foi possível ler o arquivo"
IDS_4108 "Não foi possível escrever o arquivo"
IDS_4109 "Imagens HDI ou HDX com um tamanho de setor que não seja 512 não são suportadas."
IDS_4110 "O USB ainda não é suportado"
IDS_4111 "Esta imagem existe"
IDS_4112 "Digite um nome de arquivo válido."
IDS_4113 "A imagem foi criada com sucesso"
IDS_4114 "Certifique-se de que o arquivo existe e é legível."
IDS_4115 "Certifique-se de que o arquivo está sendo salvo em um diretório gravável."
IDS_4116 "A imagem do disco é muito grande"
IDS_4117 "Lembre-se de particionar e formatar a unidade recém-criada."
IDS_4118 "O arquivo selecionado será sobrescrito. Você tem certeza de que deseja usá-lo?"
IDS_4119 "Imagem de disco sem suporte"
IDS_4120 "Sobrescrever"
IDS_4121 "Não sobrescrever"
IDS_4122 "Imagem bruta (.img)"
IDS_4123 "Imagem HDI (.hdi)"
IDS_4124 "Imagem HDX (.hdx)"
IDS_4125 "VHD de tamanho fixo (.vhd)"
IDS_4126 "VHD de tamanho dinâmico (.vhd)"
IDS_4127 "VHD diferencial (.vhd)"
IDS_4128 "Blocos grandes (2 MB)"
IDS_4129 "Blocos pequenos (512 KB)"
IDS_4130 "Arquivos VHD (*.VHD)\0*.VHD\0Todos os arquivos (*.*)\0*.*\0"
IDS_4131 "Selecione o VHD pai"
IDS_4132 "Isto pode significar que a imagem de origem foi modificada após a criação da imagem diferencial.\n\nTambém pode acontecer caso os arquivos de imagem tenham sido movidos ou copiados, ou por um erro no programa que criou este disco.\n\nVocê quer consertar os marcadores de tempo?"
IDS_4133 "A data/hora dos arquivos de pais e filhos não correspondem"
IDS_4134 "Não foi possível consertar o carimbo de data/hora da VHD."
IDS_4135 "%01i:%02i"
IDS_4352 "MFM/RLL"
IDS_4353 "XTA"
IDS_4354 "ESDI"
IDS_4355 "IDE"
IDS_4356 "ATAPI"
IDS_4357 "SCSI"
IDS_4608 "MFM/RLL (%01i:%01i)"
IDS_4609 "XTA (%01i:%01i)"
IDS_4610 "ESDI (%01i:%01i)"
IDS_4611 "IDE (%01i:%01i)"
IDS_4612 "ATAPI (%01i:%01i)"
IDS_4613 "SCSI (%01i:%02i)"
IDS_5120 "CD-ROM %i (%s): %s"
IDS_5376 "Desativado"
IDS_5381 "ATAPI"
IDS_5382 "SCSI"
IDS_5632 "Desativado"
IDS_5637 "ATAPI (%01i:%01i)"
IDS_5638 "SCSI (%01i:%02i)"
IDS_5888 "160 kB"
IDS_5889 "180 kB"
IDS_5890 "320 kB"
IDS_5891 "360 kB"
IDS_5892 "640 kB"
IDS_5893 "720 kB"
IDS_5894 "1.2 MB"
IDS_5895 "1.25 MB"
IDS_5896 "1.44 MB"
IDS_5897 "DMF (cluster 1024)"
IDS_5898 "DMF (cluster 2048)"
IDS_5899 "2.88 MB"
IDS_5900 "ZIP 100"
IDS_5901 "ZIP 250"
IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)"
IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)"
IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)"
IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)"
IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)"
IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)"
IDS_5908 "5.25"" 600Mb M.O."
IDS_5909 "5.25"" 650Mb M.O."
IDS_5910 "5.25"" 1Gb M.O."
IDS_5911 "5.25"" 1.3Gb M.O."
IDS_6144 "RPM perfeita"
IDS_6145 "1%% abaixo das RPM perfeita"
IDS_6146 "1.5%% abaixo das RPM perfeita"
IDS_6147 "2%% abaixo das RPM perfeita"
IDS_7168 "(Padrão do sistema)"
END
#define IDS_LANG_ENUS IDS_7168
// Portuguese (pt-BR) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -472,7 +472,7 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nCmdShow)
hinstance = hInst;
/* Set the application version ID string. */
sprintf(emu_version, "%s v%s", EMU_NAME, EMU_VERSION);
sprintf(emu_version, "%s v%s", EMU_NAME, EMU_VERSION_FULL);
/* First, set our (default) language. */
lang_sys = GetThreadUILanguage();

View File

@@ -39,17 +39,23 @@ AboutDialogCreate(HWND hwnd)
int i;
TASKDIALOGCONFIG tdconfig = {0};
TASKDIALOG_BUTTON tdbuttons[] = {
{IDOK, EMU_SITE},
{IDCANCEL, MAKEINTRESOURCE(IDS_2127)}
{IDOK, EMU_SITE},
{IDCANCEL, MAKEINTRESOURCE(IDS_2127)}
};
wchar_t emu_version[256];
i = swprintf(emu_version, sizeof(emu_version), L"%ls v%ls", EMU_NAME_W, EMU_VERSION_FULL_W);
#ifdef EMU_GIT_HASH
swprintf(&emu_version[i], sizeof(emu_version) - i, L" [%ls]", EMU_GIT_HASH_W);
#endif
tdconfig.cbSize = sizeof(tdconfig);
tdconfig.hwndParent = hwnd;
tdconfig.hInstance = hinstance;
tdconfig.dwCommonButtons = 0;
tdconfig.pszWindowTitle = MAKEINTRESOURCE(IDS_2124);
tdconfig.pszMainIcon = (PCWSTR) 10;
tdconfig.pszMainInstruction = MAKEINTRESOURCE(IDS_2125);
tdconfig.pszMainInstruction = emu_version;
tdconfig.pszContent = MAKEINTRESOURCE(IDS_2126);
tdconfig.cButtons = ARRAYSIZE(tdbuttons);
tdconfig.pButtons = tdbuttons;
@@ -57,5 +63,5 @@ AboutDialogCreate(HWND hwnd)
TaskDialogIndirect(&tdconfig, &i, NULL, NULL);
if (i == IDOK)
ShellExecute(hwnd, L"open", L"https://" EMU_SITE, NULL, NULL, SW_SHOW);
ShellExecute(hwnd, L"open", L"https://" EMU_SITE, NULL, NULL, SW_SHOW);
}

View File

@@ -6,7 +6,7 @@
*
* This file is part of the 86Box distribution.
*
* Handle the dialog for specifying the dimensions of the main window.
* Handle the dialog for changing the program's language.
*
*
*

View File

@@ -459,7 +459,7 @@ sdl_init_common(int flags)
sdl_h = GetSystemMetrics(SM_CYSCREEN);
/* Create the desktop-covering window. */
_swprintf(temp, L"%s v%s", EMU_NAME_W, EMU_VERSION_W);
_swprintf(temp, L"%s v%s", EMU_NAME_W, EMU_VERSION_FULL_W);
sdl_parent_hwnd = CreateWindow(SDL_CLASS_NAME, temp, WS_POPUP, 0, 0, sdl_w, sdl_h,
HWND_DESKTOP, NULL, hinstance, NULL);
ShowWindow(sdl_parent_hwnd, FALSE);