+ experimental support unit for Phillips/NXP arm microcontroller

git-svn-id: trunk@12597 -
This commit is contained in:
florian 2009-01-25 21:56:23 +00:00
parent 2a29180517
commit c07a60f8e0
4 changed files with 513 additions and 464 deletions

1
.gitattributes vendored
View File

@ -5219,6 +5219,7 @@ rtl/darwin/x86_64/sig_cpu.inc svneol=native#text/plain
rtl/darwin/x86_64/sighnd.inc svneol=native#text/plain
rtl/embedded/Makefile svneol=native#text/plain
rtl/embedded/Makefile.fpc svneol=native#text/plain
rtl/embedded/arm/lpc21x4.pp svneol=native#text/plain
rtl/embedded/check.inc svneol=native#text/plain
rtl/embedded/empty.cfg -text
rtl/embedded/rtl.cfg -text

View File

@ -1,8 +1,8 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/10/22]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/01/23]
#
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
MAKEFILETARGETS=i386-embedded m68k-embedded powerpc-embedded sparc-embedded x86_64-embedded arm-embedded powerpc64-embedded avr-embedded armeb-embedded
BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) solaris qnx
LIMIT83fs = go32v2 os2 emx watcom
@ -275,530 +275,94 @@ override FPCOPT+=@rtl.cfg
ifdef RELEASE
override FPCOPT+=-Ur
endif
CPU_UNITS=
SYSINIT_UNITS=
ifeq ($(ARCH),arm)
CPU_UNITS=lpc21x4
endif
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-haiku)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),i386-symbian)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-darwin)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-nds)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),arm-symbian)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),avr-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),armeb-linux)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
endif
override INSTALL_FPCPACKAGE=y
ifeq ($(FULL_TARGET),i386-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-win32)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-os2)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-beos)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-haiku)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-solaris)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-qnx)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-netware)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-darwin)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-emx)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-watcom)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-wince)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-symbian)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-atari)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),sparc-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-palmos)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-darwin)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-wince)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-gba)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-nds)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),arm-symbian)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),avr-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),armeb-linux)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
endif
ifeq ($(FULL_TARGET),i386-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-win32)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-os2)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-beos)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-haiku)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-solaris)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-qnx)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-netware)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-darwin)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-emx)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-watcom)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-wince)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),i386-symbian)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-atari)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),m68k-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),sparc-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),sparc-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-palmos)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-darwin)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-wince)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-gba)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-nds)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),arm-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),arm-symbian)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),avr-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
endif
ifeq ($(FULL_TARGET),armeb-linux)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifeq ($(FULL_TARGET),armeb-embedded)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
endif
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)

View File

@ -7,7 +7,7 @@ main=rtl
[target]
loaders=
units=$(SYSTEMUNIT) # objpas macpas strings \
units=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings \
# dos \
# sysutils \
# classes math typinfo varutils fmtbcd \
@ -29,8 +29,7 @@ target=embedded
[compiler]
includedir=$(INC) $(PROCINC)
sourcedir=$(INC) $(PROCINC) $(COMMON)
sourcedir=$(INC) $(PROCINC) $(COMMON) $(ARCH)
[prerules]
RTL=..
@ -45,6 +44,13 @@ ifdef RELEASE
override FPCOPT+=-Ur
endif
CPU_UNITS=
SYSINIT_UNITS=
ifeq ($(ARCH),arm)
CPU_UNITS=lpc21x4
endif
# Paths
OBJPASDIR=$(RTL)/objpas
GRAPHDIR=$(INC)/graph

478
rtl/embedded/arm/lpc21x4.pp Normal file
View File

