add aliases, fix cond jumps

This commit is contained in:
Redo 2022-11-01 10:08:45 -06:00
parent dfc9f18ec7
commit 46e5b83cef
4 changed files with 25 additions and 16 deletions

View File

@ -2,7 +2,9 @@
local arch8608 = require("rom-8608-defs") local arch8608 = require("rom-8608-defs")
local aliases = { local aliases = {
-- todo ["jpz imm8"] = {"jeq imm8"},
["jnz imm8"] = {"jne imm8"},
["jmp q" ] = {"ret" },
} }
local function trim(s) return s:gsub("^ +", ""):gsub(" +$", "").."" end local function trim(s) return s:gsub("^ +", ""):gsub(" +$", "").."" end
@ -357,13 +359,18 @@ local function instrsFromArch(arch)
["word [ imm8 ]" ] = function(imms) return arraySize(imms)*2, false end, ["word [ imm8 ]" ] = function(imms) return arraySize(imms)*2, false end,
["word [ imm16 ]"] = function(imms) return arraySize(imms)*2, false end, ["word [ imm16 ]"] = function(imms) return arraySize(imms)*2, false end,
} }
local function addMnem(mnem, opcode)
instrs[mnem] = opcode
if mnem:find("%*") then instrs[mnem:gsub("%*", "%[").." ]"] = opcode end
end
for _, instr in ipairs(arch.instructions) do for _, instr in ipairs(arch.instructions) do
if instr.mnem then if instr.mnem then
local mnem = instr.mnem local mnem = instr.mnem
mnem = mnem:gsub("([%*%+%-])", " %1 ") mnem = mnem:gsub("([%*%+%-])", " %1 ")
mnem = trim(mnem):gsub(" +", " ") mnem = trim(mnem):gsub(" +", " ")
instrs[mnem] = instr.opcode addMnem(mnem, instr.opcode)
if mnem:find("%*") then instrs[mnem:gsub("%*", "%[").." ]"] = instr.opcode end local alias = aliases[trim(mnem)]
if alias then for _, v in ipairs(alias) do addMnem(v, instr.opcode) end end
end end
end end
return instrs return instrs

View File

@ -27,7 +27,7 @@ tst b 1E 1 Set flags according to B-0
tst c 1F 1 Set flags according to C-0 tst c 1F 1 Set flags according to C-0
inc *s+imm8 2B 4 *(S+imm8)++, set flags inc *s+imm8 2B 4 *(S+imm8)++, set flags
dec *s+imm8 2C 4 *(S+imm8)--, set flags dec *s+imm8 2C 4 *(S+imm8)--, set flags
icc *s+imm8 2D 4 *(S+imm8)-=CF, set flags icc *s+imm8 2D 4 *(S+imm8)+=CF, set flags
tst *s+imm8 2E 3 Set flags according to *(S+imm8)-0 tst *s+imm8 2E 3 Set flags according to *(S+imm8)-0
8-bit Arithmetic/Logic (A): 8-bit Arithmetic/Logic (A):
@ -90,10 +90,10 @@ jsr q 67 1 I=Q, Q=I
jpr imm8 31 2 I+=imm8 jpr imm8 31 2 I+=imm8
jnz imm8 30 2 I+=imm8 if !Zero jnz imm8 30 2 I+=imm8 if !Zero
jpz imm8 32 2 I+=imm8 if Zero jpz imm8 32 2 I+=imm8 if Zero
jlt imm8 33 2 I+=imm8 if !Carry jge imm8 33 2 I+=imm8 if !Carry
jge imm8 34 2 I+=imm8 if Carry jlt imm8 34 2 I+=imm8 if Carry
jle imm8 35 2 I+=imm8 if !Zero&!Carry jgt imm8 35 2 I+=imm8 if !Zero&!Carry
jgt imm8 36 2 I+=imm8 if Zero|Carry jle imm8 36 2 I+=imm8 if Zero|Carry
Stack (S): Stack (S):
pha 40 2 *(S++)=A pha 40 2 *(S++)=A

View File

@ -188,8 +188,8 @@ instructions = {
{ mnem="jpz imm8" , opcode=0x32, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" }, { mnem="jpz imm8" , opcode=0x32, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" },
{ mnem="jlt imm8" , opcode=0x33, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" }, { mnem="jlt imm8" , opcode=0x33, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" },
{ mnem="jge imm8" , opcode=0x34, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" }, { mnem="jge imm8" , opcode=0x34, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" },
{ mnem="jle imm8" , opcode=0x35, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero&!Carry" }, { mnem="jgt imm8" , opcode=0x35, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero & Carry" },
{ mnem="jgt imm8" , opcode=0x36, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero|Carry" }, { mnem="jle imm8" , opcode=0x36, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero | !Carry" },
{ category = "Stack", catlet="S" }, { category = "Stack", catlet="S" },
{ mnem="pha" , opcode=0x40, {"pushReg","alurA","instrSub1"}, {"instrNext"}, desc="*(S++)=A" }, { mnem="pha" , opcode=0x40, {"pushReg","alurA","instrSub1"}, {"instrNext"}, desc="*(S++)=A" },

View File

@ -124,8 +124,10 @@ local function archToUcode(arch)
print(info) print(info)
local fo = io.open("instructionList.txt", "w") local fo = io.open("instructionList.txt", "w")
if fo then
fo:write(info) fo:write(info)
fo:close() fo:close()
end
return ucode return ucode
end end