Einzelpreis DM 6,50

ee ee un Krane ul Fanklau; €. sr adei <a nen Jr Pa ag, Em Vae ana

EEE

RES

ee 2

eye

ee

SUR MAR VENEN

N

ne

Sie haben einen Apple...

wir haben die Software...

und die Hardware...

u ar

ee ET

er JRR

Pi ir a

und die Zeitschriften...

2 Sr die Bucher...

en Ben Fe fan

PRESS, are

u

EETETEE NE > ;

ALLES FÜR DEN APPLE II, I*, NE

mn Dr.-Ing. Eden

UHLANDSTR. 195 - D-11000 BERLIN 12 TEL.(OSO) 310 423 -TELEX:185859 „Ir

Autorisierter @geppie Fachhändler MICROSOFT Distributor

Mit diesem Heft liegt Ihnen die erste Aus- gabe von „Peeker“ vor, die übrigens be- reits die 45. Zeitschrift der Verlagsgruppe Dr. Alfred Hüthig ist. „Peeker“ ist wenn man von dem nicht allgemein erhältlichen Vereinsblatt des deutschen Apple-Clubs in Oberhausen absieht das erste deutschsprachige Magazin, das sich aus- schließlich mit Apple-Computern befaßt. PEEK ist ein Befehl aus der Programmier- sprache BASIC, der die Untersuchung ei- ner Speicherstelle gestattet. „Peeken“ muß man immer dann, wenn man bei ei- nem Computer etwas genauer wissen will. Und genau dies ist die Zielsetzung unse- rer neuen Zeitschrift „Peeker“. Schön verpackte, aber oberflächliche Information hilft keinem Apple-Besitzer weiter, gleich- viel ob er Selbstprogrammierer oder reiner Anwender ist. Nehmen wir als Beispiel den Image-Writer als einen der für Apple- Computer erhältlichen Matrix-Drucker. Die Handhabung der nicht genormten Steuer- zeichen von Druckern war stets und ist im- mer noch ein leidiges Problem für alle Ap- ple-Benutzer. Mankönnte sich nunineinem Aufsatz über den Image-Writer auf ober- flächliches Blabla in der Art „Der Image- Writer hat ein gefälliges beige Design und iin seinem Herzen klopft ein kräftiger Prozes- sor“ beschränken. Besitzt man jedoch erst einmal einen Image-Writer, dann stellt

man plötzlich ganz andere Dinge als ein pochendes Herz oder ein formschönes Styling fest. So kommt man beispielswei- se rasch zu der ernüchternden Erkenntnis, daß die mitgelieferte serielle Schnittstelle keinerlei druckerspezifische ROM-Soft- ware enthält und demzufolge viele nützli- che Befehle fehlen. Jetzt beginnt die Pha- se des „Peekens“, d.h. die Suche nach gezielten Detailinformationen, damit der Drucker das macht, was Sie von ihm er- warten. Und genau hier setzt unser „Pee- ker“ ein. Jedes Heft enthält eine Fülle nützlicher Utilities und Programme, Tips und Tricks, Test- und Erfahrungsberichte sowie Aufsatzserien für Anfänger und Fortgeschrittene. Damit Sie die teilweise sehr umfangreichen, professionellen Pro- gramme nicht abtippen müssen, erscheint je nach Bedarf etwa alle 2-3 Monate eine Sammeldiskette, die die größeren Pro- gramme aus den vorangehenden Heften von „Peeker“ zusammenfaßt.

(ir rm

Huthig

PUBLIKATION

iNHA

7/84

Impressum

Peeker

Magazin für Apple-Computer 1. Jahrgang 1984

ISSN 0176-9200

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

Verleger und Herausgeber:

Dipl.-Kfm. Holger Hüthig Geschäftsführung Zeitschriften:

Heinz Melcher

Chefredakteur:

Ulrich Stiehl (us) Tel. (06221) 489352

Anzeigenleitung:

Bernd Beutel, Tel. (06221) 489218 z. Zt. gilt Anzeigenpreisliste Nr. 1 Vertriebsleitung:

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

Der neue 65C02-Prozessor 65C002-Disassembler für Apple Ile

Accelerator Ile Die neue Superkarte

Applesoft simuliert Turtle Graphic

Wie man die Grafik verdoppelt. Teil 1: Double Lores

Hires-Grafik-Dump für Epson-Drucker

Turbo-Pascal Schritt für Schritt

ProDOS-Patch für geänderte

Patch für PRODOS.INIT

Wer ist der schnellste? Primzahlen-Preisausschreiben

Hinweise für Autoren Neue Produkte Neue Bücher

Dr. Alfred Hüthig Verlag GmbH Im Weiher 10, Postfach 102869

Telefon (06221) 489-1 Telex 4-61727 hued d.

6

14

19

26

32

40

91

54

56

58 62 63 65

Erscheinungsweise:

1984 2 Hefte, ab 1985 12 Hefte jährlich. Jahresabonnement DM 58,-, einschließlich MwSt, im Inland portofrei.

Einzelheft DM 6,50

A

65C02-Feature

In diesem dreiteiligen Feature ist alles zu- sammengetragen, was Sie schon immer über den neuen 65C02-Prozessor wissen wollten. Im ersten Beitrag „Der neue 65C02-Prozessor“ werden die neuen Be- fehle detailliert geschildert und an Hand von Beispielprogrammen erläutert. Im zweiten Aufsatz wird ein „65C02-Dis- assembler für Apple Ile und Il Plus“ vor- gestellt, der auf dem Ilc-Disassembler ba- siert und sogar auf Geräten lauffähig ist, die nur über den alten 6502-Prozessor verfügen. Schließlich werden im dfritten Beitrag „Accelerator Ile Die neue Super- karte“ die Geheimnisse der brandneuen CMOS-Karte mit dem 4MHz-65C0020 ent- hüllt. Insbesondere wird gezeigt, wie man sich das Pseudo-ROM für modifizier- te Monitor- und Applesoft-ROMs zunutze machen kann.

30

Double Lores

Double Hires auf dem Apple-Ile mit 64K- Karte ist seit einiger Zeit bekannt. Daß aber auch doppelte Lores-Grafik möglich ist, wird hier erstmals geschildert. Damit eröffnen sich neue Perspektiven für Spiel- programme, für die Hires zu fein und nor- male Lores zu grob in der Grafikauflösung ist.

38

Hires-Grafik-Dump

Diese professionelle Utility gestattet den Hires-Bildschirmausdruck mit allen nur denkbaren Features wie horizontaler und vertikaler Verzerrung, Bildausschnittver- größerung usw.

91

Turbo-Pascal

Für alle Pascal-Liebhaber, die auf das schnellere und komfortablere Turbo-Pas- cal umsteigen wollen, wird hier eine minu- tiöse Schritt-für-Schritt-Anleitung zur Sy- stemkonfigurierung und zur Erstellung Ih- res ersten „Turbo“ -Programms gebracht.

94

ProDOS-Patches

Mehrere Patch-Programme zeigen, wie man erstens ProDOS auch bei geänder- tem Monitor-ROM sowie zweitens bei 80- Spur-Laufwerken zum Laufen bringt.

98

Primzahlen-Preisausschreiben

Wollen Sie 500,-— DM gewinnen? Dann beteiligen Sie sich an unserem Prim- zahlen-Geschwindigkeitswettbewerb!

nn III

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

Bankkonten: Landeszentralbank Heidel- berg 67207 341; BLZ 67200000; Deutsche Bank Heidelberg 0 2165 041; BLZ 67270003; Bezirkssparkasse Heidelberg 20451, BLZ 67250020.

Brüssel 723026; Dänemark: Kopenhagen

34969; Norwegen: Oslo 994 24; Schweden: Stockholm 5477 76-5

Herstellung: Heidelberger Verlagsanstalt Printed in Germany

Der neue

Ulrich Stiehl

- Der neue 65C02-Prozessor

-— 65C02 Disassembler für Apple Ile und Il Plus

Accelerator lle: Die neue Superkarte

Der 65C02 ist eine Erweiterung und Verbesserung des alten 6502-Prozes- sors. Während der neue Apple Ilc den neuen 65C02 in der 1 MHz-Version be- reits eingebaut hat, besteht beim Apple I Plus und Apple Ile die Möglichkeit, den alten 6502 durch den neuen 65C02 (indes nur in der 1-MHz-Version) aus- zuwechseln. Darüber hinaus kann die brandneue 65C02C-Karte namens „Ac- celerator Ile“, die mit 4 Megahertz ge- taktet ist, in den Apple Ile oder auch den Apple Il Plus eingesetzt werden, womit alle Programme bis zu 350% schneller laufen.

65C02-Prozessor

Die nachfolgenden technischen Details sowie das Diagramm basieren auf Unterla- gen der Rockwell International GmbH, Fraunhoferstraße 11, 8033 München-Mar- tinsried, sowie auf eigenen Untersuchun- gen anhand der Accelerator-Karte. Neben dem sog. R65C02 liefert Rockwell noch

die Derivate R65C102 und R65C112. Den R65C02 gibt es (a) in Keramik- und Pla- stik-Versionen, (b) in 1, 2, 3 und 4 MHz- Versionen sowie (c) in kommerziellen und industriellen Temperatur-Versionen (im ersteren Fall O Grad bis 70 Grad Celsius).

Alle 65C02-Prozessoren werden als CMOS-CPUs geliefert, während die alten 6502-Prozessoren NMOS-CPUs waren (CMOS = Complementary Metal Oxide Semiconductor). Von Vorteil ist der erheb- lich geringere Stromverbrauch gegenüber der NMOS-Technologie. Von Nachteil ist dagegen die relativ hohe Empfindlichkeit gegenüber statischer Elektrizität. (Bei- spielsweise sollte man sich bei der Acce- lerator-Karte erst einmal „entladen“, in- dem man etwa auf das Netzteil-Metallge- häuse des Apples greift, bevor man die Karte anfaßt.)

Verbesserungen

Neben den eigentlichen neuen Befehlen sind folgende technische Verbesserungen implementiert worden:

a) Ungültige Operationscodes

Ungültige Op-Codes, z.B. $02, werden jetzt allesamt als NOPs bzw. $EA behan- delt. Beispiel für Apple Il Plus/lle:

CALL -151

0300: 02 4C 59 FF

0300G

Beim Apple Il Plus bzw. Ile mit normalem 6502-Prozessor würde der Apple nach 300G hängen“.

Beim Apple IIc oder beim Apple Ile mit Accelerator Ile würde $02 ignoriert und dann der nächste Befehl ab $0301 ausge- führt.

Für das Debuggen von Maschinenpro- grammen ist die Behandlung von Nicht- Op-Codes als NOPS indessen eher nach- teilig, da man hierbei u.U. nie feststellt, daß das Programm „Schrott-Stellen“ ent- hält.

b) Bug beim indirekten JMP

Der Fehler beim indirekten Sprung, z.B. JMP ($10FF), wurde beseitigt. Dieser Feh- ler trat nur dann auf, wenn sich das Low Byte der indirekten Adresse in einer belie- bigen Speicherstelle $??FF befand, also das Low Byte am Ende der letzten Page und das High Byte am Anfang der näch- sten Page stand. Beispiel:

CALL -151

0300: 4C 59 FF JMP $FF59 (Reset-Adresse)

0303: 6C FF 10 JMP ($10FF)

10FF: 00 Low Byte von $0300 1100: 03 High Byte von $0300 0303G

Nach 303G erfolgt beim neuen 65C02 ein korrekter indirekter Sprung zur Adresse $0300, die sich der Prozessor aus $10FF (Low Byte) und $1100 (High Byte) holt.

Demgegenüber würde sich der alte 6502 ment A ®

irttümlicherweise das Low Byte von Spei- cherstelle $10FF und das High Byte von Speicherstelle $1000 holen. Um dies zu beweisen, geben wir folgendes ein:

1000: 03 (High Byte!)

10FF: 00 (Low Byte!)

1100: 00 (High Byte wird ignoriert!) 0303G

Beim alten 6502 springt der Prozessor nunmehr nicht nach $0000, sondern nach $0300.

c) Dezimalmodus

Nach Hardware-Reset, d.h. nach Drücken der Ctrl-Reset-Tasten, schaltet der 65002 nunmehr automatisch auf Binärmodus bzw. Nicht-Dezimalmodus (CLD) um. Da dies beim alten 6502 nicht der Fall war, mußte CLD durch die Software-Reset- Routine bei $FF59: CLD bzw. bei $FAB2: CLD nachgeholt werden.

Bei ADC und SBC im Dezimalmodus sind die Flags N (Negative), V (Overflow) und Z (Zero) nunmehr gültig, wobei diese Befeh- le jedoch dann 1 Takt mehr benötigen. Beim alten 6502 waren bei Dezimalopera- tionen die N-, V- und Z-Flags unbestimmt bzw. ungültig.

d) Read-Modify-Write

Die direkten Speicheränderungsbefehle (Read-Modify-Write-Befehle) DEC, INC, ASL, LSR usw. werden beim 6502 mit 1 Lese- und 2 Schreibzyklen und bei 65C02 mit 2 Lese- und 1 Schreibzyklus ausge- führt. Inwieweit dadurch die Softswitches des Apple Il, z.B. $C030 für Lautsprecher, andersartig beeinflußt werden, konnte bis- lang nicht festgestellt werden. Bei den Softswitches ist es bekanntlich nicht irrele- vant, ob man auf diese mit LDA oder STA zugreift. Sinngemäßes gilt für DEC, INC USW.

Erweiterungen Neue Befehle

BRA = Op-Code $80 = Branch relative always

Dieser Befehl bewirkt eine unbedingte, re- lative Verzweigung, während die alten be- dingten Verzweigungsbefehle BCC, BCS usw. von dem jeweiligen Flag abhängen. Der BRA-Befehl ist insbesondere für relo- kative Programme sehr nützlich. Beim al- ten 6502 war man gezwungen, Schein- flags zu setzten, um eine unbedingte, rela- tive Verzweigung zu erzwingen, z.B. CLV BVC LABEL.

DEC A = DEA = Op-Code $3A = Decre-

E FEATURE aM

INC A = INA = Op-Code $1A = Incre- ment A

DEC A vermindert den Akkumulator um 1: A = A - 1 und entspricht insoweit den DEY- und DEX-Befehlen. Die Assembler- Syntax ist DEC A, DEC oder DEA. INC A erhöht den Akkumulator um 1:A=A +1 und entspricht den INY- und INX-Befeh- len. Die Assembler-Syntax ist entspre- chend INC A, INC oder INA.

DEC A ersetzt die Folge SEC SBC #1 und INC A ersetzt CLC ADC #1, wodurch einige Prozessor-Takte eingespart werden können.

PHX = Op-Code $DA = Push X on Stack PHY = Op-Code $5A = Push Y on Stack PLX = Op-Code $FA = Pull X from Stack PLY = Op-Code $7A = Pull Y from Stack

Bei alten 6502 konnte man nur den Akku- mulator direkt auf den Stack retten. Wollte man auch noch die X- und Y-Register ret- ten, so mußte man etwa wie folgt ko- dieren:

PHA Vorher: A,X und Y auf Stack TXA schieben

PHA

TYA

PHA

PLA Nachher: Y, X und A vom Stack TAY holen

PLA

TAX

PLA

Beim 65C02 geht es nunmehr viel ele- ganter:

PHA Vorher: A,X und Y auf Stack PHX schieben

PHY

PLY Nachher: Y, X und A vom Stack PLX holen

PLA

Dadurch wird das Programm nicht nur kür- zer, sondern auch schneller, da jeweils 2 Befehle eingespart werden.

STZ $1000 = STZ Absolute Adresse = Op-Code $9C

STZ $1000,X = STZ Absolute Adresse, X = Op-Code $9E

STZ $00 = STZ Zeropage = Op-Code $64

STZ $00,X = STZ Zeropage, X = Op- Code $74

Diese Befehle setzen eine Speicherstelle auf Null bzw. Zero $00. Das „Z“ in STZ steht nicht für Zeropage-Adressierung, sondern für Zero = Null = Byte $00. Die Register A, X und Y bleiben unverändert.

7

Es wurde Zeit, daß mal ein

Kapitalist die Welt verändert.

SEN

he Pre

CONTROL SECTION ———» RES IRQ NMI

are

#—— REGISTER SECTION a

ge

ADDRESS BUS PROCESSOR

7 STATUS REGISTER P

INSTRUCTION REGISTER

R 65C02 Interne Architektur

Beim 6502 muß man demgegenüber ein Register „opfern“, um eine Speicherstel- le zu löschen, z.B. LDA #$00 STA ADRESSE.

TRB $FFFF = Test and reset memory bits with accumulator (Absolute Adresse) = Op-Code $1C TRB $00 = Test and reset memory bits with accumulator (Zeropage-Adresse) = Op-Code $14

Dieser Befehl ist neu und entspricht einem AND-Befehl mit umgekehrten Vorzeichen, d.h. Undierung mit Einerkomplement des Bitmusters. Beim alten 6502 würde man etwa wie folgt simulieren:

LDA BITMUSTER

AND MEMORY

EOR #% 11111111

STA MEMORY

TRB besagt, daß eine Speicherstelle M durch den Inhalt des Akkumulators A ver- ändert wird, wobei A selbst unverändert bleibt, und zwar blendet TRB bei M dieje- nigen Bits weg, die bei A gesetzt sind.

10

A 1111 1111

A 1111 0000

Beispiele:

M 1111 1111 LDA #$00 TRB M, wobei M A 0000 0000 vorher $FF M 1111 1111 M nachher $FF

M 1111 1111 LDA #$FF TRB M, wobei M A 1111 1111 vorher $FF

M 0000 0000 M nachher $00

M 0000 0000 LDA #$FF TRB M, wobei M vorher $00

M 0000 0000 M nachher $00

M 0000 0000 LDA #$00 TRB M, wobei M A 0000 0000 vorher $00

M 0000 0000 M nachher $00

M 1111 1111 LDA #$7E TRB M, wobei M A 0111 1110 vorher $FF

M 1000 0001 M nachher $81

M 1010 1010 LDA #$F0 TRB M, wobei M vorher $AA

M 0000 1010 M nachher $0A

A 1111 0000

TSB $FFFF = Test and set memory bits with accumulator (Absolute Adresse) = Op-Code $0OC

TSB $00 = Test and set memory bits with accumulator (Zeropage-Adresse) = Op- Code $04

TSB entspricht dem ORA-Befehl, der je- doch direkt auf eine Speicherstelle ange- wandt wird. 7SB blendet bei M diejenigen Bits hinzu, die bei A zusätzlich gesetzt sind. Beim alten 6502 würde man dies simulieren mit

LDA BITMUSTER ORA MEMORY STA MEMORY

Einige Beispiele:

M 1111 1111 LDA #$00 TSB M, wobei M A 0000 0000 vorher $FF M 1111 1111 M nachher $FF

M 1111 1111 LDA #$FF TSB M, wobei M A 1111 1111 vorher $FF

M 1111 1111 M nachher $FF

M 0000 0000 LDA #$FF TSB M, wobei M A 1111 1111 vorher $00

M 1111 1111 M nachher $FF

M 0000 0000 LDA #$00 TSB M, wobei M A 0000 0000 vorher $00

M 0000 0000 M nachher $00

M 1111 1111 LDA #$7E TSB M, wobei M A 0111 1110 vorher $FF

M 1111 1111 M nachher $FF

M 1010 1010 LDA #$F0 TSB M, wobei M vorher $AA

M 1111 1010 M nachher $FA

Während die Befehle AND und ORA nur den Inhalt des Akkumulators beeinflussen, können mit TRB und TSB die Inhalte von Speicherstellen direkt verändert werden, wobei der Akkumulator unverändert bleibt. Die Befehlsfolge lautet stets:

LDA BITMUSTER TSB MEMORY oder

LDA BITMUSTER TRB MEMORY

Nehmen wir an, bei einem Textverarbei- tungs-Text, der sich im Speicher $2000- $3FFF befände, sollte bei jedem Buchsta- ben Bit 7 gelöscht werden. Zu diesem

PL EEEEREEEEEIEIEEEEEEEETG

Zweck müßte man beim alten 6502 den gesamten Bereich mit der Befehlsfolge LOOPLDAM

AND #%01111111

STAM ..jetzt M inkrementieren und erneut zu LOOP... „bearbeiten“. Hingegen würde man beim neuen 65C02 mit der Schleife

LDA # % 10000000 LOOP TRBM ... Jetzt M inkrementieren und erneut zu LOOP... zu einer erheblich kürzeren Ausführungs- zeit kommen.

BBR, BBS, RMB, SMB

BBR (Branch on bit reset), BBS (Branch on bit set), RMB (Reset memory bit) und SMB (Set memory bit) sind laut Auskunft der Firma Rockwell nur beim R65C02 als Zeropage-Bitmanipulationsbefehle imple- mentiert. Meine Accelerator-Karte ist mit einem NCR-65C02C bestückt, der diese Befehle nicht kennt. Dasselbe gilt für den im Apple Ilc befindlichen 65C02. Auch der Apple-IIc-Disassembler verwendet die neuen Op-Codes nicht. Es wird empfoh- len, auf die Benutzung dieser OP-Codes zu verzichten, um Kompatibilität mit allen 65C02-Varianten zu gewährleisten.

Neue Adressierungsarten Indirekte nicht-indizierte Adressierung

Anstelle der häufig benutzten Adressie- rungsform

LDA (INDIREKT), Y

usw., die bislang nur mit Hilfe des Y-Regi- sters implementiert werden konnte, be- steht nunmehr die zusätzliche Möglichkeit, auf Y völlig zu verzichten. Im einzelnen gilt dies für folgende Befehle:

LDA (INDIREKT) = Op-Code $B2; neben LDA (INDIREKT), Y STA (INDIREKT) = Op-Code $92; neben STA (INDIREKT), Y ORA (INDIREKT) = Op-Code $12; neben ORA (INDIREKT), Y EOR (INDIREKT) = Op-Code $52; neben EOR (INDIREKT), Y AND (INDIREKT) = Op-Code $32; neben AND (INDIREKT), Y ADC (INDIREKT) = Op-Code $72; neben ADC (INDIREKT), Y SBC (INDIREKT) = Op-Code $F2; neben SBC (INDIREKT), Y CMP (INDIREKT) = Op-Code $D2; neben CMP (INDIREKT), Y

Dies ist eine nützliche Erweiterung, da man nunmehr bei Array-Manipulationen nicht mehr permanent das Y-Register ret- ten bzw. für die indizierte Adressierungs- form freihalten muß.

BIT-Adressierung

Der BIT-Befehl wurde um drei neue Adressierungsarten erweitert. Insgesamt gibt es jetzt folgende BIT-Instruktionen:

BIT $00 Zeropage-Adressierung (alt) - Op-Code $2C

BIT $1000 Absolute

Adressierung (alt) - Op-Code $24

BIT $00,X Indizierte Zeropage-Adressie- rung (neu) - Op-Code $34

BIT $1000,X Indizierte absolute Adressie- rung (neu) - Op-Code $3C

BIT #$00 Unmittelbare Adressierung (neu) - Op-Code $89

Die unmittelbare Adressierungsform scheint mir nutzlos zu sein, da hiermit nicht Bit 7 (N-Flag) und Bit 6 (V-Flag) getestet werden können, was für alle an- deren BIT-Adressierungsarten zutrifft.

Indizierter, indirekter JMP

JMP ($1000,X) - Op-Code $7C - ist eine wertvolle Erweiterung des indirekten Sprungs für den Fall, daß eine Sprung- adresse einer Tabelle entnommen werden soll. Nehmen wir an, ab Speicherstelle $1000 steht folgende fingierte Sprungta- belle:

1000: 00 20 $2000 O0. Sprung

1002: 00 30 $3000 1. Sprung

1004: 00 40 $4000 2. Sprung usw. Nehmen wir fernerhin an, der zweite Sprung sei auszuführen. Dann verfahren

wir wie folgt:

LDA #2 ‚2. Sprung

ASL 2x*2=4 = $1004 TAX

JMP ($1000,X) ‚entspricht JMP $3000 D.h. $1000 + X = $1004 enthält das Low Byte und $1004 + 1 = $1005 enthält das High Byte der effektiven Sprungadresse.

Das nachfolgende „65C02-Demo einiger neuer Op-Codes“ veranschaulicht die Anwendung der neuen Befehle und Adressierungsarten. Dieses Demo zeigt übrigens folgende Hexzahlen und ASCII- Zeichen an:

030201

01

BCA

OA AF

FEATURE u

Zur Assemblierung wurde der zu den von Firma Apple herausgegebenen „ProDOS Assembler Tools“ gehörige 6502-Assem- bler verwendet, der ebenso wie der „Bug- byter Debugger“ die neuen Befehle verar- beitet. Der Assembler-Quellcode muß zu diesem Zweck mit dem Pseudo-Op-Code „X6502“ eingeleitet werden.

Zusätzlich zu dem Source-Code des 65C02-Demos wird das disassemblierte Listing in der Form abgedruckt, wie es mit dem „65C02-Disassembler“, der im nachfolgenden Aufsatz geschildert wird, erzeugt werden kann.

Schlußbemerkung

a) Da der Apple II Plus und der Apple Ile im Gegensatz zum Apple Ilc „von Hause aus. den 65C02 nicht enthalten, sollte man in kommerziellen Programmen, die für alle Gerätetypen gedacht sind, auf die neuen Op-Codes verzichten.

b) Bei eigenen Programmen lohnt es sich u.U., den alten Apple Il Plus bzw. Apple Ile mit dem neuen 65C02 zu bestücken und die neuen Op-Codes zu verwenden, da Programme dann etwas kompakter und zugleich etwas schneller werden. Der Vor- teil ist Jedoch nur in Spezialfällen überzeu- gend. Grundsätzlich kann man auch ohne die neuen Op-Codes auskommen.

c) Wichtiger scheint mit der Umstand, daß der 65C02 weniger Wärme entwickelt. Wer sich z.B. noch an die „brütende Hit- ze“ der alten Videx-Karte im Apple Il Plus zurückerinnern kann, der wird von der „wohligen Kühle“ der Accelerator-Ile-Kar- te im Apple Ile angenehm überrascht sein. Ventilatoren werden dann überflüssig.

