diff --git a/assembler-8608.lua b/assembler-8608.lua index 8a99e16..010d48d 100644 --- a/assembler-8608.lua +++ b/assembler-8608.lua @@ -323,7 +323,10 @@ local function fixCode(code) return code end local stringEscapes = { ["\\"] = "\\", ["n"] = "\n", ["r"] = "\r", ["t"] = "\t", ["0"] = "\0", ["\""] = "\"", ["\'"] = "\'", } +local prefixIdx = 0 local function prefixCode(code, fn) -- fix strings, add line numbers + prefixIdx = prefixIdx + 1 + local outt = {} local outnextnl = {} local linenum = 1 @@ -335,7 +338,7 @@ local function prefixCode(code, fn) -- fix strings, add line numbers local state = "code" -- code, comment, string, stringesc, commentml local lastbracelabel = 0 - local function bracelabel() lastbracelabel = lastbracelabel+1; return "_BRACE_"..lastbracelabel.."_"; end + local function bracelabel() lastbracelabel = lastbracelabel+1; return "_BRACE_"..string.format("%02d", prefixIdx)..lastbracelabel.."_"; end local bracestack = {} local bracehasmid = {} local lastnl = false diff --git a/emulator/8608emulator.dll b/emulator/8608emulator.dll index 99234ec..e04d18e 100644 Binary files a/emulator/8608emulator.dll and b/emulator/8608emulator.dll differ diff --git a/emulator/8608emulator.lua b/emulator/8608emulator.lua index a3d94ef..e8bd716 100644 --- a/emulator/8608emulator.lua +++ b/emulator/8608emulator.lua @@ -668,6 +668,7 @@ function love.keypressed(k) elseif k=="o" then RunToNextInstr(cpu) elseif k=="r" then RunCPU = not RunCPU elseif k=="i" then CPU.c.irq = 1 + elseif k=="u" then CPU.c.rfg = 1 end end end diff --git a/emulator/instructions_gen.c b/emulator/instructions_gen.c index 24e9fb9..974f61e 100644 --- a/emulator/instructions_gen.c +++ b/emulator/instructions_gen.c @@ -200,8 +200,8 @@ void cpu_instr_108_3(struct CPU* const cpu, struct Memory* const mem) { storeutp void cpu_instr_108_4(struct CPU* const cpu, struct Memory* const mem) { lni; } void cpu_instr_110_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } void cpu_instr_110_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } -void cpu_instr_110_2(struct CPU* const cpu, struct Memory* const mem) { storeut(hibyte(cpu->p)); cpu->cycle++; } -void cpu_instr_110_3(struct CPU* const cpu, struct Memory* const mem) { storeutp1(lobyte(cpu->p)); cpu->cycle++; } +void cpu_instr_110_2(struct CPU* const cpu, struct Memory* const mem) { storeut(hibyte(cpu->q)); cpu->cycle++; } +void cpu_instr_110_3(struct CPU* const cpu, struct Memory* const mem) { storeutp1(lobyte(cpu->q)); cpu->cycle++; } void cpu_instr_110_4(struct CPU* const cpu, struct Memory* const mem) { lni; } void cpu_instr_112_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } void cpu_instr_112_1(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->a,cpu->t); lni; } diff --git a/emulator/keycodes.lua b/emulator/keycodes.lua index fb1aa34..1ff3625 100644 --- a/emulator/keycodes.lua +++ b/emulator/keycodes.lua @@ -5,12 +5,12 @@ return { ["return"] = 13, ["lshift"] = 16, - ["lcontrol"] = 17, + ["lctrl"] = 17, --["lcontrol"] = 17, ["lalt"] = 18, -- this block does not match vkey codes ["rshift"] = 20, - ["rcontrol"] = 21, + ["rctrl"] = 21, --["rcontrol"] = 21, ["ralt"] = 22, -- this block does not match vkey codes @@ -18,7 +18,7 @@ return { ["="] = 25, [","] = 26, ["."] = 27, - ["-"] = 28, + ["-"] = 28, -- not in bl ["/"] = 29, ["`"] = 30, @@ -95,18 +95,18 @@ return { ["kp."] = 110, --["numpaddecimal"] = 110, ["kp/"] = 111, --["/"] = 111, - ["f1"] = 112, - ["f2"] = 113, - ["f3"] = 114, - ["f4"] = 115, - ["f5"] = 116, - ["f6"] = 117, - ["f7"] = 118, - ["f8"] = 119, - ["f9"] = 120, - ["f10"] = 121, - ["f11"] = 122, - ["f12"] = 123, + ["f1"] = 112, + ["f2"] = 113, + ["f3"] = 114, + ["f4"] = 115, + ["f5"] = 116, + ["f6"] = 117, + ["f7"] = 118, + ["f8"] = 119, + ["f9"] = 120, + ["f10"] = 121, + ["f11"] = 122, + ["f12"] = 123, ["invalid"] = 127, } diff --git a/rom-8608-defs.lua b/rom-8608-defs.lua index e09fc7e..4d7daa7 100644 --- a/rom-8608-defs.lua +++ b/rom-8608-defs.lua @@ -334,7 +334,7 @@ instructions = { { mnem="ldp *imm16" , opcode=0x68, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"loadUTU","adwIncUT","adwSaveP","instrSub3"}, {"adrlP","loadRegT","instrSub4"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*imm16", ccode={"loadimm161","loadimm162","cpu.p=wordut; cpu.u=loadut;","cpu.t=loadpp1;","cpu.p=wordut; lni;"} }, -- 0x69 { mnem="ldq *imm16" , opcode=0x6A, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"loadUTU","adwIncUT","adwSaveQ","instrSub3"}, {"adrlQ","loadRegT","instrSub4"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*imm16", ccode={"loadimm161","loadimm162","cpu.q=wordut; cpu.u=loadut;","cpu.t=loadqp1;","cpu.q=wordut; lni;"} }, -- 0x6B { mnem="stp *imm16" , opcode=0x6C, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"storeUT","alurPH","instrSub3"}, {"storeUT","adrInc","alurPL","instrSub4"}, {"instrNext"}, desc="*imm16=P", ccode={"loadimm161","loadimm162","storeut(hibyte(cpu.p));","storeutp1(lobyte(cpu.p));","lni;"} }, -- 0x6D - { mnem="stq *imm16" , opcode=0x6E, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"storeUT","alurQH","instrSub3"}, {"storeUT","adrInc","alurQL","instrSub4"}, {"instrNext"}, desc="*imm16=Q", ccode={"loadimm161","loadimm162","storeut(hibyte(cpu.p));","storeutp1(lobyte(cpu.p));","lni;"} }, -- 0x6F + { mnem="stq *imm16" , opcode=0x6E, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"storeUT","alurQH","instrSub3"}, {"storeUT","adrInc","alurQL","instrSub4"}, {"instrNext"}, desc="*imm16=Q", ccode={"loadimm161","loadimm162","storeut(hibyte(cpu.q));","storeutp1(lobyte(cpu.q));","lni;"} }, -- 0x6F { mnem="ldp *p" , opcode=0x92, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*P", ccode={"cpu.u=loadp;","cpu.t=loadpp1;","cpu.p=wordut; lni;"} }, { mnem="ldq *p" , opcode=0x93, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*P", ccode={"cpu.u=loadp;","cpu.t=loadpp1;","cpu.q=wordut; lni;"} }, { mnem="ldp *q" , opcode=0x94, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*Q", ccode={"cpu.u=loadq;","cpu.t=loadqp1;","cpu.p=wordut; lni;"} },