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
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