mirror of
https://github.com/g012/l65.git
synced 2025-02-12 20:31:08 +00:00
Added support for single register addressing.
This commit is contained in:
parent
e56a44afa9
commit
6fafc034a0
17
l7801.lua
17
l7801.lua
@ -70,11 +70,20 @@ local opcode_immediate = lookupify{
|
|||||||
local opcode_relative = lookupify{
|
local opcode_relative = lookupify{
|
||||||
'jr',
|
'jr',
|
||||||
}
|
}
|
||||||
|
local opcode_reg = lookupify{
|
||||||
|
'dcr', 'inr'
|
||||||
|
}
|
||||||
|
local opcode_reg_list = {
|
||||||
|
a = lookupify{'dcr','inr'},
|
||||||
|
b = lookupify{'dcr','inr'},
|
||||||
|
c = lookupify{'dcr','inr'},
|
||||||
|
}
|
||||||
|
|
||||||
local addressing_map = {
|
local addressing_map = {
|
||||||
imp = opcode_implied,
|
imp = opcode_implied,
|
||||||
imm = opcode_immediate,
|
imm = opcode_immediate,
|
||||||
rel = opcode_relative,
|
rel = opcode_relative,
|
||||||
|
reg = opcode_reg,
|
||||||
}
|
}
|
||||||
|
|
||||||
local Scope = {
|
local Scope = {
|
||||||
@ -1382,6 +1391,14 @@ local function ParseLua(src, src_name)
|
|||||||
end
|
end
|
||||||
stat = emit_call{name=op, args={expr, mod_expr}, inverse_encapsulate=inverse_encapsulate, paren_open_white=paren_open_whites} break
|
stat = emit_call{name=op, args={expr, mod_expr}, inverse_encapsulate=inverse_encapsulate, paren_open_white=paren_open_whites} break
|
||||||
end
|
end
|
||||||
|
if opcode_reg[op] then
|
||||||
|
local register_name = tok:Get(tokenList).Data
|
||||||
|
if not Registers_7801[register_name] then return false, GenerateError(register_name .. " is not a valid register") end
|
||||||
|
if not opcode_reg_list[register_name] and opcode_reg_list[register_name][op] then
|
||||||
|
return false, GenerateError("Opcode " .. op " doesn't support " .. register_name .. " register")
|
||||||
|
end
|
||||||
|
stat = emit_call{name=op .. register_name, args={expr}, encapsulate=false} break
|
||||||
|
end
|
||||||
if opcode_implied[op] then stat = emit_call{name=op} break end
|
if opcode_implied[op] then stat = emit_call{name=op} break end
|
||||||
error("internal error: unable to find addressing of valid opcode " .. op) -- should not happen
|
error("internal error: unable to find addressing of valid opcode " .. op) -- should not happen
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user