-/*****************************************************************************
- * mandelbrot sample program for cc65. *
- * *
- * (w)2002 by groepaz/hitmen, TGI support by Stefan Haubenthal *
- *****************************************************************************/
+/*****************************************************************************\
+** mandelbrot sample program for cc65. **
+** **
+** (w) 2002 by groepaz/hitmen, TGI support by Stefan Haubenthal **
+\*****************************************************************************/
#define SCREEN_X (tgi_getxres())
#define SCREEN_Y (tgi_getyres())
#define MAXCOL (tgi_getcolorcount())
#define SCREEN_X (tgi_getxres())
#define SCREEN_Y (tgi_getyres())
#define MAXCOL (tgi_getcolorcount())
#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b))
/* Workaround missing clock stuff */
#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b))
/* Workaround missing clock stuff */
void mandelbrot (signed short x1, signed short y1, signed short x2,
void mandelbrot (signed short x1, signed short y1, signed short x2,
{
register unsigned char count;
register signed short r, r1, i;
register signed short xs, ys, xx, yy;
register signed short x, y;
{
register unsigned char count;
register signed short r, r1, i;
register signed short xs, ys, xx, yy;
register signed short x, y;
xs = ((x2 - x1) / (SCREEN_X));
ys = ((y2 - y1) / (SCREEN_Y));
yy = y1;
for (y = 0; y < (SCREEN_Y); y++) {
xs = ((x2 - x1) / (SCREEN_X));
ys = ((y2 - y1) / (SCREEN_Y));
yy = y1;
for (y = 0; y < (SCREEN_Y); y++) {
- yy += ys;
- xx = x1;
- for (x = 0; x < (SCREEN_X); x++) {
- xx += xs;
- /* do iterations */
- r = 0;
- i = 0;
- for (count = 0; (count < maxiterations) &&
- (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2));
- ++count) {
- r1 = (mulfp (r, r) - mulfp (i, i)) + xx;
- /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */
- i = (((signed long) r * i) >> (fpshift - 1)) + yy;
- r = r1;
- }
- if (count == maxiterations) {
- tgi_setcolor (0);
- } else {
- if (MAXCOL == 2)
- tgi_setcolor (1);
- else
- tgi_setcolor (count % MAXCOL);
- }
- /* set pixel */
- tgi_setpixel (x, y);
- }
+ yy += ys;
+ xx = x1;
+ for (x = 0; x < (SCREEN_X); x++) {
+ xx += xs;
+ /* Do iterations */
+ r = 0;
+ i = 0;
+ for (count = 0; (count < maxiterations) &&
+ (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2));
+ ++count) {
+ r1 = (mulfp (r, r) - mulfp (i, i)) + xx;
+ /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */
+ i = (((signed long) r * i) >> (fpshift - 1)) + yy;
+ r = r1;
+ }
+ if (count == maxiterations) {
+ tgi_setcolor (0);
+ } else {
+ if (MAXCOL == 2) {
+ tgi_setcolor (1);
+ } else {
+ tgi_setcolor (count % MAXCOL);
+ }
+ }
+ /* Set pixel */
+ tgi_setpixel (x, y);
+ }
- cprintf ("Error #%d initializing graphics.\r\n%s\r\n",
- err, tgi_geterrormsg (err));
- exit (EXIT_FAILURE);
+ cprintf ("Error #%d initializing graphics.\r\n%s\r\n",
+ err, tgi_geterrormsg (err));
+ if (doesclrscrafterexit ()) {
+ cgetc ();
+ }
+ exit (EXIT_FAILURE);
mandelbrot (tofp (-2), tofp (-2), tofp (2), tofp (2));
t = clock () - t;
/* Fetch the character from the keyboard buffer and discard it */
mandelbrot (tofp (-2), tofp (-2), tofp (2), tofp (2));
t = clock () - t;
/* Fetch the character from the keyboard buffer and discard it */
- /* Wait for a key, then end */
- cputs ("Press any key when done...\n\r");
- (void) cgetc ();
+ if (doesclrscrafterexit ()) {
+ /* Wait for a key, then end */
+ cputs ("Press any key when done...\n\r");
+ cgetc ();
+ }