From 9280f60779badfe8169f94bde0040e103d895f54 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 13 Aug 2009 17:55:21 +0000 Subject: [PATCH] - alpha simulator removed: we never used it so far, fpc has no alpha support, alpha is basically dead, qemu supports alpha git-svn-id: trunk@13530 - --- .gitattributes | 7 - .gitignore | 7 - utils/simulator/Makefile | 2098 ---------------------------------- utils/simulator/Makefile.fpc | 18 - utils/simulator/alphasim.pas | 1275 --------------------- utils/simulator/fastmm64.pas | 203 ---- utils/simulator/mm64.pas | 295 ----- utils/simulator/simbase.pas | 115 -- utils/simulator/simlib.pas | 225 ---- 9 files changed, 4243 deletions(-) delete mode 100644 utils/simulator/Makefile delete mode 100644 utils/simulator/Makefile.fpc delete mode 100644 utils/simulator/alphasim.pas delete mode 100644 utils/simulator/fastmm64.pas delete mode 100644 utils/simulator/mm64.pas delete mode 100644 utils/simulator/simbase.pas delete mode 100644 utils/simulator/simlib.pas diff --git a/.gitattributes b/.gitattributes index 55bc3d6175..ecc29e0c3b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10471,13 +10471,6 @@ utils/sim_pasc/token.c svneol=native#text/plain utils/sim_pasc/token.h svneol=native#text/plain utils/sim_pasc/tokenarray.c svneol=native#text/plain utils/sim_pasc/tokenarray.h svneol=native#text/plain -utils/simulator/Makefile svneol=native#text/plain -utils/simulator/Makefile.fpc svneol=native#text/plain -utils/simulator/alphasim.pas svneol=native#text/plain -utils/simulator/fastmm64.pas svneol=native#text/plain -utils/simulator/mm64.pas svneol=native#text/plain -utils/simulator/simbase.pas svneol=native#text/plain -utils/simulator/simlib.pas svneol=native#text/plain utils/svn2cl.pp svneol=native#text/plain utils/svn2cvs/svn2cvs.lpi svneol=native#text/plain utils/svn2cvs/svn2cvs.pp svneol=native#text/plain diff --git a/.gitignore b/.gitignore index c397b18a3d..56649edf1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1551,13 +1551,6 @@ utils/ptop utils/ptop.exe utils/rstconv utils/rstconv.exe -utils/simulator/*.bak -utils/simulator/*.exe -utils/simulator/*.o -utils/simulator/*.ppu -utils/simulator/*.s -utils/simulator/fpcmade.* -utils/simulator/units utils/tply/*.bak utils/tply/*.exe utils/tply/*.o diff --git a/utils/simulator/Makefile b/utils/simulator/Makefile deleted file mode 100644 index 350928b446..0000000000 --- a/utils/simulator/Makefile +++ /dev/null @@ -1,2098 +0,0 @@ -# -# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/08/02] -# -default: all -MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded -BSDs = freebsd netbsd openbsd darwin -UNIXs = linux $(BSDs) solaris qnx -LIMIT83fs = go32v2 os2 emx watcom -OSNeedsComspecToRunBatch = go32v2 watcom -FORCE: -.PHONY: FORCE -override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH))) -ifneq ($(findstring darwin,$(OSTYPE)),) -inUnix=1 #darwin -SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) -else -ifeq ($(findstring ;,$(PATH)),) -inUnix=1 -SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH))) -else -SEARCHPATH:=$(subst ;, ,$(PATH)) -endif -endif -SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE)))) -PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH)))) -ifeq ($(PWD),) -PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH)))) -ifeq ($(PWD),) -$(error You need the GNU utils package to use this Makefile) -else -PWD:=$(firstword $(PWD)) -SRCEXEEXT= -endif -else -PWD:=$(firstword $(PWD)) -SRCEXEEXT=.exe -endif -ifndef inUnix -ifeq ($(OS),Windows_NT) -inWinNT=1 -else -ifdef OS2_SHELL -inOS2=1 -endif -endif -else -ifneq ($(findstring cygdrive,$(PATH)),) -inCygWin=1 -endif -endif -ifdef inUnix -SRCBATCHEXT=.sh -else -ifdef inOS2 -SRCBATCHEXT=.cmd -else -SRCBATCHEXT=.bat -endif -endif -ifdef COMSPEC -ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),) -ifndef RUNBATCH -RUNBATCH=$(COMSPEC) /C -endif -endif -endif -ifdef inUnix -PATHSEP=/ -else -PATHSEP:=$(subst /,\,/) -ifdef inCygWin -PATHSEP=/ -endif -endif -ifdef PWD -BASEDIR:=$(subst \,/,$(shell $(PWD))) -ifdef inCygWin -ifneq ($(findstring /cygdrive/,$(BASEDIR)),) -BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR)) -BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR))) -BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR)) -endif -endif -else -BASEDIR=. -endif -ifdef inOS2 -ifndef ECHO -ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ECHO),) -ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ECHO),) -ECHO=echo -else -ECHO:=$(firstword $(ECHO)) -endif -else -ECHO:=$(firstword $(ECHO)) -endif -endif -export ECHO -endif -override DEFAULT_FPCDIR=../.. -ifndef FPC -ifdef PP -FPC=$(PP) -endif -endif -ifndef FPC -FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH)))) -ifneq ($(FPCPROG),) -FPCPROG:=$(firstword $(FPCPROG)) -ifneq ($(CPU_TARGET),) -FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB) -else -FPC:=$(shell $(FPCPROG) -PB) -endif -ifneq ($(findstring Error,$(FPC)),) -override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH))))) -else -ifeq ($(strip $(wildcard $(FPC))),) -FPC:=$(firstword $(FPCPROG)) -endif -endif -else -override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH))))) -endif -endif -override FPC:=$(subst $(SRCEXEEXT),,$(FPC)) -override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT) -FOUNDFPC:=$(strip $(wildcard $(FPC))) -ifeq ($(FOUNDFPC),) -FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH)))) -ifeq ($(FOUNDFPC),) -$(error Compiler $(FPC) not found) -endif -endif -ifndef FPC_COMPILERINFO -FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO) -endif -ifndef FPC_VERSION -FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO)) -endif -export FPC FPC_VERSION FPC_COMPILERINFO -unexport CHECKDEPEND ALLDEPENDENCIES -ifndef CPU_TARGET -ifdef CPU_TARGET_DEFAULT -CPU_TARGET=$(CPU_TARGET_DEFAULT) -endif -endif -ifndef OS_TARGET -ifdef OS_TARGET_DEFAULT -OS_TARGET=$(OS_TARGET_DEFAULT) -endif -endif -ifneq ($(words $(FPC_COMPILERINFO)),5) -FPC_COMPILERINFO+=$(shell $(FPC) -iSP) -FPC_COMPILERINFO+=$(shell $(FPC) -iTP) -FPC_COMPILERINFO+=$(shell $(FPC) -iSO) -FPC_COMPILERINFO+=$(shell $(FPC) -iTO) -endif -ifndef CPU_SOURCE -CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO)) -endif -ifndef CPU_TARGET -CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO)) -endif -ifndef OS_SOURCE -OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO)) -endif -ifndef OS_TARGET -OS_TARGET:=$(word 5,$(FPC_COMPILERINFO)) -endif -FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) -FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) -ifeq ($(CPU_TARGET),armeb) -ARCH=arm -override FPCOPT+=-Cb -else -ifeq ($(CPU_TARGET),armel) -ARCH=arm -override FPCOPT+=-CaEABI -else -ARCH=$(CPU_TARGET) -endif -endif -ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) -TARGETSUFFIX=$(OS_TARGET) -SOURCESUFFIX=$(OS_SOURCE) -else -TARGETSUFFIX=$(FULL_TARGET) -SOURCESUFFIX=$(FULL_SOURCE) -endif -ifneq ($(FULL_TARGET),$(FULL_SOURCE)) -CROSSCOMPILE=1 -endif -ifeq ($(findstring makefile,$(MAKECMDGOALS)),) -ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),) -$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first) -endif -endif -ifneq ($(findstring $(OS_TARGET),$(BSDs)),) -BSDhier=1 -endif -ifeq ($(OS_TARGET),linux) -linuxHier=1 -endif -export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE -ifdef FPCDIR -override FPCDIR:=$(subst \,/,$(FPCDIR)) -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) -override FPCDIR=wrong -endif -else -override FPCDIR=wrong -endif -ifdef DEFAULT_FPCDIR -ifeq ($(FPCDIR),wrong) -override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR)) -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) -override FPCDIR=wrong -endif -endif -endif -ifeq ($(FPCDIR),wrong) -ifdef inUnix -override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION) -ifeq ($(wildcard $(FPCDIR)/units),) -override FPCDIR=/usr/lib/fpc/$(FPC_VERSION) -endif -else -override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH)))))) -override FPCDIR:=$(FPCDIR)/.. -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) -override FPCDIR:=$(FPCDIR)/.. -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) -override FPCDIR:=$(BASEDIR) -ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),) -override FPCDIR=c:/pp -endif -endif -endif -endif -endif -ifndef CROSSBINDIR -CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX)) -endif -ifeq ($(OS_TARGET),darwin) -ifeq ($(OS_SOURCE),darwin) -DARWIN2DARWIN=1 -endif -endif -ifndef BINUTILSPREFIX -ifndef CROSSBINDIR -ifdef CROSSCOMPILE -ifndef DARWIN2DARWIN -BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)- -endif -endif -endif -endif -UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX)) -ifeq ($(UNITSDIR),) -UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET)) -endif -PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) -ifeq ($(FULL_TARGET),i386-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-go32v2) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-win32) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-os2) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-freebsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-beos) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-haiku) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-netbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-solaris) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-qnx) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-netware) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-openbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-wdosx) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-darwin) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-emx) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-watcom) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-wince) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-symbian) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-amiga) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-atari) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-palmos) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),m68k-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-amiga) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-macos) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),sparc-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),sparc-solaris) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),sparc-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),x86_64-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),x86_64-darwin) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),x86_64-win64) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),x86_64-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-palmos) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-darwin) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-wince) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-gba) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-nds) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),arm-symbian) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),powerpc64-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),avr-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),armeb-linux) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),armeb-embedded) -override TARGET_PROGRAMS+=alphasim -endif -ifeq ($(FULL_TARGET),i386-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-go32v2) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-win32) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-os2) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-freebsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-beos) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-haiku) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-netbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-solaris) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-qnx) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-netware) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-openbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-wdosx) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-darwin) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-emx) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-watcom) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-wince) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),i386-symbian) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-amiga) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-atari) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-palmos) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),m68k-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-amiga) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-macos) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),sparc-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),sparc-solaris) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),sparc-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),x86_64-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),x86_64-darwin) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),x86_64-win64) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),x86_64-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-palmos) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-darwin) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-wince) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-gba) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-nds) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),arm-symbian) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),powerpc64-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),avr-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),armeb-linux) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -ifeq ($(FULL_TARGET),armeb-embedded) -override CLEAN_UNITS+=mm64 fastmm64 simlib simbase -endif -override INSTALL_FPCPACKAGE=y -ifdef REQUIRE_UNITSDIR -override UNITSDIR+=$(REQUIRE_UNITSDIR) -endif -ifdef REQUIRE_PACKAGESDIR -override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR) -endif -ifdef ZIPINSTALL -ifneq ($(findstring $(OS_TARGET),$(UNIXs)),) -UNIXHier=1 -endif -else -ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),) -UNIXHier=1 -endif -endif -ifndef INSTALL_PREFIX -ifdef PREFIX -INSTALL_PREFIX=$(PREFIX) -endif -endif -ifndef INSTALL_PREFIX -ifdef UNIXHier -INSTALL_PREFIX=/usr/local -else -ifdef INSTALL_FPCPACKAGE -INSTALL_BASEDIR:=/pp -else -INSTALL_BASEDIR:=/$(PACKAGE_NAME) -endif -endif -endif -export INSTALL_PREFIX -ifdef INSTALL_FPCSUBDIR -export INSTALL_FPCSUBDIR -endif -ifndef DIST_DESTDIR -DIST_DESTDIR:=$(BASEDIR) -endif -export DIST_DESTDIR -ifndef COMPILER_UNITTARGETDIR -ifdef PACKAGEDIR_MAIN -COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX) -else -COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX) -endif -endif -ifndef COMPILER_TARGETDIR -COMPILER_TARGETDIR=. -endif -ifndef INSTALL_BASEDIR -ifdef UNIXHier -ifdef INSTALL_FPCPACKAGE -INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION) -else -INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME) -endif -else -INSTALL_BASEDIR:=$(INSTALL_PREFIX) -endif -endif -ifndef INSTALL_BINDIR -ifdef UNIXHier -INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin -else -INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin -ifdef INSTALL_FPCPACKAGE -ifdef CROSSCOMPILE -ifdef CROSSINSTALL -INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX) -else -INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX) -endif -else -INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX) -endif -endif -endif -endif -ifndef INSTALL_UNITDIR -INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX) -ifdef INSTALL_FPCPACKAGE -ifdef PACKAGE_NAME -INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME) -endif -endif -endif -ifndef INSTALL_LIBDIR -ifdef UNIXHier -INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib -else -INSTALL_LIBDIR:=$(INSTALL_UNITDIR) -endif -endif -ifndef INSTALL_SOURCEDIR -ifdef UNIXHier -ifdef BSDhier -SRCPREFIXDIR=share/src -else -ifdef linuxHier -SRCPREFIXDIR=share/src -else -SRCPREFIXDIR=src -endif -endif -ifdef INSTALL_FPCPACKAGE -ifdef INSTALL_FPCSUBDIR -INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) -else -INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) -endif -else -INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -endif -else -ifdef INSTALL_FPCPACKAGE -ifdef INSTALL_FPCSUBDIR -INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME) -else -INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME) -endif -else -INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source -endif -endif -endif -ifndef INSTALL_DOCDIR -ifdef UNIXHier -ifdef BSDhier -DOCPREFIXDIR=share/doc -else -ifdef linuxHier -DOCPREFIXDIR=share/doc -else -DOCPREFIXDIR=doc -endif -endif -ifdef INSTALL_FPCPACKAGE -INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) -else -INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -endif -else -ifdef INSTALL_FPCPACKAGE -INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME) -else -INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc -endif -endif -endif -ifndef INSTALL_EXAMPLEDIR -ifdef UNIXHier -ifdef INSTALL_FPCPACKAGE -ifdef BSDhier -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME) -else -ifdef linuxHier -INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples -else -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME) -endif -endif -else -ifdef BSDhier -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -else -ifdef linuxHier -INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -else -INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -endif -endif -endif -else -ifdef INSTALL_FPCPACKAGE -INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME) -else -INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples -endif -endif -endif -ifndef INSTALL_DATADIR -INSTALL_DATADIR=$(INSTALL_BASEDIR) -endif -ifndef INSTALL_SHAREDDIR -INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib -endif -ifdef CROSSCOMPILE -ifndef CROSSBINDIR -CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX)) -ifeq ($(CROSSBINDIR),) -CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE)) -endif -endif -else -CROSSBINDIR= -endif -BATCHEXT=.bat -LOADEREXT=.as -EXEEXT=.exe -PPLEXT=.ppl -PPUEXT=.ppu -OEXT=.o -ASMEXT=.s -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.so -SHAREDLIBPREFIX=libfp -STATICLIBPREFIX=libp -IMPORTLIBPREFIX=libimp -RSTEXT=.rst -ifeq ($(findstring 1.0.,$(FPC_VERSION)),) -ifeq ($(OS_TARGET),go32v1) -STATICLIBPREFIX= -SHORTSUFFIX=v1 -endif -ifeq ($(OS_TARGET),go32v2) -STATICLIBPREFIX= -SHORTSUFFIX=dos -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),watcom) -STATICLIBPREFIX= -OEXT=.obj -ASMEXT=.asm -SHAREDLIBEXT=.dll -SHORTSUFFIX=wat -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),linux) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=lnx -endif -ifeq ($(OS_TARGET),freebsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=fbs -endif -ifeq ($(OS_TARGET),netbsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=nbs -endif -ifeq ($(OS_TARGET),openbsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=obs -endif -ifeq ($(OS_TARGET),win32) -SHAREDLIBEXT=.dll -SHORTSUFFIX=w32 -endif -ifeq ($(OS_TARGET),os2) -BATCHEXT=.cmd -AOUTEXT=.out -STATICLIBPREFIX= -SHAREDLIBEXT=.dll -SHORTSUFFIX=os2 -ECHO=echo -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),emx) -BATCHEXT=.cmd -AOUTEXT=.out -STATICLIBPREFIX= -SHAREDLIBEXT=.dll -SHORTSUFFIX=emx -ECHO=echo -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),amiga) -EXEEXT= -SHAREDLIBEXT=.library -SHORTSUFFIX=amg -endif -ifeq ($(OS_TARGET),morphos) -EXEEXT= -SHAREDLIBEXT=.library -SHORTSUFFIX=mos -endif -ifeq ($(OS_TARGET),atari) -EXEEXT=.ttp -SHORTSUFFIX=ata -endif -ifeq ($(OS_TARGET),beos) -BATCHEXT=.sh -EXEEXT= -SHORTSUFFIX=be -endif -ifeq ($(OS_TARGET),haiku) -BATCHEXT=.sh -EXEEXT= -SHORTSUFFIX=hai -endif -ifeq ($(OS_TARGET),solaris) -BATCHEXT=.sh -EXEEXT= -SHORTSUFFIX=sun -endif -ifeq ($(OS_TARGET),qnx) -BATCHEXT=.sh -EXEEXT= -SHORTSUFFIX=qnx -endif -ifeq ($(OS_TARGET),netware) -EXEEXT=.nlm -STATICLIBPREFIX= -SHORTSUFFIX=nw -IMPORTLIBPREFIX=imp -endif -ifeq ($(OS_TARGET),netwlibc) -EXEEXT=.nlm -STATICLIBPREFIX= -SHORTSUFFIX=nwl -IMPORTLIBPREFIX=imp -endif -ifeq ($(OS_TARGET),macos) -BATCHEXT= -EXEEXT= -DEBUGSYMEXT=.xcoff -SHORTSUFFIX=mac -IMPORTLIBPREFIX=imp -endif -ifeq ($(OS_TARGET),darwin) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=dwn -endif -ifeq ($(OS_TARGET),gba) -EXEEXT=.gba -SHAREDLIBEXT=.so -SHORTSUFFIX=gba -endif -ifeq ($(OS_TARGET),symbian) -SHAREDLIBEXT=.dll -SHORTSUFFIX=symbian -endif -else -ifeq ($(OS_TARGET),go32v1) -PPUEXT=.pp1 -OEXT=.o1 -ASMEXT=.s1 -SMARTEXT=.sl1 -STATICLIBEXT=.a1 -SHAREDLIBEXT=.so1 -STATICLIBPREFIX= -SHORTSUFFIX=v1 -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),go32v2) -STATICLIBPREFIX= -SHORTSUFFIX=dos -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),watcom) -STATICLIBPREFIX= -SHORTSUFFIX=wat -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),linux) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=lnx -endif -ifeq ($(OS_TARGET),freebsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=fbs -endif -ifeq ($(OS_TARGET),netbsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=nbs -endif -ifeq ($(OS_TARGET),openbsd) -BATCHEXT=.sh -EXEEXT= -HASSHAREDLIB=1 -SHORTSUFFIX=obs -endif -ifeq ($(OS_TARGET),win32) -PPUEXT=.ppw -OEXT=.ow -ASMEXT=.sw -SMARTEXT=.slw -STATICLIBEXT=.aw -SHAREDLIBEXT=.dll -SHORTSUFFIX=w32 -endif -ifeq ($(OS_TARGET),os2) -BATCHEXT=.cmd -PPUEXT=.ppo -ASMEXT=.so2 -OEXT=.oo2 -AOUTEXT=.out -SMARTEXT=.sl2 -STATICLIBPREFIX= -STATICLIBEXT=.ao2 -SHAREDLIBEXT=.dll -SHORTSUFFIX=os2 -ECHO=echo -IMPORTLIBPREFIX= -endif -ifeq ($(OS_TARGET),amiga) -EXEEXT= -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.library -SHORTSUFFIX=amg -endif -ifeq ($(OS_TARGET),atari) -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT=.ttp -SHORTSUFFIX=ata -endif -ifeq ($(OS_TARGET),beos) -BATCHEXT=.sh -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -SHORTSUFFIX=be -endif -ifeq ($(OS_TARGET),solaris) -BATCHEXT=.sh -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -SHORTSUFFIX=sun -endif -ifeq ($(OS_TARGET),qnx) -BATCHEXT=.sh -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -SHORTSUFFIX=qnx -endif -ifeq ($(OS_TARGET),netware) -STATICLIBPREFIX= -PPUEXT=.ppu -OEXT=.o -ASMEXT=.s -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.nlm -EXEEXT=.nlm -SHORTSUFFIX=nw -IMPORTLIBPREFIX=imp -endif -ifeq ($(OS_TARGET),netwlibc) -STATICLIBPREFIX= -PPUEXT=.ppu -OEXT=.o -ASMEXT=.s -SMARTEXT=.sl -STATICLIBEXT=.a -SHAREDLIBEXT=.nlm -EXEEXT=.nlm -SHORTSUFFIX=nwl -IMPORTLIBPREFIX=imp -endif -ifeq ($(OS_TARGET),macos) -BATCHEXT= -PPUEXT=.ppu -ASMEXT=.s -OEXT=.o -SMARTEXT=.sl -STATICLIBEXT=.a -EXEEXT= -DEBUGSYMEXT=.xcoff -SHORTSUFFIX=mac -IMPORTLIBPREFIX=imp -endif -endif -ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),) -FPCMADE=fpcmade.$(SHORTSUFFIX) -ZIPSUFFIX=$(SHORTSUFFIX) -ZIPCROSSPREFIX= -ZIPSOURCESUFFIX=src -ZIPEXAMPLESUFFIX=exm -else -FPCMADE=fpcmade.$(TARGETSUFFIX) -ZIPSOURCESUFFIX=.source -ZIPEXAMPLESUFFIX=.examples -ifdef CROSSCOMPILE -ZIPSUFFIX=.$(SOURCESUFFIX) -ZIPCROSSPREFIX=$(TARGETSUFFIX)- -else -ZIPSUFFIX=.$(TARGETSUFFIX) -ZIPCROSSPREFIX= -endif -endif -ifndef ECHO -ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ECHO),) -ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ECHO),) -ECHO= __missing_command_ECHO -else -ECHO:=$(firstword $(ECHO)) -endif -else -ECHO:=$(firstword $(ECHO)) -endif -endif -export ECHO -ifndef DATE -DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(DATE),) -DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(DATE),) -DATE= __missing_command_DATE -else -DATE:=$(firstword $(DATE)) -endif -else -DATE:=$(firstword $(DATE)) -endif -endif -export DATE -ifndef GINSTALL -GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(GINSTALL),) -GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(GINSTALL),) -GINSTALL= __missing_command_GINSTALL -else -GINSTALL:=$(firstword $(GINSTALL)) -endif -else -GINSTALL:=$(firstword $(GINSTALL)) -endif -endif -export GINSTALL -ifndef CPPROG -CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(CPPROG),) -CPPROG= __missing_command_CPPROG -else -CPPROG:=$(firstword $(CPPROG)) -endif -endif -export CPPROG -ifndef RMPROG -RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(RMPROG),) -RMPROG= __missing_command_RMPROG -else -RMPROG:=$(firstword $(RMPROG)) -endif -endif -export RMPROG -ifndef MVPROG -MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(MVPROG),) -MVPROG= __missing_command_MVPROG -else -MVPROG:=$(firstword $(MVPROG)) -endif -endif -export MVPROG -ifndef MKDIRPROG -MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(MKDIRPROG),) -MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(MKDIRPROG),) -MKDIRPROG= __missing_command_MKDIRPROG -else -MKDIRPROG:=$(firstword $(MKDIRPROG)) -endif -else -MKDIRPROG:=$(firstword $(MKDIRPROG)) -endif -endif -export MKDIRPROG -ifndef ECHOREDIR -ifndef inUnix -ECHOREDIR=echo -else -ECHOREDIR=$(ECHO) -endif -endif -ifndef COPY -COPY:=$(CPPROG) -fp -endif -ifndef COPYTREE -COPYTREE:=$(CPPROG) -Rfp -endif -ifndef MKDIRTREE -MKDIRTREE:=$(MKDIRPROG) -p -endif -ifndef MOVE -MOVE:=$(MVPROG) -f -endif -ifndef DEL -DEL:=$(RMPROG) -f -endif -ifndef DELTREE -DELTREE:=$(RMPROG) -rf -endif -ifndef INSTALL -ifdef inUnix -INSTALL:=$(GINSTALL) -c -m 644 -else -INSTALL:=$(COPY) -endif -endif -ifndef INSTALLEXE -ifdef inUnix -INSTALLEXE:=$(GINSTALL) -c -m 755 -else -INSTALLEXE:=$(COPY) -endif -endif -ifndef MKDIR -MKDIR:=$(GINSTALL) -m 755 -d -endif -export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR -ifndef PPUMOVE -PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(PPUMOVE),) -PPUMOVE= __missing_command_PPUMOVE -else -PPUMOVE:=$(firstword $(PPUMOVE)) -endif -endif -export PPUMOVE -ifndef FPCMAKE -FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(FPCMAKE),) -FPCMAKE= __missing_command_FPCMAKE -else -FPCMAKE:=$(firstword $(FPCMAKE)) -endif -endif -export FPCMAKE -ifndef ZIPPROG -ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(ZIPPROG),) -ZIPPROG= __missing_command_ZIPPROG -else -ZIPPROG:=$(firstword $(ZIPPROG)) -endif -endif -export ZIPPROG -ifndef TARPROG -TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(TARPROG),) -TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(TARPROG),) -TARPROG= __missing_command_TARPROG -else -TARPROG:=$(firstword $(TARPROG)) -endif -else -TARPROG:=$(firstword $(TARPROG)) -endif -endif -export TARPROG -ASNAME=$(BINUTILSPREFIX)as -LDNAME=$(BINUTILSPREFIX)ld -ARNAME=$(BINUTILSPREFIX)ar -RCNAME=$(BINUTILSPREFIX)rc -ifneq ($(findstring 1.0.,$(FPC_VERSION)),) -ifeq ($(OS_TARGET),win32) -ifeq ($(CROSSBINDIR),) -ASNAME=asw -LDNAME=ldw -ARNAME=arw -endif -endif -endif -ifndef ASPROG -ifdef CROSSBINDIR -ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT) -else -ASPROG=$(ASNAME) -endif -endif -ifndef LDPROG -ifdef CROSSBINDIR -LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT) -else -LDPROG=$(LDNAME) -endif -endif -ifndef RCPROG -ifdef CROSSBINDIR -RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT) -else -RCPROG=$(RCNAME) -endif -endif -ifndef ARPROG -ifdef CROSSBINDIR -ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT) -else -ARPROG=$(ARNAME) -endif -endif -AS=$(ASPROG) -LD=$(LDPROG) -RC=$(RCPROG) -AR=$(ARPROG) -PPAS=ppas$(SRCBATCHEXT) -ifdef inUnix -LDCONFIG=ldconfig -else -LDCONFIG= -endif -ifdef DATE -DATESTR:=$(shell $(DATE) +%Y%m%d) -else -DATESTR= -endif -ifndef UPXPROG -ifeq ($(OS_TARGET),go32v2) -UPXPROG:=1 -endif -ifeq ($(OS_TARGET),win32) -UPXPROG:=1 -endif -ifdef UPXPROG -UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH)))) -ifeq ($(UPXPROG),) -UPXPROG= -else -UPXPROG:=$(firstword $(UPXPROG)) -endif -else -UPXPROG= -endif -endif -export UPXPROG -ZIPOPT=-9 -ZIPEXT=.zip -ifeq ($(USETAR),bz2) -TAROPT=vj -TAREXT=.tar.bz2 -else -TAROPT=vz -TAREXT=.tar.gz -endif -override REQUIRE_PACKAGES=rtl -ifeq ($(FULL_TARGET),i386-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-go32v2) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-win32) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-os2) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-freebsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-beos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-haiku) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-netbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-solaris) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-qnx) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-netware) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-openbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-wdosx) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-darwin) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-emx) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-watcom) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-netwlibc) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-wince) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),i386-symbian) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-freebsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-netbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-amiga) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-atari) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-openbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-palmos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),m68k-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-netbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-amiga) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-macos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-darwin) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-morphos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),sparc-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),sparc-netbsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),sparc-solaris) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),sparc-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),x86_64-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),x86_64-freebsd) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),x86_64-darwin) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),x86_64-win64) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),x86_64-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-palmos) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-darwin) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-wince) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-gba) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-nds) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),arm-symbian) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc64-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc64-darwin) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),powerpc64-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),avr-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),armeb-linux) -REQUIRE_PACKAGES_RTL=1 -endif -ifeq ($(FULL_TARGET),armeb-embedded) -REQUIRE_PACKAGES_RTL=1 -endif -ifdef REQUIRE_PACKAGES_RTL -PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) -ifneq ($(PACKAGEDIR_RTL),) -ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),) -UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX) -else -UNITDIR_RTL=$(PACKAGEDIR_RTL) -endif -ifdef CHECKDEPEND -$(PACKAGEDIR_RTL)/$(FPCMADE): - $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE) -override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE) -endif -else -PACKAGEDIR_RTL= -UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR))))) -ifneq ($(UNITDIR_RTL),) -UNITDIR_RTL:=$(firstword $(UNITDIR_RTL)) -else -UNITDIR_RTL= -endif -endif -ifdef UNITDIR_RTL -override COMPILER_UNITDIR+=$(UNITDIR_RTL) -endif -endif -ifndef NOCPUDEF -override FPCOPTDEF=$(ARCH) -endif -ifneq ($(OS_TARGET),$(OS_SOURCE)) -override FPCOPT+=-T$(OS_TARGET) -endif -ifneq ($(CPU_TARGET),$(CPU_SOURCE)) -override FPCOPT+=-P$(ARCH) -endif -ifeq ($(OS_SOURCE),openbsd) -override FPCOPT+=-FD$(NEW_BINUTILS_PATH) -endif -ifndef CROSSBOOTSTRAP -ifneq ($(BINUTILSPREFIX),) -override FPCOPT+=-XP$(BINUTILSPREFIX) -endif -ifneq ($(BINUTILSPREFIX),) -override FPCOPT+=-Xr$(RLINKPATH) -endif -endif -ifdef UNITDIR -override FPCOPT+=$(addprefix -Fu,$(UNITDIR)) -endif -ifdef LIBDIR -override FPCOPT+=$(addprefix -Fl,$(LIBDIR)) -endif -ifdef OBJDIR -override FPCOPT+=$(addprefix -Fo,$(OBJDIR)) -endif -ifdef INCDIR -override FPCOPT+=$(addprefix -Fi,$(INCDIR)) -endif -ifdef LINKSMART -override FPCOPT+=-XX -endif -ifdef CREATESMART -override FPCOPT+=-CX -endif -ifdef DEBUG -override FPCOPT+=-gl -override FPCOPTDEF+=DEBUG -endif -ifdef RELEASE -ifneq ($(findstring 2.0.,$(FPC_VERSION)),) -ifeq ($(CPU_TARGET),i386) -FPCCPUOPT:=-OG2p3 -endif -ifeq ($(CPU_TARGET),powerpc) -FPCCPUOPT:=-O1r -endif -else -FPCCPUOPT:=-O2 -endif -override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n -override FPCOPTDEF+=RELEASE -endif -ifdef STRIP -override FPCOPT+=-Xs -endif -ifdef OPTIMIZE -override FPCOPT+=-O2 -endif -ifdef VERBOSE -override FPCOPT+=-vwni -endif -ifdef COMPILER_OPTIONS -override FPCOPT+=$(COMPILER_OPTIONS) -endif -ifdef COMPILER_UNITDIR -override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR)) -endif -ifdef COMPILER_LIBRARYDIR -override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR)) -endif -ifdef COMPILER_OBJECTDIR -override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR)) -endif -ifdef COMPILER_INCLUDEDIR -override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR)) -endif -ifdef CROSSBINDIR -override FPCOPT+=-FD$(CROSSBINDIR) -endif -ifdef COMPILER_TARGETDIR -override FPCOPT+=-FE$(COMPILER_TARGETDIR) -ifeq ($(COMPILER_TARGETDIR),.) -override TARGETDIRPREFIX= -else -override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/ -endif -endif -ifdef COMPILER_UNITTARGETDIR -override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR) -ifeq ($(COMPILER_UNITTARGETDIR),.) -override UNITTARGETDIRPREFIX= -else -override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/ -endif -else -ifdef COMPILER_TARGETDIR -override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR) -override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX) -endif -endif -ifdef CREATESHARED -override FPCOPT+=-Cg -ifeq ($(CPU_TARGET),i386) -override FPCOPT+=-Aas -endif -endif -ifeq ($(findstring 2.0.,$(FPC_VERSION)),) -ifeq ($(OS_TARGET),linux) -ifeq ($(CPU_TARGET),x86_64) -override FPCOPT+=-Cg -endif -endif -endif -ifdef LINKSHARED -endif -ifdef OPT -override FPCOPT+=$(OPT) -endif -ifdef FPCOPTDEF -override FPCOPT+=$(addprefix -d,$(FPCOPTDEF)) -endif -ifdef CFGFILE -override FPCOPT+=@$(CFGFILE) -endif -ifdef USEENV -override FPCEXTCMD:=$(FPCOPT) -override FPCOPT:=!FPCEXTCMD -export FPCEXTCMD -endif -override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET) -override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE) -ifneq ($(AFULL_TARGET),$(AFULL_SOURCE)) -override ACROSSCOMPILE=1 -endif -ifdef ACROSSCOMPILE -override FPCOPT+=$(CROSSOPT) -endif -override COMPILER:=$(FPC) $(FPCOPT) -ifeq (,$(findstring -s ,$(COMPILER))) -EXECPPAS= -else -ifeq ($(FULL_SOURCE),$(FULL_TARGET)) -ifdef RUNBATCH -EXECPPAS:=@$(RUNBATCH) $(PPAS) -else -EXECPPAS:=@$(PPAS) -endif -endif -endif -.PHONY: fpc_exes -ifndef CROSSINSTALL -ifneq ($(TARGET_PROGRAMS),) -override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS)) -override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) -override ALLTARGET+=fpc_exes -override INSTALLEXEFILES+=$(EXEFILES) -override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES) -ifeq ($(OS_TARGET),os2) -override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS)) -endif -ifeq ($(OS_TARGET),emx) -override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS)) -endif -endif -endif -fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES) -ifdef TARGET_RSTS -override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) -override CLEANRSTFILES+=$(RSTFILES) -endif -.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared -$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET) - @$(ECHOREDIR) Compiled > $(FPCMADE) -fpc_all: $(FPCMADE) -fpc_smart: - $(MAKE) all LINKSMART=1 CREATESMART=1 -fpc_debug: - $(MAKE) all DEBUG=1 -fpc_release: - $(MAKE) all RELEASE=1 -.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res -$(COMPILER_UNITTARGETDIR): - $(MKDIRTREE) $(COMPILER_UNITTARGETDIR) -$(COMPILER_TARGETDIR): - $(MKDIRTREE) $(COMPILER_TARGETDIR) -%$(PPUEXT): %.pp - $(COMPILER) $< - $(EXECPPAS) -%$(PPUEXT): %.pas - $(COMPILER) $< - $(EXECPPAS) -%$(EXEEXT): %.pp - $(COMPILER) $< - $(EXECPPAS) -%$(EXEEXT): %.pas - $(COMPILER) $< - $(EXECPPAS) -%$(EXEEXT): %.lpr - $(COMPILER) $< - $(EXECPPAS) -%$(EXEEXT): %.dpr - $(COMPILER) $< - $(EXECPPAS) -%.res: %.rc - windres -i $< -o $@ -vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) -vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) -vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) -vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR) -vpath %.inc $(COMPILER_INCLUDEDIR) -vpath %$(OEXT) $(COMPILER_UNITTARGETDIR) -vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR) -.PHONY: fpc_shared -override INSTALLTARGET+=fpc_shared_install -ifndef SHARED_LIBVERSION -SHARED_LIBVERSION=$(FPC_VERSION) -endif -ifndef SHARED_LIBNAME -SHARED_LIBNAME=$(PACKAGE_NAME) -endif -ifndef SHARED_FULLNAME -SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT) -endif -ifndef SHARED_LIBUNITS -SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS) -override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS)) -endif -fpc_shared: -ifdef HASSHAREDLIB - $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1 -ifneq ($(SHARED_BUILD),n) - $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) -endif -else - @$(ECHO) Shared Libraries not supported -endif -fpc_shared_install: -ifneq ($(SHARED_BUILD),n) -ifneq ($(SHARED_LIBUNITS),) -ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),) - $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR) -endif -endif -endif -.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall -ifdef INSTALL_UNITS -override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS)) -endif -ifdef INSTALL_BUILDUNIT -override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES)) -endif -ifdef INSTALLPPUFILES -override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) -ifneq ($(UNITTARGETDIRPREFIX),) -override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES))) -override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES)))) -endif -override INSTALL_CREATEPACKAGEFPC=1 -endif -ifdef INSTALLEXEFILES -ifneq ($(TARGETDIRPREFIX),) -override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES))) -endif -endif -fpc_install: all $(INSTALLTARGET) -ifdef INSTALLEXEFILES - $(MKDIR) $(INSTALL_BINDIR) -ifdef UPXPROG - -$(UPXPROG) $(INSTALLEXEFILES) -endif - $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR) -endif -ifdef INSTALL_CREATEPACKAGEFPC -ifdef FPCMAKE -ifdef PACKAGE_VERSION -ifneq ($(wildcard Makefile.fpc),) - $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc - $(MKDIR) $(INSTALL_UNITDIR) - $(INSTALL) Package.fpc $(INSTALL_UNITDIR) -endif -endif -endif -endif -ifdef INSTALLPPUFILES - $(MKDIR) $(INSTALL_UNITDIR) - $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR) -ifneq ($(INSTALLPPULINKFILES),) - $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR) -endif -ifneq ($(wildcard $(LIB_FULLNAME)),) - $(MKDIR) $(INSTALL_LIBDIR) - $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR) -ifdef inUnix - ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME) -endif -endif -endif -ifdef INSTALL_FILES - $(MKDIR) $(INSTALL_DATADIR) - $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR) -endif -fpc_sourceinstall: distclean - $(MKDIR) $(INSTALL_SOURCEDIR) - $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR) -fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS)) -ifdef HASEXAMPLES - $(MKDIR) $(INSTALL_EXAMPLEDIR) -endif -ifdef EXAMPLESOURCEFILES - $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR) -endif -ifdef TARGET_EXAMPLEDIRS - $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR) -endif -.PHONY: fpc_clean fpc_cleanall fpc_distclean -ifdef EXEFILES -override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES)) -endif -ifdef CLEAN_UNITS -override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS)) -endif -ifdef CLEANPPUFILES -override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) -ifdef DEBUGSYMEXT -override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES)) -endif -override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES)) -override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES))) -endif -fpc_clean: $(CLEANTARGET) -ifdef CLEANEXEFILES - -$(DEL) $(CLEANEXEFILES) -endif -ifdef CLEANPPUFILES - -$(DEL) $(CLEANPPUFILES) -endif -ifneq ($(CLEANPPULINKFILES),) - -$(DEL) $(CLEANPPULINKFILES) -endif -ifdef CLEANRSTFILES - -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) -endif -ifdef CLEAN_FILES - -$(DEL) $(CLEAN_FILES) -endif -ifdef LIB_NAME - -$(DEL) $(LIB_NAME) $(LIB_FULLNAME) -endif - -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) - -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT) -fpc_cleanall: $(CLEANTARGET) -ifdef CLEANEXEFILES - -$(DEL) $(CLEANEXEFILES) -endif -ifdef COMPILER_UNITTARGETDIR -ifdef CLEANPPUFILES - -$(DEL) $(CLEANPPUFILES) -endif -ifneq ($(CLEANPPULINKFILES),) - -$(DEL) $(CLEANPPULINKFILES) -endif -ifdef CLEANRSTFILES - -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES)) -endif -endif - -$(DELTREE) units - -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT) -ifneq ($(PPUEXT),.ppu) - -$(DEL) *.o *.ppu *.a -endif - -$(DELTREE) *$(SMARTEXT) - -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE) - -$(DEL) *_ppas$(BATCHEXT) -ifdef AOUTEXT - -$(DEL) *$(AOUTEXT) -endif -ifdef DEBUGSYMEXT - -$(DEL) *$(DEBUGSYMEXT) -endif -fpc_distclean: cleanall -.PHONY: fpc_baseinfo -override INFORULES+=fpc_baseinfo -fpc_baseinfo: - @$(ECHO) - @$(ECHO) == Package info == - @$(ECHO) Package Name..... $(PACKAGE_NAME) - @$(ECHO) Package Version.. $(PACKAGE_VERSION) - @$(ECHO) - @$(ECHO) == Configuration info == - @$(ECHO) - @$(ECHO) FPC.......... $(FPC) - @$(ECHO) FPC Version.. $(FPC_VERSION) - @$(ECHO) Source CPU... $(CPU_SOURCE) - @$(ECHO) Target CPU... $(CPU_TARGET) - @$(ECHO) Source OS.... $(OS_SOURCE) - @$(ECHO) Target OS.... $(OS_TARGET) - @$(ECHO) Full Source.. $(FULL_SOURCE) - @$(ECHO) Full Target.. $(FULL_TARGET) - @$(ECHO) SourceSuffix. $(SOURCESUFFIX) - @$(ECHO) TargetSuffix. $(TARGETSUFFIX) - @$(ECHO) - @$(ECHO) == Directory info == - @$(ECHO) - @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES) - @$(ECHO) - @$(ECHO) Basedir......... $(BASEDIR) - @$(ECHO) FPCDir.......... $(FPCDIR) - @$(ECHO) CrossBinDir..... $(CROSSBINDIR) - @$(ECHO) UnitsDir........ $(UNITSDIR) - @$(ECHO) PackagesDir..... $(PACKAGESDIR) - @$(ECHO) - @$(ECHO) GCC library..... $(GCCLIBDIR) - @$(ECHO) Other library... $(OTHERLIBDIR) - @$(ECHO) - @$(ECHO) == Tools info == - @$(ECHO) - @$(ECHO) As........ $(AS) - @$(ECHO) Ld........ $(LD) - @$(ECHO) Ar........ $(AR) - @$(ECHO) Rc........ $(RC) - @$(ECHO) - @$(ECHO) Mv........ $(MVPROG) - @$(ECHO) Cp........ $(CPPROG) - @$(ECHO) Rm........ $(RMPROG) - @$(ECHO) GInstall.. $(GINSTALL) - @$(ECHO) Echo...... $(ECHO) - @$(ECHO) Shell..... $(SHELL) - @$(ECHO) Date...... $(DATE) - @$(ECHO) FPCMake... $(FPCMAKE) - @$(ECHO) PPUMove... $(PPUMOVE) - @$(ECHO) Upx....... $(UPXPROG) - @$(ECHO) Zip....... $(ZIPPROG) - @$(ECHO) - @$(ECHO) == Object info == - @$(ECHO) - @$(ECHO) Target Loaders........ $(TARGET_LOADERS) - @$(ECHO) Target Units.......... $(TARGET_UNITS) - @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS) - @$(ECHO) Target Programs....... $(TARGET_PROGRAMS) - @$(ECHO) Target Dirs........... $(TARGET_DIRS) - @$(ECHO) Target Examples....... $(TARGET_EXAMPLES) - @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS) - @$(ECHO) - @$(ECHO) Clean Units......... $(CLEAN_UNITS) - @$(ECHO) Clean Files......... $(CLEAN_FILES) - @$(ECHO) - @$(ECHO) Install Units....... $(INSTALL_UNITS) - @$(ECHO) Install Files....... $(INSTALL_FILES) - @$(ECHO) - @$(ECHO) == Install info == - @$(ECHO) - @$(ECHO) DateStr.............. $(DATESTR) - @$(ECHO) ZipName.............. $(ZIPNAME) - @$(ECHO) ZipPrefix............ $(ZIPPREFIX) - @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX) - @$(ECHO) ZipSuffix............ $(ZIPSUFFIX) - @$(ECHO) FullZipName.......... $(FULLZIPNAME) - @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE) - @$(ECHO) - @$(ECHO) Install base dir..... $(INSTALL_BASEDIR) - @$(ECHO) Install binary dir... $(INSTALL_BINDIR) - @$(ECHO) Install library dir.. $(INSTALL_LIBDIR) - @$(ECHO) Install units dir.... $(INSTALL_UNITDIR) - @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR) - @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR) - @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR) - @$(ECHO) Install data dir..... $(INSTALL_DATADIR) - @$(ECHO) - @$(ECHO) Dist destination dir. $(DIST_DESTDIR) - @$(ECHO) Dist zip name........ $(DIST_ZIPNAME) - @$(ECHO) -.PHONY: fpc_info -fpc_info: $(INFORULES) -.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \ - fpc_makefile_dirs -fpc_makefile: - $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc -fpc_makefile_sub1: -ifdef TARGET_DIRS - $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS)) -endif -ifdef TARGET_EXAMPLEDIRS - $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS)) -endif -fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS)) -fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2 -fpc_makefiles: fpc_makefile fpc_makefile_dirs -all: fpc_all -debug: fpc_debug -smart: fpc_smart -release: fpc_release -units: fpc_units -examples: -shared: fpc_shared -install: fpc_install -sourceinstall: fpc_sourceinstall -exampleinstall: fpc_exampleinstall -distinstall: -zipinstall: -zipsourceinstall: -zipexampleinstall: -zipdistinstall: -clean: fpc_clean -distclean: fpc_distclean -cleanall: fpc_cleanall -info: fpc_info -makefiles: fpc_makefiles -.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles -ifneq ($(wildcard fpcmake.loc),) -include fpcmake.loc -endif -.NOTPARALLEL: diff --git a/utils/simulator/Makefile.fpc b/utils/simulator/Makefile.fpc deleted file mode 100644 index dc27e7d748..0000000000 --- a/utils/simulator/Makefile.fpc +++ /dev/null @@ -1,18 +0,0 @@ -# -# Makefile.fpc for Alpha simulator -# - -[target] -programs=alphasim - -[clean] -units=mm64 fastmm64 simlib simbase - -[install] -fpcpackage=y - -[default] -fpcdir=../.. - -[rules] -.NOTPARALLEL: diff --git a/utils/simulator/alphasim.pas b/utils/simulator/alphasim.pas deleted file mode 100644 index e227415cd3..0000000000 --- a/utils/simulator/alphasim.pas +++ /dev/null @@ -1,1275 +0,0 @@ -{ - This file is part of the Free Pascal simulator environment - Copyright (c) 1999-2000 by Florian Klaempfl - - This file is the main file of the DEC Alpha simulation - - See the file COPYING.FPC, included in this distribution, - for details about the copyright. - - 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. - - **********************************************************************} -{$N+} -{ $define DEBUG} -program alphaemu; - - uses -{$ifdef delphi} - dmisc, -{$else} - dos, -{$endif} - simbase,simlib, -{$ifdef FPC} -{$ifdef go32v2} - dpmiexcp, -{$endif go32v2} -{$endif FPC} -{$ifdef TP} - mm64 -{$else TP} - {$define fastmem} - fastmm64 -{$endif TP} - ; - - { elf file types } - type - telf64_hdr = packed record - e_ident : array[0..15] of char; - e_type : integer; - e_machine : word; - version : longint; - e_entry : qword; - e_phoff : qword; - e_shoff : qword; - e_flags : longint; - e_ehsize : integer; - e_phentsize : integer; - e_phnum : integer; - e_shentsize : integer; - e_shnum : integer; - e_shstrndx : integer; - end; - - telf64_phdr = packed record - p_type : longint; - p_flags : longint; - { Segment file offset } - p_offset : qword; - { Segment virtual address } - p_vaddr : qword; - { Segment physical address } - p_paddr : qword; - { Segment size in file } - p_filesz : qword; - { Segment size in memory } - p_memsz : qword; - { Segment alignment, file & memory } - p_align : qword; - end; - - telf64_phdr_array = array[0..0] of telf64_phdr; - pelf64_phdr_array = ^telf64_phdr_array; - - const -{$ifdef fpc} - { 64kB Stacksize } - stacksize = 64*1024; - { stack start at 4 GB } - stackstart : dword = 1024*1024*1024*4-stacksize; -{$else fpc} - { 64kB Stacksize } - stacksize = 64*1024.0; - { stack start at 4 GB } - stackstart = 1024.0*1024.0*1024.0*4-stacksize; -{$endif fpc} - { alpha specific types } - type - tintreg = record - case tindex of - 1 : (all64 : qword); - 2 : (valueq : int64); - 3 : (low32 : dword;high32 : dword); - 4 : (bytes : array[0..7] of byte) - end; - - tfloatreg = record - case tindex of - 1 : (valued : double); - 2 : (valueq : qword); - end; - - tinstruction = dword; - - tintregs = array[0..31] of tintreg; - tfloatregs = array[0..31] of tfloatreg; - - tstate = object - r : tintregs; - f : tfloatregs; - pc : taddr; - fpcr : qword; - end; - - const - r_v0 = 0; - r_t0 = 1; - - r_fp = 15; - r_a0 = 16; - r_a1 = 17; - r_a2 = 18; - r_a3 = 19; - r_a4 = 20; - r_a5 = 11; - - r_ra = 26; - r_at = 28; - r_gp = 29; - r_sp = 30; - r_zero = 31; - - f_zero = 31; - - type - talphasim = object - state : tstate; - memory : tmemorymanager; - { number of executed instructions } - instrcount : qword; - { time when the emulation was started } - starttime : double; - { starts the execution at address pc } - procedure run(pc : taddr); - { gives a message about an illegal opcode } - { at the given address } - procedure illegalopcode(addr : taddr); - { dumps the contens of the register a0 to a[count] } - procedure dumparguments(count : tindex); - { dumps the contents of the function result register } - procedure dumpv0; - constructor init; - destructor done; - end; - - var - sim : talphasim; - - procedure dump_phdr(const h : telf64_phdr); - - begin -{$ifdef DEBUG} - writeln(' Type: $',hexstr(h.p_type,8)); - writeln(' Flags: $',hexstr(h.p_flags,8)); - writeln(' Segment file offset: $',qword2str(h.p_offset)); - writeln(' Segment virtual address: $',qword2str(h.p_vaddr)); - writeln(' Segment physical address: $',qword2str(h.p_paddr)); - writeln(' Segment size in file: $',qword2str(h.p_filesz)); - writeln(' Segment size in memory: $',qword2str(h.p_memsz)); - writeln(' Segment alignment, file & memory: $',qword2str(h.p_align)); -{$endif DEBUG} - end; - - procedure _stopsim;{$ifdef TP}far;{$endif TP} - - var - elapsedtime : double; - - begin -{$ifdef DEBUG} - elapsedtime:=realtime-sim.starttime; - - write('Executed ',sim.instrcount:0,' instructions in ', - elapsedtime:0:2,' sec'); - if elapsedtime<>0.0 then - begin - writeln(','); - writeln('equals to ',sim.instrcount/(elapsedtime*1000000.0):0:4,' MIPS'); - end - else - writeln; -{$endif DEBUG} - halt(1); - end; - - constructor talphasim.init; - - begin - memory.init; - { setup dummy registers } - state.r[31].valueq:=0; - state.f[31].valued:=0; - memory.allocate(stackstart,stacksize); - end; - - procedure talphasim.illegalopcode(addr : taddr); - - var - instruction : tinstruction; - - begin - instruction:=memory.readd(addr); - writeln('Illegal instruction $',hexstr(instruction,8),' at $',qword2str(addr)); - writeln('Opcode is: $',hexstr((instruction and $fc000000) shr 26,2)); - writeln(' Function would be: $',hexstr((instruction and $1fe0) shr 5,3)); - writeln; - stopsim; - end; - - procedure talphasim.dumparguments(count : tindex); - - var - i : tindex; - - begin - if count>6 then - begin - writeln('Illegal number of arguments to print'); - halt(1); - end; -{$ifdef DEBUG} - for i:=0 to count-1 do - writeln(' Register a',i,' = $',qword2str(state.r[r_a0+i].valueq)); -{$endif DEBUG} - end; - - procedure talphasim.dumpv0; - - var - i : tindex; - - begin -{$ifdef DEBUG} - writeln(' Register v0 = $',qword2str(state.r[r_v0].valueq)); -{$endif DEBUG} - end; - - procedure talphasim.run(pc : taddr); - - var - instruction : tinstruction; - rega,regb,regc : tindex; - lit : byte; - va : tintreg; - - function getbranchdisp : int64; - - var - l : longint; - - begin - l:=longint(instruction and $1fffff)*4; - { sign extend } - if (l and $100000)<>0 then - l:=l or $fff00000; - getbranchdisp:=l; - end; - - procedure instructionignored(const s : string); - - begin -{$ifdef DEBUG} - writeln('Instruction "',s,'" at $',qword2str(instructionpc),' ignored'); -{$endif DEBUG} - end; - - procedure syscallignored(const s : string); - - begin -{$ifdef DEBUG} - writeln('SYSCALL "',s,'" at $',qword2str(instructionpc),' ignored'); -{$endif DEBUG} - end; - - procedure syscalldefault(const s : string); - - begin -{$ifdef DEBUG} - writeln('SYSCALL "',s,'" at $',qword2str(instructionpc),', default value returned'); -{$endif DEBUG} - end; - - var - i : tindex; - fs : single; - ib : byte; - il : longint; - fc : comp; - ic : char; - valueqa,valueqb : qword; - oi : oword; - count : qword; -{$ifdef FASTMEM} - block : pdword; - fastpc : longint; - updatepc : boolean; -{$endif FASTMEM} - - begin - instrcount:=0; - state.pc:=pc; - { setting up the stack pointer } - state.r[r_sp].valueq:=stackstart+stacksize-24; - { setting up command line parameters ... } - state.r[r_a0].valueq:=0; - state.r[r_a1].valueq:=0; - { ... and environment } - state.r[r_a2].valueq:=0; - - starttime:=realtime; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - repeat - { read the next instruction } -{$ifdef FASTMEM} - if updatepc then - begin - block:=pdword(memory.mem[((tqwordrec(state.pc).high32 and $f) shl 12) or - ((tqwordrec(state.pc).low32 and $fff) shr 20)]); - fastpc:=(tqwordrec(state.pc).low32 and $fffff) shr 2; - end; - instruction:=block[fastpc]; - inc(fastpc); - updatepc:=fastpc>1024*256-1; -{$else FASTMEM} - instruction:=memory.readalignedd(state.pc); -{$endif FASTMEM} - instructionpc:=state.pc; - state.pc:=state.pc+4; - - { decode the instruction } - case (instruction and $fc000000) shr 26 of - { CALL_PAL } - $0: - begin - case instruction and $3ffffff of - { halt } - 0: - exit; - 131: - begin - if state.r[r_v0].high32=0 then - case state.r[r_v0].low32 of - { Setup } - 0: - begin - syscallignored('setup'); - { mimic proper execution } - state.r[r_v0].valueq:=0; - end; - 1: - begin - exit; - end; - 4: - begin - syscallignored('write'); - state.r[r_v0].valueq:=0; - count:=0; - while count'); - dumpv0; - dumparguments(4); - end; - - end - else - begin - syscallignored(''); - dumpv0; - dumparguments(4); - end; - end; - else - writeln('PAL code $',hexstr(instruction and $3ffffff,8),' at $', - qword2str(instructionpc),' ignored'); - end; - end; - { LDA } - $8: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - if rega<>r_zero then - state.r[rega].valueq:=state.r[regb].valueq+int64(integer(instruction and $ffff)); - end; - { LDAH } - $9: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - if rega<>r_zero then - state.r[rega].valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))*65536); - end; - { LDQ_U } - $B: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - valueqb:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - tqwordrec(valueqb).low32:=tqwordrec(valueqb).low32 and $fffffff8; - if rega<>r_zero then - state.r[rega].valueq:=memory.readq(valueqb); - end; - { STQ_U } - $f: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - memory.writeq(va.valueq,state.r[rega].valueq); - end; - - { ************* opcode $10 ************** } - $10: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - regc:=instruction and $1f; - valueqa:=state.r[rega].valueq; - if (instruction and $1000)<>0 then - valueqb:=(instruction and $1fe000) shr 13 - else - valueqb:=state.r[regb].valueq; - case (instruction and $fe0) shr 5 of - { ADDL } - $0: - begin - if regc<>r_zero then - state.r[regc].low32:=tqwordrec(valueqa).low32+tqwordrec(valueqb).low32; - end; - { CMPULT } - $1D: - begin - if (regc<>r_zero) then - state.r[regc].valueq:=byte(ltu(valueqa,valueqb)); - end; - { ADDQ } - $20: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa+valueqb; - end; - { S4ADDQ } - $22: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa*4+valueqb; - end; - { SUBQ } - $29: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa-valueqb; - end; - { S4SUBQ } - $2B: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa*4-valueqb; - end; - { CMPEQ } - $2D: - begin - if (regc<>r_zero) then - state.r[regc].valueq:=byte(valueqa=valueqb); - end; - { S8ADDQ } - $32: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa*8+valueqb; - end; - { S8SUBQ } - $3B: - begin - if regc<>r_zero then - state.r[regc].valueq:=valueqa*8-valueqb; - end; - { CMPULE } - $3D: - begin - if (regc<>r_zero) then - state.r[regc].valueq:=byte(leu(valueqa,valueqb)); - end; - { CMPLT } - $4D: - begin - if (regc<>r_zero) then - state.r[regc].valueq:=byte(valueqar_zero) then - state.r[regc].valueq:=byte(valueqa<=valueqb); - end; - else - illegalopcode(instructionpc); - end; - end; - - { ************* opcode $11 ************** } - $11: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - regc:=instruction and $1f; - valueqa:=state.r[rega].valueq; - if (instruction and $1000)<>0 then - valueqb:=(instruction and $1fe000) shr 13 - else - valueqb:=state.r[regb].valueq; - case (instruction and $fe0) shr 5 of - { AND } - $00: - begin - if regc<>r_zero then - begin - state.r[regc].low32:=tqwordrec(valueqa).low32 and - tqwordrec(valueqb).low32; - state.r[regc].high32:=tqwordrec(valueqa).high32 and - tqwordrec(valueqb).high32; - end; - end; - { BIC } - $08: - begin - if regc<>r_zero then - begin - state.r[regc].low32:=tqwordrec(valueqa).low32 and - not(tqwordrec(valueqb).low32); - state.r[regc].high32:=tqwordrec(valueqa).high32 and - not(tqwordrec(valueqb).high32); - end; - end; - { CMOVLBS } - $14: - begin - if (regc<>r_zero) and ((tqwordrec(valueqa).low32 and 1)<>0) then - state.r[regc].valueq:=valueqb; - end; - { CMOVLBC } - $16: - begin - if (regc<>r_zero) and ((tqwordrec(valueqa).low32 and 1)=0) then - state.r[regc].valueq:=valueqb; - end; - { BIS } - $20: - begin - if regc<>r_zero then - begin - state.r[regc].low32:=tqwordrec(valueqa).low32 or - tqwordrec(valueqb).low32; - state.r[regc].high32:=tqwordrec(valueqa).high32 or - tqwordrec(valueqb).high32; - end; - end; - { CMOVEQ } - $24: - begin - if (regc<>r_zero) and (valueqa=0) then - state.r[regc].valueq:=valueqb; - end; - { CMOVNE } - $26: - begin - if (regc<>r_zero) and (valueqa<>0) then - state.r[regc].valueq:=valueqb; - end; - { ORNOT } - $28: - begin - if regc<>r_zero then - begin - state.r[regc].low32:=tqwordrec(valueqa).low32 or - not(tqwordrec(valueqb).low32); - state.r[regc].high32:=tqwordrec(valueqa).high32 or - not(tqwordrec(valueqb).high32); - end; - end; - { XOR } - $40: - begin - if regc<>r_zero then - begin - state.r[regc].valueq:=state.r[rega].valueq xor - valueqb; - end; - end; - { CMOVLT } - $44: - begin - if (regc<>r_zero) and (valueqa<0) then - state.r[regc].valueq:=valueqb; - end; - { CMOVGE } - $46: - begin - if (regc<>r_zero) and (valueqa>=0) then - state.r[regc].valueq:=valueqb; - end; - { EQV } - $48: - begin - if regc<>r_zero then - begin - state.r[regc].valueq:=valueqa xor - not(valueqb); - end; - end; - { CMOVLE } - $64: - begin - if (regc<>r_zero) and (valueqa<=0) then - state.r[regc].valueq:=valueqb; - end; - { CMOVGT } - $66: - begin - if (regc<>r_zero) and (valueqa<=0) then - state.r[regc].valueq:=valueqb; - end; - else - illegalopcode(instructionpc); - end; - end; - - { ************* opcode $12 ************** } - $12: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - regc:=instruction and $1f; - valueqa:=state.r[rega].valueq; - if (instruction and $1000)<>0 then - valueqb:=(instruction and $1fe000) shr 13 - else - valueqb:=state.r[regb].valueq; - case (instruction and $fe0) shr 5 of - { MSKBL } - $02: - begin - { !!!!! no MSB support yet! } - il:=1 shl (tqwordrec(valueqb).low32 and $7); - if (regc<>r_zero) then - byte_zap(valueqa,il and $ff,state.r[regc].valueq); - end; - { EXTBL } - $06: - begin - { !!!!! no MSB support yet! } - shift_right_q(valueqa,(tqwordrec(valueqb).low32 and $7)*8,valueqa); - if (regc<>r_zero) then - byte_zap(valueqa,$fe,state.r[regc].valueq); - end; - { INSBL } - $0B: - begin - { !!!!! no MSB support yet! } - il:=1 shl (tqwordrec(valueqb).low32 and $7); - shift_left_q(valueqa,(tqwordrec(valueqb).low32 and $7)*8,valueqa); - if (regc<>r_zero) then - byte_zap(valueqa,not(il and $ff),state.r[regc].valueq); - end; - { MSKWL } - $12: - begin - { !!!!! no MSB support yet! } - il:=3 shl (tqwordrec(valueqb).low32 and $7); - if (regc<>r_zero) then - byte_zap(valueqa,il and $ff,state.r[regc].valueq); - end; - { EXTWL } - $16: - begin - { !!!!! no MSB support yet! } - shift_right_q(valueqa,(tqwordrec(valueqb).low32 and $7)*8,valueqa); - if (regc<>r_zero) then - byte_zap(valueqa,$fc,state.r[regc].valueq); - end; - { MSKLL } - $22: - begin - { !!!!! no MSB support yet! } - il:=$f shl (tqwordrec(valueqb).low32 and $7); - if (regc<>r_zero) then - byte_zap(valueqa,il and $ff,state.r[regc].valueq); - end; - { EXTLL } - $26: - begin - { !!!!! no MSB support yet! } - shift_right_q(valueqa,(tqwordrec(valueqb).low32 and $7)*8,valueqa); - if (regc<>r_zero) then - byte_zap(valueqa,$f0,state.r[regc].valueq); - end; - { ZAP } - $30: - begin - if regc<>r_zero then - byte_zap(valueqa,trunc(valueqb),state.r[regc].valueq); - end; - { ZAPNOT } - $31: - begin - if regc<>r_zero then - byte_zap(valueqa,not(trunc(valueqb)),state.r[regc].valueq); - end; - { MSKQL } - $32: - begin - { !!!!! no MSB support yet! } - il:=$ff shl (tqwordrec(valueqb).low32 and $7); - if (regc<>r_zero) then - byte_zap(valueqa,il and $ff,state.r[regc].valueq); - end; - { SRL } - $34: - begin - if regc<>r_zero then - state.r[regc].valueq:=state.r[regc].valueq shr (valueqb and $3f); - end; - { EXTQL } - $36: - begin - { !!!!! no MSB support yet! } - shift_right_q(valueqa,(tqwordrec(valueqb).low32 and $7)*8,valueqa); - if (regc<>r_zero) then - state.r[regc].valueq:=valueqa; - end; - { SLL } - $39: - begin - if regc<>r_zero then - shift_left_q(valueqa,trunc(valueqb) and $3f,state.r[regc].valueq); - end - else - illegalopcode(instructionpc); - end; - end; - - { ************* opcode $13 ************** } - $13: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - regc:=instruction and $1f; - valueqa:=state.r[rega].valueq; - if (instruction and $1000)<>0 then - valueqb:=(instruction and $1fe000) shr 13 - else - valueqb:=state.r[regb].valueq; - case (instruction and $fe0) shr 5 of - { UMULH } - $30: - if regc<>31 then - begin - mulqword(valueqa,valueqb,oi); - state.r[regc].valueq:=towordrec(oi).high64; - end; - else - illegalopcode(instructionpc); - end; - end; - - { ************* opcode $17 ************** } - $17: - case (instruction and $ffe0) shr 5 of - { MT_FPCR } - $24: - begin - rega:=(instruction and $3e00000) shr 21; - state.fpcr:=state.f[rega].valueq; - end; - { MF_FPCR } - $25: - begin - rega:=(instruction and $3e00000) shr 21; - if rega<>f_zero then - state.f[rega].valueq:=state.fpcr; - end; - else - illegalopcode(instructionpc); - end; - - { ************* opcode $18 ************** } - $18: - case instruction and $ffff of - { EXCB } - $400: - instructionignored('EXCN'); - else - illegalopcode(instructionpc); - end; - - { JMP,JSR,RET JSR_COROUTINE } - $1a: - begin - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va:=state.r[regb]; - va.low32:=va.low32 and $fffffffe; - if rega<>31 then - state.r[rega].valueq:=state.pc; - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - { LDS } - $22: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - if rega<>f_zero then - begin - { we need to copy the bit pattern! } - dword(fs):=memory.readd(va.valueq); - state.f[rega].valued:=fs; - end; - { !!!!!! no translation exceptions! } - end; - { LDT } - $23: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - if rega<>f_zero then - state.f[rega].valueq:=memory.readq(va.valueq); - { !!!!!! no translation exceptions! } - end; -{$ifdef dummy} - { !!!!!!!! STF } - $24: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - fs:=state.f[rega].valued; - memory.writed(va.valueq,longint(fs)); - { !!!!!! no tranlation exceptions! } - end; - { !!!!!!!!!!!! STG } - $25: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - memory.writeq(va.valueq,state.f[rega].valueq); - { !!!!!! no translation exceptions! } - end; -{$endif dummy} - { !!!!!!!!!!!!! STS } - $26: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - fs:=state.f[rega].valued; - memory.writed(va.valueq,longint(fs)); - { !!!!!! no tranlation exceptions! } - end; - { STT } - $27: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - memory.writeq(va.valueq,state.f[rega].valueq); - { !!!!!! no translation exceptions! } - end; - { LDL } - $28: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - if rega<>r_zero then - state.r[rega].low32:=memory.readalignedd(state.r[regb].valueq+ - (int64(integer(instruction and $ffff)))); - { sign extend } - if state.r[rega].low32<0 then - state.r[rega].high32:=$ffffffff - else - state.r[rega].high32:=0; - end; - { LDQ } - $29: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - if rega<>r_zero then - state.r[rega].valueq:=memory.readalignedq(state.r[regb].valueq+ - (int64(integer(instruction and $ffff)))); - end; - { STL } - $2C: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - memory.writealignedd(va.valueq,state.r[rega].low32); - end; - { STQ } - $2D: - begin - { !!!!! no MSB support yet! } - rega:=(instruction and $3e00000) shr 21; - regb:=(instruction and $1f0000) shr 16; - va.valueq:=state.r[regb].valueq+ - (int64(integer(instruction and $ffff))); - memory.writeq(va.valueq,state.r[rega].valueq); - end; - { BR,BSR } - $30,$34: - begin - rega:=(instruction and $3e00000) shr 21; - if rega<>31 then - state.r[rega].valueq:=state.pc; - state.pc:=state.pc+getbranchdisp; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - { BLSC } - $38: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if (state.r[rega].low32 and 1)=0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BEQ } - $39: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq=0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BLT } - $3A: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq<0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BLE } - $3B: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq<=0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BLBS } - $3C: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if (state.r[rega].low32 and 1)<>0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BNE } - $3D: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq<>0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BGE } - $3E: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq>=0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - { BGT } - $3F: - begin - rega:=(instruction and $3e00000) shr 21; - va.valueq:=state.pc+getbranchdisp; - if state.r[rega].valueq>0 then - begin - state.pc:=va.valueq; -{$ifdef FASTMEM} - updatepc:=true; -{$endif FASTMEM} - end; - end; - else - illegalopcode(instructionpc); - end; - instrcount:=instrcount+1; - until false; - end; - - destructor talphasim.done; - - begin - { deallocate memory } - { memory.done; } - end; - - procedure illelfformat; - - begin - writeln('Illegal format of ELF'); - halt(1); - end; - - var - f : file; - elf64_hdr : telf64_hdr; - i : tindex; - j,q : qword; - b : byte; - elf64_phdr : pelf64_phdr_array; - - const - et2str : array[0..6] of string[10] = ('ET_NONE','ET_REL','ET_EXEC', - 'ET_DYN','ET_CORE','ET_LOPROC', - 'ET_HIPROC'); - em2str : array[0..11] of string[10] = ('EM_NONE','EM_M32','EM_SPARC', - 'EM_386','EM_68K','EM_88K', - 'EM_486','EM_860','EM_MIPS','', - 'EM_MIPS_RS4_BE','EM_SPARC64'); - - begin - if paramcount<>1 then - begin - writeln('Usage ALPHAEMU '); - halt(1); - end; -{$ifdef DEBUG} - write('Init... '); -{$endif DEBUG} - assign(f,paramstr(1)); - {$I-} - reset(f,1); - {$I+} - if ioresult<>0 then - begin - writeln; - writeln('Can''t open input file ',paramstr(1)); - halt(1); - end; - blockread(f,elf64_hdr,sizeof(elf64_hdr)); -{$ifdef DEBUG} - writeln('Signature:'); - for i:=0 to 15 do - write(elf64_hdr.e_ident[i],'(',ord(elf64_hdr.e_ident[i]),') '); - writeln; - writeln('ELF type: ',et2str[elf64_hdr.e_type]); - case elf64_hdr.e_machine of - 0..11: - writeln('ELF machine: ',em2str[elf64_hdr.e_machine]); - 15: - writeln('ELF machine: EM_PARISC'); - 18: - writeln('ELF machine: EM_SPARC32PLUS'); - 20: - writeln('ELF machine: EM_PPC'); - $9026: - writeln('ELF machine: EM_ALPHA'); - else - illelfformat; - end; - - writeln('ELF header size: $',hexstr(elf64_hdr.e_ehsize,8)); - writeln('Entry point: $',qword2str(elf64_hdr.e_entry)); - - writeln('Program header table file offset: $',qword2str(elf64_hdr.e_phoff)); - writeln('Number of program headers : $',hexstr(elf64_hdr.e_phnum,8)); - writeln('Size of one program header: $',hexstr(elf64_hdr.e_phentsize,8)); - - writeln('Section header table file offset: $',qword2str(elf64_hdr.e_shoff)); - { writeln('Section name index: $',hexstr(elf64_hdr.e_shstrndx,8)); } -{$endif} - if (elf64_hdr.e_ident[0]<>chr(127)) or - (elf64_hdr.e_ident[1]<>'E') or - (elf64_hdr.e_ident[2]<>'L') or - (elf64_hdr.e_ident[3]<>'F') or - (elf64_hdr.e_type<>2) or - (elf64_hdr.e_machine<>$9026) then - illelfformat; - - { load programm headers } - getmem(elf64_phdr,elf64_hdr.e_phentsize*elf64_hdr.e_phnum); - seek(f,trunc(elf64_hdr.e_phoff)); - blockread(f,elf64_phdr^,elf64_hdr.e_phentsize*elf64_hdr.e_phnum); - for i:=0 to elf64_hdr.e_phnum-1 do - begin -{$ifdef DEBUG} - writeln('Programm header ',i); - dump_phdr(elf64_phdr^[i]); -{$endif DEBUG} - end; - { ok, now init the emulator } - sim.init; - {$ifdef FPC} - stopsim:=@_stopsim; - {$else FPC} - stopsim:=_stopsim; - {$endif FPC} -{$ifdef DEBUG} - writeln('OK'); - write('Loading memory... '); -{$endif DEBUG} - { load memory } - for i:=0 to elf64_hdr.e_phnum-1 do - begin -{$ifdef DEBUG} - write(i+1,' '); -{$endif DEBUG} - sim.memory.allocate(elf64_phdr^[i].p_vaddr,elf64_phdr^[i].p_memsz); - seek(f,trunc(elf64_phdr^[i].p_offset)); - j:=0; - { can we speedup the loading? } - if (tqwordrec(elf64_phdr^[i].p_filesz).low32 and $7)=0 then - while j0 then - begin - writeln('This memory manager supports only 36 bit'); - writeln('Base address was ',qword2str(addr)); - halt(1); - end; - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - begin - getmem(mem[upperbits],1024*1024); - fillchar(mem[upperbits]^,1024*1024,0); - end; - end; - - var - asize : qword; - - begin - while size>0 do - begin - if size>1024*1024 then - asize:=1024*1024; - allocateblock(addr); - if asize>size then - break; - size:=size-asize; - addr:=addr+asize; - end; - end; - - function tmemorymanager.readq(addr : taddr) : qword; - - var - h : qword; - - begin - tqwordrec(h).low32:=readd(addr); - tqwordrec(h).high32:=readd(addr+4); - readq:=h; - end; - - function tmemorymanager.readd(addr : taddr) : dword; - - begin - readd:=readb(addr)+readb(addr+1) shl 8+readb(addr+2) shl 16+ - readb(addr+3) shl 24; - end; - - function tmemorymanager.readalignedd(addr : taddr) : dword; - - var - upperbits : longint; - - begin - if (tqwordrec(addr).low32 and $3)<>0 then - exception('Alignment violation (dword) to $'+qword2str(addr),instructionpc); - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - exception('Access violation to $'+qword2str(addr),instructionpc); - readalignedd:=pdword(mem[upperbits])[(tqwordrec(addr).low32 and $fffff) shr 2]; - end; - - function tmemorymanager.readalignedq(addr : taddr) : qword; - - var - upperbits : longint; - - begin - if (tqwordrec(addr).low32 and $7)<>0 then - exception('Alignment violation (dword) to $'+qword2str(addr),instructionpc); - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - exception('Access violation to $'+qword2str(addr),instructionpc); - readalignedq:=pqword(mem[upperbits])[(tqwordrec(addr).low32 and $fffff) shr 3]; - end; - - function tmemorymanager.readb(addr : taddr) : dword; - - var - upperbits : longint; - - begin - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - exception('Access violation to $'+qword2str(addr),instructionpc); - readb:=mem[upperbits,tqwordrec(addr).low32 and $fffff]; - end; - - procedure tmemorymanager.writeb(addr : taddr;b : byte); - - var - upperbits : longint; - - begin - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - exception('Access violation to $'+qword2str(addr),instructionpc); - mem[upperbits,tqwordrec(addr).low32 and $fffff]:=b; - end; - - procedure tmemorymanager.writealignedd(addr : taddr;d : dword); - - var - upperbits : longint; - - begin - if (tqwordrec(addr).low32 and $3)<>0 then - exception('Alignment violation (dword) to $'+qword2str(addr),instructionpc); - upperbits:=((tqwordrec(addr).high32 and $f) shl 12) or ((tqwordrec(addr).low32 and $fff) shr 20); - if not(assigned(mem[upperbits])) then - exception('Access violation to $'+qword2str(addr),instructionpc); - pdword(mem[upperbits])[(tqwordrec(addr).low32 and $fffff) shr 2]:=d; - end; - - procedure tmemorymanager.writed(addr : taddr;d : dword); - - begin - writeb(addr,tdword(d)[0]); - writeb(addr+1,tdword(d)[1]); - writeb(addr+2,tdword(d)[2]); - writeb(addr+3,tdword(d)[3]); - end; - - procedure tmemorymanager.writeq(addr : taddr;q : qword); - - begin - writed(addr,tqwordrec(q).low32); - writed(addr+4,tqwordrec(q).high32); - end; - -end. diff --git a/utils/simulator/mm64.pas b/utils/simulator/mm64.pas deleted file mode 100644 index 95139fe375..0000000000 --- a/utils/simulator/mm64.pas +++ /dev/null @@ -1,295 +0,0 @@ -{ - This file is part of the Free Pascal simulator environment - Copyright (c) 1999-2000 by Florian Klaempfl - - This unit implemements a memory manager for 64 bit processor - simulations, it works also with TP - - See the file COPYING.FPC, included in this distribution, - for details about the copyright. - - 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. - - **********************************************************************} -{ a simple 64 bit simulator memory manager, also running with TP } -{$N+} -unit mm64; - - interface - - uses - simbase; - - const - memoryblocksize = 32768; - - type - taddr = qword; - tmemoryblock = array[0..memoryblocksize-1] of byte; - pmemoryblock = ^tmemoryblock; - - pmemoryarea = ^tmemoryarea; - tmemoryarea = record - addr : qword; - memory : pmemoryblock; - size : dword; - next : pmemoryarea; - end; - - tmemorymanager = object - mem : pmemoryarea; - constructor init; - { "memory" access routines } - function readalignedq(addr : taddr) : qword; - function readq(addr : taddr) : qword; - function readalignedd(addr : taddr) : dword; - function readd(addr : taddr) : dword; - function readb(addr : taddr) : dword; - procedure writeb(addr : taddr;b : byte); - procedure writealignedd(addr : taddr;d : dword); - procedure writed(addr : taddr;d : dword); - procedure writeq(addr : taddr;q : qword); - procedure allocate(addr : taddr;size : qword); - end; - - var - { address of the currently executed instruction, } - { necessary for correct output of exception } - instructionpc : taddr; - - implementation - - procedure exception(const s : string;addr : taddr); - - begin - writeln; - writeln('Exception: ',s,' at $',qword2str(addr)); - stopsim; - end; - - constructor tmemorymanager.init; - - begin - mem:=nil; - end; - - procedure tmemorymanager.allocate(addr : taddr;size : qword); - - var - ma : pmemoryarea; - asize : qword; - - begin - while size>0 do - begin - if size>32768 then - asize:=32768 - else - asize:=size; - size:=size-asize; - new(ma); - getmem(ma^.memory,trunc(asize)); - fillchar(ma^.memory^,trunc(asize),0); - ma^.size:=trunc(asize); - ma^.addr:=addr; - addr:=addr+asize; - - ma^.next:=mem; - mem:=ma; - end; - end; - - function tmemorymanager.readq(addr : taddr) : qword; - - var - h : qword; - ma : pmemoryarea; - qw : tqwordrec; - - begin - ma:=mem; - while assigned(ma) do - begin - if (addr>=ma^.addr) and (addr0 then - exception('Alignment violation (dword) to $'+qword2str(addr),instructionpc); - ma:=mem; - while assigned(ma) do - begin - if (addr>=ma^.addr) and (addr=ma^.addr) and (addr0 then - exception('Alignment violation (dword) to $'+qword2str(addr),instructionpc); - ma:=mem; - while assigned(ma) do - begin - if (addr>=ma^.addr) and (addr=ma^.addr) and (addr=ma^.addr) and (addr=ma^.addr) and (addr=ma^.addr) and (addr63 then - else if b>31 then - tqwordrec(r).high32:=tqwordrec(q).low32 shl (b-32) - else - begin - { bad solution! A qword shift would be nice! } - r:=q; - for i:=1 to b do - begin - tqwordrec(r).high32:=tqwordrec(r).high32 shl 1; - if (tqwordrec(r).low32 and $80000000)<>0 then - tqwordrec(r).high32:=tqwordrec(r).high32 or 1; - tqwordrec(r).low32:=tqwordrec(r).low32 shl 1; - end; - end; - end; - - { shifts q b bytes right } - procedure shift_right_q(q : qword;b : byte;var r : qword); - - var - i : tindex; - - begin - r:=0; - if b>63 then - else if b>31 then - tqwordrec(r).low32:=tqwordrec(q).high32 shr (b-32) - else - begin - { bad solution! A qword shift would be nice! } - r:=q; - for i:=1 to b do - begin - tqwordrec(r).low32:=tqwordrec(r).low32 shr 1; - if (tqwordrec(r).high32 and 1)<>0 then - tqwordrec(r).low32:=tqwordrec(r).low32 or - $80000000; - tqwordrec(r).high32:=tqwordrec(r).high32 shr 1; - end; - end; - end; - - { returns true if i1=0) and (c2>=0) then - ltu:=c1=0) then - ltu:=false - else if (c1>=0) and (c2<0) then - ltu:=true - else - ltu:=c1=0) and (c2>=0) then - leu:=c1<=c2 - else if (c1<0) and (c2>=0) then - leu:=false - else if (c1>=0) and (c2<0) then - leu:=true - else - leu:=c1<=c2 - end; - - { "ands" two qwords } - procedure andqword(w1,w2 : qword;var r : qword); - - begin - tqwordrec(r).low32:=tqwordrec(w1).low32 and tqwordrec(w2).low32; - tqwordrec(r).high32:=tqwordrec(w1).high32 and tqwordrec(w2).high32; - end; - - { adds two words, returns true if an overflow occurs } - function addword(w1,w2 : word;var r : word) : boolean; - - var - l : longint; - - begin - l:=w1+w2; - addword:=(l and $10000)<>0; - r:=l and $ffff; - end; - - { adds two owords, returns true if an overflow occurs } - function addoword(o1,o2 : oword;var r : oword) : boolean; - - var - i : tindex; - carry : word; - - begin - carry:=0; - for i:=0 to 7 do - begin - r[i]:=o1[i]+o2[i]+carry; - { an overflow has occured, if the r is less - than one of the summands - } - if (r[i]0 then - addoword(r,ho1,r); - - { ho1:=2*ho1 } - addoword(ho1,ho1,ho1); - shift_left_q(bitpos,1,bitpos); - end; - end; - -end.