d) Der 65C02-Prozessor wird erst dann richtig munter, wenn er mit mehr als 1 MHz getaktet ist, d.h. mit etwa einem 3,5- MHzZ-65C02 und der Verwendung der neuen Op-Codes laufen entsprechende Programme bis zu 400% schneller als vor- her, womit ein 65C02C durchaus an die Leistungsfähigkeit von 16-Bit-Prozesso- ren heranreichen kann. Deshalb ist es be- dauerlich und unverständlich, weshalb die Firma Apple den Apple Ile und Apple Ilc nicht mit den schnelleren Prozessor-Va- rianten bestückt hat.

12

0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0300: 0302: 0303: 0303: 0303: 0303: 0305: 0307: 0309: O30A: 030B: 030C: 030D: 0310: 8311: 0312: 0315: 0316: 0317: O31A: O31A: O31C: O31F: O31F: O31F: O31F: 0321: 0323: 0326: 0329: O32B: 032D: O32D: O32D: 032D: O32D: O32D: 0330: 0333: 0335: 0337: O33A: 035C: 0O33F: 033F: O33F: O33F: O33F: 0341: 0344: 0345: 0348: 0349: O34AA: 034D: O34F: 0352: 0352: 0352: 0352: 0354: 0357: 0359: 035C: O35F: 0362: 0364: 0367: O36A: O36D: O36E: O36E: 0O36E: O36E:

80 00

B2

01

01

05

DA

DA

DA

8D ED

ol FF 00

FE 00

c2 ED

ED 8D ED

CE

FD

FD

FD

FD

10 10

10 10

FD

FD

FD

FD

FD

FD

0300

0300 00CE

FDED FDDA

0303

oo os u PuvdHr

ORG $300 * * 65C02C-Demo einiger neuer Op-Codes vv J mm mm mm —— * X6502 ‚65C02C-Pseudo-Op * IND EQU $CE COUT EQU _S$FDED ; PRINT PRBYTE EQU $FDDA ; HEXOUT * %* * Unbedingte, relative Verzweigung * BRA STETS ;‚Verzeigung erfolgt stets BRK ;‚BRK wird übersprungen! * * Push/Pull X/Y on/from Stack * STETS LDX #1 LDY #2 LDA #3 PHX ;Push X auf Stack PHY ;Push,Y auf Stack PHA PLA JSR _PRBYTE PLY ;Pull Y vom Stack TYA JSR PRBYTE PLX ;Pull X vom Stack TXA JSR PRBYTE . LDA +#$8D ;Return JSR COUT * * $1000, $10FF, $00FE und $00FF auf 1 setzen * LDA #1 LDX +#$FF STA $1000 STA $1000,X STA $00FE STA $0000,X * * $1000, $10OFF, $00FE und $00FF auf 0 setzen * STZ = Store Zero entspricht LDA #$00 STA Adresse * A-Register bleibt jedoch unverändert! * STZ _$1000 STZ $1000,X STZ _$00FE STZ _$0000,X JSR PRBYTE ;A noch 1! LDA +#$8D ;Return JSR COUT %* * INC A (= INA) und DEC A (= DEA) * Increment/Decrement von A-Register %* LDA #'B'+$80 JSR COUT zB INC A ;‚A=4+1 JSR COUT eh DEC A ;A=A-1 DEC A ;‚A=A-1 JSR _COUT ‚'A' LDA +#$8D ‚Return JSR COUT %* * Test Memory Bits with Accumulator * LDA #%11110000 TRB BYTEIl ‚Reset Bits LDA #%00001111 TSB BYTE2 ‚Set Bits LDA BYTEI JSR _PRBYTE LDA #$A0 JSR _COUT LDA BYTE2 JSR PRBYTE RTS ‚Ende Demo * * Indirekt Adressierung ohne Y %* LDA (IND)

0370:

92

0372:

0372: 0374:

0376

12

32

0378:

0378

O37A:

TR F2

037C:

037C

:D2

O3TE: O3TE: OZTE:

O3TE: 0380: 0382:

89 54 SC

0385:

0385:

0386

AA :AA

CE CE CE CE

CE CE

CE

AO

00

AO

105 *

Neue BIT-Adressierungsarten

106 BYTEl 107 BYTE2

Disassembler-Listing zu „65C02-Demo einiger neuer Op-Codes“

0300- 0302- 03503- 0505- 0507- 0309- 030A- 030B- 030C0- 030D- 0310- 0311- 0312- 0315- 0316- 0317- O31A- 031C- O31F- 0321- 0323- 0326- 0329- 0352B- 052D- 0530- 0353- 0335- 0337- 055A- 055C- 053F— 0541- 0344— 0345- 0348- 0349- O34A- 034D- O54F-— 0352- 0354—- 0357- 0359- 035C- 035F- 0362- 0564-— 0367- 0O56A- 036D- 036E- 0370- 0372- 0374- 0376- 0378- 037A- 037C- 0O37E- 0380- 0382- 0385- 0386-—

80

01

0l

02

05

DA

DA

FD

FD

FD

FD

10 10

10

10

FD

FD

FD

FD

FD FD 05 05 03 FD FD

05 FD

BRA BRK LDX LDY LDA PHX PHY PHA PLA JSR PLY TYA JSR PLX TXA JSR LDA JSR LDA LDX STA STA STA STA STZ STZ STZ STZ JSR LDA JSR LDA JSR INC JSR DEC DEC JSR LDA JSR LDA TRB LDA TSB LDA JSR LDA JSR LDA JSR RTS LDA STA ORA EOR AND ADC SBC CMP BIT BIT BIT

$0303

#$01 +#$02 #$03

$FDDA

$FDDA

$FDDA +$8D $FDED #$01 +$FF $1000 $1000,X $FE $00,X $1000 $1000,X $FE $00,X $FDDA +$8D $FDED +$C02 $FDED

$FDED

$FDED +$8D $FDED +$FO $0385 +$0F $0386 $0385 $FDDA #$AO $FDED $0386 $FDDA

($CE) ($CE) ($CE) ($CE) ($CE) ($CE) ($CE) ($CE) #$A0 $A0,X $A000,X

STA

ORA EOR AND

ADC SBC

CMP

BIT BIT BIT

DFB DFB

(IND)

(IND) (IND) (IND)

(IND) (IND)

(IND)

+$AO $A0,X $A000,X

%10101010 %10101010

REBEL % or EEE REES je 3052200002022 EEE

Tips und Tricks

Apple Assembler Tips und Tricks

von Ulrich Stiehl

1984, 226 S., 3 Abb., kart., DM 34,-

ISBN 3-7785-1047-9 Hüthig Verlag, Heidelberg

„Apple Assembler“ wendet sich an alle, die bereits Anfängerkennt- nisse der 6502-Programmierung haben - z.B. aufgrund des Buches „Apple Maschinensprache“ und nunmehr ein Nachschlagewerk für ihren Apple Il Plus/lle/llc suchen, in dem alle wichtigen ROM-Routi- nen sowie eine Vielzahl sonstiger Hilfsprogramme in einer systemati- schen Form zusammengestellt werden. Insgesamt umfaßt dieses Buch über 40 Utilities, darunter mehrere völlig neuartige Program- me wie Double-Lores, Double Hi- res, Screen-Format u.a.

Der erste Teil enthält ein Repetito- rum der wichtigsten Befehle, Adressierungsarten und sonstigen Besonderheiten des 6502.

Mit ausführlichen « Programmbeispielen

Ulrich Stiehl

Im zweiten Teil werden alle Adres- sen des Monitors zusammenge- stellt, die für Assembler-Program- mierer von Nutzen sein können. DarüberhinausfindetderLeser Un- terroutinen für hexadezimale Ad- dition/Subtraktion/Multiplikation/ Division, Binär-Hex-ASCIl-Um- wandlung usw.

Der dritte Teil befaßt sich mit der Speicherverwaltung der Language Card und der Ille-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 Applesoft- ROM gewidmet und listet eine große Anzahl nützlicher Interpre- ter-Adressen. Bei den Utility-Pro- grammen liegt das Schwergewicht auf Fließkommamathematik ein- schließlich Print Using.

Der letzte Teil behandelt den Text- und Graphikspeicher. Neben ei- nem professionellen Maskengene- ratorprogramm werden auch Routi- nen zur Double-Lores- und Dou- ble-Hires-Grafik vorgestellt.

Aus dem Inhalt: 6520-Repetitorium Monitor-ROM Speicherverwaltung Applesoft- ROM - Text- und Grafikspeicher

© or ERTN “RE ©

13

65C02-Disassembler

Dieser hier vorgestellte 65C02-Disas- sembler basiert auf dem im Jahre 1977 von Steve Wozniak geschriebenen 6502-Disassembler, der später für den Apple lic gepatcht und von uns nun- mehr für den Apple Il Plus und Ile modi- fiziert wurde. Da unsere Variante die neuen Op-Codes selbst nicht benutzt, kann sie auch als “Cross“-Disassem- bler auf denjenigen Apple-Modellen eingesetzt werden, die nicht mit dem 65C02-Prozessor bestückt sind.

14

für Apple Ile und Il Plus

Wenn man sich in seinen Apple Ile oder Apple Il Plus einen 65C02-Prozessor ein- gebaut hat oder wenn man eine Accelera- tor-Ile-Karte benutzt, wird einem erst rich- tig bewußt, wie wertvoll der im Monitor- ROM enthaltene Disassembler ist, denn dieser funktioniert jetzt nicht mehr. Ge- nauer gesagt, werden die neuen Op- Codes des 65C02 als „???“ gelistet. Der Apple IIc enthält zwar in dem umgeschrie- benen Monitor-ROM einen für den 65C02 gepatchten Disassembler, aber dieser läßt sich nicht ohne weiteres in die Language Card des Apple Ile oder Il Plus kopieren, da er teilweise Routinen überschreiben würde, die dringend benötigt werden, z.B. bei $FAB8 die PWRUP-Routine (Power- Up, Disk-Booten). Grundsätzlich gilt: Der ROM-Bereich $D000-$FFFF (Applesoft- Interpreter und Monitor) des Apple Il und Il Plus läßt sich in die Language Card des Apple Ile kopieren. Dagegen läßt sich we- der der ROM-Bereich des Apple Ile noch der des IIc in die LC des Apple Il oder II Plus schieben. Ferner kann auch der ROM-Bereich des Apple Ile nicht in die LC des Apple IIc verlegt werden und umge- kehrt. Die Gründe hierfür liegen in dem INTCXROM-Bereich $C100-$CFFF, der

beim Apple Il Plus fehlt und beim Apple Ile

und IIc völlig unterschiedliche Einsprung- adressen hat.

Deshalb habe ich den im Apple Ilc enthal- tenen 65C02-Disassembler dergestalt modifiziert, daß er uneingeschränkt auf dem Apple Ile und II Plus lauffähig ist. Allerdings mußten aus Platzgründen die Lores-Grafik-Routinen teils überschrieben werden, die deshalb nicht benutzt werden dürfen, während der modifizierte Monitor in der Language Card aktiv ist. Notfalls muß man den Bereich $F82A-$F878 aus dem Lores-Bereich heraus in einen ande- ren Bereich verlegen.

Es wurde darauf geachtet, daß der Disas- sembler die neuen Op-Codes selbst nicht benutzt, so daß man damit sogar 65C02- Maschinenprogramme disassemblieren kann, wenn man nicht über einen 65C02- Prozessor verfügt.

Das Programm 5„65C02-DISASSEM- BLER“ gliedert sich in folgende Teile:

$6000-$604D enthält eine Move-Routine, die den eigentlichen Disassembler, der zunächst im Speicher ab $604E liegt, in die Language Card verschiebt.

$F82A-$F878 enthält eine Erweiterung des alten 6502-Disassemblers. Aus Platz- gründen mußte die Program-Counter-Ad- just-Routine nach $F86A verschoben wer- den, doch steht an der ursprünglichen Stelle von PCADJ = $F953 ein Sprung nach $F86A, so daß die Kompatibilität mit den anderen Monitor-Routinen gewahrt bleibt.

$F879-$FASF enthält den Hauptteil des Apple IIc-Disassemblers mit einigen Pat- ches für den Apple Ile und II Plus. Man beachte, daß es zwei Mnenomics-Tabel- len gibt, und zwar zum einen die erweiter- te alte Mnenomics-Tabelle ab $FYF9 so- wie zum anderen eine neue Mnemonics- Tabelle ab $F853. Der 65C02-Disassem- bler berücksichtigt alle Mnemonics, die in den Programmzeilen 514-585 gelistet sind. Dazu gehören nicht die Befehle BBR, BBS, RMB und SMB, über die der Rock- well R65C02 zusätzlich verfügt; diese werden als „???“ gelistet.

Für diejenigen, die den Disassembler - z.B. wegen der nicht berücksichtigen Op- Codes - ändern wollen, ist nachfolgend der Source-Code gelistet. Da man dieses Programm infolge der mehrfachen ORGs in den Zeilen 1 und 120 als Assembler- Hexdump nur mit Mühe eingeben könnte, ist außerdem noch ein „normaler“ Hex- dump hinzugefügt.

us

6000: 6003:

6006: 6008: 600A: 600C: 6SO0E: 6010: 6012: 6013: 6015: 6017:

6019: 6O1B: 601D: 6OlF:

6021: 6023: 6025: 6027:

6029: 602B: 602D: 60ZF: 6031: 6033: 6035: 6037: 6039: 603B: 603D: 605F: 6041: 6043: 6045:

6047: 604AA: 604D:

AD AD

A9 85 A9 85

A9 85

85

AO Bl 9 E6 DO E6 E6 DO

AS c9 90 A5

90

AD AD 60

81 CO 8l CO

00 FC DO FD FC FC

F9 FD F5

85 CO 85 CO

ooıV91 And

ORG .

* *

$6000

* 65C02-DISASSEMBLER

KRRKKRRRRIT HH KK

*

%*

* Move-Routine x

*

*

RR

%*

* APSOFT = Interpreter + Monitor x $D000-$FFFF

* REST = Sonstiger Monitor

* $FA4O-$FFFF

APSOFT EQU

REST EQU IND1l EQU IND2 EQU

*

$D000 $FA4O $FC $FE

;-$FD ;-$FF

* Language Card schreibfähig * machen: Read ROM, Write LC

* MOVEI

LDA *

LDA $C081

$co8l

; RDROM

; WRRAM

* ROM ab $D000-$FFFF in LC * kopieren: Applesoft + F8-ROM

* LDY STY LDA STA

MOVE2 LDA STA INY BNE INC BNE

“*RKKKRK

LDA STA LDA STA

*

LDA STA LDA STA . LDY MOVE3 LDA STA INC BNE INC MOVE4A INC BNE INC MOVES LDA CMP BCC LDA CMP BCC *

INDl: $604E

IND2: $F82A

+0

IND1 #>APSOFT INDI+1 (IND1),Y (IND1),Y

MOVE2 IND1+1 MOVE2

$FB2A-$FAZF mit neuem Disassembler überschreiben

#<MOVE6+1

IND1 #>MOVE6 IND1+1

#<NEUl IND2

#>NEUl IND2+1

+0 (IND1),Y (IND2),Y IND1 MOVEA IND1+1 IND2 MOVE5 IND2+1 IND2+1 #>REST MOVE3 IND2 #<REST MOVE3

; LOADROM ;STORELC

;-$FFFF

;<$FAOO

;<$FA40

* LC lese- UND schreibfähig #* machen: Bank 2 R/W enable

* LDA LDA MOVES6 RTS *

$0083 $C083

:RDLC ;WRLC ‚Exit

FBRA: F82B: F82D: F830: F832: F833: F835:

F836: F839: F83B:

F83SC: F83D: F83E: F83F: F840: F841: F842: F843: F844: F845: F846: F847: F848: F849: FBAA: F84B: F84C: F84D: FS84E: FS4AF: F850: F851: F852:

F853: F854: F855: F856: F857: F858: F859: F85A:

98 A2

FO CA

60

BD AO 60

38 43 37 43 39 2l 36 21

16 SC F8 04

F8

55 F8 00

118 119 120 121 122 123 124 125 126 127 128 129 130 131 152 153 154 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

FEATURE

re Apple IIc Disassembler für 65C02-Processor,

umgeschrieben für Ile,

II Plus von U.Stiehl

„rk ker »+ „rt Kr Kr KH

KRITIK

Verwendbar auf Apple II Plus mit Language Card sowie auf Apple IIe. Disassemblierung ist sowohl möglich mit als auch ohne 65C02-Processor, da der Disassembler selbst die neuen Op-Codes NICHT benutzt!

Achtung: Lores-Grafik-Routinen ab $F800 werden teils über- schrieben und dürfen nicht aufgerufen werden!

= KK TFA DK DS

t | | | | | | | | | | |

* Externe Routinen *

PRYX2 EQU $FD9Y6 PRBYTE EQU $FDDA COUT EQU $FDED

%* %*%—-—-—-—--—-——- -—- - - - - - - - %* * Disassembler-Beginn: $F82A * ORG $F82A * NEUl TYA LDX +#$16 NEU2 CMP NEUTAB1l,X BEQ NEU3 DEX BPL NEU2 RTS

NEU3 LDA NEUTAB2,X LDY #$00 RTS

NEUTABl HEX 12 ;$00 HEX 14 HEX 1A HEX IC HEX 32 HEX 34 HEX 3A HEX 30 HEX 52 HEX 5A HEX 64 HEX 72 HEX 74 HEX 7A HEX 7C HEX 89 HEX 92 ‚10 HEX 9C HEX 9E HEX B2 HEX D2 HEX F2 HEX FC %* *%*—-—-—- —- —- 1-1... %* NEUTAB2 HEX 38 ;ORA HEX 43 ; TRB HEX 37 ‚INC HEX 43 ; TRB HEX 39 ; AND HEX 21 ‚BIT HEX 36 ;DEC HEX 21 ;BIT

F85B: F85C: F85D: F85E: FE5SF: F860: F861: F862: F863: F864: F865: F866: F867: F868: F869:

F86A: F86EB: F86ED: F86EF: F870: F872: F873: F875: F877: F878:

F879: F8TB: F87TC: F87D: FSTE: FETF: F881: F882: -F884: F886: F889: F8SC: F88E: F88EF: F890: F892: F893: F895: F897: F898: F899: F89C: F89F: F8Al: FAZ: F8A5: F8A6: F8A9: F8AB: FSAD: FSAF: F8B2: F8B4: F8B6: F8B7: F8B8: F8BA: FSBC: FSBE: FSBF: FSCl: F8C2: F8C3:

16

2F 3B

01

3A ol

04

OF 5A 96 48 3A 05

oC 87

20

FD

F9 F8

F9

F8

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 2ll iR 213 214 215 216 ir 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 2354 235 236 237 238 259 240 24l 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257

HEX 3A ; EOR HEX 40 PHY HEX 42 ;STZ HEX 3B ;ADC HEX 42 ;STZ HEX 41 :PLY HEX 22 ;JMP HEX 21 ;BIT HEX SC ;STA HEX 42 ;STZ HEX 42 812 HEX 3D ;LDA HEX 3E ;CMP HEX 5F ;SBC HEX 44 70

* %*

PC-Adjust aus Platzgründen an diese Stelle verschoben. Ursprünglich ab $F953,

wo jetzt ein JMP steht.

*%k%k x %*

*

PCADJ SEC ;$F953

PCADJ2 LDA $2F

PCADJ3 LDY $3B TAX BPL PCADJ4 DEY

PCADJA ADC $3A BCC RTS2 INY

RTS2 RTS

*

* Apple IIc ROM-Kopie ab $F879 * mit diversen Patches, da sich * die Opcodes TRB, PHY, PLY usw. * im IIc-ROM bei $FAB8-$FABC

* und $FAF8-$FAFC befinden,

* wo beim Apple II Plus und

* IIe unentbehrliche Monitor-

* Routinen stehen.

%* Ss

CRN2 BCC RTMSKZ LSR LSR LSR LSR RTMSKZ_ AND #$0F RTS INSDSI LDX $34A LDY $3B JSR PRYX2 JSR PRBLNK LDA ($3A,X) TAY LSR BCC INSDS1A ROR BCS IEVEN AND #$87 INSDSIA LSR ;neu TAX LDA FMTl,X JSR SCRN2 BNE GETFMT IEVEN LDY #$FC ;$F8Al! LDA #$00 GETFMT TAX :$F8A5! LDA FMT2,X STA $2E AND #$03 STA $2F JSR NEUl ‚4 BEQ RTSNEU AND #$8F TAX TYA LDY #$03 CPX #$8A BEQ MNNDX3 MNNDXl LSR BCC MNNDX3 LSR MNNDX2 LSR ORA #$20

MNNDX3

RTSNEU

*

DEY BNE INY DEY BNE RTS

HEX

MNNDX2

MNNDX1 ;neu

FFFFFF ;‚Füller

* Wird von $FE64 angesprungen

* INSTDSP PRNTOP

PRNTBL

PRADR1

PRADR2

PRADR3

PRADR4

PRADRS

RELADR

PRNTYX

“*xk x x* *

PCADJJMP JMP PCADJ

* FMT1

JSR PHA LDA JSR LDX JSR CPY INY BCC LDX CPY BCC PLA TAY LDA STA LDA STA LDA LDY ASL ROL ROL DEY

ADC JSR DEX BNE

LDX CPX BEQ ASL BCC LDA JSR LDA BEQ JSR DEX BNE RTS DEY BMI JSR LDA CMP LDA BCC JSR TAX INX BNE INY TYA JSR TXA JMP LDX LDA JSR DEX BNE RTS

HEX HEX HEX HEX

INSDS1 ‚extern

($3A) ,Y PRBYTE #$01 PRBL2 $2F

PRNTOP #+$03 +$04 PRNTBL

MNEML , Y $2C MNEMR, Y $2D #$00 #+$05 $2D

$2C

PRNM2 #+$BF COUT

PRMNI1 PRBLNK $2F #$06 #+$03 PRADR5 $2E PRADR3 CHAR2,X COUT CHAR1,X PRADR3 COUT

PRADR1

PRADR2 PRBYTE $2E +$E8 ($3A),Y PRADR4 PCADJ3

PRNTYX

PRBYTE

PRBYTE #$03 #$A0 COUT

PRBL2

Aus Platzgründen JMP nach Program Counter Adjust Wird von $FE67 angesprungen.

‚extern

‚neu

FYB5A: F95B: F95C: F95D: FY5E: FY5F: F960: F961: F962: F963: F964: F965: F966: F967: F968: F969: FY6A: FY6B: F96C: FYED: FY6GE: FY6EF: F970: F971: F972: F973: F974: F975: F976: F977: F978: F979: FITA: FYTB: F97TC: F97D: FITE: FYTF: F980: F981: F982: F983: F984: F985: F986: F987: F988: F989: FY8A: FY8B: F9SC: F98D: F98E: F9Y8F: F990: F991: F992: F993: F994: F995: F996: F997: F998: F999: FYQA: FY9B: F9SC: F9Y9D: FYYE: FYYF: FYAO: FOAl: FYA2: FYA3: FYAA: FYA5: FYAG: FYA7: FYAB: FYA9: FYAA: FYAB: FYAC: FYAD: FYAE: FYAF: F9BO: F9Bl:

346 347 348 349 350 351 352 355 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 38l 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 all 412 413 414 415 416 417 418 419 420 a2l 422 425 424 425 426 427 428 429 450 451 452 453

FMT2

CHAR1

CHAR2

HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX HEX

‚neu

‚neu

F9B2: F9B3:

F9B4: F9B5: F9B6: F9B7: F9B8: F9B9: FOBA: F9OBB: FYBC: F9YBD: FOBE: FOBF: F9CO: F9C1: F9C2: F9C3: F9C4: F9C5: F9C6: F9C7: F9C8: F9C9: FOCA: F9CB: FICC: FSCD: FSCE: FSCF: F9DO: FSDl: F9D2: F9D3: F9D4: F9D5: F9D6: F9D7: F9D8: F9D9: FODA: F9DB: F9DC: F9DD: FODE: FODF: FYEO: FYEl: FYE2: FYE3: FYEA: F9ES: FYES: FYET: F9EBS: FYE9: FYEA: F9IEB: FYEC: FYED: FYEE: FYEF: F9FO: FYF1: FYF2: FYF3:

FYF4: FYF5: FYF6: FYF7: FYFB8:

FYF9: FYFA: FYFB: FYFC: FYFD: FOFE: FYFF:

A8 A4

454 435 456 457 458 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 a7l 472 473 474 475 476 477 478 479 480 48l 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 50l 502 503 504 505 506 507 508 509 510 Sıl 512 513 514 515 516 517 518 519 520

FEATURE 7

*—-—-—-—-—-—------- - - - - - -

MNEML

*

* Ergänzung der Tabelle

*

%*

%*--—-—-—--——- ——- —- - 0... ...0

%* MNEMR

HEX A8 HEX A4

HEX IC HEX 8A HEX IC HEX 23 HEX 5D HEX 8B HEX 1B HEX Al HEX 9D HEX 8A HEX 1D HEX 23

HEX AE HEX AE HEX A8 HEX AD HEX 29 HEX 8A HEX 7C HEX 8B HEX 15 HEX 9C HEX 6D HEX 9C HEX AS HEX 69 HEX 29 HEX 53 HEX 84 HEX 13 HEX 34 HEX 11 HEX AS HEX 69 HEX 23 HEX AO

HEX 8A HEX 8B HEX AS HEX AC HEX 00

HEX D8 HEX 62 HEX 5A HEX 48 HEX 26 HEX 62 HEX 94

;$00

;$10

;$20

;$30

;$3F

;544

;BRK ‚PHP :BPL ;CLC ;JSR :PLP ;BMI

INPUT 2.0

Ein Bildschirm- Maskengenerator für DOS 3.3

und ProDOS

von U. Stiehl

1984, Diskette und Manual, DM 98,—

ISBN 3-7785-1021-5 FAOO: 88 521 HEX 88 ;SEC 65C02-Disassembler

nn. 2 - = $6000: AD 81 CO AD 81 CO AO 00 Der für den Apple II bestimmte Mas- $6008: 84 FC A9 DO 85 FD Bl FC ' une UM men Bu ur $6010: 91 FC C8 DO F9 E6 FD DO

