]> git.sur5r.net Git - cc65/blob - samples/overlaydemo.c
Fixed an error in the macro package that prevented the macros to work
[cc65] / samples / overlaydemo.c
1 /*
2  * Minimalistic overlay demo program.
3  *
4  * 2009-10-02, Oliver Schmidt (ol.sc@web.de)
5  *
6  */
7
8
9
10 #include <stdio.h>
11 #include <conio.h>
12 #include <fcntl.h>
13 #include <unistd.h>
14
15
16 extern void _OVERLAY1_LOAD__, _OVERLAY1_SIZE__;
17 extern void _OVERLAY2_LOAD__, _OVERLAY2_SIZE__;
18 extern void _OVERLAY3_LOAD__, _OVERLAY3_SIZE__;
19
20
21 void log (char *msg)
22 {
23     printf ("Log: %s\n", msg);
24 }
25
26
27 #pragma code-name (push, "OVERLAY1");
28
29 void foo (void)
30 {
31     log ("Calling main from overlay 1");
32 }
33
34 #pragma code-name (pop);
35
36
37 #pragma code-name (push, "OVERLAY2");
38
39 void bar (void)
40 {
41     log ("Calling main from overlay 2");
42 }
43
44 #pragma code-name (pop);
45
46
47 #pragma code-name (push, "OVERLAY3");
48
49 void foobar (void)
50 {
51     log ("Calling main from overlay 3");
52 }
53
54 #pragma code-name(pop);
55
56
57 unsigned char loadfile (char *name, void *addr, void *size)
58 {
59     int file = open (name, O_RDONLY);
60     if (file == -1) {
61         log ("Opening overlay file failed");
62         return 0;
63     }
64
65     read (file, addr, (unsigned) size);
66     close (file);
67     return 1;
68 }
69
70
71 void main (void)
72 {
73     log ("Calling overlay 1 from main");
74     if (loadfile ("ovrldemo.1", &_OVERLAY1_LOAD__, &_OVERLAY1_SIZE__)) {
75         foo ();
76     }
77
78     log ("Calling overlay 2 from main");
79     if (loadfile ("ovrldemo.2", &_OVERLAY2_LOAD__, &_OVERLAY2_SIZE__)) {
80         bar ();
81     }
82
83     log ("Calling overlay 3 from main");
84     if (loadfile ("ovrldemo.3", &_OVERLAY3_LOAD__, &_OVERLAY3_SIZE__)) {
85         foobar ();
86     }
87
88     cgetc ();
89 }