QUICK ECKE Teil 19 von Harald Schönfeld Diesemal geht es weiter mit den Tips zur Umsetzung von BASIC-Programmen in QUICK-Programme. Zunächst ein paar Grafikbefehle: POSITION X,Y Dieser Befehl kann direkt in POS(X,Y) übersetzt werden. Es ist nur darauf zu achten ob X BYTE oder WORD sein muß. LOCATE(X,Y,C) Das wird in QUICK in 2 Befehle aufgespalten. Zunächst POS(X,Y) dann LOCATE(C). C wird hier wohl ein BYTE sein. COLOR(C) Ganz einfach COLOR(C). SETCOLOR(N,F,H) Ganz einfach SETCOL(N,F,H) (Nur nicht unnötig viel tippen!...) QUICK bietet jedoch weitere Befehle, die ganze BASIC-Programmteile ersetzen können. Z.B.: 10 FOR I=10 TO 20 20 FOR J=10 TO 20 30 LOCATE I,J,C 40 COLOR C 50 PLOT I+30,J+20 60 NEXT J:NEXT I Diese Schleife kopiert den Bildschirminhalt des Rechtecks (10,10)(20,20) an die Position (40,30)(50,40). Solche Grafikbereiche können in QUICK mit dem CUT und PASTE Befehl einfach kopiert werden. Grundsätzlich sieht das so aus: CUT(10,10,20,20,BUFFER) PASTE(0,40,30,BUFFER) Nebenbei ist das wohl um einige 1000% schneller. Ein weiterer spezieller Grafikbefehl ist PLAYER(Z,I,L,Q), mit dem man schnell die Playerdaten in den richtigen Bereich kopieren kann. Benutzt ein BASIC-Programm die PLAYER-MISSILE-Grafik, so kann man eventuell diverse Programmteile durch diesen einen Befehl ersetzen. Kopiert das BASIC-Program z.B. die Playerdaten aus Datazeilen in den Playerbereich...: 10 DATA 1,25,36,47 20 FOR I=1 TO 4 30 READ B:POKE PL,B 40 NEXT I ... so kann man das in QUICK mit dem PLAYER-Befehl regeln: DATA(FREEMEM) *schreibt Daten in freien +( *Speicherbereich FREEMEM 1,25,36,47 )+ ... PLAYER(PLPAGE,PLINDEX,4,FREEMEM) Dabei ist PLPAGE=INT(PL/256)*256 und PLINDEX=PL-PLPAGE*256. Daß es viel schneller geht brauch ich wohl nicht mehr zu erwähnen. Oft werden in BASIC auch kleine Maschinensprache-Routinen verwendet um diese Playerkopiererei zu erledigen. Wenn man weiß, was die MC-Routine tut, kann man sie ebenfalls durch den PLAYER oder allgemeiner durch den etwas langsameren FMOVE-Befehl ersetzen. Natürlich kann man auch das Maschinenprogramm weiterhin benutzen, wenn man es an einer passenden Stelle im Speicher unterbringen kann. Nun zum SOUND-Befehl SOUND(K,H,VB,L) Das ist in QUICK ebenfalls als SOUND (K,H,VQ,L) zu übernehmen. Jedoch ist VQ=VB/2. Der Wert im BASIC-Programm ist also halbiert im QUICK-Programm zu verwenden. Die wegfallenden ungeraden BASIC- Werte sind sowieso nicht zu gebrauchen, da sie nur einen Einschaltimpuls liefern und keine echten Klänge. Allerdings ist es damit wohl nicht getan: 10 FOR I=0 TO 255 20 SOUND 0,I,10,15 30 NEXT I Das erzeugt einen langsam tiefer werdenen Ton. In QUICK sieht das wohl so aus: I=0 REPEAT SOUND(0,I,5,15) I++ UNTIL I=255 Hört man sich das an, wird man eine Überraschung erleben. Zwar läuft das selbe wie im BASIC ab, aber viel schneller. Daswegen muß man um das BASIC nachzuahmen eine Wartezeit einbauen. Entweder mit einer einfachen Schleife... J=0 REPEAT J++ UNTIL J=IRGENDWASGROSSES ...oder durch Benutzung eines Timers (was eleganter ist): BYTE +( TIMER=540 )+ ... TIMER=1 REPEAT UNTIL TIMER=0 Der Timer wird in der Schleife automatisch jede 50tel Sekunde vom OS erniedrigt. So wird er automatisch 0 und die Schleife ist zu Ende. Außerdem bietet QUICK den DIGI-Befehl zum Abspielen von Samples an. Dieser Befehl ist kompatibel zu dem im ATARImagazin vorgestellten Soundformat. Sollte also im BASIC-Programm ein Maschinenprogramm eingebaut sein, das Daten dieses Typs vorspielt, können Zauberer dieses Unterprogramm durch den DIGI-Befehl ersetzen. Und nun noch die letzten Befehle um Spielefreaks zufriedenzustellen: STICK(NR) Dieser Befehl wird in QUICK durch Variablen ersetzt, denen die Adresse der OS-Variablen STICK0 oder STICK1 zugewiesen wurde: BYTE +( STICK0=632, STICK1=633 )+ Werden die Variablen nun ausgelesen, liefern sie die selben Werte wie STICK(0) oder STICK(1). Wie man diese Werte schnell in Entscheidungen umsetzt wurde im ATARImagazin 2/91 gezeigt. Während man im BASIC üblicherweise jeden möglichen Wert getrennt oder im Zusammenhang mit langsamen OR Befehlen verarbeitet, geht das in QUICK durch die Bitmanipulationsbefehle wesentlich einfacher und sinnvoller. PADDLE(NR) Auch hier legt man Variablen auf die Adressen von 624 bis 631 und erhält dann aus ihnen die Werte von 0 bis 228. STRIG(NR) Hier legt man die Variable STRIG0 auf 644 und STRIG1 auf 645. Die Resulate sind wie immer 0 für gedrückt und 1 für nicht gedrückt (das seh ich bis heute nicht ein...) Soviel für dieses Mal. Im nächsten Monat wird es dann u.a. um Schleifen aller Art gehen.