Author Topic: GNUBOY64:GB&GBC emulator for the N64 ( Opensource Gnuboy-x86 hackport )  (Read 8579 times)

0 Members and 1 Guest are viewing this topic.

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2198
Current version : 1.1 : [Download]

Source code : [@gnuboy64 on GC]


Quick search index table
(Use ctrl+f to jump to each section)

1.0 Readme
1.1 Features
1.2 Differences from the x86 version
1.3 Installation
1.4 Browser controls
1.5 Emu controls
1.6 Contribute to the code
1.7 Compiling the code (Updated!)
1.8 Special thanks




1.0 Readme
GNUBOY64 is a port(read:hackport!) of the original GNUBOY-x86 version  and -heavily optimized- for mips architecture,
which means that most of the vital parts had to been re-written from scratch in order to achieve the highest possible performance.

Also , additional work has been done into reimplementing all the features of the x86 version , including save states,sram,rtc and even
 the ability to take screenshots and save them directly to the SDC(The image format is very simple though ~ uncompressed 16bit or 32bit(depends on FB mode)  targa).

Compatibility is also the same with the x86 version but with just one exception : 8MB games are NOT supported unless your flashcart
has extended ram that can be mapped directly and the source tree is built with special flags in order to make use of this (already-implemented)feature. (HINT: Expansion pack IS highly recommended)

Performance-wise  ,  its running at fullspeed in GB mode and very close to fullspeed in GBC mode for most games , and that's because the interpreter is not written in assembly....But some other time i might re-write the cpu in asm aswell for +15-20% speed boost.For now i had to do the LCD first since it had much higher priority .  ;D ....

And well, that pretty much sums up everything within 4 paragraphs.For more detailed info just check sections 1.1(Features) & 1.2(Differences from the x86 version).

Have fun.




1.1 Features
+Supports Neo Myth64 flashcart(You can implement more drivers if you like.All are set already...just add the missing bits)
+Opensource : http://code.google.com/p/gnuboy64/ 
+GB & GBC support (except 8MB games , but if you plan to add driver for other flashcarts that have extended r/w RAM you
can implement the (already integrated) extended ram mode)
+Automatic SRAM + RTC backup/restore ( Stored in /gnuboy/saves/ )
+Save states(up to 999)   (  Stored in /gnuboy/saves/ )
+Ability to take screenshots (  Stored in  /gnuboy/screenshots/ )
+Dual immediate rendering modes : 256x240  1xscale , 512x480 2xscale
+Support for multiple FS drivers & wrappers
+GUI


1.2 Differences from the x86 version
+~90+% of lcd code has been rewritten in  mips assembly
+Added more cpu precomputed lookup tables&improved original code
+Almost 1MB of rom data are precomputed lookup tables (Yikes!!!)
+Wrote an improved algorithm for vram pixel data updates that reduces the linear complexity of the original
+Implemented mem_map_ptr for direct HDMA mapping & mem_read_range & mem_write_range for unmap-able addresses
+Added lookup table for precomputed vram flags
+Added lookup tables for precomputed sprite flags(gb&cgb)
+Added r8g8b8/r5g5b5a1 palette 3268*sizeof(u32) precomputed lookup tables (32bit mode is not used as it doesn't "offer" anything
other than wasting more ram.Make custom builds of the code if you want that feature...)
+Improved sprite sorting code
+Sound mixer was heavily optimized
+Sound wave frequency is calculated using a constant reciprocal table that replaces some divisions with a fraction mult..
+Improved sound reg reads/writes
+Improved loader code (Re-allocations for alignment are replaced with header fetching + one allocation)
+Implemented file system wrappers & drivers (other flashcarts can be supported aswell)
+Implemented custom low level non blocking audio driver
+Fixed memory leaks found in the original code
+Made countless tools
+Uses the most recent GCC sdk toolchain version(4.8.1)
+Many other changes over the last 2 months that i forgot......................


1.3 Installation
1.Download & extract the archive
2.Copy "gnuboy64.v64" AND the directory "gnuboy" on the root of your SD cart
3.Put your GB/GBC games(uncompressed!) in the directory /gnuboy/games/
4.(Optional)If you have save files(rtc,sram,states) put them in /gnuboy/saves/
5.Launch "gnuboy64.v64" as your would do with any homebrew app


1.4 Browser controls
Up/Down : Go up/down one item
L/R : Switch to prev/next page
A : Launch game in low-res mode(Recommended)
B : Launch game in hi-res mode
START : Re-load & sort rom list (useful for switching sd cards...)
Cr : Take screenshot ( Will be saved in /gnuboy/screenshots )



1.5 Emu controls
Dpad : Dpad
A: A
B: B
START:START
Z:SELECT
L:Save state
R:Load state
Cu:Increase save slot number
Cd:Decrease save slot number
Cl:Exit menu(You can either return to emulation mode or exit to the browser screen...)
Cr : Take screenshot ( Will be saved in /gnuboy/screenshots )




1.6 Contribute to the code
If you would like to apply your own changes to the source code tree(ie implement fs drivers for other flashcarts)
feel free to ask for svn commit access anytime...



1.7 Compiling the code

1.svn checkout https://gnuboy64.googlecode.com/svn/trunk/ gnuboy64
2.Extract "toolchain/toolchain.tar.lzma"
3.Read the extracted README file
4.Do the installation (to a -separate- sdk path if you have a n64 sdk previously installed *This is important*)
5.Now you're ready to compile the code :
export N64_INST=/path/to/sdk
make -f Makefile.driver_name (ie : make -f Makefile.myth64)
(Currently only neomyth is supported.If you would like to add support
for your flashcart have a look at /filesystem/ &/filesystem/drivers/ and just replace the missing bits )



1.8 Special thanks
I would like to thank the following people for their contribution to the retroscene :

1.ChillyWilly  : For implementing the initialization/sd fs code for NeoMyth flashcarts series & also for beeing a very kind &helpful person
2.Shaun Taylor : For his great efforts in putting together a fine opensource SDK for the N64 platform.You can checkout his work here :
http://www.dragonminded.com/n64dev/
(NOTE : The libdragon included in the source code is a modified version and does things very very differently(read:in very hackish way & mainly for initialization)...If you would like to start coding for the n64 platform use this version instead : http://github.com/DragonMinded/libdragon)
3.The original authors of the x86 version of gnuboy
4.Neoflash for hosting yet another retro-powered contest
« Last Edit: August 19, 2013, 02:54:29 PM by Conle »

Offline sanni

  • Neo MOD
  • Hero Member
  • *
  • Posts: 504
This looks great   ~sm-73.gif~.gif ~sm-76.gif~.gif

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2198
Thanks Sanni.
Btw,I did some more improvements(focused on gbc mode) , but the release will have to wait    ~sm-82.gif~.gif

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2198
1.1 is now available (Download @ first post) :

+Source is available : http://code.google.com/p/gnuboy64/
+Compile instructions updated
+LCD mips assembly rewrite bumped to ~90%
+Reordered some asm code for better parallel execution(less stalls)

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2198
Gnuboy64-Svn-r7 (tiny update) is available (attached to this post) :

Also the project has made it to the official port list of Gnuboy :
http://code.google.com/p/gnuboy/wiki/Ports

« Last Edit: August 20, 2013, 02:01:41 PM by Conle »