home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d403
/
rexxhostlib
/
libstartup.asm
< prev
next >
Wrap
Assembly Source File
|
1990-11-17
|
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 LibCode,code
*--------------------------------------------------------------------*
* Not executable (also does long word alignment).
*--------------------------------------------------------------------*
moveq #-1,d0 ; Fail if run from Shell
rts
*--------------------------------------------------------------------*
* Library version, this should match the lib ID string.
*--------------------------------------------------------------------*
LIBVERSION equ 36
*--------------------------------------------------------------------*
* 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
dc.l _LibId ; Pointer to lib ID
dc.l _LibInitTab ; Pointer to library init table
_LibEndTag:
*--------------------------------------------------------------------*
* This is supposed to be the lib entry point.
*--------------------------------------------------------------------*
.begin ; First hunk
*--------------------------------------------------------------------*
* Set up the lib environment and call the main init routine.
*
* Register usage: D0 - APTR to library base
* A0 - BPTR to library 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
1$ move.l d2,(a1)+ ; Clear out memory
dbra d1,1$
Start move.l A6,_SysBase ; Put it where we can get it
jsr _LibMain ; Call 'C' init routine
movem.l (sp)+,d2-d7/a2-a6 ; Restore registers
rts ; And return
*--------------------------------------------------------------------*
* Set up A4 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,_DOSBase,__H1_org,__H1_end,__H2_org,__H2_end
end