Followed discussions in the Pull reequest #681.

In particular, renamed "virtual operands" to "inline parameters".
This commit is contained in:
AIDA Shinra
2018-06-12 00:18:11 +09:00
parent 9283e9ca98
commit 03bb2f6a48
5 changed files with 30 additions and 26 deletions

View File

@@ -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;
}

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -105,7 +105,7 @@ typedef enum token_t {
INFOTOK_COMMENT,
INFOTOK_ADDR,
INFOTOK_SIZE,
INFOTOK_VOPERAND,
INFOTOK_PARAMSIZE,
/* ASMINC section */
INFOTOK_FILE,