# Checking for Low Memory Pointers

Several titles submitted to The 3DO Company for encryption were accessing the lower 512 bytes of memory, which are reserved for the operating system. This often involved using the return value of a system or user function as the base address for a structure without checking whether that value was NULL.

To solve this problem, The 3DO Company offered each developer a hardware upgrade to the 3DO development system that facilitates easy detection of low memory pointers in 1994.

## Why Avoiding Low Memory Access is Important

Even if a title that accesses low memory runs without errors on the current 3DO player, is not guaranteed to work on future hardware for two reasons:

- Different manufacturers' hardware returns different values when low memory is accessed.
- Future hardware or operating systems may not allow low memory access at all.

Warning: Titles must be low memory clean to receive a Right to Manufacture.

## How to Detect and Remove Low Memory Pointers

To detect and remove low memory pointers, you need the following:

- A version of your application. You can work with a development version, a cdrom.image file, or a CD-ROM.

- The symbols file for your program. You need this file to identify where low memory pointers are used in your source code.

- The 3DO Debugger 1.9b5 or later.

- The 3DO operating system 1.3.1 or later.

With all required files available, go through the following steps:

1. Run your application from the Debugger on a 3DO development system that has a low memory detection board.

   If you're not sure whether your Station has a low memory detection board, run the example code in "Checking for Low Memory Boards" below.

2. Make sure the following windows are open:

   - Terminal window
   - Disassembly window
   - Register window
   - Source window

3. If you can test all parts of your application without problems, no additional action is necessary.

4. If the program accesses low memory, it aborts where the access occurs displaying the following message:

     `3DO Debug : Abort (Dat) = PC@address`

   `address` is the point in the program where the problem occurred.

5. If you look at the Disassembly window and the Register window, you are likely to find that the program stopped when accessing an address lower than 00x1FF.

6. If you look at the Source window, you are likely to find an error return value.

   In most cases, you have to modify your source code to check for NULL.

7. Note the problem location for later correction.

8. Try to continue from the Debugger, repeating the process until you have found all instances of low memory access. In some cases, for example, if the access happens during a loop, you may have to fix one problem and recompile your application before you can continue.

### Checking for Low Memory Boards

If you're not sure whether your 3DO Station has a low memory board installed, compile and link the following program, then run it on the 3DO Station. This program stops, as explained above.

``

    int main()
    {
        int *addr=0;
        int i;

        i = *addr;
    }