Support for the .BANKBYTES, .LOBYTES and .HIBYTES pseudo functions contributed

by Kevin Schuetz <scrapdog@runbox.com>.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3965 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz
2009-05-18 16:11:34 +00:00
parent 37e08cac59
commit 8e8993de7e
7 changed files with 173 additions and 4 deletions

View File

@@ -319,7 +319,7 @@ static ExprNode* Symbol (SymEntry* S)
static ExprNode* FuncBankByte (void)
ExprNode* FuncBankByte (void)
/* Handle the .BANKBYTE builtin function */
{
return BankByte (Expression ());
@@ -393,7 +393,7 @@ static ExprNode* FuncDefined (void)
static ExprNode* FuncHiByte (void)
ExprNode* FuncHiByte (void)
/* Handle the .HIBYTE builtin function */
{
return HiByte (Expression ());
@@ -409,7 +409,7 @@ static ExprNode* FuncHiWord (void)
static ExprNode* FuncLoByte (void)
ExprNode* FuncLoByte (void)
/* Handle the .LOBYTE builtin function */
{
return LoByte (Expression ());

View File

@@ -146,6 +146,14 @@ void ExprGuessedAddrSize (const ExprNode* Expr, unsigned char AddrSize);
* and mark these symbols accordingly.
*/
ExprNode* FuncBankByte (void);
/* Handle the .BANKBYTE builtin function */
ExprNode* FuncLoByte (void);
/* Handle the .LOBYTE builtin function */
ExprNode* FuncHiByte (void);
/* Handle the .HIBYTE builtin function */
/* End of expr.h */

View File

@@ -482,6 +482,20 @@ static void DoAutoImport (void)
}
static void DoBankBytes (void)
/* Define bytes, extracting the bank byte from each expression in the list */
{
while (1) {
EmitByte (FuncBankByte ());
if (Tok != TOK_COMMA) {
break;
} else {
NextTok ();
}
}
}
static void DoBss (void)
/* Switch to the BSS segment */
@@ -991,6 +1005,20 @@ static void DoGlobalZP (void)
}
static void DoHiBytes (void)
/* Define bytes, extracting the hi byte from each expression in the list */
{
while (1) {
EmitByte (FuncHiByte ());
if (Tok != TOK_COMMA) {
break;
} else {
NextTok ();
}
}
}
static void DoI16 (void)
/* Switch the index registers to 16 bit mode (assembler only) */
@@ -1221,6 +1249,20 @@ static void DoList (void)
static void DoLoBytes (void)
/* Define bytes, extracting the lo byte from each expression in the list */
{
while (1) {
EmitByte (FuncLoByte ());
if (Tok != TOK_COMMA) {
break;
} else {
NextTok ();
}
}
}
static void DoListBytes (void)
/* Set maximum number of bytes to list for one line */
{
@@ -1725,6 +1767,7 @@ static CtrlDesc CtrlCmdTab [] = {
{ ccNone, DoAssert },
{ ccNone, DoAutoImport },
{ ccNone, DoUnexpected }, /* .BANKBYTE */
{ ccNone, DoBankBytes },
{ ccNone, DoUnexpected }, /* .BLANK */
{ ccNone, DoBss },
{ ccNone, DoByte },
@@ -1768,6 +1811,7 @@ static CtrlDesc CtrlCmdTab [] = {
{ ccNone, DoGlobal },
{ ccNone, DoGlobalZP },
{ ccNone, DoUnexpected }, /* .HIBYTE */
{ ccNone, DoHiBytes },
{ ccNone, DoUnexpected }, /* .HIWORD */
{ ccNone, DoI16 },
{ ccNone, DoI8 },
@@ -1795,6 +1839,7 @@ static CtrlDesc CtrlCmdTab [] = {
{ ccNone, DoList },
{ ccNone, DoListBytes },
{ ccNone, DoUnexpected }, /* .LOBYTE */
{ ccNone, DoLoBytes },
{ ccNone, DoUnexpected }, /* .LOCAL */
{ ccNone, DoLocalChar },
{ ccNone, DoUnexpected }, /* .LOWORD */

View File

@@ -146,6 +146,7 @@ struct DotKeyword {
{ ".ASSERT", TOK_ASSERT },
{ ".AUTOIMPORT", TOK_AUTOIMPORT },
{ ".BANKBYTE", TOK_BANKBYTE },
{ ".BANKBYTES", TOK_BANKBYTES },
{ ".BITAND", TOK_AND },
{ ".BITNOT", TOK_NOT },
{ ".BITOR", TOK_OR },
@@ -199,6 +200,7 @@ struct DotKeyword {
{ ".GLOBAL", TOK_GLOBAL },
{ ".GLOBALZP", TOK_GLOBALZP },
{ ".HIBYTE", TOK_HIBYTE },
{ ".HIBYTES", TOK_HIBYTES },
{ ".HIWORD", TOK_HIWORD },
{ ".I16", TOK_I16 },
{ ".I8", TOK_I8 },
@@ -226,6 +228,7 @@ struct DotKeyword {
{ ".LIST", TOK_LIST },
{ ".LISTBYTES", TOK_LISTBYTES },
{ ".LOBYTE", TOK_LOBYTE },
{ ".LOBYTES", TOK_LOBYTES },
{ ".LOCAL", TOK_LOCAL },
{ ".LOCALCHAR", TOK_LOCALCHAR },
{ ".LOWORD", TOK_LOWORD },
@@ -680,7 +683,7 @@ static unsigned char FindDotKeyword (void)
}
static void ReadIdent (void)
/* Read an identifier from the current input position into Ident. Filling SVal
* starts at the current position with the next character in C. It is assumed

View File

@@ -127,6 +127,7 @@ typedef enum Token {
TOK_ASSERT,
TOK_AUTOIMPORT,
TOK_BANKBYTE,
TOK_BANKBYTES,
TOK_BLANK,
TOK_BSS,
TOK_BYTE,
@@ -170,6 +171,7 @@ typedef enum Token {
TOK_GLOBAL,
TOK_GLOBALZP,
TOK_HIBYTE,
TOK_HIBYTES,
TOK_HIWORD,
TOK_I16,
TOK_I8,
@@ -197,6 +199,7 @@ typedef enum Token {
TOK_LIST,
TOK_LISTBYTES,
TOK_LOBYTE,
TOK_LOBYTES,
TOK_LOCAL,
TOK_LOCALCHAR,
TOK_LOWORD,