Update changelog / update minizip to 1.01h / update docs / Mac: changed MusicBox to Cocoa interface

This commit is contained in:
zones 2011-04-10 22:44:28 +09:00
parent 58a58c110e
commit 2f2d92a9da
93 changed files with 7420 additions and 12353 deletions

View File

@ -1,3 +1,59 @@
Snes9x 1.53
- Rebuilt IRQ handling. (zones)
- Improved overall timings, now Snes9x can handle events in
a opcode a little. (zones)
- Improved screen interlace and sprite interlace supports. (OV2, zones)
- Fixed Hi-Res pixel plotter. (BearOso, zones, OV2)
- Fixed C4 for Mega Man X2's "weapon get" screen. (Jonas Quinn)
- Fixed Super Buster Bros. graphics after reset. (Jonas Quinn)
- Improved SA-1 support. (zones)
- Added SA-1 CC2 support. (Jonas Quinn, byuu)
- Fixed SA-1 NMI override mode. (zones)
- Fixed Dual Orb 2 sound glitch. (byuu)
- New APU timing hack, fixes various games that exhibit
problems with Blargg's SNES_SPC library. (OV2)
- Fixed movie snapshot unfreeze inconsistency. (gocha)
- Faster config file saving. (OV2)
- Fixed BlockInvalidVRAMAccess config file option.
(windows port, unix port and gtk legacy config) (Jonas Quinn)
- Remove POSIX dup and access calls, and rename qword to
fix compilation with Cell SDK. (BearOso)
- Fixed PS3 version save state crash by using heap
allocation for soundsnapshot. (danieldematteis)
- Fixed crash relating to double-closed descriptor. (BearOso)
- Removed CPUShutdown speedhack, DisableHDMA and
DisableIRQ options. (zones)
- Removed remaining outdated asm code. (zones)
- JMA 64 bit support. (kode54, Nach, friedrich.goepel)
- GTK+, Win32, Mac: Added optional Hi-Res blending. (BearOso, OV2, zones)
- GTK+, Win32: Support for bSNES-style XML shaders. (BearOso, OV2)
- Win32: Full unicode support. (OV2)
- Win32: Restored OpenGL mode. (OV2)
- Win32: x64 version. (OV2)
- Win32: HLSL shader support. (mudlord)
- Win32: Win7 jumplist synchronizes with recent roms list. (OV2)
- Win32: Updated menu structure. (OV2)
- Win32: Drag&Drop support for ROMs. (gocha, OV2)
- Win32: Reworked movie-recording with size selection. (gocha, OV2)
- Win32: Restored SPC save option. (OV2)
- Win32: Fixed vsync in DirectDraw. (OV2)
- Win32: Improved window position saving. (OV2)
- Win32: Restored compile with DEBUGGER. (gocha)
- Win32: Fixed various edge-case errors and/or possible
leaks. (Brian Friesen)
- Win32: Config file option to always center image. (OV2)
- Win32: Fixed "Turbo Down mode" hotkey assignment. (gocha)
- Win32: Added and fixed Autofire for D-pad. (gocha)
- Win32: Fixed aggressive soundsync wait. (OV2)
- Win32: Added window size presets. (OV2)
- Mac : Added pause and frame advance functions. (zones)
- Mac : Now you can choose any folder for saving files. (zones)
- Mac : Updated Music Box (mostly internally). (zones)
- Mac : Fixed gliches in open/save dialogs on 10.6. (zones)
- Mac : Fixed display configuration in windowed mode. (zones)
- Unix : Fixed segfault and hang-up with -DNOSOUND. (zones)
Snes9x 1.52
- IMPORTANT NOTICE: The structure of savestates (also known
as snapshots / freeze files) is incompatible with older

2
macosx/English.lproj/Snes9x Help/pgs/02.html Normal file → Executable file
View File

@ -20,7 +20,7 @@
Choose 'Open ROM Image...' in 'File' menu, select the game and start it. You can also drag and drop the ROM image onto the Snes9x icon. You may open a ROM image by double clicking on its icon in the Finder as well.
</p>
<p>
SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs as long as there is only 1 per zip file. Also Snes9x can open gzip/jma compressed file.
SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs as long as there is only 1 per zip file. Also Snes9x can open gzip and jma compressed files.
</p>
<h3>Game Color System</h3>
<p>

2
macosx/English.lproj/Snes9x Help/pgs/03.html Normal file → Executable file
View File

@ -21,7 +21,7 @@
</p>
<h3>Software</h3>
<p>
You will need access to SNES ROM images in .smc, .sfc, .fig, etc., format otherwise you will have nothing to run! Some home-brewed ROM images can be downloaded from <a href="http://www.zophar.com/">http://www.zophar.com/</a>.<br>
You will need access to SNES ROM images otherwise you will have nothing to run! Some home-brewed ROM images can be downloaded from <a href="http://www.zophar.com/">http://www.zophar.com/</a>.<br>
Please note, it is illegal in most countries to have commercial ROM images without also owning the actual SNES ROM cartridges, and even then you may be liable under various EULAs.
</p>
<div style="text-align:center; margin-top:3em"><p>

8
macosx/English.lproj/Snes9x Help/pgs/04.html Normal file → Executable file
View File

@ -186,6 +186,14 @@
<td style="width:9em">W</td>
<td>decreases emulated frame time - speeding up the game.</td>
</tr>
<tr valign="top">
<td style="width:9em">O</td>
<td>just pauses and resumes - doesn't exit from the emulation loop.</td>
</tr>
<tr valign="top">
<td style="width:9em">P</td>
<td>advances a frame when paused.</td>
</tr>
</tbody>
</table></li>
</ul>

2
macosx/English.lproj/Snes9x Help/pgs/06.html Normal file → Executable file
View File

@ -17,7 +17,7 @@
</p>
<h3>Using the SRAM File</h3>
<p>
It's easy enough, just save the game as you do with the real SNES. Snes9x outputs the contents of the emulated SRAM into a file (.srm) when you load a new game or quit Snes9x. This file is automatically loaded the next time you play the game.
It's easy enough, just save the game as you do with the real SNES. Snes9x outputs the contents of the emulated SRAM into a file (.srm) when you load a new game, pause the emulation loop or quit Snes9x. This file is automatically loaded the next time you play the game.
</p>
<p>
To avoid losing your progress if Snes9x or your system crashes before the .srm file is saved, Snes9x provides auto-saving .srm option - the .srm file is always updated when the SRAM contents are modified. See into 'File' tab in 'Preferences' dialog to turn on this option. You can also update .srm file manually by choosing 'Save SRAM File Now' in 'Option' menu.

3
macosx/English.lproj/Snes9x Help/pgs/08.html Normal file → Executable file
View File

@ -29,7 +29,8 @@
</p>
<h3>QuickTime Movie Export</h3>
<p>
Note that during the QuickTime recording there is no sound, but the exported QuickTime movie has sound. Choose 'Export to QuickTime Movie...' in 'Option' menu and choose the location where the QuickTime movie file will be saved. Press 'Compression...' button and set the compression settings by the general QuickTime dialog. 'Double Size' check box makes the movie size from 256x224/239 to 512x448/478. 'Overscan' check box is for games that use 239 or 478 lines. 'Frame Skip' menu decides frame rate of the movie, for example when the value is 1, NTSC games which have 60 fps are exported as 30 fps movie.<br>
Note that during the QuickTime recording there is no sound, but the exported QuickTime movie has sound.<br>
Choose 'Export to QuickTime Movie...' in 'Option' menu and choose the location where the QuickTime movie file will be saved. Press 'Compression...' button and set the compression settings by the general QuickTime dialog. 'Double Size' check box makes the movie size from 256x224/239 to 512x448/478. 'Overscan' check box is for games that use 239 or 478 lines. 'Frame Skip' menu decides frame rate of the movie, for example when the value is 1, NTSC games which have 60 fps are exported as 30 fps movie.<br>
To make a QuickTime movie from .smv, choose 'Play Movie...' in 'Option' menu and turn on 'Export to QuickTime movie at a Time' check box.
</p>
<div style="text-align:center; margin-top:3em"><p>

4
macosx/English.lproj/Snes9x Help/pgs/09.html Normal file → Executable file
View File

@ -32,7 +32,7 @@
</tr>
<tr valign="top">
<td style="width:9em">Server</td>
<td>Open the ROM image. Pause the game.</td>
<td>Open the ROM image. Pause the game and exit from the emulation loop.</td>
</tr>
<tr valign="top">
<td style="width:9em">Server</td>
@ -84,7 +84,7 @@
</tr>
<tr valign="top">
<td style="width:9em">Server</td>
<td>Netplay stops when server pauses the game.</td>
<td>Netplay stops when server pauses the game and exits from the emulation loop.</td>
</tr>
<tr valign="top">
<td style="width:9em">Server</td>

4
macosx/English.lproj/Snes9x Help/pgs/10.html Normal file → Executable file
View File

@ -22,7 +22,9 @@
<dt>ROM Folder</dt>
<dd>the files will all be in the same folder as the ROM image being used.</dd>
<dt>Application Support Folder (default)</dt>
<dd>the subdirectories will be created in /Users/yourname/Library/Application Support/Snes9x and searched.</dd>
<dd>the subdirectories will be created and searched in /Users/yourname/Library/Application Support/Snes9x.</dd>
<dt>Other...</dt>
<dd>the subdirectories will be created and searched in any folder you choose.</dd>
</dl>
<h3>Which Display is Used in Full Screen Mode</h3>
<p>

2
macosx/English.lproj/Snes9x Help/pgs/13.html Normal file → Executable file
View File

@ -19,7 +19,7 @@
<li>Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware envelope processing, echo, pitch modulation and digital FIR sound filter.</li>
<li>SRAM, a battery-backed RAM.</li>
<li>All background modes, 0 to 7.</li>
<li>All screen resolutions, 256x224, 256x239, 512x224, 512x239, 512x448 and 512x478.</li>
<li>All screen resolutions including interlace mode.</li>
<li>Pseudo hi-res mode.</li>
<li>8x8, 16x8 and 16x16 tile sizes, flipped in either direction.</li>
<li>32x32, 32x64, 64x32 and 64x64 screen tile sizes.</li>

2
macosx/English.lproj/Snes9x Help/pgs/15.html Normal file → Executable file
View File

@ -60,7 +60,7 @@
</p></div>
<p>
Edited for Mac port by: zones (kasumitokoduck@yahoo.com)<br>
Updated most recently by: 2009/12/20 zones
Updated most recently by: 2011/3/31 zones
</p>
<div style="text-align:center; margin-top:3em"><p>
&lt;<a href="14.html">Prev</a>&nbsp;&nbsp;<a href="../index.html">Top</a>&nbsp;&nbsp;Next&gt;

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBVersion</key>
<string>1</string>
</dict>
</plist>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBFramework Version</key>
<string>823</string>
<key>IBLastKnownRelativeProjectPath</key>
<string>../snes9x.xcodeproj</string>
<key>IBOldestOS</key>
<integer>6</integer>
<key>IBOpenObjects</key>
<array/>
<key>IBSystem Version</key>
<string>10J567</string>
<key>targetFramework</key>
<string>IBCarbonFramework</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf250
{\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf350
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;\red153\green102\blue51;\red0\green0\blue255;}
\paperw11900\paperh16840\margl1440\margr1440\vieww11500\viewh12780\viewkind0
\paperw11900\paperh16840\margl1440\margr1440\vieww11500\viewh12340\viewkind0
\pard\tx285\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\fs24 \cf0 \
@ -16,9 +16,6 @@
\b0\fs24 \cf0 \
\
\pard\tx285\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\cf3 Files created by Snes9x\cf0 \
These files are compatible, except for the extension of the snapshot file. The only one difference is that the Mac port puts the thumbnail screenshot into the resource fork of .frz and .smv files, but the resource fork is usually deleted or separated when you send these files to your friends who don't use Mac.\
\
\cf3 Key mapping\cf0 \
The default settings of key mapping are different. For example, the A-button is the command key on Mac, while it's the D key in Windows.\
\

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 20 KiB

