From: AIDA Shinra Date: Mon, 11 Jun 2018 15:18:11 +0000 (+0900) Subject: Followed discussions in the Pull reequest #681. X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=03bb2f6a48ffdb67f350a7ae189b3e3bb96175eb;p=cc65 Followed discussions in the Pull reequest #681. In particular, renamed "virtual operands" to "inline parameters". --- diff --git a/doc/da65.sgml b/doc/da65.sgml index c2d87ac92..15ce7c424 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -542,16 +542,16 @@ code. The following attributes are recognized: range, where VOPERAND + PARAMSIZE This optional attribute is followed by a numerical value. It tells the - assembler that subroutine calls to this label follow "virtual operands" + assembler that subroutine calls to this label follow "inline parameters" of the given bytes like this: - JSR LabelWith2BytesOfVoperand - .byte $00, $10 ; virtual operands - ; return here - BIT $0F + JSR LabelWithParamSize2 + .byte $00, $10 + (return here) + code... diff --git a/src/da65/handler.c b/src/da65/handler.c index 19b8946de..a5adb413e 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -51,7 +51,7 @@ -static unsigned short SubroutineVOperandSize[0x10000]; +static unsigned short SubroutineParamSize[0x10000]; /*****************************************************************************/ /* Helper functions */ @@ -748,18 +748,22 @@ void OH_JmpAbsoluteXIndirect (const OpcDesc* D) void OH_JsrAbsolute (const OpcDesc* D) { - unsigned VOperandSize = SubroutineVOperandSize[GetCodeWord(PC+1)]; + unsigned ParamSize = SubroutineParamSize[GetCodeWord(PC+1)]; OH_Absolute (D); - if (VOperandSize > 0) { + if (ParamSize > 0) { unsigned RemainingBytes; + unsigned BytesLeft; PC += D->Size; RemainingBytes = GetRemainingBytes(); - if (RemainingBytes < VOperandSize) { - VOperandSize = RemainingBytes; + if (RemainingBytes < ParamSize) { + ParamSize = RemainingBytes; } - if (VOperandSize > 0) { - DataByteLine (VOperandSize); /* FIXME: follow BytesPerLine */ - PC += VOperandSize; + BytesLeft = ParamSize; + while (BytesLeft > 0) { + unsigned Chunk = (BytesLeft > BytesPerLine)? BytesPerLine : BytesLeft; + DataByteLine (Chunk); + BytesLeft -= Chunk; + PC += Chunk; } PC -= D->Size; } @@ -767,7 +771,7 @@ void OH_JsrAbsolute (const OpcDesc* D) -void SetSubroutineVOperand (unsigned Addr, unsigned Size) +void SetSubroutineParamSize (unsigned Addr, unsigned Size) { - SubroutineVOperandSize[Addr] = Size; + SubroutineParamSize[Addr] = Size; } diff --git a/src/da65/handler.h b/src/da65/handler.h index 96b73f2c7..eaa66e7fd 100644 --- a/src/da65/handler.h +++ b/src/da65/handler.h @@ -106,7 +106,7 @@ void OH_JmpAbsoluteIndirect (const OpcDesc* D); void OH_JmpAbsoluteXIndirect (const OpcDesc* D); void OH_JsrAbsolute (const OpcDesc*); -void SetSubroutineVOperand (unsigned Addr, unsigned Size); +void SetSubroutineParamSize (unsigned Addr, unsigned Size); /* End of handler.h */ diff --git a/src/da65/infofile.c b/src/da65/infofile.c index 3bfa15f51..c5040e82a 100644 --- a/src/da65/infofile.c +++ b/src/da65/infofile.c @@ -381,7 +381,7 @@ static void LabelSection (void) { "ADDR", INFOTOK_ADDR }, { "NAME", INFOTOK_NAME }, { "SIZE", INFOTOK_SIZE }, - { "VOPERAND", INFOTOK_VOPERAND }, + { "PARAMSIZE", INFOTOK_PARAMSIZE }, }; /* Locals - initialize to avoid gcc warnings */ @@ -389,7 +389,7 @@ static void LabelSection (void) char* Comment = 0; long Value = -1; long Size = -1; - long VOperand = -1; + long ParamSize = -1; /* Skip the token */ InfoNextTok (); @@ -451,14 +451,14 @@ static void LabelSection (void) InfoNextTok (); break; - case INFOTOK_VOPERAND: + case INFOTOK_PARAMSIZE: InfoNextTok (); - if (VOperand >= 0) { - InfoError ("VOperand already given"); + if (ParamSize >= 0) { + InfoError ("ParamSize already given"); } InfoAssureInt (); InfoRangeCheck (1, 0x10000); - VOperand = InfoIVal; + ParamSize = InfoIVal; InfoNextTok (); break; @@ -498,8 +498,8 @@ static void LabelSection (void) } else { AddExtLabelRange ((unsigned) Value, Name, Size); } - if (VOperand >= 0) { - SetSubroutineVOperand ((unsigned) Value, (unsigned) VOperand); + if (ParamSize >= 0) { + SetSubroutineParamSize ((unsigned) Value, (unsigned) ParamSize); } /* Define the comment */ diff --git a/src/da65/scanner.h b/src/da65/scanner.h index 14a3ef679..d4e38177b 100644 --- a/src/da65/scanner.h +++ b/src/da65/scanner.h @@ -105,7 +105,7 @@ typedef enum token_t { INFOTOK_COMMENT, INFOTOK_ADDR, INFOTOK_SIZE, - INFOTOK_VOPERAND, + INFOTOK_PARAMSIZE, /* ASMINC section */ INFOTOK_FILE,