1
0
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:
mooz 2018-11-10 21:41:42 +01:00
parent 09a45eaffb
commit b9a9b9027d
3 changed files with 37 additions and 22 deletions

View File

@ -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 = {}

View File

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

View File

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