2
macosx/mac-appleevent.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-appleevent.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
@ -191,6 +191,7 @@
#include "snes9x.h"
#include "apu.h"
#include <Cocoa/Cocoa.h>
#include <CoreAudio/CoreAudio.h>
#include <AudioToolbox/AudioToolbox.h>
#include <AudioUnit/AudioUnitCarbonView.h>

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-cheat.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-cheat.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-cheatfinder.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-dialog.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-gworld.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-gworld.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-joypad.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-joypad.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-keyboard.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-keyboard.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -1,867 +0,0 @@
/***********************************************************************************
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
(c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com),
Jerremy Koot (jkoot@snes9x.com)
(c) Copyright 2002 - 2004 Matthew Kendora
(c) Copyright 2002 - 2005 Peter Bortas (peter@bortas.org)
(c) Copyright 2004 - 2005 Joel Yliluoma (http://iki.fi/bisqwit/)
(c) Copyright 2001 - 2006 John Weidman (jweidman@slip.net)
(c) Copyright 2002 - 2006 funkyass (funkyass@spam.shaw.ca),
Kris Bleakley (codeviolation@hotmail.com)
(c) Copyright 2002 - 2010 Brad Jorsch (anomie@users.sourceforge.net),
Nach (n-a-c-h@users.sourceforge.net),
zones (kasumitokoduck@yahoo.com)
(c) Copyright 2006 - 2007 nitsuja
(c) Copyright 2009 - 2010 BearOso,
OV2
BS-X C emulator code
(c) Copyright 2005 - 2006 Dreamer Nom,
zones
C4 x86 assembler and some C emulation code
(c) Copyright 2000 - 2003 _Demo_ (_demo_@zsnes.com),
Nach,
zsKnight (zsknight@zsnes.com)
C4 C++ code
(c) Copyright 2003 - 2006 Brad Jorsch,
Nach
DSP-1 emulator code
(c) Copyright 1998 - 2006 _Demo_,
Andreas Naive (andreasnaive@gmail.com),
Gary Henderson,
Ivar (ivar@snes9x.com),
John Weidman,
Kris Bleakley,
Matthew Kendora,
Nach,
neviksti (neviksti@hotmail.com)
DSP-2 emulator code
(c) Copyright 2003 John Weidman,
Kris Bleakley,
Lord Nightmare (lord_nightmare@users.sourceforge.net),
Matthew Kendora,
neviksti
DSP-3 emulator code
(c) Copyright 2003 - 2006 John Weidman,
Kris Bleakley,
Lancer,
z80 gaiden
DSP-4 emulator code
(c) Copyright 2004 - 2006 Dreamer Nom,
John Weidman,
Kris Bleakley,
Nach,
z80 gaiden
OBC1 emulator code
(c) Copyright 2001 - 2004 zsKnight,
pagefault (pagefault@zsnes.com),
Kris Bleakley
Ported from x86 assembler to C by sanmaiwashi
SPC7110 and RTC C++ emulator code used in 1.39-1.51
(c) Copyright 2002 Matthew Kendora with research by
zsKnight,
John Weidman,
Dark Force
SPC7110 and RTC C++ emulator code used in 1.52+
(c) Copyright 2009 byuu,
neviksti
S-DD1 C emulator code
(c) Copyright 2003 Brad Jorsch with research by
Andreas Naive,
John Weidman
S-RTC C emulator code
(c) Copyright 2001 - 2006 byuu,
John Weidman
ST010 C++ emulator code
(c) Copyright 2003 Feather,
John Weidman,
Kris Bleakley,
Matthew Kendora
Super FX x86 assembler emulator code
(c) Copyright 1998 - 2003 _Demo_,
pagefault,
zsKnight
Super FX C emulator code
(c) Copyright 1997 - 1999 Ivar,
Gary Henderson,
John Weidman
Sound emulator code used in 1.5-1.51
(c) Copyright 1998 - 2003 Brad Martin
(c) Copyright 1998 - 2006 Charles Bilyue'
Sound emulator code used in 1.52+
(c) Copyright 2004 - 2007 Shay Green (gblargg@gmail.com)
SH assembler code partly based on x86 assembler code
(c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
2xSaI filter
(c) Copyright 1999 - 2001 Derek Liauw Kie Fa
HQ2x, HQ3x, HQ4x filters
(c) Copyright 2003 Maxim Stepin (maxim@hiend3d.com)
NTSC filter
(c) Copyright 2006 - 2007 Shay Green
GTK+ GUI code
(c) Copyright 2004 - 2010 BearOso
Win32 GUI code
(c) Copyright 2003 - 2006 blip,
funkyass,
Matthew Kendora,
Nach,
nitsuja
(c) Copyright 2009 - 2010 OV2
Mac OS GUI code
(c) Copyright 1998 - 2001 John Stiles
(c) Copyright 2001 - 2010 zones
Specific ports contains the works of other authors. See headers in
individual files.
Snes9x homepage: http://www.snes9x.com/
Permission to use, copy, modify and/or distribute Snes9x in both binary
and source form, for non-commercial purposes, is hereby granted without
fee, providing that this license information and copyright notice appear
with all copies and any derived work.
This software is provided 'as-is', without any express or implied
warranty. In no event shall the authors be held liable for any damages
arising from the use of this software or it's derivatives.
Snes9x is freeware for PERSONAL USE only. Commercial users should
seek permission of the copyright holders first. Commercial use includes,
but is not limited to, charging money for Snes9x or software derived from
Snes9x, including Snes9x or derivatives in commercial game bundles, and/or
using Snes9x as a promotion for your commercial product.
The copyright holders request that bug fixes and improvements to the code
should be forwarded to them so everyone can benefit from the modifications
in future versions.
Super NES and Super Nintendo Entertainment System are trademarks of
Nintendo Co., Limited and its subsidiary companies.
***********************************************************************************/
/***********************************************************************************
SNES9X for Mac OS (c) Copyright John Stiles
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
(c) Copyright 2004 - 2005 Steven Seeger
(c) Copyright 2005 Ryan Vogt
***********************************************************************************/
#include "snes9x.h"
#include "memmap.h"
#include "apu.h"
#include "snapshot.h"
#include <pthread.h>
#include "mac-prefix.h"
#include "mac-audio.h"
#include "mac-dialog.h"
#include "mac-file.h"
#include "mac-os.h"
#include "mac-stringtools.h"
#include "mac-musicbox.h"
const float mbxOffsetX = 0.0f,
mbxOffsetY = 0.0f,
mbxBarWidth = 12.0f,
mbxBarHeight = 128.0f,
mbxBarSpace = 2.0f,
mbxLRSpace = 20.0f,
mbxRightBarX = (mbxLRSpace + (mbxBarWidth * 8.0f + mbxBarSpace * 7.0f)),
yyscale = (float) (128.0 / sqrt(64.0));
extern char gMacRomName[ROM_NAME_LEN];
volatile Boolean mboxPause = false;
static uint8 storedSoundSnapshot[SPC_SAVE_STATE_BLOCK_SIZE];
static int32 oldCPUCycles;
static short mbxOpenedHeight, mbxClosedHeight;
static float mbxMarginX, mbxMarginY, mbxViewWidth, mbxViewHeight;
static short prevLMax[8], prevRMax[8];
static short prevLVol[8], prevRVol[8];
static long long barTimeL[8], barTimeR[8];
static pthread_t mbxThread;
static uint16 stereo_switch;
static volatile Boolean stopNow, showIndicator, mbxFinished, headPressed;
static void SPCPlayExec (void);
static void SPCPlayFreeze (void);
static void SPCPlayDefrost (void);
static void MusicBoxForceFreeze (void);
static void MusicBoxForceDefrost (void);
static void MusicBoxInitIndicator (void);
static void MusicBoxDrawIndicator (HIViewRef, CGContextRef);
static void * SoundTask (void *);
static pascal void MusicBoxTimerHandler (EventLoopTimerRef, void *);
static pascal OSStatus MusicBoxEventHandler (EventHandlerCallRef, EventRef, void *);
static pascal OSStatus IndicatorEventHandler (EventHandlerCallRef, EventRef, void *);
void MusicBoxDialog (void)
{
OSStatus err;
IBNibRef nibRef;
if (!cartOpen)
return;
err = CreateNibReference(kMacS9XCFString, &nibRef);
if (err == noErr)
{
CFURLRef iconURL;
FSRef iconFSRef;
IconRef actIcon;
WindowRef tWindowRef;
actIcon = NULL;
if (musicboxmode == kMBXSoundEmulation)
iconURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("musicbox_ledoff"), CFSTR("icns"), NULL);
else
iconURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("musicbox_ledon" ), CFSTR("icns"), NULL);
if (iconURL)
{
if (CFURLGetFSRef(iconURL, &iconFSRef))
err = RegisterIconRefFromFSRef('~9X~', 'micn', &iconFSRef, &actIcon);
CFRelease(iconURL);
}
err = CreateWindowFromNib(nibRef, CFSTR("MusicBox"), &tWindowRef);
if (err == noErr)
{
EventHandlerRef mboxRef, paneRef;
EventHandlerUPP mboxUPP, paneUPP;
EventLoopTimerRef timeRef;
EventLoopTimerUPP timeUPP;
EventTypeSpec mboxEvents[] = { { kEventClassCommand, kEventCommandProcess },
{ kEventClassCommand, kEventCommandUpdateStatus } },
paneEvents[] = { { kEventClassControl, kEventControlDraw } };
CFStringRef sref;
CGDataProviderRef prov;
CGImageRef ipng;
CFURLRef iurl;
ControlButtonContentInfo info;
HIViewRef ctl, root, paneView, imageView, contentView;
HIViewID cid;
HIRect bounds;
Rect windowRect, barRect;
char drive[_MAX_DRIVE + 1], dir[_MAX_DIR + 1], fname[_MAX_FNAME + 1], ext[_MAX_EXT + 1];
mboxPause = false;
mbxFinished = false;
showIndicator = false;
headPressed = false;
stereo_switch = ~0;
spc_core->dsp_set_stereo_switch(stereo_switch);
for (int i = 0; i < MAC_MAX_PLAYERS; i++)
controlPad[i] = 0;
// 107's enhanced SPC player
root = HIViewGetRoot(tWindowRef);
cid.id = 0;
if (musicboxmode == kMBXSoundEmulation)
{
cid.signature = 'HEAD';
HIViewFindByID(root, cid, &ctl);
EnableControl(ctl);
SPCPlayFreeze();
}
else
MusicBoxForceFreeze();
cid.signature = 'Kart';
HIViewFindByID(root, cid, &ctl);
SetStaticTextTrunc(ctl, truncEnd, false);
_splitpath(Memory.ROMFilename, drive, dir, fname, ext);
sref = CFStringCreateWithCString(kCFAllocatorDefault, fname, kCFStringEncodingUTF8);
if (sref)
{
SetStaticTextCFString(ctl, sref, false);
CFRelease(sref);
}
ipng = NULL;
iurl = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("musicbox_indicator"), CFSTR("png"), NULL);
if (iurl)
{
prov = CGDataProviderCreateWithURL(iurl);
if (prov)
{
ipng = CGImageCreateWithPNGDataProvider(prov, NULL, false, kCGRenderingIntentDefault);
CGDataProviderRelease(prov);
}
CFRelease(iurl);
}
imageView = NULL;
if (ipng)
{
HIViewFindByID(root, kHIViewWindowContentID, &contentView);
err = HIImageViewCreate(ipng, &imageView);
if (err == noErr)
{
bounds = CGRectMake(30, 64, CGImageGetWidth(ipng), CGImageGetHeight(ipng));
HIViewSetFrame(imageView, &bounds);
HIImageViewSetOpaque(imageView, false);
HIViewSetVisible(imageView, true);
HIViewAddSubview(contentView, imageView);
cid.signature = 'iMaG';
SetControlID(imageView, &cid);
}
CGImageRelease(ipng);
}
cid.signature = 'Pane';
HIViewFindByID(root, cid, &paneView);
HIViewGetBounds(paneView, &bounds);
mbxViewWidth = bounds.size.width;
mbxViewHeight = bounds.size.height;
mbxMarginY = (mbxViewHeight - mbxBarHeight) / 2.0f;
mbxMarginX = (mbxViewWidth - ((mbxBarWidth * 8.0f + mbxBarSpace * 7.0f) * 2.0f + mbxLRSpace)) / 2.0f;
if (imageView)
{
HIViewSetZOrder(imageView, kHIViewZOrderBelow, paneView);
HIViewAddSubview(imageView, paneView);
}
if (systemVersion >= 0x1040)
{
info.contentType = kControlContentCGImageRef;
cid.signature = 'Paus';
HIViewFindByID(root, cid, &ctl);
info.u.imageRef = macIconImage[98];
err = SetBevelButtonContentInfo(ctl, &info);
cid.signature = 'HEAD';
HIViewFindByID(root, cid, &ctl);
info.u.imageRef = macIconImage[99];
err = SetBevelButtonContentInfo(ctl, &info);
cid.signature = 'S_EF';
HIViewFindByID(root, cid, &ctl);
info.u.imageRef = macIconImage[100];
err = SetBevelButtonContentInfo(ctl, &info);
}
#ifdef MAC_PANTHER_SUPPORT
else
{
info.contentType = kControlContentIconRef;
cid.signature = 'Paus';
HIViewFindByID(root, cid, &ctl);
info.u.iconRef = macIconRef[98];
err = SetBevelButtonContentInfo(ctl, &info);
cid.signature = 'HEAD';
HIViewFindByID(root, cid, &ctl);
info.u.iconRef = macIconRef[99];
err = SetBevelButtonContentInfo(ctl, &info);
cid.signature = 'S_EF';
HIViewFindByID(root, cid, &ctl);
info.u.iconRef = macIconRef[100];
err = SetBevelButtonContentInfo(ctl, &info);
}
#endif
cid.signature = 'Tr_i';
HIViewFindByID(root, cid, &ctl);
HIViewGetFrame(ctl, &bounds);
GetWindowBounds(tWindowRef, kWindowTitleBarRgn, &barRect);
mbxClosedHeight = (short) (bounds.origin.y + bounds.size.height + 7.0) + (barRect.bottom - barRect.top);
GetWindowBounds(tWindowRef, kWindowStructureRgn, &windowRect);
mbxOpenedHeight = windowRect.bottom - windowRect.top;
windowRect.bottom = windowRect.top + mbxClosedHeight;
SetWindowBounds(tWindowRef, kWindowStructureRgn, &windowRect);
paneUPP = NewEventHandlerUPP(IndicatorEventHandler);
err = InstallControlEventHandler(paneView, paneUPP, GetEventTypeCount(paneEvents), paneEvents, (void *) paneView, &paneRef);
mboxUPP = NewEventHandlerUPP(MusicBoxEventHandler);
err = InstallWindowEventHandler(tWindowRef, mboxUPP, GetEventTypeCount(mboxEvents), mboxEvents, (void *) tWindowRef, &mboxRef);
timeUPP = NewEventLoopTimerUPP(MusicBoxTimerHandler);
err = InstallEventLoopTimer(GetCurrentEventLoop(), kEventDurationNoWait, kEventDurationSecond * 2.0 / (double) Memory.ROMFramesPerSecond, timeUPP, (void *) paneView, &timeRef);
MusicBoxInitIndicator();
stopNow = false;
MacStartSound();
pthread_create(&mbxThread, NULL, SoundTask, NULL);
MoveWindowPosition(tWindowRef, kWindowMusicBox, true);
GetWindowBounds(tWindowRef, kWindowStructureRgn, &windowRect);
if (windowRect.bottom - windowRect.top > mbxClosedHeight)
{
showIndicator = true;
SetControl32BitValue(ctl, 1); // Tr_i
}
ShowWindow(tWindowRef);
err = RunAppModalLoopForWindow(tWindowRef);
HideWindow(tWindowRef);
SaveWindowPosition(tWindowRef, kWindowMusicBox);
stopNow = true;
pthread_join(mbxThread, NULL);
MacStopSound();
err = RemoveEventLoopTimer(timeRef);
DisposeEventLoopTimerUPP(timeUPP);
err = RemoveEventHandler(mboxRef);
DisposeEventHandlerUPP(mboxUPP);
err = RemoveEventHandler(paneRef);
DisposeEventHandlerUPP(paneUPP);
CFRelease(tWindowRef);
stereo_switch = ~0;
spc_core->dsp_set_stereo_switch(stereo_switch);
mbxFinished = true;
if (musicboxmode == kMBXSoundEmulation)
SPCPlayDefrost();
else
MusicBoxForceDefrost();
}
if (actIcon)
err = UnregisterIconRef('~9X~', 'micn');
DisposeNibReference(nibRef);
}
}
static pascal OSStatus MusicBoxEventHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *userData)
{
OSStatus err, result = eventNotHandledErr;
WindowRef tWindowRef = (WindowRef) userData;
switch (GetEventClass(inEvent))
{
case kEventClassCommand:
{
switch (GetEventKind(inEvent))
{
HICommand cmd;
case kEventCommandUpdateStatus:
{
err = GetEventParameter(inEvent, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
if (err == noErr && cmd.commandID == 'clos')
{
UpdateMenuCommandStatus(false);
result = noErr;
}
break;
}
case kEventCommandProcess:
{
err = GetEventParameter(inEvent, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd);
if (err == noErr)
{
HIViewRef root, c1, c2, c3, c4;
HIViewID cid;
Rect rct;
switch (cmd.commandID)
{
case 'bar1': stereo_switch ^= (1 << 0); result = noErr; break;
case 'bar2': stereo_switch ^= (1 << 1); result = noErr; break;
case 'bar3': stereo_switch ^= (1 << 2); result = noErr; break;
case 'bar4': stereo_switch ^= (1 << 3); result = noErr; break;
case 'bar5': stereo_switch ^= (1 << 4); result = noErr; break;
case 'bar6': stereo_switch ^= (1 << 5); result = noErr; break;
case 'bar7': stereo_switch ^= (1 << 6); result = noErr; break;
case 'bar8': stereo_switch ^= (1 << 7); result = noErr; break;
case 'bar9': stereo_switch ^= (1 << 8); result = noErr; break;
case 'bara': stereo_switch ^= (1 << 9); result = noErr; break;
case 'barb': stereo_switch ^= (1 << 10); result = noErr; break;
case 'barc': stereo_switch ^= (1 << 11); result = noErr; break;
case 'bard': stereo_switch ^= (1 << 12); result = noErr; break;
case 'bare': stereo_switch ^= (1 << 13); result = noErr; break;
case 'barf': stereo_switch ^= (1 << 14); result = noErr; break;
case 'bar0': stereo_switch ^= (1 << 15); result = noErr; break;
case 'Paus':
{
mboxPause = !mboxPause;
S9xSetSoundMute(mboxPause);
result = noErr;
break;
}
case 'Tr_i':
{
showIndicator = !showIndicator;
root = HIViewGetRoot(tWindowRef);
cid.id = 0;
cid.signature = 'Pane';
HIViewFindByID(root, cid, &c1);
HIViewSetVisible(c1, false);
cid.signature = 'iMaG';
HIViewFindByID(root, cid, &c2);
HIViewSetVisible(c2, false);
cid.signature = 'rCTL';
HIViewFindByID(root, cid, &c3);
HIViewSetVisible(c3, false);
cid.signature = 'bCTL';
HIViewFindByID(root, cid, &c4);
HIViewSetVisible(c4, false);
GetWindowBounds(tWindowRef, kWindowStructureRgn, &rct);
rct.bottom = rct.top + (showIndicator ? mbxOpenedHeight : mbxClosedHeight);
err = TransitionWindow(tWindowRef, kWindowSlideTransitionEffect, kWindowResizeTransitionAction, &rct);
HIViewSetVisible(c1, true);
HIViewSetVisible(c2, true);
HIViewSetVisible(c3, true);
HIViewSetVisible(c4, true);
result = noErr;
break;
}
case 'DONE':
{
QuitAppModalLoopForWindow(tWindowRef);
result = noErr;
break;
}
case 'HEAD':
{
headPressed = true;
result = noErr;
break;
}
case 'S_EF':
{
HideWindow(tWindowRef);
showIndicator = !showIndicator;
ConfigureSoundEffects();
showIndicator = !showIndicator;
ShowWindow(tWindowRef);
result = noErr;
}
}
spc_core->dsp_set_stereo_switch(stereo_switch);
}
}
}
}
}
return (result);
}
static void * SoundTask (void *)
{
static long long last;
long long curt;
Microseconds((UnsignedWide *) &last);
while (!stopNow)
{
if (!mboxPause)
{
if (musicboxmode == kMBXSoundEmulation)
SPCPlayExec();
else
S9xMainLoop();
}
if (headPressed)
{
showIndicator = !showIndicator;
SPCPlayDefrost();
showIndicator = !showIndicator;
headPressed = false;
}
last += (1000000 / Memory.ROMFramesPerSecond);
Microseconds((UnsignedWide *) &curt);
if (last > curt)
usleep((useconds_t) (last - curt));
}
return (NULL);
}
static void SPCPlayExec (void)
{
for (int v = 0; v < Timings.V_Max; v++)
{
CPU.Cycles = Timings.H_Max;
S9xAPUEndScanline();
CPU.Cycles = 0;
S9xAPUSetReferenceTime(0);
}
}
static void MusicBoxForceFreeze (void)
{
char filename[PATH_MAX + 1];
strcpy(filename, S9xGetFreezeFilename(999));
strcat(filename, ".tmp");
S9xFreezeGame(filename);
}
static void MusicBoxForceDefrost (void)
{
char filename[PATH_MAX + 1];
strcpy(filename, S9xGetFreezeFilename(999));
strcat(filename, ".tmp");
S9xUnfreezeGame(filename);
remove(filename);
}
static void SPCPlayFreeze (void)
{
oldCPUCycles = CPU.Cycles;
CPU.Cycles = Timings.H_Max;
S9xSetSoundMute(true);
S9xAPUSaveState(storedSoundSnapshot);
S9xSetSoundMute(false);
}
static void SPCPlayDefrost (void)
{
CPU.Cycles = oldCPUCycles;
S9xSetSoundMute(true);
S9xAPULoadState(storedSoundSnapshot);
S9xSetSoundMute(false);
}
static void MusicBoxInitIndicator (void)
{
long long currentTime;
Microseconds((UnsignedWide *) &currentTime);
for (int i = 0; i < 8; i++)
{
prevLMax[i] = prevRMax[i] = 0;
prevLVol[i] = prevRVol[i] = 0;
barTimeL[i] = barTimeR[i] = currentTime;
}
}
static pascal void MusicBoxTimerHandler (EventLoopTimerRef inHandlerCallRef, void *userData)
{
OSStatus err;
if (showIndicator)
err = HIViewSetNeedsDisplay((HIViewRef) userData, true);
}
static pascal OSStatus IndicatorEventHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *userData)
{
OSStatus err, result = eventNotHandledErr;
HIViewRef view = (HIViewRef) userData;
switch (GetEventClass(inEvent))
{
case kEventClassControl:
switch (GetEventKind(inEvent))
{
case kEventControlDraw:
CGContextRef ctx;
err = GetEventParameter(inEvent, kEventParamCGContextRef, typeCGContextRef, NULL, sizeof(CGContextRef), NULL, &ctx);
if (err == noErr)
{
HIRect bounds;
HIViewGetBounds(view, &bounds);
CGContextTranslateCTM(ctx, 0, bounds.size.height);
CGContextScaleCTM(ctx, 1.0f, -1.0f);
MusicBoxDrawIndicator(view, ctx);
result = noErr;
}
}
}
return (result);
}
static void MusicBoxDrawIndicator (HIViewRef view, CGContextRef mboxctx)
{
if (!showIndicator)
return;
// Bar
const float length[] = { 1.0f, 1.0f };
CGContextSetLineWidth(mboxctx, mbxBarWidth);
CGContextSetLineDash(mboxctx, 0, length, 2);
CGContextSetLineJoin(mboxctx, kCGLineJoinMiter);
CGContextBeginPath(mboxctx);
float x = mbxOffsetX + mbxMarginX + mbxBarWidth / 2.0f;
for (int h = 0; h < 8; h++)
{
// Inactive
CGContextSetRGBStrokeColor(mboxctx, (196.0f / 256.0f), (200.0f / 256.0f), (176.0f / 256.0f), 1.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + mbxBarHeight);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + mbxBarHeight);
CGContextStrokePath(mboxctx);
// Max
short vl = (spc_core->dsp_reg_value(h, 0x00) * spc_core->dsp_envx_value(h)) >> 11;
short vr = (spc_core->dsp_reg_value(h, 0x01) * spc_core->dsp_envx_value(h)) >> 11;
long long currentTime;
if (vl <= 0) vl = 0; else if (vl > 64) vl = 64; else vl = (short) (yyscale * sqrt((double) vl)) & (~0 << 1);
if (vr <= 0) vr = 0; else if (vr > 64) vr = 64; else vr = (short) (yyscale * sqrt((double) vr)) & (~0 << 1);
if (vl < prevLVol[h]) vl = ((prevLVol[h] + vl) >> 1);
if (vr < prevRVol[h]) vr = ((prevRVol[h] + vr) >> 1);
Microseconds((UnsignedWide *) &currentTime);
// left
if ((vl >= prevLMax[h]) && (vl > prevLVol[h]))
{
barTimeL[h] = currentTime;
prevLMax[h] = vl;
}
else
if ((prevLMax[h] > 0) && (barTimeL[h] + 1000000 > currentTime))
{
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (156.0f / 256.0f), (20.0f / 256.0f), (float) (barTimeL[h] + 1000000 - currentTime) / 1000000.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY + (float) (prevLMax[h] - 2));
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + (float) (prevLMax[h] ));
CGContextStrokePath(mboxctx);
}
else
prevLMax[h] = 0;
prevLVol[h] = vl;
// right
if ((vr >= prevRMax[h]) && (vr > prevRVol[h]))
{
barTimeR[h] = currentTime;
prevRMax[h] = vr;
}
else
if ((prevRMax[h] > 0) && (barTimeR[h] + 1000000 > currentTime))
{
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (156.0f / 256.0f), (20.0f / 256.0f), (float) (barTimeR[h] + 1000000 - currentTime) / 1000000.0f);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) (prevRMax[h] - 2));
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) (prevRMax[h] ));
CGContextStrokePath(mboxctx);
}
else
prevRMax[h] = 0;
prevRVol[h] = vr;
// Active
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (22.0f / 256.0f), (20.0f / 256.0f), 1.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + (float) vl);
CGContextStrokePath(mboxctx);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) vr);
CGContextStrokePath(mboxctx);
x += (mbxBarWidth + mbxBarSpace);
}
}

