@LY}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr AjLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ` }L)D ` ```߰`` %`))Ţ𲥢0``)) }ŢLD0```) eeFf&LD D {D JE ` } D C JE ``00!`IIiiLEIIii``E`II }ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)}`ԍԍ`"ԩ@ԩ` }A!}"}jj -AdA#}jtpleBPCPІѭ , A AD:QMAG.ZS V$} B V  A (S: JKB DE V   R%}UVT AQUICKmagazin Ausgabe 1UVT A(c) 1989 by Raindorf SoftUVT&}R A A Impressum/Anleitung A A Playerbewegung A A Voicebox mit QUICK A A'} Achtung! Fehlerteufel A A Verwechslungsgefahr A A Oekosimulation: WATOR A A 'Playerdemo'(} A A 'Voiceboxdemo' A A 'WATOR' W B V  A (S:)} JKB DE V  X A LS *}AD:QI.TXT VLU A LS AD:Q4.TXT VLU A LT +}AD:Q3.TXT VLU A LVT AD:Q1.TXT VLU A LT A,}D:Q2.TXT VLU A LT AD:Q5.TXT VLU A LU A-}D:INTDEMO.OBJ LU A LbU AD:VOICE.OBJ LU A.} LU AD:WATOR.OBJ °ð 9Y A LU A/} LP  JKB DE VS0} BHIDE V B V䭰 Aɀ ɀLWUVT AQUI1}CKmagazin einlegen - TASTE LP`αXi͍Yix A LW2} A ɀLWβ Xx  A LW A LW X3}P A mmmi 4} A L"X A L5W`XYXiYi)5}ii Aɀ LX`Ű°ϰðаXiͰYiΰXi@Ѱ6}YiҰǰȰϰаưư A ɀLZǰȰϰȭаǰiǰȰi7}ȰŰӰϰ԰аհ \ְϰװаŰiŰLZȍŰŰ Aɀ ɀLYx  A8} L7[ϰаưư A ɀL4[ѰҰXY AͰ9}@ AǰȰϰȭаǰiǰȰiȰӰϰ԰аհ \ְϰװаLv\x A :}Lv\ǰ8ǰȰȰǰȰϰȱаǰ8.ɰȰʰɰʰ Aɀ LN\XY;}ѰҰ AXY@ Aɰʰ˰ȱ̰Ӱ˰԰̰հ \ְ˰װ̰Lv\ǰ<}iǰȰiȰǰȰϰȱаЍ A L\ fЍ A L\ Eg=} A L?Z`ذڰٰ㰩䰭԰mذ簭>}հi谭簅谅߰ذ A L]߰  A L]ذLA]߰ ?} A L^㰍䰍 A L^ذLA]L^ ߰߰  A LL^@}ذLA]߰ A ɀLbc߰ {c߰߰@ A L_ذ԰mذ簭հi谭A}簅谅۰۰I A L_L_۰N A L5_L_۰B}G A Lf_L_۰K A L_L_۰A A C}L_ذLhcذLA]鰩갭߰  A L`ٰL`ٰ A L`ٰذD}԰հ =d尭氭m㰍尭m䰍氭對氍? Aɀ ɀL`Lhc߰` A E}La߰  Aɀ L`߰8 鰩L a߰i@鰩iLa߰鰩...갭m鰍F}m갍찭iְiװְװܰܰްݰmްְiװְװభMభమݰްݰݰG} A LaమݰݰݰLaް A LmaH} A Lbڰ A LbӰ8ӰڰLbڰ A I}LbӰiӰڰ߰  A L,cܰm㰍ᰩm䰍ⰭᰍⰍ? Aɀ ɀL,cJ}Lhc㰍䰍Ӱ 'Amܰ㰭iذLA]԰mذְհiװ`dﰭﰍ AK} LcLc A Lc`...򰭈mmiL}i`mi {c@ A M}LdiLe  A Ld   A L e cN} Aɀ ɀLLe  A ɀLemiiO}  A LGd`  JKB DE VAP} BHIDE V@A BHIDE V Q}B V AD:QMAG.OBJ P`ttR}6 R g` g`S} A (P: JKB DE V A  A LT}Mh BHIDE V䭊@ AU} LhiiL:j A L#j A Lh V} A L,i A LZi  A LW}i{ A Li  A Li  AX} L#jii Aii A LYh}llll xp8 cf 0fppppxp\}ppphppp``````pp px00000````0000000 p]}6>ppppxxppxp~<UUU^}<~~~<x`x`~<~~<_}0~0 ~ <~~<xxppxxpp`px```````}ppxxpp`0``````xp ~p px00`a}~x|nf8x8xxpp`0``````xp ~p px00`Quick-SourcetextD:VOICE.QIK ----------------Length: $0337Free : $7434----------------*Beispielprogramm zurc} Benutzung der*VOICE.LIB*Funktioniert nur mit angeschlossener*Sprachbox!!!INCLUDE[D:VOICE.LIB]BYTE[X,Z]ARRAY[d}Q(10)]MAINDATA(1660)[75,72,72,93,78,78,52,52,0]CLOSE(6)OPEN(6,12,0,"E:")POKE(752,1)SETCOL(2,3,4)-1COLOR(125)Pe}LOT(0,0).INITVOICE.SAYRAM(1660) ;"HALLO".SAY("a7=[=0U9W<:=0QC0") ;"jetzt* ;spricht die.SAY(f}"S5gg0LG8g1<;38S s}0 ;Array in den 120 IN1+ ;Zeichen langen Buf- IF IN1=120 ;fer eintragen IN1=0 ENDIF t} REPEAT ;Falls Buffer voll, UNTIL IN1<>OUT ;warten bis wieder* ;ein Zeichen frei* u} ;wird. SUB(P,48,P) ;Werteanpassung BUFFER(IN)=P ;Zeichen eintragen IN=IN1 Z+ P=PHON(Z) WENDE v}NDPROC** SAYRAM ***Losschicken eines Speicherbereichs,der*nur 31 Phoneme lang sein darf und mit*"0" enden mussPROC SA w}YRAMINWORD[ADR]LOCALBYTE[Z,P]ARRAY[PHON(32)]BEGIN Z=0 REPEAT ;Speicherbereich in PEEK(ADR,P) x} ;ein Array kopieren PHON(Z)=P Z+ ADD(ADR,1,ADR) UNTIL P=0 .SAY(PHON) ;und mit SAYENDPROC y} ;sprechen** VOICE ***Ausgeben der einzelnen Phoneme an*die Sprachbox mit Hilfe eines Inter-*rupts. Dieser VBI wird be z}i INITVOICE*automatisch eingeschaltet!INTER VOICELOCALBYTE[IN=1657,OUT=1658,Z,P,PORTA=54016]ARRAY[BUFFER(120)=1536 {}]BEGIN IPUSH ;Variablen retten ZPUSH AND(PORTA,128,P) ;Falls 7.Bit gesetzt IF P<>0 ;ist die Box berei |}t IF OUT<>IN ;Noch Zeichen auszu- Z=0 ;geben? P=BUFFER(OUT) ;Das Zeichen ist* }} ;an der Reihe PORTA=P ;Ausgeben REPEAT Z+ UNTIL Z=60 OR(P,64,PORTA) REPEAT ~} Z+ UNTIL Z=120 AND(P,63,PORTA) OUT+ ;naechstes Zeichen IF OUT=120 OUT=0 E }NDIF ENDIF ENDIF IPULL ;Variablen wieder ZPULL ;herstellenENDVBI OUT=120 OUT=0 E `AULBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`}L)D ` ```߰`` %`))Ţ𲥢0``))}ŢLD0```) eeFf&LD D {D JE `} D C JE ``00!`IIiiLEIIii``E`II}ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)}`ԍԍ`"ԩ@ԩ`}A ADD(I,1,I)UNTIL J=32END}PROCPROC MLADEBEGINOPEN(1,4,0,FNAME)BGET(1,6,16640)BGET(1,16384,16640)COL=15CLOSE(1)COL=0FNAME="D:QMAG.OBJ"CALL(0},0,0,20480)ENDPROCPROC EPSONBEGIN MODE=0 INIT(0)=27 INIT(1)=116 INIT(2)=1 INIT(3Uj -A| KHH]NN44 } B V  A (E: JKB DE V }} A R| S A a7=[=0U9W<:=0QC0 S A S5gg0LG8g1<;38S0 ;Bass wird leiser VO1- ENDIF IF VO<>0 ;Snare wird } VO- ;schneller leiser VO- ENDIF IPULL ;Variablen zurueckENDVBI ;Fertig ird wAlVLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`}L)D ` ```߰`` %`))Ţ𲥢0``))}ŢLD0```) eeFf&LD D {D JE `} D C JE ``00!`IIiiLEIIii``E`II}ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)}`ԍԍ`"ԩ@ԩ`}A}A}AlVj -Ac8||8|||||8}0$$l($DB(($l $$BB(((Hl(HD 0(HHl (HDƂ A EDABCCBADE A JIFGHHGFIJ AAKF} AFKA B V  A (S: JKB DE V/  }Щԩԩ 0AoЩЩ  3AUVT ALet's Break!!} A' A>/ A1120112211201022TQQ \}x A LHRLzRx  A LzR΀΂΂} A LR A LR SLR S A }LS   A LES A LzSLS}ЭЭ T 3A T A LR} A L+TL4T T 3A T} A LS`8Ai i` A LT` @H}HH A LU  A LhU}1 A LULU2 A LU ҩȍҭiҭiҢ } A ɀL&V΅ A ɀLUV΄΄ @hhhLbh t@A @A @GPlayerbewegung in Quick@K@A @A @A QUICK ist die erste Programmiersprache, die einen PLAYER-Befehl zur Verfgung } stellt. So kann man mit wenigen Zeilen, eine animierte Figur ber den Bildschirm marschieren lassen.@A Nachwievor macht es} die grsste Arbeit den Player zu entwerfen und die Daten einzutippen. Beides entfllt fr Sie, wenn Sie sich unser Beispiel}programm anschauen. Dort sehen Sie gleich zu Beginn einen Datenblock. Hier finden sich die Daten fr den Krper eines Mnnc}hens (Player 2) und dann auch noch viele Daten fr die verschiedenen Beinstellungen des Mnnchens (Player 1). Die Daten fin}den im Bereich ab 1536 Platz.@A Nun folgen vier Arrays, die mit eigenartigen Buchstabenfolgen gefllt sind. Jeder Buchstabe} entspricht einer Beinstellung (von A=1 bis K=11). Um nun das Mnnchen nach links laufen zu lassen, muss man nur das Array "}LINKS" der Reihe nach auslesen und die entsprechenden "Beindaten" in den Player kopieren.@A @A Anders als blich wollen wi}r heute nicht die Playerbewegung in einen Interrupt legen, sondern im Hauptprogramm belassen. Stattdessen soll der VBI eine } Schlagzeugbegleitung erzeugen.@A Doch nun zuerst zum Hauptprogramm:@A Hier wird der Joystick abgefragt und entsprechend d}er Player nach links oder rechts bewegt. Dabei werden natrlich die richtigen Beinstellungen nach dem obigen System dargest}ellt. Ausserdem wird noch der Trigger abgefragt. Ist er gedrckt, wird das Mnnchen um 180 Grad gedreht, d.h. es wird nun da}s Array "LR" bzw. "RL" abgespielt und dann geht's ganz normal weiter.@A @A Innerhalb des Hauptprogramms werden zwei Unterp}rogramme aufgerufen:@A BERECH: Es berechnet aus der Beinnummer die Anfangsadresse der entsprechenden Daten.@A WAIT: Dient} zur Verzgerung. Dazu wird der Wert 4 in einen OS-Timer (540) geschrieben und gewartet bis dieser heruntergezhlt wurde.@A } @A @A Nun fehlt nur noch der kleine Interrupt, der unser kleines Programm mit dem ntigen Sound versorgt.@A Dazu wird vo}r dem Einschalten des VBI ein Rhythmussarray angelegt. Er enthlt 16 Werte, fr jeden Taktschlag einen und gibt an welches I}nstrument wann gespielt wird. Es gibt zwei Instrumente: Bass=1 und Snare=2.@A Der VBI liest nun das Array Wert fr Wert aus} und stimmt die entsprechenden Tne an. Dies geschieht natrlich etwas gebremst, d.h. nur jedes 10te Mal, denn sonst wre }ein Taktschlag nur 1/50 Sekunde lang.@A Der Sound wird hier nicht mit dem SOUND-Befehl erzeugt, sondern direkt ber die Har}dwareregister des POKEY. Um ein Instrument erklingen zu lassen, wird das Lautstrkeregister auf 15 (=laut) gesetzt, und der} ungebremste Teil des VBI sorgt dafr, dass dieser Wert heruntergezhlt, also leiser wird.@A @A So nun wissen Sie theoreti }sch wie das Programm aufgebaut ist und was es tut. Aber knnen Sie sich auch vorstellen was wirklich auf dem Bildschirm ab }luft? Schauen Sie es sich an und lassen Sie "die Puppen tanzen".@A @A A.B.@A @A wirklich auf dem Bildschirm ab\@A @A @GDie Variablenbergabe@K@A @A @A Bei der Programmierung von Unterprogrammen in QUICK ist es wie man weiss ohne P! }robleme mglich Variablen ans Unterprogramm zu bergeben, und vom Unterprogrammm Variablen entgegenzunehmen.@A Die Handhabu! }ng dieser bergabevariablen geschieht jedoch auf eine andere Art als z.B. bei der Programmiersprache PASCAL oder C. Das ist !}der Grund, weshalb man beim folgenden Programm eventuell eine berraschung erlebt:@A @A @A BYTE@A [@A B@A ]@A MAIN@A !} B=10@A .ROUTINE(B,B)@A PRINT(B)@A ENDMAIN@A PROC ROUTINE@A IN@A BYTE@A [@A C@A ]@A OUT@A BYTE@A [@A C@!}A ]@A BEGIN@A ADD(C,5,C)@A ENDPROC@A @A@A Was erwartet man nun von diesem Programm?@A Es weist zunchst der Variabl!}en B den Wert 10 zu. Dann bergibt es den Wert der Variable B an die IN-Variable C des Unterprogramms. Dieses Unterprogram!}m soll nun 5 zu C addieren, und damit 15 ans rufende Programm zurckgeben, oder vielleicht doch nicht?@A Bei der berlegung!} wurde nmlich nicht bedacht, dass die IN-Variable C @I nicht @N mit der OUT-Variable C identisch ist. Es handelt sich dabei!} also um 2 Variablen des gleichen Names, die im gleichen Programmteil erklrt wurden.@A In einem solchen Fall verwendet d!}er Compiler meist die IN-Variable. Das bedeutet also folgendes:@A Das Unterprogramm bekommt den Wert 10 geliefert und schre!}ibt ihn in die IN- Variable. Dann wird dazu 5 addiert. Nun wird der nicht festgelegte Inhalt von OUT-C ans rufende Programm!} zurckgegeben. Im Normalfall wird das Ergebnis also 0 sein (es knnte aber auch irgend ein zuflliger Wert in OUT-C gestan!}den haben).@A @A Sie sehen, @I so @N darf man es nicht machen. Richtig ist folgendes:@A @A @A BYTE@A [@A B@A ]@A MAI!}N@A B=10@A .ROUTINE(B,B)@A PRINT(B)@A ENDMAIN@A PROC ROUTINE@A IN@A BYTE@A [@A C1@A ]@A OUT@A BYTE@A [@!}A C2@A ]@A BEGIN@A ADD(C1,5,C2)@A ENDPROC@A @A@A Nun erhlt man als Ergebnis wirklich 15.@A @A @A H.S. @A [@ z@A @A @A @GDie Sprachbox in QUICK@K@A @A Zur Ansteuerung der ATARImagazin-Sprachbox gab es ja bisher nur ein BASIC- und%} Maschinenprogramm. Nun wollen wir jedoch die knstliche Stimme auch in QUICK ertnen lassen.@A @A Dazu bedienen wir uns n%}atrlich der speziellen Fhigkeiten dieser Programmiersprache:@A -Libraries@A -Interrupts@A @A @A @G Die VOICE-Library %}@K@A @A In dieser Library befinden sich die notwendigen Routinen zum Ansprechen der Voicebox. Das schne daran ist, dass S%}ie sich (wenn Sie wollen) berhaupt keine Gedanken ber die programmtechnische Verwirklichung dieser Routinen machen mssen% }. Es reicht vllig aus, wenn Sie sich mit den dadurch erzeugten neuen "Befehlen" befassen:@A @A INITVOICE@A Diese Routine%!} schaltet die Datenflussrichtung am Joystickport um, schaltet einen VBI ein, und sendet eine Pause zur Voicebox. Diese Routi%"}ne muss also zu Anfang aufgerufen werden.@A @A VEND@A Damit wird die Benutzung beendet. Zunchst wird gewartet bis alle n%#}och anstehenden Phoneme ausgegeben wurden. Dann wird eine Pause gesendet und schliesslich wird der Joystickport wieder auf %$}Eingang geschaltet.@A @A SAY@A Mit diesem Befehl wird ein Array "gesprochen". Das Array darf nicht lnger als 31 Zeichen %%}sein. Wie gewhnlich (in Quick) muss es mit einer 0 enden. Wenn Sie den Befehl .SAY("Hallo") geben, wird diese 0 ja sowieso %&}von QUICK als Endekennzeichen des Strings angehngt.@A Das Format des Arrays ist das gleiche wie in BASIC. Das heisst es k%'}nnen die ASCII-Zeichen 48 bis 111 verwendet werden. Welche Laute das dann sind, steht im ATARImagazin 4/88. Intern werden d%(}ann die Werte 0 bis 63 an die Box geschickt, d.h. es wird 48 abgezogen.@A @A SAYRAM@A Damit kann der Inhalt eines Speiche%)}rbereichs "gesprochen" werden. Auch hier gilt, dass hchstens 31 Bytes, die mit einer 0 enden mssen ausgegeben werden.@A B%*}eim Aufruf mssen Sie nur angeben, ab welcher Adresse gesprochen werden soll:@A .SAYRAM(1660) spricht also ab Adresse 1660.@%+}A @A Das tolle an der Sache ist, dass der Programmablauf durch SAY und SAYRAM nicht aufgehalten wird, weil die Daten zunc%,}hst in einen 120 Zeichen langen Buffer geschrieben werden, und dann vom VBI langsam an die Voicebox ausgegeben werden. Erst%-} wenn der Buffer voll ist, muss man warten bis die Box zuende gesprochen hat.@A @A @I Achtung ! @N@A Die Library benutzt %.}den Speicherbereich von 1536 bis 1659 als Buffer. Das heisst, Sie drfen diesen Bereich in Ihrem Programm nicht verndern. %/}Ausserdem wird ein VBI eingeschaltet, so dass Sie keinen weiteren in Ihrem Programm bentzen knnen.@A @A Das ist schon al%0}les, was Sie zur Benutzung der Library wissen mssen.@A@A @A @A @I VOICE.LIB Intern @N@A@A Nun, wie geht das Ansprechen d%1}er Voicebox denn genau vor sich? Wir wollen hier nicht darauf eingehen, wie die Daten an sich bergeben werden (das steht j%2}a in der Anleitung), sondern wie QUICK seine Buffer handhabt.@A SAY und SAYRAM schreiben die Daten zunchst in einen Buffer %3}ab Adresse 1536. dabei erhhen sie einen Zeiger (IN), der angibt, wohin der nchste Laut in den Buffer eingetragen werden s%4}oll. Nebenbei luft ein VBI, der die Daten aus diesem Buffer liest und an die Voicebox schickt. Dazu hat der VBI einen Zeig%5}er (OUT) der angibt, welches Zeichen als nchstes ausgegeben werden soll. Dabei gibt es zwei kritische Punkte:@A -Der Buffe%6}r ist voll. Da der Buffer nur 120 Byte lang ist, springt der Zeiger am 120. Zeichen zum 0.Zeichen zurck. Wird der IN-Zeiger%7} nun schnell erhht, kann es sein, dass er den OUT-Zeiger "berrundet". Das darf nicht passieren, weil sonst Daten verloren%8} gehen. Deshalb muss SAY in diesem Augenblick, d.h. wenn IN=OUT-1 ist, solange warten, bis der OUT-Zeiger durch den VBI wei%9}ter erhht wurde. In so einem Fall, wird der Programmablauf also angehalten.@A -Der Buffer ist leer, d.h. der OUT-Zeiger ha%:}t den IN-Zeiger eingeholt. Das ist kein Problem: Der VBI tut einfach solange nichts, bis der IN-Zeiger durch SAY wieder erh%;}ht wird.@A @A Bei der Besprechung der VOICE.LIB-Routinen haben wir eine Routine nicht erwhnt:@A VOICE:@A Diese Routine%<} ist der Vertical-Blank-Interrupt, der die Daten zur Box schickt. Diese Routine wird aber automatisch bei INITVOICE eingesch%=}altet.@A @A @A @GDas Beispielprogramm@K@A@A Das Beispielprogramm auf dieser Diskette zeigt die Anwendung der neuen Routi%>}nen und beweist, dass es mglich ist whrend des Sprechens das Programm ungehindert fortzusetzen.@A Auf der Diskette befind%?}et sich sowohl das compilierte VOICE.COM als auch das Quellfile VOICE.QIK. Vor allem aber ist auch die VOICE.LIB auf der Di%@}skette vorhanden. Somit steht der Sprachprogrammierung in QUICK nichts mehr im Wege.@A @A @A H.S. @A auf der Di$q@A @A @GDer Fehlerteufel@K hat zugeschlagen @A @A @A Bei einem so umfangreichen Projekt wie QUICK ist es kaum zu umgehe)B}n, dass irgendwo Fehler im System auftreten. Bisher jedoch hat der QUICK-Compiler noch keinen Grund zur Beanstandung gegebe)C}n. Jedoch haben sich ins Handbuch einige Fehler eingeschlichen:@A @A -Der Befehl zum Ermitteln der Anfangsadresse eines Un)D}terprogrammms heisst nicht wie angegeben PROCADR sondern @I PADR @N. PADR(Name) schreibt also die Anfangsadresse des Unterp)E}rogramms Name in die Speicherzellen 208,209.@A @A -Quickprogramme knnen nach dem Compilieren abgespeichert werden und knn)F}en dann im DOS geladen werden. Sie mssen aber von Hand bei der Adresse $5000 gestartet werden. Wenn Sie das Programm selbs)G}tstartend machen wollen, mssen Sie diese Adresse (z.B. mit ATMASII) ans Programm anhngen.@A @A -Auch der Speicherplan ha)H}t einen kleinen Fehler:@A Der Compiler reicht nur von $1F00 bis $40FF. Dafr beginnt der Runtimeteil dann schon bei $4100. )I}Ausserdem ist der Bereich von 1536 bis 1792 nicht so ganz frei, weil dort der aktuelle Filenamen beim Wechseln vom Editor in)J} den Compiler zwischengespeichert wird. Es passiert aber nichts gefhrliches wenn Sie ihn berschreiben.@A @A @A H.S. @)K}A Compiler zwischengespeichert wird. Es passiert aber nichts gefhrliches wenn Sie ihn berschreiben.@A @A @A H.S. @(@A @A @GDas QUICKmagazin@K@A @A @A Das QUICKmagazin erscheint beim Verlag Werner Rtz zum Preis von DM 9.- auf Diskette-M}. Die Programme und Texte auf dieser Diskette stammen von Andreas Binner und Harald Schnfeld, den Autoren von QUICK.@A Das-N} Magazin soll all jenen helfen, die die neue Programmiersprache QUICK erlernen und richtig ausnutzen wollen.@A Eine stndig-O}e Rubrik soll sich mit Problemen beschftigen, die uns zu Ohren gekommen sind. @I Schreiben Sie uns@N also, wenn Sie Hilfe b-P}entigen, oder selbst Tips geben knnen.@N@A Der Schwerpunkt liegt jedoch auf der Erklrung der speziellen Mglichkeiten v-Q}on QUICK anhand ausgewhlter @IProgramme@N , die mit ausfhrlichen Texten kommentiert werden. Zu jedem Programm befindet sic-R}h ein Text, das Quellprogramm und das fertig compilierte Maschinenprogramm auf der Disk.@A @A @A @A @GDie Bedienung der -S}Disk@K@A @A Die Diskette wird mit Hilfe des Joysticks in Port 1 gesteuert. Nach dem Booten befinden Sie sich im Men. Hier-T} knnen Sie einen der Texte zum Lesen anwhlen, ein Bild laden, oder ein Programm starten. Bewegen Sie dazu einfach den @I -U}inversen @N Balken auf den entsprechenden Eintrag und drcken Sie den Trigger.@A Texte knnen auch @I ausgedruckt @N werden-V}, indem Sie whrend des Lesens die SELECT-Taste (fr ATARI Drucker) oder die OPTION-Taste (fr EPSON Drucker) drcken.@A A-W}ngewhlte Texte knnen nach oben und unten gescrollt werden, indem Sie den Joystick in die entsprechende Richtung bewegen. Z-X}ur Rckkehr ins Men drcken Sie den Trigger.@A @A en, indem Sie den Joystick in die entsprechende Richtung bewegen. Z,9d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%1Z} DD˙`  }J)Lr J  ((  p L ()   J1[}L= ( L 0q A    IB JC;? D W 1\} LL  ` W )LA!  ߰")-݆ p" 1]} $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`1^}$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H 1_}p h  hyhy D L> L JJ    ! LA*` BF1`}7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L1a}EE !E^ ^ E E7EȩEdE/EȩE  D1b} .L }  ;F d  ;?F7F? ( .   Z D LL d 1c} . D  L    p  E` , d)  D L) 0BM݊L݉1d} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G1e} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G1f} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK1}}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU 1~} L ? .  t`GBJ ~DEHI B V0dV1}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh1}DEL8HI4 0 HI,0 0  9 .G VLO1},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI1} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI1} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO 1}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -1}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH1}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu 0} 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG5}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES5}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N'5}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx 5}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT5} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL5}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD5}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.5}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC5}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#5}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY5}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A5}LLOWED IN DESTINATION 0 <.|K BoH`B(HIoDHE V #LF 9}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ9}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`9} d'hhiiȱȱȱ m9}m iiHH E````9}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J 9}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM9}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM9}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F9}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX9}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)9}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM9}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM9}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?9}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)9}`ԍԍ`"ԩ@ԩ`9}A F+ W=IN(F) 9}ADD(FADR,W,NADR) POKE(NADR,F2) PEEK(ZUG,F1) POKE(ZUG,128) ADD(ZUG,W,ADR) IF F1=BRTD F=R9}ANDOM AND(F,3,F) F+ ADD(F,ART,F) POKE(FADR,F) POKE(ADRXcj

}CLR(155,15) POKE(82,0) .GRAF0(12,0,4,6) DOWN(0)=29 DOWN(1)=29 DOWN(2)=29 DOWN(3)=0 ZEIT=0 POS(10,21) ?("Q>}UICKmagazin Teil 1") POS(0,0) ?(" -----W A T O R-----") ?(" Die ^kosimulation") ?(" ") ?(" >} RAINDORF SOFT 89") ?(" programmed by") ?(" H.Sch|nfeld") ?(DOWN) SIGN ?("Anfangszahl der >}Fische"); INPUT(ANZF) IF ANZF>798 ANZF=798 ENDIF ?("Anfangszahl der Haie "); INPUT(ANZH) IF ANZH>98 ANZH>}=798 ENDIF ?(" ") ?("Brutdauer der Fische "); INPUT(BRTF) IF BRTF<1 BRTF=1 ENDIF ?("Brutdauer der Haie >}"); INPUT(BRTH) IF BRTH<1 BRTH=1 ENDIF ?(" ") ?("Fastenzeit der Haie "); INPUT(FAST) IF FAST<1 FAST=1>} ENDIF UNSIGNENDPROC PROC GRAF0INBYTE[C1,C2,D1,D2]BEGIN DMA=0 NMIEN=64 DATA (28600) [ 112,112,112 >} 66,0,112 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 130,112,2,2,2 65,184,111 ] SDL=28600 POKE(756,124) SAV=28672 CO>}L1=C1 COL2=C2 COLP1=D1 COLP2=D2 DLI(FARBE) DMA=34ENDPROCINTER FARBEBEGIN PUSH REGA(WSYNC) COLPF2=COLP2 > } COLPF1=COLP1 PULLENDDLIPROC AUFBAUBEGIN FIS =28672 HUNG=29696 FISZ=30720 X=0 POKE(752,1) CLR(112,12) > } .GRAF0(14,130,2,56) POS(4,21) ?("Das Leben auf WATOR entsteht...") .SETUP(ANZF,1,BRTF) .SETUP(ANZH,5,BRTH) POS(4,2> }1) ?(" ") POS(8,23) ?("WATOR RAINDORF SOFT 89");ENDPROCPROC SETUPINWORD[ANZ]BY> }TE[ART,BRTD]BEGIN I=0 WHILE I }F=0 F=RANDOM AND(F,3,F) ADD(F,ART,F) POKE(ADR,F) IF ART=5 ADD(HUNG,RND,ADR) POKE(ADR,0) E>}NDIF ADD(FISZ,RND,ADR) REPEAT F=RANDOM UNTIL F}NDINWORD[MAX]OUTWORD[WERT=200]LOCALBYTE[WERTH=201]BEGIN REPEAT WERT=RANDOM WERTH=RANDOM AND(WERTH,3>},WERTH) UNTIL WERT<=MAXENDPROCPROC LISTEINWORD[FBEG,FPOS]LOCALWORD[FEND]BEGIN SIGN MF=0 ADD(FBEG,799>},FEND) ADD(FPOS,FBEG,POS) FPOS=POS SUB(POS,40,POS) IN(2)=-!40 IF POS}F PEEK(POS,I0) IN(0)=I0 INLINE [ 165,212,197,215,176,5 ] MF=1 ADD(FPOS,40,POS) IN(6)=!40 IF POS>FEND>} SUB(POS,800,POS) IN(6)=-760 ENDIF PEEK(POS,I0) IN(4)=I0 INLINE [ 165,212,197,215,176,5 ] MF=1 IF J>}=0 ADD(FPOS,39,POS) IN(10)=!39 ELSE SUB(FPOS,1,POS) IN(10)=-!1 ENDIF PEEK(POS,I0) IN(8)=I0 INLINE >} [ 165,212,197,215,176,5 ] MF=1 IF J=39 SUB(FPOS,39,POS) IN(14)=-!39 ELSE ADD(FPOS,1,POS) IN(14)=!>}1 ENDIF PEEK(POS,I0) IN(12)=I0 INLINE [ 165,212,197,215,176,5 ] MF=1 UNSIGNENDPROCPROC SCHWIMMBEGIN>} .CLRZUG I=0 J=0 FISCHE=0 HAIE=0 ADD(ZEIT,1,ZEIT) REPEAT ADD(FIS,I,FADR) PEEK(FADR,F2) INLINE [ >} 165,214,208,3 ] JUMP(3) ADD(FISZ,I,ZUG) PEEK(ZUG,F1) INLINE [ 165,216,201,128,144,3 ] JUMP(3>}) INLINE [ 165,214,201,5,144,3 ] JUMP(5) ADD(FISCHE,1,FISCHE) VG=1 JUMP(6) -5 ADD(HUNG,I,ADR)>} PEEK(ADR,HUN) IF HUN=FAST POKE(FADR,0) POKE(ZUG,128) VG=0 ELSE VG=5 ADD(HAIE,1,HAIE) END>}IF -6 .LISTE(FIS,I) INLINE [ 165,213,208,3 ] JUMP(2) IF F2<5 .ZIEHE(0,0>},BRTF) ELSE .ZIEHE(4,4,BRTH) IF OK=0 ADD(HUNG,I,ADR) PEEK(ADR,HUN) >} .ZIEHE(0,4,BRTH) HUN+ ADD(NADR,1024,ADR) POKE(ADR,HUN) ELSE ADD>}(NADR,1024,ADR) POKE(ADR,0) ENDIF ENDIF -2 -3 J+ IF J=40 J=0 ENDIF ADD(I>},1,I) UNTIL I=800 POS(5,21) ?("ZEIT:",ZEIT); POS(15,21) ?("FISCHE:",FISCHE," "); POS(28,21) ?("HAIE:",HAIE," ")> }; .KURVE IF CONSOL<>7 IF CONSOL=5 .SWAPG15 ELSE IF CONSOL=3 .GRAF0(14,130,2,56) ELSE >!} IF CONSOL=6 JUMP(1) ENDIF ENDIF ENDIF ENDIFENDPROCPROC KURVELOCALBYTE[ANZ]BEGIN>"} MODE=15 SAV=BSADR COLOR(0) PLOT(X,0) DRAW(X,159) DIV(HAIE,6,ANZ) SUB(150,ANZ,ANZ) COLOR(1) PLOT(X,ANZ) D>#}IV(FISCHE,6,ANZ) SUB(150,ANZ,ANZ) COLOR(2) PLOT(X,ANZ) COLOR(0) PLOT(0,0) X+ IF X>159 X=0 ENDIF SAV=286>$}72 MODE=0ENDPROCPROC SWAPG15BEGIN NMIEN=64 DMA=0 SDL=DLADR SETCOL(0,15,14) SETCOL(1,5,8) DMA=34ENDPROCP>%}ROC CLRZUGBEGIN I=30720 REPEAT PEEK(I,J) AND(J,127,J) POKE(I,J) ADD(I,1,I) UNTIL I=31743ENDPROCPRO>&}C ZIEHEINBYTE[WAS,ART,BRTD]BEGIN OK=0 F=RANDOM AND(F,3,F) F2=F ASLB(F) ASLB(F) K=0 REPEAT F1=IN(F)>'} IF WAS>0 IF F1=0 F1=64 ENDIF ENDIF IF F1<=WAS F2+ ADD(F2,ART,F2) POK>(}E(FADR,0) F+ F+ W=IN(F) ADD(FADR,W,NADR) POKE(NADR,F2) PEEK(ZUG,F1) POKE(ZUG,128) >)} ADD(ZUG,W,ADR) IF F1=BRTD F=RANDOM AND(F,3,F) F+ ADD(F,ART,F) POKE(FADR,F)>*} POKE(ADR,128) ADD(FADR,1024,ADR) POKE(ADR,0) ELSE ADD(F1,129,F1) POKE(ADR,F1)>+} ENDIF K=4 OK=1 ELSE K+ NADR=FADR ADD(F,4,F) F2+ IF F=16 F=0 >,} F2=0 ENDIF ENDIF UNTIL K=4ENDPROC NADR=FADR ADD(F,4,F) F2+ IF F=16 F=0 <5< <88<88x8800: x@7793> 0B.}`@ 80 0 ~~`0 0```nf>ff~fff~~f<flxxlf`````~cwkccfv~~nfB0}8pp8?B2}ww<~~~<x`x`~<~~f>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8<fB4}kc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~<~~<$ff>|f```>`<|~ffff>fff<ck>6f< x~ 0~<~~<$gF7JLSJFNVeiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` AF8} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BIIF9}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PDF:}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C F;} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`F<}L)D ` ```߰`` %`))Ţ𲥢0``))F=}ŢLD0```) eeFf&LD D {D JE `F>} D C JE ``00!`IIiiLEIIii``E`IIF?}ii`UVT E`UVT E`HH`HH"`ʼnLSFňF@}LSF`mm mm 88888 ͭ`FA}iiii8 ͭ```hhȱȱȄLF FB}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF FC}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-ȄFD}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`FE} d'hhiiȱȱȱ mFF}m iiHH E````FG}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J FH}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMMFI}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMMFJ}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`FFK}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeXFL}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)FM}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MMFN}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMMFO}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?FP}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)FQ}`ԍԍ`"ԩ@ԩ`FR}A(I,1,I) JUMP(100) ENFS}DIF IF J=13 J=32 ENDIF IF J=10 J=32 ENDIF .CHLEN(J,L)IF L>8 L=8ENDIF IF J<>32 ADD(LEN,L,LEN) ENFT}DIF-100 ADD(I,1,I)UNTIL J=32ENDPROCPROC MLADEBEGINOPEN(1,4,0,FNAME)BGET(1,6,16640)Zjj -AdAFU}jtpleBPCPІѭ , A AD:QMAG.ZS U B VFV}  A (S: JKB DE V   RFW}UVT AQUICKmagazin Ausgabe 1UVT A(c) 1989 by Raindorf SoftUVTR A FX}A Impressum/Anleitung A A Playerbewegung A A Voicebox mit QUICK A A Achtung! FehlerteufeFY}l A A Verwechslungsgefahr A A Oekosimulation: WATOR A A 'Playerdemo' A A 'VoiFZ}ceboxdemo' A A 'WATOR' V B V  A (S: JKBF[} DE V   A LpS AD:QI.TXT ULxU F\} A LS AD:Q4.TXT ULxU A LS AD:Q3.TXT ULxU F]}A L*T AD:Q1.TXT ULxU A LhT AD:Q2.TXT ULxU AF^} LT AD:Q5.TXT ULxU A LT AD:INTDEMO.OBJ LxUF_} A L6U AD:VOICE.OBJ LxU A LxU AWATOR.OBJ F`} Y A LU A LP Fa} JKB DE VSX BHIDE VFb} B V䭬 Aɀ ɀLVUVT AQUICKmagazin einlegen - TASTE LP`ίFc}Xi͍Yix A L]W A ɀL]Wΰ Xx Fd} A LW A LW XP A mmFe}mi  A LWFf} A LW`XYXiYi)iiFg} Aɀ LX`ðͰΰXi˰YḭXi@ϰYiаŰưͰΰİFh}İ A ɀLYŰưͰȭΰŰiŰưiưðѰͰҰΰӰ \԰ͰհΰðiðLYFi}ȍðð Aɀ ɀLRYx  A L[ͰΰİİFj} A ɀL[ϰаXY A˰̰@ AŰưͰȭΰŰiFk}ưiưѰͰҰΰӰ \԰ͰհΰLF\x A LF\Ű8ŰưưŰưͰFl}ΰŰ8.ǰưȰǰȰ Aɀ L\XYϰа AXYFm}@ AǰȰɰȱʰѰɰҰʰӰ \԰ɰհʰLF\ŰiŰưiưŰưͰȱΰЍFn} A Lr\ fЍ A L\ g A LZ`Fo}ְذװᰩⰭҰmְ尭Ӱi氭尅氅ݰְ Fp} A L]ݰ  A L]ְL]ݰ  A L]ᰍⰍFq} A L]ְL]L] ݰݰ  A L^ְL]ݰ A ɀL2cFr}ݰ Kc찍ݰݰ@ A L_ְҰmְ尭Ӱi氭尅氅ٰٰI A Fs}L^L_ٰN A L_L_ٰG A L6_L_ٰFt}K A Lg_L_ٰA A L_ְL8cְL]簩谭ݰ Fu} A L_װLf`װ A Lf`װְҰӰ d㰭䰭mᰍ㰭mⰍ䰭Fv}㰍䰍? Aɀ ɀLf`L8cݰ` A L`ݰ  Aɀ LFw}`ݰ8 簩L`ݰi@簩iL`ݰ簩...谭m簍鰭m谍갭i԰iհ԰հڰڰFx}ܰ۰mܰ԰iհ԰հްްMްް۰ܰ۰۰ A Laް۰۰Fy}۰Laܰ A L=a A LZbذFz} A LWbѰ8ѰذLbذ A LbѰiѰذݰ  AF{} Lbڰmᰍ߰mⰍభ߰఍? Aɀ ɀLbְL8cᰍⰍѰ 'AmڰF|}ᰭiְL]Ұmְ԰Ӱiհ`d밍 A LcLcF}} A LPc밍`...𰭈mﰍmii`mF~}i Kc찍@ A L~diLWe  A F}Ld   A Ld ﰩ c Aɀ ɀLeF}  A ɀLWemii  A Ld`F}  JKB DE VA BHIDE VF}@A BHIDE V B V AD:QMAG.OBJ P`F}tt6 R F} Zg` Zg` A (P: F}JKB DE V A  A Lh BHF}IDE V䭊@ A LwhiiL jF} A Li A Lh  A LhF} A L*i  A LXi{ A LiF}  A Li  A LiiiF} Aii A L)h B V`iiD]@A @A @GWator - Die kosimulation@K@A @A @A Als spezielle Zugabe auf dieser Disk finden Sie diesesmal ein geradezu leJ}gendres Simulationsprogramm.@A @A Auf dem Planeten Wator findet ein gnadenloser Kampf ums berleben statt. Aber ausnahmesJ}weise kmpfen nicht waffenstarrende Raumschiffe oder andere Weltraummonster miteinander,sondern Fische! Der Planet wird nmJ}lich vollstndig von einem riesigen Ozean bedeckt, der eigentlich ein Paradies fr die kleinen Fische sein knnte, wren daJ} nicht die gefrssigen Haie...@A Diese Geschichte stammt aus der Computerecke des "Spektrum der Wissenschaft 2/85" und hat J}dazu gefhrt, dass die Simulation dieses kosystems zu einem Muss fr jedes Computersystem geworden ist.@A @A @A @GDie SiJ}mulation@K@A @A Der Watorozean besteht aus 40*20 Feldern, die zunchst alle leer sind. Zu Beginn wird eine bestimmte AnzahJ}l von Fischen und Haien im Ozean ausgesetzt. Nun beginnt das Leben im Meer,das in Zyklen abluft. Jeder Zyklus besteht aus J}2 Teilen:@A @A 1.Fischsimulation@A Zunchst versuchen sich die Fische auf eines der 4 angrenzenden Felder zu bewegen. DasJ} geht natrlich nur, wenn wenigstens eines der Felder frei ist. Ist der Fisch am Rand des Bildschirms angekommen, taucht er J}auf der anderen Seite wieder auf. Hat sich der Fisch bewegen knnen, so vermehrt er sich, wenn seine Brutzeit beendet ist. J}In diesem Fall entsteht an der alten Position ein neuer Fisch.@A @A 2.Haisimulation@A Die Haie versuchen zunchst, einen J}Fisch auf einem der angrenzenden Felder zu fressen und dorthin zu schwimmen. Ist kein Fisch in der Nhe, so wollen sie sichJ} wenigstens bewegen. Denn nur dann knnen sie sich auch vermehren. Besonders wichtig ist aber das Fressen, denn hat ein Hai J}zulange fasten mssen, so stirbt er.@A @A @A @GDie Darstellung@K@A @A Das Programm stellt den Ozean und das Leben darinJ} auf dem Hauptbildschirm mit einer ansprechenden Fisch/Hai-Grafik dar. So kann man schn verfolgen wie die Fischschwrme voJ}n den Haien gejagt werden. Auf einem 2. Bildschirm werden zustzlich 2 Kurven gezeichnet, die die zahlenmssige Entwicklung J}der beiden Lebensformen darstellen. Sie werden sehen, dass oft 2 leicht versetzte Schwingungen entstehen, fast so wie in deJ}r Realitt!@A @A @A @GDas Programm@K@A @A Sie knnen sich sicher vorstellen, dass das Geschehen im Ozean stark davon abJ}hngen wird, wie lange die Brutzeit der Fische und der Haie und die Fastenzeit der Haie ist: Vermehren sich die Haie z.B. zuJ} schnell, so werden sie alle Fische auffressen und danach verhungern usw. Zu Beginn des Programms knnen Sie deshalb angebeJ}n, wieviele Zyklen die Brutzeit der Fische, der Haie und die Fastenzeit der Haie lang sein soll. Ausserdem kann auch angegebJ}en werden wieviele Fische und Haie zu Beginn ausgesetzt werden sollen (zusammen hchstens 800!). Nun beginnt die SimulationJ}. Zunchst sehen Sie den Hauptbildschirm. Am Ende eines jeden Zyklus knnen Sie mit SELECT auf den 2. Bildschirm umschaltenJ}. Mit OPTION gelangen Sie dann wieder zum Hauptbildschirm. Mit START beginnen Sie das Programm von vorne.@A Auf der DiskettJ}e befindet sich auch der umfangreiche Quelltext des Programms, aber aufgrund der Lnge knnen wird nicht nher darauf eingehJ}en.@A @A @A @GTips@K@A @A Sie werden sicher einige Zeit knobeln mssen, bis Sie ein stabiles kosystem einrichten knneJ}n. Orientieren Sie sich dabei ruhig ein wenig an der Wirklichkeit. Vor allem die Fische sollten in Schwrmen auftreten.@A @J}A @A @GDie Bedienung des Programms:@K@A @A Zu Beginn des Programms knnen Sie angeben, wieviele Zyklen die BrutzeitJ} der Fische, der Haie und die Fastenzeit der Haie lang sein soll. Ausserdem kann auch angegeben werden wieviele Fische und HJ}aie zu Beginn ausgesetzt werden sollen (zusammen hchstens 800!). Nun beginnt die Simulation. Zunchst sehen Sie den HauptbJ}ildschirm auf dem der Ozean dargestellt wird. Am Ende eines jeden Zyklus knnen Sie mit SELECT auf den 2. Bildschirm, auf dJ}em die Entwicklung der Population angezeigt wird, umschalten. Mit OPTION gelangen Sie dann wieder zum Hauptbildschirm. Mit J}START beginnen Sie das Programm von vorne@A @A H.S. @A . Mit OPTION gelangen Sie dann wieder zum Hauptbildschirm. Mit H=/