Giter Site home page Giter Site logo

hydr8gon / sm64 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from n64decomp/sm64

125.0 125.0 10.0 25.94 MB

A port of Super Mario 64 for the DSi

License: Creative Commons Zero v1.0 Universal

Makefile 0.13% Assembly 1.02% Shell 0.02% C++ 3.81% C 94.30% JavaScript 0.02% Python 0.71% Dockerfile 0.01% Batchfile 0.01%

sm64's People

Contributors

ahouts avatar angeltomkins avatar bramhaag avatar hydr8gon avatar matt-kempster avatar mountainflaw avatar nadiaholmquist avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sm64's Issues

Please add an icon and name to it.

WIN_20210715_23_02_38_Pro
The game works fine already. I'd just like it if you added an icon and title to it.
I need it for my personal SM3DASDS.
and yes, i renamed the file to 1996.nds

I have Docker but it deos not run

This is the error:
error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=sm64dsi&target=&ulimits=null&version=1": open //./pipe/docker_engine: The system cannot find the file specified.
docker: error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create": open //./pipe/docker_engine: The system cannot find the file specified.
See 'docker run --help'.

Sound completely stops working when 4 stars are collected (UTL-001 hardware), performance issues

Collected these stars:
-Big Bob-omb on the Summit
-Secret slide <21 second star
-Secret slide normal star
-Plunder in the Sunken Ship
And the game audio stops working.
Using an actual Nintendo DSi (XL UTL-001, unsure of the revision if there is any)
Game loaded onto a 16GB SD card, started with unlaunch

As for performance issues, the game would lag at areas in more intensive areas. (high poly counts?) Replacing -g with -O2 doesn't seem to make a noticeable difference either. However, at some point I changed the screen resolution to 256x192 in config.h and that... didn't seem to work out too well. The game was aligned to the bottom left corner of the screen and the rest of it was just black. Perhaps there's another area to change, but i don't know. Plus, you would need to change the alignment of all the objects (HUD, letters/numbers, text, etc; 3d models look fine) printed on screen to fit the resolution.

Thanks in advance for reading through this.
-k24a1

Port will not start from TWiLightMenu++ on real DSi Hardware

Hello,

Although I have successfully compiled this port, I was unable to start this port on my actual Nintendo DSi using TWiLightMenu++. It crashes to a black screen.

Here are some of my TWiLightMenu++ Settings for reference:

Run in: DSi Mode
ARM9 CPU Speed: 133 MHz (TWL)
VRAM Boost: On
S1SD: Use nds-bootstrap Yes
Sound/Mic Frequency: 32.73 kHz
DSiWare Booter: Unlaunch

I do not understand how to do any of this

Please help I don't understand how to do this I downloaded the rom and the sm64 nds but I don't know how to get the game since I don't know if you use docker to get the game can someone explain step by step please

wont build

I was following the instructions fully but when I opened the build batch file it says

"error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=sm64dsi&target=&ulimits=null&version=1": open //./pipe/docker_engine: The system cannot find the file specified.
docker: error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create": open //./pipe/docker_engine: The system cannot find the file specified.
See 'docker run --help'.
Press any key to continue . . ."

any fixes?

Hardware accelerated floating point functions

Kuratius@ace0e20

I tried implementing hardware accelerated fdiv and sqrtf functions, I also tried writing an fmul implementation that should be somewhat faster than the default.
There's also a rounding implementation that avoids float adds:
Kuratius@515fc97

Note that the fdiv and sqrtf use the hardware divider and square root unit while doing other stuff for the float handling instead of blocking; that may mean that handling of NaNs and other invalid values could be added without changing the performance of these functions.

Also note that they do not handle invalid values such as NaNs, overflows, underflows, and infs in a proper way.
I think most of the compiler option reshuffling isn't necessary, only the --use-blx --wrap and -u flags are a actually necessary to get it to use these functions instead of GCC's default soft float implementation.

I noticed some minor graphical issues (like 1 frame every few seconds that looks wrong) when using these, but it's hard to tell what causes that, if NaN handling is required or if something else is going wrong. Probably don't add these to the project by default unless that gets tested further.
This also should be benchmarked in more detail.

I'm opening this issue so that the discussion about this isn't hidden away in the discord.

Three sound issues

  1. Pausing the game causes the played instrument to linger on.
  2. After beating Bowser in the final level and transitioning to the final cutscene, the sound stops working.
  3. Red coin sound does not play, and it's just normal coin sounds.

Check if sin/cos approximation via integers has sufficient accuracy and speed

It's possibly to compute a good approximation to the cosine of a number using a single float multiplication and 1 integer multiplication.

The implementation from this video for example
https://www.youtube.com/watch?v=hffgNRfL1XY
(see e.g. 8:02 )

can be modified to use only integers except for the very last step.
Example:

#define SECOND_ORDER_COEFFICIENT 0.0000000010911122665310369f
uint32 a=3667592205

float b=1.f/a ( can be evaluated at compile time)
sint32 c= (sint32) (SECOND_ORDER_COEFFICIENT*a) (also compile time)

uint32 x=16382 (0 is 0 angle and 16382 is pi/4 ), values lower than -pi/4 or greater than pi/4 need to be done with symmetry transforms or the squareroot operation.


 float result=b * (a-c*x*x)

