From 5f823be5dde05d47a0d5ea46e5f318b896aee90b Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 23 Jan 2025 12:37:48 +0900 Subject: [PATCH] [MN1610] Disassemble relative addressing simple as absolute --- src/dis_mn1610.cpp | 7 +------ test/test_asm_mn1610.cpp | 6 ++++++ test/test_dis_mn1610.cpp | 8 ++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/dis_mn1610.cpp b/src/dis_mn1610.cpp index b0daffd1..bb0b3667 100644 --- a/src/dis_mn1610.cpp +++ b/src/dis_mn1610.cpp @@ -71,12 +71,7 @@ void DisMn1610::outGenericAddr(StrBuffer &out, Config::opcode_t opc, Config::uin out.letter('('); // Fall-through case 1: - if (_relativeTarget) { - outRelAddr(out, target, base, 8); - } else { - outAbsAddr(out, target).letter('-').letter(_curSym); - outRegName(out.letter('('), REG_IC).letter(')'); - } + outRelAddr(out, target, base, 8); if (mode == 3) out.letter(')'); break; diff --git a/test/test_asm_mn1610.cpp b/test/test_asm_mn1610.cpp index 50a0e9a2..1439bc50 100644 --- a/test/test_asm_mn1610.cpp +++ b/test/test_asm_mn1610.cpp @@ -68,17 +68,23 @@ void test_transfer() { ERRT( "L R5, 0x10", OPERAND_NOT_ALLOWED, "R5, 0x10"); ERRT( "L X2, 0x10", OPERAND_NOT_ALLOWED, "X2, 0x10"); ATEST(0x1000, "L R2, *-128", 0xC000|(1<<11)|(2<<8)|0x80); + ATEST(0x1000, "L R2, 0x0F80", 0xC000|(1<<11)|(2<<8)|0x80); ATEST(0x1000, "l r2, 0x0f80-*(ic)", 0xC000|(1<<11)|(2<<8)|0x80); AERRT(0x1000, "L R2, *-129", OPERAND_TOO_FAR, "*-129", 0xC000|(1<<11)|(2<<8)|0x7F); + AERRT(0x1000, "L R2, 0x0F7F", OPERAND_TOO_FAR, "0x0F7F", 0xC000|(1<<11)|(2<<8)|0x7F); AERRT(0x1000, "L R2, 0x0F7F-*(IC)", OPERAND_TOO_FAR, "0x0F7F-*(IC)", 0xC000|(1<<11)|(2<<8)|0x7F); AERRT(0x1000, "L R2, *+128", OPERAND_TOO_FAR, "*+128", 0xC000|(1<<11)|(2<<8)|0x80); + AERRT(0x1000, "L R2, 0x1080", OPERAND_TOO_FAR, "0x1080", 0xC000|(1<<11)|(2<<8)|0x80); AERRT(0x1000, "L R2, 0x1080-*(IC)", OPERAND_TOO_FAR, "0x1080-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80); TEST( "L R3, (0xFF)", 0xC000|(2<<11)|(3<<8)|0xFF); ATEST(0x1000, "L R4, (*+127)", 0xC000|(3<<11)|(4<<8)|0x7F); + ATEST(0x1000, "L R4, (0x107F)", 0xC000|(3<<11)|(4<<8)|0x7F); ATEST(0x1000, "L R4, (0x107F-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F); AERRT(0x1000, "L R4, (*-129)", OPERAND_TOO_FAR, "(*-129)", 0xC000|(3<<11)|(4<<8)|0x7F); + AERRT(0x1000, "L R4, (0x0F7F)", OPERAND_TOO_FAR, "(0x0F7F)", 0xC000|(3<<11)|(4<<8)|0x7F); AERRT(0x1000, "L R4, (0x0F7F-*(IC))", OPERAND_TOO_FAR, "(0x0F7F-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F); AERRT(0x1000, "L R4, (*+128)", OPERAND_TOO_FAR, "(*+128)", 0xC000|(3<<11)|(4<<8)|0x80); + AERRT(0x1000, "L R4, (0x1080)", OPERAND_TOO_FAR, "(0x1080)", 0xC000|(3<<11)|(4<<8)|0x80); AERRT(0x1000, "L R4, (0x1080-*(IC))", OPERAND_TOO_FAR, "(0x1080-*(IC))", 0xC000|(3<<11)|(4<<8)|0x80); TEST( "L R0, 128(X0)", 0xC000|(4<<11)|(0<<8)|0x80); TEST( "L SP, 255(X1)", 0xC000|(5<<11)|(5<<8)|0xFF); diff --git a/test/test_dis_mn1610.cpp b/test/test_dis_mn1610.cpp index ccc4162c..1cfc4fed 100644 --- a/test/test_dis_mn1610.cpp +++ b/test/test_dis_mn1610.cpp @@ -84,11 +84,11 @@ void test_transfer() { disassembler.setOption("relative", "off"); if (is1610()) { - ATEST(0x1000, "L", "R2, X'0F80'-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80); - ATEST(0x1000, "L", "R4, (X'107F'-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F); + ATEST(0x1000, "L", "R2, X'0F80'", 0xC000|(1<<11)|(2<<8)|0x80); + ATEST(0x1000, "L", "R4, (X'107F')", 0xC000|(3<<11)|(4<<8)|0x7F); } else { - ATEST(0x1000, "L", "R2, X'00F80'-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80); - ATEST(0x1000, "L", "R4, (X'0107F'-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F); + ATEST(0x1000, "L", "R2, X'00F80'", 0xC000|(1<<11)|(2<<8)|0x80); + ATEST(0x1000, "L", "R4, (X'0107F')", 0xC000|(3<<11)|(4<<8)|0x7F); } disassembler.setOption("relative", "enable");