2010-08-09 13:28:56 +00:00
|
|
|
include nall/Makefile
|
2011-08-18 13:58:27 +00:00
|
|
|
|
Update to v082r04 release.
byuu says:
So, here's the deal. I now have three emulators. I don't think the
NES/GB ones are at all useful, but I do want them to be eventually. And
having them have those pathetic little GUIs like ui-gameboy, and keeping
everything in separate project folders, just doesn't work well for me.
I kind of "got around" the issue with the Game Boy, by only allowing SGB
mode emulation. But there is no "Super Nintendo" ... er ... wait ...
uhmm ... well, you know what I mean anyway.
So, my idea is to write a multi-emulator GUI, and keep the projects
together. The GUI is not going to change much. The way I envision this
working:
At startup, you have a menubar with: "Cartridge, Settings, Tools, Help".
Cartridge has "Load NES Cartridge", "Load SNES Cartridge", etc.
When you load something, Cartridge is replaced with the appropriate
system menu, eg "SNES". Here you have all your regular items: "power,
reset, controller port selection, etc." There is also a new "Unload
Cartridge" option, which is how you restore the "Cartridge" menu again.
I have no plans to emulate any other systems, but if I ever do emulate
something that doesn't take cartridges, I'll change the name to just
"Load" or something.
The cheat editor / state manager will look and act exactly the same. The
settings panel will look exactly the same. I'll simply show/hide
system-specific options as needed, like NES/SNES aspect ratio
correction, etc. The input mapping window will just have settings for
the currently loaded system. Video and audio tweaking will apply
cross-system, as will hotkey mapping.
The GUI stuff is mostly copy-paste, so it should only take me a week to
get it 95% back to where it was, so don't worry, this isn't total GUI
rewrite #80.
I am, however, making all the objects pointers, so that I can destruct
them all prior to main() returning, which is certainly one way of fixing
that annoying Windows/Qt crash.
Please only test on Linux. The Windows port is broken to hell, and will
give you a bad impression of the idea:
- menu groups are not hiding for some reason (all groups are showing, it
looks hideous)
- Timer interval(0) is taking 16ms per call, capping the FPS to ~64 tops
[FWIW, bsnes/accuracy gets 130fps, bgameboy gets 450fps, bnes gets
800fps; all run at lowest possible granularity]
- the OS keeps beeping when you press keys (AGAIN)
Of course, Qt and GTK+ don't let you shrink a window from the requested
geometry size, because they suck. So the video scaling stuff doesn't
work all that great yet.
Man, a metric fuckton of things need to be fixed in phoenix, and
I really don't know how to fix any of them :/
2011-09-09 04:08:38 +00:00
|
|
|
nes := nes
|
Updated to 20100813 release.
byuu says:
Since we're now talking about three splits, that's getting a bit out of
hand.
This WIP combines everything back into one project again. Added the
src/fast folder that has all the speed-oriented cores.
A slight slowdown to csnes from what it was before, I'm using blargg's
accurate DSP. I just don't like the idea of releasing a less accurate
DSP core than Snes9X v1.52 has. Plus the fast DSP core doesn't serialize
yet.
I moved back to snes_spc 0.9.0 because I care more about Tales and Star
Ocean than I do about Earthworm Jim 2. So if you try EWJ2 on csnes,
expect it to sound like it does on Snes9X. In other words, don't wear
headphones if you value your hearing.
The middle-of-the-road bsnes core uses blargg's accurate DSP, because
it's about 3% faster than mine which removes all of blargg's
optimizations. There is absolutely no accuracy loss here. bsnes v067.20
that is included should be equal to v067 official.
Performance:
Code:
asnes = 58fps
bsnes = 172fps +2.97x
csnes = 274fps +1.59x +4.72x
The binaries are not profiled, so that's an additional 15% slower from
the previous builds.
Save states only work on asnes, as I don't know how to serialize
blargg's cores yet. The copy_func thing is very confusing to me for some
reason. The debugger won't work anywhere.
Outside of that, please go ahead and bug test. Once I get the debugger
and save states working, I'll build some profiled v1.0 releases for all
three, and we can test that for a bit and then release.
2010-10-20 11:20:39 +00:00
|
|
|
snes := snes
|
2010-12-28 01:53:15 +00:00
|
|
|
gameboy := gameboy
|
2011-08-19 11:36:26 +00:00
|
|
|
profile := accuracy
|
Update to v082r04 release.
byuu says:
So, here's the deal. I now have three emulators. I don't think the
NES/GB ones are at all useful, but I do want them to be eventually. And
having them have those pathetic little GUIs like ui-gameboy, and keeping
everything in separate project folders, just doesn't work well for me.
I kind of "got around" the issue with the Game Boy, by only allowing SGB
mode emulation. But there is no "Super Nintendo" ... er ... wait ...
uhmm ... well, you know what I mean anyway.
So, my idea is to write a multi-emulator GUI, and keep the projects
together. The GUI is not going to change much. The way I envision this
working:
At startup, you have a menubar with: "Cartridge, Settings, Tools, Help".
Cartridge has "Load NES Cartridge", "Load SNES Cartridge", etc.
When you load something, Cartridge is replaced with the appropriate
system menu, eg "SNES". Here you have all your regular items: "power,
reset, controller port selection, etc." There is also a new "Unload
Cartridge" option, which is how you restore the "Cartridge" menu again.
I have no plans to emulate any other systems, but if I ever do emulate
something that doesn't take cartridges, I'll change the name to just
"Load" or something.
The cheat editor / state manager will look and act exactly the same. The
settings panel will look exactly the same. I'll simply show/hide
system-specific options as needed, like NES/SNES aspect ratio
correction, etc. The input mapping window will just have settings for
the currently loaded system. Video and audio tweaking will apply
cross-system, as will hotkey mapping.
The GUI stuff is mostly copy-paste, so it should only take me a week to
get it 95% back to where it was, so don't worry, this isn't total GUI
rewrite #80.
I am, however, making all the objects pointers, so that I can destruct
them all prior to main() returning, which is certainly one way of fixing
that annoying Windows/Qt crash.
Please only test on Linux. The Windows port is broken to hell, and will
give you a bad impression of the idea:
- menu groups are not hiding for some reason (all groups are showing, it
looks hideous)
- Timer interval(0) is taking 16ms per call, capping the FPS to ~64 tops
[FWIW, bsnes/accuracy gets 130fps, bgameboy gets 450fps, bnes gets
800fps; all run at lowest possible granularity]
- the OS keeps beeping when you press keys (AGAIN)
Of course, Qt and GTK+ don't let you shrink a window from the requested
geometry size, because they suck. So the video scaling stuff doesn't
work all that great yet.
Man, a metric fuckton of things need to be fixed in phoenix, and
I really don't know how to fix any of them :/
2011-09-09 04:08:38 +00:00
|
|
|
ui := ui
|
2010-08-09 13:28:56 +00:00
|
|
|
|
2011-08-22 11:27:04 +00:00
|
|
|
# options += console
|
2011-08-08 12:02:51 +00:00
|
|
|
# options += debugger
|
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
|
Update to v084r03 release.
(r02 was not posted to the WIP thread)
byuu says:
Internally, all color is processed with 30-bit precision. The filters
also operate at 30-bit depth.
There's a new config file setting, video.depth, which defaults to 24.
This causes the final output to downsample to 24-bit, as most will
require.
If you set it to 30-bit, the downsampling will not occur, and bsnes will
ask ruby for a 30-bit surface. If you don't have one available, you're
going to get bad colors. Or maybe even a crash with OpenGL.
I don't yet have detection code to make sure you have an appropriate
visual in place.
30-bit mode will really only work if you are running Linux, running Xorg
at Depth 30, use the OpenGL or XShm driver, have an nVidia Quadro or AMD
FireGL card with the official drivers, and have a 30-bit capable
monitor.
Lots of planning and work for very little gain here, but it's nice that
it's finally finished.
Oh, I had to change the contrast/brightness formulas a tiny bit, but
they still work and look nice.
2011-12-03 03:22:54 +00:00
|
|
|
flags := -I. -O3 -fomit-frame-pointer
|
2010-08-09 13:28:56 +00:00
|
|
|
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
|
|
|
|
ifeq ($(platform),x)
|
2011-03-01 13:31:28 +00:00
|
|
|
link += -s -ldl -lX11 -lXext
|
2010-08-09 13:28:56 +00:00
|
|
|
else ifeq ($(platform),osx)
|
|
|
|
else ifeq ($(platform),win)
|
2011-08-22 11:27:04 +00:00
|
|
|
link += $(if $(findstring console,$(options)),-mconsole,-mwindows)
|
2010-09-22 12:49:49 +00:00
|
|
|
link += -mthreads -s -luuid -lkernel32 -luser32 -lgdi32 -lcomctl32 -lcomdlg32 -lshell32 -lole32
|
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
|
|
|
|
|
2011-08-22 11:27:04 +00:00
|
|
|
flags := $(flags) $(foreach o,$(call strupper,$(options)),-D$o)
|
|
|
|
|
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
|
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
archive-all:
|
2011-09-23 11:13:57 +00:00
|
|
|
tar -cjf bsnes.tar.bz2 data gameboy libco nall nes obj out phoenix ruby snes ui ui-libsnes Makefile cc.bat clean.bat sync.sh
|
2010-08-09 13:28:56 +00:00
|
|
|
|
|
|
|
help:;
|