HLBLPLBL<LLL}lhd`,($ P6.4RNE$%A$% 0"$)$$H hLW , `e$$%`  R@<1   *  B.`GH`@1`=  LBCDCH hC DD CDL"LLY  $%8CC$$% AA@1@@@-;@,2k+@%@)-@ }@5AGA YAkA4s-@@0(@ BLUE SOFTWARE }B-@@W(@MAGAZINk-@@Po s 6-@A 8h-@@#A }5-@@L(@ praesents`-@@Pd h :-@A <j-@@# }A5-@@N(@ b-@@Pf j >-@A @f-@@ }#A5-@@J(@é^-@@Pb f Bl -@6@,A }8A DAPAd-@@0h l F-@A U(>:A%,Z +\ }'( ('( ϭ^J(/($Bitte gebe den jeweiligen BuchstabenJ(an und druecke RETURN!`A(*(A.T }ext ATARI (Anwenderprogramm)A(B.Monopoly (Spiel)b;)(!C.Soundeffekte Vol.II (Sound-und ;( Grafikdemo)d""(D.Sound }beispiele(3 Stueck)n#( ( (#(Bitte waehlen sie!sx 4A A 4B A 4C%D:BASD }EMO3.BAS 4D A A9(>:A%,9($ LEGE DIE ERSTE SEITE DES BSM EIN""( UND DRUECKE } RETURN! A0 A((( DIE ERSTE SEITE BITTE EINLEGEN!! A ,7(>:A%,7(" LOADING S }OUNDBEISPIELE (3 STUECK)@%D:BASDEMO4.BAS9(>:A%,9($ LEGE DIE ERSTE SEITE DES BSM EIN""( UND DRU }ECKE RETURN! A0 AP((( DIE ERSTE SEITE BITTE EINLEGEN!! A ((>:A%,(( LOADI }NG TEXT-ATARI% D:TEXTAT.BASV(>:A%,7(" LEGE DIE ERSTE SEITE DES BSM EINV( UND DRUECKE RETURN! }A0  AP''(BITTE DIE ERSTE SEITE EINLEGEN! A&.(>:A%,.(LOADING MONOPOLY DEUTSCH!#} dCF:A,"@"*Ad@0DC%D:BASKURS2.ABSx A@A$}Ad@A@@D:BASKURS2.BASC +A1@@dCB7t@d$}0@@@0@@@0@@@! A!-A $})@(>:, ?F:A,(<(LADE PROGRAMM NOCH EINMAL!!!?=@ BUU*A$}d@=%D:BASKURS3.BASl +@-@@8(@ ATARI-BASICJ-@l(@tips $}fuer einsteigerf-@PAP@%8-%A6@^2@@&'@b f  -$}@6?Ps2@P@;2@A@W2@AP@s2@A$}@##AP:AV$H:,,"##AP:AV$H:,,, 670@@70@$}@$D:BASKURS1.BAS"##AP:AV$H:,,, 670@@70@$2 Hallo ATARI-User! Um die Programme dieser Cassette zu lesen, brau(}chst Du nur die Leertaste zu druecken. Notiere Dir immer die (}Stellung des Bandzaehlwerks, damit Du bei ERROR 143nicht ganz von vorn anfangen musst. Du kannst dann auch einzelne Prog( }rammenachlesen. Nur die naechsten 3 Files haengen voneinander ab. Sollte ein Programm absolut nicht laden,(!} schicke mir die Cassette zu- rueck, damit ich den Fehler beseitigenkann. ("} File 1 wird bereits mit CLOAD geladen.Starte mit RUN! (#} 04.01.1989 Thomas Grahn Thaelmann Str.23 Bad Duerrenberg ($} 4203 ahn Thaelmann Str.23 Bad Duerrenberg (%  "GESPAC;F:A,"@"*Ad@-4;% D:RUN.ABS ,&}A"A'+""@@S( A2""@@K<-A,'}6-ApF Adn ԛxAdAUAA@d),(}@$ ś @2A$0@@@0@@@,)}0@@@'@@d'B7t@d$(TIPS ZUM DATENRECORDER(,*}^( (3(%Mit dem Datenrecorder kannst Du Deine^(&BASIC-Programme und Dateien speichern.T*(,+}"Ganz einfach ist das Speichern derT(%Programme. Dafuer stehen Dir drei Be-(fehle zur Verfuegung:$%(%(CSAVE ,,}SAVE'C:' LIST'C:'.9(/($Die entsprechenden Befehle zum Laden9(sind:8&(&(CLOAD LOAD'C:' ENTER'C:'BT(T(IE,-}in mit SAVE'C' gespeichertes programmkannst Du auch mit RUN'C' laden. EsL++(#startet dann nach dem Laden selbst.V `,.}1( (1(#Unterschiede zwischen den Befehlen:jW(-("Fuer die meisten Deiner BASIC-Pro-W(%gramme wirst Du CSAVE/CLOAD b,/}enutzen.tG+(#Dieser Befehl ist speziell fuer denG(Datenrecorder geeignet.~SS(KNach Eingabe von CSAVE ertoenen zwei ,0}Kontrolltoene. Damit fordert Dich derQ+(#Computer auf, die Tasten RECORD undQ(!PLAY am Recorder zu druecken. BeiO((,1} CLOAD ein Kontrollton fuer PLAY.O("Dann musst Du irgendeine Taste derWW(OTastatur druecken (ausser BREAK). Erst je,2}tzt laeuft der Cassettenmotor an.OO(GEs folgt ein 20 Sekunden langer Piep- ton. Der wird beim Laden wichtig.O*("In d,3}ieser Zeit werden Cassette undO( Computer aufeinander abgestimmt.SS(KDeshalb musst Du am Cassettenanfang darauf achte,4}n, dass das Vorband nichtBB(:zu lang ist. 10 Sekunden braucht der Computer mindestens! P(P(EDie Daten werden,5} in Bloecken von 128 Bytes uebertragen. Zwischen den'!(Bloecken ist keine Pause.$('(&(&(SAVE'C:' LOAD'C:' RU,6}N'C:'e(T(IDas ist die allgemeine Form der Spei- cherung. Der Computer unterscheidete( die Geraete:8( C: - Casset,7}te&( P: - Drucker8( K: - Tastatur '(S: - Bildschirm'( E: - Editorf(f([E: ist ein Programm, dass Eingaben von,8}der Tastatur nimmt und auf dem Bild- schirm ausgibt. (V(V(KDiskettenstationen (D:) sind fuer den Computer eigentl,9}ich unbekannte Gerae-2QQ(Ite. Sie melden sich beim Einschalten (Booten) des System an, und liefern<RR(Jdie zu ihrem Be,:}treiben notwendigen Programme mit (Diskettenbetriebssys-FQQ(Item). Programme werden auf D: mit ei- nem Programmnamen ge,;}speichert ( z.BP(SAVE'D:NAME' ).Zk(k(`(Ich muss in diesem Programm das Zei- chen ' verwenden, gemeint ist das ,<}Anfuehrungszeichen.)d nX(X(LDer Unterschied zwischen CSAVE und SAVE'C' besteht im wesentlichen darin,xQQ(Ida,=}ss jetzt zwischen den Bloecken eine Pause ist, in der der CassetenmotorLL(Dkurz anhaelt. Das hat folgenden Zweck:Die ande,>}ren Geraete (D,P) sindQQ(I'intelligente' Geraete. Wird z.B. ein Programm auf einer Diskette gespei-SS(Kchert, schreib,?}t die Station mit VERIFY, das heisst: sie liest den ge-QQ(Ischriebenen Block gleich wieder ein. Erst wenn er okay ,@}ist, verlangt sieSS(Kvom Computer den naechsten Block. Bei der einfachen Form des SpeichernsPP(Hauf C ist das nat,A}uerlich nicht moeg- lich. Die Cassette muesste dann jaPP(Hein Stueck zurueckgespult werden, um den Block erneut zu lese,B}n. Uebrig-Q*("geblieben ist aber die kurze PauseQ("zum Ueberpruefen, in der der MotorRR(Jangehalten wird. Tritt bei,C}m Laden von C: ein Fehler auf, muss Du das ganze(Programm neu laden. U(U(JDer SAVE'C'-Befehl dauert etwa ,D}3x so-lange wie CSAVE, und ist nach meiner_Y(QMeinung nur geeignet, wenn das Pro- gramm mit RUN'C' eingeladen werden ,E} soll.\(_( (LIST'C' ENTER'C'O()(Wenn Du den Befehl LIST gibst,O(!erscheint Dein Programm ueber den,F}"d+(#Editor (E:) auf dem Bildschirm. Beid(4LIST'C' wird es genau so an den Recor-der abgegeben.,Q'(Dazu musst Du fol,G}gendes wissen:Q(%So wie Du Dein Programm auf dem Bild-6SS(Kschirm siehst, ist es im Computer nicht gespeichert. Der ,H}Computer spei-@SS(Kchert folgendermassen: Er legt sich eine Tabelle mit Deinen Variablen an.JLL(DIm Programm selbst v,I}erwendet er an Stelle des Variablennamens einTcc([Token (Zeichen) als Ein-Byte-Wert. Ge-nauso ist es mit den Befehlen (,J}GOTO, POSITION usw.).^RR(JAuch da gibt es eine Tabelle. Im Pro- gramm steht immer ein Ein-Byte-Wert.h rW(-("Wen,K}n Du einen neuen VariablennamenW(%verwendest, wird er in die Variablen-|SS(Ktabelle eingetragen und im Programm das Ze,L}ichen verwendet. Das spart sehrUU(Lviel Speicherplatz. Nur bei LIST wird alles wieder zurueckgerechnet und auf-PP(Hg,M}elistet. Bei CSAVE und SAVE'C' ueber-traegt der Computer die Variablen-PP(Htabelle und die Kurzform. Und das wol-len wir ,N}jetzt einmal ausprobieren.QQ(IWir uebertagen das Programm aber nichtauf Cassette, sondern gleich an den30((Bildschirm,O} (S). Wir sind jetzt in Zei-le3( A@ SAA@ ( ( ( A(Jetzt folgt de,P}r Befehl A  S ( ( ( A& 0PP(HDer Befehl LIST'C' ist fuer das Spei- chern eine,Q}s ganzen Programmes kaum:QQ(Igeeignet. Er hat aber einen wesent- lichen Vorteil. Mit LIST'C',100,500DSS(Kkannst Du au,R}ch Teile Deines BASIC- Programmes ausladen - hier die ZeilenNRR(J100 bis 500. CSAVE und SAVE speichern immer das ganze ,S}Programm. Beim LadenXSS(Kmit CLOAD und LOAD wird das Programm im Speicher geloescht (CLOAD und LOADb__(Wenthalten den ,T}Befehl NEW). ENTER'C' dagegen loescht das Programm im Spei- cher nicht.lQQ(IDu kannnst also mit LIST und ENTER aus al,U}ten bewaehrten ProgrammteilenvHH(@ein neues Programm zusammensetzen. Mit LIST'C':NEW:ENTER'C'QQ(Ikannst Du aus de,V}r Variablentabelle Variablennamen entfernen, die Du imYY(QProgramm gar nicht mehr verwendest oder die Du versehenli,W}ch eingegeben hast. V(V(KDu kannst alle Befehle auch aus einem Programm heraus verwenden, obwohl dasCC(;eig,X}entlich beim Arbeiten mit Cassette kaum Vorteile bringt._)(!Bei der naechsten Betaetigung vonR($SPACE wird der 2.Teil v,Y}on Disk nach-_(geladen!--(%Das programm startet dann von selbst! %D:BASKURS4.BASD:BASKURS3.BAS v,{AF:A,"@"*Ad@1D:A% D:ENTER.ABS . (}@@.Ad@0[} ""Dieses Programm ist ein Bei-""spiel fuer den Befehl RUN"C"##Das Programm startet nach demLaden sofort sel0\}bst.##Das Programm wird aufgelistet$$und mit dem Befehl in Zeile 24 D:BSP.ABS!!Programmzeilen nachgeladen.0]}!!Die neuen Zeilen werden vom$$BASIC und in das alte Programm ##eingefuegt. Bei gleichen Zei-"!!lennummern werd0^}en die alten$##Zeilen ueberschrieben. Es er-&##folgt eine Pruefung auf rich-($$tige Syntax genau wie bei Ein-*g0_}abe ueber die Tastatur., Das siehst Du in der Zeile.99D:BASKURS4.BAS$tige Syntax genau wie bei Ein-*g0V  "0 F GESPAC@F:A,"@"*Ad@-4@%D:VARIABLE.ABS 4a}A"A'+""@@S( A2""@@K<-4b}A6-ApF Adn ԛxAdAUAA@d4c})@$ ś @2A$0@@@0@@@4d}0@@@'@@d'B7t@d$TT(LVon Bits und Bytes, Hex4e}a- und Dezimal --(%Die Begriffe Bit und Byte sollten DirCC(;bekannt sein, wenn D4f}u einen Computer programmieren willst.!(!(Soviel zur Erinnerung:X(X(LEin Bit (Binaerzahl) ist die kleinste Info4g}rmationseinheit in einem Computer.$**("Es kann 2 Werte annehmen, 0 und 1..V(V(KEin Byte besteht aus 8 Bit und kann 4h} 256 Werte annehmen (2*2*2*2*2*2*2*2),8%%(und zwar die Werte 0 bis 255.B LV(V(KFuer das hexadezimale Zahlensyst4i}em fasst man immer 4 Bits zusammen,dabeiV( entspricht:((`&#(Bits dezimal hexadezimal &(j(0000 0 4j} 0t(0001 1 1~(0010 2 2(0011 3 3(0100 4 4(0101 4k} 5 5(0110 6 6(0111 7 7(1000 8 8(1001 9 9(14l}010 10 A(1011 11 B(1100 12 C(1101 13 D(1110 14 E4m}(1111 15 F  V(V(KAuch groessere Zahlen lassen sich da- mit darstellen, genau wie im Dezimal-:7(/sy4n}stem die Zehner, Hunderter usw., so bedeutet::((""( FF = (15*16)+(15) = 2552P(P(EUm Zahlen bis 65535 darzustellen4o} be- noetigt man 16 Bit (2 Byte) und<(schreibt FFFF.F2(/($(15*16^3)+(15*16^2)+(15*16)+15=655352(PFC(;Exakt so4p}viel Byte hat ein ATARI 800 (Byte 0 mitgezaehlt).F(Z dRR(JZum Programmieren in BASIC brauchst Dunicht unbedingt Ke4q}nntnisse ueber dasnRR(JHexa-System. BASIC macht alle Ein- undAusgaben im gewohnten Dezimalsystem.xPP(HDezimal rechnen t4r}ut der Computer aber nicht. Deshalb wundere Dich nicht,nn(fwenn solche 'krummen' Zahlen wie 15,(16),255,(256),32767,4s}65535 oft einebesondere Bedeutung haben.A>(6Ich komme gelegentlich auf dieses Kapitel zurueck.A( ,,($Das n4t}aechste programmteil wird auto-D(,(!matisch nach dem naechsten SPACE /(@( nachgeladen.D %D:BASKURS6.BAS4u}D:BASKURS5.BASl wird auto-D(,(!matisch nach dem naechsten SPACE /(@( nachgeladen.D %D:BASKURS6.BAS4NOGESPACTINPURADIUVORHEANACHHESPEICHERBEDARANFANENDBYTNOTTHEAAp&8w}@ 8x};F:A,"@"*Ad@-4;% D:ASC.ABS A"A'+""@8y}@S( A2""@@K<-A6-Ap>;@8,F Ad8z}n ԛxAdAUAA@d)@$ ś8{} @2A$0@@@0@@@0@@@8|}AR'@@d'B7t@d$ " SS(KNumerische und Zeichenkettenvariable 8}} &(&(Warum diese Unterscheidung?QQ(ISie ergibt sich aus dem letzten Kapi- tel. BASIC8~} stellt eine Zahl auf demSS(KBildschirm (oder jedem anderen Geraet)dezimal dar, aber im Speicher ist sieHH(@in einen 8}6-Byte-Wert umgewandelt. Da-mit lassen sich Zahlen bisJJ(B9.99999999*10^97 berechnen, und zwar mit 9-stelliger Genauigk8}eit.$RR(JZahlen groesser 1 Milliarde und klei- ner 0.01 werden als Exponentialfunk-.RR(Jtion dargestellt. Es wird Dir a8}lso nicht gelingen zu 1 Milliarde eine 18QQ(Izu addieren. ATARI-BASIC kennt nur diesen Zahlentyp. Ganze Zahlen oder8}BAA(9doppeltgenaue Zahlen (meist 12-stel- lig) gibt es nicht.D LT(T(IZahlen koennen Konstante und Variable sein.8} Es gibt auch ein- und zweidi-V++(#mensionale Zahlenfelder. Der Befehl`(A(jMM(Estellt eine 20*50-Matrix 8}bereit. Es gibt also auch ein Feld A(0,0).t##(Dimensionieren ist Pflicht!~QQ(IEine automatische Dimensionierung 8}nicht dimensionierter Felder auf 10FF(>wie bei anderen BASIC-Interpretern gibt es bei ATARI nicht.EB(:Denke immer 8}an den enormen Speicherbe-darf grosser Felder.E( AA 6-I:@,9@<@I,68}-I:@, 6-&)(&(Speicherbedarf:  Bytes)(OO(GBeim Starten eines Programms mit RUN werden alle Var8}iablen =0 gesetzt.](](RBeim Starten mit GOTO Zeilennummer behalten die Variablen ihre aktuellen Werte.X(X(LAls8} Variablennamen akzeptiert BASIC Grossbuchstaben und Ziffern. An ersterUU(LStelle muss ein Grossbuchstabe stehen.Die L8}aenge des Variablennamens ist nurKK(Cdurch die Laenge der Eingabezeile be- grenzt, das sind 114 Zeichen.  T(T(8}IATARI-BASIC unterscheidet die Namen vom ersten bis zum letzten Zeichen.UU(LDas ist ein entscheidender Vorteil, den 8}Du nutzen solltest. Also nicht Al-AA(9lerweltsnamen wie U,X,Y,RA - sondern RADIUS, UMFANG usw.(UU(LDie Variablen wer8}den dauerhaft in ei- ner Tabelle eingetragen und benoetigen2QQ(Inur einmal Speicherplatz. BASIC verwendet intern die Numm8}er des Namens in<SS(Kder Tabelle (Token=Zeichen). Damit istdie Anzahl der Variablennamen auf 128FRR(Jbegrenzt. Wie Du n8}icht mehr benutzte oder versehentlich eingetippte NamenPTT(Laus der Tabelle bekommst, siehe Kapi- tel Laden und Speichern8} von ProgrammenZRR(JMit folgendem Programm zeige ich Dir die Namen, die sich jetzt in der Ta-d(belle befinden.f8} x(AA`{ ( %%6-F:A0,%F:A1,$AV%%-F:A2,%F:A3,$AV - 8} 6-F:, (>:,!A'(  U(U(JEin Zahlenfeld gilt als eine Variable.Es gibt praktisch keine rese8}rviertenOO(GWoerter, die Du nicht als Variablen- namen verwenden darfst. Nimmst DuRR(JBASIC-Schluesselworte (PRINT,E8}ND usw.)als Variablennamen ist aber eine ge-++(#wisse Vorsicht geboten, siehe Zeile A S(S(HHier ist der B8}efehl END enthalten. Deshalb habe ich die WertzuweisungUU(Lmit LET ENDE= ... gemacht. Um Dir zu erklaeren warum das f8}unktioniert, ver-``(Xlassen wir mal kurz die Variablen und beschaeftigen uns mit der Eingabe ei- BASIC-Zeile. V8}(V(KDu hast sicher schon bemerkt, dass ATARI-Basic eine ziemlich liederlicheUU(LSchreibweise ohne Ruecksicht auf Le8}er-zeichen zulaesst. Fuer die meisten Be---(%fehle gibt es auch noch Abkuerzungen."\\(TAngenommen, Du hast folgende Z8}eile eingegeben und die RETURN-Taste ge- drueckt.,"6.900INPUTRADIUS(("(6YY(QDer Computer beginnt diese Ze8}ile von links Zeichen fuer Zeichen zu untersu-chen.8 @m( (9( ( Eine Ziffer!j(EDer Computer erkennt, es soll8} eine Zeilennummer eingegeben werden.m(B J*-@@&(7@<,* TU(U(JI - Ein Buchstabe kann8} in einer Zei- lennummer nicht vorkommen. Jetzt er-^UU(Lfolgt die Umwandlung der Zeilennummer in die interne 2-Byte-Form.8} Laesst sieh99(1sich nicht umwandeln (z.B.>32767), er-folgt ERRORrN(K(@Als naechstes erwartet BASIC einen Be-fehl (o8}der eine Variable).N(t |*-@@&(7@<,* G(D(9INPUT ist erkannt. Nach INPUT muss ei-ne Va8}riable folgen.G( *-@ @&(7@<,* R(R(GDas Ende eines Variablennamens wird dadurch er8}kannt, dass ein ZeichenSS(Kfolgt, dass in einem Variablennamen nicht vorkommen darf. Hier ist es EOL--(%(Ende der Z8}eile=Druecken von RETURN).cc([Zugelassen waeren ausserdem Komma, Doppelpunkt und Dollarzeichen (Ende eines Strings).8}DD(F:A,"@"<}*Ad@-4>% D:STRING.ABS A"A'+( A2""@@<}K<-A6-Ap>;@8,;A0,F Adn ԛxAdAU<}AA@d)@$ ś @2A$0@<}@@0@@@0@@@AR'@@d'B7<}t@d$ (oder ? CHR(27); (}oder ? CHR$(125); (oder ? CHR$(28); (oder ? C<}HR$(29); (oder ? CHR$(30); (oder ? CHR$(31); (~oder ? CHR$(126); (oder ? CHR$(254)<}; (oder ? CHR$(255); (oder ? CHR$(157); (oder ? CHR$(156); (oder ? CHR$(127);<} (oder ? CHR$(158); (oder ? CHR$(159); (oder ? CHR$(253);(>:AU, (oder ? CH<}R$(27);=!(}Zeichenketten (Strings)=( S(S(HWaehrend der Computer alle Zahlen, Be-fehle un<}d Variable in eine interneSS(KForm umwandelt, ruehrt er Zeichenket- ten nicht an. Hier kannst Du mit ver-SS(Kschieden<}en Befehlen manipulieren. Den Anfang und das Ende eines Strings er-ii(akennt der Computer am Anfuehrungszei- chen. Alles <}was dazwischen ist, wird im ASC-Code abgelegt. $$( ($(ASC(TXT$) CHR$(ZAHL).R(R(GDa ein Byte nur Zahlen z<}wischen 0 und 255 aufnehmen kann, muss man sich8PP(Heinigen, welche Zahl welchem Zeichen entspricht. Die Computerherstell<}erBQQ(Iverwenden dafuer den ASC-Code (Ameri- kanischer Fernschreibcode). So ent-LSS(Kspricht die 48 der Ziffer 0, die 6<}5 dem Buchstaben A. Am besten wir spie-V))(!len die 255 Zeichen einmal durch.`#(( Der Befehl (#Aj?(<<}(1wandelt eine Zahl in das entsprechendeZeichen um.?(t ~AA@( "( ((Zeichen Zahl(<}"(-AU ( (>:,(-@    V(V(KVielleicht hast D<}u bemerkt, dass es eigentlich nur 128 Zeichen waren. DerUU(LASCII-Code ist ein 7-Bit-Code. ATARI verwendet das 8.Bit, <}um festzulegen,obif(^dieses Zeichen normal oder invers dar-gestellt werden soll (Vorder- und Hin-grund vertauscht).i( <} AA@(SS(KEs gibt nicht nur druckbare Zeichen, sondern auch Steuerzeichen. Die Zeile( A<}(2PP(Hbewirkt, dass nicht die Steuerfunktionausgefuehrt wird, sondern das ent-<++(#spechende Zeichen dargestellt wird<}.F P( ((Das SteuerzeichenZ A (dII(A Tasten >Control< + >Clear< oder >Shift< + >Cle<}ar<nP(P(Eloescht den Bildschirm und setzt den Cursor in die linke obere Ecke.xSS(KWillst Du, dass die Steuerfunktion<} erst bei der Programmabarbeitung aus-ee(]fuehrt wird, musst Du vorher die>Esc<-Taste druecken. Das gilt fuer alle <}weiteren Zeichen.PP(HDas Zeichen wird dadurch in einen String eingefuegt. Wir werden alle##(Steuerzeichen auspro<}bieren. ++(#}Der Bildschirm wurde geloescht!  A #(#( Tasten >Control< + >-< V(V(KDe<}r Cursor springt eine Zeile nach oben, ohne irgendetwas zu veraendern.A>(6Ist er am oberen Bildrand, erscheint er unt<}en wieder.A(  A #(#( Tasten >Control< + >=< 4(1(& ... springt eine Zeile nach unten ...4(<}  A "#(#( Tasten >Control< + >+< ,4(1(&... springt eine Spalte nach links ...4(6 @ A J<}#(#( Tasten >Control< + >*< T4(1(&... springt eine Spalte nach rechts ..4(^AR h!A`A<}(((!(r-@@|-@A (-@@  -@A<} (-@@  -@A (-@@  -@<}A (-@@   & (}A 0 ( ( Taste >Delete bk sp<:j(j(^<}Das links vom Kursor stehende Zeichen wird geloescht. Am Zeilenanfang bleibtder Cursor stehen.D N-@A<}X (~b-@@ l v  A -(-(" Tasten >Control< + >Delete bk sp<d(d(YDas r<}echts vom Kursor stehende Zeichenwird geloescht. Die folgenden Zeichen ruecken nach. -@@-@<}@S (-@@   ( (A "+(+( Tasten >Shift< + >Delete bk sp<<}U(U(JDie komplette logische Zeile in der der Cursor steht wird geloescht. Die&&(folgenden Zeilen ruecken nach. <} -@@  (*-@@ 4 >-@@ H (R-@@<} \ f-@@p (z-@@    A '('( Tasten >Contro<}l< + >Insert<ii6._Die Zeichen rechts vom Cursor werden weggeschoben. Es wird Platz fuer neue Zeichen geschaffen.(<}(7@a, (-@@` (-@@  -@@` (7<}<, -@@    ( ( ($  A . %(%( Tasten >Shift< + >Insert<8 o(o(dEs wird ei<}ne Zeile ueber dem Cursor eingefuegt. Die Zeilen unter dem Cur- sor werden weggeschoben.B  L -@@V <}(` -@@ j  t -@@~ ( -@@     A $<} (( Taste >Tab< X(X(LWenn Du >Tab< drueckst springt der Cursor immer 8 Zeichen weiter.Mit die- oo(gsem Zeic<}hen lassen sich gut Tabellen darstellen. Der Tab-Abstand kann auch beliebig veraendert werden.   -@@<} ( -@@    (   ( (A & #(#( Taste >Control< + >Tab< P(P(ELoescht d<}ie Tab-Stelle beim Cursor (wenn dort eine vorhanden ist). ..(&Diese Schleife loescht 16 Tab-Stellen. A&A& <} ( -@@2 E (ESprung zur naech- sten Tab und Loeschen<  F A (P !(<}!( Taste >Shift< + >Tab<Z N(N(CAn der Position des Cursors wird eine neue Tab-stelle markiert. Died 44(,Tab-Stellen g<}elten fuer eine logische Zeile.n A&A'`x   ++(#  (HFC Chemie- Er<}furt3:0 ((( BFC Dynamo- Karl-Marx-Stadt5:1 (Aue- Union Berlin2:0 (Jena- Dresden3:4 (Rostock- Mag<}deburg3:0 (Leipzig- Zwickau7:2 !!(Cottbus- Brandenburg3:0   ( ( A 0 !(!( Taste >Control<<} + >2< Q(Q(FDas ist ein 0.25 Sekunden langer Piep-ton. Auch ihn kannst Du in einem SS(KString unterbringen. Er eignet<} sich gut, um einen Nutzer Deines Programms ''(auf Falscheingaben hinzuweisen. A(@A(p  -@<}@" (, -@A 6  @  J A 4T (( Zweimal Taste >Esc<^ i(i(^Das folgende <}Zeichen wird auf dem Bildschirm gedruckt, auch wenn es ein Steuerzeichen ist.h A)@r  | 0(0(%Das Zeichen <}} loescht den Bildschirm ( (  A 2 (( Taste >Return< T(T(IDie RETURN-Taste nimmt eine Sonder- <}stellung bei den Steuerzeichen ein. ::(2Durch sie werden Ein- und Ausgaben ab-geschlossen. dd(\Wenn end of line als Zei<}chen darge- stellt werden soll, verwendet der Com-puter den Cursor   ( (( PP(HEs gibt noch 2 Tastenkombinatione<}n, die aber keinen ASC-Code erzeugen. !(!( Taste >Control< + >3< U(U(JBei der direkten Eingabe von Daten in eine<} Diskettendatei von der Tastatur KG(?wird die Eingabe abgebrochen und EOF erzeugt (Ende der Datei).K  $( ($( Tas<}te >Control< + >1< ^(^(SDie Bildschirmausgabe wird gestoppt. Sehr gut geeignet beim Listen vom Programmen. 22(*Druec<}ke die Leertaste und probiere es aus.  AA@ -@@$(  QQ(IDie Break-Taste unterbric<}ht ein BASIC-Programm. Sie erzeugt kein Zeichen. M((Achtung!(M(2Nicht druecken bei Ein- und Ausgabe- operationen.<}&  0 ?(0(%Lade nun mit SPACE den naechsten pro-?( grammteil!: !(!(Zeichenketten Teil 2 ?  D %D:BASKU<}RS8.BASD:BASKURS7.BAS SPACE den naechsten pro-?( grammteil!: !(!(Zeichenketten Teil 2 ?  D %D:BASKU<klL##GESPACTXTRTTEILZAHLHILFNAMELEERIANZAHFLAZAHVVVVSTELDEZPUNKNDEZSTELADRESSLARECHT@} @}@F:A,"@"*A@}d@-4@%D:CASSETTE.ABS A"A'+""@@E A@} """@@K-A 6-A #;A0,(<<;@8,;@8,;@8,;@@},;@8,-;@,2;@8,7+ 6. 67@8,. +67@,.< Ad"6-@"IL@}=Eingabelaengef6-B:,'h6-i-@&@j 6-$k6-&%@l6-%@n 6-%@}p7<,37<, A r t"@Av$x6.7<,z67<,.7<,~67<,.6-@@}$"6-@"IL=EingabelaengeD 6-$DVektor auf das Ende eines Namens in TXT$G6-&%@@}GVektor auf den An- fang des Namens6.7<,$, ̛-6-@.6.7@<,0A} 6.=:,26-B:,%@4-@B:,67<,4.6-6-8 : 6-%<67&%@<,.>A}A0@"A0B67&<&,..D-&%@F7<,4 67<,.0H J$A}囆 ԛAdAUAA@d)@$ ś A}@2A $0@@@0@@@0@@@ARA}'@@d'B7t@d$ 6-C:,(7@<@, 6-B:,6-&@ (A}7,(7A<A,(7A3<A3,+ 6.*67A,.*+67@,.$(R$A} =  6-A:,(ZAHL= $( }DIM COMU(U(JDie Befehle DIM und COM sind gleich- wertig. Bevor Du A}eine StringvariableC9(1verwendest, muss diese dimensioniert werden. MitC@ES(S(Hsteht ein String mit einer mA}aximalen Laenge von 10 Zeichen bereit. Ver-SS(Ksuchst Du in diesem String einen laen-geren Namen unterzubringen, gehen dA }ieUU(Lrestlichen Zeichen verloren. Ein String kann maximal 32767 Zeichen lang$RR(Jsein. Da auch hier gilt, dass A }eine lo-gische Zeile 3 Bildschirmzeilen ent-.OO(Ghaelt, koennen groessere Strings nichtmit einmal eingegeben werden. Man8A }[[(Sstoppelt sie sich zusammen, indem man einen TEIL$ an das Ende von TXT$ an- haengt.B LUU(LDie DIM ist notwendigA }, weil bei ATARI-BASIC eine Variable immer an der glei-VSS(Kchen Stelle im Speicher steht (eine num. Variable muss nichA }t dim. werden,`6,($weil sie immer 6 Byte lang ist). Mit6A 4j>(;(0laesst sich die Adresse eines Strings berechneA}n.>(t A 8~J(G(Esc< drueckst, sonst die Leertase. "A&}@2A%"@'%CAA Ap67@!,.7@Q,=( (=(/Und so werden drei NA'}amen aus dem Feld entfernt. A&S(S(HDas bedeutet: TXT$ ab Zeichen 21 soll gleich TXT$ ab Zeichen 51 sein, es0A(}>4(,werden also die Zeichen 21 bis 50 ent-fernt.8 ;(>(:-@@D AN(X b l"( A)}("(VAL(R$) STR$(ZAHL)vT(T(IDass Zahlen und Strings 2 grundver- schiedene Sachen sind, ist klar. Es\\(Tist abeA*}r moeglich, mit diesen BefehlenZahlen in Strings um zuwandeln und um-gekehrt.:(6(+VAL(R$) macht aus einem String eine A+} Zahl.:  ( ( (((| km-Stand | Tanken |((| A,}50235 | 20.4 |(| 50465 | 16.2 |(| 50745 | 23.5 |-@@(| | A-} | (RR(JEin Anwender soll in diese Tabelle km-Stand und Benzinverbrauch eintragen.A.} !(Wenn Du das mit!A Re(e(Ymachst, erhaelst Du ERROR 8, weil das Grafikzeichen als Teil der Eingabe an-geseheA/}n wird. "-@@"@*!-@5@#(! 4T(T(ILaesst Du Dir dagegen einen String eA0}ingeben und wandelst ihn um, kommt>JJ(Bkein ERROR, weil die Umwandlung endet,wenn sie nicht moeglich ist.H%A TA A1}`((% A VR \>( (>(0STR$(ZAHL) wandelt eine Zahl in einen String um.fS(S(HDer Computer kuemmert sicA2}h nicht da- rum, dass Zahlen optisch besser zupSS(Kvergleichen sind, wenn sie nach rechtsoder nach dem Dezimalpunkt ausgeA3}rich-zQQ(Itet sind. Wandelst Du die Zahl in ei- nen String um, kann die Ausrichtung&&(ein Unterprogramm uebernehmen.A4}FF3.2,.92,21,2.3,33775,426.06,6900,.05,14.55,123.4567,1.267,365000 A! 4((Ohne Ausrichtung:.A"0A5}A"P1(4( #A!-@@ " (  9(9(.Ausrichtung nach rechts mit 2 Dezimal-stA6}ellen: #A!A#A#P(6-@6-@ -@@ " A$ (. A7} 8  B )( ()(Nachkommastellen mit NullenL #A!V A$A$P(` 6-@6-j -@A8}@t "~ A (     "("(Hier das Unterprogramm: AA0   T(T(A9}IFLAG ist ein Zeichen, ob mit Nullen aufgefuellt werden soll oder nicht. V(V(KDu kannst das Unterprogramm auf eine anA:}dere Cassette listen, wenn Du jetzt ,,($>Esc< drueckst, sonst die Leertaste.  "@2A%` %"@'%A;}CAA0 A%0 (( Noch ein Tip! QQ(IBeachte bei Unterprogrammen die not- wendige DIM, und verwendA<}e nicht die 44(,gleichen Variablennamen im Hauptpro- gramm! -( (-(Das naechste Programm bitte mit( ((SPACE A=}nachladen.2  < %D:BASKURS9.BASD:BASKURS8.BAS! -( (-(Das naechste Programm bitte mit( ((SPACE @>`aa9:GESPACTXTRTTEILZAHLHILFANAMELEERZAHERERZEILZEIBYTEBYTEBYTLAFASESA A E?}@@&f&& &A X7 b7&& @2E@}@F:EA}A,"@"*Ad@-4@%D:COPYTEXT.ABS A"A'""@@EB}E""@@S A """@@K-A 6-A #;AEC},(GG;@8,;@8,;@8,;@,;@8,9A,-;@,2;@8,7+ 6. 67@8ED},. +67@,.< A  6.--(%ENTFAELLT WEIL DATEN NICHT VORHANDEN!@-@EE}@8@&67B:,%@,.0 :@ BUUD AE囆 ԛEF}AdAUAA@d)@$ ś @2A EG}$0@@@0@@@0@@@AR'@@EH}d'B7t@d$ A6-F:A,%%6-F:A,%F:A,$AV-EI}@@"(@'''ACA$(((ERROR  . LAEJ}@AV##(ERROR  j A8A--(ERROR  EK} A6A (ERROR  2 x(ERROR  (}TRAP((SS(KWir komEL}men gleich auf das steinige Feld der Ein- und Ausgabeoperationen.RR(JDa hier wohl die meisten Fehler auf- treten koenEM}nen, muessen wir uns erstQQ(Ieinmal mit dem Befehl TRAP befassen. Beim Programmieren werden Dir immerUU(Lwieder FehlEN}er passieren. Mal fuehrt GOTO zu einer nicht existierenden Zei-]](Ulennummer, mal berechnest Du einen String falschEO}, Du dividierst durch 0, usw. usw. nT(LTritt so ein Fehler auf, bricht BASIC das Programm ab und hilft Dir z.b. mitn(EREP}ROR- 5 IN LINE 300 ( (den Fehler zu finden. PP(HDie eben beschriebenen Fehler sind vermeidbare Fehler, die Du aEQ}us dem*""(Programm beseitigen musst.4 >V(V(KEs gibt aber auch unvermeidbare Feh- ler, z.B. wenn ein Anwender eER}ine fal-H66(.sche Eingabe macht. Beim Datenrecorderwird DirR)()(ERROR- 143 (Pruefsummenfehler)\'('(sicher nichES}t unbekannt sein.f pU(U(JDieses Programm verlangt von Dir gleich die Eingabe einer Zahl. GibstzQQ(IDu ein uET}nzulaessiges Zeichen ein, wirdder TRAP-Befehl aktiv. TRAP (Falle)cc([bedeutet, dass das Programm bei einem Fehler zu der EU}Zeile springt, die hin- ter TRAP steht.A" A"P](](RDas Programm laeuft also solange im Kreise, bis Du wEV}irklich eine Zahl ein-gibst.( ( (((( A" -@@  (Gib (k)eine Zahl ein: EW} BUUq(q(fTRAP wirkt nur einmal. Dadurch, dass der Befehl aktiv wird, ist er auch gleichzeitig abgeschaltet.EX}QQ(IDu kannst TRAP auch abschalten, indem Du eine Zeilennummer zwischen 32768;;(3und 65535 dahinter schreibst (nicht EY}groesser!!!).A" A"` R(R(GVergiss das nie, wenn Du heil durch die Gefahrenstelle gekommen bist. UU(LTEZ}ritt sonst spaeter mal ein Fehler auf, macht das Programm ploetzlich un- FF(>erwartete Spruenge, und TRAP ist fuer DicE[}h zur Falle geworden.$  . X(X(LDer Computer speichert die Fehlernum- mer in PEEK(195) und die dazugehoerige8 11()ZE\}eilennr. in PEEK(186)+PEEK(187)*256 ab.B UU(LFuer dieses Programm brauche ich einenkompletten Abschnitt, der sich nur mitE]}L %%(der Fehlerbehandlung befasst.V AA0` M(M(BTRAP neu einschalten und Fehlernummer und Fehlerzeile feE^}ststellen.j  AA@t <(<(1Untere Zeile freimachen fuer die Feh- lermeldung.~ )()(Es folgt die FehlerE_}behandlung.  APA0 " -@@$("  #-@@(#  /(/($ E`}  ##(Ein- und Ausgabeoperationen ##(  S(S(HEine und AusgabenEa} werden ueber E/A-Kanaele durchgefuehrt (IOCBs). NN(FEs gibt 8 Kanaele (0 bis 7). Kanal #0 ist dem Editor (E:) vorbEb}ehalten. XX(PE nimmt Daten von der Tastatur (K:) und gibt sie an den Bildschirm (S:) aus. SS(KCLOAD, CSAVE, LOAD usEc}w. gehen ueber Kanal #7. Das bedeutet, wenn Du Kanal GG(?#7 benutzt, koennen diese Befehle nicht ausgefuehrt werden.Ed} hh(`GRAPHICS an S: gehen ueber Kanal #6. Die Kanaele #1 bis #5 kannst Du unein-geschraenkt nutzten. T(T(IIch werde Ee}jetzt hauptsaechlich die Ar-beit mit C: (Cassette) beschreiben. 44(,Das Prinzip gilt aber fuer alle Ge- raete.   Ef}8(8(-Zunaechst muss ein Kanal geoeffnet werden.( @%2 *(*(Die 1. Zahl ist die Kanalnummer< =(:(/Die 2.Eg} Zahl ist die Betriebsart, es bedeuten:=(F ( 4 - LesenP ,,($ 6 - Lesen der Directory (Diskette)Z $$( 8 - SchrEq}`***********` BLUE-SOFT ` MAGAZIN ` 1/90 ` (c)1990 by` Blue Soft-` ware `***********#DEMOMEN2BASb BASKURS1BASbBASKURS2BASb5%BASKURS3BASbZBASKURS4BASb`BASKURS5BASb;vBASKURS6BASbEBASKURS7BASbHBASKURS8BASbu>BASKURS9BASb"BASKUR10BASb(BASKUR11BASbsBASKUR12BAS#BASKUR13BAS#dBASKUR14BAS#0iBASKUR15BAS#BSP ABS#PRIMZAHLDAT#ZBASDEMO3BAS#DEMOMENUBASeiben (neue Datei)d OO(G 9 - Schreiben (an das Ende einer be- stehenden Datei (Diskette))n PP(H 12 - Lesen und SchrEr}eiben in einer bestehenden Datei (Diskette)x SS(K 13 - Lesen und Schreiben vom Bild- schirm (Editor - RETUEs}RN braucht **(" nicht mehr gedrueckt werden) ( (  M(M(BDie 3. Zahl ist die vom Geraet ab- haengig. SiEt}e ist meistens 0. H(H(=In Anfuehrungszeichen folgt der Kenn- buchstabe des Geraetes. @% (( Das bedeutetEu}: =(=(2Oeffne kanal 3 zum Lesen (4) der Tastatur (K) d(d(YWir werden jetzt einmal Daten an den C: abgeben. LeEv}ge dazu bitte eine leereCassette ein. ? A((?(*Es wird Kanal 4 zum Schreiben geoeff- net.   A(A) Ew} S(S(HEs folgt eine Besonderheit des C:. Nach dem OPEN-Befehl ertoenen zwei RR(JKontrolltoene (fuer RECORD+PLAYEx}). NachDruecken irgendeiner Taste kommt der SS(K20 sec lange Piepton und dann muessen mindestens 128 Byte Daten uebertrageEy}n PP(Hwerden. Erst dann kann der C:Motor an-gehalten werden. Da wir noch keine FF(>Daten haben, schreiben wir einfach 1Ez}6 mal das Wort 'Primzahl'."  , A)6 t(t(iBeim PRINT-Befehl muessen wir jetzt die Kanalnr. angeben (PRINT ohE{}ne Num- mer bedeutet immer Kanal #0).8 &  (#(PROGRAMM LAEDT NACH!&(@ //@@D:PRIMZAHL.DATJ E|}-@@T (@Primzahl^ (Primzahlh  r JJ6-P:+F:@,$AV#@%F:@,$AV,E}}'@P'@`,| % @@6-A% A) 6-A  10 Minuten= 3000 14 Minuten= 4000 18 MinE~}uten= 5000 -(-(@@@ %-@@%6- "A A1  "E}A A1P -@M:,@ 6-'  "P:,6-6-@   %"(%(@E}   @ 0@02& A10 Y( (Y(KAuf dem S: erscheinen diE}e Primzahlen, sobald sie berechnet sind. An C: wer-: ;8(0den sie immer in Bloecken von 128 Byteabgegeben.;(D $N `( (E}`(RDas Programm berechnet die Primzahlen bis 2000. Das dauert noch etwa 5 min.X MM(EKoche inzwischen mal einen KafE}fee. Du sitzt jetzt schon mindestensb fc(P:+F:@,$AV#@%F:@,$AV,'@P'@`, Minuten voE}r der Glotze.f(l $v o( (e(WWenn die Datenausgabe bendet ist, musSdie Datei mit diesem Befehl geschlos- sen werden.oE}A0   T(T(IWeil die Datenuebertragung in Bloeckenvon 128 Byte geschieht, muessen die JJ(BDaten zwischengespE}eichert werden - im sogenannten Cassettenbuffer. %((Kommt der Befehl%A0 V(V(Kund es sind keine 128 ZeichenE} im Buf- fer, wird der letzte Block mit Nullen * (aufgefuellt. Vergisst du*A0 Q(Q(Fgehen Dir die letzten DateE}n verloren, weil sie noch im Buffer stecken. JJ(BAusserdem ist auch EOF (Ende der Da- tei) noch nicht geschrieben. YY(E}QDie Befehle END und RUN schliessen dieKanaele, enthalten also den CLOSE-Be- fehl.   K(A(6Wir werden jetzt unsere PE}rimzahlen wieder einlesen.KA4 4(0(%Kanal 4 wird zum Lesen (4) geoeffnet.4  A3A40 9(5(*DaE}s Wort Primzahl wird 16 mal eingele-sen.9  U(U(JDa wir nicht wissen, wieviel Primzah- len geschrieben wurden, lesen wiE}r in JJ(Beiner Endlosschleife. Die Fehlermel- dung fangen wir mit TRAP ab. 3A3A4'A36-E}* <'"A6A4<ɯϠ4 %(%(Lade die Datei 'Primzahl'!>  A6-A3pE} H //@@D:PRIMZAHL.DATR -@@\ @f  p 6-z @E} 6-%@ 68,- A4P @ BUU -@ (8,   [( ([(LBeE}i dem Programm 'Primzahl' sieht man gut, wie man das Ergebnis langwieriger UU(LBerechnungen sichern kann. Doch unser ProgE}ramm hat noch einige Haken. Es ist RR(Jzwar durch TRAP gegen Fehlermeldungen geschuetzt, aber noch nicht perfekt. --(%E}Der Haken ist das Einlesen mit INPUT. 33(+Wir werden die Daten jetzt an S: ausgeben.   @A6A60E} -@@0$(@8,. 8 BUU(LBei Ausgabe ueber S: werden die Steu- erbefehle als ZE}eichen dargestellt. DieLUU(Lweissen Quadrate sind die EOL-Zeichen.Beim Schreiben auf einem Geraet werdenV]S(Kauch wieE}der Bytes, also Zahlen zwi- schen 0 und 255 abgegeben. Der Befehl]A)`C(C(8schreibt nach dem Wort 'Primzahl' dasE} EOL-Zeichen (155).j t&((Beim Einlesen mit&A4 ~T(T(Iwird nach diesen Zeichen gesucht. AlleBytes zwischE}en 2 EOL-Zeichen werdenQQ(Ider Variablen zugeordnet. Der Computerkann mit einem INPUT max. 256 BytesQQ(Iaufnehmen. HaE}ettest Du dem Lesepro- gramm eine falsche Datei untergeju-OO(Gbelt (z.B ein Computerspiel),koennte es sein, dass die DE}atei erst nachOO(GTausenden von Zeichen EOL enthaelt (oder vielleicht auch gar nicht).ff(^Die Fehlermeldung (ERRORE} 137 - Record zu lang) kommt aber erst mit dem EOL, also nach Minuten.QQ(IDas sichere Lesen von C:Dateien muss gut vorbeE}reitet werden. Dazu eignenFF(>sich die Befehle PUT und GET. Damit wird 1 Byte uebertragen.# A8A80# E}A8P""@@C-@A(*@@ @ ((((Der 1. BE}lock ist geschrieben. L(0(%Das Leseprogramm koennte so aussehen:BA8A9`L A9(""@@E}C2)@<)@F-@A&P)@Z d0@)@-(FalE}sche Datei!0nxProgrammfortsetzung@ Y( (Y(KWir muessen zwar den 1.Block komplett einleseE}n, aber anhand der ersten bei-ii(aden Byte koennen wir die Datei identi-fizieren (so werden auch Programmda- teien identE}ifiziert). H(H(=Um laengere Strings zu lesen, gibt es mehrere Moeglichkeiten.7((Schreibprogramm:-A@@E}A@P7 A@`(@B:,(@ "(( Leseprogramm:" AA0- 6. 67&@E},. -67@,.-@)@67<,.>:, "A@A@,W(W(LTXT$ wird auf dieE} notwendige Laenge gebracht und mit Leerzeichen gefuellt.6 A@AA @U(Q(FDer TXT$ wird BYTE fuer BYTE gE}egen dieDaten vom Recorder ausgetauscht.U J[([(PBei einem TXT$ mit der max. Laenge von32767 Bytes dauert das etwa 30 ME}inu- ten.TJ@(8Der C: kann auch mit diesem Befehl an-gesprochen werden.JAD0^V(V(KIst die 3.Zahl=128 werden die E}Daten indem schnelleren Modus (wie bei CLOAD,hfb(ZCSAVE) abgegeben. Der C: kann jetzt zwischen den Bloecken nicht mehr aE}nge-halten werden.f rA8A9@|V(V(KSolche Berechnungen waehrend des Le- sens (Schreibens) sind nun aber nE}ichtOO(Gmehr moeglich. Auch das Lesen langer Strings bereitet Schwierigkeiten. A@AA A(A(6Diese E}FOR NEXT-Schleife ist jetzt ein-fach zu langsam. 6($(Das neue Schreibprogramm:6ADAD07(7(,Alle E}Berechnungen werden vor OPEN ge- macht. ADADi(i(^Der TXT$ wird in handliche Stuecke zerteilt. ZAE}HL ist ein Vektor auf das letzte Teilstueck. 6( ($(Das neue Leseprogramm:6AEAE1(1(&TXT$ wirdE} auf die Laenge 0 festgelegt. AEAEpT(T(IIn einer Schleife werden die HILF$ (Laenge 38) gelesen unE}d zu TXT$ zu-RR(Jsammengefuegt. Die Schleife braucht nicht mehr so oft durchlaufen zuwer-(den. Die Zeit reicht.E} & AH@0'  A6-AC' A: 6-B:,D6-&@7N//@@A(D:PRIE}MZAHL.DATX(@b-@@8l6.7<%@7,v(@ @ 6.//E}@@A(D:PRIMZAHL.DAT@-@@8@67B:,%@,.E} @)6-@#$@8)AR@6-B:,' AGp6-6@  ""@:+, AFE}p" AG""@:-, AF" AG "@:M,AF*"@'AH04 AF>%6-%@E}"%6-&@H$R6-&@$\% 6-% AFf AG0p AFz (}##(7E}$%@<+%@,$,+-@@#+(SEITE %@$ (}#AH-@@'"E}#-@$@%@'( SS>M< Menue, >+< naechste Seite, >-< letzte Seite,>esc< ProgrammabbruchE}$SS(K}Diese Datei hat eine Lange von 4730 Bytes (allerdings fast nur Leerzei-HH(@ Das Laden einer Datei mit 3276E}7Bytes wuerde etwa 11 min dauern.(( Noch ein Tip:$F<(4Du wirst sicher ab und zu Ausgaben mitKomma trennen.FAPE}.T(T(IBei solchen Ausgaben auf C: wird mit Leerzeichen aber ohne EOL geschrie-8<<(4ben. Das Lesen wird Dir dann ScE}hwierigkeiten machen.BJ(J(?Verwende besser fuer jede Variable ei-nen eigenen PRINT-Befehl.L VF( (.( Das naechE}ste Programm wieder mit1(F(SPACE nachladen!` j%D:BASKUR10.BAS (D:BASKURS9.BAS(.( Das naechDnIJ)GESPACSTRICHTXTRTTEILZAHLHILFANAMELEERIIILAIMIIMAFLAI}@ I};F:A,"@"*Ad@-4;% D:DOS.ABS A"A'+""@I}@E""@@S A """@@K-A 6-AI} !;@@,"+ 6._67@@,._+67@,.#;A,(GG;@8,;@8,;@8,;@I},;@8,9A,-;@ ,2;@8,7+ 6. 67@8,. +67@,.< A 6.I} -(7@<, -(4A'A@d4)@ 6-B:,"AU$I}A** /67%@<%@,.>:,7(>:,A A%!!"A%)"AVA!!A&)"I}A%-%&@(7@<@,-%&@(!@(6.7@<&@,"@I}6. A%囆 ԛ-AdAU-keine Taste gedrueckt$A$nichI}t invers'A@d'Grossbuchstaben)@$ ś @2A $0@I}@@0@@@0@@@AR@'@@d'BI}7t@d$(}Die Tastatur (K:)( U(U(JBei INPUT oder beim Programmieren ge- hen DI}eine Eingaben ueber E:. Das hatQQ(Iden Vor- oder Nachteil, dass ein An- wender mit den Steuertasten auf demSS(KBildsI}chirm herumfahren und das Bild auch ganz Loeschen kann. Nutzt Du ei-__(Wgenen Kanal zu K:,kannst Du diese MoeglichkI}eit von vornherein aus- schliessen.$ @%.@(@(5K: kann natuerlich nur zum Lesen ge- oeffnet werden.0 I}8A A BV(V(KDieses Unterprogramm wartet auf das Druecken einer Taste. Durch die POKE-LQQ(IBefehle werI}den vorhergehende Tasten- druecke geloescht. Der ASC-Code desVgg(_Zeichen wird in der Variablen abge- legt. Damit kannsI}t Du jeden Tasten- druck ueberpruefen.` jA A tQ(Q(FDieses Unterprogramm wartet auf das DrueckenI} der Leertaste (ASC=32).~V(V(KWas nach dem Druecken der Taste pas- siert, haengt nun nur noch von Deinem( ProgramI}m ab.)()(Druecke einen Grossbuchstaben!"((Abbruch mit >ESC>:, < gedrueckt./ A`( (`(RIn einem eigenen INPI}UT-Befehl hast Du die absolute Kontrolle ueber die Tas- tatur.M(M(BVersuche eine falsches Zeichen einzu- geben (nur GroI}ssbuchstaben)!-@@( !!(Zulaessige Steuerzeichen:(( >Del<(>Shift< + >DelI}<(>Shift< + >Clear<#-@@#( Name :#-@@ #( Vorname :#-@@#( AltI}er :S6-@6-@'6-@36-@e?6-@I AS A A #6-@  AI}# A  A 6.G6-@6-@'6-@H36-@W= AG A!AI} '(( 'AA ((!(PP(HDu kannst dieses Unterprogramm auf ei-ne andere Cassette lI}isten, wenn Du255(,jetzt >ESC< drueckst, sonst die Leer- taste.< F/"@'%CAA/ ApPI}@2( A Z0(0(%Lade das naechste Programm mit SPACE!d((DOS NOTE POINT  %D:BASKUR11.BI}AS&6-!-@@&(\ @!-@@P(Hast Du einen Namen mit  Buchstaben?\6-I}@$4%"6-@"(%$5A 6-A:,6-*-@@/(A-@@>= @I}1(Bist Du wirklich erst ?=6-@H:!@d:(%Ein schoenes Hobby fuer dich Rentner.R$' AI}D:BASKUR10.BAS erst ?=6-@H:!@d:(%Ein schoenes Hobby fuer dich Rentner.R$' AH01,BGESPACVORNAMENAMESTRASSEORTPLZSEKTOBYTM} =F:A,"@"*Ad@-4=% D:PAUSE.ABS A"A'+M}""@@E""@@S A """@@K-M}A 6-A (<<;@,;@,;@ ,;@ ,;@,< AX**@@ M}D:ADRESSEZ**@@ D:LEIPZIG\@^(Vorname ` 4 b(Name M}d(Strasse f(Wohnort h(PLZ j0LEIPZIGA"l(@(@n(@M}p(@r(@t(@v(@x A A4**@@M} D:ADRESSE**@@ D:LEIPZIG@@@@M}(@(@(@(@( AM}囆 ԛAdAUAA@d)@$ ś M}@2A $0@@@0@@@0@@@ARM}@'@@d'B7t@d$33@@ D:PRIMZAHL22@2@M} D:ALT,NEU33@3@ D:PRIMZAHL22@5@ D:AM}DRESSE22@6@ D:ADRESSE,,AS@D1:,,AT@M}D1:""(}DOS NOTE POINT XIO ( M(M(BDiese Befehle haben bei der AM}rbeit mitDikettenstationen Bedeutung.V(V(KDOS (disk operating system) ruft ein Menue auf, in dem wichtige Disketten-M}$$(funktionen angeboten werden.,(,(!Dieses Kapitel beschreibt DOS 2.5 $((XIO.UU(LEinige DOS-FunktioM}nen koennen auch durch XIO-Befehle aus einem BASIC-Pro-8..(&gramm ausgefuehrt werden. Es bedeutet:B A 4L(M}(STATUS-Abfrage((V A 6`!((Datei umbenennen(!(j A 8t!((Datei vernichten(!(~ M} A @D(>(3Datei gegen Ueberschreiben und Loe- schen sichernA(D( A B!((Datei entsichern(!(M} A D4(1(&Diskette formatieren (einfache Dichte)4( A F4(4()Diskette formatieren (erweiterte DicM}h-te) V(V(KEs gibt noch weitere XIO-Befehle. Leichter zu merken sind aber die ent-D@(8sprechenden BASIC-WM}orte ( OPEN,INPUT, PRINT, GET, usw.).D ( ((NOTE.(.(#Beim Formatieren einer Diskette mitRR(JDOS 2.5 unteM}rteilt der Computer die Diskette in 1010 Sektoren mit je 125SS(KByte. Beim Schreiben oder Lesen von Daten ist es moegM}lich, festzustellen, OO(Gauf (von) welcher Stelle der Diskette das naechste Byte einer Datei ge-HH(@schrieben (gelesenM}) wird. Diese Posi- tion wird durch den Befehl A(6(6(+in den Variablen SEKTOR und BYTE abge-legt.2 </M}( (/(!Hier eine Anwendungsmoeglichkeit:FAAPP(P(EAuf der Diskette werden 2 Dateien er- oeffnet. Die M}Position der DateiZ>>(6'D:ADRESSE' wird vor jedem Schreib- vorgang notiert.d nAAxV(V(KEs solM}l der Vorname eingegeben werden.Erfolgt keine Eingabe, endet das Pro-33(+gramm (die Dateien werden geschlos- sen).M} AA ((Und jetzt kommt's!RR(JImmer wenn der ORT$='LEIPZIG'ist,wer- den die Variablen SEKTOR unM}d BYTE in--(%in die Datei 'D:LEIPZIG' geschrieben. AA2I(I(>Danach werden die Daten in die DM}atei 'D:ADRESSE' geschrieben. 7(7(,Der Nutzen folgt durch das Lesepro- gramm.AAR(R(GPM}OINT stellt den Schreib-Lesekopf der Diskettenstation auf die Position(SEKTOR und BYTE. AA4"M}V(V(KAnhand der Datei 'D:LEIPZIG' ist es moeglich, die Leipziger Adressen wie-,##(derzufinden, ohne die Datei6++(Ny}enTSS(Kauf einer Diskette untergebracht wer- den koennen, ist das Finden der Leip-^%%(ziger Adressen sekundensache.h.}))(!Wurden die Adressen alle auf einerJJ(Bgleiche Laenge gebracht, ist auch leicht ein Aendern moeglich.|T(T(INe.}ben der hohen Uebertragungsgeschwin-digkeit ist der direkte Zugriff aufjj(bjede beliebige Stelle einer Datei wohlder wese.}ntlichste Vorteil im Vergleichzum Cassettenrecorder. 0(0(%Lade Programm mit SPACE von Diskette!#((SOUND .}#AR %D:BASKUR12.BASD:BASKUR12.BAS%Lade Programm mit SPACE von Diskette!#((SOUND ,EWX88PCLHSSPWARTIITOGGESPACRETURTXTLEERDEVPALAIWWIEH@@R} R} !R }"#$%&' B@ APh16-@12@A@@rAR } #8,)2@8,@@5"@ A6-+""!6-%@+ AP2@R }@ F:@ , @AOF:Ad,"@,-@H2L O$R }@  Ap 1185,96,76,96,72,96,64,76,96,64,76,96,64,76,0 1164,72,57,72,53,72,47,57,72,47,57,72,47,57,0R }0 \\64,57,72,64,76,72,85,76,96,85,96,102,114,128,144,153,173,193,173,153,144,128,114,102,0: CLR: DIM P(9),C(9)? #AR}eD 5-@@ "$68,-("168,-5 I VV8200,173,8200,173,8220,230,8220,230,8200,173,8200,173,8220,230R},8220,230,8240,128N A@S 6-@b 12@P@16-&+!,g Al %%2R}q $v #6-@#-@@` E2@P@-6-&@9E6-R}@ -@@    %%2 $ = -@6@62R}@: =$  -@ h -A@P6@>2@'@B F h2R} $  z -A@P6@<2@@P-@0T R}X z2 $  -@6@0-%@Z2@U&+%$@R},@|2@@P&+%,@   $  _%2@P@@9-@@R}= _2 e -APA6@%<2@@@ b2R}e$  -@@ -@@ -@-21 5 9 MR}-@`2@$P:'@0,@&'@ !%%2!$ !!R}x -@6@N2@P&$@%@@t2@@P&$@@x !$R}! ! -@6@>2@&@\2@@ &@z2@@"&@R}2@@$&@ %!$*!/!K -@6@G2H:,$@ @K 4!R}$9!>!j -@6@D2$@@@H j2C!$H!R}M!f-@PAP@%8-%A6@^2@@&'@b f R! -@R}6?PW!w2@P@;2@A@W2@AP@s2@A@R}w \!$a!f!E -BP6A>2@'AB E$k!p! !6-u!6-#R }Az!S%2A@@G2@A@@S6-?!<""6@#A""R!}<6-%?$+ @,!((146,146,128,146,122,146,110,122,-1!0-@@602@!V!@R"}12S2@V$! ! Au!!B7h@!1R#}B7`AC'B7dAD1 AE!1B7`A'B7dA1 AE!1B7`Ab'B7dR$}Ac1 AE!1B7`A!'B7dA"1 AE!7-@327 !R%}$!O -@@6?`4B7aA`%HB7eA`%L O$!!%2AU@@R&}G2@AT@@i2@AS@@2@AR@@U!R-@AR'} /-@K2O R$!!Z -@@6@.-R2%R(}@P@@V Z !@ -@6@<2@P@@ !$!"" -@R)}@6@ "))2$@@@&"-@  "s-@%M2R*}@%$@@@&'@Q s2"$"$" #AE)"VV0,0,72,72,-2,R+}-85,72,72,72,-2,85,-114,72,81,96,72,-85,64,64,72,-2,72,72,0,-0.1,-1."""6@A3"<"6@22R,}< AP8"8 .2@O:,@@8 AP="2@@B"%-R-}@@ % APL"b -AP6@P<2@@@@ b2R.}Q"$V"["=%2AU@@9-A= `"-@e"q'2$@@R/}@K2@$@@@O q2@j"_-@A92R0}@@[2_ o"$t"v" #A5y"""6@$~"D-@@R1} :2O:,@@D A"88-123,96,81,72,68,72,81,96,123,96,81,72,68,72,81,96"66-91,72,61,53,50,R2}53,61,72,91,72,61,53,50,53,61,72"88-123,96,81,72,68,72,81,96,123,96,81,72,68,72,81,96"77-81,64,53,47,45,47,53,64,-91,72R3},61,53,50,53,61,72"88-123,96,81,72,68,72,81,96,123,69,81,72,68,72,81,96"QQ-81,64,53,47,45,47,53,64,-91,72,61,53,50,53,6R4}1,72,-123,123,123,-0.1,0,0,0,0"-1" A%"-@@ "$""_-@@92R5}@ @@[2_ "$""Q%2@@ @@/ A Q2@R6}"$"-@ "$""@ -AUA6@<2@@R7}@@ "%%2@"$# # -A@@6@#5-@-2@R8}@1 5 #6-@# -@`@6@#Q-@'2@+ / =6-&@R9}QA##:-@327 :$(#-#m -@ 6@=-R:}@h@6@S2@i2@@m 2#S-@@h@52@R;}K2@@O S 7#$<#A#G%2@AU@@G2@AT@@F#b-R<}A =2@_2@b$K#P#d -A@@6@R=}D2@&@@@`2@@d U#G%2G2@R>}_#$d#i#-@@ n# As#\ -@@6@<2@ @X2R?}@@@\ x#-@@  }#4-@@ 4-@@6@#n2R@}@ @# ' I2k2@n$#-@ RA}$##-@@@#-@@#%%2#-@@ RB}#112AP&+$@,@@#   #%%2#$#*<F:A,RC}"@"*Ad@-4<% D:PEEK.ABS+ +1B2H'A"A'1++ B` +""@RD}@K*+3-B`6-B '-B36-B4+9@ ,9@ ,>+.&;A ,;@8RE},;@,.6.CH++ 6. 67@8,. +67@,.R+ B \+W( ( ((W(C >esc< listet dieses GeraeuRF}sch / Melodie auf Cassettef+ ( ( >W< Wiederholungp+'('(>RETURN< Programmfortsetzungz+ +"RG}@'6-$+"@:W,6-@$+%"AU(}"6-@%$+ ( B0+6-H:,RH}$A+- +$+(}Druecke >RETURNesc< kannst Du daRX}s Geraeusch aufY 0YU6.Keine andere Cassette listen. Ich habe die Zeilennummern 8000 bis 10000 ver-Y  0[W6.Mwendet.RY} Wenn bei Dir dann ein mehr oder weniger langes BASIC-Programm da-[ 0MI6.?vor liegt, veraendert sich natuerlich dasRZ} Tempo der Geraeusche.M  0 *0%%(}Unterbrechung mit >RETURN0AAu BH0BR[}#0B#R06( (( Achtung!!!"AP6AAu\0 f0-@@p0 Bz0 Au0R\} 0AuA B0B#B$p0AuA0 0 A0AAE R]}B0B$pB% 0AAE0 0-@@0 B0 AE1 1AR^}EAU B1B% B&$1AEAU.1 81 AUB1AUA BL1R_}B&B&PV1AUA`1 j1 At1AA B~1B&PB'1AR`}A1 1 A1AA B1B'B'P1AA1 1-Ra}@@1 B1 A1 1AA0 B2B'PB(0 2AA0Rb}2 2 A0(2A0A` B22B(0B(<2A0A`F2 P2-@@Rc}Z2 Bd2 A`n2 x2A`Au B2B(B)`2A`Au2 2Rd}-@@2 B2 Au2 2AuA B2B)`B0@2AuARe}2 2-@@2 B3 A3 3AA B"3B0@B1 ,3Rf}AA63 @3-@@J3 BT3 A^3 h3AA  Br3B1 Rg}B2|3AA 3 3 A 3A AE B3B2B2P3A AERh}3 3 AE3AEAU B3B2PB33AEAU3 3 AU3Ri}AUA B4B3B3P4AUA4 &4 A04AAP B:Rj}4B3PB4D4AAPN4 X4 APb4APAe Bl4B4B4Pv4Rk}APAe4 4 Ae4AeA B4B4PB54AeA4 4 Rl} A4AA5 B4B5B5P4AA54 4 A54A5ARm} B5B5PB6 5A5A5  5 A*5AA  B45B6Rn}B6P>5AA H5 R5 A \5A A Bf5B6PB7p5A ARo}z5 5-@@5 A5 B5 5AA B5B7B75Rp}AA5 5-@@5 A5 B5 5AA0 B6B7Rq}B8`6AA06 $6-@@.6 A086 BB6 L6A0Ae BRr}V6B8`B9@`6A0Aej6 t6 Ae~6AeA B6B9@B96Rs}AeA6 6 A6AA  B6B9B@@6AA 6 6Rt} A 6A A5 B6B@@B@6A A57  7 A57A5A`Ru} B7B@BA@(7A5A`27 <7 A`F7A`A BP7BA@Rv}BAZ7A`Ad7 n7 Ax7AAU B7BABB@7AAURw}7 7 7//('}Lade Das naechste Programm mit SPACE.7.((PEEK und POKE (1).AR7 7%Rx}D:BASKUR13.BASD:BASKUR12.BASaechste Programm mit SPACE.7.((PEEK und POKE (1).AR7 7%P%#'D:ADRESSE' durchsuchen zu muessen.@ JT(T(IWenn Du bedenkst, dass nach dieser Me-thode sicher mehr als 2000 AdressNz}enTSS(Kauf einer Diskette untergebracht wer- den koennen, ist das Finden der Leip-^%%(ziger Adressen sekundensache.hN{}))(!Wurden die Adressen alle auf einerJJ(Bgleiche Laenge gebracht, ist auch leicht ein Aendern moeglich.|T(T(INeN|}ben der hohen Uebertragungsgeschwin-digkeit ist der direkte Zugriff aufjj(bjede beliebige Stelle einer Datei wohlder weseN}}ntlichste Vorteil im Vergleichzum Cassettenrecorder. 0(0(%Lade Programm mit SPACE von Diskette!#((SOUND N~}#AR %D:BASKUR12.BASD:BASKUR12.BAS%Lade Programm mit SPACE von Diskette!#((SOUND LEBABB@7AAU7 7 7//('}Lade Das naechste Programm mit SPACE.7.((PEEK und POK2}E (1).AR7 7%D:BASKUR13.BASD:BASKUR12.BASaechste Programm mit SPACE.7.((PEEK und POK0K)*##GESPACSTRICHWERZAHMINUTEWARTWV} <F:A,"@"*Ad@-4<% D:POKE.ABS A"A'V}+ A """@@K-A 6-A #;@8,(,,LEER$=" ":LEER$(38)V}=" ":LEER$(2)=LEER$-+ 6.67@8,.+67@,.2 A  6-F:,* 4##6-F:,%+F:%@V},$AV,>6-F:,$AVRAA(TAA(囆 ԛ-AdAUV}-keine Taste gedrueckt$A$nicht invers'A@d'Grossbuchstaben)@$ V}ś @2A $0@@@0@@@0@@@V}AR@'@@d'B7t@d$(}PEEK und POKE( U(U(JV}Nach dem Einschalten Deines Computers stehen Dir fuer BASIC-Programme etwaSS(K37 KByte Speicherplatz zur Verfuegung.Da eiV}n ATARI 800 ueber 64 K verfuegt,UU(Lergibt sich, dass Betriebssystem und BASIC-Interpreter fast die Haelfte des!!(V}Speichers benoetigen. Mit$ A.<(<(1kannst Du in allen Speicherstellen le-sen und mit8 AB,(,(!gezV}ielt Veraenderungen vornehmen.Lee(]Bevor wir nun einige PEEKs und POKEs ausprobieren, muessen wir uns ueber 2 Begriffe eiV}nigen.V `U(U(JBeim Booten schreibt der Computer in die Speicherstellen vom Betriebssys-jMM(Etem vorgegebene WerV}te. Diese ursprung-lichen Werte nennt man DEFAULT.tTT(LEin Default ist z.B. GRAPHICS 0. BASICmeldet sich immer in dieser GV}rafikart.~SS(KUm Speicherplaetze zu adressieren, brauchen wir 2 Bytes. Im Gegensatz zuYY(Qunserem Dezimalsystem schV}reibt der Computer das niederwertige Byte zu- erst.PP(HIch werde die 2-Byte-PEEKs DPEEK nen- nen (fuer Doppelpeek). V}Es ist dann((820 WERT=DPEEK(ZAHL)((gleichwertig mit A  R(R(GEinige PEEKS enthalten nur dV}as hoeher-wertige Byte. Sie zeigen auf eine&&(Speicherseite (Page). Dann ist A0 (}PEEK 18,19,20V}(X(X(LHier gleich eine Ausnahme. In diesen 3 Stellen zaehlt der Computer die ZeitOO(Gseit dem Einschalten oder RV}eset in 1/50 Sekunden. Dabei ist (20) das(niederwertigste Byte. !!(Oder anders ausgedrueckt:QQ(IPEEK(20) wiV}rd jede 50-stel Sekunde um 1 erhoeht. Erreicht es 255, wird es66(.wieder =0 gesetzt und PEEK(19) um 1 erhoeht.(BB(:DV}u kannst diese 3 Stellen fuer Zeit- messungen verwenden.2@@6-F:@,$AV#@%F:@,$AV%F:@ ,<V}6-P:'@P'@`,FA0A@P:(-( Dein Computer laeuft seit Reset :(Minuten.Z d( }PEEK(7V}7)(nQ(Q(F(77) wird wie (19) alle 5.2 Sekunden um 1 erhoeht. Wird 128 erreicht,xSS(Kwechseln die Farben alle 10.4 V}Sekun- den. Der Computer fuehrt aber bei je-22(*dem Tastendruck den Befehl POKE 77,0 aus.PP(HZweck der Sache ist esV}, das Einbrennender Zeichen auf dem Bildschirm bei55(-Bedienpausen ueber 10 Minuten zu ver- meiden. D(:(/In wV}enigen Sekunden werden die Farben wechseln.DA-A AdAU@wA(V} h(h(]Bei Joystickspielen muss dieser Farb- wechsel durch gelegentliches POKE 77,0vermieden werden.[[(SBei laengV}eren Berechnungen kannst Du ihn durch POKE 77,127 gleich beginnen lassen.  (}A 0(V(V(KDurch diesV}e POKEs kann Dein Programm nicht mehr mit der Break-Taste unter-]](Ubrochen werden. Alle Programme auf dieser CassettV}e sind gegen Break ge- schuetzt.@@(8Der Befehl muss nach E/A-Operationen wiederholt werden." ,) (}A@V}()A@6( Default: 10@PP(HTrennst Du PRINT-Befehle mit Kommas, werden die Ausgaben im Abstand vonJ(V}(201) gemacht.TA0AP(^((HundKatzeMaushA@r((HundKatzeMaus|V}  (}PEEK(675) bis (689) ((( Default: 1X(X(LDiese Bytes enthalten die Tabulator- stops. Dazu musst DuV} Dir die Bytes alsKK(CBitmuster vorstellen. Jedes gesetzte Bit ist eine Tabulatorstelle.((((00000001000000010000V}0001 usw.S(S(HDu kannst die Tab-Stellen also auch veraendern, indem Du hier die ent-!!(sprechenden Werte POKEst.V}  (}A`(A1@(( Default: 0?(?(4Das Klicken der Tastatur ist ab jetzt ausgV}eschaltet.  (}Ap(U(U(JHier wird der Tastaturcode der zu- letzt gedrueckten Taste gespeichert.V}77(/Ist keine Taste gedrueckt, liegt hier eine 255.&..(&Druecke ein paar Tasten (z.B. 1 bis 9)0)()(ProgrammfortsV}etzung mit >esc<.:AdAUD F:Ad,"AUA`N(Code: F:Ad,X F:Ad,"@(AV}b APlB(B(7Der Tastaturcode ist nicht identisch mit dem ASC-Code.v(Z.B. bedeutet:0( 12Return(V}28esc0( 33LeertasteL(L(AFuer die Berechnung des ASC-Codes wer-den noch 2 PEEKs gebraucht.  (}ARV}((( Default: 64E(E(:Umschaltung Gross/Kleinschreibung oder Control-Zeichen$($( 0KleinbuchstaV}ben aktiv"("( 64nur Grossbuchstaben((128Control-Zeichen  (}AP((( Default: 0V}\(\(PLiegt in (694) eine Zahl<>0, werden die naechsten eingegebenen Zeichen in-vers&&( dargestellt (ASC-Code > 1V}28).  A A  T(T(IDieses Unterprogramm garantiert, dass immer ein nicht inverser Grossbuch-*(sV}tabe eingegeben wird.4 > (}A!(HV(V(KHier wird der ASC-Code des Zeichens abgelegt. Die UmwandlungsV}tabelle Tas-J<9(1taturcode in ASC-Code beginnt bei DPEEK(121).<(R \ (Druecke ein paar Tasten!f((WeiV}ter mit >esc<.pA!pA!(z #6-F:Ac,#( ASC-Code: @'A!p (}A#p(V}A#PA$:(6(+Was passiert wohl in diesem Programm- teil?: SS(KUeber E: wird das Wort CONT geschrie-V} nen. Durch den POKE-Befehl wird prak-!!(tisch >Return< gedrueckt.UU(LDann wird der Cursor wieder 4 Zeilen hoeher gV}esetzt (erst durch einen ?-Be-''(fehl erscheint der Cursor dort.>>(6POSITION ohne PRINT veraendert die Stellung V}nicht).  e(e(ZDann wird das Programm gestoppt. Nach einer Leerzeile erscheint die Meldung:STOPPED AT XXX 33(+DaV}nach steht der Cursor genau auf CONT. OO(GDa >Return< bereits gedrueckt ist, wird der Befehl CONT ausgefuehrt.$ V} . (}8 -@@(CONTB Ad@L -@@(V ` &j A#PA$tV} R(R(GAuch ein mit END beendetes Programm kann mit CONT fortgesetzt werden.~    (}5B ( (( DeV}fault: 12 [([(PDieser Befehl ist noch besser geeig- net, um mit E: Programme zu manipulie-ren. V(V(KNach BeendigunV}g des Programms bleibt >Return< wie auf Dauerfeuer gestellt. U(U(JHast nun vorher mit PRINT BASIC-Be- fehle auf den SV}: geschrieben und den AA(9Cursor darueber gesetzt, werden diese sofort ausgefuehrt. S(S(HDadurch kannst Du ein PrograV}mm auch nach dem ENTERn von Programmzeilen SS(Kwieder zum Laufen bringen, oder auch nach CLOAD von selbst starten lasseV}n.   6(6(+ATARI-BASIC kennt keine DELETE-Rou- tine. QQ(IDas folgende Programm nutzt (842), um komplette AbschnV}itte aus einem Pro- (gramm zu entfernen.  5B 5B ! c(c(XDu brauchst nur die erste und letzte ZeiV}lennummer eingeben, die geloescht werden soll. II(ADie Routine entfernt sich auch selbst wieder aus Deinem Programm. hV}(h(]Mit >esc< kannst Du die Routine auf eine andere Cassette listen, sonst druecke >Return<.(  "AUA&1V}2 @'A&< C5B 5B !F 0(0(%Lege die Programmcassette wieder ein!G S(S(HNach der gleichV}en Methode kann ein BASIC-Programm auch Zeilen in sichH QQ(Iselbst einfuegen, z.B. eine Eingabe ineine DATA-Zeile oder eV}ine Formel inI ((( in eine Programmzeile umwandeln.P G(G(Return< zum Laden! POKE TEIL 2 d  AUA&`n A@x 'A1V}'AR A&A'@ -( ( (((((((!($('(*(-( -@@  POKE 842V},12:RUN -@@( :AB@'Ad@:D:BASKUR14.BAS D:BASKUR13.BAS@V}  POKE 842,12:RUN -@@( :AB@'Ad@:D:BASKUR14.BAS V}D:BASKUR13.BAS;A ,;@8,;@,.6.CH++ 6. 67@8,. +67@,.R+ B \+W( ( V}((W(C >esc< listet dieses Geraeusch / Melodie auf Cassettef+ ( ( >W< Wiederholungp+'('(>RETURV}N< Programmfortsetzungz+ +"@'6-$+"@:W,6-@$+%"AU(}"6-@%$V}+ ( B0+6-H:,$A+- +$+(}Druecke >RETURNesc< kannst Du das Geraeusch aufY 0YU6.Keine andere Cassette listen. Ich habe die Zeilennummern 80V}00 bis 10000 ver-Y  0[W6.Mwendet. Wenn bei Dir dann ein mehr oder weniger langes BASIC-Programm da-[ 0MI6.?vorV} liegt, veraendert sich natuerlich das Tempo der Geraeusche.M  0 *0%%(}Unterbrechung mit >RETURN0V}AAu BH0B#0B#R06( (( Achtung!!!"AP6AAu\0 f0-@V}@p0 Bz0 Au0 0AuA B0B#B$p0AuA0 V}0 A0AAE B0B$pB% 0AAE0 0-@@0 V} B0 AE1 1AEAU B1B% B&$1AEAU.1 81 AUV}B1AUA BL1B&B&PV1AUA`1 j1 At1AA BV}~1B&PB'1AA1 1 A1AA B1B'B'PV}1AA1 1-@@1 B1 A1 1AA0 B2V}B'PB(0 2AA02 2 A0(2A0A` B22B(0B(<2A0V}A`F2 P2-@@Z2 Bd2 A`n2 x2A`Au B2B(B)`V}2A`Au2 2-@@2 B2 Au2 2AuA B2V}B)`B0@2AuA2 2-@@2 B3 A3 3AAV} B"3B0@B1 ,3AA63 @3-@@J3 BT3 A^3 h3AV}A  Br3B1 B2|3AA 3 3 A 3A AE B3V}B2B2P3A AE3 3 AE3AEAU B3B2PB33AV}EAU3 3 AU3AUA B4B3B3P4AUA4 &4 AV}04AAP B:4B3PB4D4AAPN4 X4 APb4APAeV} Bl4B4B4Pv4APAe4 4 Ae4AeA B4B4PB5V}4AeA4 4 A4AA5 B4B5B5P4AA5V}4 4 A54A5A B5B5PB6 5A5A5  5 A*5AV}A  B45B6B6P>5AA H5 R5 A \5A A Bf5V}B6PB7p5A Az5 5-@@5 A5 B5 5AAV} B5B7B75AA5 5-@@5 A5 B5 5AV}A0 B6B7B8`6AA06 $6-@@.6 A086 BV}B6 L6A0Ae BV6B8`B9@`6A0Aej6 t6 Ae~6AeAV} B6B9@B96AeA6 6 A6AA  B6B9BV}@@6AA 6 6 A 6A A5 B6B@@B@6A A5V}7  7 A57A5A` B7B@BA@(7A5A`27 <7 A`F7AV}`A BP7BA@BAZ7A`Ad7 n7 Ax7AAU B7V}BABB@7AAU7 7 7//('}Lade Das naechste Programm mit SPACE.7.((PEEK und POKV}E (1).AR7 7%D:BASKUR13.BASD:BASKUR12.BAS7//('}Lade Das naechste Programm mit SPACE.7V}.((PEEK und POKE (1).AR7 7%D:BASKUR13.BASD:BASKUR12.BASV}V}V}W}W}W}W}W} T `1v1GESPACSTRICHZEINALNEVARTAVARTABENSCHLEIFP55ZEITINPUVEKTOZEILNLANVARALTVARNEUTXTVARZAHIN[}DIESEVARIABLENDIENENZURVERLAENGERUNGDERVARIABLENTABELLDERMUELLWIRDDURCHDENBEFEHLLISTC0BIS32499UNDANSCHLIESSENDNEWENTERAUSD[}EMPROGRAMMENTFERNA A &&A@"@2B"$B6 A A A4 A5 [}@4@ A[ })@A0@>F:A,"@"*Ad@-4>% D:POPBYE.ABS A"[ }A'+ A """@@K-A 6-A #;@8,-+ 6.-6[ }7@8,.-+67@,.2 Ab-A c$d<@'@9@ [ }<$n2/6-+F:@,$AV%F:@ ,,'@P2$x0@@@6-@0 "@[ }'$ @(A!@1A (>:, A * AF:A,&@*+*6-[}A$AV/6-AV$F:A,9-A#>%F:%,C H #AeI-@M[}"R%%AW \AVF:A,a!!0,60,102,124,102,102,124,96f$囆 ԛ[}AdAUAA@d)@$ ś @2A [}$0@@@0@@@0@@@AR@'@[}@d'B7t@d$@@(8}Bevor wir weiter PEEKen und POKEn kurzzur Reset-Taste.V(V(KDurch Reset wird [}Dein Computer in ei- nen bestimmten Grundzustand versetzt.\\(TDein BASIC-Programm wird gestoppt, bleibt aber im Speich[}er, auch die Va- riablen.E(E(:Viele POKEs werden auf die Defaults zurueckgesetzt, z.B.#(#( - GRAPHICS 0 wird a[}ktiv66(. - die Tab-Stellen werden zurueckge- setzt$::(2 - die Kanaele 1 bis 7 werden ge- schlossen.''( [}- USR-Routinen werden gestoppt8??(7 - die Uhr (PEEK(18) bis (20)) wird auf 0 gestelltB (usw.L Vr(r(gVi[}ele Speicherstellen werden aber durch Reset nicht veraendert, z.B. (201) - Abstand durch Komma`T(T(ILaedst Du jet[}zt ein neues Programm, kann es passieren, dass dieses Pro-jPP(Hgramm nicht richtig laeuft, weil es die Defaults brauch[}t. Da hilft nurt__(Weins, den Computer neu zu booten, alsoihn fuer mindestens 5 Sekunden aus- zuschalten.~ ( [}}POKE 580,1((( Default: 0U(U(JBei RESET fuehrt der Computer jetzt einen Kaltstart aus. Das letzte Pro-&[}&(gramm verwendet diesen Befehl. "(}ADRESSE=PEEK(106)*256"((( Default: 1609(9(.(106) zeigt auf [}die hoechste freie Adresse.1(1(&0 (106) 6553500((í[}X(X(LDer weisse Balken stellt den Speicher dar. POKEst Du nun in (106) eine klei-SS(Knere Zahl, verringert sich [}zwar der Speicherbereich fuer Deine BASIC-Pro-UU(Lgramme, aber Du erhaelst einen ge- schuetzten Bereich, auf den der[} Compu- (ter nicht mehr zugreift. >(4()í>AT(T(IEs si[ }nd jetzt 1024 Byte (256*4) ge- schuetzter Speicher reserviert. Ein66(.GRAPHICS-Befehl ist notwendig, egal welcher. [!}'('(Was machen wir nun damit ??? "(}ADRESSE=PEEK(756)*256"(((( Default: 2242*(*(Der Zeiger auf["} den Zeichensatz.<U(U(JWenn der Computer Zeichen auf den S: bringt, muss natuerlich irgendwo ge-FRR(Jgespeichert sei[#}n, wie diese Zeichen aussehen. Als Bitmuster dargestellt,P'$(sehen folgende Bytes so aus:'(Z(00000000 - 0d[$}(00111100 - 60n(01100110 - 102x(01100110 - 102(01111110 - 126(01100110 - 102(011001[%}10 - 102(00000000 - 0)()(Na, erkennst Du schon etwas ? ( ((00000000 - 0(0000[&} - 60(0000 - 102(0000 - 102(00 - 126(0000 - 102(0000 - 102['}(00000000 - 0%(%(So ist es besser zu sehen. "U(U(JDer Computer enth lt einen Zeichen- satz, in dem[(} jeweils 8 Byte ein Zei-,PP(Hchen darstellen. In GRAPHICS 0 knnen gleichzeitig 128 Zeichen verwendet6( werden. Durch[)}A@@X(X(Lwird an Stelle der Grafikzeichen der internationale Zeichensatz eingeschal-JLL(Dtet, in dem auch di[*}e deutschen Umlaute( {, , ,,, ) enthalten sind.T((Dr cke >Return(;(0Wir werden jetzt noch ein 'eszet' kon-struieren.>((00000000 - 0(0000 - 60(0[,}000 - 102(000 - 124(0000 - 102(0000 - 102(000 - 124(000000 - [-}96Z(L(ASo knnte es aussehen. Die Werte legenwir in einer DATA-zeile ab.VAeZ ( (( Das Programm:C([.}C(8Wir reservieren Speicherplatz f r un- seren Zeichensatz. A d( (d(VALT= Adresse des Orginalzeichensa[/}tzes NEU= Adresse des reservierter Spei- chersAA b( (b(TIn einer Schleife kopieren wir de[0}n kompletten Zeichensatz an die neue Adresse.AA5 &X( (X(JWir tauschen >Control Komma< gegen [1}un-ser Zeichen aus. Danach brauchen wir077(/nur noch auf unseren Zeichensatz umzu-schalten.:AAe D4 [2}AF:A,&@*+4 A "NB( (B(4Die Schleife dauert nat rlich ein paar Sekunden.X((Ic[3}h bitte um Geduld.b( ((Scheie!lEE(=Jetzt m te mir noch ein anst ndiges Wort mit '' einfallen.v A[4}  (}@(SS(KDas Bild wird jetzt nicht mehr zeilen-weise nach oben weggeschoben, sondernUU(Lbildpun[5}ktweise. Es rollt dadurch lang-samer und gleichm iger, wie alle Pro-##(gramme auf dieser Cassette.  (}[6}((( Default: 40V(V(KWenn Du eine Taste gedr ckt l t, setzt nach 40/50-Sekunden Auto-repeat""([7}ein (autom. Wiederholung).  (}@((( Default: 5s(a(VHat Autorepeat eingesetzt, bestimmt [8} (730), wie schnell das Zeichen wieder-holt wird.s@ K(K(@Durch diese POKEs kannst Du schneller in einem[9} Text herumfahren.<(*(Dr cke >Control< >< bis ><.<AR ((Weiter mit >esc<.* AR) ([:}}A!p()AR@\\(\(QDPEEK(130) zeigt auf den Anfang der Variablentabelle, DPEEK(132) auf das End[;}e.fA(/($Dieses Programm zeigt die Variablen.AA!pA" p   ( (z%%6-F:A0,%F:A1,$AV--6-[<}F:A2,%F:A3,$AV&@ - 6-F:, (>:,  Y( (Y(KWenn Du jetzt >esc< dr cks[=}t, wird ein Programm auf C: gelistet, mit dem DuSS(KNamen in der Tabelle austauschen kannst. Das Programm hat aber [>}T cken.SS(KEs mu unbedingt als letztes geENTERt werden. Nach dem Austausch sofort mit88(0LIST'C',0,32499 das ge nder[?}te Programmspeichern.1(1(&Nach NEW mit ENTER'C' wieder einladen.&(&(Dr cke >esc< oder >Return(>(3Die ersten beiden B[B}yte ergeben die Zeilennummer.L ^^(VAb dem vierten Byte ist der Inhalt dieser Zeile in der internen Form ge- speichert[C}.V U(U(JDas dritte Byte enth lt die L nge die-ser Zeile. Der Computer wei nur, wo` SS(Kdie erste Zeile zu finden ist. [D}ber Byte 3 findet er jeweils die n chste.j  t R(R(GDadurch wird auch klar, warum BASIC mit steigender Zeilennumm[E}er immer~ ""(langsamer wird. Kommt z.B. A% U(U(Jbeginnt der Computer immer am Pro- grammanfang nach dies[F}er Zeilennummer SS(Ksuchen. H ufig aufgerufene Unterpro- gramme oder zeitaufwendige Berechnun- <<(4gen sollten deshalb[G} am Anfang des Pro-gramms stehen.   .(.(#Das wollen wir einmal ausprobieren:  @A% A%@ %( [H}(( Bitte warten!% A -@A @   " A"( Sekunden %( (B'g[I}%A%A& %( (( Bitte warten!% A -@A B'g(  2 " A"( S[J}ekunden< ;(;(0Auch Schleifen laufen am Anfang schneller.F %( (A&P%@@P %( (( Bitte wa[K}rten!% AZ @d " A"( Sekundenn %( (A&%B'fB'gx %( (( Bitte warten[L}!% A B'f " A"( Sekunden q(q(fBASIC arbeitet linear am schnellsten, also Befehl nach B[M}efehl. Vermeide un- n tige Schleifen und GOTO.    (}A'"( V(V(KFuer den Bildaufbau ist der Prozessor [N}ANTIC zustaendig. Wenn ANTIC sich Da- QQ(Iten fuer ein Bild aus dem Speicher holt, wird die Zentraleinheit (CPU) i_([O}Wgestoppt. Du kannst Programme, die kein Bild brauchen, schneller machen, wenn Du mitiA'" E(7(,den Speicherzugr[P}iff des ANTIC verhin- derst.; EB'f )()(Diese Schleife dauert mit Bild %( (( Bitte warten!% A [Q} B'f 7 A"( Sekunden16-F:AY,76- AY - A B'f! A-AY[R} &(&( Ohne Bild -  Sekunden P(*(Das ist eine Zeiteinsparung vonL(A&'$A Prozent.P  [S}V( (L(>Zahlen brauchen in der internen Form sehr viel Speicherplatz.VA  +(+( So wird diese Zeile gespeichert[T}: *(*(x0@@@ i(i(^Verwendest Du eine Zahl mehrmals, ist es platzsparend, wenn Du sie eine[U}r Variablen zuweist. A0 "("(6-@0   Y( (Y(KWenn Du jetzt >esc< dr ckst, wird [V}ein Programm auf C: gelistet, da Dir den PP(HSpeicher normal und in der internen Form zeigt. Sonst dr cke >Return:F:,,>:F:%@,, >:[_}F:%@,,=(~-%@&@%(>:F:,,  ( ( ("F:Ad,AU" B%' 6-[`}%AdAU' B%AdAU F:Ad,"AUB%$&Š'Ӡ[a}( +A @) (} *11;A ,;A ,;A,;A ,+6-6-[b},%%6-F:A0,%F:A1,$AV---6-F:A2,%F:A3,$AV&@. -/6-%@0 6-F:,6[c}7<,.>:,1! A((>:,! B%c2+6-%@6-%A(+(>:, 3 4( (( Variable5'([d} (#(Alter Variablenname '66 6-B:,6-@:7<,,(6-%A(667<,.>:,7$( (Neuer Variablenname $8[e}6 6-B:,6-@:7<,,(6-%A(667<,.>:,9( (( Bitte warten!:6-6.6.; -<6[f}-%@= 6-F:,67<,.>:,> A(B%x? 46.@67B:,%@,.A6-6.B[g} C-@B:,D%&@@:7<,,E F B%SG6-H6-I6--[h}A $D:BASKUR14.BAS<,,E F B%SG6-H6-I6--X-@A0MEGESPACMMNAMERICHTITIPGEWINNZAHDTXTSTARZIECI_j}@ @ >F:A,"@"_k}*Ad@-4>% D:COPYDC.ABSAA`+&6-F:A,&@&A_l} A"A'+ A """@@K-A 6-A ;@@,_m}#,,6."hhhhhשԅ֢ԑ`2 A囆 ԛAdAUA_n}A@d)@$ ś @2A $0@@@_o}0@@@0@@@AR@9@@d'B7t@d9A_p}@$ (}POP(---T(T(IBeim GOSUB-Befehl verlaesst der Compu-ter die normale Reihenfolge der Be-RR(_q}Jfehle und springt zur angegebenen Zei-lennummer. Die Adresse des dem GOSUBSS(Kfolgenden Befehls wird im STACK abge- leg_r}t. Du musst Dir das wie einen Sta-jj(bpel Zettel vorstellen, bei dem die Ruecksprungadresse des letzten GOSUB immer g_s}anz oben liegt.SS(KFolgt nun RETURN, wird das Programm bei der obersten Adresse fortgesetzt,$==(5und gleichzeitig di_t}ese Adresse aus demSTACK entfernt.. 8G(G(0 erfuellt die Bedingung.6 @ (}USR(---JX(X(LMit USR Koennen in Maschinencode ge- schri_}ebene Programmteile aus dem BASICTUU(Laufgerufen werden. Die USR-Routine wird in einem String oder einem reser-^//(_}&vierten Speicherbereich untergebracht.h--(%Um solche Routinen zu schreiben, mussrQQ(Iein Assembler und natuerlich di_}e not- wendigen Kenntnisse vorhanden sein.| ARAAP_(_(TDiese Routine erzeugt eine_}n blinkendenCursor. Auch alle inversen Zeichen blinken. #AP-@#"%AV _}6-?:AV,QQ104,169,1,141,40,2,141,41,2,169,10,141,26,2,169,3,56,237,243,2,141,243,2,96  A_};@,6.C:;B'g,+ 6. 67B'g,. +67@,. 6-C:,6-%B'g116-C:$hhUhT_}hYhXhhR ե#`,&5 @@A(56-?:<<<@,0%%6-F:@@,%AV$F:@A,:_}@D6.7@<,N 6-%X@ @@A(56-?:<<<@,@@b( ( (A_}A`lM(M(BMit dieser Routine kannst Du einen Text von einem Geraet laden.v (ApAR(R(_}GDie Routine ist auch zum Kopieren von Programmen bis 32 KByte geeignet.  A ;@@,,,6."hhhhh_}שԅ֢ԑ`6-F:A,&@A+6-?:C:,<A<,++-$AV%A_}$AV%A "  !!0,60,102,124,102,102,108,96AV ( ( (A`A PX(_}X(LDurch diese Routine wird der Zeichen- satz ohne die zeitaufwendige FOR-NEXT- SS(KSchleife in den gesch tzten Bereich_} verschoben. Wir haben wieder ein ><.* 4 ( ( (A! A! >6-?:B,H9(5(*Der Computer fueh_}rt einen Kaltstart aus.9 R (}BYE(---\SS(KUm Maschinenprogramme (z.B Computer- spiele) von C: zu laden, mut_} Du beimfOO(GEinschalten des Computers die Tasten START und OPTION dr cken, bis derpFF(>Kontrollton ert nt (bei einige_}n Pro- grammen auch nur START).z44(,Dann kannst Du das Programm von C: laden.S(S(HDu verhinderst durch Dr cken v_}on OPTION die Aktivierung des BASICs.5(5(*Du kannst BASIC auch mit BYE verlas- sen.W(S(HDanach RESET dr cke_}n und dabei eben- falls START und OPTION festhalten.W ;;(3}Auch ich werde mich jetzt mit BYE ver-abschieden.k(k(_}`Ich hoffe, ich konnte Dir etwas hel- fen, in die Besonderheiten des ATARI- BASICs einzusteigen.X(X(LWenn Du der Mein_}ung bist, da irgend- ein Programm auf dieser Cassette nichtoo(grichtig funktioniert oder falsch be- schrieben ist, sch_}reibe mir, damit ichden Fehler beseitigen kann.I(I(>Es folgen jetzt noch zwei Computer- spiele in Maschinencode.F_}( (( BYE($( BYE'(F( Thomas Grahn c( (c(UDie Diskettenversion wurde von Blue S_}oftware fuer das Blue Soft Magazin 1 erstellt.ff(^bei erneuten SPACE wird ein Menue fuer die Demos und die anderen Pr_}o- gramme nachgeladen %D:DEMOMENU.BASD:BASKUR15.BASrd ein Menue fuer die Demos und die anderen Pr\K3 IF PEEK(201)=22 THEN POKE 764,12:LIST "D":RUN "D:HEXA.ABS"11 REM 13 REM 15 REM 17 REM 19 REM 21 REM 23 REM 24 REM Ec}NTER"D:BSP.BAS ԠΛ25 REM 27 REM 29 REM 31 REM 33 REM 35 REM 37 REM 39 REM 41 REM 43 REM 45 REM 47 c}REM 49 REM Du siehst, mit dem ENTER-Be-51 REM fehl wurden zwischen die alten53 REM Zeilen neue Zeilen eingefuegt.55 REM Dc}er alte "ENTER"D"-Befehl in57 REM Zeile 24 wurde durch einen REM59 REM Befehl ueberschrieben.61 REM Nach dem ENTERn kommt c}ein lau-63 REM fendes Programm allerdings un-65 REM weigerlich zum Stehen.67 REM DAS NAECHSTE PROGRAMM WIRD NACH69 REM DEc}R SCHLEIFE VON DISK GELADEN!71 FOR A=1 TO 750:NEXT A73 RUN "D:BASKURS5.BAS"7 REM DAS NAECHSTE PROGRAMM WIRD NACH69 REM DE`NPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlPrimzahlg}PrimzahlPrimzahl71113171923293137414347535961677173798389971011031071091131271311371391491g}511571631671731791811911931971992112232272292332392412512572632692712772812832931311371391491dk0%D:MONOPOLY.BASD:DEMOMEN2.BASERSTE SEITE EINLEGEN! A&.(>:A%,.(LOADING MONOPOLY DEUTSCH! - A;@, P(>:A%,(((( BITTE WAEHLE:8( A:BASICKURSL(B:ZWEITES MENUEP o}4A%D:BASKURS1.BAS 4B%D:DEMOMEN2.BAS @D:DEMOMENU.BASCKURSL(B:ZWEITES MENUEP l[Z[cn,,OFLMJBPITCWAIH1H2H3H4H5H6H7H5MRRPMBASMEJJk} @ k} dc +@-@k}@2(@SOUNDD-@@Y(@c A n*B7h@'B7i@*$xGk}-A@=2@'@G A3)2@%@@'@3 A3)2@k}%@@'@3 A3)2@%@@'@3 AK0@+0@k}@G0@%@@K  -A6@+!2@'@+ A3)2@k}%@@'@3 A3)2@%@@'@3 A3)2@%@@k}'@3 AU0@+0@@G0@%@@K U A`_ -@k}6@<2@@X2@@@\ _$C -@6?P<2@k}@@ C$:-@327 :$ +@'0@@@9-@k}@J(@b T A@c(@ym A@0@@@-@@&(@ 0k} A@A(@ K A@\(@ f A@w(@  A@(@ A@-@k}@&(@G 0 A@A(@E K A@\(@R f A@w(@S  A@(@k}T  A@R(@N  A@/(@E 9 A@H(@RR A@;@@,"o k}-@6?P=-@6@S2@W k0@@o ,-@@k}4-@6@P2@@l2@@p t (>:AS,65;@0,k}56. @ APJj-A@@=2@'@ c2@@k}@&'@ g j$Tp +'0@@A0@[0@mk}AR@p$^* A@-@@!*(TARGETh-@ A@rz-@'@,(7@k}<@,H-@'@&@](7@<@,q-@'@z(BOMB|#2@@# k}h +AR@90@@@K-@@!V(T ThAU@8-@@"(k}A E0-@@#8(RGG-@ A@G2@&+'@ ,-)0@@k}@&+'@ ,- -AU@)-@A- _ +@!'0@@1@C,@k}@U/@u@0_ A0_ +@!'0@@1@C,@u@U/@@0_k} A0_ +@#'0@@1@C,@@U/AP@`_ A0_ +@#'0k}@@1@C,AP@U/@@`_ A09 +'0@@9AR@k}RR;@,;@,;@,;@,;@,;@,;@,6. - - -6.  k} 6. \__/ \6. / 6.  &6. X  06. - -+ - :%%2@A@@k}@DS6-@,-@6@:-@%I( S A0NU-@%(#-@k}%'(5-@%9(G-@%K(U A0XM-@ %( A0--@%1(?-@%C(M Ak}0b1-@%(#-@%'(1 A0l v!-@@(! A0M-@(-@k}#(/-@3(?-@C(M A0G-@ ( A0)-@-(9-@=(G A0--k}@(-@#(- A0 S-@@+-@@ O2@%@@S k}! +@!0@(-@@((@ALERTi%2@@@G2@Ak}@@i2@@@@)-@A % AP)  -@6?k}H2+@ &,$@@x2@+@ &,$@%@ @2@@@ k}5 (}#0@@@5AR@-@@ -@"@6?P/-@%@k}( )-@/(-)2$@@'@-  -@@  u-@@"?k}P3-@&@9( E-@K(O S u2L% +AR@%(k} V50@)6-@ 56-@`3-@@(.--@'@3(.je-@@k}66-H:,$@7%@U6-H:,$@!%@[-a(.e t46-F:A,&@&BBy46k}-AV$~EAY@F'B2w@3B2HEB2V@=-%A%A@'+ =k}AA--%A%%A%#")- 60,126,255,126,60%%2@@@+k}-@ @@+B2HN-@8%A%%F:%A%%,< J6-&@N [%2k}@@@9-@A EB2HI [A@ @ -@6?P<2k}@@@ t-@;2@@%@O-@p%A%%F:%Ak}%%,t I%2@36-&@7 IB2HA %2@%@@7k}B2V@T-A 6@`B2Hd 2B2HA  -@k}6@2B2w@DB2V@X-@n2@2@@ m k}#A$@%@5B2w@T6-H:,$@7%@`-@"f(.i(m ( AP(}%k}AR@((-@@+-@@0M2@%@@o2@@@k}-@@2@%@@2@@@ c )2k}K2@_0@@c j -@6?<2@%@k}X2@@\ f Aj [,6."PARDON ME WHILE I ANSWER THE PHONE/(2(C-@B:,M(7<,k}W A0[ &-@@92@%@@[2@@@o-@@k}2@%@@2@@@0   AP A2J6.HELLO!-@k}@2-@B:,<(7<,F A0J :f A-@@36. IT'S FOR YOU.D-@B:,N(7<,k}X A0\ f A4-@@$(62@@R2@@@n2@@k}@2@@@>)-@@  ) AP@ -@6?P<2@k}@@ ` ] +AR@1@@C@@9]0@j r( (,( k} O( |ɠàӠ|r( t 6(>:AS, A$k},A$A%6 A$~ k A$A%0A%@) A%03 A$EA%PA%`O A%PY A$kA%pk}A% = A%p A$)A&A& 3 A&= A$ mA&0A&@ A&0) A$;A&PAk}&pE A&PO A$YA&c A&m A$ I A& A&! A$+A'5 A'? A'I A`k} [-@327 I-@@X( [$ M-@3-Ak}A@I2@M  9-AA@52@@9  9-AA"k}@52@@9  @-A$A4@52@@9 = @$ -@4k}-@6@P2@@l2@@@2@@@ b2k}A;2@AW2@A[ _ b$ N -@6@4-@k}@ J2@N  A -@0@ 6@62@@: > A$ l -@k}6@4-@@ J2@h2@$@@l  V-@-2@@k}K2@%@@O S V$2 N -@6?P4-@@J2@N  A$Z V -@6@<k}-@@`@R2@V d 9-@pA@@52@@9 n A -A@k}6@P62@@: > A$x s -@6?P4-@ J2@h2k}@$@@l p s$ f-AP@;2@@_2@AU&@k}@c f$ -@6?<2@Q@X2@A@t2@@Q@k}2@A@ $ QQ40,19,29,9,31,9,35,9,40,9,47,19,0,9,40,9,29,3,29,3,31,9,35,9,33,9,31,19,0,9 7k}731,9,31,9,40,9,35,9,40,3,40,3,31,3,31,3,40,9,35,9 FF40,3,37,3,35,3,31,3,29,3,23,3,26,3,29,3,35,3,40,3,29,3,26,9,23,9 k} +@(@#(@.(@I(@ that'sT(@l(@ ALLw(@(@k}  ' A'`" A'p' A'P $ ?A@#0@?2@@k} F:A@,A' (%2($  ĠƠ ŠpT (}AR@k}--@@T6. This concludes our Ġ,-@B:,(7<,( A0, 8S-@@k}*6.demonstration.;-@B:,E(7<,O A0S -@@)AU@3 A0EAUk}@a2@@e 2%2@B-Ak}6@^2@@r0@@2@@@ , AP B@k}-@A $-@A $ -@A $0u + %D:DEMOMENU.BASD:k}BASDEMO3.BASENU.BAS +-@A $ -@A $0u + %D:DEMOMENU.BASD:h(! AHq +AY+6-B?-@4C"K%O aA`@'sAa@H}