youkebing 发表于 2019-11-28 09:13:59

[开源]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非常好用))

90soso 发表于 2019-11-28 09:15:46

纯技术贴。路过帮顶~~{:biggrin:}

youkebing 发表于 2019-11-28 09:17:21

90soso 发表于 2019-11-28 09:15
纯技术贴。路过帮顶~~

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

CoolBird007 发表于 2019-11-28 09:17:57

也就是说STM32终于可以实现51的功能了。。。{:lol:}{:lol:}{:lol:}

hcambridge 发表于 2019-11-28 09:19:12

lz很有想法啊,用32位单片机实现了一个8位单片机模拟器,然后在上边运行51程序!

youkebing 发表于 2019-11-28 09:37:34

CoolBird007 发表于 2019-11-28 09:17
也就是说STM32终于可以实现51的功能了。。。

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

youkebing 发表于 2019-11-28 09:39:43

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

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

411412 发表于 2019-11-28 09:54:53

楼主厉害

daFish 发表于 2019-11-28 10:26:54

这是个很有意思的项目

ayumi8 发表于 2019-11-28 10:33:57

{:lol:}我以前是玩C51 的 后来终于整上了 STM32然后你又弄个虚拟机 让我回到C51嘛不不不

youkebing 发表于 2019-11-28 10:39:00

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

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

LCRPN 发表于 2019-11-28 10:44:37

楼主你这个既能执行.bin又能解析.c ?

浮华一生 发表于 2019-11-28 10:46:36

LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?

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

lcw_swust 发表于 2019-11-28 10:50:05

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

zheng8648 发表于 2019-11-28 10:55:04

很有意思的一个项目{:smile:}

nade 发表于 2019-11-28 11:01:51

我等不才还在嵌入式入门到放弃,大神都无聊到从放弃嵌入式到51了

muniao 发表于 2019-11-28 11:02:04

支持支持!

WHOOK 发表于 2019-11-28 11:07:23

技术研究需要反反复复嘛,有时间与精力支持折腾!

youkebing 发表于 2019-11-28 11:20:52

LCRPN 发表于 2019-11-28 10:44
楼主你这个既能执行.bin又能解析.c ?

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

FireBrain 发表于 2019-11-28 11:25:42

很有趣,可以试试把arm9的uarm虚拟机移植到stm32上,就可以跑linux了

youkebing 发表于 2019-11-28 11:29:15

muniao 发表于 2019-11-28 11:02
支持支持!

你的los很牛叉!!

brother_yan 发表于 2019-11-28 11:39:21

写个6502的模拟器吧,可以做红白机

youkebing 发表于 2019-11-28 12:47:00

brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机

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

dreampet 发表于 2019-11-28 13:01:42

STM32跑这个,性能如何?

youkebing 发表于 2019-11-28 13:04:52

dreampet 发表于 2019-11-28 13:01
STM32跑这个,性能如何?

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

huangqi412 发表于 2019-11-28 13:14:35

直接用keil编码再放进去吗

youkebing 发表于 2019-11-28 13:41:14

huangqi412 发表于 2019-11-28 13:14
直接用keil编码再放进去吗

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

gongxd 发表于 2019-11-28 14:07:24

感谢lz移植成功,vm的一个很大的用处是做加密,有了虚拟机还可以自己做指令集,模拟外设等,直接把反汇编难度再次提高

Excellence 发表于 2019-11-28 14:18:12

{:lol:}{:lol:}{:lol:}{:victory:}{:victory:}{:victory:}

zwjiang8212 发表于 2019-11-28 14:31:52

谢谢楼主分享

WHOOK 发表于 2019-11-28 15:14:43

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

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

huangqi412 发表于 2019-11-28 15:22:40

8位虚拟机感觉太浪费宿主性能了

youkebing 发表于 2019-11-28 15:31:09

huangqi412 发表于 2019-11-28 15:22
8位虚拟机感觉太浪费宿主性能了

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

rifjft 发表于 2019-11-28 16:08:02

很神奇的玩法。应该考虑用F4或者F7系列,主频在200MHZ以上的{:lol:}

霸气侧漏 发表于 2019-11-28 16:10:11

