_ Nr.7785 Juli

DM 6,50, sfr 6,50,65 50, L115900, Hi 750°

FERNEN

MAGAZIN FÜR APPLE- Bi | &

AZE JSR | BR | 9n0D N = 56B04 FE ee A27 | | O or

E a | 5 JA | hear A26 \ | BEE Zu 3 SAAIF are A25 124 u EE 2Py Bi

j

\22

Fo ma BE ııı 6502 leic + EX rdstar und

\20

so Mimird-F -Festplatt el

$ kan be -EPROM

VIE Hüchig

PUBLIKATION

Interfaces für Computer mit Applebus + Interfaces für Computer mit Applebus + Interf:

AP 13 und AP 17 RAM-Karten zum Einsatz als Pseu- dodisk unter CP/M, USCD und APPLE-DOS. Speichergröße von 64 kByte bis 256 kByte. Bestell-Nr.: A 1013 a-b

A 1017 a-d

AP 14

Floppy-Controller für alle Anwen- dungsfälle. 10 Laufwerke können gleichzeitig angeschlossen werden. 4 x 8” DSDD, A x 5V4” DSDD und

zwei Apple-Standardlaufwerke. Maximal ca. 10MByte im Direktzu- griff.

Bestell-Nr.: A 1014

„ed“ jetzt 512 K-RAM

AP 20

INTEMEX mit 68 000 CPU und 128 k-RAM. Diese Karte macht aus Ihrem Rechner mit „Applebus” einen ech- ten 16 bit-Rechner. Eine Zusatzkarte (AP 26) ermöglicht einen Arbeitsspei- cher bis zu einem MByte und an Soft- ware gibt es einiges. Z.B. stehen drei Betriebssysteme und die wichtigsten Hochsprachen zur Verfügung. Bestell-Nr. A 1020

SU SRERRÄRHREN en SS ARE: REES $ x

ERRICHTET SEHRSERSESEÄUTURUENNRUH RE RAD S

AP 33

RAMDISK der neuen Generation. Für besonders speicherintensive Arbeiten ist der Ausbau in Stufen von 64 kByte bis 1MByte möglich. Bestell-Nr. A 1033

Re N or ss 5 ERS EEEETTER S SEÄERIERHTTEEÜHRÜHENEN ER ER ni RR ® SERRS SEEEEERTATÄTNTUHTNSRN SEE so = u SER x = nn So SERIEN N N RC TTRSIEN RR SE oe BR SERRHHÄRDÄRNE GSTEN x = S N x SE 3 RN ER 5 = NN 8 R R

R f} anne}

AP19

12-Kanal AD-DA-Wandler mit 12 bit Auflösung und 25 u sec Wandlungs- zeit. Eingangsspannung +10 V. Ein schneller Wandler für extrem schnelle Anwendungen. Bestell-Nr.: A 1019

EIODREIEOTNR

NEU! 8 MHz Takt

AP22

INTEMEX mit Z 80 B-CPU und 64 k-RAM. Wenn Sie einmal diese Karte in Aktion gesehen haben, werden Sie auch feststellen: „Geschwindigkeit ist keine Hexerei, man braucht nur die AP 22”. Mit dieser Karte wird Ihr APPLE II zum z.Z. schnellsten CP/M- Computer, und in Verbindung mit dem SPACE 84 erhalten Sie Compu- terleistung, die wirklich einmalig ist. Wir vermitteln gerne eine Vorführung. Bestell-Nr. A 1022

Das Interface-Buch von IBS, ein Buch für Alle, die Ihren APPLE II oder Kompatiblen optimalnutzen wollen. Detaillierte Schaltpläne, Bauteilelisten und Benutzungshinweise

N zu allen IBS-Interfaces finden Sie jetzt in einem Buch vereint. Ausführliche Abhandlun-

\ we” gen über Spezialschaltungen, über Anwendungsmöglichkeiten, über neue Software-

NND welten aber auch über die Grenzen des APPLE II-Systems bestimmen den Wert dieses Buches.

Für nur DM 8,00 erhalten Sie dieses Buch ab sofort bei Ihrem Computerfachhändler oder für DM 8,00 + DM 2,00 Versandkosten bei IBS COMPUTERVERTRIEB.

135 cCOMmrULETTLEecHI

Olper Straße 10 - 4800 Bielefeld 14 - Tel.: 0521/444032 - W. Germany 1011 Rose Marie Lane 16 - Stockton CA 95207 - Tel. 209/473 —- 7473 USA

Wenn Sie dieses Heft in Händen halten, verbringe ich gerade meinen Urlaub in südlichen Gefilden. Wie das so üblich ist, nehme ich mir auch dieses Mal wieder amerikanische Fachliteratur mit, um mich auf dem laufenden zu halten...

..beispielsweise über Pascal, denn ich er- warte natürlich, daß viele an unserem Pas- cal-Wettbewerb teilnehmen werden, der in diesem Heft ausgeschrieben wird. Beim letzten Peeker-Wettbewerb über Primzah- len hatten einige Schulklassen teilgenom- men, und ich würde mich freuen, wenn auch bei dem neuerlichen Preisausschrei- ben wieder einige Klassen ihren „Punkte- saldo“ einsenden würden. Leider mußte ich die Kürze des Pascal-Quellcodes in den „Punktesaldo“ des Wettbewerbs mit einbeziehen, um „unerlaubte Tricks” zu- mindest einzuschränken. Dies wird zur Folge haben, daß völlig „undidaktisch“ aussehende Listings erstellt werden, die nur entfernt an die ästhetische, übersichtli- che Strukturierung eines typischen Pas- cal-Quelltextes erinnern werden. Informa- tik-Lehrer mögen hier einmal ein Auge zudrücken.

editorial

Auch wenn für die eigentlichen Fachbei- träge des Peeker das von der Mehrzahl der Leser gewünschte hohe Niveau beibe- halten werden soll, wird mit diesem Heft eine Serie von meist 16seitigen, in sich geschlossenen Sonderartikeln beginnen, die auf Anfänger abgestimmt sind. Neben dem ersten Sonderteil „6502 leicht ge- macht“ in diesem Heft sind weitere Über- sichtsartikel über 68000, Z80, MBASIC, Pascal und andere Themen in Arbeit. Bei den großen Spezialserien (Mac-BASIC, ProDOS, Graf-quattro) ist eine Aufsplit- tung auf mehrere Hefte aus Platzgründen unvermeidlich. Ich glaube jedoch, daß ge- rade dem Anfänger ein vollständiger Son- derteil in der Form eines Mini-Buches mehr bringt als eine auf mehrere Hefte verteilte Serie. Trotzdem würde mich ger- ne Ihre Meinung hierzu interessieren.

LO sa

Ulrich Stiehl

Impressum

Peeker

Magazin für Apple-Computer 2. Jahrgang 1985

ISSN 0176-9200

© für den gesamten Inhalt einschließlich der Programme Dr. Alfred Hüthig Verlag, Heidelberg 1985

Verleger und Herausgeber: Dipl.-Kfm. Holger Hüthig Geschäftsführung Zeitschriften: Heinz Melcher

Chefredakteur:

Ulrich Stiehl (us) Tel. (06221) 489352 (Bitte nur in redaktionellen Angelegenheiten anrufen)

Anzeigenleitung:

Jürgen Maurer, Tel. (06221) 489218 z. Zt. gilt Anzeigenpreisliste Nr. 3 Vertriebsleitung:

Ruth Biller, Tel. (06221) 489280 Produktionsleitung: Gunter Sokollek Gestaltung: Rainer Schmitt

Titelbild: Creative Computer

Service, Mannheim

5 IMPRESSUM

HOBBY

Pyramid Pitty 5 Ein Reaktionsspiel von Michael Matzat

TECHNIK

Die AP33-Megawrap-RAM-Karte

8 Mit einem RAM-Disk-Driver für ProDOS von Ulrich Stiehl

Formatter 20 Ein universelles Formatierungsprogramm von Arne Schäpers

Bit Editor

29 Zeichensatz-EPROMs für die Videx-Karte von Joachim Klamt SONDERTEIL

33 6502 leicht gemacht von Ulrich Stiehl CP/M

57 Wordstar mit allen FX-80-Schriftarten von Dipl.-Ing. H. A. Rohrbacher PASCAL

62 Pascal-Preisausschreiben

KURZBERICHTE No Orchids for Miss Lisa

67 Lisa und die Folgen von Ulrich Stiehl

Verlag: Erscheinungsweise: 12 Hefte jährlich, Dr. Alfred Hüthig Verlag GmbH Im Weiher 10, Postfach 102869 6900 Heidelberg

Telefon (06221) 489-0

Telex 4-61727 hued d.

Jahresabonnement DM 72,-, einschließlich MwSt, im Inland portofrei. Einzelheft DM 6,50

Vertrieb Handel:

MZV - Moderner Zeitschriften Vertrieb GmbH Breslauer Str. 5, Postfach 1123,

8057 Eching b. München,

Tel. 089/3191067, Telex 0522 656

EEKER

MAGAZIN FÜR APPLE-COMPUTER

Erscheinungstag jeweils 1 Woche vor Monatsbeginn.

ASSEMBLER 69 Hex-Dez-Konvertierung für 32-Bit-Zahlen

von Harald Grumser

Vorlesestunde 71 Apple und SAM - ein hilfreiches Gespann von Dr. Jürgen B. Kehrel

73 LESERBRIEFE

TESTBERICHTE

MEGACORE

76 Festplatte mit 10 Megabytes getestet von Harald Grumser

77 Star Delta-10 und Grafstar-Interface

getestet von Karl-Walter Bott

78 INSERENTENVERZEICHNIS

SC:80042749 HI: aaa42749 WATER: 06093 L:7

ENDETE

Zahlungen: an den Dr. Alfred Hüthig Verlag GmbH, D-6900 Heidelberg 1: Postscheck- konten: BRD: Karlsruhe 485 45-753; Österreich: Wien 7555888; Schweiz: Basel 40-24417; Niederlande: Den Haag 145728;

Bankkonten: Landeszentralbank Heidel- berg 67 207 341; BLZ 67200000; Deutsche Bank Heidelberg 02165041; BLZ

672 70003; Bezirkssparkasse Heidelberg 20451, BLZ 67250020.

Italien: Mailand 47718; Belgien:

Brüssel 723026; Dänemark: Kopenhagen 34969; Norwegen: Oslo 994 24; Schweden: Stockholm 5477 76-5

Herstellung: Heidelberger Verlagsanstalt Printed in Germany

Pyramiıd Pitty

Ein Reaktionsspiel

von Michael Matzat

6 Peeker 7/85

Vorbemerkung

Für Liebhaber von Computerspielen brin- gen wir erstmals im Peeker ein umfangrei- ches und, wie wir meinen, erstaunlich pro- fessionelles Hires-Spiel. Erstaunlich des- halb, weil der Autor, Michael Matzat, ob- wohl er erst 19 Jahre alt ist, ein lupenrei- nes Assemblerprogramm geschaffen hat, das hinsichtlich Schnelligkeit, Vielfalt und Komfort den meist oberhalb der 100- Mark-Grenze angesiedelten, kommerziel- len Apple-Spielen kaum nachsteht. We- gen des Umfangs mehrere tausend Zei- len Quellcode ist es uns leider nicht möglich, das Programm abzudrucken. Es befindet sich als Objekt- und Quellcode auf der Peeker-Sammeldisk . us

Peeker 7/85

7.94 hobby 44

Spielidee

Peter Pause, oder auch einfach nur Pitt genannt, kommt als einfacher Tourist nach Ägypten, wo er, wie soll es auch anders sein, natürlich eine der Pyramiden be- sucht, um auf ihr ein kleines Picknick ein- zunehmen. Als er wieder am Fuße der Pyramide steht, bemerkt er, daß er seinen Picknickkorb auf der Pyramide verloren hat.

Seine Aufgabe ist es nun, die verlorenen Picknicksachen wieder einzusammeln. Er- schwerend kommt hinzu, daß die Pyrami- de schon sehr brüchig ist, man leicht stol- pern und von der Pyramide stürzen kann. Doch das ist noch nicht alles! Aus einfa- chen Rissen in den Stufen der Pyramide können, ohne daß es Pitt bemerkt, tiefe Spalten werden.

Spielablauf

Das gesamte Spielfeld enthält eine kleine und eine große Pyramide und besteht aus 22 Hires-Teilbildern. Um von einem Teil- bild in ein anderes zu gelangen, braucht man nur durch einen der 4 Bildschirmrän- der zu laufen. Sollte dies nicht möglich sein, so folgt in dieser Richtung kein wei- teres Teilbild mehr.

Der Computer spielt mit mehreren Geg- nern gegen Sie. Zunächst jeweils nur mit einem, aber in den höheren Leveln kön- nen auch bis zu drei Gegner gegen Sie antreten.

Ihr erster Gegner ist der Pharao. Er ist eigentlich ungefährlich, doch trotzdem sollte man es vermeiden, mit ihm auf der gleichen oder der nächst höheren Pyrami- denstufe zu stehen.

Der Falke des Pharaos ist Ihr nächster Gegner. Achten Sie darauf, daß er Sie nicht an den Beinen berührt, da Sie sonst stolpern könnten.

Die Wolke versucht Sie einzuhüllen und Ihnen somit den Sichtkontakt mit dem Bo- den zu nehmen.

Am meisten macht Ihnen allerdings die Hitze zu schaffen. Durch sie verdunstet Ihr Wasser, und je höher der Level, desto schneller verdunstet es. Ihren Wasserver- lust müssen Sie unbedingt auszugleichen versuchen. In den Löchern, die in fast jedem Teilbild enthalten sind, kann sich Wasser befinden. Oder auch nicht! Denn je höher der Level, desto seltener findet man gefüllte Wasserlöcher. Wenn ein Loch kein Wasser enthält, dann kann es sein, daß .... Aber dies soll hier nicht verra- ten werden.

Bewertung Kommen wir nun zur Bewertung. Für je- den wiedergefundenen Gegenstand gibt

es zwischen 1 und 1000 Punkte. Darüber hinaus erhalten Sie pro Liter gefundenen Wassers je einen Punkt und am Ende ei- nes Levels bekommen Sie pro Liter ver- bliebenen Wassers jeweils 100 Punkte. Diese Angaben sind natürlich wie immer ohne Gewähr!

Bedienung

Das Spiel wird mit

RUN PYRAMID.PITTY

gestartet. In diesem vorgeschalteten Start- programm können Sie dem eigentlichen Programm mitteilen, ob Sie über alle Cur- sor-Tasten verfügen oder nicht. Denn ge- spielt wird über Tastatur, wobei auf dem Apple Ile und Ilc die Cursor-Tasten und auf dem Apple Il Plus neben den Links- und Rechtspfeil-Tasten die Buchstaben A und Z die Hoch- und Tiefpfeiltasten erset- zen. Mit ESC kann das Spiel gestoppt und mit der Leertaste wieder gestartet werden. Wenn Sie die mitlaufende Melodie stört, so können Sie den Lautsprecher mit Ctrl-S abschalten, da Ctrl-S den Ton auf den Kassettenausgang legt.

Technisches

Das Spiel ist komplett in Assembler ge- schrieben und kann trotz seines geraumen Umfangs (ca. 27K) noch erweitert werden, beispielsweise mit einer Tabelle der 10 besten Spieler des Tages usw. Aus Grün- den der Geschwindigkeit, die ja bei Spie- len sehr wichtig ist, war es leider nicht möglich, die normalen Möglichkeiten des Apples zur Darstellung von Grafik, wie etwa die DRAW-, XDRAW- und HPLOT- Funktionen zu benutzen. Dies war auch der Grund, warum ich auf die in professio- nellen Spielen üblichen Blockshapes auch Sprites, Raster- oder Bitmustergrafi- ken genannt -—, deren großer Vorteil ihre schnelle Darstellungsgeschwindigkeit ist, zurückgegriffen habe. Das Programm ent- hält daher diverse Routinen zum Arbeiten mit Blockshapes, die man leicht zu einem ganzen Grafiksystem ausbauen könnte. Die daraus resultierende Verarbeitungsge- schwindigkeit hat es mir ermöglicht, die oben erwähnte Begleitmelodie einzubau- en, ohne daß sich dadurch die in solchen Fällen üblichen, ruckartigen Bewegungen einstellen.

Probieren Sie einmal aus, welchen Spiel- stand Sie bei Pyramid Pitty erreichen! Bis- her konnte ich, obwohl ich alle Kniffe und Tricks in diesem Spiel kenne, „nur“ bis zum Level 7 vorzudringen.

Die AP33-Megawarp- RAM-Karte

Mit einem RAM-Disk-Driver für ProDOS

von Ulrich Stiehl

Die neue RAM-Karte AP33 der Firma IBS in Bielefeld auch als Megawarp bezeich- net kann wahlweise mit 64-KBit- oder 256-KBit-RAM-Bausteinen bestückt wer- den. Am besten geht man gleich „in die vollen“ und bestellt die Karte mit den neueren Chips, denn man kann 4 ver- schiedene Bestückungsstufen wählen, so daß der Geldbeutel nicht allzu stark strapa- ziert wird:

Peeker 7/85

256K (ca. DM 1425,-)

512K (ca. DM 2160, -)

768K (ca. DM ??7?)

1024K (ca. DM 3625,-)

Ein einzelner 256-KBit-Chip oder IC (= Integrated Circuit) hat übrigens eine Spei- cherkapazität von 32K. Wenn von einem xyz-KBit-Chip oder xyz-K-IC die Rede ist, so teilen Sie xyz durch 8 und erhalten damit die Speicherkapazität in Kilobytes, also

256KBit : 8 = 32K, z.B. AP33

64KBit:8 = 8K, z.B. Ile

16KBit:8 = 2K, z.B. Il+

Die voll bestückte AP33 hat damit 32 256KBit-RAM-Bausteine (32 * 32 = 1024K) sowie weitere CMOS-RAMSs für den Slot-RAM-Bereich (s.u.).

Peeker 7/85

1. AP33-Softswitches

Die mir zu Testzwecken zur Verfügung gestellte Karte (s. Bild) war zur Hälfte bestückt (512K). Im Gegensatz zu den früheren Adressierungsverfahren (Ss. Peeker, Heft 1/1985, S. 18) hat man bei der AP33 neue Wege beschritten. Früher wurden größere RAM-Karten meistens in einen Adreßbereich der „unteren“ 64K „gemappt“, z.B. in den Bereich $DOO00- $FFFF. Dieses Konzept ließ man nunmehr fallen. Statt dessen gibt es jetzt ein 20-Bit- Adreßregister (20 Bits, weil 2 hoch 20 = 1.048.576 = 1M = maximale Speicherka- pazität), das eine lineare Adressierung von $000000 bis $OFFFFF (= O bis 1.048.576) erlaubt. Die 20 Bits sind auf 2 volle 8-Bit- Register sowie die eine Hälfte (= 4 Bits) eines weiteren 8-Bit-Registers verteilt, dessen andere Hälfte der Paritätsprüfung dient. Daneben gibt es noch ein 8-Bit- Datenregister, das jeweils das zu übertra- gende Byte aufnimmt.

Poke-Beispiel: Nehmen wir an, wir wollen das Byte $CC in die Speicherstelle $00AABB (HHMMLL) der AP33 poken. Hierzu poken wir zunächst $00 in das High-Byte, $AA in das Middie-Byte und $BB in das Low-Byte des 20-Bit-Adreßre- gister. Nunmehr poken wir $CC in das 8- Bit-Datenregister, womit $CC in $00AABB übertragen wird.

Peek-Beispiel: Nehmen wir umgekehrt an, wir wollen später wieder das Byte $CC aus der Speicherstelle $00AABB der AP33 peeken. Hierzu poken wir zunächst wieder die Adresse in das 20-Bit-Adreßre- gister und peeken dann den Wert $CC aus dem 8-Bit-Datenregister.

Paritätsprüfung: In Wirklichkeit ist es et- was komplizierter. Erstens muß man zwi- schen der alten 64K-Chip- und der neuen 256K-Chip-Karte unterscheiden. Zweitens sollte man von der bei der AP33 imple- mentierten Möglichkeit Gebrauch machen, die Datenbytes auf Parität zu überprüfen. Es wird das Verfahren der „Even parity“ (= geraden Parität) verwendet. Gerade Parität besagt bei einem 8-Bit-Byte, z.B. %10110110, folgendes: Man zählt die Einserbits zusammen, hier 5 Einserbits, und prüft, ob sich eine gerade oder eine ungerade Zahl ergibt. Da 5 eine ungerade Zahl ist, wird das Paritätsbit auf 1 gesetzt. Bei % 11110000 würde sich die Summe 4 ergeben, also eine gerade Zahl, so daß hier das Paritätsbit auf O gesetzt wird. So- mit folgt, daß bei gerader Parität die Sum- me der Einserbits des 8-Bit-Bytes und des Paritätsbits zusammen immer eine gerade Zahl ergeben. Wenn man also bei der AP

technik 4.4

20 unter Verwendung der Paritätsprüfung beispielsweise das Byte % 11000010 von der Karte liest und das Paritätsbit ist nicht auf 1 gesetzt, so liegt ein Übertragungs- fehler vor.

2. AP33 und ProDOS

Die AP33 ist wahrscheinlich die erste gro- Be RAM-Karte, für die ein RAM-Disk- Driver für ProDOS entwickelt wurde. Da- neben liegen die bereits bekannten RAM- Disk-Driver für DOS 3.3, CP/M und Pascal 1.1 vor, auf die wir aus Platzgründen hier nicht näher eingehen werden. Der Pro- DOS-RAM-Disk-Driver wurde im April die- ses Jahres von Volker Baumgarte entwik- kelt und mir freundlicherweise von der Fir- ma IBS als Quellcode zur Prüfung zuge- sandt. Leider springen einem bei Fremd- programmen die Fehler leichter ins Auge als bei eigenen Programmen. Tatsächlich entdeckte ich prompt einen „Schußlig- keitsfehler“, der zur Folge hatte, daß die Blocks 3 und 4 des Volume-Directory nicht mit den korrekten Vorwärts- und Rück- wärtszeigern versehen wurden. Dies ist inzwischen behoben. Sollte ein Leser ei- nen der ersten Prototypen der Karte zufäl- lig noch mit dem alten ProDOS-Driver er- halten haben, so möge er bei der AP33 bitte folgenden Test durchführen:

10 FORX = 1 T051:

20 PRINT CHR$(4) “SAVE XXX "X: NEXT Sollte hierbei ein I/O-Fehler auftreten, so fordern Sie bitte die neue Driver-Diskette an.

Der IBS-ProDOS-Driver (namens INSTAL oder MEGAWARP) läuft unter allen Pro- DOS-Versionen, was keineswegs eine Selbstverständlichkeit ist. Der berüchtigte Test für die Überprüfung der Blockober- grenze (maximal 280 Blocks) braucht übri- gens nicht gepatcht zu werden, weil sich dieser Test am Anfang des Disk-Il-Drivers befindet, der bei einem RAM-Disk-Driver gar nicht zum Tragen kommt. Um den MEGAWARFP-Driver zu installieren, bootet man zunächst eine beliebige ProDOS- Version von der ProDOS-Systemdiskette und startet dann mit BRUN INSTAL den Driver von der IBS-Diskette. Das MEGA- WARP-Programm

(1) fragt nach der Nummer n des Slots, in dem sich die AP33 befindet,

(2) ermittelt die Bestückung und ob 64- KBit- oder 256-KBit-Chips vorliegen,

(3) löscht die gesamte RAM-Karte (LDA #0 STA $000000 bis $OHMMLL),

(4) installiert den Driver ab $Cs00 und $C800 und

(5) legt das Volume-Directory an.

3. AP33 und Accelerator Ile

Wenn die AP33 beispielsweise im Slot 4 steckt - jeder Slot außer Slot O wäre zuläs- sig so beginnt der ProDOS-RAM-Disk- Driver bei $C400 mit einem JMP nach

8 Bit Daten

Cön3

GAWARP.NEU keine Geschwindigkeits- vorteile. Ferner sei darauf hingewiesen, daß unsere Driver nur für die 256-KBit-ICs gedacht sind und daß auf den Initialisie- rungsteil verzichtet wurde, der bereits in INSTAL (= „MEGAWARP.ALT“) enthal-

Clear ey

1 I A19 A17 A18 | A16

a

n = Slot-Nr. +8

$C800, denn neben dem eigentlichen RAM der AP33 verfügt man bei dieser Karte über 256 Bytes Slot-RAM ($Cs00- $CsFF) sowie über I/O-RAM im Bereich $C800-$CFFE, der mit BIT $CFFF lese/ schreibfähig gemacht wird.

Die Accelerator Ile, die im Peeker, Heft 1/ 1984, besprochen wurde, taktet jedoch von 3,5 auf 1 MHz herunter, wenn Inter- face-Adressen ($C000-$CFFF) angespro- chen werden. Deshalb sollte man bei Ver- wendung der Accelerator Ile in Verbin- dung mit der AP33 den Driver in einem Nicht-Interface-Bereich ansiedeln.

Unser Programm „MEGAWARP.NEU“ in den Versionen MEGAWARP.REL (reloka- tiv) und MEGAWARP.99YOO (nicht reloka- tiv) dient diesem Zweck und führt zu einer Verdopplung der Datenübertragungsrate („2 MHz“) gegenüber dem ursprüngli- chen IBS-Driver („MEGAWARP.ALT). Die „2 MHz“ erklären sich dadurch, daß etwa die Hälfte der Driver-Befehle im schnellen Accelerator-RAM mit ca. 3,32 MHz ausgeführt werden, während beim eigentlichen AP33-Zugriff auf 1 MHz her- untergetaktet wird. Man beachte, daß un- sere Driver nur dann sinnvoll sind, wenn man neben der AP33 die Accelerator Ile besitzt, denn ohne letztere Karte hat ME-

10

ten ist. Man starte also erst MEGAWARP. ALT (mit BRUN INSTAL) und dann MEGA- WARP.NEU (mit BRUN MEGAWARP.REL oder BRUN MEGAWARP.9900). Beide Module befinden sich auf der Peeker- Sammeldisk, doch ist aus Platzgründen nur MEGAWARP.9900 gelistet. Wenn die AP33 nicht im Slot 4 steckt, muß man den Quellcode entsprechend abändern (La- bels SLOT4 und SLOTC4)

4. Geschwindigkeitstests

Im einzelnen wurden folgende Geschwin- digkeitstests durchgeführt:

a) MEGAWARP.ALT mit/ohne Accelerator b) MEGAWARP.NEU mit/ohne Accele- rator

c) Apple-Ile-64K-Karte mit ProDOS-RAM- Disk-Driver mit/ohne Accelerator

Bei der 64K-Karte hängt im Gegensatz zur AP33 die Datenübertragungsrate davon ab, welche Bereiche der 64K-Karte beim RAM-Disk-Zugriff tangiert werden. Näheres über die Testergebnisse kann man den Listings entnehmen.

„High-Level“-Test Dieser Test sollte den BASIC.SYSTEM- RAM-Disk-Zugriff mit BSAVE und BLOAD

messen. Wenn man von den Seek-Befeh- len sowie den Directory- und Index-Block- Zugriffen absieht, wurde als Grobwert 1M übertragen. MEGAWARP.NEU ist hier ge- nauso schnell wie MEGAWARP.ALT, wenn keine Accelerator eingesetzt wird.

LL Schreiben

Unter Verwendung der Accelerator ist die Datenübertragungsrate jedoch beachtlich (20.7K/s bei MEGAWARP.ALT ohne AC- CEL gegenüber 37.9K/s bei MEGAWARRP. NEU mit ACCEL). Wie ich dem alten IBS-MEGAWARP- Driver entnehmen konnte, wurde der Seek- bzw. Status-Befehl durch „LDA COMMAND LSR BCC WRITE“ wie ein Write-Befehl behandelt. Abgesehen da- von, daß dies „ins Auge gehen” kann, wird unnötige Zeit vertrödelt. Der nachfol- gende Spezialtest mag dies verdeutlichen: 10N = 100 20 PRINT CHR$(4) “RENAME/MEGAWARP,/M" 30 PRINT CHR$(4) “CREATE/M/D,TDIR“ 40 PRINT CHR$(4) “PREFIX/M/D“ 5SOFORX=1TON: 60 PRINT CHR$(4) “SAVE X"X: NEXT /OFORX=1TON 80 PRINT CHR$(4) “DELETE X“X: NEXT Ohne Accelerator benötigt MEGAWARP. ALT hierfür 67,5s im Gegensatz zu ME- GAWARP.NEU mit nur 65s. Die Differenz von 2,5s ist auf den Seek- bzw. Status- Befehl zurückzuführen.

