Status update

There’s been a while since last Lameboy release, so I will give you some idea what is happening now. Also I would like to thank all you guys supporting this project on various forums. Especially Wrecking_Crew (for numerous bug reports thanks to which you have fully working Zeldas), DanTheMan (for PHWiki page) and sonicandtails (compatibilty list).

So what’s happening to Lameboy DS now. Recently I don’t have so much time for development but some things changed from 0.8. My main goal at this step is to obtain reasonable compatibility before I go to some optimizations or new features. The only new feature in next release will be probably real time clock for Pokemon games which is actually already done. I have also already did about 5 compatibility patches that make many games playable, most notably Wario Blast input problem (thanks again Wrecking Crew) and Pokemon Crystal graphic glitches and Bubble Bobble. Currently I am working on Pokemon Pinball crashes.

Lastly some comments on sugested features:

  • custom classic GB colors – planned
  • custom border – possible
  • SGB borders and coloring – planned (quite complex to do and not very fun, but the result would be nice)
  • better/bilinear upscaling – not really likely to happen as current full screen feature is a hardware thing and there is no processing power to do software scaling with fancy algorithm. on the other hand I will not remove this feature because some may like it (although I agree with Harshboy that is looks bad)
  • emulated link/IR port feature – planned (although hard to do unless someone else do generic ad-hoc networking for libwifi or libnds first, and also I would need to get my hands on another NDS)
  • GS/GG codes – planned, fairly easy but I am afraid that full implementation would ruin performance (at least when emulated the way VBA does)

If I forgot something or you have other suggestions feel free to comment.

4,119 replies on “Status update”


Hihihi, awesome emulator, I’m amazed at how fast it got to such a great stage!

The planned updates are great.

Here is my bug report:

The game Amazing Penguin doesn’t run, it just goes to a white screen. Here is the info that is displayed when loading it:
Load time 105792us
Hardware ’00’
Memory controller: MBC1 (01).
Rom size 4 banks
RAM size 1 bank (ramsize 0)

Thanks for reading!

Great, great, emulator!!
Keep up the good work!
Anything I can help you, I’ll be glad to do it.

About the bilinear upscaling wouldn’t it be possible to do something like nesDS or PocketNES does (the function that smooths the text… why does Nintendo hardware always come short on power…)?

Also (again using the nesDS as an example) how about rewind/fastforward function? And a menu to control thr save/load operations, key config (autofire would be nice)…

Great job so far (why doesn’t the ds play my old gb/gbc carts…). Hope you keep at it 🙂

Heh, thanks for mentioning me, you didn’t really have to. The PHWiki page wasn’t hard at all to make, though looking back at it, it could use some revisions at the moment… In any case, I wasn’t aware there was even a compatibility list, so I’ll be sure to add a link to the page page.

Oh, and tiny bug report: when you load “Pinball – Revenge of the” the debug text at the bottom goes crazy. The game still runs perfectly fine, so it’s not a fatal error, but I thought I’d point it out nonetheless.

The new features are looking really good (especially the SGB borders/palettes), even if some of them are mere possibilities at the moment.

Does the bad scaling have to do with the fact that you’re scaling UP, whereas with NES DS and other such emulators, you’re scaling DOWN instead? I’d imagine the fact that you’re scaling both horizontally and vertically as opposed to just vertically also has to do with it.

In any case, keep up the awesome work Nutki! It’s greatly appreciated by many gamers.

Oh, and tekla, Lameboy already has fast-forward (hold the L button), though rewind would be interesting. Keep in mind however that a rewind feature would require a lot of RAM, which I’m sure Lameboy is rather short of at the moment (especially with large games). The NES has less to manage, so NES DS can afford to waste some RAM on the rewind function.

In any case, the reason you can’t play GB/GBC carts on your DS is because it simply doesn’t have the hardware for it. The reason you could play them on the GBA is because the system actually contained both processors on it, and a little tab on the inside of the slot would tell the GBA which mode to boot in. For the DS, the GB/GBC processor was removed to save space, so even if you forced a cartridge in there, the DS wouldn’t know what to do with it.