kengenerator „Input 2.0“ basiert auf FAO4: 54 525 HEX 54 ;CLI x Bram: HE Be > a $6018: F5 A9 4E 85 FC A9 60 85 den früheren Programmen „Input $6020: FD A9 2A 85 FE A9Y F8 85 u « FAIRE BR m. rn $6028: FF AO 00 Bl FC 91 FE E6 1.0” und „Input 80 1.0“ (von denen FAOT: ES 528 HEX E8 ;BVS San: 5 Bi de Dh He I Fe De noch Restbestände lieferbar sind) ae - > = u = 86038: 02 E6 FF A5 FF C9 FA 90 und ist sowohl unter DOS 3.3 wie FAOA- BA 531 HEX Ba "DEY $6040: EA A5 FE C9 40 90 E4 AD auch unter dem neuen ProDOS lauf- FAOB: 08 532 HEX 08 :BCC ee zknnungn EM a r En no. ec $6050: 16 DD 3C F8 FO 04 CA 10 fähig. Der Maskengenerator setzt ei- $6058: F8 60 BD 53 F&8 AO 00 60 re En _ $6060: 12 14 1A 1C 32 34 3A 3C

nen Apple Il Plus mit Language Card FAOE: B4 535 HEX B4 ;TAY $6068: 52 5A 64 72 74 TA TC 89 oder einen Apple Ile voraus. Im 40 Z/ .. u > . - nz $6070: 92 9C 9E B2 D2 F2 FC 38 Z-Modus funktioniert er auf beiden FAlL: 74 538 HEX 74 :CPY $6078: 45 37 43 59 21 36 21 3A Gerätetypen, im 80 Z/Z-Modus dage- FAl2: F4 539 HEX F4 ;INY a = _ = . = = 2 z gen nur auf dem Apple Ile mit 80- —_... En en $6090: 2F A4 3B AA 10 01 88 65 Zeichen-Karte. (Die alte Videx-Karte FAlS: 72 542 HEX 72 "PX $6098: 5A 90 01 C8 60 90 04 AA 2 $60A0: 4A AA AA 29 OF 60 A6 3A für den Apple II wird nicht unter- FAl6: F2 545 HEX F2 ‚INX $60A8: AA 3B 20 96 FD 20 48 F9

m FAlT: A4 544 HEX A4 ;BEQ stützt!) Baia: u Bir u a Sun $60B0: Al 3A A8 AA 90 05 6A BO u 4 $60B8: 0C 29 87 4A AA BD 56 F9 „Input 2.0 liegt wahlweise in der FA19: 06 546 HEX 06 TSB $60C0: 20 79 F8 DO 04 AO FC A9 Bank 1 oder Bank 2 der Language —_. min m $60C8: 00 AA BD 9A FO 85 2E 29 Card und wird durch einen kurzen FAlC: A2 549 HEX A2 ;JMP nn z - n 2 = = = = Driver in den unteren 48K aufgerufen. PRIDE FR BRD un 00 Dr $60E0: FO OB 4A 90 08 AA 4A 09

ne , i FAlE: 74 55l HEX 74 :LDY $60E8: 20 88 DO FA C8 88

„Input 2.0” läßt sich problemlos in FAIR: 74 Ta - CPY 0 FA DO F2 u... Bun an $60FO: 60 FF FF FF 20 82 F8 48

nicht-compiliette und compilierte FA2O: 72 553 HEX 72 ;CPX on Ban, 25 ee . _ $60F8: Bl 3A 20 DA FD A2 01 20 Applesoft- sowie in Assemblerpro- $6100: 4A F9 CA 2F C8 90 Fl A2

= Fe FA22: 68 555 | HEX 68 ;TXS gramme einbinden. Die Übergabe der FA23: B2 556 HEX B2 :TAX en.

' E FA24: 32 557 HEX 32 ;TSX Feldinhalte an das Anwenderpro en =. ern sa = 02 AO 05 06 2D 26 gramm erfolgt durch ein einfaches A. BB; DO. BEE RR

FA26: 72 559 HEX 72 ; PHX Verfahren, das auch bei Compilern FA2T: 22 560 HEX 22 ;NOP ne EA iur i $6130: A4 2F A2 06 EO 03 FO IC funktioniert. PRMEO,. IE Be Bm Te de $6138: 06 2E 90 OE BD AD F9 20 u Re IA ur BR ER a $6140: ED FD BD A7 F9 FO 03 20 Für jedes Feld der Bildschirmmaske FAZA: 1A 563 HEX 1A ;ROL $6148: ED FD CA DO E7 60 88 30 lassen sich u. a. definieren: Feldlänge ee. . m "ok 6150: ET 20. DA FD A5 2E c9 EB _ E _ $6158: Bl 3A 90 F2 20 6D F8 AA (bis zu 255 Zeichen) Vtab Htab BB: 7E 586 Hz a :SrE Sn u DB A Datentyp (insgesamt 8 Typen) - $6168: 8A 4C DA FD A2 03 AY AO Scrollfl t der d isch ... u en m $6170: 20 ED FD CA DO FB 60 4C croltlag (starre oder dynamische FA2O: CR u Hu. UM IR $6178: 6A F8 OF 22 FF 33 CB 62 Maske) Ctriflag Füllflag Lösch- Su. = FOR: UM m $6180: FF 73 03 22 FF 33 CB 66 flag - Bildschirmflag (40- oder 80 Zei- .. E =. a $6188: FF 77 OF 20 FF 33 CB 60 chendarstellun | $6190: FF 70 OF 22 FF 39 CB 66

9). Innerhalb eines FA34: 48 573 HEX 48 ; ADC e : $6198: FF 7D OB 22 FF 33 CB A6 Eingabefeldes besteht jeder denkba- .. al =. $61A0: FF 73 11 22 FF 33 CB A6 re Redigierkomfort (Insert, Delete, FA37: A2 576 HEX A2 : CMP .._ _ 2 - - = = - = Rubout, Restore usw.). FAS8: CB a i HEX CS ‚SB $61B8: FF 70 24 31 65 78 00 21 Bei der neuen Version des Masken- i $61C0: 81 82 59 AD 91 92 86 4A i Pi W DEGANSUNG GET TENnLie $61C8: 85 9D 49 5A D9 00 DE A4 generators können jetzt auch Citrl- 580 * $61DO: AA 00 AC AO AC AS AB Ad

' ' ' FA39: 74 581 HEX 74 ;PHY Zeichen beim Datentyp String einge- $61D8: IC 8A IC 23 5D 8B 1B Al geben werden. Ferner sind das gilt ao = ns STE Be 9 Di RE RER . er ame A $61ES: IC 29 19 AE 69 AB 19 23 nur für Ile die Apfeltasten als = > =. nn $61FO: 24 53 1B 23 24 53 19 Al schnelle Cursortasten definiert. 586% = en = _ . = = z = = Schließlich wurden Features imple- ar * Füller bis $FA3F 66208: 15 90 6D SC A5 69 29 53 mentiert, die den Einsatz von „Input Des * $6210: 84 13 34 11 A5 69 23 AO 2.0“ als zeilenorientiertes Textverar- a En or ‚spp EP1B: BA BB.AS AO 00:09:62 DA 2 . Ran: 5% ENDE Nur :$FAS $6220: 48 26 62 94 88 54 44 (8 beitungsprogramm ermöglichen. Die $6228: 54 68 44 ES 94 C4 BA 08 „Input 2.0“-Diskette enthält zahlrei- $6250: 84 74 BA 28 6E 74 FA CC p RN BBPRRE $6238: 4A 72 F2 AM 8A 06 AA A2

che Demos zur Veranschaulichung $6240: A2 74 74 74 72 44 68 B2

der Anwendung. Bytes $6248: 32 B2 72 22 72 1A 1A 26

u 6250: 26 72 72 88 C8 C4 CA 26 Gerätevoraussetzung: Apple Ile oder Errors: 0

IIc; ferner Apple II+ im 40-Zeichen- $6260: C6 00 EA EA 00 00 00 00 modus

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

2 FEATURE er

Accelerator Ile

Die neue Superkarte

Die neue Accelerator Ile der Firma Titan (die früher als Saturn firmierte) kam etwa im April dieses Jahres auf den Markt. Ich wage zu behaupten: Wer diese Karte ein- mal in den Apple gesteckt hat, wird sie nicht mehr herausziehen wollen. In zwei- erlei Hinsicht ist sie wohl eine der besten Interface-Karten, die je für den Apple Ile bzw. Il Plus konzipiert wurde. Einerseits ist deren Benutzung für den reinen Apple- Anwender denkbar unkompliziert: Karte in irgendeinen Slot stecken, einschalten, fer- tig! Andererseits kann ein Programmierer weitergehende Features der Karte ausnut- zen, so daß sich vielfältige Anwendungs- möglichkeiten im Hinblick auf die Modifi- zierung des weiter unten geschilderten „Pseudo-ROMs“ bieten.

verschiedene Preboot-Konfigurationen (Phantom 0, Fast Applesoft, Standard und Disable), und der damaligen Anleitung war eine ellenlange Liste von (geschützten) Programmen beigefügt worden, aus der ersichtlich war, welches Programm welche Konfiguration erforderte. Auch diese Be- schränkung ist bei der neuen Accelerator Ile insoweit entfallen, als erstens eine Pre- boot-Diskette normalerweise überflüssig ist und zweitens grundsätzlich alle Pro- gramme lauffähig sind, auch die „ge- schützten“.

Die Karte verfügt über 8 Schalter und 7 Brücken. Die Schalter 1-7 sind den Slots 1-7 zugeordnet. Bei den Schaltern bedeu-

Accelerator Il

1. Hardware und Installation

Die Accelerator Ile, die ich für den stolzen Preis von $ 623.00 bzw. umgerechnet DM 1805,00 erwarb, dient zunächst nur einem einzigen Zweck, nämlich alle Programme bis zu ca. 3,5mal schneller zu machen. Die sorgfältig verarbeitete, sehr kompakte Kar- te ist u.a. mit einer 4 MHz NCR-65C02C- CPU (CMOS-Technologie) sowie mit 80K RAM (dynamisch, 150 ns) bestückt. Im Gegensatz zur alten Accelerator Il kann die neue Accelerator Ile in jeden beliebi- gen Slot gesteckt werden. (Beim Apple Il Plus wird jedoch wegen der Language Card Slot 0 empfohlen.) Die alte Accelera- tor II mußte sich links von einer ggf. vor- handenen Z80-Karte befinden. Diese Be- schränkung gilt für die Accelerator Ile nicht

tet ON = 4 MHz und OFF = 1 Mhz. Bei zeitkritischen Interface-Karten (Disk-Con- troller, Modem usw., nicht dagegen z.B. Druckerkarten usw.) muß der entspre- chende Slot-Schalter auf OFF (nach un- ten) gestellt werden. Dies gilt nicht für die 80-Zeichenkarte bzw. 64K-Karte des Ap- ple Ile. Mit dem Schalter Nr. 8 kann man die Accelerator Ile insgesamt permanent auf 1 MHz herunterschalten (Dies ent- spricht dem Softswitch C086:1).

Die Brücken kontrollieren ggf. vorhandene RAM-Karten. Wenn sich in irgendeinem Siot eine RAM-Karte (128K-RAM-Karte usw.) befinden sollte, muß die entspre- chende Slot-Brücke (ein kleiner Plastik- Aufsatz) abgezogen werden. Dies gilt wie- derum nicht für die Ile-64K-RAM-Karte in Slot 3.

Da die CMOS-Teile der Karte sehr emp- findlich gegen Elektrostatik sind, empfiehlt es sich, die Karte in eine Alu-Folie einzu- wickeln, falls sie versandt werden soll. Be- vor man die Karte anfaßt, z.B. wenn man sie in einen Slot steckt oder einen Schalter umlegt, sollte man die Hände an einem Metallstück „entladen“.

Die Accelerator Ile wird denkbar einfach aktiviert: Man braucht lediglich den Apple einzuschalten; das ist alles. In dem Mo- ment, da der Apple eingeschaltet wird, zieht die Karte quasi „alle Energie” an sich, d.h. der alte 6502 sowie die gesam- ten 64K RAM des Motherboards inklusive LC und das 12K-ROM ($DO000-$FFFF) werden desaktiviert. Wie bereits erwähnt, umfaßt die Accelerator Ile 80K RAM, das sich wie folgt aufteilt:

48K „Motherboard“ 16K „Language Card“ 16K „Pseudo-ROM“

Beim Einschalten des Apple wird der ech- te ROM $DO00-$FFFF in das Pseudo- ROM der Accelerator Ile kopiert, worauf softswitehmäßig „die Klappe herunter- fällt“, d.h. das Pseudo-ROM, das in Wirk- lichkeit RAM ist, wird gegen Überschrei- ben geschützt.

2. Geschwindigkeit

Der 4 MHz 65C02C läuft theoretisch auf 3,5 MHz heruntergetaktet, doch konnte durch detaillierte Testprogramme gezeigt werden, daß die Accelerator-CPU maximal 3,32mal schneller als die normale 6502- CPU ist. Lediglich wenn von den erweiter- ten 65C02-Befehlen Gebrauch gemacht wird, können Programme den Wert von 3,5 erreichen bzw. gar überschreiten. Im einzelnen wird die Accelerator Ile in fol- genden Fällen kurzfristig auf 1 MHz „her- untergetaktet“:

beim Zugriff auf Peripheriegeräte wie Disk-Controller usw., bei denen der ent- sprechenden Slot-Schalter von vornherein auf 1 MHz eingestellt wurde.

beim Zugriff auf RAM-Karten aller Art, insbesondere wenn diese virtuell in den Bereich $DO00-$FFFF „gemappt“ sind.

beim Zugriff auf Softswitches und ROM- Routinen im Bereich $C000-$CFFF. Das Demo-Programm „ACCEL.WAIT“ zeigt, daß das Ansprechen von INTCXROM- oder Softswitch-Adressen nur dann zur einer spürbaren Reduzierung der Ge- schwindigkeit führt, wenn dies mit einer nicht bis ins letzte Detail untersuchten ge- wissen Häufigkeit geschieht.

mehr. Ferner gab es bei der Accelerator || -

19

EEE EEE EEE EEE

Praktische Beispiele

a) Das an anderer Stelle in dieser Zeit- schrift gelistete Applesoft-Primzahlen- Programm ist mit der Accelerator-Karte 3,28mal schneller.

b) Die Bildschirm-Scroll-Geschwindigkeit ist speziell beim Apple Ile mit Accelerator dann kaum spürbar schneller, wenn man den Ile-Monitor benutzt, der bekanntlich permanent in den INTCXROM-Bereich $C100-$CFFF springt. Lädt man dagegen z.B. den Apple II Plus FPBASIC-File von der System Master Diskette in die Accele- rator Language Card, dann ist etwa die LIST-Geschwindigkeit bei Applesoftpro- grammen ca. 2,8mal schneller. Ähnliches gilt für die 80-Zeichen-Scroll-Geschwin- digkeit beim Applewriter Ile, da dieser die INTCXROM-Routinen nicht benutzt.

c) Der Zugriff auf die 64K-Karte des Apple Ile ist mit Accelerator ca. 2mal schneller. Die Datenübertragungsrate von der und auf die Karte beträgt maximal 80K/s. Dies entspricht der kaleidoskopartigen Darstel- lung von 10 Hires-Bildern pro Sekunde.

Apple-Motherboard

inaktiv

Speicherorganisation mit Accelerator Ile

ACCEL. LC. KOPIE kopiert (4) nach (3) ACCEL. ROM. KOPIE 1 kopiert (3) nach ACCEL. ROM. KOPIE 2 kopiert (1) nach

(Zu Testzwecken wurde das AUXMOVER- Programm von der MMU-Diskette benutzt, das mit der Accelerator Ile zu einer über- zeugenden „Bilderschau“ führt.)

In der Anleitung zur Accelerator Ile, die leider für Programmierer und Techniker etwas dürftig ist, sind nur 3 Softswitches genannt:

C086: 1 = POKE -16250, 1 = 1 MHz (Low Speed; für Spiele usw.)

20

C086: 5 = POKE -16250, 5 = 3,5 MHz (High Speed; Normalzustand)

(Zwischen dem langsamen und schnellen Modus kann man beliebig oft hin- und herschalten.)

C086: A = POKE -16250, 10 (Disable; Karte abstellen)

Das Abstellen der Karte bedeutet, daß nunmehr wieder das eigentliche RAM und ROM des Apple aktiv wird. Zum Abstellen der Karte verwende man entweder die mit- gelieferte Preboot-Diskette oder verfahre beim Apple Ile wie folgt:

CALL -151

C086:A

Ctrl-Geschlossener Apfel-Reset (Ctrl-Taste, schwarze Apfel-Taste und Re- set-Taste gleichzeitig drücken. Dieses Verfahren bewirkt, daß sich die Softswit- ches normalisieren.)

Ist die Karte erst einmal desaktiviert, be- steht meines Wissens keine Möglichkeit mehr, sie wieder zu reaktivieren, d.h. man ist gezwungen, den Apple erst aus- und dann wieder einzuschalten, wenn die Ac- celerator wieder aktiv werden soll.

Accelerator- Karte

®

3. Reset

Der Hardware-Reset durch Drücken der Otrl-Reset-Tasten bewirkt beim Apple Ile stets die Normalisierung der Softswitches in folgender Weise: Es werden die „unte- ren“ 48K des Motherboards lese- und schreibfähig gemacht, also eine vor Reset ggf. aktive 64K-Kartes desaktiviert. Ferner wird das ROM $DO000-$FFFF lesefähig und die Bank 2 der Language Card der unteren 64K schreibfähig gemacht. Schließlich

werden durch die Software-Reset-Routine ab $FA62 Grafik und 80-Zeichenkarte ab- gestellt.

Für die Accelerator Ile gilt demgegenüber, daß eine ggf. aktive (lese-schreib-fähig gemachte) Language Card durch Ctrl-Re- set nicht desaktiviert wird. Ferner „dreht“ die Accelerator Ile „durch“, wenn man Ctrl-Reset drückt, während sich die 64K- Karte in einem Read-Write-Enable-Zu- stand befindet. Obwohl dies nicht eindeu- tig bewiesen werden kann, dürfte in die- sem Fall kurzfristig das Motherboard-RAM und -ROM aktiviert werden. Da sich dort jedoch nur „Zufallswerte“ befinden, wird neu gebootet. Wenn man danach mit Ctrl- Schwarzer Apfel-Reset die Softswitches normalisiert, gerät die Accelerator Ile wie- der unter Kontrolle. Andernfalls kann man nur noch das Gerät ausschalten. Ein Bei- spiel: Der Applewriter Ile benutzt falls vorhanden die 64K-Karte als Textspei- cher und muß deshalb beim Scrollen usw. häufig auf die „oberen“ 64K springen. Drückt man dann in einem solchen Mo- ment Ctrl-Reset, wird neu gebootet.

4. Die Geheimnisse des „Pseudo- ROMs“

In der Betriebsanleitung der Firma Titan wird zwar beiläufig erwähnt, daß nach dem Einschalten des Apple das „richtige“ ROM in das „Pseudo-ROM“ der Accelerator- Karte kopiert wird, doch wie das geschieht und insbesondere, ob dieser Kopiervor- gang später, während der Apple noch ein- geschaltet ist, wiederholt werden kann, darüber hüllt sich Titan in Schweigen. Die Vorstellung, ggf. in dieses Pseudo-ROM einen anderen Inhalt hineinladen zu kön- nen, faszinierte mich, denn dann wäre man allen „F8-EPROM-Brennern“ mei- lenweit überlegen, könnte man doch je nach Anwendungszweck mal diesen und mal jenen Monitor oder mal dieses und mal jenes Applesoft oder Integer-Basic usw. in das Pseudo-ROM laden. Es hat mich dann zwei schlaflose Nächte geko- stet, bis ich herausfand, daß dies tatsäch- lich möglich ist. Insgesamt habe ich 256 verschiedene Softswitches ausprobieren müssen, wobei mir im übrigen „Kommis- sar Zufall“ zu Hilfe kam. Durch Untersu- chung der Speicherbereiche nach dem Einschalten des Apple stellte ich nämlich fest, daß ein echtes Zusatz-ROM der Ac- celerator-Karte ein kurzes Kopierpro- gramm in den Stack-Bereich $0100- $01FF verlegt. Obwohl sich dieses Pro- gramm nachher durch die übliche Verwen-

————— mm

® Wechselplatten-Subsysteme

® Bandstreamer für Backup ® NC-Net Lokales Netzwerk

in Vorbereitung:

D-5500 Trier

dung des Stacks von selbst überschreibt, konnte noch der wichtigste Teil rekonstru- iert werden. Dieser ist in dem Programm „ACCEL.BOOT“ gelistet. Weitere Unter- suchungen ergaben dann folgendes:

LDA #3

STA $C086

LDA $C081

LDA $C081

macht das Pseudo-ROM der Accelerator Ile schreibfähig (write-enable) und zu- gleich das echte ROM des Apple lesefähig (read-enable).

LDA #5

STA $C086

LDA $C081

LDA $C081

macht das Pseudo-ROM der Accelerator Ile (wieder) schreibunfähig (write-disable) und zugleich das echte ROM des Apple leseunfähig (read-disable).

Damit war es möglich, folgende Program- me zu schreiben:

ACCEL.LC.KOPIE kopiert den Inhalt der Accelerator Language Card Bank 2 in das Accelerator Pseudo-ROM. Zu diesem Zweck muß zuvor FPBASIC usw. in die Language Card geladen worden sein. Nach BRUN ACCEL.LC.KOPIE kann die Language Card dann anderweitig verwen- det werden. ACCEL.LC.KOPIE kopiert zu- nächst den LC-Inhalt $DO00-$FFFF nach $1000-$3FFF und dann wieder hinauf in das Pseudo-ROM. Anwendungszweck:

® kombinierte Fest-/wWechsel-Subsysterne

® NCW 2.0 Multibetriebssystem-Software e 8” Floppy mit SS/SD + DS/DD, IBM-komp.

® Fest-/wechselplatten für Macintosh und Apple Ile. APPLE-BUS Kompatibilität

® Schon für die Einzelplatz Fest/wechsel- platten gelten konkurrenzlose Leistungen ...

NOLOLOMP Datensysteme GmbH Walramsneustraße 7 + 9

(0651) 4 22 44 Tix. 472569

Die Massenspeicher-Profis für Apple Computer wir haben die derzeit leistungsstärksten Subsysteme I!

® Hard Disk /Festplatten-Subsysteme

und ...

US-Fachleute bewerten: "Die mit Abstand beste Losung am Markt!"

ACCEL.ROM.KOPIE1 kopiert zunächst den Inhalt des Pseudo-ROMs $DO00- $FFFF nach $1000-$3FFF. Nunmehr kann man den herunterkopierten Bereich be-

quem patchen. Im Anschluß daran wird dann der Bereich $1000-$3FFF wieder in das Pseudo-ROM zurückkopiert. Anwen- dungszweck: Verwendung eines partiell modifizierten Pseudo-ROM-Inhalts.

ACCEL.ROM.KOPIE2 kopiert auf dem Umweg über $1000-$3FFF den echten Apple-ROM-Inhalt (wieder) in das Pseu- do-ROM der Accelerator-Karte. Anwen- dungszweck: Wiederherstellung des Kalt- start-Zustandes.

Nach meinen Erfahrungen scheint es ge- boten zu sein, die Kopierroutinen auf dem Umweg über einen Bereich in den unteren 48K, z.B. $1000-$3FFF, vorzunehmen, da sich die Accelerator-Karte nach LDA #3 STA $C086 in einem partiellen Schwebe- zustand befindet, der durch permanente Softswitch-Aktivierung zu einem „Durch- drehen“ der Karte führen kann.

Ein praktisches Beispiel:

Nehmen wir an, wir wollten den 65C02- Disassembler (Dateiname „D65C02“) im Pseudo-ROM der Accelerator-Karte „ver- ewigen“, damit die Language Card für an- dere Zwecke wieder frei wird. Dies könn- ten wir mit folgenden Applesoft-Programm realisieren:

. bis zu 63 Keywords /Benutzer definier- und editierbar. Wahlfrei unter DOS 3.3 (inkl. Va- rianten), ProDOS , UCSD-Pascal 1.1 u. 1.2, CP/M sowie NCNDOS (Multiuser-DOS) ein- setzbar. Betriebsystem-Wechsel per Befehl in Sekunden. Für jedes Keyword komplette Konfigurations-Umgebung in allen Betrieb- systernen definierbar. Schreib /Leseschutz f. alle Keywords u. "logische Unit-Bezeich- nungen” definierbar. Änderung der Platten- aufteilung ohne (!) Datenverlust in allen Be- triebsystemen. Turnkey-Lösungen ..

e FEATURE a

en. Poee ern

Ka a LE

und ..

10 PRINT CHR$ (4) ROM. KOPIE?"

20 PRINT CHR$ (4) „BRUN D65C02"“

30 PRINT CHR$ (4) „BRUN ACCEL. LC.KOPIE“

„BRUN ACCEL.

Zeile 10 stellt zunächst sicherheitshalber eine „saubere“ Pseudo-ROM-Kopie des Original-Apple-ROMs her. Zeile 20 kopiert dann das Pseudo-ROM einschließlich des neuen 65C02-Disassemblers in die Language Card. Und Zeile 30 kopiert dann die Language Card in das Pseudo-ROM. Diese Prozedur ließe sich natürlich da- durch vereinfachen, daß man das Move- Programm des Disassemblers dergestalt umschreibt, daß man den neuen Dis- assembler direkt in das Pseudo-ROM ko- piert.

Es sei abschließend darauf hingewiesen, daß die Accelerator Ile mit diesem Beitrag noch lange nicht endgültig erforscht ist. Beispielsweise besteht u.U. die Möglich- keit, auch die Language Card des Apple- Motherboards (neben der LC der Accele- rator-Karte) zur Datenspeicherung zu ver- wenden. Ob man allerdings auch die restli- chen 48K des Motherboards als Daten- speicher benutzen kann, scheint zweifel- haft, wenngleich nicht unmöglich.

us

21

oo oıV Du Auı Dr

oo o_ıo9 ou Pu DH

* * *

* ADR1 EQU ADR2 EQU

KEERKKEKKKKKTKTFK TFKI TFA TFA TFA I I A a 8

WAITI

KEERKKKKKTKTKTK TI THAI KIA DK A A IK KH KR 8

*

ORG

ACCEL.WAIT

$cooo $FFFF

Wenn ADR1l im Bereich $C000-$CFFF liegt, dann

