[Coco] CoCo 2 16k.. Upgrade or no?
lost at l-w.ca
Wed Mar 14 11:58:19 EDT 2012
On 12-03-14 01:36 AM, Arthur Flexser wrote:
> The ?mem command gives the amount of memory between the start of
> program memory and the top of available memory--the amount of memory
> Basic programs have to work with. In a 16K CoCo without Disk Basic,
> and with the default PCLEAR 4 in effect, program memory starts at
> $1E01 (or $2601 with Disk Basic). Basic reserves 200 bytes of string
> space at startup, at the top of memory. So in a 16K CoCo without Disk
> Basic, available memory is $4000 - $1E01 - 200, which comes out to
> 8503, 16 bytes higher than the observed figure of 8487. (The 16 bytes
> are probably reserved for stack space.) Add 16,384 (16K) to that, and
> you get what ?MEM should give in a 32K/64K CoCo.
For the TL;DR crowd, this explains exactly where the 8487 number above
MEM actually calculates the amount of space between the current stack
pointer (S) and the top of the variable table. Thus it gives an
approximation of the number of bytes available to be used by the system
stack and new variables. The system stack is used for book keeping for
GOSUB, FOR, and expression evaluation, among other things. The memory
map looks like this, starting from 0:
Direct page and other color basic variables
32 column text screen
disk basic variables and data (if DECB is present)
PMODE graphics memory (if ECB is present)
<top of "RAM">
Observing the memory detection code in the color basic ROM, I see it
wastes two bytes at the top of RAM - that is, it detects $3FFE as the
top of RAM instead of $4000 as the first non-RAM byte. On a 32K or 64K
machine, that would be $7FFE. On a coco3, it is forced to $7FFF (which
explains why MEM returns one additional free byte on a coco3 compared to
a 32K coco1 or coco2).
Continuing on with a 16K machine, 200 bytes are then allocated for
string space which moves the top of free memory to $3F36. The stack
pointer is then set to that address and a zero byte is pushed onto the
stack. This makes the stack pointer $3F35 on a cold start.
The end of the basic program is actually two bytes after the start of
the basic program, even when there is no program present. That means
variables and all that starts at $1E03 by default in ECB.
With nothing else involved, that should give 8499 as the MEM value.
However, because the stack pointer is used to determine the top of free
memory, we also need to account for the usage of the stack during
interpretation. So let's trace the call path for ?MEM:
First, the command processing routine is called (2 bytes return address
on the stack) which transfers control directly to the PRINT command.
PRINT uses an internal subroutine for handling its arguments (another 2
bytes return address on the stack). That internal subroutine then calls
the expression evaluation routine (another 2 bytes return address on the
stack). The expression evaluator stores a zero byte on the stack then
makes an internal routine call for yet another 2 bytes on the stack.
This routine eventually gets around to calling the MEM routine (another
two bytes return address on the stack).
I make that 11 bytes stored on the stack by the time MEM gets to do any
operations on it. That gives the observed value of 8487 when MEM grabs
the stack pointer and subtracts it from the top of the variable table
(which is empty so it's really the top of the empty program).
As a consequence of all of the above, if you use MEM in a more complex
expression, you will get a lower number even without any variables
defined. For instance, "?3*MEM/3" gives 8475. Also, defining variables
will reduce the result. For instance, doing "A=0" before "?MEM" gives
8480, accounting for the 7 byte table entry for A. Obviously adding
program lines will also reduce the result.
> On Tue, Mar 13, 2012 at 8:35 PM,<haywire666 at aol.com> wrote:
>> Thats interesting I don't remember the ?mem thing...
>> Can someone provide a list of the #'s and what they mean?
>> 8487 means 16k?
>> I got 24871 on the coco2 I have on at the moment, does that mean it only has 48k?
>> -----Original Message-----
>> From: Chad H<chadbh74 at hotmail.com>
>> To: 'CoCoList for Color Computer Enthusiasts'<coco at maltedmedia.com>
>> Sent: Tue, Mar 13, 2012 8:31 pm
>> Subject: [Coco] CoCo 2 16k.. Upgrade or no?
>> Was just given a virgin CoCo2 26-3136.. It's apparently 16k, only shows 8487
>> from "?MEM". I already have a spare 64k CoCo, don't really need this one.
>> I will probably put it up for sell. Question though.would it be better to
>> leave it as is or perform a 64K upgrade to it? I already have enough spare
>> RAM IC's and sockets and it already has ECB 1.1.
>> Coco mailing list
>> Coco at maltedmedia.com
>> Coco mailing list
>> Coco at maltedmedia.com
> Coco mailing list
> Coco at maltedmedia.com
More information about the Coco