Arduboy Boot Screen

Discussion about putting a boot logo in the driver.

Any input about the font or the sound? I know we started with some sound that is pretty “familiar” with older systems but we should probably tweak that something to be more unique to the Arduboy?

Awesome work Dreamer and everyone else contributing to this!


It’s really gotta be something simple for size too, we can’t assume someone is linking in a whole tune or synth library just for our boot screen so that means we’re mostly just flipping the speaker pins manually with a simple loop/function or 2. You can get some very neat effects this way however such as sliding the frequency up or down or making various types of sound waves.

So far I haven’t been able to get the hardware scroll to work. You don’t seem to be able to change the COM offset quickly without ghosting and the other way to scroll the screen offset doesn’t also allow you to black out part of it… that means we’ll need to use drawImage or a custom for loop - there are pros and cons to both approaches. I’ll post more of the technical stuff on Github.

It does look pretty cool though.

I also played around with a version where the logo fades in pixel by pixel but didn’t like it as much.


About how many bytes are we talking here ?

The logo is only 16 pixels high by 88 long, meaning that the raw data (in screen form) would take only 176 bytes. There are other encodings that can reduce that, but only by adding code to decode the encoding - likely a wash on size overall.

Did the fade in creep across, or was it “random” with the pixels gradually filling in the entirety of the letters?

I do like the logo (especially the nibbled corners on letters!), but I’m for super simple on its on screen appearance - just drop it in hold for a certain time. I also like the idea of a sound effect (if only because it lets you know your Arduboy’s screen and speaker are working), but you suddenly need to be very certain you are not hitting a real tune. This needs to be an absolute no-brainer for developers to include. The graphic is already at 176 - I would want to see it held to 1% of main memory, so no more than 328 bytes. And - smaller than that would be better. Obviously it helps if it makes use of library functions that everyone is likely to have anyway.

It’s going to be a rare piece of code that needs that last 300 bytes to achieve perfection.

1 Like

I actually think that’s a poor assumption. Most TeamArg games right now aren’t using any of the core library draw routines because there are better (and more specialized) ones available elsewhere. Even if we were to have different/better draw routines the best way is to have routines for different types of drawing… so if the image slides in with drawSimpleImage and you only use drawTransparentImage in your sketch then you’re still paying a price to have the logo (logo + drawSimpleImage). That’s why I was trying to use it without using any of the built in library functions - just memory and hardware.

328 bytes is a tight requirement. Currently my hardware only code is at 4xx bytes. The fade in used even less but I forget the exact number.

I am in favor of a solution based on NONE of the libraries, as small as possible.

Speaking as a game developer, I ditch everything I don’t need (like font and text). If I can gain 500 bytes, I will.

If you want to be sure that every game or program will always boot the logo, you’ll have to make it part of the bootloader.

From a branding point of view, this would be best (making it impossible for people to ditch the boot logo)


Agree, think it’s too late at this point. Don’t worry as a developer it’ll always be super easy to get that space back for your sketch. If we want to FORCE it big time we have to figure out the bootloader as you said. I think we just want to have it recommended cause it would be super nice.

I’m starting to lean towards a static logo + sound.

1 Like

Would it be more compact to do a ‘shimmer’ effect? i.e. a 1px line of unset / OR’d pixels that moves left > right ?


Feel free to submit your own PR with a different effect and size cost. :slight_smile: Shimmer sounds kind of boring though.

1 Like

haha Nintendo sound and SEGA shimmer … OK WE NEED PLAYSTATION FONT !

1 Like

My PR now has power light, scrolling logo, and interesting boot tones.

Not as a compliant, just for feedback – memory footprint?

I’ve stopped caring, too stressful. There is a second boot function if your sketch gets too large and you want some space back.


What I’d like to have is just a standard ARDUBOY logo and tone. I have a bunch of different funny intro animations for different projects and I like to use a unique one for each game! :slight_smile:

I like the logo in the OP screenshot, but I think the tone needs to be more nifty than the ardu breakout one.


The logo looks good! I think its a faithful representation of the logo. I honestly think it will be cool to see if people want to hack it and do different things. You know sometimes sega logos had sonic bouncing around… stuff like that.

We need a sound still… If anyone is musically inclined that would be of great help!

Right now it has the Red LED turn on then fade out, I think I’m going to try and code up a little rainbow swirl and get that added in unless someone wants to beat me to it!! :smile: :rainbow:

1 Like

Please don’t. It takes up enough space as it is now. I was going to see about not using the PWM (no fade) to reduce the space used, but the last thing we need is a complex RGB animation at boot. Lets make a great demo app or something, but boot time is not the time to show off the full power of the LED.

Hi. I am one of the buddy pack backers and I am excited to get my Arduboys soon. Anyway I was reading this thread about the logo and saw some nice game videos how it look. Having a quick look at the datasheet of the ssd1306 showed that there are some hardware features to scroll horizontally/veritically. Also the RAM start/end addresses can be set.

Commands: 0x26/0x27/0x29/0x2a/0xd3

Now I was wondering if by using these features the scrolling of the logo might get really smooth, snazzy and cheap to implement. As it is very early during boot there is almost no risk to screw up the display configuration for the game as we can restore it afterwards.

I have no Arduboy yet to implement it myself but maybe somebody that has one can try it out.

Also if not already done the display inversion feature would be nice for some flash effects…

I’ve tried using hardware horizontal scroll and liked the result. Memory use was quite small. You can’t do just vertical scroll in hardware. Besides horizontal, you can only do horzontal+vertical (diagonal).

If anyone wants to try my horizontal scroll logo, a version of the library with it is on GitHub here.

Note that this is based on an old version of the library, so some sketches updated to the latest API may not compile with it. You can use the following sketch to just show the logo and then stop:

#include <Arduboy.h>

Arduboy arduboy;

void setup() {

void loop() {

Nice. Unfortunately I have no Arduboy to test it. Just saw that there is a little note in the datasheet that continuous vertical scrolling is not supported. Anyway I am curious what happens if you use command:

0xA3, 0x00, 0x40

and then use command:

0x29, 0x00, 0x00, 0x07, 0x00, 0x00

Probably nothing happens. Maybe you tried it already.

1 Like

No, I haven’t. You’re welcome to hack my logo code to try it, when you get your Arduboy.