Added option to build samples with statically linked drivers - and have the targets use it by default which don't support dynamically loaded drivers.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5913 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
ol.sc
2012-11-04 22:01:51 +00:00
parent 895779d612
commit ca2ba14bbe
6 changed files with 155 additions and 112 deletions

View File

@@ -47,20 +47,20 @@
/* Color defines */ /* Color defines */
#define COLOR_BLACK 0x00 #define COLOR_BLACK 0x00
#define COLOR_RED 0x01 #define COLOR_RED 0x01
#define COLOR_GREEN 0x02 #define COLOR_GREEN 0x02
#define COLOR_YELLOW 0x03 #define COLOR_YELLOW 0x03
#define COLOR_BLUE 0x04 #define COLOR_BLUE 0x04
#define COLOR_MAGENTA 0x05 #define COLOR_MAGENTA 0x05
#define COLOR_CYAN 0x06 #define COLOR_CYAN 0x06
#define COLOR_WHITE 0x07 #define COLOR_WHITE 0x07
/* Define hardware */ /* Define hardware */
#include <_6522.h> #include <_6522.h>
#define VIA (*(struct __6522*)0x300) #define VIA (*(struct __6522*)0x300)
@@ -79,15 +79,15 @@
/* Character codes */ /* Character codes */
#define CH_ULCORNER '+' #define CH_ULCORNER '+'
#define CH_URCORNER '+' #define CH_URCORNER '+'
#define CH_LLCORNER '+' #define CH_LLCORNER '+'
#define CH_LRCORNER '+' #define CH_LRCORNER '+'
#define CH_TTEE '+' #define CH_TTEE '+'
#define CH_BTEE '+' #define CH_BTEE '+'
#define CH_LTEE '+' #define CH_LTEE '+'
#define CH_RTEE '+' #define CH_RTEE '+'
#define CH_CROSS '+' #define CH_CROSS '+'
#define CH_CURS_UP 11 #define CH_CURS_UP 11
#define CH_CURS_DOWN 10 #define CH_CURS_DOWN 10
#define CH_CURS_LEFT 8 #define CH_CURS_LEFT 8
@@ -98,6 +98,13 @@
#define CH_LIRA 95 #define CH_LIRA 95
#define CH_ESC 27 #define CH_ESC 27
/* No support for dynamically loadable drivers */
#define DYN_DRV 0
void __fastcall__ atmos_load(const char* name); void __fastcall__ atmos_load(const char* name);
/* Load Atmos tape. */ /* Load Atmos tape. */
@@ -108,6 +115,3 @@ void __fastcall__ atmos_save(const char* name, const void* start, const void* en
/* End of atmos.h */ /* End of atmos.h */
#endif #endif

View File

@@ -87,7 +87,8 @@
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
#define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_WHITE COLOR_WHITE
/* No support for dynamically loadable drivers */
#define DYN_DRV 0
@@ -182,11 +183,11 @@ unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val);
#include <_mikey.h> #include <_mikey.h>
#define MIKEY (*(struct __mikey *)0xFD00) #define MIKEY (*(struct __mikey *)0xFD00)
#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8] #define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8]
#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL) #define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL)
#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL) #define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL)
#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART) #define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART)
#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma #define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma
#include <_suzy.h> #include <_suzy.h>
#define SUZY (*(struct __suzy*)0xFC00) #define SUZY (*(struct __suzy*)0xFC00)
@@ -194,6 +195,3 @@ unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val);
/* End of lynx.h */ /* End of lynx.h */
#endif #endif

View File

