mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 17:30:50 +00:00
Check for and flag address size modifiers that are invalid for the choosen CPU.
git-svn-id: svn://svn.cc65.org/cc65/trunk@3927 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
9082762519
commit
c94e82f8b2
@ -127,6 +127,11 @@ static unsigned char OptionalAddrSize (void)
|
|||||||
if (Tok == TOK_COLON) {
|
if (Tok == TOK_COLON) {
|
||||||
NextTok ();
|
NextTok ();
|
||||||
AddrSize = ParseAddrSize ();
|
AddrSize = ParseAddrSize ();
|
||||||
|
if (!ValidAddrSizeForCPU (AddrSize)) {
|
||||||
|
/* Print an error and reset to default */
|
||||||
|
Error ("Invalid address size specification for current CPU");
|
||||||
|
AddrSize = ADDR_SIZE_DEFAULT;
|
||||||
|
}
|
||||||
NextTok ();
|
NextTok ();
|
||||||
}
|
}
|
||||||
return AddrSize;
|
return AddrSize;
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2003-2005, Ullrich von Bassewitz */
|
/* (C) 2003-2009, Ullrich von Bassewitz */
|
||||||
/* Römerstrasse 52 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
|
#include "addrsize.h"
|
||||||
|
#include "check.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "strutil.h"
|
#include "strutil.h"
|
||||||
|
|
||||||
@ -82,6 +84,37 @@ const unsigned CPUIsets[CPU_COUNT] = {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ValidAddrSizeForCPU (unsigned char AddrSize)
|
||||||
|
/* Check if the given address size is valid for the current CPU */
|
||||||
|
{
|
||||||
|
switch (AddrSize) {
|
||||||
|
case ADDR_SIZE_DEFAULT:
|
||||||
|
/* Always supported */
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case ADDR_SIZE_ZP:
|
||||||
|
/* Not supported by None and Sweet16 */
|
||||||
|
return (CPU != CPU_NONE && CPU != CPU_SWEET16);
|
||||||
|
|
||||||
|
case ADDR_SIZE_ABS:
|
||||||
|
/* Not supported by None */
|
||||||
|
return (CPU != CPU_NONE);
|
||||||
|
|
||||||
|
case ADDR_SIZE_FAR:
|
||||||
|
/* Only supported by 65816 */
|
||||||
|
return (CPU == CPU_65816);
|
||||||
|
|
||||||
|
case ADDR_SIZE_LONG:
|
||||||
|
/* Not supported by any CPU */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FAIL ("Invalid address size");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cpu_t FindCPU (const char* Name)
|
cpu_t FindCPU (const char* Name)
|
||||||
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
|
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
|
||||||
* the given name is no valid target.
|
* the given name is no valid target.
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2003-2005, Ullrich von Bassewitz */
|
/* (C) 2003-2009, Ullrich von Bassewitz */
|
||||||
/* Römerstrasse 52 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
@ -89,6 +89,9 @@ extern const unsigned CPUIsets[CPU_COUNT];
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ValidAddrSizeForCPU (unsigned char AddrSize);
|
||||||
|
/* Check if the given address size is valid for the current CPU */
|
||||||
|
|
||||||
cpu_t FindCPU (const char* Name);
|
cpu_t FindCPU (const char* Name);
|
||||||
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
|
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
|
||||||
* the given name is no valid target.
|
* the given name is no valid target.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user