HIMEM

Moves HIMEM safely and allocates or frees memory as appropriate from the TI-OS.

*HIMEM addr

BBC BASIC allocates as much memory as it can from the TI-OS when it first loads, restricting HIMEM to a maximum value of &C000. You may wish to increase HIMEM to give BBC BASIC more memory for a large program, or you may wish to decrease HIMEM to give the TI-OS more memory to create new files in.

Assuming that HIMEM was at &C000,

*HIMEM D000

would raise HIMEM to &D000, supplying BBC BASIC with 4KB more memory than it would usually have. If there was insufficient RAM available, a No room error is triggered and HIMEM is not moved.

*HIMEM C000

would drop HIMEM back down to &C000. Unlike the HIMEM statement, the memory between the old value and new value is freed back to the TI-OS, so do not use *HIMEM to allocate memory for persistent assembly routines.

If you do not pass a value to *HIMEM then HIMEM is restored to its upper bound. This is useful if you have previously moved HIMEM yourself, for example:

REM Reserve 100 bytes at the top of memory.
HIMEM=HIMEM-100

...

REM Move HIMEM back up to let BBC BASIC reclaim that memory.
*HIMEM

*HIMEM must not be used within a subroutine, procedure, function, FOR...NEXT, REPEAT...UNTIL or GOSUB loop. It should be used early in your program.

You can use *HIMEM and EXT#-1 together to allocate all free memory to BBC BASIC.

OSCLI "HIMEM "+STR$~(HIMEM+EXT#-1)