搜索
bottom↓
回复: 65
打印 上一主题 下一主题

[开源]8051模拟器(虚拟机),有stm32测试范例

  [复制链接]

出0入89汤圆

跳转到指定楼层
1
发表于 2019-11-28 09:13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己一直想写个脚本放到单片机里面,论坛就有好多有名的虚拟机,比如:

从c4的字节码改编的虚拟机,占用资源超小,单片机可用
前前后后开发了几年,终於赶在节前发布我的嵌入式虚拟机
一个开源的c语言虚拟机(编译型)
还有很多,但是感觉脚本都太大,关键问题是需要做一个脚本开发环境等。感觉是太过于复杂了,后来想到如果实现了一个51的模拟器,那么开发环境不需要自己搞,书也比较多,后来看到论坛 gongxd 发了个模拟器(转一个开源8051软件模拟器)刚好符合自己的需要,但是感觉有点复杂,自己琢磨怎么能简单的重构一下,而后就有了今天的虚拟机的雏形,另外在github上也发现了vm8051的原型机
本次是第一个原型版本,有bug再说难免,望大家谅解
附件提供了两份代码,一份是stm32f103c8t6代码(用的是淘宝上最便宜的那种小板)

有一个指示灯,这是一份宿主代码,里面实现了vm51的主机部分,test_Arr数组存储的是51编译后的代码。
另外一份是51单片机的代码,可以看成一个脚本,这个脚本的作用是1秒打开,关闭小板上的led灯

感谢 gongxd(虚拟机的思路,方法),  
感谢 SkyGz(FileToArray.rar非常好用))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

2
发表于 2019-11-28 09:15:46 | 只看该作者
纯技术贴。路过帮顶~~

出0入89汤圆

3
 楼主| 发表于 2019-11-28 09:17:21 | 只看该作者
90soso 发表于 2019-11-28 09:15
纯技术贴。路过帮顶~~

呵呵,可以试试,也许有一点参考价值

出0入0汤圆

4
发表于 2019-11-28 09:17:57 | 只看该作者
也就是说STM32终于可以实现51的功能了。。。

出100入18汤圆

5
发表于 2019-11-28 09:19:12 | 只看该作者
lz很有想法啊,用32位单片机实现了一个8位单片机模拟器,然后在上边运行51程序!

出0入89汤圆

6
 楼主| 发表于 2019-11-28 09:37:34 | 只看该作者
CoolBird007 发表于 2019-11-28 09:17
也就是说STM32终于可以实现51的功能了。。。

外设部分没有模拟,如果全部模拟也是可以的,我觉得没有必要,自己可以随意扩展

出0入89汤圆

7
 楼主| 发表于 2019-11-28 09:39:43 | 只看该作者
hcambridge 发表于 2019-11-28 09:19
lz很有想法啊,用32位单片机实现了一个8位单片机模拟器,然后在上边运行51程序! ...

想法就是把51当脚本来用,这个是第一个版本肯定有不少bug,欢迎提意见啊

出0入0汤圆

8
发表于 2019-11-28 09:54:53 来自手机 | 只看该作者
楼主厉害

出0入0汤圆

9
发表于 2019-11-28 10:26:54 | 只看该作者
这是个很有意思的项目

出0入0汤圆

10
发表于 2019-11-28 10:33:57 | 只看该作者
  我以前是玩C51 的 后来终于整上了 STM32  然后你又弄个虚拟机 让我回到C51嘛  不不不

出0入89汤圆

11
 楼主| 发表于 2019-11-28 10:39:00 | 只看该作者
ayumi8 发表于 2019-11-28 10:33
我以前是玩C51 的 后来终于整上了 STM32  然后你又弄个虚拟机 让我回到C51嘛  不不不  ...

根本不是这个意思啊,这个是吧c51当脚本来看,

出0入0汤圆

12
发表于 2019-11-28 10:44:37 | 只看该作者
楼主你这个既能执行.bin又能解析.c ?

出0入0汤圆

13
发表于 2019-11-28 10:46:36 | 只看该作者
LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?

应该要预编译成Bin 不然解释C 那慢到姥姥家了  干脆用Lua 这些了  说不定 jitlua 比这个还快点

出0入0汤圆

14
发表于 2019-11-28 10:50:05 | 只看该作者
收藏学习。
指令对应函数指针数组,好方法。
其实我有一个想法,设计一套精简的虚拟机指令集,一个小巧的C编译器运行于单片机上,
单片机就非常接近于电脑了,可以接键盘、显示器,输入C代码、编译、运行,或者做一些可编程的玩意。

出0入0汤圆

15
发表于 2019-11-28 10:55:04 | 只看该作者
很有意思的一个项目

出0入0汤圆

16
发表于 2019-11-28 11:01:51 | 只看该作者
我等不才还在嵌入式入门到放弃,大神都无聊到从放弃嵌入式到51了

出0入0汤圆

