[开源]8051模拟器(虚拟机),有stm32测试范例
自己一直想写个脚本放到单片机里面,论坛就有好多有名的虚拟机,比如:从c4的字节码改编的虚拟机,占用资源超小,单片机可用
前前后后开发了几年,终於赶在节前发布我的嵌入式虚拟机
一个开源的c语言虚拟机(编译型)
还有很多,但是感觉脚本都太大,关键问题是需要做一个脚本开发环境等。感觉是太过于复杂了,后来想到如果实现了一个51的模拟器,那么开发环境不需要自己搞,书也比较多,后来看到论坛 gongxd 发了个模拟器(转一个开源8051软件模拟器)刚好符合自己的需要,但是感觉有点复杂,自己琢磨怎么能简单的重构一下,而后就有了今天的虚拟机的雏形,另外在github上也发现了vm8051的原型机
本次是第一个原型版本,有bug再说难免,望大家谅解{:tongue:} ,
附件提供了两份代码,一份是stm32f103c8t6代码(用的是淘宝上最便宜的那种小板)
https://cache.amobbs.com/new2012/forum/201611/27/211317s2gnz2x2xjm0nm6e.jpg
有一个指示灯,这是一份宿主代码,里面实现了vm51的主机部分,test_Arr数组存储的是51编译后的代码。
另外一份是51单片机的代码,可以看成一个脚本,这个脚本的作用是1秒打开,关闭小板上的led灯
感谢 gongxd(虚拟机的思路,方法),
感谢 SkyGz(FileToArray.rar非常好用))
纯技术贴。路过帮顶~~{:biggrin:} 90soso 发表于 2019-11-28 09:15
纯技术贴。路过帮顶~~
呵呵,可以试试,也许有一点参考价值 也就是说STM32终于可以实现51的功能了。。。{:lol:}{:lol:}{:lol:} lz很有想法啊,用32位单片机实现了一个8位单片机模拟器,然后在上边运行51程序! CoolBird007 发表于 2019-11-28 09:17
也就是说STM32终于可以实现51的功能了。。。
外设部分没有模拟,如果全部模拟也是可以的,我觉得没有必要,自己可以随意扩展 hcambridge 发表于 2019-11-28 09:19
lz很有想法啊,用32位单片机实现了一个8位单片机模拟器,然后在上边运行51程序! ...
想法就是把51当脚本来用,这个是第一个版本肯定有不少bug,欢迎提意见啊 楼主厉害 这是个很有意思的项目 {:lol:}我以前是玩C51 的 后来终于整上了 STM32然后你又弄个虚拟机 让我回到C51嘛不不不 ayumi8 发表于 2019-11-28 10:33
我以前是玩C51 的 后来终于整上了 STM32然后你又弄个虚拟机 让我回到C51嘛不不不...
根本不是这个意思啊,这个是吧c51当脚本来看,{:tongue:} 楼主你这个既能执行.bin又能解析.c ? LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?
应该要预编译成Bin 不然解释C 那慢到姥姥家了干脆用Lua 这些了说不定 jitlua 比这个还快点 {:lol:} 收藏学习。
指令对应函数指针数组,好方法。
其实我有一个想法,设计一套精简的虚拟机指令集,一个小巧的C编译器运行于单片机上,
单片机就非常接近于电脑了,可以接键盘、显示器,输入C代码、编译、运行,或者做一些可编程的玩意。 很有意思的一个项目{:smile:} 我等不才还在嵌入式入门到放弃,大神都无聊到从放弃嵌入式到51了 支持支持! 技术研究需要反反复复嘛,有时间与精力支持折腾! LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?
是keil编译c51到bin,而后虚拟机直接执行这个bin, 很有趣,可以试试把arm9的uarm虚拟机移植到stm32上,就可以跑linux了 muniao 发表于 2019-11-28 11:02
支持支持!
你的los很牛叉!! 写个6502的模拟器吧,可以做红白机 brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机
6502我都不知道是什么,要不这个任务你就接了吧{:lol:} STM32跑这个,性能如何? dreampet 发表于 2019-11-28 13:01
STM32跑这个,性能如何?
我没有测试,只是第一个版本,欢迎测试,提一下意见。我后面在改进 直接用keil编码再放进去吗 huangqi412 发表于 2019-11-28 13:14
直接用keil编码再放进去吗
用keil写一段程序(51程序),生成的bin文件转成数组,直接放到stm32的代码中一起编译,当然,你可以增加一段代码,支持这部分更新,应该不难,你的分数很高了,崇拜!! 感谢lz移植成功,vm的一个很大的用处是做加密,有了虚拟机还可以自己做指令集,模拟外设等,直接把反汇编难度再次提高 {:lol:}{:lol:}{:lol:}{:victory:}{:victory:}{:victory:} 谢谢楼主分享 gongxd 发表于 2019-11-28 14:07
感谢lz移植成功,vm的一个很大的用处是做加密,有了虚拟机还可以自己做指令集,模拟外设等,直接把反汇编难 ...
还可以做多个核,51核,PIC核,AVR核的。。。。。。。。 8位虚拟机感觉太浪费宿主性能了 huangqi412 发表于 2019-11-28 15:22
8位虚拟机感觉太浪费宿主性能了
其实,怎么说呢,不浪费性能最好用汇编{:loveliness:}
开个玩笑啊!
其实,这个是当成一个脚本来用的,并不是要在32位上跑8位。
其实我觉得写个m0的模拟器更好,只是对m0的细节我太不了解了,51相对比较熟悉,只好退而求其次了! 很神奇的玩法。应该考虑用F4或者F7系列,主频在200MHZ以上的{:lol:} youkebing 发表于 2019-11-28 10:39
根本不是这个意思啊,这个是吧c51当脚本来看,
这个很有意义, 能测试一下性能怎么样么,估计能到 百khz 就不错了 gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了
现在其实不用太忙测试,因为只是第一个版本,也没有优化。
如果关注性能,至少两方面可以处理
1,代码优化,这个时候需要仔细测试。
2,把相关功能模块放到宿主中实现,宿主留出相应接口 gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了
另外,这个代码和原来vm8051已经有很大不同了。 下一个课题是虚拟一个双核CPU,一个8051,一个x86。
双核之间通过共享内存来通讯。
x86上安装windows操作系统,运行keil软件,将用户输入的源程序编译为bin文件,直接传送到8051核运行。 health 发表于 2019-11-28 16:57
下一个课题是虚拟一个双核CPU,一个8051,一个x86。
双核之间通过共享内存来通讯。
x86上安装windows操作系 ...
这个任务就交给大神你了{:lol:} 加油哦!! youkebing 发表于 2019-11-28 09:17
呵呵,可以试试,也许有一点参考价值
关键是你在外面写的C8051代码,用啥编译器呢?总不能原始的字符,直接down进板子吧。。。想请教这个。。
kinsno 发表于 2019-11-28 17:02
关键是你在外面写的C8051代码,用啥编译器呢?总不能原始的字符,直接down进板子吧。。。想请教这个。。
...
keil啊!还能用什么? 牛,虽然用不到,但可以学习学习。 不错,还能这么玩 STM-32 -- 8051模拟器(虚拟机) 楼主这个还是很牛的 能模拟个i7吗?买不起i7,模拟一个 对lz这个进行了测试
在windows32位上,实现相同功能,实体机 i5 cpu c语言是8051虚拟机的2000倍左右
程序主要运行16位加法和比较 proteus了解下! 不错 学习了 这是STM里用51吗? 这可以让只会51的人用STM芯片吗 高手,牛 不错,下载试试 高手,牛 brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机
https://github.com/GorgonMeducer/EmbeddedNES
你要的红白机模拟器(6502模拟器) 谢谢分享 Gorgon_Meducer 发表于 2020-1-30 17:59
https://github.com/GorgonMeducer/EmbeddedNES
你要的红白机模拟器(6502模拟器)
厉害了!! 有开源的STM32运行python脚本 学习一下 不错,下载试试 有版本更新了吗 wzbtp 发表于 2024-3-20 04:43
有版本更新了吗
(引用自62楼)
没新版本更新,发现什么问题了吗?
没有,这个很好 学习一下 Thank you
技术贴,不错 youkebing 发表于 2019-11-28 15:31
其实,怎么说呢,不浪费性能最好用汇编
开个玩笑啊!
其实,这个是当成一个脚本来用的, ...
(引用自33楼)
可能对m0有些误解呢,m3是向下兼容m0的,即m0程序可以直接在m3上跑,不需要模拟{:smile:}
页:
[1]