add *s-x syntax to stack-relative addressing
This commit is contained in:
parent
fdf4c91944
commit
c906937f05
@ -1,6 +1,10 @@
|
||||
|
||||
local arch8608 = require("rom-8608-defs")
|
||||
|
||||
local aliases = {
|
||||
-- todo
|
||||
}
|
||||
|
||||
local function trim(s) return s:gsub("^ +", ""):gsub(" +$", "").."" end
|
||||
local function validWordsFromInstrs(instrs)
|
||||
local words = {}
|
||||
@ -18,7 +22,7 @@ local function decodeNumber(n)
|
||||
elseif n:sub(1, 2)=="0x" then return sign*(tonumber(n:sub(3, #n ), 16) or error("invalid number "..n)), math.ceil((#n-2)/2)
|
||||
elseif n:sub(#n, #n)=="h" then return sign*(tonumber(n:sub(1, #n-1), 16) or error("invalid number "..n)), math.ceil((#n-1)/2)
|
||||
else
|
||||
local v = tonumber(n) or error("invalid number "..n)
|
||||
local v = sign*(tonumber(n) or error("invalid number "..n))
|
||||
if v>=-128 and v<=255 then return v, 1
|
||||
elseif v>=-32768 and v<=65535 then return v, 2
|
||||
else error("out-of-range number "..v) end
|
||||
@ -28,6 +32,7 @@ local function mnemFromLine(line, instrs, validWords)
|
||||
local firstWord = line:match("^[^ ]+")
|
||||
local imms = {}
|
||||
local function addNum(n)
|
||||
n = trim(n)
|
||||
local val, len = decodeNumber(n)
|
||||
table.insert(imms, { val = val, len = len } )
|
||||
return " imm"..(len*8).." "
|
||||
@ -42,7 +47,8 @@ local function mnemFromLine(line, instrs, validWords)
|
||||
end
|
||||
|
||||
local mnem = " "..line:gsub(" ", " ").." "
|
||||
mnem = mnem:gsub("([%*%+%-])", " %1 ")
|
||||
mnem = mnem:gsub("%- *", " %+%-")
|
||||
mnem = mnem:gsub("([%*%+])", " %1 ")
|
||||
mnem = mnem:gsub(" %-?%$[0-9a-fA-F]+ " , function(n) return addNum (n) end)
|
||||
mnem = mnem:gsub(" %-?0x[0-9a-fA-F]+ " , function(n) return addNum (n) end)
|
||||
mnem = mnem:gsub(" %-?[0-9a-fA-F]+h " , function(n) if not validWords[trim(n)] then return addNum (n) end end)
|
||||
@ -309,7 +315,6 @@ local function fixFilename(fn)
|
||||
return fn
|
||||
end
|
||||
local function includeFile(fn)
|
||||
fn = fn:gsub("\\", "/")
|
||||
local code = readFile(fn)
|
||||
code = prefixCode(code, fn)
|
||||
local fnf = fixFilename(fn)
|
||||
@ -487,4 +492,4 @@ ts.eval [[
|
||||
function AssembleFile(%fn, %romsize, %offset, %len) { luacall("AssembleFile", %fn, %romsize, %offset, %len); }
|
||||
]]
|
||||
|
||||
if arg then AssembleFile(arg[1] or "../8608programs/redos.asm", "16 16 8", "0", "256") end
|
||||
if arg then AssembleFile(arg[1] or "../8608programs/test.asm", "16 16 8", "0", "256") end
|
||||
|
Loading…
x
Reference in New Issue
Block a user