Hardware Reference
In-Depth Information
subtype
tAdr
is
tUnsigned(...
downto
0
);
constant
ROM: tMem:=Anfangswert;
Der Speicherinhalt ist der Anfangswert. Für einen kleinen Speicher können
die Anfangswerte mit einer Zuordnungsliste festgelegt werden:
constant
ROM: tMem:=(
0
=>
x"0f"
,
1
=>
x"c3"
,
2
=>
x"a4"
,
3
=>
x"12"
,
others
=>
x"00"
)
Für einen größeren Festwertspeicher ist eine Funktion, die den zu speichernden
Inhalt - z.B. das Programm für einen Prozessor - aus einer Datei liest und als
Anfangswert übergibt, wünschenswert. In dem nachfolgenden Beispiel geht es
wieder im Wesentlichen um das Thema Textverarbeitung.
Die Beispieltextdatei soll je Zeile eine beliebige Anzahl von Bytes enthal-
ten, dargestellt durch zwei Hexadezimalziffern, gefolgt von Leerzeichen, dem
Zeilenumbruch oder dem Dateiende:
AF 09 87 D4 2A 95 12 BC C4 3C D6 E3 EC 79 45 C5
DE AB 24 38 8D A6 B3 ...
In dem in Abschnitt 3.3.3 skizzierten Package »Tuc.Eingabe« ist ein Daten-
objekt für ein Leseband vereinbart, das mit der Funktion
procedure
read(
file
f:text; pstr: tPString)
mit einer Zeile aus einer Textdatei geladen und von dem mit Get-Prozeduren
Zeichenfolgen für unterschiedliche Datenobjekte abgeräumt werden können.
Für das Abräumen der zweistelligen Hexadezimalzahlen werden die Prozedur
procedure
get_char(pstr:
inout
tPString; pos:
out
natural;
CharTab:string);
die ein Zeichen aus einer Zeichentabelle »CharTab« abräumt und deren Ta-
bellenposition zurückgibt, und die Prozedur
procedure
skip(pstr:
inout
tPString; TrennzeichenTab:string);
die Trennzeichen abräumt, benötigt (siehe Anhang A.2.3). Daraus wird eine
Prozedur zum Abräumen von Bytes zusammengesetzt, die nach demselben
Schema wie die Abräumprozeduren für andere Datenobjekte aufgebaut ist:
constant
HexZiffern:string:=
"0123456789ABCDEF"
;
procedure
get_Byte(pstr:
inout
tPString; w:
out
tByte)
is
constant
ptr:positive:=pstr.pta;
variable
z0, z1:natural;
begin
skip(pstr,
" "
);
get_char(pstr, z1, HexZiffern);
if
pstr.Status=ok
then
get_char(pstr, z0, HexZiffern);
if
pstr.Status=ok
then