@@ -43,15 +43,15 @@
/* Key and character defines */ /* Key and character defines */
#define CH_ENTER '\n' #define CH_ENTER '\n'
#define CH_CURS_UP 0x01 #define CH_CURS_UP 0x01
#define CH_CURS_DOWN 0x02 #define CH_CURS_DOWN 0x02
#define CH_CURS_LEFT 0x03 #define CH_CURS_LEFT 0x03
#define CH_CURS_RIGHT 0x04 #define CH_CURS_RIGHT 0x04
#define CH_ESC 8 #define CH_ESC 8
#define CH_DEL 20 #define CH_DEL 20
#define CH_CROSS 0x10 #define CH_CROSS 0x10
#define CH_RTEE 0x17 #define CH_RTEE 0x17
#define CH_LTEE 0x0f #define CH_LTEE 0x0f
#define CH_TTEE 0x16 #define CH_TTEE 0x16
@@ -64,30 +64,32 @@
#define CH_LRCORNER 0x08 #define CH_LRCORNER 0x08
#define CH_PI 0x05 #define CH_PI 0x05
/* Color defines */ /* Color defines */
#define COLOR_BLACK 0x00 #define COLOR_BLACK 0x00
#define COLOR_WHITE 0x01 #define COLOR_WHITE 0x01
#define COLOR_RED 0x02 #define COLOR_RED 0x02
#define COLOR_CYAN 0x03 #define COLOR_CYAN 0x03
#define COLOR_VIOLET 0x04 #define COLOR_VIOLET 0x04
#define COLOR_GREEN 0x05 #define COLOR_GREEN 0x05
#define COLOR_BLUE 0x06 #define COLOR_BLUE 0x06
#define COLOR_YELLOW 0x07 #define COLOR_YELLOW 0x07
#define COLOR_ORANGE 0x08 #define COLOR_ORANGE 0x08
#define COLOR_BROWN 0x09 #define COLOR_BROWN 0x09
#define COLOR_LIGHTRED 0x0A #define COLOR_LIGHTRED 0x0A
#define COLOR_GRAY1 0x0B #define COLOR_GRAY1 0x0B
#define COLOR_GRAY2 0x0C #define COLOR_GRAY2 0x0C
#define COLOR_LIGHTGREEN 0x0D #define COLOR_LIGHTGREEN 0x0D
#define COLOR_LIGHTBLUE 0x0E #define COLOR_LIGHTBLUE 0x0E
#define COLOR_GRAY3 0x0F #define COLOR_GRAY3 0x0F
/* Return codes of get_tv */ /* Return codes of get_tv */
#define TV_NTSC 0 #define TV_NTSC 0
#define TV_PAL 1 #define TV_PAL 1
#define TV_OTHER 2 #define TV_OTHER 2
/* No support for dynamically loadable drivers */
#define DYN_DRV 0
void waitvblank (void); void waitvblank (void);
@@ -100,6 +102,3 @@ unsigned char get_tv (void);
/* End of nes.h */ /* End of nes.h */
#endif #endif

View File

