@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝL 3u } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED697 FREE SECTORS COPYING---D8:COPY32.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 128ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uLD:RSLOGO.ZS JKBDE V BHIDE V B V`/T}01'𩱅 i(ieei ݲ "/)LD:QMAU}G.OBJ OBJ JKBݝDE V BHID@E V B Vd ҅ )i-V} ґۭ/LPpppBAW}@X}?????????~Y}??????~??Z}????`|?[}?\}]} ??ccaqyymmg^}gllll >c`~?c?p````plool ``caǃ_}>?̌ S ``caǃD@A @A @GDas QUICKmagazin@K@A @A @A Das QUICKmagazin erscheint beim Verlag Werner Rtz zum Preis von DM 9.- auf Diskette a}. Die Programme und Texte auf dieser Diskette stammen von Andreas Binner und Harald Schnfeld, den Autoren von QUICK.@A Das b} Magazin soll all jenen helfen, die die neue Programmiersprache QUICK erlernen und richtig ausnutzen wollen.@A Eine stndig c}e Rubrik soll sich mit Problemen beschftigen, die uns zu Ohren gekommen sind. @I Schreiben Sie uns@N also, wenn Sie Hilfe b d}entigen, oder selbst Tips geben knnen.@N@A Der Schwerpunkt liegt jedoch auf der Erklrung der speziellen Mglichkeiten v e}on QUICK anhand ausgewhlter @IProgramme@N , die mit ausfhrlichen Texten kommentiert werden. Zu jedem Programm befindet sic f}h ein Text, das Quellprogramm und das fertig compilierte Maschinenprogramm auf der Disk.@A @A @A @A @GDie Bedienung der g}Disk@K@A @A Die Diskette wird mit Hilfe des Joysticks in Port 1 gesteuert. Nach dem Booten befinden Sie sich im Men. Hier h} knnen Sie einen der Texte zum Lesen anwhlen, ein Bild laden, oder ein Programm starten. Bewegen Sie dazu einfach den @I i}inversen @N Balken auf den entsprechenden Eintrag und drcken Sie den Trigger.@A Texte knnen auch @I ausgedruckt @N werden j}, indem Sie whrend des Lesens die SELECT-Taste (fr ATARI Drucker) oder die OPTION-Taste (fr EPSON Drucker) drcken.@A A k}ngewhlte Texte knnen nach oben und unten gescrollt werden, indem Sie den Joystick in die entsprechende Richtung bewegen. Z l}ur Rckkehr ins Men drcken Sie den Trigger.@A @A en, indem Sie den Joystick in die entsprechende Richtung bewegen. Z 9AUcLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxAn}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` Ao} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BIIp}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PDq}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C r} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`s}L)D ` ```߰`` %`))Ţ𲥢0``))t}ŢLD0```) eeFf&LD D {D JE `u} D C JE ``00!`IIiiLEIIii``E`IIv}ii`UVT E`UVT E`HH`HH"`ʼnLSFňw}LSF`mm mm 88888 ͭ`x}iiii8 ͭ```hhȱȱȄLF y}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF z}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ{}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`|} d'hhiiȱȱȱ m}}m iiHH E````~}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)}`ԍԍ`"ԩ@ԩ`}AC) ENDIF ELSE } C=W ENDIF ASLW(C) ASLW(C) ASLW(C) ADD(ZS,C,ADR) ADD(ADR,7,ADR1) PEEK(ADR1,PX) PX+ J=0} K=4 REPEAT ADD(ADR,J,ADR1) PEEK(ADR1,B) EOR(B,INV,B) BUF(K)=BUcj -Ad -A &6FV}fv/A  0A(t@)$`uPvPІѭ ,} A AD:QMAG.ZS vV >c  A (S: JKB DE V/}/   0i1ii|UQQԌ}ԩR UVT AQUICKmagazin Ausgabe 2UVT A(c) 1989 by Raindorf SoftUV}TR A A Impressum/AnleitungT AFormatierte QUICK-ListingsT A Die QUICK-LibrariesT} A Simulation grosser ArraysT A LifeT A Selbststartende ProgrammeT A Schnellere Gr}afikT A 'PLOT-Demo'T A 'Quelltext-Druckprogramm'T A 'LIFE'/ WX}/ >c NXLS AD:QMAGIMPR.TXT vVLTLS AD:Q1.TXT vVLTL T AD:Q2.TXT} vVLTL*T AD:Q3.TXT vVLTLIT AD:Q4.TXT vVLTLhT AD:Q5.TXT vVLTLT AD:Q6.TXT }vVLTLT AD:NEWPLOT.OBJ LTLT AD:LIST.OBJ LT LT AD:LIFE.OBJ } >c  A (S: JKB DE V  °ð XLkULP}HHH ԭЭiLU ԩЍ ԍ ԍ ԍ ԩЍ ԍ ԩ ԍ Ԯ ԭ ԭ} ԭ ԭΦΦ ԭΦΦ ԭΦΦ ԭЍ ԭЍ ԍ ԍ ԍ ԍ ԍ ԍ  LU ԩhhh@}  JKB DE VS B}HIDE V >cLW  A (S: JKB DE Vƅ}UVT AQUICKmagazin einlegen - TASTE LP`ξ ^XxLWLWο ^Xx LW;LW }^XLXLXL-X΅L-X NXLWLW`LSX`}LcX`Ű°ϰðаXiͰYiΰXi@ѰYiҰǰȰϰаưưLc` B V`PLb Lcii Aii4llll xp8 cf 0fppppxp}ppphppp``````pp px00000````0000000 p}6>ppppxxppxp~<UUU}<~~~<x`x`~<~~<}0~0 ~ <~~<xxppxxpp`px``````}ppxxpp`0``````xp ~p px00`}~x|nf8x8xxpp`0``````xp ~p px00`Quick-SourcetextD1:LIFE.QIK ----------------Length: $1A2DFree : $5D3E----------------*LIFE*(c) RAINDORFSO}FT '89*Version 1.0 "Arrays"BYTE[X,Y,Z,CU,LECURS=752,KEY=764]WORD[BS=88FELD *Anfangsadresse des Feldes } *das aus Bytes bestehtFELD2 *Feld zum ZwischenspeichernHOCH *Hoehe des FeldesBREIT *Breite des F}eldes (40!!)]ARRAY[FNAME(20)]MAIN.INIT.LOOPENDMAIN*InitialisierenPROC INITBEGIN CLOSE(6) OPEN(6,12,0,"E}:") SETCOL(2,12,2) FELD=BS *Feld direkt auf Bildschirm HOCH=20 *Groesse festlegen BREIT=40 *40 wegen schneller Mul}t. *festgelegt * 20*40 wegen Bildschirm- * groesse festgelegt FELD2=40960 CURS=1 *}Cursor aus POS(1,21) ?("Set Del Clr Run Break Put Get "); ?("- = + *"); POS(3,22) ?("L I F E (c) '89 by RAINDORF S}OFT") COLOR(18) PLOT(0,20) DRAW(39,20) PLOT(0,23) DRAW(39,23) X=20 Y=10 CU=154 *Cursorzeichen LE=84 *Z}eichen fuer Punkt .LEER Z=0 .SETFELD(X,Y,CU)ENDPROC*BerechnungsroutinePROC RUNLOCALBYTE[I,J,I1,J1,I2,J2,A,F]}BEGINREPEAT I=0 J=0 CLR(160,4) *ab Adresse 160*256 *d.h. ab Feld2 4*256 *Bytes leeren} REPEAT REPEAT A=0 *Nachbarn im Feld suchen *und Summer der Nachbarn in *A berechnen } SUB(I,1,I1) *I-1 IF I1=255 I1=39 ENDIF SUB(J,1,J1) *J-1 IF J1=255 J1=19} ENDIF ADD(I,1,I2) *I+1 IF I2=40 I2=0 ENDIF ADD(J,1,J2) *J+1 IF J2=20} J2=0 ENDIF .GETFELD(I1,J1,F) IF F<>0 A+ ENDIF .GETFELD(I1,J2,F) IF F<>0} A+ ENDIF .GETFELD(I1,J,F) IF F<>0 A+ ENDIF IF A<4 *wenn sowieso schon 4 } .GETFELD(I,J1,F) *kann man IF F<>0 *sich das Weitersuchen A+ *sparen ENDIF IF A<4} .GETFELD(I,J2,F) IF F<>0 A+ ENDIF IF A<4 .GETFELD(I2,J1,F) } IF F<>0 A+ ENDIF IF A<4 .GETFELD(I2,J,F) IF F<>0} A+ ENDIF IF A>0 .GETFELD(I2,J2,F) IF F<>0 } A+ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF} A=3 *Wenn 3 Nachbarn da, .SET2FELD(I,J,LE) *neuer Punkt *im 2. Feld ELSE IF A=2 *Wen}n 2 Nachbarn da, .GETFELD(I,J,I1) *Zustand .SET2FELD(I,J,I1) *ueberneh- ENDIF *men} ENDIF *sonst leer lassen J+ UNTIL J=HOCH J=0 I+ UNTIL I=BREIT BMOVE(FELD2,FELD,800) *2. Fe}ld in 1. *kopierenUNTIL KEY=21.GETFELD(X,Y,Z)ENDPROC*Programmablauf bestimmenPROC LOOPBEGI}NREPEAT KEY=255 REPEAT UNTIL KEY<>255 *Taste abfragen IF KEY=62 *neuen Punkt setzen .SETFELD(X,Y,LE) Z}=LE ELSE IF KEY=58 *Punkt loeschen .SETFELD(X,Y,0) Z=0 ELSE IF KEY=18 *Feld loeschen .L}EER Z=0 .SETFELD(X,Y,CU) ELSE IF KEY=40 *Start .SETFELD(X,Y,Z) .RUN } .GETFELD(X,Y,Z) .SETFELD(X,Y,CU) ELSE IF KEY=14 *Cursor hoch .SETFELD(X,Y,Z) } Y- IF Y=255 Y=19 ENDIF .GETFELD(X,Y,Z) .SETFELD(X,Y,CU}) ELSE IF KEY=15 *runter .SETFELD(X,Y,Z) Y+ IF Y>19 } Y=0 ENDIF .GETFELD(X,Y,Z) .SETFELD(X,Y,CU) ELSE I}F KEY=6 *links .SETFELD(X,Y,Z) X- IF X=255 X=39 } ENDIF .GETFELD(X,Y,Z) .SETFELD(X,Y,CU) ELSE IF KEY=7 *re}chts .SETFELD(X,Y,Z) X+ IF X=40 X=0 } ENDIF .GETFELD(X,Y,Z) .SETFELD(X,Y,CU) ELSE IF KEY=6}1 *Speichern .LOAD ELSE IF KEY=10 .SAVE *Dazu} laden ENDIF ENDIF ENDIF ENDIF ENDIF } ENDIF ENDIF ENDIF ENDIF ENDIFUNTIL 1=0ENDPROC*Laedt Daten dazuPROC LOADLOCALBYTE[I,J,B=205]}BEGIN .NAME OPEN(1,4,0,FNAME) I=0 J=0 REPEAT REPEAT BGET(1,1,205) IF B<>0 *Feld nur lad}en .SETFELD(I,J,B) *wenn es nicht ENDIF *leer ist I+ UNTIL I=BREIT I=0 J+ UNTIL} J=HOCH CLOSE(1) .GETFELD(X,Y,Z) *Zeichen unter Cursor .SETFELD(X,Y,CU) *merken und Curs. COLOR(18) *zeigen }PLOT(0,20) DRAW(39,20)ENDPROC *Speichert Bild abPROC SAVEBEGIN .NAME OPEN(1,8,0,FNAME) BPUT(1,800,FELD)} *Alle 800 Bytes CLOSE(1) *unveraendert *abspeichern .GETFELD(X,Y,Z) .SETFELD(X,Y,CU) C}OLOR(18) PLOT(0,20) DRAW(39,20)ENDPROC*Filename eingebenPROC NAMEBEGIN COLOR(32) PLOT(0,20) DRAW(30,20) .S}ETFELD(X,Y,Z) POS(0,20) KEY=255 *Filename ?("Filename"); INPUT(FNAME) *eingebenENDPROC*Fuellt Feld mit }Leerzeichen*langsame Version*schneller siehe PROC RUNPROC LEERLOCALBYTE[I,J]BEGIN I=0 J=0 REPEAT REPEAT } .SETFELD(I,J,0) J+ UNTIL J=HOCH J=0 I+ UNTIL I=BREITENDPROC*Setzt Feld(Index1,Index2) auf Wert*}mit langsamer MULT-VersionPROC SETFELDINWORD[INDEX1,INDEX2]BYTE[WERT]BEGIN MULT(INDEX2,BREIT,INDEX2) *einfaches} * aber langsames *40 ADD(INDEX1,INDEX2,INDEX1) ADD(FELD,INDEX1,INDEX1) POKE(INDEX1,WERT)ENDPROC*}Setzt Wert auf Feld(Index1,Index2)*Schnelle MULT-VersionPROC GETFELDINWORD[INDEX1,INDEX2]OUTBYTE[WERT]BEGIN A}SLW(INDEX2) * INDEX2*8 ASLW(INDEX2) ASLW(INDEX2) ADD(INDEX1,INDEX2,INDEX1) ASLW(INDEX2) *16 } ASLW(INDEX2) *32 ADD(INDEX1,INDEX2,INDEX1) ADD(FELD,INDEX1,INDEX1) PEEK(INDEX1,WERT)ENDPROC*Setzt Feld}2(Index1,Index2) auf WertPROC SET2FELDINWORD[INDEX1,INDEX2]BYTE[WERT]BEGIN ASLW(INDEX2) * INDEX2*40} ASLW(INDEX2) ASLW(INDEX2) ADD(INDEX1,INDEX2,INDEX1) ASLW(INDEX2) ASLW(INDEX2) ADD(INDEX1,INDEX2,INDEX1) ADD(FE}LD2,INDEX1,INDEX1) POKE(INDEX1,WERT)ENDPROC,INDEX1) ASLW(INDEX2) ASLW(INDEX2) ADD(INDEX1,INDEX2,INDEX1) ADD(FE2A]LBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`}L)D ` ```߰`` %`))Ţ𲥢0``))}ŢLD0```) eeFf&LD D {D JE `} D C JE ``00!`IIiiLEIIii``E`II}ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F }fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX }eYmMi`Fejf`M`M(*(`MM MMMM 6KMM) }MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM }MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM }`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)}`ԍԍ`"ԩ@ԩ`}A8d/8 i:222 }1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALI}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`]j P T }B V  A (E: JKB DE V XY(}UVT ASet Del Clr Run Break Put Get A- = + *UVT AL I F E (c) '89 by RAINDORF SOFT} A' A A' A T V[} [` 0A8LQ'8LQi(LR}iL+R ?\LWR ?\LR} ?\LRLS ?\LRLS ?\}LSLS ?\LQSLS ?\LS}LS ?\LSLS \L3TL3T} ?\ \ A LQ} A LQ  ALQ ?\`LT>L$U} [LX:LTU [LXLU V[} [LX(LU [ Q ?\ [LX}LqV [΁L0V ?\ [LX }LV [LV ?\ [LX!}LkW [΀L*W' ?\ [LX"}LW [(LW ?\ [LX=#}LW -XLX LX Y A LT` Z  JKB D$}E V͍ BHIDE VLX [%} A L|X A L|X B V䭀&} ?\ [ A' A` Z'}  JKB DE V  BHIDE V (} B V䭀 ?\ [ A' A`)}  A A [UVT AFilename *A`*} [ A L`[ A+} L`[` A mmmm`...,}mm..mmmm`...mm-}..mmmm`P`...mmI!/}!0}!1}TTT!2}TT!3}!4} 2%6}%7}TTTT%8}TTTTTTTT%9}%:}%;}$2)=})>}T)?}TTTTTTTTTTTT)@}TTTTT)A})B}(2-D}TTT-E}TTTTTTT-F}TTTTTT-G}-H}-I},21K}TTTTTT1L}TTTTTTTTTTTT1M}TTTTTTTTTTTTT1N}TTTTTTTTTTT1O}TTTTTT1P}025R}T5S}TTTTT5T}TTTT5U}TT5V}5W}429Y}TT9Z}TTTTTT9[}TTTTTTTTTTTTTTT9\}TTTTTTTTTT9]}TT9^}82=`}TTTTTTTTTTTTT=a}TTTTTTTTTTTTTTTT=b}=c}=d}=e}<2Ag}TAq}b%DOS SYSb*)DUP SYSb SAUTORUN SYSb `QMAGIMPRTXTbGmQMAG OBJb QMAG ZS b7LIFE QIKB:LIFE OBJB.GLIDER LIFB5SHIP1 LIFB<SHIP2 LIFBCOSZ1 LIFBJOSZ2 LIFBQPENTA LIFBXWHEEL LIFB_WASHER LIFBfTUMBLER LIFBvGENERAT LIFB}TRAIN LIFBMAKER LIFBSHIP3 LIFBFEEDER LIFBTIMEFEEDLIFbLIST QIKB2LIST OBJbAUTOST QIKB$AUTOST OBJbNEWPLOT QIKB#NEWPLOT OBJB:PLOT8 OBJb <WORDF QIKb EBYTEF QIKb NDIMF QIKB#[WORDF OBJB"~BYTEF OBJB(DIMF OBJ# SIN QIK# BCD QIK# Q1 TXT#0Q2 TXT#+Q4 TXT#BQ5 TXT#IQ3 TXT#hQ6 TXT PLOT8 ASM#GRAPH LIB#MATH LIB# NUMERIC LIBTTTTTTTTTTTTTAr}TTTTTTTTAs}At}Au}@2Ew}Ex}TTTTTTTTTTTTEy}TTTTTTTTTTTTTTTTTTEz}TTTTTTE{}E|}D2I~}TTTTTI}TTTTTTTTTI}TTTTTTTI}TTTTI}I}H2TTTM}TTTM}TTTTM}TTTM}TTTTTTTM}TTTM}TTL2TQ}TTTTTTTTTQ}TTTTTTTTTTTTQ}TTTTQ}TTQ}TTTTTTTTQ}TTTTTTP2TTTTTTU}TTTTTTTTTTTTTTTTTTTTTTTU}TTTTTTTTTTTTTTTTU}U}U}U}T2TTTTTTY}TTTTTTTTTTTTTTTTTTTTTTTY}TTTTTTTTTTTTTTTTY}TTTTY}TTTY}TTTTTY}TX2Quick-SourcetextD2:LIST.QIK ----------------Length: $09F9Free : $6D72----------------*QUICK-QUELLTEXT-DRUC]}KPROGRAMM*(c) '89 RAINDORF SOFTBYTE[SUP,D,EF,Z,X=1791,TA=1790,L,SEI]WORD[AD,AD1,SL,SPAL,LADEND]ARRAY[FILE(20),]}DATE(10),TIME(10)T(90)=24900,T1(90)=24800]MAIN UNSIGN REPEAT .ANFANG .SETUP .DRUCK UNTIL 1=0ENDMAINP]}ROC ANFANGBEGIN CLOSE(6) OPEN(6,12,0,"E:") SETCOL(2,3,4) ?("QIK-Print") ?("fuer formatierte Quick-Listings") ?]} ?("Filename"); INPUT(FILE) ?("Datum"); INPUT(DATE) ?("Uhrzeit"); INPUT(TIME) CLOSE(1)ENDPROCPROC SETUPL]}OCALBYTE[PAP]BEGIN ?("Ausdruck in Draft(0) oder LQ(1)") INPUT(D) ?("Einzel(0) oder Endlos(1)") INPUT(PAP) IF P]}AP=0 SL=80 LADEND=31400 SPAL=3200 ELSE SL=85 LADEND=31800 SPAL=3400 ENDIF OPEN(1,4,0,FILE) R]}EPEAT BGET(1,1,24900) X=T(0) UNTIL X=254 BGET(1,2,24900) CLOSE(5) OPEN(5,8,0,"P:") IF D=0 DATA(24900)]} [ 27,64,27,120,0 ] ELSE DATA(24900) [ 27,64,27,120,1 ] ENDIF BPUT(5,5,24900) DATA(24900)]} [ 27,77,27,83,0,27,108,6,27,82,0,27,48 27,68,44,0 ] BPUT(5,17,24900) SUP=0ENDPROCPROC DRUCKBEGIN SEI=1 R]}EPEAT EF=0 .LOESCH .LADE .PRI SEI+ UNTIL EF=1 CLOSE(1) CLOSE(5)ENDPROCPROC LOESCHBEGIN ?("Seite ",SEI)]} AD=25000 REPEAT Z=0 REPEAT ADD(AD,Z,AD1) POKE(AD1,32) Z+ UNTIL Z=39 ADD(AD,Z,AD1) ]}POKE(AD1,155) ADD(AD,40,AD) UNTIL AD>=LADENDENDPROCPROC LADEBEGIN AD=25000 EF=0 REPEAT Z=40 IF EF=0 ]} REPEAT BGET(1,1,24900) X=T(0) IF X=255 EF=1 X=155 ENDIF POKE(AD,X) ADD(]}AD,1,AD) Z- UNTIL X=155 ADD(AD,Z,AD) ELSE POKE(AD,155) ADD(AD,40,AD) ENDIF UNTIL AD>=LADE]}NDENDPROCPROC PRIBEGIN IF D=0 D=1 DATA(24900) [ 27,83,1 ] ELSE D=0 DATA(24900) [ ]} 27,83,0 ] ENDIF BPUT(5,3,24900) .HEAD AD=25000 TA=9 Z=0 REPEAT AD1=AD REPEAT PEEK(AD1,X) ]} IF X<>155 BPUT(5,1,1791) ELSE BPUT(5,1,1790) ENDIF ADD(AD1,1,AD1) UNTIL X=155 AD]}D(AD,SPAL,AD1) REPEAT PEEK(AD1,X) BPUT(5,1,1791) ADD(AD1,1,AD1) UNTIL X=155 Z+ ADD(AD,40,AD)]} UNTIL Z=SL TA=12 BPUT(5,1,1790)ENDPROCPROC HEADBEGIN DATA(24900) [ 27,97,49 ] BPUT(5,3,24900) LPT ("Li]}sting von ",FILE," Seite "); LPT (SEI,"am ",DATE," um ",TIME); LPT (" Uhr"); DATA(24900) [ 155,27,97,48,155,0 ] ]} BPUT(5,6,24900)ENDPROC; LPT (SEI,"am ",DATE," um ",TIME); LPT (" Uhr"); DATA(24900) [ 155,27,97,48,155,0 ] \AYLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxAa}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` Aa} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BIIa}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PDa}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C a} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`a}L)D ` ```߰`` %`))Ţ𲥢0``))a}ŢLD0```) eeFf&LD D {D JE `a} D C JE ``00!`IIiiLEIIii``E`IIa}ii`UVT E`UVT E`HH`HH"`ʼnLSFňa}LSF`mm mm 88888 ͭ`a}iiii8 ͭ```hhȱȱȄLF a}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF a}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅa}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`a} d'hhiiȱȱȱ ma}m iiHH E````a}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J a}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMMa}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMMa}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`Fa}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeXa}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)a}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MMa}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMMa}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?a}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)a}`ԍԍ`"ԩ@ԩ`a}A8d/8 i:222 a}1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALIa}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`Yj =P 5Q Sa} A LP B V  A (E: JKB DE V a} AQIK-Print Afuer formatierte Quick-Listings A AFilename *A ADatum *A AUhrzeita} *A  B V` AAusdruck in Draft(0) oder LQ(1) *A AEinzel(0) oder Endlos(1) *ALQa}Pz LQU8|H   JKB DEa} VDa BHIDE VDaLRDa a}BHIDE V B V A (P: JKB DE V䭁LSa} -ADa@xL&S -ADa@xDa BHIDE V -ADaMSlR0D,a}Da BHIDE V` T T ULS B V a} B V` ASeite ami 'L1Tmia}i(i Aɀ L,T`a(LUDa a}BHIDE VDaL@Uii΃ɛLTma}iLUi(i Aɀ LT`LU -ADaSLU -ADaa}SDa BHIDE V "Xa a}LV BHIDE VLW BHIa}DE V䭈iiɛLaVmm BHa}IDE V䭈iiɛL/Wi(i A LUV a} BHIDE V` -ADaa1Da BHIDEa} V AListing von  Seite  Aam   um   A Uhr -ADaa0Da a}BHIDE V`P Aam   um   A Uhr -ADaa0Da `%Quick-SourcetextD1:AUTOST.QIK ----------------Length: $01F6Free : $7575----------------*Selbstartende QUICK-e}Programme erzeugenWORD[TIMER=540]ARRAY[FNAME(20)]MAIN DATA(24576) [ 255,255,224,2,225,2,0,80 ]REPEAT Ce}LOSE(6) OPEN(6,12,0,"E:") ?("Filename des OBJ-Files") INPUT(FNAME) OPEN(1,9,0,FNAME) BPUT(1,8,24576) CLOSE(1) e} ?("Das File startet sich im DOS nun") ?("automatisch.") ?("Hat es den Namen AUTORUN.SYS, so") ?("wird es beim Booten ae}utomatisch") ?("geladen und gestartet.") TIMER=400 REPEAT UNTIL TIMER=0UNTIL 1=0ENDPROC?("wird es beim Booten adeA*RLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxAi}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` Ai} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BIIi}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PDi}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C i} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`i}L)D ` ```߰`` %`))Ţ𲥢0``))i}ŢLD0```) eeFf&LD D {D JE `i} D C JE ``00!`IIiiLEIIii``E`IIi}ii`UVT E`UVT E`HH`HH"`ʼnLSFňi}LSF`mm mm 88888 ͭ`i}iiii8 ͭ```hhȱȱȄLF i}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF i}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅi}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`i} d'hhiiȱȱȱ mi}m iiHH E````i}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J i}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMMj}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMMj}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`Fj}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeXj}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)j}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MMj}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMMj}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?j}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)j}`ԍԍ`"ԩ@ԩ`j }A8d/8 i:222 j }1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALIj }D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`*Rj -A`P j } B V  A (E: JKB DE V AFilename des OBJ-Files *A j }  JKB DE V` BHIDE Vj} B V ADas File startet sich im DOS nun Aautomatisch. AHat es den Namen AUTORUN.SYS, so Awird ej}s beim Booten automatisch Ageladen und gestartet. A LQj} A LP`Pgeladen und gestartet. A LQh Quick-SourcetextD:NEWPLOT.QIK ----------------Length: $0229Free : $7542----------------*Einbindung von Maschn}inenroutinen*in bestehende QUICK-BefehleMAIN*Graphics 8CLOSE(6)OPEN(6,12,8,"S:")*FarbenSETCOL(1,0,0)SETCOL(2,0,15n})COLOR(1)*Rechteck malen.BOX*Neuen PLOT fuer GR.8 ladenOPEN(1,4,0,"D:PLOT8.OBJ")BGET(1,256,19962)CLOSE(1)*Initalisn}ierenCALL(0,0,0,19968)*FarbeCOLOR(0)*Rechteck malen, aber viel schneller!.BOXENDMAIN**Unterprogramm um ein Rechten}ck zu malen*PROC BOXBYTE[Y]WORD[X]BEGINX=100REPEAT Y=50 REPEAT PLOT(X,Y) Y+ UNTIL Y=142 ADD(Xn},1,X)UNTIL X=220ENDPROCE[Y]WORD[X]BEGINX=100REPEAT Y=50 REPEAT PLOT(X,Y) Y+ UNTIL Y=142 ADD(XlAQLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxAr}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` Ar} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BIIr}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PDr}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C r} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`r}L)D ` ```߰`` %`))Ţ𲥢0``))r}ŢLD0```) eeFf&LD D {D JE `r} D C JE ``00!`IIiiLEIIii``E`IIr }ii`UVT E`UVT E`HH`HH"`ʼnLSFňr!}LSF`mm mm 88888 ͭ`r"}iiii8 ͭ```hhȱȱȄLF r#}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF r$}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅr%}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`r&} d'hhiiȱȱȱ mr'}m iiHH E````r(}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J r)}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMMr*}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMMr+}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`Fr,}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeXr-}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)r.}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MMr/}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMMr0}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?r1}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)r2}`ԍԍ`"ԩ@ԩ`r3}A8d/8 i:222 r4}1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALIr5}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`Qj B Vr6}  A (S: JKB DE V   )Q A (D:PLOT8.OBJr7} JKB DE VM BHIDE V B Vr8} N )Qd2 AɎL8Qii܍ A r9}L3Q`Pd2 AɎL8Qii܍ A pNNANANANA`WlN&&&&&eeNNNNnNNNnNNNnNNev;}XeY)N`NIN-N`@ &&&eeNNNNnNNNnNNNnNNet7Quick-SourcetextD1:WORDF.QIK ----------------Length: $0414Free : $7357----------------*Simulation eines einz=}dimensionalen,*beliebig langen WORD-Arrays.WORD[FELD *Anfangsadresse des Feldes *das aus Bytes bestehz>}tLANG *Laenge des FeldesI,A]MAINCLOSE(6)OPEN(6,12,0,"E:")FELD=40960 *Anfang festlegenLANG=800 *Laenge fz?}estlegen I=0 A=800 REPEAT *Auffuellen mit .SETFELD(I,A) *Werten von 800 bis ADD(I,1,I) *1 SUB(z@}A,1,A) *I gibt an welches UNTIL I=LANG *Word auf den Wert *von A gesetzt wird I=0 REPEAT zA} *Ausgeben dieser .GETFELD(I,A) *Werte ADD(I,1,I) *I gibt an welcher ?(A); *Feldwert in AzB} UNTIL I=LANG *geschrieben wirdENDMAIN*Setzt Feld(Index) auf WertPROC SETFELDINWORD[INDEXWERT]BEGIN ASLW(zC}INDEX) ADD(FELD,INDEX,INDEX) *Feld aus WORDS DPOKE(INDEX,WERT) *bestehtENDPROC*Setzt Wert auf Feld(Index)PROC GzD}ETFELDINWORD[INDEX]OUTWORD[WERT]BEGIN MULT(INDEX,2,INDEX) ADD(FELD,INDEX,INDEX) DPEEK(INDEX,WERT)ENDPROCx}Quick-SourcetextD:BYTEF.QIK ----------------Length: $03C6Free : $73A5----------------*Simulation eines ein~F}dimensionalen,*beliebig langen BYTE-Arrays.BYTE[A]WORD[FELD *Anfangsadresse des Feldes *das aus B~G}ytes bestehtLANG *Laenge des FeldesI]MAINCLOSE(6)OPEN(6,12,0,"E:")FELD=40960 *Anfang festlegenLANG=800 ~H}*Laenge festlegen I=0 A=0 REPEAT *Auffuellen mit .SETFELD(I,A) *Werten von 0 bis ADD(I,1,I) *255 ~I} A+ *I gibt an welches UNTIL I=LANG *Byte auf den Wert *von A gesetzt wird I=0 REPEAT~J} *Ausgeben dieser .GETFELD(I,A) *Werte ADD(I,1,I) *I gibt an welcher ?(A); *Feldwer~K}t in A UNTIL I=LANG *geschrieben wirdENDMAIN*Setzt Feld(Index) auf WertPROC SETFELDINWORD[INDEX]BYTE[WERT~L}]BEGIN ADD(FELD,INDEX,INDEX) POKE(INDEX,WERT)ENDPROC*Setzt Wert auf Feld(Index)PROC GETFELDINWORD[INDEX]OUT~M}BYTE[WERT]BEGIN ADD(FELD,INDEX,INDEX) PEEK(INDEX,WERT)ENDPROCauf Feld(Index)PROC GETFELDINWORD[INDEX]OUT|JQuick-SourcetextD1:DIMF.QIK ----------------Length: $05A2Free : $71C9----------------*Simulation eines zweO}idimensionalen,*beliebig hohen und breiten BYTE-ArraysBYTE[A,CURS=752]WORD[FELD *Anfangsadresse des Feldes P} *das aus Bytes bestehtHOCH *Hoehe des FeldesBREIT *Breite des FeldesI,J]MAINCLOSE(6)OPEN(6,12Q},0,"E:")FELD=40960 *Anfang festlegenHOCH=20 *Groesse festlegenBREIT=39CURS=1?("Fuelle Feld")I=0 *SpaltenR}indexJ=0 *ZeilenindexA=65REPEAT *Spaltenweises Fuellen REPEAT *mit 0 bis 19 .SETFELD(I,J,A) A+ S} ADD(J,1,J) UNTIL J=HOCH J=0 A=65 ADD(I,1,I)UNTIL I=BREIT?("Gebe Feld aus")I=0J=0REPEAT *Spaltenweises AT}usgeben REPEAT .GETFELD(I,J,A) ?("I:",I,"J:",J,"Wert:",A) ADD(J,1,J) UNTIL J=HOCH ? J=0 ADD(I,1,I)UNTIU}L I=BREITJ=0I=0COLOR(125)PLOT(0,0)REPEAT *Ausgeben als Grafik REPEAT .GETFELD(I,J,A) COLOR(A) PLOT(IV},J) ADD(J,1,J) UNTIL J=HOCH ? J=0 ADD(I,1,I)UNTIL I=BREITPOS(0,21)?("39*20 grosses BYTE-Feld")ENDMAIN*SetW}zt Feld(Index1,Index2) auf WertPROC SETFELDINWORD[INDEX1,INDEX2]BYTE[WERT]BEGIN MULT(INDEX2,BREIT,INDEX2) ADDX}(INDEX1,INDEX2,INDEX1) ADD(FELD,INDEX1,INDEX1) POKE(INDEX1,WERT)ENDPROC*Setzt Wert auf Feld(Index1,Index2)PROC GETFY}ELDINWORD[INDEX1,INDEX2]OUTBYTE[WERT]BEGIN MULT(INDEX2,BREIT,INDEX2) ADD(INDEX1,INDEX2,INDEX1) ADD(FELD,INDEZ}X1,INDEX1) PEEK(INDEX1,WERT)ENDPROCWERT]BEGIN MULT(INDEX2,BREIT,INDEX2) ADD(INDEX1,INDEX2,INDEX1) ADD(FELD,INDE)AQLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA\}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A]} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII^}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD_}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C `} C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`a}L)D ` ```߰`` %`))Ţ𲥢0``))b}ŢLD0```) eeFf&LD D {D JE `c} D C JE ``00!`IIiiLEIIii``E`IId}ii`UVT E`UVT E`HH`HH"`ʼnLSFňe}LSF`mm mm 88888 ͭ`f}iiii8 ͭ```hhȱȱȄLF g}GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF h}GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅi}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`j} d'hhiiȱȱȱ mk}m iiHH E````l}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J m}%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMMn}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM筆o}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`Fp}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeXq}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)r}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MMs}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMMt}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?u}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)͆v}`ԍԍ`"ԩ@ԩ`w}A8d/8 i:222 x}1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALIy}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`Qj B Vz}  A (E: JKB DE V   WQ{}ii8 A LP Qi|}i A A LP.mmȭ`}} A mmȱ`Pmȭ`KAQLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`}L)D ` ```߰`` %`))Ţ𲥢0``))}ŢLD0```) eeFf&LD D {D JE `} D C JE ``00!`IIiiLEIIii``E`II}ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM筊}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)͊}`ԍԍ`"ԩ@ԩ`}A8d/8 i:222 }1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALI}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`Qj B V}  A (E: JKB DE V  8Qi}i A LzP ]Qii A} A LPmm`mm`PrA,TLBALAlLCLDLDLpELELFLFLELFL&JLLLGLHLHLILaIL$IL@ILMhh8ȱȱȱL]AȱLxA}eiHH`hh+@LALBLHBLBLBLA BeiHH`LAȱȱ` A} \B 1CLAȱȱȱ` B \B 1CLAȱȱ` /B B 1CLA0`- BII}ii`0`- BIi`ȱ BLBLAȱȱȱ BLBLA HH`PD}EHI B V`PJK#DCEB V`P: P B V`' C C腕 C Cd C C } C C C B``朥i0 B``$0 &LC8啅喅&&(Ffƚ`}L)D ` ```߰`` %`))Ţ𲥢0``))}ŢLD0```) eeFf&LD D {D JE `} D C JE ``00!`IIiiLEIIii``E`II}ii`UVT E`UVT E`HH`HH"`ʼnLSFň}LSF`mm mm 88888 ͭ`}iiii8 ͭ```hhȱȱȄLF }GȩLF GLFeiHH`HH`hh> BoH`B(HIoDHE V #LF }GgHȭhHLF GgHLFȱȱȱȄoHɛġLFȱȱȄ G` LG-Ȅ}0:LGgHhH80KHLH {DmgHgHmhHhHīLG`gHIgHhHIhHgHigHhHihH`} d'hhiiȱȱȱ m}m iiHH E````}`%JӍ"J)J"J) J%#J I"J)@J"J)J$J# ILI"J)0 J#JLI"J)!J$J%J }%J#J`#J"J)0M J ɟ`Ʋ`$J%J"J)M!J@ ɿ`Ƴ`MMMM}MM JMM 6KMMM 6KM8MiMM8MiMM)Mii IKMM KmMiΙMM筎}M8MMMiiȑȭMȭM`M͑MMMMMM͐M*M͏M MMMMMMMM`F}fFfFf`M K K̔MmMii(iMM͕M K`MM`MM`M( KeX}eYmMi`Fejf`M`M(*(`MM MMMM 6KMM)}MMȱMȱMȱMiiM|MMmMmM8)MMMM 6KiM L` KM8MM}MMM nMjnM 0MMM-M M̡MϥmMii(iMM͕MС`8M`nMMMM}`M/ ̣MM`-MMIM`-MMIM`M-MM%MIM`?}?FN *NFNJJJJ ҮFN) ݥ 懭) 6N` ԍ ԱJJJJ ҍ ԍ Ա) ݥ 懭)͎}`ԍԍ`"ԩ@ԩ`}A8d/8 i:222 }1 L!ERROR- 144ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALI}D HEXADECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`,Tj B V}  A (E: JKB DE V' AFuelle Feld}A nSii A LPA}ii A LP AGebe Feld aus} S AI:J:Wert:ii A L|Q Ai}i A L|Q} A ͎}S Aii A LtR Ai}i A LtRUVT A39*20 grosses BYTE-Feld }A mmmm` A mm}mm`P` A mm. in Integervariable K PLOT(I,K) ;und dann Plotten .FADD(F7,F16,F7) ;F7 plus F16 ADD(I,1,I) ;I u}m 1 erhoehen UNTIL I>318 ;AbbruchbedingungENDMAINn Plotten .FADD(F7,F16,F7) ;F7 plus F16 ADD(I,1,I) ;I u9Quick-SourcetextD:BCD.QIK ----------------Length: $03F9Free : $7372----------------* Library-Demo:BCD-U}mwandlung* Liest eine Zahl ein und wandelt* sie in Fliesskomma. Danach werden* die 6 Bytes aus denen die Zahl* intern bes}teht ausgegeben.* Gibt man diese Werte bei .DFP() an,* so kann man schnell einer Fliess-* kommazahl einen bestimmten Wert}* geben.INCLUDE[D:MATH.LIB]BYTE[I,A,B0,B1,B2,B3,B4,B5]ARRAY[F1(6),F2(6),Z1(20)]MAIN CLOSE(6) ;Edit}or oeffnen OPEN(6,12,0,"E:")REPEAT ? PRINT("ZAHL ? "); ;Zahl einlesen INPUT(Z1) .AFP(Z1,F1) ;in Fliessko}. umwandeln I=0 UNSIGN ?("Bytedarstellung:") REPEAT A=F1(I) ;die einzelnen Bytes der ?(A) ;zeig}en I+ UNTIL I=6 ?("der Zahl:") .FPRT(F1) ;Zahl ausgeben ? B0=F1(0) ;die Bytes der Zahl B1=F1(1}) ;in BYTE-Variablen B2=F1(2) ;uebertragen B3=F1(3) B4=F1(4) B5=F1(5) .DFP(B0,B1,B2,B3,B4,B5,F2) ;die* } ;Bytes zu F2 zusammensetzen .FPRT(F2) ;Zum Vergleich Printen ?UNTIL 1=0 ;EndlosschleifeENDMAIN) ;die* t@A @A @GDas Quelltext-Druckprogramm@K @A @A Bisher konnten Sie Quelltexte nur im Editor mit der Funktion "S" auf den Dr}ucker ausgeben. Das hat den Nachteil, dass die Texte vor der Ausgabe nicht formatiert werden.@A @A Dieses Druckprogramm sc}hafft nun fr alle EPSON-kompatiblen Drucker Abhilfe. Die Texte werden platzsparend und bersichtlich in 2 Spalten gedruckt}. Das ist ohne Probleme mglich, weil pro Zeile hchstens 2*40 Zeichen gedruckt werden mssen. Bei der Schriftart ELITE steh}en uns aber 96 Zeichen zur Verfgung, so dass wir noch ausreichende Rnder einfgen knnen.@A Ausserdem wird am Anfang jed}er Seite eine Kopfzeile gedruckt, die den Filenamen, die Uhrzeit und das Datum enthlt.@A @A Nach dem Programmstart von LI}ST.OBJ (bzw. LIST.QIK) mssen Sie zunchst den Quelltextnamen des zu druckenden Files eingeben. Dann werden Sie nach Uhrzei}t und Datum gefragt. Als nchstes knnen Sie zwischen DRAFT und NLQ whlen. Schliesslich mssen Sie noch angeben ob auf Einz}elblatt- (80 Zeilen) oder Endlospapier (85 Zeilen) gedruckt wird.@A Die hohe Zeilenzahl kommt daher, dass abwechselnd in SU}PER- und SUBSCRIPT gedruckt wird.@A Nun wird der Text nach und nach geladen, und formatiert zum Drucker gesendet, ohne das}s Sie sich weiter darum kmmern mssen.@A @A @A H.S. @A geladen, und formatiert zum Drucker gesendet, ohne dasF@A @A @GDie Standard-Libraries@K @A @A Im ATARImagazin wurden sie ja schon angekndigt: die Standard-Libaries fr QUICK}. Allerdings konnten wir sie dort nicht mehr abdrucken.@A Fr alle, die sich die Mhe gemacht haben QUICK abzutippen, verff}entlichen wir nun an dieser Stelle nochmal die Libaries (auf der kuflichen QUICK- Disk sind sie natrlich vorhanden). Dami}t Sie dann auch sehen knnen wie so eine Libary benutzt wird, befindet sich der Quellcode SIN.QIK auf der Disk, in dem alle} 3 Libraries benutzt werden. Mit diesem Programm wird eine Sinuskurve auf den Bildschirm gezeichnet. Das Programm BCD.QIK ze}igt aus welchen 6 Bytes eine bestimmte Fliesskommazahl besteht. @A@A @A @GLibrary wozu?@K @A Quick ist eine Sprache, di}e leicht zu erweitern ist. Dies geschieht mit Hilfe von Libraries. Eine Library ist eine Sammlung von Unterprogrammen, die v}om Compiler nachgeladen werden kann. Eine Library besitzt einen einfachen Aufbau: Sie besteht aus einer Reihe von Routinen,} die ganz herkmmlich mit PROC und ENDPROC gekennzeichnet sind. Wollen Sie Routinen einer Bibliothek benutzen, so mssen Si}e mittels des INCLUDE-Befehls am Anfang Ihres Programmes die Library laden und die Routinen der Library wie normale Unterpr}ogramme aufrufen. Beachten Sie, dass der Aufruf einer Libraryroutine eventuell den SIGN oder UNSIGN-Modus ndern knnte. @A} @A Zum Grundumfang von Quick gehren die folgenden 3 Libraries:@A @A@A @A Die Grafik-Library: @GGRAPH.LIB@K@A Diese Bi}bliothek bietet eine Reihe ntzlicher Grafikfunktionen an:@A @A .GRAPHICS(GR)@A Schaltet eine Grafikbetriebsart wie im BAS}IC ein. Dabei kann ein Grafikmodus von 0 bis 15 gewhlt werden. Wird 16 dazu addiert, wird kein Textfenster dargestellt. Wi}rd 32 addiert, so wird der Bildschirmspeicher nicht gelscht.@A In Textfenstern kann kein INPUT ausgefhrt werden.@A @A .F}RAME(X1,Y1,X2,Y2)@A Zeichnet ein Rechteck mit den Eckkoordinaten X1,Y1 und X2,Y2.@A @A .BOX(X1,Y1,X2,Y2)@A Zeichnet ein a}usgeflltes Rechteck.@A @A .CIRCLE(X,Y,R)@A Zeichnet einen Kreis um den Mittelpunkt X,Y mit dem Radius R. Diese Routine f}unktioniert ab Grafikmodus 4 aufwrts. In Grafikstufen, in denen die X-Koordinaten in einem anderen Verhltnis dargestellt w}erden als die Y-Koordinaten (z.B. GRAPHICS 15) wird der Radius in X-Richtung entsprechend angepasst.@A @A .DISC(X,Y,R)@A} Zeichnet einen ausgefllten Kreis.@A @A .FILL(X,Y,X1,Y1,X2,Y2)@A Fllt einen einfarbigen Bildschirmbereich ab der Positi}on X,Y. Mit X1,Y1, X2,Y2 kann der maximal zu fllende Bildschirmausschnitt festgelegt werden.@A @A @A@A Die Mathematik-Li}brary: @GMATH.LIB@K@A Damit werden die Fliesskommaroutinen des Betriebssystems angesprochen, so dass mit Fliesskommazahlen }gerechnet werden kann. Eine Fliesskommazahl wird als ARRAY der Lnge 6 dargestellt. Das 0-te Byte gibt dabei den Exponenten }und (im 7.Bit) das Vorzeichen an. Die folgenden 5 Bytes stellen 10 Ziffern in BCD-Format dar. Wenn Sie nur Routinen der Lib}rary benutzen, mssen Sie sich jedoch mit der internen Darstellung kaum befassen.@A @A .IFP(WORD,FLOAT)@A Wandelt eine In}tegerzahl (unsigned Word) in eine Fliesskommazahl (d.h. in ein 6 Byte langes Array).@A @A .FPI(FLOAT,WORD)@A Wandelt ei}ne Fliesskommazahl ein eine Integerzahl um. Falls die Floatzahl negativ oder grsser als 65536 war, ist der Wert der Integer}zahl unspezifiziert.@A @A .AFP(ASC,FLOAT)@A Wandelt einen ASCII-String (beliebiges Array) in eine Fliesskommazahl um.@A } @A .DFP(D1,D2,D3,D4,D5,D6,FLOAT)@A Setzt 6 Datenbytes zu einer Fliesskommazahl zusammen.@A @A .FASC(FLOAT,ASC)@A Wandel}t eine Fliesskommazahl in einen String um.@A @A .FADD(FIN1,FIN2,FOUT)@A Addiert 2 Fliesskommazahlen und liefert das Ergebn}is zurck.@A @A .FSUB(FIN1,FIN2,FOUT)@A Subtrahiert 2 Zahlen.@A @A .FMUL(FIN1,FIN2,FOUT)@A Multipliziert 2 Zahlen.@A @}A .FDIV(FIN1,FIN2,FOUT)@A Dividiert 2 Zahlen.@A @A .FCMP(FLOAT,BYTE)@A berprft, ob eine Fliesskommazahl >0, =0 oder <0} ist und liefert ein Byte mit dem Wert 2 1 oder 0 zurck.@A @A .FPRT(FLOAT)@A Druckt eine Zahl auf dem Bildschirm aus.}@A @A @A@A Die Numerische Library: @GNUMERIC.LIB@K@A Diese Bibliothek stellt eine Reihe mathematischer Funktionen zur Ver }fgung:@A @A .EXP(FIN,FOUT)@A Berechnet e^FloatIN und liefert das Ergebnis zurck.@A @A .EXP10(FIN,FOUT)@A Berechnet 10 }^FloatIN.@A @A .LOG(FIN,FOUT)@A Berechnet den natrlichen Logarithmus von FloatIN.@A @A .LOG1O(FIN.FOUT)@A Berechnet de }n dekadischen Logarithmus.@A @A .SQR(FIN,FOUT)@A Berechnet die Wurzel von ABS(FloatIN).@A @A .SIN(FIN,FOUT) Berechnet d }en Sinus von FloatIN im Bogenmass.@A @A .COS(FIN,FOUT)@A Berechnet den Cosinus von FloatIN.@A @A .ATN(FIN,FOUT)@A Berec }hnet den Arcustangens von FloatIN im Bogenmass.@A @A .ABS(FIN,FOUT)@A Berechnet den Absolutwert von FloatIN.@A @A@A @A }Programmierung eigener Libraries:@A @A Bei der Programmierung eigener Libraries mssen Sie nur wenig beachten. Da eine Lib}rary "hinten" am eigentlichen Programm durch den Compiler angehngt wird, knnen Sie natrlich nur IN,OUT oder LOCAL- Variab}len verwenden (keine globalen!). Das heisst, alle Variablen mssen beim Aufruf einer Libraryfunktion bergeben werden. JUMP}s sollten sprlichst verwendet werden, denn JUMP-Nummern sind immer global, so dass hier Konflikte mit gleichen Nummern in }anderen Libraries oder im Hauptprogramm auftreten knnen.@A @A Sie sollten die Standardlibraries nicht ndern, oder wenn d}och, dann sollten Sie einen anderen Namen verwenden.@A Bei der Benutzung der Libraries sollten Sie bedenken, dass immer die} gesamte Library an das Programm angehngt wird. Dadurch wird das Programm natrlich lnger. Eventuell ist es deshalb manch}mal sinnvoll einzelne Teile einer Library direkt in das Programm zu bernehmen. Dabei mssen Sie aber beachten dass einige }Routinen andere Libraryroutinen bentigen.@A @A @A H.S. @A u bernehmen. Dabei mssen Sie aber beachten dass einige C@A @A @A @GLIFE-Die Generationssimulation@K@A @A Sie fragen sich vielleicht, wozu man grosse 2-dimensionale Arrays in QU}ICK gebrauchen kann, denn fr aufwendige Berechnungen ist QUICK ja nicht unbedingt gedacht. Nun, Felder kann man auch fr g}anz andere Dinge benutzen.@A @A @A @GLife@K, das ist das grosse Spiel des Lebens, wo man sehen kann wie Zellen sich verme}hren, oder sterben, je nach dem...@A Der Grundgedanke von Life ist wiedermal ganz einfach. In einem 40*20 Elemente grossen }Feld ist zunchst alles leer. Dann setzt man dorthin einige Zellen. Ist man mit der Anordnung der Zellen zufrieden, so start}et man die Simulation. Die Regeln des Lebens sind hier ganz einfach.@A Man sieht sich immer die 8 nchsten Nachbarn eines E}lementes an. Hat das Element 3 Nachbarn, so entsteht an dieser Stelle eine neue Zelle. Gibt es nur 2 Nachbarzellen, so blei}bt der Zustand des Elementes unverndert. Sind jedoch weniger als 2 oder mehr als 3 Zellnachbarn vorhanden, so wird das Ele}ment in jedem Fall geleert, d.h falls eine Zelle an dieser Stelle ist, verschwindet sie.@A Beispiele: +Zelle -leer@A @ }A aus:@A +-- +-- +++ ++- +--@A +++ -+- +++ +-- -+-@A --- --- -+- --- --+@A @A wird:@A +-- +-!}- +++ ++- +--@A +++ --- +-+ ++- -+-@A --- --- -+- --- --+@A @A Das Mittlere Element ist das, worum "}es sich alles dreht. Man geht also das ganze Feld durch, und berprft jedes Element auf Vernderung und merkt sich das Erg#}ebnis in einem 2. Feld. Hat man alle Elemente berprft, kopiert man dieses 2. Feld in das eigentliche (und sichtbare) Feld.$} So ergibt sich nach jedem Durchgang ein neues Bild.@A @A Oft fhrt es mit der Zeit ins Chaos oder in den Tod aller Zellen%}. Es gibt aber auch andere Mglichkeiten. Es kann Stagnation geben, d.h. es ndert sich gar nichts mehr, es kann Oszillatio&}n geben, d.h. Zustnde wiederholen sich nach einigen Zyklen, oder Bewegung, d.h. Zustnde wiederholen sich an anderen Stell'}en des Feldes. Das klingt jetzt vielleicht etwas theoretisch, obwohl es spter sehr schn anzuschauen ist.@A Man kann natr(}lich auch knobeln und versuchen selbst solche Figuren heraus zu finden. Hier 2 Beispiele:@A Blinker:@A @A vorher:+++@A @)}A nacher:@A +@A +@A +@A @A und so weiter.@A @A Und der Gleiter:@A @A -+-@A -++@A +-+@A*} @A Er bewegt sich durchs Feld.@A @A @A @GDas Programm@K@A @A Wir haben Life fr Sie geschrieben und ausfhrlich komme+}ntiert, so dass es kein Problem sein sollte, den Quelltext (LIFE.QIK) zu verstehen.@A Deshalb gleich zur Bedienung des Prog,}ramms@A @A Nach dem Start sind Sie im Edit-Modus, d.h. Sie knnen das Feld verndern. Mit S (Set) setzen Sie einen Punkt a-}n die Position des Cursors, mit D (Delete) lschen Sie den Punkt. C (Clear) lscht das gesamte Feld.@A Die Pfeiltasten (ohn.}e Control) bewegen den Cursor.@A Mit R (Run) startet die Simulation. Pro Zyklus vergehen ca. 1,5 Sekunden. B (Break) beende/}t die Simulation, ohne das Feld zu verndern, so dass Sie mit R weitermachen knnen.@A P (Put) speichert das gesamte Feld a0}b und G (GET) ldt ein Feld dazu, d.h. es werden nur gesetzte Punkte geladen, leere ndern Ihr altes Feld nicht. Auf diese 1}Art knnen Sie also mehrere Schirme zusammen laden.@A @A @A @GDie Life-Demos@K@A @A Damit Sie gleich einige faszinierend2}e Dinge erleben knnen, haben wir einige Demos vorbereitet, die Sie mit G laden knnen:@A GLIDER.LIF der erwhnte Gleiter3}@A SHIP1.LIF ein sich bewegendes Schiff@A SHIP2.LIF ein grsseres Schiff@A SHIP3.LIF 3 Schiffe, die nur zusammen 4}existieren@A OSZ1.LIF ein Blinker@A OSZ2.LIF noch ein Blinker@A PENTA.LIF ein 15 Zyklen langer Blinker!@A WHEE5}L.LIF ein Oszillator@A WASHER.LIF der rumt auf@A TUMBLER.LIF der springende Akrobat@A GENERAT.LIF der Gleiter-Mach6}er@A TRAIN.LIF hinterlsst eine Rauchfahne@A MAKER.LIF der Spitze@A FEEDER.LIF der macht auch Gleiter@A TIMEFEED.7}LIF der macht noch mehr Gleiter und frisst sie wieder auf!@A @A So, das ist ja schon eine ganze Auswahl. Vielleicht finden 8}Sie selbst ja auch noch andere lustige Gebilde...@A @A brigens ist LIFE zwar so programmiert, dass der Quelltext mglichs9}t leicht zu verstehen ist, aber darunter leidet die Geschwindigkeit der Simulation. Wrde man auf das explizite Benutzen vo:}n Spalten-und Zeilenindex verzichten, knnte man es garantiert um mindestens 50% beschleunigen!@A @A Falls Sie LIFE.QIK se;}lbst compilieren, fllt Ihnen vielleicht auf, dass es langsamer luft als das fertige auf der Disk. Das liegt daran, dass wi<}r inzwischen den @IQUICK-Compiler optimiert@N haben. Er erzeugt nun um 20% schnellere und um 25% krzere Programme! Sie seh=}en das auch daran, dass das Anzeigen der Texte auf dieser QUICKmagazin - Disk schneller geschieht.@A Es wird allerdings noc>}h ein wenig Zeit vergehen bis wir den neuen Compiler verffentlichen, weil wir 1. immer noch darauf warten dass Fehler des a?}lten Compilers bekannt werden; und 2. weil wir weitere Befehle einbauen wollen.@A Schon jetzt steht fest, dass der neuen Co@}mpiler selbststartende Programme erzeugen kann und das RUNTIME.OBJ File von beliebigen Laufwerken lesen kann. Auch aus der A}RAM-Disk! @A @A H.S. @A erzeugen kann und das RUNTIME.OBJ File von beliebigen Laufwerken lesen kann. Auch aus der @A @A @GSelbststartende QUICK-Programme@K@A @A Wie in der letzten Ausgabe schon angemerkt, knnen fertig compilierte QUIC}CK-Programme als *.OBJ-Files abgespeichert werden. Diese Programme knnen dann im DUP geladen werden und bei der Adresse $50D}00 gestartet werden.@A Wenn sich das Programm jedoch beim Laden im DUP gleich automatisch starten soll, so mu die StartaE}dresse an das Programm angehngt werden. Das QUICK-Programm AUTOST.QIK tut das fr Sie. Sie mssen nur den Namen des zu ndF}ernden OBJ-Files angeben, und schon wird die Adresse angehngt.@A Wenn Sie das genderte File dann in AUTORUN.SYS umbenennenG}, wird es sogar beim Booten automatisch geladen und gestartet (OPTION-Taste dabei drcken). Dabei mu sich das DOS auf der H}Disk befinden.@A (Die Programme auf dieser Disk sind alle schon selbststartend.)@A @A H.S. @A mu sich das DOS auf der d@A @A @GGrosse Arrays@K@A @A Wie Sie wissen gibt es in QUICK nur Arrays mit hchstens 256 Elementen (BYTE) und 128 ElemeJ}nten (WORD). Fr viele Anwendungen reicht das durchaus aus, wenn Sie aber grssere Felder bentigen, so mssten Sie sich dieK} ntigen Routinen selbst schreiben. Wir wollen Ihnen die Arbeit abnehmen, und knnen Ihnen damit zeigen, wie einfach es istL}, solche Erweiterungen in QUICK zu verwenden.@A @A @A @GEindimensionale Arrays@K@A @A Beginnen wir mit dem einfachsten M}Fall: Ein 1- dimensionales Feld, aufgebaut aus lauter BYTEs. Zunchst mssen wir uns berlegen, welchen Speicherbereich frN} dieses Feld "reservieren" wollen, denn der Compiler kmmert sich nun nicht darum. Der Bereich ab $A000 liegt hier gnstig hO}inter dem QUICK- Programm, und etwas unterhalb des Bildschirms. Wir weisen deshalb der WORD-Variable FELD den Wert $A800 (4P}0960) zu, und legen damit die Anfangsadresse des Feldes fest.@A Nun bentigen wir zwei Routinen, die es uns erlauben, FeldiQ}nhalte festzulegen und Feldinhalte zu lesen:@A @A .SETFELD(I,B)@A Dieses Unterprogramm soll das Ite Byte des Feldes auf dR}en Wert B setzen. Dazu mssen wir also im Unterprogramm 2 IN-Variablen einfhren: I als WORD Variable, denn wir mchten ja S}mehr als 256 Elemente benutzen, und B als BYTE. Nun mssen wir nur zur Anfangsadresse FELD den Wert von I addieren, uns schoT}n haben wir die Speicherzelle, die das i-te Feldelement darstellt. Mit hilfe eine POKE-Befehls knnen wir nun B in die entsU}perchende Stelle schreiben.@A @A .GETFELD(I,B)@A Diese Prozedur soll nun den Wert des I-ten Elementes in B bertragen. WirV} bentigen also ein IN-WORD und ein OUT-Byte. Die Adresse des Elementes wird wie oben ermittelt. Dann wird mit hilfe eines W}PEEK-Befehls, der Wert des Elements in die OUT-Varaiable bertragen.@A @A So, und schon sind wir fertig. Wie das ganze alsX} Programm aussieht, sehen Sie im Quelltext BYTEF.QIK.@A @A Nun kommen wir zum nchst schwierigen Fall, dem 1-dimensionalenY} WORD- Feld. Hier mssen wir nur bedenken, dass jedes Feld aus 2 Bytes aufgebaut ist, und dass alle bergabevariablen WORDsZ} sein mssen. Um die Adresse des gewnschten Elementes zu berechnen, mssen wir nun den Index I mit 2 multiplizieren. Das g[}eht mit dem Befehl MULT(I,2,I) oder schneller mit ASLW(I), denn ein einmaliges nach-links-schieben bedeutet ja mit-2-multipl\}izieren.@A Das zugehrige Programm ist WORDF.QIK.@A @A@A @A @G2-dimensionale Arrays@K@A @A Soetwas gibt es in QUICK eig]}entlich gar nicht. Aber auch hier ist es kein Problem, entsprechende Routinen zu entwickeln. Wir whlen uns wieder eine Anf^}angsadresse fr FELD, ausserdem bentigen wir nun aber auch Variablen, die die Zeilen- und Spaltenzahl des Feldes festlegen _}(HOCH,BREIT).@A Nun mssen wir also immer 2 Indizes bergeben: .SETFELD(I,J,B), denn wir brauchen ja 2 Koordinaten, um die `}Adresse des Feldes zu ermitteln. Dazu multiplizieren wir den 2.Index (Zeilenindex) zunchst mit der Breite des Feldes und za}hlen erst dann den ersten Index (Spalte) dazu. Bei .GETFELD geht's analog.@A Wie das aussieht, sehen Sie bei DIMF.QIK.@A b}@A Das ganze wird nun etwas langsamer, weil wieder ein aufwendiger MULT-Befehl notwendig ist. Unter Umstnden gibt es aber c}eine Mglichkeit den MULT durch ASLW zu ersetzen. Besonders einfach ist das bei Breiten wie 2,4,8,16,32,.... Dabei braucht d}man nur 1,2,3,4,5,... mal ASLW zu bentzen. Schwieriger wird es, wenn die Breite z.B. 40 betrgt (Bildschirmbreite!). Dann me}acht man es so:@A @A ASLW(J)@A ASLW(J)@A ASLW(J) man hat also mal 8 genommen@A ADD(I,J,I)@A ASLW(J)@A ASLW(J) hf}ier steht J*32@A ADD(I,J,I) hier steht nun I+J*8+J*32@A @A Diesen Trick, der immerhin mehr als doppelt so schnell wie MULTg} ist, haben wir bei LIFE.QIK angewendet. Nheres siehe dort.@A @A @A H.S. @A rhin mehr als doppelt so schnell wie MULTT@A @A @GNeuer PLOT - Befehl in Quick@K @A @A Viele von Ihnen haben sicher schon gemerkt, dass die Grafikbefehle in Quicki} nicht besonders schnell sind. Der Grund dafr ist ganz einfach: Quick verwendet die Grafikroutinen des Betriebssystems. Dij}e haben den Vorteil, dass sie in allen Grafikstufen funktionieren, aber leiber nicht besonders flink sind.@A @A Nun kann k}man sich einen neuen PLOT in Quick schreiben. Der wre aber wahrscheinlich nicht unbedingt schneller. Also greift man notgel}drungen zu einem Assembler und schreibt ein entsprechendes Maschinenprogramm. Dies muss man dann in einem Quickprogramm nacm}hladen und anstatt des PLOT - Befehls einen CALL(...) Aufruf verwenden.@A Abgesehen davon, dass das nicht sehr elegant ist,n} wird man zimlich viel Arbeit mit schon bestehenden Programmen haben, denn es muss jeder PLOT durch CALL ersetzt werden undo} "Suchen & Ersetzen" kann der Quick - Editor leider nicht. Aber hier kann man zu einem Trick greifen:@A @A @A @GDie nderp}ung des Runtime@K @A @A Wie in der Anleitung zu Quick beschrieben, sind umfangreiche Befehle im Runtimeteil zu finden, unq}d werden vom Programm ber einen JSR xxxx aufgerufen. Nun liegt der Gedanke nahe, den Original PLOT durch unseren eigenen ir}m Runtime zu ersetzen.@A Dazu muss man aber wissen wo im Runtime der PLOT steht. Doch hier wird einem viel Arbeit erspart, s}denn der Runtimeteil ab $4100 beginnt mit einer Sprungtabelle, d.h. mit lauter JMP xxxx Befehlen zu den einzelnen Routinen. t} So finden wir ab der Speicherzelle $4112 folgendes:@A @A .@A .@A .@A $4112 JMP PLOT@A $4115 JMP DRAWu}@A .@A .@A .@A @A Man braucht also nur noch am Anfang eines Programms die neue PLOT - Routine zu ladev}n, und den obigen Vektor auf die neue Routine zu "verbiegen". Ab diesem Zeitpunkt wird bei jedem PLOT - Befehl die neue Routw}ine verwendet, ohne dass man auch nur einen Befehl ndern musste. D.h. auch alte Programme kommen in den Genuss der schnellx}eren Grafik (vorausgesetzt es verwendet den PLOT - Befehl!).@A Ein Problem bleibt noch: Welche Parameter liefert das Quickpy}rogramm an den PLOT? Hier ist die Antwort:@A @A x - Koordinate $B004/$B005@A y - Koordinate $B006@A Zeichenfarbe $8z}2@A Grafikstufe $57@A @A @A Als Beispiel befindet sich auf dieser Diskette eine Routine fr einen schnellen PLOT @If{}r Grafikstufe 8@N. Die Maschinenroutine wurde mit dem Bibo - Assembler geschrieben, und auch der Quelltext "PLOT8.ASM" bef|}indet sich auf der Diskette.@A Fr "Nur - Quick - Anwender" gengt es eigentlich sich das Quickprogramm "NEWPLOT.QIK" anzus}}ehen, denn hier kann man sehen, wie die Routine geladen und initalisiert wird.@A User, die der Maschinensprache mchtig sin~}d, sollten sich auch einmal den Quellcode ansehen. Er soll auch eine Anregung fr komplexere neue Befehle sein.@A Die gesa}mte Sprungtabelle mit allen Parameterangaben werden wir im nchsten QUICKmagazin verffentlichen. Damit ist dann Tr und Tor} geffnet fr alle Assemblerprogrammierer.@A @A @A A.B. @A QUICKmagazin verffentlichen. Damit ist dann Tr und TorDER .LIOFF.OR$4E00 X=$B004 (Y=$B006 2ADR=$90<*VektorverbiegenF*VorheralteAdressemerkenPLDA}$4113 ZSTAOLDdLDA$4114nSTAOLD+1xLDA#PLOT8STA$4113LDA/PLOT8STA$4114RTS*TestobG}R.8angeschaltetPLOT8LDA87 CMP#8 BEQGR8JMP(OLD)*NeuerPlotfuerGR.8 GR8LDAY STAADR L}DA#0STAADR+1 ASLADRROLADR+1 "ASLADR,ROLADR+1 6ASLADR@ROLADR+1 JLDAADRTSTAADR+2}^LDAADR+1hSTAADR+3 rASLADR|ROLADR+1 ASLADRROLADR+1 LDAADRCLCADCADR+2 STAADR}LDAADR+1ADCADR+3STAADR+1 LDAX STAH LDAX+1 STAH+1 LSRH+1 RORH LSRH+1 &R}ORH 0LSRH+1 :RORH DLDYH NLDAADRXCLC bADC88 lSTAADRvLDAADR+1 ADC89STAADR+1 LD}AX AND#7TAX LDA$82BEQLOESCHLDA(ADR),YORATAB,XSTA(ADR),YRTSLOESCHLDATAB,X }EOR#255 STAH LDA(ADR),Y ANDH STA(ADR),Y*RTS4TAB.HX8040201008040201>OLD.HX0000HH.HX}0000R#255 STAH LDA(ADR),Y ANDH STA(ADR),Y*RTS4TAB.HX8040201008040201>OLD.HX0000HH.HXQuick-SourcetextD:GRAPH.LIB ----------------Length: $0E85Free : $68E6---------------- *Standart Graphics} Library*(c) RAINDORF SOFT 5/89** GRAPHICS ***schaltet Grafik(GR) einPROC GRAPHICSINBYTE[GR]LOCALBYTE[FKT,BE}TR]BEGIN ANDB(GR,15,FKT) IF GR>47 BETR=44 ELSE IF GR>31 BETR=60 ELSE IF GR>15} BETR=12 ELSE BETR=28 ENDIF ENDIF ENDIF CLOSE(6) OPEN(6,BETR,FKT,"S:"})ENDPROC** FRAME ***zeichnet RechteckPROC FRAMEINWORD[X1,Y1,X2,Y2]BEGIN PLOT(X1,Y1) DRAW(X2,Y1) DRAW(X2},Y2) DRAW(X1,Y2) DRAW(X1,Y1)ENDPROC** BOX ***zeichnet ausgefuelltes RechteckPROC BOXINWORD[X1,Y1,X2,Y2]LOC}ALWORD[H]BEGIN IF Y1>Y2 H=Y1 Y1=Y2 Y2=H ENDIF REPEAT PLOT(X1,Y1) DRAW(X2,Y1) } ADD(Y1,1,Y1) UNTIL Y1>Y2ENDPROC** CIRCLE ***zeichnet KreisPROC CIRCLEINWORD[X0,Y0,R]LOCALBYTE[FLAG]BEG}IN FLAG=0 .CIRC(X0,Y0,R,FLAG)ENDPROC** DISC ***zeichet ausgefuelletn KreisPROC DISCINWORD[X0,Y0,R]LOCALBY}TE[FLAG]BEGIN FLAG=1 .CIRC(X0,Y0,R,FLAG)ENDPROC** **PROC CIRCINWORD[X0,Y0,R]BYTE[FLAG]LOCALBYTE[}GM,HALF]WORD[X,Y,X1,Y1,X2,Y2,X3,Y3H,MX,MY]BEGIN SIGN PEEK(87,GM) AND(GM,15,GM) MX=79 MY=47 HALF=0 } IF GM>13 MX=159 MY=191 HALF=1 ELSE IF GM=8 MX=319 MY=191 ELSE IF GM<8 } MX=159 MY=95 ELSE IF GM>8 MX=79 MY=191 HALF=2 ENDIF } ENDIF ENDIF ENDIF X=0 Y=R H=Y LSRW(H) REPEAT IF H<0 ADD(H,R,H) SUB(Y,1,Y}) ENDIF X3=X Y3=Y IF HALF>0 ASRW(X3) ASRW(Y3) IF HALF=2 ASRW(X3) } ASRW(Y3) ENDIF ENDIF ADD(X0,X3,X1) ADD(Y0,Y,Y1) SUB(X0,X3,X2) SUB(Y0,Y,Y2) } IF X1>MX X1=MX ENDIF IF X2<0 X2=0 ENDIF IF Y1>MY Y1=MY ENDIF IF} Y2<0 Y2=0 ENDIF PLOT(X1,Y1) IF FLAG=1 DRAW(X2,Y1) ELSE PLOT(X2,Y1) E}NDIF PLOT(X1,Y2) IF FLAG=1 DRAW(X2,Y2) ELSE PLOT(X2,Y2) ENDIF ADD(X0,Y3,X1) } ADD(Y0,X,Y1) SUB(X0,Y3,X2) IF X1>MX X1=MX ENDIF IF X2<0 X2=0 ENDIF I}F Y1>MY Y1=MY ENDIF PLOT(X1,Y1) IF FLAG=1 DRAW(X2,Y1) ELSE PLOT(X2,Y1) } ENDIF SUB(Y0,X,Y2) IF Y2<0 Y2=0 ENDIF PLOT(X1,Y2) IF FLAG=1 DRAW(X2,Y2) } ELSE PLOT(X2,Y2) ENDIF SUB(H,1,H) SUB(H,X,H) ADD(X,1,X) UNTIL X>YENDPROC** FILL ***}Fuellt BildschirmbereichPROC FILLINWORD[X]BYTE[Y]WORD[XMIN]BYTE[YMIN]WORD[XMAX]BYTE[YMAX]LOCALW}ORD[MX]BYTE[MY,W,P,FL,FR]ARRAY[XP(127)YP(127)]BEGINUNSIGNP=0W=0-380FL=0FR=0WHILE X>XMIN SUB(X,1,X) P}OS(X,Y) LOCATE(W) IF W<>0 ADD(X,1,X) JUMP(379) ENDIFWEND-379MX=XMY=YREPEAT IF Y>YMIN Y- POS(X},Y) LOCATE(W) IF W=0 IF FL=0 XP(P)=X YP(P)=Y P+ P+ FL=1 ENDIF ELSE } FL=0 ENDIF Y+ ENDIF IF Y0SUB(X,1,X)PLOT(MX,MY)DRAW(X,Y)IF P<>0 REPEAT P- P- X=XP(P) Y=YP(P) POS}(X,Y) LOCATE(W) UNTIL W=0 JUMP(380)ENDIFENDPROCF P<>0 REPEAT P- P- X=XP(P) Y=YP(P) POS@Quick-SourcetextD:MATH.LIB ----------------Length: $090BFree : $6E60----------------*Standart Mathematic} Library*(c) RAINDORF SOFT 5/89 ** IFP ***Wandelt Word in FloatPROC IFPINWORD[INT=212]OUTARRAY[FERG(6)=212}]BEGIN CALL(0,0,0,55722)ENDPROC** FPI ***Wandelt Float in WordPROC FPIINARRAY[FR0(6)=212]OUTWORD[BYTE=21}2]BEGIN CALL(0,0,0,55762)ENDPROC** AFP ***Wandelt ASCII in FloatPROC AFPINARRAY[BUFF(127)=1408]OUTARRAY[}FR0(6)=212]LOCALWORD[INBUFF=243]BYTE[CIX=242]BEGIN INBUFF=1408 CIX=0 CALL(0,0,0,55296)ENDPROC** DFP }***Wandelt Float-Daten in FloatPROC DFPINBYTE[A,B,C,D,E,F]OUTARRAY[FP(6)]BEGIN FP(0)=A FP(1)=B FP(2)=C} FP(3)=D FP(4)=E FP(5)=F FP(6)=0ENDPROC** FASC ***Wandelt Float in ASCIIPROC FASCINARRAY[FR0(6)=212]}OUTARRAY[LBUFF(127)=1408]LOCALBYTE[Q,I]BEGIN SIGN CALL (0,0,0,55526) I=0 REPEAT Q=LBUFF(I) I+ } UNTIL Q<0 I- SUB(Q,128,Q) LBUFF(I)=Q I+ LBUFF(I)=0ENDPROC** FADD ***Addiert 2 FloatPROC FADDINARRAY}[FR0(6)=212,FR1(6)=224]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,55910)ENDPROC** FSUB ***Subtrahiert 2 FloatPRO}C FSUBINARRAY[FR0(6)=212,FR1(6)=224]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,55904)ENDPROC** FMUL ***Multipli}ziert 2 FloatPROC FMULINARRAY[FR0(6)=212,FR1(6)=224]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,56027)ENDPROC**} FDIV ***Dividiert 2 FloatPROC FDIVINARRAY[FR0(6)=212,FR1(6)=224]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,56104})ENDPROC** FCMP ***Stellt fest ob Float<0, F=0 oder F>0PROC FCMPINARRAY[F(6)]OUTBYTE[E]LOCALBYTE[I,H]B}EGIN E=F(0) AND(E,128,E) IF E<>0 E=0 JUMP(382) ENDIF I=0 E=1 REPEAT H=F(I) IF H<}>0 E=2 ENDIF I+ UNTIL I=6-382ENDPROC** FPRT ***Printet FloatPROC FPRTINARRAY[FR(6)]LOCA}LARRAY[Z(17),H(2)]BYTE[Q,I]BEGIN .FASC(FR,Z) Q=FR(0) AND(Q,128,Q) IF Q=128 ?("-"); ENDIF Q=Z(}0) IF Q=45 I=1 ELSE I=0 ENDIF IF Q=46 ?("0"); ENDIF Q=FR(0) IF Q<>0 REPEAT }Q=Z(I) I+ UNTIL Q<>48 I- ENDIF REPEAT Q=Z(I) IF Q<>0 H(0)=Q H(1)=0 ?(H); } I+ ENDIF UNTIL Q=0ENDPROC I- ENDIF REPEAT Q=Z(I) IF Q<>0 H(0)=Q H(1)=0 ?(H); 'Quick-SourcetextD:NUMERIC.LIB ----------------Length: $0ED1Free : $689A----------------*Standart Numeric Li}brary*(c) RAINDORF SOFT 5/89 *benoetigt MATH.LIB** EXP ***Berechnet EXP(Float)PROC EXPINARRAY[FR0(6)=212]OUT}ARRAY[FERG(6)=212]BEGIN CALL(0,0,0,56768)ENDPROC** EXP10 ***Berechnet 10^FloatPROC EXP10INARRAY[FR0(6)=212}]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,56780)ENDPROC** LOG ***Berechnet LN(Float)PROC LOGINARRAY[FR0(6)=2}12]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,57037)ENDPROC** LOG10 ***Berechnet LOG(Float)PROC LOG10INARRAY[}FR0(6)=212]OUTARRAY[FERG(6)=212]BEGIN CALL(0,0,0,57041)ENDPROC** SQR ***Berechnet WURZEL(Float)PROC SQRINA}RRAY[A(6)]OUTARRAY[XN1(6)]LOCALBYTE[E]ARRAY[XN(6),FERG(6),F5(6)F0(6),F1(6)]BEGIN .DFP(63,80,0,0,0,0,F5)} XN=A E=XN(0) AND(E,127,E) A(0)=E IF E>=64 SUB(E,64,E) LSRB(E) ADD(E,64,E) ELSE IF} E<63 SUB(64,E,E) LSRB(E) SUB(64,E,E) ENDIF ENDIF XN(0)=E REPEAT F0=A }F1=XN .FDIV(F0,F1,FERG) .FADD(FERG,F1,FERG) .FMUL(FERG,F5,XN1) .FSUB(XN,XN1,FERG) .FCMP(FERG,E)} XN=XN1 UNTIL E=1ENDPROC** SIN ***Berechnet SIN(Float) im BogenmassPROC SININARRAY[X(6)]OUTARRAY[Y(6})]LOCALBYTE[FLAG,FLAG1]ARRAY[PI(6),PID2(6),PIM2(6),A2(6),A4(6)X^2(6),ONE(6)]BEGIN .DFP(64,1,0,0,0,0,ONE) .D}FP(-65,22,96,80,0,0,A2) .DFP(62,118,16,0,0,0,A4) .DFP(64,3,20,21,-110,101,PI) .DFP(64,1,87,7,-106,50,PID2) .DFP(6}4,6,40,49,-123,48,PIM2) FLAG=0 .FCMP(X,FLAG1) IF FLAG1=0 FLAG=128 FLAG1=X(0) AND(FLAG1,127,FLAG1)} X(0)=FLAG1 ENDIF .FSUB(X,PIM2,X^2) .FCMP(X^2,FLAG1) WHILE FLAG1<>0 X=X^2 .FSUB(X,PIM2,X^2) } .FCMP(X^2,FLAG1) WEND .FSUB(X,PI,X^2) .FCMP(X^2,FLAG1) IF FLAG1=2 EOR(FLAG,-128,FLAG) .FSUB(X,PI,X}) ENDIF .FSUB(X,PID2,X^2) .FCMP(X^2,FLAG1) IF FLAG1=2 .FSUB(PID2,X^2,X) ENDIF .FMUL(X,X,X^2) }.FMUL(X^2,A4,Y) .FADD(Y,A2,Y) .FMUL(Y,X^2,Y) .FADD(Y,ONE,Y) .FMUL(Y,X,Y) FLAG1=Y(0) EOR(FLAG1,FLAG,FLAG1)} Y(0)=FLAG1ENDPROC** COS ***Berechnet COS(Float)PROC COSINARRAY[X(6)]OUTARRAY[Y(6)]LOCALARRAY[PID2(6)}]BEGIN SIGN .DFP(64,1,87,7,-106,50,PID2) .FADD(X,PID2,X) .SIN(X,Y)ENDPROC** ATN ***Berechnet Arcustangens v}on FloatPROC ATNINARRAY[X(6)]OUTARRAY[S(6)]LOCALBYTE[E,F]ARRAY[PI(6),PID2(6),PIM2(6),TWO(6)ONE(6),X1(6)}YY(6),YF(6),T(6),I(6)EPS(6),STR(10)]BEGIN .DFP(64,1,0,0,0,0,ONE) .DFP(64,2,0,0,0,0,TWO) .DFP(64,1,87,7,-106,50,PI}D2) .DFP(62,80,0,0,0,0,EPS) X1=X E=X1(0) AND(E,127,E) X1(0)=E .FSUB(X1,ONE,X1) .FCMP(X1,F) IF F=0 } I=ONE S=X YF=X .FMUL(X,X,YY)-383 REPEAT .FADD(I,TWO,I) .FMUL(YF,YY,YF) } E=YF(0) EOR(E,128,E) YF(0)=E .FDIV(YF,I,T) .FADD(S,T,S) X1=T E=X1(0) } AND(E,127,E) X1(0)=E .FSUB(EPS,X1,X1) .FCMP(X1,F) UNTIL F=2 ELSE .}FADD(X,ONE,X1) .FCMP(X1,F) IF F<2 I=ONE .FDIV(ONE,X,YF) E=YF(0) EOR(E,128,E)} YF(0)=E X1=PID2 E=X1(0) EOR(E,128,E) X1(0)=E .FADD(X1,YF,S) .F}MUL(YF,YF,YY) JUMP(383) ELSE I=ONE .FDIV(ONE,X,YF) E=YF(0) EOR(E,128,E) } YF(0)=E .FADD(PID2,YF,S) .FMUL(YF,YF,YY) JUMP(383) ENDIF ENDIFENDPROC** ABS **}*Berechnet ABS(Float)PROC ABSINARRAY[X(6)]OUTARRAY[Y(6)]LOCALBYTE[Q]BEGIN Q=X(0) AND(Q,127,Q) X(0)=Q} Y=XENDPROCloat)PROC ABSINARRAY[X(6)]OUTARRAY[Y(6)]LOCALBYTE[Q]BEGIN Q=X(0) AND(Q,127,Q) X(0)=Q in Integervariable K PLOT(I,K) ;und dann Plotten .FADD(F7,F16,F7) ;F7 plus F16 ADD(I,1,I) ;I u}m 1 erhoehen UNTIL I>318 ;AbbruchbedingungENDMAINn Plotten .FADD(F7,F16,F7) ;F7 plus F16 ADD(I,1,I) ;I u9