Nr. 8/85 August

DM 6,50, sfr 6,50, óS 50, Lit 5900, hfl 7,50

| MAGAZIN FUR APPLE-COMPUTER

ufwerktestprogramm Graf-quattro ` Double-Lores-Erweiterungen Adreßverwaltung mit dBASE Wordstar und FX-80 akultäten - Polaroid-System

t; y EEN

Hüthig

PUBLIKATION

Zo

Hüthig-FACHBUCH-TIP

Apple ProDOS für Aufsteiger

Mit ausführlichen Programm- beispielen

von Ulrich Stiehl

Band 2: 1. Auflage 1985, 208 S., kart., DM 30,— ISBN 3-7785-1036-3

Begleitdiskette DM 28,—

Ulrich Stiehl

P 4 “t e“ s mag ES |. A Áb Á Á

für Aufsteiger

Mit ausführlichen Programmbeispielen

Der zweite Band von ,ProDOS für Aufsteiger“ ist wieder ein typisches Tips- und Tricks-Buch, das viele nützliche Utilities und Hilfsroutinen enthält, die dem Applesoft- und As- semblerprogrammierer den Umgang mit ProDOS erleichtern sollen. Zunächst wird eine bewußt leichtver- ständliche Einführung 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 Anschluß daran wird gezeigt, wie man einige Unzulänglichkeiten des BASIC.SYSTEMs durch Tricks behe- ben kann, z. B. Einlesen von Strings mit Komma und Doppelpunkt, Laden und Speichern von Zahlen als Binär- dateien, Simulierung des fehlenden MON-Befehls u. a.

Den Hauptteil des Buches bilden so- fort einsatzfähige Utilities, die alle klassischen „Pflichtübungen“ 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 Sàttigung hat jeder schon am eigenen Leibe verspürt. 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 Stück haben wir sprichwörtlich „die Schnauze voll“ die Sättigung ist erreicht.

Was wir zur Zeit in der Mikrocomputer- branche erleben, ist sowohl eine psycho- logische als auch eine ökonomische Såtti- gung: psychologisch deshalb, weil der Reiz des Neuen verflogen ist, ökonomisch deshalb, weil der Mikrocomputer inzwi- schen in vielen Büros und Wohnungen steht. Wie an den anderen Pionieren der Mikro-Ära ist auch an der Firma Apple diese „Sättigung“ nicht spurlos vorüber- gegangen: Man spricht bereits von weite- ren Entlassungen auch in Deutschland —, und Übernahmegerüchte halten sich hart- näckig in allen größeren Wirtschaftsblät- tern. Ein durchgreifendes Revirement in der Führungsetage in Cupertino hat mitt- lerweile sein zweites Opfer gefunden:

editorial

Steven Jobs wurde nahegelegt, vom Vor- stand in den Aufsichtsrat überzuwechseln ein probates Mittel, um unliebsame Manager aufs Abstellgleis zu schieben. Wie berichtet, hatte Steve Wozniak bereits vorher seinen Hut genommen. Damit sind die beiden legendåren Grunder des Apple- Imperiums ins zweite Glied zuruckgetreten.

Apple war die einzige Mikrocomputerfirma, bei der der Begriff des ,Personal"-Com- puters noch eine andere, tiefere Bedeu- tung hatte, nåmlich die Bedeutung des von einer Persönlichkeit geschaffenen und ge- prågten Mikrocomputers, wobei ich hier namentlich an Steve Wozniak als den tech- nischen Kopf des Zweigespanns denke. Dies wird sich nun åndern, denn die Kopp- lung Apple/Sculley hat einen schaleren Sinn als die Assoziation Apple/Wozniak. Woz stand fur Genie. Sculley steht fur Pepsi. Nach den sieben fetten Jahren kom- men jetzt die sieben anderen. Da ist kein Platz mehr fur geniale Eigenbrötler oder um mit G. B. Shaw zu sprechen: ,Genius demanding bread is given a stone ..."

P i APR

Ulrich Stiehl

Am Huthig

PUBLIKATION

S

Impressum

Peeker

Magazin für Apple-Computer 2. Jahrgang 1985

ISSN 0176-9200

@ für den gesamten Inhalt einschlieBlich der Programme Dr. Alfred Hüthig Verlag, Heidelberg 1985

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

Chefredakteur:

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

Anzeigenleitung:

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

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

Titelbild: Creative Computer

Service, Mannheim

Technik

Testprogramme för Apple-ll- Diskettensysteme

Analyse von Disketten, Laufwerk und Controller

von Dipl.-Ing. Gerhard Berg

ProDOS

ProDOS für Anfänger

Teil 3: Geheimnisse von BSAVE und BLOAD

von Ulrich Stiehl

Grafik

Graf-quattro Teil 3: Tricks über Tricks von Nino G. Barbieri

Double-Lores-Applesoft-Erweiterungen von Karl-Walter Bott

CP/M

Adreßverwaltungsprogramm mit dBASE Il von Ing. (grad.) Ernst Fischer

Wordstar druckt internationale Zeichensätze

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

Assembler

Assembler-Pseudo-Opcode- Referenztabelle von Dr. Jürgen B. Kehrel

Verlag: Erscheinungsweise: 12 Hefte jährlich, Erscheinungstag jeweils 1 Woche vor Monatsbeginn. Jahresabonnement DM 72,-, einschließlich MwSt, im Inland portofrei. Einzelheft DM 6,50

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

Telefon (06221) 489-0

Telex 4-6 1727 hued d.

Vertrieb Handel:

Breslauer Str. 5, Postfach 1123, 8057 Eching b. München, Tel. 089/3191067, Telex 0522 656

18

24

32

40

45

48

51

MZV Moderner Zeitschriften Vertrieb GmbH

EEKER

MAGAZIN FÜR APPLE-COMPUTER `

Fakultäten 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 Bühner und Prof. Dr. Klaus Hausmann

Das Bildverarbeitungssstem MAGIC Siemens entdeckt neue Primzahl TRICARD-Multifunktionskarte

für Apple lle

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 Ilc RAM.FRE

Diversi-DOS 2-C

Inserentenverzeichnis

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

Brüssel 723026; Dänemark: Kopenhagen 34969; Norwegen: Oslo 994 24;

Schweden: Stockholm 5477 76-5 Printed in Germany

56

60

67

69

71

74 74

74 76 76 76

77

50 70 68

78

Bankkonten: Landeszentralbank Heidel- berg 67 207 341; BLZ 672 000 00; Deutsche Bank Heidelberg 02165041; BLZ 67270003; Bezirkssparkasse Heidelberg 204 51, BLZ 67250020.

Herstellung: Heidelberger Verlagsanstalt

Testprogramm fur Apple-ll- an opno enara oe Diskettensysteme

Anal Diskett 1% nalyse von Disketten, Z i fi

Laufwerk und Controller

6 Peeker 8/85

Im Rahmen der Artikelserie über Disket- tensysteme bringen wir in dieser Ausgabe ein Programm zum Testen des Apple-Dis- kettensystems. Das Programm ist ein un- erläßliches Werkzeug für alle, die sich nå- her mit Floppy-Laufwerken beschäftigen.

Insbesondere wird das Programm für fol- gende Anwendungen gebraucht:

Test aller Controller- und Laufwerk- Funktionen,

Justage von Diskettenlaufwerken, Fehlersuche und Reparatur von Lauf- werken und Controllern,

Test von Disketten, Anpassung von werken, Funktionsanalyse von Controller und Laufwerk.

Nicht-Apple-Lauf-

Dazu verfügt das Programm über folgende Eigenschaften:

einfache Bedienung durch Menüsteue- rung,

Fehlermeldungen bei Bedienungsfeh- lern,

grafische Ausgabe zur besseren An- schaulichkeit,

leichtes Oszillographieren durch spe- zielle Trigger-Signale und Betriebs- arten,

Laden des Programms von Diskette oder Kassette,

Betrieb aller Controller, die bus-seitig Apple-kompatibel sind,

Betrieb aller Disketten-Laufwerke bis zu 80 Spuren.

1. Eingabe und Start des Pro- gramms

Da das Programm die hochauflösende Grafik benutzt, muß dafür gesorgt werden, daß das Programm oberhalb der Grafik- Seite 1 (ab $4000) im RAM liegt. Um dies zu erreichen, müssen als erstes die fol- genden Befehle eingegeben werden:

POKE 104, 64 POKE 16384, 0 NEW

Mit dem Befehl POKE 104, 64 wird der Anfang des BASIC-Programms von $0800 nach $4000 verschoben. Wegen einer Ei- genart des Applesoft-Interpreters muß das erste Byte des Programmspeicherbe- reichs zu Null gesetzt werden. Dies ge- schieht mit dem Befehl POKE 16384, 0. Mit dem Befehl NEW werden alle anderen

Peeker 8/85

DISKTEST.B

9000: 9002: 9004: 9006: 9008: 900A: 900D: 900F: 9011: 9013: 9015: 9017: 9019: 901A: 901C: 901E: 9020:

9021: 9023: 9025: 9027: 902A: 902D: 9030: 9031: 9032: 9033: 9034: 9035:

A6 A9 85

A4 BD

c5 E6 E6 c8 E6

FA

FE FF FC 8C FB FB Ø6 FE 02 FF

EE FD EA

FA FE FB 8D 8F 8C

EE OO JO Ob Q 5 = O OG GQ Ñ ta e

TECHNI

*Unterprogramme zum Diskettensystem-Testprogramm *von Dipl.-Ing. Gerhard Berg 2.3.1985 E?

ORG $9000 * SLOT * *Positionier-Variablen

EQU $FA :Slot-Nr. * $1Ø

ZIELSP EQU SLOT+1 ;Zielspur

AKTSP EQU ZIELSP+1 ;Aktuelle Spur

BERUHZ EQU AKTSP+1 ;Beruhigungszeit in msec SCHRITT EQU BERUHZ+1 ;Schritt-Zåhler

ALTSP EQU SCHRITT+l ;Alte (vorige) Spur

* *Schreib-/Lese-Variablen

MUSTER EQU SLOT+1 ;FluBwechsel-Muster BYTEL EQU MUSTER+1 ;Byte-Zåhler

BYTEH EQU BYTEL+1 (2'er Komplement) FEHLERL EQU BYTEH+1 ;Fehler-Zåhler

FEHLERH EQU FEHLERL+1

MODE EQU FEHLERL ‚Schreib-Modus

MODEA EQU MODE ‚absolute Adressierung!! INDEX EQU MODE ‚Index-Zähler

*

*Interne I/0-Adressen TASTDAT EQU $CØØØ LAUTSP EQU $CØ3Ø TRIGGER EQU $CØ4Ø

* *Disketten-Controller-Adressen

*Effektive Adresse = Basis-Adresse + Slot-Nr. * $1Ø

;Tastatur-Daten-Register ;Lautsprecher ;Trigger (Utility Strobe)

CONTR EQU $CØ8Ø ;Controller-Basis-Adresse Q6AUS EQU $CØSC :Q6 ausschalten Q6EIN EQU $C08D ;Q6 einschalten Q7AUS EQU $CØ8E ;Q7 ausschalten Q7EIN EQU S$CØ8F :Q7 einschalten * * Q7 Q6 Funktion E, RE AUS AUS Lesen AUS EIN Schreibschutz prüfen und

Controller initialisieren Schreiben Datenregister laden

* H H H H H H H H =

*Lese-/Pruf-Routine *

LESEN LDX SLOT ;X = Slot-Nr. * $1Ø LDA STA FEHLERL ;Fehler-Zåhler löschen STA FEHLERH LDY BYTEL ;Y = Byte-Zåhler low Byte LESEN1 LDA Q6AUS, X ;Byte lesen BPL LESEN1 ;warten bis Byte komplett CMP MUSTER ¿mit Muster vergleichen BEQ LESEN2 "beide gleich -> Sprung INC FEHLERL ;Fehler-Zåhler erhöhen BNE LESEN2 INC FEHLERH LESEN2 INY ‚Byte-Zähler erhöhen BNE LESEN1 (2'er Komplement) INC BYTEH BNE LESEN1 ;Byte-Zåhler = Ø Ende RTS

*Schreib-Routine

* *MODE: * * *

Bit 7 Bit 7 Bit 7

SCHREIB LDX

SCHRØ

BIT LDA CMP STA CMP PHP PLP NOP NOP PHP PLP

x, Bit Ø, Bit 1, Bit

SLOT MODE MUSTER Q6EIN, X Q7EIN, X Q6AUS, X

;X = Slot-Nr.

Ø -> dauernd schreiben 1 1 Spur schreiben l -> 1 Spur + Index

* $10 :V Bit setzen = Bit 6

;A = Flußwechselmuster ‚Controller initialisieren

‚Schreiben einschalten + . erstes Byte ausgeben

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 Übersichtlichkeit 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 über eine Prüfsumme 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 können die folgenden Zeilen geän- dert werden:

Zeile 10140 definiert die Spurzahl des Laufwerks (z.B. 35, 40, 77 oder 80). Der maximale Wert für 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 anfängt. (Hinzu kommt noch die Ausfüh- rungszeit des BASIC-Programms.) BZ wird in Millisekunden angegeben und darf jeden Wert zwischen 1 und 255 haben. Für das Apple-Disketten-Laufwerk ist BZ nor- malerweise 25. Fürandere Laufwerke muß 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 ausgewählt.

Zeile 10180 definiert das normalerweise zu testende Laufwerk. Das mit LN definier- te Laufwerk wird bei Programmstart aus- gewählt. LN darf den Wert 1 oder 2 haben.

9036: 9038: 903A: 9Ø3C: 9Ø3F: 9042:

9044: 9045: 9048: 904A: 9Ø4D:

9Ø4E: 9050: 9052: 9054: 9056: 9059:

905B: 905D: SØSF: 9062: 9065: 9066: 9067: 9068: 9069: 906A: 906C:

906E: 9070: 9072: 9074: 9076: 9078: SØTA:

9Ø7C: SØTF: 9081: 9082: 9084: 9086: 9088: 908A:

9Ø8C: 9Ø8F: 9091: 9093: 9095: 9096: 9098: 909A: 909C: 9Ø9E:

909F: 9ØA1: 90A4: 90A6: 9ØA9: SØAB: SØAD: SØAF: 9ØB2: 9ØB5: 9ØB8:

SØBA:

c9 E6 9D DD 70

A6 A9 85 C6 84

A6 BD 2C 30 c9 2C 2C 20

A9

92 02 FF 8D 8C ØA

00

8E

FC E2 FD FE EF

Ø3 AA 8D 8c

DE EF

8C FB AA DF

F4

FC

ØØ

CH CH

00

CH

91

112 113 114 115 116 117 118 119 12Ø 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 14Ø 141 142 143 144 145 146 147 148 149 15Ø 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173

SCHR1 CMP +$92 ;12 microsec F.w.abstand? BNE SCHR2 ;nein -> Sprung INC FEHLERH ;4 microsec zusåtzlich SCHR2 STA Q6EIN,X ;Byte ausgeben CMP Q6AUS,X BVS SPSCHR ;1 Spur -> Sprung

* *dauernd schreiben, bis eine Taste gedrückt wird

NOP

LDY TASTDAT ‚Taste gedrückt?

BPL SCHR® "nein -> weiter schreiben ENDSCHR LDA Q7AUS,X :Schreiben ausschalten

RTS

* *1 Spur schreiben

SPSCHR INC BYTEL ;Byte-Zåhler erhöhen BNE SCHR® ; (2'er Komplement) INC BYTEH ;Byte-Zåhler <> Ø -> BNE SCHR1 ; weiter schreiben BIT: MODEA ‚absolute Adressierung!! BPL ENDSCHR "kein Index Ende

* *Index für Umdrehungsdauermessung schreiben

INDSCHR LDY #3 ‚3 Index Bytes INDSCH1 LDA +$AA ;Flußwechselmuster 1010 STA Q6EIN,X ;Byte ausgeben CMP Q6AUS,X PHA PLA PHA PLA DEY ;Byte-Zåhler erniedrigen BEQ ENDSCHR ‚Zähler = Ø Ende BNE INDSCHl :Zåhler > Ø -> weiter

*Anzahl Bytes pro Spur messen (vom 1. zum 2. Index) *

UMDR LDX SLOT ;X = Slot-Nr. * $1Ø LDA #3 STA INDEX ‚Index-Zähler setzen UMDR1 DEC INDEX ‚Index-Zähler erniedrigen BEQ UMDR5 ;2. Index -> Sprung LDY :Y = Byte-Zåhler low Byte STY BYTEH ;Byte-Zåhler löschen

x` *#warten bis Index vorbei

UMDR2 LDA Q6AUS, X ;Byte lesen

BPL UMDR2 ;warten bis Byte komplett

INY ;Byte-Zåhler erhöhen

BNE UMDR3

INC BYTEH

BMI UMDR5 ; > 32767 Bytes —> Fehler UMDR3 CMP +$FF :4 microsec Abstand?

BNE UMDR2 ;nein = Index -> Sprung

* xwarten auf Index

UMDR4 LDA Q6AUS,X ‚Byte lesen BPL UMDR4 ‚warten bis Byte komplett CMP +$AA ; Index? BEQ UMDR1 ;ja -> Sprung INY ‚Byte-Zähler erhöhen BNE UMDR4 INC BYTEH BPL UMDR4 ; > 32767 Bytes -> Fehler UMDR5 STY BYTEL ;Byte-Zåhler low Byte RTN RTS

*Trigger für Spur-Justage mit CE-Disk erzeugen

*BERUHZ = Mindest-Zeit bis zum nächsten Trigger in msec ` -

SPTRIG LDX SLOT ;X = Slot-Nr. * $1Ø

SPTRIG1 LDA Q6AUS,X ;Byte lesen BPL SPTRIG1 ‚warten bis Byte komplett BIT TASTDAT ‚Taste gedrückt? BMI RTN ‚ja -> Abbruch CMP #$FF :Orientierungsburst? BNE SPTRIG1 ‚nein -> auf Burst warten BIT LAUTSP "Lautsprecher ansteuern BIT TRIGGER ‚Trigger ansteuern JSR BERUH ‚warten BEQ SPTRIG ;immer springen

*Positionier-Routine * POSIT LDA

Peeker 8/85

90BC: 90BE: 9ØCØ: 90C2: 9003: 9ØC5: 9ØC7:

9ØC9: 9ØCB: 9ØCD:

SØCF: 90D1:

90D3: 9ØD5:

9ØDT :

90D9: SØDB: SØDD: SØDE: SØDF: 90E2: 9ØES: 90E8: 90EA: 90EB: 90EE: 90F1: 90F4: 90F6:

90F8: 90FB:

90FC: SØFE: 9100:

9101: 9103: 9104: 9107:

9108: 910A: 91ØC: 91ØF: 911Ø: 9112:

9113: 9115: 9116: 9118: 9119: 911A: 9110: 911E:

o11F: 9122: 9124: 912B: 912E: 9136:

311 Bytes

85

85 38 E5

49 E6 90

69 C6

C5 90

A5

A5 2A

05 AA BD 60

A2 CA EA 38 E9 60

Peeker 8/85

FE FC FF

FB 31 Ø6

FF FC 04

FE FC

FE 02

FE

ØC Øl

FC 1F 13 FF

FE 2B 13 FE C6

08

FC Ø3

FA

80

FD ØA

. 15

F8

12

FD

Øl F5

2C 1F

90 91 91

90 91 91

91

CH

Øl

28 1E

26 LE

174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 225 224 225 226 227 228 229 230 251 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1D 1C

247 1D IC

STA SCHRITT :Schritt-Zåhler löschen

POSITØ LDA AKTSP ‚aktuelle Spur laden STA ALTSP . und retten SEC ‚Zielspur subtrahieren SBC ZIELSP ‚ergibt Spurdifferenz in A BEQ AMZIEL ;Spurdiff. = Ø am Ziel BCS: POSITI ‚Diff. > Ø - nach außen

* *aktuelle Spur < Zielspur —> nach innen positionieren

EOR +#$FF :Absolutwert der Spurdiff. INC AKTSP ;aktuelle Spur erhöhen BCC POSIT2

* *aktuelle Spur > Zielspur -> nach außen positionieren POSIT1 ADC +$FE ;1 subtrahieren

DEC AKTSP ‚aktuelle Spur erniedrigen * *Spurdifferenz in A mit Schritt-Zähler vergleichen POSIT2 CMP SCHRITT

BCC POSIT3 ;Spurdiff. < Schrittzahl * -> mit Spurdifferenz Rampe runterlaufen

LDA SCHRITT :Spurdiff. > Schrittzahl * -> mit Schritt-Zähler Rampe hochlaufen * *wenn Rampe (Y) >= 12 würde -> Y nicht mehr andern POSIT3 CMP #12

BCS POSIT4 ;A >= 12 -> Y nicht ändern

TAY ;A < 12 A nach Y laden POSIT4 SEC ;C = 1 ->

JSR PHASEL ; aktuelle Phase ein

LDA ZPHEIN,Y ;Einschaltzeit warten

JSR WARTE

LDA ALTSP ‚vorhergehende Phase ...

CLC scs mitc=ß...

JSR PHASE2 . ausschalten

LDA ZPHAUS,Y ;Ausschaltzeit warten

JSR WARTE

INC SCHRITT ;‚Schritt-Zähler erhöhen

BNE POSIT®

*

AMZIEL JSR BERUH ;Beruhigungszeit warten

CLC ‚aktuelle Phase aus * *Schrittmotor Phase ein- bzw. ausschalten PHASE1 LDA AKTSP ;aktuelle Spur laden PHASE2 AND #3 ; Phasen * maskieren und ROL ;... nach links schieben * C (Phase aus/ein) ist jetzt Bit ® ORA SLOT :Slot-Nr. * $1Ø addieren TAX LDA CONTR,X ¿Phase ein-/ausschalten RTS x *Beruhigungszeit warten (BERUHZ * 1 msec) BERUH LDY BERUHZ BERUH1 LDA +1Ø :1Ø * 100 microsec JSR WARTE ; = 1 msec warten DEY BNE BERUH1 RTS * *Warte-Routine (verzögert um A * 100 microsec) WARTE LDX +18 WARTEL DEX BNE WARTE1 NOP SEC SBC zl ;A um 1 erniedrigen BNE WARTE RTS * *Zeittabellen für Rampe: Phase ein / Phase aus ZPHEIN HEX Ø13Ø28242Ø1E1D1C1C1C1C1C LG LG LG ZPHAUS HEX 7Ø2C26221F1E1D1C1C1C1C1C

1C 1C 1C

ÆTECHNIk 44

Nachdem das Programm vollståndig ein- gegeben ist, wird es mit „SAVE DISKTEST“ auf Diskette und/oder „SAVE“ auf Kassette gespeichert. Mit Hil- fe eines Texteditors sollte zusätzlich 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 benötigt: POKE 104,64: POKE 16384,0: LOAD: RUN

2. Bedienung des Programms

Nach dem Start des Programms wird auf dem Bildschirm das Hauptmenü (s. Tabel- le 1) mit allen Befehlen des Testpro- gramms ausgegeben. Die Befehle werden durch Eingabe des zugehörigen Buchsta- bens ausgeführt, die in Klein- oder Groß- schreibung eingegeben werden können.

C Mit dem C-Befehl wird der Steckplatz (Slot) ausgewählt, 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, prüft das Programm, ob sich in dem angegebenen Steckplatz tatsächlich 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 Prüfsumme gebildet. Falls die Prüfsumme nicht stimmt, wird ebenfalls eine Fehlernach- richt ausgegeben. Bei Controllern mit ab- weichendem PROM kann die Fehlermel- dung ignoriert oder das Programm für die andere Prüfsumme entsprechend abgeän- dert werden (Zeile 30080).

D - Mit dem D-Befehl wird das zu testen- de Laufwerk (Drive) ausgewählt. Jedes- mal, wenn die Taste „D“ gedrückt wird, wird zwischen Laufwerk 1 und 2 hin- und hergeschaltet. Das ausgewählte Laufwerk wird am Ende der Zeile angegeben.

E Mit dem E-Befehl wird das ausgewähl- te Laufwerk ein- bzw. ausgeschaltet. Ist das Laufwerk ausgeschaltet, so wird es durch Drücken der Taste „E“ eingeschal- tet. Wird die Taste „E“ das nächste Mal betätigt, 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 Ø dent zur Positionierung des Laufwerks auf die Spur 0. Nachdem ein Laufwerk das erste Mal eingeschaltet wurde, muß es zunächst auf Spur 0 posi- tioniert werden, bevor weitere Befehle ausgeführt werden können.

I Mit dem I-Befehl wird das ausgewählte 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- wählte Laufwerk um eine Spur nach außen.

P Mit Hilfe des P-Befehls kann direkt auf eine beliebige Spur positioniert werden. Nach Drücken der Taste „P“ springt der Cursor an das Ende der Befehlszeile. Nachdem die gewünschte Spurnummer und RETURN eingegeben wurde, positio- niert das Laufwerk auf diese Spur.

H - Mit dem H-Befehl positioniert das Laufwerk ständig zwischen zwei beliebi- gen Spuren hin und her. Damit kann der Positioniermechanismus über längere Zeit getestet werden. Nach Drücken der Taste „H“ müssen zunächst die beiden Spuren eingegeben werden (jeweils mit RETURN abgeschlossen). Danach startet das Posi- tionieren, das jederzeit durch Drücken ei- ner beliebigen Taste abgebrochen werden kann. Zum leichteren Oszillographieren wird nach jedem zweiten Positionieren ein Trigger-Impuls am Utility-Strobe-Ausgang (Game-I/O-Stecker Stift 5) erzeugt.

T - Der T-Befehl testet, ob die Diskette in dem ausgewählten Laufwerk schreibge- schützt ist oder nicht.

F - Mit dem F-Befehl wird der beim Schreiben und Lesen verwendete Fluß- wechselabstand ausgewählt. Zur Wahl stehen drei FluBwechselmuster mit den drei beim Apple-Aufzeichnungsverfahren vorkommenden Flußwechselabständen von 4, 8 und 12 Mikrosekunden. Jedes- mal, wenn die Taste „F“ gedrückt wird, wird auf das nächste Flußwechselmuster weitergeschaltet.

M - Mit dem M-Befehl wird die Betriebsart (Modus) für Schreiben und Lesen ausge- wählt. Zur Wahl stehen: „dauernd“, „1 Spur“ und „ganze Diskette“. Jedesmal, wenn die Taste „M“ gedrückt wird, wird die nächste Betriebsart für Schreiben und Lesen vorgewählt.

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 natürlich, daß die Diskette vorher mit dem gleichen FluBwechselmu- ster beschrieben wurde. Je nach ausge- wählter Betriebsart hat der L-Befehl unter- schiedliche Funktionen:

Das Lesen in der Betriebsart „dauernd“ bewirkt, daß das Lesen der momentanen Spur ständig wiederholt wird, bis es durch Drücken einer beliebigen Taste abgebro- chen wird. Nach jedem Lesevorgang wird das Ergebnis auf dem Bildschirm ausge- geben.

In der Betriebsart „I Spur“ wird die momentane Spur einmal gelesen.

In der Betriebsart „ganze Diskette“ wer- den alle Spuren der Diskette nacheinander einmal gelesen und das Ergebnis für alle Spuren auf dem Bildschirm ausgegeben. Nachdem alle Spuren gelesen wurden oder das Lesen durch Drücken einer be- liebigen Taste abgebrochen wurde, er- scheint ein Untermenü, das folgende Funktionen zuläßt:

T - Der T-Befehl bewirkt die Ausgabe der Testergebnisse in Textform auf dem Bildschirm. Dies ist die gleiche Form, in der die Ergebnisse auch während des Tests selbst ausgegeben werden.

D - Der D-Befehl bewirkt die Ausgabe der Testergebnisse auf einem Drucker. Das Programm geht davon aus, daß sich das Druckerinterface in Steckplatz (Slot) 1 befindet. Ist dies nicht der Fall, muß Zeile 25610 im BASIC-Programm entsprechend geändert 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 Maßstab die Anzahl der Lesefehler. Striche am linken Bildrand markieren die Werte für 0, 10, 100 und 1000 Lesefehler. H - Durch Drücken der Taste „H“ ge- langt man zurück zum Hauptmenü.

S Der S-Befehl des Hauptmenüs startet das Schreiben auf die Diskette. Zuvor wird geprüft, daß die Diskette nicht schreibge- schützt ist, und der Bediener wird gewarnt, welche Spuren überschrieben werden. Zur Bestätigung, daß wirklich geschrieben werden soll, muß ein „J“ (Ja) eingegeben werden.

In der Betriebsart „dauernd“ wird unun- terbrochen geschrieben, bis eine beliebi- ge Taste gedrückt wird. Diese Betriebsart ist speziell zum Oszillographieren des Schreibvorgangs vorgesehen.

In der Betriebsart „1 Spur“ wird die momentane Spur einmal mit dem ausge- wählten 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, außer daß 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 ständig numerisch und grafisch ausgegeben, bis eine beliebi- ge Taste gedrückt wird. Positive Abwei- chungen bedeuten, daß die Umdrehungs- dauer zu hoch ist bzw. daß 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 Über- prüfen 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 künstlichen 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. Zusätzlich wird pro Umdrehung auch ein „Klick“ des Lautsprechers erzeugt.

Vor Ausgabe des Trigger-Signales wird noch überprüft, ob sich das Laufwerk auf der für 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 ausführ- lich in einem späteren Artikel erläutert.

Peeker 8/85

Accelerator Ile macht Ihren Apple" II, II Plus oder lle dreieinhalbmal schneller.

TRRERERE RER BER S

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, einschließlich einer eingebauten schnellen Sprachkarte und schnellem RAM-Speicherplatz für die ROM-Sprache.

Direkt von Pandasoft (Titan Distributor für Deutschland) oder bei Ihrem Applehändler.

panciqys@Ft Dr.-Ing. Eden

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

(9) ran ge Druckerinterfaces für Apple II+/e/

Printer ang c/lll Interfaces auf dem neuesten Stand der Technik. Kompatibel mit allen gängigen Druckern wie: APPLE, EPSON, STAR, NEC, OKIDATA usw. Passende Treiber-

software wird über Dip-Switch ausgewählt. Grafikfähiges Druckerinterface

A ar ple r+ das keine Wünsche mehr offen läßt.

Über 2 Dutzend Kommandos eier) die volle Kontrolle über alle Moglichkeiten Ihres Sege

Druckers. Jetzt auch mit

lle Features: Double Hires

Grafics und 80 Zeichen Dump

mittels Druckerpuffer nachrustbar

über Bufferboard.

Grapp e à

ten 16 K Druckpuffer, der auf 32 oder 64 K aufrustbar ist. i

Besitzt alle Vorzüge des Gianola + hat aber zusåtzlich einen integrier-

Serielles Druckerinterface speziell fur den Apple Image- writer.

low KNRAPPLER C

Seriell-nach-Parallel-Wandler für den Ilc im Kabel integriert.

wie Hotlink, jedoch zusätzlich

Imagewriter Emulation und Grafik Software-Diskette.

panday®ftı.... :-:

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

Peeker 8/85

ThunderScan."

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

é File Edit Scanner Tools

ThunderScan""

Light Intensity Gauge

Light q

Contrast = 110%

JE

Brightness = +10

(Pause) æ

Lines to g0: 186

@ 32 Graustufen @ 80 Punkte/cm Auflösung @ UbertragungsmaBstab 25% - 400 % @ Vorlagen bis 20 x 25 cm | | @ Nachtragliche Veranderung des Kontrasts T

und der Helligkeit. Sc

Panday®&ftı....:-

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

und die FEW

wir haben die Software...

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

ET ing. Eden

UHLANDSTR. 195 - D- 1000 BERLIN 12 TEL.:(030)] 310 423 - TELEX: 185859 Autorisierter gece Fachhändler MICROSOFT. Distributor