@@ -14,18 +14,18 @@
/* Graphics definitions */ /* Graphics definitions */
#define SCREEN_X (tgi_getxres()) #define SCREEN_X (tgi_getxres())
#define SCREEN_Y (tgi_getyres()) #define SCREEN_Y (tgi_getyres())
#define MAXCOL (tgi_getcolorcount()) #define MAXCOL (tgi_getcolorcount())
#define maxiterations 32 #define maxiterations 32
#define fpshift (10) #define fpshift (10)
#define tofp(_x) ((_x)<<fpshift) #define tofp(_x) ((_x)<<fpshift)
#define fromfp(_x) ((_x)>>fpshift) #define fromfp(_x) ((_x)>>fpshift)
#define fpabs(_x) (abs(_x)) #define fpabs(_x) (abs(_x))
#define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift) #define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift)
#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b)) #define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b))
/* Workaround missing clock stuff */ /* Workaround missing clock stuff */
#if defined(__APPLE2__) || defined(__APPLE2ENH__) #if defined(__APPLE2__) || defined(__APPLE2ENH__)
@@ -33,13 +33,18 @@
# define CLK_TCK 1 # define CLK_TCK 1
#endif #endif
/* Use dynamically loaded driver by default */
#ifndef DYN_DRV
# define DYN_DRV 1
#endif
/* Use static local variables for speed */ /* Use static local variables for speed */
#pragma static-locals (1); #pragma static-locals (1);
void mandelbrot (signed short x1, signed short y1, signed short x2, void mandelbrot (signed short x1, signed short y1, signed short x2,
signed short y2) signed short y2)
{ {
register unsigned char count; register unsigned char count;
register signed short r, r1, i; register signed short r, r1, i;
@@ -52,32 +57,32 @@ void mandelbrot (signed short x1, signed short y1, signed short x2,
yy = y1; yy = y1;
for (y = 0; y < (SCREEN_Y); y++) { for (y = 0; y < (SCREEN_Y); y++) {
yy += ys; yy += ys;
xx = x1; xx = x1;
for (x = 0; x < (SCREEN_X); x++) { for (x = 0; x < (SCREEN_X); x++) {
xx += xs; xx += xs;
/* do iterations */ /* do iterations */
r = 0; r = 0;
i = 0; i = 0;
for (count = 0; (count < maxiterations) && for (count = 0; (count < maxiterations) &&
(fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2)); (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2));
++count) { ++count) {
r1 = (mulfp (r, r) - mulfp (i, i)) + xx; r1 = (mulfp (r, r) - mulfp (i, i)) + xx;
/* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */ /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */
i = (((signed long) r * i) >> (fpshift - 1)) + yy; i = (((signed long) r * i) >> (fpshift - 1)) + yy;
r = r1; r = r1;
} }
if (count == maxiterations) { if (count == maxiterations) {
tgi_setcolor (0); tgi_setcolor (0);
} else { } else {
if (MAXCOL == 2) if (MAXCOL == 2)
tgi_setcolor (1); tgi_setcolor (1);
else else
tgi_setcolor (count % MAXCOL); tgi_setcolor (count % MAXCOL);
} }
/* set pixel */ /* set pixel */
tgi_setpixel (x, y); tgi_setpixel (x, y);
} }
} }
} }
@@ -90,14 +95,19 @@ int main (void)
clrscr (); clrscr ();
#if DYN_DRV
/* Load the graphics driver */ /* Load the graphics driver */
cprintf ("initializing... mompls\r\n"); cprintf ("initializing... mompls\r\n");
tgi_load_driver (tgi_stddrv); tgi_load_driver (tgi_stddrv);
#else
/* Install the graphics driver */
tgi_install (tgi_static_stddrv);
#endif
err = tgi_geterror (); err = tgi_geterror ();
if (err != TGI_ERR_OK) { if (err != TGI_ERR_OK) {
cprintf ("Error #%d initializing graphics.\r\n%s\r\n", cprintf ("Error #%d initializing graphics.\r\n%s\r\n",
err, tgi_geterrormsg (err)); err, tgi_geterrormsg (err));
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
}; };
cprintf ("ok.\n\r"); cprintf ("ok.\n\r");
@@ -132,5 +142,4 @@ int main (void)
/* Done */ /* Done */
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@@ -20,11 +20,11 @@
/* Address of data for sprite 0 */ /* Address of data for sprite 0 */
#if defined(__C64__) #if defined(__C64__)
# define SPRITE0_DATA 0x0340 # define SPRITE0_DATA 0x0340
# define SPRITE0_PTR 0x07F8 # define SPRITE0_PTR 0x07F8
#elif defined(__C128__) #elif defined(__C128__)
# define SPRITE0_DATA 0x0E00 # define SPRITE0_DATA 0x0E00
# define SPRITE0_PTR 0x07F8 # define SPRITE0_PTR 0x07F8
#endif #endif
/* The mouse sprite (an arrow) */ /* The mouse sprite (an arrow) */
@@ -56,6 +56,12 @@ static const unsigned char MouseSprite[64] = {
#endif /* __C64__ or __C128__ */ #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 max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b)) #define min(a,b) (((a) < (b)) ? (a) : (b))
@@ -133,12 +139,18 @@ int main (void)
#endif #endif
#if DYN_DRV
/* Output a warning about the driver that is needed */ /* Output a warning about the driver that is needed */
DoWarning (); DoWarning ();
/* Load and install the mouse driver */ /* Load and install the mouse driver */
CheckError ("mouse_load_driver", CheckError ("mouse_load_driver",
mouse_load_driver (&mouse_def_callbacks, mouse_stddrv)); 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 */ /* Get the initial mouse bounding box */
mouse_getbox (&full_box); mouse_getbox (&full_box);
@@ -210,8 +222,13 @@ int main (void)
} }
#if DYN_DRV
/* Uninstall and unload the mouse driver */ /* Uninstall and unload the mouse driver */
CheckError ("mouse_unload", mouse_unload ()); CheckError ("mouse_unload", mouse_unload ());
#else
/* Uninstall the mouse driver */
CheckError ("mouse_uninstall", mouse_uninstall ());
#endif
/* Say goodbye */ /* Say goodbye */
clrscr (); clrscr ();

