NNNNNN/0p NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNo  @`! #@%`')+-/1 3@5`C@E`[]_a c@e`gikmoq s@u`wy{} @` @ ` @ ` @ ` @ ǀ ɠ @ ` ׀ ٠  O` @`!Aa   !a!!#A%a')+-/15a79;=?A!OEaGo  @`! #@%`')+-/1 3@5`C@E`[]_a c@e`gikmoq s@u`wy{} @` @ ` @ ` @ ` @ ǀ ɠ @ ` ׀ ٠  O` @`!Aa   !a!!#A%a')+-/15a79;=?A!OEaGA152LEES DIT /HGRAFCOMO 1/LIFE_ V/ALIFE_88 `/HMANDELBROT /KALEID PRG׉/H ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 RH Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (zomer 1988) al zo'n drie honderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlot over de software kunt beschikken. De Stichting ST geeft ook een speciale PD catalogus disk uit. ************** Deze public domain disk is geproduceerd en gedistribueerd door: Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productie fouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productie nummer. ************************************************************************ . 2/.. 2/GRAFCOMOPRG4/iHANDBUCHTXT:/ YBEISPIEL =/7`fBS(` Efv*oM( m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNلHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN hJrBjNuHz?<&NN\N(CAp$L Qp N9lrBlJpNNpMN9@pdAr 0Q0tr Nb9lNdNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn& 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuNݚpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@Nf?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|ݮ  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NxJFkSFk&aQNx`Ha"FFaQL8NL6.ݮJgtBnݮNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?NL<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dGe GbFGNu G0dFGHANu~NuAd RdQRB6Ce0 C/jC C@j C jr0H@{0DH@Nur{0Nu{0NutNuJj(:,af AfBfNu&<x*<NHnܨr$g4jDk( b4<J@`@[H@0Nu4<Ѐ[Nu4<NuNuAd RdQRBBkBjDBJjDNupNufJj fJAkNupNdRdRrxaAffBWHNuJjDBDA@JBfprJjDEDD@JEfvxNuaغBffAVHNuCDEaEf fDUHNu]HNuCDEaEffDftNuJjtNupN&N2CpNFEN`C #I3| \ErcJ2W=AbN0:N0:JbkNNup`pN0<9@:, INlJ@g@8 FNl EdbAJfE @e4r$Wf"FANuPRN:LST:AUX:CON:MID:IKB:VID:,J@fC E& B Og& Rgl Ag@ Ug2 Ig $CpNp=`pNAXJ@jNNuNlJ@g,A,BBgHQ?<=NAP FJ@k??<>NAXtNutNu ::/rI INd<,(k$/<??<?N`NA Jj ?a0NNHrO INdLA NFN&(*NNNJvNT)@p `H@)@prtNbAHplrtNbB 2pNRpNFpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNbpapap9@p`pvNTv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtNbAl 2l 4HVNuAl 2l 4L VA0000000000prtNb9Cp rtNbAv` Av `Avl 2l 4)lVHN.aBp0,l 2Nua40,HNua*p0,l 4Nuaprt0,l 22,l 44,NuN9||BlBlrҌpsNBNu?<NNT$g4<rЀ[Nu0<}NJ& ?<NNC`&?<NNT"@ C <}N`N@((?<NN.?<NNX@LvA HA HNuNup9@HA)A,N( FNl @e024E$ Bb5B5A6CC5CK5CAB008:Dk`Ek\00<,>,SFSGFnHGnDDDk9DBlDEk9EBlFcllGcll0,lb 0,lcNupmrtA)HA)HNbpNJHHPN(4 _:8><DbFEbGCHP@dʾAdBD2ƞE29|C???FF22N23BRG0@\@NJ"2)INa: @Jg,Af*EJ, ,F G"P0(1|J#HJ@NHD"Nupp N>9|nNFA0,l2J,jk 0"fZRAR@ 0"g 0 f` 0 g 0,f9@lTll`BllA"H"g"A4`Q"AA 0! NuS@R@ 0 g 0,f9@lRll`R@ 0 fQj`NN&Bll?<?<?<NM\N,HQN&g ! ge l*g l*gpNNu<,*?Hj\F FfNR`H FfNJ`RGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HN>LNu0,^2,`N.zEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(NldeS@f lbfSl`9Ab9FdNupapqr`p`C l ", Ⲭ dfѬ SA 0! Nup"NNNJfNup#`NPN&"p`tdbDA0Hg<<R@f|0HN*JFk*HQ/??<?NAXfX ENuJkpNp`p`\F( &I.` ??<NMXJ[j E&DNu<(`|HP?N2<pg2JFg W"X2@e2<A`QNDCpR@ 1 fA 0! "_Np`pNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8N  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(NXtHB9BL@@TAt )l g.A( f hgSASAgRB`9BJNSAgNu)l g,vARC( g9CJ9|Lp!,N FPeNuA JpBQA/)H )l gBlJpNB Aprt0 0BBB R@ @efA000 0PB0 *00 000\0X0 *0000 0P0BX0, *@00p1| 1|QBX0 $HTH0P &0 *0,NupNSk [0NupNuHPaH8 _&X Pf/|~ K!zag @ ep 24C"2 S@ػ Td BTA3A0C4$I2a222B"0@2A\xvaRg<2#M 4B3BS@ -f ػ Td>BAAb8RGRC`3RSG5GC5C J1DcaRF F e`RG GcdNuXASF1F41R 1h4 x1EDgVA)H)H 9|J?<NNTU@g,ACg dRhdRh(gpL8Np>L8Np*HEAJ0?C bL000H?A/.)HpNLrHH/>Bl/,ff.f.ffNu l /.g&, ^`D&, N`>&, R`8&, V`2&, Z`,2,/4WAARA0,/6A hfRAS@f9A/,&, Jo ? CN 0`@k Ap0(/.NuA Nup)@JphNLtH &JKBCH .A/~0 1PP1P1PA L? &<@>AFG0000X0000X0000X0000C ~AJ0g0  pi, N"F QNu?S@k&8L &LeBLe,C`(A? fHa)_ 2TNuBlJ`l *bl ,bH .N0S@k@>A PC/~. 0(JgRJ)@g1@CJ2fP2HP" &" *pdN0,r W1@AJ00 piN9|L@NpiN _CL""pe`9| LpiN9|LphNLtH 2H/`SBSC@AHH/jP 6P/^P0<rtNbpapapapaL/jr`S@k6@ A 9PJg8BPpfNpgN9| LphN9@JfdBlJa\Q 6BB 2`NuS@k @ A 9pJg a$Bp`NuHS&I. FV 7p&N^9l/h8,:,L/d4,pĴ@cS@9@p4,rŴAcBSA9Ar`8pJ, 7fnJ/^k0 Eg$2,/h pg  qfH9A/hpjNJ`(HxA^N HmN Puffer 3"_NlJBfN>ZHxA^N HmN Invertieren "_NlJBfN>4-pJBgpF$VH;B4-NN&?Bg?<NN\HmN Weiter Rechnen "_NlJBfN?NpN\NLAVN A_N HmN Startpunkt n"_NlJBfN?6AY.N HmN Ausschnitt n"_NlJBfN?hAZN N NAN A큌N 4+|NLNrJf4-N&<x*<N|JBfN?+|CA0 0CA6 0N@BgBgpCN"NZ+mC -x"-t _NNZdN4Startpunkt liegt momentan|auerhalb des Bildschirms.CNHxHmN OK r"_ Nl+@pNNrSgNZNH +@t +@x +@Hm> -x"-t _NNrUfpNBgBgpCN"NZA_N N NAN A큄N 4A퀐N bA퀄N bAxN bA퀖N bA퀊N bA~N bA큨N 4NrJfBm|BmBmBmBmpNNpN\NLBgBgpCN"NZpNRNH A퀐N A퀖N +@ -SgN]t;BAxNܐ/A~Nܐ"NA퀄Nܐ/A퀊Nܐ"NA퀐Nܐ/A퀖Nܐ"NNrJfNdA퀄NA퀐NܔA퀄N|N&<x*<NA퀖N|NA퀊NܨA퀐Nܐ/A퀖Nܐ"NA퀄Nܐ/A퀊Nܐ"NA퀐Nܐ/A퀖Nܐ"NA퀄Nܐ/A퀊Nܐ"NNrSfRA퀐Nܐ/A퀖Nܐ"NA퀄Nܐ/A퀊Nܐ"NA퀐Nܐ/A퀖Nܐ"NC퀐Ax 0C퀖A~ 0NrJfNrUfZ4-N&<x*<N|pJBgp/AxNܔA퀄N|NpJBgp/A~NܔA퀊N|NpJBgp$fN^pANܔ&<x*< NHAxNܔA퀄N|NL8NLANܨ -tNHAxNܔL8NHAxNܔA퀄N|NL8NL&<x*< NN&+@t -xNHA~NܔL8NHA~NܔA퀊N|NL8NL&<x*<NN&+@xpNRpNBgBgpCN"NZA_N N N A|N 6NpN\N\NLBgBg -|CN"NZNrJfNrNzNpJBgp/N HPA "_NvpJBgp$gNzA_N N NA크N 4AN 4AN 4B pNFHPpNF"_NHPpNF"_NC>NHm>pNF"_NHPpNF"_NC>N+|pA크NNb+@Nb+@Hm> -NF"_NHP -NF"_NC>NN`NqNqN NA큰N 4)| B -hA큰N/-NCN -CNHPN PARAMETER4"_NlJBfN`\ -A$N -CNHPN Startpunkt "_NlJBfN`+m -CNHPN***p"_Nlg N N`N`NNq/-A CN -R/A CNA$Nܔ&<x*<NN&/N Anzahl: HP -pNNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N A : HPANܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N B : HPANܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N C : HPA NܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N Gre : HPANܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N X0 : HPANܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&/N Y0 : HPANܔNR"_NHPp N:"_NCNA$Nܔ&<x*<NN&CNNlA퀮NA$Nܔ&<x*<NN&CNNlA퀴NA$Nܔ&<x*<NN&CNNlA퀺NA$Nܔ&<x*<NN&CNNlANA$Nܔ&<x*<NN&CNNlANA$Nܔ&<x*<NN&CNNlANA$Nܔ&<x*<NN&CNNlANA퀴NܔA퀮N|N nHA퀺NܔL8N nHANܔL8N nHANܔL8N nHANܔL8N nHANܔL8N nANܨANܔ&<x*<NJBfNeA$Nܔ&<x*<NN&/ANܐ/p-N:"NCNNeA$Nܔ&<x*<NN&/p-N:rNCNpNXAN -SgNf+|Nf+| -"-NZ -R/ -"NZ)|4L JN`N N00040644064817643681256884562484416644494141664449414163884915831868646381638849158166444941416644494148456248444368125684064817604064DESK Info ---------------------------DISK----- Parameter ------ Parameter laden Parameter speichern ----- Bilder --------- Bild laden Bild speichern ----- Beenden -------- Ende ITERATION Als Querschnitt Als Funktion PARAMETER Anzahl: A: B: C: Vergrerung: X0 Y0 - Zufallszahlen OPTIONEN In den Puffer - Bild zeigen ----- Aktuelles Bild Puffer 1 Puffer 2 Puffer 3- Bilddarstellung - Invertieren Weiter Rechnen Startpunkt Ausschnitt ***3t ,D>4,^ 0` `&Z> . >(>">">">&>$>$.^.0* * ( ,` ,,T&  &V  bP6PdP̜Ph@\("`N vT6>0DP, Handbuch zu Graf Como von Volker Weiser Inhalt: 1. Einfhrung 2. Programmbeschreibung 2.1 Das Men: DESK 2.2 Das Men: DISK 2.2.1 Parameter 2.2.2 Bilder 2.2.3 Beenden 2.3 Das Men: ITERATION 2.4 Das Men: PARAMETER 2.5 Das Men: OPTIONEN 2.5.1 Bildpufferung 2.5.2 Bilddarstellung 3. Allgemeines 3.1 Urheberrechte 3.2 Quelltext 3.3 Anschrift und persnliche Bemerkungen Graf Como, der mathematisch begabte Grafiker Graf Como! Wie kommt man zu einem solch bldsinnigen Programm- namen? Dies kann doch nur wieder ein Spiel sein. Weit gefehlt! Obwohl es sich bei diesem Erzeugnis um kein grimmiges Arbeits- programm handelt, da fr Ihr berufliches Weiterkommen unentbehr- lich wre, kann es Ihnen doch viel Freude machen kann, wenn Sie Sinn fr die Schnheiten unserer Welt haben. In diesem Fall werden Sie gebannt vor Ihrem Rechner sitzen und den Aufbau und die Vielfalt der erzeugten Grafiken verfolgen. Jetzt ist es raus: Graf Como ist ein "Com"puter "Graf"iker mit einem "O"H-Effekt. 1. Einfhrung Angefangen hat wohl alles mit Benoit B. Mandelbrot's "Fraktaler Geometrie". Wer kennt nicht seine berhmten Apfelmnnchen. Diese Figuren entstehen durch vielfache Iterationen der Zahlen eines kleinen Gebietes der Komplexen Zahlenebene. Sie scheinen Barry Martin von der Universitt in Birmingham zu neuen geistigen Hhenflgen angeregt zu haben. Er kam auf die Idee zwei reele Zahlen (beispielsweise zweimal die Null) als Anfangswerte einer mathematischen Iteration zu bestimmen. Diese Iteration liefert eine Funktion die unregelmig um den Anfangswert schwingt (Darstellbar unter dem Menpunkt "Als Funktion"). Stellt man sie flchig bzw. orthogonal (rechtwinklig) auf dem Bildschirm dar, entstehen unglaubliche, grafikenhnliche Gebilde in immenser Formenfielfalt (wie bei "Als Querschnitt"). Sie reichen von einfachen geometrischen Formen wie Kreise, ber immer komplexer werdende Figuren bis hin zu Teppichen, die an eine mit dem Mikroskop betrachtete Zellstruktur erinnern. Die Iterationsfunk- tion ist denkbar einfach: Startwerte: x = x0 y = y0 Iteration: xx = y - sgn(x) * sqr(abs( B*x - C)) yy = A - x x = xx y = yy Die Konstanten A, B, C sowie die Anfangswerte x0, y0 bestimmen magebend das Aussehen des Bildes. Wer mehr ber dieses Verfahren wissen mchte lese den Artikel von A. K. Dewdney in Spektrum der Wissenschaft (Ausgabe: November 1986 oder Sonderheft: Computer- Kurzweil). Das vorliegende Programm erlaubt in weiten Grenzen eine freie Parameterwahl und verfgt darber hinaus noch ber Mglichkeiten die Lage des Bildes auf dem Bildschirm zu ndern. Auch eine Mikroskopfunktion ist eingebaut. Es fehlen weder Optionen um ver- schiedene Grafiken zu vergleichen, noch die Mglichkeit bere- chnete Bilder zu laden oder zu speichern. Letzteres geschieht in einer Form, die es erlaubt Ihre Grafiken in fast allen Zeichen- programmen weiterzuverarbeiten und auszudrucken. 2. Programmbeschreibung Obwohl das Programm weitesgehend selbsterklrend ist und sich daher fr die meisten Benutzer eine Anleitung erbrigt, soll hier an die neuen Freunde des ATARI ST gedacht werden, die noch wenig bung im dem Umgang mit GEM u.s.w. haben. Daher ist die folgende Programmbeschreibung recht ausfhrlich gehalten. Aber auch die Schon-alles-Wisser werden noch einige interessante Punkte im Text finden. Nun zum Programm: Nach dem Start durch Doppelklick meldet sich das Programm mit einem kleinen Informationsdemo. Hierin sehen Sie gleich zwei Beispiele fr die Formenvielfalt der Martin'schen Grafiken. Nach dem Ende des Demos - Sie erkennen es an der erneuten Invertierung des Bildschirms - befinden Sie sich unter einem gewohnten Pull-Down-Men. Es hat die Eintrge: DESK, DISK, ITERATION, PARAMETER und OPTIONEN. Die Funktionsbeschreibung des Programms soll unter diesen einzel- nen Menpunkten geschehen. Sie erreichen die Untermens indem Sie mit der Maus in den entsprechenden Eintrag der Menleiste fahren. 2.1 Das Men: DESK Es lohnt eigentlich keinen eigenen Unterpunkt, soll aber aus Grnden der Vollstndigkeit mit aufgefhrt werden. Info: Wie blich erhalten Sie hier eine kurze Information, die das Programm und den Autor betrifft. Sie verschwindet nicht wieder, sondern verbleibt bis zur nchsten nderung des Bildaufbaus auf dem Bildschirm. Dadurch entfllt das, bei vielen Programmen so ltige, "Abklicken" des Programminfos. Darunter befinden sich normalerweise die Accessories. Da GfA- BASIC ihre Verwendung nicht sonderlich untersttzt, wurden sie einfach desaktiviert. Man erkennt dies am hellen Schriftzug. So wichtig drften Sie bei dem vorliegenden Programm sowieso nicht sein. 2.2 Das Men: DISK Es ist in drei Unterabschnitte eingeteilt: 2.2.1 Parameter Die Parameter sind jene Konstanten, die Aussehen und Vielfalt der Iterationsfunktionen bestimmen. Sie sind uerst wichtig. Gehen sie verloren und wei der Benutzer nicht mehr jeden einzelnen Wert auf das Genauste, kann er eine bestimmte Grafik nie mehr wiedererzeugen. Deshalb knnen Sie Ihre Konstanten sichern und wiederladen. Es werden nicht nur die unter dem Menpunkt PARA- METER anzeigten abgespeichert, sondern auch solche, die die Lage auf dem Bildschirm und den Ausschnitt festlegen. Parameter laden: Dies funktioniert uerst einfach und konfortabel zugleich. Nach dem Aufruf durch einmaliges Anklicken ffnet sich die Fileselek- torbox des GEM. Sie zeigt ihnen alle Ordner der aktuellen Directory-Ebene und die Dateien mit der Extention "PAR" an. Mit ihr werden die Parameter abgespeichert. Klicken sie einfach wie blich zweimal in rascher Folge auf die Datei, die Sie wnschen oder den Ordner indem sich Ihre Datei befindet. Schon wird Sie geladen. Die neuen Zahlenwerten knnen unter dem Menpunkt PARAMETER betrachten. Parameter speichern: Hier fixieren Sie Ihre gerade eingestellten Parameter. Wieder ffnet sich die Selektorbox und wieder knnen Sie mit Mausklick den Ordner ffnen, der Ihre Parameter enthalten soll. Geben Sie nur einfach rechts neben dem Fenster den Namen Ihrer Parameter ein. Sollte hier schon ein Namen stehen, lschen Sie diesen einfach mit der Esc-Taste. (Beim erneuten Aufruf dieses Unter- menpunktes wird hier immer die Endung der erzeugten Datei angezeigt.) Die Endung selbst brauchen Sie nicht mit eingeben, sie wird automatisch mitabgespeichert. Drcken Sie das stark umrandete "OK"-Feld an. Mit "Abbruch" beenden Sie das ganze Unternehmen ohne Auswirkung. 2.2.2 Bilder Damit sichern Ihre z.T. mhsam erzeugten Grafiken oder laden frher gespeicherte wieder auf den Bildschirm, um sie z.B. miteinander zu vergleichen. Die Bilder werden einfach im Screen- format abgespeichert (siehe DOODLE). Dadurch knnen sie mit den meisten Malprogrammen eingelesen, verndert, gedruckt oder in eigene Programme eingebunden werden. Bild laden: Diese Funktion erlaubt ein Bild einzuladen, da im Screenformat abgespeichert wurde. Nach dem Aufruf meldet sich eine Dialogbox, die Sie fragt, in welchen Puffer Sie Ihre Grafik laden wollen. Die Puffer erlauben Ihnen mehrere Bilder gleichzeitig im Speicher zu halten und in rascher Folge zu betrachten (vgl. auch 2.5). Klicken Sie einfach auf einen der noch kein Bild enthlt. Wieder- einmal ffnet sich die Selektorbox. Sie zeigt alle Dateien mit der Extention "PIC" an. Whlen Sie einfach eine solche Datei an und das Bild wird mit einer Meldung geladen. Bild speichern: Dieser Punkt speichert ein Bild aus einem der Puffer. Eine Dialogbox fragt, welches Bild gesichert werden soll. Im Aktuellen Puffer steht immer das zuletzt berechnete. Unter "Puffer" knnen Sie zwischen den Puffern 1 bis 3 whlen. Danach ffnet sich die altbekannte Fileselectorbox und erlaubt Ihnen Ihr Bild mit der Endung "PIC" abzuspeichern. Wieder ohne da Sie diese mit angeben mssen. 2.2.3 Beenden Ende: Hier verlassen Sie das Programm. Da man im Eifer des Gefechtes leicht einmal einen falschen Menpunkt anklicken kann, wird Ihre Entscheidung noch einmal rckgefragt. Alle nicht gesicherten Parameter und Bilder gehen fr immer verloren sind. Mit einem Druck auf "Ja" oder die -Taste verlassen Sie das Pro- gramm. Mit "Nein" springen Sie unter das Men zurck. 2.3 Das Men: ITERATION Unter diesem Menpunkt whlen Sie die Berechnungsart der Itera- tion. Gleichzeitig starten diese. Beide Berechnungen knnen Sie unter- und abbrechen. Klicken Sie dazu einfach auf eine Maus- taste. Es meldet sich eine Dialogbox. Sie zeigt Ihnen die Zahl der bisher durchgefhrten Iterationen an. War dies alles was Sie wissen wollten klicken Sie "weiter" und die Berechnung wird fortgefhrt. "Abbruch" dagegen beendet die Iteration. Es wird Ihnen nun noch die Mglichkeit gegeben das bisherberechnete Bild in einen Puffer zu geben. Dies ist z.B. dann sinnvoll, wenn Sie eine schon sehr schne Grafik erzeugt haben und nicht mehr weiter rechnen wollen. Eine versehentlich abgebrochene Rechnung kann mit "weiter rechnen" unter OPTIONEN fortgefhrt werden. Als Querschnitt: Diese Berechnungsart erzeugt die wunderbaren Grafiken nach Barry Martin. Lassen Sie sich berraschen. Die Punkte der Iteration werden einzeln in Flchenkoordinaten dargestellt. Als Funktion: Die Funktion ist die geradlinige Darstellung Ihrer Iterations- folge. Sie wird auf den Bildschirmausschnitt normiert. Dies fhrt dazu, da bei ber 640 Iterationsschritten mehrere Berech- nungspunkte in einer Spalte stehen. Auch dies kann zu interes- santen Bildgrafiken fhren. 2.4 Das Men: PARAMETER Dieser etwas ungewhnliche Menpunkt hat eine doppelte Aufgabe: Erstens zeigt er die augenblicklich eingestellten Funktions- parameter an und zweitens erlaubt er diese zu ndern. Wie schon erwhnt bestimmen Sie mit diesen Konstanten, da Aussehen und die Gre der zuerzeugenten Grafik. Sie ermglichen die unglaubliche Gestaltungsvielfalt des Programmes. Klicken einen der Menunterpunkte "Anzahl" bis "Y0" an, ffnet sich eine Box mit einem Strichcoursor. Geben Sie einfach die gewnschte neue Zahl ein und quitieren Sie mit . Schon steht die neue Zahl hinter dem Doppelpunkt der angeklickten Menfunktion. Geben Sie nichts ein bleibt der alte Wert erhalten. Doch nun die Parameter im einzelnen: Anzahl: Hiermit bestimmen Sie die Zahl der Iterationsschritte. Je grer sie ist, desto mehr Berechnungen werden durchgefhrt. Dies kann natrlich seine Zeit dauern. Da allerdings jeder neuberechnete Punkt sofort auf dem Bildschirm angezeigt wird und dies nach einer vllig unvorhersahbaren Reihenfolge geschieht, wird Ihnen die Wartezeit kaum langweilig werden. Sollte Ihnen die Berechnung trotzdem zu lang dauern, knnen Sie ja immer mit Mausklick unter- brechen und sich die Anzahl der schon durchgefhrten Schritte vor Augen fhren (siehe "Als Querschnitt"). Da nur eine ganze Zahl (integer) als Anzahl sinnvoll ist, wird einer Rationalen (Reele- oder Kommazahl) einfach der Nachkommateil abgeschnitten. A, B, C: Sie sind Funktionsparameter im eigentlichen (mathematischen) Sinn. Sie greifen in den Iterationszyklus direkt ein. Schon die kleinste nderung einer dieser Werte kann vollstndig neuartige Bilder erzeugen. Es werden auch rationale Zahlen zugelassen. Gre: Es handelt sich um den Vergrerungsfaktor. Sollte ein Bild ber den Rand laufen, das Sie aber doch ganz betrachten wollen, verkleinern Sie einfach seinen Wert und beginnen die Berechnung von neuem. Gleiches gilt auch, wenn sie nach einer Parameterwahl nur einen einzigen Punkt (nhmlich den Ersten) auf dem Bildschirm sehen. Meist spielt sich dann die Berechnung weit auerhalb des eingestellten Bildbereiches ab. Auf der anderen Seite kann es vorkommen, da sich nur einige Punkte in einem kleinen Raum Ihres Blickfeldes bilden. Vielleicht ist dann Ihre Vergrerung zu klein. Erhhen Sie "Gre". Durch eine negative Zahl wird das Bild um 180 Grad gedreht (Spiegelung um die Mittelhorizotale). Auch "Gre" erlaubt reele Zahlenwerte. X0, Y0: Normalerweise beginnt man eine Iteration bei Null. Doch das mu nicht sein. Andere Anfangswert erhhen den Formenreichtum Ihrer Grafiken. Natrlich sind auch hier reele Zahlen erlaubt. Zufallszahlen: Diese Option ist nicht nur fr einfallslose Menschen gedacht. Sie weist den Funktionsparametern A, B, C eine Zufallszahl zu. X0, Y0 werden auf null gestellt. Meist kommt es dabei zu Zahlen, die sie selbst nie eingestellt htten. Die Grafik wre Ihnen fr immer entgangen. Der erste Punkt liegt in der Mitte und der Vergrsserungsfaktor ("Gre") wird dabei auf Eins eingestellt. Meist drfte er trotzdem zu gro oder zu klein sein. ndern Sie ihn einfach. Oft hilft eine sehr kleine Zahl (z.B. 0.0001) und danach die "Ausschnitt"-Option (siehe 2.5). 2.5 Das Men: OPTIONEN Es bietet ntzliche Hilfen zur Darstellung der Grafiken. Unter anderem auch die schon oben erwhnten Bildpuffer. 2.5.1 Bildpufferung Es lassen sich bis zu drei alte Bilder und das zuletzt Berechnete (aktuelles Bild) darstellen und miteinander vergleichen. Sie knnen dadurch z.B. leicht entscheiden, welches Bild sie als schnstes unter verschiedenen sehr hnlichen sichern wollen. In den Puffer: Haben Sie einmal eine berechnete Grafik versumt abzupuffern, knnen Sie es hiermit nachholen. Es erscheint eine Alertbox, die Ihnen in schon bekannter Weise erlaubt das aktuelle Bild in einen der Puffer 1 bis 3 zu bernehmen. Aktuelles Bild, Puffer 1-3: Sie zeigen Ihnen das ganze im Puffer befindliche Bild an. Die Menleiste verschwindet damit Sie die ganze Pracht bestaunen knnen. Wollen Sie wieder zurck unter das Men drcken Sie einfach die Maus oder eine Taste. 2.5.2 Bilddarstellung Hiermit ndern Sie gezielt die Darstellung Ihrer Grafiken. Greifen Sie z.B. ein besonders interessantes Detail heraus und vergrern Sie es oder verschieben Sie Ihr Kunstwerk. Invertieren: Sicher kennen Sie auch den alten Streit, ob es schner oder sinnvoller ist dunkle Punkte auf hellem Hintergrund darzustellen oder umgekehrt. Meist ist dies nur eine persnliche Empfindung. Da es aber gerade bei einem Grafikprogramm wie diesem wichtig ist ein mglichst komfortables Empfinden zu bekommen, wurde Ihnen hier ermglicht den Darstellungsmodus zu ndern. Am Anfang und nach dem verlassen des Programms wird der bliche Schwarz-auf- wei-Modus eingestellt. Es kann auch sinnvoll sein, whrend des Bildaufbaus den Wei-auf-Schwarzen zu whlen. Man erkennt dann neuerscheinende Punkte auf dem zumindest anfangs berwiegend dunklen Bildschirm leichter. Weiter Rechnen: Wie der Name schon sagt, knnen Sie mit dieser Funktion eine beendete oder abgebrochene Iteration fortfhren. Natrlich funk- tioniert dies nur solange fehlerfrei wie Sie weder einen Para- meter noch den Startpunkt oder den Ausschnitt gendert haben (Ausnahme: Anzahl). Eine Alertbox zeigt die bisher ausgefhrten Iterationsschritte und gibt Ihnen die Mglichkeit Ihr Vorhaben abzubrechen. Wollen Sie dies nicht geht es mit "Ok" weiter. In der bekannten Eingabebox geben Sie nun die Anzahl der gesamten(!) Iterationsschritte an. Durch wird die Rechnung fortgesetzt. Oft werden Sie diese Funktion gebrauchen, um zu erfahren wie sich eine Grafik bei weiteren Iterationsschritten ndert. Startpunkt: Gefllt Ihnen nicht, da sich Ihr Bild am Rand des Bildschirms oder vielleicht sogar auerhalb entwickelt, benutzen Sie diesen Menpunkt. Sie bestimmen damit die Lage des ersten Punktes Ihrer Grafik. Dies geht ganz einfach: Nach dem Anklicken wird Ihnen das ganze Bild gezeigt. Gleichzeitig wandelt sich der Mauscoursor in ein Hohlkreuz und ein Fadenkreuz gibt Ihnen die Position des augenblicklichen Startpunktes an. Liegt diese auerhalb des Bildschirmes meldet es eine Dialogbox. Nun klicken Sie die linke Maustaste nur noch an der Stelle des neuen Startpunktes. Haben Sie sich vertan klicken Sie einfach auf eine andere. Wiederholen Sie dies bis Sie mit der Lage zufrieden sind. Erst mit der rechten Maustaste wird Ihre Wahl besttigt. Die nchste Berechnung wird ihren ersten Punkt dann genau dorthin setzten (sofern Sie nicht anschlieend den Ausschnitt gendert haben). Befindet sich Ihr Startpunkt auerhalb des Bildschirmes und verkleinern Sie anschlieend (kleinerer Wert fr "Gre"), kann es vorkommen, da sich Ihre Grafik auerhalb des Bildschirms aufbaut. Auch dann wird Ihnen diese Funktion gute Dienste leisten. Haben Sie einmal diese Funktion versehentlich betreten, drcken Sie gleich auf die rechte Taste und verlassen sie wieder. Ausschnitt: Das ist wohl die interessanteste Option. Sie erlaubt Ihnen wie mit einem Teleobjektiv einen Ausschnitt aus Ihrer Grafik heraus- zuvergrern. Besonders interessant ist dies oft in jenen Fllen, bei denen auf dem Bildschirm anscheinend nichts mehr passiert. Auch dies funktioniert recht einfach. Sie klicken "Ausschnitt" an und wieder erscheint Ihr aktuelles Bild. Diesmal wird der Mauscoursor zu einem Strichkreuz. Klicken Sie die linke Maustaste, zeigt Ihnen ein Punkt die ersten Ecke Ihres Ausschnitts. Wenn Sie nun die Taste wieder los lassen und Maus waagrecht bewegen ffnet sich ein Gummieband, da Ihnen den Bildausschnitt anzeigt. Klicken Sie auf die linke Maustaste, um den Rahmen zu fixieren. Sollte er Ihnen noch nicht gefallen, wiederholen Sie das ganze vom ersten linken Mausklick an. Auch hier bernehmen sie mit der rechten Maustaste. Selbstverstndlich stren smtliche gleichzeitigen Parameter- oder Startpunktwahlen. 3. Allgemeines 3.1 Urheberrechte und Umfang Bei der vorliegenden Programmversion 1.2 handelt es sich um ein sogenanntes Public-Domain-Programm (PD). Es ist frei von allen Kopierschutzbestimmungen. Gleichzeitiges Weitergeben aller Dat- eien zu nicht kommerziellen Zwecken ist erlaubt bzw. erwnscht. Doch verbleiben alle Rechte, besonders die des Quelltextes, beim Autor V. Weiser. Es ist nicht gestattet das Programm ohne die Zustimmung des Autors in irgendeiner Weise zu ndern. Die Version 1.2 ist vollkommen kostenlos. Es wird auch auf jegliche Anerkennungs- oder Aufwandentschdigungsgebhr verzichtet. (Wer trotzdem deshalb schlaflose Nchte verbringt, kann ja einen angemessen Betrag irgend einer sozialen Einrichtung stiften.) Von diesen Bestimmungen ist nur der Quelltext ausgenommen, auch wenn er rechtmig erworben wurde. Eine Ausnahme dazu bilden schriftliche Absprachen mit dem Autor. Umfang des Programmes: Das Programm umfat mindestens folgende Dateien: GRAFCOMO.PRG Das compilierte lauffhige Programm HANDBUCH.TXT Die Datei Weiterhin knnen Dateien mit folgenden Extensionen enthalten sein: *.PAR Parameterdateien *.PIC Bilddateien 3.2 Quelltext An den Quelltext in GFA-Basic kann man auf zweierlei Arten kommen: 1) Senden oder berweisen Sie 20.- DM und eine kurze Nachricht an den Autor. Vergessen Sie keinesfalls Ihre genaue Adresse. Oder: 2) Senden Sie dem Autor selbstgeschriebene Programme mit Quell- text auf Diskette zu. Dieser erklrt sich bereit die entsprechen- den Urheberrechte anzuerkennen und einzuhalten. Fgen Sie dazu noch einen frankierten Rckumschlag mit Ihrer genauen Anschrift bei. Weiterhin erhalten Sie eine evtl. neu erschienene Version des Programmes und weitere PD-Programme des Autors. 3.3 Anschrift und persnliche Bemerkungen Ich wrde mich ber Reaktionen von Ihnen freuen. Wie gefllt Ihnen das Programm? Kann man es noch verbessern? Was soll die Bemerkung im Info links unten? ... Zu guter letzt meine Adresse und die besten Wnsche fr Sie. Volker Weiser Isoldestr. 2 7500 Karlsruhe 21 Tel.: (0721) 55 83 93 Bank: Badische Beamtenbank eG (BBB) BLZ: 660 908 00 Kontonr: 1937170 . @/7.. @/BLUME PARA/8*TEPPICH PARD/9FNETZ PARF/:&ROSETTE PARH/;LSIEB PARK/<@WENDEL PARM/=@KARO PARO/>JKRAKE PARQ/?LZELLE PART/@&10000 44 2.95 -10 5.5 0 0 221 43 100000 -304.556 -9.72837 -42739.6 0.058823529412 0 0 323 212 1000000 2 -5 2 8 0 0 320 200 70000 -4.93357 49.3452 -69966.1 0.023642135642 9.218 989.3 314 225 50000 -448 12 -36400 0.11267605634 -2.58 -97.2 360 218 2710000 8.51245 -83.3962 5198 0.06 604.3 433.9 376 259 10000 9890.26 3.90104 72338.6 0.02954068064 -919.6 -3.927 155 51 200000 5465.93 -4604.29 8.11461 0.072393071757 3.818 9762 364 1212 100000 1 2 10 10 0 0 320 200 . W/A.. W/LIFE_50 PRGY/BL_ INF\/G`c/G ZLLERX"0<"XX$X"NBYBBZNB?<NNT*@&< (< 2<&4<&*< ,< 8 d@&<(<*<,< 8d &<'G(<'G2<'@4<'B*<'G,<'GA!C1AX1B^!F!C1AN1BT!F!C 1AR1B^!F!D!D!E!E!D!D!E!E!D!D!E!Eޠ a@ aa(aa$ 8 f?< NATJg`CI#`C#I LT><p` Q L <"<$<&<><JfXQ`DYJg ѨӨѨPJg ըאըRJg ѨӐѨRJg ըרըTXQr3t LR((O(P1BRQr L (Ѩ (јQ M"LE6|2prtUvxz`0T~JfXQSfNuY|k,gDPEDE@DCRQQ`fBPABA@BARQQ`Cx M"< GNqNq?<NNT@Qa` ag ckap9 RgX Ggt Gka0<\Q0<NqQ )far fax 9gJ g2 g* fJBgNA2-Q5&dQYgoz3cɋ>ERЈ!l`I|U>6d>va5Ap@@@@K@L@S@U@@@@@@@@b@%@w@y@@@@@@ @\@9@:@;@@@N@O@@@@@@@I@K@@@6@8@@<@@@@@7@@@-@@@@@@@@@+@,@}@`zA p@@ @]@^@@@@@@@@@@@P@Q@@@@a@@@V@@@j@@AB0```rc/G ZLLERX"0<"XX$X"NBYBBZNB?<NNT*@ a aa(aa$ 8 f?< NATJg`C IM`CMI L><p` Q L <"<$<&<><JfXQ`DYJg Ѩ\ӨѨJg ը^אըJg Ѩ^ӐѨJg ը`רըXQret L(((1BQ` L (^Ѩ> (?HјQ M"LE zcprpt`T~'JfTQQNuY|k0g (P(k0g (P(RQQ`f (P(jf (P(RQQ`|p=u~ A 0<@BQC ` Mrpt6<""|c`T~'p1@JgAJgB@JgAJgB1@1@PhP0QQNujx̼!L1ύsL1Ր< ލ_t6axr0LJ%_Fk/4tN9:=:AmG۹A 48&B08&@2&M@fBJg +P+Nu+P+Nu?<NATH@ 9fn 8 fvpxza 8 g aڠ 8 fxpvzapB 8 g` 8 f aA0r'?< NATJg?<NATH@ bf&><G NqNq?<NNT@?Qaf` ag ckaTp9 RgX Ggt Gka0p(il}yN9م1fלA p@G@@@@@@@5@6@@]@_@@@@%@@@i@j@7@8@9@@|@Y@Z@[@@@n@o@@@@@@@Y@[@@@F@H@@L@@@ @ @ 7@ 0@ @@@ @ @ @ @ @ @ @ @@P`zA8p@@ @@@L@M@D@@@@@5@@@@@Z@[@@@&@'@@@C@@L@MAB0```rc/G ZLLERX"0<"XX$X"NBYBBZNB?<NNT*@aa a, aa* 8 f?< NATJg `C(I` I"L LD><p` Q L <"<(<$M$<&<><6|`PTT|fQQ`bzJfXQQQ`LYJg ѨӨѨ@Jg ըאըBJg ѨӐѨBJg ըרըDXQQQ2< LB((?(@BhBQrO L"L (ѩ јQ M"LE><px@v`PT|OJf RQQNuYrgggXgRQQNuA0<px@v$<G?<NNT@Qar` ag cka`p9 RgX Ggt Gk a 0<> L Q )far fax 9gF g2 g* fJBgNAMB1iUDy=GplRS|t8T%20s )[{\u ^ V~U] Ap@@@@ @ @@@U@V@@@@@@"@%@g@i@@@ 7@ 8@ 9@ y@ @ @ @ @ @@ @ @ @ @2@ @7@8@y@{@$@%@f@h@@l@@@@@7@@@@@@@@@@@@@ @P`zAywp@@ @M@N@@@@@@@@U@@@@@@@@!@ &@ '@@@c@*@l@mA0``qcuGHk墅3h%LPy . c/I.. c/HGLIDER LIFd/JHBLINKER1LIFg/KDIAG LIFi/LDLINE_17LIFk/MnGUN LIFn/NGUNEATERLIFp/OLINBLNK1LIFs/P>LINE_25 LIFu/Q\LINE_29 LIFw/RdLINE_30 LIFz/SfLINE_31 LIF|/ThLINE_33 LIF/UlSPACESHPLIF/VSTABLE LIF/W4_MAL_3 LIF/XB~LIFE_88~ *.LIF TUVabcmno~LIFE_88~ *.LIF  9>jq|}~56 !RSnop~LIFE_88~ *.LIF sgh234efg123def012cde/01bcd./0abc-./`ab~LIFE_88~ *.LIF Z[\]^_`abcdefghij~LIFE_88~ *.LIF *,QZ[_~%KLMN}~LIFE_88~ *.LIF *,QZ[_~%KLMN}~LIFE_88~ *.LIF ~LIFE_88~ *.LIF ~LIFE_88~ *.LIF P~LIFE_88~ *.LIF ~LIFE_88~ *.LIF ~LIFE_88~ *.LIF ~LIFE_88~ *.LIF #$%123?@ATUWbcepqs9:~LIFE_88~ *.LIF ./`a5<=np')34Z\   G H~LIFE_88~ *.LIF `rfU` Efv*oM) m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNvHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHN(ALNRHz2?< NA\pdAxr0XQ)K\NNJ TTJrBjNuHz?<&NN\NCAp$L Qp N9lrBlJpNNpMN9@pdAr 0Q0tr NT9lN&Nupealp`NuaN,Hz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu pa4|a@:>< |a6RGk0Gg`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NtNu&8*JEgJBgJjBEB:HC҅H@:|ۆ҄ۆ<HC>H@ЃdHA@B@H@хk HAҁHAрSB BbNuN܌pNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@NX?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|ܠ  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NjJFkSFk&aQNj`Ha"FFaQL8N>6.ܠJgtBnܠNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N><JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dGe GbFGNu G0dFGHANu~NuAd RdQRB6Ce0 C/jC C@j C jr0H@{0DH@Nur{0Nu{0NutNuJj(:,af AfBfNu&<x*<NHnۚr$g4jDk( b4<J@`@[H@0Nu4<Ѐ[Nu4<NuNuAd RdQRBBkBjDBJjDNupNufJj fJAkNupNdRdRrxaAffBWHNuJjDBDA@JBfprJjDEDD@JEfvxNuaغBffAVHNuCDEaEf fDUHNu]HNuCDEaEffDftNuCDEHHNDNL8NL8NJBgRBNuJBgCjtNu"l`Qd&&|-KNuN0"l`Qep[NA"l` d&&&|-KNuN0"l` ep[N c R nPNu _\-KN c "#kЁ n NuЁ l _\-KN$@Hz ?<&NN\NupNuE`$@Hz ?<&NN\Nu NuNN @e ?pa0`@H`0,nF@RCN p `p ap Cpln<,(AL$I"vz x `gfURf~QjJFj4\Fk.aPHS&I.N``p???<NM\Qj&_Nu|HQ/g ??<@NAXXfNuJkp%NJl 6g Fg FfXNNu09JBfNu <r$<Nup`pN @ddAgH`p`p9@(9@*BlNuNCpN EN`"AN "A<,(NC #I3| \ErcJ2W=A.Nz0:N0:J.kNNup`pN0<9@:, INJ@g@8 FN EdbAJfE @e4r$Wf"FANuPRN:LST:AUX:CON:MID:IKB:VID:,J@fC E& B Og& Rgl Ag@ Ug2 Ig $CpNp=`pNAXJ@jNNuNJ@g,A,BBgHQ?<=NAP FJ@k??<>NAXtNutNu ::/rI IN0<,(k$/<??<?N`NA Jj ?a0NN`HrO IN0LA N N`N` A$ HJo d*b` QjNuQjNubNNZ&(* NNN Nu&(* NNDN NuvNF)@p `H@)@prtNTAHplrtNTB 2pNDpN8papaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNTpapap9@p`pvNFv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtNTAl 2l 4HVNuAl 2l 4L VA0000000000prtNT9Cp rtNTAv` Av `Avl 2l 4)lVHNhaBp0,l 2Nua40,HNua*p0,l 4Nuaprt0,l 22,l 44,NuN9||BlBlrҌpsNBNu0<}N& ?<NNC`&?<NNT"@ C <}N`NZ@((?<NN.?<NNX@LvA HA HNuNup9@HA)A,NF FN @e024E$ Bb5B5A6CC5CK5CAB008:Dk`Ek\00<,>,SFSGFnHGnDDDk9DBlDEk9EBlFcllGcll0,lb 0,lcNu:pmrtA)HA)HNTpNHHPNF4 _:8><DbFEbGCHP@dʾAdBD2ƞE29|C???FF22N23BRG0@\@N"2)IN:(* 9AJA)H@@[000][ˈN Evz`* [g" ]g |g QSz` zQSpQ][ɈN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNu*( INA)H @depd ae zb QB DNA\)H @ e` ae zb \gQBA BhNpZNA BP"`#|}NA"H0,tg"Hg \f`A\fS A ENAR@H`2QNu@9@JpNNr|<N @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| NT2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN0"l`dpNAtrdJhk\QpaNH ld$l`"Hg0 k&@ S`g k#&@0+S@H3 Q&f)I`LNu?<?<NAXJgJgNAH@B pNA NuApNA0pNN$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0NuNJ@gpNuNU@k0NupNu _0HpN _0HpNp"_0HqN p"_0HqN E ұeHHQ0)N$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuNWHNuNVHNuJhg N1NNu Ihd*N$E$RR@H`2QˈN ENu Ihd"*N$E8*$R`"QˈN ENu(* 0(iN$E 4R`Q$D 4R`QˈN DN ENua NuN IHPg"B  g &gNVJBjt BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkNRB0 b b瀀`RB0 fрd`?Hl?<GNAPA"HJf SNpC 0(gFd"P$I` *N$E$R(S@jv A(Wf( ae zb Q DNur ,* N& ( EN C"Sj|AcRGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`NzEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(N~ldeS@f lbfSl`9Ab9FdNupapqr`p`C l ", Ⲭ dfѬ SA 0! Nup"NNNJfNup#`NN"p`tdbDA0Hg<<R@f|0HN*JFk*HQ/??<?NAXfX ENuJkpNp`p`\F( &I.` ??<NMXJ[j E&DNuak NupNuakfpNupNtddA0oH?<?B?<BNA Jk.,?<?B?<BNA *kBg?/?<BNA JkNuN<(`|HP?N<pg2JFg W"X2@e2<A`QNCpR@ 1 fA 0! "_NTp`pJ@gHzZ?<&NN\NuB?< NA\Av ACLElp"Jg X\QC"C!/:@?< NA\NuLH!NuHx`(Hx`"Hx`Hx`Hx`Hx` Hx`Hx !4VxH A6@ Ni LHL|1R/:?< NApdK`HaJLxNNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8Nr  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f.B &lX)K\)ld` lp ,BQjNup(N Division durch NullberlaufZahl nicht Integer|-2147483648 .. 2147483647Zahl nicht Byte|0 .. 255Zahl nicht Wort|0 .. 65535Quadratwurzel nur fr|positive ZahlenLogarithmen nur fr|Zahlen grer NullUnbekannter Fehler Speicher voll Funktion oder Befehl|noch nicht mglich String zu lang|max. 32767 Zeichen Kein GfA-BASIC V2.0 Programm Programm zu lang|Speicher voll|New Kein GfA-Basic Programm|File zu kurz|NewFeld zweimal dimensioniertFeld nicht dimensioniertFeld Index zu groDim Index zu groFalsche Anzahl IndizesProcedure nicht gefundenLabel nicht gefundenBei Open nur erlaubt:|"I"nput "O"utput "R"andom|"A"ppend "U"pdateFile schon geffnetFile # falschFile nicht geffnetFalsche Eingabe, keine ZahlFileende erreicht|EOFZu viele Punkte fr|Polyline/Polyfill|maximal 128Feld mu eindimensional seinAnzahl Punkte grer als FeldMerge - Kein ASCII-FileMerge - Zeile zu lang - Abbruch ==> Syntax nicht korrekt|Programmabbruch!Marke nicht definiert"Zuwenig Data#Data nicht numerisch$Syntaxfehler in Data|""paarweise verwenden%Diskette voll&Befehl im Direktmodus nicht mglich'Programmfehler|Kein Gosub mglich(Clear nicht mglich in|For-Next-Schleifen oder|Proceduren)Cont nicht mglich*Zuwenig Parameter+Ausdruck zu komplex,Funktion nicht definiert-Zuviele Parameter.Parameter falsch|mu Zahl sein/Parameter falsch|mu String sein0Open "R" - Satzlnge falsch1Zu viele "R"-Files (max. 10)2Kein "R"-File3Nur ein Field zu einem|Open "R" mglich4Fields grer als Satzlnge5Zu viele Fields (max. 19)6GET/PUT Field-String Lnge falsch7GET/PUT Satznummer falschFehlerhaftes Menu?Fehlerhaftes Reserve@Fehlerhafter PointerZFehler bei Local[Fehler bei For\Resume (next) nicht mglich|Fatal, For oder LocaldGFA-BASIC Version 2.02| Copyright 1986/1987|GFA Systemtechnik GmbHf2 Bomben - Bus Error|Vielleicht Peek oder Poke falschg3 Bomben - Adress error|Ungerade Wort-Adresse!|Bei Dpoke, Dpeek, Lpoke|oder Lpeek?h4 Bomben - Illegal Instruktion|Ausfhrung eines ungltigen|68000-Maschinenbefehlsi5 Bomben - Divide by Zero|Division durch Null in|68000-Maschinensprachej6 Bomben - CHK-Exeption|68000-Interrupt durch CHK-Befehlk7 Bomben - TRAPV-Exeption|68000-Interrupt durch TRAPV-Befehll8 Bomben - Privilege Violation|68000-Interrupt durch Ausfhrung|eines priviligierten Befehlsm9 Bomben - Trace Exeption|68000-Trace-InterruptAllgemeiner FehlerDrive not Ready|ZeitberschreitungUnbekannter BefehlCRC Fehler|Disk-Prfsumme falschBad Request|Ungltiger BefehlSeek Error|Spur nicht gefundenUnknown Media|Falscher BootsektorSektor nicht gefundenKein PapierSchreibfehlerLesefehlerAllgemeiner Fehler 12Diskette schreibgeschtztDiskette wurde gewechseltUnbekanntes GertBad Sektor (Verify)Andere Diskette einlegenUngltige FunktionsnummerDatei nicht gefundenPfadname nicht gefundenZuviele Dateien offenZugriff nicht mglichUngltiges HandleSpeicher vollUngltige SpeicherblockadresseUngltige LaufwerksbezeichnungKeine weiteren DateienGEMDOS-Bereichsfehler|Seek falsch?Interner GEMDOS FehlerKein BinrprogrammfileSpeicherblockfehlertHB9BL@@TAt )l g.A( f hgSASAgRB`9BJNSAgNut)l g,vARC( g9CJ9|Lp!,N FPeNutA JpBQA/)H )l gBlJpNB Aprt0 0BBB R@ @efA000 0PB0 *00 000\0X0 *0000 0P0BX0, *@00p1| 1|QBX0 $HTH0P &0 *0,NupNSk [0NupNuHPaH8 _&X Pf/|~ K!zag @ ep 24C"2 S@ػ Td BTA3A0C4$I2a222B"0@2A\xvaRg<2#M 4B3BS@ -f ػ Td>BAAb8RGRC`3RSG5GC5C J1DcaRF F e`RG GcdNuXASF1F41R 1h4 x1EDgVA)H)H 9|J?<NNTU@g,ACg dRhdRh(gpL8Np>L8Ntp*HEAJ0?C bL000H?A/.)HpNLrHH/>Bl/,ff.f.ffNu l /.g&, ^`D&, N`>&, R`8&, V`2&, Z`,2,/4WAARA0,/6A hfRAS@f9A/,&, Jo ? CNr0`@k Ap0(/.NuA Nu|`|*Md A l)G Z`A b)G V0, HF 00Nup)@JphNLtH &JKBCH .A/~0 1PP1P1PA L? &<@>AFG0000X0000X0000X0000C ~AJ0g0  pi, N"F QNu?S@k&8L &LeBLe,C`(A? fHa)_ 2TNuBlJ`l *bl ,bH .N`0S@k@>A PC/~. 0(JgRJ)@g1@CJ2fP2HP" &" *pdN0,r W1@AJ00 piN9|L@NpiN _CL""pe`9| LpiN9|LphNLtH 2H/`SBSC@AHH/jP 6P/^P0<rtNTpapapapaL/jr`S@k6@ A 9PJg8BPpfNpgN9| LphN9@JfdBlJa\Q 6BB 2`NuS@k @ A 9pJg a$Bp`NuHS&I. FV 7p&NP9l/h8,:,L/d4,pĴ@cS@9@p4,rŴAcBSA9Ar`8pJ, 7fnJ/^k0 Eg$2,/h pg  qfH9A/hpjN<`NABNAFNAJN?<NNTUgNi+|>+|B+|F+|JNi+|>BB+|F+|JHmA퀮"_NHPA HPA$""_NHm$A "_NJBfNjNmA$N NzN"JBfNjN,Ich kann die Datei|4HPA$"_NHPN,|nicht finden !"_NCNTHxHmN WEITERr"_ N+@NiA$C퀄NTA퀄NHPp\N"_NJBfNkHmA퀄NNH <r$<L8NN"_N,C퀄NT`/-A퀄"_NFpiNHPA$r"_NzpNNCNTHmN, ~LIFE_88~4"_NJBfNkpNN,Das ist keine|LIFE_88-Datei !4CNTHxHmN WEITERr"_ N+@Ni+mꁎ - /p"A큎N p"- A NZ`NqNqpNpNprN$ <"<NpNNC퀮NT/-ZA퀮"_NF/-"prNNN"_N/-&prNNN"_N/-*prNNN"_NpNp"-N$ -JNpNpNpNbJgNmprNN+@ -Эr @ -N&<x*<NDN+@ -NH -N&<x*<NL8NN+@R N _NRR <Ѝ/ -B _ѐ -"-RN$ -RZ/ -ЭF"N` pNNN AN"_A퀮N"_A~N AN A킒N AN AN ANA퀐NA퀄NA퀖NA큎NHm~A퀮"_NHPA HPA퀐""_NHmA "_NJBfNnbNoA퀐C퀄NTA퀄NHPp\N"_NJBfNnA퀄NHPA퀖"_NC퀖NTHmA퀄NNH <r$<L8NN"_N,C퀄NT`/-A퀄"_NFHmp.N"_N(JgNo.HmHmp"_NT"_NC퀐NTpoNHPA퀐r"_NzpNNF ~LIFE_88~4NpNA퀮NNpN -NNpN -NNpN -NNpNp"-NB < A큎N -ЭNJnNopN -NNN@`NqNqpNNNANANANANANANANANARNANANA큚NA큞NA>NABNAFNAJNANANAfNANNARNAVNA큮NAZNA킎NA^NAbNA2NA킾NpNHPppN"_NCNTpNHPpqN"_NCNT?<NNTUgNr+|+|w+|+|+|>+|B+|F+|J+|f+|N -NЭf+@R -RЭf+@V -VЭf+@ -Эf+@Z -ZЭf+@ -Эf+@^ -^Эf+@b -bЭf+@2 -2Эf+@Nr+|+|:+|+|[+|>BB+|F+|J+|f+|@N -NЭf+@R -RЭf+@V -VЭf+@ -Эf+@Z -ZЭf+@ -Эf+@^ -^Эf+@b -bЭf+@2 -2Эf+@N growHP/-/-BB/-/-/-/-ANNr?<NNTUgNs -"-N$ -Э/ -Э"N6 -T/ -T"N$ -NH -NL8NH <r$<L8NN/ -NH -NL8NH <r$<L8NN"N6NuT -"-N$ -Э/ -Э"N6 -R"-N& -NH -NL8NH <r$<L8NN/ -Э"N6 -X/ -T"N$ -NH -NL8NH <r$<L8NN/ -NH -NL8NH <r$<L8NN"N6 -Z/ -T"N$ -NH -NL8NH <r$<L8NN/ -NH -NL8NH <r$<L8NN"N6Np r:NANpBNANN8ild laden ....NNp r:NANpSNANN8peichern .....NNp r:NANpLNANN8schen .......N -rJgNvnNp r:NANNFTorus4ANNF .ANpQNANN8uadratNNvNp r:NANpTNANNForus .ANNFQuadratANNNp r:NANpGNANN8eschwindigkeitNNpr:NANpZNANN8hler ........NNpr:NANpRNANN8egeln ........NNpr:NANpNNANN8chstes Bild .NNpr:NANpANANN8blauf ........NNpr:NANpMNANN8en ..........N?NL8NL8NN+@ -JNpNpN -RR/ -ЭB"N$ -R\/ -ЭF"N -RNvNH -N&<x*<NH ->NL8N>L8NN+@ -VЭr @Nx -N&<x*<N"pJBgp/ -RN&<x*<NrpJBgp$fN{ -RNH -RN&<x*<NL8NN+@R -NH -NH ->NL8NL8NN+@pNpN -RR/ -ЭB"N$ -R\/ -ЭF"N -RNvNH -N&<x*<NH ->NL8N>L8NN+@ -VЭr @Nx -N&<x*<N"pJBgp/ -RN&<x*<NlpJBgp$fN~pNZNH +@ +@ +@ <Ѝ/ -R _ <Ѝ/ - _ -NH ->DNL8NJBfN| lN}4 ?< @N\L -fN+@ -NH -NL8NNNJBfNLAC  "/-z -N"_N/-~ -N"_NNN"_A퀮NAvNA&NAzNA큎N?<NNTHmpN"_NHPp N"_NHPpN"_NC퀮NTAHNbp`CHNpCHN8+@vHxHxHx?<NN+@z -zN/ <"-v"_N+mv&Hm -&NN"_N(JgNbp"-& AR& -&NH -vN&<x*<NL8N"JBg -v/ -v//-v?<NNNN A"N"_AHN AbN"_A퀜N AN ANARNANA&NA*NA퀢N?<NNTUgN -NH <r$<L8NvNH <r$<L8NN+@R -NH <r$<L8NvNH <r$<L8NN+@A퀜NNH -bNL8NvN&<x*<NN+@&+|4*N growHP/-R/-BB/-R/-/-&/-*ANNr?-T?- -RЭ&? -Э*?A퀢" NZ?-T?-Hmp _"Nz -"-RN$ -RЭ&/ -Э*"N6 -RR/ -R"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -RX/ -X"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -RZ/ -Z"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6N -"-NA퀜NAH"-bN/-"AH"_NFN shrinkHP/-R/-BB/-R/-/-&/-*ANNr?-T?-A퀢"Nx?<NNTSgNF -NH <r$<L8NvNH <r$<L8NN+@R -NH <r$<L8NvNH <r$<L8NN+@A퀜NNH -bNL8NvN&<x*<NN+@&+|*N growHP/-R/-BB/-R/-/-&/-*ANNr?-T?- -RЭ&? -Э*?A퀢" NZ?-T?-Hmp _"Nz -"-RN$ -RЭ&/ -Э*"N6 -RR"-N& -RNH -&NL8NH <r$<L8NN/ -Э*"N6 -RX/ -T"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -RZ/ -T"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6N -"-NA퀜NAH"-bN/-"AH"_NFN shrinkHP/-R/-BB/-R/-/-&/-*ANNr?-T?-A퀢"NxNN AJN AFN ABN A>N A:N A6N A2N A.N"_AxNHmxN grow"_NJBfN+|INHmxN shrink"_NJBfN+|JNNA r @0A r @0A r @0A r @0 -.9@A "-2 @0A "-6 @0A "-: @0A "-> @0A "-B @0A "-F @0A "-J @0 -NلNN A"N A킒NA킖NARNANA&NA*NA킚NA킞NA킢NA킦NA킪NA킮NA킲NA킶NA큎NANA큪NA큮NANANANA킺NA킾NANAnNA~NA탂NA탆NA탊NA탎NA탒NA탖NA탚NA탞NA탢NA탦N?<NNTUgNv+|R+|P+|F&+|*+| n+|~+|E+|+|+|+|ރ+|+|+|҃+|Ã+|փN+|R+|(+|F&+|x*+|n+|~+|"+|B+|N+|Y+|n+|y+|+|i+|a+|kANNbpCNNpCNN8+@/-p"-"_NN growHP/-R/-BB/-R/-/-&/-*ANNr?-T?- -RЭ&? -Э*?A" NZ?-T?-Hmp _"Nz?<NNTUgN -"-RN$ -RЭ&/ -Э*"N6 -RV/ -V"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -RX/ -X"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6N -"-RN$ -RЭ&/ -Э*"N6 -RR"-N& -RNH -&NL8NH <r$<L8NN/ -Э*"N6 -RX/ -T"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -RZ/ -T"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -R\/ -V"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6 -R^/ -V"N$ -RNH -&NL8NH <r$<L8NN/ -NH -*NL8NH <r$<L8NN"N6pNpNpN -nN( -Rq/ -Э~"N$N SPIELREGELN:NhpN -R/ -Э"N$N Erschaffung:NhNp rNN8$0 1 2 3 4 5 6 7 8 lebende NachbarnN -R/ -Э"N$N berleben:NhNprNN8$0 1 2 3 4 5 6 7 8 lebende NachbarnNBpA큎N -ЭNJnN" -NN&<x*<NN+@Np "-NAN -0NNANN?<NNTUgN -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8N" -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8N@`Nq+| pA큎N -ЭNJnN -NH <r$<L8NN&<x*<NN+@Np"-NAN -'NNANN?<NNTUgNt -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8N -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8N@`NqpN -R4/ -Э"N$N,LIFE bernehmen AbbruchNh -R0+@ -Э+@ -RW+@ -Э+@?-?-?-?-A" NZ?<NNTUgN$ -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -T"N6N -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -R"N6 -Rh+@ -R+@?-?-?-?-A" NZ?<NNTUgN -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -T"N6N -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -R"N6 -R+@ -R+@?-?-?-?-A" NZ?<NNTUgN -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -T"N6N -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -R"N6NH +@ +@ +@ -$g -\HpJBgp/ -_HpJBgp/ -N&<x*<N"pJBgp$fN -\HpJBgp/ -_HpJBgp$fNP?-?-Hmp _"NzpN8+|pr'A큎N -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8NZ`NqpN8Np rNNF0 1 2 3 4 5 6 7 8NNprNNF0 1 2 3 4 5 6 7 84NNp rNANp3NANNNprNANp2NANNNprNANp3NANN?<NNTUgN <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8N <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8 <r$<&<x*<NvNH <r$<L8NN"-N& <r$<&<x*<NvN&<x*<NN"-N8pANN -Vr @ - r @ - r @?-?-A"NxpN -\HpJBgp/ -_HpJBgp$fN?-?-Hmp _"Nz/-p"-"_NN -\HpJBgp/ -_HpJBgp$fN?-?-Hmp _"NzN -NvN&<x*<NN+@ -NH <r$<L8N\N+@ -NH <r$<L8N0N+@ -NH -NL8N>&<x*<NN+@ -N&<x*<N"pJBgp/ -N&<x*<N"pJBgp/ -NNpJBgp$fNh -NH <r$<L8NvNN+@N -"-NAN -0NNANN?<NNTUgN2 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8NZ -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -Эr @ -N&<x*<N"pJBgp/ -N&<x*<N"pJBgp/ -NNpJBgp$fN -NH <r$<L8NvNN+@N -"-N -0NNNpN8?<NNTUgN -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8N -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8pN8 -Эr @ -N&<x*<N"pJBgp/ -N&<x*<N"pJBgp/ -NNpJBgp$fN -NH <r$<L8NvNN+@N -"-NAN -0NNANN?<NNTUgNÒ -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8Nĺ -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH -NL8N&<x*<NNr @ -N&<x*<N"pJBgp/ -N&<x*<N"pJBgp/ -NNpJBgp$fN -NH <r$<L8NvNN+@N -"-N -0NNNpN8?<NNTUgNd -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8Nnj -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8 -NH <r$<L8NvNH <r$<L8NN"-N& -NH <r$<L8NvN&<x*<NN"-N8pN8 -NH -NL8N&<x*<NNr @N)|B /-"N,*.LIF"_NFBBpA큎NN+@ -ЭN䂰fN>/-"N,*.CNR"_NF+| -$VHg NdN^N@`NqNqN shrinkHP/-R/-BB/-R/-/-&/-*ANNr?-T?-A"NxNNARNANA2NA6NA:NANANANA퀢NA퀢NN?<NNTUgNɈprN$ <"<~N6prN$ <"<|N6+|R+|+|2+|6+|":pNpNpNp N(Nd?NANANANANANANA2NA큲NA큶NA큺NA큾NANANArNADNARNANANA N$AN$AN$ANANA&N+|+| ^+|+|N growHP/-/-^BB/-/-^/-/-ANNr?-?-` -Э? -^Э?A퀢" NZ?-?-`Hmp _"Nz -^"-N$ -Э/ -^Э"N6 -R"-^N& -NH -NL8NH <r$<L8NN/ -^Э"N6 -X/ -^T"N$ -NH -NL8NH <r$<L8NN/ -^NH -NL8NH <r$<L8NN"N6 -Z/ -^T"N$ -NH -NL8NH <r$<L8NN/ -^NH -NL8NH <r$<L8NN"N6 -\/ -^T"N$ -NH -NL8NH <r$<L8NN/ -^NH -NL8NH <r$<L8NN"N6 -^/ -^V"N$ -NH -NL8NH <r$<L8NN/ -^NH -NL8NH <r$<L8NN"N6 -+@ -^ +@ -d+@ -+@ -x+@ -d+@pNpNpN -"-N$ -"-N?-?-?-?-A," NZ - ? -Z? -NH <r$<L8NN? -NH <r$<L8NN?A2" NZ+|pNpNpN -"-N$ -"-N?-?-?-?-A8" NZ - ? -Z? -NH <r$<L8NN? -NH <r$<L8NN?A>" NZ?-?-Hm8p _"Nz - ? -Z?A>"NxpN8 -(+@ -^5+@+|+|0 -N&<x*<NDN+@ -N&<x*<NDN+@2 -"-N$ -Э/ -Э"N6 -Э2"-N$ -Э/ -Э2"N -NH -2NNL8NN"-N$ -Э/ -NH -2NNL8NN"N -NH -NNL8NN"-N& -NH -NNL8NN/ -Э"N -NH -NvNL8NN"-N& -NH -NvNL8NN/ -Э"NpNpNpNpN( -NH <r$<L8NN/ -NH -2NL8N&<x*<NN"N$N,ROT(Nh -NH -NNL8NH <r$<L8NN/ -NH -2NL8N&<x*<NN"N$N GRNNh -NH -NvNL8NH <r$<L8NN/ -NH -2NL8N&<x*<NN"N$N BLAUNh -NH -N&<x*<NL8NH <r$<L8NN/ -NH -2NL8N&<x*<NN"N$N,ROT4Nh -NH -N&<x*<NL8NH <r$<L8NN/ -T"N$N WEINh -NH -N&<x*<NL8NH <r$<L8NN/ -NH -2NNL8N&<x*<NN"N$N,SCHWARZ4Nh -NH -N&<x*<NL8NH <r$<L8NN/ -NH -NL8N&<x*<NN"N$N WEINhpNpNpNpN( -+@ -(+@ -<+@ - +@ - / -P"N$N OKNh -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -R"N6?-?-?-?-Ar" NZ -z+@ -(+@ - / -P"N$N,ALTNh -NH <r$<L8NN/ -NH <r$<L8NN"N$ -R/ -R"N6 -NH <r$<L8NN/ -NH <r$<L8NN"N$ -T/ -R"N6?-?-?-?-AD" NZB?-?- -R/ -R""_ _.<NNNH +@R +@ +@ ANۚBm -R\HpJBgp/ -RNH -NNL8NlpJBgp$fN^ -RNH -NL8NH -NL8N>&<x*<N&<x*<NA NۚA `0Bm -RNH -NNL8NpJBgp/ -RNH -N&<x*<NL8NlpJBgp$fN*BmA `0 -RNH -NNL8N&<x*<NH -NL8N>ANۚ -RNH -N&<x*<NL8NpJBgp/ -RNH -NvNL8NlpJBgp$fNBm -RNH -N&<x*<NL8NH -NL8N>&<x*<N&<x*<NANۚA `0 -RNH -NvNL8NpJBgp/ -RNH -N&<x*<NL8NlpJBgp$fN -RNH -NvNL8N&<x*<NH -NL8N>A NۚBmA `0 -RNH -N&<x*<NL8NpJBgp/ -RNH -N&<x*<NL8NpJBgp$fNA `0Bm -RNH -N&<x*<NL8NH -NL8N>&<x*<N&<x*<NANۚ -RNzNpJBgp/ -R_HpJBgp/ -NzNpJBgp/ -2]HpJBgp/ -N&<x*<N"pJBgp$fNA Nۆ&<x*<NBH -NL8NH -2NL8N>&<x*<NN+@ANۆ&<x*<NBH -NL8NH -2NL8N>&<x*<NN+@ANۆ&<x*<NBH -NL8NH -2NL8N>&<x*<NN+@& - -@ -&W?-?<NN\ -RNzNpJBgp/ -R_HpJBgp/ -2\HpJBgp/ -NH -2NNL8NlpJBgp/ -N&<x*<N"pJBgp$fNA NۆBH -NH -2NL8NL8NH -2NL8N>A NnN&<x*<NN+@ANۆBH -NH -2NL8NL8NH -2NL8N>ANnN&<x*<NN+@ANۆBH -NH -2NL8NL8NH -2NL8N>ANnN&<x*<NN+@& - -@ -&W?-?<NN\ -RNzNpJBgp/ -R_HpJBgp/ -NH -2NNL8NpJBgp/ -_HpJBgp/ -N&<x*<N"pJBgp$fN -NH -2NNL8N&<x*<NH -2NL8N>&<x*<NN+@ - -@ -W?-?<NN\ "Nx?-?-A,"Nx+|p N -R^HpJBgp/ -R]HpJBgp/ -^HpJBgp/ -]HpJBgp/ -N&<x*<N"pJBgp$fN?-?-Hm,p _"Nz - ? -Z?A2"Nx?-?-A8"Nx+|p N -R^HpJBgp/ -R]HpJBgp/ -^HpJBgp/ -]HpJBgp/ -N&<x*<N"pJBgp$fN?-?-HmDp _"NzAENrpN?-?-AD"Nx -R^HpJBgp/ -R]HpJBgp/ -^HpJBgp/ -]HpJBgp/ -N&<x*<N"pJBgp$VHgN"`?-?-Hmrp _"NzN shrinkHP/-/-^BB/-/-^/-/-ANNr?-?-`A퀢"NxBBgBg <"<"_ _~NNNB?-?- -R/ -R""_ _.<NpNZNNB?-?- -R/ -R""_ _.<NpNZNN ANA>NABNAFNAJNA큎NARNANN?<NNTUgN+|>+|B+|F+|Jp"<N$p"<NN+|>BB+|F+|Jp"<N$p "<Np"<N$p "<NAJNr -JNpNpNB < A큎N -ЭNJnN -N&<x*<NDN+@ -NH -N&<x*<NL8NN+@R N _NRR <Ѝ/ -B _ѐ -"-RN$ -RZ/ -ЭF"NN@`NqNN ANNA큎N -NA$NdBpA큎N -C$N??-?<NN\N@`NqNq -NA$NdNNDesk LIFE---------------------123456Datei Laden Speichern----------- EndeFeld Bearbeiten Lschen------------- Spiel StartParameter Torus Quadrat------------------ Geschwindigkeit Zhler------------------ RegelnSpezial ber LIFE------------- Farben------------- Neuzeichnen***000100000001100000Alv <^ BҀF,& P\,jP6D(8PZ(,\L2FP  (>D.@jr$&Vt,Z,f\^R RlXXXX"nr8F(VT\bVjJ(jzPz |( D TL l\P6j,6xnxnnP4:vl~4J^6j>R@ LIFE_88 (Version 1.3): Allgemeines: Das Spiel LIFE wurde 1970 von dem Mathematiker John Horton Conway erfunden. Es zhlt zu den zellulren Automaten, einer regelmigen Anordnung von gleichartigen "Zellen", von denen jede eine endliche Anzahl von Zustnden einnehmen kann und nur mit wenigen Nachbarn in Wechselwirkung steht. Bei den zweidimensionalen Automaten wurden zwei Arten von Nachbarschaft definiert: die Vierer-Nachbarschaft (links, rechts, oben, unten) nach John v. Neumann und die Achter-, oder Moore-Nachbarschaft (Einbeziehung der Diagonalelemente). LIFE ist ein binrer Automat (jede Zelle kann nur zwei Zustnde annehmen). Es gelten Abzhlregeln in der Moore- Nachbarschaft: eine Zelle wird erschaffen, wenn sie genau drei lebende Nachbarn hat; sie berlebt, wenn sie zwei oder drei lebende Nachbarn hat. Unter allen anderen Umstnden bleibt die Zelle entweder tot oder sie stirbt. Das Spiel wurde erfunden, um das Verhalten einer Anordnung lebender Zellen zu simulieren (daher auch der Name). Obwohl die Spielregeln fr diesen Zweck sicherlich zu abstrakt sind, zeigt es doch, wie durch einfache, lokale Regeln komplexe Strukturen entstehen knnen. Dateien auf der Diskette: Die Diskette enthlt folgende Dateien: - LIFE_88.BAS .... Quelltext des Hauptprogramms - LIFE_88.PRG .... Das Hauptprogramm - LIFE_88.TXT .... Dieser Text - LIFE_MP.APP .... Die Maschinenroutine - LIFE_MP.ASM .... Der ASCII-Quelltext der Maschinenroutine - LIFE_MP.DOC .... Der WORDPLUS-Quelltext der Maschinenroutine Weiters ist ein Ordner STRUKTUR.LIF mit verschiedenen LIFE- Strukturen vorhanden. ber das Programm: LIFE_88 ist in Gfa-Basic und Assembler geschrieben und luft auf allen ATARI-ST mit Farb-, oder Monochrommonitor. Die Berechnung und Anzeige aufeinanderfolgender Zustnde erfolgt in Maschinensprache (es wurde um jede Mikrosekunde "gekmpft") und ist daher mit mehr als 14 Generationen pro Sekunde sehr schnell. (aus Geschwindigkeitsgrnden wurde auch das Spielfeldformat von 50*50 Zellen gewhlt; diese knnen dann durch Byte-Zugriffe in den Video-Speicher gesetzt bzw. gelscht werden). Die tatschliche Ablaufgeschwindigkeit kann jedoch in einem weiten Bereich eingestellt werden. In dieser Version von LIFE knnen die Spielregeln verndert werden: es knnen smtliche Abzhlregeln in einer 8-er Umgebung (Moore-Nachbarschaft) eingestellt werden. (Es gibt auch bei anderen als den Original Regeln interessante Phnomene und Strukturen). Die Spielfeldberandungen knnen wahlweise als benachbart (Torus-Topologie) oder als Rand erklrt werden (begrenzte Ebene). Im ersten Fall entwickeln sich daher Strukturen, die zwar an den Rand stoen, aber nicht mit sich selbst kollidieren, so, als ob ein greres Spielfeld vorhanden wre. (ein Gleiter z.B. kann dann stndig ber den Bildschirm laufen). Hervorzuheben ist der Editiermodus: Hier sind fast alle Kommandos der Menzeile sowohl ber die Tastatur, als auch ber die Maus erreichbar; zustzlich ist hier eine Einzelbildberechnung mglich. Nach jeder Darstellung kann das Spielfeld verndert werden: Setzen einer Zelle mit der linken, Lschen mit der rechten Maustaste. Drckt man im rechten, abgegrenzten Teil des Bildschirms die rechte Maustaste, erscheint der Cursor als offene Hand. Bei gedrckter Maustaste kann nun der Inhalt des Spielfeldes durch Bewegen der Maus in die gewnschte Richtung verschoben werden. Beim Speichern eines Spielfeldes werden alle Parameter (Anzeigegeschwindigkeit, Maximum des Generationenzhlers, Spielfeldtopologie und Spielregeln) mit abgespeichert. Gibt man fr den Dateinamen keine Extension an, wird automatisch .LIF bei LIFE-Spielregeln bzw. .CNR (CouNt Rule) bei allen anderen Spielregeln erzeugt. Im Farbmodus (mittlere Auflsung) ist der Menpunkt "Farben" ansprechbar: Hier knnen 2 Farben gewhlt werden (Wei und Schwarz fr Hintergrund und Schrift bleiben fest eingestellt). Die Auswahl geschieht hier durch Bewegen der Maus in einer "Farbkarte". Damit ist ein schnelleres und angenehmeres Einstellen als ber die Eingabe der RGB-Anteile mglich. Sollte durch den Gebrauch eines Accessories der Bildschirmaufbau zerstrt werden, kann er mit dem Menpunkt "Neuzeichnnen" wiederhergestellt werden. (Da das Programm ohne Fenster arbeitet, gibt GEM keine entsprechende Meldung, somit mu das "von Hand" erledigt werden). Die Datei LIFE_MP.APP ist das Maschinenspracheprogramm, das vom Hauptprogramm nachgeladen wird (es mu dazu im selben Ordner stehen). Der Quelltext dazu ist LIFE_MP.ASM. Es wurde der MCC- Assembler verwendet. Fr Interessierte: Die Parameterbergabe an das Maschinenprogramm erfolgt wegen der bekannten Fehler des Gfa- Basic Befehls CALL (V 2.0) nicht ber den Stack, sondern in den ersten 28 Bytes der Routine (die dort stehende Information fr GEMDOS wird hier nicht bentigt). Das Programm wird von Gfa-Basic in ein Integer-Feld geladen und mu daher positionsunabhngig laufen, was ja vom Prozessor 68000 voll untersttzt wird. Zum Schlu noch eine Bitte: Wenn Ihnen das Programm gefllt, und Sie interessante LIFE-Strukturen kennen oder gefunden haben, schicken Sie mir bitte (nein, nicht 20 Mark !) eine Diskette mit den Dateien. Meine Adresse: Dipl.- Ing. Anton Ziegler, Mariatrosterstrae 114, A-8043 Graz. Viel Spa beim (Er)finden ! `,&z(z*z&:8:?<NNT:?<NNT,@A Ef 2<14<1 RQNQ`.2<14< R V R VQ R QA,P00000 DeFfa~a` Dfaa` Dfaa`aa`xBA3C3 < ]gP(((((0(1(2QJDfp/AgP( ( ( (((1(2(3A gP((((((m(n(oAu QBp/A(2gP((((1((c(2(3(2A(cgP((((((1(2((cB2QgP+ + + +1++c+2+3+1gP+ + + +0+b+c+2u1+ gP+ + `+ a+ + +1+u + gP+ + + `+ + +0+1u `"p/AgP(((1(2(3A gP(((((Au QBp/A(2gP((((2(3(2A(cgP((((1(2(cB2QgP++2+3+1gP+0+b+cu1+ gP+ `+ a+ u + gP+ + + u aA(R( (:fR|0R( (:f>|0R( (:f*|0R( (:f|0R :f0A(/?< NA\ASg("R?<?<NAXH@ DgSJfL`NuA2B<~4< EfL g<"PeAPAAA@AA`@P@@@@@@XQ`, g "PeAA@` @@@XQؗ ę NuA2C <2QAC p2QNuAC2 <2QA Cp2QNuAC < QAC1p1BA2QNuAC < QA1Cp1BA2QNujk* ========================================= * * PROGRAMM ZUR BERECHNUNG UND ANZEIGE DES * NCHSTEN ZUSTANDES DES SPIELES LIFE IN * EINEM 50*50 SPIELFELD. * INCL. UNTERPROGRAMME ZUR VERSCHIEBUNG * DES GESAMTEN SPIELFELDES NACH LINKS, * RECHTS, OBEN UND UNTEN. * * FR S/W- UND FARBMONITOR (MITTL. AUFL.) * * ======================================== * ======================================== * * BELEGUNG DER CPU-REGISTER IN DER ROUTINE * * d0: temporr * d1: temporr * d2: temporr * d3: Wert fr die Verzgerungsschleife (Langwort) * d4: Wert fr die Spielfeldtopologie bzw. Verschiebeoperation (Wort): * 0=Torus, 1=offen; * 256=nach oben, 257=nach unten, 258=nach links, 259=nach rechts * d5: Wert fr die Bildschirmauflsung (Wort): 1=640*200, 2=640*400 * d6: * d7: * a0: temporr * a1: temporr * a2: temporr * a3: Startadresse des Quellfeldes * a4: Startadresse des Zielfeldes * a5: Startadresse des Auswertefeldes * a6: Bildschirm-Basisadresse * a7: Stackpointer * * ======================================== * ======================================== * * bergabeparameter: * * start-28(pc): Startadresse des Quellfeldes (Langwort) * start-24(pc): Startadresse des Zielfeldes (Langwort) * start-20(pc): Startadresse des Auswertefeldes (Langwort) * start-16(pc): Wert fr Verzgerungsschleife (Langwort) * start-12(pc): Anzahl der zu berechnenden Generationen (Langwort) * start-8(pc) : Flag fr Spielfeldtopologie: 0=Torus, 1=offen (Wort) * * Rckgabeparameter: * * start-12(pc): Anzahl der noch nicht berechneten Generationen * (bei Abbruch, sonst 0) * * ======================================== * * -------------------- * PARAMETER BERNEHMEN start: movea.l start-28(pc),a3 ;Startadresse des Quellfeldes movea.l start-24(pc),a4 ;Startadresse des Zielfeldes movea.l start-20(pc),a5 ;Startadresse des Auswertefeldes move.l start-16(pc),d3 ;Wert fr Verzgerungsschleife move.w start-8(pc),d4 ;Flag fr Spielfeldtopologie * ------------------------- * BILDSCHIRMAUFLSUNG HOLEN move.w #4,-(sp) ;Funktionsnummer f. GETREZ trap #14 ;XBIOS-Aufruf addq.l #2,sp ;Stackpointer korrigieren move.w d0,d5 ;Ergebnis nach d5 bringen * ---------------------------------- * BASISADRESSE DES BILDSCHIRMS HOLEN move.w #3,-(sp) ;Funktionsnummer fr LOGBASE trap #14 ;XBIOS aufrufen addq.l #2,sp ;Stackpointer korrigieren movea.l d0,a6 ;Ergebnis nach a6 bringen * ------------------------------------------------------------ * ZU DEN ELEMENTNUMMERN GEHRENDE BILDSCHIRMADRESSEN BERECHNEN lea zuord(pc),a0 ;Adresse der Zuordnungstabelle cmpi.w #2,d5 ;hohe Auflsung ? bne midres ;nein, fr mittlere Aufl. ber. move.w #49,d1 ;Zeilenzhler nzeile: move.w #49,d2 ;Spaltenzhler nspalte: move.l d0,(a0)+ ;zugeordnete Adresse ablegen addq.l #1,d0 ;nchste Adresse dbf d2,nspalte ;nchste Spalte i. d. BS-Zeile addi.l #590,d0 ;Beginnadr. nchste BS-Zeile dbf d1,nzeile ;nchste Zeile bra setg_00000 ;und fertig midres: move.w #49,d1 ;Zhler 1 cm1: move.w #11,d2 ;Zhler 2 cm2: move.l d0,(a0)+ ;BS-Adresse ablegen addq.l #1,d0 ;nchste Adresse move.l d0,(a0)+ ;ablegen addq.l #3,d0 ;nchste Adresse (Bitplane 0) move.l d0,(a0)+ ;ablegen addq.l #1,d0 ;nchste Adresse move.l d0,(a0)+ ;ablegen addq.l #3,d0 ;nchste Adresse dbf d2,cm2 ;d1=d1-1, if d1>-1 goto cm2 move.l d0,(a0)+ ;noch 2 Adressen ... addq.l #1,d0 ; move.l d0,(a0)+ ; addi.l #543,d0 ;Beginnadresse nchste BS-Zeile dbf d1,cm1 ;d1=d1-1, if d1>-1 goto cm1 * ------------------------------------------- * GENERATIONENZHLERSTRING AUF "00000" SETZEN setg_00000: lea counter(pc),a0 ;Startadresse der Zeichenkette move.b #$30,(a0)+ ;5*Ziffer 0 schreiben move.b #$30,(a0)+ ; move.b #$30,(a0)+ ; move.b #$30,(a0)+ ; move.b #$30,(a0) ; * ------------------------------------------- * ABFRAGE AUF VERSCHIEBEOPERATION (SCROLLING) nextgen: cmpi.w #256,d4 ;Topologie-Wort abfragen bcs lifecalc ;normale LIFE-Berechnung bne askdown ; bsr scrollup ;Feld nach oben scrollen bsr showpic ;anzeigen bra cdown ; askdown: cmpi.w #257,d4 ; bne askleft ; bsr scrolldown ;Feld nach unten scrollen bsr showpic ;anzeigen bra cdown ; askleft: cmpi.w #258,d4 ; bne thenright ; bsr scrolleft ;Feld nach links scrollen bsr showpic ;anzeigen bra cdown ; thenright: bsr scrollright ;Feld nach rechts scrollen bsr showpic ;anzeigen bra cdown ; * -------------- * ZENTRALBEREICH lifecalc: clr.l d1 ; lea 51(a3),a0 ;Quelladresse nach a0 lea 51(a4),a1 ;Zieladresse nach a1 move.l #2397,d0 ;d0 als Zhler laden center: move.b (a0)+,d1 ;Zelle selbst beq neighbrsc ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsc: add.b -52(a0),d1 ;links oben add.b -51(a0),d1 ;oben add.b -50(a0),d1 ;rechts oben add.b -2(a0),d1 ;links add.b (a0),d1 ;rechts add.b 48(a0),d1 ;links unten add.b 49(a0),d1 ;unten add.b 50(a0),d1 ;rechts unten move.b 0(a5,d1.l),(a1)+ ;nchster Zellzustand dbf d0,center ;d0=d0-1, if d0>-1 goto center * --------------------------------------------------------------- * FLAG FR SPIELFELDTOPOLOGIE ABFRAGEN (=> RANDZEILENBEARBEITUNG) tst.w d4 ;0, dann Torus bne flat ;sonst offenes Spielfeld * ---------------------------------- * OBERE UND UNTERE RANDZEILE (TORUS) moveq #47,d0 ;d0 als Zhler laden aboben: lea 1(a3,d0.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq neighbrsa ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsa: add.b 2449(a0),d1 ;links oben * add.b 2450(a0),d1 ;oben * add.b 2451(a0),d1 ;rechts oben * add.b -1(a0),d1 ;links add.b 1(a0),d1 ;rechts add.b 49(a0),d1 ;links unten add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),1(a4,d0.l) ;nchster Zellzustand * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lea 0(a3,d0.l),a0 ;Zelladresse adda.l #2451,a0 ;nach a0 move.b (a0),d1 ;Zelle selbst beq neighbrsb ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsb: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b -1(a0),d1 ;links add.b 1(a0),d1 ;rechts add.b -2451(a0),d1 ;links unten * add.b -2450(a0),d1 ;unten * add.b -2449(a0),d1 ;rechts unten * lea 0(a4,d0.l),a0 ;Basisadresse im Zielfeld move.b 0(a5,d1.l),2451(a0) ;nchster Zellzustand dbf d0,aboben ;d0=d0-1, if d0>-1 goto aboben * ---------------------------------- * LINKE UND RECHTE RANDZEILE (TORUS) clr.l d2 ;d2 als Hilfszhler (wird pro ;Durchlauf um 50 erhht) moveq #47,d0 ;d0 als Zhler laden lefrig: lea 50(a3,d2.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq neighbrsl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsl: add.b -1(a0),d1 ;links oben * add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b 49(a0),d1 ;links * add.b 1(a0),d1 ;rechts add.b 99(a0),d1 ;links unten * add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),50(a4,d2.l) ;nchster Zellzustand * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lea 99(a3,d2.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq neighbrsr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsr: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -99(a0),d1 ;rechts oben * add.b -1(a0),d1 ;links add.b -49(a0),d1 ;rechts * add.b 49(a0),d1 ;links unten add.b 50(a0),d1 ;unten add.b 1(a0),d1 ;rechts unten * move.b 0(a5,d1.l),99(a4,d2.l) ;nchster Zellzustand addi.w #50,d2 ;Hilfszhler um 50 erhhen dbf d0,lefrig ;d0=d0-1, if d0>-1 goto lefrig * --------------------------- * ECKPUNKT OBEN LINKS (TORUS) move.b (a3),d1 ;Zelle selbst beq neighbrsal ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsal: add.b 2499(a3),d1 ;links oben * add.b 2450(a3),d1 ;oben * add.b 2451(a3),d1 ;rechts oben * add.b 49(a3),d1 ;links * add.b 1(a3),d1 ;rechts add.b 99(a3),d1 ;links unten * add.b 50(a3),d1 ;unten add.b 51(a3),d1 ;rechts unten move.b 0(a5,d1.l),(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT OBEN RECHTS (TORUS) move.b 49(a3),d1 ;Zelle selbst beq neighbrsar ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsar: add.b 2498(a3),d1 ;links oben * add.b 2499(a3),d1 ;oben * add.b 2450(a3),d1 ;rechts oben * add.b 48(a3),d1 ;links add.b (a3),d1 ;rechts * add.b 98(a3),d1 ;links unten add.b 99(a3),d1 ;unten add.b 50(a3),d1 ;rechts unten * move.b 0(a5,d1.l),49(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT UNTEN LINKS (TORUS) move.b 2450(a3),d1 ;Zelle selbst beq neighbrsbl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsbl: add.b 2449(a3),d1 ;links oben * add.b 2400(a3),d1 ;oben add.b 2401(a3),d1 ;rechts oben add.b 2499(a3),d1 ;links * add.b 2451(a3),d1 ;rechts add.b 49(a3),d1 ;links unten * add.b (a3),d1 ;unten * add.b 1(a3),d1 ;rechts unten * move.b 0(a5,d1.l),2450(a4) ;nchster Zellzustand * ----------------------------- * ECKPUNKT UNTEN RECHTS (TORUS) move.b 2499(a3),d1 ;Zelle selbst beq neighbrsbr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsbr: add.b 2448(a3),d1 ;links oben add.b 2449(a3),d1 ;oben add.b 2400(a3),d1 ;rechts oben * add.b 2498(a3),d1 ;links add.b 2450(a3),d1 ;rechts * add.b 48(a3),d1 ;links unten * add.b 49(a3),d1 ;unten * add.b (a3),d1 ;rechts unten * move.b 0(a5,d1.l),2499(a4) ;nchster Zellzustand bra nexpic ;nchstes Bild anzeigen * ---------------------------------- * OBERE UND UNTERE RANDZEILE (OFFEN) flat: moveq #47,d0 ;d0 als Zhler laden faboben: lea 1(a3,d0.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq fneighbrsa ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsa: add.b -1(a0),d1 ;links add.b 1(a0),d1 ;rechts add.b 49(a0),d1 ;links unten add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),1(a4,d0.l) ;nchster Zellzustand * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lea 0(a3,d0.l),a0 ;Zelladresse adda.l #2451,a0 ;nach a0 move.b (a0),d1 ;Zelle selbst beq fneighbrsb ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsb: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b -1(a0),d1 ;links add.b 1(a0),d1 ;rechts lea 0(a4,d0.l),a0 ;Basisadresse im Zielfeld move.b 0(a5,d1.l),2451(a0) ;nchster Zellzustand dbf d0,faboben ;d0=d0-1, if d0>-1 goto faboben * ---------------------------------- * LINKE UND RECHTE RANDZEILE (OFFEN) clr.l d2 ;d2 als Hilfszhler (wird pro ;Durchlauf um 50 erhht) moveq #47,d0 ;d0 als Zhler laden flefrig: lea 50(a3,d2.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq fneighbrsl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsl: add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b 1(a0),d1 ;rechts add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),50(a4,d2.l) ;nchster Zellzustand * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lea 99(a3,d2.l),a0 ;Zelladresse nach a0 move.b (a0),d1 ;Zelle selbst beq fneighbrsr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsr: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -1(a0),d1 ;links add.b 49(a0),d1 ;links unten add.b 50(a0),d1 ;unten move.b 0(a5,d1.l),99(a4,d2.l) ;nchster Zellzustand addi.w #50,d2 ;Hilfszhler um 50 erhhen dbf d0,flefrig ;d0=d0-1, if d0>-1 goto flefrig * --------------------------- * ECKPUNKT OBEN LINKS (OFFEN) move.b (a3),d1 ;Zelle selbst beq fneighbsal ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsal: add.b 1(a3),d1 ;rechts add.b 50(a3),d1 ;unten add.b 51(a3),d1 ;rechts unten move.b 0(a5,d1.l),(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT OBEN RECHTS (OFFEN) move.b 49(a3),d1 ;Zelle selbst beq fneighbsar ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsar: add.b 48(a3),d1 ;links add.b 98(a3),d1 ;links unten add.b 99(a3),d1 ;unten move.b 0(a5,d1.l),49(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT UNTEN LINKS (OFFEN) move.b 2450(a3),d1 ;Zelle selbst beq fneighbsbl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsbl: add.b 2400(a3),d1 ;oben add.b 2401(a3),d1 ;rechts oben add.b 2451(a3),d1 ;rechts move.b 0(a5,d1.l),2450(a4) ;nchster Zellzustand * ----------------------------- * ECKPUNKT UNTEN RECHTS (OFFEN) move.b 2499(a3),d1 ;Zelle selbst beq fneighbsbr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsbr: add.b 2448(a3),d1 ;links oben add.b 2449(a3),d1 ;oben add.b 2498(a3),d1 ;links move.b 0(a5,d1.l),2499(a4) ;nchster Zellzustand * ------------------------------------ * NEUEN ZUSTAND AM BILDSCHIRM ANZEIGEN nexpic: bsr showpic ; * ----------------------------------------------- * GENERATIONENZHLERSTRING DEZIMAL INKREMENTIEREN lea counter(pc),a0 ;Startadresse der Zeichenkette addq.b #1,4(a0) ;Stelle 0 inkrementieren cmpi.b #$3a,4(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,4(a0) ;ja, dann Stelle 0=Ziffer 0 addq.b #1,3(a0) ;und Stelle 1 inkrementieren cmpi.b #$3a,3(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,3(a0) ;ja, dann Stelle 1=Ziffer 0 addq.b #1,2(a0) ;und Stelle 2 inkrementieren cmpi.b #$3a,2(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,2(a0) ;ja, dann Stelle 2=Ziffer 0 addq.b #1,1(a0) ;und Stelle 3 inkrementieren cmpi.b #$3a,1(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,1(a0) ;ja, dann Stelle 3=Ziffer 0 addq.b #1,(a0) ;und Stelle 4 inkrementieren cmpi.b #$3a,(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,(a0) ;ja, dann Stelle 4=Ziffer 0 * ---------------------------------- * ZHLERSTAND AM BILDSCHIRM AUSGEBEN print: lea scursor(pc),a0 ;Adresse der Zeichenkette move.l a0,-(sp) ;auf den Stack move.w #9,-(sp) ;Funktionsnummer trap #1 ;GEMDOS-Aufruf PRINT LINE addq.l #6,sp ;Stackpointer in Ordnung bringen * ----------------------------------- * GENERATIONENZHLER UM 1 ERNIEDRIGEN cdown: lea start-12(pc),a0 ;Adresse des Zhlers subq.l #1,(a0) ;Inhalt um 1 erniedrigen beq exit ;Rcksprung, falls Ende * ---------------------------------------- * VERZGERUNGSSCHLEIFE MIT TASTATURABFRAGE move.l d3,d1 ;Verzgerungswert nach d1 addq.l #1,d1 ;(falls 0 angegeben wurde) wait: move.w #$ff,-(sp) ;Funktionsw. "Tastatur prfen" move.w #6,-(sp) ;Funktionsnummer trap #1 ;GEMDOS-Aufruf RAWCONIO addq.l #4,sp ;Stackpointer korrigieren swap d0 ;Scan-Code in d. unt. Hlfte cmpi.b #$44,d0 ;wurde F10 gedrckt ? beq exit ;ja, dann Rcksprung subq.l #1,d1 ;Register um 1 erniedrigen tst.l d1 ;0 schon erreicht ? bne wait ;nein, dann weitermachen * -------------------------------------------- * ADRESSEN VON QUELL- UND ZIELFELD VERTAUSCHEN exg a3,a4 ; bra nextgen ;nchste Generation berechnen * ---------------------- * RCKKEHR INS GFA-BASIC exit: rts ; * ------------------------------------------------------ * UNTERPROGRAMM: NCHSTEN ZUSTAND AM BILDSCHIRM ANZEIGEN showpic: lea zuord(pc),a0 ;Adresse der BS-Adresstabelle clr.b d0 ;zum Lschen move.b #%01111110,d1 ;auszugebendes Muster move.w #2499,d2 ;d2 als Zhler laden cmpi.w #2,d5 ;hohe Auflsung ? bne askdiffc ;nein, dann mittlere Aufl. askdiffm: cmpm.b (a3)+,(a4)+ ;Zustand verndert ? beq conttm ;nein, dann keine Aktion movea.l (a0),a1 ;BS-Adresse laden bcs eracellm ;1->0, dann lschen move.b d1,80(a1) ;Rechteck move.b d1,160(a1) ;mit move.b d1,240(a1) ;6*6 move.b d1,320(a1) ;Punkten move.b d1,400(a1) ;setzen move.b d1,480(a1) ; bra conttm ; eracellm: move.b d0,80(a1) ;Rechteck move.b d0,160(a1) ; move.b d0,240(a1) ; move.b d0,320(a1) ; move.b d0,400(a1) ; move.b d0,480(a1) ;lschen conttm: addq.l #4,a0 ;Zeiger: nchste BS-Adresse dbf d2,askdiffm ;d2=d2-1, if d2>-1 goto askdiffm bra rest_point ;und fertig askdiffc: cmpm.b (a3)+,(a4)+ ;Zustand verndert ? beq conttc ;nein, dann keine Aktion movea.l (a0),a1 ;BS-Adresse laden bcs eracellc ;1->0, dann lschen move.b d1,(a1) ;Rechteck move.b d1,160(a1) ;mit 6*3 Punkten move.b d1,320(a1) ;setzen bra conttc ; eracellc: move.b d0,(a1) ;Rechteck move.b d0,160(a1) ;mit 6*3 Punkten move.b d0,320(a1) ;lschen conttc: addq.l #4,a0 ;Zeiger: nchste BS-Adresse dbf d2,askdiffc ;d2=d2-1, if d2>-1 goto askdiffc rest_point: suba.l #2500,a3 ;Quellfeldzeiger restaurieren suba.l #2500,a4 ;Zielfeldzeiger restaurieren rts ; * -------------------------------------- * UNTERPROGRAMM: FELD NACH OBEN SCROLLEN scrollup: lea 50(a3),a0 ;Quelle lea (a4),a1 ;Ziel move.l #1224,d0 ;Zhler scup: move.w (a0)+,(a1)+ ;Zeilen 1 - 49 dbf d0,scup ;verschieben lea (a3),a0 ;Quelle lea 2450(a4),a1 ;Ziel moveq #24,d0 ;Zhler lup: move.w (a0)+,(a1)+ ;Zeile 0 dbf d0,lup ;verschieben rts ; * --------------------------------------- * UNTERPROGRAMM: FELD NACH UNTEN SCROLLEN scrolldown: lea (a3),a0 ;Quelle lea 50(a4),a1 ;Ziel move.l #1224,d0 ;Zhler scdown: move.w (a0)+,(a1)+ ;Zeilen 0 - 48 dbf d0,scdown ;verschieben lea 2450(a3),a0 ;Quelle lea (a4),a1 ;Ziel moveq #24,d0 ;Zhler ldown: move.w (a0)+,(a1)+ ;Zeile 49 dbf d0,ldown ;verschieben rts ; * --------------------------------------- * UNTERPROGRAMM: FELD NACH LINKS SCROLLEN scrolleft: lea 1(a3),a0 ;Quelle lea (a4),a1 ;Ziel move.l #2498,d0 ;Zhler scleft: move.b (a0)+,(a1)+ ;Spalten 1 - 49 dbf d0,scleft ;verschieben lea (a3),a0 ;Quelle lea 49(a4),a1 ;Ziel moveq #49,d0 ;Zhler clr.l d1 ; lleft: move.b 0(a0,d1.l),0(a1,d1.l) ;Spalte 0 addi.w #50,d1 ; dbf d0,lleft ;verschieben rts ; * ---------------------------------------- * UNTERPROGRAMM: FELD NACH RECHTS SCROLLEN scrollright: lea (a3),a0 ;Quelle lea 1(a4),a1 ;Ziel move.l #2498,d0 ;Zhler scright: move.b (a0)+,(a1)+ ;Spalten 0 - 48 dbf d0,scright ;verschieben lea 49(a3),a0 ;Quelle lea (a4),a1 ;Ziel moveq #49,d0 ;Zhler clr.l d1 ; lright: move.b 0(a0,d1.l),0(a1,d1.l) ;Spalte 49 addi.w #50,d1 ; dbf d0,lright ;verschieben rts ; * -------------------- * DATENSPEICHERBEREICH zuord: ds.l 2500 ;Tabelle fr die Zuordnung ;Elementnummer-Bildschirmadr. scursor: dc.b 27,"j" ;ESC j=Cursorposition ;speichern counter: ds.b 5 ;5 Bytes fr den 5-stelligen ;Dezimalzhler dc.b 27,"k",0 ;ESC k=Cursor auf die ge- ;speicherte Pos. setzen end 07201030305800 1ProgrammLIFE_MPSeite # 2 F0110030 9[......................................................................]001 * ========================================= * * PROGRAMM ZUR BERECHNUNG UNDANZEIGEDES * NCHSTENZUSTANDES DES SPIELES LIFE IN * EINEM50*50 SPIELFELD. *INCL.UNTERPROGRAMMEZURVERSCHIEBUNG *DESGESAMTENSPIELFELDESNACHLINKS, *RECHTS,OBENUNDUNTEN. * *FRS/W-UNDFARBMONITOR(MITTL.AUFL.) * * ======================================== * ======================================== * * BELEGUNG DER CPU-REGISTER IN DER ROUTINE * * d0: temporr * d1: temporr * d2: temporr * d3:WertfrdieVerzgerungsschleife(Langwort) * d4:WertfrdieSpielfeldtopologiebzw.Verschiebeoperation(Wort): *0=Torus,1=offen; * 256=nachoben,257=nachunten,258=nachlinks,259=nachrechts * d5:WertfrdieBildschirmauflsung(Wort):1=640*200,2=640*400 * d6: * d7: * a0: temporr * a1: temporr * a2: temporr * a3:StartadressedesQuellfeldes * a4:StartadressedesZielfeldes * a5:StartadressedesAuswertefeldes * a6:Bildschirm-Basisadresse * a7: Stackpointer * * ======================================== * ======================================== * * bergabeparameter: * * start-28(pc): Startadresse des Quellfeldes (Langwort) * start-24(pc): Startadresse des Zielfeldes (Langwort) * start-20(pc): Startadresse des Auswertefeldes (Langwort) *start-16(pc):WertfrVerzgerungsschleife(Langwort) * start-12(pc): AnzahlderzuberechnendenGenerationen(Langwort) *start-8(pc):Flag fr Spielfeldtopologie: 0=Torus, 1=offen (Wort) * * Rckgabeparameter: * * start-12(pc):AnzahldernochnichtberechnetenGenerationen *(beiAbbruch,sonst0) * * ======================================== * * -------------------- * PARAMETER BERNEHMEN start: movea.l start-28(pc),a3 ;Startadresse des Quellfeldes movea.l start-24(pc),a4 ;Startadresse des Zielfeldes movea.l start-20(pc),a5 ;Startadresse des Auswertefeldes move.l start-16(pc),d3 ;WertfrVerzgerungsschleife move.w start-8(pc),d4;FlagfrSpielfeldtopologie *------------------------- *BILDSCHIRMAUFLSUNGHOLEN move.w #4,-(sp) ;Funktionsnummerf.GETREZ trap #14 ;XBIOS-Aufruf addq.l #2,sp ;Stackpointerkorrigieren move.w d0,d5 ;Ergebnisnachd5bringen *---------------------------------- *BASISADRESSEDESBILDSCHIRMSHOLEN move.w #3,-(sp) ;FunktionsnummerfrLOGBASE trap #14 ;XBIOSaufrufen addq.l #2,sp ;Stackpointerkorrigieren movea.l d0,a6 ;Ergebnisnacha6bringen *------------------------------------------------------------ *ZUDENELEMENTNUMMERNGEHRENDEBILDSCHIRMADRESSENBERECHNEN lea zuord(pc),a0 ;AdressederZuordnungstabelle cmpi.w #2,d5 ;hoheAuflsung? bne midres ;nein,frmittlereAufl.ber.  move.w #49,d1 ;Zeilenzhler nzeile: move.w #49,d2 ;Spaltenzhler nspalte: move.l d0,(a0)+ ;zugeordneteAdresseablegen addq.l #1,d0 ;nchsteAdresse dbf d2,nspalte ;nchsteSpaltei.d.BS-Zeile addi.l #590,d0 ;Beginnadr.nchsteBS-Zeile dbf d1,nzeile ;nchsteZeile bra setg_00000  ;undfertig midres: move.w #49,d1 ;Zhler1 cm1: move.w #11,d2 ;Zhler2 cm2: move.l d0,(a0)+ ;BS-Adresseablegen addq.l #1,d0 ;nchsteAdresse move.l d0,(a0)+ ;ablegen addq.l #3,d0 ;nchsteAdresse(Bitplane0) move.l d0,(a0)+ ;ablegen addq.l #1,d0 ;nchsteAdresse move.l d0,(a0)+ ;ablegen addq.l #3,d0 ;nchsteAdresse dbf d2,cm2 ;d1=d1-1,ifd1>-1gotocm2 move.l d0,(a0)+ ;noch2Adressen... addq.l #1,d0 ; move.l d0,(a0)+ ; addi.l #543,d0 ;BeginnadressenchsteBS-Zeile  dbf d1,cm1 ;d1=d1-1,ifd1>-1gotocm1 * ------------------------------------------- * GENERATIONENZHLERSTRING AUF "00000" SETZEN setg_00000: lea counter(pc),a0 ;Startadresse der Zeichenkette move.b #$30,(a0)+ ;5*Ziffer 0 schreiben move.b #$30,(a0)+ ; move.b #$30,(a0)+ ; move.b #$30,(a0)+ ; move.b #$30,(a0) ; *------------------------------------------- *ABFRAGEAUFVERSCHIEBEOPERATION(SCROLLING) nextgen: cmpi.w #256,d4 ;Topologie-Wortabfragen bcs lifecalc ;normaleLIFE-Berechnung bne askdown ; bsr scrollup ;Feldnachobenscrollen bsr showpic ;anzeigen bra cdown ; askdown: cmpi.w #257,d4 ; bne askleft ; bsr scrolldown ;Feldnachuntenscrollen bsr showpic ;anzeigen bra cdown ; askleft: cmpi.w #258,d4 ; bne thenright ; bsr scrolleft ;Feldnachlinksscrollen bsr showpic ;anzeigen bra cdown ; thenright: bsr scrollright ;Feldnachrechtsscrollen bsr showpic ;anzeigen bra cdown ; * -------------- * ZENTRALBEREICH lifecalc: clr.l d1 ;  lea 51(a3),a0  ;Quelladressenacha0 lea 51(a4),a1 ;Zieladressenacha1 move.l #2397,d0 ;d0 als Zhler laden center: move.b (a0)+,d1  ;Zelle selbst beq neighbrsc ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsc: add.b -52(a0),d1 ;links oben add.b -51(a0),d1  ;oben add.b -50(a0),d1 ;rechts oben add.b -2(a0),d1  ;links add.b (a0),d1 ;rechts add.b 48(a0),d1  ;links unten add.b 49(a0),d1  ;unten add.b 50(a0),d1  ;rechts unten  move.b 0(a5,d1.l),(a1)+;nchster Zellzustand dbf d0,center ;d0=d0-1, if d0>-1 goto center * --------------------------------------------------------------- * FLAG FR SPIELFELDTOPOLOGIE ABFRAGEN (=> RANDZEILENBEARBEITUNG) tst.w d4 ;0, dann Torus bne flat ;sonst offenes Spielfeld * ---------------------------------- * OBERE UND UNTERE RANDZEILE (TORUS) moveq #47,d0  ;d0 als Zhler laden aboben: lea 1(a3,d0.l),a0 ;Zelladressenacha0  move.b (a0),d1  ;Zelle selbst beq neighbrsa ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsa: add.b 2449(a0),d1  ;links oben* add.b 2450(a0),d1 ;oben* add.b 2451(a0),d1 ;rechts oben* add.b -1(a0),d1  ;links add.b 1(a0),d1 ;rechts add.b 49(a0),d1 ;links unten add.b 50(a0),d1  ;unten add.b 51(a0),d1  ;rechts unten move.b 0(a5,d1.l),1(a4,d0.l) ;nchster Zellzustand *------------------------------- lea 0(a3,d0.l),a0  ;Zelladresse adda.l #2451,a0 ;nacha0 move.b (a0),d1 ;Zelle selbst beq neighbrsb ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsb: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -49(a0),d1  ;rechts oben add.b -1(a0),d1   ;links add.b 1(a0),d1  ;rechts add.b -2451(a0),d1 ;links unten* add.b -2450(a0),d1  ;unten* add.b -2449(a0),d1 ;rechts unten* lea 0(a4,d0.l),a0 ;BasisadresseimZielfeld move.b 0(a5,d1.l),2451(a0) ;nchster Zellzustand dbf d0,aboben ;d0=d0-1, if d0>-1 goto aboben * ---------------------------------- * LINKE UND RECHTE RANDZEILE (TORUS) clr.l d2 ;d2 als Hilfszhler (wird pro ;Durchlauf um 50 erhht) moveq #47,d0  ;d0 als Zhler laden lefrig: lea 50(a3,d2.l),a0 ;Zelladressenacha0  move.b (a0),d1  ;Zelle selbst beq neighbrsl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsl: add.b -1(a0),d1 ;links oben* add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b 49(a0),d1 ;links* add.b 1(a0),d1 ;rechts add.b 99(a0),d1 ;links unten* add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),50(a4,d2.l) ;nchster Zellzustand *------------------------------- lea 99(a3,d2.l),a0 ;Zelladressenacha0 move.b (a0),d1  ;Zelle selbst beq neighbrsr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsr: add.b -51(a0),d1  ;links oben add.b -50(a0),d1 ;oben add.b -99(a0),d1  ;rechts oben* add.b -1(a0),d1  ;links add.b -49(a0),d1  ;rechts* add.b 49(a0),d1  ;links unten add.b 50(a0),d1   ;unten add.b 1(a0),d1   ;rechts unten* move.b 0(a5,d1.l),99(a4,d2.l) ;nchster Zellzustand addi.w #50,d2 ;Hilfszhler um 50 erhhen dbf d0,lefrig ;d0=d0-1, if d0>-1 goto lefrig * --------------------------- * ECKPUNKT OBEN LINKS (TORUS) move.b (a3),d1 ;Zelle selbst beq neighbrsal ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsal: add.b 2499(a3),d1 ;links oben* add.b 2450(a3),d1 ;oben* add.b 2451(a3),d1 ;rechts oben* add.b 49(a3),d1 ;links* add.b 1(a3),d1 ;rechts add.b 99(a3),d1 ;links unten* add.b 50(a3),d1 ;unten add.b 51(a3),d1 ;rechts unten move.b 0(a5,d1.l),(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT OBEN RECHTS (TORUS) move.b 49(a3),d1  ;Zelle selbst beq neighbrsar ;Zelle tot  addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsar: add.b 2498(a3),d1 ;links oben* add.b 2499(a3),d1 ;oben* add.b 2450(a3),d1 ;rechts oben* add.b 48(a3),d1 ;links add.b (a3),d1 ;rechts* add.b 98(a3),d1 ;links unten add.b 99(a3),d1 ;unten add.b 50(a3),d1 ;rechts unten* move.b 0(a5,d1.l),49(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT UNTEN LINKS (TORUS) move.b 2450(a3),d1 ;Zelle selbst beq neighbrsbl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsbl: add.b 2449(a3),d1 ;links oben* add.b 2400(a3),d1 ;oben add.b 2401(a3),d1 ;rechts oben add.b 2499(a3),d1 ;links* add.b 2451(a3),d1 ;rechts add.b 49(a3),d1 ;links unten* add.b (a3),d1 ;unten* add.b 1(a3),d1 ;rechts unten* move.b 0(a5,d1.l),2450(a4) ;nchster Zellzustand * ----------------------------- * ECKPUNKT UNTEN RECHTS (TORUS) move.b 2499(a3),d1 ;Zelle selbst beq neighbrsbr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren neighbrsbr: add.b 2448(a3),d1 ;links oben add.b 2449(a3),d1 ;oben add.b 2400(a3),d1 ;rechts oben* add.b 2498(a3),d1 ;links add.b 2450(a3),d1 ;rechts* add.b 48(a3),d1 ;links unten* add.b 49(a3),d1 ;unten* add.b (a3),d1 ;rechts unten* move.b 0(a5,d1.l),2499(a4) ;nchster Zellzustand bra nexpic ;nchstesBildanzeigen * ---------------------------------- * OBERE UND UNTERE RANDZEILE (OFFEN) flat: moveq #47,d0 ;d0 als Zhler laden faboben: lea 1(a3,d0.l),a0 ;Zelladressenacha0  move.b (a0),d1  ;Zelle selbst beq fneighbrsa ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren  fneighbrsa: add.b -1(a0),d1  ;links add.b 1(a0),d1 ;rechts add.b 49(a0),d1 ;links unten add.b 50(a0),d1  ;unten add.b 51(a0),d1  ;rechts unten move.b 0(a5,d1.l),1(a4,d0.l) ;nchster Zellzustand *------------------------------- lea 0(a3,d0.l),a0  ;Zelladresse adda.l #2451,a0 ;nacha0 move.b (a0),d1 ;Zelle selbst beq fneighbrsb ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsb: add.b -51(a0),d1 ;links oben add.b -50(a0),d1 ;oben add.b -49(a0),d1  ;rechts oben add.b -1(a0),d1   ;links add.b 1(a0),d1  ;rechts lea 0(a4,d0.l),a0 ;BasisadresseimZielfeld move.b 0(a5,d1.l),2451(a0) ;nchster Zellzustand dbf d0,faboben ;d0=d0-1, if d0>-1 goto faboben * ---------------------------------- * LINKE UND RECHTE RANDZEILE (OFFEN) clr.l d2 ;d2 als Hilfszhler (wird pro ;Durchlauf um 50 erhht) moveq #47,d0 ;d0 als Zhler laden flefrig: lea 50(a3,d2.l),a0 ;Zelladressenacha0  move.b (a0),d1  ;Zelle selbst beq fneighbrsl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsl: add.b -50(a0),d1 ;oben add.b -49(a0),d1 ;rechts oben add.b 1(a0),d1 ;rechts add.b 50(a0),d1 ;unten add.b 51(a0),d1 ;rechts unten move.b 0(a5,d1.l),50(a4,d2.l) ;nchster Zellzustand *------------------------------- lea 99(a3,d2.l),a0 ;Zelladressenacha0 move.b (a0),d1  ;Zelle selbst beq fneighbrsr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbrsr: add.b -51(a0),d1  ;links oben add.b -50(a0),d1 ;oben add.b -1(a0),d1  ;links add.b 49(a0),d1  ;links unten add.b 50(a0),d1   ;unten  move.b 0(a5,d1.l),99(a4,d2.l) ;nchster Zellzustand addi.w #50,d2 ;Hilfszhler um 50 erhhen dbf d0,flefrig ;d0=d0-1, if d0>-1 goto flefrig * --------------------------- * ECKPUNKT OBEN LINKS (OFFEN) move.b (a3),d1 ;Zelle selbst beq fneighbsal  ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsal: add.b 1(a3),d1 ;rechts add.b 50(a3),d1 ;unten add.b 51(a3),d1 ;rechts unten move.b 0(a5,d1.l),(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT OBEN RECHTS (OFFEN) move.b 49(a3),d1  ;Zelle selbst beq fneighbsar ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsar: add.b 48(a3),d1 ;links add.b 98(a3),d1 ;links unten add.b 99(a3),d1 ;unten move.b 0(a5,d1.l),49(a4) ;nchster Zellzustand * ---------------------------- * ECKPUNKT UNTEN LINKS (OFFEN) move.b 2450(a3),d1 ;Zelle selbst beq fneighbsbl ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsbl: add.b 2400(a3),d1 ;oben add.b 2401(a3),d1 ;rechts oben add.b 2451(a3),d1 ;rechts move.b 0(a5,d1.l),2450(a4) ;nchster Zellzustand * ----------------------------- * ECKPUNKT UNTEN RECHTS (OFFEN) move.b 2499(a3),d1 ;Zelle selbst beq fneighbsbr ;Zelle tot addq.b #8,d1 ;sonst 8 hinzuaddieren fneighbsbr: add.b 2448(a3),d1 ;links oben add.b 2449(a3),d1 ;oben add.b 2498(a3),d1 ;links move.b 0(a5,d1.l),2499(a4) ;nchster Zellzustand *------------------------------------ * NEUENZUSTANDAMBILDSCHIRMANZEIGEN  nexpic: bsr showpic ; * ----------------------------------------------- * GENERATIONENZHLERSTRING DEZIMAL INKREMENTIEREN lea counter(pc),a0 ;Startadresse der Zeichenkette addq.b #1,4(a0) ;Stelle 0 inkrementieren cmpi.b #$3a,4(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,4(a0) ;ja, dann Stelle 0=Ziffer 0 addq.b #1,3(a0) ;und Stelle 1 inkrementieren cmpi.b #$3a,3(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,3(a0) ;ja, dann Stelle 1=Ziffer 0 addq.b #1,2(a0) ;und Stelle 2 inkrementieren cmpi.b #$3a,2(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,2(a0) ;ja, dann Stelle 2=Ziffer 0 addq.b #1,1(a0) ;und Stelle 3 inkrementieren cmpi.b #$3a,1(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,1(a0) ;ja, dann Stelle 3=Ziffer 0 addq.b #1,(a0) ;und Stelle 4 inkrementieren cmpi.b #$3a,(a0) ;berlauf ? bne print ;nein, dann Ausgabe move.b #$30,(a0) ;ja, dann Stelle 4=Ziffer 0 * ---------------------------------- * ZHLERSTAND AM BILDSCHIRM AUSGEBEN print: lea scursor(pc),a0 ;Adresse der Zeichenkette move.l a0,-(sp) ;auf den Stack move.w #9,-(sp) ;Funktionsnummer trap #1 ;GEMDOS-Aufruf PRINT LINE addq.l #6,sp ;Stackpointer in Ordnung bringen *----------------------------------- *GENERATIONENZHLERUM1ERNIEDRIGEN cdown: lea start-12(pc),a0 ;AdressedesZhlers subq.l #1,(a0) ;Inhaltum1erniedrigen beq exit ;Rcksprung,fallsEnde *---------------------------------------- *VERZGERUNGSSCHLEIFEMITTASTATURABFRAGE move.l d3,d1 ;Verzgerungswertnachd1 addq.l #1,d1 ;(falls0angegebenwurde) wait: move.w #$ff,-(sp) ;Funktionsw."Tastaturprfen" move.w #6,-(sp) ;Funktionsnummer trap #1 ;GEMDOS-AufrufRAWCONIO addq.l #4,sp ;Stackpointerkorrigieren  swap d0 ;Scan-Codeind.unt.Hlfte cmpi.b #$44,d0 ;wurdeF10gedrckt? beq exit ;ja,dannRcksprung  subq.l #1,d1 ;Registerum1erniedrigen tst.l d1 ;0schonerreicht? bne wait ;nein,dannweitermachen *-------------------------------------------- *ADRESSENVONQUELL-UNDZIELFELDVERTAUSCHEN exg a3,a4 ; bra nextgen ;nchsteGenerationberechnen * ---------------------- * RCKKEHR INS GFA-BASIC exit: rts ; *------------------------------------------------------ *UNTERPROGRAMM:NCHSTENZUSTANDAMBILDSCHIRMANZEIGEN showpic: lea zuord(pc),a0 ;AdressederBS-Adresstabelle clr.b d0 ;zumLschen move.b #%01111110,d1 ;auszugebendesMuster  move.w #2499,d2 ;d2 als Zhler laden cmpi.w #2,d5 ;hoheAuflsung? bne askdiffc ;nein,dannmittlereAufl. askdiffm: cmpm.b (a3)+,(a4)+ ;Zustandverndert? beq conttm ;nein,dannkeineAktion movea.l (a0),a1 ;BS-Adresseladen bcs eracellm ;1->0,dannlschen  move.b d1,80(a1) ;Rechteck move.b d1,160(a1) ;mit move.b d1,240(a1) ;6*6 move.b d1,320(a1) ;Punkten move.b d1,400(a1) ;setzen move.b d1,480(a1) ; bra conttm ; eracellm: move.b d0,80(a1) ;Rechteck move.b d0,160(a1) ; move.b d0,240(a1) ; move.b d0,320(a1) ; move.b d0,400(a1) ; move.b d0,480(a1) ;lschen conttm: addq.l #4,a0 ;Zeiger:nchsteBS-Adresse  dbf d2,askdiffm ;d2=d2-1, if d2>-1 goto askdiffm bra rest_point ;undfertig askdiffc: cmpm.b (a3)+,(a4)+ ;Zustandverndert? beq conttc ;nein,dannkeineAktion  movea.l (a0),a1 ;BS-Adresseladen bcs eracellc ;1->0,dannlschen  move.b d1,(a1)  ;Rechteck move.b d1,160(a1) ;mit6*3Punkten move.b d1,320(a1) ;setzen bra conttc ; eracellc: move.b d0,(a1) ;Rechteck move.b d0,160(a1) ;mit6*3Punkten move.b d0,320(a1) ;lschen conttc: addq.l #4,a0 ;Zeiger:nchsteBS-Adresse  dbf d2,askdiffc ;d2=d2-1, if d2>-1 goto askdiffc rest_point: suba.l #2500,a3 ;Quellfeldzeigerrestaurieren suba.l #2500,a4 ;Zielfeldzeigerrestaurieren rts ; *-------------------------------------- *UNTERPROGRAMM:FELDNACHOBENSCROLLEN scrollup: lea 50(a3),a0 ;Quelle lea (a4),a1 ;Ziel move.l #1224,d0 ;Zhler scup: move.w (a0)+,(a1)+ ;Zeilen1-49 dbf d0,scup ;verschieben lea (a3),a0 ;Quelle lea 2450(a4),a1 ;Ziel moveq #24,d0 ;Zhler lup: move.w (a0)+,(a1)+ ;Zeile0 dbf d0,lup ;verschieben rts ; *--------------------------------------- *UNTERPROGRAMM:FELDNACHUNTENSCROLLEN scrolldown: lea (a3),a0 ;Quelle lea 50(a4),a1 ;Ziel move.l #1224,d0 ;Zhler scdown: move.w (a0)+,(a1)+ ;Zeilen0-48 dbf d0,scdown ;verschieben lea 2450(a3),a0 ;Quelle lea (a4),a1  ;Ziel moveq #24,d0 ;Zhler ldown: move.w (a0)+,(a1)+ ;Zeile49 dbf d0,ldown ;verschieben rts ;  *--------------------------------------- *UNTERPROGRAMM:FELDNACHLINKSSCROLLEN scrolleft: lea 1(a3),a0 ;Quelle lea (a4),a1 ;Ziel move.l #2498,d0 ;Zhler scleft: move.b (a0)+,(a1)+ ;Spalten1-49 dbf d0,scleft ;verschieben lea (a3),a0 ;Quelle lea 49(a4),a1 ;Ziel moveq #49,d0 ;Zhler clr.l d1 ; lleft: move.b 0(a0,d1.l),0(a1,d1.l);Spalte0 addi.w #50,d1 ; dbf d0,lleft ;verschieben rts ; *---------------------------------------- *UNTERPROGRAMM:FELDNACHRECHTSSCROLLEN scrollright: lea (a3),a0  ;Quelle lea 1(a4),a1 ;Ziel move.l #2498,d0 ;Zhler scright: move.b (a0)+,(a1)+ ;Spalten0-48 dbf d0,scright ;verschieben lea 49(a3),a0 ;Quelle lea (a4),a1  ;Ziel moveq #49,d0 ;Zhler clr.l d1 ; lright: move.b 0(a0,d1.l),0(a1,d1.l);Spalte49 addi.w #50,d1 ; dbf d0,lright ;verschieben rts ; *-------------------- *DATENSPEICHERBEREICH zuord: ds.l 2500 ;TabellefrdieZuordnung ;Elementnummer-Bildschirmadr. scursor: dc.b 27,"j" ;ESC j=Cursorposition ;speichern counter: ds.b 5 ;5 Bytes fr den 5-stelligen ;Dezimalzhler dc.b 27,"k",0 ;ESC k=Cursor auf die ge- ;speichertePos.setzen end GfABASICBBBBdDQPTRXXXRHGHBHALLODNAMDUMMYABCDEFGHIJBGOKMODEPHELPPFADSAVNAMFILNAMTRETTLAUFWERKSLEISTESPFELDEINGVERZNGENREVONREVOFFBACKLIUEABSSNBZMCHECKMEXTSELWAHLSELECTBIGONESMALLONEBIGTWOSMALLTWOALTR1R2XAPTRSPTRFPTRLAMAQFPTRZFPTRRFPTRQPTRZPTRRPTRTANEIX0Y0X1Y1XMSYMSXTYTXOK0YOK0XOK1YOK1TZAXANFYANFBANFHANFXENDYENDBENDHENDFKTNRQPPTRWYQUZADZIVZNGFRESTCALCSEPTRBHXAYABAHAXEYEBEHEPTRSTARTQUELLEZIELREGELNENENDEVERZNGENTOPOLBUFTZVERZMINSZZZXZYZRGRHZXL0YL0XL1YL1XU0XU1XA0XA1XMYMZMTLXS0YS0XS1YS1XN0YN0XN1YN1XZ0YZ0XZ1YZ1XSMYSMBSMHSMXZOJNQFELDVTOVETPTRVPTRNPTRYMLDYDADTMYDY0DY1FCYBYSYLYGYRYNHTTDTHYSPYERYUEDYSDYEDYUYE0YE1YU0YU1HPDYADYL0DYL1YMAXXRBRHRYA0YA1XB0XB1CXFWYFWBFWHFWDXXAL0XAL1RGC3C2C1FOUNDREINTRAGMPQUZIRGCCOLMPROGQFELDZFELDRFELDNEUTABRHFRETLOAD DROP_DOWNSRETGRSHRETSTATLHOLENRETSTATSASKMOUSERETRULEGETMKMKORETERASELIFORIGRRESTRRRESTRESTASKEDASK1RESOLUTNMPR_LOADINITIALSMENULINEAUSWERTGINFO_BOXGRSH_BOXSTATLOADSTATSAVEFLD_EDITQU_ERASECALCPICTINPU_BOXLIFERULEREST_COLOLDCOLORNEWCOLORCURRDISKTIPFIELDINITKEYSBOXLIFEINFOIHANDLER0RRESTRRRESTMIDCOLORINBOXNICHTSOUTBOXREST_SCR 6===================================================  2 BRETTSPIEL "LIFE" ODER "SPIEL DES LEBENS"  ( NACH JOHN HORTON CONWAY R * VON DIPL.-ING. ANTON ZIEGLER , MARIATROSTERSTR. 114, A-8043 GRAZ  VERSION 1.3 (9.5.1988)  6===================================================   (,! F Test auf richtige Auflsung , F,E7  \F aktueller Pfad n.+E*.LIFF fr Speichern von Spielfeldern $, Fe alte Farbwerte holen s",F neue Farbenpalette setzen 8, LIFE_MP.APP! !B! Fn Maschinenprg. laden ,FMqF F JEF Default Topologie=Torus :HEF Default Verzgerungswert=0 (entspricht ca. 70 ms) @IEHHF Default Anzahl der zu berechnenden Generationen  &EBX pF VT-52 reverse on &EBX qF VT-52 reverse off   p F8yEF unteres Ende der Menleiste bei 640*400  ؐFyE F bei 640*200  F ,F  rechter Bildschirmteil N8,F Erstellen e. Menleiste und weitere Verzweigung   <-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* <Unterprogramm: Abfrage auf richtige Bildschirmauflsung.  ,Xbios(4)=0 .... 320*200 Pixel, 16 Farben c*Xbios(4)=1 .... 640*200 Pixel, 4 Farben ,Xbios(4)=2 .... 640*400 Pixel, Monochrom c 8bergabe: 2 Werte fr die vom Programm untersttzten n*Auflsungen (knnen auch gleich sein). u<-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  +! Fh!F *@ F @ E niedrigerF@ E mittlererF@ EhoherF$@ Eniedriger oder mittlererF@ E@ Fe @ Eniedriger oder hoherFe@ E@ Fe @ Emittlerer oder hoherFe@ E@ Fe "   F*<EDieses Programm luft|nur in @  |Auflsung !F)!!!SCHADE!FqF F.F 2-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 0Unterprogramm: Aktuelles Laufwerk ermitteln. * Aufruf: @Currdisk(*Laufwerk$)  2In Laufwerk$ wird der Name des aktuellen Lauf- &werks als A:, B: etc. rckgegeben. e2-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +A F*AEBH  :F.F 6-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- &Unterprogramm: alte Farbwerte holen  Aufruf: @Oldcolor(*Col%()) t 4Im Feld Col%() werden 15 Farbwerte zurckgegeben. 6(Col%() braucht nicht vorher dimensioniert werden ! 2Je nach Auflsung sind 2, 4 oder alle Werte von 0Bedeutung. Die Anteile von Rot, Grn und Blau 0knnen an den 3 niederwertigsten Stellen der ,Hexadezimaldarstellung abgelesen werden. d6-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +A F*hFA*pp FߎEGpF* E`!! F lF`"A! F Ergebnis zurckgeben *.F 0-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 0Unterprogramm: Wahl einer neuen Farbenpalette 0-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F-( ✈ F niedrige Auflsung *66!`!`!`FA Hintergrundfarbe Wei 6!`!!F Rot 6!!`!F Grn 6!!!`F Blau *6!`!`!FA Rot+Grn n*6 !`!!`FA Rot+Blau n*6@!!`!`FA Blau+Grn 6`!!!F Graustufen: 6!!!F 6!!!F 6 !!!F &60!!!Fu &6@! ! ! Fu &6P!@!@!@Fu &6`!`!`!`Fu *6p!!!F Schriftfarbe Schwarz  F( ^ F mittlere Auflsung z66!`!`!`FA Hintergrundfarbe Wei 6! !!F Dunkelrot 6!!!F Dunkelgrn l"6!!!F Schriftfarbe Schwarz i F ؈ F Monochrom 66!`!`!`F  Hintergrundfarbe Wei "6!!!F Schriftfarbe Schwarz i F.F 4-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 0Unterprogramm zum Laden von Maschinenroutinen  4Aufruf: @Mpr_load(Name$,*Feld%(),*Start%,*Found!)  2In Name$ wird der Filename (ggf. mit Disk,- und Pfadname bergeben. 0Feld%() ist der Name eines Integerfeldes, das 2beim Aufruf nicht dimensioniert sein darf (!) , .da es im Unterprogramm dimensioniert wird. !2(Erase ist nicht angebracht, da dadurch Felder 4samt Inhalt verschoben werden => Startadresse !) 2Rckgabewerte: Startadresse der Routine und ein &Flag, ob die Datei gefunden wurde. t4-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +!!! Fh!F &! F das Feld heit lokal Mp% *   Fs0EIch kann die Datei||nicht finden !F*)!!!ABBRUCH!FEF!-FF F 7i!M!F2EsM F Lnge der Datei ermitteln (in Bytes) *8MFM8E Fe Anzahl der Langworte+10 dazu n$* F Speicherplatz reservieren (Ez Fi Anfangsadresse des Feldes !F Programm laden s0E`Fl Startadresse des Programms 1 EF Flag: Datei gefunden e8! F das Feld bekommt wieder seinen Aufrufnamen n|F.F 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 8Unterprogramm: Zeichnen des rechten Bildschirmteiles. 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F-hN!O!!+!7!8F& ` F Auflsung 640*400 $H!!H!GFn (!!!F'k!d!'LIFE'F(!!!PFI&'a!(!Spiel des LebensF&'a!H!nach J.H. ConwayF NE||F Spalte und ..OE((F Zeile des Generationenzhlers YN!O "00000FE#N @Fe+E#O F7ELLF8E((F!+!7!+8F!+!7!+8F(!!!@F'!+ !ZhlerF (!!!PF lF Auflsung 640*200 $H!0!H!GFn$H!0!H!GFb (!!!Fk'q!p!'LIFE'F(!!!@FI&'a!(!Spiel des LebensF&'a!H!nach J.H. ConwayF NE||F Spalte und ..OE((F Zeile des Generationenzhlers YN!O "00000FE#N @Fe+E#O Fc7ELLF8E@@F!+!7!+8F!+!7!+8F(!!!F"'!+!ZhlerF (!!!PF F.F ,-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ,Unterprogramm: Erstellen einer Menleiste ,-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F- RF-jF-$F Anzahl der Eintrge ermitteln QFA4FA6***F 5F RF* FEGFQ F xFG . F bergabe der Menstruktur an das GEM e MF"M ! ! !C!D!E Fe 6^F Fenster 0 => kein berschreiben der Menleiste  (vLFn Ereignisverzweigung festlegen (8!JF Hkchen vor Menpunkt 0@!JF entspr. der Default-Einstellung   F0!F keine Farbwahl, wenn Monochrom e F FF Abfrageschleife Fb |FF4Desk, LIFE,---------------------,1,2,3,4,5,6,"" -0Datei, Laden, Speichern,-----------, Ende,"" ,:Feld, Bearbeiten, Lschen,-------------, Spiel Start,"" DParameter, Torus, Quadrat,------------------, Geschwindigkeit e* Zhler,------------------, Regeln,"" JSpezial, ber LIFE,-------------, Farben,-------------, Neuzeichnen,"" "","",*** .F +Fl 񪦸 F[FMF^F F ֦ 0F.[F!! !y!F !!!F !!Ff & FH!!H!F fFH!!H! FH!!H! F F*MJ!H!I!E!C!!*.*!!+ F8!JF@!JF!! !y!F !!F^F F  @Fr MJ!H!I!E!C!!+! F, F 󖦸 `Fr2E*Wollen Sie das Programm|wirklich beenden ?Fi)!!!JA|NEIN!GF GFlF[F M FqF F F 􀦸 F[F!! !y!F !!!FE !!F  FH!!H!F RFH!!H! FH!!H! F FM Fa!! !y!F !!FF^F F Ҧ F[F!! !y!F M C FGEF !!F^F F $  F[F!! !y!F !!!FE !!F N FH!!H!F FH!!H! FH!!H! F F,Yl!@ "" F10: Abbruch "F$M B!C!D!E!H!I!J!C!D FfYl!@ "` F!! !y!F !!FF^F F n 8Fz jJFJEF8!F@!F F F  @Fz JF@JEF8!F@!F F F  PF[FEA%333335H  Fe0M 1234567890 F! nur diese Tasten erlauben JM 0!P! Zeit zwischen 2 Bildern (msec)? ! !! F @ F Bioskeys uHE#5   33335Ft HEvH! F^F F t XF[F EAI FF0M 1234567890 Fy nur diese Tasten erlauben BM H!P!Anzahl der Generationen? ! !! F@ F Bioskeys uIEv5 ! F^F F  hF"[FM E!+ Fl^F F Ȧ Fn[FMF^F F  F-[FMF^F F N FE[F!! !y!F MC F!! !y!F !!F^F F*F Menpunkt wieder normal darstellen ".F 0-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 0Unterprogramm: Zeichnen einer Informationsbox 0Es werden die Auflsungen 640*200 (Farbe) und $640*400 (Monochrom) untersttzt. 0-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F- h!!!!!! ! ! ! Fh!!!!!! !!F-h!!!!F! 0-------------------------------------------- 0Hier steht der auszugebende Text (10 Zeilen)  :ELIFEF  Titelzeile wird in Groschrift dargestellt dEFFESpiel des LebensF Enach J. H. ConwayFEFcEVersion 1.3 (9.5.1988)F  EAUTOR: Anton ZieglerFF EFe EDieses Programm darfF) Efrei kopiert werden !F (------------------------------------- (Auflsungsabhngige Variablen belegen  *  F Farbe 640*200 Punkte iE F Koordinaten E``F EppF des Rechtecks E,,F E F Schirmmitte X EHHF Schirmmitte Y 2EF Zeilenabstand bei der Textausgabe $ F Monochrom 640*400 Punkte eE FoEppFoEppFoE**FoE FoEHHFoEFo F (!!!! F0 Hintergrund retten e*Mgrow!!!!!!!! F"!! !F Rechteck lschen ! --------------- Rahmen Zeichnen  !!!F h F Farbe !!!F"!!!F" !! !F"@!!@!F"`!!`!F F Monochrom !!!F2!!!Ft F ------------- Text ausgeben  E#  6 F(!!!F h F Farbe EFF '!!FF(!!!@FF F! Monochrom E4Fo '!!FF(!!!PFo F E#  6 F0!F '!!F E#  6 F0!F '!!F E#  6 F0!F '!!F E#  6 F0!F '!!F E#  6 F0!F '!!F E#  6 F0!F '!! F E#  6 F0!F '!! F E#  6 F0!F '!! F E#  6 F0!F '!! F --------------- OK-Box zeichnen    F Farbe EF0!F'!!OKFEFFEFFExFF EF!!!F!!!F!!!F!!!F 2F Monochrom EFo0!Fh'!!OKFhEFoEpFoExFoEFo!!!F!!!F!!!F F!!!!F F auf Quittierung warten ZRPPQQFnSBP F !!! F,Mshrink!!!!!!!! F,!! F Hintergrund wiederherstellen e.F L-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- *Unterprogramm: Speicherfelder erzeugen.  LAufruf: @initials(*Qfeld%(),*Zfeld%(),*Rfeld%(),*Quelle%,*Ziel%,*Regeln%)  Jbergabe: Namen von Quell,- Ziel,- und Regelnfeld (die Felder brauchen %0vor dem Aufruf nicht dimensioniert werden !) fBRckgabewerte: Startadressen von Quell-, Ziel,- und Regelnfeld. L-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  + ! ! ! ! ! FhF  --------------- Felder erzeugen   ! F  ! F  ! F 6*@ !@ F je 2500 Bytes reservieren  Ez F Anfangsadressen  Ez F ermitteln  ,*  F Feld mit Zuordnungstabelle eEz FF Anfangsadresse dEF!FF das sind a0!Fi die @!F LIFE-Regeln   ! F  ! F  ! F .F H-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- @Unterprogramm: Quellfeld laden und neues Spielfeld anzeigen. * HAufruf:@Statload(*Topol%,*Verz%,*Ngen%,Regeln%,Quelle%,Pfad$,Select$, *Pfad$,*Select$) * BEs werden die Parameter Topologie, Verzgerungswert und Zhler g2rckgegeben, sowie die Regelntabelle verndert. >In Quelle% wird die Basisadresse des Quellfeldes bergeben, @in Pfad$ wird ein Pfadname ber,- und rckgegeben; in Select$ @wird ein Auswahlstring (z.B.: *.LIF) ber,- und rckgegeben. H-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  "+v!w!x!R!(!!!)! Fe&h!!*!!'!!!+!}!~!!F &   F Auflsung 640*400 (}EF Zellgre in Y-Richtung ~EF Zellanfang Y rE F Zellende Y EF Zellfarbe   F Auflsung 640*200 }EF!~EFEFEF F |Ff!!F  NF-F F    FR0EIch kann die Datei||nicht finden !Fl)!!!WEITER!*Fi-F! F EF < \FR2E;@6  F vollst. Namen zu Pfad verkrzen  F@)EF Rckgabe des Pfads e 7i!M!F =`M!'F!  ' ~LIFE_88~Fe8MF!$EDas ist keine|LIFE_88-Datei !F)!!!WEITER!FE-F! F  E(G(0 HF*!FE Quellfeld lschen  F(%!F Hintergrundfarbe 8!!G!GFP Bildschirmausschnitt lschen * :M!FEF Dateiauswahlstring vEg_!M F Topologie "wEg_!M F Verzgerungswert vxEg_!M F Zhler e M!R!F Spielregeln  %!!FrM FEg_!M FE (!F+EHFFEH+F2!F' Bildschirm- 2+!}F koordinaten 4F0+!~F!+! !+FFM8MFr |F.F N-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* (Unterprogramm: Quellfeld abspeichern.  NAufruf: @Statsave(Topol%,Verz%,Ngen%,Regeln%,Quelle%,Pfad$,Select$,*Pfad$)  NNeben den eingestellten Parametern Topologie, Verzgerungswert und Zhler- Dwert wird in Regeln% die Startadresse des Regelnfeldes bergeben. LIn Quelle% wird die Basisadresse des Quellfeldes bergeben. In Pfad$ wird Jein Pfadname ber-, und rckgegeben. Select$ enthlt den Auswahlstring r(z.B.: *.LIF). eN-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  +t!u!1!R!(!!!) Fh!!!Ff!!F ^F-F F EF< \F"E< F Filenamen aufbauen *2E;@6  F vollst. Namen zu Pfad verkrzen jF@)EF Rckgabe des Pfads e  8C@. F *E=@ F Extension erzeugen e F 7o!M!F"M! ~LIFE_88~F Dateikennung M!F Dateiauswahlstring l M!bt "F Topologie M!bu "F Verzgerungswert M!b1 "F Zhler r M!R!FF Spielregeln  ^EG0 F T2( F*M!b "F Nummer der gesetzten Zelle e F F8MFb |F(.F (-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* (Unterprogramm: Spielfeld bearbeiten. "Dieses Unterprogramm verwendet iglobale Variablen ! (-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  + F-*h!!l!m!n!o!s!*!!+!-!!Fh}!~!!!(!.F$h!!!!!!Q!!!:!]F&EBX pF VT-52 reverse on !&EBX qF VT-52 reverse off  --------------------- Sub-Menfeld aufbauen  & Έ F Auflsung 640*400 lEWWF! Koordinaten mEnnF! der nE**F! Box oE33F! mit Men e(}EF! Zellgre in Y-Richtung ~EF Zellanfang Y rE@@Fn Zellende Y nEF Zellfarbe  $EF! Texthhe in Pixeln *EF! Y-Werte der Mentexte ... EF EF EF EF QEF EQF EF :EF ]E:F F Auflsung 640*200 lEWWFdmEhhFlnE**FdoE66Fl}EF!~EFEFEF EF!EF EF EF EF EF QEF EQF EF :EF ]E:F F$Mgrow!l!m!!!l!m!n!o F  Fl!m!ln!moFl!m!ln!moF Fl!m!ln!moFl!m!ln!moF*l!m!ln!moF *l !m!ln !moF  F 0Yh! ""B""ild laden ....F0Yh!  ""S""peichern .....F0Yh!0 ""L""schen .......F zJF0<Yh!@ ""Torus"" ""Q""uadratF F8Yh!@ ""T""orus ""Quadrat"F F0Yh!P ""G""eschwindigkeitFr0Yh!` ""Z""hler ........Fr0Yh!p ""R""egeln ........Fr0Yh! ""N""chstes Bild .Fr0Yh! ""A""blauf ........Fr0Yh! ""M""en ..........Fr sE !! F kbrate "&*EsF alter Wiederholwert 3s!F*sEsF  alter Verzgerungswert .. !s!00 F repeat verlangsamen { F ------------------------- Maus- und Tastaturabfrage  F|FF "!+!-Fs(ES F-6( F ( -HF Zelle setzen E#  F+E+#+ } F!%!!F2!+~!@!+F! Element setzen 8.EH+}F  Adresse im Speicherfeld C.!F-F F ( -HF  Zelle lschen E#  F+E+#+ } F%!F2!+~!@!+F! Element lschen 8.EH+}F  Adresse im Speicherfeld C.!F-F F 0  l-HF  Spielfeld verschieben }FF "!!-F1!F1!+F  b }FE0!F0+!F&M B!C!D!E!!!!C!D F F }F0!F0+!F&M B!C!D!E!!!!C!D F F   F0!F0+!F&M B!C!D!E!!!!C!D F F   NF0!F0+!F&M B!C!D!E!!!!C!D F F -F}F-F F : ,&Z`` +]+]-(MF 8 "` ++-(BF,Yh! ""Bild laden ...."F6 !s!* F alten Tastatur-Repeat herstellen *MJ!H!I!E!C!!*.*!!+ F6 !s!00 F repeat wieder verlangsamen "JF0<Yh!@ ""Torus"" ""Q""uadratF8!F@!F "lF8Yh!@ ""T""orus ""Quadrat"F8!F@!F F0Yh! ""B""ild laden ....Fm F 8 #` ++-(SF,Yh!  ""Speichern ....."F6 !s!* F alten Tastatur-Repeat herstellen ? MJ!H!I!E!C!!+! Ft6 !s!00 F repeat wieder verlangsamen e0Yh!  ""S""peichern .....Fm F 8 $z` ++-(LF,Yh!0 ""Lschen ......."F { F M C F0Yh!0 ""L""schen .......F F 8 %`||++-(TF<Yh!@ ""Torus"" ""Q""uadratFTJEF8!F@!F F 8 %  ++-(QF8Yh!@ ""T""orus ""Quadrat"FJEF8!F@!F F 8 '` ++-(GF,Yh!P ""Geschwindigkeit"FEA%333335H  Fe0M 1234567890 F! nur diese Tasten erlauben 6 !s!* F alten Tastatur-Repeat herstellen ?JM `!P! Zeit zwischen 2 Bildern (msec)? ! !! F6 !s!00 F repeat wieder verlangsamen e@ F Bioskeys uHE#5   33335Ft HEvH! F0Yh!P ""G""eschwindigkeitF F 8 )>` +Q+Q-(ZF,Yh!` ""Zhler ........"F EAI FF0M 1234567890 Fy nur diese Tasten erlauben 6 !s!* F alten Tastatur-Repeat herstellen ?BM !P!Anzahl der Generationen? ! !! F6 !s!00 F repeat wieder verlangsamen e@ F Bioskeys uIEv5 ! F0Yh!` ""Z""hler ........F F 8 )` ++-(RF,Yh!p ""Regeln ........"FM E!+ Fl0Yh!p ""R""egeln ........F F 8 *` ++-(NF,Yh! ""Nchstes Bild ."F"M B!C!D!E!!!J!C!D F"Y!( "0F Zhler !! !y!F 0Yh! ""N""chstes Bild .F *-F { F F F 8 ,` +:+:-(AF,Yh! ""Ablauf ........"F,Yl!@ "" F10: Abbruch "F$M B!C!D!E!H!I!J!C!D FYl!@ "` F!! !y!F 0Yh! ""A""blauf ........F F F!< !s!* F alten Tastatur-Repeat wiederherstellen l,Yh! ""Men .........."F&Mshrink!l!m!!!l!m!n!o Fe%!F,l!m!ln!moF Sub-Menfeld lschen e.F *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- *Unterprogramm: Lschen des Quellfeldes.  Aufruf: @Qu_erase(Quelle%) **-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  + ( FehFu $)!Feld lschen ?!!JA|NEIN!F -Fu- F F . E(G(0 HF*!F Lschen .FG %!F Hintergrundfarbe & . F Auflsung 640*400 !!G!GF* .F Auflsung 640*200 !!G!GF* F  |F.F N-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 2Unterprogramm: Berechnung der nchsten Bilder. * Aufruf: N@Calcpict(Start%,Quelle%,Ziel%,Regeln%,Verz%,Ngen%,Topol%,*Quelle%,*Ziel%)  JRckgabe: Startadressen von Quell-, und Zielfeld (diese knnen ja ver- *tauscht sein). nN-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  "+ 4!,!/!!0!1!2! ! Fnh!3FE4`F FY|!( "F Cursor positionieren (fr Generationenzhler)  (!,F Startadresse des Quellfeldes i.!/F Startadresse des Zielfeldes 2!F Startadresse des Auswertefeldes 0@!0F Wert fr Verzgerungsschleife &!1F Anzahl Generationen , !2F (0=Torus, 1=offenes Feld)  $|4F  Maschinenprogramm aufrufen e |F-83E4 F noch nicht berechnete Generationen * 2j13 FH,!/F F E,F E/F .F @-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- @Unterprogramm: Tastaturtabelle verndern. Es gibt nach Aufruf @dieser Routine nur mehr die im String S$ bergebenen Zeichen, >alle anderen Tastendrucke liefern den ASCII-Code 0. ALT und >CTRL werden jedoch nicht gesperrt ! Die Routine belegt das ,Feld Neutab%(96) (neue Tastaturtabelle). o>Die ursprngliche Tastaturtabelle kann mit "Void Xbios(24)" wiederhergestellt werden. @-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  + F*hK!7!L!F ,@ F normale Tastatur einschalten *NEB BP B~ F BACKSPACE, RETURN und DELETE erlauben  F F4* @@ F Platz fr die neue Tastaturtabelle R$KEz FF deren Anfangsadresse TBLE!!! F Zeiger auf die Tastaturtabelle holen E(4L !K!@F Tabelle kopieren d 7EKF!F8 6ZC@B27 F mit erlaubtem Zeichen vergleichen 7!F brige Tasten sperren  F47FF57K@F  D!K!K!K F neue Tabelle einschalten E.F 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* *2Unterprogramm: Eingabe eines Strings mit etwas *Grafikuntersttzung. e Aufruf: 8@Inpu_box(Spalte%,Zeile%,Frage$,Laenge%,Eing$,*Eing$)  6Laenge% ist die gewnschte Eingabelnge des Strings 2Eing$, der verndert wieder zurckgegeben wird. 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  + 5!-!!!!6 Fh!+!7!8!F  & : F Auflsung 640*400 E#5 (Fd+E#- Fd 7E#6  (Fe8EPPF# $Mgrow!!+!!!!+!7!8 F .!+!7!+8!F! Hintergrund retten *$!+!!FH Hintergrund lschen !+!7!+8F!+!7!+8F6!+!7!+8F*6 !+ !7 !+8 F* Y5!- ""F `lF6EF&Mshrink!!+!!!!+!7!8 F,!+!F Hintergrund wiederherstellen  F & < F Auflsung 640*200 E#5 (F*+E#-  F* 7E#6  (F*8EPPF# $Mgrow!!+!!!!+!7!8 F-.!+!7!+8!F! Hintergrund retten *$!+!!F Hintergrund lschen !+!7!+8F!+!7!+8F*!+!7!+8F** !+!7 !+8F* Y5!- ""F `lF6EF&Mshrink!!+!!!!+!7!8 F*,!+!F Hintergrund wiederherstellen * F.F 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* *8Unterprogramm zum Zeichnen einer sich ffnenden oder *6sich schlieenden Box. (Mode$="grow" bzw. "shrink") 6Die Koordinaten werden wie beim Befehl Box jeweils "fr Anfang und Ende bergeben. 8-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* * "+!9!:!;!!?!@ F*  >growF'EFo >HF >:shrinkF'EFr >DF-FF F F *!Fn Gre des GINTIN Feldes ,!Fn Gre des GINTOUT Feldes **@!Fn Gre des ADDRIN Feldes ,!Fn Gre des ADDROUT Feldes * ----------------- Parameterbergabe  "!9Ft X-Koordinate zu Beginn U$!:FX Y-Koordinate zu Beginn $!;F Breite zu Beginn "@!F Y-Koordinate am Ende d"@!?F Breite am Ende `!@F Hhe am Ende e s'F` Funktionsaufruf |F.F ,-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* n,Unterprogramm: Verndern der Life-Regeln n $Aufruf: @Liferule(Regeln%,*Wahl$)  (In Regeln% wird die Basisadresse des e*Feldes mit der Regelntabelle bergeben. *Der Inhalt des Feldes wird entsprechend (angezeigt und verndert rckgegeben. n(In Ext$ wird eine Extension fr Laden und Speichern rckgegeben. ,-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* n + R!6 F*hS!!+!7!8!T!U!V!W!X!Y!Z![Fe h! !!!!!"!#!\!]!^F&h!!!!!!!!!!!F & D F Auflsung 640*400 EF! Gre +E F! der 7E##F! Eingabe- n8EppF! box EPPF! Texthhe nEppF Y-Koordinaten E F fr EF Textausgabe EF! Y-Koordinaten E11F! der E^^F! Umrandungs- EqqF! boxen 0EF! Hhe der Printausgabe in Pixeln .ERRF Y-Koordinate der Auswahltexte "ECCF Y-Koordinaten der EVVF! Auswahlboxen A EzF Auflsung 640*200 EFl+E Fl7E##Fl8EppFlE@@FEppFEFEFEFE22FE\\FErrFEF!ERRF!EBBF!EVVF! F $-------------------------------- e$Regeln in ein Hilfsfeld kopieren e F F&*  F 5 Langworte=20 Bytes e SEz FF&R!S!Fa 18 Bytes kopieren  ------------------- Umrandung erstellen  $Mgrow!!+!!!!+!7!8 Fe.!+!7!+8! F! Hintergrund retten e$!+! !F Hintergrund lschen  GR F!+!7!+8F!+!7!+8F6!+!7!+8F H*F!+!7!+8F!+!7!+8F*!+!7!+8F* !+!7 !+8F*@!+!7@@!+8F*`!+!7``!+8F F ----------------- Text einschreiben  (!!!F"'b!+! SPIELREGELN:F(!F kursiv "'!+! Erschaffung:F<Y8!0 "$0 1 2 3 4 5 6 7 8 lebende NachbarnF '!+! berleben:F<Y8!p "$0 1 2 3 4 5 6 7 8 lebende NachbarnF  .------------------------------------------- .Zahlen entspr. den Regeln invers darstellen  JEGFR J2S FE88F$Y!00 ""B@@ "F Jl F2# !!# !F JF2# !!# !F2# !!#  !F F F IFLEGF L2S FE88# F$Y!pp ""B "F K F2# !!# !F LF2# !!# !F2# !!#  !F F F JF ---------------------- Auswahlboxen erstellen  (!FV Attribut: normal n2'P!+!LIFE bernehmen AbbruchF TE@FR UE+FVE.FR WE+FT!U!V!W!!F M& FT!U!V!WFT!U!V!WF MVFT!U!V!WFT!U!V!WF F XEPFYE?FX!U!Y!W!"F M҈ FX!U!Y!WFX!U!Y!WF NFX!U!Y!WFX!U!Y!WF F ZEPF[EFZ!U![!W!#F N~ FZ!U![!WFZ!U![!WF NFZ!U![!WFZ!U![!WF F ----------- Mausabfrage  |FaF "\!]!^F N^FF  TB]U] W^FI 0 S\T\ VF Original Life-Regeln setzen T!U!!! Fg #FPLE8GHF 2# !!# !F2# !!#  !F2# !!# !F2# !!#  !F OzF#F (Y8!0 "0 1 2 3 4 5 6 7 8F(Y8!p "0 1 2 3 4 5 6 7 8F Yh!0 ""3"FYX!p ""2"FYh!p ""3"F  Qڈ F>#h !!#h !F>#X !!#X !F>#h !!#h !F SRF>#h !!#h !F>#h !!#h  !F>#X !!#X !F>#X !!#X  !F>#h !!#h !F>#h !!#h  !F F J !F S!FS0!FS@!F T!U!!FF{F F  S\X\ YFX!U!"! F,S!R!F neue Regeln bernehmen #-FR F  T:\Z\ [F Abbruch Z!U!#! Fr-FU F  F E\FrEv!0 FEu!  F E]F : U0^ F  Erschaffen: Element setzen E#8 FY! ""B@ "Fh UD F2# !!# !F UF2# !!# !F2# !!#  !F F S!F F : V0^ F Erschaffen: Element lschen E#8 FY! "B@@ F#F Vt F2# !!# !F VF2# !!# !F2# !!#  !F F#F S!F F 8 X(p^ F berleben: Element setzen E#8 FY! ""B@ "Fl W F2# !!# !F XF2# !!# !F2# !!#  !F FS!F^ F : Yfp^ F berleben: Element lschen E#8 FY! "B@@ F#F X F2# !!# !F YJF2# !!# !F2# !!#  !F F#FS!F^ F -F |F R F06E*.LIFF^EF:Z6EGF, Testen, ob LIFE-Regeln, oder andere Q\F2 Z"2R \F.6E*.CNRF Auswahlstring fr Fileselect t^EF F Z6Z^F YF &Mshrink!!+!!!!+!7!8 F,!+! F Hintergrund wiederherstellen   |F0&0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0 .F :-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- :Unterprogramm: Information ber das Spiel LIFE anzeigen :-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F-h!+!z!{!|!!!_!Fl FC Bildschirminhalt retten YF & \ F Auflsung 640*400 !! !GF!! !FFEF Text- +EppF anfang bzEF Zeilenabstand {EppF Absatzabstand (|EF Abstand letzter Hinweis (!!!PFn ]F Auflsung 640*200 &E`!! F Farbwert merken &6!!!Fs Grau lE`!! Fa 6!!!F Dunkelblau l#F!! !FF!! !FF#FEF +EFlzEF {EF |EF (!!!@F! F _E F X'!+!LLIFE wurde 1970 von John Horton Conway erfunden. Es gehrt zu den zellulrenFn0+!zFX'!+!LAutomaten, einer regelmigen Anordnung vieler identischer Zellen, von denenF0+!zFX'!+!Ljede nur ber endlich viele Zustnde verfgt und nur mit wenigen Nachbarn inFn0+!zF '!+!Wechselwirkung steht.F0+!{F^/!+!_!OLIFE ist ein binrer Automat. Jede Zelle kann nur zwei Zustnde annehmen: 'tot'F0+!zFZ/!+!_!Koder 'lebendig'. Die Transformationsregeln sind Abzhlregeln (totalistischeF0+!zFV/!+!_!GRegeln) in einer Achter-Umgebung (Moore-Nachbarschaft): eine Zelle wirdF0+!zF^/!+!_!Ngeboren, wenn sie genau drei lebende Nachbarn hat; sie berlebt, wenn sie zweiFr0+!zF^/!+!_!Noder drei lebende Nachbarn hat. Unter allen anderen Umstnden bleibt die ZelleFr0+!zF('!+!entweder tot oder sie stirbt.F0+!{F\/!+!_!MIn dieser Version von LIFE knnen die Abzhlregeln beliebig verndert werden.F0+!zF^/!+!_!ODamit ist breiter Raum fr eigene Experimente gegeben. Die SpielfeldberandungenF0+!zFX/!+!_!Hknnen wahhlweise als benachbart (Torus-Topologie) oder als Rand erklrtF0+!zFZ/!+!_!Jwerden (begrenzte Ebene). Da der Teil des Programms zur Berechnung und An-Fn0+!zFZ/!+!_!Jzeige des nchsten Zustandes in Maschinensprache geschrieben wurde, knnenFn0+!zFT'!+!Ibei 2500 Zellen mehr als 14 Generationen pro Sekunde dargestellt werden !F0+!|F'!+! Taste ...FF c6S RF `!! F Farben e&`!! F wiederherstellen lF.F 4-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 4Unterprogramm: Wahl zweier Farben im Midres-Modus 4-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +F-h!!!FhZ!![!!!Fh-!.!/!0Fh!!!!!!zF-h!!!!!!!1Fh!+!-!!!!!!7F- ------------------ Umrahmung zeichnen  E88FeEFeEFeEFe$Mgrow!!!!!!!! F-.!!!!F! Hintergrund retten *$!!!F Hintergrund lschen !!!F!!!F*!!!F** !! !F**@!!@@!F**`!!``!F* ---------------------- `Farbrechtecke zeichnen ` ZEPFeEPFe[EZHFeEpFeEZpFeEHFe%!!FrZ!![!F "aktive" Box Z!![!!-F4Z ! ![ ! !.F$EF gewhlte Farbe fr Setcolor  %!!Fr !!!F "inaktive" Box !!!!/F4 ! ! ! !0F!!/!F ! !0F -------------------- Farbwahlbox zeichnen  #FE FcETFcE@@FE@@FE@Fc zEF!!!F*!z!!zF Farbhauptachse ,!z!!zFt Schwarzachse !!!Fa(!!!F(!!!F'!z!ROTF"'0!z!GRNF('00!z!BLAUF('@!z!ROTF '0!!WEIF('!z!SCHWARZF"'0!!WEIF --------------------- Auswahlboxen zeichnen  (!!!@FiEpFiE FiEpFiE Fi'@!!OKF!!!F!!!F!!!!F EtFE F '!!ALTFF!!!F!!!F!!!!1F ----------- Mausabfrage  v!!!!LFFFF "!+!-F (1!F auf die Farbwahlbox bezogene 1+!F Mauskoordinaten   mFn Zone I oE``FE``FoEF F  mF Zone II E``##  FE``F#EF F " n2F Zone III oEFE``FE``# F F & nF Zone IV EFE``##  FE``F# F , n F Zone V  E``# FEFE``F# F , oh  @F Zone VI E``FEF&E``##   Fe F 2 p ++z-F  Weirichtung "E#`` +zpFe"E#`` +zpFe"7E#`` +zpFe6!!!7F F 6 p +z+z-F Schwarzrichtung E#+z zF E#+z zF 7E#+z zF 6!!!7F F 0 q, +z+ -F Grauskala $E``#+z zF 6!!!F F 0!F wieder Bildschirm- 0+!F mauskoordinaten  $ qZ[++-Fa!!/!F[ ! !0F Z!!-FEF { F F $ rP++-FaZ!!-!FZ ! !.F !!/FEF { F F $ r++-Fa!!1! FMF {`F !!1F F $ rZ++-F lF !!! F&Mshrink!!!!!!!! Fl,!!F Hintergrund wiederherstellen lBv!!!  !HLF GFA-BASIC Referenzhandbuch S 416 .F +Fv!!!!LF } F!.F +Fv!!!!LF}F.F  <-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- <Unterprogramm zur Wiederherstellung des Bildschirminhalts $(z.B. nach einem Accessoryaufruf)  Aufruf: @Rest_scr(Quelle%) -<-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +( FRh}!~!!!!!+F-YF & u F Auflsung 640*400 (}EF Zellgre in Y-Richtung ~EF Zellanfang Y rE F Zellende Y EF Zellfarbe H!!H!F vNF Auflsung 640*200 }EF!~EFEFEFH!!H! FH!!H! F F MF- %!!FwEG0 Fu w2( F+EHFFEH+F2!F' Bildschirm- 2+!}F koordinaten 4F0+!~F!+! !+F F vF .F 6-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- 6Unterprogramm zur Wiederherstellung der Farbpalette  Aufruf: @Rest_col(*Col%()) s 4Im Feld Col%() werden 16 Farbwerte bergeben, die 2zuvor mit der Procedure Oldcolor geholt wurden. 6-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-  +A F*hFA&A! F das Feld heit lokal C%()  xEGpFh`!! F xF! ,A! F bergabefeld wieder herstellen *.F*P<&  , <^"()J~T~~N~Pt@l *nNYz.Z2ژNn=ƀ  0-0T86BxX:R&.4[|dssЀt. /.. /LIES DAS/MANDEL2 C /wMANDELBRDEFʼn/2RMANDELBRH ɉ/3dMANDEL2 PRG͉/4;MANDELBRRSC҉/CThe MANDELBROT Set: Ein Public-Domain-Programm von J. Loviscach 4800 Bielefeld 1 Tel. (0521) 88 97 81 Zweck: Darstellung der Mandelbrot-Menge ("Apfelmnnchen") auf dem Bild- schirm bzw. Ausgabe auf dem Drucker NEC P6 (oder kompatiblen) in einer Auflsung von 180 Punkten/Zoll. Neuer schneller Algorithmus. Hardware: 1-MByte-Rechner/Monochrom-Monitor. Fr andere Speichergren mu im Source-File die Bildschirmadresse angepat werden. Folgende Files sind Bestandteil dieses Pakets: MANDELBR.C Quelltext (Megamax-C) MANDELBR.PRG compiliertes und gelinktes Programm (lauffhig) MANDELBR.RSC Resource-File MANDELBR.DEF Namensfile fr RCP MANDELBR.H Header mit Definitionen zum Resource LIES.DAS dieser Text Die Bedienung des Programms erfolgt durch Klicken auf die am rechten Bildschirmrand plazierten Buttons ->BUFFER, PRINT, RECALC, ADD und EXIT. Buttons, die im momentanen Betriebszustand nicht bettigt werden knnen, werden mit heller Beschriftung dar- gestellt. Durch den Button ->BUFFER werden die zwei Hauptbetriebszustnde des Programms umgeschaltet. Im Normalzustand ist dieser Button ausgeschaltet; dann wird die Zeichnung direkt (und in hoher Ge- schwindigkeit) auf dem Bildschirm erzeugt. Ist dieser Button angeschaltet, erfolgt das Zeichnen mit hoher Auflsung (und entsprechend niedriger Geschwindigkeit) in einem Zwischenspeicher, dessen Inhalt aber gleichzeitig mastabgerecht auch auf dem Bild- schirm dargestellt wird. PRINT bewirkt das Ausdrucken des gerade im Zwischenspeicher be- findlichen Bildes. RECALC zeichnet nach Lschen des Bildspeichers die durch Bildaus- schnitt, Zeichentiefe und Rahmenzahl (neu) festgelegte Figur. ADD wirkt wie RECALC, lscht aber den Bildspeicher nicht. Ist der Zeichenvorgang beendet, wandelt sich der Schrifttyp der READY-Box oben rechts von hell nach dunkel. Der Zeichenvorgang kann jederzeit durch (ggf. lngeres) Drcken der Tasten Control, Shift (links) und Alternate abgebrochen werden. EXIT bewirkt die Rckkehr zum Desktop. Der Vergrerungsausschnitt wird mit der GEM-Rubberbox gewhlt, d. h. man bewegt die Maus im dargestellten Bild zum linken oberen Eckpunkt des Auschnitts, den man vergrern will; dann drckt man die linke Maustaste, zieht nach rechts unten das dem gewnschten Ausschnitt entsprechende Rechteck auf und lt die Maustaste los. Mit dem Button LARGE kann man auf die Maximalgre des Ausschnitts zurckschalten. Die Zeichentiefe DEPTH wird durch Anklicken der Pfeile rechts und links neben der Anzeige des Zahlenwerts eingestellt. Entsprechendes gilt fr die Anzahl der Rahmen # OF FRAMES. Diese gibt an, wieviele Umrilinien der Figur gezeichnet werden. Anmerkungen: Empfehlenswert ist, sich erst im normalen Modus eine Zeichnung mit allen ihren Parametern (Tiefe etc.) zusammenzustellen, dann auf ->BUFFER umzuschalten und RECALC auszufhren, um das Bild aus- drucken zu knnen. Der Ausdruck benutzt fast die gesamte Flche eines DIN-A4-Blattes, daher sollte ein Einzelblatt sehr hoch eingespannt werden, um zu gewhrleisten, da die gesamte Zeichnung darauf Platz hat. Ggf. lt sich im Quelltext das Format des Ausdruck durch die beiden Konstanten ROWS und COLUMNS ndern. Zu Beginn des Zeichenprogramms wird zufallsgesteuert ein innerer Punkt der Figur gesucht. Wird ein solcher nicht gefunden (z. B. weil die Flche sehr klein ist), gibt das Programm eine ent- sprechende Meldung. Die gewnschte Zeichenfunktion kann dann noch einmal angewhlt werden. Der im Programm benutzte Algorithmus findet bei nicht einfach zusammenhngenden Figuren nicht alle Umrilinien oder zeichnet z. B. nur einen Punkt und bricht dann ab. In diesem Fall kann man ADD benutzen, um das Bild zu ergnzen. Durch kurzes Drcken von Control/Shift/Alternate kann man beim Zeichnen einzelne Umrilinien berspringen. /*********************************************************************/ /* THE MANDELBROT SET --- faster than ever PUBLIC DOMAIN */ /* (C) 1987 by J. Loviscach, D-4800 Bielefeld, Tel. (0521) 88 97 81 */ /*********************************************************************/ /*********************************************************************/ /* INCLUDE FILES */ /*********************************************************************/ #include #include #include #include #include #include "mandelbr.h" /*********************************************************************/ /* DEFINES */ /*********************************************************************/ #define WI_KIND (NAME) #define NO_WINDOW (-1) #define MIN_WIDTH (2*gl_wbox) #define MIN_HEIGHT (3*gl_hbox) #define MAX_DEPTH 8 int seed; #define rand() ( seed=abs((int)(seed * 6707 + 170253)) ) #define min(x,y) ( x>y ? y : x ) #define max(x,y) ( x>y ? x : y ) #define ONE 134217728 #define FOUR 520000000 /* at least similar to 4*ONE */ #define ROWS 82 #define COLUMNS 1300 /*********************************************************************/ /* EXTERNALS */ /*********************************************************************/ extern int gl_apid; /*********************************************************************/ /* GLOBAL VARIABLES */ /*********************************************************************/ int gl_hchar; int gl_wchar; int gl_wbox; int gl_hbox; /* system sizes */ int phys_handle; /* physical workstation handle */ int handle; /* virtual workstation handle */ int wi_handle; /* window handle */ int top_window; /* handle of topped window */ int xdesk,ydesk,hdesk,wdesk; int xold,yold,hold,wold; int xwork,ywork,hwork,wwork; /* desktop and work areas */ int msgbuff[8]; /* event message buffer */ int keycode; /* keycode returned by event-keyboard */ int mx,my; /* mouse x and y pos. */ int butdown; /* button state tested for, UP/DOWN */ int ret; /* dummy return variable */ int i,j; long k; long scradr; int hidden; /* current state of cursor */ int contrl[12]; int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; /* storage wasted for idiotic bindings */ int work_in[11]; /* Input to GSX parameter array */ int work_out[57]; /* Output from GSX parameter array */ int pxyarray[10]; /* input point array */ /****************************************************************/ /* GSX UTILITY ROUTINES */ /****************************************************************/ hide_mouse() { if(! hidden){ graf_mouse(M_OFF,0x0L); hidden=TRUE; } } show_mouse() { if(hidden){ graf_mouse(M_ON,0x0L); hidden=FALSE; } } /****************************************************************/ /* open virtual workstation */ /****************************************************************/ open_vwork() { for(i=0;i<10;work_in[i++]=1); work_in[10]=2; handle=phys_handle; v_opnvwk(work_in,&handle,work_out); } /****************************************************************/ /* Init. Until First Event_Multi */ /****************************************************************/ OBJECT *maintree,*helptree; int xobj,yobj,wobj,hobj,xhi,yhi,xlo,ylo,xhi0,yhi0,xlo0,ylo0; int max_depth,frames,depth,recalc_on; int a[8],b[8]; int buffer_flag; long elements; char *malloc(),*matrix,*addr; main() { scradr=xbios(3); /* logbase */ appl_init(); phys_handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox); wind_get(0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk); open_vwork(); if(work_out[13]!=2) form_alert(1,"[3][Monochrome|version only.][Sorry!]"); else { if(!rsrc_load("mandelbr.rsc")) form_alert(1,"[3][I would like|to get my RSC file!][Damn!]"); else { elements=((long)(3))*ROWS*COLUMNS; matrix=malloc(32000); for ( k=32000; k