@node Der Speicher-Monitor
@chapter Der Speicher-Monitor
@cindex Der Speicher-Monitor

   Ab Version 1.3 gibt es die Möglichkeit, den Speicher ab einer gewählten
Adresse anzusehen, den @code{Monitor}. Dieser erscheint immer dann, wenn
ein Objekt mit einer Adresse geklickt wurde und dieses nicht modifiziert
werden kann. In Version 1.2 wurde an dieser Stelle nur kurz
@code{gebeept}.

   Ich habe eine Speicherliste eingebaut, deren Aufbau ich der
Dokumentation zum Programm @file{Enforcer} entnommen habe. Bevor der
Monitor erscheint, wird eine Adreßüberprüfung vorgenommen, ob die
gewünschte Adresse überhaupt zulässig ist. Ist sie es nicht, erscheint ein
Systemrequester mit allen erkennbaren Attributen des anvisierten
Speicherbereichs. Das Auslesen eines unzulässigen Speicherbereiches kann
zu einem @file{Enforcer}-Hit führen, wenn dieser ausgelesen wird.

   Das Monitorfenster besteht aus einem Anzeige-ListView und mehreren
Gadgets.

@ifinfo
@menu
* Das Entry-Gadget::
* Das Start-Gadget::
* Das Current-Gadget::
* Das Display-Gadget::
* Das Speicher-ListView und der Header::
* Die Speicherbereichs-Gadgets::
* Die Save-Gadgets::
@end menu
@end ifinfo

@c ---------------------------------------------
@ifinfo
@node Das Entry-Gadget
@unnumberedsec Das Entry-Gadget
@end ifinfo
@cindex Das Entry-Gadget

@deffn Text-Gadget {Entry} {}
In diesem Gadget erscheint zur Information noch einmal die Zeile im
Haupt-Listview von @file{@sc{RSys}}. Dahinter in @code{[]} der Typ des
Speichers, wie er aus der implementierten @file{Enforcer}-Liste der
Speicherbereiche ausgelesen wurde.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Das Start-Gadget
@unnumberedsec Das Start-Gadget
@end ifinfo
@cindex Das Start-Gadget

@deffn Text-Gadget {Start} {}
Hier steht die Startadresse, ab der der Speicher angezeigt wird.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Das Current-Gadget
@unnumberedsec Das Current-Gadget
@cindex Das Current-Gadget
@end ifinfo

@deffn Gadget {Current} {}
Hier steht die aktuelle Adresse, ab der der Speicher angezeigt wird. Der
Speicher wird in 512-Byte-Blöcken angezeigt.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Das Display-Gadget
@unnumberedsec Das Display-Gadget
@end ifinfo
@cindex Das Display-Gadget

@deffn Cycle-Gadget {Hex/ASCII-Hex-ASCII} {}
Hiermit kann die Art der Anzeige ausgewählt werden.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Das Speicher-ListView und der Header
@unnumberedsec Das Speicher-ListView und der Header
@end ifinfo
@cindex Das Speicher-ListView und der Header

@deffn Gadget {Speicher-ListView/Header} {}
Hier steht formatiert der aktuell formatierte Speicherinhalt. Der Speicher
wird in 512-Byte-Blöcken angezeigt.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Die Speicherbereichs-Gadgets
@unnumberedsec Die Speicherbereichs-Gadgets
@end ifinfo
@cindex Die Speicherbereichs-Gadgets

@deffn Gadget {<<< Prev 512 Byte} {}
@deffnx Gadget {To start address} {}
@deffnx Gadget {>>> Next 512 Byte} {}
Mit diesen Gadgets kann der Speicherbereich aktualisiert werden. Das erste
Gadget zeigt den vorhergehenden, das dritte den nachfolgenden und das
zweite den Startbereich des Speichers an.
@end deffn

@c ---------------------------------------------
@ifinfo
@node Die Save-Gadgets
@unnumberedsec Die Save-Gadgets
@end ifinfo
@cindex Die Save-Gadgets

@deffn Gadget {Save C-Code} {}
@deffnx Gadget {Save ASCII} {}
@deffnx Gadget {Save Hex} {}
@deffnx Gadget {Save as is} {}
Mit diesen Gadgets kann der angezeigte Speicherbereich auf verschiedene
Arten in eine Datei gespeichert werden. Hier ein paar Beispiele:

@strong{Als C-Code:}
@example
/*
   RSys-C-Code Generator
   Memory at 0x00203672
*/

