home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
390.lha
/
mxm.library
/
LibStartup.asm
< prev
next >
Wrap
Assembly Source File
|
1990-06-30
|
4KB
|
119 lines
*--------------------------------------------------------------------*
* Library startup module, not as funky as Jimm's example
* Aztec code, but (hopefully) okay for Aztec 5.0.
*
* Note: Register usage has been rearranged to allow
* library init call with parameters in registers.
*
* Based on LibStart.A68 (with some of the bugs taken out),
* Copyright (C) 1986, 1987 by Manx Software Systems, Inc.
*--------------------------------------------------------------------*
INCLUDE 'exec/types.i'
INCLUDE 'exec/nodes.i'
INCLUDE 'exec/resident.i'
*--------------------------------------------------------------------*
* Here we start the code generation.
*--------------------------------------------------------------------*
SECTION RomTag,CODE
*--------------------------------------------------------------------*
* Not very executable (also does long word alignment).
*--------------------------------------------------------------------*
MOVEQ #-1,D0 ; Fail if run from anywhere
RTS
*--------------------------------------------------------------------*
* Library version, this should match the lib ID string.
*--------------------------------------------------------------------*
LIBVERSION EQU 34
*--------------------------------------------------------------------*
* Global symbols (rather in a bunch than sprenkled).
*--------------------------------------------------------------------*
PUBLIC _LibRomTag,_LibName,_LibId,_LibInitTab,_LibInit
PUBLIC _LibMain,.begin,_geta4,__H0_org
*--------------------------------------------------------------------*
* The RomTag structure, must be in first hunk.
*--------------------------------------------------------------------*
_LibRomTag:
DC.W RTC_MATCHWORD ; Tag ID (680x0 ILLEGAL)
DC.L _LibRomTag ; Points to beginning of tag
DC.L _LibEndTag ; Points to end of tag
DC.B RTF_AUTOINIT ; Auto init library
DC.B LIBVERSION ; Library version
DC.B NT_LIBRARY ; This is a library, not a device
DC.B 0 ; Priority (leave it zero)
DC.L _LibName ; Pointer to lib name (e.g. 'any.library')
DC.L _LibId ; Pointer to lib ID (e.g. 'any.library (31 Feb 1103)')
DC.L _LibInitTab ; Pointer to library init table
_LibEndTag:
*--------------------------------------------------------------------*
* This is supposed to be the lib entry point.
*--------------------------------------------------------------------*
.begin ; First hunk
*--------------------------------------------------------------------*
* Sets up the lib environment and calls the main init routine.
*
* Register usage: D0 - APTR to library base
* A0 - BPTR to libray segment list
*
* Main init routine is expected to return the library base
* in D0 if library is ready to be used.
*--------------------------------------------------------------------*
_LibInit:
MOVEM.L D2-D7/A2-A6,-(SP) ; Save registers
BSR _geta4 ; Get A4
LEA __H1_end,A1
LEA __H2_org,A2
CMP.L A1,A2 ; Check if BSS and DATA together
BNE Start ; No, don't have to clear
MOVE.W #((__H2_end-__H2_org)/4)-1,D1
BMI Start ; Skip if no bss
MOVEQ #0,D2
Loop MOVE.L D2,(A1)+ ; Clear out memory
DBRA D1,Loop
Start MOVE.L A6,_SysBase ; Put it where we can get it
JSR _LibMain
MOVEM.L (SP)+,D2-D7/A2-A6 ; Restore registers
RTS ; And return
*--------------------------------------------------------------------*
* Sets A4 up to point into the middle of the data segment.
*--------------------------------------------------------------------*
_geta4: FAR DATA
LEA __H1_org+32766,A4
RTS
*--------------------------------------------------------------------*
* Data segment (globals/hunks).
*--------------------------------------------------------------------*
SECTION LibData,DATA
PUBLIC _SysBase,__H1_org,__H1_end,__H2_org,__H2_end
BSS _SysBase,4
END