//*******************Fractal_2.h**********
int cc0i=0,ss0i=0,cc1i=0,ss1i=0;
int xmn=0, xmx=0,ymn=0,ymx=0;
unsigned int cnt=0;
void Fractal_2();
//**************Fractal_2.c******************
void fractal(int x, int y, char depth);
char orden;
void Fractal_2(){
unsigned int i=0;
gclcd_rect(0, 0, 131, 131, 1, 1, BLACK);
while( usr_btn > 0x0F ); //While( button == 1);
for ( i = 0 ; usr_btn < 0x0F ; i++ ) {
float help = 0.78539816 + i / ( 128 / pi );
cc0i = 16384 * 0.70710678 * cosf( help );
ss0i = 16384 * 0.70710678 * sinf( help );
help = 2.3561945 - i / ( 128 / pi );
cc1i = (16384 * 0.70710678) * cosf( help );
ss1i = (16384 * 0.70710678) * sinf( help );
asm (" BSET CORCON, #4"
;//ACCSAT
asm (" BCLR CORCON, #0"
;//IF
asm (" BCLR CORCON, #12"
;//US
gclcd_rect(xmn, ymn, xmx, ymx, 1, 1, BLACK);
xmn=131; xmx=0; ymn=131; ymx=0;
orden=12;
cnt=0;
fractal( 0, 0, orden);
}
while( usr_btn > 0x0F );//Mientras button = 1.
gclcd_cls();
}
void fractal(int x, int y, char depth ){
int xb,yb;
if (depth == 0) {
int x_act=(x>>9)+55;
int y_act=(y>>9)+66;
gclcd_pixel( x_act, y_act, (cnt<<(16-orden)) | (cnt&(0xFFFF>>orden) ) );
cnt++;
if (x_act < xmn) xmn = x_act;
else if (x_act > xmx) xmx = x_act;
if (y_act < ymn) ymn = y_act;
else if (y_act > ymx) ymx = y_act;
}
else {
//x = ( x * cc0 - y * ss0 ),
asm (" CLR A "
;
asm (" CLR B "
;
WREG4 = x;
WREG5 = cc0i;
asm (" MAC w4*w5, A "
;// x * cc0
asm (" SFTAC A, #-2 "
;
WREG4 = y;
WREG5 = ss0i;
asm (" MAC w4*w5, B "
;// y * ss0
asm (" SFTAC B, #-2 "
;
asm (" SUB A "
;// A - B
asm (" SAC.R A, #1, w1"
;//
xb=WREG1;
//y = ( x * ss0 + y * cc0 )
asm (" CLR A "
;
asm (" CLR B "
;
WREG4 = x;
WREG5 = ss0i;
asm (" MAC w4*w5, A "
;// x * cc0
asm (" SFTAC A, #-2 "
;
WREG4 = y;
WREG5 = cc0i;
asm (" MAC w4*w5, B "
;// y * ss0
asm (" SFTAC B, #-2 "
;
asm (" ADD A "
;// A + B
asm (" SAC.R A, #1, w1"
;
yb=WREG1;
// fractal( ( x * cc0 - y * ss0 ),
// ( x * ss0 + y * cc0 ), depth-1 );
fractal( xb,yb, depth-1 );
//x = ( x * cc1 - y * ss1 )
asm (" CLR A "
;
asm (" CLR B "
;
WREG4 = x;
WREG5 = cc1i;
asm (" MAC w4*w5, A "
;// x * cc0
asm (" SFTAC A, #-2 "
;
WREG4 = y;
WREG5 = ss1i;
asm (" MAC w4*w5, B "
;// y * ss0
asm (" SFTAC B, #-2 "
;
asm (" SUB A "
;// A - B
asm (" SAC.R A, #1, w1"
;//
xb=WREG1;
//y = ( x * ss1 + y * cc1 ),, +1
asm (" CLR A "
;
asm (" CLR B "
;
WREG4 = x;
WREG5 = ss1i;
asm (" MAC w4*w5, A "
;// x * cc0
asm (" SFTAC A, #-2 "
;
WREG4 = y;
WREG5 = cc1i;
asm (" MAC w4*w5, B "
;// y * ss0
asm (" SFTAC B, #-2 "
;
asm (" ADD A "
;// A - B
asm (" SAC.R A, #1, w1"
;//
yb=WREG1;
// fractal( ( x * cc1 - y * ss1 ) + 1,
// ( x * ss1 + y * cc1 ), depth-1 );
fractal( xb + 16384, yb, depth - 1 );
}
}