Merge branch '86Box:master' into ui-changes
138
.github/workflows/cmake.yml
vendored
@@ -83,68 +83,115 @@ jobs:
|
||||
run: cmake --build build --target ${{ matrix.build.target }}
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '86Box-${{ matrix.build.name }}-MSYS2-${{ matrix.environment.msystem }}-${{ github.sha }}'
|
||||
name: '86Box${{ matrix.build.slug }}-MSYS2-${{ matrix.environment.msystem }}-gha${{ github.run_number }}'
|
||||
path: build/artifacts/**
|
||||
|
||||
vs2019:
|
||||
name: VS2019 ${{ matrix.build.name }} ${{ matrix.target-arch }} build (${{ matrix.toolset }})
|
||||
llvm-windows:
|
||||
name: "Windows vcpkg/LLVM (${{ matrix.build.name }} ${{ matrix.target.name }})"
|
||||
|
||||
runs-on: windows-latest
|
||||
runs-on: windows-2022
|
||||
|
||||
env:
|
||||
VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
build:
|
||||
- name: Debug
|
||||
dev-build: off
|
||||
- name: Regular ODR
|
||||
type: Release
|
||||
new-dynarec: off
|
||||
strip: --strip
|
||||
- name: Debug ODR
|
||||
slug: -Debug
|
||||
type: Debug
|
||||
- name: Dev
|
||||
dev-build: on
|
||||
new-dynarec: off
|
||||
- name: Regular NDR
|
||||
slug: -NDR
|
||||
type: Release
|
||||
strip: --strip
|
||||
new-dynarec: on
|
||||
- name: Debug NDR
|
||||
slug: -NDR-Debug
|
||||
type: Debug
|
||||
target-arch: ['Win32', 'x64', 'ARM64']
|
||||
toolset: ['clangcl']
|
||||
new-dynarec: on
|
||||
target:
|
||||
- name: x86
|
||||
triplet: x86-windows-static
|
||||
toolchain: cmake/llvm-win32-i686.cmake
|
||||
vcvars: x64_x86
|
||||
- name: x64
|
||||
triplet: x64-windows-static
|
||||
toolchain: cmake/llvm-win32-x86_64.cmake
|
||||
vcvars: x64
|
||||
- name: ARM64
|
||||
triplet: arm64-windows-static
|
||||
toolchain: cmake/llvm-win32-aarch64.cmake
|
||||
vcvars: x64_arm64
|
||||
exclude:
|
||||
- target-arch: 'ARM64'
|
||||
build:
|
||||
new-dynarec: off
|
||||
- build:
|
||||
new-dynarec: off
|
||||
target:
|
||||
name: ARM64
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: build/vcpkg_installed
|
||||
key: vcpkg-${{ hashFiles('vcpkg.json') }}-${{ matrix.target-arch }}
|
||||
- name: Download Ninja
|
||||
run: >
|
||||
Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip -OutFile ninja-win.zip &&
|
||||
Expand-Archive ninja-win.zip -DestinationPath .
|
||||
- name: Setup NuGet Credentials
|
||||
run: >
|
||||
& (C:/vcpkg/vcpkg fetch nuget | tail -n 2)
|
||||
sources add
|
||||
-source "https://nuget.pkg.github.com/86Box/index.json"
|
||||
-storepasswordincleartext
|
||||
-name "GitHub"
|
||||
-username "86Box"
|
||||
-password "${{ secrets.GITHUB_TOKEN }}"
|
||||
- name: vcpkg package restore
|
||||
if: false
|
||||
run: vcpkg install freetype libpng openal-soft sdl2 rtmidi --triplet ${{ matrix.target.triplet }}
|
||||
- name: Configure CMake
|
||||
run: >-
|
||||
cmake -S . -B build
|
||||
-G "Visual Studio 16 2019" -A ${{ matrix.target-arch }} -T ${{ matrix.toolset }}
|
||||
-D CMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake
|
||||
-D CMAKE_INSTALL_PREFIX=./build/artifacts
|
||||
-D DEV_BRANCH=${{ matrix.build.dev-build }}
|
||||
run: >
|
||||
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsall.bat" ${{ matrix.target.vcvars }}
|
||||
|
||||
set PATH=C:/Program Files/LLVM/bin;%PATH%
|
||||
|
||||
cmake -S . -B build -G Ninja -D CMAKE_BUILD_TYPE=${{ matrix.build.type }}
|
||||
-D NEW_DYNAREC=${{ matrix.build.new-dynarec }}
|
||||
-D VNC=OFF
|
||||
-D CMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
|
||||
-D VCPKG_CHAINLOAD_TOOLCHAIN_FILE=${{ github.workspace }}/${{ matrix.target.toolchain }}
|
||||
-D VCPKG_TARGET_TRIPLET=${{ matrix.target.triplet }}
|
||||
shell: cmd
|
||||
- name: Build
|
||||
run: cmake --build build --config ${{ matrix.build.type }} --target install
|
||||
run: |
|
||||
call "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsall.bat" ${{ matrix.target.vcvars }}
|
||||
cmake --build build
|
||||
shell: cmd
|
||||
- name: Generate package
|
||||
run: cmake --install build --prefix ./build/artifacts ${{ matrix.build.strip }}
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '86Box-${{ matrix.build.name }}-VS2019-${{ matrix.target-arch }}-${{ matrix.toolset }}-${{ github.sha }}'
|
||||
name: '86Box${{ matrix.build.slug }}-Windows-LLVM-${{ matrix.target.name }}-gha${{ github.run_number }}'
|
||||
path: build/artifacts/**
|
||||
|
||||
linux:
|
||||
name: "Linux GCC 11"
|
||||
name: "Linux GCC 11 (${{ matrix.build.name }} x86_64)"
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
build:
|
||||
- name: Debug
|
||||
slug: -Debug
|
||||
dev-build: off
|
||||
new-dynarec: off
|
||||
type: Debug
|
||||
- name: Dev
|
||||
slug: -Dev
|
||||
dev-build: on
|
||||
new-dynarec: on
|
||||
type: Debug
|
||||
@@ -163,24 +210,39 @@ jobs:
|
||||
-D CMAKE_BUILD_TYPE=${{ matrix.build.type }}
|
||||
-D CMAKE_C_COMPILER=gcc-11 -D CMAKE_CXX_COMPILER=g++-11
|
||||
- name: Build
|
||||
run: cmake --build build --target install
|
||||
run: cmake --build build
|
||||
- name: Generate package
|
||||
run: cmake --install build --prefix ./build/artifacts ${{ matrix.build.strip }}
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '86Box${{ matrix.build.slug }}-Linux-x86_64-gha${{ github.run_number }}'
|
||||
path: build/artifacts/**
|
||||
|
||||
macos:
|
||||
name: "macOS 11"
|
||||
name: "macOS 11 (${{ matrix.build.name }} x86_64)"
|
||||
|
||||
runs-on: macos-11
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
build:
|
||||
- name: Debug
|
||||
dev-build: off
|
||||
- name: Regular ODR
|
||||
type: Release
|
||||
new-dynarec: off
|
||||
strip: --strip
|
||||
- name: Debug ODR
|
||||
slug: -Debug
|
||||
type: Debug
|
||||
- name: Dev
|
||||
dev-build: on
|
||||
new-dynarec: off
|
||||
- name: Regular NDR
|
||||
slug: -NDR
|
||||
type: Release
|
||||
strip: --strip
|
||||
new-dynarec: on
|
||||
- name: Debug NDR
|
||||
slug: -NDR-Debug
|
||||
type: Debug
|
||||
new-dynarec: on
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -189,10 +251,16 @@ jobs:
|
||||
- name: Configure CMake
|
||||
run: >-
|
||||
cmake -S . -B build
|
||||
-D CMAKE_INSTALL_PREFIX=./build/artifacts
|
||||
--toolchain cmake/flags-gcc-x86_64.cmake
|
||||
-D DEV_BRANCH=${{ matrix.build.dev-build }}
|
||||
-D NEW_DYNAREC=${{ matrix.build.new-dynarec }}
|
||||
-D VNC=OFF
|
||||
-D CMAKE_BUILD_TYPE=${{ matrix.build.type }}
|
||||
- name: Build
|
||||
run: cmake --build build --target install
|
||||
run: cmake --build build
|
||||
- name: Generate package
|
||||
run: cmake --install build --prefix ./build/artifacts ${{ matrix.build.strip }}
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: '86Box${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}'
|
||||
path: build/artifacts/**
|
||||
|
||||
@@ -100,8 +100,8 @@ set(CMAKE_CXX_STANDARD 11)
|
||||
# Option Description Def.
|
||||
# ------ ----------- ----
|
||||
option(RELEASE "Release build" OFF)
|
||||
option(USB "USB support" OFF)
|
||||
option(DYNAREC "Dynamic recompiler" ON)
|
||||
option(OPENAL "OpenAL" ON)
|
||||
option(FLUIDSYNTH "FluidSynth" ON)
|
||||
option(MUNT "MUNT" ON)
|
||||
option(VRAMDUMP "Video RAM dumping" OFF)
|
||||
@@ -113,21 +113,24 @@ option(DEV_BRANCH "Development branch"
|
||||
|
||||
# Development branch features
|
||||
#
|
||||
# Option Description Def. Condition Otherwise
|
||||
# ------ ----------- ---- --------- ---------
|
||||
cmake_dependent_option(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(MGA "Matrox Mystique graphics adapters" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(NO_SIO "Machines without emulated Super I/O chips" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PAS16 "Pro Audio Spectrum 16" OFF "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(VGAWONDER "ATI VGA Wonder (ATI-18800)" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(VNC "VNC renderer" OFF "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
# Option Description Def. Condition Otherwise
|
||||
# ------ ----------- ---- --------- ---------
|
||||
cmake_dependent_option(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(MGA "Matrox Mystique graphics adapters" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(NO_SIO "Machines without emulated Super I/O chips" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(PAS16 "Pro Audio Spectrum 16" OFF "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(VGAWONDER "ATI VGA Wonder (ATI-18800)" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(VNC "VNC renderer" OFF "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_RAMPAGE "AST Rampage" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_IAB "Intel Above Board" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(ISAMEM_BRAT "BocaRAM/AT" ON "DEV_BRANCH" OFF)
|
||||
|
||||
# Determine the build type
|
||||
set(RELEASE_BUILD OFF)
|
||||
|
||||
@@ -21,7 +21,7 @@ System requirements and recommendations
|
||||
Performance may vary depending on both host and guest configuration. Most emulation logic is executed in a single thread, therefore generally systems with better IPC (instructions per clock) should be able to emulate higher clock speeds.
|
||||
|
||||
It is also recommended to use a manager application with 86Box for easier handling of multiple virtual machines.
|
||||
* [WinBox for 86Box](https://github.com/laciba96/WinBox-for-86Box) by [Laci bá'](https://github.com/laciba96)
|
||||
* [WinBox for 86Box](https://github.com/86Box/WinBox-for-86Box) by Laci bá'
|
||||
* The new manager with improved new user experience; installer, automatic updates of emulator files and more.
|
||||
* [86Box Manager](https://github.com/86Box/86BoxManager) by [daviunic](https://github.com/daviunic) (Overdoze)
|
||||
* The traditional 86Box manager with simple interface.
|
||||
|
||||
25
src/86box.c
@@ -160,7 +160,8 @@ int GAMEBLASTER = 0; /* (C) sound option */
|
||||
int GUS = 0; /* (C) sound option */
|
||||
int SSI2001 = 0; /* (C) sound option */
|
||||
int voodoo_enabled = 0; /* (C) video option */
|
||||
uint32_t mem_size = 0; /* (C) memory size */
|
||||
uint32_t mem_size = 0; /* (C) memory size (Installed on system board)*/
|
||||
uint32_t isa_mem_size = 0; /* (C) memory size (ISA Memory Cards) */
|
||||
int cpu_use_dynarec = 0; /* (C) cpu uses/needs Dyna */
|
||||
int cpu = 0; /* (C) cpu type */
|
||||
int fpu_type = 0; /* (C) fpu type */
|
||||
@@ -931,7 +932,9 @@ pc_reset_hard_close(void)
|
||||
|
||||
scsi_disk_close();
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
closeal();
|
||||
#endif
|
||||
|
||||
video_reset_close();
|
||||
|
||||
@@ -976,9 +979,6 @@ pc_reset_hard_init(void)
|
||||
/* Reset and reconfigure the Sound Card layer. */
|
||||
sound_card_reset();
|
||||
|
||||
/* Reset any ISA memory cards. */
|
||||
isamem_reset();
|
||||
|
||||
/* Reset any ISA RTC cards. */
|
||||
isartc_reset();
|
||||
|
||||
@@ -1048,8 +1048,12 @@ pc_reset_hard_init(void)
|
||||
atfullspeed = 0;
|
||||
pc_full_speed();
|
||||
|
||||
cycles = cycles_main = 0;
|
||||
|
||||
cycles = 0;
|
||||
fpu_cycles = 0;
|
||||
#ifdef USE_DYNAREC
|
||||
cycles_main = 0;
|
||||
#endif
|
||||
|
||||
update_mouse_msg();
|
||||
}
|
||||
|
||||
@@ -1068,7 +1072,13 @@ void update_mouse_msg()
|
||||
if (wcp) /* remove parentheses */
|
||||
*(wcp - 1) = L'\0';
|
||||
mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name)+1);
|
||||
|
||||
#ifdef _WIN32
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls",
|
||||
plat_get_string(IDS_2077));
|
||||
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls",
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
|
||||
wcsncpy(mouse_msg[2], L"%i%%", sizeof_w(mouse_msg[2]));
|
||||
#else
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
|
||||
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
|
||||
plat_get_string(IDS_2077));
|
||||
@@ -1077,6 +1087,7 @@ void update_mouse_msg()
|
||||
(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);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -87,9 +87,11 @@ if(APPLE)
|
||||
target_link_libraries(86Box Freetype::Freetype)
|
||||
endif()
|
||||
|
||||
find_package(OpenAL REQUIRED)
|
||||
include_directories(${OPENAL_INCLUDE_DIR})
|
||||
target_link_libraries(86Box ${OPENAL_LIBRARY})
|
||||
if(OPENAL)
|
||||
find_package(OpenAL REQUIRED)
|
||||
include_directories(${OPENAL_INCLUDE_DIR})
|
||||
target_link_libraries(86Box ${OPENAL_LIBRARY})
|
||||
endif()
|
||||
|
||||
find_package(SDL2 REQUIRED)
|
||||
include_directories(${SDL2_INCLUDE_DIRS})
|
||||
|
||||
@@ -737,8 +737,8 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in
|
||||
static int
|
||||
track_type_is_valid(uint8_t id, int type, int flags, int audio, int mode2)
|
||||
{
|
||||
if (!(flags & 0x70)) { /* 0x00/0x08/0x80/0x88 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Any Mode] 0x00/0x08/0x80/0x88 are illegal modes\n", id);
|
||||
if (!(flags & 0x70) && (flags & 0xf8)) { /* 0x08/0x80/0x88 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Any Mode] 0x08/0x80/0x88 are illegal modes\n", id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1031,8 +1031,8 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int c
|
||||
memset(raw_buffer, 0, 2448);
|
||||
memset(extra_buffer, 0, 296);
|
||||
|
||||
if (!(cdrom_sector_flags & 0xf0)) { /* 0x00 and 0x08 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Mode 1] 0x00 and 0x08 are illegal modes\n", dev->id);
|
||||
if ((cdrom_sector_flags & 0xf8) == 0x08) { /* 0x08 is an illegal mode */
|
||||
cdrom_log("CD-ROM %i: [Mode 1] 0x08 is an illegal mode\n", dev->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ void codegen_init()
|
||||
#if _WIN64
|
||||
codeblock = VirtualAlloc(NULL, BLOCK_SIZE * sizeof(codeblock_t), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
#elif defined(__unix__) || defined(__APPLE__)
|
||||
codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, 0, 0);
|
||||
codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
#else
|
||||
codeblock = malloc(BLOCK_SIZE * sizeof(codeblock_t));
|
||||
#endif
|
||||
|
||||
@@ -39,9 +39,9 @@ void codegen_allocator_init()
|
||||
/* TODO: check deployment target: older Intel-based versions of macOS don't play
|
||||
nice with MAP_JIT. */
|
||||
#elif defined(__APPLE__) && defined(MAP_JIT)
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, 0, 0);
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, -1, 0);
|
||||
#else
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, 0, 0);
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
#endif
|
||||
|
||||
for (c = 0; c < MEM_BLOCK_NR; c++)
|
||||
|
||||
@@ -561,6 +561,7 @@ load_general(void)
|
||||
|
||||
kbd_req_capture = config_get_int(cat, "kbd_req_capture", 0);
|
||||
hide_status_bar = config_get_int(cat, "hide_status_bar", 0);
|
||||
hide_tool_bar = config_get_int(cat, "hide_tool_bar", 0);
|
||||
|
||||
confirm_reset = config_get_int(cat, "confirm_reset", 1);
|
||||
confirm_exit = config_get_int(cat, "confirm_exit", 1);
|
||||
@@ -2036,6 +2037,7 @@ config_load(void)
|
||||
|
||||
kbd_req_capture = 0;
|
||||
hide_status_bar = 0;
|
||||
hide_tool_bar = 0;
|
||||
scale = 1;
|
||||
machine = machine_get_machine_from_internal_name("ibmpc");
|
||||
dpi_scale = 1;
|
||||
@@ -2222,6 +2224,11 @@ save_general(void)
|
||||
else
|
||||
config_delete_var(cat, "hide_status_bar");
|
||||
|
||||
if (hide_tool_bar != 0)
|
||||
config_set_int(cat, "hide_tool_bar", hide_tool_bar);
|
||||
else
|
||||
config_delete_var(cat, "hide_tool_bar");
|
||||
|
||||
if (confirm_reset != 1)
|
||||
config_set_int(cat, "confirm_reset", confirm_reset);
|
||||
else
|
||||
|
||||
@@ -81,7 +81,20 @@ x386_log(const char *fmt, ...)
|
||||
|
||||
#define OP_TABLE(name) ops_ ## name
|
||||
|
||||
#define CLOCK_CYCLES(c) cycles -= (c)
|
||||
#define CLOCK_CYCLES(c) \
|
||||
{\
|
||||
if (fpu_cycles > 0) {\
|
||||
fpu_cycles -= (c);\
|
||||
if (fpu_cycles < 0) {\
|
||||
cycles += fpu_cycles;\
|
||||
}\
|
||||
} else {\
|
||||
cycles -= (c);\
|
||||
}\
|
||||
}
|
||||
|
||||
#define CLOCK_CYCLES_FPU(c) cycles -= (c)
|
||||
#define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
|
||||
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
||||
|
||||
#include "x86_ops.h"
|
||||
|
||||
@@ -267,9 +267,22 @@ static void prefetch_flush()
|
||||
|
||||
|
||||
#define OP_TABLE(name) ops_ ## name
|
||||
#define CLOCK_CYCLES(c) cycles -= (c)
|
||||
#define CLOCK_CYCLES(c) \
|
||||
{\
|
||||
if (fpu_cycles > 0) {\
|
||||
fpu_cycles -= (c);\
|
||||
if (fpu_cycles < 0) {\
|
||||
cycles += fpu_cycles;\
|
||||
}\
|
||||
} else {\
|
||||
cycles -= (c);\
|
||||
}\
|
||||
}
|
||||
#define CLOCK_CYCLES_FPU(c) cycles -= (c)
|
||||
#define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
|
||||
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
||||
|
||||
|
||||
#include "386_ops.h"
|
||||
|
||||
|
||||
|
||||
@@ -65,6 +65,8 @@ static __inline void fetch_ea_16_long(uint32_t rmdat)
|
||||
#define OP_TABLE(name) dynarec_ops_ ## name
|
||||
|
||||
#define CLOCK_CYCLES(c)
|
||||
#define CLOCK_CYCLES_FPU(c)
|
||||
#define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
|
||||
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
||||
|
||||
#include "386_ops.h"
|
||||
|
||||
@@ -89,11 +89,32 @@ static int refresh = 0, cycdiff;
|
||||
wait(val, 0); \
|
||||
}
|
||||
|
||||
#define CLOCK_CYCLES(val) \
|
||||
#define CLOCK_CYCLES_ALWAYS(val) \
|
||||
{ \
|
||||
wait(val, 0); \
|
||||
}
|
||||
|
||||
#define CLOCK_CYCLES_FPU(val) \
|
||||
{ \
|
||||
wait(val, 0); \
|
||||
}
|
||||
|
||||
|
||||
#define CLOCK_CYCLES(val) \
|
||||
{ \
|
||||
if (fpu_cycles > 0) { \
|
||||
fpu_cycles -= (val); \
|
||||
if (fpu_cycles < 0) { \
|
||||
wait(val, 0); \
|
||||
} \
|
||||
} else { \
|
||||
wait(val, 0); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define CONCURRENCY_CYCLES(c) fpu_cycles = (c)
|
||||
|
||||
|
||||
typedef int (*OpFn)(uint32_t fetchdat);
|
||||
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
# Copyright 2020,2021 David Hrdlička.
|
||||
#
|
||||
|
||||
add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c 386_dynarec.c
|
||||
386_dynarec_ops.c x86seg.c x87.c x87_timings.c)
|
||||
add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c
|
||||
386_dynarec.c x86seg.c x87.c x87_timings.c)
|
||||
|
||||
if(AMD_K5)
|
||||
target_compile_definitions(cpu PRIVATE USE_AMD_K5)
|
||||
@@ -25,8 +25,10 @@ if(CYRIX_6X86)
|
||||
endif()
|
||||
|
||||
if(DYNAREC)
|
||||
target_sources(cpu PRIVATE 386_dynarec_ops.c)
|
||||
|
||||
add_library(cgt OBJECT codegen_timing_486.c codegen_timing_686.c
|
||||
codegen_timing_common.c codegen_timing_k6.c
|
||||
codegen_timing_pentium.c codegen_timing_p6.c
|
||||
codegen_timing_winchip.c codegen_timing_winchip2.c)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -1369,6 +1369,7 @@ cpu_set(void)
|
||||
case FPU_487SX:
|
||||
default:
|
||||
x87_timings = x87_timings_486;
|
||||
x87_concurrency = x87_concurrency_486;
|
||||
}
|
||||
|
||||
if (is386) {
|
||||
|
||||
@@ -354,7 +354,7 @@ typedef struct {
|
||||
uint8_t ssegs, ismmx,
|
||||
abrt, _smi_line;
|
||||
|
||||
int _cycles, _in_smm;
|
||||
int _cycles, _fpu_cycles, _in_smm;
|
||||
|
||||
uint16_t npxs, npxc;
|
||||
|
||||
@@ -457,6 +457,7 @@ COMPILE_TIME_ASSERT(sizeof(cpu_state_t) <= 128)
|
||||
#define DI cpu_state.regs[7].w
|
||||
|
||||
#define cycles cpu_state._cycles
|
||||
#define fpu_cycles cpu_state._fpu_cycles
|
||||
|
||||
#define cpu_rm cpu_state.rm_data.rm_mod_reg.rm
|
||||
#define cpu_mod cpu_state.rm_data.rm_mod_reg.mod
|
||||
|
||||
@@ -2415,7 +2415,9 @@ cyrix_load_seg_descriptor(uint32_t addr, x86seg *seg)
|
||||
cpu_cur_status &= ~CPU_STATUS_NOTFLATDS;
|
||||
else
|
||||
cpu_cur_status |= CPU_STATUS_NOTFLATDS;
|
||||
#ifdef USE_DYNAREC
|
||||
codegen_flat_ds = 0;
|
||||
#endif
|
||||
}
|
||||
if (seg == &cpu_state.seg_ss) {
|
||||
if (seg->base == 0 && seg->limit_low == 0 && seg->limit_high == 0xffffffff)
|
||||
@@ -2423,7 +2425,9 @@ cyrix_load_seg_descriptor(uint32_t addr, x86seg *seg)
|
||||
else
|
||||
cpu_cur_status |= CPU_STATUS_NOTFLATSS;
|
||||
set_stack32((segdat[3] & 0x40) ? 1 : 0);
|
||||
#ifdef USE_DYNAREC
|
||||
codegen_flat_ss = 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,8 @@ static int opFADD ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
if ((cpu_state.npxc >> 10) & 3) \
|
||||
fesetround(FE_TONEAREST); \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd ## cycle_postfix) : ((x87_concurrency.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFCOM ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -24,7 +25,8 @@ static int opFCOM ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
cpu_state.npxs &= ~(C0|C2|C3); \
|
||||
cpu_state.npxs |= x87_compare(ST(0), (double)use_var); \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom ## cycle_postfix) : ((x87_timings.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom ## cycle_postfix) : ((x87_timings.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom ## cycle_postfix) : ((x87_concurrency.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFCOMP ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -37,7 +39,8 @@ static int opFCOMP ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
cpu_state.npxs &= ~(C0|C2|C3); \
|
||||
cpu_state.npxs |= x87_compare(ST(0), (double)use_var); \
|
||||
x87_pop(); \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom ## cycle_postfix) : ((x87_timings.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom ## cycle_postfix) : ((x87_timings.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom ## cycle_postfix) : ((x87_concurrency.fcom ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFDIV ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -49,7 +52,8 @@ static int opFDIV ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
x87_div(ST(0), ST(0), use_var); \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv ## cycle_postfix) : ((x87_timings.fdiv ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv ## cycle_postfix) : ((x87_timings.fdiv ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd ## cycle_postfix) : ((x87_concurrency.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFDIVR ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -61,7 +65,8 @@ static int opFDIVR ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
x87_div(ST(0), use_var, ST(0)); \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv ## cycle_postfix) : ((x87_timings.fdiv ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv ## cycle_postfix) : ((x87_timings.fdiv ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv ## cycle_postfix) : ((x87_concurrency.fdiv ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFMUL ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -73,7 +78,8 @@ static int opFMUL ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
ST(0) *= use_var; \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fmul ## cycle_postfix) : ((x87_timings.fmul ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fmul ## cycle_postfix) : ((x87_timings.fmul ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fmul ## cycle_postfix) : ((x87_concurrency.fmul ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFSUB ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -85,7 +91,8 @@ static int opFSUB ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
ST(0) -= use_var; \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd ## cycle_postfix) : ((x87_concurrency.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
} \
|
||||
static int opFSUBR ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
@@ -97,7 +104,8 @@ static int opFSUBR ## name ## _a ## a_size(uint32_t fetchdat) \
|
||||
load_var = get(); if (cpu_state.abrt) return 1; \
|
||||
ST(0) = use_var - ST(0); \
|
||||
FP_TAG_VALID; \
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd ## cycle_postfix) : ((x87_timings.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd ## cycle_postfix) : ((x87_concurrency.fadd ## cycle_postfix) * cpu_multi)); \
|
||||
return 0; \
|
||||
}
|
||||
|
||||
@@ -127,7 +135,8 @@ static int opFADD(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = ST(0) + ST(fetchdat & 7);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFADDr(uint32_t fetchdat)
|
||||
@@ -136,7 +145,8 @@ static int opFADDr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(fetchdat & 7) = ST(fetchdat & 7) + ST(0);
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFADDP(uint32_t fetchdat)
|
||||
@@ -146,7 +156,8 @@ static int opFADDP(uint32_t fetchdat)
|
||||
ST(fetchdat & 7) = ST(fetchdat & 7) + ST(0);
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -157,7 +168,8 @@ static int opFCOM(uint32_t fetchdat)
|
||||
cpu_state.npxs &= ~(C0|C2|C3);
|
||||
if (ST(0) == ST(fetchdat & 7)) cpu_state.npxs |= C3;
|
||||
else if (ST(0) < ST(fetchdat & 7)) cpu_state.npxs |= C0;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom) : (x87_concurrency.fcom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -168,7 +180,8 @@ static int opFCOMP(uint32_t fetchdat)
|
||||
cpu_state.npxs &= ~(C0|C2|C3);
|
||||
cpu_state.npxs |= x87_compare(ST(0), ST(fetchdat & 7));
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom) : (x87_concurrency.fcom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -187,7 +200,8 @@ static int opFCOMPP(uint32_t fetchdat)
|
||||
|
||||
x87_pop();
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom) : (x87_concurrency.fcom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -199,7 +213,8 @@ static int opFUCOMPP(uint32_t fetchdat)
|
||||
cpu_state.npxs |= x87_ucompare(ST(0), ST(1));
|
||||
x87_pop();
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fucom) : (x87_concurrency.fucom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -211,7 +226,8 @@ static int opFCOMI(uint32_t fetchdat)
|
||||
cpu_state.flags &= ~(Z_FLAG | P_FLAG | C_FLAG);
|
||||
if (ST(0) == ST(fetchdat & 7)) cpu_state.flags |= Z_FLAG;
|
||||
else if (ST(0) < ST(fetchdat & 7)) cpu_state.flags |= C_FLAG;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom) : (x87_concurrency.fcom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFCOMIP(uint32_t fetchdat)
|
||||
@@ -223,7 +239,8 @@ static int opFCOMIP(uint32_t fetchdat)
|
||||
if (ST(0) == ST(fetchdat & 7)) cpu_state.flags |= Z_FLAG;
|
||||
else if (ST(0) < ST(fetchdat & 7)) cpu_state.flags |= C_FLAG;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fcom) : (x87_timings.fcom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fcom) : (x87_concurrency.fcom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -234,7 +251,8 @@ static int opFDIV(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
x87_div(ST(0), ST(0), ST(fetchdat & 7));
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFDIVr(uint32_t fetchdat)
|
||||
@@ -243,7 +261,8 @@ static int opFDIVr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
x87_div(ST(fetchdat & 7), ST(fetchdat & 7), ST(0));
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFDIVP(uint32_t fetchdat)
|
||||
@@ -253,7 +272,8 @@ static int opFDIVP(uint32_t fetchdat)
|
||||
x87_div(ST(fetchdat & 7), ST(fetchdat & 7), ST(0));
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -263,7 +283,8 @@ static int opFDIVR(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
x87_div(ST(0), ST(fetchdat&7), ST(0));
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFDIVRr(uint32_t fetchdat)
|
||||
@@ -272,7 +293,8 @@ static int opFDIVRr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
x87_div(ST(fetchdat & 7), ST(0), ST(fetchdat & 7));
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFDIVRP(uint32_t fetchdat)
|
||||
@@ -282,7 +304,8 @@ static int opFDIVRP(uint32_t fetchdat)
|
||||
x87_div(ST(fetchdat & 7), ST(0), ST(fetchdat & 7));
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fdiv) : (x87_timings.fdiv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fdiv) : (x87_concurrency.fdiv * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -292,7 +315,8 @@ static int opFMUL(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = ST(0) * ST(fetchdat & 7);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fmul) : (x87_concurrency.fmul * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFMULr(uint32_t fetchdat)
|
||||
@@ -301,7 +325,8 @@ static int opFMULr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(fetchdat & 7) = ST(0) * ST(fetchdat & 7);
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fmul) : (x87_concurrency.fmul * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFMULP(uint32_t fetchdat)
|
||||
@@ -311,7 +336,8 @@ static int opFMULP(uint32_t fetchdat)
|
||||
ST(fetchdat & 7) = ST(0) * ST(fetchdat & 7);
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fmul) : (x87_timings.fmul * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fmul) : (x87_concurrency.fmul * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -321,7 +347,8 @@ static int opFSUB(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = ST(0) - ST(fetchdat & 7);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFSUBr(uint32_t fetchdat)
|
||||
@@ -330,7 +357,8 @@ static int opFSUBr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(fetchdat & 7) = ST(fetchdat & 7) - ST(0);
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFSUBP(uint32_t fetchdat)
|
||||
@@ -340,7 +368,8 @@ static int opFSUBP(uint32_t fetchdat)
|
||||
ST(fetchdat & 7) = ST(fetchdat & 7) - ST(0);
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -350,7 +379,8 @@ static int opFSUBR(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = ST(fetchdat & 7) - ST(0);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFSUBRr(uint32_t fetchdat)
|
||||
@@ -359,7 +389,8 @@ static int opFSUBRr(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(fetchdat & 7) = ST(0) - ST(fetchdat & 7);
|
||||
FP_TAG_VALID_F;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFSUBRP(uint32_t fetchdat)
|
||||
@@ -369,7 +400,8 @@ static int opFSUBRP(uint32_t fetchdat)
|
||||
ST(fetchdat & 7) = ST(0) - ST(fetchdat & 7);
|
||||
FP_TAG_VALID_F;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fadd) : (x87_timings.fadd * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fadd) : (x87_concurrency.fadd * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -380,7 +412,8 @@ static int opFUCOM(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
cpu_state.npxs &= ~(C0|C2|C3);
|
||||
cpu_state.npxs |= x87_ucompare(ST(0), ST(fetchdat & 7));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fucom) : (x87_concurrency.fucom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -391,7 +424,8 @@ static int opFUCOMP(uint32_t fetchdat)
|
||||
cpu_state.npxs &= ~(C0|C2|C3);
|
||||
cpu_state.npxs |= x87_ucompare(ST(0), ST(fetchdat & 7));
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fucom) : (x87_concurrency.fucom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -403,7 +437,8 @@ static int opFUCOMI(uint32_t fetchdat)
|
||||
cpu_state.flags &= ~(Z_FLAG | P_FLAG | C_FLAG);
|
||||
if (ST(0) == ST(fetchdat & 7)) cpu_state.flags |= Z_FLAG;
|
||||
else if (ST(0) < ST(fetchdat & 7)) cpu_state.flags |= C_FLAG;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fucom) : (x87_concurrency.fucom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
static int opFUCOMIP(uint32_t fetchdat)
|
||||
@@ -415,7 +450,8 @@ static int opFUCOMIP(uint32_t fetchdat)
|
||||
if (ST(0) == ST(fetchdat & 7)) cpu_state.flags |= Z_FLAG;
|
||||
else if (ST(0) < ST(fetchdat & 7)) cpu_state.flags |= C_FLAG;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fucom) : (x87_timings.fucom * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fucom) : (x87_concurrency.fucom * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,8 @@ static int opFILDiw_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
temp = geteaw(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)temp);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_16) : (x87_timings.fild_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_16) : (x87_timings.fild_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_16) : (x87_concurrency.fild_16 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -35,7 +36,8 @@ static int opFILDiw_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
temp = geteaw(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)temp);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_16) : (x87_timings.fild_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_16) : (x87_timings.fild_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_16) : (x87_concurrency.fild_16 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -46,7 +48,8 @@ static int opFISTiw_a16(uint32_t fetchdat)
|
||||
fetch_ea_16(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(x87_fround16(ST(0)));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_16) : (x87_concurrency.fist_16 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -56,7 +59,8 @@ static int opFISTiw_a32(uint32_t fetchdat)
|
||||
fetch_ea_32(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(x87_fround16(ST(0)));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_16) : (x87_concurrency.fist_16 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -68,7 +72,8 @@ static int opFISTPiw_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(x87_fround16(ST(0))); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_16) : (x87_concurrency.fist_16 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -79,7 +84,8 @@ static int opFISTPiw_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(x87_fround16(ST(0))); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_16) : (x87_timings.fist_16 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_16) : (x87_concurrency.fist_16 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -95,7 +101,8 @@ static int opFILDiq_a16(uint32_t fetchdat)
|
||||
cpu_state.MM[cpu_state.TOP&7].q = temp64;
|
||||
FP_TAG_DEFAULT;
|
||||
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_64) : (x87_timings.fild_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_64) : (x87_timings.fild_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_64) : (x87_concurrency.fild_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -110,7 +117,8 @@ static int opFILDiq_a32(uint32_t fetchdat)
|
||||
cpu_state.MM[cpu_state.TOP&7].q = temp64;
|
||||
FP_TAG_DEFAULT;
|
||||
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_64) : (x87_timings.fild_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_64) : (x87_timings.fild_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_64) : (x87_concurrency.fild_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -139,7 +147,8 @@ static int FBSTP_a16(uint32_t fetchdat)
|
||||
if (ST(0) < 0.0) tempc |= 0x80;
|
||||
writememb(easeg, cpu_state.eaaddr + 9, tempc); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fbstp) : (x87_timings.fbstp * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fbstp) : (x87_timings.fbstp * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fbstp) : (x87_concurrency.fbstp * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -167,7 +176,7 @@ static int FBSTP_a32(uint32_t fetchdat)
|
||||
if (ST(0) < 0.0) tempc |= 0x80;
|
||||
writememb(easeg, cpu_state.eaaddr + 9, tempc); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fbstp) : (x87_timings.fbstp * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fbstp) : (x87_timings.fbstp * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -184,7 +193,8 @@ static int FISTPiq_a16(uint32_t fetchdat)
|
||||
temp64 = x87_fround(ST(0));
|
||||
seteaq(temp64); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_64) : (x87_timings.fist_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_64) : (x87_timings.fist_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_64) : (x87_concurrency.fist_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -200,7 +210,8 @@ static int FISTPiq_a32(uint32_t fetchdat)
|
||||
temp64 = x87_fround(ST(0));
|
||||
seteaq(temp64); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_64) : (x87_timings.fist_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_64) : (x87_timings.fist_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_64) : (x87_concurrency.fist_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -213,7 +224,8 @@ static int opFILDil_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
templ = geteal(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)templ);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_32) : (x87_timings.fild_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_32) : (x87_timings.fild_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_32) : (x87_concurrency.fild_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -225,7 +237,8 @@ static int opFILDil_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
templ = geteal(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)templ);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fild_32) : (x87_timings.fild_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fild_32) : (x87_timings.fild_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fild_32) : (x87_concurrency.fild_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -236,7 +249,8 @@ static int opFISTil_a16(uint32_t fetchdat)
|
||||
fetch_ea_16(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteal(x87_fround32(ST(0)));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_32) : (x87_concurrency.fist_32 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -246,7 +260,8 @@ static int opFISTil_a32(uint32_t fetchdat)
|
||||
fetch_ea_32(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteal(x87_fround32(ST(0)));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_32) : (x87_concurrency.fist_32 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -258,7 +273,8 @@ static int opFISTPil_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteal(x87_fround32(ST(0))); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_32) : (x87_concurrency.fist_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -269,7 +285,8 @@ static int opFISTPil_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteal(x87_fround32(ST(0))); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fist_32) : (x87_timings.fist_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fist_32) : (x87_concurrency.fist_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -282,7 +299,8 @@ static int opFLDe_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
t=x87_ld80(); if (cpu_state.abrt) return 1;
|
||||
x87_push(t);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_80) : (x87_concurrency.fld_80 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -294,7 +312,8 @@ static int opFLDe_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
t=x87_ld80(); if (cpu_state.abrt) return 1;
|
||||
x87_push(t);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_80) : (x87_concurrency.fld_80 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -306,7 +325,8 @@ static int opFSTPe_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
x87_st80(ST(0)); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_80) : (x87_concurrency.fld_80 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -317,7 +337,8 @@ static int opFSTPe_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
x87_st80(ST(0)); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_80) : (x87_timings.fld_80 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_80) : (x87_concurrency.fld_80 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -330,7 +351,8 @@ static int opFLDd_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
t.i = geteaq(); if (cpu_state.abrt) return 1;
|
||||
x87_push(t.d);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_64) : (x87_timings.fld_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_64) : (x87_timings.fld_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_64) : (x87_concurrency.fld_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -342,7 +364,8 @@ static int opFLDd_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
t.i = geteaq(); if (cpu_state.abrt) return 1;
|
||||
x87_push(t.d);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_64) : (x87_timings.fld_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_64) : (x87_timings.fld_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_64) : (x87_concurrency.fld_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -355,7 +378,8 @@ static int opFSTd_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
t.d = ST(0);
|
||||
seteaq(t.i);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_64) : (x87_concurrency.fst_64 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -367,7 +391,8 @@ static int opFSTd_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
t.d = ST(0);
|
||||
seteaq(t.i);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_64) : (x87_concurrency.fst_64 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -381,7 +406,8 @@ static int opFSTPd_a16(uint32_t fetchdat)
|
||||
t.d = ST(0);
|
||||
seteaq(t.i); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_64) : (x87_concurrency.fst_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -394,7 +420,8 @@ static int opFSTPd_a32(uint32_t fetchdat)
|
||||
t.d = ST(0);
|
||||
seteaq(t.i); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_64) : (x87_timings.fst_64 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_64) : (x87_concurrency.fst_64 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -407,7 +434,8 @@ static int opFLDs_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
ts.i = geteal(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)ts.s);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -419,7 +447,8 @@ static int opFLDs_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_READ(cpu_state.ea_seg);
|
||||
ts.i = geteal(); if (cpu_state.abrt) return 1;
|
||||
x87_push((double)ts.s);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -432,7 +461,8 @@ static int opFSTs_a16(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
ts.s = (float)ST(0);
|
||||
seteal(ts.i);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -444,7 +474,8 @@ static int opFSTs_a32(uint32_t fetchdat)
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
ts.s = (float)ST(0);
|
||||
seteal(ts.i);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -458,7 +489,8 @@ static int opFSTPs_a16(uint32_t fetchdat)
|
||||
ts.s = (float)ST(0);
|
||||
seteal(ts.i); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -471,7 +503,8 @@ static int opFSTPs_a32(uint32_t fetchdat)
|
||||
ts.s = (float)ST(0);
|
||||
seteal(ts.i); if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst_32) : (x87_timings.fst_32 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst_32) : (x87_concurrency.fst_32 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -15,7 +15,8 @@ static int opFSTSW_AX(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
AX = cpu_state.npxs;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstcw_sw) : (x87_concurrency.fstcw_sw * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -25,7 +26,8 @@ static int opFNOP(uint32_t fetchdat)
|
||||
{
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fnop) : (x87_timings.fnop * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fnop) : (x87_timings.fnop * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fnop) : (x87_concurrency.fnop * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -34,7 +36,8 @@ static int opFCLEX(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
cpu_state.npxs &= 0xff00;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fnop) : (x87_timings.fnop * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fnop) : (x87_timings.fnop * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fnop) : (x87_concurrency.fnop * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -58,7 +61,8 @@ static int opFINIT(uint32_t fetchdat)
|
||||
#endif
|
||||
cpu_state.TOP = 0;
|
||||
cpu_state.ismmx = 0;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.finit) : (x87_timings.finit * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.finit) : (x87_timings.finit * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.finit) : (x87_concurrency.finit * cpu_multi));
|
||||
CPU_BLOCK_END();
|
||||
return 0;
|
||||
}
|
||||
@@ -73,7 +77,8 @@ static int opFFREE(uint32_t fetchdat)
|
||||
#else
|
||||
cpu_state.tag[(cpu_state.TOP + fetchdat) & 7] = 3;
|
||||
#endif
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.ffree) : (x87_timings.ffree * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.ffree) : (x87_timings.ffree * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.ffree) : (x87_concurrency.ffree * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -83,7 +88,8 @@ static int opFFREEP(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
cpu_state.tag[(cpu_state.TOP + fetchdat) & 7] = 3; if (cpu_state.abrt) return 1;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.ffree) : (x87_timings.ffree * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.ffree) : (x87_timings.ffree * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.ffree) : (x87_concurrency.ffree * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -93,7 +99,8 @@ static int opFST(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(fetchdat & 7) = ST(0);
|
||||
cpu_state.tag[(cpu_state.TOP + fetchdat) & 7] = cpu_state.tag[cpu_state.TOP & 7];
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst) : (x87_timings.fst * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst) : (x87_timings.fst * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst) : (x87_concurrency.fst * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -104,7 +111,8 @@ static int opFSTP(uint32_t fetchdat)
|
||||
ST(fetchdat & 7) = ST(0);
|
||||
cpu_state.tag[(cpu_state.TOP + fetchdat) & 7] = cpu_state.tag[cpu_state.TOP & 7];
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fst) : (x87_timings.fst * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fst) : (x87_timings.fst * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fst) : (x87_concurrency.fst * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -160,7 +168,8 @@ static int FSTOR()
|
||||
#endif
|
||||
cpu_state.ismmx = 1;
|
||||
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.frstor) : (x87_timings.frstor * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.frstor) : (x87_timings.frstor * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.frstor) : (x87_concurrency.frstor * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
static int opFSTOR_a16(uint32_t fetchdat)
|
||||
@@ -330,7 +339,8 @@ static int FSAVE()
|
||||
cpu_state.TOP = 0;
|
||||
cpu_state.ismmx = 0;
|
||||
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fsave) : (x87_timings.fsave * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fsave) : (x87_timings.fsave * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fsave) : (x87_concurrency.fsave * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
static int opFSAVE_a16(uint32_t fetchdat)
|
||||
@@ -358,7 +368,8 @@ static int opFSTSW_a16(uint32_t fetchdat)
|
||||
fetch_ea_16(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw((cpu_state.npxs & 0xC7FF) | ((cpu_state.TOP & 7) << 11));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstcw_sw) : (x87_concurrency.fstcw_sw * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -368,7 +379,8 @@ static int opFSTSW_a32(uint32_t fetchdat)
|
||||
fetch_ea_32(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw((cpu_state.npxs & 0xC7FF) | ((cpu_state.TOP & 7) << 11));
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstcw_sw) : (x87_concurrency.fstcw_sw * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -386,7 +398,8 @@ static int opFLD(uint32_t fetchdat)
|
||||
x87_push(ST(fetchdat&7));
|
||||
cpu_state.tag[cpu_state.TOP&7] = old_tag;
|
||||
cpu_state.MM[cpu_state.TOP&7].q = old_i64;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld) : (x87_timings.fld * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld) : (x87_timings.fld * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld) : (x87_concurrency.fld * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -407,7 +420,8 @@ static int opFXCH(uint32_t fetchdat)
|
||||
cpu_state.MM[cpu_state.TOP&7].q = cpu_state.MM[(cpu_state.TOP + fetchdat) & 7].q;
|
||||
cpu_state.MM[(cpu_state.TOP + fetchdat) & 7].q = old_i64;
|
||||
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fxch) : (x87_timings.fxch * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fxch) : (x87_timings.fxch * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fxch) : (x87_concurrency.fxch * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -417,7 +431,8 @@ static int opFCHS(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = -ST(0);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fchs) : (x87_timings.fchs * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fchs) : (x87_timings.fchs * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fchs) : (x87_concurrency.fchs * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -427,7 +442,8 @@ static int opFABS(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = fabs(ST(0));
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fabs) : (x87_timings.fabs * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fabs) : (x87_timings.fabs * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fabs) : (x87_concurrency.fabs * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -438,7 +454,8 @@ static int opFTST(uint32_t fetchdat)
|
||||
cpu_state.npxs &= ~(C0|C2|C3);
|
||||
if (ST(0) == 0.0) cpu_state.npxs |= C3;
|
||||
else if (ST(0) < 0.0) cpu_state.npxs |= C0;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.ftst) : (x87_timings.ftst * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.ftst) : (x87_timings.ftst * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.ftst) : (x87_concurrency.ftst * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -455,7 +472,8 @@ static int opFXAM(uint32_t fetchdat)
|
||||
else if (ST(0) == 0.0) cpu_state.npxs |= C3;
|
||||
else cpu_state.npxs |= C2;
|
||||
if (ST(0) < 0.0) cpu_state.npxs |= C1;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fxam) : (x87_timings.fxam * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fxam) : (x87_timings.fxam * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fxam) : (x87_concurrency.fxam * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -464,7 +482,8 @@ static int opFLD1(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push(1.0);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_z1) : (x87_timings.fld_z1 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_z1) : (x87_timings.fld_z1 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_z1) : (x87_concurrency.fld_z1 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -473,7 +492,8 @@ static int opFLDL2T(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push(3.3219280948873623);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_const) : (x87_concurrency.fld_const * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -482,7 +502,8 @@ static int opFLDL2E(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push(1.4426950408889634);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_const) : (x87_concurrency.fld_const * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -491,7 +512,8 @@ static int opFLDPI(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push(3.141592653589793);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_const) : (x87_concurrency.fld_const * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -500,7 +522,8 @@ static int opFLDEG2(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push(0.3010299956639812);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_const) : (x87_concurrency.fld_const * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -509,7 +532,8 @@ static int opFLDLN2(uint32_t fetchdat)
|
||||
FP_ENTER();
|
||||
cpu_state.pc++;
|
||||
x87_push_u64(0x3fe62e42fefa39f0ull);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_const) : (x87_timings.fld_const * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_const) : (x87_concurrency.fld_const * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -519,7 +543,8 @@ static int opFLDZ(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
x87_push(0.0);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fld_z1) : (x87_timings.fld_z1 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fld_z1) : (x87_timings.fld_z1 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fld_z1) : (x87_concurrency.fld_z1 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -529,7 +554,8 @@ static int opF2XM1(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = pow(2.0, ST(0)) - 1.0;
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.f2xm1) : (x87_timings.f2xm1 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.f2xm1) : (x87_timings.f2xm1 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.f2xm1) : (x87_concurrency.f2xm1 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -540,7 +566,8 @@ static int opFYL2X(uint32_t fetchdat)
|
||||
ST(1) = ST(1) * (log(ST(0)) / log(2.0));
|
||||
FP_TAG_VALID_N;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fyl2x) : (x87_timings.fyl2x * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fyl2x) : (x87_timings.fyl2x * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fyl2x) : (x87_concurrency.fyl2x * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -551,7 +578,8 @@ static int opFYL2XP1(uint32_t fetchdat)
|
||||
ST(1) = ST(1) * (log1p(ST(0)) / log(2.0));
|
||||
FP_TAG_VALID_N;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fyl2xp1) : (x87_timings.fyl2xp1 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fyl2xp1) : (x87_timings.fyl2xp1 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fyl2xp1) : (x87_concurrency.fyl2xp1 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -563,7 +591,8 @@ static int opFPTAN(uint32_t fetchdat)
|
||||
FP_TAG_VALID;
|
||||
x87_push(1.0);
|
||||
cpu_state.npxs &= ~C2;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fptan) : (x87_timings.fptan * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fptan) : (x87_timings.fptan * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fptan) : (x87_concurrency.fptan * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -574,7 +603,8 @@ static int opFPATAN(uint32_t fetchdat)
|
||||
ST(1) = atan2(ST(1), ST(0));
|
||||
FP_TAG_VALID_N;
|
||||
x87_pop();
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fpatan) : (x87_timings.fpatan * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fpatan) : (x87_timings.fpatan * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fpatan) : (x87_concurrency.fpatan * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -587,7 +617,8 @@ static int opFDECSTP(uint32_t fetchdat)
|
||||
#else
|
||||
cpu_state.TOP = (cpu_state.TOP - 1) & 7;
|
||||
#endif
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fincdecstp) : (x87_timings.fincdecstp * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fincdecstp) : (x87_timings.fincdecstp * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fincdecstp) : (x87_concurrency.fincdecstp * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -600,7 +631,8 @@ static int opFINCSTP(uint32_t fetchdat)
|
||||
#else
|
||||
cpu_state.TOP = (cpu_state.TOP + 1) & 7;
|
||||
#endif
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fincdecstp) : (x87_timings.fincdecstp * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fincdecstp) : (x87_timings.fincdecstp * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fincdecstp) : (x87_concurrency.fincdecstp * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -616,7 +648,8 @@ static int opFPREM(uint32_t fetchdat)
|
||||
if (temp64 & 4) cpu_state.npxs|=C0;
|
||||
if (temp64 & 2) cpu_state.npxs|=C3;
|
||||
if (temp64 & 1) cpu_state.npxs|=C1;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fprem) : (x87_timings.fprem * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fprem) : (x87_timings.fprem * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fprem) : (x87_concurrency.fprem * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -632,7 +665,8 @@ static int opFPREM1(uint32_t fetchdat)
|
||||
if (temp64 & 4) cpu_state.npxs|=C0;
|
||||
if (temp64 & 2) cpu_state.npxs|=C3;
|
||||
if (temp64 & 1) cpu_state.npxs|=C1;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fprem1) : (x87_timings.fprem1 * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fprem1) : (x87_timings.fprem1 * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fprem1) : (x87_concurrency.fprem1 * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -643,7 +677,8 @@ static int opFSQRT(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = sqrt(ST(0));
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fsqrt) : (x87_timings.fsqrt * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fsqrt) : (x87_timings.fsqrt * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fsqrt) : (x87_concurrency.fsqrt * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -658,7 +693,8 @@ static int opFSINCOS(uint32_t fetchdat)
|
||||
FP_TAG_VALID;
|
||||
x87_push(cos(td));
|
||||
cpu_state.npxs &= ~C2;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fsincos) : (x87_timings.fsincos * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fsincos) : (x87_timings.fsincos * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fsincos) : (x87_concurrency.fsincos * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -669,7 +705,8 @@ static int opFRNDINT(uint32_t fetchdat)
|
||||
cpu_state.pc++;
|
||||
ST(0) = (double)x87_fround(ST(0));
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.frndint) : (x87_timings.frndint * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.frndint) : (x87_timings.frndint * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.frndint) : (x87_concurrency.frndint * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -682,7 +719,8 @@ static int opFSCALE(uint32_t fetchdat)
|
||||
if(ST(0) != 0.0)
|
||||
ST(0) = ST(0) * pow(2.0, (double)temp64);
|
||||
FP_TAG_VALID;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fscale) : (x87_timings.fscale * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fscale) : (x87_timings.fscale * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fscale) : (x87_concurrency.fscale * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -694,7 +732,8 @@ static int opFSIN(uint32_t fetchdat)
|
||||
ST(0) = sin(ST(0));
|
||||
FP_TAG_VALID;
|
||||
cpu_state.npxs &= ~C2;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fsin_cos) : (x87_timings.fsin_cos * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fsin_cos) : (x87_timings.fsin_cos * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fsin_cos) : (x87_concurrency.fsin_cos * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -705,7 +744,8 @@ static int opFCOS(uint32_t fetchdat)
|
||||
ST(0) = cos(ST(0));
|
||||
FP_TAG_VALID;
|
||||
cpu_state.npxs &= ~C2;
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fsin_cos) : (x87_timings.fsin_cos * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fsin_cos) : (x87_timings.fsin_cos * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fsin_cos) : (x87_concurrency.fsin_cos * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -733,7 +773,8 @@ static int FLDENV()
|
||||
cpu_state.TOP = (cpu_state.npxs >> 11) & 7;
|
||||
break;
|
||||
}
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fldenv) : (x87_timings.fldenv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fldenv) : (x87_timings.fldenv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fldenv) : (x87_concurrency.fldenv * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
|
||||
@@ -766,7 +807,8 @@ static int opFLDCW_a16(uint32_t fetchdat)
|
||||
if (cpu_state.abrt) return 1;
|
||||
cpu_state.npxc = tempw;
|
||||
codegen_set_rounding_mode((cpu_state.npxc >> 10) & 3);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fldcw) : (x87_timings.fldcw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fldcw) : (x87_timings.fldcw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fldcw) : (x87_concurrency.fldcw * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -780,7 +822,8 @@ static int opFLDCW_a32(uint32_t fetchdat)
|
||||
if (cpu_state.abrt) return 1;
|
||||
cpu_state.npxc = tempw;
|
||||
codegen_set_rounding_mode((cpu_state.npxc >> 10) & 3);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fldcw) : (x87_timings.fldcw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fldcw) : (x87_timings.fldcw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fldcw) : (x87_concurrency.fldcw * cpu_multi));
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -826,7 +869,8 @@ static int FSTENV()
|
||||
writememl(easeg,cpu_state.eaaddr+24,x87_op_seg);
|
||||
break;
|
||||
}
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstenv) : (x87_timings.fstenv * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstenv) : (x87_timings.fstenv * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstenv) : (x87_concurrency.fstenv * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
|
||||
@@ -855,7 +899,8 @@ static int opFSTCW_a16(uint32_t fetchdat)
|
||||
fetch_ea_16(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(cpu_state.npxc);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstenv) : (x87_concurrency.fstenv * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#ifndef FPU_8087
|
||||
@@ -865,7 +910,8 @@ static int opFSTCW_a32(uint32_t fetchdat)
|
||||
fetch_ea_32(fetchdat);
|
||||
SEG_CHECK_WRITE(cpu_state.ea_seg);
|
||||
seteaw(cpu_state.npxc);
|
||||
CLOCK_CYCLES((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CLOCK_CYCLES_FPU((fpu_type >= FPU_487SX) ? (x87_timings.fstcw_sw) : (x87_timings.fstcw_sw * cpu_multi));
|
||||
CONCURRENCY_CYCLES((fpu_type >= FPU_487SX) ? (x87_concurrency.fstcw_sw) : (x87_concurrency.fstcw_sw * cpu_multi));
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
#endif
|
||||
@@ -882,7 +928,7 @@ static int opFSTCW_a32(uint32_t fetchdat)
|
||||
cpu_state.MM[cpu_state.TOP&7].q = cpu_state.MM[(cpu_state.TOP + fetchdat) & 7].q; \
|
||||
ST(0) = ST(fetchdat & 7); \
|
||||
} \
|
||||
CLOCK_CYCLES(4); \
|
||||
CLOCK_CYCLES_FPU(4); \
|
||||
return 0; \
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "x87_timings.h"
|
||||
|
||||
x87_timings_t x87_timings;
|
||||
x87_timings_t x87_concurrency;
|
||||
|
||||
const x87_timings_t x87_timings_8087 =
|
||||
{
|
||||
@@ -313,3 +314,157 @@ const x87_timings_t x87_timings_486 =
|
||||
.fyl2x = (196 + 329) / 2,
|
||||
.fyl2xp1 = (171 + 326) / 2
|
||||
};
|
||||
|
||||
/* this should be used for FPUs with no concurrency.
|
||||
some pre-486DX Cyrix FPUs reportedly are like this. */
|
||||
const x87_timings_t x87_concurrency_none =
|
||||
{
|
||||
.f2xm1 = 0,
|
||||
.fabs = 0,
|
||||
.fadd = 0,
|
||||
.fadd_32 = 0,
|
||||
.fadd_64 = 0,
|
||||
.fbld = 0,
|
||||
.fbstp = 0,
|
||||
.fchs = 0,
|
||||
.fclex = 0,
|
||||
.fcom = 0,
|
||||
.fcom_32 = 0,
|
||||
.fcom_64 = 0,
|
||||
.fcos = 0,
|
||||
.fincdecstp = 0,
|
||||
.fdisi_eni = 0,
|
||||
.fdiv = 0,
|
||||
.fdiv_32 = 0,
|
||||
.fdiv_64 = 0,
|
||||
.ffree = 0,
|
||||
.fadd_i16 = 0,
|
||||
.fadd_i32 = 0,
|
||||
.fcom_i16 = 0,
|
||||
.fcom_i32 = 0,
|
||||
.fdiv_i16 = 0,
|
||||
.fdiv_i32 = 0,
|
||||
.fild_16 = 0,
|
||||
.fild_32 = 0,
|
||||
.fild_64 = 0,
|
||||
.fmul_i16 = 0,
|
||||
.fmul_i32 = 0,
|
||||
.finit = 0,
|
||||
.fist_16 = 0,
|
||||
.fist_32 = 0,
|
||||
.fist_64 = 0,
|
||||
.fld = 0,
|
||||
.fld_32 = 0,
|
||||
.fld_64 = 0,
|
||||
.fld_80 = 0,
|
||||
.fld_z1 = 0,
|
||||
.fld_const = 0,
|
||||
.fldcw = 0,
|
||||
.fldenv = 0,
|
||||
.fmul = 0,
|
||||
.fmul_32 = 0,
|
||||
.fmul_64 = 0,
|
||||
.fnop = 0,
|
||||
.fpatan = 0,
|
||||
.fprem = 0,
|
||||
.fprem1 = 0,
|
||||
.fptan = 0,
|
||||
.frndint = 0,
|
||||
.frstor = 0,
|
||||
.fsave = 0,
|
||||
.fscale = 0,
|
||||
.fsetpm = 0,
|
||||
.fsin_cos = 0,
|
||||
.fsincos = 0,
|
||||
.fsqrt = 0,
|
||||
.fst = 0,
|
||||
.fst_32 = 0,
|
||||
.fst_64 = 0,
|
||||
.fst_80 = 0,
|
||||
.fstcw_sw = 0,
|
||||
.fstenv = 0,
|
||||
.ftst = 0,
|
||||
.fucom = 0,
|
||||
.fwait = 0,
|
||||
.fxam = 0,
|
||||
.fxch = 0,
|
||||
.fxtract = 0,
|
||||
.fyl2x = 0,
|
||||
.fyl2xp1 = 0,
|
||||
};
|
||||
|
||||
const x87_timings_t x87_concurrency_486 =
|
||||
{
|
||||
.f2xm1 = 2,
|
||||
.fabs = 0,
|
||||
.fadd = 7,
|
||||
.fadd_32 = 7,
|
||||
.fadd_64 = 7,
|
||||
.fbld = 8,
|
||||
.fbstp = 0,
|
||||
.fchs = 0,
|
||||
.fclex = 0,
|
||||
.fcom = 1,
|
||||
.fcom_32 = 1,
|
||||
.fcom_64 = 1,
|
||||
.fcos = 2,
|
||||
.fincdecstp = 0,
|
||||
.fdisi_eni = 0,
|
||||
.fdiv = 70,
|
||||
.fdiv_32 = 70,
|
||||
.fdiv_64 = 70,
|
||||
.ffree = 0,
|
||||
.fadd_i16 = 7,
|
||||
.fadd_i32 = 7,
|
||||
.fcom_i16 = 1,
|
||||
.fcom_i32 = 1,
|
||||
.fdiv_i16 = 70,
|
||||
.fdiv_i32 = 70,
|
||||
.fild_16 = 4,
|
||||
.fild_32 = 4,
|
||||
.fild_64 = 8,
|
||||
.fmul_i16 = 8,
|
||||
.fmul_i32 = 8,
|
||||
.finit = 0,
|
||||
.fist_16 = 0,
|
||||
.fist_32 = 0,
|
||||
.fist_64 = 0,
|
||||
.fld = 0,
|
||||
.fld_32 = 0,
|
||||
.fld_64 = 0,
|
||||
.fld_80 = 0,
|
||||
.fld_z1 = 0,
|
||||
.fld_const = 2,
|
||||
.fldcw = 0,
|
||||
.fldenv = 0,
|
||||
.fmul = 13,
|
||||
.fmul_32 = 8,
|
||||
.fmul_64 = 11,
|
||||
.fnop = 0,
|
||||
.fpatan = 5,
|
||||
.fprem = 2,
|
||||
.fprem1 = 6,
|
||||
.fptan = 70,
|
||||
.frndint = 0,
|
||||
.frstor = 0,
|
||||
.fsave = 0,
|
||||
.fscale = 2,
|
||||
.fsetpm = 0,
|
||||
.fsin_cos = 2,
|
||||
.fsincos = 2,
|
||||
.fsqrt = 70,
|
||||
.fst = 0,
|
||||
.fst_32 = 0,
|
||||
.fst_64 = 0,
|
||||
.fst_80 = 0,
|
||||
.fstcw_sw = 0,
|
||||
.fstenv = 0,
|
||||
.ftst = 1,
|
||||
.fucom = 1,
|
||||
.fwait = 0,
|
||||
.fxam = 0,
|
||||
.fxch = 0,
|
||||
.fxtract = 4,
|
||||
.fyl2x = 13,
|
||||
.fyl2xp1 = 13,
|
||||
};
|
||||
@@ -53,4 +53,7 @@ extern const x87_timings_t x87_timings_287;
|
||||
extern const x87_timings_t x87_timings_387;
|
||||
extern const x87_timings_t x87_timings_486;
|
||||
|
||||
extern x87_timings_t x87_timings;
|
||||
extern const x87_timings_t x87_concurrency_486;
|
||||
|
||||
extern x87_timings_t x87_timings;
|
||||
extern x87_timings_t x87_concurrency;
|
||||
@@ -21,4 +21,16 @@ add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c h
|
||||
|
||||
if(LASERXT)
|
||||
target_compile_definitions(dev PRIVATE USE_LASERXT)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ISAMEM_RAMPAGE)
|
||||
target_compile_definitions(dev PRIVATE USE_ISAMEM_RAMPAGE)
|
||||
endif()
|
||||
|
||||
if(ISAMEM_IAB)
|
||||
target_compile_definitions(dev PRIVATE USE_ISAMEM_IAB)
|
||||
endif()
|
||||
|
||||
if(ISAMEM_BRAT)
|
||||
target_compile_definitions(dev PRIVATE USE_ISAMEM_BRAT)
|
||||
endif()
|
||||
|
||||
@@ -54,15 +54,29 @@ ibm_5161_in(uint16_t port, void *priv)
|
||||
ret = dev->regs[port & 0x0007];
|
||||
|
||||
switch (port) {
|
||||
case 0x211:
|
||||
case 0x215:
|
||||
case 0x210: /* Write to latch expansion bus data (ED0-ED7) */
|
||||
/* Read to verify expansion bus data (ED0-ED7) */
|
||||
break;
|
||||
case 0x214: /* Write to latch data bus bits (DO - 07) */
|
||||
/* Read data bus bits (DO - D7) */
|
||||
break;
|
||||
case 0x211: /* Read high-order address bits (A8 - A 15) */
|
||||
case 0x215: /* Read high-order address bits (A8 - A 15) */
|
||||
ret = (get_last_addr() >> 8) & 0xff;
|
||||
break;
|
||||
case 0x212:
|
||||
case 0x216:
|
||||
case 0x212: /* Read low-order address bits (A0 - A7) */
|
||||
case 0x216: /* Read low-order address bits (A0 - A7) */
|
||||
ret = get_last_addr() & 0xff;
|
||||
break;
|
||||
case 0x213:
|
||||
case 0x213: /* Write 00 to disable expansion unit */
|
||||
/* Write 01 to enable expansion unit */
|
||||
/* Read status of expansion unit
|
||||
00 = enable/disable
|
||||
01 = wait-state request flag
|
||||
02-03 = not used
|
||||
04-07 = switch position
|
||||
1 = Off
|
||||
0 =On */
|
||||
ret = dev->regs[3] & 0x01;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -84,6 +84,17 @@
|
||||
|
||||
#include "cpu.h"
|
||||
|
||||
#define ISAMEM_IBMXT_CARD 0
|
||||
#define ISAMEM_GENXT_CARD 1
|
||||
#define ISAMEM_IBMAT_CARD 2
|
||||
#define ISAMEM_GENAT_CARD 3
|
||||
#define ISAMEM_P5PAK_CARD 4
|
||||
#define ISAMEM_A6PAK_CARD 5
|
||||
#define ISAMEM_EMS5150_CARD 6
|
||||
#define ISAMEM_EV159_CARD 10
|
||||
#define ISAMEM_RAMPAGEXT_CARD 11
|
||||
#define ISAMEM_ABOVEBOARD_CARD 12
|
||||
#define ISAMEM_BRAT_CARD 13
|
||||
|
||||
#define ISAMEM_DEBUG 0
|
||||
|
||||
@@ -95,6 +106,9 @@
|
||||
#define EMS_PGSIZE (16 << 10) /* one page is this big */
|
||||
#define EMS_MAXPAGE 4 /* number of viewport pages */
|
||||
|
||||
#define EXTRAM_CONVENTIONAL 0
|
||||
#define EXTRAM_HIGH 1
|
||||
#define EXTRAM_XMS 2
|
||||
|
||||
typedef struct {
|
||||
int8_t enabled; /* 1=ENABLED */
|
||||
@@ -398,28 +412,31 @@ isamem_init(const device_t *info)
|
||||
/* Do per-board initialization. */
|
||||
tot = 0;
|
||||
switch(dev->board) {
|
||||
case 0: /* IBM PC/XT Memory Expansion Card */
|
||||
case 2: /* Paradise Systems 5-PAK */
|
||||
case ISAMEM_IBMXT_CARD: /* IBM PC/XT Memory Expansion Card */
|
||||
case ISAMEM_GENXT_CARD: /* Generic PC/XT Memory Expansion Card */
|
||||
case ISAMEM_P5PAK_CARD: /* Paradise Systems 5-PAK */
|
||||
case ISAMEM_A6PAK_CARD: /* AST SixPakPlus */
|
||||
dev->total_size = device_get_config_int("size");
|
||||
dev->start_addr = device_get_config_int("start");
|
||||
tot = dev->total_size;
|
||||
break;
|
||||
|
||||
case 1: /* IBM PC/AT Memory Expansion Card */
|
||||
case ISAMEM_IBMAT_CARD: /* IBM PC/AT Memory Expansion Card */
|
||||
case ISAMEM_GENAT_CARD: /* Generic PC/AT Memory Expansion Card */
|
||||
dev->total_size = device_get_config_int("size");
|
||||
dev->start_addr = device_get_config_int("start");
|
||||
tot = dev->total_size;
|
||||
dev->flags |= FLAG_WIDE;
|
||||
break;
|
||||
|
||||
case 3: /* Micro Mainframe EMS-5150(T) */
|
||||
case ISAMEM_EMS5150_CARD: /* Micro Mainframe EMS-5150(T) */
|
||||
dev->base_addr = device_get_config_hex16("base");
|
||||
dev->total_size = device_get_config_int("size");
|
||||
dev->frame_addr = 0xD0000;
|
||||
dev->flags |= (FLAG_EMS | FLAG_CONFIG);
|
||||
break;
|
||||
|
||||
case 10: /* Everex EV-159 RAM 3000 */
|
||||
case ISAMEM_EV159_CARD: /* Everex EV-159 RAM 3000 */
|
||||
dev->base_addr = device_get_config_hex16("base");
|
||||
dev->total_size = device_get_config_int("size");
|
||||
dev->start_addr = device_get_config_int("start");
|
||||
@@ -433,7 +450,9 @@ isamem_init(const device_t *info)
|
||||
dev->frame_addr = 0xE0000;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
case ISAMEM_RAMPAGEXT_CARD: /* AST RAMpage/XT */
|
||||
case ISAMEM_ABOVEBOARD_CARD: /* Intel AboveBoard */
|
||||
case ISAMEM_BRAT_CARD: /* BocaRAM/AT */
|
||||
dev->base_addr = device_get_config_hex16("base");
|
||||
dev->total_size = device_get_config_int("size");
|
||||
dev->start_addr = device_get_config_int("start");
|
||||
@@ -496,8 +515,8 @@ dev->frame_addr = 0xE0000;
|
||||
t = tot;
|
||||
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
|
||||
|
||||
dev->ext_ram[0].ptr = ptr;
|
||||
dev->ext_ram[0].base = addr;
|
||||
dev->ext_ram[EXTRAM_CONVENTIONAL].ptr = ptr;
|
||||
dev->ext_ram[EXTRAM_CONVENTIONAL].base = addr;
|
||||
|
||||
/* Create, initialize and enable the low-memory mapping. */
|
||||
mem_mapping_add(&dev->low_mapping, addr, t,
|
||||
@@ -507,7 +526,7 @@ dev->frame_addr = 0xE0000;
|
||||
ram_writeb,
|
||||
(dev->flags&FLAG_WIDE) ? ram_writew : NULL,
|
||||
NULL,
|
||||
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[0]);
|
||||
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[EXTRAM_CONVENTIONAL]);
|
||||
|
||||
/* Tell the memory system this is external RAM. */
|
||||
mem_set_mem_state(addr, t,
|
||||
@@ -531,8 +550,8 @@ dev->frame_addr = 0xE0000;
|
||||
|
||||
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
|
||||
|
||||
dev->ext_ram[1].ptr = ptr;
|
||||
dev->ext_ram[1].base = addr + tot;
|
||||
dev->ext_ram[EXTRAM_HIGH].ptr = ptr;
|
||||
dev->ext_ram[EXTRAM_HIGH].base = addr + tot;
|
||||
|
||||
/* Update and enable the remap. */
|
||||
mem_mapping_set(&ram_remapped_mapping,
|
||||
@@ -540,7 +559,7 @@ dev->frame_addr = 0xE0000;
|
||||
ram_readb, ram_readw, NULL,
|
||||
ram_writeb, ram_writew, NULL,
|
||||
ptr, MEM_MAPPING_EXTERNAL,
|
||||
&dev->ext_ram[1]);
|
||||
&dev->ext_ram[EXTRAM_HIGH]);
|
||||
mem_mapping_disable(&ram_remapped_mapping);
|
||||
|
||||
/* Tell the memory system this is external RAM. */
|
||||
@@ -565,14 +584,14 @@ dev->frame_addr = 0xE0000;
|
||||
t = tot;
|
||||
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
|
||||
|
||||
dev->ext_ram[2].ptr = ptr;
|
||||
dev->ext_ram[2].base = addr;
|
||||
dev->ext_ram[EXTRAM_XMS].ptr = ptr;
|
||||
dev->ext_ram[EXTRAM_XMS].base = addr;
|
||||
|
||||
/* Create, initialize and enable the high-memory mapping. */
|
||||
mem_mapping_add(&dev->high_mapping, addr, t,
|
||||
ram_readb, ram_readw, NULL,
|
||||
ram_writeb, ram_writew, NULL,
|
||||
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[2]);
|
||||
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[EXTRAM_XMS]);
|
||||
|
||||
/* Tell the memory system this is external RAM. */
|
||||
mem_set_mem_state(addr, t, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
||||
@@ -583,6 +602,8 @@ dev->frame_addr = 0xE0000;
|
||||
addr += t;
|
||||
}
|
||||
|
||||
isa_mem_size += dev->total_size - (k >> 10);
|
||||
|
||||
/* If EMS is enabled, use the remainder for EMS. */
|
||||
if (dev->flags & FLAG_EMS) {
|
||||
/* EMS 3.2 cannot have more than 2048KB per board. */
|
||||
@@ -663,7 +684,7 @@ static const device_config_t ibmxt_config[] =
|
||||
},
|
||||
{
|
||||
"start", "Start Address", CONFIG_SPINNER, "", 256, "",
|
||||
{ 0, 640-64, 64 },
|
||||
{ 0, 576, 64 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
@@ -674,23 +695,50 @@ static const device_config_t ibmxt_config[] =
|
||||
static const device_t ibmxt_device = {
|
||||
"IBM PC/XT Memory Expansion",
|
||||
DEVICE_ISA,
|
||||
0,
|
||||
ISAMEM_IBMXT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
ibmxt_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t genericxt_config[] =
|
||||
{
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 16, "",
|
||||
{ 0, 640, 16 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"start", "Start Address", CONFIG_SPINNER, "", 0, "",
|
||||
{ 0, 624, 16 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t genericxt_device = {
|
||||
"Generic PC/XT Memory Expansion",
|
||||
DEVICE_ISA,
|
||||
ISAMEM_GENXT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
genericxt_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t ibmat_config[] =
|
||||
{
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 512, "",
|
||||
{ 0, 4096, 512 },
|
||||
{ 0, 12288, 512 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"start", "Start Address", CONFIG_SPINNER, "", 512, "",
|
||||
{ 0, 16128, 128 },
|
||||
{ 0, 15872, 512 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
@@ -701,13 +749,40 @@ static const device_config_t ibmat_config[] =
|
||||
static const device_t ibmat_device = {
|
||||
"IBM PC/AT Memory Expansion",
|
||||
DEVICE_ISA,
|
||||
1,
|
||||
ISAMEM_IBMAT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
ibmat_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t genericat_config[] =
|
||||
{
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 512, "",
|
||||
{ 0, 16384, 512 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"start", "Start Address", CONFIG_SPINNER, "", 512, "",
|
||||
{ 0, 15872, 128 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t genericat_device = {
|
||||
"Generic PC/AT Memory Expansion",
|
||||
DEVICE_ISA,
|
||||
ISAMEM_GENAT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
genericat_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t p5pak_config[] =
|
||||
{
|
||||
{
|
||||
@@ -728,13 +803,40 @@ static const device_config_t p5pak_config[] =
|
||||
static const device_t p5pak_device = {
|
||||
"Paradise Systems 5-PAK",
|
||||
DEVICE_ISA,
|
||||
2,
|
||||
ISAMEM_P5PAK_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
p5pak_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t a6pak_config[] =
|
||||
{
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 64, "",
|
||||
{ 0, 576, 64 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"start", "Start Address", CONFIG_SPINNER, "", 256, "",
|
||||
{ 64, 512, 64 },
|
||||
{ { 0 } }
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t a6pak_device = {
|
||||
"AST SixPakPlus",
|
||||
DEVICE_ISA,
|
||||
ISAMEM_A6PAK_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
a6pak_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t ems5150_config[] =
|
||||
{
|
||||
{
|
||||
@@ -774,7 +876,7 @@ static const device_config_t ems5150_config[] =
|
||||
static const device_t ems5150_device = {
|
||||
"Micro Mainframe EMS-5150(T)",
|
||||
DEVICE_ISA,
|
||||
3,
|
||||
ISAMEM_EMS5150_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
ems5150_config
|
||||
@@ -877,13 +979,103 @@ static const device_config_t ev159_config[] =
|
||||
static const device_t ev159_device = {
|
||||
"Everex EV-159 RAM 3000 Deluxe",
|
||||
DEVICE_ISA,
|
||||
10,
|
||||
ISAMEM_EV159_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
ev159_config
|
||||
};
|
||||
|
||||
|
||||
#ifdef USE_ISAMEM_BRAT
|
||||
static const device_config_t brat_config[] =
|
||||
{
|
||||
{
|
||||
"base", "Address", CONFIG_HEX16, "", 0x0258, "", { 0 },
|
||||
{
|
||||
{
|
||||
"208H", 0x0208
|
||||
},
|
||||
{
|
||||
"218H", 0x0218
|
||||
},
|
||||
{
|
||||
"258H", 0x0258
|
||||
},
|
||||
{
|
||||
"268H", 0x0268
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"frame", "Frame Address", CONFIG_HEX20, "", 0, "", { 0 },
|
||||
{
|
||||
{
|
||||
"Disabled", 0x00000
|
||||
},
|
||||
{
|
||||
"D000H", 0xD0000
|
||||
},
|
||||
{
|
||||
"E000H", 0xE0000
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"width", "I/O Width", CONFIG_SELECTION, "", 8, "", { 0 },
|
||||
{
|
||||
{
|
||||
"8-bit", 8
|
||||
},
|
||||
{
|
||||
"16-bit", 16
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"speed", "Transfer Speed", CONFIG_SELECTION, "", 0, "", { 0 },
|
||||
{
|
||||
{
|
||||
"Standard", 0
|
||||
},
|
||||
{
|
||||
"High-Speed", 1
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 128,
|
||||
"",
|
||||
{ 0, 8192, 512 },
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t brat_device = {
|
||||
"BocaRAM/AT",
|
||||
DEVICE_ISA,
|
||||
ISAMEM_BRAT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
brat_config
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_ISAMEM_RAMPAGE
|
||||
static const device_config_t rampage_config[] =
|
||||
{
|
||||
@@ -975,10 +1167,10 @@ static const device_config_t rampage_config[] =
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t isamem_rampage_device = {
|
||||
static const device_t rampage_device = {
|
||||
"AST RAMpage/XT",
|
||||
DEVICE_ISA,
|
||||
11,
|
||||
ISAMEM_RAMPAGEXT_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
rampage_config
|
||||
@@ -986,14 +1178,119 @@ static const device_t isamem_rampage_device = {
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_ISAMEM_IAB
|
||||
static const device_config_t iab_config[] =
|
||||
{
|
||||
{
|
||||
"base", "Address", CONFIG_HEX16, "", 0x0258, "", { 0 },
|
||||
{
|
||||
{
|
||||
"208H", 0x0208
|
||||
},
|
||||
{
|
||||
"218H", 0x0218
|
||||
},
|
||||
{
|
||||
"258H", 0x0258
|
||||
},
|
||||
{
|
||||
"268H", 0x0268
|
||||
},
|
||||
{
|
||||
"2A8H", 0x02A8
|
||||
},
|
||||
{
|
||||
"2B8H", 0x02B8
|
||||
},
|
||||
{
|
||||
"2E8H", 0x02E8
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"frame", "Frame Address", CONFIG_HEX20, "", 0, "", { 0 },
|
||||
{
|
||||
{
|
||||
"Disabled", 0x00000
|
||||
},
|
||||
{
|
||||
"C000H", 0xC0000
|
||||
},
|
||||
{
|
||||
"D000H", 0xD0000
|
||||
},
|
||||
{
|
||||
"E000H", 0xE0000
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"width", "I/O Width", CONFIG_SELECTION, "", 8, "", { 0 },
|
||||
{
|
||||
{
|
||||
"8-bit", 8
|
||||
},
|
||||
{
|
||||
"16-bit", 16
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"speed", "Transfer Speed", CONFIG_SELECTION, "", 0, "", { 0 },
|
||||
{
|
||||
{
|
||||
"Standard", 0
|
||||
},
|
||||
{
|
||||
"High-Speed", 1
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"size", "Memory Size", CONFIG_SPINNER, "", 128,
|
||||
"",
|
||||
{ 0, 8192, 128 },
|
||||
{ 0 }
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t iab_device = {
|
||||
"Intel AboveBoard",
|
||||
DEVICE_ISA,
|
||||
ISAMEM_ABOVEBOARD_CARD,
|
||||
isamem_init, isamem_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
iab_config
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
static const struct {
|
||||
const char *internal_name;
|
||||
const device_t *dev;
|
||||
} boards[] = {
|
||||
{ "none", NULL },
|
||||
{ "none", NULL },
|
||||
{ "ibmxt", &ibmxt_device },
|
||||
{ "genericxt", &genericxt_device },
|
||||
{ "ibmat", &ibmat_device },
|
||||
{ "genericat", &genericat_device },
|
||||
{ "p5pak", &p5pak_device },
|
||||
{ "a6pak", &a6pak_device },
|
||||
{ "ems5150", &ems5150_device },
|
||||
{ "ev159", &ev159_device },
|
||||
#ifdef USE_ISAMEM_BRAT
|
||||
@@ -1003,9 +1300,9 @@ static const struct {
|
||||
{ "rampage", &rampage_device },
|
||||
#endif
|
||||
#ifdef USE_ISAMEM_IAB
|
||||
{ "iab", &iab_device },
|
||||
{ "iab", &iab_device },
|
||||
#endif
|
||||
{ "", NULL }
|
||||
{ "", NULL }
|
||||
};
|
||||
|
||||
|
||||
@@ -1014,6 +1311,9 @@ isamem_reset(void)
|
||||
{
|
||||
int k, i;
|
||||
|
||||
/* We explicitly set to zero here or bad things happen */
|
||||
isa_mem_size = 0;
|
||||
|
||||
for (i = 0; i < ISAMEM_MAX; i++) {
|
||||
k = isamem_type[i];
|
||||
if (k == 0) continue;
|
||||
|
||||
@@ -83,6 +83,11 @@
|
||||
#include <86box/isartc.h>
|
||||
|
||||
|
||||
#define ISARTC_EV170 0
|
||||
#define ISARTC_DTK 1
|
||||
#define ISARTC_P5PAK 2
|
||||
#define ISARTC_A6PAK 3
|
||||
|
||||
#define ISARTC_DEBUG 0
|
||||
|
||||
|
||||
@@ -506,7 +511,7 @@ isartc_init(const device_t *info)
|
||||
|
||||
/* Do per-board initialization. */
|
||||
switch(dev->board) {
|
||||
case 0: /* Everex EV-170 Magic I/O */
|
||||
case ISARTC_EV170: /* Everex EV-170 Magic I/O */
|
||||
dev->flags |= FLAG_YEAR80;
|
||||
dev->base_addr = device_get_config_hex16("base");
|
||||
dev->base_addrsz = 32;
|
||||
@@ -519,7 +524,7 @@ isartc_init(const device_t *info)
|
||||
dev->year = MM67_AL_DOM; /* year, NON STANDARD */
|
||||
break;
|
||||
|
||||
case 1: /* DTK PII-147 Hexa I/O Plus */
|
||||
case ISARTC_DTK: /* DTK PII-147 Hexa I/O Plus */
|
||||
dev->flags |= FLAG_YEARBCD;
|
||||
dev->base_addr = device_get_config_hex16("base");
|
||||
dev->base_addrsz = 32;
|
||||
@@ -531,7 +536,8 @@ isartc_init(const device_t *info)
|
||||
dev->year = MM67_AL_HUNTEN; /* year, NON STANDARD */
|
||||
break;
|
||||
|
||||
case 2: /* Paradise Systems 5PAK */
|
||||
case ISARTC_P5PAK: /* Paradise Systems 5PAK */
|
||||
case ISARTC_A6PAK: /* AST SixPakPlus */
|
||||
dev->flags |= FLAG_YEAR80;
|
||||
dev->base_addr = 0x02c0;
|
||||
dev->base_addrsz = 32;
|
||||
@@ -627,7 +633,7 @@ static const device_config_t ev170_config[] = {
|
||||
static const device_t ev170_device = {
|
||||
"Everex EV-170 Magic I/O",
|
||||
DEVICE_ISA,
|
||||
0,
|
||||
ISARTC_EV170,
|
||||
isartc_init, isartc_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
ev170_config
|
||||
@@ -657,7 +663,7 @@ static const device_config_t pii147_config[] = {
|
||||
static const device_t pii147_device = {
|
||||
"DTK PII-147 Hexa I/O Plus",
|
||||
DEVICE_ISA,
|
||||
1,
|
||||
ISARTC_DTK,
|
||||
isartc_init, isartc_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
pii147_config
|
||||
@@ -693,13 +699,49 @@ static const device_config_t p5pak_config[] = {
|
||||
static const device_t p5pak_device = {
|
||||
"Paradise Systems 5-PAK",
|
||||
DEVICE_ISA,
|
||||
2,
|
||||
ISARTC_P5PAK,
|
||||
isartc_init, isartc_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
p5pak_config
|
||||
};
|
||||
|
||||
|
||||
static const device_config_t a6pak_config[] = {
|
||||
{
|
||||
"irq", "IRQ", CONFIG_SELECTION, "", -1, "", { 0 },
|
||||
{
|
||||
{
|
||||
"Disabled", -1
|
||||
},
|
||||
{
|
||||
"IRQ2", 2
|
||||
},
|
||||
{
|
||||
"IRQ3", 3
|
||||
},
|
||||
{
|
||||
"IRQ5", 5
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
static const device_t a6pak_device = {
|
||||
"AST SixPakPlus",
|
||||
DEVICE_ISA,
|
||||
ISARTC_A6PAK,
|
||||
isartc_init, isartc_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
a6pak_config
|
||||
};
|
||||
|
||||
|
||||
static const struct {
|
||||
const char *internal_name;
|
||||
const device_t *dev;
|
||||
@@ -708,6 +750,7 @@ static const struct {
|
||||
{ "ev170", &ev170_device },
|
||||
{ "pii147", &pii147_device },
|
||||
{ "p5pak", &p5pak_device },
|
||||
{ "a6pak", &a6pak_device },
|
||||
{ "", NULL },
|
||||
};
|
||||
|
||||
|
||||
@@ -55,6 +55,17 @@
|
||||
#define STAT_IFULL 0x02
|
||||
#define STAT_OFULL 0x01
|
||||
|
||||
// Keyboard Types
|
||||
#define KBD_TYPE_PC81 0
|
||||
#define KBD_TYPE_PC82 1
|
||||
#define KBD_TYPE_XT82 2
|
||||
#define KBD_TYPE_XT86 3
|
||||
#define KBD_TYPE_COMPAQ 4
|
||||
#define KBD_TYPE_TANDY 5
|
||||
#define KBD_TYPE_TOSHIBA 6
|
||||
#define KBD_TYPE_VTECH 7
|
||||
#define KBD_TYPE_OLIVETTI 8
|
||||
#define KBD_TYPE_ZENITH 9
|
||||
|
||||
typedef struct {
|
||||
int want_irq;
|
||||
@@ -357,8 +368,8 @@ kbd_log(const char *fmt, ...)
|
||||
#endif
|
||||
|
||||
static uint8_t
|
||||
get_fdd_switch_settings(){
|
||||
|
||||
get_fdd_switch_settings() {
|
||||
|
||||
int i, fdd_count = 0;
|
||||
|
||||
for (i = 0; i < FDD_NUM; i++) {
|
||||
@@ -369,20 +380,18 @@ get_fdd_switch_settings(){
|
||||
if (!fdd_count)
|
||||
return 0x00;
|
||||
else
|
||||
return ((fdd_count - 1) << 6) | 0x01;
|
||||
|
||||
return ((fdd_count - 1) << 6) | 0x01;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
get_videomode_switch_settings(){
|
||||
|
||||
get_videomode_switch_settings() {
|
||||
|
||||
if (video_is_mda())
|
||||
return 0x30;
|
||||
else if (video_is_cga())
|
||||
return 0x20; /* 0x10 would be 40x25 */
|
||||
else
|
||||
return 0x00;
|
||||
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -392,7 +401,7 @@ kbd_poll(void *priv)
|
||||
|
||||
timer_advance_u64(&kbd->send_delay_timer, 1000 * TIMER_USEC);
|
||||
|
||||
if (!(kbd->pb & 0x40) && (kbd->type != 5))
|
||||
if (!(kbd->pb & 0x40) && (kbd->type != KBD_TYPE_TANDY))
|
||||
return;
|
||||
|
||||
if (kbd->want_irq) {
|
||||
@@ -504,7 +513,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
||||
xtkbd_t *kbd = (xtkbd_t *)priv;
|
||||
|
||||
switch (port) {
|
||||
case 0x61:
|
||||
case 0x61: /* Keyboard Control Register (aka Port B) */
|
||||
if (!(kbd->pb & 0x40) && (val & 0x40)) {
|
||||
key_queue_start = key_queue_end = 0;
|
||||
kbd->want_irq = 0;
|
||||
@@ -514,9 +523,9 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
||||
kbd->pb = val;
|
||||
ppi.pb = val;
|
||||
|
||||
timer_process();
|
||||
timer_process();
|
||||
|
||||
if ((kbd->type <= 1) && (cassette != NULL))
|
||||
if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) && (cassette != NULL))
|
||||
pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0);
|
||||
|
||||
speaker_update();
|
||||
@@ -535,13 +544,13 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
||||
}
|
||||
|
||||
#ifdef ENABLE_KEYBOARD_XT_LOG
|
||||
if (kbd->type <= 1)
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
|
||||
kbd_log("Cassette motor is %s\n", !(val & 0x08) ? "ON" : "OFF");
|
||||
#endif
|
||||
break;
|
||||
#ifdef ENABLE_KEYBOARD_XT_LOG
|
||||
case 0x62:
|
||||
if (kbd->type <= 1)
|
||||
case 0x62: /* Switch Register (aka Port C) */
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
|
||||
kbd_log("Cassette IN is %i\n", !!(val & 0x10));
|
||||
break;
|
||||
#endif
|
||||
@@ -554,16 +563,17 @@ kbd_read(uint16_t port, void *priv)
|
||||
{
|
||||
xtkbd_t *kbd = (xtkbd_t *)priv;
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
|
||||
switch (port) {
|
||||
case 0x60:
|
||||
if ((kbd->pb & 0x80) && ((kbd->type <= 3) || (kbd->type == 9))) {
|
||||
if (kbd->type <= 1)
|
||||
case 0x60: /* Keyboard Data Register (aka Port A) */
|
||||
if ((kbd->pb & 0x80) && ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)
|
||||
|| (kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86)
|
||||
|| (kbd->type == KBD_TYPE_ZENITH))) {
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
|
||||
ret = (kbd->pd & ~0x02) | (hasfpu ? 0x02 : 0x00);
|
||||
else if ((kbd->type == 2) || (kbd->type == 3))
|
||||
else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86))
|
||||
ret = 0xff; /* According to Ruud on the PCem forum, this is supposed to return 0xFF on the XT. */
|
||||
else if (kbd->type == 9) {
|
||||
else if (kbd->type == KBD_TYPE_ZENITH) {
|
||||
/* Zenith Data Systems Z-151
|
||||
* SW1 switch settings:
|
||||
* bits 6-7: floppy drive number
|
||||
@@ -586,32 +596,41 @@ kbd_read(uint16_t port, void *priv)
|
||||
ret = kbd->pa;
|
||||
break;
|
||||
|
||||
case 0x61:
|
||||
case 0x61: /* Keyboard Control Register (aka Port B) */
|
||||
ret = kbd->pb;
|
||||
break;
|
||||
|
||||
case 0x62:
|
||||
if (kbd->type == 0)
|
||||
ret = 0x00;
|
||||
else if (kbd->type == 1) {
|
||||
if (kbd->pb & 0x04)
|
||||
ret = ((mem_size - 64) / 32) & 0x0f;
|
||||
case 0x62: /* Switch Register (aka Port C) */
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) {
|
||||
if (kbd->pb & 0x04) /* PB2 */
|
||||
switch (mem_size + isa_mem_size) {
|
||||
case 64:
|
||||
case 48:
|
||||
case 32:
|
||||
case 16:
|
||||
ret = 0x00;
|
||||
break;
|
||||
default:
|
||||
ret = (((mem_size + isa_mem_size) - 64) / 32) & 0x0f;
|
||||
break;
|
||||
}
|
||||
else
|
||||
ret = ((mem_size - 64) / 32) >> 4;
|
||||
} else if (kbd->type == 8 || kbd->type == 9) {
|
||||
ret = (((mem_size + isa_mem_size) - 64) / 32) >> 4;
|
||||
} else if (kbd->type == KBD_TYPE_OLIVETTI
|
||||
|| kbd->type == KBD_TYPE_ZENITH) {
|
||||
/* Olivetti M19 or Zenith Data Systems Z-151 */
|
||||
if (kbd->pb & 0x04)
|
||||
if (kbd->pb & 0x04) /* PB2 */
|
||||
ret = kbd->pd & 0xbf;
|
||||
else
|
||||
else
|
||||
ret = kbd->pd >> 4;
|
||||
} else {
|
||||
if (kbd->pb & 0x08)
|
||||
if (kbd->pb & 0x08) /* PB3 */
|
||||
ret = kbd->pd >> 4;
|
||||
else {
|
||||
/* LaserXT = Always 512k RAM;
|
||||
LaserXT/3 = Bit 0: set = 512k, clear = 256k. */
|
||||
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
|
||||
if (kbd->type == 6)
|
||||
if (kbd->type == KBD_TYPE_TOSHIBA)
|
||||
ret = ((mem_size == 512) ? 0x0d : 0x0c) | (hasfpu ? 0x02 : 0x00);
|
||||
else
|
||||
#endif
|
||||
@@ -622,19 +641,21 @@ kbd_read(uint16_t port, void *priv)
|
||||
|
||||
/* This is needed to avoid error 131 (cassette error).
|
||||
This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */
|
||||
if (kbd->type <= 1) {
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) {
|
||||
if (cassette == NULL)
|
||||
ret |= (ppispeakon ? 0x10 : 0);
|
||||
else
|
||||
ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0);
|
||||
}
|
||||
|
||||
if (kbd->type == 5)
|
||||
if (kbd->type == KBD_TYPE_TANDY)
|
||||
ret |= (tandy1k_eeprom_read() ? 0x10 : 0);
|
||||
break;
|
||||
|
||||
case 0x63:
|
||||
if ((kbd->type == 2) || (kbd->type == 3) || (kbd->type == 4) || (kbd->type == 6))
|
||||
case 0x63: /* Keyboard Configuration Register (aka Port D) */
|
||||
if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86)
|
||||
|| (kbd->type == KBD_TYPE_COMPAQ)
|
||||
|| (kbd->type == KBD_TYPE_TOSHIBA))
|
||||
ret = kbd->pd;
|
||||
break;
|
||||
}
|
||||
@@ -685,9 +706,14 @@ kbd_init(const device_t *info)
|
||||
|
||||
video_reset(gfxcard);
|
||||
|
||||
if ((kbd->type <= 3) || (kbd->type == 4) || (kbd->type == 6) || (kbd->type == 8)) {
|
||||
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)
|
||||
|| (kbd->type == KBD_TYPE_XT82) || (kbd->type <= KBD_TYPE_XT86)
|
||||
|| (kbd->type == KBD_TYPE_COMPAQ)
|
||||
|| (kbd->type == KBD_TYPE_TOSHIBA)
|
||||
|| (kbd->type == KBD_TYPE_OLIVETTI)) {
|
||||
|
||||
/* DIP switch readout: bit set = OFF, clear = ON. */
|
||||
if (kbd->type == 8)
|
||||
if (kbd->type == KBD_TYPE_OLIVETTI)
|
||||
/* Olivetti M19
|
||||
* Jumpers J1, J2 - monitor type.
|
||||
* 01 - mono (high-res)
|
||||
@@ -699,10 +725,13 @@ kbd_init(const device_t *info)
|
||||
/* Switches 7, 8 - floppy drives. */
|
||||
kbd->pd = get_fdd_switch_settings();
|
||||
|
||||
/* Siitches 5, 6 - video card type */
|
||||
kbd->pd |= get_videomode_switch_settings();
|
||||
|
||||
/* Switches 3, 4 - memory size. */
|
||||
if ((kbd->type == 3) || (kbd->type == 4) || (kbd->type == 6)) {
|
||||
if ((kbd->type == KBD_TYPE_XT86)
|
||||
|| (kbd->type == KBD_TYPE_COMPAQ)
|
||||
|| (kbd->type == KBD_TYPE_TOSHIBA)) {
|
||||
switch (mem_size) {
|
||||
case 256:
|
||||
kbd->pd |= 0x00;
|
||||
@@ -718,34 +747,49 @@ kbd_init(const device_t *info)
|
||||
kbd->pd |= 0x0c;
|
||||
break;
|
||||
}
|
||||
} else if (kbd->type >= 1) {
|
||||
} else if (kbd->type == KBD_TYPE_XT82) {
|
||||
switch (mem_size) {
|
||||
case 64:
|
||||
case 64: /* 1x64k */
|
||||
kbd->pd |= 0x00;
|
||||
break;
|
||||
case 128:
|
||||
case 128: /* 2x64k */
|
||||
kbd->pd |= 0x04;
|
||||
break;
|
||||
case 192:
|
||||
case 192: /* 3x64k */
|
||||
kbd->pd |= 0x08;
|
||||
break;
|
||||
case 256:
|
||||
case 256: /* 4x64k */
|
||||
default:
|
||||
kbd->pd |= 0x0c;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
} else if (kbd->type == KBD_TYPE_PC82) {
|
||||
switch (mem_size) {
|
||||
case 16:
|
||||
kbd->pd |= 0x00;
|
||||
break;
|
||||
case 32:
|
||||
kbd->pd |= 0x04;
|
||||
break;
|
||||
case 48:
|
||||
case 192: /* 3x64k, not supported by stock BIOS due to bugs */
|
||||
kbd->pd |= 0x08;
|
||||
break;
|
||||
case 64:
|
||||
case 64: /* 4x16k */
|
||||
case 96: /* 2x32k + 2x16k */
|
||||
case 128: /* 4x32k */
|
||||
case 160: /* 2x64k + 2x16k */
|
||||
case 224: /* 3x64k + 1x32k */
|
||||
case 256: /* 4x64k */
|
||||
default:
|
||||
kbd->pd |= 0x0c;
|
||||
break;
|
||||
}
|
||||
} else { /* really just the PC '81 */
|
||||
switch (mem_size) {
|
||||
case 16: /* 1x16k */
|
||||
kbd->pd |= 0x00;
|
||||
break;
|
||||
case 32: /* 2x16k */
|
||||
kbd->pd |= 0x04;
|
||||
break;
|
||||
case 48: /* 3x16k */
|
||||
kbd->pd |= 0x08;
|
||||
break;
|
||||
case 64: /* 4x16k */
|
||||
default:
|
||||
kbd->pd |= 0x0c;
|
||||
break;
|
||||
@@ -755,7 +799,7 @@ kbd_init(const device_t *info)
|
||||
/* Switch 2 - 8087 FPU. */
|
||||
if (hasfpu)
|
||||
kbd->pd |= 0x02;
|
||||
} else if (kbd-> type == 9) {
|
||||
} else if (kbd-> type == KBD_TYPE_ZENITH) {
|
||||
/* Zenith Data Systems Z-151
|
||||
* SW2 switch settings:
|
||||
* bit 7: monitor frequency
|
||||
@@ -799,8 +843,8 @@ kbd_init(const device_t *info)
|
||||
|
||||
keyboard_set_table(scancode_xt);
|
||||
|
||||
is_tandy = (kbd->type == 5);
|
||||
is_t1x00 = (kbd->type == 6);
|
||||
is_tandy = (kbd->type == KBD_TYPE_TANDY);
|
||||
is_t1x00 = (kbd->type == KBD_TYPE_TOSHIBA);
|
||||
|
||||
is_amstrad = 0;
|
||||
|
||||
@@ -831,7 +875,7 @@ kbd_close(void *priv)
|
||||
const device_t keyboard_pc_device = {
|
||||
"IBM PC Keyboard (1981)",
|
||||
0,
|
||||
0,
|
||||
KBD_TYPE_PC81,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -841,7 +885,7 @@ const device_t keyboard_pc_device = {
|
||||
const device_t keyboard_pc82_device = {
|
||||
"IBM PC Keyboard (1982)",
|
||||
0,
|
||||
1,
|
||||
KBD_TYPE_PC82,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -851,7 +895,7 @@ const device_t keyboard_pc82_device = {
|
||||
const device_t keyboard_xt_device = {
|
||||
"XT (1982) Keyboard",
|
||||
0,
|
||||
2,
|
||||
KBD_TYPE_XT82,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -861,7 +905,7 @@ const device_t keyboard_xt_device = {
|
||||
const device_t keyboard_xt86_device = {
|
||||
"XT (1986) Keyboard",
|
||||
0,
|
||||
3,
|
||||
KBD_TYPE_XT86,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -871,7 +915,7 @@ const device_t keyboard_xt86_device = {
|
||||
const device_t keyboard_xt_compaq_device = {
|
||||
"Compaq Portable Keyboard",
|
||||
0,
|
||||
4,
|
||||
KBD_TYPE_COMPAQ,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -881,7 +925,7 @@ const device_t keyboard_xt_compaq_device = {
|
||||
const device_t keyboard_tandy_device = {
|
||||
"Tandy 1000 Keyboard",
|
||||
0,
|
||||
5,
|
||||
KBD_TYPE_TANDY,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -891,7 +935,7 @@ const device_t keyboard_tandy_device = {
|
||||
const device_t keyboard_xt_t1x00_device = {
|
||||
"Toshiba T1x00 Keyboard",
|
||||
0,
|
||||
6,
|
||||
KBD_TYPE_TOSHIBA,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -902,7 +946,7 @@ const device_t keyboard_xt_t1x00_device = {
|
||||
const device_t keyboard_xt_lxt3_device = {
|
||||
"VTech Laser XT3 Keyboard",
|
||||
0,
|
||||
7,
|
||||
KBD_TYPE_VTECH,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -913,7 +957,7 @@ const device_t keyboard_xt_lxt3_device = {
|
||||
const device_t keyboard_xt_olivetti_device = {
|
||||
"Olivetti XT Keyboard",
|
||||
0,
|
||||
8,
|
||||
KBD_TYPE_OLIVETTI,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
@@ -923,7 +967,7 @@ const device_t keyboard_xt_olivetti_device = {
|
||||
const device_t keyboard_xt_zenith_device = {
|
||||
"Zenith XT Keyboard",
|
||||
0,
|
||||
9,
|
||||
KBD_TYPE_ZENITH,
|
||||
kbd_init,
|
||||
kbd_close,
|
||||
kbd_reset,
|
||||
|
||||
@@ -892,8 +892,10 @@ dma_page_write(uint16_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
uint8_t convert[8] = CHANNELS;
|
||||
|
||||
#ifdef USE_DYNAREC
|
||||
if ((addr == 0x84) && cpu_use_dynarec)
|
||||
update_tsc();
|
||||
#endif
|
||||
|
||||
addr &= 0x0f;
|
||||
dmaregs[2][addr] = val;
|
||||
|
||||
@@ -2311,7 +2311,7 @@ fdc_reset(void *priv)
|
||||
fdc->max_track = (fdc->flags & FDC_FLAG_MORE_TRACKS) ? 85 : 79;
|
||||
|
||||
fdc_remove(fdc);
|
||||
fdc_set_base(fdc, (fdc->flags & FDC_FLAG_PCJR) ? 0x00f0 : 0x03f0);
|
||||
fdc_set_base(fdc, (fdc->flags & FDC_FLAG_PCJR) ? FDC_PRIMARY_PCJR_ADDR : FDC_PRIMARY_ADDR);
|
||||
|
||||
current_drive = 0;
|
||||
|
||||
@@ -2342,12 +2342,12 @@ fdc_init(const device_t *info)
|
||||
|
||||
fdc->flags = info->local;
|
||||
|
||||
fdc->irq = 6;
|
||||
fdc->irq = FDC_PRIMARY_IRQ;
|
||||
|
||||
if (fdc->flags & FDC_FLAG_PCJR)
|
||||
timer_add(&fdc->watchdog_timer, fdc_watchdog_poll, fdc, 0);
|
||||
else
|
||||
fdc->dma_ch = 2;
|
||||
fdc->dma_ch = FDC_PRIMARY_DMA;
|
||||
|
||||
fdc_log("FDC added: %04X (flags: %08X)\n", fdc->base_address, fdc->flags);
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ b215_init(const device_t *info)
|
||||
rom_init(&dev->rom, ROM_B215, ROM_ADDR, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
dev->fdc_controller = device_add(&fdc_um8398_device);
|
||||
io_sethandler(0x03f0, 1, b215_read, NULL, NULL, NULL, NULL, NULL, dev);
|
||||
io_sethandler(FDC_PRIMARY_ADDR, 1, b215_read, NULL, NULL, NULL, NULL, NULL, dev);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
@@ -122,7 +122,8 @@ extern int sound_is_float, /* (C) sound uses FP values */
|
||||
GUS, GUSMAX, /* (C) sound option */
|
||||
SSI2001, /* (C) sound option */
|
||||
voodoo_enabled; /* (C) video option */
|
||||
extern uint32_t mem_size; /* (C) memory size */
|
||||
extern uint32_t mem_size; /* (C) memory size (Installed on system board) */
|
||||
extern uint32_t isa_mem_size; /* (C) memory size (ISA Memory Cards) */
|
||||
extern int cpu, /* (C) cpu type */
|
||||
cpu_use_dynarec, /* (C) cpu uses/needs Dyna */
|
||||
fpu_type; /* (C) fpu type */
|
||||
|
||||
@@ -24,6 +24,22 @@
|
||||
|
||||
extern int fdc_type;
|
||||
|
||||
#define FDC_PRIMARY_ADDR 0x03f0
|
||||
#define FDC_PRIMARY_IRQ 6
|
||||
#define FDC_PRIMARY_DMA 2
|
||||
#define FDC_PRIMARY_PCJR_ADDR 0x00f0
|
||||
#define FDC_PRIMARY_PCJR_IRQ 6
|
||||
#define FDC_PRIMARY_PCJR_DMA 2
|
||||
#define FDC_SECONDARY_ADDR 0x0370
|
||||
#define FDC_SECONDARY_IRQ 6
|
||||
#define FDC_SECONDARY_DMA 2
|
||||
#define FDC_TERTIARY_ADDR 0x0360
|
||||
#define FDC_TERTIARY_IRQ 6
|
||||
#define FDC_TERTIARY_DMA 2
|
||||
#define FDC_QUATERNARY_ADDR 0x03e0
|
||||
#define FDC_QUATERNARY_IRQ 6
|
||||
#define FDC_QUATERNARY_DMA 2
|
||||
|
||||
#define FDC_FLAG_PCJR 0x01 /* PCjr */
|
||||
#define FDC_FLAG_DISKCHG_ACTLOW 0x02 /* Amstrad, PS/1, PS/2 ISA */
|
||||
#define FDC_FLAG_AT 0x04 /* AT+, PS/x */
|
||||
|
||||
@@ -127,6 +127,13 @@
|
||||
#define IDS_2151 2151 // "Cartridge images (*.JRC)\0*.JRC\0..."
|
||||
#define IDS_2152 2152 // "Error initializing renderer"
|
||||
#define IDS_2153 2153 // "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
#define IDS_2154 2154 // "Resume execution"
|
||||
#define IDS_2155 2155 // "Pause execution"
|
||||
#define IDS_2156 2156 // "Press Ctrl+Alt+Del"
|
||||
#define IDS_2157 2157 // "Press Ctrl+Alt+Esc"
|
||||
#define IDS_2158 2158 // "Hard reset"
|
||||
#define IDS_2159 2159 // "ACPI shutdown"
|
||||
#define IDS_2160 2160 // "Settings"
|
||||
|
||||
#define IDS_4096 4096 // "Hard disk (%s)"
|
||||
#define IDS_4097 4097 // "%01i:%01i"
|
||||
|
||||
@@ -10,7 +10,7 @@ extern uint8_t MIDI_evt_len[256];
|
||||
extern int midi_device_current;
|
||||
extern int midi_input_device_current;
|
||||
|
||||
extern void (*input_msg)(void *p, uint8_t *msg);
|
||||
extern void (*input_msg)(void *p, uint8_t *msg, uint32_t len);
|
||||
extern int (*input_sysex)(void *p, uint8_t *buf, uint32_t len, int abort);
|
||||
extern void *midi_in_p;
|
||||
|
||||
@@ -44,7 +44,7 @@ typedef struct midi_in_handler_t
|
||||
int cnt;
|
||||
uint32_t len;
|
||||
|
||||
void (*msg)(void *p, uint8_t *msg);
|
||||
void (*msg)(void *p, uint8_t *msg, uint32_t len);
|
||||
int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
struct midi_in_handler_t *p;
|
||||
struct midi_in_handler_t *prev, *next;
|
||||
@@ -73,9 +73,9 @@ extern void midi_raw_out_byte(uint8_t val);
|
||||
extern void midi_clear_buffer(void);
|
||||
extern void midi_poll();
|
||||
|
||||
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p);
|
||||
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p);
|
||||
extern void midi_in_handlers_clear(void);
|
||||
extern void midi_in_msg(uint8_t *msg);
|
||||
extern void midi_in_msg(uint8_t *msg, uint32_t len);
|
||||
extern void midi_in_sysex(uint8_t *buffer, uint32_t len);
|
||||
|
||||
#if 0
|
||||
|
||||
@@ -51,7 +51,7 @@ static const mo_type_t mo_types[KNOWN_MO_TYPES] = {
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char vendor[8];
|
||||
const char vendor[9];
|
||||
const char model[16];
|
||||
const char revision[5];
|
||||
int8_t supported_media[KNOWN_MO_TYPES];
|
||||
|
||||
@@ -90,7 +90,7 @@ extern int update_icons;
|
||||
extern int unscaled_size_x, /* current unscaled size X */
|
||||
unscaled_size_y; /* current unscaled size Y */
|
||||
|
||||
extern int kbd_req_capture, hide_status_bar;
|
||||
extern int kbd_req_capture, hide_status_bar, hide_tool_bar;
|
||||
|
||||
/* System-related functions. */
|
||||
extern char *fix_exe_path(char *str);
|
||||
|
||||
@@ -313,6 +313,7 @@
|
||||
#endif
|
||||
#define IDM_CONFIG 40020
|
||||
#define IDM_VID_HIDE_STATUS_BAR 40021
|
||||
#define IDM_VID_HIDE_TOOLBAR 40022
|
||||
#define IDM_UPDATE_ICONS 40030
|
||||
#define IDM_SND_GAIN 40031
|
||||
#define IDM_VID_RESIZE 40040
|
||||
|
||||
@@ -20,12 +20,14 @@
|
||||
# define SCSI_BUSLOGIC_H
|
||||
|
||||
|
||||
extern const device_t buslogic_542b_1991_device;
|
||||
extern const device_t buslogic_device;
|
||||
extern const device_t buslogic_542b_device;
|
||||
extern const device_t buslogic_545s_device;
|
||||
extern const device_t buslogic_542bh_device;
|
||||
extern const device_t buslogic_545c_device;
|
||||
extern const device_t buslogic_640a_device;
|
||||
extern const device_t buslogic_445s_device;
|
||||
extern const device_t buslogic_pci_device;
|
||||
extern const device_t buslogic_445c_device;
|
||||
extern const device_t buslogic_958d_pci_device;
|
||||
|
||||
extern void BuslogicDeviceReset(void *p);
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
* Copyright 2016-2020 TheCollector1995.
|
||||
*/
|
||||
#ifndef SOUND_MPU401_H
|
||||
# define SOUND_MPU401_H
|
||||
|
||||
#define MPU401_VERSION 0x15
|
||||
#define MPU401_REVISION 0x01
|
||||
@@ -159,4 +161,7 @@ extern void mpu401_device_add(void);
|
||||
extern void mpu401_irq_attach(mpu_t *mpu, void (*ext_irq_update)(void *priv, int set), int (*ext_irq_pending)(void *priv), void *priv);
|
||||
|
||||
extern int MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
extern void MPU401_InputMsg(void *p, uint8_t *msg);
|
||||
extern void MPU401_InputMsg(void *p, uint8_t *msg, uint32_t len);
|
||||
|
||||
|
||||
#endif /*SOUND_MPU401_H*/
|
||||
|
||||
@@ -102,7 +102,7 @@ typedef struct sb_dsp_t
|
||||
} sb_dsp_t;
|
||||
|
||||
|
||||
void sb_dsp_input_msg(void *p, uint8_t *msg);
|
||||
void sb_dsp_input_msg(void *p, uint8_t *msg, uint32_t len);
|
||||
|
||||
int sb_dsp_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
|
||||
|
||||
@@ -274,6 +274,7 @@ extern void tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, voi
|
||||
extern uint8_t tvp3026_ramdac_in(uint16_t addr, int rs2, int rs3, void *p, svga_t *svga);
|
||||
extern void tvp3026_recalctimings(void *p, svga_t *svga);
|
||||
extern void tvp3026_hwcursor_draw(svga_t *svga, int displine);
|
||||
extern float tvp3026_getclock(int clock, void *p);
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ati68860_ramdac_device;
|
||||
|
||||
@@ -348,6 +348,7 @@ extern const device_t s3_diamond_stealth_vram_isa_device;
|
||||
extern const device_t s3_ami_86c924_isa_device;
|
||||
extern const device_t s3_metheus_86c928_isa_device;
|
||||
extern const device_t s3_metheus_86c928_vlb_device;
|
||||
extern const device_t s3_spea_mercury_lite_86c928_pci_device;
|
||||
extern const device_t s3_spea_mirage_86c801_isa_device;
|
||||
extern const device_t s3_spea_mirage_86c805_vlb_device;
|
||||
extern const device_t s3_mirocrystal_8s_805_vlb_device;
|
||||
@@ -394,6 +395,7 @@ extern const device_t s3_trio64v2_dx_onboard_pci_device;
|
||||
extern const device_t s3_virge_325_pci_device;
|
||||
extern const device_t s3_diamond_stealth_2000_pci_device;
|
||||
extern const device_t s3_diamond_stealth_3000_pci_device;
|
||||
extern const device_t s3_stb_velocity_3d_pci_device;
|
||||
extern const device_t s3_virge_375_pci_device;
|
||||
extern const device_t s3_diamond_stealth_2000pro_pci_device;
|
||||
extern const device_t s3_virge_385_pci_device;
|
||||
|
||||
@@ -107,7 +107,7 @@ extern HANDLE ghMutex;
|
||||
extern HICON hIcon[256];
|
||||
extern int dpi;
|
||||
extern RECT oldclip;
|
||||
extern int sbar_height, user_resize;
|
||||
extern int sbar_height, tbar_height, user_resize;
|
||||
extern int acp_utf8;
|
||||
|
||||
// extern int status_is_open;
|
||||
@@ -213,6 +213,13 @@ extern void StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst
|
||||
extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
|
||||
/* Functions in win_toolbar.c */
|
||||
extern HWND hwndRebar;
|
||||
extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst);
|
||||
extern void ToolBarLoadIcons();
|
||||
extern void ToolBarUpdatePause(int paused);
|
||||
|
||||
|
||||
/* Functions in win_dialog.c: */
|
||||
/* Pass NULL in the title param to use the default title. */
|
||||
extern int file_dlg_w(HWND hwnd, WCHAR *f, WCHAR *fn, WCHAR *title, int save);
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "cpu.h"
|
||||
#include <86box/video.h>
|
||||
#include <86box/machine.h>
|
||||
#include <86box/isamem.h>
|
||||
|
||||
|
||||
int bios_only = 0;
|
||||
@@ -101,6 +102,9 @@ machine_init_ex(int m)
|
||||
/* Prepare some video-related things if we're using internal
|
||||
or no video. */
|
||||
video_pre_reset(gfxcard);
|
||||
|
||||
/* Reset any ISA memory cards. */
|
||||
isamem_reset();
|
||||
}
|
||||
|
||||
/* All good, boot the machine! */
|
||||
|
||||
@@ -105,7 +105,7 @@ const machine_type_t machine_types[] = {
|
||||
const machine_t machines[] = {
|
||||
/* 8088 Machines */
|
||||
{ "[8088] IBM PC (1981)", "ibmpc", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 16, 64, 16, 0, machine_pc_init, NULL },
|
||||
{ "[8088] IBM PC (1982)", "ibmpc82", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 256, 256, 256, 0, machine_pc82_init, NULL },
|
||||
{ "[8088] IBM PC (1982)", "ibmpc82", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 64, 256, 64, 0, machine_pc82_init, NULL },
|
||||
{ "[8088] IBM PCjr", "ibmpcjr", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 4772728, 4772728, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO_FIXED | MACHINE_CARTRIDGE, 128, 640, 128, 0, machine_pcjr_init, pcjr_get_device },
|
||||
{ "[8088] IBM XT (1982)", "ibmxt", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 64, 256, 64, 0, machine_xt_init, NULL },
|
||||
{ "[8088] IBM XT (1986)", "ibmxt86", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 256, 640, 64, 0, machine_xt86_init, NULL },
|
||||
|
||||
@@ -64,9 +64,10 @@ static SCSI_CARD scsi_cards[] = {
|
||||
{ "aha154xc", &aha154xc_device, },
|
||||
{ "aha154xcf", &aha154xcf_device, },
|
||||
{ "aha154xcp", &aha154xcp_device, },
|
||||
{ "bt542b", &buslogic_542b_1991_device, },
|
||||
{ "bt542bh", &buslogic_device, },
|
||||
{ "bt542b", &buslogic_542b_device, },
|
||||
{ "bt542bh", &buslogic_542bh_device, },
|
||||
{ "bt545s", &buslogic_545s_device, },
|
||||
{ "bt545c", &buslogic_545c_device, },
|
||||
{ "lcs6821n", &scsi_lcs6821n_device, },
|
||||
{ "rt1000b", &scsi_rt1000b_device, },
|
||||
{ "t128", &scsi_t128_device, },
|
||||
@@ -78,7 +79,7 @@ static SCSI_CARD scsi_cards[] = {
|
||||
{ "bt640a", &buslogic_640a_device, },
|
||||
{ "ncr53c90", &ncr53c90_mca_device, },
|
||||
{ "spock", &spock_device, },
|
||||
{ "bt958d", &buslogic_pci_device, },
|
||||
{ "bt958d", &buslogic_958d_pci_device, },
|
||||
{ "ncr53c810", &ncr53c810_pci_device, },
|
||||
{ "ncr53c815", &ncr53c815_pci_device, },
|
||||
{ "ncr53c820", &ncr53c820_pci_device, },
|
||||
@@ -87,6 +88,7 @@ static SCSI_CARD scsi_cards[] = {
|
||||
{ "ncr53c875", &ncr53c875_pci_device, },
|
||||
{ "dc390", &dc390_pci_device, },
|
||||
{ "bt445s", &buslogic_445s_device, },
|
||||
{ "bt445c", &buslogic_445c_device, },
|
||||
{ "", NULL, },
|
||||
};
|
||||
|
||||
|
||||
@@ -1259,6 +1259,9 @@ static const device_config_t aha_154xb_config[] = {
|
||||
{
|
||||
"D800H", 0xd8000
|
||||
},
|
||||
{
|
||||
"DC00H", 0xdc000
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
@@ -1357,6 +1360,9 @@ static const device_config_t aha_154x_config[] = {
|
||||
{
|
||||
"D800H", 0xd8000
|
||||
},
|
||||
{
|
||||
"DC00H", 0xdc000
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
@@ -1450,12 +1456,21 @@ static const device_config_t aha_154xcf_config[] = {
|
||||
{
|
||||
"C800H", 0xc8000
|
||||
},
|
||||
{
|
||||
"CC00H", 0xcc000
|
||||
},
|
||||
{
|
||||
"D000H", 0xd0000
|
||||
},
|
||||
{
|
||||
"D400H", 0xd4000
|
||||
},
|
||||
{
|
||||
"D800H", 0xd8000
|
||||
},
|
||||
{
|
||||
"DC00H", 0xdc000
|
||||
},
|
||||
{
|
||||
""
|
||||
}
|
||||
|
||||
@@ -231,13 +231,14 @@ typedef struct {
|
||||
|
||||
|
||||
enum {
|
||||
CHIP_BUSLOGIC_ISA_542_1991,
|
||||
CHIP_BUSLOGIC_ISA_542,
|
||||
CHIP_BUSLOGIC_ISA,
|
||||
CHIP_BUSLOGIC_MCA,
|
||||
CHIP_BUSLOGIC_EISA,
|
||||
CHIP_BUSLOGIC_VLB,
|
||||
CHIP_BUSLOGIC_PCI
|
||||
CHIP_BUSLOGIC_ISA_542B_1991_12_14,
|
||||
CHIP_BUSLOGIC_ISA_545S_1992_10_05,
|
||||
CHIP_BUSLOGIC_ISA_542BH_1993_05_23,
|
||||
CHIP_BUSLOGIC_ISA_545C_1994_12_01,
|
||||
CHIP_BUSLOGIC_VLB_445S_1993_11_16,
|
||||
CHIP_BUSLOGIC_VLB_445C_1994_12_01,
|
||||
CHIP_BUSLOGIC_MCA_640A_1993_05_23,
|
||||
CHIP_BUSLOGIC_PCI_958D_1995_12_30
|
||||
};
|
||||
|
||||
|
||||
@@ -266,17 +267,21 @@ BuslogicGetNVRFileName(buslogic_data_t *bl)
|
||||
{
|
||||
switch(bl->chip)
|
||||
{
|
||||
case CHIP_BUSLOGIC_ISA_542_1991:
|
||||
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
|
||||
return "bt542b.nvr";
|
||||
case CHIP_BUSLOGIC_ISA_542:
|
||||
return "bt542bh.nvr";
|
||||
case CHIP_BUSLOGIC_ISA:
|
||||
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
|
||||
return "bt545s.nvr";
|
||||
case CHIP_BUSLOGIC_MCA:
|
||||
return "bt640a.nvr";
|
||||
case CHIP_BUSLOGIC_VLB:
|
||||
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23:
|
||||
return "bt542bh.nvr";
|
||||
case CHIP_BUSLOGIC_ISA_545C_1994_12_01:
|
||||
return "bt545c.nvr";
|
||||
case CHIP_BUSLOGIC_VLB_445S_1993_11_16:
|
||||
return "bt445s.nvr";
|
||||
case CHIP_BUSLOGIC_PCI:
|
||||
case CHIP_BUSLOGIC_VLB_445C_1994_12_01:
|
||||
return "bt445c.nvr";
|
||||
case CHIP_BUSLOGIC_MCA_640A_1993_05_23:
|
||||
return "bt640a.nvr";
|
||||
case CHIP_BUSLOGIC_PCI_958D_1995_12_30:
|
||||
return "bt958d.nvr";
|
||||
default:
|
||||
fatal("Unrecognized BusLogic chip: %i\n", bl->chip);
|
||||
@@ -303,30 +308,36 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
|
||||
HALR->structured.autoSCSIData.aHostAdaptertype[0] = ' ';
|
||||
HALR->structured.autoSCSIData.aHostAdaptertype[5] = ' ';
|
||||
switch (bl->chip) {
|
||||
case CHIP_BUSLOGIC_ISA_542_1991:
|
||||
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "542B", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA_542:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "542BH", 5);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA:
|
||||
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "545S", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "640A", 4);
|
||||
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "542BH", 5);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB:
|
||||
case CHIP_BUSLOGIC_ISA_545C_1994_12_01:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "545C", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB_445S_1993_11_16:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "445S", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI:
|
||||
case CHIP_BUSLOGIC_VLB_445C_1994_12_01:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "445C", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA_640A_1993_05_23:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "640A", 4);
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI_958D_1995_12_30:
|
||||
memcpy(&(HALR->structured.autoSCSIData.aHostAdaptertype[1]), "958D", 4);
|
||||
break;
|
||||
}
|
||||
|
||||
HALR->structured.autoSCSIData.fLevelSensitiveInterrupt = (bl->chip == CHIP_BUSLOGIC_PCI) ? 1 : 0;
|
||||
HALR->structured.autoSCSIData.fLevelSensitiveInterrupt = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 1 : 0;
|
||||
HALR->structured.autoSCSIData.uSystemRAMAreForBIOS = 6;
|
||||
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
switch(dev->DmaChannel) {
|
||||
case 5:
|
||||
HALR->structured.autoSCSIData.uDMAChannel = 1;
|
||||
@@ -342,9 +353,9 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
|
||||
break;
|
||||
}
|
||||
}
|
||||
HALR->structured.autoSCSIData.fDMAAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
||||
HALR->structured.autoSCSIData.fDMAAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 0 : 1;
|
||||
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
switch(dev->Irq) {
|
||||
case 9:
|
||||
HALR->structured.autoSCSIData.uIrqChannel = 1;
|
||||
@@ -369,14 +380,14 @@ BuslogicAutoSCSIRamSetDefaults(x54x_t *dev, uint8_t safe)
|
||||
break;
|
||||
}
|
||||
}
|
||||
HALR->structured.autoSCSIData.fIrqAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
||||
HALR->structured.autoSCSIData.fIrqAutoConfiguration = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 0 : 1;
|
||||
|
||||
HALR->structured.autoSCSIData.uDMATransferRate = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 1;
|
||||
HALR->structured.autoSCSIData.uDMATransferRate = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 0 : 1;
|
||||
|
||||
HALR->structured.autoSCSIData.uSCSIId = 7;
|
||||
HALR->structured.autoSCSIData.uSCSIConfiguration = 0x3F;
|
||||
HALR->structured.autoSCSIData.uBusOnDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 7;
|
||||
HALR->structured.autoSCSIData.uBusOffDelay = (bl->chip == CHIP_BUSLOGIC_PCI) ? 0 : 4;
|
||||
HALR->structured.autoSCSIData.uBusOnDelay = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 0 : 7;
|
||||
HALR->structured.autoSCSIData.uBusOffDelay = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 0 : 4;
|
||||
HALR->structured.autoSCSIData.uBIOSConfiguration = (bl->has_bios) ? 0x33 : 0x32;
|
||||
if (!safe)
|
||||
HALR->structured.autoSCSIData.uBIOSConfiguration |= 0x04;
|
||||
@@ -416,7 +427,7 @@ BuslogicInitializeAutoSCSIRam(x54x_t *dev)
|
||||
fatal("BuslogicInitializeAutoSCSIRam(): Error reading data\n");
|
||||
fclose(f);
|
||||
f = NULL;
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
x54x_io_remove(dev, dev->Base, 4);
|
||||
switch(HALR->structured.autoSCSIData.uHostAdapterIoPortAddress) {
|
||||
case 0:
|
||||
@@ -472,7 +483,10 @@ buslogic_get_host_id(void *p)
|
||||
|
||||
HALocalRAM *HALR = &bl->LocalRAM;
|
||||
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991))
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
|
||||
return dev->HostID;
|
||||
else
|
||||
return HALR->structured.autoSCSIData.uSCSIId;
|
||||
@@ -489,7 +503,11 @@ buslogic_get_irq(void *p)
|
||||
|
||||
HALocalRAM *HALR = &bl->LocalRAM;
|
||||
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991) || (bl->chip == CHIP_BUSLOGIC_PCI))
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30))
|
||||
return dev->Irq;
|
||||
else
|
||||
return bl_irq[HALR->structured.autoSCSIData.uIrqChannel];
|
||||
@@ -506,9 +524,12 @@ buslogic_get_dma(void *p)
|
||||
|
||||
HALocalRAM *HALR = &bl->LocalRAM;
|
||||
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30)
|
||||
return (dev->Base ? 7 : 0);
|
||||
else if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991))
|
||||
else if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16))
|
||||
return dev->DmaChannel;
|
||||
else
|
||||
return bl_dma[HALR->structured.autoSCSIData.uDMAChannel];
|
||||
@@ -543,15 +564,15 @@ buslogic_param_len(void *p)
|
||||
case 0xFB:
|
||||
return 3;
|
||||
case 0x93: /* Valid only for VLB */
|
||||
return (bl->chip == CHIP_BUSLOGIC_VLB) ? 1 : 0;
|
||||
return (bl->chip == CHIP_BUSLOGIC_VLB_445C_1994_12_01 || bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) ? 1 : 0;
|
||||
case 0x95: /* Valid only for PCI */
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI) ? 1 : 0;
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 1 : 0;
|
||||
case 0x97: /* Valid only for PCI */
|
||||
case 0xA7: /* Valid only for PCI */
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI) ? 10 : 0;
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 10 : 0;
|
||||
case 0xA8: /* Valid only for PCI */
|
||||
case 0xA9: /* Valid only for PCI */
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI) ? 4 : 0;
|
||||
return (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 4 : 0;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -690,6 +711,8 @@ buslogic_cmds(void *p)
|
||||
BuslogicPCIInformation_t *ReplyPI;
|
||||
int cCharsToTransfer;
|
||||
|
||||
buslogic_log("Buslogic cmds = 0x%02x\n", dev->Command);
|
||||
|
||||
switch (dev->Command) {
|
||||
case 0x20:
|
||||
dev->DataReplyLeft = 0;
|
||||
@@ -754,7 +777,7 @@ buslogic_cmds(void *p)
|
||||
case 0x84:
|
||||
dev->DataBuf[0] = dev->fw_rev[4];
|
||||
dev->DataReplyLeft = 1;
|
||||
break;
|
||||
break;
|
||||
case 0x85:
|
||||
if (strlen(dev->fw_rev) == 6)
|
||||
dev->DataBuf[0] = dev->fw_rev[5];
|
||||
@@ -763,7 +786,7 @@ buslogic_cmds(void *p)
|
||||
dev->DataReplyLeft = 1;
|
||||
break;
|
||||
case 0x86:
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
ReplyPI = (BuslogicPCIInformation_t *) dev->DataBuf;
|
||||
memset(ReplyPI, 0, sizeof(BuslogicPCIInformation_t));
|
||||
ReplyPI->InformationIsValid = 0;
|
||||
@@ -801,7 +824,7 @@ buslogic_cmds(void *p)
|
||||
/* The reply length is set by the guest and is found in the first byte of the command buffer. */
|
||||
dev->DataReplyLeft = dev->CmdBuf[0];
|
||||
memset(dev->DataBuf, 0, dev->DataReplyLeft);
|
||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542)
|
||||
if (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23)
|
||||
i = 5;
|
||||
else
|
||||
i = 4;
|
||||
@@ -819,16 +842,18 @@ buslogic_cmds(void *p)
|
||||
memset(ReplyIESI, 0, sizeof(ReplyInquireExtendedSetupInformation));
|
||||
|
||||
switch (bl->chip) {
|
||||
case CHIP_BUSLOGIC_ISA_542_1991:
|
||||
case CHIP_BUSLOGIC_ISA_542:
|
||||
case CHIP_BUSLOGIC_ISA:
|
||||
case CHIP_BUSLOGIC_VLB:
|
||||
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
|
||||
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
|
||||
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23:
|
||||
case CHIP_BUSLOGIC_ISA_545C_1994_12_01:
|
||||
case CHIP_BUSLOGIC_VLB_445S_1993_11_16:
|
||||
case CHIP_BUSLOGIC_VLB_445C_1994_12_01:
|
||||
ReplyIESI->uBusType = 'A'; /* ISA style */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA:
|
||||
case CHIP_BUSLOGIC_MCA_640A_1993_05_23:
|
||||
ReplyIESI->uBusType = 'M'; /* MCA style */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI:
|
||||
case CHIP_BUSLOGIC_PCI_958D_1995_12_30:
|
||||
ReplyIESI->uBusType = 'E'; /* PCI style */
|
||||
break;
|
||||
}
|
||||
@@ -836,17 +861,19 @@ buslogic_cmds(void *p)
|
||||
ReplyIESI->u16ScatterGatherLimit = 8192;
|
||||
ReplyIESI->cMailbox = dev->MailboxCount;
|
||||
ReplyIESI->uMailboxAddressBase = dev->MailboxOutAddr;
|
||||
ReplyIESI->fHostWideSCSI = 1; /* This should be set for the BT-542B as well. */
|
||||
if ((bl->chip != CHIP_BUSLOGIC_ISA_542) && (bl->chip != CHIP_BUSLOGIC_ISA_542_1991) && (bl->chip != CHIP_BUSLOGIC_MCA))
|
||||
ReplyIESI->fHostWideSCSI = (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) ? 1 : 0;
|
||||
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) &&
|
||||
(bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23) &&
|
||||
(bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16))
|
||||
ReplyIESI->fLevelSensitiveInterrupt = bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI)
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30)
|
||||
ReplyIESI->fHostUltraSCSI = 1;
|
||||
memcpy(ReplyIESI->aFirmwareRevision, &(dev->fw_rev[strlen(dev->fw_rev) - 3]), sizeof(ReplyIESI->aFirmwareRevision));
|
||||
buslogic_log("Return Extended Setup Information: %d\n", dev->CmdBuf[0]);
|
||||
break;
|
||||
case 0x8F:
|
||||
bl->fAggressiveRoundRobinMode = dev->CmdBuf[0] & 1;
|
||||
|
||||
buslogic_log("Aggressive Round Robin Mode = %d\n", bl->fAggressiveRoundRobinMode);
|
||||
dev->DataReplyLeft = 0;
|
||||
break;
|
||||
case 0x90:
|
||||
@@ -866,13 +893,16 @@ buslogic_cmds(void *p)
|
||||
dev->DataReply = 0;
|
||||
break;
|
||||
case 0x93:
|
||||
if (bl->chip != CHIP_BUSLOGIC_VLB) {
|
||||
if ((bl->chip != CHIP_BUSLOGIC_VLB_445C_1994_12_01) && (bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16)) {
|
||||
dev->DataReplyLeft = 0;
|
||||
dev->Status |= STAT_INVCMD;
|
||||
break;
|
||||
}
|
||||
case 0x92:
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991) || (bl->chip == CHIP_BUSLOGIC_MCA)) {
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
|
||||
dev->DataReplyLeft = 0;
|
||||
dev->Status |= STAT_INVCMD;
|
||||
break;
|
||||
@@ -901,7 +931,7 @@ buslogic_cmds(void *p)
|
||||
break;
|
||||
}
|
||||
|
||||
if ((bl->chip == CHIP_BUSLOGIC_PCI) && !(dev->Status & STAT_INVCMD)) {
|
||||
if ((bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) && !(dev->Status & STAT_INVCMD)) {
|
||||
x54x_io_remove(dev, dev->Base, 4);
|
||||
switch(HALR->structured.autoSCSIData.uHostAdapterIoPortAddress) {
|
||||
case 0:
|
||||
@@ -918,7 +948,8 @@ buslogic_cmds(void *p)
|
||||
}
|
||||
break;
|
||||
case 0x94:
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991) || (bl->chip == CHIP_BUSLOGIC_MCA)) {
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23)) {
|
||||
dev->DataReplyLeft = 0;
|
||||
dev->Status |= STAT_INVCMD;
|
||||
break;
|
||||
@@ -937,7 +968,7 @@ buslogic_cmds(void *p)
|
||||
}
|
||||
break;
|
||||
case 0x95:
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
if (dev->Base != 0)
|
||||
x54x_io_remove(dev, dev->Base, 4);
|
||||
if (dev->CmdBuf[0] < 6) {
|
||||
@@ -966,7 +997,7 @@ buslogic_cmds(void *p)
|
||||
dev->DataReplyLeft = 0;
|
||||
break;
|
||||
case 0xA8:
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
dev->DataReplyLeft = 0;
|
||||
dev->Status |= STAT_INVCMD;
|
||||
break;
|
||||
@@ -985,7 +1016,7 @@ buslogic_cmds(void *p)
|
||||
dev->DataReply = 0;
|
||||
break;
|
||||
case 0xA9:
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip != CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
dev->DataReplyLeft = 0;
|
||||
dev->Status |= STAT_INVCMD;
|
||||
break;
|
||||
@@ -1038,18 +1069,20 @@ buslogic_setup_data(void *p)
|
||||
bl_setup->uCharacterD = 'D'; /* BusLogic model. */
|
||||
switch(bl->chip)
|
||||
{
|
||||
case CHIP_BUSLOGIC_ISA_542_1991:
|
||||
case CHIP_BUSLOGIC_ISA_542:
|
||||
case CHIP_BUSLOGIC_ISA:
|
||||
case CHIP_BUSLOGIC_ISA_542B_1991_12_14:
|
||||
case CHIP_BUSLOGIC_ISA_545S_1992_10_05:
|
||||
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23:
|
||||
case CHIP_BUSLOGIC_ISA_545C_1994_12_01:
|
||||
bl_setup->uHostBusType = 'A';
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA:
|
||||
case CHIP_BUSLOGIC_MCA_640A_1993_05_23:
|
||||
bl_setup->uHostBusType = 'B';
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB:
|
||||
case CHIP_BUSLOGIC_VLB_445S_1993_11_16:
|
||||
case CHIP_BUSLOGIC_VLB_445C_1994_12_01:
|
||||
bl_setup->uHostBusType = 'E';
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI:
|
||||
case CHIP_BUSLOGIC_PCI_958D_1995_12_30:
|
||||
bl_setup->uHostBusType = 'F';
|
||||
break;
|
||||
}
|
||||
@@ -1062,6 +1095,8 @@ buslogic_is_aggressive_mode(void *p)
|
||||
x54x_t *dev = (x54x_t *)p;
|
||||
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
||||
|
||||
buslogic_log("Buslogic: Aggressive mode = %d\n", bl->fAggressiveRoundRobinMode);
|
||||
|
||||
return bl->fAggressiveRoundRobinMode;
|
||||
}
|
||||
|
||||
@@ -1072,7 +1107,8 @@ buslogic_interrupt_type(void *p)
|
||||
x54x_t *dev = (x54x_t *)p;
|
||||
buslogic_data_t *bl = (buslogic_data_t *) dev->ven_data;
|
||||
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542) || (bl->chip == CHIP_BUSLOGIC_ISA_542_1991) || (bl->chip == CHIP_BUSLOGIC_MCA))
|
||||
if ((bl->chip == CHIP_BUSLOGIC_ISA_542B_1991_12_14) || (bl->chip == CHIP_BUSLOGIC_ISA_545S_1992_10_05) || (bl->chip == CHIP_BUSLOGIC_ISA_542BH_1993_05_23) ||
|
||||
(bl->chip == CHIP_BUSLOGIC_VLB_445S_1993_11_16) || (bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23))
|
||||
return 0;
|
||||
else
|
||||
return !!bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt;
|
||||
@@ -1302,7 +1338,7 @@ static void
|
||||
BuslogicInitializeLocalRAM(buslogic_data_t *bl)
|
||||
{
|
||||
memset(bl->LocalRAM.u8View, 0, sizeof(HALocalRAM));
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt = 1;
|
||||
} else {
|
||||
bl->LocalRAM.structured.autoSCSIData.fLevelSensitiveInterrupt = 0;
|
||||
@@ -1582,92 +1618,115 @@ buslogic_init(const device_t *info)
|
||||
|
||||
bl->fAggressiveRoundRobinMode = 1;
|
||||
|
||||
switch(bl->chip)
|
||||
{
|
||||
case CHIP_BUSLOGIC_ISA_542_1991:
|
||||
strcpy(dev->name, "BT-542B");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-542B_BIOS.ROM";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA221";
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA_542:
|
||||
strcpy(dev->name, "BT-542BH");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-542BH_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA335";
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA:
|
||||
default:
|
||||
strcpy(dev->name, "BT-545S");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-545S_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-545S_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x4000;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA421E";
|
||||
dev->ha_bps = 10000000.0; /* fast SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA:
|
||||
strcpy(dev->name, "BT-640A");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-640A_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "BA150";
|
||||
dev->flags |= X54X_32BIT;
|
||||
dev->pos_regs[0] = 0x08; /* MCA board ID */
|
||||
dev->pos_regs[1] = 0x07;
|
||||
mca_add(buslogic_mca_read, buslogic_mca_write, buslogic_mca_feedb, NULL, dev);
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB:
|
||||
strcpy(dev->name, "BT-445S");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-445S_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-445S_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x8000;
|
||||
has_scam_rom = 1;
|
||||
scam_rom_name = "roms/scsi/buslogic/BT-445S_SCAM.rom";
|
||||
scam_rom_size = 0x0200;
|
||||
dev->fw_rev = "AA507B";
|
||||
dev->flags |= X54X_32BIT;
|
||||
dev->ha_bps = 10000000.0; /* fast SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI:
|
||||
strcpy(dev->name, "BT-958D");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-958D_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-958D_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x8000;
|
||||
has_scam_rom = 1;
|
||||
scam_rom_name = "roms/scsi/buslogic/BT-958D_SCAM.rom";
|
||||
scam_rom_size = 0x0200;
|
||||
dev->fw_rev = "AA507B";
|
||||
dev->flags |= (X54X_CDROM_BOOT | X54X_32BIT);
|
||||
dev->ha_bps = 20000000.0; /* ultra SCSI */
|
||||
dev->max_id = 15; /* wide SCSI */
|
||||
break;
|
||||
}
|
||||
bios_rom_name = NULL;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
|
||||
switch (bl->chip) {
|
||||
case CHIP_BUSLOGIC_ISA_542B_1991_12_14: /*Dated December 14th, 1991*/
|
||||
strcpy(dev->name, "BT-542B");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-542B_BIOS.ROM";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA221";
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA_545S_1992_10_05: /*Dated October 5th, 1992*/
|
||||
strcpy(dev->name, "BT-545S");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-545S_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA331";
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA_542BH_1993_05_23: /*Dated May 23rd, 1993*/
|
||||
strcpy(dev->name, "BT-542BH");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-542BH_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA335";
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_ISA_545C_1994_12_01: /*Dated December 1st, 1994*/
|
||||
strcpy(dev->name, "BT-545C");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-545C_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-545C_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x4000;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA425J";
|
||||
dev->ha_bps = 10000000.0; /* fast SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_MCA_640A_1993_05_23: /*Dated May 23rd, 1993*/
|
||||
strcpy(dev->name, "BT-640A");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-640A_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "BA335";
|
||||
dev->flags |= X54X_32BIT;
|
||||
dev->pos_regs[0] = 0x08; /* MCA board ID */
|
||||
dev->pos_regs[1] = 0x07;
|
||||
mca_add(buslogic_mca_read, buslogic_mca_write, buslogic_mca_feedb, NULL, dev);
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB_445S_1993_11_16: /*Dated November 16th, 1993*/
|
||||
strcpy(dev->name, "BT-445S");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-445S_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 0;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA335";
|
||||
dev->flags |= X54X_32BIT;
|
||||
dev->ha_bps = 5000000.0; /* normal SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_VLB_445C_1994_12_01: /*Dated December 1st, 1994*/
|
||||
strcpy(dev->name, "BT-445C");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-445C_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-445C_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x4000;
|
||||
has_scam_rom = 0;
|
||||
dev->fw_rev = "AA425J";
|
||||
dev->flags |= X54X_32BIT;
|
||||
dev->ha_bps = 10000000.0; /* fast SCSI */
|
||||
dev->max_id = 7; /* narrow SCSI */
|
||||
break;
|
||||
case CHIP_BUSLOGIC_PCI_958D_1995_12_30: /*Dated December 30th, 1995*/
|
||||
strcpy(dev->name, "BT-958D");
|
||||
bios_rom_name = "roms/scsi/buslogic/BT-958D_BIOS.rom";
|
||||
bios_rom_size = 0x4000;
|
||||
bios_rom_mask = 0x3fff;
|
||||
has_autoscsi_rom = 1;
|
||||
autoscsi_rom_name = "roms/scsi/buslogic/BT-958D_AutoSCSI.rom";
|
||||
autoscsi_rom_size = 0x8000;
|
||||
has_scam_rom = 1;
|
||||
scam_rom_name = "roms/scsi/buslogic/BT-958D_SCAM.rom";
|
||||
scam_rom_size = 0x0200;
|
||||
dev->fw_rev = "AA507B";
|
||||
dev->flags |= (X54X_CDROM_BOOT | X54X_32BIT);
|
||||
dev->ha_bps = 20000000.0; /* ultra SCSI */
|
||||
dev->max_id = 15; /* wide SCSI */
|
||||
break;
|
||||
}
|
||||
|
||||
if ((dev->Base != 0) && !(dev->card_bus & DEVICE_MCA) && !(dev->card_bus & DEVICE_PCI)) {
|
||||
x54x_io_set(dev, dev->Base, 4);
|
||||
@@ -1709,7 +1768,7 @@ buslogic_init(const device_t *info)
|
||||
bl->bios_mask = 0;
|
||||
}
|
||||
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI) {
|
||||
if (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30) {
|
||||
dev->pci_slot = pci_add_card(PCI_ADD_NORMAL, BuslogicPCIRead, BuslogicPCIWrite, dev);
|
||||
|
||||
buslogic_pci_bar[0].addr_regs[0] = 1;
|
||||
@@ -1727,14 +1786,15 @@ buslogic_init(const device_t *info)
|
||||
x54x_mem_disable(dev);
|
||||
}
|
||||
|
||||
if ((bl->chip == CHIP_BUSLOGIC_MCA) || (bl->chip == CHIP_BUSLOGIC_PCI))
|
||||
if ((bl->chip == CHIP_BUSLOGIC_MCA_640A_1993_05_23) || (bl->chip == CHIP_BUSLOGIC_PCI_958D_1995_12_30))
|
||||
mem_mapping_disable(&bl->bios.mapping);
|
||||
|
||||
buslogic_log("Buslogic on port 0x%04X\n", dev->Base);
|
||||
|
||||
x54x_device_reset(dev);
|
||||
|
||||
if ((bl->chip != CHIP_BUSLOGIC_ISA_542) && (bl->chip != CHIP_BUSLOGIC_ISA_542_1991) && (bl->chip != CHIP_BUSLOGIC_MCA)) {
|
||||
if ((bl->chip != CHIP_BUSLOGIC_ISA_542B_1991_12_14) && (bl->chip != CHIP_BUSLOGIC_ISA_545S_1992_10_05) && (bl->chip != CHIP_BUSLOGIC_ISA_542BH_1993_05_23) &&
|
||||
(bl->chip != CHIP_BUSLOGIC_VLB_445S_1993_11_16) && (bl->chip != CHIP_BUSLOGIC_MCA_640A_1993_05_23)) {
|
||||
BuslogicInitializeLocalRAM(bl);
|
||||
BuslogicInitializeAutoSCSIRam(dev);
|
||||
}
|
||||
@@ -1848,19 +1908,10 @@ static const device_config_t BT958D_Config[] = {
|
||||
}
|
||||
};
|
||||
|
||||
const device_t buslogic_542b_1991_device = {
|
||||
const device_t buslogic_542b_device = {
|
||||
"BusLogic BT-542B ISA",
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
CHIP_BUSLOGIC_ISA_542_1991,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
};
|
||||
|
||||
const device_t buslogic_device = {
|
||||
"BusLogic BT-542BH ISA",
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
CHIP_BUSLOGIC_ISA_542,
|
||||
CHIP_BUSLOGIC_ISA_542B_1991_12_14,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
@@ -1869,7 +1920,25 @@ const device_t buslogic_device = {
|
||||
const device_t buslogic_545s_device = {
|
||||
"BusLogic BT-545S ISA",
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
CHIP_BUSLOGIC_ISA,
|
||||
CHIP_BUSLOGIC_ISA_545S_1992_10_05,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
};
|
||||
|
||||
const device_t buslogic_542bh_device = {
|
||||
"BusLogic BT-542BH ISA",
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
CHIP_BUSLOGIC_ISA_542BH_1993_05_23,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
};
|
||||
|
||||
const device_t buslogic_545c_device = {
|
||||
"BusLogic BT-545C ISA",
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
CHIP_BUSLOGIC_ISA_545C_1994_12_01,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
@@ -1878,7 +1947,7 @@ const device_t buslogic_545s_device = {
|
||||
const device_t buslogic_640a_device = {
|
||||
"BusLogic BT-640A MCA",
|
||||
DEVICE_MCA,
|
||||
CHIP_BUSLOGIC_MCA,
|
||||
CHIP_BUSLOGIC_MCA_640A_1993_05_23,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
NULL
|
||||
@@ -1887,16 +1956,25 @@ const device_t buslogic_640a_device = {
|
||||
const device_t buslogic_445s_device = {
|
||||
"BusLogic BT-445S VLB",
|
||||
DEVICE_VLB,
|
||||
CHIP_BUSLOGIC_VLB,
|
||||
CHIP_BUSLOGIC_VLB_445S_1993_11_16,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
};
|
||||
|
||||
const device_t buslogic_pci_device = {
|
||||
const device_t buslogic_445c_device = {
|
||||
"BusLogic BT-445C VLB",
|
||||
DEVICE_VLB,
|
||||
CHIP_BUSLOGIC_VLB_445C_1994_12_01,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT_ISA_Config
|
||||
};
|
||||
|
||||
const device_t buslogic_958d_pci_device = {
|
||||
"BusLogic BT-958D PCI",
|
||||
DEVICE_PCI,
|
||||
CHIP_BUSLOGIC_PCI,
|
||||
CHIP_BUSLOGIC_PCI_958D_1995_12_30,
|
||||
buslogic_init, x54x_close, NULL,
|
||||
{ NULL }, NULL, NULL,
|
||||
BT958D_Config
|
||||
|
||||
@@ -1623,7 +1623,22 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
|
||||
dev->sector_len -= dev->sector_pos;
|
||||
dev->sector_len++;
|
||||
|
||||
msf = 1;
|
||||
|
||||
if ((cdb[9] & 0xf8) == 0x08) {
|
||||
/* 0x08 is an illegal mode */
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
/* If all the flag bits are cleared, then treat it as a non-data command. */
|
||||
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
|
||||
dev->sector_len = 0;
|
||||
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GPCMD_READ_CD_OLD:
|
||||
case GPCMD_READ_CD:
|
||||
@@ -1632,6 +1647,20 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
|
||||
|
||||
msf = 0;
|
||||
|
||||
if ((cdb[9] & 0xf8) == 0x08) {
|
||||
/* 0x08 is an illegal mode */
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
/* If all the flag bits are cleared, then treat it as a non-data command. */
|
||||
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
|
||||
dev->sector_len = 0;
|
||||
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,12 +13,17 @@
|
||||
# Copyright 2020,2021 David Hrdlička.
|
||||
#
|
||||
|
||||
add_library(snd OBJECT sound.c openal.c snd_opl.c snd_opl_nuked.c snd_resid.cc
|
||||
add_library(snd OBJECT sound.c snd_opl.c snd_opl_nuked.c snd_resid.cc
|
||||
midi.c midi_rtmidi.cpp snd_speaker.c snd_pssj.c snd_lpt_dac.c snd_ac97_codec.c snd_ac97_via.c
|
||||
snd_lpt_dss.c snd_adlib.c snd_adlibgold.c snd_ad1848.c snd_audiopci.c
|
||||
snd_azt2316a.c snd_cms.c snd_cs423x.c snd_gus.c snd_sb.c snd_sb_dsp.c
|
||||
snd_emu8k.c snd_mpu401.c snd_sn76489.c snd_ssi2001.c snd_wss.c snd_ym7128.c)
|
||||
|
||||
if(OPENAL)
|
||||
target_compile_definitions(snd PRIVATE USE_OPENAL)
|
||||
target_sources(snd PRIVATE openal.c)
|
||||
endif()
|
||||
|
||||
if(FLUIDSYNTH)
|
||||
target_compile_definitions(snd PRIVATE USE_FLUIDSYNTH)
|
||||
target_sources(snd PRIVATE midi_fluidsynth.c)
|
||||
|
||||
@@ -396,7 +396,7 @@ midi_clear_buffer(void)
|
||||
|
||||
|
||||
void
|
||||
midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p)
|
||||
midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p)
|
||||
{
|
||||
midi_in_handler_t *temp = NULL, *next;
|
||||
|
||||
@@ -479,7 +479,7 @@ midi_in_handlers_clear(void)
|
||||
|
||||
|
||||
void
|
||||
midi_in_msg(uint8_t *msg)
|
||||
midi_in_msg(uint8_t *msg, uint32_t len)
|
||||
{
|
||||
midi_in_handler_t *temp = mih_first;
|
||||
|
||||
@@ -488,7 +488,7 @@ midi_in_msg(uint8_t *msg)
|
||||
break;
|
||||
|
||||
if (temp->msg)
|
||||
temp->msg(temp->p, msg);
|
||||
temp->msg(temp->p, msg, len);
|
||||
|
||||
temp = temp->next;
|
||||
|
||||
|
||||
@@ -40,8 +40,10 @@ enum fluid_interp {
|
||||
};
|
||||
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
extern void givealbuffer_midi(void *buf, uint32_t size);
|
||||
extern void al_set_midi(int freq, int buf_size);
|
||||
#endif
|
||||
|
||||
static void *fluidsynth_handle; /* handle to FluidSynth DLL */
|
||||
|
||||
@@ -150,7 +152,9 @@ static void fluidsynth_thread(void *param)
|
||||
buf_pos += buf_size;
|
||||
if (buf_pos >= data->buf_size)
|
||||
{
|
||||
#ifdef USE_OPENAL
|
||||
givealbuffer_midi(data->buffer, data->buf_size / sizeof(float));
|
||||
#endif
|
||||
buf_pos = 0;
|
||||
}
|
||||
}
|
||||
@@ -163,7 +167,9 @@ static void fluidsynth_thread(void *param)
|
||||
buf_pos += buf_size;
|
||||
if (buf_pos >= data->buf_size)
|
||||
{
|
||||
#ifdef USE_OPENAL
|
||||
givealbuffer_midi(data->buffer_int16, data->buf_size / sizeof(int16_t));
|
||||
#endif
|
||||
buf_pos = 0;
|
||||
}
|
||||
}
|
||||
@@ -314,7 +320,9 @@ void* fluidsynth_init(const device_t *info)
|
||||
data->buffer_int16 = malloc(data->buf_size);
|
||||
}
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
al_set_midi(data->samplerate, data->buf_size);
|
||||
#endif
|
||||
|
||||
dev = malloc(sizeof(midi_device_t));
|
||||
memset(dev, 0, sizeof(midi_device_t));
|
||||
|
||||
@@ -13,8 +13,10 @@
|
||||
#include <86box/midi.h>
|
||||
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
extern void givealbuffer_midi(void *buf, uint32_t size);
|
||||
extern void al_set_midi(int freq, int buf_size);
|
||||
#endif
|
||||
|
||||
static const mt32emu_report_handler_i_v0 handler_v0 = {
|
||||
/** Returns the actual interface version ID */
|
||||
@@ -136,7 +138,9 @@ static void mt32_thread(void *param)
|
||||
buf_pos += bsize;
|
||||
if (buf_pos >= buf_size)
|
||||
{
|
||||
#ifdef USE_OPENAL
|
||||
givealbuffer_midi(buffer, buf_size / sizeof(float));
|
||||
#endif
|
||||
buf_pos = 0;
|
||||
}
|
||||
}
|
||||
@@ -148,7 +152,9 @@ static void mt32_thread(void *param)
|
||||
buf_pos += bsize;
|
||||
if (buf_pos >= buf_size)
|
||||
{
|
||||
#ifdef USE_OPENAL
|
||||
givealbuffer_midi(buffer_int16, buf_size / sizeof(int16_t));
|
||||
#endif
|
||||
buf_pos = 0;
|
||||
}
|
||||
}
|
||||
@@ -200,7 +206,9 @@ void* mt32emu_init(char *control_rom, char *pcm_rom)
|
||||
mt32emu_set_reversed_stereo_enabled(context, device_get_config_int("reversed_stereo"));
|
||||
mt32emu_set_nice_amp_ramp_enabled(context, device_get_config_int("nice_ramp"));
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
al_set_midi(samplerate, buf_size);
|
||||
#endif
|
||||
|
||||
dev = malloc(sizeof(midi_device_t));
|
||||
memset(dev, 0, sizeof(midi_device_t));
|
||||
|
||||
@@ -145,10 +145,10 @@ rtmidi_get_dev_name(int num, char *s)
|
||||
void
|
||||
rtmidi_input_callback(double timeStamp, std::vector<unsigned char> *message, void *userData)
|
||||
{
|
||||
if (message->size() <= 3)
|
||||
midi_in_msg(message->data());
|
||||
if (message->front() == 0xF0)
|
||||
midi_in_sysex(message->data(), message->size());
|
||||
else
|
||||
midi_in_sysex(message->data(), message->size());
|
||||
midi_in_msg(message->data(), message->size());
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ rtmidi_input_init(const device_t *info)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
midi_in_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi_input", 0);
|
||||
midi_in_id = config_get_int((char*)MIDI_INPUT_NAME, (char*)"midi_input", 0);
|
||||
|
||||
try {
|
||||
midiin->openPort(midi_in_id);
|
||||
@@ -183,7 +183,10 @@ rtmidi_input_init(const device_t *info)
|
||||
}
|
||||
}
|
||||
|
||||
midiin->setCallback(rtmidi_input_callback);
|
||||
midiin->setCallback(&rtmidi_input_callback);
|
||||
|
||||
// Don't ignore sysex, timing, or active sensing messages.
|
||||
midiin->ignoreTypes(false, false, false);
|
||||
|
||||
midi_in_init(dev, &midi_in);
|
||||
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
#include <86box/dma.h>
|
||||
#include <86box/pic.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/sound.h>
|
||||
#include <86box/filters.h>
|
||||
#include <86box/midi.h>
|
||||
#include <86box/snd_opl.h>
|
||||
#include <86box/snd_ym7128.h>
|
||||
|
||||
@@ -38,6 +40,10 @@ typedef struct adgold_t
|
||||
int adgold_mma_intpos[2];
|
||||
|
||||
pc_timer_t adgold_mma_timer_count;
|
||||
|
||||
uint8_t adgold_midi_ctrl, midi_queue[16];
|
||||
int midi_r, midi_w;
|
||||
int uart_in, uart_out, sysex;
|
||||
|
||||
struct
|
||||
{
|
||||
@@ -54,6 +60,7 @@ typedef struct adgold_t
|
||||
|
||||
int fm_vol_l, fm_vol_r;
|
||||
int samp_vol_l, samp_vol_r;
|
||||
int aux_vol_l, aux_vol_r;
|
||||
int vol_l, vol_r;
|
||||
int treble, bass;
|
||||
|
||||
@@ -61,7 +68,9 @@ typedef struct adgold_t
|
||||
int16_t mma_buffer[2][SOUNDBUFLEN];
|
||||
|
||||
int pos;
|
||||
|
||||
|
||||
int gameport_enabled;
|
||||
|
||||
int surround_enabled;
|
||||
} adgold_t;
|
||||
|
||||
@@ -134,12 +143,17 @@ void adgold_update_irq_status(adgold_t *adgold)
|
||||
uint8_t temp = 0xf;
|
||||
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x10) && (adgold->adgold_mma_status & 0x10)) /*Timer 0*/
|
||||
temp &= ~2;
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x20) && (adgold->adgold_mma_status & 0x20)) /*Timer 1*/
|
||||
temp &= ~2;
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x40) && (adgold->adgold_mma_status & 0x40)) /*Timer 2*/
|
||||
temp &= ~2;
|
||||
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][0xd] & 0x01) && (adgold->adgold_mma_status & 0x04))
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][0xd] & 0x04) && (adgold->adgold_mma_status & 0x08))
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][0xd] & 0x10) && (adgold->adgold_mma_status & 0x80))
|
||||
temp &= ~2;
|
||||
if ((adgold->adgold_mma_status & 0x01) && !(adgold->adgold_mma_regs[0][0xc] & 2))
|
||||
temp &= ~2;
|
||||
if ((adgold->adgold_mma_status & 0x02) && !(adgold->adgold_mma_regs[1][0xc] & 2))
|
||||
@@ -249,11 +263,19 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
|
||||
adgold->adgold_38x_regs[0x0c] = val;
|
||||
adgold->samp_vol_r = (int)(int8_t)(val - 128);
|
||||
break;
|
||||
case 0x0d: /*Aux volume left*/
|
||||
adgold->adgold_38x_regs[0x0d] = val;
|
||||
adgold->aux_vol_l = (int)(int8_t)(val - 128);
|
||||
break;
|
||||
case 0x0e: /*Aux volume right*/
|
||||
adgold->adgold_38x_regs[0x0e] = val;
|
||||
adgold->aux_vol_r = (int)(int8_t)(val - 128);
|
||||
break;
|
||||
|
||||
case 0x18: /*Surround*/
|
||||
adgold->adgold_38x_regs[0x18] = val;
|
||||
ym7128_write(&adgold->ym7128, val);
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
adgold->adgold_38x_regs[adgold->adgold_38x_addr] = val;
|
||||
@@ -380,6 +402,45 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
|
||||
case 0xc:
|
||||
adgold->adgold_mma_intpos[0] = (7 - ((val >> 2) & 7)) * 8;
|
||||
break;
|
||||
|
||||
case 0xd:
|
||||
adgold->adgold_midi_ctrl = val & 0x3f;
|
||||
|
||||
if ((adgold->adgold_midi_ctrl & 0x0f) != 0x0f) {
|
||||
if ((adgold->adgold_midi_ctrl & 0x0f) == 0x00) {
|
||||
adgold->uart_out = 0;
|
||||
adgold->uart_in = 0;
|
||||
adgold->midi_w = 0;
|
||||
adgold->midi_r = 0;
|
||||
adgold->adgold_mma_status &= ~0x8c;
|
||||
} else {
|
||||
if (adgold->adgold_midi_ctrl & 0x01)
|
||||
adgold->uart_in = 1;
|
||||
if (adgold->adgold_midi_ctrl & 0x04)
|
||||
adgold->uart_out = 1;
|
||||
if (adgold->adgold_midi_ctrl & 0x02) {
|
||||
adgold->uart_in = 0;
|
||||
adgold->midi_w = 0;
|
||||
adgold->midi_r = 0;
|
||||
}
|
||||
if (adgold->adgold_midi_ctrl & 0x08)
|
||||
adgold->uart_out = 0;
|
||||
adgold->adgold_mma_status &= ~0x80;
|
||||
}
|
||||
} else
|
||||
adgold->adgold_mma_status &= ~0x8c;
|
||||
|
||||
adgold_update_irq_status(adgold);
|
||||
break;
|
||||
|
||||
case 0xe:
|
||||
if (adgold->uart_out) {
|
||||
midi_raw_out_byte(val);
|
||||
|
||||
adgold->adgold_mma_status &= ~0x08;
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
break;
|
||||
}
|
||||
adgold->adgold_mma_regs[0][adgold->adgold_mma_addr] = val;
|
||||
break;
|
||||
@@ -467,9 +528,9 @@ uint8_t adgold_read(uint16_t addr, void *p)
|
||||
{
|
||||
case 0x00: /*Control/ID*/
|
||||
if (adgold->surround_enabled)
|
||||
temp = 0x50; /*16-bit ISA, surround module, no telephone/CDROM*/
|
||||
temp = 0x51; /*8-bit ISA, surround module, no telephone/CD-ROM*/
|
||||
else
|
||||
temp = 0x70; /*16-bit ISA, no telephone/surround/CD-ROM*/
|
||||
temp = 0x71; /*8-bit ISA, no telephone/surround/CD-ROM*/
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -482,7 +543,7 @@ uint8_t adgold_read(uint16_t addr, void *p)
|
||||
|
||||
case 4: case 6:
|
||||
temp = adgold->adgold_mma_status;
|
||||
adgold->adgold_mma_status = 0; /*JUKEGOLD expects timer status flags to auto-clear*/
|
||||
adgold->adgold_mma_status &= ~0xf3; /*JUKEGOLD expects timer status flags to auto-clear*/
|
||||
adgold_update_irq_status(adgold);
|
||||
break;
|
||||
case 5:
|
||||
@@ -491,12 +552,26 @@ uint8_t adgold_read(uint16_t addr, void *p)
|
||||
{
|
||||
case 6: /*Timer 2 low*/
|
||||
adgold->adgold_mma.timer2_read = adgold->adgold_mma.timer2_count;
|
||||
adgold->adgold_mma_status |= 0x40;
|
||||
temp = adgold->adgold_mma.timer2_read & 0xff;
|
||||
break;
|
||||
case 7: /*Timer 2 high*/
|
||||
temp = adgold->adgold_mma.timer2_read >> 8;
|
||||
break;
|
||||
|
||||
case 0xe:
|
||||
temp = 0;
|
||||
if (adgold->uart_in) {
|
||||
temp = adgold->midi_queue[adgold->midi_r];
|
||||
if (adgold->midi_r != adgold->midi_w) {
|
||||
adgold->midi_r++;
|
||||
adgold->midi_r &= 0x0f;
|
||||
}
|
||||
adgold->adgold_mma_status &= ~0x04;
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
temp = adgold->adgold_mma_regs[0][adgold->adgold_mma_addr];
|
||||
break;
|
||||
@@ -579,6 +654,17 @@ void adgold_timer_poll(void *p)
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
|
||||
timer_advance_u64(&adgold->adgold_mma_timer_count, (uint64_t)((double)TIMER_USEC * 1.88964));
|
||||
|
||||
if (adgold->adgold_midi_ctrl & 0x3f) {
|
||||
if ((adgold->adgold_midi_ctrl & 0x3f) != 0x3f) {
|
||||
if (adgold->uart_out)
|
||||
adgold->adgold_mma_status |= 0x08;
|
||||
if (adgold->adgold_midi_ctrl & 0x10)
|
||||
adgold->adgold_mma_status |= 0x80;
|
||||
}
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
|
||||
if (adgold->adgold_mma_regs[0][8] & 0x01) /*Timer 0*/
|
||||
{
|
||||
adgold->adgold_mma.timer0_count--;
|
||||
@@ -752,6 +838,59 @@ static void adgold_get_buffer(int32_t *buffer, int len, void *p)
|
||||
free(adgold_buffer);
|
||||
}
|
||||
|
||||
static void
|
||||
adgold_filter_cd_audio(int channel, double *buffer, void *p)
|
||||
{
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
double c;
|
||||
int aux = channel ? adgold->aux_vol_r : adgold->aux_vol_l;
|
||||
int vol = channel ? adgold->vol_r : adgold->vol_l;
|
||||
|
||||
c = ((((*buffer) * aux) / 4096.0) * vol) / 4096.0;
|
||||
*buffer = c;
|
||||
}
|
||||
|
||||
|
||||
static void adgold_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
uint8_t i;
|
||||
|
||||
if (adgold->sysex)
|
||||
return;
|
||||
|
||||
if (adgold->uart_in) {
|
||||
adgold->adgold_mma_status |= 0x04;
|
||||
|
||||
for (i=0; i < len; i++) {
|
||||
adgold->midi_queue[adgold->midi_w++] = msg[i];
|
||||
adgold->midi_w &= 0x0f;
|
||||
}
|
||||
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
}
|
||||
|
||||
static int adgold_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
{
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
uint32_t i;
|
||||
|
||||
if (abort) {
|
||||
adgold->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
adgold->sysex = 1;
|
||||
for (i=0;i<len;i++) {
|
||||
if (adgold->midi_r == adgold->midi_w)
|
||||
return (len-i);
|
||||
adgold->midi_queue[adgold->midi_w++] = buffer[i];
|
||||
adgold->midi_w &= 0x0f;
|
||||
}
|
||||
adgold->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void *adgold_init(const device_t *info)
|
||||
{
|
||||
@@ -762,6 +901,8 @@ void *adgold_init(const device_t *info)
|
||||
memset(adgold, 0, sizeof(adgold_t));
|
||||
|
||||
adgold->surround_enabled = device_get_config_int("surround");
|
||||
|
||||
adgold->gameport_enabled = device_get_config_int("gameport");
|
||||
|
||||
opl3_init(&adgold->opl);
|
||||
if (adgold->surround_enabled)
|
||||
@@ -798,6 +939,8 @@ void *adgold_init(const device_t *info)
|
||||
adgold->fm_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0a] - 128);
|
||||
adgold->samp_vol_l = (int)(int8_t)(adgold->adgold_eeprom[0x0b] - 128);
|
||||
adgold->samp_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0c] - 128);
|
||||
adgold->aux_vol_l = (int)(int8_t)(adgold->adgold_eeprom[0x0d] - 128);
|
||||
adgold->aux_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0e] - 128);
|
||||
|
||||
adgold->adgold_mma_enable[0] = 0;
|
||||
adgold->adgold_mma_fifo_start[0] = adgold->adgold_mma_fifo_end[0] = 0;
|
||||
@@ -805,10 +948,17 @@ void *adgold_init(const device_t *info)
|
||||
/*388/389 are handled by adlib_init*/
|
||||
io_sethandler(0x0388, 0x0008, adgold_read, NULL, NULL, adgold_write, NULL, NULL, adgold);
|
||||
|
||||
if (adgold->gameport_enabled)
|
||||
gameport_remap(gameport_add(&gameport_201_device), 0x201);
|
||||
|
||||
timer_add(&adgold->adgold_mma_timer_count, adgold_timer_poll, adgold, 1);
|
||||
|
||||
sound_add_handler(adgold_get_buffer, adgold);
|
||||
sound_set_cd_audio_filter(adgold_filter_cd_audio, adgold);
|
||||
|
||||
if (device_get_config_int("receive_input"))
|
||||
midi_in_handler(1, adgold_input_msg, adgold_input_sysex, adgold);
|
||||
|
||||
return adgold;
|
||||
}
|
||||
|
||||
@@ -829,9 +979,15 @@ void adgold_close(void *p)
|
||||
|
||||
static const device_config_t adgold_config[] =
|
||||
{
|
||||
{
|
||||
"gameport", "Enable Game port", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"surround", "Surround module", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
|
||||
@@ -67,9 +67,10 @@ typedef struct {
|
||||
uint32_t sr_cir;
|
||||
uint16_t sr_ram[128];
|
||||
|
||||
uint8_t uart_ctrl, uart_status,
|
||||
uart_res;
|
||||
uint32_t uart_fifo;
|
||||
uint8_t uart_data, uart_ctrl,
|
||||
uart_status, uart_res;
|
||||
uint32_t uart_fifo[8];
|
||||
uint8_t read_fifo_pos, write_fifo_pos;
|
||||
|
||||
ac97_codec_t * codec;
|
||||
uint32_t codec_ctrl;
|
||||
@@ -165,6 +166,8 @@ typedef struct {
|
||||
#define UART_STATUS_TXRDY (1<<1)
|
||||
#define UART_STATUS_RXRDY (1<<0)
|
||||
|
||||
#define UART_FIFO_BYTE_VALID 0x00000100
|
||||
|
||||
#define FORMAT_MONO_8 0
|
||||
#define FORMAT_STEREO_8 1
|
||||
#define FORMAT_MONO_16 2
|
||||
@@ -174,7 +177,6 @@ typedef struct {
|
||||
static void es1371_fetch(es1371_t *dev, int dac_nr);
|
||||
static void update_legacy(es1371_t *dev, uint32_t old_legacy_ctrl);
|
||||
|
||||
|
||||
#ifdef ENABLE_AUDIOPCI_LOG
|
||||
int audiopci_do_log = ENABLE_AUDIOPCI_LOG;
|
||||
|
||||
@@ -205,10 +207,12 @@ es1371_update_irqs(es1371_t *dev)
|
||||
if ((dev->int_status & INT_STATUS_DAC2) && (dev->si_cr & SI_P2_INTR_EN))
|
||||
irq = 1;
|
||||
|
||||
/* MIDI input is unsupported for now */
|
||||
if ((dev->int_status & INT_STATUS_UART) && (dev->uart_status & UART_STATUS_TXINT) &&
|
||||
((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20))
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
|
||||
if ((dev->uart_status & UART_STATUS_TXINT) || (dev->uart_status & UART_STATUS_RXINT)) {
|
||||
dev->int_status |= INT_STATUS_UART;
|
||||
irq = 1;
|
||||
}
|
||||
|
||||
if (irq)
|
||||
dev->int_status |= INT_STATUS_INTR;
|
||||
@@ -225,10 +229,96 @@ es1371_update_irqs(es1371_t *dev)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_update_tx_irq(es1371_t *dev)
|
||||
{
|
||||
dev->uart_status &= ~UART_STATUS_TXINT;
|
||||
|
||||
if (((dev->uart_ctrl & UART_CTRL_TXINTEN) == 0x20) && (dev->uart_status & UART_STATUS_TXRDY))
|
||||
dev->uart_status |= UART_STATUS_TXINT;
|
||||
|
||||
es1371_update_irqs(dev);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_set_tx_irq(es1371_t *dev, int set)
|
||||
{
|
||||
dev->uart_status &= ~UART_STATUS_TXRDY;
|
||||
|
||||
if (set)
|
||||
dev->uart_status |= UART_STATUS_TXRDY;
|
||||
|
||||
es1371_update_tx_irq(dev);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_update_rx_irq(es1371_t *dev)
|
||||
{
|
||||
dev->uart_status &= ~UART_STATUS_RXINT;
|
||||
|
||||
if ((dev->uart_ctrl & UART_CTRL_RXINTEN) && (dev->uart_status & UART_STATUS_RXRDY))
|
||||
dev->uart_status |= UART_STATUS_RXINT;
|
||||
|
||||
es1371_update_irqs(dev);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_set_rx_irq(es1371_t *dev, int set)
|
||||
{
|
||||
dev->uart_status &= ~UART_STATUS_RXRDY;
|
||||
|
||||
if (set)
|
||||
dev->uart_status |= UART_STATUS_RXRDY;
|
||||
|
||||
es1371_update_rx_irq(dev);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_scan_fifo(es1371_t *dev)
|
||||
{
|
||||
if (dev->read_fifo_pos != dev->write_fifo_pos) {
|
||||
dev->uart_data = dev->uart_fifo[dev->read_fifo_pos];
|
||||
dev->read_fifo_pos = (dev->read_fifo_pos + 1) & 7;
|
||||
|
||||
es1371_set_rx_irq(dev, 1);
|
||||
} else
|
||||
es1371_set_rx_irq(dev, 0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_write_fifo(es1371_t *dev, uint8_t val)
|
||||
{
|
||||
if (dev->write_fifo_pos < 8) {
|
||||
dev->uart_fifo[dev->write_fifo_pos] = val | UART_FIFO_BYTE_VALID;
|
||||
dev->write_fifo_pos = (dev->write_fifo_pos + 1) & 7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_reset_fifo(es1371_t *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
dev->uart_fifo[i] = 0x00000000;
|
||||
|
||||
dev->read_fifo_pos = dev->write_fifo_pos = 0;
|
||||
|
||||
es1371_set_rx_irq(dev, 0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_reset(void *p)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *) p;
|
||||
int i;
|
||||
|
||||
nmi = 0;
|
||||
|
||||
@@ -316,7 +406,14 @@ es1371_reset(void *p)
|
||||
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
dev->uart_fifo = 0xfffffe00;
|
||||
for (i = 0; i < 8; i++)
|
||||
dev->uart_fifo[i] = 0xffff0000;
|
||||
|
||||
/* Reset the UART TX. */
|
||||
es1371_set_tx_irq(dev, 0);
|
||||
|
||||
/* Reset the UART (RX) FIFO. */
|
||||
es1371_reset_fifo(dev);
|
||||
|
||||
/* Update interrupts to ensure they're all correctly cleared. */
|
||||
es1371_update_irqs(dev);
|
||||
@@ -344,7 +441,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
audiopci_log("[30:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
|
||||
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -363,7 +463,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
audiopci_log("[34:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
|
||||
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -377,7 +480,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
audiopci_log("[38:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
|
||||
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -391,12 +497,19 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
audiopci_log("[3C:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
|
||||
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (page == 0x0e || page == 0x0f) {
|
||||
audiopci_log("Read frame = %02x, page = %02x, uart fifo valid = %02x, temp = %03x\n", frame, page, dev->valid, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -420,7 +533,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
audiopci_log("[30:%02X] dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -441,7 +556,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
audiopci_log("[34:%02X] dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -455,7 +572,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
audiopci_log("[38:%02X] dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -470,11 +589,17 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
audiopci_log("[3C:%02X] dev->uart_fifo[%02X] = %08X\n", page,
|
||||
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
|
||||
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (page == 0x0e || page == 0x0f) {
|
||||
audiopci_log("Write frame = %02x, page = %02x, uart fifo = %08x, val = %02x\n", frame, page, dev->uart_fifo, val);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -505,21 +630,27 @@ es1371_inb(uint16_t port, void *p)
|
||||
must be for a reason */
|
||||
case 0x04:
|
||||
ret = dev->int_status & 0xff;
|
||||
audiopci_log("[R] STATUS 0- 7 = %02X\n", ret);
|
||||
break;
|
||||
case 0x05:
|
||||
ret = (dev->int_status >> 8) & 0xff;
|
||||
audiopci_log("[R] STATUS 8-15 = %02X\n", ret);
|
||||
break;
|
||||
case 0x06:
|
||||
ret = (dev->int_status >> 16) & 0x0f;
|
||||
audiopci_log("[R] STATUS 16-23 = %02X\n", ret);
|
||||
break;
|
||||
case 0x07:
|
||||
ret = ((dev->int_status >> 24) & 0x03) | 0xfc;
|
||||
audiopci_log("[R] STATUS 24-31 = %02X\n", ret);
|
||||
break;
|
||||
|
||||
/* UART Data Register, Address 08H
|
||||
Addressable as byte only */
|
||||
case 0x08:
|
||||
ret = 0x00;
|
||||
ret = dev->uart_data;
|
||||
es1371_set_rx_irq(dev, 0);
|
||||
audiopci_log("[R] UART DATA = %02X\n", ret);
|
||||
break;
|
||||
|
||||
/* UART Status Register, Address 09H
|
||||
@@ -533,6 +664,7 @@ es1371_inb(uint16_t port, void *p)
|
||||
Addressable as byte only */
|
||||
case 0x0a:
|
||||
ret = dev->uart_res & 0x01;
|
||||
audiopci_log("[R] UART RES = %02X\n", ret);
|
||||
break;
|
||||
|
||||
/* Memory Page Register, Address 0CH
|
||||
@@ -661,6 +793,8 @@ es1371_inw(uint16_t port, void *p)
|
||||
break;
|
||||
}
|
||||
|
||||
audiopci_log("es1371_inw: port=%04x ret=%04x\n", port, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -682,6 +816,7 @@ es1371_inl(uint16_t port, void *p)
|
||||
Addressable as longword only */
|
||||
case 0x04:
|
||||
ret = dev->int_status;
|
||||
audiopci_log("[R] STATUS = %08X\n", ret);
|
||||
break;
|
||||
|
||||
/* Memory Page Register, Address 0CH
|
||||
@@ -783,22 +918,36 @@ es1371_outb(uint16_t port, uint8_t val, void *p)
|
||||
/* UART Data Register, Address 08H
|
||||
Addressable as byte only */
|
||||
case 0x08:
|
||||
audiopci_log("MIDI data = %02x\n", val);
|
||||
/* TX does not use FIFO. */
|
||||
midi_raw_out_byte(val);
|
||||
es1371_set_tx_irq(dev, 1);
|
||||
break;
|
||||
|
||||
/* UART Control Register, Address 09H
|
||||
Addressable as byte only */
|
||||
case 0x09:
|
||||
audiopci_log("[W] UART CTRL = %02X\n", val);
|
||||
dev->uart_ctrl = val & 0xe3;
|
||||
if ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20)
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
es1371_update_irqs(dev);
|
||||
audiopci_log("ES1371 UART Cntrl = %02x\n", dev->uart_ctrl);
|
||||
|
||||
if ((val & 0x03) == 0x03) {
|
||||
/* Reset TX */
|
||||
es1371_set_tx_irq(dev, 1);
|
||||
|
||||
/* Software reset */
|
||||
es1371_reset_fifo(dev);
|
||||
} else {
|
||||
es1371_set_tx_irq(dev, 1);
|
||||
|
||||
es1371_update_tx_irq(dev);
|
||||
es1371_update_rx_irq(dev);
|
||||
}
|
||||
break;
|
||||
|
||||
/* UART Reserved Register, Address 0AH
|
||||
Addressable as byte only */
|
||||
case 0x0a:
|
||||
audiopci_log("[W] UART RES = %02X\n", val);
|
||||
dev->uart_res = val & 0x01;
|
||||
break;
|
||||
|
||||
@@ -965,6 +1114,7 @@ es1371_outl(uint16_t port, uint32_t val, void *p)
|
||||
/* Interrupt/Chip Select Status Register, Address 04H
|
||||
Addressable as longword only */
|
||||
case 0x04:
|
||||
audiopci_log("[W] STATUS = %08X\n", val);
|
||||
break;
|
||||
|
||||
/* Memory Page Register, Address 0CH
|
||||
@@ -1704,29 +1854,10 @@ es1371_poll(void *p)
|
||||
|
||||
timer_advance_u64(&dev->dac[1].timer, dev->dac[1].latch);
|
||||
|
||||
es1371_scan_fifo(dev);
|
||||
|
||||
es1371_update(dev);
|
||||
|
||||
if (dev->int_ctrl & INT_UART_EN) {
|
||||
//audiopci_log("UART INT Enabled\n");
|
||||
if (dev->uart_ctrl & UART_CTRL_RXINTEN) {
|
||||
/* We currently don't implement MIDI Input.
|
||||
But if anything sets MIDI Input and Output together we'd have to take account
|
||||
of the MIDI Output case, and disable IRQ's and RX bits when MIDI Input is
|
||||
enabled as well but not in the MIDI Output portion */
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
} else if (!(dev->uart_ctrl & UART_CTRL_RXINTEN) && ((dev->uart_ctrl & UART_CTRL_TXINTEN))) {
|
||||
/* Or enable the UART IRQ and the respective TX bits only when the MIDI Output is
|
||||
enabled */
|
||||
dev->int_status |= INT_STATUS_UART;
|
||||
} else {
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
}
|
||||
|
||||
//audiopci_log("UART control = %02x\n", dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN));
|
||||
es1371_update_irqs(dev);
|
||||
}
|
||||
|
||||
if (dev->int_ctrl & INT_DAC1_EN) {
|
||||
frac = dev->dac[0].ac & 0x7fff;
|
||||
idx = dev->dac[0].ac >> 15;
|
||||
@@ -1846,12 +1977,51 @@ generate_es1371_filter(void)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *)p;
|
||||
uint8_t i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
es1371_write_fifo(dev, msg[i]);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
es1371_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *)p;
|
||||
uint32_t i = -1;
|
||||
|
||||
audiopci_log("Abort = %i\n", abort);
|
||||
|
||||
if (dev->uart_status & UART_STATUS_RXRDY)
|
||||
abort = 1;
|
||||
|
||||
if (!abort) {
|
||||
for (i = 0; i < len; i++) {
|
||||
es1371_write_fifo(dev, buffer[i]);
|
||||
if (dev->uart_status & UART_STATUS_RXRDY)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The last sent position is in i. Return 7 - i. */
|
||||
|
||||
return 7 - i;
|
||||
}
|
||||
|
||||
|
||||
static void *
|
||||
es1371_init(const device_t *info)
|
||||
{
|
||||
es1371_t *dev = malloc(sizeof(es1371_t));
|
||||
memset(dev, 0x00, sizeof(es1371_t));
|
||||
|
||||
if (device_get_config_int("receive_input"))
|
||||
midi_in_handler(1, es1371_input_msg, es1371_input_sysex, dev);
|
||||
|
||||
sound_add_handler(es1371_get_buffer, dev);
|
||||
sound_set_cd_audio_filter(es1371_filter_cd_audio, dev);
|
||||
|
||||
@@ -1920,7 +2090,11 @@ static const device_config_t es1371_config[] =
|
||||
}
|
||||
},
|
||||
.default_int = AC97_CODEC_CS4297A
|
||||
}, {
|
||||
},
|
||||
{
|
||||
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1125,7 +1125,7 @@ static void gus_get_buffer(int32_t *buffer, int len, void *p)
|
||||
gus->pos = 0;
|
||||
}
|
||||
|
||||
static void gus_input_msg(void *p, uint8_t *msg)
|
||||
static void gus_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
gus_t *gus = (gus_t *)p;
|
||||
uint8_t i;
|
||||
@@ -1136,7 +1136,7 @@ static void gus_input_msg(void *p, uint8_t *msg)
|
||||
if (gus->uart_in) {
|
||||
gus->midi_status |= MIDI_INT_RECEIVE;
|
||||
|
||||
for (i=0;i<msg[3];i++) {
|
||||
for (i=0; i < len; i++) {
|
||||
gus->midi_queue[gus->midi_w++] = msg[i];
|
||||
gus->midi_w &= 63;
|
||||
}
|
||||
|
||||
@@ -1385,6 +1385,17 @@ MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
|
||||
mpu401_log("MPU401 Input Sysex\n");
|
||||
|
||||
#ifdef DOSBOX_CODE
|
||||
if (mpu->mode == M_UART) {
|
||||
#else
|
||||
if (!mpu->intelligent || mpu->mode == M_UART) {
|
||||
#endif
|
||||
/* UART mode input. */
|
||||
for (i = 0; i < len; i++)
|
||||
MPU401_QueueByte(mpu, buffer[i]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mpu->filter.sysex_in) {
|
||||
if (abort) {
|
||||
mpu->state.sysex_in_finished=1;
|
||||
@@ -1422,12 +1433,12 @@ MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
|
||||
/*Input handler for MIDI*/
|
||||
void
|
||||
MPU401_InputMsg(void *p, uint8_t *msg)
|
||||
MPU401_InputMsg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
mpu_t *mpu = (mpu_t *)p;
|
||||
int i, tick;
|
||||
static uint8_t old_msg = 0;
|
||||
uint8_t len = msg[3], key;
|
||||
uint8_t key;
|
||||
uint8_t recdata[2], recmsg[4];
|
||||
int send = 1, send_thru = 0;
|
||||
int retrigger_thru = 0, chan, chrefnum;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <86box/filters.h>
|
||||
#include <86box/snd_mpu401.h>
|
||||
#include <86box/snd_opl.h>
|
||||
#include <86box/snd_sb.h>
|
||||
#include <86box/snd_sb_dsp.h>
|
||||
|
||||
|
||||
@@ -413,7 +414,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
|
||||
{
|
||||
if (!(val & 0x20))
|
||||
{
|
||||
if (val & 2) pas16->pit.rl[0] = timer_get_remaining_u64(&pit.timer[0]) / PITCONST;;
|
||||
if (val & 2) pas16->pit.rl[0] = timer_get_remaining_u64(&pas16->pit.timer[0]) / PITCONST;;
|
||||
if (val & 4) pas16->pit.rl[1] = pas16->pit.c[1];
|
||||
if (val & 8) pas16->pit.rl[2] = pas16->pit.c[2];
|
||||
}
|
||||
@@ -429,7 +430,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
|
||||
if (!(pas16->pit.ctrl & 0x30))
|
||||
{
|
||||
if (!t)
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
|
||||
else
|
||||
{
|
||||
pas16->pit.rl[t] = pas16->pit.c[t];
|
||||
@@ -450,7 +451,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
|
||||
{
|
||||
pas16->pit.rm[t] = 3;
|
||||
if (!t)
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
|
||||
else
|
||||
pas16->pit.rl[t] = pas16->pit.c[t];
|
||||
}
|
||||
@@ -519,8 +520,8 @@ static uint8_t pas16_pit_in(uint16_t port, void *p)
|
||||
pas16->pit.rereadlatch[t] = 0;
|
||||
if (!t)
|
||||
{
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
|
||||
if ((timer_get_remaining_u64(&pit.timer[t]) / PITCONST) > 65536)
|
||||
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
|
||||
if ((timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST) > 65536)
|
||||
pas16->pit.rl[t] = 0xFFFF;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1036,15 +1036,15 @@ sb_read(uint16_t a, void *priv)
|
||||
|
||||
|
||||
void
|
||||
sb_dsp_input_msg(void *p, uint8_t *msg)
|
||||
sb_dsp_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
sb_dsp_t *dsp = (sb_dsp_t *) p;
|
||||
uint8_t len = msg[3], i = 0;
|
||||
uint8_t i = 0;
|
||||
|
||||
sb_dsp_log("MIDI in sysex = %d, uart irq = %d, msg = %d\n", dsp->midi_in_sysex, dsp->uart_irq, msg[3]);
|
||||
sb_dsp_log("MIDI in sysex = %d, uart irq = %d, msg = %d\n", dsp->midi_in_sysex, dsp->uart_irq, len);
|
||||
|
||||
if (!dsp->uart_irq && !dsp->midi_in_poll && (dsp->mpu != NULL)) {
|
||||
MPU401_InputMsg(dsp->mpu, msg);
|
||||
MPU401_InputMsg(dsp->mpu, msg, len);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -323,10 +323,12 @@ sound_cd_thread(void *param)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
if (sound_is_float)
|
||||
givealbuffer_cd(cd_out_buffer);
|
||||
else
|
||||
givealbuffer_cd(cd_out_buffer_int16);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,10 +432,12 @@ sound_poll(void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_OPENAL
|
||||
if (sound_is_float)
|
||||
givealbuffer(outbuffer_ex);
|
||||
else
|
||||
givealbuffer(outbuffer_ex_int16);
|
||||
#endif
|
||||
|
||||
if (cd_thread_enable) {
|
||||
cd_buf_update--;
|
||||
@@ -462,7 +466,9 @@ sound_reset(void)
|
||||
|
||||
midi_device_init();
|
||||
midi_in_device_init();
|
||||
#ifdef USE_OPENAL
|
||||
inital();
|
||||
#endif
|
||||
|
||||
timer_add(&sound_poll_timer, sound_poll, NULL, 1);
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ int rctrl_is_lalt;
|
||||
int update_icons;
|
||||
int kbd_req_capture;
|
||||
int hide_status_bar;
|
||||
int hide_tool_bar;
|
||||
int fixed_size_x = 640;
|
||||
int fixed_size_y = 480;
|
||||
extern int title_set;
|
||||
@@ -374,9 +375,9 @@ void *
|
||||
plat_mmap(size_t size, uint8_t executable)
|
||||
{
|
||||
#if defined __APPLE__ && defined MAP_JIT
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0);
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), -1, 0);
|
||||
#else
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0);
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
#endif
|
||||
return (ret < 0) ? NULL : ret;
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#define ROM_DIAMOND_STEALTH_VRAM "roms/video/s3/Diamond Stealth VRAM BIOS v2.31 U14.BIN"
|
||||
#define ROM_AMI_86C924 "roms/video/s3/S3924AMI.BIN"
|
||||
#define ROM_METHEUS_86C928 "roms/video/s3/928.VBI"
|
||||
#define ROM_SPEA_MERCURY_LITE_PCI "roms/video/s3/SPEAVGA.VBI"
|
||||
#define ROM_SPEA_MIRAGE_86C801 "roms/video/s3/V7MIRAGE.VBI"
|
||||
#define ROM_SPEA_MIRAGE_86C805 "roms/video/s3/86c805pspeavlbus.BIN"
|
||||
#define ROM_MIROCRYSTAL8S_805 "roms/video/s3/S3_805VL_ATT20C491_miroCRYSTAL_8s_ver1.4.BIN"
|
||||
@@ -104,7 +105,8 @@ enum
|
||||
S3_PHOENIX_VISION968,
|
||||
S3_MIROCRYSTAL8S_805,
|
||||
S3_NUMBER9_9FX_531,
|
||||
S3_NUMBER9_9FX_771
|
||||
S3_NUMBER9_9FX_771,
|
||||
S3_SPEA_MERCURY_LITE_PCI
|
||||
};
|
||||
|
||||
|
||||
@@ -113,22 +115,24 @@ enum
|
||||
S3_86C911 = 0x00,
|
||||
S3_86C924 = 0x02,
|
||||
S3_86C928 = 0x04,
|
||||
S3_86C801 = 0x06,
|
||||
S3_86C805 = 0x07,
|
||||
S3_VISION964 = 0x08,
|
||||
S3_VISION968 = 0x10,
|
||||
S3_VISION864 = 0x18,
|
||||
S3_VISION868 = 0x20,
|
||||
S3_TRIO32 = 0x28,
|
||||
S3_TRIO64 = 0x30,
|
||||
S3_TRIO64V = 0x38,
|
||||
S3_TRIO64V2 = 0x40
|
||||
S3_86C928PCI = 0x06,
|
||||
S3_86C801 = 0x07,
|
||||
S3_86C805 = 0x08,
|
||||
S3_VISION964 = 0x18,
|
||||
S3_VISION968 = 0x20,
|
||||
S3_VISION864 = 0x28,
|
||||
S3_VISION868 = 0x30,
|
||||
S3_TRIO32 = 0x38,
|
||||
S3_TRIO64 = 0x40,
|
||||
S3_TRIO64V = 0x48,
|
||||
S3_TRIO64V2 = 0x50
|
||||
};
|
||||
|
||||
|
||||
static video_timings_t timing_s3_86c911 = {VIDEO_ISA, 4, 4, 5, 20, 20, 35};
|
||||
static video_timings_t timing_s3_86c801 = {VIDEO_ISA, 4, 4, 5, 20, 20, 35};
|
||||
static video_timings_t timing_s3_86c805 = {VIDEO_BUS, 4, 4, 5, 20, 20, 35};
|
||||
static video_timings_t timing_s3_86c928pci = {VIDEO_PCI, 2, 2, 4, 26, 26, 42};
|
||||
static video_timings_t timing_s3_stealth64_vlb = {VIDEO_BUS, 2, 2, 4, 26, 26, 42};
|
||||
static video_timings_t timing_s3_stealth64_pci = {VIDEO_PCI, 2, 2, 4, 26, 26, 42};
|
||||
static video_timings_t timing_s3_vision864_vlb = {VIDEO_BUS, 4, 4, 5, 20, 20, 35};
|
||||
@@ -563,7 +567,7 @@ static void
|
||||
s3_accel_out_pixtrans_w(s3_t *s3, uint16_t val)
|
||||
{
|
||||
svga_t *svga = &s3->svga;
|
||||
|
||||
|
||||
if (s3->accel.cmd & 0x100) {
|
||||
switch (s3->accel.cmd & 0x600) {
|
||||
case 0x000:
|
||||
@@ -1173,7 +1177,8 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
else
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), s3);
|
||||
} else {
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), s3);
|
||||
if (s3->chip != S3_86C928PCI)
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), s3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1197,7 +1202,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
}
|
||||
break;
|
||||
case 0x200:
|
||||
/*Windows 95's built-in driver expects this to be loaded regardless of the byte swap bit (0xE2E9) in the 86c928*/
|
||||
/*Windows 95's built-in driver expects this to be loaded regardless of the byte swap bit (0xE2E9) in the 86c928 ISA/VLB*/
|
||||
if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) {
|
||||
if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
@@ -1205,7 +1210,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
else
|
||||
s3_accel_start(16, 1, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8), 0, s3);
|
||||
} else {
|
||||
if (s3->chip == S3_86C928)
|
||||
if (s3->chip == S3_86C928 || s3->chip == S3_86C928PCI)
|
||||
s3_accel_out_pixtrans_w(s3, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8));
|
||||
else {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
@@ -1214,6 +1219,15 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8), s3);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (s3->chip == S3_86C928 || s3->chip == S3_86C928PCI)
|
||||
s3_accel_out_pixtrans_w(s3, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8));
|
||||
else {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[1] | (s3->accel.pix_trans[0] << 8), s3);
|
||||
else
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8), s3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x400:
|
||||
@@ -1261,7 +1275,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
s3_accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8) | (s3->accel.pix_trans[2] << 16) | (s3->accel.pix_trans[3] << 24), s3);
|
||||
break;
|
||||
case 0x200:
|
||||
/*Windows 95's built-in driver expects the upper 16 bits to be loaded instead of the whole 32-bit one, regardless of the byte swap bit (0xE2EB) in the 86c928*/
|
||||
/*Windows 95's built-in driver expects the upper 16 bits to be loaded instead of the whole 32-bit one, regardless of the byte swap bit (0xE2EB) in the 86c928 ISA/VLB card*/
|
||||
if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) {
|
||||
if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
@@ -1269,7 +1283,7 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
else
|
||||
s3_accel_start(16, 1, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8) | (s3->accel.pix_trans[2] << 16) | (s3->accel.pix_trans[3] << 24), 0, s3);
|
||||
} else {
|
||||
if (s3->chip == S3_86C928)
|
||||
if (s3->chip == S3_86C928 || s3->chip == S3_86C928PCI)
|
||||
s3_accel_out_pixtrans_w(s3, s3->accel.pix_trans[2] | (s3->accel.pix_trans[3] << 8));
|
||||
else {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
@@ -1278,6 +1292,15 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val)
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8) | (s3->accel.pix_trans[2] << 16) | (s3->accel.pix_trans[3] << 24), s3);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (s3->chip == S3_86C928 || s3->chip == S3_86C928PCI)
|
||||
s3_accel_out_pixtrans_w(s3, s3->accel.pix_trans[2] | (s3->accel.pix_trans[3] << 8));
|
||||
else {
|
||||
if (s3->accel.cmd & 0x1000)
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[3] | (s3->accel.pix_trans[2] << 8) | (s3->accel.pix_trans[1] << 16) | (s3->accel.pix_trans[0] << 24), s3);
|
||||
else
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[1] << 8) | (s3->accel.pix_trans[2] << 16) | (s3->accel.pix_trans[3] << 24), s3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x400:
|
||||
@@ -1360,7 +1383,7 @@ s3_accel_write_fifo(s3_t *s3, uint32_t addr, uint8_t val)
|
||||
if ((addr >= 0x08000) && (addr <= 0x0803f))
|
||||
s3_pci_write(0, addr & 0xff, val, s3);
|
||||
}
|
||||
|
||||
|
||||
switch (addr & 0x1fffe) {
|
||||
case 0x8100: addr = 0x82e8; break; /*ALT_CURXY*/
|
||||
case 0x8102: addr = 0x86e8; break;
|
||||
@@ -2405,8 +2428,10 @@ s3_out(uint16_t addr, uint8_t val, void *p)
|
||||
{
|
||||
case 0x3c2:
|
||||
if ((s3->chip == S3_VISION964) || (s3->chip == S3_VISION968) || (s3->chip == S3_86C928)) {
|
||||
if (((val >> 2) & 3) != 3)
|
||||
icd2061_write(svga->clock_gen, (val >> 2) & 3);
|
||||
if ((s3->card_type != S3_SPEA_MERCURY_P64V) && (s3->card_type != S3_MIROVIDEO40SV_ERGO_968)) {
|
||||
if (((val >> 2) & 3) != 3)
|
||||
icd2061_write(svga->clock_gen, (val >> 2) & 3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2472,6 +2497,8 @@ s3_out(uint16_t addr, uint8_t val, void *p)
|
||||
sc1148x_ramdac_out(addr, rs2, val, svga->ramdac, svga);
|
||||
} else if (s3->card_type == S3_NUMBER9_9FX_531)
|
||||
att498_ramdac_out(addr, rs2, val, svga->ramdac, svga);
|
||||
else if ((s3->chip == S3_86C928PCI) && (s3->card_type == S3_SPEA_MERCURY_LITE_PCI))
|
||||
sc1502x_ramdac_out(addr, val, svga->ramdac, svga);
|
||||
else
|
||||
sdac_ramdac_out(addr, rs2, val, svga->ramdac, svga);
|
||||
return;
|
||||
@@ -2760,6 +2787,8 @@ s3_in(uint16_t addr, void *p)
|
||||
return sc1148x_ramdac_in(addr, rs2, svga->ramdac, svga);
|
||||
else if (s3->card_type == S3_NUMBER9_9FX_531)
|
||||
return att498_ramdac_in(addr, rs2, svga->ramdac, svga);
|
||||
else if ((s3->chip == S3_86C928PCI) && (s3->card_type == S3_SPEA_MERCURY_LITE_PCI))
|
||||
return sc1502x_ramdac_in(addr, svga->ramdac, svga);
|
||||
else
|
||||
return sdac_ramdac_in(addr, rs2, svga->ramdac, svga);
|
||||
break;
|
||||
@@ -2880,7 +2909,7 @@ static void s3_recalctimings(svga_t *svga)
|
||||
if (s3->card_type == S3_MIROCRYSTAL10SD_805 || s3->card_type == S3_MIROCRYSTAL20SD_864 ||
|
||||
s3->card_type == S3_MIROCRYSTAL20SV_964 || s3->card_type == S3_SPEA_MIRAGE_86C801 ||
|
||||
s3->card_type == S3_SPEA_MIRAGE_86C805 || s3->card_type == S3_MIROCRYSTAL8S_805 ||
|
||||
s3->card_type == S3_NUMBER9_9FX_531) {
|
||||
s3->card_type == S3_NUMBER9_9FX_531 || s3->card_type == S3_SPEA_MERCURY_LITE_PCI) {
|
||||
if (!(svga->crtc[0x5e] & 0x04))
|
||||
svga->vblankstart = svga->dispend;
|
||||
if (svga->bpp != 32) {
|
||||
@@ -3006,7 +3035,8 @@ static void s3_recalctimings(svga_t *svga)
|
||||
svga->hdisp = s3->width;
|
||||
}
|
||||
|
||||
if (s3->card_type == S3_SPEA_MIRAGE_86C801 || s3->card_type == S3_SPEA_MIRAGE_86C805)
|
||||
if (s3->card_type == S3_SPEA_MIRAGE_86C801 || s3->card_type == S3_SPEA_MIRAGE_86C805 ||
|
||||
s3->card_type == S3_SPEA_MERCURY_LITE_PCI)
|
||||
svga->hdisp = s3->width;
|
||||
break;
|
||||
case 16:
|
||||
@@ -3034,7 +3064,8 @@ static void s3_recalctimings(svga_t *svga)
|
||||
svga->hdisp = s3->width;
|
||||
}
|
||||
|
||||
if (s3->card_type == S3_SPEA_MIRAGE_86C801 || s3->card_type == S3_SPEA_MIRAGE_86C805)
|
||||
if (s3->card_type == S3_SPEA_MIRAGE_86C801 || s3->card_type == S3_SPEA_MIRAGE_86C805 ||
|
||||
s3->card_type == S3_SPEA_MERCURY_LITE_PCI)
|
||||
svga->hdisp = s3->width;
|
||||
break;
|
||||
case 24:
|
||||
@@ -3044,6 +3075,15 @@ static void s3_recalctimings(svga_t *svga)
|
||||
svga->hdisp /= 3;
|
||||
else
|
||||
svga->hdisp = (svga->hdisp * 2) / 3;
|
||||
|
||||
if (s3->card_type == S3_SPEA_MERCURY_LITE_PCI) {
|
||||
if (s3->width == 2048)
|
||||
switch (svga->dispend) {
|
||||
case 480:
|
||||
svga->hdisp = 640;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (s3->card_type == S3_MIROVIDEO40SV_ERGO_968 || s3->card_type == S3_PHOENIX_VISION968 ||
|
||||
s3->card_type == S3_SPEA_MERCURY_P64V)
|
||||
@@ -3085,7 +3125,7 @@ static void s3_recalctimings(svga_t *svga)
|
||||
s3->width = 800;
|
||||
svga->hdisp = 800;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3292,6 +3332,7 @@ s3_updatemapping(s3_t *s3)
|
||||
case S3_TRIO64V:
|
||||
case S3_TRIO64V2:
|
||||
case S3_86C928:
|
||||
case S3_86C928PCI:
|
||||
s3->linear_size = 0x400000;
|
||||
break;
|
||||
default:
|
||||
@@ -3842,8 +3883,9 @@ s3_accel_in(uint16_t port, void *p)
|
||||
s3_accel_start(16, 1, s3->accel.pix_trans[0], 0, s3);
|
||||
else
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0], s3);
|
||||
} else
|
||||
} else {
|
||||
s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0], s3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -5235,7 +5277,6 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, s3_
|
||||
/*Bit 4 of the Command register is the draw yes bit, which enables writing to memory/reading from memory when enabled.
|
||||
When this bit is disabled, no writing to memory/reading from memory is allowed. (This bit is almost meaningless on
|
||||
the NOP command)*/
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case 0: /*NOP (Short Stroke Vectors)*/
|
||||
@@ -6129,8 +6170,6 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, s3_
|
||||
frgd_mix = (s3->accel.frgd_mix >> 5) & 3;
|
||||
bkgd_mix = (s3->accel.bkgd_mix >> 5) & 3;
|
||||
|
||||
|
||||
|
||||
while ((s3->accel.poly_cy < end_y1) && (s3->accel.poly_cy2 < end_y2))
|
||||
{
|
||||
int y = s3->accel.poly_cy;
|
||||
@@ -6278,7 +6317,7 @@ s3_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, s3_
|
||||
|
||||
ROPMIX
|
||||
|
||||
if (s3->accel.cmd & 0x10) {
|
||||
if (s3->accel.cmd & 0x10) {
|
||||
WRITE(s3->accel.dest + s3->accel.dx, out);
|
||||
}
|
||||
}
|
||||
@@ -6615,6 +6654,7 @@ static void s3_reset(void *priv)
|
||||
break;
|
||||
|
||||
case S3_METHEUS_86C928:
|
||||
case S3_SPEA_MERCURY_LITE_PCI:
|
||||
svga->crtc[0x5a] = 0x0a;
|
||||
break;
|
||||
|
||||
@@ -6763,6 +6803,11 @@ static void *s3_init(const device_t *info)
|
||||
else
|
||||
video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_86c801);
|
||||
break;
|
||||
case S3_SPEA_MERCURY_LITE_PCI:
|
||||
bios_fn = ROM_SPEA_MERCURY_LITE_PCI;
|
||||
chip = S3_86C928PCI;
|
||||
video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_86c928pci);
|
||||
break;
|
||||
case S3_MIROCRYSTAL20SD_864:
|
||||
bios_fn = ROM_MIROCRYSTAL20SD_864_VLB;
|
||||
chip = S3_VISION864;
|
||||
@@ -7159,7 +7204,20 @@ static void *s3_init(const device_t *info)
|
||||
svga->ramdac = device_add(&bt485_ramdac_device);
|
||||
svga->clock_gen = device_add(&icd2061_device);
|
||||
svga->getclock = icd2061_getclock;
|
||||
break;
|
||||
break;
|
||||
|
||||
case S3_SPEA_MERCURY_LITE_PCI:
|
||||
svga->decode_mask = (4 << 20) - 1;
|
||||
stepping = 0xb0; /*86C928PCI*/
|
||||
s3->id = stepping;
|
||||
s3->id_ext = stepping;
|
||||
s3->id_ext_pci = stepping;
|
||||
s3->packed_mmio = 0;
|
||||
svga->crtc[0x5a] = 0x0a;
|
||||
svga->ramdac = device_add(&sc1502x_ramdac_device);
|
||||
svga->clock_gen = device_add(&av9194_device);
|
||||
svga->getclock = av9194_getclock;
|
||||
break;
|
||||
|
||||
case S3_PARADISE_BAHAMAS64:
|
||||
case S3_PHOENIX_VISION864:
|
||||
@@ -7219,13 +7277,15 @@ static void *s3_init(const device_t *info)
|
||||
}
|
||||
|
||||
if (info->local == S3_ELSAWIN2KPROX || info->local == S3_PHOENIX_VISION968 ||
|
||||
info->local == S3_NUMBER9_9FX_771)
|
||||
info->local == S3_NUMBER9_9FX_771) {
|
||||
svga->ramdac = device_add(&ibm_rgb528_ramdac_device);
|
||||
else
|
||||
svga->clock_gen = device_add(&icd2061_device);
|
||||
svga->getclock = icd2061_getclock;
|
||||
} else {
|
||||
svga->ramdac = device_add(&tvp3026_ramdac_device);
|
||||
|
||||
svga->clock_gen = device_add(&icd2061_device);
|
||||
svga->getclock = icd2061_getclock;
|
||||
svga->clock_gen = svga->ramdac;
|
||||
svga->getclock = tvp3026_getclock;
|
||||
}
|
||||
break;
|
||||
|
||||
case S3_NUMBER9_9FX_531:
|
||||
@@ -7380,6 +7440,11 @@ static int s3_metheus_86c928_available(void)
|
||||
return rom_present(ROM_METHEUS_86C928);
|
||||
}
|
||||
|
||||
static int s3_spea_mercury_lite_pci_available(void)
|
||||
{
|
||||
return rom_present(ROM_SPEA_MERCURY_LITE_PCI);
|
||||
}
|
||||
|
||||
static int s3_bahamas64_available(void)
|
||||
{
|
||||
return rom_present(ROM_PARADISE_BAHAMAS64);
|
||||
@@ -7796,6 +7861,20 @@ const device_t s3_metheus_86c928_vlb_device =
|
||||
s3_standard_config
|
||||
};
|
||||
|
||||
const device_t s3_spea_mercury_lite_86c928_pci_device =
|
||||
{
|
||||
"S3 86c928 PCI (SPEA Mercury Lite)",
|
||||
DEVICE_PCI,
|
||||
S3_SPEA_MERCURY_LITE_PCI,
|
||||
s3_init,
|
||||
s3_close,
|
||||
s3_reset,
|
||||
{ s3_spea_mercury_lite_pci_available },
|
||||
s3_speed_changed,
|
||||
s3_force_redraw,
|
||||
s3_standard_config
|
||||
};
|
||||
|
||||
const device_t s3_mirocrystal_20sd_864_vlb_device =
|
||||
{
|
||||
"S3 Vision864 VLB (MiroCRYSTAL 20SD)",
|
||||
|
||||
@@ -61,7 +61,7 @@ static int dither[4][4] =
|
||||
#define FIFO_ENTRY_SIZE (1 << 31)
|
||||
|
||||
#define FIFO_ENTRIES (virge->fifo_write_idx - virge->fifo_read_idx)
|
||||
#define FIFO_FULL ((virge->fifo_write_idx - virge->fifo_read_idx) >= FIFO_SIZE)
|
||||
#define FIFO_FULL ((virge->fifo_write_idx - virge->fifo_read_idx) >= (FIFO_SIZE - 4))
|
||||
#define FIFO_EMPTY (virge->fifo_read_idx == virge->fifo_write_idx)
|
||||
|
||||
#define FIFO_TYPE 0xff000000
|
||||
@@ -70,6 +70,7 @@ static int dither[4][4] =
|
||||
#define ROM_VIRGE_325 "roms/video/s3virge/86c325.bin"
|
||||
#define ROM_DIAMOND_STEALTH3D_2000 "roms/video/s3virge/s3virge.bin"
|
||||
#define ROM_DIAMOND_STEALTH3D_3000 "roms/video/s3virge/diamondstealth3000.vbi"
|
||||
#define ROM_STB_VELOCITY_3D "roms/video/s3virge/stb_velocity3d_110.BIN"
|
||||
#define ROM_VIRGE_DX "roms/video/s3virge/86c375_1.bin"
|
||||
#define ROM_DIAMOND_STEALTH3D_2000PRO "roms/video/s3virge/virgedxdiamond.vbi"
|
||||
#define ROM_VIRGE_GX "roms/video/s3virge/86c375_4.bin"
|
||||
@@ -82,6 +83,7 @@ enum
|
||||
S3_VIRGE_325,
|
||||
S3_DIAMOND_STEALTH3D_2000,
|
||||
S3_DIAMOND_STEALTH3D_3000,
|
||||
S3_STB_VELOCITY_3D,
|
||||
S3_VIRGE_DX,
|
||||
S3_DIAMOND_STEALTH3D_2000PRO,
|
||||
S3_VIRGE_GX,
|
||||
@@ -288,7 +290,6 @@ typedef struct virge_t
|
||||
int sec_x, sec_y, sec_w, sec_h;
|
||||
} streams;
|
||||
|
||||
int fifo_slot;
|
||||
uint8_t cmd_dma;
|
||||
uint8_t dma_bs;
|
||||
uint32_t cmd_dma_base;
|
||||
@@ -302,6 +303,10 @@ typedef struct virge_t
|
||||
fifo_entry_t fifo[FIFO_SIZE];
|
||||
volatile int fifo_read_idx, fifo_write_idx;
|
||||
|
||||
thread_t *fifo_thread;
|
||||
event_t *wake_fifo_thread;
|
||||
event_t *fifo_not_full_event;
|
||||
|
||||
int virge_busy, local;
|
||||
|
||||
uint8_t subsys_stat, subsys_cntl, advfunc_cntl;
|
||||
@@ -417,6 +422,11 @@ s3_virge_tri_timer(void *p)
|
||||
thread_set_event(virge->wake_render_thread); /*Wake up FIFO thread if moving from idle*/
|
||||
}
|
||||
|
||||
static __inline void
|
||||
wake_fifo_thread(virge_t *virge)
|
||||
{
|
||||
thread_set_event(virge->wake_fifo_thread); /*Wake up FIFO thread if moving from idle*/
|
||||
}
|
||||
|
||||
static void
|
||||
queue_triangle(virge_t *virge)
|
||||
@@ -970,7 +980,8 @@ static void s3_virge_updatemapping(virge_t *virge)
|
||||
mem_mapping_disable(&virge->new_mmio_mapping);
|
||||
}
|
||||
|
||||
static void s3_virge_vblank_start(svga_t *svga)
|
||||
static void
|
||||
s3_virge_vblank_start(svga_t *svga)
|
||||
{
|
||||
virge_t *virge = (virge_t *)svga->p;
|
||||
|
||||
@@ -978,6 +989,16 @@ static void s3_virge_vblank_start(svga_t *svga)
|
||||
s3_virge_update_irqs(virge);
|
||||
}
|
||||
|
||||
static void
|
||||
s3_virge_wait_fifo_idle(virge_t *virge)
|
||||
{
|
||||
while (!FIFO_EMPTY)
|
||||
{
|
||||
wake_fifo_thread(virge);
|
||||
thread_wait_event(virge->fifo_not_full_event, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
s3_virge_mmio_read(uint32_t addr, void *p)
|
||||
{
|
||||
@@ -989,14 +1010,12 @@ s3_virge_mmio_read(uint32_t addr, void *p)
|
||||
switch (addr & 0xffff)
|
||||
{
|
||||
case 0x8505:
|
||||
ret = 0;
|
||||
if (virge->s3d_busy || virge->fifo_slot) {
|
||||
ret = 0x10;
|
||||
} else {
|
||||
ret = 0x30;
|
||||
}
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
if (virge->s3d_busy || virge->virge_busy || !FIFO_EMPTY)
|
||||
ret = 0x10;
|
||||
else
|
||||
ret = 0x10 | (1 << 5);
|
||||
if (!virge->virge_busy)
|
||||
wake_fifo_thread(virge);
|
||||
return ret;
|
||||
|
||||
case 0x83b0: case 0x83b1: case 0x83b2: case 0x83b3:
|
||||
@@ -1014,6 +1033,7 @@ s3_virge_mmio_read(uint32_t addr, void *p)
|
||||
return s3_virge_in(addr & 0x3ff, virge);
|
||||
|
||||
case 0x859c:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
return virge->cmd_dma;
|
||||
|
||||
case 0xff20: case 0xff21:
|
||||
@@ -1030,22 +1050,21 @@ static uint16_t
|
||||
s3_virge_mmio_read_w(uint32_t addr, void *p)
|
||||
{
|
||||
virge_t *virge = (virge_t *)p;
|
||||
uint32_t ret = 0xffff;
|
||||
uint16_t ret = 0xffff;
|
||||
|
||||
s3_virge_log("[%04X:%08X]: MMIO ReadW addr = %04x\n", CS, cpu_state.pc, addr & 0xfffe);
|
||||
|
||||
switch (addr & 0xfffe) {
|
||||
case 0x8504:
|
||||
if (!virge->fifo_slot)
|
||||
if (FIFO_EMPTY)
|
||||
virge->subsys_stat |= INT_FIFO_EMP;
|
||||
ret |= virge->subsys_stat;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= 0x30; /*A bit of a workaround at the moment.*/
|
||||
s3_virge_update_irqs(virge);
|
||||
return ret;
|
||||
return ret;
|
||||
|
||||
case 0x859c:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
return virge->cmd_dma;
|
||||
|
||||
default:
|
||||
@@ -1134,78 +1153,91 @@ s3_virge_mmio_read_l(uint32_t addr, void *p)
|
||||
break;
|
||||
|
||||
case 0x8504:
|
||||
if (virge->s3d_busy || virge->fifo_slot) {
|
||||
if (virge->s3d_busy || virge->virge_busy || !FIFO_EMPTY)
|
||||
ret = (0x10 << 8);
|
||||
} else {
|
||||
else
|
||||
ret = (0x10 << 8) | (1 << 13);
|
||||
if (!virge->s3d_busy)
|
||||
virge->subsys_stat |= INT_3DF_EMP;
|
||||
if (!virge->fifo_slot)
|
||||
virge->subsys_stat |= INT_FIFO_EMP;
|
||||
}
|
||||
ret |= virge->subsys_stat;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
s3_virge_update_irqs(virge);
|
||||
if (!virge->virge_busy)
|
||||
wake_fifo_thread(virge);
|
||||
dmahdr->dblword_read = 0;
|
||||
dmahdr->dblword_write = 0;
|
||||
break;
|
||||
|
||||
case 0x8590:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->cmd_dma_base;
|
||||
break;
|
||||
case 0x8594:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
break;
|
||||
case 0x8598:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->dma_ptr;
|
||||
break;
|
||||
case 0x859c:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->cmd_dma;
|
||||
break;
|
||||
|
||||
case 0xa4d4:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.src_base;
|
||||
break;
|
||||
case 0xa4d8:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.dest_base;
|
||||
break;
|
||||
case 0xa4dc:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.clip_l << 16) | virge->s3d.clip_r;
|
||||
break;
|
||||
case 0xa4e0:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.clip_t << 16) | virge->s3d.clip_b;
|
||||
break;
|
||||
case 0xa4e4:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.dest_str << 16) | virge->s3d.src_str;
|
||||
break;
|
||||
case 0xa4e8: case 0xace8:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.mono_pat_0;
|
||||
break;
|
||||
case 0xa4ec: case 0xacec:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.mono_pat_1;
|
||||
break;
|
||||
case 0xa4f0:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.pat_bg_clr;
|
||||
break;
|
||||
case 0xa4f4:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.pat_fg_clr;
|
||||
break;
|
||||
case 0xa4f8:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.src_bg_clr;
|
||||
break;
|
||||
case 0xa4fc:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.src_fg_clr;
|
||||
break;
|
||||
case 0xa500:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = virge->s3d.cmd_set;
|
||||
break;
|
||||
case 0xa504:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.r_width << 16) | virge->s3d.r_height;
|
||||
break;
|
||||
case 0xa508:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.rsrc_x << 16) | virge->s3d.rsrc_y;
|
||||
break;
|
||||
case 0xa50c:
|
||||
s3_virge_wait_fifo_idle(virge);
|
||||
ret = (virge->s3d.rdest_x << 16) | virge->s3d.rdest_y;
|
||||
break;
|
||||
|
||||
@@ -1242,14 +1274,96 @@ s3_virge_mmio_read_l(uint32_t addr, void *p)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
fifo_thread(void *param)
|
||||
{
|
||||
virge_t *virge = (virge_t *)param;
|
||||
|
||||
static void s3_virge_mmio_write(uint32_t addr, uint8_t val, void *p)
|
||||
while (virge->fifo_thread_run)
|
||||
{
|
||||
thread_set_event(virge->fifo_not_full_event);
|
||||
thread_wait_event(virge->wake_fifo_thread, -1);
|
||||
thread_reset_event(virge->wake_fifo_thread);
|
||||
virge->virge_busy = 1;
|
||||
while (!FIFO_EMPTY)
|
||||
{
|
||||
uint64_t start_time = plat_timer_read();
|
||||
uint64_t end_time;
|
||||
uint32_t addr, val;
|
||||
fifo_entry_t *fifo = &virge->fifo[virge->fifo_read_idx & FIFO_MASK];
|
||||
addr = fifo->addr_type & FIFO_ADDR;
|
||||
val = fifo->val;
|
||||
|
||||
switch (fifo->addr_type & FIFO_TYPE)
|
||||
{
|
||||
case FIFO_WRITE_BYTE:
|
||||
if ((addr & 0xfffc) < 0x8000)
|
||||
s3_virge_bitblt(virge, 8, val);
|
||||
break;
|
||||
case FIFO_WRITE_WORD:
|
||||
if ((addr & 0xfffc) < 0x8000)
|
||||
{
|
||||
if (virge->s3d.cmd_set & CMD_SET_MS)
|
||||
s3_virge_bitblt(virge, 16, ((val >> 8) | (val << 8)) << 16);
|
||||
else
|
||||
s3_virge_bitblt(virge, 16, val);
|
||||
}
|
||||
break;
|
||||
case FIFO_WRITE_DWORD:
|
||||
if ((addr & 0xfffc) < 0x8000)
|
||||
{
|
||||
if (virge->s3d.cmd_set & CMD_SET_MS)
|
||||
s3_virge_bitblt(virge, 32, ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
|
||||
else
|
||||
s3_virge_bitblt(virge, 32, val);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
virge->fifo_read_idx++;
|
||||
fifo->addr_type = FIFO_INVALID;
|
||||
|
||||
if (FIFO_ENTRIES > 0xe000)
|
||||
thread_set_event(virge->fifo_not_full_event);
|
||||
|
||||
end_time = plat_timer_read();
|
||||
virge_time += end_time - start_time;
|
||||
}
|
||||
virge->virge_busy = 0;
|
||||
virge->subsys_stat |= INT_FIFO_EMP | INT_3DF_EMP;
|
||||
s3_virge_update_irqs(virge);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
s3_virge_queue(virge_t *virge, uint32_t addr, uint32_t val, uint32_t type)
|
||||
{
|
||||
fifo_entry_t *fifo = &virge->fifo[virge->fifo_write_idx & FIFO_MASK];
|
||||
|
||||
if (FIFO_FULL)
|
||||
{
|
||||
thread_reset_event(virge->fifo_not_full_event);
|
||||
if (FIFO_FULL)
|
||||
thread_wait_event(virge->fifo_not_full_event, -1); /*Wait for room in ringbuffer*/
|
||||
}
|
||||
|
||||
fifo->val = val;
|
||||
fifo->addr_type = (addr & FIFO_ADDR) | type;
|
||||
|
||||
virge->fifo_write_idx++;
|
||||
|
||||
if (FIFO_ENTRIES > 0xe000 || FIFO_ENTRIES < 8)
|
||||
wake_fifo_thread(virge);
|
||||
}
|
||||
|
||||
static void
|
||||
s3_virge_mmio_write(uint32_t addr, uint8_t val, void *p)
|
||||
{
|
||||
virge_t *virge = (virge_t *)p;
|
||||
s3_virge_log("MMIO WriteB addr = %04x, val = %02x\n", addr & 0xffff, val);
|
||||
|
||||
if ((addr & 0xffff) < 0x8000) {
|
||||
s3_virge_bitblt(virge, 8, val);
|
||||
s3_virge_queue(virge, addr, val, FIFO_WRITE_BYTE);
|
||||
} else {
|
||||
switch (addr & 0xffff) {
|
||||
case 0x83b0: case 0x83b1: case 0x83b2: case 0x83b3:
|
||||
@@ -1286,10 +1400,7 @@ s3_virge_mmio_write_w(uint32_t addr, uint16_t val, void *p)
|
||||
s3_virge_log("[%04X:%08X]: MMIO WriteW addr = %04x, val = %04x\n", CS, cpu_state.pc, addr & 0xfffe, val);
|
||||
|
||||
if ((addr & 0xfffe) < 0x8000) {
|
||||
if (virge->s3d.cmd_set & CMD_SET_MS)
|
||||
s3_virge_bitblt(virge, 16, ((val >> 8) | (val << 8)) << 16);
|
||||
else
|
||||
s3_virge_bitblt(virge, 16, val);
|
||||
s3_virge_queue(virge, addr, val, FIFO_WRITE_WORD);
|
||||
} else {
|
||||
if ((addr & 0xfffe) == 0x83d4) {
|
||||
s3_virge_mmio_write(addr, val, virge);
|
||||
@@ -1310,17 +1421,19 @@ s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *p)
|
||||
|
||||
s3_virge_log("MMIO WriteL addr = %04x, val = %08x\n", addr & 0xfffc, val);
|
||||
if ((addr & 0xfffc) < 0x8000) {
|
||||
if ((addr & 0xe000) == 0) {
|
||||
if (virge->s3d.cmd_set & CMD_SET_MS)
|
||||
s3_virge_bitblt(virge, 32, ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
|
||||
else
|
||||
s3_virge_bitblt(virge, 32, val);
|
||||
s3_virge_bitblt(virge, 32, val);
|
||||
} else {
|
||||
s3_virge_queue(virge, addr, val, FIFO_WRITE_DWORD);
|
||||
}
|
||||
|
||||
if (virge->cmd_dma) {
|
||||
dmahdr->datatype = 1;
|
||||
}
|
||||
} else {
|
||||
if ((addr & 0xfffc) >= 0xa000)
|
||||
virge->fifo_slot++;
|
||||
if (virge->cmd_dma) {
|
||||
dmahdr->datatype = 0;
|
||||
}
|
||||
@@ -3875,6 +3988,7 @@ static void s3_virge_reset(void *priv)
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
case S3_DIAMOND_STEALTH3D_3000:
|
||||
case S3_STB_VELOCITY_3D:
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
case S3_VIRGE_GX2:
|
||||
@@ -3950,6 +4064,9 @@ static void *s3_virge_init(const device_t *info)
|
||||
case S3_DIAMOND_STEALTH3D_3000:
|
||||
bios_fn = ROM_DIAMOND_STEALTH3D_3000;
|
||||
break;
|
||||
case S3_STB_VELOCITY_3D:
|
||||
bios_fn = ROM_STB_VELOCITY_3D;
|
||||
break;
|
||||
case S3_VIRGE_DX:
|
||||
bios_fn = ROM_VIRGE_DX;
|
||||
break;
|
||||
@@ -4041,6 +4158,7 @@ static void *s3_virge_init(const device_t *info)
|
||||
video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_diamond_stealth3d_2000_pci);
|
||||
break;
|
||||
case S3_DIAMOND_STEALTH3D_3000:
|
||||
case S3_STB_VELOCITY_3D:
|
||||
virge->svga.decode_mask = (8 << 20) - 1;
|
||||
virge->virge_id_high = 0x88;
|
||||
virge->virge_id_low = 0x3d;
|
||||
@@ -4135,6 +4253,11 @@ static void *s3_virge_init(const device_t *info)
|
||||
virge->render_thread_run = 1;
|
||||
virge->render_thread = thread_create(render_thread, virge);
|
||||
|
||||
virge->wake_fifo_thread = thread_create_event();
|
||||
virge->fifo_not_full_event = thread_create_event();
|
||||
virge->fifo_thread_run = 1;
|
||||
virge->fifo_thread = thread_create(fifo_thread, virge);
|
||||
|
||||
timer_add(&virge->tri_timer, s3_virge_tri_timer, virge, 0);
|
||||
|
||||
virge->local = info->local;
|
||||
@@ -4153,6 +4276,12 @@ static void s3_virge_close(void *p)
|
||||
thread_destroy_event(virge->wake_main_thread);
|
||||
thread_destroy_event(virge->wake_render_thread);
|
||||
|
||||
virge->fifo_thread_run = 0;
|
||||
thread_set_event(virge->wake_fifo_thread);
|
||||
thread_wait(virge->fifo_thread);
|
||||
thread_destroy_event(virge->wake_fifo_thread);
|
||||
thread_destroy_event(virge->fifo_not_full_event);
|
||||
|
||||
svga_close(&virge->svga);
|
||||
|
||||
ddc_close(virge->ddc);
|
||||
@@ -4176,6 +4305,11 @@ static int s3_virge_988_diamond_available(void)
|
||||
return rom_present(ROM_DIAMOND_STEALTH3D_3000);
|
||||
}
|
||||
|
||||
static int s3_virge_988_stb_available(void)
|
||||
{
|
||||
return rom_present(ROM_STB_VELOCITY_3D);
|
||||
}
|
||||
|
||||
static int s3_virge_375_available(void)
|
||||
{
|
||||
return rom_present(ROM_VIRGE_DX);
|
||||
@@ -4302,6 +4436,20 @@ const device_t s3_diamond_stealth_3000_pci_device =
|
||||
s3_virge_config
|
||||
};
|
||||
|
||||
const device_t s3_stb_velocity_3d_pci_device =
|
||||
{
|
||||
"S3 ViRGE/VX (STB Velocity 3D) PCI",
|
||||
DEVICE_PCI,
|
||||
S3_STB_VELOCITY_3D,
|
||||
s3_virge_init,
|
||||
s3_virge_close,
|
||||
s3_virge_reset,
|
||||
{ s3_virge_988_stb_available },
|
||||
s3_virge_speed_changed,
|
||||
s3_virge_force_redraw,
|
||||
s3_virge_config
|
||||
};
|
||||
|
||||
const device_t s3_virge_375_pci_device =
|
||||
{
|
||||
"S3 ViRGE/DX (375) PCI",
|
||||
|
||||
@@ -138,6 +138,7 @@ video_cards[] = {
|
||||
{ "cl_gd5480_pci", &gd5480_pci_device },
|
||||
{ "ctl3d_banshee_pci", &creative_voodoo_banshee_device },
|
||||
{ "stealth32_pci", &et4000w32p_pci_device },
|
||||
{ "spea_mercurylite_pci", &s3_spea_mercury_lite_86c928_pci_device },
|
||||
{ "stealth64v_pci", &s3_diamond_stealth64_964_pci_device },
|
||||
{ "elsawin2kprox_964_pci", &s3_elsa_winner2000_pro_x_964_pci_device },
|
||||
{ "mirocrystal20sv_pci", &s3_mirocrystal_20sv_964_pci_device },
|
||||
@@ -160,6 +161,7 @@ video_cards[] = {
|
||||
{ "virge325_pci", &s3_virge_325_pci_device },
|
||||
{ "stealth3d_2000_pci", &s3_diamond_stealth_2000_pci_device },
|
||||
{ "stealth3d_3000_pci", &s3_diamond_stealth_3000_pci_device },
|
||||
{ "stb_velocity3d_pci", &s3_stb_velocity_3d_pci_device },
|
||||
{ "virge375_pci", &s3_virge_375_pci_device },
|
||||
{ "stealth3d_2000pro_pci", &s3_diamond_stealth_2000pro_pci_device },
|
||||
{ "virge385_pci", &s3_virge_385_pci_device },
|
||||
|
||||
@@ -47,6 +47,12 @@ typedef struct
|
||||
uint8_t misc;
|
||||
uint8_t type;
|
||||
uint8_t mode;
|
||||
uint8_t pll_addr;
|
||||
uint8_t clock_sel;
|
||||
struct
|
||||
{
|
||||
uint8_t m, n, p;
|
||||
} pix, mem, loop;
|
||||
} tvp3026_ramdac_t;
|
||||
|
||||
static void
|
||||
@@ -96,7 +102,6 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t
|
||||
rs |= (!!rs2 << 2);
|
||||
rs |= (!!rs3 << 3);
|
||||
|
||||
|
||||
switch (rs) {
|
||||
case 0x00: /* Palette Write Index Register (RS value = 0000) */
|
||||
ramdac->ind_idx = val;
|
||||
@@ -152,7 +157,7 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t
|
||||
svga->dac_hwcursor.xsize = svga->dac_hwcursor.ysize = 64;
|
||||
svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.xsize;
|
||||
svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.ysize;
|
||||
svga->dac_hwcursor.ena = ((val & 0x03) != 0);
|
||||
svga->dac_hwcursor.ena = !!(val & 0x03);
|
||||
ramdac->mode = val & 0x03;
|
||||
}
|
||||
break;
|
||||
@@ -163,7 +168,7 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t
|
||||
svga->dac_hwcursor.xsize = svga->dac_hwcursor.ysize = 64;
|
||||
svga->dac_hwcursor.x = ramdac->hwc_x - svga->dac_hwcursor.xsize;
|
||||
svga->dac_hwcursor.y = ramdac->hwc_y - svga->dac_hwcursor.ysize;
|
||||
svga->dac_hwcursor.ena = ((val & 0x03) != 0);
|
||||
svga->dac_hwcursor.ena = !!(val & 0x03);
|
||||
ramdac->mode = val & 0x03;
|
||||
break;
|
||||
case 0x0f: /* Latch Control */
|
||||
@@ -177,6 +182,9 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t
|
||||
ramdac->mcr = val;
|
||||
tvp3026_set_bpp(ramdac, svga);
|
||||
break;
|
||||
case 0x1a: /* Clock Selection */
|
||||
ramdac->clock_sel = val;
|
||||
break;
|
||||
case 0x1c: /* Palette-Page Register */
|
||||
ramdac->ppr = val;
|
||||
break;
|
||||
@@ -187,6 +195,51 @@ tvp3026_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t
|
||||
ramdac->misc = val;
|
||||
svga->ramdac_type = (val & 0x08) ? RAMDAC_8BIT : RAMDAC_6BIT;
|
||||
break;
|
||||
case 0x2c: /* PLL Address */
|
||||
ramdac->pll_addr = val;
|
||||
break;
|
||||
case 0x2d: /* Pixel clock PLL data */
|
||||
switch (ramdac->pll_addr & 3) {
|
||||
case 0:
|
||||
ramdac->pix.n = val;
|
||||
break;
|
||||
case 1:
|
||||
ramdac->pix.m = val;
|
||||
break;
|
||||
case 2:
|
||||
ramdac->pix.p = val;
|
||||
break;
|
||||
}
|
||||
ramdac->pll_addr = ((ramdac->pll_addr + 1) & 3) | (ramdac->pll_addr & 0xfc);
|
||||
break;
|
||||
case 0x2e: /* Memory Clock PLL Data */
|
||||
switch ((ramdac->pll_addr >> 2) & 3) {
|
||||
case 0:
|
||||
ramdac->mem.n = val;
|
||||
break;
|
||||
case 1:
|
||||
ramdac->mem.m = val;
|
||||
break;
|
||||
case 2:
|
||||
ramdac->mem.p = val;
|
||||
break;
|
||||
}
|
||||
ramdac->pll_addr = ((ramdac->pll_addr + 4) & 0x0c) | (ramdac->pll_addr & 0xf3);
|
||||
break;
|
||||
case 0x2f: /* Loop Clock PLL Data */
|
||||
switch ((ramdac->pll_addr >> 4) & 3) {
|
||||
case 0:
|
||||
ramdac->loop.n = val;
|
||||
break;
|
||||
case 1:
|
||||
ramdac->loop.m = val;
|
||||
break;
|
||||
case 2:
|
||||
ramdac->loop.p = val;
|
||||
break;
|
||||
}
|
||||
ramdac->pll_addr = ((ramdac->pll_addr + 0x10) & 0x30) | (ramdac->pll_addr & 0xcf);
|
||||
break;
|
||||
case 0x39: /* MCLK/Loop Clock Control */
|
||||
ramdac->mclk = val;
|
||||
break;
|
||||
@@ -292,6 +345,9 @@ tvp3026_ramdac_in(uint16_t addr, int rs2, int rs3, void *p, svga_t *svga)
|
||||
case 0x19: /* Multiplex Control */
|
||||
temp = ramdac->mcr;
|
||||
break;
|
||||
case 0x1a: /* Clock Selection */
|
||||
temp = ramdac->clock_sel;
|
||||
break;
|
||||
case 0x1c: /* Palette-Page Register */
|
||||
temp = ramdac->ppr;
|
||||
break;
|
||||
@@ -301,6 +357,54 @@ tvp3026_ramdac_in(uint16_t addr, int rs2, int rs3, void *p, svga_t *svga)
|
||||
case 0x1e: /* Miscellaneous Control */
|
||||
temp = ramdac->misc;
|
||||
break;
|
||||
case 0x2c: /* PLL Address */
|
||||
temp = ramdac->pll_addr;
|
||||
break;
|
||||
case 0x2d: /* Pixel clock PLL data */
|
||||
switch (ramdac->pll_addr & 3) {
|
||||
case 0:
|
||||
temp = ramdac->pix.n;
|
||||
break;
|
||||
case 1:
|
||||
temp = ramdac->pix.m;
|
||||
break;
|
||||
case 2:
|
||||
temp = ramdac->pix.p;
|
||||
break;
|
||||
case 3:
|
||||
temp = 0x40; /*PLL locked to frequency*/
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x2e: /* Memory Clock PLL Data */
|
||||
switch ((ramdac->pll_addr >> 2) & 3) {
|
||||
case 0:
|
||||
temp = ramdac->mem.n;
|
||||
break;
|
||||
case 1:
|
||||
temp = ramdac->mem.m;
|
||||
break;
|
||||
case 2:
|
||||
temp = ramdac->mem.p;
|
||||
break;
|
||||
case 3:
|
||||
temp = 0x40; /*PLL locked to frequency*/
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x2f: /* Loop Clock PLL Data */
|
||||
switch ((ramdac->pll_addr >> 4) & 3) {
|
||||
case 0:
|
||||
temp = ramdac->loop.n;
|
||||
break;
|
||||
case 1:
|
||||
temp = ramdac->loop.m;
|
||||
break;
|
||||
case 2:
|
||||
temp = ramdac->loop.p;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x39: /* MCLK/Loop Clock Control */
|
||||
temp = ramdac->mclk;
|
||||
break;
|
||||
@@ -436,6 +540,29 @@ tvp3026_hwcursor_draw(svga_t *svga, int displine)
|
||||
}
|
||||
|
||||
|
||||
float
|
||||
tvp3026_getclock(int clock, void *p)
|
||||
{
|
||||
tvp3026_ramdac_t *ramdac = (tvp3026_ramdac_t *) p;
|
||||
int n, m, pl;
|
||||
float f_vco, f_pll;
|
||||
|
||||
if (clock == 0)
|
||||
return 25175000.0;
|
||||
if (clock == 1)
|
||||
return 28322000.0;
|
||||
|
||||
/*Fvco = 8 x Fref x (65 - M) / (65 - N)*/
|
||||
/*Fpll = Fvco / 2^P*/
|
||||
n = ramdac->pix.n & 0x3f;
|
||||
m = ramdac->pix.m & 0x3f;
|
||||
pl = ramdac->pix.p & 0x03;
|
||||
f_vco = 8.0 * 14318184 * (float)(65 - m) / (float)(65 - n);
|
||||
f_pll = f_vco / (float)(1 << pl);
|
||||
|
||||
return f_pll;
|
||||
}
|
||||
|
||||
void *
|
||||
tvp3026_ramdac_init(const device_t *info)
|
||||
{
|
||||
@@ -447,6 +574,7 @@ tvp3026_ramdac_init(const device_t *info)
|
||||
ramdac->latch_cntl = 0x06;
|
||||
ramdac->true_color = 0x80;
|
||||
ramdac->mcr = 0x98;
|
||||
ramdac->clock_sel = 0x07;
|
||||
ramdac->mclk = 0x18;
|
||||
|
||||
return ramdac;
|
||||
|
||||
@@ -139,6 +139,13 @@ END
|
||||
185 ICON DISCARDABLE ICON_PATH "icons/mo_empty_active.ico"
|
||||
192 ICON DISCARDABLE ICON_PATH "icons/cassette_empty.ico"
|
||||
193 ICON DISCARDABLE ICON_PATH "icons/cassette_empty_active.ico"
|
||||
200 ICON DISCARDABLE ICON_PATH "icons/run.ico"
|
||||
201 ICON DISCARDABLE ICON_PATH "icons/pause.ico"
|
||||
202 ICON DISCARDABLE ICON_PATH "icons/send_cad.ico"
|
||||
203 ICON DISCARDABLE ICON_PATH "icons/send_cae.ico"
|
||||
204 ICON DISCARDABLE ICON_PATH "icons/hard_reset.ico"
|
||||
205 ICON DISCARDABLE ICON_PATH "icons/acpi_shutdown.ico"
|
||||
206 ICON DISCARDABLE ICON_PATH "icons/settings.ico"
|
||||
232 ICON DISCARDABLE ICON_PATH "icons/cartridge_empty.ico"
|
||||
240 ICON DISCARDABLE ICON_PATH "icons/machine.ico"
|
||||
241 ICON DISCARDABLE ICON_PATH "icons/display.ico"
|
||||
@@ -372,6 +379,7 @@ END
|
||||
#include "languages/it-IT.rc"
|
||||
#include "languages/ja-JP.rc"
|
||||
#include "languages/ko-KR.rc"
|
||||
#include "languages/pl-PL.rc"
|
||||
#include "languages/pt-BR.rc"
|
||||
#include "languages/pt-PT.rc"
|
||||
#include "languages/ru-RU.rc"
|
||||
|
||||
@@ -21,7 +21,7 @@ add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c
|
||||
add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c
|
||||
win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c
|
||||
win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c
|
||||
win_opengl_glslp.c 86Box.rc)
|
||||
win_opengl_glslp.c win_toolbar.c 86Box.rc)
|
||||
|
||||
if(NOT CPPTHREADS)
|
||||
target_sources(plat PRIVATE win_thread.c)
|
||||
|
||||
@@ -69,6 +69,15 @@ ifeq ($(DEV_BUILD), y)
|
||||
ifndef XL24
|
||||
XL24 := y
|
||||
endif
|
||||
ifndef ISAMEM_RAMPAGE
|
||||
ISAMEM_RAMPAGE := y
|
||||
endif
|
||||
ifndef ISAMEM_IAB
|
||||
ISAMEM_IAB := y
|
||||
endif
|
||||
ifndef ISAMEM_BRAT
|
||||
ISAMEM_BRAT := y
|
||||
endif
|
||||
ifndef OLIVETTI
|
||||
OLIVETTI := y
|
||||
endif
|
||||
@@ -118,6 +127,15 @@ else
|
||||
ifndef XL24
|
||||
XL24 := n
|
||||
endif
|
||||
ifndef ISAMEM_RAMPAGE
|
||||
ISAMEM_RAMPAGE := n
|
||||
endif
|
||||
ifndef ISAMEM_IAB
|
||||
ISAMEM_IAB := n
|
||||
endif
|
||||
ifndef ISAMEM_BRAT
|
||||
ISAMEM_BRAT := n
|
||||
endif
|
||||
ifndef OLIVETTI
|
||||
OLIVETTI := n
|
||||
endif
|
||||
@@ -450,6 +468,18 @@ ifeq ($(XL24), y)
|
||||
OPTS += -DUSE_XL24
|
||||
endif
|
||||
|
||||
ifeq ($(ISAMEM_RAMPAGE), y)
|
||||
OPTS += -DUSE_ISAMEM_RAMPAGE
|
||||
endif
|
||||
|
||||
ifeq ($(ISAMEM_IAB), y)
|
||||
OPTS += -DUSE_ISAMEM_IAB
|
||||
endif
|
||||
|
||||
ifeq ($(ISAMEM_BRAT), y)
|
||||
OPTS += -DUSE_ISAMEM_BRAT
|
||||
endif
|
||||
|
||||
ifeq ($(OLIVETTI), y)
|
||||
OPTS += -DUSE_OLIVETTI
|
||||
DEVBROBJ += olivetti_eva.o
|
||||
@@ -691,7 +721,7 @@ UIOBJ := win_ui.o win_icon.o win_stbar.o win_discord.o \
|
||||
win_dialog.o win_about.o \
|
||||
win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \
|
||||
win_new_floppy.o win_jsconf.o \
|
||||
win_media_menu.o
|
||||
win_media_menu.o win_toolbar.o
|
||||
|
||||
ifeq ($(DINPUT), y)
|
||||
PLATOBJ += win_joystick.o
|
||||
|
||||
BIN
src/win/icons/acpi_shutdown.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/hard_reset.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/pause.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/run.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/send_cad.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/send_cae.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/settings.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Zobrazení"
|
||||
BEGIN
|
||||
MENUITEM "&Schovat stavový řádek", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Schovat panel &nástrojů", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Měnitelná velikost okna", IDM_VID_RESIZE
|
||||
MENUITEM "&Pamatovat velikost a pozici", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Obrazy cartridge (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Všechny soubory (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Obnovit"
|
||||
IDS_2155 "Pozastavit"
|
||||
IDS_2156 "Stisknout Ctrl+Alt+Delete"
|
||||
IDS_2157 "Stisknout Ctrl+Alt+Esc"
|
||||
IDS_2158 "Resetovat"
|
||||
IDS_2159 "Vypnout skrze rozhraní ACPI"
|
||||
IDS_2160 "Nastavení"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Ansicht"
|
||||
BEGIN
|
||||
MENUITEM "&Statusleiste ausblenden", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Größenverstellbares Fenster", IDM_VID_RESIZE
|
||||
MENUITEM "&Größe && Position merken", IDM_VID_REMEMBER
|
||||
@@ -47,7 +48,7 @@ BEGIN
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Dimensionen spezifizieren...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "Fenstergröße einstellen...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "&4:3-Seitenverhältnis erzwingen", IDM_VID_FORCE43
|
||||
POPUP "&Fensterskalierungsfaktor"
|
||||
BEGIN
|
||||
@@ -104,7 +105,7 @@ BEGIN
|
||||
MENUITEM "&Einstellungen...", IDM_PREFERENCES
|
||||
MENUITEM "&Discord-Integration aktivieren", IDM_DISCORD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Schallverstärkung...", IDM_SND_GAIN
|
||||
MENUITEM "&Klangverstärkung...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Tracing starten\tStrg+T", IDM_ACTION_BEGIN_TRACE
|
||||
@@ -270,7 +271,7 @@ END
|
||||
#define STR_SND_GAIN "Klangverstärkung"
|
||||
#define STR_NEW_FLOPPY "Neues Image"
|
||||
#define STR_CONFIG "Optionen"
|
||||
#define STR_SPECIFY_DIM "Abmessungen des Hauptfensters einstellen"
|
||||
#define STR_SPECIFY_DIM "Fenstergröße einstellen"
|
||||
|
||||
#define STR_OK "OK"
|
||||
#define STR_CANCEL "Abbrechen"
|
||||
@@ -288,13 +289,13 @@ END
|
||||
|
||||
#define STR_WIDTH "Breite:"
|
||||
#define STR_HEIGHT "Höhe:"
|
||||
#define STR_LOCK_TO_SIZE "Auf diese Größe festlegen"
|
||||
#define STR_LOCK_TO_SIZE "Feste Größe"
|
||||
|
||||
#define STR_MACHINE_TYPE "Maschinentyp:"
|
||||
#define STR_MACHINE_TYPE "Systemtyp:"
|
||||
#define STR_MACHINE "Maschine:"
|
||||
#define STR_CONFIGURE "Einstellen"
|
||||
#define STR_CPU_TYPE "CPU-Typ:"
|
||||
#define STR_SPEED "Takt:"
|
||||
#define STR_SPEED "Geschwindigkeit:"
|
||||
#define STR_FPU "FPU-Einheit:"
|
||||
#define STR_WAIT_STATES "Wartezustände:"
|
||||
#define STR_MB "MB"
|
||||
@@ -383,7 +384,7 @@ END
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "ISA-Echtzeituhr:"
|
||||
#define STR_ISAMEM "ISA-Speichererweiterung"
|
||||
#define STR_ISAMEM "ISA-Speichererweiterung:"
|
||||
#define STR_ISAMEM_1 "Steckkarte 1:"
|
||||
#define STR_ISAMEM_2 "Steckkarte 2:"
|
||||
#define STR_ISAMEM_3 "Steckkarte 3:"
|
||||
@@ -418,13 +419,13 @@ BEGIN
|
||||
IDS_2060 "An"
|
||||
IDS_2061 "Aus"
|
||||
IDS_2062 "Alle Images (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Basissektorimages (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Oberflächenimages (*.86F)\0*.86F\0"
|
||||
IDS_2063 "Die Maschine ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt."
|
||||
IDS_2063 "Das System ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt."
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "Die Videokarte ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt."
|
||||
IDS_2065 "Maschine"
|
||||
IDS_2065 "System"
|
||||
IDS_2066 "Anzeige"
|
||||
IDS_2067 "Eingabegeräte"
|
||||
IDS_2068 "Multimedia"
|
||||
@@ -470,12 +471,12 @@ BEGIN
|
||||
IDS_2104 "Tastaturbeschleuniger konnten nicht geladen werden."
|
||||
IDS_2105 "Roheingaben konnten nicht registriert werden."
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u MB (ZKS: %i, %i, %i)"
|
||||
IDS_2107 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "Diskette %i (%s): %ls"
|
||||
IDS_2109 "Alle Images (*.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\0Fortgeschrittene Sektorimages (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basissektorimages (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Fluximages (*.FDI)\0*.FDI\0Oberflächenimages (*.86F;*.MFM)\0*.86F;*.MFM\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2110 "FreeType konnte nicht initialisiert werden"
|
||||
IDS_2111 "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt"
|
||||
IDS_2112 "Sind Sie sich sicher, dass Sie einen Hard-Reset für die emulierte Maschine durchführen wollen?"
|
||||
IDS_2112 "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?"
|
||||
IDS_2113 "Sind Sie sich sicher, dass Sie 86Box beenden wollen?"
|
||||
IDS_2114 "Ghostscript konnte nicht initialisiert werden"
|
||||
IDS_2115 "MO %i (%ls): %ls"
|
||||
@@ -530,14 +531,21 @@ BEGIN
|
||||
IDS_2143 "OpenGL-Shader (*.GLSL)\0*.GLSL\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2144 "OpenGL-Optionen"
|
||||
IDS_2145 "Sie laden gerade eine nicht unterstützte Konfiguration"
|
||||
IDS_2146 "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden."
|
||||
IDS_2146 "Das Filtern der CPU-Typen basierend auf dem ausgewählten System ist für dieses System deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit dem ausgewählten System inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS des Systems oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden."
|
||||
IDS_2147 "Fortfahren"
|
||||
IDS_2148 "Kassette: %s"
|
||||
IDS_2149 "Kassettenimages (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2150 "Cartridge %i: %ls"
|
||||
IDS_2151 "Cartridgeimages (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Fehler bei der Rendererinitialisierung"
|
||||
IDS_2153 "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Resizeable window", IDM_VID_RESIZE
|
||||
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Resizeable window", IDM_VID_RESIZE
|
||||
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Vista"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Ventana redimensionable", IDM_VID_RESIZE
|
||||
MENUITEM "&Recordar tamaño y posición", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Imágenes de Cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Näytä"
|
||||
BEGIN
|
||||
MENUITEM "&Piilota tilapalkki", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Salli koon muuttaminen", IDM_VID_RESIZE
|
||||
MENUITEM "&Muista koko ja sijainti", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "ROM-moduulikuvat (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Kaikki tiedostot (*.*)\0*.*\0"
|
||||
IDS_2152 "Virhe renderöijän alustuksessa"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Vue"
|
||||
BEGIN
|
||||
MENUITEM "&Masquer la barre de status", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Fenètre &Retaillable", IDM_VID_RESIZE
|
||||
MENUITEM "S&auvegarder taille && position", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Images cartouche (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tous les fichiers (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Pogled"
|
||||
BEGIN
|
||||
MENUITEM "&Sakrij statusni redak", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Prozor s promjenjivim veličinama", IDM_VID_RESIZE
|
||||
MENUITEM "&Zapamtite veličinu i položaj", IDM_VID_REMEMBER
|
||||
@@ -382,7 +383,7 @@ END
|
||||
#define STR_ZIP_DRIVES "ZIP pogoni:"
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "Ura u stvarnom vrijemenu RTC:"
|
||||
#define STR_ISARTC "Sat stvarnog vremena (RTC):"
|
||||
#define STR_ISAMEM "Proširenje memorije ISA"
|
||||
#define STR_ISAMEM_1 "Kartica 1:"
|
||||
#define STR_ISAMEM_2 "Kartica 2:"
|
||||
@@ -536,8 +537,15 @@ BEGIN
|
||||
IDS_2149 "Slike audio kasete (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Sve datoteke (*.*)\0*.*\0"
|
||||
IDS_2150 "Kaseta %i: %ls"
|
||||
IDS_2151 "Slike kasete (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Sve datoteke (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Nije moguće inicijalizirati renderer"
|
||||
IDS_2153 "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -37,6 +37,7 @@ BEGIN
|
||||
POPUP "&Nézet"
|
||||
BEGIN
|
||||
MENUITEM "Állapotsor &elrejtése", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Átméretezhető ablak", IDM_VID_RESIZE
|
||||
MENUITEM "Méret és pozíció &megjegyzése", IDM_VID_REMEMBER
|
||||
@@ -542,6 +543,13 @@ BEGIN
|
||||
IDS_2151 "ROM-kazetta képek (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Minden fájl (*.*)\0*.*\0"
|
||||
IDS_2152 "Hiba történt a renderelő inicializálásakor"
|
||||
IDS_2153 "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -33,6 +33,7 @@ BEGIN
|
||||
POPUP "&Visualizza"
|
||||
BEGIN
|
||||
MENUITEM "&Nascondi barra di stato", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Finestra ridimensionabile", IDM_VID_RESIZE
|
||||
MENUITEM "R&icorda dimensioni e posizione", IDM_VID_REMEMBER
|
||||
@@ -539,6 +540,13 @@ BEGIN
|
||||
IDS_2151 "Immagini cartuccia (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tutti i file (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "キーボードはキャプチャが必要(&K)", IDM_ACTION_KBD_REQ_CAPTURE
|
||||
MENUITEM "右CTRLを左ALTへ(&R)", IDM_ACTION_RCTRL_IS_LALT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "再起動(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "ハードリセット(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "Ctrl+Alt+Del(&C)\tCtrl+F12", IDM_ACTION_RESET_CAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ctrl+Alt+Esc(&E)", IDM_ACTION_CTRL_ALT_ESC
|
||||
@@ -32,9 +32,10 @@ BEGIN
|
||||
POPUP "表示(&V)"
|
||||
BEGIN
|
||||
MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "ツールバーを隠す(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ウィンドウのサイズを変更可能にする(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を記憶する(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM "ウィンドウのサイズをリサイズ可能(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を記憶(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "レンダラー(&N)"
|
||||
BEGIN
|
||||
@@ -47,9 +48,9 @@ BEGIN
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ウィンドウのサイズを指定する...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "画面比率を4:3に合わせる(&O)", IDM_VID_FORCE43
|
||||
POPUP "ウィンドウの倍率(&W)"
|
||||
MENUITEM "ウィンドウのサイズを指定...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "4:3アスペクト比を固定(&O)", IDM_VID_FORCE43
|
||||
POPUP "ウィンドウの表示倍率(&W)"
|
||||
BEGIN
|
||||
MENUITEM "0.5x(&0)", IDM_VID_SCALE_1X
|
||||
MENUITEM "1x(&1)", IDM_VID_SCALE_2X
|
||||
@@ -58,53 +59,53 @@ BEGIN
|
||||
END
|
||||
POPUP "フィルター方式"
|
||||
BEGIN
|
||||
MENUITEM "ニアレストネイバー(&N)", IDM_VID_FILTER_NEAREST
|
||||
MENUITEM "リニア補間(&L)", IDM_VID_FILTER_LINEAR
|
||||
MENUITEM "最近傍補間(&N)", IDM_VID_FILTER_NEAREST
|
||||
MENUITEM "線形補間(&L)", IDM_VID_FILTER_LINEAR
|
||||
END
|
||||
MENUITEM "高DPIスケール(&D)", IDM_VID_HIDPI
|
||||
MENUITEM "HiDPIスケーリング(&D)", IDM_VID_HIDPI
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "フルスクリーン(&F)\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
|
||||
POPUP "フルスクリーンの比率(&S)"
|
||||
POPUP "フルスクリーンのスケール(&S)"
|
||||
BEGIN
|
||||
MENUITEM "フルスクリーンに拡大(&F)", IDM_VID_FS_FULL
|
||||
MENUITEM "4:3(&4)", IDM_VID_FS_43
|
||||
MENUITEM "正方形のピクセル(維持率)(&S)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "定数倍(&I)", IDM_VID_FS_INT
|
||||
MENUITEM "正方形ピクセル(アスペクト比を維持)(&S)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "整数倍(&I)", IDM_VID_FS_INT
|
||||
END
|
||||
POPUP "E&GA/(S)VGAの設定"
|
||||
BEGIN
|
||||
MENUITEM "色反転VGAモニター(&I)", IDM_VID_INVERT
|
||||
POPUP "VGA画面タイプ(&T)"
|
||||
MENUITEM "色を反転(&I)", IDM_VID_INVERT
|
||||
POPUP "画面タイプ(&T)"
|
||||
BEGIN
|
||||
MENUITEM "RGBカラー(&C)", IDM_VID_GRAY_RGB
|
||||
MENUITEM "RGBグレースケール(&R)", IDM_VID_GRAY_MONO
|
||||
MENUITEM "橙色モニター(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "緑色モニター(&G)", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "白色モニター(&W)", IDM_VID_GRAY_WHITE
|
||||
MENUITEM "RGB(カラー)(&C)", IDM_VID_GRAY_RGB
|
||||
MENUITEM "RGB(グレースケール)(&R)", IDM_VID_GRAY_MONO
|
||||
MENUITEM "モニター(琥珀色)(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "モニター(緑色)(&G)", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "モニター(白色)(&W)", IDM_VID_GRAY_WHITE
|
||||
END
|
||||
POPUP "グレースケール表示方式(&C)"
|
||||
POPUP "グレースケール変換タイプ(&C)"
|
||||
BEGIN
|
||||
MENUITEM "BT601 (NTSC/PAL)(&6)", IDM_VID_GRAYCT_601
|
||||
MENUITEM "BT709 (HDTV)(&7)", IDM_VID_GRAYCT_709
|
||||
MENUITEM "平均値(&A)", IDM_VID_GRAYCT_AVE
|
||||
MENUITEM "平均(&A)", IDM_VID_GRAYCT_AVE
|
||||
END
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)", IDM_VID_OVERSCAN
|
||||
MENUITEM "単色モニター用対比転換(&M)", IDM_VID_CGACON
|
||||
MENUITEM "単色モニター用コントラストを変更(&M)", IDM_VID_CGACON
|
||||
END
|
||||
MENUITEM "メディア(&M)", IDM_MEDIA
|
||||
POPUP "ツール(&T)"
|
||||
BEGIN
|
||||
MENUITEM "設定(&S)...", IDM_CONFIG
|
||||
MENUITEM "ステータスバーのアイコンを更新する(&U)", IDM_UPDATE_ICONS
|
||||
MENUITEM "ステータスバーのアイコンを更新(&U)", IDM_UPDATE_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "スクリーンショットを撮る(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "環境設定(&P)...", IDM_PREFERENCES
|
||||
MENUITEM "Discordとの連携を可能にする(&D)", IDM_DISCORD
|
||||
MENUITEM "Discordとの連携機能(&D)", IDM_DISCORD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "音量ゲイン(&G)...", IDM_SND_GAIN
|
||||
MENUITEM "音量を調節(&G)...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "トレース開始\tCtrl+T", IDM_ACTION_BEGIN_TRACE
|
||||
@@ -115,35 +116,35 @@ BEGIN
|
||||
POPUP "ログ(&L)"
|
||||
BEGIN
|
||||
# ifdef ENABLE_BUSLOGIC_LOG
|
||||
MENUITEM "BusLogicのログを有効にする\tCtrl+F4", IDM_LOG_BUSLOGIC
|
||||
MENUITEM "BusLogicのログを有効\tCtrl+F4", IDM_LOG_BUSLOGIC
|
||||
# endif
|
||||
# ifdef ENABLE_CDROM_LOG
|
||||
MENUITEM "CD-ROMのログを有効にする\tCtrl+F5", IDM_LOG_CDROM
|
||||
MENUITEM "CD-ROMのログを有効\tCtrl+F5", IDM_LOG_CDROM
|
||||
# endif
|
||||
# ifdef ENABLE_D86F_LOG
|
||||
MENUITEM "フロッピー(86F)のログを有効にする\tCtrl+F6", IDM_LOG_D86F
|
||||
MENUITEM "フロッピー(86F)のログを有効\tCtrl+F6", IDM_LOG_D86F
|
||||
# endif
|
||||
# ifdef ENABLE_FDC_LOG
|
||||
MENUITEM "フロッピーコントローラーのログを有効にする\tCtrl+F7", IDM_LOG_FDC
|
||||
MENUITEM "フロッピーコントローラーのログを有効\tCtrl+F7", IDM_LOG_FDC
|
||||
# endif
|
||||
# ifdef ENABLE_IDE_LOG
|
||||
MENUITEM "IDEのログを有効にする\tCtrl+F8", IDM_LOG_IDE
|
||||
MENUITEM "IDEのログを有効\tCtrl+F8", IDM_LOG_IDE
|
||||
# endif
|
||||
# ifdef ENABLE_SERIAL_LOG
|
||||
MENUITEM "シリアルポートのログを有効にする\tCtrl+F3", IDM_LOG_SERIAL
|
||||
MENUITEM "シリアルポートのログを有効\tCtrl+F3", IDM_LOG_SERIAL
|
||||
# endif
|
||||
# ifdef ENABLE_NIC_LOG
|
||||
MENUITEM "ネットワークのログを有効にする\tCtrl+F9", IDM_LOG_NIC
|
||||
MENUITEM "ネットワークのログを有効\tCtrl+F9", IDM_LOG_NIC
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_COMMANDS
|
||||
# ifdef ENABLE_LOG_TOGGLES
|
||||
MENUITEM SEPARATOR
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_BREAKPOINT
|
||||
MENUITEM "ブレークポイントのログを有効にする(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
MENUITEM "ブレークポイントのログを有効(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
# endif
|
||||
# ifdef ENABLE_VRAM_DUMP
|
||||
MENUITEM "ビデオRAMのダンプを有効にする(&V)\tCtrl+F1", IDM_DUMP_VRAM
|
||||
MENUITEM "ビデオRAMのダンプを有効(&V)\tCtrl+F1", IDM_DUMP_VRAM
|
||||
# endif
|
||||
# endif
|
||||
END
|
||||
@@ -151,7 +152,7 @@ BEGIN
|
||||
POPUP "ヘルプ(&H)"
|
||||
BEGIN
|
||||
MENUITEM "ドキュメント(&D)...", IDM_DOCS
|
||||
MENUITEM "86Boxについて(&A)...", IDM_ABOUT
|
||||
MENUITEM "86Boxのバージョン情報(&A)...", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
@@ -164,15 +165,15 @@ CassetteSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "録音する(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "再生する(&P)", IDM_CASSETTE_PLAY
|
||||
MENUITEM "録音(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "再生(&P)", IDM_CASSETTE_PLAY
|
||||
MENUITEM "冒頭に巻き戻す(&R)", IDM_CASSETTE_REWIND
|
||||
MENUITEM "最後まで早送りする(&F)", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM "最後まで早送り(&F)", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_CASSETTE_EJECT
|
||||
END
|
||||
@@ -192,12 +193,12 @@ FloppySubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "86Fへのエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM "86Fイメージにエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_FLOPPY_EJECT
|
||||
END
|
||||
@@ -210,7 +211,7 @@ BEGIN
|
||||
MENUITEM "ミュート(&M)", IDM_CDROM_MUTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "空(&M)", IDM_CDROM_EMPTY
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE
|
||||
END
|
||||
@@ -220,13 +221,13 @@ ZIPSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_ZIP_EJECT
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_ZIP_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_ZIP_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -234,13 +235,13 @@ MOSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_MO_EJECT
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_MO_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_MO_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -248,16 +249,16 @@ VidGLSubMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "目標フレームレート(&F)"
|
||||
BEGIN
|
||||
MENUITEM "ビデオとの同期(&S)", IDM_VID_GL_FPS_BLITTER
|
||||
MENUITEM "ビデオと同期(&S)", IDM_VID_GL_FPS_BLITTER
|
||||
MENUITEM "25 fps(&2)", IDM_VID_GL_FPS_25
|
||||
MENUITEM "30 fps(&3)", IDM_VID_GL_FPS_30
|
||||
MENUITEM "50 fps(&5)", IDM_VID_GL_FPS_50
|
||||
MENUITEM "60 fps(&6)", IDM_VID_GL_FPS_60
|
||||
MENUITEM "75 fps(&7)", IDM_VID_GL_FPS_75
|
||||
END
|
||||
MENUITEM "VSync(&V)", IDM_VID_GL_VSYNC
|
||||
MENUITEM "シェーダの選択(&S)...", IDM_VID_GL_SHADER
|
||||
MENUITEM "シェーダの削除(&R)", IDM_VID_GL_NOSHADER
|
||||
MENUITEM "垂直同期(VSync)(&V)", IDM_VID_GL_VSYNC
|
||||
MENUITEM "シェーダーを選択(&S)...", IDM_VID_GL_SHADER
|
||||
MENUITEM "シェーダーを削除(&R)", IDM_VID_GL_NOSHADER
|
||||
END
|
||||
|
||||
|
||||
@@ -282,9 +283,9 @@ END
|
||||
#define STR_GAIN "ゲイン値"
|
||||
|
||||
#define STR_FILE_NAME "ファイル名:"
|
||||
#define STR_DISK_SIZE "ディスクの容量:"
|
||||
#define STR_RPM_MODE "RPMモード:"
|
||||
#define STR_PROGRESS "進行:"
|
||||
#define STR_DISK_SIZE "ディスクサイズ:"
|
||||
#define STR_RPM_MODE "回転数モード:"
|
||||
#define STR_PROGRESS "進行状況:"
|
||||
|
||||
#define STR_WIDTH "幅:"
|
||||
#define STR_HEIGHT "高さ:"
|
||||
@@ -299,11 +300,11 @@ END
|
||||
#define STR_WAIT_STATES "待機状態:"
|
||||
#define STR_MB "MB"
|
||||
#define STR_MEMORY "メモリ:"
|
||||
#define STR_TIME_SYNC "時刻同期化"
|
||||
#define STR_DISABLED "使用しない"
|
||||
#define STR_ENABLED_LOCAL "使用する (現地時間)"
|
||||
#define STR_ENABLED_UTC "使用する (UTC)"
|
||||
#define STR_DYNAREC "動的再コンパイル"
|
||||
#define STR_TIME_SYNC "時刻同期機能"
|
||||
#define STR_DISABLED "無効にする"
|
||||
#define STR_ENABLED_LOCAL "有効にする (現地時間)"
|
||||
#define STR_ENABLED_UTC "有効にする (UTC)"
|
||||
#define STR_DYNAREC "動的リコンパイラ"
|
||||
|
||||
#define STR_VIDEO "ビデオカード:"
|
||||
#define STR_VOODOO "Voodooグラフィック"
|
||||
@@ -318,15 +319,15 @@ END
|
||||
#define STR_SOUND "サウンドカード:"
|
||||
#define STR_MIDI "MIDI出力デバイス:"
|
||||
#define STR_MIDI_IN "MIDI入力デバイス:"
|
||||
#define STR_MPU401 "MPU-401を単独使用"
|
||||
#define STR_MPU401 "独立型MPU-401"
|
||||
#define STR_SSI "Innovation SSI-2001"
|
||||
#define STR_CMS "CMS / Game Blaster"
|
||||
#define STR_GUS "Gravis Ultrasound"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用する"
|
||||
|
||||
#define STR_NET_TYPE "ネットワークタイプ:"
|
||||
#define STR_PCAP "PCapデバイス:"
|
||||
#define STR_NET "ネットワークカード:"
|
||||
#define STR_NET "ネットワークアダプター:"
|
||||
|
||||
#define STR_COM1 "COM1デバイス:"
|
||||
#define STR_COM2 "COM2デバイス:"
|
||||
@@ -368,8 +369,8 @@ END
|
||||
#define STR_SECTORS "セクター:"
|
||||
#define STR_HEADS "ヘッド:"
|
||||
#define STR_CYLS "シリンダー:"
|
||||
#define STR_SIZE_MB "容量(MB):"
|
||||
#define STR_TYPE "形式:"
|
||||
#define STR_SIZE_MB "サイズ(MB):"
|
||||
#define STR_TYPE "タイプ:"
|
||||
#define STR_IMG_FORMAT "イメージ形式:"
|
||||
#define STR_BLOCK_SIZE "ブロックサイズ:"
|
||||
|
||||
@@ -411,19 +412,19 @@ BEGIN
|
||||
IDS_2053 "速度"
|
||||
IDS_2054 "ZIP %03i %i (%s): %ls"
|
||||
IDS_2055 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
|
||||
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、《roms》ディレクトリに解凍してください。"
|
||||
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、「roms」ディレクトリに解凍してください。"
|
||||
IDS_2057 "(空)"
|
||||
IDS_2058 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2059 "高速"
|
||||
IDS_2060 "オン"
|
||||
IDS_2061 "オフ"
|
||||
IDS_2062 "すべてのイメージ (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本的なセクターイメージ (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。"
|
||||
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2065 "マシン"
|
||||
IDS_2066 "画面表示"
|
||||
IDS_2067 "入力デバイス"
|
||||
@@ -434,11 +435,11 @@ BEGIN
|
||||
IDS_2072 "ハードディスク"
|
||||
IDS_2073 "フロッピー/CD-ROMドライブ"
|
||||
IDS_2074 "その他のリムーバブルデバイス"
|
||||
IDS_2075 "その他の周辺機器"
|
||||
IDS_2075 "その他の周辺装置"
|
||||
IDS_2076 "表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2077 "クリックするとマウスを直接入力します"
|
||||
IDS_2078 "F12+F8キーでマウスの直接入力を解除します"
|
||||
IDS_2079 "F12+F8キーまたは中クリックでマウスの直接入力を解除します"
|
||||
IDS_2077 "クリックするとマウスをキャプチャします"
|
||||
IDS_2078 "F8+F12キーでマウスを解放します"
|
||||
IDS_2079 "F8+F12キーまたは中ボタンでマウスを解放します"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -455,42 +456,42 @@ BEGIN
|
||||
IDS_2089 "ビデオレンダラーが初期化できません。"
|
||||
IDS_2090 "既定値"
|
||||
IDS_2091 "%iつの待機状態"
|
||||
IDS_2092 "形式"
|
||||
IDS_2092 "タイプ"
|
||||
IDS_2093 "PCapのセットアップに失敗しました"
|
||||
IDS_2094 "PCapデバイスがありません"
|
||||
IDS_2095 "不正なPCapデバイスです"
|
||||
IDS_2096 "標準2ボタンジョイスティック"
|
||||
IDS_2097 "標準4ボタンジョイスティック"
|
||||
IDS_2098 "標準6ボタンジョイスティック"
|
||||
IDS_2099 "標準8ボタンジョイスティック"
|
||||
IDS_2096 "標準ジョイスティック(2ボタン)"
|
||||
IDS_2097 "標準ジョイスティック(4ボタン)"
|
||||
IDS_2098 "標準ジョイスティック(6ボタン)"
|
||||
IDS_2099 "標準ジョイスティック(8ボタン)"
|
||||
IDS_2100 "CH Flightstick Pro"
|
||||
IDS_2101 "Microsoft SideWinder Pad"
|
||||
IDS_2102 "Thrustmaster Flight Control System"
|
||||
IDS_2103 "なし"
|
||||
IDS_2104 "キーボードアクセラレーターを読み込めません。"
|
||||
IDS_2105 "Raw入力が登録できません。"
|
||||
IDS_2104 "キーボードアクセラレータを読み込めません。"
|
||||
IDS_2105 "生の入力が登録できません。"
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "フロッピー %i (%s): %ls"
|
||||
IDS_2109 "すべてのイメージ (*.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\0アドバンスドセクターイメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本セクターイメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0表面イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2110 "FreeTypeが初期化できません"
|
||||
IDS_2111 "SDLが初期化できません。SDL2.dllが必要です"
|
||||
IDS_2112 "起動中のマシンを再起動しますか?"
|
||||
IDS_2112 "使用中のマシンをハードリセットしますか?"
|
||||
IDS_2113 "86Boxを終了しますか?"
|
||||
IDS_2114 "Ghostscriptが初期化できません"
|
||||
IDS_2115 "光磁気 %i (%ls): %ls"
|
||||
IDS_2116 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2117 "86Boxへようこそ!"
|
||||
IDS_2118 "内部のコントローラー"
|
||||
IDS_2117 "86Boxへようこそ!"
|
||||
IDS_2118 "内蔵コントローラー"
|
||||
IDS_2119 "終了"
|
||||
IDS_2120 "ROMが見つかりません"
|
||||
IDS_2121 "設定を保存しますか?"
|
||||
IDS_2122 "保存すると使用中のマシンが再起動されます。"
|
||||
IDS_2122 "保存すると使用中のマシンがハードリセットされます。"
|
||||
IDS_2123 "保存"
|
||||
IDS_2124 "86Boxについて"
|
||||
IDS_2124 "86Boxのバージョン情報"
|
||||
IDS_2125 "86Box v" EMU_VERSION
|
||||
|
||||
IDS_2126 "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
|
||||
IDS_2126 "古いパソコンのエミュレーター\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
|
||||
IDS_2127 "OK"
|
||||
IDS_2128 "ハードウェアが利用できません"
|
||||
#ifdef _WIN32
|
||||
@@ -511,15 +512,15 @@ BEGIN
|
||||
#else
|
||||
#define LIB_NAME_GS "libgs"
|
||||
#endif
|
||||
IDS_2132 LIB_NAME_GS "はPostScriptファイルをPDFに自動変換させる為に必要です。\n\n汎用PostScriptプリンターに送った任意のドキュメントはPostScript(.ps)ファイルとして保存されます。"
|
||||
IDS_2132 "PostScriptファイルをPDFに自動変換するには" LIB_NAME_GS "が必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。"
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
|
||||
#else
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
|
||||
#endif
|
||||
IDS_2133 "FluidSynthのMIDI出力には" LIB_NAME_FLUIDSYNTH "が必要です。"
|
||||
IDS_2134 "フルスクリーンモードに転換します"
|
||||
IDS_2135 "今後このメッセージを表示しない"
|
||||
IDS_2134 "フルスクリーンに切り替えています"
|
||||
IDS_2135 "今後、このメッセージを表示しない"
|
||||
IDS_2136 "終了しない"
|
||||
IDS_2137 "リセット"
|
||||
IDS_2138 "リセットしない"
|
||||
@@ -528,16 +529,23 @@ BEGIN
|
||||
IDS_2141 "%hs デバイスの設定"
|
||||
IDS_2142 "モニターのスリープモード"
|
||||
IDS_2143 "OpenGLシェーダー (*.GLSL)\0*.GLSL\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2144 "OpenGLの設定"
|
||||
IDS_2144 "OpenGL設定"
|
||||
IDS_2145 "サポートされていない設定を読み込んでいます"
|
||||
IDS_2146 "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。"
|
||||
IDS_2147 "つづく"
|
||||
IDS_2147 "続行"
|
||||
IDS_2148 "カセット: %s"
|
||||
IDS_2149 "カセットイメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2150 "カートリッジ %i: %ls"
|
||||
IDS_2151 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2152 "レンダラーの初期化エラー"
|
||||
IDS_2153 "OpenGL(3.0コア)レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
|
||||
IDS_2153 "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
|
||||
IDS_2154 "実行を再開"
|
||||
IDS_2155 "実行を一時停止"
|
||||
IDS_2156 "Ctrl+Alt+DELを押し"
|
||||
IDS_2157 "Ctrl+Alt+Escを押し"
|
||||
IDS_2158 "ハードリセット"
|
||||
IDS_2159 "ACPIシャットダウン"
|
||||
IDS_2160 "設定"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -547,33 +555,33 @@ BEGIN
|
||||
IDS_4098 "%01i"
|
||||
IDS_4099 "MFM/RLLまたはESDIのCD-ROMドライブが存在しません"
|
||||
IDS_4100 "カスタム..."
|
||||
IDS_4101 "カスタム(大)..."
|
||||
IDS_4101 "カスタム (大型)..."
|
||||
IDS_4102 "新規のディスクを追加"
|
||||
IDS_4103 "既定のディスクを追加"
|
||||
IDS_4104 "HDIのディスクイメージは4GB以上にはできません。"
|
||||
IDS_4105 "ディスクイメージは127GB以上にはできません。"
|
||||
IDS_4104 "HDIディスクイメージは4GBを超えることはできません。"
|
||||
IDS_4105 "ディスクイメージは127GBを超えることはできません。"
|
||||
IDS_4106 "ハードディスクイメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_4107 "ファイルの読み込みができません"
|
||||
IDS_4108 "ファイルの書き込みができません"
|
||||
IDS_4109 "512バイト以外のセクターサイズを持ったHDIまたはHDX形式のイメージはサポートしません。"
|
||||
IDS_4110 "USBはまだサポートしません"
|
||||
IDS_4109 "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。"
|
||||
IDS_4110 "USBはまだサポートされていません"
|
||||
IDS_4111 "ディスクイメージファイルが既に存在します"
|
||||
IDS_4112 "有効なファイル名を指定してください。"
|
||||
IDS_4113 "ディスクイメージが作成されました"
|
||||
IDS_4114 "ファイルが存在し、読み取り可能であることを確認します。"
|
||||
IDS_4114 "ファイルが存在し、読み取り可能であることを確認してください。"
|
||||
IDS_4115 "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。"
|
||||
IDS_4116 "ディスクイメージが大きすぎます"
|
||||
IDS_4117 "新規ディスクのパーティション設定とフォーマットを必ずしといてください。"
|
||||
IDS_4118 "選択したファイルは上書きされます。使っていいですか?"
|
||||
IDS_4116 "ディスクイメージのサイズが大きすぎます"
|
||||
IDS_4117 "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。"
|
||||
IDS_4118 "選択したファイルが上書きされます。使っていいですか?"
|
||||
IDS_4119 "サポートされていないディスクイメージ"
|
||||
IDS_4120 "上書き"
|
||||
IDS_4121 "上書きしない"
|
||||
IDS_4122 "Rawイメージ (.img)"
|
||||
IDS_4123 "HDIイメージ (.hdi)"
|
||||
IDS_4124 "HDXイメージ (.hdx)"
|
||||
IDS_4125 "固定サイズのVHD (.vhd)"
|
||||
IDS_4126 "ダイナミックサイズのVHD (.vhd)"
|
||||
IDS_4127 "ディファレンシングVHD (.vhd)"
|
||||
IDS_4125 "VHD(容量固定)(.vhd)"
|
||||
IDS_4126 "VHD(容量可変)(.vhd)"
|
||||
IDS_4127 "VHD(差分)(.vhd)"
|
||||
IDS_4128 "大型ブロック (2 MB)"
|
||||
IDS_4129 "小型ブロック (512 KB)"
|
||||
IDS_4130 "VHDファイル (*.VHD)\0*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "표시(&V)"
|
||||
BEGIN
|
||||
MENUITEM "상태 바 숨기기(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "창 크기 조절 가능하게 하기(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "창 크기와 위치를 기억하기(&E)", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "카트리지 이미지 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0모든 파일 (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
647
src/win/languages/pl-PL.rc
Normal file
@@ -0,0 +1,647 @@
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Polish (pl-PL) resources
|
||||
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
#pragma code_page(65001)
|
||||
#endif //_WIN32
|
||||
|
||||
#define AUTHORS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
MainMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "&Akcje"
|
||||
BEGIN
|
||||
MENUITEM "&Klawaitura wymaga przechwytu myszy", IDM_ACTION_KBD_REQ_CAPTURE
|
||||
MENUITEM "&Prawy CTRL to lewy Alt", IDM_ACTION_RCTRL_IS_LALT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Twardy reset...", 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 "&Pauza", IDM_ACTION_PAUSE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjdź...", IDM_ACTION_EXIT
|
||||
END
|
||||
POPUP "&Widok"
|
||||
BEGIN
|
||||
MENUITEM "&Ukryj pasek statusu", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Ukryj &pasek narzędzi", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Okno o zmiennym rozmiarze", IDM_VID_RESIZE
|
||||
MENUITEM "P&amiętaj rozmiar &i pozycję", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "Re&nderer"
|
||||
BEGIN
|
||||
MENUITEM "&SDL (Software)", IDM_VID_SDL_SW
|
||||
MENUITEM "SDL (&Hardware)", IDM_VID_SDL_HW
|
||||
MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL
|
||||
MENUITEM "Open&GL (3.0 Core)", IDM_VID_OPENGL_CORE
|
||||
#ifdef USE_VNC
|
||||
MENUITEM "&VNC", IDM_VID_VNC
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Określ rozmiary...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "&Wymuś proporcje wyświetlania 4:3", IDM_VID_FORCE43
|
||||
POPUP "&Czynnik skalowania okna"
|
||||
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 "Metoda filtrowania"
|
||||
BEGIN
|
||||
MENUITEM "&Nearest", IDM_VID_FILTER_NEAREST
|
||||
MENUITEM "&Linear", IDM_VID_FILTER_LINEAR
|
||||
END
|
||||
MENUITEM "Skalowanie Hi&DPI", IDM_VID_HIDPI
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Pełny ekran\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
|
||||
POPUP "Fullscreen &stretch mode"
|
||||
BEGIN
|
||||
MENUITEM "&Tryb rozciągania na pełnym ekranie", IDM_VID_FS_FULL
|
||||
MENUITEM "&4:3", IDM_VID_FS_43
|
||||
MENUITEM "&Kwadratowe piksele (Zachowaj proporcje)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "&Skalowanie całkowite", IDM_VID_FS_INT
|
||||
END
|
||||
POPUP "Ustawienia E&GA/(S)VGA"
|
||||
BEGIN
|
||||
MENUITEM "&Odwrócony monitor VGA", IDM_VID_INVERT
|
||||
POPUP "Rodzaj ekranu &VGA"
|
||||
BEGIN
|
||||
MENUITEM "RGB - &Kolorowy", IDM_VID_GRAY_RGB
|
||||
MENUITEM "&RGB - Skala szarości", IDM_VID_GRAY_MONO
|
||||
MENUITEM "&Bursztynowy monitor", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "&Zielony monitor", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "&Biały monitor", IDM_VID_GRAY_WHITE
|
||||
END
|
||||
POPUP "Typ konwersji &w skali szarości"
|
||||
BEGIN
|
||||
MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601
|
||||
MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709
|
||||
MENUITEM "&Średni", IDM_VID_GRAYCT_AVE
|
||||
END
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Overscan dla CGA/PCjr/Tandy/E&GA/(S)VGA", IDM_VID_OVERSCAN
|
||||
MENUITEM "Zmień kontrast dla &monochromatycznego ekranu", IDM_VID_CGACON
|
||||
END
|
||||
MENUITEM "&Nośnik", IDM_MEDIA
|
||||
POPUP "&Narzędzia"
|
||||
BEGIN
|
||||
MENUITEM "&Ustawienia...", IDM_CONFIG
|
||||
MENUITEM "&Aktualizuj ikony na pasku statusu", IDM_UPDATE_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Zrób &zrzut ekranu\tCtrl+F11", IDM_ACTION_SCREENSHOT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Preferencje...", IDM_PREFERENCES
|
||||
MENUITEM "Włącz integrację z &Discord", IDM_DISCORD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Wzmocnienie &dźwięku...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Rozpocznij śledzenie\tCtrl+T", IDM_ACTION_BEGIN_TRACE
|
||||
MENUITEM "Zakończ śledzenie\tCtrl+T", IDM_ACTION_END_TRACE
|
||||
#endif
|
||||
END
|
||||
#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS)
|
||||
POPUP "&Logowanie"
|
||||
BEGIN
|
||||
# ifdef ENABLE_BUSLOGIC_LOG
|
||||
MENUITEM "Włącz logu BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC
|
||||
# endif
|
||||
# ifdef ENABLE_CDROM_LOG
|
||||
MENUITEM "Włącz logi CD-ROM\tCtrl+F5", IDM_LOG_CDROM
|
||||
# endif
|
||||
# ifdef ENABLE_D86F_LOG
|
||||
MENUITEM "Włącz logi dyskietek (86F)\tCtrl+F6", IDM_LOG_D86F
|
||||
# endif
|
||||
# ifdef ENABLE_FDC_LOG
|
||||
MENUITEM "Włącz logi kontrolera dyskietek\tCtrl+F7", IDM_LOG_FDC
|
||||
# endif
|
||||
# ifdef ENABLE_IDE_LOG
|
||||
MENUITEM "Włącz logi IDE\tCtrl+F8", IDM_LOG_IDE
|
||||
# endif
|
||||
# ifdef ENABLE_SERIAL_LOG
|
||||
MENUITEM "Włącz logi portu szeregowego\tCtrl+F3", IDM_LOG_SERIAL
|
||||
# endif
|
||||
# ifdef ENABLE_NIC_LOG
|
||||
MENUITEM "Włącz logi sieci\tCtrl+F9", IDM_LOG_NIC
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_COMMANDS
|
||||
# ifdef ENABLE_LOG_TOGGLES
|
||||
MENUITEM SEPARATOR
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_BREAKPOINT
|
||||
MENUITEM "&Punkt przerwania dziennika\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
# endif
|
||||
# ifdef ENABLE_VRAM_DUMP
|
||||
MENUITEM "Zrzuć pamięć &wideo\tCtrl+F1", IDM_DUMP_VRAM
|
||||
# endif
|
||||
# endif
|
||||
END
|
||||
#endif
|
||||
POPUP "&Pomoc"
|
||||
BEGIN
|
||||
MENUITEM "&Dokumentacja...", IDM_DOCS
|
||||
MENUITEM "&O 86Box...", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
StatusBarMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
MENUITEM SEPARATOR
|
||||
END
|
||||
|
||||
CassetteSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Nowy obraz...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Istniejący obraz...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Nagraj", IDM_CASSETTE_RECORD
|
||||
MENUITEM "&Odtwórz", IDM_CASSETTE_PLAY
|
||||
MENUITEM "&Przewiń do początku", IDM_CASSETTE_REWIND
|
||||
MENUITEM "&Przewiń do końca", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjmij", IDM_CASSETTE_EJECT
|
||||
END
|
||||
END
|
||||
|
||||
CartridgeSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Obraz...", IDM_CARTRIDGE_IMAGE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjmij", IDM_CARTRIDGE_EJECT
|
||||
END
|
||||
END
|
||||
|
||||
FloppySubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Nowy obraz...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Istniejący obraz...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "E&ksportuj do 86F...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjmij", IDM_FLOPPY_EJECT
|
||||
END
|
||||
END
|
||||
|
||||
CdromSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Ścisz", IDM_CDROM_MUTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "P&usty", IDM_CDROM_EMPTY
|
||||
MENUITEM "&Przeładuj poprzedni obraz", IDM_CDROM_RELOAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Obraz", IDM_CDROM_IMAGE
|
||||
END
|
||||
END
|
||||
|
||||
ZIPSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Nowy obraz...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Istniejący obraz...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjmij", IDM_ZIP_EJECT
|
||||
MENUITEM "&Przeładuj poprzedni obraz", IDM_ZIP_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
MOSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Nowy obraz...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Istniejący obraz...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "W&yjmij", IDM_MO_EJECT
|
||||
MENUITEM "&Przeładuj poprzedni obraz", IDM_MO_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
VidGLSubMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "Docelowa &liczba klatek na sekundę"
|
||||
BEGIN
|
||||
MENUITEM "&Zsynchronizuj z wideo", IDM_VID_GL_FPS_BLITTER
|
||||
MENUITEM "&25 fps", IDM_VID_GL_FPS_25
|
||||
MENUITEM "&30 fps", IDM_VID_GL_FPS_30
|
||||
MENUITEM "&50 fps", IDM_VID_GL_FPS_50
|
||||
MENUITEM "&60 fps", IDM_VID_GL_FPS_60
|
||||
MENUITEM "&75 fps", IDM_VID_GL_FPS_75
|
||||
END
|
||||
MENUITEM "&VSync", IDM_VID_GL_VSYNC
|
||||
MENUITEM "&Wybierz shader...", IDM_VID_GL_SHADER
|
||||
MENUITEM "&Usuń shader", IDM_VID_GL_NOSHADER
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
#define STR_PREFERENCES "Preferencje"
|
||||
#define STR_SND_GAIN "Wzmocnienie dźwięku"
|
||||
#define STR_NEW_FLOPPY "Nowy obraz"
|
||||
#define STR_CONFIG "Ustawienia"
|
||||
#define STR_SPECIFY_DIM "Określ rozmiary okna"
|
||||
|
||||
#define STR_OK "OK"
|
||||
#define STR_CANCEL "Anuluj"
|
||||
#define STR_GLOBAL "Zapisz ustawienia jako &globalne ustawienia domyślne"
|
||||
#define STR_DEFAULT "&Domyślny"
|
||||
#define STR_LANGUAGE "Język:"
|
||||
#define STR_ICONSET "Zestaw ikon:"
|
||||
|
||||
#define STR_GAIN "Wzmacniacz"
|
||||
|
||||
#define STR_FILE_NAME "Nazwa pliku:"
|
||||
#define STR_DISK_SIZE "Rozmiar dysku:"
|
||||
#define STR_RPM_MODE "Tryb RPM:"
|
||||
#define STR_PROGRESS "Postęp:"
|
||||
|
||||
#define STR_WIDTH "Szerokość:"
|
||||
#define STR_HEIGHT "Wysokość:"
|
||||
#define STR_LOCK_TO_SIZE "Stały rozmiar"
|
||||
|
||||
#define STR_MACHINE_TYPE "Rodzaj maszyny:"
|
||||
#define STR_MACHINE "Maszyna:"
|
||||
#define STR_CONFIGURE "Konfiguruj"
|
||||
#define STR_CPU_TYPE "Rodzaj procesora:"
|
||||
#define STR_SPEED "Szybkość:"
|
||||
#define STR_FPU "Jednostka FPU:"
|
||||
#define STR_WAIT_STATES "Stany oczekiwania:"
|
||||
#define STR_MB "MB"
|
||||
#define STR_MEMORY "Pamięć:"
|
||||
#define STR_TIME_SYNC "Synchronizacja czasu"
|
||||
#define STR_DISABLED "Wyłączona"
|
||||
#define STR_ENABLED_LOCAL "Włączona (czas lokalny)"
|
||||
#define STR_ENABLED_UTC "Włączona (UTC)"
|
||||
#define STR_DYNAREC "Dynamiczny rekompilator"
|
||||
|
||||
#define STR_VIDEO "Wideo:"
|
||||
#define STR_VOODOO "Grafika Voodoo"
|
||||
|
||||
#define STR_MOUSE "Mysz:"
|
||||
#define STR_JOYSTICK "Joystick:"
|
||||
#define STR_JOY1 "Joystick 1..."
|
||||
#define STR_JOY2 "Joystick 2..."
|
||||
#define STR_JOY3 "Joystick 3..."
|
||||
#define STR_JOY4 "Joystick 4..."
|
||||
|
||||
#define STR_SOUND "Karta dźwiękowa:"
|
||||
#define STR_MIDI "Urządzenie wyjściowe MIDI:"
|
||||
#define STR_MIDI_IN "Urządzenie wejściowe MIDI:"
|
||||
#define STR_MPU401 "Samodzielne urządzenie MPU-401"
|
||||
#define STR_SSI "Innovation SSI-2001"
|
||||
#define STR_CMS "CMS / Game Blaster"
|
||||
#define STR_GUS "Gravis Ultrasound"
|
||||
#define STR_FLOAT "Użyj dźwięku FLOAT32"
|
||||
|
||||
#define STR_NET_TYPE "Rodzaj sieci:"
|
||||
#define STR_PCAP "Urządzenie PCap:"
|
||||
#define STR_NET "Karta sieciowa:"
|
||||
|
||||
#define STR_LPT1 "Urządzenie LPT1:"
|
||||
#define STR_LPT2 "Urządzenie LPT2:"
|
||||
#define STR_LPT3 "Urządzenie LPT3:"
|
||||
#define STR_SERIAL1 "Port szeregowy 1"
|
||||
#define STR_SERIAL2 "Port szeregowy 2"
|
||||
#define STR_SERIAL3 "Port szeregowy 3"
|
||||
#define STR_SERIAL4 "Port Szeregowy 4"
|
||||
#define STR_PARALLEL1 "Port równoległy 1"
|
||||
#define STR_PARALLEL2 "Port równoległy 2"
|
||||
#define STR_PARALLEL3 "Port równoległy 3"
|
||||
|
||||
#define STR_HDC "Kontroler dysku twardego:"
|
||||
#define STR_FDC "Kontroler dyskietek:"
|
||||
#define STR_IDE_TER "Trzeciorzędowy kontroler IDE"
|
||||
#define STR_IDE_QUA "Czwartorzędowy kontroler IDE"
|
||||
#define STR_SCSI "SCSI"
|
||||
#define STR_SCSI_1 "Kontroler 1:"
|
||||
#define STR_SCSI_2 "Kontroler 2:"
|
||||
#define STR_SCSI_3 "Kontroler 3:"
|
||||
#define STR_SCSI_4 "Kontroler 4:"
|
||||
#define STR_CASSETTE "Kaseta"
|
||||
|
||||
#define STR_HDD "Dyski twarde:"
|
||||
#define STR_NEW "&Nowy..."
|
||||
#define STR_EXISTING "&Istniejący..."
|
||||
#define STR_REMOVE "&Usuń"
|
||||
#define STR_BUS "Magistrala:"
|
||||
#define STR_CHANNEL "Kanał:"
|
||||
#define STR_ID "ID:"
|
||||
|
||||
#define STR_SPECIFY "&Określ..."
|
||||
#define STR_SECTORS "Sektory:"
|
||||
#define STR_HEADS "Głowice:"
|
||||
#define STR_CYLS "Cylindry:"
|
||||
#define STR_SIZE_MB "Rozmiar (MB):"
|
||||
#define STR_TYPE "Rodzaj:"
|
||||
#define STR_IMG_FORMAT "Format obrazu:"
|
||||
#define STR_BLOCK_SIZE "Rozmiar bloku:"
|
||||
|
||||
#define STR_FLOPPY_DRIVES "Napędy dyskietek:"
|
||||
#define STR_TURBO "Rozrządy Turbo"
|
||||
#define STR_CHECKBPB "Sprawdzaj BPB"
|
||||
#define STR_CDROM_DRIVES "Napędy CD-ROM:"
|
||||
|
||||
#define STR_MO_DRIVES "Napędy MO:"
|
||||
#define STR_ZIP_DRIVES "Napędy ZIP:"
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "ISA RTC:"
|
||||
#define STR_ISAMEM "Rozszerzenie pamięci ISA"
|
||||
#define STR_ISAMEM_1 "Karta 1:"
|
||||
#define STR_ISAMEM_2 "Karta 2:"
|
||||
#define STR_ISAMEM_3 "Karta 3:"
|
||||
#define STR_ISAMEM_4 "Karta 4:"
|
||||
#define STR_BUGGER "Urządzenie ISABugger"
|
||||
#define STR_POSTCARD "Karta POST"
|
||||
|
||||
#define FONT_SIZE 9
|
||||
#define FONT_NAME "Segoe UI"
|
||||
|
||||
#include "dialogs.rc"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
2048 "86Box"
|
||||
IDS_2049 "Błąd"
|
||||
IDS_2050 "Fatalny błąd"
|
||||
IDS_2051 "<reserved>"
|
||||
IDS_2052 "Naciśnij klawisze CTRL+ALT+PAGE DOWN aby wrócić to trybu okna."
|
||||
IDS_2053 "Szybkość"
|
||||
IDS_2054 "ZIP %03i %i (%s): %ls"
|
||||
IDS_2055 "Obrazy ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
|
||||
IDS_2056 "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony <a href=""https://github.com/86Box/roms/releases/latest"">download</a>, i rozpakować je do katalogu ""roms""."
|
||||
IDS_2057 "(pusty)"
|
||||
IDS_2058 "Obrazy ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_2059 "Turbo"
|
||||
IDS_2060 "Włącz"
|
||||
IDS_2061 "Wyłącz"
|
||||
IDS_2062 "Wszystkie obrazy (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Podstawowe obrazy sektorów(*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Obrazy powierzchniowe (*.86F)\0*.86F\0"
|
||||
IDS_2063 "Maszyna ""%hs"" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/machines. Przełączanie na dostępną maszynę."
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "Karta wideo ""%hs"" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/video. Przełączanie na dostępną kartę wideo."
|
||||
IDS_2065 "Maszyna"
|
||||
IDS_2066 "Ekran"
|
||||
IDS_2067 "Urządzenia wejściowe"
|
||||
IDS_2068 "Dźwięk"
|
||||
IDS_2069 "Sieć"
|
||||
IDS_2070 "Porty (COM & LPT)"
|
||||
IDS_2071 "Kontrolery pamięci"
|
||||
IDS_2072 "Dyski twarde"
|
||||
IDS_2073 "Napędy dyskietek i CD-ROM"
|
||||
IDS_2074 "Inne urządzenia wymienne"
|
||||
IDS_2075 "Inne urządzenia peryferyjne"
|
||||
IDS_2076 "Obrazy powierzchniowe (*.86F)\0*.86F\0"
|
||||
IDS_2077 "Kliknij w celu przechwycenia myszy"
|
||||
IDS_2078 "Naciśnij klawisze F8+F12 w celu uwolnienia myszy"
|
||||
IDS_2079 "Naciśnij klawisze F8+F12 lub środkowy przycisk w celu uwolnienia myszy"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2080 "Nie można zainicjować FluidSynth"
|
||||
IDS_2081 "Magistrala"
|
||||
IDS_2082 "Plik"
|
||||
IDS_2083 "C"
|
||||
IDS_2084 "H"
|
||||
IDS_2085 "S"
|
||||
IDS_2086 "MB"
|
||||
IDS_2087 "Sprawdzaj BPB"
|
||||
IDS_2088 "KB"
|
||||
IDS_2089 "Nie można zainicjować renderera wideo."
|
||||
IDS_2090 "Domyślny"
|
||||
IDS_2091 "%i Stany oczekiwania"
|
||||
IDS_2092 "Rodzaj"
|
||||
IDS_2093 "Nie udało się ustawić PCap"
|
||||
IDS_2094 "Nie znaleziono urządzeń PCap"
|
||||
IDS_2095 "Nieprawidłowe urządzenie PCap"
|
||||
IDS_2096 "Standardowe joysticki 2-przyciskowe"
|
||||
IDS_2097 "Standardowy joystick 4-przyciskowy"
|
||||
IDS_2098 "Standardowy joystick 6-przyciskowy"
|
||||
IDS_2099 "Standardowy joystick 8-przyciskowy"
|
||||
IDS_2100 "CH Flightstick Pro"
|
||||
IDS_2101 "Microsoft SideWinder Pad"
|
||||
IDS_2102 "Thrustmaster Flight Control System"
|
||||
IDS_2103 "Żaden"
|
||||
IDS_2104 "Nie można załadować akceleratorów klawiaturowych."
|
||||
IDS_2105 "Nie można zarejestrować surowych danych wejściowych."
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "Dyskietka %i (%s): %ls"
|
||||
IDS_2109 "Wszystkie obrazy (*.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\0Zaawansowane obrazy sektorów (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Podstawowe obrazy sektorów (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Obrazy powierzchniowe (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
|
||||
IDS_2110 "Nie można zainicjować FreeType"
|
||||
IDS_2111 "Nie można zainicjować SDL, wymagany SDL2.dll"
|
||||
IDS_2112 "Jesteś pewien że chcesz wykonać twardy reset emulowanej maszyny?"
|
||||
IDS_2113 "Jesteś pewien że chcesz zakończyć 86Box?"
|
||||
IDS_2114 "Nie można zainicjować Ghostscript"
|
||||
IDS_2115 "MO %i (%ls): %ls"
|
||||
IDS_2116 "Obrazy MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0All files (*.*)\0*.*\0"
|
||||
IDS_2117 "Witamy w 86Box!"
|
||||
IDS_2118 "Kontroler wewnętrzny"
|
||||
IDS_2119 "Zakończ"
|
||||
IDS_2120 "Nie znaleziono obrazów ROM"
|
||||
IDS_2121 "Czy chcesz zapisać ustawienia?"
|
||||
IDS_2122 "To spowoduje twardy reset wirtualnej maszyny."
|
||||
IDS_2123 "Zapisz"
|
||||
IDS_2124 "O 86Box"
|
||||
IDS_2125 "86Box v" EMU_VERSION
|
||||
|
||||
IDS_2126 "Emulator starych komputerów\n\nAutorzy: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i inni.\n\nPrzetłumaczony przez: Fanta-Shokata\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji."
|
||||
IDS_2127 "OK"
|
||||
IDS_2128 "Sprzęt niedostępny"
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_PCAP "WinPcap"
|
||||
#else
|
||||
#define LIB_NAME_PCAP "libpcap"
|
||||
#endif
|
||||
IDS_2129 "Sprawdź, czy " LIB_NAME_PCAP " jest zainstalowany i czy posiadasz połączenie sieciowe kompatybilne z " LIB_NAME_PCAP "."
|
||||
IDS_2130 "Nieprawidłowa konfiguracja"
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_FREETYPE "freetype.dll"
|
||||
#else
|
||||
#define LIB_NAME_FREETYPE "libfreetype"
|
||||
#endif
|
||||
IDS_2131 LIB_NAME_FREETYPE " jest wymagany do emulacji drukarki ESC-P."
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_GS "gsdll32.dll"
|
||||
#else
|
||||
#define LIB_NAME_GS "libgs"
|
||||
#endif
|
||||
IDS_2132 LIB_NAME_GS " jest wymagany do automatycznej konwersji plików PostScript do PDF.\n\nDokumenty wysłane do ogólnej drukarki PostScript zostaną zapisane jako pliki PostScript (.ps)."
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
|
||||
#else
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
|
||||
#endif
|
||||
IDS_2133 LIB_NAME_FLUIDSYNTH " jest wymagany dla wyjścia FluidSynth MIDI."
|
||||
IDS_2134 "Przechodzenie do trybu pełnoekranowego"
|
||||
IDS_2135 "Nie pokazuj więcej tego komunikatu"
|
||||
IDS_2136 "Nie kończ"
|
||||
IDS_2137 "Przywróć"
|
||||
IDS_2138 "Nie przywracaj"
|
||||
IDS_2139 "Obrazy MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0All files (*.*)\0*.*\0"
|
||||
IDS_2140 "Obrazy CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0All files (*.*)\0*.*\0"
|
||||
IDS_2141 "Konfiguracja urządzenia %hs"
|
||||
IDS_2142 "Monitor w trybie czuwania"
|
||||
IDS_2143 "Shadery OpenGL (*.GLSL)\0*.GLSL\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_2144 "Opcje OpenGL"
|
||||
IDS_2145 "Ładujesz nieobsługiwaną konfigurację"
|
||||
IDS_2146 "Wybór rodzaju procesora oparty na wybranej maszynie jest wyłączony dla tej emulowanej maszyny.\n\nPozwala to na wybór procesora który jest niekompatybilny z wybraną maszyną. Jednak możesz napotkać niezgodności z BIOS-em maszyny lub innym oprogramowaniem.\n\nAktywacja tego ustawienia nie jest wspierana i każde zgłoszenie błędu może zostać zamknięte jako nieważne."
|
||||
IDS_2147 "Kontynuuj"
|
||||
IDS_2148 "Kaseta: %s"
|
||||
IDS_2149 "Obrazy kaset (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_2150 "Kartrydż %i: %ls"
|
||||
IDS_2151 "Obrazy kartrydżu (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_2152 "Błąd inicjalizacji renderera"
|
||||
IDS_2153 "Nie można zainicjować renderera OpenGL (3.0 Core). Użyj innego."
|
||||
IDS_2154 "Wznów wykonywanie"
|
||||
IDS_2155 "Zatrzymaj wykonywanie"
|
||||
IDS_2156 "Naciśnij Ctrl+Alt+Del"
|
||||
IDS_2157 "Naciśnij Ctrl+Alt+Esc"
|
||||
IDS_2158 "Twardy reset"
|
||||
IDS_2159 "Wyłączenie ACPI"
|
||||
IDS_2160 "Ustawienia"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_4096 "Dysk twardy (%s)"
|
||||
IDS_4097 "%01i:%01i"
|
||||
IDS_4098 "%01i"
|
||||
IDS_4099 "Napędy CD-ROM MFM/RLL lub ESDI nigdy nie istniały"
|
||||
IDS_4100 "Niestandardowy..."
|
||||
IDS_4101 "Niestandardowy (duży)..."
|
||||
IDS_4102 "Dodaj nowy dysk twardy"
|
||||
IDS_4103 "Dodaj istniejący dysk twardy"
|
||||
IDS_4104 "Obrazy dysków HDI nie mogą być większe niż 4 GB."
|
||||
IDS_4105 "Obrazy dysków nie mogą być większe niż 127 GB."
|
||||
IDS_4106 "Obrazy dysku twardego (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_4107 "Nie można odczytać pliku"
|
||||
IDS_4108 "Nie można zapisać pliku"
|
||||
IDS_4109 "Obrazy HDI lub HDX z rozmiarem sektora innym niż 512 nie są wspierane."
|
||||
IDS_4110 "USB nie jest jeszcze wspierane"
|
||||
IDS_4111 "Plik obrazu dysku już istnieje"
|
||||
IDS_4112 "Określ prawidłową nazwę pliku."
|
||||
IDS_4113 "Utworzono obraz dysku"
|
||||
IDS_4114 "Sprawdź, czy plik istnieje i nadaje się do odczytu."
|
||||
IDS_4115 "Sprawdź, czy plik jest zapiyswany w katalogu z możliwością zapisu."
|
||||
IDS_4116 "Obraz dysku jest za duży"
|
||||
IDS_4117 "Nie zapomnij o partycjonowaniu u sformatowaniu nowo utworzego dysku"
|
||||
IDS_4118 "Wybrany plik zostanie nadpisany. Czy na pewno chcesz użyć tego pliku?"
|
||||
IDS_4119 "Niewspierany obraz dysku"
|
||||
IDS_4120 "Nadpisz"
|
||||
IDS_4121 "Nie nadpisuj"
|
||||
IDS_4122 "Obraz surowy (.img)"
|
||||
IDS_4123 "Obraz HDI (.hdi)"
|
||||
IDS_4124 "Obraz HDX (.hdx)"
|
||||
IDS_4125 "VHD o stałym rozmiarze (.vhd)"
|
||||
IDS_4126 "VHD o dynamicznym rozmiarze (.vhd)"
|
||||
IDS_4127 "VHD różnicujący (.vhd)"
|
||||
IDS_4128 "Duże bloki (2 MB)"
|
||||
IDS_4129 "Małe bloki (512 KB)"
|
||||
IDS_4130 "Pliki VHD (*.VHD)\0*.VHD\0Wszystkie pliki (*.*)\0*.*\0"
|
||||
IDS_4131 "Wybierz nadrzędny plik VHD"
|
||||
IDS_4132 "Może to oznaczać, że obraz nadrzędny został zmodyfikowany po utworzeniu obrazu różnicującego.\n\nMoże się to również zdarzyć, jeśli pliki obrazów przeniesione lub skopiowane, lub wystąpił błąd w programie, który utworzył ten dysk\n\nCzy chcesz naprawić sygnatury czasowe?"
|
||||
IDS_4133 "Sygnatury czasowe dysku nadrzędnego i podrzędnego nie zgadzają się"
|
||||
IDS_4134 "Nie można naprawić sygnatury czasowej 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 "Wyłączony"
|
||||
IDS_5381 "ATAPI"
|
||||
IDS_5382 "SCSI"
|
||||
|
||||
IDS_5632 "Wyłączony"
|
||||
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 (klaster 1024)"
|
||||
IDS_5898 "DMF (klaster 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 "Idealne obroty"
|
||||
IDS_6145 "1%% poniżej idealnych obrotów"
|
||||
IDS_6146 "1.5%% poniżej idealnych obrotów"
|
||||
IDS_6147 "2%% poniżej idealnych obrotów"
|
||||
|
||||
IDS_7168 "(Domyślne ustawienie systemowe)"
|
||||
END
|
||||
#define IDS_LANG_ENUS IDS_7168
|
||||
|
||||
// Polish (pl-PL) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@@ -35,6 +35,7 @@ BEGIN
|
||||
POPUP "&Exibir"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de status", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Ocultar &barra de ferramenta", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
|
||||
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
|
||||
@@ -374,7 +375,7 @@ END
|
||||
#define STR_SIZE_MB "Tamanho (MB):"
|
||||
#define STR_TYPE "Tipo:"
|
||||
#define STR_IMG_FORMAT "Formato:"
|
||||
#define STR_BLOCK_SIZE "Tamanho do bloco:"
|
||||
#define STR_BLOCK_SIZE "Bloco:"
|
||||
|
||||
#define STR_FLOPPY_DRIVES "Unidades de disquete:"
|
||||
#define STR_TURBO "Turbo"
|
||||
@@ -484,7 +485,7 @@ BEGIN
|
||||
IDS_2115 "Magneto-óptico %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_2118 "Controlador interno"
|
||||
IDS_2119 "Sair"
|
||||
IDS_2120 "Nenhum ROM encontrada"
|
||||
IDS_2121 "Você deseja salvar as configurações?"
|
||||
@@ -541,6 +542,13 @@ BEGIN
|
||||
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os arquivos (*.*)\0*.*\0"
|
||||
IDS_2152 "Erro ao inicializar o renderizador"
|
||||
IDS_2153 "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador."
|
||||
IDS_2154 "Continuar a execução"
|
||||
IDS_2155 "Pausar a execução"
|
||||
IDS_2156 "Pressionar Ctrl+Alt+Del"
|
||||
IDS_2157 "Pressionar Ctrl+Alt+Esc"
|
||||
IDS_2158 "Reinicialização completa"
|
||||
IDS_2159 "Desligamento por ACPI"
|
||||
IDS_2160 "Configurações"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Ver"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
|
||||
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os ficheiros (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -31,12 +31,13 @@ BEGIN
|
||||
END
|
||||
POPUP "&Вид"
|
||||
BEGIN
|
||||
MENUITEM "&Скрыть строку статуса", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "&Скрыть строку состояния", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "С&крыть панель инструментов", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Изменяемый размер окна", IDM_VID_RESIZE
|
||||
MENUITEM "&Запомнить размер и положение", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "&Рендерер"
|
||||
POPUP "&Рендеринг"
|
||||
BEGIN
|
||||
MENUITEM "&SDL (Software)", IDM_VID_SDL_SW
|
||||
MENUITEM "SDL (&Hardware)", IDM_VID_SDL_HW
|
||||
@@ -97,7 +98,7 @@ BEGIN
|
||||
POPUP "&Инструменты"
|
||||
BEGIN
|
||||
MENUITEM "&Настройки машины...", IDM_CONFIG
|
||||
MENUITEM "&Обновление значков строки статуса", IDM_UPDATE_ICONS
|
||||
MENUITEM "&Обновление значков строки состояния", IDM_UPDATE_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Сделать с&криншот\tCtrl+F11", IDM_ACTION_SCREENSHOT
|
||||
MENUITEM SEPARATOR
|
||||
@@ -143,7 +144,7 @@ BEGIN
|
||||
MENUITEM "&Точка останова журнала\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
# endif
|
||||
# ifdef ENABLE_VRAM_DUMP
|
||||
MENUITEM "&Выгрузка дампа видео-ОЗУ\tCtrl+F1", IDM_DUMP_VRAM
|
||||
MENUITEM "&Выгрузка дампа видеопамяти\tCtrl+F1", IDM_DUMP_VRAM
|
||||
# endif
|
||||
# endif
|
||||
END
|
||||
@@ -207,7 +208,7 @@ CdromSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "&Mute", IDM_CDROM_MUTE
|
||||
MENUITEM "О&тключить звук", IDM_CDROM_MUTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "П&устой", IDM_CDROM_EMPTY
|
||||
MENUITEM "&Снова загрузить предыдущий образ", IDM_CDROM_RELOAD
|
||||
@@ -293,8 +294,8 @@ END
|
||||
#define STR_MACHINE_TYPE "Тип машины:"
|
||||
#define STR_MACHINE "Системная плата:"
|
||||
#define STR_CONFIGURE "Настройка"
|
||||
#define STR_CPU_TYPE "Тип ЦПУ:"
|
||||
#define STR_SPEED "Speed:"
|
||||
#define STR_CPU_TYPE "Тип ЦП:"
|
||||
#define STR_SPEED "Скорость:"
|
||||
#define STR_FPU "FPU:"
|
||||
#define STR_WAIT_STATES "Циклы ожидания:"
|
||||
#define STR_MB "МБ"
|
||||
@@ -468,7 +469,7 @@ BEGIN
|
||||
IDS_2102 "Система управления полетом Thrustmaster"
|
||||
IDS_2103 "Нет"
|
||||
IDS_2104 "Невозможно загрузить ускорители клавиатуры."
|
||||
IDS_2105 "Невозможно зарегистрировать необработанный ввод."
|
||||
IDS_2105 "Невозможно зарегистрировать необработанный (RAW) ввод."
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u МБ (CHS: %i, %i, %i)"
|
||||
IDS_2108 "Дисковод %i (%s): %ls"
|
||||
@@ -530,14 +531,21 @@ BEGIN
|
||||
IDS_2143 "Шейдеры OpenGL (*.GLSL)\0*.GLSL\0Все файлы (*.*)\0*.*\0"
|
||||
IDS_2144 "Параметры OpenGL"
|
||||
IDS_2145 "Вы загружаете неподдерживаемую конфигурацию"
|
||||
IDS_2146 "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные."
|
||||
IDS_2146 "Выбор типов ЦП для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные."
|
||||
IDS_2147 "Продолжить"
|
||||
IDS_2148 "Кассета: %s"
|
||||
IDS_2149 "Образы кассет (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Все файлы (*.*)\0*.*\0"
|
||||
IDS_2150 "Картридж %i: %ls"
|
||||
IDS_2151 "Образы картриджей (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Все файлы (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Ошибка инициализации рендерера"
|
||||
IDS_2153 "Невозможно инициализировать рендерер OpenGL (3.0). Пожалуйста, используйте другой рендерер."
|
||||
IDS_2154 "Возобновить выполнение"
|
||||
IDS_2155 "Приостановить выполнение"
|
||||
IDS_2156 "Нажать Ctrl+Alt+Del"
|
||||
IDS_2157 "Нажать Ctrl+Alt+Esc"
|
||||
IDS_2158 "Холодная перезагрузка"
|
||||
IDS_2159 "Сигнал завершения ACPI"
|
||||
IDS_2160 "Настройки машины"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -546,10 +554,10 @@ BEGIN
|
||||
IDS_4097 "%01i:%01i"
|
||||
IDS_4098 "%01i"
|
||||
IDS_4099 "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало"
|
||||
IDS_4100 "Custom..."
|
||||
IDS_4101 "Custom (large)..."
|
||||
IDS_4100 "Задать вручную..."
|
||||
IDS_4101 "Задать вручную (large)..."
|
||||
IDS_4102 "Создать новый жёсткий диск"
|
||||
IDS_4103 "Добавить существующий жёсткий диск"
|
||||
IDS_4103 "Выбрать существующий жёсткий диск"
|
||||
IDS_4104 "Размер образов дисков HDI не может превышать 4 ГБ."
|
||||
IDS_4105 "Размер образов дисков не может превышать 127 ГБ."
|
||||
IDS_4106 "Образы жёстких дисков (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Все файлы (*.*)\0*.*\0"
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Pogled"
|
||||
BEGIN
|
||||
MENUITEM "&Skrij statusno vrstico", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "S&premenljiva velikost okna", IDM_VID_RESIZE
|
||||
MENUITEM "&Zapomni si velikost in položaj", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Slike spominskega vložka (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Vse datoteke (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Görüntüleme"
|
||||
BEGIN
|
||||
MENUITEM "&Durum çubuğunu gizle", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Yeniden boyutlandırılabilir pencere", IDM_VID_RESIZE
|
||||
MENUITEM "&Pencere boyut ve pozisyonunu hatırla", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "Kartuş imajları (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tüm dosyalar (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "查看(&V)"
|
||||
BEGIN
|
||||
MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "隐藏工具栏(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "窗口大小可调(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "记住窗口大小和位置(&E)", IDM_VID_REMEMBER
|
||||
@@ -538,6 +539,13 @@ BEGIN
|
||||
IDS_2151 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2152 "初始化渲染器时出错"
|
||||
IDS_2153 "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。"
|
||||
IDS_2154 "恢复执行"
|
||||
IDS_2155 "暂停执行"
|
||||
IDS_2156 "按 Ctrl+Alt+Del"
|
||||
IDS_2157 "按 Ctrl+Alt+Esc"
|
||||
IDS_2158 "硬重置"
|
||||
IDS_2159 "ACPI 关机"
|
||||
IDS_2160 "设置"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -450,9 +450,6 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nCmdShow)
|
||||
{
|
||||
char **argv = NULL;
|
||||
int argc, i;
|
||||
wchar_t * AppID = L"86Box.86Box\0";
|
||||
|
||||
SetCurrentProcessExplicitAppUserModelID(AppID);
|
||||
|
||||
/* Initialize the COM library for the main thread. */
|
||||
CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||
@@ -1121,10 +1118,7 @@ plat_setfullscreen(int on)
|
||||
GetClientRect(hwndMain, &rect);
|
||||
|
||||
temp_x = rect.right - rect.left + 1;
|
||||
if (hide_status_bar)
|
||||
temp_y = rect.bottom - rect.top + 1;
|
||||
else
|
||||
temp_y = rect.bottom - rect.top + 1 - sbar_height;
|
||||
temp_y = rect.bottom - rect.top + 1 - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height);
|
||||
} else {
|
||||
if (dpi_scale) {
|
||||
temp_x = MulDiv((vid_resize & 2) ? fixed_size_x : unscaled_size_x, dpi, 96);
|
||||
@@ -1138,10 +1132,7 @@ plat_setfullscreen(int on)
|
||||
if (vid_resize >= 2)
|
||||
MoveWindow(hwndMain, window_x, window_y, window_w, window_h, TRUE);
|
||||
|
||||
if (hide_status_bar)
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y);
|
||||
else
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
|
||||
}
|
||||
|
||||
/* Render window. */
|
||||
|
||||
@@ -87,6 +87,13 @@ const _ICON_DATA icon_files[] =
|
||||
{185, "mo_empty_active.ico"},
|
||||
{192, "cassette_empty.ico"},
|
||||
{193, "cassette_empty_active.ico"},
|
||||
{200, "run.ico"},
|
||||
{201, "pause.ico"},
|
||||
{202, "send_cad.ico"},
|
||||
{203, "send_cae.ico"},
|
||||
{204, "hard_reset.ico"},
|
||||
{205, "acpi_shutdown.ico"},
|
||||
{206, "settings.ico"},
|
||||
{232, "cartridge_empty.ico"},
|
||||
{240, "machine.ico"},
|
||||
{241, "display.ico"},
|
||||
@@ -120,9 +127,11 @@ void win_load_icon_set()
|
||||
win_clear_icon_set();
|
||||
win_system_icon_set();
|
||||
|
||||
if (strlen(icon_set) == 0)
|
||||
if (strlen(icon_set) == 0) {
|
||||
ToolBarLoadIcons();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
char path_root[2048] = {0}, temp[2048] = {0};
|
||||
wchar_t wtemp[2048] = {0};
|
||||
|
||||
@@ -150,4 +159,6 @@ void win_load_icon_set()
|
||||
uint32_t curr_lang = lang_id;
|
||||
lang_id = 0;
|
||||
set_language(curr_lang);
|
||||
|
||||
ToolBarLoadIcons();
|
||||
}
|
||||
@@ -52,8 +52,13 @@ typedef struct {
|
||||
} disk_size_t;
|
||||
|
||||
|
||||
static const disk_size_t disk_sizes[14] = { { 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */
|
||||
{ 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */
|
||||
static const disk_size_t disk_sizes[14] = {
|
||||
// { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */
|
||||
// { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */
|
||||
// { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */
|
||||
// { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */
|
||||
{ 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 1, 2, 1, 64 }, /* 160k */
|
||||
{ 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 1, 2, 2, 64 }, /* 180k */
|
||||
{ 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */
|
||||
{ 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112 }, /* 360k */
|
||||
{ 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112 }, /* 640k */
|
||||
@@ -698,7 +703,7 @@ NewFloppyDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
uint8_t disk_size, rpm_mode;
|
||||
int ret;
|
||||
FILE *f;
|
||||
int zip_types, mo_types;
|
||||
int zip_types, mo_types, floppy_types;
|
||||
wchar_t *twcs;
|
||||
|
||||
switch (message) {
|
||||
@@ -716,7 +721,8 @@ NewFloppyDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
for (i = 0; i < mo_types; i++)
|
||||
SendMessage(h, CB_ADDSTRING, 0, win_get_string(IDS_5902 + i));
|
||||
} else {
|
||||
for (i = 0; i < 12; i++)
|
||||
floppy_types = 12;
|
||||
for (i = 0; i < floppy_types; i++)
|
||||
SendMessage(h, CB_ADDSTRING, 0, win_get_string(IDS_5888 + i));
|
||||
}
|
||||
SendMessage(h, CB_SETCURSEL, 0, 0);
|
||||
|
||||
@@ -200,8 +200,9 @@ static void set_parent_binding(int enable)
|
||||
* @param wParam
|
||||
* @param lParam
|
||||
* @param fullscreen
|
||||
* @return Was message handled
|
||||
*/
|
||||
static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
|
||||
static int handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
@@ -219,7 +220,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
/* Mouse events that enter and exit capture. */
|
||||
PostMessage(parent, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYDOWN:
|
||||
@@ -228,7 +229,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
{
|
||||
PostMessage(parent, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_INPUT:
|
||||
if (fullscreen)
|
||||
{
|
||||
@@ -256,8 +257,17 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
}
|
||||
free(raw);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_MOUSELEAVE:
|
||||
if (fullscreen)
|
||||
{
|
||||
/* Leave fullscreen if mouse leaves the renderer window. */
|
||||
PostMessage(GetAncestor(parent, GA_ROOT), WM_LEAVEFULLSCREEN, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -638,12 +648,13 @@ static void opengl_main(void* param)
|
||||
|
||||
/* Handle window messages */
|
||||
MSG msg;
|
||||
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
if (msg.hwnd == window_hwnd)
|
||||
handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen);
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
if (msg.hwnd != window_hwnd || !handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Wait for synchronized events for 1ms before going back to window events */
|
||||
@@ -722,7 +733,14 @@ static void opengl_main(void* param)
|
||||
{
|
||||
SetForegroundWindow(window_hwnd);
|
||||
SetFocus(window_hwnd);
|
||||
|
||||
/* Clip cursor to prevent it moving to another monitor. */
|
||||
RECT rect;
|
||||
GetWindowRect(window_hwnd, &rect);
|
||||
ClipCursor(&rect);
|
||||
}
|
||||
else
|
||||
ClipCursor(NULL);
|
||||
}
|
||||
|
||||
if (fullscreen)
|
||||
@@ -854,6 +872,8 @@ static void opengl_main(void* param)
|
||||
|
||||
static void opengl_blit(int x, int y, int w, int h)
|
||||
{
|
||||
int row;
|
||||
|
||||
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (thread == NULL) ||
|
||||
atomic_flag_test_and_set(&blit_info[write_pos].in_use))
|
||||
{
|
||||
@@ -861,7 +881,8 @@ static void opengl_blit(int x, int y, int w, int h)
|
||||
return;
|
||||
}
|
||||
|
||||
video_copy(blit_info[write_pos].buffer, &(buffer32->line[y][x]), h * ROW_LENGTH * sizeof(uint32_t));
|
||||
for (row = 0; row < h; ++row)
|
||||
video_copy(&(((uint8_t *) blit_info[write_pos].buffer)[row * ROW_LENGTH * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
|
||||
|
||||
if (screenshots)
|
||||
video_screenshot(blit_info[write_pos].buffer, 0, 0, ROW_LENGTH);
|
||||
|
||||
@@ -274,6 +274,7 @@ sdl_blit_ex(int x, int y, int w, int h)
|
||||
SDL_Rect r_src;
|
||||
void *pixeldata;
|
||||
int pitch, ret;
|
||||
int row;
|
||||
|
||||
if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
|
||||
video_blit_complete();
|
||||
@@ -284,7 +285,8 @@ sdl_blit_ex(int x, int y, int w, int h)
|
||||
|
||||
SDL_LockTexture(sdl_tex, 0, &pixeldata, &pitch);
|
||||
|
||||
video_copy(pixeldata, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t));
|
||||
for (row = 0; row < h; ++row)
|
||||
video_copy(&(((uint8_t *) pixeldata)[row * 2048 * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
|
||||
|
||||
if (screenshots)
|
||||
video_screenshot((uint32_t *) pixeldata, 0, 0, 2048);
|
||||
|
||||