From 7a0f9f95281b0b79ae0f8980894652316579531f Mon Sep 17 00:00:00 2001 From: marcobaye Date: Wed, 3 Jun 2020 11:02:16 +0000 Subject: [PATCH] disabled NOP mnemonic on m65 cpu git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@211 4df02467-bbd4-4a76-a152-e7ce94205b78 --- src/mnemo.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/mnemo.c b/src/mnemo.c index 97d53ee..317d6d1 100644 --- a/src/mnemo.c +++ b/src/mnemo.c @@ -73,7 +73,8 @@ enum mnemogroup { GROUP_REL16_2, // 16bit relative to pc+2 Byte value = opcode GROUP_REL16_3, // 16bit relative to pc+3 Byte value = opcode GROUP_BOTHMOVES, // the "move" commands MVP and MVN Byte value = opcode - GROUP_ZPONLY // rmb0..7 and smb0..7 Byte value = opcode FIXME - use for IDX16COP,IDXeDEW,IDXeINW as well! + GROUP_ZPONLY, // rmb0..7 and smb0..7 Byte value = opcode FIXME - use for IDX16COP,IDXeDEW,IDXeINW as well! + GROUP_PREFIX, // NOP on m65 (throws error) Byte value = opcode }; // save some space @@ -507,7 +508,9 @@ static struct ronode mnemos_m65[] = { PREDEFNODE("rolq", MERGE(GROUP_MISC, IDX_ROL | PREFIX_NEGNEG)), PREDEFNODE("rorq", MERGE(GROUP_MISC, IDX_ROR | PREFIX_NEGNEG)), PREDEFNODE("inq", MERGE(GROUP_MISC, IDXcINC | PREFIX_NEGNEG)), - PREDEFLAST("deq", MERGE(GROUP_MISC, IDXcDEC | PREFIX_NEGNEG)), + PREDEFNODE("deq", MERGE(GROUP_MISC, IDXcDEC | PREFIX_NEGNEG)), + // because the NOP opcode is used as a prefix code, the mnemonic was disabled: + PREDEFLAST("nop", MERGE(GROUP_PREFIX, 0xea)), // ^^^^ this marks the last element }; @@ -1079,6 +1082,15 @@ static void group_only_zp(int opcode) Input_ensure_EOS(); } +// NOP on m65 cpu (FIXME - "!align" outputs NOPs, what about that? what if user writes NEG:NEG?) +static void group_prefix(int opcode) +{ + char buffer[100]; // 640K should be enough for anybody + + sprintf(buffer, "The chosen CPU uses opcode 0x%02x as a prefix code, do not use this mnemonic!", opcode); // FIXME - add to docs! + Throw_error(buffer); +} + // The jump instructions. static void group_jump(int index) { @@ -1156,6 +1168,9 @@ static int check_mnemo_tree(struct ronode *tree, struct dynabuf *dyna_buf) case GROUP_ZPONLY: // "rmb0..7" and "smb0..7" group_only_zp(code); break; + case GROUP_PREFIX: // NOP for m65 cpu + group_prefix(code); + break; default: // others indicate bugs Bug_found("IllegalGroupIndex", code); }