beträgt die Warteschleife

ca. 30 s statt ca. 20 s

bei einer beliebigen anderen ADRl. Wenn zusätzlich ADR2

im Bereich $C000-$CFFF liegt, beträgt Warteschleife ebenfalls ca. 30 s. Wenn aber nur ADR2 allein im Bereich $C000-$CFFF liegt, beträgt die Warteschleife wieder ca. 20 s. Fazit:

Ein spürbare Zeitverzögerung ist nur dann gegeben, wenn

eine Adresse im Bereich $C000-$CFFF quasi permanent angesprochen wird.

LDX #111 JSR WAIT2 DEX BNE WAITI RTS STX XSAVE LDX #0 LDY #0 LDA ADRI DEX BNE WAIT3 LDA ADR2 DEY BNE WAIT3 LDX XSAVE RTS

00

01AO: A9 05

0lA2: 8D 86 CO 01A5: AC 62 FA

ORG $0180

ACCEL.BOOT

Diese Routine wird von einem nicht näher bekannten RON- Bauelement der Accelerator- Karte nach dem Einschalten

des Apple in den Stack

kopiert durch eine nachfolgend nicht aufgeführte Routine,

die ihrerseits im Stack

ab $0100 liegt.

Danach erfolgt ein Sprung

nach $0180 zu der eigentlichen hier disassemblierten Routine, die das echte ROM $D000-$FFFF in das Schein-ROM der Accelerator- karte movt.

INDL EQU $04

INDH ACCEL EQU WRROMBK1 EQU WRROMBK2 EQU RESET EQU ROM EQU

EQU $05

$C086 $CO8A $C082 $FA62 $D000

LDA #$03 STA $C086 ist ein

in der Anleitung von Titan nicht dokumentierter Softswitch, um ein WRITE-ENABLE der ROM-16K der Karte zu ermöglichen.

vo oıovoun uam

“KK TFT TAI TFA FA IF IK IK KR a

*

INDADR1 INDADR2 EQU INDADR3 EQU IND1 EQU $FC IND2 EQU

LDA #$03 STA ACCEL

LDA #>ROM STA INDH

LDY #<ROM STY INDL

LDA (INDL),Y STA (INDL),Y LDX WRROMBK1 STA (INDL),Y LDX WRROMBK2 DEY

BNE KOPIE INC INDH

BNE KOPIE

LDA #$05 STA $C086 ist der dokumentierte Softswitch, der auf 3,5 Megahertz "Full Speed" umschaltet.

LDA #$01 STA $C086 schaltet

demgegenüber auf 1 Megahertz herunter. Das RAM der Karte

ist danach jedoch weiterhin

aktiv.

LDA #$0A STA $C086 schaltet zusätzlich das RAM der Karte

ab, so daß nunmehr das normale RAM des Apple aktiv ist. Da sich hier jedoch nur Zufallswerte befinden, muß man nach diesem Softswitch mit Reset neu booten. Danach besteht offenbar keine Möglichkeit mehr, die Karte zu reaktivierten, d.h. man muß

den Apple zunächst wieder ausschalten, wenn man die

Karte wieder aktivieren will.

* * * * * * * * * * * * * * * * * * * * * %* * * * * *

LDA #$05 STA ACCEL JMP RESET

ORG $300

ACCEL.LC.KOPIE

Diese Routine kopiert zunächst den Accelerator-LC-Inhalt Bank2 $D000-$FFFF nach $1000-$3FFF und kopiert dann $1000-$3FFF

in das Accelerator-"ROM".

Warnung: Vorher muß FPBASIC oder INTBASIC usw. in die LC Bank2 geladen worden sein!

Applesoft-Beispiel:

10 X = PEEK (49281): X = PEEK (49281)

20 PRINT CHR$ (4) "BLOAD FPBASIC, A$DOO0" 30 PRINT CHR$ (4) "BRUN ACCEL.LC.KOPIE" EQU $DO00 $1000 $4000

‚Anfang ;Ende+tl ;-$FD $FE ;-$FF EQU $C086

10 20 30 40 50

X

* Pointer initialisieren

* LDA STA LDA STA

LDA STA LDA STA

*x* * *

LDA STA LDA LDA

$D000-$FFFF

LDY LDA STA INY BNE INC INC LDA BNE

LDA LDA

Accelerator- fähig machen.

#<INDADRl1 ;$D000 INDl

#>INDADR1

INDI+1

#<INDADR2 IND2 #>INDADR2 IND2+1

LC Bank 2 lese-

#5 ;‚ACCEL:5 ACCEL

$C083 ‚RDBK2 $C083 ;WRBK2

nach $1000-$3FFF kopieren

#0 (IND1),Y (IND2);,Y

LOOP1 IND1+1 IND2+1 IND1+1 LOOP1

$co8l ;RDROMBK2 $cosl ;: WRRAMBK2

Pointer initialisieren

LDA STA LDA STA

LDA STA LDA STA

#<INDADR2 ;$1000 IND1

#>INDADR2+1 IND1+1

#<INDADRl ;$DO00 IND2

#>INDADR1+1 IND2+1

* "ROM" der Accelerator-Karte schreibfähig machen!

* LDA STA LDA LDA

$1000-$3FFF d.h. in das kopieren!

*kKk x x*

LDY LOOP2 LDA STA INY BNE INC INC LDA CMP BNE *

+3 ACCEL

$cosl ;RDROMBK2 $cosl ;WRRAMBK2

nach $DO00-$FFFF, Accelerator-"ROM"

#0 (IND1),Y (IND2),Y

LOOP2 IND1+1 IND2+1 IND1+1 #>INDADR3 LOOP2

* "ROM" der Accelerator wie quasi * echtes ROM schreibunfähig machen

* LDA STA LDA LDA

RTS

#5 ;‚ACCEL:5 ACCEL

$cosl ;RDROMBK2 $cosl ; WRRAMBK2

PRINT CHR$ (4)'"BLOAD ACCEL.LC.KOPIE"

= PEEK (49281):X =

INPUT "LC-FILE: ";X$ PRINT CHR$ (4) "BLOAD";X$;",A$DOO0"

CALL 768

PEEK (49281)

der Profis EummmmmmmmEEEEEEEE

(Deutsch)Stunde schlägt: dachte der Computer und lernte eilends um.

IWT Logo ...

®@ die leicht zu erlernende Computer-Sprache für jede Altersstufe

® die Computer-Sprache mit modernen Strukturen, Prozeduren, lokalen Variablen, Listen usw.

® die Computer-Sprache mit der »Igel-Grafik«, die von Anfang an zu sichtbaren Erfolgen führt

@ die Computer-Sprache, die sofort auf den Kern der Sache das Programmieren und Erproben von Programmen - führt

... natürlich in deutsch (Befehle, Fehler- und Systemmeldungen in deutscher Sprache)

IWT Logo - für Apple ][ //e, 2c

Best.-Nr. 400 01 101 DM 395,—* deutsche Erweiterung

zum C64 Logo, Version C64 105

Best.-Nr. 400 22 101 DM 98,-*

“incl. MwSt./unverbindl. Preisempfehlung

BC NE

rn eco Fee.

IWT Software Service -fürInformation, Wissenschaft, Technologie Technologie-Zentrum: Höhestraße 66, Postfach 1325, 5093 Burscheid ], IWT Tel. (02174) 62815, Tx 5213989 iwt - Vertrieb/Beratung: Dahlienstr. 4,

Postfach 100243, 8011 Baldham, Tel. (08106) 31017, Tx 5213989 iwt

23

24

03500: 0302: 0304: 0306:

0308: O30A: 030C: O30E:

0310: 0312: 0315: 0318:

O31B: 031D: O3I1F: 0321: 0322: 0324: 0326: 0328: O32A:

0326; O32F:

0332:

05335: 0337: 0339: 033B:

033D: 033F: 0341: 0343:

0345: 0347: O34AA: O34D:

A9 8D AD AD

AO

91 c8

E6 E6 AS DO

AD AD

20

05

86 CO 81 CO 81 CO

00 FC FE

F9 FD FF FD Fl

81 CO 8l CO

6F 03

03

86 CO 8l CO 8l CO

ovoısıV uud

ORG

KR KKKKKTK KK NR]

* INDADRl EQU INDADR2 EQU INDADR3 EQU

INDl EQU IND2 EQU ACCEL EQU

* * *

$300

ACCEL.ROM.KOPIEl (Pseudo-ROM)

Diese Routine kopiert zunächst den Accelerator-"ROM"-Inhalt $D000-$FFFF nach $1000-$3FFF und kopiert dann $1000-$3FFF erneut in das Accelerator-"ROM", nachdem man (bei Bedarf) das spätere "ROM" entsprechend gepatcht hat.

$D000 $1000 $4000 $FC ;-$FD $FE ;-$FF $C086

Kopie nach unten—

* Pointer initialisieren

* LDA STA LDA STA

LDA STA LDA STA

machen.

“*x*K* x

LDA STA LDA LDA

*

LDY LOOP1 LDA STA INY BNE INC INC LDA BNE

LDA LDA

“*rKkKKr

JSR

“*KKr KH

LDA STA LDA STA

LDA STA LDA STA

“** %* %*

LDA STA LDX LDX

#<INDADRl ;$D000 INDl

#>INDADR1

IND1+1

#<INDADR2 ;$1000 IND2

#>INDADR2

IND2+1

Accelerator-"ROM" lesefähig

+5 ‚ACCEL:5 ACCEL

$cosl ;RDROMBK2 $cosl ;WRRAMBK2

$D000-$FFFF nach $1000-$3FFF kopieren

+0 (IND1l),Y (IND2),Y

LOOP1 IND1+1 IND2+1 IND1+1 LOOP1

$c08l ; RDROMBK2 $c0o8l ; WRRAMBK2

Hier ggf. RTS, falls späteres "ROM" manuell vom Monitor aus gepatcht werden soll.

PATCH

_—— Kopie nach oben————

Pointer initialisieren

#<INDADR2 ;$1000 IND1

#>INDADR2+1 IND1+1

#<INDADRl ;$D000 IND2

#>INDADRI+1 IND2+1

"ROM" der Accelerator-Karte schreibfähig machen!

#3 ;ACCEL:3 ACCEL

$cosl ;RDROMBK2 $cosl :WRRAMBK2

87 * $1000-$3FFF nach $DO000-$FFFF, 88 * d.h. in das Accelerator-"ROM" 89 %* kopieren 90 * 0350: AO 00 91 LDY #0 0352: Bl FC 92 LOOP2 LDA (IND1),Y 0354: 91 FE 93 STA (IND2),Y 0356: C8 94 INY 0357: DO F9 95 BNE LOOP2 0359: E6 FD 96 INC IND1l+1 035B: E6 FF 97 INC IND2+1 035D: A5 FD 98 LDA INDIl+l1 035F: C9 40 99 CMP #>INDADR3 0361: DO EF 100 BNE LOOP2 101 x 102 x "ROM" der Accelerator wie quasi 103 x%* echtes ROM schreibunfähig machen 104 x 0363: A9 05 105 LDA #5 0365: 8D 86 CO 106 STA ACCEL 0368: AD 81 CO 107 LDA $c081 ; RDROMBK2 036B: AD 81 CO 108 LDA $c081 ; WRRAMBK2 109 x O36E: 60 110 RTS 111 x 112 % Gewünschte Patches hier ein- 113 x fügen. Es gilt: 114 x* $1000-$3FFF = $D000-$FFFF 115 x 036F: EA 116 PATCH NOP 117 x 118 % Beispiel für einen möglichen 119 & Patch von XAM: Bewirkt 120 x nach z.B. 1000.3FFF einen 121 % Hexdump mit 16 statt sonst 122 x 8 Bytes pro Zeile. 123 x 0370: A9 OF 124 LDA #15 ‚sonst 7 0372: 8D A6 3D 125 STA $3DA6 ;$FDA6 0375: 8D BO 3D 126 STA $3DBO ;$FDBO 127 x* 128 x Beispiel für einen weiteren 129 x% Patch: Piepston-Änderung. 130 x* 0378: A9 20 131 LDA #$20 ‚sonst $0C 037A: 8D ES 3B 132 STA $3BE5 ;$FBE5 037D: 60 133 RTS l ORG $300 2 - 3 * ACCEL.ROM.KOPIE2 (Echtes ROM) 4 u 5 . 6 * Diese Routine kopiert zunächst 7 * den echten Apple-ROM-Inhalt 8 * $D000-$FFFF nach $1000-$3FFF 9 * und kopiert dann $1000-$3FFF 10 * in das Accelerator-"ROM", ll x nachdem man (bei Bedarf) das I * spätere "ROM" entsprechend 13 * gepatcht hat. 14 . 15 INDADR1 EQU $DO000 16 INDADR2 EQU $1000 17 INDADR3Z EQU $4000 18 IND1 EQU $FC ;-$FD 19 IND2 EQU $FE ;-$FF 20 ACCEL EQU $C086 <1 * 22 *— Kopie nach unten— 23 * 24 * Pointer initialisieren 25 0300: A9 00 26 LDA #<INDADRl1 ;$D000 0302: 85 FC 27 STA INDl 0304: A9 DO 28 LDA #>INDADR1 0306: 85 FD 29 STA INDI+1 30 * 0308: A9 00 31 LDA #<INDADR2 ;$1000 030A: 85 FE 32 STA IND2 030C: A9 10 33 LDA #>INDADR2 030E: 85 FF 34 STA IND2+l 35

0310: 0312: 0315: 0318:

O31B: 031D;: O31F: 0821: 0322: 0324: 0326: 0328: O32A:

O32C: O32RF:

0332:

0335: 0337: 0339: 033B:

033D: 033F: 0341: 0343:

0345: 0347: OSAA: 034D:

0350: 0352: 0354: 0356: 0357: 0359: 035B: 035D: O35F: 0361:

0363: 0365: 0368: 036B:

O36E:

O36F:

0370:

A9 8D AD AD

AO Bl 9 08 DO E6 E6 A5 DO

AD AD

20

A9

A9 85

A9

A9 85

A9 8D AE AE

A9 8D AD AD

60

EA

60

05

86 CO 81 CO 81 CO

00 FC FE

F9 FD FF FD Fl

8l CO 81 CO

6F 03

00 FC 10 FD

00 FE DO FF

03

86 CO 81 CO 8l CO

00 FC FE

F9 FD FF FD 40 EF

05

86 CO 81 CO 81 CO

36 37 38 39 40

42

104 105 106 107 108 109 110 4111 112 113 114 115 116 117 118 119 120

* Echtes Apple-ROM lesefähig

* machen. * LDA #3 :ACCEL: 3 STA ACCEL LDA $Cc081 ‚RDROMBK2 LDA $c081 ;WRRAMBK2 %*

* $D0O00-$FFFF nach $1000-$3FFF kopieren %*

LDY #0

LDA (INDl), STA (IND2), INY BNE INC INC LDA BNE

LOOP1 T Y LOOP1 IND1+1 IND2+1

IND1+1 LOOP1

LDA LDA

$co81l $co8l

; RDROMBK2

; WRRAMBK2

*

* Hier ggf. RTS, falls späteres

* "ROM" manuell vom Monitor aus

* gepatcht werden soll.

* JSR PATCH

*

*-———— Kopie nach oben-———

*

* Pointer initialisieren

* LDA STA LDA STA

#<INDADR2 INDl #>INDADR2+1 IND1+1

;$1000

LDA STA LDA STA

#<INDADR1 IND2 #>INDADRI1+1 IND2+1

;$D000

"ROM" der Accelerator-Karte schreibfähig machen!

*%* * x*

LDA #3

STA ACCEL LDX $C081 LDX $C081l

;ACCEL: 3

; RDROMBK2 ; WRRAMBK2

$1000-$3FFF nach $DO00-$FFFF, d.h. in das Accelerator-"ROM" kopieren

“*kKkKr x

LDY #0

LDA (IND1),Y STA (IND2),Y INY BNE INC INC LDA CMP BNE

[* oO oO "u uw

LOOP2 IND1+1 IND2+1 IND1+1 #>INDADR3 LOOP2

"ROM" der Accelerator wie quasi echtes ROM schreibunfähig machen

“x xr* +

LDA #5

STA ACCEL LDA $c081 LDA $co81l

; RDROMBK2 ; WRRAMBK2

*

RTS

Gewünschte Patches hier ein- fügen. Es gilt: $1000-$3FFF = $D000-$FFFF

“= KK

PATCH *

* Patch-Routine nicht aktiv x

NOP

RTS

PFORTH+ SYSTEME

FORTH Encyclopedia

System Guide to FIG FORTH

Floating Point Listing in FORTH Expertensystem in FÜRTH?? Dokumentation derFORTH Konferenzen 17808, 248 Seiten, 19782, 388 Seiten, Je 1981, 688 Seiten (Z Bände)

Rochester FORTH Proceedings

1781, 1982, 1983

288 FORTH von LMI auf APPLE-Disk APPLE 3D-GraFORTH

APPLE II Master FORTH mit Editor, Assembler, Debugger, 258 S. Handbuch

MasterFORTH + Hires + Floatingop. DM

Expertensystem auf Diskette DM fysFORTH mit Einführungskurs DM Professional Applikation Development

System mit Metacompiler, FPA DM Cross Compiler für LMI Systeme DM

Wir unterstützen natürlich auch andere Rechner, fordern Sie doch einfach unseren kostenlosen Katalog anı

FORTH-SYSTEME Angelika Flesch, Schützenstr. 3, 7828 Titisee-Neustadt, Tel.: 97851/1465

gu, N

»>

v

Ein Textsystem wie im Film mit: AP 17256K RAM als

Pseudodisk Basic, Pascal, CP/’M DM 16%,—

\ Alle Trümpfe aus einer Hand

y

Die besten Karten für Ihren Appie® 2"

«>.

Bestechende Leistung!

AP 20: 6800 CPU mit 128K RAM DM 1459,—

AP 20 mit Assembler und Pseudodisk DM155— | ü AP 20 mit CP/M 68K DM 2268.—

V AP 26-A-256K RAM für AP 20 DM 1695.— V V AP 26-B-] Megabyte für AP 20 DM 450— \ AP 20 + AP 26 + CP/M 68K DM 36422—

Diese Kombination bestimmt Ihre Computerzukunft: 16K RAM Karte

CP/M 68K mit C-Compiler Fortran, Pascal, Basic u.a.

DM 1356,— auf Anfrage DM 165,—

Disketten mit 80Z Karte mit Softswitch DM 295,—

AP 22 Z80B CPU 6 MHz Innenlochverstärkung ss, sd ER EADR EUR HERR: mit64k RAM DM 895,— zusammen nur DM 595,—

Das Textprogramm 10er Pack DM 55,— alle Preise incl. MWSt.

Wordstar DM 1310,— 100er Pack DM 500,—

ı33 COMPUTERTECHNiS Olper Str. 10

1011 Rose Marie Lane 16 4800 Bielefeld 14 _ Stockton. CA 95207 Tel. 0521/444032 Tel. (209) 473-7473 West-Germany USA

25

® hr n .. x 7 NN

„I

5 Bi