17
发表于 2019-11-28 11:02:04 来自手机 | 只看该作者
支持支持!

出5入85汤圆

18
发表于 2019-11-28 11:07:23 来自手机 | 只看该作者
技术研究需要反反复复嘛,有时间与精力支持折腾!

出0入89汤圆

19
 楼主| 发表于 2019-11-28 11:20:52 | 只看该作者
LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?

是keil编译c51到bin,而后虚拟机直接执行这个bin,

出0入0汤圆

20
发表于 2019-11-28 11:25:42 | 只看该作者
很有趣,可以试试把arm9的uarm虚拟机移植到stm32上,就可以跑linux了

出0入89汤圆

21
 楼主| 发表于 2019-11-28 11:29:15 | 只看该作者

你的los很牛叉!!

出10入284汤圆

22
发表于 2019-11-28 11:39:21 来自手机 | 只看该作者
写个6502的模拟器吧,可以做红白机

出0入89汤圆

23
 楼主| 发表于 2019-11-28 12:47:00 | 只看该作者
brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机

6502我都不知道是什么,要不这个任务你就接了吧

出0入147汤圆

24
发表于 2019-11-28 13:01:42 | 只看该作者
STM32跑这个,性能如何?

出0入89汤圆

25
 楼主| 发表于 2019-11-28 13:04:52 | 只看该作者
dreampet 发表于 2019-11-28 13:01
STM32跑这个,性能如何?

我没有测试,只是第一个版本,欢迎测试,提一下意见。我后面在改进

出0入0汤圆

26
发表于 2019-11-28 13:14:35 来自手机 | 只看该作者
直接用keil编码再放进去吗

出0入89汤圆

27
 楼主| 发表于 2019-11-28 13:41:14 | 只看该作者
huangqi412 发表于 2019-11-28 13:14
直接用keil编码再放进去吗

用keil写一段程序(51程序),生成的bin文件转成数组,直接放到stm32的代码中一起编译,当然,你可以增加一段代码,支持这部分更新,应该不难,你的分数很高了,崇拜!!

出0入0汤圆

28
发表于 2019-11-28 14:07:24 来自手机 | 只看该作者
感谢lz移植成功,vm的一个很大的用处是做加密,有了虚拟机还可以自己做指令集,模拟外设等,直接把反汇编难度再次提高

出0入0汤圆

29
发表于 2019-11-28 14:18:12 | 只看该作者

出0入0汤圆

30
发表于 2019-11-28 14:31:52 | 只看该作者
谢谢楼主分享

出5入85汤圆

31
发表于 2019-11-28 15:14:43 | 只看该作者
gongxd 发表于 2019-11-28 14:07
感谢lz移植成功,vm的一个很大的用处是做加密,有了虚拟机还可以自己做指令集,模拟外设等,直接把反汇编难 ...

还可以做多个核,51核,PIC核,AVR核的。。。。。。。。

出0入0汤圆

32
发表于 2019-11-28 15:22:40 | 只看该作者
8位虚拟机感觉太浪费宿主性能了

出0入89汤圆

33
 楼主| 发表于 2019-11-28 15:31:09 | 只看该作者
huangqi412 发表于 2019-11-28 15:22
8位虚拟机感觉太浪费宿主性能了

其实,怎么说呢,不浪费性能最好用汇编
开个玩笑啊!
其实,这个是当成一个脚本来用的,并不是要在32位上跑8位。
其实我觉得写个m0的模拟器更好,只是对m0的细节我太不了解了,51相对比较熟悉,只好退而求其次了!

出0入0汤圆

34
发表于 2019-11-28 16:08:02 | 只看该作者
很神奇的玩法。应该考虑用F4或者F7系列,主频在200MHZ以上的

出0入0汤圆

35
发表于 2019-11-28 16:10:11 | 只看该作者
youkebing 发表于 2019-11-28 10:39
根本不是这个意思啊,这个是吧c51当脚本来看,

这个很有意义,

出0入0汤圆

36
发表于 2019-11-28 16:42:59 来自手机 | 只看该作者
能测试一下性能怎么样么,估计能到 百khz 就不错了

出0入89汤圆

37
 楼主| 发表于 2019-11-28 16:46:41 | 只看该作者
gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了

现在其实不用太忙测试,因为只是第一个版本,也没有优化。
如果关注性能,至少两方面可以处理
1,代码优化,这个时候需要仔细测试。
2,把相关功能模块放到宿主中实现,宿主留出相应接口

出0入89汤圆

38
 楼主| 发表于 2019-11-28 16:47:57 | 只看该作者
gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了

另外,这个代码和原来vm8051已经有很大不同了。

出0入0汤圆

39
发表于 2019-11-28 16:57:09 | 只看该作者
下一个课题是虚拟一个双核CPU,一个8051,一个x86。
双核之间通过共享内存来通讯。
x86上安装windows操作系统,运行keil软件,将用户输入的源程序编译为bin文件,直接传送到8051核运行。

