This is a tiny ARM9-only Nintendo DS starter project for BlocksDS. It builds a playable one-level prototype with:
- D-pad movement
- A button spell casting
- B button restart
- a portal goal (
P) - a chasing rune enemy (
R) - no art pipeline yet, so it is easy to edit from an iPhone
BlocksDS officially recommends starting from a template or example, and its rom_arm9 template is the one that lets you focus on the ARM9 side while using the default ARM7 core. BlocksDS also notes that project paths referenced by the Makefile must stay inside the project folder, so this repo keeps everything self-contained. citeturn942638view1turn306488view2
This Makefile uses BlocksDS' current default ARM9 makefile include style:
include $(BLOCKSDS)/sys/default_makefiles/rom_arm9/MakefileThat pattern is in current public BlocksDS projects, and BlocksDS' current docs still describe starting from templates/examples and customizing the title/icon in the Makefile. citeturn719334search7turn306488view2
.devcontainer/devcontainer.json— lets GitHub Codespaces boot into the official BlocksDS container imageMakefile— starter build configsource/main.c— one-level mage prototype.gitignore
- Create a new GitHub repo.
- Upload these files.
- Open the repo in Safari.
- Start a GitHub Codespace.
- In the Codespace terminal, run:
makeGitHub Codespaces supports a .devcontainer/devcontainer.json file in the repo root's .devcontainer directory, and it can reference an existing image directly with the image property. citeturn942638view2
A successful build should produce an .nds ROM you can download and test in a DS emulator. BlocksDS' docs describe make producing an NDS ROM, and recommend melonDS, no$gba, and DeSmuMe for testing. citeturn942638view0turn306488view3
After this first build works, the clean progression is:
- swap ASCII map tiles for sprite graphics
- put UI on one screen and gameplay on the other
- add touch controls
- add XP, enemies, and a boss room
- move from console rendering to proper tile/sprite rendering
BlocksDS' input docs note that scanKeys() is used before keysDown() / keysHeld(), and before reading touch input, which is the pattern used in this starter. citeturn737359search0turn737359search3