Turtle Graphic ist ein in viele Hoch- sprachen, wie zum Beispiel in UCSD- Pascal oder im Apple Graforth ][, inte- griertes Graphic-System. Es eignet sich besonders für den unbedarften Anwender, der damit ohne mathemati- schen Ballast an den Computer heran- geführt wird. Eine der bekanntesten Anwendungen dürfte wohl die Pro- grammiersprache Logo sein, die sich vor allem für Kinder eignet.

Harald Grumser

26

VEN! N TAI 7 LE UM

ee.

Te a a u

A|

ee 7 7071

ver w% Tr De

% ; ns

7 77% 2 rn R Pr Pr

/ /

7

. . . e 4 . r

>>

Das hier vorgestellte Programm stellt die wichtigsten Befehle der Turtle (Schildkrö- te) bereit. Nach dem Programmstart er- scheint in der Mitte der HGR1 eine Turtle in Form eines Quadrates, die ihren Schwanz, der mit einem Schreibstift ver- sehen ist, zum Boden gesenkt hat und in Richtung Bildschirmoberkante schaut. Im unteren Teil des Bildschirmes erscheint der Doppelpunkt als Promptzeichen; die Turtle erwartet einen Befehl.

Gibt man nun zum Beispiel „50 MOVE“ ein, so bewegt sich die Turtle um 50 Bild- punkte nach oben. „90 TURN 50 MOVE“ dreht die Turtle um 90 Grad nach rechts und bewegt sie wieder um 50 Bildpunkte.

Applesoft simuliert Turtle Graphic

Un

Be NT I 2 >> o

fi AN DZ

|

Wiederholt man dies noch zweimal, so hat sie ein Quadrat gezeichnet.

Die Befehle, die die Turtle ausführen kann, lauten wie folgt:

MOVE bewegt die Turtle um die angege- bene Anzahl von Punkten in die Richtung, in der sie gerade steht.

TURN dreht die Turtle um die angegebene Gradzahl, wobei positive Zahlen nach rechts drehen und negative nach links. MOVETO bewegt die Turtle zu den ange- gebenen Koordinaten, wie sie bei HPLOT benutzt werden (279 - 159 Punkte). TURNTO dreht die Turtle in die angegebe- ne Richtung, („-90 TURNTO“ dreht die Turtle in Richtung des linken Bildschirm- randes.)

TURTLE löscht den Bildschirm und posi- tioniert die Turtle wie beim Programmstart. PENUP hebt den Schreibstift, so daß bei der nächsten Bewegung kein Strich gezo- gen wird.

PENDOWN senkt den Schreibstift wieder.

Der Leser wird sich vielleicht fragen, war- um die Parameter vor dem Befehl stehen. Tippt man eine Zahl ein, so wird diese auf dem sogenannten Stack (Stapel) abgelegt. Braucht die Turtle einen Parameter, so holt sie sich diesen vom Stack. Ein Quadrat läßt sich also auch durch Eingabe von „50 90 50 90 50 90 50 MOVE TURN MOVE TURN MOVE TURN MOVE“ zeichnen. Das gleiche gilt auch für die Arithmetik; die Turtle kennt die vier Grundrechenarten. Zuerst werden die Operanden auf dem Stack abgelegt und dann der Operator dar- auf angewandt. So ergibt „20 30 + MOVE“ eine Bewegung um 50 Schritte. Dieses Verfahren nennt sich Reverse Po- lish Notation (Umgekehrte polnische Nota- tion) oder auch Postfix-Notation. Um dies noch einmal an einem Beispiel zu erläu- tern, sei der Ausdruck (1+2) * (3+4) zu berechnen: Das Ergebnis würde lauten „12+34+ x *. Die Turtle stellt nun einige Befehle zur Verfügung, um den Stack zu manipulieren:

+ * / holen zwei Zahlen vom Stack, verknüpfen sie mit dem jeweiligen Opera- tor und legen das Ergebnis wieder auf dem Stack ab.

PULL holt eine Zahl vom Stack, ohne sie zu benutzen.

DUP dupliziert die oberste Zahl auf dem Stack. „DUP x“ wäre somit die Operation zum Potenzieren.

SWAP vertauscht die oberen beiden Zah- len auf dem Stack. „3 10 SWAP -“ ergibt also 7, während „3 10 -“ -7 ergibt.

PICK holt sich einen Index vom Stack und kopiert dann die von oben indizierte Zahl .auf den Stack. Ein Beispiel macht dies wohl deutlicher: „10 20 30 2 Pick“ ergibt auf dem Stack „10 20 30 20“, „1 PICK“ enspricht also dem DUP-Befenhl.

Bei dem Quadrat oben würde es sich als praktisch erweisen, wenn mehrmals zu wiederholende Befehle als Schleife (Loop) eingegeben werden könnten. Selbstver- ständlich ist die Turtle auch dazu in der Lage. Die zu wiederholenden Befehle werden zwischen „DO“ und „LOOP“ ein- geschlossen. Als Schleifenzähler holt sich „DO“ eine Zahl vom Stack. „4 DO 50 MOVE 90 TURN LOOP“ würde also unser Quadrat zeichnen.

Unsere Turtle kann jedoch noch mehr, nämlich neue Befehle lernen. Eine zu ler- nende Befehlsfolge wird durch „LEARN>" und „<” eingeschlossen, wobei nach „LEARN>" der Name des neuen Befehls folgt. Nach der Eingabe von „LEARN> QUADRAT 4 DO 50 MOVE 90 TURN LOOP <“ zeichnet die Turtle jedesmal ein Quadrat, wenn der Befehl „QUADRAT“ eingegeben wird. Der linke Stern in der Grafik 1 wird somit gezeichnet durch die Befehle „20 DO QUADRAT 18 TURN LOOP“

Es sei nicht verschwiegen, wie der Fünf- zack in der abgebildeten Grafik erzeugt wird. „LEARN> FUENFZACK 216 TURN- TO PENUP DUP 2 / MOVE PENDOWN 18 TURNTO 5 DO DUP MOVE 144 TURN LOOP <“ zeichnet einen Fünfzack um die Stelle, an der sich die Turtle gerade befin- det, in der angegebenen Größe.

Dem Leser sei es überlassen auszutüfteln, wie die Figur in der Bildmitte entsteht. Ein Tip: Es handelt sich um eine Menge ver- drehter Siebenecke.

Abschließend sollen noch einige Befehle erläutert werden, die das Arbeiten mit der Turtle erleichtern:

TEXT schaltet auf nur Text um, so daß der ganze Bildschirm zur Eingabe von Befeh- len zur Verfügung steht.

GRAPH schaltet zurück auf HGR1, ohne den Bildschirm zu löschen.

Grafik 4

LIST listet alle Befehlswörter samt der neu erlernten. Nach 22 Wörtern geht es erst nach Tastendruck weiter.

FORGET vergißt alle Befehle ab dem spe- zifizierten. Da neue Befehle bereits neu erlernte beinhalten können, geht die Turtle davon aus, daß nach Löschen des Befehls „QUADRAT“ auch der Befehl „FUENF- ZACK“ nicht mehr ausgeführt werden Kann.

STACK |istet den gesamten Stack, wobei auch hier nach 22 Zahlen auf einen Ta- stendruck gewartet wird. Der Stack kann insgesamt 101 Zahlen beinhalten.

BYE verabschiedet sich und springt zu- rück in den Applesoft-Direktmodus.

Zur Eingabe sei folgendes bemerkt: In einer Eingabezeile können bis zu 50 Be- fehle stehen, die von mindestens einem Blank (Leerzeichen) voneinander getrennt sein müssen. Außer den Namen nach „LEARN>" und „FORGET“ können sie aber auch einzeln eingegeben werden. Tritt während des Lernens ein Fehler auf, so wird alles ignoriert. Dasselbe gilt, wenn mehr „DO“ als „LOOP“ Befehle oder um- gekehrt im Lernmodus auftauchen. Schlei- fen werden dadurch realisiert, daß deren Inhalt vorübergehend gelernt wird. Daher gilt für sie dasselbe wie oben. Während des Lernens führt die Turtle die Befehle nicht aus. Sollte sie also einmal wider Er- warten nicht reagieren, so kann das daran liegen, daß ein „<“ oder „LOOP“ fehlt. „<” schließt im Direktmodus alle Schlei- fen, ohne sie auszuführen, meldet sich aber mit „MISSING DO“. Die Standardbe- fehle können nicht mit „FORGET“ ge- löscht werden, und ein bereits erlernter Befehl kann nicht nochmals gelernt werden.

Die Fehlermeldungen sind im großen und ganzen selbsterklärend. „OUT OF MEMO- RY“ tritt auf, wenn die Anzahl der erlernten Befehle plus der der aktiven Schleifen 21 überschreitet.

Während die Turtle ein Programm abarbei- te, kann sie durch Ctrl-S gestoppt werden.

Die Turtle kann sich nicht über den Bild- schirmrand hinaus bewegen, sondern schneidet die Koordinaten ab, was bei grö- Beren Figuren zu Verzerrungen führt.

Das Programm selbst ist nicht im Hinblick auf maximale Geschwindigkeit, sondern auf Lesbarkeit hin geschrieben worden.

Der einzige Beitrag zur Erhöhung der Ge- schwindigkeit ist die Verlegung der Initiali-

sierungsroutine an den Schluß (Zeile 9000-9995) und die Nennung der Varia- blen in der Reihenfolge ihrer Häufigkeit.

In Zeile 20-60 wird auf die Eingabezeile gewartet und daraus in der Routine 8000- 8999 ein einzelner Befehl abgespalten und dessen Index (Variable K) gesucht. Danach wird in der Routine 70-99 in das entsprechende Unterprogramm verzweigt. Hier wird auch das Learnflag gesetzt und mit Hilfe von Epsilon die Schleifentiefe gezählt. Ist der Befehl selbst eine Zahl, so wird K um OFFSET erhöht, somit enthält K die Information über die Zahl.

Die Routinen in 100-999 sind die ver- schiedenen Unterprogramme für die Tur- tie, die in 1000-1999 die für den Stack. Bevor auf die LOOP- und LEARN>-teile eingegangen wird, ist es sinnvoll, die Ab- speicherung der neuen Befehle zu erläu- tern. Für die neu zu lernenden Befehle gibt es eine Matrix L, die aus 21 Zeilen zu je 50 Spalten besteht. Ein Befehl besetzt nun eine Zeile derart, daß dessen Indizes in

&

MESON Il, 48 K

MESON Il, 64 K (16 K + Z 80-Card)

beide Rechner mit 10er-Block, 1 Jahr Garantie

Z 80-Card

16 K-Card Floppy-Disk 5/4” Controller-Card PAL-Card + Modulator MESON Il, Leerplatine

Tastaturen und Gehäuse auf Anfrage

g

28

dieser Zeile nacheinander abgelegt wer- den, gefolgt von einer Null.

Wird nun einer dieser Befehle aufgerufen, so verzweigt das Programm nach 7000, wo diese einzelnen K-Werte ausgelesen und dem Verteiler ab Zeile 70 zugeführt werden. Da es möglich ist, in einem neuen Befehl einen ebenfalls neuen Befehl auf- zurufen, kann dieses Unterprogramm sich selbst neu aufrufen. Damit bei dieser Re- kursion keine Zeiger verlorengehen, müs- sen diese in Form von Vektoren L1,L2 und deren Pointer NLP aufbewahrt werden. Dasselbe gilt für die Routine in 2500-2999, die dieselbe Rekursion für geschachtelte Schleifen darstellt, wobei diese über einen anderen Pointer LLP verwaltet werden. Bleibt noch der Schleifenstart in 2000- 2499, der einsichtig ist, und die Lernrouti- ne in 3000-3999: Dort wird der Name ab- gefragt, abgespeichert und die Pointer zur Abspeicherung in der L-Matrix gesetzt, beziehungsweise eine Null ans Ende der Zeile geschrieben und die Anzahl der Be- fehle IT um eins erhöht.

In der Fehlerbehandlungsroutine in 6000-

T&MBSTONE-MICRO

Th. Tank & G. Körber 1100,- DM

1250,- DM

125,- DM 125,- DM 480,- DM 150,- DM 170,- DM

85,- DM

Gardeschützenweg 72, 1000 Berlin 45 © 030/833 1303 (SHOP), Q 7465728 (BURO)

6999 ist Zeile 6510 zu erläutern. Diese Interpreter-Routine initialisiert den Return- stack. Dies ist erforderlich, da sonst nach einem Programmabsturz der Returnstack noch belastet wäre und die für die Rekur- sionen benötigte Schachtelungstiefe nicht mehr erreicht würde. (Der Returnstack kann nur 25 Returnadressen aufnehmen). Es ist in diesem Zusammenhang auch da- von abzuraten, die Variable NL zu vergrö- Bern, da in nicht mehr wie 25 Unterpro- grammebenen gesprungen werden kann.

Zuletzt noch ein paar Tips für diejenigen, die das Programm durch eigene Befehle erweitern wollen. Zuerst schreibe man sei- ne Erweiterung in einen freien Bereich. Danach gebe man dieser einen Namen. und füge diesen in Zeile 9220 an. Sodann erhöhe man IS in Zeile 9110 um eins und erweitere die Zeilenliste in Zeile 90 um seine neue Routine.

Es ist davon abzuraten, seinen neuen Be- fehl in der Mitte der vorhandenen Befehle anzuordnen, da dann die Abfragen in Zeile 70-99 nicht mehr stimmen.

&

40,- DM

Joyport, zum Anschluß von zwei ATARI-Joysticks

ADD2B, (VIA 6522) mit RAM + Backup

ADD2L, Leerplatine

ADD4 BB, (PIA 6821) mit RAM + Backup

ADDA4L, Leerplatine PIA-Card mit’Wrap-Feld ausgerüstet

170,- DM 99, DM

150,- DM 45,- DM

Entwicklungen auf Anfrage

82

84 86 88 90

92

100 110 120 130

140 :

150 160 170 180 190

REM ea REM TURTLE GRAPHIK REM aka REM

LOMEM: 4 * 16 1 3

REM Hinter HGR

GOSUB 9000

GOSUB 100

REM Hole Eingabezeile und arbeite sie ab PRIGHT = O0

INPUT ":";LINE$

GOSUB 8000

IF K= 0 THEN 25

IF K= IT + 2 THEN ERFLG = 1: GOTO 6000 GOSUB 70

GOTO 35

REM Verteiler

IF PEEK (KBD) = CS THEN 6000

IF K = 22 THEN LRNFLG = LRNFLG - EPS: REM IN$ = "LOOP" IF LRNFLG = 0 OR K = 24 THEN 88: REM Direkt Modus oder IN$ = cc"

IF LRNFLG < O0 THEN ERFLG = 5: GOTO 6000

IF K = 21 THEN LRNFLG = LRNFLG + EPS: REM IN$="DO" L{LLP,L2{LLP)) = K:L2{LLP) = L2(LLP) + 1: IF L2(LLP) < INS THEN 86 ERFLG = 8: GOTO 6000

RETURN

IF K> IS + NL + 2 THEN 1100

ON K GOTO 100,200,300,400,500,600,650,700,750,800,900,1200,1300, 1400, 1500,1600,1600,1600,1600,1900,2000,2500,3000,3500, 9996

GOTO 7000: REM gelernten Befehls

K > IS + 1 -> Ausfuehren eines

REM TURTLE

HOME : HGR : VTAB 21

DIR = 0:PX = MX / 2:PY=MY /2 HC = 1: HCOLOR= 3

REM DRAW TURTLE XDRAW 1 AT PX,PY

IF NOT HC THEN 190 HPLOT PX,PY

RETURN

199 :

200 205 210 215 220 225 250 235 240 245 250 255

REM MOVE

GOSUB 1000

GOSUB 150 PX = PX + SIN (DIR / 180 « PI) & ST PY = PY- CoS (DIR / 180 « PI) « ST IF PX > MX THEN PX = MX

IF PX < O0 THEN PX = 0

IF PY > MY THEN PY = MY

IF PY< 0 THEN PY=0

IF NOT HC THEN 255

HPLOT TO PX,PY

GOTO 150

2393 :

300 310 320 350 340 399 400 410 420 450 440

450 460 499 500 510 520 550 599 600 610 620 649 650 660

REM TURN GOSUB 1000

DIR = DIR + ST

DIR = 360 * (DIR / 360 - INT (DIR / 360)) RETURN

REM MOVETO

GOSUB 1000

A=ST

GOSUB 1000

GOSUB 150: REM Kein XDRAW der Turtle vor Pruefung des Stacks

PY = A:PX =ST

GOTO 225

REM TURNTO GOSUB 1000 DIR = ST GOTO 330

REM PENUP HC = 0 RETURN

REM PENDOWN HC = 1

670

grafik 4.4

RETURN

699 :

700 710 720 730 740

REM TEXT TEXT : HOME : INVERSE PRINT SPC( 13);"TURTLE GRAPHIK"; SPC( 13)

749 :

750 760

770 780 190

NORMAL : POKE 34,1: REM Textfenster: WINDOWTOP = 1 RETURN REM GRAPH

POKE - 16304,0: REM HGR Schalter; andere Schalter durch TURTLE gesetzt

HOME

VTAB 21

RETURN

199 :

800 810 820 850 840 850 860

REM LIST

FOR I = 0 TO IT

PRINT "- ";1$(I)

IF (I+1) /22< > INT ((I+ 1) / 22) THEN 850 GET A$: IF ASC (A$) = CS - 128 THEN I = IT

NEXT

RETURN

899 :

900 910 920 930 940 950 960 970 999 1000 1010 1030 1040 1050

REM FORGET

IF LRNFLG < > O0 THEN 940

GOSUB 8000

IFK> IS+ 1ANDK< = IT + 1 THEN 950 ERFLG = 9: GOTO 6000

IT=K-2 LLP=IT-IS-]l

RETURN

REM Hole vom Stack IF SP < O0 THEN ERFLG = 2: GOTO 6000

ST = ST(SP) SP=SP-1 RETURN

1099 :

1100 1230 1120 1130 1140

REM Schiebe auf den Stack

IF SP = 100 THEN ERFLG = 3: GOTO 6000 SP=SP+l1 ST(SP) = K - OFFSET

RETURN

1199 ;

1200 1210 1220 1230 1299 1300 1310 1320 13530 1599 1400 1410 1420 1430 1440 1499 1500 1510 1520 1530 1540 1550 1560 1570 1580 1599 1600 1610 1620 1630 1640 1650 1660 1670 1699 1900 1905 1910 1920 1930 1940 1950 1960

REM PULL holt ein "Dummy" SP=SP-]1l

IFSP< -1 THENSP= -]1 RETURN

REM DUPliziere

IF SP < 0 THEN 1010 K = ST(SP) + OFFSET GOTO 1110

REM SWAP vertauscht die oberen beiden Stackelemente A = ST(SP) ST(SP) = ST(SP - ])

ST(SP-1)=A

RETURN

REM PICK holt das von oben indizierte Stackelement GOSUB 1000

I=SP-ST+]1l

IF SP < 0 THEN 1010

IF I > SP THEN 1580

IF I<0O THENI=O0

SP=SP+1 ST(SP) = ST(I)

RETURN

REM STACK + * /

GOSUB 1000

ON K - 15 GOTO 1630,1640,1650, 1660 ST(SP) = ST(SP) + ST: RETURN ST(SP) ST(SP) ST: RETURN ST(SP) ST(SP) ST: RETURN

IF ST= 0 THEN ERFLG = 4: GOTO 6000 ST(SP) ST(SP) / ST: RETURN

REM STACK

I= -]1

I=1+ 1: IF I > SP THEN 1960

PRINT CHR$ (91);" ";ST(I);" "; CHR$ (93)

IF (I+1) /22< > INT ((I +1) / 22) THEN 1950 GET A$: IF ASC (A$) = CS - 128 THEN I = SP

GOTO 1910

RETURN

1999 :

29

Ten aE—L—————nn——————————————————————————LLLeeeeeeeeeeeeeeLu—————————————————— ——

30

2000 2010 2020 2030 2040 2050 2499 2500 2510 2520 2530 2540 2550 2560 2570

2989 :

3000 3010 5020 35030 3040 3050 3060 3070 3080 3090 3499 3500 3510 3520 3530 3540 3550 3560 3570

REM DO-Schleifenstart

LRNFLG = LRNFLG + EPS

LLP =LLP +1

IF LLP > NL THEN ERFLG = 7: GOTO 6000 L2(LLP) = 0

RETURN

REM Schleifenende (LOOP) LILLP,LZ{LLP)) = 0

GOSUB 1000:COUNT(LLP) = ST

IF COUNT(LLP) < = 0 THEN 2560 K= IS + LLP + 2: GOSUB 7000 COUNT(LLP) = COUNT(LLP) - 1: GOTO 2530 LLP=LLP-1

RETURN

REM LEARN

IF LRNFLG < > O0 THEN 3040

GOSUB 8000

IF K= IT + 2 THEN 3050 ERFLG = 1: GOTO 6000 LRNFLG = 1

IF IT - IS > NL THEN ERFLG = 7: GOTO 6000 I$(IT + 1) = IN$ ELLP = LLP + 1:L2(LLP) = 0

RETURN

REM "<! Ende des Lernmodus

IF LRNFLG = 0 THEN 6200 LRNFLG = LRNFLG - 1

IF LRNFLG < O0 THEN ERFLG = 5: GOTO 6000

IF LRNFLG > O0 THEN ERFLG = 6: GOTO 6000 ir= IT +1 L(LLP,L2(LLP)) = 0

RETURN

3999 :

6000 6010 6020 6030 6040

6050 6060 6070 6080 6090 6100 6110 6120 6130 6140 6200 6500 6510 6520 6550 6999 7000 7010 7020 7030 7040 7050 7060 7070 17999 8000 8010 8020

8030 8040 8050

8060 8070 8080 8100 8110 8120 8130 8140 8150 8999 9000

REM Fehlerbehandlungsroutine

POKE 49168,0

REM Tastaturruecksetzimpuls

PRINT G$;

ON ERFLG GOTO 6060,6070,6080,6090,6100,6110,6120,6130,6140 GOTO 6200

PRINT "SYNTAX ERROR": GOTO 6200

PRINT "STACK EMPTY": GOTO 6200

PRINT "STACK FULL": GOTO 6200

PRINT "DIVISION BY ZERO": GOTO 6200 PRINT "MISSING DO": GOTO 6200

PRINT "MISSING LOOP": GOTO 6200

PRINT "OUT OF MEMORY": GOTO 6200 PRINT "TO MANY INSTRUCTIONS'": GOTO 6200 PRINT "CAN'T FORGET" ERFLG = O:LRNFLG = 0 NIP= - 1:LLP=IT- IS -Ll

CALL - 10621

REM lInitialisiere Basic-Return-Stack GOTO 25

REM Fuehre einen gelernten Befehl aus NIP = NIP +1 IF K> IS + NL + 2 THENK = K - OFFSET L1(NIP) = K - 2 - IS:L2(NIP) = 0 K = L(L1(NIP),L2(NIP)):L2(NIP) = L2(NIP) +1 IF K= 0 THEN NIP = NIP - 1: GOTO 7070 GOSUB 70: GOTO 7040 RETURN

REM Naechster Instruktions-Index LINE$ = LINE$ + '" " PRIGHT = PRIGHT + 1: IF PRIGHT > LEN (LINE$) THEN K = 0: RETURN IF MID$ (LINE$,PRIGHT,1l) = " " THEN 8020 PLEFT = PRIGHT PRIGHT = PRIGHT + 1: IF MID$ (LINE$,PRIGHT,l) < > "" THEN 8050 IN$ = MID$ (LINE$,PLEFT,PRIGHT - PLEFT) IF VAL (IN$) = O0 AND IN$ < > "0" THEN 8100 K = OFFSET + VAL (IN$): RETURN K=-IT+] FOR I = 0 TO IT IF I$(I) < > IN$ THEN 8140 K = I:I= IT NEXT :K=K+]1| RETURN

REM lInitialisierung

FOR I = 768 TO 768 + 9

9020 READ A: POKE I,A: NEXT

9030 DATA 1,0,4,0,40,54,63,36,4,0

9040 POKE 232,0: POKE 233,3

9050 ROT= 0: SCALE= 1

9060 REM Formtabelle fuer die Turtle

9070 DIM ST(100): REM 101 Stackelemente

9080 SP= - 1:ST = 0: REM Stapelzeiger (Stackpointer) und angefordertes Stackelement

9090 NL = 20: REM Anzahl der zu lernenden Befehle

9100 INS = 50: REM Anzahl der Instruktiuonen pro Befehl

9110 IS = 24: REM Anzahl der Standartbefehle

9120 IT = IS: REM Anzahl der Befehle insgesamt

9130 DIM I$(IS + NL + 1): REM Feld mit den Befehlsnamen

9140 FOR I =0 TO IS

9150 READ I$(I): NEXT

9160 DATA TURTLE,MOVE, TURN, MOVETO

9170 DATA TURNTO, PENUP, PENDOWN

9180 DATA TEXT,GRAPH,LIST, FORGET

9190 DATA PULL,DUP,SWAP,PICK

9200 DATA +,-,*,/,STACK

9210 DATA DO,LOOP,LEARN>,<

9220 DATA BYE

9230 DIM L(NL,INS): REM Matrix mit NL Befehlen zu je INS

Instruktionen

9240 DIM LI(NL),L2(NL): REM Zeilen- und Spaltenindex der "L"-Matrix

9250 DIM COUNT(NL): REM Zaehler fuer geschachtelte Schleifen

9260 K = O0: REM Instruktionsindex

9270 KBD = 49152: REM PEEK zur Tastaturabfrage

9280 CS = 147: REM CS = ASC (CTRL-S)

9290 OFFSET = 2 1 15: REM K wird um OFFSET erhoeht um Zahlen als Instruktionen abzuspeichern

9300 LLP = - 1: REM Zaehler fuer LEARN> und aktive Schleifen

9310 NIP = LLP: REM Zaehler fuer geschachtelte Befehle

9320 LRNFLG = 0: REM Wird waehrend des Lernmodus auf 1 gesetzt

9330 ERRFLG = 0: REM Fehlercode fuer Fehlerbehandlung

9340 EPS = 1 / 64: REM LRNFLG wird bei jedem DO um EPS erhoeht und bei jedem LOOP erniedrigt

9350 PI = ATN (1) = 4

9360 PX = 0:PY = 0: REM Plot-Koordinaten

9370 HC = 0: REM Logische Variable fuer PENUP/PENDOWN

9380 DIR = O0: REM Richtung der Turtle in Grad

9390 MX = 279:MY = 159: REM HGR Fenster

9400 PLEFT = 0: REM Linker Zeiger der Eingabezeile

9410 PRIGHT = O0: REM Rechter Zeiger der Eingabezeile

9420 A = 0:I = 0: REM Allgemeine Variablen

9430 G$ = CHR$ (135): REM Bell

9440 REM LINE$,IN$ sind die Eingabezeile und die daraus

abgespaltenen Befehle

RETURN

REM Ende des Programms 9997 TEXT : HOME

9998 PRINT "END OF TURTLE GRAPHIC"" END

REM HINWEIS:

10002 REM Wer dieses Programm mit allen REM's abtippt

10003 REM und es dann ausfuehrt wird sich wundern.

10004 REM Programme, die mehr als 25 Diskettensektoren lang sind

10005 REM und die HGR aufrufen, loeschen sich zum Teil

selbst.

Peeker-Sammeldiskette

Die abgedruckten größeren Programme sind auch als Sammeldisketten erhältlich, die etwa jeden zweiten Monat erscheinen und die Listings der vorangehenden zwei Hefte zusammenfassen.

EEE EEE nee N S%

tm 4045

APPLE

MASCHINEN SPRACHE

Der Einstieg über BASIC!

Die Idee: Maschinenbefehle des Mikroprozessors 6502 über die BASIC-Befehle POKE, CALL, PEEK im Apple abspeichern, ablaufen lassen und Ergebnisse in das BASIC-Programm zurücklesen. Grundkenntnisse in Basic sind erforderlich. Anschauliche Darstellung der 6502-Funktionen, der Speicher im Apple und der Wirkungen von Maschinenbefehlen verbunden mit Experimentierprogrammen zur Grafik, Akustik, Arith- metik, Textdarstellung, Verbindung von Bild und Ion sowie zum Aufruf der zahlreichen, bereits vorhandenen Maschinenprogramme im Apple.

Der Höhepunkt: Eine schrittweise Einführung in die professionelle Entwicklung von Maschinenprogram- men mit APPLE SYSTEM-MONITOR und APPLE MINI ASSEMBLER.

Von D. Inman/K. Inman, 224 Seiten, Softcover,

DM 49,-

te-wi Verlag GmbH

ER Theo-Prosel-Weg | gen 8000 München 40

Weiterführende Literatur...

APPLE II

RN

I APPLE II - = Anwenderhandbuch

(L. Poole)

Erst mit Hilfe dieses Leitfadens werden Sie

1 Ihren Apple Il erfolgreich einsetzen, denn we lext und Bildmaterial gehen weit über das

hinaus, was herstellerseitig an Literatur angeboten wird.

416 Seiten, Softcover, DM 56,-

APPLE IIPASCAL - Eine praktische Anleitung (A. Luehrmann, H. Peckham)

= Unentbehrlich für alle, die die Programmier- eu sprache PASCAL lernen wollen und “ea /ugang zu einem Apple-Computer haben.

544 Seiten, Softcover, DM 59,-

6502 -

Programmieren in Assembler

(L. Leventhal)

Dieser Titel aus einer ganzen Reihe von Büchern über die Assemblersprachen- Programmierung befaßt sich ausführlich mit dem weitverbreiteten Mikroprozessor 6502.

704 Seiten, Softcover, DM 59,-

LOGO -

Jeder kann programmieren

(Daniel Watt)

Buch des Jahres in den USA. Für die Computer C64, ATARI, APPLE II, IBM-PC und TI-99.

Hochwertiges Textbuch für Logo-Kurse für zu Hause und im Lehrbereich.

A4, DM 59,- (4. Quartal 84)

APPLE II - Bewegte 3D-Graphik

(Phil Cohen)

Selbstentworfene Graphiken und Dia- gramme animiert oder als Standbilder eben oder räumlich: alle erforderlichen BASIC-Programme mit Erklärung finden Sie in diesem Buch.

ca. 190 Seiten, Softcover, DM 49,—

Macintosh Programmier-Handbuch (David Lien)

Macintosh Pionier des graphischen Computerdialogs benutzt MICROSOFT BASIC. D. Lien’s Buch ist eine souveräne, zuverlässige Einführung und Referenz zu Macintosh’s Basic.

450 Seiten, DM 59,- (4. Quartal 84)

DAVID LIEN

Noch im Programm: VisiCalc, 50 Programme auf Diskette, DM 79,- 677 BASIC-Programme, A4, DM 39,- © CP/M und Wordstar, DM 29,80.

Teil 1: Double Lores

Die erweiterte 80-Zeichenkarte des Apple le = 64K-Karte läßt sich auf vielfältige Weise einsetzen, z.B. als

80-Zeichen-Bildschirm-Teilspeicher

RAM-Diskspeicher

Teilspeicher für doppelte hochauflösen- de Grafik (Double Hires: 560 mal 192 statt 280 mal 192 Bildpunkte)

Teilspeicher für doppelte niedrigauflö- sende Grafik (Double Lores: 80 mal 48 statt 40 mal 48 Kästen).

Zur Double Hires werden von Apple in den technischen Unterlagen nur vage Anga- ben gemacht, und die Möglichkeit von Double Lores wird überhaupt nicht ange- deutet. Im ersten Teil dieser Folge wird auf die Double Lores eingegangen, während sich der zweite Teil mit der Double Hires befaßt.

Die Double Lores wird meines Wissens hier erstmals geschildert. Mangels techni- scher Informationen war es nicht einfach herauszufinden, ob sie überhaupt und, wenn ja, wie möglich ist, doch zeigte sich im nachhinein, daß Double Lores nicht nur verblüffend einfach ist, sondern auch in einem reinen Applesoft-Programm be- nutzt werden kann, da hier keine Ge- schwindigkeitsprobleme auftreten. (Um- gekehrt muß die Double Hires in Assem- bler geschrieben werden, da sonst die HPLOT-Funktion viel zu langsam ist.)

Ulrich Stiehl

32

Wie man die Grafik verdoppelt

oflinns one ‚je

BRSUER DBHEFRH uU n.0"

gs? spe 1% ee. _ K

oe 2: £ u 3 EL I >: 2 n. r =

: » . Ai er rt

1. Normale Lores-Grafik

Bevor wir auf die Double Lores eingehen, seien die normalen Lores-Grafik-Befehle kurz wiederholt. Der Lores-Grafikbild- schirm ist speichermäßig mit dem 40-Zei- chen-Textbildschirm identisch. Während der 40-Zeichen-Textbildschirm jedoch 24 Zeilen zu je 40 Zeichen umfaßt, kann bei dem Lores-Grafikbildschirm genau die doppelte Menge an Grafik-Kästchen ge- plottet werden. Dies rührt daher, daß in jeder Bildschirmspeicherstelle anstelle ei/- nes Buchstabens je zwei Kästchen unter- gebracht werden. Der Bildschirm nimmt den Speicherbereich $0400-$07FF ein ($0400 = dezimal 1024). Jedes Bytes die- ses Bereichs mit Ausnahme sog. ver- steckter Bildschirmspeicherstellen kann mithin zwei Kästchen aufnehmen. Es gilt ‚also:

Textbildschirm: 24 Zeilen zu je 40 Zeichen Loresbildschirm: 48 Zeilen zu je 40 Käst- chen

