From a2e44ae24af5e7e404fd729a2c53e9fb062fd7e2 Mon Sep 17 00:00:00 2001 From: mooz Date: Thu, 15 Nov 2018 21:46:34 +0100 Subject: [PATCH] Added ANA, XRA, ORA, ADDNC, GTA, SUBNB, LTA, ADD, ADC, SUB, NEA, SBB, EQA, ONA, OFFA instructions. --- l7801.lua | 34 ++++--- samples/scv_test.l65 | 226 ++++++++++++++++++++++++++++++++++++++++++- uPD7801.lua | 37 ++++++- 3 files changed, 281 insertions(+), 16 deletions(-) diff --git a/l7801.lua b/l7801.lua index 2035d75..d6585ad 100644 --- a/l7801.lua +++ b/l7801.lua @@ -49,6 +49,8 @@ local Keywords_7801 = { 'skit','sknit','skz','sknc','sknz','sll','slr','softi', 'staw','stax','staxd','staxi','stc','stm','sui','suinb', 'table','xri', + 'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa', + 'ona','offa' } local Registers_7801 = { a=8,b=8,c=8,d=8,e=8,h=8,l=8,v=8, @@ -97,7 +99,7 @@ local opcode_reg = lookupify{ 'dcr','dcx','inr','inx','pop','push','rll','rlr','sll','slr', } local opcode_reg_reg = lookupify{ - 'mov' + 'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa','ona','offa' } local opcode_regb = lookupify{ 'aci','adi','adinc','ani','eqi','gti','lti','mvi','nei','offi','oni','ori','sbi','sui','suinb','xri', @@ -135,12 +137,14 @@ local opcode_reg_list = { local opcode_reg_reg_list = { a = { - b = lookupify{'mov'}, - c = lookupify{'mov'}, - d = lookupify{'mov'}, - e = lookupify{'mov'}, - h = lookupify{'mov'}, - l = lookupify{'mov'}, + a = lookupify{'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa','ona','offa'}, + b = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + c = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + d = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + e = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + h = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + l = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, + v = lookupify{'ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'}, pa = lookupify{'mov'}, pb = lookupify{'mov'}, pc = lookupify{'mov'}, @@ -151,12 +155,13 @@ local opcode_reg_reg_list = { tm1 = lookupify{'mov'}, s = lookupify{'mov'}, }, - b = { a = lookupify{'mov'} }, - c = { a = lookupify{'mov'} }, - d = { a = lookupify{'mov'} }, - e = { a = lookupify{'mov'} }, - h = { a = lookupify{'mov'} }, - l = { a = lookupify{'mov'} }, + v = { a = lookupify{'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + b = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + c = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + d = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + e = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + h = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, + l = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} }, pa = { a = lookupify{'mov'} }, pb = { a = lookupify{'mov'} }, pc = { a = lookupify{'mov'} }, @@ -166,8 +171,9 @@ local opcode_reg_reg_list = { tm0 = { a = lookupify{'mov'} }, tm1 = { a = lookupify{'mov'} }, s = { a = lookupify{'mov'} }, - v = {}, } +local op60names = {} +local register_names = {'v','a','b','c','d','e','h','l'} local addressing_map = { imp = opcode_implied, diff --git a/samples/scv_test.l65 b/samples/scv_test.l65 index 561dd05..700135f 100644 --- a/samples/scv_test.l65 +++ b/samples/scv_test.l65 @@ -186,5 +186,229 @@ section{"rom", org=0x8000} mov tm0,a mov tm1,a mov s,a - + ana v,a + ana a,a + ana b,a + ana c,a + ana d,a + ana e,a + ana h,a + ana l,a + xra v,a + xra a,a + xra b,a + xra c,a + xra d,a + xra e,a + xra h,a + xra l,a + ora v,a + ora a,a + ora b,a + ora c,a + ora d,a + ora e,a + ora h,a + ora l,a + addnc v,a + addnc a,a + addnc b,a + addnc c,a + addnc d,a + addnc e,a + addnc h,a + addnc l,a + gta v,a + gta a,a + gta b,a + gta c,a + gta d,a + gta e,a + gta h,a + gta l,a + subnb v,a + subnb a,a + subnb b,a + subnb c,a + subnb d,a + subnb e,a + subnb h,a + subnb l,a + lta v,a + lta a,a + lta b,a + lta c,a + lta d,a + lta e,a + lta h,a + lta l,a + add v,a + add a,a + add b,a + add c,a + add d,a + add e,a + add h,a + add l,a + adc v,a + adc a,a + adc b,a + adc c,a + adc d,a + adc e,a + adc h,a + adc l,a + sub v,a + sub a,a + sub b,a + sub c,a + sub d,a + sub e,a + sub h,a + sub l,a + nea v,a + nea a,a + nea b,a + nea c,a + nea d,a + nea e,a + nea h,a + nea l,a + sbb v,a + sbb a,a + sbb b,a + sbb c,a + sbb d,a + sbb e,a + sbb h,a + sbb l,a + eqa v,a + eqa a,a + eqa b,a + eqa c,a + eqa d,a + eqa e,a + eqa h,a + eqa l,a + ana a,v + ana a,a + ana a,b + ana a,c + ana a,d + ana a,e + ana a,h + ana a,l + xra a,v + xra a,a + xra a,b + xra a,c + xra a,d + xra a,e + xra a,h + xra a,l + ora a,v + ora a,a + ora a,b + ora a,c + ora a,d + ora a,e + ora a,h + ora a,l + addnc a,v + addnc a,a + addnc a,b + addnc a,c + addnc a,d + addnc a,e + addnc a,h + addnc a,l + gta a,v + gta a,a + gta a,b + gta a,c + gta a,d + gta a,e + gta a,h + gta a,l + subnb a,v + subnb a,a + subnb a,b + subnb a,c + subnb a,d + subnb a,e + subnb a,h + subnb a,l + lta a,v + lta a,a + lta a,b + lta a,c + lta a,d + lta a,e + lta a,h + lta a,l + add a,v + add a,a + add a,b + add a,c + add a,d + add a,e + add a,h + add a,l + ona a,v + ona a,a + ona a,b + ona a,c + ona a,d + ona a,e + ona a,h + ona a,l + adc a,v + adc a,a + adc a,b + adc a,c + adc a,d + adc a,e + adc a,h + adc a,l + offa a,v + offa a,a + offa a,b + offa a,c + offa a,d + offa a,e + offa a,h + offa a,l + sub a,v + sub a,a + sub a,b + sub a,c + sub a,d + sub a,e + sub a,h + sub a,l + nea a,v + nea a,a + nea a,b + nea a,c + nea a,d + nea a,e + nea a,h + nea a,l + sbb a,v + sbb a,a + sbb a,b + sbb a,c + sbb a,d + sbb a,e + sbb a,h + sbb a,l + eqa a,v + eqa a,a + eqa a,b + eqa a,c + eqa a,d + eqa a,e + eqa a,h + eqa a,l + writebin(filename .. '.bin') \ No newline at end of file diff --git a/uPD7801.lua b/uPD7801.lua index 8d33894..7a6cf69 100644 --- a/uPD7801.lua +++ b/uPD7801.lua @@ -447,13 +447,48 @@ for k,v in pairs(op4dr8a) do end end +local op60names = {'ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa'} +local register_names = {'v','a','b','c','d','e','h','l'} +local k = 0x08 +for i,o in ipairs(op60names) do + if o == '' then + k = k + #register_names + else + for j,r in ipairs(register_names) do + local l = k + M[o .. r .. 'a'] = function() + table.insert(M.section_current.instructions, { size=2, cycles=8, bin={ 0x60, l } }) + end + k = k + 1 + end + end +end + +k = 0x88 +op60names[9] = 'ona' +op60names[11] = 'offa' +for i,o in ipairs(op60names) do + if o == '' then + k = k + #register_names + else + for j,r in ipairs(register_names) do + local l = k + local name = o .. 'a' .. r + if not M[name] then + M[name] = function() + table.insert(M.section_current.instructions, { size=2, cycles=8, bin={ 0x60, l } }) + end + end + k = k + 1 + end + end +end return M --[[ [todo] 16 bits instructions: - 0x60xx 0x64xx 0x70xx 0x74xx