DIE DIRECTORYS DES USERS PRAM

In ~pram liegen verschiedene directorys, die den normalerweise unter
unix benutzten nachempfunden sind:
bin        die Programme, z.B. pgcc, prass, plink, ...
include    die .h-files fr C
lib        Hilfsdateien fr die Programme

DER COMPILER

Der pgcc sollte sich wie der normale installierte gcc verhalten mit
Ausnahme von:
- Es kommt PRAM-Code raus.
- Es gibt die folgenden maschinenspezifischen Optionen
    -mseparate-load-store
       Trennt load und store Befehle nach Modulobit. ldg bei mod=0,
       stg bei mod=1
    -mno-stack-check (Gegenteil: -mstack-check)
       Unterbindet Tests auf Stackoverflow. Fr User nicht zu empfehlen.
    -mno-stack-check-with-ret (Gegenteil: -mstack-check-with-ret)
       Dito fr Stackcheck mit Rcksprungmglichkeit
    -mos-stack (Gegenteil: -muser-stack)
       Schaltet von USP auf SSP
    -mno-underscores
       Unterbindet das Voranstellen eines '_' bei Funktions-
       und Variablennamen. Nicht fr Normalsterbliche.
    -mshared-name-                 # Konstanten (Strings)
    -mdata-name-                   # Initialisierte Variablen
    -mbss-name-                    # Uninitialisierte Variablen
    -mtext-name-                   # Das Programm selbst
       Direkt hinter dem letzten - kann man einen anderen Namen fr
       die entsprechende Section angeben. D.h. wenn man die Variablen
       in der .gsbss-Section haben mchte, gibt man -mbss-name-.gsbss
       an.
- Integer- und Float-Divisions-Routinen sind noch nicht vorhanden.
- Es existieren bisher nur die Includefiles
    stdarg.h      (fr variable Parameterlisten bei Funktionen)
    sbp/sbp_gop.h (Zur Einbindung von Multiprfix, etc. in C)
    sbp/sbp_multiproc.h (lock, barrier, parloop)

Als Anleitung zum gcc/pgcc ist das gcc Info-File (/usr/local/info/gcc.info)
recht gut zu gebrauchen. Man kann es mit dem 'emacs' lesen.
(emacs aufrufen, danach ESC "xinfo" CR tippen und jeweils die gewnschte
Zeile im menue anfahren, und mit CR besttigen. Mit "u" gehts wieder
eine Ebene zurck)
Es existiert am Lehrstuhl auch eine etwas ltere aber trotzdem ausreichend
aktuelle Version dieses Files als Ausdruck.
Speziell fr das Portieren von code auf die PRAM interessant ist die
Option -fvolatile.

Spezielle Eigenschaften des pgcc:
- Gre der Typen
    Alle einfachen Typen sind 32 Bit lang und liefern bei sizeof 1.
    Es wird spter vielleicht ein long long und ein double mit 64 Bit
    geben.
- Varargs-Funktionen
    Funktionen, die einen variable Anzahl von Parametern haben (z.B.
    printf, fprintf, ...) mssen einen ANSI-Prototypen haben. Sowohl
    beim Aufruf, wie auch bei der Definition. Daher wird nur stdarg.h
    und nicht varargs.h untersttzt. Ohne Prototypen wird falscher
    Code erzeugt. Fr die genannten library-Funktionen	reicht ein
    #include <stdio.h>.


WIE BERSETZE ICH EIN C-/ASSEMBLER-PROGRAMM?

Es empfiehlt sich ~pram/bin in den Pfad aufzunemen.

Man schreibt das Programm und nennt es z.B. 'foo.c' bzw. 'foo.S'.
Man achte bei Assembler-Programmen auf das groe S. Das kleine soll
compilererzeugtem Assemblercode vorbehalten bleiben.

Dann lege man ein 'Makefile' an, das folgende drei Zeilen enthlt:
include /home/pram/include/make/pram.mk
CFLAGS=-O2
CC=p4gcc

Da dies bewirkt, da make automatisch den p4gcc benutzt, sollte man
normale und PRAM-Sourcen voneinander getrennt aufbewahren.

Danach kann man mit 'make foo' das Objectcodefile foo erzeugen, welches
den bersetzten code enthlt. Das bedeutet fr ein C-Programm, da
nacheinander Prprozessor, Compiler, Assembler und Linker aufgerufen werden,
fr ein Assemblerprogramm der Prprozessor, Assembler und Linker.
'make foo.s' compiliert entsprechend foo.c in lesbaren Assemblercode,
fr den Fall, da man den vom Compiler erzeugten code begutachten will.

Um das Programm auf dem Simulator auszutesten kann man es nun mit
loader-sim foo
starten. Dieses script ruft nacheinander den loader (relozieren) und
den simulator auf. loader-sim hat einige Optionen, eine bersicht gibts
mit
loader-sim -help
Im Simulator kann man dann das Programm mit 'g' starten.