„Low-Level“-Test Dieser Test sollte den MLI-RAM-Disk-Zu- griff mit den Blockread- und Blockwrite-

Peeker 7/85

& Ablage

Bearbeiten Große INJIET)

L.

4

Ce E -

dr i

Die Qualität kommerzieller Arcade- spiele läßt sich mit APPLESOFT BASIC alleine nicht erreichen. Jef- frey Stanton führt in die Eigenarten der hochauflösenden Apple-Grafik ein und präsentiert schließlich eine Reihe extrem schneller Assembler- Routinen, mit denen Sie viele Effek- te bekannter Spiele selbst program- mieren können. Gute BASIC- Kenntnisse werden vorausgesetzt,

|

a

aundahnnk

Bismarckstr. 67, D- 1000 Berlin 12

—H

/

nz

Pandabooks!

Apple II Raster Grafik Jeffrey Stanton

u

7

(030) 342 88 00

Die beiden Autoren haben zusam- men mehr als 50 Jahre Amateur- funk-Erfahrung und präsentieren hier mehr als 20 BASIC- Programme, die jeden Funkamateur interessieren: TH-KENNER, DAMMERUNGSLINIE ‚DX- RECHNER ‚DOPPEL-FAHN- DER, NACHWEISSCHREIBER, ALLZWECK-CONTEST-LOG- GER, FIELD-DAY-LOGGER, WETTBEWERB-LOGGER u.v.a.m. Das Buch enthält die kom- De Listings für Apple II und 64.

3-89058-027-0 ca.256S. DM 48,-- komplett mit Disk DM 89,--

mm m,

Zeichensatz Stil

GILLEILTAGET

Te 2m

a nad

Gratis! ‚AppleQuick

Das Apple Il-Brevier fur haufig gebrauchte Adressen und Befehle! 64 Seiten uber Apple- soft, D0S, Pascal, CP/M. Gleich anfordern!

| BASIC-Pro- N ı gramme fur

Funkamateure Overbeck

7

nn”

eine Einführung

Handbuch

Worth/Lechner

in Assembler- Programmierung wird gegeben.

3-89058-006-8 299 Seiten DM 49,-- komplett mit Disk DM 89,--

m ——m nm,

Apple ProDOS |

| ı

Don Worth und Peter Lechner sind die Autoren von ‘“‘Beneath Apple DOS‘“‘, der Bibel aller DOS 3.3- Benutzer. In ihrem neuen Buch ha- ben sie sich ProDOS vorgenommen und mit der ihnen eigenen Gründ- lichkeit zerlegt. Ausführliche Be- schreibung der Arbeitsweise, der Dateitypen, des “MLI‘“ und des “BASIC SYSTEM“. Das Standard- werk für jeden ProDOS-Anwender.

3-89058-036-X ca. 250S. DM 46,--

Das Assembler-Lehrbuch für BASIC-Kenner. Roger Wagner, der Autor vieler be- kannter Software-Pakete, schrieb eine monatliche Kolumne über Assembler-Programmierung in der Apple-Zeitschrift SOFTALK. Der vorliegende Band faßt diese Reihe, korrigiert und erweitert, zu- sammen: Eine stufenweise Einfüh- rung in die Befehle und Strukturen der 6502-Assemblersprache, mit vie- len Beispielen von der einfachen Tongenerierung bis zum Disketten- zugriff. 3-89058-003-3 277 Seiten DM 48,-- komplett mit Disk DM 89,--

| Apple II

Assembler- Programmierung)! Roger Wagner

| |

Peeker 7/85

Visible Computer Charles Anderson

DEE LEER

Ein Simulationsprogramm, das Sie in das Innere des 6502 Mikroprozes- sors führt. Sie sehen auf dem Bild- schirm, wie die einzelnen Instruktio- nen in Zeitlupe ausgeführt werden, wie sich die Register und die Flags verändern. Ein unverzichtbares Hilfsmittel beim Erlernen der Assembler-Programmierung, da- nach ein wertvolles Werkzeug beim Testen Ihrer eigenen Programme. Komplett mit einem 6502 Editor/- Assembler, deutschem Handbuch (150 Seiten) und über 30 Beispiel- programmen.

3-89058-019-X DM 129,--

|

| Apple Il | Schaltplane || Winston D Gavler |

IE

N u

Endlich anspruchsvolle Apple- Grafik für BASIC-Programmierer.

Mikrocomputer Grafik

Programme, die nen Konzepte illustrieren.

lation von Grafiken

mationstechnik

3-89058-000-9 292 Seiten DM 49,-- komplett mit Disk DM 89,--

Apple Pascal Grafik

Tom Swan

beschreibt ‘Hidden Line‘‘- und “Hidden Surface‘‘-Techniken, Skalierung, Rotation und Trans-

bietet eine Einführung in die Ani-

|

\

Eine detaillierte Beschreibung der Apple II und Apple IIplus Schaltun- gen. Wenn Sie Ihren Apple selbst re- parieren, Interface-Karten oder Schaltungserweiterungen entwerfen oder einfach nur besser über das In- nenleben Ihres Apple Bescheid wis- sen wollen - dieses Buch bietet Ihnen

eine Fülle an Informationen, Schalt-

pläne und Zeitdiagramme, Theorie und praktische Tips.

3-89058-012-2 215S.A4 DM64,-

enthält fast 80 lauffertige BASIC- die beschriebe-

Mikrocomputer | Grafik Roy E. Myers

22 Pascal-Programme, mit denen Sie die Grafik-Möglichkeiten Ihres Apple voll ausschöpfen: “‘Designer‘‘ ermöglicht es Ihnen, ei- gene Zeichensätze zu entwerfen. ‘‘Gredit‘‘ unterstützt Sie beim Ent- werfen komplexer Bildschirm- Grafiken

““Printfoto‘‘ bringt Ihre Entwürfe aufs Papier.

Darüberhinaus bietet das Buch eine Fülle fertiger Prozeduren, die Sie zeitsparend in Ihre eigenen Pro- gramme einbauen können

3-89058-009-2 280 Seiten DM 49,-- komplett mit Diskette DM 89,--

In allen Buchhandlungen und Computershops oder direkt von: Pandabooks, Bismarckstr. 67, 1000 Berlin 12, (030) 342 88 00

EEE EM Bestellccoupon BRBRBBBEBEBEBEEBEBBEEE

= Name: = Anschrift:

O V-Scheck liegt bei

(spesenfreie Lieferung)

O per Nachnahme (zzgl. Versandspesen)

£ [@] 5 X N = z Fi c o ie r- I Yv 3 £ J 10] * N & ) e) 2 ® > u u D < [e} J :O e < ou £ £ ® . u :O 232

SH

BEER

11

Routinen messen. Es wurde wie beim „High-Level“-Test iM übertragen (s. SPEEDTEST). Während ohne Accelerator der Geschwindigkeitsunterschied zwi- schen MEGAWARP.ALT und MEGA- WARP.NEU praktisch gleich null ist, steigt mit der Accelerator-Karte die Übertra- gungsrate überproportional an. Beim Blockread wurden „nur“ 81.9K/s übertra- gen, während beim Blockwrite satte 128K/ s erzielt werden konnten. Damit dürfte die AP33 in Verbindung mit der Accelerator lle schätzungsweise zehnmal schneller als die Profile-Festplatte sein, bei der eine Accelerator praktisch wirkungslos ist. (Es wäre nett, wenn ein Peeker-Leser, der eine Profile besitzt, uns seine Meßergeb- nisse anhand des SPEEDTEST mitteilte.)

5. Fazit

Die AP33 ist eine RAM-Karte der neuen Generation. Mit 1024K hat man die dop- pelte Kapazität des „Fat Mac“ (= 512K- Macintosh), wobei die Mac-512K-Spei- chererweiterung (Listenpreis!) etwa soviel wie eine 1024K-AP33 kostet. Nimmt man noch die Accelerator Ile hinzu, so verfügt man über traumhafte Übertragungsraten. Sollte es zufällig einen 68000-Program- mierer geben, der einen 512K-Mac be- ‚sitzt, so wird er gebeten, uns die Ergebnis- se des entsprechenden Tests mitzuteilen.

RAM-Disk-Driver für ProDOS

Allgemeine Richtlinien

Nachfolgend soll unabhängig von der AP33 und der 64K-Karte, für die bereits RAM-Disk-Driver vorliegen, kurz charak- terisiert werden, was im einzelnen beach- tet werden muß, wenn man einen RAM- Disk-Driver für eine neue RAM-Karte im- plementieren will.

Welche Speicherkapazität?

Eine RAM-Karte für ProDOS kann theore- tisch eine Speicherkapazität von 32M ha- ben. 64K dürfte jedoch die praktische Un- tergrenze und 1M die praktische Ober- grenze sein.

Welcher Slot und Drive?

Sinnvollerweise wird man die RAM-Disk mit demselben Slot s ansprechen (CATA- LOG, Ss), in dem die RAM-Karte steckt, obwohl dies nicht unbedingt erforderlich ist. In der PRODOS Global Page befinden

12

u EEE

MEGAWARP-Geschwindigkeitstest

MEGAWARP.ALT = Driver der Firma IBS, Bielefeld

MEGAWARP.NEU = unsere Version für Accelerator a) MEGAWARP.REL (relokativ nicht selbstmodifizierend) b) MEGAWARP.990® (nicht relokativ selbstmodifizierend)

1. ”High-Level”-Test 1.1. BSAVE-BLOAD-Testprogramm

16 * 32768 « 2 für BSAVE/BLOAD = 1.948.576 = 1 Megabyte. Grobwert ohne Berücksichtigung der Directory- und Index-Blockzugriffe.

FOR X = 1 16: PRINT CHR$(4) "BSAVE XXX, A$1000,L$8000": NEXT 20 FOR X = 1 TO 16: PRINT CHR$(4) "BLOAD XXX": NEXT 30 PRINT CHR$(7)

1.2. Testwerte in Kilobytes/Sekunde MEGAWARP.ALT MEGAWARP . NEU 64K-Karte (1) 64K-Karte (2)

Ohne ACCEL 20.7 20.7 26.2 21.5 Mit ACCEL 25.9 37.9 49.9 35.5

2. ”Low-Level”-Test

2.1. BLOCK-READ/WRITE-Testprogramm

BLOAD SPEEDTEST

CALL -151

303: 80 (für Read-Test)

300G

303: 81 (für Write-Test; zerstört RAM-Disk-Inhalt)

309G

Der Speedtest kann auch für Festplatten und Disk-II-Drives verwendet werden. Zuvor Parameter (Unit usw.) entsprechend ändern.

ORG $P39® SPEEDTEST 32 mal 64 Blocks lesen

oder schreiben = 2948 Blocks = 1M = 1.948.576 Bytes = 2120

ovoısvVukPhuvmdıH- “*RAKKKAKKH

0300: AcC BA 03 19 JMP START 0303: 80 ll RDWR HEX ;Read (81=Write) 0304: AP 12 UNIT HEX 49 ;S4,D1 (69=S6,D1l) 0305: 20 13 MAL DFB 32 ‚Wieviel mal? 306: 65 99 14 ERSTER DA 191 ‚Erster Block 0308: AA BB 15 LETZTER DA 164 :Letzter Block 030A: AD 03 03 16 START LDA RDWR 030D: 8D 2B 03 17 STA COMMAND 0310: AD BA 03 18 LDA UNIT 0313: 8D 50 03 19 STA UNITNO 0316: AD 05 03 2 LDA MAL 0319: 8D 55 03 21 STA MALCNT Ö31lC: AD d6 3 22 LOOPI LDA ERSTER ß31F: 8D 53 03 23 STA BLOCKL 0322: AD 07 03 24 LDA ERSTER+1 0325: 8D 54 03 25 STA BLOCKH 0328: 20 00 BF 26 LOOP2 JSR $BF®® ‚MLI 032B: 89 27 COMMAND HEX 032C: AF 93 28 DA COUNT ß32E: BB 26 29 BCS ERROR 0330: EE 53 03 39 INC BLOCKL 0333: DB 93 31 BNE SUBTRACT 0335: EE 54 03 32 INC BLOCKH 0338: 38 33 _SUBTRACT SEC 0339: AD 08 03 34 LDA LETZTER 033C: ED 53 03 35 SBC BLOCKL 033F: AD 09 B3 36 LDA LETZTER+1 0342: ED 54 03 37 SBC BLOCKH 0345: El 38 BCS LOOP2 0347: CE 55 03 39 DEC MALCNT 034A: DP 40 BNE LOOP1 034C: AC 3A FF 41 JMP $FF3A ‚BELL B34AF: 93 42 COUNT HEX 93 0350: 49 43 UNITNO HEX :S4,Dl 0351: 90 49 44 PUFFER DA $4909 ;-$AlFF 0353: PP 45 BLOCKL HEX 66 0354: BB 46 BLOCKH HEX 699 47 * 0355: 99 48 MALCNT HEX 99 0356: AC DA FD 49 ERROR JMP $FDDA ; PRBYTE 89 Bytes

Peeker 7/85

Wir vertreten unter anderem folgende Firmen in Deutschland:

PASSPORT @Orange Micro DESIGNS ınc inc.

)THUNDERWARE INC. (ap Moala

Technologies Corporation

R Mountain Computer Inc.

uud

h

SUDLOGIC

Communications Corp.

Tits

Ile INC.

E

E California Computer Systems

3] Micr. MICROWARE

Händleranfragen erwünscht.

panday@ft Dr.-Ing. Eden

Uhlandstraße 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr Telefon: 0 30/31 04 23 - Telex: 185 859

o) kan ge Druckerinterfaces für Apple II+/e/ Printer Interface c/IIl Interfaces auf dem neuesten Stand der Technik. Kompatibel mit allen gängigen Druckern wie: APPLE, EPSON, STAR, NEC, OKIDATA usw. Passende Treiber-

software wird über Dip-Switch ausgewählt.

Grappler “» Grafikfähiges Druckerinterface Printer interface das keine Wünsche mehr offen läßt. Über 2 Dutzend Kommandos ermöglichen die volle Kontrolle

über alle Möglichkeiten Ihres \ Druckers. Jetzt auch mit

lle Features: Double Hires Grafics und 80 Zeichen Dump mittels Druckerpuffer nachrüstbar über Bufferboard.

Grapp « Besitzt alle Vorzüge des Grappler +, hat aber zusätzlich einen integrier-

ten 16 K Druckpuffer, der auf 32 oder 64. K aufrüstbar ist.

SERIAL Serielles Druckerinterface Gräppler speziell für den Apple Image- Printer Interface writer. Seriell-nach-Parallel-Wandler für OTLINK den Ilc im Kabel integriert. wie Hotlink, jedoch zusätzlich

