问题标签 [gameboy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emulation - 操作码 0xE9 (JP HL) 和 0xF8 (LD HL,SP+r8) 有什么作用?
我想我正在努力正确定义以下模棱两可的操作码:LD HL,SP+r8
和JP (HL)
操作码(0xE9
和0xF8
分别)
在我的实现中,LD HL,SP+r8
设置HL
为 的值SP+r8
,但我感觉这可能与从 RAM 加载内存有关。
JP (HL)
,我PUSH
将 PC 放入堆栈并将程序计数器设置为 HL 的值(如JP a16
,除了 HL 的值),但我读过一些论坛似乎说这是错误的。
对这些说明中的任何一个所做的任何澄清都会很棒,因为我现在很迷茫。
emulation - Game Boy 和 Game Boy Color 在仿真方面有什么区别?
我正在为游戏男孩颜色编写一个模拟器(为了好玩)。我为原始游戏男孩的硬件找到了大量资源和参考资料,即 Imran Nazar 的教程 ( http://imrannazar.com/GameBoy-Emulation-in-JavaScript ) 和 Zak 的书(Z80 指令参考)。我也一直在寻找一些开源模拟器来填补空白。
我无法弄清楚或找不到任何资源的一件事是 GBC 的内存布局及其 gpu。GBC 的内存是游戏男孩的 3 倍,LCD 显示器支持 15 位颜色而不是 2 位。所以肯定有一些事情需要考虑。
任何帮助将不胜感激。:)
c - 是否可以创建两个 uint8_t 指针指向 uint16_t 指针指向的值的前半部分和后半部分?
我正在尝试用 C 编写 Gameboy 模拟器,目前正在决定如何实现以下行为:
- 两个 8 位寄存器可以组合起来当作一个 16 位寄存器处理
- 更改配对中 8 位寄存器之一的值应更改组合寄存器的值
例如,寄存器 A 和 F 是 8 位寄存器,可以联合用作 16 位寄存器 AF。但是,当寄存器 A 和 F 的内容发生变化时,这些变化应反映在后续对寄存器 AF 的引用中。
如果我将寄存器 AF 实现为 a uint16_t*
,我可以将寄存器 A 和 F 的内容存储为uint8_t*
分别指向寄存器 AF 的第一个和第二个字节吗?如果没有,任何其他建议将不胜感激:)
编辑:澄清一下,这是与 Z80 非常相似的架构
assembly - 使用我自己的非 ASCII 字符映射作为十进制,使用 LR35902 程序集将无符号 16 位整数从 HL 转换为文本
我需要弄清楚如何为 LR35902(Game Boy 的类似 Z80 的 CPU)制作一个例程,它将获取 HL 的内容(不是它指向的位置,存储在其中的实际数字)并将其转换为 1 到 5 (实际值范围从 0 到 65,535,因为 HL 是 16 位)使用十进制系统的非 ASCII* 字符。我有要打印的例程,并且可以很容易地找到一种裁剪前导零的方法。
我所需要的只是这个函数的至少一些伪代码和一个实际的RGBDS LR35902 ASM 例程。
*我使用自己的 1-byte-per-character charmap 代替 ASCII,其中字符 0 是十六进制字节 $17,一直增加到 9,即 $20。
lua - Lua:读取未签名的 DWORD 在 Bizhawk 模拟器中不起作用
当我运行我的代码时,我在这一行得到一个错误:
这是控制台给出的错误消息:
我已经对此进行了一段时间的测试和研究,尽管在其他几个项目中使用了这个概念,但我无法让它工作,例如:https ://projectpokemon.org/forums/showthread.php?16681-Gen -3-Lua 脚本
其他一些信息:
1. 我在 BizHawk 模拟器上运行 lua 脚本。
2. 如果我将行更改为 memory.readbyte() 我会收到一条不同的消息,这使我相信控制台无法将 memory.readdwordunsigned() 识别为函数。
3. 该脚本与模拟器的可执行文件位于同一文件夹中。
预先感谢您的任何帮助
variables - 如何在 Z80 装配体中创建变量?
我正在尝试创建一个包含十六进制值的简单变量0xffff
。我已经能够将它作为一个宏来使用SET
,但我无法让它与类似的东西一起使用ld _time,$ffff
。如何将值加载到 中_time
?
c# - 为我的 GameBoy 模拟器使用 NAudio
我已经开始在我的 GB 模拟器中实现音频,为此我正在使用 NAudio。模拟器将输出计算为字节数组,并在每一帧之后将其加载到 BufferedWaveProvider 中。对于输出,我使用 WaveOut,它是在第一个字节数组加载到 BufferedWaveProvider 之后开始的。
它似乎工作得很好,但因为这是我第一次用音频做东西,所以我想知道这是否是正确的做法。
另外,如果您知道如何使四边形波听起来更好或类似的东西,请告诉我。
assembly - gameboy ~Z80 处理器中指令 LD A,(C) 的长度
您好,我正在为 Game Boy 编写模拟器。
我使用这个参考:Gameboy CPU (LR35902) 指令集
该文档指出操作码:
和
长度为 2。
Game Boy CPU 手册分别说这些说明:
将地址 $FF00 + 寄存器 C 处的值放入 A。
和
将 A 放入地址 $FF00 + 寄存器 C。
我认为它的长度为 1 因为操作码是自给自足的,它不需要解释另一个值。如果它的长度为 2,那么第二个字节的用途是什么?
emulation - 我可以在 SUB 指令 gameboy 仿真中使用两个补码吗?
您好,我正在为 Game Boy 编写模拟器。
我正在努力使用 SUB 指令
给定a = 0x90
。
我正在做的是:
我使用 2 补码方法进行减法。
所以减法等价于下面的加法:
在这个过程中,没有进位,也没有半进位,所以我不设置标志。而且我认为这是一个错误,因为其他仿真器(例如BGB确实如此。请注意,结果是正确的,只有标志不正确。
所以我想真正的处理器不使用 2 补码方法,因为没有免费的方法来检索进位和半进位。
不过,我可以使用两个补码来模拟带有标志处理的 SUB 指令,还是应该依赖“经典”减法逻辑?