mirror of https://github.com/g012/l65.git
Added and tested a bunch of opcodes.
This commit is contained in:
parent
6fc00c2b63
commit
6708ddaecc
28
l7801.lua
28
l7801.lua
|
@ -38,10 +38,13 @@ local Keywords_data = {
|
||||||
'dc',
|
'dc',
|
||||||
}
|
}
|
||||||
local Keywords_7801 = {
|
local Keywords_7801 = {
|
||||||
'block', 'calb', 'calf', 'calt', 'ei', 'daa', 'di', 'dcr',
|
'aci','adi','adinc','ani',
|
||||||
'ex', 'exx', 'halt', 'jb', 'jr', 'lxi', 'mvi', 'nop',
|
'block','calb','calf','call','calt','clc','ei','eqi','daa','di','dcr','dcx',
|
||||||
'ret', 'reti', 'rets', 'sio', 'softi', 'stm', 'table',
|
'ex','exx','gti','halt','inr','inx','jb','jmp','jr','lti','lxi','mvi','nei','nop',
|
||||||
|
'offi','oni','ori','pen','per','pex','ret','reti','rets','rld','rrd','sio','softi','stc','stm',
|
||||||
|
'sbi','sui','suinb','table','xri',
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
bc=16,de=16,hl=16,sp=16
|
bc=16,de=16,hl=16,sp=16
|
||||||
|
@ -64,35 +67,38 @@ opcode_arg_encapsulate(true)
|
||||||
local opcode_encapsulate = {} -- additionnal opcode, to have basic encapsulation (function(a) return a end)
|
local opcode_encapsulate = {} -- additionnal opcode, to have basic encapsulation (function(a) return a end)
|
||||||
local opcode_alias = {} -- alternate user names for opcodes
|
local opcode_alias = {} -- alternate user names for opcodes
|
||||||
local opcode_implied = lookupify{
|
local opcode_implied = lookupify{
|
||||||
'block', 'calb', 'ei', 'daa', 'di', 'ex', 'exx', 'halt', 'jb', 'nop', 'ret', 'reti', 'rets', 'sio', 'softi', 'stm', 'table'
|
'block','calb','clc','ei','daa','dcr','di','ex','exx','halt','inr','jb','nop','pen',
|
||||||
|
'per','pex','ret','reti','rets','rld','rrd','sio','softi','stc','stm','table'
|
||||||
}
|
}
|
||||||
|
|
||||||
local opcode_immediate = lookupify{
|
local opcode_immediate = lookupify{
|
||||||
'calf', 'calt'
|
'calf', 'calt','call','jmp'
|
||||||
}
|
}
|
||||||
local opcode_relative = lookupify{
|
local opcode_relative = lookupify{
|
||||||
'jr',
|
'jr',
|
||||||
}
|
}
|
||||||
local opcode_reg = lookupify{
|
local opcode_reg = lookupify{
|
||||||
'dcr', 'inr'
|
'dcr','dcx','inr','inx'
|
||||||
}
|
}
|
||||||
local opcode_regb = lookupify{
|
local opcode_regb = lookupify{
|
||||||
'mvi'
|
'aci','adi','adinc','ani','eqi','gti','lti','mvi','nei','offi','oni','ori','sbi','sui','suinb','xri',
|
||||||
}
|
}
|
||||||
local opcode_regw = lookupify{
|
local opcode_regw = lookupify{
|
||||||
'lxi'
|
'lxi'
|
||||||
}
|
}
|
||||||
local opcode_reg_list = {
|
local opcode_reg_list = {
|
||||||
a = lookupify{'dcr','inr', 'mvi'},
|
a = lookupify{'aci','adi','adinc','ani','dcr','inr','eqi','gti','lti','mvi','nei','offi','oni','ori','sbi','sui','suinb','xri'},
|
||||||
b = lookupify{'dcr','inr', 'mvi'},
|
b = lookupify{'dcr','inr','mvi'},
|
||||||
c = lookupify{'dcr','inr', 'mvi'},
|
c = lookupify{'dcr','inr','mvi'},
|
||||||
d = lookupify{'mvi'},
|
d = lookupify{'mvi'},
|
||||||
e = lookupify{'mvi'},
|
e = lookupify{'mvi'},
|
||||||
h = lookupify{'mvi'},
|
h = lookupify{'mvi'},
|
||||||
l = lookupify{'mvi'},
|
l = lookupify{'mvi'},
|
||||||
|
v = lookupify{'mvi'},
|
||||||
bc = lookupify{'lxi'},
|
bc = lookupify{'lxi'},
|
||||||
de = lookupify{'lxi'},
|
de = lookupify{'lxi'},
|
||||||
hl = lookupify{'lxi'},
|
hl = lookupify{'lxi'},
|
||||||
sp = lookupify{'lxi'},
|
sp = lookupify{'dcx','inx','lxi'},
|
||||||
}
|
}
|
||||||
|
|
||||||
local addressing_map = {
|
local addressing_map = {
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
require 'scv'
|
||||||
|
location(0x8000, 0x8FFF)
|
||||||
|
section{"rom", org=0x8000}
|
||||||
|
dc.b 'H'
|
||||||
|
@main
|
||||||
|
block
|
||||||
|
calb
|
||||||
|
ei
|
||||||
|
daa
|
||||||
|
di
|
||||||
|
ex
|
||||||
|
exx
|
||||||
|
halt
|
||||||
|
jb
|
||||||
|
nop
|
||||||
|
ret
|
||||||
|
reti
|
||||||
|
rets
|
||||||
|
sio
|
||||||
|
softi
|
||||||
|
stm
|
||||||
|
table
|
||||||
|
dcr a
|
||||||
|
dcr b
|
||||||
|
dcr c
|
||||||
|
inr a
|
||||||
|
inr b
|
||||||
|
inr c
|
||||||
|
dcx sp
|
||||||
|
inx sp
|
||||||
|
mvi a,0xca
|
||||||
|
mvi b,0xfe
|
||||||
|
mvi c,0xbe
|
||||||
|
mvi d,0xef
|
||||||
|
mvi e,0xf0
|
||||||
|
mvi h,0x0d
|
||||||
|
mvi l,0x78
|
||||||
|
mvi v,0x01
|
||||||
|
aci a,0x0f
|
||||||
|
adi a,0x1e
|
||||||
|
adinc a,0x2d
|
||||||
|
ani a,0x3c
|
||||||
|
eqi a,0x4b
|
||||||
|
gti a,0x5a
|
||||||
|
lti a,0x69
|
||||||
|
nei a,0x87
|
||||||
|
offi a,0x96
|
||||||
|
oni a,0xa5
|
||||||
|
ori a,0xb4
|
||||||
|
sbi a,0xc3
|
||||||
|
sui a,0xd2
|
||||||
|
suinb a,0xe1
|
||||||
|
xri a,0xf0
|
||||||
|
lxi bc,0xabcd
|
||||||
|
lxi de,0xbeef
|
||||||
|
lxi hl,0xcafe
|
||||||
|
lxi sp,0xf00d
|
||||||
|
call 0xd701
|
||||||
|
jmp 0x8e07
|
||||||
|
clc
|
||||||
|
pen
|
||||||
|
per
|
||||||
|
pex
|
||||||
|
rld
|
||||||
|
rrd
|
||||||
|
stc
|
||||||
|
|
||||||
|
writebin(filename .. '.bin')
|
57
uPD7801.lua
57
uPD7801.lua
|
@ -31,7 +31,7 @@ end
|
||||||
|
|
||||||
local opa={
|
local opa={
|
||||||
dcr=M.op(0x51,4),
|
dcr=M.op(0x51,4),
|
||||||
inr=M.op(0x41,4)
|
inr=M.op(0x41,4),
|
||||||
} M.opa = opa
|
} M.opa = opa
|
||||||
for k,v in pairs(opa) do
|
for k,v in pairs(opa) do
|
||||||
M[k .. 'a'] = function()
|
M[k .. 'a'] = function()
|
||||||
|
@ -41,7 +41,7 @@ end
|
||||||
|
|
||||||
local opb={
|
local opb={
|
||||||
dcr=M.op(0x52,4),
|
dcr=M.op(0x52,4),
|
||||||
inr=M.op(0x42,4)
|
inr=M.op(0x42,4),
|
||||||
} M.opb = opb
|
} M.opb = opb
|
||||||
for k,v in pairs(opb) do
|
for k,v in pairs(opb) do
|
||||||
M[k .. 'b'] = function()
|
M[k .. 'b'] = function()
|
||||||
|
@ -69,7 +69,7 @@ for k,v in pairs(opsp) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local opregb ={
|
local opregxx ={
|
||||||
mvib=M.op(0x6a,7),
|
mvib=M.op(0x6a,7),
|
||||||
mvic=M.op(0x6b,7),
|
mvic=M.op(0x6b,7),
|
||||||
mvid=M.op(0x6c,7),
|
mvid=M.op(0x6c,7),
|
||||||
|
@ -77,8 +77,8 @@ local opregb ={
|
||||||
mvih=M.op(0x6e,7),
|
mvih=M.op(0x6e,7),
|
||||||
mvil=M.op(0x6f,7),
|
mvil=M.op(0x6f,7),
|
||||||
mviv=M.op(0x68,7)
|
mviv=M.op(0x68,7)
|
||||||
} M.opregb = opregb
|
} M.opregxx = opregxx
|
||||||
for k,v in pairs(opregb) do
|
for k,v in pairs(opregxx) do
|
||||||
M[k] = function(late, early)
|
M[k] = function(late, early)
|
||||||
local l65dbg = { info=debug.getinfo(2, 'Sl'), trace=debug.traceback(nil, 1) }
|
local l65dbg = { info=debug.getinfo(2, 'Sl'), trace=debug.traceback(nil, 1) }
|
||||||
local size = function() late,early = M.size_op(late,early) return 2 end
|
local size = function() late,early = M.size_op(late,early) return 2 end
|
||||||
|
@ -87,6 +87,33 @@ for k,v in pairs(opregb) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local opaxx ={
|
||||||
|
aci=M.op(0x56,7),
|
||||||
|
adi=M.op(0x46,7),
|
||||||
|
adinc=M.op(0x26,7),
|
||||||
|
ani=M.op(0x07,7),
|
||||||
|
eqi=M.op(0x77,7),
|
||||||
|
gti=M.op(0x27,7),
|
||||||
|
lti=M.op(0x37,7),
|
||||||
|
mvi=M.op(0x69,7),
|
||||||
|
nei=M.op(0x67,7),
|
||||||
|
offi=M.op(0x57,7),
|
||||||
|
oni=M.op(0x47,7),
|
||||||
|
ori=M.op(0x17,7),
|
||||||
|
sbi=M.op(0x76,7),
|
||||||
|
sui=M.op(0x66,7),
|
||||||
|
suinb=M.op(0x36,7),
|
||||||
|
xri=M.op(0x16,7)
|
||||||
|
} M.opaxx = opaxx
|
||||||
|
for k,v in pairs(opaxx) do
|
||||||
|
M[k .. 'a'] = function(late, early)
|
||||||
|
local l65dbg = { info=debug.getinfo(2, 'Sl'), trace=debug.traceback(nil, 1) }
|
||||||
|
local size = function() late,early = M.size_op(late,early) return 2 end
|
||||||
|
local bin = function() local l65dbg=l65dbg return { v.opc, M.op_eval_byte(late,early) } end
|
||||||
|
table.insert(M.section_current.instructions, { size=size, cycles=v.cycles, bin=bin })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local opw = {
|
local opw = {
|
||||||
call=M.op(0x44,16),
|
call=M.op(0x44,16),
|
||||||
jmp=M.op(0x54,10),
|
jmp=M.op(0x54,10),
|
||||||
|
@ -170,12 +197,12 @@ local op48imp = {
|
||||||
ei=M.op(0x20,8),
|
ei=M.op(0x20,8),
|
||||||
di=M.op(0x24,8),
|
di=M.op(0x24,8),
|
||||||
clc=M.op(0x2a,8),
|
clc=M.op(0x2a,8),
|
||||||
stc=M.op(0x2b,8),
|
|
||||||
pen=M.op(0x2c,11),
|
pen=M.op(0x2c,11),
|
||||||
per=M.op(0x3c,11),
|
per=M.op(0x3c,11),
|
||||||
pex=M.op(0x2d,11),
|
pex=M.op(0x2d,11),
|
||||||
rld=M.op(0x38,17),
|
rld=M.op(0x38,17),
|
||||||
rrd=M.op(0x39,17),
|
rrd=M.op(0x39,17),
|
||||||
|
stc=M.op(0x2b,8),
|
||||||
} M.op48imp = op48imp
|
} M.op48imp = op48imp
|
||||||
for k,v in pairs(op48imp) do
|
for k,v in pairs(op48imp) do
|
||||||
M[k .. 'imp'] = function()
|
M[k .. 'imp'] = function()
|
||||||
|
@ -225,24 +252,6 @@ return M
|
||||||
bit6=M.op(0x5e,10),
|
bit6=M.op(0x5e,10),
|
||||||
bit7=M.op(0x5f,10)
|
bit7=M.op(0x5f,10)
|
||||||
|
|
||||||
-- xx
|
|
||||||
aci=M.op(0x56,7),
|
|
||||||
adi=M.op(0x46,7),
|
|
||||||
adinc=M.op(0x26,7),
|
|
||||||
ani=M.op(0x07,7),
|
|
||||||
eqi=M.op(0x77,7),
|
|
||||||
gti=M.op(0x27,7),
|
|
||||||
lti=M.op(0x37,7),
|
|
||||||
mvi=M.op(0x69,7),
|
|
||||||
nei=M.op(0x69,7),
|
|
||||||
offi=M.op(0x57,7),
|
|
||||||
oni=M.op(0x47,7),
|
|
||||||
ori=M.op(0x17,7),
|
|
||||||
sbi=M.op(0x76,7),
|
|
||||||
sui=M.op(0x61,7),
|
|
||||||
suinb=M.op(0x36,7),
|
|
||||||
xri=M.op(0x16,7)
|
|
||||||
|
|
||||||
-- r8,r8
|
-- r8,r8
|
||||||
movab=M.op(0x0a,4), movac=M.op(0x0b,4),
|
movab=M.op(0x0a,4), movac=M.op(0x0b,4),
|
||||||
movad=M.op(0x0c,4), movae=M.op(0x0d,4),
|
movad=M.op(0x0c,4), movae=M.op(0x0d,4),
|
||||||
|
|
Loading…
Reference in New Issue