[NRAPPLER C Imagewriter Emulation und Grafik

Software-Diskette.

panday®frt Dr.-Ing. Eden

Uhlandstraße 195 : 1000 Berlin 12 : Mo-Fr 10-18 Uhr, Sa 10-13 Uhr Telefon: 0 30/31 04 23 : Telex: 185859

Peeker 7/85

ThunderScan."

Ein neues optisches Lesegerät, das beliebige Vorlagen in MacPaint überträgt: Fotos, Zeich- nungen, Landkarten und Illustrationen werden in den Apple-Imagewriter eingespannt und von einem Lesekopf, der das Farbband ersetzt, abgetastet.

& File Edit Scanner Tools

ThunderScan’“

Light _Intensity_Gauge

EL 70

Contrast = 110%

SE

Brightness = +10

(Pause) m

Lines to go: 186

® 32 Graustufen 30 Punkte/cm Auflösung ® Übertragungsmaßstab 25% - ADO % ® Vorlagen bis 20x25 cm ze Nachträgliche Veränderung des Kontrasts

und der Helligkeit. Thunder Sean

Panday®ftı....:s--

Uhlandstraße 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr Telefon: 0 30/31 04 23 - Telex: 185 859

wir haben die und die Software... hingehen

Be > _ TRRRRERBERE —__——__[[[_UUUUU_UUUUUU 227 GER BF RRRRRRRRSSSESSRBRRRRRRRHSRENE >” - Do 7 > - ‚=> > $ - V VRODRESRRRNRBNESBEEESEEEEEERE

ALLES FÜR DEN APPLE Il+, Ile, IIc UND MACINTOSH

een ‚Ing. Eder

UHLANDSTR. 195 - D-11000 BERLIN 12 TEL.(O3O) 310 423 -TELEX: 185859 Autorisierter daroia Fachhändler MICROSOFT. Distributor

13

sich ab $BF10-$BFZ2F die Einsprungadres- sen für die diversen Volume-Driver. Das Installierungsprogramm muß dort den Vektor für den entsprechenden Slot und

Drive eintragen, die Device-Anzahl ($BF31) erhöhen und die Device-Liste ab $BF32 um das Device-Bit-Muster für die RAM-Disk erweitern (s. „ProDOS für Auf- steiger“, Bd. 1, S. 51ff.). Eine RAM-Disk muß mit einem und nur einem Drive ange- sprochen werden. Befände sich beispiels- weise die RAM-Karte in Slot 4, so könnte man zwar bei $BF18 für Drive 1 und bei $BF28 für Drive 2 quasi einen Doppelein- trag vornehmen, doch würde dann das MLI u.U. „durchdrehen“, weil derselbe Volume-Name für 2 Units gelten würde.

Was bedeutet Formatierung?

Das Installierungsprogramm sollte die For- matierung als gesonderte Option zulas- sen, so daß man den Driver nach verse- hentlichem Neubooten wieder anschlie- Ben kann, ohne daß der Inhalt der RAM- Disk zerstört wird. Der 64K-RAM-Disk- Driver der Firma Apple verfügt leider nicht über diese Option. Die eigentliche „For- matierung“ sollte zunächst alle Blocks (= 512-Byte-Bereiche der RAM-Karte) oder zumindest die Blocks 2-6 auf null setzen und dann die Blocks 2-6 entsprechend der Kapazität der RAM-Karte initialisieren. Blocks 2-5 enthalten das Volume-Directo- ry. Das Volume-Directory muß 4 Blocks umfassen, weil sonst das MLI oder das BASIC.SYSTEM „durchdrehen“ kann. Auch dies ist von der Firma Apple bei ihrem 64K-Karte-Driver nicht beachtet worden, so daß sich einige Anwenderpro- gramme wie Mailmerger (s. Peeker, Heft 4/1985, S. 73) mit /O-Error oder End-of- Data „verabschieden“. Ferner muß der Volume-Bit-Map-Block 6 bei RAM-Kar- ten üblicherweise nur ein einziger Block angelegt werden. (Ein Beispiel für die An- lage der Blocks 2-5 findet sich in „ProDOS für Aufsteiger“, Bd. 2, Kap. 3.5.)

Wohin mit dem Driver?

Die Firma Apple hat für sich die gesamte 64K-Karte „gepachtet“ und einen Teil des eigenen 64K-Karte-Drivers dort unterge- bracht, der je nach ProDOS-Version ein- mal hier und einmal dort liegt. Fremdent- wickler haben es hier schwerer, da der Driver nur entweder in dem Bereich unter- halb vom BASIC.SYSTEM, d.h. unterhalb von $9A00 (vgl. MEGAWARP.NEU), und/ oder im Interface-Bereich ($Cs00-$CsFF sowie $C800-$C8FE, vgl. MEGAWARP. ALT) und/oder auf der RAM-Karte selbst liegen kann (vgl. 64K-Karte-Driver). Wenn

14

2.2. Testwerte in Kilobytes/Sekunde MEGAWARP. ALT

MEGAWARP .. NEU

Read Write Read Write Ohne ACCEL 38.2 53.6 38.3 53.6 Mit ACCEL 40.1 56.6 81.9 128.0

3. MEGAWARP.998® und MEGAWARP.REL für Accelerator-Besitzer

MEGAWARP.99ß® und MEGAWARP.REL sind funktionsgleich. MEGAWARP.9999 ist jedoch nicht relokativ und etwas schneller ("getunt").

l. AP33 (256-KBit-Chips) in Slot 4 installieren 2. ProDOS (beliebige Version) booten

3. BRUN INSTAL (von mitgelieferter IBS-Diskette) 4. BRUN MEGAWARP.99ß® oder BRUN MEGAWARP.REL

Nunmehr hat man eine erheblich gesteigerte Übertragungsrate. Für andere Slots (als Slot 4) Quellcode entsprechend ändern.

MEGAWARP.REL ist aus Platzgründen nicht gelistet.

l ORG $1FBA 2 * 3 * MEGAWARP. 999 4 ———— 5 6 * "Speed-Version" von MEGAWARP.NEU 7 * Nicht relokativ wegen der Label 8 * WRPAGEl und RDPAGE2, deren 9 * Adressen gepokt werden. 19 * Slot-Adresse (hier Slot 4) 11 * modifizierbar. 12 * 13 SLOT4 EQU $49 ‚4x*16 14 SLOTC4A EQU $C499 15 E 16 * Move-Routine IT 18 = 19 GETBUFR EQU $BEF5 20 SLDR EQU $BF19 21 COUT EQU $FDED 22 * 23 * 1 Page über Getbuffer-Routine anfordern 24 * 1FBA: AY9 @l 25 LDA #1 1FBC: 28 F5 BE 26 JSR GETBUFR 1FBF: 24 27 BCS ERROR 1FC1: C9 99 28 CMP #$99 1FC3: 29 29 BNE ERROR 30 * 31 * Driver nach $99ß® oder tiefere Page moven 32 * IFC5: 99 33 LDY #9 1FC7: BY BB 28 34 MOVE LDA $2009,Y ‚fest! 1IFCA: 99 00 99 35 STA $990®,Y ‚fest! IFCD: C8 36 INY 1FCE: F7 37 BNE MOVE 38 * 39 x Slot-Drive-Tabelle nach $C4ß® absuchen Ad x 1IFDß: B9 10 BF 41 SLDR1 LDA SLDR,Y 1IFD3: AA 42 TAX ;X=LL 1FD4: C8 43 INY 1FD5: B9 BF 44 LDA SLDR,Y ;‚ A=HH 1FD8: BB 45 CPX #$09 ;LL=ß9? IFDA: 94 46 BNE SLDR2 1FDC: C9 C4 47 CMP #>SLOTC4 IFDE: BA 48 BEQ SLDR3 1FEß: C8 49 SLDR2 INY lFEl: 19 59 CPY #$19 lFE3: EB 51 BNE SLDR1 1FES: AY 87 52 ERROR LDA #$87 ;Bell 1FE7: 4C ED FD 53 JMP COUT 54 * 55 * GETBUFR-HIMEM in SLDR eintragen 56 . 1FEA: A9 99 57 SLDR3 LDA +#$99 ;$9999 lFEC: 99 18 BF 58 STA SLDR,Y lFEF: 88 59 DEY IFF®: A9 99 6% LDA #$99 00 IFF2: 99 18 BF 61 STA SLDR,Y 62 * 63 + In System-Bit-Map die Page $99 64 x als belegt markieren 65 » IFF5: A9 7F 66 LDA #%@1111111 1FF7: 8D 6B BF 67 STA $BF6B ;$9809-$9FFF 68 *

ccp datentaechnik

FORTH-SYSTEME

FORTH ist eine schnelle Programmiersprache, sie ermöglicht Programmtransfer zwischen APPLE und anderen Rechnern.

640 KByte-Drives für den Apple //c!!

@ 5'/4- od. 31/-Zoll-Format (Teac FD55/35-F)

@ FD55-F umschaltbar auf 35/40 Track

® Anschluß an die externe Laufwerkbuchse

@ Durch Einbauplatine (kein Löten) 640 KByte im Direktzugriff

@ Einfache Anpassung für DOS 3.3, UCSD-Pascal und PRODOS durch menügeführten Patch

© Anpassung von CP/M in Verbindung mit einer Z 80-Zusatzplatine in Vorbereitung

® anschlußfertig im Gehäuse

Festplatten für Apple Il (//e)

@ 51/4 Zoll-Format (Slimline)

@ Booten direkt von der nu. in DOS 3.3, UCSD-Pascal, PRODOS und CP/M 2.2 / 3.0

@ Gemischtbetr. mit 35/40/80/160 Track-Drives

@ Copy- und Install-Programme im Lieferumfang

@ Umfangreiches Manual

®@ z. B. 12 MB form. incl. Netzteil u. Contr., anschlußfertig an Ihren Apple DM 3835,—

640 KByte-Drives für Apple Il (//e)

@ 5'/4- od. 31/2-Zoll-Format (Teac FD55/35-F)

@ FD55-F umschaltbar auf 40 Track (Apple kompatigel)

@ Installationssoftware für DOS 3.3, UCSD-Pascal, CP/M 2.2, CP/M 2.23 (60K), PRODOS, AP22, ALS CP/M+

@ Umfangreiches Handbuch

® Anschlußfertige Auslieferung incl. Contr. und 2 Drives

@ Diskstation 55ll (2 Teac FD55-F, 1.22MB) . . . DM 1498,—

@ Diskstation 3511 (2 Teac FD35-F, 1.22MB) . . . DM 1580,—

Alles für Ihren Apple Info bei: ccp-datentechnik Herderstraße 12 2000 Hamburg 76

gm MICROMINT

LLTREFFER 2 Be

LASAR 16 u IBM 256 K, 2 x TEAC BFDD, Contr. ( HAKITIA BE)

color Graphik, Multifunktionscard,

Newzeiisn 4.6785

Unser Buchangebot zu FORTH:

Programmieren in FORTH v. Leo Brodie dt. 48,— DM Thinking FORTH v. L. Brodie engl. 65,— DM Mastering FORTH, Einführung in F83 78,— DM FORTH Encyclopedia 98,— DM Expertensystem in FORTH 98,— DM

FORTH-Programme für APPLE IlV/e/c/+:

fysFORTH 0.3 mit 600seitigem Handbuch 198,— DM MasterFORTH83 v. Micro Motion Grundsys. 398,— DM Floatingpoint, Hires, Modules 350,— DM LMI FORTH unter PRODOS für Ile/c mit

Banksupport, Editor, Tools in Kürze 1b. 398,— DM

FORTH-Programme für APPLE Macintosh:

NEON! v. Kriya Systems, Objektorientierte

Programmierung, Einführungspreis 999,— DM Mac FORTH v. Creative Solutions ab 680,60 DM MasterFORTH83 v. Micro Motion Grundsys. 498,— DM Floatingpoint und Modulesextension 398,— DM

FORTH-SYSTEME Angelika Flesch

Pf. 1226, 7820 Titisee-Neustadt, Tel. 07651/1665

L ASAR ZE a Weil wir Ihren IMac professionell von 126KB auf ns Dan j 512 KB umrüsten. | 290; Schicken oder bringen Sie uns Ihren Computer. Wir Außerdem volles Rückgaberecht innerhalb garantieren die Rucksendung innerhalb 24 Stunden. 14 Tagen ohne Begründung. Apple | IBM Nach der Umrüstung haben Sie bei uns 1/2 Jahr

@ Mehrzweckklappgehäuse It. Abb. 147,— | 147,— Garantie!

® Schaltnetzteile Apple5 A/IBM 15 A 115,— | 238,—

® Profitastatur dtsch. LASAR 2000 291 ,— | 291,— 2 i 2 R 2 © interface ab 75,- | 148,- Wır vermitteln Ihnen auch gerne einen Händler in @ Monitor 22 Mhz incl. Fuß, bernstein 289,— | 289,— Ihrem Raum, der Ihnen unsere Umrüstung einbaut.

Kaufgarantie/Tiefstpreisgarantie/1A Qualität: 100 % kompatibel inkl. Systemsoftware

Made by Micromint: Apple li 495,-, Apple lie 695,-, IBM 895, Fertigplatinen. Tragbare RR . Gehäuse für 7-Zoll/9-Zoll-Monitore 595,- DM inkl. Tastaturen. Winchester 27 MB auf Der Preis ü Dım 1467.00 incl. MWST .

Anfrage 1A First Class Controller bis 140 MB 935,- DM. Generalimporteur MICROMINT Computer GmbH

Be a 2 : nn Erkrath 2 GP) FD al, Ping later. a 02104/3 30 24 it a) mas, ral:0211=>773270

Peeker 7/85 15

der Driver im Slot-Bereich $Cs00-$CsFF liegt, muß dafür Sorge getragen werden, daß nach PR#s nicht der Driver aktiviert wird (vgl. MEGAWARP.ALT). Zumindest sollte man bei $Cs00 einen Sprung zu einer Fehlerroutine implementieren, etwa BIT $C082

JMP $FF59 (Reset)

(vgl. hierzu Peeker, Heft 5/1985, S. 14, „SLOTRAMDISK“).

Welche Parameter auswerten?

Vor dem Sprung zu dem RAM-Disk-Driver sind vom MLI in der Zeropage folgende Werte abgelegt worden: $0042: Befehl (O=Seek, 2=Write, 3=Format)

$0043: Unit-Nummer (z.B. 40 für S4, D1) $0044: LLHH des 512-Byte-l/O-Puffers $0046: LLHH der Blocknummer

(vgl. hierzu Peeker, Heft 5/1985, S. 59, „DISKDRIVER.DEMO“)

Den Vergleich der vorgegebenen Uhnit- Nummer mit der eigenen Unit-Nummer ist normalerweise entbehrlich.

Die Blocknummer sollte bei Bedarf mit dem zulässigen Blockbereich aufgrund der Belegung der RAM-Karte verglichen werden, um ein „Durchdrehen“ beim „Low-Level“-Zugriff zu vermeiden. Weder MEGAWARP noch der 64K-Karte-Driver nehmen hierauf Rücksicht, so daß bei- spielsweise der 64K-Driver beim Block- read im Bereich Blocknummer $0004- $0007 nur noch „Schrott“ liest.

Die Startadresse des //O-Puffers wird man als korrekt annehmen müssen, da das MLI vor dem Sprung zum Driver bereits Sy- stem-Bit-Map-Konflikte überprüft hat.

Von den 4 möglichen Befehlen sind Seek und Format auszufiltern. Bei Seek kehrt man mit CLC und Akkumulator = $00 („kein Fehler“), bei Format mit SEC und Akkumulator = $27 („\/O-Fehler“) zurück. Bei Read wird der entsprechende RAM- Disk-Inhalt in den I/O-Puffer übertragen, während bei Write der I/O-Puffer-Inhalt in ‘den entsprechenden RAM-Disk-Bereich transferiert wird. Danach wird der Driver mit CLC und Akkumulator = $00 ver- lassen.

1=Read,

Wie transferieren?

Das eigentliche Übertragen der Daten ist die Hauptaufgabe des RAM-Disk-Drivers, die jedoch nicht generell beschrieben wer- den kann, da sie von der Implementierung der Softswitches der Karte abhängt. Man beachte jedoch, daß vor dem Sprung zum Driver die Language-Card eingeschaltet worden ist (bei den momentanen Pro- DOS-Versionen Bank 1 = $C08B, bei

16

IFFA: IFFC: 8D FB BE IFFF:

A9 95

60

: A5 46

: 8D Cl :A5 47

: 89 19 : 8D C2

.

KEERKKKKKTK TFT TKI TKI FI KK KK a 8

ADRLREG ADRMREG ADRHREG DATAREG

* * * *

* * *

* *

*

“ER R *

Boot-HIMEM auf $9509 setzen

LDA STA RTS ORG

+$95 $BEFB

:$950®

;$1IFFF!!! $9999

Megawarp-ProDOS-Driver

Originalversion von Firma IBS, Bielefeld. Umgeschrieben und gestrafft für Driver außerhalb des $C8ß®ß-Bereiches.

Mit Accelerator größere Übertragungsrate. U.Stiehl/25.905.1985

Command: ®® Öl

Seek

Read

Write

Init

Slot 4, Drive 1

a av) a u u u |

Es gibt 1 2@-Bit-Adreßregister 1 4-Bit-Parity-Register 1 8-Bit-Datenregister

Par. HH MM EL 7654 .... 3210 FEDCBA9Y8 76543219 C082+SP9 CO81+Sß CPOSP+SP

Datenr. 76543210 CO83+SQ

Das Datenregister besteht aus Bits: 8-Bit-ADRLREG. = Bits ß-7

8-Bit-ADRMREG. Bits 8-15

4-Bit-ADRHREG. = Bits 16-19

(Die 4 restlichen Bits dienen Paritätsprüfung) Dies entspricht 2 hoch = 1 Megabyte

Die Blocknummern im Bereich $P9P0-$07FF werden wie folgt umgerechnet (Beispiele:) Block $P000 -> $PP@WRp HHMMLL Adreßregister Block $0001 -> $000200 HHMMLL Adreßregister Block $0002 -> $0004A0® HHMMLL Adreßregister Block $07FF -> $QFFEß® HHMMLL Adreßregister

EQU EQU EQU EQU

$CO80+SLOTA $CO81+SLOT4A $C082+SLOT4 $Cc083+SLOT4A

Blocknummer -> ADRMREG-ADRHREG Y-Register -> ADRLREG

LDA BLOCKL ‚520909! ASL STA LDA ROL ORA STA

ADRMREG BLOCKH

+2700010000 ;Parity-Bit on ADRHREG

Read/Write/Seek/Format?

LDA COMMAND

BEQ OKAY ‚Seek

CMP_ #$93 ;Format

BEQ FEHLER

LSR ‚C=1=Read

LDX #2 ‚2 Pages

LDY #9 ; Y=ß

BCS RDPAGE® ;C=1=Read Schreibvorgang

l. Ggf. Bit 4 von ADRH auf 1 setzen

für Paritätsprüfung (ORA #+%PPd1P009) . Umgerechnete Blocknummer in

ADRL-, ADRM- und ADRH-Register poken 3. Datenbyte in Datenregister poken

Lab)

Peeker 7/85

späteren ProDOS-Versionen evtl. Bank 2 = $C083), so daß sich nach dem Rück- sprung vom Driver der LC-Read/Write-Zu- stand nicht geändert haben darf. Einer der Gründe für den Read-Write-Enable-Zu- stand der LC liegt darin, daß sich der MLI- interne I/O-Puffer für den Directory-Block usw. in der LC befindet. RAM-Karten, die in den Bereich $D000-$FFFF „gemappt“ sind (z.B. AP17 der Firma IBS), haben es hier besonders schwer. Dies gilt auch für die Übertragung eines Blocks von der LC der 64K-Karte in die LC des Mother- boards. In beiden Fällen ist eine Zwi- schenpufferung erforderlich, die die Über- tragungsrate entsprechend vermindert.

Weitere Features?

Neben den skizzierten Grundfunktionen eines RAM-Disk-Drivers sind noch weite- re Features denkbar. Beispielsweise könnte man den Format-Befehl implemen- tieren, so daß die RAM-Disk neu initiali- siert werden könnte. Da jedoch das BA- SIC.SYSTEM den alten INIT-Befehl nicht unterstützt, wird man ihn wohl auch bei RAM-Karten nicht vorsehen müssen. Ferner wäre es denkbar, daß man eine RAM-Disk mit PR#s bootet. Auch dieses Feature ist entbehrlich, weil unter ProDOS bereits der Reboot-Befehl - im BASIC.SY- STEM „BYE“ genannt vorgesehen ist. Bei großen RAM-Karten ist es denkbar, daß man ähnlich wie bei Festplatten ge- trennte Bereiche für DOS 3.3, ProDOS, Pascal und CP/M einführt. Da jedoch der RAM-Disk-Inhalt nach dem Ausschalten des Apple gelöscht wird, dürfte sich die Mühe für eine derart diffizile Konfigurie- rung nur bei Spezialanwendungen lohnen.

Für Ilc und Ile mit 64K-Karte

SUPERPLOT

Double-Hires-Utility

9962: 8A 9963: 18 9964: 6% 9965: A9 9967: 38 9968: BP

176 Bytes

WRPAGE® LDA PUFFERL STA WRPAGEI+1 LDA PUFFERH STA WRPAGEI+2 WRPAGEl LDA $FFFF,Y ; Dummy! STY ADRLREG STA DATAREG ;A->Megawarp INY BNE WRPAGEI INC WRPAGEI+2 INC ADRMREG DEX BNE WRPAGELI BEQ OKAY * * Lesevorgang

* l. Umgerechnete Blocknunmer in

* ADRL-, ADRM- und ADRH-Register poken * 2. Datenbyte aus Datenregister peeken

* 3. Ggf. Bit 4 von ADRH auf 1 prüfen

* wegen gerader Parität (BIT ADRH)

%* R

DPAGE®O LDA PUFFERL STA RDPAGE2+1 LDA PUFFERH STA RDPAGE2+2 RDPAGEl STY ADRLREG LDA DATAREG ;Megawarp->A RDPAGE2 STA $FFFF,Y ; Dummy '! * * Wegen der Parity-Prüfung ist Blockread ca. 59% * langsamer als Blockwrite. Dies gilt jedoch nur für * den Low-Level-MLI-Zugriff. Ansonsten ist z.B. BSAVE * langsamer als BLOAD! * BIT ADRHREG ‚Parity=1? BMI FEHLER

INY BNE RDPAGEIl INC RDPAGE2+2 INC ADRMREG DEX BNE RDPAGELI * * Fehler? * OKAY ;X=ß=okay ‚okay ENDE FEHLER ‚I/0-Error ‚nicht okay

von Karl-Walter Bott, 1984, Programmdiskette und Manual, DM 48,—

SUPERPLOT ist eine neue, ungewöhnlich kompakte und schnelle Ampersand-Utility für Double Hires, die einschließlich eines vollständigen ASCII-Shape-Zeichensatzes wahlweise in Bank 1 oder Bank 2 der Language Card liegt und damit sowohl unter ProDOS als auch unter DOS 3.3, falls letzteres in die LC-Bank geschoben wurde, benutzt und in eigene Applesoftprogramme integriert werden kann. SUPERPLOT unterstützt die üblichen HGR-Befehle, denen lediglich ein & vorangestellt werden muß, also z. B. & HPLOT 500, 100 TO 500, 150 usw. SUPERPLOT ist speziell für das Plotten von beschrifteten wissenschaftlichen Funktionskurven mit hoher Auflösung gedacht und weniger für HGR-Spiele.

Hüthig Software Service - Postfach 102869 - 6900 Heidelberg 1

Peeker 7/85

17

Betriebssystem CP/M Vom Monitorprogramm zum Mehrbenutzersystem.

Von Jürgen Plate.

1984, 351 Seiten, 30 Abb.,

3 Tab., geb., DM 56,-

Das Buch beschreibt ausführ- lich die Kommandos, ihre genaue Syntax und die einzel- nen Teilprogramme von CP/M wie BIOS (systemspezifischer Teil), ED (Editor), ASM (Asem- bler, inklusive einer Beschrei- bung des 8080-Befehlssat- zes), SYSGEN und STAT.

Der Beschreibung von CP/M ist das Listing eines komfor- tablen Monitorprogramms für Z-80-Computer vorangestellt, das eine elementare Program- mierung auf Maschinenebene erlaubt, solange man CP/M noch nicht geladen hat. Das kann z. B. zur Fehlersuche sehr nützlich sein. Am Schluß des Buches findet sich auch eine Kurzbeschreibung der Multitasking-/Multiuser- Betriebssysteme.

Das Buch zum Apple Il von Erich Esders

1985, 210 S., 119 Abb., geb, DM 54,—

Wenn hier vom Apple Il gesprochen wird, so gilt das auch für den Ilplus, den lleuro- plus und die lle-Versionen sowie für den ganzen „Apple- Nachbau“. Das Buch ist ein Wegweiser durch diesen Rechner, um mit ihm schneller und effektiver zu arbeiten. Es geht hier weniger um das ele- mentare Programmieren des

18

Rechners, sondern um Assemblerprogramme, die extensiv Monitor-ROM- Subroutinen benutzen. Diese hat der Autor nach Sach- gebieten geordnet, z. B. Mathematik, Graphik, String- Bearbeitung + Disassembler- Listings und diese wiederum mit Erklärungen und Applika- tionen komplettiert. Eine aus- reichende Dokumentation ist dabei immer gewährleistet. Sie geht schrittweise vor, von der Aufgabenstellung über die Programmentwicklung bis zum lauffähigen Maschinenpro- gramm. Die angebotenen Bei- spiele sind ausbaufähig und lassen der eigenen Kreativität reichlichen Spielraum. Viele neuartige Tips und Tricks wird auch der beschlagene Apple- Benutzer begrüßen.

Aus dem Inhalt:

Der Mikroprozessor des APPLE Il. Der APPLE II und seine Speicheraufteilung. APPLESOFT und seine Arbeitsspeicher-Bereiche. Der MICROSOFT-Basic-Inter- preter: Die Zeichen-Lese- Routine. Interpretierer und Lokalisierer. Handler-Routi- nen. BASIC/Maschinen- sprache-Interfaces. DISAS-Generator. Unterpro- gramme im APPLESOFT- Basic-Interpreter: Softschalter und -Flags. Ausdrucks-Inter- pretierer. Low-Resolution- Graphik. Fehler-Behandlung. Applikationen: Arithmetik- Demonstration „FP-CALC“, Hex-Dumps der Applikationen. BASIC-Monitor BASMON/D: Vorstellung der neuen Kom- mandos. Das Programm „BASMON/D“. Implementie- rung und Laufbeispiele. BASIC-Interpreter-Vergleich APPLE Il - Commodore 64: Arithmetik-Demonstration „FP-CALC/64“. Listen: Die Token des APPLESOFT-Basic.

Apple II ROM Listing von Matthias Buck 1984, 116 S., Kart., DM 59,-

@appie II

ROM

EITIWTTUITCITITILTUTCT UI

Listing

| I für Appiesoft-BASIC- | Interpreter von Matthias Buck |

syılat

KÜrla)

ighistieieligiigt R

u Valaauıls

N

vs "

u RE

MIKROCOMPUTER

Das deutsche Apple-II-ROM- Listing ist da!

Einleitung zum prinzipiellen Ablauf des Applesoftinter- preters:

® Aufbau und Verarbeitung

der/des Programmtextes - Variablentabelle - String- space - Fließkommaformate - Basicstacks (GDSUB, FOR-NEXT, ...)

® Beschreibung der wichtig- sten Unterprogramme, z. B. Variablensuche, Garbage collection, Ausdrucksaus- wertung, CHRGET, ...

® Vollständig disassemblierte und sehr ausführlich deutsch kommentierte Auf- listung des Applesoft- BASIC-Interpreters

® Übersichtliche Auflistung aller vom Interpreter benutz- ten RAM-Zeilen mit allen Verwendungszwecken

® Über 150 ausführlich doku- mentierte Unterprogramme: - Funktion - Ein/Ausgabeparameter

Auch für Apple-lle und c und

Kompatible!

Apple ll Pascal Eine praktische Anleitung von Arthur Luehrmann und

Herbert Peckham 1982, 544 S., kart., DM 59,-

ArBLE PASCAL

Dieses Buch ist unentbehrlich für alle, die die Programmier- sprache PASCAL lernen wollen und Zugang zu einem Apple Computer haben.

Sie benötigen keinerlei Vor- kenntnisse, sondern lernen an Hand von Beispielen und Ubungen, wie man selbst PASCAL-Programme entwik- kelt und sie austestet und werden allmählich von Kapitel zu Kapitel vertrauter im Umgang mit dem Apple Computer.

Start mit Apple-Logo für II, He und Ilc

Das kleine Logo-Einmaleins: Grafik » Text «+ Musik

VonD. Senftleben

1985, 222 Seiten, DM 35,-

Viele Mikrocomputer-Her- steller bieten für ihre Geräte neben BASIC und anderen Programmiersprachen zunehmend auch Logo an. Durch ihre Benutzerfreund- lichkeit hat diese Sprache bereits viele Freunde im Ausbildungs- und Freizeitbe-

__ Dietrich Senitleben Start mit, Apple-Logo für Apple Il, Ile und Ile

NASSEN es

reich gefunden. Dabei ist Logo eine mächtige Sprache, die auch dem anspruchsvollen Anwender kaum Wünsche offenläßt. Mittels Schildkrötengrafik wird das kleine Logo-Einmal- eins in 12 Lektionen entwik- kelt. Große Bildschirmfotos begleiten den Leser durch die Lektionen. Das Buch ver- langt aktive Mitarbeit. Es hat seinen Platz neben dem Computer und gibt Hilfen und Anregungen für eigenes Forschen. Dank des bau- steinorientierten Konzepts kann jeder seine eigenen Teilbausteine erzeugen und sie zu neuen Blöcken zusammenfügen. Neben dem Einmaleins werden neue Einsatzbereiche für den Einsteiger erschlossen. Musik und Sound fehlen nicht.

In diesem Buch werden die beiden offiziellen Logo-Pro- dukte der Firma Apple für die Rechnerfamilie Apple Il, Ile und lic behandelt und deren Unterschiede verdeutlicht. Weiterhin sind sämtliche Apple-Logo-Vokabeln über- sichtlich zusammengestellt. Dieses Buch ist ideal zum problemlosen und vergnüg- lichen Start in die Apple- Logo-Welt.

Apple Il Anwenderhandbuch

von Lon Poole 1982, 450 S., zahlr. Abb., kart., DM 56,-

Auch für diesen Computer haben wir den richtigen Leit- faden. Er erspart Ihnen zeit- raubendes und nutzloses Suchen nach der wirklich verwendbaren Dokumenta- tion für Ihren Computer. Das Anwenderhandbuch beschreibt zum einen den beliebten Apple II-Computer als solchen und gibt zum anderen ausführlich Aus- kunft über die normalen Peripheriebausteine und Zubehör einschließlich Disk- Laufwerken und Drucker. Mit Hilfe dieses Buches werden Sie Ihren Apple Il erfolgreich einsetzen, denn der Informa- tionsgehalt geht weit über das hinaus, was hersteller- seitig an Literatur angeboten wird. Sie lernen BASIC auf zwei verschiedene Arten zu verwenden. Wie man den Gebrauch von Klang, Farbe und Grafik zum Optimum führt. Sie erhalten Tips für fortgeschrittene Programm- erstellung. Sie erfahren die Verwendung des Maschi- nensprachen-Monitors u.v.m. Mit dem Apple Il- Anwenderhandbuch werden Ihnen alle Möglichkeiten eröffnet, die in diesem Com- puter stecken.

Apple li Pascal Sprache

1985, 197 S., DM 39,-

Apple Il Pascal Betriebssystem

1985, 256 S., DM 49,-

Peeker 7/85

BucA-S5HOP

Apple DOS 3.3

von Ulrich Stiehl

2. Aufl. 1984, 203 S., kart., DM 28,-

Dies ist die erste deutschspra- chige Darstellung des Disket- tenbetriebssystems DOS 3.3 für den Apple Il/II Plus/lle, die sich sowohl an Applesoft- als auch an Assembler-Program- mierer wendet. Sinngemäß ist das Buch zweigeteilt:

Der erste Teil behandelt aus- führlich die dem Applesoft-Pro- grammierer zur Verfügung ste- henden DOS-Befehle, wobei die Textfiles wegen ihrer gro- Ben Bedeutung und der ver- gleichsweise komplizierten Handhabung besonders darge- stellt werden. Viele Textfile- Tricks werden hier zum ersten- mal geschildert.

Aber auch im zweiten Teil fin- det der reine Applesoft-Pro- grammierer insbesondere in dem Kapitel „Vermischte Tips, Tricks und Patches“ zahlreiche Anregungen. Im übrigen ist der zweite Teil für Assembler-Pro- grammierer gedacht. Neben ei- ner detaillierten Beschreibung der DOS-Interna enthält dieser Teil elf vollständige RWTS-An- wenderprogramme - z.B. CPM-Refiner, DOS-lose Da- tendisk, TSL-Maker, File- Reader, Pseudo-Disk-Driver und Fastbrun-Routine —, die Techniken enthüllen, die bis- lang noch niemals publiziert worden sind. Dieses DOS- Buch ist deshalb der unent- behrliche Begleiter für jeden Apple-Programmierer.

Apple Il

Basic Handbuch von Douglas Hergert 304 Seiten, 116 Abb. DM 32,-

Das Buch ist als Nachschlage- werk konzipiert, daß seinen Platz neben jedem APPLE Il, II+ und Ile haben sollte. Es richtet sich an Anfänger und fortgeschrittene Program- mierer.

BASIC HAND 518,8; |

BnHergert

Aus der Praxis heraus präsen- tiert der Autor Tips und Vor- schläge, die das Programmie- ren leichter und zugleich effi- zienter machen. Alle Applesoft- und Integer-BASIC-Begriffe sind alphabetisch aufgelistet und werden eingehend erklärt.

Peeker 7/85

Dazu werden alle DOS-Befehle (neben vielen Begriffen der Computerterminologie) vorge- stellt.

Beispielprogramme zeigen dem Nutzer, wie jeder Befehl funktioniert und helfen, die rich- tige Anwendung zu üben. Un- ter anderem lernt der Leser den besten Weg, um FOR/ NEXT-Schleifen und IF/THEN- Entscheidungen für seine Zwecke einzusetzen.

Durch die präzise und leicht verständliche Sprache des Au- tors werden auch schwierige Befehle einfach in der Anwen- dung.

Apple Maschinen- sprache

von Don und Kurt Inman 1984, 208 S., zahlr. Abb. und Tabellen, DM 49,—

Dieses Buch ist wahrscheinlich die beste Einführung in die 6502-Programmierung für den- jenigen Assembler-Anfänger, der zuvor noch nie ein Maschi- nenprogramm geschrieben hat.

Aus dem Inhalt:

Applesoft II BASIC - kurzge- faßt Alles über Zeichen - Al- les über Speicher - Alles über Maschinenbefehle Maschi- nenprogramme mit BASIC ein- geben - Graphik Text- Ton-— Arithmetik Was tun mit den Maschinenprogrammen

Apple Il

leicht gemacht

von Joseph Kascmer

1984, 185 S., zahlr. Abb., kart., DM 28,—

Dies ist ein Buch, wie es sich jeder Apple-Anfänger nur wün- schen kann: Schrittweise, leichtverständliche Anleitung zum Umgang mit dem Apple mit einigen durchsichtigen, un- komplizierten Beispielen in Ap- plesoft, die ihn nicht Abschrek- ken, sondern ermutigen sollen, sich mit dem Gerät näher ver- traut zu machen. Damit ist „Ap- ple Il leicht gemacht“ das idea- le Einsteigerbuch für den rei- nen Anwender, der nicht nur „auf den Knopf drücken“, son- dern zumindest einige Details aus der Black Box namens Ap- ple erfahren will.

Aus dem Inhalt:

Kontrolle des Geräts Schrei- ben und Zeichnen auf dem Bildschirm Geheimnisvolle Abläufe: Programme - Ver- schiedene Eingriffsmöglichkei- ten Mobile Speicher: Disket- ten - Kontrollmöglichkeiten Das Innenleben

Apple Assembler Tips und Tricks

von Ulrich Stiehl 1984, 226 S., 3 Abb., kart., DM 34,

„Apple Assembler“ wendet sich an alle, die bereits Anfän- gerkenntnisse der 6502-Pro- grammierung haben - z.B. aufgrund des Buches „Apple Maschinensprache“ und nun- mehr ein Nachschlagewerk für ihren Apple Il Plus/lie/lic su- chen, in dem alle wichtigen ROM-Routinen sowie eine Vielzahl sonstiger Hilfspro- gramme in einer systemati- schen Form zusammengestellt werden. Insgesamt umfaßt die- ses Buch über 40 Utilities, dar- unter mehrere völlig neuartige Programme wie Double-Lores, Double Hires, Screen-Format u.a.

Der erste Teil enthält ein Repe- titorium der wichtigsten Befeh- le, Adressierungsarten und sonstigen Besonderheiten des 6502.

Im zweiten Teil werden alle Adressen des Monitors zusam- mengestellt, die für Assembler- Programmierer von Nutzen sein können. Darüber hinaus findet der Leser Unterroutinen für hexadezimale Addition/ Subtraktion/Multiplikation/Divi- sion, Binär-Hex-ASCII-Um- wandlung usw.

Der dritte Teil befaßt sich mit der Speicherverwaltung der Language Card und der lle- 64K-Karte und enthält Move- Programme zum Verschieben von Daten in die und aus der Language Card sowie der 64K- Karte.

Der vierte Teil ist dem Ap- plesoft-ROM gewidmet und li- stet eine große Anzahl nützli- cher Interpreter-Adressen. Bei den Utility-Programmen liegt das Schwergewicht auf Fließ- kommamathematik einschließ- lich Print Using.

Der letzte Teil behandelt den Text- und Graphikspeicher. Neben einem professionellen Maskengeneratorprogramm werden auch Routinen zur Double-Lores- und Double-Hi- res-Grafik vorgestellt.

Arbeiten mit dem Macintosh

von N. Hesselmann 416 Seiten, 320 Abb. DM 54,-—

Das Buch erklärt den Umgang mit dem Macintosh von Grund auf, wobei auch auf elementare Dinge eingegangen wird, wie

z. B. die Benutzung der Tasta- tur und der Maus, das Einlegen von Disketten und den System- start. Ganz besonderes Augen- merk wird auf die Erklärung der speziellen Software-Umge- bung des Macintosh gelegt, wobei das Menü- und Fenster- konzept sowie das Anwählen durch Piktogramme gekenn- zeichneter Funktionen klar dar- gestellt wird.

Der Umgang mit den Program- men MacPaint und MacWrite wird erläutert; dies geschieht teilweise anhand von Beispie- len, die leicht nachvollzogen werden können. Ein umfangrei- ches Kapitel ist dem für den Macintosh erhältlichen Micro- soft-BASIC gewidmet.

BASIC Ubungen

für den Apple

von J. P. Lamoitier

1983, 252 S., zahlr. Abb., kart., DM 38,—

Das Buch ist konzipiert, allen Apple-Anwendern Applesoft- BASIC durch praktische Ubun- gen an Hand von reellen Pro- grammen beizubringen. Daten-

verarbeitung, Statistik, kom- merzielle Programme, Spiele und vieles mehr. Jede Übung beinhaltet eine Beschreibung der Problemstellung, eine Ana- Iyse der Lösungsmöglichkei- ten, ein Flußdiagramm und ein fertiges Programm samt Pro- belauf.

Aus dem Inhalt: Ihr erstes BASIC-Programm Flußdiagramme Ubungen mit Integerzahlen Elementare Beispiele aus der Geometrie Allgemeine Übungen aus der Datenverarbeitung Mathema- tische Berechnungen Kauf- männische Berechnungen Spiele - Operations Research Statistik

Apple ProDOS für Aufsteiger Band 1

von Ulrich Stiehl 1984, 202 S., kart., DM 28,-

ProDOS ist das neue „profes- sionelle DOS“ (Professional Disk Operating System) für den Apple Ile sowie den mit einer Language Card ausgestatteten Apple Il Plus. Band 1 befaßt sich mit den theoretischen Grundlagen von ProDOS, der internen und externen Spei- cherorganisation und enthält grundlegende Beispielpro- gramme für Assembler-Pro- grammierer sowie generelle Untersuchungen zum BASIC- SYSTEM. Da ProDOS über er- heblich vielfältigere und lei- stungsfähigere, zugleich je- doch erheblich kompliziertere Dateistrukturen verfügt, sind theoretische Kenntnisse von ProDOS unabdingbar, wenn man die Features von ProDOS voll ausschöpfen will.

Aus dem Inhalt:

Ein erster Überblick - ProDOS und DOS 3.3 Interne Spei- cherorganisation Externe Speicherorganisation MLI (Machine Language Interface) ProDOS für Applesoft-Pro- grammierer

19

von Arne Schäpers

Ursprünglich war dieser Artikel nebst Pro- gramm als Teil einer weitergehenden Be- schreibung der Apple-Drives vorgesehen. Um aber allzugroße Überschneidungen mit der Artikelserie von Gerhard Berg zu vermeiden, bringen wir dieses Programm als „Stand-alone“-Utility mit einem Mini- mum an Erklärungen.

Die drei „kritischen“ Punkte beim Lesen von und Schreiben auf Diskette, nämlich a) Nibble-Kodierung,

b) die zeitlichen Bedingungen beim Schreiben eines Bytes und

