home *** CD-ROM | disk | FTP | other *** search
-
- Notes on Mylib: amiga exec library compatible with small model Aztec-C.
-
- jimm mackraz -- october 28, 1986
-
- [Apr 24, 1987:
- the archive includes a file 'elib' which must be copied to
- 'LIBS:mylib.library' before the test program will run.]
-
- Most of the work here is because Aztec uses d2, d3 (and others, according
- to the manual) as scratch registers. This means that crt0.asm (the
- C startup code) can't be called as is by OpenLibrary(), so an AutoInit
- (RomTag) approach is used.
-
- Note also that all entry points to the library must save and restore
- registers (unless you can be sure that they won't be trashed).
-
- Note also that arguments are passed to the library in registers, even
- though this entails yanking them off the stack first and pushing them
- back on later (and the compiler probably just puts them back into
- registers itself). This is the Amiga convention, done so that
- assembler applications calling assembler library functions are optimized,
- and to be compiler/linker independent. We strongly recommend the
- continuation of this practice. If you want better performance, write
- the library functions in assembler, and take the arguments from registers
- directly.
-
- The example here consists of several files, some linked together to
- create the library, some to create the example calling program (see
- also the makefile).
-
- Library:
- elib.c -- c-code for initialization and library functions
- rtag.asm -- data structure (but in code segment) for romtag
- funky.asm -- modified aztec crt0.asm. saves registers, sets
- up A4 (and for geta4()) calls my Init routine, restores.
- libface.asm -- entry points for library functions: each saves
- registers, sets up A4, pushes arguments on stack, calls
- C-routine, fixes stack, restores regs.
-
- Calling Program:
- t.c -- opens library, calls its functions, closes library
- liblink.asm -- interface for C calls to library calls. Note that
- the symbol libbase in t.c must be named exactly that.
-
- To add a new function written in C to this library, one must:
- -write the C-code for the function
- -write the library side interface routine in libface.asm
- -write the C application side interface in liblink.asm
- Note the simplicity afforded by declaring all integer parameters
- and return values as LONG.
-
- To add a new function written in assembler, you needn't do a library
- side interface which pushes arguments on the stack, nor need you save
- more registers than you are explicity using. Note, though, that
- a4 must be setup using geta4() (save it first!) to do any small model
- references, and calling any Aztec function might require that you
- save registers.
-
-