61
macosx/mac-musicbox.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
@ -194,6 +194,65 @@
#define kMBXSoundEmulation 1
#define kMBXWholeEmulation 2
@interface MusicBoxController : NSObject
{
IBOutlet id window;
IBOutlet id gametitle;
IBOutlet id disclosure;
IBOutlet id rewind;
IBOutlet id indicator;
IBOutlet id led;
float mbxClosedHeight,
mbxOpenedHeight;
NSTimer *timer;
pthread_t mbxThread;
}
- (id) init;
- (void) dealloc;
- (void) windowWillClose: (NSNotification *) aNotification;
- (NSWindow *) window;
- (IBAction) handlePauseButton: (id) sender;
- (IBAction) handleRewindButton: (id) sender;
- (IBAction) handleEffectButton: (id) sender;
- (IBAction) handleChannelButton: (id) sender;
- (IBAction) handleDisclosureButton: (id) sender;
- (void) updateIndicator: (NSTimer *) aTimer;
@end
@interface MusicBoxIndicatorView : NSView
{
float mbxOffsetX,
mbxOffsetY,
mbxBarWidth,
mbxBarHeight,
mbxBarSpace,
mbxLRSpace,
mbxRightBarX,
yyscale;
float mbxViewWidth,
mbxViewHeight,
mbxMarginX,
mbxMarginY;
short prevLMax[8],
prevRMax[8],
prevLVol[8],
prevRVol[8];
long long barTimeL[8],
barTimeR[8];
}
- (id) initWithFrame: (NSRect) frame;
- (void) drawRect: (NSRect) rect;
@end
extern volatile Boolean mboxPause;
void MusicBoxDialog (void);

646
macosx/mac-musicbox.mm Executable file
View File