youkebing 发表于 2019-11-28 10:39
根本不是这个意思啊,这个是吧c51当脚本来看,

这个很有意义,

gongxd 发表于 2019-11-28 16:42:59

能测试一下性能怎么样么,估计能到 百khz 就不错了

youkebing 发表于 2019-11-28 16:46:41

gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了

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

youkebing 发表于 2019-11-28 16:47:57

gongxd 发表于 2019-11-28 16:42
能测试一下性能怎么样么,估计能到 百khz 就不错了

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

health 发表于 2019-11-28 16:57:09

下一个课题是虚拟一个双核CPU,一个8051,一个x86。
双核之间通过共享内存来通讯。
x86上安装windows操作系统,运行keil软件,将用户输入的源程序编译为bin文件,直接传送到8051核运行。

youkebing 发表于 2019-11-28 16:59:26

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

这个任务就交给大神你了{:lol:} 加油哦!!

kinsno 发表于 2019-11-28 17:02:03

youkebing 发表于 2019-11-28 09:17
呵呵,可以试试,也许有一点参考价值

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

youkebing 发表于 2019-11-28 17:07:01

kinsno 发表于 2019-11-28 17:02
关键是你在外面写的C8051代码,用啥编译器呢?总不能原始的字符,直接down进板子吧。。。想请教这个。。
...

keil啊!还能用什么?

网络孤客 发表于 2019-11-28 17:11:47

牛,虽然用不到,但可以学习学习。

ju2320601 发表于 2019-11-28 18:28:43

不错,还能这么玩

easier 发表于 2019-11-28 19:11:46

STM-32 -- 8051模拟器(虚拟机)

carefree1986 发表于 2019-11-28 19:17:26

楼主这个还是很牛的

love_zjb 发表于 2019-11-28 20:34:36

能模拟个i7吗?买不起i7,模拟一个

gongxd 发表于 2020-1-28 11:16:44

对lz这个进行了测试
在windows32位上,实现相同功能,实体机 i5 cpu c语言是8051虚拟机的2000倍左右
程序主要运行16位加法和比较

skype 发表于 2020-1-28 12:17:32

proteus了解下!

dearterry30 发表于 2020-1-28 13:33:32

不错 学习了

xinzui 发表于 2020-1-29 03:35:30

这是STM里用51吗?

joesonzzy 发表于 2020-1-29 07:56:18

这可以让只会51的人用STM芯片吗

fengyunyu 发表于 2020-1-29 08:33:38

高手,牛

wwkkww 发表于 2020-1-29 10:24:13

不错,下载试试

dongwang_fl 发表于 2020-1-29 11:15:04

高手,牛

Gorgon_Meducer 发表于 2020-1-30 17:59:16

brother_yan 发表于 2019-11-28 11:39
写个6502的模拟器吧,可以做红白机

https://github.com/GorgonMeducer/EmbeddedNES

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

cyjkai 发表于 2020-2-7 21:00:03

谢谢分享

brother_yan 发表于 2020-2-8 01:37:49

Gorgon_Meducer 发表于 2020-1-30 17:59
https://github.com/GorgonMeducer/EmbeddedNES

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

厉害了!!

cqfeiyu 发表于 2020-2-8 13:33:38

有开源的STM32运行python脚本

shwind 发表于 2020-2-8 19:42:14

学习一下

wahaha 发表于 2020-2-8 19:46:16

不错,下载试试

wzbtp 发表于 2024-3-20 04:43:35

有版本更新了吗

youkebing 发表于 2024-3-20 12:34:27

wzbtp 发表于 2024-3-20 04:43
有版本更新了吗
(引用自62楼)

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

wzbtp 发表于 2024-3-23 19:29:56

没有,这个很好

liang16888 发表于 2024-3-31 16:47:49

学习一下 Thank you

akey3000 发表于 2024-3-31 18:07:42

技术贴,不错

fcm32 发表于 2024-4-1 11:47:36

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

可能对m0有些误解呢,m3是向下兼容m0的,即m0程序可以直接在m3上跑,不需要模拟{:smile:}
页: [1]
查看完整版本: [开源]8051模拟器(虚拟机),有stm32测试范例