News
Apple hardware is garbage2012-01-21
If you're thinking about buying an Apple computer system ... please don't.
New article: strlcpycat2012-01-08
This article is a comparison of the various C string copy and concatenation functions: both of their performance and safety. I also propose an alternative to address the issues I've pointed out.
[ strcpycat article ] [ Discuss ]
bsnes v085 released2012-01-02
A new release for the new year.
Changelog:- fixed auto joypad polling edge case; fixes Ys 5 controls
- fixed Justifier polling code; Lethal Enforcers should be fully responsive once again
- rewrote SNES S-SMP processor core (~20% code reduction)
- fixed Game Boy 8x16 sprite mode; fixed some sprites in Zelda: Link's Awakening
- treat Game Boy HuC1 RAM enable flag as writable flag instead; fixes Pokemon Card GB
- created far faster XML parser; bsnes can now load XML files once again
- updated to mightymo's most recent cheat code database
- internal color calculations now performed at 30-bits per pixel
- gamma slider now acts as fine-tuned gamma ramp option
- Linux OpenGL driver will output at 30bpp on capable displays
- Linux port defaults to GTK+ now instead of Qt (both are still available)
mosaic v01 released2011-12-10
mosaic is the spiritual successor to bview. However, it is closer to a graphical version of FEIDIAN this time around. That is to say, it takes user definable tileset definitions, allowing almost any planar or packed tile sets that follow a consistent pattern to be displayed and exported.
In the future, I intend to allow importing and command-line access as well. I am releasing the tool now in the hopes of receiving feedback on the file format specification. As such, please understand that the format is not yet set in stone.
You can download mosaic on the programming page.

New utility releases2011-12-03
I've posted three new utilities, which can be downloaded from the programming page. Mostly intended for Linux users, but two of them will also work on Windows.
curse v04 is a lightweight hex editor. It now uses the newest version of phoenix, keeps track of geometry settings, and adds a configuration file to control the font and column/row sizes. This is meant to be a simple hex editor that understands fixed-column lengths and doesn't require Mono's Sword of Damocles to run.
bcalc v01 is a simple expression-based calculator. That is to say, you are given a textbox to input an equation in the form "5+5*2". Only useful to replace the outdated version of gcalctool that comes with Debian Squeeze, which can't accept hexadecimal or binary values.
bdesktop v01 is a desktop window for Xorg, the Linux/BSD display system. It was written to support 30-bit desktops (1.07 billion colors); something Xfce's xfwm4 cannot yet do.
As an aside, I've now switched to Debian Squeeze for my primary desktop operating system. What this means is I'll probably be adding a few more minor utility applications to replace ones that do not work with 30-bit displays; I've removed the -fno-tree-vectorize flags from my Makefiles, as GCC 4.6.2 compiled by hand does not exhibit the same bug as Ubuntu's version of 4.6.1 does; and I'm disabling OpenMP by default, as it causes segmentation faults when calling dlclose() on libraries that use it.
bass v05 released2011-11-14
bass now has a table-based arch that allows defining custom instruction sets in text form; while retaining the same speed as the hand-coded archs that existed previously (~100KB/s assembly.)
Furthermore, it has the unique ability to append new instructions to the table during assembly. This allows one to potentially even build entire architectures by utilizing bass' intrinsic recursive macro support.
The SNES S-CPU and S-SMP modules have been re-written to use table-based modules as a result. Note that the Bass core can still be extended for architectures that are too complex for table-based instruction sets.
You can download the new release here.
bsnes v084 released2011-11-07
This release adds preliminary Game Boy Color emulation. Due to lack of technical information, this is undoubtedly the least stable module I provide at this time; but improvements should continue as it is developed.
This release also polishes the NES emulation and user interface code.
Changelog:- added preliminary Game Boy Color emulation
- NES: added MMC6, VRC1, VRC2, VRC3 emulation
- NES: fixed MMC5 banking and added split-screen support [Cydrak]
- NES: pass all of blargg's ppu_vbl_nmi tests, pass more sprite tests
- NES: palette is now generated algorithmically [Bisqwit]
- SNES: fixed SA-1 IRQ regression caused by code refactoring
- Game Boy: rewrote audio channel mixing code; sound output is greatly improved as a result
- Game Boy: uses DMG boot ROM instead of SGB boot ROM
- Game Boy: fixed potential bug when loading save states
- phoenix: fixed ListView focus issue [X-Fi6]
- phoenix: fixed dialog message parsing [X-Fi6]
- ui: video output is truly 24-bit now; SNES luma=0 edge case emulated
- ui: audio frequency, latency, resampler are now user configurable
- ui: gamma ramp is dynamically adjustable
- ui: all filters ported to 24-bit mode (speed hit to HQ2x)
- ui: added turbo button mappings for all generic controllers
- ui: fixed audio volume on unmute via menu [Ver Greeneyes]
- ui: shrink window option does nothing when no cartridge is loaded
- ui: re-added compositor disable, driver verification from v082
Game Boy Color2011-10-25