@ -0,0 +1,646 @@
/***********************************************************************************
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
(c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com),
Jerremy Koot (jkoot@snes9x.com)
(c) Copyright 2002 - 2004 Matthew Kendora
(c) Copyright 2002 - 2005 Peter Bortas (peter@bortas.org)
(c) Copyright 2004 - 2005 Joel Yliluoma (http://iki.fi/bisqwit/)
(c) Copyright 2001 - 2006 John Weidman (jweidman@slip.net)
(c) Copyright 2002 - 2006 funkyass (funkyass@spam.shaw.ca),
Kris Bleakley (codeviolation@hotmail.com)
(c) Copyright 2002 - 2010 Brad Jorsch (anomie@users.sourceforge.net),
Nach (n-a-c-h@users.sourceforge.net),
zones (kasumitokoduck@yahoo.com)
(c) Copyright 2006 - 2007 nitsuja
(c) Copyright 2009 - 2010 BearOso,
OV2
BS-X C emulator code
(c) Copyright 2005 - 2006 Dreamer Nom,
zones
C4 x86 assembler and some C emulation code
(c) Copyright 2000 - 2003 _Demo_ (_demo_@zsnes.com),
Nach,
zsKnight (zsknight@zsnes.com)
C4 C++ code
(c) Copyright 2003 - 2006 Brad Jorsch,
Nach
DSP-1 emulator code
(c) Copyright 1998 - 2006 _Demo_,
Andreas Naive (andreasnaive@gmail.com),
Gary Henderson,
Ivar (ivar@snes9x.com),
John Weidman,
Kris Bleakley,
Matthew Kendora,
Nach,
neviksti (neviksti@hotmail.com)
DSP-2 emulator code
(c) Copyright 2003 John Weidman,
Kris Bleakley,
Lord Nightmare (lord_nightmare@users.sourceforge.net),
Matthew Kendora,
neviksti
DSP-3 emulator code
(c) Copyright 2003 - 2006 John Weidman,
Kris Bleakley,
Lancer,
z80 gaiden
DSP-4 emulator code
(c) Copyright 2004 - 2006 Dreamer Nom,
John Weidman,
Kris Bleakley,
Nach,
z80 gaiden
OBC1 emulator code
(c) Copyright 2001 - 2004 zsKnight,
pagefault (pagefault@zsnes.com),
Kris Bleakley
Ported from x86 assembler to C by sanmaiwashi
SPC7110 and RTC C++ emulator code used in 1.39-1.51
(c) Copyright 2002 Matthew Kendora with research by
zsKnight,
John Weidman,
Dark Force
SPC7110 and RTC C++ emulator code used in 1.52+
(c) Copyright 2009 byuu,
neviksti
S-DD1 C emulator code
(c) Copyright 2003 Brad Jorsch with research by
Andreas Naive,
John Weidman
S-RTC C emulator code
(c) Copyright 2001 - 2006 byuu,
John Weidman
ST010 C++ emulator code
(c) Copyright 2003 Feather,
John Weidman,
Kris Bleakley,
Matthew Kendora
Super FX x86 assembler emulator code
(c) Copyright 1998 - 2003 _Demo_,
pagefault,
zsKnight
Super FX C emulator code
(c) Copyright 1997 - 1999 Ivar,
Gary Henderson,
John Weidman
Sound emulator code used in 1.5-1.51
(c) Copyright 1998 - 2003 Brad Martin
(c) Copyright 1998 - 2006 Charles Bilyue'
Sound emulator code used in 1.52+
(c) Copyright 2004 - 2007 Shay Green (gblargg@gmail.com)
SH assembler code partly based on x86 assembler code
(c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
2xSaI filter
(c) Copyright 1999 - 2001 Derek Liauw Kie Fa
HQ2x, HQ3x, HQ4x filters
(c) Copyright 2003 Maxim Stepin (maxim@hiend3d.com)
NTSC filter
(c) Copyright 2006 - 2007 Shay Green
GTK+ GUI code
(c) Copyright 2004 - 2010 BearOso
Win32 GUI code
(c) Copyright 2003 - 2006 blip,
funkyass,
Matthew Kendora,
Nach,
nitsuja
(c) Copyright 2009 - 2010 OV2
Mac OS GUI code
(c) Copyright 1998 - 2001 John Stiles
(c) Copyright 2001 - 2010 zones
Specific ports contains the works of other authors. See headers in
individual files.
Snes9x homepage: http://www.snes9x.com/
Permission to use, copy, modify and/or distribute Snes9x in both binary
and source form, for non-commercial purposes, is hereby granted without
fee, providing that this license information and copyright notice appear
with all copies and any derived work.
This software is provided 'as-is', without any express or implied
warranty. In no event shall the authors be held liable for any damages
arising from the use of this software or it's derivatives.
Snes9x is freeware for PERSONAL USE only. Commercial users should
seek permission of the copyright holders first. Commercial use includes,
but is not limited to, charging money for Snes9x or software derived from
Snes9x, including Snes9x or derivatives in commercial game bundles, and/or
using Snes9x as a promotion for your commercial product.
The copyright holders request that bug fixes and improvements to the code
should be forwarded to them so everyone can benefit from the modifications
in future versions.
Super NES and Super Nintendo Entertainment System are trademarks of
Nintendo Co., Limited and its subsidiary companies.
***********************************************************************************/
/***********************************************************************************
SNES9X for Mac OS (c) Copyright John Stiles
Snes9x for Mac OS X
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
(c) Copyright 2004 - 2005 Steven Seeger
(c) Copyright 2005 Ryan Vogt
***********************************************************************************/
#import "snes9x.h"
#import "memmap.h"
#import "apu.h"
#import "snapshot.h"
#import <Cocoa/Cocoa.h>
#import <sys/time.h>
#import <pthread.h>
#import "mac-prefix.h"
#import "mac-audio.h"
#import "mac-file.h"
#import "mac-os.h"
#import "mac-musicbox.h"
volatile bool8 mboxPause = false;
static volatile bool8 stopNow, showIndicator, headPressed;
static int32 oldCPUCycles;
static uint16 stereo_switch;
static uint8 storedSoundSnapshot[SPC_SAVE_STATE_BLOCK_SIZE];
static void SPCPlayExec (void);
static void SPCPlayFreeze (void);
static void SPCPlayDefrost (void);
static void MusicBoxForceFreeze (void);
static void MusicBoxForceDefrost (void);
static void * SoundTask (void *);
@implementation MusicBoxController
- (id) init
{
NSUserDefaults *defaults;
NSString *s;
NSRect rect;
NSSize size;
BOOL apuonly, r;
char drive[_MAX_DRIVE + 1], dir[_MAX_DIR + 1], fname[_MAX_FNAME + 1], ext[_MAX_EXT + 1];
self = [super init];
if (!self)
return (self);
r = [NSBundle loadNibNamed: @"musicbox" owner: self];
if (!r)
return (self);
apuonly = (musicboxmode == kMBXSoundEmulation);
if (apuonly)
SPCPlayFreeze();
else
MusicBoxForceFreeze();
_splitpath(Memory.ROMFilename, drive, dir, fname, ext);
[gametitle setStringValue: [NSString stringWithUTF8String: fname]];
[led setImage: [NSImage imageNamed: (apuonly ? @"musicbox_ledoff.icns" : @"musicbox_ledon.icns")]];
if (!apuonly)
{
[rewind setState: NSOffState];
[rewind setEnabled: NO];
}
defaults = [NSUserDefaults standardUserDefaults];
s = [defaults stringForKey: @"frame_musicbox"];
if (s)
{
rect = NSRectFromString(s);
[window setFrame: rect display: NO];
}
if (!savewindowpos)
[window center];
size = [window minSize];
mbxClosedHeight = size.height;
size = [window maxSize];
mbxOpenedHeight = size.height;
rect = [window frame];
showIndicator = (rect.size.height > mbxClosedHeight) ? true : false;
[disclosure setState: (showIndicator ? NSOnState : NSOffState)];
[window makeKeyAndOrderFront: self];
mboxPause = false;
headPressed = false;
stereo_switch = ~0;
spc_core->dsp_set_stereo_switch(stereo_switch);
for (int i = 0; i < MAC_MAX_PLAYERS; i++)
controlPad[i] = 0;
stopNow = false;
MacStartSound();
pthread_create(&mbxThread, NULL, SoundTask, NULL);
timer = [[NSTimer scheduledTimerWithTimeInterval: (2.0 / (double) Memory.ROMFramesPerSecond) target: self selector: @selector(updateIndicator:) userInfo: nil repeats: YES] retain];
return (self);
}
- (void) windowWillClose: (NSNotification *) aNotification
{
NSUserDefaults *defaults;
NSString *s;
BOOL r;
[timer invalidate];
[timer release];
showIndicator = false;
stopNow = true;
pthread_join(mbxThread, NULL);
MacStopSound();
defaults = [NSUserDefaults standardUserDefaults];
s = NSStringFromRect([window frame]);
[defaults setObject: s forKey: @"frame_musicbox"];
r = [defaults synchronize];
[NSApp stopModal];
}
- (void) dealloc
{
stereo_switch = ~0;
spc_core->dsp_set_stereo_switch(stereo_switch);
if (musicboxmode == kMBXSoundEmulation)
SPCPlayDefrost();
else
MusicBoxForceDefrost();
[window release];
[super dealloc];
}
- (NSWindow *) window
{
return (window);
}
- (IBAction) handlePauseButton: (id) sender
{
mboxPause = !mboxPause;
S9xSetSoundMute(mboxPause);
}
- (IBAction) handleRewindButton: (id) sender
{
headPressed = true;
}
- (IBAction) handleEffectButton: (id) sender
{
[window orderOut: self];
showIndicator = false;
ConfigureSoundEffects();
showIndicator = true;
[window makeKeyAndOrderFront: self];
}
- (IBAction) handleChannelButton: (id) sender
{
stereo_switch ^= (1 << [sender tag]);
spc_core->dsp_set_stereo_switch(stereo_switch);
}
- (IBAction) handleDisclosureButton: (id) sender
{
NSRect rect;
float h;
showIndicator = !showIndicator;
rect = [window frame];
h = rect.size.height;
rect.size.height = showIndicator ? mbxOpenedHeight : mbxClosedHeight;
rect.origin.y += (h - rect.size.height);
[window setFrame: rect display: YES animate: YES];
}
- (void) updateIndicator: (NSTimer *) aTimer
{
if (showIndicator)
[indicator setNeedsDisplay: YES];
}
@end
@implementation MusicBoxIndicatorView
- (id) initWithFrame: (NSRect) frame
{
self = [super initWithFrame: frame];
if (self)
{
NSRect rect;
long long currentTime;
struct timeval tv;
mbxOffsetX = 0.0f;
mbxOffsetY = 0.0f;
mbxBarWidth = 12.0f;
mbxBarHeight = 128.0f;
mbxBarSpace = 2.0f;
mbxLRSpace = 20.0f;
mbxRightBarX = (mbxLRSpace + (mbxBarWidth * 8.0f + mbxBarSpace * 7.0f));
yyscale = (float) (128.0 / sqrt(64.0));
rect = [self bounds];
mbxViewWidth = rect.size.width;
mbxViewHeight = rect.size.height;
mbxMarginX = (mbxViewWidth - ((mbxBarWidth * 8.0f + mbxBarSpace * 7.0f) * 2.0f + mbxLRSpace)) / 2.0f;
mbxMarginY = (mbxViewHeight - mbxBarHeight) / 2.0f;
gettimeofday(&tv, NULL);
currentTime = tv.tv_sec * 1000000 + tv.tv_usec;
for (int i = 0; i < 8; i++)
{
prevLMax[i] = prevRMax[i] = 0;
prevLVol[i] = prevRVol[i] = 0;
barTimeL[i] = barTimeR[i] = currentTime;
}
}
return (self);
}
- (void) drawRect: (NSRect) rect
{
CGContextRef mboxctx;
mboxctx = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
// Bar
const float length[] = { 1.0f, 1.0f };
CGContextSetLineWidth(mboxctx, mbxBarWidth);
CGContextSetLineDash(mboxctx, 0, length, 2);
CGContextSetLineJoin(mboxctx, kCGLineJoinMiter);
CGContextBeginPath(mboxctx);
float x = mbxOffsetX + mbxMarginX + mbxBarWidth / 2.0f;
for (int h = 0; h < 8; h++)
{
// Inactive
CGContextSetRGBStrokeColor(mboxctx, (196.0f / 256.0f), (200.0f / 256.0f), (176.0f / 256.0f), 1.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + mbxBarHeight);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + mbxBarHeight);
CGContextStrokePath(mboxctx);
// Max
short vl = (spc_core->dsp_reg_value(h, 0x00) * spc_core->dsp_envx_value(h)) >> 11;
short vr = (spc_core->dsp_reg_value(h, 0x01) * spc_core->dsp_envx_value(h)) >> 11;
long long currentTime;
struct timeval tv;
if (vl <= 0) vl = 0; else if (vl > 64) vl = 64; else vl = (short) (yyscale * sqrt((double) vl)) & (~0 << 1);
if (vr <= 0) vr = 0; else if (vr > 64) vr = 64; else vr = (short) (yyscale * sqrt((double) vr)) & (~0 << 1);
if (vl < prevLVol[h]) vl = ((prevLVol[h] + vl) >> 1);
if (vr < prevRVol[h]) vr = ((prevRVol[h] + vr) >> 1);
gettimeofday(&tv, NULL);
currentTime = tv.tv_sec * 1000000 + tv.tv_usec;
// left
if ((vl >= prevLMax[h]) && (vl > prevLVol[h]))
{
barTimeL[h] = currentTime;
prevLMax[h] = vl;
}
else
if ((prevLMax[h] > 0) && (barTimeL[h] + 1000000 > currentTime))
{
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (156.0f / 256.0f), (20.0f / 256.0f), (float) (barTimeL[h] + 1000000 - currentTime) / 1000000.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY + (float) (prevLMax[h] - 2));
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + (float) (prevLMax[h] ));
CGContextStrokePath(mboxctx);
}
else
prevLMax[h] = 0;
prevLVol[h] = vl;
// right
if ((vr >= prevRMax[h]) && (vr > prevRVol[h]))
{
barTimeR[h] = currentTime;
prevRMax[h] = vr;
}
else
if ((prevRMax[h] > 0) && (barTimeR[h] + 1000000 > currentTime))
{
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (156.0f / 256.0f), (20.0f / 256.0f), (float) (barTimeR[h] + 1000000 - currentTime) / 1000000.0f);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) (prevRMax[h] - 2));
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) (prevRMax[h] ));
CGContextStrokePath(mboxctx);
}
else
prevRMax[h] = 0;
prevRVol[h] = vr;
// Active
CGContextSetRGBStrokeColor(mboxctx, (22.0f / 256.0f), (22.0f / 256.0f), (20.0f / 256.0f), 1.0f);
CGContextMoveToPoint (mboxctx, x, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x, mbxOffsetY + mbxMarginY + (float) vl);
CGContextStrokePath(mboxctx);
CGContextMoveToPoint (mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY);
CGContextAddLineToPoint(mboxctx, x + mbxRightBarX, mbxOffsetY + mbxMarginY + (float) vr);
CGContextStrokePath(mboxctx);
x += (mbxBarWidth + mbxBarSpace);
}
}
@end
static void * SoundTask (void *)
{
long long last, curr;
struct timeval tv;
gettimeofday(&tv, NULL);
last = tv.tv_sec * 1000000 + tv.tv_usec;
while (!stopNow)
{
if (!mboxPause)
{
if (musicboxmode == kMBXSoundEmulation)
SPCPlayExec();
else
S9xMainLoop();
}
if (headPressed)
{
showIndicator = false;
SPCPlayDefrost();
showIndicator = true;
headPressed = false;
}
last += (1000000 / Memory.ROMFramesPerSecond);
gettimeofday(&tv, NULL);
curr = tv.tv_sec * 1000000 + tv.tv_usec;
if (last > curr)
usleep((useconds_t) (last - curr));
}
return (NULL);
}
static void SPCPlayExec (void)
{
for (int v = 0; v < Timings.V_Max; v++)
{
CPU.Cycles = Timings.H_Max;
S9xAPUEndScanline();
CPU.Cycles = 0;
S9xAPUSetReferenceTime(0);
}
}
static void MusicBoxForceFreeze (void)
{
char filename[PATH_MAX + 1];
strcpy(filename, S9xGetFreezeFilename(999));
strcat(filename, ".tmp");
S9xFreezeGame(filename);
}
static void MusicBoxForceDefrost (void)
{
char filename[PATH_MAX + 1];
strcpy(filename, S9xGetFreezeFilename(999));
strcat(filename, ".tmp");
S9xUnfreezeGame(filename);
remove(filename);
}
static void SPCPlayFreeze (void)
{
oldCPUCycles = CPU.Cycles;
S9xSetSoundMute(true);
S9xAPUSaveState(storedSoundSnapshot);
S9xSetSoundMute(false);
}
static void SPCPlayDefrost (void)
{
CPU.Cycles = oldCPUCycles;
S9xSetSoundMute(true);
S9xAPULoadState(storedSoundSnapshot);
S9xSetSoundMute(false);
}
void MusicBoxDialog (void)
{
MusicBoxController *controller;
NSAutoreleasePool *pool;
if (!cartOpen)
return;
pool = [[NSAutoreleasePool alloc] init];
controller = [[MusicBoxController alloc] init];
[pool release];
if (!controller)
return;
[NSApp runModalForWindow: [controller window]];
pool = [[NSAutoreleasePool alloc] init];
[controller release];
[pool release];
}

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
@ -204,7 +204,6 @@ enum
kWindowPreferences,
kWindowAbout,
kWindowAutoFire,
kWindowMusicBox,
kWindowRomInfo,
kWindowCheatFinder,
kWindowKeyConfig,

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
@ -196,7 +196,7 @@
#define kMacS9XCFString CFSTR("Snes9x")
#define MAC_VERSION "102"
#define MAC_VERSION "112"
#include <Carbon/Carbon.h>

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
@ -361,9 +361,9 @@ static PrefList prefList[] =
{ 'chea', &applycheat, sizeof(bool8 ) },
{ 'ARec', autofireRec, sizeof(autofireRec) },
{ 'WPos', windowPos, sizeof(windowPos ) },
{ 'WSiz', windowSize, sizeof(windowSize ) },
{ 'WExt', (void *) &windowExtend, sizeof(bool8 ) },
{ 'wPos', windowPos, sizeof(windowPos ) },
{ 'wSiz', windowSize, sizeof(windowSize ) },
{ 'wExt', (void *) &windowExtend, sizeof(bool8 ) },
{ 'NPIP', npServerIP, sizeof(npServerIP ) },
{ 'NPNM', npName, sizeof(npName ) },

2
macosx/mac-prefs.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-stringtools.cpp Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

2
macosx/mac-stringtools.h Normal file → Executable file
View File

@ -179,7 +179,7 @@
Snes9x for Mac OS X
(c) Copyright 2001 - 2010 zones
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander

BIN
macosx/musicbox_effect.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 729 B

BIN
macosx/musicbox_pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

BIN
macosx/musicbox_rewind.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

View File

