mirror of
https://github.com/cc65/cc65.git
synced 2025-01-03 01:31:55 +00:00
New segment type renamed to "overwrite".
This commit is contained in:
parent
c7bb27bac9
commit
d293d766ef
@ -193,8 +193,8 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M)
|
|||||||
NewAddr += M->Start;
|
NewAddr += M->Start;
|
||||||
}
|
}
|
||||||
if (DoWrite || (M->Flags & MF_FILL) != 0) {
|
if (DoWrite || (M->Flags & MF_FILL) != 0) {
|
||||||
/* Seek in "replace" segments */
|
/* Seek in "overwrite" segments */
|
||||||
if (S->Flags & SF_REPLACE) {
|
if (S->Flags & SF_OVERWRITE) {
|
||||||
fseek (D->F, NewAddr - M->Start, SEEK_SET);
|
fseek (D->F, NewAddr - M->Start, SEEK_SET);
|
||||||
} else {
|
} else {
|
||||||
WriteMult (D->F, M->FillVal, NewAddr-Addr);
|
WriteMult (D->F, M->FillVal, NewAddr-Addr);
|
||||||
|
@ -653,7 +653,7 @@ static void ParseSegments (void)
|
|||||||
{ "RW", CFGTOK_RW },
|
{ "RW", CFGTOK_RW },
|
||||||
{ "BSS", CFGTOK_BSS },
|
{ "BSS", CFGTOK_BSS },
|
||||||
{ "ZP", CFGTOK_ZP },
|
{ "ZP", CFGTOK_ZP },
|
||||||
{ "REPLACE", CFGTOK_REPLACE },
|
{ "OVERWRITE", CFGTOK_OVERWRITE },
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned Count;
|
unsigned Count;
|
||||||
@ -754,12 +754,12 @@ static void ParseSegments (void)
|
|||||||
FlagAttr (&S->Attr, SA_TYPE, "TYPE");
|
FlagAttr (&S->Attr, SA_TYPE, "TYPE");
|
||||||
CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
|
CfgSpecialToken (Types, ENTRY_COUNT (Types), "Type");
|
||||||
switch (CfgTok) {
|
switch (CfgTok) {
|
||||||
case CFGTOK_RO: S->Flags |= SF_RO; break;
|
case CFGTOK_RO: S->Flags |= SF_RO; break;
|
||||||
case CFGTOK_RW: /* Default */ break;
|
case CFGTOK_RW: /* Default */ break;
|
||||||
case CFGTOK_BSS: S->Flags |= SF_BSS; break;
|
case CFGTOK_BSS: S->Flags |= SF_BSS; break;
|
||||||
case CFGTOK_ZP: S->Flags |= (SF_BSS | SF_ZP); break;
|
case CFGTOK_ZP: S->Flags |= (SF_BSS | SF_ZP); break;
|
||||||
case CFGTOK_REPLACE: S->Flags |= (SF_REPLACE | SF_RO); break;
|
case CFGTOK_OVERWRITE: S->Flags |= (SF_OVERWRITE | SF_RO); break;
|
||||||
default: Internal ("Unexpected token: %d", CfgTok);
|
default: Internal ("Unexpected token: %d", CfgTok);
|
||||||
}
|
}
|
||||||
CfgNextTok ();
|
CfgNextTok ();
|
||||||
break;
|
break;
|
||||||
@ -1797,7 +1797,7 @@ unsigned CfgProcess (void)
|
|||||||
for (I = 0; I < CollCount (&MemoryAreas); ++I) {
|
for (I = 0; I < CollCount (&MemoryAreas); ++I) {
|
||||||
unsigned J;
|
unsigned J;
|
||||||
unsigned long Addr;
|
unsigned long Addr;
|
||||||
unsigned Replaces = 0;
|
unsigned Overwrites = 0;
|
||||||
|
|
||||||
/* Get the next memory area */
|
/* Get the next memory area */
|
||||||
MemoryArea* M = CollAtUnchecked (&MemoryAreas, I);
|
MemoryArea* M = CollAtUnchecked (&MemoryAreas, I);
|
||||||
@ -1851,23 +1851,23 @@ unsigned CfgProcess (void)
|
|||||||
/* Remember the start address before handling this segment */
|
/* Remember the start address before handling this segment */
|
||||||
unsigned long StartAddr = Addr;
|
unsigned long StartAddr = Addr;
|
||||||
|
|
||||||
/* Take note of "replace" segments and make sure there are no other
|
/* Take note of "overwrite" segments and make sure there are no
|
||||||
** segment types following them in current memory region.
|
** other segment types following them in current memory region.
|
||||||
*/
|
*/
|
||||||
if (S->Flags & SF_REPLACE) {
|
if (S->Flags & SF_OVERWRITE) {
|
||||||
if (S->Flags & (SF_OFFSET | SF_START)) {
|
if (S->Flags & (SF_OFFSET | SF_START)) {
|
||||||
++Replaces;
|
++Overwrites;
|
||||||
} else {
|
} else {
|
||||||
CfgError (GetSourcePos (M->LI),
|
CfgError (GetSourcePos (M->LI),
|
||||||
"Segment `%s' of type `replace' requires either"
|
"Segment `%s' of type `overwrite' requires either"
|
||||||
" `Start' or `Offset' attribute to be specified",
|
" `Start' or `Offset' attribute to be specified",
|
||||||
GetString (S->Name));
|
GetString (S->Name));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Replaces > 0) {
|
if (Overwrites > 0) {
|
||||||
CfgError (GetSourcePos (M->LI),
|
CfgError (GetSourcePos (M->LI),
|
||||||
"Segment `%s' is preceded by at least one segment"
|
"Segment `%s' is preceded by at least one segment"
|
||||||
" of type `replace'",
|
" of type `overwrite'",
|
||||||
GetString (S->Name));
|
GetString (S->Name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1921,7 +1921,7 @@ unsigned CfgProcess (void)
|
|||||||
NewAddr += M->Start;
|
NewAddr += M->Start;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S->Flags & SF_REPLACE) {
|
if (S->Flags & SF_OVERWRITE) {
|
||||||
if (NewAddr < M->Start) {
|
if (NewAddr < M->Start) {
|
||||||
CfgError (GetSourcePos (S->LI),
|
CfgError (GetSourcePos (S->LI),
|
||||||
"Segment `%s' begins before memory area `%s'",
|
"Segment `%s' begins before memory area `%s'",
|
||||||
|
@ -96,7 +96,7 @@ struct SegDesc {
|
|||||||
#define SF_RUN_DEF 0x0200 /* RUN symbols already defined */
|
#define SF_RUN_DEF 0x0200 /* RUN symbols already defined */
|
||||||
#define SF_LOAD_DEF 0x0400 /* LOAD symbols already defined */
|
#define SF_LOAD_DEF 0x0400 /* LOAD symbols already defined */
|
||||||
#define SF_FILLVAL 0x0800 /* Segment has separate fill value */
|
#define SF_FILLVAL 0x0800 /* Segment has separate fill value */
|
||||||
#define SF_REPLACE 0x1000 /* Segment can replace (part of) another one */
|
#define SF_OVERWRITE 0x1000 /* Segment can overwrite (part of) another one */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ typedef enum {
|
|||||||
CFGTOK_RW,
|
CFGTOK_RW,
|
||||||
CFGTOK_BSS,
|
CFGTOK_BSS,
|
||||||
CFGTOK_ZP,
|
CFGTOK_ZP,
|
||||||
CFGTOK_REPLACE,
|
CFGTOK_OVERWRITE,
|
||||||
|
|
||||||
CFGTOK_O65,
|
CFGTOK_O65,
|
||||||
CFGTOK_BIN,
|
CFGTOK_BIN,
|
||||||
|
Loading…
Reference in New Issue
Block a user