View File

@@ -9,6 +9,10 @@
#ifndef DYN_DRV
# define DYN_DRV 1
#endif
#define COLOR_BACK TGI_COLOR_BLACK #define COLOR_BACK TGI_COLOR_BLACK
#define COLOR_FORE TGI_COLOR_WHITE #define COLOR_FORE TGI_COLOR_WHITE
@@ -74,7 +78,7 @@ static void DoCircles (void)
for (I = 10; I < 240; I += 10) { for (I = 10; I < 240; I += 10) {
tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); 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 (); cgetc ();
@@ -96,16 +100,16 @@ static void DoCheckerboard (void)
for (X = 0; X <= MaxX; X += 10) { for (X = 0; X <= MaxX; X += 10) {
tgi_setcolor (Color); tgi_setcolor (Color);
tgi_bar (X, Y, X+9, Y+9); 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 ()) { if (kbhit ()) {
cgetc (); cgetc ();
tgi_clear (); tgi_clear ();
return; 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;
} }
} }
@@ -163,11 +167,11 @@ static void DoLines (void)
tgi_setpalette (Palette); tgi_setpalette (Palette);
tgi_setcolor (COLOR_FORE); tgi_setcolor (COLOR_FORE);
for (X = 0; X <= MaxY; X += 10) { for (X = 0; X <= MaxY; X += 10) {
tgi_line (0, 0, MaxY, X); tgi_line (0, 0, MaxY, X);
tgi_line (0, 0, X, MaxY); tgi_line (0, 0, X, MaxY);
tgi_line (MaxY, MaxY, 0, MaxY-X); tgi_line (MaxY, MaxY, 0, MaxY-X);
tgi_line (MaxY, MaxY, MaxY-X, 0); tgi_line (MaxY, MaxY, MaxY-X, 0);
} }
cgetc (); cgetc ();
@@ -180,12 +184,19 @@ int main (void)
{ {
unsigned char Border; unsigned char Border;
#if DYN_DRV
/* Warn the user that the tgi driver is needed */ /* Warn the user that the tgi driver is needed */
DoWarning (); DoWarning ();
/* Load and initialize the driver */ /* Load and initialize the driver */
tgi_load_driver (tgi_stddrv); tgi_load_driver (tgi_stddrv);
CheckError ("tgi_load_driver"); CheckError ("tgi_load_driver");
#else
/* Install the driver */
tgi_install (tgi_static_stddrv);
CheckError ("tgi_install");
#endif
tgi_init (); tgi_init ();
CheckError ("tgi_init"); CheckError ("tgi_init");
tgi_clear (); tgi_clear ();
@@ -204,8 +215,13 @@ int main (void)
DoDiagram (); DoDiagram ();
DoLines (); DoLines ();
#if DYN_DRV
/* Unload the driver */ /* Unload the driver */
tgi_unload (); tgi_unload ();
#else
/* Uninstall the driver */
tgi_uninstall ();
#endif
/* Reset the border */ /* Reset the border */
(void) bordercolor (Border); (void) bordercolor (Border);