@ -174,7 +174,7 @@
CF047DE8109D0E0600FD0754 /* s9x-jma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F007609F76001BAB8B /* s9x-jma.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF047DE9109D0E0600FD0754 /* winout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F207609F76001BAB8B /* winout.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF047DEA109D0E0600FD0754 /* mac-appleevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EACDDBB004D6A89700A80003 /* mac-appleevent.cpp */; };
CF047DEB109D0E0600FD0754 /* mac-audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.cpp */; };
CF047DEB109D0E0600FD0754 /* mac-audio.mm in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.mm */; };
CF047DEC109D0E0600FD0754 /* mac-cart.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67004AC7FCE00A80003 /* mac-cart.mm */; };
CF047DED109D0E0600FD0754 /* mac-cheat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67204AC7FCE00A80003 /* mac-cheat.cpp */; };
CF047DEE109D0E0600FD0754 /* mac-cheatfinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67404AC7FCE00A80003 /* mac-cheatfinder.cpp */; };
@ -188,7 +188,7 @@
CF047DF6109D0E0600FD0754 /* mac-joypad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67B04AC7FCE00A80003 /* mac-joypad.cpp */; };
CF047DF7109D0E0600FD0754 /* mac-keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67D04AC7FCE00A80003 /* mac-keyboard.cpp */; };
CF047DF8109D0E0600FD0754 /* mac-multicart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA26BBD50B3676E800A570B5 /* mac-multicart.cpp */; };
CF047DF9109D0E0600FD0754 /* mac-musicbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.cpp */; };
CF047DF9109D0E0600FD0754 /* mac-musicbox.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.mm */; };
CF047DFA109D0E0600FD0754 /* mac-netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA1605500639E735004412AB /* mac-netplay.cpp */; };
CF047DFB109D0E0600FD0754 /* mac-os.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96604D582B700A80003 /* mac-os.mm */; };
CF047DFC109D0E0600FD0754 /* mac-prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96B04D584B700A80003 /* mac-prefs.cpp */; };
@ -357,7 +357,7 @@
CF0567350CF98E7E00C7877C /* s9x-jma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F007609F76001BAB8B /* s9x-jma.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF0567360CF98E7E00C7877C /* winout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F207609F76001BAB8B /* winout.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF0567380CF98E7E00C7877C /* mac-appleevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EACDDBB004D6A89700A80003 /* mac-appleevent.cpp */; };
CF0567390CF98E7E00C7877C /* mac-audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.cpp */; };
CF0567390CF98E7E00C7877C /* mac-audio.mm in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.mm */; };
CF05673B0CF98E7E00C7877C /* mac-cart.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67004AC7FCE00A80003 /* mac-cart.mm */; };
CF05673C0CF98E7E00C7877C /* mac-cheat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67204AC7FCE00A80003 /* mac-cheat.cpp */; };
CF05673D0CF98E7E00C7877C /* mac-cheatfinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67404AC7FCE00A80003 /* mac-cheatfinder.cpp */; };
@ -371,7 +371,7 @@
CF0567470CF98E7E00C7877C /* mac-joypad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67B04AC7FCE00A80003 /* mac-joypad.cpp */; };
CF0567480CF98E7E00C7877C /* mac-keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67D04AC7FCE00A80003 /* mac-keyboard.cpp */; };
CF0567490CF98E7E00C7877C /* mac-multicart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA26BBD50B3676E800A570B5 /* mac-multicart.cpp */; };
CF05674A0CF98E7E00C7877C /* mac-musicbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.cpp */; };
CF05674A0CF98E7E00C7877C /* mac-musicbox.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.mm */; };
CF05674B0CF98E7E00C7877C /* mac-netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA1605500639E735004412AB /* mac-netplay.cpp */; };
CF05674C0CF98E7E00C7877C /* mac-os.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96604D582B700A80003 /* mac-os.mm */; };
CF05674D0CF98E7E00C7877C /* mac-prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96B04D584B700A80003 /* mac-prefs.cpp */; };
@ -564,7 +564,7 @@
CF2F46C21095EE72007D33FA /* s9x-jma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F007609F76001BAB8B /* s9x-jma.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF2F46C31095EE72007D33FA /* winout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAA7B5F207609F76001BAB8B /* winout.cpp */; settings = {COMPILER_FLAGS = "-fexceptions"; }; };
CF2F46C41095EE72007D33FA /* mac-appleevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EACDDBB004D6A89700A80003 /* mac-appleevent.cpp */; };
CF2F46C51095EE72007D33FA /* mac-audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.cpp */; };
CF2F46C51095EE72007D33FA /* mac-audio.mm in Sources */ = {isa = PBXBuildFile; fileRef = EADE6347052E5C4300A80003 /* mac-audio.mm */; };
CF2F46C61095EE72007D33FA /* mac-cart.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67004AC7FCE00A80003 /* mac-cart.mm */; };
CF2F46C71095EE72007D33FA /* mac-cheat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67204AC7FCE00A80003 /* mac-cheat.cpp */; };
CF2F46C81095EE72007D33FA /* mac-cheatfinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67404AC7FCE00A80003 /* mac-cheatfinder.cpp */; };
@ -578,7 +578,7 @@
CF2F46D01095EE72007D33FA /* mac-joypad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67B04AC7FCE00A80003 /* mac-joypad.cpp */; };
CF2F46D11095EE72007D33FA /* mac-keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67D04AC7FCE00A80003 /* mac-keyboard.cpp */; };
CF2F46D21095EE72007D33FA /* mac-multicart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA26BBD50B3676E800A570B5 /* mac-multicart.cpp */; };
CF2F46D31095EE72007D33FA /* mac-musicbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.cpp */; };
CF2F46D31095EE72007D33FA /* mac-musicbox.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAECB67F04AC7FCE00A80003 /* mac-musicbox.mm */; };
CF2F46D41095EE72007D33FA /* mac-netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA1605500639E735004412AB /* mac-netplay.cpp */; };
CF2F46D51095EE72007D33FA /* mac-os.mm in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96604D582B700A80003 /* mac-os.mm */; };
CF2F46D61095EE72007D33FA /* mac-prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAE0E96B04D584B700A80003 /* mac-prefs.cpp */; };
@ -651,6 +651,12 @@
CF37579110A6AEA1001BF7C5 /* SPC_DSP.h in Headers */ = {isa = PBXBuildFile; fileRef = CF37575B10A6AEA1001BF7C5 /* SPC_DSP.h */; };
CF37579210A6AEA1001BF7C5 /* SPC_Filter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF37575C10A6AEA1001BF7C5 /* SPC_Filter.cpp */; };
CF37579310A6AEA1001BF7C5 /* SPC_Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = CF37575D10A6AEA1001BF7C5 /* SPC_Filter.h */; };
CF46BEAA133E2559005A17A5 /* musicbox.xib in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEA8133E2559005A17A5 /* musicbox.xib */; };
CF46BEAB133E2559005A17A5 /* musicbox.xib in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEA8133E2559005A17A5 /* musicbox.xib */; };
CF46BEAC133E2559005A17A5 /* musicbox.xib in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEA8133E2559005A17A5 /* musicbox.xib */; };
CF46BEAE133E256D005A17A5 /* musicbox_pause.png in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEAD133E256D005A17A5 /* musicbox_pause.png */; };
CF46BEAF133E256D005A17A5 /* musicbox_pause.png in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEAD133E256D005A17A5 /* musicbox_pause.png */; };
CF46BEB0133E256D005A17A5 /* musicbox_pause.png in Resources */ = {isa = PBXBuildFile; fileRef = CF46BEAD133E256D005A17A5 /* musicbox_pause.png */; };
CF5553C90EA24C36005957E4 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF5553B10EA24C36005957E4 /* 2xsai.cpp */; };
CF5553CA0EA24C36005957E4 /* 2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = CF5553B20EA24C36005957E4 /* 2xsai.h */; };
CF5553CB0EA24C36005957E4 /* blit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF5553B30EA24C36005957E4 /* blit.cpp */; };
@ -675,6 +681,12 @@
CFAEC7E11113149B00E0A846 /* linear_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAEC7DD1113149B00E0A846 /* linear_resampler.h */; };
CFAEC7E21113149B00E0A846 /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAEC7DC1113149B00E0A846 /* hermite_resampler.h */; };
CFAEC7E31113149B00E0A846 /* linear_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = CFAEC7DD1113149B00E0A846 /* linear_resampler.h */; };
CFCE2D47133F591900DF6C4E /* musicbox_effect.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D45133F591900DF6C4E /* musicbox_effect.png */; };
CFCE2D48133F591900DF6C4E /* musicbox_rewind.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D46133F591900DF6C4E /* musicbox_rewind.png */; };
CFCE2D49133F591900DF6C4E /* musicbox_effect.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D45133F591900DF6C4E /* musicbox_effect.png */; };
CFCE2D4A133F591900DF6C4E /* musicbox_rewind.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D46133F591900DF6C4E /* musicbox_rewind.png */; };
CFCE2D4B133F591900DF6C4E /* musicbox_effect.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D45133F591900DF6C4E /* musicbox_effect.png */; };
CFCE2D4C133F591900DF6C4E /* musicbox_rewind.png in Resources */ = {isa = PBXBuildFile; fileRef = CFCE2D46133F591900DF6C4E /* musicbox_rewind.png */; };
CFE7FBB10D2F6755002F3102 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAE061710526CCB900A80003 /* debug.cpp */; };
CFE7FBB40D2F67BA002F3102 /* fxemu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAE0617C0526CCB900A80003 /* fxemu.cpp */; };
CFE7FBB80D2F683C002F3102 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = EA6E6C0E08F9734500CB3555 /* debug.h */; };
@ -723,6 +735,8 @@
CF37575B10A6AEA1001BF7C5 /* SPC_DSP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPC_DSP.h; sourceTree = "<group>"; };
CF37575C10A6AEA1001BF7C5 /* SPC_Filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SPC_Filter.cpp; sourceTree = "<group>"; };
CF37575D10A6AEA1001BF7C5 /* SPC_Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPC_Filter.h; sourceTree = "<group>"; };
CF46BEA9133E2559005A17A5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/musicbox.xib; sourceTree = "<group>"; };
CF46BEAD133E256D005A17A5 /* musicbox_pause.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicbox_pause.png; sourceTree = "<group>"; };
CF4B7C420CF841580080E643 /* icons.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icons.png; sourceTree = "<group>"; };
CF5553B10EA24C36005957E4 /* 2xsai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = 2xsai.cpp; sourceTree = "<group>"; };
CF5553B20EA24C36005957E4 /* 2xsai.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = 2xsai.h; sourceTree = "<group>"; };
@ -746,6 +760,8 @@
CFA82C3E0F1B43A60089C17F /* srtcemu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = srtcemu.cpp; sourceTree = "<group>"; };
CFAEC7DC1113149B00E0A846 /* hermite_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hermite_resampler.h; sourceTree = "<group>"; };
CFAEC7DD1113149B00E0A846 /* linear_resampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linear_resampler.h; sourceTree = "<group>"; };
CFCE2D45133F591900DF6C4E /* musicbox_effect.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicbox_effect.png; sourceTree = "<group>"; };
CFCE2D46133F591900DF6C4E /* musicbox_rewind.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = musicbox_rewind.png; sourceTree = "<group>"; };
CFEFAE8A10EAC92300FB081A /* snes_ntsc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = snes_ntsc.c; sourceTree = "<group>"; };
CFEFAE8E10EAC92B00FB081A /* snes_ntsc_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snes_ntsc_config.h; sourceTree = "<group>"; };
CFEFAE8F10EAC92B00FB081A /* snes_ntsc_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snes_ntsc_impl.h; sourceTree = "<group>"; };
@ -841,7 +857,7 @@
EAC5E47003D2D9C800A80004 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
EACDDBB004D6A89700A80003 /* mac-appleevent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = "mac-appleevent.cpp"; sourceTree = "<group>"; };
EAD978980555059300E8BBFD /* mac-global_prefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-global_prefix.h"; sourceTree = "<group>"; };
EADE6347052E5C4300A80003 /* mac-audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = "mac-audio.cpp"; sourceTree = "<group>"; };
EADE6347052E5C4300A80003 /* mac-audio.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = "mac-audio.mm"; sourceTree = "<group>"; };
EADE6349052E5C5300A80003 /* mac-audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-audio.h"; sourceTree = "<group>"; };
EADE634B052E5D3600A80003 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
EADE634C052E5D3600A80003 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
@ -922,7 +938,7 @@
EAECB67C04AC7FCE00A80003 /* mac-joypad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-joypad.h"; sourceTree = "<group>"; };
EAECB67D04AC7FCE00A80003 /* mac-keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = "mac-keyboard.cpp"; sourceTree = "<group>"; };
EAECB67E04AC7FCE00A80003 /* mac-keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-keyboard.h"; sourceTree = "<group>"; };
EAECB67F04AC7FCE00A80003 /* mac-musicbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = "mac-musicbox.cpp"; sourceTree = "<group>"; };
EAECB67F04AC7FCE00A80003 /* mac-musicbox.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; path = "mac-musicbox.mm"; sourceTree = "<group>"; };
EAECB68004AC7FCE00A80003 /* mac-musicbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-musicbox.h"; sourceTree = "<group>"; };
EAECB68204AC7FCE00A80003 /* mac-os.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-os.h"; sourceTree = "<group>"; };
EAECB68304AC7FCE00A80003 /* mac-prefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = "mac-prefix.h"; sourceTree = "<group>"; };
@ -1268,7 +1284,7 @@
EAD978980555059300E8BBFD /* mac-global_prefix.h */,
EA362C3E086119D100FBE476 /* HID_Utilities_External.h */,
EACDDBB004D6A89700A80003 /* mac-appleevent.cpp */,
EADE6347052E5C4300A80003 /* mac-audio.cpp */,
EADE6347052E5C4300A80003 /* mac-audio.mm */,
EAECB67004AC7FCE00A80003 /* mac-cart.mm */,
EAECB67204AC7FCE00A80003 /* mac-cheat.cpp */,
EAECB67404AC7FCE00A80003 /* mac-cheatfinder.cpp */,
@ -1282,7 +1298,7 @@
EAECB67B04AC7FCE00A80003 /* mac-joypad.cpp */,
EAECB67D04AC7FCE00A80003 /* mac-keyboard.cpp */,
EA26BBD50B3676E800A570B5 /* mac-multicart.cpp */,
EAECB67F04AC7FCE00A80003 /* mac-musicbox.cpp */,
EAECB67F04AC7FCE00A80003 /* mac-musicbox.mm */,
EA1605500639E735004412AB /* mac-netplay.cpp */,
EAE0E96604D582B700A80003 /* mac-os.mm */,
EAE0E96B04D584B700A80003 /* mac-prefs.cpp */,
@ -1302,12 +1318,16 @@
EA3D300B0A260A3200BDACCC /* logo_freeze.png */,
EA3D300C0A260A3200BDACCC /* logo_defrost.png */,
EA3D300A0A260A3200BDACCC /* musicbox_indicator.png */,
CF46BEAD133E256D005A17A5 /* musicbox_pause.png */,
CFCE2D46133F591900DF6C4E /* musicbox_rewind.png */,
CFCE2D45133F591900DF6C4E /* musicbox_effect.png */,
EA3D2F380A26083B00BDACCC /* musicbox_ledon.icns */,
EA3D2F390A26083B00BDACCC /* musicbox_ledoff.icns */,
EA85C3560B4ECBD900F5F9C9 /* freeze_defrost.aiff */,
EA3BEA9E0A28384E00A8FAE5 /* InfoPlist.strings */,
EA3BEA980A28384E00A8FAE5 /* Localizable.strings */,
CF14733C132DA4E1000D0F91 /* Snes9x.xib */,
CF46BEA8133E2559005A17A5 /* musicbox.xib */,
EA3BEAA80A28386500A8FAE5 /* Snes9x Help */,
EA3D2F580A26085800BDACCC /* libHIDUtilities_u.a */,
CF10B8EF0F63BF8A009C81CD /* libz_u.a */,
@ -1371,6 +1391,8 @@
CF37577310A6AEA1001BF7C5 /* blargg_config.h in Headers */,
CF37577410A6AEA1001BF7C5 /* blargg_endian.h in Headers */,
CF37577510A6AEA1001BF7C5 /* blargg_source.h in Headers */,
CFAEC7E01113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7E11113149B00E0A846 /* linear_resampler.h in Headers */,
CF37577710A6AEA1001BF7C5 /* resampler.h in Headers */,
CF37577810A6AEA1001BF7C5 /* ring_buffer.h in Headers */,
CF37577A10A6AEA1001BF7C5 /* SNES_SPC.h in Headers */,
@ -1433,8 +1455,6 @@
CF047D97109D0E0600FD0754 /* mac-prefix.h in Headers */,
CF047D98109D0E0600FD0754 /* mac-global_prefix.h in Headers */,
CF047D99109D0E0600FD0754 /* HID_Utilities_External.h in Headers */,
CFAEC7E01113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7E11113149B00E0A846 /* linear_resampler.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1488,6 +1508,8 @@
CF37578510A6AEA1001BF7C5 /* blargg_config.h in Headers */,
CF37578610A6AEA1001BF7C5 /* blargg_endian.h in Headers */,
CF37578710A6AEA1001BF7C5 /* blargg_source.h in Headers */,
CFAEC7DE1113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7DF1113149B00E0A846 /* linear_resampler.h in Headers */,
CF37578910A6AEA1001BF7C5 /* resampler.h in Headers */,
CF37578A10A6AEA1001BF7C5 /* ring_buffer.h in Headers */,
CF37578C10A6AEA1001BF7C5 /* SNES_SPC.h in Headers */,
@ -1550,8 +1572,6 @@
CF0566EC0CF98E7E00C7877C /* mac-prefix.h in Headers */,
CF0566ED0CF98E7E00C7877C /* mac-global_prefix.h in Headers */,
CF0566EE0CF98E7E00C7877C /* HID_Utilities_External.h in Headers */,
CFAEC7DE1113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7DF1113149B00E0A846 /* linear_resampler.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1605,6 +1625,8 @@
CF37576110A6AEA1001BF7C5 /* blargg_config.h in Headers */,
CF37576210A6AEA1001BF7C5 /* blargg_endian.h in Headers */,
CF37576310A6AEA1001BF7C5 /* blargg_source.h in Headers */,
CFAEC7E21113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7E31113149B00E0A846 /* linear_resampler.h in Headers */,
CF37576510A6AEA1001BF7C5 /* resampler.h in Headers */,
CF37576610A6AEA1001BF7C5 /* ring_buffer.h in Headers */,
CF37576810A6AEA1001BF7C5 /* SNES_SPC.h in Headers */,
@ -1667,8 +1689,6 @@
CF2F46711095EE72007D33FA /* mac-prefix.h in Headers */,
CF2F46721095EE72007D33FA /* mac-global_prefix.h in Headers */,
CF2F46731095EE72007D33FA /* HID_Utilities_External.h in Headers */,
CFAEC7E21113149B00E0A846 /* hermite_resampler.h in Headers */,
CFAEC7E31113149B00E0A846 /* linear_resampler.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1772,13 +1792,17 @@
CF047DA1109D0E0600FD0754 /* icons.png in Resources */,
CF047DA2109D0E0600FD0754 /* logo_freeze.png in Resources */,
CF047DA3109D0E0600FD0754 /* logo_defrost.png in Resources */,
CF047DA6109D0E0600FD0754 /* musicbox_indicator.png in Resources */,
CF46BEAF133E256D005A17A5 /* musicbox_pause.png in Resources */,
CFCE2D4A133F591900DF6C4E /* musicbox_rewind.png in Resources */,
CFCE2D49133F591900DF6C4E /* musicbox_effect.png in Resources */,
CF047DA4109D0E0600FD0754 /* musicbox_ledon.icns in Resources */,
CF047DA5109D0E0600FD0754 /* musicbox_ledoff.icns in Resources */,
CF047DA6109D0E0600FD0754 /* musicbox_indicator.png in Resources */,
CF047DA7109D0E0600FD0754 /* freeze_defrost.aiff in Resources */,
CF047DA8109D0E0600FD0754 /* InfoPlist.strings in Resources */,
CF047DA9109D0E0600FD0754 /* Localizable.strings in Resources */,
CF14733F132DA4E1000D0F91 /* Snes9x.xib in Resources */,
CF46BEAB133E2559005A17A5 /* musicbox.xib in Resources */,
CF047DAB109D0E0600FD0754 /* Snes9x Help in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1796,13 +1820,17 @@
CF0566F60CF98E7E00C7877C /* icons.png in Resources */,
CF0566F70CF98E7E00C7877C /* logo_freeze.png in Resources */,
CF0566F80CF98E7E00C7877C /* logo_defrost.png in Resources */,
CF0566FB0CF98E7E00C7877C /* musicbox_indicator.png in Resources */,
CF46BEAE133E256D005A17A5 /* musicbox_pause.png in Resources */,
CFCE2D48133F591900DF6C4E /* musicbox_rewind.png in Resources */,
CFCE2D47133F591900DF6C4E /* musicbox_effect.png in Resources */,
CF0566F90CF98E7E00C7877C /* musicbox_ledon.icns in Resources */,
CF0566FA0CF98E7E00C7877C /* musicbox_ledoff.icns in Resources */,
CF0566FB0CF98E7E00C7877C /* musicbox_indicator.png in Resources */,
CF0566FC0CF98E7E00C7877C /* freeze_defrost.aiff in Resources */,
CF0566FD0CF98E7E00C7877C /* InfoPlist.strings in Resources */,
CF0566FE0CF98E7E00C7877C /* Localizable.strings in Resources */,
CF147340132DA4E1000D0F91 /* Snes9x.xib in Resources */,
CF46BEAA133E2559005A17A5 /* musicbox.xib in Resources */,
CF0567000CF98E7E00C7877C /* Snes9x Help in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1820,13 +1848,17 @@
CF2F467B1095EE72007D33FA /* icons.png in Resources */,
CF2F467C1095EE72007D33FA /* logo_freeze.png in Resources */,
CF2F467D1095EE72007D33FA /* logo_defrost.png in Resources */,
CF2F46801095EE72007D33FA /* musicbox_indicator.png in Resources */,
CF46BEB0133E256D005A17A5 /* musicbox_pause.png in Resources */,
CFCE2D4C133F591900DF6C4E /* musicbox_rewind.png in Resources */,
CFCE2D4B133F591900DF6C4E /* musicbox_effect.png in Resources */,
CF2F467E1095EE72007D33FA /* musicbox_ledon.icns in Resources */,
CF2F467F1095EE72007D33FA /* musicbox_ledoff.icns in Resources */,
CF2F46801095EE72007D33FA /* musicbox_indicator.png in Resources */,
CF2F46811095EE72007D33FA /* freeze_defrost.aiff in Resources */,
CF2F46821095EE72007D33FA /* InfoPlist.strings in Resources */,
CF2F46831095EE72007D33FA /* Localizable.strings in Resources */,
CF14733E132DA4E1000D0F91 /* Snes9x.xib in Resources */,
CF46BEAC133E2559005A17A5 /* musicbox.xib in Resources */,
CF2F46851095EE72007D33FA /* Snes9x Help in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1926,7 +1958,7 @@
CF047DE8109D0E0600FD0754 /* s9x-jma.cpp in Sources */,
CF047DE9109D0E0600FD0754 /* winout.cpp in Sources */,
CF047DEA109D0E0600FD0754 /* mac-appleevent.cpp in Sources */,
CF047DEB109D0E0600FD0754 /* mac-audio.cpp in Sources */,
CF047DEB109D0E0600FD0754 /* mac-audio.mm in Sources */,
CF047DEC109D0E0600FD0754 /* mac-cart.mm in Sources */,
CF047DED109D0E0600FD0754 /* mac-cheat.cpp in Sources */,
CF047DEE109D0E0600FD0754 /* mac-cheatfinder.cpp in Sources */,
@ -1940,7 +1972,7 @@
CF047DF6109D0E0600FD0754 /* mac-joypad.cpp in Sources */,
CF047DF7109D0E0600FD0754 /* mac-keyboard.cpp in Sources */,
CF047DF8109D0E0600FD0754 /* mac-multicart.cpp in Sources */,
CF047DF9109D0E0600FD0754 /* mac-musicbox.cpp in Sources */,
CF047DF9109D0E0600FD0754 /* mac-musicbox.mm in Sources */,
CF047DFA109D0E0600FD0754 /* mac-netplay.cpp in Sources */,
CF047DFB109D0E0600FD0754 /* mac-os.mm in Sources */,
CF047DFC109D0E0600FD0754 /* mac-prefs.cpp in Sources */,
@ -2021,7 +2053,7 @@
CF0567350CF98E7E00C7877C /* s9x-jma.cpp in Sources */,
CF0567360CF98E7E00C7877C /* winout.cpp in Sources */,
CF0567380CF98E7E00C7877C /* mac-appleevent.cpp in Sources */,
CF0567390CF98E7E00C7877C /* mac-audio.cpp in Sources */,
CF0567390CF98E7E00C7877C /* mac-audio.mm in Sources */,
CF05673B0CF98E7E00C7877C /* mac-cart.mm in Sources */,
CF05673C0CF98E7E00C7877C /* mac-cheat.cpp in Sources */,
CF05673D0CF98E7E00C7877C /* mac-cheatfinder.cpp in Sources */,
@ -2035,7 +2067,7 @@
CF0567470CF98E7E00C7877C /* mac-joypad.cpp in Sources */,
CF0567480CF98E7E00C7877C /* mac-keyboard.cpp in Sources */,
CF0567490CF98E7E00C7877C /* mac-multicart.cpp in Sources */,
CF05674A0CF98E7E00C7877C /* mac-musicbox.cpp in Sources */,
CF05674A0CF98E7E00C7877C /* mac-musicbox.mm in Sources */,
CF05674B0CF98E7E00C7877C /* mac-netplay.cpp in Sources */,
CF05674C0CF98E7E00C7877C /* mac-os.mm in Sources */,
CF05674D0CF98E7E00C7877C /* mac-prefs.cpp in Sources */,
@ -2116,7 +2148,7 @@
CF2F46C21095EE72007D33FA /* s9x-jma.cpp in Sources */,
CF2F46C31095EE72007D33FA /* winout.cpp in Sources */,
CF2F46C41095EE72007D33FA /* mac-appleevent.cpp in Sources */,
CF2F46C51095EE72007D33FA /* mac-audio.cpp in Sources */,
CF2F46C51095EE72007D33FA /* mac-audio.mm in Sources */,
CF2F46C61095EE72007D33FA /* mac-cart.mm in Sources */,
CF2F46C71095EE72007D33FA /* mac-cheat.cpp in Sources */,
CF2F46C81095EE72007D33FA /* mac-cheatfinder.cpp in Sources */,
@ -2130,7 +2162,7 @@
CF2F46D01095EE72007D33FA /* mac-joypad.cpp in Sources */,
CF2F46D11095EE72007D33FA /* mac-keyboard.cpp in Sources */,
CF2F46D21095EE72007D33FA /* mac-multicart.cpp in Sources */,
CF2F46D31095EE72007D33FA /* mac-musicbox.cpp in Sources */,
CF2F46D31095EE72007D33FA /* mac-musicbox.mm in Sources */,
CF2F46D41095EE72007D33FA /* mac-netplay.cpp in Sources */,
CF2F46D51095EE72007D33FA /* mac-os.mm in Sources */,
CF2F46D61095EE72007D33FA /* mac-prefs.cpp in Sources */,
@ -2154,6 +2186,14 @@
name = Snes9x.xib;
sourceTree = "<group>";
};
CF46BEA8133E2559005A17A5 /* musicbox.xib */ = {
isa = PBXVariantGroup;
children = (
CF46BEA9133E2559005A17A5 /* English */,
);
name = musicbox.xib;
sourceTree = "<group>";
};
EA3BEA980A28384E00A8FAE5 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
@ -2231,7 +2271,7 @@
DEAD_CODE_STRIPPING = YES;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_MODEL_TUNING = G4;
GCC_MODEL_TUNING = G3;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREFIX_HEADER = "mac-global_prefix.h";

