logoalt Hacker News

I built a Game Boy emulator in F#

168 pointsby elvis70yesterday at 5:14 PM41 commentsview on HN

Comments

debugnikyesterday at 6:13 PM

Cool to see F# here! Emulators are a great way to learn a language. On first sight you chose well between more or less idiomatic F# for each job.

Some low hanging fruit to reduce allocations: the discriminated unions in Instructions.fs could be [<Struct>], reusing field names to reuse internal fields.

Also, minor nitpick but I'm confused about some of the registers. They are already of type byte, the setters with `a &&& 0xFFuy` don't add anything over `member val A = 0uy with get, set`. I'm guessing this changed over time.

show 2 replies
cermicelliyesterday at 5:44 PM

Finally someone putting in actual human effort to learn something, and not a LLM helped me build X in Y minutes.

There is some hope for humanity after all I suppose.

show 3 replies
z500yesterday at 5:58 PM

That's so cool! I love F#, but I wrote a little Smalltalk interpreter in it and I can confirm it isn't exactly a speed demon for that kind of thing if you use it as intended lol

show 3 replies
yoyohello13yesterday at 6:10 PM

I always find emulators written in functional languages impressive. It tends to be much easier to map hardware to an imperative language. I enjoy seeing the functional abstractions people come up with.

show 1 reply
hmokiguessyesterday at 5:46 PM

F# is super fun, awesome work!

CSMastermindyesterday at 6:43 PM

Insanely cool. I've had it in the back of my mind to write a Rust compiler for the game boy for a long time and everytime I see something like this I think about brushing off that project.

thrownawayszyesterday at 6:53 PM

mildy related but wasn't there an emulator (maybe not GB but NES or SNES?) which had a visual panel showing each CPU cycle step by step? afaik it was very slow but the 1000% accuracy was the goal not playability.

show 2 replies
mkw5053yesterday at 7:37 PM

Very cool. Makes me want to build something with F*

show 1 reply
deadbabeyesterday at 9:28 PM

Building emulators is cool but everyone does it, and the end result is more or less the same. Is there some things that could be done during the process to perhaps make an emulator a little more unique instead of a perfect replica?

show 1 reply
MattCruikshankyesterday at 6:06 PM

Sorry for the tangent - does anyone have some really zoomed in views of GB, GBColor, GBA screens in operation? I'd love for retro shaders to be able to more faithfully reproduce.

I mean, ideally, we'd run different color test patterns through, in different lighting conditions, to build a really detailed model, right?

show 1 reply
dmitrygryesterday at 7:46 PM

> No code is free from the influence of AI these days, even learning projects

Speak for yourself

__loamyesterday at 6:01 PM

I'm actually starting a new project to create a gba emulator in zig, and also starting with chip8. I'm going to skip nand to tetris because I played Turing complete. Cool to see I'm on the right track!

show 1 reply
abricqyesterday at 7:23 PM

[dead]

Ginopyesterday at 6:21 PM

I misread Fem-Boy and I was not understanding the context anymore lol