| 1 | -- porter's foreword --\r |
| 2 | \r |
| 3 | Even though ZX-81 ported my Wiz version to Caanoo, some people kept\r |
| 4 | asking me to do the port instead because of apparent sound problems,\r |
| 5 | so here it is. Note that I did not use ZX-81's work for this release,\r |
| 6 | because I had various changes for Pandora version and wanted to have\r |
| 7 | them in, so different set of bugs then in ZX-81's version are\r |
| 8 | possible. Savestates might also be incompatible.\r |
| 9 | \r |
| 10 | To use this, you'll first need to copy authentic GBA BIOS to gpSP\r |
| 11 | directory. It must be named gba_bios.bin and should be 16kB in size.\r |
| 12 | \r |
| 13 | I've appended the original gpSP GP2X readme file as it contains lots\r |
| 14 | of information that is still relevant for this version, as well as\r |
| 15 | development history of this project.\r |
| 16 | \r |
| 17 | - notaz\r |
| 18 | \r |
| 19 | Changelog:\r |
| 20 | \r |
| 21 | 0.9-2xb u8\r |
| 22 | - Caanoo port\r |
| 23 | - fixed tv-out for pandora\r |
| 24 | - integrated M-HT's neon scalers (pandora only)\r |
| 25 | - merged an assortment of calc84maniac's bugfixes\r |
| 26 | \r |
| 27 | 0.9-2xb u7\r |
| 28 | - Pandora port, using hardware scaler for video output.\r |
| 29 | - Fixed a few portablility issues in ARM asm and sound code.\r |
| 30 | - Tweaked timing to suit pandora's LCD refresh nicely.\r |
| 31 | - Maybe fixed GBC/digital sound channel desync over time.\r |
| 32 | - Some other not-that-relevant cleanups and tweaks.\r |
| 33 | \r |
| 34 | Source code should be available at:\r |
| 35 | http://notaz.gp2x.de/cgi-bin/gitweb.cgi\r |
| 36 | \r |
| 37 | \r |
| 38 | -- gameplaySP2X Gameboy Advance emulator for GP2X --\r |
| 39 | \r |
| 40 | gpSP2X is a version of my (Exophase)'s emulator originally for Sony PSP.\r |
| 41 | A large amount of effort has been done to make it more optimized for the\r |
| 42 | ARM CPU present in the GP2X, however it is still very much a work in\r |
| 43 | progress.\r |
| 44 | \r |
| 45 | See readme.txt for the PSP version readme, which contains a lot of\r |
| 46 | information relevant to the GP2X version (note that some of it does\r |
| 47 | not apply however).\r |
| 48 | \r |
| 49 | \r |
| 50 | Changelog:\r |
| 51 | \r |
| 52 | 0.9-2xb u6\r |
| 53 | - Fixed clock and scaling config saving.\r |
| 54 | - Fixed occasional crash on first ROM load on 1.1 firmware.\r |
| 55 | - Added LCD timing setup code, which can be controlled through\r |
| 56 | 'pollux_dpc_set' environment vatiable (see gpsp.gpe wrapper script).\r |
| 57 | \r |
| 58 | 0.9-2xb u5\r |
| 59 | - Added portrait drawing modes. They eliminate tearing but are slightly\r |
| 60 | slower.\r |
| 61 | - Added page scrolling in ROM browser with L/R.\r |
| 62 | - 32MB ROM support fixed.\r |
| 63 | \r |
| 64 | 0.9-2xb u4 (unofficial notaz release, done on Exophase's request)\r |
| 65 | - Wiz port. No emulation related changes.\r |
| 66 | - Wiz: dropped SDL for video and hitting hardware directly (GPH SDL can't\r |
| 67 | be trusted, it doesn't do double buffering as of firmware 1.0).\r |
| 68 | - Added new optimized software scaler with interpolation.\r |
| 69 | - gpSP is now saving ROM dir on exit. Delete romdir.txt if you don't\r |
| 70 | want that.\r |
| 71 | - gpSP now comes with wARM, new kernel module+lib for ARM cache control\r |
| 72 | (replaces mmuhack).\r |
| 73 | - gpSP no longer invalidates whole icache after recompilation, might\r |
| 74 | cause minor speedup.\r |
| 75 | \r |
| 76 | 0.9-2xb u3 (unofficial notaz release, released with permission):\r |
| 77 | - Removed built-in CPU/LCD/RAM-Tweaker.\r |
| 78 | - Improved usability of volume control.\r |
| 79 | - Removed PSP-specific GUI options, adjusted help text.\r |
| 80 | - Overclocking from menu now works, keep it at 200 if you don't want that\r |
| 81 | (if you want to overclock using launcher, for example).\r |
| 82 | - Fixed centering-on-first-run problem.\r |
| 83 | - 3:2 scaled option now does what it says.\r |
| 84 | \r |
| 85 | 0.9-2xb u2 (unofficial notaz release):\r |
| 86 | - Replaced non-working mmuhack.o with proper one, added cache flush calls\r |
| 87 | to avoid artifacts.\r |
| 88 | \r |
| 89 | 0.9-2xb u1 (unofficial notaz release):\r |
| 90 | - Fixed a problen in thread synchronization which caused deadlock after\r |
| 91 | some time.\r |
| 92 | \r |
| 93 | 0.9-2xb: \r |
| 94 | -- IMPORTANT-- If you're overwriting an old version, be sure to delete the\r |
| 95 | gpsp.cfg file first, or be prepared to have a bunch of weird button\r |
| 96 | settings that would require fixing.\r |
| 97 | \r |
| 98 | - Fixed some bugs stunting compatability.\r |
| 99 | - Optimized alpha blends in renderer.\r |
| 100 | - Some more optimizations to dynarec output.\r |
| 101 | - Savestates should work better now.\r |
| 102 | - Cheat/misc menu won't crash the emulator.\r |
| 103 | - Main button config window works (not all buttons are in yet)\r |
| 104 | \r |
| 105 | 0.9-2Xa: (Exophase release)\r |
| 106 | - Redid autoframeskip. Should work more reliably.\r |
| 107 | - Rewrote dynamic recompiler from x86 source (arm_emit.h, arm_stub.S).\r |
| 108 | Has some more sophisticated behavior than the last version, more is\r |
| 109 | still to come... Should notice a slight speed improvement over the\r |
| 110 | last version.\r |
| 111 | - Tweaked GUI to be a little more useable. Buttons are now mirroring the\r |
| 112 | PSP version's.\r |
| 113 | - Code unification + cleanup amongst versions.\r |
| 114 | \r |
| 115 | \r |
| 116 | v9008: (zodttd release)\r |
| 117 | - Updated the way autoframeskip works. Should be better now. Still has a max\r |
| 118 | frameskip value.\r |
| 119 | - Added a slight performance increase to the dynarec.\r |
| 120 | - Added sync() to make sure files such as savestates and in-game saves are\r |
| 121 | saved properly to the GP2X.\r |
| 122 | \r |
| 123 | v9006: (zodttd release)\r |
| 124 | - Initial public release\r |
| 125 | \r |
| 126 | \r |
| 127 | Installation:\r |
| 128 | \r |
| 129 | 1. Place the "gpsp.gpe" and "game_config.txt" file in a directory on your SD\r |
| 130 | card used with the GP2X.\r |
| 131 | \r |
| 132 | 2. Place your GBA BIOS in the directory from step 1. This file must be named\r |
| 133 | "gba_bios.bin" in all lowercase as shown, so rename it if needed.\r |
| 134 | \r |
| 135 | -- NOTE --\r |
| 136 | \r |
| 137 | There are two commonly available BIOSes - one is the correct one used in\r |
| 138 | production GBA's worldwide and the other is a prototype BIOS. The latter\r |
| 139 | will not cause some games to not work correctly or crash. If you attempt\r |
| 140 | to use this BIOS you will be presented with a warning before being\r |
| 141 | allowed to continue. This screen will give you a checksum of the real\r |
| 142 | BIOS image (see readme.txt for further information).\r |
| 143 | \r |
| 144 | 3. Place your GBA games in the directory from step 1. These files should have\r |
| 145 | a ".gba" or ".bin" file extension. Zip compressed games should be supported\r |
| 146 | and are recognized with the ".zip" file extension. Note that 32MB ROMs will\r |
| 147 | probably not run if zipped. 16MB and smaller should be OK.\r |
| 148 | \r |
| 149 | 4. Done. Run gpsp.gpe.\r |
| 150 | \r |
| 151 | \r |
| 152 | Controls:\r |
| 153 | \r |
| 154 | How to use gpSP on the GP2X:\r |
| 155 | Buttons are mapped as follows (GBA/ingame buttons can be changed in the menu):\r |
| 156 | \r |
| 157 | GP2X--------------------GBA\r |
| 158 | X -> A\r |
| 159 | B -> B\r |
| 160 | L TRIG -> L TRIG\r |
| 161 | R TRIG -> R TRIG\r |
| 162 | START -> START\r |
| 163 | SELECT -> SELECT\r |
| 164 | \r |
| 165 | GP2X--------------------------------gpSP\r |
| 166 | \r |
| 167 | -- IN-GAME --\r |
| 168 | \r |
| 169 | VOL MIDDLE (UP + DOWN) -> menu\r |
| 170 | PUSH STICK -> fps display toggle (second number is\r |
| 171 | frames actually drawn)\r |
| 172 | \r |
| 173 | -- IN-MENU --\r |
| 174 | B -> select option\r |
| 175 | X -> cancel/exit menu\r |
| 176 | A -> escape (up one director level in the\r |
| 177 | file selector)\r |
| 178 | \r |
| 179 | When gpSP is started, you are presented with the option to overclock your\r |
| 180 | GP2X. Use the L/R TRIG to change the CPU clockspeed and press START to\r |
| 181 | continue. You may also change RAM timings here - experiment with what\r |
| 182 | works well. Note that going too high on overclocking or low on RAM\r |
| 183 | timings can cause the game to crash or the GP2X to outright freeze up.\r |
| 184 | \r |
| 185 | If you do not want to overclock, press START without using L/R.\r |
| 186 | You will now be presented with a menu to choose a game. Press the IN-MENU\r |
| 187 | "SELECT" button shown above to pick a game to load.\r |
| 188 | \r |
| 189 | If you would like to test gpSP for the GP2X with a homebrew (free public\r |
| 190 | domain) game, a game by Russ Prince works very well with gpSP. It is called\r |
| 191 | Bust-A-Move and is a remake of the classic game it's named after.\r |
| 192 | \r |
| 193 | \r |
| 194 | How to build from source:\r |
| 195 | \r |
| 196 | The makefile included in the source is geared towards the Open2x toolchain.\r |
| 197 | If you use Open2x and installed it in the way recommended then it should\r |
| 198 | work okay, assuming you also have up to date HW-SDL (and have\r |
| 199 | arm-linux-sdl-config installed in the right place). The makefile is in the\r |
| 200 | gp2x directory, so go there first then just type make to build gpsp.gpe.\r |
| 201 | Might need a little tweaking if your setup is different. If you need help\r |
| 202 | you can ask me, but I'll probably nag you about why you want to build it in\r |
| 203 | the first place.\r |
| 204 | \r |
| 205 | \r |
| 206 | GP2X version FAQ:\r |
| 207 | \r |
| 208 | Q) Help! This game doesn't work. Am I using a bad version of the ROM?\r |
| 209 | \r |
| 210 | A) First, make sure you're using the correct BIOS version. If you aren't\r |
| 211 | gpSP should tell you. Other than that, there are some games that are\r |
| 212 | known to not work now (and will probably work later), and perhaps\r |
| 213 | many more games that I don't know about that don't work. I haven't\r |
| 214 | launched a full scale compatability test at this version, so it might\r |
| 215 | take a while before the compatability levels are high.\r |
| 216 | \r |
| 217 | \r |
| 218 | Q) Why is this version slower than the PSP version?\r |
| 219 | \r |
| 220 | A) gpSP is still a work in progress. It might be possible to obtain more\r |
| 221 | speed from both this version and the PSP one too (and others in the\r |
| 222 | future). With that in mind, know that even a very agressively overclocked\r |
| 223 | GP2X is still less powerful than a PSP, generally speaking. Still, I\r |
| 224 | have a lot of ideas. It's unlikely that the GP2X version will ever be as\r |
| 225 | fast/faster than the PSP version for anyone but anything's possible.\r |
| 226 | \r |
| 227 | \r |
| 228 | Q) How high does my GP2X have to overclock to enjoy gpSP?\r |
| 229 | \r |
| 230 | A) That depends on you. Higher overclocking will mean less frames skipped\r |
| 231 | on autoframeskip, or less frameskip needed if on manual. Or it can\r |
| 232 | make the difference between whether or not virtual 60fps can be reached.\r |
| 233 | For some games no GP2X in the world will be able to run them fullspeed,\r |
| 234 | with any amount of frameskip. A few might run well with no overclocking\r |
| 235 | and a generous level of frameskip (probably manual). If you don't care\r |
| 236 | about battery life (or you're plugged into an outlet) you should push\r |
| 237 | it as high as you can while still maintaining stability, because\r |
| 238 | chances are high that whatever you play will benefit from it. Right now\r |
| 239 | you'll probably want 260MHz if you can achieve it, but with a lot of\r |
| 240 | luck this number will lower slightly in the future (and is just a vague\r |
| 241 | ballpark figure anyway). I don't want to scare anyone off from using the\r |
| 242 | emulator, you should give it a try and see how it plays for you\r |
| 243 | regardless of how high you can overclock. Just note that this is far\r |
| 244 | from a locked smooth experience for everyone on every game.\r |
| 245 | \r |
| 246 | \r |
| 247 | Q) GBA has an ARM processor, GP2X has an ARM processor. GP2X is more\r |
| 248 | powerful than GBA. This emulator should run great without overclocking,\r |
| 249 | so therefore you're doing it wrong.\r |
| 250 | \r |
| 251 | A) That's not a question, but I'll field it anyway. Two things: first,\r |
| 252 | "virtualization", or running the GBA code "natively" on the GP2X is\r |
| 253 | probably not possible, at least not with the way I want to do things.\r |
| 254 | For reasons why go read my blog (see below). So yes, you actually\r |
| 255 | do need more than 16.7MHz of ARM9 power to emulate the GBA's CPU.\r |
| 256 | Second: there is a whole lot of work behind emulating the pretty 2D\r |
| 257 | graphics on the GBA, something it can do in hardware a lot better than\r |
| 258 | this platform can.\r |
| 259 | End result: GBA emulation on GP2X isn't as easy as you think it is.\r |
| 260 | \r |
| 261 | \r |
| 262 | Q) What are you working on now? When will you release the next version?\r |
| 263 | \r |
| 264 | A) See the gpSP development blog:\r |
| 265 | \r |
| 266 | http://gpsp-dev.blogspot.com/\r |
| 267 | \r |
| 268 | Note that I don't give release dates, ever, unless I'm right on the verge\r |
| 269 | of releasing. Be grateful that I've decided to be much more open about\r |
| 270 | the development of the emulator now.\r |
| 271 | \r |
| 272 | \r |
| 273 | Q) Thanks to your blog I heard that you made some improvement. Can I have\r |
| 274 | a copy of the new code?\r |
| 275 | \r |
| 276 | A) No. Builds in transition often have a lot of problems, and I like for\r |
| 277 | releases to be relatively substantial. I can probably be bribed out of\r |
| 278 | them with donations though. :P\r |
| 279 | \r |
| 280 | \r |
| 281 | Q) Why do the menu suck so much? Why do half the options not work or not\r |
| 282 | make any sense?\r |
| 283 | \r |
| 284 | A) Sorry, the menu still hasn't been modified very much to fit the GP2X\r |
| 285 | version instead of the PSP version.. hopefully this will improve in the\r |
| 286 | future.\r |
| 287 | \r |
| 288 | \r |
| 289 | Q) Who's in charge of the GP2X version anyway?\r |
| 290 | \r |
| 291 | A) Originally, zodttd was. I, Exophase, have basically usurped control of it\r |
| 292 | now to encourage zodttd to work more on his PS1 emulator (that and I'm\r |
| 293 | possessive of gpSP and get nervous when people work on it too heavily).\r |
| 294 | zodttd will most likely still be around to work on things though.\r |
| 295 | \r |
| 296 | \r |
| 297 | Q) I'm a super nice person and would like to donate some of my hard earned\r |
| 298 | money to this one-off GBA emulator. Where do I send my money to?\r |
| 299 | \r |
| 300 | A) Exophase: exophase@gmail.com on PayPal\r |
| 301 | zodttd: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=heirloomer\r |
| 302 | %40pobox%2ecom&item_number=1&no_shipping=1&no_note=1&tax=0&cy_code=USD&bn=\r |
| 303 | PP%2dDonationsBF&charset=UTF%2d8\r |
| 304 | ^ Click there for donating on PayPal (remove whitespace/linebreaks).\r |
| 305 | \r |
| 306 | GP2X people have already donated a lot more to me than PSP people have,\r |
| 307 | even though there's an order of magnitude or two less users. And they've\r |
| 308 | donated far more to zodttd than they have to me. So I'm not going to ask\r |
| 309 | people to donate..\r |
| 310 | \r |
| 311 | However I won't lie: donating ups the chances of me actually working on the\r |
| 312 | next version (for which I have a lot of ideas, but not necessarily time to\r |
| 313 | dedicate to.. that time might need more incentive to be allotted from other\r |
| 314 | things). This could change depending on my employment situation, but right\r |
| 315 | now I feel guilty doing anything that doesn't help guarantee that I'll be\r |
| 316 | able to buy food a year from now.\r |
| 317 | \r |
| 318 | \r |
| 319 | Q) Tell me all of your personal information.\r |
| 320 | \r |
| 321 | A) Again not a question, but why not. I'm Exophase, real name: Gilead Kutnick,\r |
| 322 | male, 23 years old, current residence Bloomington, IN; straight/single/not\r |
| 323 | actively looking, almost have an MS in Computer Science (do have a BS\r |
| 324 | underneath it), likes PSP more than GP2X, will not write a Nintendo DS\r |
| 325 | emulator for either, am currently looking for a job for after I graduate.\r |
| 326 | \r |
| 327 | \r |
| 328 | Q) You said you're looking for a job.\r |
| 329 | \r |
| 330 | A) Yes. If you have one or know someone who needs a low level oriented\r |
| 331 | programmer then I'm up for grabs. And this is my resume:\r |
| 332 | http://exophase.devzero.co.uk/resume.pdf\r |
| 333 | \r |
| 334 | \r |
| 335 | Credits:\r |
| 336 | \r |
| 337 | Original codebase: Exophase (exophase@gmail.com)\r |
| 338 | Foundation gp2x code: zodttd\r |
| 339 | GP2X dynarec/stubs + current code maintainance: Exophase\r |
| 340 | \r |