Debugging Error1 / E1 on sideload Game Start

Hi,

After what seemed like forever, I finally have PD hardware.

I built my game with SDK 2.0.3, and then USB sideloaded it into PDOS v2.0.1
EDIT: Same with PDOS 2.0.3

On launching from the [sideloaded] section, immediately the PD shows the "falling blocks" MSOD (Monochrome Screen Of Death).

Is this an SDK Vs OS version mismatch?

How can I debug this further?

Obviously, it works fine in the simulator.

1 Like

When you press B to get more information on the blocks screen, what is the exact error message shown?

Ah... I see my own error message.
PBKAC error!
(I'm so embarrassed)

One of my resource files was not packed/uploaded.

2 Likes

Actually! It's not me.

The error message is "Failed to set the Keypad to Latin".

I do have Latin keypad error messages, but after double-checking, and renaming my latin.bin to latin.dat, I can posit the above.

Just for the record, my error message is "Failed to load Keypad file [latin.bin]", and that's how I was mistaken.

EDIT: Can't find anything about that: play date "Failed to set the Keypad to Latin" at DuckDuckGo

EDIT2: I just #ifdef'd out my entire keyboard / high-score table. I'm 100% confident that message is not generated by my code.

No WAIT! It is me, bah!
That message is buried in the pdex.bin file. So it looks like pdex.bin is not being regenerated during the compile.

# strings pdex.bin | grep -i latin
Keypad loaded Latin OK
Failed to set the Keypad to Latin
latin.tkp

But that error message has been gone from my code for months. When is the Source/pdex.bin re-generated? I just removed it, and now see "Couldn't find pdz file main.pdz". Following the doco, I have an empty pdex.bin file. But it's staying empty.

Anyway, what even makes that file? The simulator? pdc? When?

EDIT: I can't even get C_API/Examples/Hello World to build for the PD console properly. It runs in the simulator, but that's it. It's not making the Source/pdex.bin. Has the environment changed somehow? I don't see anything in the doco. None of the cmake sources define the pdc or device targets that are referenced in the building doco.

For the record, I have SDK 2.0.3 installed, with $PLAYDATE_SDK_PATH pointing to it. I made a copy of PlaydateSDK-2.0.3/C_API/Examples/Hello World. then the normal rm -r build; mkdir build && cd build && cmake .. && make all && cd ...

Are there extra install dependencies other than the SDK for console executables?
I do have gcc-arm-none-eabi-10.3-2021.10 installed too, and in the $PATH.
The SDK/bin is in the $PATH too.
On: Ubuntu 22.04.3 LTS

EDIT2: This info about "Compilation requirements" looks relevant, but unhelpful.

EDIT3: The issue is that the ARM version of the binary is not being made, and the pdex.elf/bin is created from this. Why did the ARM build stop building sometime a few months ago? Did I change the cmakefiles? Did an imported common file change? /me shrugs.

Ok I solved this.

I took the example cmake Makefile from C_API/Examples/Life and adapted it.

For whatever reason, I had to add --nosys.specs to common.mk.

Anyway, I still don't know why the build became broken. But it's working now.

1 Like