@@ -3106,26 +3106,6 @@ packages/libgbafpc/examples/audio/PlayBoyScout/Makefile.fpc svneol=native#text/p
packages/libgbafpc/examples/audio/PlayBoyScout/PlayBoyScout.pp svneol=native#text/plain
packages/libgbafpc/examples/audio/PlayBoyScout/data/ScoutSplash.pcx -text
packages/libgbafpc/examples/audio/PlayBoyScout/data/tune.bgf -text
-packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile.fpc svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/PlayBoyScout.pp svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/ScoutSplash.pcx -text svneol=unset#image/pcx
-packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/tune.bgf -text
-packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile.fpc svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/ScoutSplash.pcx -text svneol=unset#image/pcx
-packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/splash.pcx -text svneol=unset#image/pcx
-packages/libgbafpc/examples/devkitPro/graphics/PCXView/pcx_view.pp svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile.fpc svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/SimpleBGScroll.pp svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/data/r6502_portfont.bin -text
-packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile.fpc svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/graphics/ansi_console/console.pp svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/template/Makefile svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/template/Makefile.fpc svneol=native#text/plain
-packages/libgbafpc/examples/devkitPro/template/template.pp svneol=native#text/plain
packages/libgbafpc/examples/graphics/Makefile svneol=native#text/plain
packages/libgbafpc/examples/graphics/Makefile.fpc svneol=native#text/plain
packages/libgbafpc/examples/graphics/PCXView/Makefile svneol=native#text/plain
@@ -6053,6 +6033,8 @@ rtl/nds/classes.pp svneol=native#text/plain
rtl/nds/cprt07.as svneol=native#text/plain
rtl/nds/cprt09.as svneol=native#text/plain
rtl/nds/dos.pp svneol=native#text/plain
+rtl/nds/libc.inc svneol=native#text/plain
+rtl/nds/libch.inc svneol=native#text/plain
rtl/nds/nds.inc svneol=native#text/plain
rtl/nds/ndsbios.inc svneol=native#text/plain
rtl/nds/ndsbiosh.inc svneol=native#text/plain
@@ -1,2576 +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:=$(subst ;, ,$(PATH))
-endif
-SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
-PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
-ifeq ($(PWD),)
-PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
-$(error You need the GNU utils package to use this Makefile)
-PWD:=$(firstword $(PWD))
-SRCEXEEXT=
-SRCEXEEXT=.exe
-ifndef inUnix
-ifeq ($(OS),Windows_NT)
-inWinNT=1
-ifdef OS2_SHELL
-inOS2=1
-ifneq ($(findstring cygdrive,$(PATH)),)
-inCygWin=1
-ifdef inUnix
-SRCBATCHEXT=.sh
-ifdef inOS2
-SRCBATCHEXT=.cmd
-SRCBATCHEXT=.bat
-ifdef COMSPEC
-ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
-ifndef RUNBATCH
-RUNBATCH=$(COMSPEC) /C
-PATHSEP=/
-PATHSEP:=$(subst /,\,/)
-ifdef inCygWin
-ifdef PWD
-BASEDIR:=$(subst \,/,$(shell $(PWD)))
-ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
-BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
-BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
-BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
-BASEDIR=.
-ifndef ECHO
-ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ECHO),)
-ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
-ECHO=echo
-ECHO:=$(firstword $(ECHO))
-export ECHO
-override OS_TARGET_DEFAULT=gba
-override CPU_TARGET_DEFAULT=arm
-override DEFAULT_FPCDIR=../../../../../..
-ifndef FPC
-ifdef PP
-FPC=$(PP)
-FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
-ifneq ($(FPCPROG),)
-FPCPROG:=$(firstword $(FPCPROG))
-ifneq ($(CPU_TARGET),)
-FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
-FPC:=$(shell $(FPCPROG) -PB)
-ifneq ($(findstring Error,$(FPC)),)
-override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
-ifeq ($(strip $(wildcard $(FPC))),)
-FPC:=$(firstword $(FPCPROG))
-override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
-override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
-FOUNDFPC:=$(strip $(wildcard $(FPC)))
-ifeq ($(FOUNDFPC),)
-FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
-$(error Compiler $(FPC) not found)
-ifndef FPC_COMPILERINFO
-FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
-ifndef FPC_VERSION
-FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
-export FPC FPC_VERSION FPC_COMPILERINFO
-unexport CHECKDEPEND ALLDEPENDENCIES
-ifndef CPU_TARGET
-ifdef CPU_TARGET_DEFAULT
-CPU_TARGET=$(CPU_TARGET_DEFAULT)
-ifndef OS_TARGET
-ifdef OS_TARGET_DEFAULT
-OS_TARGET=$(OS_TARGET_DEFAULT)
-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)
-ifndef CPU_SOURCE
-CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
-CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
-ifndef OS_SOURCE
-OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
-OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
-FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
-FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-ifeq ($(CPU_TARGET),armel)
-override FPCOPT+=-CaEABI
-ARCH=$(CPU_TARGET)
-ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
-TARGETSUFFIX=$(OS_TARGET)
-SOURCESUFFIX=$(OS_SOURCE)
-TARGETSUFFIX=$(FULL_TARGET)
-SOURCESUFFIX=$(FULL_SOURCE)
-ifneq ($(FULL_TARGET),$(FULL_SOURCE))
-CROSSCOMPILE=1
-ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
-ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
-$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
-ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
-BSDhier=1
-ifeq ($(OS_TARGET),linux)
-linuxHier=1
-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
-ifdef DEFAULT_FPCDIR
-ifeq ($(FPCDIR),wrong)
-override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
-override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
-ifeq ($(wildcard $(FPCDIR)/units),)
-override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
-override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
-override FPCDIR:=$(FPCDIR)/..
-override FPCDIR:=$(BASEDIR)
-override FPCDIR=c:/pp
-ifndef CROSSBINDIR
-CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
-ifeq ($(OS_TARGET),darwin)
-ifeq ($(OS_SOURCE),darwin)
-DARWIN2DARWIN=1
-ifndef BINUTILSPREFIX
-ifdef CROSSCOMPILE
-ifndef DARWIN2DARWIN
-BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
-UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
-ifeq ($(UNITSDIR),)
-UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
-PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=PlayBoyScout
-ifeq ($(FULL_TARGET),i386-go32v2)
-ifeq ($(FULL_TARGET),i386-win32)
-ifeq ($(FULL_TARGET),i386-os2)
-ifeq ($(FULL_TARGET),i386-freebsd)
-ifeq ($(FULL_TARGET),i386-beos)
-ifeq ($(FULL_TARGET),i386-haiku)
-ifeq ($(FULL_TARGET),i386-netbsd)
-ifeq ($(FULL_TARGET),i386-solaris)
-ifeq ($(FULL_TARGET),i386-qnx)
-ifeq ($(FULL_TARGET),i386-netware)
-ifeq ($(FULL_TARGET),i386-openbsd)
-ifeq ($(FULL_TARGET),i386-wdosx)
-ifeq ($(FULL_TARGET),i386-darwin)
-ifeq ($(FULL_TARGET),i386-emx)
-ifeq ($(FULL_TARGET),i386-watcom)
-ifeq ($(FULL_TARGET),i386-netwlibc)
-ifeq ($(FULL_TARGET),i386-wince)
-ifeq ($(FULL_TARGET),i386-embedded)
-ifeq ($(FULL_TARGET),i386-symbian)
-ifeq ($(FULL_TARGET),m68k-linux)
-ifeq ($(FULL_TARGET),m68k-freebsd)
-ifeq ($(FULL_TARGET),m68k-netbsd)
-ifeq ($(FULL_TARGET),m68k-amiga)
-ifeq ($(FULL_TARGET),m68k-atari)
-ifeq ($(FULL_TARGET),m68k-openbsd)
-ifeq ($(FULL_TARGET),m68k-palmos)
-ifeq ($(FULL_TARGET),m68k-embedded)
-ifeq ($(FULL_TARGET),powerpc-linux)
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-ifeq ($(FULL_TARGET),powerpc-amiga)
-ifeq ($(FULL_TARGET),powerpc-macos)
-ifeq ($(FULL_TARGET),powerpc-darwin)
-ifeq ($(FULL_TARGET),powerpc-morphos)
-ifeq ($(FULL_TARGET),powerpc-embedded)
-ifeq ($(FULL_TARGET),sparc-linux)
-ifeq ($(FULL_TARGET),sparc-netbsd)
-ifeq ($(FULL_TARGET),sparc-solaris)
-ifeq ($(FULL_TARGET),sparc-embedded)
-ifeq ($(FULL_TARGET),x86_64-linux)
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-ifeq ($(FULL_TARGET),x86_64-darwin)
-ifeq ($(FULL_TARGET),x86_64-win64)
-ifeq ($(FULL_TARGET),x86_64-embedded)
-ifeq ($(FULL_TARGET),arm-linux)
-ifeq ($(FULL_TARGET),arm-palmos)
-ifeq ($(FULL_TARGET),arm-darwin)
-ifeq ($(FULL_TARGET),arm-wince)
-ifeq ($(FULL_TARGET),arm-gba)
-ifeq ($(FULL_TARGET),arm-nds)
-ifeq ($(FULL_TARGET),arm-embedded)
-ifeq ($(FULL_TARGET),arm-symbian)
-ifeq ($(FULL_TARGET),powerpc64-linux)
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-ifeq ($(FULL_TARGET),avr-embedded)
-ifeq ($(FULL_TARGET),armeb-linux)
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=data/ScoutSplash.pcx data/tune.bgf
-override CLEAN_UNITS+=*
-override CLEAN_FILES+=*.elf data/*.o data/*.s
-override INSTALL_FPCPACKAGE=y
-ifdef REQUIRE_UNITSDIR
-override UNITSDIR+=$(REQUIRE_UNITSDIR)
-ifdef REQUIRE_PACKAGESDIR
-override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
-ifdef ZIPINSTALL
-ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
-UNIXHier=1
-ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
-ifndef INSTALL_PREFIX
-ifdef PREFIX
-INSTALL_PREFIX=$(PREFIX)
-ifdef UNIXHier
-INSTALL_PREFIX=/usr/local
-ifdef INSTALL_FPCPACKAGE
-INSTALL_BASEDIR:=/pp
-INSTALL_BASEDIR:=/$(PACKAGE_NAME)
-export INSTALL_PREFIX
-ifdef INSTALL_FPCSUBDIR
-export INSTALL_FPCSUBDIR
-ifndef DIST_DESTDIR
-DIST_DESTDIR:=$(BASEDIR)
-export DIST_DESTDIR
-ifndef COMPILER_UNITTARGETDIR
-ifdef PACKAGEDIR_MAIN
-COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
-COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
-ifndef COMPILER_TARGETDIR
-COMPILER_TARGETDIR=.
-ifndef INSTALL_BASEDIR
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
-INSTALL_BASEDIR:=$(INSTALL_PREFIX)
-ifndef INSTALL_BINDIR
-INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
-INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
-ifdef CROSSINSTALL
-INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
-INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
-ifndef INSTALL_UNITDIR
-INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
-ifdef PACKAGE_NAME
-INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
-ifndef INSTALL_LIBDIR
-INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
-INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
-ifndef INSTALL_SOURCEDIR
-ifdef BSDhier
-SRCPREFIXDIR=share/src
-ifdef linuxHier
-SRCPREFIXDIR=src
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
-INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
-ifndef INSTALL_DOCDIR
-DOCPREFIXDIR=share/doc
-DOCPREFIXDIR=doc
-INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
-INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
-ifndef INSTALL_EXAMPLEDIR
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
-INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
-INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
-INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
-ifndef INSTALL_DATADIR
-INSTALL_DATADIR=$(INSTALL_BASEDIR)
-ifndef INSTALL_SHAREDDIR
-INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
-CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
-ifeq ($(CROSSBINDIR),)
-CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
-CROSSBINDIR=
-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
-ifeq ($(OS_TARGET),go32v2)
-SHORTSUFFIX=dos
-IMPORTLIBPREFIX=
-ifeq ($(OS_TARGET),watcom)
-OEXT=.obj
-ASMEXT=.asm
-SHAREDLIBEXT=.dll
-SHORTSUFFIX=wat
-BATCHEXT=.sh
-EXEEXT=
-HASSHAREDLIB=1
-SHORTSUFFIX=lnx
-ifeq ($(OS_TARGET),freebsd)
-SHORTSUFFIX=fbs
-ifeq ($(OS_TARGET),netbsd)
-SHORTSUFFIX=nbs
-ifeq ($(OS_TARGET),openbsd)
-SHORTSUFFIX=obs
-ifeq ($(OS_TARGET),win32)
-SHORTSUFFIX=w32
-ifeq ($(OS_TARGET),os2)
-BATCHEXT=.cmd
-AOUTEXT=.out
-SHORTSUFFIX=os2
-ifeq ($(OS_TARGET),emx)
-SHORTSUFFIX=emx
-ifeq ($(OS_TARGET),amiga)
-SHAREDLIBEXT=.library
-SHORTSUFFIX=amg
-ifeq ($(OS_TARGET),morphos)
-SHORTSUFFIX=mos
-ifeq ($(OS_TARGET),atari)
-EXEEXT=.ttp
-SHORTSUFFIX=ata
-ifeq ($(OS_TARGET),beos)
-SHORTSUFFIX=be
-ifeq ($(OS_TARGET),haiku)
-SHORTSUFFIX=hai
-ifeq ($(OS_TARGET),solaris)
-SHORTSUFFIX=sun
-ifeq ($(OS_TARGET),qnx)
-SHORTSUFFIX=qnx
-ifeq ($(OS_TARGET),netware)
-EXEEXT=.nlm
-SHORTSUFFIX=nw
-IMPORTLIBPREFIX=imp
-ifeq ($(OS_TARGET),netwlibc)
-SHORTSUFFIX=nwl
-ifeq ($(OS_TARGET),macos)
-BATCHEXT=
-DEBUGSYMEXT=.xcoff
-SHORTSUFFIX=mac
-SHORTSUFFIX=dwn
-ifeq ($(OS_TARGET),gba)
-EXEEXT=.gba
-SHORTSUFFIX=gba
-ifeq ($(OS_TARGET),symbian)
-SHORTSUFFIX=symbian
-PPUEXT=.pp1
-OEXT=.o1
-ASMEXT=.s1
-SMARTEXT=.sl1
-STATICLIBEXT=.a1
-SHAREDLIBEXT=.so1
-PPUEXT=.ppw
-OEXT=.ow
-ASMEXT=.sw
-SMARTEXT=.slw
-STATICLIBEXT=.aw
-PPUEXT=.ppo
-ASMEXT=.so2
-OEXT=.oo2
-SMARTEXT=.sl2
-STATICLIBEXT=.ao2
-SHAREDLIBEXT=.nlm
-FPCMADE=fpcmade.$(SHORTSUFFIX)
-ZIPSUFFIX=$(SHORTSUFFIX)
-ZIPCROSSPREFIX=
-ZIPSOURCESUFFIX=src
-ZIPEXAMPLESUFFIX=exm
-FPCMADE=fpcmade.$(TARGETSUFFIX)
-ZIPSOURCESUFFIX=.source
-ZIPEXAMPLESUFFIX=.examples
-ZIPSUFFIX=.$(SOURCESUFFIX)
-ZIPCROSSPREFIX=$(TARGETSUFFIX)-
-ZIPSUFFIX=.$(TARGETSUFFIX)
-ECHO= __missing_command_ECHO
-ifndef DATE
-DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(DATE),)
-DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
-DATE= __missing_command_DATE
-DATE:=$(firstword $(DATE))
-export DATE
-ifndef GINSTALL
-GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(GINSTALL),)
-GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
-GINSTALL= __missing_command_GINSTALL
-GINSTALL:=$(firstword $(GINSTALL))
-export GINSTALL
-ifndef CPPROG
-CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(CPPROG),)
-CPPROG= __missing_command_CPPROG
-CPPROG:=$(firstword $(CPPROG))
-export CPPROG
-ifndef RMPROG
-RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(RMPROG),)
-RMPROG= __missing_command_RMPROG
-RMPROG:=$(firstword $(RMPROG))
-export RMPROG
-ifndef MVPROG
-MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(MVPROG),)
-MVPROG= __missing_command_MVPROG
-MVPROG:=$(firstword $(MVPROG))
-export MVPROG
-ifndef MKDIRPROG
-MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(MKDIRPROG),)
-MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
-MKDIRPROG= __missing_command_MKDIRPROG
-MKDIRPROG:=$(firstword $(MKDIRPROG))
-export MKDIRPROG
-ifndef ECHOREDIR
-ECHOREDIR=echo
-ECHOREDIR=$(ECHO)
-ifndef COPY
-COPY:=$(CPPROG) -fp
-ifndef COPYTREE
-COPYTREE:=$(CPPROG) -Rfp
-ifndef MKDIRTREE
-MKDIRTREE:=$(MKDIRPROG) -p
-ifndef MOVE
-MOVE:=$(MVPROG) -f
-ifndef DEL
-DEL:=$(RMPROG) -f
-ifndef DELTREE
-DELTREE:=$(RMPROG) -rf
-ifndef INSTALL
-INSTALL:=$(GINSTALL) -c -m 644
-INSTALL:=$(COPY)
-ifndef INSTALLEXE
-INSTALLEXE:=$(GINSTALL) -c -m 755
-INSTALLEXE:=$(COPY)
-ifndef MKDIR
-MKDIR:=$(GINSTALL) -m 755 -d
-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
-PPUMOVE:=$(firstword $(PPUMOVE))
-export PPUMOVE
-ifndef FPCMAKE
-FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(FPCMAKE),)
-FPCMAKE= __missing_command_FPCMAKE
-FPCMAKE:=$(firstword $(FPCMAKE))
-export FPCMAKE
-ifndef ZIPPROG
-ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(ZIPPROG),)
-ZIPPROG= __missing_command_ZIPPROG
-ZIPPROG:=$(firstword $(ZIPPROG))
-export ZIPPROG
-ifndef TARPROG
-TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(TARPROG),)
-TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
-TARPROG= __missing_command_TARPROG
-TARPROG:=$(firstword $(TARPROG))
-export TARPROG
-ASNAME=$(BINUTILSPREFIX)as
-LDNAME=$(BINUTILSPREFIX)ld
-ARNAME=$(BINUTILSPREFIX)ar
-RCNAME=$(BINUTILSPREFIX)rc
-ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
-ASNAME=asw
-LDNAME=ldw
-ARNAME=arw
-ifndef ASPROG
-ifdef CROSSBINDIR
-ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
-ASPROG=$(ASNAME)
-ifndef LDPROG
-LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
-LDPROG=$(LDNAME)
-ifndef RCPROG
-RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
-RCPROG=$(RCNAME)
-ifndef ARPROG
-ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
-ARPROG=$(ARNAME)
-AS=$(ASPROG)
-LD=$(LDPROG)
-RC=$(RCPROG)
-AR=$(ARPROG)
-PPAS=ppas$(SRCBATCHEXT)
-LDCONFIG=ldconfig
-LDCONFIG=
-ifdef DATE
-DATESTR:=$(shell $(DATE) +%Y%m%d)
-DATESTR=
-ifndef UPXPROG
-UPXPROG:=1
-ifdef UPXPROG
-UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(UPXPROG),)
-UPXPROG=
-UPXPROG:=$(firstword $(UPXPROG))
-export UPXPROG
-ZIPOPT=-9
-ZIPEXT=.zip
-ifeq ($(USETAR),bz2)
-TAROPT=vj
-TAREXT=.tar.bz2
-TAROPT=vz
-TAREXT=.tar.gz
-override REQUIRE_PACKAGES=rtl libgbafpc
-REQUIRE_PACKAGES_RTL=1
-REQUIRE_PACKAGES_LIBGBAFPC=1
-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)
-UNITDIR_RTL=$(PACKAGEDIR_RTL)
-ifdef CHECKDEPEND
-$(PACKAGEDIR_RTL)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
-PACKAGEDIR_RTL=
-UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_RTL),)
-UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
-UNITDIR_RTL=
-ifdef UNITDIR_RTL
-override COMPILER_UNITDIR+=$(UNITDIR_RTL)
-ifdef REQUIRE_PACKAGES_LIBGBAFPC
-PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_LIBGBAFPC),)
-ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
-UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
-UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
-$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
-PACKAGEDIR_LIBGBAFPC=
-UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_LIBGBAFPC),)
-UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
-UNITDIR_LIBGBAFPC=
-ifdef UNITDIR_LIBGBAFPC
-override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
-ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
-ifneq ($(OS_TARGET),$(OS_SOURCE))
-override FPCOPT+=-T$(OS_TARGET)
-ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
-ifeq ($(OS_SOURCE),openbsd)
-override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
-ifndef CROSSBOOTSTRAP
-ifneq ($(BINUTILSPREFIX),)
-override FPCOPT+=-XP$(BINUTILSPREFIX)
-override FPCOPT+=-Xr$(RLINKPATH)
-ifdef UNITDIR
-override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
-ifdef LIBDIR
-override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
-ifdef OBJDIR
-override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
-ifdef INCDIR
-override FPCOPT+=$(addprefix -Fi,$(INCDIR))
-ifdef LINKSMART
-override FPCOPT+=-XX
-ifdef CREATESMART
-override FPCOPT+=-CX
-ifdef DEBUG
-override FPCOPT+=-gl
-override FPCOPTDEF+=DEBUG
-ifdef RELEASE
-ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
-ifeq ($(CPU_TARGET),i386)
-FPCCPUOPT:=-OG2p3
-ifeq ($(CPU_TARGET),powerpc)
-FPCCPUOPT:=-O1r
-FPCCPUOPT:=-O2
-override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
-override FPCOPTDEF+=RELEASE
-ifdef STRIP
-override FPCOPT+=-Xs
-ifdef OPTIMIZE
-override FPCOPT+=-O2
-ifdef VERBOSE
-override FPCOPT+=-vwni
-ifdef COMPILER_OPTIONS
-override FPCOPT+=$(COMPILER_OPTIONS)
-ifdef COMPILER_UNITDIR
-override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
-ifdef COMPILER_LIBRARYDIR
-override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
-ifdef COMPILER_OBJECTDIR
-override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
-ifdef COMPILER_INCLUDEDIR
-override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
-override FPCOPT+=-FD$(CROSSBINDIR)
-ifdef COMPILER_TARGETDIR
-override FPCOPT+=-FE$(COMPILER_TARGETDIR)
-ifeq ($(COMPILER_TARGETDIR),.)
-override TARGETDIRPREFIX=
-override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
-ifdef COMPILER_UNITTARGETDIR
-override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
-ifeq ($(COMPILER_UNITTARGETDIR),.)
-override UNITTARGETDIRPREFIX=
-override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
-override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
-override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
-ifdef CREATESHARED
-override FPCOPT+=-Cg
-override FPCOPT+=-Aas
-ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
-ifeq ($(CPU_TARGET),x86_64)
-ifdef LINKSHARED
-ifdef OPT
-override FPCOPT+=$(OPT)
-ifdef FPCOPTDEF
-override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
-ifdef CFGFILE
-override FPCOPT+=@$(CFGFILE)
-ifdef USEENV
-override FPCEXTCMD:=$(FPCOPT)
-override FPCOPT:=!FPCEXTCMD
-export FPCEXTCMD
-override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
-override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
-override ACROSSCOMPILE=1
-ifdef ACROSSCOMPILE
-override FPCOPT+=$(CROSSOPT)
-override COMPILER:=$(FPC) $(FPCOPT)
-ifeq (,$(findstring -s ,$(COMPILER)))
-EXECPPAS=
-ifeq ($(FULL_SOURCE),$(FULL_TARGET))
-ifdef RUNBATCH
-EXECPPAS:=@$(RUNBATCH) $(PPAS)
-EXECPPAS:=@$(PPAS)
-.PHONY: fpc_loaders
-ifneq ($(TARGET_LOADERS),)
-override ALLTARGET+=fpc_loaders
-override CLEANTARGET+=fpc_loaders_clean
-override INSTALLTARGET+=fpc_loaders_install
-override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS))
-%$(OEXT): %$(LOADEREXT)
- $(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $<
- $(AS) -o $*$(OEXT) $<
-fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)
-fpc_loaders_clean:
- -$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES))
- -$(DEL) $(LOADEROFILES)
-fpc_loaders_install:
- $(MKDIR) $(INSTALL_UNITDIR)
- $(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR)
- $(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)
-.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)
-override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
-fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
-ifdef TARGET_RSTS
-override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
-override CLEANRSTFILES+=$(RSTFILES)
-.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
-%$(EXEEXT): %.pp
-%$(EXEEXT): %.pas
-%$(EXEEXT): %.lpr
-%$(EXEEXT): %.dpr
-%.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)
-ifndef SHARED_LIBNAME
-SHARED_LIBNAME=$(PACKAGE_NAME)
-ifndef SHARED_FULLNAME
-SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
-ifndef SHARED_LIBUNITS
-SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
-override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
-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)
- @$(ECHO) Shared Libraries not supported
-fpc_shared_install:
-ifneq ($(SHARED_LIBUNITS),)
-ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
- $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
-.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
-ifdef INSTALL_UNITS
-override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
-ifdef INSTALL_BUILDUNIT
-override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
-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))))
-override INSTALL_CREATEPACKAGEFPC=1
-ifdef INSTALLEXEFILES
-ifneq ($(TARGETDIRPREFIX),)
-override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
-fpc_install: all $(INSTALLTARGET)
- $(MKDIR) $(INSTALL_BINDIR)
- -$(UPXPROG) $(INSTALLEXEFILES)
- $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
-ifdef INSTALL_CREATEPACKAGEFPC
-ifdef FPCMAKE
-ifdef PACKAGE_VERSION
-ifneq ($(wildcard Makefile.fpc),)
- $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
- $(INSTALL) Package.fpc $(INSTALL_UNITDIR)
- $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
-ifneq ($(INSTALLPPULINKFILES),)
- $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
-ifneq ($(wildcard $(LIB_FULLNAME)),)
- $(MKDIR) $(INSTALL_LIBDIR)
- $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
- ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
-ifdef INSTALL_FILES
- $(MKDIR) $(INSTALL_DATADIR)
- $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
-fpc_sourceinstall: distclean
- $(MKDIR) $(INSTALL_SOURCEDIR)
- $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
-fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
-ifdef HASEXAMPLES
- $(MKDIR) $(INSTALL_EXAMPLEDIR)
-ifdef EXAMPLESOURCEFILES
- $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
-ifdef TARGET_EXAMPLEDIRS
- $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
-.PHONY: fpc_clean fpc_cleanall fpc_distclean
-ifdef EXEFILES
-override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
-ifdef CLEAN_UNITS
-override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
-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))
-override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
-override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
-fpc_clean: $(CLEANTARGET)
-ifdef CLEANEXEFILES
- -$(DEL) $(CLEANEXEFILES)
- -$(DEL) $(CLEANPPUFILES)
-ifneq ($(CLEANPPULINKFILES),)
- -$(DEL) $(CLEANPPULINKFILES)
-ifdef CLEANRSTFILES
- -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
-ifdef CLEAN_FILES
- -$(DEL) $(CLEAN_FILES)
-ifdef LIB_NAME
- -$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
- -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
- -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
-fpc_cleanall: $(CLEANTARGET)
- -$(DELTREE) units
- -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
-ifneq ($(PPUEXT),.ppu)
- -$(DEL) *.o *.ppu *.a
- -$(DELTREE) *$(SMARTEXT)
- -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
- -$(DEL) *_ppas$(BATCHEXT)
-ifdef AOUTEXT
- -$(DEL) *$(AOUTEXT)
- -$(DEL) *$(DEBUGSYMEXT)
-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) == Configuration info ==
- @$(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) == Directory info ==
- @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)
- @$(ECHO) Basedir......... $(BASEDIR)
- @$(ECHO) FPCDir.......... $(FPCDIR)
- @$(ECHO) CrossBinDir..... $(CROSSBINDIR)
- @$(ECHO) UnitsDir........ $(UNITSDIR)
- @$(ECHO) PackagesDir..... $(PACKAGESDIR)
- @$(ECHO) GCC library..... $(GCCLIBDIR)
- @$(ECHO) Other library... $(OTHERLIBDIR)
- @$(ECHO) == Tools info ==
- @$(ECHO) As........ $(AS)
- @$(ECHO) Ld........ $(LD)
- @$(ECHO) Ar........ $(AR)
- @$(ECHO) Rc........ $(RC)
- @$(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) == Object info ==
- @$(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) Clean Units......... $(CLEAN_UNITS)
- @$(ECHO) Clean Files......... $(CLEAN_FILES)
- @$(ECHO) Install Units....... $(INSTALL_UNITS)
- @$(ECHO) Install Files....... $(INSTALL_FILES)
- @$(ECHO) == Install info ==
- @$(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) 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) Dist destination dir. $(DIST_DESTDIR)
- @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)
-.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))
- $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
-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
-ifndef BIN2S
-BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
-ifeq ($(BIN2S),)
-BIN2S= __missing_command_BIN2S
-BIN2S:=$(firstword $(BIN2S))
-export BIN2S
-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
-.NOTPARALLEL:
-ifneq ($(BIN2S),)
-data/ScoutSplash.pcx.o:
- $(BIN2S) data/ScoutSplash.pcx > data/ScoutSplash.pcx.s
- $(AS) -o data/ScoutSplash.pcx.o data/ScoutSplash.pcx.s
-data/tune.bgf.o:
- $(BIN2S) data/tune.bgf > data/tune.bgf.s
- $(AS) -o data/tune.bgf.o data/tune.bgf.s
@@ -1,36 +0,0 @@
-# Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
-
-[target]
-loaders=data/ScoutSplash.pcx data/tune.bgf
-programs=PlayBoyScout
-[require]
-packages=libgbafpc
-tools=bin2s
-[install]
-fpcpackage=y
-[default]
-cpu=arm
-target=gba
-fpcdir=../../../../../..
-[clean]
-files=*.elf data/*.o data/*.s
-units=*
-[prerules]
-[rules]
@@ -1,73 +0,0 @@
-program PlayBoyScout;
-{$l data/ScoutSplash.pcx.o}
-{$l data/tune.bgf.o}
-uses
- ctypes, gba;
-var
- ScoutSplash_pcx: array [0..0] of cuint8; cvar; external;
- ScoutSplash_pcx_size: array [0..0] of cuint32; cvar; external;
- ScoutSplash_pcx_end: array [0..0] of cuint8; cvar; external;
- tune_bgf: array [0..0] of cuint8; cvar; external;
- tune_bgf_size: array [0..0] of cuint32; cvar; external;
- tune_bgf_end: array [0..0] of cuint8; cvar; external;
- PaletteBuffer: array [0..255] of u16;
- frame: cuint;
- nBSSongSize: cuint;
-procedure VblankInterrupt();
-begin
- BoyScoutUpdateSong();
- frame := frame + 1;
-end;
- // Set up the interrupt handlers
- irqInit();
- // Initialize BoyScout
- BoyScoutInitialize();
- // Get needed song memory
- nBSSongSize := BoyScoutGetNeededSongMemory(tune_bgf);
- // Allocate and set BoyScout memory area
- BoyScoutSetMemoryArea(u32(GetMem(nBSSongSize)));
- // Open song
- BoyScoutOpenSong(tune_bgf);
- // Play song and loop
- BoyScoutPlaySong(1);
- irqSet(IRQ_VBLANK, @VblankInterrupt);
- // Enable Vblank Interrupt to allow VblankIntrWait
- irqEnable(IRQ_VBLANK);
- // Allow Interrupts
- REG_IME^ := 1;
- SetMode( MODE_4 or BG2_ON ); // screen mode & background to display
- DecodePCX(@ScoutSplash_pcx, pu16(VRAM), PaletteBuffer);
- FadeToPalette( PaletteBuffer, 60);
- while true do
- VBlankIntrWait();
- // This part will never be reached but just for completion
- // Free memory
- free(@BoyScoutGetMemoryArea);
-end.
@@ -1,2574 +0,0 @@
-DATA_FILES=data/splash.pcx
-override TARGET_PROGRAMS+=pcx_view
-override TARGET_LOADERS+=$(DATA_FILES)
-$(DATA_FILES).o:
- $(BIN2S) $(DATA_FILES) > $(DATA_FILES).s
- $(AS) -o $(DATA_FILES).o $(DATA_FILES).s
@@ -1,34 +0,0 @@
-loaders=$(DATA_FILES)
-programs=pcx_view
@@ -1,46 +0,0 @@
-program pcx_view;
-{$l data/splash.pcx.o}
- PaletteBuffer: array [0..255] of cuint16;
- splash_pcx_end: array [0..0] of cuint8; cvar; external;
- splash_pcx: array [0..0] of cuint8; cvar; external;
- splash_pcx_size: array [0..0] of cuint32; cvar; external;
- scanKeys();
- SetMode(MODE_4 or BG2_ON); // screen mode & background to display
- DecodePCX(@splash_pcx, pcuint16(VRAM), @PaletteBuffer);
- FadeToPalette(PaletteBuffer, 60);
@@ -1,2573 +0,0 @@
-override TARGET_PROGRAMS+=SimpleBGScroll
-override TARGET_LOADERS+=data/r6502_portfont.bin
-data/r6502_portfont.bin.o:
- $(BIN2S) data/r6502_portfont.bin > data/r6502_portfont.bin.s
- $(AS) -o data/r6502_portfont.bin.o data/r6502_portfont.bin.s
@@ -1,33 +0,0 @@
-loaders=data/r6502_portfont.bin
-programs=SimpleBGScroll
@@ -1,162 +0,0 @@
-program SimpleBGScroll;
-{$l data\r6502_portfont.bin.o}
- MAPADDRESS: pointer;
- r6502_portfont_bin: array [0..0] of cuint8; cvar; external;
- r6502_portfont_bin_size: array [0..0] of cuint32; cvar; external;
- r6502_portfont_bin_end: array [0..0] of cuint8; cvar; external;
-const
- DELAY = 2; // slow things down
- TILEWIDTH = 8; // how much to scroll
- ROW = 10; // what row to place text at
-// --------------------------------------------------------------------
- palette: array [0..6] of u16;
- message = ' ' +
- 'Hello, this is an example of an oldschool simple tile scroller ' +
- 'not unlike how it was done in days of yore. The ''@'' symbol ' +
- 'at the top of your screen is intentional, to dispel the illusion ' +
- 'of this scroller, to demonstrate the simple concept behind it. ' +
- 'Check out the source to learn how it works. It is very simple! ' +
- 'This exercise brought to you by r6502... ' +
- 'Text is about to restart... ';
-procedure updatescrolltext(idx: u32);
- i: integer;
- temppointer: pu16;
- temppointer := pu16(MAPADDRESS + (ROW * 32));
- // write out a whole row of text to the map
- for i :=0 to 31 do
- begin
- // check for end of message so we can wrap around properly
- if (message[idx] = #0) then
- idx := 0;
- // write a character - we subtract 32, because the font graphics
- // start at tile 0, but our text is in ascii (starting at 32 and up)
- // in other words, tile 0 is a space in our font, but in ascii a
- // space is 32 so we must account for that difference between the two.
- temppointer^ := Ord(message[idx]) - 32;
- inc(temppointer);
- inc(idx);
- end;
- i, scrollx, scrolldelay, textindex: integer;
- MAPADDRESS := MAP_BASE_ADR(31); // our base map address
- palette[0] := RGB8($40,$80,$c0);
- palette[1] := RGB8($FF,$FF,$FF);
- palette[2] := RGB8($F5,$FF,$FF);
- palette[3] := RGB8($DF,$FF,$F2);
- palette[4] := RGB8($CA,$FF,$E2);
- palette[5] := RGB8($B7,$FD,$D8);
- palette[6] := RGB8($2C,$4F,$8B);
- // load the palette for the background, 7 colors
- temppointer := BG_COLORS;
- for i := 0 to 6 do
- temppointer^ := palette[i];
- // load the font into gba video mem (48 characters, 4bit tiles)
- CpuFastSet(@r6502_portfont_bin, pu16(VRAM), (r6502_portfont_bin_size[0] div 4) or COPY32);
- // clear screen map with tile 0 ('space' tile) (256x256 halfwords)
- //MAP_BASE_ADR(31) := nil;
- CpuFastSet( MAP_BASE_ADR(31), MAP_BASE_ADR(31), FILL or COPY32 or ($800 div 4));
- // set screen H and V scroll positions
- BG_OFFSET[0].x := 0;
- BG_OFFSET[0].y := 0;
- // initialize our variables
- scrollx := 0;
- textindex := 0;
- scrolldelay := 0;
- // put the '@' symbol on the top of the screen to show how
- // the screen is only scrolling 7 pixels - to reveal the
- // illusion of how the scroller works
- pu16((MAPADDRESS + 1))^ := $20; // 0x20 == '@'
- // draw a row of text from beginning of message
- updatescrolltext(0);
- // set the screen base to 31 (0x600F800) and char base to 0 (0x6000000)
- BGCTRL[0] := SCREEN_BASE(31);
- // screen mode & background to display
- SetMode( MODE_0 or BG0_ON );
- // check if we reached our delay
- if (scrolldelay = DELAY) then
- // yes, the delay is complete, so let's reset it
- // check if we reached our scrollcount
- if (scrollx = (TILEWIDTH-1)) then
- // yes, we've scrolled enough, so let's reset the count
- // check if we reached the end of our scrolltext
- // and if so we need to restart our index
- if (message[textindex] = #0) then
- textindex := 0
- else
- inc(textindex);
- // finally, let's update the scrolltext with the current text index
- updatescrolltext(textindex);
- end else
- inc(scrollx);
- inc(scrolldelay);
- // update the hardware horizontal scroll register
- BG_OFFSET[0].x := scrollx;
@@ -1,2358 +0,0 @@
-override TARGET_PROGRAMS+=console
-override CLEAN_FILES+=*.elf
@@ -1,26 +0,0 @@
-programs=console
-files=*.elf
@@ -1,60 +0,0 @@
-program console;
- gba;
- // the vblank interrupt must be enabled for VBlankIntrWait() to work
- // since the default dispatcher handles the bios flags no vblank handler
- // is required
- // initialise the console
- // setting NULL & 0 for the font address & size uses the default font
- // The font should be a complete 1bit 8x8 ASCII font
- consoleInit( 0, // charbase
- 4, // mapbase
- 0, // background number
- nil, // font
- 0, // font size
- 15 // 16 color palette
- );
- // set the screen colors, color 0 is the background color
- // the foreground color is index 1 of the selected 16 color palette
- BG_COLORS[0] := RGB8(58,110,165);
- BG_COLORS[241] := RGB5(31,31,31);
- SetMode(MODE_0 or BG0_ON);
- // ansi escape sequence to clear screen and home cursor
- // /x1b[line;columnH
- iprintf(#27'[2J');
- // ansi escape sequence to set print co-ordinates
- iprintf(#27'[10;10H' + 'Hello World!');
- // ansi escape sequence to move cursor up
- // /x1b[linesA
- iprintf(#27'[10A' + 'Line 0');
- // ansi escape sequence to move cursor left
- // /x1b[columnsD
- iprintf(#27'[28D' + 'Column 0');
- // ansi escape sequence to move cursor down
- // /x1b[linesB
- iprintf(#27'[19B' + 'Line 19');
- // ansi escape sequence to move cursor right
- // /x1b[columnsC
- iprintf(#27'[5C' + 'Column 20');
-override DEFAULT_FPCDIR=../../../../..
-override TARGET_PROGRAMS+=template
-programs=template
-fpcdir=../../../../..
@@ -1,45 +0,0 @@
-program template;
- frame: integer = 0;
- zbuffer: array [0..239, 0..159] of u8; cvar; external; //EWRAM_BSS;
-procedure Vblank();
- irqSet(IRQ_VBLANK, @Vblank);
- consoleInit(0, 4, 0, nil, 0, 15);
- iprintf(#27'[10;10H' + 'Hello World!'#10);
- iprintf('%x', getmem(200));
@@ -1,5 +1,7 @@
program watch;
+{$mode objfpc}
+
uses
ctypes, nds9;
@@ -20,8 +20,9 @@ target=nds
fpcdir=../../../../../..
[clean]
-files=*.elf *.o *.s *.nds *.nef *.h *.bin \
- $(BUILD)/*
+files=*.elf *.o *.s *.nds *.nef *.h *.bin *.map \
+ $(BUILD)/* \
+ $(INC)/*
units=*
[prerules]
@@ -31,7 +32,16 @@ GFX_FILES = $(foreach dir,gfx,$(notdir $(wildcard $(dir)/*.png)))
[rules]
.NOTPARALLEL:
+clean: dir_delete fpc_clean fpc_cleanall
all: direc fpc_all
+#
+# Delete temp directories
+dir_delete:
+ @$(DELTREE) $(CURDIR)/$(BUILD)
+ @$(DELTREE) $(CURDIR)/$(INC)
direc:
ifneq ($(BUILD), $(CURDIR))
$(MKDIR) $(BUILD)
@@ -1,6 +1,7 @@
program AudioModes;
{$L build/soundbank.bin.o}
ctypes, nds9, maxmod9;
@@ -42,31 +43,22 @@ const
MSL_NSAMPS = 65;
MSL_BANKSIZE = 68;
-//---------------------------------------------
- SHOW_TEXT = #10 +
-' Maxmod Audio Modes Example'#10#10 +
-' Song: '#10 +
-' Mode: '#10#10 +
-' Left/Right: Select Song'#10 +
-' Up/Down: Change Audio Mode'#10 +
-' A: Start Playback'#10 +
-' B: Stop Playback'#10#10 +
-' Tip: Play subtonal with the'#10 +
-' extended mode or else it won''t'#10 +
-' sound right.'#10#10 +
-' Another Tip: The interpolated'#10 +
-' mode doesn''t work in current'#10 +
-' emulators.';
+ SHOW_TEXT: pchar = #10 +
+ ' Maxmod Audio Modes Example'#10#10 +
+ ' Song: '#10 +
+ ' Mode: '#10#10 +
+ ' Left/Right: Select Song'#10 +
+ ' Up/Down: Change Audio Mode'#10 +
+ ' A: Start Playback'#10 +
+ ' B: Stop Playback'#10#10 +
+ ' Tip: Play subtonal with the'#10 +
+ ' extended mode or else it won''t'#10 +
+ ' sound right.'#10#10 +
+ ' Another Tip: The interpolated'#10 +
+ ' mode doesn''t work in current'#10 +
+ ' emulators.';
var
@@ -59,13 +59,13 @@ begin
// ansi escape sequence to clear screen and home cursor
// /x1b[line;columnH
- iprintf(#27 + '[2J');
+ iprintf(#$1b'[2J');
// ansi escape sequence to set print co-ordinates
- iprintf(#27 + '[0;8HMaxMod Audio demo');
- iprintf(#27 + '[3;0HHold A for ambulance sound');
- iprintf(#27 + '[4;0HPress B for boom sound');
+ iprintf(#$1b'[0;8HMaxMod Audio demo');
+ iprintf(#$1b'[3;0HHold A for ambulance sound');
+ iprintf(#$1b'[4;0HPress B for boom sound');
// sound effect handle (for cancelling it later)
amb := 0;
@@ -33,7 +33,7 @@ var
//---------------------------------------------------------------------------------
// callback function to handle song events
-function myEventHandler(msg, param: mm_word): pmm_word;
+function myEventHandler(msg, param: mm_word): mm_callback;//pmm_word;
begin
case msg of
@@ -37,7 +37,7 @@ var
sprites: array[0..4] of MySprite;
-function myEventHandler(msg, param: mm_word): mm_word;
+function myEventHandler(msg, param: mm_word): mm_callback;
MMCB_SONGMESSAGE: // process song messages
@@ -50,7 +50,7 @@ begin
end;
MMCB_SONGFINISHED:; // process song finish message (only triggered in songs played with MM_PLAY_ONCE)
- result := 0;
+ result := nil;
program micrecord;
program eeprom;
ctypes, nds9, sysutils;
@@ -1,6 +1,5 @@
-program main;
+program exceptionTest;
-{$apptype arm9}
{$mode objfpc}
@@ -1,5 +1,6 @@
program dsMotion;
@@ -1,11 +1,7 @@
program apSearch;
-{$define ARM9}
ctypes, nds9, dswifi9;
@@ -57,7 +53,7 @@ begin
-function keyPressed(c: cint): pointer;
+procedure keyPressed(c: cint);
if (c > 0) then
iprintf('%c', c);
@@ -1,15 +1,10 @@
program autoconnect;
ip, gateway, mask, dns1, dns2: in_addr;
@@ -1,4 +1,5 @@
program embedded_gbfs;
{$L build/data.gbfs.o}
ctypes, nds9, gbfs;
program access_dir;
program BothScreens3D;
program Box_Test;
program DisplayList;
program DisplayList2;
{$L build/teapot.bin.o}
@@ -2,6 +2,8 @@ program EnvMapping;
{$L build/cafe.bin.o}
program MixedText3D;
ctypes, nds9, math;
@@ -19,6 +19,8 @@ program PalettedCube;
{$L build/texture9_RGB32_A3_pal.bin.o}
{$L build/texture9_RGB32_A3_tex.bin.o}
@@ -3,6 +3,8 @@ program picking;
{$L build/cylinder.bin.o}
{$L build/sphere.bin.o}
@@ -1,9 +1,10 @@
program SimpleQuad;
rotateX: cfloat = 0.0;
rotateY: cfloat = 0.0;
program SimpleTri;
@@ -2,8 +2,6 @@ program TexturedCube;
{$L build/texture.bin.o}
@@ -1,6 +1,6 @@
program TextureQuad;
@@ -2,6 +2,7 @@ program ToonShading;
//NB: This would look better if the object had a bit of texturing too (eyes, nose etc)
{$L build/statue.bin.o}
@@ -1,6 +1,8 @@
program bmp_16bit_color;
{$L build/drunkenlogo.o}
@@ -1,8 +1,6 @@
program bmp_256_color;
program DoubleBuffer;
@@ -3,6 +3,8 @@ program AllInOne;
{$L build/TextBackgrounds.o}
{$L build/Multilayer.o}
ctypes, nds9, basic, advanced, handmade, scrolling;
@@ -2,6 +2,8 @@ program BG_Rotation;
{$L build/drunkenlogo.bin.o}
{$L build/palette.bin.o}
program AnsiConsole;
program ConsoleWindows;
program custom_font;
{$L build/font.o}
@@ -19,8 +21,8 @@ var
- videoSetModeSub(MODE_0_2D);
- vramSetBankC(VRAM_C_SUB_BG);
+ videoSetModeSub(MODE_0_2D);
+ vramSetBankC(VRAM_C_SUB_BG);
console := consoleInit(nil, 0, BgType_Text4bpp, BgSize_T_256x256, map_base, tile_base, false, false);
@@ -33,7 +35,7 @@ begin
font.convertSingleColor := false;
consoleSetFont(console, @font);
printf('Custom Font Demo'#10);
printf(' by Poffy'#10);
printf('modified by WinterMute'#10);
@@ -1,7 +1,5 @@
program printBothScreens;
@@ -10,7 +8,6 @@ uses
touch: touchPosition;
topScreen, bottomScreen: PrintConsole;
-// p: PrintConsole;
videoSetMode(MODE_0_2D);
@@ -22,13 +19,6 @@ begin
consoleInit(@topScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, true);
consoleInit(@bottomScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, false, true);
-{
- topScreen := consoleInit(nil, 3, BgType_Text4bpp, BgSize_T_256x256, 31, 0, true);
- p := topScreen^;
- bottomScreen := consoleInit(nil, 3, BgType_Text4bpp, BgSize_T_256x256, 31, 0, false);
- topScreen := @p;
-}
consoleSelect(@topScreen);
iprintf(#10#10#9'Hello DS dev''rs'#10);
program RotscaleText;
program AllocationTest;
@@ -120,7 +121,7 @@ var
//sort our sprites on z
//a more efficient way would be to keep a sorted list of sprites
- qsort(@sprites, SPRITE_MAX, sizeof(TMySprite), @zsort);
+ qsort(@sprites, SPRITE_MAX, sizeof(TMySprite), TSort(@zsort));
//set oam to values required by my sprite
for i := 0 to SPRITE_MAX - 1 do
@@ -178,7 +179,7 @@ begin
- memUsageTemp: cint;// = $FFFFFFFF;
+ memUsageTemp: longint;// = $FFFFFFFF;
randomize;
@@ -42,10 +42,11 @@ program AnimateSimple;
{$L build/man.o}
{$L build/woman.o}
manTiles: array [0..3071] of cuint; cvar; external;
manPal: array [0..255] of cushort; cvar; external;
program BitmapSprites;
program FireAndSprites;
{$L build/ball.pcx.o}
program Simple;
i: integer;
@@ -39,42 +40,42 @@ begin
touchRead(touch);
oamSet(oamMain, //main graphics engine context
- 0, //oam index (0 to 127)
+ 0, //oam index (0 to 127)
touch.px, touch.py, //x and y pixle location of the sprite
0, //priority, lower renders last (on top)
- 0, //this is the palette index if multiple palettes or the alpha value if bmp sprite
- SpriteSize_16x16,
- SpriteColorFormat_256Color,
+ 0, //this is the palette index if multiple palettes or the alpha value if bmp sprite
+ SpriteSize_16x16,
+ SpriteColorFormat_256Color,
gfx, //pointer to the loaded graphics
- -1, //sprite rotation data
+ -1, //sprite rotation data
false, //double the size when rotating?
false, //hide the sprite?
false, false, //vflip, hflip
false //apply mosaic
+ );
oamSet(oamSub,
- 0,
- touch.px,
- touch.py,
0,
- gfxSub,
- -1,
- false,
- false, false,
- false
+ touch.px,
+ touch.py,
+ 0,
+ gfxSub,
+ -1,
+ false,
+ false, false,
+ false
swiWaitForVBlank();
oamUpdate(oamMain);
oamUpdate(oamSub);
+end.
program SpriteExtendedPalettes;
@@ -32,8 +34,8 @@ begin
//------------------------------------------------------------------
vramSetBankF(VRAM_F_LCD);
- VRAM_F_EXT_PALETTE[0][1] := RGB15(31,0,0);
- VRAM_F_EXT_PALETTE[1][1] := RGB15(0,31,0);
+ VRAM_F_EXT_PALETTE^[0][1] := RGB15(31,0,0);
+ VRAM_F_EXT_PALETTE^[1][1] := RGB15(0,31,0);
// set vram to ex palette
vramSetBankF(VRAM_F_SPRITE_EXT_PALETTE);
@@ -46,40 +48,40 @@ begin
gfx1, //pointer to the loaded graphics
oamSet(oamMain,
- 1,
- SCREEN_WIDTH - touch.px,
- SCREEN_HEIGHT - touch.py,
+ 1,
+ SCREEN_WIDTH - touch.px,
+ SCREEN_HEIGHT - touch.py,
1, //use second palette
- gfx2,
+ gfx2,
program SpriteRotate;
@@ -40,43 +42,43 @@ begin
// width (20 - 16, 20 - 16, )
//-------------------------------------------------------------------------
oamRotateScale(oamMain, 0, angle, intToFixed(1, 8), intToFixed(1, 8));
20 - 16, 20 - 16, //x and y pixle location of the sprite
- SpriteSize_32x32,
+ SpriteSize_32x32,
- 0, //sprite rotation/scale matrix index
+ 0, //sprite rotation/scale matrix index
true, //double the size when rotating?
// Because the sprite below has size double set to false it can never be larger than
- // 32x32 causing it to clip as it rotates.
+ // 32x32 causing it to clip as it rotates.
- 1, //oam index (0 to 127)
+ 1, //oam index (0 to 127)
204, 20, //x and y pixle location of the sprite
program hello_world;
program keyboardAsync;
@@ -1,9 +1,11 @@
program keyboardStdin;
-function OnKeyPressed(key: cint): pointer;
+procedure OnKeyPressed(key: cint);
if (key > 0) then
iprintf('%c', key);
@@ -21,14 +21,14 @@ uses
{$linklib sysbase}
{$define NDS_INTERFACE}
-{$include fathelper.inc}
+{ $include fathelper.inc}
{$include ../nds/disc_io.inc}
{$include fat.inc}
{$undef NDS_INTERFACE}
implementation
{$define NDS_IMPLEMENTATION}
{$undef NDS_IMPLEMENTATION}
{$include filesystem.inc}
@@ -59,7 +59,7 @@ procedure mmSetModuleTempo(tempo: mm_word); cdecl; external;
procedure mmSetModulePitch(pitch: mm_word); cdecl; external;
procedure mmPlayModule(address, mode, layer: mm_word); cdecl; external;
function mmEffect(sample_ID: mm_word): mm_sfxhand; cdecl; external;
-function mmEffectEx(sound: pmm_sound_effect): mm_sfxhand; cdecl; external;
+function mmEffectEx(var sound: mm_sound_effect): mm_sfxhand; cdecl; external;
procedure mmEffectVolume(handle: mm_sfxhand; volume: mm_word); cdecl; external;
procedure mmEffectPanning(handle: mm_sfxhand; panning: mm_byte); cdecl; external;
procedure mmEffectRate(handle: mm_sfxhand; rate: mm_word); cdecl; external;
@@ -104,4 +104,5 @@ procedure BCDToInteger(var data: cuint8; length: cuint32); cdecl; external;
procedure integerToBCD(var data: cuint8; length: cuint32); cdecl; external;
procedure initClockIRQ(); cdecl; external;
+procedure resyncClock(); cdecl; external;
{$endif NDS_INTERFACE}
@@ -515,15 +515,15 @@ end;
procedure bgSetMosaic(dx, dy: cuint); inline;
sassert( (dx < 16) and (dy < 16), 'Mosaic range is 0 to 15');
- MOSAIC_CR^ := MOSAIC_CR^ and not $FF;
- MOSAIC_CR^ := MOSAIC_CR^ or (dx or (dy shl 4));
+ mosaicShadow := (mosaicShadow and $ff00) or (dx or (dy shl 4));
+ REG_MOSAIC^ := mosaicShadow;
procedure bgSetMosaicSub(dx, dy: cuint); inline;
- SUB_MOSAIC_CR^ := SUB_MOSAIC_CR^ and not $FF;
- SUB_MOSAIC_CR^ := SUB_MOSAIC_CR^ or (dx or (dy shl 4));
+ mosaicShadowSub := (mosaicShadowSub and $ff00) or (dx or (dy shl 4));
+ REG_MOSAIC_SUB^ := mosaicShadowSub;
@@ -42,8 +42,8 @@
{$ifdef NDS_INTERFACE}
type
- KeyChangeCallback = function(key: cint): pointer;
-// KeyChangeCallback = procedure(key: cint) of object;
+// KeyChangeCallback = function(key: cint): pointer;
+ KeyChangeCallback = procedure(key: cint);
PKeyChangeCallback = ^KeyChangeCallback;
KeyboardState = integer;
@@ -99,6 +99,6 @@ procedure keyboardShow(); cdecl; external;
procedure keyboardHide(); cdecl; external;
function keyboardGetKey(x, y: cint): cint; cdecl; external;
procedure keyboardGetString(buffer: pchar; maxLen: cint); cdecl; external;
-function keboardGetChar(): cint; cdecl; external;
+function keyboardGetChar(): cint; cdecl; external;
function keyboardUpdate(): cint; cdecl; external;
@@ -80,6 +80,8 @@ function soundPlayNoise(freq: cuint16; volume, pan: cuint8): cint; cdecl; extern
procedure soundPause(soundId: cint); cdecl; external;
+procedure soundSetWaveDuty(soundId: cint; cycle: DutyCycle); cdecl; external;
procedure soundKill(soundId: cint); cdecl; external;
procedure soundResume(soundId: cint); cdecl; external;
@@ -299,6 +299,7 @@ function oamAllocateGfx(var oam: OamState; size: SpriteSize; colorFormat: Sprite
procedure oamFreeGfx(var oam: OamState; const gfxOffset: pointer); cdecl; external;
procedure oamSetMosaic(dx, dy: cuint); inline;
+procedure oamSetMosaicSub(dx, dy: cuint); inline;
procedure oamSet( var oam: OamState;
id, x, y, priority, palette_alpha: cint;
@@ -310,6 +311,8 @@ procedure oamSet( var oam: OamState;
procedure oamClear(var oam: OamState; start, count: cint); cdecl; external;
procedure oamUpdate(var oam: OamState); cdecl; external;
procedure oamRotateScale(var oam: OamState; rotId, angle, sx, sy: cint); cdecl; external;
+procedure oamAffineTransformation(var oam: OamState; rotId, hdx, hdy, vdx, vdy: cint); inline;
function oamCountFragments(var oam: OamState): cint; cdecl; external;
procedure oamAllocReset(var oam: OamState); cdecl; external;
function oamGfxPtrToOffset(const offset: pointer): cuint; cdecl; external;
@@ -364,8 +367,25 @@ end;
sassert((dx < 16) and (dy < 16), 'Mosaic range is 0 to 15');
- MOSAIC_CR^ := MOSAIC_CR^ and not ($FF00);
- MOSAIC_CR^ := MOSAIC_CR^ or ((dx shl 8) or (dy shl 12));
+ mosaicShadow := ( mosaicShadow and $00ff) or (dx shl 8) or (dy shl 12);
+end;
+begin
+ sassert((dx < 16) and (dy < 16), 'Mosaic range is 0 to 15');
+ mosaicShadowSub := (mosaicShadowSub and $00ff) or (dx shl 8) or (dy shl 12);
+ sassert((rotId >= 0) and (rotId < 32), 'oamAffineTransformation() rotId is out of bounds, must be 0-31');
+ oam.oamRotationMemory[rotId].hdx := hdx shr 12;
+ oam.oamRotationMemory[rotId].hdy := hdy shr 12;
+ oam.oamRotationMemory[rotId].vdx := vdx shr 12;
+ oam.oamRotationMemory[rotId].vdy := vdy shr 12;
{$endif NDS_IMPLEMENTATION}
@@ -43,6 +43,10 @@
{$endif ARM9}
+var
+ mosaicShadow: cuint16; cvar; external;
+ mosaicShadowSub: cuint16; cvar; external;
const
BG_PALETTE : pcuint16 = pointer($05000000);
BG_PALETTE_SUB : pcuint16 = pointer($05000400);
@@ -244,10 +248,10 @@ type
P_ext_palette = ^_ext_palette;
- VRAM_E_EXT_PALETTE : P_palette absolute VRAM_E;
- VRAM_F_EXT_PALETTE : P_palette absolute VRAM_F;
- VRAM_G_EXT_PALETTE : P_palette absolute VRAM_G;
- VRAM_H_EXT_PALETTE : P_palette absolute VRAM_H;
+ VRAM_E_EXT_PALETTE : P_ext_palette absolute VRAM_E;
+ VRAM_F_EXT_PALETTE : P_ext_palette absolute VRAM_F;
+ VRAM_G_EXT_PALETTE : P_ext_palette absolute VRAM_G;
+ VRAM_H_EXT_PALETTE : P_ext_palette absolute VRAM_H;
function vramSetMainBanks(a: VRAM_A_TYPE; b: VRAM_B_TYPE; c: VRAM_C_TYPE; d: VRAM_D_TYPE): cuint32; cdecl; external;
procedure vramRestoreMainBanks(vramTemp: cuint32); cdecl; external;
@@ -375,8 +379,8 @@ const
SUB_WIN_IN : pcuint16 = pointer($04001048);
SUB_WIN_OUT : pcuint16 = pointer($0400104A);
- MOSAIC_CR : pcuint16 = pointer($0400004C);
- SUB_MOSAIC_CR : pcuint16 = pointer($0400104C);
+ REG_MOSAIC : pcuint16 = pointer($0400004C);
+ REG_MOSAIC_SUB : pcuint16 = pointer($0400104C);
REG_BLDCNT : pcuint16 = pointer($04000050);
REG_BLDY : pcuint16 = pointer($04000054);
@@ -75,7 +75,7 @@ const
function inttof32(n: cint): cint32; inline;
function f32toint(n: cint32): cint; inline;
-function floattof32(n: cfloat): cint32; inline;
+function floattof32(n: cfloat): cint32; inline; //inlining it makes impossible to pass it to another function :/
function f32tofloat(n: cint32): cfloat; inline;
@@ -89,7 +89,7 @@ function TEXTURE_PACK(u, v: cint): cint; inline;
//function TEXTURE_PACK(u, v: cshort): cuint; inline;
- v16 = cuint16; //cshort? // vertex 4.12 fixed format
+ v16 = cshort;//cuint16? // vertex 4.12 fixed format
function inttov16(n: cint): cint{v16}; inline;
function f32tov16(n: cint32): v16; inline;
@@ -69,10 +69,6 @@ procedure swiSoftReset(); cdecl; external;
procedure swiDelay(duration: cuint32); cdecl; external;
-procedure swiIntrWait(waitForSet: cint; flags: cuint32); cdecl; external;
-procedure swiWaitForVBlank(); cdecl; external;
function swiDivide(numerator, divisor: cint): cint; cdecl; external;
function swiRemainder(numerator, divisor: cint): cint; cdecl; external;
procedure swiDivMod(numerator, divisor: cint; var result, remainder: cint); cdecl; external;
@@ -86,11 +86,15 @@ var
if (index >= v^.cur_size) then
+ v^.data := ReAllocMem(v^.data, sizeof(pointer) * v^.cur_size * 2);
+ FillChar(pointer(integer(v^.data^^) + v^.cur_size)^, sizeof(pointer) * v^.cur_size, 0);
v^.cur_size := v^.cur_size * 2;
- v^.data := ReAllocMem(v^.data, sizeof(pointer) * v^.cur_size);
+ {
i := integer(v^.data);
i := i + index;
pointer(i) := item;
+ }
+ v^.data[index] := item;
@@ -47,11 +47,11 @@ const
FIFO_PM : FifoChannels = 0;
FIFO_SOUND : FifoChannels = 1;
FIFO_SYSTEM : FifoChannels = 2;
- FIFO_RSDV_01: FifoChannels = 3;
- FIFO_RSVD_02: FifoChannels = 4;
- FIFO_RSVD_03: FifoChannels = 5;
- FIFO_DSWIFI : FifoChannels = 6;
- FIFO_MAXMOD : FifoChannels = 7;
+ FIFO_MAXMOD : FifoChannels = 3;
+ FIFO_DSWIFI : FifoChannels = 4;
+ FIFO_RSVD_01: FifoChannels = 5;
+ FIFO_RSVD_02: FifoChannels = 6;
+ FIFO_RSVD_03: FifoChannels = 7;
FIFO_USER_01: FifoChannels = 8;
FIFO_USER_02: FifoChannels = 9;
FIFO_USER_03: FifoChannels = 10;
@@ -65,16 +65,17 @@ const
FifoSoundCommand = integer;
- SOUND_SET_PAN : FifoSoundCommand = (0 shl 20);
- SOUND_SET_VOLUME : FifoSoundCommand = (1 shl 20);
- SOUND_SET_FREQ : FifoSoundCommand = (2 shl 20);
- SOUND_MASTER_ENABLE : FifoSoundCommand = (3 shl 20);
- SOUND_MASTER_DISABLE : FifoSoundCommand = (4 shl 20);
- SOUND_PAUSE : FifoSoundCommand = (5 shl 20);
- SOUND_RESUME : FifoSoundCommand = (6 shl 20);
- SOUND_KILL : FifoSoundCommand = (7 shl 20);
- SOUND_SET_MASTER_VOL : FifoSoundCommand = (8 shl 20);
- MIC_STOP : FifoSoundCommand = (9 shl 20);
+ SOUND_SET_PAN : FifoSoundCommand = ( 0 shl 20);
+ SOUND_SET_VOLUME : FifoSoundCommand = ( 1 shl 20);
+ SOUND_SET_FREQ : FifoSoundCommand = ( 2 shl 20);
+ SOUND_SET_WAVEDUTY : FifoSoundCommand = ( 3 shl 20);
+ SOUND_MASTER_ENABLE : FifoSoundCommand = ( 4 shl 20);
+ SOUND_MASTER_DISABLE : FifoSoundCommand = ( 5 shl 20);
+ SOUND_PAUSE : FifoSoundCommand = ( 6 shl 20);
+ SOUND_RESUME : FifoSoundCommand = ( 7 shl 20);
+ SOUND_KILL : FifoSoundCommand = ( 8 shl 20);
+ SET_MASTER_VOL : FifoSoundCommand = ( 9 shl 20);
+ MIC_STOP : FifoSoundCommand = (10 shl 20);
FifoSystemCommands = integer;
@@ -99,6 +100,7 @@ const
WIFI_ENABLE : FifoWifiCommands = 0;
WIFI_DISABLE : FifoWifiCommands = 1;
WIFI_SYNC : FifoWifiCommands = 2;
+ WIFI_STARTUP : FifoWifiCommands = 3;
PM_LedBlinkMode = integer;
@@ -107,18 +109,8 @@ const
PM_LED_SLEEP: PM_LedBlinkMode = (1 shl 4);
PM_LED_BLINK: PM_LedBlinkMode = (3 shl 4);
- FIFO_CHANNEL_BITS = 4;
- FIFO_MAX_DATA_BYTES = 128;
-{$ifdef ARM9}
- FIFO_BUFFER_ENTRIES = 512;
-{$else ARM9} // ARM7
- FIFO_BUFFER_ENTRIES = 256;
-{$endif ARM9}
- fifo_buffer: array [0..FIFO_BUFFER_ENTRIES*2-1] of cuint32; cvar; external;
+//var
+// fifo_buffer: array [0..FIFO_BUFFER_ENTRIES*2-1] of cuint32; cvar; external;
{$ifdef FIFO_RIGOROUS_ERROR_CHECKING}
@@ -140,237 +132,23 @@ function fifoSetAddressHandler(channel: integer; newhandler: FifoAddressHandlerF
function fifoSetValue32Handler(channel: integer; newhandler: FifoValue32HandlerFunc; userdata: pointer): cbool; cdecl; external;
function fifoSetDatamsgHandler(channel: integer; newhandler: FifoDatamsgHandlerFunc; userdata: pointer): cbool; cdecl; external;
-procedure fifoForceAddressHandler(channel: integer; newhandler: FifoAddressHandlerFunc; userdata: pointer); cdecl; external;
-procedure fifoForceValue32Handler(channel: integer; newhandler: FifoValue32HandlerFunc; userdata: pointer); cdecl; external;
-procedure fifoForceDatamsgHandler(channel: integer; newhandler: FifoDatamsgHandlerFunc; userdata: pointer); cdecl; external;
function fifoCheckAddress(channel: integer): cbool; cdecl; external;
function fifoCheckValue32(channel: integer): cbool; cdecl; external;
function fifoCheckDatamsg(channel: integer): cbool; cdecl; external;
function fifoCheckDatamsgLength(channel: integer): cint; cdecl; external;
-function fifoCountDatamsg(channel: integer): cint; cdecl; external;
function fifoGetAddress(channel: integer): pointer; cdecl; external;
function fifoGetValue32(channel: integer): cuint32; cdecl; external;
function fifoGetDatamsg(channel, buffersize: cint; destbuffer: pcuint8): cint; cdecl; external;
-function fifoGetBufferUsage(): cint; cdecl; external;
-function fifoGetLostWordCount(): cint; cdecl; external;
-procedure fifoInternalSendInterrupt(); cdecl; external;
-procedure fifoInternalRecvInterrupt(); cdecl; external;
-procedure fifoInternalProtect(); cdecl; external;
-procedure fifoInternalUnprotect(); cdecl; external;
-function fifoInternalSend(firstword: cuint32; extrawordcount: cint; wordlist: pcuint32): cbool; cdecl; external;
-procedure fifoInternalBeginSend(); cdecl; external;
-function fifoInternalRecvPeek(): cuint32; cdecl; external;
-function fifoInternalRecvPopFirst(): cuint32; cdecl; external;
-function fifoInternalRecvWordCount(): cint; cdecl; external;
-function fifoInternalRecvPushBack(word: cuint32): cbool; cdecl; external;
-function fifoInternalSendEmpty(): cbool; cdecl; external;
-function fifoInternalSendDeque(): cuint32; cdecl; external;
-function fifoInternalSendEnqueue(word: cuint32): cbool; cdecl; external;
-function fifoInternalAllocFreeBlock(): cint; cdecl; external;
-procedure fifoInternalFreeBlock(blockid: cint); cdecl; external;
-function fifoInternalFreeCheck(num_words: cint): cbool; cdecl; external;
-// And some aspects of the configuration can't be changed
-// please don't edit below this line.
- FIFO_ADDRESSDATA_SHIFT = 0;
- FIFO_MINADDRESSDATABITS = 22;
- FIFO_ADDRESSDATA_MASK = $003FFFFF;
- FIFO_ADDRESSBASE = $02000000;
- FIFO_ADDRESSCOMPATIBLE = $FFC00000;
- FIFO_NUM_CHANNELS = (1 shl FIFO_CHANNEL_BITS);
- FIFO_CHANNEL_SHIFT = (32 - FIFO_CHANNEL_BITS);
- FIFO_CHANNEL_MASK = ((1 shl FIFO_CHANNEL_BITS) - 1);
- FIFO_ADDRESSBIT_SHIFT = (FIFO_CHANNEL_SHIFT - 1);
- FIFO_ADDRESSBIT = (1 shl FIFO_ADDRESSBIT_SHIFT);
- FIFO_IMMEDIATEBIT_SHIFT = (FIFO_CHANNEL_SHIFT - 2);
- FIFO_IMMEDIATEBIT = (1 shl FIFO_IMMEDIATEBIT_SHIFT);
- FIFO_EXTRABIT_SHIFT = (FIFO_CHANNEL_SHIFT - 3);
- FIFO_EXTRABIT = (1 shl FIFO_EXTRABIT_SHIFT);
- FIFO_VALUE32_MASK = (FIFO_EXTRABIT - 1);
- FIFO_BUFFER_TERMINATE = $FFFF;
- FIFO_BUFFER_NEXTMASK = $FFFF;
-{ $IF (FIFO_MINADDRESSDATABITS + FIFO_CHANNEL_BITS + 1) > 32}
- { $ERROR Too many channel bits - control word isn't big enough for address packet}
-{ $ENDIF}
-function FIFO_PACK_ADDRESS(channel, address: cint): cint; inline;
-function FIFO_VALUE32_NEEDEXTRA(value32: cint32): boolean; inline;
-function FIFO_PACK_VALUE32(channel, value32: cint): cint; inline;
-function FIFO_PACK_VALUE32_EXTRA(channel: cint): cint; inline;
-function FIFO_IS_ADDRESS_COMPATIBLE(address: cint): boolean; inline;
-function FIFO_PACK_DATAMSG_HEADER(channel, numwords: cint): cint; inline;
-function FIFO_IS_ADDRESS(dataword: cint): boolean; inline;
-function FIFO_IS_VALUE32(dataword: cint): boolean; inline;
-function FIFO_IS_DATA(dataword: cint): boolean; inline;
-function FIFO_UNPACK_CHANNEL(dataword: cint): cint; inline;
-function FIFO_UNPACK_ADDRESS(dataword: cint): pointer; inline;
-function FIFO_UNPACK_VALUE32_NEEDEXTRA(dataword: cint): boolean; inline;
-function FIFO_UNPACK_VALUE32_NOEXTRA(dataword: cint): cint; inline;
-function FIFO_UNPACK_DATALENGTH(dataword: cint): cint; inline;
- FIFO_BUFFERCONTROL_UNUSED = 0;
- FIFO_BUFFERCONTROL_SENDWORD = 1;
- FIFO_BUFFERCONTROL_RECVWORD = 2;
- FIFO_BUFFERCONTROL_ADDRESS = 3;
- FIFO_BUFFERCONTROL_VALUE32 = 4;
- FIFO_BUFFERCONTROL_DATASTART = 5;
- FIFO_BUFFERCONTROL_DATA = 6;
-function FIFO_BUFFER_DATA(index: cint): cint; inline;
-function FIFO_BUFFER_DATA_BYTE(index, byteindex: cint): pcuint8; inline;
-function FIFO_BUFFER_GETNEXT(index: cint): cint; inline;
-function FIFO_BUFFER_GETCONTROL(index: cint): cint; inline;
-function FIFO_BUFFER_GETEXTRA(index: cint): cint; inline;
-procedure FIFO_BUFFER_SETCONTROL(index,next,control,extra: cint); inline;
-procedure FIFO_BUFFER_SETNEXT(index, next: cint); inline;
{$ifdef NDS_IMPLEMENTATION}
- result := ((channel) shl FIFO_CHANNEL_SHIFT) or
- FIFO_ADDRESSBIT or
- ((address shr FIFO_ADDRESSDATA_SHIFT) and FIFO_ADDRESSDATA_MASK);
- result := (value32 and (not FIFO_VALUE32_MASK)) <> 0;
- result := (channel shl FIFO_CHANNEL_SHIFT) or
- FIFO_IMMEDIATEBIT or
- (value32 and FIFO_VALUE32_MASK);
- result := (channel shl FIFO_CHANNEL_SHIFT) or FIFO_IMMEDIATEBIT or FIFO_EXTRABIT;
- result := (address and FIFO_ADDRESSCOMPATIBLE) = FIFO_ADDRESSBASE;
- result := (channel shl FIFO_CHANNEL_SHIFT) or (numwords and FIFO_VALUE32_MASK);
- result := (dataword and FIFO_ADDRESSBIT) <> 0;
- result := ((dataword and FIFO_ADDRESSBIT) = 0) and ((dataword and FIFO_IMMEDIATEBIT) <> 0);
- result := (dataword and (FIFO_ADDRESSBIT or FIFO_IMMEDIATEBIT)) = 0;
- result := (dataword shr FIFO_CHANNEL_SHIFT) and FIFO_CHANNEL_MASK;
- result := pointer(((dataword and FIFO_ADDRESSDATA_MASK) shl FIFO_ADDRESSDATA_SHIFT) or FIFO_ADDRESSBASE);
- result := (dataword and FIFO_EXTRABIT) <> 0;
- result := (dataword and FIFO_VALUE32_MASK);
- result := fifo_buffer[(index)*2+1];
-// ((u8*)(&fifo_buffer[(index)*2+1]))[(byteindex)]
-///////// result := pcuint8(pointer(fifo_buffer[index*2+1]))[byteindex];
- result := (fifo_buffer[(index)*2] and FIFO_BUFFER_NEXTMASK);
- result := (fifo_buffer[(index)*2] shr 28);
- result := ((fifo_buffer[(index)*2] shr 16) and $FFF);
- fifo_buffer[(index)*2] := (next and FIFO_BUFFER_NEXTMASK) or (control shl 28) or ((extra and $FFF) shl 16);
- fifo_buffer[(index)*2] := (next and FIFO_BUFFER_NEXTMASK) or (fifo_buffer[(index)*2] and (not FIFO_BUFFER_NEXTMASK));
@@ -43,62 +43,52 @@ type
{$PACKRECORDS 4}
FifoMessage = record
_type: cuint16;
- empty: array[0..31] of cuint8;
+ case integer of
+ 0: (
+ SundPlay: record
+ _type: cuint16;
+ data: pointer;
+ loopPoint: cuint16;
+ dataSize: cuint16;
+ freq: cuint16;
+ volume: cuint8;
+ pan: cuint8;
+ loop: cbool;
+ format: cuint8;
+ end;
+ 1: (
+ SoundPsg: record
+ dutyCycle: cuint8;
+ 2: (
+ MicRecord: record
+ buffer: pointer;
+ bufferLength: cuint32;
+ 3: (
+ MicBufferFull: record
+ length: cuint32;
+ 4: (
+ SystemInput: record
+ touch: touchPosition;
+ keys: cuint16;
TFifoMessage = FifoMessage;
PFifoMessage = ^FifoMessage;
- SoundPlayMsg = record
- _type: cuint16;
- data: pointer;
- loopPoint: cuint16;
- dataSize: cuint16;
- freq: cuint16;
- volume: cuint8;
- pan: cuint8;
- loop: cbool;
- format: cuint8;
- TSoundPlayMsg = SoundPlayMsg;
- PSoundPlayMsg = ^SoundPlayMsg;
- SoundPsgMsg = record
- dutyCycle: cuint8;
- TSoundPsgMsg = SoundPsgMsg;
- PSoundPsgMsg = ^SoundPsgMsg;
- MicRecordMsg = record
- buffer: pointer;
- bufferLength: cuint32;
- TMicRecordMsg = MicRecordMsg;
- PMicRecordMsg = ^MicRecordMsg;
- MicBufferFullMsg = record
- length: cuint32;
- TMicBufferFullMsg = MicBufferFullMsg;
- PMicBufferFullMsg = ^MicBufferFullMsg;
- SystemInputMsg = record
- touch: touchPosition;
- keys: cuint16;
- TSystemInputMsg = SystemInputMsg;
- PSystemInputMsg = ^SystemInputMsg;
{$PACKRECORDS C}
@@ -122,6 +122,11 @@ procedure irqInitHandler(handler: TVoidFunctionPointer); cdecl; external;
procedure irqInitHandler(handler: pointer); cdecl; external;
procedure irqEnable(irq: cuint32); cdecl; external;
procedure irqDisable(irq: cuint32); cdecl; external;
+procedure swiIntrWait(waitForSet: cint; flags: cuint32); cdecl; external;
+procedure swiWaitForVBlank(); cdecl; external;
+function enterCriticalSection(): cint; inline;
+procedure leaveCriticalSection(oldIME: cint); inline;
@@ -131,5 +136,19 @@ begin
result := (1 shl (n + 3));
+ oldIME: cint;
+ oldIME := REG_IME^;
+ REG_IME^ := 0;
+ result := oldIME;
+ REG_IME^ := oldIME;
@@ -1,5 +1,5 @@
-{$include helper.inc}
+{ $include helper.inc}
{$include ndstypes.inc}
{$include bios.inc}
{$include card.inc}
@@ -111,10 +111,8 @@ const
REG_WININ : pcuint16 = pointer($4000048);
REG_WINOUT : pcuint16 = pointer($400004A);
- REG_MOSAIC : pcuint32 = pointer($400004C);
- REG_MOSAIC_L : pcuint32 = pointer($400004C);
- REG_MOSAIC_H : pcuint32 = pointer($400004E);
+ MOSAIC_CR = REG_MOSAIC;
BLEND_CR = REG_BLDCNT;
BLEND_AB = REG_BLDALPHA;
BLEND_Y = REG_BLDY;
@@ -171,13 +169,11 @@ const
REG_WIN0V_SUB : pcuint16 = pointer($4001044);
REG_WIN1V_SUB : pcuint16 = pointer($4001046);
REG_WININ_SUB : pcuint16 = pointer($4001048);
- REG_WINOUT_SUB : pcuint16 = pointer($400104A);
+ REG_WINOUT_SUB : pcuint16 = pointer($400104A);
- REG_MOSAIC_SUB : pcuint32 = pointer($400104C);
- REG_MOSAIC_L_SUB : pcuint16 = pointer($400104C);
- REG_MOSAIC_H_SUB : pcuint16 = pointer($400104E);
+ SUB_MOSAIC_CR = REG_MOSAIC_SUB;
- REG_BLDMOD_SUB : pcuint16 = pointer($4001050);
+ REG_BLDMOD_SUB: pcuint16 = pointer($4001050);
REG_COLV_SUB : pcuint16 = pointer($4001052);
REG_COLY_SUB : pcuint16 = pointer($4001054);
@@ -76,15 +76,17 @@ const
POWER_3D_CORE : PM_Bits = PM_ARM9_DIRECT or (1 shl 3);
POWER_2D_B : PM_Bits = PM_ARM9_DIRECT or (1 shl 9);
POWER_SWAP_LCDS: PM_Bits = PM_ARM9_DIRECT or (1 shl 15);
- POWER_ALL_2D : PM_Bits = PM_ARM9_DIRECT or (1 shl 0) or (1 shl 1) or (1 shl 9);
- POWER_ALL : PM_Bits = PM_ARM9_DIRECT or (1 shl 0) or (1 shl 1) or (1 shl 9) or (1 shl 3) or (1 shl 2);
+// POWER_ALL_2D : PM_Bits = PM_ARM9_DIRECT or POWER_LCD or POWER_2D_A or POWER_2D_B;
+ POWER_ALL_2D : PM_Bits = (1 shl 16) or (1 shl 0) or (1 shl 1) or (1 shl 9);
+// POWER_ALL : PM_Bits = PM_ARM9_DIRECT or POWER_ALL_2D or POWER_3D_CORE or POWER_MATRIX;
+ POWER_ALL : PM_Bits = (1 shl 16) or (1 shl 0) or (1 shl 1) or (1 shl 9) or (1 shl 3) or (1 shl 2);
procedure sleep(); cdecl; external;
{$ifdef ARM9}
-procedure powerOn(bits: PM_Bits); cdecl; external;
-procedure powerOff(bits: PM_Bits); cdecl; external;
-procedure ledBlink(bm: PM_LedBlinkMode); cdecl; external;
+procedure powerOn(bits: cint); cdecl; external;
+procedure powerOff(bits: cint); cdecl; external;
+procedure ledBlink(bm: cint); cdecl; external;
procedure systemMsgHandler(bytes: cint; user_data: pointer); cdecl; external;
procedure powerValueHandler(value: cuint32; data: pointer); cdecl; external;
@@ -143,7 +145,7 @@ function readPowerManagement(reg: cint): cint; inline;
procedure powerOn(bits: PM_Bits); inline;
procedure powerOff(bits: PM_Bits); inline;
+procedure systemShutDown(); inline;
procedure readUserSettings(); cdecl; external;
{$endif ARM7}
@@ -277,6 +279,11 @@ procedure powerOff(bits: PM_Bits); inline;
REG_POWERCNT^ := REG_POWERCNT^ and not bits;
+ powerOn(PM_SYSTEM_PWR);
@@ -86,7 +86,8 @@ const
TIMER_DIV_1024 = (3);
procedure timerStop(channel: cint); inline;
+procedure cpuStartTiming(timer: cuint32); cdecl; external;
+function cpuEndTiming(): cuint32; cdecl; external;
@@ -0,0 +1,56 @@
+{
+ This file is part of the Free Component Library (FCL)
+ Copyright (c) 1999-2002 by the Free Pascal development team
+ BIOS functions unit for Nintendo DS
+ Copyright (c) 2006 by Francesco Lombardi
+ 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.
+ *****************************************************************************}
+function __errno: plongint; cdecl; export;
+function S_ISBLK(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFBLK;
+function S_ISCHR(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFCHR;
+function S_ISDIR(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFDIR;
+function S_ISFIFO(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFIFO;
+function S_ISREG(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFREG;
+function S_ISLNK(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFLNK;
+function S_ISSOCK(m: longint): boolean; inline;
+ result := (m and _IFMT) = _IFSOCK;
@@ -0,0 +1,199 @@
+type
+ time_t = longint;
+ ptime_t = ^time_t;
+ Ptm = ^tm;
+ tm = record
+ tm_sec: longint;
+ tm_min: longint;
+ tm_hour: longint;
+ tm_mday: longint;
+ tm_mon: longint;
+ tm_year: longint;
+ tm_wday: longint;
+ tm_yday: longint;
+ tm_isdst: longint;
+(* Some libc functions *)
+//function printf(format: Pchar; args: array of const): longint; cdecl; external;
+function printf(format: Pchar): longint; cdecl; varargs; external;
+//function sprintf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sprintf(s: Pchar; format: Pchar): longint; varargs; cdecl; external;
+//function iprintf(format: Pchar; args: array of const): longint; cdecl; external;
+function iprintf(format: Pchar): longint; varargs; cdecl; external;
+//function scanf(format: Pchar; args: array of const): longint; cdecl; external;
+function scanf(format: Pchar): longint; cdecl; varargs; external;
+//function sscanf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sscanf(s: Pchar; format: Pchar): longint; cdecl; varargs; external;
+function strcmp(s1: Pchar; s2: Pchar): longint; cdecl; external;
+function malloc(size: integer): pointer; cdecl; external;
+function realloc(ptr: pointer; size: integer): pointer; cdecl; external;
+procedure free(ptr: pointer); cdecl; external;
+function memcpy(dest: pointer; src: pointer; n: integer): pointer; cdecl; external;
+function gmtime(timer: ptime_t): ptm; cdecl; external;
+function time(timer: ptime_t): time_t; cdecl; external;
+ TSort = function (const a, b: pointer): integer;
+procedure qsort(__base: pointer; __nmemb: integer; __size: integer; __compar: TSort); cdecl; external;
+ _FILE = record
+ firstCluster: longword;
+ length: longword;
+ curPos: longword;
+ curClus: longword; // Current cluster to read from
+ curSect: integer; // Current sector within cluster
+ curByte: integer; // Current byte within sector
+ readBuffer: array [0..511] of byte; // Buffer used for unaligned reads
+ appClus: longword; // Cluster to append to
+ appSect: integer; // Sector within cluster for appending
+ appByte: integer; // Byte within sector for appending
+ read: boolean; // Can read from file
+ write: boolean; // Can write to file
+ append: boolean; // Can append to file
+ inUse: boolean; // This file is open
+ dirEntSector: longword; // The sector where the directory entry is stored
+ dirEntOffset: integer; // The offset within the directory sector
+ P_FILE = ^_FILE;
+const
+ SEEK_SET = 0;
+ SEEK_CUR = 1;
+ SEEK_END = 2;
+(*
+ ------------------------------------------------------------------------------
+ Directory iterator for mantaining state between dir* calls
+*)
+ DIR_ITER = record
+ device: longint;
+ dirStruct: pointer;
+ PDIR_ITER = ^DIR_ITER;
+ stat = packed record
+ st_dev: longint;
+ st_ino: longword;
+ st_mode : longword;
+ st_nlink : word;
+ st_uid : word;
+ st_gid : word;
+ st_rdev : longint;
+ st_size : longint;
+ st_atime : longint;
+ st_spare1: longint;
+ st_mtime: longint;
+ st_spare2: longint;
+ st_ctime: longint;
+ st_spare3: longint;
+ st_blksize: longint;
+ st_blocks: longint;
+ st_spare4: array [0..1] of longint;
+ TStat = stat;
+ PStat = ^stat;
+ _IFMT = 0170000; // type of file
+ _IFDIR = 0040000; // directory
+ _IFCHR = 0020000; // character special
+ _IFBLK = 0060000; // block special
+ _IFREG = 0100000; // regular
+ _IFLNK = 0120000; // symbolic link
+ _IFSOCK = 0140000; // socket
+ _IFIFO = 0010000; // fifo
+ S_BLKSIZE = 1024; // size of a block
+ S_ISUID = 0004000; // set user id on execution
+ S_ISGID = 0002000; // set group id on execution
+ NAME_MAX = 767;
+ dirent = record
+ d_ino: longint;
+ d_name: array [0..NAME_MAX] of char;
+ PDirent = ^dirent;
+ PPDirent = ^PDirent;
+ DIR = record
+ position: longint;
+ dirData: PDIR_ITER;
+ fileData: dirent;
+ PDIR = ^DIR;
+(* DIR handling *)
+function closedir(dirp: PDIR): longint; cdecl; external;
+function opendir(const dirname: pchar): PDIR; cdecl; external;
+function readdir(dirp: PDIR): PDirent; cdecl; external;
+function readdir_r(dirp: PDIR; entry: PDirent; result: PPDirent): longint; cdecl; external;
+procedure rewinddir(dirp: PDIR); cdecl; external;
+procedure seekdir(dirp: PDIR; loc: longint); cdecl; external;
+function telldir(dirp: PDIR): longint; cdecl; external;
+function diropen(const path: pchar): PDIR_ITER; cdecl; external;
+function dirreset(dirState: PDIR_ITER): longint; cdecl; external;
+function dirnext(dirState: PDIR_ITER; filename: pchar; filestat: Pstat): longint; cdecl; external;
+function dirclose(dirState: PDIR_ITER): longint; cdecl; external;
+(* File handling *)
+function fopen(filename: Pchar; modes: Pchar): P_FILE; cdecl; external;
+function fread(ptr: pointer; size: longint; n: longint; stream: P_FILE): longint; cdecl; external;
+function fread(var ptr; size: longint; n: longint; var stream: _FILE): longint; cdecl; external;
+function fwrite(ptr: pointer; size: longint; n: longint; s: P_FILE): longint; cdecl; external;
+function fwrite(var ptr; size: longint; n: longint; var s: _FILE): longint; cdecl; external;
+function ftell(stream: P_FILE): longint; cdecl; external;
+function ftell(var stream: _FILE): longint; cdecl; external;
+function fseek(stream: P_FILE; off: longint; whence: longint): longint; cdecl; external;
+function fseek(var stream: _FILE; off: longint; whence: longint): longint; cdecl; external;
+function fclose(stream: P_FILE): longint; cdecl; external;
+function fclose(var stream: _FILE): longint; cdecl; external;
+function isatty(fildes: longint): longint; cdecl; external;
+function fileno(para1: P_FILE): longint; cdecl; external;
+function fileno(var para1: _FILE): longint; cdecl; external;
+function fstat(fildes: longint; buf: PStat): longint; cdecl; external;
+function fstat(fildes: longint; var buf: TStat): longint; cdecl; external;
+function _stat(__file:Pchar; var __buf:Tstat):longint; cdecl; external name 'stat';
+function ftruncate(fildes: longint; len: longint): longint; cdecl; external;
+function unlink(path: Pchar): longint; cdecl; external;
+function rename(para1: Pchar; para2: Pchar): longint; cdecl; external;
@@ -35,4 +35,3 @@ procedure AssignDevice(const FIOD: TFileIODevice);
FileIODevice := FIOD;
@@ -14,70 +14,19 @@
*****************************************************************************}
-(*
- TStat = packed record
- st_dev: qword;
- __pad1: word;
- __align_pad1: word;
- st_ino: dword;
- st_mode : dword;
- st_nlink : dword;
- st_uid : dword;
- st_gid : dword;
- st_rdev : qword;
- __pad2 : word;
- __align_pad2 : word;
- st_size : longint;
- st_blksize : longint;
- st_blocks : longint;
- st_atime : longint;
- __unused1 : dword;
- st_mtime : longint;
- __unused2 : dword;
- st_ctime : longint;
- __unused3 : dword;
- __unused4 : dword;
- __unused5 : dword;
- PStat = ^TStat;
-*)
- (* libc file handling types and routines *)
- _FILE = record
- firstCluster: longword;
- length: longword;
- curPos: longword;
- curClus: longword; // Current cluster to read from
- curSect: integer; // Current sector within cluster
- curByte: integer; // Current byte within sector
- readBuffer: array [0..511] of byte; // Buffer used for unaligned reads
- appClus: longword; // Cluster to append to
- appSect: integer; // Sector within cluster for appending
- appByte: integer; // Byte within sector for appending
- read: boolean; // Can read from file
- write: boolean; // Can write to file
- append: boolean; // Can append to file
- inUse: boolean; // This file is open
- dirEntSector: longword; // The sector where the directory entry is stored
- dirEntOffset: integer; // The offset within the directory sector
- P_FILE = ^_FILE;
-type
- TDoOpen = procedure (var f; p: pchar; flags: longint);
- TDoClose = procedure (handle: THandle);
- TDoWrite = function (h: THandle; addr: pointer; len: longint): longint;
- TDoRead = function (h: THandle; addr: pointer; len: longint): longint;
- TDoSeek = procedure (handle: THandle; pos: longint);
- TDoSeekend = function (handle: THandle): longint;
- TDoErase = procedure (p: pchar);
- TDoRename = procedure (p1, p2: pchar);
- TDoFilepos = function (handle: THandle): longint;
- TDoFilesize = function (handle: THandle): longint;
- TDoTruncate = procedure (handle: THandle; pos: longint);
- TDoIsdevice = function (handle: THandle): boolean;
+ TDoOpen = procedure (var f; p: pchar; flags: longint);
+ TDoClose = procedure (handle: THandle);
+ TDoWrite = function (h: THandle; addr: pointer; len: longint): longint;
+ TDoRead = function (h: THandle; addr: pointer; len: longint): longint;
+ TDoSeek = procedure (handle: THandle; pos: longint);
+ TDoSeekend = function (handle: THandle): longint;
+ TDoErase = procedure (p: pchar);
+ TDoRename = procedure (p1, p2: pchar);
+ TDoFilepos = function (handle: THandle): longint;
+ TDoFilesize = function (handle: THandle): longint;
+ TDoTruncate = procedure (handle: THandle; pos: longint);
+ TDoIsdevice = function (handle: THandle): boolean;
TFileIO = packed record
DoOpen : TDoOpen;
@@ -95,7 +44,6 @@ type
PFileIO = ^TFileIO;
TDoMkdir = procedure (const s: string);
TDoRmdir = procedure (const s: string);
TDoChdir = procedure (const s: string);
@@ -122,10 +70,8 @@ function IsARM9(): boolean;
procedure AssignDevice(const FIOD: TFileIODevice);
- FileIODevice: TFileIODevice =
- (
- FileIO:
+ FileIODevice: TFileIODevice = (
+ FileIO: (
DoOpen: nil;
DoClose: nil;
DoWrite: nil;
@@ -138,14 +84,11 @@ var
DoFilesize: nil;
DoTruncate: nil;
DoIsdevice: nil;
- DirIO:
+ DirIO: (
DoMkdir: nil;
DoRmdir: nil;
DoChdir: nil;
DoGetdir: nil;
);
@@ -27,6 +27,7 @@ interface
{$i systemh.inc}
{$i ndsbiosh.inc}
{$i ndsh.inc}
+{$i libch.inc}
@@ -92,6 +93,7 @@ implementation
{$i system.inc}
{$i ndsbios.inc}
{$i nds.inc}
+{$i libc.inc}
@@ -182,8 +184,7 @@ begin
{ OS specific startup }
{ Set up signals handlers }
- if IsARM9 then
- fpc_cpucodeinit;
+ fpc_cpucodeinit;
{ Setup heap }
InitHeap;