This commit is contained in:
zeromus 2009-05-02 04:18:44 +00:00
parent 1719e1eb41
commit 2c2484d77d
364 changed files with 5719 additions and 5797 deletions

View File

@ -1,367 +1,355 @@
0.9.2 -> 0.9.3
General/Core:
bug: fixed 64 bit issues and misc integer types usage cleanup [ldesnogues, rm]
enh: added Action Replay code parser [CrazyMax]
Gtk frontend:
enh: switch all of menu/toolbar system to GtkAction + GtkUIManager [matusz]
enh: remove the gtglext 3d code [rm]
enh: fix screen resize in gtk frontend, just resize the window [matusz]
Windows:
bug: fixed many bugs in Cheats [CrazyMax]
0.9.1 -> 0.9.2
General/Core:
bug: fix error in SBCS/RSCS flags; fixes many odd behaviors and crashes [zeromus]
bug: add support for sleep mode and power registers [luigi__]
bug: important fixes to RTC so correct time is actually told [luigi__]
bug: fix card reads below 0x8000; fixes some game freezes [normatt]
bug: fix 4 mbit save type; fix non-autodetect savefile dumping [zeromus, matusz]
enh: add sram to GBA game addon emulation for importing savefiles [zeromus]
enh: many improvements and feature hookups in linux ports [matusz, luigi__]
Graphics:
bug: fix specular texture mapping mode [luigi__]
bug: repairs to some capture modes and vram mapping [zeromus, CrazyMax]
bug: viewports finally correctly handled [zeromus]
enh: add software rasterizer. quirky, but on par with opengl [zeromus]
Windows:
bug: mitigate bad frameskipper; default to old frameskipping mode [zeromus]
bug: fixes with recent roms and zipfile loading [zeromus]
bug: fix window position memory [zeromus]
enh: bios and firmware may now be used and booted [luigi__]
enh: many display, OSD, and input enhancements [luigi__]
enh: brand new hotkey and controls binding system [zeromus]
enh: configurable screen separation [luigi__]
enh: fast forward key [pa__]
enh: improvements to mic [luigi__]
enh: faster updates in debug tools, up to once per frame [pa__]
Mac OS X Port:
enh: added Italian translation thanks to Paolo Bernini [jeff]
enh: resurrection of GDB stub [sigmaris]
0.9 -> 0.9.1
General/Core:
enh: GBA slot emulation [CrazyMax]
- Rumble support (windows only)
- GBA game
enh: Mic support (windows only?) [luigi__]
enh: Preliminary cheats system [CrazyMax]
enh: Savestates invalidated, as more variables have been added.
bug: Added PSG white noise [luigi__]
bug: fix arm/thumb ROR [zeromus]
bug: [ 2550645 ] Super Princess Peach: crash when starting a puzzle [zeromus]
bug: win32: fix spu wav file writer (regression from 0.8) [zeromus,luigi__]
bug: Much work on FIFOs, still not finished [CrazyMax]
bug: Many fixes to dma [zeromus, CrazyMax]
bug: bios WaitForVblank and WaitForInterrupt fixed [luigi__]
Graphics:
bug: Added sprite blending [luigi__]
bug: more correct mosaic effects, still imperfect [zeromus]
bug: Many fixes to tile rendering; all graphics tests now pass [luigi__]
bug: fix crashes in some affine BG [zeromus]
bug: Implement some pos test function [luigi__]
bug: fix texture mapping across texture and palette banks and to unmapped banks [zeromus]
bug: fix texture handling for texels with MSB set (fixes some texture corruption) [zeromus]
bug: fix texture coordinate generation, including environment mapping [zeromus]
bug: texture cache invalidates when palettes change, prevents some texture corruption [zeromus]
bug: fix display capturing from 2d+3d source when display mode is display-vram [zeromus]
bug: [ 2488334 ].1 fixes to layer compositing [luigi__]
bug: [ 2488334 ].3 fix bug in support for hdma affine bg parameters [zeromus]
bug: Improvements to 3d h-scrolling [luigi__]
bug: Fix some errors in rendering 512 tall BG [zeromus,CrazyMax] (still not fully resolved)
bug: Add optional fragment shading pipeline (more precision) [luigi__]
bug: Fix bug where some sprites got cut of on x=255 [zeromus]
bug: Implement GXSTAT register [CrazyMax]
Windows:
bug: resizing and rotating work in vista [luigi__]
enh: 0 frameskip now lets emulator run at excess speed [zeromus]
Mac OS X Port:
bug: left key setting no longer gets confused with the right key [jeff]
enh: more keys can be mapped
0.8 -> 0.9
There have been so many changes that this list can hardly be considered complete.
For this release, we have formatted the list into a high level overview of big changes and bad bugs relative to the previous release. Hopefully what you're interested in.
This list does not include items which are solely performance boosts, for let us just say that virtually every system has been speeded up.
* The savestate system is totally changed and incompatible with old savestates.
* The 3d system should be considered rewritten.
General/Core:
enh: Convert to c++
enh: Add functions for a lid open/close. Holding key (default "Backspace" in Windows port) while game is freeze/non freeze. [CrazyMax]
enh: Add secure area decryption from ndstool [zeromus]
enh: Change savestate code to support loosely bound chunks and more easily other parts of the emu (GE, GPU).
The savestate format is changed, but from now on it is in principle more resilient
(though it will continue to break as we tinker with the internals) [zeromus]
enh: Added SSE2 optimizations for matrices. Since we now make an SSE2 build, more optimizations can be made. [CrazyMax]
enh: Add a preliminary GUI hud system [CrazyMax,zeromus]
CPU/MMU:
bug: Many fixes in IPC and GE FIFOs. Fixes freezes in NSMB, dsracing, and others. [CrazyMax,luigi__,shash]
bug: Fix ARM instructions SBC and RSC (likewise SBC in thumb) [normatt]
bug: Fixed Thumb LDMIA (fixes ingame Dead'n'Furious) [shash]
bug: Fix repeating DMA (fixes NSMB parallax BG) [zeromus]
bug: Proper handling for unaligned CPU accesses [luigi__]
bug: Proper handling for undefined instruction exceptions [Salva Peiró]
bug: correctly return vram control register values (fixes homebrew 3d games) [zeromus]
enh: Remove 16MB of WRAM at 0x01****** from arm9. Mapped to unused instead. Nobody knows what this was. [zeromus]
enh: Changed instruction execution to 16 at a time blocks (tested and stable) [shash]
Hardware:
bug: Newer and better sqrt and div emulation; makes SM64DS playable [luigi__,shash,zeromus]
bug: Add preliminary RTC implementations [CrazyMax]
enh: Add cosine interpolation in the SPU (conditionally compiled) [zeromus,luigi__]
enh: Experimental: always one silent non-mixing SPU core at 44.1khz synched with emu, for more precision.
The audible core runs with the host, causing music to slow down but not tear or pitch bend. [zeromus]
Graphics:
- Overhaul 3d:
. Move entire GE to core emu.
. Move OpenGL renderer to emu core for optional use by platforms, removing ogl_collector. Now every platform shares the same 3d code.
. Reorganize 3d code to defer rendering to after 3d vblank. Eliminates tearing, and texturing artifacts. [zeromus]
. Add optional fragment shading pipeline (more precision) [luigi__]
. Move lighting model to software instead of using opengl's fixed function model [zeromus]
. Render shadow volumes; toon shading and highlight table [zeromus, luigi__]
. Added texture caching! big speed up. [CrazyMax]
bug: Many assorted tweaks and improvements to 3d and 2d precision [zeromus,CrazyMax,luigi__]
bug: Fixes to GE: command unpacking, projection and pos-vector mode matrix handling, mult and load commands [zeromus]
bug: Fix a bug in texture transformation mode 1 [zeromus]
bug: Fixed GPU rendering bugs in sprites and BG [CrazyMax]
bug: Fixes to texture conversion [CrazyMax,zeromus]
bug: Fixes in capture display (no blinking in many games with dual 3D) [CrazyMax]
bug: Fixes in master brightness (this fixes some games with black screens) [CrazyMax]
bug: Fixes in screen, backdrop, and sprite blending [luigi__]
bug: Changed clear depths and how depth initial values are calculated (fixes SM64DS skybox, Castlevania) [shash,lugi__]
bug: Add 3d layer h-scrolling [zeromus]
bug: Added transparency and fixed material alpha support and alpha testing on the 3D core [shash]
bug: Rewrite VRAM mapping control and rendering (more accurate) [CrazyMax,luigi__]
bug: convert colors to opengl better to prevent alpha=31 polys from being ever so slightly transparent [zeromus]
enh: Add MMU->GPU signal for when vram mappings change to function as a texture cache invalidate signal [zeromus]
enh: Make matrix 4x4 multiply routines use W-coordinate; carry w coord through pipeline [zeromus]
Mac OS X port:
bug: Fixed: Filenames and paths with unicode characters now work. [Jeff]
bug: Fixed: Load state from file button works again. [Jeff]
enh: Save State panel now pauses emulation while the file selection box is open. [Jeff]
bug: Fixed: Frozen video output (and/or messed 3d emulation) after loading a state. [Jeff]
bug: Added option to load the most recent file upon launching the program. [Jeff]
enh: Added French translation (thanks to Pierre Rudloff). [Jeff]
enh: Added basic key mapping configuration to application preferences (thanks to Julio GorgŽ). [Jeff]
enh: Added keyboard shortcuts for Execute, Pause and Reset command (thanks to Julio GorgŽ). [Jeff]
enh: Default key mappings are no longer case sensitive. [Jeff]
enh: Added ability to limit speed. [Jeff]
enh: Fixed: Video output should work on software-only 3D renderers. [Jeff]
Windows port:
bug: Fix a race condition in NDS_3D_Reset and NDS_glInit [zeromus]
bug: Fix the buggy auto frameskip logic which made the emu slow to a crawl. Now it runs fast! [zeromus]
bug: Fix resizing, rotate & aspect ration of main window. [CrazyMax,_zeromus]
bug: Remove multithreading from user interface after finding several synchronization issues [zeromus]
enh: recent roms menu [luigi_]
enh: Changed graphics render core to DirectDraw (work faster) [CrazyMax]
enh: Add an arm9 cpu load average calculator similar to no$. but I dont think it works right. [zeromus]
enh: Rewrite all debug tools (autoupdate works now) [CrazyMax]
enh: Rewrite input core & replace config input dialog [CrazyMax]
enh: Add AVI output [zeromus]
enh: Add pause toggle and frame advance hotkeys [adelikat]
enh: Add frame counter display and hud messages framework [adelikat]
enh: Main window remembers position, size, and a few other emu preferences [adelikat]
enh: Removed directx sdk dependency for easier building. [zeromus]
enh: Savestate doesnt unpause emu if it is already paused [adelikat]
0.7.3 -> 0.8
Cocoa:
- Save State As function now works. [Jeff B]
- Recent Items menu now works. [Jeff B]
- Opening NDS files from Finder now works. [Jeff B]
- Added screenshot feature. [Jeff B]
- Added preferences. [Jeff B]
- Many more strings are translatable now. [Jeff B]
- Default screen color is black (better represents being "off" and easier on eyes at night). [Jeff B]
- Added sound. [Jeff B]
- Now is a universal binary. [Jeff B]
- Leopard resolution icon added. [Jeff B]
- Added a Japanese translation. [Jeff B]
- Added an optional status bar (resize handle no longer overlaps screen). [Jeff B]
- New ROM Info and About DeSmuME windows have been added. [Jeff B]
- Fixed several bugs in window resizing. [Jeff B]
- Added FAT image support for homebrew games (thanks to TypeError). [Jeff B]
- Key config can be changed on the command line. Save/load hotkeys changed (so expose doesn't override). [Jeff B]
- Key bindings may work better on non-US keyboards now (needs testing). [Jeff B]
general:
- Encapsulate GDB debug stub to avoid certain problems [shash]
- Fixed CPU LD*/ST* bugs [shash]
- Fixed New SMB mini-games freeze [shash]
- Fixed possible segfault in ROMReader on ia64 and amd64. [evilynux]
- Fixed a crash bug with 2D background corrupting memory [shash]
- Flag check optimization [carlo_bramini]
- Applied some endian fixes in GPU (thanks to Phazz) [Jeff B]
gtk-glade:
- Added DeSmuME version in about dialog. [evilynux]
- Updated website url in about dialog. [evilynux]
- Added Brazilian Portuguese translation by Dreampeppers99. [evilynux]
- Better desktop menu entry following FreeDesktop specifications. [evilynux]
gtk:
- Updated website url in about dialog. [evilynux]
- Better desktop menu entry following FreeDesktop specifications. [evilynux]
windows port:
- Added an "about" box [shash]
- DirectInput control interface with joystick support [CrazyMax]
- Matrix and Light viewer [Acid Burn]
0.7.2 -> 0.7.3
gtk-glade:
- Full localization using intltool/gettext. [evilynux]
general:
- Added a README.TRANSLATION documenting the localization process. [evilynux]
MacOS X:
- Initial version of the Mac interface added. [Jeff B]
0.7.1 -> 0.7.2
spu:
- big endian fixes. [cyberwarriorx]
gpu:
- big endian fixes. [marcus_c]
gtk-glade:
- opengl improvements. [masscat]
general:
- Added support for setting NDS firmware language value. [masscat]
- Function added for setting firmware language. [masscat]
- Mac/msys compilation fixes. [cyberwarriorx]
- Fix compilation when pkg-config macros are not available [evilynux]
0.7.0 -> 0.7.1
general:
- Added GDB debugger stub [masscat]
- Added new/different GBAMP CFlash image reader/writer [masscat]
gpu:
- Major speedup to the 2D core [shash]
gtk-glade:
- Added command line options. [masscat]
- Added FPS limiter [masscat]
cli:
- Added command line options. [masscat]
- Added FPS limiter [masscat]
- Added option to use OpenGl to render window (allows resizing). [masscat]
windows port:
- Added command line options. [masscat]
- Added multiple language support [cyberwarriorx]
- Added Danish language translation [thomas-2007]
0.6.0 -> 0.7.0
general:
- Added support for *.duc files [cyberwarriorx]
gpu:
- Added support for sprite rotation/scaling [shash]
- Added support for the 3D core (openGL and null plugins) [shash]
windows port:
- A bunch of fixes [Dmitry Krutskih]
- Fixed a bug in sound that was causing it to still not work for some
people [cyberwarriorx]
gtk:
- Added 3D emulation
- Added command line options.
- Added option to use OpenGL to render window (allows resizing).
gtk-glade:
- Added 3D emulation
0.5.0 -> 0.6.0
general:
- Added zipped (based on zziplib) and gzipped (based on zlib) rom support.
arm:
- Added relocation interrupt vector.
- Added region access right checks.
- Enabled LDC/STC instructions.
- Fixed powersave (cp15) IRQ wait.
- Fixed MOV instructions
gpu:
- Added special color effects.
- Added windowing feature.
- Fixed transparent direct color backgrounds.
- Fixed disabled sprites showing.
- Fixed 8/32 bit access to gpu registers.
- Fixed missing backgrounds
- Support for master brightness
wifi:
- Added RF chip interface.
- Added BB chip interface.
windows port:
- Fixed address calculation in disassembler.
- Added Force Maintain Ratio option for window stretching
linux port (cli, gtk and gtk-glade):
all:
- Added joystick support.
- Fixed X and Y buttons.
gtk-glade:
- Added joystick configuration.
- Improved I/O registers viewer tool.
- Added save and load states support.
0.3.3 -> 0.5.0
arm:
- Fixed MSR with immediate value opcode.
- Fixed LSR_0 thumb opcode (C flag is correctly set now).
- Fixed LDR*/STR* opcodes.
- Fixed unaligned memory access on THUMB Core.
- Added relocating SWI routines.
bios:
- Added decompression functions.
- Added GetPitchTable function.
- Added GetVolumeTable function.
- Added GetCRC16 function.
- Added experimental SoundBias function.
- Added GetSineTable function.
cart:
- Added CompactFlash/FAT emulation.
- Added Get ROM chip ID Cartridge command.
gpu:
- Added framebuffer emulation.
- Fixed a bug in GPU (xfin could be greater than LG causing a segfault).
- Added support for Display Mode 0(Display Off).
- Added the basic framework for Display Mode 3(Display from Main RAM).
spu:
- Added sound emulation.
- Added sound core system.
- Added WAV write core.
- Added dummy core.
- Added Direct Sound core.
linux port:
- Added GTK+ GUI.
- Added command line interface.
- Added stylus and arm9 keypad support in CLI version.
- Added FPS display.
- Added basic frameskip.
windows port:
- Fixed a bug when displaying a ROM's information.
- Added key configuration.
- Removed the debug key.
- Added new experimental auto frameskip/frame limit code.
- Added sound settings dialog.
- Added a few menu options for accessing the website, forums, and for
submitting bugs.
general:
- Rewrote code in C.
- Fixed warnings.
- Used defines and typedef's to make things more portable and easier to
read.
- Added autotools stuff.
- Changes to logging system.
- Added screenshot function.
- Translated most french to english.
- Added savestate support.
- Added firmware reading support(needs work).
- Added Backup Memory support with autodetection.
- Fixed some endianess issues.
- Fixed things so Visual C++ can compile code.
- Added bsd support.
- Reworked ROM loading so you can load a different rom without any problems.
- Finished NDS_Reset. Now the emulation can be reset even while running.
0.9.1 -> 0.9.2
General/Core:
bug: fix error in SBCS/RSCS flags; fixes many odd behaviors and crashes [zeromus]
bug: add support for sleep mode and power registers [luigi__]
bug: important fixes to RTC so correct time is actually told [luigi__]
bug: fix card reads below 0x8000; fixes some game freezes [normatt]
bug: fix 4 mbit save type; fix non-autodetect savefile dumping [zeromus, matusz]
enh: add sram to GBA game addon emulation for importing savefiles [zeromus]
enh: many improvements and feature hookups in linux ports [matusz, luigi__]
Graphics:
bug: fix specular texture mapping mode [luigi__]
bug: repairs to some capture modes and vram mapping [zeromus, CrazyMax]
bug: viewports finally correctly handled [zeromus]
enh: add software rasterizer. quirky, but on par with opengl [zeromus]
Windows:
bug: mitigate bad frameskipper; default to old frameskipping mode [zeromus]
bug: fixes with recent roms and zipfile loading [zeromus]
bug: fix window position memory [zeromus]
enh: bios and firmware may now be used and booted [luigi__]
enh: many display, OSD, and input enhancements [luigi__]
enh: brand new hotkey and controls binding system [zeromus]
enh: configurable screen separation [luigi__]
enh: fast forward key [pa__]
enh: improvements to mic [luigi__]
enh: faster updates in debug tools, up to once per frame [pa__]
Mac OS X Port:
enh: added Italian translation thanks to Paolo Bernini [jeff]
enh: resurrection of GDB stub [sigmaris]
0.9 -> 0.9.1
General/Core:
enh: GBA slot emulation [CrazyMax]
- Rumble support (windows only)
- GBA game
enh: Mic support (windows only?) [luigi__]
enh: Preliminary cheats system [CrazyMax]
enh: Savestates invalidated, as more variables have been added.
bug: Added PSG white noise [luigi__]
bug: fix arm/thumb ROR [zeromus]
bug: [ 2550645 ] Super Princess Peach: crash when starting a puzzle [zeromus]
bug: win32: fix spu wav file writer (regression from 0.8) [zeromus,luigi__]
bug: Much work on FIFOs, still not finished [CrazyMax]
bug: Many fixes to dma [zeromus, CrazyMax]
bug: bios WaitForVblank and WaitForInterrupt fixed [luigi__]
Graphics:
bug: Added sprite blending [luigi__]
bug: more correct mosaic effects, still imperfect [zeromus]
bug: Many fixes to tile rendering; all graphics tests now pass [luigi__]
bug: fix crashes in some affine BG [zeromus]
bug: Implement some pos test function [luigi__]
bug: fix texture mapping across texture and palette banks and to unmapped banks [zeromus]
bug: fix texture handling for texels with MSB set (fixes some texture corruption) [zeromus]
bug: fix texture coordinate generation, including environment mapping [zeromus]
bug: texture cache invalidates when palettes change, prevents some texture corruption [zeromus]
bug: fix display capturing from 2d+3d source when display mode is display-vram [zeromus]
bug: [ 2488334 ].1 fixes to layer compositing [luigi__]
bug: [ 2488334 ].3 fix bug in support for hdma affine bg parameters [zeromus]
bug: Improvements to 3d h-scrolling [luigi__]
bug: Fix some errors in rendering 512 tall BG [zeromus,CrazyMax] (still not fully resolved)
bug: Add optional fragment shading pipeline (more precision) [luigi__]
bug: Fix bug where some sprites got cut of on x=255 [zeromus]
bug: Implement GXSTAT register [CrazyMax]
Windows:
bug: resizing and rotating work in vista [luigi__]
enh: 0 frameskip now lets emulator run at excess speed [zeromus]
Mac OS X Port:
bug: left key setting no longer gets confused with the right key [jeff]
enh: more keys can be mapped
0.8 -> 0.9
There have been so many changes that this list can hardly be considered complete.
For this release, we have formatted the list into a high level overview of big changes and bad bugs relative to the previous release. Hopefully what you're interested in.
This list does not include items which are solely performance boosts, for let us just say that virtually every system has been speeded up.
* The savestate system is totally changed and incompatible with old savestates.
* The 3d system should be considered rewritten.
General/Core:
enh: Convert to c++
enh: Add functions for a lid open/close. Holding key (default "Backspace" in Windows port) while game is freeze/non freeze. [CrazyMax]
enh: Add secure area decryption from ndstool [zeromus]
enh: Change savestate code to support loosely bound chunks and more easily other parts of the emu (GE, GPU).
The savestate format is changed, but from now on it is in principle more resilient
(though it will continue to break as we tinker with the internals) [zeromus]
enh: Added SSE2 optimizations for matrices. Since we now make an SSE2 build, more optimizations can be made. [CrazyMax]
enh: Add a preliminary GUI hud system [CrazyMax,zeromus]
CPU/MMU:
bug: Many fixes in IPC and GE FIFOs. Fixes freezes in NSMB, dsracing, and others. [CrazyMax,luigi__,shash]
bug: Fix ARM instructions SBC and RSC (likewise SBC in thumb) [normatt]
bug: Fixed Thumb LDMIA (fixes ingame Dead'n'Furious) [shash]
bug: Fix repeating DMA (fixes NSMB parallax BG) [zeromus]
bug: Proper handling for unaligned CPU accesses [luigi__]
bug: Proper handling for undefined instruction exceptions [Salva Peiró]
bug: correctly return vram control register values (fixes homebrew 3d games) [zeromus]
enh: Remove 16MB of WRAM at 0x01****** from arm9. Mapped to unused instead. Nobody knows what this was. [zeromus]
enh: Changed instruction execution to 16 at a time blocks (tested and stable) [shash]
Hardware:
bug: Newer and better sqrt and div emulation; makes SM64DS playable [luigi__,shash,zeromus]
bug: Add preliminary RTC implementations [CrazyMax]
enh: Add cosine interpolation in the SPU (conditionally compiled) [zeromus,luigi__]
enh: Experimental: always one silent non-mixing SPU core at 44.1khz synched with emu, for more precision.
The audible core runs with the host, causing music to slow down but not tear or pitch bend. [zeromus]
Graphics:
- Overhaul 3d:
. Move entire GE to core emu.
. Move OpenGL renderer to emu core for optional use by platforms, removing ogl_collector. Now every platform shares the same 3d code.
. Reorganize 3d code to defer rendering to after 3d vblank. Eliminates tearing, and texturing artifacts. [zeromus]
. Add optional fragment shading pipeline (more precision) [luigi__]
. Move lighting model to software instead of using opengl's fixed function model [zeromus]
. Render shadow volumes; toon shading and highlight table [zeromus, luigi__]
. Added texture caching! big speed up. [CrazyMax]
bug: Many assorted tweaks and improvements to 3d and 2d precision [zeromus,CrazyMax,luigi__]
bug: Fixes to GE: command unpacking, projection and pos-vector mode matrix handling, mult and load commands [zeromus]
bug: Fix a bug in texture transformation mode 1 [zeromus]
bug: Fixed GPU rendering bugs in sprites and BG [CrazyMax]
bug: Fixes to texture conversion [CrazyMax,zeromus]
bug: Fixes in capture display (no blinking in many games with dual 3D) [CrazyMax]
bug: Fixes in master brightness (this fixes some games with black screens) [CrazyMax]
bug: Fixes in screen, backdrop, and sprite blending [luigi__]
bug: Changed clear depths and how depth initial values are calculated (fixes SM64DS skybox, Castlevania) [shash,lugi__]
bug: Add 3d layer h-scrolling [zeromus]
bug: Added transparency and fixed material alpha support and alpha testing on the 3D core [shash]
bug: Rewrite VRAM mapping control and rendering (more accurate) [CrazyMax,luigi__]
bug: convert colors to opengl better to prevent alpha=31 polys from being ever so slightly transparent [zeromus]
enh: Add MMU->GPU signal for when vram mappings change to function as a texture cache invalidate signal [zeromus]
enh: Make matrix 4x4 multiply routines use W-coordinate; carry w coord through pipeline [zeromus]
Mac OS X port:
bug: Fixed: Filenames and paths with unicode characters now work. [Jeff]
bug: Fixed: Load state from file button works again. [Jeff]
enh: Save State panel now pauses emulation while the file selection box is open. [Jeff]
bug: Fixed: Frozen video output (and/or messed 3d emulation) after loading a state. [Jeff]
bug: Added option to load the most recent file upon launching the program. [Jeff]
enh: Added French translation (thanks to Pierre Rudloff). [Jeff]
enh: Added basic key mapping configuration to application preferences (thanks to Julio GorgŽ). [Jeff]
enh: Added keyboard shortcuts for Execute, Pause and Reset command (thanks to Julio GorgŽ). [Jeff]
enh: Default key mappings are no longer case sensitive. [Jeff]
enh: Added ability to limit speed. [Jeff]
enh: Fixed: Video output should work on software-only 3D renderers. [Jeff]
Windows port:
bug: Fix a race condition in NDS_3D_Reset and NDS_glInit [zeromus]
bug: Fix the buggy auto frameskip logic which made the emu slow to a crawl. Now it runs fast! [zeromus]
bug: Fix resizing, rotate & aspect ration of main window. [CrazyMax,_zeromus]
bug: Remove multithreading from user interface after finding several synchronization issues [zeromus]
enh: recent roms menu [luigi_]
enh: Changed graphics render core to DirectDraw (work faster) [CrazyMax]
enh: Add an arm9 cpu load average calculator similar to no$. but I dont think it works right. [zeromus]
enh: Rewrite all debug tools (autoupdate works now) [CrazyMax]
enh: Rewrite input core & replace config input dialog [CrazyMax]
enh: Add AVI output [zeromus]
enh: Add pause toggle and frame advance hotkeys [adelikat]
enh: Add frame counter display and hud messages framework [adelikat]
enh: Main window remembers position, size, and a few other emu preferences [adelikat]
enh: Removed directx sdk dependency for easier building. [zeromus]
enh: Savestate doesnt unpause emu if it is already paused [adelikat]
0.7.3 -> 0.8
Cocoa:
- Save State As function now works. [Jeff B]
- Recent Items menu now works. [Jeff B]
- Opening NDS files from Finder now works. [Jeff B]
- Added screenshot feature. [Jeff B]
- Added preferences. [Jeff B]
- Many more strings are translatable now. [Jeff B]
- Default screen color is black (better represents being "off" and easier on eyes at night). [Jeff B]
- Added sound. [Jeff B]
- Now is a universal binary. [Jeff B]
- Leopard resolution icon added. [Jeff B]
- Added a Japanese translation. [Jeff B]
- Added an optional status bar (resize handle no longer overlaps screen). [Jeff B]
- New ROM Info and About DeSmuME windows have been added. [Jeff B]
- Fixed several bugs in window resizing. [Jeff B]
- Added FAT image support for homebrew games (thanks to TypeError). [Jeff B]
- Key config can be changed on the command line. Save/load hotkeys changed (so expose doesn't override). [Jeff B]
- Key bindings may work better on non-US keyboards now (needs testing). [Jeff B]
general:
- Encapsulate GDB debug stub to avoid certain problems [shash]
- Fixed CPU LD*/ST* bugs [shash]
- Fixed New SMB mini-games freeze [shash]
- Fixed possible segfault in ROMReader on ia64 and amd64. [evilynux]
- Fixed a crash bug with 2D background corrupting memory [shash]
- Flag check optimization [carlo_bramini]
- Applied some endian fixes in GPU (thanks to Phazz) [Jeff B]
gtk-glade:
- Added DeSmuME version in about dialog. [evilynux]
- Updated website url in about dialog. [evilynux]
- Added Brazilian Portuguese translation by Dreampeppers99. [evilynux]
- Better desktop menu entry following FreeDesktop specifications. [evilynux]
gtk:
- Updated website url in about dialog. [evilynux]
- Better desktop menu entry following FreeDesktop specifications. [evilynux]
windows port:
- Added an "about" box [shash]
- DirectInput control interface with joystick support [CrazyMax]
- Matrix and Light viewer [Acid Burn]
0.7.2 -> 0.7.3
gtk-glade:
- Full localization using intltool/gettext. [evilynux]
general:
- Added a README.TRANSLATION documenting the localization process. [evilynux]
MacOS X:
- Initial version of the Mac interface added. [Jeff B]
0.7.1 -> 0.7.2
spu:
- big endian fixes. [cyberwarriorx]
gpu:
- big endian fixes. [marcus_c]
gtk-glade:
- opengl improvements. [masscat]
general:
- Added support for setting NDS firmware language value. [masscat]
- Function added for setting firmware language. [masscat]
- Mac/msys compilation fixes. [cyberwarriorx]
- Fix compilation when pkg-config macros are not available [evilynux]
0.7.0 -> 0.7.1
general:
- Added GDB debugger stub [masscat]
- Added new/different GBAMP CFlash image reader/writer [masscat]
gpu:
- Major speedup to the 2D core [shash]
gtk-glade:
- Added command line options. [masscat]
- Added FPS limiter [masscat]
cli:
- Added command line options. [masscat]
- Added FPS limiter [masscat]
- Added option to use OpenGl to render window (allows resizing). [masscat]
windows port:
- Added command line options. [masscat]
- Added multiple language support [cyberwarriorx]
- Added Danish language translation [thomas-2007]
0.6.0 -> 0.7.0
general:
- Added support for *.duc files [cyberwarriorx]
gpu:
- Added support for sprite rotation/scaling [shash]
- Added support for the 3D core (openGL and null plugins) [shash]
windows port:
- A bunch of fixes [Dmitry Krutskih]
- Fixed a bug in sound that was causing it to still not work for some
people [cyberwarriorx]
gtk:
- Added 3D emulation
- Added command line options.
- Added option to use OpenGL to render window (allows resizing).
gtk-glade:
- Added 3D emulation
0.5.0 -> 0.6.0
general:
- Added zipped (based on zziplib) and gzipped (based on zlib) rom support.
arm:
- Added relocation interrupt vector.
- Added region access right checks.
- Enabled LDC/STC instructions.
- Fixed powersave (cp15) IRQ wait.
- Fixed MOV instructions
gpu:
- Added special color effects.
- Added windowing feature.
- Fixed transparent direct color backgrounds.
- Fixed disabled sprites showing.
- Fixed 8/32 bit access to gpu registers.
- Fixed missing backgrounds
- Support for master brightness
wifi:
- Added RF chip interface.
- Added BB chip interface.
windows port:
- Fixed address calculation in disassembler.
- Added Force Maintain Ratio option for window stretching
linux port (cli, gtk and gtk-glade):
all:
- Added joystick support.
- Fixed X and Y buttons.
gtk-glade:
- Added joystick configuration.
- Improved I/O registers viewer tool.
- Added save and load states support.
0.3.3 -> 0.5.0
arm:
- Fixed MSR with immediate value opcode.
- Fixed LSR_0 thumb opcode (C flag is correctly set now).
- Fixed LDR*/STR* opcodes.
- Fixed unaligned memory access on THUMB Core.
- Added relocating SWI routines.
bios:
- Added decompression functions.
- Added GetPitchTable function.
- Added GetVolumeTable function.
- Added GetCRC16 function.
- Added experimental SoundBias function.
- Added GetSineTable function.
cart:
- Added CompactFlash/FAT emulation.
- Added Get ROM chip ID Cartridge command.
gpu:
- Added framebuffer emulation.
- Fixed a bug in GPU (xfin could be greater than LG causing a segfault).
- Added support for Display Mode 0(Display Off).
- Added the basic framework for Display Mode 3(Display from Main RAM).
spu:
- Added sound emulation.
- Added sound core system.
- Added WAV write core.
- Added dummy core.
- Added Direct Sound core.
linux port:
- Added GTK+ GUI.
- Added command line interface.
- Added stylus and arm9 keypad support in CLI version.
- Added FPS display.
- Added basic frameskip.
windows port:
- Fixed a bug when displaying a ROM's information.
- Added key configuration.
- Removed the debug key.
- Added new experimental auto frameskip/frame limit code.
- Added sound settings dialog.
- Added a few menu options for accessing the website, forums, and for
submitting bugs.
general:
- Rewrote code in C.
- Fixed warnings.
- Used defines and typedef's to make things more portable and easier to
read.
- Added autotools stuff.
- Changes to logging system.
- Added screenshot function.
- Translated most french to english.
- Added savestate support.
- Added firmware reading support(needs work).
- Added Backup Memory support with autodetection.
- Fixed some endianess issues.
- Fixed things so Visual C++ can compile code.
- Added bsd support.
- Reworked ROM loading so you can load a different rom without any problems.
- Finished NDS_Reset. Now the emulation can be reset even while running.

237
INSTALL Normal file
View File

@ -0,0 +1,237 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007 Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
6. Often, you can also type `make uninstall' to remove the installed
files again.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

215
README.WIN Normal file
View File

@ -0,0 +1,215 @@
DeSmuME
_________________________________________
Copyright (C) 2006 yopyop
Copyright (C) 2006-2007-2008-2009 DeSmuME team
1) Compiling instructions...................................13
2) How to use DeSmuME.......................................51
3) Contact information.....................................166
4) Disclaimer..............................................184
1 Compiling instructions______________________________________
DeSmuME is written in C++, using the DirectX 8.0, OpenGL, zlib,
zziplib libraries, so you need a working C++ compiler, such as
Visual C++ 2005, Visual C++ 2008 or Intel compiler. It should
also be possible to compile it on dev-cpp, but it's currently
untested.
* OpenGL should be included with your compiler, if it isn't,
check on your compiler's website for links.
* zlib can be found at http://www.zlib.net
* zziplib can be found at http://zziplib.sourceforge.net
Visual C++:
Load either the project file DeSmuME_2005.vcproj
or DeSmuME_2008.vcproj (depending on the VisualC++ version
you're using) in the src/windows directory, compile, and
you're set.
2 How to use DeSmuME__________________________________________
Execute "desmume". A new window (and a information console)
should pop up. The default settings should be fine for most
people, but in case you need to adjust them, here's a brief
explanation:
Under the "Config", there are a number of items:
Save Type:
Here you can select which type of Backup Memory DeSmuME should
emulate. By default, Autodetect works fine, but in some cases
DeSmuME doesn't correctly detect the Backup Memory. In that
case, you will want to select the correct one.
3D Config:
Here you can change what will be used to emulate the 3D core
of the DS. By default it's on openGL, but you can also select
a Null device, that won't show any 3D.
Control Config:
Here you can change the default key mappings. For now only the
keyboard is supported, but in the near future gamepads and
joysticks will be supported.
Here are the default key mappings (they may be subject to
change):
Up arrow - Up
Left arrow - Left
Down arrow - Down
Right arrow - Right
x - A button
z - B button
s - X button
a - Y button
q - Left Trigger
w - Right Trigger
Enter - Start button
Right Shift - Select button
Backspace - Lid fold/unfold
n - Frame advance
Space - Pause/Unpause
p - Load current state
1,2,3,4,5,6,7,8,9,0 - Select current state
F1-F10 - Load relevant state
Shift+F1-F10 - Save relevant state
Sound Settings:
Here you can change the default sound settings. By default
DeSmuME uses Direct Sound, a buffer size of 2940, and volume
set to max. But if you want to mute the sound, you can set the
sound core to none. Or if you want to save the sound to a
file, you can set the sound core to WAV write. If you find the
sound is crackling a lot, try increasing the buffer size. On
the other hand, if you find the sound somewhat delayed or
jumpy, try decreasing the buffer size.
Firmware Settings:
Here you can change settings that are used as a customization
on the real DS: your name, birthday, favourite colour, etc...
Frame Skip:
Here you can adjust the amount of frame draws to skip during
emulation. Normally the emulator detects whether the emulator
is running too fast or slow and skips a frame or more if it
needs to speed things up. However some people don't like the
results of it, so here you can adjust that.
Language:
Here you can change the emulator menus language. Currently we
only support English, French and Danish.
After all the settings are set to your satisfaction, you can
then load a ROM image by going into the "File" menu, and
choosing "Open". Select which file you'd like to open, and the
emulator will automatically load and start running the
selected ROM.
------------------------
Under the View menu there's also a few additional options you
may wish to change.
Rotation:
Here you can adjust which angle of the display. Some programs
require that you normally turn the DS on its side. You can set
it up in that manner using this.
Window size:
With these options you can increase or decrease the window
size.
Note: You can also adjust the window size by clicking on the
edge of the window, and dragging the mouse.
Force Maintain Ratio:
Sometimes when the window size is changed it's doesn't look
correct on the screen. This option forces the window to
maintain a correct ratio so it looks correct.
Default size:
This option makes the emulator window go back to the default
size.
------------------------
GDB Debugger Stubs:
Source level debugging of ARM9 and/or ARM7 code is supported
using a GDB/Insight debugger. The GDB stubs are enabled from
the command line using the following options:
--arm9gdb=<PORT_NUM> (for the ARM9)
--arm7gdb=<PORT_NUM> (for the ARM7)
The PORT_NUM is the TCP port upon which the stub will listen
for connections. Once enabled you can connect to the stub
using the following command at the GDB debugger prompt
(assuming GDB and DeSmuME are running on the same machine):
target remote :<PORT_NUM>
NOTE: There are problems with the ARM support when stepping
code with GDB versions prior to version 6.6. It is recommended
that you use at least version 6.6 if possible.
------------------------
GBAMP compact flash emulation:
The default behaviour of DeSmumME is to attempt to emulate the
FAT image for the contents of the directory where the running
.nds file was located.
This behaviour can be altered using the --cflash=<DISK_IMAGE_FILE>
command line option. Using this option DeSmuME will emulation
a GBAMP and read and write sectors from/to the disk image
file. The disk image file must be created and populated with
files using some external tool.
NOTE: Currently if desmume fails to open the disk image file
it will silently continue minus a working GBAMP emulation.
3 Contact information_________________________________________
General inquiries should go to:
E-mail: guillaume@desmume.org
Web: http://www.desmume.org
Forums: http://forums.desmume.org
Please don't ask for roms, bios files or any other copyrighted
stuff.
If you want to submit a bug report, please run desmume, go
into the "Help" menu, and click on "Submit a bug report". If
you're having trouble with it, please feel free to email.
4 Disclaimer__________________________________________________
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be
useful,but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA
See the GNU General Public License details in COPYING.

View File

View File

@ -31,20 +31,10 @@ dnl - Check for intltool/gettext macros
m4_ifdef([IT_PROG_INTLTOOL],[IT_PROG_INTLTOOL])
dnl - Check for zlib
AC_CHECK_LIB(z, gzopen, [], [AC_MSG_ERROR([zlib was not found, we can't go further. Please install it or specify the location where it's installed.])])
AC_CHECK_LIB(z, gzopen)
dnl - Check for zziplib
AC_CHECK_LIB(zzip, zzip_open, [
LIBS="-lzzip $LIBS"
AC_DEFINE([HAVE_LIBZZIP])
AC_MSG_CHECKING([[whether zzip use void * as second parameter]])
AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[#include <zzip/lib.h>]], [[
void * v;
zzip_read(NULL, v, 0);]]),
AC_MSG_RESULT(yes),
AC_DEFINE([ZZIP_OLD_READ])
AC_MSG_RESULT(no))
])
AC_CHECK_LIB(zzip, zzip_open)
dnl - Check for SDL
AC_PATH_PROGS(SDLCONFIG, [sdl-config sdl11-config])
@ -66,11 +56,10 @@ dnl - if --enable-osmesa is used, check for it
AC_ARG_ENABLE([osmesa],
[AC_HELP_STRING([--enable-osmesa], [use off-screen mesa])],
[osmesa=$enableval],
[osmesa=yes])
[osmesa=no])
if test "x$osmesa" = "xyes" ; then
AC_CHECK_LIB(dl, main)
AC_CHECK_LIB([GL], main)
AC_CHECK_LIB(OSMesa, main,[
useosmesa=yes
AC_DEFINE(HAVE_LIBOSMESA)
@ -88,20 +77,28 @@ AC_PROVIDE_IFELSE([PKG_PROG_PKG_CONFIG], [
glib-2.0 >= $GLIB_VER,
HAVE_GLIB=yes,
HAVE_GLIB=no)
if test "$HAVE_GLIB" = "no"; then
AC_MSG_ERROR([glib-2.0 >= $GLIB_VER is required to build desmume gtk frontend])
fi
PKG_CHECK_MODULES(GTK,
gtk+-2.0 >= $GTK_VER,
HAVE_GTK=yes,
HAVE_GTK=no)
if test "$HAVE_GTK" = "no"; then
AC_MSG_ERROR([gtk-2.0 >= $GTK_VER is required to build desmume gtk frontend])
fi
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)
if test ! "x$useosmesa" = "xyes" ; then
PKG_CHECK_MODULES(GTKGLEXT,
"gtkglext-1.0",
HAVE_GTKGLEXT=yes,
HAVE_GTKGLEXT=no)
AC_SUBST(GTKGLEXT_CFLAGS)
AC_SUBST(GTKGLEXT_LIBS)
fi
PKG_CHECK_MODULES(GTHREAD,
"gthread-2.0",
@ -212,7 +209,7 @@ if test "x[$]ENABLE_HARDCORE" = "x1"; then
dnl - only valid for C with newer gcc's
CPPFLAGS="[$]CPPFLAGS -Wmissing-prototypes"
fi
CPPFLAGS="[$]CPPFLAGS -Wall -Wextra -D_FORTIFY_SOURCE=2 -Wno-missing-field-initializers -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-unused-parameter -Wmissing-declarations -Wundef -Wmissing-noreturn -Wshadow -Wredundant-decls -Wformat-nonliteral -Wformat-security -Winit-self"
CPPFLAGS="[$]CPPFLAGS -Wall -Wextra -D_FORTIFY_SOURCE=2 -Wno-missing-field-initializers -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-unused-parameter -Wmissing-declarations -Wundef -Wmissing-noreturn -Wshadow -Wredundant-decls -Wformat-nonliteral -Wformat-security -Wswitch-enum -Winit-self"
fi
dnl - Enable debug mode

View File

@ -1,503 +0,0 @@
DeSmuME Manual for the Windows port
1 Quick Getting Started Guide
1.1 Menu Layout
1.1.1 File Menu
1.1.1.1 File | Open Rom
1.1.1.2 File | Recent Rom
1.1.1.3 File | Rom Info
1.1.1.4 File | Save State As...
1.1.1.5 File | Load State As...
1.1.1.6 File | Save State
1.1.1.7 File | Load State
1.1.1.8 File | Import Backup Memory
1.1.1.9 File | Save Screenshot As...
1.1.1.10 File | Quick Screenshot
1.1.1.11 File | Record AVI
1.1.1.12 File | Stop AVI
1.1.1.13 File | Quit
1.1.2 Emulation Menu
1.1.2.1 Emulation | Pause
1.1.2.2 Emulation | Reset
1.1.2.3 Emulation | Shut Up
1.1.2.4 Emulation | GBA Slot
1.1.2.5 Emulation | Cheats
1.1.2.6 Emulation | Cheats | List
1.1.2.7 Emulation | Cheats | Search
1.1.3 View Menu
1.1.3.1 View | Rotation
1.1.3.2 View | Window size
1.1.3.3 View | Screen Separation
1.1.3.4 View | Force Maintain Ratio
1.1.3.5 View | Display Frame Counter
1.1.3.6 View | Display FPS
1.1.3.7 View | Display Input
1.1.3.8 View | Display Lag Counter
1.1.3.9 View | HUD Editing Mode
1.1.4 Config Menu
1.1.4.1 Config | Save Type
1.1.4.2 Config | 3D Settings
1.1.4.3 Config | Control Config
1.1.4.4 Config | Hotkey Config
1.1.4.5 Config | Sound Settings
1.1.4.6 Config | WIFI Settings
1.1.4.7 Config | Firmware Settings
1.1.4.8 Config | Emulation Settings
1.1.4.9 Config | Frame Skip
1.1.4.10 Config | Language
1.1.5 Tools Menu
1.1.5.1 Tools | Disassembler
1.1.5.2 Tools | View Memory
1.1.5.3 Tools | View Registers
1.1.5.4 Tools | View Palette
1.1.5.5 Tools | View Tiles
1.1.5.6 Tools | View Maps
1.1.5.7 Tools | View OAM
1.1.5.8 Tools | View Matrices
1.1.5.9 Tools | View Lights
1.1.5.10 Tools | View Layers
1.1.6 Help Menu
1.1.6.1 Help | Website
1.1.6.2 Help | Forums
1.1.6.3 Help | Submit a bug report
1.1.6.4 Help | About
Quick Getting Started Guide
When you start the emulator for the first time, you probably just want to play a certain game. You can do this by going to 'File' in the menu, and selecting 'Open Rom'. This will open up an explorer window, within which you can browse to the rom (nds file) that you wish to play. Once the game has finished loading (and this should only take a few seconds at most), your game will automatically start running. But if you want, you can also compile from source. See the article Installing DeSmuME from source on Windows for details.
Menu Layout
The rest of this manual will be spend on explaining all the other options in the menu.
File Menu
File | Open Rom
This option is for loading games. A game is typically called a rom file. Just use the explorer window to browse to the file, and click on open. The game should just load and start. The desmume windows port is also able to load some compressed formats, like zip, rar, and 7-zip. Just as long as there is a valid game (rom) file in the compressed archive ending with an .nds extension, it should load fine.
File | Recent Rom
This menu option contains a list of the roms that you have most recently loaded. You can quickly access a game that way, without having browse to the right directory with the 'Open Rom' option.
File | Rom Info
This option offers some information about the internals of the rom file, like name, code, manufacturer, and size. This should not concern the casual gamer, but may come in handy for developers.
File | Save State As...
Imagine you have gotten to a certian point in a game, and you need to do something else. The emulator let's you save the current state of the game, so that you can continue the game later at precisely the same point somewhere in the future.
File | Load State As...
Once you have saved a game's position, or 'state', you can load it again with this option.
File | Save State
This option works fairly similair to the 'Save As' option, altough it let's you save numbers instead os specifying a chosen name. Also, All the states saved via this option end up with a pre-determined name of 'game (rom) name'.dsx. So if the game is called MyGame, the first savefile will be called MyGame.ds0, the second one MyGame.ds1, etc.
File | Load State
This option let's you load the states that you saved via the 'File | Save State' option
File | Import Backup Memory
Backup Memory is the data the game uses to remember its own state. It is stored on the cart in a normal game. The file format is '.duc'. .duc is the same thing as .sav but a different format. People use pro action replays to capture it from their card and post it online without using emulators. Go to gamefaqs.com and find a '.duc' save file for a game you can use that function to import it into desmume. Its the save file. save ram. where your saved game goes. desmume calls it .sav file
File | Save Screenshot As...
This lets you take a screenshot of the current view of the emulator, and specify it's name to save as a bitmap (.bmp) file.
File | Quick Screenshot
This option also dumps a screencapture, but it has a pre-determied filename and location. It will be called printscreen.bmp, and located in the current directory. In Windows, this is probably the same folder as where your desmume binary is located.
File | Record AVI
This option lets you capture what's going on in the emulator, and save it in an avi file.
File | Stop AVI
The 'Record AVI' option continues to record the game, untill you press the 'Stop Avi' option.
File | Quit
Choosing this option exits the emulator.
Emulation Menu
Emulation | Pause
This option will pause the emulation, freezing it at the current moment of execution. Selecting it again will resume the execution of the ROM at the exact moment where you paused it.
Emulation | Reset
This option will reset the ROM that is currently loaded to the very start of the ROM, just as if you chose 'File | Open Rom' again.
Emulation | Shut Up
This option turns off all the sound.
Emulation | GBA Slot
This menu option pop-ups a new window, which lets you specirfy what to do with the GBA slot of the Nintendo DS. It has the following choices : NONE, Compact Flash, Rumble Pack, GBA Game. Rumble pack allows some games to use vibration. Memory extension... Extends memory. And some DS games can have bonuses, unlockable by GBA cart. For example in Megaman ZX you can fight some Megaman Zero Bosses when correct cartridge is inserted. There are also other GBA slot extensions, like... a Guitar hero controller. But these are currently not emulated by desmume. Flash Cartridge is used for homebrew software emulation, for example that uses DLDI ( Dynamically Linked Device Interface).
Emulation | Cheats
This option pulls down a drop-down menu, and presents the options list and search. Be aware though, that cheats are sort of half baked right now. If you are not having luck, wait for some news on an improved cheat system.
Emulation | Cheats | List
Choosing 'list' will list all the currently known cheats. Please refer to the article Using Cheats in DeSmuMe for further details on how to use the cheat mechanism in desmume.
Emulation | Cheats | Search
Choosing 'search' will let you search for cheats. Please refer to the article Using Cheats in DeSmuMe for further details on how to use the cheat mechanism in desmume.
View Menu
View | Rotation
This option will let you rotate the screen a pre-determined amount of degrees in order to adjust the angle of the display. Some programs require that you normally turn the DS on its side. You can set it up in that manner using this. The options are 0 (no rotation),90 ,180, and 270.
View | Window size
This option will let you enlarge the windows a pre-determined size. The resize options are: 1x, 1.5x, 2x, 3x, and 4x the default size. You can also adjust the window size by clicking on the edge of the window, and dragging the mouse.
View | Screen Separation
This option controls how far the two windows should be apart of each other, in other words: how big the border between them should be. Valid choices are: None (which is the default), narrow border (which is slightly larger), DS (which is about the wsame amount of room there is on a real Nintendo DS).
View | Force Maintain Ratio
Here you can choose, when re-sizing the windows, if you wan to maintain the ratio of the windows. Sometimes when the window size is changed it doesn't look correct on the screen. This option forces the window to maintain a correct ratio so it looks correct. You can select or de-select this option.
View | Display Frame Counter
Selecting this option causes a counter to run, that counts all the frames that have been displayed.
View | Display FPS
Selecting this option causes the 'frames-per-second' (or 'fps', for short) to be displayed.
View | Display Input
Selecting this option displays the keys you press on the keyboard, which is the input
View | Display Lag Counter
This option causes a counter to display that counts frames where the game doesn't poll input.
View | HUD Editing Mode
This option will let you drag around hud elements to pick their position.
Config Menu
Config | Save Type
This option lets you specify the save type of a particular game. The default is 'automatic'. However, this is not fail-safe in all cases, so you might need to manually select one of the other savetypes.
Config | 3D Settings
This option lets you select the method that is used to draw the screen. You can choose between OpenGL (an open standard) or SoftRasterizer (a desmume specific method).
Config | Control Config
This option lets you configure keyboard keys or a joystick. The joystick support is implemented using a DirectInput control interface.
Config | Hotkey Config
This menu option lets you define keys, that can be used to quickly select other options without having to go through the entire menu structure. Some examples are A hotkey for 'pause', or a hotkey for loading a specific savestate.
Config | Sound Settings
This option lets you choose between different sound generating methods, which currectly are 'Direct Sound Interface' and 'WAV Write sound Interface'. it also let's you specify the size of the buffer to buffer the sound.
Config | WIFI Settings
WIFI support is currently under heavy development, but it is not deemed ready for inclusion in the general public releases yet. Therefore, you may find this option missing, or simply 'greyed-out' for now.
Config | Firmware Settings
This option provides you with the same set of options that a real Nintendo DS firmware does. The most important here is the language, for multi-langual games will often look at how this option is set.
Config | Emulation Settings
These options let you boot from the extracted BIOS and Firmware of a real Nintendo DS. unless you have extracted/downloaded the firmware or bios from a Nintendo DS that you actually own yourself, these settings have no value for you qas desmume does not require them to run correctly.
Config | Frame Skip
This option lets you select how many frames should not be displayed, in order to gain speed improvements. The default is 'Auto'. If you have speed problems, you could decide to skip (not display) one or more frames in order to improve the speed. 'Limit Frameskip' let's you limit the frame rate to 60fps maximum. 60fps is essentially the speed that the game plays at on the actual console itself. So by selecting this option, you're limiting the framerate to the actual speed of the actual console.
Config | Language
This lets you set the langguage the emulator displays it's menu's and options in.
Tools Menu
Tools | Disassembler
This option displays the ARM9 and ARM7 disassembler. Be aware though, that the windows are drawn exactly on top of each other, so that you have to move (drag n drop) the first windows before the second window shows.
Tools | View Memory
This tool displays the ARM7 and ARM9 memory. Be aware though, that the windows are drawn exactly on top of each other, so that you have to move (drag n drop) the first windows before the second window shows.
The "View mode" radio buttons allow you to choose how the memory will be shown:
8-bit : shows the memory as bytes
16-bit : shows the memory as words
32-bit : shows the memory as dwords
The "View address" textbox and button allow you to jump to a different address:
Enter an hexadecimal address without 0x prefix, with up to 8 digits
Click "Go" to jump to the entered address
The "View dump" buttons allow you to dump the current view:
Text dump : dumps the view to a text file, in an human-readable form
Raw dump : dumps the memory directly to a binary file which can be read with an hex editor
Note that if you dump memory to a file already containing (a) dump(s), the new dump will be appended to the existing one(s).
The scrollbar... well, you surely know how a scrollbar works.
The viewers additionally allow to edit the memory. For it, click on the value you want to edit, then type the new value. The new value is applied only once you've entirely entered it.
Tools | View Registers
This option lets you view the ARM7 and ARM9 I/O registers.
Tools | View Palette
This option lets you view the palette in detail.
Tools | View Tiles
This option lets you view the tiles in detail.
Tools | View Maps
This option lets you view the maps in detail.
Tools | View OAM
This option lets you view the OAM layer in detail.
Tools | View Matrices
This option lets you view the matrices in detail.
Tools | View Lights
This option lets you view the lights in detail.
Tools | View Layers
This option lets you view the Layers one by one.
Help Menu
Help | Website
This option directs your browser to the desmume homepage.
Help | Forums
This option directs your browser to the desmume forums.
Help | Submit a bug report
This option directs your browser to the SourceForge bugtracker for desmume.
Help | About
This option displays the authors of the emulator.
Retrieved from "http://wiki.desmume.org/index.php?title=DeSmuME_Manual_for_the_Windows_port
This page was last modified on 20 April 2009, at 10:45.
====================================================================
Faq
If the FAQ is unable to answer your question(s), then please make sure that you also consult the manual.
Contents [hide]
1 General Questions
1.1 What does desmume emulate and on what systems?
1.2 What does DeSmuME mean?
1.3 Why doesn't my desmume play this game?
1.4 Why does this game fail to save?
1.5 Can I use my savefile's acrosss versions ?
1.6 Why can't I find a mac binary?
1.7 Why does my mac binary say something about being unsupported?
1.8 Where can I report bugs?
1.9 Can I attach files to bug reports I did not create myself ?
1.10 How do I get the latest svn code and build desmume myself?
1.11 Whats 'svn' ?
1.12 What compilers are supported for building desmume from source ?
1.13 Im a developer, and would like to contribute to the codebase. What can I do ?
1.14 Im not a developer, but would like to help out anyway. What can I do ?
1.15 It is hard to zoom in on a widescreen display due to the weird aspect ratio of the DS.
1.16 Why doesn't my openGL 3d work in linux?
1.17 Why doesn't my openGL 3d work in windows?
1.18 Why doesn't a menu option or tool exist in my linux or mac build?
1.19 Why does music sound bad sometimes?
1.20 Why doesn't my game boot or progress into the main game engine?
1.21 What hardware features are emulated?
1.22 Does the GDB stub still work?
1.23 Where/what is IRC?
1.24 Where is the manual?
1.25 How do I enter 'cheat codes' in desmume ?
1.26 Why is the emulator slow?
1.27 What are the minimum hardware requirements for desmume ?
1.28 What are the recommended hardware requirements for desmume ?
1.29 Does desmume support wifi ?
1.30 Why do I get an assert in wifi.cpp which keeps me from playing a game?
1.31 OK, then why does it make my firewall alert since 0.9.2 ?
1.32 Does desmume support the microphone ?
1.33 Where can I find technical details on the Nintendo DS and GBA ?
1.34 Does the 'GBA slot' option let me play GBA games ?
1.35 What is DLDI ?
1.36 I get the error: Data could not be accessed. Turn off the power and reinsert the DS card.
1.37 How can I post a screenshot file on the desmume forum ?
1.38 How can I post a savefile or avi capture on the desmume forum ?
1.39 How can I post a large log or other text file on the desmume IRC chat room ?
1.40 My display is incorrect or corrupted
1.41 What are the origins of DeSmuME ?
General Questions
What does desmume emulate and on what systems?
Desmume attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (nds). It currently runs on Windows, Linux, and mac OSX. DSi is not supported.
What does DeSmuME mean?
DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS) The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:
LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card
PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.
FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.
WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.
Why doesn't my desmume play this game?
Go to desmume.org and make sure you are using the latest version. Hint: desmume 0.8 and 0.3.4 are very old. Older versions will not be supported, under any circumstances.
Why does this game fail to save?
Desmume's autodetection for save types is not very good. For now, you need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. We want to fix this, but there are no specific plans so far. You may also consult http://www.advanscene.com/ to easily identify the save type for your game.
Can I use my savefile's acrosss versions ?
Probably not. Due to the constant internal changes sin desmume, it is unlikely that a savefile created with one version will work with another version of desmume
Why can't I find a mac binary?
We have an 0.9.2 mac binary which might not be linked to from the downloads page yet. Go to https://sourceforge.net/project/showfiles.php?group_id=164579&package_id=186413
Why does my mac binary say something about being unsupported?
There is no universal mac binary. Only i386 is supported. I blame the big endians. If you don't like this, better volunteer yourself to fix endian issues in the code (every day, I see something new that makes me say 'hmmmm that doesnt look endian safe')
Where can I report bugs?
In the official bug tracker; you may also request features around the same location, too, but in the other trackers.
Can I attach files to bug reports I did not create myself ?
SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of desmume may or may not agree with this point of view from SourceForge.
How do I get the latest svn code and build desmume myself?
Please check out the instructions related to your platform, over at Installing DeSmuME from source
Whats 'svn' ?
svn is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If youre an end-user, don't worry about it. And if you're a developer, see the question on how to get the latest svn code and build desmume yourself. See wikipedia for more info
What compilers are supported for building desmume from source ?
At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-c++ is not supported. Why won't you just download visual c++ express?
For Linux, any recent version of GCC and toolchain should work.
Im a developer, and would like to contribute to the codebase. What can I do ?
To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.
Im not a developer, but would like to help out anyway. What can I do ?
The most helpful thing you can do is use it, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is usefull. You could also watch for and answer questions placed on the desmume forum.
It is hard to zoom in on a widescreen display due to the weird aspect ratio of the DS.
In fact it is hard to zoom in on a 4:3 screen, too. Proposals involve tearing apart windows and floating them side by side or separately or something. This may happen one day, in the form of side by side windows.
Why doesn't my openGL 3d work in linux?
Blame nvidia and ati for putting out shoddy drivers. Then switch to software rasterizer.
Why doesn't my openGL 3d work in windows?
You are probably using an ATI video card. ATI driver support of OpenGL is known to be poor. Get an nvidia. Do not argue with that, we are professional programmers and know what we're talking about. Or, switch to software rasterizer
Why doesn't a menu option or tool exist in my linux or mac build?
Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the manual.
Why does music sound bad sometimes?
Most DS music is sequenced music, loaded from the cart to the ARM7 entirely when the level loads. This works fine. Your music that doesn't work is probably streaming music, which loads from the cart on the fly and goes straight to the speakers. This is much harder to emulate as it requires correct timing, which is not one of desmume's strengths right now. This may not be fixed for a while.
Why doesn't my game boot or progress into the main game engine?
Desmume is not perfect yet. Some games may fail due to wifi emulation. Apparently if you search the web correctly you can find ways to patch games to work better on emulators.
What hardware features are emulated?
All known 2d graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.
All 3d features are emulated, except for: tests, wireframes, edge marking, fog, and antialising. The opengl engine is near its limit and renders some things incorrectly. Eventually the software rasterizer (will support more features and be far more precise in the basic features. Both engines have trouble with some shadows, but software rasterizer is better. Software rasterizer has some noticeable texturing issues right now, especially in 2d games. Software rasterizer supports more correct lighting interpolation than opengl ever will (e.g. glitches at the edge of the screen while scrolling.) In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. There are inaccurate edge conditions in each renderer; in opengl, textures tend to get overdrawn; in software rasterizer, edges of textures tend to be jittery.
One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer.
All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.
Wifi is not supported. It is currently under slow and incomplete development. Therefore, you may find this option missing, or simply 'greyed-out' for now. Also, since WIFI support does not work yet, don't ask any questions about it's functioning because it still is unfinished and does not work yet.
We are unaware of any outstanding issues in the core system hardware (cpu, dma, mmu) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most softwares.
DLDI does anybody know if this still works?
Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file.
RTC (real-time clock) works; This is what makes the time in your games stay at 00:00:00, and what makes your random number values always come up the same.
Does the GDB stub still work?
This has not been built into the public releases, nor has the feature been tested in a while. If you want to be a test user, please hop on IRC and coordinate with us.
Where/what is IRC?
IRC is an on-line communication system.
data you need:
server: irc.freenode.net
port: 6667
channel: #desmume
what to use:
mIRC - windows
ChatZilla - FireFox add-on
xchat - X
plenty other, see wikipedia
Where is the manual?
A manual for desmume is over at http://wiki.desmume.org/index.php?title=Manual. It may not have the information that other entries in this FAQ promised that it would.
How do I enter 'cheat codes' in desmume ?
It is impossible yet to use "commercial" codes, such as Action Replay and Codebreaker, so what you'll have to do is manually search for, and alter the memory positions to your advantage. There's an excellent article in the wiki on Using Cheats in DeSmuMe
Why is the emulator slow?
Because nobody pays us to work on it full time and it runs fast enough for us to be happy. Well, almost. The cheapest way to get 60fps is to buy the cart. Buying a newer, faster computer is somewhat more expensive, and it has other side benefits. Also, if you are in Windows, make sure you have tried the SSE build which helps a little bit. Additionally, if you are using someone else's interim build it might not be fully optimized since we make our Windows releases using some profiler-guided optimization which helps by several FPS. You could try turning off the sound. And one last thing: try a new video card. But only as long as it is an nvidia. Also, a faster CPU is more helpfull than a bleeding edge graphics card. desmume is more CPU intensive than it is GPU intensive. It just needs a graphics card that is glitch-free, and currently the nvidia cards have a better track record.
What are the minimum hardware requirements for desmume ?
From a purely technical viewpoint, there are no minimum requirements. However, for 'real-world' playable speeds, you would need at least the following :
Windows OS: Windows XP or Vista
Linux OS: Any recent Linux distribution with a 2.6 kernel.
2 GHz Processor
512 MB Available System Memory
Available Hard Drive Space: A few MB for desmume, and several GB for the nds files.
128 MB 3D Video Card (Nvidia GeForce 6800 or better), ATI cards are not recommended.
Optional: Sound Card, if you want sound support
Optional: Microphone, if you wish to make use the Windows Microphone feature
What are the recommended hardware requirements for desmume ?
From a purely technical viewpoint, there are no recommended requirements. However, for 'real-world' playable speeds, the following gives you good performance:
Windows OS: Windows XP or Vista
Linux OS: Any recent Linux distribution with a 2.6 kernel.
3 GHz Processor
1 GB Available System Memory
Available Hard Drive Space: A few MB for desmume, and lots of GB's for the nds files.
512 MB 3D Video Card (Nvidia GeForce), ATI cards are not recommended.
Sound Card.
Microphone.
Does desmume support wifi ?
Wifi is not supported. It is currently under slow and incomplete development. Therefore, you may find this option missing, or simply 'greyed-out' for now. Also, since WIFI support does not work yet, don't ask any questions about it's functioning because it still is unfinished and does not work yet. Furthermore, current development activities focus mainly on the Windows build.
Why do I get an assert in wifi.cpp which keeps me from playing a game?
This was a glitch in 0.9.2 release. The download package has been replaced. Download it again and check the changelog to see if you have the fixed version.
OK, then why does it make my firewall alert since 0.9.2 ?
Your firewall is stupid, or winsock is stupid, (I am not sure which yet) for alerting just when winsock gets initialized. The emulator hasnt actually tried to connect to the internet yet. How could it? There isn't any wifi. All we are doing is some network initialization code. For those of you who are still not satisfied, then I will admit that there is actually some wifi code--but it doesnt actually do anything yet! Except alert your firewall. Sorry. Also, maybe that is actually a good, unobtrusive time for firewalls to alert. But I am not sorry for calling them stupid. They are hyperactive crybabies.
Does desmume support the microphone ?
Yes, but only on the Windows port. You do have to have an actual microphone attached to your PC, though. And perhaps somewhat confusing, the Linux ports do report 'Microphone successfully initialized' on startup of the emulator - but currently this is just a piece of stub (dummy) code used only to correctly start the emulator.
Where can I find technical details on the Nintendo DS and GBA ?
http://nocash.emubase.de/gbatek.htm
Does the 'GBA slot' option let me play GBA games ?
No. A 'real' Nintendo DS can use the gba slot to play gba games, but desmume does not emulate this. But a 'real' Nintnedo DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles, and that part is emulated by desmume. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or visualboy advance.
What is DLDI ?
let me give you an overview on DLDI. You should know that there are many various flash cartridges for DS. They use different file allocation systems, different storages, etc. They are used for launching homebrew. So to make one proram run on all cards. Youd have to write support for each and every card so that it worked for everyone. But none needs support for other cards than their And then genial solution was found. There was an universal IO unit made thats just interface to IO operations. If you don't have a DS, why do you bother with desmume ? You surely don't have bought any game to run on it. And compiled program does not know how to handle file system etc. And then user can append IO routines for his own card. “DLDI patch”. So, now when I have an M3 cart. I download rom, patch it with m3 DLDI patch. And it works on my cart. Say you had Supercard instead. Youd have to download very same rom and apply Supercart DLDI patch to it. DLDI patch is the same for all roms. So its easy for both developper and end user.
I get the error: Data could not be accessed. Turn off the power and reinsert the DS card.
The automatic savetype detection probably failed to detect the correct savetype, and you have to set it manually to the correct type. If you are lucky, information about your game (and the corresponding savetype) can be found on a website such as http://www.advanscene.com/. And if you're not as lucky, you'll just have to try them all out until you find the correct type.
How can I post a screenshot file on the desmume forum ?
You can create a screenshot, and then upload it to a free external service provider like ImageShack (http://imageshack.us/), and then put the provided links to the page in the message you post on the forum.
How can I post a savefile or avi capture on the desmume forum ?
After you created it, yo can upload it to a free external service provider like MediaFire (http://www.mediafire.com/), and then put the provided links to the page in the message you post on the forum.
How can I post a large log or other text file on the desmume IRC chat room ?
Make use of the external service provider 'pastebin' (http://pastebin.com/), and post the url to it on the IRC channel.
My display is incorrect or corrupted
Try switching the 3D Renderer from opengl or SoftRasterizer, or vice versa, to see if that resolves the bug. In windows, the default hotkey to do this quickly is numpad minus.
What are the origins of DeSmuME ?
DeSmuME is a freeware emulator for the Nintendo DS created by YopYop156.
Due to change in French laws regarding emulation YopYop has decided to stop development of DeSmuME Nintendo DS emulator but that doesn't mean that DeSmuME is obsolete - programmers in this project have picked up where Yopyop left off. The original website was http://yopyop156.ifrance.com/.
Yopyop said:
Its release under GPL. I have just removed the new 3D engine because its too much bugged. Hopefully it will be helpful for some of you.
The latest statement heard from yopyop was :
DeSmuMe project is over.
You may dont know but there are a new law in France that could put me in big trouble.
With DeSmuMe, I have closed the doors of game company but I can not offer to pay for it.
The worst thing is that I have found the bad coded instructions.
For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.
Sorry for the home brew programmers.
For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.
It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .
Thus I will not do something of useless and illegal.
For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.
And for the sources it is the same problem as for the project.
good week end
yopyop
edit the law relates to the royalties and the rights close, not?
Retrieved from "http://wiki.desmume.org/index.php?title=Faq"

View File

@ -1,432 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="MediaWiki 1.13.3" />
<meta name="keywords" content="Faq,Installing DeSmuME from source,Manual,Using Cheats in DeSmuMe" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch_desc.php" title="DeSmuME (en)" />
<link rel="alternate" type="application/rss+xml" title="DeSmuME RSS Feed" href="http://wiki.desmume.org/index.php?title=Special:RecentChanges&amp;feed=rss" />
<link rel="alternate" type="application/atom+xml" title="DeSmuME Atom Feed" href="http://wiki.desmume.org/index.php?title=Special:RecentChanges&amp;feed=atom" />
<title>Faq - DeSmuME</title>
<style type="text/css" media="screen, projection">/*<![CDATA[*/
@import "/skins/common/shared.css?164";
@import "/skins/monobook/main.css?164";
/*]]>*/</style>
<link rel="stylesheet" type="text/css" media="print" href="/skins/common/commonPrint.css?164" />
<!--[if lt IE 5.5000]><style type="text/css">@import "/skins/monobook/IE50Fixes.css?164";</style><![endif]-->
<!--[if IE 5.5000]><style type="text/css">@import "/skins/monobook/IE55Fixes.css?164";</style><![endif]-->
<!--[if IE 6]><style type="text/css">@import "/skins/monobook/IE60Fixes.css?164";</style><![endif]-->
<!--[if IE 7]><style type="text/css">@import "/skins/monobook/IE70Fixes.css?164";</style><![endif]-->
<!--[if lt IE 7]><script type="text/javascript" src="/skins/common/IEFixes.js?164"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
<script type= "text/javascript">/*<![CDATA[*/
var skin = "monobook";
var stylepath = "/skins";
var wgArticlePath = "/index.php?title=$1";
var wgScriptPath = "";
var wgScript = "/index.php";
var wgVariantArticlePath = false;
var wgActionPaths = [];
var wgServer = "http://wiki.desmume.org";
var wgCanonicalNamespace = "";
var wgCanonicalSpecialPageName = false;
var wgNamespaceNumber = 0;
var wgPageName = "Faq";
var wgTitle = "Faq";
var wgAction = "view";
var wgArticleId = "15";
var wgIsArticle = true;
var wgUserName = null;
var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
var wgCurRevisionId = "969";
var wgVersion = "1.13.3";
var wgEnableAPI = true;
var wgEnableWriteAPI = false;
var wgRestrictionEdit = [];
var wgRestrictionMove = [];
/*]]>*/</script>
<script type="text/javascript" src="/skins/common/wikibits.js?164"><!-- wikibits js --></script>
<!-- Head Scripts -->
<script type="text/javascript" src="/skins/common/ajax.js?164"></script>
<script type="text/javascript" src="/index.php?title=-&amp;action=raw&amp;gen=js&amp;useskin=monobook"><!-- site js --></script>
<style type="text/css">/*<![CDATA[*/
@import "/index.php?title=MediaWiki:Common.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
@import "/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=18000";
@import "/index.php?title=-&action=raw&gen=css&maxage=18000&useskin=monobook";
/*]]>*/</style>
</head>
<body class="mediawiki ns-0 ltr page-Faq">
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<a name="top" id="top"></a>
<h1 class="firstHeading">Faq</h1>
<div id="bodyContent">
<h3 id="siteSub">From DeSmuME</h3>
<div id="contentSub"></div>
<div id="jump-to-nav">Jump to: <a href="#column-one">navigation</a>, <a href="#searchInput">search</a></div> <!-- start content -->
<p><b>DesMuMe Faq</b>
</p><p>If the FAQ is unable to answer your question(s), then please make sure that you also consult the <a href="/index.php?title=Manual" title="Manual">manual</a>.
</p>
<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1"><a href="#General_Questions"><span class="tocnumber">1</span> <span class="toctext">General Questions</span></a>
<ul>
<li class="toclevel-2"><a href="#What_does_desmume_emulate_and_on_what_systems.3F"><span class="tocnumber">1.1</span> <span class="toctext">What does desmume emulate and on what systems?</span></a></li>
<li class="toclevel-2"><a href="#What_does_DeSmuME_mean.3F"><span class="tocnumber">1.2</span> <span class="toctext">What does DeSmuME mean?</span></a></li>
<li class="toclevel-2"><a href="#Why_doesn.27t_my_desmume_play_this_game.3F"><span class="tocnumber">1.3</span> <span class="toctext">Why doesn't my desmume play this game?</span></a></li>
<li class="toclevel-2"><a href="#Why_does_this_game_fail_to_save.3F"><span class="tocnumber">1.4</span> <span class="toctext">Why does this game fail to save?</span></a></li>
<li class="toclevel-2"><a href="#Can_I_use_my_savefile.27s_acrosss_versions_.3F"><span class="tocnumber">1.5</span> <span class="toctext">Can I use my savefile's acrosss versions&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Why_can.27t_I_find_a_mac_binary.3F"><span class="tocnumber">1.6</span> <span class="toctext">Why can't I find a mac binary?</span></a></li>
<li class="toclevel-2"><a href="#Why_does_my_mac_binary_say_something_about_being_unsupported.3F"><span class="tocnumber">1.7</span> <span class="toctext">Why does my mac binary say something about being unsupported?</span></a></li>
<li class="toclevel-2"><a href="#Where_can_I_report_bugs.3F"><span class="tocnumber">1.8</span> <span class="toctext">Where can I report bugs?</span></a></li>
<li class="toclevel-2"><a href="#Can_I_attach_files_to_bug_reports_I_did_not_create_myself_.3F"><span class="tocnumber">1.9</span> <span class="toctext">Can I attach files to bug reports I did not create myself&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#How_do_I_get_the_latest_svn_code_and_build_desmume_myself.3F"><span class="tocnumber">1.10</span> <span class="toctext">How do I get the latest svn code and build desmume myself?</span></a></li>
<li class="toclevel-2"><a href="#Whats_.27svn.27_.3F"><span class="tocnumber">1.11</span> <span class="toctext">Whats 'svn'&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#What_compilers_are_supported_for_building_desmume_from_source_.3F"><span class="tocnumber">1.12</span> <span class="toctext">What compilers are supported for building desmume from source&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Im_a_developer.2C_and_would_like_to_contribute_to_the_codebase._What_can_I_do_.3F"><span class="tocnumber">1.13</span> <span class="toctext">Im a developer, and would like to contribute to the codebase. What can I do&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Im_not_a_developer.2C_but_would_like_to_help_out_anyway._What_can_I_do_.3F"><span class="tocnumber">1.14</span> <span class="toctext">Im not a developer, but would like to help out anyway. What can I do&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#It_is_hard_to_zoom_in_on_a_widescreen_display_due_to_the_weird_aspect_ratio_of_the_DS."><span class="tocnumber">1.15</span> <span class="toctext">It is hard to zoom in on a widescreen display due to the weird aspect ratio of the DS.</span></a></li>
<li class="toclevel-2"><a href="#Why_doesn.27t_my_openGL_3d_work_in_linux.3F"><span class="tocnumber">1.16</span> <span class="toctext">Why doesn't my openGL 3d work in linux?</span></a></li>
<li class="toclevel-2"><a href="#Why_doesn.27t_my_openGL_3d_work_in_windows.3F"><span class="tocnumber">1.17</span> <span class="toctext">Why doesn't my openGL 3d work in windows?</span></a></li>
<li class="toclevel-2"><a href="#Why_doesn.27t_a_menu_option_or_tool_exist_in_my_linux_or_mac_build.3F"><span class="tocnumber">1.18</span> <span class="toctext">Why doesn't a menu option or tool exist in my linux or mac build?</span></a></li>
<li class="toclevel-2"><a href="#Why_does_music_sound_bad_sometimes.3F"><span class="tocnumber">1.19</span> <span class="toctext">Why does music sound bad sometimes?</span></a></li>
<li class="toclevel-2"><a href="#Why_doesn.27t_my_game_boot_or_progress_into_the_main_game_engine.3F"><span class="tocnumber">1.20</span> <span class="toctext">Why doesn't my game boot or progress into the main game engine?</span></a></li>
<li class="toclevel-2"><a href="#What_hardware_features_are_emulated.3F"><span class="tocnumber">1.21</span> <span class="toctext">What hardware features are emulated?</span></a></li>
<li class="toclevel-2"><a href="#Does_the_GDB_stub_still_work.3F"><span class="tocnumber">1.22</span> <span class="toctext">Does the GDB stub still work?</span></a></li>
<li class="toclevel-2"><a href="#Where.2Fwhat_is_IRC.3F"><span class="tocnumber">1.23</span> <span class="toctext">Where/what is IRC?</span></a></li>
<li class="toclevel-2"><a href="#Where_is_the_manual.3F"><span class="tocnumber">1.24</span> <span class="toctext">Where is the manual?</span></a></li>
<li class="toclevel-2"><a href="#How_do_I_enter_.27cheat_codes.27_in_desmume_.3F"><span class="tocnumber">1.25</span> <span class="toctext">How do I enter 'cheat codes' in desmume&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Why_is_the_emulator_slow.3F"><span class="tocnumber">1.26</span> <span class="toctext">Why is the emulator slow?</span></a></li>
<li class="toclevel-2"><a href="#What_are_the_minimum_hardware_requirements_for_desmume_.3F"><span class="tocnumber">1.27</span> <span class="toctext">What are the minimum hardware requirements for desmume&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#What_are_the_recommended_hardware_requirements_for_desmume_.3F"><span class="tocnumber">1.28</span> <span class="toctext">What are the recommended hardware requirements for desmume&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Does_desmume_support_wifi_.3F"><span class="tocnumber">1.29</span> <span class="toctext">Does desmume support wifi&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Why_do_I_get_an_assert_in_wifi.cpp_which_keeps_me_from_playing_a_game.3F"><span class="tocnumber">1.30</span> <span class="toctext">Why do I get an assert in wifi.cpp which keeps me from playing a game?</span></a></li>
<li class="toclevel-2"><a href="#OK.2C_then_why_does_it_make_my_firewall_alert_since_0.9.2_.3F"><span class="tocnumber">1.31</span> <span class="toctext">OK, then why does it make my firewall alert since 0.9.2&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Does_desmume_support_the_microphone_.3F"><span class="tocnumber">1.32</span> <span class="toctext">Does desmume support the microphone&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Where_can_I_find_technical_details_on_the_Nintendo_DS_and_GBA_.3F"><span class="tocnumber">1.33</span> <span class="toctext">Where can I find technical details on the Nintendo DS and GBA&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#Does_the_.27GBA_slot.27_option_let_me_play_GBA_games_.3F"><span class="tocnumber">1.34</span> <span class="toctext">Does the 'GBA slot' option let me play GBA games&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#What_is_DLDI_.3F"><span class="tocnumber">1.35</span> <span class="toctext">What is DLDI&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#I_get_the_error:_Data_could_not_be_accessed._Turn_off_the_power_and_reinsert_the_DS_card."><span class="tocnumber">1.36</span> <span class="toctext">I get the error: Data could not be accessed. Turn off the power and reinsert the DS card.</span></a></li>
<li class="toclevel-2"><a href="#How_can_I_post_a_screenshot_file_on_the_desmume_forum_.3F"><span class="tocnumber">1.37</span> <span class="toctext">How can I post a screenshot file on the desmume forum&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#How_can_I_post_a_savefile_or_avi_capture_on_the_desmume_forum_.3F"><span class="tocnumber">1.38</span> <span class="toctext">How can I post a savefile or avi capture on the desmume forum&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#How_can_I_post_a_large_log_or_other_text_file_on_the_desmume_IRC_chat_room_.3F"><span class="tocnumber">1.39</span> <span class="toctext">How can I post a large log or other text file on the desmume IRC chat room&nbsp;?</span></a></li>
<li class="toclevel-2"><a href="#My_display_is_incorrect_or_corrupted"><span class="tocnumber">1.40</span> <span class="toctext">My display is incorrect or corrupted</span></a></li>
<li class="toclevel-2"><a href="#What_are_the_origins_of_DeSmuME_.3F"><span class="tocnumber">1.41</span> <span class="toctext">What are the origins of DeSmuME&nbsp;?</span></a></li>
</ul>
</li>
</ul>
</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
<a name="General_Questions"></a><h2><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=1" title="Edit section: General Questions">edit</a>]</span> <span class="mw-headline"> General Questions </span></h2>
<a name="What_does_desmume_emulate_and_on_what_systems.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=2" title="Edit section: What does desmume emulate and on what systems?">edit</a>]</span> <span class="mw-headline"> What does desmume emulate and on what systems? </span></h3>
<p>Desmume attempts to emulate, as faithfully as possible, the Nintendo DS and Nintendo DS Lite handheld game consoles (nds). It currently runs on Windows, Linux, and mac OSX. DSi is not supported.
</p>
<a name="What_does_DeSmuME_mean.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=3" title="Edit section: What does DeSmuME mean?">edit</a>]</span> <span class="mw-headline"> What does DeSmuME mean? </span></h3>
<p>DeSmuME is a Nintendo DS emulator and the name is a play of words - DS Emu + ME (like FlashMe - firmware hack and PassMe mod-chip for DS)
The name DeSmuME derives from the popular use of ME in Nintendo DS products by homebrew developers. So DeSmuME would equal DSemuMe. Other popular uses of ME include:
</p>
<ul><li> LoadMe - a generic patcher for commercial DS roms that works with any GBA Flash Card
</li><li> PassMe - "mod-chip" using which takes authentication from an original DS card an allows execution of unauthenticated DS rom code - from the GBA cartridge slot / GBA flash card.
</li><li> FlashMe - a hacked firmware for DS that allows you to start code in DS mode from a flash card in the GBA slot.
</li><li> WifiMe - are a set of a custom drivers and software by FireFly for RALink based wireless network cards enabling to boot homebrew code on DS via Nintendo Wireless Multiboot method.
</li></ul>
<a name="Why_doesn.27t_my_desmume_play_this_game.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=4" title="Edit section: Why doesn't my desmume play this game?">edit</a>]</span> <span class="mw-headline"> Why doesn't my desmume play this game? </span></h3>
<ul><li> Go to desmume.org and make sure you are using the latest version. Hint: desmume 0.8 and 0.3.4 are very old. Older versions will not be supported, under any circumstances.
</li></ul>
<a name="Why_does_this_game_fail_to_save.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=5" title="Edit section: Why does this game fail to save?">edit</a>]</span> <span class="mw-headline"> Why does this game fail to save? </span></h3>
<ul><li> Desmume's autodetection for save types is not very good. For now, you need to manually specify the correct save type for your game. Consult the manual for details on how to do this for your platform. We want to fix this, but there are no specific plans so far. You may also consult <a href="http://www.advanscene.com/" class="external free" title="http://www.advanscene.com/" rel="nofollow">http://www.advanscene.com/</a> to easily identify the save type for your game.
</li></ul>
<a name="Can_I_use_my_savefile.27s_acrosss_versions_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=6" title="Edit section: Can I use my savefile's acrosss versions&nbsp;?">edit</a>]</span> <span class="mw-headline"> Can I use my savefile's acrosss versions&nbsp;? </span></h3>
<ul><li> Probably not. Due to the constant internal changes sin desmume, it is unlikely that a savefile created with one version will work with another version of desmume
</li></ul>
<a name="Why_can.27t_I_find_a_mac_binary.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=7" title="Edit section: Why can't I find a mac binary?">edit</a>]</span> <span class="mw-headline"> Why can't I find a mac binary? </span></h3>
<ul><li> We have an 0.9.2 mac binary which might not be linked to from the downloads page yet. Go to <a href="https://sourceforge.net/project/showfiles.php?group_id=164579&amp;package_id=186413" class="external free" title="https://sourceforge.net/project/showfiles.php?group_id=164579&amp;package_id=186413" rel="nofollow">https://sourceforge.net/project/showfiles.php?group_id=164579&amp;package_id=186413</a>
</li></ul>
<a name="Why_does_my_mac_binary_say_something_about_being_unsupported.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=8" title="Edit section: Why does my mac binary say something about being unsupported?">edit</a>]</span> <span class="mw-headline"> Why does my mac binary say something about being unsupported? </span></h3>
<ul><li> There is no universal mac binary. Only i386 is supported. I blame the big endians. If you don't like this, better volunteer yourself to fix endian issues in the code (every day, I see something new that makes me say 'hmmmm that doesnt look endian safe')
</li></ul>
<a name="Where_can_I_report_bugs.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=9" title="Edit section: Where can I report bugs?">edit</a>]</span> <span class="mw-headline"> Where can I report bugs? </span></h3>
<ul><li> In the <a href="http://sourceforge.net/tracker/?group_id=164579&amp;atid=832291" class="external text" title="http://sourceforge.net/tracker/?group_id=164579&amp;atid=832291" rel="nofollow">official bug tracker</a>; you may also request features around the same location, too, but in the other trackers.
</li></ul>
<a name="Can_I_attach_files_to_bug_reports_I_did_not_create_myself_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=10" title="Edit section: Can I attach files to bug reports I did not create myself&nbsp;?">edit</a>]</span> <span class="mw-headline"> Can I attach files to bug reports I did not create myself&nbsp;? </span></h3>
<ul><li> SourceForge likes for folks to only respond on items they submit. If you see a ticket that represents something you are encountering, SourceForge doesn't necessarily want you commenting on that. The reasoning for this given by SourceForge is that they feel it is best to open your own ticket, which helps appreciate the extent of issues in many cases. The authors of desmume may or may not agree with this point of view from SourceForge.
</li></ul>
<a name="How_do_I_get_the_latest_svn_code_and_build_desmume_myself.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=11" title="Edit section: How do I get the latest svn code and build desmume myself?">edit</a>]</span> <span class="mw-headline"> How do I get the latest svn code and build desmume myself? </span></h3>
<ul><li> Please check out the instructions related to your platform, over at <a href="/index.php?title=Installing_DeSmuME_from_source" title="Installing DeSmuME from source">Installing DeSmuME from source</a>
</li></ul>
<a name="Whats_.27svn.27_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=12" title="Edit section: Whats 'svn'&nbsp;?">edit</a>]</span> <span class="mw-headline"> Whats 'svn'&nbsp;? </span></h3>
<p><a href="http://subversion.tigris.org/" class="external text" title="http://subversion.tigris.org/" rel="nofollow">svn</a> is a developers tool. It's used to let multiple developers work on the same codebase without conflicts. If youre an end-user, don't worry about it. And if you're a developer, see the question on how to get the latest svn code and build desmume yourself. See <a href="http://en.wikipedia.org/wiki/Subversion_(software)" class="external text" title="http://en.wikipedia.org/wiki/Subversion_(software)" rel="nofollow">wikipedia</a> for more info
</p>
<a name="What_compilers_are_supported_for_building_desmume_from_source_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=13" title="Edit section: What compilers are supported for building desmume from source&nbsp;?">edit</a>]</span> <span class="mw-headline"> What compilers are supported for building desmume from source&nbsp;? </span></h3>
<ul><li> At the moment, for Windows Microsoft Visual C++ 2005 and 2008 are the only supported compilers. Dev-c++ is not supported. Why won't you just download visual c++ express?
</li><li> For Linux, any recent version of GCC and toolchain should work.
</li></ul>
<a name="Im_a_developer.2C_and_would_like_to_contribute_to_the_codebase._What_can_I_do_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=14" title="Edit section: Im a developer, and would like to contribute to the codebase. What can I do&nbsp;?">edit</a>]</span> <span class="mw-headline"> Im a developer, and would like to contribute to the codebase. What can I do&nbsp;? </span></h3>
<p>To start you off in the right direction, the best thing you can do is join the developer team on IRC and discuss your intentions with the developers.
</p>
<a name="Im_not_a_developer.2C_but_would_like_to_help_out_anyway._What_can_I_do_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=15" title="Edit section: Im not a developer, but would like to help out anyway. What can I do&nbsp;?">edit</a>]</span> <span class="mw-headline"> Im not a developer, but would like to help out anyway. What can I do&nbsp;? </span></h3>
<p>The most helpful thing you can do is use it, learn its ins and outs, and learn how to compile svn builds. Then monitor it for regressions and report bugs. You can patrol the bug tracker for bugs which could use elucidation or which, based on your awareness of how the emulator is changing, might be fixed without us having specifically addressed the bug. Basically, be a super user. And hang out on irc. Also, adding to or perfecting the documentation in the wiki is usefull. You could also watch for and answer questions placed on the desmume forum.
</p>
<a name="It_is_hard_to_zoom_in_on_a_widescreen_display_due_to_the_weird_aspect_ratio_of_the_DS."></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=16" title="Edit section: It is hard to zoom in on a widescreen display due to the weird aspect ratio of the DS.">edit</a>]</span> <span class="mw-headline"> It is hard to zoom in on a widescreen display due to the weird aspect ratio of the DS. </span></h3>
<p>In fact it is hard to zoom in on a 4:3 screen, too. Proposals involve tearing apart windows and floating them side by side or separately or something. This may happen one day, in the form of side by side windows.
</p>
<a name="Why_doesn.27t_my_openGL_3d_work_in_linux.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=17" title="Edit section: Why doesn't my openGL 3d work in linux?">edit</a>]</span> <span class="mw-headline"> Why doesn't my openGL 3d work in linux? </span></h3>
<p>Blame nvidia and ati for putting out shoddy drivers. Then switch to software rasterizer.
</p>
<a name="Why_doesn.27t_my_openGL_3d_work_in_windows.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=18" title="Edit section: Why doesn't my openGL 3d work in windows?">edit</a>]</span> <span class="mw-headline"> Why doesn't my openGL 3d work in windows? </span></h3>
<p>You are probably using an ATI video card. ATI driver support of OpenGL is known to be poor. Get an nvidia. Do not argue with that, we are professional programmers and know what we're talking about. Or, switch to software rasterizer
</p>
<a name="Why_doesn.27t_a_menu_option_or_tool_exist_in_my_linux_or_mac_build.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=19" title="Edit section: Why doesn't a menu option or tool exist in my linux or mac build?">edit</a>]</span> <span class="mw-headline"> Why doesn't a menu option or tool exist in my linux or mac build? </span></h3>
<p>Because making portable tools and platform harnesses are not our cup of tea and so a developer puts a feature into whichever ports he cares about. This policy is never going to change, although some features might migrate to other platforms over time. Better check the <a href="http://wiki.desmume.org/index.php?title=Manual" class="external text" title="http://wiki.desmume.org/index.php?title=Manual" rel="nofollow">manual</a>.
</p>
<a name="Why_does_music_sound_bad_sometimes.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=20" title="Edit section: Why does music sound bad sometimes?">edit</a>]</span> <span class="mw-headline"> Why does music sound bad sometimes? </span></h3>
<p>Most DS music is sequenced music, loaded from the cart to the ARM7 entirely when the level loads. This works fine. Your music that doesn't work is probably streaming music, which loads from the cart on the fly and goes straight to the speakers. This is much harder to emulate as it requires correct timing, which is not one of desmume's strengths right now. This may not be fixed for a while.
</p>
<a name="Why_doesn.27t_my_game_boot_or_progress_into_the_main_game_engine.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=21" title="Edit section: Why doesn't my game boot or progress into the main game engine?">edit</a>]</span> <span class="mw-headline"> Why doesn't my game boot or progress into the main game engine? </span></h3>
<p>Desmume is not perfect yet. Some games may fail due to wifi emulation. Apparently if you search the web correctly you can find ways to patch games to work better on emulators.
</p>
<a name="What_hardware_features_are_emulated.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=22" title="Edit section: What hardware features are emulated?">edit</a>]</span> <span class="mw-headline"> What hardware features are emulated? </span></h3>
<ul><li> All known 2d graphics features are correct. Mosaics work but are imperfect. There may be small issues with colors as the correct color bit depths are not used at all points in the pipeline.
</li></ul>
<ul><li> All 3d features are emulated, except for: tests, wireframes, edge marking, fog, and antialising. The opengl engine is near its limit and renders some things incorrectly. Eventually the software rasterizer (will support more features and be far more precise in the basic features. Both engines have trouble with some shadows, but software rasterizer is better. Software rasterizer has some noticeable texturing issues right now, especially in 2d games. Software rasterizer supports more correct lighting interpolation than opengl ever will (e.g. glitches at the edge of the screen while scrolling.) In software rasterizer, there are issues similar to 2d with incorrect bit depth being used in the pipeline. There are inaccurate edge conditions in each renderer; in opengl, textures tend to get overdrawn; in software rasterizer, edges of textures tend to be jittery.
</li></ul>
<p>One last thing -- if buttons and labels and menus rendering on the 3d screen are obscured (for example, a button but no label is on it) then you may need to use the software rasterizer.
</p>
<ul><li> All sound features are emulated. The microphone support is new and the manual should be consulted, where you will find out, among other things, that it is only supported in windows right now.
</li></ul>
<ul><li> Wifi is not supported. It is currently under slow and incomplete development. Therefore, you may find this option missing, or simply 'greyed-out' for now. Also, since WIFI support does not work yet, don't ask any questions about it's functioning because it still is unfinished and does not work yet.
</li></ul>
<ul><li> We are unaware of any outstanding issues in the core system hardware (cpu, dma, mmu) but there are certainly still some. The instruction and memory timings are quite incorrect; however, this seems not to hurt most softwares.
</li></ul>
<ul><li> DLDI does anybody know if this still works?
</li></ul>
<dl><dd> Dynamically Linked Driver Interface, commonly known as DLDI, is a driver framework that allows NDS and GBA homebrew to easily read and write to any number of different devices, just by substituting a driver file.
</dd></dl>
<ul><li> RTC (real-time clock) works; This is what makes the time in your games stay at 00:00:00, and what makes your random number values always come up the same.
</li></ul>
<a name="Does_the_GDB_stub_still_work.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=23" title="Edit section: Does the GDB stub still work?">edit</a>]</span> <span class="mw-headline"> Does the GDB stub still work? </span></h3>
<p>This has not been built into the public releases, nor has the feature been tested in a while. If you want to be a test user, please hop on IRC and coordinate with us.
</p>
<a name="Where.2Fwhat_is_IRC.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=24" title="Edit section: Where/what is IRC?">edit</a>]</span> <span class="mw-headline"> Where/what is IRC? </span></h3>
<p><a href="http://en.wikipedia.org/wiki/IRC" class="external text" title="http://en.wikipedia.org/wiki/IRC" rel="nofollow">IRC</a> is an on-line communication system.
</p><p>data you need:
</p>
<ul><li> server: irc.freenode.net
</li><li> port: 6667
</li><li> channel: #desmume
</li></ul>
<p>what to use:
</p>
<ul><li> mIRC - windows
</li><li> ChatZilla - FireFox add-on
</li><li> xchat - X
</li><li> plenty other, see <a href="http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients" class="external text" title="http://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients" rel="nofollow">wikipedia</a>
</li></ul>
<a name="Where_is_the_manual.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=25" title="Edit section: Where is the manual?">edit</a>]</span> <span class="mw-headline"> Where is the manual? </span></h3>
<p>A manual for desmume is over at <a href="http://wiki.desmume.org/index.php?title=Manual" class="external free" title="http://wiki.desmume.org/index.php?title=Manual" rel="nofollow">http://wiki.desmume.org/index.php?title=Manual</a>. It may not have the information that other entries in this FAQ promised that it would.
</p>
<a name="How_do_I_enter_.27cheat_codes.27_in_desmume_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=26" title="Edit section: How do I enter 'cheat codes' in desmume&nbsp;?">edit</a>]</span> <span class="mw-headline"> How do I enter 'cheat codes' in desmume&nbsp;? </span></h3>
<p>It is impossible yet to use "commercial" codes, such as Action Replay and Codebreaker, so what you'll have to do is manually search for, and alter the memory positions to your advantage. There's an excellent article in the wiki on <a href="/index.php?title=Using_Cheats_in_DeSmuMe" title="Using Cheats in DeSmuMe">Using Cheats in DeSmuMe </a>
</p>
<a name="Why_is_the_emulator_slow.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=27" title="Edit section: Why is the emulator slow?">edit</a>]</span> <span class="mw-headline"> Why is the emulator slow? </span></h3>
<p>Because nobody pays us to work on it full time and it runs fast enough for us to be happy. Well, almost. The cheapest way to get 60fps is to buy the cart. Buying a newer, faster computer is somewhat more expensive, and it has other side benefits. Also, if you are in Windows, make sure you have tried the SSE build which helps a little bit. Additionally, if you are using someone else's interim build it might not be fully optimized since we make our Windows releases using some profiler-guided optimization which helps by several FPS. You could try turning off the sound. And one last thing: try a new video card. But only as long as it is an nvidia. Also, a faster CPU is more helpfull than a bleeding edge graphics card. desmume is more CPU intensive than it is GPU intensive. It just needs a graphics card that is glitch-free, and currently the nvidia cards have a better track record.
</p>
<a name="What_are_the_minimum_hardware_requirements_for_desmume_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=28" title="Edit section: What are the minimum hardware requirements for desmume&nbsp;?">edit</a>]</span> <span class="mw-headline"> What are the minimum hardware requirements for desmume&nbsp;? </span></h3>
<p>From a purely technical viewpoint, there are no minimum requirements. However, for 'real-world' playable speeds, you would need at least the following&nbsp;:
</p>
<ul><li> Windows OS: Windows XP or Vista
</li><li> Linux OS: Any recent Linux distribution with a 2.6 kernel.
</li><li> 2 GHz Processor
</li><li> 512 MB Available System Memory
</li><li> Available Hard Drive Space: A few MB for desmume, and several GB for the nds files.
</li><li> 128 MB 3D Video Card (Nvidia GeForce 6800 or better), ATI cards are not recommended.
</li><li> Optional: Sound Card, if you want sound support
</li><li> Optional: Microphone, if you wish to make use the Windows Microphone feature
</li></ul>
<a name="What_are_the_recommended_hardware_requirements_for_desmume_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=29" title="Edit section: What are the recommended hardware requirements for desmume&nbsp;?">edit</a>]</span> <span class="mw-headline"> What are the recommended hardware requirements for desmume&nbsp;? </span></h3>
<p>From a purely technical viewpoint, there are no recommended requirements. However, for 'real-world' playable speeds, the following gives you good performance:
</p>
<ul><li> Windows OS: Windows XP or Vista
</li><li> Linux OS: Any recent Linux distribution with a 2.6 kernel.
</li><li> 3 GHz Processor
</li><li> 1 GB Available System Memory
</li><li> Available Hard Drive Space: A few MB for desmume, and lots of GB's for the nds files.
</li><li> 512 MB 3D Video Card (Nvidia GeForce), ATI cards are not recommended.
</li><li> Sound Card.
</li><li> Microphone.
</li></ul>
<a name="Does_desmume_support_wifi_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=30" title="Edit section: Does desmume support wifi&nbsp;?">edit</a>]</span> <span class="mw-headline"> Does desmume support wifi&nbsp;? </span></h3>
<p>Wifi is not supported. It is currently under slow and incomplete development. Therefore, you may find this option missing, or simply 'greyed-out' for now. Also, since WIFI support does not work yet, don't ask any questions about it's functioning because it still is unfinished and does not work yet. Furthermore, current development activities focus mainly on the Windows build.
</p>
<a name="Why_do_I_get_an_assert_in_wifi.cpp_which_keeps_me_from_playing_a_game.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=31" title="Edit section: Why do I get an assert in wifi.cpp which keeps me from playing a game?">edit</a>]</span> <span class="mw-headline"> Why do I get an assert in wifi.cpp which keeps me from playing a game? </span></h3>
<p>This was a glitch in 0.9.2 release. The download package has been replaced. Download it again and check the changelog to see if you have the fixed version.
</p>
<a name="OK.2C_then_why_does_it_make_my_firewall_alert_since_0.9.2_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=32" title="Edit section: OK, then why does it make my firewall alert since 0.9.2&nbsp;?">edit</a>]</span> <span class="mw-headline"> OK, then why does it make my firewall alert since 0.9.2&nbsp;? </span></h3>
<p>Your firewall is stupid, or winsock is stupid, (I am not sure which yet) for alerting just when winsock gets initialized. The emulator hasnt actually tried to connect to the internet yet. How could it? There isn't any wifi. All we are doing is some network initialization code. For those of you who are still not satisfied, then I will admit that there is actually some wifi code--but it doesnt actually do anything yet! Except alert your firewall. Sorry. Also, maybe that is actually a good, unobtrusive time for firewalls to alert. But I am not sorry for calling them stupid. They are hyperactive crybabies.
</p>
<a name="Does_desmume_support_the_microphone_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=33" title="Edit section: Does desmume support the microphone&nbsp;?">edit</a>]</span> <span class="mw-headline"> Does desmume support the microphone&nbsp;? </span></h3>
<p>Yes, but only on the Windows port. You do have to have an actual microphone attached to your PC, though. And perhaps somewhat confusing, the Linux ports do report 'Microphone successfully initialized' on startup of the emulator - but currently this is just a piece of stub (dummy) code used only to correctly start the emulator.
</p>
<a name="Where_can_I_find_technical_details_on_the_Nintendo_DS_and_GBA_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=34" title="Edit section: Where can I find technical details on the Nintendo DS and GBA&nbsp;?">edit</a>]</span> <span class="mw-headline"> Where can I find technical details on the Nintendo DS and GBA&nbsp;? </span></h3>
<p><a href="http://nocash.emubase.de/gbatek.htm" class="external free" title="http://nocash.emubase.de/gbatek.htm" rel="nofollow">http://nocash.emubase.de/gbatek.htm</a>
</p>
<a name="Does_the_.27GBA_slot.27_option_let_me_play_GBA_games_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=35" title="Edit section: Does the 'GBA slot' option let me play GBA games&nbsp;?">edit</a>]</span> <span class="mw-headline"> Does the 'GBA slot' option let me play GBA games&nbsp;? </span></h3>
<p>No. A 'real' Nintendo DS can use the gba slot to play gba games, but desmume does not emulate this. But a 'real' Nintnedo DS can also use the gba slot to access gba roms and sram so that ds games can import savefiles, and that part is emulated by desmume. If you are looking for a Game Boy Advance (GBA) emulator, perhaps you can try mednafen or visualboy advance.
</p>
<a name="What_is_DLDI_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=36" title="Edit section: What is DLDI&nbsp;?">edit</a>]</span> <span class="mw-headline"> What is DLDI&nbsp;? </span></h3>
<p>let me give you an overview on DLDI. You should know that there are many various flash cartridges for DS. They use different file allocation systems, different storages, etc. They are used for launching homebrew. So to make one proram run on all cards. Youd have to write support for each and every card so that it worked for everyone. But none needs support for other cards than their
And then genial solution was found. There was an universal IO unit made thats just interface to IO operations. If you don't have a DS, why do you bother with desmume&nbsp;? You surely don't have bought any game to run on it. And compiled program does not know how to handle file system etc. And then user can append IO routines for his own card. “DLDI patch”. So, now when I have an M3 cart. I download rom, patch it with m3 DLDI patch. And it works on my cart. Say you had Supercard instead. Youd have to download very same rom and apply Supercart DLDI patch to it. DLDI patch is the same for all roms. So its easy for both developper and end user.
</p>
<a name="I_get_the_error:_Data_could_not_be_accessed._Turn_off_the_power_and_reinsert_the_DS_card."></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=37" title="Edit section: I get the error: Data could not be accessed. Turn off the power and reinsert the DS card.">edit</a>]</span> <span class="mw-headline"> I get the error: Data could not be accessed. Turn off the power and reinsert the DS card. </span></h3>
<p>The automatic savetype detection probably failed to detect the correct savetype, and you have to set it manually to the correct type. If you are lucky, information about your game (and the corresponding savetype) can be found on a website such as <a href="http://www.advanscene.com/" class="external free" title="http://www.advanscene.com/" rel="nofollow">http://www.advanscene.com/</a>. And if you're not as lucky, you'll just have to try them all out until you find the correct type.
</p>
<a name="How_can_I_post_a_screenshot_file_on_the_desmume_forum_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=38" title="Edit section: How can I post a screenshot file on the desmume forum&nbsp;?">edit</a>]</span> <span class="mw-headline"> How can I post a screenshot file on the desmume forum&nbsp;? </span></h3>
<p>You can create a screenshot, and then upload it to a free external service provider like ImageShack (<a href="http://imageshack.us/" class="external free" title="http://imageshack.us/" rel="nofollow">http://imageshack.us/</a>), and then put the provided links to the page in the message you post on the forum.
</p>
<a name="How_can_I_post_a_savefile_or_avi_capture_on_the_desmume_forum_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=39" title="Edit section: How can I post a savefile or avi capture on the desmume forum&nbsp;?">edit</a>]</span> <span class="mw-headline"> How can I post a savefile or avi capture on the desmume forum&nbsp;? </span></h3>
<p>After you created it, yo can upload it to a free external service provider like MediaFire (<a href="http://www.mediafire.com/" class="external free" title="http://www.mediafire.com/" rel="nofollow">http://www.mediafire.com/</a>), and then put the provided links to the page in the message you post on the forum.
</p>
<a name="How_can_I_post_a_large_log_or_other_text_file_on_the_desmume_IRC_chat_room_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=40" title="Edit section: How can I post a large log or other text file on the desmume IRC chat room&nbsp;?">edit</a>]</span> <span class="mw-headline"> How can I post a large log or other text file on the desmume IRC chat room&nbsp;? </span></h3>
<p>Make use of the external service provider 'pastebin' (<a href="http://pastebin.com/" class="external free" title="http://pastebin.com/" rel="nofollow">http://pastebin.com/</a>), and post the url to it on the IRC channel.
</p>
<a name="My_display_is_incorrect_or_corrupted"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=41" title="Edit section: My display is incorrect or corrupted">edit</a>]</span> <span class="mw-headline"> My display is incorrect or corrupted </span></h3>
<p>Try switching the 3D Renderer from opengl or SoftRasterizer, or vice versa, to see if that resolves the bug. In windows, the default hotkey to do this quickly is numpad minus.
</p>
<a name="What_are_the_origins_of_DeSmuME_.3F"></a><h3><span class="editsection">[<a href="/index.php?title=Faq&amp;action=edit&amp;section=42" title="Edit section: What are the origins of DeSmuME&nbsp;?">edit</a>]</span> <span class="mw-headline"> What are the origins of DeSmuME&nbsp;? </span></h3>
<p>DeSmuME is a freeware emulator for the Nintendo DS created by YopYop156.
</p><p>Due to change in French laws regarding emulation YopYop has decided to stop development of DeSmuME Nintendo DS emulator but that doesn't mean that DeSmuME is obsolete - programmers in this project have picked up where Yopyop left off. The original website was <a href="http://yopyop156.ifrance.com/" class="external free" title="http://yopyop156.ifrance.com/" rel="nofollow">http://yopyop156.ifrance.com/</a>.
</p><p>Yopyop said:
</p>
<dl><dd>Its release under GPL. I have just removed the new 3D engine because its too much bugged. Hopefully it will be helpful for some of you.
</dd></dl>
<p><br />
The latest statement heard from yopyop was&nbsp;:
</p>
<dl><dd>DeSmuMe project is over.
</dd><dd>You may dont know but there are a new law in France that could put me in big trouble.
</dd><dd>With DeSmuMe, I have closed the doors of game company but I can not offer to pay for it.
</dd></dl>
<dl><dd>The worst thing is that I have found the bad coded instructions.
</dd><dd>For those how have download the sources you have to look in sbc, rsbc instructions the Carry flag updating is wrong.
</dd><dd>Sorry for the home brew programmers.
</dd></dl>
<dl><dd>For the illegality the demonstration seemed to me convincing thus without proof clarify I prefer to stick to this decision.
</dd></dl>
<dl><dd>It is also the fact that few people seem interested by the project. Put besides some people who sent demonstrations to me which did not go, I received only malls to wonder to make function such or such plays or to ask me why moved is in French .
</dd><dd>Thus I will not do something of useless and illegal.
</dd></dl>
<dl><dd>For the site it would not obstruct me if there were not the bond on the left which does nothing but add to confusion on the goal of the project.
</dd></dl>
<dl><dd>And for the sources it is the same problem as for the project.
</dd></dl>
<dl><dd>good week end
</dd></dl>
<dl><dd>yopyop
</dd></dl>
<dl><dd>edit the law relates to the royalties and the rights close, not?
</dd></dl>
<!--
NewPP limit report
Preprocessor node count: 43/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Expensive parser function count: 0/100
-->
<!-- Saved in parser cache with key desmume_wiki:pcache:idhash:15-0!1!0!!en!2 and timestamp 20090420180441 -->
<div class="printfooter">
Retrieved from "<a href="http://wiki.desmume.org/index.php?title=Faq">http://wiki.desmume.org/index.php?title=Faq</a>"</div>
<!-- end content -->
<div class="visualClear"></div>
</div>
</div>
</div>
<div id="column-one">
<div id="p-cactions" class="portlet">
<h5>Views</h5>
<div class="pBody">
<ul>
<li id="ca-nstab-main" class="selected"><a href="/index.php?title=Faq" title="View the content page [c]" accesskey="c">Page</a></li>
<li id="ca-talk" class="new"><a href="/index.php?title=Talk:Faq&amp;action=edit" title="Discussion about the content page [t]" accesskey="t">Discussion</a></li>
<li id="ca-edit"><a href="/index.php?title=Faq&amp;action=edit" title="You can edit this page.&#10;Please use the preview button before saving. [e]" accesskey="e">Edit</a></li>
<li id="ca-history"><a href="/index.php?title=Faq&amp;action=history" title="Past versions of this page. [h]" accesskey="h">History</a></li> </ul>
</div>
</div>
<div class="portlet" id="p-personal">
<h5>Personal tools</h5>
<div class="pBody">
<ul>
<li id="pt-login"><a href="/index.php?title=Special:UserLogin&amp;returnto=Faq" title="You are encouraged to log in, it is not mandatory however. [o]" accesskey="o">Log in / create account</a></li>
</ul>
</div>
</div>
<div class="portlet" id="p-logo">
<a style="background-image: url(http://wiki.desmume.org/desmume-135.png);" href="/index.php?title=Main_Page" title="Visit the Main Page [z]" accesskey="z"></a>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
<div class='generated-sidebar portlet' id='p-navigation'>
<h5>Navigation</h5>
<div class='pBody'>
<ul>
<li id="n-mainpage-description"><a href="/index.php?title=Main_Page">Main Page</a></li>
<li id="n-portal"><a href="/index.php?title=DeSmuME:Community_Portal" title="About the project, what you can do, where to find things">Community portal</a></li>
<li id="n-currentevents"><a href="/index.php?title=DeSmuME:Current_events" title="Find background information on current events">Current events</a></li>
<li id="n-recentchanges"><a href="/index.php?title=Special:RecentChanges" title="The list of recent changes in the wiki. [r]" accesskey="r">Recent changes</a></li>
<li id="n-randompage"><a href="/index.php?title=Special:Random" title="Load a random page [x]" accesskey="x">Random page</a></li>
<li id="n-help"><a href="/index.php?title=Help:Contents" title="The place to find out.">Help</a></li>
</ul>
</div>
</div>
<div id="p-search" class="portlet">
<h5><label for="searchInput">Search</label></h5>
<div id="searchBody" class="pBody">
<form action="/index.php?title=Special:Search" id="searchform"><div>
<input id="searchInput" name="search" type="text" title="Search DeSmuME [f]" accesskey="f" value="" />
<input type='submit' name="go" class="searchButton" id="searchGoButton" value="Go" title="Go to a page with this exact name if exists" />&nbsp;
<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="Search" title="Search the pages for this text" />
</div></form>
</div>
</div>
<div class="portlet" id="p-tb">
<h5>Toolbox</h5>
<div class="pBody">
<ul>
<li id="t-whatlinkshere"><a href="/index.php?title=Special:WhatLinksHere/Faq" title="List of all wiki pages that link here [j]" accesskey="j">What links here</a></li>
<li id="t-recentchangeslinked"><a href="/index.php?title=Special:RecentChangesLinked/Faq" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li>
<li id="t-specialpages"><a href="/index.php?title=Special:SpecialPages" title="List of all special pages [q]" accesskey="q">Special pages</a></li>
<li id="t-print"><a href="/index.php?title=Faq&amp;printable=yes" title="Printable version of this page [p]" accesskey="p">Printable version</a></li> <li id="t-permalink"><a href="/index.php?title=Faq&amp;oldid=969" title="Permanent link to this version of the page">Permanent link</a></li> </ul>
</div>
</div>
</div><!-- end of the left (by default at least) column -->
<div class="visualClear"></div>
<div id="footer">
<div id="f-poweredbyico"><a href="http://www.mediawiki.org/"><img src="/skins/common/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" /></a></div>
<ul id="f-list">
<li id="lastmod"> This page was last modified on 19 April 2009, at 18:04.</li>
<li id="viewcount">This page has been accessed 3,053 times.</li>
<li id="privacy"><a href="/index.php?title=DeSmuME:Privacy_policy" title="DeSmuME:Privacy policy">Privacy policy</a></li>
<li id="about"><a href="/index.php?title=DeSmuME:About" title="DeSmuME:About">About DeSmuME</a></li>
<li id="disclaimer"><a href="/index.php?title=DeSmuME:General_disclaimer" title="DeSmuME:General disclaimer">Disclaimers</a></li>
</ul>
</div>
</div>
<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
<!-- Served in 0.524 secs. --><script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-2128197-6");
pageTracker._trackPageview();
} catch(err) {}</script>
</body></html>

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DeSmuME_VS2005", "DeSmuME_2005.vcproj", "{9F5F72A1-D3A5-4918-B460-E076B16D10A9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.ActiveCfg = Debug|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.Build.0 = Debug|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.ActiveCfg = Release|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -1,20 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual C++ Express 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DeSmuME_VS2008", "DeSmuME_2008.vcproj", "{9F5F72A1-D3A5-4918-B460-E076B16D10A9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.ActiveCfg = Debug|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Debug|Win32.Build.0 = Debug|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.ActiveCfg = Release|Win32
{9F5F72A1-D3A5-4918-B460-E076B16D10A9}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -1,6 +0,0 @@
#ifndef _CONFIG_H
#define _CONFIG_H
#include "userconfig.h"
#endif

View File

@ -1,12 +0,0 @@
#ifndef _USERCONFIG_H
#define _USERCONFIG_H
//this is a default file. it should not be edited, or else you will mess up the defaults.
//to customize your build, place a customized copy in the userconfig directory
//(alongside this defaultconfig directory)
//#define NOSSE2 //disables SSE2 optimizations (better change it in the vc++ codegen options too)
//#define DEVELOPER //enables dev+ features
#endif //_USERCONFIG_H

View File

@ -11,7 +11,7 @@ struct ALIGN(16) ARM9_struct {
u8 ARM9_REG[0x1000000];
u8 ARM9_BIOS[0x8000];
u8 ARM9_VMEM[0x800];
u8 ARM9_LCD[0xA4000+0x4000]; //an extra 16KB for blank memory
u8 ARM9_LCD[0xA4000];
u8 ARM9_OAM[0x800];
u8* ExtPal[2][4];

View File

@ -3743,7 +3743,7 @@ static char * OP_BLX(u32 adr, u32 i, char * txt)
static char * OP_BL_10(u32 adr, u32 i, char * txt)
{
part = adr+4 + (SIGNEEXT_IMM11(i)<<12);
sprintf(txt, "calculating high part of the address");
sprintf(txt, "CALCUL LA PARTIE HAUTE DE L'ADRESSE");
return txt;
}

File diff suppressed because it is too large Load Diff

View File

@ -402,7 +402,7 @@ void register_gl_fun(fun_gl_Begin beg,fun_gl_End end);
#define ADDRESS_STEP_8KB 0x02000
#define ADDRESS_STEP_16KB 0x04000
#define ADDRESS_STEP_32KB 0x08000
#define ADDRESS_STEP_64KB 0x10000
#define ADDRESS_STEP_64kB 0x10000
#define ADDRESS_STEP_128KB 0x20000
#define ADDRESS_STEP_256KB 0x40000
#define ADDRESS_STEP_512KB 0x80000
@ -533,7 +533,7 @@ typedef struct
/*12*/ unsigned PaletteIndex:4;
/*10*/ unsigned Priority:2;
// attr3
unsigned attr3:16;
unsigned attr3:16;
#else
// attr0
/* 0*/ unsigned Y:8;
@ -559,24 +559,14 @@ typedef struct
typedef struct
{
#ifdef WORDS_BIGENDIAN
u8 attr00;
u8 attr01;
u8 attr10;
u8 attr11;
u8 attr20;
u8 attr21;
u8 attr30;
u8 attr31;
#else
u16 attr0;
u16 attr1;
u16 attr2;
u16 attr3;
#endif
} OAM;
typedef struct
{
s16 x;
@ -608,21 +598,12 @@ typedef struct
extern CACHE_ALIGN u8 gpuBlendTable555[17][17][32][32];
enum BGType {
BGType_Invalid=0, BGType_Text=1, BGType_Affine=2, BGType_Large8bpp=3,
BGType_AffineExt=4, BGType_AffineExt_256x16=5, BGType_AffineExt_256x1=6, BGType_AffineExt_Direct=7
};
struct GPU
{
// some structs are becoming redundant
// some functions too (no need to recopy some vars as it is done by MMU)
REG_DISPx * dispx_st;
_BGxCNT & bgcnt(int num) { return (dispx_st)->dispx_BGxCNT[num].bits; }
_DISPCNT & dispCnt() { return dispx_st->dispx_DISPCNT.bits; }
void modeRender(int layer);
DISPCAPCNT dispCapCnt;
BOOL LayersEnable[5];
itemsForPriority_t itemsForPriority[NB_PRIORITIES];
@ -630,14 +611,12 @@ struct GPU
#define BGBmpBB BG_bmp_ram
#define BGChBB BG_tile_ram
u32 BG_bmp_large_ram[4];
u32 BG_bmp_ram[4];
u32 BG_tile_ram[4];
u32 BG_map_ram[4];
u8 BGExtPalSlot[4];
u32 BGSize[4][2];
BGType BGTypes[4];
struct MosaicColor {
u16 bg[4][256];
@ -716,9 +695,6 @@ struct GPU
bool blend1;
u8* currDst;
u16* _3dColorLine;
u8* _3dAlphaLine;
static struct MosaicLookup {
@ -745,12 +721,11 @@ struct GPU
u16 blend(u16 colA, u16 colB);
typedef void (*FinalOBJColFunct)(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u8 type, u16 x);
typedef void (*Final3DColFunct)(GPU *gpu, int dstX, int srcX);
typedef void (*Final3DColFunct)(GPU *gpu, u32 passing, u8 *dst, u16 color, u8 alpha, u16 x);
int setFinalColorBck_funcNum;
int setFinalColor3d_funcNum;
FinalOBJColFunct setFinalColorSpr;
//Final3DColFunct setFinalColor3D;
Final3DColFunct setFinalColor3D;
enum SpriteRenderMode {
SPRITE_1D, SPRITE_2D
} spriteRenderMode;
@ -760,8 +735,6 @@ struct GPU
void spriteRender(u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab);
void setFinalColorBG(u16 color, u8 x);
void setFinalColor3d(int dstX, int srcX);
FORCEINLINE void setFinalBGColorSpecialNone(u16 color, u8 x, bool blend1);
FORCEINLINE void setFinalBGColorSpecialBlend(u16 color, u8 x, bool blend1);
FORCEINLINE void setFinalBGColorSpecialIncrease(u16 color, u8 x, bool blend1);
@ -770,22 +743,9 @@ struct GPU
FORCEINLINE void setFinalBGColorSpecialBlendWnd(u16 color, u8 x, bool blend1);
FORCEINLINE void setFinalBGColorSpecialIncreaseWnd(u16 color, u8 x, bool blend1);
FORCEINLINE void setFinalBGColorSpecialDecreaseWnd(u16 color, u8 x, bool blend1);
FORCEINLINE void setFinal3DColorSpecialNone(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialBlend(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialIncrease(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialDecrease(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialNoneWnd(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialBlendWnd(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialIncreaseWnd(int dstX, int srcX);
FORCEINLINE void setFinal3DColorSpecialDecreaseWnd(int dstX, int srcX);
void __setFinalColorBck(u16 color, u8 x, bool opaque);
void setAffineStart(int layer, int xy, u32 val);
void setAffineStartWord(int layer, int xy, u16 val, int word);
u32 getAffineStart(int layer, int xy);
void refreshAffineStartRegs();
struct AffineInfo {
AffineInfo() : x(0), y(0) {}
@ -864,7 +824,9 @@ namespace GPU_EXT
void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab);
void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * dst_alpha, u8 * typeTab, u8 * prioTab);
extern const short sizeTab[4][4][2];
extern const size sprSizeTab[4][4];
extern const s8 mode2type[8][4];
typedef struct {
GPU * gpu;
@ -887,7 +849,7 @@ extern MMU_struct MMU;
#define GFXCORE_FULLSCREEN (1 << 0)
struct GraphicsInterface_struct
typedef struct
{
int id; // ID number for core(see above defines)
const char *Name; // Name of core
@ -896,7 +858,7 @@ struct GraphicsInterface_struct
void (*DeInit)(); // Deinitializes stuff related to core
void (*Resize)(int width, int height, BOOL fullscreen); // Resizes window or fullscreen
void (*OnScreenText)(char *string, ...); // For handling save state messages, etc.
} ;
} GraphicsInterface_struct;
extern GraphicsInterface_struct GFXDummy;
@ -917,46 +879,43 @@ void GPU_set_DISPCAPCNT(u32 val) ;
void GPU_ligne(NDS_Screen * screen, u16 l) ;
void GPU_setMasterBrightness (GPU *gpu, u16 val);
inline void GPU_setWIN0_H(GPU* gpu, u16 val) { gpu->WIN0H0 = val >> 8; gpu->WIN0H1 = val&0xFF; gpu->need_update_winh[0] = true; }
inline void GPU_setWIN0_H0(GPU* gpu, u8 val) { gpu->WIN0H0 = val; gpu->need_update_winh[0] = true; }
inline void GPU_setWIN0_H1(GPU* gpu, u8 val) { gpu->WIN0H1 = val; gpu->need_update_winh[0] = true; }
#define GPU_setWIN0_H(gpu, val) {gpu->WIN0H0 = val >> 8; gpu->WIN0H1 = val&0xFF; gpu->need_update_winh[0] = true; }
#define GPU_setWIN0_H0(gpu, val) { gpu->WIN0H0 = val; gpu->need_update_winh[0] = true; }
#define GPU_setWIN0_H1(gpu, val) { gpu->WIN0H1 = val; gpu->need_update_winh[0] = true; }
inline void GPU_setWIN0_V(GPU* gpu, u16 val) { gpu->WIN0V0 = val >> 8; gpu->WIN0V1 = val&0xFF;}
inline void GPU_setWIN0_V0(GPU* gpu, u8 val) { gpu->WIN0V0 = val; }
inline void GPU_setWIN0_V1(GPU* gpu, u8 val) { gpu->WIN0V1 = val; }
#define GPU_setWIN0_V(gpu, val) {gpu->WIN0V0 = val >> 8; gpu->WIN0V1 = val&0xFF;}
#define GPU_setWIN0_V0(gpu, val) gpu->WIN0V0 = val
#define GPU_setWIN0_V1(gpu, val) gpu->WIN0V1 = val
inline void GPU_setWIN1_H(GPU* gpu, u16 val) {gpu->WIN1H0 = val >> 8; gpu->WIN1H1 = val&0xFF; gpu->need_update_winh[1] = true; }
inline void GPU_setWIN1_H0(GPU* gpu, u8 val) { gpu->WIN1H0 = val; gpu->need_update_winh[1] = true; }
inline void GPU_setWIN1_H1(GPU* gpu, u8 val) { gpu->WIN1H1 = val; gpu->need_update_winh[1] = true; }
#define GPU_setWIN1_H(gpu, val) {gpu->WIN1H0 = val >> 8; gpu->WIN1H1 = val&0xFF; gpu->need_update_winh[1] = true; }
#define GPU_setWIN1_H0(gpu, val) { gpu->WIN1H0 = val; gpu->need_update_winh[1] = true; }
#define GPU_setWIN1_H1(gpu, val) { gpu->WIN1H1 = val; gpu->need_update_winh[1] = true; }
inline void GPU_setWIN1_V(GPU* gpu, u16 val) { gpu->WIN1V0 = val >> 8; gpu->WIN1V1 = val&0xFF; }
inline void GPU_setWIN1_V0(GPU* gpu, u8 val) { gpu->WIN1V0 = val; }
inline void GPU_setWIN1_V1(GPU* gpu, u8 val) { gpu->WIN1V1 = val; }
#define GPU_setWIN1_V(gpu, val) {gpu->WIN1V0 = val >> 8; gpu->WIN1V1 = val&0xFF;}
#define GPU_setWIN1_V0(gpu, val) gpu->WIN1V0 = val
#define GPU_setWIN1_V1(gpu, val) gpu->WIN1V1 = val
inline void GPU_setWININ(GPU* gpu, u16 val) {
gpu->WININ0=val&0x1F;
gpu->WININ0_SPECIAL=(val>>5)&1;
gpu->WININ1=(val>>8)&0x1F;
gpu->WININ1_SPECIAL=(val>>13)&1;
}
#define GPU_setWININ(gpu, val) {gpu->WININ0=val&0x1F;\
gpu->WININ0_SPECIAL=(val>>5)&1;\
gpu->WININ1=(val>>8)&0x1F;\
gpu->WININ1_SPECIAL=(val>>13)&1;\
}
#define GPU_setWININ0(gpu, val) {gpu->WININ0 = val&0x1F; gpu->WININ0_SPECIAL = (val>>5)&1;}
#define GPU_setWININ1(gpu, val) {gpu->WININ1 = val&0x1F; gpu->WININ1_SPECIAL = (val>>5)&1;}
inline void GPU_setWININ0(GPU* gpu, u8 val) { gpu->WININ0 = val&0x1F; gpu->WININ0_SPECIAL = (val>>5)&1; }
inline void GPU_setWININ1(GPU* gpu, u8 val) { gpu->WININ1 = val&0x1F; gpu->WININ1_SPECIAL = (val>>5)&1; }
inline void GPU_setWINOUT16(GPU* gpu, u16 val) {
gpu->WINOUT=val&0x1F;
gpu->WINOUT_SPECIAL=(val>>5)&1;
gpu->WINOBJ=(val>>8)&0x1F;
gpu->WINOBJ_SPECIAL=(val>>13)&1;
}
inline void GPU_setWINOUT(GPU* gpu, u8 val) { gpu->WINOUT = val&0x1F; gpu->WINOUT_SPECIAL = (val>>5)&1; }
inline void GPU_setWINOBJ(GPU* gpu, u8 val) { gpu->WINOBJ = val&0x1F; gpu->WINOBJ_SPECIAL = (val>>5)&1; }
#define GPU_setWINOUT16(gpu, val) { gpu->WINOUT=val&0x1F;\
gpu->WINOUT_SPECIAL=(val>>5)&1;\
gpu->WINOBJ=(val>>8)&0x1F;\
gpu->WINOBJ_SPECIAL=(val>>13)&1;\
}
#define GPU_setWINOUT(gpu, val) {gpu->WINOUT = val&0x1F; gpu->WINOUT_SPECIAL = (val>>5)&1;}
#define GPU_setWINOBJ(gpu, val) {gpu->WINOBJ = val&0x1F; gpu->WINOBJ_SPECIAL = (val>>5)&1;}
// Blending
void SetupFinalPixelBlitter (GPU *gpu);
#define GPU_setBLDCNT_LOW(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF00) | (val); SetupFinalPixelBlitter (gpu);}
#define GPU_setBLDCNT_LOW(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF00) | val; SetupFinalPixelBlitter (gpu);}
#define GPU_setBLDCNT_HIGH(gpu, val) {gpu->BLDCNT = (gpu->BLDCNT&0xFF) | (val<<8); SetupFinalPixelBlitter (gpu);}
#define GPU_setBLDCNT(gpu, val) {gpu->BLDCNT = (val); SetupFinalPixelBlitter (gpu);}
#define GPU_setBLDCNT(gpu, val) {gpu->BLDCNT = val; SetupFinalPixelBlitter (gpu);}

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,7 @@
/* theses ones for reading in rom data */
#define ROM_8(m, a) (((u8*)(m))[(a)])
typedef const u8 TWaitState;
typedef const u32 TWaitState;
struct MMU_struct {
//ARM7 mem
@ -80,8 +80,8 @@ struct MMU_struct {
u8 ARM9_RW_MODE;
static CACHE_ALIGN TWaitState MMU_WAIT16[2][16];
static CACHE_ALIGN TWaitState MMU_WAIT32[2][16];
static TWaitState MMU_WAIT16[2][16];
static TWaitState MMU_WAIT32[2][16];
u32 DTCMRegion;
u32 ITCMRegion;
@ -175,57 +175,21 @@ void FASTCALL MMU_write32(u32 proc, u32 adr, u32 val);
template<int PROCNUM> void FASTCALL MMU_doDMA(u32 num);
//The base ARM memory interfaces
/*
* The base ARM memory interfaces
*/
extern struct armcpu_memory_iface arm9_base_memory_iface;
extern struct armcpu_memory_iface arm7_base_memory_iface;
extern struct armcpu_memory_iface arm9_direct_memory_iface;
extern u8 *MMU_RenderMapToLCD(u32 vram_addr);
#define VRAM_ARM9_PAGES 512
extern u8 vram_arm9_map[VRAM_ARM9_PAGES];
FORCEINLINE void* MMU_gpu_map(u32 vram_addr)
{
//THIS FUNCTION IS NOT AS DANGEROUS!
//as an alternative to the above, use this:
//it is supposed to map a single gpu vram address to emulator host memory
//but it returns a pointer to some zero memory in case of accesses to unmapped memory.
//this correctly handles the case with tile accesses to unmapped memory.
//it could also potentially go through a different LUT than vram_arm9_map in case we discover
//that it needs to be set up with different or no mirroring
//(I think it is a reasonable possibility that only the cpu has the nutty mirroring rules)
//
//if this system isn't used, Fantasy Aquarium displays garbage in the first ingame screen
//due to it storing 0x0F0F or somesuch in screen memory which points to a ridiculously big tile
//which should contain all 0 pixels
u32 vram_page = (vram_addr>>14)&(VRAM_ARM9_PAGES-1);
u32 ofs = vram_addr & 0x3FFF;
vram_page = vram_arm9_map[vram_page];
//blank pages are handled by the extra 16KB of blank memory at the end of ARM9_LCD
//and the fact that blank pages are mapped to appear at that location
return ARM9Mem.ARM9_LCD + (vram_page<<14) + ofs;
}
enum MMU_ACCESS_TYPE
{
MMU_AT_CODE, MMU_AT_DATA, MMU_AT_GPU
};
template<int PROCNUM, MMU_ACCESS_TYPE AT> u8 _MMU_read08(u32 addr);
template<int PROCNUM, MMU_ACCESS_TYPE AT> u16 _MMU_read16(u32 addr);
template<int PROCNUM, MMU_ACCESS_TYPE AT> u32 _MMU_read32(u32 addr);
template<int PROCNUM, MMU_ACCESS_TYPE AT> void _MMU_write08(u32 addr, u8 val);
template<int PROCNUM, MMU_ACCESS_TYPE AT> void _MMU_write16(u32 addr, u16 val);
template<int PROCNUM, MMU_ACCESS_TYPE AT> void _MMU_write32(u32 addr, u32 val);
template<int PROCNUM> u8 _MMU_read08(u32 addr) { return _MMU_read08<PROCNUM, MMU_AT_DATA>(addr); }
template<int PROCNUM> u16 _MMU_read16(u32 addr) { return _MMU_read16<PROCNUM, MMU_AT_DATA>(addr); }
template<int PROCNUM> u32 _MMU_read32(u32 addr) { return _MMU_read32<PROCNUM, MMU_AT_DATA>(addr); }
template<int PROCNUM> void _MMU_write08(u32 addr, u8 val) { _MMU_write08<PROCNUM, MMU_AT_DATA>(addr,val); }
template<int PROCNUM> void _MMU_write16(u32 addr, u16 val) { _MMU_write16<PROCNUM, MMU_AT_DATA>(addr,val); }
template<int PROCNUM> void _MMU_write32(u32 addr, u32 val) { _MMU_write32<PROCNUM, MMU_AT_DATA>(addr,val); }
template<int PROCNUM> u8 _MMU_read08(u32 addr);
template<int PROCNUM> u16 _MMU_read16(u32 addr);
template<int PROCNUM> u32 _MMU_read32(u32 addr);
template<int PROCNUM> void _MMU_write08(u32 addr, u8 val);
template<int PROCNUM> void _MMU_write16(u32 addr, u16 val);
template<int PROCNUM> void _MMU_write32(u32 addr, u32 val);
void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val);
void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val);
@ -247,13 +211,7 @@ inline void SetupMMU(bool debugConsole) {
else _MMU_MAIN_MEM_MASK = 0x3FFFFF;
}
//TODO: at one point some of the early access code included this. consider re-adding it
//ARM7 private memory
//if ( (adr & 0x0f800000) == 0x03800000) {
//T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][(adr >> 20) & 0xFF],
// adr & MMU.MMU_MASK[ARMCPU_ARM7][(adr >> 20) & 0xFF]);
FORCEINLINE u8 _MMU_read08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr) {
FORCEINLINE u8 _MMU_read08(const int PROCNUM, u32 addr) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -268,20 +226,7 @@ FORCEINLINE u8 _MMU_read08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u3
else return _MMU_ARM7_read08(addr);
}
FORCEINLINE u16 _MMU_read16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr) {
//special handling for execution from arm9, since we spend so much time in there
if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE)
{
if ((addr & 0x0F000000) == 0x02000000)
return T1ReadWord( ARM9Mem.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK);
if(addr<0x02000000)
return T1ReadWord(ARM9Mem.ARM9_ITCM, addr&0x7FFF);
goto dunno;
}
FORCEINLINE u16 _MMU_read16(const int PROCNUM, u32 addr) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -292,26 +237,11 @@ FORCEINLINE u16 _MMU_read16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u
if ( (addr & 0x0F000000) == 0x02000000)
return T1ReadWord( ARM9Mem.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK);
dunno:
if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read16(addr);
else return _MMU_ARM7_read16(addr);
}
FORCEINLINE u32 _MMU_read32(int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr) {
//special handling for execution from arm9, since we spend so much time in there
if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE)
{
if ( (addr & 0x0F000000) == 0x02000000)
return T1ReadLong( ARM9Mem.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK);
if(addr<0x02000000)
return T1ReadLong(ARM9Mem.ARM9_ITCM, addr&0x7FFF);
goto dunno;
}
//for other cases, we have to check from dtcm first because it is patched on top of the main memory range
FORCEINLINE u32 _MMU_read32(int PROCNUM, u32 addr) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -322,12 +252,11 @@ FORCEINLINE u32 _MMU_read32(int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 add
if ( (addr & 0x0F000000) == 0x02000000)
return T1ReadLong( ARM9Mem.MAIN_MEM, addr & _MMU_MAIN_MEM_MASK);
dunno:
if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read32(addr);
else return _MMU_ARM7_read32(addr);
}
FORCEINLINE void _MMU_write08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr, u8 val) {
FORCEINLINE void _MMU_write08(const int PROCNUM, u32 addr, u8 val) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -344,7 +273,7 @@ FORCEINLINE void _MMU_write08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
else _MMU_ARM7_write08(addr,val);
}
FORCEINLINE void _MMU_write16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr, u16 val) {
FORCEINLINE void _MMU_write16(const int PROCNUM, u32 addr, u16 val) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -361,7 +290,7 @@ FORCEINLINE void _MMU_write16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
else _MMU_ARM7_write16(addr,val);
}
FORCEINLINE void _MMU_write32(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u32 addr, u32 val) {
FORCEINLINE void _MMU_write32(const int PROCNUM, u32 addr, u32 val) {
if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{
@ -391,8 +320,8 @@ FORCEINLINE void _MMU_write32(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
#define MMU_write16_acl(proc, adr, val) _MMU_write16<proc>(adr, val)
#define MMU_write32_acl(proc, adr, val) _MMU_write32<proc>(adr, val)
#define MMU_read8_acl(proc,adr,access) _MMU_read08<proc>(adr)
#define MMU_read16_acl(proc,adr,access) ((access==CP15_ACCESS_EXECUTE)?_MMU_read16<proc,MMU_AT_CODE>(adr):_MMU_read16<proc,MMU_AT_DATA>(adr))
#define MMU_read32_acl(proc,adr,access) ((access==CP15_ACCESS_EXECUTE)?_MMU_read32<proc,MMU_AT_CODE>(adr):_MMU_read32<proc,MMU_AT_DATA>(adr))
#define MMU_read16_acl(proc,adr,access) _MMU_read16<proc>(adr)
#define MMU_read32_acl(proc,adr,access) _MMU_read32<proc>(adr)
#endif
// Use this macros for reading/writing, so the GDB stub isn't broken
@ -412,23 +341,23 @@ FORCEINLINE void _MMU_write32(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
#define WRITE8(a,b,c) _MMU_write08<PROCNUM>(b, c)
#endif
template<int PROCNUM, MMU_ACCESS_TYPE AT>
u8 _MMU_read08(u32 addr) { return _MMU_read08(PROCNUM, AT, addr); }
template<int PROCNUM>
u8 _MMU_read08(u32 addr) { return _MMU_read08(PROCNUM, addr); }
template<int PROCNUM, MMU_ACCESS_TYPE AT>
u16 _MMU_read16(u32 addr) { return _MMU_read16(PROCNUM, AT, addr); }
template<int PROCNUM>
u16 _MMU_read16(u32 addr) { return _MMU_read16(PROCNUM, addr); }
template<int PROCNUM, MMU_ACCESS_TYPE AT>
u32 _MMU_read32(u32 addr) { return _MMU_read32(PROCNUM, AT, addr); }
template<int PROCNUM>
u32 _MMU_read32(u32 addr) { return _MMU_read32(PROCNUM, addr); }
template<int PROCNUM, MMU_ACCESS_TYPE AT>
void _MMU_write08(u32 addr, u8 val) { _MMU_write08(PROCNUM, AT, addr, val); }
template<int PROCNUM>
void _MMU_write08(u32 addr, u8 val) { _MMU_write08(PROCNUM, addr, val); }
template<int PROCNUM, MMU_ACCESS_TYPE AT>
void _MMU_write16(u32 addr, u16 val) { _MMU_write16(PROCNUM, AT, addr, val); }
template<int PROCNUM>
void _MMU_write16(u32 addr, u16 val) { _MMU_write16(PROCNUM, addr, val); }
template<int PROCNUM, MMU_ACCESS_TYPE AT>
void _MMU_write32(u32 addr, u32 val) { _MMU_write32(PROCNUM, AT, addr, val); }
template<int PROCNUM>
void _MMU_write32(u32 addr, u32 val) { _MMU_write32(PROCNUM, addr, val); }
void FASTCALL MMU_DumpMemBlock(u8 proc, u32 address, u32 size, u8 *buffer);

View File

@ -854,7 +854,7 @@ void NDS_FreeROM(void)
MMU.bupmem.fp = NULL;
}
void NDS_Reset(BOOL resetBySavestate)
void NDS_Reset( void)
{
unsigned int i;
u32 src;
@ -1034,8 +1034,7 @@ void NDS_Reset(BOOL resetBySavestate)
gfx3d_reset();
gpu3D->NDS_3D_Reset();
SPU_Reset();
if (!resetBySavestate)
cheatsSearchClose();
cheatsSearchClose();
#ifdef EXPERIMENTAL_WIFI
WIFI_Init(&wifiMac);
@ -1815,7 +1814,7 @@ u32 NDS_exec(s32 nb)
if(MMU.DMAStartTime[1][3] == 1)
MMU_doDMA<ARMCPU_ARM7>(3);
}
else if(nds.VCount==214)
else if(nds.VCount==215)
{
gfx3d_VBlankEndSignal(false);
}

View File

@ -274,7 +274,7 @@ int NDS_LoadROM(const char *filename, int bmtype, u32 bmsize,
const char *cflash_disk_image_file);
#endif
void NDS_FreeROM(void);
void NDS_Reset(BOOL resetBySaveState = FALSE);
void NDS_Reset(void);
int NDS_ImportSave(const char *filename);
int NDS_WriteBMP(const char *filename);

View File

@ -75,15 +75,19 @@ static void ENDGL() {
#define CTASSERT(x) typedef char __assert ## y[(x) ? 1 : -1]
#endif
static ALIGN(16) u8 GPU_screen3D [256*192*4];
static ALIGN(16) u8 GPU_screen3D [256*192*4];
//static ALIGN(16) unsigned char GPU_screenStencil[256*256];
static const unsigned short map3d_cull[4] = {GL_FRONT_AND_BACK, GL_FRONT, GL_BACK, 0};
static const int texEnv[4] = { GL_MODULATE, GL_DECAL, GL_MODULATE, GL_MODULATE };
static const int depthFunc[2] = { GL_LESS, GL_EQUAL };
static bool needRefreshFramebuffer = false;
static bool validFramebuffer = false;
float clearAlpha;
//derived values extracted from polyattr etc
static bool wireframe=false, alpha31=false;
@ -470,6 +474,11 @@ static char OGLInit(void)
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); //clamp so that we dont run off the edges due to 1.0 -> [0,31] math
}
if(glBlendFuncSeparateEXT == NULL)
clearAlpha = 1;
else
clearAlpha = 0;
OGLReset();
ENDGL();
@ -527,7 +536,7 @@ static void setTexture(unsigned int format, unsigned int texpal)
}
TexCache_SetTexture<TexFormat_32bpp>(format, texpal);
TexCache_SetTexture(format, texpal);
}
@ -830,7 +839,6 @@ static void OGLVramReconfigureSignal()
TexCache_Invalidate();
}
static void GL_ReadFramebuffer()
{
if(!BEGINGL()) return;
@ -841,47 +849,141 @@ static void GL_ReadFramebuffer()
//convert the pixels to a different format which is more convenient
//is it safe to modify the screen buffer? if not, we could make a temp copy
for(int i=0,y=191;y>=0;y--)
{
u16* dst = gfx3d_convertedScreen + (y<<8);
u8* dstAlpha = gfx3d_convertedAlpha + (y<<8);
#ifndef NOSSE2
//I dont know much about this kind of stuff, but this seems to help
//for some reason I couldnt make the intrinsics work
u8* wanx = (u8*)&((u32*)GPU_screen3D)[i];
#define ASS(X,Y) __asm { prefetchnta [wanx+32*0x##X##Y] }
#define PUNK(X) ASS(X,0) ASS(X,1) ASS(X,2) ASS(X,3) ASS(X,4) ASS(X,5) ASS(X,6) ASS(X,7) ASS(X,8) ASS(X,9) ASS(X,A) ASS(X,B) ASS(X,C) ASS(X,D) ASS(X,E) ASS(X,F)
PUNK(0); PUNK(1);
#endif
for(int x=0;x<256;x++,i++)
{
u32 &u32screen3D = ((u32*)GPU_screen3D)[i];
u32screen3D>>=3;
u32screen3D &= 0x1F1F1F1F;
const int t = i<<2;
const u8 a = GPU_screen3D[t+3];
const u8 r = GPU_screen3D[t+2];
const u8 g = GPU_screen3D[t+1];
const u8 b = GPU_screen3D[t+0];
dst[x] = R5G5B5TORGB15(r,g,b) | alpha_lookup[a];
dstAlpha[x] = alpha_5bit_to_4bit[a];
}
for(int i=0;i<256*192;i++) {
u32 &u32screen3D = ((u32*)GPU_screen3D)[i];
u32screen3D>>=3;
u32screen3D &= 0x1F1F1F1F;
}
//debug: view depth buffer via color buffer for debugging
//int ctr=0;
//for(ctr=0;ctr<256*192;ctr++) {
// float zval = GPU_screen3Ddepth[ctr];
// u8* colorPtr = GPU_screen3D+ctr*3;
// if(zval<0) {
// colorPtr[0] = 255;
// colorPtr[1] = 0;
// colorPtr[2] = 0;
// } else if(zval>1) {
// colorPtr[0] = 0;
// colorPtr[1] = 0;
// colorPtr[2] = 255;
// } else {
// colorPtr[0] = colorPtr[1] = colorPtr[2] = zval*255;
// //INFO("%f %f %d\n",zval, zval*255,colorPtr[0]);
// }
//}
}
static void OGLCheckFresh()
static void OGLGetLineCaptured(int line, u16* dst)
{
if(needRefreshFramebuffer)
{
if(needRefreshFramebuffer) {
needRefreshFramebuffer = false;
GL_ReadFramebuffer();
}
u8 *screen3D = (u8*)GPU_screen3D+((191-line)<<10);
// u8 *screenStencil = (u8*)GPU_screenStencil+((191-line)<<8);
for(int i = 0; i < 256; i++)
{
/* u32 stencil = screenStencil[i];
if(!stencil)
{
dst[i] = 0x0000;
continue;
}*/
int t=i<<2;
/* u8 r = screen3D[t+2];
u8 g = screen3D[t+1];
u8 b = screen3D[t+0];*/
//if this math strikes you as wrong, be sure to look at GL_ReadFramebuffer() where the pixel format in screen3D is changed
//dst[i] = (b<<10) | (g<<5) | (r) | 0x8000;
dst[i] = (screen3D[t+2] | (screen3D[t+1] << 5) | (screen3D[t+0] << 10) | ((screen3D[t+3] > 0) ? 0x8000 : 0x0000));
}
}
static void OGLGetLine(int line, u16* dst, u8* dstAlpha)
{
assert(line<192 && line>=0);
if(needRefreshFramebuffer) {
needRefreshFramebuffer = false;
GL_ReadFramebuffer();
}
u8 *screen3D = (u8*)GPU_screen3D+((191-line)<<10);
//u8 *screenStencil = (u8*)GPU_screenStencil+((191-line)<<8);
//the renderer clears the stencil to 0
//then it sets it to 1 whenever it renders a pixel that passes the alpha test
//(it also sets it to 2 under some circumstances when rendering shadow volumes)
//so, we COULD use a zero stencil value to indicate that nothing should get composited.
//in fact, we are going to do that to fix some problems.
//but beware that it i figure it might could CAUSE some problems
//this alpha compositing blending logic isnt thought through very much
//someone needs to think about what bitdepth it should take place at and how to do it efficiently
for(int i=0;i<256;i++)
{
// u32 stencil = screenStencil[i];
//you would use this if you wanted to use the stencil buffer to make decisions here
// if(!stencil) continue;
// u16 oldcolor = dst[j];
int t=i<<2;
// u32 dstpixel;
dst[i] = (screen3D[t+2] | (screen3D[t+1] << 5) | (screen3D[t+0] << 10) | ((screen3D[t+3] > 0) ? 0x8000 : 0x0000));
dstAlpha[i] = alpha_5bit_to_4bit[screen3D[t+3]];
//old debug reminder: display alpha channel
//u32 r = screen3D[t+3];
//u32 g = screen3D[t+3];
//u32 b = screen3D[t+3];
//if this math strikes you as wrong, be sure to look at GL_ReadFramebuffer() where the pixel format in screen3D is changed
/* u32 a = screen3D[t+3];
typedef u8 mixtbl[32][32];
mixtbl & mix = mixTable555[a];
//r
u32 newpix = screen3D[t+2];
u32 oldpix = oldcolor&0x1F;
newpix = mix[newpix][oldpix];
dstpixel = newpix;
//g
newpix = screen3D[t+1];
oldpix = (oldcolor>>5)&0x1F;
newpix = mix[newpix][oldpix];
dstpixel |= (newpix<<5);
//b
newpix = screen3D[t+0];
oldpix = (oldcolor>>10)&0x1F;
newpix = mix[newpix][oldpix];
dstpixel |= (newpix<<10);
dst[j] = dstpixel;*/
}
}
GPU3DInterface gpu3Dgl = {
"OpenGL",
OGLInit,
@ -889,5 +991,9 @@ GPU3DInterface gpu3Dgl = {
OGLClose,
OGLRender,
OGLVramReconfigureSignal,
OGLCheckFresh,
OGLGetLine,
OGLGetLineCaptured
};

View File

@ -227,10 +227,6 @@ int ZIPROMReaderSeek(void * file, int offset, int whence)
int ZIPROMReaderRead(void * file, void * buffer, u32 size)
{
#ifdef ZZIP_OLD_READ
return zzip_read((ZZIP_FILE*)file, (char *) buffer, size);
#else
return zzip_read((ZZIP_FILE*)file, buffer, size);
#endif
}
#endif

View File

@ -224,7 +224,7 @@ TEMPLATE u32 intrWaitARM()
} else {
intrFlagAdr = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8;
}
intr = _MMU_read32<PROCNUM>(intrFlagAdr);
intr = _MMU_read32(cpu->proc_ID,intrFlagAdr);
intrFlag = (cpu->R[1] & intr);
if(!noDiscard)
@ -236,7 +236,7 @@ TEMPLATE u32 intrWaitARM()
// on efface son(les) occurence(s).
intr ^= intrFlag;
cpu->newIrqFlags ^= intrFlag;
_MMU_write32<PROCNUM>(intrFlagAdr, intr);
_MMU_write32(cpu->proc_ID, intrFlagAdr, intr);
//cpu->switchMode(oldmode[cpu->proc_ID]);
return 1;
}
@ -266,7 +266,7 @@ TEMPLATE static u32 waitVBlankARM()
} else {
intrFlagAdr = (((armcp15_t *)(cpu->coproc[15]))->DTCMRegion&0xFFFFF000)+0x3FF8;
}
intr = _MMU_read32<PROCNUM>(intrFlagAdr);
intr = _MMU_read32(cpu->proc_ID,intrFlagAdr);
intrFlag = 1 & intr;
// if(intrFlag)
@ -274,7 +274,7 @@ TEMPLATE static u32 waitVBlankARM()
// si une(ou plusieurs) des interruptions que l'on attend s'est(se sont) produite(s)
// on efface son(les) occurence(s).
intr ^= intrFlag;
_MMU_write32<PROCNUM>(intrFlagAdr, intr);
_MMU_write32(cpu->proc_ID,intrFlagAdr, intr);
//cpu->switchMode(oldmode[cpu->proc_ID]);
return 1;
}
@ -314,7 +314,7 @@ TEMPLATE static u32 wait4IRQ()
TEMPLATE static u32 sleep()
{
_MMU_write08<PROCNUM>(0x04000301, 0xC0);
_MMU_write08(cpu->proc_ID, 0x04000301, 0xC0);
return 1;
}
@ -351,7 +351,7 @@ TEMPLATE static u32 copy()
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write16<PROCNUM>(dst, _MMU_read16<PROCNUM>(src));
_MMU_write16(cpu->proc_ID,dst, _MMU_read16(cpu->proc_ID,src));
cnt--;
dst+=2;
src+=2;
@ -359,11 +359,11 @@ TEMPLATE static u32 copy()
break;
case 1:
{
u32 val = _MMU_read16<PROCNUM>(src);
u32 val = _MMU_read16(cpu->proc_ID, src);
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write16<PROCNUM>(dst, val);
_MMU_write16(cpu->proc_ID, dst, val);
cnt--;
dst+=2;
}
@ -380,7 +380,7 @@ TEMPLATE static u32 copy()
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write32<PROCNUM>(dst, _MMU_read32<PROCNUM>(src));
_MMU_write32(cpu->proc_ID, dst, _MMU_read32(cpu->proc_ID, src));
cnt--;
dst+=4;
src+=4;
@ -388,11 +388,11 @@ TEMPLATE static u32 copy()
break;
case 1:
{
u32 val = _MMU_read32<PROCNUM>(src);
u32 val = _MMU_read32(cpu->proc_ID, src);
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write32<PROCNUM>(dst, val);
_MMU_write32(cpu->proc_ID,dst, val);
cnt--;
dst+=4;
}
@ -418,7 +418,7 @@ TEMPLATE static u32 fastCopy()
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write32<PROCNUM>(dst, _MMU_read32<PROCNUM>(src));
_MMU_write32(cpu->proc_ID,dst, _MMU_read32(cpu->proc_ID,src));
cnt--;
dst+=4;
src+=4;
@ -426,11 +426,11 @@ TEMPLATE static u32 fastCopy()
break;
case 1:
{
u32 val = _MMU_read32<PROCNUM>(src);
u32 val = _MMU_read32(cpu->proc_ID,src);
cnt &= 0x1FFFFF;
while(cnt)
{
_MMU_write32<PROCNUM>(dst, val);
_MMU_write32(cpu->proc_ID,dst, val);
cnt--;
dst+=4;
}
@ -449,7 +449,7 @@ TEMPLATE static u32 LZ77UnCompVram()
int len;
u32 source = cpu->R[0];
u32 dest = cpu->R[1];
u32 header = _MMU_read32<PROCNUM>(source);
u32 header = _MMU_read32(cpu->proc_ID,source);
source += 4;
//INFO("swi lz77uncompvram\n");
@ -465,7 +465,7 @@ TEMPLATE static u32 LZ77UnCompVram()
len = header >> 8;
while(len > 0) {
u8 d = _MMU_read08<PROCNUM>(source++);
u8 d = _MMU_read08(cpu->proc_ID,source++);
if(d) {
for(i1 = 0; i1 < 8; i1++) {
@ -473,18 +473,18 @@ TEMPLATE static u32 LZ77UnCompVram()
int length;
int offset;
u32 windowOffset;
u16 data = _MMU_read08<PROCNUM>(source++) << 8;
data |= _MMU_read08<PROCNUM>(source++);
u16 data = _MMU_read08(cpu->proc_ID,source++) << 8;
data |= _MMU_read08(cpu->proc_ID,source++);
length = (data >> 12) + 3;
offset = (data & 0x0FFF);
windowOffset = dest + byteCount - offset - 1;
for(i2 = 0; i2 < length; i2++) {
writeValue |= (_MMU_read08<PROCNUM>(windowOffset++) << byteShift);
writeValue |= (_MMU_read08(cpu->proc_ID,windowOffset++) << byteShift);
byteShift += 8;
byteCount++;
if(byteCount == 2) {
_MMU_write16<PROCNUM>(dest, writeValue);
_MMU_write16(cpu->proc_ID,dest, writeValue);
dest += 2;
byteCount = 0;
byteShift = 0;
@ -495,11 +495,11 @@ TEMPLATE static u32 LZ77UnCompVram()
return 0;
}
} else {
writeValue |= (_MMU_read08<PROCNUM>(source++) << byteShift);
writeValue |= (_MMU_read08(cpu->proc_ID,source++) << byteShift);
byteShift += 8;
byteCount++;
if(byteCount == 2) {
_MMU_write16<PROCNUM>(dest, writeValue);
_MMU_write16(cpu->proc_ID,dest, writeValue);
dest += 2;
byteCount = 0;
byteShift = 0;
@ -513,11 +513,11 @@ TEMPLATE static u32 LZ77UnCompVram()
}
} else {
for(i1 = 0; i1 < 8; i1++) {
writeValue |= (_MMU_read08<PROCNUM>(source++) << byteShift);
writeValue |= (_MMU_read08(cpu->proc_ID, source++) << byteShift);
byteShift += 8;
byteCount++;
if(byteCount == 2) {
_MMU_write16<PROCNUM>(dest, writeValue);
_MMU_write16(cpu->proc_ID, dest, writeValue);
dest += 2;
byteShift = 0;
byteCount = 0;
@ -539,7 +539,7 @@ TEMPLATE static u32 LZ77UnCompWram()
u32 source = cpu->R[0];
u32 dest = cpu->R[1];
u32 header = _MMU_read32<PROCNUM>(source);
u32 header = _MMU_read32(cpu->proc_ID, source);
source += 4;
//INFO("swi lz77uncompwram\n");
@ -551,7 +551,7 @@ TEMPLATE static u32 LZ77UnCompWram()
len = header >> 8;
while(len > 0) {
u8 d = _MMU_read08<PROCNUM>(source++);
u8 d = _MMU_read08(cpu->proc_ID, source++);
if(d) {
for(i1 = 0; i1 < 8; i1++) {
@ -559,19 +559,19 @@ TEMPLATE static u32 LZ77UnCompWram()
int length;
int offset;
u32 windowOffset;
u16 data = _MMU_read08<PROCNUM>(source++) << 8;
data |= _MMU_read08<PROCNUM>(source++);
u16 data = _MMU_read08(cpu->proc_ID, source++) << 8;
data |= _MMU_read08(cpu->proc_ID, source++);
length = (data >> 12) + 3;
offset = (data & 0x0FFF);
windowOffset = dest - offset - 1;
for(i2 = 0; i2 < length; i2++) {
_MMU_write08<PROCNUM>(dest++, _MMU_read08<PROCNUM>(windowOffset++));
_MMU_write08(cpu->proc_ID, dest++, _MMU_read08(cpu->proc_ID, windowOffset++));
len--;
if(len == 0)
return 0;
}
} else {
_MMU_write08<PROCNUM>(dest++, _MMU_read08<PROCNUM>(source++));
_MMU_write08(cpu->proc_ID, dest++, _MMU_read08(cpu->proc_ID,source++));
len--;
if(len == 0)
return 0;
@ -580,7 +580,7 @@ TEMPLATE static u32 LZ77UnCompWram()
}
} else {
for(i1 = 0; i1 < 8; i1++) {
_MMU_write08<PROCNUM>(dest++, _MMU_read08<PROCNUM>(source++));
_MMU_write08(cpu->proc_ID,dest++, _MMU_read08(cpu->proc_ID, source++));
len--;
if(len == 0)
return 0;
@ -600,7 +600,7 @@ TEMPLATE static u32 RLUnCompVram()
u32 source = cpu->R[0];
u32 dest = cpu->R[1];
u32 header = _MMU_read32<PROCNUM>(source);
u32 header = _MMU_read32(cpu->proc_ID, source);
source += 4;
//INFO("swi rluncompvram\n");
@ -615,10 +615,10 @@ TEMPLATE static u32 RLUnCompVram()
writeValue = 0;
while(len > 0) {
u8 d = _MMU_read08<PROCNUM>(source++);
u8 d = _MMU_read08(cpu->proc_ID, source++);
int l = d & 0x7F;
if(d & 0x80) {
u8 data = _MMU_read08<PROCNUM>(source++);
u8 data = _MMU_read08(cpu->proc_ID, source++);
l += 3;
for(i = 0;i < l; i++) {
writeValue |= (data << byteShift);
@ -626,7 +626,7 @@ TEMPLATE static u32 RLUnCompVram()
byteCount++;
if(byteCount == 2) {
_MMU_write16<PROCNUM>(dest, writeValue);
_MMU_write16(cpu->proc_ID, dest, writeValue);
dest += 2;
byteCount = 0;
byteShift = 0;
@ -639,11 +639,11 @@ TEMPLATE static u32 RLUnCompVram()
} else {
l++;
for(i = 0; i < l; i++) {
writeValue |= (_MMU_read08<PROCNUM>(source++) << byteShift);
writeValue |= (_MMU_read08(cpu->proc_ID, source++) << byteShift);
byteShift += 8;
byteCount++;
if(byteCount == 2) {
_MMU_write16<PROCNUM>(dest, writeValue);
_MMU_write16(cpu->proc_ID, dest, writeValue);
dest += 2;
byteCount = 0;
byteShift = 0;
@ -665,7 +665,7 @@ TEMPLATE static u32 RLUnCompWram()
u32 source = cpu->R[0];
u32 dest = cpu->R[1];
u32 header = _MMU_read32<PROCNUM>(source);
u32 header = _MMU_read32(cpu->proc_ID, source);
source += 4;
//INFO("swi rluncompwram\n");
@ -677,13 +677,13 @@ TEMPLATE static u32 RLUnCompWram()
len = header >> 8;
while(len > 0) {
u8 d = _MMU_read08<PROCNUM>(source++);
u8 d = _MMU_read08(cpu->proc_ID, source++);
int l = d & 0x7F;
if(d & 0x80) {
u8 data = _MMU_read08<PROCNUM>(source++);
u8 data = _MMU_read08(cpu->proc_ID, source++);
l += 3;
for(i = 0;i < l; i++) {
_MMU_write08<PROCNUM>(dest++, data);
_MMU_write08(cpu->proc_ID,dest++, data);
len--;
if(len == 0)
return 0;
@ -691,7 +691,7 @@ TEMPLATE static u32 RLUnCompWram()
} else {
l++;
for(i = 0; i < l; i++) {
_MMU_write08<PROCNUM>(dest++, _MMU_read08<PROCNUM>(source++));
_MMU_write08(cpu->proc_ID, dest++, _MMU_read08(cpu->proc_ID,source++));
len--;
if(len == 0)
return 0;
@ -712,7 +712,7 @@ TEMPLATE static u32 UnCompHuffman()
source = cpu->R[0];
dest = cpu->R[1];
header = _MMU_read08<PROCNUM>(source);
header = _MMU_read08(cpu->proc_ID, source);
source += 4;
//INFO("swi uncomphuffman\n");
@ -721,7 +721,7 @@ TEMPLATE static u32 UnCompHuffman()
((source + ((header >> 8) & 0x1fffff)) & 0xe000000) == 0)
return 0;
treeSize = _MMU_read08<PROCNUM>(source++);
treeSize = _MMU_read08(cpu->proc_ID,source++);
treeStart = source;
@ -730,11 +730,11 @@ TEMPLATE static u32 UnCompHuffman()
len = header >> 8;
mask = 0x80000000;
data = _MMU_read08<PROCNUM>(source);
data = _MMU_read08(cpu->proc_ID,source);
source += 4;
pos = 0;
rootNode = _MMU_read08<PROCNUM>(treeStart);
rootNode = _MMU_read08(cpu->proc_ID,treeStart);
currentNode = rootNode;
writeData = 0;
byteShift = 0;
@ -753,12 +753,12 @@ TEMPLATE static u32 UnCompHuffman()
// right
if(currentNode & 0x40)
writeData = 1;
currentNode = _MMU_read08<PROCNUM>(treeStart+pos+1);
currentNode = _MMU_read08(cpu->proc_ID,treeStart+pos+1);
} else {
// left
if(currentNode & 0x80)
writeData = 1;
currentNode = _MMU_read08<PROCNUM>(treeStart+pos);
currentNode = _MMU_read08(cpu->proc_ID,treeStart+pos);
}
if(writeData) {
@ -773,7 +773,7 @@ TEMPLATE static u32 UnCompHuffman()
if(byteCount == 4) {
byteCount = 0;
byteShift = 0;
_MMU_write08<PROCNUM>(dest, writeValue);
_MMU_write08(cpu->proc_ID, dest, writeValue);
writeValue = 0;
dest += 4;
len -= 4;
@ -782,7 +782,7 @@ TEMPLATE static u32 UnCompHuffman()
mask >>= 1;
if(mask == 0) {
mask = 0x80000000;
data = _MMU_read08<PROCNUM>(source);
data = _MMU_read08(cpu->proc_ID,source);
source += 4;
}
}
@ -800,12 +800,12 @@ TEMPLATE static u32 UnCompHuffman()
// right
if(currentNode & 0x40)
writeData = 1;
currentNode = _MMU_read08<PROCNUM>(treeStart+pos+1);
currentNode = _MMU_read08(cpu->proc_ID, treeStart+pos+1);
} else {
// left
if(currentNode & 0x80)
writeData = 1;
currentNode = _MMU_read08<PROCNUM>(treeStart+pos);
currentNode = _MMU_read08(cpu->proc_ID, treeStart+pos);
}
if(writeData) {
@ -826,7 +826,7 @@ TEMPLATE static u32 UnCompHuffman()
if(byteCount == 4) {
byteCount = 0;
byteShift = 0;
_MMU_write08<PROCNUM>(dest, writeValue);
_MMU_write08(cpu->proc_ID,dest, writeValue);
dest += 4;
writeValue = 0;
len -= 4;
@ -839,7 +839,7 @@ TEMPLATE static u32 UnCompHuffman()
mask >>= 1;
if(mask == 0) {
mask = 0x80000000;
data = _MMU_read08<PROCNUM>(source);
data = _MMU_read08(cpu->proc_ID, source);
source += 4;
}
}
@ -859,15 +859,15 @@ TEMPLATE static u32 BitUnPack()
//INFO("swi bitunpack\n");
len = _MMU_read16<PROCNUM>(header);
len = _MMU_read16(cpu->proc_ID, header);
// check address
bits = _MMU_read08<PROCNUM>(header+2);
bits = _MMU_read08(cpu->proc_ID, header+2);
revbits = 8 - bits;
// u32 value = 0;
base = _MMU_read08<PROCNUM>(header+4);
base = _MMU_read08(cpu->proc_ID, header+4);
addBase = (base & 0x80000000) ? 1 : 0;
base &= 0x7fffffff;
dataSize = _MMU_read08<PROCNUM>(header+3);
dataSize = _MMU_read08(cpu->proc_ID, header+3);
data = 0;
bitwritecount = 0;
@ -876,7 +876,7 @@ TEMPLATE static u32 BitUnPack()
if(len < 0)
break;
mask = 0xff >> revbits;
b = _MMU_read08<PROCNUM>(source);
b = _MMU_read08(cpu->proc_ID, source);
source++;
bitcount = 0;
while(1) {
@ -890,7 +890,7 @@ TEMPLATE static u32 BitUnPack()
data |= temp << bitwritecount;
bitwritecount += dataSize;
if(bitwritecount >= 32) {
_MMU_write08<PROCNUM>(dest, data);
_MMU_write08(cpu->proc_ID,dest, data);
dest += 4;
data = 0;
bitwritecount = 0;
@ -911,7 +911,7 @@ TEMPLATE static u32 Diff8bitUnFilterWram()
source = cpu->R[0];
dest = cpu->R[1];
header = _MMU_read08<PROCNUM>(source);
header = _MMU_read08(cpu->proc_ID, source);
source += 4;
//INFO("swi diff8bitunfilterwram\n");
@ -922,14 +922,14 @@ TEMPLATE static u32 Diff8bitUnFilterWram()
len = header >> 8;
data = _MMU_read08<PROCNUM>(source++);
_MMU_write08<PROCNUM>(dest++, data);
data = _MMU_read08(cpu->proc_ID, source++);
_MMU_write08(cpu->proc_ID, dest++, data);
len--;
while(len > 0) {
diff = _MMU_read08<PROCNUM>(source++);
diff = _MMU_read08(cpu->proc_ID,source++);
data += diff;
_MMU_write08<PROCNUM>(dest++, data);
_MMU_write08(cpu->proc_ID, dest++, data);
len--;
}
return 1;
@ -946,7 +946,7 @@ TEMPLATE static u32 Diff16bitUnFilter()
//INFO("swi diff16bitunfilter\n");
header = _MMU_read08<PROCNUM>(source);
header = _MMU_read08(cpu->proc_ID, source);
source += 4;
if(((source & 0xe000000) == 0) ||
@ -955,17 +955,17 @@ TEMPLATE static u32 Diff16bitUnFilter()
len = header >> 8;
data = _MMU_read16<PROCNUM>(source);
data = _MMU_read16(cpu->proc_ID,source);
source += 2;
_MMU_write16<PROCNUM>(dest, data);
_MMU_write16(cpu->proc_ID, dest, data);
dest += 2;
len -= 2;
while(len >= 2) {
u16 diff = _MMU_read16<PROCNUM>(source);
u16 diff = _MMU_read16(cpu->proc_ID, source);
source += 2;
data += diff;
_MMU_write16<PROCNUM>(dest, data);
_MMU_write16(cpu->proc_ID,dest, data);
dest += 2;
len -= 2;
}
@ -980,7 +980,7 @@ TEMPLATE static u32 bios_sqrt()
TEMPLATE static u32 setHaltCR()
{
_MMU_write08<PROCNUM>(0x4000300+cpu->proc_ID, cpu->R[0]);
_MMU_write08(cpu->proc_ID,0x4000300+cpu->proc_ID, cpu->R[0]);
return 1;
}
@ -1013,7 +1013,7 @@ TEMPLATE static u32 getCRC16()
const u16 val[] = { 0xC0C1,0xC181,0xC301,0xC601,0xCC01,0xD801,0xF001,0xA001 };
for(i = 0; i < size; i++)
{
crc = crc ^ _MMU_read08<PROCNUM>(datap + i);
crc = crc ^ _MMU_read08(cpu->proc_ID, datap + i);
for(j = 0; j < 8; j++) {
int do_bit = 0;

View File

@ -83,428 +83,14 @@ BOOL cheatsUpdate(u8 size, u32 address, u32 val, char *description, BOOL enabled
return TRUE;
}
static void cheats_ARparser(CHEATS_LIST cheat)
{
u8 type = 0;
u8 subtype = 0;
u32 hi = 0;
u32 lo = 0;
u32 addr = 0;
u32 val = 0;
// AR temporary vars & flags
u32 offset = 0;
u32 datareg = 0;
u32 loopcount = 0;
u32 counter = 0;
u32 if_flag = 0;
s32 loopbackline = 0;
u32 loop_flag = 0;
for (int i=0; i < cheat.num; i++)
{
type = cheat.hi[i] >> 28;
subtype = (cheat.hi[i] >> 24) & 0x0F;
hi = cheat.hi[i] & 0x0FFFFFFF;
lo = cheat.lo[i];
if (if_flag > 0)
{
if ( (type == 0x0D) && (subtype == 0)) if_flag--; // ENDIF
if ( (type == 0x0D) && (subtype == 2)) // NEXT & Flush
{
if (loop_flag)
i = (loopbackline-1);
else
{
offset = 0;
datareg = 0;
loopcount = 0;
counter = 0;
if_flag = 0;
loop_flag = 0;
}
}
continue;
}
switch (type)
{
case 0x00:
{
if (hi==0)
{
//manual hook
}
else
if ((hi==0x0000AA99) && (lo==0))
{
//parameter bytes 9..10 for above code (padded with 00s)
}
else
{
addr = hi + offset;
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], lo);
}
}
break;
case 0x01:
addr = hi + offset;
T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], lo & 0x0000FFFF);
break;
case 0x02:
addr = hi + offset;
T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], lo & 0x000000FF);
break;
case 0x03:
val = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]);
if ( lo > val )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x04:
val = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]);
if ( lo < val )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x05:
val = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]);
if ( lo == val )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x06:
val = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]);
if ( lo != val )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x07:
val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]) & 0x0000FFFF;
if ( (lo & 0xFFFF) > ( (~(lo >> 16)) & val) )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x08:
val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]) & 0x0000FFFF;
if ( (lo & 0xFFFF) < ( (~(lo >> 16)) & val) )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x09:
val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]);
if ( (lo & 0xFFFF) == ( (~(lo >> 16)) & val) )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x0A:
val = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][hi>>20], hi & MMU.MMU_MASK[ARMCPU_ARM9][hi>>20]) & 0x0000FFFF;
if ( (lo & 0xFFFF) != ( (~(lo >> 16)) & val) )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x0B:
addr = hi + offset;
offset = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20]);
break;
case 0x0C:
switch (subtype)
{
case 0x0:
if (loopcount < (lo+1))
loop_flag = 1;
else
loop_flag = 0;
loopcount++;
loopbackline = i;
break;
case 0x4:
break;
case 0x5:
counter++;
if ( (counter & (lo & 0xFFFF)) == ((lo >> 8) & 0xFFFF) )
{
if (if_flag > 0) if_flag--;
}
else
{
if_flag++;
}
break;
case 0x6:
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][lo>>20], lo & MMU.MMU_MASK[ARMCPU_ARM9][lo>>20], offset);
break;
}
break;
case 0x0D:
{
switch (subtype)
{
case 0x0:
break;
case 0x1:
if (loop_flag)
i = (loopbackline-1);
break;
case 0x2:
if (loop_flag)
i = (loopbackline-1);
else
{
offset = 0;
datareg = 0;
loopcount = 0;
counter = 0;
if_flag = 0;
loop_flag = 0;
}
break;
case 0x3:
offset = lo;
break;
case 0x4:
datareg += lo;
break;
case 0x5:
datareg = lo;
break;
case 0x6:
addr = lo + offset;
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], datareg);
offset += 4;
break;
case 0x7:
addr = lo + offset;
T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], datareg & 0x0000FFFF);
offset += 2;
break;
case 0x8:
addr = lo + offset;
T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20], datareg & 0x000000FF);
offset += 1;
break;
case 0x9:
addr = lo + offset;
datareg = T1ReadLong(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20]);
break;
case 0xA:
addr = lo + offset;
datareg = T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20]) & 0x0000FFFF;
break;
case 0xB:
addr = lo + offset;
datareg = T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][addr>>20], addr & MMU.MMU_MASK[ARMCPU_ARM9][addr>>20]) & 0x000000FF;
break;
case 0xC:
offset += lo;
break;
}
}
break;
case 0xE:
for (u32 t = 0; t < lo; t++)
{
u8 tmp = T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][(hi+t)>>20], (hi+t) & MMU.MMU_MASK[ARMCPU_ARM9][(hi+t)>>20]);
T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][(offset+t)>>20], (offset+t) & MMU.MMU_MASK[ARMCPU_ARM9][(offset+t)>>20], tmp);
}
break;
case 0xF:
for (u32 t = 0; t < lo; t++)
{
u8 tmp = T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM9][(offset+t)>>20], (offset+t) & MMU.MMU_MASK[ARMCPU_ARM9][(offset+t)>>20]);
T1WriteByte(MMU.MMU_MEM[ARMCPU_ARM9][(hi+t)>>20], (hi+t) & MMU.MMU_MASK[ARMCPU_ARM9][(hi+t)>>20], tmp);
}
break;
//default: INFO("AR: ERROR uknown command 0x%2X at %08X:%08X\n", type, hi, lo); break;
}
}
}
static BOOL cheatsXXcodePreparser(CHEATS_LIST *cheat, char *code)
{
u16 count = 0;
u16 t = 0;
char tmp_buf[sizeof(cheat->hi)+sizeof(cheat->lo)];
memset(tmp_buf, 0, sizeof(tmp_buf));
// remove wrong chars
for (unsigned int i=0; i < strlen(code); i++)
{
switch (code[i])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'A':
case 'a':
case 'B':
case 'b':
case 'C':
case 'c':
case 'D':
case 'd':
case 'E':
case 'e':
case 'F':
case 'f':
tmp_buf[t] = code[i];
t++;
break;
}
}
if ((strlen(tmp_buf) % 8) != 0) return FALSE; // error
if ((strlen(tmp_buf) % 16) != 0) return FALSE; // error
// TODO: syntax check
count = (strlen(tmp_buf) / 16);
for (int i=0; i < count; i++)
{
char buf[8] = {0};
strncpy(buf, tmp_buf+(i*16), 8);
sscanf_s(buf, "%x", &cheat->hi[i]);
strncpy(buf, tmp_buf+(i*16) + 8, 8);
sscanf_s(buf, "%x", &cheat->lo[i]);
}
cheat->num = count;
cheat->size = 0;
return TRUE;
}
BOOL cheatsAdd_AR(char *code, char *description, BOOL enabled)
{
if (cheatsNum == MAX_CHEAT_LIST) return FALSE;
if (!cheatsXXcodePreparser(&cheats[cheatsNum], code)) return FALSE;
cheats[cheatsNum].type = 1;
strcpy(cheats[cheatsNum].description, description);
cheats[cheatsNum].enabled = enabled;
cheatsNum++;
return TRUE;
}
BOOL cheatsUpdate_AR(char *code, char *description, BOOL enabled, u32 pos)
{
if (pos > cheatsNum) return FALSE;
if (code != NULL)
{
if (!cheatsXXcodePreparser(&cheats[pos], code)) return FALSE;
strcpy(cheats[pos].description, description);
cheats[pos].type = 1;
}
cheats[pos].enabled = enabled;
return TRUE;
return FALSE;
}
BOOL cheatsAdd_CB(char *code, char *description, BOOL enabled)
{
if (cheatsNum == MAX_CHEAT_LIST) return FALSE;
if (!cheatsXXcodePreparser(&cheats[cheatsNum], code)) return FALSE;
cheats[cheatsNum].type = 2;
strcpy(cheats[cheatsNum].description, description);
cheats[cheatsNum].enabled = enabled;
cheatsNum++;
return TRUE;
}
BOOL cheatsUpdate_CB(char *code, char *description, BOOL enabled, u32 pos)
{
if (pos > cheatsNum) return FALSE;
if (code != NULL)
{
if (!cheatsXXcodePreparser(&cheats[pos], code)) return FALSE;
cheats[pos].type = 2;
strcpy(cheats[pos].description, description);
}
cheats[pos].enabled = enabled;
return TRUE;
return FALSE;
}
BOOL cheatsRemove(u32 pos)
@ -571,10 +157,9 @@ BOOL cheatsSave()
if (cheats[i].num > 0)
{
fprintf(fcheat, "Data=");
for (int t = 0; t < cheats[i].num; t++)
{
fprintf(fcheat, "%08X%08X", cheats[i].hi[t], cheats[i].lo[t]);
fprintf(fcheat, "Data=%08X%08X", cheats[i].hi[t], cheats[i].lo[t]);
if (t < (cheats[i].num - 1)) fputs(",", fcheat);
}
fputs("\n", fcheat);
@ -619,28 +204,14 @@ BOOL cheatsLoad()
(buf[3] == 'o') &&
(buf[4] == '=') ) // Info cheat
{
u32 dstart = 5;
u32 dsize = 0;
char bf[4] = { 0 };
while ( (buf[dstart+dsize] != ',') && (buf[dstart+dsize]!=0)) { dsize++; };
if (buf[dstart+dsize]==0) continue; // error
strncpy(bf, (char*)buf+dstart, dsize);
cheats[last].type=atoi(bf);
dstart += (dsize+1); dsize=0;
while ( (buf[dstart+dsize] != ',') && (buf[dstart+dsize]!=0)) { dsize++; };
if (buf[dstart+dsize]==0) continue; // error
strncpy(bf, (char*)buf+dstart, dsize);
dstart += (dsize+1); dsize=0;
cheats[last].num=atoi(bf);
while ( (buf[dstart+dsize] != ',') && (buf[dstart+dsize]!=0)) { dsize++; };
if (buf[dstart+dsize]==0) continue; // error
strncpy(bf, (char*)(buf+dstart), dsize);
dstart += (dsize+1); dsize=0;
cheats[last].enabled=atoi(bf);
while ( (buf[dstart+dsize] != ',') && (buf[dstart+dsize]!=0)) { dsize++; };
strncpy(bf, (char*)buf+dstart, dsize);
cheats[last].size=atoi(bf);
// TODO: parse number for comma
cheats[last].type=atoi(&buf[5]);
if (buf[6]!=',') continue; // error
cheats[last].num=atoi(&buf[7]);
if (buf[8]!=',') continue; // error
cheats[last].enabled=atoi(&buf[9]);
if (buf[10]!=',') continue; // error
cheats[last].size=atoi(&buf[11]);
fgets(buf, 1024, fcheat);
if ( (buf[0] == 'D') &&
(buf[1] == 'a') &&
@ -659,8 +230,6 @@ BOOL cheatsLoad()
offs+=8;
strncpy(tmp_buf, (char *)buf+offs, 8);
sscanf_s(tmp_buf, "%x", &cheats[last].lo[j]);
offs+=8;
if (buf[offs] != ',') continue; //error
offs++; // skip comma
}
}
@ -736,7 +305,6 @@ void cheatsProcess()
break;
case 1: // Action Replay
cheats_ARparser(cheats[i]);
break;
case 2: // Codebreaker
break;
@ -745,17 +313,6 @@ void cheatsProcess()
}
}
void cheatGetXXcodeString(CHEATS_LIST cheat, char *res_buf)
{
char buf[50] = { 0 };
for (int i=0; i < cheat.num; i++)
{
sprintf(buf, "%08X %08X\n", cheat.hi[i], cheat.lo[i]);
strcat(res_buf, buf);
}
}
// ========================================== search
u8 *searchStatMem = NULL;
u8 *searchMem = NULL;
@ -1009,23 +566,14 @@ u32 cheatSearchNumber()
BOOL cheatSearchGetList(u32 *address, u32 *curVal)
{
u8 step = (searchSize+1);
u8 stepMem = 1;
switch (searchSize)
{
case 1: stepMem = 0x3; break;
case 2: stepMem = 0x7; break;
case 3: stepMem = 0xF; break;
}
for (u32 i = searchLastRecord; i < (4 * 1024 * 1024); i+=step)
for (u32 i = searchLastRecord; i < (4 * 1024 * 1024); i++)
{
u32 addr = (i >> 3);
u32 offs = (i % 8);
if (searchStatMem[addr] & (stepMem<<offs))
if (searchStatMem[addr] & (1<<offs))
{
*address = i;
searchLastRecord = i+step;
searchLastRecord = i+1;
switch (searchSize)
{

View File

@ -45,9 +45,7 @@ extern void cheatsInit(char *path);
extern BOOL cheatsAdd(u8 size, u32 address, u32 val, char *description, BOOL enabled);
extern BOOL cheatsUpdate(u8 size, u32 address, u32 val, char *description, BOOL enabled, u32 pos);
extern BOOL cheatsAdd_AR(char *code, char *description, BOOL enabled);
extern BOOL cheatsUpdate_AR(char *code, char *description, BOOL enabled, u32 pos);
extern BOOL cheatsAdd_CB(char *code, char *description, BOOL enabled);
extern BOOL cheatsUpdate_CB(char *code, char *description, BOOL enabled, u32 pos);
extern BOOL cheatsRemove(u32 pos);
extern void cheatsGetListReset();
extern BOOL cheatsGetList(CHEATS_LIST *cheat);
@ -59,7 +57,6 @@ extern BOOL cheatsPush();
extern BOOL cheatsPop();
extern void cheatsStackClear();
extern void cheatsProcess();
extern void cheatGetXXcodeString(CHEATS_LIST cheat, char *res_buf);
// ==================================================== cheat search
extern void cheatsSearchInit(u8 type, u8 size, u8 sign);

View File

@ -32,11 +32,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.9.3</string>
<string>0.8</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.9.3</string>
<string>0.8</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>

Some files were not shown because too many files have changed in this diff Show More