the compiler optimizes this a bit to turn 2 integer multiplies +1 float into 1 integer multiplications and 1 float multiplication.
There are other possible values for a that can be chosen, potentially with less error than the one I used for this example, especially if the range of x is changed. The float multiply could also be replaced with a hardware divide if the angle doesnt have to be a float.

The current implementation seems to use a 8th order polynomial with doubles.

float cosf(float x)

I'm also a bit confused as to why p[0] seems to be unused here.

Windows build failed

[+] Building 1.6s (9/9) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.1s
 => => transferring dockerfile: 32B                                                                                0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/devkitpro/devkitarm:latest                                              1.4s
 => [1/5] FROM docker.io/devkitpro/devkitarm:latest@sha256:108499116fe0952cc9c32519ab1f5b9d428311d9c1ee137356c606  0.0s
 => CACHED [2/5] RUN apt update                                                                                    0.0s
 => CACHED [3/5] RUN apt -y install build-essential bsdmainutils sox                                               0.0s
 => CACHED [4/5] RUN mkdir /sm64                                                                                   0.0s
 => CACHED [5/5] WORKDIR /sm64                                                                                     0.0s
 => exporting to image                                                                                             0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:10b3d7235d1e773678f22617e41093bacac7f6480a885d41cb28d5a55b3cea5b                       0.0s
 => => naming to docker.io/library/sm64dsi                                                                         0.0s
