mirror of
https://github.com/retro100/dosbox-wii.git
synced 2024-12-24 01:21:50 +01:00
DOSBox 0.70
This commit is contained in:
parent
6ca1ff8d7f
commit
e5731161bb
80
ChangeLog
80
ChangeLog
@ -1,3 +1,83 @@
|
||||
0.70
|
||||
- Improve register handling and support with XMS.
|
||||
- Fix some issues with deleting open files.(windows only issue)
|
||||
- Add dummpy LPT1 class. (windows only issue)
|
||||
- Improve some of the internal dos commands. (choice, copy and shift)
|
||||
- Improve ROM area. (for games that use it for random numbers or
|
||||
overwrite it as some sort of detection thing)
|
||||
- Improve compatibility of dynamic core by making it handle certain
|
||||
pagefaults earlier.
|
||||
- Move internal dos tables around so we have more umb memory.
|
||||
- Add some dos tables.
|
||||
- Dynamic core supports io exceptions.
|
||||
- Move some interrupt handlers to XT Bios locations.
|
||||
- Add a dynamic fpu on x86.
|
||||
- Improve fpu on non-x86.
|
||||
- Trapflag gets strickt priority over hardware IRQs.
|
||||
- Trapflag support for the dynamic core.
|
||||
- Add dummy TRx handling.
|
||||
- Fix a few rarely used character functions.
|
||||
- Improve auto cycle guessing code.
|
||||
- Improve and extend the joystick support.
|
||||
- Add autofire support.
|
||||
- Improve the mapper so you can map keys to the joystick and vice versa.
|
||||
- A few game specific video card fixes.
|
||||
- Fix some 64 bit cpu bugs.
|
||||
- Add support for certain cdrom detection schemes.
|
||||
- Improve HSG/Red Book support.
|
||||
- Improve MSCDEX.
|
||||
- Improve dynamic core support under intel macs.
|
||||
- Add basic support for clipper programs.
|
||||
- Add support for different keyboard layouts.
|
||||
- Add auto core guessing.
|
||||
- Fix a few flags bugs.
|
||||
- Fix a few small cpu bugs.
|
||||
- Improve soundblaster detection rate by various programs.
|
||||
- Improve EMS emulation. (allow mapping of non standard regions)
|
||||
- Improve keyboard input codes on various OS-es.
|
||||
- Fix problems with filenames having stackdata in them.
|
||||
- Changed a few basic operations in DOSBox so they take emulated time.
|
||||
- Improve dos ioctl functions.
|
||||
- Extend cpu core so they are capable of detecting and raising a few
|
||||
more exception types.
|
||||
- Improve DOS functions when dealing with virtual drive.
|
||||
- Improve FAT drives.
|
||||
- Better handling of volume-labels in file functions.
|
||||
- Image disk cycling capability. (prompt)
|
||||
- Try to reduce the impact of using an analog joystick.
|
||||
- Several measures to avoid code invalidation on certain types
|
||||
of self modification in the dynamic core.
|
||||
- Add dynamic core memory function inlining.
|
||||
- A few small mouse improvements. (some games are using things they
|
||||
shouldn't)
|
||||
- Add nullmodem emulation.(h-a-l-9000)
|
||||
- Some small cga and hercules fixes.
|
||||
- Add more scalers (hq2x/hq3x/sai). (Kronuz)
|
||||
- Change configuration file loading support. It now supports
|
||||
multiple configuration files.
|
||||
- Make dynamic core capable of running some win32s programs.
|
||||
- Fix and add some rare soundblaster modes. (Srecko)
|
||||
- Better soundblaster mixer controls. (Srecko)
|
||||
- Make soundblaster installation under windows much easier.
|
||||
- Add device control channel handling.
|
||||
- GEMMIS support (ems under windows).
|
||||
- Support more colours in win 3. (vasyl)
|
||||
- Don't show unmounted drives in windows filemanager.
|
||||
- Fix some bugs in the int13 handler.
|
||||
- Simulate some side-effects of bios interrupt handlers on flags.
|
||||
- Add IPX functions needed by netbios.
|
||||
- Make ports take emulated time.
|
||||
- Tabcompletion is now aware of the CD command.
|
||||
- Add suppport for the dac pel mask.
|
||||
- Fixes to hercules emulation, better detection and bank switching.
|
||||
- Fixes to tandy emulation, 640x200x16 mode and different sizes bank.
|
||||
- EGA/VGA memory changes detection for faster rendering.
|
||||
- Gus 16 bit fixes.
|
||||
- Many timer improvements.
|
||||
- Some pcjr fixes.
|
||||
- Some booter fixes.
|
||||
- Many small fixes.
|
||||
|
||||
0.65
|
||||
- Fixed FAT writing.
|
||||
- Added some more missing DOS functions.
|
||||
|
3
INSTALL
3
INSTALL
@ -22,10 +22,11 @@ SDL_Net
|
||||
|
||||
SDL_Sound
|
||||
For compressed audio on diskimages. (optional)
|
||||
This is for cue/bin cdrom images with compressed (mp3/ogg) audio tracks.
|
||||
|
||||
ALSA_Headers
|
||||
(optional)
|
||||
???????? for Alsa support under linux
|
||||
for Alsa support under linux. Part of the linux kernel sources
|
||||
|
||||
If you want compile from the CVS under a unix system, you'll also need
|
||||
automake (>=1.6), autoconf(>=2.50). Should be available at http://www.gnu.org
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Main Makefile for DOSBox
|
||||
|
||||
EXTRA_DIST = autogen.sh
|
||||
SUBDIRS = src include visualc docs visualc_net
|
||||
SUBDIRS = src include docs visualc_net
|
||||
|
284
Makefile.in
284
Makefile.in
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -15,6 +15,7 @@
|
||||
@SET_MAKE@
|
||||
|
||||
# Main Makefile for DOSBox
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -22,6 +23,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -35,46 +37,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||
THANKS TODO config.guess config.sub depcomp install-sh missing
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -101,6 +64,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -131,9 +95,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -141,8 +102,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -150,23 +109,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -175,44 +140,45 @@ target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
EXTRA_DIST = autogen.sh
|
||||
SUBDIRS = src include visualc docs visualc_net
|
||||
SUBDIRS = src include docs visualc_net
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
|
||||
ps-recursive install-info-recursive uninstall-info-recursive \
|
||||
all-recursive install-data-recursive install-exec-recursive \
|
||||
installdirs-recursive install-recursive uninstall-recursive \
|
||||
check-recursive installcheck-recursive
|
||||
DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \
|
||||
COPYING ChangeLog INSTALL Makefile.am NEWS THANKS acinclude.m4 \
|
||||
aclocal.m4 config.guess config.h.in config.sub configure \
|
||||
configure.in depcomp install-sh missing mkinstalldirs
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnits '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --gnits \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \
|
||||
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
|
||||
$(ACLOCAL_M4): configure.in acinclude.m4
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
config.h: stamp-h1
|
||||
@ -224,10 +190,10 @@ config.h: stamp-h1
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
|
||||
$(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
touch $(srcdir)/config.h.in
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
@ -240,13 +206,7 @@ uninstall-info-am:
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -258,7 +218,7 @@ $(RECURSIVE_TARGETS):
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
@ -266,13 +226,7 @@ $(RECURSIVE_TARGETS):
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
@ -293,7 +247,7 @@ maintainer-clean-recursive:
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -304,6 +258,14 @@ ctags-recursive:
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -312,22 +274,19 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
if (etags --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
test -f $$subdir/TAGS && \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
@ -337,11 +296,10 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -364,14 +322,21 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = .
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@case `sed 15q $(srcdir)/NEWS` in \
|
||||
*"$(VERSION)"*) : ;; \
|
||||
*) \
|
||||
echo "NEWS not updated; not releasing" 1>&2; \
|
||||
exit 1;; \
|
||||
esac
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -385,7 +350,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -400,17 +365,15 @@ distdir: $(DISTFILES)
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
@ -421,46 +384,19 @@ distdir: $(DISTFILES)
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
$(am__remove_distdir)
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
@ -480,20 +416,19 @@ distcheck: dist
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
(cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
|
||||
&& rm -f $(distdir).tar.gz \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
@echo "$(distdir).tar.gz is ready for distribution" | \
|
||||
sed 'h;s/./=/g;p;x;p;x'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
@ -517,6 +452,7 @@ check: check-recursive
|
||||
all-am: Makefile config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
@ -536,7 +472,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -554,8 +490,6 @@ dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
@ -592,20 +526,22 @@ uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-recursive ctags \
|
||||
ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
|
||||
dist-tarZ dist-zip distcheck distclean distclean-generic \
|
||||
distclean-hdr distclean-recursive distclean-tags \
|
||||
distcleancheck distdir distuninstallcheck dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-generic mostlyclean-recursive pdf \
|
||||
pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-recursive ctags ctags-recursive dist \
|
||||
dist-all dist-gzip distcheck distclean distclean-generic \
|
||||
distclean-hdr distclean-recursive distclean-tags distcleancheck \
|
||||
distdir distuninstallcheck dvi dvi-am dvi-recursive info \
|
||||
info-am info-recursive install install-am install-data \
|
||||
install-data-am install-data-recursive install-exec \
|
||||
install-exec-am install-exec-recursive install-info \
|
||||
install-info-am install-info-recursive install-man \
|
||||
install-recursive install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am installdirs-recursive \
|
||||
maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \
|
||||
ps-recursive tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-info-am uninstall-info-recursive uninstall-recursive
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
80
NEWS
80
NEWS
@ -1,3 +1,83 @@
|
||||
0.70
|
||||
- Improve register handling and support with XMS.
|
||||
- Fix some issues with deleting open files.(windows only issue)
|
||||
- Add dummpy LPT1 class. (windows only issue)
|
||||
- Improve some of the internal dos commands. (choice, copy and shift)
|
||||
- Improve ROM area. (for games that use it for random numbers or
|
||||
overwrite it as some sort of detection thing)
|
||||
- Improve compatibility of dynamic core by making it handle certain
|
||||
pagefaults earlier.
|
||||
- Move internal dos tables around so we have more umb memory.
|
||||
- Add some dos tables.
|
||||
- Dynamic core supports io exceptions.
|
||||
- Move some interrupt handlers to XT Bios locations.
|
||||
- Add a dynamic fpu on x86.
|
||||
- Improve fpu on non-x86.
|
||||
- Trapflag gets strickt priority over hardware IRQs.
|
||||
- Trapflag support for the dynamic core.
|
||||
- Add dummy TRx handling.
|
||||
- Fix a few rarely used character functions.
|
||||
- Improve auto cycle guessing code.
|
||||
- Improve and extend the joystick support.
|
||||
- Add autofire support.
|
||||
- Improve the mapper so you can map keys to the joystick and vice versa.
|
||||
- A few game specific video card fixes.
|
||||
- Fix some 64 bit cpu bugs.
|
||||
- Add support for certain cdrom detection schemes.
|
||||
- Improve HSG/Red Book support.
|
||||
- Improve MSCDEX.
|
||||
- Improve dynamic core support under intel macs.
|
||||
- Add basic support for clipper programs.
|
||||
- Add support for different keyboard layouts.
|
||||
- Add auto core guessing.
|
||||
- Fix a few flags bugs.
|
||||
- Fix a few small cpu bugs.
|
||||
- Improve soundblaster detection rate by various programs.
|
||||
- Improve EMS emulation. (allow mapping of non standard regions)
|
||||
- Improve keyboard input codes on various OS-es.
|
||||
- Fix problems with filenames having stackdata in them.
|
||||
- Changed a few basic operations in DOSBox so they take emulated time.
|
||||
- Improve dos ioctl functions.
|
||||
- Extend cpu core so they are capable of detecting and raising a few
|
||||
more exception types.
|
||||
- Improve DOS functions when dealing with virtual drive.
|
||||
- Improve FAT drives.
|
||||
- Better handling of volume-labels in file functions.
|
||||
- Image disk cycling capability. (prompt)
|
||||
- Try to reduce the impact of using an analog joystick.
|
||||
- Several measures to avoid code invalidation on certain types
|
||||
of self modification in the dynamic core.
|
||||
- Add dynamic core memory function inlining.
|
||||
- A few small mouse improvements. (some games are using things they
|
||||
shouldn't)
|
||||
- Add nullmodem emulation.(h-a-l-9000)
|
||||
- Some small cga and hercules fixes.
|
||||
- Add more scalers (hq2x/hq3x/sai). (Kronuz)
|
||||
- Change configuration file loading support. It now supports
|
||||
multiple configuration files.
|
||||
- Make dynamic core capable of running some win32s programs.
|
||||
- Fix and add some rare soundblaster modes. (Srecko)
|
||||
- Better soundblaster mixer controls. (Srecko)
|
||||
- Make soundblaster installation under windows much easier.
|
||||
- Add device control channel handling.
|
||||
- GEMMIS support (ems under windows).
|
||||
- Support more colours in win 3. (vasyl)
|
||||
- Don't show unmounted drives in windows filemanager.
|
||||
- Fix some bugs in the int13 handler.
|
||||
- Simulate some side-effects of bios interrupt handlers on flags.
|
||||
- Add IPX functions needed by netbios.
|
||||
- Make ports take emulated time.
|
||||
- Tabcompletion is now aware of the CD command.
|
||||
- Add suppport for the dac pel mask.
|
||||
- Fixes to hercules emulation, better detection and bank switching.
|
||||
- Fixes to tandy emulation, 640x200x16 mode and different sizes bank.
|
||||
- EGA/VGA memory changes detection for faster rendering.
|
||||
- Gus 16 bit fixes.
|
||||
- Many timer improvements.
|
||||
- Some pcjr fixes.
|
||||
- Some booter fixes.
|
||||
- Many small fixes.
|
||||
|
||||
0.65
|
||||
- Fixed FAT writing.
|
||||
- Added some more missing DOS functions.
|
||||
|
584
README
584
README
@ -1,19 +1,15 @@
|
||||
DOSBox v0.65
|
||||
DOSBox v0.70
|
||||
|
||||
|
||||
=====
|
||||
NOTE:
|
||||
=====
|
||||
|
||||
While we are hoping that one day, DOSBox will run all programs
|
||||
ever made for the PC, we are not there yet. At present, DOSBox running on a
|
||||
high-end machine will roughly be the equivalent of a 486 PC. The 0.60
|
||||
release has added support for "protected mode" allowing for more complex and
|
||||
recent programs, but note that this support is still in an early stage of
|
||||
development and unlike the support for 386 real-mode games (or earlier) hasn't
|
||||
been completed yet. Also note that "protected mode" games need substantially
|
||||
more resources and may require a much faster processor for you to run them
|
||||
properly in DOSBox.
|
||||
While we are hoping that one day DOSBox will run all programs ever
|
||||
made for the PC, we are not there yet. At present, DOSBox running
|
||||
on a high-end machine will roughly be the equivalent of a 486 PC.
|
||||
DOSBox can be configured to run a wide range of DOS games, from
|
||||
CGA/Tandy/PCjr classics up to games from the Quake era.
|
||||
|
||||
|
||||
|
||||
@ -25,14 +21,16 @@ INDEX:
|
||||
3. Usage
|
||||
4. Internal Programs
|
||||
5. Special Keys
|
||||
6. Keymapper
|
||||
7. System Requirements
|
||||
8. To run resource-demanding games
|
||||
9. The config file
|
||||
10. The language file
|
||||
11. Building your own version of DOSBox
|
||||
12. Special thanks
|
||||
13. Contact
|
||||
6. Mapper
|
||||
7. Keyboard Layout
|
||||
8. Serial Multiplayer feature
|
||||
9. How to run resource-demanding games
|
||||
10. Troubleshooting
|
||||
11. The config file
|
||||
12. The language file
|
||||
13. Building your own version of DOSBox
|
||||
14. Special thanks
|
||||
15. Contact
|
||||
|
||||
|
||||
==============
|
||||
@ -49,13 +47,15 @@ Type INTRO in DOSBox. That's it.
|
||||
Some Frequently Asked Questions:
|
||||
|
||||
Q: I've got a Z instead of a C at the prompt.
|
||||
Q: My game crashes when using opengl/nb or is much slower.
|
||||
Q: How do I change to fullscreen ?
|
||||
Q: My CD-ROM doesn't work.
|
||||
Q: The mouse doesn't work.
|
||||
Q: There is no sound.
|
||||
Q: The sound stutters or sounds stretched/weird.
|
||||
Q: I can't type \ or : in DOSBox.
|
||||
Q: The game/application can't find its CD-ROM.
|
||||
Q: The game/application runs much too slow!
|
||||
Q: Can DOSBox harm my computer?
|
||||
Q: I would like to change the memory size/cpu speed/ems/soundblaster IRQ.
|
||||
Q: What sound hardware does DOSBox presently emulate?
|
||||
Q: DOSBox crashes on startup and I'm running arts
|
||||
@ -71,11 +71,16 @@ A: You have to make your directories available as drives in DOSBox by using
|
||||
you a C drive in DOSBox which points to your Windows D:\GAMES directory.
|
||||
In Linux, "mount c /home/username" will give you a C drive in DOSBox
|
||||
which points to /home/username in Linux.
|
||||
To change to the drive mounted like above, type "C:". If everything went
|
||||
fine, DOSBox will display the prompt "C:\>".
|
||||
|
||||
|
||||
Q: My game crashes when using opengl/nb or is much slower.
|
||||
A: Somehow our opengl code isn't entirely stable on some platforms.
|
||||
Use surface instead.
|
||||
Q: How do I change to fullscreen ?
|
||||
A: Press alt-enter. Alternatively: Edit the configuration file of DOSBox and
|
||||
change the option fullscreen=false to fullscreen=true. If fullscreen looks
|
||||
wrong in your opinion: Play with the option fullresolution in the
|
||||
configuration file of DOSBox. To get back from fullscreen mode:
|
||||
Press alt-enter again.
|
||||
|
||||
|
||||
Q: My CD-ROM doesn't work.
|
||||
@ -88,7 +93,7 @@ A: To mount your CD-ROM in DOSBox you have to specify some additional options
|
||||
To enable low-level ioctl-support(win2k/xp/linux):
|
||||
- mount d f:\ -t cdrom -usecd 0 -ioctl
|
||||
To enable low-level aspi-support (win98 with aspi-layer installed):
|
||||
- mount d f:\ -t cdrom -usecd 0 -apsi
|
||||
- mount d f:\ -t cdrom -usecd 0 -aspi
|
||||
|
||||
In the commands: - d driveletter you will get in DOSBox
|
||||
- f:\ location of cdrom on your PC.
|
||||
@ -103,43 +108,70 @@ A: Usually, DOSBox detects when a game uses mouse control. When you click on
|
||||
you will have to lock the mouse manually by pressing CTRL-F10.
|
||||
|
||||
|
||||
Q: There is no sound.
|
||||
A: Be sure that the sound is correctly configured in the game. This might be
|
||||
done during the installation or with a setup/setsound utility that
|
||||
accompanies the game. First see if an autodetection option is provided. If
|
||||
there is none try selecting soundblaster or soundblaster16 with the default
|
||||
settings being "address=220 irq=7 dma=1". You might also want to select
|
||||
midi at address 330 as music device.
|
||||
The parameters of the emulated soundcards can be changed in the DOSBox
|
||||
configuration file.
|
||||
If you still don't get any sound set the core to normal and use some lower
|
||||
fixed cycles value (like cycles=2000). Also assure that your host operating
|
||||
sound does provide sound.
|
||||
|
||||
|
||||
Q: The sound stutters or sounds stretched/weird.
|
||||
A: You're using too much cpu power to keep DOSBox running at the current speed.
|
||||
You can lower the cycles, skip frames or get a faster machine.
|
||||
You can also increase the prebuffer in the configfile.
|
||||
If you are using cycles=max or =auto, then make sure that there no
|
||||
background processes interfering! (especially if they acces the harddisk)
|
||||
|
||||
|
||||
Q: I can't type \ or : in DOSBox.
|
||||
A: This is a known problem. It only occurs if your keyboard layout isn't US.
|
||||
Some possible fixes:
|
||||
1. Switch your keyboard layout.
|
||||
1. Switch the keyboard layout of your operating system.
|
||||
2. Use / instead.
|
||||
3. Open dosbox.conf and change usescancodes=false to usescancodes=true.
|
||||
4. Add the commands you want to execute to the "configfile".
|
||||
5. Start the keymapper (CTRL-F1 or add -startmapper switch to DOSBox).
|
||||
5. Change the dos keyboard layout (see Section 7 Keyboard Layout).
|
||||
6. Use ALT-58 for : and ALT-92 for \.
|
||||
7. for \ try the keys around "enter". For ":" try shift and the keys
|
||||
between "enter" and "l" (US keyboard layout).
|
||||
8. Use keyb.com from FreeDOS (http://projects.freedos.net/keyb/).
|
||||
8. Try keyb.com from FreeDOS (http://projects.freedos.net/keyb/).
|
||||
Look for keyb2.0 pre4 as older and newer versions are known to
|
||||
have a bug in the loader routines.
|
||||
|
||||
|
||||
Q: The game/application can't find its CD-ROM.
|
||||
A: Be sure to mount the CD-ROM with -t cdrom switch. Also try adding the
|
||||
correct label (-label LABEL). To enable more low-level CD-ROM support, add
|
||||
the following switch to mount: -usecd #, where # is the number of your
|
||||
CD-ROM drive reported by mount -cd. If you run Win32 you can specify -ioctl
|
||||
or -aspi. Look at the description elsewhere in this document for their
|
||||
meaning.
|
||||
A: Be sure to mount the CD-ROM with -t cdrom switch, this will enable the
|
||||
MSCDEX interface required by DOS games to interface with CD-ROMs.
|
||||
Also try adding the correct label (-label LABEL). To enable lower-level
|
||||
CD-ROM support, add the following switch to mount: -usecd #, where # is
|
||||
the number of your CD-ROM drive reported by mount -cd. Under Windows you
|
||||
can specify -ioctl or -aspi. Look at the description elsewhere in this
|
||||
document for their meaning.
|
||||
|
||||
|
||||
Q: The game/application runs much too slow!
|
||||
A: Look at the section "To run resource-demanding games" for more information.
|
||||
A: Look at the section "How to run resource-demanding games" for more
|
||||
information.
|
||||
|
||||
|
||||
Q: Can DOSBox harm my computer?
|
||||
A: DOSBox can not harm your computer more than any other resource demanding
|
||||
program. Increasing the cycles does not overclock your real CPU.
|
||||
Setting the cycles too high has a negative performance effect on the
|
||||
software running inside DOSBox.
|
||||
|
||||
|
||||
Q: I would like to change the memory size/cpu speed/ems/soundblaster IRQ.
|
||||
A: This is possible! Just create a config file: config -writeconf configfile .
|
||||
Start your favourite editor and look at all the settings present. To
|
||||
start DOSBox with your new settings: dosbox -conf configfile
|
||||
A: This is possible! Just create a config file: config -writeconf configfile.
|
||||
Start your favourite editor and look through the settings. To start DOSBox
|
||||
with your new settings: dosbox -conf configfile
|
||||
|
||||
|
||||
Q: What sound hardware does DOSBox presently emulate?
|
||||
@ -155,6 +187,10 @@ A: DOSBox emulates several legacy sound devices:
|
||||
The emulation of this sound hardware is complete with the exception of
|
||||
the noise channel. The noise channel is not very well documented and as
|
||||
such is only a best guess as to the sound's accuracy.
|
||||
- Tandy DAC
|
||||
Emulation of the Tandy DAC utilizes the soundblaster emulation, thus
|
||||
be sure the soundblaster is not disabled in the DOSBox configuration
|
||||
file. The Tandy DAC is only emulated at the BIOS level.
|
||||
- Adlib
|
||||
Borrowed from MAME, this emulation is almost perfect and includes the
|
||||
Adlib's ability to almost play digitized sound.
|
||||
@ -172,15 +208,16 @@ A: DOSBox emulates several legacy sound devices:
|
||||
A MIDI passthrough interface is also emulated. This method of sound
|
||||
output will only work when used with a General Midi or MT-32 device.
|
||||
|
||||
|
||||
Q: DOSBox crashes on startup and I'm running arts.
|
||||
A: This isn't really a DOSBox problem, but the solution is to set the
|
||||
environment variable SDL_AUDIODRIVER to alsa or oss.
|
||||
|
||||
|
||||
Q: Great README, but I still don't get it.
|
||||
A: While unlikely, this seems to happen. A look at "The Newbie's
|
||||
pictorial guide to DOSBox" located at
|
||||
A: A look at "The Newbie's pictorial guide to DOSBox" located at
|
||||
http://vogons.zetafleet.com/viewforum.php?f=39 might help you.
|
||||
You could also try the wiki of dosbox:
|
||||
Also try the wiki of dosbox:
|
||||
http://dosbox.sourceforge.net/wiki/
|
||||
|
||||
|
||||
@ -226,14 +263,15 @@ dosbox -version
|
||||
|
||||
-conf configfile
|
||||
Start DOSBox with the options specified in "configfile".
|
||||
See Chapter 9 for more details.
|
||||
Multiple -conf options may be present.
|
||||
See Chapter 10 for more details.
|
||||
|
||||
-lang languagefile
|
||||
Start DOSBox using the language specified in "languagefile".
|
||||
|
||||
-noconsole (Windows Only)
|
||||
Start DOSBox without showing the console window. Output will
|
||||
be redirected to stdout.txt and stderr.txt
|
||||
be redirected to stdout.txt and stderr.txt
|
||||
|
||||
-machine machinetype
|
||||
Setup DOSBox to emulate a specific type of machine. Valid choices are:
|
||||
@ -252,7 +290,13 @@ dosbox -version
|
||||
|
||||
Note: If a name/command/configfile/languagefile contains a space, put
|
||||
the whole name/command/configfile/languagefile between quotes
|
||||
("command or file name").
|
||||
("command or file name"). If you need to use quotes within quotes
|
||||
(most likely with -c and mount).
|
||||
Windows and OS/2 users can use single quotes inside the double quotes.
|
||||
Other people should be able to use escaped double quotes inside the
|
||||
double quotes.
|
||||
win -c "mount c 'c:\program files\'"
|
||||
linux -c "mount c \"/tmp/name with space\""
|
||||
|
||||
For example:
|
||||
|
||||
@ -268,7 +312,9 @@ In Windows, you can also drag directories/files onto the DOSBox executable.
|
||||
4. Internal Programs:
|
||||
=====================
|
||||
|
||||
DOSBox supports most of the DOS commands found in command.com.
|
||||
DOSBox supports most of the DOS commands found in command.com.
|
||||
To get a list of the internal commands type "HELP" at the prompt.
|
||||
|
||||
In addition, the following commands are available:
|
||||
|
||||
MOUNT "Emulated Drive letter" "Real Drive or Directory"
|
||||
@ -282,21 +328,19 @@ MOUNT -u "Emulated Drive letter"
|
||||
"Emulated Drive letter"
|
||||
The driveletter inside dosbox (eg. C).
|
||||
|
||||
"Real Drive letter or Directory"
|
||||
The local directory you want to have inside dosbox.
|
||||
(Under Win32 usually the same as "Emulated Drive letter".
|
||||
For Example: mount c c:\ )
|
||||
"Real Drive letter (usually for CD-ROMs in Windows) or Directory"
|
||||
The local directory you want accessible inside dosbox.
|
||||
|
||||
-t type
|
||||
Type of the mounted directory. Supported are: dir (standard),
|
||||
Type of the mounted directory. Supported are: dir (default),
|
||||
floppy, cdrom.
|
||||
|
||||
-size drivesize
|
||||
Sets the size of the drive.
|
||||
|
||||
-freesize size_in_mb
|
||||
Sets the amount of free space available on a drive in MB's. This
|
||||
is a simpler version of -size.
|
||||
Sets the amount of free space available on a drive in megabytes.
|
||||
This is a simpler version of -size.
|
||||
|
||||
-label drivelabel
|
||||
Sets the name of the drive to "drivelabel". Needed on some
|
||||
@ -330,21 +374,23 @@ MOUNT -u "Emulated Drive letter"
|
||||
Note: It's possible to mount a local directory as cdrom drive.
|
||||
Hardware support is then missing.
|
||||
|
||||
Basically, MOUNT allows you to connect real hardware to DOSBox's "emulated"
|
||||
PC. So MOUNT C C:\GAMES tells DOSBox to use your C:\GAMES directory as drive
|
||||
C: in DOSBox. It also allows you to change the drive's letter identification
|
||||
Basically MOUNT allows you to connect real hardware to DOSBox's emulated PC.
|
||||
So MOUNT C C:\GAMES tells DOSBox to use your C:\GAMES directory as drive C:
|
||||
in DOSBox. It also allows you to change the drive's letter identification
|
||||
for programs that demand specific drive letters.
|
||||
|
||||
For example: Touche: Adventures of The Fifth Musketeer must be run on your C:
|
||||
drive. Using DOSBox and its mount command, you can trick the game into
|
||||
believing it is on the C drive, while you can still place it where you
|
||||
want it. For example, if the game is in D:\TOUCHE, the command MOUNT C D:\
|
||||
will allow you to run Touche from the D drive.
|
||||
like. For example, if the game is in D:\OLDGAMES\TOUCHE, the command
|
||||
MOUNT C D:\OLDGAMES will allow you to run Touche from the D drive.
|
||||
|
||||
Mounting your entire C drive with MOUNT C C:\ is NOT recommended!
|
||||
If you or DOSBox makes a mistake you may loose all your files.
|
||||
It's recommended to put all your applications/games in a subdirectory and
|
||||
mount that.
|
||||
Mounting your entire C drive with MOUNT C C:\ is NOT recommended! The same
|
||||
is true for mounting the root of any other drive, except for CD-ROMs (due to
|
||||
their read-only nature). Otherwise if you or DOSBox make a mistakes you may
|
||||
loose all your files.
|
||||
It is recommended to put all your applications/games into a subdirectory
|
||||
and mount that.
|
||||
|
||||
General MOUNT Examples:
|
||||
1. To mount c:\DirX as a floppy :
|
||||
@ -361,9 +407,11 @@ MOUNT -u "Emulated Drive letter"
|
||||
6. To mount /home/user/dirY as drive C in DOSBox:
|
||||
mount c /home/user/dirY
|
||||
|
||||
|
||||
MEM
|
||||
Program to display the amount of free memory.
|
||||
|
||||
|
||||
CONFIG [-writeconf] [-writelang] localfile
|
||||
CONFIG -set "section property=value"
|
||||
CONFIG -get "section property"
|
||||
@ -371,7 +419,7 @@ CONFIG -get "section property"
|
||||
CONFIG can be used to change or query various settings of DOSBox
|
||||
during runtime. It can save the current settings and language strings to
|
||||
disk. Information about all possible sections and properties can
|
||||
be found in section 9 (The Config File).
|
||||
be found in section 11 (The Config File).
|
||||
|
||||
-writeconf localfile
|
||||
Write the current configuration settings to file. "localfile" is
|
||||
@ -379,7 +427,7 @@ CONFIG -get "section property"
|
||||
The configuration file controls various settings of DOSBox:
|
||||
the amount of emulated memory, the emulated soundcards and many more
|
||||
things. It allows access to AUTOEXEC.BAT as well.
|
||||
See section 9 (The Config File) for more information.
|
||||
See section 11 (The Config File) for more information.
|
||||
|
||||
-writelang localfile
|
||||
Write the current language settings to file. "localfile" is
|
||||
@ -409,13 +457,14 @@ CONFIG -get "section property"
|
||||
4. To check which cpu core is being used.
|
||||
config -get "cpu core"
|
||||
|
||||
|
||||
LOADFIX [-size] [program] [program-parameters]
|
||||
LOADFIX -f
|
||||
Program to reduce the amount of memory available. Useful for old programs
|
||||
which don't expect much memory to be free.
|
||||
|
||||
-size
|
||||
number of kb to "eat up", default = 64kb
|
||||
number of kilobytes to "eat up", default = 64kb
|
||||
|
||||
-f
|
||||
frees all previously allocated memory
|
||||
@ -467,9 +516,11 @@ IMGMOUNT
|
||||
-size [sectorsbytesize, sectorsperhead, heads, cylinders]
|
||||
|
||||
imagefile
|
||||
Location of the image files to mount in DOSBox. The location is on a
|
||||
mounted drive inside DOSBox. CD-ROM images can be mounted
|
||||
directly as well. They don't have to be on a mounted drive.
|
||||
Location of the image files to mount in DOSBox. The location can
|
||||
be on a mounted drive inside DOSBox, or on your real disk. It is
|
||||
possible to mount CD-ROM images (ISOs or CUE/BIN) as well, if you
|
||||
need CD swapping capabilities specify all images in succession.
|
||||
The CDs can be swapped with CTRL-F4 at any time.
|
||||
|
||||
-t
|
||||
The following are valid image types:
|
||||
@ -502,7 +553,7 @@ IMGMOUNT
|
||||
The Cylinders, Heads and Sectors specification of the drive.
|
||||
Required to mount hard drive images.
|
||||
|
||||
An example of CD-ROM images:
|
||||
An example how to mount CD-ROM images:
|
||||
1a. mount c /tmp
|
||||
1b. imgmount d c:\myiso.iso -t iso
|
||||
or (which also works):
|
||||
@ -511,10 +562,13 @@ IMGMOUNT
|
||||
|
||||
BOOT
|
||||
Boot will start floppy images or hard disk images independent of the
|
||||
operating system emulation offered by DOSBox. This will allow you to play
|
||||
booter floppies or boot to other operating systems inside DOSBox.
|
||||
operating system emulation offered by DOSBox. This will allow you to
|
||||
play booter floppies or boot other operating systems inside DOSBox.
|
||||
If the target emulated system is PCjr (machine=pcjr) the boot command
|
||||
can be used to load PCjr cartridges (.jrc).
|
||||
|
||||
BOOT [diskimg1.img diskimg2.img .. diskimgN.img] [-l driveletter]
|
||||
BOOT [cart.jrc] (PCjr only)
|
||||
|
||||
diskimgN.img
|
||||
This can be any number of floppy disk images one wants mounted after
|
||||
@ -528,6 +582,10 @@ BOOT
|
||||
The default is the A drive, the floppy drive. You can also boot
|
||||
a hard drive image mounted as master by specifying "-l C"
|
||||
without the quotes, or the drive as slave by specifying "-l D"
|
||||
|
||||
cart.jrc (PCjr only)
|
||||
When emulation of a PCjr is enabled, cartridges can be loaded with
|
||||
the BOOT command. Support is still limited.
|
||||
|
||||
|
||||
IPX
|
||||
@ -548,6 +606,10 @@ IPX
|
||||
For example, if your server is at bob.dosbox.com,
|
||||
you would type "IPXNET CONNECT bob.dosbox.com" on every non-server system.
|
||||
|
||||
To play games that need Netbios a file named NETBIOS.EXE from Novell is
|
||||
needed. Establish the IPX connection as explained above, then run
|
||||
"netbios.exe".
|
||||
|
||||
The following is an IPXNET command reference:
|
||||
|
||||
IPXNET CONNECT
|
||||
@ -578,6 +640,12 @@ IPX
|
||||
The syntax for IPXNET STARTSERVER is:
|
||||
IPXNET STARTSERVER <port>
|
||||
|
||||
If the server is behind a router, UDP port <port> needs to be forwarded
|
||||
to that computer.
|
||||
|
||||
On Linux/Unix-based systems port numbers smaller than 1023 can only be
|
||||
used with root privileges. Use ports greater than 1023 on those systems.
|
||||
|
||||
IPXNET STOPSERVER
|
||||
|
||||
IPXNET STOPSERVER stops the IPX tunnelling server running on this DOSBox
|
||||
@ -603,8 +671,42 @@ IPX
|
||||
IPX tunnelling network. For a list of all computers connected to the
|
||||
network use the IPXNET PING command.
|
||||
|
||||
The syntax for IPXNET STATUS is:
|
||||
IPXNET STATUS
|
||||
The syntax for IPXNET STATUS is:
|
||||
IPXNET STATUS
|
||||
|
||||
|
||||
KEYB [languagecode [codepage [codepagefile]]]
|
||||
Change the keyboard layout. For detailed information about keyboard
|
||||
layouts please see Section 7.
|
||||
|
||||
[languagecode] is a string consisting of two (in special cases more)
|
||||
characters, examples are GK (Greece) or IT (Italy). It specifies
|
||||
the keyboard layout to be used.
|
||||
|
||||
[codepage] is the number of the codepage to be used. The keyboard layout
|
||||
has to provide support for the specified codepage, otherwise the layout
|
||||
loading will fail.
|
||||
If no codepage is specified, an appropriate codepage for the requested
|
||||
layout is chosen automatically.
|
||||
|
||||
[codepagefile] can be used to load codepages that are yet not compiled
|
||||
into DOSBox. This is only needed when DOSBox does not find the codepage.
|
||||
|
||||
|
||||
Examples:
|
||||
1) To load the german keyboard layout (automatically uses codepage 858):
|
||||
keyb gr
|
||||
2) To load the russian keyboard layout with codepage 866:
|
||||
keyb ru 866
|
||||
In order to type russian characters press ALT+RIGHT-SHIFT.
|
||||
3) To load the french keyboard layout with codepage 850 (where the
|
||||
codepage is defined in EGACPI.DAT):
|
||||
keyb fr 850 EGACPI.DAT
|
||||
4) To load codepage 858 (without a keyboard layout):
|
||||
keyb none 858
|
||||
This can be used to change the codepage for the freedos keyb2 utility.
|
||||
|
||||
|
||||
|
||||
For more information use the /? command line switch with the programs.
|
||||
|
||||
@ -619,8 +721,8 @@ ALT-ENTER Switch to full screen and back.
|
||||
ALT-PAUSE Pause emulation.
|
||||
CTRL-F1 Start the keymapper.
|
||||
CTRL-F4 Change between mounted disk-images. Update directory cache for all drives!
|
||||
CTRL-ALT-F5 Start/Stop creating a movie of the screen.
|
||||
CTRL-F5 Save a screenshot.(png)
|
||||
CTRL-ALT-F5 Start/Stop creating a movie of the screen. (avi video capturing)
|
||||
CTRL-F5 Save a screenshot. (png)
|
||||
CTRL-F6 Start/Stop recording sound output to a wave file.
|
||||
CTRL-ALT-F7 Start/Stop recording of OPL commands.
|
||||
CTRL-ALT-F8 Start/Stop the recording of raw MIDI commands.
|
||||
@ -642,21 +744,22 @@ gets saved/recorded !
|
||||
|
||||
NOTE: Once you increase your DOSBox cycles beyond your computer's maximum
|
||||
capacity, it will produce the same effect as slowing down the emulation.
|
||||
This maximum will vary from computer to computer; there is no standard.
|
||||
This maximum will vary from computer to computer.
|
||||
|
||||
|
||||
|
||||
=============
|
||||
6. Keymapper:
|
||||
=============
|
||||
==========
|
||||
6. Mapper:
|
||||
==========
|
||||
|
||||
When you start the keymapper (either with CTRL-F1 or -startmapper as a
|
||||
command line argument to the DOSBox executable) you are presented with
|
||||
a virtual keyboard.
|
||||
When you start the DOSBox mapper (either with CTRL-F1 or -startmapper as
|
||||
a command line argument to the DOSBox executable) you are presented with
|
||||
a virtual keyboard and a virtual joystick.
|
||||
|
||||
This virtual keyboard corresponds to the keys DOSBox will report to its
|
||||
applications. If you click on a key with your mouse, you can see in the
|
||||
lower left corner which key on your keyboard corresponds to it.
|
||||
These virtual devices correspond to the keys DOSBox will report to the
|
||||
DOS applications. If you click on a key with your mouse, you can see in
|
||||
the lower left corner with which event it is associated (EVENT) and to
|
||||
what events it is currently bound.
|
||||
|
||||
Event: EVENT
|
||||
BIND: BIND
|
||||
@ -667,22 +770,24 @@ mod3
|
||||
|
||||
|
||||
EVENT
|
||||
The key DOSBox will report to the applications being emulated.
|
||||
The key or joystick axis/button/hat DOSBox will report to DOS applications.
|
||||
BIND
|
||||
The key on your keyboard (as reported by SDL) which is connected to the
|
||||
EVENT.
|
||||
The key on your real keyboard or the axis/button/hat on your real
|
||||
joystick(s) (as reported by SDL) which is connected to the EVENT.
|
||||
mod1,2,3
|
||||
Modfiers. These are keys you need to have pressed as well, while pressing
|
||||
BIND. mod1 = CTRL and mod2 = ALT. These are generally only used when you
|
||||
Modfiers. These are keys you need to have to be pressed while pressing
|
||||
BIND. mod1 = CTRL and mod2 = ALT. These are generally only used when you
|
||||
want to change the special keys of DOSBox.
|
||||
Add
|
||||
Add a new BIND to this EVENT. Basically add a key from your keyboard which
|
||||
will produce the key EVENT in DOSBox.
|
||||
Add a new BIND to this EVENT. Basically add a key from your keyboard or an
|
||||
event from the joystick (button press, axis/hat movement) which will
|
||||
produce the EVENT in DOSBox.
|
||||
Del
|
||||
Delete the BIND to this EVENT. If an EVENT has no BINDS, then it's not
|
||||
possible to type this key in DOSBox.
|
||||
Delete the BIND to this EVENT. If an EVENT has no BINDS, then it is not
|
||||
possible to trigger this event in DOSBox (that is there's no way to type
|
||||
the key or use the respective action of the joystick).
|
||||
Next
|
||||
Go through the list of keys(BINDS) which map to this EVENT.
|
||||
Go through the list of bindings which map to this EVENT.
|
||||
|
||||
|
||||
Example:
|
||||
@ -702,60 +807,242 @@ Q3. If you try it out in DOSBox, you will notice that pressing X makes ZX
|
||||
mapped key X. Click "Del".
|
||||
|
||||
|
||||
If you change the default mapping, you can save your changes by pressing
|
||||
Examples about remapping the joystick:
|
||||
You have a joystick attached, it is working fine under DOSBox and you
|
||||
want to play some keyboard-only game with the joystick (it is assumed
|
||||
that the game is controlled by the arrows on the keyboard):
|
||||
1) Start the mapper, then klick on one of the arrows in the middle
|
||||
of the left part of the screen (right above the Mod1/Mod2 buttons).
|
||||
EVENT should be key_left. Now klick on Add and move your joystick
|
||||
in the respective direction, this should add an event to the BIND.
|
||||
2) Repeat the above for the missing three directions, additionally
|
||||
the buttons of the joystick can be remapped as well (fire/jump).
|
||||
3) Click on Save, then on Exit and test it with some game.
|
||||
|
||||
You want to swap the y-axis of the joystick because some flightsim uses
|
||||
the up/down joystick movement in a way you don't like, and it is not
|
||||
configurable in the game itself:
|
||||
1) Start the mapper and klick on Y- in the upper joystick field (this
|
||||
is for the first joystick if you have two joysticks attached) or the
|
||||
lower joystick field (second joystick or, if you have only one
|
||||
joystick attached, the second axes cross).
|
||||
EVENT should be jaxis_0_1- (or jaxis_1_1-).
|
||||
2) Click on Del to remove the current binding, then klick Add and move
|
||||
your joystick downwards. A new bind should be created.
|
||||
3) Repeat this for Y+, save the layout and finally test it with some game.
|
||||
|
||||
|
||||
|
||||
If you change the default mapping, you can save your changes by clicking on
|
||||
"Save". DOSBox will save the mapping to a location specified in the configfile
|
||||
(mapperfile=mapper.txt). At startup, DOSBox will load your mapperfile, if it's
|
||||
present in the configfile.
|
||||
|
||||
|
||||
|
||||
=======================
|
||||
7. System requirements:
|
||||
=======================
|
||||
|
||||
Fast machine. My guess would be pentium-2 400+ to get decent emulation
|
||||
of games written for an 286 machine.
|
||||
For protected mode games a 1 Ghz machine is recommended - don't expect
|
||||
them to run fast, though! Be sure to read the next section on how to speed
|
||||
it up somewhat.
|
||||
|
||||
|
||||
|
||||
===================================
|
||||
8. To run resource-demanding games:
|
||||
===================================
|
||||
|
||||
DOSBox emulates the CPU, the sound and graphic cards, and some other
|
||||
stuff, all at the same time. You can overclock DOSBox by using CTRL-F12, but
|
||||
you'll be limited by the power of your actual CPU. You can see how much free
|
||||
time your true CPU has by looking at the Task Manager in Windows 2000/XP and
|
||||
the System Monitor in Windows 95/98/ME. Once 100% of your real CPU time is
|
||||
used there is no further way to speed up DOSBox unless you reduce the load
|
||||
generated by the non-CPU parts of DOSBox.
|
||||
|
||||
So:
|
||||
|
||||
Close every program but DOSBox
|
||||
|
||||
Overclock DOSBox until 100% of your CPU is used (use the utilities above to
|
||||
check)
|
||||
|
||||
Since VGA emulation is the most demanding part of DOSBox in terms of actual
|
||||
CPU usage, we'll start there. Increase the number of frames skipped (in
|
||||
increments of one) by pressing CTRL-F8. Your CPU usage should decrease.
|
||||
Go back one step and repeat this until the game runs fast enough for you.
|
||||
Please note that this is a trade-off: you lose in fluidity of video what you
|
||||
gain in speed
|
||||
|
||||
You can also try to disable the sound through the setup utility of the game
|
||||
to reduce load on your CPU further.
|
||||
(mapperfile=mapper.txt). At startup, DOSBox will load your mapperfile, if it
|
||||
is present in the configfile.
|
||||
|
||||
|
||||
|
||||
===================
|
||||
9. The Config File:
|
||||
7. Keyboard Layout:
|
||||
===================
|
||||
|
||||
To switch to a different keyboard layout, either the entry "keyboardlayout"
|
||||
in the [dos]-section in dosbox.conf can be used, or the internal DOSBox
|
||||
program keyb.com. Both accept dos-conform language codes (see below), but
|
||||
only by using keyb.com a custom codepage can be specified.
|
||||
|
||||
Layout switching
|
||||
DOSBox supports a number of keyboard layouts and codepages by default,
|
||||
in this case just the layout identifier needs to be specified (like
|
||||
keyboardlayout=sv in the DOSBox config file, or using "keyb sv" at
|
||||
the DOSBox command prompt).
|
||||
|
||||
Internally supported keyboard layouts:
|
||||
BG (Bulgaria), CZ243 (Czech Republic), FR (France), GK (Greece),
|
||||
GR (Germany), HR (Croatia), HU (Hungary), IT (Italy), NL (Netherlands),
|
||||
NO (Norway), PL (Poland), RU (Russian Federation), SK (Slovakia), SP (Spain),
|
||||
SU (Finland), SV (Sweden)
|
||||
|
||||
When a keyboard layout is loaded, it is possible to switch between the
|
||||
foreign layout and the US-layout by pressing CTRL+ALT+F2.
|
||||
Some keyboard layouts (for example layout GK codepage 869 and layout RU
|
||||
codepage 808) have support for dual-layouts that can be activated by
|
||||
pressing LEFT-ALT+RIGHT-SHIFT and deactivated by LEFT-ALT+LEFT-SHIFT.
|
||||
|
||||
Supported external files
|
||||
The freedos .kl files are supported (freedos keyb2 keyboard layoutfiles) as
|
||||
well as the freedos keyboard.sys/keybrd2.sys/keybrd3.sys libraries which
|
||||
consist of all available .kl files.
|
||||
See http://projects.freedos.net/keyb/ for precompiled keyboard layouts.
|
||||
|
||||
Both .CPI (MSDOS/compatible codepage files) and .CPX (freedos UPX-compressed
|
||||
codepage files) can be used. Some codepages are compiled into DOSBox so it
|
||||
is mostly not needed to care about external codepage files. If you need
|
||||
a different (or custom) codepage file, copy it into the directory of the
|
||||
DOSBox configuration file so it is accessible for DOSBox.
|
||||
|
||||
Additional layouts can be added by copying the corresponding .kl-file into
|
||||
the directory of dosbox.conf and using the first part of the filename as
|
||||
language code.
|
||||
Example: For the file UZ.KL (keyboard layout for Uzbekistan) specify
|
||||
"keyboardlayout=uz" in dosbox.conf.
|
||||
|
||||
|
||||
Note that the keyboard layout allows foreign characters to be entered, but
|
||||
there is NO support for them in filenames. Try to avoid them both inside
|
||||
DOSBox as well as in files on your host operating system that are accessible
|
||||
by DOSBox.
|
||||
|
||||
|
||||
|
||||
==============================
|
||||
8. Serial Multiplayer feature:
|
||||
==============================
|
||||
|
||||
DOSBox can emulate a serial nullmodem cable over network and internet.
|
||||
It can be configured through the [serialports] section in the DOSBox
|
||||
configuration file.
|
||||
|
||||
To create a nullmodem connection, one side needs to act as the server and
|
||||
one as the client.
|
||||
|
||||
The server needs to be set up in the DOSBox configuration file like this:
|
||||
serial1=nullmodem
|
||||
|
||||
The client:
|
||||
serial1=nullmodem server:<IP or name of the server>
|
||||
|
||||
Now start your game and choose nullmodem / serial cable / already connected
|
||||
as multiplayer method on COM1. Set the same baudrate on both computers.
|
||||
|
||||
Furthermore, additional parameters can be specified to control the behavior
|
||||
of the nullmodem connection. These are all parameters:
|
||||
|
||||
* port: - TCP port number. Default: 23
|
||||
* rxdelay: - how long (milliseconds) to delay received data if the
|
||||
interface is not ready. Increase this value if you encounter
|
||||
overrun errors in the DOSBox Status Window. Default: 100
|
||||
* txdelay: - how long to gather data before sending a packet. Default: 12
|
||||
(reduces Network overhead)
|
||||
* server: - This nullmodem will be a client connecting to the specified
|
||||
server. (No server argument: be a server.)
|
||||
* transparent:1 - Only send the serial data, no RTS/DTR handshake. Use this
|
||||
when connecting to anyting other than a nullmodem.
|
||||
* telnet:1 - Interpret Telnet data from the remote site. Automatically
|
||||
sets transparent.
|
||||
* usedtr:1 - The connection will not be established until DTR is switched
|
||||
on by the DOS program. Useful for modem terminals.
|
||||
Automatically sets transparent.
|
||||
* inhsocket:1 - Use a socket passed to DOSBox by command line. Automatically
|
||||
sets transparent. (Socket Inheritance: It is used for
|
||||
playing old DOS door games on new BBS software.)
|
||||
|
||||
Example: Be a server listening on TCP port 5000.
|
||||
serial1=nullmodem server:<IP or name of the server> port:5000 rxdelay:1000
|
||||
|
||||
|
||||
|
||||
=======================================
|
||||
9. How to run resource-demanding games:
|
||||
=======================================
|
||||
|
||||
DOSBox emulates the CPU, the sound and graphic cards, and other peripherals
|
||||
of a PC, all at the same time. The speed of an emulated DOS application
|
||||
depends on how many instructions can be emulated, which is adjustable
|
||||
(number of cycles).
|
||||
|
||||
CPU Cycles
|
||||
By default (cycles=auto) DOSBox tries to detect whether a game needs to
|
||||
be run with as many instructions emulated per time interval as possible.
|
||||
You can force this behaviour by setting cycles=max in the DOSBox
|
||||
configuration file. The DOSBox window will display a line "Cpu Cyles: max"
|
||||
at the top then. In this mode you can reduce the amount of cycles on a
|
||||
percentage-basis (hit CTRL-F11) or raise it again (CTRL-F12).
|
||||
|
||||
Sometimes customly setting the number of cycles achieves better results,
|
||||
in the DOSBox configuration file specify for example cycles=30000. When
|
||||
running some DOS application you can raise the cycles with CTRL-F12 even
|
||||
more, but you will be limited by the power of your actual CPU. You can see
|
||||
how much free time your true CPU has by looking at the Task Manager in
|
||||
Windows 2000/XP and the System Monitor in Windows 95/98/ME. Once 100% of
|
||||
your real CPU time is used there is no further way to speed up DOSBox
|
||||
unless you reduce the load generated by the non-CPU parts of DOSBox.
|
||||
|
||||
CPU Cores
|
||||
On x86 architectures you can try to force the usage of a dynamically
|
||||
recompiling core (set core=dynamic in the DOSBox configuration file).
|
||||
This usually gives better results if the auto detection (core=auto) fails.
|
||||
It is best accompanied by cycles=max. Note that there might be games
|
||||
that work worse with the dynamic core, or do not work at all!
|
||||
|
||||
Graphics emulation
|
||||
VGA emulation is a very demanding part of DOSBox in terms of actual CPU
|
||||
usage. Increase the number of frames skipped (in increments of one) by
|
||||
pressing CTRL-F8. Your CPU usage should decrease when using a fixed
|
||||
cycle setting.
|
||||
Go back one step and repeat this until the game runs fast enough for you.
|
||||
Please note that this is a trade-off: you lose in fluidity of video what
|
||||
you gain in speed.
|
||||
|
||||
Sound emulation
|
||||
You can also try to disable the sound through the setup utility of the game
|
||||
to reduce load on your CPU further. Setting nosound=true does NOT disable
|
||||
the emulation of sound devices, just the sound output will be disabled.
|
||||
|
||||
Also try to close every program but DOSBox to reserve as much resources
|
||||
as possible for DOSBox.
|
||||
|
||||
|
||||
Advanced cycles configuration:
|
||||
The cycles=auto and cycles=max settings can be parametrized to have
|
||||
different startup defaults. The syntax is
|
||||
cycles=auto ["realmode default"] ["protected mode default"%]
|
||||
[limit "cycle limit"]
|
||||
cycles=max ["protected mode default"%] [limit "cycle limit"]
|
||||
Example:
|
||||
cycles=auto 1000 80% limit 20000
|
||||
will use cycles=1000 for real mode games, 80% cpu throttling for
|
||||
protected mode games along with a hard cycle limit of 20000
|
||||
|
||||
|
||||
|
||||
====================
|
||||
10. Troubleshooting:
|
||||
====================
|
||||
|
||||
DOSBox crashes right after starting it:
|
||||
- use different values for the output= entry in your DOSBox
|
||||
configuration file
|
||||
- try to update your graphics card driver and DirectX
|
||||
|
||||
Running a certain game closes DOSBox, crashes with some message or hangs:
|
||||
- see if it works with a default DOSBox installation
|
||||
(unmodified configuration file)
|
||||
- try it with sound disabled (use the sound configuration
|
||||
program that comes with the game, additionally you can
|
||||
use sbtype=none and gus=false)
|
||||
- change some entries of the DOSBox configuration file, especially try:
|
||||
core=normal
|
||||
fixed cycles (for example cycles=10000)
|
||||
ems=false
|
||||
xms=false
|
||||
or combinations of the above settings
|
||||
- use loadfix before starting the game
|
||||
|
||||
The game exits to the DOSBox prompt with some error message:
|
||||
- read the error message closely and try to locate the error
|
||||
- try the hints at the above sections
|
||||
- mount differently as some games are picky about the locations,
|
||||
for example if you used "mount d d:\oldgames\game" try
|
||||
"mount c d:\oldgames\game" and "mount c d:\oldgames"
|
||||
- if the game requires a cdrom be sure you used "-t cdrom" when
|
||||
mounting and try different additional parameters
|
||||
- check the file permissions of the game files (remove read-only
|
||||
attributes, add write permissions etc.)
|
||||
- try reinstalling the game within dosbox
|
||||
|
||||
====================
|
||||
11. The Config File:
|
||||
====================
|
||||
|
||||
A config file can be generated by CONFIG.COM, which can be found on the
|
||||
internal dosbox Z: drive when you start up dosbox. Look in the internal
|
||||
programs section of the readme for usage of CONFIG.COM.
|
||||
@ -767,14 +1054,16 @@ Some sections have options you can set.
|
||||
The generated configfile contains the current settings. You can alter them and
|
||||
start DOSBox with the -conf switch to load the file and use these settings.
|
||||
|
||||
If no configfile is specified with the -conf switch, DOSBox will look in the
|
||||
current directory for dosbox.conf. Then it will look for ~/.dosboxrc (Linux),
|
||||
~\dosbox.conf (Win32) or "~/Library/Preferences/DOSBox Preferences" (MACOSX).
|
||||
DOSBox will first parse the settings in ~/.dosboxrc (Linux),
|
||||
~\dosbox.conf (Win32) or "~/Library/Preferences/DOSBox Preferences"
|
||||
(MACOSX). Afterwards DOSBox will parse all configfiles specified with the
|
||||
-conf switch. If no configfile is specified with the -conf switch, DOSBox will
|
||||
look in the current directory for dosbox.conf.
|
||||
|
||||
|
||||
|
||||
======================
|
||||
10. The Language File:
|
||||
12. The Language File:
|
||||
======================
|
||||
|
||||
A language file can be generated by CONFIG.COM.
|
||||
@ -786,7 +1075,7 @@ section. There's a language= entry that can be changed with the filename.
|
||||
|
||||
|
||||
========================================
|
||||
11. Building your own version of DOSBox:
|
||||
13. Building your own version of DOSBox:
|
||||
========================================
|
||||
|
||||
Download the source.
|
||||
@ -795,7 +1084,7 @@ Check the INSTALL in the source distribution.
|
||||
|
||||
|
||||
===================
|
||||
12. Special Thanks:
|
||||
14. Special thanks:
|
||||
===================
|
||||
|
||||
Vlad R. of the VDMSound project for excellent SoundBlaster info.
|
||||
@ -804,12 +1093,15 @@ The Bochs and DOSemu projects, which I used for information.
|
||||
Freedos for ideas in making my shell.
|
||||
Pierre-Yves Gérardy for hosting the old Beta Board.
|
||||
Colin Snover for hosting our forum.
|
||||
Jantien for the version management.
|
||||
Shawn and Johannes for creating the MAC OS X PPC version.
|
||||
Ido Beeri for the icon.
|
||||
The Beta Testers.
|
||||
|
||||
|
||||
|
||||
============
|
||||
13. Contact:
|
||||
15. Contact:
|
||||
============
|
||||
|
||||
See the site:
|
||||
|
4
THANKS
4
THANKS
@ -14,6 +14,10 @@ Colin Snover for hosting our forum.
|
||||
Sourceforge for hosting our homepage and other development tools.
|
||||
Mirek Luza for his moderation of the forums.
|
||||
c2woody for his debug work.
|
||||
|
||||
Jantien for the version management.
|
||||
Shawn and Johannes for creating the MAC OS X PPC version.
|
||||
Ido Beeri for the icon.
|
||||
All the people who submitted a bug.
|
||||
The Beta Testers.
|
||||
|
||||
|
@ -305,7 +305,7 @@ AC_SUBST(ALSA_LIBS)
|
||||
|
||||
AH_TOP([
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
1470
aclocal.m4
vendored
1470
aclocal.m4
vendored
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ echo "This may take a while ..."
|
||||
|
||||
aclocal
|
||||
autoheader
|
||||
automake --gnits --include-deps --add-missing --copy
|
||||
automake --include-deps --add-missing --copy
|
||||
autoconf
|
||||
|
||||
echo "Now you are ready to run ./configure."
|
||||
|
592
config.guess
vendored
592
config.guess
vendored
File diff suppressed because it is too large
Load Diff
24
config.h.in
24
config.h.in
@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -26,7 +26,7 @@
|
||||
/* Define to 1 to enable internal debugger, requires libcurses */
|
||||
#undef C_DEBUG
|
||||
|
||||
/* Define to 1 if you want serial passthrough support (Win32 and OS/2 only).
|
||||
/* Define to 1 if you want serial passthrough support (Win32, Posix and OS/2).
|
||||
*/
|
||||
#undef C_DIRECTSERIAL
|
||||
|
||||
@ -76,6 +76,9 @@
|
||||
/* Define to 1 to use a unaligned memory access */
|
||||
#undef C_UNALIGNED_MEMORY
|
||||
|
||||
/* libm doesn't include powf */
|
||||
#undef DB_HAVE_NO_POWF
|
||||
|
||||
/* environ can be included */
|
||||
#undef ENVIRON_INCLUDED
|
||||
|
||||
@ -94,6 +97,9 @@
|
||||
/* Define to 1 if you have the `asound' library (-lasound). */
|
||||
#undef HAVE_LIBASOUND
|
||||
|
||||
/* Define to 1 if you have the `m' library (-lm). */
|
||||
#undef HAVE_LIBM
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
@ -145,22 +151,22 @@
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* The size of a `int *', as computed by sizeof. */
|
||||
/* The size of `int *', as computed by sizeof. */
|
||||
#undef SIZEOF_INT_P
|
||||
|
||||
/* The size of a `unsigned char', as computed by sizeof. */
|
||||
/* The size of `unsigned char', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_CHAR
|
||||
|
||||
/* The size of a `unsigned int', as computed by sizeof. */
|
||||
/* The size of `unsigned int', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_INT
|
||||
|
||||
/* The size of a `unsigned long', as computed by sizeof. */
|
||||
/* The size of `unsigned long', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_LONG
|
||||
|
||||
/* The size of a `unsigned long long', as computed by sizeof. */
|
||||
/* The size of `unsigned long long', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_LONG_LONG
|
||||
|
||||
/* The size of a `unsigned short', as computed by sizeof. */
|
||||
/* The size of `unsigned short', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_SHORT
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
@ -185,7 +191,7 @@
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
#define INLINE inline
|
||||
|
124
config.sub
vendored
124
config.sub
vendored
@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2004-06-24'
|
||||
timestamp='2006-02-23'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
@ -21,14 +21,15 @@ timestamp='2004-06-24'
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
|
||||
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||
# diff and a properly formatted ChangeLog entry.
|
||||
#
|
||||
@ -70,7 +71,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
||||
version="\
|
||||
GNU config.sub ($timestamp)
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
@ -83,11 +84,11 @@ Try \`$me --help' for more information."
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
--time-stamp | --time* | -t )
|
||||
echo "$timestamp" ; exit 0 ;;
|
||||
echo "$timestamp" ; exit ;;
|
||||
--version | -v )
|
||||
echo "$version" ; exit 0 ;;
|
||||
echo "$version" ; exit ;;
|
||||
--help | --h* | -h )
|
||||
echo "$usage"; exit 0 ;;
|
||||
echo "$usage"; exit ;;
|
||||
-- ) # Stop option processing
|
||||
shift; break ;;
|
||||
- ) # Use stdin as input.
|
||||
@ -99,7 +100,7 @@ while test $# -gt 0 ; do
|
||||
*local*)
|
||||
# First pass through any local machine types.
|
||||
echo $1
|
||||
exit 0;;
|
||||
exit ;;
|
||||
|
||||
* )
|
||||
break ;;
|
||||
@ -118,8 +119,9 @@ esac
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
|
||||
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
@ -170,6 +172,10 @@ case $os in
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco6)
|
||||
os=-sco5v6
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco5)
|
||||
os=-sco3.2v5
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
@ -186,6 +192,10 @@ case $os in
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco5v6*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
@ -231,13 +241,14 @@ case $basic_machine in
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| am33_2.0 \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||
| bfin \
|
||||
| c4x | clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 | frv \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k | iq2000 \
|
||||
| m32r | m32rle | m68000 | m68k | m88k | mcore \
|
||||
| m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
@ -246,6 +257,7 @@ case $basic_machine in
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
| mips64vr5900 | mips64vr5900el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa32r2 | mipsisa32r2el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
@ -254,23 +266,29 @@ case $basic_machine in
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| mt \
|
||||
| msp430 \
|
||||
| nios | nios2 \
|
||||
| ns16k | ns32k \
|
||||
| openrisc | or32 \
|
||||
| or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
|
||||
| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
|
||||
| sparcv8 | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| tahoe | thumb | tic4x | tic80 | tron \
|
||||
| v850 | v850e \
|
||||
| we32k \
|
||||
| x86 | xscale | xstormy16 | xtensa \
|
||||
| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||
| z8k)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m32c)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m6811 | m68hc11 | m6812 | m68hc12)
|
||||
# Motorola 68HC11/12.
|
||||
basic_machine=$basic_machine-unknown
|
||||
@ -278,6 +296,9 @@ case $basic_machine in
|
||||
;;
|
||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
||||
;;
|
||||
ms1)
|
||||
basic_machine=mt-unknown
|
||||
;;
|
||||
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
@ -298,7 +319,7 @@ case $basic_machine in
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| bfin-* | bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||
| clipper-* | craynv-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
@ -310,7 +331,7 @@ case $basic_machine in
|
||||
| ip2k-* | iq2000-* \
|
||||
| m32r-* | m32rle-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
@ -319,6 +340,7 @@ case $basic_machine in
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
| mips64vr5900-* | mips64vr5900el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
@ -327,27 +349,32 @@ case $basic_machine in
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mmix-* \
|
||||
| mt-* \
|
||||
| msp430-* \
|
||||
| nios-* | nios2-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||
| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
|
||||
| sparclite-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
| xtensa-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| xstormy16-* | xtensa-* \
|
||||
| ymp-* \
|
||||
| z8k-*)
|
||||
;;
|
||||
m32c-*)
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
386bsd)
|
||||
@ -457,6 +484,9 @@ case $basic_machine in
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
crisv32 | crisv32-* | etraxfs*)
|
||||
basic_machine=crisv32-axis
|
||||
;;
|
||||
cris | cris-* | etrax*)
|
||||
basic_machine=cris-axis
|
||||
;;
|
||||
@ -486,6 +516,10 @@ case $basic_machine in
|
||||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
djgpp)
|
||||
basic_machine=i586-pc
|
||||
os=-msdosdjgpp
|
||||
;;
|
||||
dpx20 | dpx20-*)
|
||||
basic_machine=rs6000-bull
|
||||
os=-bosx
|
||||
@ -676,6 +710,9 @@ case $basic_machine in
|
||||
basic_machine=i386-pc
|
||||
os=-msdos
|
||||
;;
|
||||
ms1-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
||||
;;
|
||||
mvs)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
@ -751,9 +788,8 @@ case $basic_machine in
|
||||
basic_machine=hppa1.1-oki
|
||||
os=-proelf
|
||||
;;
|
||||
or32 | or32-*)
|
||||
openrisc | openrisc-*)
|
||||
basic_machine=or32-unknown
|
||||
os=-coff
|
||||
;;
|
||||
os400)
|
||||
basic_machine=powerpc-ibm
|
||||
@ -784,6 +820,12 @@ case $basic_machine in
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pc98)
|
||||
basic_machine=i386-pc
|
||||
;;
|
||||
pc98-*)
|
||||
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
@ -840,6 +882,10 @@ case $basic_machine in
|
||||
basic_machine=i586-unknown
|
||||
os=-pw32
|
||||
;;
|
||||
rdos)
|
||||
basic_machine=i386-pc
|
||||
os=-rdos
|
||||
;;
|
||||
rom68k)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
@ -1026,6 +1072,10 @@ case $basic_machine in
|
||||
basic_machine=hppa1.1-winbond
|
||||
os=-proelf
|
||||
;;
|
||||
xbox)
|
||||
basic_machine=i686-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
@ -1075,12 +1125,9 @@ case $basic_machine in
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
sparc | sparcv8 | sparcv9 | sparcv9b)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
@ -1154,20 +1201,23 @@ case $os in
|
||||
| -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
| -openbsd* | -solidbsd* \
|
||||
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
|
||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
||||
| -skyos* | -haiku* | -rdos*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-qnx*)
|
||||
@ -1185,7 +1235,7 @@ case $os in
|
||||
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
|
||||
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
||||
;;
|
||||
-mac*)
|
||||
@ -1294,6 +1344,9 @@ case $os in
|
||||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
@ -1371,6 +1424,9 @@ case $basic_machine in
|
||||
*-be)
|
||||
os=-beos
|
||||
;;
|
||||
*-haiku)
|
||||
os=-haiku
|
||||
;;
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
@ -1542,7 +1598,7 @@ case $basic_machine in
|
||||
esac
|
||||
|
||||
echo $basic_machine$os
|
||||
exit 0
|
||||
exit
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
|
102
configure.in
102
configure.in
@ -1,5 +1,5 @@
|
||||
dnl Init.
|
||||
AC_INIT(dosbox,0.65)
|
||||
AC_INIT(dosbox,0.70)
|
||||
AC_PREREQ(2.50)
|
||||
AC_CONFIG_SRCDIR(README)
|
||||
|
||||
@ -51,31 +51,47 @@ AC_CHECK_SIZEOF(unsigned long long)
|
||||
AC_CHECK_SIZEOF(int *)
|
||||
|
||||
AC_MSG_CHECKING(if environ can be included)
|
||||
AC_TRY_LINK([#include <unistd.h>
|
||||
#include <stdlib.h>],[*environ;],
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>]],[[*environ;]])],
|
||||
[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_INCLUDED,1,[environ can be included])],AC_MSG_RESULT(no))
|
||||
|
||||
AC_MSG_CHECKING(if environ can be linked)
|
||||
AC_TRY_LINK([extern char ** environ;],[*environ;],
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern char ** environ;]],[[*environ;]])],
|
||||
[AC_MSG_RESULT(yes);AC_DEFINE(ENVIRON_LINKED,1,[environ can be linked])],AC_MSG_RESULT(no))
|
||||
|
||||
dnl Check for powf
|
||||
if test x$target = xi386-pc-os2-emx ; then
|
||||
AC_MSG_CHECKING(for powf in libm);
|
||||
LIBS_BACKUP=$LIBS;
|
||||
LIBS="$LIBS -lm";
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],[[
|
||||
powf(1.0f, 1.0f);
|
||||
]])], [AC_MSG_RESULT(yes)], [AC_DEFINE([DB_HAVE_NO_POWF],[1],[libm doesn't include powf])])
|
||||
LIBS=$LIBS_BACKUP
|
||||
else
|
||||
AC_CHECK_LIB([m],[powf],,[AC_DEFINE([DB_HAVE_NO_POWF],[1],[libm doesn't include powf])])
|
||||
fi
|
||||
|
||||
dnl Checks for libraries.
|
||||
|
||||
#Check if the compiler support attributes
|
||||
AH_TEMPLATE([C_HAS_ATTRIBUTE],[Determines if the compilers supports attributes for structures.])
|
||||
AC_MSG_CHECKING(if compiler allows __attribute__)
|
||||
AC_TRY_COMPILE([], [typedef struct { } __attribute__ ((packed)) junk;],
|
||||
[ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_ATTRIBUTE)],AC_MSG_RESULT(no))
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
typedef struct { } __attribute__((packed)) junk;]],
|
||||
[[ ]])],[ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_ATTRIBUTE)],AC_MSG_RESULT(no))
|
||||
|
||||
#Check if the compiler supports __builtin_expect
|
||||
#Switch language to c++
|
||||
AC_LANG_PUSH(C++)
|
||||
AH_TEMPLATE([C_HAS_BUILTIN_EXPECT],[Determines if the compilers supports __builtin_expect for branch prediction.])
|
||||
AC_MSG_CHECKING(if compiler allows __builtin_expect)
|
||||
AC_TRY_COMPILE([],[
|
||||
int main(int argc,char* argv[]){
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[
|
||||
int x=10;if( __builtin_expect ((x==1),0) ) ;
|
||||
return 0;
|
||||
}
|
||||
], [ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_BUILTIN_EXPECT)],AC_MSG_RESULT(no))
|
||||
|
||||
]])], [ AC_MSG_RESULT(yes);AC_DEFINE(C_HAS_BUILTIN_EXPECT)],AC_MSG_RESULT(no))
|
||||
#switch language back
|
||||
AC_LANG_POP(C++)
|
||||
|
||||
AM_PATH_ALSA(0.9.0, AC_DEFINE(HAVE_ALSA,1,[Define to 1 to use ALSA for MIDI]) , : )
|
||||
|
||||
@ -217,18 +233,15 @@ if test x$target = xi386-pc-os2-emx ; then
|
||||
AC_MSG_CHECKING(for SDLNet_Init in SDL_net);
|
||||
LIBS_BACKUP=$LIBS;
|
||||
LIBS="$LIBS -lSDL_Net";
|
||||
AC_LINK_IFELSE([
|
||||
#include <SDL_Net.h>
|
||||
int main(int argc,char * argv[]) {
|
||||
return SDLNet_Init ();
|
||||
};
|
||||
], [AC_MSG_RESULT(yes); have_sdl_net_lib=yes], AC_MSG_RESULT(no))
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <SDL_Net.h>]],[[
|
||||
SDLNet_Init ();
|
||||
]])], [AC_MSG_RESULT(yes); have_sdl_net_lib=yes], AC_MSG_RESULT(no))
|
||||
LIBS=$LIBS_BACKUP
|
||||
else
|
||||
AC_CHECK_LIB(SDL_net, SDLNet_Init, have_sdl_net_lib=yes, , )
|
||||
fi
|
||||
if test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then
|
||||
LIBS="$LIBS -lSDL_net"
|
||||
LIBS="$LIBS -lSDL_net"
|
||||
AC_DEFINE(C_MODEM,1)
|
||||
AC_DEFINE(C_IPX,1)
|
||||
else
|
||||
@ -237,24 +250,35 @@ fi
|
||||
|
||||
AH_TEMPLATE(C_OPENGL,[Define to 1 to use opengl display output support])
|
||||
AC_ARG_ENABLE(opengl,AC_HELP_STRING([--disable-opengl],[Disable opengl support]),,enable_opengl=yes)
|
||||
AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , )
|
||||
AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , )
|
||||
AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , )
|
||||
AC_MSG_CHECKING(whether opengl display output will be enabled)
|
||||
if test x$enable_opengl = xyes -a x$have_gl_h = xyes -a x$have_gl_lib = xyes ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -lGL"
|
||||
AC_DEFINE(C_OPENGL,1)
|
||||
elif test x$enable_opengl = xyes -a x$have_gl_h = xyes -a x$have_opengl32_lib = xyes ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -lopengl32"
|
||||
AC_DEFINE(C_OPENGL,1)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test x$enable_opengl = xyes; then
|
||||
case "$target" in
|
||||
*-*-darwin*)
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -framework OpenGL"
|
||||
AC_DEFINE(C_OPENGL,1)
|
||||
;;
|
||||
*)
|
||||
AC_CHECK_LIB(GL, main, have_gl_lib=yes, have_gl_lib=no , )
|
||||
AC_CHECK_LIB(opengl32, main, have_opengl32_lib=yes,have_opengl32_lib=no , )
|
||||
AC_CHECK_HEADER(GL/gl.h, have_gl_h=yes , have_gl_h=no , )
|
||||
if test x$have_gl_h = xyes -a x$have_gl_lib = xyes ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -lGL"
|
||||
AC_DEFINE(C_OPENGL,1)
|
||||
elif test x$have_gl_h = xyes -a x$have_opengl32_lib = xyes ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -lopengl32"
|
||||
AC_DEFINE(C_OPENGL,1)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
AH_TEMPLATE(C_SDL_SOUND,[Define to 1 to enable SDL_sound support])
|
||||
AC_CHECK_HEADER(SDL/SDL_sound.h,have_SDL_sound_h=yes,)
|
||||
AC_CHECK_HEADER(SDL_sound.h,have_SDL_sound_h=yes,)
|
||||
AC_CHECK_LIB(SDL_sound, Sound_Init, have_SDL_sound_init=yes,,)
|
||||
AC_CHECK_LIB(SDL_sound, Sound_Seek, have_SDL_sound_seek=yes,,)
|
||||
if test x$have_SDL_sound_h = xyes -a x$have_SDL_sound_init = xyes ; then
|
||||
@ -290,7 +314,10 @@ case "$target" in
|
||||
*-*-cygwin* | *-*-mingw32*)
|
||||
LIBS="$LIBS -lwinmm"
|
||||
AC_CHECK_HEADERS(ddraw.h)
|
||||
AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial passthrough support (Win32 and OS/2 only).])
|
||||
AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial passthrough support (Win32, Posix and OS/2 only).])
|
||||
if test x$have_sdl_net_lib = xyes -a x$have_sdl_net_h = xyes ; then
|
||||
LIBS="$LIBS -lws2_32"
|
||||
fi
|
||||
;;
|
||||
*-*-darwin*)
|
||||
dnl We have a problem here: both MacOS X and Darwin report
|
||||
@ -302,10 +329,11 @@ case "$target" in
|
||||
;;
|
||||
*-*-linux-gnu*)
|
||||
AC_DEFINE(LINUX, 1, [Compiling on GNU/Linux])
|
||||
AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial passthrough support (Win32, Posix and OS/2).])
|
||||
;;
|
||||
*-*-os2-emx*)
|
||||
AC_DEFINE(OS2, 1, [Compiling on OS/2 EMX])
|
||||
AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial passthrough support (Win32 and OS/2 only).])
|
||||
AC_DEFINE(C_DIRECTSERIAL, 1, [ Define to 1 if you want serial passthrough support (Win32, Posix and OS/2).])
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -323,7 +351,7 @@ esac
|
||||
AC_SUBST(WINDRES)
|
||||
|
||||
|
||||
AC_OUTPUT([
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
src/Makefile
|
||||
src/cpu/Makefile
|
||||
@ -343,8 +371,8 @@ src/misc/Makefile
|
||||
src/shell/Makefile
|
||||
src/platform/Makefile
|
||||
src/platform/visualc/Makefile
|
||||
visualc/Makefile
|
||||
visualc_net/Makefile
|
||||
include/Makefile
|
||||
docs/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
75
depcomp
75
depcomp
@ -1,9 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2004-05-31.23
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
|
||||
# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -27,45 +25,22 @@ scriptversion=2004-05-31.23
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
# `libtool' can also be set to `yes' or `no'.
|
||||
|
||||
if test -z "$depfile"; then
|
||||
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
|
||||
dir=`echo "$object" | sed 's,/.*$,/,'`
|
||||
if test "$dir" = "$object"; then
|
||||
dir=
|
||||
fi
|
||||
# FIXME: should be _deps on DOS.
|
||||
depfile="$dir.deps/$base"
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
@ -287,35 +262,26 @@ tru64)
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Dependencies are output in .lo.d with libtool 1.4.
|
||||
# With libtool 1.5 they are output both in $dir.libs/$base.o.d
|
||||
# and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
|
||||
# latter, because the former will be cleaned when $dir.libs is
|
||||
# erased.
|
||||
tmpdepfile1="$dir.libs/$base.lo.d"
|
||||
tmpdepfile2="$dir$base.o.d"
|
||||
tmpdepfile3="$dir.libs/$base.d"
|
||||
tmpdepfile2="$dir.libs/$base.d"
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1="$dir$base.o.d"
|
||||
tmpdepfile2="$dir$base.d"
|
||||
tmpdepfile3="$dir$base.d"
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
if test -f "$tmpdepfile1"; then
|
||||
tmpdepfile="$tmpdepfile1"
|
||||
elif test -f "$tmpdepfile2"; then
|
||||
tmpdepfile="$tmpdepfile2"
|
||||
else
|
||||
tmpdepfile="$tmpdepfile3"
|
||||
tmpdepfile="$tmpdepfile2"
|
||||
fi
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
@ -511,12 +477,3 @@ none)
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
|
115
docs/Makefile.in
115
docs/Makefile.in
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -15,6 +15,7 @@
|
||||
@SET_MAKE@
|
||||
|
||||
# Main Makefile for DOSBox
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -22,6 +23,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -35,26 +37,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = docs
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
man1dir = $(mandir)/man1
|
||||
am__installdirs = "$(DESTDIR)$(man1dir)"
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -81,6 +64,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -111,9 +95,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -121,8 +102,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -130,23 +109,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -155,44 +140,33 @@ target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
man_MANS = dosbox.1
|
||||
EXTRA_DIST = $(man_MANS) README.video
|
||||
subdir = docs
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits docs/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits docs/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu docs/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
man1dir = $(mandir)/man1
|
||||
install-man1: $(man1_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
|
||||
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
@ -211,8 +185,8 @@ install-man1: $(man1_MANS) $(man_MANS)
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
uninstall-man1:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@ -232,8 +206,8 @@ uninstall-man1:
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
|
||||
rm -f $(DESTDIR)$(man1dir)/$$inst; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
@ -241,6 +215,10 @@ TAGS:
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -254,7 +232,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -272,10 +250,9 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(MANS)
|
||||
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(man1dir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
@ -295,7 +272,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -312,8 +289,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -349,8 +324,8 @@ uninstall-am: uninstall-info-am uninstall-man
|
||||
uninstall-man: uninstall-man1
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
distclean-generic distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man1 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
|
@ -30,3 +30,6 @@ A: 1. Start DOSBox like this: dosbox -startmapper
|
||||
4. Click exit.
|
||||
5. You can make movies by pressing scroll lock or whichever key you
|
||||
selected.
|
||||
|
||||
Q: The colours are wrong and I'm using 64 bit windows
|
||||
A: Look here: http://vogons.zetafleet.com/viewtopic.php?t=12133
|
||||
|
@ -49,7 +49,8 @@ an Internal Program, a DOS command or an executable on a mounted drive.
|
||||
.BI \-conf " configfile
|
||||
.RB "Start " dosbox " with the options specified in "
|
||||
.IR configfile ". This file has a section in which you can put commands you "
|
||||
wish to execute on startup.
|
||||
wish to execute on startup. Multiple
|
||||
.IR configfiles " can be present at the commandline."
|
||||
.TP
|
||||
.BI \-lang " langfile
|
||||
.RB "Start " dosbox " with the language specified in "
|
||||
@ -158,7 +159,7 @@ the emulated soundcards and many
|
||||
.LP
|
||||
The language file controls all visible ouput of the internal commands and
|
||||
the internal dos.
|
||||
.RB "See the secion " FILES " for more information."
|
||||
.RB "See the section " FILES " for more information."
|
||||
.TP
|
||||
.B LOADFIX [\-size] [programname] [parameters]
|
||||
.LP
|
||||
@ -211,9 +212,12 @@ Boot will start floppy images or hard disk images independent of the
|
||||
.RB "Read the " README " of " dosbox " for the full and correct syntax."
|
||||
.RE
|
||||
.SH FILES
|
||||
Configuration and language files use a format similar to Windows .ini files. If a file named
|
||||
.BR dosbox.conf " is found in the current directory, it will be"
|
||||
automatically loaded, else ~/.dosboxrc (if present) will be loaded.
|
||||
Configuration and language files use a format similar to Windows .ini files.
|
||||
First ~/.dosboxrc (if present) will be loaded. If no
|
||||
configfile is specified at the commandline, a file named
|
||||
.BR dosbox.conf " (if present in the current directory) will be"
|
||||
loaded automatically afterwards. If a configfile is specified at the commandline
|
||||
that one will be used instead.
|
||||
.SH "SPECIAL KEYS"
|
||||
.TP 12m
|
||||
.IP ALT\-ENTER
|
||||
@ -295,7 +299,7 @@ games (or earlier). Also note that "protected mode" games need substantially mor
|
||||
.RB "require a much faster processor for you to run it properly in " dosbox .
|
||||
.SH BUGS
|
||||
Not all DOS programs work properly.
|
||||
.BR dosbox " will exit without warning if an error occured."
|
||||
.BR dosbox " will exit without warning if an error occurred."
|
||||
.SH "SEE ALSO"
|
||||
The README in /usr/share/doc/dosbox
|
||||
.SH AUTHOR
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -21,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -34,26 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = include
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -80,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -110,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -120,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -129,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -191,40 +175,33 @@ timer.h \
|
||||
vga.h \
|
||||
video.h
|
||||
|
||||
subdir = include
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.in Makefile.am
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits include/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits include/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu include/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -233,7 +210,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -245,11 +221,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -272,6 +247,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -285,7 +264,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -303,6 +282,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -323,7 +303,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -340,8 +320,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -374,14 +352,14 @@ ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
ctags distclean distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic ctags \
|
||||
distclean distclean-generic distclean-tags distdir dvi dvi-am \
|
||||
info info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
|
||||
uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -101,9 +101,14 @@
|
||||
|
||||
#define BIOS_VIDEO_SAVEPTR 0x4a8
|
||||
|
||||
/* maximum of scancodes handled by keyboard bios routines */
|
||||
#define MAX_SCAN_CODE 0x58
|
||||
|
||||
/* The Section handling Bios Disk Access */
|
||||
#define BIOS_MAX_DISK 10
|
||||
|
||||
#define MAX_SWAPPABLE_DISKS 20
|
||||
|
||||
struct diskGeo {
|
||||
Bit32u ksize; /* Size in kilobytes */
|
||||
Bit16u secttrack; /* Sectors per track */
|
||||
@ -159,6 +164,7 @@ extern DOS_DTA *imgDTA;
|
||||
|
||||
void swapInDisks(void);
|
||||
void swapInNextDisk(void);
|
||||
bool getSwapRequest(void);
|
||||
|
||||
void BIOS_ZeroExtendedSize(bool in);
|
||||
void char_out(Bit8u chr,Bit32u att,Bit8u page);
|
||||
@ -169,4 +175,10 @@ void INT2F_StartUp(void);
|
||||
void INT33_StartUp(void);
|
||||
void INT13_StartUp(void);
|
||||
|
||||
bool BIOS_AddKeyToBuffer(Bit16u code);
|
||||
|
||||
void INT10_ReloadRomFonts();
|
||||
|
||||
void BIOS_SetComPorts (Bit16u baseaddr[]);
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: callback.h,v 1.16 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: callback.h,v 1.19 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_CALLBACK_H
|
||||
#define DOSBOX_CALLBACK_H
|
||||
@ -28,19 +28,29 @@
|
||||
typedef Bitu (*CallBack_Handler)(void);
|
||||
extern CallBack_Handler CallBack_Handlers[];
|
||||
|
||||
enum { CB_RETN, CB_RETF,CB_IRET,CB_IRET_STI };
|
||||
enum { CB_RETN,CB_RETF,CB_IRET,CB_IRETD,CB_IRET_STI,CB_IRET_EOI_PIC1,
|
||||
CB_IRQ0,CB_IRQ1,CB_IRQ9,CB_IRQ12,CB_IRQ12_RET,CB_IRQ6_PCJR,
|
||||
CB_INT29,CB_INT16,CB_HOOKABLE,CB_TDE_IRET,CB_IPXESR,CB_IPXESR_RET };
|
||||
|
||||
#define CB_MAX 144
|
||||
#define CB_SEG 0xC800
|
||||
#define CB_BASE (CB_SEG << 4)
|
||||
#define CB_MAX 128
|
||||
#define CB_SIZE 32
|
||||
#define CB_SEG 0xF100
|
||||
|
||||
enum {
|
||||
CBRET_NONE=0,CBRET_STOP=1
|
||||
};
|
||||
|
||||
extern Bit8u lastint;
|
||||
|
||||
INLINE RealPt CALLBACK_RealPointer(Bitu callback) {
|
||||
return RealMake(CB_SEG,callback << 4);
|
||||
return RealMake(CB_SEG,callback*CB_SIZE);
|
||||
}
|
||||
INLINE PhysPt CALLBACK_PhysPointer(Bitu callback) {
|
||||
return PhysMake(CB_SEG,callback*CB_SIZE);
|
||||
}
|
||||
|
||||
INLINE PhysPt CALLBACK_GetBase(void) {
|
||||
return CB_SEG << 4;
|
||||
}
|
||||
|
||||
Bitu CALLBACK_Allocate();
|
||||
@ -51,9 +61,8 @@ void CALLBACK_Idle(void);
|
||||
void CALLBACK_RunRealInt(Bit8u intnum);
|
||||
void CALLBACK_RunRealFar(Bit16u seg,Bit16u off);
|
||||
|
||||
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,const char* description=0);
|
||||
/* Returns with the size of the extra callback */
|
||||
Bitu CALLBACK_SetupExtra(Bitu callback, Bitu type, PhysPt physAddress);
|
||||
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,const char* descr);
|
||||
Bitu CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,PhysPt addr,const char* descr);
|
||||
|
||||
const char* CALLBACK_GetDescription(Bitu callback);
|
||||
bool CALLBACK_Free(Bitu callback);
|
||||
@ -78,11 +87,12 @@ public:
|
||||
CALLBACK_HandlerObject():installed(false),m_type(NONE){vectorhandler.installed=false;}
|
||||
~CALLBACK_HandlerObject();
|
||||
//Install and allocate a callback.
|
||||
void Install(CallBack_Handler handler,Bitu type,const char* description=0);
|
||||
void Install(CallBack_Handler handler,Bitu type,const char* description);
|
||||
void Install(CallBack_Handler handler,Bitu type,PhysPt addr,const char* description);
|
||||
//Only allocate a callback number
|
||||
void Allocate(CallBack_Handler handler,const char* description=0);
|
||||
Bit16u Get_callback(){return m_callback;}
|
||||
RealPt Get_RealPointer(){ return RealMake(CB_SEG,m_callback << 4);}
|
||||
RealPt Get_RealPointer(){ return CALLBACK_RealPointer(m_callback);}
|
||||
void Set_RealVec(Bit8u vec);
|
||||
};
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -29,11 +29,23 @@
|
||||
#include "mem.h"
|
||||
#endif
|
||||
|
||||
#define CPU_AUTODETERMINE_NONE 0x00
|
||||
#define CPU_AUTODETERMINE_CORE 0x01
|
||||
#define CPU_AUTODETERMINE_CYCLES 0x02
|
||||
|
||||
#define CPU_AUTODETERMINE_SHIFT 0x02
|
||||
#define CPU_AUTODETERMINE_MASK 0x03
|
||||
|
||||
/* CPU Cycle Timing */
|
||||
extern Bits CPU_Cycles;
|
||||
extern Bits CPU_CycleLeft;
|
||||
extern Bits CPU_CycleMax;
|
||||
extern bool CPU_CycleAuto;
|
||||
extern Bit32s CPU_Cycles;
|
||||
extern Bit32s CPU_CycleLeft;
|
||||
extern Bit32s CPU_CycleMax;
|
||||
extern Bit32s CPU_OldCycleMax;
|
||||
extern Bit32s CPU_CyclePercUsed;
|
||||
extern Bit32s CPU_CycleLimit;
|
||||
extern Bit64s CPU_IODelayRemoved;
|
||||
extern bool CPU_CycleAutoAdjust;
|
||||
extern Bitu CPU_AutoDetermineMode;
|
||||
|
||||
/* Some common Defines */
|
||||
/* A CPU Handler */
|
||||
@ -45,6 +57,7 @@ Bits CPU_Core_Normal_Trap_Run(void);
|
||||
Bits CPU_Core_Simple_Run(void);
|
||||
Bits CPU_Core_Full_Run(void);
|
||||
Bits CPU_Core_Dyn_X86_Run(void);
|
||||
Bits CPU_Core_Dyn_X86_Trap_Run(void);
|
||||
|
||||
//CPU Stuff
|
||||
|
||||
@ -72,6 +85,9 @@ bool CPU_READ_CRX(Bitu cr,Bit32u & retvalue);
|
||||
bool CPU_WRITE_DRX(Bitu dr,Bitu value);
|
||||
bool CPU_READ_DRX(Bitu dr,Bit32u & retvalue);
|
||||
|
||||
bool CPU_WRITE_TRX(Bitu dr,Bitu value);
|
||||
bool CPU_READ_TRX(Bitu dr,Bit32u & retvalue);
|
||||
|
||||
void CPU_SMSW(Bitu & word);
|
||||
Bitu CPU_LMSW(Bitu word);
|
||||
|
||||
@ -418,7 +434,7 @@ struct CPUBlock {
|
||||
GDTDescriptorTable gdt;
|
||||
DescriptorTable idt;
|
||||
struct {
|
||||
Bitu mask;
|
||||
Bitu mask,notmask;
|
||||
bool big;
|
||||
} stack;
|
||||
struct {
|
||||
@ -432,7 +448,9 @@ struct CPUBlock {
|
||||
Bitu which,error;
|
||||
} exception;
|
||||
Bits direction;
|
||||
bool trap_skip;
|
||||
Bit32u drx[8];
|
||||
Bit32u trx[8];
|
||||
};
|
||||
|
||||
extern CPUBlock cpu;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,11 +16,15 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: cross.h,v 1.16 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: cross.h,v 1.18 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_CROSS_H
|
||||
#define DOSBOX_CROSS_H
|
||||
|
||||
#ifndef DOSBOX_DOSBOX_H
|
||||
#include "dosbox.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
@ -56,4 +60,10 @@
|
||||
#define ftruncate(blah,blah2) chsize(blah,blah2)
|
||||
#endif
|
||||
|
||||
//Solaris maybe others
|
||||
#if defined (DB_HAVE_NO_POWF)
|
||||
#include <math.h>
|
||||
static inline float powf (float x, float y) { return (float) pow (x,y); }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dma.h,v 1.16 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: dma.h,v 1.17 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_DMA_H
|
||||
#define DOSBOX_DMA_H
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dos_inc.h,v 1.59 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: dos_inc.h,v 1.65 2007/01/08 20:36:53 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_DOS_INC_H
|
||||
#define DOSBOX_DOS_INC_H
|
||||
@ -158,7 +158,7 @@ void DOS_FreeProcessMemory(Bit16u pspseg);
|
||||
Bit16u DOS_GetMemory(Bit16u pages);
|
||||
bool DOS_SetMemAllocStrategy(Bit16u strat);
|
||||
Bit16u DOS_GetMemAllocStrategy(void);
|
||||
void DOS_BuildUMBChain(const char* use_umbs,bool ems_active);
|
||||
void DOS_BuildUMBChain(bool umb_active,bool ems_active);
|
||||
bool DOS_LinkUMBsToMemChain(Bit16u linkstate);
|
||||
|
||||
/* FCB stuff */
|
||||
@ -187,6 +187,20 @@ void DOS_SetupTables(void);
|
||||
/* Internal DOS Setup Programs */
|
||||
void DOS_SetupPrograms(void);
|
||||
|
||||
/* Initialize Keyboard Layout */
|
||||
void DOS_KeyboardLayout_Init(Section* sec);
|
||||
|
||||
bool DOS_LayoutKey(Bitu key, Bit8u flags1, Bit8u flags2, Bit8u flags3);
|
||||
|
||||
enum {
|
||||
KEYB_NOERROR=0,
|
||||
KEYB_FILENOTFOUND,
|
||||
KEYB_INVALIDFILE,
|
||||
KEYB_LAYOUTNOTFOUND,
|
||||
KEYB_INVALIDCPFILE
|
||||
};
|
||||
|
||||
|
||||
INLINE Bit16u long2para(Bit32u size) {
|
||||
if (size>0xFFFF0) return 0xffff;
|
||||
if (size&0xf) return (Bit16u)((size>>4)+1);
|
||||
@ -367,6 +381,7 @@ public:
|
||||
Bit16u GetStartOfUMBChain(void);
|
||||
Bit8u GetUMBChainState(void);
|
||||
RealPt GetPointer(void);
|
||||
Bit32u GetDeviceChain(void);
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(1)
|
||||
@ -438,8 +453,10 @@ public:
|
||||
void GetSearchParams(Bit8u & _sattr,char * _spattern);
|
||||
void GetResult(char * _name,Bit32u & _size,Bit16u & _date,Bit16u & _time,Bit8u & _attr);
|
||||
|
||||
void SetDirID(Bit16u entry) { sSave(sDTA,dirID,entry); };
|
||||
void SetDirID(Bit16u entry) { sSave(sDTA,dirID,entry); };
|
||||
void SetDirIDCluster(Bit16u entry) { sSave(sDTA,dirCluster,entry); };
|
||||
Bit16u GetDirID(void) { return sGet(sDTA,dirID); };
|
||||
Bit16u GetDirIDCluster(void) { return sGet(sDTA,dirCluster); };
|
||||
private:
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(1)
|
||||
@ -450,7 +467,8 @@ private:
|
||||
Bit8u sext[3]; /* The Search pattern for the extenstion */
|
||||
Bit8u sattr; /* The Attributes that need to be found */
|
||||
Bit16u dirID; /* custom: dir-search ID for multiple searches at the same time */
|
||||
Bit8u fill[6];
|
||||
Bit16u dirCluster; /* custom (drive_fat only): cluster number for multiple searches at the same time */
|
||||
Bit8u fill[4];
|
||||
Bit8u attr;
|
||||
Bit16u time;
|
||||
Bit16u date;
|
||||
@ -598,9 +616,12 @@ struct DOS_Block {
|
||||
RealPt mediaid;
|
||||
RealPt tempdta;
|
||||
RealPt tempdta_fcbdelete;
|
||||
RealPt dcbs;
|
||||
RealPt dbcs;
|
||||
RealPt filenamechar;
|
||||
RealPt collatingseq;
|
||||
Bit8u* country;//Will be copied to dos memory. resides in real mem
|
||||
} tables;
|
||||
Bit16u loaded_codepage;
|
||||
};
|
||||
|
||||
extern DOS_Block dos;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,12 +16,11 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dos_system.h,v 1.31 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: dos_system.h,v 1.39 2007/01/21 16:21:22 c2woody Exp $ */
|
||||
|
||||
#ifndef DOSBOX_DOS_SYSTEM_H
|
||||
#define DOSBOX_DOS_SYSTEM_H
|
||||
|
||||
|
||||
#include <vector>
|
||||
#ifndef DOSBOX_DOSBOX_H
|
||||
#include "dosbox.h"
|
||||
@ -29,6 +28,12 @@
|
||||
#ifndef DOSBOX_CROSS_H
|
||||
#include "cross.h"
|
||||
#endif
|
||||
#ifndef DOSBOX_SUPPORT_H
|
||||
#include "support.h"
|
||||
#endif
|
||||
#ifndef DOSBOX_MEM_H
|
||||
#include "mem.h"
|
||||
#endif
|
||||
|
||||
#define DOS_NAMELENGTH 12
|
||||
#define DOS_NAMELENGTH_ASCII (DOS_NAMELENGTH+1)
|
||||
@ -57,7 +62,7 @@ class DOS_DTA;
|
||||
|
||||
class DOS_File {
|
||||
public:
|
||||
DOS_File():flags(0) { name=0; refCtr = 0; };
|
||||
DOS_File():flags(0) { name=0; refCtr = 0; hdrive=0xff; };
|
||||
DOS_File(const DOS_File& orig);
|
||||
DOS_File & operator= (const DOS_File & orig);
|
||||
virtual ~DOS_File(){if(name) delete [] name;};
|
||||
@ -69,10 +74,12 @@ public:
|
||||
virtual void SetName(const char* _name) { if (name) delete[] name; name = new char[strlen(_name)+1]; strcpy(name,_name); }
|
||||
virtual char* GetName(void) { return name; };
|
||||
virtual bool IsOpen() { return open; };
|
||||
virtual bool IsName(const char* _name) { if (!name) return false; return strcmp(name,_name)==0; };
|
||||
virtual bool IsName(const char* _name) { if (!name) return false; return strcasecmp(name,_name)==0; };
|
||||
virtual void AddRef() { refCtr++; };
|
||||
virtual Bits RemoveRef() { return --refCtr; };
|
||||
virtual bool UpdateDateTimeFromHost() { return true; }
|
||||
void SetDrive(Bit8u drv) { hdrive=drv;}
|
||||
Bit8u GetDrive(void) { return hdrive;}
|
||||
Bit8u type;
|
||||
Bit32u flags;
|
||||
Bit16u time;
|
||||
@ -83,14 +90,20 @@ public:
|
||||
bool open;
|
||||
char* name;
|
||||
/* Some Device Specific Stuff */
|
||||
private:
|
||||
Bit8u hdrive;
|
||||
};
|
||||
|
||||
class DOS_Device : public DOS_File {
|
||||
public:
|
||||
DOS_Device(const DOS_Device& orig):DOS_File(orig) {devnum=orig.devnum; }
|
||||
DOS_Device(const DOS_Device& orig):DOS_File(orig) {
|
||||
devnum=orig.devnum;
|
||||
open=true;
|
||||
}
|
||||
DOS_Device & operator= (const DOS_Device & orig) {
|
||||
DOS_File::operator=(orig);
|
||||
devnum=orig.devnum;
|
||||
open=true;
|
||||
return *this;
|
||||
}
|
||||
DOS_Device():DOS_File(),devnum(0){};
|
||||
@ -99,13 +112,19 @@ public:
|
||||
virtual bool Seek(Bit32u * pos,Bit32u type);
|
||||
virtual bool Close();
|
||||
virtual Bit16u GetInformation(void);
|
||||
virtual bool ReadFromControlChannel(PhysPt bufptr,Bit16u size,Bit16u * retcode);
|
||||
virtual bool WriteToControlChannel(PhysPt bufptr,Bit16u size,Bit16u * retcode);
|
||||
void SetDeviceNumber(Bitu num) { devnum=num;}
|
||||
private:
|
||||
Bitu devnum;
|
||||
};
|
||||
|
||||
/* The following variable can be lowered to free up some memory.
|
||||
* The negative side effect: The stored searches will be turned over faster.
|
||||
* Should not have impact on systems with few directory entries. */
|
||||
#define MAX_OPENDIRS 2048
|
||||
//Can be high as it's only storage (16 bit variable)
|
||||
|
||||
class DOS_Drive_Cache {
|
||||
public:
|
||||
DOS_Drive_Cache (void);
|
||||
@ -192,40 +211,6 @@ private:
|
||||
bool updatelabel;
|
||||
};
|
||||
|
||||
class DOS_No_Drive_Cache {
|
||||
public:
|
||||
DOS_No_Drive_Cache (void) {};
|
||||
DOS_No_Drive_Cache (const char* path);
|
||||
~DOS_No_Drive_Cache (void) {};
|
||||
|
||||
typedef enum TDirSort { NOSORT, ALPHABETICAL, DIRALPHABETICAL, ALPHABETICALREV, DIRALPHABETICALREV };
|
||||
|
||||
void SetBaseDir (const char* path);
|
||||
void SetDirSort (TDirSort sort) {};
|
||||
bool OpenDir (const char* path, Bit16u& id);
|
||||
bool ReadDir (Bit16u id, char * &result);
|
||||
|
||||
void ExpandName (char* path) {};
|
||||
char* GetExpandName (const char* path) { return (char*)path; };
|
||||
bool GetShortName (const char* fullname, char* shortname) { return false; };
|
||||
|
||||
void CacheOut (const char* path, bool ignoreLastDir = false) {};
|
||||
void AddEntry (const char* path, bool checkExists = false) {};
|
||||
void DeleteEntry (const char* path, bool ignoreLastDir = false) {};
|
||||
|
||||
void SetCurrentEntry (Bit16u entry) {};
|
||||
Bit16u GetCurrentEntry (void) { return 0; };
|
||||
|
||||
void EmptyCache (void) {};
|
||||
|
||||
void SetLabel (const char* name) {};
|
||||
char* GetLabel (void) {return "";};
|
||||
|
||||
public:
|
||||
char basePath [CROSS_LEN];
|
||||
char dirPath [CROSS_LEN];
|
||||
};
|
||||
|
||||
class DOS_Drive {
|
||||
public:
|
||||
DOS_Drive();
|
||||
@ -248,12 +233,18 @@ public:
|
||||
virtual void EmptyCache(void) { dirCache.EmptyCache(); };
|
||||
virtual bool isRemote(void)=0;
|
||||
virtual bool isRemovable(void)=0;
|
||||
virtual Bits UnMount(void)=0;
|
||||
|
||||
char * GetInfo(void);
|
||||
char curdir[DOS_PATHLENGTH];
|
||||
char info[256];
|
||||
/* Can be overridden for example in iso images */
|
||||
virtual char const * GetLabel(){return dirCache.GetLabel();};
|
||||
|
||||
DOS_Drive_Cache dirCache;
|
||||
|
||||
// disk cycling functionality (request resources)
|
||||
virtual void Activate(void) {};
|
||||
};
|
||||
|
||||
enum { OPEN_READ=0,OPEN_WRITE=1,OPEN_READWRITE=2, DOS_NOT_INHERIT=128};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
void E_Exit(char * message,...);
|
||||
void E_Exit(const char * message,...) GCC_ATTRIBUTE( __format__(__printf__, 1, 2));
|
||||
|
||||
void MSG_Add(const char*,const char*); //add messages to the internal langaugefile
|
||||
const char* MSG_Get(char const *); //get messages from the internal langaugafile
|
||||
|
113
include/fpu.h
113
include/fpu.h
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -40,4 +40,115 @@ void FPU_ESC6_EA(Bitu func,PhysPt ea);
|
||||
void FPU_ESC7_Normal(Bitu rm);
|
||||
void FPU_ESC7_EA(Bitu func,PhysPt ea);
|
||||
|
||||
|
||||
typedef union {
|
||||
double d;
|
||||
#ifndef WORDS_BIGENDIAN
|
||||
struct {
|
||||
Bit32u lower;
|
||||
Bit32s upper;
|
||||
} l;
|
||||
#else
|
||||
struct {
|
||||
Bit32s upper;
|
||||
Bit32u lower;
|
||||
} l;
|
||||
#endif
|
||||
Bit64s ll;
|
||||
} FPU_Reg;
|
||||
|
||||
typedef struct {
|
||||
Bit32u m1;
|
||||
Bit32u m2;
|
||||
Bit16u m3;
|
||||
|
||||
Bit16u d1;
|
||||
Bit32u d2;
|
||||
} FPU_P_Reg;
|
||||
|
||||
enum FPU_Tag {
|
||||
TAG_Valid = 0,
|
||||
TAG_Zero = 1,
|
||||
TAG_Weird = 2,
|
||||
TAG_Empty = 3
|
||||
};
|
||||
|
||||
enum FPU_Round {
|
||||
ROUND_Nearest = 0,
|
||||
ROUND_Down = 1,
|
||||
ROUND_Up = 2,
|
||||
ROUND_Chop = 3
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
FPU_Reg regs[9];
|
||||
FPU_P_Reg p_regs[9];
|
||||
FPU_Tag tags[9];
|
||||
Bit16u cw,cw_mask_all;
|
||||
Bit16u sw;
|
||||
Bitu top;
|
||||
FPU_Round round;
|
||||
} FPU_rec;
|
||||
|
||||
|
||||
//get pi from a real library
|
||||
#define PI 3.14159265358979323846
|
||||
#define L2E 1.4426950408889634
|
||||
#define L2T 3.3219280948873623
|
||||
#define LN2 0.69314718055994531
|
||||
#define LG2 0.3010299956639812
|
||||
|
||||
|
||||
extern FPU_rec fpu;
|
||||
|
||||
#define TOP fpu.top
|
||||
#define STV(i) ( (fpu.top+ (i) ) & 7 )
|
||||
|
||||
|
||||
Bit16u FPU_GetTag(void);
|
||||
void FPU_FLDCW(PhysPt addr);
|
||||
|
||||
INLINE void FPU_SetTag(Bit16u tag){
|
||||
for(Bitu i=0;i<8;i++)
|
||||
fpu.tags[i] = static_cast<FPU_Tag>((tag >>(2*i))&3);
|
||||
}
|
||||
|
||||
INLINE void FPU_SetCW(Bitu word){
|
||||
fpu.cw = word;
|
||||
fpu.cw_mask_all = word | 0x3f;
|
||||
fpu.round = (FPU_Round)((word >> 10) & 3);
|
||||
}
|
||||
|
||||
|
||||
INLINE Bitu FPU_GET_TOP(void) {
|
||||
return (fpu.sw & 0x3800)>>11;
|
||||
}
|
||||
|
||||
INLINE void FPU_SET_TOP(Bitu val){
|
||||
fpu.sw &= ~0x3800;
|
||||
fpu.sw |= (val&7)<<11;
|
||||
}
|
||||
|
||||
|
||||
INLINE void FPU_SET_C0(Bitu C){
|
||||
fpu.sw &= ~0x0100;
|
||||
if(C) fpu.sw |= 0x0100;
|
||||
}
|
||||
|
||||
INLINE void FPU_SET_C1(Bitu C){
|
||||
fpu.sw &= ~0x0200;
|
||||
if(C) fpu.sw |= 0x0200;
|
||||
}
|
||||
|
||||
INLINE void FPU_SET_C2(Bitu C){
|
||||
fpu.sw &= ~0x0400;
|
||||
if(C) fpu.sw |= 0x0400;
|
||||
}
|
||||
|
||||
INLINE void FPU_SET_C3(Bitu C){
|
||||
fpu.sw &= ~0x4000;
|
||||
if(C) fpu.sw |= 0x4000;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: inout.h,v 1.9 2006/02/09 11:47:47 qbix79 Exp $ */
|
||||
/* $Id: inout.h,v 1.10 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_INOUT_H
|
||||
#define DOSBOX_INOUT_H
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: ipx.h,v 1.9 2006/02/26 13:46:31 qbix79 Exp $ */
|
||||
/* $Id: ipx.h,v 1.12 2007/01/13 08:35:49 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_IPX_H
|
||||
#define DOSBOX_IPX_H
|
||||
@ -24,6 +24,16 @@
|
||||
// Uncomment this for a lot of debug messages:
|
||||
//#define IPX_DEBUGMSG
|
||||
|
||||
#ifdef IPX_DEBUGMSG
|
||||
#define LOG_IPX LOG_MSG
|
||||
#else
|
||||
#if defined (_MSC_VER)
|
||||
#define LOG_IPX
|
||||
#else
|
||||
#define LOG_IPX(...)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef DOSBOX_DOSBOX_H
|
||||
#include "dosbox.h"
|
||||
#endif
|
||||
@ -70,7 +80,7 @@ struct PackedIP {
|
||||
|
||||
struct nodeType {
|
||||
Uint8 node[6];
|
||||
}GCC_ATTRIBUTE(packed) ;
|
||||
} GCC_ATTRIBUTE(packed) ;
|
||||
|
||||
struct IPXHeader {
|
||||
Uint8 checkSum[2];
|
||||
@ -100,13 +110,18 @@ class ECBClass {
|
||||
public:
|
||||
RealPt ECBAddr;
|
||||
bool isInESRList;
|
||||
ECBClass *prevECB;
|
||||
ECBClass *prevECB; // Linked List
|
||||
ECBClass *nextECB;
|
||||
Bit8u iuflag;
|
||||
|
||||
Bit8u iuflag; // Need to save data since we are not always in
|
||||
Bit16u mysocket; // real mode
|
||||
|
||||
#ifdef IPX_DEBUGMSG
|
||||
Bit8u* databuffer; // received data is stored here until we get called
|
||||
Bitu buflen; // by Interrupt
|
||||
|
||||
#ifdef IPX_DEBUGMSG
|
||||
Bitu SerialNumber;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ECBClass(Bit16u segment, Bit16u offset);
|
||||
Bit16u getSocket(void);
|
||||
@ -119,6 +134,9 @@ public:
|
||||
|
||||
Bit16u getFragCount(void);
|
||||
|
||||
bool writeData();
|
||||
void writeDataBuffer(Bit8u* buffer, Bit16u length);
|
||||
|
||||
void getFragDesc(Bit16u descNum, fragmentDescriptor *fragDesc);
|
||||
RealPt getESRAddr(void);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: joystick.h,v 1.8 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: joystick.h,v 1.11 2007/02/22 08:44:06 qbix79 Exp $ */
|
||||
#ifndef DOSBOX_JOYSTICK_H
|
||||
#define DOSBOX_JOYSTICK_H
|
||||
void JOYSTICK_Enable(Bitu which,bool enabled);
|
||||
@ -37,6 +37,7 @@ float JOYSTICK_GetMove_Y(Bitu which);
|
||||
|
||||
enum JoystickType {
|
||||
JOY_NONE,
|
||||
JOY_AUTO,
|
||||
JOY_2AXIS,
|
||||
JOY_4AXIS,
|
||||
JOY_FCS,
|
||||
@ -44,4 +45,5 @@ enum JoystickType {
|
||||
};
|
||||
|
||||
extern JoystickType joytype;
|
||||
extern bool button_wrapping_enabled;
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -14,50 +14,50 @@ enum LOG_TYPES {
|
||||
|
||||
enum LOG_SEVERITIES {
|
||||
LOG_NORMAL,
|
||||
LOG_WARN,
|
||||
LOG_WARN,
|
||||
LOG_ERROR,
|
||||
};
|
||||
|
||||
#if C_DEBUG
|
||||
class LOG
|
||||
{
|
||||
LOG_TYPES d_type;
|
||||
LOG_SEVERITIES d_severity;
|
||||
LOG_TYPES d_type;
|
||||
LOG_SEVERITIES d_severity;
|
||||
public:
|
||||
|
||||
LOG (LOG_TYPES type , LOG_SEVERITIES severity):
|
||||
d_type(type),
|
||||
d_severity(severity)
|
||||
{}
|
||||
void operator() (char* buf, ...); //../src/debug/debug_gui.cpp
|
||||
void operator() (char const* buf, ...) GCC_ATTRIBUTE(__format__(__printf__, 2, 3)); //../src/debug/debug_gui.cpp
|
||||
|
||||
};
|
||||
|
||||
void DEBUG_ShowMsg(char * format,...);
|
||||
void DEBUG_ShowMsg(char const* format,...) GCC_ATTRIBUTE(__format__(__printf__, 1, 2));
|
||||
#define LOG_MSG DEBUG_ShowMsg
|
||||
|
||||
#else //C_DEBUG
|
||||
|
||||
struct LOG
|
||||
{
|
||||
LOG(LOG_TYPES type, LOG_SEVERITIES severity) { return;}
|
||||
void operator()(char const* buf) { return;}
|
||||
void operator()(char const* buf, double f1) { return;}
|
||||
void operator()(char const* buf, double f1, double f2) { return;}
|
||||
void operator()(char const* buf, double f1, double f2, double f3) { return;}
|
||||
void operator()(char const* buf, double f1, double f2, double f3, double f4) { return;}
|
||||
void operator()(char const* buf, double f1, double f2, double f3, double f4, double f5) { return;}
|
||||
LOG(LOG_TYPES , LOG_SEVERITIES ) { }
|
||||
void operator()(char const* ) { }
|
||||
void operator()(char const* , double ) { }
|
||||
void operator()(char const* , double , double ) { }
|
||||
void operator()(char const* , double , double , double ) { }
|
||||
void operator()(char const* , double , double , double , double ) { }
|
||||
void operator()(char const* , double , double , double , double , double ) { }
|
||||
|
||||
void operator()(char const* buf, char const* s1) { return;}
|
||||
void operator()(char const* buf, char const* s1, double f1) { return;}
|
||||
void operator()(char const* buf, char const* s1, double f1,double f2) { return;}
|
||||
void operator()(char const* buf, double f1, char const* s1) { return;}
|
||||
void operator()(char const* , char const* ) { }
|
||||
void operator()(char const* , char const* , double ) { }
|
||||
void operator()(char const* , char const* , double ,double ) { }
|
||||
void operator()(char const* , double , char const* ) { }
|
||||
|
||||
|
||||
|
||||
}; //add missing operators to here
|
||||
//try to avoid anything smaller than bit32...
|
||||
void GFX_ShowMsg(char * format,...);
|
||||
void GFX_ShowMsg(char const* format,...) GCC_ATTRIBUTE(__format__(__printf__, 1, 2));
|
||||
#define LOG_MSG GFX_ShowMsg
|
||||
|
||||
#endif //C_DEBUG
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -26,7 +26,7 @@ enum MapKeys {
|
||||
};
|
||||
|
||||
typedef void (MAPPER_Handler)(bool pressed);
|
||||
void MAPPER_AddHandler(MAPPER_Handler * handler,MapKeys key,Bitu mods,char * eventname,char * buttonname);
|
||||
void MAPPER_AddHandler(MAPPER_Handler * handler,MapKeys key,Bitu mods,char const * const eventname,char const * const buttonname);
|
||||
void MAPPER_Init(void);
|
||||
void MAPPER_StartUp(Section * sec);
|
||||
void MAPPER_Run(bool pressed);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -44,6 +44,7 @@ Bitu MEM_FreeLargest(void); //Largest free 4 kb pages block
|
||||
Bitu MEM_TotalPages(void); //Total amount of 4 kb pages
|
||||
Bitu MEM_AllocatedPages(MemHandle handle); // amount of allocated pages of handle
|
||||
MemHandle MEM_AllocatePages(Bitu pages,bool sequence);
|
||||
MemHandle MEM_GetNextFreePage(void);
|
||||
PhysPt MEM_AllocatePage(void);
|
||||
void MEM_ReleasePages(MemHandle handle);
|
||||
bool MEM_ReAllocatePages(MemHandle & handle,Bitu pages,bool sequence);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -50,12 +50,16 @@ public:
|
||||
void SetFreq(Bitu _freq);
|
||||
void Mix(Bitu _needed);
|
||||
void AddSilence(void); //Fill up until needed
|
||||
template<bool _8bit,bool stereo>
|
||||
template<bool _8bit,bool stereo,bool signeddata>
|
||||
void AddSamples(Bitu len,void * data);
|
||||
void AddSamples_m8(Bitu len,Bit8u * data);
|
||||
void AddSamples_s8(Bitu len,Bit8u * data);
|
||||
void AddSamples_m8s(Bitu len,Bit8s * data);
|
||||
void AddSamples_s8s(Bitu len,Bit8s * data);
|
||||
void AddSamples_m16(Bitu len,Bit16s * data);
|
||||
void AddSamples_s16(Bitu len,Bit16s * data);
|
||||
void AddSamples_m16u(Bitu len,Bit16u * data);
|
||||
void AddSamples_s16u(Bitu len,Bit16u * data);
|
||||
void AddStretched(Bitu len,Bit16s * data); //Strech block up into needed data
|
||||
void FillUp(void);
|
||||
void Enable(bool _yesno);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: mouse.h,v 1.12 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: mouse.h,v 1.13 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_MOUSE_H
|
||||
#define DOSBOX_MOUSE_H
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: paging.h,v 1.22 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: paging.h,v 1.24 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_PAGING_H
|
||||
#define DOSBOX_PAGING_H
|
||||
@ -48,6 +48,7 @@ class PageDirectory;
|
||||
|
||||
class PageHandler {
|
||||
public:
|
||||
virtual ~PageHandler(void) { }
|
||||
virtual Bitu readb(PhysPt addr);
|
||||
virtual Bitu readw(PhysPt addr);
|
||||
virtual Bitu readd(PhysPt addr);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -21,9 +21,9 @@
|
||||
|
||||
|
||||
/* CPU Cycle Timing */
|
||||
extern Bits CPU_Cycles;
|
||||
extern Bits CPU_CycleLeft;
|
||||
extern Bits CPU_CycleMax;
|
||||
extern Bit32s CPU_Cycles;
|
||||
extern Bit32s CPU_CycleLeft;
|
||||
extern Bit32s CPU_CycleMax;
|
||||
|
||||
typedef void (PIC_EOIHandler) (void);
|
||||
typedef void (* PIC_EventHandler)(Bitu val);
|
||||
@ -40,6 +40,10 @@ INLINE float PIC_TickIndex(void) {
|
||||
return (CPU_CycleMax-CPU_CycleLeft-CPU_Cycles)/(float)CPU_CycleMax;
|
||||
}
|
||||
|
||||
INLINE Bits PIC_TickIndexND(void) {
|
||||
return CPU_CycleMax-CPU_CycleLeft-CPU_Cycles;
|
||||
}
|
||||
|
||||
INLINE Bits PIC_MakeCycles(double amount) {
|
||||
return (Bits)(CPU_CycleMax*amount);
|
||||
}
|
||||
@ -57,6 +61,7 @@ bool PIC_RunQueue(void);
|
||||
//Delay in milliseconds
|
||||
void PIC_AddEvent(PIC_EventHandler handler,float delay,Bitu val=0);
|
||||
void PIC_RemoveEvents(PIC_EventHandler handler);
|
||||
void PIC_RemoveSpecificEvents(PIC_EventHandler handler, Bitu val);
|
||||
|
||||
void PIC_SetIRQMask(Bitu irq, bool masked);
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -50,6 +50,6 @@ public:
|
||||
};
|
||||
|
||||
typedef void (PROGRAMS_Main)(Program * * make);
|
||||
void PROGRAMS_MakeFile(char * name,PROGRAMS_Main * main);
|
||||
void PROGRAMS_MakeFile(char const * const name,PROGRAMS_Main * main);
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -21,6 +21,10 @@
|
||||
|
||||
#include "../src/gui/render_scalers.h"
|
||||
|
||||
#define RENDER_SKIP_CACHE 16
|
||||
//Enable this for scalers to support 0 input for empty lines
|
||||
//#define RENDER_NULL_INPUT
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
Bit8u red;
|
||||
@ -40,7 +44,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
Bitu width;
|
||||
Bitu width, start;
|
||||
Bitu height;
|
||||
Bitu bpp;
|
||||
bool dblw,dblh;
|
||||
@ -50,6 +54,8 @@ typedef struct {
|
||||
struct {
|
||||
Bitu count;
|
||||
Bitu max;
|
||||
Bitu index;
|
||||
Bit8u hadSkip[RENDER_SKIP_CACHE];
|
||||
} frameskip;
|
||||
struct {
|
||||
Bitu size;
|
||||
@ -71,13 +77,14 @@ typedef struct {
|
||||
bool updating;
|
||||
bool active;
|
||||
bool aspect;
|
||||
bool fullFrame;
|
||||
} Render_t;
|
||||
|
||||
extern Render_t render;
|
||||
extern ScalerLineHandler_t RENDER_DrawLine;
|
||||
void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,float fps,double ratio,bool dblw,bool dblh);
|
||||
bool RENDER_StartUpdate(void);
|
||||
void RENDER_EndUpdate( bool fullUpdate );
|
||||
void RENDER_EndUpdate( );
|
||||
void RENDER_SetPal(Bit8u entry,Bit8u red,Bit8u green,Bit8u blue);
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,13 +16,15 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: serialport.h,v 1.12 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: serialport.h,v 1.14 2007/01/13 08:35:49 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_SERIALPORT_H
|
||||
#define DOSBOX_SERIALPORT_H
|
||||
|
||||
#define SERIAL_DEBUG 0
|
||||
|
||||
// Uncomment this for a lot of debug messages:
|
||||
// #define SERIALPORT_DEBUGMSG
|
||||
//#define LOG_UART
|
||||
|
||||
#ifndef DOSBOX_DOSBOX_H
|
||||
#include "dosbox.h"
|
||||
@ -34,31 +36,70 @@
|
||||
#include "timer.h"
|
||||
#endif
|
||||
|
||||
#include "dos_inc.h"
|
||||
#include "setup.h"
|
||||
|
||||
// Serial port interface //
|
||||
#if SERIAL_DEBUG
|
||||
#include "hardware.h"
|
||||
#endif
|
||||
|
||||
// Serial port interface
|
||||
|
||||
class CSerial {
|
||||
public:
|
||||
|
||||
// Constructor takes base port (0x3f8, 0x2f8, 0x2e8, etc.), IRQ, and initial bps //
|
||||
CSerial(IO_ReadHandler* rh, IO_WriteHandler* wh,
|
||||
TIMER_TickHandler TimerHandler,
|
||||
Bit16u initbase, Bit8u initirq, Bit32u initbps,
|
||||
Bit8u bytesize, const char* parity, Bit8u stopbits);
|
||||
#if SERIAL_DEBUG
|
||||
FILE * debugfp;
|
||||
bool dbg_modemcontrol; // RTS,CTS,DTR,DSR,RI,CD
|
||||
bool dbg_serialtraffic;
|
||||
bool dbg_register;
|
||||
bool dbg_interrupt;
|
||||
bool dbg_aux;
|
||||
|
||||
#endif
|
||||
|
||||
static bool getBituSubstring(const char* name,Bitu* data, CommandLine* cmd);
|
||||
|
||||
bool InstallationSuccessful;// check after constructing. If
|
||||
// something was wrong, delete it right away.
|
||||
|
||||
// Constructor takes com port number (0-3)
|
||||
CSerial(Bitu id, CommandLine* cmd);
|
||||
|
||||
TIMER_TickHandler TimerHnd;
|
||||
virtual ~CSerial();
|
||||
void InstallTimerHandler(TIMER_TickHandler);
|
||||
|
||||
|
||||
IO_ReadHandleObject ReadHandler[8];
|
||||
IO_WriteHandleObject WriteHandler[8];
|
||||
|
||||
void Timer(void);
|
||||
virtual void Timer2(void)=0;
|
||||
float bytetime; // how long a byte takes to transmit/receive in milliseconds
|
||||
void changeLineProperties();
|
||||
Bitu idnumber;
|
||||
|
||||
void setEvent(Bit16u type, float duration);
|
||||
void removeEvent(Bit16u type);
|
||||
void handleEvent(Bit16u type);
|
||||
virtual void handleUpperEvent(Bit16u type)=0;
|
||||
|
||||
Bitu base;
|
||||
// defines for event type
|
||||
#define SERIAL_TX_LOOPBACK_EVENT 0
|
||||
#define SERIAL_THR_LOOPBACK_EVENT 1
|
||||
#define SERIAL_ERRMSG_EVENT 2
|
||||
|
||||
#define SERIAL_TX_EVENT 3
|
||||
#define SERIAL_RX_EVENT 4
|
||||
#define SERIAL_POLLING_EVENT 5
|
||||
#define SERIAL_THR_EVENT 6
|
||||
|
||||
#define SERIAL_BASE_EVENT_COUNT 6
|
||||
|
||||
#define COMNUMBER idnumber+1
|
||||
|
||||
Bitu irq;
|
||||
|
||||
// CSerial requests an update of the input lines
|
||||
virtual void updateMSR()=0;
|
||||
|
||||
// Control lines from prepherial to serial port
|
||||
bool getDTR();
|
||||
bool getRTS();
|
||||
|
||||
@ -72,75 +113,75 @@ public:
|
||||
void setCD(bool value);
|
||||
void setCTS(bool value);
|
||||
|
||||
// From serial port to prepherial
|
||||
// set output lines
|
||||
virtual void setRTSDTR(bool rts, bool dtr)=0;
|
||||
virtual void setRTS(bool val)=0;
|
||||
virtual void setDTR(bool val)=0;
|
||||
|
||||
// Register access
|
||||
void Write_THR(Bit8u data);
|
||||
Bitu Read_RHR();
|
||||
Bitu Read_IER();
|
||||
void Write_IER(Bit8u data);
|
||||
Bitu Read_ISR();
|
||||
Bitu Read_LCR();
|
||||
void Write_FCR(Bit8u data);
|
||||
void Write_LCR(Bit8u data);
|
||||
Bitu Read_MCR();
|
||||
void Write_MCR(Bit8u data);
|
||||
Bitu Read_LSR();
|
||||
|
||||
// Really old hardware seems to have the delta part of this register writable
|
||||
void Write_MSR(Bit8u data);
|
||||
|
||||
Bitu Read_MSR();
|
||||
Bitu Read_SPR();
|
||||
void Write_SPR(Bit8u data);
|
||||
void Write_reserved(Bit8u data, Bit8u address);
|
||||
|
||||
Bitu Read_RHR();
|
||||
Bitu Read_IER();
|
||||
Bitu Read_ISR();
|
||||
Bitu Read_LCR();
|
||||
Bitu Read_MCR();
|
||||
Bitu Read_LSR();
|
||||
Bitu Read_MSR();
|
||||
Bitu Read_SPR();
|
||||
|
||||
// If a byte comes from wherever(loopback or real port or maybe
|
||||
// that softmodem thingy), put it in here.
|
||||
// If a byte comes from loopback or prepherial, put it in here.
|
||||
void receiveByte(Bit8u data);
|
||||
|
||||
// If an error was received, put it here (in LSR register format)
|
||||
void receiveError(Bit8u errorword);
|
||||
|
||||
// depratched
|
||||
// connected device checks, if port can receive data:
|
||||
bool CanReceiveByte();
|
||||
|
||||
// when THR was shifted to TX
|
||||
void ByteTransmitting();
|
||||
|
||||
// When done sending, notify here
|
||||
void ByteTransmitted();
|
||||
|
||||
// Virtual app has read the received data
|
||||
virtual void RXBufferEmpty()=0;
|
||||
|
||||
// real transmit
|
||||
virtual void transmitByte(Bit8u val)=0;
|
||||
// Transmit byte to prepherial
|
||||
virtual void transmitByte(Bit8u val, bool first)=0;
|
||||
|
||||
// switch break state to the passed value
|
||||
virtual void setBreak(bool value)=0;
|
||||
|
||||
// set output lines
|
||||
virtual void updateModemControlLines(/*Bit8u mcr*/)=0;
|
||||
|
||||
// change baudrate, number of bits, parity, word length al at once
|
||||
virtual void updatePortConfig(Bit8u dll, Bit8u dlm, Bit8u lcr)=0;
|
||||
virtual void updatePortConfig(Bit16u divider, Bit8u lcr)=0;
|
||||
|
||||
// CSerial requests an update of the input lines
|
||||
virtual void updateMSR()=0;
|
||||
void Init_Registers();
|
||||
|
||||
bool Putchar(Bit8u data, bool wait_dtr, bool wait_rts, Bitu timeout);
|
||||
bool Getchar(Bit8u* data, bool wait_dsr, Bitu timeout);
|
||||
|
||||
// after update request, or some "real" changes,
|
||||
// modify MSR here
|
||||
void changeMSR(Bit8u data); // make public
|
||||
|
||||
void Init_Registers(Bit32u initbps,
|
||||
Bit8u bytesize, const char* parity, Bit8u stopbits);
|
||||
|
||||
private:
|
||||
|
||||
DOS_Device* mydosdevice;
|
||||
|
||||
// I used this spec: http://www.exar.com/products/st16c450v420.pdf
|
||||
|
||||
void changeMSR_Loopback(Bit8u data);
|
||||
void ComputeInterrupts();
|
||||
|
||||
void WriteRealIER(Bit8u data);
|
||||
// reason for an interrupt has occured - functions triggers interrupt
|
||||
// if it is enabled and no higher-priority irq pending
|
||||
// a sub-interrupt is triggered
|
||||
void rise(Bit8u priority);
|
||||
|
||||
// clears the pending interrupt
|
||||
// clears the pending sub-interrupt
|
||||
void clear(Bit8u priority);
|
||||
|
||||
#define ERROR_PRIORITY 4 // overrun, parity error, frame error, break
|
||||
@ -149,18 +190,12 @@ private:
|
||||
#define MSR_PRIORITY 8 // CRS, DSR, RI, DCD change
|
||||
#define NONE_PRIORITY 0
|
||||
|
||||
|
||||
Bit8u pending_interrupts; // stores triggered interupts
|
||||
Bit8u current_priority;
|
||||
Bit8u waiting_interrupts; // these are on, but maybe not enabled
|
||||
|
||||
// 16C450 (no FIFO)
|
||||
// read/write name
|
||||
|
||||
|
||||
Bit8u DLL; // r Baudrate divider low byte
|
||||
Bit8u DLM; // r "" high byte
|
||||
|
||||
Bit16u baud_divider;
|
||||
Bit8u RHR; // r Receive Holding Register, also LSB of Divisor Latch (r/w)
|
||||
#define RHR_OFFSET 0
|
||||
// Data: whole byte
|
||||
@ -169,13 +204,10 @@ private:
|
||||
#define THR_OFFSET 0
|
||||
// Data: whole byte
|
||||
|
||||
Bit8u IER; // r/w Interrupt Enable Register, also MSB of Divisor Latch (r/w)
|
||||
Bit8u IER; // r/w Interrupt Enable Register, also MSB of Divisor Latch
|
||||
#define IER_OFFSET 1
|
||||
// Data:
|
||||
// bit0 receive holding register
|
||||
// bit1 transmit holding register
|
||||
// bit2 receive line status interrupt
|
||||
// bit3 modem status interrupt
|
||||
|
||||
bool irq_active;
|
||||
|
||||
#define RHR_INT_Enable_MASK 0x1
|
||||
#define THR_INT_Enable_MASK 0x2
|
||||
@ -222,23 +254,24 @@ private:
|
||||
#define LCR_STOPBITS_1 0x0
|
||||
#define LCR_STOPBITS_MORE_THAN_1 0x4
|
||||
|
||||
Bit8u MCR; // r/w Modem Control Register
|
||||
// Modem Control Register
|
||||
// r/w
|
||||
#define MCR_OFFSET 4
|
||||
// bit0: DTR
|
||||
// bit1: RTS
|
||||
// bit2: OP1
|
||||
// bit3: OP2
|
||||
// bit4: loop back enable
|
||||
bool dtr; // bit0: DTR
|
||||
bool rts; // bit1: RTS
|
||||
bool op1; // bit2: OP1
|
||||
bool op2; // bit3: OP2
|
||||
bool loopback; // bit4: loop back enable
|
||||
|
||||
#define MCR_LOOPBACK_Enable_MASK 0x10
|
||||
#define MCR_LEVELS_MASK 0xf
|
||||
|
||||
#define MCR_DTR_MASK 0x1
|
||||
#define MCR_RTS_MASK 0x2
|
||||
#define MCR_OP1_MASK 0x4
|
||||
#define MCR_OP2_MASK 0x8
|
||||
|
||||
#define MCR_OP2_MASK 0x8
|
||||
#define MCR_LOOPBACK_Enable_MASK 0x10
|
||||
public:
|
||||
Bit8u LSR; // r Line Status Register
|
||||
private:
|
||||
|
||||
#define LSR_OFFSET 5
|
||||
|
||||
#define LSR_RX_DATA_READY_MASK 0x1
|
||||
@ -251,17 +284,26 @@ private:
|
||||
|
||||
#define LSR_ERROR_MASK 0x1e
|
||||
|
||||
// error printing
|
||||
bool errormsg_pending;
|
||||
Bitu framingErrors;
|
||||
Bitu parityErrors;
|
||||
Bitu overrunErrors;
|
||||
Bitu overrunIF0;
|
||||
Bitu breakErrors;
|
||||
|
||||
Bit8u MSR; // r Modem Status Register
|
||||
|
||||
// Modem Status Register
|
||||
// r
|
||||
#define MSR_OFFSET 6
|
||||
// bit0: deltaCTS
|
||||
// bit1: deltaDSR
|
||||
// bit2: deltaRI
|
||||
// bit3: deltaCD
|
||||
// bit4: CTS
|
||||
// bit5: DSR
|
||||
// bit6: RI
|
||||
// bit7: CD
|
||||
bool d_cts; // bit0: deltaCTS
|
||||
bool d_dsr; // bit1: deltaDSR
|
||||
bool d_ri; // bit2: deltaRI
|
||||
bool d_cd; // bit3: deltaCD
|
||||
bool cts; // bit4: CTS
|
||||
bool dsr; // bit5: DSR
|
||||
bool ri; // bit6: RI
|
||||
bool cd; // bit7: CD
|
||||
|
||||
#define MSR_delta_MASK 0xf
|
||||
#define MSR_LINE_MASK 0xf0
|
||||
@ -280,20 +322,37 @@ private:
|
||||
|
||||
|
||||
// For loopback purposes...
|
||||
bool loopback_pending;
|
||||
Bit8u loopback_data;
|
||||
void transmitLoopbackByte(Bit8u val);
|
||||
void transmitLoopbackByte(Bit8u val, bool value);
|
||||
|
||||
// 16C550 (FIFO)
|
||||
// TODO
|
||||
#define FCR_OFFSET 2
|
||||
bool fifo_warn;
|
||||
//Bit8u FCR; // FIFO Control Register
|
||||
|
||||
};
|
||||
|
||||
#define COM1_BASE 0x3f8
|
||||
#define COM2_BASE 0x2f8
|
||||
#define COM3_BASE 0x3e8
|
||||
#define COM4_BASE 0x2e8
|
||||
extern CSerial* serialports[];
|
||||
const Bit8u serial_defaultirq[4] = { 4, 3, 4, 3 };
|
||||
const Bit16u serial_baseaddr[4] = {0x3f8,0x2f8,0x3e8,0x2e8};
|
||||
const char* const serial_comname[]={"COM1","COM2","COM3","COM4"};
|
||||
|
||||
// the COM devices
|
||||
|
||||
class device_COM : public DOS_Device {
|
||||
public:
|
||||
// Creates a COM device that communicates with the num-th parallel port, i.e. is LPTnum
|
||||
device_COM(class CSerial* sc);
|
||||
~device_COM();
|
||||
bool Read(Bit8u * data,Bit16u * size);
|
||||
bool Write(Bit8u * data,Bit16u * size);
|
||||
bool Seek(Bit32u * pos,Bit32u type);
|
||||
bool Close();
|
||||
Bit16u GetInformation(void);
|
||||
private:
|
||||
CSerial* sclass;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
112
include/setup.h
112
include/setup.h
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: setup.h,v 1.22 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: setup.h,v 1.26 2007/01/08 19:45:37 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_SETUP_H
|
||||
#define DOSBOX_SETUP_H
|
||||
@ -33,24 +33,25 @@
|
||||
|
||||
class CommandLine {
|
||||
public:
|
||||
CommandLine(int argc,char * argv[]);
|
||||
CommandLine(char * name,char * cmdline);
|
||||
CommandLine(int argc,char const * const argv[]);
|
||||
CommandLine(char const * const name,char const * const cmdline);
|
||||
const char * GetFileName(){ return file_name.c_str();}
|
||||
|
||||
bool FindExist(char * name,bool remove=false);
|
||||
bool FindHex(char * name,int & value,bool remove=false);
|
||||
bool FindInt(char * name,int & value,bool remove=false);
|
||||
bool FindString(char * name,std::string & value,bool remove=false);
|
||||
bool FindExist(char const * const name,bool remove=false);
|
||||
bool FindHex(char const * const name,int & value,bool remove=false);
|
||||
bool FindInt(char const * const name,int & value,bool remove=false);
|
||||
bool FindString(char const * const name,std::string & value,bool remove=false);
|
||||
bool FindCommand(unsigned int which,std::string & value);
|
||||
bool FindStringBegin(char * begin,std::string & value, bool remove=false);
|
||||
bool FindStringRemain(char * name,std::string & value);
|
||||
bool FindStringBegin(char const * const begin,std::string & value, bool remove=false);
|
||||
bool FindStringRemain(char const * const name,std::string & value);
|
||||
bool GetStringRemain(std::string & value);
|
||||
unsigned int GetCount(void);
|
||||
void Shift(unsigned int amount=1);
|
||||
private:
|
||||
typedef std::list<std::string>::iterator cmd_it;
|
||||
std::list<std::string> cmds;
|
||||
std::string file_name;
|
||||
bool FindEntry(char * name,cmd_it & it,bool neednext=false);
|
||||
bool FindEntry(char const * const name,cmd_it & it,bool neednext=false);
|
||||
};
|
||||
|
||||
union Value{
|
||||
@ -63,10 +64,10 @@ union Value{
|
||||
|
||||
class Property {
|
||||
public:
|
||||
Property(const char* _propname):propname(_propname) { }
|
||||
Property(char const * const _propname):propname(_propname) { }
|
||||
virtual void SetValue(char* input)=0;
|
||||
virtual void GetValuestring(char* str)=0;
|
||||
Value GetValue() { return value;}
|
||||
virtual void GetValuestring(char* str) const=0;
|
||||
Value GetValue() const { return value;}
|
||||
virtual ~Property(){ }
|
||||
std::string propname;
|
||||
Value value;
|
||||
@ -74,52 +75,52 @@ public:
|
||||
|
||||
class Prop_int:public Property {
|
||||
public:
|
||||
Prop_int(const char* _propname, int _value):Property(_propname) {
|
||||
Prop_int(char const * const _propname, int _value):Property(_propname) {
|
||||
value._int=_value;
|
||||
}
|
||||
void SetValue(char* input);
|
||||
void GetValuestring(char* str);
|
||||
void GetValuestring(char* str) const;
|
||||
~Prop_int(){ }
|
||||
};
|
||||
class Prop_float:public Property {
|
||||
public:
|
||||
Prop_float(const char* _propname, float _value):Property(_propname){
|
||||
Prop_float(char const * const _propname, float _value):Property(_propname){
|
||||
value._float=_value;
|
||||
}
|
||||
void SetValue(char* input);
|
||||
void GetValuestring(char* str);
|
||||
void GetValuestring(char* str) const;
|
||||
~Prop_float(){ }
|
||||
};
|
||||
|
||||
class Prop_bool:public Property {
|
||||
public:
|
||||
Prop_bool(const char* _propname, bool _value):Property(_propname) {
|
||||
Prop_bool(char const * const _propname, bool _value):Property(_propname) {
|
||||
value._bool=_value;
|
||||
}
|
||||
void SetValue(char* input);
|
||||
void GetValuestring(char* str);
|
||||
void GetValuestring(char* str) const;
|
||||
~Prop_bool(){ }
|
||||
};
|
||||
|
||||
class Prop_string:public Property{
|
||||
public:
|
||||
Prop_string(const char* _propname, char* _value):Property(_propname) {
|
||||
Prop_string(char const * const _propname, char const * const _value):Property(_propname) {
|
||||
value._string=new std::string(_value);
|
||||
}
|
||||
~Prop_string(){
|
||||
delete value._string;
|
||||
}
|
||||
void SetValue(char* input);
|
||||
void GetValuestring(char* str);
|
||||
void GetValuestring(char* str) const;
|
||||
};
|
||||
class Prop_hex:public Property {
|
||||
public:
|
||||
Prop_hex(const char* _propname, int _value):Property(_propname) {
|
||||
Prop_hex(char const * const _propname, int _value):Property(_propname) {
|
||||
value._hex=_value;
|
||||
}
|
||||
void SetValue(char* input);
|
||||
~Prop_hex(){ }
|
||||
void GetValuestring(char* str);
|
||||
void GetValuestring(char* str) const;
|
||||
};
|
||||
|
||||
class Section {
|
||||
@ -130,7 +131,7 @@ private:
|
||||
struct Function_wrapper {
|
||||
SectionFunction function;
|
||||
bool canchange;
|
||||
Function_wrapper(SectionFunction _fun,bool _ch){
|
||||
Function_wrapper(SectionFunction const _fun,bool _ch){
|
||||
function=_fun;
|
||||
canchange=_ch;
|
||||
}
|
||||
@ -139,17 +140,17 @@ private:
|
||||
std::list<Function_wrapper> destroyfunctions;
|
||||
std::string sectionname;
|
||||
public:
|
||||
Section(const char* _sectionname):sectionname(_sectionname) { }
|
||||
Section(char const * const _sectionname):sectionname(_sectionname) { }
|
||||
|
||||
void AddInitFunction(SectionFunction func,bool canchange=false) {initfunctions.push_back(Function_wrapper(func,canchange));}
|
||||
void AddDestroyFunction(SectionFunction func,bool canchange=false) {destroyfunctions.push_front(Function_wrapper(func,canchange));}
|
||||
void ExecuteInit(bool initall=true);
|
||||
void ExecuteDestroy(bool destroyall=true);
|
||||
const char* GetName() {return sectionname.c_str();}
|
||||
const char* GetName() const {return sectionname.c_str();}
|
||||
|
||||
virtual char* GetPropValue(const char* _property)=0;
|
||||
virtual char const * GetPropValue(char const * const _property) const =0;
|
||||
virtual void HandleInputline(char * _line)=0;
|
||||
virtual void PrintData(FILE* outfile)=0;
|
||||
virtual void PrintData(FILE* outfile) const =0;
|
||||
virtual ~Section() { /*Children must call executedestroy ! */}
|
||||
};
|
||||
|
||||
@ -158,33 +159,34 @@ class Section_prop:public Section {
|
||||
private:
|
||||
std::list<Property*> properties;
|
||||
typedef std::list<Property*>::iterator it;
|
||||
typedef std::list<Property*>::const_iterator const_it;
|
||||
public:
|
||||
Section_prop(const char* _sectionname):Section(_sectionname){}
|
||||
void Add_int(const char* _propname, int _value=0);
|
||||
void Add_string(const char* _propname, char* _value=NULL);
|
||||
void Add_bool(const char* _propname, bool _value=false);
|
||||
void Add_hex(const char* _propname, int _value=0);
|
||||
void Add_float(const char* _propname, float _value=0.0);
|
||||
Section_prop(char const * const _sectionname):Section(_sectionname){}
|
||||
void Add_int(char const * const _propname, int _value=0);
|
||||
void Add_string(char const * const _propname, char const * const _value=NULL);
|
||||
void Add_bool(char const * const _propname, bool _value=false);
|
||||
void Add_hex(char const * const _propname, int _value=0);
|
||||
void Add_float(char const * const _propname, float _value=0.0);
|
||||
|
||||
int Get_int(const char* _propname);
|
||||
const char* Get_string(const char* _propname);
|
||||
bool Get_bool(const char* _propname);
|
||||
int Get_hex(const char* _propname);
|
||||
float Get_float(const char* _propname);
|
||||
int Get_int(char const * const _propname) const;
|
||||
const char* Get_string(char const * const _propname) const;
|
||||
bool Get_bool(char const * const _propname) const;
|
||||
int Get_hex(char const * const _propname) const;
|
||||
float Get_float(char const * const _propname) const;
|
||||
void HandleInputline(char *gegevens);
|
||||
void PrintData(FILE* outfile);
|
||||
virtual char* GetPropValue(const char* _property);
|
||||
void PrintData(FILE* outfile) const;
|
||||
virtual char const * GetPropValue(char const * const _property) const;
|
||||
//ExecuteDestroy should be here else the destroy functions use destroyed properties
|
||||
virtual ~Section_prop();
|
||||
};
|
||||
|
||||
class Section_line: public Section{
|
||||
public:
|
||||
Section_line(const char* _sectionname):Section(_sectionname){}
|
||||
Section_line(char const * const _sectionname):Section(_sectionname){}
|
||||
~Section_line(){ExecuteDestroy(true);}
|
||||
void HandleInputline(char* gegevens);
|
||||
void PrintData(FILE* outfile);
|
||||
virtual char* GetPropValue(const char* _property);
|
||||
void PrintData(FILE* outfile) const;
|
||||
virtual const char* GetPropValue(char const * const _property) const;
|
||||
std::string data;
|
||||
};
|
||||
|
||||
@ -195,23 +197,25 @@ private:
|
||||
std::list<Section*> sectionlist;
|
||||
typedef std::list<Section*>::iterator it;
|
||||
typedef std::list<Section*>::reverse_iterator reverse_it;
|
||||
typedef std::list<Section*>::const_iterator const_it;
|
||||
typedef std::list<Section*>::const_reverse_iterator const_reverse_it;
|
||||
void (* _start_function)(void);
|
||||
public:
|
||||
Config(CommandLine * cmd){ cmdline=cmd;}
|
||||
Config(CommandLine * cmd):cmdline(cmd){}
|
||||
~Config();
|
||||
|
||||
Section_line * AddSection_line(const char * _name,void (*_initfunction)(Section*));
|
||||
Section_prop * AddSection_prop(const char * _name,void (*_initfunction)(Section*),bool canchange=false);
|
||||
Section_line * AddSection_line(char const * const _name,void (*_initfunction)(Section*));
|
||||
Section_prop * AddSection_prop(char const * const _name,void (*_initfunction)(Section*),bool canchange=false);
|
||||
|
||||
Section* GetSection(const char* _sectionname);
|
||||
Section* GetSectionFromProperty(const char* prop);
|
||||
Section* GetSection(char const* const _sectionname) const;
|
||||
Section* GetSectionFromProperty(char const * const prop) const;
|
||||
|
||||
void SetStartUp(void (*_function)(void));
|
||||
void Init();
|
||||
void ShutDown();
|
||||
void StartUp();
|
||||
void PrintConfig(const char* configfilename);
|
||||
bool ParseConfigFile(const char* configfilename);
|
||||
void PrintConfig(char const * const configfilename) const;
|
||||
bool ParseConfigFile(char const * const configfilename);
|
||||
void ParseEnv(char ** envp);
|
||||
};
|
||||
|
||||
@ -222,8 +226,8 @@ protected:
|
||||
public:
|
||||
Module_base(Section* configuration){m_configuration=configuration;};
|
||||
// Module_base(Section* configuration, SaveState* state) {};
|
||||
~Module_base(){/*LOG_MSG("executed")*/;};//Destructors are required
|
||||
virtual ~Module_base(){/*LOG_MSG("executed")*/;};//Destructors are required
|
||||
/* Returns true if succesful.*/
|
||||
virtual bool Change_Config(Section* newconfig) {return false;} ;
|
||||
virtual bool Change_Config(Section* /*newconfig*/) {return false;} ;
|
||||
};
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: shell.h,v 1.15 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: shell.h,v 1.20 2007/01/08 19:59:06 qbix79 Exp $ */
|
||||
|
||||
#ifndef DOSBOX_SHELL_H
|
||||
#define DOSBOX_SHELL_H
|
||||
@ -48,6 +48,7 @@ public:
|
||||
~BatchFile();
|
||||
bool ReadLine(char * line);
|
||||
bool Goto(char * where);
|
||||
void Shift(void);
|
||||
Bit16u file_handle;
|
||||
bool echo;
|
||||
DOS_Shell * shell;
|
||||
@ -104,6 +105,8 @@ public:
|
||||
void CMD_CHOICE(char * args);
|
||||
void CMD_ATTRIB(char * args);
|
||||
void CMD_PATH(char * args);
|
||||
void CMD_SHIFT(char * args);
|
||||
void CMD_VER(char * args);
|
||||
/* The shell's variables */
|
||||
Bit16u input_handle;
|
||||
BatchFile * bf;
|
||||
@ -113,10 +116,10 @@ public:
|
||||
};
|
||||
|
||||
struct SHELL_Cmd {
|
||||
const char * name; /* Command name*/
|
||||
const char * name; /* Command name*/
|
||||
Bit32u flags; /* Flags about the command */
|
||||
void (DOS_Shell::*handler)(char * args); /* Handler for this command */
|
||||
const char * help; /* String with command help */
|
||||
void (DOS_Shell::*handler)(char * args); /* Handler for this command */
|
||||
const char * help; /* String with command help */
|
||||
};
|
||||
|
||||
static inline void StripSpaces(char*&args) {
|
||||
@ -151,11 +154,11 @@ static inline char* ExpandDot(char*args, char* buffer) {
|
||||
class AutoexecObject{
|
||||
private:
|
||||
bool installed;
|
||||
char buf[256];
|
||||
std::string buf;
|
||||
public:
|
||||
AutoexecObject():installed(false){};
|
||||
void Install(char * line,...);
|
||||
void InstallBefore(char* line, ...);
|
||||
AutoexecObject():installed(false){ };
|
||||
void Install(std::string const &in);
|
||||
void InstallBefore(std::string const &in);
|
||||
~AutoexecObject();
|
||||
private:
|
||||
void CreateAutoexec(void);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -45,7 +45,7 @@ char *ltrim(char *str);
|
||||
char *rtrim(char *str);
|
||||
char *trim(char * str);
|
||||
|
||||
bool ScanCMDBool(char * cmd,char * check);
|
||||
bool ScanCMDBool(char * cmd,char const * const check);
|
||||
char * ScanCMDRemain(char * cmd);
|
||||
char * StripWord(char *&cmd);
|
||||
bool IsDecWord(char * word);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
105
include/vga.h
105
include/vga.h
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -23,8 +23,18 @@
|
||||
#include "dosbox.h"
|
||||
#endif
|
||||
|
||||
//Don't enable keeping changes and mapping lfb probably...
|
||||
#define VGA_LFB_MAPPED
|
||||
//#define VGA_KEEP_CHANGES
|
||||
#define VGA_MEMORY (2*1024*1024)
|
||||
#define VGA_CHANGE_SHIFT 9
|
||||
|
||||
//Offset inside VGA_MEMORY that will be used for certain types of caching
|
||||
#define VGA_CACHE_OFFSET (512*1024)
|
||||
|
||||
class PageHandler;
|
||||
|
||||
|
||||
enum VGAModes {
|
||||
M_CGA2, M_CGA4,
|
||||
M_EGA, M_VGA,
|
||||
@ -70,6 +80,7 @@ typedef struct {
|
||||
Bit8u pel_panning; /* Amount of pixels to skip when starting horizontal line */
|
||||
Bit8u hlines_skip;
|
||||
Bit8u bytes_skip;
|
||||
Bit8u addr_shift;
|
||||
|
||||
/* Specific stuff memory write/read handling */
|
||||
|
||||
@ -95,9 +106,11 @@ typedef struct {
|
||||
Bitu width;
|
||||
Bitu height;
|
||||
Bitu blocks;
|
||||
Bitu panning;
|
||||
Bitu address;
|
||||
Bit8u *linear_base;
|
||||
Bitu linear_mask;
|
||||
Bitu address_add;
|
||||
Bitu line_length;
|
||||
Bitu address_line_total;
|
||||
Bitu address_line;
|
||||
Bitu lines_total;
|
||||
@ -108,13 +121,14 @@ typedef struct {
|
||||
Bitu parts_lines;
|
||||
Bitu parts_left;
|
||||
struct {
|
||||
float vtotal;
|
||||
float vstart;
|
||||
float vend;
|
||||
float htotal;
|
||||
float hstart;
|
||||
float hend;
|
||||
float parts;
|
||||
double framestart;
|
||||
double vrstart, vrend; // V-retrace
|
||||
double hrstart, hrend; // H-retrace
|
||||
double hblkstart, hblkend; // H-blanking
|
||||
double vblkstart, vblkend; // V-Blanking
|
||||
double vdend, vtotal;
|
||||
double hdend, htotal;
|
||||
double parts;
|
||||
} delay;
|
||||
bool double_scan;
|
||||
bool doublewidth,doubleheight;
|
||||
@ -140,8 +154,23 @@ typedef struct {
|
||||
Bit8u mc[64][64];
|
||||
} VGA_HWCURSOR;
|
||||
|
||||
typedef union {
|
||||
Bit32u fullbank;
|
||||
#ifndef WORDS_BIGENDIAN
|
||||
struct {
|
||||
Bit16u lowerbank;
|
||||
Bit16u bank;
|
||||
} b;
|
||||
#else
|
||||
struct {
|
||||
Bit16u bank;
|
||||
Bit16u lowerbank;
|
||||
} b;
|
||||
#endif
|
||||
} VGA_S3_BANK;
|
||||
|
||||
typedef struct {
|
||||
Bit8u bank;
|
||||
VGA_S3_BANK svga_bank;
|
||||
Bit8u reg_lock1;
|
||||
Bit8u reg_lock2;
|
||||
Bit8u reg_31;
|
||||
@ -179,31 +208,36 @@ typedef struct {
|
||||
Bit8u htotal;
|
||||
Bit8u hdend;
|
||||
Bit8u hsyncp;
|
||||
Bit8u hsyncw;
|
||||
Bit8u syncw;
|
||||
Bit8u vtotal;
|
||||
Bit8u vdend;
|
||||
Bit8u vadjust;
|
||||
Bit8u vsyncp;
|
||||
Bit8u vsyncw;
|
||||
Bit8u max_scanline;
|
||||
Bit8u lpen_low, lpen_high;
|
||||
Bit8u cursor_start;
|
||||
Bit8u cursor_end;
|
||||
} VGA_OTHER;
|
||||
|
||||
typedef struct {
|
||||
Bit8u pcjr_flipflop;
|
||||
Bit8u mode_control;
|
||||
Bit8u color_select;
|
||||
Bit8u mem_bank;
|
||||
Bit8u disp_bank;
|
||||
Bit8u reg_index;
|
||||
Bit8u gfx_control;
|
||||
Bit8u palette_mask;
|
||||
Bit8u extended_ram;
|
||||
Bit8u border_color;
|
||||
bool is_32k_mode;
|
||||
bool pcjr_flipflop;
|
||||
Bit8u line_mask, line_shift;
|
||||
Bit8u draw_bank, mem_bank;
|
||||
Bit8u *draw_base, *mem_base;
|
||||
Bitu addr_mask;
|
||||
} VGA_TANDY;
|
||||
|
||||
typedef struct {
|
||||
Bit8u index;
|
||||
|
||||
Bit8u reset;
|
||||
Bit8u clocking_mode;
|
||||
Bit8u map_mask;
|
||||
@ -266,11 +300,11 @@ typedef struct {
|
||||
Bit8u bit_mask;
|
||||
} VGA_Gfx;
|
||||
|
||||
struct RGBEntry {
|
||||
typedef struct {
|
||||
Bit8u red;
|
||||
Bit8u green;
|
||||
Bit8u blue;
|
||||
};
|
||||
} RGBEntry;
|
||||
|
||||
typedef struct {
|
||||
Bit8u bits; /* DAC bits, usually 6 or 8 */
|
||||
@ -280,19 +314,33 @@ typedef struct {
|
||||
Bit8u write_index;
|
||||
Bit8u read_index;
|
||||
Bitu first_changed;
|
||||
Bit8u combine[16];
|
||||
RGBEntry rgb[0x100];
|
||||
} VGA_Dac;
|
||||
|
||||
union VGA_Latch {
|
||||
typedef struct {
|
||||
Bitu readStart, writeStart;
|
||||
Bitu bankMask;
|
||||
} VGA_SVGA;
|
||||
|
||||
typedef union {
|
||||
Bit32u d;
|
||||
Bit8u b[4];
|
||||
};
|
||||
} VGA_Latch;
|
||||
|
||||
union VGA_Memory {
|
||||
Bit8u linear[512*1024*4];
|
||||
Bit8u paged[512*1024][4];
|
||||
VGA_Latch latched[512*1024];
|
||||
};
|
||||
typedef struct {
|
||||
Bit8u linear[VGA_MEMORY];
|
||||
} VGA_Memory;
|
||||
|
||||
typedef struct {
|
||||
//Add a few more just to be safe
|
||||
Bit8u map[(VGA_MEMORY >> VGA_CHANGE_SHIFT) + 32];
|
||||
Bit8u checkMask, frame, writeMask;
|
||||
bool active;
|
||||
Bit32u clearMask;
|
||||
Bit32u start, last;
|
||||
Bit32u lastAddress;
|
||||
} VGA_Changes;
|
||||
|
||||
typedef struct {
|
||||
Bit32u page;
|
||||
@ -301,8 +349,6 @@ typedef struct {
|
||||
PageHandler *handler;
|
||||
} VGA_LFB;
|
||||
|
||||
#define VGA_CHANGE_SHIFT 9
|
||||
typedef Bit8u VGA_Changed[(2*1024*1024) >> VGA_CHANGE_SHIFT];
|
||||
typedef struct {
|
||||
VGAModes mode; /* The mode the vga system is in */
|
||||
VGAModes lastmode;
|
||||
@ -318,13 +364,15 @@ typedef struct {
|
||||
VGA_Dac dac;
|
||||
VGA_Latch latch;
|
||||
VGA_S3 s3;
|
||||
VGA_SVGA svga;
|
||||
VGA_HERC herc;
|
||||
VGA_TANDY tandy;
|
||||
VGA_OTHER other;
|
||||
VGA_Memory mem;
|
||||
#ifdef VGA_KEEP_CHANGES
|
||||
VGA_Changes changes;
|
||||
#endif
|
||||
VGA_LFB lfb;
|
||||
VGA_Changed changed;
|
||||
Bit8u * gfxmem_start;
|
||||
} VGA_Type;
|
||||
|
||||
|
||||
@ -336,6 +384,7 @@ void VGA_SetupHandlers(void);
|
||||
void VGA_StartResize(void);
|
||||
void VGA_SetupDrawing(Bitu val);
|
||||
void VGA_CheckScanLength(void);
|
||||
void VGA_ChangedBank(void);
|
||||
|
||||
/* Some DAC/Attribute functions */
|
||||
void VGA_DAC_CombineColor(Bit8u attr,Bit8u pal);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -19,6 +19,8 @@
|
||||
#ifndef DOSBOX_VIDEO_H
|
||||
#define DOSBOX_VIDEO_H
|
||||
|
||||
#define REDUCE_JOYSTICK_POLLING
|
||||
|
||||
typedef enum {
|
||||
GFX_CallBackReset,
|
||||
GFX_CallBackStop,
|
||||
@ -64,6 +66,14 @@ void GFX_SwitchFullScreen(void);
|
||||
bool GFX_StartUpdate(Bit8u * & pixels,Bitu & pitch);
|
||||
void GFX_EndUpdate( const Bit16u *changedLines );
|
||||
|
||||
#if defined (WIN32)
|
||||
bool GFX_SDLUsingWinDIB(void);
|
||||
#endif
|
||||
|
||||
#if defined (REDUCE_JOYSTICK_POLLING)
|
||||
void MAPPER_UpdateJoysticks(void);
|
||||
#endif
|
||||
|
||||
/* Mouse related */
|
||||
void GFX_CaptureMouse(void);
|
||||
extern bool mouselocked; //true if mouse is confined to window
|
||||
|
434
install-sh
434
install-sh
@ -1,8 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2004-09-10.20
|
||||
|
||||
#
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
@ -42,11 +41,13 @@ scriptversion=2004-09-10.20
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
@ -58,265 +59,236 @@ stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
transformbasename=""
|
||||
transform_arg=""
|
||||
instcmd="$mvprog"
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
chowncmd=""
|
||||
chgrpcmd=""
|
||||
stripcmd=""
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dstarg=
|
||||
no_target_directory=
|
||||
src=""
|
||||
dst=""
|
||||
dir_arg=""
|
||||
|
||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
while [ x"$1" != x ]; do
|
||||
case $1 in
|
||||
-c) instcmd=$cpprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
Options:
|
||||
-c (ignored)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-c) shift
|
||||
continue;;
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit 0;;
|
||||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t) dstarg=$2
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-T) no_target_directory=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit 0;;
|
||||
|
||||
*) # When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
test -n "$dir_arg$dstarg" && break
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dstarg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dstarg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dstarg=$arg
|
||||
done
|
||||
break;;
|
||||
esac
|
||||
*) if [ x"$src" = x ]
|
||||
then
|
||||
src=$1
|
||||
else
|
||||
# this colon is to work around a 386BSD /bin/sh bug
|
||||
:
|
||||
dst=$1
|
||||
fi
|
||||
shift
|
||||
continue;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$1"; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
if [ x"$src" = x ]
|
||||
then
|
||||
echo "$0: no input file specified" >&2
|
||||
exit 1
|
||||
else
|
||||
:
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
if [ x"$dir_arg" != x ]; then
|
||||
dst=$src
|
||||
src=""
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
if [ -d "$dst" ]; then
|
||||
instcmd=:
|
||||
chmodcmd=""
|
||||
else
|
||||
instcmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
|
||||
if test -d "$dst"; then
|
||||
mkdircmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
mkdircmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
|
||||
if test -z "$dstarg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ -f "$src" ] || [ -d "$src" ]
|
||||
then
|
||||
:
|
||||
else
|
||||
echo "$0: $src does not exist" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dstarg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
if [ x"$dst" = x ]
|
||||
then
|
||||
echo "$0: no destination specified" >&2
|
||||
exit 1
|
||||
else
|
||||
:
|
||||
fi
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dstarg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
# If destination is a directory, append the input filename; if your system
|
||||
# does not like double slashes in filenames, you may need to add some logic
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||
if [ -d "$dst" ]
|
||||
then
|
||||
dst=$dst/`basename "$src"`
|
||||
else
|
||||
:
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
## this sed command emulates the dirname command
|
||||
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
# Make sure that the destination directory exists.
|
||||
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
IFS=$oIFS
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if [ ! -d "$dstdir" ]; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
pathcomp=
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
IFS=$oIFS
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
if test ! -d "$pathcomp"; then
|
||||
$mkdirprog "$pathcomp"
|
||||
# mkdir can fail with a `File exist' error in case several
|
||||
# install-sh are creating the directory concurrently. This
|
||||
# is OK.
|
||||
test -d "$pathcomp" || exit
|
||||
fi
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
pathcomp=''
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $mkdircmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
while [ $# -ne 0 ] ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
|
||||
else
|
||||
dstfile=`basename "$dst"`
|
||||
if [ ! -d "$pathcomp" ] ;
|
||||
then
|
||||
$mkdirprog "$pathcomp"
|
||||
else
|
||||
:
|
||||
fi
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
$doit $cpprog "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| {
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
}
|
||||
}
|
||||
fi || { (exit 1); exit; }
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if [ x"$dir_arg" != x ]
|
||||
then
|
||||
$doit $instcmd "$dst" &&
|
||||
|
||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
|
||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
|
||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
|
||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
|
||||
else
|
||||
|
||||
# If we're going to rename the final executable, determine the name now.
|
||||
|
||||
if [ x"$transformarg" = x ]
|
||||
then
|
||||
dstfile=`basename "$dst"`
|
||||
else
|
||||
dstfile=`basename "$dst" $transformbasename |
|
||||
sed $transformarg`$transformbasename
|
||||
fi
|
||||
|
||||
# don't allow the sed command to completely eliminate the filename
|
||||
|
||||
if [ x"$dstfile" = x ]
|
||||
then
|
||||
dstfile=`basename "$dst"`
|
||||
else
|
||||
:
|
||||
fi
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up temp files at exit.
|
||||
|
||||
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Move or copy the file name to the temp name
|
||||
|
||||
$doit $instcmd "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits
|
||||
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||
|
||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
|
||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
|
||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
|
||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
|
||||
|
||||
# Now remove or move aside any old file at destination location. We try this
|
||||
# two ways since rm can't unlink itself on some systems and the destination
|
||||
# file might be busy for other reasons. In this case, the final cleanup
|
||||
# might fail but the new file should still install successfully.
|
||||
|
||||
{
|
||||
if [ -f "$dstdir/$dstfile" ]
|
||||
then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
|
||||
$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
|
||||
{
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
|
||||
fi &&
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
{
|
||||
(exit 0); exit
|
||||
}
|
||||
|
127
missing
127
missing
@ -1,10 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2004-09-07.08
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
|
||||
# Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@ -42,24 +38,18 @@ else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
@ -84,15 +74,11 @@ Supported PROGRAM values:
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit 0
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit 0
|
||||
echo "missing 0.4 - GNU automake"
|
||||
;;
|
||||
|
||||
-*)
|
||||
@ -101,44 +87,14 @@ Send bug reports to <bug-automake@gnu.org>."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program).
|
||||
case "$1" in
|
||||
lex|yacc)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
aclocal*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
@ -146,8 +102,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
@ -155,8 +116,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
@ -174,8 +140,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
automake*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
@ -185,9 +156,14 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
WARNING: \`$1' is needed, and you do not seem to have it handy on your
|
||||
system. You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
@ -209,7 +185,7 @@ WARNING: \`$1' is needed, but is $msg.
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
@ -239,7 +215,7 @@ WARNING: \`$1' $msg. You should only need it if
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
@ -261,8 +237,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
help2man)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
@ -281,8 +262,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
|
||||
# We have makeinfo, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
@ -298,6 +284,10 @@ WARNING: \`$1' is $msg. You should only need it if
|
||||
|
||||
tar)
|
||||
shift
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
@ -333,8 +323,8 @@ WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
WARNING: \`$1' is needed, and you do not seem to have it handy on your
|
||||
system. You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
@ -344,10 +334,3 @@ WARNING: \`$1' is needed, and is $msg.
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
|
111
mkinstalldirs
Normal file
111
mkinstalldirs
Normal file
@ -0,0 +1,111 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain
|
||||
|
||||
errstatus=0
|
||||
dirmode=""
|
||||
|
||||
usage="\
|
||||
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
|
||||
|
||||
# process command line arguments
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-h | --help | --h*) # -h for help
|
||||
echo "$usage" 1>&2
|
||||
exit 0
|
||||
;;
|
||||
-m) # -m PERM arg
|
||||
shift
|
||||
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
|
||||
dirmode=$1
|
||||
shift
|
||||
;;
|
||||
--) # stop option processing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*) # unknown option
|
||||
echo "$usage" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*) # first non-opt arg
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file
|
||||
do
|
||||
if test -d "$file"; then
|
||||
shift
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
case $# in
|
||||
0) exit 0 ;;
|
||||
esac
|
||||
|
||||
case $dirmode in
|
||||
'')
|
||||
if mkdir -p -- . 2>/dev/null; then
|
||||
echo "mkdir -p -- $*"
|
||||
exec mkdir -p -- "$@"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
for file
|
||||
do
|
||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||
shift
|
||||
|
||||
pathcomp=
|
||||
for d
|
||||
do
|
||||
pathcomp="$pathcomp$d"
|
||||
case $pathcomp in
|
||||
-*) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=""
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp="$pathcomp/"
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# End:
|
||||
# mkinstalldirs ends here
|
307
src/Makefile.in
307
src/Makefile.in
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -14,8 +14,6 @@
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(dosbox_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -23,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -36,51 +35,8 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
bin_PROGRAMS = dosbox$(EXEEXT)
|
||||
@HAVE_WINDRES_TRUE@am__append_1 = dosbox_ico.o
|
||||
subdir = src
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
am_dosbox_OBJECTS = dosbox.$(OBJEXT)
|
||||
dosbox_OBJECTS = $(am_dosbox_OBJECTS)
|
||||
@HAVE_WINDRES_TRUE@am__DEPENDENCIES_1 = dosbox_ico.o
|
||||
dosbox_DEPENDENCIES = cpu/libcpu.a debug/libdebug.a dos/libdos.a \
|
||||
fpu/libfpu.a hardware/libhardware.a gui/libgui.a \
|
||||
ints/libints.a misc/libmisc.a shell/libshell.a \
|
||||
hardware/serialport/libserial.a $(am__DEPENDENCIES_1)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
SOURCES = $(dosbox_SOURCES)
|
||||
DIST_SOURCES = $(dosbox_SOURCES)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -107,6 +63,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -137,9 +94,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -147,8 +101,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -156,23 +108,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -182,56 +140,81 @@ target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
SUBDIRS = cpu debug dos fpu gui hardware libs ints misc shell platform
|
||||
|
||||
bin_PROGRAMS = dosbox
|
||||
|
||||
dosbox_SOURCES = dosbox.cpp
|
||||
dosbox_LDADD = cpu/libcpu.a debug/libdebug.a dos/libdos.a fpu/libfpu.a \
|
||||
hardware/libhardware.a gui/libgui.a ints/libints.a \
|
||||
misc/libmisc.a shell/libshell.a \
|
||||
hardware/serialport/libserial.a $(am__append_1)
|
||||
dosbox_LDADD = cpu/libcpu.a debug/libdebug.a dos/libdos.a fpu/libfpu.a hardware/libhardware.a gui/libgui.a \
|
||||
ints/libints.a misc/libmisc.a shell/libshell.a hardware/serialport/libserial.a\
|
||||
$(am__append_1)
|
||||
|
||||
EXTRA_DIST = dosbox.rc dosbox.ico
|
||||
subdir = src
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
bin_PROGRAMS = dosbox$(EXEEXT)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
|
||||
am_dosbox_OBJECTS = dosbox.$(OBJEXT)
|
||||
dosbox_OBJECTS = $(am_dosbox_OBJECTS)
|
||||
@HAVE_WINDRES_TRUE@dosbox_DEPENDENCIES = cpu/libcpu.a debug/libdebug.a \
|
||||
@HAVE_WINDRES_TRUE@ dos/libdos.a fpu/libfpu.a \
|
||||
@HAVE_WINDRES_TRUE@ hardware/libhardware.a gui/libgui.a \
|
||||
@HAVE_WINDRES_TRUE@ ints/libints.a misc/libmisc.a \
|
||||
@HAVE_WINDRES_TRUE@ shell/libshell.a \
|
||||
@HAVE_WINDRES_TRUE@ hardware/serialport/libserial.a dosbox_ico.o
|
||||
@HAVE_WINDRES_FALSE@dosbox_DEPENDENCIES = cpu/libcpu.a debug/libdebug.a \
|
||||
@HAVE_WINDRES_FALSE@ dos/libdos.a fpu/libfpu.a \
|
||||
@HAVE_WINDRES_FALSE@ hardware/libhardware.a gui/libgui.a \
|
||||
@HAVE_WINDRES_FALSE@ ints/libints.a misc/libmisc.a \
|
||||
@HAVE_WINDRES_FALSE@ shell/libshell.a \
|
||||
@HAVE_WINDRES_FALSE@ hardware/serialport/libserial.a
|
||||
dosbox_LDFLAGS =
|
||||
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dosbox.Po
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
DIST_SOURCES = $(dosbox_SOURCES)
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
|
||||
ps-recursive install-info-recursive uninstall-info-recursive \
|
||||
all-recursive install-data-recursive install-exec-recursive \
|
||||
installdirs-recursive install-recursive uninstall-recursive \
|
||||
check-recursive installcheck-recursive
|
||||
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
SOURCES = $(dosbox_SOURCES)
|
||||
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
if test -f $$p \
|
||||
; then \
|
||||
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
@ -239,34 +222,18 @@ uninstall-binPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(bindir)/$$f; \
|
||||
done
|
||||
|
||||
clean-binPROGRAMS:
|
||||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||
|
||||
installcheck-binPROGRAMS: $(bin_PROGRAMS)
|
||||
bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
|
||||
case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
|
||||
*" $$p "* | *" $(srcdir)/$$p "*) continue;; \
|
||||
esac; \
|
||||
f=`echo "$$p" | \
|
||||
sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
for opt in --help --version; do \
|
||||
if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
|
||||
2>c$${pid}_.err </dev/null \
|
||||
&& test -n "`cat c$${pid}_.out`" \
|
||||
&& test -z "`cat c$${pid}_.err`"; then :; \
|
||||
else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
|
||||
done; \
|
||||
done; rm -f c$${pid}_.???; exit $$bad
|
||||
dosbox$(EXEEXT): $(dosbox_OBJECTS) $(dosbox_DEPENDENCIES)
|
||||
@rm -f dosbox$(EXEEXT)
|
||||
$(CXXLINK) $(dosbox_LDFLAGS) $(dosbox_OBJECTS) $(dosbox_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
@ -274,18 +241,26 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dosbox.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
@ -295,13 +270,7 @@ uninstall-info-am:
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -313,7 +282,7 @@ $(RECURSIVE_TARGETS):
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
@ -321,13 +290,7 @@ $(RECURSIVE_TARGETS):
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
@ -348,7 +311,7 @@ maintainer-clean-recursive:
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -359,6 +322,14 @@ ctags-recursive:
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -367,22 +338,19 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
if (etags --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
test -f $$subdir/TAGS && \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
@ -392,11 +360,10 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -419,6 +386,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -432,7 +403,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -447,17 +418,15 @@ distdir: $(DISTFILES)
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
@ -467,9 +436,8 @@ check: check-recursive
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
@ -489,7 +457,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -508,8 +476,6 @@ dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
@ -522,7 +488,7 @@ install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am: installcheck-binPROGRAMS
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -rf ./$(DEPDIR)
|
||||
@ -545,19 +511,22 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-binPROGRAMS clean-generic clean-recursive ctags \
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
|
||||
clean-binPROGRAMS clean-generic clean-recursive ctags \
|
||||
ctags-recursive distclean distclean-compile distclean-generic \
|
||||
distclean-recursive distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-binPROGRAMS \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installcheck-binPROGRAMS \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am
|
||||
distclean-recursive distclean-tags distdir dvi dvi-am \
|
||||
dvi-recursive info info-am info-recursive install install-am \
|
||||
install-binPROGRAMS install-data install-data-am \
|
||||
install-data-recursive install-exec install-exec-am \
|
||||
install-exec-recursive install-info install-info-am \
|
||||
install-info-recursive install-man install-recursive \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am installdirs-recursive maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-recursive \
|
||||
pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \
|
||||
tags-recursive uninstall uninstall-am uninstall-binPROGRAMS \
|
||||
uninstall-info-am uninstall-info-recursive uninstall-recursive
|
||||
|
||||
dosbox_ico.o: dosbox.rc dosbox.ico
|
||||
$(WINDRES) dosbox.rc dosbox_ico.o
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -14,8 +14,6 @@
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(libcpu_a_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -23,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -36,53 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/cpu
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
libcpu_a_AR = $(AR) $(ARFLAGS)
|
||||
libcpu_a_LIBADD =
|
||||
am_libcpu_a_OBJECTS = callback.$(OBJEXT) cpu.$(OBJEXT) flags.$(OBJEXT) \
|
||||
modrm.$(OBJEXT) core_full.$(OBJEXT) paging.$(OBJEXT) \
|
||||
core_normal.$(OBJEXT) core_simple.$(OBJEXT) \
|
||||
core_dyn_x86.$(OBJEXT)
|
||||
libcpu_a_OBJECTS = $(am_libcpu_a_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libcpu_a_SOURCES)
|
||||
DIST_SOURCES = $(libcpu_a_SOURCES)
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -109,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -139,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -149,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -158,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -185,44 +140,67 @@ target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
SUBDIRS = core_full core_normal core_dyn_x86
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
noinst_LIBRARIES = libcpu.a
|
||||
libcpu_a_SOURCES = callback.cpp cpu.cpp flags.cpp modrm.cpp modrm.h core_full.cpp instructions.h \
|
||||
paging.cpp lazyflags.h core_normal.cpp core_simple.cpp \
|
||||
core_dyn_x86.cpp
|
||||
|
||||
subdir = src/cpu
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libcpu_a_AR = $(AR) cru
|
||||
libcpu_a_LIBADD =
|
||||
am_libcpu_a_OBJECTS = callback.$(OBJEXT) cpu.$(OBJEXT) flags.$(OBJEXT) \
|
||||
modrm.$(OBJEXT) core_full.$(OBJEXT) paging.$(OBJEXT) \
|
||||
core_normal.$(OBJEXT) core_simple.$(OBJEXT) \
|
||||
core_dyn_x86.$(OBJEXT)
|
||||
libcpu_a_OBJECTS = $(am_libcpu_a_OBJECTS)
|
||||
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/callback.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/core_dyn_x86.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/core_full.Po ./$(DEPDIR)/core_normal.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/core_simple.Po ./$(DEPDIR)/cpu.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/flags.Po ./$(DEPDIR)/modrm.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/paging.Po
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libcpu_a_SOURCES)
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
|
||||
ps-recursive install-info-recursive uninstall-info-recursive \
|
||||
all-recursive install-data-recursive install-exec-recursive \
|
||||
installdirs-recursive install-recursive uninstall-recursive \
|
||||
check-recursive installcheck-recursive
|
||||
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
SOURCES = $(libcpu_a_SOURCES)
|
||||
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/cpu/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/cpu/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
$(AUTOMAKE) --gnu src/cpu/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
AR = ar
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
@ -232,7 +210,7 @@ libcpu.a: $(libcpu_a_OBJECTS) $(libcpu_a_DEPENDENCIES)
|
||||
$(RANLIB) libcpu.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
@ -248,18 +226,26 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paging.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
@ -269,13 +255,7 @@ uninstall-info-am:
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -287,7 +267,7 @@ $(RECURSIVE_TARGETS):
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
@ -295,13 +275,7 @@ $(RECURSIVE_TARGETS):
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
@ -322,7 +296,7 @@ maintainer-clean-recursive:
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -333,6 +307,14 @@ ctags-recursive:
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -341,22 +323,19 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
if (etags --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
test -f $$subdir/TAGS && \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
@ -366,11 +345,10 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -393,6 +371,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -406,7 +388,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -421,17 +403,15 @@ distdir: $(DISTFILES)
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
@ -441,6 +421,7 @@ check: check-recursive
|
||||
all-am: Makefile $(LIBRARIES)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
@ -460,7 +441,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -479,8 +460,6 @@ dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
@ -516,18 +495,22 @@ uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-noinstLIBRARIES clean-recursive \
|
||||
ctags ctags-recursive distclean distclean-compile \
|
||||
distclean-generic distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs installdirs-am \
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-noinstLIBRARIES clean-recursive ctags \
|
||||
ctags-recursive distclean distclean-compile distclean-generic \
|
||||
distclean-recursive distclean-tags distdir dvi dvi-am \
|
||||
dvi-recursive info info-am info-recursive install install-am \
|
||||
install-data install-data-am install-data-recursive \
|
||||
install-exec install-exec-am install-exec-recursive \
|
||||
install-info install-info-am install-info-recursive install-man \
|
||||
install-recursive install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am installdirs-recursive \
|
||||
maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am
|
||||
mostlyclean-generic mostlyclean-recursive pdf pdf-am \
|
||||
pdf-recursive ps ps-am ps-recursive tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-info-recursive uninstall-recursive
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: callback.cpp,v 1.31 2006/02/12 23:28:21 harekiet Exp $ */
|
||||
/* $Id: callback.cpp,v 1.36 2007/01/08 19:45:38 qbix79 Exp $ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -26,7 +26,7 @@
|
||||
#include "mem.h"
|
||||
#include "cpu.h"
|
||||
|
||||
/* CallBack are located at 0xC800:0
|
||||
/* CallBack are located at 0xF100:0 (see CB_SEG in callback.h)
|
||||
And they are 16 bytes each and you can define them to behave in certain ways like a
|
||||
far return or and IRET
|
||||
*/
|
||||
@ -65,12 +65,12 @@ void CALLBACK_Idle(void) {
|
||||
Bit16u oldcs=SegValue(cs);
|
||||
Bit32u oldeip=reg_eip;
|
||||
SegSet16(cs,CB_SEG);
|
||||
reg_eip=call_idle<<4;
|
||||
reg_eip=call_idle*CB_SIZE;
|
||||
DOSBOX_RunMachine();
|
||||
reg_eip=oldeip;
|
||||
SegSet16(cs,oldcs);
|
||||
SETFLAGBIT(IF,oldIF);
|
||||
if (!CPU_CycleAuto && CPU_Cycles>0)
|
||||
if (!CPU_CycleAutoAdjust && CPU_Cycles>0)
|
||||
CPU_Cycles=0;
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ static Bitu stop_handler(void) {
|
||||
|
||||
void CALLBACK_RunRealFar(Bit16u seg,Bit16u off) {
|
||||
reg_sp-=4;
|
||||
mem_writew(SegPhys(ss)+reg_sp,call_stop<<4);
|
||||
mem_writew(SegPhys(ss)+reg_sp,call_stop*CB_SIZE);
|
||||
mem_writew(SegPhys(ss)+reg_sp+2,CB_SEG);
|
||||
Bit32u oldeip=reg_eip;
|
||||
Bit16u oldcs=SegValue(cs);
|
||||
@ -101,7 +101,7 @@ void CALLBACK_RunRealFar(Bit16u seg,Bit16u off) {
|
||||
void CALLBACK_RunRealInt(Bit8u intnum) {
|
||||
Bit32u oldeip=reg_eip;
|
||||
Bit16u oldcs=SegValue(cs);
|
||||
reg_eip=(CB_MAX*16)+(intnum*6);
|
||||
reg_eip=(CB_MAX*CB_SIZE)+(intnum*6);
|
||||
SegSet16(cs,CB_SEG);
|
||||
DOSBOX_RunMachine();
|
||||
reg_eip=oldeip;
|
||||
@ -133,75 +133,282 @@ const char* CALLBACK_GetDescription(Bitu nr) {
|
||||
return CallBack_Description[nr];
|
||||
};
|
||||
|
||||
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,const char* descr) {
|
||||
if (callback>=CB_MAX) return false;
|
||||
Bitu CALLBACK_SetupExtra(Bitu callback, Bitu type, PhysPt physAddress, bool use_cb=true) {
|
||||
if (callback>=CB_MAX)
|
||||
return 0;
|
||||
switch (type) {
|
||||
case CB_RETN:
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02, callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xC3); //A RETN Instruction
|
||||
return (use_cb?5:1);
|
||||
case CB_RETF:
|
||||
phys_writeb(CB_BASE+(callback<<4)+0,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(CB_BASE+(callback<<4)+1,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(CB_BASE+(callback<<4)+2,callback); //The immediate word
|
||||
phys_writeb(CB_BASE+(callback<<4)+4,(Bit8u)0xCB); //A RETF Instruction
|
||||
break;
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02, callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xCB); //A RETF Instruction
|
||||
return (use_cb?5:1);
|
||||
case CB_IRET:
|
||||
phys_writeb(CB_BASE+(callback<<4)+0,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(CB_BASE+(callback<<4)+1,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(CB_BASE+(callback<<4)+2,callback); //The immediate word
|
||||
phys_writeb(CB_BASE+(callback<<4)+4,(Bit8u)0xCF); //An IRET Instruction
|
||||
break;
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xCF); //An IRET Instruction
|
||||
return (use_cb?5:1);
|
||||
case CB_IRETD:
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x66); //An IRETD Instruction
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xCF);
|
||||
return (use_cb?6:2);
|
||||
case CB_IRET_STI:
|
||||
phys_writeb(CB_BASE+(callback<<4)+0,(Bit8u)0xFB); //STI
|
||||
phys_writeb(CB_BASE+(callback<<4)+1,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(CB_BASE+(callback<<4)+2,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(CB_BASE+(callback<<4)+3,callback); //The immediate word
|
||||
phys_writeb(CB_BASE+(callback<<4)+5,(Bit8u)0xCF); //An IRET Instruction
|
||||
break;
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFB); //STI
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x02,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x03, callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xCF); //An IRET Instruction
|
||||
return (use_cb?6:2);
|
||||
case CB_IRET_EOI_PIC1:
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xb0); // mov al, 0x20
|
||||
phys_writeb(physAddress+0x02,(Bit8u)0x20);
|
||||
phys_writeb(physAddress+0x03,(Bit8u)0xe6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x04,(Bit8u)0x20);
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x0b:0x07);
|
||||
case CB_IRQ0: // timer int8
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x52); // push dx
|
||||
phys_writeb(physAddress+0x02,(Bit8u)0x1e); // push ds
|
||||
phys_writew(physAddress+0x03,(Bit16u)0x1ccd); // int 1c
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0xfa); // cli
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0x1f); // pop ds
|
||||
phys_writeb(physAddress+0x07,(Bit8u)0x5a); // pop dx
|
||||
phys_writew(physAddress+0x08,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x0a,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x0c,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x0d,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x12:0x0e);
|
||||
case CB_IRQ1: // keyboard int9
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x60e4); // in al, 0x60
|
||||
phys_writew(physAddress+0x03,(Bit16u)0x4fb4); // mov ah, 0x4f
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0xf9); // stc
|
||||
phys_writew(physAddress+0x06,(Bit16u)0x15cd); // int 15
|
||||
if (use_cb) {
|
||||
phys_writew(physAddress+0x08,(Bit16u)0x0473); // jc skip
|
||||
phys_writeb(physAddress+0x0a,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x0b,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x0c,callback); //The immediate word
|
||||
// jump here to (skip):
|
||||
physAddress+=6;
|
||||
}
|
||||
phys_writeb(physAddress+0x08,(Bit8u)0xfa); // cli
|
||||
phys_writew(physAddress+0x09,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x0b,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x0d,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x0e,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x15:0x0f);
|
||||
case CB_IRQ9: // pic cascade interrupt
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x61b0); // mov al, 0x61
|
||||
phys_writew(physAddress+0x03,(Bit16u)0xa0e6); // out 0xa0, al
|
||||
phys_writew(physAddress+0x05,(Bit16u)0x0acd); // int a
|
||||
phys_writeb(physAddress+0x07,(Bit8u)0xfa); // cli
|
||||
phys_writeb(physAddress+0x08,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x09,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x0e:0x0a);
|
||||
case CB_IRQ12: // ps2 mouse int74
|
||||
if (!use_cb) E_Exit("int74 callback must implement a callback handler!");
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x1e); // push ds
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x06); // push es
|
||||
phys_writew(physAddress+0x02,(Bit16u)0x6066); // pushad
|
||||
phys_writeb(physAddress+0x04,(Bit8u)0xfb); // sti
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x07,callback); //The immediate word
|
||||
return 0x09;
|
||||
case CB_IRQ12_RET: // ps2 mouse int74 return
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xfa); // cli
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x03,(Bit16u)0xa0e6); // out 0xa0, al
|
||||
phys_writew(physAddress+0x05,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writew(physAddress+0x07,(Bit16u)0x6166); // popad
|
||||
phys_writeb(physAddress+0x09,(Bit8u)0x07); // pop es
|
||||
phys_writeb(physAddress+0x0a,(Bit8u)0x1f); // pop ds
|
||||
phys_writeb(physAddress+0x0b,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x10:0x0c);
|
||||
case CB_IRQ6_PCJR: // pcjr keyboard interrupt
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x60e4); // in al, 0x60
|
||||
phys_writew(physAddress+0x03,(Bit16u)0xe03c); // cmp al, 0xe0
|
||||
if (use_cb) {
|
||||
phys_writew(physAddress+0x05,(Bit16u)0x0674); // je skip
|
||||
phys_writeb(physAddress+0x07,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x08,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x09,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
} else {
|
||||
phys_writew(physAddress+0x05,(Bit16u)0x0274); // je skip
|
||||
}
|
||||
phys_writew(physAddress+0x07,(Bit16u)0x09cd); // int 9
|
||||
// jump here to (skip):
|
||||
phys_writeb(physAddress+0x09,(Bit8u)0xfa); // cli
|
||||
phys_writew(physAddress+0x0a,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x0c,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x0e,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x0f,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x14:0x10);
|
||||
case CB_INT16:
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFB); //STI
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x02,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x03, callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xCF); //An IRET Instruction
|
||||
for (Bitu i=0;i<=0x0b;i++) phys_writeb(physAddress+0x02+i,0x90);
|
||||
phys_writew(physAddress+0x0e,(Bit16u)0xedeb); //jmp callback
|
||||
return (use_cb?0x10:0x0c);
|
||||
case CB_INT29: // fast console output
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x0eb4); // mov ah, 0x0e
|
||||
phys_writew(physAddress+0x03,(Bit16u)0x10cd); // int 10
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x0b:0x07);
|
||||
case CB_HOOKABLE:
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xEB); //jump near
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x03); //offset
|
||||
phys_writeb(physAddress+0x02,(Bit8u)0x90); //NOP
|
||||
phys_writeb(physAddress+0x03,(Bit8u)0x90); //NOP
|
||||
phys_writeb(physAddress+0x04,(Bit8u)0x90); //NOP
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x07,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x05,(Bit8u)0xCB); //A RETF Instruction
|
||||
return (use_cb?0x0a:0x06);
|
||||
case CB_TDE_IRET: // TandyDAC end transfer
|
||||
if (use_cb) {
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x02,callback); //The immediate word
|
||||
physAddress+=4;
|
||||
}
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x50); // push ax
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0xb8); // mov ax, 0x91fb
|
||||
phys_writew(physAddress+0x02,(Bit16u)0x91fb);
|
||||
phys_writew(physAddress+0x04,(Bit16u)0x15cd); // int 15
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0xfa); // cli
|
||||
phys_writew(physAddress+0x07,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x09,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x0b,(Bit8u)0x58); // pop ax
|
||||
phys_writeb(physAddress+0x0c,(Bit8u)0xcf); //An IRET Instruction
|
||||
return (use_cb?0x11:0x0d);
|
||||
/* case CB_IPXESR: // IPX ESR
|
||||
if (!use_cb) E_Exit("ipx esr must implement a callback handler!");
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0x1e); // push ds
|
||||
phys_writeb(physAddress+0x01,(Bit8u)0x06); // push es
|
||||
phys_writew(physAddress+0x02,(Bit16u)0xa00f); // push fs
|
||||
phys_writew(physAddress+0x04,(Bit16u)0xa80f); // push gs
|
||||
phys_writeb(physAddress+0x06,(Bit8u)0x60); // pusha
|
||||
phys_writeb(physAddress+0x07,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+0x08,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+0x09,callback); //The immediate word
|
||||
phys_writeb(physAddress+0x0b,(Bit8u)0xCB); //A RETF Instruction
|
||||
return 0x0c;
|
||||
case CB_IPXESR_RET: // IPX ESR return
|
||||
if (use_cb) E_Exit("ipx esr return must not implement a callback handler!");
|
||||
phys_writeb(physAddress+0x00,(Bit8u)0xfa); // cli
|
||||
phys_writew(physAddress+0x01,(Bit16u)0x20b0); // mov al, 0x20
|
||||
phys_writew(physAddress+0x03,(Bit16u)0xa0e6); // out 0xa0, al
|
||||
phys_writew(physAddress+0x05,(Bit16u)0x20e6); // out 0x20, al
|
||||
phys_writeb(physAddress+0x07,(Bit8u)0x61); // popa
|
||||
phys_writew(physAddress+0x08,(Bit16u)0xA90F); // pop gs
|
||||
phys_writew(physAddress+0x0a,(Bit16u)0xA10F); // pop fs
|
||||
phys_writeb(physAddress+0x0c,(Bit8u)0x07); // pop es
|
||||
phys_writeb(physAddress+0x0d,(Bit8u)0x1f); // pop ds
|
||||
phys_writeb(physAddress+0x0e,(Bit8u)0xcf); //An IRET Instruction
|
||||
return 0x0f; */
|
||||
default:
|
||||
E_Exit("CALLBACK:Setup:Illegal type %d",type);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,const char* descr) {
|
||||
if (callback>=CB_MAX) return false;
|
||||
CALLBACK_SetupExtra(callback,type,CALLBACK_PhysPointer(callback)+0,(handler!=NULL));
|
||||
CallBack_Handlers[callback]=handler;
|
||||
CALLBACK_SetDescription(callback,descr);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CALLBACK_RemoveSetup(Bitu callback) {
|
||||
for (Bitu i = 0;i < 16;i++) {
|
||||
phys_writeb(CB_BASE+(callback<<4)+i ,(Bit8u) 0x00);
|
||||
Bitu CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,PhysPt addr,const char* descr) {
|
||||
if (callback>=CB_MAX) return 0;
|
||||
Bitu csize=CALLBACK_SetupExtra(callback,type,addr,(handler!=NULL));
|
||||
if (csize>0) {
|
||||
CallBack_Handlers[callback]=handler;
|
||||
CALLBACK_SetDescription(callback,descr);
|
||||
}
|
||||
return csize;
|
||||
}
|
||||
|
||||
Bitu CALLBACK_SetupExtra(Bitu callback, Bitu type, PhysPt physAddress) {
|
||||
if (callback>=CB_MAX)
|
||||
return 0;
|
||||
switch (type) {
|
||||
case CB_RETN:
|
||||
phys_writeb(physAddress+0,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+1,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+2, callback); //The immediate word
|
||||
phys_writeb(physAddress+4,(Bit8u)0xC3); //A RETN Instruction
|
||||
return 5;
|
||||
case CB_RETF:
|
||||
phys_writeb(physAddress+0,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+1,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+2, callback); //The immediate word
|
||||
phys_writeb(physAddress+4,(Bit8u)0xCB); //A RETF Instruction
|
||||
return 5;
|
||||
case CB_IRET:
|
||||
phys_writeb(physAddress+0,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+1,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+2,callback); //The immediate word
|
||||
phys_writeb(physAddress+4,(Bit8u)0xCF); //An IRET Instruction
|
||||
return 5;
|
||||
case CB_IRET_STI:
|
||||
phys_writeb(physAddress+0,(Bit8u)0xFB); //STI
|
||||
phys_writeb(physAddress+1,(Bit8u)0xFE); //GRP 4
|
||||
phys_writeb(physAddress+2,(Bit8u)0x38); //Extra Callback instruction
|
||||
phys_writew(physAddress+3, callback); //The immediate word
|
||||
phys_writeb(physAddress+5,(Bit8u)0xCF); //An IRET Instruction
|
||||
return 6;
|
||||
default:
|
||||
E_Exit("CALLBACK:Setup:Illegal type %d",type);
|
||||
void CALLBACK_RemoveSetup(Bitu callback) {
|
||||
for (Bitu i = 0;i < 16;i++) {
|
||||
phys_writeb(CALLBACK_PhysPointer(callback)+i ,(Bit8u) 0x00);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
CALLBACK_HandlerObject::~CALLBACK_HandlerObject(){
|
||||
@ -233,6 +440,15 @@ void CALLBACK_HandlerObject::Install(CallBack_Handler handler,Bitu type,const ch
|
||||
CALLBACK_Setup(m_callback,handler,type,description);
|
||||
} else E_Exit("Allready installed");
|
||||
}
|
||||
void CALLBACK_HandlerObject::Install(CallBack_Handler handler,Bitu type,PhysPt addr,const char* description){
|
||||
if(!installed) {
|
||||
installed=true;
|
||||
m_type=SETUP;
|
||||
m_callback=CALLBACK_Allocate();
|
||||
CALLBACK_Setup(m_callback,handler,type,addr,description);
|
||||
} else E_Exit("Allready installed");
|
||||
}
|
||||
|
||||
void CALLBACK_HandlerObject::Allocate(CallBack_Handler handler,const char* description) {
|
||||
if(!installed) {
|
||||
installed=true;
|
||||
@ -256,21 +472,23 @@ void CALLBACK_Init(Section* sec) {
|
||||
for (i=0;i<CB_MAX;i++) {
|
||||
CallBack_Handlers[i]=&illegal_handler;
|
||||
}
|
||||
|
||||
/* Setup the Stop Handler */
|
||||
call_stop=CALLBACK_Allocate();
|
||||
CallBack_Handlers[call_stop]=stop_handler;
|
||||
CALLBACK_SetDescription(call_stop,"stop");
|
||||
phys_writeb(CB_BASE+(call_stop<<4)+0,0xFE);
|
||||
phys_writeb(CB_BASE+(call_stop<<4)+1,0x38);
|
||||
phys_writew(CB_BASE+(call_stop<<4)+2,call_stop);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_stop)+0,0xFE);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_stop)+1,0x38);
|
||||
phys_writew(CALLBACK_PhysPointer(call_stop)+2,call_stop);
|
||||
|
||||
/* Setup the idle handler */
|
||||
call_idle=CALLBACK_Allocate();
|
||||
CallBack_Handlers[call_idle]=stop_handler;
|
||||
CALLBACK_SetDescription(call_idle,"idle");
|
||||
for (i=0;i<=11;i++) phys_writeb(CB_BASE+(call_idle<<4)+i,0x90);
|
||||
phys_writeb(CB_BASE+(call_idle<<4)+12,0xFE);
|
||||
phys_writeb(CB_BASE+(call_idle<<4)+13,0x38);
|
||||
phys_writew(CB_BASE+(call_idle<<4)+14,call_idle);
|
||||
for (i=0;i<=11;i++) phys_writeb(CALLBACK_PhysPointer(call_idle)+i,0x90);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_idle)+12,0xFE);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_idle)+13,0x38);
|
||||
phys_writew(CALLBACK_PhysPointer(call_idle)+14,call_idle);
|
||||
|
||||
/* Setup all Interrupt to point to the default handler */
|
||||
call_default=CALLBACK_Allocate();
|
||||
@ -281,7 +499,7 @@ void CALLBACK_Init(Section* sec) {
|
||||
real_writed(0,i*4,CALLBACK_RealPointer(call_default));
|
||||
}
|
||||
/* Setup block of 0xCD 0xxx instructions */
|
||||
PhysPt rint_base=CB_BASE+CB_MAX*16;
|
||||
PhysPt rint_base=(CB_SEG << 4)+CB_MAX*CB_SIZE;
|
||||
for (i=0;i<=0xff;i++) {
|
||||
phys_writeb(rint_base,0xCD);
|
||||
phys_writeb(rint_base+1,i);
|
||||
@ -291,25 +509,29 @@ void CALLBACK_Init(Section* sec) {
|
||||
rint_base+=6;
|
||||
|
||||
}
|
||||
// setup a few interrupt handlers that point to bios IRETs by default
|
||||
real_writed(0,0x66*4,CALLBACK_RealPointer(call_default)); //war2d
|
||||
real_writed(0,0x67*4,CALLBACK_RealPointer(call_default));
|
||||
real_writed(0,0x68*4,CALLBACK_RealPointer(call_default));
|
||||
real_writed(0,0x5c*4,CALLBACK_RealPointer(call_default)); //Network stuff
|
||||
//real_writed(0,0xf*4,0); some games don't like it
|
||||
|
||||
call_priv_io=CALLBACK_Allocate();
|
||||
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x00,(Bit8u)0xec); // in al, dx
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x01,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x02,(Bit8u)0xed); // in ax, dx
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x03,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x04,(Bit8u)0x66); // in eax, dx
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x05,(Bit8u)0xed);
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x06,(Bit8u)0xcb); // retf
|
||||
// virtualizable in-out opcodes
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x00,(Bit8u)0xec); // in al, dx
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x01,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x02,(Bit8u)0xed); // in ax, dx
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x03,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x04,(Bit8u)0x66); // in eax, dx
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x05,(Bit8u)0xed);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x06,(Bit8u)0xcb); // retf
|
||||
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x08,(Bit8u)0xee); // out dx, al
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x09,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x0a,(Bit8u)0xef); // out dx, ax
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x0b,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x0c,(Bit8u)0x66); // out dx, eax
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x0d,(Bit8u)0xef);
|
||||
phys_writeb(CB_BASE+(call_priv_io<<4)+0x0e,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x08,(Bit8u)0xee); // out dx, al
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x09,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x0a,(Bit8u)0xef); // out dx, ax
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x0b,(Bit8u)0xcb); // retf
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x0c,(Bit8u)0x66); // out dx, eax
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x0d,(Bit8u)0xef);
|
||||
phys_writeb(CALLBACK_PhysPointer(call_priv_io)+0x0e,(Bit8u)0xcb); // retf
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -20,8 +20,6 @@
|
||||
|
||||
#if (C_DYNAMIC_X86)
|
||||
|
||||
#define CHECKED_MEMORY_ACCESS
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
@ -45,14 +43,11 @@
|
||||
#include "debug.h"
|
||||
#include "paging.h"
|
||||
#include "inout.h"
|
||||
#include "fpu.h"
|
||||
|
||||
#ifdef CHECKED_MEMORY_ACCESS
|
||||
#define CACHE_MAXSIZE (4096*2)
|
||||
#else
|
||||
#define CACHE_MAXSIZE (4096)
|
||||
#endif
|
||||
#define CACHE_PAGES (128*8)
|
||||
#define CACHE_TOTAL (CACHE_PAGES*4096)
|
||||
#define CACHE_TOTAL (1024*1024*8)
|
||||
#define CACHE_PAGES (512)
|
||||
#define CACHE_BLOCKS (64*1024)
|
||||
#define CACHE_ALIGN (16)
|
||||
#define DYN_HASH_SHIFT (4)
|
||||
@ -73,7 +68,7 @@ enum {
|
||||
G_EAX,G_ECX,G_EDX,G_EBX,
|
||||
G_ESP,G_EBP,G_ESI,G_EDI,
|
||||
G_ES,G_CS,G_SS,G_DS,G_FS,G_GS,
|
||||
G_FLAGS,G_SMASK,G_EIP,
|
||||
G_FLAGS,G_NEWESP,G_EIP,
|
||||
G_EA,G_STACK,G_CYCLES,
|
||||
G_TMPB,G_TMPW,G_SHIFT,
|
||||
G_EXIT,
|
||||
@ -118,6 +113,7 @@ enum BlockReturn {
|
||||
#if (C_DEBUG)
|
||||
BR_OpcodeFull,
|
||||
#endif
|
||||
BR_Iret,
|
||||
BR_CallBack,
|
||||
BR_SMCBlock
|
||||
};
|
||||
@ -155,7 +151,7 @@ static DynReg DynRegs[G_MAX];
|
||||
#define DREG(_WHICH_) &DynRegs[G_ ## _WHICH_ ]
|
||||
|
||||
static struct {
|
||||
Bitu ea,tmpb,tmpd,stack,shift;
|
||||
Bitu ea,tmpb,tmpd,stack,shift,newesp;
|
||||
} extra_regs;
|
||||
|
||||
static void IllegalOption(const char* msg) {
|
||||
@ -165,9 +161,19 @@ static void IllegalOption(const char* msg) {
|
||||
#include "core_dyn_x86/cache.h"
|
||||
|
||||
static struct {
|
||||
Bitu callback,readdata;
|
||||
Bitu callback;
|
||||
Bit32u readdata;
|
||||
} core_dyn;
|
||||
|
||||
static struct {
|
||||
Bit32u state[32];
|
||||
FPU_P_Reg temp,temp2;
|
||||
Bit32u dh_fpu_enabled;
|
||||
Bit32u state_used;
|
||||
Bit32u cw,host_cw;
|
||||
Bit8u temp_state[128];
|
||||
} dyn_dh_fpu;
|
||||
|
||||
|
||||
#include "core_dyn_x86/risc_x86.h"
|
||||
|
||||
@ -224,6 +230,30 @@ static void dyn_restoreregister(DynReg * src_reg, DynReg * dst_reg) {
|
||||
|
||||
#include "core_dyn_x86/decoder.h"
|
||||
|
||||
#if defined (_MSC_VER)
|
||||
#define DH_FPU_SAVE_REINIT \
|
||||
{ \
|
||||
__asm { \
|
||||
__asm fnsave dyn_dh_fpu.state[0] \
|
||||
} \
|
||||
dyn_dh_fpu.state_used=false; \
|
||||
dyn_dh_fpu.state[0]|=0x3f; \
|
||||
}
|
||||
#else
|
||||
#define DH_FPU_SAVE_REINIT \
|
||||
{ \
|
||||
__asm__ volatile ( \
|
||||
"fnsave %0 \n" \
|
||||
: \
|
||||
: "m" (dyn_dh_fpu.state[0]) \
|
||||
: "memory" \
|
||||
); \
|
||||
dyn_dh_fpu.state_used=false; \
|
||||
dyn_dh_fpu.state[0]|=0x3f; \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Bits CPU_Core_Dyn_X86_Run(void) {
|
||||
/* Determine the linear address of CS:EIP */
|
||||
restart_core:
|
||||
@ -232,17 +262,49 @@ restart_core:
|
||||
#if C_HEAVY_DEBUG
|
||||
if (DEBUG_HeavyIsBreakpoint()) return debugCallback;
|
||||
#endif
|
||||
CodePageHandler * chandler=MakeCodePage(ip_page);
|
||||
if (!chandler) return CPU_Core_Normal_Run();
|
||||
CodePageHandler * chandler=0;
|
||||
if (GCC_UNLIKELY(MakeCodePage(ip_page,chandler))) {
|
||||
CPU_Exception(cpu.exception.which,cpu.exception.error);
|
||||
goto restart_core;
|
||||
}
|
||||
if (!chandler) {
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
return CPU_Core_Normal_Run();
|
||||
}
|
||||
/* Find correct Dynamic Block to run */
|
||||
CacheBlock * block=chandler->FindCacheBlock(ip_point&4095);
|
||||
if (!block) {
|
||||
block=CreateCacheBlock(chandler,ip_point,32);
|
||||
if (!chandler->invalidation_map || (chandler->invalidation_map[ip_point&4095]<4)) {
|
||||
block=CreateCacheBlock(chandler,ip_point,32);
|
||||
} else {
|
||||
Bitu old_cycles=CPU_Cycles;
|
||||
CPU_Cycles=1;
|
||||
Bits nc_retcode=CPU_Core_Normal_Run();
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
if (!nc_retcode) {
|
||||
CPU_Cycles=old_cycles-1;
|
||||
goto restart_core;
|
||||
}
|
||||
CPU_CycleLeft+=old_cycles;
|
||||
return nc_retcode;
|
||||
}
|
||||
}
|
||||
run_block:
|
||||
cache.block.running=0;
|
||||
BlockReturn ret=gen_runcode(block->cache.start);
|
||||
switch (ret) {
|
||||
case BR_Iret:
|
||||
#if C_HEAVY_DEBUG
|
||||
if (DEBUG_HeavyIsBreakpoint()) {
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
return debugCallback;
|
||||
}
|
||||
#endif
|
||||
if (!GETFLAG(TF)) goto restart_core;
|
||||
cpudecoder=CPU_Core_Dyn_X86_Trap_Run;
|
||||
if (!dyn_dh_fpu.state_used) return CBRET_NONE;
|
||||
DH_FPU_SAVE_REINIT
|
||||
return CBRET_NONE;
|
||||
case BR_Normal:
|
||||
/* Maybe check if we staying in the same page? */
|
||||
#if C_HEAVY_DEBUG
|
||||
@ -253,8 +315,12 @@ run_block:
|
||||
#if C_HEAVY_DEBUG
|
||||
if (DEBUG_HeavyIsBreakpoint()) return debugCallback;
|
||||
#endif
|
||||
if (!dyn_dh_fpu.state_used) return CBRET_NONE;
|
||||
DH_FPU_SAVE_REINIT
|
||||
return CBRET_NONE;
|
||||
case BR_CallBack:
|
||||
if (!dyn_dh_fpu.state_used) return core_dyn.callback;
|
||||
DH_FPU_SAVE_REINIT
|
||||
return core_dyn.callback;
|
||||
case BR_SMCBlock:
|
||||
// LOG_MSG("selfmodification of running block at %x:%x",SegValue(cs),reg_eip);
|
||||
@ -263,11 +329,13 @@ run_block:
|
||||
case BR_Opcode:
|
||||
CPU_CycleLeft+=CPU_Cycles;
|
||||
CPU_Cycles=1;
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
return CPU_Core_Normal_Run();
|
||||
#if (C_DEBUG)
|
||||
case BR_OpcodeFull:
|
||||
CPU_CycleLeft+=CPU_Cycles;
|
||||
CPU_Cycles=1;
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
return CPU_Core_Full_Run();
|
||||
#endif
|
||||
case BR_Link1:
|
||||
@ -285,7 +353,21 @@ run_block:
|
||||
}
|
||||
goto restart_core;
|
||||
}
|
||||
return 0;
|
||||
if (dyn_dh_fpu.state_used) DH_FPU_SAVE_REINIT
|
||||
return CBRET_NONE;
|
||||
}
|
||||
|
||||
Bits CPU_Core_Dyn_X86_Trap_Run(void) {
|
||||
Bits oldCycles = CPU_Cycles;
|
||||
CPU_Cycles = 1;
|
||||
cpu.trap_skip = false;
|
||||
|
||||
Bits ret=CPU_Core_Normal_Run();
|
||||
if (!cpu.trap_skip) CPU_HW_Interrupt(1);
|
||||
CPU_Cycles = oldCycles-1;
|
||||
cpudecoder = &CPU_Core_Dyn_X86_Run;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CPU_Core_Dyn_X86_Init(void) {
|
||||
@ -326,8 +408,8 @@ void CPU_Core_Dyn_X86_Init(void) {
|
||||
DynRegs[G_FLAGS].data=®_flags;
|
||||
DynRegs[G_FLAGS].flags=DYNFLG_LOAD|DYNFLG_SAVE;
|
||||
|
||||
DynRegs[G_SMASK].data=&cpu.stack.mask;
|
||||
DynRegs[G_SMASK].flags=DYNFLG_LOAD|DYNFLG_SAVE;
|
||||
DynRegs[G_NEWESP].data=&extra_regs.newesp;
|
||||
DynRegs[G_NEWESP].flags=0;
|
||||
|
||||
DynRegs[G_EIP].data=®_eip;
|
||||
DynRegs[G_EIP].flags=DYNFLG_LOAD|DYNFLG_SAVE;
|
||||
@ -348,6 +430,28 @@ void CPU_Core_Dyn_X86_Init(void) {
|
||||
DynRegs[G_EXIT].flags=DYNFLG_HAS16;
|
||||
/* Init the generator */
|
||||
gen_init();
|
||||
|
||||
/* Init the fpu state */
|
||||
dyn_dh_fpu.dh_fpu_enabled=true;
|
||||
dyn_dh_fpu.state_used=false;
|
||||
dyn_dh_fpu.cw=0x37f;
|
||||
#if defined (_MSC_VER)
|
||||
__asm {
|
||||
__asm finit
|
||||
__asm fsave dyn_dh_fpu.state[0]
|
||||
__asm fstcw dyn_dh_fpu.host_cw
|
||||
}
|
||||
#else
|
||||
__asm__ volatile (
|
||||
"finit \n"
|
||||
"fsave %0 \n"
|
||||
"fstcw %1 \n"
|
||||
:
|
||||
: "m" (dyn_dh_fpu.state[0]), "m" (dyn_dh_fpu.host_cw)
|
||||
: "memory"
|
||||
);
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -356,4 +460,12 @@ void CPU_Core_Dyn_X86_Cache_Init(bool enable_cache) {
|
||||
cache_init(enable_cache);
|
||||
}
|
||||
|
||||
void CPU_Core_Dyn_X86_Cache_Close(void) {
|
||||
cache_close();
|
||||
}
|
||||
|
||||
void CPU_Core_Dyn_X86_SetFPUMode(bool dh_fpu) {
|
||||
dyn_dh_fpu.dh_fpu_enabled=dh_fpu;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1 +1,2 @@
|
||||
noinst_HEADERS = cache.h helpers.h decoder.h risc_x86.h string.h
|
||||
noinst_HEADERS = cache.h helpers.h decoder.h risc_x86.h string.h \
|
||||
dyn_fpu.h dyn_fpu_dh.h
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -21,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -34,26 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/cpu/core_dyn_x86
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -80,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -110,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -120,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -129,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -154,41 +138,36 @@ target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
noinst_HEADERS = cache.h helpers.h decoder.h risc_x86.h string.h
|
||||
noinst_HEADERS = cache.h helpers.h decoder.h risc_x86.h string.h \
|
||||
dyn_fpu.h dyn_fpu_dh.h
|
||||
|
||||
subdir = src/cpu/core_dyn_x86
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.in Makefile.am
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/cpu/core_dyn_x86/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/cpu/core_dyn_x86/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu src/cpu/core_dyn_x86/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -197,7 +176,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -209,11 +187,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -236,6 +213,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -249,7 +230,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -267,6 +248,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -287,7 +269,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -304,8 +286,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -338,14 +318,14 @@ ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
ctags distclean distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic ctags \
|
||||
distclean distclean-generic distclean-tags distdir dvi dvi-am \
|
||||
info info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
|
||||
uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
@ -15,6 +15,9 @@ public:
|
||||
Bit8u * start; //Where in the cache are we
|
||||
Bitu size;
|
||||
CacheBlock * next;
|
||||
Bit8u * wmapmask;
|
||||
Bit16u maskstart;
|
||||
Bit16u masklen;
|
||||
} cache;
|
||||
struct {
|
||||
Bitu index;
|
||||
@ -28,7 +31,6 @@ public:
|
||||
CacheBlock * crossblock;
|
||||
};
|
||||
|
||||
class CacheBlock;
|
||||
static struct {
|
||||
struct {
|
||||
CacheBlock * first;
|
||||
@ -42,17 +44,13 @@ static struct {
|
||||
CodePageHandler * last_page;
|
||||
} cache;
|
||||
|
||||
#if (C_HAVE_MPROTECT)
|
||||
static Bit8u cache_code_link_blocks[2][16] GCC_ATTRIBUTE(aligned(PAGESIZE));
|
||||
#else
|
||||
static Bit8u cache_code_link_blocks[2][16];
|
||||
#endif
|
||||
|
||||
static CacheBlock link_blocks[2];
|
||||
|
||||
class CodePageHandler :public PageHandler {
|
||||
class CodePageHandler : public PageHandler {
|
||||
public:
|
||||
CodePageHandler() {}
|
||||
CodePageHandler() {
|
||||
invalidation_map=NULL;
|
||||
}
|
||||
void SetupAt(Bitu _phys_page,PageHandler * _old_pagehandler) {
|
||||
phys_page=_phys_page;
|
||||
old_pagehandler=_old_pagehandler;
|
||||
@ -62,6 +60,10 @@ public:
|
||||
active_count=16;
|
||||
memset(&hash_map,0,sizeof(hash_map));
|
||||
memset(&write_map,0,sizeof(write_map));
|
||||
if (invalidation_map!=NULL) {
|
||||
free(invalidation_map);
|
||||
invalidation_map=NULL;
|
||||
}
|
||||
}
|
||||
bool InvalidateRange(Bitu start,Bitu end) {
|
||||
Bits index=1+(start>>DYN_HASH_SHIFT);
|
||||
@ -87,69 +89,114 @@ public:
|
||||
}
|
||||
void writeb(PhysPt addr,Bitu val){
|
||||
addr&=4095;
|
||||
if (host_readb(hostmem+addr)==(Bit8u)val) return;
|
||||
host_writeb(hostmem+addr,val);
|
||||
if (!*(Bit8u*)&write_map[addr]) {
|
||||
if (active_blocks) return;
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
} else InvalidateRange(addr,addr);
|
||||
return;
|
||||
} else if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
invalidation_map[addr]++;
|
||||
InvalidateRange(addr,addr);
|
||||
}
|
||||
void writew(PhysPt addr,Bitu val){
|
||||
addr&=4095;
|
||||
if (host_readw(hostmem+addr)==(Bit16u)val) return;
|
||||
host_writew(hostmem+addr,val);
|
||||
if (!*(Bit16u*)&write_map[addr]) {
|
||||
if (active_blocks) return;
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
} else InvalidateRange(addr,addr+1);
|
||||
return;
|
||||
} else if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
(*(Bit16u*)&invalidation_map[addr])+=0x101;
|
||||
InvalidateRange(addr,addr+1);
|
||||
}
|
||||
void writed(PhysPt addr,Bitu val){
|
||||
addr&=4095;
|
||||
if (host_readd(hostmem+addr)==(Bit32u)val) return;
|
||||
host_writed(hostmem+addr,val);
|
||||
if (!*(Bit32u*)&write_map[addr]) {
|
||||
if (active_blocks) return;
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
} else InvalidateRange(addr,addr+3);
|
||||
return;
|
||||
} else if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
(*(Bit32u*)&invalidation_map[addr])+=0x1010101;
|
||||
InvalidateRange(addr,addr+3);
|
||||
}
|
||||
bool writeb_checked(PhysPt addr,Bitu val) {
|
||||
addr&=4095;
|
||||
if (host_readb(hostmem+addr)==(Bit8u)val) return false;
|
||||
if (!*(Bit8u*)&write_map[addr]) {
|
||||
if (!active_blocks) {
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
}
|
||||
} else if (InvalidateRange(addr,addr)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
} else {
|
||||
if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
invalidation_map[addr]++;
|
||||
if (InvalidateRange(addr,addr)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
host_writeb(hostmem+addr,val);
|
||||
return false;
|
||||
}
|
||||
bool writew_checked(PhysPt addr,Bitu val) {
|
||||
addr&=4095;
|
||||
if (host_readw(hostmem+addr)==(Bit16u)val) return false;
|
||||
if (!*(Bit16u*)&write_map[addr]) {
|
||||
if (!active_blocks) {
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
}
|
||||
} else if (InvalidateRange(addr,addr+1)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
} else {
|
||||
if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
(*(Bit16u*)&invalidation_map[addr])+=0x101;
|
||||
if (InvalidateRange(addr,addr+1)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
host_writew(hostmem+addr,val);
|
||||
return false;
|
||||
}
|
||||
bool writed_checked(PhysPt addr,Bitu val) {
|
||||
addr&=4095;
|
||||
if (host_readd(hostmem+addr)==(Bit32u)val) return false;
|
||||
if (!*(Bit32u*)&write_map[addr]) {
|
||||
if (!active_blocks) {
|
||||
active_count--;
|
||||
if (!active_count) Release();
|
||||
}
|
||||
} else if (InvalidateRange(addr,addr+3)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
} else {
|
||||
if (!invalidation_map) {
|
||||
invalidation_map=(Bit8u*)malloc(4096);
|
||||
memset(invalidation_map,0,4096);
|
||||
}
|
||||
(*(Bit32u*)&invalidation_map[addr])+=0x1010101;
|
||||
if (InvalidateRange(addr,addr+3)) {
|
||||
cpu.exception.which=SMC_CURRENT_BLOCK;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
host_writed(hostmem+addr,val);
|
||||
return false;
|
||||
@ -178,8 +225,22 @@ public:
|
||||
//Will crash if a block isn't found, which should never happen.
|
||||
}
|
||||
*where=block->hash.next;
|
||||
for (Bitu i=block->page.start;i<=block->page.end;i++) {
|
||||
if (write_map[i]) write_map[i]--;
|
||||
if (GCC_UNLIKELY(block->cache.wmapmask!=NULL)) {
|
||||
for (Bitu i=block->page.start;i<block->cache.maskstart;i++) {
|
||||
if (write_map[i]) write_map[i]--;
|
||||
}
|
||||
Bitu maskct=0;
|
||||
for (Bitu i=block->cache.maskstart;i<=block->page.end;i++,maskct++) {
|
||||
if (write_map[i]) {
|
||||
if ((maskct>=block->cache.masklen) || (!block->cache.wmapmask[maskct])) write_map[i]--;
|
||||
}
|
||||
}
|
||||
free(block->cache.wmapmask);
|
||||
block->cache.wmapmask=NULL;
|
||||
} else {
|
||||
for (Bitu i=block->page.start;i<=block->page.end;i++) {
|
||||
if (write_map[i]) write_map[i]--;
|
||||
}
|
||||
}
|
||||
}
|
||||
void Release(void) {
|
||||
@ -222,6 +283,7 @@ public:
|
||||
}
|
||||
public:
|
||||
Bit8u write_map[4096];
|
||||
Bit8u * invalidation_map;
|
||||
CodePageHandler * next, * prev;
|
||||
private:
|
||||
PageHandler * old_pagehandler;
|
||||
@ -233,36 +295,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
static CodePageHandler * MakeCodePage(Bitu lin_page) {
|
||||
mem_readb(lin_page << 12); //Ensure page contains memory
|
||||
PageHandler * handler=paging.tlb.handler[lin_page];
|
||||
if (handler->flags & PFLAG_HASCODE) return ( CodePageHandler *)handler;
|
||||
if (handler->flags & PFLAG_NOCODE) {
|
||||
LOG_MSG("DYNX86:Can't run code in this page");
|
||||
return 0;
|
||||
}
|
||||
Bitu phys_page=lin_page;
|
||||
if (!PAGING_MakePhysPage(phys_page)) {
|
||||
LOG_MSG("DYNX86:Can't find physpage");
|
||||
return 0;
|
||||
}
|
||||
/* Find a free CodePage */
|
||||
if (!cache.free_pages) {
|
||||
cache.used_pages->ClearRelease();
|
||||
}
|
||||
CodePageHandler * cpagehandler=cache.free_pages;
|
||||
cache.free_pages=cache.free_pages->next;
|
||||
cpagehandler->prev=cache.last_page;
|
||||
cpagehandler->next=0;
|
||||
if (cache.last_page) cache.last_page->next=cpagehandler;
|
||||
cache.last_page=cpagehandler;
|
||||
if (!cache.used_pages) cache.used_pages=cpagehandler;
|
||||
cpagehandler->SetupAt(phys_page,handler);
|
||||
MEM_SetPageHandler(phys_page,1,cpagehandler);
|
||||
PAGING_UnlinkPages(lin_page,1);
|
||||
return cpagehandler;
|
||||
}
|
||||
|
||||
static INLINE void cache_addunsedblock(CacheBlock * block) {
|
||||
block->cache.next=cache.block.free;
|
||||
cache.block.free=block;
|
||||
@ -309,6 +341,10 @@ void CacheBlock::Clear(void) {
|
||||
page.handler->DelCacheBlock(this);
|
||||
page.handler=0;
|
||||
}
|
||||
if (cache.wmapmask){
|
||||
free(cache.wmapmask);
|
||||
cache.wmapmask=NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -390,19 +426,21 @@ static INLINE void cache_addd(Bit32u val) {
|
||||
|
||||
static void gen_return(BlockReturn retcode);
|
||||
|
||||
static Bit8u * cache_code_start_ptr=NULL;
|
||||
static Bit8u * cache_code=NULL;
|
||||
static Bit8u * cache_code_link_blocks=NULL;
|
||||
static CacheBlock * cache_blocks=NULL;
|
||||
|
||||
/* Define temporary pagesize so the MPROTECT case and the regular case share as much code as possible */
|
||||
#if (C_HAVE_MPROTECT)
|
||||
#define PAGESIZE_TEMP PAGESIZE
|
||||
#else
|
||||
#define PAGESIZE_TEMP 1
|
||||
#define PAGESIZE_TEMP 4096
|
||||
#endif
|
||||
|
||||
static bool cache_initialized = false;
|
||||
|
||||
static void cache_init(bool enable) {
|
||||
static bool cache_initialized = false;
|
||||
Bits i;
|
||||
if (enable) {
|
||||
if (cache_initialized) return;
|
||||
@ -418,16 +456,17 @@ static void cache_init(bool enable) {
|
||||
cache_blocks[i].cache.next=&cache_blocks[i+1];
|
||||
}
|
||||
}
|
||||
if (cache_code_start_ptr==NULL) {
|
||||
cache_code_start_ptr=(Bit8u*)malloc(CACHE_TOTAL+CACHE_MAXSIZE+PAGESIZE_TEMP-1+PAGESIZE_TEMP);
|
||||
if(!cache_code_start_ptr) E_Exit("Allocating dynamic cache failed");
|
||||
|
||||
cache_code=(Bit8u*)(((int)cache_code_start_ptr + PAGESIZE_TEMP-1) & ~(PAGESIZE_TEMP-1)); //MEM LEAK. store old pointer if you want to free it.
|
||||
|
||||
cache_code_link_blocks=cache_code;
|
||||
cache_code+=PAGESIZE_TEMP;
|
||||
|
||||
#if (C_HAVE_MPROTECT)
|
||||
if(mprotect(cache_code_link_blocks,sizeof(cache_code_link_blocks),PROT_WRITE|PROT_READ|PROT_EXEC))
|
||||
LOG_MSG("Setting excute permission on cache code link blocks has failed");
|
||||
#endif
|
||||
if (cache_code==NULL) {
|
||||
cache_code=(Bit8u*)malloc(CACHE_TOTAL+CACHE_MAXSIZE+PAGESIZE_TEMP-1);
|
||||
if(!cache_code) E_Exit("Allocating dynamic cache failed");
|
||||
#if (C_HAVE_MPROTECT)
|
||||
cache_code=(Bit8u*)(((int)cache_code + PAGESIZE-1) & ~(PAGESIZE-1)); //MEM LEAK. store old pointer if you want to free it.
|
||||
if(mprotect(cache_code,CACHE_TOTAL+CACHE_MAXSIZE,PROT_WRITE|PROT_READ|PROT_EXEC))
|
||||
if(mprotect(cache_code_link_blocks,CACHE_TOTAL+CACHE_MAXSIZE+PAGESIZE_TEMP,PROT_WRITE|PROT_READ|PROT_EXEC))
|
||||
LOG_MSG("Setting excute permission on the code cache has failed!");
|
||||
#endif
|
||||
CacheBlock * block=cache_getblock();
|
||||
@ -438,20 +477,43 @@ static void cache_init(bool enable) {
|
||||
block->cache.next=0; //Last block in the list
|
||||
}
|
||||
/* Setup the default blocks for block linkage returns */
|
||||
cache.pos=&cache_code_link_blocks[0][0];
|
||||
cache.pos=&cache_code_link_blocks[0];
|
||||
link_blocks[0].cache.start=cache.pos;
|
||||
gen_return(BR_Link1);
|
||||
cache.pos=&cache_code_link_blocks[1][0];
|
||||
cache.pos=&cache_code_link_blocks[32];
|
||||
link_blocks[1].cache.start=cache.pos;
|
||||
gen_return(BR_Link2);
|
||||
cache.free_pages=0;
|
||||
cache.last_page=0;
|
||||
cache.used_pages=0;
|
||||
/* Setup the code pages */
|
||||
for (i=0;i<CACHE_PAGES-1;i++) {
|
||||
for (i=0;i<CACHE_PAGES;i++) {
|
||||
CodePageHandler * newpage=new CodePageHandler();
|
||||
newpage->next=cache.free_pages;
|
||||
cache.free_pages=newpage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void cache_close(void) {
|
||||
/* for (;;) {
|
||||
if (cache.used_pages) {
|
||||
CodePageHandler * cpage=cache.used_pages;
|
||||
CodePageHandler * npage=cache.used_pages->next;
|
||||
cpage->ClearRelease();
|
||||
delete cpage;
|
||||
cache.used_pages=npage;
|
||||
} else break;
|
||||
}
|
||||
if (cache_blocks != NULL) {
|
||||
free(cache_blocks);
|
||||
cache_blocks = NULL;
|
||||
}
|
||||
if (cache_code_start_ptr != NULL) {
|
||||
free(cache_code_start_ptr);
|
||||
cache_code_start_ptr = NULL;
|
||||
}
|
||||
cache_code = NULL;
|
||||
cache_code_link_blocks = NULL;
|
||||
cache_initialized = false; */
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
665
src/cpu/core_dyn_x86/dyn_fpu.h
Normal file
665
src/cpu/core_dyn_x86/dyn_fpu.h
Normal file
@ -0,0 +1,665 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2005 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dyn_fpu.h,v 1.2 2006/09/19 16:27:58 c2woody Exp $ */
|
||||
|
||||
#include "dosbox.h"
|
||||
#if C_FPU
|
||||
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include "cross.h"
|
||||
#include "mem.h"
|
||||
#include "fpu.h"
|
||||
#include "cpu.h"
|
||||
|
||||
|
||||
static void FPU_FDECSTP(){
|
||||
TOP = (TOP - 1) & 7;
|
||||
}
|
||||
|
||||
static void FPU_FINCSTP(){
|
||||
TOP = (TOP + 1) & 7;
|
||||
}
|
||||
|
||||
static void FPU_FNSTCW(PhysPt addr){
|
||||
mem_writew(addr,fpu.cw);
|
||||
}
|
||||
|
||||
static void FPU_FFREE(Bitu st) {
|
||||
fpu.tags[st]=TAG_Empty;
|
||||
}
|
||||
|
||||
|
||||
#if C_FPU_X86
|
||||
#include "../../fpu/fpu_instructions_x86.h"
|
||||
#else
|
||||
#include "../../fpu/fpu_instructions.h"
|
||||
#endif
|
||||
|
||||
|
||||
#define dyn_fpu_top() { \
|
||||
gen_protectflags(); \
|
||||
gen_load_host(&TOP,DREG(EA),4); \
|
||||
gen_dop_word_imm(DOP_ADD,true,DREG(EA),decode.modrm.rm); \
|
||||
gen_dop_word_imm(DOP_AND,true,DREG(EA),7); \
|
||||
gen_load_host(&TOP,DREG(TMPB),4); \
|
||||
}
|
||||
|
||||
static void dyn_eatree() {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
switch (group){
|
||||
case 0x00: /* FADD ST,STi */
|
||||
gen_call_function((void*)&FPU_FADD_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FMUL ST,STi */
|
||||
gen_call_function((void*)&FPU_FMUL_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x02: /* FCOM STi */
|
||||
gen_call_function((void*)&FPU_FCOM_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x03: /* FCOMP STi */
|
||||
gen_call_function((void*)&FPU_FCOM_EA,"%Ddr",DREG(TMPB));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FSUB ST,STi */
|
||||
gen_call_function((void*)&FPU_FSUB_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x05: /* FSUBR ST,STi */
|
||||
gen_call_function((void*)&FPU_FSUBR_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x06: /* FDIV ST,STi */
|
||||
gen_call_function((void*)&FPU_FDIV_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
case 0x07: /* FDIVR ST,STi */
|
||||
gen_call_function((void*)&FPU_FDIVR_EA,"%Ddr",DREG(TMPB));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc0(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
dyn_fpu_top();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch (group){
|
||||
case 0x00: //FADD ST,STi /
|
||||
gen_call_function((void*)&FPU_FADD,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x01: // FMUL ST,STi /
|
||||
gen_call_function((void*)&FPU_FMUL,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x02: // FCOM STi /
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x03: // FCOMP STi /
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: // FSUB ST,STi /
|
||||
gen_call_function((void*)&FPU_FSUB,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x05: // FSUBR ST,STi /
|
||||
gen_call_function((void*)&FPU_FSUBR,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x06: // FDIV ST,STi /
|
||||
gen_call_function((void*)&FPU_FDIV,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x07: // FDIVR ST,STi /
|
||||
gen_call_function((void*)&FPU_FDIVR,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_F32_EA,"%Ddr",DREG(EA));
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
dyn_eatree();
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc1(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch (group){
|
||||
case 0x00: /* FLD STi */
|
||||
gen_protectflags();
|
||||
gen_load_host(&TOP,DREG(EA),4);
|
||||
gen_dop_word_imm(DOP_ADD,true,DREG(EA),decode.modrm.rm);
|
||||
gen_dop_word_imm(DOP_AND,true,DREG(EA),7);
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FST,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FXCH STi */
|
||||
dyn_fpu_top();
|
||||
gen_call_function((void*)&FPU_FXCH,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x02: /* FNOP */
|
||||
gen_call_function((void*)&FPU_FNOP,"");
|
||||
break;
|
||||
case 0x03: /* FSTP STi */
|
||||
dyn_fpu_top();
|
||||
gen_call_function((void*)&FPU_FST,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04:
|
||||
switch(sub){
|
||||
case 0x00: /* FCHS */
|
||||
gen_call_function((void*)&FPU_FCHS,"");
|
||||
break;
|
||||
case 0x01: /* FABS */
|
||||
gen_call_function((void*)&FPU_FABS,"");
|
||||
break;
|
||||
case 0x02: /* UNKNOWN */
|
||||
case 0x03: /* ILLEGAL */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
case 0x04: /* FTST */
|
||||
gen_call_function((void*)&FPU_FTST,"");
|
||||
break;
|
||||
case 0x05: /* FXAM */
|
||||
gen_call_function((void*)&FPU_FXAM,"");
|
||||
break;
|
||||
case 0x06: /* FTSTP (cyrix)*/
|
||||
case 0x07: /* UNKNOWN */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x05:
|
||||
switch(sub){
|
||||
case 0x00: /* FLD1 */
|
||||
gen_call_function((void*)&FPU_FLD1,"");
|
||||
break;
|
||||
case 0x01: /* FLDL2T */
|
||||
gen_call_function((void*)&FPU_FLDL2T,"");
|
||||
break;
|
||||
case 0x02: /* FLDL2E */
|
||||
gen_call_function((void*)&FPU_FLDL2E,"");
|
||||
break;
|
||||
case 0x03: /* FLDPI */
|
||||
gen_call_function((void*)&FPU_FLDPI,"");
|
||||
break;
|
||||
case 0x04: /* FLDLG2 */
|
||||
gen_call_function((void*)&FPU_FLDLG2,"");
|
||||
break;
|
||||
case 0x05: /* FLDLN2 */
|
||||
gen_call_function((void*)&FPU_FLDLN2,"");
|
||||
break;
|
||||
case 0x06: /* FLDZ*/
|
||||
gen_call_function((void*)&FPU_FLDZ,"");
|
||||
break;
|
||||
case 0x07: /* ILLEGAL */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x06:
|
||||
switch(sub){
|
||||
case 0x00: /* F2XM1 */
|
||||
gen_call_function((void*)&FPU_F2XM1,"");
|
||||
break;
|
||||
case 0x01: /* FYL2X */
|
||||
gen_call_function((void*)&FPU_FYL2X,"");
|
||||
break;
|
||||
case 0x02: /* FPTAN */
|
||||
gen_call_function((void*)&FPU_FPTAN,"");
|
||||
break;
|
||||
case 0x03: /* FPATAN */
|
||||
gen_call_function((void*)&FPU_FPATAN,"");
|
||||
break;
|
||||
case 0x04: /* FXTRACT */
|
||||
gen_call_function((void*)&FPU_FXTRACT,"");
|
||||
break;
|
||||
case 0x05: /* FPREM1 */
|
||||
gen_call_function((void*)&FPU_FPREM1,"");
|
||||
break;
|
||||
case 0x06: /* FDECSTP */
|
||||
gen_call_function((void*)&FPU_FDECSTP,"");
|
||||
break;
|
||||
case 0x07: /* FINCSTP */
|
||||
gen_call_function((void*)&FPU_FINCSTP,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0x07:
|
||||
switch(sub){
|
||||
case 0x00: /* FPREM */
|
||||
gen_call_function((void*)&FPU_FPREM,"");
|
||||
break;
|
||||
case 0x01: /* FYL2XP1 */
|
||||
gen_call_function((void*)&FPU_FYL2XP1,"");
|
||||
break;
|
||||
case 0x02: /* FSQRT */
|
||||
gen_call_function((void*)&FPU_FSQRT,"");
|
||||
break;
|
||||
case 0x03: /* FSINCOS */
|
||||
gen_call_function((void*)&FPU_FSINCOS,"");
|
||||
break;
|
||||
case 0x04: /* FRNDINT */
|
||||
gen_call_function((void*)&FPU_FRNDINT,"");
|
||||
break;
|
||||
case 0x05: /* FSCALE */
|
||||
gen_call_function((void*)&FPU_FSCALE,"");
|
||||
break;
|
||||
case 0x06: /* FSIN */
|
||||
gen_call_function((void*)&FPU_FSIN,"");
|
||||
break;
|
||||
case 0x07: /* FCOS */
|
||||
gen_call_function((void*)&FPU_FCOS,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 1:Unhandled group %X subfunction %X",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FLD float*/
|
||||
gen_protectflags();
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FLD_F32,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* UNKNOWN */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FST float*/
|
||||
gen_call_function((void*)&FPU_FST_F32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FSTP float*/
|
||||
gen_call_function((void*)&FPU_FST_F32,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FLDENV */
|
||||
gen_call_function((void*)&FPU_FLDENV,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x05: /* FLDCW */
|
||||
gen_call_function((void *)&FPU_FLDCW,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x06: /* FSTENV */
|
||||
gen_call_function((void *)&FPU_FSTENV,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x07: /* FNSTCW*/
|
||||
gen_call_function((void *)&FPU_FNSTCW,"%Ddr",DREG(EA));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc2(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch(group){
|
||||
case 0x05:
|
||||
switch(sub){
|
||||
case 0x01: /* FUCOMPP */
|
||||
gen_protectflags();
|
||||
gen_load_host(&TOP,DREG(EA),4);
|
||||
gen_dop_word_imm(DOP_ADD,true,DREG(EA),1);
|
||||
gen_dop_word_imm(DOP_AND,true,DREG(EA),7);
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void *)&FPU_FUCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void *)&FPU_FPOP,"");
|
||||
gen_call_function((void *)&FPU_FPOP,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 2:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 2:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_I32_EA,"%Ddr",DREG(EA));
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
dyn_eatree();
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc3(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch (group) {
|
||||
case 0x04:
|
||||
switch (sub) {
|
||||
case 0x00: //FNENI
|
||||
case 0x01: //FNDIS
|
||||
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%d",sub);
|
||||
break;
|
||||
case 0x02: //FNCLEX FCLEX
|
||||
gen_call_function((void*)&FPU_FCLEX,"");
|
||||
break;
|
||||
case 0x03: //FNINIT FINIT
|
||||
gen_call_function((void*)&FPU_FINIT,"");
|
||||
break;
|
||||
case 0x04: //FNSETPM
|
||||
case 0x05: //FRSTPM
|
||||
// LOG(LOG_FPU,LOG_ERROR)("80267 protected mode (un)set. Nothing done");
|
||||
break;
|
||||
default:
|
||||
E_Exit("ESC 3:ILLEGAL OPCODE group %d subfunction %d",group,sub);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FILD */
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_protectflags();
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FLD_I32,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FISTTP */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FIST */
|
||||
gen_call_function((void*)&FPU_FST_I32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FISTP */
|
||||
gen_call_function((void*)&FPU_FST_I32,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x05: /* FLD 80 Bits Real */
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_call_function((void*)&FPU_FLD_F80,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x07: /* FSTP 80 Bits Real */
|
||||
gen_call_function((void*)&FPU_FST_F80,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc4(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
dyn_fpu_top();
|
||||
switch(group){
|
||||
case 0x00: /* FADD STi,ST*/
|
||||
gen_call_function((void*)&FPU_FADD,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FMUL STi,ST*/
|
||||
gen_call_function((void*)&FPU_FMUL,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x02: /* FCOM*/
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FCOMP*/
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FSUBR STi,ST*/
|
||||
gen_call_function((void*)&FPU_FSUBR,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x05: /* FSUB STi,ST*/
|
||||
gen_call_function((void*)&FPU_FSUB,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x06: /* FDIVR STi,ST*/
|
||||
gen_call_function((void*)&FPU_FDIVR,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x07: /* FDIV STi,ST*/
|
||||
gen_call_function((void*)&FPU_FDIV,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_F64_EA,"%Ddr",DREG(EA));
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
dyn_eatree();
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc5(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
dyn_fpu_top();
|
||||
switch(group){
|
||||
case 0x00: /* FFREE STi */
|
||||
gen_call_function((void*)&FPU_FFREE,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x01: /* FXCH STi*/
|
||||
gen_call_function((void*)&FPU_FXCH,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x02: /* FST STi */
|
||||
gen_call_function((void*)&FPU_FST,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FSTP STi*/
|
||||
gen_call_function((void*)&FPU_FST,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FUCOM STi */
|
||||
gen_call_function((void*)&FPU_FUCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x05: /*FUCOMP STi */
|
||||
gen_call_function((void*)&FPU_FUCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 5:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
gen_releasereg(DREG(EA));
|
||||
gen_releasereg(DREG(TMPB));
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FLD double real*/
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_protectflags();
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FLD_F64,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FISTTP longint*/
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FST double real*/
|
||||
gen_call_function((void*)&FPU_FST_F64,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FSTP double real*/
|
||||
gen_call_function((void*)&FPU_FST_F64,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FRSTOR */
|
||||
gen_call_function((void*)&FPU_FRSTOR,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x06: /* FSAVE */
|
||||
gen_call_function((void*)&FPU_FSAVE,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x07: /*FNSTSW */
|
||||
gen_protectflags();
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_SET_TOP,"%Dd",DREG(TMPB));
|
||||
gen_load_host(&fpu.sw,DREG(TMPB),4);
|
||||
gen_call_function((void*)&mem_writew,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc6(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
dyn_fpu_top();
|
||||
switch(group){
|
||||
case 0x00: /*FADDP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FADD,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01: /* FMULP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FMUL,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x02: /* FCOMP5*/
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break; /* TODO IS THIS ALLRIGHT ????????? */
|
||||
case 0x03: /*FCOMPP*/
|
||||
if(sub != 1) {
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 6:Unhandled group %d subfunction %d",group,sub);
|
||||
return;
|
||||
}
|
||||
gen_load_host(&TOP,DREG(EA),4);
|
||||
gen_dop_word_imm(DOP_ADD,true,DREG(EA),1);
|
||||
gen_dop_word_imm(DOP_AND,true,DREG(EA),7);
|
||||
gen_call_function((void*)&FPU_FCOM,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,""); /* extra pop at the bottom*/
|
||||
break;
|
||||
case 0x04: /* FSUBRP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FSUBR,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x05: /* FSUBP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FSUB,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x06: /* FDIVRP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FDIVR,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x07: /* FDIVP STi,ST*/
|
||||
gen_call_function((void*)&FPU_FDIV,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_I16_EA,"%Ddr",DREG(EA));
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
dyn_eatree();
|
||||
}
|
||||
}
|
||||
|
||||
static void dyn_fpu_esc7(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
switch (group){
|
||||
case 0x01: /* FXCH STi*/
|
||||
dyn_fpu_top();
|
||||
gen_call_function((void*)&FPU_FXCH,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
break;
|
||||
case 0x02: /* FSTP STi*/
|
||||
case 0x03: /* FSTP STi*/
|
||||
dyn_fpu_top();
|
||||
gen_call_function((void*)&FPU_FST,"%Ddr%Ddr",DREG(TMPB),DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04:
|
||||
switch(sub){
|
||||
case 0x00: /* FNSTSW AX*/
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_SET_TOP,"%Ddr",DREG(TMPB));
|
||||
gen_mov_host(&fpu.sw,DREG(EAX),2);
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FILD Bit16s */
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FLD_I16,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x01:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FIST Bit16s */
|
||||
gen_call_function((void*)&FPU_FST_I16,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FISTP Bit16s */
|
||||
gen_call_function((void*)&FPU_FST_I16,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x04: /* FBLD packed BCD */
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FBLD,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x05: /* FILD Bit64s */
|
||||
gen_call_function((void*)&FPU_PREP_PUSH,"");
|
||||
gen_load_host(&TOP,DREG(TMPB),4);
|
||||
gen_call_function((void*)&FPU_FLD_I64,"%Ddr%Ddr",DREG(EA),DREG(TMPB));
|
||||
break;
|
||||
case 0x06: /* FBSTP packed BCD */
|
||||
gen_call_function((void*)&FPU_FBST,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
case 0x07: /* FISTP Bit64s */
|
||||
gen_call_function((void*)&FPU_FST_I64,"%Ddr",DREG(EA));
|
||||
gen_call_function((void*)&FPU_FPOP,"");
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
494
src/cpu/core_dyn_x86/dyn_fpu_dh.h
Normal file
494
src/cpu/core_dyn_x86/dyn_fpu_dh.h
Normal file
@ -0,0 +1,494 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2005 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: dyn_fpu_dh.h,v 1.2 2006/11/11 14:42:38 c2woody Exp $ */
|
||||
|
||||
#include "dosbox.h"
|
||||
#if C_FPU
|
||||
|
||||
static void FPU_FLD_16(PhysPt addr) {
|
||||
dyn_dh_fpu.temp.m1 = (Bit32u)mem_readw_dyncorex86(addr);
|
||||
}
|
||||
|
||||
static void FPU_FST_16(PhysPt addr) {
|
||||
mem_writew_dyncorex86(addr,(Bit16u)dyn_dh_fpu.temp.m1);
|
||||
}
|
||||
|
||||
static void FPU_FLD_32(PhysPt addr) {
|
||||
dyn_dh_fpu.temp.m1 = mem_readd_dyncorex86(addr);
|
||||
}
|
||||
|
||||
static void FPU_FST_32(PhysPt addr) {
|
||||
mem_writed_dyncorex86(addr,dyn_dh_fpu.temp.m1);
|
||||
}
|
||||
|
||||
static void FPU_FLD_64(PhysPt addr) {
|
||||
dyn_dh_fpu.temp.m1 = mem_readd_dyncorex86(addr);
|
||||
dyn_dh_fpu.temp.m2 = mem_readd_dyncorex86(addr+4);
|
||||
}
|
||||
|
||||
static void FPU_FST_64(PhysPt addr) {
|
||||
mem_writed_dyncorex86(addr,dyn_dh_fpu.temp.m1);
|
||||
mem_writed_dyncorex86(addr+4,dyn_dh_fpu.temp.m2);
|
||||
}
|
||||
|
||||
static void FPU_FLD_80(PhysPt addr) {
|
||||
dyn_dh_fpu.temp.m1 = mem_readd_dyncorex86(addr);
|
||||
dyn_dh_fpu.temp.m2 = mem_readd_dyncorex86(addr+4);
|
||||
dyn_dh_fpu.temp.m3 = mem_readw_dyncorex86(addr+8);
|
||||
}
|
||||
|
||||
static void FPU_FST_80(PhysPt addr) {
|
||||
mem_writed_dyncorex86(addr,dyn_dh_fpu.temp.m1);
|
||||
mem_writed_dyncorex86(addr+4,dyn_dh_fpu.temp.m2);
|
||||
mem_writew_dyncorex86(addr+8,dyn_dh_fpu.temp.m3);
|
||||
}
|
||||
|
||||
static void FPU_FLDCW_DH(PhysPt addr){
|
||||
dyn_dh_fpu.cw = mem_readw(addr);
|
||||
dyn_dh_fpu.temp.m1 = (Bit32u)(dyn_dh_fpu.cw|0x3f);
|
||||
}
|
||||
|
||||
static void FPU_FNSTCW_DH(PhysPt addr){
|
||||
mem_writew(addr,dyn_dh_fpu.cw);
|
||||
}
|
||||
|
||||
static void FPU_FNINIT_DH(void){
|
||||
dyn_dh_fpu.cw = 0x37f;
|
||||
}
|
||||
|
||||
static void FPU_FSTENV_DH(PhysPt addr){
|
||||
if(!cpu.code.big) {
|
||||
mem_writew_dyncorex86(addr+0,(Bit16u)dyn_dh_fpu.cw);
|
||||
mem_writew_dyncorex86(addr+2,(Bit16u)dyn_dh_fpu.temp.m2);
|
||||
mem_writew_dyncorex86(addr+4,dyn_dh_fpu.temp.m3);
|
||||
} else {
|
||||
mem_writed_dyncorex86(addr+0,dyn_dh_fpu.temp.m1);
|
||||
mem_writew_dyncorex86(addr+0,(Bit16u)dyn_dh_fpu.cw);
|
||||
mem_writed_dyncorex86(addr+4,dyn_dh_fpu.temp.m2);
|
||||
mem_writed_dyncorex86(addr+8,dyn_dh_fpu.temp.m3);
|
||||
}
|
||||
}
|
||||
|
||||
static void FPU_FLDENV_DH(PhysPt addr){
|
||||
if(!cpu.code.big) {
|
||||
dyn_dh_fpu.cw = (Bit32u)mem_readw_dyncorex86(addr);
|
||||
dyn_dh_fpu.temp.m1 = dyn_dh_fpu.cw|0x3f;
|
||||
dyn_dh_fpu.temp.m2 = (Bit32u)mem_readw_dyncorex86(addr+2);
|
||||
dyn_dh_fpu.temp.m3 = mem_readw_dyncorex86(addr+4);
|
||||
} else {
|
||||
dyn_dh_fpu.cw = (Bit32u)mem_readw_dyncorex86(addr);
|
||||
dyn_dh_fpu.temp.m1 = mem_readd_dyncorex86(addr)|0x3f;
|
||||
dyn_dh_fpu.temp.m2 = mem_readd_dyncorex86(addr+4);
|
||||
dyn_dh_fpu.temp.m3 = mem_readw_dyncorex86(addr+8);
|
||||
dyn_dh_fpu.temp.d1 = mem_readw_dyncorex86(addr+10);
|
||||
}
|
||||
}
|
||||
|
||||
static void FPU_FSAVE_DH(PhysPt addr){
|
||||
if (!cpu.code.big) {
|
||||
mem_writew_dyncorex86(addr,(Bit16u)dyn_dh_fpu.cw);
|
||||
addr+=2;
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x04]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x05]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x08]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x09]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x0c]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x0d]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x10]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x11]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x14]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x15]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x18]);
|
||||
mem_writeb(addr++,dyn_dh_fpu.temp_state[0x19]);
|
||||
for(Bitu i=28;i<108;i++) mem_writeb(addr++,dyn_dh_fpu.temp_state[i]);
|
||||
} else {
|
||||
mem_writew_dyncorex86(addr,(Bit16u)dyn_dh_fpu.cw);
|
||||
addr+=2;
|
||||
for(Bitu i=2;i<108;i++) mem_writeb(addr++,dyn_dh_fpu.temp_state[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void FPU_FRSTOR_DH(PhysPt addr){
|
||||
if (!cpu.code.big) {
|
||||
dyn_dh_fpu.cw = (Bit32u)mem_readw_dyncorex86(addr);
|
||||
dyn_dh_fpu.temp_state[0x00] = mem_readb(addr++)|0x3f;
|
||||
dyn_dh_fpu.temp_state[0x01] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x04] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x05] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x08] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x09] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x0c] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x0d] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x10] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x11] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x14] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x15] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x18] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0x19] = mem_readb(addr++);
|
||||
for(Bitu i=28;i<108;i++) dyn_dh_fpu.temp_state[i] = mem_readb(addr++);
|
||||
} else {
|
||||
dyn_dh_fpu.cw = (Bit32u)mem_readw_dyncorex86(addr);
|
||||
for(Bitu i=0;i<108;i++) dyn_dh_fpu.temp_state[i] = mem_readb(addr++);
|
||||
dyn_dh_fpu.temp_state[0]|=0x3f;
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc0(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xd8);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_32,"%Ddr",DREG(EA));
|
||||
cache_addb(0xd8);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc1(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xd9);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FLD float*/
|
||||
gen_call_function((void*)&FPU_FLD_32,"%Ddr",DREG(EA));
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x01: /* UNKNOWN */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FST float*/
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FSTP float*/
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x04: /* FLDENV */
|
||||
gen_call_function((void*)&FPU_FLDENV_DH,"%Ddr",DREG(EA));
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x05: /* FLDCW */
|
||||
gen_call_function((void *)&FPU_FLDCW_DH,"%Ddr",DREG(EA));
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x06: /* FSTENV */
|
||||
cache_addb(0xd9);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FSTENV_DH,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x07: /* FNSTCW*/
|
||||
gen_call_function((void*)&FPU_FNSTCW_DH,"%Ddr",DREG(EA));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC EA 1:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc2(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xda);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_32,"%Ddr",DREG(EA));
|
||||
cache_addb(0xda);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc3(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch (group) {
|
||||
case 0x04:
|
||||
switch (sub) {
|
||||
case 0x00: //FNENI
|
||||
case 0x01: //FNDIS
|
||||
LOG(LOG_FPU,LOG_ERROR)("8087 only fpu code used esc 3: group 4: subfuntion :%d",sub);
|
||||
break;
|
||||
case 0x02: //FNCLEX FCLEX
|
||||
cache_addb(0xdb);
|
||||
cache_addb(decode.modrm.val);
|
||||
break;
|
||||
case 0x03: //FNINIT FINIT
|
||||
gen_call_function((void*)&FPU_FNINIT_DH,"");
|
||||
cache_addb(0xdb);
|
||||
cache_addb(decode.modrm.val);
|
||||
break;
|
||||
case 0x04: //FNSETPM
|
||||
case 0x05: //FRSTPM
|
||||
// LOG(LOG_FPU,LOG_ERROR)("80267 protected mode (un)set. Nothing done");
|
||||
break;
|
||||
default:
|
||||
E_Exit("ESC 3:ILLEGAL OPCODE group %d subfunction %d",group,sub);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FILD */
|
||||
gen_call_function((void*)&FPU_FLD_32,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x01: /* FISTTP */
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FIST */
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FISTP */
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_32,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x05: /* FLD 80 Bits Real */
|
||||
gen_call_function((void*)&FPU_FLD_80,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x07: /* FSTP 80 Bits Real */
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_80,"%Ddr",DREG(EA));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 3 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc4(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xdc);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdc);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc5(){
|
||||
dyn_get_modrm();
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xdd);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
switch(group){
|
||||
case 0x00: /* FLD double real*/
|
||||
gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x01: /* FISTTP longint*/
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FST double real*/
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FSTP double real*/
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x04: /* FRSTOR */
|
||||
gen_call_function((void*)&FPU_FRSTOR_DH,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp_state[0])));
|
||||
break;
|
||||
case 0x06: /* FSAVE */
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp_state[0])));
|
||||
gen_call_function((void*)&FPU_FSAVE_DH,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdb);
|
||||
cache_addb(0xe3);
|
||||
break;
|
||||
case 0x07: /* FNSTSW */
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 5 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc6(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
cache_addb(0xde);
|
||||
cache_addb(decode.modrm.val);
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
gen_call_function((void*)&FPU_FLD_16,"%Ddr",DREG(EA));
|
||||
cache_addb(0xde);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
}
|
||||
}
|
||||
|
||||
static void dh_fpu_esc7(){
|
||||
dyn_get_modrm();
|
||||
Bitu group=(decode.modrm.val >> 3) & 7;
|
||||
Bitu sub=(decode.modrm.val & 7);
|
||||
if (decode.modrm.val >= 0xc0) {
|
||||
switch (group){
|
||||
case 0x01: /* FXCH STi*/
|
||||
cache_addb(0xdf);
|
||||
cache_addb(decode.modrm.val);
|
||||
break;
|
||||
case 0x02: /* FSTP STi*/
|
||||
case 0x03: /* FSTP STi*/
|
||||
cache_addb(0xdf);
|
||||
cache_addb(decode.modrm.val);
|
||||
break;
|
||||
case 0x04:
|
||||
switch(sub){
|
||||
case 0x00: /* FNSTSW AX*/
|
||||
cache_addb(0xdd);
|
||||
cache_addb(0x05|(0x07<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_load_host(&(dyn_dh_fpu.temp.m1),DREG(TMPB),4);
|
||||
gen_dop_word(DOP_MOV,false,DREG(EAX),DREG(TMPB));
|
||||
gen_releasereg(DREG(TMPB));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
dyn_fill_ea();
|
||||
switch(group){
|
||||
case 0x00: /* FILD Bit16s */
|
||||
gen_call_function((void*)&FPU_FLD_16,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x01:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
case 0x02: /* FIST Bit16s */
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x03: /* FISTP Bit16s */
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_16,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x04: /* FBLD packed BCD */
|
||||
gen_call_function((void*)&FPU_FLD_80,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x05: /* FILD Bit64s */
|
||||
gen_call_function((void*)&FPU_FLD_64,"%Ddr",DREG(EA));
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
break;
|
||||
case 0x06: /* FBSTP packed BCD */
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_80,"%Ddr",DREG(EA));
|
||||
break;
|
||||
case 0x07: /* FISTP Bit64s */
|
||||
cache_addb(0xdf);
|
||||
cache_addb(0x05|(decode.modrm.reg<<3));
|
||||
cache_addd((Bit32u)(&(dyn_dh_fpu.temp.m1)));
|
||||
gen_call_function((void*)&FPU_FST_64,"%Ddr",DREG(EA));
|
||||
break;
|
||||
default:
|
||||
LOG(LOG_FPU,LOG_WARN)("ESC 7 EA:Unhandled group %d subfunction %d",group,sub);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -110,6 +110,22 @@ return_address:
|
||||
pop ebx
|
||||
mov [retval],eax
|
||||
}
|
||||
#elif defined (MACOSX)
|
||||
register Bit32u tempflags=reg_flags & FMASK_TEST;
|
||||
__asm__ volatile (
|
||||
"pushl %%ebx \n"
|
||||
"pushl %%ebp \n"
|
||||
"pushl $(run_return_adress) \n"
|
||||
"pushl %2 \n"
|
||||
"jmp *%3 \n"
|
||||
"run_return_adress: \n"
|
||||
"popl %%ebp \n"
|
||||
"popl %%ebx \n"
|
||||
:"=a" (retval), "=c" (tempflags)
|
||||
:"r" (tempflags),"r" (code)
|
||||
:"%edx","%edi","%esi","cc","memory"
|
||||
);
|
||||
reg_flags=(reg_flags & ~FMASK_TEST) | (tempflags & FMASK_TEST);
|
||||
#else
|
||||
register Bit32u tempflags=reg_flags & FMASK_TEST;
|
||||
__asm__ volatile (
|
||||
@ -267,6 +283,36 @@ static void gen_reinit(void) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void gen_load_host(void * data,DynReg * dr1,Bitu size) {
|
||||
GenReg * gr1=FindDynReg(dr1,true);
|
||||
switch (size) {
|
||||
case 1:cache_addw(0xb60f);break; //movzx byte
|
||||
case 2:cache_addw(0xb70f);break; //movzx word
|
||||
case 4:cache_addb(0x8b);break; //mov
|
||||
default:
|
||||
IllegalOption("gen_load_host");
|
||||
}
|
||||
cache_addb(0x5+(gr1->index<<3));
|
||||
cache_addd((Bit32u)data);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
static void gen_mov_host(void * data,DynReg * dr1,Bitu size,Bit8u di1=0) {
|
||||
GenReg * gr1=FindDynReg(dr1,(size==4));
|
||||
switch (size) {
|
||||
case 1:cache_addb(0x8a);break; //mov byte
|
||||
case 2:cache_addb(0x66); //mov word
|
||||
case 4:cache_addb(0x8b);break; //mov
|
||||
default:
|
||||
IllegalOption("gen_load_host");
|
||||
}
|
||||
cache_addb(0x5+((gr1->index+(di1?4:0))<<3));
|
||||
cache_addd((Bit32u)data);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
|
||||
static void gen_dop_byte(DualOps op,DynReg * dr1,Bit8u di1,DynReg * dr2,Bit8u di2) {
|
||||
GenReg * gr1=FindDynReg(dr1);GenReg * gr2=FindDynReg(dr2);
|
||||
Bit8u tmp;
|
||||
@ -316,6 +362,29 @@ finish:
|
||||
cache_addb(imm);
|
||||
}
|
||||
|
||||
static void gen_dop_byte_imm_mem(DualOps op,DynReg * dr1,Bit8u di1,void* data) {
|
||||
GenReg * gr1=FindDynReg(dr1);
|
||||
Bit16u tmp;
|
||||
switch (op) {
|
||||
case DOP_ADD: tmp=0x0502; break;
|
||||
case DOP_ADC: tmp=0x0512; break;
|
||||
case DOP_SUB: tmp=0x052a; break;
|
||||
case DOP_SBB: tmp=0x051a; break;
|
||||
case DOP_CMP: tmp=0x053a; goto nochange; //Doesn't change
|
||||
case DOP_XOR: tmp=0x0532; break;
|
||||
case DOP_AND: tmp=0x0522; break;
|
||||
case DOP_OR: tmp=0x050a; break;
|
||||
case DOP_TEST: tmp=0x0584; goto nochange; //Doesn't change
|
||||
case DOP_MOV: tmp=0x0585; break;
|
||||
default:
|
||||
IllegalOption("gen_dop_byte_imm_mem");
|
||||
}
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
nochange:
|
||||
cache_addw(tmp+((gr1->index+di1)<<11));
|
||||
cache_addd((Bit32u)data);
|
||||
}
|
||||
|
||||
static void gen_sop_byte(SingleOps op,DynReg * dr1,Bit8u di1) {
|
||||
GenReg * gr1=FindDynReg(dr1);
|
||||
Bit16u tmp;
|
||||
@ -397,6 +466,19 @@ static void gen_lea(DynReg * ddr,DynReg * dsr1,DynReg * dsr2,Bitu scale,Bits imm
|
||||
ddr->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
static void gen_lea_imm_mem(DynReg * ddr,DynReg * dsr,void* data) {
|
||||
GenReg * gdr=FindDynReg(ddr);
|
||||
Bit8u rm_base=(gdr->index << 3);
|
||||
cache_addw(0x058b+(rm_base<<8));
|
||||
cache_addd((Bit32u)data);
|
||||
GenReg * gsr=FindDynReg(dsr);
|
||||
cache_addb(0x8d); //LEA
|
||||
cache_addb(rm_base+0x44);
|
||||
cache_addb(rm_base+gsr->index);
|
||||
cache_addb(0x00);
|
||||
ddr->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
static void gen_dop_word(DualOps op,bool dword,DynReg * dr1,DynReg * dr2) {
|
||||
GenReg * gr2=FindDynReg(dr2);
|
||||
GenReg * gr1=FindDynReg(dr1,dword && op==DOP_MOV);
|
||||
@ -457,6 +539,56 @@ finish:
|
||||
else cache_addw(imm);
|
||||
}
|
||||
|
||||
static void gen_dop_word_imm_mem(DualOps op,bool dword,DynReg * dr1,void* data) {
|
||||
GenReg * gr1=FindDynReg(dr1,dword && op==DOP_MOV);
|
||||
Bit16u tmp;
|
||||
switch (op) {
|
||||
case DOP_ADD: tmp=0x0503; break;
|
||||
case DOP_ADC: tmp=0x0513; break;
|
||||
case DOP_SUB: tmp=0x052b; break;
|
||||
case DOP_SBB: tmp=0x051b; break;
|
||||
case DOP_CMP: tmp=0x053b; goto nochange; //Doesn't change
|
||||
case DOP_XOR: tmp=0x0533; break;
|
||||
case DOP_AND: tmp=0x0523; break;
|
||||
case DOP_OR: tmp=0x050b; break;
|
||||
case DOP_TEST: tmp=0x0585; goto nochange; //Doesn't change
|
||||
case DOP_MOV:
|
||||
gen_mov_host(data,dr1,dword?4:2);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
return;
|
||||
default:
|
||||
IllegalOption("gen_dop_word_imm_mem");
|
||||
}
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
nochange:
|
||||
if (!dword) cache_addb(0x66);
|
||||
cache_addw(tmp+(gr1->index<<11));
|
||||
cache_addd((Bit32u)data);
|
||||
}
|
||||
|
||||
static void gen_dop_word_var(DualOps op,bool dword,DynReg * dr1,void* drd) {
|
||||
GenReg * gr1=FindDynReg(dr1,dword && op==DOP_MOV);
|
||||
Bit8u tmp;
|
||||
switch (op) {
|
||||
case DOP_ADD: tmp=0x03; break;
|
||||
case DOP_ADC: tmp=0x13; break;
|
||||
case DOP_SUB: tmp=0x2b; break;
|
||||
case DOP_SBB: tmp=0x1b; break;
|
||||
case DOP_CMP: tmp=0x3b; break;
|
||||
case DOP_XOR: tmp=0x33; break;
|
||||
case DOP_AND: tmp=0x23; break;
|
||||
case DOP_OR: tmp=0x0b; break;
|
||||
case DOP_TEST: tmp=0x85; break;
|
||||
case DOP_MOV: tmp=0x8b; break;
|
||||
case DOP_XCHG: tmp=0x87; break;
|
||||
default:
|
||||
IllegalOption("gen_dop_word_var");
|
||||
}
|
||||
if (!dword) cache_addb(0x66);
|
||||
cache_addw(tmp|(0x05+((gr1->index)<<3))<<8);
|
||||
cache_addd((Bit32u)drd);
|
||||
}
|
||||
|
||||
static void gen_imul_word(bool dword,DynReg * dr1,DynReg * dr2) {
|
||||
GenReg * gr1=FindDynReg(dr1);GenReg * gr2=FindDynReg(dr2);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
@ -606,15 +738,42 @@ static void gen_call_function(void * func,char * ops,...) {
|
||||
if (ops) {
|
||||
va_list params;
|
||||
va_start(params,ops);
|
||||
Bitu stack_used=0;
|
||||
bool free_flags=false;
|
||||
Bits pindex=0;
|
||||
while (*ops) {
|
||||
if (*ops=='%') {
|
||||
pinfo[pindex].line=ops+1;
|
||||
pinfo[pindex].value=va_arg(params,Bitu);
|
||||
#if defined (MACOSX)
|
||||
char * scan=pinfo[pindex].line;
|
||||
if ((*scan=='I') || (*scan=='D')) stack_used+=4;
|
||||
else if (*scan=='F') free_flags=true;
|
||||
#endif
|
||||
pindex++;
|
||||
}
|
||||
ops++;
|
||||
}
|
||||
|
||||
#if defined (MACOSX)
|
||||
/* align stack */
|
||||
stack_used+=4; // saving esp on stack as well
|
||||
|
||||
cache_addw(0xc48b); // mov eax,esp
|
||||
cache_addb(0x2d); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addw(0xe083); // and eax,0xfffffff0
|
||||
cache_addb(0xf0);
|
||||
cache_addb(0x05); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addb(0x94); // xchg eax,esp
|
||||
if (free_flags) {
|
||||
cache_addw(0xc083); // add eax,4
|
||||
cache_addb(0x04);
|
||||
}
|
||||
cache_addb(0x50); // push eax (==old esp)
|
||||
#endif
|
||||
|
||||
paramcount=0;
|
||||
while (pindex) {
|
||||
pindex--;
|
||||
@ -671,7 +830,24 @@ static void gen_call_function(void * func,char * ops,...) {
|
||||
IllegalOption("gen_call_function unknown param");
|
||||
}
|
||||
}
|
||||
#if defined (MACOSX)
|
||||
if (free_flags) release_flags=false;
|
||||
} else {
|
||||
/* align stack */
|
||||
Bit32u stack_used=8; // saving esp and return address on the stack
|
||||
|
||||
cache_addw(0xc48b); // mov eax,esp
|
||||
cache_addb(0x2d); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addw(0xe083); // and eax,0xfffffff0
|
||||
cache_addb(0xf0);
|
||||
cache_addb(0x05); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addb(0x94); // xchg eax,esp
|
||||
cache_addb(0x50); // push esp (==old esp)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Clear some unprotected registers */
|
||||
x86gen.regs[X86_REG_ECX]->Clear();
|
||||
x86gen.regs[X86_REG_EDX]->Clear();
|
||||
@ -710,6 +886,11 @@ static void gen_call_function(void * func,char * ops,...) {
|
||||
}
|
||||
/* Restore EAX registers to be used again */
|
||||
x86gen.regs[X86_REG_EAX]->notusable=false;
|
||||
|
||||
#if defined (MACOSX)
|
||||
/* restore stack */
|
||||
cache_addb(0x5c); // pop esp
|
||||
#endif
|
||||
}
|
||||
|
||||
static void gen_call_write(DynReg * dr,Bit32u val,Bitu write_size) {
|
||||
@ -718,6 +899,21 @@ static void gen_call_write(DynReg * dr,Bit32u val,Bitu write_size) {
|
||||
x86gen.regs[X86_REG_EAX]->notusable=true;
|
||||
gen_protectflags();
|
||||
|
||||
#if defined (MACOSX)
|
||||
/* align stack */
|
||||
Bitu stack_used=12;
|
||||
|
||||
cache_addw(0xc48b); // mov eax,esp
|
||||
cache_addb(0x2d); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addw(0xe083); // and eax,0xfffffff0
|
||||
cache_addb(0xf0);
|
||||
cache_addb(0x05); // sub eax,stack_used
|
||||
cache_addd(stack_used);
|
||||
cache_addb(0x94); // xchg eax,esp
|
||||
cache_addb(0x50); // push eax (==old esp)
|
||||
#endif
|
||||
|
||||
cache_addb(0x68); //PUSH val
|
||||
cache_addd(val);
|
||||
GenReg * genreg=FindDynReg(dr);
|
||||
@ -728,26 +924,22 @@ static void gen_call_write(DynReg * dr,Bit32u val,Bitu write_size) {
|
||||
x86gen.regs[X86_REG_EDX]->Clear();
|
||||
/* Do the actual call to the procedure */
|
||||
cache_addb(0xe8);
|
||||
#ifdef CHECKED_MEMORY_ACCESS
|
||||
switch (write_size) {
|
||||
case 1: cache_addd((Bit32u)mem_writeb_checked_x86 - (Bit32u)cache.pos-4); break;
|
||||
case 2: cache_addd((Bit32u)mem_writew_checked_x86 - (Bit32u)cache.pos-4); break;
|
||||
case 4: cache_addd((Bit32u)mem_writed_checked_x86 - (Bit32u)cache.pos-4); break;
|
||||
default: IllegalOption("gen_call_write");
|
||||
}
|
||||
#else
|
||||
switch (write_size) {
|
||||
case 1: cache_addd((Bit32u)mem_writeb - (Bit32u)cache.pos-4); break;
|
||||
case 2: cache_addd((Bit32u)mem_writew_dyncorex86 - (Bit32u)cache.pos-4); break;
|
||||
case 4: cache_addd((Bit32u)mem_writed_dyncorex86 - (Bit32u)cache.pos-4); break;
|
||||
default: IllegalOption("gen_call_write");
|
||||
}
|
||||
#endif
|
||||
|
||||
cache_addw(0xc483); //ADD ESP,8
|
||||
cache_addb(2*4);
|
||||
x86gen.regs[X86_REG_EAX]->notusable=false;
|
||||
gen_releasereg(dr);
|
||||
|
||||
#if defined (MACOSX)
|
||||
/* restore stack */
|
||||
cache_addb(0x5c); // pop esp
|
||||
#endif
|
||||
}
|
||||
|
||||
static Bit8u * gen_create_branch(BranchTypes type) {
|
||||
@ -760,7 +952,7 @@ static void gen_fill_branch(Bit8u * data,Bit8u * from=cache.pos) {
|
||||
#if C_DEBUG
|
||||
Bits len=from-data;
|
||||
if (len<0) len=-len;
|
||||
if (len>126) LOG_MSG("BIg jump %d",len);
|
||||
if (len>126) LOG_MSG("Big jump %d",len);
|
||||
#endif
|
||||
*data=(from-data-1);
|
||||
}
|
||||
@ -824,34 +1016,6 @@ static void gen_save_host_direct(void * data,Bits imm) {
|
||||
cache_addd(imm);
|
||||
}
|
||||
|
||||
static void gen_load_host(void * data,DynReg * dr1,Bitu size) {
|
||||
GenReg * gr1=FindDynReg(dr1);
|
||||
switch (size) {
|
||||
case 1:cache_addw(0xb60f);break; //movzx byte
|
||||
case 2:cache_addw(0xb70f);break; //movzx word
|
||||
case 4:cache_addb(0x8b);break; //mov
|
||||
default:
|
||||
IllegalOption("gen_load_host");
|
||||
}
|
||||
cache_addb(0x5+(gr1->index<<3));
|
||||
cache_addd((Bit32u)data);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
static void gen_mov_host(void * data,DynReg * dr1,Bitu size,Bit8u di1=0) {
|
||||
GenReg * gr1=FindDynReg(dr1);
|
||||
switch (size) {
|
||||
case 1:cache_addb(0x8a);break; //mov byte
|
||||
case 2:cache_addb(0x66); //mov word
|
||||
case 4:cache_addb(0x8b);break; //mov
|
||||
default:
|
||||
IllegalOption("gen_load_host");
|
||||
}
|
||||
cache_addb(0x5+((gr1->index+(di1?4:0))<<3));
|
||||
cache_addd((Bit32u)data);
|
||||
dr1->flags|=DYNFLG_CHANGED;
|
||||
}
|
||||
|
||||
static void gen_return(BlockReturn retcode) {
|
||||
gen_protectflags();
|
||||
cache_addb(0x59); //POP ECX, the flags
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -21,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -34,26 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/cpu/core_full
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -80,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -110,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -120,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -129,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -154,43 +138,37 @@ target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
noinst_HEADERS = ea_lookup.h load.h loadwrite.h op.h optable.h save.h \
|
||||
string.h support.h
|
||||
|
||||
subdir = src/cpu/core_full
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.in Makefile.am
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/cpu/core_full/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/cpu/core_full/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu src/cpu/core_full/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -199,7 +177,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -211,11 +188,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -238,6 +214,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -251,7 +231,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -269,6 +249,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -289,7 +270,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -306,8 +287,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -340,14 +319,14 @@ ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
ctags distclean distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic ctags \
|
||||
distclean distclean-generic distclean-tags distdir dvi dvi-am \
|
||||
info info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
|
||||
uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
@ -447,12 +447,12 @@ l_M_Ed:
|
||||
goto nextopcode;
|
||||
}
|
||||
case D_LEAVEw:
|
||||
reg_esp&=~cpu.stack.mask;
|
||||
reg_esp&=cpu.stack.notmask;
|
||||
reg_esp|=(reg_ebp&cpu.stack.mask);
|
||||
reg_bp=Pop_16();
|
||||
goto nextopcode;
|
||||
case D_LEAVEd:
|
||||
reg_esp&=~cpu.stack.mask;
|
||||
reg_esp&=cpu.stack.notmask;
|
||||
reg_esp|=(reg_ebp&cpu.stack.mask);
|
||||
reg_ebp=Pop_32();
|
||||
goto nextopcode;
|
||||
|
@ -450,6 +450,11 @@ switch (inst.code.op) {
|
||||
FillFlags();
|
||||
if (CPU_LMSW(inst_op1_w)) RunException();
|
||||
goto nextopcode;
|
||||
case 7: /* INVLPG */
|
||||
if (cpu.pmode && cpu.cpl) EXCEPTION(EXCEPTION_GP);
|
||||
FillFlags();
|
||||
PAGING_ClearTLB();
|
||||
goto nextopcode;
|
||||
default:
|
||||
LOG(LOG_CPU,LOG_ERROR)("Group 7 Illegal subfunction %X",inst.rm_index);
|
||||
goto illegalopcode;
|
||||
@ -467,6 +472,12 @@ switch (inst.code.op) {
|
||||
case O_M_Rd_DRx:
|
||||
if (CPU_READ_DRX(inst.rm_index,inst_op1_d)) RunException();
|
||||
break;
|
||||
case O_M_TRx_Rd:
|
||||
if (CPU_WRITE_TRX(inst.rm_index,inst_op1_d)) RunException();
|
||||
break;
|
||||
case O_M_Rd_TRx:
|
||||
if (CPU_READ_TRX(inst.rm_index,inst_op1_d)) RunException();
|
||||
break;
|
||||
case O_LAR:
|
||||
{
|
||||
if ((reg_flags & FLAG_VM) || (!cpu.pmode)) goto illegalopcode;
|
||||
|
@ -206,8 +206,8 @@ static OpCode OpCodeTable[1024]={
|
||||
/* 0x120 - 0x127 */
|
||||
{L_MODRM ,O_M_Rd_CRx ,S_Ed ,0 },{L_MODRM ,O_M_Rd_DRx ,S_Ed ,0 },
|
||||
{L_MODRM ,O_M_CRx_Rd ,0 ,M_Ed },{L_MODRM ,O_M_DRx_Rd ,0 ,M_Ed },
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
{L_MODRM ,O_M_Rd_TRx ,S_Ed ,0 },{0 ,0 ,0 ,0 },
|
||||
{L_MODRM ,O_M_TRx_Rd ,0 ,M_Ed },{0 ,0 ,0 ,0 },
|
||||
|
||||
/* 0x128 - 0x12f */
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
@ -562,8 +562,8 @@ static OpCode OpCodeTable[1024]={
|
||||
/* 0x320 - 0x327 */
|
||||
{L_MODRM ,O_M_Rd_CRx ,S_Ed ,0 },{L_MODRM ,O_M_Rd_DRx ,S_Ed ,0 },
|
||||
{L_MODRM ,O_M_CRx_Rd ,0 ,M_Ed },{L_MODRM ,O_M_DRx_Rd ,0 ,M_Ed },
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
{L_MODRM ,O_M_Rd_TRx ,S_Ed ,0 },{0 ,0 ,0 ,0 },
|
||||
{L_MODRM ,O_M_TRx_Rd ,0 ,M_Ed },{0 ,0 ,0 ,0 },
|
||||
|
||||
/* 0x328 - 0x32f */
|
||||
{0 ,0 ,0 ,0 },{0 ,0 ,0 ,0 },
|
||||
|
@ -86,6 +86,7 @@ enum {
|
||||
O_GRP7w,O_GRP7d,
|
||||
O_M_CRx_Rd,O_M_Rd_CRx,
|
||||
O_M_DRx_Rd,O_M_Rd_DRx,
|
||||
O_M_TRx_Rd,O_M_Rd_TRx,
|
||||
O_LAR,O_LSL,
|
||||
O_ARPL,
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -26,6 +26,7 @@
|
||||
#include "callback.h"
|
||||
#include "pic.h"
|
||||
#include "fpu.h"
|
||||
#include "paging.h"
|
||||
|
||||
#if C_DEBUG
|
||||
#include "debug.h"
|
||||
@ -70,6 +71,7 @@ extern Bitu cycle_count;
|
||||
#define DO_PREFIX_SEG(_SEG) \
|
||||
BaseDS=SegBase(_SEG); \
|
||||
BaseSS=SegBase(_SEG); \
|
||||
core.base_val_ds=_SEG; \
|
||||
goto restart_opcode;
|
||||
|
||||
#define DO_PREFIX_ADDR() \
|
||||
@ -91,12 +93,10 @@ static struct {
|
||||
Bitu opcode_index;
|
||||
PhysPt cseip;
|
||||
PhysPt base_ds,base_ss;
|
||||
SegNames base_val_ds;
|
||||
bool rep_zero;
|
||||
Bitu prefixes;
|
||||
GetEAHandler * ea_table;
|
||||
struct {
|
||||
bool skip;
|
||||
} trap;
|
||||
} core;
|
||||
|
||||
#define GETIP (core.cseip-SegBase(cs))
|
||||
@ -144,6 +144,7 @@ Bits CPU_Core_Normal_Run(void) {
|
||||
core.ea_table=&EATable[cpu.code.big*256];
|
||||
BaseDS=SegBase(ds);
|
||||
BaseSS=SegBase(ss);
|
||||
core.base_val_ds=ds;
|
||||
#if C_DEBUG
|
||||
#if C_HEAVY_DEBUG
|
||||
if (DEBUG_HeavyIsBreakpoint()) {
|
||||
@ -190,10 +191,10 @@ decode_end:
|
||||
Bits CPU_Core_Normal_Trap_Run(void) {
|
||||
Bits oldCycles = CPU_Cycles;
|
||||
CPU_Cycles = 1;
|
||||
core.trap.skip=false;
|
||||
cpu.trap_skip = false;
|
||||
|
||||
Bits ret=CPU_Core_Normal_Run();
|
||||
if (!core.trap.skip) CPU_HW_Interrupt(1);
|
||||
if (!cpu.trap_skip) CPU_HW_Interrupt(1);
|
||||
CPU_Cycles = oldCycles-1;
|
||||
cpudecoder = &CPU_Core_Normal_Run;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -21,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -34,26 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/cpu/core_normal
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -80,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -110,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -120,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -129,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -154,43 +138,37 @@ target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
|
||||
noinst_HEADERS = helpers.h prefix_none.h prefix_66.h prefix_0f.h support.h table_ea.h \
|
||||
prefix_66_0f.h string.h
|
||||
|
||||
subdir = src/cpu/core_normal
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.in Makefile.am
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/cpu/core_normal/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/cpu/core_normal/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(AUTOMAKE) --gnu src/cpu/core_normal/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -199,7 +177,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -211,11 +188,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -238,6 +214,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -251,7 +231,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -269,6 +249,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -289,7 +270,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -306,8 +287,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -340,14 +319,14 @@ ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
ctags distclean distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic ctags \
|
||||
distclean distclean-generic distclean-tags distdir dvi dvi-am \
|
||||
info info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
|
||||
uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -92,6 +92,10 @@
|
||||
limit=LoadMw(eaa);
|
||||
if (CPU_LMSW(limit)) RUNEXCEPTION();
|
||||
break;
|
||||
case 0x07: /* INVLPG */
|
||||
if (cpu.pmode && cpu.cpl) EXCEPTION(EXCEPTION_GP);
|
||||
PAGING_ClearTLB();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
GetEArw;Bitu limit;
|
||||
@ -197,6 +201,32 @@
|
||||
if (CPU_WRITE_DRX(which,*eard)) RUNEXCEPTION();
|
||||
}
|
||||
break;
|
||||
CASE_0F_B(0x24) /* MOV Rd,TRx */
|
||||
{
|
||||
GetRM;
|
||||
Bitu which=(rm >> 3) & 7;
|
||||
if (rm < 0xc0 ) {
|
||||
rm |= 0xc0;
|
||||
LOG(LOG_CPU,LOG_ERROR)("MOV XXX,TR% with non-register",which);
|
||||
}
|
||||
GetEArd;
|
||||
Bit32u trx_value;
|
||||
if (CPU_READ_TRX(which,trx_value)) RUNEXCEPTION();
|
||||
*eard=trx_value;
|
||||
}
|
||||
break;
|
||||
CASE_0F_B(0x26) /* MOV TRx,Rd */
|
||||
{
|
||||
GetRM;
|
||||
Bitu which=(rm >> 3) & 7;
|
||||
if (rm < 0xc0 ) {
|
||||
rm |= 0xc0;
|
||||
LOG(LOG_CPU,LOG_ERROR)("MOV TR%,XXX with non-register",which);
|
||||
}
|
||||
GetEArd;
|
||||
if (CPU_WRITE_TRX(which,*eard)) RUNEXCEPTION();
|
||||
}
|
||||
break;
|
||||
CASE_0F_W(0x80) /* JO */
|
||||
JumpCond16_w(TFLG_O);break;
|
||||
CASE_0F_W(0x81) /* JNO */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -492,7 +492,7 @@
|
||||
}
|
||||
break;
|
||||
CASE_D(0xc9) /* LEAVE */
|
||||
reg_esp&=~cpu.stack.mask;
|
||||
reg_esp&=cpu.stack.notmask;
|
||||
reg_esp|=(reg_ebp&cpu.stack.mask);
|
||||
reg_ebp=Pop_32();
|
||||
break;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -94,6 +94,10 @@
|
||||
limit=LoadMw(eaa);
|
||||
if (CPU_LMSW((Bit16u)limit)) RUNEXCEPTION();
|
||||
break;
|
||||
case 0x07: /* INVLPG */
|
||||
if (cpu.pmode && cpu.cpl) EXCEPTION(EXCEPTION_GP);
|
||||
PAGING_ClearTLB();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
GetEArd;Bitu limit;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -431,7 +431,19 @@
|
||||
{
|
||||
GetRMrb;
|
||||
if (rm >= 0xc0 ) {GetEArb;*earb=*rmrb;}
|
||||
else {GetEAa;SaveMb(eaa,*rmrb);}
|
||||
else {
|
||||
if (cpu.pmode) {
|
||||
if (GCC_UNLIKELY((rm==0x05) && (!cpu.code.big))) {
|
||||
Descriptor desc;
|
||||
cpu.gdt.GetDescriptor(SegValue(core.base_val_ds),desc);
|
||||
if ((desc.Type()==DESC_CODE_R_NC_A) || (desc.Type()==DESC_CODE_R_NC_NA)) {
|
||||
CPU_Exception(EXCEPTION_GP,SegValue(core.base_val_ds) & 0xfffc);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
GetEAa;SaveMb(eaa,*rmrb);
|
||||
}
|
||||
break;
|
||||
}
|
||||
CASE_W(0x89) /* MOV Ew,Gw */
|
||||
@ -712,7 +724,7 @@
|
||||
}
|
||||
break;
|
||||
CASE_W(0xc9) /* LEAVE */
|
||||
reg_esp&=~cpu.stack.mask;
|
||||
reg_esp&=cpu.stack.notmask;
|
||||
reg_esp|=(reg_ebp&cpu.stack.mask);
|
||||
reg_bp=Pop_16();
|
||||
break;
|
||||
@ -735,7 +747,7 @@
|
||||
#endif
|
||||
CPU_SW_Interrupt_NoIOPLCheck(3,GETIP);
|
||||
#if CPU_TRAP_CHECK
|
||||
core.trap.skip=true;
|
||||
cpu.trap_skip=true;
|
||||
#endif
|
||||
continue;
|
||||
CASE_B(0xcd) /* INT Ib */
|
||||
@ -749,7 +761,7 @@
|
||||
#endif
|
||||
CPU_SW_Interrupt(num,GETIP);
|
||||
#if CPU_TRAP_CHECK
|
||||
core.trap.skip=true;
|
||||
cpu.trap_skip=true;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -758,7 +770,7 @@
|
||||
FillFlags();
|
||||
CPU_SW_Interrupt(4,GETIP);
|
||||
#if CPU_TRAP_CHECK
|
||||
core.trap.skip=true;
|
||||
cpu.trap_skip=true;
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
@ -944,7 +956,7 @@
|
||||
FillFlags();
|
||||
CPU_SW_Interrupt_NoIOPLCheck(1,GETIP);
|
||||
#if CPU_TRAP_CHECK
|
||||
core.trap.skip=true;
|
||||
cpu.trap_skip=true;
|
||||
#endif
|
||||
continue;
|
||||
CASE_B(0xf2) /* REPNZ */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -63,6 +63,7 @@ extern Bitu cycle_count;
|
||||
#define DO_PREFIX_SEG(_SEG) \
|
||||
BaseDS=SegBase(_SEG); \
|
||||
BaseSS=SegBase(_SEG); \
|
||||
core.base_val_ds=_SEG; \
|
||||
goto restart_opcode;
|
||||
|
||||
#define DO_PREFIX_ADDR() \
|
||||
@ -82,14 +83,16 @@ static const Bit32u AddrMaskTable[2]={0x0000ffff,0xffffffff};
|
||||
|
||||
static struct {
|
||||
Bitu opcode_index;
|
||||
#if defined (_MSC_VER)
|
||||
volatile HostPt cseip;
|
||||
#else
|
||||
HostPt cseip;
|
||||
#endif
|
||||
PhysPt base_ds,base_ss;
|
||||
SegNames base_val_ds;
|
||||
bool rep_zero;
|
||||
Bitu prefixes;
|
||||
GetEAHandler * ea_table;
|
||||
struct {
|
||||
bool skip;
|
||||
} trap;
|
||||
} core;
|
||||
|
||||
#define GETIP (core.cseip-SegBase(cs)-MemBase)
|
||||
@ -137,6 +140,7 @@ Bits CPU_Core_Simple_Run(void) {
|
||||
core.ea_table=&EATable[cpu.code.big*256];
|
||||
BaseDS=SegBase(ds);
|
||||
BaseSS=SegBase(ss);
|
||||
core.base_val_ds=ds;
|
||||
#if C_DEBUG
|
||||
#if C_HEAVY_DEBUG
|
||||
if (DEBUG_HeavyIsBreakpoint()) {
|
||||
@ -181,16 +185,16 @@ decode_end:
|
||||
return CBRET_NONE;
|
||||
}
|
||||
|
||||
// not really used
|
||||
Bits CPU_Core_Simple_Trap_Run(void) {
|
||||
|
||||
Bits oldCycles = CPU_Cycles;
|
||||
CPU_Cycles = 1;
|
||||
core.trap.skip=false;
|
||||
cpu.trap_skip = false;
|
||||
|
||||
Bits ret=CPU_Core_Normal_Run();
|
||||
if (!core.trap.skip) CPU_SW_Interrupt(1,reg_eip);
|
||||
if (!cpu.trap_skip) CPU_HW_Interrupt(1);
|
||||
CPU_Cycles = oldCycles-1;
|
||||
cpudecoder = &CPU_Core_Normal_Run;
|
||||
cpudecoder = &CPU_Core_Simple_Run;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
280
src/cpu/cpu.cpp
280
src/cpu/cpu.cpp
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,9 +16,10 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: cpu.cpp,v 1.79 2006/02/26 16:11:00 qbix79 Exp $ */
|
||||
/* $Id: cpu.cpp,v 1.98 2007/02/22 08:35:34 qbix79 Exp $ */
|
||||
|
||||
#include <assert.h>
|
||||
#include <sstream>
|
||||
#include "dosbox.h"
|
||||
#include "cpu.h"
|
||||
#include "memory.h"
|
||||
@ -29,29 +30,42 @@
|
||||
#include "support.h"
|
||||
|
||||
Bitu DEBUG_EnableDebugger(void);
|
||||
extern void GFX_SetTitle(Bit32s cycles ,Bits frameskip,bool paused);
|
||||
|
||||
#if 1
|
||||
#undef LOG
|
||||
#if defined (_MSC_VER)
|
||||
#define LOG(X,Y)
|
||||
#else
|
||||
#define LOG(X,Y) CPU_LOG
|
||||
#define CPU_LOG(...)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
CPU_Regs cpu_regs;
|
||||
CPUBlock cpu;
|
||||
Segments Segs;
|
||||
|
||||
Bits CPU_Cycles = 0;
|
||||
Bits CPU_CycleLeft = 0;
|
||||
Bits CPU_CycleMax = 2500;
|
||||
Bits CPU_CycleUp = 0;
|
||||
Bits CPU_CycleDown = 0;
|
||||
Bit32s CPU_Cycles = 0;
|
||||
Bit32s CPU_CycleLeft = 0;
|
||||
Bit32s CPU_CycleMax = 3000;
|
||||
Bit32s CPU_OldCycleMax = 3000;
|
||||
Bit32s CPU_CyclePercUsed = 100;
|
||||
Bit32s CPU_CycleLimit = -1;
|
||||
Bit32s CPU_CycleUp = 0;
|
||||
Bit32s CPU_CycleDown = 0;
|
||||
Bit64s CPU_IODelayRemoved = 0;
|
||||
CPU_Decoder * cpudecoder;
|
||||
bool CPU_CycleAuto;
|
||||
bool CPU_CycleAutoAdjust;
|
||||
Bitu CPU_AutoDetermineMode;
|
||||
|
||||
void CPU_Core_Full_Init(void);
|
||||
void CPU_Core_Normal_Init(void);
|
||||
void CPU_Core_Simple_Init(void);
|
||||
void CPU_Core_Dyn_X86_Init(void);
|
||||
void CPU_Core_Dyn_X86_Cache_Init(bool enable_cache);
|
||||
void CPU_Core_Dyn_X86_Cache_Close(void);
|
||||
void CPU_Core_Dyn_X86_SetFPUMode(bool dh_fpu);
|
||||
|
||||
/* In debug mode exceptions are tested and dosbox exits when
|
||||
* a unhandled exception state is detected.
|
||||
@ -90,26 +104,26 @@ void CPU_Core_Dyn_X86_Cache_Init(bool enable_cache);
|
||||
|
||||
|
||||
void CPU_Push16(Bitu value) {
|
||||
Bit32u new_esp=(reg_esp&~cpu.stack.mask)|((reg_esp-2)&cpu.stack.mask);
|
||||
Bit32u new_esp=(reg_esp&cpu.stack.notmask)|((reg_esp-2)&cpu.stack.mask);
|
||||
mem_writew(SegPhys(ss) + (new_esp & cpu.stack.mask) ,value);
|
||||
reg_esp=new_esp;
|
||||
}
|
||||
|
||||
void CPU_Push32(Bitu value) {
|
||||
Bit32u new_esp=(reg_esp&~cpu.stack.mask)|((reg_esp-4)&cpu.stack.mask);
|
||||
Bit32u new_esp=(reg_esp&cpu.stack.notmask)|((reg_esp-4)&cpu.stack.mask);
|
||||
mem_writed(SegPhys(ss) + (new_esp & cpu.stack.mask) ,value);
|
||||
reg_esp=new_esp;
|
||||
}
|
||||
|
||||
Bitu CPU_Pop16(void) {
|
||||
Bitu val=mem_readw(SegPhys(ss) + (reg_esp & cpu.stack.mask));
|
||||
reg_esp=(reg_esp&~cpu.stack.mask)|((reg_esp+2)&cpu.stack.mask);
|
||||
reg_esp=(reg_esp&cpu.stack.notmask)|((reg_esp+2)&cpu.stack.mask);
|
||||
return val;
|
||||
}
|
||||
|
||||
Bitu CPU_Pop32(void) {
|
||||
Bitu val=mem_readd(SegPhys(ss) + (reg_esp & cpu.stack.mask));
|
||||
reg_esp=(reg_esp&~cpu.stack.mask)|((reg_esp+4)&cpu.stack.mask);
|
||||
reg_esp=(reg_esp&cpu.stack.notmask)|((reg_esp+4)&cpu.stack.mask);
|
||||
return val;
|
||||
}
|
||||
|
||||
@ -401,7 +415,8 @@ doconforming:
|
||||
CPU_SetSegGeneral(fs,new_fs);
|
||||
CPU_SetSegGeneral(gs,new_gs);
|
||||
if (!cpu_tss.SetSelector(new_tss_selector)) LOG(LOG_CPU,LOG_NORMAL)("TaskSwitch: set tss selector %X failed",new_tss_selector);
|
||||
cpu_tss.desc.SetBusy(true);
|
||||
// cpu_tss.desc.SetBusy(true);
|
||||
// cpu_tss.SaveSelector();
|
||||
// LOG_MSG("Task CPL %X CS:%X IP:%X SS:%X SP:%X eflags %x",cpu.cpl,SegValue(cs),reg_eip,SegValue(ss),reg_esp,reg_flags);
|
||||
return true;
|
||||
}
|
||||
@ -409,11 +424,11 @@ doconforming:
|
||||
bool CPU_IO_Exception(Bitu port,Bitu size) {
|
||||
if (cpu.pmode && ((GETFLAG_IOPL<cpu.cpl) || GETFLAG(VM))) {
|
||||
if (!cpu_tss.is386) goto doexception;
|
||||
PhysPt where=cpu_tss.base+0x66;
|
||||
Bitu ofs=mem_readw(where);
|
||||
PhysPt bwhere=cpu_tss.base+0x66;
|
||||
Bitu ofs=mem_readw(bwhere);
|
||||
if (ofs>cpu_tss.limit) goto doexception;
|
||||
where=cpu_tss.base+ofs+(port/8);
|
||||
Bitu map=mem_readw(where);
|
||||
bwhere=cpu_tss.base+ofs+(port/8);
|
||||
Bitu map=mem_readw(bwhere);
|
||||
Bitu mask=(0xffff>>(16-size)) << (port&7);
|
||||
if (map & mask) goto doexception;
|
||||
}
|
||||
@ -438,8 +453,9 @@ void CPU_Interrupt(Bitu num,Bitu type,Bitu oldeip) {
|
||||
#if C_HEAVY_DEBUG
|
||||
LOG(LOG_CPU,LOG_ERROR)("Call to interrupt 0xCD this is BAD");
|
||||
DEBUG_HeavyWriteLogInstruction();
|
||||
#endif
|
||||
E_Exit("Call to interrupt 0xCD this is BAD");
|
||||
#endif
|
||||
break;
|
||||
case 0x03:
|
||||
if (DEBUG_Breakpoint()) {
|
||||
CPU_Cycles=0;
|
||||
@ -552,10 +568,12 @@ void CPU_Interrupt(Bitu num,Bitu type,Bitu oldeip) {
|
||||
if (n_ss_desc.Big()) {
|
||||
cpu.stack.big=true;
|
||||
cpu.stack.mask=0xffffffff;
|
||||
cpu.stack.notmask=0;
|
||||
reg_esp=n_esp;
|
||||
} else {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
reg_sp=n_esp & 0xffff;
|
||||
}
|
||||
|
||||
@ -814,10 +832,12 @@ void CPU_IRET(bool use32,Bitu oldeip) {
|
||||
if (n_ss_desc.Big()) {
|
||||
cpu.stack.big=true;
|
||||
cpu.stack.mask=0xffffffff;
|
||||
cpu.stack.notmask=0;
|
||||
reg_esp=n_esp;
|
||||
} else {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
reg_sp=n_esp & 0xffff;
|
||||
}
|
||||
|
||||
@ -1070,10 +1090,12 @@ call_code:
|
||||
if (n_ss_desc.Big()) {
|
||||
cpu.stack.big=true;
|
||||
cpu.stack.mask=0xffffffff;
|
||||
cpu.stack.notmask=0;
|
||||
reg_esp=n_esp;
|
||||
} else {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
reg_sp=n_esp & 0xffff;
|
||||
}
|
||||
|
||||
@ -1141,9 +1163,12 @@ call_code:
|
||||
LOG(LOG_CPU,LOG_NORMAL)("CALL:TSS to %X",selector);
|
||||
CPU_SwitchTask(selector,TSwitch_CALL_INT,oldeip);
|
||||
break;
|
||||
case DESC_INVALID:
|
||||
// used by some installers
|
||||
CPU_Exception(EXCEPTION_GP,selector & 0xfffc);
|
||||
return;
|
||||
default:
|
||||
E_Exit("CALL:Descriptor type %x unsupported",call.Type());
|
||||
|
||||
}
|
||||
}
|
||||
assert(1);
|
||||
@ -1303,10 +1328,12 @@ RET_same_level:
|
||||
if (n_ss_desc.Big()) {
|
||||
cpu.stack.big=true;
|
||||
cpu.stack.mask=0xffffffff;
|
||||
cpu.stack.notmask=0;
|
||||
reg_esp=n_esp+bytes;
|
||||
} else {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
reg_sp=(n_esp & 0xffff)+bytes;
|
||||
}
|
||||
|
||||
@ -1385,6 +1412,7 @@ bool CPU_LTR(Bitu selector) {
|
||||
}
|
||||
if (!cpu_tss.SetSelector(selector)) E_Exit("LTR failed, selector=%X",selector);
|
||||
cpu_tss.desc.SetBusy(true);
|
||||
cpu_tss.SaveSelector();
|
||||
} else {
|
||||
/* Descriptor was no available TSS descriptor */
|
||||
LOG(LOG_CPU,LOG_NORMAL)("LTR failed, selector=%X (type=%X)",selector,desc.Type());
|
||||
@ -1420,13 +1448,32 @@ void CPU_SET_CRX(Bitu cr,Bitu value) {
|
||||
switch (cr) {
|
||||
case 0:
|
||||
{
|
||||
Bitu changed=cpu.cr0 ^ value;
|
||||
Bitu changed=cpu.cr0 ^ value;
|
||||
if (!changed) return;
|
||||
cpu.cr0=value;
|
||||
if (value & CR0_PROTECTION) {
|
||||
cpu.pmode=true;
|
||||
LOG(LOG_CPU,LOG_NORMAL)("Protected mode");
|
||||
PAGING_Enable((value & CR0_PAGING)>0);
|
||||
|
||||
if (!(CPU_AutoDetermineMode&CPU_AUTODETERMINE_MASK)) break;
|
||||
|
||||
if (CPU_AutoDetermineMode&CPU_AUTODETERMINE_CYCLES) {
|
||||
CPU_CycleAutoAdjust=true;
|
||||
CPU_CycleLeft=0;
|
||||
CPU_Cycles=0;
|
||||
CPU_OldCycleMax=CPU_CycleMax;
|
||||
GFX_SetTitle(CPU_CyclePercUsed,-1,false);
|
||||
} else {
|
||||
GFX_SetTitle(-1,-1,false);
|
||||
}
|
||||
#if (C_DYNAMIC_X86)
|
||||
if (CPU_AutoDetermineMode&CPU_AUTODETERMINE_CORE) {
|
||||
CPU_Core_Dyn_X86_Cache_Init(true);
|
||||
cpudecoder=&CPU_Core_Dyn_X86_Run;
|
||||
}
|
||||
#endif
|
||||
CPU_AutoDetermineMode<<=CPU_AUTODETERMINE_SHIFT;
|
||||
} else {
|
||||
cpu.pmode=false;
|
||||
if (value & CR0_PAGING) LOG_MSG("Paging requested without PE=1");
|
||||
@ -1530,6 +1577,38 @@ bool CPU_READ_DRX(Bitu dr,Bit32u & retvalue) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CPU_WRITE_TRX(Bitu tr,Bitu value) {
|
||||
/* Check if privileged to access control registers */
|
||||
if (cpu.pmode && (cpu.cpl>0)) return CPU_PrepareException(EXCEPTION_GP,0);
|
||||
switch (tr) {
|
||||
// case 3:
|
||||
case 6:
|
||||
case 7:
|
||||
cpu.trx[tr]=value;
|
||||
return false;
|
||||
default:
|
||||
LOG(LOG_CPU,LOG_ERROR)("Unhandled MOV TR%d,%X",tr,value);
|
||||
break;
|
||||
}
|
||||
return CPU_PrepareException(EXCEPTION_UD,0);
|
||||
}
|
||||
|
||||
bool CPU_READ_TRX(Bitu tr,Bit32u & retvalue) {
|
||||
/* Check if privileged to access control registers */
|
||||
if (cpu.pmode && (cpu.cpl>0)) return CPU_PrepareException(EXCEPTION_GP,0);
|
||||
switch (tr) {
|
||||
// case 3:
|
||||
case 6:
|
||||
case 7:
|
||||
retvalue=cpu.trx[tr];
|
||||
return false;
|
||||
default:
|
||||
LOG(LOG_CPU,LOG_ERROR)("Unhandled MOV XXX, TR%d",tr);
|
||||
break;
|
||||
}
|
||||
return CPU_PrepareException(EXCEPTION_UD,0);
|
||||
}
|
||||
|
||||
|
||||
void CPU_SMSW(Bitu & word) {
|
||||
word=cpu.cr0;
|
||||
@ -1712,6 +1791,7 @@ bool CPU_SetSegGeneral(SegNames seg,Bitu value) {
|
||||
if (seg==ss) {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
@ -1741,8 +1821,8 @@ bool CPU_SetSegGeneral(SegNames seg,Bitu value) {
|
||||
}
|
||||
|
||||
if (!desc.saved.seg.p) {
|
||||
E_Exit("CPU_SetSegGeneral: Stack segment not present"); // or #SS(sel)
|
||||
// return CPU_PrepareException(EXCEPTION_SS,value & 0xfffc);
|
||||
// E_Exit("CPU_SetSegGeneral: Stack segment not present"); // or #SS(sel)
|
||||
return CPU_PrepareException(EXCEPTION_SS,value & 0xfffc);
|
||||
}
|
||||
|
||||
Segs.val[seg]=value;
|
||||
@ -1750,9 +1830,11 @@ bool CPU_SetSegGeneral(SegNames seg,Bitu value) {
|
||||
if (desc.Big()) {
|
||||
cpu.stack.big=true;
|
||||
cpu.stack.mask=0xffffffff;
|
||||
cpu.stack.notmask=0;
|
||||
} else {
|
||||
cpu.stack.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
}
|
||||
} else {
|
||||
if ((value & 0xfffc)==0) {
|
||||
@ -1799,7 +1881,7 @@ bool CPU_PopSeg(SegNames seg,bool use32) {
|
||||
Bitu val=mem_readw(SegPhys(ss) + (reg_esp & cpu.stack.mask));
|
||||
if (CPU_SetSegGeneral(seg,val)) return true;
|
||||
Bitu addsp=use32?0x04:0x02;
|
||||
reg_esp=(reg_esp&~cpu.stack.mask)|((reg_esp+addsp)&cpu.stack.mask);
|
||||
reg_esp=(reg_esp&cpu.stack.notmask)|((reg_esp+addsp)&cpu.stack.mask);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1872,38 +1954,49 @@ void CPU_ENTER(bool use32,Bitu bytes,Bitu level) {
|
||||
}
|
||||
}
|
||||
sp_index-=bytes;
|
||||
reg_esp=(reg_esp&~cpu.stack.mask)|((sp_index)&cpu.stack.mask);
|
||||
reg_esp=(reg_esp&cpu.stack.notmask)|((sp_index)&cpu.stack.mask);
|
||||
}
|
||||
|
||||
extern void GFX_SetTitle(Bits cycles ,Bits frameskip,bool paused);
|
||||
static void CPU_CycleIncrease(bool pressed) {
|
||||
if (!pressed || CPU_CycleAuto)
|
||||
return;
|
||||
Bits old_cycles=CPU_CycleMax;
|
||||
if(CPU_CycleUp < 100){
|
||||
CPU_CycleMax = (Bits)(CPU_CycleMax * (1 + (float)CPU_CycleUp / 100.0));
|
||||
if (!pressed) return;
|
||||
if (CPU_CycleAutoAdjust) {
|
||||
CPU_CyclePercUsed+=5;
|
||||
if (CPU_CyclePercUsed>100) CPU_CyclePercUsed=100;
|
||||
LOG_MSG("CPU:%d percent",CPU_CyclePercUsed);
|
||||
GFX_SetTitle(CPU_CyclePercUsed,-1,false);
|
||||
} else {
|
||||
CPU_CycleMax = (Bits)(CPU_CycleMax + CPU_CycleUp);
|
||||
Bit32s old_cycles=CPU_CycleMax;
|
||||
if (CPU_CycleUp < 100) {
|
||||
CPU_CycleMax = (Bit32s)(CPU_CycleMax * (1 + (float)CPU_CycleUp / 100.0));
|
||||
} else {
|
||||
CPU_CycleMax = (Bit32s)(CPU_CycleMax + CPU_CycleUp);
|
||||
}
|
||||
|
||||
CPU_CycleLeft=0;CPU_Cycles=0;
|
||||
if (CPU_CycleMax==old_cycles) CPU_CycleMax++;
|
||||
LOG_MSG("CPU:%d cycles",CPU_CycleMax);
|
||||
GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
}
|
||||
|
||||
CPU_CycleLeft=0;CPU_Cycles=0;
|
||||
if (CPU_CycleMax==old_cycles) CPU_CycleMax++;
|
||||
LOG_MSG("CPU:%d cycles",CPU_CycleMax);
|
||||
GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
}
|
||||
|
||||
static void CPU_CycleDecrease(bool pressed) {
|
||||
if (!pressed || CPU_CycleAuto)
|
||||
return;
|
||||
if(CPU_CycleDown < 100){
|
||||
CPU_CycleMax = (Bits)(CPU_CycleMax / (1 + (float)CPU_CycleDown / 100.0));
|
||||
if (!pressed) return;
|
||||
if (CPU_CycleAutoAdjust) {
|
||||
CPU_CyclePercUsed-=5;
|
||||
if (CPU_CyclePercUsed<=0) CPU_CyclePercUsed=1;
|
||||
LOG_MSG("CPU:%d percent",CPU_CyclePercUsed);
|
||||
GFX_SetTitle(CPU_CyclePercUsed,-1,false);
|
||||
} else {
|
||||
CPU_CycleMax = (Bits)(CPU_CycleMax - CPU_CycleDown);
|
||||
if (CPU_CycleDown < 100) {
|
||||
CPU_CycleMax = (Bit32s)(CPU_CycleMax / (1 + (float)CPU_CycleDown / 100.0));
|
||||
} else {
|
||||
CPU_CycleMax = (Bit32s)(CPU_CycleMax - CPU_CycleDown);
|
||||
}
|
||||
CPU_CycleLeft=0;CPU_Cycles=0;
|
||||
if (CPU_CycleMax <= 0) CPU_CycleMax=1;
|
||||
LOG_MSG("CPU:%d cycles",CPU_CycleMax);
|
||||
GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
}
|
||||
CPU_CycleLeft=0;CPU_Cycles=0;
|
||||
if (CPU_CycleMax <= 0) CPU_CycleMax=1;
|
||||
LOG_MSG("CPU:%d cycles",CPU_CycleMax);
|
||||
GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
}
|
||||
|
||||
class CPU: public Module_base {
|
||||
@ -1938,11 +2031,16 @@ public:
|
||||
CPU_SET_CRX(0,0); //Initialize
|
||||
cpu.code.big=false;
|
||||
cpu.stack.mask=0xffff;
|
||||
cpu.stack.notmask=0xffff0000;
|
||||
cpu.stack.big=false;
|
||||
cpu.trap_skip=false;
|
||||
cpu.idt.SetBase(0);
|
||||
cpu.idt.SetLimit(1023);
|
||||
|
||||
for (Bitu i=0; i<7; i++) cpu.drx[i]=0;
|
||||
for (Bitu i=0; i<7; i++) {
|
||||
cpu.drx[i]=0;
|
||||
cpu.trx[i]=0;
|
||||
}
|
||||
cpu.drx[6]=0xffff1ff0;
|
||||
cpu.drx[7]=0x00000400;
|
||||
|
||||
@ -1960,15 +2058,78 @@ public:
|
||||
}
|
||||
bool Change_Config(Section* newconfig){
|
||||
Section_prop * section=static_cast<Section_prop *>(newconfig);
|
||||
CPU_AutoDetermineMode=CPU_AUTODETERMINE_NONE;
|
||||
CPU_CycleLeft=0;//needed ?
|
||||
CPU_Cycles=0;
|
||||
const char *cyclesLine = section->Get_string("cycles");
|
||||
if (!strcasecmp(cyclesLine,"auto")) {
|
||||
|
||||
std::string str;
|
||||
CommandLine cmd(0,section->Get_string("cycles"));
|
||||
cmd.FindCommand(1,str);
|
||||
|
||||
if (str=="max") {
|
||||
CPU_CycleMax=0;
|
||||
CPU_CycleAuto=true;
|
||||
CPU_CyclePercUsed=100;
|
||||
CPU_CycleAutoAdjust=true;
|
||||
CPU_CycleLimit=-1;
|
||||
for (Bitu cmdnum=2; cmdnum<=cmd.GetCount(); cmdnum++) {
|
||||
if (cmd.FindCommand(cmdnum,str)) {
|
||||
if (str.find('%')==str.length()-1) {
|
||||
str.erase(str.find('%'));
|
||||
int percval=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> percval;
|
||||
if ((percval>0) && (percval<=100)) CPU_CyclePercUsed=(Bit32s)percval;
|
||||
} else if (str=="limit") {
|
||||
cmdnum++;
|
||||
if (cmd.FindCommand(cmdnum,str)) {
|
||||
int cyclimit=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> cyclimit;
|
||||
if (cyclimit>0) CPU_CycleLimit=cyclimit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
CPU_CycleMax=atoi(cyclesLine);
|
||||
CPU_CycleAuto=false;
|
||||
if (str=="auto") {
|
||||
CPU_AutoDetermineMode|=CPU_AUTODETERMINE_CYCLES;
|
||||
CPU_CycleMax=3000;
|
||||
CPU_OldCycleMax=3000;
|
||||
CPU_CyclePercUsed=100;
|
||||
for (Bitu cmdnum=2; cmdnum<=cmd.GetCount(); cmdnum++) {
|
||||
if (cmd.FindCommand(cmdnum,str)) {
|
||||
if (str.find('%')==str.length()-1) {
|
||||
str.erase(str.find('%'));
|
||||
int percval=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> percval;
|
||||
if ((percval>0) && (percval<=100)) CPU_CyclePercUsed=(Bit32s)percval;
|
||||
} else if (str=="limit") {
|
||||
cmdnum++;
|
||||
if (cmd.FindCommand(cmdnum,str)) {
|
||||
int cyclimit=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> cyclimit;
|
||||
if (cyclimit>0) CPU_CycleLimit=cyclimit;
|
||||
}
|
||||
} else {
|
||||
int rmdval=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> rmdval;
|
||||
if (rmdval>0) {
|
||||
CPU_CycleMax=(Bit32s)rmdval;
|
||||
CPU_OldCycleMax=(Bit32s)rmdval;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int rmdval=0;
|
||||
std::istringstream stream(str);
|
||||
stream >> rmdval;
|
||||
CPU_CycleMax=(Bit32s)rmdval;
|
||||
}
|
||||
CPU_CycleAutoAdjust=false;
|
||||
}
|
||||
CPU_CycleUp=section->Get_int("cycleup");
|
||||
CPU_CycleDown=section->Get_int("cycledown");
|
||||
@ -1984,6 +2145,13 @@ public:
|
||||
#if (C_DYNAMIC_X86)
|
||||
else if (!strcasecmp(core,"dynamic")) {
|
||||
cpudecoder=&CPU_Core_Dyn_X86_Run;
|
||||
CPU_Core_Dyn_X86_SetFPUMode(true);
|
||||
} else if (!strcasecmp(core,"dynamic_nodhfpu")) {
|
||||
cpudecoder=&CPU_Core_Dyn_X86_Run;
|
||||
CPU_Core_Dyn_X86_SetFPUMode(false);
|
||||
} else if (!strcasecmp(core,"auto")) {
|
||||
cpudecoder=&CPU_Core_Normal_Run;
|
||||
CPU_AutoDetermineMode|=CPU_AUTODETERMINE_CORE;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
@ -1991,13 +2159,14 @@ public:
|
||||
}
|
||||
|
||||
#if (C_DYNAMIC_X86)
|
||||
CPU_Core_Dyn_X86_Cache_Init(!strcasecmp(core,"dynamic"));
|
||||
CPU_Core_Dyn_X86_Cache_Init(!strcasecmp(core,"dynamic") || !strcasecmp(core,"dynamic_nodhfpu"));
|
||||
#endif
|
||||
|
||||
if(CPU_CycleMax <= 0) CPU_CycleMax = 2500;
|
||||
if(CPU_CycleMax <= 0) CPU_CycleMax = 3000;
|
||||
if(CPU_CycleUp <= 0) CPU_CycleUp = 500;
|
||||
if(CPU_CycleDown <= 0) CPU_CycleDown = 20;
|
||||
GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
if (CPU_CycleAutoAdjust) GFX_SetTitle(CPU_CyclePercUsed,-1,false);
|
||||
else GFX_SetTitle(CPU_CycleMax,-1,false);
|
||||
return true;
|
||||
}
|
||||
~CPU(){ /* empty */};
|
||||
@ -2006,6 +2175,9 @@ public:
|
||||
static CPU * test;
|
||||
|
||||
void CPU_ShutDown(Section* sec) {
|
||||
#if (C_DYNAMIC_X86)
|
||||
CPU_Core_Dyn_X86_Cache_Close();
|
||||
#endif
|
||||
delete test;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -597,6 +597,7 @@ Bitu FillFlags(void) {
|
||||
|
||||
case t_ORb:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFb;
|
||||
DOFLAG_SFb;
|
||||
SET_FLAG(OF,false);
|
||||
@ -604,6 +605,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_ORw:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFw;
|
||||
DOFLAG_SFw;
|
||||
SET_FLAG(OF,false);
|
||||
@ -611,6 +613,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_ORd:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFd;
|
||||
DOFLAG_SFd;
|
||||
SET_FLAG(OF,false);
|
||||
@ -621,6 +624,7 @@ Bitu FillFlags(void) {
|
||||
case t_TESTb:
|
||||
case t_ANDb:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFb;
|
||||
DOFLAG_SFb;
|
||||
SET_FLAG(OF,false);
|
||||
@ -629,6 +633,7 @@ Bitu FillFlags(void) {
|
||||
case t_TESTw:
|
||||
case t_ANDw:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFw;
|
||||
DOFLAG_SFw;
|
||||
SET_FLAG(OF,false);
|
||||
@ -637,6 +642,7 @@ Bitu FillFlags(void) {
|
||||
case t_TESTd:
|
||||
case t_ANDd:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFd;
|
||||
DOFLAG_SFd;
|
||||
SET_FLAG(OF,false);
|
||||
@ -646,6 +652,7 @@ Bitu FillFlags(void) {
|
||||
|
||||
case t_XORb:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFb;
|
||||
DOFLAG_SFb;
|
||||
SET_FLAG(OF,false);
|
||||
@ -653,6 +660,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_XORw:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFw;
|
||||
DOFLAG_SFw;
|
||||
SET_FLAG(OF,false);
|
||||
@ -660,6 +668,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_XORd:
|
||||
SET_FLAG(CF,false);
|
||||
SET_FLAG(AF,false);
|
||||
DOFLAG_ZFd;
|
||||
DOFLAG_SFd;
|
||||
SET_FLAG(OF,false);
|
||||
@ -792,21 +801,21 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
|
||||
case t_DECb:
|
||||
SET_FLAG(AF,(lf_resb & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resb & 0x0f) == 0x0f);
|
||||
DOFLAG_ZFb;
|
||||
DOFLAG_SFb;
|
||||
SET_FLAG(OF,(lf_resb == 0x7f));
|
||||
DOFLAG_PF;
|
||||
break;
|
||||
case t_DECw:
|
||||
SET_FLAG(AF,(lf_resw & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resw & 0x0f) == 0x0f);
|
||||
DOFLAG_ZFw;
|
||||
DOFLAG_SFw;
|
||||
SET_FLAG(OF,(lf_resw == 0x7fff));
|
||||
DOFLAG_PF;
|
||||
break;
|
||||
case t_DECd:
|
||||
SET_FLAG(AF,(lf_resd & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resd & 0x0f) == 0x0f);
|
||||
DOFLAG_ZFd;
|
||||
DOFLAG_SFd;
|
||||
SET_FLAG(OF,(lf_resd == 0x7fffffff));
|
||||
@ -815,7 +824,7 @@ Bitu FillFlags(void) {
|
||||
|
||||
case t_NEGb:
|
||||
SET_FLAG(CF,(lf_var1b!=0));
|
||||
SET_FLAG(AF,(lf_resb & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resb & 0x0f) != 0);
|
||||
DOFLAG_ZFb;
|
||||
DOFLAG_SFb;
|
||||
SET_FLAG(OF,(lf_var1b == 0x80));
|
||||
@ -823,7 +832,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_NEGw:
|
||||
SET_FLAG(CF,(lf_var1w!=0));
|
||||
SET_FLAG(AF,(lf_resw & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resw & 0x0f) != 0);
|
||||
DOFLAG_ZFw;
|
||||
DOFLAG_SFw;
|
||||
SET_FLAG(OF,(lf_var1w == 0x8000));
|
||||
@ -831,7 +840,7 @@ Bitu FillFlags(void) {
|
||||
break;
|
||||
case t_NEGd:
|
||||
SET_FLAG(CF,(lf_var1d!=0));
|
||||
SET_FLAG(AF,(lf_resd & 0x0f) == 0);
|
||||
SET_FLAG(AF,(lf_resd & 0x0f) != 0);
|
||||
DOFLAG_ZFd;
|
||||
DOFLAG_SFd;
|
||||
SET_FLAG(OF,(lf_var1d == 0x80000000));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
/* Jumps */
|
||||
|
||||
/* All Byte genereal instructions */
|
||||
/* All Byte general instructions */
|
||||
#define ADDB(op1,op2,load,save) \
|
||||
lf_var1b=load(op1);lf_var2b=op2; \
|
||||
lf_resb=lf_var1b+lf_var2b; \
|
||||
@ -228,7 +228,14 @@
|
||||
|
||||
|
||||
#define ROLB(op1,op2,load,save) \
|
||||
if (!(op2&0x7)) break; \
|
||||
if (!(op2&0x7)) { \
|
||||
if (op2&0x18) { \
|
||||
FillFlags(); \
|
||||
SETFLAGBIT(CF,op1 & 1); \
|
||||
SETFLAGBIT(OF,(op1 & 1) ^ (op1 >> 7)); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
FillFlags(); \
|
||||
lf_var1b=load(op1); \
|
||||
lf_var2b=op2&0x07; \
|
||||
@ -239,7 +246,13 @@
|
||||
SETFLAGBIT(OF,(lf_resb & 1) ^ (lf_resb >> 7));
|
||||
|
||||
#define ROLW(op1,op2,load,save) \
|
||||
if (!(op2&0xf)) break; \
|
||||
if (!(op2&0xf)) { \
|
||||
if (op2&0x10) { \
|
||||
FillFlags(); \
|
||||
SETFLAGBIT(CF,op1 & 1); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
FillFlags(); \
|
||||
lf_var1w=load(op1); \
|
||||
lf_var2b=op2&0xf; \
|
||||
@ -262,7 +275,14 @@
|
||||
|
||||
|
||||
#define RORB(op1,op2,load,save) \
|
||||
if (!(op2&0x7)) break; \
|
||||
if (!(op2&0x7)) { \
|
||||
if (op2&0x10) { \
|
||||
FillFlags(); \
|
||||
SETFLAGBIT(CF,op1>>7); \
|
||||
SETFLAGBIT(OF,(op1>>7) ^ ((op1>>6) & 1)); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
FillFlags(); \
|
||||
lf_var1b=load(op1); \
|
||||
lf_var2b=op2&0x07; \
|
||||
@ -273,7 +293,13 @@
|
||||
if (lf_var2b == 1) SETFLAGBIT(OF,(lf_resb ^ lf_var1b) & 0x80);
|
||||
|
||||
#define RORW(op1,op2,load,save) \
|
||||
if (!(op2&0xf)) break; \
|
||||
if (!(op2&0xf)) { \
|
||||
if (op2&0x10) { \
|
||||
FillFlags(); \
|
||||
SETFLAGBIT(CF,op1>>15); \
|
||||
} \
|
||||
break; \
|
||||
} \
|
||||
FillFlags(); \
|
||||
lf_var1w=load(op1); \
|
||||
lf_var2b=op2&0xf; \
|
||||
@ -470,43 +496,58 @@
|
||||
|
||||
#define DAA() \
|
||||
if (((reg_al & 0x0F)>0x09) || get_AF()) { \
|
||||
if ((reg_al > 0x99) || get_CF()) { \
|
||||
reg_al+=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
reg_al+=0x06; \
|
||||
SETFLAGBIT(AF,true); \
|
||||
} else { \
|
||||
if ((reg_al > 0x99) || get_CF()) { \
|
||||
reg_al+=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
SETFLAGBIT(AF,false); \
|
||||
} \
|
||||
if ((reg_al > 0x9F) || get_CF()) { \
|
||||
reg_al+=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
SETFLAGBIT(SF,(reg_al&0x80)); \
|
||||
SETFLAGBIT(ZF,(reg_al==0)); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]); \
|
||||
lflags.type=t_UNKNOWN;
|
||||
|
||||
|
||||
#define DAS() \
|
||||
if (((reg_al & 0x0f) > 9) || get_AF()) { \
|
||||
if ((reg_al>0x99) || get_CF()) { \
|
||||
reg_al-=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
reg_al-=6; \
|
||||
SETFLAGBIT(AF,true); \
|
||||
} else { \
|
||||
if ((reg_al>0x99) || get_CF()) { \
|
||||
reg_al-=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
SETFLAGBIT(AF,false); \
|
||||
} \
|
||||
if ((reg_al>0x9f) || get_CF()) { \
|
||||
reg_al-=0x60; \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
SETFLAGBIT(SF,(reg_al&0x80)); \
|
||||
SETFLAGBIT(ZF,(reg_al==0)); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]); \
|
||||
lflags.type=t_UNKNOWN;
|
||||
|
||||
|
||||
#define AAA() \
|
||||
if (get_AF() || ((reg_al & 0xf) > 9)) \
|
||||
{ \
|
||||
reg_al += 6; \
|
||||
reg_ah += 1; \
|
||||
reg_ax += 0x106; \
|
||||
SETFLAGBIT(AF,true); \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
@ -514,13 +555,15 @@
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
reg_al &= 0x0F; \
|
||||
lflags.type=t_UNKNOWN;
|
||||
lflags.type=t_UNKNOWN; \
|
||||
SETFLAGBIT(SF,0); \
|
||||
SETFLAGBIT(OF,0); \
|
||||
SETFLAGBIT(ZF,(reg_al == 0)); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]);
|
||||
|
||||
#define AAS() \
|
||||
if (((reg_al & 0x0f)>9) || get_AF()) { \
|
||||
reg_ah--; \
|
||||
if (reg_al < 6) reg_ah--; \
|
||||
reg_al=(reg_al-6) & 0xF; \
|
||||
reg_ax -= 0x106; \
|
||||
SETFLAGBIT(AF,true); \
|
||||
SETFLAGBIT(CF,true); \
|
||||
} else { \
|
||||
@ -528,18 +571,27 @@
|
||||
SETFLAGBIT(CF,false); \
|
||||
} \
|
||||
reg_al &= 0x0F; \
|
||||
lflags.type=t_UNKNOWN;
|
||||
lflags.type=t_UNKNOWN; \
|
||||
SETFLAGBIT(SF,0); \
|
||||
SETFLAGBIT(OF,0); \
|
||||
SETFLAGBIT(ZF,(reg_al == 0)); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]);
|
||||
|
||||
#define AAM(op1) \
|
||||
{ \
|
||||
Bit8u BLAH=op1; \
|
||||
reg_ah=reg_al / BLAH; \
|
||||
reg_al=reg_al % BLAH; \
|
||||
lflags.type=t_UNKNOWN; \
|
||||
{ \
|
||||
Bit8u dv=op1; \
|
||||
if (dv!=0) { \
|
||||
reg_ah=reg_al / dv; \
|
||||
reg_al=reg_al % dv; \
|
||||
SETFLAGBIT(SF,(reg_al & 0x80)); \
|
||||
SETFLAGBIT(ZF,(reg_al == 0)); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]); \
|
||||
}
|
||||
SETFLAGBIT(CF,0); \
|
||||
SETFLAGBIT(OF,0); \
|
||||
SETFLAGBIT(AF,0); \
|
||||
lflags.type=t_UNKNOWN; \
|
||||
} else EXCEPTION(0); \
|
||||
}
|
||||
|
||||
|
||||
//Took this from bochs, i seriously hate these weird bcd opcodes
|
||||
@ -547,12 +599,11 @@
|
||||
{ \
|
||||
Bit16u ax1 = reg_ah * op1; \
|
||||
Bit16u ax2 = ax1 + reg_al; \
|
||||
Bit8u old_al = reg_al; \
|
||||
reg_al = (Bit8u) ax2; \
|
||||
reg_ah = 0; \
|
||||
SETFLAGBIT(AF,(ax1 & 0x08) != (ax2 & 0x08)); \
|
||||
SETFLAGBIT(CF,ax2 > 0xff); \
|
||||
SETFLAGBIT(OF,(reg_al & 0x80) != (old_al & 0x80)); \
|
||||
SETFLAGBIT(CF,0); \
|
||||
SETFLAGBIT(OF,0); \
|
||||
SETFLAGBIT(AF,0); \
|
||||
SETFLAGBIT(SF,reg_al >= 0x80); \
|
||||
SETFLAGBIT(ZF,reg_al == 0); \
|
||||
SETFLAGBIT(PF,parity_lookup[reg_al]); \
|
||||
@ -562,6 +613,7 @@
|
||||
#define MULB(op1,load,save) \
|
||||
FillFlags(); \
|
||||
reg_ax=reg_al*load(op1); \
|
||||
SETFLAGBIT(ZF,reg_al == 0); \
|
||||
if (reg_ax & 0xff00) { \
|
||||
SETFLAGBIT(CF,true);SETFLAGBIT(OF,true); \
|
||||
} else { \
|
||||
@ -574,6 +626,7 @@
|
||||
Bitu tempu=(Bitu)reg_ax*(Bitu)(load(op1)); \
|
||||
reg_ax=(Bit16u)(tempu); \
|
||||
reg_dx=(Bit16u)(tempu >> 16); \
|
||||
SETFLAGBIT(ZF,reg_ax == 0); \
|
||||
if (reg_dx) { \
|
||||
SETFLAGBIT(CF,true);SETFLAGBIT(OF,true); \
|
||||
} else { \
|
||||
@ -587,6 +640,7 @@
|
||||
Bit64u tempu=(Bit64u)reg_eax*(Bit64u)(load(op1)); \
|
||||
reg_eax=(Bit32u)(tempu); \
|
||||
reg_edx=(Bit32u)(tempu >> 32); \
|
||||
SETFLAGBIT(ZF,reg_eax == 0); \
|
||||
if (reg_edx) { \
|
||||
SETFLAGBIT(CF,true);SETFLAGBIT(OF,true); \
|
||||
} else { \
|
||||
@ -611,7 +665,7 @@
|
||||
{ \
|
||||
Bitu val=load(op1); \
|
||||
if (val==0) EXCEPTION(0); \
|
||||
Bitu num=(reg_dx<<16)|reg_ax; \
|
||||
Bitu num=((Bit32u)reg_dx<<16)|reg_ax; \
|
||||
Bitu quo=num/val; \
|
||||
Bit16u rem=(Bit16u)(num % val); \
|
||||
Bit16u quo16=(Bit16u)(quo&0xffff); \
|
||||
@ -623,7 +677,7 @@
|
||||
#define DIVD(op1,load,save) \
|
||||
{ \
|
||||
Bitu val=load(op1); \
|
||||
if (!val) EXCEPTION(0); \
|
||||
if (val==0) EXCEPTION(0); \
|
||||
Bit64u num=(((Bit64u)reg_edx)<<32)|reg_eax; \
|
||||
Bit64u quo=num/val; \
|
||||
Bit32u rem=(Bit32u)(num % val); \
|
||||
@ -650,7 +704,7 @@
|
||||
#define IDIVW(op1,load,save) \
|
||||
{ \
|
||||
Bits val=(Bit16s)(load(op1)); \
|
||||
if (!val) EXCEPTION(0); \
|
||||
if (val==0) EXCEPTION(0); \
|
||||
Bits num=(Bit32s)((reg_dx<<16)|reg_ax); \
|
||||
Bits quo=num/val; \
|
||||
Bit16s rem=(Bit16s)(num % val); \
|
||||
@ -663,7 +717,7 @@
|
||||
#define IDIVD(op1,load,save) \
|
||||
{ \
|
||||
Bits val=(Bit32s)(load(op1)); \
|
||||
if (!val) EXCEPTION(0); \
|
||||
if (val==0) EXCEPTION(0); \
|
||||
Bit64s num=(((Bit64u)reg_edx)<<32)|reg_eax; \
|
||||
Bit64s quo=num/val; \
|
||||
Bit32s rem=(Bit32s)(num % val); \
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -52,7 +52,7 @@ Bitu PageHandler::readd(PhysPt addr) {
|
||||
(readb(addr+3) << 24);
|
||||
}
|
||||
|
||||
void PageHandler::writeb(PhysPt addr,Bitu val) {
|
||||
void PageHandler::writeb(PhysPt addr,Bitu /*val*/) {
|
||||
E_Exit("No byte handler for write to %d",addr);
|
||||
};
|
||||
|
||||
@ -67,11 +67,11 @@ void PageHandler::writed(PhysPt addr,Bitu val) {
|
||||
writeb(addr+3,(Bit8u) (val >> 24));
|
||||
};
|
||||
|
||||
HostPt PageHandler::GetHostReadPt(Bitu phys_page) {
|
||||
HostPt PageHandler::GetHostReadPt(Bitu /*phys_page*/) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
HostPt PageHandler::GetHostWritePt(Bitu phys_page) {
|
||||
HostPt PageHandler::GetHostWritePt(Bitu /*phys_page*/) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ static struct {
|
||||
static Bits PageFaultCore(void) {
|
||||
CPU_CycleLeft+=CPU_Cycles;
|
||||
CPU_Cycles=1;
|
||||
Bitu ret=CPU_Core_Full_Run();
|
||||
Bits ret=CPU_Core_Full_Run();
|
||||
CPU_CycleLeft+=CPU_Cycles;
|
||||
if (ret<0) E_Exit("Got a dosbox close machine in pagefault core?");
|
||||
if (ret)
|
||||
@ -395,7 +395,7 @@ void PAGING_Enable(bool enabled) {
|
||||
// LOG(LOG_PAGING,LOG_NORMAL)("Disabled");
|
||||
} else {
|
||||
if (cpudecoder==CPU_Core_Simple_Run) {
|
||||
LOG_MSG("CPU core simple won't run this game,switching to normal");
|
||||
// LOG_MSG("CPU core simple won't run this game,switching to normal");
|
||||
cpudecoder=CPU_Core_Normal_Run;
|
||||
CPU_CycleLeft+=CPU_Cycles;
|
||||
CPU_Cycles=0;
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -14,8 +14,6 @@
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(libdebug_a_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -23,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -36,44 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/debug
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
libdebug_a_AR = $(AR) $(ARFLAGS)
|
||||
libdebug_a_LIBADD =
|
||||
am_libdebug_a_OBJECTS = debug.$(OBJEXT) debug_gui.$(OBJEXT) \
|
||||
debug_disasm.$(OBJEXT) debug_win32.$(OBJEXT)
|
||||
libdebug_a_OBJECTS = $(am_libdebug_a_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libdebug_a_SOURCES)
|
||||
DIST_SOURCES = $(libdebug_a_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -100,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -130,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -140,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -149,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -175,41 +139,51 @@ target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
noinst_LIBRARIES = libdebug.a
|
||||
libdebug_a_SOURCES = debug.cpp debug_gui.cpp debug_disasm.cpp debug_inc.h disasm_tables.h debug_win32.cpp
|
||||
subdir = src/debug
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libdebug_a_AR = $(AR) cru
|
||||
libdebug_a_LIBADD =
|
||||
am_libdebug_a_OBJECTS = debug.$(OBJEXT) debug_gui.$(OBJEXT) \
|
||||
debug_disasm.$(OBJEXT) debug_win32.$(OBJEXT)
|
||||
libdebug_a_OBJECTS = $(am_libdebug_a_OBJECTS)
|
||||
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/debug.Po ./$(DEPDIR)/debug_disasm.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/debug_gui.Po ./$(DEPDIR)/debug_win32.Po
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libdebug_a_SOURCES)
|
||||
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
|
||||
SOURCES = $(libdebug_a_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/debug/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/debug/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
$(AUTOMAKE) --gnu src/debug/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
AR = ar
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
@ -219,7 +193,7 @@ libdebug.a: $(libdebug_a_OBJECTS) $(libdebug_a_DEPENDENCIES)
|
||||
$(RANLIB) libdebug.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
@ -230,20 +204,36 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug_win32.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -252,7 +242,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -264,11 +253,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -291,6 +279,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -304,7 +296,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -322,6 +314,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LIBRARIES)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -342,7 +335,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -361,8 +354,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -398,14 +389,13 @@ uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-noinstLIBRARIES ctags distclean distclean-compile \
|
||||
distclean-generic distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-info-am
|
||||
distclean-generic distclean-tags distdir dvi dvi-am info \
|
||||
info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
|
||||
ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
1058
src/debug/debug.cpp
1058
src/debug/debug.cpp
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/* $Id: debug_gui.cpp,v 1.28 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: debug_gui.cpp,v 1.31 2007/01/08 19:45:39 qbix79 Exp $ */
|
||||
|
||||
#include "dosbox.h"
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
#include "debug_inc.h"
|
||||
|
||||
struct _LogGroup {
|
||||
char * front;
|
||||
char const* front;
|
||||
bool enabled;
|
||||
};
|
||||
#include <list>
|
||||
@ -52,7 +52,7 @@ extern int old_cursor_state;
|
||||
|
||||
|
||||
|
||||
void DEBUG_ShowMsg(char * format,...) {
|
||||
void DEBUG_ShowMsg(char const* format,...) {
|
||||
|
||||
char buf[512];
|
||||
va_list msg;
|
||||
@ -97,7 +97,7 @@ void DEBUG_RefreshPage(char scroll) {
|
||||
wrefresh(dbg.win_out);
|
||||
}
|
||||
|
||||
void LOG::operator() (char* format, ...){
|
||||
void LOG::operator() (char const* format, ...){
|
||||
char buf[512];
|
||||
va_list msg;
|
||||
va_start(msg,format);
|
||||
@ -144,13 +144,13 @@ static void DrawBars(void) {
|
||||
/* Show the Register bar */
|
||||
mvaddstr(dbg.win_reg->_begy-1,0, "---(Register Overview )---");
|
||||
/* Show the Data Overview bar perhaps with more special stuff in the end */
|
||||
mvaddstr(dbg.win_data->_begy-1,0,"---(Data Overview Scroll: r/f )---");
|
||||
mvaddstr(dbg.win_data->_begy-1,0,"---(Data Overview Scroll: page up/down)---");
|
||||
/* Show the Code Overview perhaps with special stuff in bar too */
|
||||
mvaddstr(dbg.win_code->_begy-1,0,"---(Code Overview Scroll: up/down )---");
|
||||
mvaddstr(dbg.win_code->_begy-1,0,"---(Code Overview Scroll: up/down )---");
|
||||
/* Show the Variable Overview bar */
|
||||
mvaddstr(dbg.win_var->_begy-1,0, "---(Variable Overview )---");
|
||||
/* Show the Output OverView */
|
||||
mvaddstr(dbg.win_out->_begy-1,0, "---(OutPut/Input Scroll: home/end )---");
|
||||
mvaddstr(dbg.win_out->_begy-1,0, "---(OutPut/Input Scroll: home/end )---");
|
||||
attrset(0);
|
||||
}
|
||||
|
||||
@ -188,8 +188,7 @@ static void MakePairs(void) {
|
||||
init_pair(PAIR_BLACK_GREY, COLOR_BLACK /*| FOREGROUND_INTENSITY */, COLOR_WHITE);
|
||||
init_pair(PAIR_GREY_RED, COLOR_WHITE/*| FOREGROUND_INTENSITY */, COLOR_RED);
|
||||
}
|
||||
static void LOG_Destroy(Section* sec) {
|
||||
|
||||
static void LOG_Destroy(Section*) {
|
||||
if(debuglog) fclose(debuglog);
|
||||
}
|
||||
|
||||
@ -200,7 +199,7 @@ static void LOG_Init(Section * sec) {
|
||||
}else{
|
||||
debuglog=0;
|
||||
}
|
||||
sect->AddDestroyFunction(LOG_Destroy);
|
||||
sect->AddDestroyFunction(&LOG_Destroy);
|
||||
char buf[1024];
|
||||
for (Bitu i=1;i<LOG_MAX;i++) {
|
||||
strcpy(buf,loggrp[i].front);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
/* Local Debug Function */
|
||||
|
||||
/* $Id: debug_inc.h,v 1.10 2006/02/09 11:47:48 qbix79 Exp $ */
|
||||
/* $Id: debug_inc.h,v 1.11 2007/01/08 19:45:39 qbix79 Exp $ */
|
||||
|
||||
#include <curses.h>
|
||||
#include "mem.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2002-2006 The DOSBox Team
|
||||
* Copyright (C) 2002-2007 The DOSBox Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,10 +1,10 @@
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
noinst_LIBRARIES = libdos.a
|
||||
EXTRA_DIST = scsidefs.h wnaspi32.h
|
||||
EXTRA_DIST = scsidefs.h wnaspi32.h dos_codepages.h dos_keyboard_layout_data.h
|
||||
libdos_a_SOURCES = dos.cpp dos_devices.cpp dos_execute.cpp dos_files.cpp dos_ioctl.cpp dos_memory.cpp \
|
||||
dos_misc.cpp dos_classes.cpp dos_programs.cpp dos_tables.cpp \
|
||||
drives.cpp drives.h drive_virtual.cpp drive_local.cpp drive_cache.cpp drive_fat.cpp \
|
||||
drive_iso.cpp dev_con.h dos_mscdex.cpp \
|
||||
drive_iso.cpp dev_con.h dos_mscdex.cpp dos_keyboard_layout.cpp \
|
||||
cdrom.h cdrom.cpp cdrom_ioctl_win32.cpp cdrom_aspi_win32.cpp cdrom_ioctl_linux.cpp cdrom_image.cpp \
|
||||
cdrom_ioctl_os2.cpp
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.5 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.7.9 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
@ -14,8 +14,6 @@
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(libdos_a_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
@ -23,6 +21,7 @@ pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
@ -36,52 +35,7 @@ POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = src/dos
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
AR = ar
|
||||
ARFLAGS = cru
|
||||
libdos_a_AR = $(AR) $(ARFLAGS)
|
||||
libdos_a_LIBADD =
|
||||
am_libdos_a_OBJECTS = dos.$(OBJEXT) dos_devices.$(OBJEXT) \
|
||||
dos_execute.$(OBJEXT) dos_files.$(OBJEXT) dos_ioctl.$(OBJEXT) \
|
||||
dos_memory.$(OBJEXT) dos_misc.$(OBJEXT) dos_classes.$(OBJEXT) \
|
||||
dos_programs.$(OBJEXT) dos_tables.$(OBJEXT) drives.$(OBJEXT) \
|
||||
drive_virtual.$(OBJEXT) drive_local.$(OBJEXT) \
|
||||
drive_cache.$(OBJEXT) drive_fat.$(OBJEXT) drive_iso.$(OBJEXT) \
|
||||
dos_mscdex.$(OBJEXT) cdrom.$(OBJEXT) \
|
||||
cdrom_ioctl_win32.$(OBJEXT) cdrom_aspi_win32.$(OBJEXT) \
|
||||
cdrom_ioctl_linux.$(OBJEXT) cdrom_image.$(OBJEXT) \
|
||||
cdrom_ioctl_os2.$(OBJEXT)
|
||||
libdos_a_OBJECTS = $(am_libdos_a_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libdos_a_SOURCES)
|
||||
DIST_SOURCES = $(libdos_a_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
ALSA_CFLAGS = @ALSA_CFLAGS@
|
||||
ALSA_LIBS = @ALSA_LIBS@
|
||||
@ -108,6 +62,7 @@ ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
HAVE_WINDRES_FALSE = @HAVE_WINDRES_FALSE@
|
||||
HAVE_WINDRES_TRUE = @HAVE_WINDRES_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
@ -138,9 +93,6 @@ VERSION = @VERSION@
|
||||
WINDRES = @WINDRES@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
ac_ct_WINDRES = @ac_ct_WINDRES@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
@ -148,8 +100,6 @@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
@ -157,23 +107,29 @@ build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
@ -183,48 +139,82 @@ target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
|
||||
noinst_LIBRARIES = libdos.a
|
||||
EXTRA_DIST = scsidefs.h wnaspi32.h
|
||||
EXTRA_DIST = scsidefs.h wnaspi32.h dos_codepages.h dos_keyboard_layout_data.h
|
||||
libdos_a_SOURCES = dos.cpp dos_devices.cpp dos_execute.cpp dos_files.cpp dos_ioctl.cpp dos_memory.cpp \
|
||||
dos_misc.cpp dos_classes.cpp dos_programs.cpp dos_tables.cpp \
|
||||
drives.cpp drives.h drive_virtual.cpp drive_local.cpp drive_cache.cpp drive_fat.cpp \
|
||||
drive_iso.cpp dev_con.h dos_mscdex.cpp \
|
||||
drive_iso.cpp dev_con.h dos_mscdex.cpp dos_keyboard_layout.cpp \
|
||||
cdrom.h cdrom.cpp cdrom_ioctl_win32.cpp cdrom_aspi_win32.cpp cdrom_ioctl_linux.cpp cdrom_image.cpp \
|
||||
cdrom_ioctl_os2.cpp
|
||||
|
||||
subdir = src/dos
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libdos_a_AR = $(AR) cru
|
||||
libdos_a_LIBADD =
|
||||
am_libdos_a_OBJECTS = dos.$(OBJEXT) dos_devices.$(OBJEXT) \
|
||||
dos_execute.$(OBJEXT) dos_files.$(OBJEXT) dos_ioctl.$(OBJEXT) \
|
||||
dos_memory.$(OBJEXT) dos_misc.$(OBJEXT) dos_classes.$(OBJEXT) \
|
||||
dos_programs.$(OBJEXT) dos_tables.$(OBJEXT) drives.$(OBJEXT) \
|
||||
drive_virtual.$(OBJEXT) drive_local.$(OBJEXT) \
|
||||
drive_cache.$(OBJEXT) drive_fat.$(OBJEXT) drive_iso.$(OBJEXT) \
|
||||
dos_mscdex.$(OBJEXT) dos_keyboard_layout.$(OBJEXT) \
|
||||
cdrom.$(OBJEXT) cdrom_ioctl_win32.$(OBJEXT) \
|
||||
cdrom_aspi_win32.$(OBJEXT) cdrom_ioctl_linux.$(OBJEXT) \
|
||||
cdrom_image.$(OBJEXT) cdrom_ioctl_os2.$(OBJEXT)
|
||||
libdos_a_OBJECTS = $(am_libdos_a_OBJECTS)
|
||||
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cdrom.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/cdrom_aspi_win32.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/cdrom_image.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/cdrom_ioctl_linux.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/cdrom_ioctl_os2.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/cdrom_ioctl_win32.Po ./$(DEPDIR)/dos.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_classes.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_devices.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_execute.Po ./$(DEPDIR)/dos_files.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_ioctl.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_keyboard_layout.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_memory.Po ./$(DEPDIR)/dos_misc.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_mscdex.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_programs.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/dos_tables.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/drive_cache.Po ./$(DEPDIR)/drive_fat.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/drive_iso.Po ./$(DEPDIR)/drive_local.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/drive_virtual.Po ./$(DEPDIR)/drives.Po
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
DIST_SOURCES = $(libdos_a_SOURCES)
|
||||
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
|
||||
SOURCES = $(libdos_a_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/dos/Makefile'; \
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnits src/dos/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
$(AUTOMAKE) --gnu src/dos/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
AR = ar
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
@ -234,7 +224,7 @@ libdos.a: $(libdos_a_OBJECTS) $(libdos_a_DEPENDENCIES)
|
||||
$(RANLIB) libdos.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
@ -251,6 +241,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_execute.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_files.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_ioctl.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_keyboard_layout.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_memory.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_misc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos_mscdex.Po@am__quote@
|
||||
@ -264,20 +255,36 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drives.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
|
||||
|
||||
.cpp.obj:
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
|
||||
@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
|
||||
@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
|
||||
@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
|
||||
@am__fastdepCXX_TRUE@ fi
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
|
||||
uninstall-info-am:
|
||||
|
||||
ETAGS = etags
|
||||
ETAGSFLAGS =
|
||||
|
||||
CTAGS = ctags
|
||||
CTAGSFLAGS =
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
@ -286,7 +293,6 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -298,11 +304,10 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|
||||
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
@ -325,6 +330,10 @@ GTAGS:
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ../..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
@ -338,7 +347,7 @@ distdir: $(DISTFILES)
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
$(mkinstalldirs) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
@ -356,6 +365,7 @@ distdir: $(DISTFILES)
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LIBRARIES)
|
||||
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
@ -376,7 +386,7 @@ mostlyclean-generic:
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@ -395,8 +405,6 @@ dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
@ -432,14 +440,13 @@ uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-noinstLIBRARIES ctags distclean distclean-compile \
|
||||
distclean-generic distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-info-am
|
||||
distclean-generic distclean-tags distdir dvi dvi-am info \
|
||||
info-am install install-am install-data install-data-am \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
|
||||
ps ps-am tags uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user