问题标签 [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 - Difference between RL n and RLA CPU instructions
According to the GameBoy manual, these instructions are as follows:
rla 17 4 000c rotate akku left through carry
rl r CB 1x 8 z00c rotate left through carry
However, I'm having hard time understanding the difference between them from the implementation point of view. Can someone clarify?
c - Game Boy GPU 和任天堂徽标
我正在尝试开发自己的 GB 模拟器,但在实现 GPU 时遇到了一些麻烦。我决定开始打印任天堂的启动标志,但没有成功。显然,问题是字节顺序,根据这个已经解决的问题:How to decode the Nintendo logo from gameboy?. 但是,我不明白对十六进制字符串进行排序所遵循的标准。有人可以请赐教吗?整个模拟器都需要这个排序过程吗(我的意思是,对于实际的游戏模拟。我在阅读 CPU 手册时没有注意到它)?
intel - 带有 Z80 处理器的任何东西都可以运行 Gameboy 游戏吗?
由于 Gameboy 的处理器 LR35902 是 Z80 和 Intel 8080 的混合体,请记住,Z80 和 Intel 8080 的设计基本上是交叉兼容的,任何具有 Z80 处理器的东西都可以运行以下操作码吗?适用于LR35902?我想知道不是因为我希望用我的 TI84 在自习室玩口袋妖怪。
编辑:我知道我必须重新编程控件,可能还有游戏访问 RAM 的方式,但我宁愿这样做,也不愿移植整个游戏。
gpu - GPU/PPU 计时如何在 Gameboy 上运行?
我正在编写一个游戏机模拟器,我已经开始实现图形了。但是,就时序/时钟周期而言,我不太清楚它是如何与 cpu 一起工作的。CPU 是否执行一定数量的周期(如果有的话)然后将其交给 GPU?还是游戏机总是处于 hblank/vblank 状态,而 GPU 在它们之间使用 CPU?我找不到任何可以帮助我的信息,只有如何使用控制寄存器。
c - GBDK -- 无法检查“If 语句”条件
我是 C 语言编程的新手。我只是决定把它捡起来玩;我有 Javascript、Java 和其他一些语言的爱好者经验。无论出于何种原因,我决定在为 Gameboy Classic 开发程序的背景下学习 C。所以我安装了GBDK,我知道它已经过时了。它带有一个 LCC 编译器。我使用 VisualBoy Advance 来模拟我的程序。
我正在尝试创建一个简单的 Breakout 克隆。到目前为止,我已经成功地使用用户输入对桨进行了编程。但是,我遇到了球的问题:它没有检查与桨的碰撞。在其他网站上进行了大量测试、研究和询问后,我仍然无法解决这个问题。
这是完整的代码:
问题在于一个“if 语句”。具体来说,:
健康)状况。它只是不工作。我换了一个在程序的其余部分根本没有改变的测试变量;失败。它工作的唯一方法是如果我硬编码一个值(例如 96)。但是,这显然很糟糕,因为无论何时桨移动它都不会改变。
我完全被这个问题难住了。我是 C 新手,但这似乎是一件简单的事情。我的编译器坏了吗?我是不是在无意中做错了什么?请记住,这是使用 Gameboy Dev Kit 设计的,模拟为经典的 Gameboy 游戏。
任何帮助表示赞赏。谢谢!
已解决:奇怪的解决方案。我没有将 24 添加到paddleX
,而是减去 -24。无论出于何种原因,这都按预期工作。
c - 在 C 中定义宏时遇到问题 - 初始值设定项元素不是常量
我正在为 Game Boy Advance 编程,我需要为每个区域(一堆 RAM 和 ROM)列出内存位置。
但是,在头文件中定义宏时,编译器指出在一个宏中,error: initializer element is not constant
.
这是我从 Tonc 借来的完整头文件(大约 90 行):
但是,我最初的代码中没有这两行:
#define GAMEPAK_RAM 0x0E000000
和
#define save_mem ((u8*)GAMEPAK_RAM)
如果你注意到了,我故意定义save_mem
几乎完全一样vid_mem
,只是我需要将其转换为,u8
因为 RAM 一次只能读/写 8 位。
然后我想如果有错误,那么两条线都应该有错误。然而,只有save_mem
被抓住了error: initializer element is not constant
。(我个人注释掉了这save_mem
条线,看看是否vid_mem
会有这个问题。)
另外,我已经在为 GBA 编写游戏,而且我已经多次使用 vid_mem,所以这让我更加困惑。
我想知道为什么会发生这种情况以及如何解决它。(很确定我的编译器很好)
提前致谢。
编辑:
这是我使用save_mem
宏的代码:
c - 获取游戏男孩 ROM 映像
我已经开始用 C 语言为游戏男孩开发一个非常简单的模拟器,我已经研究过 Z80 的 cpu 和相关的操作码,但我心中有一个问题我从未找到答案。当我使用 fopen(filename,"rb") 打开 ROM 映像时,如何获得模拟指令?我尝试过这样做:
fp = fopen(filename,"rb");
fread(buf,sizeof(buf),1,fp);
但我不知道 Game Boy 的 ROM 是如何构成的。有人可以解释一下如何从 ROM 中获取指令及其结构吗?
c++ - GameBoy Classis 模拟器 - 如何初始化 VRAM (0x8000)
我目前正在编写一个 GameBoy Classis 模拟器。这是 GitHub-repo ( https://github.com/FelixWeichselgartner/GameBoy-Classic-Emulator )。
CPU指令似乎工作正常。我将这些指令与这个 gameboy 调试器 ( http://bgb.bircd.org/ ) 的指令进行了比较。对于俄罗斯方块即时执行相同的指令。
我的问题是关于图形的。我已经实现了一个从正确地址获取图块的函数(取决于使用的图块集)。但是我不知道如何初始化视频 RAM(@地址 0x8000)。我将内存中的 32kB 俄罗斯方块 rom 从地址 0x0000 复制到 0x7FFF。因此,从 0x8000 开始的所有内容都没有在这里初始化。在调试工具和我的代码中都没有写入 vram 的内容(来自 cpu 操作码指令)。
因此,我预计我将不得不初始化 VRAM。但是,当某些内容写入 VRAM 时,我无法在线找到任何资源。
所以我的问题是:gameboy 模拟器的哪个实例负责复制 VRAM 中的图块。
我已经尝试过的:
使用另一个模拟器进行调试-> 这表明没有 cpu 指令复制到 VRAM。
查看 Github 上的各种游戏机模拟器 -> 找不到任何人初始化 VRAM
我有人能够帮助我,我将非常感激。
问候 schnauzbartS
c# - 如何在 GameBoy Color 中获得正确的颜色?
我写GameBoy Color Emulator是为了好玩和学习。为Gameboy 经典版生成颜色效果很好,但在彩色版模拟器中生成的颜色不好。
我声明了 BPI, BPD 和 OPI, OPD。我设置了从背景内存和精灵中提取颜色,并像在经典版本中一样将其更改为十六进制颜色。在某些情况下,某些元素具有正确的颜色。
BPI、BPD 和 OPI、OPD:
从内存中写入BPI、BPD、OPI、OPD
从内存中读取BPI、BPD、OPI、OPD
更新背景
更新精灵
更新窗口
更新图形
获取 GBCColor
它应该如何工作菜单:
https
://photos.app.goo.gl/M2QTHVTzoPS1jiKS9
就像他们现在
所做的那样: https
:
//photos.app.goo.gl/GW7SCm3ZXHyxRikGA 第一个游戏男孩颜色的房间:
https://photos .app.goo.gl/BNHDgmuPw5j1c9Lq6
在我的模拟器第一个房间:
https ://photos.app.goo.gl/934tm2X1jEazkcPK7
我关心最简单的解决方案提前谢谢