c) Bewegungen des Arms

werden in einer späteren Ausgabe vom Peeker ausführlich behandelt.

Eine Begründung für das folgende Pro- gramm sollte hier auch nicht fehlen:

So gut wie alle Disk-Utilities sind im be- sten Fall für vollständig kompatible 40- Track-Drives geeignet Benutzern von Drives mit mehr als 40 Tracks bleibt nur die Hoffnung, daß nichts schiefgeht.

Aus diesem Grund wird in einer der näch- sten Peeker-Hefte auch ein Disk-Editor für ProDOS (und DOS 3.3) erscheinen, der sich streng an den Standard hält mit der Folge, daß alle mit Hilfe von „Patches“ angepaßten Drives einschließlich der RAM-Disk benutzt werden können.

Das hier vorgestellte Formatierungspro- gramm hat folgende Features:

- Es arbeitet mit 35 bis 80 Tracks in jedem Slot (außer 0);

Die Neuformatierung einzelner Tracks ist möglich;

Es kann ermittelt werden, Tracks ein Drive „verträgt“;

Es läuft unter DOS 3.3 und unter ProDOS.

Man beachte jedoch, daß nur eine Forma- tierung im engeren Sinne vorgenommen wird, d.h. es werden weder Boot- und Directory-Blocks (bei Pascal- und Pro-

wieviele

20

FORMATTER

Ein universelles Formatierungsprogramm

DOS) noch Catalog-Spuren (bei DOS 3.3) angelegt. Das Formatierungsprogramm kann deshalb um eine Blockwrite- (Pascal, ProDOS) oder RWTS-Routine erweitert werden, die die bei dem jeweiligen Be- triebssystem erforderlichen System- Blocks oder -Spuren anlegt.

Die Theorie

Zur Einleitung der Theorie zunächst ein- mal die Speicherstellen (l/O-Adressen) des Controllers in tabellarischer Form: $C080-$C087: Phasen des Schrittmotors zur Armsteuerung

$C088: Drive-Motor aus

$C089: Drive-Motor an

$C08A: Selektierung Drive 1

$C08B: Selektierung Drive 2

$C08C: Strobe des Data Latch

$C08D: Load des Data Latch

$CO8E: Setzt „Read“ von der Diskette $CO8F: Setzt „Write“ auf die Diskette Alle diese Speicherstellen sind hier für Slot O angegeben. Bei einem anderen Slot kommt noch die Slotnummer x 16 hinzu, also z.B. für das Anschalten eines Drives in Slot 6:

LDX #$60 (= Slotnummer x 16)

LDA $C089,X (= Motor an)

Über das Ansprechen von Drive 1 oder Drive 2 entscheiden nur die Speicherstel- len $C0O8A und $CO8B. Alle folgenden Routinen finden mit dem durch diese bei- den Speicherstellen selektierten Laufwerk statt.

Mit Ausnahme der Speicherstellen $C08D bis $CO8F ist das Ansprechen durch einen beliebigen Prozessor-Befehl, also z.B. LDA oder LDX, aber auch CMP oder BIT ausreichend.

Ein Formatierungsprogramm besteht im allgemeinen aus vier Teilen:

Parameterübergabe Zunächst müssen die Werte wie Start-

Track, End-Track, Volume-Nummer usw. festgelegt werden. Diese Aufgabe wird durch das Applesoft-Programm namens FORMAT erledigt, das hier aus rein opti- schen Gründen etwas „professioneller“ ausgefallen ist.

Selektierung und Anschalten des Ziel- Drives

Bei einem „richtigen“ DOS fällt dieser Prozeß wesentlich komplizierter aus. So wird z.B. zuerst geprüft, ob noch ein ande- rer Drive an ist usw. Unser Formatierungs- programm beschränkt sich auf das An- sprechen der Speicherstelle $C089 (+ Slotnummer x 16).sowie die Selektierung von Drive 1 oder Drive 2. Danach folgt eine Verzögerung, damit sichergestellt wird, daß der Motor die Nenndrehzahl er- reicht. Zweckmäßigerweise wird innerhalb dieser Zeit der Arm rekalibriert.

Schreiben eines Tracks

Zum „normalen“ Schreiben eines Sektors (Blocks) bestehen hier mehrere gravieren- de Unterschiede:

Es wird „blind“ geschrieben, d.h. es kann naturgemäß vorher nicht durch Le- sen eines Address-Field geprüft werden, ob sich der Arm auf dem richtigen Track befindet. Der Arm wird einfach pro Track um eine Position nach innen bewegt.

- Es muß nicht nur ein Data-Field, sondern auch jeweils vorher ein entsprechendes Address-Field geschrieben werden.

Das Data-Field bleibt leer und enthält nur Nullen ($96). Verifizierung des Tracks

Nach dem Schreiben wird der Track noch- mals gelesen, um etwaige Übertragungs- fehler oder Diskettenschäden festzu- stellen.

geschriebenen

Der Aufbau einer Spur und die Einteilung eines Sektors in verschiedene Felder kann der Tabelle 1 entnommen werden.

Peeker 7/85

Das Programm

Das Applesoft-Programm FORMAT wurde geschrieben, um die Parameterübergabe etwas komfortabler zu gestalten. Das Set- zen der einzelnen Parameter könnte ebenso durch diverse Pokes und ein an- schließendes BRUN von FORMAT.OBJ stattfinden. Diese Werte werden in der Page 3 übergeben und sind in Tabelle 2 aufgeführt.

Das Maschinenprogramm FORMAT.OBJ hat vier Einsprünge:

8192 ($2000) Drive Select, Motor an, Rekalibrierung auf Track 00;

8195 ($2003) Motor an;

8198 ($2006) Motor aus;

8201 ($2009) Arm auf Track xx, und Formatierung von Track xx bis Track yy mit anschließender Verifizierung. Das fast schon übliche Knirschgeräusch des Arms nach beendeter Formatierung entfällt, weil die Formatierung in aufsteigender, die Verifizierung dagegen in absteigender Richtung vorgenommen wird, d.h. bei ei- nem kompletten Durchgang befindet sich der Arm danach wieder über Track 00.

TECHNIK 9.4

Eine abschließende Warnung, falls Sie FORMAT.OBJ modifizieren wollen: Die Routine WRTRACK (ab $22BB) schreibt einen ganzen Track synchronisiert, d.h. in einem auf die Mikrosekunde abgestimm- ten Zeitverhältnis. Bereits das speicher- platzmäßige Verschieben kann u.U. zu un- lesbarem Müll auf der Diskette führen, wenn z.B. danach ein relativer Sprung (BNE ..) über eine Seitengrenze hinaus- geht, denn der 6502 hat leider die unange- nehme Eigenschaft, sich für derartige Sprünge eine Mikrosekunde mehr Zeit zu lassen.

Tabelle 1: Aufbau einer Spur GAP 1: eine größere Anzahl von Autosyncs ($FF)

Address-Field: Address-Field-Header ($D5 $AA $96) Volume-Nummer (1 Byte i.allg. $FE) Track-Nummer (1 Byte) Sektor-Nummer (1 Byte) Checksum (2 Bytes) Address-Field-Trailer ($D5 $AA $EB)

GAP 2: mehrere Autosyncs ($FF)

Data-Field: Data-Field-Header ($D5 $AA $AD) Information des Datensektors (341 Bytes) Checksum (2 Bytes) Data-Field-Trailer ($D5 $AA $EB)

mehrere Autosyncs ($FF) bis zum Anfang des Address-Fields des nächsten Sektors

Address-Field GAP 2 (weitere Sektoren) Data-Field

GAP 3 des Sektors $®F GAP 1

Das GAP 3 des Sektors $@F, also des letzten Sektors auf dem Track, reicht dann bis in das GAP 1 hinein, d.h. GAP 1 wird teilweise überschrieben. Somit ist gewährleistet, daß der gesamte Track definierte Information enthält.

Tabelle 2: Übergabeparameter

$0300 (768): Slot-Nummer * 16 (z.B. 96 für Slot 6) $0301 (769): Drive-Nummer oder 1) $0302 (778): Volume-Nummer (z.B. $FE) $0303 (771): Start-Track (z.B. 9) 50304 (772): End-Track (z.B. 34) $0305 (773): Half-Track ($ß® = ganze Spur, $80 = Halbspur)

FORMAT

108 TEXT : HOME : INVERSE : PRINT SPC( 49): NORMAL : VTAB 1: HTAB 15: PRINT '" FORMATTER "

105 REM

11® IF PEEK (8192) = 4 * 16 + 12 THEN 13®

115 VTAB 6: PRINT "FORMAT.OBJ wird geladen..."

12® PRINT CHR$ (4)"BLOAD FORMAT.OBJ"

125 REM *%*%*% Initialisierung und Parameter-Anzeige x%x**

13® LOMEM: 1®240: REM Damit FORMAT auch unter ProDOS läuft!

135 SL$ = '"6":DR$ = "2":VL$ = "FE": REM Slot, Drive, Volume

149 ST$ = "B0":ET$ = "34":HT$ = "N": REM Anfang, Ende, Half-Track

145 POKE 34,1: HOME

Peeker 7/85

POKE 33,34: POKE 32,4: REM Textfenster

VTAB 4: PRINT "Slot: ";SL$;" Drive: ";DRS;" Volume: $"VL$

VTAB 6: PRINT "Start-Track: ";ST$;" End-Track: " r ET$

VTAB 8: PRINT "Software "; CHR$ (34) ;"Half-Track"; CHR$ (34);'" (J/N): ";HT$

POKE 32,9: POKE 33,4®

REM x%*x** Restart x%x%*%*

VTAB 12: HTAB 8: PRINT " <P> andere Parameter " VTAB 14: HTAB 6: PRINT "<CR> = Start <ESC> = Ende"

REM *x*** Parameter/Start/Ende *x**x*

VTAB 14: HTAB 20: GET X$

IF X$ = CHR$ (27) THEN HOME : POKE 34,9: END

IF X$ = CHR$ (13) THEN 460: REM Start

IF X$ < > "p" AND X$ < > "p" THEN 195

REM x%*%*%* Parameter ändern **%*x*

POKE 34,11: HOME : POKE 34,1

