Skip to content

Latest commit

 

History

History
73 lines (53 loc) · 2.13 KB

InitResident.md

File metadata and controls

73 lines (53 loc) · 2.13 KB

NAME

InitResident - initialize resident module

SYNOPSIS

    object = InitResident(resident, segList)
    D0                     A1        D1

    APTR InitResident(struct Resident *,ULONG);

Links: Resident

FUNCTION

Initialize a ROMTag. ROMTags are used to link system modules together. Each disk based device or library must contain a ROMTag structure in the first code hunk.

Once the validity of the ROMTag is verified, the RT_INIT pointer is jumped to with the following registers: D0 = 0 A0 = segList A6 = ExecBase

INPUTS

resident - Pointer to a ROMTag segList - SegList of the loaded object, if loaded from disk. Libraries & Devices will cache this value for later return at close or expunge time. Pass NULL for ROM modules.

RESULTS

object - Return value from the init code, usually the library or device base. NULL for failure.

AUTOINIT FEATURE An automatic method of library/device base and vector table initialization is also provided by InitResident(). The initial code hunk of the library or device should contain "MOVEQ #-1,d0; RTS;". Following that must be an initialized Resident structure with RTF_AUTOINIT set in rt_Flags, and an rt_Init pointer which points to four longwords. These four longwords will be used in a call to MakeLibrary();

  • The size of your library/device base structure including initial Library or Device structure.

  • A pointer to a longword table of standard, then library specific function offsets, terminated with -1L. (short format offsets are also acceptable)

  • Pointer to data table in exec/InitStruct format for initialization of Library or Device structure.

  • Pointer to library initialization function, or NULL. Calling sequence: D0 = library base A0 = segList A6 = ExecBase This function must return in D0 the library/device base to be linked into the library/device list. If the initialization function fails, the device memory must be manually deallocated, then NULL returned in D0.

SEE ALSO

exec/resident.i, FindResident