djhworld / gomeboycolor Goto Github PK
View Code? Open in Web Editor NEWGameboy Color emulator
License: MIT License
Gameboy Color emulator
License: MIT License
At the moment this doesn't appear to work. Investigate and see if you can fix this
Instead of faffing about storing ram saves as files, store them in a database such as SQLITE
Things to consider: -
Also could think about allowing ROMS to be stored in a database too?
To implement
When Simba climbs on the trees, his feet disappear.
I believe this is a regression after this commit 9f20c6a
Need to investigate and fix
Currently the debug facility can only be setup and enabled when you start up the emulator, it would be nice to be able to just hop into the debugger when the emulator is running
The priority mechanism for CGB sprites is different to non-CGB
Ensure this is implemented correctly.
Seen in
The game will spontaneously just crash/freeze up at a random moment. I've seen this happen a few times in Super Mario Land in world 1-3.
I have a feeling it's either: -
Difficult to reproduce
Support gameboy color features - after all this is supposed to be a gameboy color emulator!
The window (see #2) is supposed to appear at the bottom of the screen but it doesn't seem to be appearing in Zelda
I'm not sure how these work yet but 8x16 sprites need to be implemented
When you roll into a ball in metroid the game is supposed to display a solid ball that you move around.
However the animation for this in the emulator is wrong, it keeps flickering/changing and is different when you move left/right
This is the same when you jump really high too
I think this is probably down to the sprite horizontal/vertical flipping logic.
The go-gl/glfw and go-gl/gl go libraries bind to the C libraries which need to be installed on your machine to work.
This is a pain for distribution, so it's worth investigating the following
e.g.
etc
At the moment you have to start the emulator with a bunch of command line flags
I often use the same ones every time (e.g. -noboot
and -size 2
)
Would be nice to be able to store these into a file that is parsed at startup, with any flags provided on the command line acting as overrides.
Could also use this file to store stuff like the keyboard layout settings as well
This could possibly be combined into #19. with the settings stored in a database rather than a file. Although that would mean I would have to write something to allow you to maintain the database too....
In games such as: -
There is an in-game "clock" that counts down whilst you're playing a level, the quicker you finish the level - the more points you get.
This seems to be ticking fast, maybe 2-3 ticks within 1 second.
I'd imagine this is linked to the timer code, but I'm not sure.
The CGB has a feature to double the speed of the CPU, investigate and implement this feature.
As part of #16 a fix was put in place to flip sprites vertically and horizontally at the same time.
This fixed an issue in Super Mario Land 2, but the problem still remains in Bubble Bobble, it appears as if the pieces of the bubble are there, but they're not being rendered in the right places
The gpu code is horrendous and difficult to read. It couples CGB and DMG code into the same file and all feels a bit messy and cobbled together
It should be refactored into something cleaner.
Could take some cues from this talk https://www.youtube.com/watch?v=HyzD8pNlpwI of the direction to head in
Under heavy load (like when running using webassembly in Chrome), the processing of keyboard interrupts might swallow key events. The implementation relies on the scheduler to ensure that the cpu go-routine runs in between key-up and key-down events. This might not be the case as there is no guaranteed scheduling order.
While this is an anomaly of a specific scheduling, it would be nice to guard against this by delaying state changes of keys until after the next time the cpu had a chance to process them.
The Rakefile
requires the sys-uname gem to build gomeboycolor
on Unix systems. It would be useful to add this dependency to the How do I build it? section of the FAQ.
Keep up the great work. This project is an interesting example of the power of go.
The CGB has additional registers for DMA transfers to OAM RAM.
Ensure these are implemented correctly.
At the moment the keyboard layout is fixed to Z,X, Enter,Right-Shift and the arrow keys
This should be configurable. Could possibly store these settings in the settings file (see #21)
Currently no windowing is supported by the graphics drawing code.
Implement support for sound (looks tricky ๐ )
Allow users to save games where supported (I think this is when the game has as BATTERY option?)
I've seen some weirdness in the loading screens of some ROMS
See these videos for examples
Mainly
There are some issues with the drawing code that I think are connected to scrolling, like for example when you scroll across the map in Super Mario Land 2 it glitches when Scroll Y wraps round to from 0 down to 255
Would be nice to see how well the emulator is running in terms of rendering performance
Partially implemented but I don't think it works as it should - focus on getting this working
At the moment this doesn't appear to work. Investigate and see if you can fix this
I've implemented what I believe to be the correct implementation for MBC3 (see #7) but I've left out support for the Real Time Clock (RTC)
This needs to be implemented.
I've been messing around trying to eek out some extra performance from the emulator.
It appears as if moving the emulator code into a goroutine and then sending the screen data over a channel results in HUGE performance increases (like 20-30 frames in some cases)
Need to investigate whether this is a viable change and whether this change works across operating systems
To implement
At the moment the whole emulator is launched using command line settings.
Might be worth considering creating some sort of GUI that
Just like a virtual machines, it would be nice to have the ability to serialise the state of the emulator to disk and reload it into the emulator (even one on a different machine!) and resume playing from where you left off
Would have to take into consideration stuff like
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.