问题标签 [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.
c - 在 GBDK c 中使用采样音频播放时如何运行代码?
我正在为GBDK中的 GameBoy 制作游戏,并且正在尝试为游戏添加声音。GBDK 有一个函数可以从一组值中播放声音,唯一的问题是在播放声音时脚本的其余部分会冻结。有没有办法让它们同时运行?
emulation - Game Boy:不修改任何内容(例如 AND A)的指令的目的是什么?
我一直在研究 Game Boy 模拟器,我注意到存在某些永远不会改变任何值的操作码,例如LD A, A
,LD B, B
等,还有AND A
. 第一个显然不会改变任何东西,因为它们将寄存器的值加载到相同的寄存器中,并且由于AND
正在与A
寄存器进行比较,因此AND A
将始终返回A
。这些操作是否有任何目的,或者与NOP
每个周期后基本相同?
c - 打印二维数组时出现致命错误
我用一小段代码遇到了这个问题:
我正在为 Gameboy 制作一个随机生成的迷宫游戏,并且我正在使用 2d 数组来了解每个屏幕在迷宫中的位置。为了进行测试,我正在尝试打印该数组,以便在继续之前查看它是否正确生成。当我尝试用那一小段代码进行编译时,我在它的第一行得到一个错误,然后在文件 blah blah blah 中说致命的编译器内部错误。我不知道的代码中有一个很大的禁忌吗?
完整代码:
c++ - 用 C++ 编写 Gameboy 模拟器,如何测试操作码(Google 测试框架)?
我正在尝试编写 GameBoy 模拟器,但我不确定我应该如何测试我的 CPU_LR39502 类。为了避免巨大的 if-else-if / switch-case 语句,我想出了将操作码仿函数放入 map 的想法,它以操作码为键:
和它的例子:
这不知何故让我想到了两个问题。实际上,我想在将操作码添加到 m_baseOpcodeMap 时立即编写操作码的实现,但为了使其可测试,我将实现写为成员函数(此处以 bitwiseRotationLeft 为例),并在 lambda 中调用它 - 我不确定这是否是正确的做法。
目前,为了测试一些实现,我有这样的东西(使用谷歌测试框架):
但要访问 CPU_LR35902 的私有成员,我必须添加
在 CPU_LR35902 类中 - 之后我可以访问 TEST_F 中测试类的私有成员,但我无法在 CPUTest 类中访问它们(用于 SetUp / TearDown)。考虑到这样一个事实,即我有更多的测试并且我将有很多测试,我认为为每个测试添加 FRIEND_TEST 会使一切看起来都不好看。我接触 C++ 有一段时间了,但是我在使用 Google Test Framework 方面的经验完全为零,而且我的直觉告诉我必须有更好的方法来做到这一点。任何线索将不胜感激:)
c - 带有系统寄存器和中断的 GameBoy 编译器
我花了很多时间学习 GameBoy 编程,因为我已经熟悉 Z80 Assembly,所以我不害怕投入使用它。我(当然)会发现用 C 或 C++ 编程效率更高,但是找不到适用于 GameBoy 的完整编译器,我可以找到的编译器自己管理所有内容,并且不向程序员提供对系统寄存器的访问权限,并且还有一些可怕的缺点,例如 100% CPU 利用率和不支持中断。
是否可以像 Arduino 的 AVR 编译器一样寻址系统寄存器?能够简单地使用其名称来寻址 CPU 或系统寄存器,例如DDRD = %10101011
我需要做什么才能将中断和系统寄存器添加到编译器中?除了一个系统寄存器之外,所有寄存器都只有一个字节的内存地址,中断向量当然是内存位置,唯一一个不是内存地址的系统寄存器只能用两条汇编指令修改EI
,DI
但这可能是内联函数,对吗?
android - 在 Android Wear 中以低位模式进入 BW 真的可以为所有设备节省电池吗?
我最近在 Google Play 商店上安装了一个 Android Wear 表盘:https: //play.google.com/store/apps/details?id=com.watchfuldesign.wearboy&hl=en
我最近收到了这篇评论:
“请添加选项以在游戏机屏幕上添加一个月中的一小天,并且不要黑白显示,因为这不会为每个人节省电池电量。”
真的吗?我曾认为通过在环境模式下进行黑白模式可以节省电池 - 特定设备不是这样吗?
我在 Android 的开发者网站上阅读了以下内容:
“一种减少色彩空间的节能方法是使用“低位”模式。在低位模式下,可用颜色仅限于黑色、白色、蓝色、红色、洋红色、绿色、青色和黄色。在设计时对于低位环境模式,使用黑色或白色背景。对于 OLED 屏幕,您必须使用黑色背景。非背景像素必须小于总像素的 10%。您最多可以使用低位颜色支持它的屏幕上 5% 的像素。” https://developer.android.com/design/wear/watchfaces.html#SpecialScreens
我相信这似乎与审稿人所说的相矛盾,但我不确定。有谁知道哪些模式应该去 BW,哪些不需要省电?
(我的表盘颜色看起来好多了,所以我不想让它在省电模式下变成 BW——它真的可以帮助我销量下滑!)
提前致谢!
assembly - GBDK 编译器中的二次幂乘法错误
我目前正在开发一个gameboy模拟器并测试我的模拟器的正确性,我正在使用GBDK为我的模拟器编译c程序。
我注意到编译器(如预期的那样)通过旋转来优化乘法与常量的乘法,这些常量是 2 的幂。但是,对于给定的功率,它似乎不会产生正确的旋转量。
例如以下非常简单的程序:
生成以下程序集:
对我来说这似乎是不正确的,因为 RR 指令实际上是通过进位标志旋转的,有效地使其成为 9 位旋转。这意味着应该有一个额外的旋转来产生正确的结果,而不是当前 (0x40) 的错误结果。
可视化:
谁能验证这确实是GBDK附带的SDCC编译器中的一个错误?我也对旋转后使用 and 指令感兴趣。
使用来自 sourceforge 的最新 (3-2.93) 版本的 GBDK for windows。
interrupt - 在启用主中断但未启用中断 (0xFF0F = 0) 的情况下进入 HALT 模式?
根据Gameboy 编程手册,
HALT 模式由以下事件取消,这些事件具有指示的起始地址。
/RESET 端的低电平信号起始地址:0x0000
设置中断使能标志及其对应的中断请求标志
IME = 0(中断主机使能标志禁用) 起始地址:HALT 指令之后的地址
IME = 1(中断主使能标志使能) 起始地址:每个中断起始地址
假设程序进入HALT
模式,启用中断主使能标志IME = 1
和禁用任何中断的中断使能0xFF0F = 0
,会发生什么?实际 Gameboy 设备上的预期行为是什么?
variables - MASM - 宏变量?
这是我在这里的第一个问题,希望您能帮助我!我目前正在开发一个 GameBoy 模拟器,并想用 MASM 编写它,为了处理 CPU 指令,我想创建一个带有变量的数组,以便我更容易访问。
这是我想要实现的示例:
如果我想从 PARAM_TABLE 中获取一个值,它应该像这样工作:
所以基本上我的想法是创建像 REGISTER_A 这样的变量以使其更易于访问。我希望你能理解我。也许可以用宏来做到这一点?
z80 - Game Boy 上 CP 的进位标志的行为是什么?
在Game Boy CPU 手册的第 87 页上,声称该CP n
指令在没有借位时设置了进位标志,这意味着A < n
. 这似乎与自身冲突,因为进位标志是在A > n
.
一个例子:如果A=0
和B=1
,CP B
设置标志如SUB A, B
,即 0 - 1。这变为 0 + 255 = 255 并且未设置进位标志,即使A < B
.
我在其他 Z80 文档中也遇到了同样的问题,所以我不认为这是一个错字。
我是否误解了借贷和SUB
工作的方式,还是发生了其他事情?在标志方面不SUB
等于ADD
与二进制补码?