Update changelog / update minizip to 1.01h / update docs / Mac: changed MusicBox to Cocoa interface
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
<<a href="14.html">Prev</a> <a href="../index.html">Top</a> Next>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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.\
|
||||
\
|
||||
|
|
BIN
macosx/icons.png
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 5.0 KiB |
BIN
macosx/libz_u.a
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 *) ¤tTime);
|
||||
|
||||
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 *) ¤tTime);
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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];
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 ) },
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
After Width: | Height: | Size: 133 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 729 B |
After Width: | Height: | Size: 108 B |
After Width: | Height: | Size: 136 B |
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 ;
|
||||
}
|
||||
|
|
|
@ -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,10 +240,14 @@ int main(argc,argv)
|
|||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (zipfilenamearg == 0)
|
||||
{
|
||||
zipfilenamearg = i ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_buf = WRITEBUFFERSIZE;
|
||||
buf = (void*)malloc(size_buf);
|
||||
|
@ -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,
|
||||
|
|
104
unzip/unzip.c
|
@ -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));
|
||||
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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
83
unzip/zip.c
|
@ -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,6 +432,7 @@ 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,
|
||||
|
@ -494,6 +494,7 @@ local uLong ziplocal_SearchCentralDir(pzlib_filefunc_def,filestream)
|
|||
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);
|
||||
|
|
30
unzip/zip.h
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|