It’s too bad to hear about the lack of bilinear filtering. I fully understand, howerver, since it’s obvious that a bilinear tranform requires many operations, being the weighted average of four surrounding pixels. However, it’s possible to cheat and do a “fake” transform with a tiny fraction of the work. Basically, you directly copy the original pixels, and then do as little simple averages between 2-pixels as possible. The result doesn’t look nearly as good as a real transform, but still looks much better than nearest neighbour. And if there is some extra performance to spare, you can do a real linear transform for each scanline (still much less work than bilinear because each pixel need only be the weighted average of TWO, not four pixels, so really each pixel is the sum of the two neighbouring pixels each multiplied by a fraction) and only cheat on the extra scanlines you need to create.

So, it should be quite simple (at least for greyscale non-color games with just one channel), what you do is:

1) You’ve got 144 scanlines on the GB, and 192 on the DS. You’re going to be rendering, in the first pass, 144 scanlines spread out as evenly as possible over the 192 real lines.

2) For each scanline, do a linear filter. NOT bilinear, but linear. You only need to weight against two pixels, it’s a MUCH simpler operation with way less computation. This would be the best looking option considering the major cheating we’re going to do in step 3, but you can even cheat further here… We’re going from 160 pixels wide to (let’s say about) 214 pixels, so you’ve got to “create” 54 new pixels in there. To be the ultimate mizer, when rendering the scanline, render 160 pixels as direct copies (NO extra work) and fill in the extra 54 with a simple average (can be done 1-pass because you can do the average before the next pixel is copied). That is, add and divide by two, or pre-divide each. In this case, for each scanline you’ve got very little extra work above the simple copy due to the low number of new pixels.

3) The problem now is, you’ve got 160 scanlines at the correct width, but there are 48 blank scanlines to fill in. This needs to be 2-pass, but really it’s not, because you do one 160-iteration pass to horizontally “stretch” the original scanlines, and then one 48-iteration pass to create the missing scanlines. Well, these are fairly easy, for each missing scanline, just average it with the one before/after it. I’m not that familiar with the DS hardware, but since you’re just averaging in the second 48-iteration pass, maybe you can just have it do an alpha blend on the two scanlines, or maybe there’s some accelerated way in ARM assembler to do the same simple operations on a whole set of values at a time.

So, all this scaling might not look nearly as good as real bilinear filtering, but it will look enormously better than the current scaling. If you don’t cheat in step 2, it will actually look pretty close to real bilinear with way less work since you need to iterate on every pixel but do way less work per-pixel. If you fully cheat, you save a bundle and only ever do simple two-pixel averages.

If you fully cheat, here is the breakdown:

23,040 pixels DIRECTLY copied with no extra work beyond a single copy (in other words, the number of pixels in a GB screen)
7,776 extra pixels in existing scanlines using simple averages
7,680 extra pixels in new scanlines using simple averages

So, you’re directly copying 23,040 pixels, and you’re drawing an additional 15,456 pixels as the average of two other pixels, requiring very few operations per pixel (something like add/add/divide/store). So, yeah, this is slower than NOT doing it, obviously, but it’s many TIMES faster than a real bilinear transform!

I have no idea how this would work for colour games though. I don’t know what native pixel format the DS uses… If it’s a channel-based system, it’s easy but slower. If it’s a pallet-based system, damned if I know how you’d do it. I’m sure it’d be way more complex/slower with pallets…

I’m also not entirely sure how much better this would look than nearest-neighbour. Or how much worse than a real bilinear transform.

I’ll probably write up a quick implementation of the two methods (linear per scanline then simple average the new scanlines, or simple average per scanline then simple average to create new scanlines) to see what they look like, since it’s really simple, but it might be a while before I have time to actually write some (slow crappy rapidly prototyped) code.

Of course, this might turn out to still be impossible due to still being too much work on top of GBC emulation, so all my thought on this subject might be wasted after all 😛

So there will be real-time emulation now? I’ve wanted to play Pokemon silver ever since my copy’s battery died…I can’t wait! You’ve done an incredible job with this emulator in such a short time. Keep up the good work!

Hey man, awesome emulator! I mainly got it to play Shantae. Sadly it only runs at about 30 fps, but I’ll wait for the emulator to be developed a bit more. I’ll keep myself busy with some other gems I’ve never played, like Metroid II, and the 3 zeldas. Thanks a lot for creating this great emulator!

Heh, I was only trying out your emulator, nutki! (I spent alot of my childhood playing Wario Blast too… XD) I think the game link and IR emulation will be interesting… Great job! 😀

You’ve got some good ideas there nutki. One bug report though – the game ‘Baseball’ doesn’t run on lameboy, it shows the menu but shows errors on the bottom screen.