@ -0,0 +1,478 @@
{******************************************************************************
lpc2114.h - Register defs for Philips LPC2114, LPC2124
THE SOFTWARE IS DELIVERED "AS IS" WITHOUT WARRANTY OR CONDITION OF ANY KIND,
EITHER EXPRESS, IMPLIED OR STATUTORY. THIS INCLUDES WITHOUT LIMITATION ANY
WARRANTY OR CONDITION WITH RESPECT TO MERCHANTABILITY OR FITNESS FOR ANY
PARTICULAR PURPOSE, OR AGAINST THE INFRINGEMENTS OF INTELLECTUAL PROPERTY RIGHTS
OF OTHERS.
This file may be freely used for commercial and non-commercial applications,
including being redistributed with any tools.
If you find a problem with the file, please report it so that it can be fixed.
Created by Sten Larsson (sten_larsson at yahoo com)
Free Pascal conversion by the Free Pascal development team
******************************************************************************}
unit lpc21x4;
interface
{##############################################################################
## MISC
##############################################################################}
{ Constants for data to put in IRQ/FIQ Exception Vectors }
const
VECTDATA_IRQ = dword($E51FFFF0); { LDR PC,[PC,#-0xFF0] }
// VECTDATA_FIQ { __TODO }
type
BITS32 = bitpacked array[0..31] of 0..1;
{##############################################################################
## VECTORED INTERRUPT CONTROLLER
##############################################################################}
var
VICIRQStatus : DWord absolute dword($FFFFF000);
VICFIQStatus : DWord absolute $FFFFF004;
VICRawIntr : DWord absolute $FFFFF008;
VICIntSelect : DWord absolute $FFFFF00C;
VICIntEnable : DWord absolute $FFFFF010;
VICIntEnClear : DWord absolute $FFFFF014;
VICSoftInt : DWord absolute $FFFFF018;
VICSoftIntClear : DWord absolute $FFFFF01C;
VICProtection : DWord absolute $FFFFF020;
VICVectAddr : DWord absolute $FFFFF030;
VICDefVectAddr : DWord absolute $FFFFF034;
VICVectAddr0 : DWord absolute $FFFFF100;
VICVectAddr1 : DWord absolute $FFFFF104;
VICVectAddr2 : DWord absolute $FFFFF108;
VICVectAddr3 : DWord absolute $FFFFF10C;
VICVectAddr4 : DWord absolute $FFFFF110;
VICVectAddr5 : DWord absolute $FFFFF114;
VICVectAddr6 : DWord absolute $FFFFF118;
VICVectAddr7 : DWord absolute $FFFFF11C;
VICVectAddr8 : DWord absolute $FFFFF120;
VICVectAddr9 : DWord absolute $FFFFF124;
VICVectAddr10 : DWord absolute $FFFFF128;
VICVectAddr11 : DWord absolute $FFFFF12C;
VICVectAddr12 : DWord absolute $FFFFF130;
VICVectAddr13 : DWord absolute $FFFFF134;
VICVectAddr14 : DWord absolute $FFFFF138;
VICVectAddr15 : DWord absolute $FFFFF13C;
VICVectCntl0 : DWord absolute $FFFFF200;
VICVectCntl1 : DWord absolute $FFFFF204;
VICVectCntl2 : DWord absolute $FFFFF208;
VICVectCntl3 : DWord absolute $FFFFF20C;
VICVectCntl4 : DWord absolute $FFFFF210;
VICVectCntl5 : DWord absolute $FFFFF214;
VICVectCntl6 : DWord absolute $FFFFF218;
VICVectCntl7 : DWord absolute $FFFFF21C;
VICVectCntl8 : DWord absolute $FFFFF220;
VICVectCntl9 : DWord absolute $FFFFF224;
VICVectCntl10 : DWord absolute $FFFFF228;
VICVectCntl11 : DWord absolute $FFFFF22C;
VICVectCntl12 : DWord absolute $FFFFF230;
VICVectCntl13 : DWord absolute $FFFFF234;
VICVectCntl14 : DWord absolute $FFFFF238;
VICVectCntl15 : DWord absolute $FFFFF23C;
VICITCR : DWord absolute $FFFFF300;
VICITIP1 : DWord absolute $FFFFF304;
VICITIP2 : DWord absolute $FFFFF308;
VICITOP1 : DWord absolute $FFFFF30C;
VICITOP2 : DWord absolute $FFFFF310;
VICPeriphID0 : DWord absolute $FFFFFFE0;
VICPeriphID1 : DWord absolute $FFFFFFE4;
VICPeriphID2 : DWord absolute $FFFFFFE8;
VICPeriphID3 : DWord absolute $FFFFFFEC;
VICIntEnClr : DWord absolute $FFFFF014;
VICSoftIntClr : DWord absolute $FFFFF01C;
{##############################################################################
## PCB - Pin Connect Block
##############################################################################}
PCB_PINSEL0 : DWord absolute $E002C000;
PCB_PINSEL1 : DWord absolute $E002C004;
PCB_PINSEL2 : DWord absolute $E002C014;
{##############################################################################
## GPIO - General Purpose I/O
##############################################################################}
GPIO0_IOPIN : DWord absolute $E0028000;
GPIO0_IOSET : DWord absolute $E0028004;
GPIO0_IODIR : DWord absolute $E0028008;
GPIO0_IOCLR : DWord absolute $E002800C;
GPIO1_IOPIN : DWord absolute $E0028010;
GPIO1_IOSET : DWord absolute $E0028014;
GPIO1_IODIR : DWord absolute $E0028018;
GPIO1_IOCLR : DWord absolute $E002801C;
{##############################################################################
## UART0 / UART1
##############################################################################}
{ ---- UART 0 --------------------------------------------- }
UART0_RBR : DWord absolute $E000C000;
UART0_THR : DWord absolute $E000C000;
UART0_IER : DWord absolute $E000C004;
UART0_IIR : DWord absolute $E000C008;
UART0_FCR : DWord absolute $E000C008;
UART0_LCR : DWord absolute $E000C00C;
UART0_LSR : DWord absolute $E000C014;
UART0_SCR : DWord absolute $E000C01C;
UART0_DLL : DWord absolute $E000C000;
UART0_DLM : DWord absolute $E000C004;
{ ---- UART 1 --------------------------------------------- }
UART1_RBR : DWord absolute $E0010000;
UART1_THR : DWord absolute $E0010000;
UART1_IER : DWord absolute $E0010004;
UART1_IIR : DWord absolute $E0010008;
UART1_FCR : DWord absolute $E0010008;
UART1_LCR : DWord absolute $E001000C;
UART1_LSR : DWord absolute $E0010014;
UART1_SCR : DWord absolute $E001001C;
UART1_DLL : DWord absolute $E0010000;
UART1_DLM : DWord absolute $E0010004;
UART1_MCR : DWord absolute $E0010010;
UART1_MSR : DWord absolute $E0010018;
{##############################################################################
## I2C
##############################################################################}
I2C_I2CONSET : DWord absolute $E001C000;
I2C_I2STAT : DWord absolute $E001C004;
I2C_I2DAT : DWord absolute $E001C008;
I2C_I2ADR : DWord absolute $E001C00C;
I2C_I2SCLH : DWord absolute $E001C010;
I2C_I2SCLL : DWord absolute $E001C014;
I2C_I2CONCLR : DWord absolute $E001C018;
{##############################################################################
## SPI - Serial Peripheral Interface
##############################################################################}
SPI_SPCR : DWord absolute $E0020000; { SPI = SPI0 }
SPI_SPSR : DWord absolute $E0020004;
SPI_SPDR : DWord absolute $E0020008;
SPI_SPCCR : DWord absolute $E002000C;
SPI_SPTCR : DWord absolute $E0020010;
SPI_SPTSR : DWord absolute $E0020014;
SPI_SPTOR : DWord absolute $E0020018;
SPI_SPINT : DWord absolute $E002001C;
SPI0_SPCR : DWord absolute $E0020000; { SPI = SPI0 }
SPI0_SPSR : DWord absolute $E0020004;
SPI0_SPDR : DWord absolute $E0020008;
SPI0_SPCCR : DWord absolute $E002000C;
SPI0_SPTCR : DWord absolute $E0020010;
SPI0_SPTSR : DWord absolute $E0020014;
SPI0_SPTOR : DWord absolute $E0020018;
SPI0_SPINT : DWord absolute $E002001C;
SPI1_SPCR : DWord absolute $E0030000;
SPI1_SPSR : DWord absolute $E0030004;
SPI1_SPDR : DWord absolute $E0030008;
SPI1_SPCCR : DWord absolute $E003000C;
SPI1_SPTCR : DWord absolute $E0030010;
SPI1_SPTSR : DWord absolute $E0030014;
SPI1_SPTOR : DWord absolute $E0030018;
SPI1_SPINT : DWord absolute $E003001C;
{##############################################################################
## Timer 0 and Timer 1
##############################################################################}
{ ---- Timer 0 -------------------------------------------- }
T0_IR : DWord absolute $E0004000;
T0_TCR : DWord absolute $E0004004;
T0_TC : DWord absolute $E0004008;
T0_PR : DWord absolute $E000400C;
T0_PC : DWord absolute $E0004010;
T0_MCR : DWord absolute $E0004014;
T0_MR0 : DWord absolute $E0004018;
T0_MR1 : DWord absolute $E000401C;
T0_MR2 : DWord absolute $E0004020;
T0_MR3 : DWord absolute $E0004024;
T0_CCR : DWord absolute $E0004028;
T0_CR0 : DWord absolute $E000402C;
T0_CR1 : DWord absolute $E0004030;
T0_CR2 : DWord absolute $E0004034;
T0_CR3 : DWord absolute $E0004038;
T0_EMR : DWord absolute $E000403C;
{ ---- Timer 1 -------------------------------------------- }
T1_IR : DWord absolute $E0008000;
T1_TCR : DWord absolute $E0008004;
T1_TC : DWord absolute $E0008008;
T1_PR : DWord absolute $E000800C;
T1_PC : DWord absolute $E0008010;
T1_MCR : DWord absolute $E0008014;
T1_MR0 : DWord absolute $E0008018;
T1_MR1 : DWord absolute $E000801C;
T1_MR2 : DWord absolute $E0008020;
T1_MR3 : DWord absolute $E0008024;
T1_CCR : DWord absolute $E0008028;
T1_CR0 : DWord absolute $E000802C;
T1_CR1 : DWord absolute $E0008030;
T1_CR2 : DWord absolute $E0008034;
T1_CR3 : DWord absolute $E0008038;
T1_EMR : DWord absolute $E000803C;
{##############################################################################
## PWM
##############################################################################}
PWM_IR : DWord absolute $E0014000;
PWM_TCR : DWord absolute $E0014004;
PWM_TC : DWord absolute $E0014008;
PWM_PR : DWord absolute $E001400C;
PWM_PC : DWord absolute $E0014010;
PWM_MCR : DWord absolute $E0014014;
PWM_MR0 : DWord absolute $E0014018;
PWM_MR1 : DWord absolute $E001401C;
PWM_MR2 : DWord absolute $E0014020;
PWM_MR3 : DWord absolute $E0014024;
PWM_MR4 : DWord absolute $E0014040;
PWM_MR5 : DWord absolute $E0014044;
PWM_MR6 : DWord absolute $E0014048;
PWM_EMR : DWord absolute $E001403C;
PWM_PCR : DWord absolute $E001404C;
PWM_LER : DWord absolute $E0014050;
PWM_CCR : DWord absolute $E0014028;
PWM_CR0 : DWord absolute $E001402C;
PWM_CR1 : DWord absolute $E0014030;
PWM_CR2 : DWord absolute $E0014034;
PWM_CR3 : DWord absolute $E0014038;
{##############################################################################
## RTC
##############################################################################}
{ ---- RTC: Miscellaneous Register Group ------------------ }
RTC_ILR : DWord absolute $E0024000;
RTC_CTC : DWord absolute $E0024004;
RTC_CCR : DWord absolute $E0024008;
RTC_CIIR : DWord absolute $E002400C;
RTC_AMR : DWord absolute $E0024010;
RTC_CTIME0 : DWord absolute $E0024014;
RTC_CTIME1 : DWord absolute $E0024018;
RTC_CTIME2 : DWord absolute $E002401C;
{ ---- RTC: Timer Control Group --------------------------- }
RTC_SEC : DWord absolute $E0024020;
RTC_MIN : DWord absolute $E0024024;
RTC_HOUR : DWord absolute $E0024028;
RTC_DOM : DWord absolute $E002402C;
RTC_DOW : DWord absolute $E0024030;
RTC_DOY : DWord absolute $E0024034;
RTC_MONTH : DWord absolute $E0024038;
RTC_YEAR : DWord absolute $E002403C;
{ ---- RTC: Alarm Control Group --------------------------- }
RTC_ALSEC : DWord absolute $E0024060;
RTC_ALMIN : DWord absolute $E0024064;
RTC_ALHOUR : DWord absolute $E0024068;
RTC_ALDOM : DWord absolute $E002406C;
RTC_ALDOW : DWord absolute $E0024070;
RTC_ALDOY : DWord absolute $E0024074;
RTC_ALMON : DWord absolute $E0024078;
RTC_ALYEAR : DWord absolute $E002407C;
{ ---- RTC: Reference Clock Divider Group ----------------- }
RTC_PREINT : DWord absolute $E0024080;
RTC_PREFRAC : DWord absolute $E0024084;
{##############################################################################
## AE - AD Converter
##############################################################################}
AD_ADCR : DWord absolute $E0034000;
AD_ADDR : DWord absolute $E0034004;
{##############################################################################
## WD - Watchdog
##############################################################################}
WD_WDMOD : DWord absolute $E0000000;
WD_WDTC : DWord absolute $E0000004;
WD_WDFEED : DWord absolute $E0000008;
WD_WDTV : DWord absolute $E000000C;
{##############################################################################
## SCB - System Control Block
##############################################################################}
SCB_EXTINT : DWord absolute $E01FC140;
SCB_EXTWAKE : DWord absolute $E01FC144;
SCB_EXTMODE : DWord absolute $E01FC148;
SCB_EXTPOLAR : DWord absolute $E01FC14C;
SCB_MEMMAP : DWord absolute $E01FC040;
SCB_PLLCON : DWord absolute $E01FC080;
SCB_PLLCFG : DWord absolute $E01FC084;
SCB_PLLSTAT : DWord absolute $E01FC088;
SCB_PLLFEED : DWord absolute $E01FC08C;
SCB_PCON : DWord absolute $E01FC0C0;
SCB_PCONP : DWord absolute $E01FC0C4;
SCB_VPBDIV : DWord absolute $E01FC100;
{##############################################################################
## MAM - Memory Accelerator Module
##############################################################################}
MAM_MAMCR : DWord absolute $E01FC000;
MAM_MAMTIM : DWord absolute $E01FC004;
MAM_MAMMAP : DWord absolute $E01FC040;
var
Undefined_Handler
SWI_Handler,
Prefetch_Handler,
Abort_Handler,
FIQ_Handler : pointer;
procedure InitPLL(m : 1..32;p : 1..8);
procedure PLLFeed;
function GetProcessorClock : DWord;
implementation
procedure PLLFeed;
begin
SCB_PLLFEED:=$aa
SCB_PLLFEED:=$55
end;
function GetProcessorClock(CrystalFrequency : DWord) : DWord;
begin
if (TBitvector32(SCB_PLLSTAT)[8] and 1)<>0 then
Result:=((SCB_PLLSTAT and $f)+1)*CrystalFrequency;
else
Result:=CrystalFrequency;
end;
procedure InitPLL(m : 1..32;p : 1..8);
begin
case p of
1: p:=0;
2..3: p:=1;
4..7: p:=2;
8: p:=3;
end;
{ set p and m }
SCB_PLLCFG:=(m-1) or (p shl 5);
{ write changes }
PLLFeed;
{ start PLL }
TBitvector32(SCB_PLLCON)[0]:=1;
{ write changes }
PLLFeed;
{ wait for pll sync }
while TBitvector32(SCB_PLLSTAT)[10]=0 do
;
{ connect PLL }
TBitvector32(SCB_PLLCON)[1]:=1;
{ write changes }
PLLFeed;
end;
begin
asm
// code derived from phillips appnote 10254
.init
Entry:
ldr pc, _start
ldr pc, Undefined_Addr
ldr pc, SWI_Addr
ldr pc, Prefetch_Addr
ldr pc, Abort_Addr
// signature
nop
ldr pc, [PC, #-0xFF0] // load irq vector from vic
ldr pc, FIQ_Addr
Undefined_Addr:
ldr
.L1:
.word Un
SWI_Handler:
B SWI_Handler
Prefetch_Handler:
B Prefetch_Handler
Abort_Handler:
B Abort_Handler
FIQ_Handler:
B FIQ_Handler
_start:
{
Set SP for Supervisor mode. Depending upon
the stack the application needs this value
needs to be set.
stack is already set by bootloader
but if this point is entered by any
other means than reset, the stack pointer
needs to be set explicity
}
// LDR SP,=0x40001000
{
Setting up SP for IRQ and FIQ mode.
Change mode before setting each one
move back again to Supervisor mode
Each interrupt has its own link
register, stack pointer and program
counter The stack pointers must be
initialized for interrupts to be
used later.
}
{
setup for fiq and irq interrupt stacks to run
below current stack by 1000.
}
mov r0, sp // copy current stack pointer
sub r0, r0, #1000 // make irq stack pointer
sub r1, r0, #1000 // make fiq stack pointer
msr cpsr_c, #0x12 // switch to irq mode
mov sp, r0 // set irq stack pointer
msr cpsr_c, #0x11 // fiq mode
mov sp, r1 // set fiq stack pointer
msr cpsr_c, #0x13 // supervisor mode F,I enabled
bl PASCALMAIN
end;
end.