ABBUC Magazin 029

 

 

Vorwort

Liebe Bit Byter!

Diese Textbeilage wurde unmittelbar nach dem Versand des Sondermagazines # 11 erstellt. Die Urlaubsplanung der Druckerei zwang uns dazu. Aus diesem Grund konnte auch der C-Kurs diesmal nicht erscheinen. Schwerpunkt ist in dieser Ausgabe das Thema Speicherweiterungen.

Auf der beiliegenden Diskette findet Ihr zu diesem Thema einige Programme. Besonders möchte ich Euch jedoch auf das neue Spiel von Jirí Bernásek 3-D TETRIS (PC-Besitzern auch als BLOCKOUT bekannt) hinweisen.

Auf der Rückseite findet Ihr ein neues Textausgabeprograrnm, das hochkomprimierte Texte ausgeben kann. Bitte testet es aus und teilt uns Eure Ausdruckprobleme mit. Dazu ist es erforderlich den Druckertyp anzugeben und die Druckmängel zu beschreiben.

Weitere wichtige Nachrichten lest bitte im LESER.BAS auf dem Magazin nach.

Viel Spaß beim Lesen und ausprobieren der Proqramme wünscht Euch Euer

Wolfgang

© 1992 by Atari Bit Byter User Club e. V.

 

Datenbank für ABBUC Programme

 

Turbo 816

Ergänzung zu dem Bericht im ABBUC Magazin 28 Autor Andreas Witte

Wie mir scheint entstehen viele Ungereimtheiten, da sich niemand vorher mit der ureigentlichsten Sache, nämlich dem Prozessor selbst, befaßt hat und man einfach etwas erwirbt, einsteckt und…?, feststellt, daß es nicht so läuft wie man sich das vorgestellt hat. Zunächst einmal ist festzustellen, daß es leichter ist eine neue Prozessorkarte mit einer neuen CPU zu entwickeln, als ein bestehendes System zu erweitern.

Nachfolgend will ich versuchen einige Punkte zu erläutern, in der Hoffnung den „816ern“ damit weiterhelfen zu können.

Die Möglichkeit zum Umschalten zwischen Native und Emulationsmodus besteht durch Opcode XCE, je nachdem wie der Prozessor hardwaremäßig am Emulationsbit(E) verdrahtet ist. Durch XCE wird das Carrybit mit dem E-Bit vertauscht. Beispiel:

65816-Modus, dann ist E=0 (native).

SEC

-> Carry = 1

XCE

-> damit wird E=1 und der Emulationsmodus ist eingeschaltet.

umgekehrt

CLC

-> Carry = 0

XCE

-> 16 Bitmodus.

Der Emulationsmodus ist allerdings nur bedingt hardwaremäßig kompatibel zum 6502 und 65802, da der 816 eine etwas andere Pinbelegung und abweichende Vektoren für die lnterrupts besitzt. Zum ATARI-Prozessor 65C02 ist er damit noch weniger kompatibel.

Eine weitere gravierende Abweichung besteht darin, daß der 816 keine Zeropage-Adressierung mehr kennt, der Stackpointer 16bit breit ist, dieser sich zwar immer in Bank 0 ($0 – $FFFF) befindet, aber nicht zwingend im Bereich $100 – $1FF!

