1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-20 05:29:39 +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:
uz 2009-02-10 21:10:50 +00:00
parent 9082762519
commit c94e82f8b2
3 changed files with 45 additions and 4 deletions

View File

@ -127,6 +127,11 @@ static unsigned char OptionalAddrSize (void)
if (Tok == TOK_COLON) {
NextTok ();
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 ();
}
return AddrSize;

View File

@ -6,8 +6,8 @@
/* */
/* */
/* */
/* (C) 2003-2005, Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* (C) 2003-2009, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* */
@ -34,6 +34,8 @@
/* common */
#include "addrsize.h"
#include "check.h"
#include "cpu.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)
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
* the given name is no valid target.

View File

@ -6,8 +6,8 @@
/* */
/* */
/* */
/* (C) 2003-2005, Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* (C) 2003-2009, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* 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);
/* Find a CPU by name and return the target id. CPU_UNKNOWN is returned if
* the given name is no valid target.