131
unix/configure vendored Normal file → Executable file
View File

@ -1,7 +1,7 @@
#! /bin/sh
# From configure.ac Revision: 1.52 .
# From configure.ac Revision: 1.53 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for Snes9x 1.52.
# Generated by GNU Autoconf 2.61 for Snes9x 1.53.
#
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@ -573,8 +573,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='Snes9x'
PACKAGE_TARNAME='snes9x'
PACKAGE_VERSION='1.52'
PACKAGE_STRING='Snes9x 1.52'
PACKAGE_VERSION='1.53'
PACKAGE_STRING='Snes9x 1.53'
PACKAGE_BUGREPORT=''
ac_unique_file="unix.cpp"
@ -673,7 +673,6 @@ OBJEXT
CXX
CXXFLAGS
ac_ct_CXX
S9XNASM
CXXCPP
GREP
EGREP
@ -685,8 +684,6 @@ X_EXTRA_LIBS
S9XFLGS
S9XDEFS
S9XLIBS
S9XZSNESFX
S9XZSNESC4
S9XDEBUGGER
S9XNETPLAY
S9XZIP
@ -1209,7 +1206,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures Snes9x 1.52 to adapt to many kinds of systems.
\`configure' configures Snes9x 1.53 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1279,7 +1276,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of Snes9x 1.52:";;
short | recursive ) echo "Configuration of Snes9x 1.53:";;
esac
cat <<\_ACEOF
@ -1290,8 +1287,6 @@ Optional Features:
(default: no)
--enable-mtune use the specified value for the -mtune/-mcpu flag
(default: no)
--enable-zsnes-asm build with ZSNES C4 and SuperFX assembler cores if
available (default: no)
--enable-gamepad enable gamepad support if available (default: yes)
--enable-debugger enable debugger (default: no)
--enable-netplay enable netplay support (default: no)
@ -1383,7 +1378,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
Snes9x configure 1.52
Snes9x configure 1.53
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@ -1397,7 +1392,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Snes9x $as_me 1.52, which was
It was created by Snes9x $as_me 1.53, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@ -4488,103 +4483,6 @@ echo "${ECHO_T}no" >&6; }
fi
# Check if the CPU is x86.
{ echo "$as_me:$LINENO: checking whether the CPU is x86" >&5
echo $ECHO_N "checking whether the CPU is x86... $ECHO_C" >&6; }
if test "${snes9x_cv_x86_cpu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case "$target" in
i686-*-* | i586-*-* | i486-*-* | i386-*-*)
snes9x_cv_x86_cpu="yes"
;;
*)
snes9x_cv_x86_cpu="no"
;;
esac
fi
{ echo "$as_me:$LINENO: result: $snes9x_cv_x86_cpu" >&5
echo "${ECHO_T}$snes9x_cv_x86_cpu" >&6; }
# Enable ZSNES C4 and SuperFX assembler cores if CPU is x86.
S9XZSNESFX="#S9XZSNESFX=1"
S9XZSNESC4="#S9XZSNESC4=1"
S9XNASM=""
# Check whether --enable-zsnes_asm was given.
if test "${enable_zsnes_asm+set}" = set; then
enableval=$enable_zsnes_asm;
else
enable_zsnes_asm="no"
fi
if test "x$enable_zsnes_asm" = "xyes"; then
if test "x$snes9x_cv_x86_cpu" = "xyes"; then
# Extract the first word of "nasm", so it can be a program name with args.
set dummy nasm; ac_word=$2
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_S9XNASM+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
case $S9XNASM in
[\\/]* | ?:[\\/]*)
ac_cv_path_S9XNASM="$S9XNASM" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_path_S9XNASM="$as_dir/$ac_word$ac_exec_ext"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_S9XNASM" && ac_cv_path_S9XNASM="no"
;;
esac
fi
S9XNASM=$ac_cv_path_S9XNASM
if test -n "$S9XNASM"; then
{ echo "$as_me:$LINENO: result: $S9XNASM" >&5
echo "${ECHO_T}$S9XNASM" >&6; }
else
{ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6; }
fi
if test "x$S9XNASM" != "xno"; then
S9XZSNESFX="S9XZSNESFX=1"
S9XZSNESC4="S9XZSNESC4=1"
S9XDEFS="$S9XDEFS -DZSNES_FX -DZSNES_C4"
else
{ echo "$as_me:$LINENO: WARNING: nasm not found. Build without ZSNES assembler cores." >&5
echo "$as_me: WARNING: nasm not found. Build without ZSNES assembler cores." >&2;}
enable_zsnes_asm="no"
fi
else
{ echo "$as_me:$LINENO: WARNING: Your CPU is not x86. Build without ZSNES assembler cores." >&5
echo "$as_me: WARNING: Your CPU is not x86. Build without ZSNES assembler cores." >&2;}
enable_zsnes_asm="no"
fi
fi
# Check if the OS is Linux.
{ echo "$as_me:$LINENO: checking whether the OS is Linux" >&5
@ -8391,9 +8289,6 @@ S9XLIBS="`echo \"$S9XLIBS\" | sed -e 's/^ *//'`"
rm config.info 2>/dev/null
cat >config.info <<EOF
@ -8413,7 +8308,6 @@ gamepad support...... $enable_gamepad
GZIP support......... $enable_gzip
ZIP support.......... $enable_zip
JMA support.......... $enable_jma
using ZSNES asm...... $enable_zsnes_asm
debugger............. $enable_debugger
EOF
@ -8848,7 +8742,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by Snes9x $as_me 1.52, which was
This file was extended by Snes9x $as_me 1.53, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -8891,7 +8785,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
Snes9x config.status 1.52
Snes9x config.status 1.53
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@ -9109,7 +9003,6 @@ OBJEXT!$OBJEXT$ac_delim
CXX!$CXX$ac_delim
CXXFLAGS!$CXXFLAGS$ac_delim
ac_ct_CXX!$ac_ct_CXX$ac_delim
S9XNASM!$S9XNASM$ac_delim
CXXCPP!$CXXCPP$ac_delim
GREP!$GREP$ac_delim
EGREP!$EGREP$ac_delim
@ -9121,8 +9014,6 @@ X_EXTRA_LIBS!$X_EXTRA_LIBS$ac_delim
S9XFLGS!$S9XFLGS$ac_delim
S9XDEFS!$S9XDEFS$ac_delim
S9XLIBS!$S9XLIBS$ac_delim
S9XZSNESFX!$S9XZSNESFX$ac_delim
S9XZSNESC4!$S9XZSNESC4$ac_delim
S9XDEBUGGER!$S9XDEBUGGER$ac_delim
S9XNETPLAY!$S9XNETPLAY$ac_delim
S9XZIP!$S9XZIP$ac_delim
@ -9131,7 +9022,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 79; then
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5

