gpt4 book ai didi

c - GameBoy 颜色模拟器操作码自动化

转载 作者:行者123 更新时间:2023-12-04 12:00:54 31 4
gpt4 key购买 nike

我正在用 C 编写一个 GameBoy 颜色模拟器,只是为了向这个世界介绍自己,它被解释,没有动态或静态重新编译:P

现在我正忙于用 C 代码实现所有 CPU 操作码的乏味任务,我必须编写所有这些:http://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html我不想从另一个模拟器中获取它们。

问题是,是否有某种方法可以自动编写操作码?也许这是一个愚蠢的问题,它会有一个愚蠢的答案,但我想尽可能少地工作。 :)

最佳答案

我以前做过这种事情,我做的方式是使用宏,但是这样做最终会导致大量代码重复,这会溢出 cpu 缓存并使事情变慢。如果我今天这样做,除了晦涩/罕见的操作码外,我会摆脱整个“操作码切换/可跳转”习语,并使用一些基于操作码编号。想想这样的事情:

operand1 = regs[operand1_table[opcode]];
operand2 = regs[operand2_table[opcode]];
res[ADD] = operand1+operand2;
res[SUB] = operand1-operand2;
res[OR] = operand1|operand2;
/* ... */
regs[dest_table[opcode]] = res[optype_table[opcode]];

这段代码当然过于简化了,但可以扩展以处理内存操作数等。还要注意,跳转指令只是一条以程序计数器作为其操作数之一的加法指令。

对于像 Z80(或其 GB 变体)或 x86 这样的 CISC 架构,您还必须处理条件代码标志。然而,它们可以作为第二组计算来完成,如 res[...] = ...;上面的。

关于c - GameBoy 颜色模拟器操作码自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430545/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com