*---------------------------------------------------------------------* | | | Ramdisksystem mit Ausfhrungsprofil als Betriebssystemerweiterung | | V 1.2 | | | | Spaghetti-Fan-Club Nrnberg 3.10.1987 | | | *---------------------------------------------------------------------* * AUTO-Ordner * Gr”že im KB-Abstand w„hlbar: minimal 32KB maximal so grož, daž 128KB brigbleiben * mit und ohne Ausfhrungsprofil-Erweiterung * Bestimmung der vorhandenen Speichergr”že (512KB, 1024KB, ....) und des fr die RAM-Disk verfgbaren Speicherplatzes * RAM-Disk bersteht Reset (Endlosschleife!) und einige Systemabstrze. Ein durch fehlerhafte Programme zerst”rter Ramdisktreiber wird beim Booten (AUTO-Ordner) erkannt (Beseitigung nur durch Neustart m”glich). * Information ber die Gr”že der RAM-Disk wird in der Programmdatei festgehalten und bersteht damit auch das Ausschalten des Rechners. Allerdings sind damit Žnderungen der Ramdisk nur mit nicht schreibgeschtzter Bootdiskette m”glich. V1.2 NEU * Das RAM-Disk-Programm bernimmt die Einhaltung der Floppy-Hochlaufzeiten. Diskettenoperationen werden dadurch um einiges schneller. (nur, wenn mit Ausfhrungsprofil installiert) * Einstellung von Datum und Zeit bei Installation der RAM-Disk aus dem AUTO-Ordner * Ausfhrliche Angabe der letzten zu Bomben fhren- den Situation: Ausnahmeart und bei Busfehler und ungerader Wortadresse die Zugriffsart in Klartext, alle Registerinhalte mit Angabe des Registers. * - - - - - - - - Das Ramdisksystem besteht aus den Programmen * rdmodif.tos (beliebig auf der Bootdiskette, vorzugsweise im Hauptordner) Dieses Programm wird zu jeder Žnderung der Ramdiskgr”že und zum Zu- und Wegschalten des Ausfhrungsprofils aufgerufen. Es zeigt alle Eingabem”glichkeiten an. Bei einer Žnderung erfolgt Neustart des Betriebssystems. * ramdisk.pr(g) (im AUTO-Ordner) Ramdisktreiber ohne Ausfhrungsprofil * profdisk.pr(g) (im AUTO-Ordner) Ramdisktreiber mit Ausfhrungsprofil Diese Programme haben die Form .prg im aktiven und .pr im inaktiven Zustand. * pdis.prg (beliebig) Demonstrations-Auswertungsprogramm fr Ausfhrungsprofil * prim.tos mit zugeh”rigem Quelltext prim.s Testprogramm fr Ausfhrungsprofil: Primzahlensuche im Bereich von 1 (wird statt 2 ausgegeben) bis 2^32-1. Nicht das "Sieb", aber dafr bis zu h”heren Zahlen verwendbar. Alle Programme funktionieren nur mit hoher oder mittlerer Bildschirmaufl”sung (80-Spalten-Anzeige). V1.2 NEU: ramdisk.prg, profdisk.prg und pdis.prg schalten bei Aufruf von niedriger Aufl”sung nach mittlerer Aufl”sung um. Bei Beendigung dieser Programme und bei Ausfhrung von Program- men aus pdis.prg heraus wird die ursprngliche Aufl”sung wiederhergestellt. Somit funktioniert das Ramdisksystem jetzt auch einigermažen gut auf einem Farbmonitor. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + ACHTUNG + + + + H”chstens ein Ramdisktreiber darf im aktiven Zustand + + vorliegen. + + Deshalb sollten Žnderungen der Programmnamen nur mit + + Hilfe des dafr vorgesehenen Programms rdmodif.tos + + vorgenommen werden. + + + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INSTALLATION UND BEDIENUNG * ramdisk.prg und profdisk.pr in den AUTO-Ordner der Boot- diskette kopieren * Schreibschutz der Bootdiskette entfernen rdmodif.tos aufrufen Gr”že der RAM-Disk w„hlen mit/ohne Ausfhrungsprofil festlegen Floppy-Hochlaufzeiten festlegen (fr Lesen und Schreiben getrennt) Danach erfolgt automatischer Neustart des Betriebssystems. Dabei wird der Buchstabe der RAM-Disk angezeigt. Anscheinend berschreibt das RAM-TOS vom 6.2.1986 unab- h„ngig von einer gltigen Speicherkonfiguration beim Bootvorgang das RAM bis hin zu Adresse $70000. Die Ein- richtung einer RAM-Disk mit mehr als 576KB (mit 1MB-System) ist deshalb noch nicht gelungen, denn der Neustart zerst”rt jedesmal den schon installierten Ramdisktreiber. * im Desktop neues Laufwerk "Buchstabe / RAMDISK" anmelden (Floppy anmelden..) und Einstellung auf der Bootdiskette abspeichern (Arbeit sichern..) oder Datei DESKTOP.INF in geeigneter Weise editieren. Bis zur n„chsten Žnderung wird bei jedem System-Neustart eine RAM-Disk dieser Beschaffenheit installiert. Die Ramdiskprogramme k”nnen nach Festlegung der Parameter auch einzeln eingesetzt werden, wenn eine Ver„nderung dieser Parameter nicht mehr notwendig ist. Die Verwendung dieser Programme auf anderen Rechnern mit unterschiedlicher Speicher- gr”že ist dann unm”glich (in einem solchen Fall mit rdmodif.tos neu einrichten). Bei Verwendung von Ramdiskprogrammen unterschiedlicher Gr”že auf verschiedenen Disketten, fremden reset-residenten Programmen usw. kann es zu einer entsprechenden Fehlermeldung mit Frage nach Reset kommen. Bei Antwort Ja werden die alten residenten Bereiche abgeschossen, bei Nein wird die RAM-Disk nicht installiert (evtl. dann mit der richtigen Diskette versuchen). Bei RAM-Disk mit Ausfhrungsprofil k”nnen Datum und Zeit einge- stellt werden (selbstverst„ndlich in deutscher Reihenfolge): Beendigung der Einstellung nach 6s ohne Tastendruck, durch JjYy, Funktions- oder Cursortaste. Leertaste oder gleich 1. Ziffer bei Žnderung des Datums, mit ohne Žnderung des Datums gleich zur Zeit. Eingabem”glichkeiten (statt "." jedes Sonderzeichen): Datum bleibt gleich, nur Zeit „ndern [x]x nur Tag [x]x.[x]x Tag und Monat [x]x.[x]x.xx ganzes Datum keine Žnderung der Zeit [x]x.xx Stunden und Minuten (Sekunden auf 00) [x]x.xx.xx Stunden, Minuten, Sekunden *---------------------------------------------------------------------* FLOPPY-HOCHLAUFZEITEN Diskettenlaufwerke brachen nach dem Einschalten des Motors eine bestimmte Zeit, um ihre Nenndrehzahl zu erreichen. Erst danach k”nnen Schreib- und Leseoperationen sicher durchgefhrt werden. Der im Atari ST eingesetzte Floppy-Controller bercksichtigt dies durch eine Wartezeit von fnf Indexpulsen (etwa eine Sekunde), wenn der Laufwerksmotor nicht eingeschaltet war. Fr moderne Diskettenlaufwerke reicht jedoch erheblich weniger Zeit zum Hoch- laufen des Motors aus (z.B. Panasonic JU363 0.5s), aužerdem braucht beim Lesen nicht unbedingt die angegebene Zeit gewartet zu werden, denn das TOS liest bei einem Fehler den Sektor ein zweites Mal. Lesefehler drften dabei selten sein, denn der FDC erkennt ein Sektoradrežfeld erst dann, wenn sich die Diskette schnell genug dreht. Bei Schreiboperationen muž jedoch im Interesse der Datensicherheit auf die Einhaltung der Hochlauf- zeiten geachtet werden. Um die Diskettenoperationen unter diesen Bedingungen zu beschleu- nigen, nimmt der Ramdisktreiber dem FDC das Abwarten der Hochlauf- zeit ab, in dem er, falls der Laufwerksmotor nicht schon l„uft, diesen einschaltet und anschliežend die vorgegebene Zeit (abh„ngig von Lesen/Schreiben) wartet. Die Standardwerte 0.1s (Lesen) und 0.5s (Schreiben) sollten fr die meisten 89mm-Diskettenlaufwerke geeignet sein. Bei mehrmonatigem Betrieb mit einem Panasonic JU363 gab es dabei noch keine Fehler bei Diskettenoperationen. Leider bedient sich das Desktop in einigen F„llen direkt in den Floppy-Routinen des BIOS, ohne ber die hdv-Adressen zu gehen. Diese Operationen (™ffnen von Ordnern im Desktop) bleiben natr- lich langsam. Zu dem Artikel "Starten statt warten" in c't 7/87, S 162: Was die auf IBM-Nachbauten k”nnen, k”nnen wir auf dem ST schon lange. *---------------------------------------------------------------------* AUSFšHRUNGPROFIL Bei dieser Betriebssystemerweiterung wird ein Bereich im 68000- Adrežraum ausgew„hlt und dieser (bei dieser Implementation) in 1024 gleich grože Unterbereiche aufgeteilt (der Bereich muž dann ein Vielfaches von 2KB an L„nge haben). Jedem Unterbereich wird eine Z„hlvariable (unsigned) zugeordnet. Nach Aktivierung des Ausfhrungsprofils wird 200-mal pro Sekunde (mit einem im Atari-ST vorhandenen Interrupt) der aktuelle Stand des Programmzeigers bestimmt und dann, wenn er in den Bereich f„llt, die Z„hlvariable des entsprechenden Unterbereichs inkrementiert. Durch Auslesen der Z„hlvariablen kann ermittelt werden, im welchem Teil von Programmen ein grožer Teil der Rechenzeit verbraucht wird (vielleicht sind noch optimierbare kurze Schleifen darunter). UNIX-Erfahrene kennen etwas „hnliches mit der Option -p des C-Compilers und dem Kommando prof (a.out) Nachteile dieser Implementation gegenber UNIX: * Datenstruktur der Z„hlvariablen nur einmal vorhanden (eben kein Mehrprogrammbetriebssystem) * Keine Angabe von Prozedurnamen (k”nnte noch hinzugefgt werden bei Programmen mit Symboltabelle) Vorteile gegenber UNIX: * H”here Aufl”sung (200 Takte/Sekunde statt 50..100 Takte/Sekunde) * Wahl des Bereiches auch im Betriebssystem m”glich. (dort gibt es noch so einige M”glichkeiten zum Auffrisieren, und im Gegensatz zu Mofas und Mopeds st”rt hier keine Polizei!) V1.2 NEU: * Zus„tzlich zur statistischen Interruptmethode gibt es nun auch das Einzelschrittprofil. Dabei wird fr jeden zwischen Start- und Stop-Aufruf im Bereich ausgefhrten Programmschritt die seiner Adresse entsprechende Variable hochgez„hlt. * Die Datenstruktur des Ausfhrungsprofils bleibt vollst„ndig ber einen Reset hinaus erhalten und wird somit eine im Profilbereich liegende Endlosschleife zuverl„ssig anzeigen. * - - - - - - - - Die Datenstruktur des Ausfhrungsprofils in Assembler: (Offset gegenber getpad-Rckgabewert) tcount = 0 * Gesamtzahl der 200Hz-Impulse * bzw. Programmschritte, * w„hrend das Profil lief * ACHTUNG: * Žnderung (Verbesserung) in V1.2! startad = 4 * Anfangsadresse des Profilbereiches pscale = 8 * Skalierungsfaktor fr Profil: * 1 -> eine Z„hlvariable pro 2 Byte * (Bereichsl„nge 2KB) * * 2 -> eine Z„hlvariable pro 4 Byte * * (Bereichsl„nge 4KB) .... ptab = 10 * Tabelle der Z„hlvariablen * (1024 16bit-Eintr„ge) in C: struct profil { unsigned long tcount; long startad; /* eigentlich Pointer auf Funktion */ unsigned scale; unsigned ptab[1024]; } .... ; Die Systemaufrufe des Ausfhrungsprofils: pinit = $90020 pstart = $90021 pstop = $90022 getpad = $90023 bios = 13 V1.2 NEU: pstatus = $90024 tpstart = $90025 ........................................................ pinit -- Initialisierung des Ausfhrungsprofils Argumente: newaddr (.l) Anfangsadresse des neuen Profilbereiches newscale (.w) neuer Skalierungsfaktor Der Profilbereiches geht somit von newaddr bis newaddr + 1024 * newscale Funktion: Das Ausfhrungsprofil wird, falls es l„uft, angehalten. Die Z„hlvariablen werden mit 0 besetzt und der neue Profilbereich in der Datenstruktur gesetzt. Aufruf in Assembler: move.w #newscale,-(A7) ; oder andere Quelladressierungsart pea newaddr move.l #pinit,-(A7) trap #bios adda.w #10,A7 in C: #define pinit(newaddr, newscale) bios(0x90020L, newaddr, newscale) Rckgabewert in D0: 0 normale Ausfhrung -1 Skalierungsfaktor 0: nicht erlaubt. -2 Vektor des 200Hz-Interrupts oder Trace-Vektor wurde nach pstart bzw. tpstart von einem anderen Programm ver„ndert: Keine Profil- operationen mehr m”glich, sonst Chaos ... <-2 Ausfhrungsprofil nicht installiert .......................................................... pstart -- Ausfhrungsprofil laufen lassen (statistische Methode mit regelm„žigem Interrupt) Aufruf in Assembler: move.l #pstart,-(A7) trap #bios addq.l #4,A7 in C: #define pstart() bios(0x90021L) Rckgabewert in D0: 0 Ausfhrungsprofil gestartet -1 Ausfhrungsprofil lief schon, Skalierungsfaktor = 0 oder Interrupt-/Tracevektor ver„ndert <-1 Ausfhrungsprofil nicht installiert .......................................................... pstop -- Ausfhrungsprofil anhalten (Interrupt oder Einzelschritt) Aufruf in Assembler: move.l #pstop,-(A7) trap #bios addq.l #4,A7 in C: #define pstop() bios(0x90022L) Rckgabewert in D0: 0 Ausfhrungsprofil angehalten -1 Ausfhrungsprofil lief nicht oder Interruptvektor ver„ndert <-1 Ausfhrungsprofil nicht installiert .......................................................... getpad -- Adresse der Profildatenstruktur ermitteln Aufruf in Assembler: move.l #getpad,-(A7) trap #bios addq.l #4,A7 in C: #define getpad() bios(0x90022L) ... ... = (struct profil *)getpad(); Rckgabewert in D0: Adresse der Profildatenstruktur (falls Profil installiert). Auf die einzelnen Variablen wird mit obigen Offsets zugegriffen, z.B. move.l D0,A0 move.l (A0),... ; tcount move.l startad(A0),.. move.w #100,D0 ; oder andere Quelladressierungsart lsl.w #1,D0 ; .w-Index move.w ptab(A0,D0.w),. ; Z„hlvariable 100 (beginnend mit 0) .......................................................... V1.2 NEU: .......................................................... pstatus -- Abfrage: Profil l„uft/l„uft nicht Aufruf in Assembler: move.l #pstatus,-(A7) trap #bios addq.l #4,A7 in C: #define getpad() bios(0x90024L) Rckgabewert in D0.l: == 0 , falls Ausfhrungsprofil nicht l„uft != 0 , falls Ausfhrungsprofil l„uft .......................................................... tpstart -- Ausfhrungsprofil laufen lassen (Einzelschrittz„hlung) Aufruf in Assembler: move.l #tpstart,-(A7) trap #bios addq.l #4,A7 in C: #define tpstart() bios(0x90025L) Rckgabewert in D0: 0 Ausfhrungsprofil gestartet -1 Ausfhrungsprofil lief schon, Skalierungsfaktor = 0 oder Interrupt-/Tracevektor ver„ndert -2 ungeeignete Version von TOS: Bei Einzelschrittz„hlung muž dem trap #bios aufrufenden Programm das Trace-Bit im Status- register gesetzt werden. Dies geht nur ber den von TOS an undokumentierter Stelle abgelegten Wert. Bei Installation der RAM-Disk wird ber- prft, ob das Statusregister an der vorgesehenen Stelle (bezglich der in der dokumentierten Systemvariablen $4a2 abgelegten Adresse) steht. Alle bisherigen TOS-Versionen (ROM und Diskette) sind jedoch geeignet. <-1 Ausfhrungsprofil nicht installiert Die Einzelschrittz„hluung verlangsamt ein Programm erheb- lich und ist daher besonders zur genauen Untersuchung einzelner Programmteile geeignet. Aužerden kann es durch die Verwendung des Trace-Vektors zu Unvertr„glichkeiten mit Debuggern kommen. Zwischen tpstart und pstop (nach Breakpoint oder Tastaturunterbrechung) mit dem Debugger auf Einzelschrittbetrieb umzuschalten, ist eine sichere Methode, einen Systemabsturz herbeizufhren oder wenig- stens das Ausfhrungsprofil bis zum n„chsten Reset lahm- zulegen. Normaler Programmablauf zwischen tpstart und pstop sollte jedoch auch mit einem geladenen Debugger funktionieren. *---------------------------------------------------------------------* | | | pdis.prg -- Auswertungsprogramm fr Ausfhrungsprofil | | | *---------------------------------------------------------------------* pdis.prg ist ein einfaches Programm zur Inbetriebnahme des Ausfhrungsprofils, zur Ausfhrung von Anwenderprogrammen mit Profil und zur Anzeige (als Text und graphisch) der erhaltenen Informationen. Die einzelnen Funktionen werden mit Hilfe der Funktionstasten angew„hlt. F1 Init Aufruf von pinit anzugeben ist die Startadresse des Profilbereiches und die minimale Endadresse des Bereiches. Der Skalierungsfaktor fr pinit wird unter dieser Bedingung minimal gew„hlt und der entstandene Profilbereich angegeben. F2 Start Aufruf von pstart Erfolg bzw. Mižerfolg wird angezeigt F3 Stop Aufruf von pstop Erfolg bzw. Mižerfolg wird angezeigt F4 Txtanz. Ausgabe der Profilinformationen als Text auf dem Bildschirm: Profilbereich Gesamtzahl der 200Hz-Takte bzw. Programmschritte, w„hrend Profil lief Anzahl der davon in den Bereich gefallenen Takte bzw. Programmschritte Meldung, falls Profil l„uft alle Z„hlvariablen ungleich 0 mit Angabe der Start- adresse des dazugeh”rigen Unterbereiches F5 Graphik Dasselbe als S„ulendiagramm (V1.2 auch Farbmonitor) Der angezeigte Ausschnitt kann mit Hilfe der Cursortasten ver„ndert werden. F6 EProfil Ausfhrung eines Anwenderprogramms mit Einstellung des Ausfhrungsprofils. Nur zu verwenden bei Programmen ohne eigene bios-Profil-Aufrufe. Einzugeben sind: Pfadname des Programms Argumentstring Profilbereich bezglich Startadresse des Programms F7 Exec. Ausfhrung eines Anwenderprogramms, vorzugsweise nach Einstellung von Init und Start oder bei Programmen mit bios-Profil-Aufrufen F8 Datei Die wichtigsten Dateioperationen (weitere Funktionstaste): Der Pfadname der Datei muž angegeben werden. ACHTUNG: Eine Datei gleichen Namens geht bei F1 und F3 verloren!! F1 absp. Profildatenstruktur in eine Bin„rdatei zur sp„teren Auswertung abspeichern. F2 laden Profildatenstruktur wird von einer Bin„rdatei geladen. F3 Textd. Textdatei mit allen Angaben aus der Profildaten- struktur und Systemdatum und -zeit in mehrspal- tigem Format zum Ausdrucken und Editieren erzeugen. F10 ENDE Beenden von pdis.prg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Das Ramdisksystem ist Public Domain und darf in seinem vollst„ndigen Zustand mit allen Programmen und Beschreibungen beliebig weitergegeben werden. Quelltexte (in 68000-Assembler, Schlabber-Lechz!), neuere Versionen und neuere andere Programme sind erh„ltlich bei +-----------------------+ | Wolfgang Windsheimer | | Johannisstraže 62 | | 8500 Nrnberg 90 | +-----------------------+ unter folgenden Bedingungen: + ein ausreichend frankierter Briefumschlag mit formatierter Diskette (einseitig oder zweiseitig, aber max. 81 Spuren, Panasonic JU363 schafft nicht mehr) + ein Aufkleber mit eigener Adresse und ausreichendem Rck- porto (fr einfache Bearbeitung) + 20.- DM als Unkostenbeitrag und Anerkennung fr das Ramdisksystem ______________________________________________________________________ Verwendete Literatur: Brckmann, Englisch, Gerits/ ATARI ST intern (Data Becker) c't 11/86 (Heise Verlag)