我在寻求建立一个虚拟机变成一个游戏,不知道如果有人知道任何真正简单的虚拟机(我想RISC/PIC接近什么我想要的),通常用于嵌入式的项目,例如控制机器人、电动机、传感器,等等。我主要关注的是编写一个编译/汇编如果我滚是我自己的。我会很好用的工具已经在那里或在其最简单的形式只有C编译器,可以编纂:-p。

我真的不想要重新发明轮子,但我还需要成千上万个运行周围一个虚拟的世界,使他们有尽可能简洁,并以最快的速度成为可能。作为一个人已经提到的,我也不关心现实的世界问题这样的一个时机和车和所有有趣的东西.我觉得他们虚拟的时钟将被限制财产以后相当缓慢;最终我会很可能必须看到当地的汇编,以使它们运行得更快,但现在我只是放在一起的原型以来获得的一般概念的证明。

作为输入,我计划在距离、光、材料和触摸传感器安装在圆筒体(16个,也许32人),然后只需2电机,用于向输出控制的一种车轮。基本上处理不会太艰苦,世界将是简单的,足以使该机器的不必抛出大量的处理能力,在简单的任务。

在记忆中,我希望他们能够储存足够的数据可以单独留在一两天而不干预为建设地图和收集统计数据。我不喜欢8bit会减少它对于加工或存储但是,16位肯定会是一个竞争者。32和64位也只是推它并没有办法他们会有任何超过1mb的每一个存储器可能接近256-512k.(法案的一个说640k就足够所以为什么我不能!!)

有帮助吗?

解决方案

如果您想要在现实世界中植根,最常用的嵌入式RISC微控制器之一就是PIC系列。谷歌提供了几个仿真器,但我认为大多数仿真器都没有。

另一种可能性是QEMU,它已经模仿了几种ARM品种。

当然,如果你对模拟现实世界的设备不感兴趣,那么更容易和更好的表现就是推出自己的设备。只有您需要的东西,而不是陷入状态标志,溢出位,有限的总线宽度,RAM时序等等。

其他提示

我为一位希望在嵌入式控制器上运行VM语言的朋友写了 Wren ,其中大约有16K的内存。 (但它在代码中允许每个进程最多64k。)它包含一个用于愚蠢的小编程语言的编译器。这一切,呃,非常基本,并没有多少用处,但它正是你在第一段所描述的。

FORTH“虚拟机”就像他们来的一样简单。 16位地址空间(通常),16位数据字,两个堆栈,内存。 Loeliger的“Threaded Interpretive Languages”告诉你很多关于如何在Z80上构建FORTH解释器的信息。

如果您想要简单,请考虑曼彻斯特马克一。请参阅这一页的第15页PDF 。机器有7条指令。为它编写一个翻译大约需要一个小时。不幸的是,这些说明非常有限(这就是为什么机器的完整规格几乎可以放在一页上)。

Javier推行自己的方法非常务实。如果是这样,设计和创建一台小型机器是一项为期两天的任务。几年前我为一个项目构建了一个小型虚拟机,用一个简单的可视化调试器编写虚拟机花了两天时间。

另外 - 它必须是RISC吗?你可以选择68K,其中有开源模拟器,68K是一个众所周知的目标对于gcc。

许多人写的游戏程序和其他应用嵌入一个语言进入应用程序,以便允许用户编写的小节目。

我可以告诉,最受欢迎的 嵌入式的语言 在非常roughtly最受欢迎的优先顺序(虽然"更热门"并不一定意味着"更好")似乎是:

  • 特定领域的语言专门设计用于这一特定应用程序和使用的其他地方
  • Lua 一个
  • Tcl
  • 蟒蛇 一个 b, ,往往是一个简化的子集,例如PyMite c
  • 来回
  • JavaScript 一个
  • 口齿不清
  • AngelScript 一个
  • XPL0 一个 b
  • 松鼠 一个
  • Haskell 一个 b
  • NPCI(纳米伪C解释) 一个
  • RoboTalk
  • 解释一些硬件的机语言(为什么这是最受欢迎的选择吗?对于良好的原因,如下所述)。

