Text content (OCR)
Neuer 6502-Assembler
24-Nadel-Grafikausdruck
Pattern-Matching
Long-Integer-Routinen
Micol-BASIC
(Cy
PUBLIKATION
Computerbiicher
Bewoste
DOS Toalkit-Enweiterungen
kart.,
'85-1150-5
Begleitdiskette DM 48, —
doppelseitig beschrieben
ISBN 3-7785-1290-9
Dieses Buch wendet sich als lehr-
buchhafter Kurs an alle, die pro-
fessionelle hochaufgeléste Grafi-
ken auf dem Apple erzeugen wol-
len. Der erste Teil beginnt mit ei-
nem AbriB des Aufbaus der HGR-
Seiten aus der Sicht des Program-
mierers. Danach wird das Pro-
gramm HRCG (HI-RES Character
Generator, Apple, Inc.) eingehend
analysiert, und es werden sinnvol-
le Erganzungen vorgestellt.
Schrittweise wird die Nutzung des
HRCG erarbeitet bis hin zur belie-
bigen Bewegung eines statisti-
chen Objekts auf einer der HGR-
Seiten.
Der zweite Teil baut auf dem er-
sten auf und fihrt Gber die Defini-
tion mehrerer Objekte und simul-
taner Bewegung hin zu einem Ar-
cade-Spiel, das fiir die meisten
kauflichen Action-Spiele in der
meisterhaften Grafik als Vorbild
dienen kann. Grundkenntnisse in
6502-Assembler sollten vorhan-
den sein.
© Schapers, Bewegte Apple Grafik,
ISBN 3-7785-1150-5, DM 58, —
CO Begleitdiskette, DM 48, —
ISBN 3-7785-1290-9
Priboe Aivaies |
Versionen 10.1, 102, 11.1
1985, 470 S., kart., DM 68, —
ISBN 3-7785-1134-3
»Die ProDOS Analyse" ist die um-
fangreichste und detaillierteste
Darstellung, die jemals ein Apple-
Betriebssystem erfahren hat.
Wer die ,Innereien“ von ProDOS:
bis zum letzten Byte, z.T. bis ins
letzte Bit kennenlernen méchte,
braucht dieses Buch. Das kom-
plette Betriebssystem (Urlader,
MLI, Disk-Driver, RAM-Disk-Dri-
ver und Uhr-Routine) mit Ausnah-
me des BASIC-SYSTEM wird mit
umfangreichen Kommentaren
und Ubersichtstabellen disas-
sembliert.
Auch die nicht im , Technical
Reference Manual“ aufgefithrten
Eigenschaften von ProDOS wer-
den analysiert und beschrieben,
z.B. die vertrackten eingebauten
Testroutinen zur Identifikation der
verschiedenen Apple II Modelle
und eventueller Nachbaugerate.
Programmierer, die ProDOS ver-
sionsabhangig ,,patchen“ méch-
ten, erhalten hier den genauen
Uberblick, wo was geandert wer-
den muB, damit dies keine negati-
ven Konsequenzen hat.
© Schapers, Pro-DOS-Analyse
ISBN 3-7785-1134-3, DM 68, —
fy Hithig
Arne Schapers, Das BASIC SYSTEM, 1986, ca. 300 S.,
kart., DM 54, — ISBN 3-7785-1407-5
Sie wollen die erweiterten Méglichkeiten von ProDOS
und dem BASIC-SYSTEM voll ausnutzen? Nur hier fin-
den Sie
§ das Lesebuch: eine schrittweise Erklarung der Zu-
sammenarbeit zwischen Applesoft und dem Monitor,
des Aufbaus der Stringverwaltung, mégliche Umleitun-
gen der Ein-/Ausgabe und der Eingriffsméglichkeiten in
diese Ablaufe. Die gezeigten Mechanismen werden
durch zahlreiche (und sehr kurze) Beispielprogramme
untermauert;
Bi die Analyse: eine minutiése Sezierung des BASIC-
SYSTEM zusammen mit der Kommandoschnittstelle zu
ProDOS. Die Hauptfunktionen (Vektorbehandiung,
TRACE-Kontrolle, FRE-Kommando, Global Page und
benutzte Speicherstellen) sind jeweils in eigenen Ab-
schnitten erlautert, ein kommentiertes Listing schlieBt
diesen Teil ab;
ll Tips & Tricks; die verborgenen Méglichkeiten des BA-
SIC-SYSTEM (,Input Anything“, andere Dateinamen als
STARTUP, RESET ohne CLEAR), der Aufbau ,,externer
Kommandos“. Dieser Teil enthalt ein komplettes Rah-
menprogramm fiir die Erstellung eigener Kommandos
sowie die Erweiterung MONITOR, mit der (analog zu DOS
3.3) die Ausgabe von Kommandos und der Dateiverkehr
auf dem Bildschirm sichtbar gemacht werden kénnen.
[Arne Schapers.
CO Schapers, Das BASIC-SYSTEM,
ISBN 3-7785-1407-5, DM 54, -
BESTELLCOUPON
Gewinschte Biicher bitte ankreuzen und an Dr, Alfred Hithig
Verlag, Postfach 102869, 6900 Heidelberg, schicken.
Name
StraBe
Ort
Datum Unterschrift
Neue Preise ab 1. 2.1987
Normale Peeker-Sammeldisketten
#1, #2, 3", 4, 45°, 46, 47, #9", 410,
411, #12, #13, #14, 4:15, 417, #18, #19,
421, #22, #23, #24, #25, #27
je Diskette DM 22,—
*(fast) vergriffen
Spezielle Peeker-Sammeldisketten
48 mit Diversi-DOS, DM 26,—
#16 mit Macroeditor, DM 26,—
#20 mit Pic-Edit, DM 26,-—
#26 mit Dossembler, DM 26,—
Software mit Handbichern
Fast-Writer
ProDOS-Version, DM 98,—
DOS-3.3-Version, DM 98,—
Turtle-Graphics-Paket, DM 98,—
Superquick, DM 38,—
DISK40, DM 38,—
DM 38,—
DM 38,—
Double-Hires-Tools
Applesoft-Version, DM 28,-
Kyan-Pascal-Version, DM 28,-
vergriffen
Softbreaker
Superplot
Turtle-Graphics-Quelltexte
Pic-Edit-Quelitexte
Kyan-Pascal mit Tools
keine Preisanderungen, jedoch nur noch lie-
ferbar, solange Vorrat reicht
Wir méchten Ihnen heute mitteilen, daB der
Peeker mit dem Marz-Heft eingestellt wird,
denn der Apple || ist in Deutschland seit Mitte
1985 nach und nach durch andere Gerate ver-
drangt worden, insbesondere durch die IBM-
PCs im Profi-Bereich und die Atari-Computer im
Privat-Bereich. Der Apple Ilgs hat die in ihn ge-
setzen Erwartungen leider nicht erfiillt, denn
nach der Pressemitteilung vom 15. 9. 1986 ist
das designierte Nachfolgemodell fir den Apple II
sprichwértlich in der Versenkung verschwun-
den. Einer der Griinde hierfiir ist ein defekter
Custom-Chip, der wegen der Flat-Pack-Bauweise
nicht einfach durch einen neuen Baustein er-
setzt werden kann, zumal das Redesign eines
Custom-Chips nicht von heute auf morgen von-
statten geht. Laut ,PC-Woche", Heft 1/1987,
mUssen deshalb bei den bereits in den USA
ausgelieferten 25000 Geraten die gesamten
Platinen ausgetauscht werden. Dies fiihrt natur-
gemaB zu Verzdgerungen bei der Software-Ent-
wicklung bis weit Uber die Mitte dieses Jahres
hinaus, Dann werden jedoch 32-Bilt-Rechner,
z.B. von Atari und IBM, auf den Markt drangen,
so daB an einem 8/16-Bit-Zwitter in der Art des
IIgs keiner mehr interessiert sein wird.
Es verwundert deshalb nicht, daB von den 180
potentiellen, deutschen Soft- und Hardware-
Entwicklern, die wir vor Weihnachten ange-
schrieben haben, nur 3 Firmen ligs-Produkte in
Arbeit haben. Auch unseren 800 Kyan-Club-
Mitgliedern missen wir leider mitteilen, daB das
ligs-Kyan-Pascal-Projekt wegen der unsicheren
\lgs-Zukunft nicht mehr weiterverfolgt wird.
Aus alledem wird verstandlich, daB wir den
Peeker nicht mehr fortfiihren k6nnen. Fir die
beiden letzten Hefte haben wir uns jedoch noch
einige Bonbons ausgedacht, die Ihnen den Ab-
schied versiiBen sollen. Auf unseren Sammel-
disketten #25 bis #27 (Januar bis Marz) er-
scheinen der professionelle 6502-Assembler
»DOSSEMBLER" von Steffen Holzinger sowie
das Dateiprogramm ,DB-Meister". Ferner
konnten wir mit der Firma Frank & Britting ein
neues, sehr giinstiges Festplatten-Angebot
aushandeln, das jedoch bis zum 31.3. 1987 be-
fristet ist. SchlieBlich haben wir die Preise fiir
die Produkte aus dem Hiithig Software Service
per 1.2. 1987 gesenkt. Beachten Sie jedoch
auch hier, daB die Programme nur noch eine
begrenzte Zeit lieferbar sein werden, so daB Sie
sich vorsorglich bis Ende Marz eindecken soll-
ten.
Einige bereits geplante Projekte werden nicht
mehr realisiert. Dazu gehdrt insbesondere der
GFABASIC-Kompaktkurs sowie die in diesem
Zusammenhang angekiindigte Ubungsdiskette.
Auch die Hilfsprogramme und Quelltexte zum
»DB-Meister" werden nicht mehr veréffentlicht.
Die Haupt-Module sind jedoch auf den Sam-
meldisketten #25 bis 427 enthalten. Ferner
wird der 65816-Kurs noch komplett erscheinen,
da er von allgemeinem Interesse ist. Im Ubrigen
haben wir auch das Peeker-Aufsatzverzeichnis
fortgefiihrt, das fur die Monate 10/1986 bis 3/
1987 auf der Sammeldiskette +427 enthalten
sein wird.
Die Atari-ST-Besitzer unter unseren Peeker-
Lesern wird es freuen zu erfahren, daB ab Fe-
bruar 1987 in unserem Verlag ein ,,schnelleres
ST-Diskettenmagazin“ namens ,FaSTer Disk
Mag" erscheinen wird, das nur in Diskettenform
erhaltlich ist und neben ST-Programmen mit
entsprechender Dokumentation auch beispiels-
weise Einflhrungskurse zu Pascal und C als
Textfiles enthalten wird (Preis fir 1 ,FaSTer
Disk Mag“-Diskette DM 24,80; Preis flir 6 Dis-
ketten DM 130,-).
Jer fo
Ulrich Stiehl
iNHalt
q br hjahrspute
O
PUBLIKATION
Impressum Telefonnummern:
Zona. 00551409-0
sccconpuer ‘esata 06221/489-952
Meg ir wigecomptsr pen 0221/485-208
fi er Anomant O62 24/489:263
© fiir den gesamten Inhalt Software: 06221/4 89-231
einschiieBlich der Programme Bucher: 06221/4 89-353
aes cece (Gostaunge item sec)
Resa 18"
Vonage tnd Heraapober
Dow kin, germ
Goetattanang coco
fone Maher
Chetan Sto
redston Dagar Beorch
Anzeigenieitung: Karl M, Dietzow
Anasgonpoaton Oana Water
Peeker
‘Abonnement:
Der Abonnent kann seine Bestellung innerhalb von 7 Tagen
schriftch durch Mitteilung an den Dr. Alfred Huthig Verlag
‘GinbH, Postfach 1028 69, 6900 Heldelberg 1, widerrufen. Zur
Fristwahrung genigt die rechtzeitige Absendung des Wider-
rufs (Datum des Poststempols). Das Abonnement verlangert
sich zu den jeweils gilligen Bedingungen um ein Jahr, wenn
es nicht zwei Monate vor Jahrasende schritlich gekindigt
wird, Die Abonnementsgelder werden jalirlich im voraus in
Rechnung gestelit, wobei bel Telinahme am Lastschriftabbu-
chungsverfahren Uber die Postscheckamter und Bankinstitute
eine vierteljihriiche Abbuchung méglich ist
Nichterscheinen infolge noherer Gewalt berechtigt nicht zu
‘Ansprlichen gegen den Verlag
DEEKER
Assembler
DOSSEMBLER
Ein ProDOS-Editor-Assembler
fur den Apple I!
UCSD
Heft 2/1987
Long-Integer-Routinen
in UCSD-Pascal
von Thomas Schneider 58
vonStefien Uiclzinget 6 Readin-Prozedur fiir Ganzzahlen
65816/65802-Kompaktkurs Eine Utility fur UCSD-Pascal
fur Apple llgs, Teil 1 von Norbert M. Doerner 60
vonAme Schapers 12 UCSD-Pascal-Bildschirm-Dump
BRK — nur zum Anhalten? fur die Ehring-V80-Karte
von Michael G. Schneider 43 von Dr. U. Hesse 61
Drucker
= F , ProDOS
Grafikausdruck anschaulich erklart .
Mit Apple- und Atari-Algorithmen ProDOS-RAM-Disk-Driver
fiir den 24-Nadel-Drucker-LQ-800 fur die OHO-512K-RAM-Karte
von Ulrich Stiehl 29 von Stefan HuBfeldt 62
Individueller Zeichensatz
fur den Epson FX-80 Produkte
von Dipl.-Okonom Edgar Meyzis 38 MICOL-BASIC
Applesoft Eine strukturierte Compiler-Sprache
Leistungsfahiger Pattern-Matcher GaseieWell Gem Set 6
fur Applesoft-Strings
von Dipl.-Inform. Dieter Greiner 52 Bucher 68
Anschrift: Vertrieb: Bankverbindungen: Herstellung:
Dr. Allred Hithig Verlag GmbH
tm Weiher 10, Postfach 102869
6900 Heidelberg
Tolofon (06221) 489-0
Tolex 4-6 17 27 hued J.
und Versandkosten.
Telefax (06221) 489279 Versandkosten,
BIX* 51851 + Einzelhett OM 6,50
Vertrieb Handel
Auslieferung fir die Schwelz: Versebsteitung:
Delta-Verlag Walter Menzel, Tel. (06221) 489280
Herr R. de Forest
GugelmatistraBe 31
8967 Widen
Telefon 067 /338686
Erscheinungsweise: 12 Hette jahrlich,
Erscheinungstag jeweils 1 Woche vor Monatsbeginn.
Jahresabonnement Inland DM 75,-, einschl. MwSt
Jahresabonnement Ausland OM 75,~ plus DM 20,~
Zahlungen: an den Or. Alfred Hithig Verlag
GmbH, D-6900 Heidelberg 1: Postgiro-
Konten: Ludwigshafen 4799-673,
BLZ 545 10067; Osterteich: Wien 7555888:
Schweiz: Basel 40-24417-4; Niederlande:
Den Haag 1 457 28; Italien: Mailand 5 968 92 08;
Belgien: Brissel 07 23026-85;
Danemark: Kopenhiagen 603 4969;
Norwegen: Oslo 199.4243;
‘Schweden: Stockholm 5477 76-5
Bankkonten: Landeszentralbank Heidel-
berg 67207 341; BLZ 67200000; Deutsche
Bank Heidelberg 0265041; BLZ
67270003; Bezirkssparkasse Heidelberg
20451, BLZ 67250020.
Produktionsleitung: Gunter Sokollek
Gestaltung: Rainer Schmitt
Titelbild: Werner Hable
Satz und Druck:
Heidelberger Verlagsanstalt
Printed in Germany
DOSSEMBLER
Ein ProDOS-Editor-
Assembler fiir den
von Steffen Holzinger
Bedienungsanleitung
Der DOSSEMBLER, den nur Fortset-
zungsbezieher der Sammeldisketten als
Treuepramie automatisch mit der Sammel-
disk +26 zu diesem Heft 2/87 zusdizlich
erhalten, ist ein vollstandiger 6502/
65C02-Assembler, der unter dem Pro-
DOS-Betriebssystem lauft und somit ei-
nen 64K-Apple-li+ (mit oder ohne Videx-
Karte) oder einen Ile/c (mit oder ohne 80-
Zeichenkarte) voraussetzt. Da die Sam-
meldisk #26 im DOS-3.3-Format vorliegt,
verfahren Sie wie folgt:
4. Dateien ASM.SYSTEM (= eigentlicher
DOSSEMBLER-Editor/Assembier) — und
ASM.GP (DOSSEMBLER-Global-Page)
mit CONVERT oder DOSTOPRO auf lhre
ProDOS-Arbeitsdiskette konvertieren.
2. Da durch die Konvertierung BIN-
Dateien entstehen, miissen Sie diese in
SYS-Dateien umwandeln:
BLOAD ASM.SYSTEM, A$2000
DELETE ASM.SYSTEM
CREATE ASM.SYSTEM, TSYS
BSAVE ASM.SYSTEM, TSYS, A$2000,
114848
BLOAD ASM.GP, A$0300
DELETE ASM.GP
CREATE ASM.GP, TSYS
BSAVE ASM.GP, TSYS, A$0300, L144
Danach kénnen Sie den DOSSEMBLER
mit
-ASM.SYSTEM
starten. Dies sollten Sie jetzt auch tun,
damit Sie die nachfolgende Anleitung
Schritt fur Schritt nachvollziehen k6nnen.
6
Apple Il
1. Datumeingabe
Ist eine Hardware-Uhr eingebaut, so wird
nach dem Start des Assemblers (s.0.) de-
ren Datum und Zeit angezeigt und ver-
wendet. Ist in einem vorherigen System-
programm (z.B. Appleworks) das Datum
definiert worden, wird es angezeigt und
kann bei Bedarf verandert werden. War
vorher kein Datum definiert (z.B. nach
dem Booten), kann der Benutzer das Da-
tum eingeben, wobei das Geburtsdatum
des Programmautors als Beispiel dient.
Unkorrekte Eingaben werden mit einem
Piepser quittiert und kénnen wiederholt
werden. Danach erscheint am Bildschirm
das Hauptment.
2. Hauptmenii
2.1. Eingaben im Hauptmenii
Verlangt das Hauptmenti eine Eingabe
(z.B. eines Pfadnamens), so verfahrt die
Eingaberoutine wie folgt:
— Ist ein Vorgabewert vorhanden, kann er
durch ,Return“ volistandig Ubernommen
werden oder mit — editiert werden.
— Die Pfeiltasten <- und — bewegen den
Cursor, die Del-Taste (bzw. Ctrl-P beim
Apple Il+) léscht das Zeichen links vom
Cursor.
— ,Return“ Ubernimmt die gesamte Zeile
unabhangig von der Cursorposition, wah-
rend Ctrl-T ab der Cursorposition ab-
schneidet.
— Wird ein Pfadname verlangt, akzeptiert
das Programm nur Buchstaben, Ziffern so-
wie Punkt (.) und Schragstrich (/).
— Die maximale Eingabelange betragt beim
40-Zeichen-Terminal 22 Zeichen, beim
80-Zeichen-Terminal 40 Zeichen.
— Durch Driicken von ,,Esc“ kann die Ein-
gabe gestrichen werden.
2.2. Hauptmenii-Optionen
Die Optionen des Hauptmentis werden
durch Tippen des jeweiligen Anfangs-
buchstabens ausgewahlt.
<W> Work-File definieren:
Existiert der angegebene File, wird er ge-
laden. Existiert er nicht, erscheint New
file".
<M> Main-File definieren:
Der ,,Main-File“ ist die Hauptdatei einer
Anzahl von Include-Files und wird, falls
definiert, vom Assembler als Anfangsdatei
verstanden. Ist er nicht definiert, benutzt
der Assembler den Work-File (analog zu
Turbo-Pascal).
<P> Prafix andern:
Mit diesem Befehl kann das momentane
ProDOS-Prafix geandert oder geléscht
werden. Das Programm prlft nach, ob das
betreffende Directory auffindbar ist.
<E> In den Editor gehen:
Falls kein Work-File definiert ist, wird zu-
nachst <W> ausgefiihrt. Danach wird der
eigentliche Editor aufgerufen.
<A> Den Assembler aufrufen:
Falls weder Work-File noch Main-File defi-
niert sind, wird nach dem Source-File ge-
fragt. Danach fragt Dossembler nach dem
Namen des ersten erzeugten Object-Files.
Vorgabewert ist, falls der Platz ausreicht,
Peeker 2/1987
der Source-Name und das Suffix
»-OBJO". Je nach den flr die Assemblie-
rung gewahlten Ausgabekanalen fragt das
Programm noch nach dem Namen des
Listing-Files. Vorgabewert ist der Source-
Name mit dem Suffix ,,.PRN“. Nach dieser
Prozedur wird der eigentliche Assembler
aufgerufen.
<O> Ausgabekanale wahlen:
Fur den Editor und das Assembler-Listing
k6nnen voneinander unabhangige Ausga-
bekandle eit- und ausgeschaltet werden.
Dazu geh6ren der Bildschirm, ein eventu-
ell vorhandener Drucker und (beim As-
sembler) ein Listing-File. Mit ,Y“ und ,,N“
kann jeweils ein- und ausgeschaltet wer-
den, ,,Return" bestatigt die Wahl. Wird der
Drucker angewahlt, so muB er bereits
hardwaremaBig eingeschaltet sein.
<S> Work-File speichern:
Speichert den im Speicher befindlichen
Work-File auf Diskette.
<D> Directory ausgeben:
Eingabe des Directory-Pfadnamens. Vor-
gabewert ist das definierte Prafix. Durch
Eingabe von ,4s,d“ kann das Volume-
Directory der Unit in Slot s, Drive d ausge-
geben werden. Ist das Directory etwas
langer, wird es in verschiedene Bild-
schirmseiten aufgeteilt. Dabei kann jeweils
mit Esc" abgebrochen werden. Ist der
Drucker durch die <O>-Option einge-
schaltet worden, wird das Listing auf dem
Drucker ausgegeben.
<Q> Programm verlassen:
Das Programm springt in die ProODOS-Re-
boot-Kommando-Routine; eine neue An-
wendung kann ausgewahlt werden.
2.3. Hauptmenti-Fehlermeldungen
2.3.1. Allgemeine Fehlermeldungen
Zu den allseits bekannten Fehlermeldun-
gen gehoren ,|/O Error“, ,,Write protec-
ted“, ,Volume or directory not found",
»File not found", File locked" sowie
»Volume full“. Ihre Bedeutung muB hier
nicht naher beschrieben werden.
2.3.2. Spezielle Fehlermeldungen
File too large" erscheint, wenn versucht
wird, einen File einzuladen, der langer als
der momentan verfiigbare Speicher ist.
»Wrong file type“ bricht den Versuch ab,
einen File einzuladen, der nicht vom Typ
» TXT“ ist.
»Not a directory file“ tritt auf, wenn ver-
sucht wird, einen File als Directory auszu-
geben, der weder vom Typ ,DIR“ noch
ein Volume-Directory ist.
»DOS Error! Code = $xx" erscheint bei
allen MLI-Fehlermeldungen, die nicht
durch spezielle Meldungen abgedeckt
werden. Die Bedeutung der Fehlernum-
mer xx kann in jedem ProDOS-Buch nach-
gesehen werden (z.B. U. Stiehl: ProDOS
fiir Aufsteiger, Bd. 1).
Peeker 2/1987
3. Der Editor
Der Editor ahnelt dem Big-Mac-Editor,
einige Befehle wurden jedoch weggelas-
sen, andere hinzugefligt oder erweitert.
Alle Kommandos kénnen in GroB- oder
Kleinbuchstaben eingegeben werden. Die
Befehlseingaberoutine funktioniert wie bei
der Routine im Hauptmeni, siehe 2.1.
3.1. Befehls- und Syntaxtabelle
Kleingeschriebene Befehlswortteile kén-
nen weggelassen werden, ebenso spitz
eingeklammerte Syntaxteile. Es bedeuten:
afilename“: Pfadname eines Source-Files
str“: Durch beliebige Zeichen begrenzter
String (im Gegensatz zum Big Mac wahi-
weise mit Apostrophen oder GansefiB-
Befehls- und Syntaxtabelle
Syntax mit Beispiel(en}
Funktion
Add <filename>
ADD /VOL/FILE
Change loc strl str2
© 19-20 A.B
COPY zeile <-zeile> TO zeile
COPY 19-29 TO 5p
Delete loc
D 1,2,49-
Edit loc <str>
Find loc <str>
F 50- ORG
Insert zeile <filename>
1i4
14 /VOL/FILE
List loc
L 19-20
MON: tor
MON
MOVE zeile <-zeile> TO zeile
MOVE 19-20 TO 50
NeW
NEW
PRinterOrr
PROF
PRinterON
PRON
Print loc
P 19-26
REName filename
REN /VOL/TEST
Replace loc <filenane>
R 10-26 /VOL/FILE
Tabs t1,t2,t3
T 19,20,30
‘TERMinal num
TERM 3
‘TRuncOFf
‘TROF
‘TRuncON
‘TRON
UseR
usR
Where zeile
Wp
Anhdngen von Text oder File an den
Text im Speicher.
Ersetzt "Strl" durch "Str2", Bei "Some" nud
jeweils mit "Y" oder "N" geantwortet werden.
‘Textblock kopieren,
Zeilen 1éschen
Zeilen, in denen “str” vorkommt, editieren
Zeilen, in denen "str" vorkommt, ausgeben
Text oder File vor "zeile” einfiigen
Zeilen auflisten
In den Monitor springen (Riickkehr in den
Editor mit ctri-¥).
Textblock verschieben,
Speichertext 1éschen.
Drucker ausschalten
Drucker einschalten.
Zeilen ohne Zeilennumner auflisten,
Work-Féle unbenennen,
Zeilen loschen, dann Text oder File einfugen,
‘Tab-Werte fur den Editor neu setzen
(T 1,1,1 1éscht die Tabs)
Terminal "num" einschalten:
num = @: Apple II+ 49 Zeichen
nun Videx-89-Zeichenkarte
num = 2: Apple IIe/o 49 Zeichen
nua = 3: Apple Ile/c 89 Zeichen
Bitte die Terminals nur einschalten, wenn sie
verfagbar sind.
Kommentare sollen mit aufgelistet werden.
Kommentare sollen abgeschnitten werden
Springt nach $3F5, dort kann eine eigene
Kommando-Routine installiert werden.
Gibt die Speicheradresse von "zeile" aus.
B444IRBSI
chen begrenzt!)
»zeile“: Zeilennummer (dezimal)
,num": Zahlenangabe (dezimal)
yloc": Zeilen, auf die sich das Kommando
bezieht
Beispiel fiir ,,loc“:
List (ganzen Text listen)
List 10 (nur Zeile 10 listen)
List 10,20 (Zeilen 10 und 20 listen))
List -10 (Von Anfang bis Zeile 10)
List 10- (Von Zeile 10 bis Ende)
List 10-20 (Zeilen 10 bis 20)
List -10,20,30,40-50,70- (entsprechend)
Befehlstabelle
Ein eingeschalteter Drucker wird bei fol-
genden Kommandos aktiv:
Change, Find, List, Print, Where.
Die Ausgabe kann im Editor mit der Leer-
taste zeilenweise unterbrochen und mit
Ctrl-C ganz abgebrochen werden.
Der Editor wird mit Esc" verlassen.
3.2. Zeileneditor
Bei den Kommandos Add, Insert, Replace
und Edit kommt der Benutzer in Bertih-
rung mit dem Zeileneditor. Er besitzt die in
der Tabelle gelisteten Control-Funktionen.
3.3. Fehlermeldungen im Editor
Neben den im Hauptmenii verwendeten
Fehlermeldungen existieren noch speziel-
le Editor-Fehlermeldungen:
» Syntax error“ erscheint, wenn der einge-
gebene BefehI nicht existiert oder nicht die
erforderlichen Parameter _ mitgeliefert
wurden.
,Overtiow error“ zeigt, daB bei Zeilen-
nummern oder Zahlenkonstanten ein Wert
Uber 65519 eingegeben wurde.
Range error“ meldet, da3 Parameter au-
Berhalb des zuldssigen Rahmens liegen,
z.B. nicht existente Zeilennummern.
4. Der Assembler 7
4.1. Allgemeines
Der Assembler kennt alle Opcodes des
6502 sowie die beiden kiinstlichen Op-
codes BLT und BGE als Ersatz flr BCC
und BCS. Beim Einschalten der 65C02-
Option ,lernt" der Assembler noch die
neuen Opcodes des 65C02, die im Peeker
1/84, Seite 6ff. beschrieben wurden. Ins-
gesamt beherrscht Dossembler damit 15
verschiedene Adressierungsarten.
Zu beachten ist, daB kein Label ,,A“ defi-
niert werden sollte, da es mit der Akkumu-
lator-Adressierung verwechselt werden
kann. Ein akku-adressierter Befehl kann
entweder als ,ASL A“ oder einfach als
»ASL“ geschrieben werden, beides ist
korrekt.
Eine Zeile darf héchstens 255 Zeichen
lang sein. Zwischen Spalten muB minde-
stens ein Leerfeld oder Ctrl-| stehen. Der
Source-Code darf in GroB- oder Klein-
buchstaben geschrieben werden.
4.2. Pseudo-Opcodes
Spitz eingeklammerte Syntaxteile sind op-
tional.
Es bedeuten:
»expr“: — arithmetischer
4.3.1.)
»e.expr“: erweiterter arithmetischer Aus-
druck (s. 4.3.2.)
»str"; durch Sonderzeichen begrenzter
String
wfile*: Pfadname
Status“: ON oder OFF
nlabel": Label
Naheres kann der gesonderten Tabelle
entnommen werden.
Die Opcodes DSECT und DEND wurden
vom Apple-Editor/-Assembler Ubernom-
men. Fir die Verwendung ein Beispiel:
bsect
Ausdruck (s.
« = ors $5
»Memory full“ erscheint, wenn durch apr. ps oe
Texteingabe oder andere speicherplatz- APRN EQU | ADRL+2
mindernde Kommandos der Textpuffer TEMPO PS >
vollstandig geflillt wurde. DEND
Zeileneditor
Taste(n) Funktion
Ctrl-B Springt an Zeilenanfang
Ctrl-D Losoht Zeichen unter Cursor
Ctri-£ Springt an Zeilenende
Ctri-F chr Setzt Cursor auf nachstes "chr" (1 Zeichen)
Ctrl-H oder <—
Ctri-I oder TAB
Setat Cursor ein Zeichen nach links
Schaltet Einfigemodus ein (Ausschalten durch
ein beliebiges Ctrl-Zeichen)
Ctri-M oder RETURN
Ubernimnt die gesamte Zeile
Ctri-R Stellt urspriingliche Zeile wieder her
(nur bei EDIT)
ctri-T Schneidet Zeile ab Cursorposition ab
Ctrl-U oder -> Setzt Cursor ein Zeichen nach rechts
ctr1-x Bricht Bditieren ab
Ctr1-P oder DEL, Loscht das Zeichen links vom Cursor
ESC Schaltet Tabulierung ab der dritten Spalte
£ ein/aus
Es ist méglich, beispielsweise Labels ohne
feste Adressenzuordnung zu definieren.
MuB das Datensegment spater verscho-
ben werden, kann in der ORG-Zeile eine
neue Adresse angegeben werden. Aller-
dings muB nicht jedes Label umdefiniert
werden. Ahnliche Anwendungen sind ent-
sprechend denkbar.
4.3, Arithmetische Ausdriicke
4.3.1, Einfache arithmetische
Ausdriicke
Der Assembler verarbeitet arithmetische
Ausdrticke mit den 5 Operatoren + (Addi-
tion), - (Subtraktion), * (Multiplikation), /
(ganzzahlige Division) und & (bitweises
logisches UND). Die Operanden konnen
Konstanten (dezimal: ohne Markierung,
hexadezimal: mit fiihrendem ,,$*, dual: mit
fUhrendem ,,%"), Labels (* gilt als PC)
oder Textzeichen sein.
Ein rechnerischer Uberlauf wird nicht er-
kannt. Ausdriicke werden von links nach
rechts durchgerechnet, Klammern sind
nicht erlaubt.
Beispiele:
ORG 10
ORG $1p
ore $18
ORG ADR
ORG ADR+S19
ORG ADR+$10-Z1910
ORG ‘A
ORG 'A'+ADR
ORG ADR+10-TMP/Z101 0981 0+' A!
usw
4.3.2. Erweiterte arithmetische
Ausdriicke
Erweiterte arithmetische Ausdriicke geben
dem Benutzer die Méglichkeit, den Aus-
druck zu verfeinern: Ein vorgestelltes ,<"
zeigt an, daB nur das Low-Byte des Aus-
drucks gewertet werden soll. Entspre-
chend gilt ,>“ und ,,/“ fir das High-Byte.
Ein ,4#“ kann jederzeit vorangestellt
werden.
Beispiele:
DFB <LABEL
DPB =>LABEL+4
DFB €/LABEL
DFB #-10
DFB #+10-LABEL
DFB $19-20+21919
usw.
4.4. Assembler-Fehlermeldungen
ylllegal line format“:
Eine Zeile ist [anger als 255 Zeichen (oder
endet nicht auf $0D).
ulilegal file type":
Der Source-File ist nicht vom Typ ,, TXT“.
a» MLI Error #$xx“:
Der ProDOS-MLI-Fehler Nr. xx trat auf.
Peeker 2/1987
PIAL DLA LA Mp ASSEMDLER sag
, Include file stack overflow":
Es wurde versucht, mehr als vier include-
Files ineinander zu verschachtelin.
»Bad label":
Ein Label enthalt illegale Zeichen, z.B. + -
af
«Symbol table full“:
Die Symboltabelle ist voll, die Grenzen
des Assemblers liberschritten.
Bad expression“:
Ein arithmetischer Ausdruck ist fehlerhaft
aufgebaut.
»No such label“:
Ein undefiniertes Label wurde verwendet.
,, Duplicate symbol“:
Es wurde versucht, ein Label zweimal zu
definieren.
»Bad DSECT/DEND“:
Es wurde versucht, DSECT/DEND-Kon-
struktionen zu schachteln.
» Bad opcode
Ein nicht existierender Opcode wurde ver-
wendet.
»Bad address mode":
Eine zwar existierende, aber flr diesen
Opcode nicht zugelassene Adressie-
rungsart wurde verwendet.
Bad operand";
Eine nicht existierende Adressierungsart
wurde verwendet.
»Bad branch":
Die Distanz fir einen relativen Sprung war
zu groB.
4.5. Abbruch
Die Assemblierung kann durch die Leerta-
ste zeilenweise angehalten und durch
Ctrl-C ganz abgebrochen werden.
Jeder MLI-Fehier fart zum Abbruch.
5. Sonstiges
5.1, RESET
Das Driicken von RESET bewirkt, daB das
Programm (normalerweise ohne
Datenverlust) verschiedene Initialisierun-
gen vornimmt und danach nach seiner
Startdiskette sucht. Diese mu8 unbedingt
vorhanden sein.
RESET sollte nicht wahrend eines Disket-
tenzugriffs oder wahrend der Abarbeitung
von Editor-Kommandos benuizt werden.
5.2. Hardware-Konfiguration
Das Programm setzt einen Apple Il ab
Version Il+ voraus, auf dem ProDOS lauf-
fahig ist. Eine 80-Zeichenkarte wird nicht
benétigt, kann aber benutzt werden (Apple
oder Videx). Ein Drucker wird ebenfalls
nicht bendtigt, ist aber voll in das Pro-
gramm integriert. Eine Uhr wird nicht be-
nétigt, aber erkannt und benutzt. Jeder
ProDOS-kompatible Massenspeicher ist
Peeker 2/1987
Pseudo-Opcodes
Syntax/Beispiel
Funktion
label EQU e. expr
ABC EQU 4-5
INCLUDE file
INCLUDE /VOL/FILE
Definition eines Labels
Include-File einbinden
ASM file "file" assenblieren (neuer ASM-Start)
ASM /VOL/FILE
ASC str String zeichenweise einbinden
ASC 'Peoker'
ber str wie ASC, beim letzten Zeichen Bit 7 invers
DCI ‘Dossenbler'
STR str wie ASC, jedoch mit fohrendem Langenbyte
STR ‘Apple!
Ls? status Assembler-Listing ein/ausschalten
LST OFF
MSB status Bit 7 setzen/ldschen (bei Strings)
MSB ON
DO e.expr Folgendes nur assemblieren, wenn "e.expr" = 1
bo TEST
FIN Ende des konditionalen Assemblierens
FIN
ELSE Letzte D0-Bedingung negieren
ELSE
END Assemblierung hier abbrechen
END
HEX hl <,h2,h3,...> Hex-Zahlen einbinden
HEX 91,92,93 (Komma kann auch weggelassen werden)
ORG expr PC auf “expr” setzen, neuer OBJ-File
ORG $2000 ’
PHS expr Pc auf “expr” setzen
PHS $3000
OBJ expr bei Dossenbler bedeutungsios
0B) $4909
DSECT Beginn einer "dummy section", 8, 4,2,
psecr
sDEND~ Ende einer "dummy section", s, 4.2.
“DEND
DS expr Leerraum definieren
DS $30
DFB e.expr <,e.expr....>
DFB 19,$20,'B', 5-3
DW e.expr <,e.expr,...>
DW TEMP, $1254
DA e.expr <,e.expr,
DA TEMP,$1254
DDB e.expr <,e.expr....
DDB TEMP, $1234
PREFIX file
iy A
Einzelne Datenbytes einbinden
Doppelbytes einbinden (low byte first)
y (nigh byte first)
Setzt ProDOS-Prafix auf “file”
PREFIX /DISK
‘TR status BJ-Abschneiden ein aus
TR ON {z.B. bei langen Strings)
PAGE gibt FF ($0C) auf Drucker aus
PACE
SKP 6.expt gibt “e.expr’-mal CR ($0D) aus
SKP 5
SYS definiert nachste OBJ-Files als Typ "SYS"
sys
REL ” . REL
REL
BIN . . wom omBENH
BIN (Standardeinstellung)
CHR str Speichert erstes Zeichen von "str" als
CHR ‘= Trennzeichen
RPT e.expr gibt das Trennzeichen "e. expr"
RPT 40
e502 schaltet auf 6602-Opcodes
6502
esco2 schaltet auf 65¢92-Opoodes
e5coe
verwendbar. Ein Kleinschreib-Umristsatz
(I+) wird erkannt.
Eine 80-Zeichenkarte wird in Slot 3 erwar-
tet, die Videx-Karte kann aber nach einer
Installation auch in einem anderen Slot
untergebracht werden, ebenso wie das
Drucker-Interface, das in Slot 1 erwartet
wird. Die Slot-Werte sind in der Global
Page eingetragen.
5.3. Global Page
Alle Programmkonstanten und Konfigura-
tionsdaten sind in der Dossembler Global
Page ,ASM.GP“ gespeichert und kénnen
dort verandert werden. Die Beschreibung
der Global Page wurde den Rahmen die-
ses Artikels sprengen.
6. Ubungsbeispiel
1. Wir starten den Assembler mit
-ASM.SYSTEM
2. Wenn das Datum-Ment erscheint, tip-
pen wir ,n“ oder ,,N“, falls wir das alte
Datum nicht andern wollen,
3. Nun gelangen wir in das eigentliche
Haupt-Ment. Hier tippen wir ,e" oder ,,E"
fiir ,Editieren*. Da noch kein Dateiname
(Work-File) spezifiziert wurde, springt der
Cursor automatisch in die entsprechende
Spalite. Hier geben wir ,TEST“ ein. Da-
nach gelangen wir in den leeren Editier-
bildschirm.
4. Wir tippen nun a“ oder ,A“ fir ,Add"
und geben dann das folgende Beispiel ein:
ORG $1999
COUT EQU $FDED
MSB ON ; fir String
LDX #9
LOOP LDA STRING, X
BEQ ENDE
JSR COUT
INX
BNE LOOP
ENDE RTS
STRING ASC 'HALLO*
HEX 8099
Das obige Beispiel zeigt genau das an,
was Sie tippen miissen. Am Bildschirm
sehen Sie jedoch, daB automatisch Zeilen-
nummern vergeben werden und im Ubri-
gen mit jeder Leertaste automatisch in das
nachste Feld tabuliert wird. Am Schlu8
nach Eingabe der Zeile ,, HEX 8D00“ tip-
pen Sie einfach ein nacktes Return. Damit
verlassen Sie den Editor.
5. Mit ,I" oder ,L" fiir ,,List” wird der
soeben eingegebene Quelltext am Bild-
schirm gelistet. Nun tippen Sie auf die
ESC-Taste und gelangen damit wieder in
das Haupt-Menii. Hier geben Sie ,,s“ oder
»S" fur ,Save"“ ein, womit der Quelitext
automatisch unter dem friiher angegebe-
nen Namen ,,TEST“ auf Diskette gespei-
chert wird.
6. Nun tippen wir auf a“ oder ,A“ far
Assemble", worauf der Cursor in die Ob-
jektcode-Spalte springt und ,,TEST.OB-
JO“ ausweist. Es geniigt, wenn Sie jetzt
einfach auf die Return-Taste driicken. Da-
nach erfolgt die Assemblierung, die Sie
am Bildschirm verfolgen kénnen.
7. Wir verlassen nun den DOSSEMBLER
Uber ,.q“ oder ,Q" fiir ,Quit" und geben
danach als SYS-Datei_,BASIC.SYSTEM“
ein. Vom BASIC.SYSTEM aus konnen wir
dann spater mit
-TEST.OBJO
unser Ubungsprogramm starten, das
» HELLO“ am Bildschirm ausgibt.
10
A DM A Mt
Speicherverteilung
ROM 64K-RAM der Grundplatine
EDITOR ASSEMBLER
FRFF
Monitor
F800
ProDOS
Applesoft-BASIC-
Interpreter
D000
CXXX-ROM und Slots CXXX-ROM und Slots
ooo
ProDOS System Global Page
BFOO
ey CHONSiGantiGe Puffer fiir Source Files
Textspeicher Symboltabelle
be ae a +
Puffer fur Listing-File
5BCO
ASSEMBLER
3F00
EDITOR
1000
Daten nicht benutzt
OF0O
nicht benutzt
E00 Daten
Daten
coo
nicht benutzt
A00 OBJ-Filepuffer
Daten
0800
Textbildschicm
0400
DOSSEMBLER Global Page / Vektoren
0300 =
a Eingabepuffer nicht benutzt
aD Stack Stringpuffer / Stack
Zero Page
Peeker 2/1987
ASSEMBLER-PRAXIS AUF ATARI ST
Roland |
in Altmeister der Assembleranwendung, Herausgeber des Mikrocomputer:
Magazins MICRO MAG, verdffentlicht bei te-wi seine souverane Darstel
lung der Assemblerprogrammierung auf ATARI ST:
Erklart Grundlagen:
Beariffe und Werkzeuge der Assemblerprogrammierung..erforderliche
Systemkenntnisse..systembezogene Erlauterung der 68000er
Befehlsfunktionen,
Zeigt Anwendungen:
Hantieren mit Assemblern: Aufruf von Assemblern; Steuern ihrer
Optionen iiber Direktiven; Stellungnahme zu realen ATARI-ST-
Assemblern,
Arbeiten in der ATARIST-Programmierumgebung: Text
programme zur Programmentwicklung; ein Editor; ein Parser;
das Betriebssystem; BIOS-Funktionen; BI foolbox;
GEMDOS Toolkit; das erweiterte X!
Anwenden des Befehls: s in Musterprogrammen fiir: E/A:
Routinen, Rekursionen, de F he Hie Stackverwaltung
Adressverwaltun:
programme, nu ti ‘Tre "Bed n von Interfacebausteinen,
Texterkennung, Textverarbeitung, Tastaturdekodierung, memory dumps,
Floppy-Tests/Funktionen, serielle RS232-Datenilbertragung usw.
Entwickelt Hilfsprogramme:
BIOS‘Toolbox; GEMDOS. itor; ein Parser; Arbeiten mit Toolkits
Die Programme des Buchs sit Diskette vorn é hltlich
Ein Fachtext in klarer S ‘
umfangreichen Listings von Musterprogrammen (auf Diskette beim Autor erhaltlich)
ca. 300 Seiten, Softcover, DM 59,-
LOGO-
Jeder kann programmieren
(Danie! Watt)
agogen
ien, Ein
Ubersicht und Einfat A
dung, 550 Seiten, Softcover, DM 79
UMWELTDYNAMIK
30 Programme fiir kybernetische
M68000 FAMILIE, 2 Bd. mwelterfahrungen auf allen
ASIC-Rect Das Buch enthalt
Einzige Motorola: aie ache Darstell beides: Ein Program
CPU-68000-Architektur, Prog Simulation eigener Problemto
ystemaufbauten, Behand P lierungen und 29 kommentierte
68000-Bausteine sowie 68020, 68881. iIbeispiele wie Baumsterben,
Bd 1, Grundlagen + Architektur, 568 Sei- ngsbedarf, Nahrungsketten
ten, DM 79, usw. Prospekt anfordern,
und Bausteine, Von Hartmut Bossel, 480 Seiten,
Softcover, DM 59.-
ATARI User Groups, Kompakte ATARI 400
800-Syste
‘over, DM'59,
6502 - Programmieren in Assembler
Dieses Buch behandelt ausfiihrlich die
Assemblersprachen-Programmierung {ur
den weitverbreiteten Mikroprozessor 6502.
Lance Leventhal, 704 Seiten, Sof
Spriihende Idee:
Noch im Programm: Einfiihrung in die Mikrocomputer-Technik, DM 66,-
Computer fiir Kinder, ATARI, DM 29,80
65816/65802-
Kompaktkurs fur
Apple ligs
Teil 1
von Arne Schapers
Dieser Kurs, der aus einer allgemeinen Be-
schreibung des Prozessors mit einigen ligs-
spezifischen Anwendungsbeispielen besteht,
muB wegen des groBen Umfangs auf zwei
Peeker-Hefte verteilt werden. Der Kurs stellt
(wie die bereits zur 6502-, Z80- und 68000-
Programmierung erschienenen Kurse) keine
komplette Einfuhrung in die Programmierung
dar. Vom Leser wird erwartet, daB er mit minde-
stens einem anderen Prozessor gewisse Erfah-
rungen gesammelt hat und mit grundlegenden
Konzepten wie Registern, Speicheradressen
und sequentieller Abarbeitung eines Program-
mes vertraut ist.
Heft 7/85 des Peeker enthalt eine wesentlich
breiter angelegte Einflhrung zur Arbeitsweise
des 6502-Prozessors, auf der wir hier teilweise
aufbauen,
1. Vom 6502 zum 658xx
Um es gleich vorwegzunehmen: Die Prozesso-
ren der Reihe 65SC8xx sind die Erfullung der
Tréume eines 6502-Programmierers — sie stel-
len in (fast) jeder Hinsicht eine konsequente
Erweiterung dar.
Beginnen wir mit den gemeinsamen Charakteri-
stika der 65er-Familie, bevor wir die speziellen
Eigenschaften der einzelnen Mitglieder erdr-
tern:
@ Speicherorientierung: Alle Prozessoren der
Reihe 65xx verfiigen Uber einen sehr kleinen
Satz an Registern. Mehr oder weniger als , Aus-
gleich" wird ein spezieller Speicherbereich (die
Seite 0") benutzt, dessen Speicherstelien die
Funktion von Indexregistern tibernehmen kén-
nen. Der Streit der Experten, welches Konzept
das bessere sei — viele Register oder ein spe-
zieller Speicherbereich, Uber den zusatzliche
Adressierungsarten méglich sind — dauert noch
an. Das eine Extrem dirfte der TMS 9916 dar-
12
stellen, der praktisch ohne eigene Register aus-
kommt und nur mit Speicherstellen arbeitet, das
andere die 32xx-Reihe von National Semicon-
ductor, bei der der Programmierer mit Registern
und dazugehérigen Adressierungsarten form-
lich erschlagen wird.
@ Vergleichsweise niedrige Taktfrequenz: Alle
Prozessoren der 65er-Familie verwenden einen
zweiphasigen Takt, bei dem in jeder der beiden
Phasen Operationen ausgefihrt werden — im
Gegensatz zu den meisten anderen Prozesso-
ren, die den Systemtakt intern erst ein paarmal
herunterteilen. So kommt es, daB der Befehls-
durchsatz eines 65816 bei 4 MHz Uber dem
eines mit 8 MHz betriebenen 68000 liegt. Ein
Register-zu-Register-Transfer bendétigt beim
68000 4 Taktzyklen, beim 65816 sind es nur 2;
Schiebeoperationen des Akkus werden beim
65816 in 2 Taktzyklen ausgefiihrt, der 68000
braucht 6 Zyklen dazu. Da8 der 68000 dennoch
ein ganzes Stiick leistungsfahiger als der 65816
ist, liegt an der Unzahl der verfligbaren Befehle
und der internen 16/32-Bit-Architektur.
Ein Vergleich zwischen dem 65816 und dem
Z80 ist beinahe unfair (obwohl der Z80 auch
Uber eine Reihe von 16-Bit-Befehlen verfiigt) —
hier miBte man mit einer Taktfrequenz von ca.
15 MHz arbelten, um auf dieselbe Rechenlei-
stung zu kommen.
@ Kleiner Befehissatz: Der 6502 kennt lediglich
57 verschiedene Befehle mit 13 verschiedenen
Adressierungsarten, Seine Assemblerprogram-
mierung ist deshalb auch fiir Benutzer relativ
leicht zu erlernen, die nicht ihre gesamte Zeit
vor einem Bildschirm verbringen wollen. Fur
den 65816 ist diese Behauptung nicht mehr
ganz zutreffend: Die Zahl der Befehle ist auf 91
gewachsen, die der Adressierungsarten auf 24.
@ Starke Asymmetrie: Nur ein sehr kleiner Teil
der Adressierungsarten und Befehle ist unein-
geschrankt anwendbar — beispielsweise ist ein
Befehl wie LDX $4000,Y (,,Lade X-Register
mit...") definiert, STX $4000,Y (,,Speichere X-
Register auf...") dagegen nicht. Die nicht defi-
nierten Ausnahmen lassen sich aufgrund des
kleinen Befehlssatzes relativ einfach im Kopf
behalten —in dem Mabe, in dem der Befehlssatz
bei den neueren Mitgliedern der 65er-Famille
gewachsen ist, wurde auch die Asymmetrie zu-
mindest teilweise beseitigt.
Der Hauptgrund flr dieses Verhalten liegt in der
ausschlieBlichen Verwendung von Befehlsco-
des mit einem Byte Lange. Um eine volistandi-
ge Symmetrie (Stichwort: Orthogonalitat) zu er-
reichen, hatte man Mehrbyte-Befehiscodes ver-
wenden missen.
Waren beim 6502 noch rund die Halfte aller
mdglichen Befehlscodes ,,reserviert", so ist
beim 65816 lediglich ein einziger Code fur
Erweiterungen“ freigehalten, Wie zu héren war,
ist ein kUnftiger ,651632" bereits Uber die An-
fange der Planung hinaus — er wird vollstandig
zum 65816 kompatibel sein; saémtliche neuen
Befehle dieses 651632" werden mit diesem
freigehaltenen Code beginnen, also zwei Byte
umfassen.
1.1, Der 6502
Das _,Ur-Exemplar“ der 65er-Familie kam un-
gefahr 1977 auf den Mark und wird im Apple II
baw. Il+ sowie dem Acorn (,,BBC-Computer“)
verwendet. Der 6502 ist flir 1 und 2 MHz Takt-
frequenz erhiitlich, verfiigt Uber einen
Datenbus mit 8 Bit Breite (d.h. liest/schreibt mit
jeder Operation ein Byte) und einen AdreBraum
von 64K. Vier Schlagworte kennzeichnen die-
sen Prozessor:
@ Reine 8-Bit-Maschine: Samtliche Register
auBer dem Programmzahler (,,PC“) sind 8 Bit
breit. Es gibt weder Operationen, die mehr als 8
Bits auf einmal behandeln, noch eine Méglich-
keit, mehrere Register zu einem 16-Bit-Wort zu
kombinieren (wie z.B. beim Z80).
@ Akkumulatororientiert: Der 6502 hat nur ein
einziges Register, in dem Rechenoperationen
Peeker 2/1987
re le
(Addition, Subtraktion, Schiebeaktionen usw.)
ausgefiihrt werden k6nnen.
@ Ein-AdreB-Maschine: Alle Datentransfers
missen Uber ein Register fihren. Um z.B. eine
Speicherstelle auf den Wert 0 zu setzen, muB
zuerst ein Register mit diesem Wert geladen
werden, danach wird der Inhalt des Registers
auf die entsprechende Adresse geschrieben
(vgl. 65C02). Die einzige Ausnahme stellen Ro-
tations- und Schiebebefehle dar, die auch ohne
den Umweg ter ein Register auf Speicherstel-
len angewendet werden kénnen.
@ Fixierter Stack: Der ,Stapelspeicher" des
6502 belegt grundsatzlich den AdreBbereich
von $0100 bis $01FF und kann damit maximal
256 Bytes aufnehmen.
1.2, Der 65C02
Der Nachfolger des 6502 ist seit 1984 erhaltlich
und im Apple lic sowie den neueren Ausgaben
des lle eingebaut. Seine Taktfrequenz betragt
bis 4 MHz, in den Appie-Geraten wird er mit 1
MHz betrieben. Er unterscheidet sich vom 6502
in mehrfacher Hinsicht:
@ Durch einen anderen HerstellungsprozeB
(das ,,C" im Namen steht flr , CMOS") wird nur
noch ein Bruchteil der elektrischen Leistung
bendtigt. Der Prozessor erwarmt sich auch bei
mehrstiindigem Betrieb nur unwesenilich — im
Gegensatz zu seinem Vorlaufer, der in Insider-
kreisen als ,,Eierkocher" bespéttelt wird.
@ Das Konzept der Akkumulatororientierung
wurde gelockert. Durch eine Reihe neuer Be-
fehle (PHX, PLX, PHY, PLY..) sind Datentrans-
fers zwischen den Indexregistern und dem
Stack méglich. Beim 6502 ist diese Operation
nur Uber den Akku mdglich, d.h. Uber den Um-
weg ,Indexregister zum Akku — Akku auf den
Stack".
@ Man kann den 65C02 nur noch bedingt als
Ein-AdreB-Maschine bezeichnen. Durch neue
Befehle (STZ = STore Zero, TSB/TRB = Test,
Set/ Reset Bits) sind erweiterte Operationen mit
dem Inhalt von Speicherstellen méglich, ohne
da8 dabei ein Register bendtigt wird. Eine echte
Zwei-AdreB-Operation wie ,,lade Speicherstelle
X mit dem Inhalt von Speicherstelle Y" ist aller-
dings nicht vorhanden.
Der 65C02 ist ,,aufwartskompatibel” zum 6502,
d.h. sAmtliche Programme, die flr den 6502
geschrieben wurden, laufen unveraéndert auch
mit einem 65C02 (bis auf ein paar sehr exoti-
sche Ausnahmen). Der 65C02 ,,versteht" samt-
liche Befehle des 6502 und fuhrt sie in gleicher
Weise aus — nur kennt er noch ein paar zusatzli-
che Befehle, die beim 6502 nicht definiert sind.
Weiterhin ist der 65C02 ,,pinkompatibel": Man
kann einen 6502 aus seiner Fassung heraus-
nehmen, einen 65C02 einstecken und danach
mit dem neuen Prozessor weiterarbeiten, als
wate nichts geschehen. (Fur die Elektronik-
Spezialisten unter den Lesern: Wegen leicht
veranderter Bus-Zugriffszeiten stimmt das nicht
immer — speziell bei sehr alten Ausgaben des
I+ (vor Rev. 7B) sollte man dabei auf (seltene)
Abstiirze gefa8t sein [1]).
Abgesehen von den neuen Befehlen und der
moderneren Herstellungsverfahren ist der
65C02 gegeniiber dem 6502 unverandert ge-
blieben. Es handelt sich nach wie vor um einen
reinen 8-Bit-Prozessor mit 64K AdreBraum, der
Peeker 2/1987
Stack ist auch hier auf den Bereich
$0100..$01FF fixiert. =
1.3. Der 65SC816
Dieser Prozessor wird im folgenden meist nur
als ,65816" bezeichnet und ist die 8/16-Bit-
Version des 65C02, Er ist seit Mitte 1986 auf
dem Markt und wird im Apple !igs sowie im
Nachfolgemodell des Acorn von BBC verwen-
det. Seine derzeitige Taktfrequenz betragt bis 4
MHz, Erhohungen auf 6 und 8 MHz sind ge-
plant. Im Apple llgs wird er mit 2,8 MHz betrie-
ben. Der 65816 ist aufwartskompatibel zum
65C02 und [aBt sich per Programm zwischen
zwel Betriebsarten (8 und 16 Bits) umschaiten.
Er verfuigt nach wie vor tiber einen Datenbus mit
8 Bits - der AdreBbus umfaBt aber 24 Bits
(AdreBraum: 16M), die internen Register sind
16 Bit breit, Hauptsachlich wegen des erweiter-
ten AdreBbusses ist der 65816 nicht pinkompa-
tibel zum 65(C)02.
Im 8-Bit-Modus (,,Emulation Mode") verhélt er
sich wie ein 65C02, d.h. samtliche Register sind
8 Bit breit, der Stack ist auf den Bereich
$0100..$01FF fixiert, der verfiigbare AdreBraum
betragt 64K (genauere Informationen s. 4.1.2).
Im 16-Bit-Modus (,,Native Mode") gibt es eine
ganze Reihe von Erweiterungen:
@ Der Akkumulator (,,A“) und die Indexregister
(.X",,¥") sind unabhangig voneinander zwi-
schen 8 und 16 Bit Breite umschaltbar.
@ Dem Programmzahler (,,PC“) wird ein Pro-
grammbank-Register (,,PB") mit acht Bit Breite
vorangestellt, der Prozessor gibt damit jeweils
eine 24-Bit-Adresse zum Lesen von Befehlen
aus,
@ Der Adressierung von Daten wird ein
Datenbank-Register (,,DB“) mit acht Bit Breite
vorangestellt, der Prozessor gibt damit jeweils
eine 24-Bit-Adresse zum Lesen und Schreiben
von Daten aus. Das Datenbank-Register ist un-
abhangig vom Programmbank-Register.
@ S&mtliche Adressierungen der Seite 0 (,,Ze-
ropage") werden tiber ein Direct-Register (,,D")
ausgeflhrt. Dieses Register hat eine Breite von
16 Bits und kann beliebig verandert werden.
Damit sind bis zu 256 verschiedene ,Zero-
pages" méglich. Das D-Register arbeitet unab-
hangig von der Programm- und Datenbank.
@ Der Stackpointer (,,SP") hat eine Breite von
16 Bits, der Stack ist somit nicht mehr auf den
Bereich $0100..$01FF fixiert und kann maximal
64K aufnehmen;
@ Der Prozessor verfiigt tiber zahlireiche neue
Befehle zur Manipulation der Register PB, DB
und D sowie Uber eine Reihe neuer Adressie-
rungsarten, die ihn fast ideal flr die Implemen-
tation von Hochsprachen machen (s. Abschnitt
6).
1.4, Der 65SC802
Die ,,8-Bit-Version" des GTE-65SC816 ist vor-
aussichtlich ab Ende dieses Jahres erhaltlich
(bei anderen Produzenten bereits friiher). Die-
ser Prozessor ist softwarekompatibel zum
65SC816 und pinkompalibel zum 65(C)O2. Er
enthalt denselben Registersatz wie der
65SC816, kennt dieselben Befehle und [abt
sich genauso zwischen Emulation Mode“ und
Native Mode" umschalten. Der einzige Unter-
schied besteht darin, daB die Inhalte der Regi-
ster PB und DB keine (elektronische) Wirkung
haben — die entsprechenden AdreBleitungen
sind nicht aus dem Chip herausgefihrt. Obwohl
der Prozessor intern mit 24-Bit-Adressen arbei-
tet, betragt der effektive AdreBraum damit 64K.
Ein Prototyp des 65SC802, den mir Herr Earwa-
ker von der Firma GTE (dem Hersteller der
65SC8xx-Reihe) freundlicherweise Uberlassen
hat, befindet sich seit nunmehr zwei Monaten in
einem lle — im ,,Emulation Mode" laufen selbst
extrem zeitkritische Programme wie SUPER-
QUICK véllig stérungstrel.
Wer Interesse an Experimenten mit den neuen
Befehlen der 65SC8xx-Prozessoren hat und
sich nicht gleich einen Apple lgs zulegen will,
sollte sich den 65SC802 und dazu einen der
folgenden Assembler besorgen:
ProDOS ORCA/M, Version 4.0 von Byte Works
-sehr komplex, arbeitet mit einzelnen Modulen,
lokalen Labels und einer Makrobibliothek, ist
entsprechend langsam und flr sehr groBe Pro-
jekte die einzige Wahl;
Merlin Pro von Roger Wagner ~ fur Projekte
mittlerer GréBe, recht schnell, unterscheidet
sich in Bedienung und Verhalten kaum von den
bisher erschienenen Merlin-Versionen;
SC-Assembler (ProDOS-Version) von S-C
Software Corporation —- zum Experimentieren
das ideale Programm; vollstandig RAM-resident
und deshalb extrem schnell, der erzeugte Ob-
jektcode kann vom Editor aus aufgerufen wer-
den. Fir mittlere und groBere Programmprojek-
te allerdings nur bedingt geeignet.
2. Aufteilung des AdreBraumes
Bild 1 zeigt die Aufteilung des Speichers aus
der Sicht des 65816-Programmierers, wobel ei-
ne ,,Erblast" deutlich zu erkennen sein sollte:
Bedingt durch die Forderung nach Software-
Kompatibilitat zum 65(C)02 besteht der adres-
sierbare Speicher nicht aus einer durchgehen-
den (,Jinearen") Folge von Adressen, er ist statt
dessen in 256 Banke mit jeweils 64K aufgeteilt.
Jede Bank besteht ihrerseits aus 256 Seiten
(,,Pages") mit jeweils 256 Bytes.
Bild 1: Auftelllung des AdreBraumes
Ohne allzusehr auf die folgenden Abschnitte
vorgreifen zu wollen: Eine lineare Adressierung
wirde grundsatzlich drei Bytes als Operanden
bendtigen — um z.B. den Akku mit dem Inhalt
der Speicherstelle $17A412 zu laden, ware ein
13
Befeh! erforderlich, der vier Byte Programm-
speicherplatz belegt:
LDA $17A412 ; S-Byte-Adresse
Diese Adressierungsart (,,absolut lang") kennt
der 65816 auch — im Normalfall werden aber nur
zwei anstelle von drei Bytes fur eine AdreBan-
gabe bendtigt. Beispiel: Wenn das Register DB
den Inhalt $17 hat, dann flhrt der Befehl
LDA $A412 2-Byte-adresse
zum selben Ergebnis, wobei zusatzlich noch
einige Takizyklen eingespart werden. Das Pro-
gramm ist also nicht nur kiirzer, sondern auch
schneller.
Fir Maschinenprogrammierer dirfte diese Un-
terteilung des Speichers in den seltensten Fal-
len ein Problem darstellen — fiir Hochsprachen-
Compiler sieht das schon etwas anders aus.
Man darf gespannt sein, ob die demnachst fir
den Apple ligs erscheinenden Programmier-
sprachen Pascal und C die GréBe eines Pro-
gramms auf 64K begrenzen (wie es z.B. beim
Turbo-Pascal fiir den IBM PC der Fall ist).
Wir werden uns im weiteren fir ,,lange“ Adres-
sen an die Schreibweise halten, die von Apple,
Inc. in den Handbiichern zum ligs benutzt wird.
Die Bank-Adresse (ein Byte) ist durch einen
Schragstrich von der Adresse innerhalb der
Bank (zwei Byte) getrennt. Die folgenden Nota-
tionsformen bezeichnen also dieselbe Adresse:
$1 /a4l2
‘S17Aal2
» Bank $17, Adr, $A412
} Adresse $17A412
Da der 65816 nur Uber einen Datenbus mit 8 Bit
Breite verfligt, fhrt das Laden eines 16 Bit
breiten Registers zu zwel aufeinanderfolgenden
Speicherzugriffen, Ein Befehl wie ,LDA$A412"
liest also die Speicherstellen $17/A412 und
$17/A413 hintereinander, wenn der Akku auf 16
Bit Breite gesetzt ist.
Der Zeitbedarf einer solchen Operation liegt
erheblich Uber dem eines ,,echten“ 16-Bit-Pro-
zessors, der beide Bytes gleichzeitig liest bzw.
schreibt. Abgesehen von den niedrigeren Ko-
sten im Vergleich zu einem vollwertigen 16-Bit-
System gibt es noch einen kleinen Vorteil anzu-
merken: Probleme mit dem alignment’ von
Adressen wie beim 8086 oder dem 68000 gibt
es nicht. Bei diesen Prozessoren ergibt sich ein
unterschiedlicher Zeitbedarf bzw. ein Fehler,
wenn der niederwertige Teil eines 16- bzw. 32-
Bit-Operanden nicht auf einer Speicherstelle
mit geradzahliger Adresse liegt.
(Eine Kuriositét am Rande: Das Ansprechen
mehrwertig dekodierter ,, Toggles" in der Elek-
tronik des Computers ist im 16-Bit-Modus prak-
tisch unméglich. Das beste Beispiel daflir ist der
Lautsprecher des Apple, dessen Polaritat bei
einem Zugriff auf den AdreBbereich
$C030..6CO3F umgeschaltet wird. Ein Befehl
wie ,LDA $C030" adressiert im 16-Bit-Modus
zuerst die Speicherstelle $CO30, danach die
Speicherstelle $CO31 — der Lautsprecher wird
also im Verlauf von zwei Mikrosekunden zwei-
mal umgeschaltet und gibt folglicherweise iber-
haupt keinen Ton von sich.)
2.2. Reihen! r Speicherung
Alle Daten, die mehr als ein Byte Speicherplatz
belegen, werden vom Prozessor grundsatzlich
so gespeichert, daB das niedrigstwertige Byte
auf der niedrigsten Speicheradresse steht. Bei-
spiele:
xxxx— AD BB AA LDA SAABB
Dieser Befehl ladt den Akku mit dem Inhalt der
Speicherstelle (DB)/SAABB. Der Opcode des
Befehls (GAD) steht auf der Adresse xxxx, der
niederwertige Teil der Adresse ($BB) auf der
PB PC PC
eo oe = ail
100000000! SP 1 SP.
Ae ee ce ee oe
————
100000000} D D
a
DB A A
x x
Y Ms
High Low
) Die Inhalte der Register PB und DB bleiben beim 65802 ohne Wirkung aut die effektiv erzeugte
Adresse,
Bild 2: Register des 65816
14
Adresse xxxx+1, der hdherwertige (GAA) aut
der Adresse xxxx+2, Analoges gilt fur 16-Bit-
Operationen wie z.8. das Laden des Akkumula-
tors mit einem festen Wert (,immediate"):
xxx £9 20 17 LDA #81720
Hier wird der Akku mit dem Wert $1720 gela-
den, wobei der niederwertige Teil ($20) auf der
Adresse xxxx+1, der héherwertige Teil ($17)
auf der Adresse xxxx+2 steht. Diese’ Art der
Speicherung (Low-Byte first) findet sich bereits
beim 65(C)02, Neu hinzugekommen ist beim
65816 die Behandlung von ,langen" Adressen:
Xxxx- AF BB AA 20 LDA S2OAABB
Dieser Befehl ladt den Akku mit dem Inhalt der
Speicherstelle $20/AABB, die Adresse ist
ebenfalls im ,umgekehrter" Reihenfolge ge-
speichert.
Das Konzept der umgekehrten Speicherung
von Adressen wird fiir alle Speicheroperationen
konsequent benuizt — es gilt fir Variablen, Fest-
werte, Pointer und ,lange" Adressen sowie fir
die Reihenfolge der Speicherung auf dem
Slack. (Eine Returnadresse wird so gespei-
chert, daB ihr niederwertiger Teil auf der niedri-
geren Adresse zu stehen kommt.)
3. Die Register des 65816
Bild 2 zeigt den vollstandigen Registersatz des
65816. Bereits beim 65(C)02 vorhandene Regi-
ster bzw. Flaggenbits sind schraffiert darge-
stellt. Alles, was hier und im folgenden liber den
65816 gesagt wird, gilt auch fur den 65802 —
Ausnahmen sind jeweils explizit als solche ge-
kennzeichnet.
Der 65816 bildet die (24-Bit-)Adresse des
nachsten zu lesenden Befehls aus dem mo-
mentanen Stand des Programmzahlers (untere
16 Bits) und des Programmbank-Registers
(obere 8 Bits),
Beispiel: Ist PB = $20 und PC = $140A, wird
der nachste Befehl von der Adresse $20/140A,
gelesen. Der PC wird flr jedes gelesene Byte
um eins erhdht, ein ,Uberlauf* in PB findet
nicht statl, wenn der PC Uber $FFFF hinaus
erhoht wird. Der folgende Befehl wird nie aus-
geflihrt, wenn er sich auf der gezeigten Adresse
befindet:
$20/FFFE- AD BB AA LDA SAABB
Hier liest der Prozessor den Opcode fiir ,LDA
absolut" von der Speicherstelle $20/FFFE, den
ersten Teil der Adresse ($BB) von der Spei-
cherstelle $20/FFFF und das nachste Byte von
$20/0000.
Spriinge (,,JMP") und Aufrufe von Unterpro-
grammen (,,JSR") finden grundsatzlich inner-
halb der Bank stat, auf die das Programmbank-
Register zeigt. Das Uberschreiten einer Pro-
grammbank durch relative Spriinge ist ebenfalls
nicht méglich.
Es gibt nur zwei Méglichkeiten, den Inhalt von
PB zu verdindern, wenn man einmal von Inter-
rupts (s, Abschnitt 5) absieht:
Peeker 2/1987
@ Den Befehl JML (,,JMP long"). Der Operand
(d.h. das Sprungziel) hat hier eine Lange von
drei Bytes. Mit dem Inhalt des héchstwertigen
Bytes wird PB neu geselzt, der alte Inhalt von
PB geht dabei verloren. Beispiel: Wenn PB =
$20 und PC = $1A32, dann haben diese beiden
Register nach Ausfiihrung des Befehls
$20/1A32— IML $498516
den folgenden Inhalt: PB = $40, PC = $8516.
Der nachste Befehl wird also von der Adresse
$40/8516 gelesen.
@ Den Befehl JSL (,,JSR long"). Der Operand
hat ebenfalls eine Lange von drei Bytes. Vor der
Ausfihrung werden der alte Inhalt des PC und
der von PB auf den Stack gebracht (insgesamt 3
Bytes), danach werden PB und PC wie bei JML
mit den Werten des Operanden gesetzt. Bei-
spiel: Wenn PB = $20 und PC = $1A32, dann
haben diese beiden Register nach Ausfihrung
des Befehis
$2p/1as2- JSL 8498516
den folgenden Inhalt: PB = $40, PC = $8516.
Der nachste Befehl wird also von der Adresse
$40/8516 gelesen. Auf dem Stack befinden
sich drei Bytes als Riicksprungadresse, namlich
die Werte $35, $1A, $20. Der Befehi RTL (,,Re-
turn long") beendet das Unterprogramm, indem
er diese drei Bytes wieder vom Stack holt und in
PB/PC einsetzt. (Fur Spezialisten: Der altbe-
kannte ,,Fehier“ des 6502, namlich die Spei-
cherung einer um eins zu niedrigen Return-
adresse, ist auch fir lange" Unterprogramm-
aufrufe erhalten geblieben.)
Mit dem Befehl PHK kann der momentane Inhalt
des Programmbank-Registers auf den Stack
gebracht werden — ein ,,Herunterholen” ist da-
gegen nur ber ein RTL méglich.
3.2. Datenbank-Register (DB)
Der 65816 bildet eine (24-Bit-)Datenadresse,
indem er einer gegebenen 16-Bit-Adresse den
Inhalt des Datenbank-Registers voranstelit. Bei-
spiel: Wenn DB den Inhalt $12 hat, fiihrt der
Befehl
LDA $8040
zum Laden des Akkumulators mit dem Inhalt
der Speicherstelle $12/8040. (Wenn der Akku
auf 16 Bit Breite gesetzt ist, wird zusatzlich die
Speicherstelle $12/8041 gelesen.)
Das Datenbank-Register ist vom Stand des Pro-
grammbank-Registers unabhangig — selbstmo-
difizierender Code (d.h. das Herumstochern im
eigenen Programm) ist also nur dann méglich,
wenn beide Register denselben Wert haben.
Die Erzeugung von Datenadressen unterschei-
det sich in einem wesentlichen Detail von der
Erzeugung von Programmadressen: Die Uber-
schreitung einer momentan geseizten
Datenbank ist jederzeit méglich. Das folgende
Beispiel kommt leider ohne einen Vorgriff auf
die ,indizierte Adressierung“ nicht aus (s.
6.1.6): Wenn DB den Wert $20 hat und das X-
Register den Wert $4412 enthalt, dann liest der
Befehi
LDA $2000,x
Peeker 2/1987
den Inhalt der Speicherstelle $20/6412 ($2000
plus $4412 = $6412). Unter den gleichen Be-
dingungen adressiert der Befeh|
LDA S$FO09,x
die Speicherstelle $21/3412 ($F000 plus $4412
= $13412) — der Uberlauf wird also berticksich-
tigt. Der Inhalt von DB wird durch diese Opera-
tion nicht verandert.
Dieses Verhalten gilt fir alle ,indizierten"
Adressierungen, ein ,,Unterlauf* (d.h. die
‘Adressierung einer Bank, die unterhalb des mo-
mentanen Standes von DB liegt), ist dagegen
nicht méglich.
Der 65816 kennt zwei Méglichkeiten, bei der
‘Adressierung von Daten den Inhalt von DB zu
ignorieren:
@ , Absolut lang", d.h. durch die Angabe einer
vollstandigen Adresse (3 Bytes). Beispiel:
LDA S$22A4B2
Dieser Befeh! ladt den Akku mit dem Inhalt der
Speicherstelle $22/A4B2. Der momentane In-
halt von DB wird ignoriert, DB wird durch diese
Operation nicht verandert.
@ Seite 0“, d.h. durch die Angabe einer
Adresse, die nur aus einem Byte besteht. Hier
geschieht die Adressierung Uber das Direct-
Register und bezieht sich immer auf Bank 00 (s.
nachster Abschnitt).
Unter Umstanden ergeben sich dadurch Pro-
grammierfehler, die auBerst schwierig zu finden
sind, Beispiel:
LDA $0199
LDA SOOFF
: adressiert DB/9199
: adressiert 00/0FF
Das Datenbank-Register kann mit dem Befehl
PHB auf den Stack gebracht und mit PLB wieder
heruntergeholt werden. Einen direkten Befehl
wie ,Lade DB mit <Wert>/<Registerinhalt>*
gibt es nicht.
3.3. Direct-Register (D)
Dieses Register hat eine Breite von 16 Bits und
bestimmt die Startadresse der ,Direct Page“
(Seite 0 oder ,Zeropage") innerhalb der Bank
00. Der 65(C)02 kennt nur eine Nullseite, nam-
lich den Speicherbereich von $0000 bis $O0FF,
der 65816 kann dagegen bis zu 256 verschie-
dene ,,Nullseiten" benutzen. Das Setzen des
D-Registers auf den Wert $0000 definiert den
Speicherbereich $00/0000..$00/00FF als Seite
O und entspricht damit dem Verhalten des
65(C)02. Wenn das D-Register auf den Wert
$0100 gesetzt wird, belegt die Seite 0 den
Speicherbereich $00/0100.,$00/01FF usw.
Ein als ,,Direct Page" definierter Speicherbe-
reich hat die folgenden Eigenschaften und
Grenzen:
@ Fir die Adressierung einer Speicherstelle
wird nur ein einziges Byte bendtigt, die restliche
Adresse fiigt der Prozessor automatisch hinzu.
Beispiel: Wenn D den Wert $0000 hat, dann
adressiert der Befehl
LDA SBF
die Speicherstelle $00/008F. Wenn D den Wert
$0900 hat, dann adressiert derselbe Befehi die
Speicherstelle $00/098F.
@ Da das D-Register eine Breite von 16 Bits
hat, ist der Programmierer nicht an Seitengren-
zen gebunden. Wenn D den Wert $2344 hat,
dann adressiert der Befehl LDA $8F“ die Spei-
cherstelle $00/23D3. Um die Sache nicht unnd-
tig zu komplizieren, werden wir im weiteren
davon ausgehen, daB die Seite 0 immer auf
einer Seitengrenze (d.h. auf $xx00) beginnt.
(Falls Sie ein Liebhaber von vollig undurch-
schaubarem Code sein sollten: Was ergibt die
Befehisfolge LDX +$2340 / TSC / TCD / STX
$01 / RTS 2)
@ Speicherstellen der Seite O kénnen als
»Pointer“ benutzt werden, d.h. die Adresse ei-
ner Speicherstelle enthalten (s. 6.1.8). Beispiel:
Wenn D den Wert $0300 hat, die Speicherstelle
$00/0320 den Wert $16 und die Speicherstelle
$00/0321 den Wert $80, dann zeigen“ diese
beiden Speicherstellen auf die Adresse $8016.
Der Befeh|
LDA ($20),¥
ladt den Inhalt der Speicherstelle DB/8016 in
den Akku, wenn Y den Wert $00 hat. Fir Y =
$01 wird DB/8017 adressiert, flr Y = $02
DB/8018 usw. Die Abschnitte 6.1.8, 6.2.1 und
6.2.3 beschéftigen sich ausfiihrlicher mit dieser
Adressierungsart und ihren Erweiterungen.
@ Beim 65(C)02 kann mit einem ,,Nullseiten-
Befehl" nicht Uber die Nullseite hinaus adres-
siert werden — beim 65816 dagegen schon.
Beispiel: Wenn D den Wert $0000 hat und das
X-Register den Wert $40 (8-Bit-Modus) enthait,
dann adressiert der Befeh|
LDA $E9,X
auf einem 65(C)02 (bzw. auf einem 65816 im
Emulation Mode") die Speicherstelle $(00/)
0020 ($E0 plus $40 = $020, der Uberiauf wird
ignoriert). Im ,Native Mode" wird dagegen die
Speicherstelle $00/0120 adressiert, d.h. der
Uberlauf wird beriicksichtigt. Das gilt auch fir
Indexregister mit 16 Bit Breite; Wenn D =
$0000 und X = $2000, dann adressiert der
oben gezeigte Befeh! die Speicherstelle $00/
$20E0.
@ Adressierungen der Seite 0 finden grund-
satzlich in der Bank 00 stat — diese Bank laBt
sich durch indizierte Adressierung nicht Uber-
schreiten (vgl. 3.2). Wenn D = $9000 und X =
$4000, dann adressiert der Befehl
LDA $84,x
nicht etwa die Speicherstelle $01/3084, son-
dern $00/3084 — dieser Uberlauf wird nicht
beriicksichtigt.
Programmiertricks wie z.8. die sich selost modi-
fizierende Routine CHRGET in Applesoft durf-
ten der Vergangenheit angehdren. Es ware zwar
méglich, ein Unterprogramm zu schreiben, das
innerhalb der momentan gesetzten Seite 0 ab-
lauft — es mUBte aber mit einem JSL aufgerufen
werden und mit einem RTL enden (sehr undko-
nomisch).
Durch die Tatsache, daB sowohl die Seite 0 als
auch der Stack innerhalb der Bank 00 frei be-
15
Festplattenlésung als |
Bausatz fiir jeder
Seit einiger Zeit sieht man in der Fach-
presse einschlagige Anzeigen: Megacore,
Megaboard und MDB mit unterschiedli-
chen Speicherkapazitaéten. Das Kernstiick
all dieser zur Verfligung stehenden Még-
lichkeiten ist immer MEGA-BOARD, der
Harddisk-Controller mit Software. Peeker
hat fir Sie beim Hersteller, der Firma
Frank & Britting GmbH, preisgiinstige
Sonderkonditionen flr die Produktreine
» Mobile Datenbox“ ausgehandelt. Die Re-
sonanz auf die Angebote war gut. Es hat
sich gezeigt, daB viele Apple-Anwender
von den neuen Moglichkeiten, die diese
externe Speichererweiterung bietet, be-
geistert sind, aber den finanziellen Auf-
wand scheuen.
Peeker hat sich deshalb wieder mit Frank
& Britting in Verbindung gesetzt. Durch
das Entgegenkommen des Herstellers ist
es nun méglich, auch einen preiswerten
Harddisk-Bausatz zu erwerben. Er enthalt
den Controller, den Kabelsatz, die Soft-
ware und eine 10-Megabyte-Festplatte
(ohne Netzteil). Diesen Bausatz (Bau-
satz 1) kénnen Sie wie die MDB beim
Hithig-Software-Service inkl. DB-Meister
flr DM 1482,— beziehen.
Wenn Sie liber andere Platten-Kapazitaten
verfligen (bis 64MB) oder selbst eine
Festplatte kaufen méchten, kénnen Sie
den Controller mit Software und Kabelsatz
auch getrennt erwerben. Harddisks gibt es
gebraucht recht giinstig auf dem Markt.
Der Fachhandel bietet standardisierte
Netzteile und Gehause.
Der Controller mit dem speziellen Flach-
bandkabel und der Software kann direkt
beim Entwickler und Hersteller Frank &
Britting fur DM 898,— bezogen werden
(Bausatz 2, ohne DB-Meister). Die Firma
Frank & Britting entwickelt seit Jahren
Controller fir Harddisk-Subsysteme, unter
anderem auch MEGA-BOARD fiir Apple II,
I+, lle und den ligs. Alle Produkte werden
von Frank & Britting selbst hergestellt und
durchlaufen bis zur Auslieferung mehrere
Funktionstests. Die Qualitétsanforderun-
gen an die Produkte sind sehr hoch: Ein
Megaboard z.B. wird, nachdem es von der
16
wy
Produktionsabteilung kommt, erst nach
einstiindigem Dauertest auf speziellen
Rechnersystemen freigegeben. Danach
durchlauft es noch Tests am Apple, wo
moglichst alle unglinstigen Systemvoraus-
setzungen simuliert werden. Somit wird
gewahrleistet, daB nur Produkte ausgelie-
fert werden, die 100%ig in Ordnung sind.
Aufbau eines kompletten Harddisk-
Subsystems:
1, Controller
2. Software
3. Spezielles Flachbandkabel (40adrig, 1,5
Meter lang)
4. Power-Kabel mit genormten 4-Pol-HD-
AnschluBstecker
5. Ausfiihrliches Handbuch
6. Harddisk mit einer ST506- oder ST412-
Schnittstelle (Standard-Schnittstelle von
Festplatten im Kapazitatsbereich von 5 MB
bis 80 MB, mit 34-Pol- und 20-Pol-Stek-
kerleiste)
7. Netzteil (5 Volt/mindestens 2 Ampere,
12 Volt/mindestens 3 Ampere)
Bild 1: Lieferumfang Frank & Britting
Der Lieferumfang von MEGA-BOARD um-
faBt die Produkte unter Punkt 1 bis 5 (s.
Bild 1). Die Verbindung der einzelnen
Komponenten ist sehr einfach (s. Bild 2).
Der Controller wird in einen freien Slot
gesteckt und mit dem 40-Pol-Stecker des
Flachbandkabels verbunden. An der ande-
ren Seite des Kabels befinden sich ein 34-
Pol- und ein 20-Pol-Stecker. Beide wer-
den einfach auf die ST506-Schnittstelle
der Harddisk gesteckt. Dann wird die vor-
Bild 2: Gesamte Soft- und Hardware fur
den Selbstbau
gefertigte und entsprechend bezeichnete
5-Volt-Leitung des Flachbandkabels am
Netzteil angeschlossen oder an der Fest-
platte angeldtet (flr die externe Span-
nungsversorgung des Controllers). Das
vorgefertigte Power-Kabel fir die Festplat-
te wird mit dem verpolgeschiitzten 4-Pol-
Spannungsnormstecker auf die Harddisk
gesteckt (s. Bild 3). Entsprechend der
Steckeraufschrift werden dann die Kabel
mit dem Netzteil verbunden.
Das Netzteil sollte einem guten Qualitats-
standard entsprechen. Harddisk-Laufwer-
Bild 3: Die Steckpositionen im Detail
Peeker 2/1987
-er-Leser -
1G
ke reagieren empfindlich auf Stérungen
und UnregelmaBigkeiten der Spannungs-
versorgung. Die Harddisk braucht zwei
Spannungsversorgungen mit +5 Volt und
+12 Volt, die Spannungen haben gemein-
same Masse. Beide Masseleitungen soll-
ten getrennt bis zum Netzteil gefulhrt wer-
den. Die Stréme sind recht unterschied-
lich, prazise Werte sind ggf. den
Datenblattern des Laufwerkes zu entneh-
men. Als Standardwerte gelten bei +5 Voit
(inkl. 0,9 Ampere fiir den Controller, der
vom externen Neizteil versorgt wird) etwa
1,8 Ampere, bei +12 Volt etwa 1,5 Ampe-
re. Allerdings ist bei der Dimensionierung
des Netzteils zu beachten, daB beim
»Hochlaufen" der Harddisk der 12-Volt-
Teil fur 10 Sekunden mit etwa 2 Ampere
belastet wird. Deshalb empfiehlt es sich,
eine Leistungsreserve zu kalkulieren und
mit 5V/2A bzw. 12V/3A zu rechnen.
Bild 4: Mit wenigen Handgriffen zusam-
mengestecktes, betriebsfertiges Sy-
stem
In verschiedenen Fachzeitschriften, Hob-
by- und Computerladen werden preiswer-
te und leistungsfahige Netzteile angebo-
ten. Bei Apple-kompatiblen Rechnern im
IBM-Gehause beispielsweise ist in den
meisten Fallen das Neizteil fir die zusatzli:
che Last einer Harddisk ausreichend di-
mensioniert. Gehause flr die Harddisk
sind ohne Schwierigkeiten zu bekommen.
Man sollte hierbei auf die Méglichkeit aus-
reichender Belliftung achten, entweder
durch Schlitze bzw. Locher im Gehause
oder durch einen eingebauten Lifter. Eine
Harddisk kann in der Regel bei Betriebs-
Peeker 2/1987
temperaturen zwischen 5 und 55 Grad
Celsius arbeiten. Die obere Grenze der
zulassigen Betriebstemperatur wird im ge-
schlossenen Gehause ohne entsprechen-
de BelliftungsmaBnahmen, gerade bei
warmer Umgebungsluft wie im Sommer,
leicht erreicht. Die Festplatte kann irgend-
wo am Arbeitsplatz untergebracht werden,
denn das Flachbandkabel darf bis 5 Me-
ter(!) lang sein.
Harddisk-Parameter
Die Festplatten unterscheiden sich unter-
einander durch die Anzahl der Képfe
(HEAD), Anzahl der Zylinder (CYL), durch
verschiedene Zugriffsmodi (FAST SEEK)
und verschiedene Schreibstrome (WRITE
PRECOMP, WP). Frank & Britting hat be-
Beispiele Harddisk-Parameter
Sonderangebot fiir Peeker-Leser
wuBt vermieden, diese Parameter Uber
Hardware-Briicken, Mauseklaviere etc.
einzustellen. Samtliche laufwerkspezifi-
schen Parameter kénnen per Software
eingestellt werden. In der Tabelle finden
sich einige Beispiele fur auf dem Markt
befindliche Festplattenlaufwerke.
Bei dem Initialisieren der Platte werden
diese Werte vom Initialisierungsprogramm
erfragt. Danach wird formatiert, und das
Harddisk- Subsystem ist betriebsbereit.
In manchen Datenblattern ist der Wert
»FAST SEEK“ nicht zu finden. In diesem
Fall gilt folgende Regel: Wenn der Wert
der durchschnittlichen Zugriffszeit
(Datenblatt) kleiner als 100ms ist, wird
FAST SEEK mit ,,Y“ beantwortet.
Laufwerk formatiert MByte HE
Rodime RO 352 19.09 4
Rodime RO 2048 41.94 8
Lapine Titan 3532 20.95 4
Seagate ST 412 19.09 4
Segeate ST 506 5.00 4
BASF 6188 11.80 4
Microscience HH725 19.99 4
ope 9415-528 22.30 4
Micropolis 1325 33.60 4
Miniscribe 3425 21.40 4
Tandon TM 262 10.008 4
:AD ov WP ab CYL FS
308 256 Y
6a 8 ¥
612 o y
396 0 Y
153 128 N
360 9 ¥
612 ry Y
697 @ ¥
ped cy Y
615 o Y
306 0 Y
Wie wird bestellt?
Sie senden Ihre Bestellung an den Hithig-
Software-Service. Sie erhalten dann von
der Firma Frank & Britting eine Voraus-
rechnung, nach deren Uberweisung Ihnen
von dort Bausatz 1 oder Bausatz 2 geliefert
wird. Wenn Sie Bausatz 1 bestellen, erhal-
ten Sie gleichzeitig vom Hithig-Software-
Service das Programm DB-Meister (2 Dis-
ketten und ein Handbuch) in der fiir die
MDB bereits angepaBten Version. Nach ei-
ner geringfligigen Anderung im Hello-Pro-
(Cy
Huthi
ig
PUBLIKATON
Im Weiher 10
gramm kénnen Sie diese Neuversion des
DB-Meisters Gbrigens auch zusatzlich auf
35-Spur-Laufwerken einsetzen.
Zur Bestellung kénnen Sie eine der im
Peeker eingehefteten Bestellkarten ver-
wenden. Stichwort:
Bausatz 1: Megaboard-Controller, Kabel-
satz, Software, 10MB-Fesiplatte, DB-Mei-
ster........ Sonderangebot DM 1482,—
Bausatz 2: Megaboard-Controller, Flachband-
kabel, Software......Sonderangebot DM 898,—
Huthig Software Service
- 6900 Heidelberg 1
pe sg ey ll Ai)
weglich sind, kann eine neue (katastrophale) Art
von Programmierfehler auftreten, die es beim
65(C)02 aufgrund der fixierten Speicherberei-
che Uiberhaupt nicht gibt — namlich den Uberlauf
des Stacks in die momentan benuizte Seite 0
hinein.
Das D-Register kann sowohl Uber den Befehi
PHD auf den Stack gebracht als auch mit PLD
wieder zurlickgeladen werden. Einen direkten
Ladebefeh! wie (,,Lade D mit <Wert>") gibt es
nicht, dafiir aber die Befehle TCD (Akku-inhalt
nach D) und TDC (D-Inhait zum Akku). Der
Buchstabe .,C“ steht hier flr die Tatsache, daB
der Akku bei diesen beiden Befehlen immer als
16-Bit-Register behandelt wird — unabhéngig
davon, auf welche Breite er momentan gesetzt
ist.
3.4, Stackpointer (SP)
Wie bereits erwahnt, benutzt der 65(C)02 den
fixen Speicherbereich von $0100 bis $01FF als
Stack. Der Stackpointer hat eine Breite von 8
Bits und zeigt (im Gegensatz zu den meisten
anderen Prozessoren) nicht auf die zuletzt be-
legte Speicherstelle, sondern auf den jeweils
nachsten freien Speicherplatz.
Der Stack ,wachst* in Richtung absteigender
Adressen — das Speichern von n Bytes auf dem
Stack setzt SP um n herab. Bild 3 gibt ein
Beispiel fiir den 65(C)02 (Registerbreite: 8
Bits), in dem der Akku-Inhalt ($20) zuerst auf
den Stack gebracht und danach wieder herun-
tergeholt wird.
4 1 sty
Tecmeston!
vorher PHA
Bild 3: Stackpointer beim 6502
Der einzige Unterschied zum 65(C)02 besteht
darin, da8 der Stackpointer des 65816 eine
Breite von 16 Bits hat und der Stack damit nicht
mehr auf eine Speicherseite (d.h 256 Bytes)
begrenzt ist — er kann mit einer beliebigen
Adresse innerhalb der Bank 00 beginnen.
Stack und Stackpointer haben beim 65816 die
folgenden Eigenschaften und Grenzen:
@ Als Speicherbereich wird grundsaizlich die
Bank 00 benutzt — unabhiingig von den Inhalten
der Register PB, DB und D.
@ Der Stackpointer bewegt sich bel Uber- und
Unterlauf im Kreis. Eine Erniedrigung Uber
$0000 hinaus (zuviele ,,Push“-Operationen)
setzt inn auf den Wert $FFFF und erniedrigt ihn
von da aus weiter, eine Erhohung uber $FFFF
hinaus (zuviele ,,Pull"-Operationen) setzt ihn
aut den Wert $0000 und erhdht ihn von da aus
weiter.
@ Adressierungen des Stacks kénnen nie Uber
die Bank 00 hinausgehen, selbst dann nicht,
18
wenn mit Indizierung gearbeitet wird (s. 6.2.5).
Beispiel: Wenn SP = $FFFO, dann adressiert
der Befehl
LDA $49,S —; SP plus "Offset" $49
nicht die Speicherstelle $01/0030, sondern
$00/0030.
Es existieren weder direkte Befehle, mit denen
man den momentanen Wert des Stackpointers
auf den Stack bringen bzw. ihn herunterholen
kann, noch Befehle wie ,Lade SP mit
<Wert>", (Falls Ihnen der Gedanke daran
merkwirdig vorkommen sollte: Mit dem Z80
geht so etwas ohne Schwierigkeiten). Fir den
Transfer zwischen einem Register und dem
Stackpointer gibt es dagegen gleich vier Még-
lichkeiten: TSC und TCS (Stackpointer — 16-
Bit-Akku und umgekehrt) sowie TSX und TXS
(Stackpointer > X-Register und umgekehrt).
Der letzte dieser vier Befehle hat einen ganz
speziellen , Haken“ (s. Abschnitt 4.2).
3.5. Akku und Indexregister
(A, X und Y)
Der Akkumulator (A) ist das zentrale (und einzi-
ge) Rechenregister des Prozessors — samtliche
logischen (AND, ORA, EOR) und arithmeti-
schen Operationen (Addieren, Subtrahieren)
lassen sich nur Uber ihn ausfUhren,
Rotations- und Schiebebefehle (ROL, ROR,
ASL, LSR) sind dagegen sowohl liber den Akku
als auch direkt auf Speicherstellen anwendbar.
Fiir Operationen mit diesem Register stehen die
meisten Adressierungsarten zur Verfiigung (23
von 24 Adressierungsarten)
Der Akku des 65(C)02 ist grundsatzlich 8 Bit
breit, der des 65816 |&Bt sich (getrennt von den
Indexregistern) zwischen 8 und 16 Bits um-
schalten (s. 3.6.3).
Wenn der Akku des 65816 auf 8 Bit Breite
gesetzt ist, bleiben die hdherwertigen 8 Bits in
den Tiefen des Prozessors verborgen. Diesen
Platz kann man unter dem Registernamen B als
Zwischenspeicher benutzen, wobei nur eine
einzige Operation definiert ist:
BA ; Tausch AL — AH
Hier handelt es sich um einen echten Tausch:
Der vorherige Inhalt des 8-Bit-Akkus befindet
sich danach im Register ,B", der des ,,B"-
Registers im Akku. Die Flags N und Z werden
entsprechend dem neuen Akku-Inhalt gesetzt.
Da das ,B"-Register (im Gegensatz zu den
hdherwertigen Teilen der Indexregister X und Y)
durch Umschalten der Breite des Akkus nicht
geléscht wird, ist dieser Befehl eine wesentlich
schnellere Alternative zur Speicherung auf den
Stack. Der Befehl XBA funktioniert auch dann,
wenn der Akku auf 16 Bit Breite gesetzt ist — in
diesem Fall wird das héherwertige Byte mit dem
niederwertigen ausgetauscht. Das folgende
Programmfragment kénnte eine vierstellige
Hexzahl ausgeben:
LDA #92476 2 Akku <~ $2476
XBA > Akku: $7624
ISR xxx ; Ausgabe von $24
XBA { Akku: $2476
ISR xxx ; Ausgabe von $76
Die konventionelle Alternative dazu sieht we-
sentlich umstandlicher aus:
LDA #$2476
PH
A ; Zwischenspeichern
LSR A ) hOherwertigen Teil
ISR A } mach links verschieben
: 5 Smal: Akku <- $9976
ISR xxx : Ausgabe von $24
PLA } Original zurdok
AND #S00FF i bleibt $9976
JSR xxx } Ausgabe von S76
Die Indexregister des Prozessors (X und Y) sind
nicht fir Rechenoperationen vorgesehen, son-
dern zur indizierten Adressierung von Daten.
Bevor Sie liber diese Erklarung den Kopf schilt-
teln, folgt ein Beispiel: Der Befehl
LDA $2009,x
ladt den Akku mit dem Inhalt der Speicherstelle
$2000, wenn das X-Register den Wert 0 hat, fur
X = 1 wird $2001 adressiert, flr X = 2 $2002
usw. (fiir den 65816: DB/2000, DB/2001, DB/
2002...).
Folgerichtig sind arithmetische Operationen mit
den Indexregistern nur sehr beschrankt még-
lich. Man kann ihren Inhalt um eins erhéhen
(INX, INY), um eins erniedrigen (DEX, DEY)
sowie Vergleiche ausfilhren (CPX, CPY =
»Compare X“ bzw. ,,Compare Y“). Additionen
oder Bitmanipulationen mit den Inhalten der
Indexregister sind nicht definiert.
Die Indexregister des 65(C)02 haben grund-
satzlich eine Breite von 8 Bits — mit dem zuvor
gezeigten Beispiel lassen sich also Speicher-
Stellen im Bereich von $2000 bis $20FF (d.h.
eine , Speicherseite") adressieren.
Die tndexregister des 65816 lassen sich ge-
trennt vom Akkumulator zwischen 8 und 16 Bit
umschalten (s. 3.6.3). Der Befehi ,LDA
$2000,X" hat im letzteren Fall eine ,,Reichwei-
te“ von DB/2000 bis DB+1/1FFF. (Um ganz
korrekt zu sein: Wenn der Akku ebenfalls auf 16
Bits gesetzt ist und X den Inhalt $FFFF hat,
werden die Speicherstellen DB+1/$1FFF und
DB+1/$2000 angesprochen).
Der 65(C)02 kennt bereits zahlreiche Adressie-
rungsarten und Transferméglichkeiten fiir die
beiden Indexregister, die beim 65816 noch er-
weitert worden sind. Die erfreulichsten Neue-
rungen bestehen aus einer direkten Transfer-
mdglichkeit zwischen X und Y Uber die Befehle
TXY und TYX sowie den (bereits auf dem 65C02
implementierten) direkten Stackoperationen
(PHX, PHY, PLX, PLY).
3.6. Das Prozessorstatusregister (P)
Dieses Register besteht aus einer Reihe einzel-
ner Bits (,,Flags"), die voneinander getrennt
behandelt werden, seine ,Breite* (8 Bits flr
samtliche Prozessoren der 65er-Familie) ist nur
im Zusammenhang mit Stackoperationen inter-
essant.
Die Bits M und X sind beim 65(C)02 nicht
definiert und haben immer den Wert ,,1", sind
also immer gesetzt. Dasselbe ist der Fall, wenn
sich der 65816 im ,,Emulation Mode" befindet.
Bild 4 gibt die Reinenfolge und Bedeutung der
einzelnen Bits noch einmal wieder.
Die einzelnen Bits des P-Registers werden
durch die Ergebnisse von Rechenoperationen
gesetzt. Der Prozessor kennt eine Reihe von
Sprungbefehlen, die abhangig vom Stand der
Peeker 2/1987
*) 65(C)02 sowie im ,£Emulation Mode“ des
658xx: Wird als ,0" auf den Stack geschrieben,
wenn durch IRQ unterbrochen wird (s. Ab-
schnitt 5), hat ansonsten immer den Wert ,,1".
Bild 4: Status-Register
einzelnen Bits ausgetilhrt oder ignoriert werden
(,bedingte Spriinge"). Die néchsten Abschnitte
enthalten zahlreiche Beispiele dazu.
Achtung: Im Gegensatz zu den meisten ande-
ren Prozessoren werden die Bits Z, V und N
auch durch Register-Ladeoperationen gesetzt!
Vorteil: Die z.B. vom Z80 her gewohnte Be-
fehlsfolge ,OR A,00“ kann man sich in den
meisten Fallen sparen. Nachteil: Ein Ablauf wie
der folgende funktioniert meistens nicht:
<Priifung> setzt Flags
<Ladeoperation> ; mit Wert A
<bedingter Sprung> ; zu <weiter>
<Ladeoperation> ) mit Wert B
<weiter> ...
Auf einem Z80 oder einem 8088 nimmt dieses
Programmfragment eine Priifung vor und ladt
ein Register abhangig vom Ergebnis der Pri-
fung entweder mit dem Wert A oder dem Wert
B.
Auf einem 65(C)02 oder einem 65816 werden
die Flags durch die Ladeoperation mit dem Wert
Aneu geseizt, der darauffolgende Sprung ba-
siert also nicht mehr auf dem Ergebnis der
Priifung, sondern auf dem soeben geladenen
Wert A. Um das gewiinschte Ergebnis zu errei-
chen, muB die Routine folgendermaBen formu-
liert werden:
<Ladeoperation> mit Wert A
<Priifung> ; setzt Flags
<bedingter Sprung> ; zu <weiter>
<Ladeoperation> : mit Wert B
<weiter>
Der 65(C)02 kennt nur eine einzige Adressie-
rungsart des P-Registers, namlich die Befehle
PHP (,,Push P-Register auf den Stack") und
PLP (,,Pull P-Register"), wobei jeweils ein Byte
auf dem Stack belegt bzw. wieder freigegeben
wird. Beim 65816 sind die Befehle SEP (,,Set P-
Bits“) und REP (,,Reset P-Bits") hinzugekom-
men, mit denen einzeine Bits direkt gesetzt
bzw. geléscht werden kénnen.
3.6.1. Das N-Flag (,, Negativ-Flag“)
Es wird gesetzt, wenn das Ergebnis einer Ope-
ration im Zweierkomplement einen negativen
Wert darstellen wirde. (,,Zweierkomplement":
Die Werte $00 bis $7F bzw. $0000 bis $7FFF
werden als positive Zahlen von dezimal 0 bis
127 bzw. 0 bis 32767 definiert. Werte von $80
bis $FF bzw. $8000 bis $FFFF werden als nega-
tive Zahlen interpretiert, die Bereiche gehen
von dezimal -128 ($80) bis -1 ($FF) bzw. von
-32768 ($8000) bis -1 ($FFFF). Eine negative
Zahl wird dadurch gekennzeichnet, daB das
Peeker 2/1987
héchstwertige Bit eines Operanden gesetzt ist
($7F binar: 0111 1111, $80 binar: $1000
0000).
Das N-Flag wird durch vier Arten von Operatio-
nen gesetzt:
@ Ladevorgange: ,,LDA $4000" setzt N, wenn
der Inhalt von $4000 gréBer $80 bzw. der Inhalt
von $A000/$A001 gréRer $8000 ist, ansonsten
wird es geléscht;
@ Rechen- und Schiebeoperationen setzen N,
wenn die folgende Bedingung zutrifft, anson-
sten wird das Flag geldscht:
— Addition: Ergebnis groBer $7F bzw. $7FFF;
~ Subtraktion: Ergebnis kleiner 0 (d.h. $FF..$80
bzw. $FFFF..$8000);
- Linksschieben oder -rotieren: Ergebnis hat
hdchstes Bit gesetzt;
—Rechtsrotieren: Ergebnis hat héchstes Bit ge-
setzt;
~ Vergleich: Vergleichsoperand ist gréBer.
@ Erhdhen und Erniedrigen von Registern/
Speicherstellen: Wenn das Ergebnis im Bereich
$80..$FF bzw. $8000 bis $FFFF liegt, wird N
gesetzt, ansonsten geléscht.
@ Den Befehi BIT: Dieser Befehl kopiert das
héchstwertige Bit des adressierten Operanden
auf das N-Flag, ohne den Inhalt des Akkus zu
verandern. Wenn der Operand gréBer als $7F
bzw. $7FFF ist, wird das N-Flag gesetzt, anson-
sten wird es geléscht.
Betrachten wir beispielsweise eine Befehlsfolge
wie:
LDX SADOO ; X < Inhalt von Sagoo
DEX
Der Befehl DEX erniedrigt den Inhalt von X um
eins. Wenn wir davon ausgehen, daB X auf acht
Bit Breite gesetzt ist, ergeben sich die folgen-
den Méglichkeiten:
— wenn $A000 einen Wert im Bereich $81..$FF
enthallt, bleibt das N-Flag gesetzt, weil X auch
nach der Operation einen Wert gréBer/gleich
$80 enthalt;
— wenn $A000 den Wert $80 enthait, dann hat X
nun den Inhalt $7F: Das N-Flag wird durch die
zweite Operation geldscht;
— wenn $A000 einen Wert zwischen $01 und
$7F enthalt, bleibt das N-Flag unverandert ge-
ldscht: X enthalt einen Wert zwischen $00 und
$7E;
— wenn $A000 den Wert $00 enthalt, wird das
N-Flag durch die zweite Operation gesetzt: X
enthalt nun den Wert $FF.
Mit dem Befehl SEP #$80 kann das N-Flag
explizit gesetzt, mit REP +$80 explizit geléscht
werden. Der Befeh! BMI (,,Branch on Minus")
fuhrt zu einem Sprung, wenn das N-Flag ge-
setzt ist; wenn es geldscht ist, wird er ignoriert.
Der Befeh! BPL (,,Branch on Plus") verhalt sich
umgekehrt — er wird nur dann ausgefihrt, wenn
das N-Fiag geléscht ist.
3.6.2, Das V-Flag
(,0Verflow" = Uberlauf)
Dieses Flag dient der Erkennung eines Zweier-
komplement-Uberlaufs. Es wird nur durch zwei
Arten von Operationen beeinfluBt:
@ Durch Addition und Subtraktion: Wenn sich
wahrend einer derartigen Operation das Vorzei-
chen (also das N-Bit) andert, dann wird das V-
65816 94
Flag gesetzt — aber nur dann, wenn der dazuad-
dierte bzw. subtrahierte Wert kleiner als $80
bzw. $8000 ist. In allen anderen Fallen wird es
geléscht, also wenn
~ ein Wert addiert oder subtrahiert wird, der
einen Vorzeichenwechsel erzwingt (groBer/
gleich $80 bzw. griBer/gleich $8000) oder
— sich wahrend der Operation der Stand des N-
Flags nicht andert.
@ Durch den Befehi BIT: Dieser Befehl kopiert
das zweithdchste Bit des adressierten Operan-
den auf das V-Flag.
Ein einmal gesetzter Zustand des V-Flags ist
auBerordentlich langlebig — er wird weder durch
Vergieiche, Schiebeoperationen noch durch Er-
hdhungen/Eriedrigungen von Registern/Spei-
cherstellen verandert.
Mit dem Befehil CLV (ersatzweise REP #$40)
kann das V-Flag explizit geléscht, mit SEV (oder
SEP 4#$40) ‘kann es explizit gesetzt werden.
Der Sprungbefehl BVS wird nur dann ausge-
fulhrt, wenn das V-Flag gesetzt ist, der Sprung-
befehl BVC wird nur bei geléschtem V-Flag
ausgefihrt. Aufgrund seiner ,Langlebigkeit“
wird dieses Flag recht gerne zweckentfremdet,
um z.B. eine bestimmte Bedingung zeitweilig
zwischenzuspeichern.
3.6.3, Die Flags M und X
(, Memory“ und , index")
Diese beiden Bits haben beim 65(C)02 sowie
im Emulation Mode" des 65816 grundsatzlich
den Wert ,,1", sind also gesetzt. Im_,,Native
Mode“ des 65816 bestimmen sie die Breite des
Akkumulators (M = 1: 8 Bit, M = 0: 16 Bit)
sowie die der Indexregister (X = 1: X- und Y-
Register 8 Bit, X = 0: X- und Y-Register 16 Bit).
Verzweigungen, die vom Stand dieser beiden
Bits abhangig sind, kennt der 65816 nicht — es
existiert lediglich die Méglichkeit, die Bits mit
den Befehlen REP und SEP zu léschen bzw. zu
seizen:
@ SEP #+$20 setzt M (und damit den Akku auf 8
Bit Breite), REP 4$20 léscht dieses Flag. Der
Inhalt des Akkus wird durch diese Befehle nicht
beeinflu8t — nach einem SEP 4+$20 wird der
hoherwertige Teil lediglich ,,versteckt";
@ SEP +#$10 setzt X (und damit die indexregi-
ster auf 8 Bits), REP 4$10 léscht das Flag X und
setzt 16 Bit breite Indexregister. Der Befehl SEP
4#$10 fihrt eine automatische Léschung des
Sherwertigen Teils der indexregister aus (s.a.
4.2);
@ SEP +830 ist identisch mit der Befehlsfolge
SEP +$20/SEP 4$10 und setzt A, X und Y auf
8 Bits; REP +$30 entspricht REP #$20/REP
4$10 und setzt A, X und Y auf 16 Bits.
Die Breite der jeweiligen Register ist bei Opera-
tionen mit Speicherstellen ausschlaggebend
dafiir, ob eine oder zwei Adressen angespro-
chen werden. Beispiele:
SEP #830 A, X und ¥: 8 Bit
LDA $Ad00 ladt $A000
oMP $8090 : vergloicht mit $B900
STX $1FFF ; X-Inhalt -> $1FFF
Dieselbe Befehisfolge, mit REP ++$30 eingelei-
tet, wirde A mit dem Inhalt der Speicherstellen
$A000/$A001 laden, den Akku-Inhalt mit den
Speicherstellen $8000/$B001 vergleichen und
den Inhalt von X in $1FFF/2000 ablegen.
19
Mit den (tellweise recht delikaten) Problemen,
die sich bei Datentransfers zwischen Registern
unterschiedlicher Breite ergeben, beschaftigt
sich der gesamte Abschnitt 4, in dem auch die
Umschaltung zwischen Emulation Mode" und
Native Mode" behandelt wird.
3.6.4, Das D-Bit (,, Decimal“)
Uber dieses Bit kann der Prozessor zwischen
»Mormaler* Rechenweise und (,packed")
BCD-Arithmetik umgeschaltet werden. Im er-
sten Fall rechnet der Akku mit Werten im Be-
reich von 0 bis 255 (bzw. -128 bis +127), im
zweiten Fall werden jeweils vier Bits zur Dar-
stellung einer Dezimalzahl benutzt, der Re-
chenbereich erstreckt sich damit von 00 bis 99.
Fur den Betrieb mit 16 Bits ergeben sich die
Bereiche 0..65535 (bzw. -32768..+32767) so-
wie 0000 bis 9999 (geht beim 68000 nicht).
So gut wie alle Prozessoren verfiigen Uber eine
derartige Umschaltmdglichkeit, die allerdings in
den seltensten Fallen genutzt wird (Turbo BCD
von Borland ist eines der wenigen kommerziel-
len Programme, die dem D-Bit— hier dem Aqui-
valent des 8086/88 — zu seiner Existenzberech-
tigung verhelfen).
Der einzige Unterschied zwischen dem
65(C)02 und dem 65816 besteht darin, da8 das
D-Bit bei letzterem durch ein Reset automatisch
geldscht wird (s. Abschnitt 5). Als Apple-Ent-
wickler hat man aber offensichtlich solche Ang-
ste vor gesetzten D-Flags, daB auch die Reset-
Routine im Monitor des llgs noch mit einem
CLD beginnt.
Der Befehl CLD (ersatzweise REP #$08) léscht
das D-Flag und setzt den ,normalen" Modus,
der Befehl SED (bzw. SEP #$08) setzt das D-
Flag und schaltet auf BCD-Arithmetik um.
Sprungbefehle, die sich auf den Zustand des D-
Flags beziehen, gibt es nicht.
3.6.5. Das |-Flag (Interruptsperre)
Wird zum Sperren und Entsperren von IRQ-
Anforderungen (interrupt request; hardwarema-
Biger, sperrbarer Interrupt) verwendet und hat
bei samtlichen Mitgliedern der 65er-Familie die-
selbe Funktion, SEI (ersatzweise SEP +$04)
sperrt IRQ-Anforderungen, CL! (oder REP
$04) [ABt Interrupts zu. Ein durch den Befehl
BRK ausgeldéster ,Software-“Interrupt wird
durch den Zustand des I-Flags nicht beeinfluBt.
Naheres zur Funktion in Abschnitt 5.
3.6.6. Das Z-Flag (,Zero" = Null)
Dieses Flag wird gesetzt, wenn eine Operation
den Wert $00 ergibt, ansonsten wird es zurlick-
gesetzt. Unterschiede zwischen 65(C)02 und
65816 gibt es nicht, wenn man von der Méglich-
keit des direkten Setzens Uber die Befehle REP
und SEP absieht (s.u.). Ahnlich dem N-Flag wird
das Z-Flag durch eine Vielzahl von Operationen
verandert:
@ Ladevorgange: Wenn ein Register mit dem
Wert $00 (bzw. $0000) beladen wird, setzt die-
se Operation das Z-Flag. Ist der Wert ungleich
$00, wird Z geléscht;
@ Addition und Subtraktion: Wenn das Ergebnis
den Wert $00 (oder $0000) hat, wird das Z-Flag
gesetzt. Achtung: Das ist auch bei einem Uber-
oder Unterlauf der Fall: Im 8-Bit-Modus ergibt
20
die Befehlsfolge LDA +$90 / CLC / ADC #$70
das Ergebnis $100, d.h. der Akku enthalt da-
nach den Wert $00.
@ Schieben und Rotation: Wenn der verblei-
bende Operand den Wert $00 (oder $0000) hat,
wird das Z-Flag gesetzt, ansonsten wird es ge-
léscht. Beispiel: Das Rechtsschieben einer
Speicherstelle mit dem Inhalt $01 setzt diese
Speicherstelle auf den Wert $00 und setzt damit
das Z-Flag. Analoges gilt flr das Linksschieben
einer Speicherstelle oder des Akkus mit dem
Wert $80 (im 8-Bit-Modus).
@ Ethdhung und Erniedrigung: Z wird abhangig
davon gesetzt, ob das Ergebnis der Operation
den Wert $00 hat oder nicht. Zur Abwechslung
ein Beispiel im 16-Bit-Modus:
LOX #80001; <> $00: loscht Z
DEX 3 X=0900: setat Z
DEX ; X<SFFFF: léscht Z
@ Vergleiche: der Prozessor fuhrt jeden Ver-
gleich , intern“ als Subtraktion aus — nur daB der
numerische Wert des Ergebnisses in keinem
Register festgehalten wird. Ein Vergleich setzt
damit das Z-Flag, wenn beide Operanden den-
selben Wert haben (die Subtraktion ergibt den
Wert $00).
@ Den Befeh! BIT: abgesehen von einer direk-
ten Kopie der beiden héchstwertigen Bits des
adressierten Operanden in die Flags N und V
fuhrt dieser Befeh! ein bitweises AND zusam-
men mit dem Inhalt des Akkus aus und setzt mit
dem Resultat das Z-Flag. Folge: Wenn der Akku
den Inhalt $00 (oder $0000) hat, ergibt ein BIT-
Befehl immer ein gesetztes Z-Flag. Hat der
Akku dagegen den Inhalt $FFFF (alle Bits ge-
setzt), dann wird Z nur gesetzt, wenn der adres-
sierte Operand den Wert $00 hat.
Abgesehen von den Befehlen SEP +$02 und
REP #$02 kennt der 65816 keine direkten Be-
fehle zur Beeinflussung des Z-Flags. Die zu
diesem Flag gehérenden bedingten Spriinge
dirften wohl neben den Befehlen LDA und STA
zu den am haufigsten benutzten gehdren: BEQ
(,,Branch on EQual") fiihrt einen Sprung aus,
wenn Z gesetzt ist und wird ansonsten ignoriert;
BNE (,Branch on Not Equal") wird nur bei
geléschtem Z-Flag ausgefiihrt.
3.6.7. Das C-Flag (, Carry" = Ubertrag)
Das C-Flag wird zur Erkennung von Uber- bzw.
Unterlauf bei vorzeichenloser Arithmetik (vgl. V-
Flag) sowie fur Vergleiche und Schiebeopera-
tionen verwendet. (Vorzeichenlose Arithmetik:
Interpretation der Werte $00..$FF als positive
Zahlen im Bereich von 0 bis 255, vgl. 3.6.1).
Das Carry funktioniert quasi als neuntes (bzw.
siebzehntes) Bit des Akkumulators, sein Verhal-
ten ist bei allen Mitgliedern der 65er-Familie
dasselbe (bis auf eine zusatzliche Funktion
beim 65816, die in Abschnitt 4 beschrieben ist).
Die folgenden Arten von Operationen beeinflus-
sen den Zustand des Carry nicht:
@ Laden, Speichern und Transfer von Register-
inhalten, wobei das Zurlickholen des P-Regi-
sters vom Stack natiirlich eine Ausnahme dar-
stellt;
@ Erhéhung oder Erniedrigung von Speicher-
stellen und Registern;
© Bitweise logische Operationen (AND, ORA,
EOR).
Additionen und Subtraktionen benutzen das
Carry als Erweiterung des Akkumulators. So
ergibt z.B. die bereits in 3.6.6. gezeigte Be-
fehisfolge LDA 4+#$90 / CLC / ADC +#$70 das
Ergebnis $100 — der Akku enthalt danach den
Wert $00, das Carry ist gesetzt. Eine Addition,
deren Ergebnis die Breite des Akkus iibersteigt,
muB das Carry als Zwischenspeicher benutzen.
Als Beispiel die Addition zweier 32-Bit-Zahlen:
LDA SA900 + $A000/SA001
cue
ADC SBOOD $B000/$B001
STA SCO + => $C90/$C002
LDA Sago2 i $a092/SA903
ADC SBO0Z $B092/SB003
STA $cop2 1 > $cop2/SC003
BCS FEHLER i gréRer SFFFFFFFF!
Vor der ersten Addition muB das Carry geléscht
werden (der 65816 kennt keinen Befeh! wie
ADD"). Ergibt sich bei dieser Operation ein
Uberlauf, dann wird das Carry gesetzt: Zur
nachsten Addition wird automatisch der Wert 1
hinzuaddiert. (Eine Befehlsfolge wie LDA #$10.
/ SEC / ADC #$20 ergibt also den Wert $31 —
und nicht $30.) Wenn sich durch die mit gesetz-
tem Carry ausgefiihrte Addition nicht ein weite-
rer Uberiauf ergibt, ist das Carry am Ende der
gesamten Operation geléscht.
Analoges gilt fir Subtraktionen — nur daB das
Carry in diesem Fall als ,, borrow" (= ,geborgt")
verwendet wird. Subtraktionen werden eben-
falls grundsatzlich unter Beriicksichtigung des
Carry ausgefiihrt, ein Befehl wie ,SUB* ist nicht
implementiert. Ein gesetztes Carry vor einer
Subtraktion bedeutet: ,,nichts geborgt", bei ei-
nem geléschten Carry wird dagegen zusatzlich
der Wert 1 abgezogen. Ein Beispiel im 8-Bit-
Modus:
LDA +820 : Akku <- $20
SEC : kein "borrow"
SBC 4821 + Alka: $FF
LDA #819 : hOherwertiger Teil
SBC +898 5 ergibt $07 (nicht $98)
Durch den Unterlauf nach der ersten Subtrak-
tion ist das Carry geléscht worden, die zweite
Subtraktion ergibt deshalb automatisch ein um
eins erniedrigtes Ergebnis. Da in unserem Bei-
spiel in der zweiten Subtraktion kein weiterer
Unterlauf auftritt, ist das Carry am Ende der
gesamten Operation wieder gesetzt.
Wie bereits des 6fteren erwahnt, wird ein Ver-
gleich zweier Operanden (,,Compare") Uber ei-
ne interne Subtraktion ausgefiihrt. Neben den
Flags Z und N wird dadurch auch das Carry
beeinfluBt: Vor der Ausfuhrung des ,Com-
pare" -Befehis wird es (implizit) gesetzt, danach
wird der adressierte Operand (ebenfalls intern)
von dem entsprechenden Register abgezogen.
Das Carry wird dem Ergebnis entsprechend
gesetzt. Beispiel:
LDA #860
CMP SADO
; Abku <- $60
Abhangig vom Inhalt der Speicherstelle $A000
ergeben sich drei Méglichkeiten fiir die Werte
der Flags C, Z und N:
Peeker 2/1987
FACHBUCHTIP ff) Hiiitihig
Apple llc
Handbuch fir Anwender und
Programmierer
von Carl-Ulrich Wassermann
1985, 324 S., zahir. Abb., kart.,
DM 35,—
ISBN 3-7785-1157-2
Carl Ulrich Wassermann
Apple IIc
Handbuch fiir
Anwender und Programmierer
Wenn Sie die Leistungsfahigkeit ihres
Apple llc bisher noch nicht ausschép-
fen konnten, brauchen Sie dieses Buch.
Leicht verstindlich, trotzdem ausftihr-
lich wird die Sprache Applesoft BASIC
dargestellt. Eine Vielzahl von Program-
men, die speziell auf den Apple llc zu-
geschnitten wurden, zeigen die Wir-
kung der einzeinen Befehle bis zu Pro-
grammiertechniken fir Diskettenzugriff,
Maus und andere Anwendungen. Apple
llc Maschinensprache, Programmein-
gabe und -kontrolle mit Monitorbefeh-
len in PASCAL und FORTH geben dem
Leser eine Basis fir die Programmie-
rung des Apple lic in anderen Spra-
chen,
Peeker 2/1987
Die Konfigurierung der seriellen Ports
und weitere spezifische Beschreibun-
gen des Computers erméglichen die
gezielte Kontrolle uber die Maschine.
Mehr als 90 PEEK-, POKE-und
Maschinenprogrammadressen, Spei-
cheraufteilung und weitere Tabellen
sind fir den Programmierer eine kon-
zentrierte, wichtige Grundlage.
21
— =<. =
FVVIBPIVELEIN- GI DIGS
— $A000 enthiilt einen Wert, der gréBer als der
Inhalt des Akkus (d.h. gréBer als $60) ist: Die
intern ausgefiihrte Subtraktion ergibt damit ei-
nen Unterlauf: C ist geléscht, N ist gesetzt. Da
das Ergebnis nicht $00 ist, wird Z ebenfalls
geléscht;
— $A000 enthalt den Wert $60: Die Subtraktion
ergibt keinen Unterlauf, C ist nach der Opera-
tion gesetzt, N ist geléscht. Da das interne
Ergebnis den Wert $00 hat, ist das Z-Flag ge-
setzt;
— $A000 enthait einen Wert, der kleiner als der
Inhalt des Akkus ist: Die interne Subtraktion
ergibt einen positiven Wert, C ist gesetzt, N und
Z sind geléscht.
Flr Schiebe- und Rotationsbefehle wird das
Carry ebenfalls als zusatzliches Bit verwendet —
und zwar sowohl bei Operationen mit dem Akku
als auch bei Operationen mit Speicherstellen.
Bild 5 gibt eine grafische Darstellung der An-
wendung aller vier méglichen Befehle mit der
Speicheradresse $A000 als Operand, wobei
von einem geldschten M-Flag ausgegangen
wird. Wenn M geseizt ist, finden alle gezeigten
Operationen ausschlieBlich mit der Speicher-
Stelle $A000 statt, der Inhalt von $A001 bleibt
unbertihrt.
Ob ein Schiebebefehl auf ein oder zwei Byte
angewendet wird, ist allein durch die Breite des
Akkus festgelegt ~ die Breite der Indexregister
spielt in diesem Zusammenhang keine Rolle.
Das Carry kann mit dem Befehl SEC (ersatzwei-
se SEP #$01) explizit gesetzt und mit CLC
(oder REP ++$01) explizit geléscht werden. Der
bedingle Sprungbefehl BCS (,,Branch on Carry
Set") wird nur ausgefiihrt, wenn das Carry ge-
setzt ist, und ansonsten ignoriert; der Befeh!
BCC (,,Branch on Carry Clear") bewirkt nur bei
geléschtem Carry eine Verzweigung.
4. Umschaltungen und Probleme
Dem aufmerksamen Leser diirfte aufgefallen
sein, daB in den vorhergehenden Abschnitten
des 6fteren die Rede von der Umschaliung
zwischen ,,Emulation Mode“ und ,,Native Mo-
de“ war — nur das Wie" ist nach wie vor
ungeklart. Der Grund: Das zur Umschaltung
gehdrige Flag ,E" ist beim 65816 als neuntes
Bit des P-Registers definiert und nur Uber einen
spezielien Befehl erreichbar. Die Umschaltung
von ,Emulation" auf ,,Native" geschieht Uber
die folgende Befehissequenz:
Le ; léscht Carry
XCE ; Tausch E-C, léscht &
Nach Ausfihrung dieser Befehle enthalt das
Carry den vorherigen Stand von E — wenn es
gesetzt ist, war der Prozessor vorher im ,Emu-
lation Mode“; ist es geléscht, hat sich der Pro-
zessor bereits in seinem ,Urzustand" be-
funden,
Die Umschaltung von ,,Native" auf Emulation“
geschieht auf ahnliche Weise:
SEC } setzt Carry
XCE ; Tausoh E- C, setat B
Der Befehl XCE stellt die einzige Méglichkeit
dar, an den Stand des E-Flags heranzukom-
22
Bild 5: Schiebe- und Rotierbefehle
men. Durch den Tausch mit dem Carry laBt sich
allerdings ein Problem recht elegant lésen, das
ansonsten viel Kopfzerbrechen bereiten wiirde
- namlich Unterprogramme, die in einem be-
stimmten Zustand ,gefahren" werden missen.
Ein Beispiel dazu: Die 1/O-Routinen des ligs
arbeiten intern grundsatzlich im ,,Native Mode".
Damit sie sowohl von 16- als auch von 8-Bit-
Programmen benutzt werden kénnen, wird der
»Aufrufzustand" des Prozessors zwischenge-
speichert:
cue ; Carry 1éschen
XCE ; Léscht E
PHP ; P auf den Stack
REP 4$39 ; M=P, X-P: 16 Bit A,X,Y
JSR... ; Eingabe/Ausgabe
PLP : P vom Stack
XCE ; Carry -> E-Flag
oe
RIS
Der erste XCE-Befehl setzt den ,, Native Mode",
der vorherige Stand von E wird dabei im Carry
festgehalten. Das darauffolgende PHP bringt
das P-Register (also auch das Carry-Flag) auf
den Stack. Nach Ausfiihrung der Routine wird
das P-Register wieder vom Stack geholt, wobei
der ursprlingliche Zustand der Flags M und X
automatisch wiederhergestellt wird. Der zweite
XCE-Befehl tauscht Carry und E miteinander
aus und stellt so den vorherigen Zustand von E
wieder her.
4.1, Umschaltméglichkeiten
Aus dem Stand des Carry und dem Stand von E
vor einem XCE-Befeh! lassen sich insgesamt
vier Verschiedene Méglichkeiten (,,Permutatio-
nen") ableiten:
~ C ist gesetzt, E ist gesetzt. Der Prozessor
befindet sich vor dem Austauschbefehl im
» Emulation Mode" und bleibt es danach eben-
falls. Der XCE-Befeh! hat in diesem Fall nicht die
geringste Wirkung
— C ist geléscht, E ebenjalls, Der Prozessor
befindet sich vor dem Austauschbefehl im ,Na-
tive Mode" und bleibt es danach ebenfalls. Der
XCE-Befeh bleibt auch hier ohne jede sichtbare
Wirkung,
Die anderen beiden Méglichkeiten (4.1.1. und
4.1.2.) sind leider nicht ganz so einfach:
4.1.1. Von ,,Emulation Mode" auf
» Native Mode“
Diese Umschallung hat folgende Wirkungen:
@ Die Flags M und X werden entsperrt. Mit
einem folgenden REP-Befehl kénnen der Akku
und/oder die Indexregister auf 16 Bit Breite
umgeschaltet werden. Achtung: Das Léschen
des E-Flags selbst bewirkt keine Veranderung
der Registerbreite!
@ Das hdherwertige Byte des Stackpointers
wird entsperrt. SP kann mit einem folgenden
Befehi auf einen anderen Bereich als
$0100..601FF gesetzt werden. Die Léschung
des E-Flags selbst hat keinen Einflu8 auf den
Inhalt von SP.
@ Der Prozessor greift von nun an fiir IRQ, BRK
und andere Unterbrechungsanforderungen auf
andere Vektoren zu (s. Abschnitt 5).
Wo bleiben die Register PB, DB und D? Der
nachste Absatz hat dafiir eine verblliffende Ant-
wort parat.
4.1.2. Von ,, Native Mode" auf
» Emulation Mode“
Diese Umschaltung hat folgende Wirkungen:
@ Die Flags M und X werden auf den Wert 1“
gesetzt und gesperrt, Akku und Indexregister
sind dadurch auf 8 Bit Breite festgelegt. Folgen-
de REP-Befehle fur diese beiden Bits bleiben
ohne Wirkung.
© Das hdherwertige Byte des Stackpointers
(,SH") wird auf den Wert $01 gesetzt und
gesperrt, der Stack somit auf den Bereich
$0100..$01FF festgelegt. Der vorherige Inhalt
von SH geht verloren.
© Der Prozessor greift von nun an flr IRQ-,
BRK- und andere Unterbrechungsanforderun-
gen auf die Vektoradressen des 6502 zu (s.
Abschnitt 5).
Peeker 2/1987
FACHBUCHTIP
O) Hiithig
Apple Assembler
von Ulrich Stich!
1984, 200 S., 3 Abb., kart,
DM 34,—
ISBN 3-7785-1047-9
Begleitdiskette DM 28,—
ISBN 3-7785-1048-7
Apple Assembler* wendet sich an
alle, die bereits Anfangerkenntnis-
se der 6502-Programmierung ha-
Showing the first 100000 of 327964 characters.