/*
 * $Id: loadfragment.h,v 1.1 2003/02/07 18:15:44 wheeler Exp $
 *
 * プログラムの動的ロード＆リンク
 *
 * $Log: loadfragment.h,v $
 * Revision 1.1  2003/02/07 18:15:44  wheeler
 * Fox's version of libultra and friends.
 *
 * Revision 1.2  1997/02/07  10:44:59  hayakawa
 * いろいろ変更
 *
 * Revision 1.1  1996/12/18  01:09:23  hayakawa
 * Initial revision
 *
 *
 */

#ifndef __LOADFRAGMENT_H_
#define __LOADFRAGMENT_H_

typedef char	*MemPtr;
typedef unsigned long	    ulong;

#ifdef __cplusplus
extern "C" {
#endif

    /* mallocバージョン */
    MemPtr LoadFragment(ulong romStart, ulong romEnd, MemPtr fakebase);
    /* メモリ指定バージョン */
    ulong  LoadFragmentFix(ulong romStart, ulong romEnd, MemPtr fakebase, MemPtr ramAddr, ulong ramSize);
    /* メモリ指定バージョン2 */
    ulong  LoadFragmentFix2(ulong romStart, ulong romEnd, MemPtr segStart, MemPtr segEnd, MemPtr ramAddr);
    /* mallocバージョン2 */
    MemPtr LoadFragment2(ulong romStart, ulong romEnd, MemPtr segStart, MemPtr segEnd);

#ifdef __cplusplus
} /* extern "C" */
#endif

/* セグメント名でロードするためのマクロ */
#define LOADFRAGMENTFIX(name, ramAddr) 	LoadFragmentFix2((u32)_##name##SegmentRomStart, (u32)_##name##SegmentRomEnd, _##name##SegmentStart, _##name##SegmentEnd, ramAddr)
#define LOADFRAGMENT(name) 		LoadFragment2((u32)_##name##SegmentRomStart, (u32)_##name##SegmentRomEnd, _##name##SegmentStart, _##name##SegmentEnd)
    
#endif /* __LOADFRAGMENT_H_ */
