 |
EXECUTE_IN_GHOST_SPACE |
Sometimes, on hardware version 2, it is necessary to execute a program in the
so-called "ghost space", which is the area of addresses above 0x40000. If you
need to know more about this, read the
launcher FAQ entry. If you put
#define EXECUTE_IN_GHOST_SPACE
at the beginning of your program, on hardware version 2 (and 1, for
backwards compatibility reasons), the program will automatically be
executed in the ghost space. This causes an overhead of about 200 bytes.
More precisely, it will relocate itself in the ghost space (by
applying EX_patch to itself with the
start address increased by 0x40000) before entering the ghost space.
Everything will be performed before anything else. Therefore, there
are no limitations introduced by this directive on hardware versions 1 and 2,
whereas the older
enter_ghost_space function
was very limited and hard to use.
EXECUTE_IN_GHOST_SPACE
allows the user to simply call one
program from another, without worrying about the AMS protections which
usually prevent this.
Unfortunately, on hardware version 3 (TI-89 Titanium), it is not possible
anymore to bypass the execution protection this way. EXECUTE_IN_GHOST_SPACE
detects hardware version 3 and requires a FlashROM patch to be present,
refusing the execution otherwise. The name might be changed in future versions
of TIGCC to reflect this. Therefore, you need to know that you should
not blindly add 0x40000 to an address, because this does not work at
all on the TI-89 Titanium. Instead, use HW_VERSION==2?0x40000:0
or HW_VERSION<=2?0x40000:0
as appropriate.