;*****************************************************************************/
;*                                                                           */
;*                                  modload.inc                              */
;*                                                                           */
;*                     o65 module loader interface for cc65                  */
;*                                                                           */
;*                                                                           */
;*                                                                           */
;* (C) 2002      Ullrich von Bassewitz                                       */
;*               Wacholderweg 14                                             */
;*               D-70597 Stuttgart                                           */
;* EMail:        uz@musoftware.de                                            */
;*                                                                           */
;*                                                                           */
;* This software is provided 'as-is', without any expressed or implied       */
;* warranty.  In no event will the authors be held liable for any damages    */
;* arising from the use of this software.                                    */
;*                                                                           */
;* Permission is granted to anyone to use this software for any purpose,     */
;* including commercial applications, and to alter it and redistribute it    */
;* freely, subject to the following restrictions:                            */
;*                                                                           */
;* 1. The origin of this software must not be misrepresented; you must not   */
;*    claim that you wrote the original software. If you use this software   */
;*    in a product, an acknowledgment in the product documentation would be  */
;*    appreciated but is not required.                                       */
;* 2. Altered source versions must be plainly marked as such, and must not   */
;*    be misrepresented as being the original software.                      */
;* 3. This notice may not be removed or altered from any source              */
;*    distribution.                                                          */
;*                                                                           */
;*****************************************************************************/



; Exports structures and functions to load relocatable o65 modules at
; runtime.



; Offsets for the mod_ctrl struct. This struct is passed to the module loader.
; It contains stuff, the loader needs to work, and another area where the
; loader will place informational data if it was successful. You will have to
; check the return code of mod_load before accessing any of these additional
; struct members.
.struct MOD_CTRL
        READ            .addr
        CALLERDATA      .word
        MODULE          .addr           ; Pointer to module data
        MODULE_SIZE     .word           ; Total size of loaded module
        MODULE_ID       .word
.endstruct

; unsigned char mod_load (struct mod_ctrl* ctrl);
; /* Load a module into memory and relocate it. The function will return an
;  * error code (see below). If MLOAD_OK is returned, the outgoing fields in
;  * the passed mod_ctrl struct contain information about the module just
;  * loaded.
;  */
.global         _mod_load

; void mod_free (void* module);
; /* Free a loaded module. Note: The given pointer is the pointer to the
;  * module memory, not a pointer to a control structure.
;  */
.global         _mod_free

; Errors
.enum
        MLOAD_OK        ; Module load successful
        MLOAD_ERR_READ  ; Read error
        MLOAD_ERR_HDR   ; Header error
        MLOAD_ERR_OS    ; Wrong OS
        MLOAD_ERR_FMT   ; Data format error
        MLOAD_ERR_MEM   ; Not enough memory
.endenum