PAL Library version 0.1
Copyright (C) 1994 Peter Andersson
m8439@sparc2.abc.se
COMPILING
---------
You will need TASM v3.2 or above and a library manager such as TLIB
or LIB to compile the PAL library. Simply run the batch file MAKEIT.BAT.
Please modify makeit.bat to customise the PAL library. PAL supports C
compilers that support the _fastcall convention. This calling convention
passes the first three parameters to the _fastcall funtion via EAX, EDX
and ECX respectivly. The convention also inserts the '@' character
infront of each function name. Borland C v4.5+ 32bit compiler supports
_fastcall. When compiling C code using the PAL Library _fastcalls
functions you must first define the macro 'FASTCALLS' or else the PAL.H file will not
define it's functions as _fastcall. With Borland C this may be done using
the -D switch. For example;
BCC32 -DFASTCALLS program.c
If you have standard C calls enabled ( see makeit.bat ) then this allows
all functions to be also called using the standard C calling convention.
i.e parameters passed via the stack and each function name is preceded with
'_' character. It will also increase the library size by about 1K.
MAKEIT.BAT defaults to this setup.
HANDLING MEMORY
---------------
Introduction
------------
MEMORY is a sub memory allocator. It is designed to be used with almost
all flat memory systems where the normal memory allocator only can provide
whole pages (4096 bytes).
All functions use the _fastcall calling convention and they are optimized
for the i486 but will also work on a i386. Maximum handled memory size is
4GB. Each allocated memory block has a 12 byte header. Define DEBUG to let
checkmem, malloc, realloc and free report errors. You will have to include
a printf function if you use the DEBUG feature or rewrite it.
*****************************************************************************
* OBSERVE: This functions _ARE_NOT_ made for multitasking systems which use *
* the same address space. If you really need this, be sure to forbid any *
* other processes to call any of this functions at the same time. *
*****************************************************************************
How to use
----------
First of all you must add a memory block to the memory allocator. Call the
system's malloc and pass the returned memory pointer and length of the
block to the addmem function. This function call can handle as many blocks
as you want! Remember that addmem uses 40 bytes of every added block and
the minimum block size you can add is 44 bytes. Each sub allocation uses
12 bytes + the size you have requested aligned up to the nearest 4 bytes.
To remove a block, call submem with a pointer to the memory block you added.
Don't forget to remove all references to the memory block! This function
also frees all allocated memory blocks so if you forgot one, don't worry!
If your program overwrites a memory block header there might be a problem to
allocate any futher blocks. Use the checkmem function to find the address of
the faulty header in a memory block. The returned pointer is zero if there
weren't any errors. OBSERVE: The returned pointer might not always be
pointing to the corrupted block but to the previous block!
The functions memavail and maxavail are used to get information on how much
memory are available and the maximum block size you can allocate. This
functions are quite handy if there are any memory leaks.
C LIBRARY
---------
Introduction
------------
This is far from what I would really call a "C library". It is a bunch of
routines that I have written to be able to work faster and hopefully it
will help you too. More routines will be added as my work proceeds and
you are always welcome to add more code to this collection. I will only
accept assembler for small routines! For larger work, C and C++ are
accepted as long as they follow the ANSI standard. Your work will, if
they are accepted, be included with this work. I might rewrite some or
all of your work so that they will use the same style as the rest of the
code. You will of course still retain your name and copyright!
The file routines are in a separate directory as they don't follow the
ANSI C standard. They work but it might be best to rewrite them so they
comply to the ANSI C standard.
How to use
----------
Get a standard C library reference! You'll find everything you need in
that reference. If you don't know assembler and what a calling convention
is you're DooMed. If a C routine is missing you can always get the GNU C
library and compile it with a 32bit C compiler. It might be a good idea
as my routines tend to be a bit bigger than what a C compiler produces but
remember that compiled routines _are not_ hand optimized ;-). You'll only
have to do this once so ask a friend who own a good 32bit C compiler if you
don't have one.
Liniking
----------
The entire library is conatined in the file PAL.LIB and of course
it must be linked in with the program. The linker should be set to
case sensitive symbol matching. The startup code, C0.OBJ, is not
inlcuded in PAL.LIB and must be linked seperatly. The startup code
has been speperated from PAL.LIB as this allows the programmer to
have a different start up comfigeration for each application. See the
actual source code, STARTUP\C0.ASM, for details on customizing
the start up.
Comment from the author
-----------------------
Hopefully this package will be useful for you! If you have any ideas,
comments or bug reports, don't hesitate to send them to me:
email: m8439@sparc2.abc.se or mail: Peter Andersson
C/O Harkonen
Tullingebergsv. 6A
146 45 Tullinge
SWEDEN
Good luck and don't forget to support free software!
Regards,
Peter