Text content (OCR)
o& Einzelpreis DM 6,50
ak
g =
MAGAZIN FUR APPLE-COMPUTER
(final
SRE
Ti \ Aa
wir haben die und die
Software... AsagltheGohey
wir haben die
Bucher...
‘Fordern Sie unseren Gratiskatalog an!
ALLES FUR DEN APPLE I, Ils, IE
panday@Ft.. -Ing. Eolen
UHLANDSTR. 195 - D-1000 BERLIN 12
TEL.:(030) 310423 - TELEX:185859
Autorisierter @gappla Fachhandler microsort Distributor
Mit diesem Heft liegt Ihnen die erste Aus-
gabe von ,Peeker" vor, die Uibrigens be-
reits die 45. Zeitschrift der Verlagsgruppe
Dr. Alfred Huthig ist. ,Peeker“ ist - wenn
man von dem nicht allgemein erhaltlichen
Vereinsblatt des deutschen Apple-Clubs
in Oberhausen absieht - das erste
deutschsprachige Magazin, das sich aus-
schlieBlich mit Apple-Computern befaBt.
PEEK ist ein Befehl aus der Programmier-
sprache BASIC, der die Untersuchung ei-
ner Speicherstelle gestattet. ,,Peeken“
muB 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 oberflachliche 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 fir Apple-
Computer erhaltlichen Matrix-Drucker. Die
Handhabung der nicht genormten Steuer-
zeichen von Druckern war stets und ist im-
mer noch ein leidiges Problem fur alle Ap-
ple-Benutzer. Man kénnte sich nunineinem
Aufsatz Uber den Image-Writer auf ober-
flachliches Blabla in der Art ,,Der Image-
Writer hat ein gefalliges beige Design undin
seinem Herzen klopit ein kraftiger Prozes-
sor“ beschranken. Besitzt man jedoch erst
einmal einen Image-Writer, dann stellt
man plotzlich ganz andere Dinge als ein
pochendes Herz oder ein formschénes
Styling fest. So kommt man beispielswei-
se rasch zu der erniichternden Erkenntnis,
daB die mitgelieferte serielle Schnittstelle
keinerlei druckerspezifische ROM-Soft-
ware enthalt und demzufolge viele nuitzli-
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 enthalt eine Fille
nutzlicher Utilities und Programme, Tips
und Tricks, Test- und Erfahrungsberichte
sowie Aufsatzserien fur Anfanger und
Fortgeschrittene. Damit Sie die teilweise
sehr umfangreichen, professionellen Pro-
gramme nicht abtippen mlissen, erscheint
je nach Bedarf etwa alle 2-3 Monate eine
Sammeldiskette, die die gréBeren Pro-
gramme aus den vorangehenden Heften
von ,,Peeker“ zusammenfaBt.
(=
Hithig
PUBLIKATION
Impressum
eeker
9 for den gesamten Inhalt
einschlieBlich der Programme
Dr, Alfred Hathig Verlag,
foidelberg 1984
Verleger und Herausgeber:
Dipl.-Kim, Holger Hathig
Geschafts{thrung Zeitschriften
Heinz Melcher
Chefredakteur:
Ulrich Stiehl (us) Tel. (06221) 4893.52
Anzeigenleltung:
Bernd Beutel, Tel. (06221) 489218
2. Zt, gilt Anzeigenpreisiiste Nr. 1
Vertriebsleitung:
Ruth Biller, Tel. (06221) 489280
Produktionsleitung: Gunter Sokollek
Gestaltung: Rainer Schmitt
Feature
Der neue 65C02-Prozessor 6
65C02-Disassembler flir Apple lle
pee
4
65C02-Feature
ker
51
Turbo-Pascal
Fir alle Pascal-Liebhaber, die auf das
schnellere und komfortablere Turbo-Pas-
cal umsteigen wollen, wird hier eine minu-
tiése Schritt-flir-Schritt-Anleitung zur Sy-
stemkonfigurierung und zur Erstellung |h-
res ersten ,,Turbo“-Programms gebracht.
54
ProDOS-Patches
Mehrere Patch-Programme zeigen, wie
man erstens ProDOS auch bei geander-
tem Monitor-ROM sowie zweitens bei 80-
Spur-Laufwerken zum Laufen bringt.
58
Primzahlen-Preisausschreiben
Wollen Sie 500— DM gewinnen? Dann
beteiligen Sie sich an unserem Prim-
zahlen-Geschwindigkeitswettbewerb!
und II Plus 14 In diesem dreiteiligen Feature ist alles zu-
Accelerator lle = sammengetragen, was Sie schon immer
. Uber den neuen 65C02-Prozessor wissen
Die neue Superkarte 19 wollten. Im ersten Beitrag ,Der neue
Grafik 65C02-Prozessor“ werden die neuen Be-
Resa fehle detailliert geschildert und an Hand
pprieel eee 26 von Beispielprogrammen erlautert. Im
ute Sl apnie . zweiten Aufsatz wird ein ,,65C02-Dis-
Wie man die Grafik verdoppelt assembler fiir Apple Ile und Il Plus“ vor-
Teil 1: Double Lores 32 — gestellt, der auf dem IIc-Disassembler ba-
Hires-Grafik-Dump siert und sogar auf Geraten lauffahig ist,
‘ a die nur Uber den alten 6502-Prozessor
IME Peon sucker a verfiigen. SchlieBlich werden im dritten
Pascal Beitrag sa corer lle — Die neue Super-
5 7 karte“ die Geheimnisse der brandneuen
Lee aa 51 CMOS-Karte mit dem 4MHz-65C02C ent-
huillt. Insbesondere wird gezeigt, wie
ProDOS man sich das Pseudo-ROM fiir modifizier-
_ a te Monitor- und Applesoft-ROMs zunutze
Eoues talch fiir geanderte 7 machen kann:
Patch fur PRODOS.INIT
80 Spuren 56
Hobby Double Lores
Wer ist der schnellste? Double Hires auf dem Apple-lle mit 64K-
Primzahlen-Preisausschreiben 5g Karte ist seit einiger Zeit bekannt. DaB
. nies aber auch doppelte Lores-Grafik mdglich
Hinweise fiir Autoren 62 ist, wird hier erstmals geschildert, Damit
Neue Produkte 63 — eréffnen sich neue Perspektiven fiir Spiel-
Neue Biicher 65 programme, fiir die Hires zu fein und nor-
male Lores zu grob in der Grafikauflésung
ist.
Hires-Grafik-Dump
Diese professionelle Utility gestattet den
Hires-Bildschirmausdruck mit allen nur
denkbaren Features wie horizontaler und
vertikaler Verzerrung, Bildausschnittver-
gréBerung usw.
Verlag: Erscheinungsweise: Zahlungen: an den Or. Alfred Hilthig-Verlag
Dr. Alfred Hithig Verlag GmbH
Im Weiner 10, Postfach 102869
6900 Heidelberg
Telefon (06221) 489-1
‘Telex 4-61727 hued d,
1984 2 Hefte, ab 1985 12 Hette jahrich
Jahresabonnement DM 58, einschileBlich
Mwst, im Iniand portorei.
Einzelheit DM 6,50
Halen: Mailand 47718; Belgien:
‘GmbH, D-6900 Heidelberg 1: Postscheck-
konten: BRD: Karlsruhe 48545-753;
Osterreich: Wien 7555888; Schweiz: Base!
40-24417; Niederlande: Den Haag 1 45726;
VIVID
Bankkonten: Landeszentralbank Heidel-
berg 67207341 ; BLZ 67 200000; Deutsche
Bank Heldelberg 0 2165 041; BLZ
67270003; Bezirkssparkasse Heidelberg
20451, BLZ 67250020,
Briissel 72026; Danemark: Kopenhagen
94969; Norwegen: Oslo 99424;
Schweden: Stockholm 5477 76-5
Hersteliung: Heidelberger Verlagsanstalt
Printed in Germany
VIIIYBEIBBGB ILS A
Der neue
65C02-Prozessor
Ulrich Stiehl
— Der neue 65C02-Prozessor
- 65C02 Disassembler fiir Apple lle
und II Plus
— Accelerator Ile: Die neue Superkarte
Der 65C02 ist eine Erweiterung und
Verbesserung des alten 6502-Prozes-
sors. Wahrend der neue Apple llc den
neuen 65C02 in der 1 MHz-Version be-
reits eingebaut hat, besteht beim Apple
Il Plus und Apple Ile die Méglichkeit,
den alten 6502 durch den neuen 65C02
{indes nur in der 1-MHz-Version) aus-
zuwechseln. Dariiber hinaus kann die
brandneue 65C02C-Karte namens ,,Ac-
celerator Ile“, die mit 4 Megahertz ge-
taktet ist, in den Apple lle oder auch
den Apple II Plus eingesetzt werden,
womit alle Programme bis zu 350%
schneller laufen.
Die nachfolgenden technischen Details
sowie das Diagramm basieren auf Unterla-
gen der Rockwell International GmbH,
FraunhoferstraBe 11, 8033 Miinchen-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 0 Grad bis 70 Grad Celsius).
9449444944444 leavure 4
Alle 65C02-Prozessoren werden als
CMOS-CPUs geliefert, wahrend die alten
6502-Prozessoren NMOS-CPUs waren
(CMOS = Complementary Metal Oxide
Semiconductor). Von Vorteil ist der erheb-
lich geringere Stromverbrauch gegentiber
der NMOS-Technologie. Von Nachteil ist
dagegen die relativ hohe Empfindlichkeit
gegeniiber statischer Elektrizitat. (Bei-
spielsweise sollte man sich bei der Acce-
lerator-Karte erst einmal ,entladen", in-
dem man etwa auf das Netzteil-Metallge-
hause des Apples greift, bevor man die
Karte anfaBt.)
Verbesserungen
Neben den eigentlichen neuen Befehlen
sind folgende technische Verbesserungen
implementiert worden:
a) Ungiiltige Operationscodes
Ungiltige Op-Codes, z.B. $02, werden
jetzt allesamt als NOPs bzw. $EA behan-
delt. Beispiel fiir Apple I! Plus/tle:
CALL -151
0300: 02 4C 59 FF
0300G
—Beim Apple Il Plus bzw. lle mit normalem
6502-Prozessor wiirde der Apple nach
300G hangen".
— Beim Apple llc oder beim Apple Ile mit
Accelerator lle wlirde $02 ignoriert und
dann der nachste Befehl ab $0301 ausge-
fhrt.
Fur das Debuggen von Maschinenpro-
grammen ist die Behandlung von Nicht-
Op-Codes als NOPs indessen eher nach-
teilig, da man hierbei u.U. nie feststelit,
daB das Programm ,,Schrott-Stellen“ ent-
halt.
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 nach-
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) hoit,
Demgegentiber wide sich der alte 6502
irrtumlicherweise 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 Driicken
der Ctrl-Reset-Tasten, schaltet der 65C02
nunmehr automatisch auf Binaérmodus
bzw. Nicht-Dezimalmodus (CLD) um. Da
dies beim alten 6502 nicht der Fall war,
muBte CLD durch die Software-Reset-
Routine bei $FF59: CLD bzw. bei $FA62:
CLD nachgeholt werden.
Bei ADC und SBC im Dezimalmodus sind
die Flags N (Negative), V (Overflow) und Z
(Zero) nunmehr giitig, wobei diese Befeh-
le jedoch dann 1 Takt mehr bendtigen.
Beim alten 6502 waren bei Dezimalopera-
tionen die N-, V- und Z-Flags unbestimmt
bzw. ungiltig.
d) Read-Modify-Write
Die direkten Speicheranderungsbefehle
(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-
fulhrt. Inwieweit dadurch die Softswitches
des Apple Il, z.B. $C030 fiir Lautsprecher,
andersartig beeinflu8t werden, konnte bis-
lang nicht festgestelit werden. Bei den
Softswitches ist es bekanntlich nicht irrele-
vant, ob man auf diese mit LDA oder STA
zugreift. SinngemaBes gilt fur DEC, INC
usw,
Erweiterungen
Neue Befehle
BRA = Op-Code $80 = Branch relative
always
Dieser Befeh! bewirkt eine unbedingte, re-
lative Verzweigung, wahrend die alten be-
dingten Verzweigungsbefehle BCC, BCS
usw. von dem jeweiligen Flag abhangen.
Der BRA-Befehl ist insbesondere fiir relo-
kative Programme sehr niitzlich. 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-
ment A
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
erhoht 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 muBte 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 kir-
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 fiir Zeropage-Adressierung,
sondern fiir Zero = Null = Byte $00. Die
Register A, X und Y bleiben unverandert.
aa
7
‘O
S
=
S
3S
=
Ro)
N
@
=
:
iS)
re
Kapitalist die Welt verandert.
pus
Apple hat den Macintosh erfunden. (i
<< neoisren secrion contnot secTion ——p
| RES ho Wr
10 a} EX
neoeren {| bic
ae
iy
ne wor ess 2
x po ov
rel
a0. k——
res o Ee es
: ere LS =
pel
tel | om
ced i ose
mu
ce a ia ) pee
AponESs ii
Pt oe: = azil Ls
A eI [7] contnon
el i Pa
soe
Pe h Cia Py
res a J
40K (epcesson: cxoce TE gay
he PLwatsed | | || Leeserin foo
Ki input pata ees
eal Carew ou) fe sowne
aud j= at
OATA BUS KI STRUCTION Le
as UU ‘REGISTER
a
LEGEND: ey
(i) acre 23 | oara
2
o |e
| - 1emrune Ps
R 65C02 Interne Architektur
Beim 6502 muB man demgegeniiber 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-Befeh! mit umgekehrten Vorzeichen,
d.h. Undierung mit Einerkomplement des
Bitmusters. Beim alten 6502 wurde man
etwa wie folgt simulieren:
LDA BITMUSTER
AND MEMORY
EOR #%11111111
STA MEMORY
TRB besagt, daB eine Speicherstelle M
durch den Inhalt des Akkumulators A ver-
andert wird, wobei A selbst unverandert
bleibt, und zwar blendet TRB bei M dieje-
nigen Bits weg, die bei A gesetzt sind.
“AN1111114
10
Beispiele:
M 1111 1111 LDA #$00 TRB M, wobei M
A 0000 0000 vorher $FF
M 11111111 M nachher $FF
M1111 1111 LDA +$FF TRB M, wobei M
A11411111 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.01111110 vorher $FF
M 1000 0001 M nachher $81
M 1010 1010 LDA #$FO TRB M, wobei M
A 1111 0000 vorher $AA
M 0000 1010 M nachher $0A
TSB $FFFF = Test and set memory bits
with accumulator (Absolute Adresse) =
Op-Code $0C
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. TSB blendet bei M diejenigen
Bits hinzu, die bei A zuséatzlich gesetzt
sind. Beim alten 6502 wirde 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
M1111 1111 M nachher $FF
M1111 1111 LDA 4$FF TSB M, wobei M
A1111:1111 vorher $FF
M1111 1111 M nachher $FF
M 0000 0000 LDA +$FF TSB M, wobei M
A11111111 vorher $00
M1111 1111 M nachher $FF
M 0000 0000 LDA 4$00 TSB M, wobei M
A 0000 0000 vorher $00
M 0000 0000 M nachher $00
M1111 1111 LDA 4$7E TSB M, wobei M
A 01111110 vorher $FF
M 11111111 Mnachher $FF
M 1010 1010 LDA +$F0 TSB M, wobei M
A 1111 0000 vorher $AA
M 1111 1010 M nachher $FA
Wahrend die Befehle AND und ORA nur
den Inhalt des Akkumulators beeinflussen,
kénnen mit TRB und TSB die Inhalte von
Speicherstellen direkt verandert werden,
wobei der Akkumulator unverandert bieibt.
Die Befehlsfoige 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 befande, sollte bei jedem Buchsta-
ben Bit 7 geléscht werden. Zu diesem
Zweck miBte man beim alten 6502 den
gesamten Bereich mit der Befehlsfolge
LOOP LDA M
AND #%01111111
STAM
..jetzt M inkrementieren und erneut zu
Loop...
» bearbeiten“. Hingegen wiirde man beim
neuen 65C02 mit der Schleife
LDA + % 10000000
LOOP TRB M
.. jetzt M inkrementieren und erneut zu
Loop...
zu einer erheblich kiirzeren Ausfiihrungs-
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 bestiickt, der diese
Befehle nicht kennt. Dasselbe gilt fiir den
im Apple IIc befindlichen 65C02. Auch der
Apple-lic-Disassembler verwendet die
neuen Op-Codes nicht. Es wird empfoh-
len, auf die Benutzung dieser OP-Codes
zu verzichten, um Kompatibilitat mit allen
65C02-Varianten zu gewahrleisten.
Neue Adressierungsarten
Indirekte nicht-indizierte Adressierung
Anstelle der haufig benutzten Adressie-
rungsform
LDA (INDIREKT), Y
usw., die bislang nur mit Hilfe des Y-Regi-
sters implementiert werden konnte, be-
steht nunmehr die zusatzliche Méglichkeit,
auf Y véllig zu verzichten. Im einzelnen gilt
dies fur 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
a
Dies ist eine nutzliche Erweiterung, da
man nunmehr bei Array-Manipulationen
nicht mehr permanent das Y-Register ret-
ten bzw. fir die indizierte Adressierungs-
form freinalten muB.
BIT-Adressierung
Der BIT-Befehi 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 fir alle an-
deren BIT-Adressierungsarten zutrifft.
Indizierter, indirekter JMP.
JMP ($1000,X) - Op-Code $7C - ist eine
wertvolle Erweiterung des _ indirekten
Sprungs fur den Fall, daB eine Sprung-
adresse einer Tabelie entnommen werden
soll. Nehmen wir an, ab Speicherstelle
$1000 steht folgende fingierte Sprungta-
belle:
1000: 00 20 $2000 0. Sprung
1002: 00 30 $3000 1. Sprung
1004: 00 40 $4000 2. Sprung usw.
Nehmen wir fernerhin an, der zweite
Sprung sei auszufiihren. Dann verfahren
wir wie folgt:
LDA #2 ;2. Sprung
ASL j2* 2 = 4 = $1004
TAX
JMP ($1000,X) ;entspricht JMP $3000
D.h. $1000 + X = $1004 enthalt das Low
Byte und $1004 + 1 = $1005 enthalt 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
Ubrigens folgende Hexzahlen und ASCII-
Zeichen an:
030201
01
BCA
OA AF
949444 feature gg
Zur Assemblierung wurde der zu den von
Firma Apple herausgegebenen_,,ProDOS
Assembler Tools“ gehdrige 6502-Assem-
bler verwendet, der ebenso wie der ,,Bug-
byter Debugger“ die neuen Befehle verar-
beitet. Der Assembler-Quellcode mu8 zu
diesem Zweck mit dem Pseudo-Op-Code
»X6502" eingeleitet werden.
Zusaizlich 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.
SchluBbemerkung
a) Da der Apple I! Plus und der Apple Ile
im Gegensatz zum Apple Ilc ,von Hause
aus" den 65C02 nicht enthalten, sollte
man in kommerziellen Programmen, die
flr alle Geratetypen gedacht sind, auf die
neuen Op-Codes verzichten
b) Bei eigenen Programmen lohnt es sich
u.U., den alten Apple II Plus bzw. Apple Ile
mit dem neuen 65C02 zu bestiicken und
die neuen Op-Codes zu verwenden, da
Programme dann etwas kompakter und
zugleich etwas schneller werden. Der Vor-
teil ist jedoch nur in Spezialfallen tiberzeu-
gend. Grundsaitzlich kann man auch ohne
die neuen Op-Codes auskommen.
c) Wichtiger scheint mit der Umstand, da8
der 65C02 weniger Warme entwickelt.
Wer sich z.B. noch an die ,,briitende Hit-
ze" der alten Videx-Karte im Appie !I Plus
zurlickerinnern kann, der wird von der
»wohligen Kihle“ der Accelerator-lle-Kar-
te im Apple lle angenehm tberrascht sein.
Ventilatoren werden dann tiberflissig.
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-
MHz-65C02 und der Verwendung der
neuen Op-Codes laufen entsprechende
Programme bis zu 400% schneller als vor-
her, womit ein 65C02C durchaus an die
Leistungsfahigkeit von 16-Bit-Prozesso-
ren heranreichen kann. Deshaib ist es be-
dauerlich und unverstandlich, weshalb die
Firma Apple den Apple Ile und Apple llc
nicht mit den schnelleren Prozessor-Va-
rianten besttickt hat.
BIIIFIFIIFAFFIFIIFIVA
03001 ORG $300 0370:92 CE 89 STA (IND)
2 os72: 90 *
3 * 65COZC-Demo ciniger neuer Op-Codes 0372:12 CE 91 oRA (IND)
46 0374:52 CE 92 EOR (IND)
B® 0376:32 CE 93 AND (IND)
0300 6 X6502 ;65C02C-Pseudo-Op 0378 o4
oes 0378:72 CE 95 apc = (IND)
O00CE 8 IND QU SCE OSTA: F2 CE 96 SBC (IND)
FDED 9 coUT QU $FDED + PRINT O37C; 7s
FDDA 10 PRBYTE EQU SFDDA :HEXOUT 0370:D2 CE 98 cup (IND)
ae O37B: 99%
Be 0378 100 # Neue BIT-Adressierungsarten
13 * Unbedingte, relative Verzweigung 0376 101 »
Me 0376:89 AO 102 BIT #$A0
ol 0303 «16 BRA STETS iVerzeigung erfolgt stets 0380:34 AO 103 BIT $A0,X
16 BRK BRK wird Gbersprungen! 130 00 AO 104 BIT §A000,X
We 5 105 +
18 * Push/Pull X/Y on/from Stack TAA 106 BYTE] DFB 10101010
+ 2A 107 BYTE2 © DFB_ ‘10101010
ol 20 STETS Lox = #1
02 21 Loy #2 assembler-Listing zu
03 22 LDA 43 i 46
23 PAX ;Push X auf Stack »65C02-Demo einiger neuer Op-Codes'
24 PHY ;Push,Y auf Stack 0300-80 01 BRA $0303
25 PHA 0302-00 BRK
26 PLA 0303— AZ «01 LDX = #$01
DA FD ar JSR PRBYTE 0305-0 02 Loy #802
28 PLY ;Pull Y vom Stack 0307- AD 03 LDA #803
29 TVA 0309- DA PAK
DA FD 30 JSR PRBYTE O30A- 5A PHY
31 PLX 111 X vom Stack 030B- 48 PHA
32 XA o30c- 68 PLA
DA FD 33 JSR PRBYTE 030D- 20 DA FD JSR SFDDA
34% 0310-7A PLY
8D 35 LDA #$8D ;Return: O3ll- 98 TYA
ED FD 36 JSR COUT 0312-20 DAFD JSR $FDDA
37 * 0315- FA PLE
38 + $1000. $10FF, $00FE und $00FF auf 1 setzen 0316- 8A TxA
39+ 0317- 20 DAFD JSR
o1 40 LDA #1 031A- A9 8D LDA
FF 41 ‘LOX = #$FF O31c- 20 ED FD JSR
00 10 42 STA $1000 O31F- 9 01 LDA
00 10 43 STA $1000,X O321- a2 FF Dx
FE 44 STA $O0FE 0323— 8D 00 10 STA
00 45 STA $0000,X 0326- 9D 00 10 STA
46 * 0329-85 FE STA
47 * $1000, $10FF, $00FE und $00FF auf 0 setzen 032B- 95 00 STA
48 *# STZ = Store Zero entspricht LDA #$00 STA Adresse 032D- 9C 00 10 STZ
49 * A-Register bleibt jedoch unverdnder' 0330-96 0010 STZ
50 * 0333-64 FE STZ
00 10 51 STZ $1000 0335- 74 00 STZ
00 10 52 STZ $1000,X 0337- 20 DA FD JSR
FE 53 STZ §00FE O3sA- A9 8D LDA
00 54 STZ $0000,X 033C- 20 ED FD JSR
DA FD 55 ‘JSR PRBYTE iA noch 1! O33F- A C2 LDA
8D 56 LDA #$8D :Return 0341- 20 ED FD JSR
ED FD 87 JSR COUT 0344- 1A Inc
5B + 0345-20 ED FD JSR
59 * INC A (= INA) und DEC A (= DEA) 0348- 3A DEC
60 * Increment/Deorement von A-Register 0349- 3A DEC
bls 034A- 20 ED FD JSR = $FDED
C2 62 LDA -#'B'+$80 034D- AS 8D LDA #$8D
ED FD 63 JSR COUT Bt 034F- 20 ED FD JSR $FDED
64 Inc A jARAtL 0352- AQ FO LDA SFO
ED FD 65 JSR = COUT act 0354~ 1C 85 03 TRB = $0385
66 DEC A pA=A-1 oss7— AG -OF LDA #80F
67 DEC A F 1 0359- OC 86 03 TSB $0386
ED FD 68 JSR COUT 035C- AD 85 03 LDA = $0385
8 69 LDA #880 ;Return O35F- 20 DAFD JSR SFDDA
ED FD 70 JSR COUT 0362- AS AO LDA = #$A0
le 0364-20 ED FD JSR = $FDED
‘72 * Test Memory Bits with Accumulator 0367—- AD 86 03 LDA = $0386
Bs 036A- 20 DA FD JSR = $FDDA
FO 4 LDA = #%11110000 036D- 60 RTS
85 03 ea ‘TRB BYTEL ;Reset Bits O36E- B2 CE LDA = ($CE)
OF 6 LDA = #400001111 0370-92 CE STA ($CE)
86 03 7 TSB BYTE2 ;Set Bits 0372- 12 CE ORA = ($CE)
85 03 78 LDA BYTE] 0374-52 CE EOR ($CE)
DA FD 2 ‘JSR PRBYTE 0376- 32 CE AND = ($CE)
AO 80 LDA #8A0 0378- 72 CE ADC ($CE)
ED FD 81 JSR COUT O37A- *F2 CE SBC ($CE)
86 03 82 LDA BYTE2 o37C- D2 CE CMP = ($CB)
DA FD 83 JSR PRBYTE O37E- 89 AO BIT #$A0
84 RTS: iEnde Demo 0380-34 AO BIT $A0,X
85 + 0382- 3C 00 AO BIT $a000.x
86 * Indirekt Adressierung ohne ¥ o385- AA TAX
O36E: BT # 0386- AA TAX
036E:B2 CE 88 LpA (IND)
Hui thhiig -FACHBUCH-TIP
Apple Assembler
Tips und Tricks
von Utrich Stieh!
1984, 226 S., 3 Abb., kart.,
DM 34,-
ISBN 3-7785-1047-9
Hilthig Verlag, Heidelberg
»Apple Assembler“ wendet sich
an alle, die bereits Anfangerkennt-
nisse der 6502-Programmierung
haben — z.B. aufgrund des Buches
»Apple Maschinensprache“ — und
nunmehr ein Nachschlagewerk fiir
ihren Apple II Plus/Ile/ilc suchen,
in dem alle wichtigen ROM-Routi-
nen sowie eine Vielzah! sonstiger
Hilfsprogramme in einer systemati-
schen Form zusammengestellt
werden, Insgesamt umfaBt dieses
Buch Uber 40 Utilities, darunter
mehrere villig neuartige Program-
me wie Double-Lores, Double Hi-
res, Screen-Format u.a.
Der erste Teil enthailt ein Repetito-
rium der wichtigsten Befehle,
Adressierungsarten und sonstigen
Besonderheiten des 6502.
Appie
Assembier
Mit ausfiihrlichen
Programmbeispielen
Ulrich Stieht
Im zweiten Teil werden alle Adres-
sen des Monitors zusammenge-
stellt, die fir Assembler-Program-
mierer von Nutzen sein kénnen.
Dartiber hinaus findet der Leser Un-
terroutinen fur hexadezimale Ad-
dition/Subtraktion/Multiplikation/
Division, — Binar-Hex-ASCII-Um-
wandlung usw.
Der dritte Teil befaBt sich mit der
Speicherverwaltung der Language
Card und der lle-64K-Karte und
enthalt Move-Programme zum
Verschieben von Daten in die und
aus der Language Card sowie der
64K-Karte.
Der vierte Teil ist dem Applesoit-
ROM gewidmet und listet eine
groBe Anzahl niitzlicher Interpre-
ter-Adressen. Bei den Utility-Pro-
grammen liegt das Schwergewicht
auf FlieBkommamathematik ein-
schileBlich Print Using.
Der letzte Teil behandelt den Text-
und Graphikspeicher. Neben ei-
nem professionelien 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
13
65C02-Disassembler
Dieser hier vorgestellte 65C02-Disas-
sembler basiert auf dem im Jahre 1977
von Steve Wozniak geschriebenen
6502-Disassembler, der spater fur den
Apple llc gepatcht und von uns nun-
mehr fiir 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-Modelien
eingesetzt werden, die nicht mit dem
65C02-Prozessor bestiickt sind.
fiir Apple lle und II Plus
Wenn man sich in seinen Apple Ile oder
Apple | Plus einen 65C02-Prozessor ein-
gebaut hat oder wenn man eine Accelera-
tor-lle-Karte benutzt, wird einem erst rich-
tig bewuBt, 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 llc enthalt zwar in dem umgeschrie-
benen Monitor-ROM einen fiir den 65C02
gepatchten Disassembler, aber dieser laBt
sich nicht ohne weiteres in die Language
Card des Apple lle oder II Plus kopieren,
da er teilweise Routinen Uberschreiben
wiirde, die dringend bendtigt werden, z.B.
bei $FAB8 die PWRUP-Routine (Power-
Up, Disk-Booten). Grundsatzlich gilt: Der
ROM-Bereich $D000-$FFFF (Applesoft-
Interpreter und Monitor) des Apple II und II
Plus la6t sich in die Language Card des
Apple lle kopieren, Dagegen laBt sich we-
der der ROM-Bereich des Apple Ile noch
der des llc in die LC des Apple I! oder II
Plus schieben. Ferner kann auch der
ROM-Bereich des Apple Ile nicht in die LC
des Apple llc verlegt werden und umge-
kehrt. Die Griinde hierflir liegen in dem
INTCXROM-Bereich $C100-$CFFF, der
beim Apple II Plus fehit und beim Apple lle
und IIc vollig unterschiedliche Einsprung-
adressen hat.
Deshalb habe ich den im Apple IIc enthal-
tenen 65C02-Disassembler dergestalt
modifiziert, daB er uneingeschrankt auf
dem Apple Ile und II Plus lauffahig ist.
Allerdings mu8ten aus Platzgriinden die
Lores-Grafik-Routinen teils Uberschrieben
werden, die deshalb nicht benutzt werden
dirfen, wahrend der modifizierte Monitor
in der Language Card aktiv ist. Notfalls
mu8 man den Bereich $F82A-$F878 aus
dem Lores-Bereich heraus in einen ande-
ren Bereich verlegen.
Es wurde darauf geachtet, da8 der Disas-
sembler die neuen Op-Codes selbst nicht
benutzt, so daB man damit sogar 65C02-
Maschinenprogramme _ disassemblieren
kann, wenn man nicht tiber einen 65C02-
Prozessor verfiigt.
Das
»65C02-DISASSEM-
BLER‘" gliedert sich in folgende Teile:
Programm
$6000-$604D enthalt eine Move-Routine,
die den eigentlichen Disassembier, der
zunachst im Speicher ab $604E liegt, in
die Language Card verschiebt.
$F82A-$F878 enthalt eine Erweiterung
des alten 6502-Disassemblers. Aus Platz-
griinden muBte die Program-Counter-Ad-
just-Routine nach $F86A verschoben wer-
den, doch steht an der urspriinglichen
Stelle von PCADJ = $F953 ein Sprung
nach $F86A, so daB die Kompatibilitat mit
den anderen Monitor-Routinen gewahrt
bleibt.
$F879-$FA3F enthalt den Hauptteil des
Apple {Ic-Disassemblers mit einigen Pat-
ches flr den Apple Ile und II Plus. Man
beachte, daB es zwei Mnenomics-Tabel-
len gibt, und zwar zum einen die erwelter-
te alte Mnenomics-Tabelle ab $F9F9 so-
wie zum anderen eine neue Mnemonics-
Tabelle ab $F853. Der 65C02-Disassem-
bler beriicksichtigt alle Mnemonics, die in
den Programmzeilen 514-585 gelistet
sind. Dazu gehéren nicht die Befehle BBR,
BBS, RMB und SMB, iber die der Rock-
well R65C02 zusatzlich verfiigt; diese
werden als ,,7??" gelistet.
Fur diejenigen, die den Disassembler -
z.B, wegen der nicht berticksichtigen Op-
Codes - andern 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 Mihe eingeben kénnte,
ist auBerdem noch ein ,,normaler® Hex-
dump hinzugefiigt.
us
14
9444444944444 leanne
6000
6003:
6006:
6008:
600A
6o0c:
600R:
6010
6012:
6013:
6015,
6017:
6021:
6047:
604A:
604D:
SSSSSERSRBSE
aD
60
00
Fo
FD
Fe
FD
FS
83 co
83 co
ORG $6000
*
‘# 65C02-DISASSEMBLER
*
seeeeanenenenenens,
* *
© Move-Routine *
* *
ees
+ APSOFT = Interpreter + Monitor
. ‘$D000-SFFFF
* REST = Sonstiger Monitor
. ‘SFA40~SFFFF
*
APSOFT QU $0000
REST EQU $FA4O
INDL —-EQU. SFC
IND2 -EQU SFE
*
* Language Card schreibfahig
¢ machen: Read ROM, Write LC
j-SD
i-SFF
MOVE. LDA $coB1
LDA $c081
:ROROM
WRRAM
.
* ROM ab $D000-$FFFF in LC
* kopieren: Applesoft + F8-ROM
Lby 40
STY INDL
LDA #>APSOFT
STA IND1+1
Movs2 LDA (IND1),¥
STA (IND1),¥
INY
BNE MOVE2
INC IND1+1
BN MOVE2
sLOADROM
;STORELC
i-SFFFF
.
* $82A-SFASF mit neuen
* Disassenbler iiberschreiben
= INDI: $604E
*
LDA +<MOVES+L
STA INDL
LDA #>MOVES
STA INDI+1
*
© IND2: $Fe2A
.
LDA #<NSUL
STA IND2
LDA #>NEUL
STA IND2+1.
Loy 40
MOVES LDA (IND1),¥
STA (IND2),¥
INC IND]
BNE MOVES
INC INDI+1
Move4 INC IND2
BNE MOVES
INC IND2+1
MOVES LDA IND241
CMP $>REST
BCC MOVES
LDA IND2
CMP $<REST
BCC MOVES
3 <$FA00
:<$FA40
L¢ lese- UND schreibranig
machen: Bank 2 R/W enable
eee
LDA $coBs
LDA $coas
MOVES == RTS.
*
jRDLC
iHRLC
sExit
Apple IIc Disassembler +
fur 65C02-Processor, »
umgeschrieben far IIe, «
II Plus von U.Stieh?
peeeeeeee teeny
Verwendbar auf Apple II Plus
mit Language Card sowie auf
Apple Ile. 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 Uber-
schrieben und dirfen nicht
aufgerufen werden!
ee ee es
a
.
+ Externe Routinen
+
PRYX2 —-EQU $FD96
PRBYTE EQU $FDDA
cour = EQU. SFDED
———
*
+ Disassembler-Beginn: $F82A
ORG $F8ZA
NEUL = TYA
Lox #816
NEU2 CMP NEUTABL,X
BEQ NEUS
DEX
BPL NEU2
RTS
*
NEUS LDA NEUTAB2,X
LDY #$00
RIS
.
NEUTABL HEX 12 2800
HEX 14
HEX 1A
HEX 1¢
HEX 32
HEX 34
HEX 3A
HEX 3C
HEX 52
HEX 5A
HEX 64
HEX 72
HEX 74
HEX 7A
HEX 70
HEX 89
HEX 92 #10
HEX 90
HEX 9E
HEX B2
HEX D2
HEX F2
HEX FC
*
NEUTAB2 HEX 38 :0RA
HEX 43 FIRB
HEX 37 HINC
HEX 43 :TRB
HEX 39 AND
HEX 21 :BIT
HEX 36 sDEC
HEX 21 :BIT
15
F8sB:
Fasc:
F85E:
SSF:
F860:
F861:
Fe62:
FE63:
F864:
F865:
F866:
F867:
B69:
BA
40
42
3B
42
al
22
21
3c
42
42
3D
3E
3F
44
2 38
2 Ad
2 AR
: 10
2 65
: 90
208
60
2F
3B
3A
on
33
Fo
170
171
172
173
14
115
176
178
179
181
182
183
184
185
215
216
217
218
219
220
p21
222
223
225
226
227
228
229
230
231
282
233
235
236
237
239
240
Bal
242
243
245
247
248
249
281
252
253
255
256
257
PC-Adjust aus Platzgriinden
Urspringlich ab $F953,
*
*
* an diese Stelle verschoben.
.
*
wo jetzt ein JMP steht.
+
PCADJ SEC
PCADJ2 LDA
PCADJS LDY
TAX
BPL
DEY
PCADJ4 ADC
BoC
INY
RTS2 RTS.
5 $F953
‘$2F
$3B
PCADJ4
$3
RTS2
Apple IIo ROM-Kopie ab SF879
mit diversen Patches, da sich
die Opcodes TRB, PHY, PLY usw.
im TIo-ROM bei $FABE-SFABC
wo beim Apple II Plus und
Ile unentbehrliche Monitor—
Routinen stehen.
ScRN2 BCC
RTMSKZ AND
R
INSDS1 LOX
INSDSIA LSR
EVEN LDY
GeTFMT TAX
MNNDXL —LSR
MNNDX2 —_LSR
*
*
*
*
*
* und $FAF8-$FAFC befinden,
*
*
*
.
RTWSKZ
+$0F
$3a
$38
PRYK2
PRELNK
($34,X)
INSDS1A
IEVEN
#887
FTL, X
SORN2
GETFMT
¥SFC s$PBAL!
#500
NEUL A
#88F
#803
4984
MNNDXS
MNNDXS
#820
F8C5
Face
BCS
FaCo:
FBCA
Face:
F8CD:
88
Do
cs
88
Do
60
20
48
Bl
20
A2
20
c4
8
90
Az
co
: 90
2 68
Ag.
BO
85
BO
85
a9
40
06
26
2k
F953:
F956:
F997:
F958
F959:
88
Do
or
22
FF
33
FF
82
3A
DA
o1
4a
oF
FL
03
04
Fe
B4
FO
2D
00
05
2D
2c
Fe
ED
6A
FF
Fa
Fo
FD
Fo
FD
FO
FD
FD
FD
FB
258
259
260
261
262
263
264
265
266
268
269
270
2am
273
274
275
276
277
278
279
280
281
282
283
284
285
287
288
289
290
291
292
293
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343,
344
345
MNNDXS
RTSNEU
*
DEY
BNE
INY
DEY
BNE
RTS
HEX
unwox2
MNNDXL
jnew
FRFFFF ;Faller
*
* Wird von $FE64 angesprungen
.
INSTDSP
PRNTOP
PRNTBL
PRMNL
PRNM2
PRADRL
PRADR2
PRADRS
PRADR4
PRADRS
RELADR
PRNTYX
PRBLNK
PRBL2
JSR
PHA
LDA
JSR
Lox
JSR
Py
INY
BCC
Lox
oPY
Bcc
PLA
TAY
JSR
LDA
cMP
LDA
BCC
JSR
TAK
INX
BNE
INy
TYA
JSR
TxA
MP
LDx
LDA
JSR
DEX
BNE
RIS
INSDS1 sextern
($3A).¥
PRBYTE
#801
PRBL2
Ser
PRNTOP
#803
#804
PRNTBL
MNEML, ¥
$2¢
MNEMR,Y
$2D
#800
#805,
$2p
$20
PRNM2
+8BF
cour
PRMNL
PRBLNK
$2F
#806
#803
PRADRS
$28
PRADRS
CHAR2, x
cour
CHARL, X
PRADRS
cour
PRADR1
PRADR2
PRBYTE
S2E
$$E8
{$3A),¥
PRADR4
PCADJS
PRNTYX
PRBYTE
PRBYTE
#803
#540
cour
PRBL2
.
* Aus Platzgriinden JMP nach
* Program Counter Adjust
+ Wird von $FB67 angesprungen.
*
Pe
CADJJMP. IMP
*
FMTL
PCADS sextern
HEX OF jnew
HEX 22
HEX FF
HEX 33
ure
CHARL
CHAR
pneu
FOB2: AB
POBS: Ad
FOB4:
FOBS
FOB6
F9B7
F9B8
FOB9
FOBA: 1B
FOBB: Al
FOBC
FOBD
FOBE
FOBF:
F9co: 9D
F9C1: 8B
F9C2: 1D
F903: Al
F9ca: 1¢
F9C5: 29
F9C6: 19
F9CT: AE
F9CB: 69
F9c9: As
Foca: 19
FOB; 23
Face: 24
F9cD: 53
FOCE: 1B
FOOF: 23
F9D0: 24
F9D1: 53
Fop2: 19
FOD3: Al
F9p4: AD
F9D5: 1A
F9D6: 5B
FOD7: 5B
FODB: A5
F9D9: 69
FODA: 24
FODB: 24
FODC: AE
F9DD: AE
FODE: AB
FODF: AD
FOEO: 29
FOEL: 8A
FOE2: 76
FOES: 8B
FOE4: 15
FOES: 9C
FOES: 6D
FOES: AD
FOES: 69
FOEA: 29
FOEB: 53
FOEC: 84
FOED: 13
FORE: 34
FOEF: 11
FOFO: AB
FOF1: 69
FOF2: 23
FOFS: AO
FORA: 8A
FOFS: 8B
FOF: AS
FOFT: AC
FOF8: 00
FOFO: D8
FOFA: 62
FOFB: 5A
FOFC: 48
FORD: 26
FOFE: 62
FOFF: 94
434
435
436
437
438
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
468
469
470
47.
472
473
474
475
476
aqT
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
Est
HEX
HEX
HEX
HEX
HEX
a8
a4
3$10
2820
514
515
516
517
518
519
520
Ein Bildschirm- F
Maskengenerator
fir DOS 3.3
und ProDOS
von U. Stiehl
1984, Diskette und Manual, DM 98,—
ISBN 3-7785-1021-5 say co BA 65C02-Disassembler
. . ces ier aa $6000: AD 81 CO AD 81 CO AO 00
Der fiir den Apple II bestimmte Mas- 524 HEX cB $6008: 84 FC A9 DO 85 FD Bl FC
kengenerator ,,Input 2.0" basiert auf 525 HEX 54 $0010; 88, Fe C800 Fa as FD DO
5 ne aS $6018: F5 A9 4E 85 FC AS 60 85
den friheren Programmen_ Input ae fey) aa $6020: FD AQ 2A 85 FE AQ F8 85
1.0" und ,,Input 80 1.0" (von denen 528 HEX ES pee fee Coe eee ee
noch Restbestande lieferbar sind) See Her 34 $5058 Oe Be FF AB FF CO FA 90
F 530 HEX 04
und ist sowohl unter DOS 3.3 wie 531 ime Bd $6040: EA AS FE C9 40 90 B4 AD
auch unter dem neuen ProDOS lauf- 532 HEX 08 Solas) Fe C0/AD 5 G0.60 a8 Ae
ora : 533 HEX 84 $6050: 16 DD 3C F8 FO 04 CA lo
fahig. Der Maskengenerator setzt ei- 54 i a $6058: F8 60 BD 53 F8 AO 00 60
nen Apple II Plus mit Language Card 535 HEX Ba eee ay CER
oder einen Apple Ile voraus. Im 40 Z/ 536 HEX 28 pie a = He o ie = i z
Z-Modus funktioniert er auf beiden nea eo $6078: 43 37 43 39 21 36 21 3A
Geratetypen, im 80 Z/Z-Modus dage- 539 HEX F4 es Ono a PS
gen nur auf dem Apple lle mit 80- a = a $5090, oe a 3B aA 10 OL = &
Zeichen-Karte. (Die alte Videx-Karte 542 HEX 72 $6098: SA 90 01 CB 60 90 04 4A
fir den Apple | wird nicht unter- 343 HEX F2 S080: 4k 4A 4h 20 OE 60 AG a
Lf cy tex $60A8: A4 3B 20 96 FD 20 48 FO
stiitzt!) 545 er BA $60B0: Al 3A AB 4A 90 05 6A BO
Input 2.0“ liegt wahlweise in der 546 HEX 06 be oy Aedes
Bank 1 oder Bank 2 der Language ey fer ta $6008: 00 AA BD 9A F9 85 25 29
Card und wird durch einen kurzen 549 HEX 42 2000+ 05) 85 2820 28'S: R018)
Drivetina cae = oe $60D8: 29 SF AA 98 AO 03 EO BA
river inden unteren 48K aufgerufen. Sei Ee Td $60E0: FO OB 4A 90 08 4A 4A 09
»Input 2.0" laBt sich problemlos in 552 HEX 74 S6OE8: 20 88 DO FA C8 88 DO F2
nicht-compilierte und compilierte 553 HEX 72 oe BL a Es mi FA ig a 5
Applesoft- sowie in Assemblerpro- ee ee At $6100: 4A F9 C4 2F CB 90 Fl AZ
aie meer 565 HEX 68
gramme einbinden, Die Ubergabe der 556 HEX B2 oo pace en be be pene ce
Feldinhalte an das Anwenderpro- Be Hey = $6118: 2D A9 00 AO 05 06 2D 26
ramm erfolgt durch ein einfaches $6120: 2¢ 2A 8B DO FB 69 BF 20
4 5 ed jer 2 $6128: ED FD CA DO EC 20 4
Verfahren, das auch bei Compilern 560 HEX 22 i OBE, 2038 Fy
funktioniert. 561 HEX 72 $6130; A4 2F A2 06 EO 03 FO 1C
: 2E 90 OE BD AD F9 20
a . . 862 HEX 1A
Fur jedes Feld der Bildschirmmaske 565 HEX 1A s a o e - .
lassen sich u. a. definieren: Feldlange ee se 20 DA FD A5 26 C9 EB
(bis zu 255 Zeichen) — Vtab — Htab — 566 HEX 72 2 » Bt 60a aA
Datentyp (insgesamt 8 Typen) — oer HEX, 72 4C DA FD z 7 ra 1
Scroliflag (stare oder dynamische tes ier se 5D FD CA Do FB 60 4
Maske) — Ctriflag — Filllflag — Lésch- 870 HEX C4 ince seas ee ee
flag — Bildschirmflag (40- oder 80 Zei- He es $6188: FF 77 OF 20 FF 33 CB 60
chendarstellung). Innerhalb eines 573 HEX 48 gereoe He TOF oe Paco cee
Eingabefeldes besteht jeder denkba- 574 HEX 44 CBee EE Se oe Ae.
fe hs ie a $610: FF 73 11 22 FF 33 CB AG
te Redigierkomfort (insert, Delete, Te ex ae $61A8: FF 87 01 22 FF 33 CB 60
Rubout, Restore usw.). 877 HEX 8 be OR are a
Bei der neuen Version des Masken- pee $61C0: 81 82 59 4D 91 92 86 4A
n 0 579 % Erginzung der Tabelle
generators kénnen jeizt auch Ctrl- 580 @ ee oe as tee te ae
Zeichen beim Datentyp String einge- ees per en Bes $61D8: 1 8A 1C 23 5D 8B 1B Al
geben werden. Ferner sind — das gilt FASB: 76 583 HEX 76 1812 S616): 90 BA 10,28 90.08 1D AL
nur fur lie — die Apfeltasten als ASC: 0 364 HEX 06 vB etpo: 24 os lp os 24 oe 19 Al
schnelle Cursortasten —_definiert. ea = iat $61FB: AD 1A SB 6B AS 69 24 24
SchlieBlich d Feat ‘ i pees $6200: AE AE A8 AD 29 8A 7C 8B
chlieBlich wurden Features imple- S87 + Fuller bis SPASF testa: 18 Oe ica sae
mentiert, die den Einsatz von ,Input ae soo ne $6210: 84 13 34 11 AS 69 23 A0
2.0" als zeilenorientiertes Textverar- PASF: BA 590 ENDE NOP SSPASF pee : 2 Re
4 : ‘A y 4 88 54 44 CB
beltungsprogramm erméglichen. Die $6228: 54 68 44 EB 94 C4 Bd 08
Input 2.0“-Diskette enthalt zahlrei- ind assenbiy== $6230: 84 74 B4 28 GE 74 F4 CC
che Demos zur Veranschaulichung pts = 2 sy _ * oe ae
der Anwendung. Gee $6248: 52 B2 72 22 72 1A 1A 26
E a is $6250; 26 72 72 88 CB C4 CA 26
Gerdtevoraussetzung: Apple lle oder Errors: 0 ees ea dd bb Ge va sae
llc; ferner Apple Il+ im 40-Zeichen- $6260: C6 00 EA EA 00 00 00 00
modus
Hiithig Software Service,
Postfach 10 28 69,
D-6900 Heidelberg
18
4 feature As
Accelerator Ile
Die neue Superkarte
Die neue Accelerator lle der Firma Titan
(die friiher 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 flr den Apple lle
bzw. II Plus konzipiert wurde. Einerseits ist
deren Benutzung flr 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 daB sich vielfaltige 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 (geschiitzten)
Programmen beigefligt worden, aus der
ersichtlich war, welches Programm welche
Konfiguration erforderte. Auch diese Be-
schrankung ist bei der neuen Accelerator
lle insoweit entfallen, als erstens eine Pre-
boot-Diskette normalerweise iberfliissig
ist und zweitens grundsatzlich alle Pro-
gramme lauffahig sind, auch die ,ge-
schitzten“.
Die Karte verfiigt Uber 8 Schalter und 7
Briicken. Die Schalter 1-7 sind den Slots
1-7 zugeordnet. Bei den Schaltern bedeu-
Accelerator II
1. Hardware und Installation
Die Accelerator lle, die ich fiir den stolzen
Preis von $ 623.00 bzw. umgerechnet DM
1805,00 erwarb, dient zunachst nur einem
einzigen Zweck, namlich alle Programme
bis zu ca. 3,5mal schneller zu machen. Die
sorgfaltig verarbeitete, sehr kompakte Kar-
te ist u.a. mit einer 4 MHz NCR-65C02C-
CPU (CMOS-Technologie) sowie mit 80K
RAM (dynamisch, 150 ns) bestiickt. Im
Gegensatz zur alten Accelerator II kann
die neue Accelerator Ile in jeden beliebi-
gen Slot gesteckt werden, (Beim Apple II
Plus wird jedoch wegen der Language
Card Slot 0 empfohlen.) Die alte Accelera-
tor I muBte sich links von einer ggf. vor-
handenen Z80-Karte befinden. Diese Be-
schrankung gilt fiir die Accelerator Ile nicht
mehr. Ferner gab es bei der Accelerator II
tet ON = 4 MHz und OFF = 1 MHz. Bei
Zeitkritischen Interface-Karten (Disk-Con-
troller, Modem usw., nicht dagegen z.B.
Druckerkarten usw.) muB der entspre-
chende Slot-Schalter auf OFF (nach un-
ten) gestellt werden. Dies gilt nicht fiir die
80-Zeichenkarte bzw. 64K-Karte des Ap-
ple lle. Mit dem Schalter Nr. 8 kann man
die Accelerator lle insgesamt permanent
auf 1 MHz herunterschalten (Dies ent-
spricht dem Softswitch C086:1).
Die Briicken kontrollieren ggf. vorhandene
RAN-Karten. Wenn sich in irgendeinem
Slot eine RAM-Karte (128K-RAM-Karte
usw.) befinden sollte, mu8 die entspre-
chende Slot-Briicke (ein kleiner Plastik-
Aufsatz) abgezogen werden. Dies gilt wie-
derum nicht fir die tle-64K-RAM-Karte in
Slot 3.
Da die CMOS-Teile der Karte sehr emp-
findlich gegen Elektrostatik sind, empfiehit
es sich, die Karte in eine Alu-Folie einzu-
wickeln, falls sie versandt werden soll. Be-
vor man die Karte anfaBt, z.B. wenn man
sie in einen Slot steckt oder einen Schalter
umlegt, sollte man die Hande an einem
Metallstiick ,,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 ($D000-$FFFF)
werden desaktiviert. Wie bereits erwahnt,
umfaBt 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 $D000-$FFFF in das Pseudo-
ROM der Accelerator Ile kopiert, worauf
softswitchmaBig die Klappe herunter-
falit", d.h. das Pseudo-ROM, das in Wirk-
lichkeit RAM ist, wird gegen Uberschrei-
ben geschiitzt.
2. Geschwindigkeit
Der 4 MHz 65C02C lauft theoretisch auf
3,5 MHz heruntergetaktet, doch konnte
durch detaillierte Testprogramme gezeigt
werden, daB die Accelerator-CPU maximal
3,32mal schneller als die normale 6502-
CPU ist. Lediglich wenn von den erweiter-
ten 65C02-Befehlen Gebrauch gemacht
wird, konnen Programme den Wert von
3,5 erreichen bzw. gar tiberschreiten. Im
einzeinen wird die Accelerator Ile in fol-
genden Fallen kurzfristig auf 1 MHz _,,her-
untergetaktet":
— beim Zugriff auf Peripheriegerate 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 $D000-$FFFF ,,gemappt" sind.
— beim Zugriff auf Softswitches und ROM-
Routinen im Bereich $CO00-$CFFF. Das
Demo-Programm ,ACCEL.WAIT“ zeigt,
daB das Ansprechen von INTCXROM-
oder Softswitch-Adressen nur dann zur
einer splrbaren Reduzierung der Ge-
schwindigkeit fuhrt, wenn dies mit einer
nicht bis ins letzte Detail untersuchten ge-
wissen Haufigkeit geschieht. a
19
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 sptirbar schneller, wenn man
den lle-Monitor benutzt, der bekanntlich
permanent in den INTCXROM-Bereich
$C100-$CFFF springt. Ladt man dagegen
z.B. den Apple Il 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. Ahnliches
gilt fur die 80-Zeichen-Scroll-Geschwin-
digkeit beim Applewriter lle, da dieser die
INTCXROM-Routinen nicht benutzt.
c) Der Zugriff auf die 64K-Karte des Apple
lle ist mit Accelerator ca. 2mal schneller.
Die Datentibertragungsrate von der und
auf die Karte betragt maximal 80K/s. Dies
entspricht der kaleidoskopartigen Darstel-
lung von 10 Hires-Bildern pro Sekunde.
C086: 5 = POKE -16250, 5 = 3,5 MHz
(High Speed; Normaizustand)
(Zwischen dem langsamen und schnelien
Modus kann man beliebig oft hin- und
herschalten.)
C086: A = POKE -16250, 10 (Disable;
Karte absteilen)
Das Abstellen der Karte bedeutet, daB
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
Ctri-Geschlossener Apfel-Reset
(Ctrl-Taste, schwarze Apfel-Taste und Re-
set-Taste gleichzeitig driicken. Dieses
Verfahren bewirkt, daB 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.
Appie-Motherboard
Accelerator-Karte
SFFFF
ROM RAM,
770M" RAM.
134, Wi
aktiv
Speicherorganisation mit Accelerator Ile
ACCEL. LC. KOPIE kopiert (4) nach (@)
ACCEL. ROM. KOPIE 1 kopiert (3) nach
ACCEL. ROM. KOPIE 2 kopiert (1) nach
8
(Zu Testzwecken wurde das AUXMOVER-
Programm von der MMU-Diskette benutzt,
das mit der Accelerator Ile zu einer Uber-
zeugenden ,,Bilderschau“ fiihrt.)
In der Anleitung zur Accelerator Ile, die
leider fir Programmierer und Techniker
etwas durftig ist, sind nur 3 Softswitches
genannt:
C086: 1 = POKE -16250, 1 = 1 MHz (Low
Speed; fiir Spiele usw.)
3. Reset
Der Hardware-Reset durch Driicken der
Ctrl-Reset-Tasten bewirkt beim Apple lle
stets die Normalisierung der Softswitches
in folgender Weise: Es werden die ,,unte-
ren“ 48K des Motherboards lese- und
schreibfahig gemacht, also eine vor Reset
ggf. aktive 64K-Kartes desaktiviert. Ferner
wird das ROM $D000-$FFFF lesefahig und
die Bank 2 der Language Card der unteren
64K schreibfahig gemacht. SchlieBlich
werden durch die Software-Reset-Routine
ab $FA62 Grafik und 80-Zeichenkarte ab-
gestellt.
Fur die Accelerator Ile gilt demgegentiber,
daB eine ggf. aktive (lese-schreib-fahig
gemachte) Language Card durch Ctrl-Re-
set nicht desaktiviert wird. Ferner ,,dreht*
die Accelerator Ile durch", wenn man
Ctrl-Reset driickt, wahrend sich die 64K-
Karte in einem Read-Write-Enabie-Zu-
stand befindet. Obwohl dies nicht eindeu-
tig bewiesen werden kann, diirfte 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, gerat die Accelerator lle wie-
der unter Kontrolle. Andernfalls kann man
nur noch das Gerat ausschalten. Ein Bei-
spiel: Der Applewriter lle benutzt — falls
vorhanden — die 64K-Karte als Textspei-
cher und muB deshalb beim Scrollen usw.
haufig auf die ,oberen“ 64K springen.
Driickt 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 beildufig erwahnt, daB 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 spater, wahrend der Apple noch ein-
geschaltet ist, wiederholt werden kann,
dariiber hilt sich Titan in Schweigen. Die
Vorstellung, ggf. in dieses Pseudo-ROM
einen anderen Inhalt hineinladen zu kén-
nen, faszinierte mich, denn dann ware
man allen ,,F8-EPROM-Brennern" mei-
lenweit Uberlegen, kénnte man doch je
nach Anwendungszweck mat diesen und
mal jenen Monitor oder mat dieses und
mal jenes Applesoft oder Integer-Basic
usw. in das Pseudo-ROM laden. Es hat
mich dann zwei schlaflose Nachte geko-
stet, bis ich herausfand, daB dies tatsach-
lich méglich ist. Insgesamt habe ich 256
verschiedene Softswitches ausprobieren
mussen, wobei mir im Ubrigen ,Kommis-
sar Zufall“ zu Hilfe kam. Durch Untersu-
chung der Speicherbereiche nach dem
Einschalten des Apple stellte ich namlich
fest, daB 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 Ubliche Verwen-
20
4 feature Ks
@ Wechselplatten-Subsysteme
® Bandstreamer fiir Backup
@ NC-Net Lokales Netzwerk
in Yorbereitung:
NovoComp Dotensysteme GmbH
Walramsneustrafie 7 +9
0-5500 Trier
(0651) 4 22 44 Tx. 472569
® kombinierte Fest-/Wechsel-Subsysteme
@ NCW 2.0 Muttibetriebssystem-Software
®@ 6" Floppy mit SS/SD + DS/DD, IBM-komp.
® Fest-/Wwechselplatten fur Macintosh und
Apple Ic. APPLE-BUS Kompatibititat
® Schon fiir die Einzelplatz Fest/wechsel-
platten gelten konkurrenzlose Leistungen ...
Die Massenspeicher-Profis fir Apple Computer
wir haben die derzeit leistungsstarksten Subsysteme !
@ Hard Disk /Festplatten-Subsysteme
und ... *
US-Fachleute bewerten :
“Die mit Abstand beste
Losung am Markt!"
. bis zu 63 Keywords /Benutzer definier- und
editierbar . Wahifrei unter DOS 3.3 Cink. Ya-
rianten), ProDOS , UCSD-Pascal 1.1 u. 1.2,
CP/M sowie NCNDOS (Multiuser-DOS) ein-
setzbor. Betriebsystem-Wechsel per Befehl
in Sekunden. Fir jedes Keyword komplette
Konfigurations-Umgebung in allen Betrieb-
systemen definierbar. Schreib/Leseschutz
f. alle Keywords u. “logische Unit-Bezeich-
nungen” definierbar. Anderung der Platten-
aufteilung ohne (!) Datenverlust in allen Be-
triebsystemen. Turnkey-Losungen ..
und ..
dung des Stacks von selbst Uberschreibt,
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
lle schreibfahig (write-enable) und zu-
gleich das echte ROM des Apple lesefahig
(read-enable).
LDA #5
STA $C086
LDA $0081
LDA $C081
macht das Pseudo-ROM der Accelerator
lle (wieder) schreibunfahig (write-disable)
und zugleich das echte ROM des Apple
leseunfahig (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 muB 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-
nachst den LC-Inhalt $D000-$FFFF nach
$1000-$3FFF und dann wieder hinauf in
das Pseudo-ROM. Anwendungszweck:
ACCEL.ROM.KOPIE1 kopiert zunachst
den Inhalt des Pseudo-ROMs $D000-
$FFFF nach $1000-$3FFF. Nunmehr kann
man den herunterkopierten Bereich be-
quem patchen. Im AnschluB daran wird
dann der Bereich $1000-$3FFF wieder in
das Pseudo-ROM zuriickkopiert. Anwen-
dungszweck: Verwendung eines partiell
modifizierten Pseudo-ROM-Inhalts.
ACCEL.ROM.KOPIE2 kopiert auf dem
Umweg Uber $1000-$3FFF den echien
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 liber 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 filhren kann.
Ein praktisches Beispiel:
Nehmen wir an, wir wollten den 65C02-
Disassembler (Dateiname ,,065C02") im
Pseudo-ROM der Accelerator-Karte ,,ver-
ewigen“, damit die Language Card fiir an-
dere Zwecke wieder frei wird. Dies kénn-
ten wir mit folgenden Applesoft-Programm
realisieren:
10 PRINT CHR$ (4)
ROM. KOPIE2“
20 PRINT CHR$ (4) ,BRUN D65C02“
30 PRINT CHR§ (4) ,BRUN ACCEL.
LC.KOPIE“
»BRUN ACCEL.
Zeile 10 stellt zunachst sicherheitshalber
eine ,saubere” Pseudo-ROM-Kopie des
Original-Apple-ROMs her. Zeile 20 kopiert
dann das Pseudo-ROM einschlieBlich des
neuen 65C02-Disassemblers in die
Language Card. Und Zeile 30 kopiert dann
die Language Card in das Pseudo-ROM.
Diese Prozedur lieBe sich natirlich da-
durch vereinfachen, daB man das Move-
Programm des Disassemblers dergestalt
umschreibt, daB_ man den neuen Dis-
assembler direkt in das Pseudo-ROM ko-
piert.
Es sei abschlieBend darauf hingewiesen,
daB die Accelerator Ile mit diesem Beitrag
noch lange nicht endgiltig 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.
“2
21
BB i BM 5G A AB)
|
i ORG $300
2 «
3 * ACCEL.WAIT
4, #
5
6 ADR = BQU. §C000
7 ADR2 = EQU. SFFFF.
8 +
9 * Wenn ADR1 im Bereich
10 * $CO00-S$CFFF liegt, dann
ll betragt die Warteschleife
12 ca, 30s statt ca. 208
13 bei einer beliebigen anderen
14 * ADR1. Wenn zusdtzlich ADR2
15 im Bereich $CO00-SCFFF liegt,
16+ betragt Warteschleife ebenfalls
17 # ca. 30 s. Wenn aber nur ADR2
18 # allein im Bereich $C000-SCFFF
19 liegt, betragt die Warteschleife
20 + wieder ca. 20 s. Fazit:
21 * Ein spiirbare Zeitverzdgerung
22 ist nur dann gegeben, wenn
23 eine Adresse im Bereich
24 * $CO00-$CFFF quasi permanent
25 ® angesprochen wird.
26
0300: a2 6F 27 LX #111
0302: 200903 28 WAIT. JSR WAIT
0305: CA 29 DEX
0306: DO FA 30 BNE WATT
0308: 60 31 RTS
0309: 8E 2005 32 WAIT2 STX XSAVE
ogoc: Az 0033. Lpx #0
O30E: A000 34 Loy #0
0310: AD 00 CO 35 WAITS LDA ADRI paar
0313: CA 36 DEX
0314: DO FA 87 BNE WAITS
0316: AD FF FF 38 LDA ADR2 yAdr2
0319: 88 39 DEY
031A: DO F4 40 BNE WATTS
031¢: AE 2003 41 LDX XSAVE
031F: 60 42 RTS
0320: 00 43 XSAVE HEX 00
1 oRG $0180
2 6
3 ACCEL.BOOT
46
5 oe
6 * Diese Routine wird von einem
7 ® nicht ndher bekannten ROM—
8 * Bauelement der Accelerator~
9 * Karte nach dem Einschalten
10 # des Apple in den Stack
11 Kopiert durch eine nachfolgend
12 * nicht aufgefiihrte Routine,
13° die ihrerseits im Stack
14 # ab $0100 ligt.
15 # Danach erfolgt ein Sprung
16 # nach $0180 zu der eigentlichen
17 * hier disassemblierten Routine,
18 * dio das echte ROM $D000-$FFFF
19 * in das Schein-ROM der Accelerator~
20 * karte movt.
alo
22
23° INDL —-EQU $04
24. INDH = EQU $05
25 ACCEL = BQU $C086
26 © WRROMBK1 EQU © $COBA
27 WRROMBK2 EQU $CO82
28 RESET © EQU $FAG2
29° ROM BQU $0000
30 +
31 LDA 4803 STA $CO86 ist ein
32 * in der Anleitung von Titan nicht
33 * dokunentierter Softswitch, um
34 oin WRITE-ENABLE der RON-16K
35 « der Karte 2u ermdglichon.
3608
0180: A903 87 LDA #803
0182: 80 86 co 38 STA ACCEL
39 +
0185: a9 DO 40 LDA #>ROM
o1s7: 8505 041 STA INDH
01g9: A000 42 LDY #<ROM
o1gB: 8404 = 43 sTY INDL
o1gD: B104 = 44. KOPIE = LDA’ ( INDL).¥
o1sF: 9104 45 STA (INDL),Y
0191: AE 8A CO 46 LDX WRROMBK2
0194: 9104 = 47 STA (INDL),Y
0196: AE 82 CO 48 LDX WRROMBK2
0199: 88 49 DEY
019A: DOF1 =—50 BNE KOPIE
019¢: 6 05 51 INC INDH
O19E: DO ED = 52 BNE KOPIE
53 oe
54 # LDA #$05 STA $CO86 ist der
55 » dokumentierte Softswitch,
56 4 der auf 3,5 Megahertz
57 * “Pull Speed" umschaltet.
5B ox
59 * LDA #801 STA $CO86 schaltet
60 + demgegeniiber auf 1 Megahertz
61 * herunter. Das RAM der Karte
62 * ist danach jedoch weiterhin
63 # aktiv.
64 +
65 4 LDA #$0A STA $CO86 schaltet
66 * zusdtzlich das RAM der Karte
67 * ab, so da8 nunmehr das normale
68 * RAM des Apple aktiv ist. Da
69 * sich hier jedoch nur Zufallswerte
70 * befinden, muB man nach diesen
71 * Softswitch mit Reset neu booten.
72 * Danach besteht offenbar keine
73 * Méglichkeit mehr, die Karte zu
14 * reaktivierten, d.h, man mB
1S + den Apple zundchst wieder
7 * ausschalten, wenn man die
77 * Karte wieder aktivieren will
Tm
m2 +
O1A0: A905 = 80 LDA #805
0142: 8D 86 CO 81 STA ACCEL
O1A5: 4c 62 FA 82 IMP RESET
z ORG $300
2 6
3 * ACCEL.LC.KOPIE
‘6 ee
5 4
6 * Diese Routine kopiert zunachst
7 * den Accelerator-Le-Inhalt Bank2
8 — # $D000-SFFFF nach $1000-$3FFF
9 * und kopiert dann $1000-SSFFF
10 # in das Accelerator-"ROM"
llo«
12 * Warnung: Vorher mu FPBASIC
13 * oder INTBASEC usw, in die Le
14» Bank2 geladen worden sein!
15 #
16 Applesoft-Beispie:
WT #——— aaa
1g oe
19 # 10 X = PERK (49281): X = PEEK (49281)
20 20 PRINT CHR$ (4) “BLOAD FPBASIC, A$D000"
21 30 PRINT CHRS (4) “BRUN ACCEL.LC.KOPIE"
22 +
25 INDADR1 EQU $0000
24 INDADR2 EQU $1000 jAnfang
25 INDADRS EQU $4000 ;Bnde+1
26 IND EQU $FC SFD
27 IND2 = EQU SFE
28 ACCEL © BQU $coB6
29 ®
30 + -Kopie nach untel -
Blo
22
Ge Die Marke |)
32 * Pointer initialisieren
35k
0300: a9 00 34 LDA #<INDADR1 ;$D000
og02: 85 FC 35 STA INDL
0304: A9 D036 LDA #>INDADRI
0306: 85 FD 37 STA INDI+1
3B oe
0308: A900 39 LDA #<INDADR2 ;$1000
030A: 85 FE 40 STA IND2
og0c: a9 1042 LDA #>INDADR2
OS0E: 85 FF 42 STA IND2+1
43 «
44» Aocelerator-LC Bank 2 iese—
45» fabig machen.
46
0310: a9 05 47 LDA 45 ;ACCEL: 5
0312: 8D 86 co 48 STA ACCEL
0315: aD 83 co 49 LDA $c08S RDBK2
0318: AD 83 CO 50 LDA $c083 i WRBK2
Sl ue
52 + $D000-$FFFF nach $1000-S3FFF kopieren
53 oe
031B: A000 54 LDY #0
031D: BL FC 55.-—« LOOP. «=sLDA_ (IND), ¥
OSIF: 91 FE 56 STA (IND2),¥
0321: cB 87 NY
0322: DO F958 BNE LOOP2
0324: BE FD 59 INC IND1+)
0326: 6 FF 60. INC IND2+1
0328: AS FD 61 LDA IND1+2
032A: DO FL 62 BNE LOOP1
63 oe
oszc: AD 81 CO 64 LDA $co81 ;RDROMBK
032F: AD 81 CO 65 Lba $co81 :WRRAMBK2
6
67s -Kopie nach oben———
68 8
69 Pointer initialisieren
7
0332: a9 0071 LDA #<INDADR2 ;$1000
0334: 85 FC 72 STA INDL
0336: A910 73. LDA #>INDADR2+1
0338: 85 FD 74 STA INDI+1
1%
033A: A900 76 LDA #<INDADR1 ; $0000
033¢: 85 FE 77 STA IND2
033E: Ag DO 7B LDA #>INDADRI+1
0340: 85 FF 79 STA IND2+1
go x
81 + “ROW™ der Accelerator-Karte
82 + schreibfahig machen!
83 *
0342: A903 84 LDA #3
0344: 8D 86 CO 85 STA ACCEL
0347: AD 81 CO 86 LDA $coBl :RDROMBK2
034A: AD 81 CO 87 LDA $coBL PWRRAMBK2
eB x
89 $1000-$3FFF nach $0000-SFFFF,
90 *d.h. in das Accelerator-"ROM"
91 * kopieren!
92 «
034D: A000 93 Loy #0
o34F: Bl FC = 94 LOOP2. «LDA. ( IND1),¥
0351: 91 FE 95 STA (IND2),¥
0353: C8 96 INY
0354: DO FOOT BNE LOOP2
0356: 6 FD 9B. INC INDL+2
0358: EG FF 99) INC IND2H
035A: AS FD 100 LDA INDL+1
o36¢: ¢9 40101 MP #>INDADRS
O35E: DO EF 102 BNE LOOP
103 +
104 » "ROM" der Accelerator wie quasi
105 echtes ROM schreibunfahig machen
106 *
0360: A905 107 LDA #5 ;ACCEL:5
0362: 8D 86 co 108 STA ACCEL
0365: AD 81 CO 109 LbaA $co8l. s RDROMBK2
0368: AD 81 CO 110 LDA $c081 2: WRRAMBK2
ill e
0368: 60 12 RIS
10 PRINT CHR$ (4)"BLOAD ACCEL.LC.KOPIE"
20 X= PEEK (49281):X = PEEK (49281)
30 INPUT “LC-FILE: ";XS
40 PRINT CHRS (4)"BLOAD";x$;", a$D000"
50 CALL 768
Wem die
(Deutsch)Stunde
schidgt: dachte der
Computer und
lernte eilends um.
IWT Logo ...
@ die leicht zu erlernende Computer-Sprache fur 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 fuhrt
@ die Computer-Sprache, die sofort auf den Kern der
Sache —- das Programmieren und Erproben von
Programmen — fllhrt
... natrlich in deutsch
(Befehie, Fehler- und Systemmeldungen in deutscher
Sprache)
IWT Logo.
~ fir Apple If //e, 2c
Best.-Nr. 400 01101 DM 395,
— deutsche Erweiterung
zum C64 Logo, Version C64 105
Best.-Nr. 400 22 101 DM 98,
*incl. MwSt./unverbindl. Preisempfehlung
IWT Software Service -farInformation, Wissenschaft, Technologie
‘Technotogie-Zentrum: HohestraGe 66, Postfach 1325, 5093 Burscherd |
Tel (02174) 62815, Tx 5213989 wi Vertneb/Beratung: Dohlienstr 4
Postfach 1002 43, 8011 Baldham, Tel (08106) 31017, Ix 6213989 wi
23
IILALIMS
0310:
0312:
0315:
0318:
0332:
0345:
Se SRRRSSLES
20
ao
FE
81
or
03
sss
03
earounanre
ORG $300
ACCEL .ROM.KOPIE1 (Pseudo-ROM)
Diese Routine kopiert zundchst
den Accelerator—"ROM"—-Inhalt
$D000-SFFFF nach $1000-S3FFF
und kopiert dann §1000-$3FFF
erneut in das Accelerator—"ROM",
nachdem man (bei Bedarf) das
spatere “ROM entsprechend
gepateht hat.
ee ey
INDADR1
INDADR2
INDADRS
INDL
IND2
ACCEL
+
—
BQU
EQU
EQU
QU
EQU
BQU
$0000
$1000
$4000
SFo
SFE
scoss
:-$FD
:-SFF
—Kopie nach unten—
* Pointer initialisieren
.
LDA #<INDADR1 ;$D000
STA IND1
LDA 4>INDADRL
STA INDI+1
*
LDA 4<INDADR2 ;$1000
STA IND2
LDA #>INDADR2
STA IND2+1
*
# Accelerator-"ROM" lesefahig
machen.
.
LDA #5 :ACCEL:5
STA ACCEL
LDA $0081 : RDROMBK2
LDA $cO81 |S WRRAMBK2
* $D000-$FFFF nach $1000-$3FFF kopieren
Lby #0
LDA (IND1),¥
STA (IND2),Y
INY
BNE
INC
INC
LDA
BNE
Loop?
LOOP.
IND141
IND2+1
IND141
LOOP)
LDA
LDA
gcosl
$co8i
:RDROMBK2
:WRRAMBK2
Hier ggf. RTS, falls spéteres
“ROM" ganuell vom Monitor aus
gepatoht werden soll,
eee
JSR PATCH
*
*——-—--Kopie nach oben--
*
» Pointer initialisieren
+
LDA #<INDADR2
STA INDL
LDA #>INDADR2H1
STA INDI+1
+$1000
LDA
STA
LDA
STA
#<INDADR1 ;$D000
IND2
4>INDADR1+1
IND2+1
"ROM“ der Accelerator-Karte
schreibfahig machen!
wae
LDA #3
STA ACCEL
LDx $c081
Lpx $c081
;ACCEL:S
sRDROMBK2
i WRRAMBK2
87» $1000-$3FFF nach $D000-SFFFF,
88 #d.h. in das Accelerator—"ROM"
89 * kopieren
90 «
00 OL Ly 40
FC 92 LOOP2 ~=—-LDA_(IND1),¥
FE 95 STA (IND2),¥
94 INY
F995 BNE LOOP2
FD (96 INC IND1+1
FFT INC IND2H
FD 98 LDA IND1+1
40 99 CMP #>INDADRS
EF 100 BNE LOOP2
lol +
102 * “ROM der Accelerator wie quasi
103. * echtes ROM schreibunfahig machen
104 +
05 105 LDA #5
86 co 106 STA ACCEL
81 CO 107 LbA $coBl sRDROMBK2
81 co 108 LDA $COB1 : WRRAMBK2
109 *
110 RTS
ul «
112 * Gewinsohte Patches hier ein-
113. fiigen. Es gil
114 * $1000-$3FFF = $D000-SFFFF
us *
OS6F: EA 116 PATCH NOP
uy *
118 + Beispiel fir einen mdglichen
119» Patch von XAM: Bewirkt
120 * nach 2.B. 1000.3FFF einen
121 # Hexduap mit 16 statt sonst
122 * 8 Bytes pro Zeile.
123 +
124 LA #15 isonst 7
aD 126 STA $3DA6 i$FDAG
0375: 8D BO 3D 126 STA $3DB0 +$FDBO
127 +
128 * Beispiel fir einen weiteren
129 # Patch: Piepston-Anderung
130 +
20 131 LDA #$20 isonst $0C
BS 3B 152 STA $3BE5 2SFBES
0370: 60 133 RTS
1 ORG $300
2 =
3 ACCEL.ROM.KOPIE2 (Echtes ROM)
4°
5 +
6 # Diese Routine kopiert zundchst
7 * den echten Apple-ROM—Inhalt
8 — * $D000-SFFFF nach $1000-$3FFF
9 * und kopiert dann $1000-$3FFF
10 * in das Aocelerator-"ROM",
11 * nachdem man (bei Bedarf) das
12 * sptere "ROM" entsprechend
13 * gepatcht hat.
4
15 INDADR1 EQU $0000
16 INDADR2 EQU $1000
17 —INDADRS EQU $4000
18 INDI EQU SFC i-$eD
19 IND2 —-EQU SFE :-SFF
20 ACCEL © EQU $coRE
21 *
2 + —-Kopie nach unten——-———-
23 8
24 * Pointer initialisioren
2 6
0300: 49 00-26 LDA #<INDADR1 $0000
oso2: a5 FC 27 STA INDL
0304: a8 D028 UDA #>INDADRI
0306: 85 FD 29 STA INDI+1
so +
0308: Ag 0031 LDA <INDADR2 ;$1000
030A: 85 FE 32 STA IND2
o30¢: A910 33 LDA #>INDADR2
O30E: 85 FF 34 STA IND2+1
358
24
0310
0312:
0315
0318
0318:
031D:
osiF:
0321:
0322:
0324:
0326:
0328
32a:
oszc.
os2F:
0332
0335:
0337
0389:
0338:
0330:
033F
0341:
0343
0345:
0347
034A:
34D:
ag
8D
aD
aD
AO
Bl
91
8
DO
45
Do
AD
aD
Ag
85
Ag
85
Ag
85
a9
85
Ag
ep
AE
AE
0387:
0359:
O35B:
035D
O35F:
0361:
0363:
0365:
0368
0368:
osee:
os6F:
0370:
Ag
8D
AD
AD
03
86
81
a1
00
FC
Fe
oF
00
FO
10
FD
00
FE
Do
FF
03
86
al
a1
00
FC
FE
FO
FD
FF
FD
40
=F
05
86
al
81
co 40
co 41
co 42
co 56
co 67
co 83
co 84
co 85
100
tol
102
103
104
105
co 108
co 107
co 108
109
110
un
uz
113
14
1s
116
alr
118
119
120
+ Eohtes Apple-ROM lesefahig
* machen
*
+ $0000-SFFFF
*
Loop
LDA
STA
LDA
LDA
Ly
LDA
STA
INY
BNE
INC
INC
LDA
BNE
LDA
LDA
8 SACCEL:3
ACCEL
Scosl RDROMBK2
$cosi. sRANBK2
nach $1000-S3FFF kopieren
#0
(1ND1),¥
(IND2),Y
LoOPL
INDI+1
IND2+1
INDI+1
LOoPL
$coat > RDROMBK2
scoal :WRRAMBK2
Hier gef- RTS, falls spateres
gepatcht werden soll.
*
«
© “ROM manuell vom Monitor aus
*
*
JSR
PATCH
—Kopie nach oben——-———-
* Pointer initialisieren
*
sae
kopier
ween
Lope
echtes
ene
Gewins
eeeee
PATOR
LDA
STA
LDA
STA
LDA
STA
LDA
STA
LDA
STA
LDxX
Dx
en
Loy
LDA
STA
INY
BNE
Inc
Inc
LDA
MP
BNE
ROM
LDA
STA
LDA
LDA
RTS
chte
NOP
$<INDADR2 ;$1000
INDL
+> INDADR2+1
INDI+1
#<INDADR1 ;$D000
IND2
#>INDADRI+1
IND2+1
"ROM" der Accelerator-Karte
schreibfahig machen!
48 sACOBL:3
ACCEL
$cosi PRDROMBK2
$coBl :WRRAMBK2
$1000-$3FFF nach $D000-$FFFF,
d.h. in das Accelerator—"ROM"
+0
(IND1),Y
(IND2),¥
LooP2
INDI+1
IND2+1
INDI+1
‘¥>INDADRS
LooP2
“ROM! der Accelerator wie quasi
schreibunfahig machen
5
ACOBL
$cosl : RDROMBK2
$co81 WRRAMBK2
Patohes hier ein-
fligen. Es gilt.
$1000-S3FFF =
‘$D000-$FFFF
‘+ Patch-Routine nicht aktiv
*
RTS
FORTH—-SYSTEME
FORTH Encyclopedia DM
System Guide to FIG FORTH OM
Floating Point Listing in FORTH OM
Expertensystem in FORTH7? oM
Dokumentation derFORTH Konferenzen
1980, 249 Seiten, 1982, 368 Seiten, je DM
1981, 608 Seiten (2 Bande? oM
Rochester FORTH Proceedings
1981, 1982, 1983 je DM 98,-~
280 FORTH von LMI auf APPLE-Disk DM 376,28
APPLE 3D-GraFORTH OM 282,20
APPLE II Master FORTH mit Editor,
Assembler, Debugger, 258 S. Handbuch 0M 398,--
MasterFORTH + Hires + Floatinap. 0M 598,--
Expertensystem auf Diskette DM 376,28
fysFORTH mit Einféhrungskurs DM 198,--
Professional Applikation Development
System mit Metacompiler, FPA DM 1881 ,-~
Cross Compiler fir LMI Systeme DM 1258,--
Wir unterstitzen natérlich auch andere Rechner,
fordern Sie doch einfach unseren kostenlosen
Katalog an:
FORTH-SYSTEME Angelika Flesch, Schitzenstr. 3,
7820 Titisee-Neustadt, Tel.: 7651/1665
estachendeLeistun!
‘AP a 6800 CPU mut (28K RAM
4 H | AP 20 mst Assembler und Pseudodisk
aon
¥ V | iehacninne 2
) AIG ete Bee
= rane —
EaTeimcmcim inne ak connie BEC Disc Hanbun eum ne
rere Bante Sahn ita Baste
Rewuint ,
a eS oaige Disketten mit Beko noenn BIER
‘AP 23 2808 CPU 6 Mitr Innenlochverstirkung ss, sd ZHOA Karte
re RASC M05, oe Zone oan
Das Texipropramm
Wordsar Dyat0,~
Bie Pree ine MOWSE
100er Pack DM 500,—
i cz Olper Str. 10 1011 Rose Marie Lane 16
i3> COMPUTE: cECHNIL 4800 Bielefeld 14 Stockton, CA 95207
Tel. 0521/444032 Tel. (209) 473-7473
West-Germany USA
25
Applesoft simuliert
Turtle Graphic
a
ULL
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 fiir den unbedarften
Anwender, der damit ohne mathemati-
schen Ballast an den Computer heran-
gefuhrt wird. Eine der bekanntesten
Anwendungen diirfte wohl die Pro-
grammiersprache Logo sein, die sich
vor allem fiir Kinder eignet.
Harald Grumser
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. !m
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.
Wiederholt man dies noch zweimal, so hat
sie ein Quadrat gezeichnet.
Die Befehle, die die Turtle ausfilhren kann,
lauten wie folgt:
MOVE bewegt die Turtle um die angege-
bene Anzahl von Punkten in die Richtung,
in der sie gerade steht.
26
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 ldscht den Bildschirm und posi-
tioniert die Turtle wie beim Programmstart.
PENUP hebt den Schreibstift, so daB bei
der nachsten 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.
Brauch die Turtle einen Parameter, so holt
sie sich diesen vom Stack. Ein Quadrat
laBt 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 fur 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 erlau-
tern, sei der Ausdruck (1+2) * (8+4) zu
berechnen: Das Ergebnis wtirde lauten
» 12434 + * “. Die Turtle stellt nun
einige Befehie zur Verfiigung, um den
Stack zu manipulieren:
+ —+*/ holen zwei Zahlen vom Stack,
verkniipfen 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 *“ ware somit die Operation
zum Potenzieren.
SWAP vertauscht die oberen beiden Zah-
len auf dem Stack. ,3 10 SWAP -" ergibt
also 7, wahrend ,,3 10 -“ -7 ergibt.
PICK holt sich einen Index vom Stack und
kopiert dann die von oben indizierte Zahi
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-Befehl.
Bei dem Quadrat oben wide es sich als
praktisch erweisen, wenn mehrmals zu
wiederholende Befehle als Schleife (Loop)
eingegeben werden kénnten. Selbstver-
standlich ist die Turtle auch dazu in der
Lage. Die zu wiederholenden Befehle
werden zwischen ,,DO“ und ,,LOOP“ ein-
geschlossen. Als Schleifenzahler holt sich
»DO“ eine Zahi vom Stack. ,4 DO 50
MOVE 90 TURN LOOP" wiirde also unser
Quadrat zeichnen.
Unsere Turtle kann jedoch noch mehr,
namlich neue Befehle lernen. Eine zu ler-
nende Befehisfolge 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“
Grafik 1
Es sei nicht verschwiegen, wie der Finf-
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 Fiinfzack um die
Stelle, an der sich die Turtle gerade befin-
det, in der angegebenen GroBe.
Dem Leser sei es Uberlassen auszutiifteln,
wie die Figur in der Bildmitte entsteht. Ein
Tip: Es handelt sich um eine Menge ver-
drehter Siebenecke.
AbschlieBend sollen noch einige Befehle
erlautert werden, die das Arbeiten mit der
Turtle erleichtern:
TEXT schaltet auf nur Text um, so daB der
ganze Bildschirm zur Eingabe von Befeh-
len zur Verfligung steht.
GRAPH schaltet zurtick auf HGR1, ohne
den Bildschirm zu léschen.
4pqralik 454
LIST listet alle Befehisworter samt der neu
erlernten. Nach 22 Wértern geht es erst
nach Tastendruck weiter.
FORGET vergi8t alle Befehle ab dem spe-
zifizierten. Da neue Befehle bereits neu
erlernte beinhalten kénnen, geht die Turtle
davon aus, daB nach Loschen des Befehls
»QUADRAT“ auch der Befehl ,, FUENF-
ZACK" nicht mehr ausgefiihrt werden
kann.
STACK listet 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-
riick in den Applesoft-Direktmodus.
Zur Eingabe sei folgendes bemerkt: In
einer Eingabezeile konnen bis zu 50 Be-
fehle stehen, die von mindestens einem
Blank (Leerzeichen) voneinander getrennt
sein missen. AuBer den Namen nach
»LEARN>“ und ,FORGET“ kénnen sie
aber auch einzeln eingegeben werden.
Tritt wahrend 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, daB deren
Inhalt voribergehend gelernt wird. Daher
gilt flr sie dasselbe wie oben. Wahrend
des Lernens flhrt die Turtle die Befehle
nicht aus. Solite sie also einmal wider Er-
warten nicht reagieren, so kann das daran
liegen, daB ein ,<“ oder , LOOP“ fehit.
»<" schlieBi im Direktmodus alle Schlei-
fen, ohne sie auszufuihren, 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 groBen und
ganzen selbsterklarend. , OUT OF MEMO-
RY“ tritt auf, wenn die Anzahl der erlernten
Befehle plus der der aktiven Schleifen 21
Uberschreitet.
Wahrend die Turtle ein Programm abarbei-
tet, kann sie durch Ctrl-S gestoppt
werden.
Die Turtle kann sich nicht uber den Bild-
schirmrand hinaus bewegen, sondern
schneidet die Koordinaten ab, was bei gré-
Beren Figuren zu Verzerrungen fuhrt.
Das Programm selbst ist nicht im Hinblick
auf maximale Geschwindigkeit, sondern
auf Lesbarkeit hin geschrieben worden.
eB
27
i
:
|
Der einzige Beitrag zur Erhéhung der Ge-
schwindigkeit ist die Verlegung der Initiali-
sierungsroutine an den SchluB (Zeile
9000-9995) und die Nennung der Varia-
blen in der Reihenfolge ihrer Haufigkeit.
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
gezahit. Ist der Befeh! selbst eine Zahl, so
wird K um OFFSET erhoht, somit enthalt K
die Information Uber die Zahl.
Die Routinen in 100-999 sind die ver-
schiedenen Unterprogramme flr die Tur-
tle, die in 1000-1999 die fiir den Stack.
Bevor auf die LOOP- und LEARN>-teile
eingegangen wird, ist es sinnvoll, die Ab-
speicherung der neuen Befehle zu erlau-
tern. Fir 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, daB dessen Indizes in
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 zugeflhrt
werden. Da es méglich ist, in einem neuen
Befeh! einen ebenfalls neuen Befeh| auf-
zurufen, kann dieses Unterprogramm sich
selbst neu aufrufen. Damit bei dieser Re-
kursion keine Zeiger verlorengehen, mus-
sen diese in Form von Vektoren L1,L2 und
deren Pointer NLP aufbewahrt werden.
Dasselbe gilt fiir die Routine in 2500-2999,
die dieselbe Rekursion flr geschachtelte
Schleifen darstellt, wobei diese Uber einen
anderen Pointer LLP verwaltet werden.
Bleibt noch der Schieifenstart 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 geseizt,
beziehungsweise eine Null ans Ende der
Zeile geschrieben und die Anzahl der Be-
fehle IT um eins erhéht.
In der Fehlerbehandlungsroutine in 6000-
6999 ist Zeile 6510 zu erlautern. Diese
Interpreter-Routine initialisiert den Return-
stack. Dies ist erforderlich, da sonst nach
einem Programmabsturz der Returnstack
noch belastet ware und die fir die Rekur-
sionen benétigte Schachtelungstiefe nicht
mehr erreicht wurde. (Der Returnstack
kann nur 25 Returnadressen aufnehmen).
Es ist in diesem Zusammenhang auch da-
von abzuraten, die Variable NL zu vergr6-
Bern, da in nicht mehr wie 25 Unterpro-
grammebenen gesprungen werden kann.
Zuletzt noch ein paar Tips fur 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 flige 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-
fehi in der Mitte der vorhandenen Befehle
anzuordnen, da dann die Abfragen in Zeile
70-99 nicht mehr stimmen.
&
MESON Il, 48 K
MESON Il, 64 K
(16 K + Z 80-Card)
Z 80-Card
16 K-Card
Floppy-Disk 5'4”
Controller-Card
PAL-Card + Modulator
MESON Il, Leerplatine
cig
beide Rechner mit 10er-Block, 1 Jahr Garantie
Tastaturen und Gehause auf Anfrage
TEMBSTONE-MICRO
Th. Tank & G. Korber
1100,- DM Joyport, zum AnschluB von zwei
ATARI-Joysticks 40,- DM
1250,- DM ADD2 B, (VIA 6522)
mit RAM + Backup 170,- DM
125,- DM ADD2 L, Leerplatine 55,- DM
125,- DM ADD4 B, (PIA 6821)
480,- DM mit RAM + Backup 150,- DM
150,- DM ADD4 L, Leerplatine 45,- DM
170,- DM PIA-Card mit'Wrap-Feld ausgertstet
85,- DM
Gardeschiitzenweg 72, 1000 Berlin 45
@ 030/8 33 1303 (SHOP), Q 74657 28 (BURO)
Entwicklungen auf Anfrage
ile
28
EBA
saqgcntikaag
82
84
86
88
30
92
99
100
ilo
120
130 HC
REM
REM
REM
REM
LOMEM: 44 16 1 3
REM Hinter HGR
GosuB 9000
GOSUB 100
Seeeeeeted
TURTLE GRAPHIK
eerneeeetrer Ts
REM Hole Eingabezeile und arbeite sie ab
PRIGHT
INPUT "
GOSUB 8000
IF K = 0 THEN 25
IF K = IT + 2 THEN ERFLG = 1: GOTO 6000
GOSUB 70
GoTo 35
REM Vertoiler
IF PEEK (KBD) = CS THEN 6000
IF K = 22 THEN LRNFLG = LRNFLG - EPS: REM INS = "LOOP"
IF LRNFLG = 0 OR K = 24 THEN 88: REM Direkt Modus oder
INS = "<"
IF LRNFLG < 0 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, 800, 600 , 650, 700, 750,800, 900, 1200, 1300,
1400, 1600, 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 = NX / 2:PY = MY / 2
= 1: HCOLOR= 3
140 :
150
160
170
180
190
REM DRAW TURTLE
XDRAW 1 AT PX, PY
IF NOT HC THEN 190
HPLOT PX, PY
RETURN
199 :
200
205
210
215
220
225
230
235
245
250
255
500
310
320
330
340
400
410
420
430
440
450
460
499
500
510
520
530
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 < 0 THEN PX
IF PY > MY THEN PY
IF PY <0 THEN PY =
IF NOT HC THEN 255
HPLOT TO PX,PY
GoTO 150
REM TURN
GOSUB 1000
DIR = DIR + ST
DIR = 360 # (DIR / 360 ~
RETURN
INT (DIR / 360))
REM MOVETO
GOSUB 1000
A=ST
GosuB
GOsUB
Stacks
PY = A:PX = ST
GOTO 225
1000
150: REM Kein XDRAW der Turtle vor Pruefung des
REM TURNTO
GosUB 1000
DIR = ST
GoTo 330
599 :
600
610
620
650
660
“REM PENUP
He = 0
RETURN
“REM _PENDOWN
He = 1
670
700
no
720
730
740
149
50
760
770
780
‘790
799
800
810
820
830
840
850
860
899
900
910
920
930
940
950
960
970
1000
1010
1030
1040
1050
1100
1110
1120
1130
1140
1200
1210
1220
1230
1299
1300
1310
1320
1330
1399
1400
1410
1420
1430
1440
1499
1500
1510
1530
1540
1550
1560
1570
1580
1600
1610
1620
1630
1640
1650
1660
1670
1699
1900
1905
1920
1930
1940
1950
1960
1999
999 :
1099 :
1520 1
1910 1
RETURN
699
REM TEXT
TEXT : HOME ; INVERSE
PRINT SPC( 13); "TURTLE GRAPHIK"; SPC( 13)
NORMAL : POKE 34,1: REM Textfenster: WINDOWTOP
RETURN
REM GRAPH
POKE ~ 16504,0: REM HGR Schalter; andere Schalter
durch TURTLE gesetzt
HOME
VTAB 21
RETURN
REM LIST
FOR I T0 IT
PRINT "~ ";28(I)
IF (I +1) / 22 < > INT ((I +1) / 22) THEN 850
GET A$: IF ASC (A$) = CS - 128 THEN I = IT
REM FORGET
IF LRNFLG <
GOSUB 8000
IF K > IS +1 AND K <
ERFLG = 9: GOTO 6000
IT =K—
LLP = IT - Is -1
RETURN
> 0 THEN 940
= IT + 1 THEN 950
REM Hole vom Stack
IF SP < 0 THEN ERFLG = 2: GOTO 6000
ST = ST(SP)
SP = SP -1
RETURN
REM Schiebs auf den Stack
IF SP = 100 THEN ERFLG = 3: GOTO 6000
SP = SP +1
ST(SP) =
RETURN
~ OFFSET
1199 :
REM PULL holt ein “Dummy”
SP = SP -1
IF SP < - 1 THEN SP= -1
RETURN
REM DUPliziere
IF SP < 0 THEN 1010
K = ST(SP) + OFFSET
GoTo 1110
REM SWAP vertausoht die oberen beiden Stackelemente
A = ST(SP)
St(SP) = ST(SP - 1)
ST(SP ~ 1) =A
RETURN
REM PICK holt das von oben indizierte Stackelement
GOSUB 1000
= SP -sT+1
IF SP < 0 THEN 1010
IF I > SP THEN 1580
IF I <0 THENI=0
SP = SP +1
ST(SP) = ST(I)
RETURN
1599
REM STACK + ~
GosuB 1000
ON K - 15 GOTO
ST(SP) = ST(SP)
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
*/
1630, 1640, 1650, 1660
+ ST: RETURN
REM STACK
Tis ot
= 141: IF I> SP THEN 1
PRINT CHRS (91);" ";ST(I) CHRS. (93)
IF (L+1) /22< > INT ((1+1) / 22) THEN 1950
GBT AS: IF ASC (AS) = CS — 128 THEN I = SP
coro 1910
RETURN
29
2000
2010
2020
2050
2040
2050
2499
2500
2510
2520
2530
2540
2550
2560
2870
REM DO-Schleifenstart
LRNFLG = LRNFLG + EPS
ULP = LLP +1
IF LLP > NL THEN ERFLG = 7: GOTO 6000
L2(LLP) = 0
RETURN
REM Schleifenende (LOOP)
L(LLP,L2(LLP)) = 0
GOSUB 1000: COUNT(LLP) = ST
IF COUNT(LLP) < = 0 THEN 2560
K = IS + LLP + 2: GOSUB 7000
2999 :
3000
3010
3020
3030
3040
3050
3060
3070
3080
3090
3499
3500
3510
3520
3550
3640
3650
3560
8140
8150
8999
9000
COUNT(LLP) = COUNT(LLP) - 1: GOTO 2630
LLP = LLP - 1
RETURN
REM LEARN
IF LRNFLG < > 0 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
18(IT + 1) = INS
LLP = LLP + 1:L2(LLP) = 0
RETURN
REM "<" Ende des Lernmodus
IF LRNFLG = 0 THEN 6200
LRNFLG = LRNFLG - 1
IF LRNFLG < 0 THEN ERFLG = 5: GOTO 6000
IF LRNFLG > 0 THEN ERFLG = 6: GOTO 6000
Iv=1T+1
L(LLP,L2(LLP)) = 0
RETURN
REM Fehlerbehandlungsroutine
POKE 49168,0
REM Tastaturruecksetzimpuls
PRINT GS;
ON ERFLG GOTO
6060 , 6070, 6080, 6090, 6100,6110,6120,6150,6140
Goro 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 = 0:LRNFLG = 0
NIP= ~ 1:LLP = IT -Is-1
CALL =~ 10621
REM Initialisiere Basic-Return-Stack
GoTo 25
REM Fuehre einen gelernten Befeh] aus
NIP = NIP +1
IF K > IS + NL + 2 THEN K = K — OFFSET
L1(NIP) = K ~ 2 - 18: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
LINES = LINES +" ""
PRIGHT = PRIGHT + 1: IF PRIGHT > LEN (LINES) THEN K
0: RETURN
IF MID$ (LINES,PRIGHT,1) =" " THEN 8020
PLEFT = PRIGHT
PRIGHT = PRIGHT + 1: IF MID$ (LINES,PRIGHT.1) < >"
‘THEN 8050
INS = MIDS (LINES, PLEFT, PRIGHT ~ PLEFT)
IF VAL (INS) = 0 AND IN$ < > "0" THEN 8100
K = OFFSET + VAL (INS): RETURN
K=IT+1
FOR I = 0 70 IT
IF I8(I) < > INS THEN 8140
= ee or
NEXT :K=K +1
RETURN
REM Initialisierung
9010
9020
2030
9040
2050
2060
9070
9080
9090
9100
9110
9120
9130
9140
9150
2160
9170
9180
9190
9200
9210
9220
9230
9240
9250
9260
9270
9280
9290
9300
9310
9320
9330
9340
9360
9360
9370
9380
9390
9400
9410
9420
9430
9440
9450
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
FOR I = 768 70 768 + 9
READ A: POKE I,A: NEXT
DATA 1,0,4,0,40,54,63,56,4,0
POKE 232,0: POKE 233,3
ROT= 0: SCALE= 1
REM Formtabelle fuer die Turtle
DIM ST(100): REM 101 Stackelemente
SP = -1:ST=0: REM Stapelzeiger (Stackpointer) und
angefordertes Stackelement
NU = 20: REM Anzahl der zu lernenden Befehle
INS = 60: REM Anzahl der Instruktiuonen pro Befehl
IS = 24: REM Anzahl der Standartbefehle
IT = IS: REM Anzahl der Befehle insgesamt
DIM I$(IS + NL +1): REM Feld mit den Befehisnamen
FOR I = 0 To IS
READ I§(I): NEXT
DATA TURTLE, MOVE, TURN, MOVETO
DATA TURNTO, PENUP, PENDOWN
DATA TEXT, GRAPH, LIST, FORGET
DATA PULL, DUP, SWAP, PICK
DATA +,-,¥,/,STACK
DATA DO, LOOP, LEARN>, <
DATA BYE
DIM L(NL,INS): REM Matrix mit NL Befehlen zu je INS
Instruktionen
DIM L1(NL),L2(NL)
NLM-Matrix
DIM COUNT(NL): REM Zaehler fuer geschachtelte
Schleifen
K = 0: REM Instruktionsindex
KBD = 49152: REM PEEK zur Tastaturabfrage
CS = 147: REM CS = ASC (CTRL-S)
OFFSET = 2 } 15: REM K wird um OFFSET erhoeht um
Zahlen als Instruktionen abzuspeichern
LLP = - 1: REM Zaehler fuer LEARN> und aktive
Schleifen
NIP = LLP: REM Zaehler fuer geschachtelte Befehle
LRNFLG = 0: REM Wird waehrend des Lernmodus auf 1
gesetzt
ERRFLG = 0: REM Fehlercode fuer Fehlerbehandlung
EPS = 1 / 64: REM LRNFLG wird bei jedem DO um EPS
erhoeht und bei jedem LOOP erniedrigt
PI = ATN (1) #4
PX = 0:PY = 0: REM Plot-Koordinaten
REM Zeilen- und Spaltenindex der
HC = 0: REM Logische Variable fuer PENUP/PENDOWN
DIR = 0: REM Richtung der Turtle in Grad
MX = 279:MY = 159: REM HGR Fonster
PLEFT = 0: REM Linker Zeiger der Eingabezeile
PRIGHT = 0: REM Rechter Zeiger dor Eingabezeile
A= 0:1 = 0: REM Allgemeine Variablen
G$ = CHRS (135): REM Bell
REM LINE$,IN$ sind die Eingabezeile und die daraus
abgespaltenen Befehlo
RETURN
REM Ende des Programms
TEXT ; HOME
PRINT "END OF TURTLE GRAPHIC”
END
REM HINWEIS:
REM Wer dieses Programm mit allen REM's abtippt
REM und es dann ausfuehrt wird sich wundern.
REM Programme, die mehr als 25 Diskettensektoren
lang sind
REM und die HGR aufrufen, loeschen sich zum Teil
selbst.
Peeker-Sammeldiskette
Die
abgedruckten gréBeren Programme
sind auch als Sammeldisketten erhaltlich,
die etwa jeden zweiten Monat erscheinen
und
die Listings der vorangehenden zwei
Hefte zusammenfassen.
30
APPLE Il -
Anwenderhandbuch
(L. Poole}
itfadens werden Sie
einsetzen, denn
it ber das
Literatur
naterial g
as herstellerseit
1 wir
APPLE II PASCAL ~
Eine praktische Anleitung
A. Luehrmann, H. Peckhar
fir alle, die die Programmie
ache PASCAL lernen wollen und
Zugang zu einem Apple-Cor or haben.
5 cover, DM
6502 -
Programmieren in Assembler
(L. Leventhal)
Dieser Tit
Bich
Noch im Programm:
VisiCalc, 50 Programme auf Diskette, DM79,
APPLE
MASCHINEN
SPRACHE
Der Einstieg iiber BASIC!
Die Idee: Maschinenbefehle des Mikroprozessors
6502 iiber die BASIC-Befehle POKE, CALL, PEEK im
Apple abspeichern, ablaufen lassen und Ergebnisse in
das BASIC-Programm zurticklesen. 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 Ton
sowie zum Aufruf der zahlreichen, bereits vorhandenen
Maschinenprogramme im Apple.
Der Héhepunkt: Eine schrittweise Einfiihrung 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
Theo-Prosel-Weg I
8000 Miinchen 40
tai
LOGO -
Jeder kann programmieren
(Daniel Watt)
Buch des Jahres in den USA. Fir die
Computer C64, ATARI, APPLE Il, IBM-PC
und TE99,
Hochwertiges Textbuch fir Logo-Kurse fiir
zu Hause und im Lehrbereich.
A4, DM 59. (4. Quartal 84)
rs LOGo
APPLE Il - Bewegte 3D-Graphik
(Phil Cohen)
Selbstentworfene Graphiken und Dia:
gramme ~ animiert oder als Standbilder
eben oder raumlich: alle erforderlichen
BASIC Programme mit Erklarung finden
Sie in diesem Buch,
. 190 Seiten, Softcover, DM 49.-
.
Macintosh Programmier-Handbuch
(David Lien)
Macintosh ~ Pionier des graphischen
Computerdialogs — benutzt MICROSOFT
BASIC. D. Lien’s Buch ist eine souveraine,
zuverlassige Einfhrung und Referenz zu
Macintosh’s Basic.
450 Seiten, DM 59.— (4. Quartal 84)
77 BASIC-Programme, A4, DM 39, @ CP/M und Wordstar, DM 29,80.
Wie man die Grafik
verdoppelt Patt
| Teil 1: Double Lores ett .
lle = 64K-Karte [a8t sich auf vielfaltige
| Weise einsetzen, z.B. als
| Whe
— 80-Zeichen-Bildschirm-Teilspeicher
8
— RAM-Diskspeicher a u
— Teilspeicher fiir doppelte hochauflésen-
de Grafik (Double Hires: 560 mal 192 statt
280 mal 192 Bildpunkte)
— Teilspeicher flr doppelte niedrigauflé-
sende Grafik (Double Lores: 80 mal 48
statt 40 mal 48 Kasten).
Die erweiterte 80-Zeichenkarte des Apple Je tI hd
8
ha
Zur Double Hires werden von Apple in den
technischen Unterlagen nur vage Anga- Hi
j ben gemacht, und die Méglichkeit von alt aus Sh, We
Double Lores wird tiberhaupt nicht ange- "
{ deutet. Im ersten Teil dieser Folge wird auf a &; a
i die Double Lores eingegangen, wahrend Senane
sich der zweite Teil mit der Double Hires
befaBt.
Die Double Lores wird meines Wissens
hier erstmals geschildert. Mangels techni-
scher Informationen war es nicht einfach
herauszufinden, ob sie Uberhaupt und,
wenn ja, wie méglich ist, doch zeigte sich
im nachhinein, da8 Double Lores nicht nur
verbliiffend einfach ist, sondern auch in
einem reinen Applesoft-Programm be-
nutzt werden kann, da hier keine Ge-
schwindigkeitsprobleme auftreten. (Um-
gekehrt muB die Double Hires in Assem-
bler geschrieben werden, da sonst die
HPLOT-Funktion viel zu langsam ist.)
Ulrich Stiehl
|
32
1. Normale Lores-Grafik
Bevor wir auf die Double Lores eingehen,
seien die normalen Lores-Grafik-Befehle
kurz wiederholt. Der Lores-Grafikbild-
schirm ist speichermaBig mit dem 40-Zei-
chen-Textbildschirm identisch. Wahrend
der 40-Zeichen-Textbildschirm jedoch 24
Zeilen zu je 40 Zeichen umfaBt, kann bei
dem Lores-Grafikbildschirm genau die
doppelte Menge an Grafik-Kastchen ge-
plottet werden. Dies riinrt daher, daB in
jeder Bildschirmspeicherstelle anstelle e/-
nes Buchstabens je zwei Kastchen 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 Kastchen aufnehmen. Es gilt
also:
Textbildschirm: 24 Zeilen zu je 40 Zeichen
Loresbildschirm: 48 Zeilen zu je 40 Kast-
chen
Geteilter Loresbildschirm: 40 Zeilen zu je
40 Kastchen 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, daB ganz links oben (=
Zeile 0, Spalte 0) ein Kastchen geplottet
wurde. Geben wir jetzt
400:FO
ein, wird ein Kastchen in derselben Spalte,
aber statt in der ersten in der zweiten Zeile
geplottet (= Zeile 1, Spalte 0). Geben wir
abschlieBend
400:FF
ein, dann wird sowohl das obere wie das
untere Kastchen sichtbar. $FF ist 1 Byte
und besteht aus 2 Halbbytes $F und $F.
Da jedes Halbbyte einen Wert von $0-$F
oder dezimal 0 bis 15 einnehmen kann,
gibt es theoretisch 16 Farben von 0 (=
schwarz) bis 15 (= weiB), die allerdings
auf einem griinen Monitor nur als unter-
schiedliche WeiB-Griin-Abstufungen sicht-
bar werden. Wer liber einen Farbmonitor
verfiigt, kann mit dem Befehl
COLOR = F
wobei F als Variablenwert im Bereich 0-15
liegt, die gewiinschte Farbe definieren, die
dann fir alle nachfolgend geplotteten
Kastchen 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 heiBt Zeile, und
eine senkrechte Linie von Y1 bis Y2 heiBt
Spalte.
ir HLINE
-—_—<—e
xX % xX
Diagramm 1
GR
schaltet auf Lores-Grafik mit geteiltem
Bildschirm und Farbe = 0 = schwarz um.
Deshalb muB man danach mit
COLOR = F, z.B. COLOR = 15
die gewiinschte 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 = CLRSCR).
TEXT
hebt den Grafik-Modus wieder auf.
PLOT X, Y, z.B. PLOT 39, 39
plottet ein Kastchen im Schnittpunkt von
horizontaler X- und senkrechter Y-Achse.
rr electronic
Elektronik -Fachiiteratur Personsl-Computer
Qualitats-
Disketten 1.Wahl
BASF-Disketten softsektoriert in Pappkarton
2:25-Disketen ate ‘one Aufprels mit Verstarkungsring,
{-seitig, doppeite Dicht
, -seltig, dappelte Dicht
2/96V...96 TPI, 2-seitig, doppelte Dich
‘Aufarels fOr 1Oer-Pack In Hart-PVC-Klappbox
3M/Scotch Sicherheits—Disketten
5,25'-Disketten mit Verstarkungsring; softsektoriert.
744-0 . 48 TPI, 1-seitig, doppelte Dichte —. 59,00 579,00
745-0 _ 48 TPI, 2-seitig, doppelte Dichte 92,50 887,00
746-0 96 TPI, I-seltig, doppelte Dichte — 62,50 775,00
747-0 _ 96 TPI, 2-seitig, doppelte Dichte 98,00 922,00
Wichtig fUr die sichene Funktion Ihrer Disketten-Lautwerke
7440 .... Kopf-Reinigungsset fur 5,25'-Lautwerke..... 49,50
* ~ Micro-Disketten
usa una acinrose NEU
‘3,5°-Disketten 1-seltig, doppelte Dichte im Ser-Pack 74,50
Plastikbox fir 5,25" - Disketten
Formschone Klappbox aus Hart-PVC fir ca 10 Disketten in
den Farben grin, orange, schwarz, hellgrau, elfenbein oder
anthrazit, Bitte dle gewinschte Farbe angeben. Mischbar.
1Stk..... 6.95 10 Stk ..... 59.50 100 Stk... 499.50
5,25°-Diskettenbox — Sehr preiswert!
Reprasentat ve Disketten-Box aus deutscher Fertigung in den
Abmessungen (T xB x #) 306x174x144 mm ohne Scho8 mit
topas farbenem Deckel fr ca. 8 Disketten und 4 beschrift-
baren Stutzplatten. | Stk ... 27.50 ab 10 Stk ... 24.75
ABA - Diskettentrége
Kompakter Trog mit rauchfarbenem Deckel und SchioB.
Das UntertetT ist platzsparend Im Deckel abste! bar.
Je nach Grofe incl. 4 bzw, 9 beschriftbaren Statzpiatten.
MBS .. Abm. 210x100x175mm Or 40 Disk.... 47,50 43,90
MBS... Adm. 310x100x175mm Ur 90 Disk. 69,50 65,40
40 _ Abm: 210x180x175mm fur 40 Disk. 69,50 65,40
F90__ Abm_ 350x180x175mm fOr 90 Disk. @9,50 85,90
@m@ || Datenkassetten
Universal « 1.Wahl
Geeignet far alle gangigen Home - Computer
Bandmateriat: Etsenoxid Bendmaterial: Chromdioxid
51. 100'St.
CIO-FE.15,95 74,80 142,50 C10-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
autklappbaren Schutzbox mit Je 2 Blanco-Aurkleber Je Box.
Apple ~ Zubehor
WEEREEDD) 80 Zeichen/64kB-RAM
i ia
fae | fir APPLE ve 290,—
Z80B/64kB-Karte (CP/115.0,CBASIC 65x80). 1195,00
Original ALS incl. samtlicher Software.
CP/M-PLUS-Manuals (CP/113.0) 75,00
Kompletter Satz bestehend aus: User's Guide, SID, System
Guide, Programmer's Utilitles- und Programmer's Guide.
ITOH/EPSON-Vollgrafikinterface mKabel .._ 250,00
Serlelles Interface fOr APPLE imagewriter 235,00
RS-252C - Karte (Serielle Schnittstelle) 175,00
7-80 Karte (ohne Software) Importkarte — 149,00
7-80 Karte (ohne Software) deutsche Herstellung 230,00
Disk-Controller (ohne Software) 4 Betrlebsarten 195,00
DISTAR- Lauf werk
voll APPLE kompatibel
hhalbspurfénig, Spur-0-Erkennung, 40 Spuren, 143 KB
Einzeln getestel fur 00S, ProD0S, CP/M und PASCAL
Original APPLE PASCAL-Manuals _ 75,00
(Satz=Language- und Operat ing System Reference Manual)
Der aktuelle Hinweis:
‘SOFTWARE/HARDWARE - Gelegenheiten
AIM/KIN/SYM/SUPERBOARO/NASCOM/SORCERER/APPLE Ua.
Aktuelle Preisliste gegen Freiumschlag anfordern.
Sofort ab Lager lieferbar:
Macintosh, Apple Ile /lIc
Unverbindliche Vorfiihrung und Beratung.
900 Heidelberg | Breslauerstr.29 Tel,06221/781500
Geschaftszetten: Mo. - Fr. 9-13 +14~ 18 Sa. 9-13 Une
Versandanschrift: 6900 Heidelberg 1 Dammweg 7
fa
33
HLIN X1, X2 AT Y, z.B. HLIN 0, 39 AT 10
plottet einen Balken (= Kastchen-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 (= Kastchen-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 (0-
15) im Schnittpunkt von X und Y.
2. 80-Zeichen-Textbildschirm
Wie ist nunmehr doppelte Lores-Grafik
méglich? Wir erinnern uns, da8 der Lores-
Grafikbildschirm speichermaBig mit dem
40-Zeichen-Textbildschirm identisch ist.
Schaltet man den Apple Ile mit
PR#3.
auf 80-Zeichendarstellung, dann umfaBt
der 80-Zeichen-Textbildschirm 24 Zeilen
zu je 80 Zeichen. Der Bildschirmspeicher
selbst ist dann in 2 Halften 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) Zunachst 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“ Halfte fiir die ungerade
oder die ,,untere“
Showing the first 100000 of 237007 characters.