==== Build Options ====
Version:        us
Microcode:      f3dex2
Target:         sm64.us
Compare ROM:    no
Build Matching: no
=======================
Building tools...
Building ROM...
Compiling: src/game/ingame_menu.c -> build/us_nds/src/game/ingame_menu.o
Compiling: src/menu/star_select.c -> build/us_nds/src/menu/star_select.o
Compiling: src/menu/file_select.c -> build/us_nds/src/menu/file_select.o
Compiling: actors/group5.c -> build/us_nds/actors/group5.o
Compiling: actors/group15.c -> build/us_nds/actors/group15.o
Compiling: actors/group10.c -> build/us_nds/actors/group10.o
Compiling: actors/group17.c -> build/us_nds/actors/group17.o
Compiling: actors/group6.c -> build/us_nds/actors/group6.o
Compiling: actors/group14.c -> build/us_nds/actors/group14.o
Compiling: actors/common1.c -> build/us_nds/actors/common1.o
Compiling: actors/group16.c -> build/us_nds/actors/group16.o
Compiling: actors/group9.c -> build/us_nds/actors/group9.o
Compiling: actors/group1.c -> build/us_nds/actors/group1.o
Compiling: actors/group2.c -> build/us_nds/actors/group2.o
Compiling: actors/group3.c -> build/us_nds/actors/group3.o
Compiling: actors/group8.c -> build/us_nds/actors/group8.o
Compiling: actors/group12.c -> build/us_nds/actors/group12.o
Compiling: actors/group4.c -> build/us_nds/actors/group4.o
Compiling: actors/group7.c -> build/us_nds/actors/group7.o
Compiling: actors/common0.c -> build/us_nds/actors/common0.o
Compiling: actors/group0.c -> build/us_nds/actors/group0.o
Compiling: actors/group13.c -> build/us_nds/actors/group13.o
Compiling: actors/group11.c -> build/us_nds/actors/group11.o
Compiling: levels/scripts.c -> build/us_nds/levels/scripts.o
Compiling: bin/mountain.c -> build/us_nds/bin/mountain.o
Compiling: bin/machine.c -> build/us_nds/bin/machine.o
Compiling: bin/grass.c -> build/us_nds/bin/grass.o
Compiling: bin/water.c -> build/us_nds/bin/water.o
Compiling: bin/title_screen_bg.c -> build/us_nds/bin/title_screen_bg.o
Compiling: bin/sky.c -> build/us_nds/bin/sky.o
Compiling: bin/inside.c -> build/us_nds/bin/inside.o
Compiling: bin/generic.c -> build/us_nds/bin/generic.o
Compiling: bin/spooky.c -> build/us_nds/bin/spooky.o
Compiling: bin/fire.c -> build/us_nds/bin/fire.o
Compiling: bin/outside.c -> build/us_nds/bin/outside.o
Compiling: bin/effect.c -> build/us_nds/bin/effect.o
Compiling: bin/snow.c -> build/us_nds/bin/snow.o
Compiling: bin/cave.c -> build/us_nds/bin/cave.o
Compiling: bin/segment2.c -> build/us_nds/bin/segment2.o
Encoding IMA: build/us_nds/sound/samples/sfx_9/05_camera_shutter.wav -> build/us_nds/sound/samples/sfx_9/05_camera_shutter.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/01.wav -> build/us_nds/sound/samples/sfx_9/01.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/06.wav -> build/us_nds/sound/samples/sfx_9/06.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/02.wav -> build/us_nds/sound/samples/sfx_9/02.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/00.wav -> build/us_nds/sound/samples/sfx_9/00.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/04_camera_buzz.wav -> build/us_nds/sound/samples/sfx_9/04_camera_buzz.ima
Encoding IMA: build/us_nds/sound/samples/sfx_9/03.wav -> build/us_nds/sound/samples/sfx_9/03.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/08.wav -> build/us_nds/sound/samples/sfx_7/08.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/0D_chain_chomp_bark.wav -> build/us_nds/sound/samples/sfx_7/0D_chain_chomp_bark.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/09.wav -> build/us_nds/sound/samples/sfx_7/09.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/01.wav -> build/us_nds/sound/samples/sfx_7/01.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/0B.wav -> build/us_nds/sound/samples/sfx_7/0B.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/04.wav -> build/us_nds/sound/samples/sfx_7/04.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/02.wav -> build/us_nds/sound/samples/sfx_7/02.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/00.wav -> build/us_nds/sound/samples/sfx_7/00.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/0A.wav -> build/us_nds/sound/samples/sfx_7/0A.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/0C.wav -> build/us_nds/sound/samples/sfx_7/0C.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/07.wav -> build/us_nds/sound/samples/sfx_7/07.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/06.wav -> build/us_nds/sound/samples/sfx_7/06.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/05.wav -> build/us_nds/sound/samples/sfx_7/05.ima
Encoding IMA: build/us_nds/sound/samples/sfx_7/03.wav -> build/us_nds/sound/samples/sfx_7/03.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/08.wav -> build/us_nds/sound/samples/sfx_4/08.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/09.wav -> build/us_nds/sound/samples/sfx_4/09.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/01.wav -> build/us_nds/sound/samples/sfx_4/01.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/04.wav -> build/us_nds/sound/samples/sfx_4/04.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/02.wav -> build/us_nds/sound/samples/sfx_4/02.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/00.wav -> build/us_nds/sound/samples/sfx_4/00.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/07.wav -> build/us_nds/sound/samples/sfx_4/07.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/06.wav -> build/us_nds/sound/samples/sfx_4/06.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/05.wav -> build/us_nds/sound/samples/sfx_4/05.ima
Encoding IMA: build/us_nds/sound/samples/sfx_4/03.wav -> build/us_nds/sound/samples/sfx_4/03.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/03_step_spooky.wav -> build/us_nds/sound/samples/sfx_terrain/03_step_spooky.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/06_step_metal.wav -> build/us_nds/sound/samples/sfx_terrain/06_step_metal.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/07_step_sand.wav -> build/us_nds/sound/samples/sfx_terrain/07_step_sand.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/02_step_stone.wav -> build/us_nds/sound/samples/sfx_terrain/02_step_stone.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/05_step_ice.wav -> build/us_nds/sound/samples/sfx_terrain/05_step_ice.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/00_step_default.wav -> build/us_nds/sound/samples/sfx_terrain/00_step_default.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/01_step_grass.wav -> build/us_nds/sound/samples/sfx_terrain/01_step_grass.ima
Encoding IMA: build/us_nds/sound/samples/sfx_terrain/04_step_snow.wav -> build/us_nds/sound/samples/sfx_terrain/04_step_snow.ima
Encoding IMA: build/us_nds/sound/samples/piranha_music_box/00_music_box.wav -> build/us_nds/sound/samples/piranha_music_box/00_music_box.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/08.wav -> build/us_nds/sound/samples/sfx_5/08.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/18.wav -> build/us_nds/sound/samples/sfx_5/18.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/19.wav -> build/us_nds/sound/samples/sfx_5/19.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/09.wav -> build/us_nds/sound/samples/sfx_5/09.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/11.wav -> build/us_nds/sound/samples/sfx_5/11.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/01.wav -> build/us_nds/sound/samples/sfx_5/01.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0F.wav -> build/us_nds/sound/samples/sfx_5/0F.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/16.wav -> build/us_nds/sound/samples/sfx_5/16.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0D.wav -> build/us_nds/sound/samples/sfx_5/0D.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/1B.wav -> build/us_nds/sound/samples/sfx_5/1B.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0B.wav -> build/us_nds/sound/samples/sfx_5/0B.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/1A.wav -> build/us_nds/sound/samples/sfx_5/1A.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/04.wav -> build/us_nds/sound/samples/sfx_5/04.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/12.wav -> build/us_nds/sound/samples/sfx_5/12.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/02.wav -> build/us_nds/sound/samples/sfx_5/02.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/10.wav -> build/us_nds/sound/samples/sfx_5/10.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/00.wav -> build/us_nds/sound/samples/sfx_5/00.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0A.wav -> build/us_nds/sound/samples/sfx_5/0A.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/15.wav -> build/us_nds/sound/samples/sfx_5/15.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/17.wav -> build/us_nds/sound/samples/sfx_5/17.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0E.wav -> build/us_nds/sound/samples/sfx_5/0E.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/1C.wav -> build/us_nds/sound/samples/sfx_5/1C.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/0C.wav -> build/us_nds/sound/samples/sfx_5/0C.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/14.wav -> build/us_nds/sound/samples/sfx_5/14.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/07.wav -> build/us_nds/sound/samples/sfx_5/07.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/06.wav -> build/us_nds/sound/samples/sfx_5/06.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/13.wav -> build/us_nds/sound/samples/sfx_5/13.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/05.wav -> build/us_nds/sound/samples/sfx_5/05.ima
Encoding IMA: build/us_nds/sound/samples/sfx_5/03.wav -> build/us_nds/sound/samples/sfx_5/03.ima
Encoding IMA: build/us_nds/sound/samples/course_start/00_la.wav -> build/us_nds/sound/samples/course_start/00_la.ima
Encoding IMA: build/us_nds/sound/samples/sfx_water/00_plunge.wav -> build/us_nds/sound/samples/sfx_water/00_plunge.ima
Encoding IMA: build/us_nds/sound/samples/sfx_water/02_swim.wav -> build/us_nds/sound/samples/sfx_water/02_swim.ima
Encoding IMA: build/us_nds/sound/samples/sfx_water/01_splash.wav -> build/us_nds/sound/samples/sfx_water/01_splash.ima
Encoding IMA: build/us_nds/sound/samples/instruments/27_harpsichord.wav -> build/us_nds/sound/samples/instruments/27_harpsichord.ima
Encoding IMA: build/us_nds/sound/samples/instruments/15_strings_4.wav -> build/us_nds/sound/samples/instruments/15_strings_4.ima
Encoding IMA: build/us_nds/sound/samples/instruments/25_strings_3.wav -> build/us_nds/sound/samples/instruments/25_strings_3.ima
Encoding IMA: build/us_nds/sound/samples/instruments/09.wav -> build/us_nds/sound/samples/instruments/09.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2A.wav -> build/us_nds/sound/samples/instruments/2A.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0A_tambourine.wav -> build/us_nds/sound/samples/instruments/0A_tambourine.ima
Encoding IMA: build/us_nds/sound/samples/instruments/01_banjo_1.wav -> build/us_nds/sound/samples/instruments/01_banjo_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/10_cymbal_bell.wav -> build/us_nds/sound/samples/instruments/10_cymbal_bell.ima
Encoding IMA: build/us_nds/sound/samples/instruments/13_snare_drum_2.wav -> build/us_nds/sound/samples/instruments/13_snare_drum_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/12_snare_drum_1.wav -> build/us_nds/sound/samples/instruments/12_snare_drum_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3F.wav -> build/us_nds/sound/samples/instruments/3F.ima
Encoding IMA: build/us_nds/sound/samples/instruments/38_electric_kick_drum.wav -> build/us_nds/sound/samples/instruments/38_electric_kick_drum.ima
Encoding IMA: build/us_nds/sound/samples/instruments/36_sawtooth_synth.wav -> build/us_nds/sound/samples/instruments/36_sawtooth_synth.ima
Encoding IMA: build/us_nds/sound/samples/instruments/35_gospel_organ.wav -> build/us_nds/sound/samples/instruments/35_gospel_organ.ima
Encoding IMA: build/us_nds/sound/samples/instruments/07_rimshot.wav -> build/us_nds/sound/samples/instruments/07_rimshot.ima
Encoding IMA: build/us_nds/sound/samples/instruments/03_human_whistle.wav -> build/us_nds/sound/samples/instruments/03_human_whistle.ima
Encoding IMA: build/us_nds/sound/samples/instruments/20_cabasa.wav -> build/us_nds/sound/samples/instruments/20_cabasa.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0D_clave.wav -> build/us_nds/sound/samples/instruments/0D_clave.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0F_hihat_open.wav -> build/us_nds/sound/samples/instruments/0F_hihat_open.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2D_trombone.wav -> build/us_nds/sound/samples/instruments/2D_trombone.ima
Encoding IMA: build/us_nds/sound/samples/instruments/24_strings_2.wav -> build/us_nds/sound/samples/instruments/24_strings_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1B_organ_2.wav -> build/us_nds/sound/samples/instruments/1B_organ_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2B.wav -> build/us_nds/sound/samples/instruments/2B.ima
Encoding IMA: build/us_nds/sound/samples/instruments/06_kick_drum_1.wav -> build/us_nds/sound/samples/instruments/06_kick_drum_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0B.wav -> build/us_nds/sound/samples/instruments/0B.ima
Encoding IMA: build/us_nds/sound/samples/instruments/46_pizzicato_strings_1.wav -> build/us_nds/sound/samples/instruments/46_pizzicato_strings_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1F_open_triangle.wav -> build/us_nds/sound/samples/instruments/1F_open_triangle.ima
Encoding IMA: build/us_nds/sound/samples/instruments/02.wav -> build/us_nds/sound/samples/instruments/02.ima
Encoding IMA: build/us_nds/sound/samples/instruments/40_bell.wav -> build/us_nds/sound/samples/instruments/40_bell.ima
Encoding IMA: build/us_nds/sound/samples/instruments/34_alto_flute.wav -> build/us_nds/sound/samples/instruments/34_alto_flute.ima
Encoding IMA: build/us_nds/sound/samples/instruments/17_trumpet.wav -> build/us_nds/sound/samples/instruments/17_trumpet.ima
Encoding IMA: build/us_nds/sound/samples/instruments/30_rarefaction-lahna.wav -> build/us_nds/sound/samples/instruments/30_rarefaction-lahna.ima
Encoding IMA: build/us_nds/sound/samples/instruments/44_grand_piano.wav -> build/us_nds/sound/samples/instruments/44_grand_piano.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3C_acoustic_guitar.wav -> build/us_nds/sound/samples/instruments/3C_acoustic_guitar.ima
Encoding IMA: build/us_nds/sound/samples/instruments/48_steel_drum.wav -> build/us_nds/sound/samples/instruments/48_steel_drum.ima
Encoding IMA: build/us_nds/sound/samples/instruments/41_pan_flute.wav -> build/us_nds/sound/samples/instruments/41_pan_flute.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0C_conga_stick.wav -> build/us_nds/sound/samples/instruments/0C_conga_stick.ima
Encoding IMA: build/us_nds/sound/samples/instruments/04_bright_piano.wav -> build/us_nds/sound/samples/instruments/04_bright_piano.ima
Encoding IMA: build/us_nds/sound/samples/instruments/28_sitar_1.wav -> build/us_nds/sound/samples/instruments/28_sitar_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/00.wav -> build/us_nds/sound/samples/instruments/00.ima
Encoding IMA: build/us_nds/sound/samples/instruments/47_pizzicato_strings_2.wav -> build/us_nds/sound/samples/instruments/47_pizzicato_strings_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/22_boys_choir.wav -> build/us_nds/sound/samples/instruments/22_boys_choir.ima
Encoding IMA: build/us_nds/sound/samples/instruments/05_acoustic_bass.wav -> build/us_nds/sound/samples/instruments/05_acoustic_bass.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2C.wav -> build/us_nds/sound/samples/instruments/2C.ima
Encoding IMA: build/us_nds/sound/samples/instruments/42_vibraphone.wav -> build/us_nds/sound/samples/instruments/42_vibraphone.ima
Encoding IMA: build/us_nds/sound/samples/instruments/14_strings_5.wav -> build/us_nds/sound/samples/instruments/14_strings_5.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3E_monk_choir.wav -> build/us_nds/sound/samples/instruments/3E_monk_choir.ima
Encoding IMA: build/us_nds/sound/samples/instruments/11_splash_cymbal.wav -> build/us_nds/sound/samples/instruments/11_splash_cymbal.ima
Encoding IMA: build/us_nds/sound/samples/instruments/33_kick_drum_2.wav -> build/us_nds/sound/samples/instruments/33_kick_drum_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/32_metal_rimshot.wav -> build/us_nds/sound/samples/instruments/32_metal_rimshot.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3D.wav -> build/us_nds/sound/samples/instruments/3D.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1C.wav -> build/us_nds/sound/samples/instruments/1C.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2F_sleigh_bells.wav -> build/us_nds/sound/samples/instruments/2F_sleigh_bells.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3B_banjo_2.wav -> build/us_nds/sound/samples/instruments/3B_banjo_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1D.wav -> build/us_nds/sound/samples/instruments/1D.ima
Encoding IMA: build/us_nds/sound/samples/instruments/0E_hihat_closed.wav -> build/us_nds/sound/samples/instruments/0E_hihat_closed.ima
Encoding IMA: build/us_nds/sound/samples/instruments/45_french_horns_lq.wav -> build/us_nds/sound/samples/instruments/45_french_horns_lq.ima
Encoding IMA: build/us_nds/sound/samples/instruments/29_orchestra_hit.wav -> build/us_nds/sound/samples/instruments/29_orchestra_hit.ima
Encoding IMA: build/us_nds/sound/samples/instruments/19_brass.wav -> build/us_nds/sound/samples/instruments/19_brass.ima
Encoding IMA: build/us_nds/sound/samples/instruments/31_rarefaction-convolution.wav -> build/us_nds/sound/samples/instruments/31_rarefaction-convolution.ima
Encoding IMA: build/us_nds/sound/samples/instruments/37_square_synth.wav -> build/us_nds/sound/samples/instruments/37_square_synth.ima
Encoding IMA: build/us_nds/sound/samples/instruments/43_harmonica.wav -> build/us_nds/sound/samples/instruments/43_harmonica.ima
Encoding IMA: build/us_nds/sound/samples/instruments/08.wav -> build/us_nds/sound/samples/instruments/08.ima
Encoding IMA: build/us_nds/sound/samples/instruments/23_strings_1.wav -> build/us_nds/sound/samples/instruments/23_strings_1.ima
Encoding IMA: build/us_nds/sound/samples/instruments/21_sine_bass.wav -> build/us_nds/sound/samples/instruments/21_sine_bass.ima
Encoding IMA: build/us_nds/sound/samples/instruments/2E_accordion.wav -> build/us_nds/sound/samples/instruments/2E_accordion.ima
Encoding IMA: build/us_nds/sound/samples/instruments/16_french_horns.wav -> build/us_nds/sound/samples/instruments/16_french_horns.ima
Encoding IMA: build/us_nds/sound/samples/instruments/26_crystal_rhodes.wav -> build/us_nds/sound/samples/instruments/26_crystal_rhodes.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1A_slap_bass.wav -> build/us_nds/sound/samples/instruments/1A_slap_bass.ima
Encoding IMA: build/us_nds/sound/samples/instruments/3A_music_box.wav -> build/us_nds/sound/samples/instruments/3A_music_box.ima
Encoding IMA: build/us_nds/sound/samples/instruments/39_sitar_2.wav -> build/us_nds/sound/samples/instruments/39_sitar_2.ima
Encoding IMA: build/us_nds/sound/samples/instruments/1E_closed_triangle.wav -> build/us_nds/sound/samples/instruments/1E_closed_triangle.ima
Encoding IMA: build/us_nds/sound/samples/instruments/18_timpani.wav -> build/us_nds/sound/samples/instruments/18_timpani.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/11_peach_thanks_to_you.wav -> build/us_nds/sound/samples/sfx_mario_peach/11_peach_thanks_to_you.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/12_peach_thank_you_mario.wav -> build/us_nds/sound/samples/sfx_mario_peach/12_peach_thank_you_mario.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/14_peach_bake_a_cake.wav -> build/us_nds/sound/samples/sfx_mario_peach/14_peach_bake_a_cake.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0B_mario_okey_dokey.wav -> build/us_nds/sound/samples/sfx_mario_peach/0B_mario_okey_dokey.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0C_mario_drowning.wav -> build/us_nds/sound/samples/sfx_mario_peach/0C_mario_drowning.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/05_mario_uh2.wav -> build/us_nds/sound/samples/sfx_mario_peach/05_mario_uh2.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/03_mario_dying.wav -> build/us_nds/sound/samples/sfx_mario_peach/03_mario_dying.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0E_peach_dear_mario.wav -> build/us_nds/sound/samples/sfx_mario_peach/0E_peach_dear_mario.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/07_mario_its_a_me_mario.wav -> build/us_nds/sound/samples/sfx_mario_peach/07_mario_its_a_me_mario.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0A_mario_mama_mia.wav -> build/us_nds/sound/samples/sfx_mario_peach/0A_mario_mama_mia.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/01_mario_hoohoo.wav -> build/us_nds/sound/samples/sfx_mario_peach/01_mario_hoohoo.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/02_mario_panting.wav -> build/us_nds/sound/samples/sfx_mario_peach/02_mario_panting.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/06_mario_coughing.wav -> build/us_nds/sound/samples/sfx_mario_peach/06_mario_coughing.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/09_mario_punch_hoo.wav -> build/us_nds/sound/samples/sfx_mario_peach/09_mario_punch_hoo.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/15_peach_for_mario.wav -> build/us_nds/sound/samples/sfx_mario_peach/15_peach_for_mario.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game.wav -> build/us_nds/sound/samples/sfx_mario_peach/0D_mario_thank_you_playing_my_game.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/08_mario_punch_yah.wav -> build/us_nds/sound/samples/sfx_mario_peach/08_mario_punch_yah.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/0F_peach_mario.wav -> build/us_nds/sound/samples/sfx_mario_peach/0F_peach_mario.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/16_peach_mario2.wav -> build/us_nds/sound/samples/sfx_mario_peach/16_peach_mario2.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/10_peach_power_of_the_stars.wav -> build/us_nds/sound/samples/sfx_mario_peach/10_peach_power_of_the_stars.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/13_peach_something_special.wav -> build/us_nds/sound/samples/sfx_mario_peach/13_peach_something_special.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/04_mario_on_fire.wav -> build/us_nds/sound/samples/sfx_mario_peach/04_mario_on_fire.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario_peach/00_mario_waaaooow.wav -> build/us_nds/sound/samples/sfx_mario_peach/00_mario_waaaooow.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/08.wav -> build/us_nds/sound/samples/sfx_6/08.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/09.wav -> build/us_nds/sound/samples/sfx_6/09.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/01.wav -> build/us_nds/sound/samples/sfx_6/01.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/0D.wav -> build/us_nds/sound/samples/sfx_6/0D.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/0B.wav -> build/us_nds/sound/samples/sfx_6/0B.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/04.wav -> build/us_nds/sound/samples/sfx_6/04.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/02.wav -> build/us_nds/sound/samples/sfx_6/02.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/00.wav -> build/us_nds/sound/samples/sfx_6/00.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/0A.wav -> build/us_nds/sound/samples/sfx_6/0A.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/0C.wav -> build/us_nds/sound/samples/sfx_6/0C.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/07.wav -> build/us_nds/sound/samples/sfx_6/07.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/06.wav -> build/us_nds/sound/samples/sfx_6/06.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/05.wav -> build/us_nds/sound/samples/sfx_6/05.ima
Encoding IMA: build/us_nds/sound/samples/sfx_6/03.wav -> build/us_nds/sound/samples/sfx_6/03.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/03_yoshi.wav -> build/us_nds/sound/samples/sfx_1/03_yoshi.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/02_hand_touch.wav -> build/us_nds/sound/samples/sfx_1/02_hand_touch.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/04_plop.wav -> build/us_nds/sound/samples/sfx_1/04_plop.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/01_brushing.wav -> build/us_nds/sound/samples/sfx_1/01_brushing.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/00_twirl.wav -> build/us_nds/sound/samples/sfx_1/00_twirl.ima
Encoding IMA: build/us_nds/sound/samples/sfx_1/05_heavy_landing.wav -> build/us_nds/sound/samples/sfx_1/05_heavy_landing.ima
Encoding IMA: build/us_nds/sound/samples/bowser_organ/00_organ_1.wav -> build/us_nds/sound/samples/bowser_organ/00_organ_1.ima
Encoding IMA: build/us_nds/sound/samples/bowser_organ/02_boys_choir.wav -> build/us_nds/sound/samples/bowser_organ/02_boys_choir.ima
Encoding IMA: build/us_nds/sound/samples/bowser_organ/01_organ_1_lq.wav -> build/us_nds/sound/samples/bowser_organ/01_organ_1_lq.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0A_mario_attacked.wav -> build/us_nds/sound/samples/sfx_mario/0A_mario_attacked.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/14_mario_twirl_bounce.wav -> build/us_nds/sound/samples/sfx_mario/14_mario_twirl_bounce.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/1A_mario_lets_a_go.wav -> build/us_nds/sound/samples/sfx_mario/1A_mario_lets_a_go.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/07_mario_wah2.wav -> build/us_nds/sound/samples/sfx_mario/07_mario_wah2.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/15_mario_snoring3.wav -> build/us_nds/sound/samples/sfx_mario/15_mario_snoring3.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0E_mario_snoring1.wav -> build/us_nds/sound/samples/sfx_mario/0E_mario_snoring1.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0B_mario_ooof.wav -> build/us_nds/sound/samples/sfx_mario/0B_mario_ooof.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/17_mario_ima_tired.wav -> build/us_nds/sound/samples/sfx_mario/17_mario_ima_tired.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/01_mario_jump_wah.wav -> build/us_nds/sound/samples/sfx_mario/01_mario_jump_wah.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/19_mario_yippee.wav -> build/us_nds/sound/samples/sfx_mario/19_mario_yippee.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/04_mario_yahoo.wav -> build/us_nds/sound/samples/sfx_mario/04_mario_yahoo.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/13_mario_press_start_to_play.wav -> build/us_nds/sound/samples/sfx_mario/13_mario_press_start_to_play.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/11_mario_game_over.wav -> build/us_nds/sound/samples/sfx_mario/11_mario_game_over.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/05_mario_uh.wav -> build/us_nds/sound/samples/sfx_mario/05_mario_uh.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/08_mario_whoa.wav -> build/us_nds/sound/samples/sfx_mario/08_mario_whoa.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/00_mario_jump_hoo.wav -> build/us_nds/sound/samples/sfx_mario/00_mario_jump_hoo.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0D_mario_yawning.wav -> build/us_nds/sound/samples/sfx_mario/0D_mario_yawning.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/09_mario_eeuh.wav -> build/us_nds/sound/samples/sfx_mario/09_mario_eeuh.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0F_mario_snoring2.wav -> build/us_nds/sound/samples/sfx_mario/0F_mario_snoring2.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/12_mario_hello.wav -> build/us_nds/sound/samples/sfx_mario/12_mario_hello.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/18_mario_waha.wav -> build/us_nds/sound/samples/sfx_mario/18_mario_waha.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/0C_mario_here_we_go.wav -> build/us_nds/sound/samples/sfx_mario/0C_mario_here_we_go.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/02_mario_yah.wav -> build/us_nds/sound/samples/sfx_mario/02_mario_yah.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/16_mario_so_longa_bowser.wav -> build/us_nds/sound/samples/sfx_mario/16_mario_so_longa_bowser.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/06_mario_hrmm.wav -> build/us_nds/sound/samples/sfx_mario/06_mario_hrmm.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/10_mario_doh.wav -> build/us_nds/sound/samples/sfx_mario/10_mario_doh.ima
Encoding IMA: build/us_nds/sound/samples/sfx_mario/03_mario_haha.wav -> build/us_nds/sound/samples/sfx_mario/03_mario_haha.ima
/bin/sh: 1: bc: not found
Converting AIFF: sound/samples/instruments/27_harpsichord.aiff -> build/us_nds/sound/samples/instruments/27_harpsichord.half.wav
/bin/sh: 1: bc: not found
sox FAIL sox: Rate value `build/us_nds/sound/samples/instruments/27_harpsichord.half.wav' is not a positive number
Converting AIFF: sound/samples/instruments/15_strings_4.aiff -> build/us_nds/sound/samples/instruments/15_strings_4.half.wav
Makefile:644: recipe for target 'build/us_nds/sound/samples/instruments/27_harpsichord.half.wav' failed
make: *** [build/us_nds/sound/samples/instruments/27_harpsichord.half.wav] Error 1
make: *** Waiting for unfinished jobs....
sox FAIL sox: Rate value `build/us_nds/sound/samples/instruments/15_strings_4.half.wav' is not a positive number
Makefile:644: recipe for target 'build/us_nds/sound/samples/instruments/15_strings_4.half.wav' failed
make: *** [build/us_nds/sound/samples/instruments/15_strings_4.half.wav] Error 1
make: *** wait: No child processes.  Stop.
Press any key to continue . . .