Der Programmierer muß darauf achten, daß sich Stack und Direktbereich nicht Uberschneiden. Deshalb ist keine Kompatiblität gegeben. Ich könnte mir vorstellen, daß man mit einem 816, hardwaremäßig angepaßt an den 65C02 (ist durchaus zu realisieren, geänderten Interruptvektoren im Originalbetriebssytem und einem an das ATARI-Betriebssytem angepaßten 816er Betriebssytem, verpackt in einem zweiten EPROM, umschaltbar über einen (mechanischen) Schalter eine optimale Lösung erzielen könnte. Das ist keine Schleichwerbung oder Utopie, sondern eine realistische Schlußfolgerung nach Analyse der technischen Gegebenheiten und des Marktes.

Anmerkung: Das ATARI-Betriebssytem ist bis auf einige Ausnahmen sehr sauber programmiert und zeichnet sich gegenüber anderen Betriebssytemen durch enorme Flexibilität und Ordnung aus.

Zur Beschleunigung des 816 möchte ich folgendes anmerken:

Prinzipiell ist eine Taktfrequenz bis ca. 6 MHz möglich. Es ist allerdings zu berücksichtigen, daß alle anderen Bausteine nur mit rund 2 MHz betrieben werden können. Das bedeutet, daß der Prozessor (nur dieser kann mit der hohen Frequenz arbeiten) bei jedem Zugriff auf IO-Adressen gebremst werden muß. Inwieweit hier eine Geschwindigkeitssteigerung zum Tragen kommt, ist nur schwierig abzuschätzen; zum anderen ist auch ein beträchtlicher Hardwareaufwand zu berücksichtigen, der finanziell zu Buche schlägt.

Ich hoffe, daß mit diesen Zeilen einige Unklarheiten beseitigt sind. Sollten sich weitere Fragen ergeben, so werde ich versuchen, diese zu beantworten. Hier meine Anschrift:

Gunter Pfannmüller
Fichtenstraße 12
6360 Friedberg 1

Ciao, Gunter

 

Waltraud’s Spielecke

Hallo,

da in dieser Jahreszeit Euer Geld für die Badeanstalt und den Urlaub verpulvert wird und nicht für die Anschaffung neuer Spiele, ist die Zeit reif für den Griff in die verstaubte Spielesammlung. Und da greifen wir uns heute das Grafik-Adventure

Mask of the Sun

heraus. Leider ist dieses schöne Spiel nicht mehr erhältlich. Aber hier und da wird es vielleicht noch ungelöst vor sich hindämmern und wir benutzen die bestimmt kommenden regenreichen Tage, um es mit neuem Leben zu füllen.

Ein Tip vorweg: Manche Kommandos muß man sehr schnell eingeben, sonst ist man tot. Also häufig den Spielstand speichern!

Wir befinden uns in einem Flugzeug nach Mexiko, das wir verlassen, um mit einem Professor und seinem Assistenten zusammenzutreffen. Hier erhalten wir unsere Aufgabe und der Professor gibt uns eine Karte, die wir studieren und mitnehmen. Mit Raoul besteigen wir einen Jeep und fahren nach Westen. Eine Hütte, aus der Flötentöne erklingen, macht uns neugierig, doch vorher nehmen wir das Essen aus dem Jeep mit. Vielleicht kann man hier bei Tafelmusik futtern! Ja denkste! Die alte Frau sieht so verhungert aus, daß wir ihr voller Mitleid unser E
ssen geben. Zum Dank erhalten wir die Flöte mit dem Hinweis, daß Musik wilde Tiere besänftigen kann.

Wir gehen wieder zum Jeep und fahren nun in nordwestlicher Richtung, dann nach Westen. Jetzt stehen wir vor einer Pyramide, nehmen alles aus dem Jeep und klettern hoch. Bevor wir hineingehen, zünden wir ein Streichholz an und damit die Laterne. Das Zischen einer Schlange darf uns vor Schreck nicht erstarren lassen – schnell erschiessen. Wir befinden uns jetzt in einem Raum mit scheinbar zwei Ausgängen.

Nicht beachten, es sind Sackgassen! Wir untersuchen lieber die Plattform und finden einen Riß, der sich als Tür entpuppt, wenn man dagegen drückt. Wir gehen vor (nicht rechts oder links) und befinden uns in einem Raum mit einer Jadeschale. Als wir diese an uns nehmen, sausen wir abwärts und sind ein Stockwerk tiefer. Keine Knochen gebrochen? Na, dann weiter geradeaus und nach rechts. Brrr… eine Sargkammer! Aber da wir auf der Suche sind, müssen wir uns überwinden und alle Särge untersuchen. Einer läßt sich öffnen – o Graus – ein Geist erscheint. Da er einmal da ist, können wir ihn auch etwas fragen. Er gibt uns einen Tip, dann verdünnisiert er sich in sein Geisterreich und wir nehmen die Goldschale an uns. Jetzt gehen wir zurück und zur Abwechslung mal nach links. Hier stehen zwei Podeste und auf dem linken eine Urne. Rechts davon je- doch ist eine Silberschale, die uns mehr anlockt. Als wir sie an uns nehmen wollen, greifen Skelette an (die reinste „Totenpyramide“). Mit dem Amulett zerstören wir sie (kämpfe mit Amulett) und nun ist die Schale unbewacht und wir können sie nehmen. Im Raum mit den Podesten zurück, nehmen wir die Urne vom linken Podest und stellen sie auf das rechte. Nun ist der Weg nach draußen frei.

Wir steigen in den Jeep und fahren nach Südost. Bald treffen wir auf eine Jaguarstatue. Unser Motor streikt hier (vor Schrecken?), wir haben also Zeit, uns umzusehen und unter- suchen die Statue. Vorher legen wir alles, außer den Pillen, ab. Wir entdecken eine Inschrift, die uns ein Kennwort für den späteren Spielverlauf nennt. Nun nehmen wir den Kopf der Statue und stellen ihn darauf. Nicht mehr kopflos, erwacht der Jaguar zum Leben und trabt von dannen. Nachdem wir alles wieder an uns genommen haben, fahren wir mit dem Jeep (der nun keine Angst mehr vor dem Jaguar haben muß) nach Süden und dann nach Westen.

Dem Knülch geben wir nichts, soll er sein wertloses Gesöff allein saufen! An der Weggabelung fahren wir nach Südwesten und treffen hier auf die zweite Pyramide. Als wir sie betreten, wird uns bald schlecht, denn wir müssen erst durch einen Kotraum. Schnell wenden wir uns nach rechts und untersuchen die Tür. Ein goldener Schlüssel ist unser! Mit diesem öffnen wir die Tür zum Raum mit dem Block, den wir verschieben. Der schwarze Schlüssel wird mitgenommen. Im Raum links vom Eingang zerschneiden wir einfach die gräßlichen Spinnweben und finden dort den dritten silbernen Schlüssel. Eine Treppe lädt uns ein in die tieferen Gründe zu steigen. Das ist ja ein feines Labyrinth!

An der ersten Weggabelung gehen wir nach links, an der nächsten geradeaus und dann nach rechts. Hier befindet sich ein Pool. Nix baden! Nur reinschauen! Ahhh…, das war genau richtig. Wir haben eine Vision und erhalten wertvolle Hinweise für die Sonnenmaske.

Nun verlassen wir auf demselben Wege die Pyramide wieder und fahren in Richtung Nordost, Nordwest und Nord. Mit Raoul‘s Hilfe können wir uns der Banditen entledigen und treffen im Westen bald auf die dritte Pyramide.

Klettern wir mal wieder aus dem Jeep und nähern uns dem Bauwerk. Hier soll ja nun die Maske des Sonnengottes zu finden sein – aber zwischen den schwierigsten Rätseln verborgen. Habt Ihr noch Lust? Ihr werdet doch wohl jetzt, da es erst richtig spannend wird, den Spaß an der Freud nicht verlieren?

Wir gehen hoch und klettern dann durch das Loch nach unten. Dort angelangt, gehen wir zweimal nach vorn und treffen auf einen sterbenden Mann, der uns ein paar Tips gibt, bevor er sich auflöst (Hier müssen wir unbedingt den Spielstand speichern!).

Dann gehen wir weiter und kommen in einen Raum mit grünem Giftgas. Hier sind wir ganz, ganz schnell und rennen in Richtung Südwesten. Wenn wir vorher eine Pille genommen haben, können wir auch hier den Spielstand abspeichem (empfehlenswert!). Leider muß Raoul hier den Löffel abgeben (er war eben nicht der schnellste). Und nun kommt der gemeinste Ort im ganzen Spiel. Am Lavastrom müssen wir uns den Rhythmus der Felsbrocken merken und in dem Moment, in dem der Brocken auftaucht (man muß es fast erahnen), auf RETURN drücken, um hinüber zu kommen. Wenn wir es geschafft haben, speichern wir unbedingt den Spielstand, um mit diesem Problem nicht mehr konfrontiert zu werden!

Im nächsten Raum gibt es eine kleine Warnung „von oben“. Nun, kein Problem – wir haben uns das Wort doch gemerkt, das auf der Jaguarstatue stand, oder? Nun können wir passieren und gehen geradeaus, bis wir vor dem Altar stehen.

Den sehen wir uns genau an und finden, daß das Amulett genau in die Öffnung paßt. Also legen wir es in das Loch. Der Altar öffnet sich und wir sehen die Sonnenmaske. Von unserer Vision am Pool wissen wir, daß es nicht die richtige ist und untersuchen den Altar. Dabei finden wir eine zweite Maske, die wir an uns nehmen. Die falsche löst sich auf. Wir treten nun zurück und setzen die Maske auf. Jetzt können wir einen Ausgang erkennen, durch den wir den Altarraum nach Westen verlassen. An den Bildern vorbei kommen wir zum Abbild der Sonne, welches uns ein Rätsel stellt. Wir dürften dreimal raten, aber da wir ja geschulte Abenteurer sind, geben wir sofort die richtige Antwort ein: G R A B (engl. grave).

Wir kommen nun durch ein kleines Labyrinth (rechts, links, links, links, rechts). Hier stürzt einem buchstäblich die Decke auf den Kopf! Aber wir kommen ungefährdet durch. Und nun wird es richtig gemein. Durch dieses Labyrinth kommen wir nur hindurch, wenn wir vor jedem Schritt die Maske aufsetzen („trage Maske“ in engl. „wear mask“) und dann in eine beliebige Richtung gehen. Nach etwa einem Dutzend Schritte haben wir das Labyrinth durchquert. Nicht aufgeben, wenn sich zwischendurch kein Erfolg einstellt! Das Labyrinth ist auf jeden Fall nach ca. 12 Schritten zu Ende.

Zum Donnerwetter! Kann es sein, daß am Ende alles umsonst war? Denn hier erwartet uns Roboff der Bandit, in einem Hinterhalt und fordert die Maske. Nicht lange überlegen und die Maske sofort geben („lege Maske“ ganz schnell!). Plötzlich erscheint der Jaguar und zerfleischt Roboff. Bevor er uns ans Leder will, spielen wir auf der Flöte (danke, alte Frau!). Der Jaguar verschont uns und die Pyramide verschwindet. Wir sind zwar ohne Maske, haben aber ein tolles Abenteuer erlebt!

Alptraum (Tips)

  1. Im Schilf ist immer etwas zu finden und auch kleine Boote haben ihre Geheimnisse.
  2. Wenn man einen sperrigen Gegenstand bei sich hat, kommt man über die Brücke.
  3. Oft bringt Mut etwas! Ist man unten, sollte man den Boden untersuchen.
  4. Eine Gefangenschaft kann auch ihr Gutes haben. Ein kleiner Plausch mit dem Häuptling hilft weiter.
  5. Sage ‚JA‘ – auch wenn es schwer fällt, trenne dich von kostbaren Gegenständen.
  6. Ein Affe gibt einen guten Köder ab. Doch mit Messer und Speer kann man ihn nicht erlegen. Auch auf den Baum klettern und fangen bringt nichts. Versuche es doch mal mit Steinewerfen.
  7. An der Tränke kann man ein Raubtier immer fangen, vor allem, wenn ein Köder ausgelegt ist und ein Fangeisen dort liegt.
  8. Jetzt hat man etwas anzubieten. Man erhält seine Klunker zurück und sogar der Weg zum Hafen wird gezeigt.
  9. Für Schmuck kann man (fast) alles haben – aber nicht zuviel geben.
  10. Ein guter Rat: Lies die Zeitung!
  11. Laufe lieber, es bewahrt dich vor Verlust. Faulheit ist nicht immer richtig!
  12. In der Bank geben sie dir „Mäuse“, wenn du deine Steinchen eintauscht.
  13. Kaufe dir geeignetes Werkzeug, damit du irgendwo rei
    nkommst.
  14. Jetzt ab ins Büro (N, O, O). Alles untersuchen und auch die verbrannten Papierschnipsel lesen.
  15. Mit Wut im Bauch nun zur Firma Engel. Das sind ganz und gar keine Engel! Darum nicht erst höflich anklopfen, sondern die Tür anders öffnen. Hast du nicht eine Pistole? Ja was sieht man denn da…?

Cheats:

Monster Hunt:

Editor: Sektor 290 Byte 18 von 03 in FF = 255 Leben
Sektor 280 Bytes 121; 122 von E9; 01 in EA; EA = unendlich Leben

 

Space Rider:

Editor: Sektor 83 Byte 115 von 03 in 09 = 9 Leben
Sektor 94 Bytes 111; 112 von E9; 01 in EA; EA = unendlich Leben.
Freezer: $AE9D = Leben verändern

 

Nachtrag zu „Yogi’s Great Escape“:

Freezer: $5965: $AD und dazu
$5970: $AD = unendliche ZEIT!

Ich will an dieser Stelle mal etwas sagen: Die meisten Cheats bekomme ich in letzter Zeit   n i c h t   von ABBUC-Mitgliedern, sondern privat von guten Freunden. Sie werden mir uneigennützig für meine Spielecken zur Verfügung gestellt, dadurch profitiert Ihr alle. Wie wäre es, wenn auch Ihr Euch mal anstrengt und mir für   E u r e ! !   Spielecke etwas schicken würdet?! Vielleicht findet Ihr selbst etwas heraus, vielleicht hört Ihr mal etwas von einem anderen. Ihr seid doch keine Nassauer, die alles umsonst haben wollen, oder?

Ich wünsche Euch allen eine schöne Sommerzeit. Laßt Euch nicht den Pelz verbrennen…

Waltraud

1 MB RAM Erweiterung

Hersteller: Newell Industries
Kosten: Ca. 160 DM
Bezug: American Techna Visions
15338 Inverness St.
San Leandro, CA. 94579, USA
Preis: ca. 40 Dollar + Porto usw. ohne RAM’s (511000-80)

Technische Informationen
Der Refresh

Das /RAS geht ununterbrochen an Pin 3 des 511000 (= /RAS INPUT).

/CAS steuert den Select-Eingang eines Multiplexers (74LS158) für das Mpxen der zusätzlichen Adressleitungen aus den PIA Leitungen:

    PB1 >< PB5 -> XA9
    PB6 >< PB7 -> XA8

/CAS und /REF gehen an die 2 Eingänge eines UND-Gatters, so daß am Ausgang ein quasi gemultiplextes Signal zur Verfügung steht, welches noch einmal durch ein UND-Gatter gejagt wird, damit eine weitere Verzögerung von 10 ns entsteht.

 

BASIC und Selbsttest

Die Logik für die BASIC- und Selbsttestumschaltung habe ich vor ca. 1.5 Jahren entwickelt und in ein GAL brennen lassen. Der Grundgedanke dabei war folgender: BASIC und der Selbsttest werden nie gleichzeitig mit den RAM-Bänken benötigt. Der Selbsttest nicht, weil er im gleichen Speicherbereich liegt und BASIC nicht, weil ich kein Programm kenne, daß die RAM-Bänke direkt vom BASIC aus beschreibt, sprich poke-t. In der Regel wird eine Ramdisk angesprochen, und die wird vom DOS verwaltet.

Wenn man nun einmal im DOS ist, ist es egal, ob BASIC an oder aus ist. Nur bei der Rückkehr muß es vorhanden sein. BASIC und der Selbsttest können also immer aus sein, wenn Zugriff auf die RAM-Bänke stattfindet, woraus sich folgende Formeln ergeben:

    /BASIC= /PB1 * PB4
    /SELECT= /PB7 * PB4

Man unterbricht also die Leitungen von der PIA zum BASIC und zum Selbsttest. Was jetzt kommt, gilt sowohl für PB1 als auch für PB7.

Von PB1/7 an beide Eingänge eines NAND, den Ausgang des NAND an einen Eingang eines zweiten NAND. An den 2. Eingang des 2. NAND kommt PB4. Der Ausgang ist jetzt das neue Signal für BASIC und den Selbsttest. Die neuen Signale entsprechen den alten, wenn kein Bankzugriff stattfindet. Bei Bankzugriff werden sie überlagert und schalten BASIC und den Selbsttest aus. Das funktioniert auch mit allem außer SDX. Offenbar sucht SDX das BASIC von eingeschaltener Bank aus.

Auf der 1 MB Ramdisk war nur die Schaltung für den Selbsttest verwirklicht. Aber es waren noch 2 Gatter frei, so daß ich den Teil für BASIC noch einbauen konnte (ein bischen Draht von unten).

 

Der ENGL-Freezer

Wie bekannt, hält der ENGL-Freezer (EF) den Rechner an, indem er zyklische Refreshsignale erzeugt. Da diese jedoch im /CAS Timing liegen, werden sie zwar von der CPU als Stopsignal verstanden, von den RAMs aber als Zugriff und nicht als Refresh. Damit ist der Datenbus aktiv, was, so glaube ich, mit dem ebenfalls aktiven Datenbus des EF zum Absturz des Rechners fürht.

Die Lösung wäre, den Refresh-Pin des ANTIC vom Rechner in eine Richtung zu entkoppeln. Der Refresh muß zwar rausgehen, es darf aber nicht der EF auf die 1 MB Ramdisk wirken. Also versuchen wir die Entkopplung mit einer Shottky-Diode, z. B. BAT43 oder BAT46. Nach der Diode ein geeigneter Pullupwiderstand und dann zum Rechner. Die 1 MB Ramdisk wird jetzt direkt am ANTIC angeschlossen. Der ANTIC Refresh wirkt jetzt auf den Rechner und die 1 MB Ramdisk. Dagegen verliert sich das Signal des EF an der Diode.

Refreshleitung bidirektional?

Da der EF das ANTIC-Signal vorher überschrieben hat, müßte der ANTIC eigentlich einen Open-Collector Ausgang haben, weil sonst ein Kurzschluß entstanden wäre. In diesem Fall müßte der Pullupwiderstand nicht nach, sondern vor die Diode, weil ja 1. im Rechner schon ein Pullup sein mußte, anderseits jetzt aber einer für die Leitung zur 1 MB Ramdisk erforderlich ist. Diese Schaltung habe ich noch nicht getestet. Kannst Du ja mal machen.

Euer …Floppydoc

Ehrard Pütz (-=[Atreju]=-)
Kleinsiepen 1
W-5608 Radevormwald
02195/4970

 

Floppyinterface

von Dieter Popp – W.A.F.

Das Floppyinterface von Erhard Pütz, kurz „HDI“ genannt, ist eines der interessantesten Hardwareneuheiten für den Atari 8-Bit.

Das HDI wird als Platine mit den kompakten Maßen 200 x 100 mm ausgeliefert. Ein Gehäuse ist im Lieferumfang nicht enthalten. Mit Abstandsbolzen wird direkt auf dem HDI ein Laufwerk befestigt. In meinem Fall ein Teac 3,5″ mit max. 1,44 MB. Dadurch bekommt das Ganze eine Höhe von ca. 5 cm.

Die Platine ist professionell hergestellt, alle IC sind gesockelt. Folgende Anschlüße sind vorhanden:

1 x die übliche serielle Atari Schnittstelle
1 x Stromversorgung (Klinkenstecker)
1 x 14 polige Din 14-S Buchse, wie sie z. B. am Atari ST benutzt wird.
1 x 14 poliger Stecker für Flachbandkabel, das die serielle Schnittstelle durchschleift.

An dem Floppyanschlußkabel, das am HDI herausragt, wird mittels Quetschverbinder die Floppy angeschlossen. Auf das Kabel können noch 3 Stecker aufgequetscht werden, so daß sich mit diesem (gleichen) Kabel insgesamt 4 Laufwerke anschließen lassen.

Angeschlossene Laufwerke werden unabhängig von ihrer Einstellung (0 – 3) aufsteigend ab D1: eingeordnet. Dies geschieht beim Kaltstart des Interfaces. Mit einem Schalter können die Nummern aller Laufwerke um 1 erhöht werden. Dadurch kann man eine normale 1050 als Laufwerk 1 anschließen und alle Laufwerke ab dem Interface sind als D2: Bis Dx: konfiguriert.

Wahlweise zum Shugart-Bus lassen sich über die Din 14-S Buchse 2 Laufwerke (von insges. 4) anschließen. Das HDI wird von einem WD 37C65 PL 00-02 Floppycontroller der Firma Western Digital bedient und unterstützt 4 Laufwerke. Ein Anschluß von beliebig gemischten Laufwerken ist möglich, wobei beachtet werden muß, daß fast alle 5 1/4″ Laufwerke mit 300 Upm rotieren, Atari 810 % 1050 jedoch nur mit 288.

Atari-Disketten können in der Regel gelesen und beschrieben werden. Auch mit dem HDI formatierte 5 1/4″ Disks können von einer 1050 gelesen und beschrieben werden. Dies wurde bis jetzt nur kurz getestet, sodaß dazu noch Erfahrungswerte gesammelt werden müssen. Besser wäre es, die Drehzahl von 5 1/4″ FDD auf 288 zu vermindern. Außerdem kann Erhard nicht garantieren, daß Programme von kopiergeschützten Disks funktionieren. Der Floppycontroller des HDI beherrscht keine Medium Density (auch nicht lesbar). Allerdings kann eine HD-Diskette im HDI mit 128 Byte/Sektor formatiert werden. Dies gibt 36 Sektoren/Track (bei MD sind es 26) und die Statusabfrage einer solchen Disk ergibt: Medium Density.

Das HDI arbeitet grundsätzlich mit jedem DOS zusammen. Dabei ist zu beachten, daß immer nur soviel Daten gespeichert werden können wie das DOS verwalten kann. Also mit den meisten DOS-Versionen nur Double Density. Abhilfe schafft hier MyDOS 4.5 und Sparta-DOS. Mit beiden DOS kann man 1,44 MB bewältigen. Nach dem Formatieren wird man mit „5760 Free Sectors“ belohnt, natürlich in Double Density. Allerdings ist dabei zu beachten, daß die Diskversion von Sparta-DOS nicht mit Turbo-Basic zusammenarbeitet. Deshalb verwende ich MyDos 4.5, das als PD erhältlich ist. Beide DOS-Versionen arbeiten mit Sub-Directories, welche bei dieser hohen Speicherdichte unerläßlich sind.

Für MyDos hat Torsten Karwoth ein Game Dos (Null Dos) geschrieben. Das Game Dos unterstützt die volle Diskkapazität von 1.44 MByte und High Speed I/O. Es belegt den gleichen Speicher wie der Speed Initializer von E. Reuss. Deshalb sollten alle Programme, die damit laufen, hier ebenfalls funktionieren. Unterverzeichnisse werden unterstützt. Von Torsten wurde bereits ein interessantes Hilfsprogramm für myDos geschrieben. Dadurch wird das DOS noch leistungsfähiger. Es handelt sich um eine Programmiersprache für das MyDos (s. ABBUC-Magazin # 28). Leider arbeitet das MyDos noch nicht mit dem eingebauten Speeder zusammen. Das wird aber bei der nächsten MyDOS Version geändert. Momentan programmiert Erhard noch ein HDI-OS, welches prinzipiell wie die Happy 1050 oder Speedy 1050 gelesene oder zu schreibende Sektoren im RAM des HDI speichert. Dies erhöht die Zugriffsgeschwindigkeit auch ohne High Speed bedeutend. Mit High Speed wird sie natürlich noch viel schneller. Außerdem wird im neuen Betriebssystem eine „Mini ROM-Disk“ eingebaut. Dadurch steht das MyDos sofort nach dem Einschalten zur Verfügung. In der ROM-Disk können noch zusätzliche Utilities untergebracht werden. Größe: 48 KB. Zusätzlich steht noch das Speedy-OS zur Verfügung. Damit arbeitet High Speed auch bei MyDOS oder Atari DOS.

Das HDI kann zwar die 1050 nicht ganz ersetzen, aber sobald die wichtigsten Programmen umkopiert sind, schaltet man die 1050 nicht mehr ein. Auf eine 3,5 “ Disk passen ca. 8 x 5 1/4 “ Disks die einseitig mit Double Density formatiert sind.

Ich bin mit dem HDI sehr zufrieden und habe noch nichts Negatives von anderen Usern gehört. Nachdem ich Erfahrungswerte sammle und an andere HDI-User weiterleite, kann das als Empfehlung gelten. Den Preis von 260 DM halte ich für angemessen. Weitere Infos können vom Entwickler angefordert werden. Auf einigen ABBUC-Magazindisketten ab Dez. 90 sind ebenfalls ausführliche Informationen zu finden.

Hier die Adresse:

Erhard Pütz
Kleinsiepen 1
W-5608 Radevormwald

P.S. Rückporto & Briefumschlag mit der Rückadresse nicht vergessen!

ANMERKUNG:

Die letzten 10 HDI werden gerade (03.05.1992) zusammengebaut. Davon sind bereits 7 vorbestellt. Eine Neuauflage meinerseits ist nicht geplant. Wenn ich meinen Bestand verkauft habe, kann von mir aus jeder das Ding nachbauen, sofern er im Falle einer Weitergabe darauf hinweist, daß es sich bei dem Nachbau um eben einen solchen handelt.

An der Software werde ich selbstverständlich weiterarbeiten, da ich fast nur noch mit dem HDI werke.

Erhard Pütz
Euer Floppydoc

 

Daisy Dot 3

Übersicht über die Steuerbefehle

\ Der Backslash geht jedem Befehl voraus, folgt außerdem einem Font-Befehl nach dem Font-Namen. Will man ihn ausgedruckt bekommen, muß man ihn zweimal eingeben.
\+Leertaste bewirkt eine Leerstelle, die bei Zeilenumbruch nicht getrennt wird.
\- bindet zwei Wörter oder Silben, die dann beim Zeilenumbruch nicht getrennt werden.
\F(Filename)\ Mit diesem Befehl kann ein neuer Font geladen werden. Nach dem \F kann erst die Drive-Nummer stehen, z. B. D8:. Der Extender kann entfallen. Nach dem Font-Namen muß ein zweiter Backslash stehen.
\L Text linksbündig drucken
\R Text rechtsbündig drucken
\C Text zentriert drucken
\J Text im Blocksatz drucken; die letzte Zeile eines Absatzes wird von DD3 erkannt und nicht im Blocksatz gedruckt.
\U Unterstreichen ein- bzw. ausschalten. Es werden nur Buchstaben oder echte Leerzeichen unterstrichen. Kopfzeilen, die mit den Befehlen \L, \C und \R erstellt wurden, werden nicht durchgehend unterstrichen.
\W(1 – 4) Breite des Buchstabenausdrucks. Normal ist 1. Überbreiten werden gebraucht, um Fonts, die mit FU.COM vergrößert wurden, in die richtigen Proportionen zu bringen.
\S(0 – 9 und A – J) Festlegung des Abstandes zwichen den Buchstaben. Normal ist der Wert 2. Für manche Schriften muß der Wert auf 0 gestellt werden, z. B. bei RIBBON.NLQ oder INVERSE.NLQ. Die Werte reichen von 0 bis 9 und A (= 10) bis J (= 19).
\D(D, L oder H) bestimmt die Dichte des Ausdrucks.
D steht für DRAFT. Man bekommt einen etwas breiteren, dünneren Ausdruck.
L steht für LOW. Dies ist der normale Ausdruck.
H steht für HIGH. Ma
n bekommt einen sehr dichten, aber sehr schmalen Ausdruck.
\XLnnn Dieser Befehl legt den linken Rand mit nnn/40 Zoll fest, wobei für nnn eine dreistellige Zahl eingesetzt werden muß, z. B. 040 = 40/40 Zoll = 1 Zoll.
\XRnnn Dies gilt entsprechend für den rechten Rand.
\XSnnn Dieser Befehl verschiebt den Druckkopf von der momentanen Position (also mitten im Text) um nnn/40 Zoll nach rechts, falls nicht vorher sowieso der rechte Rand erreicht ist. Für nnn ist eine dreistellige Zahl einzusetzen, z. B. 020 = 20/40 Zoll ist ½ Zoll.
\XAnnn Dieser Befehl verschiebt den Druckkopf auf eine bestimmte Position nach rechts, falls diese nicht sowieso schon überschritten ist und nicht jenseits des rechten Randes liegt. Er kann im Zusammenhang mit dem Tabulator gut benutzt werden, um eine Tabulatorposition exakt festzulegen. Für nnn ist eine dreistellige Zahl einzusetzen.
Einrücken eines ganzen Absatzes. Nur die erste Zeile wird nicht eingerückt. Nur in Zusammenhang mit Linksbündig oder Blocksatz!
\XHnnn Hier wird der ganze Absatz (außer der ersten Zeile!) um nnn/40 Zoll eingerückt, z. B. 060 = 60/40 Zoll = 1 ½ Zoll.

Tabulatoren

\E Alle gesetzten Tabulatoren werden gelöscht.
\P(L, C oder R) Hiermit wird eine Tabulatorposition festgelegt. Durch den zusätzlichen Buchstaben wird festgelegt, ob der Text ab dieser Marke beginnen soll (L), ob er hier enden soll (R) oder ob er um diese Position zentriert werden soll (C).
Anmerkung: Alle Tabulatorfestlegungen müssen innerhalb einer Zeile festgelegt werden.
\T Das folgende Zeichen, der folgende Text wird an die nächste Tabulatormarke gedruckt (entsprechend dem Befehl vorher: L, R oder C).
\. Ebenso wie der vorherige Befehl. Aber der leere Zwischenraum wird mit Pünktchen gefüllt.
\Z Dieser Befehl legt das Ende eines Textes nach dem vorausgehenden Tabulator-Befehl (\T) fest. Kann nur nach einem \T-Befehl stehen.
\N Seitenende: Die Seite wird an dieser Stelle beendet, eine neue angefangen. Dies wird auch in der Seitenzählung berücksichtigt!
Anmerkung: Dieser Befehl kann nur in einer eigenen Zeile, nach einem RETURN-Zeichen stehen.
\XTnn Dieser Befehl legt die Länge des oberen Seitenrandes fest. Für nnn ist eine dreistellige Zahl einzusetzen, z. B. 072 = 72/72 Zoll = 1 Zoll.
\XBnnn Dieser Befehl legt die Länge des unteren Seitenrandes fest. nnn = dreistellige Zahl, z. B. 072.
\XVnn Mit diesem Befehl kann der Zeilenabstand geändert werden. nn steht für eine zweistellige Zahl von 0 bis 33.
\HnnTextText(RETURN) Mit diesem Befehl kann eine Kopfzeile festgelegt werden. nn legt den Abstand zum oberen Rand der Seite fest (nn/72 Zoll). Der Text kann bis zu 80 Buchstaben oder Zeichen enthalten. Dieser Befehl kann nur am Anfang eines Files stehen, und zwar vor dem ersten Buchstaben, der gedruckt werden soll.
\GnnTextText(RETURN) Mit diesem Befehl kann eine Fußzeile festgelegt werden. Die zweistellige Zahl, die für nn einzusetzen ist, legt fest, welchen Abstand die Fußzeile zum unteren Rand haben soll (z. B. 72/72 Zoll = 1 Zoll). Dieser Befehl kann nur am Anfang eines Files oder direkt nach einem \N-Befehl stehen.
\X#nnn Mit diesem Befehl kann man bestimmen, daß die nächste Seite eine neue Seitennummer bekommen soll. Alle folgenden Seiten werden entsprechend weiternumeriert. Für nnn kann jede Zahl von 1 bis 255 eingesetzt werden. Dieser Befehl kann nur am Anfang eines Files oder direkt nach einem \N-Befehl stehen.
\# Mit diesem Befehl kann man nur innerhalb einer Kopfzeile oder einer Fußzeile bestimmen, daß alle Seiten durchnumeriert werden. Das Zählen übernimmt DD3.
\A(FILENAME.EXT)\ Mit diesem Befehl kann man ein weiteres Textfile anhängen und ausdrucken lassen. Die Seitenzählung wird fortgesetzt. Wichtig: Der zweite Backslash nach dem Filenamen darf nicht weggelassen werden

 

Anmerkung 1:
Dieser Befehl kann nur nach einem RETURN-Zeichen oder in der ersten Zeile eines Files stehen, und zwar vor dem ersten Buchstaben, der gedruckt werden soll.

Anmerkung 2:
Dieser Befehl kann nur in der ersten Zeile eines Files stehen oder direkt nach einem \N-Befehl.
Für den ABBUC zusammengestellt und ins Deutsche übertragen von Alfons Klüpfel.

Achtung:

DD3-Fonts mit deutschen Umlauten nur beim ABBUC!

 

SPEEDER PLUS OPERATING SYSTEM V.1.33N

Neuer Standard?

Auf der Hobbytronic kam ich in den Genuß eines neuen Betriebssystems für XL/XE. Die kurze Demonstration und das damit verbundene Gespräch überzeugten mich von der Leistungsfähigkeit und es ward mir gestattet, ein Exemplar davon zu erwerben; allerdings mit der Auflage, einen Test dazu für das ABBUC-Magazin zu schreiben.

Hier ist er also, der Test.

Immerhin gibt es schon einige, wenn nicht sogar Dutzende von verschiedenen Betriebssystemvarianten für XL/XE. Wozu also schon wieder ein neues? Will man dem ohnehin arg gebeutelten XL-User an’s auf das Ärgste gequälte Portemonnaie?

Weit gefehlt, wenn man solch üble Absicht vermutet. Das OS hat’s wirklich in sich.

Vor dem Spaß kommt der Einbau. Der geht wie üblich bei neuen OS-Versionen mit Austausch bzw. Ergänzung eines entsprechend gebrannten EPROMs ab.

Es leben die gesockelten Chips!!!

Ich habe mir die Mühe gemacht, das OS in ein 512er-EPROM zu brennen – zusammen mit 3 anderen OS-Varianten. So ist der XL einfach multifunktional.

Ein wenig für die Technik-Freaks. Das neue OS ist weitgehend kompatibel mit dem Standard-OS des XL/XE. Hier die Änderungen:

  • Selbsttest durch ein Menü ersetzt
  • Übertragung der Paddle-Register wurde entfernt
  • $3ED bis $3F7 werden vom OS belegt
  • Page 1 wird vom Universal Loader bei Boot- und BASIC-Programmen benutzt.
  • Der Beep-Ton wurde verändert.

Das Optionsmenü stellt eine Menge an Auswahlmöglichkeiten bereit. So kann man die logische Zuordnung der vorhandenen Laufwerke ändern, was das Booten von Drive 2 – 8 ermöglicht. Mit 8 ist leider nicht die RAM-Disk erreichbar.

Man kann die beliebten Freezer-Pokes eingeben, die angeschlossenen Laufwerke in High- oder Normalspeed ansprechen, den erstklassigen C:-Simulator einschalten, den Universal Loader aufrufen, ein zuvor in die Speichererweiterung geschobenes Programm zurückholen, im memopad-Modus ein wenig die Tastatur quälen, eine Run-Adress eingeben oder mit Quit das
Menü verlassen.

3 Features haben mich besonders beeindruckt:

Als erstes die wirklich gute Highspeed-Routine, die mit Speedy, Happy, US-Doubler und HDI harmoniert.

Die Baudratenregister werden darin ständig aktualisiert, sodaß keine Floppy mehr in die Normalgeschwindigkeit zurückschaltet. So lassen sich endlich auch bisher nicht zu speedende Programme in Highspeed fahren.

Dadurch lassen sich z. B. MyDOS, Austro-Programme (-> DOS 3), Mini Office II und etliche Bootprogramme endlich in voller Geschwindigkeit laden und benutzen.

Zum Zweiten finde ich es toll, daß im Speicher befindliche Programm freezen und in der RAM-Erweiterung ab $A0 abzuspeichern, dann ein anderes Programm benutzen und anschließend das erste aus dem RAM zurückrufen und weiter damit arbeiten/spielen zu können.

Bisher waren nur die Bit Byter, die einen Turbo-Freezer mit RAMDisk von B. Engl haben, dazu in der Lage.

Als drittes Feature hat mich der sehr gute C:-Simulator erstaunt. Er startet tatsächlich einige Programme, die andere Simulatoren bisher nicht in den Griff bekamen. Hier macht sich der Vorteil der Hardware gegenüber den Soft-Simulatoren bemerkbar. Leider verarbeitet er zur Zeit nur Sektoren von 128 Bytes Länge. Damit ist den Spielesammlern eine hoffentlich vorläufige Obergrenze von 360K (unter MyDOS auf dem HDI) gesetzt.

Damit genug! Alle anderen Features kann jeder Bit Byter spätestens auf der JHV bewundern, falls er nicht bis dahin schon das neue OS hat.

Damit zu einer noch offenen Frage. Wo kriegt man das OS her? Geplant war, es über den AMC (Hi Armin!) zu vertreiben. Der Erscheinungstermin ist mir nicht bekannt. Vielleicht weiß Wolfgang mehr und schreibt es irgendwo ins Magazin.

Resümee: Ein hervorragendes OS, das die Fähigkeiten des XL/XE noch besser zur Geltung bringt. Ich mag nicht mehr darauf verzichten. Hoffentlich kommen bald noch die avisierten Upgrades dazu heraus. Dann gibt es dazu auf dem XL/XE keine OS-Alternative mehr.

Good Byte,

Walter Lojek

 

Benutzung von Zusatz-RAM

Es ist wohl davon auszugehen, daß, wer einen „Kleinen“ Atari hat und ihn noch benutzt, er den Speicher von 64 K aufgerüstet hat. Den Anfang hat Atari selbst gemacht, als sie den 130XE mit einer 64 KB Erweiterung herausbrachten. Compy-Shop hat nachgezogen und eine 256 KB Erweiterung angeboten. Nun gibt es auch eine von der Firma Peters mit ebenfalls 256 KB. Über den ABBUC/Lojek gibt es eine Reihe von Erweiterungen, wobei die interessanteste die mit 192 KByte sein dürfte. Dies ist nur ein kleiner Überblick über die RAM-Erweiterungen.

Wie geht man nun damit um? Meistens werden sie als RAM-DISK gebraucht. Aber ist das alles? Natürlich nicht! Die Programme „Hires-Dump“, „Small Printery“ und der Assembler von Torsten Karwoth machen deutlich, daß es auch noch andere Möglichkeiten gibt. Aber wie lassen diese sich nutzen? Was ist dabei zu bedenken? Auf diese Fragen soll hier nun eingegangen werden.

1. Technisches

Der Atari hat eine PIA (6520), die zur Hälfte für die beiden Joystickports gebraucht wird und dann noch für interne Schaltzwecke (OS- und Basic-ROM) eingesetzt wird. Dabei wird sie jedoch nicht ganz ausgelastet. Es bleiben noch 4 Bits des 2. Ports frei. Diese werden nun zum Schalten der Erweiterungen herangezogen.

Relativ einfach lassen sich 2 ^ 4 = 16 Konfigurationen erhalten. Diese werden dazu benutzt, um 16 kB lange Bänke in den Bereich zwischen $4000/16384 und $7FFF/32767 einzublenden.

  • 4 beim 130 XE
  • 16 bei Compy-Shop u. Peters
  • 12 bei ABBUC/Lojek

Wie geschiet das? Port 2 der PIA hat die Adresse $D301/54017. In diese wird „einfach“ der entsprechende Wert für die jeweilige Bank gepoket. Dann steht im Bereich von $4000 – $7FFF nicht mehr das „normale“ RAM (im folgenden NORM-RAM) des Rechners, sondern das zusätzliche (im folgenden Z-RAM zur Verfügung.

    Beispiel:

  • Poke 54017,237 schaltet die 1. Bank ein.
  • Poke 54017,253 schaltet das Rechner-RAM wieder ein. Normalwert unter Basic ist 253.

 

2. Theoretisches

Bevor man loslegt, muß man wissen, welche Bänke überhaupt zur Verfügung stehen. Aus der beigefügten Liste kann man die Werte für die Bänke vom 130er bis zur 256 kB-Erweiterung entnehmen. Wer unter Turbo-Basic arbeitet muß zum Basic-Wert jeweils 1 dazuaddieren.

Ein gewisser Standard sind die ersten vier Bänke. Sie sind bei allen diesen Erweiterungen gleich. Mit diesen läßt sich also am leichtesten arbeiten.

Wer also Bänke direkt nutzten will, muß dann bedenken, daß er diese dann nicht mehr als RAM-Disk benutzen darf!!! Turbo-Dos und MyDos haben über die Konfiguration (siehe jeweiliges Handbuch) die Möglichkeit, Bänke auszublenden. Wer mit DOS 2.5 arbeitet, muß entweder auf die Ramdisk verzichten und das Programm „RAMDISK.COM“ auf seiner Bootdiskette löschen oder – falls er mehr als 64 kB Zusatz-RAM hat – für seine Arbeit andere benutzen (z. B. ab Bank 5, Werte: 173; 169 …)

 

3. Praktisches

 

Doch nun genug der theoretischen Vorrede! Auf zur Praxis!

a) Atari-BASIC

Dieses Basic hat jeder zur Verfügung, aber es eignet sich nicht besonders gut, weil es keinen „MOVE“-Befehl hat. Will man Daten verschieben, so muß man das über Schleifen mit Peeks und Pokes tun.

Aber was soll’s? Wir machen es einfach.

10 GRAPHICS 8+16

20 COLOR 1:PLOT 10,10:DRAWTO 310,10:DR
AWTO 310,180:DRAWTO 10,180:DRAWTO 10,1
0

30 BILDADR=PEEK(88)+256*(PEEK(89))

40 POKE 54017,237

(Z-RAM einschalten)

50 FOR I=0 TO 7679

60 A=PEEK(BILDADR+I)

70 POKE 16384+I,A

80 NEXT I

(Bild-Daten ins Z-RAM. Man kann solange warten, was arbeiten oder über den Sinn des Lebens nachdenken, was übrigens keine schlechte Sache ist.)

90 POKE 54017,253

(NORM-RAM wieder an)

100 PRINT „Das war’s“

(Endlich)

110 END

 

So, nun ist der Bildschirm wieder auf Graphics 0 zurückgesprungen und das Bild ist weg! Wirklich weg? Eine kleine Bank im Z-RAM hört nicht auf, dem Bilderschwund Widerstand zu leisten.

Also das Ganze rückwärts:

10 GRAPHICS 8+16

(Bild ist hoffentlich leer!!!)

20 BILDADR=PEEK(88)+256*(PEEK(89))

30 POKE 54017,237

(Testfrage: Was passiert hier? Was, Du weißt es immer noch nicht? Solltest Du nicht lieber das Hobby wechseln und Büroklammern zählen?)

40 FOR I=0 TO 7679

50 A=PEEK(16384+I)

60 POKE BILDADR+I,A

70 NEXT I

80 POKE 54017,253

(Siehe Zeile 30)

90 GOTO 90

(Und siehe, das Bild ist wieder da! Oder?)

Aber jeder, der sich die Mühe gemacht hat, das Programm auszuprobieren, hat gemerkt, daß das keine große Zukunft hat. Also muß Maschinensprache her, die bekanntlich die schnellste Form des Rechnens ist. Hierzu habe ich eine „MOVE“-Routine aus irgendeinem Chip-Sonderheft gefunden („MOVE.LST“). Sie erreicht nun eine Geschwindigkeit, die das Arbeiten mit dem Z-RAM zum Vergnügen macht. Sie muß initialisiert werden und wird dann mit

MS=USR(ADR(MOVE$),Startadr,Zieladr,Länge)

aufgerufen. Zuvor muß man natürlich die entsprechenden Bänke ein- bzw. ausschalten. Das Programm ist über den „ENTER“-Befehl zu laden. So kann man es leicht zu bestehenden Programmen zuladen.

Beispiel:

5 GOSUB 1000:REM MOVE$ initialisieren

7 REM BILD IN Z-RAM SCHREIBEN

10 GRAPHICS 8+16

20 COLOR 1:PLOT 10,10:DRAWTO 310,10:DR
AWTO 310,180:DRAWTO 10,180:DRAWTO 10,1
0

30 BILDADR=PEEK(88)+256*(PEEK(89))

40 POKE 54017,237

50 MS=USR(ADR(MOVE$),BILDADR,16384,768
0)

60 POKE 54017,253

70 GRAPHICS 0

80 FOR I=1 TO 500:PRINT „ERHOLPHASE“:N
EXT I

100 REM BILD VON Z-RAM HOLEN

110 GRAPHICS 0

120 POKE 54017,237

130 MS=USR(ADR(MOVE$),16384,BILDADR,76
80)

140 POKE 54017,253

150 GOTO 150

999 REM *MS-Programm schreiben*

1000 DIM MOVE$(51):RESTORE 1020

1010 FOR A=1 TO 51:READ D:MOVE$(A,A)=C
HR$(D):NEXT A:RETURN

1020 DATA 104,162,0,104,149,212,104,14
9,212,232,232,224,6,208,244,165,216,24
0,20,162,0,160,0,177,211

1030 DATA 145,213,200,208,249,230,212,
230,214,232,228,216,208,238,160,0,177,
211,145,213,200,196,215,208,247,96

Eine andere Möglichkeit bietet das Programm „DMA130XE.COM/DMA130XE.LST/DMA130XE.SRC“. Die COM-Version kann vom DOS geladen werden, die LST-Version kann vom Basic aus „gENTERt“ und damit zugeladen werden. Das SRC-File ist der ATMAS-Sourcetext.

Dieses Progrämmchen legt sich in Seite 6 (Adr. $600/1536) und faßt die 4 Bänke des 130XE zu einem Block mit 64 kB zusammen. Der Vorteil liegt darin, daß man nicht auf die Bankgrenzen achten muß. Das Programm sucht selbst heraus, in welche Bank die Daten abgelegt werden bzw. von welcher sie geholt werden und schaltet am Ende auch wieder das NORM-RAM ein. Man kann jedoch nur max. 256 Daten auf einmal verschieben. Der Aufruf erfolgt mit:

X=USR(1536,MODUS,ZRAMADR,NORMRAMADR,LÄNGE)

MODUS 4 = lesen
8 = schreiben
ZRAMADR von 0 – 65535 möglich
NORMRAM keine von $4000 – 7FFFF.
sonst allge möglich; auch ADR(A$)
LÄNGE von 0 – 255
(wirkliche Länge um 1 größer!!!)
(siehe auch eigene Anleitung auf der Magazindiskette. D
ort findet Ihr auch die aufgeführten Prog.)

 

Beispiel:

12345678901234567890123456789012345678

10 GOSUB 32500

20 DIM A$(250)

30 A$=“ABCDEFGHIJKLMNOPQRSTUVWXYZ“</b></span></p> <p style=“margin-left: 40px; margin-top: 0pt; margin-bottom: 0pt;“>50 X=USR(1536,8,10000,ADR(A$),20)

(Die ersten 20 + 1 Buchstaben vom A$ werden ins ZRAM ab Adresse 10000 geschrieben.)

60 A$=““:A$=“                         “

 

 

(A$ gelöscht und für Daten vorbereitet)

70 X=USR(1536,4,10000,ADR(A$),10)

(Die ersten 10 + 1 Werte werden vom Z-RAM zurückgeholt und in A$ geschrieben.)

80 PRINT A$

(Ergebnis: ABCDEFGHIJK)

90 END

32500 REM DMA FUER 130XE-BAENKE

32506 RESTORE 32507:FOR I=1536 TO 1725:R
EAD
WERT:POKE I,WERT:NEXT I:RETURN

32507 DATA 104,104,104,141,255,6,104,133

32508 DATA 205,133,207,104,133,204,133

32509 DATA 206,104,133,209,104,133,208

32510 DATA 104,104,141,254,6,173,1

32511 DATA 211,141,252,6,120,173,255

32512 DATA 6,201,4,208,3,76,91

32513 DATA 6,201,8,208,3,76,59

32514 DATA 6,173,252,6,141,1,211

32515 DATA 88,96,160,0,32,123,6

32516 DATA 32,132,6,177,208,140,253

32517 DATA 6,160,0,145,208,172,253

32518 DATA 6,204,254,6,240,223,200

32519 DATA 32,172,6,76,61,6,160

32520 DATA 0,140,253,6,32,123,6

32521 DATA 32,132,6,160,0,177,206

32522 DATA 172,253,6,145,208,204,254

32523 DATA 6,240,191,200,32,172,6

32524 DATA 76,93,6,165,205,9,64

32525 DATA 41,127,133,207,96,165,205

32526 DATA 41,192,201,0,208,6,162

32527 DATA 239,142,1,211,96,201,64

32528 DATA 208,6,162,235,142,1,211

32529 DATA 96,201,128,208,6,162,231

32530 DATA 142,1,211,96,162,227,142

32531 DATA 1,211,96,24,165,204,105

32532 DATA 1,133,206,133,204,169,0

32533 DATA 101,205,133,205,24,96,0

 

Man kann auch den Test machen und nach der „Primitivmethode“ per PEEK 54017 die Daten ab Adresse 10000 ansehen. Adresse 10000 liegt noch in der ersten Bank!

POKE 54017,237:FOR I=0 TO 21:PRINT CHR$(
PEEK(10000+I):NEXT I:POKE 54017,253

Man kann auch Bildschirme verschieben:

z. B. Graphics 8:

10 FOR 0 TO 7679 STEP 256

20 X=USR(1536,4/8,ZRAMADR+I,BILDADR+I,25
5)

30 NEXT I

 

b) Turbo-Basic

Einfacher geht es mit Turbo-Basic. Hier ist der MOVE-Befehl schon Teil des Befehlssatzes. Die Bänke werden wie unter Basic ein- bzw. ausgeschaltet. Jedoch ist die Rechner-Konfiguration unter Turbo-Basic anders. Das OS und das Basic ist abgeschaltet, was sich dadurch äußert, daß man eigentlich die jeweiligen Bank-Werte um den Wert 1 erhöhen muß, denn:

  • Basic:
    OS ein => Bit1 = 1
    Basic ein => Bit2 = 0 (!!!)
    macht zusammen (1 * 2 ^ 0) + (1 * 2 ^ 1) = 1
  • Turbo-Basic:
    OS aus => Bit1 = 0
    Basic aus => Bit2 = 1
    macht zusammen (0 * 2 ^ 0) + (1 * 2 ^ 1) = 2

    => alle Bankwerte sind in Turbobasic um 1 größer.

Aber große Überraschung:

POKE 54017,237 und dann PRINT PEEK(54017) ergibt unter Turbo-Basic nicht wie erwartet 237, sondern 238. Das Turbo-Basic sorgt per Interrupt ständig für die richtigen Werte von Bit 1 und 2 der PIA. Sie werden immer dazumaskiert. Also kann man theoretisch auch mit den Bankwerten vom „normalen“ Basic arbeiten.

Ein Grundgerüst für den Einsatz des Z-RAM unter Turbo-Basic liefert das Programm „BANK.TUR“. Das Z-RAM-Testprogramm („ZRAMTEST.TUR“) testet alle 16 Bänke durch, indem es pro Bank zwei Graphics 7-Bilder schiebt und sie dann wieder zurückschreibt.

 

4. Probleme

 

Nun ist der Einsatz des Z-RAM leider nicht ganz so einfach, wie es die Beispiele zeigen scheinen. Das Problem ist der Basic-Speicher (siehe Skizze). Der Basic-Speicher umfaßt unter Graphics 0 ungefähr 32 kB. Er liegt zwischen DOS und Bildschirmspeicher. Genau dazwischen liegen die 16 kB, die auch von den Z-RAM benutzt werden. Darunter stehen etwa 8 kB und darüber auch ungefähr 8 kB zur Verfügung. Ein Basic-Programm füllt nun den Speicher von unten auf. Zuerst steht der Programmtext (—-) und immer dahinter stehen die Variablen, Strings etc. (****). Bei kurzen Programmen, wie bei den Beispielen gibt es keine Probleme, aber wenn das Programm länger wird bzw. schon wenn lange Strings definiert sind, können Textteile und/oder Variablen etc. im gefährdeten Bereich stehen, denn dieser Bereich wird ja beim Einschalten des Z-RAM ausgeblendet. Falls es sich um Daten handelt, die zum Schalten der Bänke oder zum Verschieben von Daten hinein bzw. hinaus, wichtig sind, stürzt der Rechner gnadenlos ab. Er findet sozusagen nicht mehr zurück. Falls möglich, kann man sich den Spaß machen und sein Programm LISTen. Es wird wahrscheinlich ab einer bestimmten Stelle nur noch Mist auf den Bildschirm bringen. Wenn man PRINT PEEK(54017) ausführt, merkt man auch die Ursache dafür: Es ist eine Z-RAM-Bank anstelle des normalen RAMs eingeschaltet. Also dann entweder POKE … (das müßte nun jeder selbst wissen) oder RESET drücken, dann bringt das OS die Sache selbst in Ordnung.

Also, was kann man tun? Doch wieder auf RAM-Disk umstellen? Manchmal ist das die sicherste Lösung, aber die Probleme sollten einen echten Atarianer nicht erschüttern. Man muß halt etwas mehr denken als normal.

Man kann z. B. als erste Stringdimensionierung und vor dem auftauchen der ersten Variablen, einen DUMMY$ definieren, der den Restplatz zwischen Basic-Text und Adresse $7FFF/32767 auffüllt. Dadurch stehen alle folgenden oberhalb von dem gefährdeten Bereich. Programmteile, die für den Datenaustausch zwischen Z-RAM und NORM-RAM wichtig sind, sollte man ganz vorne im Basic-Programm platzieren.

Falls man jedoch sehr lange Datenstrings definieren muß und viele Variablen hat, können die 8 kB zwischen Z-RAM und Bildschirmspeicher evtl. nicht ausreichen. Das Gleiche gilt auch dann, wenn man anstelle des Textbildschirms einen Hochauflösenden Graphik-Bildschirm (Graphics 7 und mehr) einschaltet. Dann „wandert“ nämlich die Bildschirmadresse drastisch der Z-RAM-Grenze entgegen. Falls das der Fall ist, muß man den DUMMY$ so dimensionieren, daß nur die für den Datenaustausch nötigen Variablen etc. oberhalb des Z-RAM liegen. Aber das ist nicht mehr ganz einfach.

Beim Turbo-Basic sind die ganzen Speicherbereiche verschoben. Unterhalb der Adresse $4000/16384 ist wesentlich weniger Platz als beim Atari-Basic. Dafür hat man oberhalb von $7FFFF/32767 einiges mehr an Speicher. Man ist also mit dem Programmtext sehr schnell im gefährdeten Bereich, dafür wirkt sich die Verwendung von Graphik-Bildschirmen nicht so drastisch aus. Man hat „oben“ wesentlich mehr Platz für Strings und Variablen.

Wichtiger Zeiger für die Länge eines Basic-Programms ist der Basic-MEMTOP. Man erhält ihn durch

A=PEEK(144)+256*PEEK(145).

Daraus erhält man die Länge des DUMMY$ für Fälle, bei denen das Basic-Programm in den Z-RAM-Bereich reicht:

DIM DUMMY$(32768-A).

 

5. Schlußbemerkungen

 

Das war nun zusammengefaßt das, was ich vom Z-RAM weiß. Eine Hilfe waren mir Walter Lojek und Peter Straif.

Vielleicht bekommen nun manche Mut, mit dem Z-RAM zu experimentieren. Meines Erachtens sollten sie sich zuerst einmal auf die vier Bänke des 130XE konzentrieren. Diese haben die Meisten. Ich versuche irgendwann einmal meine Karteiverwaltung für das Z-RAM umzuschreiben. Sie kann dann 250 Karteikarten direkt im Speicher halten. Aber es könnte sich ja mal jemand an eine Textverarbeitung setzen? 64 kB als Textspeicher? Wäre das nicht etwas? Für Leute mit mehr Z-RAM wäre dann auch eine Rechtschreibprüfung möglich. Wer wagt sich an solch ein Unternehmen?

Wir im ARGS werden (hoffentlich) versuchen, einige Routinen (DMA, MOVE) direkt ins Betriebssystem einzubinden. Bisher scheint der Platz des internationalen Zeichensatzes recht gut. Wer eine bessere Idee hat oder helfen will, bitte melden!!!

Roland Bühler
Engelgasse 21
7463 Rosenfeld-Bickelsberg
07428/1260

 

 

Dieses ABBUC Magazin erschien ursprünglich als Papierbeilage. Scan, OCR, Digitalisierung und Aufbereitung: Andreas Bertelmann