2018-05-18 05:21:22 +00:00
|
|
|
name := bsnes
|
|
|
|
|
2018-07-16 06:16:26 +00:00
|
|
|
hiro.path := ../hiro
|
|
|
|
hiro.resource := $(ui)/resource/bsnes.rc
|
|
|
|
include $(hiro.path)/GNUmakefile
|
2018-05-18 05:21:22 +00:00
|
|
|
|
Update to v106r47 release.
byuu says:
This is probably the largest code-change diff I've done in years.
I spent four days working 10-16 hours a day reworking layouts in hiro
completely.
The result is we now have TableLayout, which will allow for better
horizontal+vertical combined alignment.
Windows, GTK2, and now GTK3 are fully supported.
Windows is getting the initial window geometry wrong by a bit.
GTK2 and GTK3 work perfectly. I basically abandoned trying to detect
resize signals, and instead keep a list of all hiro windows that are
allocated, and every time the main loop runs, it will query all of them
to see if they've been resized. I'm disgusted that I have to do this,
but after fighting with GTK for years, I'm about sick of it. GTK was
doing this crazy thing where it would trigger another size-allocate
inside of a previous size-allocate, and so my layouts would be halfway
through resizing all the widgets, and then the size-allocate would kick
off another one. That would end up leaving the rest of the first layout
loop with bad widget sizes. And if I detected a second re-entry and
blocked it, then the entire window would end up with the older geometry.
I started trying to build a message queue system to allow the second
layout resize to occur after the first one completed, but this was just
too much madness, so I went with the simpler solution.
Qt4 has some geometry problems, and doesn't show tab frame layouts
properly yet.
Qt5 causes an ICE error and tanks my entire Xorg display server, so ...
something is seriously wrong there, and it's not hiro's fault. Creating
a dummy Qt5 application without even using hiro, just int main() {
TestObject object; } with object performing a dynamic\_cast to a derived
type segfaults. Memory is getting corrupted where GCC allocates the
vtables for classes, just by linking in Qt. Could be somehow related to
the -fPIC requirement that only Qt5 has ... could just be that FreeBSD
10.1 has a buggy implementation of Qt5. I don't know. It's beyond my
ability to debug, so this one's going to stay broken.
The Cocoa port is busted. I'll fix it up to compile again, but that's
about all I'm going to do.
Many optimizations mean bsnes and higan open faster. GTK2 and GTK3 both
resize windows very quickly now.
higan crashes when you load a game, so that's not good. bsnes works
though.
bsnes also has the start of a localization engine now. Still a long way
to go.
The makefiles received a rather substantial restructuring. Including the
ruby and hiro makefiles will add the necessary compilation rules for
you, which also means that moc will run for the qt4 and qt5 targets, and
windres will run for the Windows targets.
2018-07-14 03:59:29 +00:00
|
|
|
ruby.path := ../ruby
|
|
|
|
include $(ruby.path)/GNUmakefile
|
2018-05-18 05:21:22 +00:00
|
|
|
|
2018-07-16 06:16:26 +00:00
|
|
|
objects += ui-bsnes ui-program ui-input ui-presentation
|
|
|
|
objects += ui-settings ui-tools ui-resource
|
|
|
|
objects := $(objects:%=obj/%.o)
|
2018-07-08 04:58:27 +00:00
|
|
|
|
2018-05-24 02:14:17 +00:00
|
|
|
obj/ui-bsnes.o: $(ui)/bsnes.cpp
|
|
|
|
obj/ui-program.o: $(ui)/program/program.cpp
|
|
|
|
obj/ui-input.o: $(ui)/input/input.cpp
|
|
|
|
obj/ui-presentation.o: $(ui)/presentation/presentation.cpp
|
|
|
|
obj/ui-settings.o: $(ui)/settings/settings.cpp
|
Update to v106r35 release.
byuu says:
Changelog:
- sfc/ppu-fast: fixed overscan crash
- sfc/ppu-fast: fixed direct color mode
- sfc: reconnected MSU1 support
- higan: game.sfc/msu1/data.rom, game.sfc/msu1/track-#.pcm
- bsnes: game.msu, game-#.pcm
- bsnes: added cheat code editor
- bsnes: added cheat code database support
- sfc/ppu-fast: clear overscan lines when overscan disabled
- sfc: output 223/239 lines instead of 224/240 lines
- bsnes: fix aspect correction calculation
- bsnes: crop line 224 when overscan masking is enabled
- bsnes: exposed Expansion Port menu; but hid “21fx” from the list of
devices
- bsnes: tools menu is hidden until a game is loaded
- ruby/input/keyboard/quartz: fixed compilation error
So only bsnes the automated overscan cropping option. In higan, you can
crop however many lines you like from the top or bottom of the image.
But for bsnes, it automatically eats sixteen lines. My view right now is
that if bsnes is meant to be the casual gaming emulator, that it should
eat line 224 in this mode. Most games show content here, but because of
the way the SNES PPU works, the very last line ends up on its very own
tile row (line 0 isn't rendered), if the scroll registers don't account
for it. There's a small number of games that will draw junk data to the
very last scanline of the frame as a result of this. So I chose, at
least for now, to hide it. Users can obviously disable overscan cropping
to see this scanline. I'm open to being convinced not to do this, if
someone has a compelling reason.
We're pretty much screwed one way or the other with no overscan masking.
If we output 239 lines, then most games will render 7 blank lines + 224
drawn lines + 8 blank lines, and the black top and bottom aren't
centered. But if we output 240 lines to get 8 + 224 + 8, then games that
do use overscan will have a blank line at the very bottom of the window.
I'm also trying out a modified cheat code file format. It's been forever
since I bothered to look at it, and the “cartridge” parent node doesn't
match what I'm doing with trying to rename “cartridge” to “game” in
manifests. And indeed, the idea of requiring a root node is rather
superfluous for a cheat code file. Current format looks like this:
cheat
description: foo
code: 7e2000=20+7e2001=30?40
enabled
cheat
description: bar
code: 7e4000=80
Open to discussing this, and I'd like to sync up with Snes9X before they
push out a new release, and I'll agree to finalize and never change this
format again.
I chose to use .cht for the extension when using game files (eg
gamename.cht)
2018-06-03 13:14:42 +00:00
|
|
|
obj/ui-tools.o: $(ui)/tools/tools.cpp
|
2018-05-24 02:14:17 +00:00
|
|
|
obj/ui-resource.o: $(ui)/resource/resource.cpp
|
2018-05-18 05:21:22 +00:00
|
|
|
|
2018-07-16 06:16:26 +00:00
|
|
|
all: $(hiro.objects) $(ruby.objects) $(objects)
|
2018-07-08 04:58:27 +00:00
|
|
|
$(info Linking out/$(name) ...)
|
2018-07-16 06:16:26 +00:00
|
|
|
+@$(compiler) -o out/$(name) $(hiro.objects) $(ruby.objects) $(objects) $(hiro.options) $(ruby.options) $(options)
|
2018-05-18 05:21:22 +00:00
|
|
|
ifeq ($(platform),macos)
|
2018-05-20 04:39:29 +00:00
|
|
|
rm -rf out/$(name).app
|
|
|
|
mkdir -p out/$(name).app/Contents/MacOS/
|
|
|
|
mkdir -p out/$(name).app/Contents/Resources/
|
|
|
|
mv out/$(name) out/$(name).app/Contents/MacOS/$(name)
|
2018-05-24 02:14:17 +00:00
|
|
|
cp $(ui)/resource/$(name).plist out/$(name).app/Contents/Info.plist
|
|
|
|
sips -s format icns $(ui)/resource/$(name).png --out out/$(name).app/Contents/Resources/$(name).icns
|
2018-05-18 05:21:22 +00:00
|
|
|
endif
|
|
|
|
|
2018-07-16 06:16:26 +00:00
|
|
|
verbose: hiro.verbose ruby.verbose nall.verbose all;
|
|
|
|
|
2018-05-18 05:21:22 +00:00
|
|
|
install:
|
|
|
|
ifeq ($(shell id -un),root)
|
|
|
|
$(error "make install should not be run as root")
|
|
|
|
else ifeq ($(platform),windows)
|
|
|
|
else ifeq ($(platform),macos)
|
2018-05-20 04:39:29 +00:00
|
|
|
mkdir -p ~/Library/Application\ Support/$(name)/
|
|
|
|
cp -R out/$(name).app /Applications/$(name).app
|
2018-05-18 05:21:22 +00:00
|
|
|
else ifneq ($(filter $(platform),linux bsd),)
|
|
|
|
mkdir -p $(prefix)/bin/
|
|
|
|
mkdir -p $(prefix)/share/applications/
|
|
|
|
mkdir -p $(prefix)/share/icons/
|
|
|
|
mkdir -p $(prefix)/share/$(name)/
|
Update to v106r47 release.
byuu says:
This is probably the largest code-change diff I've done in years.
I spent four days working 10-16 hours a day reworking layouts in hiro
completely.
The result is we now have TableLayout, which will allow for better
horizontal+vertical combined alignment.
Windows, GTK2, and now GTK3 are fully supported.
Windows is getting the initial window geometry wrong by a bit.
GTK2 and GTK3 work perfectly. I basically abandoned trying to detect
resize signals, and instead keep a list of all hiro windows that are
allocated, and every time the main loop runs, it will query all of them
to see if they've been resized. I'm disgusted that I have to do this,
but after fighting with GTK for years, I'm about sick of it. GTK was
doing this crazy thing where it would trigger another size-allocate
inside of a previous size-allocate, and so my layouts would be halfway
through resizing all the widgets, and then the size-allocate would kick
off another one. That would end up leaving the rest of the first layout
loop with bad widget sizes. And if I detected a second re-entry and
blocked it, then the entire window would end up with the older geometry.
I started trying to build a message queue system to allow the second
layout resize to occur after the first one completed, but this was just
too much madness, so I went with the simpler solution.
Qt4 has some geometry problems, and doesn't show tab frame layouts
properly yet.
Qt5 causes an ICE error and tanks my entire Xorg display server, so ...
something is seriously wrong there, and it's not hiro's fault. Creating
a dummy Qt5 application without even using hiro, just int main() {
TestObject object; } with object performing a dynamic\_cast to a derived
type segfaults. Memory is getting corrupted where GCC allocates the
vtables for classes, just by linking in Qt. Could be somehow related to
the -fPIC requirement that only Qt5 has ... could just be that FreeBSD
10.1 has a buggy implementation of Qt5. I don't know. It's beyond my
ability to debug, so this one's going to stay broken.
The Cocoa port is busted. I'll fix it up to compile again, but that's
about all I'm going to do.
Many optimizations mean bsnes and higan open faster. GTK2 and GTK3 both
resize windows very quickly now.
higan crashes when you load a game, so that's not good. bsnes works
though.
bsnes also has the start of a localization engine now. Still a long way
to go.
The makefiles received a rather substantial restructuring. Including the
ruby and hiro makefiles will add the necessary compilation rules for
you, which also means that moc will run for the qt4 and qt5 targets, and
windres will run for the Windows targets.
2018-07-14 03:59:29 +00:00
|
|
|
mkdir -p $(prefix)/share/$(name)/locales/
|
2018-05-18 05:21:22 +00:00
|
|
|
cp out/$(name) $(prefix)/bin/$(name)
|
Update to v106r47 release.
byuu says:
This is probably the largest code-change diff I've done in years.
I spent four days working 10-16 hours a day reworking layouts in hiro
completely.
The result is we now have TableLayout, which will allow for better
horizontal+vertical combined alignment.
Windows, GTK2, and now GTK3 are fully supported.
Windows is getting the initial window geometry wrong by a bit.
GTK2 and GTK3 work perfectly. I basically abandoned trying to detect
resize signals, and instead keep a list of all hiro windows that are
allocated, and every time the main loop runs, it will query all of them
to see if they've been resized. I'm disgusted that I have to do this,
but after fighting with GTK for years, I'm about sick of it. GTK was
doing this crazy thing where it would trigger another size-allocate
inside of a previous size-allocate, and so my layouts would be halfway
through resizing all the widgets, and then the size-allocate would kick
off another one. That would end up leaving the rest of the first layout
loop with bad widget sizes. And if I detected a second re-entry and
blocked it, then the entire window would end up with the older geometry.
I started trying to build a message queue system to allow the second
layout resize to occur after the first one completed, but this was just
too much madness, so I went with the simpler solution.
Qt4 has some geometry problems, and doesn't show tab frame layouts
properly yet.
Qt5 causes an ICE error and tanks my entire Xorg display server, so ...
something is seriously wrong there, and it's not hiro's fault. Creating
a dummy Qt5 application without even using hiro, just int main() {
TestObject object; } with object performing a dynamic\_cast to a derived
type segfaults. Memory is getting corrupted where GCC allocates the
vtables for classes, just by linking in Qt. Could be somehow related to
the -fPIC requirement that only Qt5 has ... could just be that FreeBSD
10.1 has a buggy implementation of Qt5. I don't know. It's beyond my
ability to debug, so this one's going to stay broken.
The Cocoa port is busted. I'll fix it up to compile again, but that's
about all I'm going to do.
Many optimizations mean bsnes and higan open faster. GTK2 and GTK3 both
resize windows very quickly now.
higan crashes when you load a game, so that's not good. bsnes works
though.
bsnes also has the start of a localization engine now. Still a long way
to go.
The makefiles received a rather substantial restructuring. Including the
ruby and hiro makefiles will add the necessary compilation rules for
you, which also means that moc will run for the qt4 and qt5 targets, and
windres will run for the Windows targets.
2018-07-14 03:59:29 +00:00
|
|
|
cp $(ui)/resource/locales/* $(prefix)/share/$(name)/locales/
|
2018-05-24 02:14:17 +00:00
|
|
|
cp $(ui)/resource/$(name).desktop $(prefix)/share/applications/$(name).desktop
|
|
|
|
cp $(ui)/resource/$(name).png $(prefix)/share/icons/$(name).png
|
2018-05-18 05:21:22 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
uninstall:
|
|
|
|
ifeq ($(shell id -un),root)
|
|
|
|
$(error "make uninstall should not be run as root")
|
|
|
|
else ifeq ($(platform),windows)
|
|
|
|
else ifeq ($(platform),macos)
|
2018-05-20 04:39:29 +00:00
|
|
|
rm -rf /Applications/$(name).app
|
2018-05-18 05:21:22 +00:00
|
|
|
else ifneq ($(filter $(platform),linux bsd),)
|
|
|
|
rm -f $(prefix)/bin/$(name)
|
|
|
|
rm -f $(prefix)/share/applications/$(name).desktop
|
|
|
|
rm -f $(prefix)/share/icons/$(name).png
|
|
|
|
endif
|