Ralf Biedermann Ortfeld 3 W-2815 Langwedel Germany Dokumentation zum Cacheprogramm TCache: (Version 5.9) Žnderungen nur gegenber 5.5 NICHT gegenber 5.6!! ACHTUNG: Cookiefunktion 0816 hat sich ge„ndert !!!!!!!!!!! (RBInformation) 0828 hat sich ge„ndert !!!!!!!!!!! (RBHitmedia) 0822 hat sich ge„ndert !!!!!!!!!!! (RBDrvA) Inhalt: 0. Fr die Eiligen 1. Warnung 2. Copyright 3. Vertrieb 4. Installation 5. Allgemeines 6. Programminterna 7. Daten von TCache 8. Cachestrategien 9. TC_ACC59.ACC 10. TC_Lock.PRG 11. RC_Ram.PRG 12. Cookie-Funktionen 12.1 Aufruf in `C 13. Benchmarks 14. Tips und Tricks 15. Bekannte Probleme 16. Zus„tze 17. Schlužwort 0. Fr die Eiligen Unter diesem Punkt m”chte ich kurz erkl„ren, was es Neues gibt an TCache Version 5.9 gegenber den Vorg„ngern. Was hat sich bei der Version 5.9 gegenber der Version 5.8 ge„ndert ? - Um die gr”žte Sektorl„nge zu bestimmen werte ich die PUN_INFO-Struktur jetzt richtig aus (im Gegensatz zu Version 5.8) - Falls beim Schreiben mit 'delayed write' ein Fehler von Rwabs() gemeldet wurde strrzte Version 5.8 ab. Dieser Fehler ist behoben. Falls jetzt ein Fehler auftritt wird immer wieder versucht zu schreiben. Im Falle von defekten Disketten heižt es das die Lauf- werke nie wieder anhalten. D.h. TCache 5.9. bei zweifelhaften Medien nicht mit 'delayed write' (Schreiben verz”gern) betreiben. 1. WARNUNG Dieser Punkt sollte bei allen Programmen, die zu Datenverlust fh- ren k”nnten, als erster Punkt der Dokumentation stehen. Da diese These von mir stammt, werde ich mich daran halten. TCache ist ein Programm, das versucht die Zugriffe auf Speichermedien wie zum Beispiel Festplatten zu beschleunigen. Dies geschieht, indem Teile des Speichermediums tempor„r im RAM gehalten werden. Mein Programm TCache puffert Sektorzugriffe auf einzelne Sektoren. Dies bedeutet, daá haupts„chlich Zugriffe auf die FAT und das DIRECTORY gepuffert werden. Unglcklicherweise sind diese beiden Strukturen auch die empfindlichsten eines Massenspeichers. Wenn beim Zugriff auf die FAT ein Fehler auftritt, dann fhrt dies nicht selten zu Datenverlusten. Obwohl TCache auf den verschiedensten Konfigura- tionen getestet wurde, kann und will ich keine Verantwortung fr eventuelle Datenverluste bernehmen. Dieses Vorwort mužte ich schreiben,um nicht in Haftung genommen zu werden. TCache kommt mit Sektoren > 512 Byte/Sektor klar, aber die L„nge eines Fateintrages darf 16 BIT nicht berschreiten! Die Einschr„nkung mit den 16 BIT drfte auf dem Atari keine Einschr„nkung sein, da mir keine andere Fatstruktur bekannt ist. TCache sollte auch mit Disketten und Wechselplatten zurechtkommen, da Mediachange berwacht wird. Beim Testen mit verschiedenen Rechnerkonfigurationen konnte ich Folgendes in Bezug auf Mediachange feststellen: Bei TOS 1.04 klappt die Sache bei Disketten zufriedenstellend aber nicht perfekt. Bei TOS 1.00 ist es ratsamer, die Disketten- laufwerke nicht zu puffern. Diskettencache klappt nur, wenn der Schreibschutz der Diskette NICHT aktiviert wurde. Tests mit Wechselplatten konnte ich nicht durchfhren, da nicht vorhanden. Ich w„re fr Informationen diesbezglich dankbar. Es muž nochmal betont werden: Mediachange wird zwar berwacht. Wenn Mediachange jedoch einmal nicht kommt, gibt es bei Diskette und Wechselplatten eine mittlere Katastrophe. Deswegen gilt besonders bei den beiden oben genannten Speichermedien: Sehr grndlich mit unwichtigen Daten testen! Einige Pogramme arbeiten unter Umgehung des Bios, bei denen man TCache ausschalten sollte (mit TcacheAcc). Bei diesen Programmen handelt es sich haupts„chlich um Diskdoktoren, Packer sowie besonders auch um Formatier- und Partitionierprogramme. TCache59.PRG darf nicht in gepackter Form (z.B. mit PFX_PAK) im Auto Ordner stehen, da die Einstellungen direkt im Programmcode abgespeichert werden! TCache darf nicht mit Programmen zusammenarbeiten, die Laufwerks- bezeichnungen um„ndern. Ich habe gerade von einem Programm erfahren, welches Zugriffe auf Laufwerk 'A' in Zugriffe auf Laufwerk 'I' umwandelt. Eine besondere Warnung sollte man nochmal fr 'delayed write' aus- sprechen. Wenn man oft Abstrze hat oder gerne resetet sollte man delayed write NICHT benutzen. Ich habe die Option nur eingebaut weil andere Diese auch haben und weil es in bestimmten F„llen sehr viel bringt. 2. COPYRIGHT Die Version ab 4.0 von TCache ist komplett neu geschrieben. Das Copyright liegt allein bei mir. Ver„nderungen an dem Programm fr den privaten Gebrauch sind gestattet. Soll eine (auch stark) ver„nderte Version von TCache der ™ffentlichkeit zug„nglich gemacht werden, muž mir das ge„nderte Programm inklusive Quelltexten zuvor zugeschickt werden. Dieses kleine Opfer muž ich verlangen damit wenigstens Einer (n„mlich ich) den šberblick nicht ganz verliert. Die Routinen zur Handhabung der Cookie-Struktur stammen von Arnd Beissner. Die Routine zum Installieren eines neuen Cookie-Jar mužte von mir ge„ndert werden. Da Malloc() in TCache nicht genug Speicher findet, habe ich einen festen Datenbereich fr den neuen Cookie-Jar vorgesehen. 3. VERTRIEB Grunds„tzlich darf kein Gewinn aus den unten aufgefhrten Program- men erzielt werden. Es darf nicht separat verkauft werden, jedoch kostenlos verteilt werden. Falls TCache von Festplattenherstellern ihren Produkten beigelegt werden soll, dann muž sich dieser Her- steller zuerst mit mir in Verbindung setzen, um die Vorgehensweise abzusprechen. Der letzte Satz gilt auch fr Festplattenvertrei- ber. Der Vertrieb von TCache ab Version 3 ist erlaubt ber Mail- boxen und PD-Disketten, mit einer Ausnahme: Der Vertrieb von TCache ab Vers. 3 in der PD-Serie der Zeitschrift ST-Computer wird ausdrcklich untersagt! Falls TCache verbreitet werden soll, dann nur mit allen Dateien die ich jetzt auffhre: A. TCACHE59.TXT dieser Text B. TCACHE59.PRG das eigentliche Cacheprogramm C. TC_ACC59.ACC ein kleines Accessory fr Statistiken und Ein- stellungen.Kann auch als .PRG gestartet werden (nur umbenennen) 4. INSTALLATION TCache wird mit folgender Grundeinstellung von mir in den Umlauf gebracht: -Cachegr”že : 128 KByte -Maximale Blockgr”že : 32 Sektoren -Maximale Blockgr”že Lesen : 32 Sektoren -Maximale Blockgr”že Schreiben : 32 Sektoren -Maximaler Prefetch : 32 Sektoren -Hashtabelle : 4096 Byte (10 Bit, 1024 Zeiger) -Laufwerke : keins wird gepuffert -Sektorprefetch ist aktiv und auf 4 Sektoren eingestellt -Schreibpufferung ist fr alle Laufwerke aktiv -delayed write ist nicht aktiv -Checksumme nicht aktiv -Mediach() wird aufgerufen -Fat & Rootdir ist nicht aktiv -bei Reset wird versucht zu schreiben. -Flushzeit fr 'delayed write' ist 10 VBI Ich hab kein Laufwerk gepuffert, damit jeder erstmal seine Grundeinstellung vornehmen muž. Die Installation von TCache ist sehr einfach. Nur das Programm TCache59.PRG in den AUTO-ORDNER der Bootpartition kopieren, Rechner resetten, fertig. Ntzlich ist es auch, das Programm TC_ACC59.ACC in das ROOT-Directory zu kopieren (siehe Punkt 9). Die Grundeinstellung von TCache (siehe oben) ist so ausgelegt, daá dieses Programm auf meinem Rechner optimal l„uft. Falls die Grund- einstellung nicht zusagt, l„žt sich die Einstellung mit dem mit- gelieferten TC_ACC59.ACC „ndern. Falls es zu gef„hrlich erscheint, das Programm gleich in den AUTO- Ordner zu kopieren, kann das Programm auch direkt vom Desktop gestartet werden, um es erst einmal auszuprobieren. Man sollte es nur mit einer unwichtigen Partition oder mit einer solchen benutzen, von der man ein BackUp hat. Ich gehe zwar nicht davon aus, daá eine bestimmte Betriebssytemversion oder ein bestimmter Festplattentreiber vorhanden ist, aber wegen der grožen Vielfalt kann ich natrlich nicht garantieren, daá TCache immer und berall einwandfrei funktioniert. Wird TCache mit zu viel Speicher konfiguriert, kann TCache nicht mehr gestartet werden. Somit kann man die Konfiguration auch nicht mehr „ndern. Damit TCache auf jedem Rechner wieder zum Laufen gebracht werden kann, braucht man beim Starten von TCache (auch im Autoordner) nur die linke Shift- und die Controltaste gleichzeitig drcken. Wenn diese Tastenkombination erkannt wurde, „ndert TCache seine Konfiguration wie folgt: 32 KB Speicher fr Sektoren 10 Bit Hashtabelle 16 Sektoren als gr”žter Block beim Lesen 16 Sektoren als gr”žter Block beim Schreiben 16 Sektoren als maximaler Prefetch Flushzeit 10 VBI keine Pufferung aktiv Jetzt kann man wieder die Konfiguration mit TC_ACC59 „ndern. 5. ALLGEMEINES TCache wurde aus Geschwindigkeitsgrnden komplett in Assembler ge- schrieben. Entwickelt wurde das Programm mit dem Assemblerpacket TURBOASS von ä-Soft. Die Programml„nge, sowohl fr TCache59.PRG als auch fr TC_ACC59.ACC, liegt ungef„hr bei 10 KByte (wer 512 KByte Cache einstellt, wird sich hierfr wohl kaum interessieren). Die Quelltextl„nge fr die beiden Programme liegt zur Zeit bei etwas ber 100 KByte. Die Listings sind recht ausfhrlich dokumentiert, um Programmierern das Leben zu erleichtern, aužerdem m”chte ich hiermit ein Zeichen setzen, um andere Programmautoren dazu zu er- muntern, Gleiches zu machen. Bei meinem letzten Rechner (Sinclair QL) bin ich bei etwa 30 Programmen genauso vorgegangen, habe aber kaum Nachahmer gefunden. Hoffentlich verhalten sich Atari Program- mierer anders. Wie in der Warnung schon gesagt, beherrscht TCache auch Partition >512 Byte/Sektor (BGM). Diese BGM-Partitionen dr- fen auch mit normalen Partitionen (512 Byte/Sektor) gemischt wer- den. Um den gr”žten Geschwindigkeitszuwachs zu erhalten, sollten die Gemdos-Puffer fr FAT und DIR m”glichst klein eingestellt werden. 6. PROGRAMMINTERNA Diesmal nur ganz kurz: Im Cache enthaltene Sektoren werden sehr schnell ber eine Hashfunktion in Verbindung mit linearen Listen gefunden. Platz fr neue Sektoren werden sehr schnell ber einen Ringpuffer gefunden. Daraus folgt, daá immer die „ltesten und nicht die am wenigsten benutzten Sektoren berschrieben werden. Aus Sicherheitsgrnden bietet TCache Version >=4.0 die Option Checksumme an. Mit dieser Funktion wird beim Einlesen eines neuen Sektors eine einfache Checksumme gebildet. Bei einem CacheHit wird verglichen, ob die Checksumme noch stimmt. Diese Funktion ist sehr zeitintensiv und sollte nur im Ausnahmefall benutzt werden. Um seine Aufgabe erfllen zu k”nnen, bindet sich TCache in das Betriebssystem des Atari ein. Es handelt sich dabei um folgende Betriebsystemvektoren: A. hdv_bpb ($472),um Informationen ber die Sektorgr”že, Start der 2.FAT, L„nge der 2.FAT sowie L„nge des ROOT-Directories zu be- kommen. B. hdv_rw ($476), um die Schreib- und Lesezugriffe auf die diver- sen Speichermedien puffern zu k”nnen. C. hdv_mediach ($47E), um den Wechsel eines Mediums erkennen zu k”nnen. D. etv_term ($408) bei Beendigung eines Programmes berprft TCache ob der Programmcode noch unver„ndert ist. E. etv_critic ($404) nur beim Lesen mit Prefetch. F. resvector ($42A) fr CookieJar und Flush. G. Vertical Blank Interrupt ($070) fr 'delayed write' Den Vektor etv_critic h„nge ich OHNE die Bios-Funktion Setexec() um da ich mich noch unter dem Bios befinde. Falls Atari beschliežt diese Vektoren zu verlegen bitte ich um Benachrichtigung. Ich ver- suche mich immer an Vorgaben durch Literatur (Profibuch ST-STE-TT) zu halten, doch in diesem Fall weiche ich ab. Diese Abweichung m”chte ich kurz begrnden: Solange Atari kein 100% reentrant f„higes Betriebssystem heraus- bringt rufe ich aus einer Betriebssystemroutine keine andere Rou- tine mittels Betriebssystem auf. In den Anf„ngen von TCache habe ich einmal versucht alles mit den Betriebssystemroutinen zu er- ledigen (auch aus den hdv_Vektoren heraus) und ich hatte nur ein bombiges Erlebnis, deswegen sorry diesmal etwas unsauber. Verzeiht mir! Um mich an bliche Konventionen zu halten, binde ich die neuen Vektoren nach dem XBRA-Standard mit der Kennung 'TCRB' (TCache Ralf Biedermann) ein. Zur Žnderung der Cacheparameter habe ich diverse Funktionen eingebunden. Diese Funktionen sind in das CookieJar eingebunden. Die Kennung fr mein Cookie lautet 'TCRB'. 7. Daten von TCache Gr”že des Datenpuffers von 32 bis 9999 KByte. Gr”žte untersttzte Sektorl„nge gleich der Gr”že des Datenpuffers. Gr”že der Hashtabelle von 1024 bis 262144 Bytes. Gr”žte untersttzte Blockl„nge 999 Sektoren beim Lesen. Gr”žte untersttzte Blockl„nge 999 Sektoren beim Schreiben. Maximaler Prefetchpuffer 99 Sektoren Konfigurationsm”glichkeiten: Alles, was mir sinnvoll erschien. 8. CACHESTRATEGIEN Ab Version 5 gibt es eine neue Cachestrategie: - Wenn 'delayed write', fr ein Laufwerk, aktiv ist werden Schreib- zugriffe (maximale Blockl„nge), so wird ganz normal gelesen. - Sollen mehrere Sektoren geschrieben werden (maximale Blockl„nge), so werden diese Sektoren geschrieben und alle Sektoren dieses Blocks, die sich im Cache befinden, werden entfernt. Es werden nur Zugriffe auf Sektoren relativ zum Partitionsanfang gepuffert (mit/ohne Diskettenwechsel, mit/ohne retry). Siehe Modi 0..7 der Betriebssystemroutine Rwabs(). Wird absolut auf einen Sektor zugegriffen (Modus >=8), wird dieser Zugriff beim Lesen ignoriert. Beim Schreiben wird der Cache komplett gel”scht, da ich nicht wissen m”chte, ob sich dieser Sektor im Cache befindet. 9. TC_ACC59.ACC Mit diesem kleinen PRG/ACC (nur umbenennen) kann man s„mtliche Einstellungen von TCache vornehmen, wobei TCache installiert sein muž. Fr jedes vorhandene Laufwerk kann man folgendes einstellen: - Ob es gepuffert werden soll - Ob eine Schreibpufferung vorgenommen werden soll - Ob Schreiben verz”gert werden soll - Ob das Laufwerk schreibgeschtzt sein soll - Ob bei Cachezugriffen mit Checksumme gearbeitet werden soll - Ob bei einem CacheHit Mediach() aufgerufen wird - Ob beim Booten die Fats und Rootdirs eingelesen und gesperrt werden sollen (jetzt hab ich diese Spielerei doch wieder drin) Fr TCache kann man noch folgendes einstellen: - Speichergr”že 32..9999 KByte - maximale Blockl„nge 2..999 Sektoren beim Lesen - maximale Blockl„nge 2..999 Sektoren beim Schreiben - maximaler Prefetchpuffer 9..99 Sektoren - Gr”že der Hashfunktion 8..16 Bit - Flushzeit fr delayed write. Die Zeit wird in Anzahl von VBI's angegeben, d.h. die eingestellte Zeit ist auch abh„ngig von der Monitorfrequenz. Beim Monochrommonitor bedeutet 1 VBI ca.14 msec. - Ob im Falle eines Resettes versucht werden soll Daten zu retten. Fr die Ramdisk kann folgendes eingestellt werden - Gr”že der Ramdisk 32..9999 KByte - Laufwerkkennung alle nicht benutzten Laufwerke k”nnen gew„hlt werden - resetfest oder nicht (z.Z. nicht untersttzt) Zur Ramdisk ist noch zu sagen: Wenn man eine Ramdisk installiert oder entfernt werden die anderen Einstellungen die seit Start des ACC's vorgenommen wurden NICHT bernommen. Ich habe diesen Weg gew„hlt weil ich sonst zuviele Einstellungen an die neue Laufwerk- konfiguration anpassen mžte. Fr ACC's aus Ordner laden kann folgendes eingestellt werden - Sollen ACC's aus ordner geladen werden - Pfad fr die ACC's aus welchem die Programme geladen werden sollen Bei ACC's die man in Ordner versteckt und die ein separates RSC-File besitzen kommt es vor das eben diese ACC's ihr RSC nicht finden wenn es ebenfalls im ACC-Ordner steht. Man k”nnte jetzt auch fr die RSC-Files eine Routine schreiben, aber warum, das AES benutzt diese doch schon. Man nehme einen sogenannten Enviroment-Setter und stelle die Enviroment-Variable PATH ebenfalls auf den ACC-Ordner ein. Fr Stepraten kann man einstellen - Die Steprate fr Laufwerk 'A' und 'B' Die Stepraten werden nur eingestellt wenn auch der entsprechende Button selektiert war beim Programmende. TCache.PRG stellt die Stepraten beim Booten ein wenn man mit selektierten Button gespeichert hat. Im Menu 'Virtuell' kann man virtuelle Laufwerke einrichten. Eine etwas genauere Beschreibung befindet sich bei der Cookie-Funktion RBVirtuell. Weiter bekommt man noch folgende statistische Daten angezeigt: - Anzahl der Lesezugriffe fr jedes Laufwerk - Anzahl der gesparten Lesezugriffe fr jedes Laufwerk - Trefferquote bei Lesezugriffen in % - Anzahl der Schreibzugriffe fr jedes Laufwerk - Anzahl der gesparten Schreibzugriffe fr jedes Laufwerk - Trefferquote bei Schreibzugriffen in % - Anzahl der aufgetretenen Checksummenfehler - Anzahl der Zugriffe auf ungerade Adressen - Freier Speicherplatz auf dem gew„hlten Laufwerk - Gesamter Speicherplatz auf dem gew„hlten Laufwerk Desweiteren gibt es ganz unten noch vier Auswahlm”glichkeiten: - 'CLR' bewirkt bei Anwahl, daá das Cache beim 'bernehmen' oder beim 'SPEICHERN' gel”scht wird (inklusive 'gelockten' Daten). - 'LOCK' hat zur Folge, daá alle folgenden Sektorzugriffe diese Sektoren gegen šberschreiben schtzen (nicht bei Abbruch). Man muž dieses Flag irgendwann zurcksetzen, sonst ist der Cachespeicher schneller voll als man denkt. - 'LED' bewirkt das die Floppylampe bei jedem Zugriff auf Festplatte bzw. Cache angeht. Falls man eine Ramdisk vor TCache installiert leuchtet die LED auch sehr kurz auf. LED muž angew„hlt sein (Schwarz) damit die Floppyled flackert. - 'AKTIV', mit diesem Flag kann man TCache komplett deaktivieren. Weitere Einstellm”glichkeiten fr TCache sind - UHR im Menu 'Zubeh”r' stellt eine bestimmte Hardwareuhr beim Start - GemDos im Menu 'Zubeh”r' klingt sich in den GemDos-Trap ein und setzt vor jedem Fsfirst() und Fsnext() das Lock-Bit, damit soll erreicht werden das die gesamte Directorystruktur im Cache festgehalten wird. - etv_term im Menu 'Zubeh”r' bestimmt ob beim Verlassen eines Programmes alle Daten wirklich auf den Massenspeicher bertragen werden. Diese Option hat nur eine Wirkung wenn 'delayed write' aktiv ist. - WriteReset bestimmt ob im Falle eines Resettes (NUR WARMSTART) versucht werden soll die verz”gerten Cachedaten noch zu schreiben. Im Allgemeinen sollte man diese Option eingeschaltet lassen. - XBra-Check bestimmt ob die Prfsummenbildung auch die Vektoren der XBra-Strukturen umfassen soll. Wenn dieser Check aktiviert ist kann es vorkommen das TCache es bel nimmt falls ein vektorverbiegendes Programm beendet wird. - Drvbit-Check bestimmt ob im Vektor Rwabs() nur Zugriffe auf angemeldete Laufwerke zugelassen werden. Der Punkt 'Mediach() bei Hit' bedarf einer genaueren Erkl„rung sch„tze ich. Wenn Daten, von z.B. einer Diskette, im Cache stehen werden diese auch noch gefunden obwohl die Diskette mittlerweile gewechselt wurde, das ist sehr ungnstig. Wenn man 'Mediach() bei Hit' aktiviert hat wird fr jeden Zugriff bei einem Cachehit berprft ob die Diskette eventuell gewechselt wurde, und damit verl„uft eine Cacheoperation relativ sicher. Dieser Punkt sollte fr alle wechselbare Medien (Disketten, Wechselplatten, CD-Roms oder MO's) eingeschaltet sein. Bei Festplatten hat man den Vorteil das ein Ausschalten dieser Option bei einigen Zugriffen bis zu 10% Geschwindigkeitszuwachs bringt. Falls man auch bei Disketten usw. diesen Punkt ausschaltet MUž nach jedem Diskettenwechsel ein sogenannter 'forced mediachange' erzwungen werden, z.B. durch im Desktop. Wenn die Belegungszahl invers angezeigt wird, dann bedeutet das, daá der Cachespeicher komplett mit gesperrten (gelockten) Daten voll ist. Es werden in diesem Fall also keine neuen Sektoren ins Cache bernommen. Bei den Punkten 'OK' und 'SPEICHERN' werden alle eingestellten Daten an TCache59.PRG bergeben. Speichergr”že und Gr”že der Hash- tabelle werden allerdings nur wirksam, wenn die Parameter mit 'SPEICHERN' gesichert worden sind und ein Reset ausgefhrt wurde. Beim Aufrufen von TC_ACC59 und beim Laufwerkwechsel treten Pausen auf, weil ein Dfree() Aufruf get„tigt wird. Bei TOS 1.00 kann es etliche Sekunden dauern. Aužer den cacherelevanten Daten setzt TC_ACC59 beim Start auch den Clipboardpfad auf 'C:\CLIPBRD' falls noch keiner vorhanden war. Diese Funktion habe ich fr mich eingebaut weil eines meiner Lieblingsacc's dies so haben m”chte. Da das Ganze mit einer, wie ich finde, sauber aufgebauten Dialogbox vonstatten geht, sollte jeder damit klarkommen. Sonst bitte melden. 10. TC_Lock.PRG TC_Lock ist ein kleines Hilfsprogramm, daá zeigen soll, wie einfach man TCache fernsteuern kann. TC_Lock hat den Sinn, daá man einige Programme automatisch in den Cachespeicher eintragen kann und diese dort sperren. TC_Lock wird einfach gestartet. Dann liest es die Datei TC_Lock.inf (im gleichen Pfad) ein und liest alle Programme, die dort mit vollem Pfad stehen, ein und sperrt diese im Cache. Wenn das Zeichen '0' als erstes Zeichen in der Datei steht,wird der Cache vorher noch gel”scht. Der Anwender ist selbst dafr verantwortlich, daá die maximale Sektorl„nge und der Cachespeicher reichen. TC_LOCK.INF darf maximal 65536 Byte lang sein (wird wohl niemand erreichen) und die Dateien drfen maximal 262144 Byte lang sein. Das heižt aber nicht, daá diese auch bei falscher TCache-Einstellung gepuffert werden. Ich glaube es ist klar das TC_Lock NUR nach TCache gestartet werden darf. 11. TC_Ram.PRG Žhnlich wie TC_Lock ist TC_Ram ein Hilfsprogramm um aufzuzeigen wie einfach man TCache ber die Cookiefunktionen steuern kann. TC_Ram richtet automatisch eine Ramdisk unter TCache ein. Logischerweise muž TC_Ram NACH TCache gestartet werden. Um mir die Sache einfach zu machen kann man Gr”že und Laufwerkskennung der Ramdisk NUR im Quelltext „ndern. Im Programmpacket TCache ist TC_Ram auf 4MB und Laufwerk 'M' eingestellt. TC_Ram l„uft auch im Autoordner. 12.Cookie-Funktionen Alle folgenden Funktionen k”nnen die Register D0 und A0 zerst”ren, „hnlich wie bei den TOS-Routinen. Um Tcache einfach finden und manipulieren zu k”nnen, habe ich in das eigentliche Programm diverse Steuerroutinen eingebunden. Das Cookie 'TCRB' liefert einen Zeiger auf ein Unterprogramm zurck. Mit diesem Unterprogramm kann man genauso arbeiten wie mit den Bios, Xbios oder Gemdos-Routinen. D.h. Parameter auf den Stack und das Unterprogramm, daá durch ReadJar gefunden wurde, aufrufen. Zur Handhabung des CookieJars benutze ich die Cookieroutinen von Arnd Beissner. Beispiel eines Aufrufs: MOVE.L #'TCRB',D0 ;ID von meinem Cookie LEA cookie,A0 ;Adresse, wo der Wert des Cookies hin soll BSR CK_ReadJar ;Cookie suchen TST.W D0 ;gibt es diesen Cookie BEQ Error ;nein PEA Daten ;Puffer fr Daten MOVE.W #-1,-(SP) ;Daten nur lesen MOVE.W #0815,-(SP) ;Funktionsnummer RBCache MOVE.L cookie,A0 ;Wert des Cookies = Adresse eines ;Trapdispatchers JSR (A0) ;Funktion ausfhren ADDQ.L #8,SP ;Stack korrigieren ... cookie: DS.L 1 ;Speicher fr Zeiger auf Funktion Daten: DS.W 32 ;Speicher fr Parameter Folgende Cookie-Erweiterungen werden durch TCache eingebunden. Zweck dieser Erweiterungen ist es, TCache einfach steuern zu k”nnen, ohne sich durch die Vektoren hangeln zu mssen. - INT RBCache(INT Flag, RECORD* Daten) (0815 dezimal) In Register D0 bekommt man noch die Versionsnummer des Cacheprogrammes zurck. Die Bits 4..7 geben Hauptrevision an und die Bits 0..3 geben die Release an. Flag ist eine Integervariable, die folgende Bedeutung hat: Flag < 0 Daten nur lesen Flag >= 0 Daten schreiben Daten ist ein Pointer auf eine folgende Struktur: Daten { INT Aktiv; INT LED; INT Memory; INT Hash_Bits; INT Max_Secs_read; INT Max_Secs_write; INT Max_Prefetch; INT Delay_time; INT Full; INT Percent; } Bedeutung der einzelnen Elemente des Records: Aktiv = 0 Es werden keinerlei Daten mehr gepuffert, aužerdem wird der Cachespeicher gel”scht. Aktiv <> 0 Es werden alle gew„hlten Laufwerke gepuffert. LED = 0 und die Floppyled flackert nicht bei den Zugriffen. Memory enth„lt den von TCache verwendeten Speicherplatz in KByte Memory darf Werte zwischen 32..9999 annehmen. Hash_Bits bestimmt die verwendete Hashfunktion. Hash_Bits darf Werte von 8..16 annehmen. Max_Secs bestimmt die maximale Blockl„nge, die gepuffert wird. Max_Secs_read bestimmt die maximale Blockl„nge die beim Schreiben gepuffert wird. Max_Secs_read darf Werte von 2..999 annehmen. Max_Secs_write bestimmt die maximale Blockl„nge die beim Schreiben gepuffert wird. Max_Secs_write darf Werte von 2..999 annehmen. Max_Prefetch bestimmt die Gr”že eines Puffer der sowohl fr den Sektorprefetch als auch fr 'delayed write' verwendet wird. Max_Prefetch darf Werte von 9..99 annehmen. Delay_time bestimmt die Verz”gerungszeit fr delayed write in VBI's Full<>0 bedeutet alle Sektoren im Cache sind belegt und gesperrt oder noch nicht geschrieben. Percent gibt den Belegungsgrad des Caches in Prozent an. Die mit RBcache() vorgenommenen Einstellungen werden nur aktiviert, wenn man TCache mit RBSave() abgespeichert und resettet hat. - RBInformation(INT Drv, INT Flag, RECORD* Daten) (0816 dezimal) Drv ist eine Integervariable, die das gewnschte Laufwerk enth„lt. Drv kann Werte von 0 ('A') .. 15 ('P') annehmen. Flag ist eine Integervariable, die bestimmt, ob nur gelesen oder auch geschrieben werden soll. Flag < 0 Daten nur lesen. Flag >= 0 Daten schreiben. Daten ist ein Pointer auf die folgende Struktur. Daten { LONG Reads; /* nur lesen */ LONG Read_Hits; /* nur lesen */ LONG Writes; /* nur lesen */ LONG Write_Hits; /* nur lesen */ LONG Errors; /* nur lesen */ LONG Odd; /* nur lesen */ INT RecSiz; /* nur lesen */ INT Prefetch; CHAR Cache_Aktiv; CHAR Mediach(); INT Write_Aktiv; INT Delayed_Aktiv; INT Write_protect; INT Calculate; INT Fat; } Bedeutung der einzelnen Elemente des Records: Reads enth„lt die Anzahl der Lesezugriffe auf dieses Laufwerk. Reads kann nur gelesen werden. Beim Schreiben wird dieser Wert bergangen. Read_Hits enth„lt die Anzahl der gesparten Lesezugriffe auf dieses Laufwerk. Read_Hits kann nur gelesen werden, beim Schreiben wird dieser Wert bergangen. Writes enth„lt die Anzahl der Schreibzugriffe auf dieses Laufwerk. Writes kann nur gelesen werden, beim Schreiben wird dieser Wert bergangen. Write_Hits enth„lt die Anzahl der gesparten Schreibzugriffe auf dieses Laufwerk. Write_Hits kann nur gelesen werden. Beim Schreiben wird dieser Wert bergangen. Errors enth„lt die Anzahl der Checksummenfehler bei Zugriffen auf dieses Laufwerk. Errors kann nur gelesen werden. Beim Schreiben wird dieser Wert bergangen. Dieser Wert ist nur aktiv, wenn man Checksumme fr dieses Laufwerk gew„hlt hat. Sollte hier mal ein Wert<>0 auftauchen, ist ein Programm AMOG gelaufen und hat unerlaubte Speicherzugriffe get„tigt. Odd enth„lt die Anzahl der Zugriffe auf ungerade Adressen. Odd kann nur gelesen werden, beim Schreiben wird dieser Wert ber- gangen. Sollte hier mal ein Wert<>0 auftauchen so hat in der Zwischenzeit irgendein Programm wertvolle Zeit verschwendet. Nicht schlimm aber „rgerlich (zumindestens beim ST). RecSiz ist die Sektorgr”že von diesem Laufwerk. Dieser Wert stammt aus dem BiosParameterBlock. Dieser Wert kann nur gelesen werden. Beim Schreiben wird dieser Wert ignoriert. Prefetch bestimmt den Leseprefetch fr dieses Laufwerk. Diese Variable darf Werte von 1..9 annehmen. Cache_Aktiv bestimmt, ob dieses Laufwerk gepuffert wird. Cache_Aktiv = 0 dieses Laufwerk wird nicht gepuffert. Cache_Aktiv <> 0 dieses Laufwerk wird gepuffert. Mediach() bestimmt, ob bei einem CacheHit Mediach() aufgerufen wird. Mediach() = 0 Mediach() wird aufgerufen. Mediach() <> 0 Mediach() wird nicht aufgerufen. Write_Aktiv bestimmt, wie sich TCache beim Schreiben auf dieses Laufwerk verh„lt. Write_Aktiv = 0 keinerlei Pufferung der Schreiboperationen. Write_Aktiv <> 0 Pufferung auch der Schreibzugriffe. Delayed_Aktiv bestimmt das Verhalten bei Schreibzugriffen. Delayed_Aktiv = 0 sofortiges Schreiben der Daten. Delayed_Aktiv <> 0 puffern der Daten im Cache, Schreiben der Daten, um eine einstellbare Zeit verz”gern. Diese Funktion ist sehr praktisch beim L”schen und Kopieren. Write_Protect bestimmt auch das Verhalten beim Schreiben. Write_Protect = 0 Schreiben ist erlaubt. Write_Protect <> 0 Schreiben ist nicht erlaubt. Calculate bestimmt das allgemeine Verhalten bei Cachezugriffen. Calculate = 0 es wird keine Checksumme bercksichtigt. Calculate <> 0 es wird eine Checksumme bei Cachezugriffen bercksichtigt. Fat bestimmt, ob beim Booten die FAT und das Rootdir eingelesen werden sollen und falls ja, werden diese gegen sp„teres šberschreiben geschtzt. In RBInformation habe ich 2 CHAR-Variablen eingefhrt um die L„nge des Kopfes nicht zu „ndern. - RBSave(CHAR* Name) (0817 dezimal) Name ist der Zeiger auf den Dateinamen. Diese Funktion versucht, die aktuellen TCache-Parameter in einer Datei abzuspeichern. Die Datei muž schon vorhanden sein und es muž sich um eine Datei handeln, die TCache beinhaltet, es wird vor dem Speichern berprft, ob die Datei TCache enth„lt und ob TCache in der richtigen Version vorliegt. - RBLock(INT Status) (0818 dezimal) Mit dieser Funktion werden alle Sektoren, die ab jetzt in das Cache aufgenommen werden, vor dem šberschreiben geschtzt. Der Status dieser Sektoren wird nur durch RBClr() oder durch andere Zugriffe, die das Cache l”schen, wieder rckg„ngig gemacht. Status<0 der Status wird nur gelesen un in Register D0 zurckgeliefert. Status=0 Daten nicht locken. Status>0 Daten ab jetzt locken. - RBFlush() (0819 dezimal) Diese Funktion soll dafr sorgen, daá alle Sektoren, die ver„ndert worden sind, wirklich auf die Festplatte geschrieben werden. Die Routine wird nur in Verbindung mit 'delayed write' ben”tigt. - RBClr() (0820 dezimal) Diese Funktion sorgt dafr, daá der komplette Speicher des Caches initialisiert wird. - RBHide(Flag, RECORD* Daten) (0821 dezimal) Diese Funktion MUž im Usermode aufgerufen werden. Bei Freigabe eines Laufwerkes wird ein 'forced mediachange' durchgefhrt. Falls das residente Programm CHK_OFLS aktiv ist und es auf dem angegebenen Laufwerk noch offene Dateien gibt kann das Laufwerk nicht versteckt werden. Flag ist eine Integervariable die folgende Bedeutung hat: Flag < 0 Daten nur lesen Flag >= 0 Daten schreiben Daten ist ein Pointer auf eine folgende Struktur: Daten { LONG PASSWORT; INT Drives[16];} Bedeutung der einzelnen Elemente des Records: Passwort ist ein Longintegerwert. Ohne das richtige Passwort werden die Informationen aus dem Feld Drives ignoriert. Drives enth„lt fr jedes Laufwerk ein Flag ob es versteckt werden soll oder nicht. Ist Drives[I]=0 wird das Laufwerk nicht versteckt. Ist Drives aber ungleich 0 kann man auf das Laufwerk nicht mehr zugreifen. - RBDrvA(Flag, RECORD* Daten) (822 dezimal) Diese Funktion MUž im Usermode aufgerufen werden. Nach der Umlenkung wird ein 'forced mediachange' durchgefhrt. Falls das residente Programm CHK_OFLS aktiv ist und es noch offene Dateien auf dem logischen Laufwerk 'A' gibt kann keine Laufwerkumlenkung durchgefhrt werden. Flag ist eine Integervariable die folgende Bedeutung hat: Flag < 0 Daten nur lesen Flag >= 0 Daten schreiben Drive ist eine Integervariable. Daten ist ein Zeiger auf 16 Variablen vom Typ CHAR. In jeder Variablen steht die neue Laufwerkskennung fr das jeweilige Laufwerk. Die Reihenfolge ist wie folgt: 1. Wert neue Kennung fr 'A', zweite Kennung fr 'B', usw. . Nach RBDrvA() wird ein 'forced mediachange' durchgefhrt damit Gemdos diese Žnderung mitbekommt. - RBRam(Flag, RECORD* Daten) (823 dezimal) Mit dieser Funktion kann man TCache zeigen das auch eine Ramdisk untersttzt werden soll. TCache selbst fllt keine Parameter aus. Das aufrufende Programm muž alle Parameter selbst einrichten, auch den zu benutzenden Speicher. Flag ist eine Integervariable die folgende Bedeutung hat: Flag< 0 Daten nur lesen Flag>=0 Daten schreiben Daten ist ein Zeiger auf folgende Struktur Daten { INT ram_drv; INT ram_ok; INT[9] ram_BPB; INT ram_mem; LONG *ram_ptr; LONG base_page;} Die Bedeutung der Parameter der Struktur: ram_drv ist die Laufwerkskennung der Ramdisk. Angegeben werden k”nnen die Werte von 0..15, wobei TC_ACC59 nur freie Laufwerke anbietet. ram_ok ist ein Flag mit folgender Bedeutung: ram_ok =0 die Daten in der Struktur sind NICHT gltig. ram_ok!=0 die Daten in der Struktur sind gltig. ram_BPB enth„lt den BiosParameterBlock der Ramdisk ram_mem enth„lt die Gr”že der Ramdisk in KByte ram_ptr enth„lt einen Zeiger auf die Daten der Ramdisk base_page enth„lt den Zeiger auf die Basepage von TCache (nur Lesen) - RBUhr(INT Status) (0824 dezimal) Mit dieser Funktion kann bestimmt werden ob eine Echtzeituhr beim Booten die Atariuhr stellen soll. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 Uhr nicht stellen. Status>0 Uhr ab jetzt beim Booten stellen. - RBGemdos(INT Status) (0825 dezimal) Mit dieser Funktion kann bestimmt werden ob spezielle Gemdos Routinen eingebaut werden sollen. Z.Z. bedeutet speziell nur das die komplette Directorystruktur gelockt wird wenn 'Fat&Rootdir' gew„hlt wurde. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 Keine Gemdosroutinen. Status>0 Erweiterte Gemdosroutinen. - RBAcc(INT Status, CHAR* Name) (0826 dezimal) Mit dieser Funktion kann bestimmt werden ob beim Booten die ACC's aus einem Ordner geladen werden sollen. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 ACC's nicht aus einem Ordner laden. Status>0 ACC's aus einem Ordner laden Name ist ein Zeiger auf einen Ordnernamen aus dem ab jetzt die ACC's geladen werden sollen. - RBMem() (0827 dezimal) Diese Funktion liefert den Gesamtspeicherbedarf von dem Programm TCache in Register D0 zurck (inklusive Basepage). - RBCacheHit(INT Status) (0828 dezimal) Diese Funktion wurde ersetzt durch: - RBWrite(INT Status) (0828 dezimal) Mit dieser Funktion kann man bestimmen ob im Falle eines Resets versucht werden soll Daten aus dem Cache noch zu schreiben. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 Nicht versuchen zu retten. Status>0 Rettungsversuch (default), ist Sinnvoll. - RBFlush_etv(INT Status) (0829 dezimal) Mit dieser Funktion kann bestimmt werden ob am Ende eines Programmes alle noch nicht geschriebenen Sektoren wirklich auf Platte geschrieben werden. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 Nicht flushen bei etv_term. Status>0 flushen bei etv_term. - RBStep(INT Status, INT stellen, INT* Stepraten) (830 dezimal) Mit dieser Funktion kann man die Stepraten von Laufwerk 'A' und 'B' stellen lassen. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status>=0 Parameter schreiben stellen=0 Stepraten nicht stellen stellen=1 Stepraten stellen Stepraten ist ein Zeiger auf ein Feld mit zwei Integerwerten. Der erste Wert gibt die Steprate fr Laufwerk 'A' an und der zweite Werte enth„lt die neue Steprate fr Laufwerk 'B'. Wert Steprate 0 6ms 1 12ms 2 2ms 3 3ms - RBVirtuell(LONG virtmap) (831 dezimal) Mit dieser Funktion kann man virtuelle Laufwerke an- bzw. abmelden. Es empfiehlt sich nach dieser Funktion Zugriffe auf die virtuellen Laufwerke mit der Funktion RBDrvA auf physikalische Laufwerke umzulenken. 'virtmap' ist ein Bitfeld, jedes Bit zeigt ob ein Laufwerk als virtuelles Laufwerk eingerichtet wurde. BIT0=='A'. RBVirtuell() MUž im Usermode aufgerufen werden ! virtmap < 0 liefert in Register D0 die Bitmap der aktuellen virtuellen Laufwerke zurck. virtmap>= 0 bestimmt Anzahl und Kennung der neuen virtuellen Laufwerke - RBXBracheck(INT Status) (0832 dezimal) Mit dieser Funktion kann bestimmt werden ob die XBra-Strukturen von TCache bei Ende eines Programmes auch berwacht werden. Wenn dieser Schalter gesetzt ist kann es unter bestimmten Umst„nden dazu fhren das sich TCache entfernt wenn ein vektorverbiegendes Programm beendet/entfernt wird. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 XBra's werden berwacht Status>0 XBra's werden nicht berwacht - RBDrvbitcheck(INT Status) (0833 dezimal) Mit dieser Funktion kann bestimmt werden ob die Systemvariable _drvbits vom Vektor Rwabs() beachtet werden soll oder nicht. Von den meisten Treiber werden diese Bits nicht beachtet. Wenn diese Bits nicht beachtet werden kann unter bestimmten Umst„nden auch ein Programm von einem nicht angemeldeten Laufwerk gestartet werden. Status<0 der Status wird nur gelesen und in Register D0 zurckgeliefert. Status=0 _drvbits nicht beachten Status>0 _drvbits beachten - RBInstalled (998 dezimal) Diese Funktion liefert in Register D0 folgende Werte zurck: D0.W==0 TCache installiert und aktiv D0.W<>0 TCache hat sich deinstalliert, dies geschieht wenn am Speicher von TCache manipuliert wurde. - RBFmediach(Drive) (999 dezimal) Diese Funktion fhrt einen 'forced mediachange' fr das angegebene Laufwerk aus. Die Routine MUž im Usermode aufgerufen werden. Es wird berprft ob es noch offene Dateien auf dem angegebenen Laufwerk gibt. Zur šberprfung auf offene Dateien MUž CHK_OFLS installiert sein. Bei Interesse an diesen Funktionen empfehle ich einen Blick in den Quellcode von TC_ACC59.ACC. 12.1 Aufruf der Cookie-Funktionen in `C Dieses Beispiel wurde mir freundlicherweise von Wolfram R”sler @ AC2 zur Verfgung gestellt. #include #include /* Die folgenden Makros zeigen, wie's gemacht wird; ** wer mehr braucht, kann sie sich einfach dazu- ** schreiben. Die Makros sollten immer mit einem ** Cast auf den jeweiligen Rckgabetyp beginnen. ** Alle Parameter sollten auf den betreffenden ** Typ gecastet werden. Der erste Parameter von ** call_tcache ist immer der Opcode, danach folgen ** die weiteren Parameter. */ #define RBFlush() ((void) call_tcache(819)) #define RBUhr(a) ((int) call_tcache(824,(int)a)) #define RBMem() ((long) call_tcache(827)) #define TCacheThere() (call_tcache!=NULL) long cdecl (*call_tcache)(int,...) = NULL; void call_tcache_Init(void) { struct C {long tag,val;} *c; long s; s = Super(0L); c = *(struct C**)0x5a0; Super((void*)s); if (c) for(;c->tag;c++) if (c->tag == 'TCRB') { call_tcache = (long cdecl(*)(int,...))c->val; return; } } main() /* Beispiel-Programm */ { /* Initialisierung: */ call_tcache_Init(); /* Aufruf ber Makros: */ if (TCacheThere()) /* dieser Test vor dem Aufruf der */ /* TCache-Funktionen ist sehr */ /* wichtig!!! */ { printf("Gesamt-Speicherbedarf von tc ist %ld KB\n",RBMem()/1024L); printf("Uhr-Status: %d\n",RBUhr(-1)); puts("Jetzt ein Flush ausl”sen");RBFlush(); } else puts("TCache ist nicht installiert."); return 0; } 13.BENCHMARKS Benchmarks habe ich durchgefhrt (durchfhren lassen) mit folgen- den Programmen: A. QIndex 1.8 B. HDBENCH von Claus Brod Bei mir zeigten alle Programme einen Geschwindigkeitszuwachs zwi- schen 30 und 1800%. Da alle Benchmarks stark variieren und abh„n- gig von diversen Einstellungen sind, m”chte ich hier keine genauen Zahlen auffhren. Jeder sollte das Programm auf seiner Konfigura- tion testen und selbst entscheiden, ob er TCache benutzt oder nicht. 14.Tips und Tricks TCache hat im 'normalen' Alltagsbetrieb fast nur Vorteile. Leider gibt es auch Anwendungen,wo ein Cacheprogramm die Sache verz”gert. Deswegen hier ein paar Beispiele, wann man TCache wie einstellen sollte. - Die sogenannten Festplattenpacker (HDPACK, CHKDISK3 ...) greifen haupts„chlich auf einzelne Sektoren zu. Wenn der 'Packer' gut geschrieben ist, legt er sich am Anfang eine Tabelle der zu vertauschenden Sektoren an. Das eigentliche Packen besteht nur aus der Abarbeitung der Tabelle. Zum Schluž werden FAT und DIR angepasst. Bei dieser Anwendung w„re es warscheinlich schneller, ohne TCache zu arbeiten (mit TC_ACC59 ausschalten). Zeittests habe ich allerdings nicht durchgefhrt. Ich habe mehrere meiner Partionen MIT TCache gepackt und keine Probleme gehabt. Da man das Packen nicht rckg„ngig machen kann, sind Geschwindigkeits- vergleiche sehr schwer zu machen. - Die Installation grožer Programmpakete besteht haupts„chlich aus Kopieren und/oder Entpacken von einigen Hundert Dateien. Da diese Dateien nur einmal von Diskette/Archive gelesen werden und auch nur einmal geschrieben werden, sollte man die gr”žte Blockgr”že auf 2 oder 4 setzen da ansonsten fast jede Datei auch noch zwischenzeitlich im Cache landet. Und dies kostet Zeit. - Je gr”žer der Prefetchpuffer umso besser kann TCache beim delayed write optimieren. Wenn man delayed write aktiviert hat sollte man den Prefetchpuffer am Besten zwischen 16 und 32 einstellen. Hat man delayed write nicht aktiviert so sollte der Prefetchpuffer auf 9 Sektoren stehen. - Mit dem delayed write kann man auch spielen. Je kleiner der Wert fr VBI umso sicherer arbeitet TCache. Ein hoher Wert fr VBI bedeutet eine l„ngere Wartezeit und kann in Einzelf„llen eine Menge Zeit sparen. Normal sollte man VBI auf 20-30 stehen haben (ca. 30-60 msec). Der h”chste Wert (99) bedeutet ca. 1.4-2 Sekunden Verz”gerung. - Man sollte versuchen nicht GEM und BGM Partitionen gleichzeitig zu verwenden. Von TCache wird zwar praktisch jede Kombination untersttzt nur wird beim Mischbetrieb Speicher verschenkt, da die Sektoranzahl die in den Cachespeicher pažt von der gr”žten Sektor- l„nge abh„ngt. - Die Optionen 'Schreib neues', 'Fat & Rootdir' und 'GEMDOS' sorgen bei Benchmarkprogrammen fr eine Verschlechterung. M”chte man die optimalen Werte erreichen mžen diese 3 Optionen ausgeschaltet werden. 15.BEKANNTE PROBLEME TC_Lock arbeitet bei mir nicht aus dem Autoordner heraus (KAOS?). Wenn VOR TCache speicherresidente Programme, die sich in Vektoren einbinden die auch von TCache benutzt werden, installiert werden und NACH der Installation von TCache wieder entfernt werden klinkt sich TCache wieder aus dem Betriebssystem aus. Dies ist eine Sicherheitsmažnahme. Da TCache nicht wissen kann ob dieser Eingriff in Ordnung geht entfernt es sich pr„ventiv, es k”nnte ja auch der Fall sein das die Vektoren durch einen 'Unfall' ver„ndert wurden. Beispiele findet man unter Anderem bei Ramdisks die wieder aus dem Betriebssystem entfernt werden. 17. Spezial Ab Version 5.1 von TCache sind einige Spielereien im Programm ent- halten die nicht direkt mit dem Cache zusammenh„ngen. Ich habe diese Programmteile eingebaut weil ich es fr interessant hielt. Diese Zus„tze befinden sich unter 'Spezial' in TC_ACC59.ACC. Folgende Spielereien gibt es ab Version 5.1: - Umleitung der Zugriffe auf Laufwerk 'A' auf ein beliebiges anderes Laufwerk. Falls eine Ramdisk VOR TCache installiert wurde kann man die Zugriffe auch auf eine Ramdisk umleiten. Fr dieses Feature ist die untere Reihe von Radiobuttons zust„ndig. Sinnvoll k”nnte diese Option z.B. fr ein paar Spiele sein. Nach der Best„tigung wird auf Laufwerk 'A' ein forced mediachange durchgefhrt. Falls es einen Cookie mit dem Namen 'OFLS' gibt wird der mediachange nur erzwungen wenn keine Dateien mehr offen sind. OFLS ist die Kennung des Programmes CHK_OFLS von Hans-Jrgen Richstein. Da TOS einige Spezialit„ten fr Disketten auf Lager hat arbeitet diese Funktion NICHT mit allen Festplattentreibern zusammen. Ich weiž aus eigener Erfahrung das die Festplattentreiber der Firma Rhotron bis zur Version vom April 1988 diese Funktion nicht m”gen. Am Besten jeder testet mal kurz obs klappt oder nicht. - Schutz eines Laufwerkes vor Zugriffen. In der oberen H„lfte der Dia- logbox gibt es ein Feld fr ein Passwort und 16 Button fr die Lauf- werke. Man kann Laufwerke nur ent-/schtzen wenn das Passwort stimmt. Das Passwort ist noch nicht ver„nderbar und wird von mir mit 'TCRB' vorbelegt. Falls man das Passwort „ndern m”chte kann man es durch direktes patchen von TCache59.PRG. Man suche den String 'PASS' und direkt dahinter steht das Passwort. Dies ist kein super/duper Daten- schutz sondern es ist eine Kleinigkeit um z.B. eine Partition vor den Zugriffen von Bruder und/oder Chef zu schtzen. Wenn ein Laufwerk wieder freigegeben wird fhrt TCache auch ein forced Mediachange durch. Falls auf einem Laufwerk noch Dateien offen sind und CHK_OFLS installiert ist kann man ein Laufwerk nicht schtzen. Der Schutz meldet das Laufwerk nicht wirklich ab, sondern der Zugriff wird von der Software in TCache verhindert. Ich habe diesen Weg gew„hlt weil ein vollst„ndiges Abmelden eventuell nicht rck- g„ngig gemacht werden k”nnte, weil z.B. sich eine Ramdisk dazwischenschiebt. 17.SCHLUSSWORT Hiermit m”chte ich allen danken, die mir geholfen haben dieses Programm zu verbessern und zu testen, insbesondere gilt mein Dank Patrick Dubbrow, der viel Zeit und eine Partition (unfreiwillig) opferte. Ebenfalls stark an den Verbesserungen von Tcache Version4 beteiligt ist Jrgen Lock (@jelal.north.de) der mir einige Unstim- migkeiten in TCache aufzeigte und half, diese zu beseitigen. Da ab Version 5.0 eine gef„hrliche Operation ('delayed write') in TCache integriert wurde m”chte ich mich auch bei meinen Betatestern aus dem Mausnetz (Andreas Priebe, Michael Thurm und Steffen Lamparter) bedanken. Ich wužte gar nicht das man in ein Programm so viele Fehler einbauen kann wie die drei Atari-User gefunden haben. Ein weiterer Dank gilt Bernfried Grosse-Venhaus der es nicht ansehen konnte das in Tcache4.txt so viele Fehler enthalten sind und mir eine gereinigte Version zuschickte. Leider mužte ich wieder einige Rechtschreib- und Satzzeichenfehler einbauen da sich zwischen Version 4.0 und 5.2 so viel ge„ndert hat. Mich hat TCache viel Zeit und mehrere Partitionen gekostet, darum m”chte ich jeden, der dieses Programm regelm„žig benutzt, um eine Anerkennung bitten. Unter Anerkennung verstehe ich eine Spende, unter MEINEM NAMEN, fr einen TIERschutzverein eurer Wahl. Anregungen werden immer gerne entgegengenommen. Briefe werden von mir nur beantwortet wenn: A. Ein frankierter Rckumschlag enthalten ist. B. Eine Spendenquittung (TIERschutzverein) enthalten ist. C. Falls eine Diskette enthalten ist, wrde ich die neueste Ver- sion von TCache inklusive den Quelltexten zurckschicken. In diesem Fall wrde ich es begržen, wenn auf der Disketten gute, eventuell eigene, PD- oder Sharewareprogramme sind (am liebsten mit Source), damit auch ich einen Vorteil von meinem Programm habe. Ob weitere (hoffentlich bessere) Versionen folgen,h„ngt auch stark von der Resonanz der berglcklichen Anwender (==Euch) ab. Falls Ihr Fehler findet, bitte sofort eine Meldung (wie auch immer) an mich, denn ich hasse es, wenn ein Plan NICHT funktioniert. Nach meiner Einsch„tzung drfte TCache ab Version4 eines der schnellsten Cacheprogramme fr den Atari-ST sein. Da man allergings nie sicher sein kann, w„re ich dankbar wenn man mir Beispiele „hnlich schneller oder gar schnellerer Cacheprogramme zukommen l„žt. Weiter bin ich auch immer an Anregungen interessiert um ein gutes Programm (TCache ;-{)}) noch besser zu machen. Falls Sie weitere Fehler in TCache feststellen, bitte ich um eine genaue Beschreibung des Fehlers und der Programme, die aužer TCache noch laufen und natrlich, wie man den Fehler hervorrufen kann. In dringenden F„llen kann man mich auch telefonisch erreichen: 04235/8407 Mo-Fr 18.00-24.00 Sa-So 12.00-24.00, falls ich zu Hause bin. Zu erreichen bin ich unter der obigen Adresse oder im Mausnetz unter Ralf Biedermann @ HB und im Fido-Net unter Ralf Biedermann 2:241/2021.1 und unter allen Netzen die Gateways zur Maus oder zum Fido haben. Da die Anzahl sehr grož ist, kann ich nicht alle nennen, aužerdem kenne ich die wenigsten Netze. Einige Netze sind Internet, Gernet, Subnet, Zerberus,... Fragt mich aber nicht nach meiner Adresse in diesen Netzen. Das Schreiben netzbergreifender Nachrichten wird im GATOR10, der in jeder vernetzten Mailbox verfgbar sein sollte, beschrieben. MfG Ralf Biedermann Langwedel den 08.10.92