/* Color defines */
-#define COLOR_BLACK 0x00
-#define COLOR_RED 0x01
-#define COLOR_GREEN 0x02
-#define COLOR_YELLOW 0x03
-#define COLOR_BLUE 0x04
-#define COLOR_MAGENTA 0x05
-#define COLOR_CYAN 0x06
-#define COLOR_WHITE 0x07
+#define COLOR_BLACK 0x00
+#define COLOR_RED 0x01
+#define COLOR_GREEN 0x02
+#define COLOR_YELLOW 0x03
+#define COLOR_BLUE 0x04
+#define COLOR_MAGENTA 0x05
+#define COLOR_CYAN 0x06
+#define COLOR_WHITE 0x07
/* Define hardware */
#include <_6522.h>
-#define VIA (*(struct __6522*)0x300)
+#define VIA (*(struct __6522*)0x300)
/* Character codes */
-#define CH_ULCORNER '+'
-#define CH_URCORNER '+'
-#define CH_LLCORNER '+'
-#define CH_LRCORNER '+'
-#define CH_TTEE '+'
-#define CH_BTEE '+'
-#define CH_LTEE '+'
-#define CH_RTEE '+'
-#define CH_CROSS '+'
+#define CH_ULCORNER '+'
+#define CH_URCORNER '+'
+#define CH_LLCORNER '+'
+#define CH_LRCORNER '+'
+#define CH_TTEE '+'
+#define CH_BTEE '+'
+#define CH_LTEE '+'
+#define CH_RTEE '+'
+#define CH_CROSS '+'
#define CH_CURS_UP 11
#define CH_CURS_DOWN 10
#define CH_CURS_LEFT 8
#define CH_LIRA 95
#define CH_ESC 27
+
+
+/* No support for dynamically loadable drivers */
+#define DYN_DRV 0
+
+
+
void __fastcall__ atmos_load(const char* name);
/* Load Atmos tape. */
/* End of atmos.h */
#endif
-
-
-
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
#define TGI_COLOR_WHITE COLOR_WHITE
-
+/* No support for dynamically loadable drivers */
+#define DYN_DRV 0
#include <_mikey.h>
#define MIKEY (*(struct __mikey *)0xFD00)
-#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8]
-#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL)
-#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL)
-#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART)
-#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma
+#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8]
+#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL)
+#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL)
+#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART)
+#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma
#include <_suzy.h>
#define SUZY (*(struct __suzy*)0xFC00)
/* End of lynx.h */
#endif
-
-
-
/* Key and character defines */
-#define CH_ENTER '\n'
-#define CH_CURS_UP 0x01
-#define CH_CURS_DOWN 0x02
-#define CH_CURS_LEFT 0x03
-#define CH_CURS_RIGHT 0x04
-#define CH_ESC 8
-#define CH_DEL 20
-
-#define CH_CROSS 0x10
+#define CH_ENTER '\n'
+#define CH_CURS_UP 0x01
+#define CH_CURS_DOWN 0x02
+#define CH_CURS_LEFT 0x03
+#define CH_CURS_RIGHT 0x04
+#define CH_ESC 8
+#define CH_DEL 20
+
+#define CH_CROSS 0x10
#define CH_RTEE 0x17
#define CH_LTEE 0x0f
#define CH_TTEE 0x16
#define CH_LRCORNER 0x08
#define CH_PI 0x05
-
/* Color defines */
-#define COLOR_BLACK 0x00
-#define COLOR_WHITE 0x01
-#define COLOR_RED 0x02
-#define COLOR_CYAN 0x03
-#define COLOR_VIOLET 0x04
-#define COLOR_GREEN 0x05
-#define COLOR_BLUE 0x06
-#define COLOR_YELLOW 0x07
-#define COLOR_ORANGE 0x08
-#define COLOR_BROWN 0x09
-#define COLOR_LIGHTRED 0x0A
-#define COLOR_GRAY1 0x0B
-#define COLOR_GRAY2 0x0C
-#define COLOR_LIGHTGREEN 0x0D
-#define COLOR_LIGHTBLUE 0x0E
-#define COLOR_GRAY3 0x0F
+#define COLOR_BLACK 0x00
+#define COLOR_WHITE 0x01
+#define COLOR_RED 0x02
+#define COLOR_CYAN 0x03
+#define COLOR_VIOLET 0x04
+#define COLOR_GREEN 0x05
+#define COLOR_BLUE 0x06
+#define COLOR_YELLOW 0x07
+#define COLOR_ORANGE 0x08
+#define COLOR_BROWN 0x09
+#define COLOR_LIGHTRED 0x0A
+#define COLOR_GRAY1 0x0B
+#define COLOR_GRAY2 0x0C
+#define COLOR_LIGHTGREEN 0x0D
+#define COLOR_LIGHTBLUE 0x0E
+#define COLOR_GRAY3 0x0F
/* Return codes of get_tv */
#define TV_NTSC 0
#define TV_PAL 1
#define TV_OTHER 2
+/* No support for dynamically loadable drivers */
+#define DYN_DRV 0
+
void waitvblank (void);
/* End of nes.h */
#endif
-
-
-
/* Graphics definitions */
-#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 maxiterations 32
-#define fpshift (10)
-#define tofp(_x) ((_x)<<fpshift)
-#define fromfp(_x) ((_x)>>fpshift)
-#define fpabs(_x) (abs(_x))
+#define maxiterations 32
+#define fpshift (10)
+#define tofp(_x) ((_x)<<fpshift)
+#define fromfp(_x) ((_x)>>fpshift)
+#define fpabs(_x) (abs(_x))
-#define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift)
-#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b))
+#define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift)
+#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b))
/* Workaround missing clock stuff */
#if defined(__APPLE2__) || defined(__APPLE2ENH__)
# define CLK_TCK 1
#endif
+/* Use dynamically loaded driver by default */
+#ifndef DYN_DRV
+# define DYN_DRV 1
+#endif
+
/* Use static local variables for speed */
#pragma static-locals (1);
void mandelbrot (signed short x1, signed short y1, signed short x2,
- signed short y2)
+ signed short y2)
{
register unsigned char count;
register signed short r, r1, i;
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);
+ }
}
}
clrscr ();
+#if DYN_DRV
/* Load the graphics driver */
cprintf ("initializing... mompls\r\n");
tgi_load_driver (tgi_stddrv);
+#else
+ /* Install the graphics driver */
+ tgi_install (tgi_static_stddrv);
+#endif
err = tgi_geterror ();
if (err != TGI_ERR_OK) {
- 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));
+ exit (EXIT_FAILURE);
};
cprintf ("ok.\n\r");
/* Done */
return EXIT_SUCCESS;
-
}
/* Address of data for sprite 0 */
#if defined(__C64__)
-# define SPRITE0_DATA 0x0340
-# define SPRITE0_PTR 0x07F8
+# define SPRITE0_DATA 0x0340
+# define SPRITE0_PTR 0x07F8
#elif defined(__C128__)
-# define SPRITE0_DATA 0x0E00
-# define SPRITE0_PTR 0x07F8
+# define SPRITE0_DATA 0x0E00
+# define SPRITE0_PTR 0x07F8
#endif
/* The mouse sprite (an arrow) */
#endif /* __C64__ or __C128__ */
+/* Dynamically loaded driver by default */
+#ifndef DYN_DRV
+# define DYN_DRV 1
+#endif
+
+
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
+#if DYN_DRV
/* Output a warning about the driver that is needed */
DoWarning ();
/* Load and install the mouse driver */
CheckError ("mouse_load_driver",
mouse_load_driver (&mouse_def_callbacks, mouse_stddrv));
+#else
+ /* Install the mouse driver */
+ CheckError ("mouse_install",
+ mouse_install (&mouse_def_callbacks, mouse_static_stddrv));
+#endif
/* Get the initial mouse bounding box */
mouse_getbox (&full_box);
}
+#if DYN_DRV
/* Uninstall and unload the mouse driver */
CheckError ("mouse_unload", mouse_unload ());
+#else
+ /* Uninstall the mouse driver */
+ CheckError ("mouse_uninstall", mouse_uninstall ());
+#endif
/* Say goodbye */
clrscr ();
+#ifndef DYN_DRV
+# define DYN_DRV 1
+#endif
+
#define COLOR_BACK TGI_COLOR_BLACK
#define COLOR_FORE TGI_COLOR_WHITE
for (I = 10; I < 240; I += 10) {
tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio));
}
- Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+ Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
}
cgetc ();
for (X = 0; X <= MaxX; X += 10) {
tgi_setcolor (Color);
tgi_bar (X, Y, X+9, Y+9);
- Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+ Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
if (kbhit ()) {
cgetc ();
tgi_clear ();
return;
}
}
- Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+ Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
}
- Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
+ Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE;
}
}
tgi_setpalette (Palette);
tgi_setcolor (COLOR_FORE);
- for (X = 0; X <= MaxY; X += 10) {
- tgi_line (0, 0, MaxY, X);
- tgi_line (0, 0, X, MaxY);
- tgi_line (MaxY, MaxY, 0, MaxY-X);
- tgi_line (MaxY, MaxY, MaxY-X, 0);
+ for (X = 0; X <= MaxY; X += 10) {
+ tgi_line (0, 0, MaxY, X);
+ tgi_line (0, 0, X, MaxY);
+ tgi_line (MaxY, MaxY, 0, MaxY-X);
+ tgi_line (MaxY, MaxY, MaxY-X, 0);
}
cgetc ();
{
unsigned char Border;
+#if DYN_DRV
/* Warn the user that the tgi driver is needed */
DoWarning ();
/* Load and initialize the driver */
tgi_load_driver (tgi_stddrv);
CheckError ("tgi_load_driver");
+#else
+ /* Install the driver */
+ tgi_install (tgi_static_stddrv);
+ CheckError ("tgi_install");
+#endif
+
tgi_init ();
CheckError ("tgi_init");
tgi_clear ();
DoDiagram ();
DoLines ();
+#if DYN_DRV
/* Unload the driver */
tgi_unload ();
+#else
+ /* Uninstall the driver */
+ tgi_uninstall ();
+#endif
/* Reset the border */
(void) bordercolor (Border);