Text content (OCR)
Nr. 8/85 August
DM 6,50, sfr 6,50, 6S 50, Lit 5900, hfl 7,50
j MAGAZIN FUR APPLE-COMPUTER
Laufwerktestprogramm
Graf-quattro
Double-Lores-Erweiterungen
AdreBverwaltung mit dBASE
Wordstar und FX-80
Fakultaten
Polaroid-System
Hurting -FACHBUCH-TIP
Apple ProDOS
fiir Aufsteiger
Mit ausfiihrlichen Programm-
beispielen
von Ulrich Stiehl
Band 2: 1. Auflage 1985,
208 S., kart., DM 30,—
ISBN 3-7785-1036-3
Begleitdiskette
DM 28,—
fiir Aufsteiger
Mit ausfiihrlichen
Ulrich Stiehl — Programmbeispielen
1
Hithig
Der zweite Band von ,,ProDOS fur
Aufsteiger’ ist wieder ein typisches
Tips- und Tricks-Buch, das viele
nutzliche Utilities und Hilfsroutinen
enthalt, die dem Applesoft- und As-
semblerprogrammierer den Umgang
mit ProDOS erleichtern sollen.
Zunachst wird eine bewuBt leichtver-
standliche Einfihrung in die
Applesoft-Programmierung unter
ProDOS gegeben, die sich insbeson-
dere an diejenigen Leser wendet, die
das alte DOS 3.3 nur noch ,am
Rande“ kennengelernt haben.
Im AnschluB daran wird gezeigt, wie
man einige Unzulanglichkeiten des
BASIC.SYSTEMs durch Tricks behe-
ben kann, z. B. Einlesen von Strings
mit Komma und Doppelpunkt, Laden
und Speichern von Zahlen als Binar-
dateien, Simulierung des fehlenden
MON-Befehls u. a.
Den Hauptteil des Buches bilden so-
fort einsatzfahige Utilities, die alle
klassischen ,,PflichtUbungen* ab-
decken, z. B. Dateileseprogramme
mit ASCII- und Hex-Dump, Dateiko-
pierprogramme, Diskettenformatier-
und -kopierprogramme, Disketten-
vergleichsprogramme, Konvertie-
rungsprogramme (DOS 3.3 nach
ProDOS), Bad-Block-Programme
u. a. Zur Anwendung dieser Utilities
sind keinerlei Assemblerkenntnisse
erforderlich.
Das Gesetz der Sattigung hat jeder schon
am eigenen Leibe verspirt. In der Psycho-
logie sprechen wir von abnehmender Reiz-
wirkung, in der Wirtschaftwissenschaft von
Marktsattigung: Die erste Portion eines
saftigen Steaks lassen wir uns einiges
kosten; auch das zweite Tournedos ist
vielen ihr Geld wert; aber nach dem dritten
Stick haben wir sprichwortlich die
Schnauze voll" — die Sattigung ist erreicht
Was wir zur Zeit in der Mikrocomputer-
branche erleben, ist sowohl eine psycho-
logische als auch eine dkonomische Satti-
gung: psychologisch deshalb, weil der
Reiz des Neuen verflogen ist, 6konomisch
deshalb, weil der Mikrocomputer inzwi-
schen in vielen Biros und Wohnungen
steht. Wie an den anderen Pionieren der
Mikro-Ara ist auch an der Firma Apple
diese ,Sattigung“ nicht spurlos vortiber-
gegangen: Man spricht bereits von weite-
ren Entlassungen — auch in Deutschland —,
und Ubernahmegeriichte halten sich hart-
nackig in allen gréBeren Wirtschaftsblat-
tern. Ein durchgreifendes Revirement in
der Fiihrungsetage in Cupertino hat mitt-
lerweile sein zweites Opfer gefunden:
editorial
Steven Jobs wurde nahegelegt, vom Vor-
stand in den Aufsichtsrat iberzuwechsein
— ein probates Mittel, um unliebsame
Manager aufs Absteligleis zu schieben.
Wie berichtet, hatte Steve Wozniak bereits
vorher seinen Hut genommen. Damit sind
die beiden legendaren Griinder des Apple-
Imperiums ins zweite Glied zuriickgetreten
Apple war die einzige Mikrocomputerfirma,
bei der der Begriff des ,Personal"-Com-
puters noch eine andere, tiefere Bedeu-
tung hatte, namlich die Bedeutung des von
einer Persénlichkeit geschaffenen und ge-
pragten Mikrocomputers, wobei ich hier
namentlich an Steve Wozniak als den tech-
nischen Kopf des Zweigespanns denke.
Dies wird sich nun andern, denn die Kopp-
lung Apple/Sculley hat einen schaleren
Sinn als die Assoziation Apple/Wozniak.
Woz stand flr Genie. Sculley steht fir
Pepsi. Nach den sieben fetten Jahren kom-
men jetzt die sieben anderen. Da ist kein
Platz mehr fiir geniale Eigenbrétler — oder
um mit G. B. Shaw zu sprechen
demanding bread is given a stone
[irr jf tas,
Ulrich Stiehl
Huthig
PUBLIKATION
Anzeigenleitung:
Jurgen Maurer, Tel, (06221) 48.9218
z. Zt. gilt Anzeigenpreisliste Nr. 3
> Vertriebsieitung}
= é : Ruth Biller, Tel. (06221) 489280
na hi (us) Tel. (06221) 489352 Produtionslstung: Gunter Sokolek
re ne ur in redaktionellen Angelegenheiten lung: Rainer Schmit
Dr. Alfred Hithig Verlag, Titelbild: Creative Computer
anruten)
Heidelberg 1985 Service, Mannheim
Pp
Technik
Testprogramme fiir Apple-ll-
Diskettensysteme
Analyse von Disketten, Laufwerk
und Controller
von Dipl.-Ing. Gerhard Berg
ProDOS
ProDOS fiir Anfanger
Teil 3: Geheimnisse von BSAVE
und BLOAD
von Ulrich Stieh!
Grafik
Graf-quattro Teil 3: Tricks Uber Tricks
von Nino G. Barbieri
Double-Lores-Applesoft-Erweiterungen
von Karl-Walter Bott
CP/M
AdreBverwaltungsprogramm mit dBASE II
von Ing. (grad.) Ernst Fischer
Wordstar druckt internationale
Zeichensatze
Frei definierte Sonderzeichen
auf dem FX-80 nutzen
von Dipl.-Ing. H. A. Rohrbacher
Pascal
Tips und Tricks in Pascal
Teil 1: Die versteckte Prozedur ,,Idsearch*
von Dieter GeiB
Assembler
Assembler-Pseudo-Opcode-
Referenztabelle
von Dr. Jurgen B. Kehrel
18
24
32
40
45
48
51
Fakultaten
von Roland und Manfred Fietkau
Mecki
Microsoft Basic leicht geMACht
Teil 4: Die Grafik
von Pit Capitain
Hobby
Grafik-Demonstrationen
von Ralf Knoke
Zeichenjagd. Ein Einzeiler
von Hans-Peter Lendle
Testberichte
Die Polaroid-Foto-Systeme
getestet von Thomas Buhner
und Prof. Dr. Klaus Hausmann
Das Bildverarbeitungssstem MAGIC
Siemens entdeckt neue Primzahl
TRICARD-Multifunktionskarte
fur Apple Ile
Copy-Killer jetzt in deutsch
Microfloppy mit 2 x 1 MByte
ProDOS-Debugger BUGBYTER
Beagle Graphics
getestet von Rolf W. Becker
Errata
SUPERDUMP und Apple IIc
RAM.FRE
Diversi-DOS 2-C
Inserentenverzeichnis
EEKER
JAGAZIN FUR APPLE-COMPUTER
56
60
67
69
71
74
74
74
76
76
76
77
50
70
68
78
Verlag: Erscheinungsweise: 12 Hette jahrlich,
Or. Alfred Hilthig Verlag GmbH
Im Weiher 10, Postfach 102869,
6900 Heidelberg
Telefon (06221) 489-0
Telex 4-6 1727 hued .
im Inland portofrei. Einzelheft DM 6,50
Vertrieb Handel
Bresiauer Str. 5, Postfach 1123,
{8057 Eching b. Munchen,
Tel. 089/319 1067, Telex 0522656
Erscheinungstag jeweils 1 Woche vor Monatsbeginn.
Jahresabonnement DM 72,-, einschlieBlich MwSt,
MZV — Modemer Zeitschriften Vertrieb GmbH.
Zahlungen: an den Dr. Alfred Hithig Verlag
GmbH, D-6900 Heidelberg 1: Postscheck-
konten: BRD: Karlsruhe 485 45-753;
Osterreich: Wien 7555888; Schweiz: Basel
40-24417; Niederlande: Den Haag 145728;
Italien: Mailand 47718; Belgien:
Brussel 723026; Danemark: Kopenhagen
34969; Norwegen: Oslo 994 24;
‘Schweden: Stockholm 5477 76-5
20451, BLZ 67250020.
Printed in Germany
Bankkonten: Landeszentralbank Heide!-
berg 67 207 341; BLZ 67200000; Deutsche
Bank Heidelberg 02165041; BLZ
672 70003; Bezirkssparkasse Heidelberg
Herstellung: Heidelberger Verlagsanstalt
Testprogramm fur
Apple-Il- sn Opn cone
Diskettensysteme
Analyse von Disketten,
Laufwerk und Controller
6 Peeker 8/85
PBB A eo —.. MpTECHNI
Im Rahmen der Artikelserie Uber Disket-
tensysteme bringen wir in dieser Ausgabe DISKTEST.B
ein Programm zum Testen des Apple-Dis- 1 sUnterprogramme zum Diskettensystem-Testprogramm
kettensystems. Das Programm ist ein un- G7 SVORUMAL cing GOunRhd Bere iziS 7868
erlaBliches Werkzeug fir alle, die sich na- 4 ORG $9090
her mit Floppy-Laufwerken beschaftigen. 5 8
6 SLOT EQU SFA ;Slot-Nr. # $10
yr
Insbesondere wird das Programm fur fol- 8 — sPositionier-Variablen
. 9 ZIELSP EQU SLOT+ ——; Ziel spur
gende Anwendungen gebraucht: 0 AKTSP —«EQU. ZIELSP+1 Aktuelle Spur
11 BERUHZ EQU AKTSP+1 —;Beruhigungszeit in msec
ie _ ‘. 12 SCHRITT EQU BERUHZ+1 ;Schritt-Zahler
Leet ale Controller- und Laufwerk 13 ALTSP —-EQU SCHRITT+1 Alte (vorige) Spur
5 “os
— Justage von Diskettenlaufwerken, Te cee eee Varan es
= Fehlersuche und Reparatur von Lauf- 17 BYTEL, EQU MUSTER+I © “pytevzanier
werken und Controllern, 18 BYTEH © EQU BYTEL+1 —; (2'er Komplement)
_ " 19 FEHLERL EQU BYTEHH] — ;Fehler-Zahler
Test von Disketten, . 200 FEHLERH EQU FEHLERL+1
- Anpassung von _ Nicht-Apple-Lauf- 21 MODE EQU FEHLERL = ;Schreib-Modus
werken, 22 MODEA — EQU MODE sabsolute Adressierung!!
4 23 INDEX EQU. ‘MODE Index-Z:
— Funktionsanalyse von Controller und 24 ‘ socgaes
Laufwerk. 25 «Interne 1/0-Adressen
26 TASTDAT EQU $C9O0 :Tastatur—Daten-Register
7 7 27 LAUTSP QU $CB30 Lautsprecher
Dazu verfiigt das Programm Uber folgende 28 TRIGGER EQU $cO40 Trigger (Utility Strobe)
i . 29 «
Eigenschaften: 30 sDisketten-Controller-Adressen
31 #Effektive Adresse = Basis-Adresse + Slot-Nr. + $10
— einfache Bedienung durch Menlsteue- Be eae BY be ee
196 ausschalten
rung, - ; 34 Q6EIN — EQU $CPED 1Q6 einschalten
— Fehlermeldungen bei Bedienungsfeh- 35 Q7AUS © EQU S$COBE :Q7 ausschalten
lern 36 0 Q7EIN EQU $cpar :Q7 einschalten
1 a7
- grafische Ausgabe zur besseren An- 38 + Q7 «Q6 = Funktion
haulichkei 39
Se eulchkel . 49 6 AUS AUS Lesen
— leichtes Oszillographieren durch spe- 41 * AUS EIN Schreibschutz priifen und
zielle Trigger-Signale und Betriebs- ge Controller 1nitialisieren
43 + BIN AUS Schreiben
arten,
5 , 44 » EIN EIN Datenregister laden
— Laden des Programms von Diskette 45 +
oder Kassette, =
f . 7 47 eLese-/Prif-Rout
— Betrieb aller Controller, die bus-seitig 4B + jellies
Apple-kompatibel sind, 9000: A6 FA 49._—«CLESEN © LOK SLOT :X = Slot-Nr. « $10
~ Betrieb aller Disketten-Laufwerke bi 9002: 49 008 LDA 40
etrieb aller Disketten-Lautwerke bis Zu 9004: 85 FE 51 STA FEHLERL = ;Fehler-Zahler 1éschen
80 Spuren. 9006: 85 FF 52 STA FEHLERH
9008: A4 FC 53 LDY BYTEL :Y = Byte-Zahler low Byte
900A: BD 8C CO 54 LESEN1 LDA Q6AUS,X ;Byte lesen
r 900D: 10 FB 55 BPL LESEN1 warten bis Byte komplett
1. Eingabe und Start des Pro- Q09F: C5 FB 56 CMP MUSTER ;mit Muster vergleichen
canes 9011: FOS = 87 BEQ LESEN2 ;beide gleich -> Sprung
g iS 9913: E6 FE 58 INC FEHLERL —;Fehler-Zahler erhéhen
9915: DO o2 59 BNE LESEN2
Da das Programm die hochauflésende 9017: E6 FF 60 INC FEHLERH
5 : 9919: ca 61 LESEN2 INY :Byte-Zahler erhohen
Grafik benutzt, muB dafur gesorgt werden, 991A: DD EE = 62 BNE LESEN1 (2'er Komplement)
daB das Programm oberhalb der Grafik- 901C: B6 FD 63 INC BYTEH
Seite 1 (ab $4000) im RAM liegt. Um dies ae 6S BNE UESEN) = BUCECZANNGE = <2) Bode
zu erreichen, mussen als erstes die fol- 66 a mo
genden Befehle eingegeben werden: a «
68 *Schreib-Routine
6 +
POKE 104, 64 70 MODE: Bit 7=x, Bit 6 ~> dauernd schreiben
ne Bit T=, Bit 6=1-> 1 Spur schreiben
POKE 16964, 0 Te a ee
3% +
9021: AG FA 74 SCHREIB LDX SLOT X = Slot-Nr. * $10
i ; 9023: 24 FE 75, BIT MODE iV Bit setzen = Bit 6
Mit dem Befehl POKE 104, 64 wird der 9025: AS FB 76 LDA MUSTER A = FluBwechselmuster
Anfang des BASIC-Programms von $0800 9927: DD 8D CO 77 CMP Q6EIN.X Controller initialisieren
; a 992A: 90 BF CO 78 STA Q7EIN,X ;Schreiben einschalten +
nach $4000 verschoben. Wegen einer Ei- 9920: DD BC cd 79 CMP Q6AUS.X ;... erstes Byte ausgeben
genart des Applesoft-Interpreters muB das 9930: 08 80 PHP
erste Byte des Programmspeicherbe- eral ai He na
reichs zu Null gesetzt werden. Dies ge- 9033: EA 83 NOP
schieht mit dem Befehl POKE 16384, 0. 9034: 08 84 SCHRO PHP
Mit dem Befeh! NEW werden alle anderen |_“P°°: *8 ba =
Peeker 8/85
Vektoren initialisiert, so daB ein neues Pro-
gramm eingegeben werden kann.
Danach muB das gesamte BASIC-Pro-
gramm eingetippt werden. Wenn die Ein-
gabe der Kommentare eingespart werden
soll, muB trotzdem zumindest die Zeilen-
nummer und ,,REM“ eingegeben werden,
da oft (insbesondere beim Anfang von Un-
terprogrammen) auf diese Zeilen gesprun-
gen wird. Die Zeilen, die nur einen Dop-
pelpunkt enthalten, dienen nur der besse-
ren Ubersichtlichkeit und kénnen ohne
weiteres weggelassen werden. Das As-
semblerprogramm braucht nicht extra ein-
gegeben zu werden, da es in Form von
DATA-Befehlen im BASIC-Programm be-
reits enthalten ist. Dies wurde so einge-
richtet, um ein einfaches Laden von Kas-
sette zu erméglichen, falls das Disketten-
system defekt ist. Nach dem Programm-
start wird Uber eine Prifsumme getestet,
ob die ,DATA“-Befehle, die das Assem-
blerprogramm enthalten, richtig eingege-
ben wurden.
Wer die Arbeit des Eintippens sparen will,
kann das Programm auch auf der Peeker-
Sammeldiskette beziehen.
Zur Anpassung an das verwendete Lauf-
werk k6nnen die folgenden Zeilen gean-
dert werden:
— Zeile 10140 definiert die Spurzahl des
Laufwerks (z.B. 35, 40, 77 oder 80). Der
maximale Wert flr AS ist 80.
— Zeile 10150 definiert die Anzahl der
Schrittmotor-Phasen pro Spur. Dieser
Wert ist normalerweise 2.
— Zeile 10160 definiert die Beruhigungs-
zeit (s. Peeker 3/85, S. 20), die das Pro-
gramm nach jeder Positionierung wartet,
bevor es mit dem Schreiben oder Lesen
anfangt. (Hinzu kommt noch die Ausfih-
rungszeit des BASIC-Programms.) BZ
wird in Millisekunden angegeben und darf
jeden Wert zwischen 1 und 255 haben. Fur
das Apple-Disketten-Laufwerk ist BZ nor-
malerweise 25. Fur andere Laufwerke muB
die Beruhigungszeit den Herstelleranga-
ben entnommen werden.
— Zeile 10170 definiert den Steckplatz
(Slot), in dem normalerweise der zu te-
stende Controller steckt. Der mit SN (1 bis
7) definierte Steckplatz wird beim Pro-
grammstart ausgewahlit.
—Zeile 10180 definiert das normalerweise
zu testende Laufwerk. Das mit LN definier-
te Laufwerk wird bei Programmstart aus-
gewahit. LN darf den Wert 1 oder 2 haben.
9036.
9938.
903A:
993e:
903F:
9042:
9044
9045:
9048:
904A:
‘9040
904E
9050
9952
9054:
9056:
9959.
995.
05D:
O05F:
9062:
9965,
9966:
9967:
9968.
9969:
06a.
pec:
996E:
9070:
9072:
9074:
9976.
9078.
907A:
go7c
907F
9981
ope
oge4
986
9988
908A
998
o8F:
9091
9993
9095,
9096
9998:
9994
999:
909E.
909F
90A1
9A
9086
90a9:
‘S0AB
90AD
oar
9082
9085:
9088.
908A
a6
ag
85
6
FO
Ad
84
BD
10
Do
56
30
co
Do
49
92
o2
FF
8D
ac
oA
00
EA
BE
FC
2
FE
EF
03
AA
8D
BC
DE
EF
FA
03
FE
FE
24
co)
ac
FB
4
FD
14
FF
FO
ac
FB
AA
DF
F4
FD
FO
FC
FA
ac
FB
00
FF
Fe
30
40
8
ES
00
co
co
co
co
oo
co
co
co
co)
co
co
a1
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
159
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
a7.
172
173
SCHRI CMP #892 ;12 microsec F.w.abstand?
BNE SCHR2 pnein -> Sprung
INC FEHLERH ;4 microsec zusatzlich
SCHR2 STA Q6EIN,X —;Byte ausgeben
CMP Q6AUS. x
BVS SPSCHR :1 Spur —> Sprung
sdauernd schreiben, bis eine Taste gedrickt wird
NoP
LDY TASTDAT Taste gedrickt?
BPL SCHRO jnein -> weiter schreiben
ENDSCHR LDA Q7AUS,X ;Schreiben ausschalten
RTS
‘#1 Spur schreiben
SPSCHR INC BYTEL ;Byte-Zahler erhohen
BNE SCHRO : (2'er Komplement)
INC BYTEH ;Byte-Zahler > 0 ->
BNE SCHR1 } weiter schreiben
BIT: MODEA rabsolute Adressierung! !
BPL ENDSCHR — ;kein Index -> Ende
Index flr Umdrehungsdauermessung schreiben
INDSCHR LDY +3 :3 Index Bytes
INDSCH1 LDA #$AA FluGwechselmuster 1010
STA Q6EIN,X ;Byte ausgeben
CMP Q6AUS, x
PHA
PLA
PHA
PLA
DEY Byte-Zahler erniedrigen
BEQ ENDSCHR © ;Zahler = 0 -> Ende
BNE INDSCHl = ;Zahler > 0 -> weiter
sAnzahl Bytes pro Spur messen (vom 1. zum 2. Index)
UMDR = LDX SLOT X = Slot-Nr. * $10
LDA #3
STA INDEX Index-Zahler setzen
UMDR1 = DEC INDEX :Index-Zahler erniedrigen
BEQ UMDRS 12, Index -> Sprung
LY #9 :Y = Byte-Zahler low Byte
STY BYTEH Byte-Zahler léschen
awarten bis Index vorbei
UMDR2 LDA QGAUS,X —:Byte lesen
BPL UMDR2 rwarten bis Byte komplett
INY Byte-Zahler erhéhen
BNE UMDRS
INC BYTEH
BMI UMDRS : > 32767 Bytes -> Fehler
UMDRS «CMP «#SFF :4 microsec Abstand?
BNE UMDR2 :nein = Index -> Sprung
wwarten auf Index
UMDR4 LDA Q6AUS,X —; Byte lesen
BPL UMDR4 iwarten bis Byte komplett
CMP +SAA :Index?
BEQ UMDRI :ja -> Sprung
INY ;Byte-Zahler erhdhen
BNE UMDR4
INC BYTEH
BPL UMDR4 : > 32767 Bytes -> Fehler
UMDRS = STY_BYTEL Byte-Zahler low Byte
RIN RTS
‘Trigger far Spur-Justage mit CE-Disk erzeugen
‘*BERUHZ = Mindest-Zeit bis zum nachsten Trigger in msec
SPTRIG LDX SLOT :X = Slot-Nr. # $10
SPTRIGL LDA Q6AUS,X — ;Byte lesen
BPL SPTRIG1 _;warten bis Byte komplett
BIT TASTDAT ;Taste gedrackt?
BMI RIN ja -> Abbruch
Cup +SFF :Orientierungsburst?
BNE SPTRIG! ;nein -> auf Burst warten
BIT LAUTSP sLautsprecher ansteuern
BIT TRIGGER ;Trigger ansteuern
JSR BERUH iwarten
BEQ SPTRIG simmer springen
*Positionier-Routine
POSIT LDA #0
Peeker 8/85
90BE:
90co
9oc7,
9009
9008
‘S9DE:
90DF
90E2
9955
90EA
90EB
90F1
90r4
90F6
90re
90FB
90rc
90FE:
9190
9191
9193
9194
919A
sige
o10F
9119
9116
9119
911A
911B
our:
9122
9128
9128
9128
9136
90Bc:
9000:
9107:
9198:
9112:
9113:
9115:
9118:
giic:
2 69
2 06
cs
90
2 AB
oc
1
Fe
1F
13
FF
FE
28
13
FE
6
08
FC
03
FA
80
FD
cn
13
a
FS
30
20
2c
iF
311 Bytes
90
91
91
90
1
91
a1
co
ce
28
1E
26
1E
174
175
176
arr
178
179
180
181
182
183
184
185
186
187
188
igo
190
i91
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
aul
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
1 1c
247
1 ic
STA SCHRITT ;Schritt~Zahler 1éschen
POSIT? LDA AKTSP saktuelle Spur laden
STA ALTSP und retten
SEC :Zielspur subtrahieren
SBC ZIBLSP ergibt Spurdifferenz in A
BEQ AMZIEL ;Spurdiff. = 0 -> am Ziel
BCS POSIT1 :Diff, > 0 — nach auBen
aktuelle Spur < Zielspur -> nach innen positionieren
EOR +$FF :Absolutwert der Spurdift
INC AKTSP aktuelle Spur erhdhen
Bec PosrT2
aktuelle Spur > Zielspur -> nach auBen positionieren
POSITL ADC +SFE :1 subtrahieren
DEC AKTSP aktuelle Spur erniedrigen
xSpurdifferenz in A mit Schritt-Zahler vergleichen
POSIT2 CMP SCHRITT
BCC POSITS ;Spurdiff, < Schrittzahl
> mit Spurdifferenz Rampe runterlaufen
LDA SCHRITT — ;Spurdiff. > Schrittzahl
* > mit Schritt-Zahler Rampe hochlaufen
wenn Rampe (Y) >= 12 wirde —> Y nicht mehr andern
POSITS CMP #12
BCS POSIT4 12 -> Y nicht andern
TAY A < 12 -> A nach Y laden
POSIT4 SEC C=1->
JSR PHASE } aktuelle Phase ein
LDA ZPHEIN,Y ;Einschaltzeit warten
JSR WARTE
LDA ALTSP :vorhergehende Phase
cue ee. mit C=0
JSR PHASE ausschalten
LDA ZPHAUS,Y ;Ausschaltzeit warten
JSR WARTE
INC SCHRITT ;Schritt-Zahler erhohen
BNE POSIT
ANZIEL JSR BERUH :Beruhigungszeit warten
cc saktuelle Phase aus
*Schrittmotor Phase ein- bzw. ausschalten
PHASEL LDA AKTSP yaktuelle Spur laden
PHASE2 AND #3, Phasen # maskieren und
ROL nach links schieben
* C (Phase aus/ein) ist jetzt Bit 0
ORA SLOT :Slot-Nr. « $19 addieren
TAX
LDA CONTR,X Phase ein-/ausschalten
RTS
*Beruhigungszeit warten (BERUHZ * 1 msec)
BERUK — _LDY BERUHZ
BERUHI LDA #10
JSR WARTE
DEY
BNE BERUHL
RTS
10 + 100 microsec
: = 1 msec warten
sWarte-Routine (verzégert um A * 100 microsec)
WARTE © LDX #18
WARTEL DEX
BNE WARTEL
NoP
SEC
SBC #1
BNE WARTE
RTS
;A um 1 erniedrigen
*Zeittabellen far Rampe: Phase ein / Phase aus
ZPHEIN HEX 0130282420181D1C1C1C1¢1C
1c 1¢ 1¢
ZPHAUS
ic 1¢ 1c
HEX 702C26221F1E1D1C1¢1¢1¢1¢
Peeker 8/85
944 @technik gg
Nachdem das Programm vollstandig ein-
gegeben ist, wird es mit ,SAVE
DISKTEST“ auf Diskette und/oder
»SAVE“ auf Kassette gespeichert. Mit Hil-
fe eines Texteditors sollte zusatzlich die
Text-Datei DISKTEST.START auf Disket-
te gespeichert werden. Damit kann das
Programm einfach durch Eingabe von
»EXEC DISKTEST.START“ geladen und
gestartet werden.
Zum Laden und Starten von Kassette wer-
den die folgenden Befehle benotigt:
POKE 104,64: POKE 16384,0: LOAD:
RUN
2. Bedienung des Programms
Nach dem Start des Programms wird auf
dem Bildschirm das Hauptmenii (s. Tabel-
le 1) mit allen Befehlen des Testpro-
gramms ausgegeben. Die Befehle werden
durch Eingabe des zugehdérigen Buchsta-
bens ausgefihrt, die in Klein- oder GroB-
schreibung eingegeben werden kénnen.
C-— Mit dem C-Befehl wird der Steckplatz
(Slot) ausgewahlt, in dem der zu testende
Controller steckt. Nach Eingabe des ,C“
springt der Cursor ans Ende der Befehls-
zeile. Nachdem die Steckplatz-Nummer (1
bis 7 — ohne RETURN) eingegeben wor-
den ist, priift das Programm, ob sich in
dem angegebenen Steckplatz tatsachlich
ein Disketten-Controller befindet. Wenn
nicht, wird eine Fehlermeldung ausgege-
ben. Wenn sich in dem Steckplatz ein
Disketten-Controller befindet, wird aus
dem Inhalt des PROMs eine Priifsumme
gebildet. Falls die Priifsumme_ nicht
stimmt, wird ebenfalls eine Fehlernach-
richt ausgegeben. Bei Controllern mit ab-
weichendem PROM kann die Fehlermel-
dung ignoriert oder das Programm fir die
andere Priifsumme entsprechend abgean-
dert werden (Zeile 30080).
D-— Mit dem D-Befehl wird das zu testen-
de Laufwerk (Drive) ausgewahlt. Jedes-
mal, wenn die Taste ,D“ gedriickt wird,
wird zwischen Laufwerk 1 und 2 hin- und
hergeschaltet. Das ausgewahlte Laufwerk
wird am Ende der Zeile angegeben.
E-— Mit dem E-Befehl wird das ausgewahl-
te Laufwerk ein- bzw. ausgeschaltet. Ist
das Laufwerk ausgeschaltet, so wird es
durch Driicken der Taste ,E“ eingeschal-
tet. Wird die Taste ,E“ das nachste Mal
betatigt, so wird das Laufwerk wieder aus-
geschaltet. Am Ende der Zeile ist angege-
ben, ob das Laufwerk momentan ein- oder
ausgeschaltet ist.
0—Der 0-Befehl 9 dient zur Positionierung
des Laufwerks auf die Spur 0. Nachdem
ein Laufwerk das erste Mal eingeschaltet
wurde, muB es zunachst auf Spur 0 posi-
tioniert werden, bevor weitere Befehle
ausgefihrt werden k6nnen.
1- Mit dem I-Befehl wird das ausgewahlte
Laufwerk von der momentanen Position
um jeweils eine Spur nach innen positio-
niert. Die jeweilige Spurposition wird am
Ende des P-Befehls ausgegeben.
A — Der A-Befehl positioniert das ausge-
wahite Laufwerk um eine Spur nach
auBen.
P — Mit Hilfe des P-Befehls kann direkt auf
eine beliebige Spur positioniert werden.
Nach Driicken der Taste ,,P“ springt der
Cursor an das Ende der Befehlszeile
Nachdem die gewinschte Spurnummer
und RETURN eingegeben wurde, positio-
niert das Laufwerk auf diese Spur.
H — Mit dem H-Befehl positioniert das
Laufwerk standig zwischen zwei beliebi-
gen Spuren hin und her. Damit kann der
Positioniermechanismus Uber langere Zeit
getestet werden. Nach Dricken der Taste
»H" mussen zunachst die beiden Spuren
eingegeben werden (jeweils mit RETURN
abgeschlossen). Danach startet das Posi-
tionieren, das jederzeit durch Driicken ei-
ner beliebigen Taste abgebrochen werden
kann. Zum leichteren Oszillographieren
wird nach jedem zweiten Positionieren ein
Trigger-Impuls am Utility-Strobe-Ausgang
(Game-|/O-Stecker Stift 5) erzeugt.
T — Der T-Befehl testet, ob die Diskette in
dem ausgewahliten Laufwerk schreibge-
schiltzt ist oder nicht.
F — Mit dem F-Befehl wird der beim
Schreiben und Lesen verwendete FluB-
wechselabstand ausgewahlt. Zur Wahl
stehen drei FluBwechselmuster mit den
drei beim Apple-Aufzeichnungsverfahren
vorkommenden _ FluBwechselabstanden
von 4, 8 und 12 Mikrosekunden. Jedes-
mal, wenn die Taste ,,F“ gedriickt wird,
wird auf das nachste Flu8wechselmuster
weitergeschaltet.
M— Mit dem M-Befehl wird die Betriebsart
(Modus) fir Schreiben und Lesen ausge-
wahit. Zur Wahl stehen: ,,dauernd", ,1
Spur“ und ,,ganze Diskette“. Jedesmal,
wenn die Taste ,M“ gedriickt wird, wird
die nachste Betriebsart fiir Schreiben und
Lesen vorgewahit.
10
L—Der L-Befehl startet das Lesen von der
Diskette. Nach jedem Lesevorgang wird
die Anzahl der gelesenen und der davon
fehlerhaften Disk-Bytes ausgegeben. Vor-
aussetzung ist natiirlich, daB die Diskette
vorher mit dem gleichen Flu8wechselmu-
ster beschrieben wurde. Je nach ausge-
wahlter Betriebsart hat der L-Befehl unter-
schiedliche Funktionen:
— Das Lesen in der Betriebsart ,dauernd"
bewirkt, daB das Lesen der momentanen
Spur standig wiederholt wird, bis es durch
Driicken einer beliebigen Taste abgebro-
chen wird. Nach jedem Lesevorgang wird
das Ergebnis auf dem Bildschirm ausge-
geben.
— In der Betriebsart ,1 Spur“ wird die
momentane Spur einmal gelesen.
— In der Betriebsart ,, ganze Diskette“ wer-
den alle Spuren der Diskette nacheinander
einmal gelesen und das Ergebnis fir alle
Spuren auf dem Bildschirm ausgegeben.
Nachdem alle Spuren gelesen wurden
oder das Lesen durch Driicken einer be-
liebigen Taste abgebrochen wurde, er-
scheint ein Unterment, das folgende
Funktionen zulabt:
— T — Der T-Befeh! bewirkt die Ausgabe
der Testergebnisse in Textform auf dem
Bildschirm. Dies ist die gleiche Form, in
der die Ergebnisse auch wahrend des
Tests selbst ausgegeben werden.
— D — Der D-Befehl bewirkt die Ausgabe
der Testergebnisse auf einem Drucker.
Das Programm geht davon aus, daB sich
das Druckerinterface in Steckplatz (Slot) 1
befindet. Ist dies nicht der Fall, muB Zeile
25610 im BASIC-Programm entsprechend
geandert werden.
— G — Durch den G-Befehl werden die
Testergebnisse grafisch in Form eines
Balkendiagramms auf dem Bildschirm
ausgegeben. Auf der waagerechten Achse
werden die Spuren aufgetragen und auf
der senkrechten Achse im logarithmi-
schen MaBstab die Anzahl der Lesefehler.
Striche am linken Bildrand markieren die
Werte fiir 0, 10, 100 und 1000 Lesefehler.
—H— Durch Driicken der Taste ,H" ge-
langt man zurtick zum Hauptmeni.
S — Der S-Befeh!| des Hauptmeniis startet
das Schreiben auf die Diskette. Zuvor wird
geprift, daB die Diskette nicht schreibge-
schitzt ist, und der Bediener wird gewarnt,
welche Spuren Uberschrieben werden.
Zur Bestatigung, daB wirklich geschrieben
werden soll, muB ein ,,J“ (Ja) eingegeben
werden.
— In der Betriebsart ,,dauernd“ wird unun-
terbrochen geschrieben, bis eine beliebi-
ge Taste gedriickt wird. Diese Betriebsart
ist speziell zum Oszillographieren des
Schreibvorgangs vorgesehen.
— In der Betriebsart 1 Spur“ wird die
momentane Spur einmal mit dem ausge-
wahlten FluBwechselmuster beschrieben.
—In der Betriebsart ,,ganze Diskette“ wer-
den alle Spuren einmal beschrieben.
W — Der W-Befehl erméglicht abwech-
selndes Schreiben und Lesen. Die Funk-
tion in den einzelnen Betriebsarten ist
gleich dem L-Befehl, auBer da8 unmittel-
bar vor jedem Lesen die momentane Spur
einmal beschrieben wird.
U — Der U-Befehl dient zur Messung und
Justage der Umdrehungsdauer (Dreh-
zahl). Die Abweichung von der nominalen
Umdrehungsdauer wird standig numerisch
und grafisch ausgegeben, bis eine beliebi-
ge Taste gedriickt wird. Positive Abwei-
chungen bedeuten, daB die Umdrehungs-
dauer zu hoch ist bzw. daB sich die Disket-
te zu langsam dreht. Die Abweichung soll
zwischen +1% und —1% liegen. Die
optimale Drehzahl liegt bei etwa +0,5 %
Abweichung.
J—Der J-Befehl dient als Hilfe beim Uber-
priifen und Justieren der Spurlage mit Hil-
fe einer Justage-Diskette (CE-Disk) von
BASF. Normalerweise braucht man beim
Arbeiten mit dieser Diskette den Index
zum Triggern des Oszillographen. Beim
Apple-Laufwerk, das ja keine Index-Abfra-
ge hat, kann man dann nur auf das Lese-
signal triggern, was sehr schwierig ist. Das
Programm schafft hier Abhilfe, indem es
einen kinstlichen Index generiert. Nach
Eingabe des J-Befehls wird pro Umdre-
hung ein Impuls am Utility-Strobe-Aus-
gang (Game I/O Stecker Stift 5) generiert.
Zusatzlich wird pro Umdrehung auch ein
»Klick“ des Lautsprechers erzeugt.
Vor Ausgabe des Trigger-Signales wird
noch Uberprift, ob sich das Laufwerk auf
der flr die Justage richtigen Spur befindet.
Bei 5,25-Zoll-Laufwerken ist dies bei ein-
facher Spurdichte Spur 16 und bei doppel-
ter Spurdichte Spur 32. Befindet sich das
Laufwerk nicht auf der richtigen Spur, wird
eine entsprechende Fehlermeldung aus-
gegeben.
Die Kontrolle und Justage der Spurlage
mit Hilfe der BASF-CE-Disk wird ausfihr-
lich in einem spateren Artikel erlautert.
Peeker 8/85
Accelerator” Ile macht
Ihren Apple® Il, Il Plus oder Ile
dreieinhalbmal schneller.
Jetzt laufen VisiCalc® Apple Writer, PASCAL, BASIC,
Datenbanken usw. endlich ohne langen Zeitverlust.
Stecken Sie einfach die ACCELERATOR lle Karte
in irgendeinen Slot und beobachten Sie,
wir Ihr Apple loslegt!
ACCELERATOR lle besitzt seinen eigenen schnellen
6502 Prozessor und 80 K-Byte Hochgeschwindigkeits-
speicher, einschlieBlich einer eingebauten schnellen
Sprachkarte und schnellem RAM-Speicherplatz fiir die
ROM-Sprache.
Direkt von Pandasoft (Titan Distributor fur Deutschland)
oder bei Ihrem Applehandler.
ThunderScan.”
Ein neues optisches Lesegerat, das beliebige
Vorlagen in MacPaint Ubertragt: Fotos, Zeich-
nungen, Landkarten und Illustrationen werden
in den Apple-magewriter eingespannt und von
einem Lesekopf, der das Farbband ersetzt,
abgetastet.
€ File fait Scanner Tools
Contrast = 1108
@ 32 Graustufen
@ 80 Punkte/cm Auflésung
bertragungsmaBstab 25% - 400%
Vorlagen bis 20 x 25cm
@ Nachtragliche Veranderung des Kontrasts
und der Helligkeit.
Thunder Sean
PANCASOFED...:c. ces
UhlandstraBe 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/31 04 23 - Telex: 185859
PANCAyOFES. icc. ses
UhlandstraBe 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/3104 23 - Telex: 185859
3 Druckerinterfaces fiir Apple ||+/e/
Stand der Technik. Kompatibel mit allen gangigen Druckern wie:
APPLE, EPSON, STAR, NEC, OKIDATA usw. Passende Treiber
software wird Uber Dip-Switch ausgewahlt.
Grappler Grafikfahiges Druckerinterface
Printer inertace Clas keine Wun e mehr offen laBt
lle Kontrolle
Uber 2 Dutzend Kommandos ermogli
Uber alle Méglichkeiten Ihres
Druckers. Jetzt auch mit
lle Features: Double Hires
Grafics und 80 Zeichen Dump
mittels Druckerpuffer nachrustbar
uber Bufferboard.
sunt
Fp Besitzt alle Vorziige des Grappler +
hat aber zusatzlich einen integrier-
ten 16 K Druckpuffer, der auf
32 oder 64 K aufriistbar ist.
Serielles Druckerinterface
speziell {ur den Apple Image-
writer.
Seriell-nach-Parallel-Wandler fiir
den lic im Kabel integriert
wie Hotlink, jedoch zusatzlich
imagewriter Emulation und Grafik
Software-Diskette.
panday@Ft>..... c=»
UhlandstraBe 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/31 04 23 - Telex: 185859
Sie haben einen Apple...
wir haben die
Software...
und die
‘Fordern Sie unseren Gratiskatalog a
ALLES FUR DEN APPLE II+, Ile, Ic UND MACINTOSH
Panday@Ft>..:.,. ce.
UHLANDSTR. 195 - D-
TEL.O30) 310423 - TELEX:185859
eve Foch Mcnoscer
Peeker 8/85
1
994999 SFIIFIFIAIIFIG
B - Mit Hilfe des B-Befehls erfolgt die
Riickkehr nach BASIC. Soll das Programm
anschlieBend weiterbenutzt werden, so ist
ein Warmstart mit ,GOTO 10000“ még-
lich. Zu beachten ist, daB nach Verlassen
des Programms keine DOS-Befehle mehr
funktionieren, da das DOS aus Sicher-
heitsgriinden ,abgekoppelt" wird. Soll mit
dem Diskettensystem weitergearbeitet
werden, so muB das DOS neu gebootet
werden.
3. Aufbau und Funktion des Pro-
gramms
Das Testprogramm besteht aus einem Ap-
plesoft-Programm fir die Tastatur-Eingabe
und Bildschirm-Ausgabe sowie einigen
Assembler-Unterprogrammen fir alle zeit-
kritischen Disketten-Operationen. Das
BASIC-Programm liegt ab $4000 und die
Assembler-Unterprogramme ab $9000 im
RAM. Das BASIC-Hauptprogramm be-
steht aus den Zeilen 10000 bis 10630. Die
Zeilen 11000 bis 29240 enthalten die Un-
terprogramme fiir die einzelnen Befehle
und die Zeilen 30000 bis 49090 solche
Unterprogramme, die von mehreren Be-
fehlen gemeinsam benutzt werden. In den
Zeilen 50000 bis 55520 erfolgt die Initiali-
sierung des Programms.
Eine ausfiihrliche Beschreibung des Pro-
grammablaufs ist aus Platzgriinden nicht
méglich. Es sollen deshalb nur einige Er-
lauterungen zur Ansteuerung des Control-
lers und Laufwerks gegeben werden.
Das Ein- bzw. Ausschalten des Laufwerks
und das Umschalten zwischen den beiden
Laufwerken erfolgt durch ,,PEEK“-Befehle
unmittelbar vom BASIC-Programm aus
(Zeile 33020 und 33030). Ebenso erfolgt
die Abfrage des Schreibschutzes durch
»PEEK“-Befehle (Zeile 36010 und
36020). Alle anderen Funktionen sind zeit-
kritisch und konnen deshalb nicht direkt im
BASIC-Programm ausgefiihrt werden,
sondern rufen Uber ,CALL“-Befehle As-
sembler-Unterprogramme auf. Fir alle As-
sembler-Unterprogramme wird in Adresse
250 ($O0FA) die Nummer des Steckplat-
zes (Slot) * 16 ibergeben (Zeile 30090).
Zum Positionieren wird in Adresse 251
bis 253 ($00FB bis $00FD) die Zielspur,
die momentane Spur und die Beruhi-
gungszeit Ubergeben (Zeile 34020 und
34030). Die Positionier-Routine ist im As-
sembler-Programm in Zeile 171 bis 247
enthalten. Um die Laufwerke beim Positio-
nieren unter gleichen Bedingungen wie im
echten Betrieb zu testen, wurde der Posi-
tionier-Algorithmus unverandert von DOS
3.3 Ubernommen.
12
Zum Schreiben wird in Adresse 251 bis
254 ($00FB bis $00FE) das FluBwechsel-
muster, die Anzahl der zu schreibenden
Disk-Bytes (im 2er-Komplement) und der
Schreibmodus ibergeben (Zeile 38030
und 37020). Die Schreib-Routine ist im
Assembler-Programm in den Zeilen 68 bis
119 enthalten.
a. Die Flu8wechselmuster
Das Testprogramm erlaubt die Auswahl
zwischen drei verschiedenen Flu8wech-
selmustern, die den drei beim Apple-Auf-
zeichnungsverfahren vorkommenden Fre-
quenzen bzw. FluBwechselabstanden ent-
sprechen. Beim Apple-Aufzeichnungsver-
fahren ist eine Bitzelle 4 usec lang. Die
Definition der DatenfluBwechsel ist die
gleiche wie bei FM (s. Peeker 3/85, S. 19/
20). Im Gegensatz zu FM und MFM wer-
den beim Apple jedoch tiberhaupt keine
Taktflu8wechsel geschrieben. Die Bytes,
die auf die Diskette geschrieben werden,
werden Disk-Bytes genannt, da sie nicht
direkt den eigentlichen Daten-Bytes ent-
sprechen. Um eine kontinuierliche FluB-
wechselfolge mit 4 wsec Abstand zu
schreiben, muB man demnach ein Disk-
Byte mit dem Bitmuster 11111111 = $FF
= 255 verwenden. Das _ Bitmuster
10101010 = $AA = 170 erzeugt eine
kontinuierliche Aufzeichnung mit 8 sec
FluBwechselabstand. Etwas schwieriger
wird es bei 12 usec Abstand, was einem
Bitmuster 100... entspricht, das sich nicht
in einem 8-Bit-Disk-Byte unterbringen
laBt. Mit einem einfachen Trick kann man
aber mit dem Controller 9- oder 10-Bit-
Disk-Bytes schreiben. Dazu werden die
ersten 8 Bits in den Controller ausgege-
ben und der Controller fiigt solange Nullen
hinzu, bis das nachste Disk-Byte ausge-
geben wird. Das Bitmuster 10010010 =
$52 = 146 erzeugt die Aufzeichnung
100100100 und damit das gewiinschte
Muster, wenn die Disk-Bytes im Abstand
von 36 usec (anstelle 32 usec) an den
Controller ausgegeben werden. Bild 1 bis
3 zeigt die Aufzeichnung fiir die drei Flu8-
wechselmuster.
b. Die Spurkapazitat
Die nominale Spurkapazitat einer Apple-
Diskette berechnet sich aus folgender
Formel:
Ks=U:B
In der Formel ist Ks die (unformatierte)
Kapazitat pro Spur in Disk-Bits, U ist die
Umdrehungsdauer der Diskette und B ist
die Zeitdauer einer Bitzelle.
Bei nominaler Drehzahl ist die Umdre-
hungsdauer U = 200 msec = 200 000
usec.
Der Original-US-Apple hat eine Oszillator-
frequenz von f = 14,31818 MHz, was ei-
ner Periodendauer von T = 1 : f = 69,841
nsec entspricht. Der Prozessortakt wird
durch 14fache Teilung erzeugt und hat
somit eine Periodendauer von 14-T = 978
nsec. Jeder 65. Prozessortakt wird jedoch
um 2 Oszillatorperioden verlangert und ist
somit 16 - T = 1117 nsec lang. Damit
betragt die mittlere Dauer eines Prozes-
sortaktes (64-14-T+16-T):65=912-
T : 65 = 980 nsec. Die Lange einer Bitzel-
le ist schlieBlich 4 Prozessortakte und da-
mit im Mittel 4-912 -T : 65 = 3648-T: 65
= 3919,7 nsec = 3,9197 usec.
Damit betragt die Kapazitat einer Spur Ks
= 200 000 : 3,9197 = 51024 Disk-Bits.
Fur 8-Bit-Disk-Bytes ist damit die Kapazi-
tat pro Spur 51024 : 8 = 6378 Disk-Bytes
und flr 9-Bit-Disk-Bytes 51024 : 9 = 5669
Disk-Bytes.
c. Das Schreiben
Der Schreibmodus wird durch Bit 7 und 6
in Adresse 254 ($00FE) definiert. Ein Wert
von 64 ($40) bedeutet, daB eine ganze
Spur geschrieben werden soll. Um sicher-
zustellen, daB auch bei Drehzahischwan-
kungen eine vollstandige, in sich ge-
schlossene Spur entsteht, werden 10 %
mehr Disk-Bytes geschrieben. An der
Stelle, wo das Schreiben ausgeschaltet
wird, entsteht eine sog. StoBstelle. Bild 4
zeigt ein Beispiel, wie eine solche StoB-
stelle entsteht. Der Abstand t zwischen
zwei gleichen FluBwechsein kann im Bei-
spiel — je nach momentaner Umdrehungs-
dauer — jeden Wert zwischen 0 und 16
sec haben. Je nachdem, welchen Wert t
hat, tritt beim Lesen der StoBstelle ein
Fehler auf oder nicht.
Ein Wert von 0 fur den Schreibmodus be-
deutet, daB ununterbrochen geschrieben
werden soll, bis eine Taste gedrickt wird.
d. Das Lesen
Beim Lesen werden in Adresse 251 bis
253 ($00FB bis $00FD) das Flu8wechsel-
muster und die Anzahl der zu lesenden
Disk-Bytes Ubergeben (Zeile 38030). Die
Anzahl der zu lesenden Disk-Bytes ist ge-
nau gleich der nominalen Spurkapazitat.
Das Assembler-Unterprogramm zum Le-
sen befindet sich in den Zeilen 47 bis 65.
Bei Riickkehr vom Unterprogramm wird in
Adresse 254 und 255 ($OOFE und $00FF)
die Anzahl der fehlerhaft gelesenen Disk-
Bytes tibergeben. Um die Software zu ver-
Peeker 8/85
ee eo
einfachen, wird beim Lesen nicht auf den
Spuranfang synchronisiert, sondern das
Lesen beginnt da, wo sich der Schreib-/
Lesekopf gerade befindet. Das Programm
liest also auch die beim Abschalten des
Schreibens entstandene StoBstelle, was
haufig ein fehlerhaftes Disk-Byte zur Folge
hat. Aus diesem Grund ist ein Ergebnis mit
einem Lesefehler praktisch als fehlerfrei
anzusehen und wird in der grafischen Dar-
stellung auch so ausgegeben.
e. Die Umdrehungsdauer
Die Messung der Umdrehungsdauer er-
folgt indirekt tiber eine Messung der Spur-
kapazitat. Fur ein einwandfreies Funktio-
nieren der Software (insbesondere von
Nibble-Kopierern) ist es erforderlich, daB
mindestens die nominale Spurkapazitat
auf die Diskette paBt. Fir alle Euro-Apples,
die mit einer von US-Apples etwas abwei-
chenden Oszillatorfrequenz arbeiten, be-
deutet das, daB die nominale Umdre-
hungsdauer nicht 200 msec betragt, son-
dern dann erreicht ist, wenn 6378 Disk-
Bytes auf eine Spur passen. Deshalb darf
die Umdrehungsdauer auch nicht — falls
vorhanden — mit der Stroboskobscheibe
oder mit einem Digitalzahler auf genau 200
msec eingestellt werden.
Fir die Messung der Spurkapazitat wird
zunachst eine ganze Spur mit 4 usec FluB-
wechselabstand (Flu8wechselmuster 255
= $FF) beschrieben. Unmittelbar danach
werden drei Disk-Bytes mit 8 usec FluB-
wechselabstand als Index aufgezeichnet.
Zum Erzeugen dieser Aufzeichnung wird
der Schreibmodus zu 192 ($CO) gesetzt.
Nach dem Schreiben wird gelesen und die
Anzahl der Disk-Bytes von Index zu Index
gezahit. Die zugehdrige Assembler-Routi-
ne ist in den Zeilen 122 bis 152 enthalten.
Bei der Riickkehr in das BASIC-Programm
enthalt Adresse 252 und 253 ($00FC und
$00FD) die Anzahl der Disk-Bytes. Adres-
se 254 ($00FE) enthalt eine Fehlermarke.
Wurde der Index nicht gefunden, weil z.B.
keine Diskette eingelegt war oder weil der
Schreib- oder Lesekreis defekt war, dann
ist die Fehlermarke ungleich null. Das BA-
SIC-Programm gibt dann anstelle der Ab-
weichung das Wort ,,Fehler“ aus. Voraus-
setzung fiir die Messung der Umdre-
hungsdauer ist also, daB der Schreib-/
Lesekreis einwandfrei funktioniert.
O
okey —— | Fr Disk-Byte >|
IBitzelle | | Bitzelle i
tee
\
Daten ($FF) Weslo tnberol ticle lene | iis[ 13] Daten ($52) bitabeia tote eto)
Magnetisierung = —»| <—[—» ] =| +] =— [> [= [> Magnetisierung = —»| I I
Leseimpulse Leseimpulse fL ial
Bale le
Bild 1: Aufzeichnung mit 4 «sec FluBwechselabstand
fl
eee
Bild 3: Aufzeichnung mit 12 «sec FluBwechselabstand
ia Disk-Byte: + 1. Umdrehung I ] I I
[Bitzelle
aaa i
| i 2. Umrehung
Daten ($AA) Were leoclea | 0 [era [poo [ate | on] Ente Seiroben
resultierende eer
Magnetisierung —]| I L I Magnetisierung I l I=] I
Leseimpulse fl SL n ial Lesesignal ipl fl ny n
a Daten feevOre Tie6O. Totton
Bild 2: Aufzeichnung mit 8 «sec FluBwechselabstand
Peeker 8/85
Bild 4: Beispiel einer StoBstelle bei einer Aufzeichnung von
8 usec FluBwechselabstand
13
Tabelle 1:
APPLE II DISKETTENSYSTEM TEST
- Controller-Steckplatz (Slot): 6
~ Laufwerk (Drive): 1
ausschalten: aus
Positionieren auf Spur 0
= 1 Spur nach innen
= 1 Spur nach aufen
~ Positionieren auf Spur:
- hin und her zwischen Spur
murHemua
1
- Schreibschutz testen
~- FluBwechselabstand: 4 microsec
Schreib/Lese Modus: 1 Spur
~ Schreiben
= Lesen
~ abwechselnd schreiben und lesen
srue3s
'
~ Umdrehungsdauer messen
Spur-Justage: Trigger generieren
Ausgang nach BASIC
woe
1
DISKTEST
19909 REM Testprogramm fur Apple II Diskettensysteme
19910 REM von Dipl.~Ing. Gerhard Berg - 2.3.1985
19920 =
1910 POKE 35,24:
IF WS > 9 GOTO 19210
19119 HOME : IF PEEK (104) < 64 GOTO 29190
19120 HM = 36864: HIMEM: HM
19130:
19149 AS = 35: REM Anzahl Spuren
19150 PH = 2: REM Phasen pro Spur
19160 BZ = 25: REM Beruhigungszeit in msec
19170 SN = 6: REM Steckplatz-Nr.
19180 LN = 1: REM Laufwerk-Nr.
19199 =
10200 GOSUB 50000:F = 0: GOSUB 30900
19219 GOSUB 49900: IF F > @ GOTO 19610
10220 :
19500 REM Hauptschleife
19519 GOSUB 45009: GOSUB 42000:F - 0
19520 FOR B = 1 TO MB: IF MIDS (BTS,B.1) = EZ$ GOTO 19540
19530 NEXT :B = 9
19549 IF FB(B) > 9 AND SN = 9 THEN F = 1: GOTO 19610
19550 IF FB(B) > 1 AND AE = 0 THEN F = 2: GOTO 10610
19560 IF FB(B) > 2 AND S(SN.LN) < 9 THEN F = 3: GOTO 19610
19570 IF FB(B) < 4 GOTO 19609
19580 GOSUB 36009: IF SS = 1 THEN F = 4: GOTO 19610
19599 GOSUB 41909: IF EZ$ = "N" GOTO 19500
19609 ON B GOSUB 11900, 12000, 13090, 14900, 15000. 16000.17000,
18090, 40920, 20000, 21000,22000, 23000, 25000.25000,
40020 ,27000, 28000, 29000
19619 IF F > 9 THEN GOSUB 49900
19620 GOTO 19509
19630 :
11909 REM Steckplatz auswahlen
11919 IF SN > 9 THEN AE = 9: GOSUB 33990
1102 B1 = 1: GOSUB 44099: GET EZ$:SN = ASC (EZS) - 48
11930 IF SN <1 OR SN > 7 THEN PRINT BELS;: GOTO 11920
11049 GOSUB 42009: PRINT "Bitte warten!";
11959 GOSUB 39009: GOSUB 42900: GoTO 31900
11960 :
12000 REM Laufwerk auswahlen
12910 LN = 1 + NOT (LN - 1): GOTO 32090
12020
13000 REM Laufwerk ein-/ausschalten
13010 AE = NOT AE: GOTO 33909
13920 :
14909 REM Nach Spur @ positionieren
1491 S(SN,LN) = MS + 4:S = 0: GOTO 34900
14920 :
15009 REM 1 Spur nach innen
15919 S = S(SN,LN) + 1: IF S > MS GOTO 49920
15920 GoTo 34990
15030
16900 REM 1 Spur nach augen
16919 S = S(SN,LN) - 1: IF S < @ GOTO 49020
16920 GoTo 34999
16930
17090 REM Positionieren
17019 B1 = 7: GOSUB 44999: GoSUB 35000
17929 IF S(SN,LN) < 9 THEN HV = S: GOSUB 14900:S = HV
17930 GoTo 34990
17040 =
18900 REM Hin und her positionieren
18919 Bl = 8: GOSUB 44999
18929 GOSUB 35900:SH(1) = S: PRINT " und ";
18039 GOSUB 35000:SH(2) = S: GOSUB 43000
18949 IF S(SN,LN) < 9 THEN GOSUB 14990
18959 FOR I = 1 TO 2:S = SH(I): GOSUB 34000
18969 IF PEEK (TD) > 127 GOTO 18989
18070 NEXT I:HV = PEEK (TG): GOTO 18050
18989 B1 = 8: GOSUB 44909: GoTo 42090
18090 :
29000 REM Schreibschutz testen
20010 GOSUB 36000: PRINT "Diskette ist "
29920 IF SS = 9 THEN PRINT "nicht ";
29030 PRINT "schreibgeschitzt.";: RETURN
20049 :
21000 REM FluBwechselabstand wahlen
21919 FM = FM + 1: IF FM = 4 THEN FM = 1
21920 AB = KS: IF FM = 3 THEN AB = INT (AB * 8 / 9)
21939 Bl = 11: GOSUB 44900
21940 PRINT SPC( FM < 3);FM « 4:
0:
22000 REM Schreib~/Lese-Modus wahlen
22010 MO = MO +1: IF MO = 4 THEN MO = 1
22020 Bl = 12; GOSUB 44900: PRINT MO$(MO);: RETURN
22030 :
23000 REM Schreib-Funktion
23019 IF MO < > 2 THEN GOSUB 43000
23920 ON MO GOTO 23109,37090,23200
23030
23190 REM Dauernd schreiben
23119 SM = 9:F1 = FM:Al = AB: GOSUB 3720: GOTO 42000
23120
23200 REM Ganze Diskette beschreiben
23210 FOR S = 0 TO MS: GOSUB 34909: GOSUB 37000
23220 IF PEEK (TD) > 127 GOTO 42009
23230 NEXT : GOTO 42000
23240
25000 REM (Schreiben und) lesen
25019 ON MO GOTO 25100, 25200, 25300
25020 :
25190 REM Dauernd (schreiben und) lesen
25119 GOSUB 43000: POKE 35,22: HOME
25120 GOSUB 25209: PRINT
25139 IF PEEK (TD) < 128 GOTO 25120
25140 GOTO 48900
25150
25200 REM Einmal (schreiben und) lesen
25219 IF B = 15 THEN GOSUB 37000
25220 GOSUB 39099: PRINT "Bytes gelesen: ":AB:
25230 PRINT " — Fehler: ";LF;: RETURN
25240
25300 REM Ganze Diskette (schreiben und) lesen
25310 GOSUB 43000: POKE 35,22: HOME : GOSUB 47000
25320 FOR S = 9 TO MS: GOSUB 34009
25330 IF B = 15 THEN GOSUB 37000
25349 GOSUB 39909:LF(S) = LF: GOSUB 46000
25350 IF PEEK (TD) > 127 THEN TS = S: GOTO 25409
25360 NEXT :TS = MS
25370
25400 GOSUB 42000: VTAB 25: POKE 35,24
25410 PRINT "T - Text-Ausgabe G — Grafik-Ausgabe"
25420 PRINT "D - Drucker-Ausgabe H ~ Hauptmenii;
25430 GOSUB 45000: FOR I = 1 70 4
25449 IF EZ$ = MIDS ("TDGH",I,1) GOTO 25469
25450 NEXT : PRINT BELS;: GOTO 25430
25460 TEXT : POKE 35,22 + (I = 4) * 2: HOME
25470 ON I GOTO 25500, 25600, 25800, 49000
25480 :
25509 REM Text-Ausgabe
25519 GOSUB 47090
25520 FOR S = 9 TO TS: GOSUB 46000: NEXT
25530 GOTO 25430
25540
25600 REM Drucker—Ausgabe
25610 PR# 1: POKE 35,20
25620 PRINT B$(11);" ";: GOSUB 21040: PRINT
25630 FOR I = 1 TO SP: PRINT "Spur Fehler ";
25640 NEXT : PRINT
25659 FOR I = 0 TO ZE - 1
25660 FOR J = 0 TO MS STEP ZE
25670 S = 1+ J: IF S > TS GOTO 25700
25680 LF(S):L1 = LEN ( STRS (LF))
25699 PRINT " ";S; SPC( 3 + (S < 10));:LF; SPC( 8 ~ Ll):
25700 NEXT : PRINT : NEXT
25710 INt 0: PR# 0: GOTO 25450
microsec": RETURN
14
Peeker 8/85
~BUCHA=SHOP
Apple DOS 3.3
von Ulrich Stich!
2. Aufl. 1984, 203 S., kart.,
DM 28,-
Dies ist die erste deutschspra-
chige Darstellung des Disket-
tenbetriebssystems DOS 3.3
fir den Apple IV/ll Plusille, die
sich sowohl an Applesoft als
auch an Assembler-Program-
mierer wendet. Sinngema8 ist
das Buch zweigeteilt:
Der erste Teil behandelt aus-
fiihrlich die dem Applesoft-Pro-
grammierer zur Verfigung ste-
henden DOS-Befehle, wobei
die Textfiles wegen ihrer gro-
Ben Bedeutung und der ver-
gleichsweise komplizierten
Handhabung besonders darge-
stelit werden. Viele Texttile-
Tricks werden hier zum ersten-
mal geschildert
‘Aber auch im zweiten Teil fin-
det der reine Applesoft-Pro-
grammierer insbesondere in
dem Kapitel ,Vermischte Tips,
Tricks und Patches" zahlreiche
Anregungen. Im ibrigen ist der
zweite Teil fir Assembler-Pro-
‘grammierer gedacht. Neben ei-
ner detaillierten Beschreibung
der DOS- interna enthait dieser
Teil elf vollstandige RWTS-An-
wenderprogramme —z. B.
CPM-Refiner, DOS-lose Da-
tendisk, TSL-Maker, File-
Reader, Pseudo-Disk-Driver
und Fastbrun-Routine — die
Techniken enthiillen, die bis-
lang noch niemals publiziert
worden sind. Dieses DOS-
Buch ist deshalb der unent-
behrliche Begleiter fir jeden
Apple-Programmierer.
Apple Il
Basic Handbuch
von Douglas Hergert
304 Seiten, 116 Abb.
DM 32,-
Das Buch ist als Nachschlage-
werk konzipiert, daB seinen
Platz neben jedem APPLE Il,
I+ und Ile haben sollte. Es
richtet sich an Anfanger und
fortgeschrittene Program-
mierer.
BASIC
HAND
BUCH
Aus der Praxis heraus prasen-
tiert der Autor Tips und Vor-
schlage, die das Programmie-
ren eichter und zugleich effi-
zienter machen. Alle Applesoft-
und Integer-BASIC-Begriffe
sind alphabetisch aufgelistet
und werden eingehend erklart.
Peeker 8/85
Dazu werden alle DOS-Befehle
(neben vielen Begritfen der
Computerterminologie) vorge-
stellt.
Beispielprogramme zeigen
dem Nutzer, wie jeder Befeh!
funktioniert und helfen, die rich-
tige Anwendung zu uben. Un-
ter anderem lernt der Leser
den besten Weg, um FOR/
NEXT-Schleifen und IF/THEN-
Entscheidungen fur seine
Zwecke einzusetzen.
Durch die prazise und leicht
verstandliche Sprache des Au-
tors werden auch schwierige
Befehle einfach in der Anwen-
dung.
Apple Maschinen-
sprache
von Don und Kurt Inman
1984, 208 S.., zahir. Abb. und
Tabellen, DM 49,-
APPLE
MASCHINEN
Dieses Buch ist wahrscheinlich
die beste Einfihrung in die
6502-Programmierung fir den-
jenigen Assembler-Anfanger,
der zuvor noch nie ein Maschi-
nenprogramm geschrieben
hat.
Aus dem Inhalt:
Applesoft Il BASIC — kurzge-
faBt—Allles iber Zeichen — Al-
les Uber Speicher Alles diber
Maschinenbetehle — Maschi-
nenprogramme mit BASIC ein-
geben — Graphik — Text— Ton —
Arithmetik — Was tun mit den
Maschinenprogrammen
Apple Il
leicht gemacht
von Joseph Kascmer
1984, 185 S., zahir. Abb., kart.,
DM 28,-
Dies ist ein Buch, wie es sich
jeder Apple-Anfanger nur win-
schen kann: Schrittweise,
leichtverstandliche Anleitung
zum Umgang mit dem Apple
mit einigen durchsichtigen, un-
komplizierten Beispielen in Ap-
plesoft, die ihn nicht Abschrek-
ken, sondern ermutigen sollen,
sich mit dem Gerat naher ver-
traut zu machen. Damit ist ,Ap-
ple I! leicht gemacht" das idea-
le Einsteigerbuch fir den rei-
nen Anwender, der nicht nur
aut den Knopf driicken", son-
der zumindest einige Details
aus der Black Box namens Ap-
ple erfahren will
‘Aus dem Inhalt:
Kontrolle des Gerats — Schrei-
ben und Zeichnen auf dem
Bildschirm — Geheimnisvolle
Ablaufe: Programme — Ver-
schiedene Eingritfsméglichkei-
ten Mobile Speicher: Disket-
ten—Kontrollméglichkeiten —
Das Innenleben
Apple Assembler
Tips und Tricks
von Ulrich Stieh!
1984, 226 S., 3 Abb., kart.,
DM 34,-
Apple Assembler wendet
sich an alle, die bereits Antan-
gerkenntnisse der 6502-Pro-
grammierung haben — 2. B.
aufgrund des Buches ,Apple
Maschinensprache" — und nun-
mehr ein Nachschlagewerk fir
ihren Apple Il Plus/lle/ilc su-
chen, in dem alle wichtigen
ROM-Routinen sowie eine
Vielzahl sonstiger Hilfspro-
gramme in einer systemati-
schen Form zusammengestellt
werden. Insgesamt umfaBt die-
ses Buch iiber 40 Utilities, dar-
unter mehrere vollig neuartige
Programme wie Double-Lores,
Double Hires, Screen-Format
ua.
Der erste Teil enthalt ein Repe-
titorium der wichtigsten Befeh-
le, Adressierungsarten und
sonstigen Besonderheiten des
Im zweiten Teil werden alle
‘Adressen des Monitors zusam-
mengestellt, die fiir Assembler-
Programmierer von Nutzen
sein konnen. Darlber hinaus
findet der Leser Unterroutinen
fir hexadezimale Addition!
Subtraktion/Multiplikation/Divi-
sion, Binar-Hex-ASCII-Um-
wandlung usw.
Der dritte Teil befaBt sich mit
der Speicherverwaltung der
Language Card und der Ile-
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 Ap-
plesoft-ROM gewidmet und li-
stet eine groBe Anzahl nitzli-
cher Interpreter-Adressen. Bei
den Utility-Programmen liegt
das Schwergewicht auf Flie8-
kommamathematik einschlieB-
lich Print Using.
Der letzte Teil behandelt den
Text- und Graphikspeicher.
Neben einem professionelien
Maskengeneratorprogramm
werden auch Routinen zur
Double-Lores- und Double-Hi-
res-Grafik vorgestelt.
Arbeiten mit dem
Macintosh
von N. Hesselmann
416 Seiten, 320 Abb. DM 54,—
Das Buch erklart den Umgang
mit dem Macintosh von Grund
auf, wobei auch auf elementare
Dinge eingegangen wird, wie
z. B. die Benutzung der Tasta-
tur und der Maus, das Einlegen
von Disketten und den System-
start. Ganz besonderes Augen-
merk wird auf die Erklarung der
spezielien Software-Umge-
bung des Macintosh gelegt,
‘wobei das Menti- und Fenster-
konzept sowie das Anwahlen
durch Piktogramme gekenn-
zeichneter Funktionen klar dar-
gestellt wird.
Der Umgang mit den Program-
men MacPaint und MacWrite
wird erlautert; dies geschieht
teilweise anhand von Beispie-
len, die leicht nachvollzogen
werden kénnen. Ein umfangrei-
ches Kapitel ist dem fir den
Macintosh erhaltlichen Micro-
soft-BASIC gewidmet,
BASIC Ubungen
fiir den Apple
von J. P. Lamoitier
1983, 252 S., zahir. Abb., kart.,
DM 38,-
Das Buch ist konzipiert, allen
Apple-Anwendern Applesoft-
BASIC durch praktische Ubun-
gen an Hand von reellen Pro-
grammen beizubringen. Daten-
verarbeitung, Statistik, kom-
merzielle Programme, Spiele
und vieles mehr. Jede Ubung
beinhaltet eine Beschreibung
der Problemstellung, eine Ana-
lyse der Losungsméglichkei-
ten, ein FluBdiagramm und ein
fertiges Programm samt Pro-
belauf.
‘Aus dem Inhalt:
Ihr erstes BASIC-Programm —
Fiu8diagramme — Ubungen mit
Integerzahien — Elementare
Beispiele aus der Geometrie—
Allgemeine Ubungen aus der
Datenverarbeitung — Mathema-
tische Berechnungen — Kauf-
mannische Berechnungen—
Spiele — Operations Research
= Statistik
Apple ProDOS
fiir Aufsteiger
Band 1
von Ulrich Stieh!
1984, 202 S., kart., DM 28,-
ProDOS ist das neue ,profes-
sionelle DOS" (Professional
Disk Operating System) fir den
Apple lle sowie den mit einer
Language Card ausgestatteten
Appie Il Plus. Band 1 befaBt
sich mit den theoretischen
Grundlagen von ProDOS, der
internen und externen Spei-
cherorganisation und enthait
grundlegende Beispielpro-
gramme fiir Assembler-Pro-
grammierer sowie generelle
Untersuchungen zum BASIC-
SYSTEM. Da ProDOS uber er-
heblich vielfaltigere und lei-
stungsfahigere, zugleich je-
doch erheblich kompliziertere
Dateistrukturen verfugt, sind
theoretische Kenntnisse von
ProDOS unabdingbar, wenn
man die Features von ProDOS
voll ausschépfen wil
Aus dem Inhalt:
Ein erster Uberblick— ProDOS
und DOS 3.3 — Interne Spei-
cherorganisation— Externe
Speicherorganisation ~ MLI
(Machine Language Interface)
—ProDOS fiir Applesott-Pro-
grammierer
15
25720
25800 REM Grafik-Ausgabe
25810 VTAB 21:H1 = INT (MS / 40) + 1:H2 = 5 # HL
25820 FOR I = 0 70 TS STEP H2
25830 HTAB 2 +I 6 / (7 * Hl): PRINT I;: NEXT
25840 HGR : HCOLOR= 3:SF = 152 / LOG (AB)
25850 FOR I = 9 TO 3:Y = 152 - LOG (19 } I) * SF
25860 HPLOT 9,Y T0 2,Y: NEXT
25870 FOR I = 0 TO TS STEP HI
25880 X= 10 + I * 6 / H1: HPLOT X,153 TO X,154
25890 IF I = INT (I / H2) * H2 THEN HPLOT TO X,157
25900 NEXT
25910 X1 = 6 + H1:X = Xl: HPLOT X1,152
25920 FOR S = 9 TO TS
25930 LF = LF(S): IF LF = 0 THEN LF = 1
25949 Y = 152 - LOG (LF) * SF: HPLOT 70 X,Y
25950 X = X +6 / Hl: HPLOT TO X,¥: NEXT
25960 HPLOT TO X,152: HPLOT TO X1,152: GOTO 25430
25970
27000 REM Undrehungsdauer messen
27010 GOSUB 43900: POKE 35,22: HOME
27020 HGR : HCOLOR= 3:Y
27030 X1 = 2 # KS / 100: REM 12,
27040 FOR X = 149 — Xl T0 140 + X1 STEP Xl
27950 HPLOT X, 70 X,154: NEXT
27060 VTAB 21: HTAB 2: PRINT "-12"; TAB( 38): "+12";
27070 IF PEEK (TD) > 127 GOTO 48900
27080 SM = 192:Al = KS * 1.1:F1 = 1: GOSUB 37020
27090 CALL UR: VTAB 22: HTAB 18: CALL ZL
27100 IF PEEK (254) = 9 GOTO 27120
27119 PRINT "Fehler";: GOTO 27070
27120 BY = PEEK (252) + 256 * PEEK (253) +1
27130 UT = INT ((BY - KS) * 1000 / KS + 0.5) / 10
27140 UA = ABS (UT):UTS = STRS (UA): IF UA > 20 GOTO 27110
27150 IF UA > 9 AND UA < 1 THEN UTS "+ UTS
27160 UTS = VZS( SGN (UT) + 2) + UTS
27170 IF UT = INT (UT) THEN UTS = UTS + ".0"
27180 PRINT UTS; "2";
27190 X = 149 + (BY - KS) * 2: IF X <0 THEN X= 0
27200 IF X > 279 THEN X = 279
27210 HPLOT X,Y:¥ = Y +1: IF ¥ < 185 GOTO 27070
27220 GOTO 27020
27230
28000 REM Trigger fir Spur-Justage generieren
28019 IF S(SN,LN) < > JS THEN F = 7: RETURN
28020 GOSUB 43000: POKE 253,190: CALL JR: GOTO 42000
28030
29000 REM Ausgang nach BASIC
29010 HOME : POP : END
29020 :
29100 PRINT "Bitte geben Sie ein:": PRINT
29110 PRINT "POKE 194,64": PRINT "POKE 16384, 0"
29120 PRINT : PRINT "und laden Sie das Programm neu!"
29130 GOTO 29210
29140
29200 HOME : PRINT "Fehler in 'DATA'- Befehlen!"
29210 PRINT CHRS (7);: CLEAR : END
29220
29230 REM
29240
30000 REM Steckplatz (Slot) auswahlen
30919 FS(5) = LEFTS (FS(5).35) + STRS (SN) + "1"
30920 PA = 49152 + 256 » SN: FOR I = 1 70 7 STEP 2
30030 IF PEEK (PA + I) = CE(I) GOTO 30959
30040 SN = 0:F = 5: RETURN
30050 NEXT :SA = 49280 + 16 » SN
30060 PS = 0: FOR I = 9 TO 255
30070 PS = PS + PEEK (PA + I): NEXT
30080 IF PS < > 31558 THEN F = 6
30090 POKE 259,SN * 16
30100 RETURN
39110 :
31000 REM Steckplatz Nr. ausgeben
31010 IF SN = 0 THEN RETURN
31920 Bl = 1: GOSUB 44909: PRINT SN
31030 :
32000 REM Laufwerk auswahlen
32019 B1 = 2: GOSUB 44990: PRINT LN: GOSUB 34950
52020 :
33000 REM Motor ein-/ausschalten
33010 Bl = 3: GOSUB 44090: PRINT AES(AE)
33020 HV = PEEK (SA + 8 + AE): REM Motor ein/aus
33030 HV = PEEK (SA + 9 + LN): REM Laufwerk 1 / 2
33040 REM In obigen Befehlen keine "POKES" verwenden!
33050 RETURN
33060
34000 REM Positionieren nach Spur 'S'
34910
34920
34930
34049
34950
34960
34070
34980
35000
35010
35020
35030
35040
35050
35060
35070
35980
36000
36019 HV
36920 HV
36030
37000
37010
37020
37030
37040:
38000
38010
38920
38030
38040
38050
39000
39010
39020
39030 :
49000
49010
49020
40030
41000
41019
41920
41930
41040
41950
41960
41070 =
42000
42010
42020
42030:
43000
43010
43020
43050
43040
44900
44910 V
44920
44030:
45000
45010 EZ
45020
45030
45500
45510
45520
45530:
46000
46010
46920
46930
46940
46950
47000
47010
47020
47030
47040
47050
47060
47070
48900
48010
48920
48930
IF S$ = S(SN,LN) THEN RETURN
POKE 251,S * PH: POKE 252,S(SN,LN) + PH
POKE 253,BZ: CALL PR
S(SN,LN) = S: IF B > 13 THEN RETURN
REM Spur + ausgeben
Bl = 7: GOSUB 44000: IF S(SN,LN) < 0 THEN RETURN
PRINT S(SN,LN);: RETURN
REM Spur-Nr. eingeben
H = POS (9) +1: GOTO 35930
PRINT BEL$;
VTAB V: HTAB H: CALL ZL
INPUT "";EZ§: IF EZ$ = "" GOTO 35920
S = VAL (EZ$): IF S < 0 OR S > MS GOTO 35920
IF INT (S) < > S OR STRS (5) < > EZS GOTO 35920
VTAB V: HTAB H: CALL ZL: PRINT S;: RETURN
REM Schreibschutz prifen
= PEEK (SA + 15):SS = PEEK (SA + 14) > 127
= PEEK (SA + 12): RETURN
REM Schreiben
Al = AB 1.1:F1 = FM:SM = 64
GOSUB 38000: POKE 254, Si
CALL SR: RETURN
REM Byte-Anzahl und Flufwechselabstand setzen
Al = 65536 - INT (Al): REM 2'er Komplement
A2 = INT (Al / 256):Al = Al - A2 # 256
POKE 251,FM(F1): POKE 252,Al: POKE 253,A2
RETURN
REM Lesen
Al = AB:F1 = FM: GOSUB 38900: CALL LR
LF = PEEK (254) + 256 # PEEK (255): RETURN
REN Fehler-Nachricht ausgeben
GOSUB 42009: FLASH : PRINT FS(F);
NORMAL : PRINT BELS;: RETURN
REM Lésch-Warnung ausgeben
T$ = "Spur '" + STRS (5(SN,LN)) + " wird"
IF MO = 3 AND B < 17 THEN T$ = "Alle Spuren werden"
POKE 35,24: VTAB 23: PRINT T$;" geléscht!"
PRINT "weiter? (J/N) ";
PRINT BELS;: GET EZ$: GOSUB 45590
IF EZ$ < > "J" AND EZ$ < > "N" GOTO 41959
REM Zeile 23 und 24 léschen
POKE TT,0: VTAB 23: HTAB 1: CALL ZL.
VTAB 24: CALL ZL: RETURN
REM Stop-Hinweis ausgeben
GOSUB 42000: INVERSE
PRINT "STOP MIT JEDER TASTE";
NORMAL : RETURN
REM Cursor zum Ende der Befehlszeile
= Bl + 2:H = LEN (BS(B1)) + 6
VTAB V: HTAB H: CALL ZL: RETURN
REM Zeichen-Eingabe ohne Cursor
= PEEK (TD): IF EZ < 128 GOTO 45910
POKE TT,0:EZ$ = CHRS (EZ - 128)
REM Klein- in GroSbuchstaben umwandeln
IF EZ$ < = CHRS (96) THEN RETURN
EZS = CHRS ( ASC (EZ$) - 32): RETURN
REM Fehler pro Spur ausgeben
Hl = INT (S / ZE):V=S ~ ZB «HL +2
H = Hl * 40 / SP + 1: VTAB V: HTAB H + (SP < 4)
PRINT S; TAB( H + 3 +3 # (SP < 4));LF(S):
RETURN
REM Text-Uberschrift
SP = INT (MS / 20) +1
28 = INT (MS / SP) +1: INVERSE
FOR I = 0 TO SP - 1: HTAB I * 40 / SP +1
IF SP < 4 THEN PRINT "SPUR FEHLER";
IF SP > = 4 THEN PRINT "SP.FEH."
NEXT : NORMAL : RETURN
REM Zurtick zum Hauptmend
GOSUB 42900: INVERSE
PRINT "WEITER MIT JEDER TASTE"
NORMAL : GOSUB 45000: TEXT
Peeker 8/85
4gtechni
94444944
48949 55170 DATA 169,3, 133,254, 198, 254,240, 36
49900 REM Meni ausgeben 55180 DATA 160,0, 152,253, 189,149, 192, 16
49910 HOME : HTAB 5: INVERSE : PRINT TIS 55190 DATA 251,200,208, 4,230,253,48,20
49020 NORMAL : PRINT 55200 DATA 201,255, 208,240,189, 140, 192,16
49930 FOR B = 1 TO MB:BS = MIDS (BTS,B,1) 55210 DATA 251,201,170,240,223, 200,208,244
49040 IF BS < >" " THEN PRINT BS:" — ":BS(B) 55220 DATA 230,253, 16, 249, 132,252, 96, 166
49050 PRINT : NEXT 55239 DATA 250,189,149, 192, 16,251,44,0
49969 GOSUB 21929: GOSUB 22020: GOTO 31000 55240 DATA 192,48, 243,201,255, 208, 242,44
49070 55250 DATA 48, 192, 44,64, 192.52,8, 145
49980 REM 55269 DATA 240,229, 169,0, 133,254, 165,252
49990 55270 DATA 133,255.56, 229,251,249, 49,176
50000 REM Programm-Initialisiserung 56280 DATA 6,73, 255,250,252, 144, 4,105
59019 TIS = "APPLE II DISKETTENSYSTEM TEST” 55299 DATA 254,198,252, 197,254, 144,2, 165
59020 SPEED= 100: HONE 58300 DATA 254,201, 12,176, 1,168, 56,32
59030 HTAB 5: INVERSE : PRINT TIS: NORMAL : PRINT 58310 DATA 252, 144, 185,31, 145,32, 19,145
50949 PRINT TAB( 6); "von Gerhard Berg - 2.3.1985" 585320 DATA 165,255,24,32,254, 144, 185,43
59050 VTAB 23: HTAB 1: INVERSE 58330 DATA 145,32, 19, 145,230,254, 208, 198
59060 PRINT "PROGRAMM-DISKETTE AUS LAUFWERK NEHMEN” 85349 DATA 32,8, 145,24,165,252,41,3
59070 HTAB 5: PRINT "UND LEERE DISKETTE EINLEGEN!" 58350 DATA 42,5, 250,170, 189, 128, 192,96
59080 NORMAL : SPEED= 255 55360 DATA 164,253, 169, 19,32, 19, 145,136
50990 VTAB 12: HTAB 15: PRINT "Bitte warten" 55370 DATA 208, 248,96, 162, 18,202,208, 255
50100 56380 DATA 234,56, 233, 1,208,245,96,1
51000 AE = 0:FM = 1:MO = 2:KS = 6378:JS = 16 + 16 + (AS > 58390 DATA 48,40,36,32,39,29,28,28
40) 55400 DATA 28, 28,28, 112,44,38,34,31
51019 MS = AS - 1: DIM LF(MS),S(7,2) 56419 DATA 30, 29,28, 28,28, 28,28
51920 FOR I = 9 T0 7:S(I,1) =~ 1:S(I,2) =~ 1: NEXT 55500 IF PS < > 45695 GOTO 29200
51030 BELS = CHRS (7):ZL = 64668, 55510 INt 0: PRE O
51040 FM(1) = 255:FM(2) = 170:FM(3) = 146 55520 POKE 35,22:WS = 1: RETURN
51950 CE(1) = 32:CE(3) = 9:CE(5) = 5:CE(7) = 60
51060 TD = 49152:TT = 49168:TG = 49216
51070 LR = HM:SR = HM + 33:UR = HM + 110 DISKIES ISIGHT
51080 JR = HM + 159:PR = HM + 186 POKE 104,64
51999 AE$(Q) = "aus": AES(1) POKE 16384,0 4
51109 VzS(1) = "-":v2$(2) =" ":VZ$(3) = "+" RUN DISKTEST =
51110 BTS = "CDEOIAPH TFMSLW UJB"
51120 MB = LEN (BTS): DIM B$(MB) ,FB(MB)
51130
52000 FOR I = 1 70 MB: READ BS(I): NEXT
52019 DATA "Controller-Steckplatz (Slot) #:"
52020 DATA “Laufwerk (Drive) #:"
52030 DATA "Laufwerk ein-/ausschalten:"
52040 DATA Positionieren auf Spur 0
52059 DATA 1 Spur nach innen,1 Spur nach aufen
52060 DATA "Positionieren auf Spur:"
52070 DATA hin und her zwischen Spur
82080 DATA " ",Schreibschutz testen
52090 DATA "FluSwechselabstand:”
52100 DATA "Schreib/Lese Modus:"
52119 DATA Schreiben,Lesen
52120 DATA abwechselnd Schreiben und Lesen
52130 DATA " ",Umdrehungsdauer messen
52140 DATA "Spur—Justage: Trigger generieren"
52150 DATA Ausgang nach BASIC
52160
52500 FOR I = 1 TO MB: READ FB(I): NEXT
52510 DATA 9,1,1,2,3,3,2,2,0,2,0,0,4,3,4,0,4,3.0
52520
83000 FOR F = 1 TO 7: READ FS(F): NEXT
53019 DATA KEIN CONTROLLER AUSGEWAHLT!
53020 DATA LAUFWERK IST NICHT EINGESCHALTET!
53030 DATA KOPFPOSITION IST UNDEFINIERT!
53040 DATA DISKETTE IST SCHREIBGESCHUTZT!
53059 DATA "KEIN DISK-CONTROLLER IN STECKPLATZ "
53060 DATA FEHLER IN PRUFSUMME DES BOOT-PROM'S!
53070 DATA SPUR-JUSTAGE AUF SPUR
53080 F§(7) = FS(7) +" '" + STRS (JS) + "!"
53990
54909 FOR I= 1 TO 3: READ MOS(I): NEXT
54919 DATA dauernd,1 Spur,ganze Diskette a
54920
55019 PS-= 0. FOR T= S0eea TO STiTa Apple DOS 3.3 —
55020 READ HV: POKE I,HV:PS = PS + HV: NEXT
55050 DATA 106,250. 169.0, 135,284, 183,258 i i
seeep bara aes-zeeiepctap ise i6-28icio7 Tips und Tricks
55959 DATA 251,240,6,230,254,208,2,230 7
55060 DATA 255,200,208, 238,230,253, 208,234 von U. Stiehl
55070 DATA 96,166, 250,36, 254, 165,251,221 p A
55989 DATA 141, 192, 157, 143, 192,221, 149, 192 2. Aufl. 1984, 216 S., mit zahlreichen,
epee pyr pen a eared teed ausfiihrlich kommentierten Programm-
55100 DATA 208, 2,230,255, 157, 141,192,221 ota
55110 DATA 149,192,112, 10,234, 172,0,192 listings, kart., DM 28,—
55120 DATA 16,234, 189, 142, 192,96, 230, 252 ISBN 3-7785-1049-5
55139 DATA 208,226,230, 253,208,224, 44,254
55140 DATA 0, 16,239, 169,3, 169,170,157
Fee ah a toe ouateee cae epics ose Dr. Alfred Hiithig Verlag - Postf. 1028 69 - 6900 Heidelberg 1
Peeker 8/85 17
ProDOS fur Anfanger
Teil 3: Geheimnisse von BSAVE und BLOAD
1. FID in Applesoft?
Wenn Sie bislang noch nicht vom BASIC
.SYSTEM iberzeugt waren, dann sind Sie
es sicherlich, wenn Sie den nachfolgen-
den Aufsatz gelesen haben, in dem ich
Ihnen die bislang noch nicht publizierten
Eigenschaften der zwei leistungsfahigsten
BASIC.SYSTEM-Befehle vorstellen
werde.
Sie kennen alle das alte FID (File Devel-
oper) fiir DOS 3.3, das zum Kopieren von
DOS-Dateien dient. Dieses Maschinen-
programm hat eine Lange von ca. 4800
Bytes. Nun stellen Sie sich einmal vor, Sie
sollten dieses Programm (fast) ausschlieB-
lich in Applesoft-Basic (mit hdchstens
ganz kurzen Maschinenroutinen) schrei-
ben. Ware dies méglich? Wie groB ware
dann das Applesoft-Programm? Und wie
wirden Sie vorgehen, damit T-, B- und A-
Dateien beliebiger Lange kopiert werden
kénnen? Sie werden jetzt mit Recht ver-
muten, daB nicht nur ein sehr groBes, son-
dern auch ein sehr langsames Applesoft-
Programm entstehen wirde.
Nicht so unter dem BASIC.SYSTEM von
ProDOS! Hier ist es tatsachlich méglich,
ein Kopierprogramm fiir Dateien beliebiger
Art und GréBe fast ausschlieBlich in Ap-
plesoft zu schreiben, das nicht nur sehr
kompakt (weniger als 1800 Bytes), son-
dern auch relativ schnell ist. Dies ist allein
aufgrund des sehr leistungsfahigen
BSAVE/BLOAD-Befehls méglich.
18
2. BSAVE und BLOAD
2.1. Speicherbereich
Der Speicher des Apple Ile/Ilc/II Plus |aBt
sich abstrakt als ein Kontinuum von Spei-
cherstellen definieren, die von $0000-
$FFFF bzw. von 0-65535 durchnumeriert
sind. Dabei bezeichnen wir als Speicher-
bereich einen durchgehenden Abschnitt
des Gesamtspeichers, z.B. den Speicher-
bereich $2000-$3FFF (HGR Seite 1). Die
Anfangsadresse dieses HGR1-Bereiches
ist $2000, die Endadresse $3FFF und die
Lange $2000. Bei der Langenberechnung
beachte man immer, daB das erste Byte
mitgezahit werden muB. Ein einfaches
Beispiel:
Speicherbereich: 768-770
Anfangsadresse: 768
Endadresse: 770
Lange: 3 (768 + 769 + 770)
Die Lange errechnet sich demnach durch
die Formel
Endadresse - Anfangsadresse + 1,
d.h. hier konkret
770-768 +1=3
Vertiefend kénnen wir festhalten: Ein
Speicherbereich ist eine kontinuierliche
Folge von Speicherstellen und laBt sich
durch Anfangsadresse, Endadresse und
Lange charakterisieren. Im Grenzfall ist die
Lange = 1; dann fallen Anfangsadresse
und Endadresse zusammen. Jede Spei-
cherstelle enthalt einen Wert (= Byte) im
Bereich 0-255 bzw. $00-$FF. Die einzel-
von Ulrich Stieh!
nen Speicherstellen haben absolute Spei-
cherplatznummern, weil der Gesamtspei-
cher von 0-65535 durchnumeriert ist. Da-
neben gibt es noch relative Speicherplatz-
nummern (= Byte-Offset oder kurz Offset)
im Bereich 0 bis (Lange - 1). Nehmen wir
hierzu an, daB die absoluten Speicherstel-
len 768-770 die Bytes $C1, $C2 und $C3
(entspricht ASCII A“, ,.B“ und ,,C“) ent-
halten. Dann gilt im einzelnen:
$0300 = 768 — $0000 = 0 ($C1=,,A“)
$0301 = 779 - $0001 = 1 ($C2=,,B“)
$0302 = 770 — $0002 = 2 ($C3=,,C“)
Die absolute Speicherstelle 768 ist zu-
gleich die nullte Speicherstelle, wenn die
Zahlung mit 0 bei 768 beginnt. Die nullte—
oder bei ,,normaler“ Zahlweise ,erste“ —
Speicherstelle (mit dem Offset = Abstand
= 0) enthalt ,A“, die 1. Speicherstelle
(Offset = 1) enthalt ,B“ und die 2. und
letzte Speicherstelle (Offset = 2) enthalt
»C“. Der Byte-Offset liegt damit stets im
Bereich 0 bis Lange minus 1.
2.2. Datei
Ziehen wir nunmehr zu den weiteren Eror-
terungen das Bild 1 heran. In der oberen
Bildhalfte wird ein Teil des RAM-Spei-
chers, namlich der fiir BSAVE und BLOAD
hauptsachlich in Frage kommende Spei-
cherteil $0800-$95FF dargestellt. Als
Speicherauszug (= auf Diskette zu spei-
chernder Bereich) wahlen wir $2000-
$3FFF (HGR1).
Peeker 8/85
Wahrend der RAM-Bereich als eine konti-
nuierliche Folge von Bytes im internen
Speicher definiert werden kann, |aBt sich
die Diskettendatei bzw,. der File als eine
kontinuierliche Folge von Bytes im exter-
nen Speicher (= Datentrager: Diskette,
Festplatte, RAM-Disk usw.) charakterisie-
ren. DaB eine Datei letztlich in 512-Byte-
Blocks unterteilt ist, die physisch auf der
Diskette verstreut sein k6nnen und inso-
fern kein Byte-Kontinuum darstellen, ist
zunachst irrelevant.
Die Bytes einer Datei sind absolut nume-
riert vom nullten bis zum letzten Byte,
denn beim BSAVE/BLOAD-Befehl bezieht
sich der Byte-Offset immer auf den Anfang
der Datei. Betrachten wir hierzu die untere
Halfte von Bild 1. Die dort dargestellte
Datei namens FILE hat eine Lange L von
$6000 Bytes, die von Byte-Offset B =
$0000 = absolut nulltes Byte = Dateian-
fang bis Byte-Offset B = $5FFF = absolut
letztes Byte = Dateiende durchnumeriert
sind. Ahnlich wie der Gesamtspeicher in
Speicherbereiche unterteilt werden kann,
laBt sich auch eine Gesamtdatei in
Dateiabschnitte aufteilen. Im Bild 1 ist der
Bereich Byte-Offset $4000 bis $5FFF ein
solcher Teilabschnitt.
Der sog. EOF (= End of File = ENDFILE
im ProDOS-Directory) hat eine doppelte
Bedeutung: Zum einen versteht man unter
EOF (als Kardinalzahl) die Gesamtzahl al-
ler Bytes einer Datei, also die Dateilange.
Zum anderen bedeutet EOF (als Ordinal-
zahl) die Nummer desjenigen Bytes, das
dem letzten Byte der Datei folgt bzw. fol-
gen wirde. Man beachte also, daB der
Begriff EOF nicht mit dem Begriff Dateien-
de identisch ist.
Nun kommen wir endlich zum BSAVE/
BLOAD-Befehl. Der BSAVE-Befehl Uber-
tragt einen (beliebigen) Speicherbereich
als Speicherauszug in einen (beliebigen)
Teilbereich einer Datei, wahrend der
BLOAD-Befeh| einen (beliebigen) Teilbe-
reich einer Datei in einen (beliebigen)
Speicherbereich einladt. Im einzelnen gibt
es folgende Parameter:
A = Anfangsadresse des Speicherbe-
reichs
E = Endadresse des Speicherbereichs
Lange des Speicherbereichs
absoluter Byte-Offset der Datei
T = Dateityp
A- und E-Parameter: Beim BSAVE kann
theoretisch jede Anfangs- und Endadres-
se im Bereich $0000-$BFFF angegeben
Peeker 8/85
prodos 44
$2000
RAM HGR
$0800 $2000 ES3FFF ‘$O5FF
ee
fe 0) ® YY J | EOF = $6000
B$0000 B$2000 B$4000 BSSFFF
Bild 1: BSAVE BILD, A$2000, L$2000, B$4000
werden. Wegen BLOAD sind praktisch je-
doch nur die Bereiche $0300-$03CF so-
wie $0800-$95FF zulassig, weil $0000-
$02FF sowie $9600-$BFFF vom BASIC-
.SYSTEM als belegt markiert werden.
L-Parameter: Die Lange ergibt sich aus (E
- A + 1). Die maximale Lange betragt
theoretisch $FFFF = 65535. Beim BSAVE
muB man neben A entweder E oder L
angeben, also niemals beide gleichzeitig!
Wenn man beim BLOAD A, E und L weg-
laBt, so gelten als Ersatz die beim letzten
BSAVE benutzen A/E/L-Werte. Wurde ei-
ne Datei gerade mit BLOAD geladen, so
kann sie unmittelbar danach ohne A, E
oder L mit BSAVE zuriickgespeichert
werden (vgl. Bug weiter unten).
B-Parameter: Da unter ProDOS eine ein-
zelne Datei 16M groB sein kann, kann der
B-Parameter Werte im Bereich $000000
bis $FFFFFF einnehmen. Wenn B fehit,
wird automatisch B = 0 angenommen. Mit
B meint man stets den Byte-Offset in der
externen Datei und niemals den 0.g. Byte-
Offset im internen Speicherbereich.
Die Werte fiir A, E, L und B kénnen wahl-
weise als Dezimal- oder Hexadezimalzah-
len (mit vorangestelltem $-Zeichen) ein-
gegeben werden.
T-Parameter: Dieser Parameter fir die di-
versen Dateitypen (TBIN, TTXT usw.) ist
nur dann erforderlich, wenn eine Nicht-
BIN-Datei bearbeitet werden soll. Wenn
namlich der T-Parameter fehlt, wird auto-
matisch eine BIN-Datei (Binardatei, B-
Datei) angenommen (daher auch die Be-
fehlsw6rter B-LOAD und B-SAVE). Nicht-
BIN-Dateien missen jedoch erst mit dem
CREATE-Befehl erzeugt werden, bevor
sie mit BSAVE/BLOAD bearbeitet werden
k6nnen.
Beispiele
BSAVE BILD, A$2000, L$2000
speichert die BIN-Datei BILD (ab Byte-
Offset 0, weil der B-Parameter fehit). Wiir-
de eine BIN-Datei namens BILD noch
nicht auf der Diskette existieren, so wurde
sie vom BASIC.SYSTEM zunachst auto-
matisch angelegt (= ,,kreiert").
BLOAD BILD
ladt mangels weiterer Parameter die ge-
samte BILD-Datei wieder in den alten
Speicherbereich $2000—$3FFF.
BLOAD BILD, A$4000
ladt_ die BILD-Datei nunmehr in den
HGR2-Bereich ab $4000.
CREATE TEXT, TTXT
BSAVE TEXT, TTXT, A768, E770
legt zunachst eine TXT-Datei namens
TEXT an und speichert dann darauf, wenn
wir das obige Beispiel aufgreifen, die
Buchstaben ,,ABC“ ab Byte-Offset 0 ab.
BSAVE TEXT, TTXT, B3, A768, L3
hangt ,ABC“ an das Ende der TXT-Datei
an, die nunmehr den Inhalt ,ABCABC“
hat.
BLOAD TEXT, TTXT, A780, B3
ladt die drei letzten Buchstaben ,ABC“
der TXT-Datei in den Speicherbereich
780-782.
BLOAD PRODOS, A$2000, TSYS
ladt die SYS-Datei PRODOS in den Spei-
cher ab $2000. Da der B-Parameter fehit,
wird mit dem nullten Byte der Datei begon-
nen. Und da weder der E- noch der L-
Parameter spezifiziert wurde, wird die ge-
samte Datei eingelesen.
Der BILDTEST (s. Listing), der mit dem
Bild 1 korrespondiert, packt 3 HGR1-Bil-
der in eine einzige BIN-Datei. Bild 1 veran-
schaulicht den BSAVE-Vorgang fir das
dritte HGR1-Bild.
2.3. BSAVE-Bug 1.0
Die oben geschilderten BSAVE-BLOAD-
Verfahren gelten nur ab Version 1.1 des
BASIC.SYSTEMs, das in der Regel in Ver-
bindung mit PRODOS 1.1.1 benutzt wird.
Im CALL A.P.P.L.E“ (Marz-Heft) wurde
irrigerweise vermutet, daB nur beim zwei-
ten BSAVE ein Byte-Offset Uber das alte
EOF hinaus mdglich sei. Dies ist jedoch
falsch. Genauer gesagt konnte beim ,,ver-
bugten“ BASIC.SYSTEM 1.0 ein BSAVE
Uber den alten EOF hinaus nur fiir den Fall
B<=L
realisiert werden. Beispiele:
BSAVE XXX, A5000, BO, L2
ENDFILE danach 2
BSAVE XXX, A5000, B1, L2
ENDFILE danach 3
BSAVE XXX, A5000, B2, L2
ENDFILE danach 4
BSAVE XXX, A5000, B3, L2
ENDFILE danach wieder 4,
weil hier B > L (Bug)!
Ferner unterscheidet sich der neue 1.1-
BSAVE vom alten 1.0-BSAVE darin, daB
der 1.1-BSAVE erstens im Falle von
L <momentanes EOF
die Altdatei nicht kuirzt bzw. schrumpfen
laBt und daB zweitens ber den momenta-
nen EOF hinaus BSAVEs mit
B> EOF
méglich sind, wodurch ,,Loch“-Dateien
entstehen k6nnen. Beispie!
BSAVE XXX, A5000, L1, BSFFFFFF
erzeugt unter dem BASIC.SYSTEM 1.1
eine BIN-Datei mit einem ENDFILE von
16777215 Bytes (= 16M - 1). Unter Ver-
sion 1.0 wirde hier eine Fehlermeldung
produziert. Fir Interessierte: Diese Datei
belegt 5 Blocks, und zwar 2 (!)
Datenblocks sowie 3 Index-Blocks.
BSAVE YYY, A$2000, L$4000
BSAVE YYY, A$2000, L$2000
wirde unter Version 1.0 nach dem zweiten
BSAVE die Dateilange wieder auf L$2000
schrumpfen lassen. Unter Version 1.1
wirde weiterhin eine Lange von $4000
ausgewiesen.
3. KOPY und BATCHKOPY
Die nachfolgenden zwei Dateikopierpro-
gramme demonstrieren die ungewohnli-
che Leistungsfahigkeit des BASIC.SY-
STEMs 1.1.
3.1. KOPY
KOPY wird mit RUN KOPY gestartet. Es
schaltet zunachst die 80-Zeichenkarte ein
— dies kann man streichen — und meldet
20
44444494
sich dann mit einem spartanischen Meni
»BEFEHL (K/C/E):“. Man hat nun 4 Op-
tionen:
1. E bedeutet E(nde) des Programms.
2. C bedeutet C(ATALOG) in bezug auf
das momentane Directory-Prafix.
3. DIREKTBEFEHL fiihrt einen beliebigen
Direktbefehl aus, z.B.
CAT/RAM
PREFIX/USERS.DISK
DELETE XXX
LOCK YYY
UNLOCK 22Z
usw.
4. K... ist der eigentliche K(OPY)- oder
Kopierbefehl. Die Syntax lautet
K/VOLUME1/FILE1,/VOLUME2/FILE2
d.h. ,K“ + ,,vollstandiger Pfadname der
Ausgangsdatei“ + ,,“ + ,Vvollstandiger
Pfadname der Zieldatei*. Die eigentlichen
File-Namen k6nnen identisch oder auch
verschieden sein, so daB mit dem Kopier-
vorgang gleichzeitig eine Datei umbenannt
werden kann. Nehmen wir an, daB sich die
Datei ,PRODOS" auf der Diskette mit
dem Volume-Namen ,,USERS.DISK" be-
findet und auf das Subdirectory ,SUB-
DIR" der RAM-Disk mit dem Volume-Na-
men RAM“ kopiert werden soll. Dann
lautet der Kopierbefehl
K/USERS.DISK/PRODOS,/RAM/SUBDIR/PRODOS
Man beachte, da innerhalb des Befehls
keine Leertasten zulassig sind und daB die
Volume- bzw. Subdirectory-Namen durch
Schragstriche abgegrenzt werden
missen.
Die Anwendung des Programms KOPY
wird dann empfohlen, wenn einzelne
Dateien kopiert werden sollen.
3.2. BATCHKOPY
Die Optionen 1-3 sind bei BATCHKOPY
dieselben wie bei KOPY. BATCHKOPY
empfiehit sich anstelle von KOPY dann,
wenn eine Vielzahl von Dateien kopiert
werden soll. Zu diesem Zweck gibt man
beim Kopierbefehl zunachst ein nacktes
»K"“ ein, worauf man die Ausgangs- und
Zielprafixe festlegen kann, z.B.
VON PREFIX/ USERS.DISK
NACH PREFIX/ RAM
Die Schragstriche vor dem ersten und
nach dem letzten Directory-Namen wer-
den automatisch erganzt. Danach wird das
gesamte Ausgangsdirectory Name fiir Na-
me angezeigt, und man braucht nunmehr
nur noch durch ,,J(a)“ oder ,,N(ein)“ be-
stimmten, welche der einzelnen Dateien
kopiert werden sollen.
BATCHKOPY ist fast genauso schnell
bzw. langsam wie der FILER der Firma
Apple, der allerdings 15mal so umfang-
reich ist! Wer ein noch schnelleres Kopier-
programm benétigt, der verwende das in
»ProDOS fir Aufsteiger, Band 2“ abge-
druckte Kopierprogramm PROFID, das als
reines Maschinenprogramm noch kirzer
und zugleich ca. 40% schneller ist. In der
Kurze liegt die Wirze!
Die Programme KOPY und BATCHKOPY
kommen nicht ganz ohne Maschinenrouti-
nen aus. Insbesondere der sog. Get- und
Set-File-Info-MLI-Befehl muBte in Assem-
bler geschrieben werden. Die entschei-
dende Stelle in den beiden Applesoft-Pro-
grammen ist jeweils die Zeile 72, die den
schubweisen BLOAD- und BSAVE-Befehl
ausflhrt. Dies ware unter DOS 3.3 un-
denkbar gewesen. Denken Sie jedoch
daran, daB KOPY und BATCHKOPY nur
unter dem BASIC.SYSTEM 1.1 funktionie-
ren. (Das 0.g. PROFID funktioniert unter
allen ProDOS-Versionen.)
Wer das Applesoft-Programm naher be-
trachtet, wird Ubrigens feststellen, daB ich
eine Schwache flr ON-GOTO-Konstruk-
tionen habe, die an die Stelle des fehlen-
den IF-THEN-ELSE-Befehls treten.
4. BSAVE-Bug 1.1.
Voliziehen Sie folgenden Test:
. POKE 5000, 1: POKE 10000, 2
. BSAVE XXX, A5000, L1
|. BSAVE XXX, A10000, L1
. POKE 10000, 0
. BLOAD XXX
. PRINT PEEK (5000)
. PRINT PEEK (10000)
- CATALOG
Sind Sie Uberrascht?
Der 1.1-BSAVE-Befehl andert die beim er-
sten BSAVE registrierte Anfangsadresse
spater nie mehr. Deshalb muB man stets
den A-Parameter hinzufiigen, sonst kén-
nen unheilvolle Dinge passieren. Es wurde
also bei 1.1 ein alter Bug beseitigt und ein
neuer eingebaut. Dieser Bug kommt bei
KOPY und BATCH KOPY nicht zum Tra-
gen.
=
PNAODAONS
Peeker 8/85
Visible
Computer
Ein Simulationsprogramm, das Sie in das Innere des 6502 Mi-
kroprozessors fiihrt. Sie sehen auf dem Bildschirm, wie die ein-
zelnen Instruktionen in Zeitlupe ausgefiihrt werden, wie sich die
Register und die Flags verandern. Ein unverzichtbares Hilfsmit-
tel beim Erlernen der Assembler-Programmierung, danach ein
wertvolles Werkzeug beim Testen Ihrer eigenen Programme.
Komplett mit einem 6502 Editor/-Assembler, deutschem Hand-
buch (150 Seiten) und iiber 30 Beispielprogrammen.
Fiir Apple I, IIplus, //e und //c.
ISBN 3-89058-019-X DM 129,--
In allen Buchhandlun-
gen und Computershops
oder direkt vom Verlag:
Pandabooks
Bismarckstr. 67
1000 Berlin 12
(030) 342 88 00
BEBE BB BBestellcoupniis EERE
@ Name
@ Anschrift
© V-Scheck liegt bei (spesenfreie Lieferung)
© per Nachnahme (zzgl. DM 3,-- Versandspesen)
Stck. Visible Computer DM 129,--
Peeker 8/85 24
KOPY
(Warnung: KOPY funktioniert nur mit BASIC.SYSTEM 1.1!)
19 PRINT CHRS (4);"PR#5": PRINT : IF PEEK (116) < 128 THEN
PRINT "KEIN PUFFER!": END
12 DATA 32,0, 191, 196,55,3, 176,38, 169.19, 141,75,3,32.0,
191, 196,73,3, 176,25, 162,3, 189,58,3,157,76,3,202,16,247,
169,7,141,73,3,32,0,191,195,73,3,176,1,96,32,218, 253,32
14 DATA 58,255,76,208,3,10,0,2.0.0.0.0,0,0.0.0.0,0.0.0.0.0,
9,0,128,2: FOR X = 768 TO 843: READ Y: POKE X,¥: NEXT.
REM GETINFO
16 DATA 32,6,227,52, 190,222, 32,227,223,32, 198,221.
133,133, 132, 134,32, 44,213, 200, 32,235, 227,76, 154,218
: READ Y: POKE X,Y: NEXT : REM INALL
18
20
PRINT "ees KOPY +s
PRINT "x U.STIEHL #": NORMAL : GOTO 26
22 PRINT "SYNTAX?": GOTO 26
24 ON E = 1 AND PEEK (222) = 19 GOTO 62:
PRINT "FEHLER "; PEEK (222)
26 CLEAR : PRINT : PRINT "BEFEHL (K/C/E):";: CALL 900,BS:
ON BS = "" GOTO 26: ON LEFTS (BS,1) = "K" GOTO 34:
IF B§ = "E" THEN POKE 216,0: END
28 IF BS ‘THEN PRINT CHRS (4);"CATALOG": GOTO 26
‘30 PRINT CHRS (4):BS: GOTO 26
32 REM SYNTAX:K/V1/N1, /V2/N2
34
36
B = LEN (BS): IF B < 19 THEN 22
FOR X = B TO 2 STEP - 1: IF MIDS (BS,X,1) = ","
THEN N2$ = MIDS (BS,X + 1,B - X):
N1$ = MIDS (B$,2,xX - 2): X= 2
38 NEXT : ON N1$ = "" OR N1$ = N2$ GOTO 22:N1 = LEN (NS)
N2 = LEN (N2$): ON Nl < 4 OR N2 < 4 GOTO 22
ON LEFT (N1$,1) <> "/" OR LEFT$ (N2§,1) <> "/" GOTO 22
40 FOR X = Nl TO 2 STEP — 1: IF MIDS (N1$,X,1) = "/"
THEN P1$ = LEFTS (NIS,X):F1 = Nl ~ X:
FIS = RIGHTS (N1S,F1): X= 2
42 NEXT : IF P1$ = "" THEN 22
44 FOR X = N2 TO 2 STEP — 1: IF MIDS (N2$,X,1) = "/"
‘THEN P2§ = LEFTS (N2$.X):X = 2
46 NEXT : IF P2$ = "" THEN 22
48 REM DIR-READ
50 B$ = CHR$ (4) + "VERIFY": PRINT BS;P2S: PRINT BS;P1S
PRINT BS;NI$: PRINT CHRS (4); "OPEN" ;P1$;", TDI
PRINT CHRS (4);"READ";P1$: INPUT BS: INPUT BS: INPUT BS
52 INPUT BS: IF MIDS (B$,2,F1) = F1S AND MIDS (BS,F1 + 2,1)
54 ON BS <>"
PRINT "NAME?": GOTO 22
‘96 REM KOPTEREN
58 LL = VAL ( MIDS (BS,65,7)):T$ = ",T" + MIDS (B$,18,3):
B = 0:A = 6144:L = 24576: REM $1890+S6000-$7800
60 E = 1: PRINT CHRS (4); "CREATE": N2$: TS: GOTO 64:
REM E=ERROR
PRINT CHR$ (4) ; "DELETE" ;N2S:
PRINT CHR$ (4) ; "CREATE"; N2S;
64 IF LL <L THEN L = LL: ONL > 9 GOTO 70: RUN 26
66 GOSUB 72:B =B +L: ONB +L <LL GOTO 66:L = LL ~
IF L = 9 THEN RUN 26: REM LOOP
68 REM SETINFO
10 GOSUB 72: POKE 512,N1: FOR X = 1 TO NI
POKE 512 + X, ASC ( MIDS (N1$,X,1)): NEXT:
POKE 649,N2: FOR X = 1 TO N2: POKE 640 + X,
ASC ( MIDS (N2$,X,1)): NEXT : CALL 768: RUN 26
‘72 PRINT CHR$ (4) ;"BLOAD" 2B" bes
PRINT CHRS (4) C Bs" ,L"3L
RETURN
BATCHKOPY
(Warnung: BATCHKOPY funktioniert nur mit BASIC.SYSTEM 1.1!)
19 PRINT CHR$ (4);"PR#3": PRINT : IF PEEK (116) < 128 THEN
PRINT "KEIN PUPFER!": END
12 DATA 32,9,191,196,55,3,176,38, 169, 19, 141,73,3,32.
9,191,196, 73,3,176,25,162,3, 189, 58,3, 157,76,3, 202, 16,247
169,7,141,73,3,32,0,191,195,73,3,176,1,96, 32,218, 253,32
14 DATA 58,255,76,208,3,10.0.2.0.0,0.0.0.0.
0.0.9,0.0.0,0,0.0,0.128,2: FOR X = 768 TO 843:
READ Y: POKE X,Y: NEXT : REM GETINFO
16 DATA 32,6,227,32, 190,222, 52,227, 223,32, 198,221,133,
133,132, 134,52,44,213,200, 32,233,227, 76,154,218:
FOR X = 999 TO 925: READ Y: POKE X,Y: NEXT : REM INALL
18 ONERR GOTO 24
20 HOME : INVERSE : PRINT "*BATCH-KOPYs":
PRINT "# U.STIEHL #": NORMAL : GOTO 26
22 PRINT "SYNTAX?": GOTO 26
24 ON E= 1 AND PEEK (222) = 19 GOTO 69: PRINT
PRINT “FEHLER "; PEEK (222):"!"
26 CLEAR : PRINT : PRINT "BEFEHL (K/C/E):";: CALL 900,BS
ON B$ = "" GOTO 26: ON BS = "K" GOTO 34
IF BS = "E" THEN POKE 216.0: END
28 IF BS = "C" THEN PRINT CHRS (4); "CATALOG": GOTO 26
30 PRINT CHRS (4);B$: GOTO 26
32 REM PREFIX-WAHL.
34 PRINT : PRINT "VON PREFIX/";: CALL 900, P1$
ON P1$ = "" GOTO 26:P1$ = "/" + PIS + "/"
PRINT "NACH PREFIX/";: CALL 900, P28:
ON P2$ = "" GOTO 26:P2$ = "/" + P28 + "/"
ERIFY" ;P2$: PRINT CHRS (4
VERIFY" ;P1$
38 DIM C$(100):C = 0: PRINT CHRS (4); "OPEN"; P1$;", TDIR”
PRINT CHRS (4);"READ";P1$: INPUT BS: INPUT BS: INPUT BS
49 C = C + 1: INPUT C$(C): ON CS(C) <> "™" GOTO 4o:¢ = C-1
PRINT CHR$ (4); "CLOSE": ON C = 9 GOTO 26
PRINT CHRS (4) ;"FRE":CC = 0
42 REM DATEI-WAHL-SCHLEIFE
44 PRINT :CC = CC + 1: ON CC > C GOTO 26
PRINT MIDS (C$(CC),2.15):" J/N ":
AND BS < > "n" GOTO 46: PRINT BS;" "3:
ON BS = "N" OR BS = "n" GOTO 44:
BS = C$(CC):NS = MID$ (BS,2,15)
48 IF RIGHTS (NS,1) =" " THEN
LEFTS (NS, LEN (NS) - 1): GOTO 48
P1$ + NS:N1 = LEN (N1$):N2$ = P2S + NS:
LEN (N2$): PRINT N1$;" —> ";N2S;
52 REM DATEI-KOPIE
54 LL = VAL ( MIDS (BS.65,7)):TS = ",1" + MIDS (BS, 18,3):
IF T$ = ",TDIR" THEN PRINT " DIRECTORY!";: GOTO 44
56 B = 0:A = 8192:L = 20480: REM $2009+$5900-S7000
58 E = 1: PRINT CHRS (4); "CREATE" ;N2$;7$: GOTO 62
REM E-ERROR
60 E = 0: PRINT CHRS (4); "DELETE" ;N2S
PRINT CHRS (4); 18
62 IF LL <L THEN L = LL: ONL > GOTO 79: GOTO 44
64 REM SCHUBKOPIE-SCHLEIFE
66 GOSUB 72:B=B +L: ONB +L <LL GOTO 66:L = LL-B
IF L = 0 THEN 44
68 REM SETINFO
1 GOSUB 72: POKE 512.N1: FOR X = 1 TO Nl:
POKE 512 + X, ASC ( MID$ (N1$,X,1)): NEXT:
POKE 640,N2: FOR X = 1 TO N2:
POKE 640 + X, ASC ( MIDS (N2$,X,1)): NEXT:
CALL 768: GOTO 44
12 PRINT CHRS (4); "BLOAD"
PRINT CHRS (4); "BSAVE"
RETURN
N1S; 7S
GETSETINFO
(Als DATA-Statements in KOPY und BATCHKOPY enthalten.
GETSETINFO funktioniert bei allen ProD0S-Versionen!)
1 ORG $0300
2 6
3 « Get/Set File-Info US/16.05.85
i——
5
6 * Altname laden, dessen Parameter
7 (Access/Filetype/Auxtype)
8 # zwischenspeichern, dann Neuname
9 * laden und mit geanderten
19 Parametern zuriickspeichern
nos
12 DOSWARM QU $93>DO
a3 MLI EQU SBFOO
14 BELL = -EQU‘SFFSA
15 PRBYTE EQU SFDDA
16
0500: 20 00 BF 17 GETINFO1 JSR MLI :Altname
0303: ca 18 HEX C4
0504: 3705 19, DA CNTA
0306: BO 26 20 BCS ERROR
2l
9308: A9 OA «22s GGETINFO2 LDA #$9A :GET
930A: 8D 49 05 23 STA CNTB
30D: 20 00 BF 24 JSR MLI :Neuname
9310: ca 25 HEX C4
9311: 4993 26 DA CNTB
0313: B919 27 BCS ERROR
28 +
Peeker 8/85
944444449444 prodos 44
9315: 42 93 29 LOX 43 BILDTEST
0317: BD 5A 95 30 COPY LDA ACCESSA,X ;A1t nach
931A: 9D 4c 03 31 STA ACCESSB,X Nou kopieren (Warnung: BILDTEST funktioniert nur mit BASIC.SYSTEM 1.1!)
951D: cA 32 DEX
OS1E: 19 FT 33 BPL COPY 100 VTAB 24: PRINT : PRINT "BILDTEST": HCOLOR= 7
Moe 1p N=2
9320: 49 97 «35. SETINFO2 LDA +807 ser 129 FOR X= 9 TON
9522: 8D 49 03 36 STA CNTB 150 HGR : HPLOT 109,x « 20 TO 200,x « 20
0325: 20 09 BF 37 JSR MLI :Neuname REM Waagrechter Strich, unterschiedlioh tief
9328: C3 38 HEX C3 149 PRINT CHRS (4); "BSAVE BILD, 48192, L8192, B";
9329: 4903 39 DA CNTB X » 8192
9328: B81 4p BCS ERROR 150 PRINT X + 1;" "5: NEXT ; PRINT
9320: 60 41 RTS 160 FOR X = 9 TON
42 6 170 HGR : PRINT CHRS (4);"BLOAD BILD, Agi92, L8192, B"
(32E: 20 DA FD 43 ERROR JSR PRBYTE X » 8192
9331: 20 SA FF 44 JSR BELL 180 PRINT X + 01;" "5: NEXT
0334: 4c DD 93 45 JP DOSWARM
46 +
0337: OA 47° GNTA HEX OA Nar GET GET FILE INFO ($C4)
0538: 09 02 © 48-—NAMEA =A $:200 2512 °
933A: 00 49° ACCESSA HEX 00 Mordor br Pata are
0338: 00 50 FILETYPA HEX 00 Access ~ 1 Byte, gepokt
9330: 99 99 51 -AUXTYPEA HEX 0090 File-Type - 1 Byte: gepokt
OS3E: 99 52 STORAGEA HEX 00 Auxiliary Type — 2 Bytes: gepokt
‘orage-Type ~ 1 Byte,
Sr BLUMEN Hee snes Blocks used - LL HH ~2 Bytes; gepokt
Bee e, = Se MATER Het (808 Modi fication-Date ~ 2 Bytes: gepokt
9343: 90 00 55 MTIMEA HEX 9990 Modi fication—Time — 2 Bytes; gepokt
0345: 90 00 56 CDATEA HEX 9900 Creation-Date — 2 Bytes; gepokt
0347: 99 00 87 | CTIMEA «HEX 9000 Greation-Time — 2 Bytes: gepokt
58s
0349: 99 59° CNTB HEX 90 :GET/SET SET FILE INFO ($C3)
04a: 80 92 6 NAMEB «DA S280 1649
934C: 00 61 ACCESSB HEX 00 Lolaaed oii oan arise he
9340: 90 62 FILETYPB HEX 00 Access — 1 Byte
OS4E: 09 09 63. AUXTYPEB HEX 0000 File-Type — 1 Byte
0350: 99 64 STORAGE HEX 00 Auriliary Type — 2 Bytes
9351: 99 00 65 BLOCKSB HEX 0000 Leora bhi eRe
Qsss: 80 68 S6MDATEH HBX pgp be Homttnetete = tee
0355: 99 99 «67 MTIMEB HEX 0900
9357: 00 00 © ©—«GB_«CDATEB «HEX 9000
9359: 09 90 69 CTIMEB HEX 9900 =
91 Bytes
O83 Nabe Reparaturservic eM 8 Yom Kompaviog
o APPLE ~ ORIGINAL + KOMPATIBLE - COMPUTER ~ APPLE
‘Stanaard noo Tasatr ASCH, rebel 9 faten, APPLE Steal Ac ann OMS il 8
ela Tatar Gob ktanchy MNES O APPLE Emaogpane Compute ARTA
ana or R= Tontuetantor sts gun
She Tastalur
itcInToSH Sstrttompletm Mowe statu
s Macarte/taacpait Systema Dabo
Ite one tome at Sang. aur
he toon
MEWA4iC we vor osoeh mi Ber Block
cena Oz) Aone
Eprom
(Ceecte trace Kare
gekennzeichneton Artikeln gehdet zum Litarumtar
DM 99q— sin anual unde Tsim Schl af
Bat a8
tfergenguaet Ouo-ouk= 2 Stmestauterke
e0en| ceumactiag,
Uerpininen + Boas tau
ue 1a58 —
MK
int Sat Brena con onto a cues
‘Eick Gehause tr MEWA 9000 Seria Autres Bat “3 $9.0, Gra
eerplaninen der obigen Inert Karten 3
trBeetuck-Astaruck © desta tert
fe PrtttT
Sanger Ae osreanewana te Zeacherwtasorbeaton
egebat stetber ere Lnerbesingungen. Technische Anderungen vorbehalton. “App it
{iene der Able Contre raion Wage ru Recantrecn soto ease rake
COMPUTER CENTER CONEX ERICH-WILLI MEYER
‘5650 SOLINGEN 11 . Postfach 11 0206-7 T + (6843 FROHNHAUSEN + Postfach 7011 5/900 KO,
Telefon (0212) 75449 Telefon (02771) 35071 ‘ardisk 1OMBye, il. m.Xebee Contrter
{rplatine Motherboard 64K mi 6662 + 200"
gegegees
Be:
he
Scone eer Pte, ato age# OM Bareh
Peeker 8/85 23
Graf-quattro
von N.G. Barbieri
Teil 3: Tricks Uber Tricks
Was ist eigentlich der Applesoft-Interpre-
ter? Fir den Applesoft-Anfanger ein unbe-
kanntes Wesen im Apple, das fiir Dauer-
belastigung mit , SYNTAX ERROR*“ sorgt;
fur den Applesoft-Kenner ein personlicher
Gegner, den es unbedingt auszutricksen
gilt; und fur den Assemblerprogrammierer
schlicht und einfach eine Ansammlung
von Maschinenroutinen, die nach Méglich-
keit durch eigene Routinen aufzurufen und
zu erweitern sind. Dies setzt jedoch ge-
naue Kenntnisse Uber Aufbau und Struktur
des Interpreters voraus.
BOX.COPY
Damit kommen wir zu der in diesem Bei-
trag abgedruckten Utility BOX.COPY. Wie
bereits angektindigt, handelt es sich um
das punktweise Kopieren des Inhalts ei-
nes in der HGR1-Seite definierten Recht-
ecks auf eine andere Stelle derselben
24
Seite oder wahlweise auf die HGR2-Seite.
Bindet man diese Utility in die Routinen
der vergangenen Beitrage ein, dann ist es
von Applesoft aus sehr einfach: Cursoren
einmal positionieren, dann ein zweites
Mal, ein POKE 255,0 fiir Ubertragung
HGR1-HGA1 oder POKE 255,1 flr Uber-
tragung HGR1-HGR2, ein CALL 25297,
und die Sache lauft schon. Will man nur
diese Routine allein in eigene Programme
einbauen, dann immer — in der Reihenfol-
ge X1LOW, X1HIGH, Y1 und X2LOW,
X2HIGH, Y2 — die Eckwerte der urspriing-
lichen Box in $03C4 (964) bis $03C9 (969)
und die Eckwerte des Zielgebietes in
$03CA (970) bis $03CF (975) poken, Sei-
tenflag in $00FF (255) nicht vergessen
und nun CALL 25297.
Zu dem _ eigentlichen Assemblerpro-
gramm, insbesondere fur diejenigen, die
in der Maschinensprache ihre ersten
Schritte wagen, ist noch einiges zu sagen
Es handelt sich um eine reine ,,Bit-an/Bit-
aus-Ubertragung“ ohne Ricksicht auf das
letzte Bit oder die Positionierung (d.h. Co-
lor-Bereich oder gerade und ungerade Hi-
res-Spalte), so daB beim Ubertragen von
farbigen Ausschnitten komische Farbver-
schiebungen eintreten konnen. Demge-
geniiber klappt es bei schwarzweiB immer.
Das Programm besteht aus zwei Teilen:
Der erste Teil untersucht die relative Posi-
tion der zwei Rechtecke und entscheidet,
ob das Kopieren von links nach rechts und
von oben nach unten oder umgekehrt ver-
laufen soll, da es fur den Fall, daB sich
Ursprungs- und Zielbox iiberschneiden
passieren kénnte, daB man kopiert, was
schon einmal kopiert worden ist. Das Pro-
blem ist ahnlich wie beim Moven von Spei-
cherbereichen, nur daB hier die Uber-
schneidung zweidimensional sein k6nnte.
Der zweite Teil (ab LOOP) holt sich ein-
fach einen Punkt von einer Stelle und
bringt inn an einer anderen Stelle unter,
bis der ganze Inhalt der Box Ubertragen
worden ist (siene auch Kommentar).
Drei Tricks fur Anfanger
16-Bit-Vergleich
Jeder kennt die CMP-Funktion (Compare)
zum Verzweigen (Branch) je nach Carry-
oder Zero-Flag, obwohl gelegentlich beim
Bestimmen, was grdBer, gleich oder klei-
Peeker 8/85
ner ist, Verwirrungen entstehen kénnen
Belegen aber die zu vergleichenden Werte
zwei Bytes (wie im Falle der X-Koordina-
ten), ist die einfachere Version erst ein
Vergleich der High-Bytes und, wenn sie
gleich sind, ein zweiter Vergleich der Low-
Bytes, um die Sache endgiiltig klarzuma-
chen. Der im Programm gezeigte Weg
(Trick Nr. 1) ist kirzer und schneller. Erst
ein Vergleich der zwei Low-Bytes, um das
Carry-Flag entsprechend zu setzen, dann
eine Subtraktion (mit Carry) der zwei High-
Bytes, so daB am Ende die tiblichen Bran-
ches erfolgen konnen
16-Bit-Dekrement
Was beim 16-Bit-Inkrement klappt, d.h.
das High-Byte wird dann inkrementiert,
wenn das Low-Byte den Wert $00 ein-
nimmt (ansonsten BEQ), ist beim Dekre-
mentieren nicht gegeben, da der Wert $00
des Low-Bytes auch mitgenommen wer-
den muB. Also greift man normalerweise
zur 16-Bit-Subtraktion, wobei vom High-
Byte immer eine 0 mit Carry subtrahiert
wird. Mit dem kleinen Kniff (siehe Trick Nr.
2) wird beim 16-Bit-Dekrement auch die 0
immer mitgenommen.
HSCRN-Routine
An sich hatte ich urspriinglich vor, diese
Routine als separate Utility zur allgemei-
nen Benutzung zu gestalten, aber dann
habe ich es mir anders Uberlegt. Trotz
ausgedehntem Einsatz von Zeropage-
Pointern ist das bitweise Ubertragen auch
so langsam genug! Ubertragt man eine
Box in der GréBe der ganzen Grafikseite,
d.h. 53760 Punkte, dauert dieses etwa 33
Sekunden. Eine gesonderte Routine hatte
Peeker 8/85
flr jeden einzelnen Punkt zusatzlich ein
JSR und ein RTS gekostet, also ganze 12
Zyklen mehr, und das macht sich be-
merkbar!
Ich mochte dem Leser aber eine separate
HSCRN-Routine nicht vorenthalten. Die
Routine HSCRN ist vollig relokativ, so daB
man wie folgt vorgehen kann:
Ein BLOAD HSCRN, A... an jede beliebige
Stelle. Danach die in Frage kommenden
Koordinaten in der Ublichen Reihenfolge
(XLOW, XHIGH und Y) in $0000, $0001
und $0002 poken, dann CALL... (Stelle
von A = Anfangsadresse der Routine),
danach ein N = PEEK (3). Ist N = 0, dann
ist der angepeilte Punkt schwarz, ist
N < > 0, entsprechend wei8. Einfach,
nicht wahr?
Mit dieser Folge sind die Assembler-Rou-
tinen fir das erste Modul der Serie Graf-
quattro komplett. Jetzt heiBt es zusam-
menstellen, also Diskette mit allen Assem-
bler-Routinen in das Laufwerk legen und
dann:
BLOAD XPLOT
BLOAD CURSOR 1
usw. bis
BLOAD BOX.COPY
Danach
BSAVE GRAF.QUATTRO1, A$6000, L$466
Wer sich diese Mihe nicht machen will,
kann auch die entsprechende Peeker-Dis-
kette bestellen!
Eigentlich k6nnte jetzt jeder Applesoft-
Programmierer seinen eigenen Hires-
Page-Editor selber schreiben. Nichtsde-
stoweniger wird mein eigener Editor dem-
nachst im Peeker erscheinen
Neue Preise # 8
gralik 44g & electronic on
Disketten in Box-+ Autkleber' Wahl 10 St/100 8.8
Telex 0772642 aaa-d
sburgerstrade 134
Hab
7800 FREIBURG. Tel (0761) 276864
‘Bauelemenie - Bausatze - LP's
Mesgerate = Zubehor ~ Fachiteratur
Fachgeschatt fur Elektronik + Mikrocomputer
25
BOX.COPY
ORG $6201 125297
BOX. COPY
von N.G. Barbieri/1985
Aufrufen mit CALL 25297
Kopiert den Inhalt einer Box
bitweise auf eine andere
Stelle derselben (HGR1) oder
der anderen (HGR2) Grafik-
seite
Applesoft-Routinen u. Pointer
*
HPOSN -EQU SF411
HPLOTO QU $F457
GBASL = EQU $26
HMASK —-EQU $30
HCOLORZ EQU $E4
HPAG = -EQU SE6
+ Cursorposition der
* urspriinglichen Box
*
CAIXL = EQU $34
CAIXH = -EQU $3C5
caly —-EQU. $306
ca2xL = EQU $3C7
CA2xH © -EQU $308
cazy = EQU. $309
* Cursorposition
* des neuen Platzes
cUIXL «= -EQU. $3CA
culxH = -EQU $3CB
culy = EQU. $cc
cu2xL © EQU. $3cD
cu2xH = -EQU SCE
cuzy = EQU. «SCF
.
* Zahler fir Xu
COUNXL = EQU SID
COUNXH EQU SIE
COUNY QU SIF
* X,Y-Koordinaten des zu
* ibertragenden Bits
xLoW = EQU. $00
XHIGH = -EQU $01
Y EQU $02
Y-Richtungen
# Links/Rechts-Flag
*
XFLAG — EQU $05
* X,¥-Zielkoordinaten
*
xXLOW2 = EQU $06
XHIGH2 EQU S07
ye BQU $08
*
+ Oben/unten-Flag
YFLAG = EQU $99
*
* Temporare Ablage fir beide
* X-Koordinaten u. X-Zihler
*
TEXLL © EQU SFO
TEXH1 © EQU SFA
TEXL2 -EQU SFB
TEXH2 © EQU $FC
coxL = EQU SFD
cOxH = EQU. SFE
* Grafikseite-Ubertragunsflag,
* wenn 0 auf HGRI, sonst auf HGR2
PFLAG = EQU SFF
6201
6204:
6207:
6209:
62DB:
62D
e20F:
62E1:
62E3:
6285:
6287
6289:
62EB:
62ED:
62EF
62F2
62F5:
62F7:
62F9:
62FB:
62FE
6301:
6393
6305
6307
6399
6308
639E:
6310
6312
6314:
6316
6318
631A
631D
6320:
6322:
6324:
6526:
6327:
6329
632A:
632:
632F.
6331:
6333:
6335
6336
6339:
633C:
633E
6340:
cp
a9
Do
AS
Do
c6 03 88
cc 9s 89
0 90
ol
92
93
94
02 95
0 96
oc 97
98
99
190
191
192
06 193
o 104
09 195
04 106
oo = 107
0 198
199
1p
un
112
113
FF ula
ar 115
116
17
118
119
120
5 03 121
CB OS 122
oa 123
1D 124
15 125
C4 03 126
cA OS 127
0B 128
129
130
131
132
133
134
135
oo 136
2 137
19 138
139
93 149
1A 63 141
06 (142
o1 143
03 144
04 145
oo (146
os 14at
148
06 93 149
c9 93 150
5 161
152
200153
BS 154
185
156
157
158
159
160
oc 161
162
c9 95 163
IF (164
oo 165
OF = 166
16 (167
168
169
c9 03 170
06 @3 171
iF 172
oo 173
oo (174
175
176
LDA CA1Y
cM cUu1Y
BNE STEP1
Wenn beide ¥ gleich, dann Flag
auf 2!
LDA #82
STA YFLAG
BNE TESTX
Feststellen, ob von oben nach
unten oder umgekehrt und YFLAG
entsprechend setzen.
EP] BCS DOING.
LDA #81
STA YFLAG
BNE TESTX
DOINC LDA #80
STA YFLAG
Wenn Ubertragung auf der an-
deren Seite, dann egal
welche Richtung!
ween
TESTX LDA PFLAG
BNE DOXINC
Festellen, ob von links nach
rechts oder umgekehrt und XFLAG
entsprechend setzen.
LDA CALXH
CMP CULXH
BEQ TXLOW
BCS DOXINC
BCC DOXDEC
TXLOW LDA CAIXL
CMP CULXL
BNE STEP2
Wenn gleiche X- und Y-Werte u
gleiche Seite, warum ubertragen?
Jetzt wird klar, warum bei
gleichen Y-Werten das YFLAG
auf 2 steht!
tee enee
LDA YFLAG
oMP +82
BEQ RETL
STA XFLAG
JMP STEPS
STEP2 BCS DOXINC
DOXDEC LDA #81
STA XPLAG
BNE STEPS
DOXINC LDA +80
STA XFLAG
STEPS LDA ALY
CMP cay
BNE DOIT
RET1 LDA +820
STA HPAG
RTS
Far den Y-Zahler testen, was
wovon subtrahiert werden
nuB!
see
g
Orr =
SEC
SBC CA2Y
STA COUNY
LDA YFLAG
BEQ MOD1
BNE MOD2
sUBY2
SUBY2 SEC
LDA Ca¥
SBC CALY
STA COUNY
LDA YFLAG
BEQ MOD2
* Y-Startpunkte setzen
Peeker 8/85
neninem SRBBBADEEKER 94
Abonnement bestellt _ IAGAZIN FUR APPLE-COMPUTER
Ja, ich méchte peeker abonnieren.
am: Liefern Sie mir peeker ab Ausgabe ...... .. (1985 erscheinen 11 Ausgaben —
1 Doppeinummer) zum Jahresbezugspreis von DM 72,— (Inland) incl. MwSt. Die
Vertrauensgarantie:
Lieferung erfolgt frei Haus. Porto, Verpackung und Zustellgebiihren Ubernimmt
der Verlag. Der Jahresbezugspreis fiir das Ausland betragt DM 72,— incl. MwSt.,
zzg|. DM 16,80 Versandspesen.
Kenntnis genommen,
daB ich die Bestellung _schriftlich
durch Mitteilung an den Dr. Alfred
Hithig Verlag, Postfach 102869,
6900 Heidelberg 1 innerhalb von 7
Ich winsche jahrliche Berechnung durch:
Tagen widerrufen kann. Zur Frist-
wahrung geniigt die rechtzeitige Ab- 3 Verlagsrechnung (1 Abbuchung von meinem Bank-
sendung des Widerrufs (Datum des bzw. Postscheckkonto
Poststempeis).
peeker
Leserservice Bank] PschA
Postfach 1028 69
6900 Heidelberg 1 Bankietzahl KorNr
Datum Unierschrit
Dede Abo-Karte
MAGAZIN FUR APPLE-COMPUTER
on 9949-944 DEEkER 94
re) Bitte senden Sie mir gegen Rechnung folgende Bucher:
a xj Menge| Autor, Titel DM | gesamt DM
i
am: (8)
: 2
peeker
Versandbuchhandlung
Postfach 102869
6900 Heidelberg 1 Datum Unierschrift
Fir Ihre Unterlagen k
oye 444494 PEEKER 94
und Programme bestellt:
MAGAZIN FUR APPLE-COMPUTER
a Bitte senden Sie mir
= gegen Rechnung folgende Apple-Programme:
ie} 0 Peeker-Sammeldiskette, einzeln O Apple DOS 3.3, Begleitdiskette, DM 28,—
Y Disk# ____, Disk+ O Apple ProDOS, Band 1, Begleitdiskette,
Disk+ _______, Disk+ DM 28,—
LJ Preis je Disk DM 28,- (einzeln) CO Apple ProDOS, Band 2, Begleitdiskette,
DM 28,-
@ 0 Peeker Sammeldiskette, Cl Apple Assembler, Begleitdiskette, DM 28,-
fe} ie 0 ProDOS-Editor 1.0, Programm, DM 98,—
ab Disk + —__ O MMU 2.0, Programm, DM 98,—
am: (Mindestbezug 6 Disketten) C0 INPUT 2.0, Programm, DM 98,—
bak Preis je Disk DM 20,— OC Softbreaker 1.0, Programm, DM 48,—
i O DB-Meister, Programm, DM 290,—
peeker (e} 0 Superplot, Programm, DM 48,—
Softwareabteilung ” 0 Superquick, Programm, DM 48,—
Postfach 10 28 69
6900 Heidelberg 1 & Dato Unterschnift
ea Abo-Karte
Firma
Abteilung
StraBe
PLZ/Ort
Vertrauensgarantie:
Ich habe davon Kenninis a ich die Bestellung
sohriftich durch Mitteilung an den Dr. Alfred Hathig Verlag,
Postfach 102869, 6900 Heidelberg | innerhalb von
7 Tagen widerrufen kann. Zur Fristwahrung genigt die
rechtzeitige Absendung des Widerrufs (Datum des
Poststempels)..
Datum
Unterschrift
Verlagshinweis:
Das Abonnement verlangert sich zu den jewels gatigen
Bedingungen um ein Jahr, wenn es nicht 2 Monate vor
Jahresende schritich gekondigt wird.
ovr bitte vollstandig ausfiillen
Sho
a Buch
Software -Karte
Vorname, Name
Firma
StraBe
Telefon mit Vorwahi
Karte bitte vollstandig ausfillen
Vorname, Name
Firma
StraBe
PLZ/Ort
Telefon mit Vorwahi
POSTKARTE
peeker
Leserservice
Postfach 10 28 69
6900 Heidelberg 1
POSTKARTE
peeker
Versandbuchhandlung
Postfach 10 28 69
6900 Heidelberg 1
POSTKARTE
peeker
Softwareabteilung
Postfach 10 28 69
6900 Heidelberg 1
INPUT 2.0
Ein Bildschirm-
Maskengenerator
fiir DOS 3.3 und ProDOS
von U. StiehI
1984, Diskette und Manual, OM 98,
ISBN 3-7785-1021-5
alnput 2.0" liegt wahlweise in der Bank 1
oder Bank 2 der Language Card und wird
durch einen kurzen Driver in den unteren
48K aufgerufen.
Fur jedes Feld der Bildschirmmaske lassen
sich u. a. definieren: Feldlange (bis zu 255
Zeichen) — Vtab — Htab — Datentyp (insge-
samt 8 Typen) — Scroliflag (starre oder dyna-
mische Maske) — Ctrflag — Fillflag — Lésch-
flag — Bildschirmflag (40- oder 80-2-Darstel-
lung). Innerhalb eines Eingabeteldes besteht
jeder denkbare Redigierkomfort (Insert, De-
lete, R
Showing the first 100000 of 296669 characters.