mirror of
https://github.com/MiSTer-devel/ao486_MiSTer.git
synced 2026-04-19 03:05:39 +00:00
124 lines
3.6 KiB
Lua
124 lines
3.6 KiB
Lua
package.path = package.path .. ";./../lualib/?.lua"
|
|
package.path = package.path .. ";./../luatools/?.lua"
|
|
require("vsim_comm")
|
|
|
|
function get_reg8()
|
|
rnd = math.random(0, 7)
|
|
if (rnd == 0) then return "AL"
|
|
elseif (rnd == 1) then return "CL"
|
|
elseif (rnd == 2) then return "DL"
|
|
elseif (rnd == 3) then return "BL"
|
|
elseif (rnd == 4) then return "AH"
|
|
elseif (rnd == 5) then return "CH"
|
|
elseif (rnd == 6) then return "DH"
|
|
elseif (rnd == 7) then return "BH"
|
|
end
|
|
end
|
|
|
|
function get_reg16()
|
|
rnd = math.random(0, 7)
|
|
if (rnd == 0) then return "AX"
|
|
elseif (rnd == 1) then return "CX"
|
|
elseif (rnd == 2) then return "DX"
|
|
elseif (rnd == 3) then return "BX"
|
|
elseif (rnd == 4) then return "SP"
|
|
elseif (rnd == 5) then return "BP"
|
|
elseif (rnd == 6) then return "SI"
|
|
elseif (rnd == 7) then return "DI"
|
|
end
|
|
end
|
|
|
|
function get_reg32()
|
|
return "E"..get_reg16()
|
|
end
|
|
|
|
function get_immi8()
|
|
return "0x"..string.format("%X", math.random(0, 255))
|
|
end
|
|
function get_immi16()
|
|
return "0x"..string.format("%X", math.random(0, 0xFFFF))
|
|
end
|
|
function get_immi32()
|
|
return "0x"..string.format("%X", math.random(0, 0xFFFF))..string.format("%X", math.random(0, 0xFFFF))
|
|
end
|
|
|
|
function get_regany()
|
|
return get_reg8()
|
|
end
|
|
|
|
function opcode_reg_immi(opcode)
|
|
rnd = math.random(0, 5)
|
|
if (rnd == 0) then listing[#listing + 1] = opcode.." "..get_reg8()..", "..get_immi8()
|
|
elseif (rnd == 1) then listing[#listing + 1] = opcode.." "..get_reg16()..", "..get_immi16()
|
|
elseif (rnd == 2) then listing[#listing + 1] = opcode.." "..get_reg32()..", "..get_immi32()
|
|
elseif (rnd == 3) then listing[#listing + 1] = opcode.." "..get_reg8()..", "..get_reg8()
|
|
elseif (rnd == 4) then listing[#listing + 1] = opcode.." "..get_reg16()..", "..get_reg16()
|
|
elseif (rnd == 5) then listing[#listing + 1] = opcode.." "..get_reg32()..", "..get_reg32()
|
|
end
|
|
end
|
|
|
|
function jump_forward_random(opcode)
|
|
listing[#listing + 1] = opcode.." Label"..labelcount
|
|
distance = math.random(1, 5)
|
|
for i = 1, distance do
|
|
listing[#listing + 1] = "nop"
|
|
end
|
|
listing[#listing + 1] = "Label"..labelcount..":"
|
|
labelcount = labelcount + 1
|
|
end
|
|
|
|
|
|
listing = {}
|
|
labelcount = 0
|
|
math.randomseed(1)
|
|
while (#listing < 1000) do
|
|
rnd = math.random(0, 100)
|
|
if (rnd < 10) then opcode_reg_immi("MOV")
|
|
|
|
elseif (rnd == 30) then jump_forward_random("JMP")
|
|
|
|
elseif (rnd == 50) then opcode_reg_immi("OR")
|
|
elseif (rnd == 51) then opcode_reg_immi("AND")
|
|
|
|
elseif (rnd == 70) then opcode_reg_immi("ADD")
|
|
elseif (rnd == 71) then opcode_reg_immi("SUB")
|
|
|
|
|
|
elseif (rnd == 98) then
|
|
listing[#listing + 1] = "mov EAX, 0x" .. string.format("%X", math.random(0, 0xFFFF))
|
|
listing[#listing + 1] = "mov EBX, 0x" .. string.format("%X", math.random(0, 0xFFFF))
|
|
listing[#listing + 1] = "mov ECX,[EAX]"
|
|
listing[#listing + 1] = "mov EDX,[EBX]"
|
|
|
|
elseif (rnd == 99) then
|
|
listing[#listing + 1] = "mov EAX, "..math.random(0, 7)
|
|
listing[#listing + 1] = "mov ECX, "..math.random(0, 7)
|
|
listing[#listing + 1] = "mov EBX,0x12345678"
|
|
listing[#listing + 1] = "mov [EAX],EBX"
|
|
listing[#listing + 1] = "mov [ECX],EBX"
|
|
|
|
end
|
|
end
|
|
listing[#listing + 1] = "JMP 0"
|
|
|
|
|
|
local outfile=io.open("listing.txt","w")
|
|
for i = 1, #listing do
|
|
outfile:write(listing[i].."\n")
|
|
end
|
|
io.close(outfile)
|
|
|
|
os.execute("FASM.EXE listing.txt")
|
|
|
|
reg_set_file("boot0.rom", DUMMYREG, 0xF0000, 0)
|
|
reg_set_file("lua_tests/listing.bin", DUMMYREG, 0, 0)
|
|
|
|
reg_set_connection(0 + 1, DUMMYREG)
|
|
wait_ns(10000)
|
|
reg_set_connection(0 + 0, DUMMYREG)
|
|
wait_ns(50000)
|
|
|
|
reg_set_connection(2 + 1, DUMMYREG)
|
|
wait_ns(10000)
|
|
reg_set_connection(2 + 0, DUMMYREG)
|
|
wait_ns(50000) |