11

B Mit Hilfe des B-Befehls erfolgt die Rückkehr nach BASIC. Soll das Programm anschließend 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- heitsgründen „abgekoppelt“ wird. Soll mit dem Diskettensystem weitergearbeitet werden, so muß das DOS neu gebootet werden.

3. Aufbau und Funktion des Pro- gramms

Das Testprogramm besteht aus einem Ap- plesoft-Programm für die Tastatur-Eingabe und Bildschirm-Ausgabe sowie einigen Assembler-Unterprogrammen für 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 für 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 ausführliche Beschreibung des Pro- grammablaufs ist aus Platzgründen nicht möglich. Es sollen deshalb nur einige Er- låuterungen 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 können deshalb nicht direkt im BASIC-Programm ausgeführt werden, sondern rufen über „CALL“-Befehle As- sembler-Unterprogramme auf. Für alle As- sembler-Unterprogramme wird in Adresse 250 ($00FA) die Nummer des Steckplat- zes (Slot) * 16 übergeben (Zeile 30090). Zum Positionieren wird in Adresse 251 bis 253 ($00FB bis $00FD) die Zielspur, die momentane Spur und die Beruhi- gungszeit übergeben (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-Algoritnmus unverändert 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 übergeben (Zeile 38030 und 37020). Die Schreib-Routine ist im Assembler-Programm in den Zeilen 68 bis 119 enthalten.

a. Die Flußwechselmuster

Das Testprogramm erlaubt die Auswahl zwischen drei verschiedenen Flußwech- selmustern, die den drei beim Apple-Auf- zeichnungsverfahren vorkommenden Fre- quenzen bzw. Flußwechselabständen ent- sprechen. Beim Apple-Aufzeichnungsver- fahren ist eine Bitzelle 4 usec lang. Die Definition der Datenflußwechsel ist die gleiche wie bei FM (s. Peeker 3/85, S. 19/ 20). Im Gegensatz zu FM und MFM wer- den beim Apple jedoch überhaupt keine Taktflußwechsel 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 usec Abstand zu schreiben, muß man demnach ein Disk- Byte mit dem Bitmuster 11111111 = $FF = 255 verwenden. Das Bitmuster 10101010 = $AA = 170 erzeugt eine kontinuierliche Aufzeichnung mit 8 usec Flußwechselabstand. Etwas schwieriger wird es bei 12 usec Abstand, was einem Bitmuster 100... entspricht, das sich nicht in einem 8-Bit-Disk-Byte unterbringen läßt. 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 fügt solange Nullen hinzu, bis das nächste Disk-Byte ausge- geben wird. Das Bitmuster 10010010 = $52 = 146 erzeugt die Aufzeichnung 100100100 und damit das gewünschte 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 für die drei FluB- wechselmuster.

b. Die Spurkapazität

Die nominale Spurkapazität einer Apple- Diskette berechnet sich aus folgender Formel:

Ks=U:B

In der Formel ist Ks die (unformatierte) Kapazität 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 verlängert und ist

somit 16 : T = 1117 nsec lang. Damit

beträgt die mittlere Dauer eines Prozes- sortaktes (64 :14-T+ 16:T):65 = 912: T : 65 = 980 nsec. Die Länge einer Bitzel- le ist schließlich 4 Prozessortakte und da- mit im Mittel 4 - 912 - T : 65 = 3648 : T : 65 = 3919,7 nsec = 3,9197 usec.

Damit beträgt die Kapazität einer Spur Ks = 200 000 : 3,9197 = 51024 Disk-Bits. Für 8-Bit-Disk-Bytes ist damit die Kapazi- tät pro Spur 51024 : 8 = 6378 Disk-Bytes und für 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, daß eine ganze Spur geschrieben werden soll. Um sicher- zustellen, daß auch bei Drehzahlschwan- kungen eine vollständige, in sich ge- schlossene Spur entsteht, werden 10 % mehr Disk-Bytes geschrieben. An der Stelle, wo das Schreiben ausgeschaltet wird, entsteht eine sog. Stoßstelle. Bild 4 zeigt ein Beispiel, wie eine solche StoB- stelle entsteht. Der Abstand t zwischen zwei gleichen FluBwechseln kann im Bei- spiel je nach momentaner Umdrehungs- dauer jeden Wert zwischen 0 und 16 usec haben. Je nachdem, welchen Wert t hat, tritt beim Lesen der Stoßstelle ein Fehler auf oder nicht.

Ein Wert von 0 für den Schreibmodus be- deutet, daß ununterbrochen geschrieben werden soll, bis eine Taste gedrückt wird.

d. Das Lesen

Beim Lesen werden in Adresse 251 bis 253 ($00FB bis $00FD) das Flußwechsel- muster und die Anzahl der zu lesenden Disk-Bytes übergeben (Zeile 38030). Die Anzahl der zu lesenden Disk-Bytes ist ge- nau gleich der nominalen Spurkapazität. Das Assembler-Unterprogramm zum Le- sen befindet sich in den Zeilen 47 bis 69. Bei Rückkehr vom Unterprogramm wird in Adresse 254 und 255 ($00FE und $00FF) die Anzahl der fehlerhaft gelesenen Disk- Bytes übergeben. Um die Software zu ver-

Peeker 8/85

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 håufig 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 über eine Messung der Spur- kapazitàt. Für ein einwandfreies Funktio- nieren der Software (insbesondere von Nibble-Kopierern) ist es erforderlich, daß

mindestens die nominale Spurkapazität auf die Diskette paßt. Für alle Euro-Apples, die mit einer von US-Apples etwas abwei- chenden Oszillatorfrequenz arbeiten, be- deutet das, daß die nominale Umdre- hungsdauer nicht 200 msec beträgt, 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 Digitalzähler auf genau 200 msec eingestellt werden.

Für die Messung der Spurkapazität wird zunächst eine ganze Spur mit 4 usec FluB- wechselabstand (Flußwechselmuster 255 = $FF) beschrieben. Unmittelbar danach werden drei Disk-Bytes mit 8 usec Fluß- wechselabstand als Index aufgezeichnet.

|[——— e s-Byte——— h. À |

Í Bitzelle Daten ($FF) Magnetisierung

Leseimpulse

E |

Bild 1: Aufzeichnung mit 4 usec FluBwechselabstand

Me Disk-Byte

|Bitzelle | Daten ($AA)

Magnetisierung

Leseimpulse

KG

Bild 2: Aufzeichnung mit 8 usec FluBwechselabstand

Peeker 8/85

TN re re re rs re oe

s

|

l

| ro =”,

| | | | Daten ($52)

Magnetisierung

Leseimpulse

1. Umdrehung 2. Umrehung

resultierende Magnetisierung

Lesesignal

Daten

| Bitzelle

1

| 111010. 110101110910

e e Ee r

Technik a

Zum Erzeugen deser Aufzeichnung wird der Schreiomodus zu 192 ($C0) gesetzt. Nach dem Schreiben wird gelesen und die Anzahl der Disk-Bytes von Index zu Index gezåhlt. Die zugehörige Assembler-Routi- ne ist in den Zeilen 122 bis 152 enthalten. Bei der Ruckkehr in das BASIC-Programm enthålt Adresse 252 und 253 ($00FC und $00FD) die Anzahl der Disk-Bytes. Adres- se 254 ($00FE) enthålt 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 für die Messung der Umdre- hungsdauer ist also, daß der Schreib-/ Lesekreis einwandfrei funktioniert. L

Disk-Byl ta ng

E

Bild 3: Aufzeichnung mit 12 usec FluBwechselabstand

1 0 1 0 1 1 0 1

Bild 4: Beispiel einer StoBstelle bei einer Aufzeichnung von

8 usec FluBwechselabstand

13

14

Tabelle 1: APPLE II DISKETTENSYSTEM TEST

Controller-Steckplatz (Slot): 6 Laufwerk (Drive): 1

Laufwerk ein-/ausschalten: aus Positionieren auf Spur Ø

1 Spur nach innen

1 Spur nach auBen

Positionieren auf Spur:

hin und her zwischen Spur

= J > H J O A

Schreibschutz testen Flußwechselabstand: 4 microsec Schreib/Lese Modus: 1 Spur Schreiben

Lesen

abwechselnd schreiben und lesen

m C (OS J H

Umdrehungsdauer messen Spur-Justage: Trigger generieren Ausgang nach BASIC

wac

DISKTEST

10000 REM Testprogramm für Apple II Diskettensysteme

10010 REM von Dipl.-Ing. Gerhard Berg - 2.3.1985

10020 :

10100 POKE 35,24: IF WS > ® GOTO 10210

10110 HOME : IF PEEK (104) < 64 GOTO 29100

10120 HM = 36864: HIMEM: HM

10130 :

10140 AS =

10150 PH

10160 BZ

10170 SN

10180 LN

10190 :

10200 GOSUB 50000:F = Ø: GOSUB 30000

10210 GOSUB 490700: IF F > Ø GOTO 10610

10220 :

10500 REM Hauptschleife

10510 GOSUB 45000: GOSUB 42000:F = Ø

10520 FOR B = 1 TO MB: IF MID$ (BT$,B,1) = EZ$ GOTO 10540

10530 NEXT :B = 9

10540 IF FB(B) > Ø AND SN = Ø THEN F 1: GOTO 10610

10550 IF FB(B) > 1 AND AE = @ THEN F = 2: GOTO 10610

10560 IF FB(B) > 2 AND S(SN,LN) < Ø THEN F = 3: GOTO 10610

10570 IF FB(B) < 4 GOTO 10600

10580 GOSUB 36000: IF SS = 1 THEN F = 4: GOTO 10610

10590 GOSUB 41000: IF EZ$ = "N" GOTO 10500

10600 ON B GOSUB 11000,12000,13000,14000,15000,16000,17000, 18000 ,40020,20000,21000,22000,23000,25000,25000, 40020 27000. 28000 , 29000

10610 IF F > Ø THEN GOSUB 40000

10620 GOTO 10500

10630 :

11000 REM Steckplatz auswàhlen

11010 IF SN > Ø THEN AE = Ø: GOSUB 33000

11020 Bl = 1: GOSUB 44000: GET EZ$:SN = ASC (EZ$) - 48

11030 IF SN < 1 OR SN > 7 THEN PRINT BEL$;: GOTO 11020

11Ø4Ø GOSUB 42000: PRINT "Bitte warten!";

11050 GOSUB 30000: GOSUB 42000: GOTO 31000

11060 :

12000 REM Laufwerk auswàhlen

12010 LN = 1 + NOT (LN 1): GOTO 32000

12020 :

13000 REM Laufwerk ein-/ausschalten

13Ø1Ø AE = NOT AE: GOTO 33000

13Ø2Ø :

14000 REM Nach Spur Ø positionieren

14010 S(SN,LN) = MS + 4:S = 0: GOTO 34000

14020 :

15000 REM 1 Spur nach innen

15010 S = S(SN,LN) + 1: IF S > MS GOTO 40020

15020 GOTO 34000

15030 :

16000 REM 1 Spur nach auBen

16010 S = S(SN,LN) 1: IF S < Ø GOTO 40020

16020 GOTO 34000

16030 :

17000 REM Positionieren

17010 Bl = 7: GOSUB 44000: GOSUB 35000

17020 IF S(SN,LN) < Ø THEN HV = S: GOSUB 14000:S = HV

17030 GOTO 34000

35: REM Anzahl Spuren

2: REM Phasen pro Spur

25: REM Beruhigungszeit in msec 6: REM Steckplatz-Nr.

1: REM Laufwerk-Nr.

17040 :

18000 18010 18020 18030 18040 18050 18060 18070 18080 18090 20000 20010 20020 20030 20040 21000 21010 21020 21030 21040 21050 22000 22010 22020 22030 23000 23010 23020 23030 23100 23110

REM Hin und her positionieren

Bl = 8: GOSUB 44000

GOSUB 35000:SH(1) = S: PRINT " und "; GOSUB 35000:SH(2) = S: GOSUB 43000

IF S(SN,LN) < Ø THEN GOSUB 14000

FOR I = 1 TO 2:S = SH(I): GOSUB 34000 IF PEEK (TD) > 127 GOTO 18080

NEXT I:HV = PEEK (TG): GOTO 18050

Bl = 8: GOSUB 44000: GOTO 42000

REM Schreibschutz testen

GOSUB 36000: PRINT "Diskette ist "; IF SS = Ø THEN PRINT "nicht "; PRINT "schreibgeschützt.";: RETURN

REM FluBwechselabstand wåhlen

FM = FM + 1: IF FM = 4 THEN FM = 1

AB = KS: IF FM = 3 THEN AB = INT (AB * 8 / 9) Bl = 11: GOSUB 44000

PRINT SPC( FM < 3);FM * 4;" microsec": RETURN

REM Schreib-/Lese-Modus wåhlen MO = MO + 1: IF MO = 4 THEN MO = 1

Bl = 12: GOSUB 44000: PRINT MO$(MO);: RETURN

REM Schreib-Funktion IF MO < > 2 THEN GOSUB 43000 ON MO GOTO 231ØØ,37ØØØ,232ØØ

REM Dauernd schreiben SM = Ø:Fl = FM:Al = AB: GOSUB 37020: GOTO 42000

23120 :

23200 23210 23220 23230 23240 25000 25010 25020 25100 25110 25120 25130 25140 25150 25200 25210 25220 25230 25240 25300 25310 25320 25330 25340 25350 25360 25370 25400 25410 25420 25430 25440 25450 25460 25470 25480 25500 25510 25520 25530 25540 25600 25610 25620 25630 25640 25650 25660 25670 25680 25690 25700 25710

REM Ganze Diskette beschreiben

FOR S = @ TO MS: GOSUB 34000: GOSUB 37000 IF PEEK (TD) > 127 GOTO 42000

NEXT : GOTO 42000

REM (Schreiben und) lesen ON MO GOTO 251ØØ,252ØØ,253ØØ

REM Dauernd (schreiben und) lesen GOSUB 43000: POKE 35,22: HOME GOSUB 25200: PRINT

IF PEEK (TD) < 128 GOTO 25120 GOTO 48000

REM Einmal (schreiben und) lesen

IF B = 15 THEN GOSUB 37000

GOSUB 39000: PRINT "Bytes gelesen: ";AB; PRINT " Fehler: ";LF;: RETURN

REM Ganze Diskette (schreiben und) lesen GOSUB 43000: POKE 35,22: HOME : GOSUB 47000 FOR S = Ø TO MS: GOSUB 34000

IF B = 15 THEN GOSUB 37000

GOSUB 39000:LF(S) = LF: GOSUB 46000

IF PEEK (TD) > 127 THEN TS = S: GOTO 25400 NEXT :TS = MS

GOSUB 42000: VTAB 23: POKE 35,24

PRINT "T Text-Ausgabe G Grafik-Ausgabe" PRINT "D Drucker-Ausgabe H - Hauptmenü"; GOSUB 45000: FOR I = 1 TO 4

IF EZ$ = MID$ ("TDGH",I,1) GOTO 25460

NEXT : PRINT BEL$;: GOTO 25430

TEXT : POKE 35,22 + (I = 4) * 2: HOME

ON I GOTO 255ØØ,256ØØ,258ØØ,49ØØØ

REM Text-Ausgabe

GOSUB 47000

FOR S = Ø TO TS: GOSUB 46ØØØ: NEXT GOTO 2543Ø

REM Drucker-Ausgabe

PR# 1: POKE 35,2Ø

PRINT B$(11);" ";: GOSUB 21040: PRINT FOR I = 1 TO SP: PRINT "Spur Fehler "; NEXT : PRINT

FOR I = Ø TO ZE - 1

FOR J = Ø TO MS STEP ZE

S= I+ J: IF S > TS GOTO 25700

LF = LF(S):L1 = LEN ( STR$ (LF))

PRINT " ";S; SPC( 3 + (S < 10));LF; SPC( 8 L1); NEXT : PRINT : NEXT

IN# Ø: PR# Ø: GOTO 25430

Peeker 8/85

BUCH-SHOP

Apple DOS 3.3

von Ulrich Stiehl

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

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

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

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

Apple II

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

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

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

Peeker 8/85

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

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

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

Apple Maschinen- sprache

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

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

Aus dem Inhalt:

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

Apple II

leicht gemacht

von Joseph Kascmer

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

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

Aus dem Inhalt:

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

Apple Assembler Tips und Tricks

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

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

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

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

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

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

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

Arbeiten mit dem Macintosh

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

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

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

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

BASIC Ubungen

für den Apple

von J. P. Lamoitier

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

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

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

Aus dem Inhalt:

Ihr erstes BASIC-Programm FluBdiagramme Ubungen mit Integerzahlen Elementare Beispiele aus der Geometrie Allgemeine Ubungen aus der Datenverarbeitung Mathema- tische Berechnungen Kauf- månnische Berechnungen Spiele Operations Research Statistik

Apple ProDOS für Aufsteiger Band 1

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

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

Aus dem Inhalt:

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

19

16

25720 25800 25810 25820 25830 25840 25850 25860 25870 25880 25890 25900 25910 25920 25930 25940 25950 25960 25970 27000 27010 27020 27030 27040 27050 27060 27070 27080 27090 27100 27110 27120 27130 27140 27150 27160 27170 27180 27190 27200 27210 27220 27230 28000 28010 28020 28030 29000 29010 29020 29100 29110 29120 29130 29140 29200 29210 29220 29230 29240 30000 30010 30020 30030 30040 30050 30060 30070 30080 30090 30100 30110 31000 31010 31020 31030 32000 32010 32020 33000 33010 33020 33030 33040 33059

REM Grafik-Ausgabe VTAB 21:Hl = INT (MS / 40) + 1:H2 = 5 * Hl FOR I = @ TO TS STEP H2 HTAB 2 + I * 6 / (7 * Hl): PRINT I;: NEXT HGR : HCOLOR= 3:SF = 152 / LOG (AB) FOR I = Ø TO 3:Y = 152 - LOG (10 1 I) * SF HPLOT Ø,Y TO 2,Y: NEXT FOR I = @ TO TS STEP Hl

= 10 + I * 6 / Hl: HPLOT X,153 TO X,154

= INT (I / H2) * H2 THEN HPLOT TO X,157

=6 + Hl:X = X1: HPLOT X1,152 FOR S = 0 TO TS LF = LF(S): IF LF = Ø THEN LF = 1 Y = 152 L0G (LF) * SF: HPLOT TO X,Y X = X + 6 / Hl: HPLOT TO X,Y: NEXT HPLOT TO X,152: HPLOT TO X1,152: GOTO 25430

REM Umdrehungsdauer messen GOSUB 43000: POKE 35,22: HOME HGR : HCOLOR= 3:Y = 0 X1 = 2 * KS / 100: REM 1% FOR X = 140 - X1 TO 140 + X1 STEP X1 HPLOT X,@ TO X,154: NEXT VTAB 21: HTAB 2: PRINT "—1%"; TAB( 38);"+1%"; IF PEEK (TD) > 127 GOTO 48000 SM = 192:A1 = KS * 1.1:F1 = 1: GOSUB 37020 CALL UR: VTAB 22: HTAB 18: CALL ZL IF PEEK (254) = Ø GOTO 27120 PRINT "Fehler";: GOTO 27070 BY = PEEK (252) + 256 * PEEK (253) + 1 INT ((BY KS) * 1000 / KS + 0.5) / 10 = ABS (UT):UT$ = STR$ (UA): IF UA > 20 GOTO 27110 IF UA > Ø AND UA < 1 THEN UT$ = "Ø" + UT$ UT$ = VZ$( SGN (UT) + 2) + UT$ IF UT = INT (UT) THEN UT$ = UT$ + ".Ø" PRINT UT$:"Z": X = 140 + (BY KS) * 2: IF X < Ø THEN X = Ø IF X > 279 THEN X = 279 HPLOT X,Y:Y = Y + 1: IP Y < 155 GOTO 27070 GOTO 27020

REM Trigger für Spur-Justage generieren IF S(SN,LN) < > JS THEN F = 7: RETURN GOSUB 43000: POKE 253,190: CALL JR: GOTO 42000

REM Ausgang nach BASIC HOME : POP : END

PRINT "Bitte geben Sie ein:": PRINT

PRINT "POKE 1Ø4,64": PRINT "POKE 16384,Ø"

PRINT : PRINT "und laden Sie das Programm neu!" GOTO 29210

HOME : PRINT "Fehler in 'DATA'- Befehlen!" PRINT CHR$ (7);: CLEAR : END

REM Steckplatz (Slot) auswählen

F$(5) = LEFT$ (F$(5),35) + STR$ (SN) + "!" PA = 49152 + 256 * SN: FOR I = 1 TO 7 STEP 2 IF PEEK (PA + I) = CE(I) GOTO 30050

SN = @:F = 5: RETURN

NEXT :SA = 49280 + 16 * SN

PS = Ø: FOR I = Ø TO 255

PS = PS + PEEK (PA + I): NEXT

IF PS < > 31558 THENF=6

POKE 25Ø,SN * 16

RETURN

REM Steckplatz Nr. ausgeben IF SN = ® THEN RETURN Bl = 1: GOSUB 44000: PRINT SN

REM Laufwerk auswählen Bl = 2: GOSUB 44000: PRINT LN: GOSUB 34050

REM Motor ein-/ausschalten

Bl 3: GOSUB 44000: PRINT AE$(AE)

HV PEEK (SA + 8 + AE): REM Motor ein/aus

HV PEEK (SA + 9 + LN): REM Laufwerk 1 / 2 REM In obigen Befehlen keine "POKEs" verwenden! RETURN

33069 :

34000

REM Positionieren nach Spur 'S'

IF S = S(SN,LN) THEN RETURN

POKE 251,5 » 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) < Ø THEN RETURN PRINT S(SN,LN);: RETURN

REM Spur-Nr. eingeben

H = POS (0) + 1: GOTO 35030

PRINT BEL$;

VTAB V: HTAB H: CALL ZL

INPUT "";EZ$: IF EZ$ = "" GOTO 35020

S = VAL (EZ$): IF S < Ø OR S > MS GOTO 35020

IF INT (S) < > S OR STR$ (S) < > EZ$ GOTO 35020 VTAB V: HTAB H: CALL ZL: PRINT S;: RETURN

REM Schreibschutz prufen

HV = PEEK (SA + 13):SS = PEEK (SA + 14) > 127 HV = PEEK (SA + 12): RETURN

REM Schreiben

Al = AB * 1.1:F1 = FM:SM = 64

GOSUB 38000: POKE 254,SM

CALL SR: RETURN

REM Byte-Anzahl und Flußwechselabstand setzen Al = 65536 INT (Al): REM 2'er Komplement

A2 = INT (Al / 256):Al = Al - AR x 256

POKE 251,FM(Fl): POKE 252,A1: POKE 253,A2 RETURN

REM Lesen Al = AB:Fl = FM: GOSUB 38000: CALL LR LF = PEEK (254) + 256 * PEEK (255): RETURN

REM Fehler-Nachricht ausgeben GOSUB 42000: FLASH : PRINT F$(F); NORMAL : PRINT BEL$;: RETURN

REM Lösch-Warnung ausgeben

T$ = "Spur " + STR$ (S(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 45500

IF EZ$ < > "J" AND EZ$ < > "N" GOTO 41050

REM Zeile 23 und 24 löschen POKE TT,Ø: VTAB 23: HTAB 1: CALL ZL VTAB 24: CALL ZL: RETURN

REM Stop-Hinweis ausgeben GOSUB 42ØØØ: INVERSE

PRINT "STOP MIT JEDER TASTE"; NORMAL : RETURN

REM Cursor zum Ende der Befehlszeile V = Bl + 2:H = LEN (B$(Bl)) + 6 VTAB V: HTAB H: CALL ZL: RETURN

REM Zeichen-Eingabe ohne Cursor EZ = PEEK (TD): IF EZ < 128 GOTO 45010 POKE TT,@:EZ$ = CHR$ (EZ 128)

REM Klein- in Großbuchstaben umwandeln IF EZ$ < = CHR$ (96) THEN RETURN EZ$ = CHR$ ( ASC (EZ$) - 32): RETURN

REM Fehler pro Spur ausgeben

Hl = INT (S / ZE):V = S ZE * 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

ZE = INT (MS / SP) + 1: INVERSE

FOR I = Ø 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 Zurück zum Hauptmenü

GOSUB 42000: INVERSE

PRINT "WEITER MIT JEDER TASTE"; NORMAL : GOSUB 45000: TEXT

Peeker 8/85

48040 :

49000 49010 49020 49030 49040 49050 49060 49070

REM Menü ausgeben

HOME : HTAB 5: INVERSE : NORMAL : PRINT

FOR B = 1 TO MB:B$ = IF B$ < > " " THEN PRINT B$;" PRINT : NEXT

GOSUB 21020: GOSUB 22020: GOTO 31000

PRINT TI$

MID$ (BT$,B,1) ";B$(B);

49080 F

49090 :

50000 50010 50020 50030 50040 50050 50060 50070 50080 50090

REM Programm-Initialisiserung

TI$ = "APPLE II DISKETTENSYSTEM TEST"

SPEED= 100: HOME

HTAB 5: INVERSE : PRINT TI$: NORMAL : PRINT PRINT TAB( 6);"von Gerhard Berg - 2.3.1985" VTAB 23: HTAB 1: INVERSE

PRINT "PROGRAMM-DISKETTE AUS LAUFWERK NEHMEN" HTAB 5: PRINT "UND LEERE DISKETTE EINLEGEN!"; NORMAL : SPEED= 255

VTAB 12: HTAB 13: PRINT "Bitte warten"

50100 :

51000

51010 51020 51030 51040 51050 51060 51070 51080 51090 51100 51110 51120

AE = Ø:FM = 1:MO = 2:KS = 6378:JS = 16 + 16 * 40)

MS = AS - 1: DIM LF(MS),S(7,2)

FOR I = Ø TO 7:S(I,1) = 1:S(1,2) = - BEL$ = CHR$ (7):ZL = 64668

FM(1) = 255:FM(2) = 170:FM(3) = 146

CE(1) = 32:CE(3) = 0:CE(5) = 3:CE(7) = 60 TD = 49152:TT = 49168:TG = 49216

LR = HM:SR = HM + 33:UR = HM + 110

JR = HM + 159:PR = HM + 186

AE$ (Ø) = "aus":AE$(1) = "ein"

VZ$(1) = "-":VZ$(2) = " ":VZ$(3) = "+" BT$ = "CDEØIAPH TFMSLW UJB"

MB = LEN (BT$): DIM B$(MB),FB(MB)

5113Ø :

52000 52010 52020 52030 52040 52050 52060 52070 52080 52090 52100 52110 52120 52130 52140 52150 52160 52500 52510

53000 53010 53020 53030 53040 53050 53060 53070 53080

FOR I = 1 TO MB: READ B$(I): NEXT

DATA "Controller-Steckplatz (Slot) #:" DATA "Laufwerk (Drive) #:"

DATA "Laufwerk ein-/ausschalten:"

DATA Positionieren auf Spur Ø

DATA 1 Spur nach innen,l Spur nach außen DATA "Positionieren auf Spur:"

DATA hin und her zwischen Spur

DATA " ",Schreibschutz testen

DATA "FluBwechselabstand:"

DATA "Schreib/Lese Modus: "

DATA Schreiben, Lesen

DATA abwechselnd Schreiben und Lesen DATA "Ç" ",Umdrehungsdauer messen

DATA "Spur-Justage: Trigger generieren" DATA Ausgang nach BASIC

FOR I = 1 TO MB: READ FB(I): NEXT DATA Ø,1,1,2,3,3,2,2,Ø,2,Ø,Ø,4,3,4,Ø,4,3,Ø 52520 :

FOR F = 1 TO 7: READ F$(F): NEXT

DATA KEIN CONTROLLER AUSGEWÄHLT!

DATA LAUFWERK IST NICHT EINGESCHALTET ! DATA KOPFPOSITION IST UNDEFINIERT!

DATA DISKETTE IST SCHREIBGESCHUTZT!

DATA "KEIN DISK-CONTROLLER IN STECKPLATZ " DATA FEHLER IN PRÜFSUMME DES BOOT-PROM'S! DATA SPUR-JUSTAGE AUF SPUR

F$(7) = F$(7) + " " + STR$ (JS) + "!"

53090 :

54000 54010

54020 :

55000

55010 PS =

55020 55030 55040 55050 55060 55070 55080 55090 55100 55110 55120 55130 55140 55150 55160

FOR I = 1 TO 3: READ MO$(I): NEXT DATA dauernd. L Spur,ganze Diskette

REM Assemblerprogramm abspeichern

Ø: FOR I = 36864 TO 37174

READ HV: POKE I,HV:PS = PS + HV: NEXT DATA 166,25Ø,169,Ø,133,254,133,255 DATA 164,252,189,140,192,16,251,197 DATA 251,240,6,230,254,208,2,230 DATA 255,200,208,238,230,253,208,254 DATA 96,166,250,36,254,165,251,221 DATA 141,192,157,143,192,221,14Ø,192 DATA 8,4Ø,234,234,8,4Ø,2Ø1, 146

DATA 2Ø8,2,23Ø,255,157,141,192,221 DATA 14Ø,192,112,1Ø,234,172,Ø,192 DATA 16,234,189,142,192,96,23Ø,252 DATA 2Ø8,226,23Ø,253,2Ø8,224,44, 254 DATA Ø,16,239,16Ø,3,169,17Ø,157

DATA 141,192,221,14Ø,192,72,1Ø4,72 DATA 1Ø4,136,24Ø,222,2Ø8,239,166,25Ø

Peeker 8/85

(AS >

55170 55180 55190 55200 55210 55220 55230 55240 55250 55260 55270 55280 55290 55300 55310 55320 55330 55340 55350 55360 55370 55380 55390 55400 55410 55500 55510 55520

technik 44

DATA 169,3,133,254,198,254,240,36 DATA 160,0,132,253,189,140,192,16 DATA 251,2ØØ,2Ø8,4,23Ø,253,48,2Ø DATA 201,255,208,240,189,140,192,16 DATA 251,201,170,240,223,200,208,244 DATA 230,253,16,240,132,252,96,166 DATA 250,189,140,192,16,251,44,0 DATA 192,48,243,201,255,208,242 ,44 DATA 48,192,44,64,192,32,8,145 DATA 240,229,169,0,133,254,165,252 DATA 133,255,56,229,251,240,49,176 DATA 6,73,255,230,252,144,4,105 DATA 254,198,252,197,254,144,2,165 DATA 254,201,12,176,1,168,56,32 DATA 252,144,185,31,145,32,19,145 DATA 165,255,24,32,254,144,185,43 DATA 145,32,19,145,230,254,208,198 DATA 32,8,145,24,165,252,41,3

DATA 42,5,250,170,189,128,192,96 DATA 164,253,169,10,32,19,145,136 DATA 208,248,96,162,18,202,208,253 DATA 234,56,233,1,208,245,96,1 DATA 48,40,36,32,30,29,28,28

DATA 28,28,28,112,44,38,34,31

DATA 30,29,28,28,28,28,28

IF PS < > 45695 GOTO 29200

INt Ø: PR Ø

POKE 35,22:WS =

DISKTEST.START

POKE 1Ø4,64 POKE 16384,Ø RUN DISKTEST

RETURN

Tien bear.

Union Dielen = IC ) Stie hi di

Í Í

Trick Icks

EI

Ny wor ann, NS Í

Apple DOS 3.3 Tips und Tricks

von U. Stiehl

2. Aufl. 1984, 216 S., mit zahlreichen, ausführlich kommentierten Programm- listings, kart., DM 28,—

ISBN 3-7785-1049-5

Dr. Alfred Hüthig Verlag : Postf. 10 28 69 : 6900 Heidelberg 1

17

ProDOS für Anfanger

Teil 3: Geheimnisse von BSAVE und BLOAD

1. FID in Applesoft?

Wenn Sie bislang noch nicht vom BASIC .SYSTEM überzeugt 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 leistungsfåhigsten BASIC.SYSTEM-Befehle vorstellen werde.

Sie kennen alle das alte FID (File Devel- oper) für DOS 3.3, das zum Kopieren von DOS-Dateien dient. Dieses Maschinen- programm hat eine Länge von ca. 4800 Bytes. Nun stellen Sie sich einmal vor, Sie sollten dieses Programm (fast) ausschließ- lich in Applesoft-Basic (mit höchstens ganz kurzen Maschinenroutinen) schrei- ben. Wäre dies möglich? Wie groß wäre dann das Applesoft-Programm? Und wie würden Sie vorgehen, damit T-, B- und A- Dateien beliebiger Länge kopiert werden können? Sie werden jetzt mit Recht ver- muten, daß nicht nur ein sehr großes, son- dern auch ein sehr langsames Applesoft- Programm entstehen würde.

Nicht so unter dem BASIC.SYSTEM von ProDOS! Hier ist es tatsächlich möglich, ein Kopierprogramm für Dateien beliebiger Art und Größe fast ausschließlich 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 leistungsfähigen BSAVE/BLOAD-Befehls möglich.

18

2. BSAVE und BLOAD

2.1. Speicherbereich

Der Speicher des Apple lle/llc/ll Plus läßt 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 Länge $2000. Bei der Längenberechnung beachte man immer, daß das erste Byte mitgezählt werden muß. Ein einfaches Beispiel:

Speicherbereich: 768-770 Anfangsadresse: 768

Endadresse: 770

Länge: 3 (768 + 769 + 770)

Die Länge 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 låBt sich durch Anfangsadresse, Endadresse und Långe charakterisieren. Im Grenzfall ist die Långe = 1; dann fallen Anfangsadresse und Endadresse zusammen. Jede Spei- cherstelle enthålt einen Wert (= Byte) im Bereich 0-255 bzw. $00-$FF. Die einzel-

von Ulrich Stiehl

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 (Långe - 1). Nehmen wir hierzu an, daß 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 Zählung mit 0 bei 768 beginnt. Die nullte oder bei „normaler“ Zählweise , erste“ Speicherstelle (mit dem Offset = Abstand = 0) enthält „A“, die 1. Speicherstelle (Offset = 1) enthält „B“ und die 2. und letzte Speicherstelle (Offset = 2) enthält „C“. Der Byte-Offset liegt damit stets im Bereich O bis Länge minus 1.

2.2. Datei

Ziehen wir nunmehr zu den weiteren Erör- terungen das Bild 1 heran. In der oberen Bildhälfte wird ein Teil des RAM-Spei- chers, nämlich der für BSAVE und BLOAD hauptsächlich in Frage kommende Spei- cherteil $0800-$95FF dargestellt. Als Speicherauszug (= auf Diskette zu spei- chernder Bereich) wählen wir $2000- $3FFF (HGR1).

Peeker 8/85

Wàhrend der RAM-Bereich als eine konti- nuierliche Folge von Bytes im internen Speicher definiert werden kann, läßt sich die Diskettendatei bzw.. der File als eine kontinuierliche Folge von Bytes im exter- nen Speicher (= Datenträger: Diskette, Festplatte, RAM-Disk usw.) charakterisie- ren. Daß eine Datei letztlich in 512-Byte- Blocks unterteilt ist, die physisch auf der Diskette verstreut sein können und inso- fern kein Byte-Kontinuum darstellen, ist zunächst 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 Hälfte von Bild 1. Die dort dargestellte Datei namens FILE hat eine Länge 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. Ähnlich wie der Gesamtspeicher in Speicherbereiche unterteilt werden kann, läßt 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 Dateilänge. Zum anderen bedeutet EOF (als Ordinal- zahl) die Nummer desjenigen Bytes, das dem letzten Byte der Datei folgt bzw. fol- gen würde. Man beachte also, daß der Begriff EOF nicht mit dem Begriff Dateien- de identisch ist.

Nun kommen wir endlich zum BSAVE/ BLOAD-Befehl. Der BSAVE-Befehl über- trägt einen (beliebigen) Speicherbereich als Speicherauszug in einen (beliebigen) Teilbereich einer Datei, während der BLOAD-Befehl einen (beliebigen) Teilbe- reich einer Datei in einen (beliebigen) Speicherbereich einlädt. Im einzelnen gibt es folgende Parameter:

A = Anfangsadresse des Speicherbe- reichs

E = Endadresse des Speicherbereichs

L = Länge des Speicherbereichs

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

RAM $0800 A$2000 FILE B$0000 B$2000

E$3FFF

prodos 44

x =

AN

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 zulässig, weil $0000- $02FF sowie $9600-$BFFF vom BASIC- ‚SYSTEM als belegt markiert werden.

L-Parameter: Die Länge ergibt sich aus (E - A + 1). Die maximale Länge beträgt theoretisch $FFFF = 65535. Beim BSAVE muß man neben A entweder E oder L angeben, also niemals beide gleichzeitig! Wenn man beim BLOAD A, E und L weg- läßt, 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 zurückgespeichert werden (vgl. Bug weiter unten).

B-Parameter: Da unter ProDOS eine ein- zelne Datei 16M groß sein kann, kann der B-Parameter Werte im Bereich $000000 bis $FFFFFF einnehmen. Wenn B fehlt, wird automatisch B = 0 angenommen. Mit B meint man stets den Byte-Offset in der externen Datei und niemals den o.g. Byte- Offset im internen Speicherbereich.

Die Werte für A, E, L und B können wahl- weise als Dezimal- oder Hexadezimalzah- len (mit vorangestelltem $-Zeichen) ein- gegeben werden.

T-Parameter: Dieser Parameter für die di- versen Dateitypen (TBIN, TTXT usw.) ist nur dann erforderlich, wenn eine Nicht- BIN-Datei bearbeitet werden soll. Wenn nämlich der T-Parameter fehlt, wird auto- matisch eine BIN-Datei (Binärdatei, B- Datei) angenommen (daher auch die Be- fehlswörter B-LOAD und B-SAVE). Nicht- BIN-Dateien müssen jedoch erst mit dem CREATE-Befehl erzeugt werden, bevor sie mit BSAVE/BLOAD bearbeitet werden können.

Beispiele

BSAVE BILD, A$2000, L$2000

speichert die BIN-Datei BILD (ab Byte- Offset 0, weil der B-Parameter fehlt). Wür- de eine BIN-Datei namens BILD noch nicht auf der Diskette existieren, so würde sie vom BASIC.SYSTEM zunächst auto- matisch angelegt (= „kreiert“).

BLOAD BILD

lädt mangels weiterer Parameter die ge- samte BILD-Datei wieder in den alten Speicherbereich $2000-$3FFF. BLOAD BILD, A$4000

lädt die BILD-Datei nunmehr HGR2-Bereich ab $4000.

CREATE TEXT, TTXT

BSAVE TEXT, TTXT, A768, E770

legt zunächst 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

hängt „ABC“ an das Ende der TXT-Datei an, die nunmehr den Inhalt „ABCABC“ hat.

BLOAD TEXT, TTXT, A780, B3

lädt die drei letzten Buchstaben „ABC“ der TXT-Datei in den Speicherbereich 780-782.

BLOAD PRODOS, A$2000, TSYS

lädt die SYS-Datei PRODOS in den Spei- cher ab $2000. Da der B-Parameter fehlt, 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.

in den

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 für das dritte HGR1-Bild.

19

2.3. BSAVE-Bug 1.0

Die oben geschilderten BSAVE-BLOAD- Verfahren gelten nur ab Version 1.1 des BASIC.SYSTEMSs, das in der Regel in Ver- bindung mit PRODOS 1.1.1 benutzt wird. Im „CALL A.P.P.L.E" (Mårz-Heft) wurde irrigerweise vermutet, daß nur beim zwei- ten BSAVE ein Byte-Offset über das alte EOF hinaus möglich sei. Dies ist jedoch falsch. Genauer gesagt konnte beim „ver- bugten“ BASIC.SYSTEM 1.0 ein BSAVE über den alten EOF hinaus nur für 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, daß der 1.1-BSAVE erstens im Falle von

L < momentanes EOF

die Altdatei nicht kürzt bzw. schrumpfen läßt und daß zweitens über den momenta- nen EOF hinaus BSAVES mit

B> EOF

möglich sind, wodurch „Loch“-Dateien entstehen können. Beispiele:

BSAVE XXX, A5000, L1, B$FFFFFF

erzeugt unter dem BASIC.SYSTEM 1.1 eine BIN-Datei mit einem ENDFILE von 16777215 Bytes (= 16M - 1). Unter Ver- sion 1.0 würde hier eine Fehlermeldung produziert. Für 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

würde unter Version 1.0 nach dem zweiten BSAVE die Dateilänge wieder auf L$2000 schrumpfen lassen. Unter Version 1.1 würde weiterhin eine Länge von $4000 ausgewiesen.

3. KOPY und BATCHKOPY

Die nachfolgenden zwei Dateikopierpro- gramme demonstrieren die ungewöhnli- che Leistungsfähigkeit des BASIC.SY- STEMSs 1.1.

3.1. KOPY

KOPY wird mit RUN KOPY gestartet. Es schaltet zunächst die 80-Zeichenkarte ein dies kann man streichen und meldet

20

sich dann mit einem spartanischen Menü „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-Präfix.

3. DIREKTBEFEHL führt einen beliebigen Direktbefehl aus, z.B.

CAT/RAM

PREFIX/USERS.DISK

DELETE XXX

LOCK YYY

UNLOCK ZZZ

USW.

4. K... ist der eigentliche K(OPY)- oder Kopierbefehl. Die Syntax lautet K/VOLUMET1/FILE1,/VOLUME2/FILE2 d.h. „K“ + „vollständiger Pfadname der Ausgangsdatei" + ,," + „vollständiger Pfadname der Zieldatei“. Die eigentlichen File-Namen können identisch oder auch verschieden sein, so daß mit dem Kopier- vorgang gleichzeitig eine Datei umbenannt werden kann. Nehmen wir an, daß 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 zulässig sind und daß die Volume- bzw. Subdirectory-Namen durch Schrägstriche abgegrenzt werden müssen.

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 empfiehlt sich anstelle von KOPY dann, wenn eine Vielzahl von Dateien kopiert werden soll. Zu diesem Zweck gibt man beim Kopierbefehl zunächst ein nacktes „K“ ein, worauf man die Ausgangs- und Zielpräfixe festlegen kann, z.B.

VON PREFIX/ USERS.DISK

NACH PREFIX/ RAM

Die Schrägstriche vor dem ersten und nach dem letzten Directory-Namen wer- den automatisch ergänzt. Danach wird das gesamte Ausgangsdirectory Name für 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 für Aufsteiger, Band 2“ abge- druckte Kopierprogramm PROFID, das als reines Maschinenprogramm noch kürzer und zugleich ca. 40% schneller ist. In der Kürze liegt die Würze!

Die Programme KOPY und BATCHKOPY kommen nicht ganz ohne Maschinenrouti- nen aus. Insbesondere der sog. Get- und Set-File-Info-MLI-Befehl mußte 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 ausführt. Dies wäre unter DOS 3.3 un- denkbar gewesen. Denken Sie jedoch daran, daß KOPY und BATCHKOPY nur unter dem BASIC.SYSTEM 1.1 funktionie- ren. (Das o.g. PROFID funktioniert unter allen ProDOS-Versionen.)

Wer das Applesoft-Programm näher be- trachtet, wird übrigens feststellen, daß ich eine Schwäche für ON-GOTO-Konstruk- tionen habe, die an die Stelle des fehlen- den IF-THEN-ELSE-Befehls treten.

4. BSAVE-Bug 1.1.

Vollziehen Sie folgenden Test:

. POKE 5000, 1: POKE 10000, 2

. BSAVE XXX, A5000, L1

. BSAVE XXX, A10000, L 1

. POKE 10000, 0

. BLOAD XXX

. PRINT PEEK (5000)

. PRINT PEEK (10000)

. CATALOG

Sind Sie überrascht?

Der 1.1-BSAVE-Befehl ändert die beim er- sten BSAVE registrierte Anfangsadresse später nie mehr. Deshalb muß man stets den A-Parameter hinzufügen, 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.

OO O) O1 +. O [NS

I

Peeker 8/85

Visible Computer

Ein Simulationsprogramm, das Sie in das Innere des 6502 Mi- kroprozessors führt. Sie sehen auf dem Bildschirm, wie die ein- zelnen Instruktionen in Zeitlupe ausgeführt werden, wie sich die Register und die Flags veråndern. 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 über 30 Beispielprogrammen.

Für Apple II, IIplus, //e und //c.

sensur SETTIST

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

EN a f EE p = š EE SE ER oo In allen Buchhandlun-

E pe SE 38

E ee EE E HEG nn Í S gen und Computershops oder direkt vom Verlag:

rd rs Lepila wen ie s. a E EE SE

Wu Zug Cie Sg ne. a 8 HATE STE r 16-23 Ze Ze

eeh w Teie Ac. SANE `; Fer Tira Fie Aall

SS Pandabooks

ER RR Æ R

-o er sS Bismarckstr. 67 le Sec 1000 Berlin 12

Ss) (030) 342 88 00

nschrift V-Scheck liegt bei (spesenfreie Lieferung) per Nachnahme (zzgl. DM 3,-- Versandspesen)

OO Ë

Stck. Visible Computer DM 129,--

Peeker 8/85 21

KOPY (Warnung: KOPY funktioniert nur mit BASIC.SYSTEM 1.1!)

10

12

PRINT CHR$ (4);"PR#3": PRINT : IF PEEK (116) < 128 THEN PRINT "KEIN PUFFER!": END

DATA 32,Ø,191,196,55,3,176,38,169,1Ø,141,73,3,32,%, 191,196,73,3,176,25,162,3,189,58,3,157,76,3,2Ø2,16,247, 169,7,141,73,3,32,Ø,191,195,73,3,176,1,96,32,218,253,32 DATA 58,255,76,208,3,10,0,2,0.0,0,0,0,0,0,0,0,0,0,0,0,0, Ø,Øø,128,2: FOR X = 768 TO 843: READ Y: POKE X,Y: NEXT: REM GETINFO

DATA 32,6,227,32,19Ø,222,32,227,223,32,1Ø8,221,

133, 133,132,134,32,44,213,2ØØ,32,233,227,76,154,218: FOR X = 900 TO 925: READ Y: POKE X,Y: NEXT : REM INALL ONERR GOTO 24

HOME : INVERSE : PRINT "x**x* KOPY x":

PRINT "* U.STIEHL *": NORMAL : GOTO 26

PRINT "SYNTAX?": GOTO 26

ON E = 1 AND PEEK (222) = 19 GOTO 62:

PRINT "FEHLER "; PEEK (222);"!"

CLEAR : PRINT : PRINT "BEFEHL (K/C/E):";: CALL 9ØØ,B$: ON B$ = "" GOTO 26: ON LEFT$ (B$,1) = "K" GOTO 34:

IF B$ = "E" THEN POKE 216,Ø: END

IF B$ = "C" THEN PRINT CHR$ (4);"CATALOG": GOTO 26 PRINT CHR$ (4);B$: GOTO 26

REM SYNTAX:K/V1/N1,/V2/N2

B = LEN (B$): IF B < THEN 22

FOR X = B TO 2 STEP - 1: IF MID$ (B$,X,1) = ","

THEN N2$ = MID$ (B$,X + 1,B - X):

N1$ = MID$ (B$,2,X = 2): X = 2

NEXT : ON N1$ = "" OR N1$ = N2$ GOTO 22:N1l = LEN (N1$): N2 = LEN (N2$): ON Nl < 4 OR N2 < 4 GOTO 22:

ON LEFT$ (N1$,1) < > "/" OR LEFT$ (N2$,1) < > "/" GOTO 22 FOR X = N1 TO 2 STEP 1: IF MID$ (N1$,X,1) = "/"

THEN P1$ = LEFT$ (N1$,X):Fl = N1 - X:

F1$ = RIGHT$ (N1$,F1): X = 2

NEXT : IF P1$ = "" THEN 22

FOR X = N2 TO 2 STEP 1: IF MID$ (N2$,X,1) = "/"

THEN P2$ = LEFT$ (N2$,X):X = 2

NEXT : IF P2$ = "" THEN 22

REM DIR-READ

B$ = CHR$ (4) + "VERIFY": PRINT B$;P2$: PRINT B$;P1$: PRINT B$;N1$: PRINT CHR$ (4);"OPEN";P1$;",TDIR":

PRINT CHR$ (4);"READ";P1$: INPUT B$: INPUT B$: INPUT B$ INPUT B$: IF MID$ (B$,2,F1) = F1$ AND MID$ (B$,Fl + 2,1) =" " THEN PRINT CHR$ (4);"CLOSE": GOTO 58

ON B$ < > "" GOTO 52: PRINT CHR$ (4);"CLOSE":

PRINT "NAME?": GOTO 22

REM KOPIEREN

LL = VAL ( MID$ (B$,65,7)):T$ = ",T" + MID$ (B$,18,3): B = Ø:A = 6144:L = 24576: REM $18ØØ+$6ØØØ=$78ØØ

E = 1: PRINT CHR$ (4); "CREATE";N2$;T$: GOTO 64:

REM E=ERROR

E = Ø: PRINT CHR$ (4); "DELETE" ; N2$:

PRINT CHR$ (4); "CREATE"; N2$; T$

IF LL < L THEN L = LL: ON L > Ø GOTO 70: RUN 26 GOSUB 72:B = B + L: ON B + L < LL GOTO 66:L = LL B:

IF L = @ THEN RUN 26: REM LOOP

REM SETINFO

GOSUB 72: POKE 512,N1: FOR X = 1 TO N1:

POKE 512 + X, ASC ( MID$ (N1$,X,1)): NEXT:

POKE 640,N2: FOR X = 1 TO N2: POKE 640 + X,

ASC ( MID$ (N2$,X,1)): NEXT : CALL 768: RUN 26 PRINT CHR$ (4);"BLOAD";N1$;T$;",A";A;",B";B;",L";L: PRINT CHR$ (4) ;"BSAVE" ;N2$;T$;",A";A;",B";B;",L";L: RETURN

BATCHKOPY

(Warnung: BATCHKOPY funktioniert nur mit BASIC.SYSTEM 1.1!)

10

12

PRINT CHR$ (4);"PR#3": PRINT : IF PEEK (116) < 128 THEN PRINT "KEIN PUFFER!": END

DATA 32,Ø,191,196,55,3,176,38,169,1Ø,141,73,3,32, Ø,191,196,73,3,176,25,162,3,189,58,3,157,76,3,2Ø2,16,247, 169,7,141,73,3,32,Ø,191,195,73,3,176,1,96,32,218, 253,32 DATA 58,255,76,208,3,10,0,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,128,2: FOR X = 768 TO 843:

READ Y: POKE X,Y: NEXT : REM GETINFO

DATA 32,6,227,32,19Ø,222,32,227,223,32,1Ø8,221,133, 133,132,134,32,44,213,200,32,233,227,76,154,218:

FOR X = 900 TO 925: READ Y: POKE X,Y: NEXT : REM INALL ONERR GOTO 24

HOME : INVERSE : PRINT "*BATCH-KOPYx*":

PRINT na U.STIEHL *": NORMAL : GOTO 26

PRINT "SYNTAX?": GOTO 26

ON E = 1 AND PEEK (222) = 19 GOTO 6Ø: PRINT :

PRINT "FEHLER "; PEEK (222);"!"

CLEAR : PRINT : PRINT "BEFEHL (K/C/E):";: CALL 9ØØ,B$: ON B$ = "" GOTO 26: ON B$ = "K" GOTO 34:

IF B$ = "E" THEN POKE 216,Ø: END

IF B$ = "C" THEN PRINT CHR$ (4);"CATALOG": GOTO 26 PRINT CHR$ (4);B$: GOTO 26

2 REM PREFIX-WAHL

PRINT : PRINT "VON PREFIX/";: CALL 9ØØ,P1$:

ON P1$ = "" GOTO 26:P1$ = "/" + P1$ + "/":

PRINT "NACH PREFIX/";: CALL 9ØØ,P2$:

ON P2$ = "" GOTO 26:P2$ = "/" + P2$ + "/":

PRINT CHR$ (4); "VERIFY";P2$: PRINT CHR$ (4);"VERIFY";P1$ REM DIRECTORY-READ

DIM C$(1ØØ):C = Ø: PRINT CHR$ (4);"OPEN";P1$;",TDIR": PRINT CHR$ (4); "READ";P1$: INPUT B$: INPUT B$: INPUT B$ C = C + 1: INPUT C$(C): ON C$(C) < > "" GOTO 4Ø:C = C - 1: PRINT CHR$ (4);"CLOSE": ON C = Ø GOTO 26:

PRINT CHR$ (4);"FRE":CC = Ø

REM DATEI-WAHL-SCHLEIFE

PRINT :CC = CC + 1: ON CC > C GOTO 26:

PRINT MID$ (C$(CC),2,15);" J/N ";

GET B$: ON B$ < > "J" AND B$ < > "j" AND B$ < > "N" AND B$ < > "n" GOTO 46: PRINT B$;" ";:

ON B$ = "N" OR B$ = "n" GOTO 44:

B$ = C$(CC):N$ = MID$ (B$,2,15)

IF RIGHT$ (N$,1) = " " THEN

N$ = LEFT$ (N$, LEN (N$) - 1): GOTO 48

N1$ = P1$ + N$:Nl = LEN (N1$):N2$ = P2$ + N$:

N2 = LEN (N2$): PRINT N1$;" -> ";N2$;

REM DATEI-KOPIE

LL = VAL ( MID$ (B$,65,7)):T$ = ",T" + MID$ (B$,18,3): IF T$ mn. TDIR" THEN PRINT " DIRECTORY!";: GOTO 44

B = Ø:A = 8192:L = 20480: REM $2000+$5000=$7000

E = 1: PRINT CHR$ (4);"CREATE";N2$;T$: GOTO 62:

REM E=ERROR

E = Ø: PRINT CHR$ (4); "DELETE" ;N2$:

PRINT CHR$ (4); "CREATE" ;N2$;T$

IF LL < L THEN L = LL: ON L > Ø GOTO 7Ø: GOTO 44

REM SCHUBKOPIE-SCHLEIFE

GOSUB 72:B = B + L: ON B + L < LL GOTO 66:L = LL B:

IF L = Ø THEN 44

REM SETINFO

GOSUB 72: POKE 512,Nl: FOR X = 1 TO N1:

POKE 512 + X, ASC ( MID$ (N1$,X,1)): NEXT:

POKE 640,N2: FOR X = 1 TO N2:

POKE 640 + X, ASC ( MID$ (N2$,X,1)): NEXT:

CALL 768: GOTO 44

PRINT CHR$ (4);"BLOAD";N1$;T$;",A";A;", B";B;",L";L: PRINT CHR$ (4);"BSAVE";N2$;T$;",A";A;",B";B;",L";L: RETURN

GETSETINFO

(Als DATA-Statements in KOPY und BATCHKOPY enthalten. GETSETINFO funktioniert bei allen ProDOS-Versionen!)

ORG $0300

Get/Set File-Info US/16.05.85

Altname laden, dessen Parameter (Access/Filetype/Auxtype) zwischenspeichern, dann Neuname laden und mit geànderten Parametern zurückspeichern.

(O O JO QI Ë Q N ta

= =

* * ÅÅÅ

DOSWARM EQU $Ø3DØ MLI EQU $BFØØ BELL EQU $FF3A PRBYTE EQU $FDDA * GETINFOl JSR MLI ;Altname HEX C4 DA CNTA BCS ERROR * GETINFO2 LDA +$ØA : GET STA CNTB JSR MLI ;Neuname HEX C4 DA CNTB BCS ERROR

Peeker 8/85

prodos 44

0315: A2 03 29 LDX #3 BILDTEST 0317: BD 3A Ø3 30 COPY LDA ACCESSA,X ;Alt nach Ø31A: 9D 4C Ø3 31 STA ACCESSB,X ;Neu kopieren (Warnung: BILDTEST funktioniert nur mit BASIC.SYSTEM 1.211 Ø31D: CA 32 DEX 031E: F7 33 BPL COPY 1ØØ VTAB 24: PRINT : PRINT "BILDTEST": HCOLOR= 7 34 x 110 N = 2 0320: A9 97 35 SETINFO2 LDA +$Ø7 ; SET 120 FOR X = @ TO N 0322: 8D 49 Ø3 36 STA CNTB 130 HGR : HPLOT 1ØØ,X * TO 200,X * 20: 0325: ØØ BF 37 JSR MLI ; Neuname REM Waagrechter Strich, unterschiedlich tief Ø328: C3 38 HEX C3 140 PRINT CHR$ (4); "BSAVE BILD, A8192, L8192, B"; 0329: 49 Ø3 39 DA CNTB X * 8192 Ø32B: Øl 40 BCS ERROR 150 PRINT X + 1;" ";: NEXT : PRINT 032D: 69 41 RTS 160 FOR X = Ø TO N 4 x* 170 HGR : PRINT CHR$ (4);"BLOAD BILD, A8192, L8192, B"; Ø32E: DA FD 43 ERROR JSR PRBYTE X * 8192 0331: 20 3A FF 44 JSR BELL 180 PRINT X + 1;" ";: NEXT Ø334: AC Ø3 45 JMP DOSWARM 46 * Ø337: ØA 47 CNTA HEX ØA ;Nur GET GET FILE INFO ($C4) KR p3 = _. pe ZER RR Parameter-Count = $0A 1 Byte Ø33A: ØØ 49 ACCESSA HEX ØØ Name-Pointer LL HH 2 Bytes 033B: og 50 FILETYPA HEX ØØ Access 1 Byte, gepokt 033C: ØØ og 51 AUXTYPEA HEX 0000 File-Type 1 Byte; gepokt Ø33E: ØØ 52 STORAGEA HEX ØØ Auxiliary Type 2 Bytes; gepokt Ø33F: og ØP 53 BLOCKSA HEX 0000 pe Sg We? nn V i OCKS used wen ytes; gepo eh PP 54 MDATEA HEX 0000 Modification-Date 2 Bytes; gepokt 3: ØØ Op 55 MTIMEA HEX ØØØØ Modification-Time 2 Bytes; gepokt 0345: ØØ ØØ 56 CDATEA HEX 0000 Creation-Date 2 Bytes; gepokt 0347: ØØ QQ 57 CTIMEA HEX ØØØØ Creation-Time 2 Bytes; gepokt 58 * 0349: ØØ 59 CNTB HEX ØØ ;GET/SET SET FILE INFO ($C3) en 80 92 69 NAMEB DA $0280 ;640 Parameter-Count = $07 1 Byte C: 99 61 ACCESSB HEX ØØ Name-Pointer LL HH 2 Bytes Ø34D: ØØ 62 ` FILETYPB HEX ØØ Access 1 Byte Ø34E: ØØ QQ 63 AUXTYPEB HEX ØØØØ File-Type 1 Byte 0350: ØØ 64 STORAGEB HEX ØØ Auxiliary Type —2 Bytes Ø351: ØØ ØP 65 BLOCKSB HEX 0000 erre ar, N . i ion- = 0353: ØD ØØ 66 MDATEB HEX ØØØØ Modi fication-Time 2 Bytes 0355: ØØ og 67 MTIMEB HEX ØØØØ 0357: ØØ og 68 CDATEB HEX ØØØØ 0359: og og 69 CTIMEB HEX 0000

91 Bytes

APPLE -- DISKETTEN LAUFWERKE

Original Disk II m. Controller + DOS 3.3 + Hdbuch Original Disk II (2. Laufwerk}

Duo-Disk Station Slimline, 2 x 143KB Chinon

Siemens Disk-Laufw., 143KB, m. Kabel + Gehäuse Abor-Disk-Laufw., Slimline, 143KB, m. Kab. + Geh. Chinon Slimline, 143KB, Superleise, m. Kab. 3 Gen.

Teac 55F, 1 MB unf. Kapazität, Shugartbus

Teac 55F, kpl..in Gehäuse, 40/80 Track, 1MByte anschlußfertig, mit Umschaltung 40/80 + Kabel Zweitlaufwerk für Apple II C, 143 KB, mit Kabel

APPLE - INTERFACES + MAINBOARDS

Disk Controller f. 2 Original o. kompat. Drives Super-Controller f. 2x Teac 55F, mit Software

80 Zeich-Karte mit 64K RAM + Softsw. f. Ile

80 Zeich-Karte II, m. Softswitch, 2 Zeichensätze "DM 16K RAM Erweiterung für Il und kompatible "DM Z 80A Interface Kate für CPM 2.2 *DM Z 80B Interface Karte für CPM 3.0, m. 64K RAM DM Printer-Grafik Interface, Epson kompatible *DM Centronic-Paralell Text-Interface Karte *DM Printer-Grafik Interface, NEC/ITOH kompatibel *DM Anschluß Kabel f. Paralell + Grafik Interface DM Buffer Grafik-Interface, benutzbar für Drucker Epson/Nec/Itoh/Okidata u. andere m. 32K Buffer DM Buffer Interface wie vor aber mit 64K Buffer **DM AnschluB Kabel f. Buffer Interface Karte DM 232C Serielle Interface Karte *DM Super Serielle Interface Karte, Fullduplex “DM Sprach (Speech) Karte f. Sprachwiedergabe *DM 6522 Paralell Interface Karte *DM Clock Karte (Datum/Uhrzeit) Ein/Ausgabe *DM Eprom Writer Karte (2716 - 2764) *DM IEEE-488 Interface Karte *DM Logo-Karte mit Diskette und Handbuch DM Musik Karte m. Diskette und Handbuch *DM PAL Color Interface Karte (UHF + Video) *DM RGB Interface Karte (f. Apple II + I+) *DM Wild Karte (kopiert über RAM-Bereich) *DM 128K RAM Erweiterungs Karte m. Patchsoftware **DM 256K RAM Erweiterungs Karte m. Patchsoftware **DM 6809 Prozessor Exell-9 Interfacekarte + DM IC-Tester Interface Karte (RAMS/TTL 54/74) DM Hauptplatine 48K, o. Firmware Eproms, 8 Slots DM Hauptplatine 64K, wie vor DM APPLE -- LEERPLATINEN =- Leerplatinen der obigen Interface Karten sind alle in vergoldet, m. Bestück-Aufdruck + Best.-Plan lieferbar.

Leerpiatinen mit der Kennzeichnung **DM Leerplatinen mit der Kennzeichnung "DM Leerplatinen mit der Kennzeichnung + DM Experimentier Platine, für Apple Slot EX300 DM Leerplatine Motherboard, 48K, mit Best.-Aufdruck DM Leerplatine Motherboard, 64K, mit 6502 + Z80 DM

Peeker 8/85

398,— 598,— 398,— 448,— 448,— 498,— APPLE

39,— 24,50 3 29,90 66,— 99,—

100% Apple-kompatibel 6 Mon. Garantie bei Verwendung des

Apple-Betriebssystems.

APPLE -TASTATUREN+LEERGEHÄUSE+NETZTEILE- APPLE Standard Einbau-Tastatur, ASCII, freibel. 9 Tasten, Doppelbelg. aller Tasten, GroB+Kleinschr. Nr. N26 DM Tastatur wie vor, jedoch mit 15er Block Nr.N67 DM Tastatur Nr. N67, mit sep. Gehåuse, kpl. m. Kabel DM Seperate Tastatur IBM-Look, anschluBfertig mit

Kabel, Dopp. belegt.Tasten, frei prog. Funkt.Tasten DM 298,— Seperate Tastatur, Eprom progr.-bar, Cursorblock

Tastenfeld mit 24 Funktionen, Deutsch o. ASCII DM 398,— Leergehåuse Standard, passend f. Tastatur Nr.N26 DM 98— dto. wie vor, jedoch passend für 15er Tast. N67 DM 119,— Leergehåuse wie Mewa 9000, fur Einbau von zwei Slimline-Laufwerken + TastaturanschluB, Plastic DM Leergehäuse wie vor, jedoch in Metall-Ausführung DM Leergehäuse IBM-Look, f. 2 Laufw. Standard 5" DM Leergehäuse für 1 Slimline Laufwerk, Metall DM Leergehäuse f. Duo-Disk = 2x Slimline-Laufwerke DM Leergehäuse f. Duo-Disk = 2x Standard-Laufw. DM Leergehäuse f. Duo-Disk = 2x Slimline + Netzteil DM Schaltnetzteile für APPLE u. kompatible Rechner +5V/3,5A -5V/0,5A +12V/2A -12V/0,5A N73 DM 99,80 +5V/5 A -5V/0,5A +12V/2,5A -12V/0,5a N74 DM 119,80 +5V/7,5A -5V/0,5A +12V/2A -12V/0,5A N75 DM 149,50 .... DISKETTEN + DISKETTEN-BOXEN “mmm Profi Disk.Box, m. SchloB, Klars.-Deckel, 100 Disks DM 49,— Disk Box mit Klars.-Deckel, ca. 70 Disketten 5” DM 26— Hartbox für 10 Disketten, mit Klappdeckel DM 6,90 Disketten, mit Verstårkungsring, 3 Jahre Garantie

ABX 100 = SS/SD 10 Stck. a. 3,98 50 Stck. a. 3,88 500 Stck. a. 3,59 ABX 200 = SS/DS 10 Stck. a 4,08 50 Stck. a 3,98 500 Stck. a 3,69 ABX 400 = DS/DD 10 Stck. a. 4,98 50 Stck. a. 4,88 500 Stck. a. 4,59

139,— 249,—

159,— 198,— 198,—

19,90

98,— 109,— 179,—

COMPUTER CENTER CONEX 5650 SOLINGEN 11 - Postfach 110206-7 T Telefon (02 12) 75449

178,—.

Reparaturservice

APPLE -- ORIGINAL + KOMPATIBLE - COMPUTER -- APPLE APPLE lle, 64KRAM, Ascii-Tastat. + UHF-Modul. DM 2198, APPLE lle, Einstiegspaket = Computer 64KRAM, + Philips-Monitor 18 Mhz grun + Siemens F122 - Laufwerk 143K m. Controller + Lerndiskette APPLE II C, 128 KRAM, ASCII Tastatur

APPLE II C, wie vor, jedoch deutsche Tastatur MACINTOSH System komplett m. Mouse + Tastatur + Macwrite/Macpaint, Systemguide-Diskette MEWA-48K, Apple kompat., Netzt. SAmp, Tastatur mit Dopp-Belegung + 10 frei Prog.Tasten, mit UHF-Mod, ohne Firmware Eproms.

MEWA-64K. wie vor jedoch mit 15er Block

MEWA 9000er Serie, mit seper.Tastat. DIN o. ASCII m. dopp. belegt. Funkt-Tasten, Cursorbl. + 15er Block Netzt. 5 Amp., Gehäuse für 2x Slimline- Laufwerke UHF-Modulator, o. Firmw.-Proms (12KROM), 48K RAM

MEWA 9000-64-C, wie vor jedoch 64K RAM MEWA 9000-64-C Einstiegspaket, wie vor, jedoch mit 1 Disk Drive eingeb. + Disk-Contr. + Monitor, grün DM 1898, IBM-Look Gehäuse für MEWA 9000 Serie Aufpreis DM 39,— "IT am MATRIX- UND TYPENRAD - DRUCKER ******** CP-80 Matrix Drucker, Epson kompat., vollgrafikf. DM 739,— CP-80 X mit eingeb. Interface tür VC 64 f. Sim. B. DM 899,— SPEEDY 100-80, Epson kompat., 100 Z/s, v.-grafikf. DM 759,— GEMINI 10X, Neu mit Textsp., 100 Z/s., 9x9 Mat. DM 998,— GEMINI 15X, wie 10X, jedoch bis 375 mm Papierbr. DM 1198,— ITOH 8510 B, Die Zuverlåssigkeit in Person DM 1475,— JUKI 6100, Typenraddr., 22 Z/s, TA-Typenräder DM 1495,—

DM 3098,— DM 2795,— DM 2998,—

DM 5995,— DM 698,— DM 728,—

DM 998,— DM 1098,—

Computer-Artikel Nachnahmeversand unfrei, Zwischenverkauf vorbehalten.

Angebote freibleibend unter Anerkennung unserer Lieferbedingungen. Technische Änderungen vorbehalten. "Apple ist eingetragenes Warenzeichen der Fa. Apple-Computer Inc., Kalifornien. Ware mit Rückgaberecht, besonders gekennzeichnet, muß frei zurückgeschickt werden. "IBM" ist eingetragenes Warenzeichen der Firma IBM GmbH Ffm.

ERICH-WILLI MEYER

6343 FROHNHAUSEN - Postfach 70 11 Telefon (027 71) 350 71

......

IBM *** KOMPATIBEL IBM *** KOMPATIBEL ` Alle Teile unterliegen einer sorgfältigen Endkontrolle und wir übernehmen daher volle Garantie für die Funktionsfähigkeit, sowohl für die gelieferten Leerplatinen, als auch für die fertig bestückten Boards und Interface Karten, die fast ohne Ausnahme mit gesockelten IC's geliefert werden.

IBM -- Kompatible Interface Karten und Mainboards -- IBM Disk Controller Karte für 2 Disk-Drives *KL-2020 DM 228,- Color Video Board, *KL-2050 DM ab 398,- Monochrome Video boards *KL-2060 DM ab 328,- RS 232 Drucker Interface Karte KL-2074 DM Centronics Paralell Interface Karte KL-2072 DM Multifunktion Karte, RAM-Bereich, RS232, Paralell, Clock, mit O K bestückt

dto. wie vor, jedoch mit 128K bestückt dto. wie vor, jedoch mit 256K bestückt 512K RAM Karte, mit O K bestückt KL-2095 DM dto. wie vor, mit 128K bestückt KL-2096 DM Multi 1/O Interface Board, RS232, Disk-Controller, Centronics, Clock, Joystick

und Lightpen-Port

Eprom Writer Karte (bis 128K benutzbar) Hardisk/Winchester Host-Adapter Karte Mainboard XT Version, 8 Slots 0 bestückt mit 1 Boot-Eprom, 6 Eprom-Plätze frei dto. wie vor, jedoch mit 128K bestückt *KL-1005 DM

dto. wie vor, jedoch mit 256K bestückt *KL-1006 DM Mainboard PC Version, 8 Slots, 64K bestückt

mit 1 Boot-Eprom, 6 Eprom-Plåtze frei *KL-1010 DM

dto. wie vor, jedoch mit 128K bestückt *KL-1011 DM

dto. wie vor, jedoch mit 256K bestückt “KL-1012 DM 1296,— Bei den mit * gekennzeichneten Artikeln gehört zum Lieferumfang ein Manual, und z. T. ein Schaltbild.

Preislisten + Prospekte kostenlos gegen frankierten Rückumschlag. IBM -- Kompatible Leerplatinen + Boards - IBM Disk Controller f. 2 Drives DM 58— Color Grafik Video Board DM 78— RS232 Interface Karte DM ep Centronics Paralell Interface Karte DM ep - Multifunktion Interface Board DM 99— Eprom Writer Interface Karte ?8— Multi 1/O Board 78,— Mainboard XT Version, 8 Slots 98,— Mainboard PC Version, 8 Slots 96,— RAM Card für Speicher-Erweiterung 68.— Alle Leerplatinen werden mit Bestückungsplan geliefert. Schaltbilder, soweit verfugbar, Lieferung gegen Aufpreis.

IBM -- Gehäuse/Netzteile/Tastaturen/Diskdrives IBM Rechner Leergehäuse f. Einbau v. 2 Drives DM 198,— Profi-Tastatur, m. Kabel im Gehäuse, ASCII DM 398,— dto. wie vor, jedoch deutsche DIN Belegung 418,— Standard Tastatur, IBM-Look, ASCII 298,— Netzteil, mit Ventilator, 100 Watt 298,— dto. wie vor jedoch 135 Watt 338,— Disketten Laufwerk, 2x40 Track DS/360 KB 398,— Harddisk 10MByte, kpl. m. Xebec Controller DM 2990,—

Sonderliste gegen Rückporto. Katalog gegen 3 DM in Briefmarken

*KL-2040 DM *KL-2041 DM *KL-2042 DM

*KL-2071 DM *KL-2022 DM *KL-1004 DM

23

von N.G. Barbieri

Teil 3: Tricks über Tricks

Was ist eigentlich der Applesoft-Interpre- ter? Fur den Applesoft-Anfånger ein unbe- kanntes Wesen im Apple, das fur Dauer- belåstigung mit , SYNTAX ERROR" sorgt; für den Applesoft-Kenner ein persönlicher Gegner, den es unbedingt auszutricksen gilt; und für 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 über Aufbau und Struktur des Interpreters voraus.

Nee

OR

BOX.COPY

Damit kommen wir zu der in diesem Bei- trag abgedruckten Utility BOX.COPY. Wie bereits angekundigt, handelt es sich um das punktweise Kopieren des Inhalts ei- nes in der HGR1-Seite definierten Recht- ecks auf eine andere Stelle derselben

24

Graf-quattro

Seite oder wahlweise auf die HGR2-Seite. Bindet man diese Utility in die Routinen der vergangenen Beiträge ein, dann ist es von Applesoft aus sehr einfach: Cursoren einmal positionieren, dann ein zweites Mal, ein POKE 255,0 für Übertragung HGR1-HGR1 oder POKE 255,1 für Über- tragung HGR1-HGR2, ein CALL 25297, und die Sache låuft 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 ursprüng- 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 für diejenigen, die in der Maschinensprache ihre ersten Schritte wagen, ist noch einiges zu sagen: Es handelt sich um eine reine „Bit-an/Bit- aus-Übertragung“ ohne Rücksicht auf das letzte Bit oder die Positionierung (d.h. Co- lor-Bereich oder gerade und ungerade Hi- res-Spalte), so daß beim Übertragen von farbigen Ausschnitten komische Farbver- schiebungen eintreten können. Demge- genüber klappt es bei schwarzweiß 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 für den Fall, daß sich Ursprungs- und Zielbox überschneiden, passieren könnte, daß man kopiert, was schon einmal kopiert worden ist. Das Pro- blem ist ähnlich wie beim Moven von Spei- cherbereichen, nur daß hier die Über- schneidung zweidimensional sein könnte. Der zweite Teil (ab LOOP) holt sich ein- fach einen Punkt von einer Stelle und bringt ihn an einer anderen Stelle unter, bis der ganze Inhalt der Box übertragen worden ist (siehe auch Kommentar).

Drei Tricks für Anfänger

16-Bit-Vergleich

Jeder kennt die CMP-Funktion (Compare) zum Verzweigen (Branch) je nach Carry- oder Zero-Flag, obwohl gelegentlich beim Bestimmen, was größer, 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 endgültig klarzuma- chen. Der im Programm gezeigte Weg (Trick Nr. 1) ist kürzer 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 daß am Ende die üblichen Bran- ches erfolgen können.

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 ursprunglich vor, diese Routine als separate Utility zur allgemei- nen Benutzung zu gestalten, aber dann habe ich es mir anders überlegt. Trotz ausgedehntem Einsatz von Zeropage- Pointern ist das bitweise Übertragen auch so langsam genug! Überträgt man eine Box in der Größe der ganzen Grafikseite, d.h. 53760 Punkte, dauert dieses etwa 33 Sekunden. Eine gesonderte Routine hätte

Peeker 8/85

für jeden einzelnen Punkt zusätzlich ein JSR und ein RTS gekostet, also ganze 12 Zyklen mehr, und das macht sich be- merkbar!

Ich möchte dem Leser aber eine separate HSCRN-Routine nicht vorenthalten. Die Routine HSCRN ist völlig relokativ, so daß man wie folgt vorgehen kann:

Ein BLOAD HSCRN, A... an jede beliebige Stelle. Danach die in Frage kommenden Koordinaten in der üblichen 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 weiß. Einfach, nicht wahr?

Mit dieser Folge sind die Assembler-Rou- tinen für das erste Modul der Serie Graf- quattro komplett. Jetzt heißt 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 Mühe nicht machen will, kann auch die entsprechende Peeker-Dis- kette bestellen!

Eigentlich könnte jetzt jeder Applesoft- Programmierer seinen eigenen Hires- Page-Editor selber schreiben. Nichtsde- stoweniger wird mein eigener Editor dem- nächst im Peeker erscheinen.

Grafik g f, electronic 1

Neue Preise # 8

IBM-PC/XT-COMPATIBLE COMPUTER+ZUBEHÖR Mainboard XT f. 16bit+256K-RAM+8 Slots, Leerkarte

Disk Controller leer (f. 4 x 360KB-Drives)

Monochrome Graph. + par. Printer Leerkarte (Hercules comp.) Color RGB + Video Graphik Leerkarte

Parallel Printer Leerkarte

512K-RAM Leerkarte

Multi 1/O Leerkarte (Printer, Ser., Game, Uhr gepuffert) 384K-Multi 1/O Leerkarte w.o

Mainboard XT-16bit+ (bis 256K-aufr.) + 881. best. +gepr

OK + Boot Eprom

Mainboard w.o jedoch 256K-vollbest 64KB-RAM-Chip-Aufrüstsatz(9 Stück) einzeln geprüft!

Disk Controller gepr. (f. 4 x 360KB-Drives)

Monochrome Graph. + par. Printer Karte gepr. (Hercules comp.) Color RGB + Video Graphikkarte gepr

Parallel Printer-Karte gepr. o. Kabel (Extra Kabel = 75,—) Kl 512K-RAM-Karte gepr. (OKB) 188,-- 384K-Multi 1/O Karte, RS 232, par. Printer, Interf. Game/Joystick Port

Real Time Clock gepuff. OK + RAM-Disk/Spooler/Uhr Softw

384K-Multi 1/0 w.o. vollbest. + gepr

Multi VO Karte (Par.+Ser.+Uhr gepuffert) gepr

Profi-Funktionstastatur dt. oder ASCII+15er Block

130W-Netzteil mit eingebautem Ventilator KurzschluBfest 360KB-Diskdrive Slimline ohne Gehåuse

XT-256K-16bit Rechner (incl. Boot-Eprom)+360K-Drive + Contr.

+F. Tastatur im IBM-look like Geh.+130W-Netzteil best.+gepr.

XT-256K w.o + Color-RGB + Video-Graphik-Karte 2645 XT-256K w.o aber mit Monochrome-Graphik-Karte+par. Printer int. 2898 IBM-PC-Systemeinheit + Laufwerk

IBM deutsche DIN-Tastatur

IBM-Bildschirm Color

PC 10-Commodore dt. Tast

GENIE 16 C (256K-RAM bis 640K aufr.) 2 x 360K-Drive,

ser. + par. Printer - incl., dt. Tastatur

Software+ Manual für IBM+ compatible Geräte

Microsoft flight simulator

CPM 86

Lotus 1-2-3

Framework

D-base Ill

UCSD P-System

Symphony

APPLE-BUS COMPUTERPLATINEN+PERIPHERIE

Motherboard durchkontaktet mit Lötstoplack

M-board II 48K, gesockelt, vollbest.+gepr

M-board II 64K+Z80 CPU, gesockelt, v.best.+gepr

M-board lle 64K vollbestückt+gepr

APOLLO II Kunststoff-Leergehåuse

APOLLO II Gehäuse incl. Funkt.-Tast

Leerplatine: 16K-RAM, Z80/CPU-, Controller DOS 3.3, Parallel-Druckerkarte, Ser. Int. V24, 802/24Z-Karte PAL-Modulatorkarte, je

Entwicklungslochraster-Leerplatine durchkontaktiert 16K-Speicher-Karte geprüft

APPLE orig. 16K-Language Karte gepr

Z-80 CPU-Karte geprüft

Controller DOS 3.3-Karte geprüft

Auto-Controller DOS 3.2/3.3-Karte gepr

Erphi AFDC 2 Controller + Autopatch Softw. + Handbuch Parallel-Drucker-Karte geprüft

Bbit par. Grappler-Int.+64K-Buffer+Kabel gepr Seriell-Interface-Karte V24 geprüft

Super-Seriell-Interface Karte gepr 80-Zeichen/24-Zeilen-Karte geprüft 80Z/24Z-Karte+Softswitch-Schalter Leerplatine ` 802/24Z-Karte+Softswitch-Schalter geprüft

IEEE-488 Int. Karte gepr

PAL-Modulator/Color-Karte geprüft

PAL-RGB-Color Karte gepr

128K-Speicher-Leerkarte

128K-Speicher-Leerkarte + Software + Manuel 128K-Speicher-Karte+Software geprüft 256K-Speicher-Leerk.+4 Spezial ICs+Software 256K-Speicher-Karte+Software geprüft

Maus incl. Software

EPROM-Burner (2708/16/32/64) geprüft

Modem Euronorm-Karte gepr. + Software + Man UHF/TV-Modulator universell

Lüfter anclipsbar (220 V)

Dataphon s21d Akustikkoppler-FTZ

APOLLO // (48K)+UHF-Mod.+Gr/Kl vollbest.+gepr.+F.-T. APOLLO // (64K)+Disk II F+Contr.+12"-Monitor

APOLLO //A (48K)+Gr/KH15er-Tastatur vollbest+gepr.+F--T. APOLLO //A (64K)+Disk II F+Contr.+12"-Mon

APOLLO // ASKF (48K) vollbest. + gepr. Sep. Keyboard+Gr/Ki+ 15er-Block mit Funkt.-Tasten im „IBM-look like“ Gehäuse APOLLO // ASKF (48K) w.o + Disk II F + Contr.

APOLLO // ASKF (48K) w.o jedoch 2 x Disk II F + Contr Aufpreis für M-board // 64K+Z80 CPU

APPLE-DuoDisk, 2 x 143 KB+Controller orig

APPLE-Disk // Laufwerk+Contr.+Kab. DOS 3.3+ProDOS orig. APPLE-Disk // (2. Laufwerk) orig

Disk //+Contr.+Kabel DOS 3.3 (Siemens) im Geh

Disk // (2. Laufwerk, Siemens) im Geh

Disk //F+Contr.+Kab. DOS 3.3 (1/2 Höhe) im Geh

Disk //F (2. Laufwerk, 1/2 Höhe) i. Geh

Erphi Duo-Disk 1,2 MByte incl. Netzteil+Contr.

Maus f. Apple // incl. Manual+Software APPLESOFT+TurorialH-Reference Manual engl

APPLE-DOS 3.3 Manual engl

APPLE-DOS 3.3 Hb.dt,

APPLE ProDOSHB + Disk orig.

APPLE-Pascal Reference+Operating Manual engl APPLE-Pascal USCD 1.1. Disks+Manuals orig

APPLE-Pascal Reference Hb. dt

APPLE-Pascal Language Hb. dt

APPLE-FORTH Manual engl

APPLE-Fortran Manual engl

CP/M-Software Vol. Hl, Manual engl

APPLE // Pascal-Handbuch deutsch (te-wi)

APPLE //-Anwenderhandbuch deutsch (te-wi) 6502-Programmier-Handbuch deutsch

6502-Anwendungen Handbuch deutsch (Rod.Zaks Software + Manual f. APPLE+compatible Geräte

apple how to, apple soft tool kit, cp/m basic compiler, cbasic dbase // ver. 2.4, wordstar+ mailmerge + spellstar mit installprogramm apple logo, datastar, calcstar, pfs file, pfs grapg, pfs re+port, apple fortran, cp/m c language, spitfire simulator, c-programming language flight simulator, visicalc, visischedule, visitrend, multiplan, supersort microsoft cobol 80, microsoft fortran 80, dgraph+dbase utility

APOLLO //e (64K) PAL+15er Block, vollbest. und gepr. APOLLO //e 128K+802/24Z-Karte

APPLE //e 128K+802/242-Karte

APPLE //e (64K)+Disk II F+Contr+12”-Monitor 802/24Z+Softswitch+64K-RAM-Karte geprüft

APPLE //c (128K) dt. Tastatur

Z80 Karte gepr. f. APPLE //c+RAM-Disk-Software Hb Macintosh System (128K)

Macintosh System (512K)

7 oe Macintosh Umrüstung von 128K auf 512K -- SANYO MSX-Computer MPL 64 dt. Tastatur pm

EPSON GX 80+, *NEU*NEU*NEU*

EPSON RX 80+, 8bit/parallel

EPSON RX 80F/T+, 8bit/parallel

EPSON RX 100+, 8bit/parallel

EPSON FX 80F/T+, 8bit/parallel

EPSON FX 100+, 8bit/parallel

EPSON LQ 1500+, 8bit/parallel

EPSON Traktoraufsatz für FX 80 APPLE/EPSON-Drucker Graphic-Interface+Kabel MX 80/82, FX/RX 80 Spezialfarbband-Kassette BROTHER-Typenraddr. HR 15XL 8bit/par. neustes Mod

STAR SG10, NLQ- + IBM-Zeichensatz, 8bit/par

Zenith ZVM 123 gr. 12" oder Zenith ZVM 122 or. 12" 15 MHz SANYO DM 2212 12" orange 15 MHz

SANYO 9112 Monochromer Monitor 12", gr

Monochromer 12"-Monitor entspiegelt gr. 0. or. 22 MHz

Disketten in Box + Aufkleber I. Wahl 10 St./100 St. å

54" Verstårkt BASF 3M FUJI DATA NEUTRAL SCOTCH MAGNE-

1X, SS/SD 1D, SS/DD 2D, DS/DD 1D/96TPi 2D/96TPi 2HD/1.2MB 1X, Hard

8” 1X, SS/SD 49/ 4,39 6 79/ 4,59 7,09/ 6,89 © 9/ 4,39 6,68/ 6,48

10,99/ 9,99 11,78/11.38 Zweiseitig 14,99/14,29

3M-Scotch 51⁄4” Flüssig-Reinigungsset (2 Disk.) einseitig

BASF 5" Reinigungsdiskette einseitig

51⁄4" Disketten-Archivbox für 10 Disks (1 St./10 St.)

54" Disketten-Archivbox für 15 Disks 3M

51" Disk-Karteikasten Kunststoff (ca. 80 Disk)

514" Disk-Karteikasten Kunststoff (ca. 80 Disk) Rauchglas

514" Disk-K.K. Rauchglas, abschließb. (f. ca. 80-100 Disks) 2000 BI. Tabpapier (24 cm x 12” einf.) weiß oder grün/weiß Gert

4000 Et-Aufkl. doppelr. (107 x 36 mm auf 240 x 12" perf, Trägerp.) 16000 Etiketten-Aufkleber w.o 4000 Etik.-Aufkl. einreih. (107 x 36 mm auf 125 x 12" perf. Träg.)

OSZILLOSCOPE HAMEG ab Lager Bei Vorauszahlung frei Empfangsstation unversichert in der BRD, ausgenom men Papier und Etiketten, sonst N.N.+V.S. ab DM 30,--

Öffnungszeiten: Mo, Di. Do, Fr v. 10-18 h, Miu. Sa v. 10-14 h, la. Sa v. 10-18 h Telef. Best.: Mo. Di. Do. Fr von 10-19 Uhr, Mi u. Sa wie Öffnungszeiten

GEWÄHRLEISTUNG: 6 Monate. auf alle bei uns gekauften Geräte, durch unsere eigene Sen ıc#- Werkstatt

REPARATUREN an Appie + npatible Geräten + Zubehör führt unser Speziallistenteam garantiert zuverlässig + besonders Kostengünstig aus Sprechen Sie mit uns.

Telex: 0772642 aaa-d Habsburgerstraße 134 7800 FREIBURG, Tel. (07 61) 276864 Bauelemente - Bausätze - uP's Meßgeräte - Zubehör - Fachliteratur Fachgeschäft für Elektronik + Mikrocomputer

K electronic ,

25

BOX.COPY

26

(O O JO Q Ë Q N

ORG $62D1 ; 25297

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.

* H k HH HH HH H HH H H

Applesoft-Routinen u. -Pointer *

HPOSN EQU $F411 HPLOTO EQU $F457 GBASL EQU $26 HMASK EQU $30 HCOLORZ EQU $E4 HPAG EQU $E6

*

* Cursorposition der * ursprünglichen Box *

CA1XL EQU $3C4 CA1XH EQU $3C5 CA1Y EQU $3C6 CA2XL EQU $3C7 CA2XH EQU $3C8 CA2Y EQU $3C9

*

* Cursorposition

* des neuen Platzes *

CU1XL EQU $3CA CU1XH EQU $3CB CU1Y EQU $3CC CU2XL EQU $3CD CU2XH EQU $3CE CU2Y EQU $3CF

*

* Zàhler für X- u. Y-Richtungen *

COUNXL EQU $1D COUNXH EQU SIE COUNY EQU $1F

*

* X,Y-Koordinaten des zu * übertragenden Bits *

XLOW EQU $9® XHIGH EQU $Ø1 Y EQU $Ø2

*

* Links/Rechts-Flag

*

XFLAG EQU $Ø3

*

* X,Y-Zielkoordinaten

*

XLOW2 EQU $Ø6

XHIGH2 EQU $97

Y2 EQU $Ø8

*

* Oben/unten-Flag

*

YFLAG EQU $09

*

* Temporàre Ablage für beide * X-Koordinaten u. X-Zåhler *

TEXL1 EQU $F9

TEXH1 EQU $FA

TEXL2 EQU $FB

TEXH2 EQU $FC

COXL EQU $FD

COXH EQU $FE

* D

* Grafikseite-Ubertragunsflag: * wenn Ø auf HGRl, sonst auf HGR2 *

PFLAG EQU $FF

*

*

C6 Ø3 88

Ø6

LDA CMP BNE

Wenn beide auf 2!

LDA STA BNE

CA1Y CU1Y STEP1

Y gleich, dann Flag +$2

YFLAG TESTX

Feststellen, ob von oben nach

unten oder

umgekehrt und YFLAG

entsprechend setzen.

TEP1 BCS LDA

STA

BNE

DOINC LDA STA

* * * * H

HJ Di LO HJ ><

LDA BNE

Festellen,

* * * * *

LDA CMP BEQ BCS BCC LDA CMP BNE

DOINC +$1 YFLAG TESTX #$Ø YFLAG

Wenn Übertragung auf der an- deren Seite, dann egal welche Richtung!

PFLAG DOXINC

ob von links nach

rechts oder umgekehrt und XFLAG entsprechend setzen.

CA1XH CU1XH TXLOW DOXINC DOXDEC CA1XL CUlXL STEP2

Wenn gleiche X- und Y-Werte u. gleiche Seite, warum übertragen?

Jetzt wird

klar, warum bei

gleichen Y-Werten das YFLAG auf 2 steht!

LDA CMP BEQ

STA JMP STEP2 BCS DOXDEC LDA STA BNE DOXINC LDA STA * LDA CMP BNE

LDA STA RTS

YFLAG +$2 RET1

XFLAG STEP3 DOXINC +$1 XFLAG STEP3 +5Ø XFLAG

CA1Y CA2Y DOIT

+$20 HPAG

Für den Y-Zåhler testen, was wovon subtrahiert werden

muß!

OIT BCC SEC SBC STA LDA BEQ BNE

SEC

LDA

SBC

STA

LDA

BEQ *

CA2Y CA1Y COUNY YFLAG MOD2

* Y-Startpunkte setzen.

Peeker 8/85

D

Ak Abo-Karte

> Buch -Shop

> Software -Karte

EEKER 94

MAGAZIN FUR APPLE-COMPUTER

Ja, ich möchte peeker abonnieren.

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

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

Bank / PschA Bankleitzahl Kto.-Nr.

Datum Unterschrift

EEKER 44

MAGAZIN FÜR APPLE-COMPUTER

Bitte senden Sie mir gegen Rechnung folgende Bücher:

Datum Unterschrift

EEKER 44

MAGAZIN FÜR APPLE-COMPUTER

Bitte senden Sie mir gegen Rechnung folgende Apple-Programme:

O Peeker-Sammeldiskette, einzeln O Apple DOS 3.3, Begleitdiskette, DM 28,- Disk# `. Disk O Apple ProDOS, Band 1, Begleitdiskette, Disk# —, Disk# DM 28,-

Preis je Disk DM 28,- (einzeln) = en Band 2, Begleitdiskette,

[] Peeker Sammeldiskette, D Apple Assembler, Begleitdiskette, DM 28,- im Fortsetzungsbezug D ProDOS-Editor 1.0, Programm, DM 98,- Bb Disk FF nn O MMU 2.0, Programm, DM 98,- (Mindestbezug 6 Disketten) D INPUT 2.0, Programm, DM 98,-

Preis je Disk DM 20,- 0 Softbreaker 1.0, Programm, DM 48,- O DB-Meister, Programm, DM 290,- O Superplot, Programm, DM 48,- O Superquick, Programm, DM 48,—

Datum Unterschrift

°

PLZ/Ort Vertrauensgarantie:

- Ich habe davon Kenntnis genommen, daß ich die Bestellung | schriftlich durch Mitteilung an den Dr. Alfred Hüthig Verlag,

Ø Postfach 102869, 6900 Heidelberg 1 innerhalb von

7 Tagen widerrufen kann. Zur Fristwahrung genügt die

rechtzeitige Absendung des Widerrufs (Datum des

Poststempels).

Datum

| Unterschrift

Verlagshinweis: Das Abonnement verlångert sich zu den jeweils giltigen

Bedingungen um ein Jahr, wenn es nicht 2 Monate vor

S

Jahresende schriftlich gekündigt wird.

° Meg bitte vollståndig ausfullen

£ __ Vorname, Name

Firma

Telefon mit Vorwahl

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

fúr DOS 3.3 und ProDOS

von U. Stiehl

1984, Diskette und Manual, DM 98,-

ISBN 3-7785-1021-5

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

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

MMU 2.0

Memory Managements Utilities

für die Apple lle 64K-Karte

DOS 3.3 (und ProDOS)

von U. Stiehl

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

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

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

Softbreaker 1.0

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

von U. Stiehl

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

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

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

Gerätevoraussetzung: Apple lle mit 64K- Karte

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

LDX CA2Y LDY CU2Y JMP STEP4

LDX CAIY LDY CU1Y

STX Y STY. Y2 INC COUNY

Für den X-Zåhler testen, was wovon subtrahiert werden muß!

*** TRICK NR. 1 ***

LDA CUIXL CMP CU2XL LDA CU1XH SBC CU2XH BCS SUBX2

SEC LDA CU2XL SBC CUIlXL STA COUNXL LDA CU2XH SBC CU1XH STA COUNXH XFLAG MOD3 BEQ MOD4

SEC LDA CU1XL SBC CU2XL STA COUNXL LDA CU1XH SBC CU2XH STA COUNXH LDA XFLAG BNE MOD4

*

* X-Startpunkte setzen.

*

MOD3 LDX CA2XL LDY CA2XH STX XLOW STY XHIGH LDX CU2XL LDY CU2XH JMP REST

LDX CAIXL LDY CA1XH STX XLOW STY XHIGH LDX CU1XL LDY CU1XH

STX XLOW2

STY XHIGH2 INC COUNXL BNE WEITER INC COUNXH

X-Koordinaten und X-Zåhler in die Ablage bringen.

* * * H

WEITER LDX XLOW LDY XHIGH STX TEXL1 STY TEXH1 LDX XLOW2 LDY XHIGH2 STX TEXL2 STY TEXH2 LDX COUNXL LDY COUNXH STX COXL STY COXH

*

* Jetzt geht's los!

* LOOP LDA +$2Ø STA HPAG

*

HSCRN-Routine

Punkt an oder aus ist

* * * *

LDX XLOW

LDY XHIGH

LDA Y

JSR HPOSN

LDA (GBASL),Y AND HMASK

AND #$7F

und dann den entsprechenden schwarzen oder weiBen Punkt auf die neue Stelle plotten.

* * H * *

BEQ BLACK

LDA +$7F ;weiB

BNE POINT

BLACK LDA #$Ø ‚schwarz

POINT STA HCOLORZ

* Grafikseite-Flag (PFLAG) testen und entsprechende Vorkehrungen für die Übertragung treffen.

LDA PFLAG BEQ PAGE1 LDA #$4Ø STA HPAG LDX XLOW2 LDY XHIGH2 LDA Y2 JSR HPLOTO

X-Zåhler bis auf Ø dekrementie-

ren, dann nach DOY

DEC COUNXL BNE DOX LDA COUNXH BEQ DOY DEC COUNXH

Je nach XFLAG X-Koordinaten in- oder dekrementieren.

* * D D D

0X LDA XFLAG BNE DECRX INC XLOW BNE NEXTX INC XHIGH INC XLOW2 BNE LOOP INC XHIGH2 BNE LOOP

*

* *** TRICK NR. 2 *** *

DECRX LDA XLOW BNE DOLL DEC XHIGH DOL1 DEC XLOW LDA XLOW2 BNE DOL2 DEC XHIGH2 DOL2 DEC XLOW2 JMP LOOP

Y-Zåhler dekrementieren. Ist er Ø, dann erledigt, sonst

U * k*k k * *

OY DEC COUNY

BEQ RET2

*

* ... je nach YFLAG Y-Koordinaten * in- oder dekrementieren und ... *

LDA YFLAG

BEQ INY

DEC Y

DEC Y2

JMP RSTX

INC Y

INC Y2

E?

* ... die Start-X-Werte und den * X-Zähler wieder für eine

Ermitteln, ob ein angesprochener

grafik 94

29

6446: 6448: 6444: 644C: 644E: 6450: 6452: 6454: 6456: 6458: 645A: 645C: 645E:

6461: 6463: 6465:

405 Bytes

HSCRN

355 * neue Runde 356 *

357 RSTX LDX 358 LDY 359 STX 36Ø STY 361 LDX 362 LDY 363 STX 364 STY 365 LDX 366 LDY 367 STX 368 STY 369 JMP STØ *

371 RET2 LDA 372 STA 373 RTS

*

XLOW EQU XHIGH EQU Y EQU FLAG EQU GBASL EQU HMASK EQU HPOSN EQU *

* Ermittelt,

Oo AO OG Q Dr

= = = =

herstellen.

TEXL1 TEXH1 XLOW XHIGH TEXL2 TEXH2 XLOW2 XHIGH2 COXL COXH COUNXL COUNXH LOOP

+$2 HPAG

von N.G. Barbieri/1985

$ØØ $Ø1 $Ø2 $Ø3 $26 $3Ø $F411

ob ein Hires-Punkt

* weiß oder schwarz ist.

* Resultat in FLAG: ® = schwarz,

* *

nicht Ø = weiB.

XLOW XHIGH

Y

HPOSN (GBASL),Y HMASK +$7F

FLAG

Der nåchste Peeker Heft 9/1985 erscheint am 26.8.1985

30

Einzelbezug DM 28,— Fortsetzungsbezug DM 20,—

(Jederzeit kündbar, jedoch mindestens 6 Disketten)

(* = nur auf Diskette, nicht im Peeker gelistet! Seitenangaben beziehen sich auf Beginn des Listings)

Hüthig Software Service

Postfach 102869 - 6900 Heidelberg 1

Diski 1 (Heft 1+2, 1984)

T.DISASSEMBLER.65C02 (1/84, S. 15) DISASSEMBLER.65C02

T.ACCEL.WAIT (1/84, S. 22) ACCEL.WAIT T.ACCEL.BOOT ACCEL.BOOT ACCEL.LC.KOPIERER T.ACCEL.LC.KOPIE ACCEL.LC.KOPIE T.ACCEL.ROM.KOPIE1 ACCEL.ROM.KOPIE1 T.ACCEL.ROM.KOPIE2 ACCEL.ROM.KOPIE2

TURTLE.GRAFIK.MIT.REMS (1/84, S.29) TURTLE.GRAFIK.OHNE.REMS *

DOUBLE.LORES.SOFTSWITCH.DEMO (1/84, S. 37) DOUBLE.LORES.APPLESOFT.DEMO AMPER.DOUBLE.LORES.DEMO T.AMPER.DOUBLE.LORES AMPER.DOUBLE.LORES T.DOUBLE.LORES

DOUBLE.LORES

HIRES (1/84, S. 41) T.PRINTHIRES PRINTHIRES

DHGR.APSOFT.DEMO (2/84, S. 30) AMPER.DOUBLE.HIRES.BAS AMPER.DOUBLE.HIRES T.AMPER.DOUBLE.HIRES DHGR.LINEPLOTTER

INSTRING.TEST (2/84, S. 43) INSTRING.OBJ T.INSTRING.OBJ INSTRING.LISA.SOURCE

LOESCHEN.EINES.ARRAYS (2/84, S. 52)

ULTRATERM.ENGLISCH * (2/84, S. 60) ULTRATERM.DEUTSCH *

PRIMZAHLEN.OVERMEYER * (2/84, S. 70) PRIM.OBJO * PRIM.OBJ1 *

Peeker-

PRIM.TEST * PRIM.TOOLKIT.SOURCE *

Disk #2 (Heft 1-2, 1985, DOS-Format)

T.RAMDISKLC (1-2/85, S. 14) RAMDISKLC

T.IBS.RAMDISKDRIVER (1-2/85, S. 20) IBS.RAMDISKDRIVER

T.AP20.RAMDISKTEST AP20.RAMDISKTEST

T.QUICKCOPY (1-2/85, S. 26) QUICKCOPY QUICKCOPY.PUFFER PRODOS.COPYA T.PRODOS.COPYOBJ * PRODOS.COPYOBJ

PRODOS.PATCH (1-2/85, S. 31)

T.APPLESOFT.FRE (1-2/85, S. 36) T.LC.FRE

LC.FRE

FRE.TEST

T.RAM.FRE *

RAM.FRE

T.SCHIRMDISK (1-2/85, S. 44) SCHIRMDISK.LISA.SOURCE SCHIRMDISK

T.VIDEXT VIDEXT.LISA.SOURCE VIDEXT

GETPAS (1-2/85, S. 70) T.GETPAS.ASS *

GETPAS.ASS GETDOS.PASCAL.SOURCE COPYDUPDIR.PASCAL.SOURCE

PRODOS.EDITOR.MACROS (1-2/85, S. 86)

Disk #3 (Heft 1-2, 1985, CP/M-Format)

STEUER.84 (1-2/85, S. 47) PASS.BAS MENUE.BAS HELP.BAS * A.BAS B.BAS C.BAS D.BAS E.BAS F.BAS G.BAS H.BAS I.BAS

Peeker 8/85

Sammeldisketten

J.BAS K.BAS L.BAS M.BAS N.BAS

Disk +4 (Heft 3 + 4, 1985)

TESTGENERATOR (3/85, S. 26) SAETZE

BAHNFAHRT *

ZU *

TUN.UND.SOLLEN *

IRGEND *

MULTIPRECISION (3/85, S. 32)

T.WS.TRANSFER (3/85, S. 36) WS.TRANSFER T.WS.TRANSFER.2 * WS.TRANSFER.2 *

GETCPM

PRIM.0.SC.SOURCE (3/85, S. 62) PRIM.O.BIN

PRIM.1.5SC.SOURCE PRIM.1.BIN PRIM.FP

ACCELERATOR.ABSTELLEN (3/85, S. 66)

T.WILDCARD.TEST * (3/85, S. 72) WILDCARD.TEST1 * T.WILDCARD.TEST2 * WILDCARD.TEST2 *

XPLOT.DEMO (4/85, S. 18) XPLOT.ROUTINE T.XPLOT.ROUTINE

MENUE.GENERATOR (4/85, S. 22) T.MACROS.65C02 (4/85, S. 31)

TERMINAL (4/85, S.36) TERMINAL.B T.TERMINAL.B

CAT.ARRAY (4/85, S. 44) CAT.SAVER EINTRAG.SUCHER EINTRAG.ANALYSE PRODOS.READER T.PRODOS.READER.OBJ PRODOS.READER.OBJ

MOUSESTUFF.PASCAL.SOURCE (4/85, S. 51) MOUSE.ASS.PASCAL.SOURCE TESTMOUSE.PASCAL.SOURCE DRAWMOUSE.PASCAL.SOURCE

INALL.DATA (4/85, S. 70) SCREEN80.DATA (4/85, S. 33)

Peeker 8/85

SCREEN80.SAVER (4/85, S. 76)

Disk #5 (Heft 5, 1985, DOS-Format)

T.FM.BSP (5/85, S. 9) FM.BSP

T.SLOTRAMDISK (5/85, S. 13) SLOTRAMDISK SLOTRAMDISK.HELLO

PLOT.2.0 (5/85, S. 20) T.PLOT.B

PLOT.B PLOT.PROTECTOR

T.CONVERT560 (5/85, S. 26) CONVERT560 CONVERT560.DEMO

T.EDA (5/85, S. 33) EDA

TRANSCEND.PASCAL.SOURCE (5/85, S. 36)

T.BLOCKTRACER (5/85, S. 51) BLOCKTRACER T.BLOCKTRACER1 BLOCKTRACER1

FORMAT.LC (5/85, S. 56) FORMAT.LC.START

T.DISKDRIVER.DEMO DISKDRIVER.DEMO

RANDOM.DEMO (5/85, S. 69) COLUMN80.DEMO

SUPERDUMP.EPSON (6/85, S. 22!) SUPERDUMP.IMAGEWRITER SUPERDUMP.BILD T.SUPERDUMP x

SUPERDUMP

EPSON

IMAGEWRITER

Disk #6

HELLO (6/85, S. 72) * ASMDIV *

CURSOR1 (6/85, S. 6) T.CURSOR1 CURSOR2 T.CURSOR2 LINIE

T.LINIE

VIERECK T.VIERECK

BOX

T.BOX HINTERGRUND T.HINTERGRUND

PAGE.SWAP T.PAGE.SWAP

WANDERNDER.STRICH (6/85, S. 16) KOMPRESSOR.DEMO

KREIS.1

KREIS.2

KREIS.3

FLIPPER

T.FLIPPER

KOMPRESSOR

T.KOMPRESSOR

OLYMPIA (6/85, S. 34) T.OLYMPIA

FOURIER.MAIN (6/85, S. 38) FOURIER.SYN FOURIER.SPEC

AS.ERWEITERUNG (6/85, S. 43) T.AS.ERWEITERUNG AS.ERW.PROSTART AS.ERW.PRO *

T.AS.ERW.PRO x

INSTALL.PASCAL.SOURCE (6/85, S. 48)

RAMDISK94.PASCAL.SOURCE

INIT.PASCAL.SOURCE

RAMDISK.INIT.DOS (6/85, S. 55) AUXDRIVER

T.AUXDRIVER

MOVEDRIVER

T.MOVEDRIVER RAMDISK.FORMATTER T.RAMDISK.FORMATTER

SOLITAIRE.START (6/85, S. 64) SOLITAIRE

SOLITAIRE.B

T.SOLITAIRE.B

Disk #7

PYRAMID.PITTY (7/85, S. 6) * T.PYR.PITTY.O * T.PYR.PITTY.1 *

PYR.PITTY.O *

PYR.PITTY.1 * PYR.PITTY.BACK * PYR.PITTY.SHAPE *

T.MEGAWARP.REL (7/85, S. 8) * MEGAWARP.REL * T.MEGAWARP.9900 MEGAWARP.9900

T.SPEEDTEST

SPEEDTEST

FORMAT (7/85, S. 20) T.FORMAT.OBJ FORMAT.OBJ

BITEDITOR (7/85, S. 29) NORMAL *

FETT a FETT.INVERSE a

PASTOPRO.1D (7/85, S. 62) * PASTOPRO.2D T.PASTOPRO.O PASTOPRO.O

T.CONVERT (7/85, S. 69) CONVERT

T.VORLESER (7/85, S. 71) VORLESER

Disk #8 (Heft 8, 1985, DOS-Format)

HELLO * ASMDIV *

DISKTEST (8/85, S. 14) DISKTEST.START T.DISKTEST

KOPY (8/85, S. 22) BATCHKOPY T.GETSETINFO GETSETINFO

BILDTEST

T.BOX.COPY (8/85, S. 26) BOX.COPY

T.HSCRN

HSCRN GRAF.QUATTRO.1

T.DOUBLE.LORES (8/85, S. 34) DOUBLE.LORES DOUBLE.LORES.DEMO

START.CMD x (8/85, S. 40) HMENUE.CMD * AUFNAHME.CMD x AUFMASKE.CMD x AUSGABE.CMD * SUCH.CMD * EDITFNAME.CMD * SUCHVNAME.CMD x SUCHBEME.CMD x SCHREIBA.CMD x SCHREIBL.CMD * LOESCH CMD x

IDSEARCH.PASCAL.SOURCE (8/85, S. 49)

FAKULTAET.DEMO (8/85, S. 57) T.FAKULTAET

FAKULTAET

GRAFIK.DEMOS (8/85, S. 68) ZEICHENJAGD (8/85, S. 70)

T.RAM.FRE.NEU (8/85, S. 70) * RAM.FRE.NEU

31

Double-Lores- Applesoft- Erweiterungen

von Karl-Walter Bott

Wenn Sie einen Apple lle mit einer erwei- terten 80-Zeichenkarte oder einen Apple Ilc besitzen, dann können Sie mit der hier vorgestellten Software den Applesoft-In- terpreter um sechs neue Grafik-Befehle erweitern.

Die erweitere 80-Zeichenkarte für den Ap- ple lle stellt zu den bereits vorhandenen 64K RAM auf dem Motherboard weitere 64K RAM zur Verfügung, die sich auf viel- fältige Weise einsetzen lassen. Eine dieser Möglichkeiten besteht darin, die Auflösung der Lores-Grafik zu verdoppeln, so daß 80 mal 48 Kästchen darstellbar sind. Über die Organisation und die Programmierung der Double-Lores-Grafik wurde bereits im Peeker 1/84 ausführlich berichtet.

Die Programmierung von Double-Lores in Applesoft-BASIC erweist sich als sehr umständlich, da der Interpreter keine Be- fehle zur Erstellung von Double-Lores-

32

Peeker 8/85

Grafiken enthålt, wie man sie von der nor- malen niedrigauflósenden Grafik gewonnt ist.

Das hier vorgestellte Software-Paket im- plementiert die fehlenden Befehle, so daB Applesoft-Programmierer die Double-Lo- res-Grafik nutzen können, ohne detaillier- te Kenntnisse über deren rechnerinterne Organisation zu besitzen.

schaltet und die erweiterte 80-Zeichenkar- te desaktiviert.

Dieser Befehl sollte nur dann benutzt wer- den, wenn die 80-Zeichenkarte vor Aufruf von &GR nicht aktiv war, da ansonsten Softswitch-Probleme auftreten. Wurde die Double-Lores vom 80-Zeichenmodus aus aktiviert, genügt ein TEXT-Befehl zum Zu- rückschalten.

Die neuen Befehle

&GR - Das &GR-Statement veranlaßt den Computer, auf doppelt-niedrigauflösende Grafik umzuschalten. Dabei wird der Bild- schirm gelöscht und vier Textzeilen am unteren Bildschirmrand bereitgestellt. Die Darstellung auf dem Bildschirm erfolgt jetzt in einem 80-mal-40-Raster.

Will man die ganze Seite mit Grafik ausful- len (80 mal 48 Punkte), so muß zunächst durch

POKE 49234,0

auf Full-Screen-Ausgabe umgeschaltet werden. Um die acht Grafikzeilen am unte- ren Bildschirmrand zu löschen, verwende man dann folgende Befehle:

POKE 49236,0: CALL 63538

POKE 49237,0: CALL 63538.

Hierdurch wird der ganze Bildschirm ge- löscht und wie oben die Farbe schwarz eingestellt (COLOR = 0).

& TEXT - Dieser Befehl schaltet von Dou-

ble-Lores-Grafik auf Textdarstellung um. Es wird der 40-Zeichen-Textmodus einge-

Peeker 8/85

&PLOT Der &PLOT-Befehl zeichnet ein Kästchen in der aktuellen Farbe auf dem Double-Lores-Bildschirm. Der erste Aus- druck, der dem Schlüsselwort „&PLOT“ folgt, gibt die Spalte an, in der das Käst- chen gezeichnet werden soll (zwischen 0...79, von links nach rechts); der zweite Ausdruck, durch ein Komma vom ersten getrennt, bestimmt die Zeile (0...47, von oben nach unten).

Beispiel: „&PLOT 10, 15“ plottet einen Block in Spalte 10, Zeile 15.

Der normale PLOT-Befehl wurde dahinge- hend erweitert, daß jetzt wie unter HGR auch Linien zwischen zwei oder mehre- ren beliebigen Punkten gezeichnet wer- den können.

Beispiel: ,&PLOT 0, 0 TO 79, 47" zeich- net eine diagonale Linie von links oben nach rechts unten in der aktuellen Farbe. Liegen die angegebenen Koordinaten au- Berhalb des zulåssigen Bereichs, wird das Programm unterbrochen und die Meldung „ILLEGAL QUANTITY ERROR“ ausge- geben.

Grafik 444

&HLIN Das &HLIN-Statement zeichnet eine horizontale Linie in der aktuellen Far- be. Die beiden Ausdrucke, die dem Befehl , &HLIN" folgen, bestimmen die Spalten- nummern, in denen der Anfang und das Ende der Linie liegen. Der Ausdruck, der dem Schlusselwort „AT“ folgt, bestimmt die Zeile, in welcher die horizontale Linie gezeichnet werden soll.

Beispiel: ,&HLIN 20, 60 AT 10" zeichnet eine horizontale Linie in Zeile 10 von Spal- te 20 bis Spalte 60.

Wird die zulåssige Spalten- oder Zeilen- zahl Uberschritten, wird eine Fehlermel- dung ausgegeben und das Programm un- terbrochen.

&VLIN Das &VLIN-Statement zeichnet eine vertikale Linie. Die beiden folgenden Ausdrücke bestimmen Anfangs- und End- Zeile der Linie, während der Ausdruck nach „AT“ die Spalte bestimmt, in der die Linie gezeichnet wird.

Beispiel: „&VLIN 10, 30 AT 20“ zeichnet eine vertikale Linie in Spalte 20 von Zeile 10 bis Zeile 30.

Bei Überschreiten der zulässigen Spalten- oder Zeilenzahl wird eine Fehlermeldung ausgegeben und der Programmablauf un- terbrochen.

&SCRN Der &SCRN-Befehl ermittelt die Farbe eines angegebenen Blocks auf dem Double-Lores-Bildschirm. Der Wert, den die Funktion zurückgibt, liegt zwischen 0 und 15, und wird der angegebenen Varia- blen zugewiesen, die wahlweise vom Typ Integer oder Real sein kann.

Beispiel: „&SCRN(A, 50, 10)" ermittelt die Farbe des Blocks in Spalte 50, Zeile 10. Die Variable A hat dann einen Wert zwischen 0 und 15.

Wenn die Variable nicht dem zulässigen Typ entspricht (z.B. A$) oder die zulässi- gen Grenzen für die Koordinatenangaben überschritten werden, erfolgt eine Fehler- meldung.

Der normale COLOR-Befehl kann weiter- hin verwendet werden, um die gewünsch- te Farbe eines Blockes zu definieren, wo- bei der Ausdruck rechts vom Gleichheits- zeichen zwischen O und 15 liegen muß. Beispiel: „COLOR = 15“ wählt die Farbe weiß aus.

Technische Anmerkungen

Das Programm residiert ab Adresse $931A im Hauptspeicher und ist 742 Bytes

33

lang, kann aber durchaus auch mit einer anderen Startadresse assembliert werden. (Anm.: Dies ist insbesondere für ProDOS erforderlich. Unter DOS 3.3 liegt das Pro- gramm unterhalb von $9600, d.h. im Be- reich $931A-$95FF unterhalb vom dritten DOS-Puffer bei Maxfiles 3. Man könnte es auch unterhalb von $9A00 legen und die DOS-Puffer entsprechend nach unten ver- schieben. Unter ProDOS muß es unter- halb von $9A00 liegen, d.h. im Bereich $971A-$99FF, weil es sonst durch einen Textfile-Zugriff zerstört würde. Zu diesem Zweck muß man über die GETBUFR-Rou- tine 3 Pages anfordern und dann das Pro- gramm mit BRUN DOUBLE.LORES star- ten. Aus all diesen Gründen wird HIMEM durch DOUBLE.LORES nicht geändert. us)

Um die neuen Applesoft-Befehle in den Interpreter einzubinden, wurde der Am- persand-Vektor verwendet. Er bietet eine bequeme Möglichkeit, eigene Routinen ohne Geschwindigkeitsverlust an den In- terpreter anzuhängen.

Jedesmal, wenn der Interpreter auf das &- Zeichen trifft, verzweigt er zur Adresse $03F5, in der normalerweise ein Sprung zu einem RTS-Befehl steht. An dieser Stelle wird nun ein Sprung zum eigenen Programm eingetragen.

Stößt der Interpreter auf das &-Zeichen, so verzweigt er zum Anwenderprogramm, das zunächst überprüft, welcher Token vorliegt, um zu dem entsprechenden Pro- grammsegment zu springen. Nach Aus- führung des jeweiligen Befehls wird der Textpointer bis zum nächsten Applesoft- Befehl vorgerückt und DOUBLE.LORES über einen RTS-Befehl verlassen.

Konflikte mit 40/80-Z/Z

Es empfiehlt sich, vor Aktivierung der Double-Lores die 80-Zeichenkarte mit „PRINT CHR$(21)“ oder „ESC Ctrl-Q" abzustellen, um Speicherkonflikte zu ver- meiden und das korrekte Arbeiten des &TEXT-Befehls zu gewährleisten.

Sollten Sie keine Double-Lores-Grafik auf dem Bildschirm sehen, kann das an Ihrer erweiterten 80-Zeichenkarte liegen. Ent- weder Sie besitzen eine Nachbau-80-Zei- chenkarte, die nicht über die entsprechen- den technischen Möglichkeiten verfügt, oder die Karte ist nicht korrekt installiert. Lesen Sie dazu das entsprechende Kapi- tel im Handbuch zur 80-Zeichenkarte.

Bei gemischter Darstellung (Text und Gra- fik) beachten Sie bitte folgendes:

34

DOUBLE.LORES

931A: 9316: 931F: 9321: 9324: 9326: 9329:

9324: 932C: 932E: 9330: 9332: 9334: 9336: 9338: 933A: 933C: 933E: 934Ø:

F5 Ø3

F6 Ø3

OMSDANANGUNKE

ORG * * * * * * * DH Tokens * TPLOT EQU TGR EQU THLIN EQU TVLIN EQU TSCRN EQU TTEXT EQU TO EQU AT EQU

*

$931A

Double-Lores 1.0

K.-W. Bott, 1985

$8D $88 $8E $8F $D7 $89 $C1 $C5

D Applesoft-Routinen

* AMPER EQU $Ø3F5 : Ampersand-Vektor TABV EQU $FB5B ;Cursor vertikal tabulieren CLRTOP EQU $F836 :Lores-Schirm löschen PLOT EQU $F8ØØ :Block plotten SCRN EQU $F871 ;Lores-Screen-Befehl CHRGET EQU $ØØB1 ‚Zeichen aus BASIC GETBYT EQU $E6F8 ‚Byte aus BASIC SYNCHR EQU $DEC® Zeichen im AREG * ‚mit BASIC vergleichen SNERR EQU $DEC9 ; "SYNTAX ERROR" ILQUAN EQU $E199 ;"ILLEGAL QUANTITY" PTRGET EQU $DFE3 ;Pointer auf Variable D ‚aus BASIC-Text SNGFLT EQU $E3Ø1 : YREG -> FAC D * Konstanten * PAGE1 EQU $C054 ;Hauptspeicher PAGE2 EQU $CØ55 ;Zusatzspeicher CHAR EQU $B8 :aktuelles Zeichen im * ;BASIC-Text POINTER EQU $CE ‚Zeiger für Puffer VARNAM EQU $81 Letzte BASIC-Variable SUBFLG EQU $14 ‚Flag für Var.-behandlung FAC EQU $9D ;Float.-Akkumulator WNDTOP EQU $22 ;obere Begrenzung des * :Scroll-Windows * * Speicherplatz für Koordinaten * xl EQU $Ø6 X2 EQU $97 Yl EQU $Ø9 Y2 EQU $E3 XS EQU $D7 ;Schrittweite X YS EQU $EB ;Schrittweite Y XD EOU $CF ‚Differenz Xl - X2 YD EQU $EF ‚Differenz Yl - Y2 E? E? * Ampersand-Vektor linken * START LDA #$4C : JMP

STA AMPER

LDA #<LINK

STA AMPER+1

LDA #>LINK

STA AMPER+2

RTS * * Einsprung für jeden Ampersand- * Befehl; Token im A-Register * LINK CMP #TGR

BEQ GR

CMP #TTEXT

BEQ TEXT

CMP +TPLOT

BEQ JPLOT

CMP #THLIN

BEQ HLIN

CMP +TVLIN

BEQ JVLIN

CMP #TSCRN

BEQ JSCRN

Peeker 8/85

1. Ein &PLOT-Befehl über die 39. Grafik- zeile hinaus druckt ein Zeichen in die un- teren vier Textzeilen.

2. Die erweiterte 80-Zeichenkarte sollte vor Aktivierung der Double-Lores-Grafik eingeschaltet sein und eingeschaltet bleiben.

3. War die 80-Zeichenkarte aktiviert, so ist der TEXT-Befehl zum Zuruckschalten zu verwenden, ansonsten &TEXT.

Bei reiner Grafikdarstellung ist folgendes

zu berücksichtigen:

1. Benutzen Sie die oben erwähnten

POKE- und CALL-Befehle, um die unteren

vier Zeilen für Grafik freizuhalten.

2. Jeder PRINT-Befehl druckt Zeichen in

den Bildschirmspeicher, die als Farbblök-

ke auftreten.

3. Selbst ein GET-Befehl erzeugt einen

farbigen Block, da der Cursor sichtbar

wird. Um dies zu vermeiden, kann die

Eingabe eines Zeichens von der Tastatur

z.B. wie folgt vorgenommen werden:

10 ON PEEK (49152) < 128 GOTO 10:A$ = CHR$ (PEEK (49152) - 128): POKE 49168,0

4. Für das Zurückschalten gilt das gleiche

wie oben.

Das Programm DOUBLE.LORES.DEMO zeigt eine Anwendung der neuen Befehle und die Umschaltung auf reine Grafik-

Ausgabe. =

` yonsAor

-uey !ISMZ UOA gnjyosuy WNZ LHOdAOP

` dnyoeg `n WVH Lw (1289) pieO-VId Sp GAV ` dnyoeg `n WVH Lw (2299) pieO-VIA ‘az GAV

` Mat ‘08Z

ayn EL-OL Ee ` (eqnedwoy-eiddy "ët 'OƏd-II NOSIN

- "IQ “yn 81-21 Ou :JNBYUEAUSPET

` d 9S dd 9V31

YINMSHOS UƏYIIƏZ 08

"ISMN "MU! "MOIS oid ƏSIÐId ` ZEZ SU 'SOINOHLN3D 'WOUdA “Yd

` WIIG jequedwoy-ejddy 9811 Ob ‘E01 AAT

` yoyedoyny FCO 19llonuoO-Iud-1 ` ƏSƏ] JYƏS Sq JIL 08 S9r VS Meßnys uonynpoid aySINEp pusyaßbyam

JOv4UAILNI 3 TddV

(Ine»EAuepe SIM) EOELEEB-0EO uojəle L

“un 81-51 'OG

0802 VAL 00 LOHPZ

00 S1r¿

Ndo v08Z SUNGZ-9GZLCZ SUNSGZ-8Z LLC SUNSZ-v9LZ SUOSP-ZEZZ SUOSP-9LZZ SU0SF-8022

(9102 WYS) E41 9119 G861 `S 62 PULIS

ITILNISTM

yuq JOH WW G (37

JOH wu 8 q37

DIS OL Ileysedns JOH wwg (37 SLO 993 H$ WNL

4eJOIMV v9LD YSN

su0SL-#9Lr Adn

su00Z-9L Lt Adn

jayejsusßueyy pun ejaneg oe

Gy umag 0001 : Z4 6əwuəzinuocsəpiue9 - 19q10M OS YUEL `L yuq qjəÐ `o ung ww s q31

a OsOIW-aNOlSSWSL 9

WO OS Li NN !8q ‘YA Jepo NN Jed puesion

wa —'g 6 osz siq :BurmpedugA pun OOd NO —'01 + Isuos ‘wa

—'0S UƏMISISƏQISƏPUIW `V Su

Peeker 8/85

SNERR

SPLOT VLIN SCREEN

Double-Lores initialisieren

und Bildschirm löschen

LDA LDA LDA STA STA LDA LDA STA LDA JSR

J k ÅÅÅ

STA STA LDA LDA LDA .LDA STA JMP

&HLIN X1,

Apple und IBM kompatible Computer

16K, Z80, Diskcontroler je ................... 110,- 80 Zeichenkarte mit Softswitch

2 Zeichensåtze ................................ (EL) Motherboard 48K ohne EG een 610,— Erphi-controler mit Autopatch .............. 300,— Siemenslaufwerk F 122 ....................... 515,- Philips X3134 2x80 Track ................... 465,- TEAC FD-55B 2x40 Track ................... 468,— TEAC FD-55F 2x80 Track ................... 565,- Neu: Stardrucker SG 10............. 920,— Monochrome Monitore .................... ab 375,- rei ine ab 998,— Tastaturen für IBM und Apple ........ ab 330,—

Versand nur per Nachnahme oder Vorkasse

Weiteres Zubehör für Apple und IBM gegen frankierten Rückumschlag.

Preissenkung: 128K Karte (Saturn kompatibel) .... 395,—

Zusatzkarten und Motherboard ausnahmslos deutsche Fertigung mit ausgesuchten Bauteilen.

Ulf Mohwinkel Electronic Berliner StraBe 73 5090 Leverkusen Fettehenne Telefon 0214/937 81

$CØ5Ø $CØ56 $CØ53 $CØØ1L $CØØD $C@5E #2Ø WNDTOP +23 TABV PAGE2 CLRTOP PAGE1 CLRTOP CHRGET

in den Textmodus

$CØØØ $CØØC $CØSF $CØ51 PAGE1 WNDTOP CHRGET

X2 AT Y

CHRGET GETBYT +80 ERROR

APPLE //e

m 80 gestochen scharfe und flimmerfreie Zeichen / Zeile m plus zusåtzliche 64 KByte schnelle dynamische RAM's m ermöglicht Double Hires Graphik ( 560 * 192 Punkte ) m vergoldete Steckerleiste und Qualitåtsbauteile Geprüfte Platine + Demo Disk + Beschreibung DM 174,50 Bausatz DM 145 .- W Leerplatine + Bauanleitung DM 59.- Ab Lager lieferbar. Alle Preise inklusive Mehrwertsteuer.

DOBBERTIN INDUSTRIE-ELEKTRONIK

Brahmsstraße 9, 6835 Brühl, Tel. (06202) 71417

: GRAFIK ; LORES ;MIXSET ; SØSTORE ; SØCOL ANA

:Scroll-Window begrenzen :Cursor in Zeile 23 ‚setzen

:Zusatzspeicher löschen

‚Hauptspeicher löschen :Textptr. vorrücken ‚und Return nach BASIC

; 4ØSTORE ; 4ØCOL

; ANS OFF ; TEXT

:volles Scroll-Window ;Txtptr. ink. —> BASIC

; TXTPTR vorrücken ‚Param. Xl aus BASIC-Text :X1 > 79?

APPLE //e APPLE IL

"und kompatible Computer

Universeller EPROM-Programmer 4003

m Programmiert alle gängigen EPROM-Typen (z.B.: 2716, 2732,-64,-128,2508,-16,-32,-64...) Voll menügesteu- erte Software auf Diskette mH Kein Schalten, Löten oder Stecken nötig & Programmierspannung wird im Gerät er- zeugt m Verbindung zum Rechner über Flachbandkabel 8 Rote und grüne Leuchtdiode zur Betriebsart-Anzeige Æ

Komplett mit 28 poligem Textool-Sockel 8 Fertiggerät DM 269,50 m Bausatz + Anleitung DM 219.-

80 Zeichen Karte +64 KByte RAM

35

DC

S8/8 194994

ERROR JMP

`

* &VLIN Y1,

*

`

VLIN JSR JSR CPX BCS STX LDA JSR JSR CPX BCS STX LDA JSR JSR CPX BCS STX STX JSR LDA RTS

U Å

CREEN JSR JSR

*

LDA JSR JSR LDA LSR BCC LDX BCS LDX TAY LDA JSR JSR

&SCRN (VAR,

X1 #',' SYNCHR GETBYT

LINPLOT PAGE1

ILQUAN

Y2 AT X

CHRGET GETBYT +48 ERROR Y1 #',' SYNCHR GETBYT +48 ERROR Y2

+AT SYNCHR GETBYT +80 ERROR Ki

x2 LINPLOT PAGE1

X, Y)

CHRGET GETADR

a. SYNCHR GETVAL xl

S2 PAGE1 OKAY PAGE2

Yl SCRN GIVBACK

; Komma? ;Param. X2 aus BASIC-Text 32 > 797

ea. ;Param. Y aus BASIC-Text > 47%

;Linie plotten :sicher ist sicher ... ¿zurück zu BASIC

;Txtptr. vorrücken :Param. Y1 aus BASIC syl > 47?

;Komma?

:Param. Y2 aus BASIC 42 > 477

«TATT

"baran X aus BASIC SE > 79

:Linie zeichnen

¿zurück zu BASIC

Farbwert des Blockes X, Y bestimmen und in BASIC-Variable übertragen

;Txtptr. vorrücken "Adr. und Typ der ‚Variablen feststellen ;Komma?

:Werte X, Y aus BASIC

;A = A / 2 ;gerader Wert -> PG2

‚ungerade -> PG1

;X -> YREG

;Y -> AREG

;Farbe im AREG ;Farbcode der Variablen

9415: 9418:

941B: 941E: 942Ø: 9422: 9424: 9426: 9429:

942C: 942E: 943Ø: 9432:

9434:

9437: 9439: 943A: 943C: 943D: 9440: 9442: 9444: 9446: 9448: 9449: 944B: 944C:

944E: 9451:

9454: 9457:

9458: 945B: 945D: 945F: 9461: 9463: 9466: 9469: 946B: 946D: 946F:

947Ø:

AD 4C

54 Bl

Bl 00 B8 cl ØE 58 73

øp B8 Cl 20

B1

SA 2C

54

F8 50 11 06 2C F8 30 03 09

99

00

00

94 94

ØØ

94

94 94

EG

DE E6

El

202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 Ca 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246

247 248

249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266

LDA JMP

* * *

æ &PLOT Xl, Yl TO X2, Y2

`

*

SPLOT JSR LDX LDA CMP BEQ JSR JSR

D

PLOTTO LDX LDA CMP BNE

D

CTO JSR

*

* Neue Param.

* LDA PHA LDA PHA JSR LDA STA LDA STA PLA STA PLA STA

JSR JMP

EXIT LDA RTS

PAGE1 CHRGET

CHRGET

( CHAR, X) +TO

CTO GETVAL EXPLOT

(CHAR, X) +T0 EXIT

CHRGET

‚zuordnen

;Txtptr. vorrücken ¿Return nach BASIC

;Txtptr. vorrücken

"keine Param. holen

;Punkt plotten

"kein 'TO' -> Ende

;Txtptr. vorrücken

holen und Xn, Yn <--> Xn+1, Yn+1

Xl

Xl

LINPLOT PLOTTO

PAGE1

;Linie plotten .. zum Anfang

;—> BASIC

GETVAL holt die X- und Y-Parameter

D D * aus dem BASIC-Text * G

ETVAL JSR

CPX

BCS

STX

LDA

JSR

JSR

CPX

BCS

STX

RTS D

FEHLER JMP `

GETBYT +80 FEHLER x]

` SYNCHR GETBYT #48 FEHLER Yl

ILQUAN

;Byte holen X > 797

;Syntax ok.? ;Byte holen Ý > ÆTT

* EXPLOT plottet einen Punkt mit * den Koordinaten X1, Yl auf dem

S8/8 1949Əd

ZE

* Double-Lores-Schirm 94D7: 17 332 BEQ NOCOR2 ; ETERM = Ø * 94D9: 18 333 CLC EXPLOT LDA X1 ;X —> AREG 94DA: A5 Ø6 334 LDA X1 LSR ;X = X / 2 94DC: 65 D7 335 ADC XS ;X1 = X1 + XS BCC ;gerade -> Zusatssp. 94DE: 85 Ø6 336 STA Xl LDY 94EØ: 38 337 SEC BCS 94E1: A5 CF 338 LDA XD LDY 94E3: E5 EF 339 SBC YD TAY ;X —> YREG 94E5: ØA 34Ø ASL LDA :Y —> AREG 94E6: 18 341 CLC JSR ;Block plotten 94E7: 6D A9 95 342 ADC ETERM LDA 94EA: 8D A9 95 343 STA ETERM ;ETERM = ETERM + 2 * (XD - YD) RTS 94ED: 4C FA 94 344 JMP LAB3 * 94FØ: A5 CF 345 NOCOR2 LDA XD * LINPLOT plottet eine Linie 94F2: ØA 346 ASL * zwischen zwei Punkten 94F3: 18 347 CLC * 94F4: GD A9 95 348 ADC ETERM LINPLOT LDA zl 94F7: 8D A9 95 349 STA ETERM ;ETERM = ETERM + 2 * XD STA XS = 94FA: 18 350 LAB3 CLC STA YS = 94FB: A5 EB 351 LDA YS 94FD: 65 Ø9 352 ADC Y1 SEC 94FF: 85 Oo 353 STA Yl ;Yl = Yl + YS LDA 95Ø1: 4C CC 94 354 JMP LOOP2 SBC 9504: 4C 73 94 355 READY2 JMP EXPLOT STA ; 356 * 357 * BRENSENHAM-Algorithmus XD >= YD SEC 358 »* hier ETERM eine 16-Bit-Signed-Number LDA Y2 359 * SBC Yl 9507: A5 EF 360 DDA LDA YD STA YD ; YD Y2 Y1 9509: 8D AB 95 361 STA TMP 950C: A9 og 362 LDA #9 Setzen der Schrittweite für Liniengenerator 95ØE: 8D AC 95 363 STA TMP+1 9511: ØE AB 95 364 ASL TMP BIT XD 9514: 2E AC 95 365 ROL TMP+1 BPL LAB1 9517: 38 366 SEC BIT YD 9518: AD AB 95 367 LDA TMP BMI CASE1 DX < Ø & DY < Ø 951B: E5 CF 368 SBC XD BPL CASE2 ;DX < Ø & DY >= Ø 951D: 8D A9 95 369 STA ETERM BIT YD 9520: A9 ØØ 37Ø LDA BMI CASE3 ;DX DY < Ø 9522: E9 ØØ 371 SBC BPL FERTIG ;DX DY >= Ø 9524: 8D AA 95 372 STA ETERM+1 ;ETERM = 2 * YD YX CASE1 JSR MIYS :YS 9527: A6 CF 373 LDX XD ;XREG = Zähler CASE2 JSR MIXS ;XS 9529: E8 374 INX JMP FERTIG 952A: CA 375 LOOP DEX CASE3 JSR MIYS ; YS 952B: 5D 376 BEQ READY1 ;Linie fertig * 952D: 73 94 377 JSR ` EXPLOT PLOT (X, Y) FERTIG LDA XD 9530: AD AA 95 378 LDA ETERM+1 CMP YD 9533: 39 379 BMI NOCOR BPL DDA ;XD >= YD 9535: Ø5 389 BNE MARK * 9537: AD A9 95 381 LDA ETERM * BRENSENHAM-Algorithmus fir YD > XD 953A: 32 382 BEQ NOCOR * (Modifizierter Digital-Differential-Analyzer DDA) 953C: 18 383 MARK CLC H 953D: A5 09 384 LDA Y1 LDA XD 953F: 65 EB 385 ADC YS ASL 9541: 85 Ø9 386 STA Yl ;Yl = Yl + 1 SEC 9543: 38 387 SEC SBC YD 9544: A5 EF 388 LDA YD STA ;ETERM = 2 * YD XD 9546: E5 CF 389 SBC XD LDX YD 9548: 8D AB 95 399 STA TMP INX ;Schleifenzähler initialisieren 954B: A9 ØØ 391 LDA DEX 954D: E9 ØØ 392 SBC BEQ READY2 ;Linie fertig? 954F: 8D AC 95 393 STA TMP+1 JSR EXPLOT 9552: ØE AB 95 394 ASL TMP LDA ETERM 9555: 2E AC 95 395 ROL TMP+1 BMI NOCOR2 ; ETERM >= Ø 9558: 18 396 CLC

gE

S8/8 19499d

00 14 E3

CE CF

81 ØA 82 ØC Øl FF

02

95

437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460

FF 95 461

READY1 + MIYS

* * H * *

GETADR

CLC ADC STA LDA ADC STA CLC LDA ADC STA JMP JMP

LDA STA LDA EOR CLC ADC STA RTS

LDA STA LDA EOR CLC ADC STA RTS HEX HEX HEX HEX

LDA STA JSR

STA STY

LDA BMI LDA BMI LDA STA RTS

LDA STA

ETERM + 2 * (YD XD)

ETERM ETERM ETERM+1 ETERM+1 ETERM + 2 * DY XS

X1

X1

LOOP

EXPLOT

#$FF

YS

YD 4%11111111

+l YD ; ABS (YD)

+$FF

xs

XD #711111111

+1

XD :XD = ABS (XD)

00 ;Error-Term für DDA 00

00 :Hilfsspeicher für 16-Bit-Mult.

ØØ

Adresse für Variable, die den Farbcode erhalten wird, feststellen und Variablentyp (Real, Integer) bestimmen

SUBFLG ; Subscript auf Ø

PTRGET :Adr. der Variablen ‚feststellen

POINTER

POINTER+1

VARNAM ‚ergibt Variablentyp INTAl

VARNAM+1

TYPERR ‚es war ein String! +1

TYPFLG ;Real-Variable

+2 ;Integer-Variable TYPFLG

RTS

x 95CC: AD 54 464 TYPERR 95CF: 4C C9 DE 465

LDA PAGE1 JMP SNERR

466 * 467 * Wertzuweisung der BASIC-Variable mit Farbcode 468 »* im A-Register 469 * 95D2: 48 470 GIVBACK PHA :Farbwert retten 95D3: AD FF 95 471 LDA TYPFLG

95D6: C9 Øl 472 CMP +l

95D8: BEQ REAL1 ;Real-Var.

95DA: 68 475 PLA

95DB: 01 476 LDY #1

95DD: 91 CE 477 STA (POINTER),Y ;High-Byte 95DF: A9 PP 478 LDA | 95El: 88 479 DEY

95E2: 91 CE 48Ø STA (POINTER),Y ;Low-Byte 95E4: 481 RTS

95E5: 68 483 REAL1 PLA 95E6: A8 484 TAY 95E7: Øl 485 JSR SNGFLT ; YREG -> Float FAC 95EA: Ou 486 LDY #9 95EC: B9 9D ØØ 487 REAL2 LDA FAC,Y ;FAC -> Var. 95EF: 91 CE 488 STA (POINTER),Y 95F1: C8 489 INY 95F2: Op 490 CPY #5 95F4: F6 491 BNE REAL2 95F6: A5 9E 492 LDA FAC+1 95F8: 01 493 LDY +1 95FA: 29 7F 494 AND #7Ø1111111 ;SIGN auf + 95FC: 91 CE 495 STA (POINTER),Y 95FE: 60 496 RTS 497 * 95FF: ØØ 498 TYPFLG HEX ØØ

742 Bytes

DOUBLE.LORES.DEMO

PRINT CHR$ (21): PRINT CHR$ (4) "BRUN DOUBLE. LORES" 15 REM DOUBLE.LORES.DEMO zeichnet eine Kugel

TEXT : GOSUB 85

25 XE = 79:YE = 47:A = XE / 2:B = YE / 2:F1 = 7:F2 = 23 FOR C = 1 TO 15: COLOR= C:R = C + C

35 FOR X = A R TO A + R: IF X < Ø OR X > XE GOTO 60 40 H = R * R (X A) * (X - A): IF H < = GOTO 60 45 Yl = B + SQR (H) - F1:Y2 = B SQR (H) + Fl

50 IF Y1 > Ø AND Y1 < = YE THEN & PLOT X,Y1

55 IF Y2 > Ø AND Y2 < = YE THEN & PLOT X,Y2

60 NEXT X

65 NEXT C

GET X$

75 & TEXT : HOME : END

REM Umschaltung auf Full-Screen

85 & GR : POKE 49234,Ø

86 POKE 49236,Ø: CALL 63538

87 POKE 49237,ø: CALL 63538

RETURN

Betriebssystem CP/M Vom Monitorprogramm zum Mehrbenutzersystem.

Von Jürgen Plate.

1984, 351 Seiten, 30 Abb.,

3 Tab., geb., DM 56,-

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

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

Das Buch zum Apple Il von Erich Esders

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

Froris Gomputer- Praxis

Das Buch zum Apple-ll

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

Peeker 8/85

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

Aus dem Inhalt:

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

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

«apple II

H, He, He, He

Lis tin g | | tür Appleroft - BASIC -

Interpreter von Matthias Buck

x MIKROCOMPUTER

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

Einleitung zum prinzipiellen Ablauf des Applesoftinter- preters:

@ Aufbau und Verarbeitung

der/des Programmtextes Variablentabelle String-

space - FlieBkommaformate

Basicstacks (GDSUB, FOR-NEXT, ...)

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

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

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

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

Auch für Apple Je und c und

Kompatible!

Apple Il Pascal Eine praktische Anleitung

von Arthur Luehrmann und Herbert Peckham 1982, 544 S., kart., DM 59,-

APRE = PASCA `

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

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

Start mit Apple-Logo für II, lle und lic

Das kleine Logo-Einmaleins: Grafik = Text * Musik

Von D. Senftleben

1985, 222 Seiten, DM 35,-

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

Ausbildungs- und Freizeitbe-

"Dietrich Senitleben. Start mit

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

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

Apple Il Anwenderhandbuch

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

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

Apple Il Pascal

1985, 197 S., DM 39,-

Kosa. š

ui

Apple II Pascal Betriebssystem

1985, 256 S., DM 49,-

AMEI

D: C A!

k DA ` f $ ` k. RR: A? i kh B ` An

Betriebssystem

39

von Ing. (grad.) Ernst Fischer

Ein gutes Adreñverwaltungsprogramm (kunftig Adv genannt) sollte mindestens folgende Anforderungen erfüllen:

Das Programm soll anwenderfreundlich sein; es kommt also nur eine Menütech- nik in Frage. Personaldaten müssen leicht veränderbar sein; es sollte eine Such- funktion nach Vorname, Familienname und nach Bemerkungen existieren. Vor- teil: Man findet auch Personen wieder, deren Namen sich durch Heirat verändert haben. Die Suchfunktion nach Bemerkun- gen sollte es ermöglichen, auch Teilstrings innerhalb der Bemerkung zu finden. Von einem Adv-Programm erwartet man nicht nur, daß es für die gespeicherten Adres- sen Adreßaufkleber und Absender druckt, sondern auch ein Adreßverzeich- nis im Taschenkalenderformat ausgibt. Schließlich müssen Datensätze leicht, aber nicht versehentlich gelöscht werden können. Ein gutes Adv sollte nur über ein Passwort benutzbar sein, um es vor nichtautorisierten Personen zu schützen. Es interessiert den Benutzer auch, wievie- le Datensätze gespeichert sind und wann der letzte Zugriff war. Diese Informationen sollten bei Beginn vom Adv ausgegeben werden. All diese Forderungen werden von diesem Programm erfüllt.

Als Grundlage dient die relationale Datenbank dBASE. Einer der wesentlich- sten Vorteile von dBASE ist die Flexibilität, bedingt durch eine eigene Programmier- sprache. Mit ihr läßt sich praktisch jedes Problem lösen, wie im folgenden noch ge- zeigt wird. Für eine sinnvolle Anwendung

40

Adreßverwaltu

programm

mit dBASE II

ist folgende Gerätekonfiguration erforder- lich: Ein Apple Il/II+/lle oder kompatible Nachbauten, zwei Diskettenlaufwerke, ein Drucker und eine Z80-Karte (läuft unter CP/M). Natürlich muß man im Besitz der relationalen Datenbank dBASE sein. Lei- der können Besitzer eines Apple llc die Vorteile dieses Programms wegen der fehlenden Slots nur mit einer teuren Zu- satzkarte nutzen. Die Druckersteuerzei- chen in den Unterprogrammen beziehen sich auf Epson-Drucker.

Wichtig bei der Anwendung: Zu beachten ist bei der Benutzung des Adv lediglich, daß man das Programm nur über die Op- tion 9 des Hauptmenüs verläßt. Nur so ist gewährleistet, daß die benutzten Dateien wieder geschlossen werden. Hält man sich nicht an diese Selbstverständlichkeit, kann dies zu Datenverlusten führen.

Aufbau des Adreßverwaltungspro- gramms

Wie Bild 1 zeigt, wird der Benutzer über den aktuellen Zustand des Adv informiert. Es zeigt an, wieviele Adressen gespeichert sind und an welchem Datum das Adv zum letzen Mal benutzt wurde. Schließlich wird der Benutzer aufgefordert, das aktuelle Tagesdatum einzugeben. Bei einem Re- turn wird das alte Datum übernommen. Nachdem diese Hürde genommen ist, wird der Benutzer aufgefordert, seine Zu- griffsberechtigung durch ein Passwort nachzuweisen. Das Passwort wird dabei aus Sicherheitsgründen nicht am Bild-

dis,

Peeker 8/85

a a d RTN ` A AR. d Ex N br

Nee Å í D

à <

Ki Tei va , úM 14 JE >

|

Peeker 8/85

schirm angezeigt. Bei richtiger Eingabe er- schließt sich nun erst das Hauptmenü; man kann über die gespeicherten Daten verfügen.

Auflistung und Funktion der einzelnen Programme (vgl. Bild 2)

Die Programme in Laufwerk A: haben die Aufgabe, menügesteuet auf die Datenbank zugreifen zu können. Außer- dem befinden sich auf A: die Ein- und Ausgabemaske, welche für die Datenein- gabe, Datenausgabe und Datenverände- rung genutzt werden. Die drei Indexdatei- en gestatten einen sehr schnellen Zugriff auf die Daten (maximal 2 Sekunden unab- hängig von der Datengröße). Mit ihnen kann man das indizierte Feld alphabetisch ausgeben. Indizierung hat gegenüber Sor- tierung den Vorteil, daß die Daten phy- sisch nicht verändert werden und auch weniger Zeit und Speicherplatz bean- sprucht wird. Das Indexregister wird auf Laufwerk A: angelegt, weil hier noch Spei- cherplatz auf der Diskette zur Verfügung steht, der bei großen Datenmengen bei Laufwerk B: fehlen würde. In der Memory- datei werden schließlich die aktuellen Daten des Adv wie die Anzahl der gespei- cherten Records und das letzte Zugriffsda- tum abgelegt. In Laufwerk B: befindet sich ausschließlich die Adv Datenbank, deren Struktur später erklärt wird.

Aufbau der Datenbank

Das Adv sollte so universell wie möglich sein und dabei alle Informationen liefern, die beruflich und auch privat interessant sind. Sollten für das Adv bestimmte Daten, wie Geburtsdatum oder Vorname der Ehe- frau zu intim sein, weil man die Person nicht so genau kennt, so läßt man einfach dieses Feld frei. Die Datenspeicherung er- folgt ausschließlich auf dem Laufwerk B:. Somit ist genügend Platz auf der Diskette. Alle Kommandodateien, Indexregister und der Memoryspeicher sind auf Laufwerk A:. Für die Felder FAM, VOR und VORE ist jeweils ein Indexregister angelegt; das spart Zeit beim Suchen und gestattet auf einfache Weise das alphabetische Ordnen.

Die Datenbank wird folgendermaßen an- gelegt: Man startet dBASE im Laufwerk A: mit der Eingabe von „dbase“ <RETURN> (das CP/M Betriebssystem muß natürlich auf der dBASE-Diskette sein). Nach der Eingabe des Tagesdatums oder einem Re- turn meldet sich dBASE mit einem Punkt

41

als Promptzeichen. Für die Generierung des Adv geben Sie den dBASE-Befehl CREATE B:ADRESSEN ein. Daraufhin er- fragt sich dBASE die Struktur der Datensätze. Nachdem Sie das 17. Feld eingegeben haben, schließen Sie mit RE- TURN ab. Auf die Frage, ob Sie die Daten jetzt sofort eingeben wollen (INPUT DATA NOW?) antworten Sie mit „N“ (No). Damit liegt die Struktur des Adv in Laufwerk B: fest. Vergleiche hierzu Bild 3.

Eingabe der Kommandodateien

Die Eingabe sollte nicht mit dem dBASE- Editor mit Hilfe des MODIFY-COMMAND- Befehls eingegeben werden. Es hat sich gezeigt, daß ab einer bestimmten Länge der Programme der Editor verrückt spielt. Statt dessen sollte die Programmeingabe mit WordStar erfolgen. Außerdem hat man dabei mehr Komfort.

(Anm. der Red.: Wegen des großen Um- fangs der Kommandodateien sind alle er- forderlichen CMD-Files mit Ausnahme ei- nes Beispiels {Bild 5} nur auf der Peeker- Sammeldiskette enthalten. Da diese Dis- kette im DOS-Format beschrieben ist, transferieren Sie die Files mit dem Pro- gramm APDOS der CP/M-Systemdiskette von DOS nach CP/M. Danach liest dBASE diese Files einwandfrei.)

Beschreibung der Programmteile

START.CMD (Programmbeschreibung) Das Programm gibt Informationen über die Datenbank (letztes Zugriffsdatum, Anzahl der Records usw.). Diese bezieht es zum Teil aus dem Memoryspeicher von dBASE. Die Datumseingabe wird auf gültige Werte überprüft; erst dann kann im Programm fortgefahren werden. Es erfolgt eine Über- prüfung des eingegebenen Passwortes. Wünschen Sie ein anderes Passwort, so ersetzen Sie „PEEKER“ durch das Wort Ihrer Wahl. Wird später beim Gebrauch ein falsches Passwort eingegeben, so löscht dBASE alle bis dahin gemachten Eingaben vom nichtautorisierten Benutzer und kehrt zum CP/M-Betriebssystem zurück. Stimmt das eingegebene Passwort mit dem gespeicherten überein, wird das Hauptmenü aufgerufen.

HMENUE.CMD (Programmbeschreibung) Das Hauptmenü gestattet den Zugriff auf die einzelnen Unterprogramme. Wird Op- tion 9 (Ende) gewählt, so werden zuerst alle Speichervariablen mit „RELEASE ALL“ gelöscht. Dann wird die Datenbank mit „USE B:ADRESSEN“ eröffnet und der

42

Zeiger auf den letzten Record gesetzt. Die Nummer dieses Records wird im Varia- blenspeicher „R:NR“ in den Memoryspei- cher geladen. Danach wird mit „CLEAR“ die Datenbank geschlossen. „CANCEL“ verläßt das Hauptmenü und das dBASE-

Promptzeichen erscheint. Ersetzt man „CANCEL“ mit „QUIT“, so kehrt man zum CP/M-Betriebssystem zurück.

AUFNAHME.CMD bung)

Zuerst wird die Adv-Datenbank mit „USE B:ADRESSEN“ eröffnet und der Zeiger an das Datenende gesetzt. Mit „APPEND BLANK“ wird ein leerer Datensatz ange- hängt, der dann durch den Aufruf der Auf- nahmemaske gefüllt wird. Die WHILE- Schleife wird solange durchlaufen, bis man die Frage „Weitere Eintragungen?“ mit „N“ beantwortet. Hat man die Eingabe durch „N“ abgebrochen, so werden drei Indexdateien angelegt; eine für den Fami- liennamen, eine für den Vornamen der Eingabeperson und eine für den Vorna- men von Ehefrau/Ehemann. Mit „CLEAR“ wird die Datenbank geschlossen.

(Programmbeschrei-

AUFMASKE.CMD bung)

Die Aufnahmemaske dient zur einfachen und übersichtlichen Eingabe der Personal- daten. Dieser Programmbaustein wird auch bei Veränderung der Personaldaten genutzt. Das Programm erzeugt den Bild- schirmausdruck von Bild 4.

(Programmbeschrei-

AUSGABE.CMD bung)

Die Ausgabemaske (AM) ist im Prinzip genauso wie die Eingabemaske (EM) auf- gebaut. Der Unterschied ist folgender: Bei der EM mußten ja die Daten in die Spei- chervariablen eingelesen werden; deshalb die ,GET"-Befehle. Bei der AM werden die Speichervariablen aber auf den Bild- schirm gegeben. Hier also keine „GET“- Anweisung, sondern „SAY“-Anweisun- gen. Der Cursor bleibt sofort auf der letz- ten Zeile (hinter J/N) stehen; man braucht sich nicht mit Return bis zur letzten Zeile vorarbeiten.

(Programmbeschrei-

SUCH.CMD (Suchprogramm)

Das Suchprogramm sucht, wie sein Name es vermuten läßt, nach einem bestimmten Datensatz, wenn der Familienname oder ein Teil davon bekannt ist. Die WHILE- Schleife wird solange durchlaufen, wie der vorhandene Datensatz 0 und somit noch nicht gefunden ist. Ist der Zeiger am Ende der Datei, erscheint die Meldung, daß es diese Person nicht gibt. Man hat die Mög-

lichkeit, mit Return die Suche abzubre- chen oder, nachdem man den Namen der gesuchten Person neu eingegeben hat, einen neuen Suchvorgang zu starten. SUCH.CMD wird in folgenden Komman- dodateien verwendet:

- EDITFNAM.CMD

- SUCHFNAM.CMD

- SCHREIBA.CMD

- LOESCH CMD

EDITFNAME.CMD bung)

Dieses Programm erlaubt Änderungen von Datensätzen. Nach der Eingabe des Familiennamens (optional auch zusätzlich des Vornamens) sucht dBASE in der In- dexdatei den gewünschten Namen. Ver- läuft die Suche negativ, erscheint eine ent- sprechende Meldung. Der Benutzer hat die Möglichkeit, beliebig oft die Namens- eingabe zu wiederholen oder durch ein Return zum Hauptmenü zurückzukehren. Wurde auch der Vorname eingegeben, so erfolgt nun mit „LOCATE“ die Suche nach dem Datensatz, der beide Kriterien erfüllt (Vor- und Familienname). Die „FIND“-An- weisung dient dabei zum schnellen Finden des Familiennamens. Da davon auszuge- hen ist, daß verschiedene Personen den gleichen Familiennamen haben, ist es zweckmäßig, auch den Vornamen einzu- geben. Mit dem LOCATE-Befehl wird dann die Person sicher gefunden. Die Auf- nahmemaske erlaubt dabei eine bequeme Veränderung der Daten.

(Programmbeschrei-

SUCHFNAM.CMD bung)

Will man sich die Daten einer Person kom- plett am Bildschirm anschauen, so ruft man dieses Kommandoprogramm auf. Nachdem Sie den Familiennamen der ge- wünschten Person eingegeben haben, sucht das Unterprogramm SUCH.CMD den Datensatz. Wird er nicht gefunden, können sie mit Return abbrechen oder einen erneuten Suchvorgang einleiten. Die Daten werden mit der Ausgabemaske am Bildschirm angezeigt. Beantworten Sie die Frage „Ist dies die gewünschte Person (J/N)" mit N(ein), so wird mit LOCATE die nächste Person gesucht, auf welche das Suchkriterium zutrifft. Dieses Spiel geht so lange, bis die Person gefunden ist oder der Datenzeiger am Dateiende angelangt ist.

(Programmbeschrei-

SUCHVNAME.CMD (Programmbeschrei- bung)

Manchmal weiß man von einer Person nur den Vornamen, weil der Familienname

Peeker 8/85

sich durch eine Herat geåndert hat. Das Programm ist åhnlich aufgebaut wie SUCHFNAME.CMD. Wird der Vorname nicht in der Indexdatei Beta gefunden, so wird in der Indexdatei Gamma weiterge- sucht. Hier sind die Vornamen der Ehe- partner indiziert. Verlàuft die Suche auch hier ergebnislos, so erfolgt die Meldung „Den Vornamen XXX gibt es nicht!". Mit Return kann man die Suche abbrechen oder durch eine erneute Eingabe den Suchvorgang wiederholen. Ist die ange- zeigte Person nicht die richtige, so werden mit LOCATE nacheinander alle Personen mit dem entsprechenden Vornamen aus- gegeben, bis der EOF-Marker erreicht ist.

SUCHBEME.CMD (Programmbeschrei- bung)

Oft kommt es vor, daB man von einer Person sowohl Familien- als auch Vorna- men vergessen hat. Dann helfen bezüg- lich der Person gemachte Bemerkungen weiter. Das Programm findet auch Teil- strings aus der Bemerkung. Ein Beispiel: Man hat als Bemerkung „Mitglied beim Computerarbeitskreis“ eingegeben. Als Teilstring genügt „arbeitskreis“. Es wer- den alle Personen nacheinander ange- zeigt, die bei Bemerkungen den Teilstring „arbeitskreis“ haben. Wird der Teilstring nicht gefunden, so kann man wieder mit Return die Suche abbrechen oder ein neu- es Suchkriterium eingeben.

SCHREIBA.CMD (Programmbeschrei- bung)

Zu einer Adreßverwaltung gehört auch ein Programm, das Adressen- und Absender- aufkleber drucken kann. Die gewünschte Person wird mit dem schon bekannten Suchprogramm SUCH.CMD gefunden. Wie man aus dem Anredemenü sieht, hat man alle erdenklichen Optionen. Wählt man Option-Nr.1, so kann man für sich Absenderaufkleber drucken lassen. Op- tion-Nr.7 gestattet individuelle Anreden wie Firma o.ä. Hat man sich für eine der sieben Möglichkeiten entschieden, so er- scheint die Adresse richtig formatiert auf dem Bildschirm. Hat man sich zum Aus- druck entschieden, wird man nach der An- zahl der zu druckenden Exemplare gefragt und gebeten, den Drucker einzuschalten. Nach dem Justieren der Aufkleber kann nach einem Return der Druck beginnen. Die Druckersteuerzeichen sind für den Epson FX-80 gedacht.

SCHREIBL.CMD bung)

Eine Adreßverwaltung taugt nur etwas, wenn man die gespeicherten Adressen

(Programmbeschrei-

Peeker 8/85

Bild 1: Aufbau des Adreßverwaltungsprogramms

Memorydatei

Aufnahmemaske Ausgabemaske

Programminformation

Abfrage des Passwortes

Indexdateien

Schneller Zugriff auf die Felder der Datenbank

| Laufwerk A: | Laufwerk B: |

Autor, letztes Zugriffsdatum, Anzahl der Eintragungen, Aktuelles Tagesdatum

Überprüfung des Benutzers

Hauptmenü

.Eingeben der Personaldaten .Verändern der Personaldaten .Suchen nach Familiennamen .Suchen nach Vornamen ‚Suchen nach Bemerkungen ‚Adreßaufkleber drucken .AdreBlisten drucken/ Adressen anschauen .Löschen eines Datensatzes . Ende

Datenbank

A O Q Ë GQ ON H

o

Bild 2: Auflistung der Unterprogramme des Adv in Laufwerk A:

Programmname AD-START.CMD —> HMENUE . CMD —> AUFNAHME CND --> AUFMASKE CMD --> AUSMASKE CND --> EDITFNAME. CMD --> SUCHFNAME . CMD ——> SUCHVNAME . CMD —-> SUCHBEME CND --> SCHREIBA.CMD -->

SCHREIBL.CMD -->

LOESCH. CMD —> SUCH. CMD ——>

Funktion des Programmes

Startprogramm, informiert über das Programm, Recordanzahl, letztes Zugriffsdatum usw. Erlaubt den Zugriff auf die einzelnen Unter- programme.

Dient zur Dateneingabe; es wird eine Eingabe- maske benutzt.

Maske zur Dateneingabe und Datenverånderung. Maske zur Datenausgabe.

Erlaubt die Veränderung der Personaldaten; es wird die Maske zur Dateneingabe benutzt. Erlaubt die Suche nach einer bestimmten Person; Als Suchkriterium dient der Familienname. Erlaubt die Suche nach einer bestimmten Person; Als Suchkriterium dient der Vorname.

Erlaubt die Suche nach einer Bemerkung oder einem Teil in der Bemerkung.

Schreibt Adressenaufkleber

Schreibt Adressenlisten im Taschenkalender- format und listet auf dem Bildschirm die Records auf.

Löscht die Personaldaten einer Person.

Sucht nach gewünschten Datensätzen

Bild 3: Struktur der Datenbank

Feld Name Bezeichnung Type Feldbreite L FAM Familienname C 15 2 VOR Vorname C 14 3 PLZ Postleitzahl C 4 4 ORT Wohnort C 15 5 STR Straße C 25 6 GEBD Geburtsdatum C 8 7 BEM Bemerkung C 8 TNRP Privattelefonnr. C 6 9 VWP Vorwahl Privat C 6

10 VWAL Auslandsvorwahl C 6

43

immer verfügbar hat in Form einer Hartko- pie. Verfugbar heiBt, immer und Uberall greifbar. Dieser Forderung kommt das Programm in besonderer Weise nach. Der Ausdruck erfolgt nämlich im Taschenka- lenderformat; auf einer Größe von 8 cm x 14,5 cm bekommt man einen Ausdruck, den man in gebundener Form in jeden handelsüblichen Taschenkalender ein- schieben kann. Zu diesem Zweck schnei- det man sich einzelne Blätter von der Grö- Be 16 cm x 14,5 cm, die man in der Mitte faltet und beidseitig bedrucken läßt. Die Papierende-Erkennung des