From 40ce1c9ce99435f4af0532eb01df4da6dfdb3d7c Mon Sep 17 00:00:00 2001 From: Redo Date: Mon, 31 Oct 2022 15:58:27 -0600 Subject: [PATCH] fix immediates with new stack relative changes --- assembler-8608.lua | 6 ++++-- rom-8608-defs.lua | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/assembler-8608.lua b/assembler-8608.lua index a73b239..df23701 100644 --- a/assembler-8608.lua +++ b/assembler-8608.lua @@ -56,6 +56,8 @@ local function mnemFromLine(line, instrs, validWords) mnem = mnem:gsub(" [a-zA-Z_][a-zA-Z0-9_%.]* ", function(n) if not validWords[trim(n)] then return addLabel(n) end end) mnem = trim(mnem):gsub(" +", " ") + if not instrs[mnem] then mnem = mnem:gsub("%+ imm", "imm") end + return mnem, imms end local function addByte(state, val) @@ -172,7 +174,7 @@ local function evaluateExpression(expr) end local function preprocessCode(code) local funcmacros = {} - code = code:gsub(".define ([a-zA-Z0-9_]+)%(([^%)]+)%) ([^\n]+)", function(name, args, repl) + code = code:gsub(".define ([%.a-zA-Z0-9_]+)%(([^%)]+)%) ([^\n]+)", function(name, args, repl) local argt = separateCommas(args) for argidx, arg in ipairs(argt) do assert(not arg:find("[^a-zA-Z0-9_]"), "invalid character in macro arg name: "..name.." "..arg) end repl = " "..repl.." " @@ -190,7 +192,7 @@ local function preprocessCode(code) for name, replf in pairs(funcmacros) do code = code:gsub(name.." *%(([^%)]+)%)", replf) end local simplemacros = {} - code = code:gsub("%.define +([a-zA-Z0-9_]+) +([^\n]+)", function(name, repl) + code = code:gsub("%.define +([%.a-zA-Z0-9_]+) +([^\n]+)", function(name, repl) assert(not simplemacros[name], "Redefinition of macro "..name) simplemacros[name] = repl return "" diff --git a/rom-8608-defs.lua b/rom-8608-defs.lua index 229522b..935271e 100644 --- a/rom-8608-defs.lua +++ b/rom-8608-defs.lua @@ -123,7 +123,7 @@ instructions = { { mnem="tst c" , opcode=0x1F, {"alulC","aluRun","aluRInv","aluCinOn","aluAdd","aluSaveCarry","aluSaveNZ","instrNext"}, desc="Set flags according to C-0" }, { mnem="inc *s+imm8", opcode=0x2B, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alur1", "aluAdd","aluSaveCarry","aluSaveNZ","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)++, set flags" }, { mnem="dec *s+imm8", opcode=0x2C, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alurm1", "aluAdd","aluSaveCarry","aluSaveNZ","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)--, set flags" }, - { mnem="icc *s+imm8", opcode=0x2D, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU", "aluCinC", "aluAdd","aluSaveCarry","aluSaveNZ","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)-=CF, set flags" }, + { mnem="icc *s+imm8", opcode=0x2D, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU", "aluCinC", "aluAdd","aluSaveCarry","aluSaveNZ","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)+=CF, set flags" }, { mnem="tst *s+imm8", opcode=0x2E, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"alulU","aluRun","aluRInv","aluCinOn","aluAdd","aluSaveCarry","aluSaveNZ","instrNext"}, desc="Set flags according to *(S+imm8)-0" }, { category = "8-bit Arithmetic/Logic", catlet="A" },