/////////////////////////////////////////////////////////////////////////////// / / / 19.08.93 / / / / Compiler/Bibliothekspatches zu GFABASIC Atari ST/STE/TT/Falcon / / / / P*ST: / / Christoph Conrad / / Adalbertsteinweg 113 / / 52070 Aachen / / / / E-Mail Direkt: / / MAUS: Christoph Conrad @ AC3 / / / / E-Mail Gateways: / / FIDO: Christoph Conrad % Maus AC3 2:242/2.6 / / ACHTUNG: evt. neu / / Christoph Conrad % Maus AC3 2:242/42.333 / / USEnet: Christoph_Conrad@ac3.maus.de (keine ueberlangen Mails!) / / Zerberus: Christoph_Conrad%ac3@zermaus.zer / / Pronet: MAUS:AC3:Christoph_Conrad / / Internet: conrad@pool.Informatik.RWTH-Aachen.DE / / (selten, bitte keine ueberlangen Mails!) / / BTX: Seite *35008024#, im Formular ausfllen / / Christoph_Conrad@AC3.MAUS.DE.UUCP / / (kostet 90 Pfennig) / / / / Falls Sie irgendetwas entdecken, was Sie st”rt, oder Verbesserungsvorschl„ge/ / haben, nur zu: schreiben Sie mir ber EMail (vorzugsweise) oder P*ST. / / / / Wenn Sie Fehler im Basic finden, schreiben Sie mir! / / / / Ich kann weder die juristische Verantwortung noch irgendeine Haftung fuer / / eventuelle Schaeden an Daten oder Programmen uebernehmen, die direkt oder / / indirekt auf die Benutzung dieser Patches zurueckzufuehren sind! / / / /////////////////////////////////////////////////////////////////////////////// Inhalt: (I) Allgemeines & Spezielles zu diesen Patches (II) Buntgemischter Frage und Antwortteil (I) Allgemeines & Spezielles zu diesen Patches Moin, GFABASIC ist uns allen wohl ans Herz gewachsen. Als ich meinen ST frisch bekam, war dies die einzige Programmiersprache, die superschnelle Turnaroundzeiten (Programm editieren, testen, editieren etc...) erlaubte, einen hyperschnellen Compiler/Interpreter hatte (zu allem šberfluss erzeugt der Compiler auch noch richtig fixen Code!), einen brauchbaren Editor besass UND auch auf 1 MB Rechnern ohne Festplatte sinnvoll eingesetzt werden konnte. Ich glaube, dass dies die Hauptgrnde fr den Erfolg von GFABASIC waren. Im Laufe der Zeit stellte sich allerdings (nicht nur) im Zuge aufkommender Grafikerweiterungen heraus, dass GFABASIC an einigen Stellen Schwachpunkte aufweist. Einige (schwerwiegende) Schwachpunkte behebt dieser Bibliothekspatch. Die Bibliothekspatches erschienen bereits in zwei Versionen als GFALI030, verbessert als GFALI072. Dann fragte mich Gregor Duchalski @ DO, ob ich nicht Lust habe, meine Sachen zu einem Programm beizusteuern, welches Patches des Interpreters unter einer komfortablen GEM-Oberfl„che erlaubt. Da meine Patchprogramme keinerlei Komfort in der Bedienung aufwiesen UND ich Gregors Engagement und Wissen aus der MAUSgruppe GFABASIC kannte, stimmte ich zu. Zudem berzeugte mich seine GFA-Bibliothek, die auch in sein GFA_PTCH einfloss. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Was bietet der Compilerpatchteil von GFA_PTCH? - Line-A-Patches werden automatisch eingebaut! - saubere Autoordnererkennung - saubere Erkennung von Acessories - falls der mit $m angeforderte Speicher nicht zur Verfgung steht, kann dies erkannt werden - $U/$I-Bug in 3.6 behoben! Wichtig: Ich rate allerdings ausdrcklich von den $I-Sachen ab. Unsauber, z.T. t”dlich. Auch $U kann kritisch sein. Mit diesem Init-Teil laufen $U/$I genauso 'unsauber' oder 'unsicher' wie vorher, abgesehen davon, dass sie unter 3.6 jetzt šBERHAUPT laufen. ERR.LST demonstriert euch in beispielhafter Weise alle Features. Dort wird auch $I+ verwendet, dies rein zu Demo-Zwecken. Beachtet die Kommentare in ERR.LST und die Hinweise unten in diesem Text unter! !!! Teile des Assemblercodes ½ GFA Systemtechnik Ver„nderungen an irgendwelchen Teilen NUR zu privaten Zwecken. Ver„nderte Versionen drfen nicht weitergegeben werden! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Da das Ganze viel Arbeit war, drft ihr mir gerne bei Zufriedenheit mit den Patches ein Geschenk (Danke!) von >= 10,- DM senden (Quittungen gibbet nich (wg. Finanzamt), da Geschenk :-) Da ich Musikfan bin, k”nnt ihr mir lieber wahlweise eine Kassette mit einer Zusammenstellung eurer Lieblingsmusik schicken (Chromdioxid, Dolby B, am liebsten TDK SA-X). Alle Richtungen ausser Klassik mit Gesang (Oper, Operette etc.), Schlager, Volksmusik und Plump-Disco (Bananarama, Sabrina) sind willkommen, bevorzugt eher unbekannte Ensembles/Bands/Interpret(inn)en. Ich hoffe auf Cassettenfluten!!! :-) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Was macht GFA_PTCH.PRG? == (a) Patch des Compilers ACHTUNG: Mit dem gepatchten Compiler bersetzte Programme laufen NICHT mit der alten Library! == (b) Patch der Library Im strengen Sinn kein Patch, sondern ein Austausch von Code. == (c) Erstellen eines neuen Indexfiles GFA3BLIB.NDX MAKE_NDX.PRG _unbedingt_ aufrufen, dieses Programm erstellt eine neue GFA3BLIB.NDX. Dies sollte mit GFA_PTCH erfolgen. Die alte GFA3BLIB.NDX evt. vorher sichern, obwohl diese mit MAKE_NDX.PRG jederzeit aus der alten Lib neu erzeugt werden kann. MAKE_NDX liegt erst ab irgendeiner 3.5er-Version bei, leider. Macht dies vorl„ufig bei Bekannten (falls es bei euch nicht dabei ist), ich frage mal bei GFA nach, ob ich es dem Paket beilegen darf, ansonsten werde ich evt. ein funktionelles Žquivalent schreiben. == (d) Patch des Interpreters Ihr msst UNBEDINGT einen Interpreterpatch mit GFA_PTCH.PRG durchfhren. Falls euer Interpreter noch nicht bei uns erfasst ist: Jeweils das ERSTE vorkommende $A00A und $A009 durch $4E71 ersetzen. Das _sollte_ klappen. Das Umfeld der Patches lautet: $E0C0 $A00A $4CDF sowie $0008 $A009 $246E. Das gibt zwar leichte "Flecken" beim Bewegen der Maus im Editor des Interpreters, aber dafuer keine beim laufenden Programm (saubere Schachtelung von hidems/showms per GRAF_MOUSE vorausgesetzt!). +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Falls Ihr weiterhin Probleme habt: - mit der Original GFA3BLIB (+ zugeh”rigem GFA3BLIB.NDX) testen. Schickt mir - das INIT.O eurer Library. - Die genaue Versionsbezeichnung/L„nge der Library / des Compilers. Damit dies ganz einfach geht: INIT2DMP.PRG erwartet im gleichen Verzeichnis GFA3BLIB und erzeugt eine ausdruck- bzw. E-mailbare Datei INIT.DMP. !!! Denkt dran dabei eure ORIGINAL-Lib oder eine Kopie derselben !!! !!! und nicht etwa eine schon gepatchte zu benutzen !!! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Wie arbeite ich damit? Seht euch bitte ERR.LST an. Ich hoffe das reicht. Lest euch nach M”glichkeit auch den Frage- und Antwortteil dieses Textes durch. Die dort zu vermeidenden Befehle sind zwingend (wg. der Line-A-Patches), viele der dort angegebenen Tips ntzlich. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ BUGS: Hoffentlich nicht allzuviele. Noch bearbeitet werden: - ERR scheint im Interpreter beim Start nicht immer auf 0 initialisiert zu sein. Bevor ihr diesem INIT was anlastet, bitte erst mal mit der Original GFA3BLIB (+ zugeh”rigem GFA3BLIB.NDX) testen. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Disclaimer: Ich habe alle Sorgfalt walten lassen, um fehlerfreie Programme/Daten zu erstellen. Trotzdem sind Fehler nie ganz auszuschliessen. Deshalb kann weder die juristische Verantwortung noch irgendeine Haftung von Seiten des Autors fr eventuelle Sch„den an Daten oder Programmen, die direkt oder indirekt auf die Benutzung dieses Programms zurckzufhren sind, bernommen werden! ******************************************************************************* (II) Buntgemischter Frage und Antwortteil FRAGEN & ANTWORTEN: +++++++++++++++++++++ FRAGE: Ich h”re immer, Line-A sollte nicht verwendet werden. Warum eigentlich? Nun, wie bekomme ich denn dann meine Compilerbibliothek (GFA3BLIB) Line-A frei? Im folgenden bedeute LA LINE-A! ANTWORT: Dazu ein Auszug aus dem Profibuch, 10te Auflage: [ZITAT:ON] Die Architektur des Betriebssystems spricht allerdings eindeutig gegen die Benutzung der Line-A-Routinen. Diese stellen n„mlich die untere Ebene des VDI-Bildschirmtreibers im ROM dar. Mit ihrer Verwendung verbaut man sich also eine eventuelle Nutzung eines anderen (schnelleren) Bildschirmtreibers! Auch ist eine Existenz der Line-A-Routinen nur fr die ST-Modi (also 320 * 200, 640 * 200 und 640 * 400) garantiert. Schon bei 256-Farbgrafik (spezielle Grafikkarte bzw. TT in der 'niedrigen' Aufl”sung) sind die M”glichkeiten der Line-A-Schnittstelle ersch”pft (siehe COLBIT0 bis COLBIT3). [ZITAT:OFF] Falls Sie jetzt nur Bahnhof verstanden haben: KEINE PANIK! Eine entscheidende Folgerung dieser Aussagen ist, das Programme, die Line-A Routinen benutzen, nicht unbedingt korrekt auf allen Graphikkarten laufen! Ergo: weg damit. *** Auf eine saubere Schachtelung von hidems/showms (ueber GRAF_MOUSE AES 78) achten! Zu jedem Hide ein Show, sonst gibt's "Flecken". Maus nicht anschalten, wenn sie schon an ist, wie in der Regel nach dem Start von GEM-Programmen, sonst "Flecken". *** FOLGENDE BEFEHLE MEIDEN: CRSCOL CRSLIN MOUSE MOUSEK MOUSEX MOUSEY SETMOUSE RC_COPY SHOWM HIDEM SPRITE ACHAR ACLIP ALINE APOLY ARECT ATEXT BITBLT HLINE L~A PSET PTST GET PUT SGET SPUT FILESELECT FILESELECT # Bei Verwendung ohne #datei_nummer: INPUT INPUT$ LINE INPUT Ausweichbefehle: MOUSE/MOUSEK/MOUSEX/MOUSEY -> (AES) GRAF_MKSTATE SETMOUSE -> (AES) APPL_TPLAY SHOWM/HIDEM -> (AES) GRAF_MOUSE FILESELECT -> (AES) FSEL_INPUT FILESELECT # -> (AES) FSEL_EXINPUT SPRITE -> (VDI) vro/vrt_cpyfm ACHAR -> (VDI) TEXT ACLIP -> (VDI) CLIP ALINE -> (VDI) LINE APOLY -> (VDI) POLYLINE ARECT -> (VDI) PBOX ATEXT -> (VDI) TEXT BITBLT -> (VDI) BITBLT q%(),z%(),d%() HLINE -> (VDI) LINE PSET -> (VDI) PLOT oder v_pmarker bei grob > 200 Punkten PTST -> (VDI) POINT GET/PUT/SGET/SPUT -> (VDI) BITBLT RC_COPY -> (VDI) BITBLT >> Ohne Gewaehr auf Vollstaendigkeit! +++++++++++++++++++++ FRAGE: Wo finde ich denn Hinweise auf GEM-konforme Programmierung? ANTWORT: Tim Orens ProGEM. Dieser Text von 1985, inzwischen wohl in den meisten M„usen zu finden, gehoert mit zum besten ueber 'Professionelle GEM'-Programmierung. Weiterhin gibt es das Buch 'Vom Anf„nger zum GEM-Profi' der Gebrder Geiss. Ein wenig unbersichtlich, aber sonst ganz gut. Unverzichtbar ist allerdings das 'Profibuch' von Jankowski/Reschke/Rabich, vor allen Dingen als Referenz. +++++++++++++++++++++ FRAGE: GFA bietet doch so sch”ne eigene Befehle fr Fenster. Taugt das was? ANTWORT: Ich rate von der Verwendung der GFA eigenen Fensterverwaltung ab. Diese war in frueheren Versionen fehlerhaft, ob heute, wer weiss? šbers AES ist es genauso 'einfach' oder 'schwierig'. +++++++++++++++++++++ FRAGE: Mein Programm strzt mir manchmal ab. Ich kann beim besten Willen keinen Fehler finden. Was kann das sein und wie finde ich das raus? ANTWORT: SysMon und TempleMon verwenden. TempleMon kann in vielen MAUS-Boxen gesaugt werden, SysMon direkt beim Autor Karsten Isakovic Wilmersdorferstr. 82 1000 Berlin 12 bezogen werden. Zum Zeitpunkt des Absturzes kann man so zumindest den letzten verwendeten Systemaufruf feststellen und evt. falsche Parameter. Eine weitere gute M”glichkeit ist die Verwendung von TRACE procedurename (siehe Handbuch). Wenn man nun alle getraceten Zeilen in eine vorher ge”ffnete Datei schreibt (PRINT #1,TRACE$) l„sst sich die Absturzstelle schnell lokalisieren. Ebenso ntzlich kann der Turbo-C/Pure-C Debugger sein, wenn man das Programm mit Symbolen bersetzt. Ein weitgehend unbekannter Fehler betrifft die GFA-Basic eigene Speicherverwaltung. Der Fehler ist in allen 3er Versionen. Abhilfe: an 'h„ufig' durchlaufene Stellen (die irgendwas mit Strings machen) ein ~ FRE(0). Probiert mal folgendes (danach neu booten): ' Compilerversion mit $m ' statt RESERVE RESERVE 1000 $m 4711 ' RESERVE damit's etwas schneller abstrzt aber eigentlich unn”tig ' Die (**) Zeilen braucht man beim Interpreter, damit ' nach dem RESERVE auch wirklich danach (FRE() MOD 16) == 0 gilt ' minus 4: wegen Backtrailer bei rest16$ beim Compiler falls $m XXXX ' mit (XXXX MOD 16)<>0 rest16%=(FRE(0) MOD 16)-4 ! ** IF rest16%<0 ! ** ADD rest16%,16 ! ** ENDIF ! ** rest16$=STRING$(rest16%,0) ! ** ' (FRE() MOD 16) == 0 jetzt erfllt str$="AHAH" DO @crash(str$) LOOP PROCEDURE crash(str$) str$="OHOH" RETURN +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Danksagungen: - Harald Ax fr DELITE, eine hervorragende GFA-Shell - Jankowski/Rabich/Reschke fr ihr "Profibuch", eine unverzichtbare Fundgrube. - Karsten Isakovic fr seinen 'SysMon', sowie Thomas Tempelmann und Johannes Hill fr den 'TempleMon' Beide Tools bekannt als 'The Programmers best friends' :-) - ATARI / Landon Dyer fr den 'MadMac'. - GENESIS fr 'Selling England by the pound' sowie 'Foxtrot' THE CURE fr 'Disintegrations' THE RED HOT CHILI PEPPERS fr 'Blood sugar sex magik' KING'S X ½ 1992 (mit 'Black Flag') TEMPLE OF THE DOG fr ihr Debtalbum RAGE AGAINST THE MACHINE fr ihr Debtalbum BODY COUNT & ICE-T fr die Platte - Barbara fr die Erkenntnis, dass es ein Leben ohne Rechner gibt =:^} Viel Spass wnscht euch tschueeessschen, chris.