mirror of https://github.com/g012/l65.git
Added ANA, XRA, ORA, ADDNC, GTA, SUBNB, LTA, ADD, ADC, SUB, NEA, SBB, EQA, ONA, OFFA instructions.
This commit is contained in:
parent
db038e29e5
commit
a2e44ae24a
34
l7801.lua
34
l7801.lua
|
@ -49,6 +49,8 @@ local Keywords_7801 = {
|
||||||
'skit','sknit','skz','sknc','sknz','sll','slr','softi',
|
'skit','sknit','skz','sknc','sknz','sll','slr','softi',
|
||||||
'staw','stax','staxd','staxi','stc','stm','sui','suinb',
|
'staw','stax','staxd','staxi','stc','stm','sui','suinb',
|
||||||
'table','xri',
|
'table','xri',
|
||||||
|
'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa',
|
||||||
|
'ona','offa'
|
||||||
}
|
}
|
||||||
local Registers_7801 = {
|
local Registers_7801 = {
|
||||||
a=8,b=8,c=8,d=8,e=8,h=8,l=8,v=8,
|
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',
|
'dcr','dcx','inr','inx','pop','push','rll','rlr','sll','slr',
|
||||||
}
|
}
|
||||||
local opcode_reg_reg = lookupify{
|
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{
|
local opcode_regb = lookupify{
|
||||||
'aci','adi','adinc','ani','eqi','gti','lti','mvi','nei','offi','oni','ori','sbi','sui','suinb','xri',
|
'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 = {
|
local opcode_reg_reg_list = {
|
||||||
a = {
|
a = {
|
||||||
b = lookupify{'mov'},
|
a = lookupify{'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa','ona','offa'},
|
||||||
c = lookupify{'mov'},
|
b = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'},
|
||||||
d = lookupify{'mov'},
|
c = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'},
|
||||||
e = lookupify{'mov'},
|
d = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'},
|
||||||
h = lookupify{'mov'},
|
e = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','','adc','','sub','nea','sbb','eqa','ona','offa'},
|
||||||
l = lookupify{'mov'},
|
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'},
|
pa = lookupify{'mov'},
|
||||||
pb = lookupify{'mov'},
|
pb = lookupify{'mov'},
|
||||||
pc = lookupify{'mov'},
|
pc = lookupify{'mov'},
|
||||||
|
@ -151,12 +155,13 @@ local opcode_reg_reg_list = {
|
||||||
tm1 = lookupify{'mov'},
|
tm1 = lookupify{'mov'},
|
||||||
s = lookupify{'mov'},
|
s = lookupify{'mov'},
|
||||||
},
|
},
|
||||||
b = { a = lookupify{'mov'} },
|
v = { a = lookupify{'ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} },
|
||||||
c = { a = lookupify{'mov'} },
|
b = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} },
|
||||||
d = { a = lookupify{'mov'} },
|
c = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} },
|
||||||
e = { a = lookupify{'mov'} },
|
d = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} },
|
||||||
h = { a = lookupify{'mov'} },
|
e = { a = lookupify{'mov','ana','xra','ora','addnc','gta','subnb','lta','add','adc','sub','nea','sbb','eqa'} },
|
||||||
l = { a = lookupify{'mov'} },
|
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'} },
|
pa = { a = lookupify{'mov'} },
|
||||||
pb = { a = lookupify{'mov'} },
|
pb = { a = lookupify{'mov'} },
|
||||||
pc = { a = lookupify{'mov'} },
|
pc = { a = lookupify{'mov'} },
|
||||||
|
@ -166,8 +171,9 @@ local opcode_reg_reg_list = {
|
||||||
tm0 = { a = lookupify{'mov'} },
|
tm0 = { a = lookupify{'mov'} },
|
||||||
tm1 = { a = lookupify{'mov'} },
|
tm1 = { a = lookupify{'mov'} },
|
||||||
s = { a = lookupify{'mov'} },
|
s = { a = lookupify{'mov'} },
|
||||||
v = {},
|
|
||||||
}
|
}
|
||||||
|
local op60names = {}
|
||||||
|
local register_names = {'v','a','b','c','d','e','h','l'}
|
||||||
|
|
||||||
local addressing_map = {
|
local addressing_map = {
|
||||||
imp = opcode_implied,
|
imp = opcode_implied,
|
||||||
|
|
|
@ -186,5 +186,229 @@ section{"rom", org=0x8000}
|
||||||
mov tm0,a
|
mov tm0,a
|
||||||
mov tm1,a
|
mov tm1,a
|
||||||
mov s,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')
|
writebin(filename .. '.bin')
|
37
uPD7801.lua
37
uPD7801.lua
|
@ -447,13 +447,48 @@ for k,v in pairs(op4dr8a) do
|
||||||
end
|
end
|
||||||
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
|
return M
|
||||||
|
|
||||||
--[[ [todo]
|
--[[ [todo]
|
||||||
|
|
||||||
16 bits instructions:
|
16 bits instructions:
|
||||||
0x60xx
|
|
||||||
0x64xx
|
0x64xx
|
||||||
0x70xx
|
0x70xx
|
||||||
0x74xx
|
0x74xx
|
||||||
|
|
Loading…
Reference in New Issue