How to patch LSDj to use an inverted palette

September 19th, 2009

Yesterday axolotl asked on 8bc whether it is possible to invert the monochrome palette in LSDj, for use with backlit screens with an inverted polarizing foil. And it’s very much possible to do, and it’s even possible to modify an existing ROM image. So, I’ll show you how I did it using a copy of the LSDj ROM, no$gmb and a hex editor. I’m using XVI32, but any hex editor would do.

The palette value is change by a hardware register, which is a place in memory that a Gameboy program can be write to, to change things. So I look it up in the Pan Docs, which is a manual to the Gameboy hardware. So let’s look in the section LCD Monochrome Palettes. There we see that the address is $ff47 in hexadecimal and how the value is constructed.

In no$gmb I open the ROM image and open Debug>Define Break/Condition and enter (ff47)! This tells the no$gmb to track any writes to that address so we can find the place where the palette is initialized and change it.

No$gmb define breakpoint

Click ok and press F9 to begin execution. (Or reset the emulator)

No$gmb palette breakpoint

No$gmb stops and show a bunch of machine instructions. The interesting part is 019C and 019E. Which takes the hexadecimal value $E4, stores it in the CPU register A then writes it to the hardware register $FF47. This is the code we’re looking for. The value $E4 is the standard palette. Go back to pan docs and check again how the value is constructed.
Then let’s split the value into its individual colours.
$E4 = 11 10 01 00

11 is the lightest palette value and 00 is the darkest. Since want to invert the palette we’ll reverse the order.

      00 01 10 11 = $1B

Great. Open the hex editor and replace the $E4 at position 019D with the value $1B.

Before:

Hex editor - before

After:

Hex editor - after

Lastly, open the ROM in an emulator to confirm that the modification worked.

LSDj with inverted palette

Enjoy the inverted palette.

11 Responses to “How to patch LSDj to use an inverted palette”

  1. Inverter as cores do LSDJ « Chiptuneportugal says:

    [...] as cores do LSDJ O Game Boy Genius tem um excelente artigo sobre como alterar a paleta de cores do LSDJ. Eles usam a ROM do programa para fazerem as alterações. Vale a pena uma vista de [...]

  2. axolotl says:

    Thanks a bunch nitro2k01! I got it working thanks to you. :D

  3. nitro2k01 says:

    axolotl: Could you please take a photo of normal vs inverted palette on your screen? I’ll feature it here as a comparison. (But please make them as sharp as you can.)

  4. axolotl says:

    I’ll try to get ahold of a camera for you. As soon as I do I’ll get some pics!

  5. Bud says:

    What makes this tutorial extra tasty is the fact that you explain how to figure out how to change the palette instead of just a quick answer.

  6. Starscream says:

    So do you have this for say version 3.9.9 available?
    I’ve always wanted to do this… but don’t know shit

  7. nitro2k01 says:

    You can use a hex editor and replace the same byte. As long as the byte at $019D is $E4 it should be safe to replace it with $1B this should work for nearly all version of LSDj, except maybe the oldest of old ones.

  8. Kurt says:

    I did this and it worked perfectly in my gameboy. I don’t have backlite neither any mod, so the screen is the original. it helps a lot in visualizing.

  9. axolotl says:

    Hey nitro,

    I finally got pics of the two, check out the original post for them! Sorry I took so long..

  10. Gameboy Genius » Blog Archive » Pictures of inverted palette LSDj running on an inverted DMG screen says:

    [...] How to patch LSDj to use an inverted palette [...]

  11. Pictures of inverted palette LSDj running on an inverted DMG screen - Data Airlines says:

    [...] How to patch LSDj to use an inverted palette [...]

Leave a Reply

If you'd rather contact me directly, please use the following e-mail address: It appears that you have Javascript disabled. Please enable it to see my e-mail address.