Skip to main content

mc das apple sonderheft

  • PublicationApple Periodicals
  • Pages100
  • Sourcemc-das-apple-sonderheft.pdf
← Magazines mc das apple sonderheft
/ 100
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
Text content (OCR)
DAS APPLE-F= SONDERHEFT . DOS-Organisation ‘ROM-Routinen Jede Menge Software! und di r > ry 4 © 3 a. e Hardw Vorwort Wenn im Titel dieses Sonderhefts abkiirzend vom ,,Apple“ die Rede ist, dann ist damit eigentlich der Apple-II gemeint — nicht nur einer der altesten, sondern gleichzeitig auch einer der langlebigsten und am haufigsten von Nachbauern ko- pierten Computer. Sicher gibt es inzwischen Gerite, die mit moder- neren Bauelementen in héher inte- grierter Technik aufgebaut sind als der Ur-Apple, so zum Beispiel die kompatiblen Gerite II-e und II-c desselben Herstellers oder die Computer von Blaupunkt, Basis und den zahlreichen meist taiwa- nesischen Kopisten. Doch setzte Apple damit einen Standard, wie man ihn héchstens noch mit dem IBM-PC vergleichen kann. Warum ist der Apple-II so langle- big? Vermutlich liegt das an sei- nem flexiblen Konzept, sprich, an den ,,Slots“, in die man Steckkar- ten fiir individuelle Anwendungen und Aufgaben einsetzen kann; dar- unter auch andere Prozessoren als den 6502, zum Beispiel die CPU Z80 fiir das Betriebssystem CP/M oder den 16-Bit-Prozessor 68000. Daher ist es fiir den Apple-Besitzer méglich, mit der fortschreitenden technischen Entwicklung Schritt ,zu halten, ohne sich dafiir regelma- Big einen neuen Computer kaufen zu miissen. (Leider hat Apple beim IIl-c das Slot-Konzept fallenge- lassen.) FHSS hat seit ihrem Bestehen re- gelmaBig Beitrége iiber den Apple- II ver6ffentlicht. Viele der fritheren Hefte sind allerdings langst nicht mehr lieferbar, obwohl die dort ab- gedruckten Programme und Hard- ware-Vorschlage nichts von ihrer Aktualitat verloren haben. So reifte der Entschlu8, den zahlreichen Apple-Benutzern endlich ein Kom- pendium von 4lteren und neueren Beitréagen zu ihrem Computer zu bieten, das nicht nur viele Informa- tionen enthalt, die Apple in seinen Handbiichern gewissenhaft ver- schweigt, sondern auch manche Problemlésung zeigt, die mit kei- nen oder nur geringen Anpassun- gen fiir den individuellen Anwen- der direkt einsetzbar ist. Zu manchen Beitragen gab es spatere Nachtrige, Erganzungen und Leserbriefe. Auch sie sind in diesem Sonderheft abgedruckt, da sie oftmals wertvolle Zusatzinfor- mationen enthalten und z. B. auf notige Software-Anderungen bei abweichenden Gerdatekonfiguratio- nen eingehen. So. Jetzt diirften Sie wohl erst mal fiir eine Weile beschiftigt sein... Tn Eile dtc, VOrwort 6 ois iia oie nore cene eine tie oe ace maiewioenecgie & 1 Grundlagen Apple-DOS: Arbeitsweise und Aufbau ........ 3 Vom Umgang mit Apple-Maschinenprogrammen ............-+ 34 ROM-Routinen des Applesoft-Basic-Interpreters Ein Blick in Apple-DOS 3.3 Hardware Tastaturpuffer fiir den Apple-II Logikanalysator als Apple-Zusatzeinheit . Apple lernt Kleinschrift 75 Mehr Leistung fiir Apple-II . 76 Apple-II: Diskettenkapazitat preiswert erhoht .. 77 Universal-Schnittstelle fiir Apple-II .......... 78 . 27 61 Software Apple macht Textdatei aus Speicherbereich ... 10 Apple-Grafik fiillt eine DIN-A4-Seite ...... Apple-TED — ein komfortabler Texteditor . . . Datenaustausch Felder schnell abgespeichert . . Mehr Platz auf Apple-Disketten Programmtext-Editor Priifsummen-Programm fiir den Apple-II . . . Relocator fiir den Apple-II..........-+ Spooler beschleunigt Druckausgabe . . Apple liest CBM-Dateien Apple-II auf Literatursuche . . wa 35 Apple-II lernt sprechen . 5 .. 38 Apple-II liest und druckt Strichcod: 41 Shapemaker spart mithsame Kleinarbeit....... 51 Strichcode drucken und lesen ~ 83 Apple-II liest Strichcode - . BB Apple-II steuert Fernschreiber ... 759 Apple-II sucht Bytes . 60 Autostart und Programmschutz fiir Apple-II-plus #5 82: DOS-Umschaltung beim Apple . 64 MX-80 druckt Apple-Grafik . 67 Priazises Paginieren per ,,PUT“ ... 70: V.24-Ein-/Ausgabe fiir den Apple ... 2.74 Kommunikation mit dem Apple-II .. we, 86) Bytefolgen schnell gefunden. . 89 Apple-Disk-Editor ... . . OFT Tips und Tricks Apple-Kniffe GroB- und Kleinschreibung ohne Shift-Taste ... 19 Gatalog-Stopp .iccn.ce riers 1 25 Nervenschonender Cursor fiir den Apple ...... 32 Apfel-Menii 232 ASCII-Zeichenfolgen sichtbar gemacht Centronics — ganz einfach .... Grafik mit dem MX-80 Step und Trace fiir Apple-II+ und Apple-Ile ... 63 Apple-Eigenheiten . 66 Listbare Autostart-Programme . 66 INGGHEPARE Es ccccaiy oro) etorese-oittew one Pe ereregere nieces 95 Produktanzeigen .. Umschlags., 12, 40 Impressum: 1984, Franzis-Verlag GmbH, KarlstraSe 37-41, D-8000 Miinchen 2. 3., verbesserte Auflage. Bearbeitet von der Redaktion der Zeitschrift (AMES. Fur den Text verantwortlich: Dipl.-Ing. (FH) Herwig Feichtinger. © Samtliche Rechte — besonders das Ubersetzungsrecht - an Text und Bildern vorbehalten. Fotomechanische Vervielfaltigung nur mit Genehmigung des Verlages. Jeder Nachdruck, auch auszugsweise, und jede Wiedergabe der Abbildungen, auch in verandertem Zustand, sind verboten. ISSN 0722-0022, Druck: Franzis-Druck GmbH, Miinchen, Printed in Germany, Imprimé en Allemagne. ZV-Art.-Nr. 89041 - F/ZV/1284/1086/5" Dr. Ralf Wiegandt Applie-DOSs: Arbeitsweise und Aufbau Die Uberwiegende Mehrheit der Apple-ll-Besitzer verwendet Dis- ketten zur Abspeicherung von Daten und Programmen und ist daher mit dem Disketten-Betriebssystem DOS (Disk Operating System) vertraut. Eine detaillierte Kenntnis der Vorgange bei der Diskettenverwaltung kann sich als sehr hilfreich bei der Erstellung von Maschinenprogrammen unter Benutzung von DOS-System- routinen, bei der ,,Reparatur“ von unlesbar gewordenen Disketten und bei der individuellen Anpassung des DOS an eigene Win- sche erweisen. Geschichte des Disketten-Betriebssystems Die Apple Computer Inc. stellte im Jahre 1978 mit der Einfiihrung des Disk-II- Laufwerks das ,,Disk Operating System“ (Version 3.1) zur Verfiigung. Zu diesem Zeitpunkt noch unausgereift, enthielt das Betriebssystem eine ganze Anzahl von Fehlern und war nur sparlich doku- mentiert. Im Zuge der Entwicklung des Apple-IL-Plus und des Autostart-ROM wurde daher bereits im folgenden Jahr eine neue Version vorgestellt. Obwohl sich DOS 3.2 in sehr vielen Ein- zelheiten von seinem Vorginger unte! schied, blieb die grundlegende Struktur weitgehend erhalten. Inzwischen war je- doch bereits ein 178 Seiten starkes Handbuch verfiigbar, welches den Ge- brauch der DOS-Kommandos ausfiihr- lich beschrieb und auch einige Einblicke in die interne Arbeitsweise vermittelte. DOS 3.1 und DOS 3.2 verwendeten das gleiche Aufzeichnungsformat mit einer maximalen Speicherkapazitat von 113,75 KByte pro Diskette. Durch eine geschicktere Methode der Abspeiche- rung konnte die Kapazitat einer Diskette mit der Einfiihrung der DOS-Version 3.3 im August 1980 um fast 25 % auf 140 KByte erhéht werden. Damit entspricht die Strukturierung des Disketteninhaltes unter der bisher letzten DOS-Version auch dem Format der anderen fiir Apple verfiigbaren Sprachen und Betriebssy- steme (Pascal, Fortran, CP/M). Selbstver- standlich stellte Apple mit dem neuen System auch die entsprechende Softwa- re zur Verfiigung, die es erlaubt, Disket- ten des alten Formats weiterhin zu lesen bzw. in das neue Format zu verwandeln. Datenspeicherung auf Diskette Zur Strukturierung des Disketteninhal- tes wird eine Diskette wahrend der In- itialisierung in Spuren und Sektoren eingeteilt. Spuren sind konzentrische Ringe auf der Oberfliche der Diskette, die durch ihren Abstand vom Mittel- punkt gekennzeichnet sind. Ahnlich wie der Arm eines Plattenspielers kann der Schreib-/Lesekopf des Diskettenlauf- werks iiber einer bestimmten Spur posi- tioniert werden. Prinzipiell kann eine Sektor Bild 1. So ist eine Diskette in Spuren und Sektoren aufgeteilt eintache 5-Zoll-Diskette maximal in et- wa 70 Spuren unterteilt werden. Apple- DOS faft aus technischen Griinden je- weils zwei mégliche Spuren zusammen und formatiert eine Diskette in 35 kon- zentrischen Ringen, die die Nummern 0 bis 34 tragen. Dabei bezeichnet 0 die auBerste Spur und 34 die innerste (bei Disketten, die einen besonderen Kopier- schutz tragen, wird gelegentlich auch ei- ne 36. Spur verwendet). Bild 1 zeigt die Lage der (fiir das Auge unsichtbaren) Spuren auf einer Diskette. Jede Spur ist in einzelne Sektoren aufge- teilt. Ein Sektor ist die kleinste Einheit, die mit einem Mal gelesen, geschrieben oder verandert werden kann, er enthalt genau 256 nutzbare Datenbytes. Apple unterscheidet zwei verschiedene Forma- te: Unter DOS 3.1 und 3.2 wird eine Spur in 13 Sektoren (numeriert von 0 bis 12), unter dem neuen DOS 3.3 in 16 Sektoren (0 bis 15) unterteilt. Eine DOS- Besonderheit ist die Tatsache, dal das auf den Disketten enthaltene ,,Index- loch“ nicht verwendet wird, um den er- sten Sektor einer Spur zu finden. Statt dessen wird ein Verfahren angewandt, welches es der Software erlaubt, ohne Hilfe der Hardware jede Spur und jeden Sektor aufzufinden. Dieses Verfahren (Soft Sectoring) ist zwar platz- und zeit- aufwendiger bei der Abspeicherung, er- laubt jedoch einen hohen Grad an Flexi- bilitat. Soft-Sektorierung Zur Verwaltung der Diskettenaufzeich- nung ist es notwendig, neben den Daten des Benutzers (256 Byte/Sektor) eine ganze Anzahl von Informations- und Steuerdaten auf der Diskette abzuspei- chern. Hierzu wird eine Spur in einzelne Felder aufgeteilt, die eine unterschiedli- che Anzahl von Bytes enthalten konnen. Es wird unterschieden zwischen den »Adreffeldern“ mit Informationen iiber Spur- und Sektornummer und den ,,Da- tenfeldern“, die im wesentlichen die Be- nutzerdaten in einer besonderen, ver- schliisselten Form enthalten. Zwei auf- einanderfolgende Felder sind jeweils durch eine Liicke getrennt, die aus einer Anzahl besonderer ,,Synchronisations- bytes“ besteht. Die Anordnung der AdreB- und Datenfelder auf einer Spur ist in Bild 2 dargestellt. Den Synchronisationsbytes in den Liik- ken zwischen den Datenfeldern kommt eine ganz besondere Bedeutung bei der Methode des ,,Soft-Sectoring“ zu. An- ders als gewéhnliche Datenbytes beste- hen sie nicht aus acht, sondern aus zehn einzelnen Bits, von denen die ersten acht den Wert 1 und die letzten beiden den Wert 0 haben. Durch diese besonde- re Struktur sind sie in der Lage, die Hardware mit den Datenbytes auf der Diskette zu synchronisieren. Physika- lisch ist eine Spur ja nichts anderes als ein kontinuierlicher Strom von einzel- nen Bits, und es gibt in der Tat zunachst keine Méglichkeit, festzustellen, wo ein Byte beginnt oder endet. Wenn das Lauf- werk den Befehl erhilt, Daten zu lesen, wird es irgendwo innerhalb der c 50000 Bits auf einer Spur damit begin- nen. Es wiirden jedoch nur dann die korrekten Daten iibermittelt, wenn der Startpunkt zufallig mit dem Beginn ei- nes Datenbytes identisch ist (die Wahr- scheinlichkeit dafiir ist aber gering). Diese Schwierigkeit wurde bei Apple auf folgende einfache Art gelést: Zu- nachst wird die Hardware so ausgelegt, dali sie als erstes Bit eines Bytes stets die 1 erwartet. Werden zunachst Nullbits angetroffen, so werden sie so lange iiber- lesen, bis eine 1 auftaucht (diese Kon- vention beschrankt natiirlich die Anzah] der méglichen Datenbytes auf 128!). Da- mit werden die erwahnten Synchronisa- tionsbytes ungeachtet ihrer beiden zu- satzlichen Nullen als Hexadezimalwert FF gelesen. Durch eine Folge mehrerer solcher Werte lassen sich die Liicken zwischen AdreB- und Datenfeldern ein- deutig erkennen. Die zwei zusatzlichen Bits bewirken, da der Lesekopf (unabhangig von sei- nem ,,Aufsetzpunkt“} nach héchstens fiinf Synchronisationsbytes immer ge- nau am Anfang eines neuen Bytes steht, so daf alle folgenden Daten korrekt in- terpretiert werden. Daf dieses Verfahren tatsiichlich in der beschriebenen Weise funktioniert, macht die Betrachtung der folgenden Bitsequenz deutlich, die fiinf Synchroni- sationsbytes darstellt: 1111111100111111110011111 1110011111111001111111100 Unter Beriicksichtigung der Tatsache, dab das erste Bit eines gelesenen Bytes den Wert 1 haben muB, ergeben sich hier —je nach dem Einsetzpunkt des Lesevor- gangs ~ die folgenden Byte-Inhalte (hexadezimal): a) Start beim ersten Bit EEE BE Rn b) Start beim zweiten Bit FE FF FF FF FF c) Start beim dritten Bit EG FF FF FF FF d) Start beim vierten Bit FO FE FY FF FP e) Start beim fiinften Bit F3 FC FF FF FF 4 f) Start beim sechsten Bit E7 F9 FE FF FF g) Start beim siebenten Bit CF F3 FC FF FF h) Start beim achten Bit OF E7 Fo FE FF Das neunte und zehnte Bit werden tiber- lesen, da sie nicht die Bedingung (An- fangsbit = 1) erfiillen, womit der Zyklus beendet ist. Man erkennt, dai unabhin- gig vom Startpunkt spiitestens nach fiinf Synchronisationsbytes eine korrekte Synchronisation erreicht ist. Die Grfie der Liicken zwischen den ein- zelnen Feldern ist von Spur zu Spur verschieden und auch abhingig vom verwendeten Laufwerk. DOS erzeugt zu- nachst grofe Liicken, welche dann so lange verkleinert werden, bis eine ganze Spur geschrieben werden kann, ohne sich selbst zu tiberlappen. Dabei ist je- doch wichtig, daB mindestens fiinf Syn- chronisationsbytes in jeder Liicke tibrig- bleiben. Das Adrefifeld Der Aufbau eines Adrefféldes ist in Bild 3 dargestellt. Es enthalt Informationen iiber das nachfolgende Datenfeld, (einge- rahmt von einem Vorspann Header), be- stehend aus den Bytes D5, AA, 96, und einem Nachspann (Trailer) mit den By- tes DE, AA, E5. Die Verschliisselung der Datenbytes geschieht so, dab die Bytes D5 und AA auBer im Header eines Fel- des nirgendwo vorkommen kénnen — sie sind reserviert. Am Auftreten dieser By- tefolge erkennt DOS also eindeutig den Beginn eines AdreB- oder Datenfeldes. Die eigentlichen Daten des Adrefifeldes werden abgeschlossen durch eine Priif- summe, die aus den vorangegangenen Daten gebildet wird und zur Uberprii- fung der Richtigkeit der gelesenen Daten herangezogen wird. Das Datenfeld Das Datenfeld besteht, wie das Adreb- feld, aus einem Header, den Daten, einer Priifsumme und einem Trailer (Bild 4). Der Header unterscheidet sich nur durch das letzte Byte (AD) von dem des Adrefi- feldes. Wie bereits erwahnt, ist die Apple-Hard- ware so ausgelegt, dafi nicht alle 256 méglichen Bytes von der Diskette gele- sen werden kénnen. Dies bedeutet, dal die Benutzerbytes codiert werden miis- sen, wozu DOS 3.3 zwei verschiedene Verfahren verwendet. Das erste wird im Adrefifeld benutzt und besteht darin, ein Datenbyte in zwei Diskettenbytes zu zer- legen, von denen eines die ungeraden und das andere die geraden Bits enthilt. Ein Datenbyte DB = ABCDEFGH wird also zerlegt in die beiden Bytes: B1 = 1A1C1E1G B2 = 1B1D1F1H. Man kénnte somit eine eindeutige Um- rechnungstabelle angeben, die folgen- dermafien aussihe: 00 — AA AA FC — FE FE 01 — AA AB FD — FE FF 02 — AB AA FE — FF FE 03 — AB AB FF — FF FF Der Nachteil dieser Art der Verschliisse- lung besteht darin, daB man zur Abspei- cherung von 256 Datenbytes 512 Disket- tenbytes bendtigt, so dab eine Spur héchstens zehn Datensektoren aufneh- men kénnte. Das ergabe eine Speicher- kapazitét von etwa 88 KByte/Diskette, also etwa 60 % des unter DOS 3.3 tat- sachlich verfiigbaren Speicherplatzes. Zur Verschliisselung der Bytes im ei- gentlichen Datenfeld wird deshalb eine andere Methode angewandt, die als ,,6- zu-2-Codierung’ bezeichnet wird (iltere DOS-Versionen benutzten ein anderes Verfahren). Der Methode liegen drei For- Bild 2. Aufbau 1s einer Diskeltonspur Like Bild 3. So ist ein Adrefifeld aufgebaut Header Volume Spur Sektor_Pruf- ‘Trailer (Vorspann) summe (Nachspann) Bild 4. So ist ein = = aD oes Bee foe pale] leader Jatenbytes (codiert lt Irailer Datenfeld aufgebaut fc 7 Prat Tal) derungen an die Hardware zugrunde: 1. Das erste Bit eines giiltigen Datenbytes muB den Wert 1 haben. 2. Das Byte darf maximal ein Paar von Nullbits enthal- ten. 3. Es miissen stets mindestens zwei benachbarte Bits auf 1 gesetzt sein (aus- genommen das héchstwertige Bit). Nimmt man die reservierten Bytes AA und D5 heraus, so werden diese Bedin- gungen genau von 64 Bytes zwischen 96 und FF erfiillt. Verschliisselung Der Codierungsvorgang geht nun folgen- dermafen vor sich: Zunichst werden die 256 Bytes eines Sektors nach einem komplizierten Muster in 6-Bit-Bytes (mit fiihrenden Nullen) verwandelt und in zwei getrennten Puffern (,,Primar- und Sekundardatenpuffer“) abgelegt. Bei die- sem auch als ,,Prenibbilizing" bezeich- neten Verfahren entstehen aus den 256 Benutzerbytes genau 342 Disketten- bytes. Diese werden anschlieBend der Reihe nach paarweise durch EOR (Exklusiv-ODER) verkniipft und gemaB. Tabelle 1 fiir den ,,6-zu-2-Code“ in die endgiiltig abgespeicherten Bytes umge- wandelt. Dieses Verschliisselungsverfahren scheint auf den ersten Blick unndtig kompliziert. Es ist jedoch so gewahlt, daf einerseits ein eindeutiges ,,Soft-Sec- toring“ méglich wird und andererseits alle Schreib- und Leserzugriffe in kiirze- ster Zeit durchgefiihrt werden kiénnen. Dies ist der Fall, weil wihrend des Le- sens lediglich EOR-Verkniipfungen zwi- schen den Bytepaaren durchgefiihrt wer- den miissen, um die korrekten Daten zu erhalten. Nebenbei fallt dabei nach dem letzten verarbeiteten Byte auch die Priif- summe ab, die zur Uberpriifung des kor- rekten Lesevorganges verwendet wird. Zur Verringerung der Zugriftszeit wen- det DOS noch einen weiteren Trick an: Das ,,Sector-Interleaving". Normalerwei- se entsteht zwischen dem Lesen oder Schreiben zweier aufeinanderfolgender Sektoren eine kleine Zeitverzégerung, wahrend der sich die Diskette bereits ein Stiick weitergedreht hat. Es ist daher sinnvoll, die logische Reihenfolge der Sektoren auf der Diskette zu veraindern, um Wartezeiten zu verringern. Wihrend * die physikalischen Sektoren der Reihe nach von 0 bis F durchnumeriert wer- den, werden die logischen Sektoren in der Reihenfolge 0,D,B,9,7,5,3,1.E, C,A,8,6,4,2,F abgelegt. DOS behandelt also z. B. den physikalischen Sektor 2 bei allen Lese- und Schreibvorgiingen als logischen Sektor B, den physikalischen Sektor D als logischen Sektor 4 usw. Tabelle 1: Die 256 Bytes fiir einen Sek- tor werden zuerst in 342 Bytes mit je zwei fiihrenden Nullen aufgespaltet, die nach dem dargestellten Schema umge- setzt und abgespeichert werden 20 = D6 21 22 23 =DA B IC iD IE F —ojag— a | Bild 5. Disketten- organisation unter DOS 3.3 Bs Das ..Sector-Interleaving wird auch auf Pascal-. Fortran- und CP/M-Disketten verwendet; allerdings ist dort die Rei- henfolge der logischen Sektornummern eine andere als unter DOS 3.3. Dateien-Format Eine DOS-3.3-Diskette enthalt drei ver- schiedene Arten von Information. Zu- nichst einmal ist das vollstandige Be- triebssystem im Maschinencode abge- speichert, so daB im Prinzip jede beliebi ge Diskette beim Einschalten des Apple als ,.Boot-Diskette" zum Laden des Be- triebssystems verwendet werden kann. Das DOS-Image verbraucht 37 Scktoren und ist auf den Spuren 0, 1 und 2 abge- legt (Die Sektoren 5 bis 15 der Spur 2 werden zwar nicht bendtigt, sind aber trotzdem reserviert und kénnen in der Regel nicht vom Benutzer verwendet werden). Die zweite Gruppe von Informationen befindet sich auf der Spur Nr. 17 und besteht aus einem Inhaltsverzeichnis | und einer Belegungstabelle der Disket- tensektoren. Diese Tabelle, die als ,,Vo- lume Table of Contents“ (VTOC) be- zeichnet wird, enthilt fiir jeden Disket- tensektor die Information, ob dieser be- reits belegt oder noch frei ist. Vor jeder Schreibaktion zieht DOS das VTOC her- an, um den nichsten freien Sektor zu finden. Der genaue Aufbau des VTOC ist im DOS-Handbuch ausfithrlich be- schrieben und soll hier nicht noch ein- mal ausgefiihrt werden (Bild 5). Die eigentlichen, vom Benutzer verwen- deten Daten sind auf der Diskette in Form von Dateien abgespeichert. Hierzu verbleiben von den 35 Spuren nach Ab- zug der Spuren 0,1, 2 und 17 noch 31 Spuren, entsprechend einem verfiigba- ren Speicherplatz von 124 KByte. DOS unterscheidet acht verschiedene Datei- typen, von denen jedoch augenblicklich nur fiinf verwendet werden. Diese fiinf Typen werden folgendermafien gekenn- zeichnet: Typ T: Textdatei (Text oder Daten im ASCH-Format) Typ B: Binardatei (Daten oder Maschi- nenprogramme im Binarformat) Typ A: Applesoft-Datei (Applesoft-Pro- gramme) Typ I: Integer-Datei (Integer-Basic-Pro- gramme) Typ R: Relozierbare (verschiebbare) Da- tei (Maschinenprogramme; bis- her nur vom 'DOS-Toolkit’ ver- wendet). Jede Datei besteht aus einem oder meh- reren Datensektoren, einem Eintrag im Disketteninhaltsverzeichnis und einer sogenannten ,,Spur-/Sektor-Liste“ oder »Track/Sektor List“ (TSL). Diese Liste ist notwendig, da unter DOS 3.3 die Datei- sektoren nicht zusammenhiangend hin- tercinander abgespeichert werden (wie etwa in UCSD-Pascal}, sondern ~ je nach verfiigbarem Speicherplatz — iiberall auf der Diskette verstreut sein konnen. Die Sektor-Belegungs-Liste Selbstverstandlich werden auf einer neuen, ungebrauchten Diskette Datei- sektoren zunachst hintereinander abge- legt; durch wiederholtes Léschen und Neuabspeichern von Dateien entstehen jedoch an verschiedenen Stellen unter- schiedlich groBe Liicken, so daB nach langerem Gebrauch eine zusammenhan- gende Abspeicherung nicht mehr még- lich ist. Damit DOS dennoch die Datei- sektoren in der richtigen Reihenfolge auffinden kann, wird zu jeder Datei eine Liste angelegt, aus der die Position der Sektoren auf der Diskette hervorgeht. Der genaue Aufbau dieser TSL ist eben- falls im DOS-Handbuch erlautert. Das Disketteninhaltsverzeichnis, das die Sektoren 1 bis 15 auf Spur 17 belegt, enthilt zu jeder abgespeicherten Datei einen Eintrag, welcher aus dem Dateina- men, dem Dateityp, der Dateilange und einem Hinweis auf die Position der Spur-/Sektor-Liste besteht. Das Ver- zeichnis kann pro Sektor sieben Eintra- ge, insgesamt also maximal 105 Datei- Eintrage aufnehmen. Es ist demnach nicht méglich, mehr als 105 Dateien auf einer DOS-Diskette abzuspeichern. Aufgrund dieser Diskettenorganisation besteht ein Dateizugriff aus mehreren Stufen. Zunichst wird im Inhaltsver- zeichnis nach dem entsprechenden Ein- trag gesucht und dort die Position der ‘TSL bestimmt. Dann wird diese Liste eingelesen und aus ihr die Position der Datensektoren ermittelt. Erst im dritten Schritt kann dann auf diese Sektoren zugegriffen werden. Zusatzlich muf lau- fend das VTOC aktualisiert werden. Das Verfahren hat den Vorteil einer optima- len Platzausnutzung auf der Diskette, ist aber auf der anderen Seite auch recht zeitaufwendig. Das Betriebssystem Wenn der Apple eingeschaltet wird, ist der RAM-Speicher zunachst leer. Der Autostart-Monitor im ROM sorgt jedoch 6 dafiir, daB das auf der eingelegten Dis- kette abgespeicherte DOS-Image auto- matisch in den Speicher geladen wird. Dieser Vorgang wird allgemein als ,,Boo- ting“ bezeichnet und lauft in mehreren Stufen ab. Als erstes wird ein kurzes Maschinen- programm, welches sich auf dem ROM der Controller-Karte (ab Speicheradresse $C600) befindet, aufgerufen. Dieses zieht den Schreib-/Lesekopf zuriick zur Spur 0 und liest Sektor 0 in den RAM-Speicher ab Adresse $800. Dieser Sektor enthalt wiederum ein kurzes Maschinenpro- gramm, welches in der nun folgenden Stufe aufgerufen wird. Dabei werden die niichsten neun Sektoren auf Spur 0 (Sek- toren 1 bis 9) eingelesen, welche ihrer- seits fiir die nachste Stufe des Prozesses verwendet werden. Die Adresse, an die diese neun Spuren geladen werden, hangt davon ab, ob es sich bei der Dis- kette um einen ,,Master“ oder einen »Slave“ handelt. Wird DOS von einer Slave“-Diskette eingelesen, so wird es stets in demselben Speicherbereich ab- gelegt, in dem es sich beim Initialisieren der Diskette befand. Das bedeutet, dais eine auf einem 48-K-Apple initialisierte »,Slave'-Diskette auch nur auf einem 48- K-Apple ,,gebootet“ werden kann. Dies ist anders bei einer ,,Master‘-Diskette. Diese enthilt in den Sektoren 10 und 11 der Spur 0 einen ,,Relocator“, der in der Lage ist, das geladene DOS-Image so zu verschieben, dafi es stets den oberen RAM-Bereich ausfiillt. Eine ,,Master“- Diskette kann also auf jedem beliebigen Apple ,,gebootet“ werden. Im dritten Schritt werden nun mit Hilfe der inzwischen schon eingelesenen 10 Sektoren alle weiteren DOS-Sektoren von der Diskette geholt und im RAM- Speicher abgelegt. AbschlieBend wird gegebenenfalls noch eine Verschiebung des DOS-Image zur oberen Grenze des RAM mit Hilfe des ,,Relocators* durch- gefiibrt. Tabelle 2: DOS-Bereiche bei unter- schiedlichem Speicherausbau Speichergroie 32K 36K 40K 48K HIMEM 5600 6600 7600 9600 DOS-Programme 5D00 6D00 7D00 9D00 File-Manager 6AFD 7AFD 8AFD AAFD RWTS: 77B5 87B5 97B5 B7BS RAM-Ende 7FFF 8FFF 9FFF BFFF Damit ist die Prozedur des ,,Booting“ beendet, und DOS belegt die 8960 ober- sten Bytes des RAM-Speichers (8, 75 KByte). DOS-Adressen Der fiir DOS resevierte Bereich des RAM-Speichers laft sich in vier Ab- schnitte einteilen (Bild 6). Die obersten 2,5 KByte bestehen aus dem RWTS-Pro- gramm (Read/Write Track/Sektor), wel- ches das Schreiben und Lesen einzelner Diskettensektoren steuert. Die darunter befindlichen 2,8 KByte enthalten den »File-Manager“, der aus einer Anzahl von Unterprogrammen zum Bearbeiten von Dateien besteht. Die eigentlichen DOS-Routinen befinden sich in einem 3,5 KByte grofien Block unterhalb des File-Managers. Schlieflich reserviert DOS einen Bereich von 1,75 KByte als Dateipuffer fiir drei Dateien (dies ist die Voreinstellung; der Benutzer kann die- sen Speicherbereich vergréfern oder verkleinern, indem er weitere Puffer hinzufiigt bzw. die Zahl der Puffer ver- ringert). Die Untergrenze des DOS-Bereiches wird durch den Wert fiir , HIMEM“ (High Memory) festgelegt. Diese Zahl ist als Adresse in der ,,Zero-Page“ des App- le abgelegt und definiert die héchste fiir den Benutzer verfiigbare RAM-Adresse. Der Wert von HIMEM und damit die HIMEM +$29FF (RAM-Ende) HIMEM + $ 2000 HIMEM + $14C9. HIMEM + $700 Ea HIMEM Hy H 1 Freier i 1 RAM Speicher ! 1 Bild 6. DOS-Speicherbereiche im RAM Tabelle 3: DOS-Sprungvektoren in Speicherseite 3 Adressen der verschiedenen DOS-Spei- cherbereiche sind von der Speichergré- Be des Rechners abhangig. Die mégli- chen Werte (hexadezimal) zeigt Tabelle 2. Haufig erscheint es wiinschenswert, DOS-Routinen von eigenen Maschinen- programmen aus aufzurufen. Da die La- ge von DOS im Speicher jedoch von der Ausbaustufe des Rechners abhangt, miifte man dazu stets eine Tabelle der Einsprungadressen, bezogen auf die je- weilige SpeichergréBe, heranziehen. Gliicklicherweise ist dies jedoch nicht notwendig, da DOS in Speicherseite 3 eine Gruppe von ,,Vektoren“ bereitstellt, die den Aufruf von DOS-Routinen iiber feste Adressen erlaubt. Diese Vektor- tabelle wird bereits beim ,,Booten“ des Betriebssystems aufgebaut und enthiilt Sprungbefehle auf die aktuellen Adres- sen der wichtigsten DOS-Routinen. Ta- belle 3 gibt eine Beschreibung der DOS- Vektoren Fiir die Verwendung der DOS-Routinen in eigenen Maschinenprogrammen gibt Tabelle 4 einige wichtige Adressen an. Sie beziehen sich auf eine Ausbaustufe von 48 KByte (zur Verwendung mit ei- nem 32-KByte-Apple ist von den Adres- sen hexadezimal 4000 zu subtrahieren). Direkte Disk-Zugriffe Die von DOS zur Verfiigung gestellten Kommandos erlauben eine komfortable Behandlung von Disketten-Dateien. Trotz seiner vielfaltigen Méglichkeiten deckt das Kommandosystem nicht alle Benutzerwiinsche ab. Die Eingriffe des Benutzers sind auf die Dateiebene be- schrankt; ein direkter Zugriff auf einzel- ne Sektoren ist nicht vorgesehen. In die- sem und den folgenden Abschnitten soll nun beispielhaft aufgezeigt werden, wie man unter Verwendung einfacher Pro- gramme die DOS-Routinen nutzen kann, um einzelne Diskettensektoren zu lesen oder zu verandern. Allen vorgestellten Beispielen liegt die RWTS-Routine zugrunde, mit deren Hil- fe auf den Inhalt beliebiger Sektoren in benutzerlesbarer Form (also uncodiert) zugegriffen werden kann. RWTS bené- tigt zwei Parameterlisten, die vom Be- nutzer definiert werden miissen. Es han- delt sich um den ,,Input/Output Control Block (IOB)* und die ,,Device Characte- ristics Table (DCT). Beide Listen sind im RAM-Speicher angelegt und kénnen somit vor dem Aufruf von RWTS veriin- dert werden. Der IOB besteht aus 17 Adresse Inhalt 3D0 Sprung zur DOS-Warmstart-Routine (DOS-Initialisierung ohne Léschen des Basic-Programms im Speicher) 3D3 Sprung zur DOS-Kaltstart-Routine (DOS-Initialisierung wie nach dem ,,Booten") 3D6 Sprung zum File-Manager 3D9 Sprung zur RWTS-Routine 3DC Unterprogramm zum Aufbau der Eingabeparameter fiir den File-Manager 3E3 Unterprogramm zum Aufbau der Eingabeparameter fiir RWTS 3EA Sprung zur DOS-Routine, in der die DOS-Anschliisse zur Ein- und Ausgabe wiederhergestellt werden 3EF Sprung zur Software-Interrupt-Routine 3F2 Adresse der Reset-Routine 3F4 »Power-up-Byte“ (Unterscheidung, ob Reset einen Kalt- oder Warmstart durch- fiihrt) Tabelle 4: Wichtige DOS-Adressen fiir 48-KByte-Systeme (bei 32 KByte ist jeweils hex 4000 abzuziehen) 9D00 9D0G 9D84 9DBF 9E51 9EBA 9FC5 A1D6 A203 A229 A22E A233 A23D A251 A316 A4D1 A4FC AS6E AS7TA AS9E A884 A971 AA4F AA75. AABL AAC1 B600 B7E8 B7FB B800 B8C2 BA29 BBOO BCOO BEAF BFB8& : Adresse des Dateinamen-Feldes im ersten DOS-Puffor : Adresse des DOS-Anfangs (= $9D00) : Kaltstart-Routine : Warmstart-Routine : Kopie der Vektortabelle in Speicherseite 3 : Sprung zur aktuellen Eingaberoutine : Sprung zur aktuellen Ausgaberoutine : Dezimal-Umwandlungsroutine : Hexadezimal-Umwandlungsroutine : Kommando PR# : Kommando IN+# : Kommando MON : Kommando NOMON : Kommando MAXFILES : Kommando CLOSE (alle offenen Dateien) : Kommando RUN (DOS) : Kommando RUN (Applesoft) : Kommando CATALOG : Kommando EP : Kommando INT ; DOS-Kommandotabelle ; DOS-Fehlertabelle : DOS-Variablenliste : Puffer fiir Dateinamen ; DOS-Konstanten- und Variablenliste : File Manager-Variable und Routinen : Boot-Routine : RWTS-Parameterliste (JOB) : DCT (Device Characteristics Table) fiir RWTS : »Prenibble“-Routine : »Postnibble“-Routine : Ubersetzungstabellen fiir ,,Pre- und Postnibbilizing* : Primiir-Datenpuffer : Sekundiir-Datenpuffer : Kommando INIT : »Sector Interleaving"-Tabelle Die folgenden Adressen in der ,,Zero-Page“ werden (neben anderen) von DOS verwendet: 26, 27 2B 2C-2F 33 3E, 3F 48, 49 73, 74 : Lesepuffer-Adresse : Steckplatz * 16 fiir ,Boot"-Laufwerk : Werte aus Sektor-Header : DOS-,,Prompt"-Symbol : RWTS-Pufferadresse : RWTS-IOB-Adresse : HIMEM Bytes und enthiilt die Parameter fiir den Lese- oder Schreibvorgang. Die DCT um- fat vier Bytes mit zusatzlichen Hardwa- re-Informationen des Disk-II-Laufwerks. Fiir die Benutzung mit Apple-Standard- Jaufwerken braucht diese Liste vom Be- nutzer nicht verandert zu werden. Die Startadresse des IOB ist abhingig von der Speichergrée des Rechners ($B7E8 bei 48 KByte, $77E8 bei 32 KByte) und mu8 daher durch einen Unterpro- grammaufruf iiber die Vektortabelle in der Speicherseite 3 (JSR $3E3) bestimmt werden. Vor dem RWTS-Aufruf miissen die fol- genden Bytes (relativ zur IOB-Start- adresse) vom Benutzer definiert werden: Byte Nr. Inhalt IOB+01 Nr. des Steckplatzes*16 ($60 fiir Slot 6) IOB+02 Nr. des Laufwerkes ($01 oder $02) IOB+03 —_ Erwartete Volume-Nummer ($00 fiir alle) IOB+04 — Spur ($00...$22) IOB+05 —Sektor ($00. IOB+08 — Adresse (niederwertig) des Datenpuffers IOB+09 = Adresse (héherwertig) des Datenpuffers IOB+0C = Kommandocode: $00 = Lesekopf nur posi- tionieren $01 = Sektor in Puffer ein- lesen $02 = Sektor mit Pufferin- halt beschreiben $04 = Diskette formatie- ren (!) wie IOB+03 wie IOB+01. IOB+0E IOB+0F In den Bytes IOB+08 und IOB+09 muB die Adresse eines 256 Bytes grofen Puf- fers angegeben werden. Dies ist ein vom Benutzer zu bestimmender Speicherbe- reich, der die Daten des bearbeiteten Diskettensektors aufnimmt. Es ist mdg- lich, einen der reservierten DOS-Puffer oberhalb von HIMEM zu benutzen; in dem angegebenen Beispielprogramm wird jedoch der Bereich von $1000 bis $10FF als Puffer verwendet. Lesen und Schreiben eines Sektors Das kurze Assemblerprogramm »USERWTS*“ (Bild 7) dient zum Lesen oder Schreiben eines Diskettensektors unter Verwendung von RWTS. Zunichst wird mit dem Befehl JSR $3E3 eine DOS- Routine benutzt, welche die Anfangs- adresse des IOB in den Registern Y und A zuriickmeldet. Diese wird in der ,,Ze- ro-Page“ zwischengespeichert und dient als Basisadresse fiir die Belegung der IOB-Parameter. Das Programm erwartet Eingabewerte in den folgenden Speicherstellen: $19: Nr. des Laufwerks $1A: Spur $1B: Sektor $1C: Kommandocode ($01=Lesen, $02=Schreiben). Nach Beendigung des Programms »USERWTS*“ enthalt Adresse $1D einen Return-Code, der angibt, ob bei dem vor- ausgegangenen Lese- oder Schreibvor- gang ein Fehler aufgetreten ist ($00 be- deutet: kein Fehler). Ein Beispiel fiir die Verwendung des Programms vom Monitor aus (das Pro- gramm beginne bei Adresse $300): Einle- sen des ersten Sektors des Inhaltsver- zeichnisses (Spur $11, Sektor $0F) vom Laufwerk Nr. 1 in den Puffer. Zundchst wird mit CALL-151 der Monitor aufgeru- fen, und mit 19: 01 11 OF 01 werden die Eingabewerte eingetragen. FRrcriiiiccorcititcccotttc cg 38 STA 2% 39 INY 3% > USERWTS? ® 40 LDA at * a1 STA 5 * EIN BEISPIELPROGRAMM * 42 INY 6 * ZUR BENUTZUNG DER DOS- * aS LDA 7 * ROUTINE RWTS ZUM LESEN * 44 STA 8 *# UND SCHREIBEN VON EIN- * 45 INY o* ZELNEN DISKETTEN— * Ao LDA 10% SEKTOREN * ay STA dit * 48 Luby 12Q SERSREREAASEEAES ERE RETA RES 4D LDA AS 5 50 STA 14 ORG $300 51 INY 15 I0B EQU $06 5 POINTER FUER IOB-ADRESSE S2 LDA 16 5 Ss STA 17 DRIVE EQU $19 7 LAUFWERK 54 Loy 18 TRACK EQU $10 + SPUR 55 La 19 SECTOR EQU $1B 5 SEKTOR 56 STA 20 COMMAND QU $1C + RWTS-KOMMANDOCODE 57 Lpy 21 RTNCODE EQU %1D 5 RETURN-CODE se LDA 22 PREG EQu $48 59 STA 235 60 INY 24 BUFFER EQu $1000 § 256-BYTE-PUFFER 61 LDA 25 5 62 STA 26 5 63 3 27 USERWTS JSR $3E3 + SUCHE IOB 64; 28 STY 10B 65 3 29 STA IOB+1 3 IOB-ADRESSE SICHERN 66 Loy 30 5 2 47 ipa 31; IOB-PARAMETERLISTE BELEGEN: 68 JSR 325 6? LDA 33 Loy #01 70 STA 34 LDA #860 71 LDy 35 STA (I0B),Y 3 SLOT & 16 72 LDA 36 INY 73 STA 37 LDA DRIVE 74 RTS Bild 7. Mit diesem Programm kann ein Sektor gelesen oder beschrieben werden 8 (10B) ,Y #00 <10B) ,Y 5 VOLUME TRACK <T0B) ,Y SECTOR (10B) ,¥ #08 #2BUFFER <TOB) ,Y 3 NIEDERWERTIGES BYTE #<BUFFER 3 HOEHERWERTIGES BYTE (0B) ,Y #800 COMMAND (I10B),Y #80E #00 (0B) ,Y #860 (108) ,Y IOB-ADRESSE LADEN: 10B TOB+1 $309 $ #00 PREG #0D (108) ,¥ RTNCODE RWTS AUFRUFEN 3 RETURNCODE SICHERN Vorausgesetzt, dah das Maschinenpro- gramm geladen ist, kann dann der ge- wiinschte Sektor durch 300G eingelesen werden. Mit dem Befehl 1000.10FF wird der Inhalt des Sektors auf dem Bildschirm dargestellt. Ein eventueller Lesefehler kann durch Ab- frage der Adresse $1D erkannt werden. Zahlen freier Diskettensektoren Es ist hdufig notwendig, die Zahl der auf einer Diskette noch nicht belegten Sek- toren zu bestimmen. Zu diesem Zweck verwendet man die ,, Volume Table of Contents“ (VTOC) auf Spur $11, Sektor 00, die mit Hilfe des Programms »USERWTS*“ in den RAM-Speicher ein- gelesen werden kann. Die Bytes $38 bis $C3 der VTOC enthalten die gewiinschte Information: Jedes gesetzte Bit in diesem Bereich entspricht einem freien Sektor. Das Assemblerprogramm in Bild 8 ver- wendet ,,USERWTS* als Unterpro- gramm. Es bendtigt als Eingabe die Num- mer des Laufwerks in Speicherzelle $19 und liefert als Ausgabe in den Adressen $1E und $1F die Anzahl der freien Sekto- ren (héherwertiges Byte in $1F). VergréBerung des Speicherplatzes Wie bereits bei der Beschreibung der Diskettenorganisation erwahnt, sind die drei Spuren 0 bis 2 fiir das DOS-Image reserviert, obwohl DOS die Spur 2 nur zu einem Teil tatsichlich ausnutzt. Die ungenutzten Sektoren 5 bis 15 kénnen mit dem Programm von Bild 9 fiir den Benutzer verftigbar gemacht werden, oh- ne das auf der Diskette gespeicherte DOS-Image dabei zu beeintrichtigen. Man gewinnt somit 11 zusitzliche Sek- toren (2,75 KByte pro Diskette) fiir die Abspeicherung von Dateien. Das Programm verwendet ebenfalls »USERWTS* als Unterprogramm zum Lesen und Schreiben der VTOC auf Spur $11, Es ist zu beachten, dal das Pro- gramm auf jede Diskette nur einmal an- gewendet werden darf, um einen Verlust gespeicherter Daten zu vermeiden. Bei Auftreten eines Lese- oder Schreibfeh- lers wird das Programm mit zwei akusti- schen Signalen abgebrochen (als Einga- be wird wiederum die Nummer des Laufwerks in Zelle $19 erwartet). Literatur [1] Budge, J. H.: Inside Initialization. Apple Orchard Vol. 1, No. 2. S. 49 (1980). {2] Crosby, M. L.: Singin’ the Disk /O Blues. Apple Orchard Vol. 2, No. 4, S. 63 (1981). [3] Joepgen, H.-G.: Mehr Komfort bei Apple- Disks. me 1981, Heft 1, S. 64. (4] Joepgen, H.-G.: DOS-Umschaltung beim Apple. mo 1982, Heft 6, S. 69...71. [5] Morris, G.: Apple II Soft Sectoring. Apple Orchard Vol. 2, No. 3, S, 26 (1981). [6] Worth, D., Lechner, P.; Beneath Apple DOS. Quality Software, Reseda 1982. : Seeger etenerneneee nee ey peiiiiiiiiiiiiccircccccccrer tg * > 2 BH ae 4 3k * MOREMEM? x ae ® R ;: Chass oo i 5 % VERGROESSERUNG DES DISK- # 7% ot ee SPEICHERPLATZES * 7* * +e i 5 : petite emtcncpereec cere B eeaeaaexaceeeeeecencereeeceee ye ie i cet ORG $300 12 FREE EQU $1E AE QRG $300 135 12 BELL EQU $FF3A 3 MONITOR-ROUTINE 145 135 , 14; ye po ae 15 LDA #411 17 LDA #00 16 STA TRACK 18 STA SECTOR az LDA ##00 19 Lpa #01 1B STA SECTOR 20 STA COMMAND BY . piste 21 JSR USERWTS AND 22 cLD 2i JSR USERWTS 23 LDA #00 22 BCS ERROR 3 DOS-FEHLER ? 24 STA FREE zs LDX #$40 3 BYTE-OFFSET 2 LDA #$FF = oe coe 4 fe Sl NULL BETZEN 25 STA BUFFER, X 3 ALLE BITS AUF 1 ! bs 26 INX ae ae ee #908 3 BIT-ZAEHLER 27 Loa FER, X ; 29 ROL BUFFER, X 3 BIT PRUEFEN S Eas eseo 3 3 BITS 5-7 AUF 1 ! a ao Next 3 BIT IST NICHT GesETzT | 27. bye oriigs ; 32 LDA FREE wo JSR USERWTS 33 ADC #$01 32 BCS ERROR “4 STA FREE 3 RTS 3 LDA FREE+1 sae 36 ADC #800 } UEBERTRAS 35 ERROR = LDA RTNCODE 3 RETURN-CODE PRUEFEN 37. STA FREE+1 36 BEQ END 38 NEXT DEY 37 JSR BELL 3 IM FEHLERFALL: 37 BNE BIT ; 8 BITS VERARBEITET 7 38 JSR BELL 3 AKUSTISCHES SIGNAL 40 INK 3 NAECHSTES BYTE sis RTS AL CPX #$C4 3 ENDE ? 42 BNE GO as RTS Bild 9. Die Sektoren 5 bis 15 von Spur 2 sind unter DOS 3.3 Bild 8, Dieses Programm bestimmt die Anzahl der noch freien normalerweise ungenutzt; mit diesem Programm kann man den er 8 é Sektoren einer Diskette; es verwendet die in Bild 7 abgedruckte Bereich ausnutzen (es wird wieder auf die Routine von Bild 7 8 Routine zuriickgegriffen) Herwig Feichtinger App le macht Textdatei aus Speicherbereich Nicht nur in Zusammenhang mit einem Kommunikationspro- gramm kann es niitzlich sein, aus einem im Speicher stehenden Text eine ASCIl-Textdatei zu machen. Das folgende Programm zeigt auBerdem einen Kniff, Maschinenroutinen in Basic einzu- binden. Beim Apple-II gibt es zwei Méglichkei- ten, Texte auf Diskette abzuspeichern — entweder als Textdatei oder, z. B. beim Kommunikationsprogramm in Heft 1, wie ein Maschinenprogramm als Spei- cherauszug. Letzteres hat den Vorteil, relativ schnell zu gehen, und den Nach- teil, dai ein Weiterverarbeiten einer sol- chen Datei von einem Basic-Programm aus problematisch ist. Maschinenprogramm in REM-Zeile Die hier vorgestellte Lésung zur Um- wandlung eines im Speicher ab Adresse hex 1000 stehenden Textes in eine DOS- Textdatei besteht aus einem Basic-Rah- menprogramm und einer kurzen Ma- schinenroutine, die innerhalb einer REM-Basic-Zeile steht und somit nicht getrennt von Disk geladen werden mu. DieEingabe erfolgt so: Zunichst tippt man das Applesoft-Programm aus Bild 1 ein, wobei in Zeile 1 hinter REM nur etwa 50 Doppelpunkte (oder beliebige andere Zeichen) stehen. Dieser Platz ist dem Maschinenprogramm in Bild 2 vor- behalten. Man gibt es ein, indem man mit CALL-151 zum Monitor geht und dann ab Adresse 0806 die einzelnen By- tes eingibt (0806: AQ FF 8D...). Nach Return, CTRL-C und nochmals Return ist man wieder in Basic. Wenn man nun in Basic LIST eingibt, sollte man sich tiber den merkwiirdigen Inhalt der REM-Zeile nicht wundern. Denn Basic interpretiert die Maschinen- programm-Bytes nun zum Teil als reser- vierte Basic-Worte, wie das auch in Bild 1 zu sehen ist. Direkt diese Worte in Basic statt das Maschinenprogramm vom Monitor aus einzugeben funktio- 10 Vor dem Start des Programms muf der Text bereits ab Adresse hex 1000 im Speicher stehen (man kann ihn, falls er auf Disk steht, dorthin mit BLOAD NA- ME,A$1000 bringen). Nach RUN wird man nach dem gewiinschten Namen der zu erzeugenden Textdatei gefragt. Der Rest funktioniert automatisch, und zwar dank des Maschinenprogramms ver- gleichsweise schnell. Das Komma-Problem Die Maschinenroutine ersetzt in der ab- gedruckten Version alle Kommas und Doppelpunkte durch Strichpunkte, um zu vermeiden, da man beim spiiteren Einlesen der Textdatei mit dem Basic- Befehl INPUT die Fehlermeldung EX- TRA IGNORED erhilt. Wenn man aber niert iibrigens nicht, weil nicht alle By- tes tiberhaupt auf dem Bildschirm er- scheinen! Mit SAVE MEMTXT kann man nun Maschinen- und Basic-Pro- gramm auf einmal auf Diskette abspei- chern. Zeile 15 sollte iibrigens entfallen, wenn Bit 7 beim Text im Speicher nicht z. B. mit dem Kommunikationspro- gramm aus Heft 1 ein Basic-Programm empfangen hat (Download), so darf diese Umcodierung nicht stattfinden. Im Ma- schinenprogramm mufi man dann die Bytes an den Adressen 0821 und 0825 durch hex BB ersetzen. Eine damit er- zeugte Textdatei, die ein Basic-Pro- gramm enthalt, kann man anschlieBend leicht mit EXEC NAME in ein ,,richti- ges“ Basic-Programm umwandeln (vor- gesetzt ist. her NEW nicht vergessen!). 1REMSPEED=hPLOTSPEED=PLOTOUT OF DATA= OUT OF DATAIFhh= END-RUNOVERFL OW-PRINT=SPEED=CONT RETURN WITHOUT GOSUBhL 1OHOME:PRINT"Umwandlung des Speicherinhalts ab $1000 11PRINT"in eine ASCII-Textdatei":VTAB5S 12HIMEM : 4095 :D$=CHRS (4) 15IFPEEK (4096 )<{128THENPRINT"Kein Text!":END 20INPUT"Dateiname: 30PRINTDS$ ; "OPEN" ; N$: PRINTDS 4OPRINTDS$ ; "OPEN" ; N$: PRINTDS. SOCALL2054:REM $806 60PRINT : PRINT" END" : PRINTD 7OPRINT"Fertig!":END ELETE" ; NS RITE" 3 NS CLOSE" ; NS Bild 1, Basic-Programm, Stat der merkwiirdigen Dinge hinter REM in Zeile 1 sind allerdings zunachst etwa 50 Doppelpunkte einzugeben — hier steht spiiter das Maschinenprogramm O806- AQ FF LDA £$FF ogos- 8D 1908 STA $0819 O80B- AQ OF LDA £80F o80D- 8D 1A 08 STA $081A 0810- FE 1908 INC $0819 0813- DO 03 BNE $0818 0815- EE 1A 08 INC $081A 0818- AD FF FF LDA $FFFF O81B- D0 O1 BNE $081E 081D- 60 RTS O81E- 09 80 ORA £880 0820- C9 AC CMP £$AC 9822- FO 04 BQ $0828 Bild 2. Maschinenprogramm 4- $ i J 0826- DO 02 BNE $082A als’ Disessemubler: Listing: 0828- A9 BB LDA £$BB o82A- 20 ED FD «JSR $FDED o82p- 4C 1008 JMP $0810 Wolfgang Ebner Apple-Grafik fill¢ eine DIN-A4-Seite Verschiedene Druckerschnittstellen fiir den Apple-ll (bzw. den weitgehend kompatiblen Basis-108) enthalten bereits Routinen zur Ausgabe einer Grafikseite. Auf dem Papier erscheinen die Zeichnungen meist ziemlich klein. Mit dem beschriebenen Maschinenprogramm kénnen Sie Ihre Punktgrafiken so zu Papier bringen, daB ein Bildschirminhalt genau einer DIN-A4-Seite ent- spricht. An Hardware bendtigt der Computer den Epson-Drucker MX-82 und eine Parallelschnittstelle. Nachdem sich gezeigt hatte, dafi ein Ba- sic-Programm mit der erwartet geringen Geschwindigkeit arbeitet, wurde ein As- semblerprogramm (Bild 1) geschrieben, das in seinen prinzipiellen Méglichkei- ten dem Grafik-Interface von Epson ent- spricht. Daran schloB sich ein weiterer Schritt an: Der MX-82 kann bei einfacher Druckdichte horizontal 576 Punkte drucken, das entspricht exakt dem drei- fachen Wert der Apple-Grafik in vertika- Jer Richtung. Durch Drehen des Bildes um 90 Grad ]aft sich somit jeder Punkt der Apple-Grafik als 3*3-Matrix auf dem Drucker darstellen: Dies entspricht einer VergréBerung auf die neunfache Flache. Dariiber hinaus bietet das Programm die Optionen ,,Invertieren“, ,,Druck der Bildschirmseite zwei“ und ,,doppelte Druckdichte“ (ohne das Bild auf die Hiilfte zu stauchen, wie das beim Epson- Interface der Fall ist). Um das Programm méglichst kurz zu halten, werden die Optionen nicht mit Hilfe eines Mode-Registers iibergeben, sondern ein kurzes Basic-Programm ruft den Assembler-Teil auf und modifiziert das Programm entsprechend den Optio- nen. Danach kann der Ausdruck mit dem ,,&‘-Befehl des Applesoft-Interpre- ters gestartet werden baw. mit ,CALL 768". Das Programm belegt die dritte Speicherseite vor den DOS-Vektoren ($300...$3CD) und kann somit weder von Basic iiberschrieben werden, noch kommt es mit DOS oder Basic in Konflikt. Um das Programm benutzen zu kénnen, ist also folgendes erforderlich: ein App- le-II bzw. ein dazu kompatibler Compu- ter; ein beliebiges Parallel-Interface (es werden nur die Hardware-Adressen » Strobe“ ($C1C1) und ,,Output* ($C090) vorausgesetzt); ein Epson-MX-82 (ein Epson-MX-100 tut es auch; der MX-80 hat leider nur 480 Druckpunkte, so das auch nur 160 der 192 Grafikpunkte aus- gedruckt werden kénnen; durch Modifi- zieren des Programms kann z. B. der Bereich von Grafikzeile 16 bis 176 aus- gedruckt werden, was oftmals aus- reicht); der Applesoft-Interpreter (fiir die 1 eeesneesesnrenenersenertenses 03331 20 88 03 42 JSR DECKL 2 Ge DURE tence osSe: AS OL 43 -NOCA «LDA COUNT 5 ter FUER EPSON MXG2 teneane osse: C9 0248 cH 42 $2. DURCHOANG REENDET 2 3 gee WERNER 2/85, teeter Osa: DO EB 45 BNE Loor2 ——}NOCH NICHT 5 seeeteserensreonsszerstensare ossci a2 03460 tok a8 SUAEHLER SETZENE DD PATCH HIER & feng EDU see THER-PAGE (820/840) O33E1 AS 0047 toa BYTE 7 foes. EGU $26 SHGR-SPEICHERADRESSE 0340: ER a NOP INVERSE PATCH HIER @ © HeAsH EGU Henle j> HIGH BYTE Ose: EA a9 NOP 9 MASK EGU. $30 SFARBBITHASKE FUER HOR 0362t 20 86 03 50 GUT «JSR POUT! —=sZETCHEN AUSaEBEN fo XL EWU $0 TY-KOORDINATE LOW oss CR t Dex SIAEHLER KORREGIEREN 11 MW EQU XLHt—SX-KOORDINATE. HIGH O36: DO FA 52 BNE OUT i3e0uT 7 2 EW aE 5 Y-KOGRDINATE ose: E&6 E253 ING YL 13 Bre Eu #0 SDRUGKEYTE Osaa: AS E24 toa Yo 14 CONT EDU St 1 ZAGHLER osac: CF C0 8S ce #192 | GREIKE FERTIG 2 15 eavsessacueseareseonenvarsest Coes 00G2 Be BNE LOOPt = }NEIN te ORG. #500 0350: C&EO &7 OR DEC XL SNEUE RETHE 17 seeevevensnesernseteuteeneanss O3521 20 Be 03 86 SER DECKL 0300: 20 4F 03 18 START. JGR INIT JGRAPHIC/ORUCKER INITIALISIEREN | O385: AP FFs? NOC «LOA. WeRF Osos: a? 1 19 iba #1 e357: CS E160 owe om SLETETE REIHE 7 Osos: BS EL 20 Sta Wi 0369 D0 BO et BNE LOOP = SNEINY DO IT AGAIN 0307: a9 1521 tba 421 osset AP FD 82 tba asF9 a30 85 £022 STA HL bx-KooRDINATE IwtTtaLteTEREN | Osepr cs D&S CHP XL SLETATE REIHE > 308: AP 60-23 LOOP LDA. #0 O3sr: D0 AA BNE LOOP = SNEINY DO TT AGAIN oot BS E224 Sra We 0361: 20 C3 05 65 ENDE «JGR CRLF = =SCR/LF AUSSEBEN O30F1 20 BF 03 25 GR PINIT _ORUCKERGRAPHTK EINECHALTEN | Oxest AP IB Ge ipa 427 o5121 ag 00 26 LOOP! LDA #0 03661 20 86 03 67 Sse Pourt Osta: 85 01 27 STA COUNT © =sZAEHLER = 0 Osee: a9 S26 tba 4832 0316: 85 00 (28 sta BYTE SDRUCKBYTE = 0 O36B: 20 86 03 69 JSR POUTI SNORMALER ZEILENVORSCHUB O3181 E6 EO 27 INC XL O36E: 60 70 RTS $PROGRAMMENDE Oster £6 £030 INC XL S¥-KOORDINATE.KORRIGIEREN 7h sereteeeucerenesserennessternee Osicr ap OL St Loa a 72 tesvertersearserarerersersereee OS1Es C5 EO 32 CMP XL SXLeL ? O36F: AP 20 73 INIT LDA #$20 SSEITE 2 PATCH HIER 03201 DO 02 3 BNE LoaP2 SNEIN O371: 85 £6 74 STA HPAG ERSTE HGR-SEITE Gsez: EEL INC XH UEBERLAUF oss a B78 tba 427 0324: 06 00 35 LOUPZ «ASL BYTE ——SDRUCKBYTE NACH LunkS scueeen | Gays So ae OS Jo ak Pourt O3z61 06 60 36 ASL BYTE oye: a9 a1 77 LDA 865 0528: 06 00 37 Ag BYTE 037m, 20 86 05 7B 3eR POUT O32A: 20 A4 05 3B JER GURY —SPUNKT ABFRAGEN O70 a? Gee iba #8 0320: 05 0039 ona BYTE O37Ft 20 86 03 60 JSR POUT! 6/72" ZEILENVORSCHUE oar: 85 00 40 STA BYTE ——_sDRUCKBYTE_ AKTUALISTEREN Teel 20 cs os ar Sse CRLF = SCR/LF AUSUEREN Osi: E& OL At INC COUNT Bild 1, Assemblerlisting der Grafikroutine. Wie man ein solches Programm in den Computer bringt und abspeichert, ist in [1] beschrieben an Neu! * Apple il-kompatibel * halbspurfahig * 40 Spuren, 163 KB * Spur-0-Erkennung * Direktantrieb * Stahlband-Positionierung * Kabel fiir Disk-II-Controller * kann DOS 3.3, PASCAL, CP/M DISTAR-Laufwerk fir Apple Il oder ahnliche Handler-Anfragen erwiinschit! inkl. al @ Mwst. 498 Distributor: Dipl.-Ing. R. Springmann Stéckener StraBe 199, 3000 Hannover 21 Telefon 05 11/79 1111, Telex 921 466 comps d Bildpunktabfrage werden Routinen des Interpreters benutzt). Der benutzte Assembler interpretiert Zahlen ohne Prafix als Dezimalzahlen, mit ,,$“ als hexadezimal, mit ,,%“ binar. Das Hauptprogramm (Zeile 18...70) be- steht aus einer dreifach geschachtelten Schleife, in der jeder Bildpunkt abge- fragt und das Druckbyte aufgebaut wird. Die Unterprogramme wurden teilweise nur der Ubersichtlichkeit halber ausge- lagert (INIT, PINIT, und HSCRN werden nur einmal vom Hauptprogramm aus aufgerufen). Die Kommentare zeigen die Stellen, an denen das Basic-Programm die Optionen einschreibt (zu diesem Zweck dienen auch die NOPs in Zeile 48 und 49). Abgespeichert wird das Assem- blerprogramm mit ,,BSAVE HGR DUMP. BIN,A$300,L$CE". Es 1éft sich nun mit »BRUN* starten, bzw. mit ,,CALL 768", wenn es schon geladen ist. Um die angesprochenen Optionen ein- fach zuginglich zu machen, ist es jedoch besser, das in Bild 2 abgedruckte Basic- Programm zum Starten zu benutzen. Es wird eingetippt und mit ,SAVE HGR DUMP* gespeichert. Nach dem Pro- POUT PINIT HSCRNI DECKL. RTS CRLF ats SENDE INIT BIT scici STEST PRINTER STROBE BMI POUTL SNOT READY STA $090 SOUTPUT TO PRINTER RTS SENDE POUT! WDA #27 JSR POUT SSENDET ESC LDA S48 SDOUBLE DENSITY PATCH HIER JSR POUTI SSENDET "Kk" LDA #64 SDOUBLE DENSITY PATCH HIER JSR POUTL oA #2 HDOUBLE DENSITY PATCH HIER JSR POUTL }SENDET "S76 CHAR. * RTS SENDE PINIT CHE EH Hone Lox Loy XH wpa YL 5X UND Y KOORDINATE LADEN JSR $F41 SPOBITIONIERT HIRESCURSOR LDA HMASK EPUNKTHASKE LADEN BEO HSCRNi ” — $PUNKT AUS: pa #4itt SPUNKT EIN RTS SENDE HSCRN ee ert DEC XL LDA asFF CHP XL. SUEBERLAUF 7 BNE RTS ANEIN DEC XH XH KORRIGIEREN RTS {HORII Loa sD oSR POUTL NOR AUSSEBEN Lpa #80 ASR POUTL SLF @USGEBEN SENDE CRLF RTS Seerereer eee tir rres AND AND (HBASL),Y NSB LOESCHEN STESTET PUNKT A2: grammstart ladt es zuerst den Maschi- nenspracheteil, dann zeigt es ein kleines Menii an: Zum Auswahlen einer Option sind die entsprechende Zahl und Return einzugeben. Die Programmzeilen 350...370 nehmen dann den entspre- chenden ,,Patch“ vor. Zum Verlassen des Programms ist eine ,,9“ einzugeben. REM HGR DUMP fir Epson MXB2; W.Ebner 2/65 REN HARE EERE EKER EES PRINT CHRS (4)"BLOAD HGR DUMP, BIN” 120. TEXT + HOME 450 PRINT TAC 10)" GR- DUM PY 140 PRINT TAB( 10) *===seaeemenaee=" PRINT + PRINT 10 PRINT “Optionen :* 470 PRINT + PRINT 480 PRINT "1 - Doppelte Druckdichte” 190 PRINT 200 PRINT "2 - Invertieren" 210. PRINT PRINT "3 - Bildschirmseite 2" PRINT + PRINT PRINT "9 ~ Programmende" VTAB 23 PRINT SPCC 305 HTAB 1 INPUT “Eingaber 2= VAL (Z8) IF Z ¢ 4 AND Z > 0 THEN 350 IF Z> 9 THEN 250 HOME » PRINT “HGR DUMP geladen. Frogrannstart mit *8?." POKE 1014,0: POKE 1015,3 PRINT + END IF 2 = 1 THEN POKE 829, 6: POKE 917,76: POKE 922,128: POKE 927)4 IF Z = 2 THEN POKE 852,73: POKE 833,63 IF Z = 5 THEN POKE 880,64 GoTo 250 "528 320 330 340 350 360 370 30 Bild 2. Dieses Basic-Programm ladt die Grafikroutine von der Diskette (HGR DUMP, BIN) und nimmt die Auswahl der Optionen entgegen In Zeile 330 wird der &-Vektor einge- tichtet, und von da an kann der Aus- druck mit ,,&“ im Direktmodus oder von einem Programm aus gestartet werden. Literatur [1] Hofer, Rudolf: Vom Umgang mit Apple- Maschinenprogrammen. me 1983, Heft 3, Seite 81. Dipl.-Phys. H. M. lnme Apple-Ted: Ein komfortablier Texteditor Wenn Sie mit Ihrem Apple-ll Briefe oder andere Texte bearbeiten wollen, dann ist Apple-Ted das richtige Programm fur Sie. Es stellt einen zeigerorientierten Editor dar, der sehr komfortable Méglichkeiten bietet. Apple-Ted lauft auf 48-KByte-Maschinen unter dem Betriebssystem DOS 3.3. den miiBten. Nach einer etwas eingehen- deren Beschiftigung mit verschiedenen Computern kann man diese Behauptung nicht mehr aufrecht erhalten. Es zeigt sich naémlich, daf fast jede Firma ihr eigenes Tastensiippchen kocht, dessen Als der Autor dieses Beitrags im Funk- schau-Sonderheft Nr. 31 [2] einen 6502- Texteditor fiir den KIM beschrieb, be- hauptete er damals kiihn, eine Anpas- sung an andere Systeme sei leicht még- lich, da nur zwei Befehle geandert wer- Kochrezepte sie manchmal so geheim zu halten sucht, daB ein Nachwiirzen un- méglich wird. Deshalb wird hier der da- mals veréffentlichte Texteditor als App- le-Ted noch einmal vorgestellt — voll angepabt an den Apple-Il, von einigen Restfehlern befreit und um einige (manchmal vermifite) Befehle erweitert (Bild 1). Da alles damals Geschriebene auch heute noch Giiltigkeit hat, sollen nur die Veranderungen und Erweiterun- gen besprochen werden; eine Bedie- nungsanleitung findet man im Kasten. Das Maschinenprogramm belegt im Apple den Bereich $800...$12FF. Die Adressen fiir die verschiedenen Buffer stehen in den Speicherzellen von $806...$811 und kénnen leicht geindert werden. Im hier verdffentlichten Pro- gramm sind die Speicherbereiche: Eingangsspeicher $9000...$95FF Hauptspeicher — $2000...$8FFF Hilfsspeicher _ $1300...$1AFF Der laufende Zeiger wird als blinkendes Dach dargestellt, alle eingegebenen Steuerzeichen als inverse Buchstaben. og00- 4c o938- 0808-95 0940- OB10- 1A 0948~ oB18~ BZ 0950, 0820- AE o9se- - 85 9960~ a4 0948~ og3z8- 85 0970~ og40~ SE o978~ og4a- 20 o780~ 24 0988 08 0990; Fi 0998 Fé oFA0~ D o7Ag og7a~ 4C O9RO-- oB80- 85 O788 oaga- 84 oF60- oa90~ aa og9e- AS OBAO- 39 gag oD OSBO- 87 oaRa~ 99 ES al 98 86 OALO- BO OA1B~ 90 30 cé OAZO- 09 8p 09 20 onze 09 BO 48 2 oA30- 60 AL 85 OASE- EF BO C9 oA 09 OA40- 18 60 93 95 a OAaB- EO 04 68 85 38 OABO- 0G 20 38 OAS8~ 0A 20 ac OAbO~ 01 OO Bo BO 06 E OA4E- 91 05 o3 4c Bild 1. Hexlisting des Editors, Ein kommentiertes Assemblerlisting und eine Diskette mit Objekt- und Quellcode kénnen vom Franzis-Software-Service bezogen werden. Der Quellcode liegt im Format des Assemblers ,Lisa‘ vor Fa AO 10 84 a2 O2 95 92 C6 10 FB OS 91 2 OR AZ 02 BS 92 49 00 95 92 CA 10 FY 84 FO OF 19 Az OZ GA 10 FF 98 BF 92 00 DO 90 08 20 DA FD E& 98 CB OABO- CO 03 OABB~ 75 92 OACO- BS 90 OACB- 85 91 OADO- 91 85 91 26 Aa 91 65 96 OAFO- EB 88 OAFa- 90 AS OBOO- ES 91 OBOB- 90 40 fy OB FA AD o8 Bs 86 AD oRe8- OB70 on7a— OBBO- 04 AI FO AG FD aD 8C O1 OF AD FZ OF 02 O3 AD FS 03 A? AA BD F2 O3 AF OR OBAC- 8D FS O35 20 6F FB AP OB 13 OBAB- 8S ORBO- £5 OBRS~ EA ORCO~ 9B ORTB- AP ORDO-- 20 ORDa~ 39 OREO- DO ORES- C9 OBFO- OB og ce? FD ar OC20~ 20 ocza~ 40 ocse- 8B OC38- AL FE on 39 ar a6 90 09 os as 4c 17 ocrs~ ODO0~ OF opog- 07 op10- cD opi 4c op20- ac op28- 75 ODs0— OF ODsa~ 04 oD40- 4F op4g- 38 oDps0~ 08 oDsa— o2 ODsO~ 20 onas- DO OD70- 06 op78~ 13 ODBO- Dé ODaa- OB oD90- 84 oD98~ OA opao- F2 opAs~ 4D ODBO- Di ODBS- 04 ODcO- 24 Opca~ 11 oDDo- 20 oDDS~ OF ODEO- 85 ODEa- 09 ODFO- 06 ODFa~ D4 OEOO- 10 QE08~ 20 OE1O- Da OB18~ FF OE20~- 11 OE28- DO OESO- DF OESE- 20 DA a3 08 95 ap O38 D4 cL 48 03 os OR po aD 5 BO BB oe for oc 10 20 8A aD oF FS DF cE OE 20 AS 4c AS 20 Ges OE 20 Do ce a0 20 co a6 39 Be oECO- OECB. oEDO- OEDS~ OEEO: OREa- OEFO- OEFS~ OF O0- oFoa- OF 10~ OF 1 oF 20— OF 28: OFSO- OFS ~ oF40-- oF4B- OF 5O- OFEO- OFEB~ OFFO- oF FB- 1900-- 1008~ 1010- 1o1g- 1020- 1028- 1030: 1038) 1040- 1048 1050— 1058~ 1078~ 1080~ 1088 1090- 1098 10A0~ 1048 1080- 10B8~ 1060- 10cea- 1ono- ti BO a7 60 20 F1 19 4C 6A 08 20 CO 10 co 20 09 cD 88 5 08 4c 33 bo ce BO 00 FA ay AS 4a FE FF 84 Ag as 84 as 09 09 ED aS 1200- 11 1208- a9 1210- 56 1218~ CC E6 1228- D7 1230- 88 1238- AD 1240- 08 7F 20 aS 1 on 9E 12 1280- 8S 1288- 05 1290- 20 1298~ 20 12A0- FD 12AG- 4% 20 2A 20 1280- C4 C5 D4 aD C1 AO AA AA 4E SS 46 45 43 AE ac io S=0 20 FOR 1 = 0 TO 2815 30 X = PEEK (20000 + 1) ao S=S+ 60 NEXT I 70 IF S = 321673 THEN PRINT "PRUEFSUMME OK” Bild 2. Dieses Programm ermittelt eine Priif- summe iiber alle Bytes von Apple-Ted. Der Editor muf vor dem Starten der Priifroutine ab Adresse 20 000 im Speicher stehen (BLOAD TED, A20 000) Das Apple-Sonderheft So wird Apple-Ted bedient Die Anzahl n wird immer dezimal angegeben (— 10 000 < n < 10 000). LaBt man sie weg, so entspricht das n = 0. Ein Text folgt unmittelbar auf ein Kommando, bei der Eingabe mit I z. B.: I Dies ist ein Test $$. Folgende Kommandos wirken nur bei der Eingabe: Trenner zwischen Befehlen und Texten (Escape wird invers als $ dargestellt) Abarbeiten des Eingabespeichers nach $$ Backspace (Pfeil riickwars) Letztes Zeichen léschen und wieder ausgeben Escape CTRL-R Letzte Zeile im Eingangsspeicher ausgeben CTRL-X Gesamte Eingabe léschen @x Delimiter umdefinieren Die folgenden Kommandos kénnen beliebig gemischt aneinandergehingt wer- den und werden erst nach Abschluf mit $$ ausgefiihrt (aufer CRTL-D- Kommando LO und SA): nBC n Zeilen vom Zeiger an im Hilfspeicher an schon Vorhandenes anhingen nBT wie nBC, aber Zeilen im Hauptspeicher léschen BK Hilfsspeicher léschen BR Hilfsspeicherinhalt ausgeben Cc Zeichenkette andern nD n Zeichen léschen E Textende im Hauptspeicher (hexadezimal) ausgeben Lp Zeichenkette suchen H Riickkehr ins Basic CTRL-I Tabulieren (beinhaltet I am Anfang eines Textes) I Text einfiigen ICTRL-B Inhalt des Hilfsspeichers einfiigen J Zeiger an den Anfang des Textes nk n Zeilen léschen (n=+#: alles léschen) OK vom Zeiger bis zum Anfang der Zeile léschen LO Text von Floppy laden (nur Einzelkommando) nL Zeiger um n Zeilen versetzen OL Zeiger an den Anfang der Zeile nM Zeiger um n Zeichen versetzen N Linge des Textes (hexadezimal) ausgeben nPR+#k n Zeilen auf Slot k geben (0Sk<6) SA Gesamten Text auf Floppy retten (wie LO) uP Zeigerstellung ausgeben nT n Zeilen ausgeben (n=+: alles ausgeben) v Zahl der Zeilen pro Seite ausgeben nX Die folgenden Befehle n-mal ausfithren nY Anzahl der Zwischenraume pro TAB definieren Z Zeiger an das Ende des Textes CTRL-D Zur Benutzung vor DOS-Kommandos Zeilen werden mit Return abgeschlossen. Return wird als Zeichen wie jedes andere behandelt. Fehlermeldungen: , NICHT GEFUNDEN‘ bei F und C; ,,*** CORE ***“, wenn kein Speicherplatz mehr frei ist; ,,F ALSCHE EINGABE* bei falscher Behand- lung von PR und a. Der Zeiger steht danach am Textanfang. Bei Uberlaufen des Eingabespeichers Abbruch des Eingabemodes und Abarbeiten des Eingabe- speichers. Anderungen und Erweiterungen gegeniiber der Urversion Damit man mit einer 40-Zeichen-Anzei- ge auf dem Bildschirm auch die volle Zeilenlange eines Druckers bearbeiten kann, ertént nach der Eingabe von 70 Zeichen ein Piepston. Die relevante An- zahl der Zeichen fiir diese Klingel steht in Speicherplatz $812 und kann nach eigenem Geschmack geiindert werden. N gibt nicht mehr die Anzahl der Zei- chen im Hauptspeicher, sondern die (he- xadezimale) Linge des Textes aus, was fiir die spater angesprochenen DOS- Kommandos wichtig ist. V zeigt nicht mehr die Gesamtzahl der Zeilen des Textes, sondern die Anzahl der Zeilen pro Seite. Als Seite ist defi- niert, was zwischen dem Anfang des Hauptspeichers und einem Formfeed (CTRL-L), zwei Formfeeds oder einem Formfeed und dem Ende des Hauptspei- chers steht. Damit ist ein bequemes Pagi- nieren gewahrleistet. S(earch) wurde in F{ind) umdefiniert, weil das S fiir DOS-Befehle benutzt wer- den sollte. CTRL-I dient zum Tabulieren und er- setzt auBerdem am Anfang eines Textes das I(nsert). Man kann also, wenn man mit linkem Heftrand schreiben will, ei- nen Schreibvorgang mit CTRI-I einlei- ten. Der Tabulator ist grundsitzlich fiir den gesamten Text gleich und ist nach dem Start auf das RastermaB acht einge- stellt. Mit nY kann der Tabulator zwischen 0 und 255 verandert werden. Da er nur bei der Ausgabe wirkt und bei der Eingabe als $89 im Text weggespeichert wird, geht das auch noch bei fertigen Texten. Mit OY hat man iiberhaupt keine Tabu- lierung mehr. Lassen Sie sich dadurch nicht tauschen! Die Tabulatoranweisung ist nach wie vor im Text vorhanden. Bei den Befehlen M und D wird der TAB wie ein Zeichen behandelt. Die Klingel be- handelt den TAB wie die gesetzte An- zahl von Zwischenréumen. nPR+#k dient zur Ausgabe auf einen Slot, entspricht also nT, nur dafi die Ausgabe nach $Ck00 umdirigiert wird, wo dann natiirlich ein entsprechendes Treiber- programm stehen muf, damit sich das System nicht aufhangt. nPR#+0 wirkt im- mer auf den Bildschirm, nur dab die Steuerzeichen jetzt verborgen sind. 4¢PR+#k gibt den gesamten Text auf Slot k. nPR+k-Befehle fiir k < 0 oderk>5 sind verboten und werden nicht akzep- tiert. Sollte sich das System wider Erwarten einmal nicht wieder mit dem ,,Prompt* melden (der von ! auf ? umdefiniert wur- 15 de, um Konflikte mit Assemblern zu ver- meiden), dann driicken Sie die Reset- Taste. Keine Angst, es geht kein Text verloren, nur der laufende Zeiger steht jetzt wieder am Anfang des Textes. Al- lerdings: Bei langen Schleifen im Insert- Mode kann man sich eine Menge ,,Miill einfangen, wenn man es nicht abwarten konnte und die Reset-Taste driickte, wenn Ted gerade Platz freigeschoben hat und dann zum Abbruch gezwungen wurde. Sehr argerlich war bei dem alten Editor, da man Escape, CTRL-X und CTRL-R nicht in den Text einfiigen konnte, da das Eingabekommandos sind. Viele Drucker werden durch Escape-Sequen- zen gesteuert. Deshalb gibt es jezt einen Befehl, um den Delimiter, also das Esca- pe, umzudefinieren. Weil das sehr ge- fahrlich sein kann und man damit belie- big viel ungewollten Unfug anrichten kann, sollte man ihn nur sehr vorsichtig und iiberlegt benutzen. Er gilt deshalb auch nur fiir das I(nsert)-Kommando und wird nach Abarbeiten des Eingangs- speichers sofort wieder abgeschaltet. Fiir dieses Umdefinieren wurde der Master- Space (@) verwendet, der leger, aber tref- fend im Deutschen auch ,Klammeraffe‘ genannt wird. Das unmittelbar auf den Klammeraffen folgende Zeichen wird als neuer Delimiter fiir den I(nsert)-Befehl definiert und steht als Textzeichen dann nicht mehr zur Verfiigung. Hier ein Beispiel, um den Epson-MX-80 auf Fettdruck umzuschalten: @ISEText.$$ $E steht jetzt mit im Text und schaltet den MX-80 auf Fettdruck um; der Punkt schlieBt den Text ab, $$ den Eingabemo- dus. Man darf nur ein Escape an einer Stelle einfiigen, da fiir den Eingangsspei- cher das Escape immer noch Trennzei- chen ist. Fir das | ist jetzt aber der Punkt das Trennzeichen; es kénnte auch jedes andere Zeichen sein. Nach @ ,,Char.“ sind CTRL-X, CTRL-R und Backspace in ihrer Funktion stillgelegt, so daB sie ebenfalls Bestandteil des Textes werden kénnen. Es gibt dann keine Korrektur- méglichkeit mehr bei der Eingabe! Zum Gliick bleibt immer noch die Reset- Taste, wenn man sich verhaspelt. Wie bei allen komplizierten Sachverhalten gilt auch hier: Probieren geht iiber Lesen! Zwei Befehle wurden hinzugefiigt, um die mit Apple-Ted erzeugten Texte via DOS zu speichern und zu laden: SA Filename’ (,Device) speichert zuvor erstellten Text unter dem Namen 'File- name’ als Binarfile auf der Floppy, wo- 16 bei dem Benutzer gleichzeitig Anfang und Linge des Textes mitgeteilt werden. Beispiel: SA BRIEF, D2$$ gibt die Meldung BSAVE BRIEF, D2, A$2000,L$:0cxx auf den Bildschirm und speichert den erstellten Text auf dem. Laufwerk 2 unter dem Namen BRIEF. LO Filename’ (,Device) ladt den Text wieder von der Floppy in den Haupt- speicher. Beispiel: LO BRIEF, D2$$, gibt die Meldung BLOAD BRIEF, D2,A$2000 auf den Bildschirm und ladt den Text BRIEF. Alte Texte werden ge- léscht. Beachten Sie bitte, daB beide Befehle nicht mit CR abgeschlossen werden, sondern wie alle Befehle des TED mit Escape! Beide Befehle k6nnen zwar in einen Befehlsstring eingebunden wer- den, aber alle Befehle nach SA und LO werden nicht mehr ausgefiihrt, da TED zu Verwaltungszwecken nach diesen Be- fehlen einen Warmstart machen muB, um die Zeiger neu zu setzen. Der laufen- de Textzeiger steht danach immer am Anfang des Textes. SchlieBlich kann man durch Vorsetzen eines CTRL-D alle DOS-Befehle benut- zen, die es gibt. Auch diese Befehle diir- fen nicht mit CR, sondern miissen mit $$ (zweimal Escape) abgeschlossen werden. Beispiel: CTRL-D CATALOG, D1$$ wirkt in bekannter Weise. Dadurch hat man die Méglichkeit, Texte beliebig zusammenzubinden. Hier zwei Beispiele: 1. Anhéngen von TEXT2 an TEXT1: LO TEXT1$$ mit Echo BLOAD TEXT1, A$2000 Jetzt mit E$$ das Ende des Textes im Hauptspeicher bestimmen, z. B. mit Echo $34FA und hierhin den Start von TEXT2 legen mit CTRL-D BLOAD TEXT 2, A$34FA$$ TEXT2 ist damit an TEXT1 angehingt. 2. Einfiigen von TEXT2 an beliebiger Stelle von TEXT1: TEXT1 wie oben laden Mit BK$CTRL-D BLOAD TEXT2,A$1300$$ Hilfsspeicher léschen und TEXT2 dort- hin laden (TEXT2 darf nicht langer als $1AFF-$1300=$7FF Zeichen lang sein entsprechend der zur Verfiigung stehen- den Lange des Hilfsspeichers). Mit BR$$ kann man sich vom Vorhan- densein von TEXT2 im Hilfsspeicher iiberzeugen und mit ICTRL-B$$ kann man jetzt TEXT2 vor dem laufenden Zei- ger in TEXT1 einfiigen, was ja durch entsprechendes Positionieren des lau- fenden Zeigers an beliebiger Stelle geht. Weitere Anwendungen mégen dem Spielbetrieb des geneigten Lesers iiber- lassen bleiben. Bei einer falschen Eingabe nach CTRL-D erhalt man eine DOS-Basic-Fehlermel- dung und befindet sich anschlieBend im Basic. Ein Reset bewirkt den Riick- sprung zum Texteditor. Auch mit 80-Zeichen-Karte funktionsfahig Das Programm lauft ohne Anderung auf dem Basis 108 im 40-Zeichen-Modus, wenn man mit FP40 ,,hochzapt*. Bei ei- nem Start mit FP80, also im 80-Zeichen- Modus, sollte vorher im Programm der Speicherplatz $825 von 0 auf $40 gean- dert werden. In beschrankter Weise lauft Apple-Ted auch mit einer 80-Zeichen-Karte auf dem Apple (z. B. Videx). Steckt diese Karte in Slot 3, reicht es, im Programm $825 von 0 auf $80 und $B30, $B31 von $58, $FC auf $ED, $FD zu andern. Ande- renfalls muB noch $B7D von $C3 auf $Cx (x = Slotnommer) geandert werden, Die 80-Zeichen-Karte muB eingeschaltet werden, bevor man mit BRUN TED in den Editor geht, und nach dem Start von Apple-Ted muf einmal Reset gedriickt werden. Da das Programm sich sonst aufhangt, wird Ihnen gar nichts anderes iibrigbleiben! Sonderfunktionen der 80- Zeichen-Karte stehen allerdings nicht mehr zur Verfiigung, zum Beispiel die Kleinschreibungskriicke mit CRTL-A (es gibt inzwischen viel elegantere Metho- den, den Apple auf Kleinschreibung um- zuriisten). Bild 2 zeigt ein kleines Priifsummenpro- gramm fiir die in Bild 1 wiedergegebene Version. Bevor es gestartet wird, ist App- le-Ted ab Adresse A 20 000 (dez.) zu laden (BLOAD TED, A 20 000). Literatur [1] Edwards, Lew: The First Book of KIM, MOVIT. [2] Ihme, H. M.: 6502-Texteditor. Funkschau- Sonderheft Nr. 31, Seite 49...52. [3] Apple Il Reference Manual. [4] Beneath Apple DOS. Herwig Feichtinger Datenaustausch Zwei Computer im Gesprach Wer zwei unterschiedliche Computer nebeneinander stehen hat, argert sich oft darliber, daB weder Kassetten- noch Diskettenfor- mat kompatibel sind. Ein Uberspielen von Programmen und Daten ist daher nur per Kabel mdglich. Doch auch daftir braucht man schon ein wenig Software. Hier wird ein Apple-ll-Programm- paket vorgestellt, das eine Ubertragung im 6502-Hex-Format erlaubt. Als Gegenstation dient beispielhaft ein AIM-65. Drei Drihte geniigen Der Einfachheit halber erfolgt die Uber- tragung zwischen Apple-II und AIM-65 asynchron mit 300 Baud im TTL-Pegel. Auf Seiten des Apple-II kann dann ném- lich der Game-Connector als Schnittstel- le mifbraucht werden, und der AIM-65 ist mit wenigen Anderungen an der TTY-Schnittstelle ebenfalls hierfiir ge- eignet (Bild 1). Insgesamt sind also nur drei Driihte zwischen beiden Computern erforderlich. Bild 2 zeigt das Assemblerlisting des Programms, das den Apple-I veranlabt, Daten im 6502-Hex-Format zu senden oder zu empfangen. Will man Daten vom AIM-65 empfangen, so braucht man nur im Apple-Monitor 8200G einzugeben und auf Seiten des AIM ein Mini-Pro- gramm zu starten (Bild 3). Nach Druck auf die AIM-Taste D (Dump) und Beant- Das 6502-Hex-Format ist ein Format zur lich mit der Zeilenzahl identisch ist, worten der Fragen FROM und TO mit Dateniibermittlung, das beliebige S, weil ja keine weiteren Bytes in der Anfangs- und Endadresse gibt man OUT 8 ae y' pay cherbereiche in ASCII-Hexadezimal-Zif- | Schlufzeile stehen. = Uein. Ist der vollstandige Adres- fern verschliisselt und mit Priifsummen gegen Fehler absichert. Zahlreiche Com- puter haben dafiir geeignete Routinen. bereits in ihrem Monitorprogramm im- 80 . 7" i i a 0 5 ERROR EQU $FF2D | 823E Al TAY plementiert, z. B. KIM, 1 nae $9 oder 0800 6 AN3 EQU $CO5E 823F 995ECO 49 STA AN3,Y¥ System-65. Das Format ist folgenderma- 0800 7 BB BQU $C061 | 8242 adc 50 LDY XTEMP Ben aufgebaut: Jede Zeile beginnt mit 0800 8 XTEMP EPZ $C9 8244 68 51 PLA einem Strichpunkt und endet mit einem | | 089° o. XTEMES UEE2 Se 245 60) popeees | RIS Return-Zeichen. Nach dem Strichpunkt 0800 10 PNT = EPZ $cB 8246 bs oi ern: ceichen: Nach dem Striehpum 0800 11° suM EPZ $CD 8246 $4 ;ZEICHENEINGABE folgen zwei Hex-Ziffern, die die Anzahl 0800 12. LEN EPZ SCF 8246 86CA 55 ZEIN STX XTEMI i 0800 13 CNT = -EPZ $D1 8248 2C61cO 56 EMP BIT PB ley ne der Zeile sngeben: Dann 0800 la; 8243 30FB 57 BMI EMP ommt die vierstellige Hexadezimal-An- | | 209 15 orc $8200 | 824p A208 58 LDX #8 fangsadresse (MSB, LSB), gefolgt von der 8200 4cpc82 16 UMP READ 824F A911 59 LDA #$11 ifizi D 8203 4¢2183 17 IMP WRITE | 8251 203682 60 JSR WAIT+2 spe e on fava von stenbyies: 8206 18; 8254 2C61C0 61 BIT PB m Ende der Zeile steht eine vierstellige | | 3206 19 ;ZEICHENAUSGABE 8257 30EF 62 BMI EMP hexadezimale Priifsumme iiber alle vor- 8206 48 20 ZAUS PHA 8259 A900 «63. LDA #0 angegencenen Biles dem Strich- 8207 48 21 PHA 825B 48 64 NBIT PHA Pt Nish wake é (aul de le D; 8208 B6CA 22 STX xreM1 | 825C 203482 65 JSR WAIT punkt ; » LSB). Die maximale Daten- | | 329, az0g 23 LDX #8 825F AD61C0 66 LDA PB byte-Anzahl einer Zeile betragt dezimal 820C 203482 24 BEGA JSR WAIT 8262 0A 67 ASL 24 (hex 18). Ist die Zahl der Datenbytes Q20H A900 = 25 LDA #0 8263 68 68 PLA eel at it Null oo sfizi re 8211 BD5ECO 26 STA AN3 8264 6A 69 ROR in einer Zeile mit Null spezifiziert, so 8214 68 27 PLA 8265 CA 70 DEX handelt es sich um die letzte Zeile der 8215 48 28 WIEDH PHA 8266 DOF3 71 BNE NBIT Ubertragung; statt der Adresse wird 8216 203482 29 JSR WAIT 8268 48 72 PHA - Re 8219 68 30 PLA 8269 203482 73 JSR WAIT dann vierstellig die Zahl der vorange- 821A 203982 31 ISR OUT2 826C 68 74 PLA gangenen Zeilen und wieder die Priif- 821D 4A 32 LSR 826D ABCA 75 LDX XTEM1 summe gesendet, wobei letztere natiir- 821E CA 33 DEX 826F 0980 76 RA #$80 821F DOF4 34 BNE WIEDH 8271 60 cus RTS 8221 203482 35 JSR WAIT 8272 78 8224 A901 36 LDA #1 8272 79 ;SUMME AUFADDTEREN 8226 203982 37 JSR OUT2 8272 80 ;UND BYTE AUSGEBEN 8229 ASAD 38 LDA #$A0 8272 20CE82 81 NADD JSR ADD+3 e . 822B 203682 39 JSR WAIT+2 | 8275 82 7 PCDO/AIM=65 Piet 822E ABCA 40 LDX XTEM1 | 8275 83 ;BYTE AUSGEBEN 26, Pin2 ree Contactor 8230 68 41 PLA 8275 48 84 NUMA PHA (7418 38) o—— PBO 8231 4cFOFD 42 UMP $FDFO | 8276 4A 85 LSR Appl. “Cam To—F}- 1 AN3 8234 A922 43 «WAIT LDA #$22 8277 4a 86 LSR 8236 4CABFC 44 SMP $FCA8 | 8278 4A 87 LSR a End 8239 48 45 ouT2 PHA 8279 4A 88 LSR 823A 84c9 46 STY XTEMP | 827A 208082 89 JSR NOUT Bild 1. Verbindung eines AIM-65 mit 823c 2901 947 AND #1 827D 68 90 PLA dem Apple-II. Die Ubertragung erfolgt asynchron im TTL-Pegel; auf der AIM- Bild 2. Assemblerlisting des Apple-Programms zum Datenaustausch > Platine sind C7 und R8 auszuléten im 6502-Hex-Format 17 827E 8280 8281 8283 8285 8287 8289 828C 828C 828C 828C 828F 8292 8294 8295 8296 8297 8298 829A 829D 82A0 82A2 82A4 82A5 82A6 82A7 82A8 82AA 82AC 82AE 8280 82B2 82B4 82B6 82B8 82BA 82BC 82BD 82BD 82BD 82BF 82c1 82c3 824 82C4 824 82C6 82c8 82CA 82CB 82CB 82CB 82cB 82CE 82cP 82D0 82D1 82D3 82D5 82D7 82D9 82DA 82DB 82DCc 82pc 82Dc 82DF 82E1 82E3 82E6 82E9 82EB 82ED 82EF 82F0 82F3 82F5 82F7 82FA 82FC 82FE 8301 8303 290F 69B0 COBA 9002 6906 4c0682 204682 20A882 BO12 oa oa oA oa 85C9 204682 20A882 BO04 E6CB D002 E6CC 60 A900 85CD 85CE 60 208C82 204682 COBB DOF9 200482 20CB82 BO32 c900 FO31 AA 20CB82 BO28 85cc 20CB82 B021 85CB 20CB82 BO1A A000 139 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 169 170 171 172 173 AND #SF NOUT CLC ADC #$B0 CMP #$BA BCC LT10 ADC #6 LT10 IMP ZAUS BYTE EINLESEN 7C=1 WENN NICHT HEX BYTIN JSR ZEIN JSR PACK BCS NOHEX ASL ASL ASL ASL STA XTEMP JSR ZEIN JSR PACK BCS NOHEX ORA XTEMP cle RTS NOHEX SEC RTS PACK CMP #SB0 BCC NOHEX CMP #$C7 BCS NOHEX CMP #SBA BCC PAK1 CMP #$CO BCC NOHEX ADC #8 PAKL AND #$F RTS ;POINTER INKREMENTIEREN INCP INC PNT BNE INCP1 INC PNT+1 INCP1 RTS ;CHECKSUMME LOESCHEN CLSUM LDA #0 STA SUM STA SUM+1 RTS YTE LESEN UND ;SUMME AUFADDIEREN ADD JSR BYTIN PHP PHA cLe ADC SUM STA SUM BCC ADD1 INC SUM+1 ADDL PLA PLP RTS |EXDATEN EINLESEN READ JSR ZEIN CMP "; BNE READ JSR CLSUM JSR ADD BCS ERR CMP #0 BEQ RDY TAX JSR ADD BCS ERR STA PNT+1 JSR ADD BCS ERR STA PNT READ1 JSR ADD BCS ERR Lpy #0 8305 8307 830A 830B 830D 8310 8312 8314 8317 8319 831B 831D 8320 8321 8321 8321 8324 8326 8329 832B 832E 8330 8333 8335 8337 8339 833B 833D 8340 8342 8345 8347 8349 834B 834E 8350 8352 8354 8356 8358 835A 835C 835D 8360 8362 8365 8367 836A 836C 836E 8371 8374 8376 8377 8379 837B 837D 837F 8380 8382 8384 8387 8389 838C 838F 8391 8394 8396 8399 839B 839E 83A0 83a3 83A5 83A8 83AA 83AC 83AF 83B0 83B2 83B4 8337 91CcB 20BD82 cA DOFL 208c82 CSCE D009 20882 c5cD D002 POBF 202DFF 60 AD72AA 85CB AD73AA 85CC ADG6OAA 85CF ADG1AA 85D0 A900 85D1 85D2 A98D 200682 ASBB 200682 E6D1 D002 E6D2 200482 ASDO poo8 ASCE F039 c918 9002 A918 AA 207282 A5CC 207282 ASCB 207282 A000 B1CB 207282 20BD82 ASCE 38 E901 85CF B002 c6D0 CA DOEB ASCE 207582 a5cD 207582 4C3B83 A900 207582 ASD2 207582 ASDI 207582 A5D2 207582 ASDL 207582 A203 A900 207582 CA DOF Ag98D 200682 60 174 175 176 177 178 179 180 181 182! 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 ERR RDY STA JSR DEX BNE JSR CMP BNE JSR CMP BNE BEQ JSR RTS (PNT) -Y INCP READL BYTIN SUM+L ERR BYTIN SUM ;HEXDATEL AUSGEBEN WRITE WRI WRO WR2 WR3 WR4 wWRS WRDY FILL LDA STA LDA STA LDA STA LDA STA LDA STA STA LDA JSR LDA JSR INC BNE INC JSR LDA BNE LDA BEQ CMP BCC LDA TAX JSR LDA JSR LDA JSR LY LDA JSR JSR LDA SEC SBC STA BCS DEC DEX BNE LDA JSR LDA JSR MP LDA JSR LDA JSR LDA JSR LDA JSR LDA JSR DX LDA JSR DEX BNE LDA JSR RTS END SAA72 PNT $AA73 PNT+1 SAA60 LEN SAA6L LEN+1 #0 cNT CNT+1 #$8D ZAUS ZAUS CNT WRO CNT+L CLSUM LEN+1 WR2 LEN WRDY #24 WR3 424 NADD PNT+L NADD PNT NADD #0 (PNT) ,¥ NADD INCP LEN #1 LEN WRS LEN+1 WR4 SUM+1 NUMA senbereich iibertragen, kann man noch einen weiteren senden, der auch an ei- cher ganz anderen Stelle im Speicher ste- hen darf; andernfalls ist nach MORE? einfach N einzugeben. Tritt wahrend der Ubertragung ein Feh- ler auf, so bricht der Apple-II das Einle- sen der Daten ab, gibt einen kurzen Ton aus und druckt ,,ERR“ auf den Bild- schirm. Ist die Ubertragung ohne Fehler zu Ende, so erscheint wieder der norma- le Monitor-Prompt. Selbstverstiindlich erscheinen die Daten im Apple-II im gleichen Speicherbereich, aus dem sie im AIM-65 ausgelesen wurden. Vom Apple zum AIM Zum Senden eines Speicherbereichs holt sich der Apple-II die Anfangsadres- se aus den DOS-Zellen AA72 und AA73 sowie die Lange aus AA60 und AA61. Dorthin werden sie nach einem BLOAD- Befehl naémlich vom Disketten-Betriebs- system (48-KByte-Apple) automatisch geschrieben. Sinnvoll ist also folgende Vorgehensweise: Erst das Programm in Bild 2 laden, dann erst das zu sendende Maschinenprogramm. Die Zeiger sind dann namlich von selbst richtig gesetzt, und der Start der Ubertragung kann mit 8203G vom Monitor aus erfolgen. Vorher ist natiirlich der AIM-65 entspre- chend vorzubereiten; Bild 3 enthalt be- reits das Setzen des dafiir ndtigen User- Input-Vektors. Dann braucht man nur noch L (fiir Load) und IN=U einzuge- ben. Selbstverstandlich beschwert sich auch das AIM-Monitorprogramm mit ei- ner Fehlermeldung, wenn ein Ubertra- gungsfehler auftritt, wenn auch mangels Lautsprecher nicht akustisch. Universell verwendbar Systemspezifisch sind in Bild 2 ledig- lich die Adressen zur Zeichen-Ein- und -Ausgabe sowie die Error-Routine im Apple-Monitorprogramm. Pat man die- se an, so laBt sich die Software fiir belie- bige andere 6502-Computer verwenden. Ebenso gut ist es natiirlich méglich, zwei Apples damit in Verbindung treten zu lassen. Wem 300 Bd zu langsam sind, kann die Programmparameter fiir 1200 Bd andern (Bild 4). Das Byte an der Apple-Adresse 822A bestimmt die Verzégerungszeit zwischen zwei gesendeten Zeichen; der in Bild 2 angegebene Wert hex AO gestat- tet es, auch solche Geriite als Gegensta- tion zu verwenden, die die empfangenen Zeichen als Echo zuriicksenden oder ei- ne langere Zeit zur Verarbeitung einzel- ner Zeichen brauchen. Im allgemeinen kommt man aber mit einem Wert von hex 15 in Zelle 822A aus. Das Programm ist als Objektcode und als Assembler-Source fiir den Lazer-Assem- bler ,,Lisa“ vom Franzis-Software-Servi- ce auf der Apple-Sammeldiskette 6 er- haltlich. Literatur (1] Hofer, R.: V.24-Ein- und Ausgabe beim Apple-II. mc 1983, Heft 3. [2] Feichtinger, H.: Babylon's Datenverwir- Tung. mc 1981, Heft 1. Grof- und Kleinschrift ohne Shift-Taste Das im Bild dargestellte Applesoft-Pro- gramm hat sich in einer Zahnarztpraxis bei der Erfassung von Adressen bewahrt. Es sorgt dafiir, dab der jeweils erste Buchstabe einer Eingabezeile gro ge- schrieben wird, ohne daf man die Shift- Taste betitigen muS. AuBerdem erschei- nen diejenigen Buchstaben in GroB- schrift, denen ein Leerzeichen, ein Punkt oder ein Bindestrich vorangeht. Das Unterprogramm zur Umwandlung der Zeichen in Kleinbuchstaben besteht nur aus den Zeilen 101 bis 107. Wie es | aufgerufen wird, geht aus dem Pro- | grammteil ab Zeile 1000 hervor. | Kommas, Doppelpunkte und Strich- punkte ersetzt das Unterprogramm durch ein Leerzeichen. Dadurch verhin- dert es, daB unbemerkt Teile einer Ein- gabe verlorengehen. Damit keine Verzé- gerung bei der Ausgabe auf dem Bild- schirm eintritt, sollte die Routine még- lichst am Programmanfang stehen. Da jedes neue Wort automatisch groB ge- schrieben wird, muf man, wenn ein Kleinbuchstabe gewiinscht wird, diesen einen Buchstaben mit der Shift-Taste eingeben —z. B. das ,,d“ bei ,,Unter den Linden“. Kommen zwei GroBbuchstaben. hintereinander vor, dann mu man sie durch ein Leerzeichen trennen. Dr. Wolfgang Zechner <*>=108 </> 0108 DB EB Fl 00 ;Vektoren <*>=FO </> 00FO 60 90 FD 68 </> 0OF4 4C AB EE ;TTY~Ausg. <*>=A417 </> A417 0c CO 7300 Baud Bild 3. Vorbereiten des AIM-65 zur seriellen Ein- und Ausgabe 10 GOTO 1000 101 IF I$ = “OR Is = 4" "OR I$ = ":" THEN I$ =" " Baudrate 1200 300 Apple $8235 $0F $22 $8250 $0A $15 AIM $A417 $02 $0c $A418 SFD $cO Bild 4, Baudraten-Einstellung bei AIM-65 und Apple-II 103 IF Né = "" OR RIGHTS (N$,1) =" "" OR RIGHTS (NS, 1) = "." OR RIGHT$ (N$,1) = "-" THEN RETURN 205 1 = ASC (I$)s IF I < 65 OR I > 93 THEN RETURN 107 I= I + 32:1 = CHRS (I): RETURN 1000 PRINT "ANREDE, TITEL: " 1001 GET I$: IF I$ = CHR$ (13) THEN PRINT : QOTO 1004 1002 GOSUB 101: PRINT 1%; 1003 N$ = N$ + I$: GOTO 1001 1004 TI$ = N@rNS = "" 1005 PRINT "VORNAME,NAME: "5 1006 GET I$: IF I$ = CHR$ (13) THEN PRINT : GOTO 1009 1007 GOSUB 101: PRINT 1%; 1008 NS = NS + I$: GOTD 1006 1009 NNS = N¢iNé =" _ 1010 PRINT "ADRESSE: "y 1011 GET I$: IF I$ = CHR$ (13) THEN PRINT : GOTO 1014 1012 GOSUB 101: PRINT I$; 1013 N$ = N& + I$: GOTO 1011 1014 ADS = NSzNS =" Die Eingabe von Adressen beschleunigt dieses kleine Pro- gramm. Es wurde auf einem Apple-kompatiblen Computer mit Gro8-/Kleinschreibung erstellt 19 Ludwig Neidl Felder schnell abgespeichert Neuer Apple-Befehl macht’s mdglich Haben Sie schon einmal versucht, ein groBes Datenfeld — etwa mit 40 x 40 Indizes — unter dem Disketten-Betriebssystem des Apple-ll abzuspeichern oder zu lesen? Probieren Sie es aus! Lehnen Sie sich entspannt zurtick und schliirfen Sie einen Drink, den ein Mensch mit empfindlichen Nerven bei einer solchen Aktion dringend braucht. Die Standard-DOS-Routinen brauchen dafiir eine ,,halbe Ewigkeit“. Der Grund liegt darin, daB sie die Daten als ASCll-Zeichen auf die Diskette schreiben und auch die internen DOS-Routinen ihre Zeit bendtigen. Viel einfacher ist es, das Feld direkt binar abzuspeichern. Das abgedruckte Programm (siehe Bild) speichert und liest Felder von Gleitkom- ma- und Ganzzahlen. Es wird in den Bereich $2F5 bis $3CB geschrieben und mit 2F5G initialisiert. Sollte jemand da- nach den gesamten Eingabepuffer ($200 bis $2FF) vollschreiben, so wird zwar der Initialisierungsteil zerstért, die Haupt- routine bleibt jedoch erhalten. Mit der Floppy kann man dieses Hilfsprogramm mit BRUN ARRAY COPY initialisieren, sofern es vorher ab Adresse $2F5 unter dem Namen ARRAY-COPY abgespei- chert wurde. Die Routine kann iiber den &-Vektor von Applesoft aus aufgerufen werden und funktioniert auch im Direktmodus. Fin Zahlenfeld wird auf Diskette geschrieben Aufruf durch: & STORE A bzw. allgemeiner: (... :) & STORE A (, expr) (:...) & STORE A % (, expr) & STORE A$ (, expr) Nach dem Aufruf wird das Zahlenfeld auf die Diskette geschrieben, wobei der Wert (expr) zwischen 0 und 255 liegen mubB. Wird kein Feldindex vereinbart, so 20 nimmt die Routine fiir den Ausdruck (expr) den Wert 0 an. Das Feld steht nach dem Schreibprozef mit seinem Feldnamen (A oder A %, aber auch A$ !) und dem Anhang: /(expr) auf der Disket- te, also z. B. A/OO beim Aufruf: & STORE A. Die Routine kann auch die Stringpointer eines Stringfeldes (& STORE A$) abspei- chern. Eine direkte Anwendungsmég- lichkeit dieser Eigenschaft laBt sich zwar nicht erkennen, die Méglichkeit hierzu sollte jedoch dem Anwender nicht ver- schlossen bleiben. Und so liest man das Feld Aufruf iiber: (...!) & RECALL A (, expr) ( & RECALL A% (, expr) {...:) & RECALL A$ (, expr) (: Hierbei wird das Feld mit dem Namen A (bzw. A% oder A$) von der Diskette in den Bereich des Feldes im RAM eingele- sen. Natiirlich muf das Feld vorher ver- einbart worden sein (DIM A (.,.)). Das Feld im RAM muB nicht die gleiche Dimensionierung aufweisen, jedoch mindestens die gleiche Gesamtlange wie das Feld auf der Diskette besitzen. In einem solchen Fall stimmt die Indizie- rung natiirlich nicht mehr iiberein (siehe dazu das ,,Apple Reference Manual“, S. 137). Ist das Feld, das eingelesen wird, gréfer als der vereinbarte Bereich im RAM, so mu man mit einem Absturz rechnen, da dann die ,,Header“ anderer Felder, die im RAM auf das eingelesene Feld folgen, zerstért werden. Die Vorteile dieser Methode seien an- hand der Tabelle 1 und 2 dargestellt. Sie zeigen die Bearbeitungszeiten und die bendtigten Speicherkapazitaten fiir grofe Datenfelder. Hierbei ist die kon- ventionelle Methode mit (sequentiellen) Textfiles stark vom jeweiligen Argument abhangig (die direkte Methode mit & STORE ist vom Inhalt der Felder véllig unabhingig). Die jeweils zweite Zeile zeigt die bendtigten Werte fiir Datenfel- der, in denen nur Nullen stehen. Im Re- gelfall wird man jedoch pro Zahl 14...15 Gleitkomma bzw. 5...6 (Integer) ASCII- Zeichen bendtigen, so daB die Angaben der dritten Zeile durchaus haufiger vor- kommen kénnen. Der Vergleich der Methoden ergibt fiir & STORE eine 7- bis 8mal héhere Ab- speichergeschwindigkeit sowie die Re- duzierung des Speicherbedarfes auf bis zu 30% des urspriinglichen Wertes. Tabelle 1; Abspeichern des Gleitkommazahlen-Feldes A (40,40) & STORE ,,beliebig" (5 Bytes) 12 34 Textfile 0 (2 Bytes) 3815 Textfile —0.3333333E-02 (16 Bytes) 104 107 Tabelle 2: Abspeichern des Ganzzahlen-Feldes A% (40,40) & STORE ,,belicbig" (2 Bytes) 7 15 Textfile O(2Bytes) 38 15 Textfile | —12345 (7 Bytes) 60 47 21 1A **END OF PASS 1 **END OF PASS 2 0800 RRNHAAOARUN RARE ANN OR ERE E OED 0800 0800 0800 0800 0800 0800, 0800 0800 0800 AlL EPZ $3¢ 0800, AIH = EPZ AlL+1 1 2 3 ARRAY COPY re 5 6 T 8 9 10 TL 0800 12 A2L = -EPZ $3E 13 14 15 16 17 i8 19 * . * * * COPYRIGHT L. NEIDL id * . * * Pereetrtrrerrrr titi tt ret rit 0800 A2H © -EPZ A2L+1 0800 A3L © -EPZ $40 0800 A3H 0 «EPZ A3L+1 0800 alL — EPZ $li2 0800 NUMBER EPZ AML 0800 TXTPTR EPZ §B8 0800 LOWTR EPZ §9B 0800 20 0800 22 0800 22 CHRGET £QU $0081 0800 23 CHRGOT EQU $0087 0800 2) AMPRSN EQU $03F5 0800 25 STROUT EQU $DB3A 0800 26 GETBYT £QU $E6F8 0800 27 GTARPT EQU $F7D9 0800 28 PRNTAX EQU $F9u1 0800 29 COUT =EQU $FDED 0800 30 CROUT EQU $FD8E 0800 31 PRBYTE £QU $FDDA 0800 32 0800 335 02F5 34 ORG $2F5 02F5 35 Bs $600 025 36 02F5 37 02F5 A900 38 LDA #START } &-VEKTOR INITIALISIEREN 0287 8DF603 39 STA AMPRSN+L O2FA A903 ho LDA /START 02FC 8DF703 41 STA AMPRSN+2 O2FF 60 42 RTS 0300 43 0300 4 0300 A000 45 START LDY #00 0302 8442 46 STY NUMBER } ARRAYINDEX = 0 0304 B1B8 47 LDA (TXTPTR),Y ee Zusatzliche Befehle zum Abspeichern und Laden von Feldern stellt dieses Programm zur Verfiigung. Bei gréBeren Datenmengen spart das Disketten- platz und lastige Wartezeiten > 9004 203ADB B140 0980 20EDED Biuo Ag 0980 980 F003 20EDFD 100c SAVE NOERR ALLRGT NOARG DOIT NoscBU cMP BEQ CMP BEQ OMP cLc PHE JSR JSR LDA STA LDA STA JSR BEQ ISR JSR STX LDY LDA ASL cL ADC STA ADC STA LDA ADC STA SEC LDY LDA SBC STA my LDA SBC STA LDA LDY PLP PHP BCC LDA LDY JSR LDY LDA TAX ORA JSR INY LDA TAY ORA CMP BEQ JSR TYA BPL CHRGET GTARPT LOWTR (A3BL),Y #05 A2L ABL ALL ABH #00 AlH #02 (A3L),¥ A2L rem (A3L),¥ #00 A2H #SAVEST /SAVEST DOIT #LOADST /LOADST STROUT #00 (A3L),¥ #%10000000 cour (ABL) ,¥ #%10000000 TOKEN'S OF "RECALL' "LOAD" = "SEC" TOKEN'S OF "STORE" "SYNTAX ERROR" "SAVE"="CLC™ LOAD/SAVE-FLAG RETTEN NAECHSTES ZEICHEN HOLEN GIBT ES DAS FELD ? (LOWTR) -) (A3) TEST -) IST ES ":" ODER EOL ? UEBER DAS (,) SPRINGEN ARRAYINDEX BESTIMMEN ARRAYINDEX RETTEN ANZ. DER. DIM. HOLEN ANZAHL DER DIMENSIONEN*2 CARRY=0 FUER ADDITION KORR=2*ANZ.DIM. + 2BYTE(FELDNAME) + 2BYTE(OFST) + 1BYTE(DIMZ) CARRY BERUECKSICHTIGEN ANFANGSADRESSE IN AL BORROW L.B. DES OFFSETS HOLEN KORREKTUR ABZIEHEN BORROW BERUECKSICHTIGEN LAENGE IN A2 L/S-FLAG HOLEN UND WIEDER RETTEN L/S AUSDRUCKEN ARRAYNAME~1.ZEICHEN FUER % (-) $ TEST RETTEN BIT 7 = 1 1.2EICHEN DRUCKEN DITO 2.ZEICHEN FUER REAL (-) (%/$) TEST RETTEN 2.ZEICHEN VORHANDEN ? 2.ZEICHEN AUSGEBEN TEST AUF "REALARRAY" 037B 8A 110 TxA 3} TEST AUF % (-) $ 037¢ 1004 111 BPL STRING O37E AQA5 112 LDA #mKr 0380 Doo = 113, BNE INTSTR 0382 AQAN = 114 STRING LDA #"$" 0384 20EDPD 115 INTSTR JSR COUT 0387 AQAF 116 FLOAT LDA #"/" 0389 20EDFD 117 JSR COUT 3 "/" DRUCKEN 038C A542 118 LDA NUMBER 038E 20DAFD 119 JSR PRBYTE } ARRAYINDEX DRUCKEN 0391 A9CH 120 LDA #BGNSTR 0393 A003 121 LDY /BGNSTR 0395 203ADB 122 JSR STROUT 5 (,A$) DRUCKEN 0398 A63C 123 LDX ALL 039A A53D 12 LDA A1H 039¢ 20hirg 125 JSR PRNTAX ANFANGSADRESSE IN HEX DRUCKEN O39F 28 126 PLP L/S-FLAG HOLEN 030 BOOE = 127. BCS NOSAVE BEI "LOAD" SPRINGEN 03A2 AQCB 128 LDA #LENSTR 03A4 A003 129 LDY /LENSTR 03A6 203ADB 130 JSR STROUT 3 (L$) DRUCKEN 03A9 AG3E 0-132. LDX A2L O3AB A53F_ 132 LDA A2H O3AD 2041F9 133 JSR PRNTAX ; LAENGE IN HEX DRUCKEN 03B0 2088FD 13% NOSAVE JSR CROUT } CRLF ALS ENDE DES DOS-BEFEHLS 03B3 60 135 RTS 0384 84 136 LOADST HEX 64 4 CTRL-D 03B5 C2CCcF 137 ASC "BLOAD " 03B8 C1CHAO 03BB 00 138 HEX 00 O3BC 84 139 SAVEST HEX 84 3 CTRL-D 03BD C2D3c1_ 140 ASC "BSAVE " 03c0 D6C5A0 03¢3 00 wa HEX 00 03Ch ACCLAY 142 BGNSTR ASC ",A$ 03C7 00 143 HEX 00 03C8 ACCCA4 144 LENSTR ASC ",L$" 03CB 00 145 HEX 00 146 END #84** END OF ASSEMBLY HRD OR IORI ER ORAR KREMER . * SYMBOL TABLE -- V1.5 * * * errrrrirtr ret tirretrrt tts LABEL. LOC. LABEL. LOC. LABEL. LOC. ** ZERO PAGE VARIABLES: AlL = 003C-«AlH = -003D AZL_=—003E A2H_ = (003F =A3L = 00K0- AZH_— (OOH AML 0042 NUMBER 0042 TXTPTR 00B8 LOWTR 009B ** ABSOLUTE VARABLES/LABELS CHRGET 00B1 CHRGOT 00B7 AMPRSN 03F5 STROUT DB3A GETBYT E6F8 GTARPT F7D9 PRNTAX F941 COUT FDED CROUT FD8E PRBYTE FDDA START 0300 SAVE 030A NOERR 0311 ALLRGT 0312 NOARG 032E DOIT 035E NOSCBU 0378 STRING 0382 INTSTR 0384 FLOAT 0387 NOSAVE 03B0 LOADST 03B4 SAVEST 03BC BGNSTR 03C4 LENSTR 03C8 SYMBOL TABLE STARTING ADDRESS: 6000 SYMBOL TABLE LENGTH:0128 ! BRUN SORT.CODE SYMBOL TABLE SORTED ALPHABETICALLY AlH = 003D AlL = 003C AZH = 003F ~A2L_~—-003EA3H_— OOH ABL_— OOO AUL 0042 ALLRGT 0312 AMPRSN O3F5 BGNSTR 03C4 CHRGET 00B1 CHRGOT 00B7 COUT FDED CROUT FD8E DOIT 035E FLOAT 0387 GETBYT E6F8 GTARPT F7D9 INTSTR 0384 LENSTR 03C8 LOADST 0334 LOWTR 009B NOARG 032E NOERR 0311 NOSAVE 03B0 NOSCBU 0378 NUMBER 0042 PRBYTE FDDA PRNTAX F941 SAVE 030A SAVEST 03BC START 0300 STRING 0382 STROUT DB3A TXTPTR OOB8 SYMBOL TABLE SORTED BY ADDRESS AlL 003 -~AlH =—-003D- A2L_—ss003E_«AZH=—003F = A3L_ = 0040 ABH OOH NUMBER 0042 AL 0042 LOWTR 009B CHRGET 00B1 CHRGOT 0OB7 TXTPTR 0OB8 START 0300 SAVE 030A NOERR 0311 ALLRGT 0312 NOARG 032B DOIT 035E NOSCBU 0378 STRING 0382 INTSTR 0384 FLOAT 0387 NOSAVE 03B0 LOADST 03B4 SAVEST 03BC BGNSTR @3C4 LENSTR 03C8 AMPRSN 03F5 STROUT DB3A_ GETBYT E6F8 GTARPT F7D9 PRNTAX F941 CROUT FD8E PRBYTE FDDA COUT FDEDD 22 Wolfgang Schdépe Mehr Piatz auf Apple-Disketten Beim Apple-DOS 3.3 stehen normalerweise 35 Spuren auf der Diskette zur Verfiigung, was einem Speicherplatz von 143 KByte entspricht. Davon verbleiben nach Abzug des Betriebssystems selbst knapp 127 KByte fiir den Benutzer. Durch Andern weniger Adressen im DOS kann man jedoch 80 Sektoren (20 480 Byte) hinzugewinnen. Wenige Anderungen im DOS geniigen, um statt 35 nun 40 Spuren auf der Dis- kette auszuniitzen. Beim 48-KByte-DOS bestimmen die Adressen hex BEFE und AEB5 die Anzahl von Spuren und Sekto- ren. Die nétigen Anpassungen fiir 40 Spuren sind also: Adresse alt neu BEFE 23 28 B3EF 23 28 AEBS 8C AO Die Adresse B3EF, die im VTCO-Puffer liegt, gibt die neuen Spuren zur Bele- gung frei. Am einfachsten ist es, nach diesen An- derungen mit INIT eine neue Diskette zu initialisieren. Auf ihr steht dann das ge- anderte DOS fiir 40 Spuren. Dabei sollte gleich das gewiinschte Basic-HELLO- Programm im Speicher stehen; wiirde man namlich vor INIT erst eines von einer anderen Diskette laden, so ware der VTCO-Puffer wieder auf 35 Spuren zuriickgestellt. Das Umstellen alter, schon beschriebe- ner Disketten auf 40 Spuren ist nicht ganz so einfach. Es miissen namlich die im DOS liegenden Adressen auf der Disk iiberschrieben werden, ohne den sonsti- gen Disketteninhalt zu andern: BEFE in Spur 0 auf Sektor 8, Adresse FE; B3EF in Spur 2 auf Sektor 2, Adresse E! AEB5 in Spur 1 auf Sektor D, Adresse B5; VTCO in Spur 11, Sektor 0, Adresse 34. In der Bit-Kartei des VTCO-Puffers miis- sen auferdem die neuen Spuren auch freigegeben werden, indem man die Adressen C4, C5, C8, C9, CC, CD, Do, D1, D4 und D5 auf hex FF setzt. Um diesen Vorgang benutzerfreundlich durchzufiihren, iibernimmt das Maschi- nenprogramm in Bild 1 das Lesen und +0300, O38F 9308- 26 E3 0308- O1 OR10~ 91 8318- AS B320~ 06 @32€- AD 8336-94 @338- CB AD 60 @340- 97 20 @348- AB BD @350- £3 93 84 @358- AY 60 8360- 86 CB AD Q368- 1A 91 8378-06 AS @B78- CO AS 4A Ag A AG RSBSRS 2 BD 89 60 85 28 85 8D F7 BF BE 85 20 Bi 06 BE A @380- 44 @388- 45 @390- BE 0398- 20 0D BF @3A- EO BE 90 @BAB- 85 4D AD @3B0- BO 8D F7 ce AD O3B8- 86 85 48 28 06 Bild 1. Das Maschinenprogramm. Es ent- halt die USRWTS-Routine aus mc 6/1983 AMBRSSSRRSSSRRRGSLRRBRIRE SLISSSMESSLESARIRZBSSLSRR BSSSSRSVGLRALSSRSSLRLSA # 8 8 Zuriickschreiben von bzw. auf Diskette, und ein Basic-Programm (Bild 2). Dieses Basic-Programm ladt beim Start zu- nachst das Maschinenprogramm nach. Dann wird der Benutzer gebeten, die auf 40 Spuren umzustellende Diskette ein- zulegen. Die neuen fiinf Spuren werden initialisiert und stehen dann als zusatz- liche 20 KByte zur Verfiigung. Die hier abgedruckten Programme sind Bestandteil der Apple-Sammeldiskette 4, die unser Software-Service liefert. Literatur 1] Wiegandt, Dr. Ralf: Apple-DOS ~ Arbeits- weise und Aufbau. mc 1983, Heft 6, Seite 53. 230 REM tk S NEUE TRACKS ak 248 POKE 25,4: POKE 27,0: POKE 26,0 258 POKE 29,0:T = 35 260 POKE 26,7 278 PRINT "TRACK ",T 280 CALL 847 299 IF PEEK (29) > @ THEN GOTO 330 RBT=ATHL 348 IF T = 40 GOTO 340 328 GOTO 260 33@ PRINT . PRINT . FLASH: PRINT "DISK WRITE PROTECTED". NORMAL ; END | 600 340 REM kek AENDERN DES DOS AUF DER DISKETTE +r 610 END 358 POKE 25,4: POKE 26-8: POKE 27,8: POKE 28,4 628 Bild 2. Das Basic-Programm gestattet ein benutzerfreundliches Umstellen von 35-Spur-Disks auf 40 Spuren LIST 366 CALL 768 1100 REN sehbonosinkiomboiodabobnoabtodobbtotletak 378 448 REM 4UPDATE VON 35 AUF 4@ TRACK stikaok 386° CALL 420 REM ‘kW. SCHOEPE = 7 03. G1, 1984 tiki 398 4130 REM ssbb oitosbasletokiotoaobiikiotoleist ited 406 CALL 768 146 DS = CHRE (4) 440 POKE 4335, 40: POKE 28,2 156 PRINT D$"BLOAD TRK, OBJ1" 420 CALL 768 160 HOME : VTAB 5: INVERSE 176 PRINT "LEGEN SIE DIE ZU INITIALISIERENDE" 440 CALL 768 480 PRINT "DISKETTE EIN * 459 198 NORMAL 469° CALL 768 208 PRINT : PRINT : PRINT 470 REM 240 PRINT "DRUECKEN SIE EINE TASTE ": GET 2¢ 480 220 PRINT 490 CALL 768 508 RESTORE 526 READ W 538° POKE W, 255 548 NEXT 568 POKE 28,2 570 CALL 768 580 PRINT 590 INVERSE POKE 4356, 40: POKE 28,2 768 POKE 26,2: POKE 27,2: POKE 28,4 430 POKE 26,1: POKE 27,43: POKE 28,4 POKE 4277, 460: POKE 28,2 vole SECTOR BIT MAP UPDATEN some POKE 26,17: POKE 27,6: POKE 28:4 S18 FORI=@T09 556 POKE 4148, 40 PRINT PRINT " PRINT "ENTNEHMEN SIE DIE DISKETTE": NORMAL DATA 4292, 4293, 4296, 4297, 4308, 4301, 4304, 4305, 4308, 4309 PRINT UPDATE BEENDET ” 23 Herwig Feichtinger Programmtext- Editor Das folgende Apple-ll-Assemblerprogramm dient dazu, Texte in Maschinensprache-Software auf einfache Weise andern zu k6n- nen, z. B. um englischsprachige Software ins Deutsche zu Uber- setzen. Schon in me 1/1984 war ein kurzes Apple-Programm abgedruckt, mit dem man sich gewisse Speicherbereiche als ASCII-Zeichenfolgen ansehen konnte. ‘Will man solche Texte andern, so ware es ziemlich umstandlich, das Zeichen fiir Zeichen mit Hilfe einer ASCII-Tabel- le zu machen. Einfacher geht es mit dem hier abgedruckten Programmtext-Editor, der Speicherbereiche in ASCII anzeigt und auch das Uberschreiben mit neuen Zeichenfolgen gestattet. Das Bild zeigt das mit dem Lazer- Assembler ,,Lisa“ erstellte Listing. Am schnellsten erfolgt die Eingabe, indem man mit CALL-151 zum Monitor geht und dann die hexadezimalen Bytes in Gruppen von je etwa drei bis vier Zeilen eingibt: 8400: A9 23 8D F9...A1 98 8420: 4C 69 FF 20 usw. Mit BSAVE PTE,A$8400,L$D4 kann man das Programm auf Disk speichern, so daf man es spiter einfach mit BRUN PTE starten kann (das geht aber auch mit 8400 G, wenn es schon im Speicher steht). Nach dem Start erscheint die Meldung »CTRL-Y aktiviert“, und man kann eine beliebige Hex-Startadresse eingeben, z. B. 1A00, gefolgt von CTRL-Y und Re- turn. Nun werden die 16 Bytes ab dieser Adresse in einer Zeile als ASCII-Zei- chenfolge dargestellt. Nicht darstellbare CTRL-Zeichen erscheinen als Punkte auf dem Schirm, Kleinbuchstaben werden als solche ausgegeben (sinnvollerweise verwendet man einen entsprechenden Zeichengenerator, vgl. mc 6/1983). Die 24 Leertaste stellt die nachsten 16 Bytes dar. Will man nun in der letzten Zeile etwas andern bzw. ab der zuletzt angezeigten Adresse einen neuen Text eingeben, so muf man sich zuerst entscheiden, ob der neue Text mit Bit 7 = 0 oder 1 abgespei- chert werden soll. Fiir Bit 7 = 0 gibt man Shift-7 ein (’), sonst Shift-2 (”). Der Cur- sor steht nun unter dem ersten Zeichen der letzten Zeile. Mit der Apple-Taste Pfeil rechts“ kann man jetzt bis zu der ersten zu andernden Position vorriicken und den Text eingeben. Korrekturen sind wie gewohnt mit den beiden Pfeil- tasten méglich. Der Eingabemodus wird beendet, sobald man das 16. Byte der Zeile erreicht hat oder vorzeitig Return driickt (Return selbst wird nicht abgespeichert). Zur Kontrolle zeigt das Programm anschlie- Send die komplette Zeile nochmals an. Driickt man eine Taste auBer der Leerta- ste, Shift-2 und Shift-7, so gelangt man zum Apple-Monitor zuriick. Mit Shift-7 oder Shift-2 kénnte man die Zeile noch- mals iiberschreiben; mit der Leertaste riickt man 16 Bytes weiter. Das Programm ist insbesondere geeignet, um englischsprachige Software ins Deutsche zu iibersetzen und, sofern es die Tastatur und der Zeichengenerator zulassen, in Versalien geschriebene Tex- te in gemischte Grofi- und Kleinschrei- bung umzusetzen. Fiir Maschinenspra- che-Programmierer ist sicher noch die Routine PRTSTR interessant, die sich auch fiir andere Zwecke gut anwenden JaBt: Nach JSR PRTSTR folgt unmittelbar der auszugebende Text, abgeschlossen mit hex 98 als Endmarkierung. 0800 1 PNT = -EPZ $FE ; TEXTZEIGER 0800 2 FLG EPZ $FD ;BIT-7-FLAG 0800 3 ADR EPZ $3C ;VOM MON. 0800 4 SAVY EPZ $35 jY-REGISTER 0800 5S YVEC EQU $3F9 ;CTRL-Y 0800 6 KEY EQU $FDoC ;TASTE LESEN 0800 7 OUT EQU $FDED ; VIDEOAUSG 0800 8 MON EQU $FF69 ;MONITORSTART 0800 9 CR EQU $FD8E ;CR AUSGEBEN 0800 lo PRTAX EQU $F941 ;HEX-ADR. AUSG. 8400 11 ORG $8400 8400 12 OBJ $800 ;WEGEN ASSEMBLER 8400 13 ;CTRL-Y-VEKTOR INSTALLIEREN 8400 A923 14 INIT LDA £EDIT 5 CTRL-Y- 8402 8DF903 15 STA YVEC 3 VEKTOR 8405 A984 16 LDA /EDIT 8407 8DFAo3 17 STA YVEC+1 840A 20AF84 18 JSR PRISTR , 840D 8D 19 HEX 8D 840E C3D4D2 20 ASC "CTRL-Y AKTIVIERT!" 8411 CCADD9 8414 AoC1CB 8417 D4coD6 841A C9csD2 841D D4A1 841F 98 21 HEX 98 8420 4C69FF 22 JMP_MON 3ZUM MONITOR 8423 23° ;HIERHER SPRINGT JETZT CTRL-Y! 8423 208EFD 24 EDIT JSR Ci 8426 AS5SD 25 EDO LDA ADR+1 ; ADRESSE 8428 A63C 26 LDX ADR ;ANZEIGEN 842A 2041F9 27 JSR PRTAX 842D ASAo 28 LDA £$A0 3 SPACE 842F 20EDFD 29 JSR OUT 8432 Aooo 30 LDY £0 Assembler-Listing des Apple-II-Programmtext-Editors. Ohne allzu grobe Anderungen ist er auch fiir andere 6502-Computer iibernehmbar 8434 8437 8438 843A 843C 843F 8442 8444 8446 8448 844A 844c 844E 8450 8453 8455 8457 8459 845B 845D B45F 8462 8464 8466 8468 B46A 846D B46E 8470 8473 8475 8477 8479 8473 847D 847F 8482 8484 8486 8487 8489 848B 848D 848F 8491 8492 8495 8498 849A 849C 849F 84A0 B4A2 B4A2 84A4 B4A6 B4A8 B4AA B4AC 84AF 84AF 84AF 84Bo 84B2 8483 8435 84B7 84B9 84BB 84BD 84BF 84C1 84c3 84C6 84c9 84cc g4cc 84CE 84D1 84D3 20A284 ce Colo DoF8 208EFD 200CFD C9A0 DooD A53C 690F 853C 9002 E63D 4C2684 coA2 Doo4 AQFF Dood C9A7 Foo3 4C69FF AQ7F 85FD AooS A9AO 20EDFD 88 DoF8 20CC84 c9sD FoAC c988 Fo12 c995 Fo19 20EDFD 25FD 913 ca Colo Fo98 DOES Cooo FoDF 88 20EDFD 407084 Cole Fo87 20A284 ca DoCE B13 0980 C9A0 Boo2 AQAE 4CEDFD 68 85FE 68 85FF EGFE Doo2 E6FF A000 B1FE c998 Foo6 20EDFD 4CB584 6CFEoo 8435 200CFD A435 60 ED1 ‘JSR _DISP INY CPY £16 BNE ED1 JSR CR JSR KEY CMP £$A0 BNE ED2 LDA ADR ADC £15 STA ADR BCC ED3 INC ADR+1 ED3 _ JMP_EDo ED2 CMP £$A2 BNE ED4 LDA £$FF BNE ED4 CMP BEQ IMP ED4A LDA £$7F EDS STA FLG LDY £5 SPC LDA £$A0 JSR OUT DEY BNE SPC ED6 JSR GET CMP £$eD BEQ EDIT CMP £$88 BEQ BS CMP £$95 BEQ RGT JSR OU? AND FLG STA (ADR),Y¥ INY cPY £16 BEQ EDIT BNE ED6 BS CPY £0 BEQ ED6 DEY JSR OUT JMP ED6 RGT CPY £16 BEQ EDIT JSR DISP INY BNE ED6 }SP,ANZEIGEN 316 BYTES }PRO ZEILE ; TASTE j SPACE? JA 3+16 (C=1) 35 SPACES ; TASTE ; RETURN? sBACKSPACE? ;CUR.RECHTS? ;ANZEIGEN 3UND ;ABSPEICHERN ; ZEILENENDE? 3JA jNEIN ; ZEILENANF .? }NEIN j ZELLENENDE? 3 Z.ANZEIGEN }ZEICHEN AUS SPEICHER ANZEIGEN DISP LDA (ADR),Y ORA £$80 CMP £$A0 BCS DISP1 LDA DISP1 JMP OUT j TEXTAUSGABE jMIT JSR PRTSTR, DANN TEXT PRTSTR

Showing the first 100000 of 412740 characters.

mp.ls