Commodore‎ > ‎BASIC‎ > ‎Keywords‎ > ‎

FRE

Keyword Abbreviation Token (hex) Version(s) Classification
FRE F{Shift+R} B8 1.0+ Function

  Syntax  
FRE bank )
 
Parameters Type Legal Value(s) Note(s)
bank Float
any
Machines with 64K or less RAM
bank Unsigned Byte 0 to 255  BASIC v4.x
bank Unsigned Byte 0 or 1 BASIC v7.0
 
Returns Type Value(s) Note(s)
bytesFree Integer*
-32768 to 32767
BASIC v2.x or less
bytesFree  Unsigned Integer*  0 to 65535  BASIC v3.5+ 
* All BASIC functions actually return a floating-point number, but the number is derived (converted) from the types shown.
 
  Purpose  
Return the amount of memory (in bytes) available to BASIC in the specified BANK.
 
  Remarks  
The FRE function obstensibly reports the amount of free memory available to BASIC.  It has the side-effect of calling the BASIC garbage collection routine if bank refers to the location of strings (this frees unused string memory, but can be quite slow in versions 1.x and 2.x of BASIC).
 
There is a bug in the 1.x and 2.x versions of BASIC; the returned value is a signed integer.  This means if the real amount of available memory is 32768 or more bytes, the bytesFree will be a negative value!  For example, after power-up of the Commodore 64, FRE reports -26627 bytesFree.  It looks like you ran out of memory and owe somebody some bytes!  In such cases, adding 65536 to the returned bytesFree gives the correct value.  In the example of the C64, this math would give the correct value 38909 bytes (which does not match the start-up message because of a bug in the start-up code).
 
On machines with 64K or less RAM, the bank parameter may be any numeric value and the returned value refers to all available memory.  Other machines require a valid bank value (if bank is a floating-point value it will effectively be converted with INT); for the Commodore 128:
  • bank 0 refers to memory available for program text
  • bank 1 refers to memory available for all arrays, FNs, scalars, and strings
For the CBM-II series the bank value should be 1 to 4 (other legal values will report 0 bytesFree).  Arrangement of BASIC memory will depend on how many banks of RAM are installed:
  1. 64K of RAM
    • bank 1 refers to all available memory (text, scalars, arrays, strings)
  2. 128K of RAM
    • bank 1 refers to memory available for program text
    • bank 2 refers to memory available for all arrays, FNs, scalars, and strings
  3. 256K of RAM (or more)
    • bank 1 refers to memory available for program text 
    • bank 2 refers to memory available for arrays
    • bank 3 refers to memory available for FNs and scalars
    • bank 4 refers to memory available for string data (string descriptors will be in bank 2 or 3, depending if array or scalar)
If the bank is not a numeric value, TYPE MISMATCH ERROR is generated.  Otherwise, if the value is not legal (see table above), an ILLEGAL QUANTITY ERROR occurs.
 
Examples (C128):
PRINT FRE(0)
 58109               for BASIC programs

READY.
PRINT FRE(1)
 64256               for BASIC variables (performs garbage collection)

READY.
PRINT FRE(2) 

?ILLEGAL QUANTITY ERROR 
READY.
 
Examples (CBM 710):
PRINT FRE(0) 
 0

PRINT FRE(1)
 64089               for BASIC programs

READY.
PRINT FRE(2)
 64187               for BASIC variables (performs garbage collection)

READY.
 
Examples (Plus/4):
GRAPHIC CLR: PRINT FRE(0)
 60669             for BASIC programs and variables (does garbage collection)

GRAPHIC 2,1: PRINT FRE(0)
 48381             again for programs and variables, but bitmap has taken 12K

READY.
 
 
  Contrast With  
 
  See Also  

© H2Obsession, 2014
Comments