Compare commits
795 changed files with 50850 additions and 200786 deletions
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -1,38 +0,0 @@
|
||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Emulator configuration**
|
|
||||||
- Machine: [e.g. IBM AT, AMI 486 clone etc]
|
|
||||||
- CPU:
|
|
||||||
- Graphics/sound cards:
|
|
||||||
- Installed OS
|
|
||||||
|
|
||||||
**Host machine**
|
|
||||||
- OS: [e.g. Windows 10, Ubuntu 18.04 etc]
|
|
||||||
- Emulator version
|
|
||||||
- Any other relevant information
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
201
.github/workflows/c-cpp.yml
vendored
201
.github/workflows/c-cpp.yml
vendored
|
|
@ -1,201 +0,0 @@
|
||||||
name: C/C++ CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- name: Ubuntu 64bit (gcc)
|
|
||||||
os: ubuntu-latest
|
|
||||||
args: --enable-networking --enable-release-build CFLAGS="-DPCEM_BUILD_VERSION=${GITHUB_SHA::8}"
|
|
||||||
artifacts_name: PCem-Ubuntu-${{ github.head_ref }}-${{ github.run_number }}
|
|
||||||
artifacts_path: PCem-${{ github.sha }}.tar.bz2
|
|
||||||
installdeps: >-
|
|
||||||
libsdl2-dev
|
|
||||||
libopenal-dev
|
|
||||||
libwxgtk3.0-gtk3-dev
|
|
||||||
libncap-dev
|
|
||||||
- name: Windows 32bits (MSYS2)
|
|
||||||
os: windows-latest
|
|
||||||
compiler: MINGW32
|
|
||||||
args: --enable-networking --enable-release-build CFLAGS="-DPCEM_BUILD_VERSION=${GITHUB_SHA::8}"
|
|
||||||
artifacts_name: PCem-Windows-MINGW32-${{ github.head_ref }}-${{ github.run_number }}
|
|
||||||
artifacts_path: PCem-${{ github.sha }}.zip
|
|
||||||
installdeps: >-
|
|
||||||
base-devel
|
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
mingw-w64-i686-ntldd-git
|
|
||||||
mingw-w64-i686-toolchain
|
|
||||||
mingw-w64-i686-SDL2
|
|
||||||
mingw-w64-i686-openal
|
|
||||||
mingw-w64-i686-wxWidgets
|
|
||||||
- name: Windows 64bits (MSYS2)
|
|
||||||
os: windows-latest
|
|
||||||
compiler: MINGW64
|
|
||||||
args: --enable-networking --enable-release-build CFLAGS="-DPCEM_BUILD_VERSION=${GITHUB_SHA::8}"
|
|
||||||
artifacts_name: PCem-Windows-MINGW64-${{ github.head_ref }}-${{ github.run_number }}
|
|
||||||
artifacts_path: PCem-${{ github.sha }}.zip
|
|
||||||
installdeps: >-
|
|
||||||
base-devel
|
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
mingw-w64-x86_64-ntldd-git
|
|
||||||
mingw-w64-x86_64-toolchain
|
|
||||||
mingw-w64-x86_64-SDL2
|
|
||||||
mingw-w64-x86_64-openal
|
|
||||||
mingw-w64-x86_64-wxWidgets
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
name: ${{ matrix.name }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
path: temp
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup MSYS2 (Windows)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
# You may pin to the exact commit or the version.
|
|
||||||
# uses: msys2/setup-msys2@a43b8403533fffe0c157dd8498f021ddec66bff7
|
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
# Variant of the environment to set by default: MSYS, MINGW32, MINGW64, UCRT64 or CLANG64
|
|
||||||
msystem: ${{ matrix.compiler }}
|
|
||||||
# Retrieve and extract base installation from upstream GitHub Releases
|
|
||||||
release: false # optional, default is true
|
|
||||||
# Update MSYS2 installation through pacman
|
|
||||||
update: false
|
|
||||||
# Install packages after installation through pacman
|
|
||||||
install: ${{ matrix.installdeps }}
|
|
||||||
- name: npcap download (Windows)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
wget https://nmap.org/npcap/dist/npcap-sdk-1.05.zip
|
|
||||||
unzip -d npcap-sdk-1.05/ npcap-sdk-1.05.zip
|
|
||||||
cd npcap-sdk-1.05
|
|
||||||
cp -r Include/* /mingw32/include/
|
|
||||||
cp -r Include/* /mingw64/include/
|
|
||||||
cp -r Lib/*.lib /mingw32/lib/
|
|
||||||
cp -r Lib/x64/*.lib /mingw64/lib/
|
|
||||||
- name: Setup ubuntu dependencies
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install ${{ matrix.installdeps }}
|
|
||||||
|
|
||||||
# Copy all the sources to the dist folder, before we start generating intermediate files.
|
|
||||||
- name: prepare-package (Windows32)
|
|
||||||
if: runner.os == 'Windows' && matrix.compiler == 'MINGW32'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
mkdir dist
|
|
||||||
cp -R ./temp/* dist
|
|
||||||
rm -Rf ./dist/.git
|
|
||||||
cp /mingw32/bin/libdeflate.dll dist
|
|
||||||
cp /mingw32/bin/libexpat-1.dll dist
|
|
||||||
cp /mingw32/bin/libgcc_s_dw2-1.dll dist
|
|
||||||
cp /mingw32/bin/libjpeg-8.dll dist
|
|
||||||
cp /mingw32/bin/liblzma-5.dll dist
|
|
||||||
cp /mingw32/bin/libopenal-1.dll dist
|
|
||||||
cp /mingw32/bin/libpng16-16.dll dist
|
|
||||||
cp /mingw32/bin/libstdc++-6.dll dist
|
|
||||||
cp /mingw32/bin/libtiff-5.dll dist
|
|
||||||
cp /mingw32/bin/libwebp-7.dll dist
|
|
||||||
cp /mingw32/bin/libwinpthread-1.dll dist
|
|
||||||
cp /mingw32/bin/libzstd.dll dist
|
|
||||||
cp /mingw32/bin/SDL2.dll dist
|
|
||||||
cp /mingw32/bin/wxbase30u_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/wxbase30u_xml_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/wxmsw30u_adv_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/wxmsw30u_core_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/wxmsw30u_html_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/wxmsw30u_xrc_gcc_custom.dll dist
|
|
||||||
cp /mingw32/bin/zlib1.dll dist
|
|
||||||
- name: prepare-package (Windows64)
|
|
||||||
if: runner.os == 'Windows' && matrix.compiler == 'MINGW64'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
mkdir dist
|
|
||||||
cp -R ./temp/* dist
|
|
||||||
rm -Rf ./dist/.git
|
|
||||||
cp /mingw64/bin/libdeflate.dll dist
|
|
||||||
cp /mingw64/bin/libexpat-1.dll dist
|
|
||||||
cp /mingw64/bin/libgcc_s_seh-1.dll dist
|
|
||||||
cp /mingw64/bin/libjpeg-8.dll dist
|
|
||||||
cp /mingw64/bin/liblzma-5.dll dist
|
|
||||||
cp /mingw64/bin/libopenal-1.dll dist
|
|
||||||
cp /mingw64/bin/libpng16-16.dll dist
|
|
||||||
cp /mingw64/bin/libstdc++-6.dll dist
|
|
||||||
cp /mingw64/bin/libtiff-5.dll dist
|
|
||||||
cp /mingw64/bin/libwebp-7.dll dist
|
|
||||||
cp /mingw64/bin/libwinpthread-1.dll dist
|
|
||||||
cp /mingw64/bin/libzstd.dll dist
|
|
||||||
cp /mingw64/bin/SDL2.dll dist
|
|
||||||
cp /mingw64/bin/wxbase30u_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/wxbase30u_xml_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/wxmsw30u_adv_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/wxmsw30u_core_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/wxmsw30u_html_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/wxmsw30u_xrc_gcc_custom.dll dist
|
|
||||||
cp /mingw64/bin/zlib1.dll dist
|
|
||||||
- name: configure (Windows)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
cd temp
|
|
||||||
autoreconf -i
|
|
||||||
./configure ${{ matrix.args }}
|
|
||||||
- name: make (Windows)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
cd temp
|
|
||||||
make -j
|
|
||||||
- name: package (Windows)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
cp ./temp/src/pcem.exe dist
|
|
||||||
cd dist
|
|
||||||
zip -r -9 ${{ matrix.artifacts_path }} *
|
|
||||||
|
|
||||||
- name: prepare-package (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
mkdir dist
|
|
||||||
cp -R ./temp/* dist
|
|
||||||
rm -Rf ./dist/.git
|
|
||||||
- name: configure (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
cd temp
|
|
||||||
autoreconf -i
|
|
||||||
./configure ${{ matrix.args }}
|
|
||||||
- name: make (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
cd temp
|
|
||||||
make -j
|
|
||||||
- name: package (Linux)
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
cp ./temp/src/pcem dist
|
|
||||||
cd dist
|
|
||||||
tar -cjf ${{ matrix.artifacts_path }} *
|
|
||||||
|
|
||||||
- name: "Upload GitHub Actions artifacts"
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.artifacts_name }}
|
|
||||||
path: ./dist/${{ matrix.artifacts_path }}
|
|
||||||
|
|
||||||
11
.gitignore
vendored
11
.gitignore
vendored
|
|
@ -1,11 +0,0 @@
|
||||||
*.o
|
|
||||||
*.swp
|
|
||||||
/Makefile
|
|
||||||
/src/Makefile
|
|
||||||
autom4te.cache
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
.deps
|
|
||||||
.dirstamp
|
|
||||||
/pcem
|
|
||||||
/src/pcem
|
|
||||||
61
Makefile.in
61
Makefile.in
|
|
@ -1,7 +1,7 @@
|
||||||
# Makefile.in generated by automake 1.16.3 from Makefile.am.
|
# Makefile.in generated by automake 1.15 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -89,7 +89,8 @@ build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
subdir = .
|
subdir = .
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
am__aclocal_m4_deps = $(top_srcdir)/allegro.m4 \
|
||||||
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
||||||
|
|
@ -133,7 +134,7 @@ am__recursive_targets = \
|
||||||
$(RECURSIVE_CLEAN_TARGETS) \
|
$(RECURSIVE_CLEAN_TARGETS) \
|
||||||
$(am__extra_recursive_targets)
|
$(am__extra_recursive_targets)
|
||||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
||||||
cscope distdir distdir-am dist dist-all distcheck
|
cscope distdir dist dist-all distcheck
|
||||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||||
# Read a list of newline-separated strings from the standard input,
|
# Read a list of newline-separated strings from the standard input,
|
||||||
# and print each of them once, without duplicates. Input order is
|
# and print each of them once, without duplicates. Input order is
|
||||||
|
|
@ -196,13 +197,12 @@ am__relativize = \
|
||||||
DIST_ARCHIVES = $(distdir).tar.gz
|
DIST_ARCHIVES = $(distdir).tar.gz
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
DIST_TARGETS = dist-gzip
|
DIST_TARGETS = dist-gzip
|
||||||
# Exists only to be overridden by the user if desired.
|
|
||||||
AM_DISTCHECK_DVI_TARGET = dvi
|
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||||
distcleancheck_listfiles = find . -type f -print
|
distcleancheck_listfiles = find . -type f -print
|
||||||
ACLOCAL = @ACLOCAL@
|
ACLOCAL = @ACLOCAL@
|
||||||
|
ALLEGRO_CONFIG = @ALLEGRO_CONFIG@
|
||||||
AMTAR = @AMTAR@
|
AMTAR = @AMTAR@
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||||
AUTOCONF = @AUTOCONF@
|
AUTOCONF = @AUTOCONF@
|
||||||
|
|
@ -243,36 +243,18 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_URL = @PACKAGE_URL@
|
PACKAGE_URL = @PACKAGE_URL@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
SDL2_CONFIG = @SDL2_CONFIG@
|
|
||||||
SDL2_FRAMEWORK = @SDL2_FRAMEWORK@
|
|
||||||
SDL_CFLAGS = @SDL_CFLAGS@
|
|
||||||
SDL_LIBS = @SDL_LIBS@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
STRIP = @STRIP@
|
STRIP = @STRIP@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
WX_CFLAGS = @WX_CFLAGS@
|
|
||||||
WX_CFLAGS_ONLY = @WX_CFLAGS_ONLY@
|
|
||||||
WX_CONFIG_PATH = @WX_CONFIG_PATH@
|
|
||||||
WX_CPPFLAGS = @WX_CPPFLAGS@
|
|
||||||
WX_CXXFLAGS = @WX_CXXFLAGS@
|
|
||||||
WX_CXXFLAGS_ONLY = @WX_CXXFLAGS_ONLY@
|
|
||||||
WX_LIBS = @WX_LIBS@
|
|
||||||
WX_LIBS_STATIC = @WX_LIBS_STATIC@
|
|
||||||
WX_RESCOMP = @WX_RESCOMP@
|
|
||||||
WX_VERSION = @WX_VERSION@
|
|
||||||
WX_VERSION_MAJOR = @WX_VERSION_MAJOR@
|
|
||||||
WX_VERSION_MICRO = @WX_VERSION_MICRO@
|
|
||||||
WX_VERSION_MINOR = @WX_VERSION_MINOR@
|
|
||||||
abs_builddir = @abs_builddir@
|
abs_builddir = @abs_builddir@
|
||||||
abs_srcdir = @abs_srcdir@
|
abs_srcdir = @abs_srcdir@
|
||||||
abs_top_builddir = @abs_top_builddir@
|
abs_top_builddir = @abs_top_builddir@
|
||||||
abs_top_srcdir = @abs_top_srcdir@
|
abs_top_srcdir = @abs_top_srcdir@
|
||||||
ac_ct_CC = @ac_ct_CC@
|
ac_ct_CC = @ac_ct_CC@
|
||||||
ac_ct_CXX = @ac_ct_CXX@
|
ac_ct_CXX = @ac_ct_CXX@
|
||||||
|
allegro_CFLAGS = @allegro_CFLAGS@
|
||||||
|
allegro_LIBS = @allegro_LIBS@
|
||||||
am__include = @am__include@
|
am__include = @am__include@
|
||||||
am__leading_dot = @am__leading_dot@
|
am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
|
|
@ -344,8 +326,8 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
echo ' $(SHELL) ./config.status'; \
|
echo ' $(SHELL) ./config.status'; \
|
||||||
$(SHELL) ./config.status;; \
|
$(SHELL) ./config.status;; \
|
||||||
*) \
|
*) \
|
||||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
|
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
|
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||||
esac;
|
esac;
|
||||||
|
|
||||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
|
@ -463,10 +445,7 @@ distclean-tags:
|
||||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
distdir: $(DISTFILES)
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(DISTFILES)
|
|
||||||
$(am__remove_distdir)
|
$(am__remove_distdir)
|
||||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
|
|
@ -531,7 +510,7 @@ distdir-am: $(DISTFILES)
|
||||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||||
|| chmod -R a+r "$(distdir)"
|
|| chmod -R a+r "$(distdir)"
|
||||||
dist-gzip: distdir
|
dist-gzip: distdir
|
||||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-bzip2: distdir
|
dist-bzip2: distdir
|
||||||
|
|
@ -546,10 +525,6 @@ dist-xz: distdir
|
||||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-zstd: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-tarZ: distdir
|
dist-tarZ: distdir
|
||||||
@echo WARNING: "Support for distribution archives compressed with" \
|
@echo WARNING: "Support for distribution archives compressed with" \
|
||||||
"legacy program 'compress' is deprecated." >&2
|
"legacy program 'compress' is deprecated." >&2
|
||||||
|
|
@ -561,7 +536,7 @@ dist-shar: distdir
|
||||||
@echo WARNING: "Support for shar distribution archives is" \
|
@echo WARNING: "Support for shar distribution archives is" \
|
||||||
"deprecated." >&2
|
"deprecated." >&2
|
||||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
||||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
$(am__post_remove_distdir)
|
$(am__post_remove_distdir)
|
||||||
|
|
||||||
dist-zip: distdir
|
dist-zip: distdir
|
||||||
|
|
@ -579,7 +554,7 @@ dist dist-all:
|
||||||
distcheck: dist
|
distcheck: dist
|
||||||
case '$(DIST_ARCHIVES)' in \
|
case '$(DIST_ARCHIVES)' in \
|
||||||
*.tar.gz*) \
|
*.tar.gz*) \
|
||||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
*.tar.bz2*) \
|
*.tar.bz2*) \
|
||||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
*.tar.lz*) \
|
*.tar.lz*) \
|
||||||
|
|
@ -589,11 +564,9 @@ distcheck: dist
|
||||||
*.tar.Z*) \
|
*.tar.Z*) \
|
||||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||||
*.shar.gz*) \
|
*.shar.gz*) \
|
||||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||||
*.zip*) \
|
*.zip*) \
|
||||||
unzip $(distdir).zip ;;\
|
unzip $(distdir).zip ;;\
|
||||||
*.tar.zst*) \
|
|
||||||
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
|
|
||||||
esac
|
esac
|
||||||
chmod -R a-w $(distdir)
|
chmod -R a-w $(distdir)
|
||||||
chmod u+w $(distdir)
|
chmod u+w $(distdir)
|
||||||
|
|
@ -609,7 +582,7 @@ distcheck: dist
|
||||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
--srcdir=../.. --prefix="$$dc_install_base" \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
|
|
@ -770,7 +743,7 @@ uninstall-am:
|
||||||
am--refresh check check-am clean clean-cscope clean-generic \
|
am--refresh check check-am clean clean-cscope clean-generic \
|
||||||
cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
|
cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
|
||||||
dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
|
dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
|
||||||
dist-zstd distcheck distclean distclean-generic distclean-tags \
|
distcheck distclean distclean-generic distclean-tags \
|
||||||
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
||||||
html-am info info-am install install-am install-data \
|
html-am info info-am install install-am install-data \
|
||||||
install-data-am install-dvi install-dvi-am install-exec \
|
install-data-am install-dvi install-dvi-am install-exec \
|
||||||
|
|
|
||||||
397
README.md
397
README.md
|
|
@ -1,397 +0,0 @@
|
||||||
# [PCem](https://pcem-emulator.co.uk/)
|
|
||||||
## Download: [Windows](https://pcem-emulator.co.uk/files/PCemV17Win.zip)/[Linux](https://pcem-emulator.co.uk/files/PCemV17Linux.tar.gz)
|
|
||||||
|
|
||||||
Latest version: <b>v17</b> [Changelog](https://pcem-emulator.co.uk/index.html)
|
|
||||||
|
|
||||||
PCem is licensed under GPL v2.0, see [COPYING](COPYING) for more details.
|
|
||||||
|
|
||||||
You can submit patches on our [forum](https://pcem-emulator.co.uk/phpBB3). Before you do, please note the [guidelines](https://pcem-emulator.co.uk/phpBB3/viewtopic.php?f=3&t=5) for submitting patches.
|
|
||||||
|
|
||||||
:exclamation: Note: <b>NO COPYRIGHTED ROM FILES ARE INCLUDED NOR WILL THEY BE. PLEASE DO NOT ASK FOR THEM.</b>
|
|
||||||
|
|
||||||
## BSD and Linux supplement (v17)
|
|
||||||
|
|
||||||
You will need the following libraries (and their dependencies):
|
|
||||||
- SDL2
|
|
||||||
- wxWidgets 3.x
|
|
||||||
- OpenAL
|
|
||||||
|
|
||||||
Open a terminal window, navigate to the PCem directory then enter:
|
|
||||||
### Linux
|
|
||||||
```
|
|
||||||
./configure --enable-release-build
|
|
||||||
make
|
|
||||||
```
|
|
||||||
### BSD
|
|
||||||
```
|
|
||||||
./configure --enable-release-build
|
|
||||||
gmake
|
|
||||||
```
|
|
||||||
|
|
||||||
then `./pcem` to run.
|
|
||||||
|
|
||||||
The Linux/BSD versions store BIOS ROM images, configuration files, and other data in `~/.pcem`
|
|
||||||
|
|
||||||
configure options are :
|
|
||||||
```
|
|
||||||
--enable-release-build : Generate release build. Recommended for regular use.
|
|
||||||
--enable-debug : Compile with debugging enabled.
|
|
||||||
--enable-networking : Build with networking support.
|
|
||||||
--enable-alsa : Build with support for MIDI output through ALSA. Requires libasound.
|
|
||||||
```
|
|
||||||
|
|
||||||
The menu is a pop-up menu in the Linux/BSD port. Right-click on the main window when mouse is not
|
|
||||||
captured.
|
|
||||||
|
|
||||||
CD-ROM support currently only accesses `/dev/cdrom`. It has not been heavily tested.
|
|
||||||
|
|
||||||
## Links
|
|
||||||
|
|
||||||
### PCem emulates the following hardware (as of v17):
|
|
||||||
|
|
||||||
Hardware | Links
|
|
||||||
--- | ---
|
|
||||||
Systems | [8088](#8088-based)<br/>[8086](#8086-based)<br/>[286](#286-based)<br/>[386](#386-based)<br/>[486](#486-based)<br/>[Pentium](#pentium-based)<br/>[Super Socket 7](#super-socket-7-based)
|
|
||||||
Graphics | [Basic](#basic-cards)<br/>[Unaccelerated (S)VGA cards](#unaccelerated-svga-cards)<br/>[2D accelerated SVGA cards](#2d-accelerated-svga-cards)<br/>[3D accelerated SVGA cards](#3d-accelerated-svga-cards)<br/>[3D only cards](#3d-only-cards)
|
|
||||||
Sound | [Cards](#sound-cards)
|
|
||||||
HDD Controller | [Cards](#hdd-controller-cards)
|
|
||||||
Misc | [Cards](#misc-cards)
|
|
||||||
|
|
||||||
### [Software Tested](TESTED.md) (list)
|
|
||||||
- [DOS](TESTED.md#dos)<br/>
|
|
||||||
- [Windows](TESTED.md#windows)<br/>
|
|
||||||
- [Windows NT](TESTED.md#windows-nt)<br/>
|
|
||||||
- [OS/2](TESTED.md#os2)<br/>
|
|
||||||
- [Linux](TESTED.md#linux)<br/>
|
|
||||||
- [Applications](TESTED.md#applications)<br/>
|
|
||||||
- [Games](TESTED.md#games)<br/>
|
|
||||||
- [Demos](TESTED.md#demos)<br/>
|
|
||||||
- [Emulators](TESTED.md#emulators)<br/>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## Systems
|
|
||||||
|
|
||||||
### 8088 based
|
|
||||||
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | ---
|
|
||||||
1981 | <b>IBM PC</b><br/>8088 at 4.77 MHz<br/>16KB - 640KB RAM (min. 64KB) | ibmpc/pc102782.bin<br/>ibmpc/basicc11.f6<br/>ibmpc/basicc11.f8<br/>ibmpc/basicc11.fa<br/>ibmpc/basicc11.fc
|
|
||||||
1983 | <b>Compaq Portable Plus</b><br/>8088 at 4.77 MHz<br/>128KB - 640KB RAM | compaq_pip/Compaq Portable Plus 100666-001 Rev C.bin
|
|
||||||
1983 | <b>IBM XT</b><br/>8088 at 4.77 MHz<br/>64KB - 640KB RAM | ibmxt/5000027.u19<br/>ibmxt/1501512.u18
|
|
||||||
1983 | <b>Leading Edge Model M</b><br/>8088 at 7.16 MHz<br/>128KB - 704KB RAM | leadingedge_modelm/Leading Edge - Model M - BIOS ROM - Version 4.71.bin
|
|
||||||
1984 | <b>IBM PCjr</b> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>64KB - 640KB RAM (min. 128KB)<br/>Built-in 16 colour graphics<br/>3 voice sound<br/>Not generally PC compatible. | ibmpcjr/bios.rom
|
|
||||||
1984 | <b>Tandy 1000</b> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>128KB - 640KB RAM<br/>Built-in 16 colour graphics<br/>3 voice sound | tandy/tandy1t1.020
|
|
||||||
1985 | <b>NCR PC4i</b><br/>8088 at 4.77 MHz<br/>256KB - 640KB RAM | ncr_pc4i/NCR_PC4i_BIOSROM_1985.BIN
|
|
||||||
1986 | <b>DTK Clone XT</b><br/>8088 at 8/10 MHz<br/>64KB - 640KB RAM | dtk/dtk_erso_2.42_2764.bin
|
|
||||||
1986 | <b>Phoenix XT clone</b><br/>8088 at 8/10 MHz<br/>64KB - 640KB RAM | pxxt/000p001.bin
|
|
||||||
1987 | <b>Tandy 1000HX</b><br/>8088 at 7.16 MHz<br/>256KB - 640KB RAM<br/>Built-in 16 colour graphics<br/>3 voice sound<br/>Has DOS 2.11 in ROM | tandy1000hx/v020000.u12
|
|
||||||
1987 | <b>Thomson TO16 PC</b><br/>8088 at 9.54 MHz<br/>512KB - 640KB RAM | to16_pc/TO16_103.bin
|
|
||||||
1987 | <b>Toshiba T1000</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>512KB - 1024KB RAM<br/>CGA on built-in LCD | t1000/t1000.rom<br/>t1000/t1000font.rom
|
|
||||||
1987 | <b>VTech Laser Turbo XT</b><br/>8088 at 10 MHz<br/>640KB RAM | ltxt/27c64.bin
|
|
||||||
1987 | <b>Zenith Data SupersPort</b><br/>8088 at 8 MHz<br/>128KB - 640KB RAM<br/>Built-in LCD video is not currently emulated | zdsupers/z184m v3.1d.10d
|
|
||||||
1988? | <b>©Anonymous Generic Turbo XT BIOS</b><br/>8088 at 8+ MHz<br/>64KB - 640KB RAM | genxt/pcxt.rom
|
|
||||||
1988 | <b>Atari PC3</b><br/>8088 at 8 MHz<br/>640KB RAM | ataripc3/AWARD_ATARI_PC_BIOS_3.08.BIN
|
|
||||||
1988 | <b>Juko XT clone</b> | jukopc/000o001.bin
|
|
||||||
1988 | <b>Schneider Euro PC</b><br/>8088 at 9.54 MHz<br/>512KB - 640KB RAM | europc/50145<br/>europc/50146
|
|
||||||
1989 | <b>AMI XT clone</b><br/>8088 at 8+ MHz<br/>64KB - 640KB RAM | amixt/ami_8088_bios_31jan89.bin
|
|
||||||
2015 | <b>Xi8088</b><br/>8088 at 4.77-13.33 MHz<br/>640KB RAM | xi8088/bios-xi8088.bin
|
|
||||||
|
|
||||||
### 8086 based
|
|
||||||
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | ---
|
|
||||||
1984 | <b>Compaq Deskpro</b><br/>8086 at 8 MHz<br/>128KB - 640KB RAM | deskpro/Compaq - BIOS - Revision J - 106265-002.bin
|
|
||||||
1984 | <b>Olivetti M24</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>128KB - 640KB RAM<br/>Built-in enhanced CGA (supports 640x400x2) | olivetti_m24/olivetti_m24_version_1.43_low.bin<br/>olivetti_m24/olivetti_m24_version_1.43_high.bin
|
|
||||||
1986 | <b>Amstrad PC1512</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Enhanced CGA (supports 640x200x16)<br/>Custom mouse port | pc1512/40043.v1<br/>pc1512/40044.v2<br/>pc1512/40078.ic127
|
|
||||||
1987 | <b>Amstrad PC1640</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in Paradise EGA<br/>Custom mouse port | pc1640/40043.v3<br/>pc1640/40044.v3<br/>pc1640/40100
|
|
||||||
1987 | <b>Toshiba T1200</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>8086 at 9.54 MHz<br/>1MB - 2MB RAM<br/>CGA on built-in LCD | t1200/t1200_019e.ic15.bin<br/>t1200/t1000font.rom
|
|
||||||
1988 | <b>Amstrad PPC512/640</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Built-in CGA w/ plasma display | ppc512/40107.v2<br/>ppc512/40108.v2<br/>ppc512/40109.bin
|
|
||||||
1988 | <b>Sinclair PC200/Amstrad PC20</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Built-in CGA (supports TV-out 50hz PAL) | pc200/pc20v2.0<br/>pc200/pc20v2.1<br/>pc200/40109.bin
|
|
||||||
1988 | <b>VTech Laser XT3</b><br/>8086 at 10 MHz<br/>512KB - 1152KB RAM | lxt3/27c64d.bin
|
|
||||||
1989 | <b>Amstrad PC2086</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in VGA | pc2086/40179.ic129<br/>pc2086/40180.ic132<br/>pc2086/40186.ic171
|
|
||||||
1989 | <b>Tandy 1000SL/2</b> <i>[[5]](#system-note-5)</i><br/>8086 at 9.54 MHz<br/>512KB - 768KB RAM<br/>Built-in 16 colour graphics<br/>4 voice sound | tandy1000sl2/8079047.hu1<br/>tandy1000sl2/8079048.hu2
|
|
||||||
1990 | <b>Amstrad PC3086</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in VGA | pc3086/fc00.bin<br/>pc3086/c000.bin
|
|
||||||
1991 | <b>Amstrad PC5086</b><br/>8086 at 8 MHz<br/>640KB RAM | pc5086/sys_rom.bin
|
|
||||||
|
|
||||||
### 286 based
|
|
||||||
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | ---
|
|
||||||
1984 | <b>IBM AT</b><br/>286 at 6 or 8 MHz<br/>256KB - 16MB RAM | ibmat/at111585.0<br/>ibmat/at111585.1
|
|
||||||
1986 | <b>Compaq Portable II</b><br/>286 at 8 MHz<br/>256KB - 15MB RAM | compaq_pii/109739-001.rom<br/>compaq_pii/109740-001.rom
|
|
||||||
1986 | <b>IBM XT Model 286</b><br/>286 at 6 MHz<br/>256KB - 16MB RAM | ibmxt286/BIOS_5162_21APR86_U34_78X7460_27256.BIN<br/>ibmxt286/BIOS_5162_21APR86_U35_78X7461_27256.BIN
|
|
||||||
1986 | <b>Toshiba T3100e</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>286 at 12 MHz<br/>1MB - 5MB RAM<br/>CGA on gas-plasma display | t3100e/t3100e_font.bin<br/>t3100e/t3100e.rom
|
|
||||||
1987 | <b>IBM PS/2 Model 50</b> <i>[[5]](#system-note-5)</i><br/>286 at 10 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | i8550021/90x7420.zm13<br/>i8550021/90x7423.zm14<br/>i8550021/90x7426.zm16<br/>i8550021/90x7429.zm18
|
|
||||||
1988 | <b>Bull Micral 45</b><br/>286 at 12 MHz<br/>1MB - 6MB RAM | bull_micral_45/even.fil<br/>bull_micral_45/odd.fil
|
|
||||||
1988 | <b>Commodore PC30-III</b><br/>286 at 12 MHz<br/>512KB - 16MB RAM | cmdpc30/commodore pc 30 iii even.bin<br/>cmdpc30/commodore pc 30 iii odd.bin
|
|
||||||
1988 | <b>IBM PS/2 Model 30-286</b><br/>286 at 10 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | ibmps2_m30_286/33f5381a.bin
|
|
||||||
1989 | <b>Epson PC AX</b><br/>286<br/>256KB - 16MB RAM | epson_pcax/EVAX<br/>epson_pcax/ODAX
|
|
||||||
1989 | <b>Epson PC AX2e</b><br/>286 at 12 MHz<br/>256KB - 16MB RAM | epson_pcax2e/EVAX<br/>epson_pcax2e/ODAX
|
|
||||||
1990 | <b>AMI 286 clone</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | ami286/amic206.bin
|
|
||||||
1990 | <b>Award 286 clone</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | award286/award.bin
|
|
||||||
1990 | <b>Dell System 200</b><br/>286 at 12 MHz<br/>640KB - 16MB RAM | dells200/dell0.bin<br/>dells200/dell1.bin
|
|
||||||
1990 | <b>IBM PS/1 Model 2011</b> <i>[[5]](#system-note-5)</i><br/>286 at 10 MHz<br/>512KB - 16MB RAM<br/>Built-in VGA<br/>DOS 4.01 + GUI menu system in ROM | ibmps1/f80000.bin
|
|
||||||
? | <b>Goldstar GDC-212M</b><br/>286 at 12 MHz<br/>512KB - 4MB RAM | gdc212m/gdc212m_72h.bin
|
|
||||||
? | <b>GW-286CT GEAR</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | gw286ct/2ctc001.bin
|
|
||||||
? | <b>Hyundai Super-286TR</b><br/>286 at 12 MHz<br/>1MB - 4MB RAM | super286tr/award.bin
|
|
||||||
? | <b>Samsung SPC-4200P</b><br/>286 at 12 MHz<br/>512KB - 2MB RAM | spc4200p/u8.01
|
|
||||||
? | <b>Samsung SPC-4216P</b><br/>286 at 12 MHz<br/>1MB - 5MB RAM | spc4216p/phoenix.bin<br/> <i>or</i><br/>spc4216p/7101.u8<br/>spc4216p/ac64.u10
|
|
||||||
? | <b>Samsung SPC-4620P</b><br/>286 at 12 MHz<br/>1MB - 5MB RAM<br/>Built-in Korean ATI-28800 | spc4620p/31005h.u8<br/>spc4620p/31005h.u10<br/>spc4620p/svb6120a_font.rom<br/>spc4620p/31005h.u8<br/>spc4620p/31005h.u10
|
|
||||||
? | <b>Tulip AT Compact</b><br/>286<br/>640KB - 16MB RAM | tulip_tc7/tc7be.bin<br/>tulip_tc7/tc7bo.bin
|
|
||||||
|
|
||||||
### 386 based
|
|
||||||
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | ---
|
|
||||||
1987 | <b>IBM PS/2 Model 80</b> <i>[[5]](#system-note-5)</i><br/>386DX at 20 MHz<br/>1MB - 12MB RAM<br/>Built-in VGA<br/>MCA bus | i8580111/15f6637.bin<br/>i8580111/15f6639.bin
|
|
||||||
1988 | <b>ECS 386/32</b><br/>386DX at 20 MHz<br/>1MB - 16MB RAM | ecs386_32/386_32_even.bin<br/>ecs386_32/386_32_odd.bin
|
|
||||||
1989 | <b>IBM PS/2 Model 70 (type 3)</b> <i>[[5]](#system-note-5)</i><br/>386DX at 25 MHz<br/>2MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | ibmps2_m70_type3/70-a_even.bin<br/>ibmps2_m70_type3/70-a_odd.bin
|
|
||||||
1989 | <b>Compaq Deskpro 386</b><br/>386DX at 20 MHz<br/>1MB - 15MB RAM | deskpro386/109592-005.u11.bin<br/>deskpro386/109591-005.u13.bin
|
|
||||||
1989 | <b>Epson PC AX3</b><br/>386SX at 16 MHz<br/>256KB - 16MB RAM | epson_pcax3/EVAX3<br/>epson_pcax3/ODAX3
|
|
||||||
1989 | <b>IBM PS/2 Model 55SX</b><br/>386SX at 16 MHz<br/>1MB - 8MB RAM<br/>Built-in VGA<br/>MCA bus | i8555081/33f8146.zm41<br/>i8555081/33f8145.zm40
|
|
||||||
1990 | <b>DTK 386SX clone</b><br/>386SX<br/>512KB - 16MB RAM | dtk386/3cto001.bin
|
|
||||||
1990 | <b>IBM PS/1 Model 2121</b> <i>[[5]](#system-note-5)</i><br/>386SX at 20 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA | ibmps1_2121/fc0000.bin
|
|
||||||
1990 | <b>Samsung SPC-6000A</b><br/>386DX<br/>1MB - 32 MB RAM | spc6000a/3c80.u27<br/>spc6000a/9f80.u26
|
|
||||||
1992 | <b>Acermate 386SX/25N</b> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>2MB - 16MB RAM<br/>Built-in Oak SVGA | acer386/acer386.bin<br/>acer386/oti067.bin
|
|
||||||
1992 | <b>Amstrad MegaPC</b> <i>[[2]](#system-note-2)</i> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/> | megapc/41651-bios lo.u18<br/>megapc/211253-bios hi.u19
|
|
||||||
1992 | <b>Commodore SL386SX-25</b> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>1MB - 16MB RAM<br/>Built-in AVGA2 | cbm_sl386sx25/f000.bin<br/>cbm_sl386sx25/c000.bin
|
|
||||||
1992 | <b>Packard Bell Legend 300SX</b><br/>386SX at 16 MHz<br/>1MB - 16MB RAM | pb_l300sx/pb_l300sx.bin
|
|
||||||
1992 | <b>Samsung SPC-6033P</b><br/>386SX at 33 MHz<br/>2MB - 12 MB RAM | spc6033p/phoenix.bin<br/>spc6033p/svb6120a_font.rom
|
|
||||||
1994 | <b>AMI 386DX clone</b><br/>386DX at 40 MHz<br/>1MB - 32MB RAM | ami386dx/opt495sx.ami
|
|
||||||
1994 | <b>AMI 386SX clone</b><br/>386SX at 25 MHz<br/>1MB - 16MB RAM | ami386/ami386.bin
|
|
||||||
1994 | <b>MR 386DX clone</b><br/>This is a generic 386DX clone with an MR BIOS | mr386dx/opt495sx.mr
|
|
||||||
? | <b>KMX-C-02</b><br/>386SX<br/>512KB - 16MB RAM | kmxc02/3ctm005.bin
|
|
||||||
|
|
||||||
### 486 based
|
|
||||||
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ---
|
|
||||||
1990 | <b>IBM PS/2 Model 70 (type 4)</b> <i>[[3]](#system-note-3)</i><br/>2MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | <b>486DX</b> at 25 MHz | ibmps2_m70_type3/70-a_even.bin<br/>ibmps2_m70_type3/70-a_odd.bin
|
|
||||||
1993 | <b>AMI 486 clone</b><br/>1MB - 32MB RAM | <b>486</b> at 16-66 MHz | ami486/ami486.bin
|
|
||||||
1993 | <b>Elonex PC-425X</b> <i>[[5]](#system-note-5)</i><br/>1MB - 256MB RAM<br/>Built-in Trident TGUI9440CXi | <b>486SX</b> at 25 MHz | elx_pc425x/elx_pc425x.bin<br/> <i>or</i><br/>elx_pc425x/elx_pc425x_bios.bin<br/>elx_pc425x/elx_pc425x_vbios.bin
|
|
||||||
1993 | <b>IBM PS/1 Model 2133 (EMEA 451)</b><br/>2MB - 64MB RAM<br/>Built-in Cirrus Logic GD5426 | <b>486SX</b> at 25 MHz | ibmps1_2133/PS1_2133_52G2974_ROM.bin
|
|
||||||
1993 | <b>Packard Bell PB410A</b> <i>[[5]](#system-note-5)</i><br/>1MB - 64MB RAM<br/>Built-in HT-216 video | <b>486</b> at 25-120 MHz<br/><b>Am5x86</b> at 133-160 MHz<br/><b>Cx5x86</b> at 100-133 MHz<br/><b>Pentium Overdrive</b> at 63-83 MHz | pb410a/PB410A.080337.4ABF.U25.bin
|
|
||||||
1994 | <b>AMI WinBIOS 486 clone</b><br/>1MB - 32MB RAM | <b>486</b> at 16-66 MHz | win486/ali1429g.amw
|
|
||||||
1995 | <b>Award SiS 496/497</b><br/>1MB - 64MB RAM | <b>486</b> at 16-120 MHz<br/><b>Am5x86</b> at 133-160 MHz<br/><b>Cx5x86</b> at 100-133 MHz<br/><b>Pentium Overdrive</b> at 63-83 MHz | sis496/sis496-1.awa
|
|
||||||
|
|
||||||
### Pentium based
|
|
||||||
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ---
|
|
||||||
1994 | <b>Intel Premiere/PCI (Batman's Revenge)</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 60-66 MHz<br/><b>Pentium Overdrive</b> at 120-133 MHz | revenge/1009af2_.bi0<br/>revenge/1009af2_.bi1
|
|
||||||
1995 | <b>Intel Advanced/EV (Endeavor)</b> <i>[[4]](#system-note-4)</i><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | endeavor/1006cb0_.bi0<br/>endeavor/1006cb0_.bi1
|
|
||||||
1995 | <b>Intel Advanced/ZP (Zappa)</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | zappa/1006bs0_.bio<br/>zappa/1006bs0_.bi1
|
|
||||||
1995 | <b>Packard Bell PB520R (Robin LC)</b> <i>[[5]](#system-note-5)</i><br/>1MB - 128MB RAM<br/>Built-in Cirrus Logic GD-5434 | <b>Pentium</b> at 60-66 MHz<br/><b>Pentium Overdrive</b> at 120-133 MHz | pb520r/1009bc0r.bio<br/>pb520r/1009bc0r.bi1<br/>pb520r/gd5434.bin
|
|
||||||
1995 | <b>Packard Bell PB570 (Hillary)</b> <i>[[5]](#system-note-5)</i><br/>1MB - 128MB RAM<br/>Built-in Cirrus Logic GD-5430 | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | pb570/1007by0r.bio<br/>pb570/1007by0r.bi1<br/>pb570/gd5430.bin
|
|
||||||
1996 | <b>ASUS P/I-P55TVP4</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55tvp4/tv5i0204.awd
|
|
||||||
1996 | <b>ASUS P/I-P55T2P4</b><br/>1MB - 512MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55t2p4/0207_j2.bin
|
|
||||||
1996 | <b>Award 430VX PCI</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | 430vx/55xwuq0e.bin
|
|
||||||
1996 | <b>Itautec Infoway Multimidia</b><br/>8MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | infowaym/1006bs0_.bio<br/>infowaym/1006bs0_.bi1
|
|
||||||
1997 | <b>Epox P55-VA</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55va/va021297.bin
|
|
||||||
|
|
||||||
### Super Socket 7 based
|
|
||||||
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ---
|
|
||||||
1998 | <b>FIC VA-503+</b><br/>1MB - 512MB RAM | <b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> at 233-550 MHz<br/><b>AMD K6-2+</b> at 450-550 MHz<br/><b>AMD K6-III</b> at 400-450 MHz<br/><b>AMD K6-III+</b> at 400-500 MHz<br/><b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT WinChip2</b> at 200-250 MHz<br/><b>IDT Winchip 2A</b> at PR200<i>(200 MHz)</i>-PR300<i>(250 MHz)</i> | fic_va503p/je4333.bin
|
|
||||||
|
|
||||||
### Socket 8 based
|
|
||||||
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ---
|
|
||||||
1996 | <b>Intel VS440FX</b><br/>8MB - 256 MB RAM | <b>Pentium Pro</b> at 150-200 MHz<br/><b>Pentium II Overdrive</b> at 300-333 MHz | vs440fx/1018CS1_.BI1<br/>vs440fx/1018CS1_.BI2<br/>vs440fx/1018CS1_.BI3<br/>vs440fx/1018CS1_.BIO<br/>vs440fx/1018CS1_.RCV
|
|
||||||
|
|
||||||
### Slot 1 based
|
|
||||||
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ---
|
|
||||||
1998 | <b>Gigabyte GA-686BX</b><br/>8MB - 512MB RAM | <b>Pentium II</b> at 233-450 MHz<br/><b>Celeron</b> at 266-533 MHz<br/><b>Cyrix III</b>at 500 MHz | ga686bx/6BX.F2a
|
|
||||||
|
|
||||||
#### Additional Notes
|
|
||||||
<a name="system-note-1">`[1]`</a> <b>Toshiba Button Mapping</b>:
|
|
||||||
PCem maps [Fn] to `right-Ctrl` and `right-Alt`. The following functions are supported:
|
|
||||||
Key Combo | Function
|
|
||||||
---|---
|
|
||||||
Fn + Num Lock | toggle numpad
|
|
||||||
Fn + Home | Internal LCD display
|
|
||||||
Fn + Page Down | Turbo on
|
|
||||||
Fn + Right | Toggle LCD font
|
|
||||||
Fn + End | External CRT display
|
|
||||||
Fn + SysRQ | Toggle window
|
|
||||||
|
|
||||||
<a name="system-note-2">`[2]`</a> <b>Amstrad MegaPC</b> <i>(386SX)</i>: The original machine had a built-in Sega MegaDrive. This is not emulated in PCem.
|
|
||||||
|
|
||||||
<a name="system-note-3">`[3]`</a> <b>IBM PS/2 Model 70 (type 4)</b> <i>(486DX)</i>: PCem's FPU emulation is not bit accurate and can not pass IBM's floating point tests. As a result, this machine will always print 12903 and 162 errors on bootup. These can be ignored - F1 will boot the machine.
|
|
||||||
|
|
||||||
<a name="system-note-4">`[4]`</a> <b>Intel Advanced/EV (Endeavor)</b> <i>(Pentium)</i>: The real board has a Sound Blaster 16 onboard and optionally an S3 Trio64V+. Neither are emulated as onboard devices.
|
|
||||||
|
|
||||||
<a name="system-note-5">`[5]`</a> Some systems have fixed graphics adapters:<br/>
|
|
||||||
<i>** = Can use external video card.</i><br/>
|
|
||||||
|
|
||||||
System | Graphics | Addl. Info | **
|
|
||||||
--- | --- | --- | :-:
|
|
||||||
<b>Amstrad MegaPC</b> | Paradise 90C11 | A development of the PVGA1 with 512KB VRAM | ✔
|
|
||||||
<b>Acer 386SX/25N</b> | Oak OTI-067 | Another 512KB SVGA clone | ✔
|
|
||||||
<b>Amstrad PC1512</b> | CGA | Has a new mode (640x200x16) | X
|
|
||||||
<b>Amstrad PC1640</b> | Paradise EGA | | ✔
|
|
||||||
<b>Amstrad PC2086/PC3086</b> | Paradise PVGA1 | An early SVGA clone with 256KB VRAM | ✔
|
|
||||||
<b>Amstrad PPC512/640</b> | CGA/MDA | Outputs to 640x200 plasma display | ✔
|
|
||||||
<b>Commodore SL386SX-25</b> | AVGA2 | 256KB - 512KB VRAM | X
|
|
||||||
<b>Elonex PC-425X</b> | Trident TGUI9400CXi | 512KB VRAM | X
|
|
||||||
<b>IBM PCjr</b> | CGA | Has various new modes: <br/>160x200 x 16<br/>320x200 x 16<br/>640x200 x 4 | X
|
|
||||||
<b>IBM PS/1 Model 2011</b> | Stock VGA | 256KB VRAM | X
|
|
||||||
<b>IBM PS/1 Model 2121</b> | Basic (and unknown) SVGA | 256KB VRAM | X
|
|
||||||
<b>IBM PS/2 machines</b> | Stock VGA | 256KB VRAM | X
|
|
||||||
<b>Olivetti M24</b> <i>[[6]](#system-note-6)</i>| CGA | Has double-res text modes + 640x400 mode | X
|
|
||||||
<b>Packard Bell PB410A</b> | Headland HT-216 | | ✔
|
|
||||||
<b>Packard Bell PB520R</b> | Cirrus Logic GD-5434 | | ✔
|
|
||||||
<b>Packard Bell PB570</b> | Cirrus Logic GD-5430 | | ✔
|
|
||||||
<b>Sinclair PC200</b> | CGA | Can output to TV @ 50hz (UK) | ✔
|
|
||||||
<b>Tandy 1000</b> | Clone of PCjr video | Widely supported in 80s games | X
|
|
||||||
<b>Tandy 1000 SL/2</b> | Improved Tandy 1000 | Has support for 640x200x16 | X
|
|
||||||
<b>Toshiba T-series</b> | CGA | Outputs to built-in LCD or plasma display | X
|
|
||||||
|
|
||||||
<a name="system-note-6">`[6]`</a> <b>Olivetti M24 (display)</b>: I haven't seen a dump of the font ROM for this yet, so if one is not provided the MDA font will be used - which looks slightly odd as it is 14-line instead of 16-line.
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## Graphics Cards
|
|
||||||
|
|
||||||
### Basic cards
|
|
||||||
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
--- | --- | ---
|
|
||||||
<b>MDA</b> <i>(1981)</i> | 80x25 monochrome text | <i>(none)</i>
|
|
||||||
<b>CGA</b> <i>(1981)</i> | 40x25 and 80x25 text<br/>320x200 in 4 colours<br/>620x200 in 2 colours<br/>Supports composite output for ~16 colours. | <i>(none)</i>
|
|
||||||
<b>Hercules</b> <i>(1982)</i> | 80x25 monochrome text<br/>720x348 in monochrome | <i>(none)</i>
|
|
||||||
<b>Plantronics ColorPlus</b> | An enhanced CGA board with support for 320x200x16 and 640x200x4 | <i>(none)</i>
|
|
||||||
<b>Wyse WY-700</b> | A CGA-compatible board with support for a 1280x800 mode | <i>(none)</i>
|
|
||||||
<b>MDSI Genius</b> | Mono portrait board with support for a 728x1008 mode | 8x12.bin
|
|
||||||
<b>IBM EGA</b> <i>(1984)</i> | Text up to 80x43<br/>Graphics up to 640x350 in 16 colours | ibm_6277356_ega_card_u44_27128.bin
|
|
||||||
<b>ATI EGA Wonder 800+</b> | An enhanced EGA-compatible board with support for up to 800x600 in 16 colours | ATI EGA Wonder 800+ N1.00.BIN
|
|
||||||
<b>Hercules InColor</b> | An enhanced Hercules with a custom 720x350 16 colour mode | <i>(none)</i>
|
|
||||||
|
|
||||||
### Unaccelerated (S)VGA cards
|
|
||||||
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
--- | --- | ---
|
|
||||||
<b>ATI Korean VGA</b> | ATI-28800 based.<br/>512KB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | atikorvga.bin<br/>ati_ksc5601.rom
|
|
||||||
<b>ATI VGA Edge-16</b> | ATI-18800 based<br/>512KB VRAM<br/>Supports up to 8-bit colour | vgaedge16.vbi
|
|
||||||
<b>ATI VGA Charger</b> | ATI-28800 based<br/>512KB VRAM<br/>Supports up to 8-bit colour | bios.bin
|
|
||||||
<b>AVGA2</b> | Also known as Cirrus Logic GD5402<br/>256KB - 512KB VRAM<br/>Supports up to 8-bit colour | avga2vram.vbi
|
|
||||||
<b>IBM VGA</b> <i>(1987)</i> | 256KB VRAM<br/>Text up to 80x50<br/>Graphics up to 320x200 in 256 colours or 640x480 in 16 colours | ibm_vga.bin
|
|
||||||
<b>Kasan Hangulmadang-16</b> | ET4000AX based<br/>1MB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | et4000_kasan16.bin<br/>kasan_ksc5601.rom
|
|
||||||
<b>OAK OTI-037C</b> | 256KB VRAM<br/>Supports up to 8-bit colour | oti037/bios.bin
|
|
||||||
<b>OAK OTI-067</b> | 256KB - 512KB VRAM<br/>Supports up to 8-bit colour | oti067/bios.bin
|
|
||||||
<b>Olivetti GO481 (Paradise PVGA1A)</b> | 256KB VRAM<br/>Supports up to 8-bit colour | oli_go481_lo.bin<br/>oli_go481_hi.bin
|
|
||||||
<b>Trident 8900D SVGA</b> | 256KB - 1MB VRAM<br/>Supports up to 24-bit colour | trident.bin
|
|
||||||
<b>Trident 9000B SVGA</b> | 512KB VRAM<br/>Supports up to 8-bit colour | tvga9000b/BIOS.BIN
|
|
||||||
<b>Trident TGUI9400CXi</b> | 1MB - 2MB VRAM<br/>Supports up to 24-bit colour | 9440.vbi
|
|
||||||
<b>Trigem Korean VGA</b> | ET4000AX based<br/>1MB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | tgkorvga.bin<br/>tg_ksc5601.rom
|
|
||||||
<b>Tseng ET4000AX SVGA</b> | 1MB VRAM<br/>Supports up to 8-bit colour | et4000.bin
|
|
||||||
|
|
||||||
### 2D Accelerated SVGA cards
|
|
||||||
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
--- | --- | ---
|
|
||||||
<b>ATI Graphics Pro Turbo</b> | Mach64GX based<br/>1MB - 4MB VRAM | mach64gx/bios.bin
|
|
||||||
<b>ATI Video Xpression</b> | Mach64VT2 based<br/>2MB - 4MB VRAM<br/>Has video acceleration | atimach64vt2pci.bin
|
|
||||||
<b>Cirrus Logic GD-5428</b> | 1MB - 2MB VRAM | Machspeed_VGA_GUI_2100_VLB.vbi
|
|
||||||
<b>Cirrus Logic GD-5429</b> | 1MB - 2MB VRAM | 5429.vbi
|
|
||||||
<b>Cirrus Logic GD-5430</b> | 1MB - 2MB VRAM | gd5430/pci.bin
|
|
||||||
<b>Cirrus Logic GD-5434</b> <i>[[1]](#graphics-note-1)</i> | 2MB - 4MB VRAM | gd5434.bin
|
|
||||||
<b>Diamond Stealth 32 SVGA</b> | ET4000/W32p based<br/>1MB - 2MB VRAM | et4000w32.bin
|
|
||||||
<b>IBM 1MB SVGA Adapter/A</b> | Cirrus Logic GD5428 based<br/>1 MB VRAM<br/>Only supported on PS/2 models | SVGA141.ROM
|
|
||||||
<b>Number Nine 9FX</b> | S3 Trio64 based<br/>1MB - 2MB VRAM | s3_764.bin
|
|
||||||
<b>Paradise Bahamas 64</b> | S3 Vision864 based<br/>1MB - 4MB VRAM | bahamas64.bin
|
|
||||||
<b>Phoenix S3 Trio32</b> | S3 Trio32 based<br/>512KB - 2MB VRAM | 86c732p.bin
|
|
||||||
<b>Phoenix S3 Trio64</b> | S3 Trio64 based<br/>1MB - 4MB VRAM | 86c764x1.bin
|
|
||||||
<b>Trident TGUI9440</b> | 1MB - 2MB VRAM | 9440.vbi
|
|
||||||
|
|
||||||
### 3D Accelerated SVGA cards
|
|
||||||
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
--- | --- | ---
|
|
||||||
<b>3DFX Voodoo Banshee (reference)</b> | Voodoo Banshee based<br/>8MB - 16MB VRAM | pci_sg.rom
|
|
||||||
<b>3DFX Voodoo 3 2000</b> | Voodoo 3 based<br/>16MB VRAM | voodoo3_2000/2k11sd.rom
|
|
||||||
<b>3DFX Voodoo 3 3000</b> | Voodoo 3 based<br/>16MB VRAM | voodoo3_3000/3k12sd.rom
|
|
||||||
<b>Creative Labs 3D Blaster Banshee</b> | Voodoo Banshee based<br/>16MB VRAM | blasterpci.rom
|
|
||||||
<b>Diamond Stealth 3D 2000</b> <i>[[2]](#graphics-note-2)</i>| S3 ViRGE/325 based<br/>2MB - 4MB VRAM | s3virge.bin
|
|
||||||
<b>S3 ViRGE/DX</b> <i>[[3]](#graphics-note-3)</i>| S3 ViRGE/DX based<br/>2MB - 4MB VRAM | 86c375_1.bin
|
|
||||||
|
|
||||||
### 3D only cards
|
|
||||||
Hardware | Addl. Info
|
|
||||||
--- | ---
|
|
||||||
<b>3DFX Voodoo Graphics</b> <i>[[4]](#graphics-note-4)</i>| 3D accelerator. Widely supported in late 90s games.
|
|
||||||
<b>Obsidian SB50</b> <i>[[5]](#graphics-note-5)</i>| Voodoo with 2 TMUs
|
|
||||||
<b>3DFX Voodoo 2</b> <i>[[6]](#graphics-note-6)</i>| Improved Voodoo Graphics<br/>Higher clocks<br/>2 TMUs<br/>Triangle setup, etc.
|
|
||||||
|
|
||||||
#### Additional Notes
|
|
||||||
<a name="graphics-note-1">`[1]`</a> <b>Cirrus Logic GD-5434</b>: Real chip also supports 1MB configurations, however this is not currently supported in PCem.
|
|
||||||
|
|
||||||
<a name="graphics-note-2">`[2]`</a> <b>Diamond Stealth 3D 2000</b>: PCem emulates the ViRGE S3D engine in software. This works with most games I tried, but there may be some issues. The Direct3D drivers for the /325 are fairly poor (often showing as missing triangles), so use of the /DX instead is recommended.
|
|
||||||
|
|
||||||
<a name="graphics-note-3">`[3]`</a> <b>S3 ViRGE/DX</b>: The drivers that come with Windows are similar to those for the /325, however better ones do exist (try the 8-21-1997 version). With the correct drivers, many early Direct3D games work okay (if slowly).
|
|
||||||
|
|
||||||
<a name="graphics-note-4">`[4]`</a> <b>3DFX Voodoo Graphics</b>: PCem emulates this in software. The emulation is a lot faster than in v10 (thanks to a new dynamic recompiler) and should be capable of hitting Voodoo 1 performance on most machines when two render threads are used. As before, the emulated CPU is the bottleneck for most games. <br/><br/>PCem can emulate 6 and 8 MB configurations, but defaults to 4 MB for compatibility. It can also emulate the screen filter present on the original card, though this does at present have a noticeable performance hit.<br/><br/>Almost everything I've tried works okay, with a very few exceptions - Screamer 2 and Rally have serious issues.
|
|
||||||
|
|
||||||
<a name="graphics-note-5">`[5]`</a> <b>Obsidian SB50</b>: Drivers for this are a bit limited - the official drivers don't support 2 TMUs in Direct3D.
|
|
||||||
|
|
||||||
<a name="graphics-note-6">`[6]`</a> <b>3DFX Voodoo 2</b>: PCem can emulate both 8 and 12 MB configurations. It can also emulate 6 and 10 MB configurations (with 2MB framebuffer memory), which were never sold into the PC market but do exist for arcade systems.
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## Sound Cards
|
|
||||||
|
|
||||||
Hardware | Notes
|
|
||||||
--- | ---
|
|
||||||
<b>PC speaker</b> | The standard beeper on all PCs. Supports samples/RealSound.
|
|
||||||
<b>Tandy PSG</b> | The Texas Instruments chip in the PCjr and Tandy 1000. Supports 3 voices plus noise. I reused the emulator in B-em for this (slightly modified). PCem emulates the differences between the SN76496 (PCjr and Tandy 1000), and the NCR8496 (currently assigned to the Tandy 1000HX). Maniac Mansion and Zak McKraken will only sound correct on the latter.
|
|
||||||
<b>Tandy PSSJ</b> | Used on the Tandy 1000SL/2, this clones the NCR8496, adding an addition frequency divider (did any software actually use this?) and an 8-bit DAC.
|
|
||||||
<b>PS/1 audio card</b> | An SN76496 clone plus an 8-bit DAC. The SN76496 isn't at the same address as PCjr/Tandy, so most software doesn't support it.
|
|
||||||
<b>Gameblaster</b> | The Creative Labs Gameblaster/Creative Music System, Creative's first sound card introduced in 1987. Has two Philips SAA1099, giving 12 voices of square waves plus 4 noise voices. In stereo!
|
|
||||||
<b>Adlib</b> | Has a Yamaha YM3812, giving 9 voices of 2 op FM, or 6 voices plus a rhythm section. PCem uses the DOSBox dbopl emulator.
|
|
||||||
<b>Adlib Gold</b> | OPL3 with YM318Z 12-bit digital section. Possibly some bugs (not a lot of software to test). The surround module is now emulated.
|
|
||||||
<b>Sound Blaster</b> <i>[[1]](#sound-note-1)</i> | See linked note for more details.
|
|
||||||
<b>Gravis Ultrasound</b> | 32 voice sample playback. Port address is fixed to 240, IRQ and DMA can be changed from the drivers. Emulation is improved significantly over previous versions.
|
|
||||||
<b>Windows Sound System</b> | 16-bit digital + OPL3. Note that this only emulates WSS itself, and should not be used with drivers from compatible boards with additional components (eg Turtle Beach Monte Carlo)
|
|
||||||
<b>Aztech Sound Galaxy Pro 16 AB (Washington)</b> | SB compatible + WSS compatible
|
|
||||||
<b>Innovation SSI-2001</b> | SID6581. Emulated using resid-fp. Board is fixed to port 280.
|
|
||||||
<b>Ensoniq AudioPCI (ES1371)<br/>Sound Blaster PCI 128</b> | Basic PCI sound card. Emulates Sound Blaster in software.
|
|
||||||
|
|
||||||
### Additional Notes
|
|
||||||
<a name="sound-note-1">`[1]`</a> <b>Sound Blaster</b>: Several Sound Blasters are emulated.
|
|
||||||
* SB v1.0 - The original. Limited to 22khz, and no auto-init DMA (can cause crackles sometimes).
|
|
||||||
* SB v1.5 - Adds auto-init DMA
|
|
||||||
* SB v2.0 - Upped to 41khz
|
|
||||||
* SB Pro v1.0 - Stereo with twin OPL2 chips.
|
|
||||||
* SB Pro v2.0 - Stereo with OPL 3 chip
|
|
||||||
* SB 16 - 16 bit stereo
|
|
||||||
* SB AWE32 - SB 16 + wavetable MIDI. This requires a ROM dump from a real AWE32.
|
|
||||||
|
|
||||||
All cards are set to Address 220, IRQ 7 and DMA 1 (and High DMA 5). IRQ and DMA can be changed for the SB16 & AWE32 in the drivers. The relevant SET line for autoexec.bat is `SET BLASTER = A220 I7 D1 Tx` - where Tx is T1 for SB v1.0, T3 for SB v2.0, T4 for SB Pro, and T6 for SB16.
|
|
||||||
|
|
||||||
AWE32 requires a ROM dump called `awe32.raw`. AWE-DUMP is a utility which can get a dump from a real card. Most EMU8000 functionality should work, however filters are not correct and reverb/chorus effects are not currently emulated.
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## HDD Controller Cards
|
|
||||||
|
|
||||||
Int. | Hardware | Notes | ROM file needed<br/>(within ./roms/ folder)
|
|
||||||
:-: | --- | --- | ----
|
|
||||||
MFM | <b>Fixed Disk Adapter (Xebec)</b> | MFM controller originally included in the IBM XT. This controller only supports HD types 0, 2, 13, and 16. | ibm_xebec_62x0822_1985.bin
|
|
||||||
MFM | <b>DTC 5150X</b> | 8-bit MFM controller.<br/>To configure drive types, run `DEBUG.EXE` and enter `g=c800:5`. | dtc_cxd21a.bin
|
|
||||||
MFM | <b>AT Fixed Disk Adapter</b> | MFM controller originally included in the IBM AT. Supported by all AT-compatible BIOSes. | <i>(none)</i>
|
|
||||||
ESDI | <b>Western Digital WD1007V-SE1</b> | 16-bit ESDI controller | 62-000279-061.bin
|
|
||||||
ESDI | <b>IBM ESDI Fixed Disk Controller</b> | MCA ESDI controller. Only supported on PS/2 models. | 90x8969.bin<br/>90x8970.bin
|
|
||||||
IDE | <b>Standard IDE</b> | Standard IDE controller. Supported by all AT-compatible BIOSes. Use this if in any doubt! | <i>(none)</i>
|
|
||||||
IDE | <b>XTIDE</b> | 8-bit IDE controller. The BIOS is available [here](http://code.google.com/p/xtideuniversalbios/). <br/>v2.0.0 beta 1 is the version I've mostly tested. v2.0.0 beta 3 is known to have some issues. | ide_xt.bin
|
|
||||||
IDE | <b>XTIDE (AT)</b> | 16-bit IDE controller. | ide_at.bin
|
|
||||||
IDE | <b>XTIDE (PS/1)</b> | IDE controller for the PS/1 model 2033. For this machine you will need BIOS version v1.1.5. The PS/1 is a bit fussy with XTIDE, and I've found that it works best when the XTIDE configuration has 'Full Operating Mode' disabled. | ide_at_1_1_5.bin
|
|
||||||
SCSI | <b>Longshine LCS-6821N</b> | 8-bit SCSI controller. | Longshine LCS-6821N - BIOS version 1.04.bin
|
|
||||||
SCSI | <b>Rancho RT1000B</b> | 8-bit SCSI controller. | Rancho_RT1000_RTBios_version_8.10R.bin
|
|
||||||
SCSI | <b>Trantor T130B</b> | 8-bit SCSI controller. | trantor_t130b_bios_v2.14.bin
|
|
||||||
SCSI | <b>IBM SCSI Adapter with Cache</b> | MCA SCSI controller. Only supported on PS/2 models. | 92F2244.U68<br/>92F2245.U69
|
|
||||||
SCSI | <b>Adaptec AHA-1542C</b> | 16-bit SCSI controller. | adaptec_aha1542c_bios_534201-00.bin
|
|
||||||
SCSI | <b>BusLogic BT-545S</b> | 16-bit SCSI controller. | BusLogic_BT-545S_U15_27128_5002026-4.50.bin
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## Misc Cards
|
|
||||||
|
|
||||||
Hardware | Note
|
|
||||||
--- | ---
|
|
||||||
Serial mouse | A Microsoft compatible serial mouse on COM1. Compatible drivers are all over the place for this.
|
|
||||||
M24 mouse | I haven't seen a DOS mouse driver for this yet but the regular scancode mode works as does the Windows 1.x driver.
|
|
||||||
PC1512 mouse | The PC1512's perculiar quadrature mouse. You need Amstrad's actual driver for this one.
|
|
||||||
PS/2 mouse | A standard 2 button PS/2 mouse. As with serial, compatible drivers are common.
|
|
||||||
Microsoft PS/2 Intellimouse | A PS/2 mouse with mouse wheel.
|
|
||||||
ATAPI CD-ROM | Works with OAKCDROM.SYS, VDD-IDE.SYS, and the internal drivers of every OS I've tried.
|
|
||||||
31
Readme-LINUX.txt
Normal file
31
Readme-LINUX.txt
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
PCem v8.1 Linux supplement
|
||||||
|
|
||||||
|
|
||||||
|
You will need the following libraries :
|
||||||
|
|
||||||
|
Allegro 4.x
|
||||||
|
OpenAL
|
||||||
|
ALut
|
||||||
|
|
||||||
|
and their dependencies.
|
||||||
|
|
||||||
|
Open a terminal window, navigate to the PCem directory then enter
|
||||||
|
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
|
||||||
|
then ./pcem to run.
|
||||||
|
|
||||||
|
|
||||||
|
The Linux port is currently entirely unpolished, and mainly exists as a starting point for
|
||||||
|
anyone who wants to make a better port.
|
||||||
|
|
||||||
|
The menu is not available all the time. Press CTRL-ALT-PGDN to open it.
|
||||||
|
|
||||||
|
The mouse does not work very well, at least on my machine. This is most likely an Allegro issue.
|
||||||
|
|
||||||
|
Fullscreen mode is not present.
|
||||||
|
|
||||||
|
Video acceleration is not used at all, so performance is inferior to the Windows version.
|
||||||
|
|
||||||
|
CD-ROM support currently only accesses /dev/cdrom. It has not been heavily tested.
|
||||||
330
TESTED.md
330
TESTED.md
|
|
@ -1,330 +0,0 @@
|
||||||
## Software tested (v17):
|
|
||||||
|
|
||||||
### DOS
|
|
||||||
- PC-DOS 1.0
|
|
||||||
- MS-DOS 2.11
|
|
||||||
- MS-DOS 3.30
|
|
||||||
- MS-DOS 4.01
|
|
||||||
- MS-DOS 5.0
|
|
||||||
- MS-DOS 6.0
|
|
||||||
- MS-DOS 6.22
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
- Windows 1.04
|
|
||||||
- Windows/286 2.11
|
|
||||||
- Windows/386 2.11
|
|
||||||
- Windows 3.0
|
|
||||||
- Windows 3.1
|
|
||||||
- Windows for Workgroups 3.11
|
|
||||||
- Windows 95
|
|
||||||
- Windows 95 OSR2
|
|
||||||
- Windows 98SE
|
|
||||||
- Windows ME
|
|
||||||
|
|
||||||
### Windows NT
|
|
||||||
- Windows NT 3.1
|
|
||||||
- Windows NT 3.51
|
|
||||||
- Windows NT 4 Workstation (SP6a)
|
|
||||||
- Windows 2000
|
|
||||||
- Windows XP
|
|
||||||
|
|
||||||
### OS/2
|
|
||||||
- OS/2 v1.0
|
|
||||||
- OS/2 v1.1
|
|
||||||
- OS/2 v1.2
|
|
||||||
- OS/2 v1.3
|
|
||||||
- OS/2 v2.1
|
|
||||||
- OS/2 Warp 3
|
|
||||||
- OS/2 Warp 4
|
|
||||||
|
|
||||||
### Linux
|
|
||||||
- Corel Linux 1.2
|
|
||||||
- Mandriva LE 2005
|
|
||||||
- Red Hat Linux 7.1 (Seawolf)
|
|
||||||
|
|
||||||
### BeOS
|
|
||||||
- BeOS 5.0 Professional Edition
|
|
||||||
|
|
||||||
### Applications
|
|
||||||
- 3DMark 2000
|
|
||||||
- 3DMark 2001SE
|
|
||||||
- After Dark 3.06
|
|
||||||
- Cinemania 1994
|
|
||||||
- Creative Writer
|
|
||||||
- Cubasis
|
|
||||||
- Encarta 1994
|
|
||||||
- Fasttracker v2.08
|
|
||||||
- PageMaker 5.0
|
|
||||||
- PC Paintbrush 1.05
|
|
||||||
- Photoshop 3.0
|
|
||||||
- Smartsuite 97
|
|
||||||
- Visual Basic 3.0
|
|
||||||
- Visual C++ 6.0
|
|
||||||
- Word for Windows 2.0
|
|
||||||
- Winzip 6.2
|
|
||||||
|
|
||||||
### Games
|
|
||||||
- 1602 AD (demo)
|
|
||||||
- 3D Ultra Pinball Thrillride
|
|
||||||
- A-10 Tank Killer
|
|
||||||
- Actua Soccer
|
|
||||||
- Adventure Pinball Forgotten Island (demo)
|
|
||||||
- Aladdin
|
|
||||||
- Alien vs Predator
|
|
||||||
- Alien vs Predator 2 (demo)
|
|
||||||
- All New World of Lemmings
|
|
||||||
- Alone in the Dark
|
|
||||||
- Alone in the Dark : The New Nightmare (demo)
|
|
||||||
- Anachronox
|
|
||||||
- Arkanoid
|
|
||||||
- Armoured Fist 3 (demo)
|
|
||||||
- Asteroids (1998)
|
|
||||||
- B-17 Flying Fortress
|
|
||||||
- Battle Chess
|
|
||||||
- Battlezone
|
|
||||||
- Battlezone II
|
|
||||||
- Bejeweled
|
|
||||||
- Beyond Castle Wolfenstein
|
|
||||||
- Big Red Racing
|
|
||||||
- Bio Menace
|
|
||||||
- Black & White
|
|
||||||
- Brix
|
|
||||||
- Bugs Bunny Lost In Time (demo)
|
|
||||||
- Cannon Fodder 2
|
|
||||||
- Carnivores 2
|
|
||||||
- Civilization
|
|
||||||
- Civilization for Windows
|
|
||||||
- Claw
|
|
||||||
- Clive Barker's Undying (demo)
|
|
||||||
- Clockwiser
|
|
||||||
- Command & Conquer : Red Alert
|
|
||||||
- Command & Conquer : Red Alert 2
|
|
||||||
- Command & Conquer : Tiberian Sun (demo)
|
|
||||||
- Command & Conquer Renegade
|
|
||||||
- Conquest
|
|
||||||
- Corridor 7
|
|
||||||
- Counter-Strike 2D
|
|
||||||
- Crimson Skies (demo)
|
|
||||||
- Croc
|
|
||||||
- Curse of Monkey Island
|
|
||||||
- Cutthroats (demo)
|
|
||||||
- Daikatana
|
|
||||||
- Dawn Patrol
|
|
||||||
- Day of the Tentacle
|
|
||||||
- Dance Dance Revolution
|
|
||||||
- Dead Reckoning (demo)
|
|
||||||
- Death Drome
|
|
||||||
- Desert Strike
|
|
||||||
- Digger
|
|
||||||
- Dirt Track Racing (demo)
|
|
||||||
- Disciples (demo)
|
|
||||||
- Discworld II
|
|
||||||
- Doom (v1.2)
|
|
||||||
- Doom II (v1.666)
|
|
||||||
- Double Dragon
|
|
||||||
- Drakan (demo)
|
|
||||||
- Duke Nukem 3D (v1.3D)
|
|
||||||
- Dune
|
|
||||||
- DX-Ball 2
|
|
||||||
- Echelon
|
|
||||||
- Ecstatica
|
|
||||||
- Epic Pinball
|
|
||||||
- Every Extend
|
|
||||||
- Evolva (demo)
|
|
||||||
- Expendable
|
|
||||||
- Eye of the Beholder
|
|
||||||
- Fallout Tactics (demo)
|
|
||||||
- Final Fantasy VIII (demo)
|
|
||||||
- Flashback
|
|
||||||
- Flight Simulator 5
|
|
||||||
- Frogger
|
|
||||||
- Frontier : First Encounters
|
|
||||||
- Gabriel Knight 3 (demo)
|
|
||||||
- Giants : Citizen Kabuto
|
|
||||||
- GLQuake
|
|
||||||
- Grand Theft Auto 2
|
|
||||||
- Half-Life
|
|
||||||
- Halloween Harry
|
|
||||||
- Heartlight
|
|
||||||
- Hellbender
|
|
||||||
- Hexen
|
|
||||||
- High Heat Baseball 2002 (demo)
|
|
||||||
- Hitch Hiker's Guide to the Galaxy
|
|
||||||
- Hocus Pocus
|
|
||||||
- Homeworld Cataclysm (demo)
|
|
||||||
- Incoming
|
|
||||||
- James Pond 2 : Robocod
|
|
||||||
- Jazz Jackrabbit
|
|
||||||
- Jazz Jackrabbit 2
|
|
||||||
- Jill of the Jungle
|
|
||||||
- King's Quest
|
|
||||||
- King's Quest II
|
|
||||||
- King's Quest III
|
|
||||||
- Lemmings
|
|
||||||
- Lemmings 2 : The Tribes
|
|
||||||
- Lode Runner : The Legend Continues
|
|
||||||
- Lotus III
|
|
||||||
- Madden 2002 (demo)
|
|
||||||
- Majesty (demo)
|
|
||||||
- Maniac Mansion (enhanced)
|
|
||||||
- Max Payne
|
|
||||||
- MDK (Direct3D, USA release)
|
|
||||||
- MechCommander 2
|
|
||||||
- Mechwarrior 2
|
|
||||||
- Mechwarrior 3
|
|
||||||
- Megaman Legends
|
|
||||||
- Metal Gear Solid
|
|
||||||
- Microsoft Arcade
|
|
||||||
- Microsoft Golf 99 (demo)
|
|
||||||
- Midtown Madness 2 (demo)
|
|
||||||
- Monaco Grand Prix (demo)
|
|
||||||
- Monkey Island 2
|
|
||||||
- Monster Bash
|
|
||||||
- Monster Truck Madness
|
|
||||||
- Mortal Kombat
|
|
||||||
- Mortal Kombat 2
|
|
||||||
- Mortal Kombat 3
|
|
||||||
- Motorcross Madness (demo)
|
|
||||||
- Mystic Towers
|
|
||||||
- Nascar Heat
|
|
||||||
- Need for Speed II SE
|
|
||||||
- Need for Speed III
|
|
||||||
- Need for Speed : High Stakes
|
|
||||||
- NHL 2001 (demo)
|
|
||||||
- No One Lives Forever
|
|
||||||
- Oddworld : Abe's Exoddus
|
|
||||||
- One Must Fall 2097
|
|
||||||
- Oni
|
|
||||||
- Outlaws
|
|
||||||
- Pacific Strike
|
|
||||||
- Pacman Adventures in Time (demo)
|
|
||||||
- Pharoah (demo)
|
|
||||||
- Pinball Fantasies
|
|
||||||
- Pinball Illusions
|
|
||||||
- Police Quest
|
|
||||||
- Police Quest 2
|
|
||||||
- Porrasturvat
|
|
||||||
- Power Drive
|
|
||||||
- Prince of Persia
|
|
||||||
- Prince of Persia 3D (demo)
|
|
||||||
- Pro Pinball : The Web
|
|
||||||
- Psycho Pinball
|
|
||||||
- Quake
|
|
||||||
- Quake II
|
|
||||||
- Quake III Arena
|
|
||||||
- Rayman 2 (demo)
|
|
||||||
- Red Faction
|
|
||||||
- Redline Racer
|
|
||||||
- Rise of the Triad (v1.2)
|
|
||||||
- Screamer
|
|
||||||
- Sega Rally 2 (demo)
|
|
||||||
- Sensible World of Soccer
|
|
||||||
- Settlers 3 (demo)
|
|
||||||
- Severance : Blade of Darkness (demo)
|
|
||||||
- Shadow Company (demo)
|
|
||||||
- Shadow Warrior
|
|
||||||
- Shadowman (demo)
|
|
||||||
- Sid Meier's Alien Crossfire (demo)
|
|
||||||
- SimCity 2000
|
|
||||||
- SimCity Classic
|
|
||||||
- SimTower
|
|
||||||
- Sink or Swim
|
|
||||||
- Soldat (1.0.5)
|
|
||||||
- Sonic CD
|
|
||||||
- Space Simulator
|
|
||||||
- Space Strike
|
|
||||||
- Spider-Man (demo)
|
|
||||||
- Springy Madness
|
|
||||||
- Star Trek Hidden Evil (demo)
|
|
||||||
- Star Trek Voyager Elite Force
|
|
||||||
- Star Wars Jedi Academy
|
|
||||||
- Starfleet Command 2 (demo)
|
|
||||||
- Stargunner
|
|
||||||
- Starlancer (demo)
|
|
||||||
- Steel Beasts (demo)
|
|
||||||
- Stunt Island
|
|
||||||
- SWAT 3 Elite Edition (demo)
|
|
||||||
- Syndicate
|
|
||||||
- System Shock
|
|
||||||
- Tanktics (demo)
|
|
||||||
- Terminal Velocity
|
|
||||||
- The Dig
|
|
||||||
- The Humans
|
|
||||||
- The Labyrinth (RealArcade version)
|
|
||||||
- The Lost Vikings
|
|
||||||
- The Ultimate Doom (v1.9)
|
|
||||||
- Theme Hospital
|
|
||||||
- Theme Park
|
|
||||||
- Tomb Raider
|
|
||||||
- Tomb Raider II
|
|
||||||
- Tomb Raider The Last Revelation (demo)
|
|
||||||
- Tony Hawk's Pro Skater 2
|
|
||||||
- Transport Tycoon
|
|
||||||
- Transport Tycoon Deluxe
|
|
||||||
- Tropico (demo)
|
|
||||||
- Turrican 2
|
|
||||||
- UFO : Enemy Unknown
|
|
||||||
- Ultimate Ride (demo)
|
|
||||||
- Unreal
|
|
||||||
- Unreal Tournament
|
|
||||||
- Unreal Tournament 2004 (Direct3D)
|
|
||||||
- Wacky Wheels
|
|
||||||
- Warlords Battlecry (demo)
|
|
||||||
- Wheel of Time (demo)
|
|
||||||
- Wing Commander
|
|
||||||
- Wing Commander : Privateer
|
|
||||||
- Wizkid
|
|
||||||
- Wolfenstein 3D
|
|
||||||
- World War III : Black Gold (demo)
|
|
||||||
- Worms
|
|
||||||
- Worms Armageddon
|
|
||||||
- X-Com : Terror From The Deep
|
|
||||||
- Xargon
|
|
||||||
- Z : Steel Soldiers (demo)
|
|
||||||
- Zak McKracken
|
|
||||||
- Zone 66
|
|
||||||
|
|
||||||
### Demos
|
|
||||||
- Cascada - Cronologia
|
|
||||||
- Coma - Paimen
|
|
||||||
- Complex - Cyboman 2
|
|
||||||
- Complex - Dope
|
|
||||||
- EMF - Verses
|
|
||||||
- Exceed - Heaven 7
|
|
||||||
- Future Crew - Second Reality
|
|
||||||
- Gazebo - Cyboman
|
|
||||||
- Halcyon - Lifeforms
|
|
||||||
- Iguana - Heartquake
|
|
||||||
- Impact Studios - Legend
|
|
||||||
- Impact Studios - Project Angel
|
|
||||||
- KFMF - Dance, Move, Shake
|
|
||||||
- KFMF - Trip
|
|
||||||
- Logic Design - Fashion
|
|
||||||
- Majic 12 - Show
|
|
||||||
- Majic 12 - Wish
|
|
||||||
- Megabusters - Hellraiser
|
|
||||||
- Orange - x14
|
|
||||||
- Renaissance - Amnesia
|
|
||||||
- Skull - Putre Faction
|
|
||||||
- Tran - Ambience (flickery)
|
|
||||||
- Tran - Luminati (flickery)
|
|
||||||
- Tran - Timeless
|
|
||||||
- Triton - Crystal Dream
|
|
||||||
- Triton - Crystal Dream 2
|
|
||||||
- Ultraforce - Coldcut
|
|
||||||
- Ultraforce - Vector Demo
|
|
||||||
- Valhalla - Solstice
|
|
||||||
- Witan - Witan House
|
|
||||||
|
|
||||||
### Emulators
|
|
||||||
- Beebem v1.02
|
|
||||||
- BeebInC v0.99f
|
|
||||||
- CPE v5.2i
|
|
||||||
- DOSBox 0.74-3
|
|
||||||
- Fellow 0.33
|
|
||||||
- KGen98 v0.4b
|
|
||||||
- PaCifiST v0.48
|
|
||||||
- SNES9x v0.96
|
|
||||||
- UltraHLE v1.0.0
|
|
||||||
- vMac v0.1.9.1
|
|
||||||
- ZSNES v0.800c
|
|
||||||
1772
aclocal.m4
vendored
1772
aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
192
allegro.m4
Normal file
192
allegro.m4
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
# Configure paths for Allegro
|
||||||
|
# Shamelessly stolen from libxml.a4
|
||||||
|
# Jon Rafkind 2004-06-06
|
||||||
|
# Adapted from:
|
||||||
|
# Configure paths for libXML
|
||||||
|
# Toshio Kuratomi 2001-04-21
|
||||||
|
# Adapted from:
|
||||||
|
# Configure paths for GLIB
|
||||||
|
# Owen Taylor 97-11-3
|
||||||
|
|
||||||
|
dnl AM_PATH_allegro([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||||
|
dnl Test for allegro, and define allegro_CFLAGS and allegro_LIBS
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([AM_PATH_ALLEGRO],[
|
||||||
|
AC_ARG_WITH(allegro-prefix,
|
||||||
|
[ --with-allegro-prefix=PFX Prefix where liballegro is installed (optional)],
|
||||||
|
ALLEGRO_CONFIG_prefix="$withval", ALLEGRO_CONFIG_prefix="")
|
||||||
|
AC_ARG_WITH(allegro-exec-prefix,
|
||||||
|
[ --with-allegro-exec-prefix=PFX Exec prefix where liballegro is installed (optional)],
|
||||||
|
ALLEGRO_CONFIG_exec_prefix="$withval", ALLEGRO_CONFIG_exec_prefix="")
|
||||||
|
AC_ARG_ENABLE(allegrotest,
|
||||||
|
[ --disable-allegrotest Do not try to compile and run a test LIBallegro program],,
|
||||||
|
enable_allegrotest=yes)
|
||||||
|
|
||||||
|
if test x$ALLEGRO_CONFIG_exec_prefix != x ; then
|
||||||
|
ALLEGRO_CONFIG_args="$ALLEGRO_CONFIG_args --exec-prefix=$ALLEGRO_CONFIG_exec_prefix"
|
||||||
|
if test x${ALLEGRO_CONFIG+set} != xset ; then
|
||||||
|
ALLEGRO_CONFIG=$ALLEGRO_CONFIG_exec_prefix/bin/allegro-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test x$ALLEGRO_CONFIG_prefix != x ; then
|
||||||
|
ALLEGRO_CONFIG_args="$ALLEGRO_CONFIG_args --prefix=$ALLEGRO_CONFIG_prefix"
|
||||||
|
if test x${ALLEGRO_CONFIG+set} != xset ; then
|
||||||
|
ALLEGRO_CONFIG=$ALLEGRO_CONFIG_prefix/bin/allegro-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG(ALLEGRO_CONFIG, allegro-config, no)
|
||||||
|
min_allegro_version=ifelse([$1], ,4.0.0,[$1])
|
||||||
|
AC_MSG_CHECKING(for Allegro - version >= $min_allegro_version)
|
||||||
|
no_allegro=""
|
||||||
|
if test "$ALLEGRO_CONFIG" = "no" ; then
|
||||||
|
no_allegro=yes
|
||||||
|
else
|
||||||
|
allegro_CFLAGS=`$ALLEGRO_CONFIG $ALLEGRO_CONFIG_args --cflags`
|
||||||
|
allegro_LIBS=`$ALLEGRO_CONFIG $ALLEGRO_CONFIG_args --libs`
|
||||||
|
ALLEGRO_CONFIG_major_version=`$ALLEGRO_CONFIG $ALLEGRO_CONFIG_args --version | \
|
||||||
|
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||||
|
ALLEGRO_CONFIG_minor_version=`$ALLEGRO_CONFIG $ALLEGRO_CONFIG_args --version | \
|
||||||
|
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||||
|
ALLEGRO_CONFIG_micro_version=`$ALLEGRO_CONFIG $ALLEGRO_CONFIG_args --version | \
|
||||||
|
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||||
|
if test "x$enable_allegrotest" = "xyes" ; then
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
ac_save_LIBS="$LIBS"
|
||||||
|
CFLAGS="$CFLAGS $allegro_CFLAGS"
|
||||||
|
LIBS="$allegro_LIBS $LIBS"
|
||||||
|
dnl
|
||||||
|
dnl Now check if the installed liballegro is sufficiently new.
|
||||||
|
dnl (Also sanity checks the results of allegro-config to some extent)
|
||||||
|
dnl
|
||||||
|
rm -f conf.allegrotest
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <allegro.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
int allegro_major_version, allegro_minor_version, allegro_micro_version;
|
||||||
|
int major, minor, micro;
|
||||||
|
char *tmp_version;
|
||||||
|
int tmp_int_version;
|
||||||
|
|
||||||
|
system("touch conf.allegrotest");
|
||||||
|
|
||||||
|
/* Capture allegro-config output via autoconf/configure variables */
|
||||||
|
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||||
|
tmp_version = (char *)strdup("$min_allegro_version");
|
||||||
|
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||||
|
printf("%s, bad version string from allegro-config\n", "$min_allegro_version");
|
||||||
|
free(tmp_version);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
free(tmp_version);
|
||||||
|
|
||||||
|
/* Capture the version information from the header files */
|
||||||
|
allegro_major_version = ALLEGRO_VERSION;
|
||||||
|
allegro_minor_version = ALLEGRO_SUB_VERSION;
|
||||||
|
allegro_micro_version = ALLEGRO_WIP_VERSION;
|
||||||
|
|
||||||
|
/* Compare allegro-config output to the Allegro headers */
|
||||||
|
if ((allegro_major_version != $ALLEGRO_CONFIG_major_version) ||
|
||||||
|
(allegro_minor_version != $ALLEGRO_CONFIG_minor_version))
|
||||||
|
|
||||||
|
{
|
||||||
|
printf("*** Allegro header files (version %d.%d.%d) do not match\n",
|
||||||
|
allegro_major_version, allegro_minor_version, allegro_micro_version);
|
||||||
|
printf("*** allegro-config (version %d.%d.%d)\n",
|
||||||
|
$ALLEGRO_CONFIG_major_version, $ALLEGRO_CONFIG_minor_version, $ALLEGRO_CONFIG_micro_version);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/* Compare the headers to the library to make sure we match */
|
||||||
|
/* Less than ideal -- doesn't provide us with return value feedback,
|
||||||
|
* only exits if there's a serious mismatch between header and library.
|
||||||
|
*/
|
||||||
|
/* TODO:
|
||||||
|
* This doesnt work!
|
||||||
|
*/
|
||||||
|
/* ALLEGRO_TEST_VERSION; */
|
||||||
|
|
||||||
|
/* Test that the library is greater than our minimum version */
|
||||||
|
if (($ALLEGRO_CONFIG_major_version > major) ||
|
||||||
|
(($ALLEGRO_CONFIG_major_version == major) && ($ALLEGRO_CONFIG_minor_version > minor)) ||
|
||||||
|
(($ALLEGRO_CONFIG_major_version == major) && ($ALLEGRO_CONFIG_minor_version == minor) &&
|
||||||
|
($ALLEGRO_CONFIG_micro_version >= micro)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\n*** An old version of Allegro (%d.%d.%d) was found.\n",
|
||||||
|
allegro_major_version, allegro_minor_version, allegro_micro_version);
|
||||||
|
printf("*** You need a version of Allegro newer than %d.%d.%d. The latest version of\n",
|
||||||
|
major, minor, micro);
|
||||||
|
printf("*** Allegro is always available from http://alleg.sf.net.\n");
|
||||||
|
printf("***\n");
|
||||||
|
printf("*** If you have already installed a sufficiently new version, this error\n");
|
||||||
|
printf("*** probably means that the wrong copy of the allegro-config shell script is\n");
|
||||||
|
printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
||||||
|
printf("*** of Allegro, but you can also set the ALLEGRO_CONFIG environment to point to the\n");
|
||||||
|
printf("*** correct copy of allegro-config. (In this case, you will have to\n");
|
||||||
|
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
||||||
|
printf("*** so that the correct libraries are found at run-time))\n");
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
} END_OF_MAIN()
|
||||||
|
],, no_allegro=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$no_allegro" = x ; then
|
||||||
|
AC_MSG_RESULT(yes (version $ALLEGRO_CONFIG_major_version.$ALLEGRO_CONFIG_minor_version.$ALLEGRO_CONFIG_micro_version))
|
||||||
|
ifelse([$2], , :, [$2])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
if test "$ALLEGRO_CONFIG" = "no" ; then
|
||||||
|
echo "*** The allegro-config script installed by Allegro could not be found"
|
||||||
|
echo "*** If Allegro was installed in PREFIX, make sure PREFIX/bin is in"
|
||||||
|
echo "*** your path, or set the ALLEGRO_CONFIG environment variable to the"
|
||||||
|
echo "*** full path to allegro-config."
|
||||||
|
else
|
||||||
|
if test -f conf.allegrotest ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "*** Could not run Allegro test program, checking why..."
|
||||||
|
CFLAGS="$CFLAGS $allegro_CFLAGS"
|
||||||
|
LIBS="$LIBS $allegro_LIBS"
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <allegro.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
], [ allegro_error; return 0;],
|
||||||
|
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||||
|
echo "*** that the run-time linker is not finding Allegro or finding the wrong"
|
||||||
|
echo "*** version of Allegro. If it is not finding Allegro, you'll need to set your"
|
||||||
|
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||||
|
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||||
|
echo "*** is required on your system"
|
||||||
|
echo "***"
|
||||||
|
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||||
|
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
|
||||||
|
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||||
|
echo "*** exact error that occured. This usually means Allegro was incorrectly installed"
|
||||||
|
echo "*** or that you have moved Allegro since it was installed. In the latter case, you"
|
||||||
|
echo "*** may want to edit the allegro-config script: $ALLEGRO_CONFIG" ])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
allegro_CFLAGS=""
|
||||||
|
allegro_LIBS=""
|
||||||
|
ifelse([$3], , :, [$3])
|
||||||
|
fi
|
||||||
|
AC_SUBST(allegro_CFLAGS)
|
||||||
|
AC_SUBST(allegro_LIBS)
|
||||||
|
rm -f conf.allegrotest
|
||||||
|
])
|
||||||
189
configure.ac
189
configure.ac
|
|
@ -2,7 +2,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
AC_PREREQ([2.61])
|
AC_PREREQ([2.61])
|
||||||
AC_INIT(PCem, v17, Sarah Walker <pcem@pcem-emulator.co.uk>, pcem)
|
AC_INIT(PCem, v12, Sarah Walker <pcem-emulator@pcem-emulator.co.uk>, pcem)
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
|
@ -13,185 +13,58 @@ AM_PROG_CC_C_O
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build for release])
|
|
||||||
AC_ARG_ENABLE(release_build,
|
|
||||||
AC_HELP_STRING([--enable-release-build], [build for release]))
|
|
||||||
if test "$enable_release_build" = "yes"; then
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(RELEASE_BUILD, [test "$enable_release_build" = "yes"])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable debugging])
|
AC_MSG_CHECKING([whether to enable debugging])
|
||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
AC_HELP_STRING([--enable-debug], [build debug executable]))
|
AC_HELP_STRING([--enable-debug], [build debug executable]))
|
||||||
if test "$enable_debug" = "yes"; then
|
if test "$enable_debug" = "yes"; then
|
||||||
CFLAGS="$CFLAGS -Wall -O0 -g -D_DEBUG -fcommon"
|
CFLAGS="-Wall -O0 -g -D_DEBUG"
|
||||||
CXXFLAGS="$CXXFLAGS -Wall -O0 -g -D_DEBUG -fcommon"
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
else
|
|
||||||
CFLAGS="$CFLAGS -O3 -fcommon"
|
|
||||||
CXXFLAGS="$CXXFLAGS -O3 -fcommon"
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to enable networking])
|
|
||||||
AC_ARG_ENABLE(networking,
|
|
||||||
AC_HELP_STRING([--enable-networking], [enable networking]))
|
|
||||||
if test "$enable_networking" = "yes"; then
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to use ALSA for MIDI output])
|
|
||||||
AC_ARG_ENABLE(alsa,
|
|
||||||
AC_HELP_STRING([--enable-alsa], [use ALSA for MIDI]))
|
|
||||||
if test "$enable_alsa" = "yes"; then
|
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
else
|
else
|
||||||
|
CFLAGS="-O3"
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_MSG_CHECKING([for cpu])
|
AC_MSG_CHECKING([for cpu])
|
||||||
case "${host_cpu}" in
|
case "${host_cpu}" in
|
||||||
i?86)
|
i?86)
|
||||||
CPU=i386
|
CPU=i386
|
||||||
AC_MSG_RESULT(${host_cpu})
|
AC_MSG_RESULT(${host_cpu})
|
||||||
;;
|
;;
|
||||||
x86_64)
|
x86_64)
|
||||||
CPU=x86_64
|
CPU=x86_64
|
||||||
AC_MSG_RESULT(${host_cpu})
|
AC_MSG_RESULT(${host_cpu})
|
||||||
;;
|
;;
|
||||||
armv7l)
|
*)
|
||||||
CPU=arm
|
AC_MSG_ERROR([Unsupported CPU.])
|
||||||
AC_MSG_RESULT(${host_cpu})
|
;;
|
||||||
;;
|
|
||||||
aarch64)
|
|
||||||
CPU=arm64
|
|
||||||
AC_MSG_RESULT(${host_cpu})
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([Unsupported CPU. ${host_cpu}])
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AM_CONDITIONAL(CPU_I386, test "$CPU" = "i386")
|
AM_CONDITIONAL(CPU_I386, test "$CPU" = "i386")
|
||||||
AM_CONDITIONAL(CPU_X86_64, test "$CPU" = "x86_64")
|
AM_CONDITIONAL(CPU_X86_64, test "$CPU" = "x86_64")
|
||||||
AM_CONDITIONAL(CPU_ARM, test "$CPU" = "arm")
|
|
||||||
AM_CONDITIONAL(CPU_ARM64, test "$CPU" = "arm64")
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for off64_t $CPU])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],[[off64_t n=0;]])],[has_lfs="yes"],[has_lfs="no"])
|
|
||||||
case "$host" in
|
|
||||||
*-*-freebsd*) # has off64_t but no fopen64/etc.
|
|
||||||
has_lfs="no"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AC_MSG_RESULT($has_lfs)
|
|
||||||
|
|
||||||
#AC_MSG_CHECKING([for libz])
|
#AC_MSG_CHECKING([for libz])
|
||||||
#AX_CHECK_ZLIB
|
#AX_CHECK_ZLIB
|
||||||
|
|
||||||
AM_CONDITIONAL(USE_WX, test "$enable_wx" = "yes")
|
AM_CONDITIONAL(OS_WIN, test "$OS" = "win")
|
||||||
AM_CONDITIONAL(USE_NETWORKING, test "$enable_networking" = "yes")
|
AM_CONDITIONAL(OS_LINUX, test "$OS" = "linux")
|
||||||
AM_CONDITIONAL(USE_ALSA, test "$enable_alsa" = "yes")
|
|
||||||
|
|
||||||
AM_CONDITIONAL(HAS_OFF64T, test "$has_lfs" = "yes")
|
# Do not run test for Allegro with Win32/MinGW version, as binary builds have
|
||||||
|
# `allegro-config' missing.
|
||||||
SDL_VERSION=2.0.1
|
# NOTE: For the following Autoconf macro to be supported, you need to extract
|
||||||
AM_PATH_SDL2($SDL_VERSION,
|
# allegro.m4 from the DOS/Windows Allegro sources (the file is contained
|
||||||
:,
|
# in `misc') and copy it to this directory or MSYS's `/share/aclocal'.
|
||||||
AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
|
if test "$OS" != "win"; then
|
||||||
)
|
AC_CONFIG_MACRO_DIR([./])
|
||||||
|
AM_PATH_ALLEGRO(, , AC_MSG_ERROR(building PCem requires Allegro to be installed))
|
||||||
AM_OPTIONS_WXCONFIG
|
|
||||||
reqwx=3.0.0
|
|
||||||
AM_PATH_WXCONFIG($reqwx, wxWin=1)
|
|
||||||
if test "$wxWin" != 1; then
|
|
||||||
AC_MSG_ERROR([
|
|
||||||
wxWidgets must be installed on your system.
|
|
||||||
|
|
||||||
Please check that wx-config is in path, the directory
|
|
||||||
where wxWidgets libraries are installed (returned by
|
|
||||||
'wx-config --libs' or 'wx-config --static --libs' command)
|
|
||||||
is in LD_LIBRARY_PATH or equivalent variable and
|
|
||||||
wxWidgets version is $reqwx or above.
|
|
||||||
])
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$enable_alsa" == "yes"; then
|
AC_CHECK_LIB([openal], [alGetError], [], \
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open,
|
[echo "You need to install the OpenAL library."
|
||||||
[],
|
exit -1])
|
||||||
[echo "You need to install the ALSA library."
|
AC_CHECK_LIB([alut], [alutInit], [], \
|
||||||
exit -1])
|
[echo "You need to install the ALUT library."
|
||||||
fi
|
exit -1])
|
||||||
|
|
||||||
AC_CHECK_LIB([pthread], [pthread_create])
|
AC_CHECK_LIB([pthread], [pthread_create])
|
||||||
|
|
||||||
build_macosx="no"
|
|
||||||
build_linux="no"
|
|
||||||
build_win="no"
|
|
||||||
build_other="no"
|
|
||||||
|
|
||||||
case "$host" in
|
|
||||||
*-*-darwin*)
|
|
||||||
LIBS="$LIBS -framework OpenGL"
|
|
||||||
LIBS="$LIBS -framework OpenAL"
|
|
||||||
build_macosx="yes"
|
|
||||||
CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
|
|
||||||
;;
|
|
||||||
*-*-cygwin* | *-*-mingw32*)
|
|
||||||
AC_CHECK_LIB([opengl32], [main], [], \
|
|
||||||
[echo "You need to install the OpenGL library."
|
|
||||||
exit -1])
|
|
||||||
AC_CHECK_LIB([openal], [alGetError], [], \
|
|
||||||
[echo "You need to install the OpenAL library."
|
|
||||||
exit -1])
|
|
||||||
build_win="yes"
|
|
||||||
AC_SUBST(SET_MAKE, 'MAKE=mingw32-make')
|
|
||||||
;;
|
|
||||||
*-*-linux*)
|
|
||||||
AC_CHECK_LIB([GL], [glGetError], [], \
|
|
||||||
[echo "You need to install the OpenGL library."
|
|
||||||
exit -1])
|
|
||||||
AC_CHECK_LIB([openal], [alGetError], [], \
|
|
||||||
[echo "You need to install the OpenAL library."
|
|
||||||
exit -1])
|
|
||||||
build_linux="yes"
|
|
||||||
CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
|
|
||||||
;;
|
|
||||||
*-*-freebsd*)
|
|
||||||
CFLAGS="$CFLAGS -I/usr/local/include"
|
|
||||||
CXXFLAGS="$CXXFLAGS -I/usr/local/include"
|
|
||||||
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
|
||||||
AC_CHECK_LIB([GL], [glGetError], [], \
|
|
||||||
[echo "You need to install the OpenGL library."
|
|
||||||
exit -1])
|
|
||||||
AC_CHECK_LIB([openal], [alGetError], [], \
|
|
||||||
[echo "You need to install the OpenAL library."
|
|
||||||
exit -1])
|
|
||||||
build_other="yes"
|
|
||||||
CFLAGS="$CFLAGS -DHAVE_UNISTD_H"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_CHECK_LIB([GL], [glGetError], [], \
|
|
||||||
[echo "You need to install the OpenGL library."
|
|
||||||
exit -1])
|
|
||||||
AC_CHECK_LIB([openal], [alGetError], [], \
|
|
||||||
[echo "You need to install the OpenAL library."
|
|
||||||
exit -1])
|
|
||||||
build_other="yes"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CFLAGS="$CFLAGS $SDL_CFLAGS"
|
|
||||||
LIBS="$LIBS $WX_LIBS $SDL_LIBS"
|
|
||||||
|
|
||||||
AM_CONDITIONAL(OS_LINUX, [test "$build_linux" = "yes"])
|
|
||||||
AM_CONDITIONAL(OS_WINDOWS, [test "$build_win" = "yes"])
|
|
||||||
AM_CONDITIONAL(OS_OTHER, [test "$build_other" = "yes"])
|
|
||||||
AM_CONDITIONAL(OS_MACOSX, [test "$build_macosx" = "yes"])
|
|
||||||
|
|
||||||
AC_OUTPUT([Makefile src/Makefile])
|
AC_OUTPUT([Makefile src/Makefile])
|
||||||
|
|
|
||||||
0
install-sh
Executable file → Normal file
0
install-sh
Executable file → Normal file
BIN
nvr/aha1542c.nvr
BIN
nvr/aha1542c.nvr
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
||||||
X<EFBFBD><19><19><02><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1467
readme.html
1467
readme.html
File diff suppressed because it is too large
Load diff
894
readme.txt
Normal file
894
readme.txt
Normal file
|
|
@ -0,0 +1,894 @@
|
||||||
|
PCem v12
|
||||||
|
|
||||||
|
PCem is licensed under the GPL, see COPYING for more details.
|
||||||
|
|
||||||
|
Changes since v11:
|
||||||
|
|
||||||
|
- New machines added - AMI 386DX, MR 386DX
|
||||||
|
- New graphics cards - Plantronics ColorPlus, Wyse WY-700, Obsidian SB50, Voodoo 2
|
||||||
|
- CPU optimisations - up to 50% speedup seen
|
||||||
|
- 3DFX optimisations
|
||||||
|
- Improved joystick emulation - analogue joystick up to 8 buttons, CH Flightstick Pro, ThrustMaster FCS, SideWinder pad(s)
|
||||||
|
- Mouse can be selected between serial, PS/2, and IntelliMouse
|
||||||
|
- Basic 286/386 prefetch emulation - 286 & 386 performance much closer to real systems
|
||||||
|
- Improved CGA/PCjr/Tandy composite emulation
|
||||||
|
- Various bug fixes
|
||||||
|
|
||||||
|
|
||||||
|
PCem emulates the following machines:
|
||||||
|
|
||||||
|
IBM 5150 PC (1981)
|
||||||
|
The original PC. This shipped in 1981 with a 4.77mhz 8088, 64k of RAM, and a cassette port.
|
||||||
|
Disc drives quickly became standard, along with more memory.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmpc\pc102782.bin
|
||||||
|
ibmpc\basicc11.f6
|
||||||
|
ibmpc\basicc11.f8
|
||||||
|
ibmpc\basicc11.fa
|
||||||
|
ibmpc\basicc11.fc
|
||||||
|
|
||||||
|
|
||||||
|
IBM 5160 XT (1983)
|
||||||
|
From a hardware perspective, this is a minor tweak of the original PC. It originally shipped
|
||||||
|
with 128k of RAM and a 10mb hard disc, both of which could be easily fitted to the 1981 machine.
|
||||||
|
However, this was targetted as businesses and was more successful than the original.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmxt\5000027.u19
|
||||||
|
ibmxt\1501512.u18
|
||||||
|
|
||||||
|
|
||||||
|
IBM PCjr (1984)
|
||||||
|
A home machine, which had better graphics and sound than most XTs but was not hardware compatible
|
||||||
|
with the PC.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmpcjr\bios.rom
|
||||||
|
|
||||||
|
|
||||||
|
IBM AT (1984)
|
||||||
|
This was the 'next generation' PC, fully 16-bit with an 80286. The original model came with a 6mhz
|
||||||
|
286, which ran three times as fast as the XT. This model also introduced EGA.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmat\at111585.0
|
||||||
|
ibmat\at111585.1
|
||||||
|
|
||||||
|
|
||||||
|
Olivetti M24 (1984)
|
||||||
|
An enhanced XT clone, also known as the AT&T PC 6300. Has an 8086 CPU, and an unusual 'double-res'
|
||||||
|
CGA display.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
olivetti_m24\olivetti_m24_version_1.43_low.bin
|
||||||
|
olivetti_m24\olivetti_m24_version_1.43_high.bin
|
||||||
|
|
||||||
|
|
||||||
|
Tandy 1000 (1984)
|
||||||
|
This is a clone of the unsuccessful IBM PCjr, which added better graphics and sound to the XT,
|
||||||
|
but removed much expandability plus some other hardware (such as the DMA controller). The Tandy
|
||||||
|
puts back the DMA controller and ISA slots, making it a much more useful machine. Many games
|
||||||
|
from the late 80s support the Tandy.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
tandy\tandy1t1.020
|
||||||
|
|
||||||
|
|
||||||
|
Tandy 1000HX (1987)
|
||||||
|
A Tandy 1000 with a faster 7.16 MHz 8088, and DOS in ROM.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
tandy1000hx\v020000.u12
|
||||||
|
|
||||||
|
|
||||||
|
Tandy 1000SL/2 (1989)
|
||||||
|
An enhanced Tandy 1000 with a 9.54 MHz 8086, and enhanced graphics and sound.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
tandy1000sl2\8079047.hu1
|
||||||
|
tandy1000sl2\8079048.hu2
|
||||||
|
|
||||||
|
|
||||||
|
DTK Clone XT (1986)
|
||||||
|
A generic clone XT board.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
dtk\dtk_erso_2.42_2764.bin
|
||||||
|
|
||||||
|
|
||||||
|
Amstrad PC1512 (1986)
|
||||||
|
This was Amstrad's first entry into the PC clone market (after the CPC and PCW machines), and
|
||||||
|
was the first cheap PC available in the UK, selling for only £500. It was a 'turbo' clone,
|
||||||
|
having an 8mhz 8086, as opposed to an 8088, and had 512k RAM as standard. It also had a
|
||||||
|
perculiar modification to its onboard CGA controller - the 640x200 mode had 16 colours instead
|
||||||
|
of the usual 2. This was put to good use by GEM, which shipped with the machine.
|
||||||
|
|
||||||
|
Amstrad's CGA implementation has a few oddities, these are emulated as best as possible. This
|
||||||
|
mainly affects games defining unusual video modes, though 160x100x16 still works (as on the real
|
||||||
|
machine).
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pc1512\40043.v1
|
||||||
|
pc1512\40044.v2
|
||||||
|
pc1512\40078.ic127
|
||||||
|
|
||||||
|
|
||||||
|
Amstrad PC1640 (1987)
|
||||||
|
Amstrad's followup to the PC1512, the PC1640 had 640k of RAM and onboard EGA, but was otherwise
|
||||||
|
mostly the same.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pc1640\40043.v3
|
||||||
|
pc1640\40044.v3
|
||||||
|
pc1640\40100
|
||||||
|
|
||||||
|
|
||||||
|
Sinclair PC200/Amstrad PC20 (1988)
|
||||||
|
This was Amstrad's entry to the 16-bit home computer market, intended to compete with the Atari
|
||||||
|
ST and Commodore Amiga. It's similar to the PC1512, but is based on Amstrad's portable PPC512
|
||||||
|
system. With stock CGA and PC speaker, it couldn't compare with the ST or Amiga.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pc200\pc20v2.0
|
||||||
|
pc200\pc20v2.1
|
||||||
|
pc200\40109.bin
|
||||||
|
|
||||||
|
|
||||||
|
Schneider Euro PC (1988)
|
||||||
|
A German XT clone. An 'all-in-one' system like the Sinclair PC200. I don't know much about this
|
||||||
|
machine to be honest! This doesn't appear to work with the XTIDE BIOS, so therefore this is the
|
||||||
|
only model that does not support hard discs.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
europc\50145
|
||||||
|
europc\50146
|
||||||
|
|
||||||
|
|
||||||
|
(c)Anonymous Generic Turbo XT BIOS (1988?)
|
||||||
|
This is a BIOS whose source code was made available on Usenet in 1988. It appears to be an
|
||||||
|
anonymous BIOS from an XT clone board. It was then heavily modified to fix bugs. The history of
|
||||||
|
this BIOS (and the source code) is at http://dizzie.narod.ru/bios.txt
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
genxt\pcxt.rom
|
||||||
|
|
||||||
|
|
||||||
|
AMI XT clone (1989)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
amixt\ami_8088_bios_31jan89.bin
|
||||||
|
|
||||||
|
|
||||||
|
DTK XT clone (1988)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
dtk\dtk_erso_2.42_2764.bin
|
||||||
|
|
||||||
|
|
||||||
|
VTech Laser Turbo XT (1987)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ltxt\27c64.bin
|
||||||
|
|
||||||
|
|
||||||
|
VTech Laser XT3 (1989)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
lxt3\27c64d.bin
|
||||||
|
|
||||||
|
|
||||||
|
Phoenix XT clone (1986)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pxxt\000p001.bin
|
||||||
|
|
||||||
|
|
||||||
|
Juko XT clone (1988)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
jukopc\000o001.bin
|
||||||
|
|
||||||
|
|
||||||
|
Commodore PC30-III (1988)
|
||||||
|
A fairly generic 286 clone.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
cmdpc30\commodore pc 30 iii even.bin
|
||||||
|
cmdpc30\commodore pc 30 iii odd.bin
|
||||||
|
|
||||||
|
|
||||||
|
Amstrad PC2086 (1989)
|
||||||
|
The PC2086 is essentially a PC1640 with VGA and 3.5" floppy drives.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pc2086\40179.ic129
|
||||||
|
pc2086\40180.ic132
|
||||||
|
pc2086\40186.ic171
|
||||||
|
|
||||||
|
|
||||||
|
Amstrad PC3086 (1990)
|
||||||
|
The PC3086 is a version of the PC2086 with a more standard case.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
pc3086\fc00.bin
|
||||||
|
pc3086\c000.bin
|
||||||
|
|
||||||
|
|
||||||
|
Dell System 200 (1990?)
|
||||||
|
This is a pretty generic 286 clone with a Phoenix BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
dells200\dell0.bin
|
||||||
|
dells200\dell1.bin
|
||||||
|
|
||||||
|
|
||||||
|
AMI 286 clone (1990)
|
||||||
|
This is a generic 286 clone with an AMI BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ami286\amic206.bin
|
||||||
|
|
||||||
|
|
||||||
|
Award 286 clone (1990)
|
||||||
|
This is a generic 286 clone with an Award BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
award286\award.bin
|
||||||
|
|
||||||
|
|
||||||
|
IBM PS/1 Model 2011 (1990)
|
||||||
|
This is a 286 with integrated VGA and a basic GUI and DOS 4.01 in ROM.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmps1\f80000.bin
|
||||||
|
|
||||||
|
|
||||||
|
Compaq Deskpro 386 (1989)
|
||||||
|
An early 386 system. I don't think this BIOS is from the original 1986 version
|
||||||
|
(the very first 386 system), but from a 1989 refresh.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
deskpro386\109592-005.u11.bin
|
||||||
|
deskpro386\109591-005.u13.bin
|
||||||
|
|
||||||
|
|
||||||
|
IBM PS/1 Model 2121 (1990)
|
||||||
|
This is a 386SX with integrated VGA.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ibmps1_2121\fc0000.bin
|
||||||
|
|
||||||
|
|
||||||
|
Acermate 386SX/25N (1992?)
|
||||||
|
An integrated 386SX clone, with onboard Oak SVGA and IO.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
acer386\acer386.bin
|
||||||
|
acer386\oti067.bin
|
||||||
|
|
||||||
|
|
||||||
|
DTK 386SX clone (1990)
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
dtk386\3cto001.bin
|
||||||
|
|
||||||
|
|
||||||
|
Amstrad MegaPC (1992)
|
||||||
|
A 386SX clone (otherwise known as the PC7386SX) with a built-in Sega Megadrive. Only the PC section
|
||||||
|
is emulated, obv.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
megapc\41651-bios lo.u18
|
||||||
|
megapc\211253-bios hi.u19
|
||||||
|
|
||||||
|
|
||||||
|
AMI 386SX clone (1994)
|
||||||
|
This is a generic 386SX clone with an AMI BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ami386\ami386.bin
|
||||||
|
|
||||||
|
|
||||||
|
MR 386DX clone (1994)
|
||||||
|
This is a generic 386DX clone with an MR BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
mr386dx\opt495sx.mr
|
||||||
|
|
||||||
|
|
||||||
|
AMI 386DX clone (1994)
|
||||||
|
This is a generic 386DX clone with an AMI BIOS. This is the only currently emulated 386DX system
|
||||||
|
to support an external cache.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ami386dx\opt495sx.ami
|
||||||
|
|
||||||
|
|
||||||
|
AMI 486 clone (1993)
|
||||||
|
This is a generic 486 clone with an AMI BIOS. The BIOS came from my 486SX/25, bought in December
|
||||||
|
1993.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
ami486\ami486.bin
|
||||||
|
|
||||||
|
|
||||||
|
AMI WinBIOS 486 clone (1994)
|
||||||
|
A 486 clone with a newer AMI BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
win486\ali1429g.amw
|
||||||
|
|
||||||
|
|
||||||
|
Award SiS 496/497 (1995)
|
||||||
|
A 486 clone using the SiS 496/497 chipset, with PCI bus and Award BIOS.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
sis496\sis496-1.awa
|
||||||
|
|
||||||
|
|
||||||
|
Intel Premiere/PCI (Batman's Revenge) (1994)
|
||||||
|
A Socket 4 based board with 430LX chipset.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
revenge\1009af2_.bi0
|
||||||
|
revenge\1009af2_.bi1
|
||||||
|
|
||||||
|
|
||||||
|
Intel Advanced/EV (Endeavor) (1995)
|
||||||
|
A Socket 5/7 based board with 430FX chipset. The real board has a Sound Blaster Vibra 16 on board,
|
||||||
|
which is not emulated - use a discrete card instead. Some Advanced/EVs also had a Trio64 on board,
|
||||||
|
the emulated board does not have this either.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
endeavor\1006cb0_.bi0
|
||||||
|
endeavor\1006cb0_.bi1
|
||||||
|
|
||||||
|
|
||||||
|
Award 430VX PCI (1996)
|
||||||
|
A generic Socket 5/7 board with 430VX chipset.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
|
||||||
|
430vx\55xwuq0e.bin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PCem emulates the following graphics adapters :
|
||||||
|
|
||||||
|
MDA
|
||||||
|
The original PC adapter. This displays 80x25 text in monochrome.
|
||||||
|
|
||||||
|
|
||||||
|
Hercules
|
||||||
|
A clone of MDA, with the addition of a high-resolution 720x348 graphics mode.
|
||||||
|
|
||||||
|
|
||||||
|
CGA
|
||||||
|
The most common of the original adapters, supporting 40x25 and 80x25 text, and
|
||||||
|
320x200 in 4 colours, 640x200 in 2 colours, and a composite mode giving 160x200
|
||||||
|
in 16 colours.
|
||||||
|
|
||||||
|
|
||||||
|
Plantronics ColorPlus
|
||||||
|
An enhanced CGA board, with support for 320x200x16 and 640x200x4.
|
||||||
|
|
||||||
|
|
||||||
|
Wyse WY-700
|
||||||
|
A CGA-compatible board, with support for a 1280x800 mode
|
||||||
|
|
||||||
|
|
||||||
|
IBM EGA
|
||||||
|
The original 1984 IBM EGA card, with 256k VRAM.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
ibm_6277356_ega_card_u44_27128.bin
|
||||||
|
|
||||||
|
|
||||||
|
Hercules InColor
|
||||||
|
An enhanced Hercules with a custom 720x350 16 colour mode.
|
||||||
|
|
||||||
|
|
||||||
|
IBM VGA
|
||||||
|
The original VGA card.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
ibm_vga.bin
|
||||||
|
|
||||||
|
|
||||||
|
Trident 8900D SVGA
|
||||||
|
A low cost SVGA board circa 1992/1993. Not the greatest board in it's day, but
|
||||||
|
it has a reasonable VESA driver and (buggy) 15/16/24-bit colour modes.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
trident.bin
|
||||||
|
|
||||||
|
|
||||||
|
Trident TGUI9440
|
||||||
|
A later Trident board with GUI acceleration. Windows 9x doesn't include drivers
|
||||||
|
for this, so they have to be downloaded and installed separately.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
9440.vbi
|
||||||
|
|
||||||
|
|
||||||
|
Tseng ET4000AX SVGA
|
||||||
|
A somewhat better SVGA board than the Trident, here you get better compatibility
|
||||||
|
and speed (on the real card, not the emulator) in exchange for being limited to
|
||||||
|
8-bit colour.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
et4000.bin
|
||||||
|
|
||||||
|
|
||||||
|
Diamond Stealth 32 SVGA
|
||||||
|
An ET4000/W32p based board, has 15/16/24-bit colour modes, plus acceleration.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
et4000w32.bin
|
||||||
|
|
||||||
|
|
||||||
|
Paradise Bahamas 64
|
||||||
|
An S3 Vision864 based board.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
bahamas64.bin
|
||||||
|
|
||||||
|
|
||||||
|
Number Nine 9FX
|
||||||
|
An S3 Trio64 based board.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
s3_764.bin
|
||||||
|
|
||||||
|
|
||||||
|
ATI VGA Edge-16
|
||||||
|
A basic SVGA clone.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
vgaedge16.vbi
|
||||||
|
|
||||||
|
|
||||||
|
ATI VGA Charger
|
||||||
|
A basic SVGA clone, similar to the Edge-16.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
bios.bin
|
||||||
|
|
||||||
|
|
||||||
|
ATI Graphics Pro Turbo
|
||||||
|
A Mach64GX based board.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
mach64gx/bios.bin
|
||||||
|
|
||||||
|
|
||||||
|
OAK OTI-067
|
||||||
|
A basic SVGA clone.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
oti067/bios.bin
|
||||||
|
|
||||||
|
|
||||||
|
Diamond Stealth 3D 2000
|
||||||
|
An S3 ViRGE/325 based board.
|
||||||
|
|
||||||
|
PCem emulates the ViRGE S3D engine in software. This works with most games I tried, but
|
||||||
|
there may be some issues. The Direct3D drivers for the /325 are fairly poor (often showing
|
||||||
|
as missing triangles), so use of the /DX instead is recommended.
|
||||||
|
|
||||||
|
The streams processor (video overlay) is also emulated, however many features are missing.
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
s3virge.bin
|
||||||
|
|
||||||
|
|
||||||
|
S3 ViRGE/DX
|
||||||
|
An S3 ViRGE/DX based board. The drivers that come with Windows are similar to those for the
|
||||||
|
/325, however better ones do exist (try the 8-21-1997 version). With the correct drivers,
|
||||||
|
many early Direct3D games work okay (if slowly).
|
||||||
|
|
||||||
|
ROM files needed:
|
||||||
|
86c375_1.bin
|
||||||
|
|
||||||
|
|
||||||
|
3DFX Voodoo Graphics
|
||||||
|
3D accelerator. Widely supported in late 90s games.
|
||||||
|
|
||||||
|
PCem emulates this in software. The emulation is a lot faster than in v10 (thanks to a new
|
||||||
|
dynamic recompiler) and should be capable of hitting Voodoo 1 performance on most machines
|
||||||
|
when two render threads are used. As before, the emulated CPU is the bottleneck for most games.
|
||||||
|
|
||||||
|
PCem can emulate 6 and 8 MB configurations, but defaults to 4 MB for compatibility. It can also
|
||||||
|
emulate the screen filter present on the original card, though this does at present have a
|
||||||
|
noticeable performance hit.
|
||||||
|
|
||||||
|
Almost everything I've tried works okay, with a very few exceptions - Screamer 2 and Rally have
|
||||||
|
serious issues.
|
||||||
|
|
||||||
|
|
||||||
|
Obsidian SB50
|
||||||
|
Voodoo Graphics with 2 TMUs. Drivers for this are a bit limited - the official drivers don't
|
||||||
|
support 2 TMUs in Direct3D.
|
||||||
|
|
||||||
|
|
||||||
|
Voodoo 2
|
||||||
|
Improved Voodoo Graphics - higher clocks, 2 TMUs, triangle setup etc.
|
||||||
|
|
||||||
|
PCem can emulate both 8 and 12 MB configurations. It can also emulate 6 and 10 MB configurations
|
||||||
|
(with 2MB framebuffer memory), which were never sold into the PC market but do exist for arcade
|
||||||
|
systems.
|
||||||
|
|
||||||
|
|
||||||
|
Some models have fixed graphics adapters :
|
||||||
|
|
||||||
|
IBM PCjr
|
||||||
|
CGA with various new modes - 160x200x16, 320x200x16, 640x200x4.
|
||||||
|
|
||||||
|
Olivetti M24
|
||||||
|
CGA with double-res text modes and a 640x400 mode. I haven't seen a dump of the font
|
||||||
|
ROM for this yet, so if one is not provided the MDA font will be used - which looks slightly odd
|
||||||
|
as it is 14-line instead of 16-line.
|
||||||
|
|
||||||
|
Tandy 1000
|
||||||
|
Clone of PCjr video. Widely supported in 80s games.
|
||||||
|
|
||||||
|
Tandy 1000 SL/2
|
||||||
|
Improvement of Tandy 1000, with support for 640x200x16.
|
||||||
|
|
||||||
|
Amstrad PC1512
|
||||||
|
CGA with a new mode (640x200x16). Only supported in GEM to my knowledge.
|
||||||
|
|
||||||
|
Amstrad PC1640
|
||||||
|
Paradise EGA.
|
||||||
|
|
||||||
|
Amstrad PC2086/PC3086
|
||||||
|
Paradise PVGA1. An early SVGA clone with 256kb VRAM.
|
||||||
|
|
||||||
|
IBM PS/1 Model 2011
|
||||||
|
Stock VGA with 256kb VRAM.
|
||||||
|
|
||||||
|
IBM PS/1 Model 2121
|
||||||
|
Basic (and unknown) SVGA with 256kb VRAM.
|
||||||
|
|
||||||
|
Amstrad MegaPC
|
||||||
|
Paradise 90C11. A development of the PVGA1, with 512kb VRAM.
|
||||||
|
|
||||||
|
Acer 386SX/25N
|
||||||
|
Oak OTI-067. Another 512kb SVGA clone.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PCem emulates the following sound devices :
|
||||||
|
|
||||||
|
PC speaker
|
||||||
|
The standard beeper on all PCs. Supports samples/RealSound.
|
||||||
|
|
||||||
|
Tandy PSG
|
||||||
|
The Texas Instruments chip in the PCjr and Tandy 1000. Supports 3 voices plus
|
||||||
|
noise. I reused the emulator in B-em for this (slightly modified).
|
||||||
|
v11 now emulates the differences between the SN76496 (PCjr and Tandy 1000), and the NCR8496
|
||||||
|
(currently assigned to the Tandy 1000HX). Maniac Mansion and Zak McKraken will only sound
|
||||||
|
correct on the latter.
|
||||||
|
|
||||||
|
Tandy PSSJ
|
||||||
|
Used on the Tandy 1000SL/2, this clones the NCR8496, adding an addition frequency divider (did any
|
||||||
|
software actually use this?) and an 8-bit DAC.
|
||||||
|
|
||||||
|
PS/1 audio card
|
||||||
|
An SN76496 clone plus an 8-bit DAC. The SN76496 isn't at the same address as PCjr/Tandy, so most
|
||||||
|
software doesn't support it.
|
||||||
|
|
||||||
|
Gameblaster
|
||||||
|
The Creative Labs Gameblaster/Creative Music System, Creative's first sound card
|
||||||
|
introduced in 1987. Has two Philips SAA1099, giving 12 voices of square waves plus 4 noise
|
||||||
|
voices. In stereo!
|
||||||
|
|
||||||
|
Adlib
|
||||||
|
Has a Yamaha YM3812, giving 9 voices of 2 op FM, or 6 voices plus a rhythm section. PCem
|
||||||
|
uses the DOSBox dbopl emulator.
|
||||||
|
|
||||||
|
Adlib Gold
|
||||||
|
OPL3 with YM318Z 12-bit digital section. Possibly some bugs (not a lot of software to test).
|
||||||
|
The surround module is now emulated.
|
||||||
|
|
||||||
|
Sound Blaster
|
||||||
|
Several Sound Blasters are emulated :
|
||||||
|
SB v1.0 - The original. Limited to 22khz, and no auto-init DMA (can cause crackles sometimes).
|
||||||
|
SB v1.5 - Adds auto-init DMA
|
||||||
|
SB v2.0 - Upped to 41khz
|
||||||
|
SB Pro v1.0 - Stereo, with twin OPL2 chips.
|
||||||
|
SB Pro v2.0 - Stereo, with OPL 3 chip
|
||||||
|
SB 16 - 16 bit stereo
|
||||||
|
SB AWE32 - SB 16 + wavetable MIDI. This requires a ROM dump from a real AWE32.
|
||||||
|
All are set to Address 220, IRQ 7 and DMA 1 (and High DMA 5). IRQ and DMA can be changed for the
|
||||||
|
SB16 & AWE32 in the drivers.
|
||||||
|
The relevant SET line for autoexec.bat is
|
||||||
|
SET BLASTER = A220 I7 D1 Tx - where Tx is T1 for SB v1.0, T3 for SB v2.0, T4 for SB Pro,
|
||||||
|
and T6 for SB16.
|
||||||
|
|
||||||
|
AWE32 requires a ROM dump called awe32.raw. AWE-DUMP is a utility which can get a dump from a real
|
||||||
|
card. Most EMU8000 functionality should work, however filters are not correct and reverb/chorus
|
||||||
|
effects are not currently emulated.
|
||||||
|
|
||||||
|
Gravis Ultrasound
|
||||||
|
32 voice sample playback. Port address is fixed to 240, IRQ and DMA can be changed from the drivers.
|
||||||
|
Emulation is improved significantly over previous versions.
|
||||||
|
|
||||||
|
Windows Sound System
|
||||||
|
16-bit digital + OPL3. Note that this only emulates WSS itself, and should not be used with drivers
|
||||||
|
from compatible boards with additional components (eg Turtle Beach Monte Carlo)
|
||||||
|
|
||||||
|
Innovation SSI-2001
|
||||||
|
SID6581. Emulated using resid-fp. Board is fixed to port 280.
|
||||||
|
|
||||||
|
|
||||||
|
Other stuff emulated :
|
||||||
|
|
||||||
|
Serial mouse
|
||||||
|
A Microsoft compatible serial mouse on COM1. Compatible drivers are all over the place for this.
|
||||||
|
|
||||||
|
M24 mouse
|
||||||
|
I haven't seen a DOS mouse driver for this yet, but the regular scancode mode works, as does the
|
||||||
|
Windows 1.x driver.
|
||||||
|
|
||||||
|
PC1512 mouse
|
||||||
|
The PC1512's perculiar quadrature mouse. You need Amstrad's actual driver for this one.
|
||||||
|
|
||||||
|
PS/2 mouse
|
||||||
|
A standard 2 button PS/2 mouse. As with serial, compatible drivers are common.
|
||||||
|
|
||||||
|
Microsoft PS/2 Intellimouse
|
||||||
|
A PS/2 mouse with mouse wheel.
|
||||||
|
|
||||||
|
ATAPI CD-ROM
|
||||||
|
Works with OAKCDROM.SYS, VDD-IDE.SYS, and the internal drivers of every OS I've tried.
|
||||||
|
|
||||||
|
|
||||||
|
XTIDE :
|
||||||
|
|
||||||
|
The XTIDE board is emulated for machines that don't natively support IDE hard discs.
|
||||||
|
|
||||||
|
You will need to download the XTIDE BIOS seperately. Of the various versions, ide_at.bin and ide_xt.bin
|
||||||
|
should be placed in the ROMS directory. ide_xt is used on all XT models, and ide_at is used on the IBM AT
|
||||||
|
and Commodore PC30-III machines.
|
||||||
|
|
||||||
|
The BIOS is available at :
|
||||||
|
|
||||||
|
http://code.google.com/p/xtideuniversalbios/
|
||||||
|
|
||||||
|
v2.0.0 beta 1 is the version I've mostly tested. v2.0.0 beta 3 is known to have some issues.
|
||||||
|
|
||||||
|
For the PS/1, you will need v1.1.5. The PS/1 is a bit fussy with XTIDE, and I've found that it works best
|
||||||
|
when the XTIDE configuration has 'Full Operating Mode' disabled. This version must be called
|
||||||
|
ide_at_1_1_5.bin and should also be placed in the ROMS directory.
|
||||||
|
|
||||||
|
|
||||||
|
Notes :
|
||||||
|
|
||||||
|
- The time on the PC1512 clock is wrong. The date is correct, though since the PC1512's bios isn't
|
||||||
|
Y2k compliant, it thinks it's 1988.
|
||||||
|
|
||||||
|
- The envelope system on the Gameblaster isn't emulated. The noise may not be right either.
|
||||||
|
|
||||||
|
- Some of the more unusual VGA features are not emulated. I haven't found anything that uses them yet.
|
||||||
|
|
||||||
|
- On some versions of Windows the AWE32 is not set up correctly, claiming a resource conflict. To correct
|
||||||
|
this open the relevant item in Device Manager, choose 'Set Configuration Manually' and accept the
|
||||||
|
options presented.
|
||||||
|
|
||||||
|
|
||||||
|
Software tested:
|
||||||
|
|
||||||
|
MS-DOS 1.25
|
||||||
|
MS-DOS 2.11
|
||||||
|
MS-DOS 3.31
|
||||||
|
Compaq DOS 3.31
|
||||||
|
MS-DOS 5.0
|
||||||
|
MS-DOS 6.22
|
||||||
|
|
||||||
|
DR-DOS 6.0
|
||||||
|
|
||||||
|
Windows 1.03
|
||||||
|
Windows 2.03
|
||||||
|
Windows/386 2.11
|
||||||
|
Windows 3.0
|
||||||
|
Windows 3.1
|
||||||
|
Windows for Workgroups 3.11
|
||||||
|
Windows 95
|
||||||
|
Windows 95 OSR 2
|
||||||
|
Windows 98
|
||||||
|
Windows 98 SE
|
||||||
|
Windows ME
|
||||||
|
|
||||||
|
Windows NT 3.51
|
||||||
|
Windows NT 4
|
||||||
|
Windows 2000
|
||||||
|
Windows XP
|
||||||
|
|
||||||
|
OS/2 v1.1
|
||||||
|
OS/2 v1.2
|
||||||
|
OS/2 v1.3
|
||||||
|
OS/2 v2.1
|
||||||
|
OS/2 Warp 3
|
||||||
|
OS/2 Warp 4
|
||||||
|
|
||||||
|
GEM 3.11
|
||||||
|
|
||||||
|
Corel Linux 1.2
|
||||||
|
Ubuntu 10.04 (very slow, does not support serial mouse)
|
||||||
|
|
||||||
|
BeOS 5.0 Professional
|
||||||
|
|
||||||
|
Adobe Photoshop 3.0.4
|
||||||
|
CorelDRAW! 2.5 (OS/2)
|
||||||
|
CorelDRAW! 5.0
|
||||||
|
FastTracker v2.08
|
||||||
|
Lotus 1-2-3 2.1 (OS/2)
|
||||||
|
Microsoft Excel 3.0 (OS/2)
|
||||||
|
Microsoft Word 1.1 (OS/2)
|
||||||
|
Microsoft Word for Windows 6.1
|
||||||
|
Microsoft Works for Windows 3.0
|
||||||
|
Microsoft Visual Basic 3.0
|
||||||
|
Microsoft Visual C++ 1.0
|
||||||
|
Microsoft Visual C++ 6.0
|
||||||
|
StarOffice 3.1 (OS/2)
|
||||||
|
|
||||||
|
Age of Empires
|
||||||
|
Alien vs Predator (3DFX)
|
||||||
|
Blake Stone
|
||||||
|
Breakneck (3DFX)
|
||||||
|
Caesar III
|
||||||
|
Civilization
|
||||||
|
Civilization II
|
||||||
|
Colin McRae Rally (3DFX)
|
||||||
|
Colonization
|
||||||
|
Command & Conquer : Red Alert
|
||||||
|
Command & Conquer : Red Alert 2
|
||||||
|
Commander Keen : Goodbye Galaxy
|
||||||
|
Commander Keen : Invasion of the Vorticons
|
||||||
|
Croc (3DFX)
|
||||||
|
Curse of Monkey Island
|
||||||
|
Dawn Patrol
|
||||||
|
Deus Ex (3DFX, slow)
|
||||||
|
Discworld II
|
||||||
|
Doom
|
||||||
|
Doom II
|
||||||
|
Duke Nukem 3D
|
||||||
|
Dune
|
||||||
|
Dune II
|
||||||
|
Epic Pinball
|
||||||
|
Grand Theft Auto (3DFX)
|
||||||
|
GTA 2 (3DFX)
|
||||||
|
Half-Life (3DFX)
|
||||||
|
Heretic
|
||||||
|
House of the Dead 2 (3DFX)
|
||||||
|
Icon
|
||||||
|
Incoming (3DFX)
|
||||||
|
Indiana Jones and the Last Crusade
|
||||||
|
Jetpack
|
||||||
|
King's Quest (PCjr, Tandy)
|
||||||
|
King's Quest II (Tandy)
|
||||||
|
Klotz
|
||||||
|
Lemmings
|
||||||
|
Lemmings 2
|
||||||
|
Little Big Adventure 2
|
||||||
|
Lotus III
|
||||||
|
Maniac Mansion
|
||||||
|
Microsoft Arcade
|
||||||
|
Monkey Island 2
|
||||||
|
Mystic Towers
|
||||||
|
Need for Speed II SE (3DFX)
|
||||||
|
Need for Speed III (3DFX)
|
||||||
|
Network Q RAC Rally
|
||||||
|
Oddworld : Abe's Oddysee
|
||||||
|
Overlord
|
||||||
|
Populous : The Beginning (3DFX)
|
||||||
|
Pro Pinball : Big Race USA
|
||||||
|
Pro Pinball : The Web
|
||||||
|
Psycho Pinball
|
||||||
|
Resident Evil 2 (3DFX)
|
||||||
|
Rollercoaster Tycoon
|
||||||
|
Quake (3DFX)
|
||||||
|
Quake II (3DFX)
|
||||||
|
Quake III Arena (3DFX)
|
||||||
|
Scorched Earth
|
||||||
|
Screamer
|
||||||
|
Screamer Rally (not 3DFX)
|
||||||
|
Secret of Monkey Island
|
||||||
|
SimCity (DOS, OS/2)
|
||||||
|
SimCity 2000 (DOs, Windows, OS/2)
|
||||||
|
SimCity 3000
|
||||||
|
Spear of Destiny
|
||||||
|
Star Goose
|
||||||
|
Stargunner
|
||||||
|
Stunt Island
|
||||||
|
System Shock
|
||||||
|
System Shock 2 (3DFX)
|
||||||
|
Terminal Velocity
|
||||||
|
The Humans
|
||||||
|
Theme Hospital
|
||||||
|
Tomb Raider (3DFX)
|
||||||
|
Tomb Raider III (3DFX)
|
||||||
|
Tony Hawk's Pro Skater 2 (3DFX)
|
||||||
|
Total Annihilation
|
||||||
|
Transport Tycoon
|
||||||
|
Turok (3DFX)
|
||||||
|
Turok 2 (3DFX)
|
||||||
|
Tyrian
|
||||||
|
UFO : Enemy Unknown
|
||||||
|
Unreal (3DFX)
|
||||||
|
Unreal Tournament (3DFX)
|
||||||
|
Wacky Wheels
|
||||||
|
Wing Commander
|
||||||
|
Wolfenstein 3D
|
||||||
|
World Cup 98 (3DFX)
|
||||||
|
Worms
|
||||||
|
Worms 2
|
||||||
|
X-Com : Apocalypse
|
||||||
|
X-Com : Terror From The Deep
|
||||||
|
X-Wing
|
||||||
|
Zone 66
|
||||||
|
|
||||||
|
Complex - Cyboman 2
|
||||||
|
EMF - Verses
|
||||||
|
Future Crew - Second Reality
|
||||||
|
Gazebo - Cyboman!
|
||||||
|
KFMF - Trip (3DFX)
|
||||||
|
Logic Design - Fashion
|
||||||
|
Orange - X14
|
||||||
|
Renaissance - Amnesia
|
||||||
|
Skull - Putrefaction
|
||||||
|
Tran - Ambience (flickery with a host display at 60 Hz)
|
||||||
|
Tran - Timeless
|
||||||
|
Triton - Crystal Dream
|
||||||
|
Triton - Crystal Dream II (visual artifacts in titles)
|
||||||
|
Ultraforce - Vectdemo
|
||||||
|
Witan - Witan House
|
||||||
|
|
||||||
|
BeebInC v0.99f
|
||||||
|
Fellow v0.33
|
||||||
|
Kgen98 v0.4b
|
||||||
|
PacifiST v0.48
|
||||||
|
SNES9x v0.96
|
||||||
|
vMac v0.1.9.1
|
||||||
152
src/386.c
152
src/386.c
|
|
@ -2,6 +2,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "ibm.h"
|
#include "ibm.h"
|
||||||
|
#include "386.h"
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
#include "x87.h"
|
#include "x87.h"
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
|
|
@ -9,18 +10,58 @@
|
||||||
#include "fdc.h"
|
#include "fdc.h"
|
||||||
#include "pic.h"
|
#include "pic.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "nmi.h"
|
|
||||||
|
|
||||||
#include "386_common.h"
|
#include "386_common.h"
|
||||||
#include "codegen.h"
|
|
||||||
|
|
||||||
#undef CPU_BLOCK_END
|
|
||||||
#define CPU_BLOCK_END()
|
#define CPU_BLOCK_END()
|
||||||
|
|
||||||
|
extern int codegen_flags_changed;
|
||||||
|
|
||||||
|
extern int nmi_enable;
|
||||||
|
|
||||||
|
int inscounts[256];
|
||||||
|
uint32_t oldpc2;
|
||||||
|
|
||||||
|
int trap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern int cpl_override;
|
||||||
|
|
||||||
|
int has_fpu;
|
||||||
|
extern int fpucount;
|
||||||
|
uint16_t rds;
|
||||||
|
uint16_t ea_rseg;
|
||||||
|
|
||||||
|
int is486;
|
||||||
|
int cgate32;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t romext[32768];
|
||||||
|
uint8_t *ram,*rom;
|
||||||
|
|
||||||
|
uint32_t rmdat32;
|
||||||
|
#define rmdat rmdat32
|
||||||
|
#define fetchdat rmdat32
|
||||||
|
uint32_t backupregs[16];
|
||||||
|
extern int oddeven;
|
||||||
|
int inttype;
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t oldcs2;
|
||||||
|
uint32_t oldecx;
|
||||||
|
|
||||||
|
uint32_t *eal_r, *eal_w;
|
||||||
|
|
||||||
|
uint16_t *mod1add[2][8];
|
||||||
|
uint32_t *mod1seg[8];
|
||||||
|
|
||||||
static inline void fetch_ea_32_long(uint32_t rmdat)
|
static inline void fetch_ea_32_long(uint32_t rmdat)
|
||||||
{
|
{
|
||||||
eal_r = eal_w = NULL;
|
eal_r = eal_w = NULL;
|
||||||
easeg = cpu_state.ea_seg->base;
|
easeg = cpu_state.ea_seg->base;
|
||||||
|
ea_rseg = cpu_state.ea_seg->seg;
|
||||||
if (cpu_rm == 4)
|
if (cpu_rm == 4)
|
||||||
{
|
{
|
||||||
uint8_t sib = rmdat >> 8;
|
uint8_t sib = rmdat >> 8;
|
||||||
|
|
@ -47,7 +88,8 @@ static inline void fetch_ea_32_long(uint32_t rmdat)
|
||||||
else if ((sib & 6) == 4 && !cpu_state.ssegs)
|
else if ((sib & 6) == 4 && !cpu_state.ssegs)
|
||||||
{
|
{
|
||||||
easeg = ss;
|
easeg = ss;
|
||||||
cpu_state.ea_seg = &cpu_state.seg_ss;
|
ea_rseg = SS;
|
||||||
|
cpu_state.ea_seg = &_ss;
|
||||||
}
|
}
|
||||||
if (((sib >> 3) & 7) != 4)
|
if (((sib >> 3) & 7) != 4)
|
||||||
cpu_state.eaaddr += cpu_state.regs[(sib >> 3) & 7].l << (sib >> 6);
|
cpu_state.eaaddr += cpu_state.regs[(sib >> 3) & 7].l << (sib >> 6);
|
||||||
|
|
@ -60,7 +102,8 @@ static inline void fetch_ea_32_long(uint32_t rmdat)
|
||||||
if (cpu_rm == 5 && !cpu_state.ssegs)
|
if (cpu_rm == 5 && !cpu_state.ssegs)
|
||||||
{
|
{
|
||||||
easeg = ss;
|
easeg = ss;
|
||||||
cpu_state.ea_seg = &cpu_state.seg_ss;
|
ea_rseg = SS;
|
||||||
|
cpu_state.ea_seg = &_ss;
|
||||||
}
|
}
|
||||||
if (cpu_mod == 1)
|
if (cpu_mod == 1)
|
||||||
{
|
{
|
||||||
|
|
@ -91,6 +134,7 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
{
|
{
|
||||||
eal_r = eal_w = NULL;
|
eal_r = eal_w = NULL;
|
||||||
easeg = cpu_state.ea_seg->base;
|
easeg = cpu_state.ea_seg->base;
|
||||||
|
ea_rseg = cpu_state.ea_seg->seg;
|
||||||
if (!cpu_mod && cpu_rm == 6)
|
if (!cpu_mod && cpu_rm == 6)
|
||||||
{
|
{
|
||||||
cpu_state.eaaddr = getword();
|
cpu_state.eaaddr = getword();
|
||||||
|
|
@ -113,7 +157,8 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
if (mod1seg[cpu_rm] == &ss && !cpu_state.ssegs)
|
if (mod1seg[cpu_rm] == &ss && !cpu_state.ssegs)
|
||||||
{
|
{
|
||||||
easeg = ss;
|
easeg = ss;
|
||||||
cpu_state.ea_seg = &cpu_state.seg_ss;
|
ea_rseg = SS;
|
||||||
|
cpu_state.ea_seg = &_ss;
|
||||||
}
|
}
|
||||||
cpu_state.eaaddr &= 0xFFFF;
|
cpu_state.eaaddr &= 0xFFFF;
|
||||||
}
|
}
|
||||||
|
|
@ -136,7 +181,19 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
#define getwordf() ((uint16_t)(fetchdat)); cpu_state.pc+=2
|
#define getwordf() ((uint16_t)(fetchdat)); cpu_state.pc+=2
|
||||||
#define getbyte2f() ((uint8_t)(fetchdat>>8)); cpu_state.pc++
|
#define getbyte2f() ((uint8_t)(fetchdat>>8)); cpu_state.pc++
|
||||||
#define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2
|
#define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2
|
||||||
|
extern int xout;
|
||||||
|
|
||||||
|
int oldi;
|
||||||
|
|
||||||
|
uint32_t testr[9];
|
||||||
|
extern int dontprint;
|
||||||
|
|
||||||
|
#undef NOTRM
|
||||||
|
#define NOTRM if (!(msw & 1) || (eflags & VM_FLAG))\
|
||||||
|
{ \
|
||||||
|
x86_int(6); \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
#define OP_TABLE(name) ops_ ## name
|
#define OP_TABLE(name) ops_ ## name
|
||||||
|
|
||||||
|
|
@ -145,6 +202,13 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
|
|
||||||
#include "x86_ops.h"
|
#include "x86_ops.h"
|
||||||
|
|
||||||
|
#undef NOTRM
|
||||||
|
#define NOTRM if (!(msw & 1) || (eflags & VM_FLAG))\
|
||||||
|
{ \
|
||||||
|
x86_int(6); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
void exec386(int cycs)
|
void exec386(int cycs)
|
||||||
{
|
{
|
||||||
uint8_t temp;
|
uint8_t temp;
|
||||||
|
|
@ -152,56 +216,73 @@ void exec386(int cycs)
|
||||||
int tempi;
|
int tempi;
|
||||||
int cycdiff;
|
int cycdiff;
|
||||||
int oldcyc;
|
int oldcyc;
|
||||||
|
int cycle_period = cycs / 2000; /*Use a 5us timing granularity*/
|
||||||
|
|
||||||
cycles+=cycs;
|
cycles+=cycs;
|
||||||
// output=3;
|
// output=3;
|
||||||
while (cycles>0)
|
while (cycles>0)
|
||||||
{
|
{
|
||||||
int cycle_period = (timer_target - (uint32_t)tsc) + 1;
|
|
||||||
|
|
||||||
x86_was_reset = 0;
|
|
||||||
cycdiff=0;
|
cycdiff=0;
|
||||||
oldcyc=cycles;
|
oldcyc=cycles;
|
||||||
|
timer_start_period(cycles << TIMER_SHIFT);
|
||||||
// pclog("%i %02X\n", ins, ram[8]);
|
// pclog("%i %02X\n", ins, ram[8]);
|
||||||
while (cycdiff < cycle_period)
|
while (cycdiff < cycle_period)
|
||||||
{
|
{
|
||||||
int ins_cycles = cycles;
|
/* testr[0]=EAX; testr[1]=EBX; testr[2]=ECX; testr[3]=EDX;
|
||||||
|
testr[4]=ESI; testr[5]=EDI; testr[6]=EBP; testr[7]=ESP;*/
|
||||||
|
/* testr[8]=flags;*/
|
||||||
|
// oldcs2=oldcs;
|
||||||
|
// oldpc2=oldpc;
|
||||||
|
|
||||||
|
oldcs=CS;
|
||||||
cpu_state.oldpc = cpu_state.pc;
|
cpu_state.oldpc = cpu_state.pc;
|
||||||
|
oldcpl=CPL;
|
||||||
cpu_state.op32 = use32;
|
cpu_state.op32 = use32;
|
||||||
|
|
||||||
cpu_state.ea_seg = &cpu_state.seg_ds;
|
dontprint=0;
|
||||||
|
|
||||||
|
cpu_state.ea_seg = &_ds;
|
||||||
cpu_state.ssegs = 0;
|
cpu_state.ssegs = 0;
|
||||||
|
|
||||||
fetchdat = fastreadl(cs + cpu_state.pc);
|
fetchdat = fastreadl(cs + cpu_state.pc);
|
||||||
|
|
||||||
if (!cpu_state.abrt)
|
if (!cpu_state.abrt)
|
||||||
{
|
{
|
||||||
uint8_t opcode = fetchdat & 0xFF;
|
trap = flags & T_FLAG;
|
||||||
|
opcode = fetchdat & 0xFF;
|
||||||
fetchdat >>= 8;
|
fetchdat >>= 8;
|
||||||
trap = cpu_state.flags & T_FLAG;
|
|
||||||
|
|
||||||
if (output == 3)
|
if (output == 3)
|
||||||
{
|
{
|
||||||
pclog("%04X(%06X):%04X : %08X %08X %08X %08X %04X %04X %04X(%08X) %04X %04X %04X(%08X) %08X %08X %08X SP=%04X:%08X %02X %04X %i %08X %08X %i %i %02X %02X %02X %02X %02X\n",CS,cs,cpu_state.pc,EAX,EBX,ECX,EDX,CS,DS,ES,es,FS,GS,SS,ss,EDI,ESI,EBP,SS,ESP,opcode,cpu_state.flags,ins,0, ldt.base, CPL, stack32, pic.pend, pic.mask, pic.mask2, pic2.pend, pic2.mask);
|
pclog("%04X(%06X):%04X : %08X %08X %08X %08X %04X %04X %04X(%08X) %04X %04X %04X(%08X) %08X %08X %08X SP=%04X:%08X %02X %04X %i %08X %08X %i %i %02X %02X %02X %02X %02X %f %02X%02X %02X%02X %02X%02X %02X\n",CS,cs,cpu_state.pc,EAX,EBX,ECX,EDX,CS,DS,ES,es,FS,GS,SS,ss,EDI,ESI,EBP,SS,ESP,opcode,flags,ins,0, ldt.base, CPL, stack32, pic.pend, pic.mask, pic.mask2, pic2.pend, pic2.mask, pit.c[0], ram[0xB270+0x3F5], ram[0xB270+0x3F4], ram[0xB270+0x3F7], ram[0xB270+0x3F6], ram[0xB270+0x3F9], ram[0xB270+0x3F8], ram[0x4430+0x0D49]);
|
||||||
}
|
}
|
||||||
cpu_state.pc++;
|
cpu_state.pc++;
|
||||||
x86_opcodes[(opcode | cpu_state.op32) & 0x3ff](fetchdat);
|
x86_opcodes[(opcode | cpu_state.op32) & 0x3ff](fetchdat);
|
||||||
if (x86_was_reset)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!use32) cpu_state.pc &= 0xffff;
|
||||||
|
|
||||||
if (cpu_state.abrt)
|
if (cpu_state.abrt)
|
||||||
{
|
{
|
||||||
flags_rebuild();
|
flags_rebuild();
|
||||||
// pclog("Abort\n");
|
// pclog("Abort\n");
|
||||||
// if (CS == 0x228) pclog("Abort at %04X:%04X - %i %i %i\n",CS,pc,notpresent,nullseg,abrt);
|
// if (CS == 0x228) pclog("Abort at %04X:%04X - %i %i %i\n",CS,pc,notpresent,nullseg,abrt);
|
||||||
tempi = cpu_state.abrt & ABRT_MASK;
|
/* if (testr[0]!=EAX) pclog("EAX corrupted %08X\n",pc);
|
||||||
|
if (testr[1]!=EBX) pclog("EBX corrupted %08X\n",pc);
|
||||||
|
if (testr[2]!=ECX) pclog("ECX corrupted %08X\n",pc);
|
||||||
|
if (testr[3]!=EDX) pclog("EDX corrupted %08X\n",pc);
|
||||||
|
if (testr[4]!=ESI) pclog("ESI corrupted %08X\n",pc);
|
||||||
|
if (testr[5]!=EDI) pclog("EDI corrupted %08X\n",pc);
|
||||||
|
if (testr[6]!=EBP) pclog("EBP corrupted %08X\n",pc);
|
||||||
|
if (testr[7]!=ESP) pclog("ESP corrupted %08X\n",pc);*/
|
||||||
|
/* if (testr[8]!=flags) pclog("FLAGS corrupted %08X\n",pc);*/
|
||||||
|
tempi = cpu_state.abrt;
|
||||||
cpu_state.abrt = 0;
|
cpu_state.abrt = 0;
|
||||||
x86_doabrt(tempi);
|
x86_doabrt(tempi);
|
||||||
if (cpu_state.abrt)
|
if (cpu_state.abrt)
|
||||||
{
|
{
|
||||||
cpu_state.abrt = 0;
|
cpu_state.abrt = 0;
|
||||||
|
CS = oldcs;
|
||||||
cpu_state.pc = cpu_state.oldpc;
|
cpu_state.pc = cpu_state.oldpc;
|
||||||
pclog("Double fault %i\n", ins);
|
pclog("Double fault %i\n", ins);
|
||||||
pmodeint(8, 0);
|
pmodeint(8, 0);
|
||||||
|
|
@ -214,36 +295,34 @@ void exec386(int cycs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cycdiff=oldcyc-cycles;
|
||||||
|
|
||||||
if (cpu_state.smi_pending)
|
if (trap)
|
||||||
{
|
|
||||||
cpu_state.smi_pending = 0;
|
|
||||||
x86_smi_enter();
|
|
||||||
}
|
|
||||||
else if (trap)
|
|
||||||
{
|
{
|
||||||
flags_rebuild();
|
flags_rebuild();
|
||||||
// oldpc=pc;
|
// oldpc=pc;
|
||||||
|
// oldcs=CS;
|
||||||
if (msw&1)
|
if (msw&1)
|
||||||
{
|
{
|
||||||
pmodeint(1,0);
|
pmodeint(1,0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writememw(ss,(SP-2)&0xFFFF,cpu_state.flags);
|
writememw(ss,(SP-2)&0xFFFF,flags);
|
||||||
writememw(ss,(SP-4)&0xFFFF,CS);
|
writememw(ss,(SP-4)&0xFFFF,CS);
|
||||||
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
||||||
SP-=6;
|
SP-=6;
|
||||||
addr = (1 << 2) + idt.base;
|
addr = (1 << 2) + idt.base;
|
||||||
cpu_state.flags &= ~I_FLAG;
|
flags&=~I_FLAG;
|
||||||
cpu_state.flags &= ~T_FLAG;
|
flags&=~T_FLAG;
|
||||||
cpu_state.pc=readmemw(0,addr);
|
cpu_state.pc=readmemw(0,addr);
|
||||||
loadcs(readmemw(0,addr+2));
|
loadcs(readmemw(0,addr+2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (nmi && nmi_enable && nmi_mask)
|
else if (nmi && nmi_enable)
|
||||||
{
|
{
|
||||||
cpu_state.oldpc = cpu_state.pc;
|
cpu_state.oldpc = cpu_state.pc;
|
||||||
|
oldcs = CS;
|
||||||
// pclog("NMI\n");
|
// pclog("NMI\n");
|
||||||
x86_int(2);
|
x86_int(2);
|
||||||
nmi_enable = 0;
|
nmi_enable = 0;
|
||||||
|
|
@ -253,7 +332,7 @@ void exec386(int cycs)
|
||||||
nmi = 0;
|
nmi = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((cpu_state.flags & I_FLAG) && pic_intpending)
|
else if ((flags&I_FLAG) && pic_intpending)
|
||||||
{
|
{
|
||||||
temp=picinterrupt();
|
temp=picinterrupt();
|
||||||
if (temp!=0xFF)
|
if (temp!=0xFF)
|
||||||
|
|
@ -269,13 +348,14 @@ void exec386(int cycs)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writememw(ss,(SP-2)&0xFFFF,cpu_state.flags);
|
writememw(ss,(SP-2)&0xFFFF,flags);
|
||||||
writememw(ss,(SP-4)&0xFFFF,CS);
|
writememw(ss,(SP-4)&0xFFFF,CS);
|
||||||
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
writememw(ss,(SP-6)&0xFFFF,cpu_state.pc);
|
||||||
SP-=6;
|
SP-=6;
|
||||||
addr = (temp << 2) + idt.base;
|
addr = (temp << 2) + idt.base;
|
||||||
cpu_state.flags &= ~I_FLAG;
|
flags&=~I_FLAG;
|
||||||
cpu_state.flags &= ~T_FLAG;
|
flags&=~T_FLAG;
|
||||||
|
oxpc=cpu_state.pc;
|
||||||
cpu_state.pc=readmemw(0,addr);
|
cpu_state.pc=readmemw(0,addr);
|
||||||
loadcs(readmemw(0,addr+2));
|
loadcs(readmemw(0,addr+2));
|
||||||
// if (temp==0x76) pclog("INT to %04X:%04X\n",CS,pc);
|
// if (temp==0x76) pclog("INT to %04X:%04X\n",CS,pc);
|
||||||
|
|
@ -287,11 +367,6 @@ void exec386(int cycs)
|
||||||
ins++;
|
ins++;
|
||||||
insc++;
|
insc++;
|
||||||
|
|
||||||
ins_cycles -= cycles;
|
|
||||||
tsc += ins_cycles;
|
|
||||||
|
|
||||||
cycdiff=oldcyc-cycles;
|
|
||||||
|
|
||||||
if (timetolive)
|
if (timetolive)
|
||||||
{
|
{
|
||||||
timetolive--;
|
timetolive--;
|
||||||
|
|
@ -300,7 +375,8 @@ void exec386(int cycs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TIMER_VAL_LESS_THAN_VAL(timer_target, (uint32_t)tsc))
|
tsc += cycdiff;
|
||||||
timer_process();
|
|
||||||
|
timer_end_period(cycles << TIMER_SHIFT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
15
src/386.h
Normal file
15
src/386.h
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
extern void cpu_386_flags_extract();
|
||||||
|
extern void cpu_386_flags_rebuild();
|
||||||
|
|
||||||
|
void pmodeint(int num, int soft);
|
||||||
|
void loadcscall(uint16_t seg);
|
||||||
|
void loadcsjmp(uint16_t seg, uint32_t oxpc);
|
||||||
|
void pmoderetf(int is32, uint16_t off);
|
||||||
|
void pmodeiret(int is32);
|
||||||
|
void x86_int_sw(int num);
|
||||||
|
|
||||||
|
int divl(uint32_t val);
|
||||||
|
int idivl(int32_t val);
|
||||||
|
|
||||||
|
int rep386(int fv);
|
||||||
|
|
||||||
252
src/386_common.c
252
src/386_common.c
|
|
@ -1,252 +0,0 @@
|
||||||
#include "ibm.h"
|
|
||||||
#include "x86.h"
|
|
||||||
#include "386_common.h"
|
|
||||||
#include "x86_flags.h"
|
|
||||||
#include "codegen.h"
|
|
||||||
|
|
||||||
x86seg gdt, ldt, idt, tr;
|
|
||||||
|
|
||||||
uint32_t cr2, cr3, cr4;
|
|
||||||
uint32_t dr[8];
|
|
||||||
|
|
||||||
uint16_t sysenter_cs;
|
|
||||||
uint32_t sysenter_eip, sysenter_esp;
|
|
||||||
|
|
||||||
uint32_t use32;
|
|
||||||
int stack32;
|
|
||||||
int optype;
|
|
||||||
|
|
||||||
int trap;
|
|
||||||
|
|
||||||
uint32_t rmdat;
|
|
||||||
|
|
||||||
uint32_t *eal_r, *eal_w;
|
|
||||||
|
|
||||||
int nmi_enable = 1;
|
|
||||||
|
|
||||||
int cpl_override=0;
|
|
||||||
|
|
||||||
int fpucount=0;
|
|
||||||
|
|
||||||
uint16_t cpu_cur_status = 0;
|
|
||||||
|
|
||||||
uint32_t pccache;
|
|
||||||
uint8_t *pccache2;
|
|
||||||
|
|
||||||
void x86_int(int num)
|
|
||||||
{
|
|
||||||
uint32_t addr;
|
|
||||||
// pclog("x86_int %02x %04x:%04x\n", num, CS,pc);
|
|
||||||
flags_rebuild();
|
|
||||||
cpu_state.pc=cpu_state.oldpc;
|
|
||||||
if (msw&1)
|
|
||||||
{
|
|
||||||
pmodeint(num,0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
addr = (num << 2) + idt.base;
|
|
||||||
|
|
||||||
if ((num << 2) + 3 > idt.limit)
|
|
||||||
{
|
|
||||||
if (idt.limit < 35)
|
|
||||||
{
|
|
||||||
cpu_state.abrt = 0;
|
|
||||||
softresetx86();
|
|
||||||
cpu_set_edx();
|
|
||||||
pclog("Triple fault in real mode - reset\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
x86_int(8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (stack32)
|
|
||||||
{
|
|
||||||
writememw(ss,ESP-2,cpu_state.flags);
|
|
||||||
writememw(ss,ESP-4,CS);
|
|
||||||
writememw(ss,ESP-6,cpu_state.pc);
|
|
||||||
ESP-=6;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writememw(ss,((SP-2)&0xFFFF),cpu_state.flags);
|
|
||||||
writememw(ss,((SP-4)&0xFFFF),CS);
|
|
||||||
writememw(ss,((SP-6)&0xFFFF),cpu_state.pc);
|
|
||||||
SP-=6;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu_state.flags &= ~I_FLAG;
|
|
||||||
cpu_state.flags &= ~T_FLAG;
|
|
||||||
cpu_state.pc=readmemw(0,addr);
|
|
||||||
loadcs(readmemw(0,addr+2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cycles-=70;
|
|
||||||
CPU_BLOCK_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
void x86_int_sw(int num)
|
|
||||||
{
|
|
||||||
uint32_t addr;
|
|
||||||
// pclog("x86_int_sw %02x %04x:%04x\n", num, CS,pc);
|
|
||||||
// pclog("x86_int\n");
|
|
||||||
flags_rebuild();
|
|
||||||
cycles -= timing_int;
|
|
||||||
if (msw&1)
|
|
||||||
{
|
|
||||||
pmodeint(num,1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
addr = (num << 2) + idt.base;
|
|
||||||
|
|
||||||
if ((num << 2) + 3 > idt.limit)
|
|
||||||
{
|
|
||||||
x86_int(13);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (stack32)
|
|
||||||
{
|
|
||||||
writememw(ss,ESP-2,cpu_state.flags);
|
|
||||||
writememw(ss,ESP-4,CS);
|
|
||||||
writememw(ss,ESP-6,cpu_state.pc);
|
|
||||||
ESP-=6;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
writememw(ss,((SP-2)&0xFFFF),cpu_state.flags);
|
|
||||||
writememw(ss,((SP-4)&0xFFFF),CS);
|
|
||||||
writememw(ss,((SP-6)&0xFFFF),cpu_state.pc);
|
|
||||||
SP-=6;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu_state.flags &= ~I_FLAG;
|
|
||||||
cpu_state.flags &= ~T_FLAG;
|
|
||||||
cpu_state.pc=readmemw(0,addr);
|
|
||||||
loadcs(readmemw(0,addr+2));
|
|
||||||
cycles -= timing_int_rm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trap = 0;
|
|
||||||
CPU_BLOCK_END();
|
|
||||||
}
|
|
||||||
|
|
||||||
int x86_int_sw_rm(int num)
|
|
||||||
{
|
|
||||||
uint32_t addr;
|
|
||||||
uint16_t new_pc, new_cs;
|
|
||||||
|
|
||||||
flags_rebuild();
|
|
||||||
cycles -= timing_int;
|
|
||||||
|
|
||||||
addr = num << 2;
|
|
||||||
new_pc = readmemw(0, addr);
|
|
||||||
new_cs = readmemw(0, addr + 2);
|
|
||||||
|
|
||||||
if (cpu_state.abrt) return 1;
|
|
||||||
|
|
||||||
writememw(ss,((SP-2)&0xFFFF),cpu_state.flags); if (cpu_state.abrt) {pclog("abrt5\n"); return 1; }
|
|
||||||
writememw(ss,((SP-4)&0xFFFF),CS);
|
|
||||||
writememw(ss,((SP-6)&0xFFFF),cpu_state.pc); if (cpu_state.abrt) {pclog("abrt6\n"); return 1; }
|
|
||||||
SP-=6;
|
|
||||||
|
|
||||||
cpu_state.eflags &= ~VIF_FLAG;
|
|
||||||
cpu_state.flags &= ~T_FLAG;
|
|
||||||
cpu_state.pc = new_pc;
|
|
||||||
loadcs(new_cs);
|
|
||||||
|
|
||||||
cycles -= timing_int_rm;
|
|
||||||
trap = 0;
|
|
||||||
CPU_BLOCK_END();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void x86illegal()
|
|
||||||
{
|
|
||||||
// pclog("x86 illegal %04X %08X %04X:%08X %02X\n",msw,cr0,CS,pc,opcode);
|
|
||||||
|
|
||||||
// if (output)
|
|
||||||
// {
|
|
||||||
// dumpregs();
|
|
||||||
// exit(-1);
|
|
||||||
// }
|
|
||||||
x86_int(6);
|
|
||||||
}
|
|
||||||
|
|
||||||
int checkio(int port)
|
|
||||||
{
|
|
||||||
uint16_t t;
|
|
||||||
uint8_t d;
|
|
||||||
cpl_override = 1;
|
|
||||||
t = readmemw(tr.base, 0x66);
|
|
||||||
cpl_override = 0;
|
|
||||||
// pclog("CheckIO 1 %08X %04x %02x\n",tr.base, eflags, _cs.access);
|
|
||||||
if (cpu_state.abrt) return 0;
|
|
||||||
// pclog("CheckIO %04X %01X %01X %02X %04X %04X %08X ",CS,CPL,IOPL,port,t,t+(port>>3),tr.base+t+(port>>3));
|
|
||||||
if ((t+(port>>3))>tr.limit) return 1;
|
|
||||||
cpl_override = 1;
|
|
||||||
d = readmembl(tr.base + t + (port >> 3));
|
|
||||||
// d=readmemb(tr.base,t+(port>>3));
|
|
||||||
cpl_override = 0;
|
|
||||||
// pclog("%02X %02X\n",d,d&(1<<(port&7)));
|
|
||||||
return d&(1<<(port&7));
|
|
||||||
}
|
|
||||||
|
|
||||||
#define divexcp() { \
|
|
||||||
pclog("Divide exception at %04X(%06X):%04X\n",CS,cs,cpu_state.pc); \
|
|
||||||
x86_int(0); \
|
|
||||||
}
|
|
||||||
|
|
||||||
int divl(uint32_t val)
|
|
||||||
{
|
|
||||||
if (val==0)
|
|
||||||
{
|
|
||||||
divexcp();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
uint64_t num=(((uint64_t)EDX)<<32)|EAX;
|
|
||||||
uint64_t quo=num/val;
|
|
||||||
uint32_t rem=num%val;
|
|
||||||
uint32_t quo32=(uint32_t)(quo&0xFFFFFFFF);
|
|
||||||
if (quo!=(uint64_t)quo32)
|
|
||||||
{
|
|
||||||
divexcp();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
EDX=rem;
|
|
||||||
EAX=quo32;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
int idivl(int32_t val)
|
|
||||||
{
|
|
||||||
if (val==0)
|
|
||||||
{
|
|
||||||
divexcp();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
int64_t num=(((uint64_t)EDX)<<32)|EAX;
|
|
||||||
int64_t quo=num/val;
|
|
||||||
int32_t rem=num%val;
|
|
||||||
int32_t quo32=(int32_t)(quo&0xFFFFFFFF);
|
|
||||||
if (quo!=(int64_t)quo32)
|
|
||||||
{
|
|
||||||
divexcp();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
EDX=rem;
|
|
||||||
EAX=quo32;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void cpu_386_flags_extract()
|
|
||||||
{
|
|
||||||
flags_extract();
|
|
||||||
}
|
|
||||||
void cpu_386_flags_rebuild()
|
|
||||||
{
|
|
||||||
flags_rebuild();
|
|
||||||
}
|
|
||||||
115
src/386_common.h
115
src/386_common.h
|
|
@ -1,61 +1,51 @@
|
||||||
#ifndef _386_COMMON_H_
|
extern uint16_t ea_rseg;
|
||||||
#define _386_COMMON_H_
|
|
||||||
|
|
||||||
#define readmemb(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1)?readmembl((s)+(a)): *(uint8_t *)(readlookup2[(uint32_t)((s)+(a))>>12] + (uint32_t)((s) + (a))) )
|
#undef readmemb
|
||||||
#define readmemw(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 1))?readmemwl((s)+(a)):*(uint16_t *)(readlookup2[(uint32_t)((s)+(a))>>12]+(uint32_t)((s)+(a))))
|
#undef writememb
|
||||||
#define readmeml(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 3))?readmemll((s)+(a)):*(uint32_t *)(readlookup2[(uint32_t)((s)+(a))>>12]+(uint32_t)((s)+(a))))
|
|
||||||
#define readmemq(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 7))?readmemql((s)+(a)):*(uint64_t *)(readlookup2[(uint32_t)((s)+(a))>>12]+(uint32_t)((s)+(a))))
|
|
||||||
|
|
||||||
#define writememb(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1) writemembl((s)+(a),v); else *(uint8_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
|
||||||
#define writememw(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 1)) writememwl((s)+(a),v); else *(uint16_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
#define readmemb(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF)?readmemb386l(s,a): *(uint8_t *)(readlookup2[(uint32_t)((s)+(a))>>12] + (uint32_t)((s) + (a))) )
|
||||||
#define writememl(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 3)) writememll((s)+(a),v); else *(uint32_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
#define readmemq(s,a) ((readlookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFF8)?readmemql(s,a):*(uint64_t *)(readlookup2[(uint32_t)((s)+(a))>>12]+(uint32_t)((s)+(a))))
|
||||||
#define writememq(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (((s)+(a)) & 7)) writememql((s)+(a),v); else *(uint64_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
|
||||||
|
#define writememb(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF) writememb386l(s,a,v); else *(uint8_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
||||||
|
|
||||||
|
#define writememw(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFE) writememwl(s,a,v); else *(uint16_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
||||||
|
#define writememl(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFFC) writememll(s,a,v); else *(uint32_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
||||||
|
#define writememq(s,a,v) if (writelookup2[(uint32_t)((s)+(a))>>12]==-1 || (s)==0xFFFFFFFF || (((s)+(a))&0xFFF)>0xFF8) writememql(s,a,v); else *(uint64_t *)(writelookup2[(uint32_t)((s) + (a)) >> 12] + (uint32_t)((s) + (a))) = v
|
||||||
|
|
||||||
int checkio(int port);
|
int checkio(int port);
|
||||||
|
|
||||||
#define check_io_perm(port) if (!IOPLp || (cpu_state.eflags&VM_FLAG)) \
|
#define check_io_perm(port) if (!IOPLp || (eflags&VM_FLAG)) \
|
||||||
{ \
|
{ \
|
||||||
int tempi = checkio(port); \
|
int tempi = checkio(port); \
|
||||||
if (cpu_state.abrt) return 1; \
|
if (cpu_state.abrt) return 1; \
|
||||||
if (tempi) \
|
if (tempi) \
|
||||||
{ \
|
{ \
|
||||||
if (cpu_state.eflags & VM_FLAG) \
|
x86gpf(NULL,0); \
|
||||||
x86gpf_expected(NULL,0); \
|
|
||||||
else \
|
|
||||||
x86gpf(NULL,0); \
|
|
||||||
return 1; \
|
return 1; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SEG_CHECK_READ(seg) \
|
#define checkio_perm(port) if (!IOPLp || (eflags&VM_FLAG)) \
|
||||||
do \
|
{ \
|
||||||
{ \
|
tempi = checkio(port); \
|
||||||
if ((seg)->base == 0xffffffff) \
|
if (cpu_state.abrt) break; \
|
||||||
{ \
|
if (tempi) \
|
||||||
x86gpf("Segment can't read", 0);\
|
{ \
|
||||||
return 1; \
|
x86gpf(NULL,0); \
|
||||||
} \
|
break; \
|
||||||
} while (0)
|
} \
|
||||||
|
}
|
||||||
#define SEG_CHECK_WRITE(seg) \
|
|
||||||
do \
|
|
||||||
{ \
|
|
||||||
if ((seg)->base == 0xffffffff) \
|
|
||||||
{ \
|
|
||||||
x86gpf("Segment can't write", 0);\
|
|
||||||
return 1; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define CHECK_READ(seg, low, high) \
|
#define CHECK_READ(seg, low, high) \
|
||||||
if ((low < (seg)->limit_low) || (high > (seg)->limit_high) || ((msw & 1) && !(cpu_state.eflags & VM_FLAG) && (((seg)->access & 10) == 8))) \
|
if ((low < (seg)->limit_low) || (high > (seg)->limit_high)) \
|
||||||
{ \
|
{ \
|
||||||
x86gpf("Limit check", 0); \
|
x86gpf("Limit check", 0); \
|
||||||
return 1; \
|
return 1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CHECK_WRITE(seg, low, high) \
|
#define CHECK_WRITE(seg, low, high) \
|
||||||
if ((low < (seg)->limit_low) || (high > (seg)->limit_high) || !((seg)->access & 2) || ((msw & 1) && !(cpu_state.eflags & VM_FLAG) && ((seg)->access & 8))) \
|
if ((low < (seg)->limit_low) || (high > (seg)->limit_high) || !((seg)->access & 2)) \
|
||||||
{ \
|
{ \
|
||||||
x86gpf("Limit check", 0); \
|
x86gpf("Limit check", 0); \
|
||||||
return 1; \
|
return 1; \
|
||||||
|
|
@ -69,7 +59,7 @@ int checkio(int port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define NOTRM if (!(msw & 1) || (cpu_state.eflags & VM_FLAG))\
|
#define NOTRM if (!(msw & 1) || (eflags & VM_FLAG))\
|
||||||
{ \
|
{ \
|
||||||
x86_int(6); \
|
x86_int(6); \
|
||||||
return 1; \
|
return 1; \
|
||||||
|
|
@ -98,8 +88,8 @@ static inline uint16_t fastreadw(uint32_t a)
|
||||||
uint16_t val;
|
uint16_t val;
|
||||||
if ((a&0xFFF)>0xFFE)
|
if ((a&0xFFF)>0xFFE)
|
||||||
{
|
{
|
||||||
val = fastreadb(a);
|
val = readmemb(0, a);
|
||||||
val |= (fastreadb(a + 1) << 8);
|
val |= (readmemb(0, a + 1) << 8);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
if ((a>>12)==pccache) return *((uint16_t *)&pccache2[a]);
|
if ((a>>12)==pccache) return *((uint16_t *)&pccache2[a]);
|
||||||
|
|
@ -129,22 +119,13 @@ static inline uint32_t fastreadl(uint32_t a)
|
||||||
}
|
}
|
||||||
return *((uint32_t *)&pccache2[a]);
|
return *((uint32_t *)&pccache2[a]);
|
||||||
}
|
}
|
||||||
val = fastreadw(a);
|
val =readmemb(0,a);
|
||||||
val |= (fastreadw(a + 2) << 16);
|
val |=(readmemb(0,a+1)<<8);
|
||||||
|
val |=(readmemb(0,a+2)<<16);
|
||||||
|
val |=(readmemb(0,a+3)<<24);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *get_ram_ptr(uint32_t a)
|
|
||||||
{
|
|
||||||
if ((a >> 12) == pccache)
|
|
||||||
return &pccache2[a];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
uint8_t *t = getpccache(a);
|
|
||||||
return &t[a];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint8_t getbyte()
|
static inline uint8_t getbyte()
|
||||||
{
|
{
|
||||||
cpu_state.pc++;
|
cpu_state.pc++;
|
||||||
|
|
@ -177,30 +158,32 @@ static inline uint8_t geteab()
|
||||||
return (cpu_rm & 4) ? cpu_state.regs[cpu_rm & 3].b.h : cpu_state.regs[cpu_rm&3].b.l;
|
return (cpu_rm & 4) ? cpu_state.regs[cpu_rm & 3].b.h : cpu_state.regs[cpu_rm&3].b.l;
|
||||||
if (eal_r)
|
if (eal_r)
|
||||||
return *(uint8_t *)eal_r;
|
return *(uint8_t *)eal_r;
|
||||||
return readmemb(easeg,cpu_state.eaaddr);
|
return readmemb(easeg, cpu_state.eaaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t geteaw()
|
static inline uint16_t geteaw()
|
||||||
{
|
{
|
||||||
if (cpu_mod == 3)
|
if (cpu_mod == 3)
|
||||||
return cpu_state.regs[cpu_rm].w;
|
return cpu_state.regs[cpu_rm].w;
|
||||||
|
// cycles-=3;
|
||||||
if (eal_r)
|
if (eal_r)
|
||||||
return *(uint16_t *)eal_r;
|
return *(uint16_t *)eal_r;
|
||||||
return readmemw(easeg,cpu_state.eaaddr);
|
return readmemw(easeg, cpu_state.eaaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t geteal()
|
static inline uint32_t geteal()
|
||||||
{
|
{
|
||||||
if (cpu_mod == 3)
|
if (cpu_mod == 3)
|
||||||
return cpu_state.regs[cpu_rm].l;
|
return cpu_state.regs[cpu_rm].l;
|
||||||
|
// cycles-=3;
|
||||||
if (eal_r)
|
if (eal_r)
|
||||||
return *eal_r;
|
return *eal_r;
|
||||||
return readmeml(easeg,cpu_state.eaaddr);
|
return readmeml(easeg, cpu_state.eaaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64_t geteaq()
|
static inline uint64_t geteaq()
|
||||||
{
|
{
|
||||||
return readmemq(easeg,cpu_state.eaaddr);
|
return readmemq(easeg, cpu_state.eaaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint8_t geteab_mem()
|
static inline uint8_t geteab_mem()
|
||||||
|
|
@ -221,20 +204,24 @@ static inline uint32_t geteal_mem()
|
||||||
|
|
||||||
static inline void seteaq(uint64_t v)
|
static inline void seteaq(uint64_t v)
|
||||||
{
|
{
|
||||||
writememql(easeg+cpu_state.eaaddr, v);
|
writememql(easeg, cpu_state.eaaddr, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define seteab(v) if (cpu_mod!=3) { if (eal_w) *(uint8_t *)eal_w=v; else writemembl(easeg+cpu_state.eaaddr,v); } else if (cpu_rm&4) cpu_state.regs[cpu_rm&3].b.h=v; else cpu_state.regs[cpu_rm].b.l=v
|
#define seteab(v) if (cpu_mod!=3) { if (eal_w) *(uint8_t *)eal_w=v; else writememb386l(easeg,cpu_state.eaaddr,v); } else if (cpu_rm&4) cpu_state.regs[cpu_rm&3].b.h=v; else cpu_state.regs[cpu_rm].b.l=v
|
||||||
#define seteaw(v) if (cpu_mod!=3) { if (eal_w) *(uint16_t *)eal_w=v; else writememwl(easeg+cpu_state.eaaddr,v); } else cpu_state.regs[cpu_rm].w=v
|
#define seteaw(v) if (cpu_mod!=3) { if (eal_w) *(uint16_t *)eal_w=v; else writememwl(easeg,cpu_state.eaaddr,v); } else cpu_state.regs[cpu_rm].w=v
|
||||||
#define seteal(v) if (cpu_mod!=3) { if (eal_w) *eal_w=v; else writememll(easeg+cpu_state.eaaddr,v); } else cpu_state.regs[cpu_rm].l=v
|
#define seteal(v) if (cpu_mod!=3) { if (eal_w) *eal_w=v; else writememll(easeg,cpu_state.eaaddr,v); } else cpu_state.regs[cpu_rm].l=v
|
||||||
|
|
||||||
#define seteab_mem(v) if (eal_w) *(uint8_t *)eal_w=v; else writemembl(easeg+cpu_state.eaaddr,v);
|
#define seteab_mem(v) if (eal_w) *(uint8_t *)eal_w=v; else writememb386l(easeg,cpu_state.eaaddr,v);
|
||||||
#define seteaw_mem(v) if (eal_w) *(uint16_t *)eal_w=v; else writememwl(easeg+cpu_state.eaaddr,v);
|
#define seteaw_mem(v) if (eal_w) *(uint16_t *)eal_w=v; else writememwl(easeg,cpu_state.eaaddr,v);
|
||||||
#define seteal_mem(v) if (eal_w) *eal_w=v; else writememll(easeg+cpu_state.eaaddr,v);
|
#define seteal_mem(v) if (eal_w) *eal_w=v; else writememll(easeg,cpu_state.eaaddr,v);
|
||||||
|
|
||||||
#define getbytef() ((uint8_t)(fetchdat)); cpu_state.pc++
|
#define getbytef() ((uint8_t)(fetchdat)); cpu_state.pc++
|
||||||
#define getwordf() ((uint16_t)(fetchdat)); cpu_state.pc+=2
|
#define getwordf() ((uint16_t)(fetchdat)); cpu_state.pc+=2
|
||||||
#define getbyte2f() ((uint8_t)(fetchdat>>8)); cpu_state.pc++
|
#define getbyte2f() ((uint8_t)(fetchdat>>8)); cpu_state.pc++
|
||||||
#define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2
|
#define getword2f() ((uint16_t)(fetchdat>>8)); cpu_state.pc+=2
|
||||||
|
|
||||||
#endif
|
|
||||||
|
#define rmdat rmdat32
|
||||||
|
#define fetchdat rmdat32
|
||||||
|
|
||||||
|
void x86_int(int num);
|
||||||
|
|
|
||||||
1882
src/386_dynarec.c
1882
src/386_dynarec.c
File diff suppressed because it is too large
Load diff
|
|
@ -1,11 +1,11 @@
|
||||||
#include "ibm.h"
|
#include "ibm.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
#include "386.h"
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
#include "x86_ops.h"
|
#include "x86_ops.h"
|
||||||
#include "x87.h"
|
#include "x87.h"
|
||||||
#include "x86_flags.h"
|
#include "x86_flags.h"
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
#include "nmi.h"
|
|
||||||
#include "pic.h"
|
#include "pic.h"
|
||||||
#include "codegen.h"
|
#include "codegen.h"
|
||||||
|
|
||||||
|
|
@ -14,10 +14,14 @@
|
||||||
#include "386_common.h"
|
#include "386_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern uint16_t *mod1add[2][8];
|
||||||
|
extern uint32_t *mod1seg[8];
|
||||||
|
|
||||||
static inline void fetch_ea_32_long(uint32_t rmdat)
|
static inline void fetch_ea_32_long(uint32_t rmdat)
|
||||||
{
|
{
|
||||||
eal_r = eal_w = NULL;
|
eal_r = eal_w = NULL;
|
||||||
easeg = cpu_state.ea_seg->base;
|
easeg = cpu_state.ea_seg->base;
|
||||||
|
ea_rseg = cpu_state.ea_seg->seg;
|
||||||
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC)
|
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC)
|
||||||
{
|
{
|
||||||
uint32_t addr = easeg + cpu_state.eaaddr;
|
uint32_t addr = easeg + cpu_state.eaaddr;
|
||||||
|
|
@ -32,6 +36,7 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
{
|
{
|
||||||
eal_r = eal_w = NULL;
|
eal_r = eal_w = NULL;
|
||||||
easeg = cpu_state.ea_seg->base;
|
easeg = cpu_state.ea_seg->base;
|
||||||
|
ea_rseg = cpu_state.ea_seg->seg;
|
||||||
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC)
|
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC)
|
||||||
{
|
{
|
||||||
uint32_t addr = easeg + cpu_state.eaaddr;
|
uint32_t addr = easeg + cpu_state.eaaddr;
|
||||||
|
|
@ -51,7 +56,6 @@ static inline void fetch_ea_16_long(uint32_t rmdat)
|
||||||
#define PREFETCH_FLUSH()
|
#define PREFETCH_FLUSH()
|
||||||
|
|
||||||
#define OP_TABLE(name) dynarec_ops_ ## name
|
#define OP_TABLE(name) dynarec_ops_ ## name
|
||||||
/*Temporary*/
|
|
||||||
#define CLOCK_CYCLES(c)
|
#define CLOCK_CYCLES(c)
|
||||||
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
||||||
|
|
||||||
|
|
|
||||||
636
src/386_ops.h
636
src/386_ops.h
|
|
@ -104,22 +104,12 @@ static inline uint32_t POP_L_seg(uint32_t seg)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ILLEGAL(uint32_t fetchdat)
|
|
||||||
{
|
|
||||||
cpu_state.pc = cpu_state.oldpc;
|
|
||||||
|
|
||||||
// fatal("Illegal instruction %08X\n", fetchdat);
|
|
||||||
x86illegal();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "x86_ops_arith.h"
|
#include "x86_ops_arith.h"
|
||||||
#include "x86_ops_atomic.h"
|
#include "x86_ops_atomic.h"
|
||||||
#include "x86_ops_bcd.h"
|
#include "x86_ops_bcd.h"
|
||||||
#include "x86_ops_bit.h"
|
#include "x86_ops_bit.h"
|
||||||
#include "x86_ops_bitscan.h"
|
#include "x86_ops_bitscan.h"
|
||||||
#include "x86_ops_call.h"
|
#include "x86_ops_call.h"
|
||||||
#include "x86_ops_cyrix.h"
|
|
||||||
#include "x86_ops_flag.h"
|
#include "x86_ops_flag.h"
|
||||||
#include "x86_ops_fpu.h"
|
#include "x86_ops_fpu.h"
|
||||||
#include "x86_ops_inc_dec.h"
|
#include "x86_ops_inc_dec.h"
|
||||||
|
|
@ -128,7 +118,6 @@ static int ILLEGAL(uint32_t fetchdat)
|
||||||
#include "x86_ops_jump.h"
|
#include "x86_ops_jump.h"
|
||||||
#include "x86_ops_misc.h"
|
#include "x86_ops_misc.h"
|
||||||
#include "x86_ops_mmx.h"
|
#include "x86_ops_mmx.h"
|
||||||
#include "x86_ops_3dnow.h"
|
|
||||||
#include "x86_ops_mmx_arith.h"
|
#include "x86_ops_mmx_arith.h"
|
||||||
#include "x86_ops_mmx_cmp.h"
|
#include "x86_ops_mmx_cmp.h"
|
||||||
#include "x86_ops_mmx_logic.h"
|
#include "x86_ops_mmx_logic.h"
|
||||||
|
|
@ -151,6 +140,15 @@ static int ILLEGAL(uint32_t fetchdat)
|
||||||
#include "x86_ops_string.h"
|
#include "x86_ops_string.h"
|
||||||
#include "x86_ops_xchg.h"
|
#include "x86_ops_xchg.h"
|
||||||
|
|
||||||
|
static int ILLEGAL(uint32_t fetchdat)
|
||||||
|
{
|
||||||
|
cpu_state.pc = cpu_state.oldpc;
|
||||||
|
|
||||||
|
// fatal("Illegal instruction %08X\n", fetchdat);
|
||||||
|
x86illegal();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int op0F_w_a16(uint32_t fetchdat)
|
static int op0F_w_a16(uint32_t fetchdat)
|
||||||
{
|
{
|
||||||
int opcode = fetchdat & 0xff;
|
int opcode = fetchdat & 0xff;
|
||||||
|
|
@ -281,7 +279,7 @@ OpFn OP_TABLE(386_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -303,7 +301,7 @@ OpFn OP_TABLE(386_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -325,7 +323,7 @@ OpFn OP_TABLE(386_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -347,7 +345,7 @@ OpFn OP_TABLE(386_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, opLOADALL386, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -372,7 +370,7 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -382,10 +380,10 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
||||||
|
|
@ -394,7 +392,7 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -404,10 +402,10 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
||||||
|
|
@ -416,7 +414,7 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -426,10 +424,10 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
||||||
|
|
@ -438,7 +436,7 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -448,101 +446,10 @@ OpFn OP_TABLE(winchip_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
|
||||||
};
|
|
||||||
|
|
||||||
OpFn OP_TABLE(winchip2_0f)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, opPREFETCH_a16, opFEMMS, op3DNOW_a16,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a16,opPUNPCKLWD_a16,opPUNPCKLDQ_a16,opPACKSSWB_a16, opPCMPGTB_a16, opPCMPGTW_a16, opPCMPGTD_a16, opPACKUSWB_a16, opPUNPCKHBW_a16,opPUNPCKHWD_a16,opPUNPCKHDQ_a16,opPACKSSDW_a16, ILLEGAL, ILLEGAL, opMOVD_l_mm_a16,opMOVQ_q_mm_a16,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a16, opPCMPEQW_a16, opPCMPEQD_a16, opEMMS, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opMOVD_mm_l_a16,opMOVQ_mm_q_a16,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, opPREFETCH_a16, opFEMMS, op3DNOW_a16,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a16,opPUNPCKLWD_a16,opPUNPCKLDQ_a16,opPACKSSWB_a16, opPCMPGTB_a16, opPCMPGTW_a16, opPCMPGTD_a16, opPACKUSWB_a16, opPUNPCKHBW_a16,opPUNPCKHWD_a16,opPUNPCKHDQ_a16,opPACKSSDW_a16, ILLEGAL, ILLEGAL, opMOVD_l_mm_a16,opMOVQ_q_mm_a16,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a16, opPCMPEQW_a16, opPCMPEQD_a16, opEMMS, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opMOVD_mm_l_a16,opMOVQ_mm_q_a16,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, opPREFETCH_a32, opFEMMS, op3DNOW_a32,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a32,opPUNPCKLWD_a32,opPUNPCKLDQ_a32,opPACKSSWB_a32, opPCMPGTB_a32, opPCMPGTW_a32, opPCMPGTD_a32, opPACKUSWB_a32, opPUNPCKHBW_a32,opPUNPCKHWD_a32,opPUNPCKHDQ_a32,opPACKSSDW_a32, ILLEGAL, ILLEGAL, opMOVD_l_mm_a32,opMOVQ_q_mm_a32,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a32, opPCMPEQW_a32, opPCMPEQD_a32, opEMMS, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opMOVD_mm_l_a32,opMOVQ_mm_q_a32,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, opPREFETCH_a32, opFEMMS, op3DNOW_a32,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a32,opPUNPCKLWD_a32,opPUNPCKLDQ_a32,opPACKSSWB_a32, opPCMPGTB_a32, opPCMPGTW_a32, opPCMPGTD_a32, opPACKUSWB_a32, opPUNPCKHBW_a32,opPUNPCKHWD_a32,opPUNPCKHDQ_a32,opPACKSSDW_a32, ILLEGAL, ILLEGAL, opMOVD_l_mm_a32,opMOVQ_q_mm_a32,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a32, opPCMPEQW_a32, opPCMPEQD_a32, opEMMS, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opMOVD_mm_l_a32,opMOVQ_mm_q_a32,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
||||||
|
|
@ -564,7 +471,7 @@ OpFn OP_TABLE(pentium_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -586,7 +493,7 @@ OpFn OP_TABLE(pentium_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -608,7 +515,7 @@ OpFn OP_TABLE(pentium_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -630,98 +537,7 @@ OpFn OP_TABLE(pentium_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
};
|
|
||||||
|
|
||||||
OpFn OP_TABLE(c6x86_0f)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opSVDC_a16, opRSDC_a16, opSVLDT_a16, opRSLDT_a16, opSVTS_a16, opRSTS_a16, opSMINT, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opSVDC_a16, opRSDC_a16, opSVLDT_a16, opRSLDT_a16, opSVTS_a16, opRSTS_a16, opSMINT, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opSVDC_a32, opRSDC_a32, opSVLDT_a32, opRSLDT_a32, opSVTS_a32, opRSTS_a32, opSMINT, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opSVDC_a32, opRSDC_a32, opSVLDT_a32, opRSLDT_a32, opSVTS_a32, opRSTS_a32, opSMINT, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -746,7 +562,7 @@ OpFn OP_TABLE(pentiummmx_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -768,7 +584,7 @@ OpFn OP_TABLE(pentiummmx_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -790,7 +606,7 @@ OpFn OP_TABLE(pentiummmx_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -812,7 +628,7 @@ OpFn OP_TABLE(pentiummmx_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -828,189 +644,7 @@ OpFn OP_TABLE(c6x86mx_0f)[1024] =
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, opRDSHR_a16, opWRSHR_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a16, opCMOVNO_w_a16, opCMOVB_w_a16, opCMOVNB_w_a16, opCMOVE_w_a16, opCMOVNE_w_a16, opCMOVBE_w_a16, opCMOVNBE_w_a16,opCMOVS_w_a16, opCMOVNS_w_a16, opCMOVP_w_a16, opCMOVNP_w_a16, opCMOVL_w_a16, opCMOVNL_w_a16, opCMOVLE_w_a16, opCMOVNLE_w_a16,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a16,opPUNPCKLWD_a16,opPUNPCKLDQ_a16,opPACKSSWB_a16, opPCMPGTB_a16, opPCMPGTW_a16, opPCMPGTD_a16, opPACKUSWB_a16, opPUNPCKHBW_a16,opPUNPCKHWD_a16,opPUNPCKHDQ_a16,opPACKSSDW_a16, ILLEGAL, ILLEGAL, opMOVD_l_mm_a16,opMOVQ_q_mm_a16,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a16, opPCMPEQW_a16, opPCMPEQD_a16, opEMMS, opSVDC_a16, opRSDC_a16, opSVLDT_a16, opRSLDT_a16, opSVTS_a16, opRSTS_a16, opMOVD_mm_l_a16_cx,opMOVQ_mm_q_a16,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, opRDSHR_a16, opWRSHR_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a16, opCMOVNO_l_a16, opCMOVB_l_a16, opCMOVNB_l_a16, opCMOVE_l_a16, opCMOVNE_l_a16, opCMOVBE_l_a16, opCMOVNBE_l_a16,opCMOVS_l_a16, opCMOVNS_l_a16, opCMOVP_l_a16, opCMOVNP_l_a16, opCMOVL_l_a16, opCMOVNL_l_a16, opCMOVLE_l_a16, opCMOVNLE_l_a16,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a16,opPUNPCKLWD_a16,opPUNPCKLDQ_a16,opPACKSSWB_a16, opPCMPGTB_a16, opPCMPGTW_a16, opPCMPGTD_a16, opPACKUSWB_a16, opPUNPCKHBW_a16,opPUNPCKHWD_a16,opPUNPCKHDQ_a16,opPACKSSDW_a16, ILLEGAL, ILLEGAL, opMOVD_l_mm_a16,opMOVQ_q_mm_a16,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a16, opPCMPEQW_a16, opPCMPEQD_a16, opEMMS, opSVDC_a16, opRSDC_a16, opSVLDT_a16, opRSLDT_a16, opSVTS_a16, opRSTS_a16, opMOVD_mm_l_a16_cx,opMOVQ_mm_q_a16,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a16, opPSRLD_a16, opPSRLQ_a16, ILLEGAL, opPMULLW_a16, ILLEGAL, ILLEGAL, opPSUBUSB_a16, opPSUBUSW_a16, NULL, opPAND_a16, opPADDUSB_a16, opPADDUSW_a16, NULL, opPANDN_a16,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a16, opPSRAD_a16, ILLEGAL, ILLEGAL, opPMULHW_a16, ILLEGAL, ILLEGAL, opPSUBSB_a16, opPSUBSW_a16, NULL, opPOR_a16, opPADDSB_a16, opPADDSW_a16, NULL, opPXOR_a16,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a16, opPSLLD_a16, opPSLLQ_a16, ILLEGAL, opPMADDWD_a16, ILLEGAL, ILLEGAL, opPSUBB_a16, opPSUBW_a16, opPSUBD_a16, ILLEGAL, opPADDB_a16, opPADDW_a16, opPADDD_a16, ILLEGAL,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, opRDSHR_a32, opWRSHR_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a32, opCMOVNO_w_a32, opCMOVB_w_a32, opCMOVNB_w_a32, opCMOVE_w_a32, opCMOVNE_w_a32, opCMOVBE_w_a32, opCMOVNBE_w_a32,opCMOVS_w_a32, opCMOVNS_w_a32, opCMOVP_w_a32, opCMOVNP_w_a32, opCMOVL_w_a32, opCMOVNL_w_a32, opCMOVLE_w_a32, opCMOVNLE_w_a32,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a32,opPUNPCKLWD_a32,opPUNPCKLDQ_a32,opPACKSSWB_a32, opPCMPGTB_a32, opPCMPGTW_a32, opPCMPGTD_a32, opPACKUSWB_a32, opPUNPCKHBW_a32,opPUNPCKHWD_a32,opPUNPCKHDQ_a32,opPACKSSDW_a32, ILLEGAL, ILLEGAL, opMOVD_l_mm_a32,opMOVQ_q_mm_a32,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a32, opPCMPEQW_a32, opPCMPEQD_a32, opEMMS, opSVDC_a32, opRSDC_a32, opSVLDT_a32, opRSLDT_a32, opSVTS_a32, opRSTS_a32, opMOVD_mm_l_a32_cx,opMOVQ_mm_q_a32,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, opRDSHR_a32, opWRSHR_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a32, opCMOVNO_l_a32, opCMOVB_l_a32, opCMOVNB_l_a32, opCMOVE_l_a32, opCMOVNE_l_a32, opCMOVBE_l_a32, opCMOVNBE_l_a32,opCMOVS_l_a32, opCMOVNS_l_a32, opCMOVP_l_a32, opCMOVNP_l_a32, opCMOVL_l_a32, opCMOVNL_l_a32, opCMOVLE_l_a32, opCMOVNLE_l_a32,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ opPUNPCKLBW_a32,opPUNPCKLWD_a32,opPUNPCKLDQ_a32,opPACKSSWB_a32, opPCMPGTB_a32, opPCMPGTW_a32, opPCMPGTD_a32, opPACKUSWB_a32, opPUNPCKHBW_a32,opPUNPCKHWD_a32,opPUNPCKHDQ_a32,opPACKSSDW_a32, ILLEGAL, ILLEGAL, opMOVD_l_mm_a32,opMOVQ_q_mm_a32,
|
|
||||||
/*70*/ ILLEGAL, opPSxxW_imm, opPSxxD_imm, opPSxxQ_imm, opPCMPEQB_a32, opPCMPEQW_a32, opPCMPEQD_a32, opEMMS, opSVDC_a16, opRSDC_a16, opSVLDT_a16, opRSLDT_a16, opSVTS_a16, opRSTS_a16, opMOVD_mm_l_a32_cx,opMOVQ_mm_q_a32,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, opPSRLW_a32, opPSRLD_a32, opPSRLQ_a32, ILLEGAL, opPMULLW_a32, ILLEGAL, ILLEGAL, opPSUBUSB_a32, opPSUBUSW_a32, NULL, opPAND_a32, opPADDUSB_a32, opPADDUSW_a32, NULL, opPANDN_a32,
|
|
||||||
/*e0*/ ILLEGAL, opPSRAW_a32, opPSRAD_a32, ILLEGAL, ILLEGAL, opPMULHW_a32, ILLEGAL, ILLEGAL, opPSUBSB_a32, opPSUBSW_a32, NULL, opPOR_a32, opPADDSB_a32, opPADDSW_a32, NULL, opPXOR_a32,
|
|
||||||
/*f0*/ ILLEGAL, opPSLLW_a32, opPSLLD_a32, opPSLLQ_a32, ILLEGAL, opPMADDWD_a32, ILLEGAL, ILLEGAL, opPSUBB_a32, opPSUBW_a32, opPSUBD_a32, ILLEGAL, opPADDB_a32, opPADDW_a32, opPADDD_a32, ILLEGAL,
|
|
||||||
};
|
|
||||||
|
|
||||||
OpFn OP_TABLE(pentiumpro_0f)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a16, opCMOVNO_w_a16, opCMOVB_w_a16, opCMOVNB_w_a16, opCMOVE_w_a16, opCMOVNE_w_a16, opCMOVBE_w_a16, opCMOVNBE_w_a16,opCMOVS_w_a16, opCMOVNS_w_a16, opCMOVP_w_a16, opCMOVNP_w_a16, opCMOVL_w_a16, opCMOVNL_w_a16, opCMOVLE_w_a16, opCMOVNLE_w_a16,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a16, opCMOVNO_l_a16, opCMOVB_l_a16, opCMOVNB_l_a16, opCMOVE_l_a16, opCMOVNE_l_a16, opCMOVBE_l_a16, opCMOVNBE_l_a16,opCMOVS_l_a16, opCMOVNS_l_a16, opCMOVP_l_a16, opCMOVNP_l_a16, opCMOVL_l_a16, opCMOVNL_l_a16, opCMOVLE_l_a16, opCMOVNLE_l_a16,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a32, opCMOVNO_w_a32, opCMOVB_w_a32, opCMOVNB_w_a32, opCMOVE_w_a32, opCMOVNE_w_a32, opCMOVBE_w_a32, opCMOVNBE_w_a32,opCMOVS_w_a32, opCMOVNS_w_a32, opCMOVP_w_a32, opCMOVNP_w_a32, opCMOVL_w_a32, opCMOVNL_w_a32, opCMOVLE_w_a32, opCMOVNLE_w_a32,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32,
|
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, ILLEGAL, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a32, opCMOVNO_l_a32, opCMOVB_l_a32, opCMOVNB_l_a32, opCMOVE_l_a32, opCMOVNE_l_a32, opCMOVBE_l_a32, opCMOVNBE_l_a32,opCMOVS_l_a32, opCMOVNS_l_a32, opCMOVP_l_a32, opCMOVNP_l_a32, opCMOVL_l_a32, opCMOVNL_l_a32, opCMOVLE_l_a32, opCMOVNLE_l_a32,
|
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*60*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*70*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
|
||||||
/*d0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*e0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*f0*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
};
|
|
||||||
|
|
||||||
OpFn OP_TABLE(pentium2_0f)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ op0F00_a16, op0F01_w_a16, opLAR_w_a16, opLSL_w_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16,
|
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a16, opCMOVNO_w_a16, opCMOVB_w_a16, opCMOVNB_w_a16, opCMOVE_w_a16, opCMOVNE_w_a16, opCMOVBE_w_a16, opCMOVNBE_w_a16,opCMOVS_w_a16, opCMOVNS_w_a16, opCMOVP_w_a16, opCMOVNP_w_a16, opCMOVL_w_a16, opCMOVNL_w_a16, opCMOVLE_w_a16, opCMOVNLE_w_a16,
|
/*40*/ opCMOVO_w_a16, opCMOVNO_w_a16, opCMOVB_w_a16, opCMOVNB_w_a16, opCMOVE_w_a16, opCMOVNE_w_a16, opCMOVBE_w_a16, opCMOVNBE_w_a16,opCMOVS_w_a16, opCMOVNS_w_a16, opCMOVP_w_a16, opCMOVNP_w_a16, opCMOVL_w_a16, opCMOVNL_w_a16, opCMOVLE_w_a16, opCMOVNLE_w_a16,
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -1019,7 +653,7 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a16, opSHLD_w_i_a16, opSHLD_w_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a16, opSHRD_w_i_a16, opSHRD_w_CL_a16,ILLEGAL, opIMUL_w_w_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_w_a16,opLSS_w_a16, opBTR_w_r_a16, opLFS_w_a16, opLGS_w_a16, opMOVZX_w_b_a16,opMOVZX_w_w_a16,ILLEGAL, ILLEGAL, opBA_w_a16, opBTC_w_r_a16, opBSF_w_a16, opBSR_w_a16, opMOVSX_w_b_a16,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_w_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -1030,9 +664,9 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
/*32-bit data, 16-bit addr*/
|
/*32-bit data, 16-bit addr*/
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a16, op0F01_l_a16, opLAR_l_a16, opLSL_l_a16, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16, opHINTNOP_a16,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a16,opMOV_r_DRx_a16,opMOV_CRx_r_a16,opMOV_DRx_r_a16,opMOV_r_TRx_a16,ILLEGAL, opMOV_TRx_r_a16,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a16, opCMOVNO_l_a16, opCMOVB_l_a16, opCMOVNB_l_a16, opCMOVE_l_a16, opCMOVNE_l_a16, opCMOVBE_l_a16, opCMOVNBE_l_a16,opCMOVS_l_a16, opCMOVNS_l_a16, opCMOVP_l_a16, opCMOVNP_l_a16, opCMOVL_l_a16, opCMOVNL_l_a16, opCMOVLE_l_a16, opCMOVNLE_l_a16,
|
/*40*/ opCMOVO_l_a16, opCMOVNO_l_a16, opCMOVB_l_a16, opCMOVNB_l_a16, opCMOVE_l_a16, opCMOVNE_l_a16, opCMOVBE_l_a16, opCMOVNBE_l_a16,opCMOVS_l_a16, opCMOVNS_l_a16, opCMOVP_l_a16, opCMOVNP_l_a16, opCMOVL_l_a16, opCMOVNL_l_a16, opCMOVLE_l_a16, opCMOVNLE_l_a16,
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -1041,7 +675,7 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
/*90*/ opSETO_a16, opSETNO_a16, opSETB_a16, opSETNB_a16, opSETE_a16, opSETNE_a16, opSETBE_a16, opSETNBE_a16, opSETS_a16, opSETNS_a16, opSETP_a16, opSETNP_a16, opSETL_a16, opSETNL_a16, opSETLE_a16, opSETNLE_a16,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a16, opSHLD_l_i_a16, opSHLD_l_CL_a16,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a16, opSHRD_l_i_a16, opSHRD_l_CL_a16,ILLEGAL, opIMUL_l_l_a16,
|
||||||
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
/*b0*/ opCMPXCHG_b_a16,opCMPXCHG_l_a16,opLSS_l_a16, opBTR_l_r_a16, opLFS_l_a16, opLGS_l_a16, opMOVZX_l_b_a16,opMOVZX_l_w_a16,ILLEGAL, ILLEGAL, opBA_l_a16, opBTC_l_r_a16, opBSF_l_a16, opBSR_l_a16, opMOVSX_l_b_a16,opMOVSX_l_w_a16,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a16, opXADD_l_a16, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a16,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -1052,9 +686,9 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
/*16-bit data, 32-bit addr*/
|
/*16-bit data, 32-bit addr*/
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_w_a32, opLAR_w_a32, opLSL_w_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ opCMOVO_w_a32, opCMOVNO_w_a32, opCMOVB_w_a32, opCMOVNB_w_a32, opCMOVE_w_a32, opCMOVNE_w_a32, opCMOVBE_w_a32, opCMOVNBE_w_a32,opCMOVS_w_a32, opCMOVNS_w_a32, opCMOVP_w_a32, opCMOVNP_w_a32, opCMOVL_w_a32, opCMOVNL_w_a32, opCMOVLE_w_a32, opCMOVNLE_w_a32,
|
/*40*/ opCMOVO_w_a32, opCMOVNO_w_a32, opCMOVB_w_a32, opCMOVNB_w_a32, opCMOVE_w_a32, opCMOVNE_w_a32, opCMOVBE_w_a32, opCMOVNBE_w_a32,opCMOVS_w_a32, opCMOVNS_w_a32, opCMOVP_w_a32, opCMOVNP_w_a32, opCMOVL_w_a32, opCMOVNL_w_a32, opCMOVLE_w_a32, opCMOVNLE_w_a32,
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -1063,7 +697,7 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
/*80*/ opJO_w, opJNO_w, opJB_w, opJNB_w, opJE_w, opJNE_w, opJBE_w, opJNBE_w, opJS_w, opJNS_w, opJP_w, opJNP_w, opJL_w, opJNL_w, opJLE_w, opJNLE_w,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, opRSM, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
/*a0*/ opPUSH_FS_w, opPOP_FS_w, opCPUID, opBT_w_r_a32, opSHLD_w_i_a32, opSHLD_w_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_w, opPOP_GS_w, ILLEGAL, opBTS_w_r_a32, opSHRD_w_i_a32, opSHRD_w_CL_a32,ILLEGAL, opIMUL_w_w_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_w_a32,opLSS_w_a32, opBTR_w_r_a32, opLFS_w_a32, opLGS_w_a32, opMOVZX_w_b_a32,opMOVZX_w_w_a32,ILLEGAL, ILLEGAL, opBA_w_a32, opBTC_w_r_a32, opBSF_w_a32, opBSR_w_a32, opMOVSX_w_b_a32,ILLEGAL,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_w_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -1074,9 +708,9 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
/*32-bit data, 32-bit addr*/
|
/*32-bit data, 32-bit addr*/
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
||||||
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*00*/ op0F00_a32, op0F01_l_a32, opLAR_l_a32, opLSL_l_a32, ILLEGAL, ILLEGAL, opCLTS, ILLEGAL, opINVD, opWBINVD, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32, opHINTNOP_a32,
|
/*10*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*20*/ opMOV_r_CRx_a32,opMOV_r_DRx_a32,opMOV_CRx_r_a32,opMOV_DRx_r_a32,opMOV_r_TRx_a32,ILLEGAL, opMOV_TRx_r_a32,ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, opSYSENTER, opSYSEXIT, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*30*/ opWRMSR, opRDTSC, opRDMSR, opRDPMC, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
||||||
/*40*/ opCMOVO_l_a32, opCMOVNO_l_a32, opCMOVB_l_a32, opCMOVNB_l_a32, opCMOVE_l_a32, opCMOVNE_l_a32, opCMOVBE_l_a32, opCMOVNBE_l_a32,opCMOVS_l_a32, opCMOVNS_l_a32, opCMOVP_l_a32, opCMOVNP_l_a32, opCMOVL_l_a32, opCMOVNL_l_a32, opCMOVLE_l_a32, opCMOVNLE_l_a32,
|
/*40*/ opCMOVO_l_a32, opCMOVNO_l_a32, opCMOVB_l_a32, opCMOVNB_l_a32, opCMOVE_l_a32, opCMOVNE_l_a32, opCMOVBE_l_a32, opCMOVNBE_l_a32,opCMOVS_l_a32, opCMOVNS_l_a32, opCMOVP_l_a32, opCMOVNP_l_a32, opCMOVL_l_a32, opCMOVNL_l_a32, opCMOVLE_l_a32, opCMOVNLE_l_a32,
|
||||||
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
/*50*/ ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
|
||||||
|
|
@ -1085,7 +719,7 @@ OpFn OP_TABLE(pentium2_0f)[1024] =
|
||||||
|
|
||||||
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
/*80*/ opJO_l, opJNO_l, opJB_l, opJNB_l, opJE_l, opJNE_l, opJBE_l, opJNBE_l, opJS_l, opJNS_l, opJP_l, opJNP_l, opJL_l, opJNL_l, opJLE_l, opJNLE_l,
|
||||||
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
/*90*/ opSETO_a32, opSETNO_a32, opSETB_a32, opSETNB_a32, opSETE_a32, opSETNE_a32, opSETBE_a32, opSETNBE_a32, opSETS_a32, opSETNS_a32, opSETP_a32, opSETNP_a32, opSETL_a32, opSETNL_a32, opSETLE_a32, opSETNLE_a32,
|
||||||
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, opRSM, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
/*a0*/ opPUSH_FS_l, opPOP_FS_l, opCPUID, opBT_l_r_a32, opSHLD_l_i_a32, opSHLD_l_CL_a32,ILLEGAL, ILLEGAL, opPUSH_GS_l, opPOP_GS_l, ILLEGAL, opBTS_l_r_a32, opSHRD_l_i_a32, opSHRD_l_CL_a32,ILLEGAL, opIMUL_l_l_a32,
|
||||||
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
/*b0*/ opCMPXCHG_b_a32,opCMPXCHG_l_a32,opLSS_l_a32, opBTR_l_r_a32, opLFS_l_a32, opLGS_l_a32, opMOVZX_l_b_a32,opMOVZX_l_w_a32,ILLEGAL, ILLEGAL, opBA_l_a32, opBTC_l_r_a32, opBSF_l_a32, opBSR_l_a32, opMOVSX_l_b_a32,opMOVSX_l_w_a32,
|
||||||
|
|
||||||
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
/*c0*/ opXADD_b_a32, opXADD_l_a32, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, opCMPXCHG8B_a32,opBSWAP_EAX, opBSWAP_ECX, opBSWAP_EDX, opBSWAP_EBX, opBSWAP_ESP, opBSWAP_EBP, opBSWAP_ESI, opBSWAP_EDI,
|
||||||
|
|
@ -1276,186 +910,4 @@ OpFn OP_TABLE(386)[1024] =
|
||||||
/*f0*/ opLOCK, opINT1, opREPNE, opREPE, opHLT, opCMC, opF6_a32, opF7_l_a32, opCLC, opSTC, opCLI, opSTI, opCLD, opSTD, opINCDEC_b_a32, opFF_l_a32,
|
/*f0*/ opLOCK, opINT1, opREPNE, opREPE, opHLT, opCMC, opF6_a32, opF7_l_a32, opCLC, opSTC, opCLI, opSTI, opCLD, opSTD, opINCDEC_b_a32, opFF_l_a32,
|
||||||
};
|
};
|
||||||
|
|
||||||
OpFn OP_TABLE(REPE)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPE_w_a16,0, 0, 0, 0, 0, 0, 0, opCS_REPE_w_a16,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPE_w_a16,0, 0, 0, 0, 0, 0, 0, opDS_REPE_w_a16,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPE_w_a16,opGS_REPE_w_a16,op_66_REPE, op_67_REPE, 0, 0, 0, 0, opREP_INSB_a16, opREP_INSW_a16, opREP_OUTSB_a16,opREP_OUTSW_a16,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a16,opREP_MOVSW_a16,opREP_CMPSB_a16_E,opREP_CMPSW_a16_E,0, 0, opREP_STOSB_a16,opREP_STOSW_a16,opREP_LODSB_a16,opREP_LODSW_a16,opREP_SCASB_a16_E,opREP_SCASW_a16_E,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPE_l_a16,0, 0, 0, 0, 0, 0, 0, opCS_REPE_l_a16,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPE_l_a16,0, 0, 0, 0, 0, 0, 0, opDS_REPE_l_a16,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPE_l_a16,opGS_REPE_l_a16,op_66_REPE, op_67_REPE, 0, 0, 0, 0, opREP_INSB_a16, opREP_INSL_a16, opREP_OUTSB_a16,opREP_OUTSL_a16,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a16,opREP_MOVSL_a16,opREP_CMPSB_a16_E,opREP_CMPSL_a16_E,0, 0, opREP_STOSB_a16,opREP_STOSL_a16,opREP_LODSB_a16,opREP_LODSL_a16,opREP_SCASB_a16_E,opREP_SCASL_a16_E,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPE_w_a32,0, 0, 0, 0, 0, 0, 0, opCS_REPE_w_a32,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPE_w_a32,0, 0, 0, 0, 0, 0, 0, opDS_REPE_w_a32,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPE_w_a32,opGS_REPE_w_a32,op_66_REPE, op_67_REPE, 0, 0, 0, 0, opREP_INSB_a32, opREP_INSW_a32, opREP_OUTSB_a32,opREP_OUTSW_a32,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a32,opREP_MOVSW_a32,opREP_CMPSB_a32_E,opREP_CMPSW_a32_E,0, 0, opREP_STOSB_a32,opREP_STOSW_a32,opREP_LODSB_a32,opREP_LODSW_a32,opREP_SCASB_a32_E,opREP_SCASW_a32_E,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPE_l_a32,0, 0, 0, 0, 0, 0, 0, opCS_REPE_l_a32,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPE_l_a32,0, 0, 0, 0, 0, 0, 0, opDS_REPE_l_a32,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPE_l_a32,opGS_REPE_l_a32,op_66_REPE, op_67_REPE, 0, 0, 0, 0, opREP_INSB_a32, opREP_INSL_a32, opREP_OUTSB_a32,opREP_OUTSL_a32,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a32,opREP_MOVSL_a32,opREP_CMPSB_a32_E,opREP_CMPSL_a32_E,0, 0, opREP_STOSB_a32,opREP_STOSL_a32,opREP_LODSB_a32,opREP_LODSL_a32,opREP_SCASB_a32_E,opREP_SCASL_a32_E,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
OpFn OP_TABLE(REPNE)[1024] =
|
|
||||||
{
|
|
||||||
/*16-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPNE_w_a16,0, 0, 0, 0, 0, 0, 0, opCS_REPNE_w_a16,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPNE_w_a16,0, 0, 0, 0, 0, 0, 0, opDS_REPNE_w_a16,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPNE_w_a16,opGS_REPNE_w_a16,op_66_REPNE, op_67_REPNE, 0, 0, 0, 0, opREP_INSB_a16, opREP_INSW_a16, opREP_OUTSB_a16,opREP_OUTSW_a16,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a16,opREP_MOVSW_a16,opREP_CMPSB_a16_NE,opREP_CMPSW_a16_NE,0, 0, opREP_STOSB_a16,opREP_STOSW_a16,opREP_LODSB_a16,opREP_LODSW_a16,opREP_SCASB_a16_NE,opREP_SCASW_a16_NE,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*32-bit data, 16-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPNE_l_a16,0, 0, 0, 0, 0, 0, 0, opCS_REPNE_l_a16,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPNE_l_a16,0, 0, 0, 0, 0, 0, 0, opDS_REPNE_l_a16,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPNE_l_a16,opGS_REPNE_l_a16,op_66_REPNE, op_67_REPNE, 0, 0, 0, 0, opREP_INSB_a16, opREP_INSL_a16, opREP_OUTSB_a16,opREP_OUTSL_a16,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a16,opREP_MOVSL_a16,opREP_CMPSB_a16_NE,opREP_CMPSL_a16_NE,0, 0, opREP_STOSB_a16,opREP_STOSL_a16,opREP_LODSB_a16,opREP_LODSL_a16,opREP_SCASB_a16_NE,opREP_SCASL_a16_NE,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*16-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPNE_w_a32,0, 0, 0, 0, 0, 0, 0, opCS_REPNE_w_a32,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPNE_w_a32,0, 0, 0, 0, 0, 0, 0, opDS_REPNE_w_a32,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPNE_w_a32,opGS_REPNE_w_a32,op_66_REPNE, op_67_REPNE, 0, 0, 0, 0, opREP_INSB_a32, opREP_INSW_a32, opREP_OUTSB_a32,opREP_OUTSW_a32,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a32,opREP_MOVSW_a32,opREP_CMPSB_a32_NE,opREP_CMPSW_a32_NE,0, 0, opREP_STOSB_a32,opREP_STOSW_a32,opREP_LODSB_a32,opREP_LODSW_a32,opREP_SCASB_a32_NE,opREP_SCASW_a32_NE,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*32-bit data, 32-bit addr*/
|
|
||||||
/* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/
|
|
||||||
/*00*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*10*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*20*/ 0, 0, 0, 0, 0, 0, opES_REPNE_l_a32,0, 0, 0, 0, 0, 0, 0, opCS_REPNE_l_a32,0,
|
|
||||||
/*30*/ 0, 0, 0, 0, 0, 0, opSS_REPNE_l_a32,0, 0, 0, 0, 0, 0, 0, opDS_REPNE_l_a32,0,
|
|
||||||
|
|
||||||
/*40*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*50*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*60*/ 0, 0, 0, 0, opFS_REPNE_l_a32,opGS_REPNE_l_a32,op_66_REPNE, op_67_REPNE, 0, 0, 0, 0, opREP_INSB_a32, opREP_INSL_a32, opREP_OUTSB_a32,opREP_OUTSL_a32,
|
|
||||||
/*70*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*80*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*90*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*a0*/ 0, 0, 0, 0, opREP_MOVSB_a32,opREP_MOVSL_a32,opREP_CMPSB_a32_NE,opREP_CMPSL_a32_NE,0, 0, opREP_STOSB_a32,opREP_STOSL_a32,opREP_LODSB_a32,opREP_LODSL_a32,opREP_SCASB_a32_NE,opREP_SCASL_a32_NE,
|
|
||||||
/*b0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
|
|
||||||
/*c0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*d0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*e0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
/*f0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "x87_ops.h"
|
#include "x87_ops.h"
|
||||||
|
|
|
||||||
98
src/8087.h
98
src/8087.h
|
|
@ -1,98 +0,0 @@
|
||||||
/*This file is a series of macros to get the 386+ based x87 emulation working with
|
|
||||||
the 808x emulation*/
|
|
||||||
#define X8087
|
|
||||||
#define OP_TABLE(name) ops_808x_ ## name
|
|
||||||
|
|
||||||
#define CLOCK_CYCLES(c) cycles -= (c)
|
|
||||||
#define CLOCK_CYCLES_ALWAYS(c) cycles -= (c)
|
|
||||||
|
|
||||||
#define fetch_ea_16(fetchdat)
|
|
||||||
#define fetch_ea_32(fetchdat)
|
|
||||||
#define SEG_CHECK_READ(seg)
|
|
||||||
#define SEG_CHECK_WRITE(seg)
|
|
||||||
#define CHECK_WRITE(seg, addr_lo, addr_hi)
|
|
||||||
#define PREFETCH_RUN(timing, bytes, rmdat, a, b, c, d, e)
|
|
||||||
|
|
||||||
static uint32_t readmeml(uint32_t seg, uint32_t addr)
|
|
||||||
{
|
|
||||||
return readmemw(seg, addr) | (readmemw(seg, addr+2) << 16);
|
|
||||||
}
|
|
||||||
static uint64_t readmemq(uint32_t seg, uint32_t addr)
|
|
||||||
{
|
|
||||||
return (uint64_t)readmemw(seg, addr) | ((uint64_t)readmemw(seg, addr+2) << 16) |
|
|
||||||
((uint64_t)readmemw(seg, addr+4) << 32) |
|
|
||||||
((uint64_t)readmemw(seg, addr+6) << 48);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void writememb_8087(uint32_t seg, uint32_t addr, uint8_t val)
|
|
||||||
{
|
|
||||||
writememb(seg+addr, val);
|
|
||||||
}
|
|
||||||
static void writememl(uint32_t seg, uint32_t addr, uint32_t val)
|
|
||||||
{
|
|
||||||
writememw(seg, addr, val & 0xffff);
|
|
||||||
writememw(seg, addr+2, (val >> 16) & 0xffff);
|
|
||||||
}
|
|
||||||
static void writememq(uint32_t seg, uint32_t addr, uint64_t val)
|
|
||||||
{
|
|
||||||
writememw(seg, addr, val & 0xffff);
|
|
||||||
writememw(seg, addr+2, (val >> 16) & 0xffff);
|
|
||||||
writememw(seg, addr+4, (val >> 32) & 0xffff);
|
|
||||||
writememw(seg, addr+6, (val >> 48) & 0xffff);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline uint32_t geteal()
|
|
||||||
{
|
|
||||||
if (cpu_mod == 3)
|
|
||||||
fatal("geteal cpu_mod==3\n");
|
|
||||||
return readmeml(easeg, cpu_state.eaaddr);
|
|
||||||
}
|
|
||||||
static inline uint64_t geteaq()
|
|
||||||
{
|
|
||||||
if (cpu_mod == 3)
|
|
||||||
fatal("geteaq cpu_mod==3\n");
|
|
||||||
return readmemq(easeg, cpu_state.eaaddr);
|
|
||||||
}
|
|
||||||
static inline void seteal(uint32_t val)
|
|
||||||
{
|
|
||||||
if (cpu_mod == 3)
|
|
||||||
fatal("seteal cpu_mod==3\n");
|
|
||||||
else
|
|
||||||
writememl(easeg, cpu_state.eaaddr, val);
|
|
||||||
}
|
|
||||||
static inline void seteaq(uint64_t val)
|
|
||||||
{
|
|
||||||
if (cpu_mod == 3)
|
|
||||||
fatal("seteaq cpu_mod==3\n");
|
|
||||||
else
|
|
||||||
writememq(easeg, cpu_state.eaaddr, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define flags_rebuild()
|
|
||||||
|
|
||||||
#define CF_SET() (cpu_state.flags & C_FLAG)
|
|
||||||
#define NF_SET() (cpu_state.flags & N_FLAG)
|
|
||||||
#define PF_SET() (cpu_state.flags & P_FLAG)
|
|
||||||
#define VF_SET() (cpu_state.flags & V_FLAG)
|
|
||||||
#define ZF_SET() (cpu_state.flags & Z_FLAG)
|
|
||||||
|
|
||||||
#define cond_O ( VF_SET())
|
|
||||||
#define cond_NO (!VF_SET())
|
|
||||||
#define cond_B ( CF_SET())
|
|
||||||
#define cond_NB (!CF_SET())
|
|
||||||
#define cond_E ( ZF_SET())
|
|
||||||
#define cond_NE (!ZF_SET())
|
|
||||||
#define cond_BE ( CF_SET() || ZF_SET())
|
|
||||||
#define cond_NBE (!CF_SET() && !ZF_SET())
|
|
||||||
#define cond_S ( NF_SET())
|
|
||||||
#define cond_NS (!NF_SET())
|
|
||||||
#define cond_P ( PF_SET())
|
|
||||||
#define cond_NP (!PF_SET())
|
|
||||||
#define cond_L (((NF_SET()) ? 1 : 0) != ((VF_SET()) ? 1 : 0))
|
|
||||||
#define cond_NL (((NF_SET()) ? 1 : 0) == ((VF_SET()) ? 1 : 0))
|
|
||||||
#define cond_LE (((NF_SET()) ? 1 : 0) != ((VF_SET()) ? 1 : 0) || (ZF_SET()))
|
|
||||||
#define cond_NLE (((NF_SET()) ? 1 : 0) == ((VF_SET()) ? 1 : 0) && (!ZF_SET()))
|
|
||||||
|
|
||||||
#define writememb writememb_8087
|
|
||||||
#include "x87_ops.h"
|
|
||||||
#undef writememb
|
|
||||||
1215
src/808x.c
1215
src/808x.c
File diff suppressed because it is too large
Load diff
196
src/82091aa.c
196
src/82091aa.c
|
|
@ -1,196 +0,0 @@
|
||||||
#include "ibm.h"
|
|
||||||
#include "82091aa.h"
|
|
||||||
#include "fdc.h"
|
|
||||||
#include "io.h"
|
|
||||||
#include "lpt.h"
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
#define AIP_AIPID 0x00
|
|
||||||
#define AIP_AIPREV 0x01
|
|
||||||
#define AIP_AIPCFG1 0x02
|
|
||||||
#define AIP_AIPCFG2 0x03
|
|
||||||
#define AIP_FCFG1 0x10
|
|
||||||
#define AIP_FCFG2 0x11
|
|
||||||
#define AIP_PCFG1 0x20
|
|
||||||
#define AIP_PCFG2 0x21
|
|
||||||
#define AIP_SACFG1 0x30
|
|
||||||
#define AIP_SACFG2 0x31
|
|
||||||
#define AIP_SBCFG1 0x40
|
|
||||||
#define AIP_SBCFG2 0x41
|
|
||||||
#define AIP_IDECFG 0x50
|
|
||||||
|
|
||||||
#define FCFG1_FDC_ENA (1 << 0)
|
|
||||||
#define FCFG1_FDC_ADDR (1 << 1)
|
|
||||||
|
|
||||||
#define PCFG1_PP_ENA (1 << 0)
|
|
||||||
#define PCFG1_PP_ADDR (3 << 1)
|
|
||||||
#define PCFG1_PP_ADDR_378 (0 << 1)
|
|
||||||
#define PCFG1_PP_ADDR_278 (1 << 1)
|
|
||||||
#define PCFG1_PP_ADDR_3BC (2 << 1)
|
|
||||||
|
|
||||||
#define SxCFG1_ENA (1 << 0)
|
|
||||||
#define SxCFG1_ADDR (7 << 1)
|
|
||||||
#define SxCFG1_ADDR_3F8 (0 << 1)
|
|
||||||
#define SxCFG1_ADDR_2F8 (1 << 1)
|
|
||||||
#define SxCFG1_ADDR_220 (2 << 1)
|
|
||||||
#define SxCFG1_ADDR_228 (3 << 1)
|
|
||||||
#define SxCFG1_ADDR_238 (4 << 1)
|
|
||||||
#define SxCFG1_ADDR_2E8 (5 << 1)
|
|
||||||
#define SxCFG1_ADDR_338 (6 << 1)
|
|
||||||
#define SxCFG1_ADDR_3E8 (7 << 1)
|
|
||||||
#define SxCFG1_IRQ (1 << 4)
|
|
||||||
#define SxCFG1_IRQ_3 (0 << 4)
|
|
||||||
#define SxCFG1_IRQ_4 (1 << 4)
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
int idx;
|
|
||||||
uint8_t regs[256];
|
|
||||||
} aip;
|
|
||||||
|
|
||||||
static uint8_t aip_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
uint8_t temp;
|
|
||||||
|
|
||||||
if (!(addr & 1))
|
|
||||||
temp = aip.idx;
|
|
||||||
else
|
|
||||||
temp = aip.regs[aip.idx];
|
|
||||||
|
|
||||||
// pclog("aip_read: addr=%04x val=%02x\n", addr, temp);
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void aip_write(uint16_t addr, uint8_t val, void *p)
|
|
||||||
{
|
|
||||||
// pclog("aip_write: addr=%04x val=%02x\n", addr, val);
|
|
||||||
if (!(addr & 1))
|
|
||||||
aip.idx = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// pclog("AIP register write: idx=%02x val=%02x\n", aip.idx, val);
|
|
||||||
switch (aip.idx)
|
|
||||||
{
|
|
||||||
case AIP_AIPCFG1:
|
|
||||||
aip.regs[AIP_AIPCFG1] = (val & ~0x4e) | (aip.regs[AIP_AIPCFG1] & 0x48);
|
|
||||||
break;
|
|
||||||
case AIP_AIPCFG2:
|
|
||||||
aip.regs[AIP_AIPCFG2] = val & 0xf8;
|
|
||||||
break;
|
|
||||||
case AIP_FCFG1:
|
|
||||||
aip.regs[AIP_FCFG1] = val & 0x83;
|
|
||||||
fdc_remove();
|
|
||||||
if ((aip.regs[AIP_FCFG1] & FCFG1_FDC_ENA) && !(aip.regs[AIP_FCFG1] & FCFG1_FDC_ADDR))
|
|
||||||
fdc_add();
|
|
||||||
break;
|
|
||||||
case AIP_FCFG2:
|
|
||||||
aip.regs[AIP_FCFG2] = (val & 0x0d) | (aip.regs[AIP_FCFG2] & 0x02);
|
|
||||||
break;
|
|
||||||
case AIP_PCFG1:
|
|
||||||
aip.regs[AIP_PCFG1] = val & 0xef;
|
|
||||||
lpt1_remove();
|
|
||||||
if (aip.regs[AIP_PCFG1] & PCFG1_PP_ENA)
|
|
||||||
{
|
|
||||||
switch (aip.regs[AIP_PCFG1] & PCFG1_PP_ADDR)
|
|
||||||
{
|
|
||||||
case PCFG1_PP_ADDR_378:
|
|
||||||
lpt1_init(0x378);
|
|
||||||
break;
|
|
||||||
case PCFG1_PP_ADDR_278:
|
|
||||||
lpt1_init(0x278);
|
|
||||||
break;
|
|
||||||
case PCFG1_PP_ADDR_3BC:
|
|
||||||
lpt1_init(0x3bc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case AIP_PCFG2:
|
|
||||||
aip.regs[AIP_PCFG2] = (val & 0x0d) | (aip.regs[AIP_PCFG2] & 0x22);
|
|
||||||
break;
|
|
||||||
case AIP_SACFG1:
|
|
||||||
aip.regs[AIP_SACFG1] = val & 0x9f;
|
|
||||||
serial1_remove();
|
|
||||||
if (aip.regs[AIP_SACFG1] & SxCFG1_ENA)
|
|
||||||
{
|
|
||||||
uint16_t base = 0;
|
|
||||||
int irq = 0;
|
|
||||||
|
|
||||||
switch (aip.regs[AIP_SACFG1] & SxCFG1_ADDR)
|
|
||||||
{
|
|
||||||
case SxCFG1_ADDR_3F8: base = 0x3f8; break;
|
|
||||||
case SxCFG1_ADDR_2F8: base = 0x2f8; break;
|
|
||||||
case SxCFG1_ADDR_220: base = 0x220; break;
|
|
||||||
case SxCFG1_ADDR_228: base = 0x228; break;
|
|
||||||
case SxCFG1_ADDR_238: base = 0x238; break;
|
|
||||||
case SxCFG1_ADDR_2E8: base = 0x2e8; break;
|
|
||||||
case SxCFG1_ADDR_338: base = 0x338; break;
|
|
||||||
case SxCFG1_ADDR_3E8: base = 0x3e8; break;
|
|
||||||
}
|
|
||||||
switch (aip.regs[AIP_SACFG1] & SxCFG1_IRQ)
|
|
||||||
{
|
|
||||||
case SxCFG1_IRQ_3: irq = 3; break;
|
|
||||||
case SxCFG1_IRQ_4: irq = 4; break;
|
|
||||||
}
|
|
||||||
serial1_set(base, irq);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case AIP_SACFG2:
|
|
||||||
aip.regs[AIP_SACFG2] = (val & 0x01d) | (aip.regs[AIP_SACFG2] & 0x02);
|
|
||||||
break;
|
|
||||||
case AIP_SBCFG1:
|
|
||||||
aip.regs[AIP_SBCFG1] = val & 0x9f;
|
|
||||||
serial2_remove();
|
|
||||||
if (aip.regs[AIP_SBCFG1] & SxCFG1_ENA)
|
|
||||||
{
|
|
||||||
uint16_t base = 0;
|
|
||||||
int irq = 0;
|
|
||||||
|
|
||||||
switch (aip.regs[AIP_SBCFG1] & SxCFG1_ADDR)
|
|
||||||
{
|
|
||||||
case SxCFG1_ADDR_3F8: base = 0x3f8; break;
|
|
||||||
case SxCFG1_ADDR_2F8: base = 0x2f8; break;
|
|
||||||
case SxCFG1_ADDR_220: base = 0x220; break;
|
|
||||||
case SxCFG1_ADDR_228: base = 0x228; break;
|
|
||||||
case SxCFG1_ADDR_238: base = 0x238; break;
|
|
||||||
case SxCFG1_ADDR_2E8: base = 0x2e8; break;
|
|
||||||
case SxCFG1_ADDR_338: base = 0x338; break;
|
|
||||||
case SxCFG1_ADDR_3E8: base = 0x3e8; break;
|
|
||||||
}
|
|
||||||
switch (aip.regs[AIP_SBCFG1] & SxCFG1_IRQ)
|
|
||||||
{
|
|
||||||
case SxCFG1_IRQ_3: irq = 3; break;
|
|
||||||
case SxCFG1_IRQ_4: irq = 4; break;
|
|
||||||
}
|
|
||||||
serial2_set(base, irq);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case AIP_SBCFG2:
|
|
||||||
aip.regs[AIP_SACFG2] = (val & 0x01d) | (aip.regs[AIP_SACFG2] & 0x02);
|
|
||||||
break;
|
|
||||||
case AIP_IDECFG:
|
|
||||||
aip.regs[AIP_IDECFG] = val & 0x07;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void aip_82091aa_init(uint16_t base)
|
|
||||||
{
|
|
||||||
io_sethandler(base, 0x0002, aip_read, NULL, NULL, aip_write, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
memset(&aip.regs, 0xff, sizeof(aip.regs));
|
|
||||||
aip.regs[AIP_AIPID] = 0xa0;
|
|
||||||
aip.regs[AIP_AIPREV] = 0x00;
|
|
||||||
aip.regs[AIP_AIPCFG1] = 0x40;
|
|
||||||
aip.regs[AIP_AIPCFG2] = 0x00;
|
|
||||||
aip.regs[AIP_FCFG1] = 0x01;
|
|
||||||
aip.regs[AIP_FCFG2] = 0x00;
|
|
||||||
aip.regs[AIP_PCFG1] = 0x00;
|
|
||||||
aip.regs[AIP_PCFG2] = 0x00;
|
|
||||||
aip.regs[AIP_SACFG1] = 0x00;
|
|
||||||
aip.regs[AIP_SACFG2] = 0x02;
|
|
||||||
aip.regs[AIP_SBCFG1] = 0x00;
|
|
||||||
aip.regs[AIP_SBCFG2] = 0x02;
|
|
||||||
aip.regs[AIP_IDECFG] = 0x01;
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
void aip_82091aa_init(uint16_t base);
|
|
||||||
155
src/Makefile.am
155
src/Makefile.am
|
|
@ -1,154 +1,51 @@
|
||||||
# Makefile.am for PCem
|
# Makefile.am for PCem
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = subdir-objects
|
|
||||||
bin_PROGRAMS = pcem
|
bin_PROGRAMS = pcem
|
||||||
noinst_SCRIPTS =
|
noinst_SCRIPTS = ../pcem
|
||||||
CLEANFILES =
|
CLEANFILES = $(noinst_SCRIPTS)
|
||||||
|
|
||||||
if !OS_WINDOWS
|
|
||||||
CLEANFILES += $(noinst_SCRIPTS)
|
|
||||||
noinst_SCRIPTS += ../pcem
|
|
||||||
../pcem: pcem
|
../pcem: pcem
|
||||||
cp pcem ..
|
cp pcem ..
|
||||||
endif
|
|
||||||
|
|
||||||
amrefresh:
|
amrefresh:
|
||||||
|
|
||||||
# Special wxWidgets files
|
|
||||||
WINDRES = $(shell $(WX_CONFIG_PATH) --rescomp)
|
|
||||||
wx.res: wx.rc
|
|
||||||
$(WINDRES) -i wx.rc --input-format=rc -o wx.res -O coff
|
|
||||||
|
|
||||||
wx-resources.cpp : pc.xrc
|
pcem_CFLAGS = $(allegro_CFLAGS)
|
||||||
-wxrc -c pc.xrc -o wx-resources.cpp
|
|
||||||
|
|
||||||
# PCem
|
pcem_LDADD = $(allegro_LIBS) -lopenal
|
||||||
pcem_SOURCES = 386.c 386_common.c 386_dynarec.c 386_dynarec_ops.c 808x.c 82091aa.c acc2036.c acc2168.c acc3221.c acer386sx.c \
|
|
||||||
ali1429.c amstrad.c cassette.c cbm_io.c cdrom-image.cc cdrom-null.c cmd640.c codegen.c codegen_accumulate.c \
|
|
||||||
codegen_allocator.c codegen_block.c codegen_ir.c codegen_ops.c codegen_ops_3dnow.c codegen_ops_arith.c \
|
|
||||||
codegen_ops_branch.c codegen_ops_fpu_arith.c codegen_ops_fpu_constant.c codegen_ops_fpu_loadstore.c \
|
|
||||||
codegen_ops_fpu_misc.c codegen_ops_mmx_arith.c codegen_ops_mmx_cmp.c codegen_ops_mmx_loadstore.c \
|
|
||||||
codegen_ops_mmx_logic.c codegen_ops_mmx_pack.c codegen_ops_mmx_shift.c codegen_ops_helpers.c codegen_ops_jump.c \
|
|
||||||
codegen_ops_logic.c codegen_ops_shift.c codegen_ops_misc.c codegen_ops_mov.c codegen_ops_stack.c codegen_reg.c \
|
|
||||||
codegen_timing_486.c codegen_timing_686.c codegen_timing_common.c codegen_timing_cyrixiii.c codegen_timing_k6.c codegen_timing_p6.c codegen_timing_pentium.c \
|
|
||||||
codegen_timing_winchip.c codegen_timing_winchip2.c compaq.c config.c cpu.c cpu_tables.c cs8230.c dells200.c device.c disc.c \
|
|
||||||
disc_fdi.c disc_img.c disc_sector.c dma.c esdi_at.c f82c710_upc.c fdc.c fdc37c665.c fdc37c93x.c fdd.c fdi2raw.c gameport.c hdd.c hdd_esdi.c \
|
|
||||||
hdd_file.c headland.c i430lx.c i430fx.c i430hx.c i430vx.c i440fx.c i440bx.c ide.c ide_atapi.c ide_sff8038i.c intel.c intel_flash.c io.c \
|
|
||||||
jim.c joystick_ch_flightstick_pro.c joystick_standard.c joystick_sw_pad.c joystick_tm_fcs.c keyboard.c \
|
|
||||||
keyboard_amstrad.c keyboard_at.c keyboard_olim24.c keyboard_pcjr.c keyboard_xt.c laserxt.c lpt.c lpt_dac.c lpt_dss.c \
|
|
||||||
mca.c mcr.c mem.c mem_bios.c mfm_at.c mfm_xebec.c model.c mouse.c mouse_msystems.c mouse_ps2.c mouse_serial.c mvp3.c \
|
|
||||||
neat.c nmi.c nvr.c olivetti_m24.c opti495.c paths.c pc.c pc87306.c pc87307.c pci.c pic.c piix.c piix_pm.c pit.c ppi.c ps1.c ps2.c ps2_mca.c \
|
|
||||||
ps2_nvr.c nvr_tc8521.c pzx.c rom.c rtc.c rtc_tc8521.c scamp.c scat.c scsi.c scsi_53c400.c scsi_aha1540.c scsi_cd.c scsi_hd.c \
|
|
||||||
scsi_ibm.c scsi_zip.c serial.c sio.c sis496.c sl82c460.c sound.c sound_ad1848.c sound_adlib.c sound_adlibgold.c sound_audiopci.c \
|
|
||||||
sound_azt2316a.c sound_cms.c sound_emu8k.c sound_gus.c sound_mpu401_uart.c sound_opl.c sound_pas16.c sound_ps1.c sound_pssj.c \
|
|
||||||
sound_sb.c sound_sb_dsp.c sound_sn76489.c sound_speaker.c sound_ssi2001.c sound_wss.c sound_ym7128.c soundopenal.c \
|
|
||||||
sst39sf010.c superxt.c tandy_eeprom.c tandy_rom.c t1000.c t3100e.c timer.c um8669f.c um8881f.c vid_ati_eeprom.c vid_ati_mach64.c \
|
|
||||||
vid_ati18800.c vid_ati28800.c vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c vid_colorplus.c vid_compaq_cga.c vid_ddc.c vid_ega.c \
|
|
||||||
vid_et4000.c vid_et4000w32.c vid_genius.c vid_hercules.c vid_ht216.c vid_icd2061.c vid_ics2595.c vid_im1024.c \
|
|
||||||
vid_incolor.c vid_mda.c vid_mga.c vid_olivetti_m24.c vid_oti037.c vid_oti067.c vid_paradise.c vid_pc200.c vid_pc1512.c \
|
|
||||||
vid_pc1640.c vid_pcjr.c vid_pgc.c vid_ps1_svga.c vid_s3.c vid_s3_virge.c vid_sdac_ramdac.c vid_sigma.c \
|
|
||||||
vid_stg_ramdac.c vid_svga.c vid_svga_render.c vid_t1000.c vid_t3100e.c vid_tandy.c vid_tandysl.c vid_tgui9440.c \
|
|
||||||
vid_tkd8001_ramdac.c vid_tvga.c vid_unk_ramdac.c vid_vga.c vid_voodoo.c vid_voodoo_banshee.c vid_voodoo_banshee_blitter.c \
|
|
||||||
vid_voodoo_blitter.c vid_voodoo_display.c vid_voodoo_fb.c vid_voodoo_fifo.c vid_voodoo_reg.c \
|
|
||||||
vid_voodoo_render.c vid_voodoo_setup.c vid_voodoo_texture.c video.c wd76c10.c vid_wy700.c vt82c586b.c \
|
|
||||||
vl82c480.c w83877tf.c w83977tf.c x86seg.c x87.c x87_timings.c xi8088.c xtide.c zenith.c sound_dbopl.cc sound_resid.cc
|
|
||||||
|
|
||||||
# DOSBox
|
pcem_SOURCES = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c acer386sx.c ali1429.c allegro-gui.c \
|
||||||
pcem_SOURCES += dosbox/cdrom_image.cpp dosbox/dbopl.cpp dosbox/nukedopl.cpp dosbox/vid_cga_comp.c
|
allegro-gui-config-sel.c allegro-gui-configure.c allegro-gui-deviceconfig.c allegro-gui-hdconf.c allegro-joystick.c allegro-keyboard.c allegro-main.c \
|
||||||
|
allegro-midi.c allegro-mouse.c allegro-video.c amstrad.c cdrom-ioctl-linux.c cdrom-iso.c cdrom-null.c \
|
||||||
# resid-fp
|
codegen.c codegen_ops.c codegen_timing_486.c codegen_timing_686.c codegen_timing_pentium.c codegen_timing_winchip.c compaq.c config.c cpu.c \
|
||||||
pcem_SOURCES += resid-fp/convolve.cc resid-fp/convolve-sse.cc resid-fp/envelope.cc \
|
dac.c device.c disc.c disc_fdi.c disc_img.c disc_sector.c dma.c fdc.c fdc37c665.c fdd.c fdi2raw.c gameport.c \
|
||||||
|
hdd.c hdd_esdi.c headland.c i430lx.c i430fx.c i430vx.c ide.c intel.c intel_flash.c io.c jim.c joystick_ch_flightstick_pro.c joystick_standard.c joystick_sw_pad.c \
|
||||||
|
joystick_tm_fcs.c keyboard.c keyboard_amstrad.c keyboard_at.c keyboard_olim24.c keyboard_pcjr.c keyboard_xt.c \
|
||||||
|
lpt.c mca.c mcr.c mem.c mfm_at.c mfm_xebec.c model.c mouse.c mouse_ps2.c mouse_serial.c neat.c nmi.c nvr.c olivetti_m24.c \
|
||||||
|
opti495.c pc.c pci.c pic.c piix.c pit.c ppi.c ps1.c ps2.c ps2_mca.c ps2_nvr.c rom.c rtc.c scat.c serial.c sis496.c sound.c \
|
||||||
|
sound_ad1848.c sound_adlib.c sound_adlibgold.c sound_cms.c sound_emu8k.c sound_gus.c \
|
||||||
|
sound_mpu401_uart.c sound_opl.c sound_pas16.c sound_ps1.c sound_pssj.c sound_sb.c sound_sb_dsp.c sound_sn76489.c \
|
||||||
|
sound_speaker.c sound_ssi2001.c sound_wss.c sound_ym7128.c soundopenal.c tandy_eeprom.c tandy_rom.c thread-pthread.c \
|
||||||
|
timer.c um8669f.c um8881f.c vid_ati_eeprom.c vid_ati_mach64.c vid_ati18800.c vid_ati28800.c \
|
||||||
|
vid_ati68860_ramdac.c vid_cga.c vid_cl5429.c vid_colorplus.c vid_ega.c vid_et4000.c vid_et4000w32.c vid_genius.c vid_hercules.c \
|
||||||
|
vid_icd2061.c vid_ics2595.c vid_incolor.c vid_mda.c vid_olivetti_m24.c vid_oti067.c vid_paradise.c vid_pc200.c \
|
||||||
|
vid_pc1512.c vid_pc1640.c vid_pcjr.c vid_ps1_svga.c vid_s3.c vid_s3_virge.c vid_sdac_ramdac.c \
|
||||||
|
vid_stg_ramdac.c vid_svga.c vid_svga_render.c vid_tandy.c vid_tandysl.c vid_tgui9440.c \
|
||||||
|
vid_tkd8001_ramdac.c vid_tvga.c vid_unk_ramdac.c vid_vga.c vid_voodoo.c video.c wd76c10.c vid_wy700.c \
|
||||||
|
x86seg.c x87.c xtide.c sound_dbopl.cc sound_resid.cc dosbox/dbopl.cpp \
|
||||||
|
dosbox/vid_cga_comp.c resid-fp/convolve.cc resid-fp/convolve-sse.cc resid-fp/envelope.cc \
|
||||||
resid-fp/extfilt.cc resid-fp/filter.cc resid-fp/pot.cc resid-fp/sid.cc \
|
resid-fp/extfilt.cc resid-fp/filter.cc resid-fp/pot.cc resid-fp/sid.cc \
|
||||||
resid-fp/voice.cc resid-fp/wave6581_PS_.cc resid-fp/wave6581_PST.cc \
|
resid-fp/voice.cc resid-fp/wave6581_PS_.cc resid-fp/wave6581_PST.cc \
|
||||||
resid-fp/wave6581_P_T.cc resid-fp/wave6581__ST.cc resid-fp/wave8580_PS_.cc \
|
resid-fp/wave6581_P_T.cc resid-fp/wave6581__ST.cc resid-fp/wave8580_PS_.cc \
|
||||||
resid-fp/wave8580_PST.cc resid-fp/wave8580_P_T.cc resid-fp/wave8580__ST.cc \
|
resid-fp/wave8580_PST.cc resid-fp/wave8580_P_T.cc resid-fp/wave8580__ST.cc \
|
||||||
resid-fp/wave.cc
|
resid-fp/wave.cc
|
||||||
|
|
||||||
#MiniVHD
|
|
||||||
pcem_SOURCES += minivhd/cwalk.c minivhd/libxml2_encoding.c minivhd/minivhd_convert.c minivhd/minivhd_create.c \
|
|
||||||
minivhd/minivhd_io.c minivhd/minivhd_manage.c minivhd/minivhd_struct_rw.c minivhd/minivhd_util.c
|
|
||||||
|
|
||||||
pcem_CFLAGS = $(subst -fpermissive,,$(shell $(WX_CONFIG_PATH) --cxxflags) $(shell sdl2-config --cflags))
|
|
||||||
pcem_CXXFLAGS = $(shell $(WX_CONFIG_PATH) --cxxflags) $(shell sdl2-config --cflags)
|
|
||||||
pcem_LDADD = @LIBS@
|
|
||||||
pcem_SOURCES += wx-main.cc wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc \
|
|
||||||
wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c wx-sdl2-video.c \
|
|
||||||
wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \
|
|
||||||
wx-thread.c wx-common.c wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c \
|
|
||||||
wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc wx-joystickconfig.cc wx-createdisc.cc \
|
|
||||||
wx-resources.cpp
|
|
||||||
if USE_ALSA
|
|
||||||
pcem_LDADD += -lasound
|
|
||||||
pcem_SOURCES += midi_alsa.c
|
|
||||||
else
|
|
||||||
pcem_SOURCES += wx-sdl2-midi.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if CPU_I386
|
if CPU_I386
|
||||||
pcem_SOURCES += codegen_backend_x86.c codegen_backend_x86_ops.c codegen_backend_x86_ops_fpu.c codegen_backend_x86_ops_sse.c codegen_backend_x86_uops.c
|
pcem_SOURCES += codegen_x86.c
|
||||||
pcem_CFLAGS += -msse2
|
pcem_CFLAGS += -msse2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if CPU_X86_64
|
if CPU_X86_64
|
||||||
pcem_SOURCES += codegen_backend_x86-64.c codegen_backend_x86-64_ops.c codegen_backend_x86-64_ops_sse.c codegen_backend_x86-64_uops.c
|
pcem_SOURCES += codegen_x86-64.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if CPU_ARM
|
|
||||||
pcem_SOURCES += codegen_backend_arm.c codegen_backend_arm_ops.c codegen_backend_arm_uops.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if CPU_ARM64
|
|
||||||
pcem_SOURCES += codegen_backend_arm64.c codegen_backend_arm64_imm.c codegen_backend_arm64_ops.c codegen_backend_arm64_uops.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if USE_NETWORKING
|
|
||||||
pcem_CFLAGS += -DUSE_NETWORKING
|
|
||||||
pcem_CXXFLAGS += -DUSE_NETWORKING
|
|
||||||
pcem_SOURCES += ne2000.c nethandler.c wx-hostconfig.c
|
|
||||||
# SLiRP
|
|
||||||
pcem_SOURCES += slirp/bootp.c slirp/cksum.c slirp/debug.c slirp/if.c slirp/ip_icmp.c \
|
|
||||||
slirp/ip_input.c slirp/ip_output.c slirp/mbuf.c slirp/misc.c slirp/queue.c \
|
|
||||||
slirp/sbuf.c slirp/slirp.c slirp/socket.c slirp/tcp_input.c slirp/tcp_output.c \
|
|
||||||
slirp/tcp_subr.c slirp/tcp_timer.c slirp/tftp.c slirp/udp.c
|
|
||||||
|
|
||||||
if OS_WINDOWS
|
|
||||||
pcem_LDADD += -lwsock32 -liphlpapi
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if OS_LINUX
|
|
||||||
pcem_SOURCES += cdrom-ioctl-linux.c wx-sdl2-display.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if OS_OTHER
|
|
||||||
pcem_SOURCES += cdrom-ioctl-dummy.c wx-sdl2-display.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if OS_MACOSX
|
|
||||||
pcem_SOURCES += cdrom-ioctl-osx.c wx-sdl2-display.c
|
|
||||||
pcem_CFLAGS += -DPCEM_RENDER_WITH_TIMER -DPCEM_RENDER_TIMER_LOOP
|
|
||||||
pcem_CXXFLAGS += -DPCEM_RENDER_WITH_TIMER -DPCEM_RENDER_TIMER_LOOP
|
|
||||||
endif
|
|
||||||
|
|
||||||
if OS_WINDOWS
|
|
||||||
DEFAULT_INCLUDES = -iquote .
|
|
||||||
pcem_SOURCES += cdrom-ioctl.c wx-sdl2-display-win.c
|
|
||||||
pcem_LDADD += wx.res
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !HAS_OFF64T
|
|
||||||
pcem_CFLAGS += -Doff64_t=off_t -Dfopen64=fopen -Dfseeko64=fseeko -Dftello64=ftello
|
|
||||||
endif
|
|
||||||
|
|
||||||
if RELEASE_BUILD
|
|
||||||
pcem_CFLAGS += -DRELEASE_BUILD
|
|
||||||
pcem_CXXFLAGS += -DRELEASE_BUILD
|
|
||||||
endif
|
|
||||||
|
|
||||||
#pcem_CFLAGS += -mtune=cortex-a53
|
|
||||||
#pcem_CXXFLAGS += -mtune=cortex-a53
|
|
||||||
#pcem_LDFLAGS = -flto -O3 -mtune=cortex-a15
|
|
||||||
|
|
||||||
# pcem_CFLAGS += -fprofile-use
|
|
||||||
# pcem_CXXFLAGS += -fprofile-use
|
|
||||||
# pcem_LDFLAGS = -fprofile-use
|
|
||||||
|
|
|
||||||
5531
src/Makefile.in
5531
src/Makefile.in
File diff suppressed because it is too large
Load diff
47
src/Makefile.linux32
Normal file
47
src/Makefile.linux32
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
VPATH = . dosbox resid-fp
|
||||||
|
CPP = g++
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS = -O3 -fomit-frame-pointer -msse2 -m32
|
||||||
|
LDFLAGS = -m32
|
||||||
|
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o allegro-gui.o \
|
||||||
|
allegro-gui-configure.o allegro-gui-deviceconfig.o allegro-gui-hdconf.o allegro-joystick.o allegro-keyboard.o allegro-main.o \
|
||||||
|
allegro-midi.o allegro-mouse.o allegro-video.o amstrad.o cdrom-ioctl-linux.o cdrom-iso.o cdrom-null.o \
|
||||||
|
codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.c compaq.o config.o cpu.o \
|
||||||
|
dac.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \
|
||||||
|
hdd.o hdd_esdi.o headland.o i430lx.o i430fx.o i430vx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o \
|
||||||
|
joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o \
|
||||||
|
lpt.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_ps2.o mouse_serial.o neat.o nmi.o nvr.o olivetti_m24.o \
|
||||||
|
opti495.o pc.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o rom.o rtc.o scat.o serial.o sis496.o sound.o \
|
||||||
|
sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o sound_emu8k.o sound_gus.o \
|
||||||
|
sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_sb.o sound_sb_dsp.o sound_sn76489.o \
|
||||||
|
sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o soundopenal.o tandy_eeprom.o tandy_rom.o thread-pthread.o \
|
||||||
|
timer.o um8669f.o um8881f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o vid_ati28800.o \
|
||||||
|
vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_colorplus.o vid_ega.o vid_et4000.o vid_et4000w32.o vid_genius.o vid_hercules.o \
|
||||||
|
vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc200.o \
|
||||||
|
vid_pc1512.o vid_pc1640.o vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o \
|
||||||
|
vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \
|
||||||
|
vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_wy700.o vid_voodoo.o video.o wd76c10.o \
|
||||||
|
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o
|
||||||
|
DBOBJ = dbopl.o vid_cga_comp.o
|
||||||
|
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||||
|
|
||||||
|
|
||||||
|
LIBS = -lopenal -lstdc++ -lalleg -lpthread -lm
|
||||||
|
|
||||||
|
PCem: $(OBJ) $(DBOBJ) $(SIDOBJ)
|
||||||
|
$(CC) $(LDFLAGS) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem" $(LIBS)
|
||||||
|
|
||||||
|
all : PCem
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm *.o
|
||||||
|
rm PCem
|
||||||
|
|
||||||
|
%.o : %.c
|
||||||
|
$(CC) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cc
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cpp
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
46
src/Makefile.linux64
Normal file
46
src/Makefile.linux64
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
VPATH = . dosbox resid-fp
|
||||||
|
CPP = g++
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS = -O3 -fomit-frame-pointer -msse2 -m64
|
||||||
|
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o allegro-gui.o \
|
||||||
|
allegro-gui-configure.o allegro-gui-deviceconfig.o allegro-gui-hdconf.o allegro-joystick.o allegro-keyboard.o allegro-main.o \
|
||||||
|
allegro-midi.o allegro-mouse.o allegro-video.o amstrad.o cdrom-ioctl-linux.o cdrom-iso.o cdrom-null.o \
|
||||||
|
codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \
|
||||||
|
dac.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \
|
||||||
|
hdd.o hdd_esdi.o headland.o i430lx.o i430fx.o i430vx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o \
|
||||||
|
joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o \
|
||||||
|
lpt.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_ps2.o mouse_serial.o neat.o nmi.o nvr.o olivetti_m24.o \
|
||||||
|
opti495.o pc.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o rom.o rtc.o scat.o serial.o sis496.o sound.o \
|
||||||
|
sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o sound_emu8k.o sound_gus.o \
|
||||||
|
sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_sb.o sound_sb_dsp.o sound_sn76489.o \
|
||||||
|
sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o soundopenal.o tandy_eeprom.o tandy_rom.o thread-pthread.o \
|
||||||
|
timer.o um8669f.o um8881f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o vid_ati28800.o \
|
||||||
|
vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_colorplus.o vid_ega.o vid_et4000.o vid_et4000w32.o vid_genius.o vid_hercules.o \
|
||||||
|
vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc200.o \
|
||||||
|
vid_pc1512.o vid_pc1640.o vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o \
|
||||||
|
vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \
|
||||||
|
vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \
|
||||||
|
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o
|
||||||
|
DBOBJ = dbopl.o vid_cga_comp.o
|
||||||
|
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||||
|
|
||||||
|
|
||||||
|
LIBS = -lopenal -lstdc++ -lalleg -lpthread -lm
|
||||||
|
|
||||||
|
PCem64: $(OBJ) $(DBOBJ) $(SIDOBJ)
|
||||||
|
$(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem64" $(LIBS)
|
||||||
|
|
||||||
|
all : PCem64
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm *.o
|
||||||
|
rm PCem64
|
||||||
|
|
||||||
|
%.o : %.c
|
||||||
|
$(CC) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cc
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cpp
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
47
src/Makefile.mingw
Normal file
47
src/Makefile.mingw
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
VPATH = . dosbox resid-fp
|
||||||
|
CPP = g++.exe
|
||||||
|
CC = gcc.exe
|
||||||
|
WINDRES = windres.exe
|
||||||
|
CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Wall -Werror -fno-strict-aliasing
|
||||||
|
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \
|
||||||
|
codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o dac.o \
|
||||||
|
device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o headland.o i430lx.o i430fx.o \
|
||||||
|
i430vx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
||||||
|
keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_ps2.o \
|
||||||
|
mouse_serial.o neat.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o rom.o rtc.o \
|
||||||
|
scat.o serial.o sis496.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o sound_dbopl.o \
|
||||||
|
sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \
|
||||||
|
sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o \
|
||||||
|
sound_ym7128.o soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8881f.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \
|
||||||
|
vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_colorplus.o vid_ega.o vid_et4000.o \
|
||||||
|
vid_et4000w32.o vid_et4000w32i.o vid_genius.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \
|
||||||
|
vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
|
||||||
|
vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \
|
||||||
|
vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o \
|
||||||
|
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o win.o win-config.o win-config_sel.o win-d3d.o win-d3d-fs.o win-ddraw.o \
|
||||||
|
win-ddraw-fs.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \
|
||||||
|
win-status.o win-video.o x86seg.o x87.o xtide.o pc.res
|
||||||
|
DBOBJ = dbopl.o vid_cga_comp.o
|
||||||
|
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||||
|
|
||||||
|
|
||||||
|
LIBS = -mwindows -lwinmm -lopenal32 -lddraw -ldinput -ldxguid -ld3d9 -lstdc++
|
||||||
|
|
||||||
|
PCem.exe: $(OBJ) $(DBOBJ) $(SIDOBJ)
|
||||||
|
$(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem.exe" $(LIBS)
|
||||||
|
|
||||||
|
all : PCem.exe
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm *.o
|
||||||
|
rm *.exe
|
||||||
|
rm *.res
|
||||||
|
|
||||||
|
%.o : %.c
|
||||||
|
$(CC) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cc
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
pc.res: pc.rc
|
||||||
|
$(WINDRES) -i pc.rc --input-format=rc -o pc.res -O coff
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
VPATH = . dosbox resid-fp minivhd
|
|
||||||
CPP = g++
|
|
||||||
CC = gcc
|
|
||||||
WINDRES = windres.exe
|
|
||||||
WXVERSION = 31
|
|
||||||
WXINCLUDE = e:/MinGWget/include/wx/
|
|
||||||
CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Werror -fno-strict-aliasing
|
|
||||||
CXXFLAGS = $(CFLAGS)
|
|
||||||
OBJ = 386.o 386_common.o 386_dynarec.o 386_dynarec_ops.o 808x.o 82091aa.o acc2036.o acc2168.o acc3221.o acer386sx.o ali1429.o amstrad.o cassette.o \
|
|
||||||
cbm_io.o cdrom-ioctl.o cdrom-image.o cmd640.o codegen.o codegen_accumulate.o codegen_allocator.o \
|
|
||||||
codegen_backend_x86.o codegen_backend_x86_ops.o codegen_backend_x86_ops_fpu.o codegen_backend_x86_ops_sse.o \
|
|
||||||
codegen_backend_x86_uops.o codegen_block.o codegen_ir.o codegen_ops.o \
|
|
||||||
codegen_ops_3dnow.o codegen_ops_branch.o codegen_ops_arith.o codegen_ops_fpu_arith.o \
|
|
||||||
codegen_ops_fpu_constant.o codegen_ops_fpu_loadstore.o codegen_ops_fpu_misc.o codegen_ops_helpers.o codegen_ops_jump.o \
|
|
||||||
codegen_ops_logic.o codegen_ops_misc.o codegen_ops_mmx_arith.o codegen_ops_mmx_cmp.o \
|
|
||||||
codegen_ops_mmx_loadstore.o codegen_ops_mmx_logic.o codegen_ops_mmx_pack.o codegen_ops_mmx_shift.o \
|
|
||||||
codegen_ops_mov.o codegen_ops_shift.o codegen_ops_stack.o codegen_reg.o codegen_timing_486.o \
|
|
||||||
codegen_timing_686.o codegen_timing_common.o codegen_timing_cyrixiii.o codegen_timing_k6.o codegen_timing_p6.o codegen_timing_pentium.o \
|
|
||||||
codegen_timing_winchip.o codegen_timing_winchip2.o compaq.o config.o cpu.o cpu_tables.o cs8230.o device.o \
|
|
||||||
dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o f82c710_upc.o fdc.o fdc37c665.o fdc37c93x.o fdd.o \
|
|
||||||
fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430hx.o i430lx.o i430fx.o i430vx.o i440fx.o i440bx.o ide.o \
|
|
||||||
ide_atapi.o ide_sff8038i.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o \
|
|
||||||
joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
|
||||||
keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o \
|
|
||||||
mem.o mem_bios.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o mouse_serial.o \
|
|
||||||
mvp3.o neat.o nmi.o nvr.o nvr_tc8521.o olivetti_m24.o opti495.o paths.o pc.o pc87306.o pc87307.o pci.o pic.o \
|
|
||||||
piix.o piix_pm.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o pzx.o rom.o rtc.o rtc_tc8521.o scamp.o scat.o scsi.o \
|
|
||||||
scsi_53c400.o scsi_aha1540.o scsi_cd.o scsi_hd.o scsi_ibm.o scsi_zip.o serial.o sio.o sis496.o sl82c460.o \
|
|
||||||
sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_audiopci.o sound_azt2316a.o sound_cms.o sound_dbopl.o \
|
|
||||||
sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o \
|
|
||||||
sound_resid.o sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o \
|
|
||||||
sound_ym7128.o soundopenal.o sst39sf010.o superxt.o t1000.o t3100e.o tandy_eeprom.o tandy_rom.o timer.o um8881f.o um8669f.o \
|
|
||||||
vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o \
|
|
||||||
vid_cl5429.o vid_colorplus.o vid_compaq_cga.o vid_ddc.o vid_ega.o vid_et4000.o vid_et4000w32.o \
|
|
||||||
vid_et4000w32i.o vid_genius.o vid_hercules.o vid_ht216.o vid_icd2061.o vid_ics2595.o vid_im1024.o vid_incolor.o vid_mda.o \
|
|
||||||
vid_mga.o vid_olivetti_m24.o vid_oti037.c vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
|
|
||||||
vid_pcjr.o vid_pgc.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o vid_stg_ramdac.o vid_svga.o \
|
|
||||||
vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \
|
|
||||||
vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_voodoo_banshee.o vid_voodoo_banshee_blitter.o \
|
|
||||||
vid_voodoo_blitter.o vid_voodoo_display.o vid_voodoo_fb.o vid_voodoo_fifo.o vid_voodoo_reg.o \
|
|
||||||
vid_voodoo_render.o vid_voodoo_setup.o vid_voodoo_texture.o vid_wy700.o video.o vl82c480.o \
|
|
||||||
vt82c586b.o w83877tf.o w83977tf.o wd76c10.o x86seg.o x87.o x87_timings.o xi8088.c xtide.o zenith.o win-midi.o wx-main.o \
|
|
||||||
wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o \
|
|
||||||
wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o \
|
|
||||||
wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
|
|
||||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o \
|
|
||||||
wx-joystickconfig.o wx-createdisc.o wx.res
|
|
||||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
|
||||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
|
||||||
MVHDOBJ = cwalk.o libxml2_encoding.o minivhd_convert.o minivhd_create.o minivhd_io.o minivhd_manage.o minivhd_struct_rw.o minivhd_util.o
|
|
||||||
|
|
||||||
LIBS = -Wl,--subsystem,windows -mthreads -mwindows -lwxmsw$(WXVERSION)u_xrc -lwxmsw$(WXVERSION)u_html -lwxmsw$(WXVERSION)u_adv -lwxbase$(WXVERSION)u_xml -lwxmsw$(WXVERSION)u_core -lwxbase$(WXVERSION)u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -lcomdlg32 -lwinspool -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lmingw32 -lopengl32 -lopenal32 -lstdc++ -lSDL2main -lSDL2 -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc
|
|
||||||
|
|
||||||
PCem-wx-SDL2.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(MVHDOBJ)
|
|
||||||
$(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(MVHDOBJ) -o "PCem-wx-SDL2.exe" $(LIBS)
|
|
||||||
strip -s PCem-wx-SDL2.exe
|
|
||||||
|
|
||||||
all : PCem-wx-SDL2.exe
|
|
||||||
|
|
||||||
clean :
|
|
||||||
rm *.o
|
|
||||||
rm PCem-wx-SDL2.exe
|
|
||||||
rm *.res
|
|
||||||
|
|
||||||
wx-resources.o : pc.xrc
|
|
||||||
-wxrc -c pc.xrc -o wx-resources.cpp
|
|
||||||
$(CPP) $(CXXFLAGS) -c wx-resources.cpp
|
|
||||||
|
|
||||||
%.o : %.c
|
|
||||||
$(CC) $(CFLAGS) -c $<
|
|
||||||
|
|
||||||
%.o : %.cc
|
|
||||||
$(CPP) $(CXXFLAGS) -c $<
|
|
||||||
|
|
||||||
%.o : %.cpp
|
|
||||||
$(CPP) $(CXXFLAGS) -c $<
|
|
||||||
|
|
||||||
wx.res: wx.rc
|
|
||||||
$(WINDRES) -I$(WXINCLUDE)/../ -i wx.rc --input-format=rc -o wx.res -O coff
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
VPATH = . dosbox resid-fp minivhd
|
|
||||||
CPP = g++
|
|
||||||
CC = gcc
|
|
||||||
WINDRES = windres.exe
|
|
||||||
WXVERSION = 31
|
|
||||||
WXINCLUDE = e:/mingwget/include/wx/
|
|
||||||
CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Werror -fno-strict-aliasing -DUSE_NETWORKING
|
|
||||||
CXXFLAGS = $(CFLAGS)
|
|
||||||
OBJ = 386.o 386_common.o 386_dynarec.o 386_dynarec_ops.o 808x.o 82091aa.o acc2036.o acc2168.o acc3221.o acer386sx.o ali1429.o amstrad.o cassette.o \
|
|
||||||
cbm_io.o cdrom-ioctl.o cdrom-image.o cmd640.o codegen.o codegen_accumulate.o codegen_allocator.o \
|
|
||||||
codegen_backend_x86.o codegen_backend_x86_ops.o codegen_backend_x86_ops_fpu.o codegen_backend_x86_ops_sse.o \
|
|
||||||
codegen_backend_x86_uops.o codegen_block.o codegen_ir.o codegen_ops.o \
|
|
||||||
codegen_ops_3dnow.o codegen_ops_branch.o codegen_ops_arith.o codegen_ops_fpu_arith.o \
|
|
||||||
codegen_ops_fpu_constant.o codegen_ops_fpu_loadstore.o codegen_ops_fpu_misc.o codegen_ops_helpers.o codegen_ops_jump.o \
|
|
||||||
codegen_ops_logic.o codegen_ops_misc.o codegen_ops_mmx_arith.o codegen_ops_mmx_cmp.o \
|
|
||||||
codegen_ops_mmx_loadstore.o codegen_ops_mmx_logic.o codegen_ops_mmx_pack.o codegen_ops_mmx_shift.o \
|
|
||||||
codegen_ops_mov.o codegen_ops_shift.o codegen_ops_stack.o codegen_reg.o codegen_timing_486.o \
|
|
||||||
codegen_timing_686.o codegen_timing_common.o codegen_timing_cyrixiii.o codegen_timing_k6.o codegen_timing_p6.o codegen_timing_pentium.o \
|
|
||||||
codegen_timing_winchip.o codegen_timing_winchip2.o compaq.o config.o cpu.o cpu_tables.o cs8230.o device.o \
|
|
||||||
dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o f82c710_upc.o fdc.o fdc37c665.o fdc37c93x.o fdd.o \
|
|
||||||
fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430hx.o i430lx.o i430fx.o i430vx.o i440fx.o i440bx.o ide.o \
|
|
||||||
ide_atapi.o ide_sff8038i.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o \
|
|
||||||
joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
|
||||||
keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o \
|
|
||||||
mem.o mem_bios.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o mouse_serial.o \
|
|
||||||
mvp3.o neat.o nmi.o nvr.o nvr_tc8521.o olivetti_m24.o opti495.o paths.o pc.o pc87306.o pc87307.o pci.o pic.o \
|
|
||||||
piix.o piix_pm.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o pzx.o rom.o rtc.o rtc_tc8521.o scamp.o scat.o scsi.o \
|
|
||||||
scsi_53c400.o scsi_aha1540.o scsi_cd.o scsi_hd.o scsi_ibm.o scsi_zip.o serial.o sio.o sis496.o sl82c460.o \
|
|
||||||
sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_audiopci.o sound_azt2316a.o sound_cms.o sound_dbopl.o \
|
|
||||||
sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o \
|
|
||||||
sound_resid.o sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o \
|
|
||||||
sound_ym7128.o soundopenal.o sst39sf010.o superxt.o t1000.o t3100e.o tandy_eeprom.o tandy_rom.o timer.o um8881f.o um8669f.o \
|
|
||||||
vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o \
|
|
||||||
vid_cl5429.o vid_colorplus.o vid_compaq_cga.o vid_ddc.o vid_ega.o vid_et4000.o vid_et4000w32.o \
|
|
||||||
vid_et4000w32i.o vid_genius.o vid_hercules.o vid_ht216.o vid_icd2061.o vid_ics2595.o vid_im1024.o vid_incolor.o vid_mda.o \
|
|
||||||
vid_mga.o vid_olivetti_m24.o vid_oti037.c vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
|
|
||||||
vid_pcjr.o vid_pgc.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o vid_stg_ramdac.o vid_svga.o \
|
|
||||||
vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \
|
|
||||||
vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_voodoo_banshee.o vid_voodoo_banshee_blitter.o \
|
|
||||||
vid_voodoo_blitter.o vid_voodoo_display.o vid_voodoo_fb.o vid_voodoo_fifo.o vid_voodoo_reg.o \
|
|
||||||
vid_voodoo_render.o vid_voodoo_setup.o vid_voodoo_texture.o vid_wy700.o video.o vl82c480.o \
|
|
||||||
vt82c586b.o w83877tf.o w83977tf.o wd76c10.o x86seg.o x87.o x87_timings.o xi8088.c xtide.o zenith.o win-midi.o wx-main.o \
|
|
||||||
wx-config_sel.o wx-dialogbox.o wx-hostconfig.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o \
|
|
||||||
wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o \
|
|
||||||
wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
|
|
||||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o \
|
|
||||||
wx-joystickconfig.o wx-createdisc.o wx.res
|
|
||||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
|
||||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
|
||||||
MVHDOBJ = cwalk.o libxml2_encoding.o minivhd_convert.o minivhd_create.o minivhd_io.o minivhd_manage.o minivhd_struct_rw.o minivhd_util.o
|
|
||||||
NETOBJ = ne2000.o nethandler.o
|
|
||||||
|
|
||||||
LIBS = -Wl,--subsystem,windows -mthreads -mwindows -lwxmsw$(WXVERSION)u_xrc -lwxmsw$(WXVERSION)u_html -lwxmsw$(WXVERSION)u_adv -lwxbase$(WXVERSION)u_xml -lwxmsw$(WXVERSION)u_core -lwxbase$(WXVERSION)u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -lcomdlg32 -lwinspool -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lmingw32 -lopengl32 -lopenal32 -lstdc++ -lSDL2main -lSDL2 -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc -lwsock32 -liphlpapi
|
|
||||||
|
|
||||||
PCem-wx-SDL2.exe: $(OBJ) $(DBOBJ) $(SIDOBJ) $(MVHDOBJ) $(NETOBJ) libslirp.a
|
|
||||||
$(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) $(MVHDOBJ) $(NETOBJ) slirp/libslirp.a -o "PCem-wx-SDL2.exe" $(LIBS)
|
|
||||||
strip -s PCem-wx-SDL2.exe
|
|
||||||
|
|
||||||
libslirp.a:
|
|
||||||
$(MAKE) -C slirp
|
|
||||||
|
|
||||||
all : libslirp.a PCem-wx-SDL2.exe
|
|
||||||
|
|
||||||
clean :
|
|
||||||
rm *.o
|
|
||||||
rm PCem-wx-SDL2.exe
|
|
||||||
rm *.res
|
|
||||||
|
|
||||||
wx-resources.o : pc.xrc
|
|
||||||
-wxrc -c pc.xrc -o wx-resources.cpp
|
|
||||||
$(CPP) $(CXXFLAGS) -c wx-resources.cpp
|
|
||||||
|
|
||||||
%.o : %.c
|
|
||||||
$(CC) $(CFLAGS) -c $<
|
|
||||||
|
|
||||||
%.o : %.cc
|
|
||||||
$(CPP) $(CXXFLAGS) -c $<
|
|
||||||
|
|
||||||
%.o : %.cpp
|
|
||||||
$(CPP) $(CXXFLAGS) -c $<
|
|
||||||
|
|
||||||
wx.res: wx.rc
|
|
||||||
$(WINDRES) -I$(WXINCLUDE)/../ -i wx.rc --input-format=rc -o wx.res -O coff
|
|
||||||
47
src/Makefile.mingw64
Normal file
47
src/Makefile.mingw64
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
VPATH = . dosbox resid-fp
|
||||||
|
CPP = g++.exe
|
||||||
|
CC = gcc.exe
|
||||||
|
WINDRES = windres.exe
|
||||||
|
CFLAGS = -O3 -fomit-frame-pointer -msse2 -Wall -Werror -fno-strict-aliasing
|
||||||
|
OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o cdrom-iso.o \
|
||||||
|
codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.o compaq.o config.o cpu.o dac.o \
|
||||||
|
device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o headland.o i430lx.o i430fx.o \
|
||||||
|
i430vx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \
|
||||||
|
keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_ps2.o \
|
||||||
|
mouse_serial.o neat.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o ps2_mca.o ps2_nvr.o rom.o rtc.o \
|
||||||
|
scat.o serial.o sis496.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o sound_dbopl.o \
|
||||||
|
sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \
|
||||||
|
sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \
|
||||||
|
soundopenal.o tandy_eeprom.o tandy_rom.o timer.o um8881f.o um8669f.o vid_ati_eeprom.o vid_ati_mach64.o vid_ati18800.o \
|
||||||
|
vid_ati28800.o vid_ati68860_ramdac.o vid_cga.o vid_cl5429.o vid_colorplus.o vid_ega.o vid_et4000.o \
|
||||||
|
vid_et4000w32.o vid_et4000w32i.o vid_genius.o vid_hercules.o vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o \
|
||||||
|
vid_olivetti_m24.o vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \
|
||||||
|
vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o \
|
||||||
|
vid_svga_render.o vid_tandy.o vid_tandysl.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o \
|
||||||
|
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \
|
||||||
|
win-ddraw-fs.o win-deviceconfig.o win-hdconf.o win-joystick.o win-joystickconfig.o win-keyboard.o win-midi.o win-mouse.o \
|
||||||
|
win-status.o win-video.o x86seg.o x87.o xtide.o pc.res
|
||||||
|
DBOBJ = dbopl.o vid_cga_comp.o
|
||||||
|
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||||
|
|
||||||
|
|
||||||
|
LIBS = -mwindows -lwinmm -lopenal32 -lddraw -ldinput -ldxguid -ld3d9 -lstdc++
|
||||||
|
|
||||||
|
PCem64.exe: $(OBJ) $(DBOBJ) $(SIDOBJ)
|
||||||
|
$(CC) $(OBJ) $(DBOBJ) $(SIDOBJ) -o "PCem64.exe" $(LIBS)
|
||||||
|
|
||||||
|
all : PCem64.exe
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm *.o
|
||||||
|
rm *.exe
|
||||||
|
rm *.res
|
||||||
|
|
||||||
|
%.o : %.c
|
||||||
|
$(CC) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
%.o : %.cc
|
||||||
|
$(CPP) $(CFLAGS) -c $<
|
||||||
|
|
||||||
|
pc.res: pc.rc
|
||||||
|
$(WINDRES) -i pc.rc --input-format=rc -o pc.res -O coff
|
||||||
102
src/acc2036.c
102
src/acc2036.c
|
|
@ -1,102 +0,0 @@
|
||||||
#include "ibm.h"
|
|
||||||
#include "acc2036.h"
|
|
||||||
#include "io.h"
|
|
||||||
#include "mem.h"
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
int reg_idx;
|
|
||||||
uint8_t regs[256];
|
|
||||||
} acc2036;
|
|
||||||
|
|
||||||
static void acc2036_shadow_recalc()
|
|
||||||
{
|
|
||||||
if (acc2036.regs[0x2c] & 8)
|
|
||||||
{
|
|
||||||
switch (acc2036.regs[0x22] & 3)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
|
|
||||||
if (acc2036.regs[0x2c] & 4)
|
|
||||||
{
|
|
||||||
switch (acc2036.regs[0x22] & 3)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void acc2036_write(uint16_t addr, uint8_t val, void *p)
|
|
||||||
{
|
|
||||||
if (!(addr & 1))
|
|
||||||
acc2036.reg_idx = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
acc2036.regs[acc2036.reg_idx] = val;
|
|
||||||
// pclog("Write ACC2036 R%02x %02x %04x:%04x %i\n", acc2036.reg_idx, val, CS,cpu_state.pc, ins);
|
|
||||||
|
|
||||||
switch (acc2036.reg_idx)
|
|
||||||
{
|
|
||||||
case 0x22:
|
|
||||||
case 0x2c:
|
|
||||||
acc2036_shadow_recalc();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x23:
|
|
||||||
mem_mapping_disable(&ram_remapped_mapping);
|
|
||||||
if (val & 0x10)
|
|
||||||
{
|
|
||||||
if (acc2036.regs[0x2c] & 0xc)
|
|
||||||
mem_remap_top_256k();
|
|
||||||
else
|
|
||||||
mem_remap_top_384k();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t acc2036_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
if (!(addr & 1))
|
|
||||||
return acc2036.reg_idx;
|
|
||||||
|
|
||||||
if (acc2036.reg_idx >= 0xbc)
|
|
||||||
return 0xff;
|
|
||||||
|
|
||||||
return acc2036.regs[acc2036.reg_idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
void acc2036_init()
|
|
||||||
{
|
|
||||||
memset(&acc2036, 0, sizeof(acc2036));
|
|
||||||
io_sethandler(0x00f2, 0x0002, acc2036_read, NULL, NULL, acc2036_write, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
void acc2036_init();
|
|
||||||
119
src/acc2168.c
119
src/acc2168.c
|
|
@ -1,119 +0,0 @@
|
||||||
#include "ibm.h"
|
|
||||||
#include "acc2168.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
#include "io.h"
|
|
||||||
#include "mem.h"
|
|
||||||
#include "x86.h"
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
int reg_idx;
|
|
||||||
uint8_t regs[256];
|
|
||||||
uint8_t port_62;
|
|
||||||
} acc2168;
|
|
||||||
|
|
||||||
static void acc2168_shadow_recalc()
|
|
||||||
{
|
|
||||||
if (acc2168.regs[0x02] & 8)
|
|
||||||
{
|
|
||||||
switch (acc2168.regs[0x02] & 0x30)
|
|
||||||
{
|
|
||||||
case 0x00:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x10:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x20:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x30:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
|
|
||||||
if (acc2168.regs[0x02] & 4)
|
|
||||||
{
|
|
||||||
switch (acc2168.regs[0x02] & 0x30)
|
|
||||||
{
|
|
||||||
case 0x00:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x10:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x20:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 0x30:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void acc2168_write(uint16_t addr, uint8_t val, void *p)
|
|
||||||
{
|
|
||||||
// pclog("acc2168_write: addr=%04x val=%02x\n", addr, val);
|
|
||||||
if (!(addr & 1))
|
|
||||||
acc2168.reg_idx = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
acc2168.regs[acc2168.reg_idx] = val;
|
|
||||||
// pclog("acc2168_write: idx=%02x val=%02x %04x:%04x\n", acc2168.reg_idx, val, CS,cpu_state.pc);
|
|
||||||
|
|
||||||
switch (acc2168.reg_idx)
|
|
||||||
{
|
|
||||||
case 0x02:
|
|
||||||
acc2168_shadow_recalc();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t acc2168_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
if (!(addr & 1))
|
|
||||||
return acc2168.reg_idx;
|
|
||||||
|
|
||||||
// pclog("acc2168_read: idx=%02x val=%02x\n", acc2168.reg_idx, acc2168.regs[acc2168.reg_idx]);
|
|
||||||
return acc2168.regs[acc2168.reg_idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t port78_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t port92_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
return acc2168.port_62 | 0xfc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void port92_write(uint16_t addr, uint8_t val, void *p)
|
|
||||||
{
|
|
||||||
if ((mem_a20_alt ^ val) & 2)
|
|
||||||
{
|
|
||||||
mem_a20_alt = val & 2;
|
|
||||||
mem_a20_recalc();
|
|
||||||
}
|
|
||||||
if ((~acc2168.port_62 & val) & 1)
|
|
||||||
{
|
|
||||||
softresetx86();
|
|
||||||
cpu_set_edx();
|
|
||||||
}
|
|
||||||
acc2168.port_62 = val | 0xfC;
|
|
||||||
}
|
|
||||||
|
|
||||||
void acc2168_init()
|
|
||||||
{
|
|
||||||
memset(&acc2168, 0, sizeof(acc2168));
|
|
||||||
io_sethandler(0x00f2, 0x0002, acc2168_read, NULL, NULL, acc2168_write, NULL, NULL, NULL);
|
|
||||||
io_sethandler(0x0078, 0x0001, port78_read, NULL, NULL, NULL, NULL, NULL, NULL);
|
|
||||||
io_sethandler(0x0092, 0x0001, port92_read, NULL, NULL, port92_write, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
void acc2168_init();
|
|
||||||
122
src/acc3221.c
122
src/acc3221.c
|
|
@ -1,122 +0,0 @@
|
||||||
#include "ibm.h"
|
|
||||||
#include "acc3221.h"
|
|
||||||
#include "fdc.h"
|
|
||||||
#include "ide.h"
|
|
||||||
#include "io.h"
|
|
||||||
#include "lpt.h"
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
int reg_idx;
|
|
||||||
uint8_t regs[256];
|
|
||||||
} acc3221;
|
|
||||||
|
|
||||||
#define REG_BE_LPT1_DISABLE (1 << 4)
|
|
||||||
|
|
||||||
#define REG_DB_SERIAL1_DISABLE (1 << 4)
|
|
||||||
#define REG_DB_SERIAL2_DISABLE (1 << 1)
|
|
||||||
|
|
||||||
#define REG_DE_SIRQ3_SOURCE (3 << 6)
|
|
||||||
#define REG_DE_SIRQ3_SERIAL1 (1 << 6)
|
|
||||||
#define REG_DE_SIRQ3_SERIAL2 (3 << 6)
|
|
||||||
|
|
||||||
#define REG_DE_SIRQ4_SOURCE (3 << 4)
|
|
||||||
#define REG_DE_SIRQ4_SERIAL1 (1 << 4)
|
|
||||||
#define REG_DE_SIRQ4_SERIAL2 (3 << 4)
|
|
||||||
|
|
||||||
#define REG_FB_FDC_DISABLE (1 << 1)
|
|
||||||
|
|
||||||
#define REG_FE_IDE_DISABLE (1 << 1)
|
|
||||||
|
|
||||||
static void acc3221_write(uint16_t addr, uint8_t val, void *p)
|
|
||||||
{
|
|
||||||
if (!(addr & 1))
|
|
||||||
acc3221.reg_idx = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
acc3221.regs[acc3221.reg_idx] = val;
|
|
||||||
// pclog("Write ACC2036 R%02x %02x %04x:%04x %i\n", acc2036.reg_idx, val, CS,cpu_state.pc, ins);
|
|
||||||
|
|
||||||
if (acc3221.reg_idx >= 0xbc)
|
|
||||||
{
|
|
||||||
// pclog("Write ACC3221 R%02x %02x %04x:%04x %i\n", acc3221.reg_idx, val, CS,cpu_state.pc, ins);
|
|
||||||
fdc_remove();
|
|
||||||
if (!(acc3221.regs[0xfb] & REG_FB_FDC_DISABLE))
|
|
||||||
fdc_add();
|
|
||||||
|
|
||||||
serial1_remove();
|
|
||||||
if (!(acc3221.regs[0xdb] & REG_DB_SERIAL1_DISABLE))
|
|
||||||
{
|
|
||||||
uint16_t addr = (acc3221.regs[0xdc] & 0x7f) << 2;
|
|
||||||
|
|
||||||
if ((acc3221.regs[0xde] & REG_DE_SIRQ3_SOURCE) == REG_DE_SIRQ3_SERIAL1)
|
|
||||||
{
|
|
||||||
// pclog("COM1 addr %03x IRQ 3\n", addr);
|
|
||||||
serial1_set(addr, 3);
|
|
||||||
}
|
|
||||||
else if ((acc3221.regs[0xde] & REG_DE_SIRQ4_SOURCE) == REG_DE_SIRQ4_SERIAL1)
|
|
||||||
{
|
|
||||||
// pclog("COM1 addr %03x IRQ 4\n", addr);
|
|
||||||
serial1_set(addr, 4);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// pclog("COM1 addr %03x no IRQ\n", addr);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// pclog("COM1 disabled\n");
|
|
||||||
|
|
||||||
serial2_remove();
|
|
||||||
if (!(acc3221.regs[0xdb] & REG_DB_SERIAL2_DISABLE))
|
|
||||||
{
|
|
||||||
uint16_t addr = (acc3221.regs[0xdd] & 0x7f) << 2;
|
|
||||||
|
|
||||||
if ((acc3221.regs[0xde] & REG_DE_SIRQ3_SOURCE) == REG_DE_SIRQ3_SERIAL2)
|
|
||||||
{
|
|
||||||
// pclog("COM2 addr %03x IRQ 3\n", addr);
|
|
||||||
serial2_set(addr, 3);
|
|
||||||
}
|
|
||||||
else if ((acc3221.regs[0xde] & REG_DE_SIRQ4_SOURCE) == REG_DE_SIRQ4_SERIAL2)
|
|
||||||
{
|
|
||||||
// pclog("COM2 addr %03x IRQ 4\n", addr);
|
|
||||||
serial2_set(addr, 4);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// pclog("COM2 addr %03x no IRQ\n", addr);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// pclog("COM2 disabled\n");
|
|
||||||
|
|
||||||
lpt1_remove();
|
|
||||||
lpt2_remove();
|
|
||||||
if (!(acc3221.regs[0xbe] & REG_BE_LPT1_DISABLE))
|
|
||||||
{
|
|
||||||
// pclog("LPT1 addr %03x\n", acc3221.regs[0xbf] << 2);
|
|
||||||
lpt1_init(acc3221.regs[0xbf] << 2);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// pclog("LPT1 disabled\n");
|
|
||||||
|
|
||||||
ide_pri_disable();
|
|
||||||
if (!(acc3221.regs[0xfe] & REG_FE_IDE_DISABLE))
|
|
||||||
ide_pri_enable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t acc3221_read(uint16_t addr, void *p)
|
|
||||||
{
|
|
||||||
if (!(addr & 1))
|
|
||||||
return acc3221.reg_idx;
|
|
||||||
|
|
||||||
if (acc3221.reg_idx < 0xbc)
|
|
||||||
return 0xff;
|
|
||||||
|
|
||||||
return acc3221.regs[acc3221.reg_idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
void acc3221_init()
|
|
||||||
{
|
|
||||||
memset(&acc3221, 0, sizeof(acc3221));
|
|
||||||
io_sethandler(0x00f2, 0x0002, acc3221_read, NULL, NULL, acc3221_write, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
void acc3221_init();
|
|
||||||
127
src/acer386sx.c
127
src/acer386sx.c
|
|
@ -1,92 +1,22 @@
|
||||||
#include "ibm.h"
|
#include "ibm.h"
|
||||||
#include "device.h"
|
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "lpt.h"
|
|
||||||
#include "mem.h"
|
|
||||||
#include "serial.h"
|
|
||||||
#include "vid_oti067.h"
|
|
||||||
|
|
||||||
#include "acer386sx.h"
|
#include "acer386sx.h"
|
||||||
|
|
||||||
static int acer_index = 0;
|
static int acer_index = 0;
|
||||||
static uint8_t acer_regs[256];
|
static uint8_t acer_regs[256];
|
||||||
static uint8_t acer_last_write;
|
|
||||||
static int acer_locked;
|
|
||||||
static void *acer_oti067;
|
|
||||||
|
|
||||||
void acer386sx_set_oti067(void *oti067)
|
|
||||||
{
|
|
||||||
acer_oti067 = oti067;
|
|
||||||
}
|
|
||||||
|
|
||||||
void acer386sx_write(uint16_t addr, uint8_t val, void *priv)
|
void acer386sx_write(uint16_t addr, uint8_t val, void *priv)
|
||||||
{
|
{
|
||||||
if (addr & 1)
|
if (addr & 1)
|
||||||
{
|
acer_regs[acer_index] = val;
|
||||||
if (acer_locked)
|
|
||||||
{
|
|
||||||
if (acer_last_write == 0x14 && val == 0x09)
|
|
||||||
acer_locked = 0;
|
|
||||||
|
|
||||||
acer_last_write = val;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (acer_index == 0xff && val == 0xff)
|
|
||||||
acer_locked = 1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pclog("Write ACER reg %02x %02x %08x\n", acer_index, val, cs);
|
|
||||||
acer_regs[acer_index] = val;
|
|
||||||
|
|
||||||
switch (acer_index)
|
|
||||||
{
|
|
||||||
case 0xa:
|
|
||||||
switch ((val >> 4) & 3)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mem_set_mem_state(0xe0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0xb:
|
|
||||||
switch ((val >> 4) & 3)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_EXTERNAL);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
acer_index = val;
|
acer_index = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t acer386sx_read(uint16_t addr, void *priv)
|
uint8_t acer386sx_read(uint16_t addr, void *priv)
|
||||||
{
|
{
|
||||||
if (acer_locked)
|
|
||||||
return 0xff;
|
|
||||||
if (addr & 1)
|
if (addr & 1)
|
||||||
{
|
{
|
||||||
if ((acer_index >= 0xc0 || acer_index == 0x20) && cpu_iscyrix)
|
if ((acer_index >= 0xc0 || acer_index == 0x20) && cpu_iscyrix)
|
||||||
|
|
@ -97,60 +27,7 @@ uint8_t acer386sx_read(uint16_t addr, void *priv)
|
||||||
return acer_index;
|
return acer_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t acer386sx_37f = 0, acer386sx_io = 0;
|
|
||||||
void acer386sx_io_write(uint16_t addr, uint8_t val, void *priv)
|
|
||||||
{
|
|
||||||
switch (addr)
|
|
||||||
{
|
|
||||||
case 0x37f:
|
|
||||||
acer386sx_37f = val;
|
|
||||||
if (val & 4)
|
|
||||||
oti067_enable_disable(acer_oti067, 0);
|
|
||||||
else
|
|
||||||
oti067_enable_disable(acer_oti067, 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x3f3:
|
|
||||||
acer386sx_io = val;
|
|
||||||
serial1_remove();
|
|
||||||
serial2_remove();
|
|
||||||
lpt1_remove();
|
|
||||||
lpt2_remove();
|
|
||||||
|
|
||||||
switch (val & 3)
|
|
||||||
{
|
|
||||||
case 0: lpt1_init(0x378); break;
|
|
||||||
case 1: lpt1_init(0x3bc); break;
|
|
||||||
case 2: lpt1_init(0x278); break;
|
|
||||||
}
|
|
||||||
if (!(val & 0x04))
|
|
||||||
serial1_set(0x3f8, 4);
|
|
||||||
if (!(val & 0x08))
|
|
||||||
serial2_set(0x2f8, 3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t acer386sx_io_read(uint16_t addr, void *priv)
|
|
||||||
{
|
|
||||||
switch (addr)
|
|
||||||
{
|
|
||||||
case 0x37f:
|
|
||||||
return acer386sx_37f;
|
|
||||||
|
|
||||||
case 0x3f3:
|
|
||||||
return acer386sx_io;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
void acer386sx_init()
|
void acer386sx_init()
|
||||||
{
|
{
|
||||||
io_sethandler(0x0022, 0x0002, acer386sx_read, NULL, NULL, acer386sx_write, NULL, NULL, NULL);
|
io_sethandler(0x0022, 0x0002, acer386sx_read, NULL, NULL, acer386sx_write, NULL, NULL, NULL);
|
||||||
io_sethandler(0x037f, 0x0001, acer386sx_io_read, NULL, NULL, acer386sx_io_write, NULL, NULL, NULL);
|
|
||||||
io_sethandler(0x03f3, 0x0001, acer386sx_io_read, NULL, NULL, acer386sx_io_write, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
acer386sx_io = 0;
|
|
||||||
acer386sx_37f = 0;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1 @@
|
||||||
void acer386sx_init();
|
void acer386sx_init();
|
||||||
void acer386sx_set_oti067(void *oti067);
|
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,8 @@ void ali1429_write(uint16_t port, uint8_t val, void *priv)
|
||||||
ali1429_recalc();
|
ali1429_recalc();
|
||||||
break;
|
break;
|
||||||
case 0x14:
|
case 0x14:
|
||||||
|
shadowbios = val & 1;
|
||||||
|
shadowbios_write = val & 2;
|
||||||
ali1429_recalc();
|
ali1429_recalc();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
265
src/allegro-gui-config-sel.c
Normal file
265
src/allegro-gui-config-sel.c
Normal file
|
|
@ -0,0 +1,265 @@
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "allegro-gui.h"
|
||||||
|
#include "config.h"
|
||||||
|
#undef printf
|
||||||
|
typedef struct config_t
|
||||||
|
{
|
||||||
|
char name[512];
|
||||||
|
struct config_t *next;
|
||||||
|
} config_t;
|
||||||
|
|
||||||
|
static config_t *config_head;
|
||||||
|
|
||||||
|
static char *get_config(int nr);
|
||||||
|
static int get_config_nr();
|
||||||
|
static void free_configs();
|
||||||
|
static void populate_configs();
|
||||||
|
|
||||||
|
static char *list_proc_joystick(int index, int *list_size)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
config_t *config = config_head;
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
while (config)
|
||||||
|
{
|
||||||
|
c++;
|
||||||
|
config = config->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; c < index; c++)
|
||||||
|
{
|
||||||
|
if (!config)
|
||||||
|
return NULL;
|
||||||
|
config = config->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return config->name;
|
||||||
|
// return joystick_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char config_name[256];
|
||||||
|
|
||||||
|
static DIALOG new_config_dialog[] =
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 480,80,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 240-148, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||||
|
{d_button_proc, 240+4, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||||
|
|
||||||
|
{d_edit_proc, 8, 32, 464, 16, 0, 0xffffff, 0, 0, 255, 0, config_name, 0, 0}, // 3
|
||||||
|
|
||||||
|
{d_text_proc, 240-29*4, 16, 29*8, 16, 0, 0xffffff, 0, 0, 255, 0, "Please type new config name :", 0, 0},
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int new_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
config_name[0] = 0;
|
||||||
|
new_config_dialog[3].d2 = 0;
|
||||||
|
|
||||||
|
position_dialog(new_config_dialog, SCREEN_W/2 - new_config_dialog[0].w/2, SCREEN_H/2 - new_config_dialog[0].h/2);
|
||||||
|
|
||||||
|
c = popup_dialog(new_config_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(new_config_dialog, -(SCREEN_W/2 - new_config_dialog[0].w/2), -(SCREEN_H/2 - new_config_dialog[0].h/2));
|
||||||
|
|
||||||
|
if (c == 1)
|
||||||
|
{
|
||||||
|
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, config_name);
|
||||||
|
c = settings_configure();
|
||||||
|
free_configs();
|
||||||
|
populate_configs();
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int config_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
char *name = get_config(get_config_nr());
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||||
|
loadconfig(NULL);
|
||||||
|
return settings_configure();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdd_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
char *name = get_config(get_config_nr());
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||||
|
loadconfig(NULL);
|
||||||
|
return disc_hdconf();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DIALOG config_sel_dialog[] =
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 568,372,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 416, 8, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Load", 0, 0}, // 1
|
||||||
|
{d_button_proc, 416, 348, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Quit", 0, 0}, // 2
|
||||||
|
|
||||||
|
{new_proc, 416, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "New...", 0, 0}, // 3
|
||||||
|
{config_proc, 416, 80, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0}, // 4
|
||||||
|
{hdd_proc, 416, 104, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "HDD...", 0, 0}, // 5
|
||||||
|
|
||||||
|
{d_list_proc, 8, 8, 400, 356, 0, 0xffffff, 0, 0, 0, 0, list_proc_joystick, 0, 0}, // 6
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int get_config_nr()
|
||||||
|
{
|
||||||
|
return config_sel_dialog[6].d1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void populate_configs()
|
||||||
|
{
|
||||||
|
struct al_ffblk info;
|
||||||
|
char cfg[512];
|
||||||
|
config_t *config = NULL;
|
||||||
|
|
||||||
|
strcpy(cfg, pcempath);
|
||||||
|
strcat(cfg, "/configs/*.cfg");
|
||||||
|
printf("cfg %s\n", cfg);
|
||||||
|
if (al_findfirst(cfg, &info, FA_ALL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
config_t *old_config = config;
|
||||||
|
char *ext;
|
||||||
|
|
||||||
|
config = malloc(sizeof(config_t));
|
||||||
|
if (old_config)
|
||||||
|
old_config->next = config;
|
||||||
|
else
|
||||||
|
config_head = config;
|
||||||
|
config->next = 0;
|
||||||
|
strcpy(config->name, info.name);
|
||||||
|
|
||||||
|
ext = get_extension(config->name);
|
||||||
|
if (ext && ext[0])
|
||||||
|
{
|
||||||
|
ext--;
|
||||||
|
*ext = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Found %s\n", info.name);
|
||||||
|
} while (al_findnext(&info) == 0);
|
||||||
|
|
||||||
|
al_findclose(&info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *get_config(int nr)
|
||||||
|
{
|
||||||
|
config_t *config = config_head;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
for (c = 0; c < nr; c++)
|
||||||
|
{
|
||||||
|
if (!config)
|
||||||
|
return NULL;
|
||||||
|
config = config->next;
|
||||||
|
}
|
||||||
|
if (!config)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return config->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void free_configs()
|
||||||
|
{
|
||||||
|
config_t *config = config_head;
|
||||||
|
|
||||||
|
while (config)
|
||||||
|
{
|
||||||
|
config_t *old_config = config;
|
||||||
|
|
||||||
|
config = config->next;
|
||||||
|
free(old_config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int config_sel()
|
||||||
|
{
|
||||||
|
populate_configs();
|
||||||
|
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
position_dialog(config_sel_dialog, SCREEN_W/2 - config_sel_dialog[0].w/2, SCREEN_H/2 - config_sel_dialog[0].h/2);
|
||||||
|
|
||||||
|
c = popup_dialog(config_sel_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(config_sel_dialog, -(SCREEN_W/2 - config_sel_dialog[0].w/2), -(SCREEN_H/2 - config_sel_dialog[0].h/2));
|
||||||
|
|
||||||
|
if (c == 1)
|
||||||
|
{
|
||||||
|
char *name = get_config(config_sel_dialog[6].d1);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||||
|
pclog("config_file_default=%s\n", config_file_default);
|
||||||
|
free_configs();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == 2)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free_configs();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
837
src/allegro-gui-configure.c
Normal file
837
src/allegro-gui-configure.c
Normal file
|
|
@ -0,0 +1,837 @@
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "allegro-gui.h"
|
||||||
|
#include "cpu.h"
|
||||||
|
#include "fdd.h"
|
||||||
|
#include "gameport.h"
|
||||||
|
#include "hdd.h"
|
||||||
|
#include "mem.h"
|
||||||
|
#include "model.h"
|
||||||
|
#include "mouse.h"
|
||||||
|
#include "sound.h"
|
||||||
|
#include "video.h"
|
||||||
|
#include "vid_voodoo.h"
|
||||||
|
|
||||||
|
static int romstolist[ROM_MAX];
|
||||||
|
static int settings_mouse_to_list[20], settings_list_to_mouse[20];
|
||||||
|
|
||||||
|
typedef struct allegro_list_t
|
||||||
|
{
|
||||||
|
char name[256];
|
||||||
|
int num;
|
||||||
|
} allegro_list_t;
|
||||||
|
|
||||||
|
typedef struct allegro_list_str_t
|
||||||
|
{
|
||||||
|
char name[256];
|
||||||
|
char *internal_name;
|
||||||
|
} allegro_list_str_t;
|
||||||
|
|
||||||
|
static allegro_list_t model_list[ROM_MAX+1];
|
||||||
|
static allegro_list_t video_list[GFX_MAX+1];
|
||||||
|
static allegro_list_t sound_list[GFX_MAX+1];
|
||||||
|
static allegro_list_t cpumanu_list[4];
|
||||||
|
static allegro_list_t cpu_list[32];
|
||||||
|
static allegro_list_t joystick_list[32];
|
||||||
|
static allegro_list_t mouse_list[32];
|
||||||
|
static allegro_list_str_t hdd_list[32];
|
||||||
|
|
||||||
|
static char mem_size_str[10], mem_size_units[3];
|
||||||
|
|
||||||
|
static allegro_list_t vidspeed_list[] =
|
||||||
|
{
|
||||||
|
{"8-bit", 0},
|
||||||
|
{"Slow 16-bit", 1},
|
||||||
|
{"Fast 16-bit", 2},
|
||||||
|
{"Slow VLB/PCI", 3},
|
||||||
|
{"Mid VLB/PCI", 4},
|
||||||
|
{"Fast VLB/PCI", 5},
|
||||||
|
{"", -1}
|
||||||
|
};
|
||||||
|
|
||||||
|
static allegro_list_t fdd_list[] =
|
||||||
|
{
|
||||||
|
{"None", 0},
|
||||||
|
{"5.25\" 360k", 1},
|
||||||
|
{"5.25\" 1.2M", 2},
|
||||||
|
{"5.25\" 1.2M Dual RPM", 3},
|
||||||
|
{"3.5\" 720k", 4},
|
||||||
|
{"3.5\" 1.44M", 5},
|
||||||
|
{"3.5\" 1.44M 3-Mode", 6},
|
||||||
|
{"3.5\" 2.88M", 7},
|
||||||
|
{"", -1}
|
||||||
|
};
|
||||||
|
|
||||||
|
static allegro_list_t waitstate_list[] =
|
||||||
|
{
|
||||||
|
{"System default", 0},
|
||||||
|
{"0 W/S", 1},
|
||||||
|
{"1 W/S", 2},
|
||||||
|
{"2 W/S", 3},
|
||||||
|
{"3 W/S", 4},
|
||||||
|
{"4 W/S", 5},
|
||||||
|
{"5 W/S", 6},
|
||||||
|
{"6 W/S", 7},
|
||||||
|
{"7 W/S", 8},
|
||||||
|
{"", -1}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void reset_list();
|
||||||
|
|
||||||
|
static char *list_proc_model(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (model_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return model_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_video(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (video_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return video_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_vidspeed(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (vidspeed_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vidspeed_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_sound(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (sound_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sound_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_cpumanu(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (cpumanu_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cpumanu_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_cpu(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (cpu_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cpu_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_hdd(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (hdd_list[c].internal_name)
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hdd_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_fdd(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (fdd_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fdd_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_joystick(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (joystick_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return joystick_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_mouse(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (mouse_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mouse_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *list_proc_ws(int index, int *list_size)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (waitstate_list[c].name[0])
|
||||||
|
c++;
|
||||||
|
|
||||||
|
*list_size = c;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return waitstate_list[index].name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int voodoo_config_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
deviceconfig_open(&voodoo_device);
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int model_config_proc(int msg, DIALOG *d, int c);
|
||||||
|
static int video_config_proc(int msg, DIALOG *d, int c);
|
||||||
|
static int sound_config_proc(int msg, DIALOG *d, int c);
|
||||||
|
static int list_proc(int msg, DIALOG *d, int c);
|
||||||
|
|
||||||
|
static DIALOG configure_dialog[] =
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 568,372,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 226, 348, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||||
|
{d_button_proc, 296, 348, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||||
|
|
||||||
|
{list_proc, 70*2, 12, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_model, 0, 0},
|
||||||
|
|
||||||
|
{list_proc, 70*2, 32, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_video, 0, 0},
|
||||||
|
|
||||||
|
{list_proc, 70*2, 52, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_cpumanu, 0, 0}, //5
|
||||||
|
{list_proc, 70*2, 72, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_cpu, 0, 0},
|
||||||
|
{d_list_proc, 70*2, 132, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_vidspeed, 0, 0}, //7
|
||||||
|
{list_proc, 70*2, 152, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_sound, 0, 0}, //8
|
||||||
|
|
||||||
|
{d_edit_proc, 70*2, 276, 32, 14, 0, 0xffffff, 0, 0, 3, 0, mem_size_str, 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 98*2, 276, 40, 10, 0, 0xffffff, 0, 0, 0, 0, mem_size_units, 0, 0},
|
||||||
|
|
||||||
|
{d_check_proc, 14*2, 292, 118*2, 10, 0, 0xffffff, 0, 0, 0, 0, "CMS / Game Blaster", 0, 0},
|
||||||
|
{d_check_proc, 14*2, 308, 118*2, 10, 0, 0xffffff, 0, 0, 0, 0, "Gravis Ultrasound", 0, 0},
|
||||||
|
{d_check_proc, 14*2, 324, 118*2, 10, 0, 0xffffff, 0, 0, 0, 0, "Innovation SSI-2001", 0, 0},
|
||||||
|
{d_check_proc, 14*2, 336, 118*2, 10, 0, 0xffffff, 0, 0, 0, 0, "Voodoo Graphics", 0, 0}, //14
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 16, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Machine :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 36, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Video :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 56, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "CPU type :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 76, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "CPU :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 136, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Video speed :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 156, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Soundcard :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 276, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Memory :", 0, 0},
|
||||||
|
|
||||||
|
{d_check_proc, 14*2, 92, 118*2, 10, 0, 0xffffff, 0, 0, 0, 0, "Dynamic Recompiler", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 196, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Drive A: :", 0, 0},
|
||||||
|
{d_text_proc, 16*2, 216, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Drive B: :", 0, 0},
|
||||||
|
{d_list_proc, 70*2, 192, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_fdd, 0, 0}, //25
|
||||||
|
{d_list_proc, 70*2, 212, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_fdd, 0, 0},
|
||||||
|
|
||||||
|
{video_config_proc, 452, 36, 100, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0}, //27
|
||||||
|
{sound_config_proc, 452, 156, 100, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0},
|
||||||
|
{voodoo_config_proc, 452, 336, 100, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 236, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Joystick :", 0, 0},
|
||||||
|
{d_list_proc, 70*2, 232, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_joystick, 0, 0}, //31
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 256, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Mouse :", 0, 0},
|
||||||
|
{d_list_proc, 70*2, 252, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_mouse, 0, 0}, //33
|
||||||
|
|
||||||
|
{model_config_proc, 452, 12, 100, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 116, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "Waitstates :", 0, 0},
|
||||||
|
{d_list_proc, 70*2, 112, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_ws, 0, 0}, //36
|
||||||
|
|
||||||
|
{d_text_proc, 16*2, 176, 40, 10, 0, 0xffffff, 0, 0, 0, 0, "HDD :", 0, 0},
|
||||||
|
{d_list_proc, 70*2, 172, 152*2, 20, 0, 0xffffff, 0, 0, 0, 0, list_proc_hdd, 0, 0}, //38
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void update_hdd_list(int model, int use_selected_hdd)
|
||||||
|
{
|
||||||
|
memset(hdd_list, 0, sizeof(hdd_list));
|
||||||
|
|
||||||
|
if (models[model].flags & MODEL_HAS_IDE)
|
||||||
|
{
|
||||||
|
strcpy(hdd_list[0].name, "Internal IDE");
|
||||||
|
hdd_list[0].internal_name = "internal_ide";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int c = 0, d = 0;
|
||||||
|
char old_name[16];
|
||||||
|
|
||||||
|
if (use_selected_hdd)
|
||||||
|
{
|
||||||
|
c = configure_dialog[38].d1;
|
||||||
|
|
||||||
|
if (c != -1 && hdd_list[c].internal_name)
|
||||||
|
strncpy(old_name, hdd_list[c].internal_name, sizeof(old_name)-1);
|
||||||
|
else
|
||||||
|
strcpy(old_name, "none");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
strncpy(old_name, hdd_controller_name, sizeof(old_name)-1);
|
||||||
|
|
||||||
|
configure_dialog[38].d1 = 0;
|
||||||
|
pclog("HDD list %i\n", model);
|
||||||
|
c = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *s = hdd_controller_get_name(c);
|
||||||
|
|
||||||
|
if (s[0] == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if ((((hdd_controller_get_flags(c) & DEVICE_AT) && !(models[model].flags & MODEL_AT)) ||
|
||||||
|
(hdd_controller_get_flags(c) & DEVICE_MCA) != (models[model].flags & MODEL_MCA)) && c)
|
||||||
|
{
|
||||||
|
pclog("Skip %i 1 %s\n", c, s);
|
||||||
|
c++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!hdd_controller_available(c))
|
||||||
|
{
|
||||||
|
pclog("Skip %i 2 %s\n", c, s);
|
||||||
|
c++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(hdd_list[d].name, s);
|
||||||
|
hdd_list[d].internal_name = hdd_controller_get_internal_name(c);
|
||||||
|
|
||||||
|
if (!strcmp(old_name, hdd_list[d].internal_name))
|
||||||
|
configure_dialog[38].d1 = d;
|
||||||
|
|
||||||
|
c++;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mouse_valid(int type, int model)
|
||||||
|
{
|
||||||
|
if ((type & MOUSE_TYPE_IF_MASK) == MOUSE_TYPE_PS2 && !(models[model].flags & MODEL_PS2))
|
||||||
|
return 0;
|
||||||
|
if ((type & MOUSE_TYPE_IF_MASK) == MOUSE_TYPE_AMSTRAD && !(models[model].flags & MODEL_AMSTRAD))
|
||||||
|
return 0;
|
||||||
|
if ((type & MOUSE_TYPE_IF_MASK) == MOUSE_TYPE_OLIM24 && !(models[model].flags & MODEL_OLIM24))
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update_mouse_list()
|
||||||
|
{
|
||||||
|
int sel_model = model_list[configure_dialog[3].d1].num;
|
||||||
|
int c = 0, d = 0;
|
||||||
|
int new_mouse = settings_list_to_mouse[configure_dialog[33].d1];
|
||||||
|
|
||||||
|
while (mouse_get_name(c))
|
||||||
|
{
|
||||||
|
int type = mouse_get_type(c);
|
||||||
|
|
||||||
|
settings_mouse_to_list[c] = d;
|
||||||
|
|
||||||
|
if (mouse_valid(type, sel_model))
|
||||||
|
{
|
||||||
|
strcpy(mouse_list[d].name, mouse_get_name(c));
|
||||||
|
settings_list_to_mouse[d] = c;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
mouse_list[d].name[0] = 0;
|
||||||
|
|
||||||
|
if (mouse_valid(mouse_get_type(new_mouse), sel_model))
|
||||||
|
configure_dialog[33].d1 = settings_mouse_to_list[new_mouse];
|
||||||
|
else
|
||||||
|
configure_dialog[33].d1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int list_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int old = d->d1;
|
||||||
|
int ret = d_list_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (d->d1 != old)
|
||||||
|
{
|
||||||
|
int new_model = model_list[configure_dialog[3].d1].num;
|
||||||
|
int new_cpu_m = configure_dialog[5].d1;
|
||||||
|
int new_cpu = configure_dialog[6].d1;
|
||||||
|
int new_dynarec = configure_dialog[22].flags & D_SELECTED;
|
||||||
|
int new_gfxcard = video_old_to_new(video_list[configure_dialog[4].d1].num);
|
||||||
|
int new_mem_size;
|
||||||
|
int cpu_flags, cpu_type;
|
||||||
|
|
||||||
|
reset_list();
|
||||||
|
|
||||||
|
if (models[new_model].fixed_gfxcard)
|
||||||
|
configure_dialog[4].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[4].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
cpu_flags = models[new_model].cpu[new_cpu_m].cpus[new_cpu].cpu_flags;
|
||||||
|
configure_dialog[22].flags = (((cpu_flags & CPU_SUPPORTS_DYNAREC) && new_dynarec) || (cpu_flags & CPU_REQUIRES_DYNAREC)) ? D_SELECTED : 0;
|
||||||
|
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC) || (cpu_flags & CPU_REQUIRES_DYNAREC))
|
||||||
|
configure_dialog[22].flags |= D_DISABLED;
|
||||||
|
|
||||||
|
sscanf(mem_size_str, "%i", &new_mem_size);
|
||||||
|
new_mem_size &= ~(models[new_model].ram_granularity - 1);
|
||||||
|
if (new_mem_size < models[new_model].min_ram)
|
||||||
|
new_mem_size = models[new_model].min_ram;
|
||||||
|
else if (new_mem_size > models[new_model].max_ram)
|
||||||
|
new_mem_size = models[new_model].max_ram;
|
||||||
|
sprintf(mem_size_str, "%i", new_mem_size);
|
||||||
|
|
||||||
|
if (models[new_model].flags & MODEL_AT)
|
||||||
|
sprintf(mem_size_units, "MB");
|
||||||
|
else
|
||||||
|
sprintf(mem_size_units, "kB");
|
||||||
|
|
||||||
|
if (!video_card_has_config(new_gfxcard))
|
||||||
|
configure_dialog[27].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[27].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
if (!sound_card_has_config(configure_dialog[9].d1))
|
||||||
|
configure_dialog[28].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[28].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
update_mouse_list();
|
||||||
|
|
||||||
|
if (!model_getdevice(new_model))
|
||||||
|
configure_dialog[34].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[34].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
cpu_type = models[new_model].cpu[new_cpu_m].cpus[new_cpu].cpu_type;
|
||||||
|
if (cpu_type < CPU_286 || cpu_type > CPU_386DX)
|
||||||
|
configure_dialog[36].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[36].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
update_hdd_list(new_model, 1);
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int video_config_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
int new_gfxcard = video_old_to_new(video_list[configure_dialog[4].d1].num);
|
||||||
|
|
||||||
|
deviceconfig_open(video_card_getdevice(new_gfxcard));
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
static int sound_config_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
int new_sndcard = sound_list[configure_dialog[8].d1].num;
|
||||||
|
|
||||||
|
deviceconfig_open(sound_card_getdevice(new_sndcard));
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
static int model_config_proc(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
int model = model_list[configure_dialog[3].d1].num;
|
||||||
|
|
||||||
|
deviceconfig_open(model_getdevice(model));
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void reset_list()
|
||||||
|
{
|
||||||
|
int model = model_list[configure_dialog[3].d1].num;
|
||||||
|
int cpumanu = configure_dialog[5].d1;
|
||||||
|
int cpu = configure_dialog[6].d1;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
memset(cpumanu_list, 0, sizeof(cpumanu_list));
|
||||||
|
memset(cpu_list, 0, sizeof(cpu_list));
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
while (models[model].cpu[c].cpus != NULL && c < 3)
|
||||||
|
{
|
||||||
|
strcpy(cpumanu_list[c].name, models[model].cpu[c].name);
|
||||||
|
cpumanu_list[c].num = c;
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cpumanu >= c)
|
||||||
|
cpumanu = configure_dialog[6].d1 = c-1;
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
while (models[model].cpu[cpumanu].cpus[c].cpu_type != -1)
|
||||||
|
{
|
||||||
|
strcpy(cpu_list[c].name, models[model].cpu[cpumanu].cpus[c].name);
|
||||||
|
cpu_list[c].num = c;
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cpu >= c)
|
||||||
|
cpu = configure_dialog[7].d1 = c-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int settings_configure()
|
||||||
|
{
|
||||||
|
int c, d;
|
||||||
|
int cpu_flags;
|
||||||
|
|
||||||
|
memset(model_list, 0, sizeof(model_list));
|
||||||
|
memset(video_list, 0, sizeof(video_list));
|
||||||
|
memset(sound_list, 0, sizeof(sound_list));
|
||||||
|
|
||||||
|
for (c = 0; c < ROM_MAX; c++)
|
||||||
|
romstolist[c] = 0;
|
||||||
|
c = d = 0;
|
||||||
|
while (models[c].id != -1)
|
||||||
|
{
|
||||||
|
pclog("INITDIALOG : %i %i %i\n",c,models[c].id,romspresent[models[c].id]);
|
||||||
|
if (romspresent[models[c].id])
|
||||||
|
{
|
||||||
|
strcpy(model_list[d].name, models[c].name);
|
||||||
|
model_list[d].num = c;
|
||||||
|
if (c == model)
|
||||||
|
configure_dialog[3].d1 = d;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (models[model].fixed_gfxcard)
|
||||||
|
configure_dialog[4].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[4].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
c = d = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *s = video_card_getname(c);
|
||||||
|
|
||||||
|
if (!s[0])
|
||||||
|
break;
|
||||||
|
pclog("video_card_available : %i\n", c);
|
||||||
|
if (video_card_available(c))
|
||||||
|
{
|
||||||
|
strcpy(video_list[d].name, video_card_getname(c));
|
||||||
|
video_list[d].num = video_new_to_old(c);
|
||||||
|
if (video_new_to_old(c) == gfxcard)
|
||||||
|
configure_dialog[4].d1 = d;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!video_card_has_config(video_old_to_new(gfxcard)))
|
||||||
|
configure_dialog[27].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[27].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
c = d = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *s = sound_card_getname(c);
|
||||||
|
|
||||||
|
if (!s[0])
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (sound_card_available(c))
|
||||||
|
{
|
||||||
|
strcpy(sound_list[d].name, sound_card_getname(c));
|
||||||
|
sound_list[d].num = c;
|
||||||
|
if (c == sound_card_current)
|
||||||
|
configure_dialog[8].d1 = d;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
while (joystick_get_name(c))
|
||||||
|
{
|
||||||
|
strcpy(joystick_list[c].name, joystick_get_name(c));
|
||||||
|
if (c == joystick_type)
|
||||||
|
configure_dialog[31].d1 = c;
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
configure_dialog[33].d1 = 0;
|
||||||
|
update_mouse_list();
|
||||||
|
configure_dialog[33].d1 = settings_mouse_to_list[mouse_type];
|
||||||
|
|
||||||
|
update_hdd_list(model, 0);
|
||||||
|
|
||||||
|
if (!sound_card_has_config(configure_dialog[8].d1))
|
||||||
|
configure_dialog[28].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[28].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
configure_dialog[5].d1 = cpu_manufacturer;
|
||||||
|
configure_dialog[6].d1 = cpu;
|
||||||
|
configure_dialog[7].d1 = video_speed;
|
||||||
|
configure_dialog[36].d1 = cpu_waitstates;
|
||||||
|
reset_list();
|
||||||
|
// strcpy(cpumanu_str, models[romstomodel[romset]].cpu[cpu_manufacturer].name);
|
||||||
|
// strcpy(cpu_str, models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[cpu].name);
|
||||||
|
// strcpy(cache_str, cache_str_list[cache]);
|
||||||
|
// strcpy(vidspeed_str, vidspeed_str_list[video_speed]);
|
||||||
|
|
||||||
|
// strcpy(soundcard_str, sound_card_getname(sound_card_current));
|
||||||
|
|
||||||
|
if (GAMEBLASTER)
|
||||||
|
configure_dialog[11].flags |= D_SELECTED;
|
||||||
|
else
|
||||||
|
configure_dialog[11].flags &= ~D_SELECTED;
|
||||||
|
|
||||||
|
if (GUS)
|
||||||
|
configure_dialog[12].flags |= D_SELECTED;
|
||||||
|
else
|
||||||
|
configure_dialog[12].flags &= ~D_SELECTED;
|
||||||
|
|
||||||
|
if (SSI2001)
|
||||||
|
configure_dialog[13].flags |= D_SELECTED;
|
||||||
|
else
|
||||||
|
configure_dialog[13].flags &= ~D_SELECTED;
|
||||||
|
|
||||||
|
if (voodoo_enabled)
|
||||||
|
configure_dialog[14].flags |= D_SELECTED;
|
||||||
|
else
|
||||||
|
configure_dialog[14].flags &= ~D_SELECTED;
|
||||||
|
|
||||||
|
if (models[model].flags & MODEL_AT)
|
||||||
|
sprintf(mem_size_str, "%i", mem_size / 1024);
|
||||||
|
else
|
||||||
|
sprintf(mem_size_str, "%i", mem_size);
|
||||||
|
|
||||||
|
if (models[model].flags & MODEL_AT)
|
||||||
|
sprintf(mem_size_units, "MB");
|
||||||
|
else
|
||||||
|
sprintf(mem_size_units, "kB");
|
||||||
|
|
||||||
|
if (!model_getdevice(model))
|
||||||
|
configure_dialog[34].flags |= D_DISABLED;
|
||||||
|
else
|
||||||
|
configure_dialog[34].flags &= ~D_DISABLED;
|
||||||
|
|
||||||
|
cpu_flags = models[model].cpu[cpu_manufacturer].cpus[cpu].cpu_flags;
|
||||||
|
configure_dialog[22].flags = (((cpu_flags & CPU_SUPPORTS_DYNAREC) && cpu_use_dynarec) || (cpu_flags & CPU_REQUIRES_DYNAREC)) ? D_SELECTED : 0;
|
||||||
|
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC) || (cpu_flags & CPU_REQUIRES_DYNAREC))
|
||||||
|
configure_dialog[22].flags |= D_DISABLED;
|
||||||
|
|
||||||
|
configure_dialog[25].d1 = fdd_get_type(0);
|
||||||
|
configure_dialog[26].d1 = fdd_get_type(1);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
position_dialog(configure_dialog, SCREEN_W/2 - configure_dialog[0].w/2, SCREEN_H/2 - configure_dialog[0].h/2);
|
||||||
|
|
||||||
|
c = popup_dialog(configure_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(configure_dialog, -(SCREEN_W/2 - configure_dialog[0].w/2), -(SCREEN_H/2 - configure_dialog[0].h/2));
|
||||||
|
|
||||||
|
if (c == 1)
|
||||||
|
{
|
||||||
|
int new_model = model_list[configure_dialog[3].d1].num;
|
||||||
|
int new_gfxcard = video_list[configure_dialog[4].d1].num;
|
||||||
|
int new_sndcard = sound_list[configure_dialog[8].d1].num;
|
||||||
|
int new_cpu_m = configure_dialog[5].d1;
|
||||||
|
int new_cpu = configure_dialog[6].d1;
|
||||||
|
int new_mem_size;
|
||||||
|
int new_has_fpu = (models[new_model].cpu[new_cpu_m].cpus[new_cpu].cpu_type >= CPU_i486DX) ? 1 : 0;
|
||||||
|
int new_GAMEBLASTER = (configure_dialog[11].flags & D_SELECTED) ? 1 : 0;
|
||||||
|
int new_GUS = (configure_dialog[12].flags & D_SELECTED) ? 1 : 0;
|
||||||
|
int new_SSI2001 = (configure_dialog[13].flags & D_SELECTED) ? 1 : 0;
|
||||||
|
int new_voodoo = (configure_dialog[14].flags & D_SELECTED) ? 1 : 0;
|
||||||
|
int new_dynarec = (configure_dialog[22].flags & D_SELECTED) ? 1 : 0;
|
||||||
|
int new_fda = configure_dialog[25].d1;
|
||||||
|
int new_fdb = configure_dialog[26].d1;
|
||||||
|
int new_mouse = settings_list_to_mouse[configure_dialog[33].d1];
|
||||||
|
int new_hdd = configure_dialog[38].d1;
|
||||||
|
|
||||||
|
sscanf(mem_size_str, "%i", &new_mem_size);
|
||||||
|
new_mem_size &= ~(models[new_model].ram_granularity - 1);
|
||||||
|
if (new_mem_size < models[new_model].min_ram)
|
||||||
|
new_mem_size = models[new_model].min_ram;
|
||||||
|
else if (new_mem_size > models[new_model].max_ram)
|
||||||
|
new_mem_size = models[new_model].max_ram;
|
||||||
|
if (models[new_model].flags & MODEL_AT)
|
||||||
|
new_mem_size *= 1024;
|
||||||
|
|
||||||
|
if (new_model != model || new_gfxcard != gfxcard || new_mem_size != mem_size ||
|
||||||
|
new_has_fpu != hasfpu || new_GAMEBLASTER != GAMEBLASTER || new_GUS != GUS ||
|
||||||
|
new_SSI2001 != SSI2001 || new_sndcard != sound_card_current || new_voodoo != voodoo_enabled ||
|
||||||
|
new_dynarec != cpu_use_dynarec || new_fda != fdd_get_type(0) || new_fdb != fdd_get_type(1) ||
|
||||||
|
new_mouse != mouse_type || strncmp(hdd_list[new_hdd].internal_name, hdd_controller_name, sizeof(hdd_controller_name)-1))
|
||||||
|
{
|
||||||
|
if (has_been_inited && alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
model = new_model;
|
||||||
|
romset = model_getromset();
|
||||||
|
gfxcard = new_gfxcard;
|
||||||
|
mem_size = new_mem_size;
|
||||||
|
cpu_manufacturer = new_cpu_m;
|
||||||
|
cpu = new_cpu;
|
||||||
|
GAMEBLASTER = new_GAMEBLASTER;
|
||||||
|
GUS = new_GUS;
|
||||||
|
SSI2001 = new_SSI2001;
|
||||||
|
sound_card_current = new_sndcard;
|
||||||
|
voodoo_enabled = new_voodoo;
|
||||||
|
cpu_use_dynarec = new_dynarec;
|
||||||
|
mouse_type = new_mouse;
|
||||||
|
|
||||||
|
if (hdd_list[new_hdd].internal_name)
|
||||||
|
strncpy(hdd_controller_name, hdd_list[new_hdd].internal_name, sizeof(hdd_controller_name)-1);
|
||||||
|
else
|
||||||
|
strcpy(hdd_controller_name, "none");
|
||||||
|
|
||||||
|
mem_resize();
|
||||||
|
loadbios();
|
||||||
|
resetpchard();
|
||||||
|
|
||||||
|
fdd_set_type(0, new_fda);
|
||||||
|
fdd_set_type(1, new_fdb);
|
||||||
|
}
|
||||||
|
|
||||||
|
video_speed = configure_dialog[7].d1;
|
||||||
|
|
||||||
|
cpu_manufacturer = new_cpu_m;
|
||||||
|
cpu = new_cpu;
|
||||||
|
cpu_set();
|
||||||
|
|
||||||
|
cpu_waitstates = configure_dialog[36].d1;
|
||||||
|
cpu_update_waitstates();
|
||||||
|
|
||||||
|
joystick_type = configure_dialog[31].d1;
|
||||||
|
gameport_update_joystick_type();
|
||||||
|
|
||||||
|
saveconfig(NULL);
|
||||||
|
|
||||||
|
speedchanged();
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == 2)
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
303
src/allegro-gui-deviceconfig.c
Normal file
303
src/allegro-gui-deviceconfig.c
Normal file
|
|
@ -0,0 +1,303 @@
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "allegro-gui.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
static device_t *config_device;
|
||||||
|
|
||||||
|
#define MAX_CONFIG_SIZE 64
|
||||||
|
#define MAX_CONFIG_SELECTIONS 8
|
||||||
|
|
||||||
|
static device_config_selection_t *config_selections[MAX_CONFIG_SELECTIONS];
|
||||||
|
|
||||||
|
#define list_proc_device_func(i) \
|
||||||
|
static char *list_proc_device_ ## i(int index, int *list_size) \
|
||||||
|
{ \
|
||||||
|
device_config_selection_t *config = config_selections[i]; \
|
||||||
|
\
|
||||||
|
if (index < 0) \
|
||||||
|
{ \
|
||||||
|
int c = 0; \
|
||||||
|
\
|
||||||
|
while (config[c].description[0]) \
|
||||||
|
c++; \
|
||||||
|
\
|
||||||
|
*list_size = c; \
|
||||||
|
return NULL; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return config[index].description; \
|
||||||
|
}
|
||||||
|
|
||||||
|
list_proc_device_func(0)
|
||||||
|
list_proc_device_func(1)
|
||||||
|
list_proc_device_func(2)
|
||||||
|
list_proc_device_func(3)
|
||||||
|
list_proc_device_func(4)
|
||||||
|
list_proc_device_func(5)
|
||||||
|
list_proc_device_func(6)
|
||||||
|
list_proc_device_func(7)
|
||||||
|
|
||||||
|
static DIALOG deviceconfig_dialog[MAX_CONFIG_SIZE] =
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 568,332,0,0xffffff,0,0, 0,0,0,0,0} // 0
|
||||||
|
};
|
||||||
|
|
||||||
|
void deviceconfig_open(device_t *device)
|
||||||
|
{
|
||||||
|
DIALOG *d;
|
||||||
|
device_config_t *config = device->config;
|
||||||
|
int y = 10;
|
||||||
|
int dialog_pos = 1;
|
||||||
|
int list_pos = 0;
|
||||||
|
int c;
|
||||||
|
int id_ok, id_cancel;
|
||||||
|
|
||||||
|
memset((void *)((uintptr_t)deviceconfig_dialog) + sizeof(DIALOG), 0, sizeof(deviceconfig_dialog) - sizeof(DIALOG));
|
||||||
|
deviceconfig_dialog[0].x = deviceconfig_dialog[0].y = 0;
|
||||||
|
|
||||||
|
while (config->type != -1)
|
||||||
|
{
|
||||||
|
d = &deviceconfig_dialog[dialog_pos];
|
||||||
|
|
||||||
|
switch (config->type)
|
||||||
|
{
|
||||||
|
case CONFIG_BINARY:
|
||||||
|
d->x = 32;
|
||||||
|
d->y = y;
|
||||||
|
|
||||||
|
d->w = 118*2;
|
||||||
|
d->h = 15;
|
||||||
|
|
||||||
|
d->dp = config->description;
|
||||||
|
d->proc = d_check_proc;
|
||||||
|
|
||||||
|
d->flags = config_get_int(CFG_MACHINE, device->name, config->name, config->default_int) ? D_SELECTED : 0;
|
||||||
|
d->bg = 0xffffff;
|
||||||
|
d->fg = 0;
|
||||||
|
|
||||||
|
dialog_pos++;
|
||||||
|
|
||||||
|
y += 20;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_SELECTION:
|
||||||
|
if (list_pos >= MAX_CONFIG_SELECTIONS)
|
||||||
|
break;
|
||||||
|
|
||||||
|
d->x = 32;
|
||||||
|
d->y = y;
|
||||||
|
|
||||||
|
d->w = 80;
|
||||||
|
d->h = 15;
|
||||||
|
|
||||||
|
d->dp = config->description;
|
||||||
|
d->proc = d_text_proc;
|
||||||
|
|
||||||
|
d->flags = 0;
|
||||||
|
d->bg = 0xffffff;
|
||||||
|
d->fg = 0;
|
||||||
|
|
||||||
|
d++;
|
||||||
|
|
||||||
|
d->x = 250;
|
||||||
|
d->y = y;
|
||||||
|
|
||||||
|
d->w = 304;
|
||||||
|
d->h = 20;
|
||||||
|
|
||||||
|
switch (list_pos)
|
||||||
|
{
|
||||||
|
case 0 : d->dp = list_proc_device_0; break;
|
||||||
|
case 1 : d->dp = list_proc_device_1; break;
|
||||||
|
case 2 : d->dp = list_proc_device_2; break;
|
||||||
|
case 3 : d->dp = list_proc_device_3; break;
|
||||||
|
case 4 : d->dp = list_proc_device_4; break;
|
||||||
|
case 5 : d->dp = list_proc_device_5; break;
|
||||||
|
case 6 : d->dp = list_proc_device_6; break;
|
||||||
|
case 7 : d->dp = list_proc_device_7; break;
|
||||||
|
}
|
||||||
|
d->proc = d_list_proc;
|
||||||
|
|
||||||
|
d->flags = 0;
|
||||||
|
d->bg = 0xffffff;
|
||||||
|
d->fg = 0;
|
||||||
|
|
||||||
|
config_selections[list_pos++] = config->selection;
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
while (config->selection[c].description[0])
|
||||||
|
{
|
||||||
|
if (config_get_int(CFG_MACHINE, device->name, config->name, config->default_int) == config->selection[c].value)
|
||||||
|
d->d1 = c;
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog_pos += 2;
|
||||||
|
|
||||||
|
y += 20;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_MIDI:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
config++;
|
||||||
|
|
||||||
|
if (dialog_pos >= MAX_CONFIG_SIZE-3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
d = &deviceconfig_dialog[dialog_pos];
|
||||||
|
|
||||||
|
id_ok = dialog_pos;
|
||||||
|
id_cancel = dialog_pos + 1;
|
||||||
|
|
||||||
|
d->x = 226;
|
||||||
|
d->y = y+8;
|
||||||
|
|
||||||
|
d->w = 50;
|
||||||
|
d->h = 16;
|
||||||
|
|
||||||
|
d->dp = "OK";
|
||||||
|
d->proc = d_button_proc;
|
||||||
|
|
||||||
|
d->flags = D_EXIT;
|
||||||
|
d->bg = 0xffffff;
|
||||||
|
d->fg = 0;
|
||||||
|
|
||||||
|
d++;
|
||||||
|
|
||||||
|
d->x = 296;
|
||||||
|
d->y = y+8;
|
||||||
|
|
||||||
|
d->w = 50;
|
||||||
|
d->h = 16;
|
||||||
|
|
||||||
|
d->dp = "Cancel";
|
||||||
|
d->proc = d_button_proc;
|
||||||
|
|
||||||
|
d->flags = D_EXIT;
|
||||||
|
d->bg = 0xffffff;
|
||||||
|
d->fg = 0;
|
||||||
|
|
||||||
|
deviceconfig_dialog[0].h = y + 28;
|
||||||
|
|
||||||
|
config_device = device;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
position_dialog(deviceconfig_dialog, SCREEN_W/2 - deviceconfig_dialog[0].w/2, SCREEN_H/2 - deviceconfig_dialog[0].h/2);
|
||||||
|
|
||||||
|
c = popup_dialog(deviceconfig_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(deviceconfig_dialog, -(SCREEN_W/2 - deviceconfig_dialog[0].w/2), -(SCREEN_H/2 - deviceconfig_dialog[0].h/2));
|
||||||
|
|
||||||
|
if (c == id_ok)
|
||||||
|
{
|
||||||
|
int changed = 0;
|
||||||
|
|
||||||
|
dialog_pos = 1;
|
||||||
|
config = device->config;
|
||||||
|
|
||||||
|
while (config->type != -1)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
d = &deviceconfig_dialog[dialog_pos];
|
||||||
|
|
||||||
|
switch (config->type)
|
||||||
|
{
|
||||||
|
case CONFIG_BINARY:
|
||||||
|
val = (d->flags & D_SELECTED) ? 1 : 0;
|
||||||
|
|
||||||
|
if (val != config_get_int(CFG_MACHINE, device->name, config->name, config->default_int))
|
||||||
|
changed = 1;
|
||||||
|
|
||||||
|
dialog_pos++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_SELECTION:
|
||||||
|
if (list_pos >= MAX_CONFIG_SELECTIONS)
|
||||||
|
break;
|
||||||
|
|
||||||
|
d++;
|
||||||
|
|
||||||
|
val = config->selection[d->d1].value;
|
||||||
|
|
||||||
|
if (val != config_get_int(CFG_MACHINE, device->name, config->name, config->default_int))
|
||||||
|
changed = 1;
|
||||||
|
|
||||||
|
dialog_pos += 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_MIDI:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
config++;
|
||||||
|
|
||||||
|
if (dialog_pos >= MAX_CONFIG_SIZE-3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!changed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dialog_pos = 1;
|
||||||
|
config = device->config;
|
||||||
|
|
||||||
|
while (config->type != -1)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
d = &deviceconfig_dialog[dialog_pos];
|
||||||
|
|
||||||
|
switch (config->type)
|
||||||
|
{
|
||||||
|
case CONFIG_BINARY:
|
||||||
|
val = (d->flags & D_SELECTED) ? 1 : 0;
|
||||||
|
|
||||||
|
config_set_int(CFG_MACHINE, config_device->name, config->name, val);
|
||||||
|
|
||||||
|
dialog_pos++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_SELECTION:
|
||||||
|
if (list_pos >= MAX_CONFIG_SELECTIONS)
|
||||||
|
break;
|
||||||
|
|
||||||
|
d++;
|
||||||
|
|
||||||
|
val = config->selection[d->d1].value;
|
||||||
|
|
||||||
|
config_set_int(CFG_MACHINE, config_device->name, config->name, val);
|
||||||
|
|
||||||
|
dialog_pos += 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CONFIG_MIDI:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
config++;
|
||||||
|
|
||||||
|
if (dialog_pos >= MAX_CONFIG_SIZE-3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveconfig(NULL);
|
||||||
|
|
||||||
|
resetpchard();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == id_cancel)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
536
src/allegro-gui-hdconf.c
Normal file
536
src/allegro-gui-hdconf.c
Normal file
|
|
@ -0,0 +1,536 @@
|
||||||
|
#define _LARGEFILE_SOURCE
|
||||||
|
#define _LARGEFILE64_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "ide.h"
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "allegro-gui.h"
|
||||||
|
|
||||||
|
static char hd_path[4][260];
|
||||||
|
static char hd_sectors[4][10];
|
||||||
|
static char hd_heads[4][10];
|
||||||
|
static char hd_cylinders[4][10];
|
||||||
|
static char hd_size[4][20];
|
||||||
|
|
||||||
|
static char hd_path_new[260];
|
||||||
|
static char hd_sectors_new[10];
|
||||||
|
static char hd_heads_new[10];
|
||||||
|
static char hd_cylinders_new[10];
|
||||||
|
static char hd_size_new[20];
|
||||||
|
|
||||||
|
static int new_cdrom_channel;
|
||||||
|
|
||||||
|
static PcemHDC hdc_new[4];
|
||||||
|
|
||||||
|
static DIALOG hdparams_dialog[]=
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 194*2,86,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 126, 66, 50, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||||
|
{d_button_proc, 196, 66, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 6, 170, 10, 0, 0xffffff, 0, 0, 0, 0, "Initial settings are based on file size", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 22, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 22, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 22, 28, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_edit_proc, 44*2, 22, 16*2, 12, 0, 0xffffff, 0, 0, 2, 0, hd_sectors_new, 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 22, 16*2, 12, 0, 0xffffff, 0, 0, 3, 0, hd_heads_new, 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 22, 24*2, 12, 0, 0xffffff, 0, 0, 5, 0, hd_cylinders_new, 0, 0},
|
||||||
|
{d_text_proc, 7*2, 54, 136, 12, 0, 0xffffff, 0, 0, 0, 0, hd_size_new, 0, 0},
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int hdconf_open(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int drv = d->d2;
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_EXIT)
|
||||||
|
{
|
||||||
|
char fn[260];
|
||||||
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
||||||
|
|
||||||
|
strcpy(fn, hd_path[drv]);
|
||||||
|
ret = file_select_ex("Please choose a disc image", fn, "IMG", 260, xsize, ysize);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
uint64_t sz;
|
||||||
|
FILE *f = fopen64(fn, "rb");
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
fseeko64(f, -1, SEEK_END);
|
||||||
|
sz = ftello64(f) + 1;
|
||||||
|
fclose(f);
|
||||||
|
if ((sz % 17) == 0 && sz <= 133693440)
|
||||||
|
{
|
||||||
|
sprintf(hd_sectors_new, "17");
|
||||||
|
if (sz <= 26738688)
|
||||||
|
{
|
||||||
|
sprintf(hd_heads_new, "4");
|
||||||
|
sprintf(hd_cylinders_new, "%i", (int)((sz / 512) / 4) / 17);
|
||||||
|
}
|
||||||
|
else if (sz <= 53477376)
|
||||||
|
{
|
||||||
|
sprintf(hd_heads_new, "6");
|
||||||
|
sprintf(hd_cylinders_new, "%i", (int)((sz / 512) / 6) / 17);
|
||||||
|
}
|
||||||
|
else if (sz <= 71303168)
|
||||||
|
{
|
||||||
|
sprintf(hd_heads_new, "8");
|
||||||
|
sprintf(hd_cylinders_new, "%i", (int)((sz / 512) / 8) / 17);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf(hd_heads_new, "15");
|
||||||
|
sprintf(hd_cylinders_new, "%i", (int)((sz / 512) / 15) / 17);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf(hd_sectors_new, "63");
|
||||||
|
sprintf(hd_heads_new, "16");
|
||||||
|
sprintf(hd_cylinders_new, "%i", (int)((sz / 512) / 16) / 63);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
position_dialog(hdparams_dialog, SCREEN_W/2 - 186, SCREEN_H/2 - 86/2);
|
||||||
|
|
||||||
|
ret = popup_dialog(hdparams_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(hdparams_dialog, -(SCREEN_W/2 - 186), -(SCREEN_H/2 - 86/2));
|
||||||
|
|
||||||
|
if (ret == 1)
|
||||||
|
{
|
||||||
|
int spt, hpc, cyl;
|
||||||
|
sscanf(hd_sectors_new, "%i", &spt);
|
||||||
|
sscanf(hd_heads_new, "%i", &hpc);
|
||||||
|
sscanf(hd_cylinders_new, "%i", &cyl);
|
||||||
|
|
||||||
|
if (spt > 63)
|
||||||
|
{
|
||||||
|
alert("Drive has too many sectors (maximum is 63)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (hpc > 128)
|
||||||
|
{
|
||||||
|
alert("Drive has too many heads (maximum is 128)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (cyl > 16383)
|
||||||
|
{
|
||||||
|
alert("Drive has too many cylinders (maximum is 16383)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
hdc_new[drv].spt = spt;
|
||||||
|
hdc_new[drv].hpc = hpc;
|
||||||
|
hdc_new[drv].tracks = cyl;
|
||||||
|
|
||||||
|
strcpy(hd_path[drv], fn);
|
||||||
|
sprintf(hd_sectors[drv], "%i", hdc_new[drv].spt);
|
||||||
|
sprintf(hd_heads[drv], "%i", hdc_new[drv].hpc);
|
||||||
|
sprintf(hd_cylinders[drv], "%i", hdc_new[drv].tracks);
|
||||||
|
sprintf(hd_size[drv], "Size : %imb", (((((uint64_t)hdc_new[drv].tracks*(uint64_t)hdc_new[drv].hpc)*(uint64_t)hdc_new[drv].spt)*512)/1024)/1024);
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == 2)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdconf_new_file(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_EXIT)
|
||||||
|
{
|
||||||
|
char fn[260];
|
||||||
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
||||||
|
|
||||||
|
strcpy(fn, hd_path_new);
|
||||||
|
ret = file_select_ex("Please choose a disc image", fn, "IMG", 260, xsize, ysize);
|
||||||
|
if (ret)
|
||||||
|
strcpy(hd_path_new, fn);
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DIALOG hdnew_dialog[]=
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 194*2,86,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 126, 66, 50, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||||
|
{d_button_proc, 196, 66, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||||
|
|
||||||
|
{d_edit_proc, 7*2, 6, 136*2, 10, 0, 0xffffff, 0, 0, 0, 0, hd_path_new, 0, 0},
|
||||||
|
{hdconf_new_file, 143*2, 6, 16*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "...", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 22, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 22, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 22, 28, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_edit_proc, 44*2, 22, 16*2, 12, 0, 0xffffff, 0, 0, 2, 0, hd_sectors_new, 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 22, 16*2, 12, 0, 0xffffff, 0, 0, 3, 0, hd_heads_new, 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 22, 24*2, 12, 0, 0xffffff, 0, 0, 5, 0, hd_cylinders_new, 0, 0},
|
||||||
|
// {d_text_proc, 7*2, 54, 136, 12, 0, -1, 0, 0, 0, 0, hd_size_new, 0, 0},
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int create_hd(char *fn, int cyl, int hpc, int spt)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
uint8_t buf[512];
|
||||||
|
FILE *f = fopen64(hd_path_new, "wb");
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
alert("Can't open file for write", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memset(buf, 0, 512);
|
||||||
|
for (c = 0; c < (cyl * hpc * spt); c++)
|
||||||
|
{
|
||||||
|
fwrite(buf, 512, 1, f);
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdconf_new(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int drv = d->d2;
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_EXIT)
|
||||||
|
{
|
||||||
|
sprintf(hd_sectors_new, "63");
|
||||||
|
sprintf(hd_heads_new, "16");
|
||||||
|
sprintf(hd_cylinders_new, "511");
|
||||||
|
strcpy(hd_path_new, "");
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
position_dialog(hdnew_dialog, SCREEN_W/2 - 186, SCREEN_H/2 - 86/2);
|
||||||
|
|
||||||
|
ret = popup_dialog(hdnew_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(hdnew_dialog, -(SCREEN_W/2 - 186), -(SCREEN_H/2 - 86/2));
|
||||||
|
|
||||||
|
if (ret == 1)
|
||||||
|
{
|
||||||
|
int spt, hpc, cyl;
|
||||||
|
|
||||||
|
sscanf(hd_sectors_new, "%i", &spt);
|
||||||
|
sscanf(hd_heads_new, "%i", &hpc);
|
||||||
|
sscanf(hd_cylinders_new, "%i", &cyl);
|
||||||
|
|
||||||
|
if (spt > 63)
|
||||||
|
{
|
||||||
|
alert("Drive has too many sectors (maximum is 63)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (hpc > 128)
|
||||||
|
{
|
||||||
|
alert("Drive has too many heads (maximum is 128)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (cyl > 16383)
|
||||||
|
{
|
||||||
|
alert("Drive has too many cylinders (maximum is 16383)", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (create_hd(hd_path_new, cyl, hpc, spt))
|
||||||
|
return D_REDRAW;
|
||||||
|
|
||||||
|
alert("Remember to partition and format the new drive", NULL, NULL, "OK", NULL, 0, 0);
|
||||||
|
|
||||||
|
hdc_new[drv].spt = spt;
|
||||||
|
hdc_new[drv].hpc = hpc;
|
||||||
|
hdc_new[drv].tracks = cyl;
|
||||||
|
|
||||||
|
strcpy(hd_path[drv], hd_path_new);
|
||||||
|
sprintf(hd_sectors[drv], "%i", hdc_new[drv].spt);
|
||||||
|
sprintf(hd_heads[drv], "%i", hdc_new[drv].hpc);
|
||||||
|
sprintf(hd_cylinders[drv], "%i", hdc_new[drv].tracks);
|
||||||
|
sprintf(hd_size[drv], "Size : %imb", (((((uint64_t)hdc_new[drv].tracks*(uint64_t)hdc_new[drv].hpc)*(uint64_t)hdc_new[drv].spt)*512)/1024)/1024);
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == 2)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdconf_eject(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int drv = d->d2;
|
||||||
|
int ret = d_button_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_EXIT)
|
||||||
|
{
|
||||||
|
hdc_new[drv].spt = 0;
|
||||||
|
hdc_new[drv].hpc = 0;
|
||||||
|
hdc_new[drv].tracks = 0;
|
||||||
|
strcpy(hd_path[drv], "");
|
||||||
|
sprintf(hd_sectors[drv], "%i", hdc_new[drv].spt);
|
||||||
|
sprintf(hd_heads[drv], "%i", hdc_new[drv].hpc);
|
||||||
|
sprintf(hd_cylinders[drv], "%i", hdc_new[drv].tracks);
|
||||||
|
sprintf(hd_size[drv], "Size : %imb", (((((uint64_t)hdc_new[drv].tracks*(uint64_t)hdc_new[drv].hpc)*(uint64_t)hdc_new[drv].spt)*512)/1024)/1024);
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdconf_radio_hd(int msg, DIALOG *d, int c);
|
||||||
|
static int hdconf_radio_cd(int msg, DIALOG *d, int c);
|
||||||
|
|
||||||
|
static DIALOG hdconf_dialog[]=
|
||||||
|
{
|
||||||
|
{d_shadow_box_proc, 0, 0, 210*2,354,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||||
|
|
||||||
|
{d_button_proc, 150, 334, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||||
|
{d_button_proc, 220, 334, 50, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 6, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "C:", 0, 0},
|
||||||
|
{hdconf_radio_hd, 7*2, 22, 96, 12, 0, 0xffffff, 0, D_EXIT, 0, 0, "Hard drive", 0, 0}, // 4
|
||||||
|
{hdconf_radio_cd, 100*2, 22, 64, 12, 0, 0xffffff, 0, D_EXIT, 0, 0, "CD-ROM", 0, 0}, // 5
|
||||||
|
{d_edit_proc, 7*2, 38, 136*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_path[0], 0, 0},
|
||||||
|
{hdconf_open, 143*2, 38, 16*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "...", 0, 0},
|
||||||
|
{hdconf_new, 159*2, 38, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "New", 0, 0},
|
||||||
|
{hdconf_eject, 183*2, 38, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 0, "Eject", 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 54, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 54, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 54, 28, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_edit_proc, 44*2, 54, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_sectors[0], 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 54, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_heads[0], 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 54, 24*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_cylinders[0], 0, 0},
|
||||||
|
{d_text_proc, 7*2, 54, 136, 12, 0, 0xffffff, 0, 0, 0, 0, hd_size[0], 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 76, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "D:", 0, 0},
|
||||||
|
{hdconf_radio_hd, 7*2, 92, 96, 12, 0, 0xffffff, 0, D_EXIT, 1, 0, "Hard drive", 0, 0}, // 18
|
||||||
|
{hdconf_radio_cd, 100*2, 92, 64, 12, 0, 0xffffff, 0, D_EXIT, 1, 0, "CD-ROM", 0, 0}, // 19
|
||||||
|
{d_edit_proc, 7*2, 108, 136*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_path[1], 0, 0},
|
||||||
|
{hdconf_open, 143*2, 108, 16*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 1, "...", 0, 0},
|
||||||
|
{hdconf_new, 159*2, 108, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 1, "New", 0, 0},
|
||||||
|
{hdconf_eject, 183*2, 108, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 1, "Eject", 0, 0},
|
||||||
|
|
||||||
|
{d_edit_proc, 44*2, 124, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_sectors[1], 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 124, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_heads[1], 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 124, 24*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_cylinders[1], 0, 0},
|
||||||
|
{d_text_proc, 7*2, 124, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 124, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 124, 32, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_text_proc, 7*2, 140, 136, 12, 0, 0xffffff, 0, 0, 0, 0, hd_size[1], 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 162, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "E:", 0, 0},
|
||||||
|
{hdconf_radio_hd, 7*2, 178, 96, 12, 0, 0xffffff, 0, D_EXIT, 2, 0, "Hard drive", 0, 0}, // 32
|
||||||
|
{hdconf_radio_cd, 100*2, 178, 64, 12, 0, 0xffffff, 0, D_EXIT, 2, 0, "CD-ROM", 0, 0}, // 33
|
||||||
|
{d_edit_proc, 7*2, 194, 136*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_path[2], 0, 0},
|
||||||
|
{hdconf_open, 143*2, 194, 16*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 2, "...", 0, 0},
|
||||||
|
{hdconf_new, 159*2, 194, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 2, "New", 0, 0},
|
||||||
|
{hdconf_eject, 183*2, 194, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 2, "Eject", 0, 0},
|
||||||
|
|
||||||
|
{d_edit_proc, 44*2, 210, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_sectors[2], 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 210, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_heads[2], 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 210, 24*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_cylinders[2], 0, 0},
|
||||||
|
{d_text_proc, 7*2, 210, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 210, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 210, 32, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_text_proc, 7*2, 226, 136, 12, 0, 0xffffff, 0, 0, 0, 0, hd_size[2], 0, 0},
|
||||||
|
|
||||||
|
{d_text_proc, 7*2, 248, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "F:", 0, 0},
|
||||||
|
{hdconf_radio_hd, 7*2, 264, 96, 12, 0, 0xffffff, 0, D_EXIT, 3, 0, "Hard drive", 0, 0}, // 46
|
||||||
|
{hdconf_radio_cd, 100*2, 264, 64, 12, 0, 0xffffff, 0, D_EXIT, 3, 0, "CD-ROM", 0, 0}, // 47
|
||||||
|
{d_edit_proc, 7*2, 280, 136*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_path[3], 0, 0},
|
||||||
|
{hdconf_open, 143*2, 280, 16*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 3, "...", 0, 0},
|
||||||
|
{hdconf_new, 159*2, 280, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 3, "New", 0, 0},
|
||||||
|
{hdconf_eject, 183*2, 280, 24*2, 14, 0, 0xffffff, 0, D_EXIT, 0, 3, "Eject", 0, 0},
|
||||||
|
|
||||||
|
{d_edit_proc, 44*2, 296, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_sectors[3], 0, 0},
|
||||||
|
{d_edit_proc, 92*2, 296, 16*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_heads[3], 0, 0},
|
||||||
|
{d_edit_proc, 168*2, 296, 24*2, 12, 0, 0xffffff, 0, D_DISABLED, 0, 0, hd_cylinders[3], 0, 0},
|
||||||
|
{d_text_proc, 7*2, 296, 27, 10, 0, 0xffffff, 0, 0, 0, 0, "Sectors:", 0, 0},
|
||||||
|
{d_text_proc, 63*2, 296, 29, 8, 0, 0xffffff, 0, 0, 0, 0, "Heads:", 0, 0},
|
||||||
|
{d_text_proc, 120*2, 296, 32, 12, 0, 0xffffff, 0, 0, 0, 0, "Cylinders:", 0, 0},
|
||||||
|
{d_text_proc, 7*2, 312, 136, 12, 0, 0xffffff, 0, 0, 0, 0, hd_size[3], 0, 0},
|
||||||
|
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void update_hdd_cdrom()
|
||||||
|
{
|
||||||
|
if (new_cdrom_channel == 0)
|
||||||
|
{
|
||||||
|
hdconf_dialog[4].flags &= ~D_SELECTED;
|
||||||
|
hdconf_dialog[5].flags |= D_SELECTED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdconf_dialog[4].flags |= D_SELECTED;
|
||||||
|
hdconf_dialog[5].flags &= ~D_SELECTED;
|
||||||
|
}
|
||||||
|
if (new_cdrom_channel == 1)
|
||||||
|
{
|
||||||
|
hdconf_dialog[18].flags &= ~D_SELECTED;
|
||||||
|
hdconf_dialog[19].flags |= D_SELECTED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdconf_dialog[18].flags |= D_SELECTED;
|
||||||
|
hdconf_dialog[19].flags &= ~D_SELECTED;
|
||||||
|
}
|
||||||
|
if (new_cdrom_channel == 2)
|
||||||
|
{
|
||||||
|
hdconf_dialog[32].flags &= ~D_SELECTED;
|
||||||
|
hdconf_dialog[33].flags |= D_SELECTED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdconf_dialog[32].flags |= D_SELECTED;
|
||||||
|
hdconf_dialog[33].flags &= ~D_SELECTED;
|
||||||
|
}
|
||||||
|
if (new_cdrom_channel == 3)
|
||||||
|
{
|
||||||
|
hdconf_dialog[46].flags &= ~D_SELECTED;
|
||||||
|
hdconf_dialog[47].flags |= D_SELECTED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdconf_dialog[46].flags |= D_SELECTED;
|
||||||
|
hdconf_dialog[47].flags &= ~D_SELECTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdconf_radio_hd(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_radio_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
if (new_cdrom_channel == d->d1)
|
||||||
|
{
|
||||||
|
new_cdrom_channel = -1;
|
||||||
|
update_hdd_cdrom();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
static int hdconf_radio_cd(int msg, DIALOG *d, int c)
|
||||||
|
{
|
||||||
|
int ret = d_radio_proc(msg, d, c);
|
||||||
|
|
||||||
|
if (ret == D_CLOSE)
|
||||||
|
{
|
||||||
|
if (new_cdrom_channel != d->d1)
|
||||||
|
{
|
||||||
|
new_cdrom_channel = d->d1;
|
||||||
|
update_hdd_cdrom();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_REDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int disc_hdconf()
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
hdc_new[0] = hdc[0];
|
||||||
|
hdc_new[1] = hdc[1];
|
||||||
|
hdc_new[2] = hdc[2];
|
||||||
|
hdc_new[3] = hdc[3];
|
||||||
|
strcpy(hd_path[0], ide_fn[0]);
|
||||||
|
strcpy(hd_path[1], ide_fn[1]);
|
||||||
|
strcpy(hd_path[2], ide_fn[2]);
|
||||||
|
strcpy(hd_path[3], ide_fn[3]);
|
||||||
|
sprintf(hd_sectors[0], "%i", hdc[0].spt);
|
||||||
|
sprintf(hd_sectors[1], "%i", hdc[1].spt);
|
||||||
|
sprintf(hd_sectors[2], "%i", hdc[2].spt);
|
||||||
|
sprintf(hd_sectors[3], "%i", hdc[3].spt);
|
||||||
|
sprintf(hd_heads[0], "%i", hdc[0].hpc);
|
||||||
|
sprintf(hd_heads[1], "%i", hdc[1].hpc);
|
||||||
|
sprintf(hd_heads[2], "%i", hdc[2].hpc);
|
||||||
|
sprintf(hd_heads[3], "%i", hdc[3].hpc);
|
||||||
|
sprintf(hd_cylinders[0], "%i", hdc[0].tracks);
|
||||||
|
sprintf(hd_cylinders[1], "%i", hdc[1].tracks);
|
||||||
|
sprintf(hd_cylinders[2], "%i", hdc[2].tracks);
|
||||||
|
sprintf(hd_cylinders[3], "%i", hdc[3].tracks);
|
||||||
|
sprintf(hd_size[0], "Size : %imb", (((((uint64_t)hdc[0].tracks*(uint64_t)hdc[0].hpc)*(uint64_t)hdc[0].spt)*512)/1024)/1024);
|
||||||
|
sprintf(hd_size[1], "Size : %imb", (((((uint64_t)hdc[1].tracks*(uint64_t)hdc[1].hpc)*(uint64_t)hdc[1].spt)*512)/1024)/1024);
|
||||||
|
sprintf(hd_size[2], "Size : %imb", (((((uint64_t)hdc[2].tracks*(uint64_t)hdc[2].hpc)*(uint64_t)hdc[2].spt)*512)/1024)/1024);
|
||||||
|
sprintf(hd_size[3], "Size : %imb", (((((uint64_t)hdc[3].tracks*(uint64_t)hdc[3].hpc)*(uint64_t)hdc[3].spt)*512)/1024)/1024);
|
||||||
|
|
||||||
|
new_cdrom_channel = cdrom_channel;
|
||||||
|
|
||||||
|
update_hdd_cdrom();
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
position_dialog(hdconf_dialog, SCREEN_W/2 - hdconf_dialog[0].w/2, SCREEN_H/2 - hdconf_dialog[0].h/2);
|
||||||
|
|
||||||
|
c = popup_dialog(hdconf_dialog, 1);
|
||||||
|
|
||||||
|
position_dialog(hdconf_dialog, -(SCREEN_W/2 - hdconf_dialog[0].w/2), -(SCREEN_H/2 - hdconf_dialog[0].h/2));
|
||||||
|
|
||||||
|
if (c == 1)
|
||||||
|
{
|
||||||
|
if (!has_been_inited || alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
||||||
|
{
|
||||||
|
hdc[0] = hdc_new[0];
|
||||||
|
hdc[1] = hdc_new[1];
|
||||||
|
hdc[2] = hdc_new[2];
|
||||||
|
hdc[3] = hdc_new[3];
|
||||||
|
|
||||||
|
strcpy(ide_fn[0], hd_path[0]);
|
||||||
|
strcpy(ide_fn[1], hd_path[1]);
|
||||||
|
strcpy(ide_fn[2], hd_path[2]);
|
||||||
|
strcpy(ide_fn[3], hd_path[3]);
|
||||||
|
|
||||||
|
cdrom_channel = new_cdrom_channel;
|
||||||
|
|
||||||
|
saveconfig(NULL);
|
||||||
|
|
||||||
|
resetpchard();
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c == 2)
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
288
src/allegro-gui.c
Normal file
288
src/allegro-gui.c
Normal file
|
|
@ -0,0 +1,288 @@
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "allegro-gui.h"
|
||||||
|
#include "disc.h"
|
||||||
|
#include "ide.h"
|
||||||
|
#include "cdrom-ioctl.h"
|
||||||
|
#include "cdrom-iso.h"
|
||||||
|
#include "cdrom-null.h"
|
||||||
|
|
||||||
|
void warning(const char *format, ...)
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, format);
|
||||||
|
vsprintf(buf, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
alert("Warning:", buf, NULL, "OK", NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int file_return(void)
|
||||||
|
{
|
||||||
|
return D_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int file_exit(void)
|
||||||
|
{
|
||||||
|
quited = 1;
|
||||||
|
return D_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int file_reset(void)
|
||||||
|
{
|
||||||
|
resetpchard();
|
||||||
|
return D_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int file_cad(void)
|
||||||
|
{
|
||||||
|
resetpc_cad();
|
||||||
|
return D_CLOSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MENU file_menu[]=
|
||||||
|
{
|
||||||
|
{"&Return", file_return, NULL, 0, NULL},
|
||||||
|
{"&Hard Reset", file_reset, NULL, 0, NULL},
|
||||||
|
{"&Ctrl+Alt+Del", file_cad, NULL, 0, NULL},
|
||||||
|
{"E&xit", file_exit, NULL, 0, NULL},
|
||||||
|
{NULL,NULL,NULL,0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int disc_load_a()
|
||||||
|
{
|
||||||
|
char fn[260];
|
||||||
|
int ret;
|
||||||
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
||||||
|
strcpy(fn, discfns[0]);
|
||||||
|
ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA;FDI", 260, xsize, ysize);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
disc_close(0);
|
||||||
|
disc_load(0, fn);
|
||||||
|
saveconfig(NULL);
|
||||||
|
}
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int disc_load_b()
|
||||||
|
{
|
||||||
|
char fn[260];
|
||||||
|
int ret;
|
||||||
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
||||||
|
strcpy(fn, discfns[1]);
|
||||||
|
ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA;FDI", 260, xsize, ysize);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
disc_close(1);
|
||||||
|
disc_load(1, fn);
|
||||||
|
saveconfig(NULL);
|
||||||
|
}
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int disc_eject_a()
|
||||||
|
{
|
||||||
|
disc_close(0);
|
||||||
|
saveconfig(NULL);
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int disc_eject_b()
|
||||||
|
{
|
||||||
|
disc_close(1);
|
||||||
|
saveconfig(NULL);
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MENU disc_menu[]=
|
||||||
|
{
|
||||||
|
{"Load drive &A:...", disc_load_a, NULL, 0, NULL},
|
||||||
|
{"Load drive &B:...", disc_load_b, NULL, 0, NULL},
|
||||||
|
{"&Eject drive &A:", disc_eject_a, NULL, 0, NULL},
|
||||||
|
{"Eject drive &B:", disc_eject_b, NULL, 0, NULL},
|
||||||
|
{"&Configure hard discs...", disc_hdconf, NULL, 0, NULL},
|
||||||
|
{NULL,NULL,NULL,0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static MENU cdrom_menu[];
|
||||||
|
|
||||||
|
static void cdrom_update()
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
for (c = 0; cdrom_menu[c].text; c++)
|
||||||
|
cdrom_menu[c].flags = 0;
|
||||||
|
|
||||||
|
if (!cdrom_enabled)
|
||||||
|
cdrom_menu[0].flags = D_SELECTED;
|
||||||
|
else switch (cdrom_drive)
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
cdrom_menu[1].flags = D_SELECTED;
|
||||||
|
break;
|
||||||
|
case CDROM_ISO:
|
||||||
|
cdrom_menu[3].flags = D_SELECTED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
cdrom_menu[2].flags = D_SELECTED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cdrom_disabled()
|
||||||
|
{
|
||||||
|
if (!cdrom_enabled)
|
||||||
|
return D_O_K;
|
||||||
|
|
||||||
|
if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
||||||
|
{
|
||||||
|
atapi->exit();
|
||||||
|
cdrom_enabled = 0;
|
||||||
|
saveconfig(NULL);
|
||||||
|
resetpchard();
|
||||||
|
cdrom_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cdrom_empty()
|
||||||
|
{
|
||||||
|
if (cdrom_enabled)
|
||||||
|
{
|
||||||
|
atapi->exit();
|
||||||
|
cdrom_drive = -1;
|
||||||
|
cdrom_null_open(cdrom_drive);
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
||||||
|
{
|
||||||
|
cdrom_drive = -1;
|
||||||
|
cdrom_enabled = 1;
|
||||||
|
cdrom_null_open(cdrom_drive);
|
||||||
|
saveconfig(NULL);
|
||||||
|
resetpchard();
|
||||||
|
cdrom_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cdrom_dev()
|
||||||
|
{
|
||||||
|
if (cdrom_enabled)
|
||||||
|
{
|
||||||
|
atapi->exit();
|
||||||
|
cdrom_drive = 1;
|
||||||
|
ioctl_open(cdrom_drive);
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
|
||||||
|
{
|
||||||
|
cdrom_drive = 1;
|
||||||
|
cdrom_enabled = 1;
|
||||||
|
ioctl_open(cdrom_drive);
|
||||||
|
saveconfig(NULL);
|
||||||
|
resetpchard();
|
||||||
|
cdrom_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cdrom_iso()
|
||||||
|
{
|
||||||
|
char fn[260];
|
||||||
|
int ret;
|
||||||
|
int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
|
||||||
|
|
||||||
|
strcpy(fn, iso_path);
|
||||||
|
ret = file_select_ex("Please choose an ISO image", fn, "ISO", 260, xsize, ysize);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
if (!cdrom_enabled)
|
||||||
|
{
|
||||||
|
if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) != 1)
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
atapi->exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
cdrom_drive = CDROM_ISO;
|
||||||
|
iso_open(fn);
|
||||||
|
if (!cdrom_enabled)
|
||||||
|
{
|
||||||
|
cdrom_enabled = 1;
|
||||||
|
resetpchard();
|
||||||
|
}
|
||||||
|
cdrom_update();
|
||||||
|
saveconfig(NULL);
|
||||||
|
}
|
||||||
|
return D_O_K;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MENU cdrom_menu[] =
|
||||||
|
{
|
||||||
|
{"&Disabled", cdrom_disabled, NULL, 0, NULL},
|
||||||
|
{"&Empty", cdrom_empty, NULL, 0, NULL},
|
||||||
|
{"/dev/cdrom", cdrom_dev, NULL, 0, NULL},
|
||||||
|
{"&ISO image...", cdrom_iso, NULL, 0, NULL},
|
||||||
|
{NULL,NULL,NULL,0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static MENU settings_menu[]=
|
||||||
|
{
|
||||||
|
{"&Configure...", settings_configure, NULL, 0, NULL},
|
||||||
|
{"CD-ROM", NULL, cdrom_menu, 0, NULL},
|
||||||
|
{NULL,NULL,NULL,0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static MENU main_menu[]=
|
||||||
|
{
|
||||||
|
{"&File", NULL, file_menu, 0, NULL},
|
||||||
|
{"&Disc", NULL, disc_menu, 0, NULL},
|
||||||
|
{"&Settings", NULL, settings_menu, 0, NULL},
|
||||||
|
{NULL,NULL,NULL,0,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static DIALOG pcem_gui[]=
|
||||||
|
{
|
||||||
|
{d_menu_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, main_menu, NULL, NULL},
|
||||||
|
{d_yield_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, NULL, NULL, NULL},
|
||||||
|
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
void gui_enter()
|
||||||
|
{
|
||||||
|
DIALOG_PLAYER *dp;
|
||||||
|
int x = 1;
|
||||||
|
infocus = 0;
|
||||||
|
|
||||||
|
dp = init_dialog(pcem_gui, 0);
|
||||||
|
show_mouse(screen);
|
||||||
|
while (x && !(mouse_b & 2) && !key[KEY_ESC])
|
||||||
|
{
|
||||||
|
x = update_dialog(dp);
|
||||||
|
}
|
||||||
|
show_mouse(NULL);
|
||||||
|
shutdown_dialog(dp);
|
||||||
|
|
||||||
|
clear(screen);
|
||||||
|
clear_keybuf();
|
||||||
|
|
||||||
|
infocus = 1;
|
||||||
|
|
||||||
|
device_force_redraw();
|
||||||
|
}
|
||||||
15
src/allegro-gui.h
Normal file
15
src/allegro-gui.h
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
void gui_enter();
|
||||||
|
|
||||||
|
extern int quited;
|
||||||
|
|
||||||
|
extern int romspresent[ROM_MAX];
|
||||||
|
extern int gfx_present[GFX_MAX];
|
||||||
|
|
||||||
|
int disc_hdconf();
|
||||||
|
|
||||||
|
int settings_configure();
|
||||||
|
|
||||||
|
void deviceconfig_open(device_t *device);
|
||||||
|
int config_sel();
|
||||||
|
|
||||||
|
extern int has_been_inited;
|
||||||
49
src/allegro-joystick.c
Normal file
49
src/allegro-joystick.c
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "plat-joystick.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "gameport.h"
|
||||||
|
|
||||||
|
plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
|
||||||
|
joystick_t joystick_state[MAX_JOYSTICKS];
|
||||||
|
|
||||||
|
int joysticks_present;
|
||||||
|
|
||||||
|
void joystick_init()
|
||||||
|
{
|
||||||
|
install_joystick(JOY_TYPE_AUTODETECT);
|
||||||
|
joysticks_present = num_joysticks;
|
||||||
|
}
|
||||||
|
void joystick_close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void joystick_poll()
|
||||||
|
{
|
||||||
|
int c, d;
|
||||||
|
|
||||||
|
poll_joystick();
|
||||||
|
|
||||||
|
for (c = 0; c < num_joysticks; c++)
|
||||||
|
{
|
||||||
|
plat_joystick_state[c].a[0] = joy[c].stick[0].axis[0].pos * 256;
|
||||||
|
plat_joystick_state[c].a[1] = joy[c].stick[0].axis[1].pos * 256;
|
||||||
|
for (d = 0; d < MAX_JOYSTICK_BUTTONS; d++)
|
||||||
|
plat_joystick_state[c].b[d] = joy[c].button[d].b;
|
||||||
|
}
|
||||||
|
for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++)
|
||||||
|
{
|
||||||
|
if (c < num_joysticks)
|
||||||
|
{
|
||||||
|
for (d = 0; d < joystick_get_axis_count(joystick_type); d++)
|
||||||
|
joystick_state[c].axis[d] = plat_joystick_state[c].a[d];
|
||||||
|
for (d = 0; d < joystick_get_button_count(joystick_type); d++)
|
||||||
|
joystick_state[c].button[d] = plat_joystick_state[c].b[d];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (d = 0; d < joystick_get_axis_count(joystick_type); d++)
|
||||||
|
joystick_state[c].axis[d] = 0;
|
||||||
|
for (d = 0; d < joystick_get_button_count(joystick_type); d++)
|
||||||
|
joystick_state[c].button[d] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
49
src/allegro-keyboard.c
Normal file
49
src/allegro-keyboard.c
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#include "allegro-main.h"
|
||||||
|
#include "plat-keyboard.h"
|
||||||
|
|
||||||
|
int pcem_key[272];
|
||||||
|
int rawinputkey[272];
|
||||||
|
|
||||||
|
static int key_convert[128] =
|
||||||
|
{
|
||||||
|
-1, 0x1e, 0x30, 0x2e, 0x20, 0x12, 0x21, 0x22, /* , A, B, C, D, E, F, G*/
|
||||||
|
0x23, 0x17, 0x24, 0x25, 0x26, 0x32, 0x31, 0x18, /* H, I, J, K, L, M, N, O*/
|
||||||
|
0x19, 0x10, 0x13, 0x1f, 0x14, 0x16, 0x2f, 0x11, /* P, Q, R, S, T, U, V, W*/
|
||||||
|
0x2d, 0x15, 0x2c, 0x0b, 0x02, 0x03, 0x04, 0x05, /* X, Y, Z, 0, 1, 2, 3, 4*/
|
||||||
|
0x06, 0x07, 0x08, 0x09, 0x0a, 0x52, 0x4f, 0x50, /* 5, 6, 7, 8, 9, p0, p1, p2*/
|
||||||
|
0x51, 0x4b, 0x4c, 0x4d, 0x47, 0x48, 0x49, 0x3b, /* p3, p4, p5, p6, p7, p8, p9, F1*/
|
||||||
|
0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, /* F2, F3, F4, F5, F6, F7, F8, F9*/
|
||||||
|
0x44, 0x57, 0x58, 0x01, 0x29, 0x0c, 0x0d, 0x0e, /*F10, F11, F12, ESC, `ª, -_, =+, backspace*/
|
||||||
|
0x0f, 0x1a, 0x1b, 0x1c, 0x27, 0x28, 0x2b, 0x56, /*TAB, [{, ]}, ENT, ;:, '@, \|, #~*/
|
||||||
|
0x33, 0x34, 0x35, 0x39, 0xd2, 0xd3, 0xc7, 0xcf, /* ,<, .>, /?, SPC, INS, DEL, HOME, END*/
|
||||||
|
0xc9, 0xd1, 0xcb, 0xcd, 0xc8, 0xd0, 0xb5, 0x37, /*PGU, PGD, LFT, RHT, UP, DN, /, * */
|
||||||
|
0x4a, 0x4e, 0x53, 0x9c, 0xff, -1, -1, -1, /* p-, p+, pDL, pEN, psc, pse, abnt, yen*/
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, /*kana, convert, noconvert, at, circumflex, colon2, kanji, pad equals*/
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, 0x2a, 0x36, 0x1d, 0x9d, 0x38, /*, , lshift, rshift, lctrl, rctrl, alt*/
|
||||||
|
0xb8, 0xdb, 0xdc, 0xdd, 0x46, 0x45, 0x3a, -1 /*altgr, lwin, rwin, menu, scrlock, numlock, capslock*/
|
||||||
|
};
|
||||||
|
|
||||||
|
void keyboard_init()
|
||||||
|
{
|
||||||
|
install_keyboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard_close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void keyboard_poll_host()
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
for (c = 0; c < 128; c++)
|
||||||
|
{
|
||||||
|
int key_idx = key_convert[c];
|
||||||
|
if (key_idx == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (key[c] != pcem_key[key_idx])
|
||||||
|
pcem_key[key_idx] = key[c];
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue