-1

我一直在尝试为 Game Boy Advance 的 Z80 处理器使用的自定义语言编写一个简单的脚本编译器。

我想要它做的就是查看一个人类可读的命令,获取它及其参数并将其转换为十六进制值到 ROM 文件中。而已。每个命令都是一个字节,每个命令都可以采用不同数量的参数 - 参数可以是 8、16 或 32 位,每个命令都有特定数量的参数。

所有这类代码都由游戏处理并在游戏内存中转换为可用的机器代码,所以如果你愿意的话,我不会编写一个完整的汇编编译器。游戏会自动知道一个命令有多少个 args,每个命令做什么,确切地如何执行它等等。

例如,您有命令 0x4E,它接受一个 8 位参数和另一个 32 位参数。在十六进制中,这显然是4E XX YY YY YY YY. 我希望我的编译器从文本中读取它foo 0xXX 0xYYYYYYYY并直接将其写入文件作为前者。

我的问题是,我将如何在 VB.NET 中做到这一点?我知道这可能是一个非常简单的答案,但我看到很多不同的选项可以将它写入文件——有些工作,但大多数不适合我。你能给我一些示例代码来说明我将如何做到这一点吗?

4

2 回答 2

1

据我了解,编写汇编编译器并不是那么简单。我建议你使用一个已经写好的见:Z80 系列的软件开发工具

如果您仍然对编写它感兴趣,这里有说明:

  1. 将要翻译的文本写入某个文件(或内存流)
  2. 逐行阅读
  3. 解析行将其拆分为数组或使用正则表达式
  4. 识别命令和参数(据我所知,有些命令没有参数)
  5. 将命令翻译成十六进制(带有命令集合或字典)
  6. 将结果写入数组,记住跳转地址的引用
  7. 翻译完所有内容后,解析地址并将它们写入正确的位置。

我认为最棘手的部分是处理符号收件人。如果您仍然有兴趣编写第一段代码(或询问如何做)并继续下一段。

于 2013-05-25T14:58:05.140 回答
0

这听起来像一个汇编程序,即使它是一种“自定义语言”。从解析命令行开始。使用 string.split 方法将字符串转换为字符串数组。数组中的第一个元素是 your foo,然后您可以查找并输出 4E,然后将后续元素转换为字节。

于 2013-05-25T14:43:36.113 回答