]> git.sur5r.net Git - cc65/blob - include/modload.h
Added new header files
[cc65] / include / modload.h
1 /*****************************************************************************/
2 /*                                                                           */
3 /*                                   modload.h                               */
4 /*                                                                           */
5 /*                     o65 module loader interface for cc65                  */
6 /*                                                                           */
7 /*                                                                           */
8 /*                                                                           */
9 /* (C) 2002      Ullrich von Bassewitz                                       */
10 /*               Wacholderweg 14                                             */
11 /*               D-70597 Stuttgart                                           */
12 /* EMail:        uz@musoftware.de                                            */
13 /*                                                                           */
14 /*                                                                           */
15 /* This software is provided 'as-is', without any expressed or implied       */
16 /* warranty.  In no event will the authors be held liable for any damages    */
17 /* arising from the use of this software.                                    */
18 /*                                                                           */
19 /* Permission is granted to anyone to use this software for any purpose,     */
20 /* including commercial applications, and to alter it and redistribute it    */
21 /* freely, subject to the following restrictions:                            */
22 /*                                                                           */
23 /* 1. The origin of this software must not be misrepresented; you must not   */
24 /*    claim that you wrote the original software. If you use this software   */
25 /*    in a product, an acknowledgment in the product documentation would be  */
26 /*    appreciated but is not required.                                       */
27 /* 2. Altered source versions must be plainly marked as such, and must not   */
28 /*    be misrepresented as being the original software.                      */
29 /* 3. This notice may not be removed or altered from any source              */
30 /*    distribution.                                                          */
31 /*                                                                           */
32 /*****************************************************************************/
33
34
35
36 /* Exports structures and functions to load relocatable o65 modules at
37  * runtime.
38  */
39
40
41
42 #ifndef _MODLOAD_H
43 #define _MODLOAD_H
44
45
46
47 /* The following struct is passed to the module loader. It contains stuff,
48  * the loader needs to work, and another area where the loader will place
49  * informational data if it was successful. You will have to check the return
50  * code of mod_load before accessing any of these additional struct members.
51  */
52 struct mod_ctrl {
53     /* Parameters passed into the loader routine. The second pointer
54      * (callerdata) is an opaque pointer that may be used by the caller to
55      * pass data through to the read routine. The read routine is used by the
56      * loader to load any required data. There are several calls where the
57      * read routine is called with a size of 1, so you may choose to make this
58      * a special case when implementing read().
59      */
60     unsigned char   (*read) (struct mod_ctrl*, void* buffer, unsigned size);
61     void*           callerdata;
62
63     /* Parameters set by the loader routine */
64     void*           module;             /* Pointer to module data */
65     unsigned        module_size;        /* Total size of loaded module */
66     void*           code;               /* Pointer to code segment */
67     unsigned        code_size;          /* Size of code segment */
68     void*           data;               /* Pointer to data segment */
69     unsigned        data_size;          /* Size of data segment */
70     void*           bss;                /* Pointer to bss segment */
71     unsigned        bss_size;           /* Size of bss segment */
72 };
73
74
75
76 unsigned char mod_load (struct mod_ctrl* ctrl);
77 /* Load a module into memory and relocate it. The function will return an
78  * error code (see below). If MLOAD_OK is returned, the outgoing fields in
79  * the passed mod_ctrl struct contain information about the module just
80  * loaded.
81  */
82
83 void mod_free (struct mod_ctrl* ctrl);
84 /* Free a loaded module. */
85
86
87
88 /* Errors */
89 #define MLOAD_OK                0       /* Module load successful */
90 #define MLOAD_ERR_READ          1       /* Read error */
91 #define MLOAD_ERR_HDR           2       /* Header error */
92 #define MLOAD_ERR_OS            3       /* Wrong OS */
93 #define MLOAD_ERR_FMT           4       /* Data format error */
94 #define MLOAD_ERR_MEM           5       /* Not enough memory */
95
96
97
98 /* End of modload.h */
99 #endif
100
101
102