View File

@ -48,7 +48,7 @@
Use <code>-help</code> option to see available options.
</p>
<p>
SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs as long as there is only 1 per zip file. Also Snes9x can open gzip/jma compressed file.
SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs as long as there is only 1 per zip file. Also Snes9x can open gzip and jma compressed files.
</p>
<h3>Game Color System</h3>
<p>
@ -234,7 +234,7 @@
</p>
<h3>Software</h3>
<p>
You will need access to SNES ROM images in .smc, .sfc, .fig, etc., format otherwise you will have nothing to run! Some home-brewed ROM images can be downloaded from <a href="http://www.zophar.com/">http://www.zophar.com/</a>.<br>
You will need access to SNES ROM images otherwise you will have nothing to run! Some home-brewed ROM images can be downloaded from <a href="http://www.zophar.com/">http://www.zophar.com/</a>.<br>
Please note, it is illegal in most countries to have commercial ROM images without also owning the actual SNES ROM cartridges, and even then you may be liable under various EULAs.
</p>
<h2>Controllers Support</h2>
@ -689,7 +689,7 @@
<li>Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware envelope processing, echo, pitch modulation and digital FIR sound filter.</li>
<li>SRAM, a battery-backed RAM.</li>
<li>All background modes, 0 to 7.</li>
<li>All screen resolutions, 256x224, 256x239, 512x224, 512x239, 512x448 and 512x478.</li>
<li>All screen resolutions including interlace mode.</li>
<li>Pseudo hi-res mode.</li>
<li>8x8, 16x8 and 16x16 tile sizes, flipped in either direction.</li>
<li>32x32, 32x64, 64x32 and 64x64 screen tile sizes.</li>
@ -802,7 +802,7 @@
</p></div>
<p>
Edited for Unix port by: zones (kasumitokoduck@yahoo.com)<br>
Updated most recently by: 2009/12/20 zones
Updated most recently by: 2011/04/10 zones
</p>
</body>
</html>

View File

@ -1,9 +1,9 @@
/* crypt.h -- base code for crypt/uncrypt ZIPfile
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
This code is a modified version of crypting code in Infozip distribution

View File

@ -1,9 +1,9 @@
/* ioapi.c -- IO base function header for compress/uncompress .zip
files using zlib + zip or unzip API
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
*/
#include <stdio.h>
@ -141,7 +141,8 @@ long ZCALLBACK fseek_file_func (opaque, stream, offset, origin)
default: return -1;
}
ret = 0;
fseek((FILE *)stream, offset, fseek_origin);
if (fseek((FILE *)stream, offset, fseek_origin) != 0)
ret = -1;
return ret;
}

View File

@ -1,9 +1,9 @@
/* ioapi.h -- IO base function header for compress/uncompress .zip
files using zlib + zip or unzip API
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
*/
#ifndef _ZLIBIOAPI_H

View File

@ -2,9 +2,9 @@
files using zlib + zip or unzip API
This IO API version uses the Win32 API (for Microsoft Windows)
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
*/
#include <stdlib.h>

View File

@ -2,9 +2,9 @@
files using zlib + zip or unzip API
This IO API version uses the Win32 API (for Microsoft Windows)
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
*/
#include <windows.h>

View File

@ -1,8 +1,8 @@
/*
miniunz.c
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
*/
@ -112,6 +112,11 @@ int makedir (newdir)
return 0;
buffer = (char*)malloc(len+1);
if (buffer==NULL)
{
printf("Error allocating memory\n");
return UNZ_INTERNALERROR;
}
strcpy(buffer,newdir);
if (buffer[len-1] == '/') {
@ -210,6 +215,11 @@ int do_list(uf)
else if ((iLevel==2) || (iLevel==3))
string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
}
else
if (file_info.compression_method==Z_BZIP2ED)
{
string_method="BZip2 ";
}
else
string_method="Unkn. ";
@ -470,6 +480,7 @@ int main(argc,argv)
const char *password=NULL;
char filename_try[MAXFILENAME+16] = "";
int i;
int ret_value=0;
int opt_do_list=0;
int opt_do_extract=1;
int opt_do_extract_withoutpath=0;
@ -564,7 +575,7 @@ int main(argc,argv)
printf("%s opened\n",filename_try);
if (opt_do_list==1)
return do_list(uf);
ret_value = do_list(uf);
else if (opt_do_extract==1)
{
if (opt_extractdir && chdir(dirname))
@ -574,12 +585,13 @@ int main(argc,argv)
}
if (filename_to_extract == NULL)
return do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password);
ret_value = do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,password);
else
return do_extract_onefile(uf,filename_to_extract,
ret_value = do_extract_onefile(uf,filename_to_extract,
opt_do_extract_withoutpath,opt_overwrite,password);
}
unzCloseCurrentFile(uf);
return 0;
unzClose(uf);
return ret_value ;
}

View File

