[Coco] BASIC: order of operations query, and PRINT MEM
rick ulland
rickulland1 at gmail.com
Fri Jul 8 08:34:16 EDT 2022
I think you nailed it. We want
(PEEK(33)*256+PEEK(34)) - (PEEK(25)*256+PEEK(26))
the second term is subtracted from the first. But maybe we get
PEEK(33)*256+PEEK(34)-PEEK(25)*256 + PEEK(26)
part of the second term is added
Cool!
-ricku
On 7/7/2022 11:52 PM, Allen Huffman via Coco wrote:
> In BASIC, you can get the 16-bit value from two 8-bit values in memory like this:
>
> PRINT PEEK(25)*256+PEEK(26)
>
> That is the start of where a BASIC program goes.
>
> On a non-disk 32K Extended BASIC machine it prints 7681.
>
> BASIC can grow from there to the start of reserved string space:
>
> PRINT PEEK(33)*256+PEEK(34)
>
> On the same machine, that prints 32566.
>
> Max BASIC program would be 32566 - 7681 = 24885.
>
> But that’s about 26 bytes different from what PRINT MEM shows (24871) so there’s probably some overhead for variable tables and such.
>
> I noticed when I did the calculation in one line:
>
> PRINT PEEK(33)*256+PEEK(34)-PEEK(25)*256+PEEK(26)
>
> …I got 24887.
>
> At first I thought maybe some memory was being used to create the calculation. But when I did it again, enclosing each side with parenthesis:
>
> PRINT (PEEK(33)*256+PEEK(34))-(PEEK(25)*256+PEEK(26))
>
> ...I got 24885 — two bytes different.
>
> That made me think it was an order of operations thing.
>
> The 25/26 location/value should not change. Neither should the start of string space 34/35.
>
> PRINT PEEK(x)*256+PEEK(y)
>
> produces the same value as
>
> PRINT (PEEK(x)*256+PEEK(y))
>
> What is the obvious thing that is happening that I am not seeing?
>
> Thanks, much.
>
> --
> Allen Huffman - PO Box 7634 - Urbandale IA 50323 - 515-999-0227 (vmail/TXT only)
> http://www.subethasoftware.com -https://www.facebook.com/subethasoftware
>
>
>
More information about the Coco
mailing list