Home
CBM
  ASCII-X
  BASIC
    Disk Commands
    Enter RUN mode
    Program Format
    Secret Variables
    Variable Format
    Expressions
    Keywords
      (divide)
      (equal)
      (less)
      (minus)
      (more)
      (multiply)
      (plus)
      (power)
      Abs
      And
      Append
      Asc
      Atn
      Auto
      Backup
      Bank
      Begin
      Bend
      Bload
      Boot
      Box
      Bsave
      Bump
      Catalog
      Char
      Chr
      Circle
      Close
      Clr
      Cmd
      Collect
      Collision
      Color
      Concat
      Cont
      Copy
      Cos
      Data
      Dclear
      Dclose
      Dec
      Def
      Delete
      Dim
      Directory
      Dispose
      Dload
      Do
      Dopen
      Draw
      Ds
      Ds string
      Dsave
      Dverify
      El
      Else
      End
      Envelope
      Er
      Err
      Exit
      Exp
      Fast
      Fetch
      Filter
      Fn
      For
      Fre
      Get
      Get num
      Getkey
      Go
      Gosub
      Goto
      Graphic
      Gshape
      Header
      Help
      Hex
      If
      Input
      Input num
      Instr
      Int
      Joy
      Key
      Left
      Len
      Let
      List
      Load
      Locate
      Log
      Loop
      Mid
      Monitor
      Movspr
      New
      Next
      Not
      Off
      On
      Open
      Or
      Paint
      Peek
      Pen
      Pi
      Play
      Pointer
      Poke
      Pos
      Pot
      Print
      Print num
      Pudef
      Quit
      Rclr
      Rdot
      Read
      Record
      Rem
      Rename
      Renumber
      Restore
      Resume
      Return
      Rgr
      Right
      Rlum
      Rnd
      Rreg
      Rspcolor
      Rsppos
      Rsprite
      Run
      Rwindow
      Save
      Scale
      Scnclr
      Scratch
      Sgn
      Sin
      Sleep
      Slow
      Sound
      Spc
      Sprcolor
      Sprdef
      Sprite
      Sprsav
      Sqr
      Sshape
      St
      Stash
      Step
      Stop
      Str
      Swap
      Sys
      Tab
      Tan
      Tempo
      Then
      Ti
      Ti string
      To
      Trap
      Troff
      Tron
      Until
      Using
      Usr
      Val
      Verify
      Vol
      Wait
      While
      Width
      Window
      Xor
    Syntax
    Tokens
  C128
  D64plus
  Disk
  Escape Codes
  Hardware
  PCxface
  PETSCII
  Pet2asc
Futurama
IBM PC-AT
Contact
Games
Glossary
Hall of fame
Hall of shame
Miscellaneous
Privacy policy
Programming
Twisty puzzles
KeywordAbbreviationToken (hex)Version(s)Classification
FREF{Shift+R}B81.0+Function

 Syntax 
FRE bank )
 
ParametersTypeLegal Value(s)Note(s)
bankFloat
any
Machines with 64K or less RAM
bankUnsigned Byte0 to 255 BASIC v4.x
bankUnsigned Byte0 or 1BASIC v7.0
 
ReturnsTypeValue(s)Note(s)
bytesFreeInteger*
-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

READY.
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)

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

READY.


 Contrast With 
 
 See Also 

© H2Obsession, 2014