RESTORE :N3$ = "":N4$ = """

A$ = SL$: GOSUB 305:SL$ = A$

A$ DR$: GOSUB 395:DR$ = A$ N3$ = "A'":NA$ = "F": REM Hexzahlen erlaubt

A$ = VL$: GOSUB 330:VL$ = A$

N3$ = "":N4$ = "": REM Nur Dezimalzahlen

A$ = ST$: GOSUB 339:ST$ = A$

A$ = ET$: GOSUB 339:ET$ = A$

IF VAL (ST$) < = VAL (ET$) THEN 275

VTAB 12: HTAB 5: PRINT CHR$ (7);"Start-Track größer End-Track ??": GOTO 225

IF VAL (ET$) -— VAL (ST$) < 48 THEN HT$ = "N": GOTO 285

A$ = HT$:N3$ = "Y":NA$ = N3$: GOSUB 305:HT$ = A$ VTAB 8: HTAB 34: PRINT HT$

POKE 34,11: HOME : POKE 34,1

GOTO 18%

REM *%*%* Subroutinen für Parameteränderungen %*%*% REM Input ein Zeichen

GOSUB 389: REM Setzt Cursor

GET X$: IF X$ = CHR$ (13) THEN X$ = A$: RETURN GOSUB AB: IF X$ = "" THEN 315: REM Check

A$ = X$: PRINT A$;: RETURN

REM Input zwei Zeichen

GOSUB 389: REM Setzt Cursor etc.

GET X$: IF X$ = CHR$ (13) THEN X$ = A$: RETURN GOSUB 409: IF X$ = "" THEN 349: REM Check

Z$ = X$: PRINT X$;" "; CHR$ (8);

GET X$: IF X$ = CHR$ (13) THEN A$ = "0" + Z$: GOTO 375

IF X$ = CHR$ (8) THEN HTAB H: P A$;: HTAB H: GOTO 349: REM Restart

GOSUB 409: IF X$ = '"" THEN 355

A$ = 2$ + X$

HTAB H: PRINT A$: RETURN

REM Setzt Cursor und liest Min/Max

READ V,H: VTAB V: HTAB H

READ N1$,N2$: REM Min/Max

RETURN

REM UC-Übersetzung und Check

X$ = CHR$ ( ASC (X$) - 32 * ( ASC (X$) > 96))

IF (X$ < N1$ OR X$ > N2$) AND (X$ < N3$ OR X$ > N4$) THEN PRINT CHR$ (7);:X$ = ""

RETURN

REM VTABs, HTABs und Min/Max für Parameter

21

22

659 655 649 645 659

655

669 665 679 675 680 685 699 695 700 705 719 715 72® 725 73® 735 749

DATA 4,11,"1",'"7": REM Slot

DATA 4,22,'"1","2": REM Drive

DATA 4,35,'"0","9": REM Volume

DATA 6,18,"0","9'": REM Start-Track

DATA 6,35,"9",'"9": REM End-Track

DATA 8,34,'"N","N": REM Half-Track, "Y" ist N3$/N4$ REM x*%*%* Start FORMAT xx%*%*

POKE 34,11: HOME : POKE 34,1: VTAB 12: HTAB 8 PRINT "<ESC> = Funktion abbrechen"

POKE 768,16 * VAL (SL$): POKE 769, VAL (DR$) - VL = 6: FOR X = 1 TO 2:X$ = MID$ (VL$,X,1)

VL = 16 * VL + ASC (X$) - 48 - 7 ( ASC (X$) > 64): NEXT

POKE 77®,VL: POKE 771, VAL (ST$): POKE 772, VAL (ET$) POKE 773, IF HT$ = "J" THEN POKE 773,127

REM 8192 Drive on, Recal., Test Track ®®

REM 8195 Drive on

REM 8198 Drive off

REM 8201 FORMAT (Start. .End-Track)

VTAB 16: HTAB 1

PRINT '"9123456789ABCDEF®123456789ABCDEFß1234567" ; PRINT "

VTAB 18: HTAB 1: CALL 8192

ERR = PEEK (767)

IF ERR < > ® AND ST$ = "0" THEN 639: REM Disk neu => FORMAT

IF ERR = ® AND ST$ < > "0@" THEN 639: REM Disk teilweise formatiert

CALL 8198: REM Drive aus!

VTAB 21: PRINT CHR$ (7)

IF ERR = ® THEN 585: REM Disk nicht neu

PRINT "Track ®® unformatiert -"

PRINT

PRINT "Positionierung auf Track "ST$" unmöglich." GOTO 189

VL = PEEK (768 + 9):VL$ = "": FrRRX=1T0 2 VL$ = VL$ + CHR$ ((VL / 16) +48 +7 (VL / 16 > 19))

VL = (VL - INT (VL / 16) * 16) * 16: NEXT

VTAB 4: HTAB 35: PRINT VL$: VTAB 22

PRINT "Diskette enthält Daten!"

PRINT

PRINT "Neu formatieren (J/N): ";

GET X$: IF X$ < > "J" AND X$ < > "j" THEN PRINT "N"; : GOTO 189

PRINT X$;: CALL 8195: REM Drive an

POKE 34,20: HOME : POKE 34,1

VTAB 22: PRINT "Disk wird formatiert..."

VTAB 18: HTAB 1: CALL 8201

VTAB 22: PRINT SPC( 3®8);: HTAB 1

IF PEEK (767) = ® THEN PRINT "Formatierung fehlerfrei beendet.": GOTO 189

PRINT CHR$ (7);: ON PEEK (767) GOTO 669,680,690,710,739

PRINT "Kein Laufwerk angeschlossen oder"

PRINT

PRINT "Diskette schreibgeschützt.";

GOTO 189

PRINT "Laufwerksgeschwindigkeit zu hoch."

GOTO 189

PRINT "Allgemeiner Fehler: Schlechtes Medium, ' PRINT

PRINT "Klappe offen, etc.";

GOTO 189

PRINT "Armpositionierungsfehler -"

PRINT

PRINT "wahrscheinlich zu hohe Track-Numnmer."; GOTO 18®

PRINT "- Abbruch."

GOTO 18

REM Arne Schäpers 4/85

u | Be a u =

Diverse Experimente mit Original-Disk-II- Drives und Duodisk-Drives (A. Schäpers benutzt andere Laufwerke) zeigten, daß

bei

mit FORMAT initialisierten DOS-3.3-

und ProDOS-Disketten beim RWTS-Sek- tor-Write bzw. MLI-Block-Write der Zugriff doppelt solange dauert wie beim Read. Aus Zeitgründen war es mir bislang nicht möglich, die optimalen Werte für die Syn- chronisationsbytes zu finden. us

ZUSATZ-KARTEN:

V-24-Schnittstelle ............ 199,- Z-80-Karte ........2222222.. 139,- 80-Zeichen-Karte m.Softswitch 236,- 16K-Language-Karte ......... 138,- Centronics-Karte von Epson für Graphik... . 210,- für Text... .145,- Centronics-Schnittstelle für 2 Drucker gleichzeitig ................... 129,- rommer incl. Software... .... 22:22 none eeeenenneenereee nenn 198,- uper-Eprommer 239 belegt keinen En incl. Software für 2708-27128 ............ Pi 0 0 U ESORHEARNRFENEERR auf Anfrage Floppy-Controller FDC 4 für alle Laufwerke °... .. .. 170,- Bausatz wielinks ............ 159,- Leerplatine wie oben incl. Pomu.Eprom .......:.2.22cneenneeeennnn 98,- DEREN BRAR 2:24:22 auf Anfrage

Auto ee -Controller crnicontroien

1x35bis2x8 Disk, keine Patch-Disk notwendig, Patch DOS 3.3, Diversi- DOS 2-C, 4-C (DD MOVER), Pascal 1.1, Pascal 1.2, CPM 2.2, Flak A ı 9 DE 6: Su De r Sie können die Laufwerke kleid mischen 98, =

ey: für 15%" Slimline Laufwerk „2.2... n m nn 39,- Gehäuse für 2 5V4’ Slimline Laufwerke mit Platz für ein Netzteil ......... 159,- Gehäuse für 2 3%" Slimline Laufwerke mit Platz für ein Netzteil .......... 79,- IBM®-Gehäuse ......... men nennen nn 229,- Floppy-Kabel 34pol. für 2 Laufwerke mit Shugart-Bus ................. 35,-

Preh Commander Keyboards

Wir bieten Ihnen die Preh-Qualität auch für Apple. AK 88 Spez. mit Gehäuse, An-

schlußkabel, Zehner-Tastenfeld, dt. Zeichensatz, endencsien für

Gtrl-Codes und Rechenfunktionen ...... 2: 22mm nennen 339, v Preh Commander Keyboard AK 87, frei programmierbar

bis zu 10 Ebenen, pro Taste bis zu250 Zeichen .............. nur 559, -

TEAC 3%" Laufwerk FD 35 Foa5 _

Speicherkapazität 1 MB, (formatiert 640 KB) jetzt fürnur ........

TEACFD55A1x40 Track ..... 445,- TEACFD55B2x40 Track ...... 515,- TEACFD55E1x80 Track ..... 490,- TEACFD5S5SF2x80 Track ..... 560,- Philipps Slimline Floppy X3134 A, 2x80 Track solange Vorrat ......... nur 569,- SONY 3%" Laufwerk... ...:: 2. nennen nur 799,- Apple®-kompatibles Laufwerk incl. Gehäuse + Kabel ................ 599,-

320 KB Laufwerk für Ic ................. 948,- 148 KB Laufwerk für lIc.................. 698,-

EPSON DRUCKER

EPSON FX80 ............... 1670,- EPSON FX100 .............. 2159,- EPSONRX80 .............. 1079,- EPSONRX8O0FT ............ 1295,- Patch-Diskette für SONY 3%" Laufwerke - ermöglicht die Anpassung an Il/Ile und kompatible Computer .......... 80,- Manual vorab 15,-DM (wird beim Kauf der Patch-Diskette angerechnet). dto. für 5Y4" Laufwerke ........ 69,- Disketten Döb&Böd SS/DD 10St. 62,- 10 Disketten f. 31." Laufw........ 150,- Akustikkoppler AK 300 mit FTZ-Nr. incl. Netzteil ............222222.. 549,- Interface zum Anschluß von Laufwerken mit Shugart-Bus ............. 248,-

Die NIONOPPY mit Zukunft:

Speicherkapazität: 2 x 1 MByte for- matiert: 2x 640 kByte. Anschlußfertig Alt,

mit PROM-residenter Patchsoftware für CP/M 2.2, Apple DOS 3.3, Diversi- DOS 2-C, 4-C (DD MOVER), Apple ' i

Pascal 1.1, Pascal 1.2, Pro-DOS . er 1.0.1, 1.1, 1.1.1 zum E -: n PIOISVON sun ananes 1640,-

Low Power Version ........ 1740,-

10 MB Winchester

mit Software für DOS 3.3, CP/M 2.20, Pascal, Pro-DOS

incl. Controler und Gehäuse . 22 re 4490 -

Sonderangebot Disketten Döb&Böd 40 Track, SS/DD 10er Pack . .49,-

Gesamt-Preisliste anfordern! Preise inclusive gesetzlicher Mehrwertsteuer.

8 Js] NICH-1-Yaıgelalle-

JäuKeyKyAY7 73:77] Tel. 02373/63159

Holtewiese 2 KYLIE TE L-TM

Peeker 7/85

G8/2 199994

Es

FORMAT. OBJ

oo oı9u1AumD Hr

Dr Hr SOO IV PN DH a

NNDDVODVDDDDUDD SOVONIVD AU DH

N WW N DDr

BRARARBHKA Oo u a u DOBUDESOAANIDUSB

*

* vom Steuerprogramm gesetzte Werte

. SLOT16 EQU DRIVENO EQU VOLNO EQU STRACK EQU ETRACK EQU HFLAG EQU

ERRNO EQU *

$399 $301 $392 $303 5304 $395

$2FF

Slot-Nr. * 16

; Drive: ® oder 1

; Volume-Nummer

Start-Track

End-Track

"Half-Track'" Flag: $ß® oder $8®

; Fehlernummer für BASIC

* vom Programm benutzte Speicherstellen

* ADDRBASE EQU SECFOUND EQU TRKFOUND EQU VOLFOUND EQU

TRNOW EQU TRWANT EQU

$396 $397 $308 $309

$30A $30B

Basis der von RDADDR

gesetzten Speicherstellen:

; Volume/Track/Sektor und CHECKSUM in absteig. Folge

"Track jetzt" "Track gewünscht"

* Speicherstellen des Controllers

* ARMBASE EQU DRVOFF EQU DRVON EQU DRVSEL EQU STROBE EQU DATA EQU SREAD EQU SWRITE EQU *

* benutzte Speicherstellen

* ZVOLNO EQU SECTOR EQU ZTRACK EQU *

ORG *

JMP

JMP

JMP

JMP

LDA STA LDA STA JSR JSR JSR JSR

* NOTNEW

$co8p $c988 $c989 $CO8A $cdsc $CQd8D $CO8E $CO8F

$45 $46 $47

$2009

START DRIVEON DRIVEOFF FORMAT

#+$EF DELAY1 +$D8 DELAY2 SELECT RECAL COUNTUP RDADDR

VOLFOUND VOLNO

+9

+9 TRKFOUND STl ERRNO

Phasen-Adressierung

; Motor off

; Motor on

$8A: Drive 1 / $8B: Drive 2 ;‚ DATA IN bei READ

; DATA OUT bei WRITE

setzt "READ" setzt "WRITE"

in der Zeropage

; Timing in WRITE

Einsprungvektoren für BASIC

festgelegte Werte zum Hochzählen für die

Startzeit des Motors

Drive an

: Arm zurück auf Track ®® und

"delay'", bis Motor auf Touren lesen eines Address-Fields ging gut keine neue Disk!

für BASIC: neue Disk

; Drive läuft

; auf Track 99? ;‚ darf eigentlich nicht passieren

für BASIC: bereits formatiert

; Drive läuft

203D: 2BSF: 2042: 2044: 2047:

2DAA: 204AD: 2D4AF: 2052: 2054:

2055: 2058: 205B: 205E: 2OSF: 2069: 2063: 2064: 2067:

2068: 206B: 2D6E:

2D6EF: 2072: 2073: 2075: 2078: 2DTA: 207D: 2089: 2082: 2085: 2086: 2089:

2D8A: 208D: 208E: 2099: 2093:

2095: 2098: 2099: 209B:

209E: 20Al: 2DAA: 2DAG:

AD 48 Ag 8D Ag 8D

Ag 8D 68 8D 69

AD 18 69 8D Dp

AD 38 EI 8D

0 89 8E

Ol

8A

v1) 88

DA

01 DB 09

DA

91 DB

DA 05 01

a

21 20

21

20

03 co co 03 co

03 co

03

93

03 20

03 03

03

03

03

03

03 03

DRIVEON LDA STA LDA STA JSR

.

COUNTUP BIT BPL JSR BEQ

MOTORON RTS

.

SELECT LDX LDA LDA TXA CLC ADC TAX LDA RTS

=

DRIVEOFF LDX LDA RTS

RECAL LDA PHA LDA STA LDA STA JSR LDA STA PLA STA RTS

%*

STEPIN LDA CLC ADC STA BNE

-

*

STEPOUT LDA SEC SBC STA

»

MYSEEK LDA

CMP BEQ

* SEEKABS LDA STA SEC

#+$EF DELAYl #+$D8 DELAY2 SELECT

DELAY2 MOTORON ARMDELAY COUNTUP

SLOT16 DRVON,X SREAD,X

DRIVENO

DRVSEL,X

SLOT16 DRVOFF,X

TRWANT

+00 TRWANT +$59 TRNOW MYSEEK +00 TRNOW

TRWANT

TRNOW

#1 TRWANT MYSEEK

TRNOW

#1 TRWANT

TRNOW HFLAG MS1

TRNOW1 TRWANT TRNOW HFLAG MS2

TRWANT1

TRNOW1 ARMSET

TRNOW1 TRNOW2

; Motor-on-DELAY

;‚ Drive on

; bereits hochgezählt?

win u

zählt DELAY hoch "always!

Motor on

"READ MODE"

Ö oder 1

Drive auswählen

der gewünschte Track wird gespeichert, "Track jetzt" auf $5® gesetzt

; und "Track gewünscht" auf

.....

Folge: Der Arm wird auf

Track ®® zurückgezogen

Restore

l Track nach innen

"always!

l Track nach außen

bei Standard-Drives

müssen pro Track zwei Armbewegungen ausgeführt werden, bei 8®-Track-Drives nur eine

hier sollte der Arm hinterher sein

Ziel-Track

bereits auf dem Track

174

G8/2 199994

20C5: 2008: 20CA: 2ÖCC: 2ÖCF: 20D1:

20D4: 20D5: 20D8:

20DB: 20DC: 20DF: 2DE2: 20E5:

20ET7: 20DEA: 2DEC: 20ED: 20F®: 20Fl: 20FA:

20FS5: 2OFT: 20F9: 20FA: 2DFC: ZOÖFF: 2101: 2194: 2105: 2107: 2109:

210F: 2112: 2119; 2118: 211A: 2l1D: 2129: 2123; 2125: 2127: 2129: 212C: 212F: 2132: 2134: 2187:

2139: 2l3B: 213E: 2141: 2143: 2146: 2149:

ED Fo BP EE

CE

38 20 20

18

20 29 Fo

AD 29 2A OD

BD 6%

A9 A2 CA

EE Do

38 E9 60

DA

05 OB

dB

F5

dc

F5 D7

DB 03

nn) 80 30 1l FD OD 03 DE

Bl EE

21

21

20 20

21 20 20

21

93 co

A

21

03 03 20

Bi. 21 22

21 03 03

20

2 21

21 03 93

138 139 149 141 142 143 144 145 146 147 148 149 159 151 152 153 154 155 156 157 158 159 16® 161 162 163 164 165 166 167 168 169 178 171 172 173 174 175 176 177 178 179 189 181 182 183 184 185 186 187 188 189 19 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206

MOVEIN

MOVEOUT * PHASEON

%* SETARM SETARM2

ARMSET

ARMDELAY DLY1 DLY2

DLYS3

* TRWANT1 TRNOW1 TRNOW2 * DELAY1 DELAYZ * FORMAT

WRLOOP

* VERIFY

SBC BEQ BCS INC BCC DEC

SEC JSR JSR

CLC LDA JSR JSR BEQ

LDA AND ROL ORA TAX LDA RTS

LDA LDX DEX BNE INC BNE INC SEC SBC BNE RTS

DS DS

DS DS

EQU LDA STA JSR LDA JSR JSR JSR LDA BCS LDA JSR LDA CMP BEQ JSR BEQ

LDA JSR JSR BCS JSR LDA CMP

TRWANTI DLY1 MOVEOUT TRNOW1 PHASEON TRNOW1

SETARM ARMDELAY

TRNOW2 SETARMZ ARMDELAY SEEKABS

TRNOW1 +03

SLOT16 ARMBASE,X +$30

#$11

DLY2 DELAY1 DLY3 DELAY2

+01 DLY1

Hr

x STRACK TRWANT MYSEEK #$17 PRTRACK GETESC WRTRACK #1 VFEXIT ++ PRTRACK TRNOW ETRACK VERIFY STEPIN WRLOOP

+$16 PRTRACK VFTRACK VFERR GETESC TRNON STRACK

..

letztes DELAY zum "auspendeln"

"always"

Phase zum Ziel-Track hin anschalten

danach die alte Phase aus

"always! Einsprung: neue Phase on

Einsprung: alte Phase off Carry bestimmt, ob "on/off"

adressiert Stepper-Motor

fester Wert

für Motor on: Hochzähler

; Scratches für SEEKABS

Motor-on-DELAY

setzt Arm auf Start-Track inverses "W"

Test auf Abbruch "WRITE PROTECTED"?

mit ERR#l

Anzeige: WRITE beendet

letzter Track fertig?

nächster Track "always"

inverses '"V"

Test auf Abbruch

letzter Track?

* VDONE VFEXIT

* PRTRACK

LIMIT

* GETESC

NOTESC * VFTRACK

VDONE STEPOUT VERIFY

#3 SECTORS+15 VFEXIT

SECTORS+ßB ;

VFEXIT #2 VFEXIT

#9 ERRNO DRIVEOFF

($28),Y

$c009 NOTESC $co19 #+$9B NOTESC

#5 ERRNO DRIVEOFF

*

#9

+#$0F SECSLEFT SECTORS,X

VFT1

#33 VFTRIES

RDADDR VFT4 VFTRIES VFT2

TRKFOUND TRNOW VFT5

=4 VFEXIT

SECFOUND SECTORS,X VFT3 VFSECTOR VFT3

ok.

"always"

; Annahme: allgemeiner Fehler Sektor $F ok?

nein Sektor ok?

Sektor $F ok, Sektor nicht: ERR#2

; RTS von da zu BASIC

; Character

innerhalb der Zeile

so lange, bis im Bereich 99-$27

"Print"

; Keyboard

; Keyboardstrobe löschen

ansonsten wird die Return- adresse heruntergeholt ERR#5: Abbruch

; bei <ESC>: zu BASIC

"noch" 16 Sektoren übrig

das Array "gefundene Sektoren" ; wird gelöscht

Zähler: jeder Sektor darf

maximal 2mal gelesen werden

aus

richtiger Track?

Armposition falsch:

zu hohe Tracknummer?

; ERR#4: Positionsfehler

gesetzt von RDADDR

schon gehabt

Daten verifizieren

gg/1 Jeyoad

GG

21CD: 21D®: 21D2: 21D5: 21D8:

21DA: 21DC: 21DF: 21E®:

Z1F3: 2lF5: 21F8:

2lFB: lFC: 21FE: 2201:

2203: 2206: 2208: 2ARDA: 2R2DC: 22OD: 2219: 2212: 2214: 2216: 2218: 221B: 221D: 221F: Berl: 2223: 2226: 2229: ZZZB: Z22C: RZZF: ARS2: 2234: 2aR3T: AZSA: ARSD: 22S3E: 2249: 2241:

2243: 2246: 2248: ZZAA: ZZAC: ARAD: 2259: 2252: 2254:

2256: 22ST:

2258:

AE

Ad sc AE

c8 Do EE Fo

BD 19 c9 EA BD 19 c9 AB BD 10 c9g A9 8D BD 10 2A 8D BD 19 2D 99 4D 88 19

D9

19 cg DO EA BD 19

D9

18 69

38

07 80 E3 E2

AA 6B

FC 5A 11)

95 5A 55

Sc FB D5 EF

5C 8C FB 5C D6 5B

E3

15

FB DE dc

8C FB AA 02

D3

21 >

21

22 03

22

c9

co

cp

22 cp

22 cp

22 #3

co

276 277 278 279 280 281 282 283 284 285 286 287 288 289 299 291 292 293 294 295 296 297 298 299 309 301 302 303 304 305 306 307 308 309 319 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

332 333 334 335 336 337 338 339 340 341 342 343 344

- VFTRIES SECSLEFT SECTORS 5

RDADDR

- ADTRY1

ADLD1

ADTRY2

ADLD2

ADLD3

ADDT®

ADDT1

ADDT2

ADTL2

ADERR

LDX LDA STA DEC BPL

LDA JSR CLC RTS

DS DS DS

EQU LDY ST! LDX

INY

SECFOUND +$89 SECTORS,X SECSLEFT VFT3

; noch Sektoren übrig?

#1. PRTRACK

J 16

*

#$FC

ADTRIES

SLOT16 ; Slot-Numnmer

BNE _ADLD1- —————

INC BEQ

LDA BPL CMP BNE NOP LDA BPL CMP BNE LDY LDA BPL CMP BNE LDA STA LDA BPL ROL STA LDA BPL AND STA EOR DEY BPL TAY BNE

BPL CMP BNE NOP LDA BPL CMP BNE

CLC RTS

SEC

ADTRIES ADERR

STROBE,X

ADLD1

+#$D5 ; $D5 ADTRY1

STROBE,X

ADLD2

#+$AA » $AA ADTRY2

+03

STROBE,X

ADLD3

+$96 ; $96 ADTRY2

#500

ADCHECK ; CHECKSUM STROBE,X

ADDTI1

ADTEMP erste Hälfte des Bytes STROBE,X ; zweite Hälfte

ADDT2

ADTEMP

ADDRBASE,Y ; Vol-Nr./Track/Sector ADCHECK

ADDT® zusammen mit CHECKSUM = 9? ADERR

ADTL1 +$DE ; $DE ADERR

STROBE,X

ADTL2

#+$AA ; $AA ADERR

- ADTRIES ADCHECK ADTEMP

* VFSECTOR

RDTRY1

RDLD1

RDTRY2

*

RDCHECK

WRTRACK

RTS

DS DS DS

EQU LDX LDY DEY BEQ LDA BPL CMP BNE NOP LDA BPL CMP BNE LDY LDA BPL CMP BNE

LDA BPL CMP BNE DEY BNE LDA BPL CMP BNE INY BNE

LDA BPL CMP BNE

LDA BPL CMP BNE NOP LDA BPL CMP BNE

CLC

* SLOTI16 +$29

RDERR STROBE,X RDLD1 +$D5 RDTRY1

STROBE,X RDLD2 #$AA RDTRY2 +$56

Slot-Nummer "Retries"

$AA

STROBE,X

RDLD3 #$AD RDTRY2

STROBE,X RDDT1 +$96 RDERR

RDDT1 STROBE,X RDDT2 +$96 RDERR

RDDT2

STROBE,X RDCHECK +$96 RDERR

STROBE,X RDTL1 +$DE RDERR

STROBE,X RDTL2 #$AA RDERR

SLOT16 DATA,X SREAD,X NOTWPROT

WREND

$AD

alle Sektoren sind leer, d.h. enthalten nur $96

zweiter Teil: "normale"

; die CHECKSUM ist

ebenfalls $96

Test auf "WRITE PROTECTED"

"WRITE PROTECTED" ! "always"

95

G8/2 199994

* NEXTSEC

* WRSECTOR

- ADDRLD

VOLNO ZVOLNO

#$ FF

SWRITE,X STROBE,X

+09 SECTOR TRNOW ZTRACK

#+$FF +$89

WRSECTOR

SECTOR #$19 #14 NEXTSEC

SREAD, X

STROBE,X

509 WRBYTE3 500 3309

$00 WRBYTEl

ADDRLD GAP13

$309 +$D5 WRBYTE3 #+$AA WRBYTELl +$96 WRBYTEL

ZVOLNO WRDB ZTRACK WRDB SECTOR WRDB VOLNO ZTRACK SECTOR

#+$AA DATA,X

STROBE,X

#+$AA WRBYTEI

+$DE WRBYTEL +$AA WRBYTELl +$EB WRBYTELl

#+$ FF

für Timing in WRITE

ab jetzt: Zeit läuft! erstes Sync-Byte

Timing...

Syncs in GAP 1

letzter Sektor fertig? 16 Syncs zwischen den Sektoren

zurück auf "READ MODE"

Aufruf mit Acc = $FF

GAP 1 und GAP 3: Y-Reg.

; bestimmt die Anzahl der ; Syncs

;‚ 4 usec ; $D5

; $AA

; $96

Volume-Nummer

; Track-Nummer

Sektor-Nummer

und CHECKSUM, erster Teil

CHECKSUM, zweiter Teil

; $DE

> $AA .

$EB

erstes Sync zwischen

2391: 2359: 235B: 235C: 235E: 2361: 2362: 2364:

2366: 2369: 236B: 236E: 2379: 2373: 23193

2378: 237A: 237D: 2ST7F: 2381: 2384: 2385: 2388: 2389: 238B:

238D: 2399: 2393: 2394: 2396:

2398: 23: 239D:

23AP: 23A2: 2345: 2347; 23AA: 23AC:

23AF: 23Bl: 23B4:

23B6: 23B8:

23BB: 23BC: 23BD: 2SBE: 2509: 2503: 23C6: 25C7: 23C9: 2SCB:

25CD: 2SCE: 2SCF: 23DP: 23D3: 23D6:

18 48 68 9D DD 69

07 09

00 CD

02 F6

99

AA CD AD CD

96 CD 55 9

F6

nn)

02 F5

09 96

DE CD AA CD EB CD

46 ul) 01)

FF Dp

AA sc AA

46 46

8D Sc

983 Bytes

23

03 23 23

23

253

03

23

03 25

03

25

23 23

25

03

25

cp

co co

486 487 488 489 490 491 492 493 494 495 496 497 498 499 599 501 592 593 594 505 506 597 508 509 51® 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 539 531 532 533 534 535 536 537 538 539 549 541 542 543 544 545 546 547 548 549 559 551 552 553 554

GAP2

* DATALD

WRDAT1

. WRDATZ

- DATATL

WRDB

. WRBYTEl WRBYTE2

WRBYTE3

LDY BIT NOP BIT JSR DEY BEQ BNE

BIT LDA JSR LDA JSR LDA JSR

LDA JSR LDY BIT BIT NOP JSR DEY BNE BIT

BIT JSR INY BEQ BNE

BIT LDA JSR

LDA JSR LDA JSR LDA JSR

INC BIT BIT

LDA JMP

NOP TAY LSR ORA STA CMP TYA ORA INC DEC

CLC PHA PLA STA CMP RTS

NTSDXU D

#7 309

509 WRBYTEl

DATALD GAP2

$399 #+$D5 WRBYTE3 #$AA WRBYTEL #$AD WRBYTELl

+$96 WRBYTELl +$55 $09 $399

WRBYTES

WRDAT1 309

$309 WRBYTES3

DATATL WRDAT2

$309 +$96 WRBYTE3

#+$DE WRBYTELl #$AA WRBYTELl +$EB WRBYTELl

SECTOR $309 $09

#$ FF WRBYTES

#+$AA DATA,X

STROBE,X

#$AA SECTOR SECTOR

DATA,X

STROBE,X

.

Address—- und Data-rFlelc

; + 7 weitere Syncs

..

..

“.

“.

4 usec $D5

$AA

$AD

ab hier weicht das Verfahren stark von DOS 3.3 ab!

die ersten $55 Bytes

("zusätzliche")

die nächsten $1ß® Bytes ("normale")

"CHECKSUM'"

$DE $AA

$EB

insgesamt 9 usec JMP(!) folgt

; erstes Sync nach Data-Field,

für Zeit in Haupt-Loop

für die zweite Hälfte

zweite Hälfte 5 usec 5 usec

usec usec usec usec usec

DB OB Oo

ZN MAGAZIN FÜR APPLE-COMPUTER

Ja, ich möchte peeker abonnieren.

Liefern Sie mir peeker ab Ausgabe .................- (1985 erscheinen 11 Ausgaben 1 Doppelnummer) zum Jahresbezugspreis von DM 72,- (Inland) incl. MwSt. Die Lieferung erfolgt frei Haus. Porto, Verpackung und Zustellgebühren übernimmt der Verlag. Der Jahresbezugspreis für das Ausland beträgt DM 72,- incl. MwSt., zzgl. DM 16,80 Versandspesen.

® E F

Ich wünsche jährliche Berechnung durch: [_] Verlagsrechnung [_] Abbuchung von meinem Bank- bzw. Postscheckkonto

Bank / PschA Bankleitzahl Kto.-Nr.

Datum Unterschrift

TIPP HPENER 94

MAGAZIN FÜR APPLE-COMPUTER

a Abo

Bitte senden Sie mir gegen Rechnung folgende Bücher:

-Shop

Datum Unterschrift

Für in ıterlag. A EEI . Folgende D Dis etten a | a ag best: |

a Buch

MAGAZIN FÜR APPLE-COMPUTER

© Bitte senden Sie mir

| e gegen Rechnung folgende Apple-Programme:

oO U] Peeker-Sammeldiskette, einzeln U] Apple DOS 3.3, Begleitdiskette, DM 28,—

Disk# ____—_, Disk# DJ Apple ProDOS, Band 1, Begleitdiskette,

Se Disk# ____—_, Disk# DM 28,—

a Preis je Disk DM 28,- (einzeln) DI en Band 2, Begleitdiskette, 5 U] Peeker Sammeldiskette, OD) Apple Assembler, Begleitdiskette, DM 28,- eo im Fortsetzungsbezug OD) ProDOS-Editor 1.0, Programm, DM 98,-

ab Disk # ___— U) MMU 2.0, Programm, DM 98,-

(Mindestbezug 6 Disketten) OD INPUT 2.0, Programm, DM 98,-

Preis je Disk DM 20,- OD) Softbreaker 1.0, Programm, DM 48,-

OD) DB-Meister, Programm, DM 290,-

| OD] Superplot, Programm, DM 48,-

42) [I Superquick, Programm, DM 48,—

E Datum Unterschrift

Firma

. Abteilung

Vertrauensgarantie:

Ich habe davon Kenntnis genommen, daß ich die Bestellung schriftlich durch Mitteilung an den Dr. Alfred Hüthig Verlag, Postfach 102869, 6900 Heidelberg 1 innerhalb von

7 Tagen widerrufen kann. Zur Fristwahrung genügt die

| rechtzeitige Absendung des Widerrufs (Datum des Poststempels).

Datum

Unterschrift

Verlagshinweis:

Das Abonnement verlängert sich zu den jeweils gültigen

Bedingungen um ein Jahr, wenn es nicht 2 Monate vor Jahresende schriftlich gekündigt wird.

Karte bitte vollständig ausfüllen

Karte bitte vollständig ausfüllen

Vorname, Name

Firma

Straße

Telefon mit Vorwahl

POSTKARTE

peeker Leserservice

Postfach 10 28 69 6900 Heidelberg 1

POSTKARTE

peeker Versandbuchhandlung

Postfach 10 28 69

6900 Heidelberg 1

POSTKARTE

peeker Softwareabteilung

Postfach 10 28 69

6900 Heidelberg 1

INPUT 2.0

Ein Bildschirm- Maskengenerator

für DOS 3.3 und ProDOS

vonU. Stiehl

1984, Diskette und Manual, DM 98,-

ISBN 3-7785-1021-5

„input 2.0° liegt wahlweise in der Bank 1 oder Bank 2 der Language Card und wird durch einen kurzen Driver in den unteren 48K aufgerufen.

Für jedes Feld der Bildschirmmaske lassen sich u.a. definieren: Feldiänge (bis zu 255 Zeichen) Vtab Htab Datentyp (insge- samt 8 Typen) - Scrollflag (starre oder dyna- mische Maske) Ctriflag Füllflag Lösch- flag Bildschirmflag (40- oder 80-Z-Darstel- lung). Innerhalb eines Eingabefeldes besteht jeder denkbare Redigierkomfort (Insert, De- lete, Rubout, Restore usw.). Gerätevoraussetzung: Apple Ile oder Ilc; fer- ner Apple Il+ im 40-Zeichenmodus

MMU 2.0

Memory Managements Utilities

für die Apple lie 64K-Karte

DOS 3.3 (und ProDOS)

von U. Stiehl

1984, Diskette und Manual, DM 98, - ISBN 3-7787-1023-1

Insgesamt enthält die neue „MMU 2.0"- Diskette über 25 Programme, die neue Einsatzmöglichkeiten für die Extended 80 Column Card (erweiterte 80-Z-Karte = 64K-Karte für den Apple Ile) erschließen. Ein Teil der Programme laufen auch auf dem Apple Ii Plus, doch ist „MMU 2.0" primär für 64K-Karte-Besitzer gedacht.

Gerätevoraussetzung: Apple Ile mit 64K- Karte oder lic

Softbreaker 1.0

Eine softwaremäßige Interrupt-Utility für die Apple lie 64K-Karte

vonU. Stiehl

1984, Diskette und Manual, DM 48, ISBN 3-7785-1022-3

Softbreaker ist ein Assemblerprogramm, mit dessen Hilfe Programme, die sich von der 64K-Karte (= Extended 80 Column Card für den Apple lle) starten lassen, unterbrochen, gespeichert, geladen und exakt an der Stelle der Unterbrechung fortgeführt werden kön- nen. Dadurch ist es auch möglich, Siche- rungskopien von sogenannten kopierge- schützten Programmen herzustellen.

Mit Softbreaker unterbrochene Programme werden komplett, d. h. die ganzen 64K ein- schließlich Language Card, in nur ca. 11 Se- kunden auf einer formatierten Diskette gesi- chert.

Gerätevoraussetzung: Apple Ile mit 64K- Karte

Hüthig Software Service, Postfach 10 28 69, D-6900 Heidelberg

Haben Sie Ihren Monitor schon „80-Zei- chen-getestet“? Was bei einer Darstel- lung mit 40 Zeichen pro Zeile noch ein Genuß für das Auge ist, kann bei 80 Zei- chen bereits zur Qual werden. Ein durch- schnittliches Fernsehgerät zeigt waag- rechte Tropfen und senkrechte Fädchen, ein Gleichheitszeichen mit einem Minus- symbol darunter entspricht dem großen E, die an den Ecken angeknabberten D er- scheinen wie O, Kleinbuchstaben sind noch schlechter zu erkennen. Qualitativ mittelmäßige Monitore lassen immerhin im Normalmodus ein einigermaßen ermü- dungsfreies Lesen zu, doch selbst gute bis sehr gute Monitore enttäuschen späte- stens bei inverser 80-Zeichendarstellung. Senkrechte Linien erscheinen nur hauch- dünn.

Wenn Sie Ihren Geldbeutel nicht mit dem Kauf eines teuren Spitzenmonitors bela- sten wollen, dann schlage ich Ihnen meine preiswerte Lösung vor. Ändern Sie den Zeichensatz der 80-Zeichenkarte. Schreibt man die senkrechten Linien über- proportional dick auf den Bildschirm, so erscheinen diese auf Grund der Unzuläng- lichkeiten des Systems gerade so breit wie die nicht geänderten, waagrechten Linien. Das im folgenden beschriebene Pro- gramm BITEDITOR unterstützt Sie beim „Umstricken“ Ihres Zeichensatzes.

Mein ursprünglicher Wunsch war es, das an meiner Arbeitsstelle viel benutzte Multi- plan auf den Apple-Il-Rechnern mit 80 Zeichen pro Zeile optisch so ansprechend laufen lassen zu können wie mit 40 Zei- chen, nämlich mit der Möglichkeit der in- versen Darstellung. Das Feld, in welches Sie bei Multiplan gerade schreiben, er- scheint invers. Bei 80-Zeichenkarten ohne inversen Zeichensatz wird das bearbeiten- de Feld durch Größer/Kleinersymbole ein- gegrenzt, welche aber Raum der Nachbar- felder beanspruchen und dort ein Zeichen unterdrücken. Besonders bei einigerma- Ben gefüllten Tabellen müssen Sie das so gekennzeichnete Arbeitsfeld erst mühsam suchen, während das inverse Feld sofort ins Auge sticht. Nach der Modifikation er- gibt sich durch die hardwaremäßige Um- schaltung zwischen deutschem und ame- rikanischem Zeichensatz für Multiplan ein weiterer Vorteil. Texte können mit dem deutschen Zeichensatz geschrieben wer- den, Formeln wirken wesentlich übersicht- licher mit den entsprechenden Klammern, welche ja dieselben ASCII-Werte wie die deutschen Sonderzeichen besitzen.

Auch Freunde des Applewriter werden dies zu schätzen wissen. Es muß nicht

Peeker 7/85

Technik 94

Bit-Editor

Zeichensatz-EPROMss für die Videx-Karte

mehr mühsam der Maschinencode ge- knackt und geändert werden, damit der richtige Zeichensatz angesprochen wird, sondern man wählt deutsch oder amerika- nisch mittels Schalter. Für Pascal gilt ähnli- ches wie für Multiplan, Texte in deutsch, übersichtliche Syntax mit amerikanischem Zeichensatz. Sinngemäß trifft dies auch für weitere Programme zu. In CP/M-BASIC entsprechen nun die Befehle INVERSE und NORMAL ihrer tatsächlichen Bedeu- tung.

Grundidee

Im allgemeinen zieren drei EPROMs das 80-Zeichen-Interface. In einem steht das Programm für die Karte, die beiden ande- ren enthalten den deutschen bzw. den amerikanischen Zeichensatz. Karten mit inverser Darstellungsmöglichkeit opfern einen der beiden länderspezifischen Zei- chensätze. Das Hin- und Herschalten zwi- schen den Zeichensätzen erfolgt soft- waremäßig, d.h. durch einen Befehl (z. B. Ctrl-Z 2, Ctrl-Z 3). Neuere 80-Zeichenkar- ten verwenden ein Zeichensatz-EPROM mit größerem Speicher. Es enthält den normalen und den inversen Zeichensatz desselben Landes. Der Befehl schaltet hier innerhalb des EPROMSs auf den ent- sprechenden Speicherbereich (normal oder invers). Meine Modifikation läßt sich prinzipiell bei allen Arten von Karten durchführen, wobei zwischenzeitlich eine Karte in ähnlicher Form am Markt erschie- nen ist.

von Joachim Klamt

Nach der Änderung werden die Zeichen- satz-EPROMSs 2716 (2K) durch die größe- ren 2732 (AK) ersetzt. In dem beim Ein- schalten aktivierten EPROM stehen der normale deutsche und amerikanische Zei- chensatz, im anderen durch Befehl an- wählbaren EPROM der inverse deutsche und amerikanische. Die jeweils höchst- wertige Adreßleitung A11 wird über einen gemeinsamen Pull-up-Widerstand an Vcc gelegt. Ein einpoliger Schließer genügt, um A11 an Masse zu legen, wodurch die andere Hälfte der EPROMs angesteuert und gelesen wird. So wählt der Schalter einen der beiden Zeichensätze, die Soft- ware entscheidet über normale oder inver- se Darstellung.

Die EPROMs 2716 und 2732 sind prak- tisch pinkompatibel. Lediglich die Leiter- bahnen zum Pin 21 (A11) sollten bei bei- den 2732 aufgetrennt werden, um A11, wie im Bild 1 gezeigt, neu zu verdrahten. Weitere Hardware-Änderungen sind nicht notwendig. |

Bild 1

29

Das Prinzip der 80-Zeichendarstel- lung

Jedem am Bildschirm dargestellten Zei- chen steht eine Matrix von 8 « 9 Punkten zur Verfügung. Ein Zeichen besteht somit aus 72 einzelnen Punkten, die sich auf 9 Reihen mit 8 Spalten verteilen. Man kann sich jede Reihe als 3stellige Binärzahl vor- stellen, wobei eine O einem nicht gesetz- ten Punkt entspricht ‘und eine 1 einem gesetzten. Für jedes Zeichen wird ein Be- reich von 16 8stelligen Binärzahlen reser- viert, wobei nur die ersten 9 ausgewertet werden.

Das Betriebssystem der Karte (Programm- EPROM) veranlaßt das Auslesen der ent- sprechenden 9 Werte aus dem Zeichen- satz-EPROM und deren punktweise Dar- stellung am Bildschirm.

Die neue softwaremäßige Umschaltung zwischen normaler und inverser Anzeige tritt an die Stelle der bisherigen länderspe- zifischen Zeichensatzumschaltung. Ein einmal invers geschriebener Text bleibt als solcher am Bildschirm erhalten, es sei

Foto A: Normaler Zeichensatz. Ein billiger Monitor in üblicher Einstellung zeigt bei 80-Zeichendarstellung dieses „beschei- dene“ Bild.

. NalBrEte..B°

208 z8327710° > Eirze.nr Sei

... „nn. - = “>

Foto B: Normaler Zeichensatz. Der Moni- tor ist für 80-Zeichendarstellung „optimal“ eingestellt, jedoch dann nicht für 80 Zei- chen invers.

30

denn, man überschreibt ihn im Normal- modus.

Neue Zeichensatz-EPROMs

Wie ändere ich nun die Zeichensätze in den EPROMSs? Falls Sie nicht gerade ei- nen völlig neuen Zeichensatz kreieren wollen, so empfehle ich Ihnen folgende Methode. Lesen Sie die alten EPROMSs, z.B. mit einem EPROM-Brenner, und spei- chern Sie die Inhalte als Binär-Files auf Diskette. Mit dem Programm BITEDITOR können Sie die Zeichensatz-Files nach Wunsch ändern, wieder auf Diskette schreiben und neue EPROMs schießen. Sie ersetzen Ihre alten Zeichensatz- EPROMs der 80-Zeichenkarte durch die neuen und können diese mit BITEDITOR testen (Menüpunkt TEST 80 Z). Wenn Sie den bis jetzt geänderten Zeichensatz-File laden, können Sie noch weitere Korrektu- ren vornehmen und wieder neu brennen. Verlieren Sie nicht den Mut, wenn Sie immer wieder einen Buchstaben entdek- ken, der Ihnen so noch nicht gefällt: än- dern und neu brennen.

Ich habe nach wenigen Tagen den inver- sen Zeichensatz um eine Matrixlinie tiefer gesetzt. Die Unterlängen sind jetzt zwar kürzer, dafür kleben die inversen Zeichen nicht kontrastarm am oberen Zeilenrand. Sie werden oben und unten durch eine durchgehende Linie abgegrenzt, selbst dann, wenn ober- und unterhalb der Zeile keine inverse Darstellung erfolgt. Lediglich die Unterlängen reichen dann bis an den unteren Rand des Feldes. Die alphanume- rischen Zeichenbereiche, die Sie tiefer setzen wollen, laden Sie einfach mit BLOAD um eine Adresse nach oben ver- schoben in den Speicher des Rechners. Später habe ich dann auch den normalen Zeichensatz tiefer gestellt, damit normale und inverse Darstellung innerhalb einer Zeile auf einer Linie liegen. Ein Verschie- ben des Bereiches mit den Grafiksymbo- len erscheint nicht sinnvoll, da diese bis an die Ränder der Matrix reichen sollen. Nur so können bei der Aneinanderreihung durchgehende Figuren entstehen. Ähnliche Überlegungen habe ich auch an- gestellt für ein seitliches Verschieben in- nerhalb der Matrix nach rechts. Links ha- ben mehr Buchstaben einen senkrechten Strich als rechts. Der Kontrast zum nicht inversen Nachbarfeld bleibt öfter gewahrt, wenn die Buchstaben nicht linksbündig mit dem inversen Feld beginnen, sondern rechtsbündig mit diesem enden. So ent- stand das Unterprogramm „nach rechts verschieben“, welches vom Menü aus mit

VERSCHIEBEN aufgerufen wird. Das von BITEDITOR gerade angezeigte Zeichen wird um eine Matrixspalte nach rechts ver- schoben. Durch Einbinden in eine FOR- NEXT-Schleife könnten auch ganze Berei- che verschoben werden.

Der Versuch hat jedoch gezeigt, daß Zei- chen nicht sauber geschrieben werden, wenn sie bis an den rechten Rand der Matrix reichen. Selbst der normale, nicht fette Zeichensatz leidet darunter. Tatsäch- lich werden nämlich nicht 8 & 9, sondern nur 7 #9 Punkte der Matrix zur Zeichenbil- dung herangezogen. Die 8. Spalte kann zum Zeichenabstand gerechnet werden. Meine Änderungen beschränken sich des- halb auf ein Tieferstellen des normalen und inversen Zeichensatzes sowie auf das Verbreitern der senkrechten Zeichenantei- le des inversen Zeichensatzes. Zeigt Ihr Bildschirmgerät bereits den normalen Zei- chensatz schlecht an, so sollten Sie auch diesen fett brennen. Sie können ihn leicht durch Invertieren des inversen, fetten Zei- chensatzes gewinnen. Durch Aufruf des Menüpunktes ?TINVERTIEREN (I = Ctrl-I) wird der gesamte Zeichensatz-File im Speicher invertiert.

Haben Sie Ihren deutschen Zeichensatz wunschgerecht erstellt, so laden Sie ihn hinter sich selbst in den Speicher (ab $5800) und ändern mit BITEDITOR die deutschen Sonderzeichen in die amerika- nischen. Dabei sollte auch die Programm- variable FL$ = “800“ (Zeile 4700) in FL$ = *1000° geändert werden, damit die hin- tereinander geladenen Files als ein einzi- ger behandelt werden. Sie sollten nun zwei Files von je 18 Sektoren erstellt ha- ben. Im ersten stehen der deutsche und amerikanische Zeichensatz in normaler Ausführung, im zweiten beide Zeichensät- ze invers.

n wesentlichen erlaubt -+ Punkte der Natrix setzen oder löschen (Andern bzu. Neuerstallen von Zeichen) -> INVERTIEREN des gesanten Zeichens -> Verschieben einzelner Zeichen nac {nur bedingt ratsar)

ss Harr . ng ın+ MIIENITAD Fr war

„u? caran ." - |; 2 eRTiIic 3

* en

-

2

= a Er

”» Zei

>

Foto C: Fetter Zeichensatz. Darstellung am gleichen Monitor bei Verwendung des mit BITEDITOR verbesserten Zeichen- satzes.

Peeker 7/85

Foto D: Fett-inverser Zeichensatz. Die deutlichste Verbesserung zeigt sich bei der Darstellung des inversen Zeichensat- zes im 80-Zeichenmodus. Der nicht fette Zeichensatz war am Foto praktisch unle- serlich.

Die Bedienung des Programms

Das Applesoft-Programm BITEDITOR bie- tet im wesentlichen folgende Optionen:

® Punkte der Matrix setzen oder löschen (Ändern bzw. Neuerstellen von Zeichen), ® Invertieren des gesamten Zeichen- satzes,

® Verschieben einzelner Zeichen nach rechts (nur bedingt ratsam).

Ein versehentliches Verlassen des Pro- gramms ist völlig unproblematisch, da die zu editierenden Zeichensätze nicht als Va- riablen des BASIC-Programms existieren, sondern als Binär-Files in den Rechner geladen werden. Auch das Ändern von Programmzeilen beeinflußt daher die Zei- chensätze nicht.

Nach dem Starten des Programms er- scheinen Hauptmenü und Arbeitsfeld (Bild 2) auf dem Bildschirm. Die Menü- punkte werden durch Eingabe des 1. Buchstabens aufgerufen:

LADEN - Sie werden nach dem Namen des zu ladenden Zeichensatz-Files ge- fragt. Der File steht danach im Speicher ab der Adresse $5000 (FS$ = "5000*).

SPEICHERN - Sie können einen Namen eingeben, unter welchem Ihr geänderter Zeichensatz-File abgespeichert wird; <RETURN> allein übernimmt den beim Laden angegeben (VORGABE) Namen. Achten Sie auf die Größe der Variablen FL$, damit Sie den gesamten File sichern. # HEX-ADR - Durch die direkte Eingabe einer Hexadezimaladresse im Bereich von $5000 bis $6FFF werden die Speicherin- halte ab dieser Adresse angezeigt. Die Zeichen erscheinen immer richtig in der

Peeker 7/85

nachgebildeten Matrix, wenn die rechte Stelle der Hexadezimalzahl O ist. Die Län- ge des anzuzeigenden Bereichs legt die Variable LG (LG = 9) fest. Die Bildschirm- aufteilung läßt Werte von 1 bis 16 zu.

Die Intervallvariable IV (IV = 16) gibt an, daß nach jeweils 16 Adressen der Bereich des nächsten Zeichens beginnt. Pfeiltasten Mit den Pfeiltasten kann vor- wärts und rückwärts „geblättert” werden. Das geschieht durch Erhöhen oder Er- niedrigen des Wertes für die momentan gültige Adresse um den Betrag IV. Der Inhalt des neuen Bereiches wird im Bitmu- ster-Fenster angezeigt.

LEERTASTE - Mit der Leertaste invertie- ren Sie das Feld unter dem Cursor und können somit Zeichen punktweise ändern. IJKM- Das Bitmuster liegt innerhalb des Rahmens aus Sternchen. Das Pluszeichen ersetzt den blinkenden Cursor, welcher ja nicht erkennen ließe, ob an seinem Platz ein normales oder ein inverses Feld steht. I, J, K und M führen den Cursor wie im ESC-Modus in Applesoft.

NEUSTART - Gefallen Ihnen Ihre Ände- rungen nicht, so wird sofern noch nicht <RETURN> gedrückt wurde mit NEU- START das unveränderte Zeichen aus dem Speicher geholt und zur Anzeige ge- bracht.

<RETURN> Das geänderte Zeichen wird mit <RETURN> wie am Bildschirm sichtbar in den Rechnerspeicher über- nommen.

ADRESSE INHALT BITMUSTER

FKFRRFRHRRR

*r+

* HERER

"RR * SHBuE 8

& u REBAB Karsanıne

FS$=5R008

Bild 2

FL+=808

TECHNIK 9.4

WERTEAUSGABE - Bei Wahl des Menü- punktes WERTEAUSGABE erscheinen in der ersten Spalte des Arbeitsfeldes ADRESSE alle Adressen, sowie in der zweiten Spalte INHALT deren Werte. Die Umwandlungsroutinen am Anfang des Programms (HEX-DEZ und DEZ-BIN) las- sen sich leicht in andere BASIC-Program- me einbinden.

VERSCHIEBEN Das angezeigte Zei- chen wird um eine Matrixspalte nach rechts verschoben. Die Informationen der Spalte rechts außen erscheinen in der er- sten Spalte links.

!INVERTIEREN - Bei Eingabe von Ctrl-I wird, wie schon erwähnt, der gesamte Zei- chensatz invertiert. Ein inverser Zeichen- satz wird dabei in einen normalen verwan- delt. Der Bereich beginnt bei FS$ und endet bei (FS$ + FL$).

TEST 80 Z - Hierbei wird die 80-Zeichen- karte eingeschaltet. Sie können jetzt Zei- chen per Tastendruck eingeben. Steckt ein bereits mit BITEDITOR geändertes EPROM in der installierten 80-Zeichenkar- te, so können Sie Ihre Änderungen aus- werten und nach dem Zurückschalten ins Hauptmenü eventuelle Korrekturen vor- nehmen. Sie ändern dabei natürlich nur den Zeichensatz-File im Rechner. Die nächste Auswertung kann erst nach er- neutem Brennen des EPROMSs erfolgen.

Die Kopfzeile zeigt drei mögliche Befehle an. Ctrl-I und Ctri-N schalten auf inverse

KOMMANDOS 1. BUCHSTA-) BE EINGEBEN) LADEN | SPEICHERN

# HEX-ADR au, LEERTASTE 3x

'NEUS” ART. SRETURND WERTEAUSGABE

%* * * * * x | * * *

_QUITTIEREN

LG=9 Iveie

Lesen Sie weiter auf Seite 50

31

Verkauf Software

Pascal-Toolbox und Anwen- dersoftware billig abzugeben. Info gegen Rückporto von Ernst Heinz Püttkampsweg 13, 2 Hamburg 52

Intelligenz-Test (lQ@) für +/e/c, Disk mit ca. 170K Daten für 30 DM per Nachnahme bei: Frank Knab 6500 Mainz 43 Oppenheimer Str.37

APPLE Il: ’GIANT WORLD’ ist da!! x Das neu Top-Adventure mit x * Spitzengrafik für riesigen x * Spielspaß! Es lohnt sich! x Für nur 89,— DM Vorkasse o.NN bei #+* FANTASTIC-Software xxx x** Grasweg 7, 2857 Langen 3 xx

AWII-Manual (dtsch) + WPL DM 25 Privat-Dater (dBASE) DM 80, Biorhythmus (prof) DM 120 bei: Geßner, Haus 70, 8431 Kot- tingwörth Tel: 084 61/84 53

Über 100 HGR-Farben, HGR- Schrift in bel. Größe DM 40,- 0261/63586

*x* Apple Il Steuer xx ersetzt alle Lohn- u. Eink. Steuertabellen + unbegrenzte Beträge und Kin- der + Länderanpassung Kirchen- steuer DM 120,- f. 1985 mit Nach- lieferung 1986; Info kostenlos; W. Hagenmaier * Malerwinkel 7 8087 Türkenfeld x

Verkauf Hardware

256 K RAM Karte AP 17 IBS 599 DM ESW 103 VHB Tel: 0521/ 870424

== BRUNDW

== Büroelektronik 1 Berlin 30 : ® 0 30-26 111 26

Keithstr. 26 -

Bitte verwenden Sie für Kleinanzeigen

die vorgedruckten Antwortkarten in diesem Heft.

32

Apple Ilc, kompl. incl. ausführl. Literatur zu verk. DM 2500,— Tel: 021 61/4 1460.

Fernschreiberinterface am Gameport m. Programm DM 79,- P. Benner, Hubertusstr. 131, 4150 Krefeld

MACINTOSH 128KB 2 Mon. alt VHB DM 6100,. Tel: 061 21/ 461371

EPROM’S 2716 & 8 DM RAM'’s 4116-2 43 DM Tel: 06251/69742.

Verkaufe 128K Mac, Imagew- riter, 2 Lfw. + umfangreiche Soft- ware (Originale) auch getrennt. v. Wennstein, Postf. 2057 Wentorf

TEAC 55F 560,— 55B 515,- * SSDD 10 St 42,- 96 tpi DS 78,— Lochverst. europ. Markenw. & Box Rglas. Schl. für 40-42,- für 80- 49,— * Monitore 18Mhz 12” entsp. gr. ab 298,—. VICO,

Selchower Str. 31, 1000 Bin 44

*x**+* Apple Supermodem xxx* V21, V23 und Bell, 300-1200 Baud komplett auf einer Karte, mit Software startfertig nur 398 DM. Rolf Kiupel, Tel. 04 31/55 54 27

Apple Il+ und Zubehör: Apple II+ 48K 900,-, 16KRam 80,-, Ori- ginal Pal-Karte 190,-, Pal-Karte 90,— Accelerator Il 790,-, alle Prei- se VHB. Tel: 06221/74832 oder 07 21/3739 14.

256K-RAM Karte für Apple II/BASIS mit Treibersoftware DM 700,— W. Porten, 0221/35 1751.

MACINTOSH 512K-Erweite- rung 890 DM 6 Mon. Garantie; 24 Stunden Service Händleranfr. erwünscht P. Clotten Remystr. 5; 5413 Bendorf 0 26 22/54 58

PEEkeR

-= RUND

4 Büroelektronik GmbH Bachstr. 104 : 2 HH 76 : ®& 0 40-220 1155

Börse

MACINTOSH 512K-Erweite- rung 6 Mon. Garantie; 24 Stun- den Service Händleranfr. er- wünscht P. Clotten Remystr. 5; 5413 Bendorf 062 22/54 58

Verk. Apple Il+ mit 2 Disk Il, Contr., Monitor, Softw., VP 2000 Fr. Tel. 056/9635 75 Schweiz b. Baden.

RAMKARTE (BASIS) 108/ APPLE) 256KB für 650,— DM - 1 EHRING-CONTROLLEER für

2x80TR. 130,- Tel: 0201/ 502192 Verkaufe Typenraddrucker

Silverreed EXP 500 DIN A4 quer wenig gebraucht. Evtl. mit para. Int. VB 1100 DM,

Tel: 02122/55529

Kennen Sie den Macintosh? Können Sie ihn programmieren und haben Sie interessante Ideen, dann sind Sie der richtige Partner für uns. Wir vermarkten Ihre Pro- gramme bundesweit oder ertei- len Programmieraufträge. Chiffre P1002

Anwendersoftware für Handwerk Tischlerei, Fenster- bau, 7 Mitarb. gesucht. DOS-PRO- DOS- oder CPM Angebote an Heinz Heubrock Osterbauer 101, 4715 Ascheberg

(=

KRRKKRKKRKRKRRKRRRRR

Floppysubsystem für Apple Il

2 x 3,5" TEAC FD-35F max. 2 x 1MB Autopatch-Coniroller inkl. Manual und SW ALU-Profil-Gehäuse m. Netzt. komplett anschlußfertig nur DM 2398,—

DIL 2 2 2 2 > 2 > 2 > > 2 25 Telekommunikation

Anschlußkabel Dataphon S21d Terminalsoftware komplett anschlußfertig nur DM 398,—

KRRRRKRRRKRRRRRRKR

TISCH & ZETTL GdbR Elektronicveririeb Rosenstr. 33, 8034 Germering Telefon 089/841 68 17

KRHKRKFKKHKKRKRRRRK

KKRKKKKKKKKRRR KRHRRRKRKKKKRR

KAKKKKKAKRKHRKRR

KRHKKKKHKRKKKKKKKRRR

KKARKKRK

Suche amerikanische Aktienkurse auf Datenträger. Zeitraum 1978 heute. Angebote an Tel. 07251/ 103068, H. Britting.

Ihr apple Partner in der Schweiz C&L Computershop Zentralstraße 93

5430 Wettingen

Verlangen Sie unseren ungewöhn- lichen Versandkatalog.

Progr. Ihre Eproms; 2508- 2564 u. 27 16-2 7128;

0 89/68 53 36

MC 3470 (der Leseverstärker auf dem Analogboard): DM 10,-, A. Deckers, PF 967, 7 Stuttgart 1

MAC mit Programmen sucht MAC ohne Programme! E. Schrei- ber 2070 Ahrensburg

1 Preisliste i kostenlos! Katalog DM 2,—

Unser Angebot im Juli

Chinon Laufwerk

(Test peeker 5/85) DM 398,-

Profimax Ill

Lazar Ilze, Test peeker 6/85)

DM 1248,—

D.O.S. Computersysteme Am Kühnbach 42, 7170 Schwäbisch Hall 11 Telefon (0791) 51736

Peeker 7/85

Ulrich Stiehl

6502 leicht gemacht

Teil 1

1 Warum dieser Beitrag geschrieben wurde

Ziel dieses Beitrags ist es, den Assem- bler-Neuling mit der Programmierung des 6502-Prozessors vertraut zu machen. Dabei stand nicht die Vollstän- digkeit, sondern eine ballastfreie Glie- derung im Vordergrund. Der in der Apple II Familie enthaltene 6502 eignet sich aus verschiedenen Gründen für die ersten Gehversuche in der Assembler- programmierung:

- Der Befehlssatz dieses Prozessors ist vergleichsweise einfach zu erlernen. Dieser Prozessor ist weitverbreitet und findet nicht nur im Apple, sondern z.B. auch in vielen Commodore Rech- nern Anwendung.

Lehrbücher über Maschinensprache sind leider in der Regel völlig undidak- tisch aufgebaut und beginnen meist mit der Binärmathematik, die für den Anfän- ger naturgemäß zunächst ein Buch mit sieben Siegeln ist. Deshalb sind viele

Assembler-Anfänger frustriert und mei-

nen, daß Maschinensprache nur etwas für „Eingeweihte“ sei. In Wirklichkeit ist Assembler nicht wesentlich schwieriger als eine Hochsprache wie BASIC. Wäh- rend jedoch z. B. BASIC sofort „Erfolgs- erlebnisse‘“ vermittelt, dauert es in As- sembler relativ lange, bis „sinnvolle“ Programme geschrieben werden kön- nen. Dies rührt daher, daß aus Sicht der Maschinensprache BASIC-Befehle stets Makrobefehle sind, d. h. ein BASIC- Befehl wie HOME (= lösche den Bild- schirm) setzt sich in Wirklichkeit aus zahlreichen elementaren Maschinenbe- fehlen zusammen, die isoliert betrachtet keine sinnvollen Aufgaben zu erfüllen scheinen. Maschinensprachlich gese- hen besteht die Aufgabe des HOME-Be- fehls darin, in jeder einzelnen Zelle des Bildschirmspeichers eine Leertaste zu

Peeker 7/85

speichern und anschließend den Cursor in Zeile 1, Spalte 1 zu positionieren. Beim Apple ist der Bildschirmspeicher kein homogener Block, so daß kompli- zierte Algorithmen angewandt werden müssen, um versehentliches Löschen von Speicherbereichen, die nicht zum Bildschirm gehören, zu vermeiden. So wird verständlich, daß die Assembler- Programmierung des HOME-Befehls bereits ein größeres Unterfangen dar- stellt.

2 Wann ist das Programmieren in Assembler vorzuziehen?

Assembler-Programme sind fast immer erheblich kompakter und schneller als die entsprechenden Programme in ir- gendeiner höheren Programmierspra- che. Dies liegt in der Tatsache begrün- det, daß ein Computer grundsätzlich nur Maschinenbefehle versteht. Bei einer Interpreter-Sprache wie BASIC muß der Interpreter jeden Befehl des BASIC- Quellenprogramms zunächst in eine Ma- schinenbefehlssequenz transformieren und diese dann ausführen. Bei einer Compiler-Sprache wie PASCAL übri- gens lassen sich auch BASIC-Pro-

gramme kompileren erfolgt die Um- wandlung in Maschinenbefehlssequen- zen durch die Kompilation. Da dies je- doch ein mechanischer „Schema F“- Prozeß ist, entsteht ein aufgeblähtes, umständliches Maschinenprogramm, das wesentlich mehr Speicherraum ein- nimmt und erheblich langsamer abläuft als das entsprechende reine Assembler- Programm.

Grundsätzlich empfiehlt sich das Pro- grammieren in Assembler stets dann, wenn maximale Kompaktheit und/oder maximale Geschwindigkeit des Pro- gramms erforderlich sind. Ferner ist As- sembler angebracht, wenn die Hoch- sprache(n) nicht über diejenigen Befehle verfügen, die zur optimalen Lösung einer Programmieraufgabe erforderlich sind.

Die beiden Applesoft-BASIC-Beispiele in Tabelle 1 veranschaulichen den Zeitge- winn bei Verwendung der Assembler- Sprache. Bei Programm 1 handelt es sich um ein Zählprogramm mit Integer- Zahlen. Da z.B. der TASC-Compiler (ein Compiler für den Apple Il Plus) über echte Integer-Arithmetik verfügt, ist das entsprechende Assembler-Pro- gramm „nur“ neunmal schneller als die TASC-Version.

Tabelle 1: Geschwindigkeitsvergleich (Dauer in Sekunden)

Programm Assembler 1 5 2 .25

10 REM PROGRAMM 1

USA =1YE% =;10009

30 FORC = S% TO E% : REM START BIS ENDE

40 A% = C + E% : REM ADDIERE ZÄHLER ZU E%

50 NEXT

TASC-Compiler Hayden-Compiler

Applesoft

155 38 23 64 10 REM PROGRAMM 2 20:5%: =: B192: E% =:24575: Zr =D 80 FORC = S% TO EA 40 POKE C,Z% : REM LÖSCHE SPEICHERSTELLE 50 NEXT

33

NUL @8$ A

B

C

ker 2 E

F

BEIL 6 Re H TAB: 3 | J t K FF L RIN M so N SI o P KON: R

XOFF S R

_ U V

W

X

Y

zZ a

U

t

I

4

$

%

&

(

)

.

/

0

1

2

3

4

5

6

7

8

9

5

?

34

01 02 03 04

05

07 08 09 OA 0B 0C OD OE OF 10 11 12 13 14 15 16 17 18 19 1A 1B is 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3 3D 3E 3F

00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101

‘00110110

00110111 00111000 00111001 00111010

00111011

00111100 00111101 00111110

00111111

000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049

050

051 052 053 054 055 056 057 058 059 060 061 062 063

u A TCo>N<XF<cIHR2D BT HOZZrR- "IH IT no oO U >>

Im

nnd SS © Ei a Mine var Zt FE lin, ee Sr. > Min m BE, = Sehe Shen Wr hr © Are 7

w) m -

40 41 42 43 4 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D SE Sr 60 61 62 63 64 65 66 67 68 69 BA 6B 6C 6D BE 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D TE 7F

ASCII-Tabelle

01000000 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100

01010101

01010110 01010111 01011000 01011001 01011010 01011011 01011100 01011101 01011110 01011111 01100000 01100001 01100010 01100011

01100100.

01100101 01100110 01100111 01101000 01101001 01101010 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 01111111

064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085

086

087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

0 SEP FETT IED DI DO ZELTEN EDER ET

oo PROD—- DO.

BR AN

80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8r 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F AO A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF BO B1 B2 B3 B4 B5 B6 B7 B8 BI BA BB BC BD BE BF

10000000 10000001 10000010 10000011 10000100 10000101 10000110 10000111 10001000 10001001 10001010 10001011 10001100 10001101 10001110 10001111 10010000 10010001 10010010 10010011 10010100 10010101 10010110 10010111 10011000 10011001 10011010 10011011 10011100 10011101 10011110 10011111 10100000 10100001 10100010 10100011 10100100 10100101 10100110 10100111 10101000 10101001 10101010 10101011 10101100 10101101 10101110 10101111 10110000 10110001 10110010 10110011 10110100 10110101 10110110 10110111 10111000 10111001 10111010 10111011 10111100 10111101 10111110 10111111

128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

162°

163 164 165 166

167

168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

ns 0 [u co» N<Xs<cHV DH VOZZTrA--IONMIOU>“

a a

177 EIERN. BT EEE EEE NETTE TE IE 20 T—€—

O m

co

C1

C2 C3 C4 C5 C6 C7 C8 c9 CA CB

CC CD

CE CF DO D1

D2 D3 D4 D5 D6 D7 D8 DI DA DB

DC DD

DE DF EO E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED FE Sr FO Ft F2 F3 F4 F5 F6 F7 F8 Fg FA FB FC FD

"FE

FF

11000000 11000001 11000010 11000011 11000100 11000101 11000110 11000111 11001000 11001001 11001010 11001011 11001100 11001101 11001110 11001111 11010000 11010001 11010010 11010011 11010100 11010101 11010110 11010111 11011000 11011001 11011010 11011011 11011100 11011101 11011110 11011111 11100000 11100001 11100010 11100011 11100100 11100101 11100110 11100111 11101000 11101001 11101010 11101011 11101100 11101101 11101110 11101111 11110000 11110001 11110010 11110011 11110100 11110101 11110110 11110111 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111

192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Peeker 7/85

Bei dem Programm 2 geht es um das Lö- schen eines Speicherbereiches (ähnlich wie bei Eingabe von HOME). Hierfür gibt es jedoch keinen entsprechenden BASIC-Befehl, so daß eine umständliche Simulation mit der POKE-Anweisung er- forderlich ist. Infolgedessen ist die Assembler- über 50mal schneller als die TASC-Version.

Per Umkehrschluß läßt sich aus diesen beiden Beispielen folgern, daß Assembler-Programmierung stets dann überflüssig ist, wenn die Hochsprache exakt über diejenigen Makrobefehle ver- fügt, die maschinensprachlich ausge- führt werden sollen. So führt z. B. die Assembler-Programmierung des HOME- Befehls zu keiner Geschwindigkeitsstei- gerung, da dieser bereits als Maschinen- routine vorliegt, die der BASIC- Interpreter lediglich aufzurufen braucht.

3 Dezimale und hexadezimale Zahlen

Dezimale Zahlen haben die Basis 10 und setzen sich aus den Ziffern 0, 1,2, 3, 4,5, 6, 7, 8, 9 zusammen.

Die Dezimalzahl 123 bedeutet 1 2 g

18-1 +10'-2 + 10-3 = 123 dezimal

Hexadezimale Zahlen haben die Basis 16 und setzen sich aus den Ziffern 0, 1,2, 3, 4,5,6, 7,8, 9,A,B,C,D, E, F zusam- men.

Die hexadezimale Zahl $123 bedeutet 1 | 2 3

18:1 +: 16'-2+ . 1093 = 291 dezimal

Hexadezimalen Zahlen wird üblicherwei- se ein Dollar-Zeichen vorangestellt, um Verwechslungen mit Dezimalzahlen zu vermeiden. Tabelle 2 gibt den Zusam- menhang zwischen Hexadezimal- und Dezimalzahlen sowie die entsprechen- den ASCII-Zeichen (American Standard Code for Information Interchange) für den Bereich 0 bis 255 wieder. Wenn Zah- len im Bereich von $100 (dezimal 256) bis $FFFF (dezimal 65535) umzuwandeln sind, hilft folgender Algorithmus weiter.

Beispiel:

$ABCD

Aufspaltung: AB + CD

Addition: 171-256 +.205-1 = 43981 dezimal

(Das binäre Zahlensystem wird erst spä- ter eingeführt.)

Peeker 7/85

4 Byte, Register, Adresse und Befehl

Byte

Ein Byte läßt sich definieren als eine he- xadezimale Zahl im Bereich $00 bis $FF (dezimal O0 bis 255) und setzt sich aus 2 hexadezimalen Ziffern, Halbbytes oder Nibbles zusammen. Z. B. besteht das By- te $AB aus dem höherwertigen (= lin- ken) Nibble $A und aus dem niederwerti-

gen (= rechten) Nibble $B.

Register

Alles was in einem Mikrocomputer ge- schieht, geschieht durch den Mikropro- zessor. Zur Vereinfachung nehmen wir zunächst an, daß der 6502 aus drei Regi- stern oder Mikroprozessor-Speicherstel- len besteht, die Bytes laden, speichern oder sonstwie manipulieren können. Die- se drei Register heißen:

A oder Akkumulator X oder Index Register X Y oder Index Register Y.

Adresse

Der Speicher (RAM = Lese-Schreib- Speicher, ROM = Nur-Lese-Speicher), der vom 6502 adressiert werden kann, läßt sich anschaulich als eine Kette von $10000 oder 65536 Zellen (Speicherplät- zen oder Speicherstellen) vorstellen, von denen jede einzelne 1 Byte enthalten kann. Diese Speicherstellen sind von $0000 bis $FFFF (0 bis 65535) numeriert. Die Adresse ist die Nummer einer Spei- cherstelle. Es ist wichtig, zwischen der Nummer einer Speicherstelle und ihrem Wert bildlich zwischen der Hausnum- mer und dem Inhalt des Hauses zu un- terscheiden. Z. B. kann die Speicherstel- le $00FF das Byte $AA und die Speicher- stelle $00AA das Byte $FF enthalten.

Eine Adresse umfaßt beim 6502 grund- sätzlich 2 Bytes. Beispielsweise besteht die Adresse $100A aus dem höherwerti- gen (= linken) Byte $10 und dem nieder- wertigen (= rechten) Byte $0A. Zusam- menfassend gilt:

a) Eine Speicherstelle enthält 1 Byte ($00 $FF)

b) Eine Adresse umfaßt 2 Bytes ($0000 =iSFFFP).

(Als Sonderfall kann im Bereich $0000 $00FF eine Adresse auch durch 1 Byte ausgedrückt werden. Weil hier das hö- herwertige Byte implizit null ist ($00), wird dieser Bereich als Zero-Page oder Nullseite bezeichnet.)

Befehl

"Ein maschinensprachliches Programm

ist eine Folge von Befehlen. Der Befehls- satz des 6502 Mikroprozessors umfaßt 56 verschiedene Anweisungen. Der Zweck des Prozessors besteht darin, die- se zu dekodieren und auszuführen. Bei den meisten Befehlen wird der Inhalt ei- ner Speicherstelle durch einen Register- inhalt verändert und umgekehrt.

5 Laden und Speichern

LDA = Load Accumulator = Lade den Akkumulator mit dem Inhalt, der sich in einer bestimmten Speicherstelle befin- det, und

STA = Store Accumulator = Speichere den Inhalt des Akkumulators in eine be- stimmte Speicherstelle

sind Beispiele von 6502 Befehlen. Die In- struktionen LDA und STA lassen sich wie folgt verdeutlichen:

LDA $035A lädt den Akkumulator mit dem Byte, das sich in der Speicherstelle $035A befindet (z.B. $FF). Nach dem La- devorgang befindet sich im Akkumulator dann das Byte $FF; gleichzeitig bleibt $FF in der Speicherzelle $035A erhalten (Abbildung 1a).

STA $0361 überträgt den Inhalt des Ak- kumulators (jetzt $FF) in die Speicher- stelle $0361; $FF bleibt gleichzeitig im Akkumulator erhalten (Abbildung 1b).

Lade- und Speicherbefehle verändern so- mit den Inhalt der Speicherzelle, aus der geladen wird, nicht. (Zum „Löschen“ ei- ner Speicherstelle muß in ihr $00 gespei- chert werden.)

Die Befehlssequenz LDA $035A STA $0361 stellt das Maschinenprogramm dar und muß selbst irgendwo im Spei- cher abgelegt sein, z. B. ab Adresse $0300 (Abbildung Ic). Trifft der Mikropro- zessor auf das Byte $AD in Speicherstel- le $0300, dekodiert er $AD als LDA- Befehl und faßt die nachfolgenden 2 Bytes als Adresse auf, die beim 6502 stets „umgedreht“ sind („low byte first“), also AD 5A 03 statt AD 03 5A.

Nach Ausführen dieses Befehls (soge- nannter 3-Byte-Befehl: 1 Byte für Be- fehlscode + 2 Bytes für Adresse) ge- langt der Mikroprozessor zur Speicher- stelle $0303, in der sich $8D befindet, das als STA dekodiert wird. Die nachfol- genden zwei Bytes werden wiederum als Adresse interpretiert.

35

a) LDA $035A = Lade Akkumulator mit Speicherstelle $035A

=|ojojw|m|n|o oje] wjm

035A 035B 035C 035D 035E 035F 0360 0361 0362 0363 Adresse

b) STA $0361 = Speichere Inhalt des Akkumulators in Speicherstelle $0361

SEEIDEIEIEIEIEIEN

035A 035B 035C 035D 035E 035F 0360 0361 0362 0363

Adresse

c) LDA $035A STA $0361

SESSGGDEDEDL

0300 0301 0302 0303 0304 0305 0306 0307 0308 0309 Adresse

d) LDA $03AD

TIBER"

0300 0301 0302 03AD Adresse

Abbildung 1: Darstellung der 6502 Befehle LDA und STA Tabelle 3: Einteilung des Quell-Codes.

Feld 1 Feld 2 Feld 3 Feld 4

LABEL OP-CODE OPERAND COMMENT

ORG ‚origin ADDRESS1 EQU ‚equates ADDRESS2 EQU ‚equates

START LDA ADDRESS1 ‚loading STA ADDRESS2 ‚storing END RTS

36

Trifft der Mikroprozessor z. B. auf die Byte-Folge AD AD 03 (Abbildung Id), in- terpretiert er das erste $AD als LDA und das zweite $AD als Teil der 2-Byte- Adresse $03AD. Wenn sich in dieser Speicherstelle nun $BB befindet, so hängt es vom Sinn des Programms ab, ob BB als Hexadezimalzahl $BB, als De- zimalzahl 187, als ASClIl-Zeichen „,;“ oder sonstwie interpretiert wird.

$AD für LDA ist ein sogenannter Operations-Code (Op-Code), d. h. eine hexadezimale Zahl, die vom Mikropro- zessor als ein gültiger Befehl interpre- tiert wird. „LDA“ selbst in ein sogenann- tes Befehlskurzwort (Mnemonic). Die Be- fehlskurzwörter sind standardisiert und bestehen beim 6502 grundsätzlich aus 3 Buchstaben.

Teil2

6 Assembler und Maschinensprache

Im vorangegangenen Teil wurde noch nicht genau zwischen Assembler(spra- che) und Maschinensprache unter- schieden. Ein Maschinenprogramm (= ein in Maschinensprache geschrie- benes Programm) ist eine Folge von he- xadezimalen Zahlen, z.B. „AD 5A 03 8D 61 03°. Wir erinnern uns, daß dieses he- xadezimale Kauderwelsch „LDA $035A STA $0361“ bedeutet. Die hexadezima- len Werte eines Maschinenprogramms lassen sich zwar von BASIC aus „poken“, etwa in der Form

POKE 768, 173: ıEM $AD POKE 769, 90 : REM $5A POKE 770,3 : REM $03 usw.,

doch ist diese Prozedur umständlich und damit für längere Maschinenpro- gramme nicht zu empfehlen.

Ein Assembler ist ein Hilfsprogramm, das aus zwei Modulen besteht, dem Edi- tor und dem Assembler im eigentlichen Sinn. Der Editor dient zum Erstellen und Redigieren des Quell-Codes (z. B. „LDA $035A STA $0361“), der Assembler zur Umwandlung des Quell-Codes in den Objekt-Code (z. B. AD 5A 03 8D 61 093). Assembler sind meist zeilenorientiert (wie BASIC), wobei jede Befehlszeile des Quell-Codes in vier Felder eingeteilt ist (Tabelle 3):

Feld 1: „Labels“ sind Marken oder Na- men für Adressen, z. B. „ADDRESS1 EQU $035A“ (kann entfallen).

Feld 2: „Mnemonics“ sind leicht ein- prägbare Befehlskürzel für die Op- Codes, die beim 6502 regelmäßig aus

Peeker 7/85

Tabelle 4: 6502 Mnemonics nach Funktionen mit den Op-Codes für die Adressierungsarten, der Anzahl der Takte, der

Anzahl der Bytes sowie den beeinflußten Statusflags.

Accu.

ERTL TFEF ESEL I FREE ISFEEE FEST TI IISIPFIETPELIIF RE FILE FINE IE FESTE AT EI FT

BI EIETTL TVIARPIHI TED FBF EP TSET LEI TDT IT FF EEE PET FIT FE ER TEE I FI FETT HH II

ZEIT IE EFEB EAU HET IRIET TI Se FE EREFFTIIEZT THF FEE EFF FEIN IE FT IL FE SF

Ba ET FIT LITT A FI FO Se EFT EN AS SODOOT I PFEIL EEF TEE IIIT ER OOF FT OD O9 7

N Ba BE Ende la EB en u en a nel iern ann adair

a 2.2 zZ EERLFTTEITI TI EBIL EI HE HITE ELITE TI TFT III ZEIT ET ES EEFFT SE ENE N

85° DEE BET a 1a ers 0 LE RRDOFRE A U Dean es

85 MED

285

26 ER

= N

;

85 Brake

20), : 2 ewig are gas lea. 7 re el Te

87 [e 6) (ee)

:&| | - Issesjässejsajesaeses |se - |, Tasse T: 1 | Is

> *

BER ER a ee ee ea

er eh N

> vr

BAM a el pa ee. ee er zu

>

NE Be ee eier SB

Ez a

er >

a ee ae a

ee re ee ar er,

#5 ns

a er

a a a ET ER FR

8 INTER ER EIERENE BR. NuLIioryoi 0| on

Zero,X | Zero,Y | Absol. | Abs,X Op Cy | Op ı Cy| Opı Cy

LUD) un ınD LU) ınD (de) ass I I III tie Te 5 Teeinenienime Bea I EN he je le Taninneinsien

NOxs NIT T< wm nawmın Bess | | | | 1 | jensal |s je |sulnse

Zero-P

Immedi. Op | Cy! Op| Cy | Op | Cy Ag A2 AO 29 09 49

Function

Load

. ‚Store Transfer Stack Ptr Stack Status R. Increment Decrement Add/Subt. Boolean Shift Rotate Miscell No. of Bytes

*

2 Takte ohne Verzweigung, 3 Takte bei Verzweigung, 4 Takte bei Verzweigung mit Seitenübergang.

1 Takt mehr bei Seitenübergang;

+ =

37.

Peeker 7/85

Beispiele für absolute Adressierung.

LDA $1000 ;lade den Akku mit (dem Byte) der

Speicherstelle $199%

AE AA BB LDX $BBAA ;lade das Index-Register X mit Speicherstelle $BBAA

AC 00 BO LDY $oddd ;lade das Index-Register Y mit Speicherstelle $990d

8D 10 98 STA $0019 ;speichere A in Speicherstelle $PW1P

8SE 12 34 STX $3412 ;speichere X in Speicherstelle $3412

SC FF STY $FÖFF ;speichere Y in Speicherstelle $FFF

Beispiele für Nullseite-Adressierung.

A5 00

LDA $ßd ;lade A mit Speicherstelle $99 (=$P909) A6 18 LDX $19 ;lade X mit Speicherstelle $1P A4 FF LDY $FF ;lade Y mit Speicherstelle $FF 85 11 STA $11 ;speichere A in Speicherstelle $11 86 29 STX $2d ;speichere X in Speicherstelle $2P 84 DD STY $DD ;speichere Y in Speicherstelle $DD

Beispiele für unmittelbare Adressierung.

38

A9 00 LDA 4509 A2 AB LDX #$AQd AB FF LDY #$FF

1999: 1992: 1905: 1997: 109A: 199C:

19PF: 1911: 1012: 1913: 1915: 1917:

1919: 101C: 101F: 1922: 1924: 1926: 1928:

20 20

1 2 3 4 5 6 7 8 9

;lade A mit dem Byte $P@ (löscht A) ‚lade X mit dem Byte $Aß ;lade Y mit dem Byte $FF

#* DEMO: Adressierungsarten

*

en elder ae

Fl

NUMBER3

*

F2

EQU

EQU

EQU EQU EQU EQU

LDA STA LDY STY LDX STX

F3

$09 NUMBER] $91 NUMBER2 $92 NUMBER3

+50

ZEROl ZERO2 ZERO3

NUMBER] NUMBER2 NUMBER3 ZEROl ZERO2 ZERO3

;‚F4 ‚Ursprung

;Label ‚Label ;Label ‚Label ;Label ‚Label

;Nullseite ‚absolut ;‚Nullseite ‚absolut ;Nullseite ‚absolut

‚unmittelbar ‚übertragen ‚übertragen ;Nullseite ;Nullseite ;Nullseite

‚absolut ‚absolut ‚absolut ‚Nullseite ;‚Nullseite ;Nullseite

drei Buchstaben bestehen (obligato- risch). Z. B. ist „LDA“ das Mnemonic und „AD“ der entsprechende hexadezimale Op-Code für eine der möglichen Adres- sierungsarten, S. u.

Feld 3: Der „Operand‘“ ist die Adresse oder Speicherstelle, auf die sich der Be- fehl bezieht (obligatorisch).

Feld 4: „Comment“ ist ein Kommentar, der üblicherweise durch ein Semikolon von den vorangehenden Feldern abge- grenzt wird (kann entfallen).

Es sind zwei Typen von Labels zu unter- scheiden:

a) „START“ und „END“ sind z.B. impli- zite oder interne Labels, die sich auf Speicherstellen innerhalb des Pro- gramms selbst beziehen, wobei der As- sembler die absoluten Adressen dieser Speicherstellen in Abhängigkeit vom Programmursprung selbst errechnet.

b) „JADDRESS1“ und „ADDRESS2“ sind z.B. explizite oder externe Labels, die sich auf Adressen beziehen, die außerhalb des eigentlichen Programms liegen. Sie sollten durch EQU-Zeilen zu Beginn des Programms definiert wer- den.

Ferner ist der Unterschied zwischen ei- nem Label und einem Label-Feld zu be- achten. Wie aus Tabelle 3 ersichtlich, kann ein Label sowohl in Feld 1 wie Feld 3 vorkommen. Das gleiche Label, z. B. „ADDRESS1‘“, darf innerhalb desselben Programms beliebig oft in Feld 3 auftau- chen, doch darf es nur ein einziges mal in Feld 1 (= Label-Feld) implizit oder ex- plizit definiert werden.

Jedes Assemblerprogramm muß mit ei- ner ORG-Definition des Programmur- sprungs beginnen und sollte mit dem Mnemonic RTS (= return from subrouti- ne) enden.

7 Elementare Adressierungsarten

Tabelle 4 zeigt, daß der 6502 nur 56 Standard-Mnemonics umfaßt. Ein Be- fehl wie z.B. „LDA“ kann jedoch in ver- schiedenen Adressierungsformen ver- wendet werden, so daß die Zahl der Op- Codes erheblich größer ist. Insgesamt gibt es 13 Adressierungsarten, von de- nen die vier einfachsten im folgenden beschrieben werden.

2.1 Absolute Adressierung

Hier folgt dem Op-Code eine 2-Byte- Adresse in der bereits bekannten, typi- schen 6502-Form („low byte first‘).

2.2 Nullseite-Adressierung

Die ersten 256 Bytes des Speichers ($0000 $O0OFF) werden, wie ebenfalls

Peeker 7/85

bereits bekannt, Nullseite oder Zero- Page genannt. Bei der Nullseite- Adressierung ist das höherwertige Byte stets $00, d. h. anstelle von $0000 oder $00FF (00000 oder 00255) kann $00 oder $FF (0 oder 255) stehen. Die Nullseite- Adressierung verwendet deshalb immer 1-Byte-Adressen.

2.3 Unmittelbare Adressierung

Die unmittelbare (immediate) Adressie- rung bezieht sich auf dasjenige Byte, das unmittelbar dem Op-Code folgt, 28:

1000: A9 11 LDA #$11

Angenommen, die Speicherstelle $1000

enthalte $A9 und die Speicherstelle

$1001 enthalte $11. „A9Y“ als Op-Code besagt, daß der Akkumulator mit dem Byte zu laden ist, das unmittelbar auf „Ag“ folgt, also mit „11“. Die unmittelba- re Adressierung wird im Quell-Code durch das vorangestellte Nummernzei- chen (Doppelkreuz) gekennzeichnet.

2.4 Implizierte Adressierung Die implizierte (implied) Adressierung

bezieht sich auf überhaupt keine Adres-

se im Speicher, sondern z. B. auf die Re- gister selbst. Wird etwa der Inhalt des Akkumulators in das Index Register X übertragen, werden keinerlei Speicher- stellen berührt.

Beispiele für implizierte Adressierung.

transfers Ato X transfers Xto A

transfers A to Y transfers Yto A

Enthält z.B. A $FF, bewirkt der Befehl

TAX, daß $FF nach X übertragen wird. Nach Ausführung von TAX befindet sich der Wert $FF sowohl in A wie auch in X.

Es sei darauf hingewiesen, daß Befehle der Art TXY oder TYX nicht zu dem 6502- Befehlssatz gehören.

Der Befehl 60 RTS

ist ein weiteres Beispiel der implizierten Adressierung, die dem BASIC-Befehl RE- TURN oder END entspricht.

Nebenstehende „Demo“ faßt die bespro- chenen Adressierungsarten in einem Ge- samtbeispiel zusammen.

‚return from subroutine

8 Tabelle 4: 6502 Mnemonics ... Die Verwendung dieser Tabelle sei am

Beispiel des LDA-Befehls bei der absolu- ten Adressierung erläutert. In der Spalte

Peeker 7/85

„Absol.“ ist „AD“ als Op-Code für das Mnemonic „LDA“ zu finden. Rechts von „AD“ steht die Zahl „4“, die besagt, daß dieser Befehl 4 Mikroprozessor-Takte er- fordert. Der 1 MHz 6502 Mikroprozessor schafft 1 Million Takte pro Sekunde, d.h. 1 Takt benötigt 1 us. Anders formuliert, läßt sich etwa der Befehl LDA $1000 theoretisch 250.000mal pro Sekunde ausführen.

In der letzten Zeile der Tabelle (No. of Bytes) ist in Spalte „Absol.‘“ vermerkt, daß dieser Befehl 3 Bytes im Speicher benötigt (1 Byte für den Op-Code und 2 Bytes für die Adresse).

Teil 3

9 Interne und externe Labels Im vorangehenden Abschnitt wurde be-

halb desselben bezieht. Externe Labels werden üblicherweise durch EQU-Glei- chungen am Anfang des Assemblerpro- gramms als absolute Adressen definiert, während die tatsächlichen Adressen in- terner Labels vom Programmursprung (ORG) abhängen. Interne Labels spielen eine große Rolle bei bedingten Verzwei- gungen.

ORG $1000

EXTLBL EQU $2000 LDA EXTLBL CMP #%$00 ;siehe unten BEQ INTLBL;siehe unten LDA * $00

INTLBL RTS

10 Vergleiche und bedingte Verzweigungen

Für jedes Register A, X und Y gibt es je einen Vergleichsbefehl für die verschie- denen Adressierungsarten:

reits zwischen internen und externen La- EN : HR he f a e h bels unterschieden. Zur Rekapitulation: L wi era ST egal Ein externes Label bezieht sich auf eine er Speicherstelle außerhalb des Assem- CPX #$FF; vergleicht X mit $FF blerprogramms, während sich ein inter--r CPX $1000; vergleicht X mit Speicher- nes Label auf eine Speicherstelle inner- stelle $1000 1 ORG $1999 Demo 1 2 Er 3 Indizierte Adressierung 4 * 1pp9: A9 29 5 START LDA +$29 1062: 8D PB 20 6 STA $2990 1005: A9 39 7 LDA +#$39 1007: 8D 90 30 8 STA $39909 10BA: A2 99 9 LDX #99 1B9C: AB OB 19 LDY #99 1B0E: BD BB 28 11 LDA $2009,x 1811: 9D BB AB 12 STA $4009,X ;Ad09: 20 1014: BI BB 39 13 LDA $3999,Y 1017: 99 90 59 14 STA $5999,Y ‚5009 :39 15 * 16 # Inkrement und Dekrement 17 » 1ß1A: EE 0 48 18 INC $4999 ‚A009: 21 1d1D: CE BB 58 19 DEC $5999 ‚5000:2F 1020: BD OB 48 29 LDA $4999,x 1023: E8 21 INX 1624: 9D PB AB 22 STA $4999,X ;A001:21 1027: B9 00 50 23 LDA $5909,Y 102A: C8 24 INY 102B: 99 00 50 25 ı STA $5909,Y ;5001:2F 26 [2 27 «+ Übertrag (Wrap-around) 28 * 102E: A2 FF 29 LDX 4#$FF 1039: EB 39 INX :X:09 1031: Ad 90 31 LDY +$99 1033: 88 32 DEY ;Y:FF 33 = 34 * vergleichen und verzweigen 35 1034: BD PB 50 36 LDA $5999,x 1037: C9 39 37 CMP_ +$39 1039: FB 92 38 BEQ EQUAL 1P3B: DB 3 39 BNE NOTEQUAL 1P3D: A9 99 48 EQUAL LDA +#$99 103F: 69 al RTS 1040: A9 91 42 NOTEQUAL LDA +$01 1042: 69 43 RTS

39

CPY # $FF; vergleicht Y mit $FF CPY $1000; stelle $1000

Auf Vergleiche folgt üblicherweise ein bedingter Verzweigungsbefehl, z.B. BEQ (= branch on equal = verzweige, falls gleich) oder BNE (= branch on not equal

= verzweige, falls ungleich), die nachfol- .

gend beschrieben werden.

EXAMPLE1 ORG EXTLBL EQU LDA CMP BEQ LDA RTS LDA RTS

$1000 $2000 EXTLBL # $FF EXIT2 EXIT1 # $01 ;NOT EQUAL

EXIT2 # $00 ;EQUAL

In EXAMPLE1 wird A mit dem Byte der Speicherstelle EXTLBL geladen, an- schließend wird A mit $FF verglichen. Falls EXTLBL $FF enthält, wird nach EXIT2 verzweigt. Andernfalls fährt das

Demo 2 1

2

3

4

5

5

7

8

9

19

11

1009: A2 99 12 1062: A9 99 13 1004: 9D 90 20 14 1007: E8 15 1008: EB 90 16 1004: DB FB 17 18 19 29

21

1d0C: A2 90 22 1B0E: BA 23 1pßF: 9D BB 28 24 1912: E8 25 1813: DO FA 26 27 28 29

1015: A9 99 39 1817: A2 FF 31 1819: 9D 96 28 32 1B1C: CA 33 181D: EB FF 34 1d1F: DB FB 35 36 37 38 39

1821: A9 99 40 1023: AA 41 1024: 9D 00 20 42 1027: CA 43 1028: FA 44 102A: 69 45

40

vergleicht Y mit Speicher-

Programm mit EXIT1 fort. Die Befehlsfol- ge „LDA EXTLBL CMP #$FF BEQ EXIT2“ entspricht dem folgenden BASIC-Programm:

10 A = PEEK (8192)

20 IFA = 255 THEN GOTO 40 30 PRINT „EXIT1“ : END

40 PRINT „EXIT2“ : END

EXAMPLE2 ORG $1000

EXTLBLI EQU $2000

EXTLBL2 EQU $3000 LDX EXTLBL{ CPX EXTLBL2 BNE EXIT2

EXIT1 LDA #$00 RTS

EXIT2 LDA #$01 RTS

Beim EXAMPLE2 wird EXTLBL1 mit EXTLBL2 verglichen, wobei hier eine Verzweigung nur dann erfolgt, falls EXTLBL1 ungleich EXTLBL2 ist.

Der 6502 läßt auch eine Verzweigung oh-

ORG $1998

=

* DEMO 2: $2000-$2ßFF löschen

*

*# LOOP1/LOOP2 —- Vorwärtsschleifen # LOOP3/LOOP4 Rückwärtsschleifen *

ADDRESS EQU $2999

EZ

* LOOP1l löscht $2900-$29FF * +$09

+$09 ADDRESS, X

LDX LDA STA INX CPX BNE

LOOP1

+$09 LOOP1

*

« LOOP2 löscht $2990-$29FF

# (etwas schneller als LOOPI) =

LDX TXA STA INX BNE

+$09

LOOP2 ADDRESS, X

LOOP2

E 3

* LOOP3 löscht $2999-$20FF E

LDA LDX STA DEX CPX BNE

+$09 +$FF LOOP3 ADDRESS, X #$FF LOOP3

=

* LOOP4 löscht $2998-$29FF

« (etwas schneller als LOOP3) »

LDA TAX STA DEX BNE RTS

4509 LOOP4 ADDRESS, X

LOOP4

ne vorausgehenden Vergleich zu. In die- sem Fali bedeutet BEQ = verzweige, falls das zuletzt angesprochene Regi- ster gleich Null, und BNE = verzweige, falls das Register ungleich Null ist.

oder LDY $2000 BNE LABEL2

LDY $2000 BEQ LABEL1

11 Inkrementieren und Dekremen- tieren

Speicherstellen und Register können in- krementiert (um 1 erhöht) und dekremen- tiert (um 1 vermindert) werden. Ange- nommen, der Wert von X sei $10, dann würde der Befehl INX (= inkrementiere X) X von $10 auf $11 erhöhen. Im einzel- nen gibt es folgende Inkrement-Dekre- ment-Befehle:

INC $2000; erhöht Speicherstelle $2000 um 1

DEC $2000; vermindert Speicherstelle $2000 um 1

INX; erhöht X um 1 DEX; vermindert X um 1

INY; erhöht Y um 1 DEY; vermindert Y um 1

Die Befehle „INA“ (inkrementiere A) und „DEA“ (dekrementiere A) existieren nicht und müssen bei Bedarf simuliert wer- den:

TAY oder TAY

INY DEY TYA TYA

Was geschieht nun, wenn z.B. Y $FF ent- hält und inkrementiert oder Y $00 enthält und dekrementiert wird?

LDY #$FF INY Y.=00 LDY #$00 DEY ‚Y=FF

Im ersten Fall nimmt Y den Wert $00, im zweiten $FF an (Überlauf, ,„Wrap- around‘).

12 Absolutes, indiziertes Laden und Speichern

Absolute, indizierte Adresse bedeutet: Tatsächliche Adresse = absolute Adresse + Wert des jeweiligen Indexre- gisters (X oder Y). Beim EXAMPLE1 ist die absolute Adresse EXTLBL = $2000 und der Wert von X = $05, LDA EXTLBL,X entspricht mithin LDA $2005. Bei EXAMPLE2 hat Y den Wert $00, LDA EXTLBL,Y ist also gleichbedeutend mit LDA $2000 (Spezialfall). Mit der absolu- ten, indizierten Adressierung kann ein Speicherbereich von $100 oder 256 Bytes (= Page = Seite) angesprochen werden.

Peeker 7/85

EXAMPLE1 ORG $1000

EXTLBL EQU $2000 LDX # $05 LDA EXTLBL,X RTS

EXAMPLE2 ORG $1000

EXTLBL EQU $2000 LDY # $00 LDA EXTLBL,Y RTS

13 Schleifen

Assemblerschleifen entsprechen weit- gehend den FOR-NEXT-Schleifen in BA- SIC. Angenommen, man wollte den Spei- cherbereich $0300 $%0302 (dezimal 768-770) nach $0303—-$0305 (dezimal 771-773) verschieben (= duplizieren), würde dies in BASIC so aussehen:

FORX = 0 TO 3: POKE 771 + X, PEEK (768 + X): NEXT X

In Assembler wäre folgendes Programm zu. schreiben:

ORG $1000 EXTLBL1 EQU $0300 EXTLBL2 EQU $0303 INITLP LDX #800 LOOP LDA EXTLBL1,X

STA EXTLBL2,X INCR INX

CPX # $03

BNE LOOP EXIT RTS

0300 0301 0302 0303 0304 0305 vor- FF- FF FF 00 00.00 .: her

0300 0301 0302 0303 0304 0305 nach FF FF OFF OFFOFFOFF her

Zum besseren Verständnis des Pro- grammflusses, wollen wir die Schleifen Schritt für Schritt untersuchen:

LOOP 0: Bei INITLP wird das X-Register initialisiert (X = 0).

LOOP 1: Im ersten Schleifendurchgang ist X = 0, mithin EXTLBL1,X = $0300 und EXTLBL2,X = $0303. Bei INCR wird Xum1(0 + 1 = 1) erhöht und mit 3 ver- glichen. Da X noch ungleich 3 ist, wird die BNE-Verzweigung nach LOOP aus- geführt.

LOOP 2: Im zweiten Durchgang ent- spricht X = 1 und damit EXTLBL1,X = $0301 bzw. EXTLBL2,X = $0304. X wird wiederum um 1 auf jetzt 2 erhöht, ist je- doch weiterhin ungleich 3, so daß erneut die BNE-Verzweigung nach LOOP er- folgt.

Peeker 7/85

LOOP 3: Im dritten und letzten Durch- gang gilt X = 2, also EXTLBL1,X = $0302 und EXTLBL2,X = $0305. X wird wiederum um 1 auf jetzt 3 erhöht und mit 3 verglichen. DaX = 3 ist, findet die BNE-Verzweigung jetzt nicht mehr statt und das Programm endet mit RTS.

Demo 1 faßt die neuen Befehle in leicht- verständlicher Weise zusammen, wäh- rend Demo 2 als praktisches Beispiel zeigt, wie man einen Speicherbereich von 256 Bytes löscht, d.h. auf Null setzt.

Teil 4

Im letzten Abschnitt haben wir nur die Vergleiche „gleich“ und „ungleich“ be- sprochen. Insgesamt sind folgende Ver- gleiche möglich: |

nr M BEQ JA A<>M BNE JA A< M BCC JA A>=M BCS JA A> M BEQ NEIN BCS JA ASe M BCC JA BEQ JA

A steht für Akkumulator (und ersatzwei- se für die beiden anderen X- und Y- Register). M steht für Memory, d. h. Spei- cherstelle oder Vergleichswert.

Aus der Übersicht sind zwei neue Befeh- le ersichtlich, nämlich BCC und BCS. BCC bedeutet eigentlich Branch on car- ry clear (verzweige, falls Überlauf-Flag = 0, d. h. gelöscht oder zurückgesetzt ist) und BCS ist die Abkürzung für Branch on carry set (verzweige, falls Überlauf-Flag = 1, d. h. gesetzt ist). Da BCC sachlich für „verzweige, falls klei- ner‘ steht, verwendet man auch oft das Mnemonic BLT (Branch on lower than). Umgekehrt steht BCS sachlich für ‚„ver- zweige, falls größer oder gleich‘, so daß sich hierfür das nicht-standardisierte Mnemonic BGE (branch on greater or equal) eingebürgert hat. Befehle in der Art „verzweige, falls größer‘ und „ver- zweige, falls kleiner oder gleich‘ gehö- ren nicht zum 6502-Befehlssatz und müssen deshalb durch Doppelinstruktio- nen simuliert werden.

Für die praktische Programmierarbeit ist es nach meinen Erfahrungen für den As- sembleranfänger besser, wenn er über die sogenannten Status-Flags über- haupt nicht nachdenkt, sondern statt dessen mit der obigen Vergleichstabelle

arbeitet. Für die Theoretiker sei jedoch nachfolgend die Funktionsweise des Carry-Flags bei BCC und BCS erläutert:

T; 2. 3: A 10 09 10 M —09 —10 —-10 +01 —01 +00 C=+ Der C=+ Get G=0 Ge’

Von den obigen drei Subtraktionen (10—9, 9-10 und 10— 110) führt die zwei- te zu einem Überlauf bzw. zu einem Vor- zeichenwechsel. Nehmen wir nunmehr an, daß der 6502-Prozessor bei jedem Vergleich intern eine Subtraktion von A und M vornimmt und das Überlauf-Flag entsprechend setzt, und zwar dergestalt, daß bei einem Vorzeichenwechsel C auf

‘0 und bei keinem Vorzeichenwechsel C

auf 1 gesetzt wird. Dann wird deutlich, weshalb bei den nachfolgenden Beispie- len ein Sprung zu den Labels JA bzw. NEIN erfolgt: |

A<M? A>=M? LDA # 10 LDA # 10 ;A CMP # 09 CMP # 09 ;M BCC NEIN BCS JA LDA #09 LDA #09 CMP #10 CMP # 10 BOCOCJA BCS NEIN LDA #10 LDA #10 CMP #10 CMP # 10 BCC NEIN BCS JA

Genau genommen sind die Erläuterun- gen zu den Subtraktionen zwar praktisch richtig, jedoch theoretisch falsch, weil eigentlich das A vom M subtrahiert und bei 6502-Subtraktionen mit „invertiertem Borgen‘“ gearbeitet wird, wodurch die „normalen‘‘ Subtraktionsregeln quasi auf den Kopf gestellt werden. Hierzu schreibt LAncE A. LEVENTHAL in „6502 As- sembly Language Subroutines“, Berke- ley 1982, S. 2: „The Carry Flag actsasan inverted borrow in subtraction. A Com- pare instruction clears the Carry if the operation requires a borrow and sets it if it does not. Thus the Carry has the oppo- site meaning after comparison on the 6502 than it has on most other compu- ters.“

Da wir gerade bei der Theorie sind, soll kurz auf eine andere Tatsache aufmerk- sam gemacht werden, die ebenfalls in der Programmierpraxis weitgehend ig- noriert werden kann. Betrachten wir zu diesem Zweck den folgenden Pro- grammauszug:

41

1 ORG $300 2 * 3 * Man beachte bei diesem 4 * Test die auf BEQ folgende 5 * hexadezimale Sprungadresse 6 %* 2300: A8 7 L1 TAY 0301: FO FD 8 BEQ L1l \ 9 * 0303: FO FF 10 L2 BEO L2+1 11 e 2305: F@ FE 12 53 BEQ L3 43 R 2307: 00 14 BEQ L4 0309: A8 25 L4 TAY 16 * B3Q0A: FO 08l L7 BEQO L5 B30C: A8 18. TAY B30D: A8 19 L5 TAY 20 * B30E: FO 22 21 BEQ L6 0831@: AB 22 TAY e3ll: AB 23 TAY 8312: A8 24 L6 TAY 0313: 25 RTS 1 ORG $1009 2 * | 3 * Vergleich-Demo 4 * 5 * Welche Stelle muß geändert 6 * werden, damit das Programm 7 * bei Branch4 ankommt? 8 * 10080: A9 AQ 9 LDA #SA0 10802: C9 BQ 18 CMP #5SB® 1004: 908 03 11 BCC DBRANCHl 1006: A9 01 12 LDA #1 1008: 69 33 RTS 10089: C9 BO 14 BRANCHl CMP #5SBP® 180B: 093 15 BCS BRANCH2 1B0D: A9 92 16 LDA #2 1B0F: 69 17 RTS 1810: C9 AB 18 BRANCH2 CMP #SA9 1812: F@ 093 19 BEQ DBRANCH3 1814: A9 93 20 LDA #3 18016: 69 21 RTS 1817: C9 22 BRANCH3 CMP #5SB0® 1819: 03 23 BNE PBRANCH4 181B: A9 094 24 LDA #4 1801D: 68 25 RTS 101E: A9 95 26 BRANCH4 LDA #5 1020: 69 27 RTS

42

030A: F001 LABEL1I BEQLABEL2 030C: A8 TAY 030D: AA LABEL2 TAX

„FO“ ist der Op-Code für BEQ und „A8“ bzw. „AA“ sind die Op-Codes für TAY bzw. TAX. Nach „FO“ steht merkwürdi- gerweise die hexadezimale Zahl „01“. Welche Bedeutung hat sie? Dem Quell- Code ist zu entnehmen, daß ein relativer Vorwärtssprung zum LABEL2 erfolgt. „FO 01“ bilden als zusammengehörige Byte-Folge den Befehl BEQ LABEIL2. Würde dieser Sprung nicht ausgeführt, weil die Bedingung A = M nicht erfüllt ist, dann würde der prozessorinterne Programmzähler nunmehr an der Spei- cherstelle $030C angelangt sein. Addie- ren wir $030C + $01, dann erreichen wir die Speicherstelle $030D, also die Stelle von LABEL2. Mithin können wir festhal- ten, daß nach dem Vergleichs-Op-Code eine hexadezimale Zahl steht, die die An- zahl der Bytes angibt, um die der Pro- grammzähler versetzt werden muß, da- mit der BEQ-Sprung an der gewünschten Speicherstelle anlangt. Dieses „Verset- zen“ wird als Offset bezeichnet.

Was passiert jedoch, wenn kein Vorwärts-, sondern ein Rückwärtssprung stattfinden soll. Betrachten wir hierzu das nachfolgende Beispiel:

0300: A8 LABEL1 TAY 0301: FOFD LABEL2 BEQLABELI 0303: AA TAX

Würde die A = M Bedingung hier nicht erfüllt, dann würde wiederum der näch- ste Befehl der Speicherstelle $0303 ab- gearbeitet, nämlich TAX. Was geschieht jedoch, wenn A = M ist. Dann muß ein Rückwärtssprung nach LABEL2 erfol- gen. Wenn man mit dem Zählen ab der Speicherstelle $0303 beginnt, gelangt man durch „Bis-drei-Zählen“ zur Spei- cherstelle $0300. Mithin müßte theore- tisch in der Speicherstelle $0302 „03“ stehen. „03“ würde jedoch +3 bedeu- ten, während hier „FD“ —3 bedeutet.

Fassen wir zusammen: Bei relativen Sprüngen steht nach dem Op-Code für BEQ, BNE, BCC und BCS eine entweder positive oder negative hexadezimale Offset-Zahl, um die der Programmzähler ab der der Offset-Zahl folgenden Spei- cherstelle vorwärts oder rückwärts zum Sprung-Label versetzt werden muß. He- xadezimale Zahlen im Bereich $00—$7F werden als positiv und sinngemäß hexa- dezimale Zahlen im Bereich $80—-$FF als negativ angesehen, und zwar einzig und allein bei den Vergleichsbefehlen:

Peeker 7/85

80 128

ED ER: 4 0 0 er 2 2 8 3 DE IF 127

Aus der Kurztabelle ist ersichtlich, daß relative Sprünge nur bis 127 Bytes vom Offset-Ursprung entfernt sein dürfen. Diese Beschränkung macht es oft erfor- derlich, daß man die Programmlogik um- drehen muß, da Vorwärtssprünge über 127 und Rückwärtssprünge über 128

Speicherstellen hinaus vom Assembler

als „Bad Branch“ zurückgewiesen wür- den. Dies geschieht durch die Verwen- dung des absoluten Sprungs JMP, der im nächsten Kapitel beschrieben wird. Im übrigen kann man den Offset igno- rieren, da dieser vom Assembler stets automatisch ausgerechnet wird.

Teil 5

In den bisherigen Abschnitten haben wir bereits etwa die Hälfte der 6502-Be- fehle besprochen, nämlich Lade- und Speicherbefehle (LDA, LDX, LDY; STA, STX, STY), Übertragungsbefehle (TAX, TAY, TXA, TYA), Vergleichsbefehle (CMP, CPX, CPY), bedingte Verzwei- gungsbefehle (BEQ, BNE, BCC, BCS), Inkrementier- (INC, INX, INY) und De- krementierbefehle (DEC, DEX, DEY). Ferner wurden die meisten Adressie- rungsarten behandelt, und zwar absolu- te Adressierung (LDA $1000), Nullseite- Adressierung (LDA $00), indizierte abso- Iute Adressierung (LDA $1000,X oder LDA $1000,Y), implizite Adressierung (TAY, TXA usw.) sowie die noch nicht ex- pressis verbis benannte relative Adres- sierung. Letzere ist die Adressierungs- art bei allen bedingten Verzweigungsbe- fehlen (BEQ, BCC usw.).

Trotzdem waren wir bislang nicht in der

Lage, „sinnvolle“ Programme zu erstel- len, weil einige der mächtigeren Befehle

Peeker 7/85

noch nicht besprochen wurden. Eine sehr wichtige Gruppe von Befehlen be- trifft den sogenannten Stack, auch als Stapel oder „Keller“ bezeichnet. Hierzu betrachten wir das nachfolgende erwei- terte Modell des 6502-Prozessors:

Im ersten Schritt wird der Programmzäh- ler mit der Adresse $1000 geladen. Dann holt sich der Prozessor den Op-Code 4C = JMP, lädt den Programmzähler mit der darauffolgenden Adresse $2000 und springt zu $2000. Dort holt sich der Pro-

Die jeweils 1 Byte großen Indexregister X und Y sowie der Akkumulator als all- gemeines Datenregister sind bereits bekannt. Der Programmzähler ist ein 2 Bytes umfassendes Register und ent- hält die Adresse der Speicherstelle des jeweils als nächstes vom Prozessor zu bearbeitenden Befehls. Beispiel:

1000: AD 00 20 LDA $2000 1003: 8D 00 30 STA $3000

Nehmen wir an, der Prozessor sei be- reits bei Speicherstelle $1000 ange- langt. Dann enthält der Programmzähler die Adresse LL- HH, Low Byte High Byte, 00-10 = $1000, d.h. der Prozes- sor ist auf die Adresse des Op-Codes AD = LDA gerichtet. Dieser Befehl wird in Verbindung mit den darauffolgenden 2 Adreßbytes interpretiert und dann ent- sprechend ausgeführt. Anschließend wird der Programmzähler auf Speicher- stelle $1003 erhöht. Bei bedingten (rela- tiven) Verzweigungen wird er mit der re- lativen Adresse geladen, während er bei unbedingten (absoluten) Verzweigun- gen mit der absoluten Adresse der Spei- cherstelle, zu der der Sprung erfolgen soll, geladen wird. Es gibt zwei Arten von absoluten Verzweigungen oder Sprün- gen: Ä

JMP = Jump (entspricht GOTO in BASIC)

JSR = Jump Subroutine (entspricht GOSUB in BASIC)

RTS = Return from Subroutine (entspricht RETURN in BASIC)

RTS = entspricht als letztes RTS eines Assemblerprogramms END in BASIC

Betrachten wir zunächst folgendes Pro- gramm:

1000: 4C 00 20 1003: 60

JMP $2000 RTS

2000: 4C 03 10 JMP $1003

6502

X-Register A-Register Y-Register Stapelzeiger Programmzähler

zessor den Op-Code 4C, lädt den Pro- grammzähler mit der nachfolgenden Adresse $1003 und springt zu $1003. Hier steht nun RTS, das als letzter Op- Code das Assemblerprogramm been- det.

Was geschieht aber mit dem Programm- zähler, wenn statt eines JMP ein JSR ge-

_ wünscht wird. Sehen wir dazu JSR-Bei-

spiel 1 an:

JSR-Beispiel 1

1000: 20 00 20 1003: 60

JSR $2000 RTS

2000: 60

RTS JSR-Beispiel 2 OFFE: A2 FF LDX + $FF OFFF: 9A IX... 1000: 20 00 20 JSR .$2000 RTS

1003: 60

2000:

A9 AA LDA #$AA 2002: 48 PHA 2003: 68 PLA

2004: RTS

Zunächst wird der Programmzähler mit $1000 geladen. Dann holt sich der Pro- zessor den Op-Code 20 = JSR und lädt den Programmzähler mit der Adresse $2000, zu der gesprungen werden soll. Da der Programmzähler jedoch nur je- weils eine einzige Adresse enthalten kann, erhebt sich die Frage, wie sich der Prozessor „merken“ kann, daß er nach RTS = RETURN bei Adresse $2000 wie- der zu derjenigen Adresse zurückfindet, die auf den Befehl JSR $2000 folgt. Zu diesem Zweck unterhält der Prozessor einen 256 Bytes umfassenden Stapel, der bei allen 6502-Mikrocomputern den Speicherbereich $0100 bis $O1FF ein- nimmt. Dieser Stapel wird rückwärts, d.h. ab $OIFF, mit den RTS-Rücksprung- adressen gefüllt. Neben dem Stapel gibt

43

Beispiel

1 ÖRG $1000 1056: 20 DA FD 79 JSR HEXOUT 2 * 1059: 20 864 10 80 JSR KOMMA 3 * Addition und Subtraktion 81 > 4 % Semzmsmsasaas2os2222222=S= : 82 * Verschiedene fehlerhafte ee) * 83 * Additionen und Subtraktionen 6 * HEXOUT zeigt Wert im A-Register 84 * 7 * als hexadezimale Zahl an. 85 * Nach SEC 3 + 1 = 5! hex $05 8 * HEXOUT ändert nur das A-Register 8% . 9 * 105C: 38 87 SEC 10 * CHROUT zeigt Character in 105D: AP 03 88 LDA #3 11 * A-Register als ASCII-Zeichen an. 105F: 69 01 89 ADC #1 i2 * CHROUT läßt alle drei Register 1051: 20 DA FD 90 JSR HEXOUT 13 * A, X und Y unverändert. 1064: 20 86 10 91 JSR KOMMA 14. % j FR 15 * Beides sind ROM-Firmware-Routinen 93 # NEE ELLE: 3». ® 1 hex $01 16 * des Apple 11c/lle/lI Plus 94 * 17 * 1067: 18 95 CLC 18 HEXOUT EQU $FDDA ‚Apple 1068: A9 03 96 LDA #3 19 CHAROUT EQU %$FDED ‚Apple 106A: EP 01 97 SsBbt #1 20 %* 105C: 20 DA FD 98 JSR HEXOUT 21 * 8-Bit-Addition ohne überlauf 10#4F: 20 86 10 99 JSR KOMMA 22 * 100 * 23 *10 + 10 = 20 hex #14 101 * überlauf 255 + 1 = 0! hex $00 24 * 102 * 23 CLC . 1072: 18 103 ELE 26 LDA #10 1073: AP FF 104 LDA #255 27 ADC #10 1075: 69 01 105 ADC #1 28 JSR HEXOUT ».1077: 20 DA FD 10% JSR HEXOUT 29 JSR KOMMA 107A: 20 864 10 107 JSR KOMMA 30 * 109 % 31 * 8-Bit-Subtraktion ohne "Unterlauf" 110 * "Unterlauf" 0 - 1 = 255! hex $FF 32 * 111.8 33 "10 +90 QO hex $00 107D: 38 Ya; SEC 34 * 107E: A9 00 113 LDA #0 35 SEC 1080: EP 01 114 SsBCt #1 36 LDA #10 1082: 20 DA FD 115 JSR HEXOUT 37 SBC #10 1085: 60 116 RTS 38 JSR HEXOUT 3 39 JSR KOMMA 118 %* Unterroutine zum Änzeigen 40 * 119 * eines Kommas 41 * 14-Bit-Addition mit überlauf- 120 * 42 * prüfung. 1086: A9 AC 121 KOMMA LDA #"," 43 . 1088: 20 ED FD 122 JSR CHAROUT 4 * 34044 + $3033 = #$7077 108B: 40 123 RTS 45 * ia % 46 CLC i25 * Unterroutine zum Anzeigen 47 LDA #+44 ‚Low 126 * des Wortes "Error:" 48 ADC #$33 ‚Low 127 %* 49 STA LL 108C: A2 00 128 ERROR LDX #0 0 LDA #%40 ‚High 129 2% 51 ADC #$30 ;High 130 %* 6-stelliges Wort "Error:" 32 STA HH uch ee 53 BCC OKAY 108E: BD 9C 10 132 ERRORI LDA ERRWORT ‚X 55 JSR ERROR 1091: 20 ED FD 133 JSR CHAROUT 3% DKAYi LDA HH ‚High 1094: EB 134 INX 37 JSR HEXOUT 1095: EO 06 135 CPX #4 58 LDA LL ‚Low 1097: DO FS5 136 BNE ERRORI 59 JSR HEXOUT 1099: &0 137 RTS 60 JSR KOMMA 138 * 6i . 139 * Der Pseudo-Opcode HEX 62 * 16-Bit-Subtraktion mit 140 * reserviert eine Speicherstelle 63 * "Unterlauf"-Prüfung 141 * mit einem Hexwert. 64 * 142 * Der Pseudo-Opcode ASC 65 * $4044 - $3033 = $1011 143 * reserviert einen Speicherraum 66 * 144 * mit einem String. 67 SEC nr GE 68 LDA #44 ‚Low 109A: 00 146 LL HEX 00 69 SBC #$33 ‚Low 109B: 00 147 HH HEX 00 70 STA LL 109C: C5 F2 F2 148 ERRWORT ASC "Error:" 7 LDA #%$40 ‚High 109F: EF F2 BA ?2 SBC #%30 ‘High 73 STA HH 74 BCS DOKAY2 --End assembly-- 753 JSR ERROR 76 OKAY2 LDA HH ‚High 162 bytes 77 JSR HEXOUT 78 LDA LL ‚Low Errors: 0 Symbol table - alphabetical order:

CHAROUT =$FDED ERROR =$108C ERRORi =$108E ERRWORT =$109C

HEXOUT =$FDDA HH =$109B KOMMA =$1086 LL =$109A

OKAY1 =$102A OKAY2 =$104D

Symbol table - numerical order: OKAY =$102A OKAY2 =$104D KOMMA =$1086 ERROR =$108C ERRORI =$108E LL =$109A HH =$109B ERRWORT =$109C

HEXOUT =$FDDA CHAROUT =$FDED

44 Peeker 7/85

100 : >... 1F8 -1F9 IFA: EB: 1FG FD .IEE FE Be

es den Stapelzeiger, der als eine Art X-Register aufgefaßt werden kann und der beim Einschalten des Mikrocompu- ters oder beim Reinitialisieren des Pro- zessors in der Regel auf $FF ($0100,X) gesetzt wird.

Nehmen wir an, der Mikrocomputer sei gerade eingeschaltet worden, der Stack sei noch leer und der Stapelzeiger sei auf $FF initialisiert. Ferner sei der Pro- grammzähler auf $1000 eingestellt, wo der Befehl JSR $2000 stehen soll. Wie bereits bekannt, wird der Programmzäh- ler mit der Adresse $2000 geladen. Gleichzeitig wird die Rücksprungadres- se auf den Stapel geschoben (to push on stack), und zwar nicht die eigentliche Adresse $1003, sondern $1003 $01 = $1002. High Byte $10 wird in $O1FF und Low Byte $02 in $O1FE im Stapel zwi- schengespeichert. Vor jeder Zwischen- speicherung wird der Stapelzeiger um 1 vermindert und erst danach das HH- oder LL-Byte auf den Stack geschoben. Der Prozessor führt also quasi intern ein Programm aus, das wir wie folgt simulie- ren können:

DEX ‚decrement LDA #$10 ;push

STA $0100,X

DEX ‚decrement LDA #3$02 ‚push

STA $0100,X

Wenn der Prozessor nunmehr bei Spei- cherstelle $2000 auf RTS stößt, zieht er die Rücksprungadresse vom Stapel, er- höht sie um $01 und überträgt sie in den Programmzähler. Beachten Sie folgen- den Merksatz:

Decrement before pushing! Increment before pulling!

Neben JSR gibt es noch andere 6502-Be- fehle, die den Stapel sowie den Stapel- zeiger beeinflussen.

PHA (= Push accumulator on stack) de- krementiert den Stapelzeiger und

Peeker 7/85

Beispiel 1 Initialisierung JSR $2000 RTS

Beispiel 2

LDX #$FF TXS

JSR $2000 LDA #$AA PHA

PLA

RTS

schiebt den Inhalt des Akkumulators auf den Stack.

PLA (= Pull accumulator from stack) in- krementiert den Stapelzeiger, zieht den Inhalt der entsprechenden Stapelspei- cherstelle vom Stapel und überträgt ihn in den Akkumulator.

Mit der Befehlsfolge PHA ... PLA läßt sich der Akkumulatorinhalt vorüberge- hend zwischenspeichern, doch präge man sich die goldene Regel ein, daß der PLA stets vor dem nächsten RTS statt- finden muß, andernfalls würde RTS den Akkumulatorinhalt anstelle der Rück-

. sprungadresse vom Stapel ziehen!

TSX (Transfer stack pointerto X register) überträgt den Inhalt des Stapelzeigers in das X-Register.

TXS (Transfer Xregisterto stack pointer) überträgt den Inhalt des X-Registers in das Stapelzeigerregister.

Dabei ist zu beachten, daß der Stapelzei- ger nur über das X-Register, also z.B. nicht über den Akkumulator, gelesen und verändert werden kann. Mit der Be- fehlsfolge

LDX #$FF TXS

läßt sich der Stapelzeiger neu initialisie- ren (siehe JSR-Beispiel 2).

Teil 6

Bevor wir uns der hexadezimalen Addition und Subtraktion zuwenden, werfen wir zu- nächst einen Blick auf die dezimale Addi- tion, wie sie ein „ABC-Schütze“ durch- führt (Kasten 1).

Fall 1 erfordert keinen Übertrag. Fall 2 ver- langt einen Übertrag in der ersten Stelle. In Fall 3 sind zwei Überträge nötig; gleich- zeitigsehen wir, daß die Addition von zwei s-stelligen Zahlen höchstens zu einem s + 1-stelligen Ergebnis führt.

Betrachten wir nunmehr die hexadezimale Addition (Kasten 1). Zur Erinnerung: Die hexadezimalen Ziffern erstrecken sich von $0 bis $F, womit ein Übertrag von $1 erst dann notwendig wird, wenn die Summe von zwei hexadezimalen Ziffern $F (= de- zimal 15) überschreitet.

In Fall 1 ist wiederum kein Übertrag nötig, denn $1 + $1 = $2 und $D + $1 = $E.In Fall 2 ist ein Übertrag in der ersten Stelle erforderlich, denn$F + $1 = $10.InFall3 sind zwei Überträge vonnöten. Wir addie- ren hier bei der ersten Stelle: $F + $1 = $0 plus $1 „im Sinn“, und bei der zweiten Stelle$E + $1 + $1 „im Sinn“ = $0 + $1 „im Sinn“, was in die dritte Stelle übertra- gen wird. Auch für die hexadezimale Addi- tion gilt, daß die Summe von zwei s-stelli- gen Hexzahlen höchstens s + 1-stellig sein kann.

Das Carry-Flag ist das Übertrags-Flag oder Übertrags-Bit. Mit dem Befehl CLC (Clear Carry) kann der Übertrag gelöscht und mit SEC (Set Carry) gesetzt werden. Mit dem Befehl ADC (= Add with Carry) werden zwei zweistellige Hexzahlen zu- sammenaddiert und mit SBC (= Subtract with Carry) voneinander subtrahiert. Für eine 8-Bit-Addition (= Addition von zwei zweistelligen Hexzahlen), die höchstens eine zweistellige Hexzahl als Ergebnis ha- ben soll, und für die 8-Bit-Subtraktion gel- ten stets die in Kasten 2 wiedergegebenen Prozeduren.

Die hexadezimale Addition und Subtrak- tion geschieht stets byte-weise und nicht nibble-weise (halbbyte-weise). Zum Bei- spiel besteht die zweistellige Hexzahl $AO aus zwei Nibbles oder zwei Halbbytes $A und $0. Sollen nur zwei niederwertige Nib- bles, z.B. $A und $B, addiert werden, so muß dies in der Form

CLC

LDA #3$30A $0HighNibble, $A Low Nibble

ADC #$0B $0High Nibble, $B Low Nibble

vor sich gehen, d.h. die höherwertigen Nibbles sind auf Null zu setzen. Bei den zwei Beispielen in Kasten 3 werden bei der Addition jeweils zwei Nibbles zu einem Byte zusammengefaßt.

45

Kasten 1

Fall 2 Fall 3

19 99 v 99 1 13

90 19:8

Fall 1

Zi 2

82

(Überlauf in 3. Stelle)

Dezimale Addition

Kasten 2

CLC LDA ADC BCS BCC

HEXZAHLI1 HEXZAHL2 FEHLER OKAY

1-Byte-Addition

Kasten 3

Er. Er 11 11

$00EFEF $001111

D 1 11

Übertrag („Carry“, „im Sinn“)

E..8

Fall 3

DF EF 11 4 1 1.4

FO 100 (Überlauf in 3. Stelle)

Carry

Hexadezimale Addition

Vor der Addition das Carry löschen Summand1 in A-Register laden Summand2 zum A-Register hinzuzählen Überlauf, falls Summe > $FF

Kein Überlauf, falls Summe < $FF