Added ANA, XRA, ORA, ADDNC, GTA, SUBNB, LTA, ADD, ADC, SUB, NEA, SBB, EQA, ONA, OFFA instructions.

This commit is contained in:
mooz 2018-11-15 21:46:34 +01:00
parent db038e29e5
commit a2e44ae24a
3 changed files with 281 additions and 16 deletions

View File

@ -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,

View File

@ -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')

View File

@ -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