2010-08-09 13:28:56 +00:00
|
|
|
include nall/Makefile
|
2011-08-18 13:58:27 +00:00
|
|
|
|
2012-04-29 06:16:44 +00:00
|
|
|
fc := fc
|
|
|
|
sfc := sfc
|
|
|
|
gb := gb
|
|
|
|
gba := gba
|
2012-03-18 01:04:22 +00:00
|
|
|
|
2011-08-19 11:36:26 +00:00
|
|
|
profile := accuracy
|
2014-02-09 05:59:46 +00:00
|
|
|
# target := higan
|
|
|
|
target := loki
|
2010-08-09 13:28:56 +00:00
|
|
|
|
2014-02-02 21:02:18 +00:00
|
|
|
ifeq ($(target),loki)
|
|
|
|
options += debugger
|
|
|
|
endif
|
|
|
|
|
2013-01-21 12:27:15 +00:00
|
|
|
# arch := x86
|
Update to v090 release.
byuu says:
Most notably, this release adds Nintendo DS emulation. The Nintendo DS
module was written entirely by Cydrak, so please give him all of the
credit for it. I for one am extremely grateful to be allowed to use his
module in bsnes.
The Nintendo DS emulator's standalone name is dasShiny. You will need
the Nintendo DS firmware, which I cannot provide, in order to use it. It
also cannot (currently?) detect the save type used by NDS games. As
such, manifest.xml files must be created manually for this purpose. The
long-term plan is to create a database of save types for each game.
Also, you will need an analog input device for the touch screen for now
(joypad axes work well.)
There have also been a lot of changes from my end: a unified
manifest.xml format across all systems, major improvements to SPC7110
emulation, enhancements to RTC emulation, MSU1 enhancements, icons in
the file browser list, improvements to SNES coprocessor memory mapping,
cleanups and improvements in the libraries used to build bsnes, etc.
I've also included kaijuu (which allows launching game folders directly
with bsnes) and purify (which allows opening images that are compressed,
have copier headers, and have wrong extensions); both of which are fully
GUI-based.
This release only loads game folders, not files. Use purify to load ROM
files in bsnes.
Note that this will likely be the last release for a long time, and that
I will probably rename the emulator for the next release, due to how
many additional systems it now supports.
2012-08-07 14:08:37 +00:00
|
|
|
# console := true
|
2011-02-28 23:45:31 +00:00
|
|
|
|
2010-08-09 13:28:56 +00:00
|
|
|
# compiler
|
2014-01-29 12:57:02 +00:00
|
|
|
flags += -I. -O3 -fomit-frame-pointer
|
|
|
|
link +=
|
2011-01-06 10:16:07 +00:00
|
|
|
objects := libco
|
2010-08-09 13:28:56 +00:00
|
|
|
|
2011-08-18 13:58:27 +00:00
|
|
|
# profile-guided optimization mode
|
|
|
|
# pgo := instrument
|
|
|
|
# pgo := optimize
|
2011-08-20 14:40:44 +00:00
|
|
|
|
2011-08-18 13:58:27 +00:00
|
|
|
ifeq ($(pgo),instrument)
|
|
|
|
flags += -fprofile-generate
|
|
|
|
link += -lgcov
|
|
|
|
else ifeq ($(pgo),optimize)
|
|
|
|
flags += -fprofile-use
|
|
|
|
endif
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
# platform
|
Update to v093r01 release.
byuu says:
Changelog:
- added SA-1 MDR; fixes bug in SD Gundam G-Next where the main
battleship was unable to fire
- added out-of-the-box support for any BSD running Clang 3.3+ (FreeBSD
10+, notably)
- added new video shader, "Display Emulation", which changes the shader
based on the emulated system
- fixed the home button to go to your default library path
- phoenix: Windows port won't send onActivate unless an item is selected
(prevents crashing on pressing enter in file dialog)
- ruby: removed vec4 position from out Vertex {} (helps AMD cards)
- shaders: updated all shaders to use texture() instead of texture2D()
(helps AMD cards)
The "Display Emulation" option works like this: when selected, it tries
to load "<path>/Video Shaders/Emulation/<systemName>.shader/"; otherwise
it falls back to the blur shader. <path> is the usual (next to binary,
then in <config>/higan, then in /usr/share/higan, etc); and <systemName>
is "Famicom", "Super Famicom", "Game Boy", "Game Boy Color", "Game Boy
Advance"
To support BSD, I had to modify the $(platform) variable to
differentiate between Linux and BSD.
As such, the new $(platform) values are:
win -> windows
osx -> macosx
x -> linux or bsd
I am also checking uname -s instead of uname -a now. No reason to
potentially match the hostname to the wrong OS type.
2013-10-21 11:45:39 +00:00
|
|
|
ifeq ($(platform),windows)
|
|
|
|
ifeq ($(arch),x86)
|
Update to v090 release.
byuu says:
Most notably, this release adds Nintendo DS emulation. The Nintendo DS
module was written entirely by Cydrak, so please give him all of the
credit for it. I for one am extremely grateful to be allowed to use his
module in bsnes.
The Nintendo DS emulator's standalone name is dasShiny. You will need
the Nintendo DS firmware, which I cannot provide, in order to use it. It
also cannot (currently?) detect the save type used by NDS games. As
such, manifest.xml files must be created manually for this purpose. The
long-term plan is to create a database of save types for each game.
Also, you will need an analog input device for the touch screen for now
(joypad axes work well.)
There have also been a lot of changes from my end: a unified
manifest.xml format across all systems, major improvements to SPC7110
emulation, enhancements to RTC emulation, MSU1 enhancements, icons in
the file browser list, improvements to SNES coprocessor memory mapping,
cleanups and improvements in the libraries used to build bsnes, etc.
I've also included kaijuu (which allows launching game folders directly
with bsnes) and purify (which allows opening images that are compressed,
have copier headers, and have wrong extensions); both of which are fully
GUI-based.
This release only loads game folders, not files. Use purify to load ROM
files in bsnes.
Note that this will likely be the last release for a long time, and that
I will probably rename the emulator for the next release, due to how
many additional systems it now supports.
2012-08-07 14:08:37 +00:00
|
|
|
flags += -m32
|
|
|
|
link += -m32
|
|
|
|
endif
|
|
|
|
ifeq ($(console),true)
|
|
|
|
link += -mconsole
|
|
|
|
else
|
|
|
|
link += -mwindows
|
|
|
|
endif
|
2014-01-13 09:35:46 +00:00
|
|
|
link += -s -mthreads -luuid -lkernel32 -luser32 -lgdi32 -lcomctl32 -lcomdlg32 -lshell32 -lole32 -lws2_32
|
2011-09-27 11:55:02 +00:00
|
|
|
link += -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
|
Update to v093r01 release.
byuu says:
Changelog:
- added SA-1 MDR; fixes bug in SD Gundam G-Next where the main
battleship was unable to fire
- added out-of-the-box support for any BSD running Clang 3.3+ (FreeBSD
10+, notably)
- added new video shader, "Display Emulation", which changes the shader
based on the emulated system
- fixed the home button to go to your default library path
- phoenix: Windows port won't send onActivate unless an item is selected
(prevents crashing on pressing enter in file dialog)
- ruby: removed vec4 position from out Vertex {} (helps AMD cards)
- shaders: updated all shaders to use texture() instead of texture2D()
(helps AMD cards)
The "Display Emulation" option works like this: when selected, it tries
to load "<path>/Video Shaders/Emulation/<systemName>.shader/"; otherwise
it falls back to the blur shader. <path> is the usual (next to binary,
then in <config>/higan, then in /usr/share/higan, etc); and <systemName>
is "Famicom", "Super Famicom", "Game Boy", "Game Boy Color", "Game Boy
Advance"
To support BSD, I had to modify the $(platform) variable to
differentiate between Linux and BSD.
As such, the new $(platform) values are:
win -> windows
osx -> macosx
x -> linux or bsd
I am also checking uname -s instead of uname -a now. No reason to
potentially match the hostname to the wrong OS type.
2013-10-21 11:45:39 +00:00
|
|
|
else ifeq ($(platform),macosx)
|
|
|
|
flags += -march=native
|
|
|
|
else ifeq ($(platform),linux)
|
|
|
|
flags += -march=native
|
|
|
|
link += -s -Wl,-export-dynamic -lX11 -lXext -ldl
|
|
|
|
else ifeq ($(platform),bsd)
|
|
|
|
flags += -march=native
|
|
|
|
link += -s -Wl,-export-dynamic -lX11 -lXext
|
2010-08-09 13:28:56 +00:00
|
|
|
else
|
2013-01-21 12:27:15 +00:00
|
|
|
$(error unsupported platform.)
|
2010-08-09 13:28:56 +00:00
|
|
|
endif
|
|
|
|
|
Update to v087 release.
byuu says:
This release adds ST018 emulation. As this was the final unsupported
SNES coprocessor, this means that bsnes v087 is the first SNES emulator
to be able to claim 100% known compatibility with all officially
released games. And it does this with absolutely no hacks.
Again, I really have to stress the word known. No emulator is perfect.
No emulator ever really can be perfect for a system of this complexity.
The concept doesn't even really exist, since every SNES behaves subtly
different. What I mean by this, is that every single game ever
officially sold has been tested, and zero bugs (of any severity level)
are currently known.
It is of course extremely likely that bugs will be found in this
release, as well as in future releases. But this will always be
a problem for every emulator ever made: there is no way to test every
possible codepath of every single game to guarantee perfection. I will,
of course, continue to do my best to fix newfound bugs so long as I'm
around.
I'd really like to thank Cydrak and LostTemplar for their assistance in
emulating the ST018. I could not have done it without their help.
The ST018 ROM, like the other coprocessor ROMs, is copyrighted. This
means I am unable to distribute the image.
Changelog (since v086):
- emulated the 21.47MHz ST018 (ARMv3) coprocessor used by Hayazashi
Nidan Morita Shougi 2
- fixed PPU TM/TS edge case; fixes bottom scanline of text boxes in
Moryo Senki Madara 2
- fixed saving and loading of Super Game Boy save RAM
- NEC uPD7725,96050 ROMs now stored in little-endian format for
consistency
- cartridge folder concept has been reworked to use fixed file names
- added emulation of serial USART interface (replaces asynchronous UART
support previously)
2012-03-07 13:29:38 +00:00
|
|
|
ui := target-$(target)
|
|
|
|
|
2010-08-09 13:28:56 +00:00
|
|
|
# implicit rules
|
|
|
|
compile = \
|
|
|
|
$(strip \
|
|
|
|
$(if $(filter %.c,$<), \
|
2013-03-19 08:48:50 +00:00
|
|
|
$(compiler) $(cflags) $(flags) $1 -c $< -o $@, \
|
2010-08-09 13:28:56 +00:00
|
|
|
$(if $(filter %.cpp,$<), \
|
2013-03-19 08:48:50 +00:00
|
|
|
$(compiler) $(cppflags) $(flags) $1 -c $< -o $@ \
|
2010-08-09 13:28:56 +00:00
|
|
|
) \
|
|
|
|
) \
|
|
|
|
)
|
|
|
|
|
|
|
|
%.o: $<; $(call compile)
|
|
|
|
|
|
|
|
all: build;
|
|
|
|
|
2011-01-06 10:16:07 +00:00
|
|
|
obj/libco.o: libco/libco.c libco/*
|
|
|
|
|
2010-08-09 13:28:56 +00:00
|
|
|
include $(ui)/Makefile
|
2012-02-06 12:03:45 +00:00
|
|
|
flags := $(flags) $(foreach o,$(call strupper,$(options)),-D$o)
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
# targets
|
Update to v075 release.
byuu says:
This release brings improved Super Game Boy emulation, the final SHA256
hashes for the DSP-(1,1B,2,3,4) and ST-(0010,0011) coprocessors, user
interface improvements, and major internal code restructuring.
Changelog (since v074):
- completely rewrote memory sub-system to support 1-byte granularity in
XML mapping
- removed Memory inheritance and MMIO class completely, any address can
be mapped to any function now
- SuperFX: removed SuperFXBus : Bus, now implemented manually
- SA-1: removed SA1Bus : Bus, now implemented manually
- entire bus mapping is now static, happens once on cartridge load
- as a result, read/write handlers now handle MMC mapping; slower
average case, far faster worst case
- namespace memory is no more, RAM arrays are stored inside the chips
they are owned by now
- GameBoy: improved CPU HALT emulation, fixes Zelda: Link's Awakening
scrolling
- GameBoy: added serial emulation (cannot connect to another GB yet),
fixes Shin Megami Tensei - Devichil
- GameBoy: improved LCD STAT emulation, fixes Sagaia
- ui: added fullscreen support (F11 key), video settings allows for
three scale settings
- ui: fixed brightness, contrast, gamma, audio volume, input frequency
values on program startup
- ui: since Qt is dead, config file becomes bsnes.cfg once again
- Super Game Boy: you can now load the BIOS without a game inserted to
see a pretty white box
- ui-gameboy: can be built without SNES components now
- libsnes: now a UI target, compile with 'make ui=ui-libsnes'
- libsnes: added WRAM, APURAM, VRAM, OAM, CGRAM access (cheat search,
etc)
- source: removed launcher/, as the Qt port is now gone
- source: Makefile restructuring to better support new ui targets
- source: lots of other internal code cleanup work
2011-01-27 08:52:34 +00:00
|
|
|
clean:
|
2014-01-28 10:04:58 +00:00
|
|
|
-@$(call delete,out/*)
|
2010-08-09 13:28:56 +00:00
|
|
|
-@$(call delete,obj/*.o)
|
|
|
|
-@$(call delete,obj/*.a)
|
|
|
|
-@$(call delete,obj/*.so)
|
|
|
|
-@$(call delete,obj/*.dylib)
|
|
|
|
-@$(call delete,obj/*.dll)
|
|
|
|
-@$(call delete,*.res)
|
|
|
|
-@$(call delete,*.manifest)
|
|
|
|
|
Update to v091r11 release.
byuu says:
This release refines HSU1 support as a bidirectional protocol, nests SFC
manifests as "release/cartridge" and "release/information" (but release/
is not guaranteed to be finalized just yet), removes the database
integration, and adds support for ananke.
ananke represents inevitability. It's a library that, when installed,
higan can use to load files from the command-line, and also from a new
File -> Load Game menu option.
I need to change the build rules a bit for it to work on Windows (need
to make phoenix a DLL, basically), but it works now on Linux.
Right now, it only takes *.sfc file names, looks them up in the included
database, converts them to game folders, and returns the game folder
path for higan to load.
The idea is to continue expanding it to support everything we can that
I don't want in the higan core:
- load *.sfc, *.smc, *.swc, *.fig files
- remove SNES copier headers
- split apart merged firmware files
- pull in external firmware files (eg dsp1b.rom - these are staying
merged, just as SPC7110 prg+dat are merged)
- load *.zip and *.7z archives
- prompt for selection on multi-file archives
- generate manifest files based on heuristics
- apply BPS patches
The "Load" menu option has been renamed to "Library", to represent games
in your library. I'm going to add some sort of suffix to indicate
unverified games, and use a different folder icon for those (eg
manifests built on heuristics rather than from the database.)
So basically, to future end users:
File -> Load Game will be how they play games.
Library -> (specific system) can be thought of as an infinitely-sized
recent games list.
purify will likely become a simple stub that invokes ananke's functions.
No reason to duplicate all that code.
2012-11-05 08:22:50 +00:00
|
|
|
archive:
|
|
|
|
if [ -f higan.tar.xz ]; then rm higan.tar.xz; fi
|
|
|
|
tar -cJf higan.tar.xz `ls`
|
|
|
|
|
2011-12-12 10:59:53 +00:00
|
|
|
sync:
|
Update to v091r11 release.
byuu says:
This release refines HSU1 support as a bidirectional protocol, nests SFC
manifests as "release/cartridge" and "release/information" (but release/
is not guaranteed to be finalized just yet), removes the database
integration, and adds support for ananke.
ananke represents inevitability. It's a library that, when installed,
higan can use to load files from the command-line, and also from a new
File -> Load Game menu option.
I need to change the build rules a bit for it to work on Windows (need
to make phoenix a DLL, basically), but it works now on Linux.
Right now, it only takes *.sfc file names, looks them up in the included
database, converts them to game folders, and returns the game folder
path for higan to load.
The idea is to continue expanding it to support everything we can that
I don't want in the higan core:
- load *.sfc, *.smc, *.swc, *.fig files
- remove SNES copier headers
- split apart merged firmware files
- pull in external firmware files (eg dsp1b.rom - these are staying
merged, just as SPC7110 prg+dat are merged)
- load *.zip and *.7z archives
- prompt for selection on multi-file archives
- generate manifest files based on heuristics
- apply BPS patches
The "Load" menu option has been renamed to "Library", to represent games
in your library. I'm going to add some sort of suffix to indicate
unverified games, and use a different folder icon for those (eg
manifests built on heuristics rather than from the database.)
So basically, to future end users:
File -> Load Game will be how they play games.
Library -> (specific system) can be thought of as an infinitely-sized
recent games list.
purify will likely become a simple stub that invokes ananke's functions.
No reason to duplicate all that code.
2012-11-05 08:22:50 +00:00
|
|
|
ifeq ($(shell id -un),byuu)
|
2011-12-12 10:59:53 +00:00
|
|
|
if [ -d ./libco ]; then rm -r ./libco; fi
|
|
|
|
if [ -d ./nall ]; then rm -r ./nall; fi
|
|
|
|
if [ -d ./ruby ]; then rm -r ./ruby; fi
|
|
|
|
if [ -d ./phoenix ]; then rm -r ./phoenix; fi
|
|
|
|
cp -r ../libco ./libco
|
|
|
|
cp -r ../nall ./nall
|
|
|
|
cp -r ../ruby ./ruby
|
|
|
|
cp -r ../phoenix ./phoenix
|
|
|
|
rm -r libco/doc
|
2013-04-09 13:31:46 +00:00
|
|
|
rm -r libco/.test
|
|
|
|
rm -r nall/.test
|
|
|
|
rm -r ruby/.test
|
|
|
|
rm -r phoenix/.test
|
Update to v091r11 release.
byuu says:
This release refines HSU1 support as a bidirectional protocol, nests SFC
manifests as "release/cartridge" and "release/information" (but release/
is not guaranteed to be finalized just yet), removes the database
integration, and adds support for ananke.
ananke represents inevitability. It's a library that, when installed,
higan can use to load files from the command-line, and also from a new
File -> Load Game menu option.
I need to change the build rules a bit for it to work on Windows (need
to make phoenix a DLL, basically), but it works now on Linux.
Right now, it only takes *.sfc file names, looks them up in the included
database, converts them to game folders, and returns the game folder
path for higan to load.
The idea is to continue expanding it to support everything we can that
I don't want in the higan core:
- load *.sfc, *.smc, *.swc, *.fig files
- remove SNES copier headers
- split apart merged firmware files
- pull in external firmware files (eg dsp1b.rom - these are staying
merged, just as SPC7110 prg+dat are merged)
- load *.zip and *.7z archives
- prompt for selection on multi-file archives
- generate manifest files based on heuristics
- apply BPS patches
The "Load" menu option has been renamed to "Library", to represent games
in your library. I'm going to add some sort of suffix to indicate
unverified games, and use a different folder icon for those (eg
manifests built on heuristics rather than from the database.)
So basically, to future end users:
File -> Load Game will be how they play games.
Library -> (specific system) can be thought of as an infinitely-sized
recent games list.
purify will likely become a simple stub that invokes ananke's functions.
No reason to duplicate all that code.
2012-11-05 08:22:50 +00:00
|
|
|
endif
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
help:;
|