标签: devkitpro

Wii编程教程

我有一个Nintendo Wii,我有devkitpro正在加载一些简单的程序.我能够找到的示例源代码非常简单,例如绘制和旋转简单的形状.

我一直在寻找更深入的教程,但我找不到多少.wibibrew上提供的大多数应用程序上都是开源的,所以我可以浏览一下.但是,我宁愿有一些更适合教授某些技术的东西,而不是浏览别人的代码来找到答案.

有什么好的教程?目前我只是让alpha(半透明)颜色工作,但我也有兴趣让照明和其他更先进的图形技术工作.

homebrew wii video-game-consoles devkitpro

71
推荐指数
1
解决办法
2万
查看次数

将多个数组槽设置为一个值的简单方法

我用C++编写代码,我有以下代码:

int array[30];
array[9] = 1;
array[5] = 1;
array[14] = 1;

array[8] = 2;
array[15] = 2;
array[23] = 2;
array[12] = 2;
//...
Run Code Online (Sandbox Code Playgroud)

有没有办法初始化数组类似于以下?

int array[30];
array[9,5,14] = 1;
array[8,15,23,12] = 2;
//...
Run Code Online (Sandbox Code Playgroud)

注意:在实际代码中,最多可以有30个插槽需要设置为一个值.

c++ arrays initialization devkitpro c++11

19
推荐指数
4
解决办法
8470
查看次数

求助GBA ARM汇编程序

我尝试修改ARM 汇编程序(请参见页面底部)以使用子例程。它应该在 GBA 上显示红色屏幕(并编译它实际执行的示例程序,因此这不是工具链使用问题),但是,当我运行它时,屏幕会变黑。我正在使用 devkitARM 30

.arm
.text
.global main
main:
    mov r0, #0x4000000
    mov r1, #0x400
    add r1, r1, #3
    str r1, [r0]
    mov r0, #0x6000000
    stmdb sp!, {r0, r2, lr} @push registers before calling
    mov r0, #0xff
    mov r1, #0
    mov r2, #0
    bl set_rgb
    mov r1, r0
    ldmdb sp!, {r0, r2, lr} @restore registers
    mov r2, #0x9600
loop1:
    strh r1, [r0], #2
    subs r2, r2, #1
    bne loop1
infin:
    b infin

set_rgb:
    @r0: R; r1: …
Run Code Online (Sandbox Code Playgroud)

assembly arm devkitpro game-boy-advance

5
推荐指数
1
解决办法
1526
查看次数

什么时候删除对象?创建对象的影响c ++

我正在帮助用C++编写一个用于Nintendo DS的游戏(它有大约3MB的RAM).对于界面中的所有菜单,过去通过调用void函数创建"按钮",该函数将背景图块设置为按钮.整个界面至少有30个按钮.现在我创建了一个按钮类,它存储了它的位置,标签以及其他数据值.现在我的问题是:

在程序离开对象的范围后,所有这些新按钮对象是否会影响RAM使用(或其他性能方面)?

或者,一旦程序离开创建的函数,对象是否会自动被丢弃?

这是一些代码:

#include "Button.h"

void titlescreen() //Called to create main menu
{
    Button singlePlayer = Button(4, 5, "Single Player");
    //Creates button at coord (4,5)

    Button multiPlayer = Button(4, 8, "Multi Player");
    bool chosen = false; //Whether an option has been clicked

    while(!chosen)
    {
        //Menu stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

Button.h:

#include <stdio.h>
#ifndef BUTTON_H
#define BUTTON_H

class Button
{
public:
    int length;
    int x, y;
    bool isColored;
    void setColored(bool);
    void setDefault();
    button(int, int, const char * const); //Constructor …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management devkitpro

3
推荐指数
2
解决办法
200
查看次数

为什么 gcc -O1 优化会破坏在 Gameboy Advance ROM 的循环中修改 VRAM 的代码?

我正在开发一个简单的 Gameboy Advance ROM,并试图理解为什么以下代码适用于 gcc选项,但使用或以上-O0时会崩溃(白色模拟器屏幕) :-O1

int main () {
    // Set video mode 3 and background 2
    *(unsigned int*)0x04000000 = 0x0403;

    int x;
    for(x = 0; x < 1; x++){
        // Set a single pixel at position (120, 80) in VRAM to red
        ((unsigned short*)0x06000000)[120+80*240] = 0x001F;
    };

    while(1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该循环显然是不必要的,但我用它来创建一个崩溃行为的最小示例。如果没有循环,无论优化级别如何,代码都可以正常工作。通过循环,它会在-O1和更高处崩溃,但可以在-O0.

无论我是否实际x在循环体中使用(例如,用于x计算像素位置),都会发生相同的行为。据我所知,每当我尝试在循环中进行这种类型的直接内存修改时,我都会在更高的优化级别上遇到损坏。

这里发生了什么?什么优化破坏了代码?这是否表明我做事的方式存在问题?谢谢你的帮助!

更多细节:

  • 我正在使用 devkitpro/devkitarm
  • 我使用 NanoBoyAdvance 作为模拟器
  • 我在 Ubuntu 上运行
  • 完整命令:
arm-none-eabi-gcc -MMD -MP …
Run Code Online (Sandbox Code Playgroud)

c gcc arm devkitpro game-boy-advance

3
推荐指数
1
解决办法
92
查看次数

强制 LDR 指令将值放入 THUMB 程序集中的文字池中

我正在尝试使用 devkitpro 创建匹配的 GBA 反汇编,但我在使用 THUMB 指令时遇到了问题LDR R1, =0x3FF

我希望它放在0x3FF文字池中并生成一个相对于 PC 的地址,这是汇编版本所做的,但是它坚持创建一个MOVW32 位指令。

我尝试使用长度说明符LDR.N强制它生成 16 位指令,但这似乎没有任何区别。

虽然我可以直接使用相对于 PC 的地址,但由于这是在文字池的中间,这将导致我不得不删除大量的池并以相同的方式实现加载,这将非常混乱,所以这只是最后的手段。如果有人知道某种方式,我可以强制此指令生成一个与 PC 相关的地址,这将非常有帮助。谢谢!

assembly arm gnu-assembler devkitpro thumb

2
推荐指数
1
解决办法
59
查看次数

对于 GNU ld 'legacy __sync_synchronize' 警告我该怎么办?

我有一些使用本地范围、程序生命周期对象的 C++ 代码,例如

void testFunction(int arg) {
   static Tested tested(0);
   tested.use(arg);
}
Run Code Online (Sandbox Code Playgroud)

它与旧版本的 GCC 构建得很好。使用 GCC 8.2.0,我在链接时收到令人费解的警告:

警告:使用旧版兼容的 __sync_synchronize。不适合多线程应用

它指向定义测试的行,并且确实存在对编译器生成的 __sync_synchronize() 的调用。我想它是为了确保没有两个线程可以同时运行初始化代码,并使延迟初始化产生与加载时初始化相同的结果。

Tested 类的此实现重现了问题:

class Tested {
  int sum;
public:
  Tested(int init) : sum(init) {}
  void use(int arg) {
    sum += arg;
  }
  int current() const {
    return sum;
  }
};
Run Code Online (Sandbox Code Playgroud)

该代码预计在单线程嵌入式平台上运行。

我是否正确地认为该警告与我无关?

我可以做什么(除了停止使用静态对象)来消除警告消息?

c++ devkitpro ld thread-safety suppress-warnings

1
推荐指数
1
解决办法
879
查看次数