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.