出0入89汤圆

40
 楼主| 发表于 2019-11-28 16:59:26 | 只看该作者
health 发表于 2019-11-28 16:57
下一个课题是虚拟一个双核CPU,一个8051,一个x86。
双核之间通过共享内存来通讯。
x86上安装windows操作系 ...

这个任务就交给大神你了 加油哦!!

出0入0汤圆

41
发表于 2019-11-28 17:02:03 | 只看该作者
youkebing 发表于 2019-11-28 09:17
呵呵,可以试试,也许有一点参考价值

关键是你在外面写的C8051代码,用啥编译器呢?总不能原始的字符,直接down进板子吧。。。想请教这个。。

出0入89汤圆

42
 楼主| 发表于 2019-11-28 17:07:01 来自手机 | 只看该作者
kinsno 发表于 2019-11-28 17:02
关键是你在外面写的C8051代码,用啥编译器呢?总不能原始的字符,直接down进板子吧。。。想请教这个。。
...

keil啊!还能用什么?

出0入85汤圆

43
发表于 2019-11-28 17:11:47 | 只看该作者
牛,虽然用不到,但可以学习学习。

出0入0汤圆

44
发表于 2019-11-28 18:28:43 来自手机 | 只看该作者
不错,还能这么玩

出0入0汤圆

45
发表于 2019-11-28 19:11:46 | 只看该作者
STM-32 -- 8051模拟器(虚拟机)

出0入4汤圆

46
发表于 2019-11-28 19:17:26 来自手机 | 只看该作者
楼主这个还是很牛的

出0入0汤圆

47
发表于 2019-11-28 20:34:36 来自手机 | 只看该作者
能模拟个i7吗?买不起i7,模拟一个

出0入0汤圆

48
发表于 2020-1-28 11:16:44 | 只看该作者
对lz这个进行了测试
在windows32位上,实现相同功能,实体机 i5 cpu c语言是8051虚拟机的2000倍左右
程序主要运行16位加法和比较

出0入8汤圆

49
发表于 2020-1-28 12:17:32 来自手机 | 只看该作者
proteus了解下!

出0入0汤圆

50
发表于 2020-1-28 13:33:32 | 只看该作者
不错 学习了

出0入0汤圆

51
发表于 2020-1-29 03:35:30 来自手机 | 只看该作者
这是STM里用51吗?

出0入0汤圆

52
发表于 2020-1-29 07:56:18 | 只看该作者
这可以让只会51的人用STM芯片吗

出100入101汤圆

53
发表于 2020-1-29 08:33:38 来自手机 | 只看该作者
高手,牛

出0入0汤圆

54
发表于 2020-1-29 10:24:13 | 只看该作者
不错,下载试试

出0入0汤圆

55
发表于 2020-1-29 11:15:04 | 只看该作者
高手,牛

出0入296汤圆

56
发表于 2020-1-30 17:59:16 来自手机 | 只看该作者
brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机

https://github.com/GorgonMeducer/EmbeddedNES

你要的红白机模拟器(6502模拟器)

出0入0汤圆

57
发表于 2020-2-7 21:00:03 | 只看该作者
谢谢分享

出10入284汤圆

58
发表于 2020-2-8 01:37:49 来自手机 | 只看该作者
Gorgon_Meducer 发表于 2020-1-30 17:59
https://github.com/GorgonMeducer/EmbeddedNES

你要的红白机模拟器(6502模拟器)

厉害了!!

出0入0汤圆

59
发表于 2020-2-8 13:33:38 | 只看该作者
有开源的STM32运行python脚本

出0入0汤圆

60
发表于 2020-2-8 19:42:14 | 只看该作者
学习一下

出200入0汤圆

61
发表于 2020-2-8 19:46:16 来自手机 | 只看该作者
不错,下载试试

出0入0汤圆

62
发表于 2024-3-20 04:43:35 | 只看该作者
有版本更新了吗

出0入89汤圆

63
 楼主| 发表于 2024-3-20 12:34:27 | 只看该作者

没新版本更新,发现什么问题了吗?

出0入0汤圆

64
发表于 2024-3-23 19:29:56 | 只看该作者
没有,这个很好

出0入0汤圆

65
发表于 2024-3-31 16:47:49 | 只看该作者
学习一下 Thank you

出100入312汤圆

66
发表于 2024-3-31 18:07:42 来自手机 | 只看该作者
技术贴,不错

出0入18汤圆

67
发表于 2024-4-1 11:47:36 | 只看该作者
youkebing 发表于 2019-11-28 15:31
其实,怎么说呢,不浪费性能最好用汇编
开个玩笑啊!
其实,这个是当成一个脚本来用的, ...
(引用自33楼)

可能对m0有些误解呢,m3是向下兼容m0的,即m0程序可以直接在m3上跑,不需要模拟
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 14:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表