bsnes v083 released2011-10-14
bsnes' new gimmick:
This release adds preliminary Nintendo / Famicom emulation. It's only a week or two old, so a lot of work still needs to be done before it can compete with the most popular NES emulators.
It's important to clarify: bsnes is primarily an SNES emulator. That will always be its forte and my core focus. I have added Game Boy support previously for Super Game Boy emulation, and I've added NES support mostly for something fun to work on to break up the monotony of working on one system for seven years now. Obviously, I'd like the emulation to be accurate and highly compatible, but I simply cannot afford to invest the same amount of time and money into any other systems.
Still, either way the NES and GB emulation serve as fun side-diversions, and allow for a unified emulator interface with all of bsnes' unique features applied to all systems. My personal favorite feature is mightymo's extended built-in cheat code database that now also includes NES and Game Boy codes. And it even works in Super Game Boy mode now, too!
I'm also not worried about speed at all: so long as NES/GB are faster than SNES/compatibility, it's fine by me. Note that due to the NES audio running at 1.78MHz, and Game Boy audio at 4MHz stereo, a more sophisticated audio resampler was needed: Ryphecha (Mednafen author) has graciously written a first-rate resampler: it is a band-limited Kaiser-windowed polyphase sinc resampler. It is combined with two highpass filters to remove DC bias. The filter itself is SSE optimized, but even still, approximately 50% of CPU usage for NES/GB emulation goes to the audio filtering alone. However, you now have the best sound possible for NES and Game Boy emulation as a result.
The GUI has also been heavily re-structured to accommodate multiple emulators from the same interface. As such, it's quite likely a few bugs are still lurking here and there. Please report them and I'll iron them out for the next release.
Changelog:- license is now GPLv3
- re-structured GUI as a multi-system emulator
- added NES emulation [byuu, Ryphecha]
- added NES ICs: MMC1, MMC2, MMC3, MMC4, MMC5, VRC4, VRC6+audio, VRC7, Sunsoft-5B+audio, Bandai-LZ93D50
- added NES boards: AxROM, BNROM, CNROM, ExROM, FxROM, GxROM, NROM, PxROM, SxROM, TxROM, UxROM
- Game Boy emulation improvements [Jonas Quinn]
- SNES core outputs full 19-bit color (4-bit luma included) for more accurate color reproduction (~5% speed hit)
- audio resampler is now a band-limited polyphase resampler [Ryphecha]
- cheat database includes NES+GB codes as well [mightymo, tukuyomi]
- lots of other changes
bsnes v082 released2011-08-20
This release features many substantial Game Boy emulation improvements (all courtesy of Jonas Quinn), a new audio DSP class, and BPS patching support.
Changelog:- added new DSP audio engine; supports sample-averaging for the Game Boy's high frequency rate
- GB: MMM01 images with boot loader at bottom of ROM can now be loaded
- GB: EI is delayed one cycle; fixes Bubble Bobble [Jonas Quinn]
- GB: fixed window -7 offset behavior; fixes Contra 3 first boss [Jonas Quinn]
- GB: disable LCD interrupts when rendering is off; fixes Super Mario Land 2 [Jonas Quinn]
- GB: fixed noise channel LFSR; fixes Zelda: LA lightning sound [Jonas Quinn]
- GB: square channels use initial_length like the noise channel [Jonas Quinn]
- UI: added BPS patching support; removed UPS patching support
- UI: when loading BS-X/Sufami Turbo/Game Boy games; display game title instead of BIOS title
- UI: modified timestamps on screenshots for Windows/NTFS (which disallows use of ':')
bps v02 and snespurify v11 - Beta 2 released2011-08-18
bps: newly created delta patch file sizes are now slightly smaller, and you can insert and remove metadata from the command-line now.
snespurify: now transforms both IPS and UPS files into BPS patches in preparation for bsnes v082.
bps v01 released2011-08-17
After a grueling year of labor and research, the successor to the UPS patching specification has gone golden. It's official! The file format is set in stone, and will not be changing.
I've posted the Windows binary (73KB in total, has a GUI and also works on the command-line) and source code; along with a list of its advantages over other patching formats; a detailed user manual; and format specification; on the new BPS page linked below.
Note that like IPS, I now consider UPS to be deprecated. bsnes v082+ will not support either IPS nor UPS, it will only support BPS. snespurify will also be updated to automatically transform both your IPS and UPS patches into the new BPS file format, so you will not have to do anything more than run snespurify once really quickly, and you'll be ready to go.