Just found out another thing, in dragon warriors III the framerate is always 40-45 when they’re are 2 or more people in a room at a time

why must you taunt us with working time, but not let us have it yet? ;_;

Can’t wait. 😛

@Kira: Because you have to make the program before you can release it! XD And he’s planning, not taunting… and letting us know that the project is still alive.

First of all, incredible and very nice work! the emulation is nearly perfect!

I’ve tried Zelda Link’s Awakening and looks great, it’s sounds greats too, but i have a problem… to save in this game, you must push A+B+SELECT+START and the save menu appears, but it doesn’t happen in the emulator, so I can’t save the game. I suppose that it is not possible to push 4 keys at once, but it would be nice that you implemented this.

BTW, I tried to save with X button, but… how can i load this savestate? I haven’t found any button to load.

Ok forget my last message, yes, i can save, and it works… until i turn off my ds. I mean, when i save my game, i can reload the ROM and i can continue my game, but if i turn off my DS, when i load the game, i have to start from the begining… it’s my fault? i do something wrong? thenks for all

I have 2 DS’s 2 MMD’s and a router. So if you need testing for lameboy I could do some testing. I haven’t done any programming, but I could do normal testing. I’ve been homebrewing for a while so I usually can get stuff to work as long as it’s possible on the MMD.

Great emulator. Luv playing all my old GBC games again.
keep up the good work!

@Korso: You can save Link’s Awakening. You can press all four buttons at once. Once you do that, press ‘X’ a couple of times. I know you only need to do it once, but I like to do it multiple times. For extra insurance, save the game (both by saving it “normally” and pressing ‘X’), choose to start your file again, and save again.

I beat Link’s Awakening on lameboy 0.7… So I’m talking out of experience.

I guess the pressing ‘X’ to save is a sort of dual-edged sword. Whenever I DON’T want the game to save (assuming it saves automatically, like Mario Land 2), I turn off the DS… But sometimes I forget to press ‘X’ when I DO want to save! O_O


Nutki, it seems like you’re going to have to do some sort of “comment review”. Someone’s already spammed. >_> Christ, can’t people be mature?!

Hey Nutki, thanks so much for the fantastic emulator!

Just a question, I know you can press X to save a save state, but how do I load the save State?

Great emulator! It works for most of my favourite games (e.g Zelda!) but unfortunately when playing either Harry Potter game (that is, Philosopher’s Stone and Chamber of Secrets) the game screen occasionally starts flashing and changing colours… it’s still playable, but annoying. This happens in the conversations and battles mostly. Here’s what my screen has to say about it, just if it helps:

fps 41
ROM size 256 banks
RAM size 1 bank (ramsize 2)

The game also plays a little slower than some of the other games. Also, I’m playing this on an R4.

If you could fix this issue I’d worship you, as these two games are in my favourite 5 GBC games.

Thank you so much for all your hard work! I’m so glad I can finally play some of my old favorites on my ds with a backlight. ;D

Guys, the X button is NOT a savestate button. It’s more of a “confirmation save” button if anything. Basically, when you save in-game, Lameboy keeps the updated GBC SRAM in the DS memory, but it won’t actually get written to your card until you press X or enter the rom selection menu. It’s the same concept as with SNEmulDS. It won’t update the *.sav file with the updated save until you explicitly tell it to.

It’s somewhat of an inconvenience, yes, but like Wrecking Crew said, if you wish to discard a save you made, just turn off the DS without pressing X or L+R and the save will be intentionally lost.

You do a great job, not only is this emulator the best for the DS, it might as well be soon the best of all handhelds 🙂


Ohhhhhhh… so that’s how it works…

Haha, guess we were mistaken… at least it’s clearer now… ^^

Also, I played Pokemon Crystal, and set the time at 3.59pm (Time I started).
But when I continue playing, the clock never moves, and is forever at 3.59.

When I try to save in-game, the background will turn to night, and the time will instantly change to 7.02pm… but after encountering a wild Pokemon, entering a house etc. the time of day resets back to 3.59pm.

So basically, the only times I have in my game are 3.59pm and 7.02pm. Yeah.

@ Takuya:

You could try and look for a hack of Pokemon Crystal, a hack that’ll allow you to adjust the time right from the PokeGear watch. That’s the Pokemon Crystal I’m using anyway.

I always wondered why everyone was talking about savestating… and now I finally noticed (I never felt so stupid in my life)… It was just that people were confusing ‘X’ as a savestating button instead of a SRAM save button. XD