你可能会想看看的游回答#,特别是在这样的问题 "你怎么添加一个脚本语言以一个游戏吗?".

你可能想看看有些问题在这里计算器上的标记 "嵌入式语言";如 "选择一个嵌入式语言", "什么是一个很好的嵌入式语言我可以用脚本里面是我的软件吗?" "替代Lua作为一个嵌入式语言?" "游戏脚本语言是更好地使用:Lua或蟒蛇?", 等等。

许多实现这些语言的使用某种 内部。通常的两种不同的实现的同样的高水平编程语言,例如JavaScript使用两种完全不同的码语言境内( 一个 ).通常的几个高级别的编程语言编制的相同的基础字节的语言--例如,Script执行情况的蟒蛇,犀牛执行JavaScript,Jacl执行Tcl,JScheme和几个其他的实现的方案,以及几个实现Pascal;所有编到同一JVM码。

详细信息

为什么使用一个脚本语言而不是解释的一些机硬件的语言?

为什么 "替代硬质和柔软的层面"?获得简单起见,并更快地发展。

更快速的发展

人们一般得到的东西的工作速度更快脚本语言,而不是编的语言。

得到的最初的原型的工作一般更加快捷--的解释处理了一堆东西幕后,计算机语言的力量,你明确地写出:设定初值的变量为零,子程序-序言和子程序-结语码,malloc和分配以及自由和相关的内存管理的东西,增加尺寸的容器时,他们得到充分,等等。

一旦你有一个最初的原型,增加新的功能是更快:脚本语言必须迅速编辑执行调试的循环,因为他们避免"汇编"阶段的编辑编-行-调试周期编制的语言。

简单

我们希望嵌入式语文的语言是"简单的"在两个方面:

  • 如果一个用户想要写一个小小的代码没有的一些概念上简单的任务,我们不想吓到这个人用复杂的语言,需要20镑的书籍和个月的研究,以便编写一个"Hello,$USER"没有缓冲区溢出。

  • 由于我们正在实施的语言,我们想要的东西很容易实现。也许是一些简单的潜在说明,我们可以敲出一个简单的解释为在一个周末,也许是某种预先存在的编译器,我们可以重复使用以最小的调整。

当人们建立处理器,硬件的限制,最后总是限制性的指示设置的。许多概念上的"简单的"行动--事人使用所有的时间-- 最终需要大量的机器语言的指令,以实施。

嵌入式的语言没有这些硬件的限制,允许我们执行 更复杂的"说明"该做的事情,(一人)似乎在概念上简单。这常常使该系统更简单 方法上所述:

  • 人直接写在语言(或人编写语文)写多少代码中,花费较少时间单逐步通过代码调试,等等。

  • 对于每个这样的较高级别的行动,我们移的复杂性,从编译程序的指令的执行情况的内部翻译。而不是(你写代码)编译器打破了一些高级操作一个简短的回路,在中间语言(和反复逐步通过这一循环,在你的解释程序在运行时),编译器发射的一个说明中的语言(和你写的一系列相同的行动在解释程序的执行,中间"指令").与所有的CPU密集的东西实在编制语言("内部的"复杂的指令),非常简单的口译员常常是超过速度不够快。(即, 你可避免花费了很多时间建立一个JIT或试图加快速度在其他方面).

由于这些原因和其他人,许多游戏的程序员都使用"脚本"的语言为他们的"嵌入式语言"。

(我现在看到的是哈维尔*已经建议"使用嵌入式脚本语言", 因此这已经成为一个长在咆哮 为什么 这是一个很好的替代解释一个机硬件的语言,并指出替代办法时的一个特别的脚本语言似乎并不合适的)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top