mirror of
https://github.com/g012/l65.git
synced 2024-06-13 08:29:31 +00:00
Added LDAX and STAX instructions.
This commit is contained in:
parent
09a45eaffb
commit
b9a9b9027d
31
l7801.lua
31
l7801.lua
|
@ -40,8 +40,8 @@ local Keywords_data = {
|
||||||
local Keywords_7801 = {
|
local Keywords_7801 = {
|
||||||
'aci','adi','adinc','ani','bit0','bit1','bit2','bit3','bit4','bit5','bit6','bit7',
|
'aci','adi','adinc','ani','bit0','bit1','bit2','bit3','bit4','bit5','bit6','bit7',
|
||||||
'block','calb','calf','call','calt','clc','ei','eqi','daa','di','dcr','dcrw','dcx',
|
'block','calb','calf','call','calt','clc','ei','eqi','daa','di','dcr','dcrw','dcx',
|
||||||
'ex','exx','gti','halt','inr','inrw','inx','jb','jmp','jr','jre','ldaw','lti','lxi','mov','mvi','mvix','nei','nop',
|
'ex','exx','gti','halt','inr','inrw','inx','jb','jmp','jr','jre','ldaw','ldax','lti','lxi','mov','mvi','mvix','nei','nop',
|
||||||
'offi','oni','ori','pen','per','pex','ret','reti','rets','rld','rrd','sio','softi','staw','stc','stm',
|
'offi','oni','ori','pen','per','pex','ret','reti','rets','rld','rrd','sio','softi','staw','stax','stc','stm',
|
||||||
'sbi','sui','suinb','table','xri',
|
'sbi','sui','suinb','table','xri',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,11 @@ local opcode_reg_reg = lookupify{
|
||||||
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',
|
||||||
}
|
}
|
||||||
local opcode_regb_ind = lookupify{
|
local opcode_reg_ind = lookupify{
|
||||||
|
'ldax',
|
||||||
|
'stax',
|
||||||
|
}
|
||||||
|
local opcode_reg_ind_ex = lookupify{
|
||||||
'mvix'
|
'mvix'
|
||||||
}
|
}
|
||||||
local opcode_regw = lookupify{
|
local opcode_regw = lookupify{
|
||||||
|
@ -105,9 +109,9 @@ local opcode_reg_list = {
|
||||||
h = lookupify{'mvi'},
|
h = lookupify{'mvi'},
|
||||||
l = lookupify{'mvi'},
|
l = lookupify{'mvi'},
|
||||||
v = lookupify{'mvi'},
|
v = lookupify{'mvi'},
|
||||||
bc = lookupify{'lxi','mvix'},
|
bc = lookupify{'ldax','lxi','mvix','stax'},
|
||||||
de = lookupify{'lxi','mvix'},
|
de = lookupify{'ldax','lxi','mvix','stax'},
|
||||||
hl = lookupify{'dcx','inx','lxi','mvix'},
|
hl = lookupify{'dcx','inx','ldax','lxi','mvix','stax'},
|
||||||
sp = lookupify{'dcx','inx','lxi'},
|
sp = lookupify{'dcx','inx','lxi'},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +153,8 @@ local addressing_map = {
|
||||||
reg = opcode_reg,
|
reg = opcode_reg,
|
||||||
regb = opcode_regb,
|
regb = opcode_regb,
|
||||||
regw = opcode_regw,
|
regw = opcode_regw,
|
||||||
regb_ind = opcode_regb_ind,
|
reg_ind = opcode_reg_ind,
|
||||||
|
reg_ind_ex = opcode_reg_ind_ex,
|
||||||
}
|
}
|
||||||
|
|
||||||
local Scope = {
|
local Scope = {
|
||||||
|
@ -1457,7 +1462,7 @@ local function ParseLua(src, src_name)
|
||||||
end
|
end
|
||||||
stat = emit_call{name=op, args={expr, mod_expr}, inverse_encapsulate=inverse_encapsulate, paren_open_white=paren_open_whites} break
|
stat = emit_call{name=op, args={expr, mod_expr}, inverse_encapsulate=inverse_encapsulate, paren_open_white=paren_open_whites} break
|
||||||
end
|
end
|
||||||
if opcode_regb_ind[op] then
|
if opcode_reg_ind[op] or opcode_reg_ind_ex[op] then
|
||||||
if not tok:ConsumeSymbol('(', tokenList) then
|
if not tok:ConsumeSymbol('(', tokenList) then
|
||||||
return false, GenerateError("Unexpected character")
|
return false, GenerateError("Unexpected character")
|
||||||
end
|
end
|
||||||
|
@ -1468,10 +1473,16 @@ local function ParseLua(src, src_name)
|
||||||
if not (opcode_reg_list[register_name] and opcode_reg_list[register_name][op]) then
|
if not (opcode_reg_list[register_name] and opcode_reg_list[register_name][op]) then
|
||||||
return false, GenerateError("Opcode " .. op .. " doesn't support this addressing mode")
|
return false, GenerateError("Opcode " .. op .. " doesn't support this addressing mode")
|
||||||
end
|
end
|
||||||
if not tok:ConsumeSymbol(')', tokenList)
|
if not tok:ConsumeSymbol(')', tokenList) then
|
||||||
or not tok:ConsumeSymbol(',', tokenList) then
|
|
||||||
return false, GenerateError("Unexpected character")
|
return false, GenerateError("Unexpected character")
|
||||||
end
|
end
|
||||||
|
if opcode_reg_ind[op] then
|
||||||
|
stat = emit_call{name=op .. register_name} break
|
||||||
|
end
|
||||||
|
if not tok:ConsumeSymbol(',', tokenList) then
|
||||||
|
return false, GenerateError("Unexpected character")
|
||||||
|
end
|
||||||
|
|
||||||
inverse_encapsulate = tok:ConsumeSymbol('!', tokenList)
|
inverse_encapsulate = tok:ConsumeSymbol('!', tokenList)
|
||||||
local st, expr = ParseExpr(scope) if not st then return false, expr end
|
local st, expr = ParseExpr(scope) if not st then return false, expr end
|
||||||
local paren_open_whites = {}
|
local paren_open_whites = {}
|
||||||
|
|
|
@ -116,5 +116,11 @@ section{"rom", org=0x8000}
|
||||||
mvix (bc),0xf9
|
mvix (bc),0xf9
|
||||||
mvix (de),0xe8
|
mvix (de),0xe8
|
||||||
mvix (hl),0xd7
|
mvix (hl),0xd7
|
||||||
|
ldax (bc)
|
||||||
|
ldax (de)
|
||||||
|
ldax (hl)
|
||||||
|
stax (bc)
|
||||||
|
stax (de)
|
||||||
|
stax (hl)
|
||||||
|
|
||||||
writebin(filename .. '.bin')
|
writebin(filename .. '.bin')
|
16
uPD7801.lua
16
uPD7801.lua
|
@ -76,6 +76,12 @@ local opr16={
|
||||||
inxbc=M.op(0x12,7),
|
inxbc=M.op(0x12,7),
|
||||||
inxde=M.op(0x22,7),
|
inxde=M.op(0x22,7),
|
||||||
inxhl=M.op(0x32,7),
|
inxhl=M.op(0x32,7),
|
||||||
|
ldaxbc=M.op(0x29,7),
|
||||||
|
ldaxde=M.op(0x2a,7),
|
||||||
|
ldaxhl=M.op(0x2b,7),
|
||||||
|
staxbc=M.op(0x39,7),
|
||||||
|
staxde=M.op(0x3a,7),
|
||||||
|
staxhl=M.op(0x3b,7),
|
||||||
} M.opr16 = opr16
|
} M.opr16 = opr16
|
||||||
for k,v in pairs(opr16) do
|
for k,v in pairs(opr16) do
|
||||||
M[k] = function()
|
M[k] = function()
|
||||||
|
@ -83,7 +89,6 @@ for k,v in pairs(opr16) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local opregxx ={
|
local opregxx ={
|
||||||
mvib=M.op(0x6a,7),
|
mvib=M.op(0x6a,7),
|
||||||
mvic=M.op(0x6b,7),
|
mvic=M.op(0x6b,7),
|
||||||
|
@ -308,16 +313,9 @@ return M
|
||||||
staxm=M.op(0x3f,7),
|
staxm=M.op(0x3f,7),
|
||||||
staxp=M.op(0x3d,7)
|
staxp=M.op(0x3d,7)
|
||||||
|
|
||||||
- (r16)
|
|
||||||
ldaxbc=M.op(0x29,7),
|
|
||||||
ldaxde=M.op(0x2a,7),
|
|
||||||
ldaxhl=M.op(0x2b,7),
|
|
||||||
staxbc=M.op(0x39,7),
|
|
||||||
staxde=M.op(0x3a,7),
|
|
||||||
staxhl=M.op(0x3b,7),
|
|
||||||
|
|
||||||
-- (wa),xx
|
-- (wa),xx
|
||||||
mviw (v,xx),xx 0x71 3 13
|
mviw (v,xx),xx 0x71 3 13
|
||||||
|
eqiw (v,xx),xx 0x75 3 13
|
||||||
|
|
||||||
16 bits instructions:
|
16 bits instructions:
|
||||||
0x48xx
|
0x48xx
|
||||||
|
|
Loading…
Reference in New Issue
Block a user