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