Nutki, have you tried swapping from full screen to GB resolution (or vice-versa) while pressing ‘L’? If you haven’t, it leaves a little bit of screen flickering where the black part is.

Nothing big, but I guess you might’ve wanted to know about it.

Is there any compatibility list, other than the couple of posts at GBATemp? If not, someone should make a compatibility page.

By the way, great job, Nutki. You’re one of the few reasons my DS isn’t collecting dust this summer.

FIRST GREAT JOB you are the BEST! : )
Can put a Action Replay code support on the lameboy emulater.So we can cheat.
And it would be nice when you done final release of this gb/gba Emulater that you would (if you want) work on a GBA Emulater for slot 1(like m3 ds simply)


Great job on this wonderful emulator.

Wee tiny request/suggestion:

Is it possible to do a invisible (or No Border) option like in Goomba, meaning that instead of having a black box around the GB-screen it actually shows you more of the game (however Goomba didn’t show moving sprites outside the actual GB screen). A rather neat feature that really shines in platform games.

Also when/if you add custom palettes for GB-mono games, don’t forget to add a built in yellow/green scheme for us nostalginuts 🙂

Lastly a bit of a bug report, while playing Donkey Kong (Donkey Kong (V1.1) (JU) [S][!].zip) the screen seems a bit flickery, it’s not unplayable but a bit annoying.

Many thanks again for your hard work on this sweet emulator.

Um im not sure if you mentioned this but when i played like a gb game on a gba it had color instead of black and white it possible if you can make that happen?

@Darig0n: That’s what Nutki’s working on. It’s in his post. “Custom GB colors”. 😛

Hey, just wanted to let you know that Harvest Moon 3 GBC works fine so far, and Magi Nation also works, though it is a little slow during battles (I’ve never played the real game, so that might be normal. I dunno.)

Thanks again for this great emulator!

@MiserBrooke: That “feature” in Goomba Color is actually an issue caused by the fact that the GBA doesn’t have enough layers to emulate all of the GBC layers plus a black border layer. Dwedit somehow made it work for the updated WIP version that you can find on his forums, though I’ve heard it may cause minor palette issues in a couple of games.

@Darigon: That color info is actually stored in the GBC BIOS itself, not in each individual game, and the GBC BIOS has never been dumped. Therefore, the only way to create such color info would be to manually create our own database of palettes for each individual game. In Goomba Color, there are a few palettes provided for some specific games, and you can also use Super Gameboy palette #1 if you wish, which works alright for many games. I’m guessing that’s the type of thing Nutki would add in.

thanks for such a nice GBC emulator works wonderful with the games I’ve tried. is there any chance of you adding actual save states/load states instead of having to use the actual saving in game as some games, like Zelda DX, are rather difficult to save in

Firstly, I’d like to thank you for making such a good emulator, even with sound support!

I had a suggestion for the clock feature in Pokemon Crystal.
You can read out the current time/date from the DS’s settings right?
Is there any way you can tie that information to the PokeGear clock in the game?

That would enable GSC to have acurate time settings like Diamond and Pearl now have and would make things more realistic.

I’m not sure if this would take a lot of effort and if it does it would be better to focus on the stuck-time (always stays on the time you originally set and occasionally switches to night time) bug reported earlier.

Anyway, keep up the good work!

A bug report on Super Mario Land 2

When i approch the pumpkin world on the upper-right side of the map it takes me back on the start screen and i can’t enter the world

@Claudio: In lameboy 0.7, it works. But uh-oh! O.O Nutki, thou hast broken Super Mario Land 2!

@Claeric: Patience is usually awarded. Nutki’s probably busy working on Lameboy or simply having a life. D:

Liez. NOBODY has a life that interesting that they don’t have a few minutes to tell us how it’s going.

There was more to that comment, but it didn’t show up for some reason. o_o It said “Nobody. o_o”

I think my shifty-eyes with the little carrot bracket things stops things from showing up past them. Which is odd.

can i set custom key config?
i want to set NDS “Y” to GB “B” button like ini file.
also NDS “B” to GB “A”.

I am looking forward to the next release heavily, and will surely make another compatibility list that is far more extended then my last one. I am sure it has been said and thought of, but if scaling could be done ala GBASP with just a horizontal stretch then it would suffice, but as you said it’s nothing more then a hardware trick.


Comments are closed.