mirror of
https://github.com/g012/l65.git
synced 2024-09-27 19:55:29 +00:00
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',
|
||||
}
|
||||
local Keywords_7801 = {
|
||||
'block', 'calb', 'calf', 'calt', 'ei', 'daa', 'di', 'dcr',
|
||||
'ex', 'exx', 'halt', 'jb', 'jr', 'lxi', 'mvi', 'nop',
|
||||
'ret', 'reti', 'rets', 'sio', 'softi', 'stm', 'table',
|
||||
'aci','adi','adinc','ani',
|
||||
'block','calb','calf','call','calt','clc','ei','eqi','daa','di','dcr','dcx',
|
||||
'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 = {
|
||||
a=8,b=8,c=8,d=8,e=8,h=8,l=8,v=8,
|
||||
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_alias = {} -- alternate user names for opcodes
|
||||
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{
|
||||
'calf', 'calt'
|
||||
'calf', 'calt','call','jmp'
|
||||
}
|
||||
local opcode_relative = lookupify{
|
||||
'jr',
|
||||
}
|
||||
local opcode_reg = lookupify{
|
||||
'dcr', 'inr'
|
||||
'dcr','dcx','inr','inx'
|
||||
}
|
||||
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{
|
||||
'lxi'
|
||||
}
|
||||
local opcode_reg_list = {
|
||||
a = lookupify{'dcr','inr', 'mvi'},
|
||||
b = lookupify{'dcr','inr', 'mvi'},
|
||||
c = 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'},
|
||||
c = lookupify{'dcr','inr','mvi'},
|
||||
d = lookupify{'mvi'},
|
||||
e = lookupify{'mvi'},
|
||||
h = lookupify{'mvi'},
|
||||
l = lookupify{'mvi'},
|
||||
v = lookupify{'mvi'},
|
||||
bc = lookupify{'lxi'},
|
||||
de = lookupify{'lxi'},
|
||||
hl = lookupify{'lxi'},
|
||||
sp = lookupify{'lxi'},
|
||||
sp = lookupify{'dcx','inx','lxi'},
|
||||
}
|
||||
|
||||
local addressing_map = {
|
||||
|
68
samples/scv_test.l65
Normal file
68
samples/scv_test.l65
Normal file
@ -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={
|
||||
dcr=M.op(0x51,4),
|
||||
inr=M.op(0x41,4)
|
||||
inr=M.op(0x41,4),
|
||||
} M.opa = opa
|
||||
for k,v in pairs(opa) do
|
||||
M[k .. 'a'] = function()
|
||||
@ -41,7 +41,7 @@ end
|
||||
|
||||
local opb={
|
||||
dcr=M.op(0x52,4),
|
||||
inr=M.op(0x42,4)
|
||||
inr=M.op(0x42,4),
|
||||
} M.opb = opb
|
||||
for k,v in pairs(opb) do
|
||||
M[k .. 'b'] = function()
|
||||
@ -69,7 +69,7 @@ for k,v in pairs(opsp) do
|
||||
end
|
||||
end
|
||||
|
||||
local opregb ={
|
||||
local opregxx ={
|
||||
mvib=M.op(0x6a,7),
|
||||
mvic=M.op(0x6b,7),
|
||||
mvid=M.op(0x6c,7),
|
||||
@ -77,8 +77,8 @@ local opregb ={
|
||||
mvih=M.op(0x6e,7),
|
||||
mvil=M.op(0x6f,7),
|
||||
mviv=M.op(0x68,7)
|
||||
} M.opregb = opregb
|
||||
for k,v in pairs(opregb) do
|
||||
} M.opregxx = opregxx
|
||||
for k,v in pairs(opregxx) do
|
||||
M[k] = 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
|
||||
@ -87,6 +87,33 @@ for k,v in pairs(opregb) do
|
||||
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 = {
|
||||
call=M.op(0x44,16),
|
||||
jmp=M.op(0x54,10),
|
||||
@ -170,12 +197,12 @@ local op48imp = {
|
||||
ei=M.op(0x20,8),
|
||||
di=M.op(0x24,8),
|
||||
clc=M.op(0x2a,8),
|
||||
stc=M.op(0x2b,8),
|
||||
pen=M.op(0x2c,11),
|
||||
per=M.op(0x3c,11),
|
||||
pex=M.op(0x2d,11),
|
||||
rld=M.op(0x38,17),
|
||||
rrd=M.op(0x39,17),
|
||||
stc=M.op(0x2b,8),
|
||||
} M.op48imp = op48imp
|
||||
for k,v in pairs(op48imp) do
|
||||
M[k .. 'imp'] = function()
|
||||
@ -225,24 +252,6 @@ return M
|
||||
bit6=M.op(0x5e,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
|
||||
movab=M.op(0x0a,4), movac=M.op(0x0b,4),
|
||||
movad=M.op(0x0c,4), movae=M.op(0x0d,4),
|
||||
|
Loading…
Reference in New Issue
Block a user