Skip to main content

peeker 1987 02

  • PublicationApple Periodicals
  • Date1987-02-01
  • Pages72
  • Sourcepeeker-1987-02.pdf
← Magazines peeker 1987 02
/ 72
Source: Internet Archive — Aggregated Apple-era periodicals, 1981–2012.
Page 1
Loading…
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.

mp.ls