Geteilter Loresbildschirm: 40 Zeilen zu je 40 Kästchen plus 4 Textzeilen am unteren Bildschirmrand.

Experiment 1

Zu Testzwecken schalten wir mit dem Be- fehl

GR

auf Lores-Grafik um und gehen dann mit CALL -151

in den Monitor. Nunmehr geben wir 400:0F

ein und sehen, daß ganz links oben (= Zeile 0, Spalte 0) ein Kästchen geplottet wurde. Geben wir jetzt

400:F0

ein, wird ein Kästchen in derselben Spalte, aber statt in der ersten in der zweiten Zeile geplottet (= Zeile 1, Spalte 0). Geben wir abschließend

400: FF

ein, dann wird sowohl das obere wie das untere Kästchen sichtbar. $FF ist 1 Byte und besteht aus 2 Halbbytes $F und $F. Da jedes Halbbyte einen Wert von $0-$F oder dezimal O bis 15 einnehmen kann, gibt es theoretisch 16 Farben von O (= schwarz) bis 15 (= weiß), die allerdings auf einem grünen Monitor nur als unter- schiedliche Weiß-Grün-Abstufungen sicht- bar werden. Wer über einen Farbmonitor verfügt, kann mit dem Befehl

COLOR =F

wobei F als Variablenwert im Bereich 0-15 liegt, die gewünschte Farbe definieren, die dann für alle nachfolgend geplotteten Kästchen gilt.

Lores-Befehle

Soviel zur Theorie des Lores-Bildschirm- speichers. Um die Plot-Befehle zu verste- hen, arbeite man am besten mit einem Koordinatensystem in der Art des abgebil- deten Diagramms 1. In Abweichung vom „normalen“ Koordinatensystem ist der Origo = Ursprung links oben statt links unten. Die X-Achse oder Abszisse kann Werte im Bereich 0-39 und die Y-Achse oder Ordinate Werte im Bereich 0-39 (bei geteiltem Bildschirm) oder 0-47 (bei vol- lem Bildschirm) einnehmen. Eine waag- rechte Linie von X1 bis X2 heißt Zeile, und eine senkrechte Linie von Y1 bis Y2 heißt Spalte.

* .

„.....

. * . .. * * . * . * * * “. & . . * . * * . . .

„m... ..........",.:"0"8%

x X; X2 x

Diagramm 1

GR

schaltet auf Lores-Grafik mit geteiltem Bildschirm und Farbe = 0 = schwarz um. Deshalb muß man danach mit

COLOR = FF, z.B. COLOR = 15 die gewünschte Farbe festlegen.

POKE -16302, 0

schaltet vom geteilten zum vollen Bild- schirm um. Danach kann man bei Bedarf mit

CALL -1998

die unteren Zeilen des Lores-Bildschirms löschen ($F832 = -1998 = CLRSCHR).

TEXT hebt den Grafik-Modus wieder auf.

PLOT X, Y, z.B. PLOT 39, 39

plottet ein Kästchen im Schnittpunkt von horizontaler X- und senkrechter Y-Achse.

rr electronic

Elektronik » Fachliteratur - Personal-Computer

Qualitäts- Disketten 1.Wahl

BASF-Disketten softsektoriert in Pappkarton 3,25" -Disketten alle ohne Aufpreis mit Verstärkungsring.

Type Beschreibung 105tk 100 Stk IXV ..... 48 TPI, I-seitig, einfache Dichte ...... 47,90 469,00 IDV ...... 48 TPI, I-seitig, doppelte Dichte ...... 49,50 484,50 1/96V.. 96 TPI, I-seitig, doppelte Dichte ...... 68,50 667,00 2/96V.. 96 TPI, 2-seitig, doppelte Dichte ...... 82,50 799,50 Aufpreis für IOer-Pack in Hart-PVC-Klappbox .......... je 5,00

3M/Scotch Sicherheits-Disketten 3,25"-Disketten mit Verstärkungsring; softsektoriert. 744-0 .. 48 TPI, I-seitig, doppelte Dichte ...... 59,00 579,00 745-0 .. 48 TPI, 2-seitig, doppelte Dichte ..... 92,50 887,00 746-0 .. 96 TPI, 1-seitig, doppelte Dichte ...... 82,50 775,00 747-0 .. 96 TPI, 2-seitig, doppelte Dichte ..... 98,00 922,00 Wichtig für die sichere Funktion Ihrer Disketten-Laufwerke 7440 .... Kopf-Reinigungsset für 5,25°-Laufwerke ...... 49,50

Lg) 3,5" - Micro-Disketten || für LISA und MACINTOSH NEU

3,5"-Disketten I-seitig, doppelte Dichte im Ser-Pack 74,50

Plastikbox für 5,25” - Disketten

Formschöne Klappbox aus Hart-PVC für ca. 10 Disketten in den Farben grün, orange, schwarz, hellgrau, elfenbein oder anthrazit. Bitte die gewünschte Farbe angeben. Mischbar. SUR. 6.95 10 Stk ..... 39.50 100 Stk ..... 499.50

0,29 -Diskettenbox Sehr preiswert! Repräsentative Disketten-Box aus deutscher Fertigung in den Abmessungen (T x Bx H) 306x 174x144 mm ohne Schloß mit topas farbenem Deckel für ca. 80 Disketten und 4 beschrift- baren Stützplatten. I Stk ... 27.50 ab 10 Stk ... 24.75

ABA - Diskettentröge

Kompakter Trog mit rauchfarbenem Deckel und Schloß. Das Unterteil ist platzsparend im Deckel abstellbar. Je nach Größe incl. 4 bzw. 9 beschriftbaren Stützplatten.

2.25"-Mini-Disketten Abm: (TxBxH) 1 Stk ab10Stk M3S ... Abm.: 210x100x 175mm für 40 Disk. .... 47,50 43,90 M85 ... Abm.: 310x100x 175mm für 90 Disk. .... 69,50 65,40 8 -Standard-Disketten 1 5tkab10Stk

F40 ... Abm.: 210x180x 175mm für 40 Disk. .... 69,50 65,40 F90 ... Abm.: 350x 180x 175mm für 90 Disk. .... 89,50 85,90

| Hd | Datenkassetten

[X J) Universal = 1.Wahl Geeignet für alle gängigen Home - Computer Bandmaterial: Eisenoxid Bandmaterial: Chromdioxid Best.-Nr 10 St. 50 St. 100 St. Best.-Nr 10 St. 50 St. 100 St. CIO-FE .15,95 74,80 142,50 CI0-CR.17,95 85,00 162,50 C20-FE .16,95 79,50 152,50 C20-CR .19,50 92,00 175,50 C30-FE .18,65 87,50 167,50 C30-CR .22,25 105,00 199,50 Hochwertiges Band aus deutscher Fertigung. Jede CC in einer aufklappbaren Schutzbox mit je 2 Blanco-Aufkleber je Box.

Apple - Zubehör HE Er TE) | 80 Zeichen/64kB-RAM

u

nn | für APPLE /se 290, - Z80B/64kB-Karte (CP/M3.0,CBASIC,6SX80).. 1195,00 Original ALS incl. sämtlicher Software. CP/M-PLUS-Manuals (CP/M3.0).................... 75,00 Kompletter Satz bestehend aus: User's Guide, SID, System Guide, Programmer's Utilities- und Programmer’s Guide. ITOH/EPSON-Vollgrafikinterface m.Kabe! ...... 230,00 Serielles Interface für APPLE Imagewriter 235,00 RS-232C - Karte (Serielle Schnittstelle) ............. 175,00 Z-80 Karte (ohne Software) Importkarte ............... 149,00

Z-80 Karte (ohne Software) deutsche Herstellung 230,00 Disk-Controller (ohne Software) 4 Betriebsarten 195,00

ı DISTAR-Laufwerk " voll APPLE kompatibel nalbspurfähig, O-Erkennung, 40 Sourefi, 143 kB. Einzeln getestet für DOS, ProD0S, CP/M und PASCAL.

Original APPLE PASCAL-ManualS ................. 75,00 (Satz=Language- und Operating System Reference Manual)

are Hirn SOFTWARE/HARDWARE - Gelegenheiten AIM/KIM/SYM/SUPERBOARD/NASCOM/SORCERER/ APPLE u.a. Aktuelle Preisliste gegen Freiumschlag anfordern. sofort ab Lager lieferbar: Macintosh, Apple Ile /llIc Unverbindliche Vorführung und Beratung.

6900 Heidelberg I Breslauerstr.29 Tel.06221/781500 Geschäftszeiten: Mo. - Fr. 9-13 +14 - 18 53.9 -13 Uhr Versandanschrift: 6900 Heidelberg I Dammweg ?

33

HLIN X1,X2 AT Y, z.B. HLIN 0, 39 AT 10

plottet einen Balken (= Kästchen-Zeile) vom linken X1-Wert bis zum rechten X2- Wert in der Zeile Y.

VLIN Y1, Y2 AT X, z.B. VLIN 0, 47 AT 20

plottet einen Balken (= Kästchen-Spalte) vom oberen Y1-Wert bis zum unteren Y2- Wert in der Spalte X.

F=SCRN (X, Y), z.B. F = SCRN (10, 20)

ermittelt die Farbe oder Farbnummer (O- 15) im Schnittpunkt von X und Y.

2. 80-Zeichen-Textbildschirm

Wie ist nunmehr doppelte Lores-Grafik möglich? Wir erinnern uns, daß der Lores- Grafikbildschirm speichermäßig mit dem 40-Zeichen-Textbildschirm identisch ist. Schaltet man den Apple Ile mit

PR#3

auf 80-Zeichendarstellung, dann umfaßt der 80-Zeichen-Textbildschirm 24 Zeilen zu je 80 Zeichen. Der Bildschirmspeicher selbst ist dann in 2 Hälften unterteilt, nam- lich in

a) den unteren Bereich $0400-$07FF auf dem 64K-Motherboard, und

b) den oberen Bereich $0400-$07FF auf der 64K-Karte

Die 80 Spalten oder Stellen einer 80 Zei- chen umfassenden Zeile werden von 0-79 numeriert, wobei zwischen den ungeraden und geraden Spalten unterschieden wird:

1,3, 5, ... 77, 79 ungerade = oben 0, 2, 4, ... 76, 78 gerade = unten

Damit gibt es „oben“ 40 ungerade und „unten“ 40 gerade Spalten. Die 80-Zei- chen-Bildschirmroutinen funktionieren im Prinzip wie die entsprechenden 40-Zei- chen-Routinen:

a) Zunächst wird ermittelt, ob die Spalten- zahl im Bereich 0-79 eine gerade oder eine ungerade Zahl ist.

b) Dann wird durch einen Softswitch ent- weder die „obere“ Hälfte für die ungerade oder die „untere“ Hälfte des Bildschirm- speichers für die gerade Spalte aktiviert. c) Nunmehr wird die Spaltenzahl durch 2 geteilt und dann die der 40-Zeichen-Bild- schirmroutine entsprechende Funktion aufgerufen.

34

Um dies besser zu verstehen, beschrän- ken wir uns auf einen Abschnitt der ersten Zeile des 80-Zeichen-Textbildschirms (Diagramm 2). HTAB-Befehle arbeiten applesoftmäßig mit Spaltenzahlen im Be- reich 1-80 und monitormäßig mit Spalten- zahlen im Bereich 0-79. Die eigentliche Bildschirm-Poke-Routine arbeitet hinge- gen mit Spaltenzahlen im Bereich 0-39, die jedoch zweimal vorkommen, je nach- dem ob der Softswitch $C055 (= Page 2) für die obere oder der Softswitch $C0054 (= Page 1) für die untere Hälfte aktiviert wurde.

64K „unten’’ Motherboard

Experiment 2

Zu Testzwecken schalten wir mit

PR#3

die 80-Zeichenkarte ein und gehen dann mit

CALL -151

in den Monitor. Wenn wir nun

C055:0 N 400:C1

eingeben, erscheint ein „A“ (= Hex-Code $C1) in VTAB 1, HTAB 1. Dieses „A“ ist intern in der Spalte O der oberen Bild- schirmhälfte abgelegt. Gibt man nun C054:0 N 400:C2

ein, dann erscheint rechts neben dem „A“ ein „B“ (= Hex-Code $C2), das somit die Position VTAB 1, HTAB 2 einnimmt und in der Spalte O der unteren Bildschirmhälfte liegt.

3. Doppelte Lores-Grafik

Mit dem Wissen über die einfache Lores- Grafik sowie der groben Kenntnis der Speicherorganisation der 80-Zeichenkarte

können wir nunmehr die doppelte Lores- Grafik in den Griff bekommen.

Experiment 3

Zu Testzwecken schalten wir mit

PR#3

die 80-Zeichenkarte ein und dann mit

GR

auf Lores-Modus um. Nun gehen wir er- neut mit

CALL -151

in den Monitor und geben

CO5E:0

Diagramm 2

a „oben’’, $C055 3 „unten’’ , $C054

ein. Dieser Softswitch, der eigentlich den Annunciator 3 betrifft, aktiviert die doppel- te Lores-Grafik. Wir werden jetzt lauter gesperrte Lores-Kästchen sehen, ge- sperrt deshalb, weil in jeder Zeile nur je- des zweite Kästchen geplottet ist. Diese Kästchen rühren daher, daß nach PR#3 der Text-Bildschirmspeicher gelöscht, d.h. mit $AO = Spaces Leertasten gefüllt wurde. Nach GR wurde die obere Hälfte des Bildschirmspeichers nicht gelöscht, d.h. mit $00 gefüllt, weil die Lores-Moni- tor-Routinen nichts von der Double Lores wissen. Folglich werden die Spaces jetzt als Kästchen in der oberen Hälfte interpre- tiert. Wir entfernen diese momentan stö- renden Kästchen-Muster mit

C055:0 N F832G und geben danach ggf. noch C054:0

ein, damit sich auch die unteren 4 Textzei- len des gemischen Lores-Text-Bild- schirms normalisieren. Wir werfen nun ei-

nen kurzen Blick auf Diagramm 3. In der linken unteren Ecke dieses Schaubildes sehen wir ein Low-High-Nibble-Muster für die Speicherstelle $0400, das wir wie folgt verdeutlichen können:

LILr= L links + rechts HIHr = H links + rechts

Stellen wir uns vor, daß die 2 oberen L’s und die 2 unteren H’s zusammen 4 Dou- ble-Lores-Kästchen darstellen, wobei L für Low Nibble und H für High Nibble steht. Bei der einfachen Lores-Grafik enthielt beim Experiment 1 die Speicherstelle $0400 1 Byte oder 2 Halbbytes = Nibbles, die zwei aufeinandergesetzte Lores-Käst- chen in der Form

E

H

bildeten. Bei der doppelten Lores-Grafik existiert jedoch die Speicherstelle $0400 physisch zweimal, nämlich „unten“ (Page 1) und „oben“ (Page 2). Infolgedessen muß man nunmehr zwischen linken und rechten Low-High-Nibbles differenzieren. Dies läßt sich beweisen, indem wir folgen- de 4 Zeilen eingeben:

C055:0 N 400:0F

plottet das LI-Kästchen (links oben). C055:0 N 400:F0

plottet das HI-Kästchen (links unten). C054:0 N 400:0F

plottet das Lr-Kästchen (rechts oben). C054:0 N 400:F0O

plottet das Hr-Kästchen (rechts unten).

Bei der Double Lores gibt es mithin 80 statt 40 Kästchen pro Zeile. Da indessen weder im Applesoft-Interpreter noch im Monitor spezielle Double-Lores-Routinen enthalten sind, muß das Aktivieren der oberen respektive unteren Bildschirmhälf- te durch Softswitch-Befehle des Apple- soft- bzw. Assembler-Programms vorge- nommen werden. Die Assembler-Befehle

LDA $C050 (Grafik) LDA $C056 (Lores)

LLLL—uunn u nnnnnnnuuuuuun Eu

LDA $C052 (No Mix, Full Screen) STA $C001 (80-Store)

STA $CO00D (80-Column)

LDA $CO5E (Double on)

schalten auf den Double-Lores-Modus um. Danach kann man nach Belieben mit

Diagramm 3

oben) unten)

LDA $C055 (Page 2 LDA $C054 (Page 1

zwischen den zwei Bildschirmhälften $0400-$07FF umschalten. Der aufmerksa- me Leser wird jetzt sicher einwenden, daß in den Apple-Handbüchern die Page 1 als der Bereich $0400-$07FF sowie die Page 2 als der Bereich $0800-$0BFF beschrie-

. ben wird. Dies trifft auch zu und ist weiter-

hin gültig für die einfache Lores-Grafik. Bei der doppelten Lores-Grafik erhalten die Softswitches $C055 und $C054 jedoch vorübergehend die Funktion des Um- schaltens zwischen unterem und oberem $0400-$07FF-Bereich, wobei $0800- $0BFF unberührt bleibt. Dies setzt jedoch voraus, das vorher das ganze Sortiment der obigen Softswitches, insbesondere $C001, $COOD und $CO5E geschaltet worden sind. Man beachte im übrigen den Unterschied zwischen LDA (= PEEK) und STA (= POKE), der unbedingt eingehalten werden sollte.

Um die doppelte Lores-Grafik abzuschal- ten, sind folgende Softswitches erforder- lich:

LDA $C054 (Page 1) LDA $0051 (Text) LDA $C05F (Double off)

STA $C000 (40-Store) STA $C00C (40-Column)

die letzten beiden Softswitches dürfen nicht aktiviert werden, wenn vor dem Ein- schalten von Double Lores die 80-Zei- chenkarte bereits eingeschaltet war, da

rr electronic

Elektronik » Fachliteratur : Personal-Computer kommunizieren! Mit dem Akustikkoppler AK300. Daten, Texte und Programme -per Telefon! VonDatenbanken, Großrechnern und Mailboxen. Zwischen Filialen, Außendienst und Zentrale, den Mitgliedern eines Clubs oder ganz privat ...

Akustikkoppler AK 300 948,00 Technische Daten: 300 baud, Vollduplex, Originate und Answer, Batterie- u. Netzzbetrieb (Option), Variable Gummi- muffen für alle Hörer, FTZ-Nr. 18.13.1897.00., von der Post zugelassen. Gebühren- und anmeldefreil

Zum Anschluß an den Akustikkoppler benötigen Sie die Super Serielle Interface Karte . Best.-Nr. A2B0044 ... 396,00

Access// Terminal Emulation Sottware 229,00 Access// ist das neue Terminal Emulation Programm von APPLE Computer für die Apple//-Familie.

Sie verwandeln Ihren Apple// in ein Terminal und können somit Daten von einem Host-Rechner oder Elektronik -Mail-System empfangen und versenden. Access// bietet weiterhin die Möglichkeit des Abspeicherns der zu empfangenden Infor- mationen auf einer Diskette oder das Versenden von Dateien, die auf einer Diskette gespeichert sind. Access// basiert auf dem Betriebssystem ProDOS. (engl. Version)

j ane... das integrierte Softwarepaket 995,00

jane ist ein integriertes Sofwarepaket (Kalkulations- Text- verarbeitungs-und Dateiverwaltungsprogramm) mit der Maus. Alle Tastaturkommandos wurden durch einfache, leicht zu verstehende Bilder ersetzt, über die man dem Computer sagt, was er tun soll. Die integrierte Hilfe-Funktion von jane er- läutert alle Steuersymbole des Systems. Damit kann der An- fänger das Programm bedienen, ohne umfangreiche Hand- bücher zu lesen. (ohne Maus bitte separat bestellen.) Apple//e-Maus mit Mouse-Paint ................. 425,00

Apple//c-Maus mit Mouse-Paint ................. 285,00

AppleWorks Integriertes Sofwarepakeı 699,00

AppleWorks (AW) kombiniert die Textverarbeitung, eine Datenbank und ein Rechenblatt in einem integrierten Paket. AppleWorks ist anwenderfreundlich gestaltet. Ein "Schreib- tischmanager” koordiniert die einzelnen Funktionen. Man kann gleichzeitig in verschiedenen Dokumenten arbeiten und in sekundenschnelle Informationen aus einem Dokument aus- schneiden und in ein anderes einsetzen.

(Die deutsche Version ist ca. Anfang Oktober verfügbar.)

Deutsche Programme

PIONIERE IE „encssnernnss nenne 98,00 Zeilenorientierter Editor für den APPLESOFT-Programmierer unter ProDOS. Mit der Diskette wird eine ausführliche deutsche Bedienungsanleitung mitgeliefert. FRE ee 98,00 Bildschirm Masken Editor unter DOS 3.3 und ProDOS. Einbindbar in Applesoft- (auch kompillierte)und Assemblerprogramme. Diskette mit deutscher Bedienungsanleitung. FERR E eiseieeensunsohee a 98,00 Memory Management Utilities für den Apple //e mit ext. 80 /Z-Karte. Über 25 Programme erschliessen neue Anwendungsmöglichkeiten.

SUTEDEWERBE 2... keinen 48,00 Programm zur Herstellungvon Sicherungskopien. Dieses Programm gestaltet das softwaremäßige Unterbrechen, Speichern, Laden und Neustarten von

Programmen. Für Apple//e mit 64kB-Erweiterung incl. dt. Bedienungsanleitung. Für obige Programme steht eine ausführliche Beschreibung zur Verfügung. Bitte mit DINAS-Rückumschlag anfordern.

A.C.E. Applesoft Command Editor 149,00 ermöglicht einfäches Editieren einer BASIC-Zeile und bietet eine Menge Utilities: ermittelt ob eine Variableexistiert, Auto Line Numbering, Monitor Kommandos können direkt von BASIC aufgerufen werden und Keyboard Macros können definiert werden u.a.m.

APPLESOFT Tutorial Manual (A//e) ................... 37,00

APPLESOFT Reference Manual Vol.1&2 (A//e). 69,50 APPLE//e Reference Manual ............uuuueeanneenennnnnn 62,75

PASCAL Operating System Reference Manual .. 45,00 Satz=Language- und Operating Sys.Ref.Manual. 75,00

Diese neue Serie für Softwareentwickler (=Workbench) werden als Einzelblattsammlung im Format DIN A 5 geliefert Der passende Ordner bietet Platz für bis zu 3 Handbücher.

DOS Programmers Toolkit (incl. Diskette) ..... 250,00 Enthält: 6502 Assembler Toolkit mit vielen Hilfsprogrammen wie EDASM (Editor und Assembler), BUG BYTER (Programm zum Austesten von Assernb ), RLOAD (Assemblerprogramme in Verbindung mit BASIC-Programmen).

enthält eine Sammlung von Hilfsroutinen für alledie in APPLESOFT programmieren. ProDOS Technical Reference Manual (incl.Disk) 85,00 Enthält ProDOS, das neue Betriebssystem von APPLE, sowie den EXERCISER (Inter- aktives Programm zum Austestenvon ProDOS durch Aufrufe von der Tastatur her). Das ProDOS Techn. Ref. Manual benutzt man am effektivsten in Verbindung mit dem.. ProDOS Assembler Tools ( incl. Diskette) ...... 123,00 Enthält allesum effektiv unter ProDOS in Assembler zu programmieren. Beschreibung und Programme wie 6502 Assembler Tool Kit unter DOS 3.3. APPLE WORKBENCH Ordner (für ca. 3 Manuals) . 32,00

Für 3-fach Lochung nach amerikanischer Norm.

Ladenverkauf, Vorführung und fachgerechte Beratung 6900 Heidelberg I Breslauerstr. 29 Te1.06221/781500

Geschäftszeiten: Mo. - Fr. 9-13 +14 - 18 Sa. 9 -13 Uhr Versandanschrift: 6900 Heidelberg 1 Dammweg 2

35

sonst die ROM-Routinen der 80-Zeichen- karte „durchdrehen“.

Wenn Sie einen Apple Ile mit 80-Zeichen- karte besitzen und bei den obigen Experi- menten keine Double Lores sahen, kann dies folgende hardware-technische Grün- de haben:

Sie besitzen keinen Apple Ile mit Platine Version B. Dann ist weder doppelte Lores- noch doppelte Hires-Grafik möglich. Aller- dings sollen angeblich in Westdeutschland nur B-Version-Apples ausgeliefert worden sein.

Sie haben die Brücke (Jumper), die mit der 80-Zeichenkarte mitgeliefert wurde, nicht auf die entsprechenden Pins ge- steckt (siehe Apple-Ergänzungsblatt zur Bedienungsanleitung). Bei neueren 80- Zeichenkarten soll dies jedoch angeblich nicht mehr erforderlich sein.

Sie haben eine Nachbau-80-Zeichen- karte, die nicht über die entsprechenden technischen Möglichkeiten verfügt.

4. Hinweise zu den Programmen 1. Double-Lores-Softswitch-Demo

Dieses Demo veranschaulicht, welche Softswitches in Applesoft aktiviert und desaktiviert werden müssen, um Double Lores ein- und abschalten zu können. Es empfiehlt sich, die 80-Zeichenkarte vor Double Lores mit

PRINT CHR$ (21)

oder mit

ESC Ctrl-Q

abzustellen, weil man dann eine bessere Kontrolle über die Softswitches hat, denn die ROM-Routinen betätigen einen Teil der Softswitches, die für Double Lores benötigt werden, so daß Speicherkonflikte auftreten können. Beispielsweise könnte aus Versehen der Bereich $0800-$0BFF als Textspeicher aktiviert werden, womit das dort befindliche Applesoft-Programm zerstört würde.

2. Double-Lores-Applesoft-Demo

Dieses leichtverständliche Demo zeichnet zunächst vertikale Linien in wechselnden Farben (Programmzeilen 37 55) und plottet dann eine schräge Linie (Pro- grammzeilen 61 82). Man beachte, daß man bei schrägen sowie auch bei horizon- talen Linien permanent zwischen Page 1 und Page 2 alternieren muß, da die ROM- Plot-Routinen bekanntlich nicht auf die obere Bildschirmhälfte umschalten können.

36

3. DOUBLE.LORES (Assembler)

Dieses Assembler-Demo dient zur Veran- schaulichung der erforderlichen Softswit- ches sowie zur Erläuterung der Lores-Mo- nitor-Routinen. Es zeichnet übrigens eine Art „Fußballtor“.

4. AMPER.DOUBLE.LORES (Applesoft und Assembler)

Wir erinnern uns, daß eine Double-Lores- Zeile zwar 80 Kästchen numeriert von O- 79 - umfaßt, jedoch wegen des in obere und untere Hälfte aufgeteilten Bildschirms nach Aktivierung der jeweiligen Page- Schalter immer nur Kästchen im Bereich 0-39 geplottet werden können. Dies ist hinderlich für die Programmierung, insbe- sondere wenn schräge und horizontale Li- nien sowie Kurven geplottet werden kön- nen. Besser wäre es, wenn man einen Plot-Befehl in der Art

PLOTA,Y

geben könnte, wobei X Werte im Bereich 0-79 annehmen würde. Dies ist jedoch wegen der unzureichenden ROM-Routi- nen nicht direkt möglich. Deshalb enthält die Ampersand-Utility AMPER.DOUBLE- ‚LORES eine Konvertierungsroutine, die X-Werte bis 79 zuläßt. Im einzelnen wur- den folgende Befehle implementiert, die nach BRUN AMPER.DOUBLE.LORES über die Tastatur oder aus einem Apple- soft-Programm heraus aufgerufen werden können:

& GR

schaltet auf Double-Lores-Modus um. Da- mit entfällt die lästige „Softswitcherei“.

& TEXT

schaltet wieder auf 40-Zeichen-Textmo- dus zurück. Vor Anwendung der Utility AMPER.DOUBLE.LORES sollte man da- her die 80-Zeichenkarte bereits abgestellt haben.

& PLOT X,Y

plottet ein Double-Lores-Kästchen in der zuvor durch COLOR = F gewählten Farbe, wobei X den Bereich 0-79 und Y den Bereich 0-47 umfassen kann. Werte au- Berhalb dieses Bereichs werden mit einem Piepston „quittiert“.

An dieser Stelle soll nicht näher auf den Ampersand-Befehl (&) eingegangen wer- den, doch soll zumindest der Amper-Plot kurz erläutert werden:

Der Textpointer ist der Zeiger, der auf die jeweils gerade zu bearbeitende Stelle des Applesoft-Programms zeigt.

1 & PLOTAY

würde im Applesoft-Programmspeicher hexadezimal folgendermaßen aussehen:

1. $AF = Token für & 2.$8D = Token für PLOT

3.958 =X 4.$92C0=, 5.959 = Y

a) Wenn der Applesoft-Interpreter auf das Token für & stößt, lädt er das nachfolgen- de Byte, also in unserem Fall $8D, in den Akkumulator und springt nach $03F5, wo seinerseits durch AMPER.DOUBLE.LO- RES ein Sprung nach $0310 (siehe Zeile 62 des Assembler-Listings) installiert wurde.

b) Zeilen 62-68 prüfen, welches Token vorliegt. Im Falle von PLOT erfolgt dann ein Sprung zur Zeile 105 ($034F).

c) Der Textpointer wird nun in Zeile 105 durch die Routine CHRGET um 1 erhöht, womit gleichzeitig der Akkumulator mit dem Byte $58 für X geladen wird.

d) Dies ist die Voraussetzung für die Routi- ne GETBYT, welche den Wert der Varia- blen X ermittelt und dann im X-Register des 6502-Prozessors hinterläßt. Dieser Wert wird zunächst zwischengespeichert (Zeile 107).

