From 59f7db27f1f7650c5568e6c6c0bcaf4fbce8c1fd Mon Sep 17 00:00:00 2001 From: Redo Date: Tue, 6 Dec 2022 15:04:48 -0600 Subject: [PATCH] add emulator --- assembler-8608.lua | 141 ++++--- emulator/8608emulator.bat | 3 + emulator/8608emulator.c | 145 ++++++++ emulator/8608emulator.dll | Bin 0 -> 164439 bytes emulator/8608emulator.lua | 562 ++++++++++++++++++++++++++++ emulator/colorset.lua | 74 ++++ emulator/conf.lua | 10 + emulator/consola.ttf | Bin 0 -> 459180 bytes emulator/gendefs.lua | 66 ++++ emulator/instructions_gen.c | 707 ++++++++++++++++++++++++++++++++++++ emulator/keycodes.lua | 111 ++++++ emulator/main.lua | 1 + instructionList.txt | 9 +- rom-8608-defs.lua | 439 +++++++++++----------- 14 files changed, 1999 insertions(+), 269 deletions(-) create mode 100644 emulator/8608emulator.bat create mode 100644 emulator/8608emulator.c create mode 100644 emulator/8608emulator.dll create mode 100644 emulator/8608emulator.lua create mode 100644 emulator/colorset.lua create mode 100644 emulator/conf.lua create mode 100644 emulator/consola.ttf create mode 100644 emulator/gendefs.lua create mode 100644 emulator/instructions_gen.c create mode 100644 emulator/keycodes.lua create mode 100644 emulator/main.lua diff --git a/assembler-8608.lua b/assembler-8608.lua index c51560e..8a99e16 100644 --- a/assembler-8608.lua +++ b/assembler-8608.lua @@ -1,6 +1,4 @@ -local arch8608 = require("rom-8608-defs") - local function loadutf8table(fn) local tt = {} for l in io.lines(fn) do if l~="" then @@ -10,7 +8,7 @@ local function loadutf8table(fn) end end return tt end -local utf8table = loadutf8table("./utf8table.txt") +local utf8table = loadutf8table((RelPath or "./").."utf8table.txt") local function trim(s) return s:gsub("^ +", ""):gsub(" +$", "").."" end local function getutf8len(c) @@ -29,19 +27,25 @@ local function validWordsFromInstrs(instrs) end return words end +local function lobyte(n) return n%256 end +local function hibyte(n) return math.floor(n/256) end local function decodeNumber(n) n = trim(n) local sign = 1; if n:sub(1, 1)=="-" then sign = -1; n = n:sub(2, #n); end; - if n:sub(1, 1)=="$" then return sign*(tonumber(n:sub(2, #n ), 16) or error("invalid hex number "..n)), math.ceil((#n-1)/2) - elseif n:sub(1, 2)=="0x" then return sign*(tonumber(n:sub(3, #n ), 16) or error("invalid hex 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 hex number "..n)), math.ceil((#n-1)/2) - elseif n:sub(1, 2)=="0b" then return sign*(tonumber(n:sub(3, #n ), 2) or error("invalid binary number "..n)), math.ceil((#n-2)/8) - elseif n:sub(#n, #n)=="b" then return sign*(tonumber(n:sub(1, #n-1), 2) or error("invalid binary number "..n)), math.ceil((#n-1)/8) - else + if n:sub(1, 1)=="$" then return sign*(tonumber(n:sub(2, #n ), 16) or error("invalid hex number "..n)), math.ceil((#n-1)/2) + elseif n:sub(1, 2)=="0x" then return sign*(tonumber(n:sub(3, #n ), 16) or error("invalid hex number "..n)), math.ceil((#n-2)/2) + elseif n:sub(#n, #n)=="h" and n:find("^[0-9a-fA-F]+h$") then return sign*(tonumber(n:sub(1, #n-1), 16) or error("invalid hex number "..n)), math.ceil((#n-1)/2) + elseif n:sub(1, 2)=="0b" then return sign*(tonumber(n:sub(3, #n ), 2) or error("invalid binary number "..n)), math.ceil((#n-2)/8) + elseif n:sub(#n, #n)=="b" and n:find("^[01]+b$") then return sign*(tonumber(n:sub(1, #n-1), 2) or error("invalid binary number "..n)), math.ceil((#n-1)/8) + elseif n:sub(1, 3)=="lo(" and n:sub(#n, #n)==")" then return lobyte(decodeNumber(n:sub(4, #n-1))), 1 + elseif n:sub(1, 3)=="hi(" and n:sub(#n, #n)==")" then return hibyte(decodeNumber(n:sub(4, #n-1))), 1 + elseif n:find("^[0-9]+$") then local v = sign*(tonumber(n) or error("invalid decimal 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 + else + return nil end end local function mnemFromLine(line, instrs, validWords) @@ -49,6 +53,7 @@ local function mnemFromLine(line, instrs, validWords) local function addNum(n) n = trim(n) local val, len = decodeNumber(n) + assert(val and len, "invalid number "..n) local linei8 = line:gsub(n, "imm8", 1, true):lower() local linei16 = line:gsub(n, "imm16", 1, true):lower() if len==1 and (not instrs[linei8]) and instrs[linei16] then len = 2 end @@ -134,12 +139,15 @@ end local directiveFunctions = { fn = function(state, fn) state.fileName = fn end, ln = function(state, ln) state.lineNum = tonumber(ln) end, - org = function(state, addr) state.curAddr = decodeNumber(addr) end, + org = function(state, addr) state.curAddr = decodeNumber(addr) or error("Invalid origin \""..addr.."\"") end, align = function(state, alns) local aln = decodeNumber(alns); if state.curAddr % aln ~= 0 then state.curAddr = state.curAddr + (aln - state.curAddr%aln) end end, define = true, space = function(state, amts) local amt = decodeNumber(amts); state.curAddr = state.curAddr + amt; end, } -local function assembleCode(code, instrs) +local function postEvaluateExpression(expr, labels) + +end +local function assembleCode(code, instrs, uexprs) local validWords = validWordsFromInstrs(instrs) local state = { @@ -169,11 +177,19 @@ local function assembleCode(code, instrs) end for _, rep in ipairs(state.labelReplacements) do - local labelAddr = state.labelAddrs[rep.name] or error("no label named "..rep.name) - state.curAddr = rep.addr - if rep.len==1 then addByte(state, labelAddr-(rep.addr+1), rep.isCode) - elseif rep.len==2 then addWord(state, labelAddr , rep.isCode) - else error("invalid labelreplace len") end + local expr = uexprs[rep.name] + if expr then + local val = postEvaluateExpression(expr, state.labelAddrs) + if rep.len==1 then addByte(state, val, rep.isCode) + elseif rep.len==2 then addWord(state, val, rep.isCode) + else error("invalid expr replace len "..rep.len) end + else + local labelAddr = state.labelAddrs[rep.name] or error("no label named "..rep.name) + state.curAddr = rep.addr + if rep.len==1 then addByte(state, labelAddr-(rep.addr+1), rep.isCode) + elseif rep.len==2 then addWord(state, labelAddr , rep.isCode) + else error("invalid labelreplace len "..rep.len) end + end end return state.memory, state.codeMap @@ -190,7 +206,7 @@ end local function separateCommas(l) local c = {}; for a in l:gmatch("[^,]+") do table.insert(c, trim(a)) end; return c; end -local function evaluateExpression(expr) +local function evaluateExpression(expr, uexprs) expr = expr:gsub("[^%+%-%*%/]+", function(word) local val = decodeNumber(word) or error("invalid number in expression: "..word) return val @@ -267,18 +283,23 @@ local function preprocessCode(code) code = code:gsub("\\", "\n") + local uexprs = {} + local codet = {} local exprt = {} local parenLevel = 0 for i = 1, #code do local c = code:sub(i, i) if c=="(" then + if parenLevel>0 then table.insert(exprt, c) end parenLevel = parenLevel+1 elseif c==")" then parenLevel = parenLevel-1 if parenLevel==0 then - table.insert(codet, evaluateExpression(table.concat(exprt))) + table.insert(codet, evaluateExpression(table.concat(exprt), uexprs)) exprt = {} + else + table.insert(exprt, c) end else if parenLevel==0 then table.insert(codet, c) @@ -287,7 +308,7 @@ local function preprocessCode(code) end code = table.concat(codet) - return code + return code, uexprs end local function fixCode(code) code = code:gsub(",", " ") @@ -322,6 +343,14 @@ local function prefixCode(code, fn) -- fix strings, add line numbers local utf8str = "" local utf8len = 0 + local function newline() + lastnl = true + for _, v in ipairs(outnextnl) do + if v=="\n" and skipnl then out("\\") + else out(v) end + end; outnextnl = {}; + end + out(".ln 1"); out("\n"); for i = 1, #code do local c = code:sub(i, i) @@ -333,11 +362,7 @@ local function prefixCode(code, fn) -- fix strings, add line numbers elseif c=="\n" or (c=="/" and cn~="/" and cn~="*") then linenum = linenum+1 if not skipnl then out("\n") out(".ln "..linenum); out("\n"); end - lastnl = true - for _, v in ipairs(outnextnl) do - if v=="\n" and skipnl then out("\\") - else out(v) end - end; outnextnl = {}; + newline() skipnl = false elseif c=="#" or c==";" or (c=="/" and cn=="/") then state = "comment" elseif c=="/" and cn=="*" then state = "commentml" @@ -362,7 +387,7 @@ local function prefixCode(code, fn) -- fix strings, add line numbers bracehasmid[#bracestack] = true else error("invalid char "..c) end elseif state=="comment" then - if c=="\n" then state = "code" out("\n") lastnl = true end + if c=="\n" then state = "code" out("\n") newline() end elseif state=="commentml" then if c=="/" and cp=="*" then state = "code" end elseif state=="string" then @@ -401,6 +426,7 @@ local function includeFile(fn) local fnf = fixFilename(fn) code = ".fn "..fnf.."\n"..code code = code:gsub(".include ([^\r\n]+)", function(fn2) + fn2 = fn:gsub("[^\\/]+$", "")..fn2 return "\n"..includeFile(fn2).."\n"..".fn "..fnf.."\n" end) return code @@ -437,10 +463,10 @@ local function instrsFromArch(arch) end local function assembleFile(fn, arch) local code = includeFile(fn) - code = preprocessCode(code) + code, uexprs = preprocessCode(code) code = fixCode(code) local instrs = instrsFromArch(arch) - local mem, code = assembleCode(code, instrs) + local mem, code = assembleCode(code, instrs, uexprs) return mem, code end @@ -457,7 +483,6 @@ local function mnemsFromArch(arch) end local function toSigned8(x) return x>=128 and x-256 or x end local function disassembleMemory(mem, code, arch) - print("Disassembly:") local mnems = mnemsFromArch(arch) local addr = 0 @@ -494,6 +519,7 @@ local function disassembleMemory(mem, code, arch) else jmp.name = "subroutine_"..subnum ; subnum = subnum +1; end end + local lines = {} addr = 0 while addr<=0xFFFF do local startaddr = addr @@ -540,12 +566,12 @@ local function disassembleMemory(mem, code, arch) local jmp = jmpaddrs[startaddr] if jmp then label = jmp.name..":" end local lb = table.concat(lineb, " ") - if lastaddr~=addr-tlen then print("...") end - print(string.format("%04X", addr-tlen).." | "..(" "):rep(8-#lb)..lb.." | "..(" "):rep(13-#label)..label.." "..table.concat(line, " ")) + if lastaddr~=addr-tlen then table.insert(lines, "...") end + table.insert(lines, string.format("%04X", addr-tlen).." | "..(" "):rep(8-#lb)..lb.." | "..(" "):rep(13-#label)..label.." "..table.concat(line, " ")) lastaddr = addr end end - print() + return table.concat(lines, "\n") end local function memToHex(hex) local mem = {} @@ -557,7 +583,7 @@ local function memToHex(hex) return mem end local function disassembleHex(hex, arch) - disassembleMemory(memToHex(hex), arch) + return disassembleMemory(memToHex(hex), arch) end local printableCharsS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`-=[]\\;\',./~!@#$%^&*()_+{}|:\"<> " @@ -567,14 +593,14 @@ local function toPrintableChar(n) return printableChars[c] and c or "?" end local function printMemory(mem) - print("Memory Dump:") local anynonempty = false local lastbase = -16 local lastline = "" local numreps = 0 + local lines = {} local function closereps(base) if numreps~=0 then - print("(repeated "..numreps.." more times, up to "..string.format("%04X", base+15)..")") + table.insert(lines, "(repeated "..numreps.." more times, up to "..string.format("%04X", base+15)..")") numreps = 0 end end @@ -601,8 +627,8 @@ local function printMemory(mem) local l = table.concat(line) if l~=lastline or base~=lastbase+16 then closereps(base-16) - if base ~= lastbase+16 then print("...") end - print(string.format("%04X", base).." | "..l.." | "..table.concat(strt)) + if base ~= lastbase+16 then table.insert(lines, "...") end + table.insert(lines, string.format("%04X", base).." | "..l.." | "..table.concat(strt)) else numreps = numreps+1 end @@ -612,10 +638,12 @@ local function printMemory(mem) end end closereps(lastbase) - if not anynonempty then print("Empty") end - print() + if not anynonempty then table.insert(lines, "Empty") end + + return table.concat(lines, "\n") end +local HasTs = ts~=nil local ts = ts or { call = function() end, eval = function() end, @@ -656,17 +684,30 @@ local function buildMemory(mem, romsize, offset, len) end local function strtovec(str) local v = {}; for word in str:gmatch("[^ \t\r\n]+") do table.insert(v, tonumber(word)) end; return v; end -function AssembleFile(fn, romsizes, offsets, lens) local offset = tonumber(offsets); local len = tonumber(lens); local romsize = strtovec(romsizes); - local arch = arch8608 - local mem, code = assembleFile(fn, arch) - print(""..fn:match("[^/\\]+$").."\n") - printMemory(mem) - assert(#romsize==3, "incorrect rom size") - buildMemory(mem, romsize, offset, len) - disassembleMemory(mem, code, arch) +if HasTs or (not AsmIncluded) then + function AssembleBuildFile(fn, romsizes, offsets, lens) local offset = tonumber(offsets); local len = tonumber(lens); local romsize = strtovec(romsizes); + local arch = require("rom-8608-defs") + local mem, code = assembleFile(fn, arch) + print(""..fn:match("[^/\\]+$").."\n") + + print("Memory Dump:") + print(printMemory(mem)) + print() + print("Disassembly:") + print(disassembleMemory(mem, code, arch)) + print() + + assert(#romsize==3, "incorrect rom size") + buildMemory(mem, romsize, offset, len) + end + ts.eval [[ + function AssembleBuildFile(%fn, %romsize, %offset, %len) { luacall("AssembleBuildFile", strReplace(%fn, "$", "Add-ons/_misc/rom/8608programs/"), %romsize, %offset, %len); } + ]] + AssembleBuildFile(arg[1] or "../8608programs/test.asm", "16 16 8", "0", "256") end -ts.eval [[ - function AssembleFile(%fn, %romsize, %offset, %len) { luacall("AssembleFile", strReplace(%fn, "$", "Add-ons/_misc/rom/8608programs/"), %romsize, %offset, %len); } -]] -if arg then AssembleFile(arg[1] or "../8608programs/test.asm", "16 16 8", "0", "256") end +return { + assembleFile = assembleFile, + disassembleMemory = disassembleMemory, + printMemory = printMemory, +} diff --git a/emulator/8608emulator.bat b/emulator/8608emulator.bat new file mode 100644 index 0000000..62a8f4f --- /dev/null +++ b/emulator/8608emulator.bat @@ -0,0 +1,3 @@ +luajit gendefs.lua +gcc 8608emulator.c -shared -Ofast -o 8608emulator.dll +pause diff --git a/emulator/8608emulator.c b/emulator/8608emulator.c new file mode 100644 index 0000000..7273ae0 --- /dev/null +++ b/emulator/8608emulator.c @@ -0,0 +1,145 @@ + +#define lobyte(x) (x&0xFF) +#define hibyte(x) ((x>>8)&0xFF) +#define wordfrombytes(h,l) (((h<<8)&0xFF00)|(l&0xFF)) +#define popbyte readmemory(--cpu->s) +#define loadimmed readmemory(cpu->i++) +#define loadstackrel readmemory((cpu->s+signed8(cpu->t))%65536) +#define loadstackrelp1 readmemory((cpu->s+signed8(cpu->t)+1)%65536) +#define wordut (wordfrombytes(cpu->u, cpu->t)) +#define wordcb (wordfrombytes(cpu->c, cpu->b)) +#define loadut readmemory(wordut) +#define loadutp1 readmemory((wordut+1)%65536) +#define loadp readmemory(cpu->p) +#define loadpinc readmemory(cpu->p++) +#define loadpp1 readmemory((cpu->p+1)%65536) +#define loadq readmemory(cpu->q) +#define loadqinc readmemory(cpu->q++) +#define loadqp1 readmemory((cpu->q+1)%65536) +#define signed8(x) (x>=128 ? x|0xFF00 : x) + +#define setzf(x) cpu->nz=(x!=0); +#define loadimmedt cpu->t = loadimmed; +#define loadimm161 cpu->u = loadimmed; +#define loadimm162 cpu->t = loadimmed; +#define loadstackrelu cpu->u = loadstackrel; +#define storestackrel(x) writememory(cpu->s+signed8(cpu->t), x); +#define storestackrel161(x) writememory((cpu->s+signed8(cpu->t) )%65536, hibyte(x)); +#define storestackrel162(x) writememory((cpu->s+signed8(cpu->t)+1)%65536, lobyte(x)); +#define loadstackrel161 cpu->u=loadstackrel; +#define loadstackrel162 cpu->t=loadstackrelp1; +#define storeut(x) writememory(wordut, x); +#define storeutp1(x) writememory((wordut+1)%65536, x); +#define storep(x) writememory(cpu->p, x); +#define storepinc(x) writememory(cpu->p++, x); +#define storepp1(x) writememory((cpu->p+1)%65536, x); +#define storeq(x) writememory(cpu->q, x); +#define storeqinc(x) writememory(cpu->q++, x); +#define storeqp1(x) writememory((cpu->q+1)%65536, x); +#define pushretaddr1 writememory(cpu->s++, hibyte(cpu->i)); +#define pushretaddr2 writememory(cpu->s++, lobyte(cpu->i)); +#define lni cpu->instr = readmemory(cpu->i++); cpu->cycle = 0; +#define ldi cpu->instr = readmemory(cpu->i); cpu->cycle = 0; +#define addf(x,y) { x=(x+y); cpu->cf=x>=256; x&=0xFF; setzf(x); } +#define subf(x,y) addf(x,-y); +#define cmpf(x,y) { int t=x-y; cpu->cf=(t>=256); setzf(t); } +#define rol(x,y) x=(x<>(8-y)); +#define ror(x,y) x=(x>>y)|(x<<(8-y)); +#define sra(x,y) x=(x>>y); +#define jmpabsp cpu->i=cpu->p; lni; +#define jmpabsq cpu->i=cpu->q; lni; +#define jmpabsut cpu->i=wordut; lni; +#define jmpabsutplus1 cpu->i=(wordut+1)%65536; lni; +#define pushbyte(b) writememory(cpu->s++, b); +#define push161(x) pushbyte(hibyte(x)); +#define push162(x) pushbyte(lobyte(x)); +#define pop161 cpu->t=popbyte; +#define pop162 cpu->u=popbyte; +#define tst(x) cpu->cf = x>=128; cpu->nz = x!=0; +#define instrpreload cpu->instrpre = loadimmed; +#define instrloadpre cpu->instr = cpu->instrpre; +#define jmprelt cpu->i = (cpu->i + signed8(cpu->t))%65536; lni; +#define saveretaddr cpu->q = (cpu->i+1)%65536; + +#define readmemory(x) _readmemory(cpu, mem, x) +#define writememory(x, y) _writememory(cpu, mem, x, y) + +struct CPU { + int a; + int b; + int c; + int u; + int t; + int p; + int q; + int s; + int v; + int i; + int cf; + int nz; + int irq; + int ifg; + int rfg; + int instr; + int cycle; + int instrpre; + int tick; +}; +struct Event { + int id; + int addr; +}; +struct Memory { + int data[65536]; + int canwrite[65536]; + int writes[65536]; + int reads[65536]; + int onread[65536]; + int onwrite[65536]; + struct Event events[4096]; + int numevents; +}; + +void postEvent(struct Memory* const mem, int id, int addr) { + if(mem->numevents<4096) { + mem->events[mem->numevents].id = id; + mem->events[mem->numevents].addr = addr; + mem->numevents++; + } +} +int _readmemory(const struct CPU* const cpu, struct Memory* const mem, const int addr) { + int addr2 = addr%65536; + mem->reads[addr2] = cpu->tick; + if(mem->onread[addr2]) { + postEvent(mem, mem->onread[addr2], addr2); + } + return mem->data[addr2]; +} +int _writememory(const struct CPU* const cpu, struct Memory* const mem, const int addr, const int data) { + int addr2 = addr%65536; + if(mem->canwrite[addr2]) { + mem->writes[addr2] = cpu->tick; + mem->data[addr2] = data%256; + } + if(mem->onwrite[addr2]) { + postEvent(mem, mem->onwrite[addr2], addr2); + } +} + +typedef void(*CPUInstruction)(struct CPU* const cpu, struct Memory* const mem); + +#include "instructions_gen.c" + +int TickCPU(struct CPU* const cpu, struct Memory* const mem, const int count, const int countinstrs) { + int i = 0; + while(iirq && !cpu->ifg && cpu->cycle==0) { cpu->instr = 0xF2; } + if(cpu->rfg || cpu->ifg || cpu->irq) { + CPUInstruction instr = CPUInstructions[cpu->instr][cpu->cycle]; + if(instr) instr(cpu, mem); + if(!countinstrs || cpu->cycle==0) { i++; } + } else { i = count; break; } + if(mem->numevents!=0) { break; } + } + return count-i; +} diff --git a/emulator/8608emulator.dll b/emulator/8608emulator.dll new file mode 100644 index 0000000000000000000000000000000000000000..28a156c77b9d2c2a2ad7e618a630e7bb35ba4de6 GIT binary patch literal 164439 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 literal 0 HcmV?d00001 diff --git a/emulator/8608emulator.lua b/emulator/8608emulator.lua new file mode 100644 index 0000000..1b089c9 --- /dev/null +++ b/emulator/8608emulator.lua @@ -0,0 +1,562 @@ +--love 1 + +require("colorset") +local ffi = require("ffi") +RelPath = "../" +AsmIncluded = true +local asm = dofile("../assembler-8608.lua") +local Arch = dofile("../rom-8608-defs.lua") + +local lg = love.graphics +local li = love.image +local le = love.event +local lt = love.timer + +---- +local function InitColorset() + for i = 0, 63 do + local c = ColorSet[i+1] + ColorSet[i] = { + c[1]/255, + c[2]/255, + c[3]/255, + } + ColorSet[i+1] = nil + end +end + +local eventTypes = {} +local function registerEvent(mem, addrFirst, addrLast, read, write, func) + table.insert(eventTypes, func) + local id = #eventTypes + for addr = addrFirst, addrLast do + if read then mem.c.onread [addr] = id end + if write then mem.c.onwrite[addr] = id end + end +end +local function handleEvents(cpu, mem) + for i = 0, mem.c.numevents-1 do + local event = mem.c.events[i] + eventTypes[event.id](event.addr, cpu, mem) + end + mem.c.numevents = 0 +end + +local RegDisplay = { + scrX = 384+16, scrY = 32, + width = 128, height = 192, + fontWidth = 8, fontHeight = 12, + registers = { + { name = "A" , idx = "a" , x=8,y=8 ,w=2}, + { name = "B" , idx = "b" , x=8,y=8+16 ,w=2}, + { name = "C" , idx = "c" , x=8,y=8+16* 2,w=2}, + { name = "U" , idx = "u" , x=8,y=8+16* 3,w=2}, + { name = "T" , idx = "t" , x=8,y=8+16* 4,w=2}, + { name = "P" , idx = "p" , x=8,y=8+16* 5,w=4}, + { name = "Q" , idx = "q" , x=8,y=8+16* 6,w=4}, + { name = "S" , idx = "s" , x=8,y=8+16* 7,w=4}, + { name = "V" , idx = "v" , x=8,y=8+16* 8,w=4}, + { name = "I" , idx = "i" , x=8,y=8+16* 9,w=4}, + { name = "Ins", idx = "instr", x=8,y=8+16*10,w=2}, + { name = "Cyc", idx = "cycle", x=64+8-16,y=8+16*10,w=2}, + }, + flags = { + { name = "CF" , idx = "cf" , x=64+8,y=8 }, + { name = "NZ" , idx = "nz" , x=64+8,y=8+16 }, + { name = "IRQ", idx = "irq", x=64+8,y=8+16*2}, + { name = "Int", idx = "ifg", x=64+8,y=8+16*3}, + { name = "Run", idx = "rfg", x=64+8,y=8+16*4}, + }, +} +local function InitRegDisplay(rd) + lg.print("Registers", rd.scrX, rd.scrY-16) + lg.rectangle("line", rd.scrX, rd.scrY, rd.width, rd.height+1) + for i, reg in ipairs(rd.registers) do + lg.rectangle("line", rd.scrX+reg.x+(rd.fontWidth*(4-reg.w)), rd.scrY+reg.y, rd.fontWidth*reg.w+1, rd.fontHeight+1) + lg.print(reg.name, rd.scrX+reg.x+32+4, reg.y + rd.scrY) + end + for i, flg in pairs(rd.flags) do + lg.rectangle("line", rd.scrX+flg.x, rd.scrY+flg.y, rd.fontHeight+1, rd.fontHeight+1) + lg.print(flg.name, rd.scrX+flg.x+rd.fontHeight+4, flg.y+rd.scrY) + end +end +local function printValue(val, w, x, y, fw) + for i = 1, w do + local v = math.floor(val/math.pow(16,i-1))%16 + lg.print(string.format("%01X", v), x+(fw*(4-i)), y+1) + end +end +local function RedrawRegDisplay(rd, cpu, mem) + for i, reg in ipairs(rd.registers) do + lg.setColor(0,0,0) + lg.rectangle("fill", rd.scrX+reg.x+(rd.fontWidth*(4-reg.w)), rd.scrY+reg.y, rd.fontWidth*reg.w, rd.fontHeight) + lg.setColor(1,1,1) + local val = cpu.data[reg.idx]%(math.pow(16, reg.w)) + printValue(val, reg.w, rd.scrX+reg.x, rd.scrY+reg.y, rd.fontWidth) + end + for i, flg in pairs(rd.flags) do + local val = cpu.data[flg.idx] + if val~=0 then + lg.setColor(1,1,1) + else + lg.setColor(0,0,0) + end + lg.rectangle("fill", rd.scrX+flg.x, rd.scrY+flg.y, rd.fontHeight, rd.fontHeight) + end + lg.setColor(1,1,1) +end + +local ReadMemory +local StackDisplay = { + scrX = 8+384+32+6, scrY = 32+192+32, + lines = 16, fontHeight = 12, +} +local function InitStackDisplay(sd) + sd.width = 96+1 + sd.height = 12+(sd.lines*sd.fontHeight) + lg.print("Stack", sd.scrX, sd.scrY-16) + lg.rectangle("line", sd.scrX, sd.scrY, sd.width+1, sd.height+1) +end +local function RedrawStackDisplay(sd, cpu, mem) + lg.setColor(0,0,0) + lg.rectangle("fill", sd.scrX, sd.scrY, sd.width, sd.height) + lg.setColor(1,1,1) + for i = 1, sd.lines do + local addr = (cpu.data.s-i)%65536 + local val = ReadMemory(mem, addr) + lg.print(string.format("%04X -%2i %02X", addr, i, val), sd.scrX+8, sd.scrY+8+(12*(i-1))) + end +end + +local MemoryDisplays = { + { + scrX = 8, scrY = 32+192+32, + columns = 16, columnSpace = 4, rows = 16, + fontHeight = 12, + showAscii = false, + addr = 0x1000, + highlightTime = 8, + }, +} +local function InitMemoryDisplay(md) + local cw = 7 + md.mainCols = 9+md.columns*3+md.columnSpace-1 + md.width = cw*(md.mainCols)+cw*(md.showAscii and (md.columns+5) or 0)-8 + md.height = 12+md.fontHeight*md.rows + lg.print("Memory", md.scrX, md.scrY-16) + lg.rectangle("line", md.scrX, md.scrY, md.width+1, md.height+1) + md.ticksDrawn = {}; for i = 1, md.highlightTime do md.ticksDrawn[i] = 0 end; +end +local function RedrawMemoryDisplay(md, cpu, mem) + lg.setColor(0,0,0) + lg.rectangle("fill", md.scrX, md.scrY, md.width, md.height) + lg.setColor(1,1,1) + + local highlightAddrs = {} + highlightAddrs[cpu.data.p] = "P" + highlightAddrs[cpu.data.q] = "Q" + highlightAddrs[cpu.data.s] = "S" + highlightAddrs[cpu.data.v] = "V" + highlightAddrs[(cpu.data.i-1)%65536] = "I" + + local cw = 7 + + local tickDraw = md.ticksDrawn[1] + for l = 1, md.rows do + local addr = md.addr + (l-1)*md.columns + local lx = md.scrX+8 + local ly = md.scrY+8+(md.fontHeight*(l-1)) + lg.print(string.format("%04X", addr).." | ", lx, ly) + lx = lx+(cw*7) + for x = 1, md.columns do + local a = addr + (x-1) + local v = ReadMemory(mem, a) + if highlightAddrs[a] then + lg.line(lx, ly, lx, ly+11) + lg.line(lx-1, ly, lx+15, ly) + lg.line(lx-1, ly+11, lx+15, ly+11) + lg.print(highlightAddrs[a], lx-cw, ly) + end + if mem.c.writes[a] > tickDraw then + lg.rectangle("fill",lx-1,ly,cw*2+2,11) + lg.setColor(0,0,0) + end + lg.print(string.format("%02X", v), lx, ly) + lg.setColor(1,1,1) + if mem.c.reads[a] > tickDraw then + lg.rectangle("line", lx-1, ly, cw*2+2+1, 11+1) + end + lx = lx+(cw*3) + if x%md.columnSpace==0 then lx = lx+cw end + end + if md.showAscii then + lg.print("|", lx, ly) + lx = lx+cw + end + if md.showAscii then + for x = 1, md.columns do + local a = addr + (x-1) + local v = ReadMemory(mem, a) + if v>=128 then v = 0 end + local c = string.char(v) + lg.print(c, md.scrX+lx+((x-1)*cw), md.scrY+8+(12*(l-1))) + end + end + end + table.insert(md.ticksDrawn, cpu.data.tick) + table.remove(md.ticksDrawn, 1) +end + +local ProgramDisplay = { + scrX = 8+384+8+128+8, scrY = 32, + fontHeight = 12, + numLines = 35, +} +local function pdLinesFromDasm(dasm) + local lines, addrLines = {}, {} + for line in dasm:gmatch("[^\n]+") do + if line~="..." then + local addrh, datah, rest = line:match("^(.+) | (.+) | +(.+)$") + local text = rest + local label = nil + if rest:find(":") then label, text = rest:match("^(.+): (.+)$") end + local addr = tonumber(addrh, 16) + + if label then + table.insert(lines, " | "..label..":") + lineidx = #lines + end + table.insert(lines, addrh.." | "..text) + + local lineidx = #lines + local len = 0; for _ in datah:gfind("[0-9a-fA-F][0-9a-fA-F]") do len = len+1 end; + for i = 1, len do addrLines[addr+i-1] = lineidx end + else + table.insert(lines, "") + end + end + return lines, addrLines +end +local function InitProgramDisplay(pd, data, code, arch) + pd.width = 256 + pd.height = 12+pd.fontHeight*pd.numLines-3 + lg.print("Program", pd.scrX, pd.scrY-16) + lg.rectangle("line", pd.scrX, pd.scrY, pd.width, pd.height) + pd.firstLine = 1 + pd.data = data + pd.code = code + local dasm = asm.disassembleMemory(data, code, arch) + pd.lines, pd.addrLines = pdLinesFromDasm(dasm) +end +local function RedrawProgramDisplay(pd, cpu) + lg.setColor(0,0,0) + lg.rectangle("fill", pd.scrX, pd.scrY, pd.width-1, pd.height-1) + lg.setColor(1,1,1) + + local instrAddr = (cpu.data.i-1)%65536 + for lineidx = pd.firstLine, pd.firstLine+pd.numLines-1 do + local line = pd.lines[lineidx] + if line then + local x, y = pd.scrX+8, pd.scrY+8+(lineidx-1)*pd.fontHeight + lg.print(line, x, y) + if pd.addrLines[instrAddr]==lineidx then + lg.rectangle("line", x, y, pd.width-18, pd.fontHeight-1) + end + end + end + --lg.print(pd.dasm or "nil", pd.scrX+8, pd.scrY+8) +end + +local VideoDisplay = { + width = 256, height = 128, + scrX = 8, scrY = 256, + addr = 0x8000, +} +local function InitVideoDisplay(vd) + lg.print("Video Display", vd.scrX, vd.scrY-16) + vd.imageData = li.newImageData(vd.width, vd.height) + lg.setColor(1,1,1) + lg.rectangle("line", vd.scrX, vd.scrY, vd.width+1, vd.height+1) +end +local CharDisplay = { + width = 64*6, height = 16*12, + rows = 16, cols = 64, + fontWidth = 6, fontHeight = 12, + scrX = 8, scrY = 32, + addrChar = 0x0800, + addrColor = 0x0C00, +} +local function InitCharDisplay(cd) + lg.print("Char Display", cd.scrX, cd.scrY-16) + cd.chars = {} + cd.colors = {} + cd.highlight = {} + for a = 0, cd.rows*cd.cols-1 do + cd.chars[a] = "" + cd.colors[a] = ColorSet[1] + cd.highlight[a] = false + end + cd.font = lg.newFont("consola.ttf", cd.fontHeight-1, "mono") +end + +local Keyboard = { + addrRange = {0x0500, 0x05FF}, + queueSize = 16, + queue = {}, + interrupts = false, + queueEmpty = true, +} +local function kbSetNext(kb, cpu, mem) + local newval = kb.queue[1] or 0 + if mem.c.data[kb.addrRange[1]] ~= newval then + for a = kb.addrRange[1], kb.addrRange[2] do + mem.c.data[a] = newval + end + end +end +local function KeyboardOnRead(addr, cpu, mem, kb) + table.remove(kb.queue, 1) + kbSetNext(kb, cpu, mem) +end +local function KeyboardOnWrite(addr, cpu, mem, kb) + local val = mem.c.data[addr] + kb.interrupts = val~=0 + mem.c.data[addr] = kb.queue[1] or 0 +end +local keycodes = require("keycodes") +local CPURequestInterrupt +local function KeyboardOnKey(kb, key, press, cpu, mem) + local code = keycodes[key] or keycodes["invalid"] + table.insert(kb.queue, code) + if #kb.queue > kb.queueSize then table.remove(kb.queue, 1) end + kb.queueEmpty = false + kbSetNext(kb, cpu, mem) + if kb.interrupts then CPURequestInterrupt(cpu) end +end + +local function RedrawFPSCounter(x,y) + lg.setColor(0,0,0) + lg.rectangle("fill",x,y,64,12) + lg.setColor(1,1,1) + lg.print("FPS: "..lt.getFPS(), x,y) +end + +local peripherals = { + CharDisplay = { range = {0x0800, 0x0FFF}, write = true }, + BootROM = { range = {0x0000, 0x03FF}, write = false }, + SystemRAM = { range = {0x1000, 0x1FFF}, write = true }, + UserROM = { range = {0x2000, 0x2FFF}, write = false }, + UserRAM = { range = {0x3000, 0x3FFF}, write = true }, + VideoDisplay = { range = {0x8000, 0xFFFF}, write = true }, + Keyboard = { range = {0x0500, 0x05FF}, write = true, + onread = function(addr, cpu, mem) KeyboardOnRead (addr, cpu, mem, Keyboard) end, + onwrite = function(addr, cpu, mem) KeyboardOnWrite(addr, cpu, mem, Keyboard) end, + }, +} + +---- +ffi.cdef [[ +struct Event { + int id; + int addr; +}; +struct Memory { + int data[65536]; + int canwrite[65536]; + int writes[65536]; + int reads[65536]; + int onread[65536]; + int onwrite[65536]; + struct Event events[4096]; + int numevents; +}; +]] +local Memory = { + c = ffi.new("struct Memory"), +} +local function InitMemory(mem, pers) + for i = 0, 65535 do + mem.c.data[i] = 0 + mem.c.canwrite[i] = 0 + mem.c.writes[i] = 0 + mem.c.reads[i] = 0 + mem.c.onread[i] = 0 + mem.c.onwrite[i] = 0 + end + for k, per in pairs(pers) do + if per.onread then registerEvent(mem, per.range[1], per.range[2], true , false, per.onread ) end + if per.onwrite then registerEvent(mem, per.range[1], per.range[2], false, true , per.onwrite) end + for a = per.range[1], per.range[2] do + mem.c.canwrite[a] = (per.write and 1 or 0) + end + end +end +ReadMemory = function(mem, addr) + return mem.c.data[addr%65536]%256 +end +local function WriteMemory(mem, addr, val) + if mem.c.canwrite[addr%65536]~=0 then + mem.c.data[addr%65536] = val%256 + end +end +local function AssembleToMemory(mem, fn, arch) + local data, code = asm.assembleFile(fn, arch) + for addr = 0, 65535 do + if data[addr] then + mem.c.data[addr] = data[addr] + end + end + return data, code +end + +ffi.cdef [[ +struct CPU { + int a; + int b; + int c; + int u; + int t; + int p; + int q; + int s; + int v; + int i; + int cf; + int nz; + int irq; + int ifg; + int rfg; + int instr; + int cycle; + int tick; +}; +int TickCPU(struct CPU* const cpu, struct Memory* const mem, const int count, const int countinstrs); +]] +local CPU = { + data = ffi.new("struct CPU"), +} +local cpuDll = ffi.load("8608emulator.dll") +local function TickCPU(cpu, mem, count, countinstrs) + local countleft = count + while countleft>0 do + countleft = cpuDll.TickCPU(cpu.data, mem.c, countleft, countinstrs and 1 or 0) + handleEvents(cpu, mem) + end +end +local function InitCPU(cpu) + cpu.data.rfg = 1; +end +CPURequestInterrupt = function(cpu) + cpu.data.irq = 1; +end + +---- + +local function RedrawVideoDisplay(vd, mem) + local vd = VideoDisplay + for y = 0, vd.height-1 do + for x = 0, vd.width-1 do + local a = vd.addr + y*vd.width + x + local colorid = ReadMemory(mem, a)%64 + local color = ColorSet[colorid] + vd.imageData:setPixel(x, y, color[1], color[2], color[3]) + end + end + local img = lg.newImage(vd.imageData) + lg.setColor(1,1,1) + lg.draw(img, vd.scrX, vd.scrY) +end +local function RedrawCharDisplay(cd, mem) + lg.rectangle("line", cd.scrX, cd.scrY, cd.width+1, cd.height+1) + lg.setColor(0,0,0) + lg.rectangle("fill", cd.scrX, cd.scrY, cd.width, cd.height) + lg.setFont(cd.font) + local cd = CharDisplay + for cy = 0, cd.rows-1 do + for cx = 0, cd.cols-1 do + local abase = cy*cd.cols + cx + local achar = cd.addrChar + abase + local acolor = cd.addrColor + abase + local colorid = ReadMemory(mem, acolor)%64 + lg.setColor(ColorSet[colorid]) + if cd.highlight[a] then + lg.rectangle("fill", cd.scrX + cx*cd.fontWidth, cd.scrY + cy*cd.fontHeight, cd.fontWidth, cd.fontHeight) + lg.setColor(0, 0, 0) + end + local val = ReadMemory(mem, achar)%128 + if val>=32 then + local char = string.char(val) + lg.print(char, cd.scrX + cx*cd.fontWidth, cd.scrY + cy*cd.fontHeight) + elseif val>=16 and val<=31 then + local r, g, b = math.floor(val/4)%2, math.floor(val/2)%2, val%2 + lg.setColor(r, g, b) + lg.rectangle("fill", cd.scrX + cx*cd.fontWidth, cd.scrY + cy*cd.fontHeight, cd.fontWidth, cd.fontHeight) + end + end + end + lg.setColor(1,1,1) + lg.setFont(InfoFont) +end +local function InitWindowCanvas() + WindowCanvas = lg.newCanvas(WindowX, WindowY) + lg.setCanvas(WindowCanvas) + lg.setColor(1,1,1) + lg.setFont(InfoFont) + lg.print("8608 CPU Emulator", 4, 4) +end +local function RedrawWindow() + lg.setCanvas(WindowCanvas) + lg.setFont(InfoFont) + RedrawCharDisplay(CharDisplay, Memory) + --RedrawVideoDisplay(VideoDisplay, Memory) + RedrawRegDisplay(RegDisplay, CPU, Memory) + RedrawStackDisplay(StackDisplay, CPU, Memory) + RedrawProgramDisplay(ProgramDisplay, CPU) + for _, md in ipairs(MemoryDisplays) do RedrawMemoryDisplay(md, CPU, Memory) end + RedrawFPSCounter(128+32, 4) + + lg.setCanvas() +end + +function love.load() + InitColorset() + lg.setDefaultFilter("nearest", "nearest") + lg.setLineWidth(1) + lg.setLineStyle("rough") + InfoFont = lg.newFont("consola.ttf", 12, "mono") + InitMemory(Memory, peripherals) + InitWindowCanvas() + InitCPU(CPU) + --InitVideoDisplay(VideoDisplay) + InitCharDisplay(CharDisplay) + InitRegDisplay(RegDisplay) + InitStackDisplay(StackDisplay) + local data, code = AssembleToMemory(Memory, "../../8608programs/emutest.asm", Arch) + InitProgramDisplay(ProgramDisplay, data, code, Arch) + for _, md in ipairs(MemoryDisplays) do InitMemoryDisplay(md) end + RedrawWindow() + lg.setCanvas() +end + +local RunCPU = false +local CPUSpeed = 4999 +function love.draw() + CPU.data.tick = CPU.data.tick+1 + if RunCPU then + TickCPU(CPU, Memory, CPUSpeed, false) + end + + RedrawWindow() + + lg.setColor(1,1,1) + lg.draw(WindowCanvas, 0, 0, 0, 2, 2) +end +function love.keypressed(k) + if k=="escape" then le.quit() + elseif k=="t" then TickCPU(CPU, Memory, 1, true ) + elseif k=="e" then TickCPU(CPU, Memory, 1, false) + elseif k=="r" then RunCPU = not RunCPU + elseif k=="i" then CPU.data.irq = 1 + else KeyboardOnKey(Keyboard, k, true, CPU, Memory) + end +end diff --git a/emulator/colorset.lua b/emulator/colorset.lua new file mode 100644 index 0000000..d1e8b07 --- /dev/null +++ b/emulator/colorset.lua @@ -0,0 +1,74 @@ + +ColorSet = { + {222,52,52,255}, + {166,65,65,255}, + {220,215,144,255}, + {231,193,110,255}, + {57,180,74,255}, + {0,128,64,255}, + {50,105,227,255}, + {49,79,145,255}, + + {196,17,14,255}, + {112,17,10,255}, + {255,191,0,255}, + {168,98,0,255}, + {38,107,22,255}, + {28,82,17,255}, + {165,189,210,255}, + {105,145,170,255}, + + {198,105,156,255}, + {145,68,92,255}, + {239,202,217,255}, + {225,175,153,255}, + {255,125,64,255}, + {160,66,22,255}, + {165,234,240,255}, + {85,175,205,255}, + + {178,169,231,255}, + {139,90,176,255}, + {229,175,121,255}, + {100,50,0,255}, + {232,114,0,255}, + {191,54,0,255}, + {138,178,141,255}, + {37,69,69,255}, + + {240,239,235,255}, + {221,216,214,255}, + {188,184,182,255}, + {163,158,153,255}, + {124,124,117,255}, + {87,86,80,255}, + {45,45,42,255}, + {17,17,14,255}, + + {207,175,144,255}, + {189,158,121,255}, + {177,138,102,255}, + {154,112,79,255}, + {119,82,56,255}, + {87,59,35,255}, + {61,36,14,255}, + {40,23,8,255}, + + {127,52,52,190}, + {196,136,52,190}, + {55,90,25,190}, + {160,180,255,180}, + {10,45,80,180}, + {31,22,8,200}, + {230,228,225,150}, + {18,18,18,150}, + + {199,178,156,255}, + {150,135,120,255}, + {115,99,87,255}, + {85,70,65,255}, + {54,47,45,255}, + {255,255,255,255}, + {0,0,0,255}, + {255,255,255,50}, +} diff --git a/emulator/conf.lua b/emulator/conf.lua new file mode 100644 index 0000000..62ce7cc --- /dev/null +++ b/emulator/conf.lua @@ -0,0 +1,10 @@ + +WindowScale = 2 +WindowX = 800 +WindowY = 480 + +function love.conf(t) + t.console = true + t.window.width = WindowX*WindowScale + t.window.height = WindowY*WindowScale +end diff --git a/emulator/consola.ttf b/emulator/consola.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e881ca4b59fee70c0b3c87b258a5ab09065eb5e5 GIT binary patch literal 459180 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%0Dq(i6 zKG|ITc+A0jWN^AqE36q|?e-}ojWvVPOsk4Df1{u&pTT308BojdT{oqHho&MC!zPZz$nCa}%BhwcASvZn;?R67-toZoh`f-0bw|dMIgQdRd z*+W*oFlYV?_Y9P@292=w!Hy};c$cB^nbxPCys~#fLK0h5GebJWNJjBl*GZW5CRs1A z$;XCgGFIx&Qz}Cb_9u+#6>N+Zg6&w&kHZ3 zKrc0QeAd(?rZ$OVI=0I(9UqIC=mQQpl+A&W)UZD67xYF+hbi9{Fyh;E&*}Ti1cC=9 z=i@&i=f@9QY$w?=4p=mL<2eO?7YUO%#>;&Cho=f)n<{BViNYtr6VwtsA@pqjN$4pp z-?*{exoH!gd*I4X^kzKQO@_1QK961U*?`{RGDSJhyDN=sqD|Hdnve=%`s3I~Yz-cC zJI^cbN)xMbP%&w&7Zg+qDGc^-duUrrFN%tSk|@F?(wpamX-4qf@7$)MLB zx^fx|LX>1#r>{iE`R-&ds3<6aA}{T2FYPVl6yy}J#qnA`UmIw2RdsAXk@|L~(-V^g zK2f*>DS1u@Jxxu*sS_RT;$0m}F;!2B*L6I|`u8l5@(CV48?B*rx&Xv9h>q#MAg z_`Bx*FO@^TaxGpkR_ z_9wo7sv1tp8M)@~H!eA{uwTQPqxik3?D^yo3r9EJF(NHx_<~W53u@EEjeD+;XX~%s z`O9Ow1bi6(T&pdQs+m`3(eRYp78XnA+W3nf0x^2mdj;~fTt_C+r)4;fZBr3Nna$w6~aq;b?)W)nf&U=e5 z<{8Bo@A*nWBLi!N9R_w#{+9|`^0}zUQB4`S7cD9bO$D>QwOm7$c+^=Ex=oI7V)~=g z^1~BTef!q&)?23JPROmTx_?OBitGCck9VIdlXcp&XID1~(qHSZeeQoZZT)fkBY;V3p9g1lVExBnEku(PatGG{dNEoc(NTH=>#Sv; z&yb*J6X-IeMrm98(f(*d{8?kAp+D>pz9BI?pfo4vJ7&qk6i}H1JyXCIcT|*L+oJGR z#`v>Jq#fI$*zBTVwyOMSFB+NQ5NABJP@QRIH&N2>l%}W9+@}lj^W9DCoQ~l;iSI3Z-4&I#NoBW6Nf)q^T@hTp)h&E{S$iW zOg8<_Sbt2>u)Lz7ee(*-M$Q`E|L&>f8ly$GHOez>RMD`0d4=WIAlsUZ!d%-h*IH7{ zW*Tq)VY|Furr0Jlm6R__?C{5aJjUiuFKDoP@N%{k)qS0!bHR?A@|xnRZXC9DWs~r_vU_3wz->=Yr8C=~7(RDI#?ybM z*RgqKhsDY0iB8o+fhbX;f{yq#IAv-?okT0~?HU9I4OBJTr`YZkox={01^ADR+}O1m z#;(?5eG_mn6r4^$njEbDAvoeq!B^KHVEM4~aQg$npdiv)Ss!|$52fgXgY0A6Xf{i* zr49*S?bli)n+M(My&s&h;kd$Am+cJ32VKQ}vY~56v<9S}X>sTmGH?>r@fG%c9k98CXM zkS2{0v|!w!U{B#=S{+P!X%}9dh2F6}AXLyZqh^Of4PHZ^^f@_1i?45pUa%qZk(WA;Hn4plTNzU4V&R#4L6Cb;ne3 zd;1;Y6CHEtbm@V1&$i|C;#1_x70#*gnuTH-TUB6F8Tq}^ir+1*>{7ZiLSbN+(oVWH zT}taBb%%5*y(>~WtV`)Tk=v4 z;~j}+i{E1P+iiY-QgT8fa~s8({26}R1Lh~pqSReCMdX*4>lmi{r%&;jhs2`iT^ zxl-7MsyFJpd{vipbw`~%R$x;dQ_y;BS`y5hyk9Z-@qKd%X30$qsurn>ChgY9nWJ$LN zpFDXoc&{vvukrLMEKgJYT5ac2N_wO_{h9E)y~15w;*}4vPRhVHE7tR)Toz3ZD%mAT z*4PDu<&ZExkZcnKS!Z?Hy>|Vp8sn>GhpmO0@vp#+tO&}sKv98LY%yT7hr7=99ezMm zKRDJ>n$yCZ2W*uy7O@qcVAtqhRm{d$6$iDoC|xKCmX@$XBSb7aKU?+K!M6a9UBtH` z*afL9XbkSSd5`E42L@jh3WCRlT9lj-qJ!tLft}3E zNZfcW;DjUG5^Fn~U^Wx`c~k$GvrH+g-mn7ZoH*Hnz3<1@pm>=uxns??vkI$hvY%H> z{YeahmfTOlPZsK0awfvL=&~^X9US9MW^aUic<$u;gmNKINRBC=vi{Y@!S?&^Yr6H+ zhk4T;ziGu6UvU53QPr0xj@#I=<8m8w=E08^(wp!wiW-s|)=P8`AFqy&H=;+cDvjvT zt4bq!^s3VSze_iwM^TsQQT1sNJ&IDMN7d4Z9z`jWQMDANGGz44;8OY(R(>*B715Um zol$XdrerJpE;IKWYUClFt$%7TE2=YnzoazNw|dLTj6qGQO#$SlgKQs^B!{#f+4~ z;#Q@BUgC6(DqZ{(A>&9a0gs)qnU^pwH+jr5c)CyHv~&Mo3=W6}oyKdcv>PmEwRlU? zSxM3unNxz9>dd_8_$WXByZn4+QXgyipatrbc?EeGfj5h?AcR1oB-dG`vuVgQ$v&2! zpN+PRx6G^uumFk*U=a*V0buKCEF@f=VG`CD5*QJEi+Dmu|Igr*t3Yv!s>| zi*WuhpCz?amF}I8Zsz|sfoH+tO9AnJ1Kq zHS~?`#}8Gp=0fe|4eZvl3YwTK-Q}6NM}I5La52LQfGG_MhQhJC2NE6tne zcigMmDa<07dF3LHPB}1~32c;bcIcc;mAZ&gc>18u<#AWK`s37LMKJfYt=hoMTXx1} z!UQeK+#6V@`&li*ss#)RvB{?uUKKLL0yIo`Qsb$5NK^f;>00LN`plNytCw^9)TW-} zR$e=`_Ha|v9<9}+RhG~l?SmRtPAZCJ2T>+F@B+`|vSSXf4U}#UPGeqJ$b*HKcCMpO zcwH+m$$g9~0fWgTAdf_# z2JDF24rr-GGRr3B!*Li5TBGJ0*@%Csu9BSNmNur3+c9te+P=dNW^==cInEUuV^}lV z8#w{D0s^w;8zn@6l5-&wTqTl?<_wI7Z2GlDC9o$`-LlXmrgx;i|9&%Gg7EOBP2#v2 zkKZIF2TKlYIe>A!0=)sBAsZKVO|7sPZ+6XOoMc{2&K)~GYJ|@9*0r>A-}r&AH?^+1 z-sXX0SQntImZ}_^7aY%5i<8Xc9MfAV4n{Q>kED@& z@(Sm4YG$vbI4LGQIw9U_@mYkdY?GOoeZ*{Y=sn0kwcuZebVPUszTy}-FXJ5rzMAa# ztOTi7($^-d5H0CFRhB{KLA@^Mt4R&kH#fvRrQg{xE0`0wVIY4wId&XrOYNm$L%gNM z26Mcn1*aJg_Zs-aWIah=D_sfedtFdCX{Ha@mgIp%gEre!Xq3b4;{N9}=mgl2AoOG+0oh2dUtFpH+S?syr+CV z!F|eE=|63$$~Y}m$DUS?I52l2G0`*J63@v|Bl-zG?1z3L+@=seqm1C%`cEe#AlIAlilf_=A@4!?WXWN&#{kyW@g zct9u$zAX$18Z6n-b+ZR2J+{e};ok*W|8UN@UBZ8!6M@&uG*H+&-@lRLjysC$8V^HtBj_+(c7+#$@ZFUP#v z>-x<%*KNJCE{N6sSjCh#AcJ7C1Ut&y4BhIwZfIX& zo?%WQN~NIM4&6#4TH&g?(5K92gEJlTEtin}jBm|Si9WUP1-O^(IM*qtK!qpw6QZ~4 zv*A?7xA>$mZ*ywM+nkzlKHE+cs*tV{1s@l-FVi=)S{%$4Y-x_|D!=oYV{ka-oH>bO z4m<2&!`YjfasaRZzw5jrQ2Y*>uP_==Gxi z5BId&rO}A<8aI_^j{omG)WaUr1WyTWLHpnOs7Fk=|3=KxOzcD8CT2;UkI*b(o^5=V zJbaeaoop0l)W&C2Ek#|h8$VeoEQ0IRJxh{wqSb0N!?4~Kuxmt<_MG0V`2tsEMSUgQ z!Q7h05t8K-F|P!C6Ub`dr$~oMuRRA(gysv}bO=@FvYdkhr0R}g=5rS-PF&L*Y!wX5 zK^|Nz7{!4dhsA+^7PfENgnS2eZ=!8{Bwjv}kiE=2=v_)9d(%~=ol@Aw_ivR#WN*5v zZe(vlDchUWx{ zC$STvL#=M~o>7d|G`sUy$l9U+xa`0B z>Uy+F4a`lWM$nkAlx-H+BN3KR*O)oU^o}C%?xPU_LBpg9kta-9VS z0#jLu>1xolsIa)8pa_w|B#pMH97hpsD|Te;upBWi4<$5JYWVAfQ44BQ&;0wn*|%Nu z%$UUbag+0}-7vLy_sPnM{o))MfnNO{8?~~&rpNH%UHwN5`W>4Z+k z& z(gU-{9=>*$Zs>E9N8LT9N0TRiL~&yE;QC$#GjjXgJTgzzEq?9Z!AYs|kl@0@Q%BY; zdwxOfJrj%EdG-B*(JoKg*az7<-hva@PTYcuQ+;ktR^nk_&!&logI6EWFSQC*$FIgZ z9FMdIXT=F|zBY;>v6Q~B+YvL#_8}{8U{I_^$FGX9E{?ZQ;;64pK?_VErcVunr?ROd zY6P@PN+0)M)1B214EsKKWyp%dvqr2cuUuKvf8Myly^jxCUY_cU7Q{>QURgafDtcQ| zLcyffqYv!&`!ORd`uH+t#03vOkDBad=|Ov%bTJU7eE~a3(wSv%o2|iEZy1^Ivs|b8 zq*>@XEQw6xI8n>yZBx{Ga>CCFYBI^=)4~pF&QKa6<|R2KfF-Km-OemC&CLVv+CMXQ zLeJfsHG_9tKWf?N9!)n*u6nROdwRjzCxkP1zJBi@lUdl-w(x}+(`uF-T6kdJ?Q?~H zLgblT-G)*8fHlVQN!9EllgSM(9@v-Q&O~O|!GPPHm2mt42_dPhl=ppg<_}HURvVuU z)%N6RmOmmvD|C7fc%_8naQ$TYQr^c}GMPVAOg3#R1{j_XoLjj)hD6dtHV}jq+~I|# z8lT$YUOZ()OMei>j*6X6^%&DI)IVt7q`MB!D=oWihjQanGfVeVfBz{}r4y^OWHCE6 zKkCtEv?ia%PMyv`>|(3JTQP$tpP$dMVWTysQNUce-OQ@yJ9m*SG2bIdG522oAK_52W^eHC zLVw|@=}Ru3lg`Gq?pfbaBEGqPo3P#+oWss)6NBR=7v`xi8Ac|NPgw7d5{s}J(>7e# zdoYg}d(gbTNE_Q5Fpo~j8=aXqdUReUP4pZQ-a$r4KjG~_TH>E<&fvhBfeml#QU>;* zx?(a=7^oYl`%`h>5Bk)Of4jJ@;{DiB+__!BhK$W|0{dlWZifP9rtsq%4qQ1nzp*6H zWB6>t?#XzOX&dMaDm4Rj4R0$dd6jmbz8@%kYKzCetrXYAR=ls^30$#Ounb6c5adtD zwuiz@QK1y^G>AIFOCC8MQ6{FC5S}kAE@8Q5#qQJzFMPIgR$ppMg15ijEkn5R2% z38Hgi6H2GAA6;>a-{~9NPtXlrdTl|UI}YEu;JI7!s|Wegyr!}&XPnzudc*oLsntF~ z>7WnYGxF8}@l$RHwk2kJ4MqMwwYi1$C2`^3bYk*^;t_X^FNkr)<|m}(iv}?%FtNP< z{A-KT2V7S=_?7}wN_MWNQpxr7DCnEUY8rHF+wFrY zh%ELyr7z4Lfo#Q8zYd+^Rr3h;THzer&HR(X?toP=Mca(>Wp|xrq_Lhb$^4Cmx7dts z`LYtJ0x=A0cVuO<4GTsJb8y(TY}<-*)7N*6u1_wj8d0!omnO5ewxP$yr^UPG&T;0{ z_3Oa*hy-uglGi`WagghZo#@^BSU-B`ZLTYh5-Yx{DH?H-y#b3JdG&gvhD-WZZ9S4$ zG6Dt{Hl`XE`I**2s6NkzzF;DBT(!E?Lz`aG>RT0Uy-RJOxM+ZqpB1!#koauxLVbs` zJ6R@iQKB<^h6`OH5L$yD3!ezt?Vkxl%Hr}<-R{)(|S~ot76Do1f-( zr{%}S<)z^uCX!|FF-^y4+*m?O)%BE$(ZD&5^+XJ=EPIv)?k4?ygY{RV3*DglG1JnE zLXJ&D$-9k{*7Te8muW-RlqL)sIxJ=O-9eXF(0#bywx=;~RE&3<&F9dsyPwvr6P^i= zIm`nlX9r*(rbEsQYOcidNO=BspI%Q4F9@F_Rfj_85PTPY4A=xDq1K89EtTYvQb_8U ze+@(CVXxCra(wxludc=n%1m3XKPYjT&gdo)>m&1uRrK6 z=7M1{_?#b0!I2Nn@NR+ z#Z@?NV8=rG?Te*#d7c?FnGOq{>_`pk8H_uWH@R0t-urI+pONVqlgBF(Prb3;c3E4; zB%QhN!j_~uJU9Yb1+DF}!mF_Dj@7}4oZ+ss0fiOL*2lCx8lYSrdt%p^(f+ck;kmo$ zw@(!g$g&?i)N!kL*X_5e3Wu%B@i_Sz(6=txs4#J{Wyiy+V%ey_TI-T8F%uVzS9c^P z114+quP|-pVZ@EXx>b2@UPbtKQ|7Rn`;VA8C^2)GQq6t~ z!P{QF5BY5`Exzq#{J!g@dnVjBA*XEG$|1;wW53bot?(YSq0cUos;;PgW`iHL#qK6U z8jLAegKnKU&E)H_)tPGb*Cd}%yARIVAqzeq;*upKrfJ!uMt1k(iqe2#L>Ab^t6-?><=x+VmmN9pa&Tfh> z7+weyH)Cq)gO3Vllvf@cWwWQZO&1n^{8r69hZZ!hn2^tmT&EXrzGe4ZBpn}zdgDQK z91-?nR61;1Hoem&!geFhdedc$Koxgp?uCv{>KLq{IpfH9ka%8=^lfoiH`}f%m#mR>SLQp($j8nVvokrxpANH>H#BN3mlQOBitLswDzT$q==K5>Q93iUR1+(5{RxSqxcGG> zrMzLnPHPyuU|6EyC~Bo94wnqD^D`K+KvtnEY11AQuri>~z+a7Z{UCB8yF+DOfy}r_cV;D~=a5j7seoYUV z#BFpN{J^^dQ3kD6=dtR%TH7xsgSnPm_P8#oheBjU9p{DxbAa1ImbqJNw*8`*0;uXC zmlY3nUFtj$7Wj^HtAd{i)7WK=L_6-?z%*CSRrJliODg|nScDcoB zer~U5+90@k24CC|6qTE-HrC&*n8VlcR{kh5g7;TMj_+=00yBDTF?dAct~J$K+rV^Y zvV~PCtOdR}ph?-^wbnK^E%mBgshTt~Ih|btLjT}qQm+OT(API>de+y~_k3*2u3i4J z{!pY`jUG58uIpHG9$K_a5dl z+m7i^Z4)1A$9tWj3GtE)^uQ5{ETzkmMq@G=wYa*0i!G91x7(;B!bNJcIf%u~vQRBN z36&+Fo@NQCEEzT6G1^R4yFt>L&04*#R->&Kg?b0?Gs}`?y+IOb=dBNZ+e5wV0mdP3 z5*c&h+aK&RFJyYjYxyI}>_$Z==|4(Ot=e#6eO%&w$Jg&@bYyQ>{CH362>NY1Zca>7 zf|J3DQJa=Sc=|72BkpE$0)MHL34R#KuUt-&b%(B82*f8Ri~eLJr6MI&Z(z4lYqeTU zEfVVLalZu;!{$Z(PrcrA45^m+LmS34^L$n-Ha`BrfS<_?f-QTcr3IO7x|Xq|H><@{ zUs)~wL64tT*J5>ejx4LgKj6-hHo1ZPh7wPwWwrPR1Abmzi?P(&z5C!~r2mi^n1Vti zZ8r0K@W5^#McxJ0-+$Xr{bZ*UTqW3QSO6fnD-UgCG? zg{Y`#pBs0g_T#+hsE5T(16G6iijXS_no&*{UVorUbwLF#N2y*wT#{0y+uH&Skk7^Y z0B_DLb{eq5VmDt=B!NUIaDgwtdSp=x_6vg$1imc8k&6=C+hy6xalsu$x31WFy)P>| zsxU5hJnzf6hqhlN2GzB+{C7(Ozgvn+$`QJYBXkFK zDIF0h9o(g~vkybNl%9;#9o|{0ITb2R<6ozNoCCuYQo2{ZmVK+V*;0ewcLt0)Q_Zz< z?$~`)9L36Y#v1l}zfM;(Y7`uCj_mBh!ff`FS)9ueRcOU7TucV2cg6Ra24v?R5>_>9 zG_GPq&-OHV2b3{?vn9bb(DP33-l@6Nm|gE@?q+jB?60YHRjt;Bf?aepH%htF8EOfN zi5aN4w$Z|FhvuAtHe##9(%bWn5+;(sskoGc)YxB@)H-WbD-0!CuuB0kevsilOqCk< znlVqAnuq&;d7~qdh^yVwYFL70>HeXAI+DBgWmiXam*m|)^jSxu72-d-IIk(9+}}$T z+{y`%p=1}6^JW@XF%Y+(mNsWrR3r~NB&=+L3kEC?B<3a$%N+P-z-lGK`hDnchG=bkz4nB#251q8U}LP5$vk4)>pHx*9F-|s`k-{6jV zUvbAcK2%~FG?niwn!4P)b|sheJfVOpn9ZEU>QBrR3$?M;4kwdpVj~u*`YVe|+)M*- z_VbzO8VqnIF}D@ViY^jZKp+vWOri1Gg}&sOgGbyvz%Poy>Iq8etSnEzs_KMSh7{a0 zZ2sc(`XyuL4`?i1TJ9~Y8dx-XL}6~$gc6}Jy)@m4FR3&q6wqMb^4^t!xqrF7xY+vS zb6)#>2D?eKt6}_x`-je}&u*N0OM3FdEPT-M_LPxBhg6T*Bkbr^dvitk&2_y(Yf`G< zYyDZi*40&=30vz7FI}#dX0p1hbZ3{+052`;R$9fg57oMBuqIUs4Vg@9Z$WID`S<ssPqm*r9IX-=JDUJNz@n z;r-|Ce@u>gzF=z#ZfB@vEURWvQo{kJa5z916Q|Nr;(U}61O-3~^Q?xV*-WD?=9q<| z)6|*ldflJTB0SULGe|n#wfA?T1Jx@mFcQ<#F2DVo2*Fc6FL-(7C&>P5JX37NKUhvs z^-oOWOo7e#z06_oUFC6>6oF;c7}IyM?Ut0O`)Oemeu94N`} zLw{LUvZv&wlJ`oak~(i{OLUf$@QqP8jxQaM2 z4jz*Up$l^pvU&a(|52g79wD5K!yUPZjHzMJ#1d>O{0RyERt1lU_Wh!8x;@R8l%5SB z$__waJTB8AbjrZ}8KD##H4Mg`vNSC%T`np~FYu(g@!kmda&gjNzFdB|5RYdC;u_}; z@@Ed7+IPSW)k#HLT)DpBg~M|`X%I5s89ZxPhCO4z4G&y5J-%yc=N{j+6eo)aUAD)obUXL> zA7r-2tEHWLd{+vcd;AYF(;RBu2J{c{D3&LSy`qFvk!RV;IFM~|W@b9$UJwqD-Xu?0 zg)n~)VQ0XA7X@I&_jXp{Zp*a5|Y;A1axalvc&kKnpwfWGD_M@F3T1 zOTIdXDzann2v=uz0F8vV=BQ}`QJIORXj9kVR+q3>>44fh>t|dF^CEV%yGgd=GRU3-f?kfXUADty3PjmsYV597 zv)_Xz{Zw4UMJhOSDzkEYc6bMI|D#pWQ*WzsRbwm)tP0i| z=`8$(E1{Q0uxxMy*TY&^gMe8oeRX$m;jX5pb6*s#sOYz<--2EI!rButjZKIZb+IF(;3{U(Dt4KywBmyaY#FLH8!iyA*hp!X36J=pUIG_~?ac$kYOX!PN;55-!x2a*Rj;F-B zIdhrYq+^pbXU+2EYgTg3@kkdtmAu7yA37OzD-CJQZl$4l>Q)*$8Szr4HC4JHt;tK7 z)>KPFTC*Dk%rxc%_Xs2n)~=rvs&CJDk)$DNmCK@5NX^v zcYQV|60KOXbFxJn&9);!^Jj(8qHz)R$oD#Sp^L}BVPAF0nhNEt!Pyo$p>&UQNt(`U z2=kCq%ENn+Q%SIAx2RW_lgWDVZ5Hs0s6EZY;hzvI}~T4a09DxCRrPb zGyN>WdB8XVeuTo6Oa+AFOd=wbsKJkCe;j8DMIYhzAu|wbY=>52_inOD1-X;0rst8i z6m0TF^*AE1v!_AW4NnZw!MDD9UsNCu#$aZ^-Zwp9^VFp4J+)EwM80f8c)sHp64pP@ z4%s3sYw$-NctQ`G^3r)Tn}T*~8yn)mXvI!9XyyyqAc(4Wy+DzcPO*w;C`b~Hx2Jad ze_>QqX<3KS-q*9Y+2Jxo@d&G)M`lCOSav96(#vnW z?o~sumT(BRGw#ZaekPH>4Y>X`zzV<3Z{n#Ty-H_t&HN764(f_OfUHo&RI!TJ@KQB{ zlt)_Wx1vTk%C&DMTh*FFsI``B--^sKrhP3T?Q5~9+V{$pD@gl5ZaCB4sLAh`pafcd zC!#X%^XIVg@EwzI^wh3eO#!1|5DdsHvYU0d7=ok_yb#9WG}%vB5#+-rNSpOKs>d}7 z8ZfcIy`ZtyOD8mVI)CE?yEY3GC-j5gF=jb0uh~wjx`C|*1KhGWIU5B%qlZi16fXi} z1T9L4phh~OfFxTdR~;49gSA|g%02J6eWHf;5u`mMB=Gf~fKNQ6FK*nhWxep)nxF>1 zJDymx1{|0L&RkSE(86z{h%u4dDA=#Sv2~m?o%*?JX~=%XJajEp^)rj(y-tG>3hEq! z7+!zxVWlp{afB%#n_D59sEa#wJa2ukoy94dEreKLLhTONC5xY2P8g-V993sGTWb+A z4j&^Rru_YTctrx^qay(UiiA;7+RI9$YUI?wWR<;+qH~9f#8+8Xj97H@yl_M{5@Thn zGx*cm`^DSBan;UX>oS%gz-$8+W#zm=ARJ?g`2MacjhqXvDh;T1L^led9gdf>9Zsbi zITwHe+u_vG&<@v)LgZY4_c*XwRO{9;_9H5sDH)_!Vb`USJaUZb&jTrOnYmI@FUIXe zM|4_xo)x!K#MBrc(%oGRUtVgO6qng*vWn4?!Bb~3 zkBw_JG_YKNiWUfe3rkyImsLWu#4?oBt15W^55F^RX_3|2D*S_h^MiV0C0-@%$!x`a zl?ZV|T&tpz_kwn|N}pX=VKZBRm+`3D7S~lu!Y&98Rnsk5N>e&BCs|%;lt=t*L&L30 zDi<})?wMV^zG3#A>|>9djiv`t_Awy;%Hp(}I?J2W#HGSn~D0 zJ6>HiMALqsDE7Ny)v#Gxdlre5eY$mPPiT}Ydl+vy$Io(EDBr_4o{rh6f_!Ho=d7A+ zVjOQqRG=Cjl|B2jQ?gTZ{f-DLaD*s=*Dgjkpx>ME@$Lbsttp9Z84Z=K?z-Gob6uZS z7NcX{I_|Ht!*~nD?72cSUp&!%Zw5Rk=yH7YMxRP>W22_b#uDQ0) z;#XEKc=g^PjpH&adwR;}@0yvKV|wyguYJ8MdbF_nh6l!FW{+PxW$N0onZofAw+!%a zf+-%#7l38$hBsoIY6~F8p*hNsXlDM1fX$F;$&Bf+*O^A@uSx057H}}B{IMl`N_`h>{S*F1ME2)>|3TPAlD6N<26zF9gm!pSNIa2jRw^CLA zzKPuuF?p;pbM>h0G>w{Q7=~gYDckgE`rBE2h}Xg zMh9NKwJ)I8OR2H=*T{qH4r2*!#t`*p41(;b8Ld4Xy2Luz&vL-}glV@)G+AZY`irhX zGloTQL#{|j?$yzD6fj>Tb4fz2^D8nWd_{)QP0VOjIAxY6EC*bQ6)RVCP)1#6{YByQ z*>RG&C%O3yiZEBWy~1u6a4+S57o#s2sq|@lxU6yg!2c>pUomMwwjp?0h!P$4|0+Zy7Hw=ldoHnRkM}L~J`G)+AAvad`Yb?*rDNai(FAvmR4}J-WSRESqL2#o` z)dL15pn_4*MADCs;dT(u$87iIOx4)dMPH9^TY6VA0=h ztXe1Eu|bRMy$z4I_oOf1zI$$|g=zdDxOW)GZOe_AHFke_2wzhbm{a6lU`|)qq3qoOJdHZu;B~`+${O2UzbLi<+H<3b#&*xzh@AdIxf@0B7!cS)cF|RIBX$u=Pe$rSVxl2yNu|K7C1#s0rR_L3^&ksWse)hN zKw6s16i@ujdlOHhFo997o@vzNPptRXx@)7`?6|3r8Sw~k4;|lc*jwj#Fp~?Rx3h^I zNnNZF&FpgY54B^m*(Fl>n?x48;Wj)`?UCbt_tcioLx1OMG=7`z((Z~J`1$D!E2@g` zA&+#O!EU9Iv%yt$Lo>+hvbjsju!UHLBXom9C*4mTbul)M_y#XIP{C{*37C%S3L?XpH*R?P!e-Z62W^ zF{xFrZSZmNYa9F~RBDpn1fPC{2Fb?AGH{P0qtPAptKyD!v?`#*oF)-tQzfPzU76B_ zQO<93s4<)H1r|PDHMZrE^8D5P12KIk4@eU}3})91&#LpMPADu_>T-gg2pu9F%2Mz#)69m1*9cA{ zm?`^NE0%4T5%4K$JAc3*|BK?UO?UmOqH9USVDdz3AI~-I$!QE#JM(BnIh(N z^VJD&r(RcBGkVtrrZ9GJt;|M`GogS3c$d@a z)umyre06DP?Q#BfQV45hRu?NWL^rIJSt+z~s5GpVucoW|WABBgy@+|qBIRnV`+3qw z=xEAy;YE0>_NAo6Fn8WTQ@q_CqBsmk5g7HlyPgS8YOqF~-|!Y)B7Bs#u~3 zw|y{K>O?WK5>};p%YAPVCz7P7R9yI;2BXXIi=t98BG6)Npy?5PoXyFxKrNrTtF3>mie=*jNVsp}?+?Ccg^i3y0C@LQ?RlN`)= zD*N7rz5AnVw!$Jmn`d_x^W0|nJeQ)Jt-d<#uNn$JgSryYWgB0NxHf=SpYoNsH;Xq* zP(tkjQJzamln-uqU!6vaizEihJPF~Yc#PkUQO^e9LX>m?5Z^y|GR5cE$zNW z)za>3R4whkM%B{pYg8@mzDCv3tJkQL3?T=Y?%bC&q}qA}VH25DV`H)PDJ&d1tnZ~h zC9UPvg}utTHuNqvJYm>vc+nsk%IiG6T)z$()Y_{dAq^>B$N837T7jSmQ>O@j;y0g3 z_~Ad|FS51v>3d1(Q(n@lFoLRn^($6Gj-kR(YmjV|6CDB#JEYg3Rt1CupzN*i9p}4g zX~nzj0LZ9^{MFrN5z4l6vGTn~O$lR5njLXE=RcIv{5z_+>)O3)b$1ntv45nbyDs5d z*^3>cBI{h}Dl5T_OmHGAn)yqoa4Utc7rd?6X7eZVHDV)%Zp#G2@8m7#Yjk8$@Y=s! z7o8mIwl81Jl|Nnue=PM_`!(?S&Vja1M&1sOh#n<{0urY1lSYiZCUeR9#Hz`Ge)9|R7gdknJUeh*TmidHR}g24%S++c>Ky9rvhD14 z8QjZrDz7b#=1L*unzb{iB;e{Dzg`znb`(Q=Q3h<8cEum zmdM@&k;I73aKqEa|Li1f*p%S5fOAx}tWbxIgPoX|35A4z=ydj~)l+>R9y0NvX~j)* z7sXW%sE$vJithENjngGfyXD@MTC>xH9yXva-)f$Qy^@5kAtM$^c!()^Lop?~+-w^4Kyadc+X;YCKB8D~aE0U^13zf-q63CO(f|M}kMd!EloI`?+fy;Y}9 zojUuGUsFI!(&S$ui%d}<)6Q*8P+-oSv>pCH^RAwwukFS>B(CDq1qE>4ZROsrEEv`;&qWq*F-~tZDes zC;S3AVncmjaZQMa-xKj` z3?IN(9VcYGyz)qK!j5_6u|n3&zGo?Ho2RclURoc7aWlHls(iR<+a^F(3wR#^WHVUi zxL$4CCy5Hf@GfWKe*RipBk1H1)9m>@ zMM5a<(#V2BE)BZY_-#CBvR#g9W`F`edljWtInP*rfZCX-5#qH?QMSv7XGKHO!b4OD z$2o*&fGimpl9nqSUs*#1= zDq_rKZ;1t?keRG&4f3S zzqoDK(A){*N7nkr7n3?*^e}_VWKFabPZ?2Z5i>@NnWdnSG}Bc$qC`GCZ-(nvIs;dV zfVX7gCefMS*iXuDC{WOfLzv*hAzacI!dKl@AUwSXmz1^yVakX21AK(%fSoH51_>V# zl#dA2>_E`rvKJL<)DCqW9A#9ss#=sMf+JLW&`|0qb>SyEO9h)oJ9=ibgTch;#=;E0 zq|s%i+Z}bPIIN<&;zHa=|3zJ^x&=}6(2;VH6>0rlPyT?^l1XL0*uqK( ze^jsN2k2bp2o|A2(GYg})aGKu=Nw4SOV3My#^qp#)eI%*yFqtCrBATi^C~Vl+=7r* zncJ0D(3Pd{B1PeMR9gq|2DEXc;Betfa2(1OtUx4ICy{p-0Ab|;dAVJoysUz*P?lTY z71j|_p&jKpI5Y4Zf^?6qd4O0Yl`7swij|t1`FmYl$+n*$2E=NDgRk-W#=#4RXCA0n za&+Z_J&UW-YA2M8pZfX9{3$twvkC&E2lz4@XH<$$rVPApVCmF`tgPXox*s2U(ck^( zq^Fh-u9*AKxVqb?)|t}QU-#RiYW1(xYER){e`RaGSc01XKcubTStWR+4OFljiA6eC z5U#%$f;RDG=>tiWR<2+h*>;8kEg+a*O!AzVg!pt1w`m@bRt6YlE_t--p&#Vy_k?>MVq3-ztat_+{zPMBVs!J|a?>Z&#Q06BczIuKaI;0>Yb5-yBM5^^E ziPxN;c;)=mJ`^`NEWf(<`|f)6njdI_fTP+gZMk}W=aly#W2Fd2#?>gT6hwZ&bEK8E4 z=Yub6KG2AomEsE3M%8weq>AEeS>*YAlIJ@VFZINJ4!35cY*Jjc4I1hB5L&B(Xh(1^ z3PTyh0)8n>T>4}Ch7Egul;My3!;&SvP(T)CJ{F!izg+`7+S#c>^x|Rm+n`fGtP{-K zu157rg#B0~Q7c6$YfXK{OAqI`6^Pody(O(t<R3H?72?0qycQ&gE0gf)yv`sqA0FhA#4=314R|c0LzQ69?>C0C$AJD zAVI(=-`EIbDGfxa**|{Vx8eRhKX$JH+5;p{hwZJMwz7NB> zRR#8}f~RAGc5#KY5&J#pa06NQiL7TsznPGOOZ7=Y|GWHsSBA{&DhY)sKyXQ!-OZb4E7~PR_z-2Zt1P^ft{p zK28p)pffVgV-77$Ef%w=HODI0d(}8S;c*`0<2)8p8cP^1$6l_R`M(*l`doO#t>I62 z5J?=eOV!J{Jt$Lw?aQct`!^_B)c9={94x6LAptU1(xDalje1d^sQ?*yyg+9al@lG6 zNu8kt(oZI#C~gpKID`Y7#$Kg!Oup)xv5Bs%L=$jfR$vLJ36hGSDqJn$$}z#kK81j-W}kMLY#3rfXPiEj)_`1}!*l4c(clvf zgyQr;d`F`XM_KiZmUB40gXfowjg85Ow_4*fV)Cl2aT)Brn9MkTCuFEuV#kKp?&lSX_Hi51>c&P@RM1hDuJZiFId=KCC~Fo-g#y!%Jd*!7m` zoi*~dFy$BliHlC=624FLc+^Y#7|MLogrO3sPzZ~p8D?$hx6qpLE8JBw295frOhUj-zs5h#&t0lFKqeu7q1X=Dw9n@P< zTJD{YI*6}0R=m&UKdxg0D-+-naWRu}GV8_%0^{p4@1`US-ILU7swVVLNa#PIDllL` zpy$M_(yZd+;FTJWfg@<(<7fy*(>PEO-J%w?YMZjh`i{d&p8ubx6)Vbpr;}bq~|5sv1+~^_GpPLUE&jyd}JU^y<&Cf6|aqlh+-_5LlUzjGSg= zL5o{>c%_3m;vUuu=}emr;7p$MMK@oFFnCN3;o*=&ANMf!4Zc?(bgg~k;=CZ&=TVs# zCI<3GRHUR-jL3_8I#a!tifsCA@uqekR)3yUHY_J+XjxKH+0dMvVP#44EZ#I{b_KqL z9@cA-m(UErWp!!Z!weD;4Z^7_&7cIy+03jYXm$yk9G*=AbaA3qp9HXeGIZd8~?&XAIXgpwgSIfF|Q6H5l? zWEK@=W)~E6|3>qkH_(usH7F1t9~hLC-4O83_Gi(zS$-M8zep{H-Tq?KHa>RR@6Rf@ znZ&-q_D^P8J5y3z>X%q4pGzsoatb2RqNB`>DZ>3XI#xO!a7YelsSes*jSkQKsF3^0 zp(tx3h(pp%5UxJS>HZ>TVfXvQP<}$;TZ%^>;w|tL8$HD#+#eDg7DtjpO5#rn>giDc z#{Hoyp9WD19(Vu;so4L|Kq0nGgg8^4kW}83=O12~m{d7DKc~1jCpQpaQ{*3h`*wGc z=J{BEZAN;X-{bbzWu({mJyUYi((?1u(sJ2|mtN{#uHYy6_2924Wt!=)NL zyN2p0?o(LmFM|#tD$KiUR)m>bE#J zFjdKX?DzcV`47ZLN<@saC(DpSS&ojz+o>s>5Y0xS} zeE|Bk5~JiSFe+IPiw`Dl5|I}g%_queupE6`g110h8W_OMn_n@wonIb!S^Tx!b?{`@ zDq@N`Tdc@6ht(T^O%9<-fs~qE!Wk&AjG(dCj_2Sop&bCq+)n341|531%{T8g5FSV# zSD5N>q!z}-7tm)x_uteToT&wIaRu0l;ZJ!=n1>KMG!*0G5Q>yh=-GKF7St@c!|Wgs zL|$!%Y?{0u91ZUFyt>yPkte%Uv;B^ge6Kg(XSe(4GsPhf(^x$DK8M4X?+JhY33Fuo z<`?@*@vM` zZN&0}zy0j#FptfuG%g-*T0vu`D!>0ZsMfoM=iHhjEEQF{(b&tR%h*|1lt80AbX1#1=OGPyInafRtIMWb)7Q9WXg&+;av$Id{X=eU$rZ~nv46_D#Sd96#u6EcC?0^d;sZA_ZRE6T$lZ%Z@+M&d2J%73t)Xu^ zLih?=Jw6gw4EL4|2k0wmA>Tg(QwQh9r^Z{713q6(VSLq+1Gk+JV{(F7+5K{hvYq+q zvGM)KSB-r1mIiPg7cq{{xkffm$v$;VNCc>}1cxYg2zuB#vk!QhuNoF|`C(uRU+SSI zP{?|kuQf=XXyBT|y!yPlc#UDR^2D-iw>!HmF{v~=Ha5HTzsy73)~8Jp^?~rS_Sh#kohzT|MKR4Sgn zj1>LCBr_s(ofxZP{qEgE>IkPArmRO z_Q6i*wwYFJ#S_knQ4IDUWNQ-H9<1kn&L6lUHQNRDC0?Op7dz}C^d9M*(X9e3c-7q? znaalM6ob+9&3>daz*l7D@DS~!;=8}Vye-}>3G=)KKBv=H;0+&l>NS@xsx+4tI#Ub1 zk*~aP4ge)&9iZJWU~fn`KY|MNmM|hguwz6zri`dr01fXuBGxk^`l@$C_JCcAxG98j zke%>sNxa_cr-RoY84~t61H$<+Mn57+z}6rj zAz!J(MwKw1g$gT){oI+IZ3j#6ey0(I*#V@WK27?-sL|NdT47*g?RLPDVk7>2JA{$8&u!Ol#r6IVppy9y9a)&-E8F3ufp_WJ+q#^Yg#aobws8g{`5WZjNzQT z3bW50yl_Mo&3?vQNqr4`5Z=A~uvEA(R`evu;!HZm48Z^8V)eitS4Myxj=&|17R&UdBTGFEvr=l8%&bj1@|k*zvt*##TUVq$dG2b|kWR|k zqNiwR-mt~Neb!2#Ptoq@jc27f;#T%DogSOTi_#K!JGg~>e(K>M18dZ^(Yu<%n?&G>4khuF{=$z z1aJXw4)RYhNo9`Fe1=(Ve1c){D=WaRwE}6^x+yl~v<0u6-_B6?f37iUX{YGOtjfsn zXBT8RvN6BXQOf+TeH+;O{~NxzT*mpxvN)Vu`92C<1!sU5pzdeR>L*w}K8`9}gxnm` zTqSPiAXYGnH;ScJZ(^$vzN@bV*#AptzacuZet}F2YFAzRHYi1sFddb+zl3Kkm*8H; z`8on9hHNb01XS!#9So)_Kj|dG3G>@=9qT7rp~FGVB$NCnmbO-YlwBv?A^%4H&2;uM zdx>b!I6S$b?~|2hD$nOnmef~18Q02_(-!7lmE1qT_->KI-A5MO_yurTH+Iu zgtsM=Y9Mkn%ok?kdK|7B`1K9KYz%&*aF6t^)PXq}BARv`l22+O9}g$<7p3_Yz`?b4 zhyqF@b^_(ptaZO&Q0p*P)Su+Dg#yO%1*CB0#N^+_(wCSylkAwfn*SEPfBfTmS!SYG z@wdONk-uYhX};Vc?`vS2*+awRBl6)!_5j;R`*thF^@l6RrHn`!9Um8Qf}I^qR3Bw6 zSOJN(>=z}S+7KBR1_fmg%6Tg= zNfe}!OdN-*Mb!bY!~rr09thv#$#@A!%*Uj+x?6XNd(~@x-l>@goHz}hbB$&;o|Q_^ zB0KZl`ArHSm+BjjzeMyy2NlbGeLG^@*9?38NW|NL31d6zb+Zcv_exl61>UwYOOf>`8P z{F*RdL~+xZ(rj=k2{g`5wHb$>|AZntbO>M}V*QFa{wjV!3{)=|Sx_)?L3Q|3n%(Du z-=ybnU>n8HMAC(awJs6aFz*1gW3EQL46!J^0%Bf!h+fGhm0!H^D)~_S+?zKb1@fWS zo7X=jWk4QP;Kdt%5!aqQtR88vPJcoK zu#;bh*HWMe-clC|soPxQ&vKw}e&@q0 zcT`;cj{W-$QKN+uk-F%ufHNMSAQsv>i#M8&3`W5 zaowwI=U>^M*)q&4SAI>Jt|`U5R&Yw9!gU3|UdiV<4*Yk6`WYxqxrU}AN`-l@59-wF zkED?1BSKrQI5_<|r}sul{ZU8?37U^WTsTtXTo$fHE;Yz@_MLo$4U%U^)!z5>C$yGH zc!R0W8$@-~VYWM{Q>i}Egrtv1g?7aoG^&q6nh=vd3UOUpa#am|I zr^!Z*TQ*L9PioLaV}`5w43lte;@5Za-TfrqzY6b9SNy%(Q;;s=?x4e#?l!7zNyZNi z2Ep@@JCq)oE99x~Pypfhn>fgnDrJr&gYm-<+POU+h1?+_y?63xoWqUqJS#eRw-fgZ zeHCXbNse$j9Z@k(q)QJ-tA@OKET(kAK$s^c_H$%TcyR8J%5P4d`fH^;`@mr~ws3fH z+`X}d!}@*Kwr)z`zSH0SnCR@5cb^4?I*U2H(L0Czo^*9W3ayjXW>6;?J~SF>4x=!K z5Qk=X4sRm!EY4%#Y0!~mG<+CBJ3fa|d=4RE{gj-6GzUAC-{G!5G;VOo+((G!1Hb*! zbWF+TJIkjqk)|*SQy9N#?vVappFDN8zxtU2hrjNbf&8R01vdW21XtJDvqYbs#Ja5F z>#~kh;j_4YgJ0jx*J-C%j68W{8N7wlKEYy@Oo!R%pvQnfwsX4jje4Qdg!BsFII zNJhxNJQo%`)Tp8|Po$2hmq37)uBhl^9-v{ns#g%*prXC1Ba!o{G`r8P&PYouRZ9UW z&83!Jt(U)cZH$pmSF?b8Vj%OzZgewm14iC>>kIO3Hu{CdzuvO=Me^N#dFdm-c45CD zOC6X+_*}*@4A+zAg4QUtN@X;mWB^m2HyA`MAG-g$qJSS6;W6eDk;wCCYGY8J2fo4d z5FV;OhZ@ot!?n6F*JPNYO14>1MdMAFr*2@>;#4JN_mjv zo7iyK1#kZck?Uow;#GG{C}jtr=!}5}q*027N2BD=h*l*Ak3wZKL}-H=-Ih2m|B}Dx zRE#jNDYaCi&20k?srN_QFK8z!9;a|{gqNM7%v16>@T8lxNu2)tOCf)5(Wy{x_h{;W zC={)=UkKq5*fHdWiwe&?Ygbw%TMp_|gexWW%h%B6@6DalTde|ln4`rEl9FdKglxWrh5h?X8HV>_>G3ONpoK@3C4$n5{78T*IQ6qpw z^8x>}z~%U`oEeXdw8#WwaHs_#!QhO&Xq^~$%D|OS-Q*?;1;cSTj1nZRyoD821g#Sd zai>CP#c2(1MtB_2t)RdKl~PO3D5VTTh!FCL8z1{{Wl7DN_wHlkD;I2^F=Nl*@x}KH zzG?L{VrAW;$Ht6#rJZ^eSi;H4=2FNl{Tcy+#tS-E0T3+v`N+vji7Oj_yS~Z5cVcohS<6 zf4pr!n$p&^9STJn6MIRn?M1|hBbPrz#!(U%*8hvGK<17-`Ca*)M`$FE?2b!?SU8P-tpoc)rZrYmyc;%+LD>kv}|v&r}+uSPuRqefaR$54+O4mk=rVwv0=A*Ij(cOyC z{+nN8+hBF};@4q}jx6m4f#-}3MnfAVXjKL+evnM;Ff#>pW-$?dgCf<0Gk0j~V8S)E zYk+KEr?43*6jX7jr|k0v@ z+xZ*AxDH6o;`@81YO%2r_SN)^+-3gM|n{~5%&g&%}R#QNV1KYgqrQ@wQ;8cP)qa@`da|OZ&TN(t~8+Xkw9(e1HiTLA&l7Y89F>&X>nYD=t zH8Th895|~sDWPUoWB1awMY{2ie}3<;Pd_@^xOkCn!qz|C`^f*o->N!8>#`l=XFRoZ zxWU-6eEaz6Pc0j6I0Og+$KZoP5cKl3uf}x-u+1yXQ(&j(utPxL6CE)YfNp!x0m#M0 zJ8PnAyy6*?#lo~TjPQ@v9e7a9xi2tZJpi%twifYBsHZjOYbcwD;-%oT0tR4e5QTu> zB{;P3H>5K0o;{(hvkLd#a{Hc}m+dXPe#*Upr0DqD*2>yXkR*7JFYccF8Q_o34*IT`h$i6Mzt zKU@?&mEOnNE=C1Zm2z|K_>x%P@Y~0>Eg6v>TQ;^vZthyTsO7#F=B|G6_KF3o`MXBb>OKBF2Bm*?YdKYo`^F5Km9SK)3WzY8GJT}OC-NiS%Y;>pV0 zM&5QeDAYpUmM9e3Qk96y1Mq~|{4VW9-2E{81oA1u6O_Bk6JT&qt);dM4i?n5mAKPp zJeO*SB!HeTQD_|sY=Jv9vQ@|h@6sDG@MA@B@XnxJC`!5HY1O-o)>F0?V^ba#b_1Q} zSt7!$hZ1GeQ@qyYNx2l_U2N7gL{2gKIBwO3EJf) znYk#cEN*l4!mX3bXO9lrQ@2hX-aL46mCsbP=l1CjPA%wIx};>{z>K8oiIr88gURgc zWpCa)B(eXPvQN9u8=u={*l2K+jx7(}I%LfYOAj3?nReH3+lV#OO8QM(Pmn;4QeTW^h4qakKXAdTT`E z(xFxU9R*ZU+{^cGyax&etCOvq`~ZSp-Z2jhI(4;_{~V&uY5)n{BQWuo=kWe?f`$3Y zNFK5TM73a#CP*xj%Cc8jk6^z_Uvulzvqmf_+#9&=u{jeqOf8HLG-OuIYRv4eFIzsa za%N*z;=l#XZ3D=8GrnX*QOW3vM7C$jlZ$K9JaRz&NXtVv)RazLIk?~SrsAlm{!^C8 zU!`Ox51c!+d}>4H=G3aze1A(ta$5cL{&db$1qc=3W`c`nwQ|lMfu44MXJus}_IrD$ zx6p*`-yXCV2GuDg(HFcXQ?B+x2{H@il7|F8<|$H$!|N3VTpU;~G&iBH9(5=|8K#o9 zTqF@fr^p%4>thgqo@ytsVGEv>mRxi!*mM?pzNeE&gJ zbJh=gC_2IN&?k4-1m~<9^w?&d?iO|7w1;M0|H=cSP&`B1@i;TTy)dnQT7Tb=`U+4< z$^!Sb^aHYo@v4tUgdBFbBOZQ|NTL`IcK{$4g}VFllFp?zNzq#8DDpN0jYowA&ae_{ zoi0+s)l8|VAky266ZdefkeC>Rm1P7RdO{RDmkVkn~W*T}1p-Cht55bZMXCORrq4FYd zp{H~T^4j*I4`>j3wYnm!^^T!S)<1l6W3@3h!@X|gv?`Y^XW;Dh;}$%%ptNH8ZHM|z zZ7WP4JhwhLtvbn^-&iJnR6eJ=psgY~esfA%qCGh|HD+<+jf)pF1QyMoGAw(@UHhiZ z*}bN1M0CmId!~+9HKC|*^upG>k>kb{&{?_)P&^HaT%^>@>M#k}N7)Bp@{>_0%VkS* zyVGnC%mSv=pRxlRGgwB3Gl0O{sG#*__Xlp#9rv@dS&)nT7bWa20%11_{D2(!Q6&H> zK}0F@JY=w+TX~9DlPM$hr%-l)p5x{ZvWMJG6wPur7YTBxNJ9K09)&$epzMjrBY;No zDi9|{4Aqs{i7sq`F`i<i&s|<>ghrxct-vqjSW~n=yaN6!0!^B~IXx zVnlcE0{4%d^*rvGk?`IY7w+^{VaG@~i3*i}t{6%a)dQ4&+6NFa1H~ zjU>Iq19=Vf*$L+p6SLjt&26dY!(ME(Vi-6wTzr0- zEA#A$$gGA|X7~A!xlNsl%6+}31lN8j5`6Cw5EEmIQnJlOfk^V4ASzY$ZO<XlqI2&iHe~m0=Wr|4=Whwn1TWtdZpn zMHUaDetX}>*h>6B=Z@n4y@0#)54o5ZaA!j8(qS+uGd&~8o@^0VYHC(? zadBH!Y&ZMAi5ZBks`3=ggzNkMikUT>{V-WT7JB@CMmfsDKKhCbsQULjBzJAbv8pu zc2;#D+p*1GEO))co>oovSEWW94G$TjZN<}@x~@yf^%%sBMpsdD8GB{J1}dfw=o1HC zjK9*AnRa@#R-~(W{-8E3B`wv5jRF)&%kX5RH>Hk}E+)2GKSY62g_dz@MkE1TLAeD2 zWVqa}#PHvqR(n4L-BJ}O5bg8ey&a>@u?5}^B#qRpaYYSA>&(XJ)OEeduMu$JRr2lZB%)0bZ`p1ua!&wN=qVRW!y_C8)^D`fxBVQ0F<9 z-%@5er>kOF2?2-77ah%fW2D-1tmha7?qE3IDeUU$6P(W=6eMx*dnNcSDc^&%Y%OKc zV9>655<`hjJS%dzDi6z1cv{$B6l)%WR;bA-8?icZSaC?oVriWEzBM`)}K?G>xwUK%u)UL;DaTtQ?kcRc`&_xLUD0(MYj2x z2XN!8JDUgGFt#dMlNTJ8kvG1j+D5YXL{NM^a*Sw%2O(ucGjjRgstT-nnu60WgBke< z#z6y2Ju!k8812?uWAyqMs}!5&j!pL(V$R1lSzFSS!n8Q1izu-S6nskZSa59$`)~0g zzs&g%wH4AL6>3Q%Lh5!k$6=|THJOA(f{u^iXL0cAG^MHvPq8O3ez@N#e`ZK1Ej(UX zmu!4RrFlzjP0fyr$+W4|QMSsJj}2l+=YMqalbde(!$%*@-?T}-JGgdIz7bkUMOx-r zQyhX%!RK~eJaHY+Z-AdSI}NE?o#$suvu;#!mvU;8oQJ7EL-jpBvn^Vk#RK^lP1MO< zkpr7_0<r&iug>+=b-qk~gtv!6>(ACpQpXrcaNz6J%^cNcbG<_`LzT+A*-9Wrgq}J zll;}!tsQjhtAvHbC%=ojp?*a^-*2<&)3RT}zK7zDv&dd{=#ai3O)%$-fm58Ko0B`T4#|z|X2|B|W_2=>#`CBb#l*;|lbU!& zWmoo;po`}DIr{8i$!#l{ShwKenYs0AU%7F_-2-aYHP$U3pPy7dZO*j2S`vGh<;`)0 z{usS&_{x2AZ+!Lcx)}Gal*GJAcQ+4T++1$66tzz5WtM5~lx6)x>_De5PLUC!vFl=W zdY#i`a>7s&<1$Op#Bw-o7dXT5CN>>sI28I7-fw86Fda_G){{IP`|TGD2W-SVg11z9 zCTB^_#l&ao(Wzlkc{N1JGb>ml)-!U%m4YlDQ1lmz=Q zG7uY5txevGz$WFK<4eFXPH%0}dM^^5g%32^H4!{REOtq8zl;F5yRiH<0J;w(**Ru1 zR^Re$=%wdWv3p}x$Qo5vHe+y((Iow2{vYPA{o|IAufEi^?Koe|^UbD;f>#9{E=7&^r$GsqC}CJ|Js7D;HBPpcu?{_<(gi0f-uDH$(( zrS&P6A!IG@~*l;iT}#^l8~ocYeYd}mCo%Wkt;+?K3tzrZpXvt+vSE$&2> zHb$F+;JW;#r1(n~=6AU>HOAED7-+iGmyAjcHkgg!+wf*Jv(|Dhm`% zNt^Hsm4c!b{SRHzKSHEfUhOb3{D#zcRA{^69Y)k_!&^A3%U=VQmtF&eQVO?4a%}mj zChXjiePta(6zYkFD5H?Ol_KWm9gNDbdFZK*1BH5FC8 z`kK6PLq<`&K`s4Ct&R;emHuu0?Q*sFPxesn-J<5wW6PJbrQIzA+0oc#Y1n1S0*?hg zf{X%p!;aouiwwq7qbcmMv8&1SXc;zdK%ye)G;FhEZ3_}#B2QminqcvKDg)=!B9IU=MY8YV5R zh{#4qauIBmCs0jP&=CJX1aWuJP*hZc;@_^g)TTVBY&zmvA$y6PwpM+F-RFf9tgr(j z-8!aCc0l?d0Y?|^8Ao0BhvHgo)Oml1_YU*^ygShmCD}qhs5D}1w41nqL%csX_Ll}U zN*XD0hJ%mmx|#tsL#m37WtHW%-O`xZSe~lVyIuhQo0mlB)ri+P6K zyL$Pv+dG&R?$H0)x1eKLt*c~Q&496G?y_57xbtbIpFUl__*~=dV~f1yV=CeAOqNyR zNw|fkom*%=CCd*gut6Wl??O6-(D12JOPn-6{4VTHJ$D6?tNGodeV(A)rEKiV-9h}h z%H1b>?*1`+m+F_1U5ofvye)E9I>n#+)-UeT6O_9>Pe5CGn{qeuw#eMxi#!38l=9eQ zsVQ$nI6nt@8h@!|(ph@|IkS}9IUe}r_NK}bBN4=kZ!TrXk+M3TT-Ci>y+!^HGs&%j zczM2R16kazeDd4MlLsqLhL6FYfAM4a?!7IqthY`Q4eiAIa z4@R;~MUzh%RsMo>5vlBt9U1ASqqtCmdtBO?o6yUXFFq;iE~2PGs2D&0 z{tLp^&J3PtCGj8S=@vEXOkZj_#=L7C%#eqTCUG1~!Ic zkm08~9_z@2GvYfU)lYCnJjE^S$NhrVX@D96(Fi;wx`VC|JVY?%l!a@G!>8AoA+v+= zy6TdY!bEe`O*^lX8d4ftrj(^rB$W(GD5y>z@!0*h5tk}_j^y~CuzL6zq$p>uz{YmE zO>Qj@PT+0;?YK}P6IcucA4QTc?uQJC_&)=&PNwX}lE8KT#Qa2aqP<^LZL%lLrIT3w zsO=A|ED7Ww4~V@e!R~bVlHE0<<`2SrukgqM#=>tyWrVHX0&6|bXw)u1XTEd4(QGy% z`25YF#cGTb{^D{OEoV$Mv1g3rsKHHKimDYvDlGrlUBX{NXlJs(Mqgu$JrhD(98HQV zE77LN3Gd@xhl~UuINBGLu;!Du9a>sFc+Js8^8J#ndxt2b4!dRKTPGfQ3<|oLYe!6a zcuuL>ySZB^MtLPUV>#y0>u>U3JjtM5;htpQUc-~@+YrA=w3Eiw$CGTurB!P0R=~w5 zpH&Uv9y9KU4KRxB>~L!lC$Xi|;V?s!v%N#>Wk=!I?}BxCd(dL`u&-S;(Ss4T4>;)t zlUBM2-U$RL+9H%=1oEz;_^`Ry*CC~~QA4modm0dR;G;@LVm4H#L-qwL+)KGi*JdkC zwn|$0%cyvNZ5}(rYE9d_J=;y@xN%^2triE1zZU88e=N05$WU zmzDx%SNNkL7U3M$elg}~6}BlDD6#FG8jUsjD0>127h{hf6ixUsz!~YS4wYa%%5DLo z7};Z;X0rvy+-t#D11i4Q>>8b5R%tCYrW!+?woX+if)?@rh}$9W7I?OR=YgnPMB%XT ze<8V_?$7~eyGD0@o4to}v$#7_CdVOA%8n7q@j!=l`A*mvpZYmtw!ozx;35R&v1O{zjRtogELFQqqhmUSmp%(JK|g zx##VmNmE#q7X25E-(X1e7anHTLxOb1Umy34m$Jv0ZH?a8(}}fYiOS)Eq!m0z*bs#| zauEx+!Zyt`L-b!l%A*8&R?r?2{L-0_zup`74dqNd9m2DSf4kZg6?VL&Jpw~aBm_8; zq@Cm-vW4;kK4bpS1Ir$LG^gd}M){vCx@u-)rhCBb5hM4E8S?B+fBtm#!s027*@M@; zy!dz9-c3xuYe`X4Y5YUplGd`!VHG}4++#8BecR@3Nz?m>T~{-C^Sp96Q8IzN-~I*M z&?)%?4~QB>9)b4nL_JuI2Ag1K&;kRAhG}&*QGCfItU2^|F-7pC<~B{! zl})*>kGJJJ5SC9`Tr0~G0P%I!o}EK`i+s4<<@gEW!5(Hq}YpTOqq<+V&m zU{_-_oee21fQ4`5K#PnqlINR76p5pPSL^_h_M-Gohy0~3qyLcM%|%&x+R~8&vJ;$I zafxcxWqGZ9{*hsc`bVM~H~t<;G7Eo8b11}U`}!D?mt2nrD8B#ietVTP8>&(m@!QkE zZ?D&Fk7l7nj2)7KeSG$MhE6oD$7yf*rPT^dd#NbA_VE6R*du4uInefL`1NRvx5rlw zSV7|ppsPC^1D#^f>UGiDD039jC0R^KZnsevWir~Lv_{kv7S6isz^a;2VY=RIsnOTy zI9Y&K6b=y5=0h1AOId|ImJ?72Qxe;-5JXhL9Da&hI2&@;x%h+hq24DEg$VHDh0_SW zVPLlfd2j_tvQZS?+mgyWnFFgU;^p)cOq?t>ymL&xHDTb`MMHhVbGB)U`ul&=5mJ4cOPGiQL7=?HhO_5xgi6Lc7G#i019zbt5hyL!0i zZpZco9-~USQD393F=)S*>KGlC-N(7n2@#*1l|)1_eJyFfhO;Lc(CLU4*o$fWOho(w z1U%I+)Ap_}JCG-2i#(Kh)!s`h$SIX**eqpt;dpLVR?mqOTyWszehO|WvCc&QeDIc?v)C~Cwc$69$aFiz#*1fZbZtO0WKaNnc<$Sm0h3!mZZ+&?F!>@7 z%OXgU(WDWN8|rj5NbjedsbLipsht&9QIp0X9uM`jp;3a10F>+$d87O!x9$A4bCHuhWKr>DhlJqC0$c7lYVAZMq_Vl}9=$IW%7 z!L%&oK2QI37jaDmSOoZyX?r4{)5*XyGcGJ&PyJ0>zEa59^b55 z{YZCLn!<)J#4hQd_v8fnJX4C#~#U5b=~^ma~_;mjuZFh zit*LSvU8REHTlN(kq&4kd=Iq?F-NhDDcRTC!DzG56B&D0FrcyX12rrZnEQ;lMZ;;}J4j_G!a3(~(J-j>8OvS|iH560No%9cdU}*j-ghyP#z43Wnp=JyFBczAx z@xrY}YSxv`*feA0V}qK0GxotxHx3%Q<+FPyJl;6y(Q)q{*L6QA{(JW0q0$WBj-=!< z&;0cGv+~6~Es06H)3d+%`(~_3Tli$6+$>>jt)6Y^@Ve3tv)eiahX=Z~+k$qNU-;7L zbj8-V>at%o*C)NI#%!@UI1Qtje*eZN$9vq(ox+!)aBFk+t08l}I_cFAdhk8MyYQJ& zYJNq|<$5I_xQc+4tRa2PK5UOFr*+w=S$8zVCO55`I(1oNJnPuCOWbBm3HB?fPO}(& z!Q!IoRFnA6hd#T1;P~C=x9+~Yd(`MBzJ8#4r`p?na@w75uN~O1?yXfT-&)r&c>Nos zqn?b7bqssT3v2ocg__5)H-g4k=JBeT9zR~V;_V8?*nHj$kGD>3Kh9#UDJd3fo$ri= z(*>X%SW{SY1B9VPSZ2r}C=~)i#Kn*p>Xu?Z9*T6d_|AmTm0+Osh4GfcNg(ud_b}+J zDe#ZxPU=-|ZpW48pU#|Izq4XuRbpWNb9bd$ z^+p-`k6lnXdgGkRi)Y37=(J#=yiVFyHFiKE`|P#|&-)p9KC?5#^RjCE4o6KPmt0RY zM--a}5J@=J^ct=7E%ASBDA8wroP`bT8tGde&4F)-94kAJL`yJ+Bkt{fy;Gc^amjN? z0LD91m%G6Kc%cMZM9^-hijlj5I*&0v-sq9MTs07F^(K1H#p;AuFNa}@P$1kJE($kM|#1%NaU z@7VqN^xbzfHm!QHEiiRRUi`otNABPMgZMZ3m^7kr#zQk#?7iMEZWCkc7LCgqJJ{dd z08;%3W;7mp$1|W4$x1c8Lr~(ob(UlVRv+)Mq~KVw2hB}x=8pTy2`!LlaMprOSU@NK zYCxQoVlu>}$or7*9)$1$D?ljP$;;3lw33(MS0NEZgZCyfftVGoLH*Ydo}iEkB7I7X zBI3um8Y0@t?GVA|JFNgTLwM8XTztz8r1yj&(=@a+BoQu@e?=9sxpZG z-u&&~GJH?gG(C0Usb`q5cWh$PGwIo7p~q)|7h8b2p5^gBF`SPF+DQAj2fgCOUv@t10FK8g9IiTK$V-Dwob!&l^-O{$7gkQt(&2{KMs+Rg?K% z&J^zB*p&hgzuUlZm|1;iOpG1$_J;iiz21({#wUUvb+$b#<+$K@%?{%WqT}p3!*NfI z@3=0ai=ucM3-FCu-sDOaB%XxVOvEq`1>5nE-SJw8cl8*Khdebp-|-N-bMnUZ5lZ!R zPTVxmPx-j0N0MHN&1Ubz5DXB-b2IK4oqnKQzPMcPOb#@RY|hY@4hGPWt}_uUMsE73 zI3Hmg00x|5kSFLMb5oaO&+$-lvRMPZ%xrQ;9fwSXj-Ui^P(ZYNn1|?L8wQBvjNA(k zPU!>EK3mR^a%F;Y?XJl)?jDogv0uJ;ao4VkY&AcVX-d-XyZ=tJf9YLudiOSv^iPPQ zfGYx%0d9P{LQycoT?edAtJ991vMXrS*j@IsPIlUCMzD_+dL*J?G_43BA$qOM$mVj| z&xXvPBfX7@sPXN^?Wug|81z-7jpy|-Kp{3G@HqV(5+KLdk z(HeULK9>YhI`TN_4I>0}Ajv(5QgV*d-aShWEgb+2?oD!sxPi2{J9a&~g($DQBBH@% zYr^VVkP0EJ>A;rk^^{G8x9;m5`ZQqt>&UFF&rbW&<54GmYp!)%73&H&*@)KJllEl@ zt;~tvQmm`ve-P`+piL`HPLS+$ZYSqUD*wn0h;Kc*w14Y{WB6QFC99ejH)pB4m#MNw zEN&ULaCojxT&c@%y73yZuHEArm+ziFch8bKmA2-lEn}x|olmh5v_4bSKGZYdp3Fga zw8flcvN;U~mCfe%*bGiM$kmvl>)_jM=@3YHcIrD)o+%1bw?Fnc=S)yef~(Jry*&i# z(ix&Yv80~jod|Q_0_#jq;p_lgw=t_~ zl-egr+eBkxAfrnKo_ZtCCbY%h(%(lE9hpF-SGngGgc_jta?WQziLAwy!hF7iosgsv zMpRUk5l@jG1|g%r`hwFC8=HbWoWg;;krqThL?kkBUc`10S+bm_sLr4vR(&DFn^WFS zA*c)GjZCpn$U}rK!yAdSDPaaPD&qIc!ZmBd_Dz0vl2HWy>Zo=qjnAlQ%l9`88{Ba*y%B=MrV7A zTPy8%KR-LGa@rj%G<{n2vIC26cwz0(p^ts{o3~l)k?UMhIw(MQz#~ngGS@GDns9js zv}Q8A2Vx+D_=OueY?3m``m2Q@t@D6Qi^3E@>fZ$&K5c<5>BJ6-a!|*eG&bj)RGi6Z zTQ20$3>-p;t_tI~!)Z+Q5V!l?tsEvoad zw1GFZgS<)dzo*QQlAvsJ#bOs85Se<6Q9qDelX)x_o^W{L?v01WTIBCZxn zY4&9GM7c3hEvhw9!X>FmB(Gxlee=j?Vzv>^e<{T8(+NbAAU@Q|p4=z?K^on)Tl&Xl z!a3JvK~<0EMnV4M{sSFm4*>amN30h1o%NkAm&HI?CbTe0+z~We*dY-r!0lN z#ReF*cc(tCk4~?zD9ni0iy>+Bo*#BjkCW#y;j+Ls$JX8YB8xuKwVU?RV(ca02)Lzn zbdFq>K^^8`URL2=g4Z$FTArh0hCLTFL}9j3I*UnX)V_rDKx#~F4VWw|Cg>7PCY#;T z5^WIGDmd5bTB4eyChkf_ho7rlIc7)~bLzC^IMvGpktb6N?Kj&sI?|!3^dur5AYB0n z2dD>@1HUzUSm6#RP7qVJ-;$kZ$AEJi|{AsYYl!L;Qwa?+a0zhYm=!-ZI)0GUZXJ>n?MsN z8iL0|aLy9@3-&F(#rW~;_7?>J;aJoYb^CLOTUNmB{_l^9fS$a-=vmlw$v%W1Ah9O> zLNa3)Oc$!+Jsv~lu@wiZwccI9ulM-<`@RwveYsUGV+Z&Cqk9WBVAHBqaOuSicYyM~ zg&Bsm$n9F#N#Me$<50JVYNMe^*DXnEO%uFW!?7KZ5;*LUj)}_$WxOpbLIB2sB?2B$wu$cEu@DX@ zW-H1z(H#nZL+__Uf!3bR1?9a`hSb)zNBRfeh{y_F<5MGS;<&gC(&!%PBIxTHj*HM1 zskDGflu)M7Ara@1L6Wq{J#k6XB=O@&@zvzmr(+t`CA=M95aMwOg1@;qS*4X%?~_+c zyZNy+dNbZ$DNj|!6Xpw#;cZuYlHR4f@fx0_ZpD){Ht(cKug^E8_)fV*F&~Mq$lDEk z5qF{te^5qZK+6s+lVr$K5rlM5pgRedW+;caO{GmY@beKa0a>3tx>#aEh059OcnbWC~pWt7xSGXB(&qUnaD{T(7VOmFl;3>-MtW?cGcV zvGfnH5@082r{Lt}JH;B#U28Qf{&`VA4U@`d`k67awZ+_|;bas54I?KH(Sqgp=TL70 zLQvWu9MW)RvMM2IpaC!fxj*>!kNc7aEogcXTV>7OUCiFqzcmoUPIftH91!?b#@-!E zGUOU=_n}mmB3l!&`$(q@E!rm3olwa7wd_6;QaDB0(2x|&?Q8cLzvEl{bd3NYej`od z{~Q>@Fsw)$#$Z-Bd2aW)o7;WXaJ$bMZueOeba1;*^h5$aYcfPdsZJ3Q!B~iT^>P~# z%a65BQ$ckqgvKOBDy;!50#MHnY(K;J@J8!F(t5`C8+jok-p_|Pv1p7j8afe0!qp^$ zwspqGCql#B8MF$Cw(~-~BzY3gCpYQOd#(^Ql(g##eS?Sl`4DfJoOnKz+~m=pM-B%X z8JBM(LI%Z9M}-+>E@5zQQHq)(#iKNF&AOaPnVI9W>t+v3k?S)j`~Uc5@V4L1o%HOG z57=^6KDJd9<>%FsHG3etUKF=&9kr}EU1yM5L84$2!fYIvjfAr(O_32Or#x|eD&!0I zdebxX5Zj+a8i@3mpH#l6sHD`U=%12WP-U2tZSH2R2vJwqg`80_KZU~WlcIkLg?kV> zaD}QeJ5nd`GObt6Frv%H6a&(nJ#x{EP<;QSq>A{eX1`NDoLZeSdBf!Vl9>J2B{vz*$MGe@Mv4fB;RDI4Mkr9YRh;oWTweKN@rJzuVeeFkPb0yH zuT?;*Ppl6OE4V2Tm{Lv=CbGp{)UP7to74aNet!F?y{tUDIwuBmXjiM9IrZ#1I7qSW zkM4X5YxNcO##Yjuf`?5J))OUfPl7e+y`Wi0CTr5~Hzu>>WTOunN=;CABN>!V#k4|y z#SX2|GOhZQ@fX}Gk&)xaKR*2`v10mU;rCF(8GU3^(opG=n0Vy1Yb9kd<2I#Jkn(7@ zy&ge)##h;tpn?Hj7AqQLn3Qs&N+;YoxMg$wknL@EzOlM?;QBXLjD56z(65`G+iU24 zMywxn`;erhq^%xz{py#Ot$K59O^o}Al*A_=TaPv47A4F$7ID2iuhkJDncdxK6JqU0 z+1+rZakG06*X7I+-ri?_#V*?I&X^`=OZxk!*0}eTlqrf?iEGA5`gr4%VnTP>g||cD z=BD)bL#9@B-249zZEphD)N$vJYu?i>%epODmTXJ1E!(m!+wy(jXB%T<4jW?#r?I(@ z7j8m<5Fmsm1PBn05Rwv-ury6l0_F}hge`&6mL}P7v`tA%n;!Xfp(LB6Ik5PDW}akZ zLfYWhlfUhwh_Goz>cbwuplL`8tP0$_9=7Qmkt|? ze(XLtVQG_#9NDvnd!cDuR&|!mmR+40=$C2Xa3Y@-s($F-*MvX0EfbdRn-i`COc^!w zodX$Tw%)&Z+sG8WQ|dC#RM zj-=F7y)$W;X;|84dMQi{Ozo*gDQf+7hRQbJ

7HK!t-(wY(?xxfC%DL|jaJPYv~@ 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 P<4;pFPG0tWlgIrZ;zT|- literal 0 HcmV?d00001 diff --git a/emulator/gendefs.lua b/emulator/gendefs.lua new file mode 100644 index 0000000..1f6f3e2 --- /dev/null +++ b/emulator/gendefs.lua @@ -0,0 +1,66 @@ + +local function fixCode(code) + code = code:gsub("cpu%.", "cpu%->") + if + not code:find("lni") and + not code:find("instrloadpre") and + not code:find("jmp") and + not code:find("ldi") + then code = code.." cpu->cycle++;" end + return code +end +local function lineFromInstr(instr) + local cycleLines = {} + for cycle = 0, 7 do + if instr and instr.ccode[cycle+1] then + cycleLines[cycle+1] = string.format("cpu_instr_%i_%i", instr.opcode, cycle) + else + cycleLines[cycle+1] = 0 + end + end + return string.format("{%s},", table.concat(cycleLines, ",")) +end +local function codeFromInstr(instr, lines) + for i, code in ipairs(instr.ccode) do + local cycle = i-1 + local line = string.format( + "void cpu_instr_%i_%i(struct CPU* const cpu, struct Memory* const mem) { %s }", + instr.opcode, cycle, + fixCode(code) + ) + table.insert(lines, line) + end +end + +local ccode = [[ +// Auto-generated by gendefs.lua + +%s + +CPUInstruction CPUInstructions[256][8] = { + %s +}; +]] +local function ccodeFromArch(arch) + local instrsByOpcode = {} + for i, instr in ipairs(arch.instructions) do + if instr.opcode then instrsByOpcode[instr.opcode] = instr end + end + + local instrLines = {} + local funcLines = {} + for opcode = 0, 255 do + local instr = instrsByOpcode[opcode] + instrLines[opcode+1] = lineFromInstr(instr) + if instr then codeFromInstr(instr, funcLines) end + end + return string.format(ccode, + table.concat(funcLines, "\n"), + table.concat(instrLines, "\n\t") + ) +end + +local arch = dofile("../rom-8608-defs.lua") +local fo = io.open("instructions_gen.c", "w") +fo:write(ccodeFromArch(arch)) +fo:close() diff --git a/emulator/instructions_gen.c b/emulator/instructions_gen.c new file mode 100644 index 0000000..5bfbb12 --- /dev/null +++ b/emulator/instructions_gen.c @@ -0,0 +1,707 @@ +// Auto-generated by gendefs.lua + +void cpu_instr_0_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=0; cpu->b=0; cpu->c=0; cpu->u=0; cpu->t=0; cpu->p=0; cpu->q=0; cpu->s=0; cpu->v=0; cpu->i=0; cpu->cf=0; cpu->nz=0; cpu->irq=0; cpu->ifg=0; cpu->rfg=1; lni; } +void cpu_instr_16_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a, 1 ); lni; } +void cpu_instr_17_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,-1 ); lni; } +void cpu_instr_18_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p++; lni; } +void cpu_instr_19_0(struct CPU* const cpu, struct Memory* const mem) { cpu->q++; lni; } +void cpu_instr_20_0(struct CPU* const cpu, struct Memory* const mem) { tst(cpu->a); lni; } +void cpu_instr_21_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p--; lni; } +void cpu_instr_22_0(struct CPU* const cpu, struct Memory* const mem) { cpu->q--; lni; } +void cpu_instr_23_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c, 1 ); lni; } +void cpu_instr_24_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,-1 ); lni; } +void cpu_instr_25_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b, 1 ); lni; } +void cpu_instr_26_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,-1 ); lni; } +void cpu_instr_27_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->cf); lni; } +void cpu_instr_28_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,cpu->cf); lni; } +void cpu_instr_29_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,cpu->cf); lni; } +void cpu_instr_30_0(struct CPU* const cpu, struct Memory* const mem) { tst(cpu->b); lni; } +void cpu_instr_31_0(struct CPU* const cpu, struct Memory* const mem) { tst(cpu->c); lni; } +void cpu_instr_32_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadimmed; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_32_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_33_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_33_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_33_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_34_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_34_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_34_2(struct CPU* const cpu, struct Memory* const mem) { cpu->v=wordut; lni; } +void cpu_instr_35_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_35_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_35_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_36_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_36_1(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->t); lni; } +void cpu_instr_37_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_37_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_37_2(struct CPU* const cpu, struct Memory* const mem) { cpu->s=wordut; lni; } +void cpu_instr_38_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadimmed; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_38_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_39_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadimmed; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_39_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_40_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_40_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadstackrel; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_40_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_41_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_41_1(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadstackrel; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_41_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_42_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_42_1(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadstackrel; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_42_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_43_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_43_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_43_2(struct CPU* const cpu, struct Memory* const mem) { instrpreload; addf(cpu->u, 1 ); cpu->cycle++; } +void cpu_instr_43_3(struct CPU* const cpu, struct Memory* const mem) { instrloadpre } +void cpu_instr_44_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_44_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_44_2(struct CPU* const cpu, struct Memory* const mem) { instrpreload; addf(cpu->u,-1 ); cpu->cycle++; } +void cpu_instr_44_3(struct CPU* const cpu, struct Memory* const mem) { instrloadpre } +void cpu_instr_45_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_45_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_45_2(struct CPU* const cpu, struct Memory* const mem) { instrpreload; addf(cpu->u,cpu->cf); cpu->cycle++; } +void cpu_instr_45_3(struct CPU* const cpu, struct Memory* const mem) { instrloadpre } +void cpu_instr_46_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_46_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_46_2(struct CPU* const cpu, struct Memory* const mem) { tst(cpu->u); lni; } +void cpu_instr_47_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=sra(cpu->a,cpu->c); setzf(cpu->a); lni; } +void cpu_instr_48_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_48_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->nz ) { jmprelt } else { lni } } +void cpu_instr_49_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_49_1(struct CPU* const cpu, struct Memory* const mem) { jmprelt } +void cpu_instr_50_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_50_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->nz ) { jmprelt } else { lni } } +void cpu_instr_51_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_51_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->cf ) { jmprelt } else { lni } } +void cpu_instr_52_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_52_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->cf ) { jmprelt } else { lni } } +void cpu_instr_53_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_53_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->nz && cpu->cf) { jmprelt } else { lni } } +void cpu_instr_54_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_54_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->nz && !cpu->cf) { jmprelt } else { lni } } +void cpu_instr_55_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=lobyte(cpu->p); lni; } +void cpu_instr_56_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=hibyte(cpu->p); lni; } +void cpu_instr_57_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=lobyte(cpu->q); lni; } +void cpu_instr_58_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=hibyte(cpu->q); lni; } +void cpu_instr_59_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_59_1(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->t); cpu->cycle++; } +void cpu_instr_59_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_60_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_60_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_60_2(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->u); cpu->cycle++; } +void cpu_instr_60_3(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->t); cpu->cycle++; } +void cpu_instr_60_4(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_62_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=rol(cpu->a,cpu->c); setzf(cpu->a); lni; } +void cpu_instr_63_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=ror(cpu->a,cpu->c); setzf(cpu->a); lni; } +void cpu_instr_64_0(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->a); cpu->cycle++; } +void cpu_instr_64_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_65_0(struct CPU* const cpu, struct Memory* const mem) { push161(cpu->p); cpu->cycle++; } +void cpu_instr_65_1(struct CPU* const cpu, struct Memory* const mem) { push162(cpu->p); cpu->cycle++; } +void cpu_instr_65_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_66_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=popbyte; cpu->cycle++; } +void cpu_instr_66_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_67_0(struct CPU* const cpu, struct Memory* const mem) { pop161 cpu->cycle++; } +void cpu_instr_67_1(struct CPU* const cpu, struct Memory* const mem) { pop162 cpu->cycle++; } +void cpu_instr_67_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_68_0(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->b); cpu->cycle++; } +void cpu_instr_68_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_69_0(struct CPU* const cpu, struct Memory* const mem) { pushbyte(cpu->c); cpu->cycle++; } +void cpu_instr_69_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_70_0(struct CPU* const cpu, struct Memory* const mem) { push161(cpu->q); cpu->cycle++; } +void cpu_instr_70_1(struct CPU* const cpu, struct Memory* const mem) { push162(cpu->q); cpu->cycle++; } +void cpu_instr_70_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_71_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=popbyte; cpu->cycle++; } +void cpu_instr_71_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_72_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=popbyte; cpu->cycle++; } +void cpu_instr_72_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_73_0(struct CPU* const cpu, struct Memory* const mem) { pop161 cpu->cycle++; } +void cpu_instr_73_1(struct CPU* const cpu, struct Memory* const mem) { pop162 cpu->cycle++; } +void cpu_instr_73_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_74_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_74_1(struct CPU* const cpu, struct Memory* const mem) { cpu->p+=signed8(cpu->t); lni; } +void cpu_instr_75_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_75_1(struct CPU* const cpu, struct Memory* const mem) { cpu->q+=signed8(cpu->t); lni; } +void cpu_instr_76_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_76_1(struct CPU* const cpu, struct Memory* const mem) { cpu->s+=signed8(cpu->t); lni; } +void cpu_instr_77_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a>>=cpu->c; setzf(cpu->a); lni; } +void cpu_instr_78_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,cpu->a); lni; } +void cpu_instr_79_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->c,cpu->a); lni; } +void cpu_instr_80_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_80_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_80_2(struct CPU* const cpu, struct Memory* const mem) { storeut(cpu->a); cpu->cycle++; } +void cpu_instr_80_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_81_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_81_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_81_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadut; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_81_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_82_0(struct CPU* const cpu, struct Memory* const mem) { storep(cpu->a); cpu->cycle++; } +void cpu_instr_82_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_83_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadp; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_83_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_84_0(struct CPU* const cpu, struct Memory* const mem) { storeq(cpu->a); cpu->cycle++; } +void cpu_instr_84_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_85_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadq; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_85_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_86_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_86_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_86_2(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadut; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_86_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_87_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_87_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_87_2(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadut; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_87_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_88_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_88_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_88_2(struct CPU* const cpu, struct Memory* const mem) { storeut(cpu->b); cpu->cycle++; } +void cpu_instr_88_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_89_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_89_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_89_2(struct CPU* const cpu, struct Memory* const mem) { storeut(cpu->c); cpu->cycle++; } +void cpu_instr_89_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_90_0(struct CPU* const cpu, struct Memory* const mem) { storep(cpu->b); cpu->cycle++; } +void cpu_instr_90_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_91_0(struct CPU* const cpu, struct Memory* const mem) { storep(cpu->c); cpu->cycle++; } +void cpu_instr_91_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_92_0(struct CPU* const cpu, struct Memory* const mem) { storeq(cpu->b); cpu->cycle++; } +void cpu_instr_92_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_93_0(struct CPU* const cpu, struct Memory* const mem) { storeq(cpu->c); cpu->cycle++; } +void cpu_instr_93_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_94_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadp; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_94_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_95_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadp; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_95_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_96_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_96_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_96_2(struct CPU* const cpu, struct Memory* const mem) { jmpabsut } +void cpu_instr_97_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadq; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_97_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_98_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadq; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_98_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_99_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_99_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_99_2(struct CPU* const cpu, struct Memory* const mem) { jmpabsut saveretaddr } +void cpu_instr_100_0(struct CPU* const cpu, struct Memory* const mem) { jmpabsp } +void cpu_instr_101_0(struct CPU* const cpu, struct Memory* const mem) { jmpabsp } +void cpu_instr_101_1(struct CPU* const cpu, struct Memory* const mem) { saveretaddr cpu->cycle++; } +void cpu_instr_102_0(struct CPU* const cpu, struct Memory* const mem) { jmpabsq } +void cpu_instr_103_0(struct CPU* const cpu, struct Memory* const mem) { jmpabsq } +void cpu_instr_103_1(struct CPU* const cpu, struct Memory* const mem) { saveretaddr cpu->cycle++; } +void cpu_instr_104_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_104_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_104_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; cpu->u=loadut; cpu->cycle++; } +void cpu_instr_104_3(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadpp1; cpu->cycle++; } +void cpu_instr_104_4(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_106_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_106_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_106_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; cpu->u=loadut; cpu->cycle++; } +void cpu_instr_106_3(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadqp1; cpu->cycle++; } +void cpu_instr_106_4(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_108_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_108_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_108_2(struct CPU* const cpu, struct Memory* const mem) { storeut(hibyte(cpu->p)); cpu->cycle++; } +void cpu_instr_108_3(struct CPU* const cpu, struct Memory* const mem) { storeutp1(lobyte(cpu->p)); cpu->cycle++; } +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_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; } +void cpu_instr_113_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_113_1(struct CPU* const cpu, struct Memory* const mem) { cmpf(cpu->a,cpu->t); lni; } +void cpu_instr_114_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_114_1(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,cpu->t); lni; } +void cpu_instr_115_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_115_1(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,cpu->t); lni; } +void cpu_instr_116_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_116_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=cpu->t; setzf(cpu->a); lni; } +void cpu_instr_117_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_117_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a|=cpu->t; setzf(cpu->a); lni; } +void cpu_instr_118_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_118_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a^=cpu->t; setzf(cpu->a); lni; } +void cpu_instr_119_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_119_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=~cpu->t; setzf(cpu->a); lni; } +void cpu_instr_120_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_120_1(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->t+cpu->cf); lni; } +void cpu_instr_121_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_121_1(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,-cpu->t+cpu->cf); lni; } +void cpu_instr_122_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_122_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrel161 cpu->cycle++; } +void cpu_instr_122_2(struct CPU* const cpu, struct Memory* const mem) { loadstackrel162 cpu->cycle++; } +void cpu_instr_122_3(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_123_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_123_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrel161 cpu->cycle++; } +void cpu_instr_123_2(struct CPU* const cpu, struct Memory* const mem) { loadstackrel162 cpu->cycle++; } +void cpu_instr_123_3(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_124_0(struct CPU* const cpu, struct Memory* const mem) { storeq(hibyte(cpu->p)); cpu->cycle++; } +void cpu_instr_124_1(struct CPU* const cpu, struct Memory* const mem) { storeqp1(lobyte(cpu->p)); cpu->cycle++; } +void cpu_instr_124_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_125_0(struct CPU* const cpu, struct Memory* const mem) { storep(hibyte(cpu->q)); cpu->cycle++; } +void cpu_instr_125_1(struct CPU* const cpu, struct Memory* const mem) { storepp1(lobyte(cpu->q)); cpu->cycle++; } +void cpu_instr_125_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_126_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_126_1(struct CPU* const cpu, struct Memory* const mem) { storestackrel161(cpu->p); cpu->cycle++; } +void cpu_instr_126_2(struct CPU* const cpu, struct Memory* const mem) { storestackrel162(cpu->p); cpu->cycle++; } +void cpu_instr_126_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_127_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_127_1(struct CPU* const cpu, struct Memory* const mem) { storestackrel161(cpu->q); cpu->cycle++; } +void cpu_instr_127_2(struct CPU* const cpu, struct Memory* const mem) { storestackrel162(cpu->q); cpu->cycle++; } +void cpu_instr_127_3(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_128_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=cpu->b; lni; } +void cpu_instr_129_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=cpu->c; lni; } +void cpu_instr_130_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=cpu->a; lni; } +void cpu_instr_131_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=cpu->c; lni; } +void cpu_instr_132_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=cpu->a; lni; } +void cpu_instr_133_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=cpu->b; lni; } +void cpu_instr_134_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=lobyte(cpu->p); lni; } +void cpu_instr_135_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=hibyte(cpu->p); lni; } +void cpu_instr_136_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=lobyte(cpu->q); lni; } +void cpu_instr_137_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=hibyte(cpu->q); lni; } +void cpu_instr_138_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p=cpu->q; lni; } +void cpu_instr_139_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p=cpu->s; lni; } +void cpu_instr_140_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p=cpu->v; lni; } +void cpu_instr_141_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p=cpu->i; lni; } +void cpu_instr_142_0(struct CPU* const cpu, struct Memory* const mem) { cpu->q=cpu->p; lni; } +void cpu_instr_143_0(struct CPU* const cpu, struct Memory* const mem) { cpu->s=cpu->p; lni; } +void cpu_instr_144_0(struct CPU* const cpu, struct Memory* const mem) { cpu->v=cpu->p; lni; } +void cpu_instr_145_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordcb; lni; } +void cpu_instr_146_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadp; cpu->cycle++; } +void cpu_instr_146_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadpp1; cpu->cycle++; } +void cpu_instr_146_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_147_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadp; cpu->cycle++; } +void cpu_instr_147_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadpp1; cpu->cycle++; } +void cpu_instr_147_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_148_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadq; cpu->cycle++; } +void cpu_instr_148_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadqp1; cpu->cycle++; } +void cpu_instr_148_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_149_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadq; cpu->cycle++; } +void cpu_instr_149_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadqp1; cpu->cycle++; } +void cpu_instr_149_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_150_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_150_1(struct CPU* const cpu, struct Memory* const mem) { storestackrel(cpu->a); cpu->cycle++; } +void cpu_instr_150_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_151_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_151_1(struct CPU* const cpu, struct Memory* const mem) { storestackrel(cpu->a); cpu->cycle++; } +void cpu_instr_151_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_152_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt; cpu->cycle++; } +void cpu_instr_152_1(struct CPU* const cpu, struct Memory* const mem) { storestackrel(cpu->a); cpu->cycle++; } +void cpu_instr_152_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_153_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_153_1(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->b,cpu->t); lni; } +void cpu_instr_154_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_154_1(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->c,cpu->t); lni; } +void cpu_instr_155_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_155_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_155_2(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,cpu->u); lni; } +void cpu_instr_156_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_156_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_156_2(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,cpu->u); lni; } +void cpu_instr_157_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_157_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_157_2(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->b,cpu->u); lni; } +void cpu_instr_158_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_158_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_158_2(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->c,cpu->u); lni; } +void cpu_instr_159_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->c,cpu->b); lni; } +void cpu_instr_160_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->b); lni; } +void cpu_instr_161_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->a,cpu->b); lni; } +void cpu_instr_162_0(struct CPU* const cpu, struct Memory* const mem) { cmpf(cpu->a,cpu->b); lni; } +void cpu_instr_163_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=cpu->b; setzf(cpu->a); lni; } +void cpu_instr_164_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a|=cpu->b; setzf(cpu->a); lni; } +void cpu_instr_165_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a^=cpu->b; setzf(cpu->a); lni; } +void cpu_instr_166_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=~cpu->b; setzf(cpu->a); lni; } +void cpu_instr_167_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->c); lni; } +void cpu_instr_168_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->a,cpu->c); lni; } +void cpu_instr_169_0(struct CPU* const cpu, struct Memory* const mem) { cmpf(cpu->a,cpu->c); lni; } +void cpu_instr_170_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=cpu->c; setzf(cpu->a); lni; } +void cpu_instr_171_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a|=cpu->c; setzf(cpu->a); lni; } +void cpu_instr_172_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a^=cpu->c; setzf(cpu->a); lni; } +void cpu_instr_173_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=~cpu->c; setzf(cpu->a); lni; } +void cpu_instr_174_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_174_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_174_2(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->u); lni; } +void cpu_instr_175_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_175_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_175_2(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->a,cpu->u); lni; } +void cpu_instr_176_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_176_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_176_2(struct CPU* const cpu, struct Memory* const mem) { cmpf(cpu->a,cpu->u); lni; } +void cpu_instr_177_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_177_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_177_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=cpu->u; setzf(cpu->a); lni; } +void cpu_instr_178_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_178_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_178_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a|=cpu->u; setzf(cpu->a); lni; } +void cpu_instr_179_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_179_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_179_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a^=cpu->u; setzf(cpu->a); lni; } +void cpu_instr_180_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_180_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_180_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a&=~cpu->u; setzf(cpu->a); lni; } +void cpu_instr_181_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_181_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_181_2(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->u+cpu->cf); lni; } +void cpu_instr_182_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->c,cpu->b); lni; } +void cpu_instr_183_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_183_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_183_2(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,-cpu->u+cpu->cf); lni; } +void cpu_instr_184_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->b+cpu->cf); lni; } +void cpu_instr_185_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,-cpu->b+cpu->cf); lni; } +void cpu_instr_186_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,cpu->c+cpu->cf); lni; } +void cpu_instr_187_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->a,-cpu->c+cpu->cf); lni; } +void cpu_instr_188_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->b,cpu->c); lni; } +void cpu_instr_189_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,cpu->c); lni; } +void cpu_instr_190_0(struct CPU* const cpu, struct Memory* const mem) { addf(cpu->b,cpu->a); lni; } +void cpu_instr_191_0(struct CPU* const cpu, struct Memory* const mem) { subf(cpu->b,cpu->a); lni; } +void cpu_instr_192_0(struct CPU* const cpu, struct Memory* const mem) { storepinc(cpu->a); cpu->cycle++; } +void cpu_instr_192_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_193_0(struct CPU* const cpu, struct Memory* const mem) { storepinc(cpu->b); cpu->cycle++; } +void cpu_instr_193_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_194_0(struct CPU* const cpu, struct Memory* const mem) { storepinc(cpu->c); cpu->cycle++; } +void cpu_instr_194_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_195_0(struct CPU* const cpu, struct Memory* const mem) { storeqinc(cpu->a); cpu->cycle++; } +void cpu_instr_195_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_196_0(struct CPU* const cpu, struct Memory* const mem) { storeqinc(cpu->b); cpu->cycle++; } +void cpu_instr_196_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_197_0(struct CPU* const cpu, struct Memory* const mem) { storeqinc(cpu->c); cpu->cycle++; } +void cpu_instr_197_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_198_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadpinc; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_198_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_199_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadpinc; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_199_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_200_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadpinc; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_200_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_201_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=loadqinc; setzf(cpu->a); cpu->cycle++; } +void cpu_instr_201_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_202_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=loadqinc; setzf(cpu->b); cpu->cycle++; } +void cpu_instr_202_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_203_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=loadqinc; setzf(cpu->c); cpu->cycle++; } +void cpu_instr_203_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_204_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadpinc; cpu->cycle++; } +void cpu_instr_204_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadpinc; cpu->cycle++; } +void cpu_instr_204_2(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordut; lni; } +void cpu_instr_205_0(struct CPU* const cpu, struct Memory* const mem) { cpu->u=loadqinc; cpu->cycle++; } +void cpu_instr_205_1(struct CPU* const cpu, struct Memory* const mem) { cpu->t=loadqinc; cpu->cycle++; } +void cpu_instr_205_2(struct CPU* const cpu, struct Memory* const mem) { cpu->p=wordut; lni; } +void cpu_instr_206_0(struct CPU* const cpu, struct Memory* const mem) { storeqinc(hibyte(cpu->p)); cpu->cycle++; } +void cpu_instr_206_1(struct CPU* const cpu, struct Memory* const mem) { storeqinc(lobyte(cpu->p)); cpu->cycle++; } +void cpu_instr_206_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_207_0(struct CPU* const cpu, struct Memory* const mem) { storepinc(hibyte(cpu->q)); cpu->cycle++; } +void cpu_instr_207_1(struct CPU* const cpu, struct Memory* const mem) { storepinc(lobyte(cpu->q)); cpu->cycle++; } +void cpu_instr_207_2(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_208_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_208_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a<<=cpu->t; setzf(cpu->a); lni; } +void cpu_instr_209_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_209_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a>>=cpu->t; setzf(cpu->a); lni; } +void cpu_instr_210_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_210_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a=rol(cpu->a,cpu->t); setzf(cpu->a); lni; } +void cpu_instr_211_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_211_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a=ror(cpu->a,cpu->t); setzf(cpu->a); lni; } +void cpu_instr_212_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_212_1(struct CPU* const cpu, struct Memory* const mem) { cpu->a=sra(cpu->a,cpu->t); setzf(cpu->a); lni; } +void cpu_instr_213_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_213_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_213_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a<<=cpu->u; setzf(cpu->a); lni; } +void cpu_instr_214_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_214_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_214_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a>>=cpu->u; setzf(cpu->a); lni; } +void cpu_instr_215_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_215_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_215_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a=rol(cpu->a,cpu->u); setzf(cpu->a); lni; } +void cpu_instr_216_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_216_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_216_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a=ror(cpu->a,cpu->u); setzf(cpu->a); lni; } +void cpu_instr_217_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } +void cpu_instr_217_1(struct CPU* const cpu, struct Memory* const mem) { loadstackrelu cpu->cycle++; } +void cpu_instr_217_2(struct CPU* const cpu, struct Memory* const mem) { cpu->a=sra(cpu->a,cpu->u); setzf(cpu->a); lni; } +void cpu_instr_218_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a<<=cpu->b; setzf(cpu->a); lni; } +void cpu_instr_219_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a>>=cpu->b; setzf(cpu->a); lni; } +void cpu_instr_220_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=rol(cpu->a,cpu->b); setzf(cpu->a); lni; } +void cpu_instr_221_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=ror(cpu->a,cpu->b); setzf(cpu->a); lni; } +void cpu_instr_222_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=sra(cpu->a,cpu->b); setzf(cpu->a); lni; } +void cpu_instr_223_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a<<=cpu->c; setzf(cpu->a); lni; } +void cpu_instr_224_0(struct CPU* const cpu, struct Memory* const mem) { cpu->q=wordcb; lni; } +void cpu_instr_225_0(struct CPU* const cpu, struct Memory* const mem) { pop161 cpu->cycle++; } +void cpu_instr_225_1(struct CPU* const cpu, struct Memory* const mem) { pop162 cpu->cycle++; } +void cpu_instr_225_2(struct CPU* const cpu, struct Memory* const mem) { jmpabsutplus1 } +void cpu_instr_226_0(struct CPU* const cpu, struct Memory* const mem) { loadimm161 cpu->cycle++; } +void cpu_instr_226_1(struct CPU* const cpu, struct Memory* const mem) { loadimm162 cpu->cycle++; } +void cpu_instr_226_2(struct CPU* const cpu, struct Memory* const mem) { pushretaddr1 cpu->cycle++; } +void cpu_instr_226_3(struct CPU* const cpu, struct Memory* const mem) { pushretaddr2 cpu->cycle++; } +void cpu_instr_226_4(struct CPU* const cpu, struct Memory* const mem) { jmpabsut } +void cpu_instr_228_0(struct CPU* const cpu, struct Memory* const mem) { pushretaddr1 cpu->cycle++; } +void cpu_instr_228_1(struct CPU* const cpu, struct Memory* const mem) { pushretaddr2 cpu->cycle++; } +void cpu_instr_228_2(struct CPU* const cpu, struct Memory* const mem) { jmpabsp } +void cpu_instr_229_0(struct CPU* const cpu, struct Memory* const mem) { pushretaddr1 cpu->cycle++; } +void cpu_instr_229_1(struct CPU* const cpu, struct Memory* const mem) { pushretaddr2 cpu->cycle++; } +void cpu_instr_229_2(struct CPU* const cpu, struct Memory* const mem) { jmpabsq } +void cpu_instr_230_0(struct CPU* const cpu, struct Memory* const mem) { cpu->p+=signed8(cpu->b); lni; } +void cpu_instr_231_0(struct CPU* const cpu, struct Memory* const mem) { cpu->q+=signed8(cpu->b); lni; } +void cpu_instr_232_0(struct CPU* const cpu, struct Memory* const mem) { cpu->s+=signed8(cpu->b); lni; } +void cpu_instr_233_0(struct CPU* const cpu, struct Memory* const mem) { int f = cpu->nz | (cpu->cf<<1); pushbyte(f); cpu->cycle++; } +void cpu_instr_233_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_234_0(struct CPU* const cpu, struct Memory* const mem) { int f=popbyte; cpu->nz = f&1; cpu->cf = (f>>1)&1; cpu->cycle++; } +void cpu_instr_234_1(struct CPU* const cpu, struct Memory* const mem) { lni; } +void cpu_instr_240_0(struct CPU* const cpu, struct Memory* const mem) { cpu->rfg=0; lni; } +void cpu_instr_241_0(struct CPU* const cpu, struct Memory* const mem) { cpu->rfg=1; lni; } +void cpu_instr_242_0(struct CPU* const cpu, struct Memory* const mem) { cpu->irq=0; cpu->ifg=1; int t=cpu->i; cpu->i=cpu->v; cpu->v=(t-1)%65536; lni; } +void cpu_instr_243_0(struct CPU* const cpu, struct Memory* const mem) { cpu->ifg=1; int t=cpu->i; cpu->i=cpu->v; cpu->v=t; lni; } +void cpu_instr_244_0(struct CPU* const cpu, struct Memory* const mem) { cpu->ifg=0; int t=cpu->i; cpu->i=cpu->v; cpu->v=t; lni; } +void cpu_instr_255_0(struct CPU* const cpu, struct Memory* const mem) { lni; } + +CPUInstruction CPUInstructions[256][8] = { + {cpu_instr_0_0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_16_0,0,0,0,0,0,0,0}, + {cpu_instr_17_0,0,0,0,0,0,0,0}, + {cpu_instr_18_0,0,0,0,0,0,0,0}, + {cpu_instr_19_0,0,0,0,0,0,0,0}, + {cpu_instr_20_0,0,0,0,0,0,0,0}, + {cpu_instr_21_0,0,0,0,0,0,0,0}, + {cpu_instr_22_0,0,0,0,0,0,0,0}, + {cpu_instr_23_0,0,0,0,0,0,0,0}, + {cpu_instr_24_0,0,0,0,0,0,0,0}, + {cpu_instr_25_0,0,0,0,0,0,0,0}, + {cpu_instr_26_0,0,0,0,0,0,0,0}, + {cpu_instr_27_0,0,0,0,0,0,0,0}, + {cpu_instr_28_0,0,0,0,0,0,0,0}, + {cpu_instr_29_0,0,0,0,0,0,0,0}, + {cpu_instr_30_0,0,0,0,0,0,0,0}, + {cpu_instr_31_0,0,0,0,0,0,0,0}, + {cpu_instr_32_0,cpu_instr_32_1,0,0,0,0,0,0}, + {cpu_instr_33_0,cpu_instr_33_1,cpu_instr_33_2,0,0,0,0,0}, + {cpu_instr_34_0,cpu_instr_34_1,cpu_instr_34_2,0,0,0,0,0}, + {cpu_instr_35_0,cpu_instr_35_1,cpu_instr_35_2,0,0,0,0,0}, + {cpu_instr_36_0,cpu_instr_36_1,0,0,0,0,0,0}, + {cpu_instr_37_0,cpu_instr_37_1,cpu_instr_37_2,0,0,0,0,0}, + {cpu_instr_38_0,cpu_instr_38_1,0,0,0,0,0,0}, + {cpu_instr_39_0,cpu_instr_39_1,0,0,0,0,0,0}, + {cpu_instr_40_0,cpu_instr_40_1,cpu_instr_40_2,0,0,0,0,0}, + {cpu_instr_41_0,cpu_instr_41_1,cpu_instr_41_2,0,0,0,0,0}, + {cpu_instr_42_0,cpu_instr_42_1,cpu_instr_42_2,0,0,0,0,0}, + {cpu_instr_43_0,cpu_instr_43_1,cpu_instr_43_2,cpu_instr_43_3,0,0,0,0}, + {cpu_instr_44_0,cpu_instr_44_1,cpu_instr_44_2,cpu_instr_44_3,0,0,0,0}, + {cpu_instr_45_0,cpu_instr_45_1,cpu_instr_45_2,cpu_instr_45_3,0,0,0,0}, + {cpu_instr_46_0,cpu_instr_46_1,cpu_instr_46_2,0,0,0,0,0}, + {cpu_instr_47_0,0,0,0,0,0,0,0}, + {cpu_instr_48_0,cpu_instr_48_1,0,0,0,0,0,0}, + {cpu_instr_49_0,cpu_instr_49_1,0,0,0,0,0,0}, + {cpu_instr_50_0,cpu_instr_50_1,0,0,0,0,0,0}, + {cpu_instr_51_0,cpu_instr_51_1,0,0,0,0,0,0}, + {cpu_instr_52_0,cpu_instr_52_1,0,0,0,0,0,0}, + {cpu_instr_53_0,cpu_instr_53_1,0,0,0,0,0,0}, + {cpu_instr_54_0,cpu_instr_54_1,0,0,0,0,0,0}, + {cpu_instr_55_0,0,0,0,0,0,0,0}, + {cpu_instr_56_0,0,0,0,0,0,0,0}, + {cpu_instr_57_0,0,0,0,0,0,0,0}, + {cpu_instr_58_0,0,0,0,0,0,0,0}, + {cpu_instr_59_0,cpu_instr_59_1,cpu_instr_59_2,0,0,0,0,0}, + {cpu_instr_60_0,cpu_instr_60_1,cpu_instr_60_2,cpu_instr_60_3,cpu_instr_60_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_62_0,0,0,0,0,0,0,0}, + {cpu_instr_63_0,0,0,0,0,0,0,0}, + {cpu_instr_64_0,cpu_instr_64_1,0,0,0,0,0,0}, + {cpu_instr_65_0,cpu_instr_65_1,cpu_instr_65_2,0,0,0,0,0}, + {cpu_instr_66_0,cpu_instr_66_1,0,0,0,0,0,0}, + {cpu_instr_67_0,cpu_instr_67_1,cpu_instr_67_2,0,0,0,0,0}, + {cpu_instr_68_0,cpu_instr_68_1,0,0,0,0,0,0}, + {cpu_instr_69_0,cpu_instr_69_1,0,0,0,0,0,0}, + {cpu_instr_70_0,cpu_instr_70_1,cpu_instr_70_2,0,0,0,0,0}, + {cpu_instr_71_0,cpu_instr_71_1,0,0,0,0,0,0}, + {cpu_instr_72_0,cpu_instr_72_1,0,0,0,0,0,0}, + {cpu_instr_73_0,cpu_instr_73_1,cpu_instr_73_2,0,0,0,0,0}, + {cpu_instr_74_0,cpu_instr_74_1,0,0,0,0,0,0}, + {cpu_instr_75_0,cpu_instr_75_1,0,0,0,0,0,0}, + {cpu_instr_76_0,cpu_instr_76_1,0,0,0,0,0,0}, + {cpu_instr_77_0,0,0,0,0,0,0,0}, + {cpu_instr_78_0,0,0,0,0,0,0,0}, + {cpu_instr_79_0,0,0,0,0,0,0,0}, + {cpu_instr_80_0,cpu_instr_80_1,cpu_instr_80_2,cpu_instr_80_3,0,0,0,0}, + {cpu_instr_81_0,cpu_instr_81_1,cpu_instr_81_2,cpu_instr_81_3,0,0,0,0}, + {cpu_instr_82_0,cpu_instr_82_1,0,0,0,0,0,0}, + {cpu_instr_83_0,cpu_instr_83_1,0,0,0,0,0,0}, + {cpu_instr_84_0,cpu_instr_84_1,0,0,0,0,0,0}, + {cpu_instr_85_0,cpu_instr_85_1,0,0,0,0,0,0}, + {cpu_instr_86_0,cpu_instr_86_1,cpu_instr_86_2,cpu_instr_86_3,0,0,0,0}, + {cpu_instr_87_0,cpu_instr_87_1,cpu_instr_87_2,cpu_instr_87_3,0,0,0,0}, + {cpu_instr_88_0,cpu_instr_88_1,cpu_instr_88_2,cpu_instr_88_3,0,0,0,0}, + {cpu_instr_89_0,cpu_instr_89_1,cpu_instr_89_2,cpu_instr_89_3,0,0,0,0}, + {cpu_instr_90_0,cpu_instr_90_1,0,0,0,0,0,0}, + {cpu_instr_91_0,cpu_instr_91_1,0,0,0,0,0,0}, + {cpu_instr_92_0,cpu_instr_92_1,0,0,0,0,0,0}, + {cpu_instr_93_0,cpu_instr_93_1,0,0,0,0,0,0}, + {cpu_instr_94_0,cpu_instr_94_1,0,0,0,0,0,0}, + {cpu_instr_95_0,cpu_instr_95_1,0,0,0,0,0,0}, + {cpu_instr_96_0,cpu_instr_96_1,cpu_instr_96_2,0,0,0,0,0}, + {cpu_instr_97_0,cpu_instr_97_1,0,0,0,0,0,0}, + {cpu_instr_98_0,cpu_instr_98_1,0,0,0,0,0,0}, + {cpu_instr_99_0,cpu_instr_99_1,cpu_instr_99_2,0,0,0,0,0}, + {cpu_instr_100_0,0,0,0,0,0,0,0}, + {cpu_instr_101_0,cpu_instr_101_1,0,0,0,0,0,0}, + {cpu_instr_102_0,0,0,0,0,0,0,0}, + {cpu_instr_103_0,cpu_instr_103_1,0,0,0,0,0,0}, + {cpu_instr_104_0,cpu_instr_104_1,cpu_instr_104_2,cpu_instr_104_3,cpu_instr_104_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_106_0,cpu_instr_106_1,cpu_instr_106_2,cpu_instr_106_3,cpu_instr_106_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_108_0,cpu_instr_108_1,cpu_instr_108_2,cpu_instr_108_3,cpu_instr_108_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_110_0,cpu_instr_110_1,cpu_instr_110_2,cpu_instr_110_3,cpu_instr_110_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_112_0,cpu_instr_112_1,0,0,0,0,0,0}, + {cpu_instr_113_0,cpu_instr_113_1,0,0,0,0,0,0}, + {cpu_instr_114_0,cpu_instr_114_1,0,0,0,0,0,0}, + {cpu_instr_115_0,cpu_instr_115_1,0,0,0,0,0,0}, + {cpu_instr_116_0,cpu_instr_116_1,0,0,0,0,0,0}, + {cpu_instr_117_0,cpu_instr_117_1,0,0,0,0,0,0}, + {cpu_instr_118_0,cpu_instr_118_1,0,0,0,0,0,0}, + {cpu_instr_119_0,cpu_instr_119_1,0,0,0,0,0,0}, + {cpu_instr_120_0,cpu_instr_120_1,0,0,0,0,0,0}, + {cpu_instr_121_0,cpu_instr_121_1,0,0,0,0,0,0}, + {cpu_instr_122_0,cpu_instr_122_1,cpu_instr_122_2,cpu_instr_122_3,0,0,0,0}, + {cpu_instr_123_0,cpu_instr_123_1,cpu_instr_123_2,cpu_instr_123_3,0,0,0,0}, + {cpu_instr_124_0,cpu_instr_124_1,cpu_instr_124_2,0,0,0,0,0}, + {cpu_instr_125_0,cpu_instr_125_1,cpu_instr_125_2,0,0,0,0,0}, + {cpu_instr_126_0,cpu_instr_126_1,cpu_instr_126_2,cpu_instr_126_3,0,0,0,0}, + {cpu_instr_127_0,cpu_instr_127_1,cpu_instr_127_2,cpu_instr_127_3,0,0,0,0}, + {cpu_instr_128_0,0,0,0,0,0,0,0}, + {cpu_instr_129_0,0,0,0,0,0,0,0}, + {cpu_instr_130_0,0,0,0,0,0,0,0}, + {cpu_instr_131_0,0,0,0,0,0,0,0}, + {cpu_instr_132_0,0,0,0,0,0,0,0}, + {cpu_instr_133_0,0,0,0,0,0,0,0}, + {cpu_instr_134_0,0,0,0,0,0,0,0}, + {cpu_instr_135_0,0,0,0,0,0,0,0}, + {cpu_instr_136_0,0,0,0,0,0,0,0}, + {cpu_instr_137_0,0,0,0,0,0,0,0}, + {cpu_instr_138_0,0,0,0,0,0,0,0}, + {cpu_instr_139_0,0,0,0,0,0,0,0}, + {cpu_instr_140_0,0,0,0,0,0,0,0}, + {cpu_instr_141_0,0,0,0,0,0,0,0}, + {cpu_instr_142_0,0,0,0,0,0,0,0}, + {cpu_instr_143_0,0,0,0,0,0,0,0}, + {cpu_instr_144_0,0,0,0,0,0,0,0}, + {cpu_instr_145_0,0,0,0,0,0,0,0}, + {cpu_instr_146_0,cpu_instr_146_1,cpu_instr_146_2,0,0,0,0,0}, + {cpu_instr_147_0,cpu_instr_147_1,cpu_instr_147_2,0,0,0,0,0}, + {cpu_instr_148_0,cpu_instr_148_1,cpu_instr_148_2,0,0,0,0,0}, + {cpu_instr_149_0,cpu_instr_149_1,cpu_instr_149_2,0,0,0,0,0}, + {cpu_instr_150_0,cpu_instr_150_1,cpu_instr_150_2,0,0,0,0,0}, + {cpu_instr_151_0,cpu_instr_151_1,cpu_instr_151_2,0,0,0,0,0}, + {cpu_instr_152_0,cpu_instr_152_1,cpu_instr_152_2,0,0,0,0,0}, + {cpu_instr_153_0,cpu_instr_153_1,0,0,0,0,0,0}, + {cpu_instr_154_0,cpu_instr_154_1,0,0,0,0,0,0}, + {cpu_instr_155_0,cpu_instr_155_1,cpu_instr_155_2,0,0,0,0,0}, + {cpu_instr_156_0,cpu_instr_156_1,cpu_instr_156_2,0,0,0,0,0}, + {cpu_instr_157_0,cpu_instr_157_1,cpu_instr_157_2,0,0,0,0,0}, + {cpu_instr_158_0,cpu_instr_158_1,cpu_instr_158_2,0,0,0,0,0}, + {cpu_instr_159_0,0,0,0,0,0,0,0}, + {cpu_instr_160_0,0,0,0,0,0,0,0}, + {cpu_instr_161_0,0,0,0,0,0,0,0}, + {cpu_instr_162_0,0,0,0,0,0,0,0}, + {cpu_instr_163_0,0,0,0,0,0,0,0}, + {cpu_instr_164_0,0,0,0,0,0,0,0}, + {cpu_instr_165_0,0,0,0,0,0,0,0}, + {cpu_instr_166_0,0,0,0,0,0,0,0}, + {cpu_instr_167_0,0,0,0,0,0,0,0}, + {cpu_instr_168_0,0,0,0,0,0,0,0}, + {cpu_instr_169_0,0,0,0,0,0,0,0}, + {cpu_instr_170_0,0,0,0,0,0,0,0}, + {cpu_instr_171_0,0,0,0,0,0,0,0}, + {cpu_instr_172_0,0,0,0,0,0,0,0}, + {cpu_instr_173_0,0,0,0,0,0,0,0}, + {cpu_instr_174_0,cpu_instr_174_1,cpu_instr_174_2,0,0,0,0,0}, + {cpu_instr_175_0,cpu_instr_175_1,cpu_instr_175_2,0,0,0,0,0}, + {cpu_instr_176_0,cpu_instr_176_1,cpu_instr_176_2,0,0,0,0,0}, + {cpu_instr_177_0,cpu_instr_177_1,cpu_instr_177_2,0,0,0,0,0}, + {cpu_instr_178_0,cpu_instr_178_1,cpu_instr_178_2,0,0,0,0,0}, + {cpu_instr_179_0,cpu_instr_179_1,cpu_instr_179_2,0,0,0,0,0}, + {cpu_instr_180_0,cpu_instr_180_1,cpu_instr_180_2,0,0,0,0,0}, + {cpu_instr_181_0,cpu_instr_181_1,cpu_instr_181_2,0,0,0,0,0}, + {cpu_instr_182_0,0,0,0,0,0,0,0}, + {cpu_instr_183_0,cpu_instr_183_1,cpu_instr_183_2,0,0,0,0,0}, + {cpu_instr_184_0,0,0,0,0,0,0,0}, + {cpu_instr_185_0,0,0,0,0,0,0,0}, + {cpu_instr_186_0,0,0,0,0,0,0,0}, + {cpu_instr_187_0,0,0,0,0,0,0,0}, + {cpu_instr_188_0,0,0,0,0,0,0,0}, + {cpu_instr_189_0,0,0,0,0,0,0,0}, + {cpu_instr_190_0,0,0,0,0,0,0,0}, + {cpu_instr_191_0,0,0,0,0,0,0,0}, + {cpu_instr_192_0,cpu_instr_192_1,0,0,0,0,0,0}, + {cpu_instr_193_0,cpu_instr_193_1,0,0,0,0,0,0}, + {cpu_instr_194_0,cpu_instr_194_1,0,0,0,0,0,0}, + {cpu_instr_195_0,cpu_instr_195_1,0,0,0,0,0,0}, + {cpu_instr_196_0,cpu_instr_196_1,0,0,0,0,0,0}, + {cpu_instr_197_0,cpu_instr_197_1,0,0,0,0,0,0}, + {cpu_instr_198_0,cpu_instr_198_1,0,0,0,0,0,0}, + {cpu_instr_199_0,cpu_instr_199_1,0,0,0,0,0,0}, + {cpu_instr_200_0,cpu_instr_200_1,0,0,0,0,0,0}, + {cpu_instr_201_0,cpu_instr_201_1,0,0,0,0,0,0}, + {cpu_instr_202_0,cpu_instr_202_1,0,0,0,0,0,0}, + {cpu_instr_203_0,cpu_instr_203_1,0,0,0,0,0,0}, + {cpu_instr_204_0,cpu_instr_204_1,cpu_instr_204_2,0,0,0,0,0}, + {cpu_instr_205_0,cpu_instr_205_1,cpu_instr_205_2,0,0,0,0,0}, + {cpu_instr_206_0,cpu_instr_206_1,cpu_instr_206_2,0,0,0,0,0}, + {cpu_instr_207_0,cpu_instr_207_1,cpu_instr_207_2,0,0,0,0,0}, + {cpu_instr_208_0,cpu_instr_208_1,0,0,0,0,0,0}, + {cpu_instr_209_0,cpu_instr_209_1,0,0,0,0,0,0}, + {cpu_instr_210_0,cpu_instr_210_1,0,0,0,0,0,0}, + {cpu_instr_211_0,cpu_instr_211_1,0,0,0,0,0,0}, + {cpu_instr_212_0,cpu_instr_212_1,0,0,0,0,0,0}, + {cpu_instr_213_0,cpu_instr_213_1,cpu_instr_213_2,0,0,0,0,0}, + {cpu_instr_214_0,cpu_instr_214_1,cpu_instr_214_2,0,0,0,0,0}, + {cpu_instr_215_0,cpu_instr_215_1,cpu_instr_215_2,0,0,0,0,0}, + {cpu_instr_216_0,cpu_instr_216_1,cpu_instr_216_2,0,0,0,0,0}, + {cpu_instr_217_0,cpu_instr_217_1,cpu_instr_217_2,0,0,0,0,0}, + {cpu_instr_218_0,0,0,0,0,0,0,0}, + {cpu_instr_219_0,0,0,0,0,0,0,0}, + {cpu_instr_220_0,0,0,0,0,0,0,0}, + {cpu_instr_221_0,0,0,0,0,0,0,0}, + {cpu_instr_222_0,0,0,0,0,0,0,0}, + {cpu_instr_223_0,0,0,0,0,0,0,0}, + {cpu_instr_224_0,0,0,0,0,0,0,0}, + {cpu_instr_225_0,cpu_instr_225_1,cpu_instr_225_2,0,0,0,0,0}, + {cpu_instr_226_0,cpu_instr_226_1,cpu_instr_226_2,cpu_instr_226_3,cpu_instr_226_4,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_228_0,cpu_instr_228_1,cpu_instr_228_2,0,0,0,0,0}, + {cpu_instr_229_0,cpu_instr_229_1,cpu_instr_229_2,0,0,0,0,0}, + {cpu_instr_230_0,0,0,0,0,0,0,0}, + {cpu_instr_231_0,0,0,0,0,0,0,0}, + {cpu_instr_232_0,0,0,0,0,0,0,0}, + {cpu_instr_233_0,cpu_instr_233_1,0,0,0,0,0,0}, + {cpu_instr_234_0,cpu_instr_234_1,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_240_0,0,0,0,0,0,0,0}, + {cpu_instr_241_0,0,0,0,0,0,0,0}, + {cpu_instr_242_0,0,0,0,0,0,0,0}, + {cpu_instr_243_0,0,0,0,0,0,0,0}, + {cpu_instr_244_0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, + {cpu_instr_255_0,0,0,0,0,0,0,0}, +}; diff --git a/emulator/keycodes.lua b/emulator/keycodes.lua new file mode 100644 index 0000000..9e40dc5 --- /dev/null +++ b/emulator/keycodes.lua @@ -0,0 +1,111 @@ + +return { + ["backspace"] = 8, + ["tab"] = 9, + ["return"] = 13, + + ["lshift"] = 16, + ["lcontrol"] = 17, + ["lalt"] = 18, + + -- this block does not match vkey codes + ["rshift"] = 20, + ["rcontrol"] = 21, + ["ralt"] = 22, + + -- this block does not match vkey codes + [";"] = 24, + ["="] = 25, + [","] = 26, + ["."] = 27, + ["/"] = 29, + ["`"] = 30, + + ["space"] = 32, + ["pageup"] = 33, + ["pagedown"] = 34, + ["end"] = 35, + ["home"] = 36, + ["left"] = 37, + ["up"] = 38, + ["right"] = 39, + ["down"] = 40, + ["insert"] = 45, + ["delete"] = 46, + + ["0"] = 48, + ["1"] = 49, + ["2"] = 50, + ["3"] = 51, + ["4"] = 52, + ["5"] = 53, + ["6"] = 54, + ["7"] = 55, + ["8"] = 56, + ["9"] = 57, + + -- this block does not match vkey codes + ["["] = 60, + ["\\"] = 61, + ["]"] = 62, + ["\'"] = 63, --["apostrophe"] = 63, + + ["a"] = 65, + ["b"] = 66, + ["c"] = 67, + ["d"] = 68, + ["e"] = 69, + ["f"] = 70, + ["g"] = 71, + ["h"] = 72, + ["i"] = 73, + ["j"] = 74, + ["k"] = 75, + ["l"] = 76, + ["m"] = 77, + ["n"] = 78, + ["o"] = 79, + ["p"] = 80, + ["q"] = 81, + ["r"] = 82, + ["s"] = 83, + ["t"] = 84, + ["u"] = 85, + ["v"] = 86, + ["w"] = 87, + ["x"] = 88, + ["y"] = 89, + ["z"] = 90, + + ["kp0"] = 96, --["numpad0"] = 96, + ["kp1"] = 97, --["numpad1"] = 97, + ["kp2"] = 98, --["numpad2"] = 98, + ["kp3"] = 99, --["numpad3"] = 99, + ["kp4"] = 100, --["numpad4"] = 100, + ["kp5"] = 101, --["numpad5"] = 101, + ["kp6"] = 102, --["numpad6"] = 102, + ["kp7"] = 103, --["numpad7"] = 103, + ["kp8"] = 104, --["numpad8"] = 104, + ["kp9"] = 105, --["numpad9"] = 105, + ["kp*"] = 106, --["*"] = 106, + ["kp+"] = 107, --["+"] = 107, + ["kpenter"] = 108, --["numpadenter"] = 108, + ["kp-"] = 109, --["minus"] = 109, + ["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, + + ["invalid"] = 127, +} diff --git a/emulator/main.lua b/emulator/main.lua new file mode 100644 index 0000000..ce8bf5c --- /dev/null +++ b/emulator/main.lua @@ -0,0 +1 @@ +require("8608emulator") diff --git a/instructionList.txt b/instructionList.txt index e839794..062bb90 100644 --- a/instructionList.txt +++ b/instructionList.txt @@ -35,6 +35,9 @@ tst *s+imm8 2E 3 Set flags according to *(S+imm8)-0 adp imm8 4A 2 P+=imm8 signed adq imm8 4B 2 Q+=imm8 signed ads imm8 4C 2 S+=imm8 signed +adp b E6 1 P+=B signed +adq b E7 1 Q+=B signed +ads b E8 1 S+=B signed 8-bit Arithmetic/Logic (A): add imm8 24 2 A+=imm8, set flags @@ -133,11 +136,13 @@ Stack (S): psh a 40 2 *(S++)=A psh b 44 2 *(S++)=B psh c 45 2 *(S++)=C +psh f E9 2 *(S++)=F psh p 41 3 *(S++++)=P psh q 46 3 *(S++++)=Q pop a 42 2 A=*(--S) pop b 47 2 B=*(--S) pop c 48 2 C=*(--S) +pop f EA 2 F=*(--S) pop p 43 3 P=*(----S) pop q 49 3 Q=*(----S) psh imm8 3B 3 *(S++)=imm8 @@ -233,7 +238,7 @@ ldq p 8E 1 Q=P lds p 8F 1 S=P ldv p 90 1 V=P -Opcodes used: 221/255 +Opcodes used: 226/255 0123456789ABCDEF 00 | C--------------- 10 | UUIIUIIUUUUUUUUU @@ -249,5 +254,5 @@ A0 | AAAAAAAAAAAAAAAA B0 | AAAAAAAAAAAAAAAA C0 | BBBBBBBBBBBBWWWW D0 | AAAAAAAAAAAAAAAA -E0 | MJJJJJ---------- +E0 | MJJJJJXXXSS----- F0 | CCCCC----------C diff --git a/rom-8608-defs.lua b/rom-8608-defs.lua index 34417ec..0838e59 100644 --- a/rom-8608-defs.lua +++ b/rom-8608-defs.lua @@ -17,14 +17,14 @@ roms = { } }, { pos = {-34, 16, 17}, size = {32, 32, 32}, signals = { "_", "_", "_", "_", "_", "_", "_", "_", - "_", "_", "memSaveNZ", "instrPre", "instrLoadPre", "always1", "instrLoadSel", "adrOut", + "_", "memSaveF", "memSaveNZ", "instrPre", "instrLoadPre", "always1", "instrLoadSel", "adrOut", "memWriteAlur", "memSave", "instrNext0NZ", "instrNext0Z", "instrNext0NC", "instrNext0C", "instrLoadSub", "instrLoad", "instrNext2", "instrNext1", "instrNext0", "memSaveU", "memSaveT", "memSaveC", "memSaveB", "memSaveA", } }, { pos = {66, 16, 0}, size = {32, 32, 32}, signals = { "adrr1", "adrrm1", "adrrm2", "adrr2", "adwrm1", "adwrm2", "adwr2", "adwr1", "memRead", "memWrite", "runFlgVal", "runFlgClk", "intFlgVal", "intFlgClk", "irqFlgClk", "always1", - "aluShiftArith", "aluShiftRoll", "aluShiftRight", "aluShift", "_", "_", "_", "_", + "aluShiftArith", "aluShiftRoll", "aluShiftRight", "aluShift", "alurF", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", "_", } }, }, @@ -130,239 +130,244 @@ operations = { instructions = { { category = "Control", catlet="C" }, - { mnem="rst" , opcode=0x00, {"base","intFlgClk","irqFlgClk","runFlgClk","runFlgVal","clearRegs","loadInstr"}, desc="Clear all registers and set I=0" }, - { mnem="hlt" , opcode=0xF0, {"runFlgClk","instrNext"}, desc="Halt non-interrupt execution" }, - { mnem="run" , opcode=0xF1, {"runFlgClk","runFlgVal","instrNext"}, desc ="Resume non-interrupt execution" }, - { mnem="int" , opcode=0xF2, {"instrSwapIV","intFlgVal","intFlgClk","irqFlgClk"}, }, - { mnem="brk" , opcode=0xF3, {"instrSwapIV","adwInc","intFlgVal","intFlgClk"}, desc="Trigger interrupt" }, - { mnem="irt" , opcode=0xF4, {"instrSwapIV","adwInc","intFlgClk"}, desc="Return from interrupt" }, - { mnem="nop" , opcode=0xFF, {"instrNext"}, desc="Do nothing" }, + { mnem="rst" , opcode=0x00, {"base","intFlgClk","irqFlgClk","runFlgClk","runFlgVal","clearRegs","loadInstr"}, desc="Clear all registers and set I=0", ccode={"cpu.a=0; cpu.b=0; cpu.c=0; cpu.u=0; cpu.t=0; cpu.p=0; cpu.q=0; cpu.s=0; cpu.v=0; cpu.i=0; cpu.cf=0; cpu.nz=0; cpu.irq=0; cpu.ifg=0; cpu.rfg=1; lni;"} }, + { mnem="hlt" , opcode=0xF0, {"runFlgClk","instrNext"}, desc="Halt non-interrupt execution", ccode={"cpu.rfg=0; lni;"} }, + { mnem="run" , opcode=0xF1, {"runFlgClk","runFlgVal","instrNext"}, desc ="Resume non-interrupt execution", ccode={"cpu.rfg=1; lni;"} }, + { mnem="int" , opcode=0xF2, {"instrSwapIV","intFlgVal","intFlgClk","irqFlgClk"}, ccode={"cpu.irq=0; cpu.ifg=1; int t=cpu.i; cpu.i=cpu.v; cpu.v=(t-1)%65536; lni;"} }, + { mnem="brk" , opcode=0xF3, {"instrSwapIV","adwInc","intFlgVal","intFlgClk"}, desc="Trigger interrupt", ccode={"cpu.ifg=1; int t=cpu.i; cpu.i=cpu.v; cpu.v=t; lni;"} }, + { mnem="irt" , opcode=0xF4, {"instrSwapIV","adwInc","intFlgClk"}, desc="Return from interrupt", ccode={"cpu.ifg=0; int t=cpu.i; cpu.i=cpu.v; cpu.v=t; lni;"} }, + { mnem="nop" , opcode=0xFF, {"instrNext"}, desc="Do nothing", ccode={"lni;"}, }, { category = "16-bit Inc/Dec", catlet="I" }, - { mnem="inc p" , opcode=0x12, {"adwlP","adwInc","adwSaveP","instrNext"}, desc="P++" }, - { mnem="dec p" , opcode=0x15, {"adwlP","adwrm1","adwSaveP","instrNext"}, desc="P--" }, - { mnem="inc q" , opcode=0x13, {"adwlQ","adwInc","adwSaveQ","instrNext"}, desc="Q++" }, - { mnem="dec q" , opcode=0x16, {"adwlQ","adwrm1","adwSaveQ","instrNext"}, desc="Q--" }, + { mnem="inc p" , opcode=0x12, {"adwlP","adwInc","adwSaveP","instrNext"}, desc="P++", ccode={"cpu.p++; lni;"} }, + { mnem="dec p" , opcode=0x15, {"adwlP","adwrm1","adwSaveP","instrNext"}, desc="P--", ccode={"cpu.p--; lni;"} }, + { mnem="inc q" , opcode=0x13, {"adwlQ","adwInc","adwSaveQ","instrNext"}, desc="Q++", ccode={"cpu.q++; lni;"} }, + { mnem="dec q" , opcode=0x16, {"adwlQ","adwrm1","adwSaveQ","instrNext"}, desc="Q--", ccode={"cpu.q--; lni;"} }, { category = "8-bit Unary", catlet="U" }, - { mnem="inc a" , opcode=0x10, {"aluA","alur1" ,"aluOpAdd" ,"instrNext"}, desc="A++, set flags" }, - { mnem="dec a" , opcode=0x11, {"aluA","alurm1","aluOpAdd" ,"instrNext"}, desc="A--, set flags" }, - { mnem="icc a" , opcode=0x1B, {"aluA", "aluOpAddC","instrNext"}, desc="A+=CF, set flags" }, - { mnem="inc b" , opcode=0x19, {"aluB","alur1" ,"aluOpAdd" ,"instrNext"}, desc="B++, set flags" }, - { mnem="dec b" , opcode=0x1A, {"aluB","alurm1","aluOpAdd" ,"instrNext"}, desc="B--, set flags" }, - { mnem="icc b" , opcode=0x1C, {"aluB", "aluOpAddC","instrNext"}, desc="B+=CF, set flags" }, - { mnem="inc c" , opcode=0x17, {"aluC","alur1" ,"aluOpAdd" ,"instrNext"}, desc="C++, set flags" }, - { mnem="dec c" , opcode=0x18, {"aluC","alurm1","aluOpAdd" ,"instrNext"}, desc="C--, set flags" }, - { mnem="icc c" , opcode=0x1D, {"aluC", "aluOpAddC","instrNext"}, desc="C+=CF, set flags" }, - { mnem="tst a" , opcode=0x14, {"alulA", "aluOpCmp" ,"instrNext"}, desc="Set flags according to A-0" }, - { mnem="tst b" , opcode=0x1E, {"alulB", "aluOpCmp" ,"instrNext"}, desc="Set flags according to B-0" }, - { mnem="tst c" , opcode=0x1F, {"alulC", "aluOpCmp" ,"instrNext"}, desc="Set flags according to C-0" }, - { mnem="inc *s+imm8", opcode=0x2B, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alur1" ,"aluOpAdd" ,"instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)++, set flags" }, - { mnem="dec *s+imm8", opcode=0x2C, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alurm1","aluOpAdd" ,"instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)--, set flags" }, - { mnem="icc *s+imm8", opcode=0x2D, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU", "aluOpAddC","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)+=CF, set flags" }, - { mnem="tst *s+imm8", opcode=0x2E, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"alulU", "aluOpCmp" ,"instrNext"}, desc="Set flags according to *(S+imm8)-0" }, + { mnem="inc a" , opcode=0x10, {"aluA","alur1" ,"aluOpAdd" ,"instrNext"}, desc="A++, set flags" , ccode={"addf(cpu.a, 1 ); lni;"} }, + { mnem="dec a" , opcode=0x11, {"aluA","alurm1","aluOpAdd" ,"instrNext"}, desc="A--, set flags" , ccode={"addf(cpu.a,-1 ); lni;"} }, + { mnem="icc a" , opcode=0x1B, {"aluA", "aluOpAddC","instrNext"}, desc="A+=CF, set flags", ccode={"addf(cpu.a,cpu.cf); lni;"} }, + { mnem="inc b" , opcode=0x19, {"aluB","alur1" ,"aluOpAdd" ,"instrNext"}, desc="B++, set flags" , ccode={"addf(cpu.b, 1 ); lni;"} }, + { mnem="dec b" , opcode=0x1A, {"aluB","alurm1","aluOpAdd" ,"instrNext"}, desc="B--, set flags" , ccode={"addf(cpu.b,-1 ); lni;"} }, + { mnem="icc b" , opcode=0x1C, {"aluB", "aluOpAddC","instrNext"}, desc="B+=CF, set flags", ccode={"addf(cpu.b,cpu.cf); lni;"} }, + { mnem="inc c" , opcode=0x17, {"aluC","alur1" ,"aluOpAdd" ,"instrNext"}, desc="C++, set flags" , ccode={"addf(cpu.c, 1 ); lni;"} }, + { mnem="dec c" , opcode=0x18, {"aluC","alurm1","aluOpAdd" ,"instrNext"}, desc="C--, set flags" , ccode={"addf(cpu.c,-1 ); lni;"} }, + { mnem="icc c" , opcode=0x1D, {"aluC", "aluOpAddC","instrNext"}, desc="C+=CF, set flags", ccode={"addf(cpu.c,cpu.cf); lni;"} }, + { mnem="tst a" , opcode=0x14, {"alulA", "aluOpCmp" ,"instrNext"}, desc="Set flags according to A-0", ccode={"tst(cpu.a); lni;"} }, + { mnem="tst b" , opcode=0x1E, {"alulB", "aluOpCmp" ,"instrNext"}, desc="Set flags according to B-0", ccode={"tst(cpu.b); lni;"} }, + { mnem="tst c" , opcode=0x1F, {"alulC", "aluOpCmp" ,"instrNext"}, desc="Set flags according to C-0", ccode={"tst(cpu.c); lni;"} }, + { mnem="inc *s+imm8", opcode=0x2B, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alur1" ,"aluOpAdd" ,"instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)++, set flags" , ccode={"loadimmedt","loadstackrelu","instrpreload; addf(cpu.u, 1 );","instrloadpre"} }, + { mnem="dec *s+imm8", opcode=0x2C, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU","alurm1","aluOpAdd" ,"instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)--, set flags" , ccode={"loadimmedt","loadstackrelu","instrpreload; addf(cpu.u,-1 );","instrloadpre"} }, + { mnem="icc *s+imm8", opcode=0x2D, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"aluU", "aluOpAddC","instrSub3","instrPreload"}, {"storeStackRelU","instrNextPre"}, desc="*(S+imm8)+=CF, set flags", ccode={"loadimmedt","loadstackrelu","instrpreload; addf(cpu.u,cpu.cf);","instrloadpre"} }, + { mnem="tst *s+imm8", opcode=0x2E, {"loadImmedT","instrSub1"}, {"loadStackRelU","instrSub2"}, {"alulU", "aluOpCmp" ,"instrNext"}, desc="Set flags according to *(S+imm8)-0", ccode={"loadimmedt","loadstackrelu","tst(cpu.u); lni;"} }, { category = "16-bit Arithmetic", catlet = "X"}, - { mnem="adp imm8" , opcode=0x4A, {"loadImmedT","instrSub1"}, {"adwP","adwrTX","instrNext"}, desc="P+=imm8 signed"}, - { mnem="adq imm8" , opcode=0x4B, {"loadImmedT","instrSub1"}, {"adwQ","adwrTX","instrNext"}, desc="Q+=imm8 signed"}, - { mnem="ads imm8" , opcode=0x4C, {"loadImmedT","instrSub1"}, {"adwS","adwrTX","instrNext"}, desc="S+=imm8 signed"}, + { mnem="adp imm8" , opcode=0x4A, {"loadImmedT","instrSub1"}, {"adwP","adwrTX","instrNext"}, desc="P+=imm8 signed", ccode={"loadimmedt","cpu.p+=signed8(cpu.t); lni;"} }, + { mnem="adq imm8" , opcode=0x4B, {"loadImmedT","instrSub1"}, {"adwQ","adwrTX","instrNext"}, desc="Q+=imm8 signed", ccode={"loadimmedt","cpu.q+=signed8(cpu.t); lni;"} }, + { mnem="ads imm8" , opcode=0x4C, {"loadImmedT","instrSub1"}, {"adwS","adwrTX","instrNext"}, desc="S+=imm8 signed", ccode={"loadimmedt","cpu.s+=signed8(cpu.t); lni;"} }, + { mnem="adp b" , opcode=0xE6, {"adwP","adwrBX","instrNext"}, desc="P+=B signed", ccode={"cpu.p+=signed8(cpu.b); lni;"} }, + { mnem="adq b" , opcode=0xE7, {"adwQ","adwrBX","instrNext"}, desc="Q+=B signed", ccode={"cpu.q+=signed8(cpu.b); lni;"} }, + { mnem="ads b" , opcode=0xE8, {"adwS","adwrBX","instrNext"}, desc="S+=B signed", ccode={"cpu.s+=signed8(cpu.b); lni;"} }, { category = "8-bit Arithmetic/Logic", catlet="A" }, - { mnem="add imm8" , opcode=0x24, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAdd" ,"instrNext"}, desc="A+=imm8, set flags" }, - { mnem="adb imm8" , opcode=0x72, {"loadImmedT","instrSub1"}, {"aluB", "alurT","aluOpAdd" ,"instrNext"}, desc="B+=imm8, set flags" }, - { mnem="adc imm8" , opcode=0x73, {"loadImmedT","instrSub1"}, {"aluC", "alurT","aluOpAdd" ,"instrNext"}, desc="C+=imm8, set flags" }, - { mnem="sub imm8" , opcode=0x70, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSub" ,"instrNext"}, desc="A-=imm8, set flags" }, - { mnem="sbb imm8" , opcode=0x99, {"loadImmedT","instrSub1"}, {"aluB", "alurT","aluOpSub" ,"instrNext"}, desc="B-=imm8, set flags" }, - { mnem="sbc imm8" , opcode=0x9A, {"loadImmedT","instrSub1"}, {"aluC", "alurT","aluOpSub" ,"instrNext"}, desc="C-=imm8, set flags" }, - { mnem="acc imm8" , opcode=0x78, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAddC","instrNext"}, desc="A+=imm8+CF, set flags" }, - { mnem="scc imm8" , opcode=0x79, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSubC","instrNext"}, desc="A-=imm8+CF, set flags" }, - { mnem="cmp imm8" , opcode=0x71, {"loadImmedT","instrSub1"}, {"alulA","alurT","aluOpSub" ,"instrNext"}, desc="set flags according to A-imm8" }, - { mnem="and imm8" , opcode=0x74, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAnd" ,"instrNext"}, desc="A&=imm8, set zero flag" }, - { mnem="ior imm8" , opcode=0x75, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpIor" ,"instrNext"}, desc="A|=imm8, set zero flag" }, - { mnem="xor imm8" , opcode=0x76, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpXor" ,"instrNext"}, desc="A^=imm8, set zero flag" }, - { mnem="ann imm8" , opcode=0x77, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAnn" ,"instrNext"}, desc="A&=~imm8, set zero flag" }, - { mnem="shl imm8" , opcode=0xD0, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpShl" ,"instrNext"}, desc="A<<=imm8, set zero flag" }, - { mnem="shr imm8" , opcode=0xD1, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpShr" ,"instrNext"}, desc="A>>=imm8, set zero flag" }, - { mnem="rol imm8" , opcode=0xD2, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpRol" ,"instrNext"}, desc="A<<<=imm8, set zero flag" }, - { mnem="ror imm8" , opcode=0xD3, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpRor" ,"instrNext"}, desc="A>>>=imm8, set zero flag" }, - { mnem="sra imm8" , opcode=0xD4, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSra" ,"instrNext"}, desc="A>>a=imm8, set zero flag" }, - { mnem="add *s+imm8", opcode=0xAE, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAdd" ,"instrNext"}, desc="A+=*(S+imm8), set flags" }, - { mnem="adb *s+imm8", opcode=0x9B, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluB", "alurT","aluOpAdd" ,"instrNext"}, desc="B+=*(S+imm8), set flags" }, - { mnem="adc *s+imm8", opcode=0x9C, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluC", "alurT","aluOpAdd" ,"instrNext"}, desc="C+=*(S+imm8), set flags" }, - { mnem="sub *s+imm8", opcode=0xAF, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSub" ,"instrNext"}, desc="A-=*(S+imm8), set flags" }, - { mnem="sbb *s+imm8", opcode=0x9D, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluB", "alurT","aluOpSub" ,"instrNext"}, desc="B-=*(S+imm8), set flags" }, - { mnem="sbc *s+imm8", opcode=0x9E, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluC", "alurT","aluOpSub" ,"instrNext"}, desc="C-=*(S+imm8), set flags" }, - { mnem="acc *s+imm8", opcode=0xB5, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAddC","instrNext"}, desc="A+=*(S+imm8)+CF, set flags" }, - { mnem="scc *s+imm8", opcode=0xB7, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSubC","instrNext"}, desc="A-=*(S+imm8)+CF, set flags" }, - { mnem="cmp *s+imm8", opcode=0xB0, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"alulA","alurT","aluOpSub" ,"instrNext"}, desc="set flags according to A-*(S+imm8)" }, - { mnem="and *s+imm8", opcode=0xB1, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAnd" ,"instrNext"}, desc="A&=*(S+imm8), set zero flag" }, - { mnem="ior *s+imm8", opcode=0xB2, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpIor" ,"instrNext"}, desc="A|=*(S+imm8), set zero flag" }, - { mnem="xor *s+imm8", opcode=0xB3, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpXor" ,"instrNext"}, desc="A^=*(S+imm8), set zero flag" }, - { mnem="ann *s+imm8", opcode=0xB4, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAnn" ,"instrNext"}, desc="A&=~*(S+imm8), set zero flag" }, - { mnem="shl *s+imm8", opcode=0xD5, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpShl" ,"instrNext"}, desc="A<<=*(S+imm8), set zero flag" }, - { mnem="shr *s+imm8", opcode=0xD6, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpShr" ,"instrNext"}, desc="A<<=*(S+imm8), set zero flag" }, - { mnem="rol *s+imm8", opcode=0xD7, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpRol" ,"instrNext"}, desc="A<<<=*(S+imm8), set zero flag" }, - { mnem="ror *s+imm8", opcode=0xD8, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpRor" ,"instrNext"}, desc="A>>>=*(S+imm8), set zero flag" }, - { mnem="sra *s+imm8", opcode=0xD9, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSra" ,"instrNext"}, desc="A>>a=*(S+imm8), set zero flag" }, - { mnem="add b" , opcode=0xA0, {"aluA", "alurB","aluOpAdd" ,"instrNext"}, desc="A+=B, set flags" }, - { mnem="adc b" , opcode=0x9F, {"aluC", "alurB","aluOpAdd" ,"instrNext"}, desc="C+=B, set flags" }, - { mnem="sub b" , opcode=0xA1, {"aluA", "alurB","aluOpSub" ,"instrNext"}, desc="A-=B, set flags" }, - { mnem="sbc b" , opcode=0xB6, {"aluC", "alurB","aluOpSub" ,"instrNext"}, desc="C-=B, set flags" }, - { mnem="acc b" , opcode=0xB8, {"aluA", "alurB","aluOpAddC","instrNext"}, desc="A+=B+CF, set flags" }, - { mnem="scc b" , opcode=0xB9, {"aluA", "alurB","aluOpSubC","instrNext"}, desc="A-=B+CF, set flags" }, - { mnem="cmp b" , opcode=0xA2, {"alulA","alurB","aluOpSub" ,"instrNext"}, desc="set flags according to A-B" }, - { mnem="and b" , opcode=0xA3, {"aluA", "alurB","aluOpAnd" ,"instrNext"}, desc="A&=B, set zero flag" }, - { mnem="ior b" , opcode=0xA4, {"aluA", "alurB","aluOpIor" ,"instrNext"}, desc="A|=B, set zero flag" }, - { mnem="xor b" , opcode=0xA5, {"aluA", "alurB","aluOpXor" ,"instrNext"}, desc="A^=B, set zero flag" }, - { mnem="ann b" , opcode=0xA6, {"aluA", "alurB","aluOpAnn" ,"instrNext"}, desc="A&=~B, set zero flag" }, - { mnem="shl b" , opcode=0xDA, {"aluA", "alurB","aluOpShl" ,"instrNext"}, desc="A<<=B, set zero flag" }, - { mnem="shr b" , opcode=0xDB, {"aluA", "alurB","aluOpShr" ,"instrNext"}, desc="A>>=B, set zero flag" }, - { mnem="rol b" , opcode=0xDC, {"aluA", "alurB","aluOpRol" ,"instrNext"}, desc="A<<<=B, set zero flag" }, - { mnem="ror b" , opcode=0xDD, {"aluA", "alurB","aluOpRor" ,"instrNext"}, desc="A>>>=B, set zero flag" }, - { mnem="sra b" , opcode=0xDE, {"aluA", "alurB","aluOpSra" ,"instrNext"}, desc="A>>a=B, set zero flag" }, - { mnem="add c" , opcode=0xA7, {"aluA", "alurC","aluOpAdd" ,"instrNext"}, desc="A+=C, set flags" }, - { mnem="adb c" , opcode=0xBD, {"aluB", "alurC","aluOpAdd" ,"instrNext"}, desc="B+=C, set flags" }, - { mnem="sub c" , opcode=0xA8, {"aluA", "alurC","aluOpSub" ,"instrNext"}, desc="A-=C, set flags" }, - { mnem="sbb c" , opcode=0xBC, {"aluB", "alurC","aluOpSub" ,"instrNext"}, desc="B-=C, set flags" }, - { mnem="acc c" , opcode=0xBA, {"aluA", "alurC","aluOpAddC","instrNext"}, desc="A+=C+CF, set flags" }, - { mnem="scc c" , opcode=0xBB, {"aluA", "alurC","aluOpSubC","instrNext"}, desc="A-=C+CF, set flags" }, - { mnem="cmp c" , opcode=0xA9, {"alulA","alurC","aluOpSub" ,"instrNext"}, desc="set flags according to A-C" }, - { mnem="and c" , opcode=0xAA, {"aluA", "alurC","aluOpAnd" ,"instrNext"}, desc="A&=C, set zero flag" }, - { mnem="ior c" , opcode=0xAB, {"aluA", "alurC","aluOpIor" ,"instrNext"}, desc="A|=C, set zero flag" }, - { mnem="xor c" , opcode=0xAC, {"aluA", "alurC","aluOpXor" ,"instrNext"}, desc="A^=C, set zero flag" }, - { mnem="ann c" , opcode=0xAD, {"aluA", "alurC","aluOpAnn" ,"instrNext"}, desc="A&=~C, set zero flag" }, - { mnem="shl c" , opcode=0xDF, {"aluA", "alurC","aluOpShl" ,"instrNext"}, desc="A<<=C, set zero flag" }, - { mnem="shr c" , opcode=0x4D, {"aluA", "alurC","aluOpShr" ,"instrNext"}, desc="A>>=C, set zero flag" }, - { mnem="rol c" , opcode=0x3E, {"aluA", "alurC","aluOpRol" ,"instrNext"}, desc="A<<<=C, set zero flag" }, - { mnem="ror c" , opcode=0x3F, {"aluA", "alurC","aluOpRor" ,"instrNext"}, desc="A>>>=C, set zero flag" }, - { mnem="sra c" , opcode=0x2F, {"aluA", "alurC","aluOpSra" ,"instrNext"}, desc="A>>a=C, set zero flag" }, - { mnem="adb a" , opcode=0xBE, {"aluB", "alurA","aluOpAdd" ,"instrNext"}, desc="B+=A, set flags" }, - { mnem="sbb a" , opcode=0xBF, {"aluB", "alurA","aluOpSub" ,"instrNext"}, desc="B-=A, set flags" }, - { mnem="adc a" , opcode=0x4E, {"aluC", "alurA","aluOpAdd" ,"instrNext"}, desc="C+=A, set flags" }, - { mnem="sbc a" , opcode=0x4F, {"aluC", "alurA","aluOpSub" ,"instrNext"}, desc="C-=A, set flags" }, + { mnem="add imm8" , opcode=0x24, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAdd" ,"instrNext"}, desc="A+=imm8, set flags" , ccode={"loadimmedt","addf(cpu.a,cpu.t); lni;"} }, + { mnem="adb imm8" , opcode=0x72, {"loadImmedT","instrSub1"}, {"aluB", "alurT","aluOpAdd" ,"instrNext"}, desc="B+=imm8, set flags" , ccode={"loadimmedt","addf(cpu.b,cpu.t); lni;"} }, + { mnem="adc imm8" , opcode=0x73, {"loadImmedT","instrSub1"}, {"aluC", "alurT","aluOpAdd" ,"instrNext"}, desc="C+=imm8, set flags" , ccode={"loadimmedt","addf(cpu.c,cpu.t); lni;"} }, + { mnem="sub imm8" , opcode=0x70, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSub" ,"instrNext"}, desc="A-=imm8, set flags" , ccode={"loadimmedt","subf(cpu.a,cpu.t); lni;"} }, + { mnem="sbb imm8" , opcode=0x99, {"loadImmedT","instrSub1"}, {"aluB", "alurT","aluOpSub" ,"instrNext"}, desc="B-=imm8, set flags" , ccode={"loadimmedt","subf(cpu.b,cpu.t); lni;"} }, + { mnem="sbc imm8" , opcode=0x9A, {"loadImmedT","instrSub1"}, {"aluC", "alurT","aluOpSub" ,"instrNext"}, desc="C-=imm8, set flags" , ccode={"loadimmedt","subf(cpu.c,cpu.t); lni;"} }, + { mnem="acc imm8" , opcode=0x78, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAddC","instrNext"}, desc="A+=imm8+CF, set flags" , ccode={"loadimmedt","addf(cpu.a,cpu.t+cpu.cf); lni;"} }, + { mnem="scc imm8" , opcode=0x79, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSubC","instrNext"}, desc="A-=imm8+CF, set flags" , ccode={"loadimmedt","addf(cpu.a,-cpu.t+cpu.cf); lni;"} }, + { mnem="cmp imm8" , opcode=0x71, {"loadImmedT","instrSub1"}, {"alulA","alurT","aluOpSub" ,"instrNext"}, desc="set flags according to A-imm8" , ccode={"loadimmedt","cmpf(cpu.a,cpu.t); lni;"} }, + { mnem="and imm8" , opcode=0x74, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAnd" ,"instrNext"}, desc="A&=imm8, set zero flag" , ccode={"loadimmedt","cpu.a&=cpu.t; setzf(cpu.a); lni;"} }, + { mnem="ior imm8" , opcode=0x75, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpIor" ,"instrNext"}, desc="A|=imm8, set zero flag" , ccode={"loadimmedt","cpu.a|=cpu.t; setzf(cpu.a); lni;"} }, + { mnem="xor imm8" , opcode=0x76, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpXor" ,"instrNext"}, desc="A^=imm8, set zero flag" , ccode={"loadimmedt","cpu.a^=cpu.t; setzf(cpu.a); lni;"} }, + { mnem="ann imm8" , opcode=0x77, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpAnn" ,"instrNext"}, desc="A&=~imm8, set zero flag" , ccode={"loadimmedt","cpu.a&=~cpu.t; setzf(cpu.a); lni;"} }, + { mnem="shl imm8" , opcode=0xD0, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpShl" ,"instrNext"}, desc="A<<=imm8, set zero flag" , ccode={"loadimmedt","cpu.a<<=cpu.t; setzf(cpu.a); lni;"} }, + { mnem="shr imm8" , opcode=0xD1, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpShr" ,"instrNext"}, desc="A>>=imm8, set zero flag" , ccode={"loadimmedt","cpu.a>>=cpu.t; setzf(cpu.a); lni;"} }, + { mnem="rol imm8" , opcode=0xD2, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpRol" ,"instrNext"}, desc="A<<<=imm8, set zero flag" , ccode={"loadimmedt","cpu.a=rol(cpu.a,cpu.t); setzf(cpu.a); lni;"} }, + { mnem="ror imm8" , opcode=0xD3, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpRor" ,"instrNext"}, desc="A>>>=imm8, set zero flag" , ccode={"loadimmedt","cpu.a=ror(cpu.a,cpu.t); setzf(cpu.a); lni;"} }, + { mnem="sra imm8" , opcode=0xD4, {"loadImmedT","instrSub1"}, {"aluA", "alurT","aluOpSra" ,"instrNext"}, desc="A>>a=imm8, set zero flag" , ccode={"loadimmedt","cpu.a=sra(cpu.a,cpu.t); setzf(cpu.a); lni;"} }, + { mnem="add *s+imm8", opcode=0xAE, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAdd" ,"instrNext"}, desc="A+=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","addf(cpu.a,cpu.u); lni;"} }, + { mnem="adb *s+imm8", opcode=0x9B, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluB", "alurT","aluOpAdd" ,"instrNext"}, desc="B+=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","addf(cpu.b,cpu.u); lni;"} }, + { mnem="adc *s+imm8", opcode=0x9C, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluC", "alurT","aluOpAdd" ,"instrNext"}, desc="C+=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","addf(cpu.c,cpu.u); lni;"} }, + { mnem="sub *s+imm8", opcode=0xAF, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSub" ,"instrNext"}, desc="A-=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","subf(cpu.a,cpu.u); lni;"} }, + { mnem="sbb *s+imm8", opcode=0x9D, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluB", "alurT","aluOpSub" ,"instrNext"}, desc="B-=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","subf(cpu.b,cpu.u); lni;"} }, + { mnem="sbc *s+imm8", opcode=0x9E, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluC", "alurT","aluOpSub" ,"instrNext"}, desc="C-=*(S+imm8), set flags" , ccode={"loadimmedt","loadstackrelu","subf(cpu.c,cpu.u); lni;"} }, + { mnem="acc *s+imm8", opcode=0xB5, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAddC","instrNext"}, desc="A+=*(S+imm8)+CF, set flags" , ccode={"loadimmedt","loadstackrelu","addf(cpu.a,cpu.u+cpu.cf); lni;"} }, + { mnem="scc *s+imm8", opcode=0xB7, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSubC","instrNext"}, desc="A-=*(S+imm8)+CF, set flags" , ccode={"loadimmedt","loadstackrelu","addf(cpu.a,-cpu.u+cpu.cf); lni;"} }, + { mnem="cmp *s+imm8", opcode=0xB0, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"alulA","alurT","aluOpSub" ,"instrNext"}, desc="set flags according to A-*(S+imm8)", ccode={"loadimmedt","loadstackrelu","cmpf(cpu.a,cpu.u); lni;"} }, + { mnem="and *s+imm8", opcode=0xB1, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAnd" ,"instrNext"}, desc="A&=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a&=cpu.u; setzf(cpu.a); lni;"} }, + { mnem="ior *s+imm8", opcode=0xB2, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpIor" ,"instrNext"}, desc="A|=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a|=cpu.u; setzf(cpu.a); lni;"} }, + { mnem="xor *s+imm8", opcode=0xB3, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpXor" ,"instrNext"}, desc="A^=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a^=cpu.u; setzf(cpu.a); lni;"} }, + { mnem="ann *s+imm8", opcode=0xB4, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpAnn" ,"instrNext"}, desc="A&=~*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a&=~cpu.u; setzf(cpu.a); lni;"} }, + { mnem="shl *s+imm8", opcode=0xD5, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpShl" ,"instrNext"}, desc="A<<=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a<<=cpu.u; setzf(cpu.a); lni;"} }, + { mnem="shr *s+imm8", opcode=0xD6, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpShr" ,"instrNext"}, desc="A<<=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a>>=cpu.u; setzf(cpu.a); lni;"} }, + { mnem="rol *s+imm8", opcode=0xD7, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpRol" ,"instrNext"}, desc="A<<<=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a=rol(cpu.a,cpu.u); setzf(cpu.a); lni;"} }, + { mnem="ror *s+imm8", opcode=0xD8, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpRor" ,"instrNext"}, desc="A>>>=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a=ror(cpu.a,cpu.u); setzf(cpu.a); lni;"} }, + { mnem="sra *s+imm8", opcode=0xD9, {"loadImmedT","instrSub1"}, {"loadStackRelT","instrSub2"}, {"aluA", "alurT","aluOpSra" ,"instrNext"}, desc="A>>a=*(S+imm8), set zero flag" , ccode={"loadimmedt","loadstackrelu","cpu.a=sra(cpu.a,cpu.u); setzf(cpu.a); lni;"} }, + { mnem="add b" , opcode=0xA0, {"aluA", "alurB","aluOpAdd" ,"instrNext"}, desc="A+=B, set flags" , ccode={"addf(cpu.a,cpu.b); lni;"} }, + { mnem="adc b" , opcode=0x9F, {"aluC", "alurB","aluOpAdd" ,"instrNext"}, desc="C+=B, set flags" , ccode={"addf(cpu.c,cpu.b); lni;"} }, + { mnem="sub b" , opcode=0xA1, {"aluA", "alurB","aluOpSub" ,"instrNext"}, desc="A-=B, set flags" , ccode={"subf(cpu.a,cpu.b); lni;"} }, + { mnem="sbc b" , opcode=0xB6, {"aluC", "alurB","aluOpSub" ,"instrNext"}, desc="C-=B, set flags" , ccode={"subf(cpu.c,cpu.b); lni;"} }, + { mnem="acc b" , opcode=0xB8, {"aluA", "alurB","aluOpAddC","instrNext"}, desc="A+=B+CF, set flags" , ccode={"addf(cpu.a,cpu.b+cpu.cf); lni;"} }, + { mnem="scc b" , opcode=0xB9, {"aluA", "alurB","aluOpSubC","instrNext"}, desc="A-=B+CF, set flags" , ccode={"addf(cpu.a,-cpu.b+cpu.cf); lni;"} }, + { mnem="cmp b" , opcode=0xA2, {"alulA","alurB","aluOpSub" ,"instrNext"}, desc="set flags according to A-B" , ccode={"cmpf(cpu.a,cpu.b); lni;"} }, + { mnem="and b" , opcode=0xA3, {"aluA", "alurB","aluOpAnd" ,"instrNext"}, desc="A&=B, set zero flag" , ccode={"cpu.a&=cpu.b; setzf(cpu.a); lni;"} }, + { mnem="ior b" , opcode=0xA4, {"aluA", "alurB","aluOpIor" ,"instrNext"}, desc="A|=B, set zero flag" , ccode={"cpu.a|=cpu.b; setzf(cpu.a); lni;"} }, + { mnem="xor b" , opcode=0xA5, {"aluA", "alurB","aluOpXor" ,"instrNext"}, desc="A^=B, set zero flag" , ccode={"cpu.a^=cpu.b; setzf(cpu.a); lni;"} }, + { mnem="ann b" , opcode=0xA6, {"aluA", "alurB","aluOpAnn" ,"instrNext"}, desc="A&=~B, set zero flag" , ccode={"cpu.a&=~cpu.b; setzf(cpu.a); lni;"} }, + { mnem="shl b" , opcode=0xDA, {"aluA", "alurB","aluOpShl" ,"instrNext"}, desc="A<<=B, set zero flag" , ccode={"cpu.a<<=cpu.b; setzf(cpu.a); lni;"} }, + { mnem="shr b" , opcode=0xDB, {"aluA", "alurB","aluOpShr" ,"instrNext"}, desc="A>>=B, set zero flag" , ccode={"cpu.a>>=cpu.b; setzf(cpu.a); lni;"} }, + { mnem="rol b" , opcode=0xDC, {"aluA", "alurB","aluOpRol" ,"instrNext"}, desc="A<<<=B, set zero flag" , ccode={"cpu.a=rol(cpu.a,cpu.b); setzf(cpu.a); lni;"} }, + { mnem="ror b" , opcode=0xDD, {"aluA", "alurB","aluOpRor" ,"instrNext"}, desc="A>>>=B, set zero flag" , ccode={"cpu.a=ror(cpu.a,cpu.b); setzf(cpu.a); lni;"} }, + { mnem="sra b" , opcode=0xDE, {"aluA", "alurB","aluOpSra" ,"instrNext"}, desc="A>>a=B, set zero flag" , ccode={"cpu.a=sra(cpu.a,cpu.b); setzf(cpu.a); lni;"} }, + { mnem="add c" , opcode=0xA7, {"aluA", "alurC","aluOpAdd" ,"instrNext"}, desc="A+=C, set flags" , ccode={"addf(cpu.a,cpu.c); lni;"} }, + { mnem="adb c" , opcode=0xBD, {"aluB", "alurC","aluOpAdd" ,"instrNext"}, desc="B+=C, set flags" , ccode={"addf(cpu.b,cpu.c); lni;"} }, + { mnem="sub c" , opcode=0xA8, {"aluA", "alurC","aluOpSub" ,"instrNext"}, desc="A-=C, set flags" , ccode={"subf(cpu.a,cpu.c); lni;"} }, + { mnem="sbb c" , opcode=0xBC, {"aluB", "alurC","aluOpSub" ,"instrNext"}, desc="B-=C, set flags" , ccode={"subf(cpu.b,cpu.c); lni;"} }, + { mnem="acc c" , opcode=0xBA, {"aluA", "alurC","aluOpAddC","instrNext"}, desc="A+=C+CF, set flags" , ccode={"addf(cpu.a,cpu.c+cpu.cf); lni;"} }, + { mnem="scc c" , opcode=0xBB, {"aluA", "alurC","aluOpSubC","instrNext"}, desc="A-=C+CF, set flags" , ccode={"addf(cpu.a,-cpu.c+cpu.cf); lni;"} }, + { mnem="cmp c" , opcode=0xA9, {"alulA","alurC","aluOpSub" ,"instrNext"}, desc="set flags according to A-C" , ccode={"cmpf(cpu.a,cpu.c); lni;"} }, + { mnem="and c" , opcode=0xAA, {"aluA", "alurC","aluOpAnd" ,"instrNext"}, desc="A&=C, set zero flag" , ccode={"cpu.a&=cpu.c; setzf(cpu.a); lni;"} }, + { mnem="ior c" , opcode=0xAB, {"aluA", "alurC","aluOpIor" ,"instrNext"}, desc="A|=C, set zero flag" , ccode={"cpu.a|=cpu.c; setzf(cpu.a); lni;"} }, + { mnem="xor c" , opcode=0xAC, {"aluA", "alurC","aluOpXor" ,"instrNext"}, desc="A^=C, set zero flag" , ccode={"cpu.a^=cpu.c; setzf(cpu.a); lni;"} }, + { mnem="ann c" , opcode=0xAD, {"aluA", "alurC","aluOpAnn" ,"instrNext"}, desc="A&=~C, set zero flag" , ccode={"cpu.a&=~cpu.c; setzf(cpu.a); lni;"} }, + { mnem="shl c" , opcode=0xDF, {"aluA", "alurC","aluOpShl" ,"instrNext"}, desc="A<<=C, set zero flag" , ccode={"cpu.a<<=cpu.c; setzf(cpu.a); lni;"} }, + { mnem="shr c" , opcode=0x4D, {"aluA", "alurC","aluOpShr" ,"instrNext"}, desc="A>>=C, set zero flag" , ccode={"cpu.a>>=cpu.c; setzf(cpu.a); lni;"} }, + { mnem="rol c" , opcode=0x3E, {"aluA", "alurC","aluOpRol" ,"instrNext"}, desc="A<<<=C, set zero flag" , ccode={"cpu.a=rol(cpu.a,cpu.c); setzf(cpu.a); lni;"} }, + { mnem="ror c" , opcode=0x3F, {"aluA", "alurC","aluOpRor" ,"instrNext"}, desc="A>>>=C, set zero flag" , ccode={"cpu.a=ror(cpu.a,cpu.c); setzf(cpu.a); lni;"} }, + { mnem="sra c" , opcode=0x2F, {"aluA", "alurC","aluOpSra" ,"instrNext"}, desc="A>>a=C, set zero flag" , ccode={"cpu.a=sra(cpu.a,cpu.c); setzf(cpu.a); lni;"} }, + { mnem="adb a" , opcode=0xBE, {"aluB", "alurA","aluOpAdd" ,"instrNext"}, desc="B+=A, set flags" , ccode={"addf(cpu.b,cpu.a); lni;"} }, + { mnem="sbb a" , opcode=0xBF, {"aluB", "alurA","aluOpSub" ,"instrNext"}, desc="B-=A, set flags" , ccode={"subf(cpu.b,cpu.a); lni;"} }, + { mnem="adc a" , opcode=0x4E, {"aluC", "alurA","aluOpAdd" ,"instrNext"}, desc="C+=A, set flags" , ccode={"addf(cpu.c,cpu.a); lni;"} }, + { mnem="sbc a" , opcode=0x4F, {"aluC", "alurA","aluOpSub" ,"instrNext"}, desc="C-=A, set flags" , ccode={"subf(cpu.c,cpu.a); lni;"} }, { category = "Jumps", catlet="J" }, - { mnem="jmp imm16" , opcode=0x60, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"jmpAbsUT" }, desc="I=imm16" }, - { mnem="jsr imm16" , opcode=0x63, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"jmpAbsUT","saveRetAddr"}, desc="I=imm16, Q=I" }, - { mnem="jss imm16" , opcode=0xE2, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"pushRetAddr1","instrSub3"}, {"pushRetAddr2","instrSub4"}, {"jmpAbsUT"}, desc="I=imm16, *(S++++)=I-1" }, - { mnem="jmp p" , opcode=0x64, {"jmpAbsP" }, desc="I=P" }, - { mnem="jmp q" , opcode=0x66, {"jmpAbsQ" }, desc="I=Q" }, - { mnem="jsr p" , opcode=0x65, {"jmpAbsP","saveRetAddr"}, desc="I=P, Q=I" }, - { mnem="jsr q" , opcode=0x67, {"jmpAbsQ","saveRetAddr"}, desc="I=Q, Q=I" }, - { mnem="jss p" , opcode=0xE4, {"pushRetAddr1","instrSub1"}, {"pushRetAddr2","instrSub2"}, {"jmpAbsP"}, desc="I=P, *(S++++)=I-1" }, - { mnem="jss q" , opcode=0xE5, {"pushRetAddr1","instrSub1"}, {"pushRetAddr2","instrSub2"}, {"jmpAbsQ"}, desc="I=Q, *(S++++)=I-1" }, - { mnem="rts" , opcode=0xE1, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"jmpAbsUT","adrInc"}, desc="I=*(----S)+1" }, - { mnem="jpr imm8" , opcode=0x31, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub1"}, {"jmpRelT"}, desc="I+=imm8" }, - { mnem="jnz imm8" , opcode=0x30, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NZ" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Zero" }, - { mnem="jpz imm8" , opcode=0x32, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" }, - { mnem="jlt imm8" , opcode=0x33, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" }, - { mnem="jge imm8" , opcode=0x34, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" }, - { mnem="jgt imm8" , opcode=0x35, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero & Carry"}, - { mnem="jle imm8" , opcode=0x36, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero | !Carry"}, + { mnem="jmp imm16" , opcode=0x60, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"jmpAbsUT" }, desc="I=imm16" , ccode={"loadimm161","loadimm162","jmpabsut"} }, + { mnem="jsr imm16" , opcode=0x63, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"jmpAbsUT","saveRetAddr"}, desc="I=imm16, Q=I", ccode={"loadimm161","loadimm162","jmpabsut saveretaddr"} }, + { mnem="jss imm16" , opcode=0xE2, jmp=true, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"pushRetAddr1","instrSub3"}, {"pushRetAddr2","instrSub4"}, {"jmpAbsUT"}, desc="I=imm16, *(S++++)=I-1", ccode={"loadimm161","loadimm162","pushretaddr1","pushretaddr2","jmpabsut"} }, + { mnem="jmp p" , opcode=0x64, {"jmpAbsP" }, desc="I=P" , ccode={"jmpabsp"} }, + { mnem="jmp q" , opcode=0x66, {"jmpAbsQ" }, desc="I=Q" , ccode={"jmpabsq"} }, + { mnem="jsr p" , opcode=0x65, {"jmpAbsP","saveRetAddr"}, desc="I=P, Q=I", ccode={"jmpabsp","saveretaddr"} }, + { mnem="jsr q" , opcode=0x67, {"jmpAbsQ","saveRetAddr"}, desc="I=Q, Q=I", ccode={"jmpabsq","saveretaddr"} }, + { mnem="jss p" , opcode=0xE4, {"pushRetAddr1","instrSub1"}, {"pushRetAddr2","instrSub2"}, {"jmpAbsP"}, desc="I=P, *(S++++)=I-1", ccode={"pushretaddr1","pushretaddr2","jmpabsp"} }, + { mnem="jss q" , opcode=0xE5, {"pushRetAddr1","instrSub1"}, {"pushRetAddr2","instrSub2"}, {"jmpAbsQ"}, desc="I=Q, *(S++++)=I-1", ccode={"pushretaddr1","pushretaddr2","jmpabsq"} }, + { mnem="rts" , opcode=0xE1, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"jmpAbsUT","adrInc"}, desc="I=*(----S)+1", ccode={"pop161","pop162","jmpabsutplus1"} }, + { mnem="jpr imm8" , opcode=0x31, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub1"}, {"jmpRelT"}, desc="I+=imm8", ccode={"loadimmedt","jmprelt"} }, + { mnem="jnz imm8" , opcode=0x30, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NZ" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Zero" , ccode={"loadimmedt","if( cpu.nz ) { jmprelt } else { lni }"} }, + { mnem="jpz imm8" , opcode=0x32, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" , ccode={"loadimmedt","if(!cpu.nz ) { jmprelt } else { lni }"} }, + { mnem="jlt imm8" , opcode=0x33, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" , ccode={"loadimmedt","if(!cpu.cf ) { jmprelt } else { lni }"} }, + { mnem="jge imm8" , opcode=0x34, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" , ccode={"loadimmedt","if( cpu.cf ) { jmprelt } else { lni }"} }, + { mnem="jgt imm8" , opcode=0x35, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero & Carry", ccode={"loadimmedt","if( cpu.nz && cpu.cf) { jmprelt } else { lni }"} }, + { mnem="jle imm8" , opcode=0x36, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero | !Carry", ccode={"loadimmedt","if(!cpu.nz && !cpu.cf) { jmprelt } else { lni }"} }, { category = "Stack", catlet="S" }, - { mnem="psh a" , opcode=0x40, {"pushReg","alurA","instrSub1"}, {"instrNext"}, desc="*(S++)=A" }, - { mnem="psh b" , opcode=0x44, {"pushReg","alurB","instrSub1"}, {"instrNext"}, desc="*(S++)=B" }, - { mnem="psh c" , opcode=0x45, {"pushReg","alurC","instrSub1"}, {"instrNext"}, desc="*(S++)=C" }, - { mnem="psh p" , opcode=0x41, {"pushReg","alurPH","instrSub1"}, {"pushReg","alurPL","instrSub2"}, {"instrNext"}, desc="*(S++++)=P" }, - { mnem="psh q" , opcode=0x46, {"pushReg","alurQH","instrSub1"}, {"pushReg","alurQL","instrSub2"}, {"instrNext"}, desc="*(S++++)=Q" }, - { mnem="pop a" , opcode=0x42, {"popReg","memSaveA","instrSub1"}, {"instrNext"}, desc="A=*(--S)" }, - { mnem="pop b" , opcode=0x47, {"popReg","memSaveB","instrSub1"}, {"instrNext"}, desc="B=*(--S)" }, - { mnem="pop c" , opcode=0x48, {"popReg","memSaveC","instrSub1"}, {"instrNext"}, desc="C=*(--S)" }, - { mnem="pop p" , opcode=0x43, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*(----S)" }, - { mnem="pop q" , opcode=0x49, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*(----S)" }, - { mnem="psh imm8" , opcode=0x3B, {"loadImmedT","instrSub1"}, {"pushReg","alurT","instrSub2"}, {"instrNext"}, desc="*(S++)=imm8" }, - { mnem="phw imm16" , opcode=0x3C, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"pushReg","alurU","instrSub3"}, {"pushReg","alurT","instrSub4"}, {"instrNext"}, desc="*(S++++)=imm16" }, -- 0x3D + { mnem="psh a" , opcode=0x40, {"pushReg","alurA","instrSub1"}, {"instrNext"}, desc="*(S++)=A", ccode={"pushbyte(cpu.a);","lni;"} }, + { mnem="psh b" , opcode=0x44, {"pushReg","alurB","instrSub1"}, {"instrNext"}, desc="*(S++)=B", ccode={"pushbyte(cpu.b);","lni;"} }, + { mnem="psh c" , opcode=0x45, {"pushReg","alurC","instrSub1"}, {"instrNext"}, desc="*(S++)=C", ccode={"pushbyte(cpu.c);","lni;"} }, + { mnem="psh f" , opcode=0xE9, {"pushReg","alurF","instrSub1"}, {"instrNext"}, desc="*(S++)=F", ccode={"int f = cpu.nz | (cpu.cf<<1); pushbyte(f);","lni;"} }, + { mnem="psh p" , opcode=0x41, {"pushReg","alurPH","instrSub1"}, {"pushReg","alurPL","instrSub2"}, {"instrNext"}, desc="*(S++++)=P", ccode={"push161(cpu.p);","push162(cpu.p);","lni;"} }, + { mnem="psh q" , opcode=0x46, {"pushReg","alurQH","instrSub1"}, {"pushReg","alurQL","instrSub2"}, {"instrNext"}, desc="*(S++++)=Q", ccode={"push161(cpu.q);","push162(cpu.q);","lni;"} }, + { mnem="pop a" , opcode=0x42, {"popReg","memSaveA","instrSub1"}, {"instrNext"}, desc="A=*(--S)", ccode={"cpu.a=popbyte;","lni;"} }, + { mnem="pop b" , opcode=0x47, {"popReg","memSaveB","instrSub1"}, {"instrNext"}, desc="B=*(--S)", ccode={"cpu.b=popbyte;","lni;"} }, + { mnem="pop c" , opcode=0x48, {"popReg","memSaveC","instrSub1"}, {"instrNext"}, desc="C=*(--S)", ccode={"cpu.c=popbyte;","lni;"} }, + { mnem="pop f" , opcode=0xEA, {"popReg","memSaveF","instrSub1"}, {"instrNext"}, desc="F=*(--S)", ccode={"int f=popbyte; cpu.nz = f&1; cpu.cf = (f>>1)&1;","lni;"} }, + { mnem="pop p" , opcode=0x43, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*(----S)", ccode={"pop161","pop162","cpu.p=wordut; lni;"} }, + { mnem="pop q" , opcode=0x49, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*(----S)", ccode={"pop161","pop162","cpu.q=wordut; lni;"} }, + { mnem="psh imm8" , opcode=0x3B, {"loadImmedT","instrSub1"}, {"pushReg","alurT","instrSub2"}, {"instrNext"}, desc="*(S++)=imm8", ccode={"loadimmedt;","pushbyte(cpu.t);","lni;"} }, + { mnem="phw imm16" , opcode=0x3C, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"pushReg","alurU","instrSub3"}, {"pushReg","alurT","instrSub4"}, {"instrNext"}, desc="*(S++++)=imm16", ccode={"loadimm161","loadimm162","pushbyte(cpu.u);","pushbyte(cpu.t);","lni;"} }, -- 0x3D { category = "8-bit Load/Store", catlet="B" }, - { mnem="lda imm8" , opcode=0x20, {"loadImmed", "memSaveA","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=imm8, update zero flag" }, - { mnem="ldb imm8" , opcode=0x26, {"loadImmed", "memSaveB","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=imm8, update zero flag" }, - { mnem="ldc imm8" , opcode=0x27, {"loadImmed", "memSaveC","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=imm8, update zero flag" }, - { mnem="lda *s+imm8", opcode=0x28, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveA","memSaveFlags","instrSub2"}, {"instrNext"}, desc="A=*s+imm8, update zero flag" }, - { mnem="ldb *s+imm8", opcode=0x29, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveB","memSaveFlags","instrSub2"}, {"instrNext"}, desc="B=*s+imm8, update zero flag" }, - { mnem="ldc *s+imm8", opcode=0x2A, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveC","memSaveFlags","instrSub2"}, {"instrNext"}, desc="C=*s+imm8, update zero flag" }, - { mnem="sta *s+imm8", opcode=0x96, {"loadImmedT","instrSub1"}, {"storeStackRel","alurA","instrSub2"}, {"instrNext"}, desc="*s+imm8=A" }, - { mnem="stb *s+imm8", opcode=0x97, {"loadImmedT","instrSub1"}, {"storeStackRel","alurB","instrSub2"}, {"instrNext"}, desc="*s+imm8=B" }, - { mnem="stc *s+imm8", opcode=0x98, {"loadImmedT","instrSub1"}, {"storeStackRel","alurC","instrSub2"}, {"instrNext"}, desc="*s+imm8=C" }, - { mnem="lda *imm16" , opcode=0x51, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveA","memSaveFlags","instrSub3"}, {"instrNext"}, desc="A=*imm16, update zero flag" }, - { mnem="ldb *imm16" , opcode=0x56, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveB","memSaveFlags","instrSub3"}, {"instrNext"}, desc="B=*imm16, update zero flag" }, - { mnem="ldc *imm16" , opcode=0x57, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveC","memSaveFlags","instrSub3"}, {"instrNext"}, desc="C=*imm16, update zero flag" }, - { mnem="sta *imm16" , opcode=0x50, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurA","instrSub3"}, {"instrNext"}, desc="*imm16=A" }, - { mnem="stb *imm16" , opcode=0x58, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurB","instrSub3"}, {"instrNext"}, desc="*imm16=B" }, - { mnem="stc *imm16" , opcode=0x59, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurC","instrSub3"}, {"instrNext"}, desc="*imm16=C" }, - { mnem="sta *p" , opcode=0x52, {"adrlP","storeReg","alurA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=A" }, - { mnem="stb *p" , opcode=0x5A, {"adrlP","storeReg","alurB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=B" }, - { mnem="stc *p" , opcode=0x5B, {"adrlP","storeReg","alurC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=C" }, - { mnem="sta *q" , opcode=0x54, {"adrlQ","storeReg","alurA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=A" }, - { mnem="stb *q" , opcode=0x5C, {"adrlQ","storeReg","alurB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=B" }, - { mnem="stc *q" , opcode=0x5D, {"adrlQ","storeReg","alurC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=C" }, - { mnem="lda *p" , opcode=0x53, {"adrlP","loadReg","memSaveA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*P, update zero flag" }, - { mnem="ldb *p" , opcode=0x5E, {"adrlP","loadReg","memSaveB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*P, update zero flag" }, - { mnem="ldc *p" , opcode=0x5F, {"adrlP","loadReg","memSaveC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*P, update zero flag" }, - { mnem="lda *q" , opcode=0x55, {"adrlQ","loadReg","memSaveA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*Q, update zero flag" }, - { mnem="ldb *q" , opcode=0x61, {"adrlQ","loadReg","memSaveB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*Q, update zero flag" }, - { mnem="ldc *q" , opcode=0x62, {"adrlQ","loadReg","memSaveC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*Q, update zero flag" }, - { mnem="sta *p++" , opcode=0xC0, {"adrlP","storeReg","alurA", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=A" }, - { mnem="stb *p++" , opcode=0xC1, {"adrlP","storeReg","alurB", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=B" }, - { mnem="stc *p++" , opcode=0xC2, {"adrlP","storeReg","alurC", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=C" }, - { mnem="sta *q++" , opcode=0xC3, {"adrlQ","storeReg","alurA", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=A" }, - { mnem="stb *q++" , opcode=0xC4, {"adrlQ","storeReg","alurB", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=B" }, - { mnem="stc *q++" , opcode=0xC5, {"adrlQ","storeReg","alurC", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=C" }, - { mnem="lda *p++" , opcode=0xC6, {"adrlP","loadReg","memSaveA","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*P++, update zero flag" }, - { mnem="ldb *p++" , opcode=0xC7, {"adrlP","loadReg","memSaveB","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*P++, update zero flag" }, - { mnem="ldc *p++" , opcode=0xC8, {"adrlP","loadReg","memSaveC","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*P++, update zero flag" }, - { mnem="lda *q++" , opcode=0xC9, {"adrlQ","loadReg","memSaveA","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*Q++, update zero flag" }, - { mnem="ldb *q++" , opcode=0xCA, {"adrlQ","loadReg","memSaveB","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*Q++, update zero flag" }, - { mnem="ldc *q++" , opcode=0xCB, {"adrlQ","loadReg","memSaveC","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*Q++, update zero flag" }, + { mnem="lda imm8" , opcode=0x20, {"loadImmed", "memSaveA","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=imm8, update zero flag", ccode={"cpu.a=loadimmed; setzf(cpu.a);","lni;"} }, + { mnem="ldb imm8" , opcode=0x26, {"loadImmed", "memSaveB","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=imm8, update zero flag", ccode={"cpu.b=loadimmed; setzf(cpu.b);","lni;"} }, + { mnem="ldc imm8" , opcode=0x27, {"loadImmed", "memSaveC","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=imm8, update zero flag", ccode={"cpu.c=loadimmed; setzf(cpu.c);","lni;"} }, + { mnem="lda *s+imm8", opcode=0x28, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveA","memSaveFlags","instrSub2"}, {"instrNext"}, desc="A=*s+imm8, update zero flag", ccode={"loadimmedt;","cpu.a=loadstackrel; setzf(cpu.a);","lni;"} }, + { mnem="ldb *s+imm8", opcode=0x29, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveB","memSaveFlags","instrSub2"}, {"instrNext"}, desc="B=*s+imm8, update zero flag", ccode={"loadimmedt;","cpu.b=loadstackrel; setzf(cpu.b);","lni;"} }, + { mnem="ldc *s+imm8", opcode=0x2A, {"loadImmedT","instrSub1"}, {"loadStackRel","memSaveC","memSaveFlags","instrSub2"}, {"instrNext"}, desc="C=*s+imm8, update zero flag", ccode={"loadimmedt;","cpu.c=loadstackrel; setzf(cpu.c);","lni;"} }, + { mnem="sta *s+imm8", opcode=0x96, {"loadImmedT","instrSub1"}, {"storeStackRel","alurA","instrSub2"}, {"instrNext"}, desc="*s+imm8=A", ccode={"loadimmedt;","storestackrel(cpu.a);","lni;"} }, + { mnem="stb *s+imm8", opcode=0x97, {"loadImmedT","instrSub1"}, {"storeStackRel","alurB","instrSub2"}, {"instrNext"}, desc="*s+imm8=B", ccode={"loadimmedt;","storestackrel(cpu.a);","lni;"} }, + { mnem="stc *s+imm8", opcode=0x98, {"loadImmedT","instrSub1"}, {"storeStackRel","alurC","instrSub2"}, {"instrNext"}, desc="*s+imm8=C", ccode={"loadimmedt;","storestackrel(cpu.a);","lni;"} }, + { mnem="lda *imm16" , opcode=0x51, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveA","memSaveFlags","instrSub3"}, {"instrNext"}, desc="A=*imm16, update zero flag", ccode={"loadimm161","loadimm162","cpu.a=loadut; setzf(cpu.a);","lni;"} }, + { mnem="ldb *imm16" , opcode=0x56, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveB","memSaveFlags","instrSub3"}, {"instrNext"}, desc="B=*imm16, update zero flag", ccode={"loadimm161","loadimm162","cpu.b=loadut; setzf(cpu.b);","lni;"} }, + { mnem="ldc *imm16" , opcode=0x57, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","loadReg","memSaveC","memSaveFlags","instrSub3"}, {"instrNext"}, desc="C=*imm16, update zero flag", ccode={"loadimm161","loadimm162","cpu.c=loadut; setzf(cpu.c);","lni;"} }, + { mnem="sta *imm16" , opcode=0x50, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurA","instrSub3"}, {"instrNext"}, desc="*imm16=A", ccode={"loadimm161","loadimm162","storeut(cpu.a);","lni;"} }, + { mnem="stb *imm16" , opcode=0x58, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurB","instrSub3"}, {"instrNext"}, desc="*imm16=B", ccode={"loadimm161","loadimm162","storeut(cpu.b);","lni;"} }, + { mnem="stc *imm16" , opcode=0x59, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2",}, {"adrrUT","storeReg","alurC","instrSub3"}, {"instrNext"}, desc="*imm16=C", ccode={"loadimm161","loadimm162","storeut(cpu.c);","lni;"} }, + { mnem="sta *p" , opcode=0x52, {"adrlP","storeReg","alurA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=A", ccode={"storep(cpu.a);","lni;"} }, + { mnem="stb *p" , opcode=0x5A, {"adrlP","storeReg","alurB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=B", ccode={"storep(cpu.b);","lni;"} }, + { mnem="stc *p" , opcode=0x5B, {"adrlP","storeReg","alurC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P=C", ccode={"storep(cpu.c);","lni;"} }, + { mnem="sta *q" , opcode=0x54, {"adrlQ","storeReg","alurA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=A", ccode={"storeq(cpu.a);","lni;"} }, + { mnem="stb *q" , opcode=0x5C, {"adrlQ","storeReg","alurB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=B", ccode={"storeq(cpu.b);","lni;"} }, + { mnem="stc *q" , opcode=0x5D, {"adrlQ","storeReg","alurC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q=C", ccode={"storeq(cpu.c);","lni;"} }, + { mnem="lda *p" , opcode=0x53, {"adrlP","loadReg","memSaveA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*P, update zero flag", ccode={"cpu.a=loadp; setzf(cpu.a);","lni;"} }, + { mnem="ldb *p" , opcode=0x5E, {"adrlP","loadReg","memSaveB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*P, update zero flag", ccode={"cpu.b=loadp; setzf(cpu.b);","lni;"} }, + { mnem="ldc *p" , opcode=0x5F, {"adrlP","loadReg","memSaveC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*P, update zero flag", ccode={"cpu.c=loadp; setzf(cpu.c);","lni;"} }, + { mnem="lda *q" , opcode=0x55, {"adrlQ","loadReg","memSaveA", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*Q, update zero flag", ccode={"cpu.a=loadq; setzf(cpu.a);","lni;"} }, + { mnem="ldb *q" , opcode=0x61, {"adrlQ","loadReg","memSaveB", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*Q, update zero flag", ccode={"cpu.b=loadq; setzf(cpu.b);","lni;"} }, + { mnem="ldc *q" , opcode=0x62, {"adrlQ","loadReg","memSaveC", "memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*Q, update zero flag", ccode={"cpu.c=loadq; setzf(cpu.c);","lni;"} }, + { mnem="sta *p++" , opcode=0xC0, {"adrlP","storeReg","alurA", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=A", ccode={"storepinc(cpu.a);","lni;"} }, + { mnem="stb *p++" , opcode=0xC1, {"adrlP","storeReg","alurB", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=B", ccode={"storepinc(cpu.b);","lni;"} }, + { mnem="stc *p++" , opcode=0xC2, {"adrlP","storeReg","alurC", "incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*P++=C", ccode={"storepinc(cpu.c);","lni;"} }, + { mnem="sta *q++" , opcode=0xC3, {"adrlQ","storeReg","alurA", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=A", ccode={"storeqinc(cpu.a);","lni;"} }, + { mnem="stb *q++" , opcode=0xC4, {"adrlQ","storeReg","alurB", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=B", ccode={"storeqinc(cpu.b);","lni;"} }, + { mnem="stc *q++" , opcode=0xC5, {"adrlQ","storeReg","alurC", "incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="*Q++=C", ccode={"storeqinc(cpu.c);","lni;"} }, + { mnem="lda *p++" , opcode=0xC6, {"adrlP","loadReg","memSaveA","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*P++, update zero flag", ccode={"cpu.a=loadpinc; setzf(cpu.a);","lni;"} }, + { mnem="ldb *p++" , opcode=0xC7, {"adrlP","loadReg","memSaveB","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*P++, update zero flag", ccode={"cpu.b=loadpinc; setzf(cpu.b);","lni;"} }, + { mnem="ldc *p++" , opcode=0xC8, {"adrlP","loadReg","memSaveC","incP","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*P++, update zero flag", ccode={"cpu.c=loadpinc; setzf(cpu.c);","lni;"} }, + { mnem="lda *q++" , opcode=0xC9, {"adrlQ","loadReg","memSaveA","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="A=*Q++, update zero flag", ccode={"cpu.a=loadqinc; setzf(cpu.a);","lni;"} }, + { mnem="ldb *q++" , opcode=0xCA, {"adrlQ","loadReg","memSaveB","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="B=*Q++, update zero flag", ccode={"cpu.b=loadqinc; setzf(cpu.b);","lni;"} }, + { mnem="ldc *q++" , opcode=0xCB, {"adrlQ","loadReg","memSaveC","incQ","memSaveFlags","instrSub1"}, {"instrNext"}, desc="C=*Q++, update zero flag", ccode={"cpu.c=loadqinc; setzf(cpu.c);","lni;"} }, { category = "16-bit Load/Store", catlet="W" }, - { mnem="ldp imm16" , opcode=0x21, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=imm16" }, - { mnem="ldq imm16" , opcode=0x23, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=imm16" }, - { mnem="lds imm16" , opcode=0x25, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveS","instrNext"}, desc="S=imm16" }, - { mnem="ldv imm16" , opcode=0x22, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveV","instrNext"}, desc="V=imm16" }, - { mnem="ldp *s+imm8", opcode=0x7A, {"loadImmedT","instrSub1"}, {"loadStackRel161","instrSub2"}, {"loadStackRel162","instrSub3"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*S+imm8" }, - { mnem="ldq *s+imm8", opcode=0x7B, {"loadImmedT","instrSub1"}, {"loadStackRel161","instrSub2"}, {"loadStackRel162","instrSub3"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*S+imm8" }, - { mnem="stp *s+imm8", opcode=0x7E, {"loadImmedT","instrSub1"}, {"storeStackRel161","alurPH","instrSub2"}, {"storeStackRel162","alurPL","instrSub3"}, {"instrNext"}, desc="*S+imm8=P" }, - { mnem="stq *s+imm8", opcode=0x7F, {"loadImmedT","instrSub1"}, {"storeStackRel161","alurQH","instrSub2"}, {"storeStackRel162","alurQL","instrSub3"}, {"instrNext"}, desc="*S+imm8=Q" }, - { mnem="ldp *imm16" , opcode=0x68, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"loadUTU","adwIncUT","adwSaveP","instrSub3"}, {"adrlP","loadRegT","instrSub4"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*imm16" }, -- 0x69 - { mnem="ldq *imm16" , opcode=0x6A, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"loadUTU","adwIncUT","adwSaveQ","instrSub3"}, {"adrlQ","loadRegT","instrSub4"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*imm16" }, -- 0x6B - { mnem="stp *imm16" , opcode=0x6C, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"storeUT","alurPH","instrSub3"}, {"storeUT","adrInc","alurPL","instrSub4"}, {"instrNext"}, desc="*imm16=P" }, -- 0x6D - { mnem="stq *imm16" , opcode=0x6E, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"storeUT","alurQH","instrSub3"}, {"storeUT","adrInc","alurQL","instrSub4"}, {"instrNext"}, desc="*imm16=Q" }, -- 0x6F - { mnem="ldp *p" , opcode=0x92, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*P" }, - { mnem="ldq *p" , opcode=0x93, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*P" }, - { mnem="ldp *q" , opcode=0x94, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*Q" }, - { mnem="ldq *q" , opcode=0x95, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*Q" }, - { mnem="stp *q" , opcode=0x7C, {"adrlQ","store161","alurPH","instrSub1"}, {"adrlQ","store162","alurPL","instrSub2"}, {"instrNext"}, desc="*Q=P" }, - { mnem="stq *p" , opcode=0x7D, {"adrlP","store161","alurQH","instrSub1"}, {"adrlP","store162","alurQL","instrSub2"}, {"instrNext"}, desc="*P=Q" }, - { mnem="ldq *p++" , opcode=0xCC, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2","incP2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*P++++" }, - { mnem="ldp *q++" , opcode=0xCD, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2","incQ2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*Q++++" }, - { mnem="stp *q++" , opcode=0xCE, {"adrlQ","store161","alurPH","instrSub1"}, {"adrlQ","store162","alurPL","instrSub2","incQ2"}, {"instrNext"}, desc="*Q++++=P" }, - { mnem="stq *p++" , opcode=0xCF, {"adrlP","store161","alurQH","instrSub1"}, {"adrlP","store162","alurQL","instrSub2","incP2"}, {"instrNext"}, desc="*P++++=Q" }, + { mnem="ldp imm16" , opcode=0x21, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=imm16", ccode={"loadimm161","loadimm162","cpu.p=wordut; lni;"} }, + { mnem="ldq imm16" , opcode=0x23, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=imm16", ccode={"loadimm161","loadimm162","cpu.q=wordut; lni;"} }, + { mnem="lds imm16" , opcode=0x25, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveS","instrNext"}, desc="S=imm16", ccode={"loadimm161","loadimm162","cpu.s=wordut; lni;"} }, + { mnem="ldv imm16" , opcode=0x22, {"loadImm161","instrSub1"}, {"loadImm162","instrSub2"}, {"adwrUT","adwSaveV","instrNext"}, desc="V=imm16", ccode={"loadimm161","loadimm162","cpu.v=wordut; lni;"} }, + { mnem="ldp *s+imm8", opcode=0x7A, {"loadImmedT","instrSub1"}, {"loadStackRel161","instrSub2"}, {"loadStackRel162","instrSub3"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*S+imm8", ccode={"loadimmedt","loadstackrel161","loadstackrel162","cpu.p=wordut; lni;"} }, + { mnem="ldq *s+imm8", opcode=0x7B, {"loadImmedT","instrSub1"}, {"loadStackRel161","instrSub2"}, {"loadStackRel162","instrSub3"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*S+imm8", ccode={"loadimmedt","loadstackrel161","loadstackrel162","cpu.p=wordut; lni;"} }, + { mnem="stp *s+imm8", opcode=0x7E, {"loadImmedT","instrSub1"}, {"storeStackRel161","alurPH","instrSub2"}, {"storeStackRel162","alurPL","instrSub3"}, {"instrNext"}, desc="*S+imm8=P", ccode={"loadimmedt","storestackrel161(cpu.p);","storestackrel162(cpu.p);","lni;"} }, + { mnem="stq *s+imm8", opcode=0x7F, {"loadImmedT","instrSub1"}, {"storeStackRel161","alurQH","instrSub2"}, {"storeStackRel162","alurQL","instrSub3"}, {"instrNext"}, desc="*S+imm8=Q", ccode={"loadimmedt","storestackrel161(cpu.q);","storestackrel162(cpu.q);","lni;"} }, + { 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="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;"} }, + { mnem="ldq *q" , opcode=0x95, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*Q", ccode={"cpu.u=loadq;","cpu.t=loadqp1;","cpu.q=wordut; lni;"} }, + { mnem="stp *q" , opcode=0x7C, {"adrlQ","store161","alurPH","instrSub1"}, {"adrlQ","store162","alurPL","instrSub2"}, {"instrNext"}, desc="*Q=P", ccode={"storeq(hibyte(cpu.p));","storeqp1(lobyte(cpu.p));","lni;"} }, + { mnem="stq *p" , opcode=0x7D, {"adrlP","store161","alurQH","instrSub1"}, {"adrlP","store162","alurQL","instrSub2"}, {"instrNext"}, desc="*P=Q", ccode={"storep(hibyte(cpu.q));","storepp1(lobyte(cpu.q));","lni;"} }, + { mnem="ldq *p++" , opcode=0xCC, {"adrlP","load161","instrSub1"}, {"adrlP","load162","instrSub2","incP2"}, {"adwrUT","adwSaveQ","instrNext"}, desc="Q=*P++++", ccode={"cpu.u=loadpinc;","cpu.t=loadpinc;","cpu.q=wordut; lni;"} }, + { mnem="ldp *q++" , opcode=0xCD, {"adrlQ","load161","instrSub1"}, {"adrlQ","load162","instrSub2","incQ2"}, {"adwrUT","adwSaveP","instrNext"}, desc="P=*Q++++", ccode={"cpu.u=loadqinc;","cpu.t=loadqinc;","cpu.p=wordut; lni;"} }, + { mnem="stp *q++" , opcode=0xCE, {"adrlQ","store161","alurPH","instrSub1"}, {"adrlQ","store162","alurPL","instrSub2","incQ2"}, {"instrNext"}, desc="*Q++++=P", ccode={"storeqinc(hibyte(cpu.p));","storeqinc(lobyte(cpu.p));","lni;"} }, + { mnem="stq *p++" , opcode=0xCF, {"adrlP","store161","alurQH","instrSub1"}, {"adrlP","store162","alurQL","instrSub2","incP2"}, {"instrNext"}, desc="*P++++=Q", ccode={"storepinc(hibyte(cpu.q));","storepinc(lobyte(cpu.q));","lni;"} }, { category = "Moves", catlet="M" }, - { mnem="lda b" , opcode=0x80, {"alurB" ,"aluOpMov","aluSaveA","instrNext"}, desc="A=B" }, - { mnem="lda c" , opcode=0x81, {"alurC" ,"aluOpMov","aluSaveA","instrNext"}, desc="A=C" }, - { mnem="ldb a" , opcode=0x82, {"alurA" ,"aluOpMov","aluSaveB","instrNext"}, desc="B=A" }, - { mnem="ldb c" , opcode=0x83, {"alurC" ,"aluOpMov","aluSaveB","instrNext"}, desc="B=C" }, - { mnem="ldc a" , opcode=0x84, {"alurA" ,"aluOpMov","aluSaveC","instrNext"}, desc="C=A" }, - { mnem="ldc b" , opcode=0x85, {"alurB" ,"aluOpMov","aluSaveC","instrNext"}, desc="C=B" }, - { mnem="lda pl" , opcode=0x86, {"alurPL","aluOpMov","aluSaveA","instrNext"}, desc="A=P&FF" }, - { mnem="lda ph" , opcode=0x87, {"alurPH","aluOpMov","aluSaveA","instrNext"}, desc="A=P>>8" }, - { mnem="lda ql" , opcode=0x88, {"alurQL","aluOpMov","aluSaveA","instrNext"}, desc="A=Q&FF" }, - { mnem="lda qh" , opcode=0x89, {"alurQH","aluOpMov","aluSaveA","instrNext"}, desc="A=Q>>8" }, - { mnem="ldb pl" , opcode=0x37, {"alurPL","aluOpMov","aluSaveB","instrNext"}, desc="B=P&FF" }, - { mnem="ldc ph" , opcode=0x38, {"alurPH","aluOpMov","aluSaveC","instrNext"}, desc="C=P>>8" }, - { mnem="ldb ql" , opcode=0x39, {"alurQL","aluOpMov","aluSaveB","instrNext"}, desc="B=Q&FF" }, - { mnem="ldc qh" , opcode=0x3A, {"alurQH","aluOpMov","aluSaveC","instrNext"}, desc="C=Q>>8" }, - { mnem="ldp q" , opcode=0x8A, {"adwlQ" , "adwSaveP","instrNext"}, desc="P=Q" }, - { mnem="ldp s" , opcode=0x8B, {"adwlS" , "adwSaveP","instrNext"}, desc="P=S" }, - { mnem="ldp v" , opcode=0x8C, {"adwlV" , "adwSaveP","instrNext"}, desc="P=V" }, - { mnem="ldp i" , opcode=0x8D, {"adwlI" , "adwSaveP","instrNext"}, desc="P=I" }, - { mnem="ldp cb" , opcode=0x91, {"adwrCB", "adwSaveP","instrNext"}, desc="P=(C<<8)+B" }, - { mnem="ldq cb" , opcode=0xE0, {"adwrCB", "adwSaveQ","instrNext"}, desc="Q=(C<<8)+B" }, - { mnem="ldq p" , opcode=0x8E, {"adwlP" , "adwSaveQ","instrNext"}, desc="Q=P" }, - { mnem="lds p" , opcode=0x8F, {"adwlP" , "adwSaveS","instrNext"}, desc="S=P" }, - { mnem="ldv p" , opcode=0x90, {"adwlP" , "adwSaveV","instrNext"}, desc="V=P" }, + { mnem="lda b" , opcode=0x80, {"alurB" ,"aluOpMov","aluSaveA","instrNext"}, desc="A=B", ccode={"cpu.a=cpu.b; lni;"} }, + { mnem="lda c" , opcode=0x81, {"alurC" ,"aluOpMov","aluSaveA","instrNext"}, desc="A=C", ccode={"cpu.a=cpu.c; lni;"} }, + { mnem="ldb a" , opcode=0x82, {"alurA" ,"aluOpMov","aluSaveB","instrNext"}, desc="B=A", ccode={"cpu.b=cpu.a; lni;"} }, + { mnem="ldb c" , opcode=0x83, {"alurC" ,"aluOpMov","aluSaveB","instrNext"}, desc="B=C", ccode={"cpu.b=cpu.c; lni;"} }, + { mnem="ldc a" , opcode=0x84, {"alurA" ,"aluOpMov","aluSaveC","instrNext"}, desc="C=A", ccode={"cpu.c=cpu.a; lni;"} }, + { mnem="ldc b" , opcode=0x85, {"alurB" ,"aluOpMov","aluSaveC","instrNext"}, desc="C=B", ccode={"cpu.c=cpu.b; lni;"} }, + { mnem="lda pl" , opcode=0x86, {"alurPL","aluOpMov","aluSaveA","instrNext"}, desc="A=P&FF", ccode={"cpu.a=lobyte(cpu.p); lni;"} }, + { mnem="lda ph" , opcode=0x87, {"alurPH","aluOpMov","aluSaveA","instrNext"}, desc="A=P>>8", ccode={"cpu.a=hibyte(cpu.p); lni;"} }, + { mnem="lda ql" , opcode=0x88, {"alurQL","aluOpMov","aluSaveA","instrNext"}, desc="A=Q&FF", ccode={"cpu.a=lobyte(cpu.q); lni;"} }, + { mnem="lda qh" , opcode=0x89, {"alurQH","aluOpMov","aluSaveA","instrNext"}, desc="A=Q>>8", ccode={"cpu.a=hibyte(cpu.q); lni;"} }, + { mnem="ldb pl" , opcode=0x37, {"alurPL","aluOpMov","aluSaveB","instrNext"}, desc="B=P&FF", ccode={"cpu.b=lobyte(cpu.p); lni;"} }, + { mnem="ldc ph" , opcode=0x38, {"alurPH","aluOpMov","aluSaveC","instrNext"}, desc="C=P>>8", ccode={"cpu.c=hibyte(cpu.p); lni;"} }, + { mnem="ldb ql" , opcode=0x39, {"alurQL","aluOpMov","aluSaveB","instrNext"}, desc="B=Q&FF", ccode={"cpu.b=lobyte(cpu.q); lni;"} }, + { mnem="ldc qh" , opcode=0x3A, {"alurQH","aluOpMov","aluSaveC","instrNext"}, desc="C=Q>>8", ccode={"cpu.c=hibyte(cpu.q); lni;"} }, + { mnem="ldp q" , opcode=0x8A, {"adwlQ" , "adwSaveP","instrNext"}, desc="P=Q", ccode={"cpu.p=cpu.q; lni;"} }, + { mnem="ldp s" , opcode=0x8B, {"adwlS" , "adwSaveP","instrNext"}, desc="P=S", ccode={"cpu.p=cpu.s; lni;"} }, + { mnem="ldp v" , opcode=0x8C, {"adwlV" , "adwSaveP","instrNext"}, desc="P=V", ccode={"cpu.p=cpu.v; lni;"} }, + { mnem="ldp i" , opcode=0x8D, {"adwlI" , "adwSaveP","instrNext"}, desc="P=I", ccode={"cpu.p=cpu.i; lni;"} }, + { mnem="ldp cb" , opcode=0x91, {"adwrCB", "adwSaveP","instrNext"}, desc="P=(C<<8)+B", ccode={"cpu.p=wordcb; lni;"} }, + { mnem="ldq cb" , opcode=0xE0, {"adwrCB", "adwSaveQ","instrNext"}, desc="Q=(C<<8)+B", ccode={"cpu.q=wordcb; lni;"} }, + { mnem="ldq p" , opcode=0x8E, {"adwlP" , "adwSaveQ","instrNext"}, desc="Q=P", ccode={"cpu.q=cpu.p; lni;"} }, + { mnem="lds p" , opcode=0x8F, {"adwlP" , "adwSaveS","instrNext"}, desc="S=P", ccode={"cpu.s=cpu.p; lni;"} }, + { mnem="ldv p" , opcode=0x90, {"adwlP" , "adwSaveV","instrNext"}, desc="V=P", ccode={"cpu.v=cpu.p; lni;"} }, }, aliases = {