mirror of
https://github.com/g012/l65.git
synced 2025-02-08 10:30:37 +00:00
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',
|
||||
'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,
|
||||
|
@ -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')
|
37
uPD7801.lua
37
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user