e) Danach wird in Zeile 108 durch die Routine CHKCOM (Check Comma) das Komma $2C übersprungen, wonach CHKCOM automatisch das nachfolgende Byte, also $59 für Y in den Akkumulator überträgt.

f) Nunmehr wird durch erneutes JSR GET- BYT in Zeile 109 der Y-Wert ermittelt, der ebenfalls zunächst zwischengespeichert wird.

g) Jetzt wird es interessant (Zeile 114- 119). Der Akkumulator wird mit dem X- Wert, der im Bereich 0-79 liegen darf, geladen und durch den Befehl LSR (Logi- cal Shift Right) durch 2 geteilt, wodurch gleichzeitig Bit O0 in das Übertragsflag „Carry“ übertragen wird. Nehmen wir an, der X-Wert sei dezimal 79 = hexadezimal $4F = binär %01001111, dann gilt:

76543210 = Bit-Nummern 0-7

01001111 = 79 vor LSR

00100111 = 39 nach LSR (Carry = 1) Wenn Bit O vor LSR eine 1 enthielt, dann ist der X-Wert ungerade (BCS), andern- falls gerade (BCC). Wenn er ungerade ist, wird Page 1 aktiviert, andernfalls Page 2. Danach d.h. nach der Teilung durch 2 durch LSR kann die normale Monitor- PLOT-Routine $F800 (Zeile 133) aufgeru- fen werden.

h) Mit der Routine DATA (Zeile 141), die den Textpointer zum nächsten Statement vorrückt, und der Aktivierung von Page 1 (sicher ist sicher!) kehrt die Ampersand- Utility in das Applesoft-Programm zurück.

Das Applesoft-Demo AMPER.DOUBLE- ‚LORES.DEMO zeichnet übrigens eine Kugel, die durch Änderung der Variablen R für Radius sowie Fi und F2 modifiziert werden kann.

5. Schlußbemerkung

Double Lores ist eine nützliche Erweite- rung der Grafikfähigkeiten des Apple Ile/

IIc und empfiehlt sich stets dann, wenn die einfache Lores-Grafik zu grob und die ein- fache Hires-Grafik zu fein sein sollte, da die Double Lores ein Mittelding zwischen beiden normalen Grafik-Modi einnimmt. Mit der Utility AMPER.DOUBLE.LORES sind bei weitem noch nicht alle Möglich- keiten erschöpft. Beispielsweise fehlen noch folgende Befehle

& SCRNX,Y

& HLIN X1, X2 ATY

& VLIN Y1, Y2 ATX

& PLOT X1, Y1 TOX2, Y2

Vielleicht entwickelt ein Leser dieser Zeit- schrift diese zusätzlichen Ampersand-Be- fehle. Im nächsten Heft von „Peeker“ wird dann über Double Hires berichtet.

l ORG $300

2 *

3 * DOUBLE.LORES

4 ae

5 * von U.Stiehl 1984

6 a nme 7 * Waagrechte X-Achse

8 * 0 (links) bis 39 (rechts)

9 *

10 * Senkrechte Y-Achse:

41 * 0 (oben) bis 39 (unten) MIX 12 * 0 (oben) bis 47 (unten) FULL 13 0OoK— 7 14 * H2=X2; V2=Y2 Linien-Endpunkte 15 *

16 H2 EQU $2C ;X2

7 v2 EQU $2D 2

18 *--—— 19 * Mixed-Lores- und Text-Modus

20 *

21 SETGR EQU $FB40 ;GR-mixed 22 *

23 INIT EQU $FB39 ;Textmodus 24 *

25 PAGEIl EQU $C054

26 PAGE2 EQU %$C055

27T #--——

28 * SETCOL: Farbe festlegen

29 * Color-Nr.

30 * Sa SETCOL 32 *

(0-15) in A-Register

EQU $F864

33 * SCRN: Farbe eines Punktes finden 54 * X-Abschnitt in Y-Register 35 * Y-Abschnitt in A-Register 36 * Danach Farbe in A-Register

37 * 38 SCRN

EQU $F817

I nn

40 * CLRSCR: Zeilen 0-47 löschen 4l * CLRTOP: Zeilen 0-39 löschen

42 *

43 CLRSCR EQU $F832 ;0-47

44 CLRTOP EQU $F836 ‚0-39

45 *--—-—-—

4 & rr electronic

Elektronik - Fachliteratur - Personal-Computer

Literatur für APPLE II, Ile, IIc und kompatible Geräte

APPLESOFTBASIC Apple Il Anwenderhandbuch

49,00 von Lon Poole, 1982, 450 Seiten. te-wi Verlag Diese Buch erspart Ihnen zeitraubendes und nutzloses Suchen nach der wirklich verwendbaren Dokumentation für Ihren Apple. Neben der ausführlichen Auskunft über Peripherie, Zu- behör und Drucker wird gezeigt, wie man in BASIC und in Maschinensprache programmiert.

BASIC-Wegweiser für den Apple Il 32,- von Ekkehard Kaier, 1984, 200 Seiten. Vieweg-Verlag

Diese Buch weist Wege zum erfolgreichen Einsatz von Computern der Apple II-Familie mit Applesoft-BASIC. Mit über 80 Programmen, 7 Dateien, 24 PAPs und 84 Bildern.

APPLE Il Leicht gemacht 28,00 von J. Kascmer, 1984, 192 Seiten. SYBEX-Verlag

Dieses Buch zeigt wie Sie Ihren APPLE Ile, Il+ oder IIc in wenigen Stunden voll einsetzen können. Sie lernen wie leicht es ist Ihr eigenes BASIC-Programm zu schreiben.

BASIC Ubungen für den APPLE 38,00 von J.-P. Lamoitier, 1983, 256 Seiten. SYBEX-Verlag

Das Buch enthält eine Reihe von abgestuften Übungen mit zu- nehmendem Schwierigkeitsgrad. 50 werden Ihre Programmier fähigkeiten aufgebaut und an vielen Beispielen erprobt.

APPLE Il BASIC Handbuch 32,00 von D.Hergert, 1984, 304 Seiten. SYBEX-Verlag

Ein handliches Nachschlagwerk für Ihren APPLE II, Ile und IIc Tips und Vorschläge machen das Programmieren einfacher u. effizienter. Das Buch für Anfänger und Fortgeschrittene.

Spiele für den APPLE 38,00 von M.J. Capella/M.D. Weinstock, 270 Seiten, 1984. M&T-Buchverlag

Eine Sammlung von bewährten alten und raffinierten neuen Spielen für Ihren APPLE-Computer.

Spielprogramme für den Applelle 32.- von H. Franklin/J. Koltnow/L. Finkel, 1984, Vieweg-Verlag Das Buch stellt Spiele vor und zeigt, wie man Spiele erfindet

PASCAL Apple Il Pascal

96,00 von A.Lührmann/H. Peckham, 1982, te-wi Verlag Sie benötigen zu diesem Buch keine Vorkenntnisse, sondern lernen an Hand von Beispielen und Übungen, wie man selber PASCAL-Programme entwickelt und sie austestet.

APPLE DOS 3.3 - Tips und Tricks

28,00 von U.Stiehl. 1984. 216 Seiten. Hüthig-Verlag Dies ist die erste deutschsprachige Darstellung des Betriebs systems DOS 3.3 für den APPLE 11/11 Plus/lle. Begleitdiskette zu APPLE DOS 3.3 .................... 28,00

APPLE ProDOS für Aufsteiger Bd. 1 28,00 von U.Stiehl. 1984, 203 Seiten, Hüthig-Verlag

Nachfolgeband zu APPLE DOS 3.3 für das neue Betriebssys- tem ProDOS. Assembler Programmierer finden in diesem Band eine wertvolle Unterstützung durch interne ProDOS Systemadressen oder interessanten Programmen. Begleitdiskette zu APPLE ProDOS Band! ........... 28,00

Assembler | APPLE Assembler - Tips und Tricks 34,00

von U.Stiehl, 1984, 227 Seiten. Hüthig Verlag

Das neue jetzt vorliegende Buch enthält alle Monitor und Applesoft Interpreter Routinen für All/Ile/lic (40 2./Z.) wie eine Einführung in die 6502 Assembler Programmierung. Begleitdiskette zu APPLE Assembler ................. 28,00

Programmierung des 6502 44,00

von Rodnay Zaks, 1984, 288 Seiten. SYBEX-Verlag Sehr gut verständliche Einführung in die Assembler-Progra- mmierung mit dem Mikroprozessor 6502. Bestens geeignet für Anfänger und Fortgeschrittene.

38,00

6502 Anwendungen

von Rodnay Zaks, 1983, 288 Seiten. SYBEX-Verlag

Das Eingabe/ Ausgabe-Buch für Ihren 6502 Mikroprozessor. Viele Anwendungsbeispiele helfen Ihnen, das Erlernte in die Praxis umzusetzen.

Fortgeschrittene

6502 Programmierung 42,00 von Rodnay Zaks, 1984, 288 Seiten. SYBEX-Verlag

Lernen Sie wie man schwierige Probleme mit dem 6502 löst. Ein muß für jeden fortgeschrittenen Apple-User.

6502/65C02 Maschinensprache 49,00

von C.Persson, 1983, 250 Seiten. VerlagHeinz Heise

Diese Buch eines deutschen Autors ist eine intensive, praxis gerechte Einführung in die Programmierung des 6502. Als erstes Buch auf dem dt. Markt behandelt es auch den 65C02.

APPLE Maschinensprache 49,00 von D. Inman/K. Inman, 300 Seiten, 1984. te-wi Verlag

Eine Schritt-für-Schritt-Einweisung in die professionellere Entwicklung von Maschinenprogrammen mit APPLE SYSTEM MONITOR und APPLE MINI-ASSEMBLER.

Alle Bücher sofort ab Lager lieferbar. Bestellen Sie per NN oder besuchen Sie uns. Wir führen eine groBe Auswahl an aktuellen Büchern und Zeitschriften. 6900 Heidelberg I Breslauerstr. 29 Tel.06221/781500 Geschäftszeiten: Mo. - Fr. 9-13 +14 - 18 5a.9 -13 Uhr Versandanschrift: 6900 Heidelberg 1 Dammweg 2

37

0300: 0303: 0306: 0309: 030C: O30F:

0312: 0315: 0318: O31B:

O31E: 0320:

0323: 0326: 0328: O32A:

032D: 0330: 0352: 0354:

0337: O33A: 033C: O33E: 0340: 0342:

0345: 0348: O34A: 034C: O34E: 0350:

0353: 0356: 0358: O35A: 035C: 0O35E:

0361: 0364: 0366: 0368: O36A: 036C:

AD AD AD

8D AD

AD 20 AD 20

A9 20

AD AO A9 20

AD AO

20

55

2F 00

54 14 2F 00

co

F8

co

F8

co

F8

co

F8

co

F8

co

F8

131 132

PLOT: Punkt plotten X-Abschnitt in Y-Register Y-Abschnitt in A-Register

“*%*x* x

PLOT EQU $F800

* HLINE: Horizontale Linie plotten * Xl-links in Y-Register * *

X2-rechts in H2 Y-Abschnitt in A-Register

* VLINE: Vertikale Linie plotten * X-Abschnitt in Y-Register

* Yl-oben in A-Register

* Y2-unten in V2

* VLINE EQU $F828

“*x* x %*

LDA $C050 LDA $C056 LDA $C052 STA $cool STA $CO00D LDA $COo5E

;GRAFIK ; LORES ;NOMIX ;80STORE ;80COL ;80ANS3

LDA PAGEL JSR CLRSCR LDA PAGE2 JSR CLRSCR

LDA #10 JSR SETCOL

Punkt in der Mitte der untersten Zeile plotten

“x r*

LDA PAGE2 LDY #19 LDA #47 ; JSR PLOT

>

LDA PAGEL LDY #20 ; LDA #47 ; JSR PLOT

<>

Waagrechte Linie am oberen Lores-Bildschirmrand

“*RrK* Kr

LDA PAGE2

LDY #0 EL LDA #39 ‚X2 STA H2

LDA #0 x JSR HLINE

LDA PAGEIl

LDY #0 :&4 LDA #39 ;X2 STA H2

LDA #1 * JSR HLINE

Senkrechte Linie am rechten Lores-Bildschirmrand

* %*

LDA PAGE2

LDY #38 ;X LDA #47 12 STA V2

LDA #2 rl JSR VLINE

LDA PAGEI

LDY #39 x LDA #47 Et STA V2

LDA #2 ;Yl JSR VLINE

O36F: 0372: 0374: 0376: 0378: O37A:

037D: 0380: 0382: 0384: 0386: 0388:

038B: 038E: 0391: 0393: 0396: 0399: 039C: O39F: 03A2:

165 bytes

oo» I nur

* Senkrechte Linie am linken * Lores-Bildschirmrand %*

LDA PAGE2

LDY #0

LDA #47

STA V2

LDA #2

JSR VLINE

LDA PAGEL LDY #1 LDA #47 STA V2 LDA #2 JSR VLINE

BIT $C010 LDA $C000 BPL KEY2 BIT $C010 PAGEL $c000 STA $cooc $co5F INIT

;STROBE ;KEYBD

;STROBE

;40STORE ;40COL ;40ANS

ORG $300

AMPER . DOUBLE. LORES

von U.Stiehl 1984

Hex-Werte für Token * GRTOK EQU $88 TEXTTOK EQU $89 PLOTTOK EQU $8D * * Zwischenspeicher für X und Y * XACHSE EQU $00FE YACHSE EQU $OOFF * CLRSCR EQU $F832 PLOT EQU $F800 BELL EQU $FBDD *

CHRGET erhöht Textpointer um 1.

DATA erhöht Textpointer bis EQL oder ":".

GETBYT lädt Zahl im Bereich 0-255 von Textpointer-Stelle in X-Register. Vor JSR GETBYT muß A-Register Textpointer- Byte enthalten.

CHKCOM prüft, ob Textpointer- Byte "," enthält. Wenn ja, wird Textpointer um 1 erhöht und A-Register mit nächsten Textpointer-Byte geladen.

“*KRKKKKTKF TFT TFKAI TFKI KK a <a 8

*

CHRGET EQU $00Bl

AMPERVEK EQU $03F5

DATA EQU $D995

GETBYT EQU $ES6F8

CHKCOM EQU $DEBE

*

PAGEl EQU $C054

PAGE2 EQU $C055

*

* Ampersand-Vektor setzen

*

START LDA #$4C ;JMP STA AMPERVEK LDA #<AMPER STA AMPERVEK+1 LDA #>AMPER

F7 03 56

057D: 20 DD

0380: AD 54 0383: AC 95

134 bytes

57 58 59 60 61 62 65 64 65

STA RTS

A-Register

“*x*%* x

> = "u Ef] I

CMP BEQ CMP BEQ CMP BEQ JMP

Auf Double.

AMPERVEK+2

enthält bereits Token

nach & --> &GR, &TEXT, &PLOT

#+GRTOK AMPGR #+TEXTTOK AMPTEXT #PLOTTOK AMPPLOT ERROR

Lores umschalten

* und Bildschirm löschen

. AMPGR LDA LDA LDA STA STA LDA LDA JSR LDA JSR JMP

Auf Text.Mo

“*IKK KK KK

AMPTEXT STA STA LDA LDA JMP

& PLOT X, Y

X-Achse in Y-Achse in

PPLOT JSR JSR STX JSR JSR STX

oder

LDA

LSR

BCC PAGER1 LDY

BCS PAGER2 LDY *

$Cc050 ;GRAFIK $c056 ;LORES $c052 ;NOMIX $cool ;80STORE $cooD ;80COL $co5E ‚80ANZ3 PAGEL

CLRSCR

PAGE2

CLRSCR

EXIT

dus zurückschalten

$co000 ;40STORE $cooc ;40COL $co5F ;40AN3 $co51 <TERT EXIT

Y-Register (0-79) A-Register (0-47)

CHRGET

GETBYT :X->X-Reg.

XACHSE CHKCOM ;Komma

GETBYT ;Y->X-Reg.

YACHSE 2? XACHSE PAGER2 PAGEl

PARAMS PAGE2

* Wertebereich okay?

*

PARAMS TAY CPY BCS

LDA CMP BCS %* * Plotten und * JSR JMP * * Unzulässige * ERROR JSR * EXIT LDA JMP

;X->Y-Reg.

+40 ‚>=39? ERROR

YACHSE :Y->A-Reg.

+48 ‚>=477 ERROR

zurück zu Applesoft

PLOT EXIT

Parameter BELL

PAGEL DATA

Double-Lores-Softswitch-Demo

P= PEEK (49232): REM GR POKE 49153,0: REM 80-STORE POKE 49165,0: REM 80-COLUMN P= PEEK (49234): REM NO MIX PEEK (49246): REM DOUBLE ON PEEK (49237): CALL 63538: REM Clear Page2 PEEK (49236): CALL 63538: REM Clear Pagel = PEEK (49237): POKE 1024,15: GET X$: REM Page2 linker Punkt "oben" = PEEK (49236): POKE 1024,15: GET X$: REM Pagel rechter Punkt "unten" TEXT : PRINT CHR$ (4)"PR#3": PRINT CHR$ (4)"PR#3": REM Softswitches normal; 2 * PR#3

Double-Lores-Applesoft-Demo

10 PRINT "DOUBLE.LORES IN APPLESOFT" P= PEEK (49232): REM GR POKE 49153,0: REM 80STORE POKE 49165,0: REM 80COL = PEEK (49234): REM NOMIX PEEK (49246): REM AN3 PEEK (49237): CALL 63538: REM CLRP2 PEEK (49236): CALL 63538: REM CLRPI PEEK (49152): ON P < 128 GOTO 34:P = PEEK (49168): KEY FOR C = 15 TO 0 STEP - 1: COLOR= C FOR X = 0 TO 36 STEP 4 = PEEK (49237): REM PAGE2 VLIN 0,47 ATX P= PEEK (49236): REM PAGELl VLIN 0,47 ATX +1 NEXT X,C COLOR= 10 X=0:Y=0 P= PEEK (49237): REM PAGE2 PLOT X,Y Y=Y+l P= PEEK (49236): REM PAGEL PLOT X;Y x\=X+1:Y=-Y+tl IF Y < 48 GOTO 64 P= PEEK (49152): ON P < 128 GOTO 85:P = PEEK (49168): REM KEY POKE 49152,0: REM 800FF POKE 49164,0: REM 40COL P= PEEK (49236): REM PAGELl TEXT

Amper.Double.Lores.Demo

PRINT CHR$ (21): PRINT CHR$ (4)"BRUN AMPER. DOUBLE. LORES"

REM Amper.Double.Lores.Demo zeichnet eine Kugel TEXT : & GR XE = 79:YE = 47:A = XE / 2:B= YE / 2:Fl = 7:F2 = 23 FOR C = 1 TO 15: COLOR= C:R=C+H+C FORX=A-RTOAHR: IF X < DO OR X > XE GOTO 60 H=RxR- (X-A) * (X - A): IFH< = 0 GOTO 60 Yl=B+t SQR (H) - FL:Y2=B- SQR (H) + Fl

IF YA > O0 AND Y1 < = YE THEN & PLOT X,Yl

IF Y2 > O0 AND Y2 < YE THEN & PLOT X,Y2

NEXT X

NEXT C

GET X$

& TEXT : HOME

grafik g4

Mit Hilfe des Applesoft-Programms HI- RES und des Maschinen-Programms PRINTHIRES ist es möglich, die hoch- auflösende Grafik des Apple auf einem Epson Drucker, der für die Ausgabe der Grafik vorgesehen ist (MX-80, MX- 82, MX-100 Typ 3 sowie RX-80 FX-80 etc.), auszugeben. Durch leichte Modi- fikationen der Programme ist es auch möglich, sie an einen anderen Drucker oder ein anderes Interface anzupassen.

Jürgen und Dieter Geiss

40

Hires-Grafik-Dump

für

Epsondrucker

Nachdem Sie den Maschinenspracheteil des Programms in den Computer eingege- ben haben, speichern Sie ihn bitte unter dem Namen „PRINTHIRES“ mit einem BSAVE PRINTHIRES, A$1C00, L$0400. Danach geben Sie das Applesoft-Pro- gramm HIRES ein, und speichern Sie es dann unter dem Namen HIRES mit dem SAVE-Befehl ab.

Beschreibung des Applesoft- Programms

(Die halbfette Zahlen beziehen sich im nachfolgenden auf die Applesoft-Pro- grammzeilen)

1000: ST ist die Startadresse für die Para- meter, die an das Maschinenprogramm übergeben werden. Die Startadresse wird

auf 768 Dezimal = $0300 Hex gesetzt. 1010: CO ist die Adresse für die Kontroll- zeichensequenz, um den Drucker auf ei- nen Grafikmodus zu schalten.

1020: BY ist die Anzahl der Bytes/Zeilen, die der Drucker nun als Grafikzeichen in- terpretiert.

1030: IM ist die Stärke (Impression), mit der gedruckt werden soll. Man unter- scheidet:

a) Single Strike: Eine Grafikzeile wird ein- mal ausgedruckt.

b) Double Strike: Eine Grafikzeile wird ausgedruckt, dann wird ein Wagenrücklauf und ein Zeilenvorschub um 1/216 Inch bewirkt und die Zeile nochmals ausge- druckt.

c) Quadruple Strike: Eine Grafikzeile wird ausgedruckt, ein Wagenrücklauf ohne Zei- lenvorschub erwirkt, die Zeile wird noch-

mals ausgedruckt. Dann wird wie beim Double Strike Modus ein Zeilenvorschub um 1/216 Inch bewirkt und die Zeile wie- der zweimal gedruckt.

Anmerkung zu b) und c): Funktioniert nur bei Druckern der Marke Epson. Bei ande- ren Druckern müssen die Unterprogram- me Linesp und LS1 im Assemblerpro- gramm entsprechend modifiziert werden.

1040: XO ist das Exclusive-Or-Byte. Die Grafikseite kann entweder positiv oder ne- gativ ausgedruckt werden ($00 oder $FF). a) positiv: Ein Punkt, der auf der Grafiksei- te gesetzt ist, wird auf dem Drucker aus- gegeben.

b) negativ: Ein Punkt, der auf der Grafik- seite nicht gesetzt ist, wird auf dem Druk- ker ausgegeben.

1050: DI ist die Richtung (Direction), in der gedruckt werden soll. Es gibt die Möglich- keiten horizontal oder vertikal.

1060: FR gibt an, ob ein Rand (Frame) das Hi-Res-Bild einrahmen soll. Der Rand ist ein Bit breit.

1070: PA ist die Grafikseite (Page), die ausgedruckt werden soll. 1. Page = $2000-$3FFF 2. Page = $4000-$5FFF

1080: RF bestimmt den Wiederholungs- faktor (Repeat Factor). Ein (Teil-)Bild kann mehrere Male nebeneinander ausgedruckt werden.

1090: RD ist die Wiederholungsdistanz (Repeat Distance) und gibt die Anzahl der Bits zwischen den wiederholten Bildern an.