ULONG RSysData[] = @{
   0x00000000, 0x00000000, 0x000000F8, 0xF7C80020,
   0x362400F8, 0xF7740000, 0x00000000, 0x00000000,
   0x00F8F7C8, 0x00203624, 0x00F8F78A, 0x00000000,
   0x00000000, 0x000000F8, 0xF7C80020, 0x362400F8,
   0xF7A0002E, 0x4FBC4EF9, 0x00FC775C, 0x4EF900FC,
   0x77340020, 0x63880020, 0x36240800, 0x00FC76D6,
   0x0600000C, 0x00320025, 0x00010000, 0x00000000,
   0x00000000, 0x0033CE18, 0x0033CE18, 0x00000000,
   0x00000000, 0x00000000, 0x4EF900FA, 0x3FE24EF9,
   0x00FA3DCE, 0x4EF900FA, 0x15DA4EF9, 0x00FA4036,
   0x4EF9002E, 0x8E0C4EF9, 0x00FA15A8, 0x4EF900FA,
   0x14604EF9, 0x00FA1258, 0x4EF900FA, 0x14B24EF9,
   0x00FA12AA, 0x4EF900FA, 0x3D384EF9, 0x002E8DD4,
   0x4EF9002E, 0x8DEA4EF9, 0x00FB3BAC, 0x4EF900FB,
   0x3BC24EF9, 0x002E8E1C, 0x4EF9002E, 0x8E344EF9,
   0x00FA124A, 0x4EF9002E, 0x8DF44EF9, 0x00FA122C,
   0x4EF900FA, 0x6B8C4EF9, 0x00FA429E, 0x4EF900FA,
   0x41624EF9, 0x00FA53A0, 0x4EF900FA, 0x4F784EF9,
   0x00FA6B98, 0x4EF900FA, 0x6B804EF9, 0x00FA6B74,
   0x4EF900FA, 0x114C4EF9, 0x00FA1848, 0x4EF900FA,
   0x18484EF9, 0x00FA0E70, 0x4EF900FA, 0x10884EF9,
   0x00FA2D7C, 0x4EF900FA, 0x2D0E4EF9, 0x00FA2C90,
   0x4EF900FA, 0x0E584EF9, 0x00FA32CA, 0x4EF900FA,
   0x68F84EF9, 0x00FA0BD0, 0x4EF900FA, 0x0BB84EF9,
   0x00FA0B7C, 0x4EF900FA, 0x0ADE4EF9, 0x00FA0ABC,
   0x4EF900FA, 0x306E4EF9, 0x00FA0E40, 0x4EF900FA,
   0x096C4EF9, 0x00FA095C, 0x4EF900FA, 0x2E0A4EF9,
   0x00FA2E26, 0x4EF900FA, 0x2CDC4EF9, 0x00FA2D5A,
   0x4EF900FA, 0x2BC04EF9, 0x00FA2AC2, 0x4EF900FA,
   0x07FC4EF9, 0x00FA07DC, 0x4EF900FA, 0x3C1E4EF9,
   0x00FA3BF4, 0x4EF900FA, 0x3C884EF9, 0x00FA03D0,
   0x4EF900FA, 0x0A084EF9, 0x00FA097C, 0x4EF900FA,
@};
/* End of Code */
@end example

@strong{Als Hex:}
@example
----------------------------------------------
Memory at 0x00203672
----------------------------------------------

000: 00 00 00 00 00 00 00 00 00 00 00 F8 F7 C8 00 20
010: 36 24 00 F8 F7 74 00 00 00 00 00 00 00 00 00 00
020: 00 F8 F7 C8 00 20 36 24 00 F8 F7 8A 00 00 00 00
030: 00 00 00 00 00 00 00 F8 F7 C8 00 20 36 24 00 F8
040: F7 A0 00 2E 4F BC 4E F9 00 FC 77 5C 4E F9 00 FC
050: 77 34 00 20 63 88 00 20 36 24 08 00 00 FC 76 D6
060: 06 00 00 0C 00 32 00 25 00 01 00 00 00 00 00 00
070: 00 00 00 00 00 33 CE 18 00 33 CE 18 00 00 00 00
080: 00 00 00 00 00 00 00 00 4E F9 00 FA 3F E2 4E F9
090: 00 FA 3D CE 4E F9 00 FA 15 DA 4E F9 00 FA 40 36
0A0: 4E F9 00 2E 8E 0C 4E F9 00 FA 15 A8 4E F9 00 FA
0B0: 14 60 4E F9 00 FA 12 58 4E F9 00 FA 14 B2 4E F9
0C0: 00 FA 12 AA 4E F9 00 FA 3D 38 4E F9 00 2E 8D D4
0D0: 4E F9 00 2E 8D EA 4E F9 00 FB 3B AC 4E F9 00 FB
0E0: 3B C2 4E F9 00 2E 8E 1C 4E F9 00 2E 8E 34 4E F9
0F0: 00 FA 12 4A 4E F9 00 2E 8D F4 4E F9 00 FA 12 2C
100: 4E F9 00 FA 6B 8C 4E F9 00 FA 42 9E 4E F9 00 FA
110: 41 62 4E F9 00 FA 53 A0 4E F9 00 FA 4F 78 4E F9
120: 00 FA 6B 98 4E F9 00 FA 6B 80 4E F9 00 FA 6B 74
130: 4E F9 00 FA 11 4C 4E F9 00 FA 18 48 4E F9 00 FA
140: 18 48 4E F9 00 FA 0E 70 4E F9 00 FA 10 88 4E F9
150: 00 FA 2D 7C 4E F9 00 FA 2D 0E 4E F9 00 FA 2C 90
160: 4E F9 00 FA 0E 58 4E F9 00 FA 32 CA 4E F9 00 FA
170: 68 F8 4E F9 00 FA 0B D0 4E F9 00 FA 0B B8 4E F9
180: 00 FA 0B 7C 4E F9 00 FA 0A DE 4E F9 00 FA 0A BC
190: 4E F9 00 FA 30 6E 4E F9 00 FA 0E 40 4E F9 00 FA
1A0: 09 6C 4E F9 00 FA 09 5C 4E F9 00 FA 2E 0A 4E F9
1B0: 00 FA 2E 26 4E F9 00 FA 2C DC 4E F9 00 FA 2D 5A
1C0: 4E F9 00 FA 2B C0 4E F9 00 FA 2A C2 4E F9 00 FA
1D0: 07 FC 4E F9 00 FA 07 DC 4E F9 00 FA 3C 1E 4E F9
1E0: 00 FA 3B F4 4E F9 00 FA 3C 88 4E F9 00 FA 03 D0
1F0: 4E F9 00 FA 0A 08 4E F9 00 FA 09 7C 4E F9 00 FA
@end example

   Der C-Code kann unmittelbar in C-Programmen eingebunden werden.
@end deffn
