Re: [cc65] Reusing memory segment?

From: Greg King <greg.king41verizon.net>
Date: 2011-12-02 06:24:10
From: "Karri Kaksonen"; on Tues., Nov. 22, 2011; at 10:22 AM -0500
>
> On 11/22/2011 04:43 PM, Joseph Rose wrote:
> > Let's say I'm working on a big project, and need a temporary buffer,
> > and can reuse the same section of memory (e.g., CBM tape buffers)
> > for several different purposes.  Rather than access the memory
> > through a pointer variable, I'd like to use an absolute address.
> > How do I do that?
>
> Create a segment for that purpose, and give it an absolute address.
>
> In a configuration file:
> MEMORY {
>      BUF1: start = $2400, size = $122C, file = "";
>      BUF2: start = $2400, size = $122C, file = "";
> }
> SEGMENTS {
>      TAPEBUFFER: load = BUF1, type = rw;
>      TEMPBUFFER: load = BUF2, type = rw;
> }
>
> Later in the process of building your program,
> you can use those buffers like this:
> cl65 --data-segment=TAPEBUFFER -c tapebuffer.c
> cl65 --data-segment=TEMPBUFFER -c tempbuffer.c
>
> Inside "tapebuffer.c", you can allocate space for your data:
> int abc;
> char name[48];
>
> In "tempbuffer.c", you can allocate some other data:
> char b;
> char c;
> int d[10];
>
> In that way, you don't need pointers, as the linker will take care of
> re-using the space.

Or, if you don't want to use a special configuration file, then you can
use macroes to hide the absolute addresses:

#define TAPE_BUFFER ((unsigned char*)0x033c)
    or
#define TAPE_BUFFER ((unsigned char[192])0x033c)

Then, you can use them as arrays:

TAPE_BUFFER[location] = data;
  ...
fwrite(TAPE_BUFFER, 1, 128, fd);

----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo@musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
Received on Fri Dec 2 07:26:19 2011

This archive was generated by hypermail 2.1.8 : 2011-12-02 07:26:25 CET