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-08-16 10:30:47 +00:00
|
|
|
# nds := nds
|
2012-03-18 01:04:22 +00:00
|
|
|
|
2011-08-19 11:36:26 +00:00
|
|
|
profile := accuracy
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
target := ethos
|
2010-08-09 13:28:56 +00:00
|
|
|
|
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
|
|
|
# options += debugger
|
|
|
|
# arch := win32
|
|
|
|
# console := true
|
2011-02-28 23:45:31 +00:00
|
|
|
|
2010-08-09 13:28:56 +00:00
|
|
|
# compiler
|
|
|
|
c := $(compiler) -std=gnu99
|
|
|
|
cpp := $(subst cc,++,$(compiler)) -std=gnu++0x
|
2012-04-24 13:13:42 +00:00
|
|
|
flags := -I. -O3 -fomit-frame-pointer
|
Update to v087r08 release.
byuu says:
Added some more ARM opcodes, hooked up MMIO. Bind it with mmio[(addr
000-3ff)] = this; inside CPU/PPU/APU, goes to read(), write().
Also moved the Hitachi HG51B core to processor/, and split it apart from
the snes/chip/hitachidsp implementation.
This one actually worked really well. Very clean split between MMIO/DMA
and the processor core. I may move a more generic DMA function inside
the core, not sure yet.
I still believe the HG51B169 to be a variant of the HG51BS family, but
given they're meant to be incredibly flexible microcontrollers, it's
possible that each variant gets its own instruction set.
So, who knows. We'll worry about it if we ever find another HG51B DSP,
I guess.
GBA BIOS is constantly reading from 04000300, but it never writes. If
I return prng()&1, I can get it to proceed until it hits a bad opcode
(stc opcode, which the GBA lacks a coprocessor so ... bad codepath.)
Without it, it just reads that register forever and keeps resetting the
system, or something ...
I guess we're going to have to try and get ARMwrestler working, because
the BIOS seems to need too much emulation code to do anything at all.
2012-03-24 07:52:36 +00:00
|
|
|
link := -s
|
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
|
|
|
|
ifeq ($(platform),x)
|
2012-04-24 13:13:42 +00:00
|
|
|
flags += -march=native
|
Update to v087r08 release.
byuu says:
Added some more ARM opcodes, hooked up MMIO. Bind it with mmio[(addr
000-3ff)] = this; inside CPU/PPU/APU, goes to read(), write().
Also moved the Hitachi HG51B core to processor/, and split it apart from
the snes/chip/hitachidsp implementation.
This one actually worked really well. Very clean split between MMIO/DMA
and the processor core. I may move a more generic DMA function inside
the core, not sure yet.
I still believe the HG51B169 to be a variant of the HG51BS family, but
given they're meant to be incredibly flexible microcontrollers, it's
possible that each variant gets its own instruction set.
So, who knows. We'll worry about it if we ever find another HG51B DSP,
I guess.
GBA BIOS is constantly reading from 04000300, but it never writes. If
I return prng()&1, I can get it to proceed until it hits a bad opcode
(stc opcode, which the GBA lacks a coprocessor so ... bad codepath.)
Without it, it just reads that register forever and keeps resetting the
system, or something ...
I guess we're going to have to try and get ARMwrestler working, because
the BIOS seems to need too much emulation code to do anything at all.
2012-03-24 07:52:36 +00:00
|
|
|
link += -ldl -lX11 -lXext
|
2010-08-09 13:28:56 +00:00
|
|
|
else ifeq ($(platform),osx)
|
|
|
|
else ifeq ($(platform),win)
|
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
|
|
|
ifeq ($(arch),win32)
|
|
|
|
flags += -m32
|
|
|
|
link += -m32
|
|
|
|
endif
|
|
|
|
ifeq ($(console),true)
|
|
|
|
link += -mconsole
|
|
|
|
else
|
|
|
|
link += -mwindows
|
|
|
|
endif
|
Update to v091r05 release.
[No prior releases were posted to the WIP thread. -Ed.]
byuu says:
Super Famicom mapping system has been reworked as discussed with the
mask= changes. offset becomes base, mode is gone. Also added support for
comma-separated fields in the address fields, to reduce the number of
map lines needed.
<?xml version="1.0" encoding="UTF-8"?>
<cartridge region="NTSC">
<superfx revision="2">
<rom name="program.rom" size="0x200000"/>
<ram name="save.rwm" size="0x8000"/>
<map id="io" address="00-3f,80-bf:3000-32ff"/>
<map id="rom" address="00-3f:8000-ffff" mask="0x8000"/>
<map id="rom" address="40-5f:0000-ffff"/>
<map id="ram" address="00-3f,80-bf:6000-7fff" size="0x2000"/>
<map id="ram" address="70-71:0000-ffff"/>
</superfx>
</cartridge>
Or in BML:
cartridge region=NTSC
superfx revision=2
rom name=program.rom size=0x200000
ram name=save.rwm size=0x8000
map id=io address=00-3f,80-bf:3000-32ff
map id=rom address=00-3f:8000-ffff mask=0x8000
map id=rom address=40-5f:0000-ffff
map id=ram address=00-3f,80-bf:6000-7fff size=0x2000
map id=ram address=70-71:0000-ffff
As a result of the changes, old mappings will no longer work. The above
XML example will run Super Mario World 2: Yoshi's Island. Otherwise,
you'll have to write your own.
All that's left now is to work some sort of database mapping system in,
so I can start dumping carts en masse.
The NES changes that FitzRoy asked for are mostly in as well.
Also, part of the reason I haven't released a WIP ... but fuck it, I'm
not going to wait forever to post a new WIP.
I've added a skeleton driver to emulate Campus Challenge '92 and
Powerfest '94. There's no actual emulation, except for the stuff I can
glean from looking at the pictures of the board. It has a DSP-1 (so
SR/DR registers), four ROMs that map in and out, RAM, etc.
I've also added preliminary mapping to upload high scores to a website,
but obviously I need the ROMs first.
2012-10-09 08:25:32 +00:00
|
|
|
link += -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
|
2010-08-09 13:28:56 +00:00
|
|
|
else
|
|
|
|
unknown_platform: help;
|
|
|
|
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,$<), \
|
|
|
|
$(c) $(flags) $1 -c $< -o $@, \
|
|
|
|
$(if $(filter %.cpp,$<), \
|
|
|
|
$(cpp) $(flags) $1 -c $< -o $@ \
|
|
|
|
) \
|
|
|
|
) \
|
|
|
|
)
|
|
|
|
|
|
|
|
%.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:
|
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,*.pgd)
|
|
|
|
-@$(call delete,*.pgc)
|
|
|
|
-@$(call delete,*.ilk)
|
|
|
|
-@$(call delete,*.pdb)
|
|
|
|
-@$(call delete,*.manifest)
|
|
|
|
|
2011-12-12 10:59:53 +00:00
|
|
|
sync:
|
|
|
|
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
|
|
|
|
rm -r libco/test
|
|
|
|
rm -r nall/test
|
|
|
|
rm -r ruby/_test
|
|
|
|
rm -r phoenix/nall
|
|
|
|
rm -r phoenix/test
|
|
|
|
|
2012-03-26 10:13:02 +00:00
|
|
|
archive:
|
2012-08-16 10:30:47 +00:00
|
|
|
if [ -f higan.tar.xz ]; then rm higan.tar.xz; fi
|
|
|
|
tar -cJf higan.tar.xz `ls`
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
help:;
|