@ -1,8 +1,12 @@
/*
minizip.c
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
Changes:
Aug 3, 2006. jg. support storing files with out paths. (-j)
Aug 3, 2006. jg. files with paths should not have leading slashes.
*/
#include <stdio.h>
@ -44,9 +48,9 @@ uLong filetime(f, tmzip, dt)
{
FILETIME ftLocal;
HANDLE hFind;
WIN32_FIND_DATA ff32;
WIN32_FIND_DATAA ff32;
hFind = FindFirstFile(f,&ff32);
hFind = FindFirstFileA(f,&ff32);
if (hFind != INVALID_HANDLE_VALUE)
{
FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
@ -129,18 +133,20 @@ int check_exist_file(filename)
void do_banner()
{
printf("MiniZip 1.01b, demo of zLib + Zip package written by Gilles Vollant\n");
printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
printf("MiniZip 1.01e-jg, demo of zLib + Zip package written by Gilles Vollant\n");
printf("minor updates, jg.\n");
printf("more info at http://www.winimage.com/zLibDll/minizip.html\n\n");
}
void do_help()
{
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] file.zip [files_to_add]\n\n" \
printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
" -o Overwrite existing file.zip\n" \
" -a Append to existing file.zip\n" \
" -0 Store only\n" \
" -1 Compress faster\n" \
" -9 Compress better\n\n");
" -9 Compress better\n" \
" -j exclude path. store only the file name.\n\n");
}
/* calculate the CRC32 of a file,
@ -179,7 +185,7 @@ int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigne
fclose(fin);
*result_crc=calculate_crc;
printf("file %s crc %x\n",filenameinzip,calculate_crc);
printf("file %s crc %lx\n",filenameinzip,calculate_crc);
return err;
}
@ -190,6 +196,7 @@ int main(argc,argv)
int i;
int opt_overwrite=0;
int opt_compress_level=Z_DEFAULT_COMPRESSION;
int opt_exclude_path=0;
int zipfilenamearg = 0;
char filename_try[MAXFILENAME+16];
int zipok;
@ -222,6 +229,8 @@ int main(argc,argv)
opt_overwrite = 2;
if ((c>='0') && (c<='9'))
opt_compress_level = c-'0';
if ((c=='j') || (c=='J'))
opt_exclude_path = 1;
if (((c=='p') || (c=='P')) && (i+1<argc))
{
@ -231,8 +240,12 @@ int main(argc,argv)
}
}
else
{
if (zipfilenamearg == 0)
{
zipfilenamearg = i ;
}
}
}
}
@ -245,7 +258,9 @@ int main(argc,argv)
}
if (zipfilenamearg==0)
{
zipok=0;
}
else
{
int i,len;
@ -329,6 +344,7 @@ int main(argc,argv)
FILE * fin;
int size_read;
const char* filenameinzip = argv[i];
const char *savefilenameinzip;
zip_fileinfo zi;
unsigned long crcFile=0;
@ -348,7 +364,34 @@ int main(argc,argv)
if ((password != NULL) && (err==ZIP_OK))
err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
err = zipOpenNewFileInZip3(zf,filenameinzip,&zi,
/*the path name saved, should not include a leading slash. */
/*if it did, windows/xp and dynazip couldn't read the zip file. */
savefilenameinzip = filenameinzip;
while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' )
{
savefilenameinzip++;
}
/*should the zip file contain any path at all?*/
if( opt_exclude_path )
{
const char *tmpptr;
const char *lastslash = 0;
for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++)
{
if( *tmpptr == '\\' || *tmpptr == '/')
{
lastslash = tmpptr;
}
}
if( lastslash != NULL )
{
savefilenameinzip = lastslash+1; // base filename follows last slash.
}
}
/**/
err = zipOpenNewFileInZip3(zf,savefilenameinzip,&zi,
NULL,0,NULL,0,NULL /* comment*/,
(opt_compress_level != 0) ? Z_DEFLATED : 0,
opt_compress_level,0,

View File

@ -1,7 +1,7 @@
/* unzip.c -- IO for uncompress .zip files using zlib
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
Read unzip.h for more info
*/
@ -103,6 +103,9 @@ typedef struct
{
char *read_buffer; /* internal buffer for compressed data */
z_stream stream; /* zLib stream structure for inflate */
#ifdef HAVE_BZIP2
bz_stream bstream; /* bzLib stream structure for bziped */
#endif
uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/
uLong stream_initialised; /* flag set if stream structure is initialised*/
@ -491,8 +494,11 @@ extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
s=(unz_s*)ALLOC(sizeof(unz_s));
*s=us;
unzGoToFirstFile((unzFile)s);
if (s!=NULL)
{
*s=us;
unzGoToFirstFile((unzFile)s);
}
return (unzFile)s;
}
@ -1007,6 +1013,9 @@ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
err=UNZ_BADZIPFILE;
if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
/* #ifdef HAVE_BZIP2 */
(s->cur_file_info.compression_method!=Z_BZIP2ED) &&
/* #endif */
(s->cur_file_info.compression_method!=Z_DEFLATED))
err=UNZ_BADZIPFILE;
@ -1121,6 +1130,9 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
}
if ((s->cur_file_info.compression_method!=0) &&
/* #ifdef HAVE_BZIP2 */
(s->cur_file_info.compression_method!=Z_BZIP2ED) &&
/* #endif */
(s->cur_file_info.compression_method!=Z_DEFLATED))
err=UNZ_BADZIPFILE;
@ -1134,6 +1146,34 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
pfile_in_zip_read_info->stream.total_out = 0;
if ((s->cur_file_info.compression_method==Z_BZIP2ED) &&
(!raw))
{
#ifdef HAVE_BZIP2
pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
pfile_in_zip_read_info->bstream.state = (voidpf)0;
pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
pfile_in_zip_read_info->stream.zfree = (free_func)0;
pfile_in_zip_read_info->stream.opaque = (voidpf)0;
pfile_in_zip_read_info->stream.next_in = (voidpf)0;
pfile_in_zip_read_info->stream.avail_in = 0;
err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
if (err == Z_OK)
pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
else
{
TRYFREE(pfile_in_zip_read_info);
return err;
}
#else
pfile_in_zip_read_info->raw=1;
#endif
}
else
if ((s->cur_file_info.compression_method==Z_DEFLATED) &&
(!raw))
{
@ -1145,7 +1185,7 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
if (err == Z_OK)
pfile_in_zip_read_info->stream_initialised=1;
pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
else
{
TRYFREE(pfile_in_zip_read_info);
@ -1173,6 +1213,8 @@ extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
s->pfile_in_zip_read = pfile_in_zip_read_info;
s->encrypted = 0;
# ifndef NOUNCRYPT
if (password != NULL)
{
@ -1344,6 +1386,53 @@ extern int ZEXPORT unzReadCurrentFile (file, buf, len)
iRead += uDoCopy;
}
else
if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
{
#ifdef HAVE_BZIP2
uLong uTotalOutBefore,uTotalOutAfter;
const Bytef *bufBefore;
uLong uOutThis;
pfile_in_zip_read_info->bstream.next_in = pfile_in_zip_read_info->stream.next_in;
pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in;
pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in;
pfile_in_zip_read_info->bstream.total_in_hi32 = 0;
pfile_in_zip_read_info->bstream.next_out = pfile_in_zip_read_info->stream.next_out;
pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out;
pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;
pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
bufBefore = pfile_in_zip_read_info->bstream.next_out;
err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
uOutThis = uTotalOutAfter-uTotalOutBefore;
pfile_in_zip_read_info->crc32 =
crc32(pfile_in_zip_read_info->crc32,bufBefore,
(uInt)(uOutThis));
pfile_in_zip_read_info->rest_read_uncompressed -=
uOutThis;
iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
pfile_in_zip_read_info->stream.next_in = pfile_in_zip_read_info->bstream.next_in;
pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in;
pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32;
pfile_in_zip_read_info->stream.next_out = pfile_in_zip_read_info->bstream.next_out;
pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;
pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
if (err==BZ_STREAM_END)
return (iRead==0) ? UNZ_EOF : iRead;
if (err!=BZ_OK)
break;
#endif
}
else
{
uLong uTotalOutBefore,uTotalOutAfter;
const Bytef *bufBefore;
@ -1522,8 +1611,12 @@ extern int ZEXPORT unzCloseCurrentFile (file)
TRYFREE(pfile_in_zip_read_info->read_buffer);
pfile_in_zip_read_info->read_buffer = NULL;
if (pfile_in_zip_read_info->stream_initialised)
if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
inflateEnd(&pfile_in_zip_read_info->stream);
#ifdef HAVE_BZIP2
else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
#endif
pfile_in_zip_read_info->stream_initialised = 0;
TRYFREE(pfile_in_zip_read_info);
@ -1544,7 +1637,6 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
char *szComment;
uLong uSizeBuf;
{
/* int err=UNZ_OK; */
unz_s* s;
uLong uReadThis ;
if (file==NULL)
@ -1577,7 +1669,7 @@ extern uLong ZEXPORT unzGetOffset (file)
unz_s* s;
if (file==NULL)
return UNZ_PARAMERROR;
return 0;
s=(unz_s*)file;
if (!s->current_file_ok)
return 0;

View File

@ -1,7 +1,7 @@
/* unzip.h -- IO for uncompress .zip files using zlib
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
WinZip, InfoZip tools and compatible.
@ -57,6 +57,12 @@ extern "C" {
#include "ioapi.h"
#endif
#ifdef HAVE_BZIP2
#include "bzlib.h"
#endif
#define Z_BZIP2ED 12
#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
/* like the STRICT of WIN32, we define a pointer that cannot be converted
from (void*) without cast */

View File

@ -1,10 +1,10 @@
/* zip.c -- IO on .zip files using zlib
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
27 Dec 2004 Rolf Kalbermatter
Modification to zipOpen2 to support globalComment retrieval.
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
Read zip.h for more info
*/
@ -189,14 +189,13 @@ local void init_linkedlist(ll)
ll->first_block = ll->last_block = NULL;
}
/* Unused
local void free_linkedlist(ll)
linkedlist_data* ll;
{
free_datablock(ll->first_block);
ll->first_block = ll->last_block = NULL;
}
*/
local int add_data_in_datablock(ll,buf,len)
linkedlist_data* ll;
@ -321,9 +320,9 @@ local uLong ziplocal_TmzDateToDosDate(ptm,dosDate)
uLong dosDate;
{
uLong year = (uLong)ptm->tm_year;
if (year>1980)
if (year>=1980)
year-=1980;
else if (year>80)
else if (year>=80)
year-=80;
return
(uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
@ -433,67 +432,69 @@ local int ziplocal_getLong (pzlib_filefunc_def,filestream,pX)
/*
Locate the Central directory of a zipfile (at the end, just before
the global comment)
Fix from Riccardo Cohen
*/
local uLong ziplocal_SearchCentralDir OF((
const zlib_filefunc_def* pzlib_filefunc_def,
voidpf filestream));
local uLong ziplocal_SearchCentralDir(pzlib_filefunc_def,filestream)
const zlib_filefunc_def* pzlib_filefunc_def;
voidpf filestream;
const zlib_filefunc_def* pzlib_filefunc_def;
voidpf filestream;
{
unsigned char* buf;
uLong uSizeFile;
uLong uBackRead;
uLong uMaxBack=0xffff; /* maximum size of global comment */
uLong uPosFound=0;
unsigned char* buf;
uLong uSizeFile;
uLong uBackRead;
uLong uMaxBack=0xffff; /* maximum size of global comment */
uLong uPosFound=0;
if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
return 0;
if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
return 0;
uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
if (uMaxBack>uSizeFile)
uMaxBack = uSizeFile;
if (uMaxBack>uSizeFile)
uMaxBack = uSizeFile;
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
if (buf==NULL)
return 0;
buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
if (buf==NULL)
return 0;
uBackRead = 4;
while (uBackRead<uMaxBack)
{
uLong uReadSize,uReadPos ;
int i;
if (uBackRead+BUFREADCOMMENT>uMaxBack)
uBackRead = uMaxBack;
else
uBackRead+=BUFREADCOMMENT;
uReadPos = uSizeFile-uBackRead ;
uBackRead = 4;
while (uBackRead<uMaxBack)
{
uLong uReadSize,uReadPos ;
int i;
if (uBackRead+BUFREADCOMMENT>uMaxBack)
uBackRead = uMaxBack;
else
uBackRead+=BUFREADCOMMENT;
uReadPos = uSizeFile-uBackRead ;
uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
(BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
break;
uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
(BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
break;
if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
break;
if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
break;
for (i=(int)uReadSize-3; (i--)>0;)
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
{
uPosFound = uReadPos+i;
break;
}
for (i=(int)uReadSize-3; (i--)>0;)
if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
{
uPosFound = uReadPos+i;
break;
}
if (uPosFound!=0)
break;
}
TRYFREE(buf);
return uPosFound;
if (uPosFound!=0)
break;
}
TRYFREE(buf);
return uPosFound;
}
#endif /* !NO_ADDFILEINEXISTINGZIP*/
/************************************************************/
@ -522,6 +523,8 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc
if (ziinit.filestream == NULL)
return NULL;
if (append == APPEND_STATUS_CREATEAFTER)
ZSEEK(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
ziinit.begin_pos = ZTELL(ziinit.z_filefunc,ziinit.filestream);
ziinit.in_opened_file_inzip = 0;
ziinit.ci.stream_initialised = 0;
@ -559,9 +562,10 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc
uLong size_comment;
central_pos = ziplocal_SearchCentralDir(&ziinit.z_filefunc,ziinit.filestream);
/* disable to allow appending to empty ZIP archive
if (central_pos==0)
err=ZIP_ERRNO;
*/
if (ZSEEK(ziinit.z_filefunc, ziinit.filestream,
central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
err=ZIP_ERRNO;
@ -616,7 +620,7 @@ extern zipFile ZEXPORT zipOpen2 (pathname, append, globalcomment, pzlib_filefunc
if (size_comment>0)
{
ziinit.globalcomment = ALLOC(size_comment+1);
ziinit.globalcomment = (char*)ALLOC(size_comment+1);
if (ziinit.globalcomment)
{
size_comment = ZREAD(ziinit.z_filefunc, ziinit.filestream,ziinit.globalcomment,size_comment);
@ -688,12 +692,12 @@ extern zipFile ZEXPORT zipOpen (pathname, append)
return zipOpen2(pathname,append,NULL,NULL);
}
extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
extern int ZEXPORT zipOpenNewFileInZip4 (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
comment, method, level, raw,
windowBits, memLevel, strategy,
password, crcForCrypting)
password, crcForCrypting, versionMadeBy, flagBase)
zipFile file;
const char* filename;
const zip_fileinfo* zipfi;
@ -710,6 +714,8 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
int strategy;
const char* password;
uLong crcForCrypting;
uLong versionMadeBy;
uLong flagBase;
{
zip_internal* zi;
uInt size_filename;
@ -756,7 +762,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
else zi->ci.dosDate = ziplocal_TmzDateToDosDate(&zipfi->tmz_date,zipfi->dosDate);
}
zi->ci.flag = 0;
zi->ci.flag = flagBase;
if ((level==8) || (level==9))
zi->ci.flag |= 2;
if ((level==2))
@ -779,7 +785,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
ziplocal_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
/* version info */
ziplocal_putValue_inmemory(zi->ci.central_header+4,(uLong)VERSIONMADEBY,2);
ziplocal_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
ziplocal_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
ziplocal_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
ziplocal_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
@ -858,6 +864,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
zi->ci.stream.next_out = zi->ci.buffered_data;
zi->ci.stream.total_in = 0;
zi->ci.stream.total_out = 0;
zi->ci.stream.data_type = Z_BINARY;
if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
{
@ -913,14 +920,46 @@ extern int ZEXPORT zipOpenNewFileInZip2(file, filename, zipfi,
int level;
int raw;
{
return zipOpenNewFileInZip3 (file, filename, zipfi,
return zipOpenNewFileInZip4 (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
comment, method, level, raw,
-MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
NULL, 0);
NULL, 0, VERSIONMADEBY, 0);
}
extern int ZEXPORT zipOpenNewFileInZip3 (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
comment, method, level, raw,
windowBits, memLevel, strategy,
password, crcForCrypting)
zipFile file;
const char* filename;
const zip_fileinfo* zipfi;
const void* extrafield_local;
uInt size_extrafield_local;
const void* extrafield_global;
uInt size_extrafield_global;
const char* comment;
int method;
int level;
int raw;
int windowBits;
int memLevel;
int strategy;
const char* password;
uLong crcForCrypting;
{
return zipOpenNewFileInZip4 (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
comment, method, level, raw,
windowBits, memLevel, strategy,
password, crcForCrypting, VERSIONMADEBY, 0);
}
extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
@ -936,10 +975,12 @@ extern int ZEXPORT zipOpenNewFileInZip (file, filename, zipfi,
int method;
int level;
{
return zipOpenNewFileInZip2 (file, filename, zipfi,
return zipOpenNewFileInZip4 (file, filename, zipfi,
extrafield_local, size_extrafield_local,
extrafield_global, size_extrafield_global,
comment, method, level, 0);
comment, method, level, 0,
-MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
NULL, 0, VERSIONMADEBY, 0);
}
local int zipFlushWriteBuffer(zi)
@ -979,9 +1020,9 @@ extern int ZEXPORT zipWriteInFileInZip (file, buf, len)
if (zi->in_opened_file_inzip == 0)
return ZIP_PARAMERROR;
zi->ci.stream.next_in = (void*)buf;
zi->ci.stream.next_in = (Bytef*)buf;
zi->ci.stream.avail_in = len;
zi->ci.crc32 = crc32(zi->ci.crc32,buf,len);
zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
{
@ -1071,7 +1112,9 @@ extern int ZEXPORT zipCloseFileInZipRaw (file, uncompressed_size, crc32)
if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
{
err=deflateEnd(&zi->ci.stream);
int tmp_err=deflateEnd(&zi->ci.stream);
if (err == ZIP_OK)
err = tmp_err;
zi->ci.stream_initialised = 0;
}
@ -1174,7 +1217,7 @@ extern int ZEXPORT zipClose (file, global_comment)
ldi = ldi->next_datablock;
}
}
free_datablock(zi->central_dir.first_block);
free_linkedlist(&(zi->central_dir));
if (err==ZIP_OK) /* Magic End */
err = ziplocal_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);

View File

@ -1,7 +1,7 @@
/* zip.h -- IO for compress .zip files using zlib
Version 1.01e, February 12th, 2005
Version 1.01h, December 28th, 2009
Copyright (C) 1998-2005 Gilles Vollant
Copyright (C) 1998-2009 Gilles Vollant
This unzip package allow creates .ZIP file, compatible with PKZip 2.04g
WinZip, InfoZip tools and compatible.
@ -191,8 +191,7 @@ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
int memLevel,
int strategy,
const char* password,
uLong crcForCtypting));
uLong crcForCrypting));
/*
Same than zipOpenNewFileInZip2, except
windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
@ -200,6 +199,29 @@ extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
crcForCtypting : crc of file to compress (needed for crypting)
*/
extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
const char* filename,
const zip_fileinfo* zipfi,
const void* extrafield_local,
uInt size_extrafield_local,
const void* extrafield_global,
uInt size_extrafield_global,
const char* comment,
int method,
int level,
int raw,
int windowBits,
int memLevel,
int strategy,
const char* password,
uLong crcForCrypting,
uLong versionMadeBy,
uLong flagBase));
/*
Same than zipOpenNewFileInZip4, except
versionMadeBy : value for Version made by field
flag : value for flag field (compression level info will be added)
*/
extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
const void* buf,

View File

@ -8,7 +8,7 @@ Files included in the Snes9x archive:
changes.txt
snes9x-license.txt
version 1.52 January, 2010
version 1.53 April, 2011
Home page: http://www.snes9x.com/
@ -91,8 +91,8 @@ allows you to browse your computer to locate the directory where you have stored
your SNES games. Single-click and then press Load to load and start the game.
SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs
as long as there is only 1 per zip file. Also Snes9x can open gzip/jma
compressed file.
as long as there is only 1 per zip file. Also Snes9x can open gzip and jma
compressed files.
Game Color System
-----------------
@ -155,9 +155,8 @@ experience.
Software
--------
You will need access to SNES ROM images in .smc, .sfc, .fig, etc., format
otherwise you will have nothing to run! Some home-brewed ROM images can be
downloaded from http://www.zophar.com/.
You will need access to SNES ROM images otherwise you will have nothing to run!
Some home-brewed ROM images can be downloaded from http://www.zophar.com/.
Please note, it is illegal in most countries to have commercial ROM images
without also owning the actual SNES ROM cartridges, and even then you may be
liable under various EULAs.
@ -668,8 +667,7 @@ What's Emulated?
envelope processing, echo, pitch modulation and digital FIR sound filter.
- SRAM, a battery-backed RAM.
- All background modes, 0 to 7.
- All screen resolutions, 256x224, 256x239, 512x224, 512x239, 512x448 and
512x478.
- All screen resolutions including interlace mode.
- Pseudo hi-res mode.
- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction.
- 32x32, 32x64, 64x32 and 64x64 screen tile sizes.
@ -816,4 +814,4 @@ Capcom is a trademark of Capcom Co., Ltd.
Gary Henderson
Edited for Windows port by: zones (kasumitokoduck@yahoo.com)
Updated most recently by: 2010/01/01 zones
Updated most recently by: 2011/04/11 zones