BDS Software

CF83 Memory Map Details

The CF83-0 Instruction Manual provides the following Memory Map:

----------

ADDRESSES (HEX)      CONTENTS

 0000  -  09FF       System Variables, Buffers, and Stacks
 0A00  -  21FF       Screen Memory
 2200  -  31FF       Block Buffers (4)
 3200  -  5D3D       Low Level System Routines
 5D3E  -  6DA1       System Dictionary Space (4,196 bytes)
 6DA2  -  FEFF       Application Dictionary Space (37,214 bytes)
 FF00  -  FFFF       MemoryMapped Hardware I/O

The Data Stack space and Return Stack space are each 512 bytes. The Terminal Input Buffer space is 256 bytes. The PAD Buffer space is 150 bytes.

----------

As it also states in that Instruction Manual, CF83 requires a 64K CoCo 2 minimum.

Technically, CF83 will run on a 32K CoCo, but then the Application Dictionary Space will only be 4,702 bytes, i.e. from &H6DA2 to &H7FFF. CF83 will run, but there will be room left for only the smallest of applications.

And also note that loading other Word Sets; e.g. the Block Editor, the Controlled Reference Words Set, etc.; uses Application Dictionary space as well, and thus they will quickly overwhelm the 32K's space available.

--

The Memory Map shows 0000 - 09FF is reserved for System Variables, Buffers, and Stacks. After 20+ years, I don't remember the details of all the internal variables and buffers, but here are the most significant ones:

ADDRESSES (HEX)      CONTENTS

          001F       last = address of beginning of last dictionary entry
          0023       scr = screen most recently listed variable address
          0027       s0 = Bottom of the Data Stack
          002B       blk = Block number currently being interpreted
          002D       state = Compiling or Interpreting
          0048       dpl = Number of places for fractional conversion
          004A       fld = field length reserved for a number
          00FC       base = Current number base
          01D1       >in = Present character offset within the input stream
          01D5       span = Count of characters received by the last expect
          01D8       #tib = Number of bytes in the Terminal Input Buffer
 01DA  -  02D9       tib = Terminal Input Buffer
 036A  -  03FF       pad = PAD Buffer
 0400  -  05FF       Data Stack
 0600  -  07FF       Return Stack
          098B       context = dictionary search order variable address
          098D       current = vocabulary variable address

--

The Memory Map shows 2200 - 31FF is reserved for Block Buffers. More specifically:

ADDRESSES (HEX)      CONTENTS

 2200  -  25FF       Block Buffer 0
 2600  -  29FF       Block Buffer 1
 2A00  -  2DFF       Block Buffer 2
 2E00  -  31FF       Block Buffer 3

--

While collecting the information for this CF83 Memory Map Details page, I developed a routine for displaying a snapshot of the contents of the 6809 registers which you may find useful. To begin with, I wrote an assembly language routine to push all of the registers to the CF83 Data Stack. The .ASM and .BIN files are available on the:
           Registers Snapshot Assembly Disk     

In the assembly listing, note that the intent of line 230 is to record the PC register at the point where it was pointing to at the routine's BEGIN. The purpose of lines 250 and 260 is to record the U register (the CF83 Data Stack Pointer) at the point before any of the registers are pushed to the stack. Also note that register S is the CF83 Return Stack pointer. The register D value is that which it held at the routine's BEGIN. The assembly listing is available at:
           RegSnapASML.txt     

After assembling the REGSNAP.ASM routine, I translated it into a CF83 Forth Code word regsnap, and wrote the regrept colon definition to display the stack entries pushed by regsnap. I then combined the two operations into the reportRegistersSnapshot colon definition. Note that the four bytes appended to the end of regsnap (AE A1 6E 91) constitute the CF83 Inner Interpreter jump. These three words are contained in Block 2 of:
           Registers Report Snapshot Disk     

And, the Block Listing is is available at:
           RegReptSnapL.txt     


                                                                                                                                                                M.D.J. 2019/02/27