Resetfeste RAM-DISK
TGM_96: RAMDISK.TXT
Johann WALZER, #328

Die Freude des Benutzers ber den schnellen Zugriff zu einer virtuellen Diskettenstation wird getrbt durch das Risiko eines Datenverlustes beim 'Absturz' des Rechners. Diesen Zustand kann im allgemeinen nur ein Kalt- oder Warmstart beenden. 

1. Hardware-Reset bzw. Kaltstart

1.1 Reset nach dem Einschalten (Power-Up)

In diesem Fall ist der RAM-Inhalt nicht definiert und ein Restaurieren von Daten daher nicht mehr mglich. 

1.2 Reset durch Resettaste

Bei vorhandenem Reset-Taster wird nicht nur der Prozessor rchgesetzt, sondern auch die Peripheriebausteine, wie Timer und DMA-Controller. Die dynamischen RAMs benoetigen aber alle 4 ms einen Auffrischungszyklus, der vom Timer 8253 ausgelst und vom DMA-Controller 8273 durchgefuehrt wird. Das heit, fr dynamische RAMs fallen die Auffrischungszyklen aus, und sie verlieren damit ihren Inhalt. eine Abhilfe wre durch die Verwendung eines Monoflops mglich, um die Resetzeit zu verkrzen, aber auch diese Methode fhrt nicht zum Ziel (siehe Pkt.2, Test der Speichergre).

2. Software-Reset bzw. Warmstart

Wird durch die Tastenkombination CTRL-ALT-DEL ein Software-Reset eingeleitet, so merkt sich der Prozessor diesen Umstand durch ein Flag (RESET_FLAG auf Adresse 0000:0472). Auf diese Adresse wird 1234H geschreiben, ein Inhalt, der beim normalen Einschalten des PC's sicher nicht vorkommt. Dann verzweigt das Programm auf die gleiche Einsprungstelle (Label: START_1), wie beim Hardware-Reset. Die Peripherie-Bausteine werden nicht zurckgesetzt, d.h. das Auffrischen der RAMS luft normal weiter. 

Der Prozessor fhrt anschlieend einen Selbst-Test durch und initialisiert die Peripherie-Bausteine neu (kurze Unterbrechung des Auffrisch-Zyklus). Ist das RESET_FLAG gesetzt (d.h. Inhalt gleich 1234H), so wird zwar kein Speichertest durchgefhrt, aber danach wird die Speichergre getestet:

Diese Routine prft in 64k Schritten, ob ein Speicher vorhanden ist (von 64k bis 640k auf dem Motherboard und bei ATs zustzlich von 1M bis 16M-128k extended memory). Und in dieser Routine passierts!!! Es wird nach jedem Test der komplette 64k Block mit Nullen gefuellt und damit der vorige Inhalt zerstrt. 

3.Welche Mglichkeiten gibt es nun, das Zerstren des Speicher-Inhalts zu vermeiden?

3.1 Man ndert die entsprechenden Stellen im BIOS-EPROM. Vermutlich handelt man sich dabei wieder andere Schwierigkeiten ein, und besonders elegant ist es auch nicht. 

3.2 Man verwendet ein residentes Programm /1/, das sich in die Tastatur-Routine einhngt und auf eine neue, halsbrecherische Tasten-Kombination wartet. Wird diese Kombination erkannt, so wird das momentan laufende Programm abgebrochen und in das Betriebssystem zurckgekehrt. Es gibt aber Einschrnkungen, unter denen dieses Programm nicht funktioniert (z.B.: Interrupts gesperrt, Vektoren verbogen...). Es sollte allerdings meistens funktionieren. 

3.3 Gegen gesperrte Interrupts gibt's noch die Mglichkeit, den NMI-Eingang (Non-maskable-Interrupt) zu verwenden; das erfordert aber einen zustzlichen kleinen Hardware-Eingriff. 

Kann das laufende, aber abgestrzte Programm mit der oben beschriebenen Methode abgebrochen werden, so ist auch der Inhalt der RAM-Disk noch intakt! Hat man gerade in Turbo-Pascal gearbeitet, so kann man mit dem Debugger noch den vorhandenen Source-Code retten (ein bichen mhsam zwar, aber es ist zumindest mglich).

/1/ Ralf Preller, Notausstieg, c't, 88/1, S 120..122.

