Skip to main content

peeker 8 1985

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

Showing the first 100000 of 296669 characters.

mp.ls