DRVIN.PRG ========= (Note for the English reading people: The English version is appended on the German, look for it!) (Ich habe keine Zeit, alles ausfhrlich einzutippen. Wenn jemand Treiber fr andere Hardware oder einen "Treiberadapter" fr Mint schreiben will, kann er sich gern an mich wenden. Assemblerkenntnis setze ich allerdings voraus. Irgendwann wird hier die vollst„ndige Doku der Funktionen erscheinen.) Dieses Programm (DRVIN) untersttzt nachladbare Ger„tetreiber. Es muž vor diesen Treibern geladen werden. DRVIN und Treiber mssen vor den Programmen geladen werden, die die Treiber nutzen sollen. DRVIN geh”rt in den AUTO-Ordner (fr Spezialisten: oder in eine „quivalente Programmsammelecke). Man kann es zu Testzwecken auch vom Desktop aus starten. Es sollte aus Geschwindigkeitsgrnden m”glichst weit hinten im AUTO-Ordner stehen. TOS --- DRVIN l„uft unter allen mir bekannten TOS-Versionen. Mag!X ----- DRVIN l„uft unter Mag!X ab Version 2.00. Mit „lteren Mag!X-Versionen mžte es ebenfalls funktionieren, dies wurde aber nicht getestet. Bei Mag!X-Versionen >2.00 sind einige Funktionen von DRVIN unn”tig und werden nicht verwendet. M”glicherweise wird es ein Mag!X geben, das alle Funktionen von DRVIN enth„lt. Dann ist DRVIN berflssig und die Treiber werden ohne DRVIN gestartet. MiNT ---- Wenn man DRVIN und die Treiber vor MiNT startet, bleibt nur wenig von den Funktionen brig. Deshalb sollte man DRVIN und die Treiber nach MiNT starten. Dabei realisieren sie alle ihre Funktionen wie unter TOS, aber nicht mehr. Umlenkungen oder sonstige Spielerchen sind mit den Filehandles dieser Ger„te nicht m”glich. Ich weiž nicht, ob die Umschaltung des AUX-Ger„tes fr den aktuellen Prozež dann noch funktioniert. Ich benutze weder MiNT noch MultiTOS. Solange sich kein MiNT-Freak findet, der die Anpassung und Untersttzung bernimmt, wird es wohl kaum speziell an MiNT angepažte Versionen geben. Aufbau ------ DRVIN besteht aus drei wesentlichen Teilen: dem Anlegen des RSVF-Cookies, der neuen Bconmap- und MAPTAB-Verwaltung fr BIOS und XBIOS sowie den Basisroutinen fr die Installation einfacher Mag!X-kompatibler Ger„tetreiber. RSVF-Cookie ----------- Es wird ein RSVF-Cookie angelegt, dessen Wert auf zwei 0-LONGs zeigt, also auf ein Ende-Objekt. So brauchen Ger„tetreiber keinen Cookie mehr anzulegen, sondern sich nur noch in die RSVF-Listen einzuh„ngen. Der RSVF-Cookie liefert eine Struktur zur Anzeige grundlegender Informationen ber Schnittstellen. Zur Beschreibung des RSVF-Cookies siehe Textfile RSVF_COO.TXT. MAPTAB-Verwaltung ----------------- Dieser Programmteil h„ngt im BIOS- und XBIOS-Trap und bearbeitet die XBIOS-Funktionen Bconmap, Rsconf und Iorec(fr AUX). Es werden die BIOS-Funktionen Bconstat, Bconin, Bcostat und Bconout fr Ger„t AUX sowie alle Ger„te ab einschliežlich 6 aufw„rts bearbeitet. Bconmap und eine MAPTAB werden unter jeder TOS-Version angelegt. Die Routinen des aktuell per Bconmap eingestellten Ger„tes werden zus„tzlich in die xco*-Vektoren (aužer bei TOS1.00) kopiert, dort aber nicht benutzt. Es werden zwei neue Bconmap-Unterfunktionen mit den Opcodes -300 und -301 zum šberschreiben eines MAPTAB-Eintrages und zum Anh„ngen an die MAPTAB bereitgestellt. Die L„nge der MAPTAB ist nicht mehr fest begrenzt. ### Momentan liegt die Maximall„nge in DRVIN.PRG bei 10 Eintr„gen, ist aber nur eine konstante Variable in der Assemblerquelle und jederzeit erweiterbar. GEMDOS-Teil ----------- Der sieht von aužen aus wie die bisherigen HSMODEM1-Versionen und von innen wie eine (### momentan noch) stark abgerstete Mag!X-Beta. Es werden Fopen, Fread, Fwrite, Fclose, Fcntl an den Treiber weitergeleitet, aber alles mit fileptr == NULL. Aktionen -------- Wird DRVIN auf TOS > 2.00 oder auf Mag!X >= 2.00 losgelassen, dann kopiert es die alten Routinen aus den alten MAPTABs, so daž eine Funktion der (X)BIOS-Aufrufe mit den alten TOS-Routinen gegeben ist, auch ohne installierte Treiber. Bei TOS1.00 sieht es ganz bel aus, man muž den MFP-Treiber nachladen, sonst geht SerialI/O nicht mehr (nur Zeiger auf IOREC wird bertragen). Bei 1.00 < TOS < 2.00 geht es etwas, da nur Rsconf nicht bertragen wird, aber deshalb muž man trotzdem den MFP-Treiber nachladen. Mag!X- (und DRVIN-) freundliche Bco*-Routinen --------------------------------------------- ver„nderbare Register A0-A2/D0-D2 (auch bei Rsconf) Bconout muž mit dem Befehl move.b 7(sp),d0 oder auch: move.w 6(sp),d0 beginnen und wird meist hinter diesem (Startadr+4) mit Parameter in d0.b aufgerufen Neue XBIOS-Bconmap-Funktionen (-300, -301) ------------------------------------------ Diese Funktionen drfen nur zur Installation Mag!X-freundlichen Funktionen benutzt werden. In der MAPTAB ist Platz fr mehr als 4 Ger„te. Der Lieferant dieser XBIOS-Funktionen (DRVIN oder zuknftiges Mag!X) sorgt fr ausreichend Platz zur Installation neuer Ger„te in der MAPTAB. Entweder er schafft den Platz dynamisch oder er hat eine feste Obergrenze. Ein Treiber sollte trotzdem mit einer Fehlermeldung rechnen, die durch Speichermangel ausgel”st sein k”nnte, aber auch ganz andere Ursachen haben kann. Die XBIOS-Funktion Bconmap wird um zwei Unterfunktionen erweitert. Sind diese Erweiterungen nicht vorhanden, bekommt man beim Funktionsaufruf automatisch eine 0 als Fehlermeldung zurck. LONG Bconmap((WORD)-300, (WORD) dev_nr, (LONG) ptr_to_6_longs) dev_nr ist eine Ger„tenummer ab 6 aufw„rts, die in der MAPTAB bereits existieren muá, andernfalls wird der Fehlercode -15 EUNDEV zurckgegeben. ptr_to_6_longs zeigt auf eine Struktur, die einem MAPTAB-Eintrag entspricht. Diese Struktur wird auf den entsprechenden Platz in der MAPTAB kopiert. Ist das angesprochende Ger„t das aktuell per Bconmap fr AUX eingestellte, so werden die eben eingeh„ngten Routinen auch nach xco* und in die aktuellen rsconf und iorec-Zellen kopiert. Diese Funktion dient nur zum Einh„ngen Mag!X-freundlicher Routinen. Als Erfolgsmeldung wird die Ger„tenummer zurckgegeben, auf die der Eintrag erfolgte, also dev_nr ist Rckgabewert. LONG Bconmap((WORD)-301, (LONG) ptr_to_6_longs) „hnlich -300, fgt aber einen Kanal an die MAPTAB an. Rckmeldung ist entweder die von dieser Funktion fr den Eintrag gew„hlte Kanalnummer, oder der Fehlercode -12 EGENRL, falls kein Platz fr eine MAPTAB-Vergr”áerung ist. Logischerweise kann es hier nicht vorkommen, das die Vektoren sofort nach xco* bertragen werden. Treiber ------- DRVIN bietet im GEMDOS-Bereich nicht alle M”glichkeiten der Mag!X-(beta)Versionen. Wer einen Treiber schreiben will, der auch unter DRVIN funktioniert, kann sich wegen der Einzelheiten an mich wenden. Versionen --------- 1993-11-23 im GEMDOS-Trap nun nur noch A0/D0 modifiziert, fr solche unsauberen Programme wie STZIP (mindestens bis Version 2.3), ZIPJR, das PureC-Hilfesystem, Teleoffice und ungez„hlte andere. Fopen und Fclose werden an Devices weitergereicht 1993-11-28 Fehler unter TOS1.00 bei XBIOS-Bconmap beseitigt eigener Env-String _PNAM=DRVIN.PRG Harun Scheutzow, 21.11.1993 und sp„ter (Harun_Scheutzow@B.maus.de) DRVIN.PRG ========= (Translated from German to English on 1994-01-02 by Harun Scheutzow) (I have no time for typing everything in the long form. When somebody wants to write a driver for different hardware or so, he may contact me. In the future here will appear the complete documentation of the functions.) This program (DRVIN) supports loadable device driver. It has to be loaded before the drivers. DRVIN and drivers must be executed before the programs using this drivers. This program should be placed into the AUTO-folder (for specialists: or an equivalent program collection place). It can be startet from the desktop too for test purposes. TOS --- DRVIN works with all TOS versions I know. Mag!X ----- DRVIN runs under Mag!X from version 2.00 up. It should be run under older Mag!X versions too, but this isn't tested. With Mag!X >2.00 some functions of DRVIN are no longer needed and not used. Possibly it will exist a Mag!X in the future which contains all functions of DRVIN. In this case DRVIN is not necessary and the drivers will be startet without DRVIN. MiNT ---- If DRVIN and the drivers are started before MiNT only a little of the functions will remain. That's why DRVIN and the drivers should be started after MiNT. In this case all functions are realized as under TOS, but no more. Redirections and other plays are impossible with this file handles. I don't know whether the AUX-device switching for the aktual process will continuosly work. I use neither MiNT nor MultiTOS. As long as no MiNT freak is to be found who takes over the adaption and support, no special versions for MiNT will exist. Construction ------------ DRVIN consist of three import parts: making the RSVF-cookie, new Bconmap- and MAPTAB-manager for BIOS and XBIOS, basic routines for installation of simple Mag!X compatible devices drivers. RSVF-Cookie ----------- A RSVF-cookie is created which value points to two 0-LONGs, representing an end-object. So devices drivers aren't in need of creating a cookie. They hook themselves only in the RSVF-lists. The RSVF-cookie provides a structure for providing the basic information about interfaces. The description is contained in the file RSVF_COO.TXT. MAPTAB-Verwaltung ----------------- This part hooks in the BIOS- and XBIOS-trap and manages the XBIOS-functions Bconmap, Rsconf and Iorec(for AUX). The BIOS-functions Bconstat, Bconin, Bcostat and Bconout for device AUX and all devices from included 6 up are managed. Bconmap and a MAPTAB are provided under every TOS-version. The routines of the actual setted device by bconmap are copied in the xco*-vectors (except TOS1.00) too, but not used there. Two new Bconmap-subfunctions with the opcodes -300 and -301 are provided for overwriting a MAPTAB-entry and for adding a new entry. The length of the MAPTAB is no longer limited. ## The actual limit in this DRVIN is 10 entry, but this is only a constant in the source, easy to change and extend. GEMDOS-part ----------- It looks like the old HSMODEM1-version from outside and from inside like (### at the moment) a reduced Mag!X-beta. Fopen, Fread, Fwrite, Fcntl are directed to the driver, but all with fileptr == NULL. Actions ------- When DRVIN is started under TOS>2.00 oder Mag!X>2.00, all old routines from the old MAPTAB are copied in the new one, so that the (X)BIOS-functions will work with the old routines if no driver is installed. Under TOS1.00 it looks very bad, the MFP-driver must be loaded, otherwise serialI/O will not work (only the IOREC-pointer is copied). Under 1.00