Add option to play on bottom screen

Some people have a GB Macro (or otherwise broken top screen), or just prefer playing on the bottom screen, so it would be nice if it were an option. It could be done through a button combo, ig

docker fails to build

[+] Building 18.2s (5/8)
=> [internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.4s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/devkitpro/devkitarm:latest 1.6s
=> CACHED [1/5] FROM docker.io/devkitpro/devkitarm:latest@sha256:7dbb4a1b6e4d1d01cf2c1c55c79e351141cedb55cd6f836 0.0s
=> ERROR [2/5] RUN apt update 16.0s

[2/5] RUN apt update:
#5 0.759
#5 0.759 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
#5 0.759
#5 0.853 Get:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
#5 0.932 Get:2 http://deb.debian.org/debian buster InRelease [122 kB]
#5 1.052 Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
#5 1.101 Get:4 http://deb.debian.org/debian buster-backports InRelease [46.7 kB]
#5 1.169 Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7,906 kB]
#5 14.83 Reading package lists...
#5 15.48 E: Release file for http://security.debian.org/debian-security/dists/buster/updates/InRelease is not valid yet (invalid for another 7h 39min 9s). Updates for this repository will not be applied.
#5 15.48 E: Release file for http://deb.debian.org/debian/dists/buster-updates/InRelease is not valid yet (invalid for another 6h 13min 51s). Updates for this repository will not be applied.
#5 15.48 E: Release file for http://deb.debian.org/debian/dists/buster-backports/InRelease is not valid yet (invalid for another 6h 13min 51s). Updates for this repository will not be applied.


executor failed running [/bin/sh -c apt update]: exit code: 100
Unable to find image 'sm64dsi:latest' locally
docker: Error response from daemon: pull access denied for sm64dsi, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
Press any key to continue . . .

I’m having a problem with whole baserom.us.z64 thing.

So I have a majority of the things used for the compile prepared. I have a US rom version of the super Mario 64. I have docker installed and I have the sm64-nds file installed as well. I extracted it and I put the US version of super Mario 64 into the sm64-nds file and renamed it “baserom.us.z64”. I ran the build-docker.bat file and it gave me an error. The error said: “error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=sm64dsi&target=&ulimits=null&version=1": open //./pipe/docker_engine: The system cannot find the file specified.
docker: error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/create": open //./pipe/docker_engine: The system cannot find the file specified.
See 'docker run --help'.
Press any key to continue . . .” In the CMD. Whenever I try it using administrator, it tells me: “A Super Mario 64 ROM is required to extract the assets and build the game.
Please place one in the same directory as this script, it should be named:

  • baserom.us.z64 for the USA version - recommended
  • baserom.eu.z64 for the European version
  • baserom.jp.z64 for the Japanese version
  • baserom.sh.z64 for the Japanese rumble pak edition
    Press any key to continue . . .”. Could someone please help me through this issue! Please!

Changing the control layout

I was wondering if you could please change the control layout? It would make more sense if you could change Y as C left and X as C right and use the touch screen for C up and C down.

The writings are difficult to read

The super mario 64 font is quite peculiar and reduced on a small screen with few pixels is quite difficult to read. How hard would it be to change the font?

Hardware sqrt helper functions

In #32 it was shown that you can use the hardware sqrt operation to replace a software one in nds_renderer.c. The default libnds sqrt function has extra checks that are unnecessary and does not support async computation. Libnds' sqrt does a check to make sure the hardware divider is not busy before sending the value, it only takes ~30 main bus cycles according to my testing, this means that unless you have two hardware divides back to back, there is no reason to check this value twice. Blocksds uses a simpler approach by having async functions for sending values to the hardware math coprocessor, this means we can use the cpu while waiting for the hardware math to complete. With testing I have found that replacing the sqrt call referenced in #32 with an async send, then check if (s > 0) and then wait for the hardware to finish the operation. In testing this saves 10-20 microseconds per frame.

// Normalize the result
int s = (lights[i].nx * lights[i].nx + lights[i].ny * lights[i].ny + lights[i].nz * lights[i].nz) >> 8;

// Send squareroot value to hardware before comparing (s > 0), this saves 10-20 microseconds
// Devkitpro's libnds does not have helper functions for async hardware math. This should be 
// put into a helper function.
REG_SQRTCNT = SQRT_64;
REG_SQRT_PARAM = (s64)s << 16;
if (s > 0) {
    while (REG_SQRTCNT & SQRT_BUSY);
    s = REG_SQRT_RESULT;
    lights[i].nx = (lights[i].nx << 16) / s;
    lights[i].ny = (lights[i].ny << 16) / s;
    lights[i].nz = (lights[i].nz << 16) / s;
}

If we do not switch to Blocksds, I propose we at least have these functions in a header file to have better operability with the hardware. The question I have is, where should this function go, so that it can be used by more than just nds_renderer.c if it comes to be useful later on? Should this be a function or a preprocessor define: #define sqrt_asynch(x) ...?

Performance Optimization: Using TCM and Wram

The current code does not use any of the TCM. This means that the instruction cache and data cache are overwritten more often and leads to more reads to main ram. This is a fairly free performance improvement that putting the most commonly run functions into the ITCM, and putting data that is used only by the arm9 cpu into the DTCM would improve some performance.

I have experimented with this and it is not a night/day improvement for filling the ITCM with commonly run functions. Likely due to cache coherency, so there should be a method of finding the best functions based on how commonly they are run, and if the function is run before the instruction cache is overwritten.

The DSihas 800KiB of wram putting data and functions there would mean faster read times and less stalling execution due to the arm7 reading audio data on the main bus. The comparison of read speeds from the wram and main ram can be seen here. The current arm9 instructions are about 800KiB in arm mode, and if we use thumb mode it is around 600KiB, which could fit into the wram. There is a basic implementation of wram in Blocksds.

Add 3DS port to this project as another option

I discovered there also exists a 3DS port https://github.com/sm64-port/sm64_3ds. It would be great if these were consolidated to a single repository which users can choose which ROM to compile (or compile both). More importantly it appears that fork is abandoned now while this fork is still being actively maintained. As they are very similar to each other in nature, I think it would make sense to consolidate.

Some of the rooms are buggy

I noticed a problem loading some of the big boo's haunt rooms. The level started off perfectly, but when you enter the third room from the left on the ground floor the textures are buggy and move fast in a messy way. The same thing happens in the third and fourth rooms upstairs. Looking at the crazy camera angles in those rooms I can speculate that the camera on the dsi has been adapted differently from the n64 version and somehow protrudes out of the walls of those rooms. I haven't played all levels of the game so I don't know if this happens in other cases as well. Is there a way to fix this?

reset button combo

the game relies on the presence of a reset button for things such as loading a different file (without bringing up the save dialog) and exiting the ending screen

Performance Optimization: Using Thumb Mode

Currently all the code is stored in main ram, and the arm9 core stalls when the arm7 core is reading from main ram. If the code was compiled in Thumb mode (and possibly with size optimizations, -Os/-Oz) it could require fewer ram accesses to execute the same code, and therefore reduce the performance hit from the low main ram and the audio. From testing I the code size seems to shrink to about 60% of the original size using thumb and -Os. I did not notice a significant change in performance, but did not perform the most detailed of tests, importantly this did not slow down the program at all. This would be a simple change to the Makefile.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.