@C9BASIC-Tunnel...
---------------
@C7
Fr den kleineren 'Geldbeutel' ein Tunneleffekt in BASIC, ganz einfach per
Colourcycling. Der Assemblerpart ist nur zum Einfrben der Pixel, die durch die
Ellipse-Befehle nicht erreicht wurden. Die Farbe ist in den Variablen R%,G% und
B% vernderbar. Zeichnet man den Trichter pixelweise, d.h. mit einer eigenen
Ellipsenfunktion, kann man durch geschickte Vernderung der Farben entlang der
Ellipse auch einen rotierenden Tunnel erreichen. Dazu sollte man aber aus Zeit-
grnden mindestens einen RiscPC haben. Nheres in den Comments. Der Sourcecode
liegt ebenfalls im Bits Verzeichnis.
                                                         fRISCo / Archiologics
@C3
MODE 12 : OFF
PROCass                     : REM Assemblercode initialisieren
R% = 255                    : REM Anteil Farbe Rot
G% = 255                    : REM Anteil Farbe Grn
B% = 128                    : REM Anteil Farbe Blau
FOR F% = 1 TO 15
COLOUR F%,R%*SINRAD(F%*12),G%*SINRAD(F%*12),B%*SINRAD(F%*12)
NEXT                        : REM Farbverlauf setzen
C = 1
FOR I = 1 TO 450 STEP .25
ELLIPSE 640+I/5,2*I+200,((I^1.8)/45+12),((I^1.8)/45+6)
C+= .125
GCOL C
IF C > 15 THEN C = 1
NEXT                        : REM Ellipsen ziehen
CALL CODE%                  : REM Bild subern
GCOL 0:LINE0,1023,1280,1023 : REM untere Zeile lschen
A% = 1
I% = 12
D% = 1                      : REM Richtung im Tunnel
REPEAT
IF INKEY(-58) THEN D% = 1   : REM Wenn , dann Richtung postiv
IF INKEY(-42) THEN D% =-1   : REM Wenn , dann Richtung negativ
S = SINRADI%                : REM sanfter Farbverlauf
COLOUR A%,R%*S,G%*S,B%*S    : REM nach Uservorgaben Farbe setzen
A%+= D%                     : REM nchste Farbe
IF A% > 15 THEN A% = 1
IF A% < 1  THEN A% =15
I%+= 12                     : REM nchste Farbposition
IF I% > 168 THEN I% = 12
UNTIL 0
DEFPROCass
DIM CODE% 120
FOR I% = 0 TO 2 STEP 2
P% = CODE%
[ OPT I%
.main
ADR    R0,s
MOV    R1,R0
SWI    "OS_ReadVduVariables"    ; Anfangsadresse des Bildschirmspeichers
MOV    R7,#2                    ; 2 Durchlauefe
.mainloop
LDR    R0,s                     ; Anfangsadresse d. BSP lesen
MOV    R1,R0
ADD    R0,R0,#320               ; zweiter Zeiger um eine Zeile versetzt
MOV    R2,#81920
SUB    R2,R2,#320               ; Anzahl der Durchlauefe
.loop
LDRB   R3,[R0],#1               ; 2 Pixel aus der ersten Zeile laden
LDRB   R4,[R1],#1               ; 2 entsprechende Pi. a. d. 2. Zeile
ANDS   R5,R3,#&F                ; linken Pixel extrahieren
ANDEQ  R5,R3,#&F0               ; ist er Null,
ANDEQ  R6,R4,#&F                ; durch Pixel aus der
ORREQ  R5,R5,R6                 ; unteren Zeile ersetzt
STREQB R5,[R0,#-1]              ; und zurueckgespeichert
ANDS   R5,R3,#&F0               ; rechten Pixel extrahieren
ANDEQ  R5,R3,#&F                ; ist er Null,
ANDEQ  R6,R4,#&F0               ; durch Pixel aus der
ORREQ  R5,R5,R6                 ; unteren Zeile ersetzt
STREQB R5,[R0,#-1]              ; und zurueckgespeichert
SUBS   R2,R2,#1                 ; alle Durchlaeufe?
BNE    loop                     ; nicht => nochmal
SUBS   R7,R7,#1                 ; Zweimal geglaettet?
BNE    mainloop                 ; nicht => nochmal
MOV    PC,R14                   ; zurueck
.s     EQUD 149
       EQUD -1
]:NEXT I%
ENDPROC

