wh_hsn
Member level 1
iar for z80
Hi All,
Anyone here familiar with IAR C compiler for the Z80?
I've just inherited a project that was written for a Z80 platform using IAR 2.01G compiler.
It’s using banked memory to cross the 64k boundary.
I've a problem addressing variables across memory banks.
Consider the following example:
///////////// file: moduleA.c ////////////////////////////////
//Module A:
#pragma memory=dataseg(MOD_A_DATA)
MOD_A_STRUC mod_a_struc;
#pragma memory=constseg(MOD_A_CONST)
const char teststr[]="test string";
#pragma memory=default
#pragma codeseg(MOD_A_CODE)
Void MOD_A_SET(MOD_A_STRUC * m, int x, int y)
{
m->member1 = x;
m->member2 = y;
}
int MOD_A_GET1(MOD_A_STRUC * m, int x, int y)
{
return m->member1;
}
int MOD_A_GET2(MOD_A_STRUC * m, int x, int y)
{
return m->member2;
}
/////////////// end module A ////////////////////////////////
Now the main module:
///////////// file: main.c ////////////////////////////////
//Module main:
#pragma memory=dataseg(MOD_A_DATA)
extern MOD_A_STRUC mod_a_struc;
#pragma memory=constseg(MOD_A_CONST)
extern const char teststr[];
#pragma memory=default
void main(void)
{
int I, j;
MOD_A_SET(mod_a_struc, 0x12, 0x34);
i = MOD_A_GET1(mod_a_struc);
j = MOD_A_GET2(mod_a_struc);
printf("%s : %i %i\n\r", teststr, i, j );
}
///////////// end module main ////////////////////////////////
The calls to the set & get function don't seem to address the right mod_a_struc in memory.
What am I doing wrong?!!!
Thanks & best regards,
Waleed Hasan
Hi All,
Anyone here familiar with IAR C compiler for the Z80?
I've just inherited a project that was written for a Z80 platform using IAR 2.01G compiler.
It’s using banked memory to cross the 64k boundary.
I've a problem addressing variables across memory banks.
Consider the following example:
///////////// file: moduleA.c ////////////////////////////////
//Module A:
#pragma memory=dataseg(MOD_A_DATA)
MOD_A_STRUC mod_a_struc;
#pragma memory=constseg(MOD_A_CONST)
const char teststr[]="test string";
#pragma memory=default
#pragma codeseg(MOD_A_CODE)
Void MOD_A_SET(MOD_A_STRUC * m, int x, int y)
{
m->member1 = x;
m->member2 = y;
}
int MOD_A_GET1(MOD_A_STRUC * m, int x, int y)
{
return m->member1;
}
int MOD_A_GET2(MOD_A_STRUC * m, int x, int y)
{
return m->member2;
}
/////////////// end module A ////////////////////////////////
Now the main module:
///////////// file: main.c ////////////////////////////////
//Module main:
#pragma memory=dataseg(MOD_A_DATA)
extern MOD_A_STRUC mod_a_struc;
#pragma memory=constseg(MOD_A_CONST)
extern const char teststr[];
#pragma memory=default
void main(void)
{
int I, j;
MOD_A_SET(mod_a_struc, 0x12, 0x34);
i = MOD_A_GET1(mod_a_struc);
j = MOD_A_GET2(mod_a_struc);
printf("%s : %i %i\n\r", teststr, i, j );
}
///////////// end module main ////////////////////////////////
The calls to the set & get function don't seem to address the right mod_a_struc in memory.
What am I doing wrong?!!!
Thanks & best regards,
Waleed Hasan