问题标签 [game-boy-advance]

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.

0 投票
1 回答
86 浏览

c - DevkitARM,模拟器上的白屏如果我在代码中使用for循环?

此代码效果很好,并按预期输出像素:

但是每当我尝试添加 for 循环并从中更改 vram 值时,我在模拟器上得到白屏,它编译时没有错误甚至警告,但我在模拟器上得到白屏。

0 投票
1 回答
100 浏览

c - 为将移动数据的二维地图选择最佳数据结构

我需要一些帮助来实现更快的方法来对二维数组进行完全移位。

我的问题是我有一个包含游戏地图数据的二维数组。这个游戏有点像几何冲刺,但在 Game Boy Advance 上。到目前为止,我有一张看起来像这样的地图:

但是要阅读这张地图,我必须遍历每一个元素,看看它是否应该被绘制到屏幕上(x >= 0 && x <= screen_width)。

考虑一下,我认为我应该使用双向链表。这样,我可以通过将标题节点移动到拖车来移动列表,然后只绘制前 15 个节点的(左右)数据。与循环遍历 2D 数组中的每个元素相比,这是否会提高性能?虽然循环不一定是破坏游戏的性能缺陷,但我确实想优化它。

如果是这样,我将如何实现这个双向链表以包含与二维数组相同的数据?

0 投票
0 回答
37 浏览

c - gfx2gba 无法正确转换图像

我正在使用 devkitARM 工具链制作 GBA 游戏,我想开始使用精灵。我正在使用一个非常简单的教程,它告诉我使用 gfx2gba 将我的位图转换为 C 数组。这是我的位图:

位图

万一出现任何问题,我会处理数组并将其转换回图像,但是某些东西会破坏图像或类似的东西:

错误的

顺便说一句,我可能在将其转换回来时更改了调色板,但这不是主要的。

我究竟做错了什么?我的 gfx2gba 命令是gfx2gba -fsrc -c16 -t8 bitmap.bmp. 这是生成的C文件:

这是调色板:

编辑:如果有人想查看代码,这是我用于转换回图像的 Python 脚本:

0 投票
1 回答
320 浏览

debugging - 如何使用 GDB 进行调试

我是模拟器的新手。现在我尝试查看 mgba(GBA Emulator) 的 src 代码。

https://github.com/mgba-emu/mgba

我建立并找到了 option -g

-g选项意味着Start GDB session (default port 2345)来自帮助。

可以用GDB调试吗?

如何使用 GDB 进行调试?

请告诉我如何或其他方法来跟踪源代码?

(对不起我的英语不好。)

0 投票
1 回答
34 浏览

memory - 将 MMIO 请求重定向到另一个地址

我正在尝试修改 GBA/NDS 游戏,以便可以通过网络上的控制器以编程方式控制它们。

游戏通过只读的 0x4000130 设备寄存器读取输入。反正有没有将读取重新路由到这个地址到另一个地址?另一个地址是 R/W 并存储来自控制器的输入。

具体来说,GBA/NDS 是裸机嵌入式设备,所以我不太确定这是否可能。我是否需要以某种方式重定向地址总线内的地址以获取该特定地址?是否需要修改 BIOS 以允许此类重定向?

0 投票
1 回答
93 浏览

c++ - 错误:“公共”之前的预期标识符

我目前正在尝试为 GBA Game Jam 制作 GBA 游戏,无论如何我在尝试编译时基本上已经消除了所有错误我认为这些最后的错误是相互关联的,所以无论如何这是我认为的错误所有连接到:

以下是其余的错误:

无论如何,这里是您可能需要查看的脚本部分(尽管如果您认为它可能在其他地方,请随时询问):

引擎.cpp:

引擎.h:

如果你能帮忙请做

提前致谢

0 投票
0 回答
42 浏览

c - 尝试使用简单的计时器和按位 & 检查为精灵设置动画

我正在尝试制作一个简单的Game Boy Advance 游戏,它有一个带有四帧动画的精灵。
我是 C 编程的新手(我是一个汇编爱好者,ARM 汇编对我来说更有意义,但我放弃了,因为它读取数据并将数据移动到其寄存器的能力有限)而且我很难理解如何做事。
下面的代码应该在每一帧增加变量 i,并循环播放玩家精灵的四个可能图形之一。(这就是0x200x280x20和所0x30代表的)。但是当游戏运行时,它只显示精灵,就好像我刚刚将精灵属性设置为0x30并且永远不会改变一样。
基本上我的 if 语句没有效果,我真的不明白为什么。

C代码:

这将产生以下 ARM 代码:

0 投票
0 回答
111 浏览

c - 使用 gcc 将汇编代码与 C 结合起来

我试图结合一个简单的汇编程序将数据从一个地方复制到另一个地方(基本上是 Z80 的 LDIR 命令的 ARM 等效项)。我遇到的问题是如何GCC将它与我的C代码结合起来。我之前有它工作过,但我忘记了我做了什么,因为我没有维护旧的批处理文件(错误号 1)。然后我尝试从内存中重新创建它并最终删除了我的 hello.c 文件!(错误编号 2)。幸运的是,我只花了大约 15 分钟就重写了它,因为其中大部分是来自其他文件的包含语句。

的源代码在这里asm,这是我的批处理文件:

我不确定如何链接memcpy.ohello.chello.elf(无论哪个需要它)。我在这里读到最好使用 C 编译器进行链接而不是手动调用ld,但我真的不明白该怎么做。Batch不是我的强项,不幸的是,我似乎必须知道如何使用它才能让任何事情发挥作用。

0 投票
1 回答
45 浏览

c - “赋值使指针从整数不强制转换”警告在函数间不一致

我正在使用这个头文件为 Game Boy Advance 创建两个与屏幕相关的函数。第一个函数ClearScreenWithColor获取红色、蓝色和绿色的值,并用该颜色擦除位图屏幕。第二个应该设置或清除更改颜色显示方式的未记录显示寄存器。由于这些是内存映射端口,因此必须将数据写入特定的内存地址。变量ScreenREG_GREENSWAP代表适当的内存地址。这是下面的代码。

当我编译文件时,我收到以下警告:

话虽如此,该函数ClearScreenWithColor不会产生此错误消息,即使它使用相同的语法来分配变量Screen。为什么函数GreenSwap不同,我的变量声明有什么不同?

0 投票
1 回答
105 浏览

c - 您可以使用 C 将函数的内存位置存储到 RAM 中吗?

我一直在玩 C 语言中的 Game Boy Advance 编码。要使中断工作,必须手动将中断处理程序的地址复制到 RAM 位置 0x03007FFC。我知道如何在 ARM 汇编中做到这一点,但在 C 中却不知道。我正在尝试这样的事情:

但它不起作用。根据我对 C 函数的了解,似乎 C 正在考虑我正在尝试获取的返回值的地址irqhandler(因为它是 void,所以没有返回值),这就是错误的来源。如何告诉 C 我想要函数本身的内存位置?