1100: LE ist der linke Rand (left) des Hi- res-Bildes. Die Werte in LE und LE + 1 berechnen sich folgendermaßen: Das hö- herwertige Byte (LE + 1) gibt das horizon- tale Byte der Hires-Page an, das nieder- wertige Byte das Bit in diesem Byte. Ist der linke Rand also 10, so muß in die Spei- cherzelle LE + 1 eine 1, in LE eine 3 gepokt werden (1 x 7 + 3, da sieben Bits pro Byte ohne das Farbenbit gezählt werden).

1110: RI ist der rechte (right) Rand. Die Berechnung entspricht der des linken Randes.

1120: TP ist der obere (top) Rand. Er kann Werte zwischen O und 191 annehmen.

1130: BO ist der untere (bottom) Rand. Auch hier treten Werte zwischen O und 191 auf.

1140: XF ist der X-Faktor. Das Bild kann in X-Richtung (horizontal) gestreckt werden. Eine 1 entspricht der Originalgröße, bei einer 2 wird das Bild doppelt so groß in X- Richtung. Der Maximale Wert ist 31.

1000:

1C02: 1005: 1007: 1C0OA:

1COB: 1COE: 1010; 1C12: 1C15: 1617: 1619;

1CIC: IOir: 1621:

1024: 1027: 1029:

1LC2C: LCZE:

1C31: 1634:

1637: 1039:

A9

8D A9

60

AD DO A9 8D DO A9 8D

AD

DO

AD

ac

A9 20

AC SC

A9 8D

OB

F6 IC F7

17 D6

16 20

01 26

05

03

03

03

05

03

IF

03

1D

lE

03 05

05

vo oıvVvoaPruıvdH

Grafik g.4

ORG $1C00

KRRHKFHKRRFRHRHKRERKHFRKHKRH KK FH FH FH FH HK EFF FF HF KH FE * PRINTHIRES * * FX-80, FX-100, RX-80, RX-100, MX-80, MX-82, MX-100 * KRKRKRKRRHERKREKRKHHK HH HH HH HH FH HH FH KH FH EI KK +

Base EQU $I1C ;Adresse fuer Graphikzeile Frameadr EQU $IE ‚Hilfsadresse fuer Bildrahmen Start EQU $0300 ‚Start fuer Parameteruebergabe Amprsand EQU $03F6 ‚Basic &-Vector

Control EQU Start+$00 ;Graphik Steuerzeichen fuer

. ‚Drucker ohne ESC-Zeichen

Bytes EQU Start+$02 ;Anzahl der Graphikbytes pro Zeile Impres EQU Start+$04 ;1-, 2- oder 4-fach Dichte

XOR EQU Start+$06 ;Exklusives oder fuer jedes Byte Direct EQU Start+$08 ;Richtung (O=horiz., 1=vertik.) Frame_yn EQU Start+$0A ;0=Rand, 1l=kein Rand

Page EQU Start+$0C ;Graphik Seite 1 oder 2

Rfactor EQU Start+$0E ;Anzahl der Bilder pro Zeile Rdistnce EQU Start+$10 ;Distanz zw. 2 oder mehr Bildern Left EQU Start+$12 ;linker Bildrand (0..279)

Right EQU Start+$14 ;rechter Bildrand (0..279)

Top EQU Start+$16 ;oberer Bildrand (0..191) Bottom EQU Start+$18 ;unterer Bildrand (0..191) Xfactor EQU Start+$lA ;Dehnung in X-Richtung

Yfactor EQU Start+$1lC ;Dehnung in Y-Richtung

Lnumber EQU Start+$20 ;Graphikzeilennumner

Asave EQU Start+$21

Ysave EQU Start+$22

Hcount EQU Start+$23

Voount EQU Start+$24

Bitcount EQU Start+$25

Counter EQU Start+$26

Rcounter EQU Start+$27

Xcount EQU Start+$28

Ycount EQU Start+$29

LF EQU $0A ;‚ASCII Code fuer Zeilenvorschub CR EQU $0D ;ASCII Code fuer Wagenruecklauf ESC EQU $1B ;‚ASCII Code fuer ESCAPE Byt0o_255 EQU $0200 ;Zwischenspeicherung

Prout EQU $C090 ‚Zeichen an Drucker (parallel) Prstrb EQU $cı1c1 ‚Drucker bereit?

KRITIK KK

LDA #<Pgnstart ;&-Vektor fuer Basic an den Pro- * ‚grammstart einstellen

STA Amprsand

LDA #>Pgnstart

STA Amprsandtl

RTS

KRITIK

Pgmstart

Page_2

Frametst

No_Frame

LDA BNE LDA STA BNE LDA STA

LDA BNE JSR

LDA BEQ JMP

Page Page_2 +$20 Page Frametst +$40 Page

Frame_yn No_Frame Frame

Direct Horprint Verprint

;initialisieren von Seite 1 oder 2

;Graphik-Seite 2

‚Test, auf Bildrahmen ‚zeichne Rahmen

‚Test auf horiz. oder vert.

KRERTTHTTTTTTHH TE FIE K

Horprint LDA #23 ‚23/216" Zeilenvorschub JSR Linesp LDY Top ‚Zeile mit der begonnen wird STY Lnumber

Hstart LDA #$01 ‚Zaehler fuer Dehnung in STA Counter ;Y-Richtung

1150: YF ist der Y-Faktor. Das Bild kann in der Vertikalen gestreckt werden. Eine 1 ist auch hier die Originalgröße.

1180 1210: Es wird die Möglichkeit ge- geben, das augenblicklich im Speicher in der ersten Grafikseite befindliche Bild ab- zuspeichern. Dies wird immer unter dem Namen „PICTURE“ gemacht.

1220 1230: Das Maschinenprogramm „PRINTHIRES“ wird geladen und gestar- tet. Es stellt den Ampersand-Vektor (&) auf den Wert $1C0B ein. Damit kann das eigentliche Druckprogramm mit einem einfachen &-Befehl gestartet werden. 1250 -— 1290: Es wird gefragt, ob sich die Grafik schon im Speicher befindet. Bei einem No wird der Disketteninhalt gezeigt und es kann eine Grafik geladen werden. 1300 1330: Der Bildschirm wird auf Gra- fik umgeschaltet.

1340 1370: Wenn auf die Frage „Grund- einstellung?“ mit Yes geantwortet wird, werden die Parameter voreingestellt. Und zwar:

CO =ASC („K“)

BY = 280 Bytes

IM =0 = single strike X{O =0 = positiv

DI =0 = horizontal FR =0 = Rand

PA =0 = erste Seite RF =1

RD =0

LE =0

RI = 6/39 = low/high TP =0

BO = 191

XF =1

YF =1

1380 1460: Abfrage der Parameter 1470 1640: Abfrage der zu ladenden Grafik

1650 1700: Abfrage, ob richtiges Bild vorhanden ist

1710 1760: Abfrage, ob andere Page gezeigt werden soll

1770 - 1830: Zeigen der zweiten Grafik- seite

1840 1850: Zurück zur Abfrage der zu ladenden Grafik

1860 1900: Druck der Grafik

1910 1980: Abfrage des nochmaligen Druckens und Endes des Hauptpro- gramms

1990 2080: Voreinstellung der Para- meter

2090 2130: Abfrage eines Kommandos 2140 2320: Einstellen des Druckmodus 2340 2400: Einstellen der Druckstärke

42

1C5C: 1C3F: 1042: 1045: 1047: 1CAA:

1C4D: 1050: 1051: 1053: 1056: 1059: 1C6B:

ICbE:

1C61: 1064: 1067: 1C6A:

166G:

1C6F:

1672: 1675: 1077: 1079: ICTB:

ICTD: 1C80: 1083: 1C86: 1089: 1C8C: 1C8E:

1C8F: 1092: 1095: 1098: 1C9B: 1C9E: 1CAl: ICA3:

lCA6: 1CA9: ICAC: lCAE: LCBl; 1CB2: 1CB3: 1CB5: 1CB8: 1CBB: 1CBD: 1CCO: 1CC3: 1665: 1CC8: ICCA: ICCD: 1CDO:

1CD2: 1CD4: 1CD7: 1CD8: 1CD9: LCDC: lCDF: lCE2: ICES: 1CE7: 1CEA: 1CEB: lCEE: ICFO: ICFl: 1CP2: ICF5: ICF7:

20

CD FO EE ac

AD 18 69 8D CD

ac 20 20 20 CE DO 20 20 AE FO EO DO 20 20 20 CE

DO 60

E6

8r BD at F5

4A

F4

04

07 02 11

4a

8F BD 27 F5

FC Bi 23 15 24 18 05 24 DC

23 F8

08 21

23 E8

1C 03 03

03 1C

03

05

03

IF

lE

IC

lE

05

1D

lE

03

1D lE 1C lE 03

03 03 03 05 03 05

05

03 IF

05

03 03

05

03

17 118 119 120 121 122 123 124 125 126 127 128 129 150 131 132 133 154 155 136 137 138 159 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 Irl 172 173 174 175 176

Hstartl

Hstart2

Hlline

Hrepeatl

Hrptl Hrepeat2

JSR LDA CMP BEQ INC JMP

LDA CLC ADC STA CMP BCC JMP

JSR

JSR JSR DEC BNE

JSR JSR

LDX CPX BEQ CPX BNE

JSR JSR JSR JSR DEC BNE

SkpDstrk RTS

Hlline

Counter Yfactor Hstart2 Counter Hstartl

Lnumber

+$08 Lnumber Bottom Hstart Quit

CRLF

PrHline

Sendbits Rcounter Hrepeatl

PrHagain LS1

Impres #$01 Hrptl #502 SkpDstrk

PrHagain Initline PrHline

Sendbits Rcounter Hrepeat2

;Bei Dehnung wird horizontale

‚Zeile entsprechend oft gedruckt

;Neue Zeile

;8 Bits pro Zeile werden gedruckt

;Drucke horizontale Zeile

‚Zaehler fuer Bilderanzahl/Zeile

‚if Impression = 4-fach Dichte

‚1/216" Zeilenvorschub

‚doppelte Dichte

;keine doppelte Dichte

KRITIK

PrHline

X_loop

Getbyte

Getbytel

Getbyte2

Hgood

Hloopl

Hloop2

Hloop3

LDA STA LDY STY LDA STA LDA STA

LDA JSR LDA LDX LSR DEX BPL ROL DEC BEQ LDA CMP BEQ INC BNE ASL DEC BNE

LDY LDA LSR PHP LDX STX LDX STX LDX ROL INX DEC BNE PLP PHP DEC BNE PLP

Left Bitcount Left+l Ysave Lnumber Vcount +$08 Hcount

Vcount Bascalc (Base),Y Bitcount

Getbytel Asave Hcount Hgood Vcount Bottom Getbyte2 Vcount Getbyte Asave Hcount Getbyte2

+$08 Asave

Yfactor Ycount Yfactor Hcount #$00

Byt0_255,X

Hcount Hloop3

Ycount Hloop2

;druckt eine horizontale Zeile ;holt linker Rand in bits ‚hires byte

;8 Bit werden gedruckt

‚Zeilenadresse berechnen

;hole ein Byte ‚Rechtsverschiebung bis linker ‚Rand im Byte erreicht ist

;hole jeweils ein Bit aus den ‚naechsten 8 Zeilen und vereinige ‚diese zu einem Byte

‚8 Bits ‚vergroessere in Y-Richtung um ‚Y-Faktor

2410 2470: Einstellen des Positiv/Ne- gativ-Drucks

2480 2540: Einstellen der Druckrichtung 2550 2610: Einstellen der Bildumran- dung

2620 2680: Wählen der Grafikseite 2700 2990: Einstellen und Ausrechenen der restlichen Parameter

3000 3060: Berechnen der Byteanzahl (BY) in Abhängigkeit vom linken/rechten Rand und vom X- oder Y-Faktor.

Bedienung des Applesoft- Programms

Das Applesoft-Programm ist menüartig gesteuert und somit leicht zu bedienen. Die Abfragen erwarten entweder ein J/N oder Y/N oder eine Zahl. In beiden Fällen braucht die RETURN-Taste nicht betätigt zu werden. Es ist egal, ob Sie Groß- oder Kleinbuchstaben eingeben. Nur bei der Frage „Welche Grafik laden?“ muß nach dem Filenamen die RETURN-Taste betä- tigt werden.

Modifikation des Applesoft- Programms für andere Drucker

2140 2320: Je nach Möglichkeiten des Druckers müssen in CO und CO + 1 die Steuerzeichen (ohne führendes ESC) ge- schrieben werden. Als Beispiel sei die Zei- le 2260 angeführt, die in CO den ASCIl- Wert von K schreibt, damit das Maschi- nenprogramm an den Drucker die Se- auenz ESC „K“ schickt. Dies schaltet ei- nen Epson Drucker auf Normalgraphik. Das Applesoft-Programm läuft mit den meisten Interfaces.

1CF8: 1CF9:

ICFB: lCFE: 1D01: 1D03: 1D04: 1D07: 1D08: 1DOB: 1DOC: 1DOE: 1DOF: 1D10: 1D12: 1D15;

IE: 1D1A:

1D1D: 1D20: 1D21:

1023: 1D26: 1D29: 1D2B: 1DZE: 1D31: 1D33: 1D34: 1D37: 1D3A: 1D3G: 1D3E: 1D41: 1D42: 1D44: 1D47:

1DAA: 1D4AD: 1D4F': 1D51: 1D54: 1D8'7: 1D5A:

88 DO

AE 8E AO 18 AE CA TE CA 10 ZA 88 DO CE DO

4D AE

20 CA DO

AC cc DO AD CD DO 60 EE AD c9 FO ac c8 Ag 8D ac

AD c9 DO 20 20 20 CE

DC

26 24 08

1C

00

FA

Fl 24 EA

06 1A

TB

FA

ER 15 09 25 14 01

25 25 07 03 98

00 25 98

04 02 0E

8F BD 27

03

03

05

02

03

05

03

lE

03 03

03 03

05 03

1C

03 1C

03

lE 1lC lE 03

177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 all 212 213 214 »18 216 RT 218 219 220 2 222 223 224 225 226 227 228 229 250 251 252 233 254 235 236 257 238 259 240 24Al 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265

Hloop4 Hloop5

Hloop6

Hagain

Hagainl

Hagain2

DEY BNE

LDX STX LDY CLC LDX DEX ROR DEX BPL ROL DEY BNE DEC BNE

EOR LDX

JSR DEX BNE

LDY CPY BNE LDA CMP BNE RTS INC LDA CMP BEQ JMP INY LDA STA JMP

Hloopl Counter Vcount

#508

Yfactor

Byt0_255,X

Hloop6

Hloop5 Vcount Hloop4

XOR Xfactor

Print Hagain

Ysave Right+l Hagainl Bitcount Right Hagainl

Bitcount Bitcount #$07 Hagain2 X_loop

#$00 Bitcount X_loop

grafik 4

‚vergroessert in X-Richtung um

;X-Faktor

‚rechter Bildschirmrand schon ‚erreicht?

‚ja, dann Ende

‚alle 7 Bits schon abgearbeitet?

‚7 hires Bits pro Byte

‚nein

‚naechstes Byte

KERKKRTTTTTTTT THE

PrHagain LDA

CMP BNE JSR

PrHaganl JSR

JSR DEC BNE

PrHagan2 RTS

Impres #$02 PrHagan2 Initline PrHline Sendbits Rcounter PrHaganl

;vierfache Dichte

KERNE FH HE

PrVagain LDA

CMP BNE JSR

PrVaganl JSR

JSR DEC BNE

PrVagan2 RTS

Impres #502 PrVagan2 Initline PrVline Sendbits Rcounter PrVaganl

‚vierfache Dichte

KR +

Verprint LDA

Vstart

JSR

LDY STY LDA STA

Countrlp JSR Vrepeatl JSR

JSR DEC BNE

JSR JSR LDX

CPX BEQ

#20 Linesp

Right+tl Ysave #+$01 Counter

CRLF PrVline Sendbits Rcounter Vrepeatl

PrVagain LS1 Impres

#$01 Not_ds

;20/216'" Zeilenvorschub ;der vertikale Druck funktioniert

‚wie der horizontale Druck, mit ‚dem Unterschied, dass immer nur ‚7 Bits pro Zeile ausgedruckt wer- ‚den.

Modifikation des Maschinen- Programms für andere Drucker oder Interfaces

379 382: In Asave befindet sich das Byte, das auszudrucken ist. Ist der Druk- ker noch nicht fertig, wartet er in der Prwait-Schleife. Das Programm wartet, wenn der Printerstrobe negativ ist. Der Printerstrobe kann in Zeile 48 geändert werden. Ist der Drucker fertig, wird das Zeichen an den Drucker gesandt. Dies geschieht mit einem STA $C090 (gültig für Slot 1). In Zeile 47 kann das geändert werden.

Wichtig ist also, wie das Interface erkennt, ob der Drucker schon druckbereit ist, und wie ein Zeichen an den Drucker geschickt wird.

429 438: Hier muß die Kontrollsequenz untergebracht sein, die bewirkt, daß der Drucker auf n/216 Inch Zeilenabstand um- schaltet. Beim Epson ist dies ESC „3“. 449 457: Hier muß sich die Kontrollse- quenz befinden, die das Papier um 1/216 Inch vorwärtsbewegt. Beim Epson ist dies ESC „J" 1.

Hinweis: Eine modifizierte Version von PRINTHIRES für den Image-Writer befin- det sich in Vorbereitung für die Peeker- Sammeldiskette.

MMU 2.0

Memory Managements Utilities

für die Apple lle 64K-Karte

DOS 3.3 (und ProDOS)

vonU. 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 Il Plus, doch ist „MMU 2.0" primär für 64K-Karte-Besitzer gedacht.

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

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

nn Le no no m

44

1DAl: 1DA3:

1DA5: 1DAB8: 1DAB: 1DAE: 1DBl: 1DB4:

1DB6: 1DB9: 1DBC: 1DBE: 1061;

1DC4: 1DC7: 1DC8: 1DC9: 1DCC: 1DCE:

1DD1: 1DD4: 1DD7: 1DDA: 1DDD: 1DDF: 1DE2: 1DES: 1DE7: 1DE9: 1DEA: 1DED: lDEF: 1DFO: 1DFl: 1DF3: 1DF4: 1DF5: 1DF7: 1DFA: 1DFD: 1E00: 1E03: 1E06: 1E08: l1EOB: 1EOD: lEOF: 1E10: lEll: lEl3: 1E16: 1E18: 1E19: lElA: lElD: 1E2O: 1E23: 1ER6: 1E28: lE2B: lE2C: lEZF: 1ES1: 1E32: 1E33: 1E36: 1E38: 1E39: 1E3A:

1E3C: l1E3F: 1E42: 1E44: 1E45: 1E48: 1E49: 1E4C: 1E4AD: 1E4F: 1E50: 1651:

FF

28 E83 DC 26

24 07

00

FA

Fl

1D lE

lE

03

03

03

03

03

05

IF

03

IF 03

03

03

03

03

05 03

03

266 267 268 269 270 27 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 291 298 239 300 301 302 3053 304 305 306 507 308 309 310 Sıll 312 313 514 315 316 317 318 319 320 321 322 523 324 325 326 327 328 329 330 351 352 333 354 355 356 337 538 339 340 341 342 343 344 545 346 347 348 349 350 351 352 353

Not_ds Vrepeat2

Skip_ds

Next_X

KERRETTTEEEEEE K

PrVline

Lineloop

Lnloopl

RMbit

Genmask

Vok Vokl

Vok20

Vok2

Vok3 Vok4

Vok5

CPX BNE

JSR JSR JSR JSR DEC BNE

LDA CMP BEQ INC JMP

LDA TAY DEY CMP BNE JMP

LDA STA JSR LDY LDA STA CPY BNE LDA SEC SBC BEQ TAX INX LDA LSR DEX BNE AND STA LDA LDY CPY BNE LDX BEQ LDA ASL DEX BNE AND LDY LSR PHP LDX STX LDX STX LDX ROL INX DEC BNE PLP PHP DEC BNE PLP DEY BNE

LDX STX LDY CLC LDX DEX ROR DEX BPL ROL DEY BNE

+$02 Skip_ds

PrVagain Initline PrVline

Sendbits Rcounter Vrepeat2

Counter Xfactor Next_X Counter Countrlp

Ysave

Left+l Vstart Quit

Top Lnumber Bascalc Ysave (Base),Y Asave Right+l RMbit +$06

Right RMbit

#$FF

Lnloopl Asave Asave Asave Left+1 Ysave Vok Left Vok

#$ FF

Genmask Asave #507

Xfactor Xcount Xfactor Hcount #$00

Byt0_255,X

Hcount Vok2

Xcount Vok20 Vokl Counter Vcount

+$07

Xfactor

Byt0_255,X

Vok5

Vok4

;keine doppelte Dichte

‚rightmost bit

‚7 Bits pro Zeile

1E53: 1E56:

1E58: 1E5SB: 1ESD:

1E60: 1E63: 1E64:

1E66: 1E69: 1E6C: lE6F: 1E72: 1E74:

1E77:

1E78: 1ETB: 1876: 1E7D: lETE: lE7TF: 1E82: 1E85: 1E87: 1E8A: 1E8B: 1E8C: 1E8D: lESE: 1E91:

1E92: 1E94: 1E97: 1E99: 1E9C: l1E9F: 1EA2: 1EAS5: 1EA7: lEAA: lEAD: l1EBO: lEB3: l1EB6: l1EB9: lEBC:

l1EBD: 1ECO: l1EC1: 1EC4: 1EC5: 1EC7: 1EC8:

1ECA: l1ECC: lECF: l1EDO: l1ED2: 1ED3: 1ED5:

1ED6: 1ED7: 1ED9: l1EDC: lEDE: lEEl: lEE2: 1EE5:

1EE6:

CE DO

4D 29 AC

20 88 DO

AE EE AD EC BO ac

60

8D 8A

98 48 AD 2C 30 8D 68 A8 68 AA AD 60

A9

A9 20 AD 20 AD FO 20

20 AD 20 AD 8D

AD AA AD A8 DO 8A FO

Ag 20 CA

88

10 60

A9

24 EA

06 TF 1C 78 FA

20 20

18

03 D7

21

21 Cl FB 90

21

10

41

05

OB

00 78

FA

F7

1B 78

78

78

OD

05

03

05

lE

03

05 cl

co

03

03

03

lE

lE

lE

lE

554 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 38l 382 383 384 385 386 387 388 389 390 391 392 393 594 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 all 412 413 414 415 416 417 418 419 420 421 422 4253 424 425 426 427 428 429 450 451 432 433 454 435 436 437 4358 459 440 441 442

DEC BNE

EOR AND LDY

JSR DEY BNE

Vagain

LDX INC LDA CPX BCS JMP

Vagainl RTS

Vcount Vok3

XOR #+$7F Yfactor

Print Vagain

Lnumber Lnumber Lnumber Bottom Vagainl Lineloop

KRITIK

Print STA TXA PHA TYA PHA LDA Prwait BIT BMI STA PLA TAY PLA TAX LDA RTS

Asave ‚diese Unterprogramm, das mit ei- ‚nem Parallel Interface arbeitet, ‚schickt ein Zeichen an den ‚Drucker. Will man andere Schnitt- ‚stellen benutzen, so muss dieses

Asave ;UP geaendert werden

Prstrb ‚ist Drucker bereit?

Prwait

Prout ‚wenn ja, sende ein Zeichen

Asave

KRFRFTTRTTTTTTTTTTTTTTTTTTTTIIIIII IE

Initline LDA JSR LDA JSR LDA JSR LDA BEQ JSR Initinl LDA JSR LDA JSR LDA STA RTS

#CR ‚neue Zeile initialisieren Print #+ESC ‚das ESC-Zeichen geht den Graphik-

‚steuerzeichen immer vorraus ;‚Steuerzeichen fuer Graphikmodus

Print Control Print Control+l Initlinl Print Bytes Print Bytes+l Print Rfactor Rcounter

‚Anzahl der Graphikbytes, zuerst

‚low, dann high

KRITIK III I III

Sendbits LDA TAX LDA TAY BNE TXA BEQ

Sendthem LDA Sendl JSR DEX BNE DEY BPL Exitsend RTS

Rdistnce ;Zwischenraum zwischen 2 oder mehr ‚Bildern pro Zeile

Rdistnce+tl

Sendthem

Exitsend

#+#$00 ‚Zwischenraum wird mit $00 ge-

Print ;fuellt

Sendl

Sendl

KRRRTTTHTHTTHIEEEIIK

Linesp PHA LDA JSR LDA JSR PLA JSR RTS

‚Inhalt des Akkus * 1/216'" Zeilen- #+ESC ‚vorschub Print #13! Print

Print

KRRRRTTTTTTTTTIHTIIIIII EI

CRLF LDA

#CR ‚neue Zeile

TEAC FD535A 40 Track einseitig

TEAC FD55B 40 Track doppelseitig .. TEAC FDS5S5E 80 Track einseitig

TEAC FD55F 80 Track doppelseitig .. TEAC FD55G 8” kompatibel APPLE®-kompatibles Laufwerk

ZUSATZ-KARTEN: V-24-Schnittstelle Z-80-Karte m. Softswitch 80-Zeichen-Karte 16 K-Language-Karte Centronics-Karte von Epson fürGraphik....210,- für Text.... Eprommer incl. Software

Joy Stick Netzteil 5A

Wir haben das Floppy-Gehäuse für Sie ! 19" System 42 TE 3HE (135 x 216 x 300) Komplett vorgefertigt für 2 PLaufwerke 5% Slimline

(Teac) oder 3% (BASF).

- für APPLE

Floppy-Kabel 34pol. für 2 Laufwerke mit Shugart-Bus

Floppy-Controller für Apple-komp. Computer Dieser Controller kann 2 Apple-Laufwerke steuern oder 2 Laufwerke mit Shugart-komp. Bus (auch doppelseitig 40 oder 80 Track), z.B. BASF - TEAC - PHILIPS - SHUGART etc., auch SONY 3%" Laufwerke

aufgebaut und getestet

Bausatz wie oben

Leerplatine wie ob. incl. Prom u. Eprom 98,-

Die Alternative...

Preh Commander Keyboards

(Sonderanfertigung für Apple-kompatible Computer) Auf die Preh-Qualität brauchen auch Sie nicht mehr zu verzichten.

AK 88 -Apple spez.- kompl. mit Gehäuse, An- schlußkabel, deutschem Tastensatz, separat. Zehner-Block sowie Sondertasten f. Rechen- funktionen und häufig