PFN - PrepareFpcNasm file v1.0b2
================================


Dieses Tool ist dafr da, eine von FPC generirtes NASM-Datei so zu verndern, dass
man mit einem aufruf von "nasm -fbin [datei]" nacher ein flat-binary bekommt.
Dazu arbeitet PFN mit dem vom FPC generierten NASM Code, welcher im Normalfall
"EXTERN"s enthlt. Diese Zeigen auf Ressourcen, die auerhalb der momentanen Datei
liegen und welche beim linken der Datei mit einbezogen werden. Auerdem finden wir
"EXTERN" Aufrufe, die auf selbst geschriebene Prozeduren zeigen, welche allerdings
in units ausgelagert sind. Es gibt also zwei Arten von EXTERNs:
	1. EXTERNs, die auf Funktionen von FPC verweisen
	2. EXTERNs, die auf selbst geschriebene, in units ausgelagerte Funktionen
	   verweisen.
Die EXTERNs, die unter 1. fallen, wollen wir aus der Datei rausnehmen, um nicht
OS-spezifischen Code zu generieren. Die EXTERNs unter 2. werden allerdings bentigt.
PFN stellt diese bentigten EXTERNs automatisch fest und bindet sie automatisch aus
den anderen Dateien (den units) ein. Um diesen organg zu verstehen, hilft evtl. auch
ein Blick in eine NASM Datei, die von FPC generiert wurde und in die Datei, die PFN
daraus generiert.

Die zu lschenden EXTERN-Aufrufe werden nicht wirklich gelscht, sondern einfach mit
einem Rcksprung-Befehl ausgestattet, sodass, wenn diese Funktion aufgerufen werden
sollte, einfach zu der aufrufenden Stelle zurckgesprungen wird.


Der Parameter -b veranlasst, dass PFN die Zeile "BITS 32", welche bei mir eine
nicht-korrekte Ausfhrung der Datei zur Folge hatte, NICHT gelscht wird. Die Zeile
wird standardmig gelscht.

Der Parameter -e<entry> setzt einen anderen Einsprungspunkt der Datei. Standardmig
ist "PASCALMAIN", da das der Einsprungspunkt fr alle vom FPC generierten NASM Dateien
ist.

Mit -f<ext> kann man die Dateiendungen der Units ndern (-> -u). Im Normalfall sollte
FPC Dateien mit der Endung "s" (also z.B. "test.s") generieren. Diese Dateien 
enthalten dann den NASM-Source (-> FPC Parameter).

Mit dem -j Parameter ltz sich das Dazufgen des Sprunges zum Einstiegspunkt (-> -e)
unterbinden. Standardmig wird dieser Sprung eingefgt.

Der Parameter -o<file> spezifiziert die Ausgabedatei.

Da PFN eine temporre Datei bentigt, kann man den Standardnamen "pfn.tmp" mit dem
-t<file> Parameter ndern.

Falls die units, die bentigt werden, nicht im momentanen Ordner sind, kann der Pfad
per -u<path> angegeben werden.



ES MUSS DARAUF GEACHTET WERDEN, DASS KEINERLEI FUNKTIONEN VON FPC VERWENDET WERDEN,
da diese, wie am Anfang erklrt, EXTERNALs von der ersten Sorte generieren und
wir diese nicht haben wollen.




Wie bekomme ich die .s Dateien?
-------------------------------

Mit FPC! Rufe ppc386 (das ist der FPC Compiler) mit folgenden Parametern auf:

-a (dass die Assembler Datei, die wir bentigen nicht gelscht wird)
-Cr (schlatet das "Range checking" ein)
-Ci (I/O checking)
-s (Assembler und Linker nicht aufrufen!)
-Rintel (er soll Intel-style Assembler lesen)
-OG (schnelleren Code generieren)
-Op1 (Zielprozessor: 80386/80486)
-Anasmobj (er soll NASM Code ausgeben)

An einem Stck wre das dann:

ppc386 -a -Cr -Ci -s -Rintel -OG -Op1 -Anasmobj [datei die compiliert werden soll]

Dann sind .s Dateien verfgbar, die man durch PFN jagen kann bzw. jagt.

Danach kommt noch ein Aufruf von NASM:

nasm -fbin -o[ausgabedatei] [datei, die von PFN ausgegeben wurde]