liji32 / sameboy Goto Github PK
View Code? Open in Web Editor NEWGame Boy and Game Boy Color emulator written in C
Home Page: https://sameboy.github.io/
License: Other
Game Boy and Game Boy Color emulator written in C
Home Page: https://sameboy.github.io/
License: Other
aspect ratio i wrong when using the aspect ratio from the core. manually setting 1:1 par (10:9 dar) fixes it
On keyboard, you use ESC both for opening and closing the menu.
On controller, one button opens the menu (both shoulder buttons do this on my XBox 360 controller), but you have to press B (which is assigned to A on my controller) to close the menu, instead of using the same button as when opening the menu.
(As a side note, it would be nice if pressing B could close the current submenu, or menu if on the main one.)
Will we be able to use this emulator with gamepad controller ? I love the PS4 controller and hope to be able to use it with your awesome emulator soon. Sorry about my English.
I tested 007 with the libretro core and the character sprite is invisible depending on the position. It happens directly in the first level when moving around.
This does not happen with the stand-alone SameBoy build from the website.
Tested the libretro core under Windows and Linux and stand-alone SameBoy under Windows.
As of today there is no way of entering The Advance Shop in Oracle of Ages and Oracle of Seasons in either SameBoy standalone or the Libretro core.
Oracle of Seasons, The Advance Shop is open
Oracle of Ages, The Advance Shop is open
It is a unique shop often referred to as the 100 Rupee Advance Shop and can only be accessed when either games is played on a Game Boy Advance console, otherwise the right-sided doors will be closed and shut.
bgb, Gambatte and most other emulators have the option to enable Game Boy Advance mode one way or another.
There isn't a whole lot of CGB games that takes advantage of playing on the GBA and I believe there is only four games that does it.
Thanks in advance!
Users report that for some reason they get no audio on WiiU unless they set the High Pass Filter to something other than off.
Maybe an endian-ness issue?
The demo appears to accept any input to continue past the initial screen but SameBoy will only continue if certain button combinations are pressed (e.g. A+Right, B+Left)
SameBoy master and SameBoy libretro only accept certain combos
BGB, Gambatte (libretro) and mGBA (libretro) appear to accept any input to continue
Demo: https://www.pouet.net/prod.php?which=15116
SameBoy Linux/SDL: b1d65fd
SameBoy cannot play Pinball Deluxe. The ROM corrupts the memory by continuously leaking the stack after the game is started. The game also fails to run on BGB for similar, but not identical, reasons.
I did not test the game on my real CGB.
I have two controllers, none of which will work properly with SameBoy. The first one I tried was an Xbox One controller, which almost worked... except SameBoy didn't map the D-pad and I was forced to use the left stick instead. The second controller I tried was an SNES controller (through an adaptor), which also almost worked... except Start and R were mapped to "turbo", Select and L were mapped to "menu", and X and Y were mapped to A and B respectively, leaving the GB Start and Select buttons unable to be pressed by any button on the controller. I would appreciate it if I could manually configure the gamepad so that I wouldn't have to go through things like this.
The test rom fails a few of the tests, using the latest libretro linux updater version.
I think I have the source code for it stuffed somewhere, let me know if it would be useful. It would also be good to verify the tests on real hardware, as they are quite old and some may be revision specific.
I think it starts around the title screen, then stays playing in the background throughout the map screen and gameplay.
When I re-set the Time to the Proper Time it works but when I exit out and Comes Back the Time is still the Same as it was when I exited and not the Real Time on the Computer. I am using Windows 10 Made a Video showing what I mean:
Hi @LIJI32 and thanks for a wonderful and accurate Game Boy emulator!
I have read both #8 and this commit 00623d4 and from what I could understand from it the sound quality should be fixed and the pops and clicks should be gone?
Maybe this is just something on my end but I don't know, I'm running SameBoy 0.10 (libretro@f905c4d) on RetroArch 1.7.0 on Windows 10 Enterprise 2016 LTSB x64 and I can still hear frequent pops and clicks, real strong in Zelda - Link's Awakening.
All you have to do is to start a new game and the music in Mabe village should pop and click like crazy, and this is not happening on either bgb or Gambatte.
I have tried to change the Audio settings in RetroArch to make them similar like bgb for example but the music still pops and clicks.
However this isn't the case for all games I have, but of all 12, Link's Awakening is the worst sounding game.
It seems like the libretro port is constantly playing at 100% volume even when the sound in the game is supposed to be silent.
This causes other sound in the background to be distorted/clipping as well.
Tested on Arch Linux with PulseAudio 11.1, RetroArch 1.6.9 and the latest master of SameBoy.
The mmaps are set properly as far as I can see, but achievements are not triggering. The games are identified correctly.
@leiradel I think this worked before right?
DEFINES -Wno-deprecated-declarations -g -DGB_INTERNAL -c Core/z80_cpu.c -o build/obj/Core/z80_cpu.c.o
Core/z80_cpu.c:760:14: error: unused variable 'call_addr' [-Werror,-Wunused-variable]
uint16_t call_addr = gb->pc - 1;
^
Core/z80_cpu.c:937:14: error: unused variable 'call_addr' [-Werror,-Wunused-variable]
uint16_t call_addr = gb->pc - 1;
^
Core/z80_cpu.c:971:14: error: unused variable 'call_addr' [-Werror,-Wunused-variable]
uint16_t call_addr = gb->pc - 1;
^
3 errors generated.
Makefile:135: recipe for target 'build/obj/Core/z80_cpu.c.o' failed
make[1]: *** [build/obj/Core/z80_cpu.c.o] Error 1
Since commit d8e0683 and up, the emulator displays blinking sprites on some games. The effect happens specially when moving, if that makes sense. I have recorded the following two videos as a reference:
Wario Land - Super Mario Land 3 (W) [!].gb: https://0x0.st/sMCA.mp4
Kirby's Dream Land 2 (U) [S][!].gb: https://0x0.st/sMCm.mp4
SameBoy was compiled using libsdl2-dev 2.0.7+dfsg1-3 and clang 4.0-40 on Debian sid.
Thank you for making such great emulator! 🌟
I am trying to make a good SameBoy SlackBuild for Slackware Linux. This will include both the SDL frontend and the libretro port. The libretro port is rather straight forward, but its not really clear what files the SDL frontend will make use of. Additionally its not clear what paths I should install these files so that SameBoy will see them.
For example, including the *.fsh
shaders files seems obvious, preferable they should be installed to /usr/share/sameboy/
or /usr/share/games/sameboy/
on Slackware. Will SameBoy check either of these paths? Can I set the path in the Makefile
?
The sound quality of both the Libretro and SDL ports of SameBoy on Windows seems bad when compared to Gambatte-Libretro. It's more noticeable on some games than others. The BIOS boot sound and the intro to Kirby's Block Ball had a pretty noticeable quality difference, so I did some recordings:
KBB Gambatte-Sameboy Windows.zip
The Gambatte clip is pretty clean, with just a few pops here and there. SameBoy Libretro and SDL sound like maybe they are playing at a lower KHz? More pops and clicks too.
Hi!
I realize the demand is pretty specific : I'd like to emulate link cables between virtual gameboys for sync stuff. The context is I use LSDJ to make music with gameboys, and you can connect multiple gameboys to get them to play together at the same rhythm, using a master/slave config.
On Windows, I usually use BGB, which supports it, but on Mac and Linux, you have to go through Wine. It works... okay let's say. It's just hella laggy and tends to desync pretty rapidly.
Just discovered your project today, so I don't know if this is possible at all. From what I can see, BGB creates a listening server that other instances can connect to. I'll check out if I can help about this
There are some minor graphical problems for most of the demo, but during a specific part right at the end there are SEVERE graphical issues and a severe timing issue. BGB and Gambatte do not exhibit these issues.
Demo:
www.pouet.net/prod.php?which=65345
How to Reproduce:
Hey
I have one weird issue. I have a crash when saving states in dual single cart mode but only on the following case:
Basically Dual Mode enabled, and emulated model DMG | CGB. Every other combination works. Even CGB | DMG
Crashes immediately when saving state with this weird stack trace:
Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 6304.0x7374]
0x00007ff97fbc877b in ntdll!RtlIsNonEmptyDirectoryReparsePointAllowed ()
from C:\WINDOWS\SYSTEM32\ntdll.dll
(gdb) bt
#0 0x00007ff97fbc877b in ntdll!RtlIsNonEmptyDirectoryReparsePointAllowed ()
from C:\WINDOWS\SYSTEM32\ntdll.dll
#1 0x00007ff97fbcfcfa in ntdll!RtlpNtMakeTemporaryKey ()
from C:\WINDOWS\SYSTEM32\ntdll.dll
#2 0x00007ff97fb6fa02 in ntdll!RtlSetProxiedProcessId ()
from C:\WINDOWS\SYSTEM32\ntdll.dll
#3 0x00007ff97fb83e08 in ntdll!memset () from C:\WINDOWS\SYSTEM32\ntdll.dll
#4 0x00007ff97d3c984c in msvcrt!free () from C:\WINDOWS\System32\msvcrt.dll
#5 0x000000006cf53be2 in sameboy_libretro!retro_serialize ()
from D:\GameData\Emulators\RetroArch\libretro\sameboy_libretro.dll
#6 0x0000000000402cf3 in core_serialize (info=0x5adf760) at core_impl.c:320
#7 0x0000000000421f92 in content_save_state (
path=0xaff10d0 "D:\\GameData\\EmulatorData\\States\\windows\\SameBoy\\Pokemon - Blue Version (USA, Europe) (SGB Enhanced).state", save_to_disk=true,
autosave=false) at tasks/task_save.c:1172
#8 0x000000000040d354 in command_event_main_state (cmd=10) at command.c:1620
#9 0x000000000040d8c5 in command_event (cmd=CMD_EVENT_SAVE_STATE, data=0x0)
at command.c:1877
#10 0x0000000000407f41 in runloop_check_state (settings=0xa724610,
input_nonblock_state=false, sleep_ms=0x5adfdc0) at retroarch.c:2922
#11 0x0000000000408676 in runloop_iterate (sleep_ms=0x5adfdc0)
at retroarch.c:3192
#12 0x000000000040170f in rarch_main (argc=5, argv=0xa7245d0, data=0x0)
at frontend/frontend.c:131
#13 0x000000000040176f in SDL_main (argc=5, argv=0xa7245d0)
at frontend/frontend.c:154
#14 0x00000000007f0458 in main_getcmdline ()
#15 0x00000000004013c7 in __tmainCRTStartup ()
at C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:337
#16 0x00000000004014cb in WinMainCRTStartup ()
at C:/repo/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtexe.c:187```
(Using macOS High Sierra)
When trying to open any .gbc file, I ran into the following error:
The problem was apparently caused by VisualBoyAdvance, since removing it from my system made everything work fine. It might be some kind of conflict concerning file type association, since "Open with" didn't show SameBoy when VBA was installed, but did afterwards, and the "Open" dialog in the app didn't let me select the .gbc files at all.
Hi there,
Was sent here by @ISSOtm :)
The attached test rom switches from one palette to the inverse of that palette and then back to the original palette during mode 3. There are 12 t-cycles between palette changes:
; set the new palette: 8 cycles
ld [c], a
; set the old palette again: 12 cycles
ld a, b
ld [c], a
In an earlier version of the test rom I was just switching the palette from white to black to white on each line, and thought it was a timing issue with the ® sprite, but PinoBatch suggested testing black to white to black also. "When one component writes a value at the exact time something else reads it the time for the value to rise may differ from the time for it to fall. A 1 may linger longer than a 0 or vice versa."
Not 100% sure whats going on, but seems like if the CPU is changing the palette while the PPU is reading the palette on the same cycle then the pixel should be rendered as black (or dark grey?).
The effect isn't seen on my MGB or CGB, only on DMG.
Specifically, latching is not supported.
When a wild Pokemon is encountered in G/S, the screen is glitched for a few frames.
Indie game Aevilia uses clever HDMA tricks to detect emulators. It relies both on open-bus quirks, which are easy to emulate, but also on tight HDMA timings that require proper test ROMs to verify.
Once again latest linux autoupdated. Link to sources: https://github.com/wilbertpol/mooneye-gb/tree/master/tests
Fails:
tested in GBC mode:
intr_2_mode0_timing_sprites
intr_2_mode0_timing_sprites_nops
intr_2_mode0_timing_sprites_scx1_nops
intr_2_mode0_timing_sprites_scx2_nops
intr_2_mode0_timing_sprites_scx3_nops
intr_2_mode0_timing_sprites_scx4_nops
ly_lyc_0_write-C
ly_lyc_153_write-C
ly_lyc_write-C
stat_write_if-C
tested in GB mode (just GS/G specific):
ly_lyc_0_write-GS
ly_lyc_153_write-GS
ly_lyc_write-GS
stat_write_if-GS
Hi, is there a way to lower the volume on here? If not, is there a constant I can change in the code to permanently lower it?
is this app suport this lang?
I was writing my own custom bootrom code, and got the quick animation based on your source code.
When checking wait for frames, I found this code to be not accurate to count frames
WaitFrame:
ldh a, [$44]
cp $90 ; <-- compares LY=144, if LY is already 144, it will return early
jr nz, WaitFrame
ret
WaitBFrames:
call WaitFrame
dec b ; <-- while LY=144, frame checks will be skipped
jr nz, WaitBFrames
ret
As you may notice, calling WaitBFrames while LY is still 144 will drop all the additional waits you were expecting. If you are lucky, LY increases to 145 and another frame will be correctly awaited.
As you are a guy very paranoid for accuracy, I can suggest the implementation I used for the WaitFrame :)
WaitFrame:
ldh a, [$44]
cp 143 ; <-- syncs to a new frame first
jr nz, WaitFrame
wait_ly_144:
ldh a, [$44]
cp 144 ; <-- now we can wait for vblank
jr nz, wait_ly_144
ret
The above code will always work in WaitBFrames, because LY=144 now, we need a new frame in LY=143
(maybe the first sync frame will be dropped, but we have a little time while LY increments)
With this new code, calling WaitBFrames(60) will wait for a sec correctly.
And now to fix the animation timings based on the new function, giving it an entire duration of about 1 sec, without cutting sound off too early:
; Wait ~0.08 seconds
ld b, 5 ; <-- just enough time to display logo
call WaitBFrames
; Play first sound
ld a, $83
call PlaySound
ld b, 5 ; <-- wait for ~ 0.084 sec, almost the original tone duration
call WaitBFrames
; Play second sound
ld a, $c1
call PlaySound
; Wait ~0.9 seconds
ld b, 50 ; <-- wait for a sec to let tone finishes playing
call WaitBFrames
I applied those changes to my own custom boot here
Thank you for your efforts on getting pretty accurate emulation! Maybe I will need help later with audio emulation, as I have zero knowledge about digital audio processing, except maybe I know a .wav file stores waves :)
This is probably due a non-standard MBC.
Several mappers are unsupported.
Official:
MBC6
TAMA5
Unlicensed:
Rocket #303
Wisdom Tree
SmartCom
Datel Orbital #461
Bootleg Mappers (Probably the easiest way is to support the GBX format from Taizou - http://hhug.me/gbx )
I tried something last night.
That IF you load the Same Game Up then it will not work at all. Only Works when you have 2 DIfferent Games in the 2 Gameboys.
Video I made Here:
https://www.youtube.com/watch?v=6nspM67aQzU
I guess Using the Same Game when Trading it kind of Stupid but IF you playing 2 Player with the game you can’t.
Fails in latest master:
DMG mode:
acceptance:
boot_hwio-dmgABCXmgb
serial:
boot_sclk_align-dmgABCXmgb
CGB mode:
misc:
boot_hwio-C
I guess the boot_hwio tests pass with official bootroms?
Two bugs for the price of one !
One, the direction key associated with the joystick is considered repressed (ie. released then held again) every time the stick's position changes. Thus, it's possible to get multiple D-Pad "presses" by simply rotating the stick, or altering its tilt. Even slightly, and that's the problem.
To reproduce : this can be done in any menu : tilt the joystick slowly to quickly scroll all the way down, or hold it quickly then rotate it.
Second, holding directly cardinal directions is kinda screwy too. SameBoy seems to stop considering the joystick held after some random time. Maybe it's linked to the above.
To reproduce : hold straight up/down/left/right.
All the relevant info and link to sources should be here: https://forums.nesdev.com/viewtopic.php?f=20&t=16796
This GHX tech demo doesn't appear to play the PCM samples properly. Works fine in Gambatte and BGB.
Hi there,
@not6 did most of the work so far on doing a basic libretro port. We have made some nice progress.
Our only problem so far though is that the runloop that has to be implemented doesn't really fit our model.
It would be best if we could run exactly one frame once every retro_run call, without needing to have a vblank handler active.
Because the runloop is not implemented right now in a way libretro understands, fastforwarding and rewinding is currently not possible.
You can see what we currently do for SameBoy here -
https://github.com/libretro/SameBoy/blob/master/libretro/libretro.c#L272
This is our vblank callback implementation -
https://github.com/libretro/SameBoy/blob/master/libretro/libretro.c#L142
You can see here how we implemented the runloop for another GBC/GB emulator, Gambatte -
https://github.com/libretro/gambatte-libretro/blob/master/libgambatte/libretro/libretro.cpp#L829
Thanks for the great work on this emulator.
The original CGB Boot ROM initializes the channel 3 wave pattern, while SameBoy's Boot ROM does not.
The GBC had special palettes for several GB games built into the BIOS which would be automatically assigned whenever you would play GB games on a GBC. If no special palette was found, it would then default to one of the generic ones. Is it possible to add this feature to Sameboy? there is already support for external BIOS. Gambatte has a similar feature and it is quite handy.
Maybe an option to toggle which hardware to emulate on boot would be best as that would give you the option of emulating the GB or the GBC when playing original GB games.
Here is an example of the internal GBC palettes on Gambatte.
Thank you for porting this emulator over to Retroarch by the way, it is awesome!
I want to get the address that is on top of the stack. p/a [sp]
only returns an 8-bit value, whereas I want a 16-bit value.
While it is possible to type p/a [sp] + [sp+1]*256
, it can get rather tedious (especially with a double-deref, where I might want to get the contents of the address located on top of the stack...).
As such, a syntax that retrieves a 16-bit value from an address would be very welcome.
Here are a few suggestions for such a syntax (ordered by decreasing order of my appreciation) :
[[a:hl]]
){a:hl}
)[w/a:hl]
, with w
standing for word
)What the title says. Tested with 'Batman' for GB.
Here's a screenshot of the game crashing while trying to rewind:
Here's a screenshot of graphical glitches after stopping a rewind:
And here's a screenshot of the game crashing after subsequently trying to exit the game after stopping a rewind (this happens a lot too). I suspect this has something to do with the fact that I have RetroArch set to save a state on exit.
It seems some source files are missing for Libretro port.
G -Wall -D__LIBRETRO__ -fPIC -I.. -std=gnu11 -D_GNU_SOURCE -D_USE_MATH_DEFINES -fPIC -DGB_INTERNAL
make: *** No rule to make target '../build/obj/../libretro/agb_boot_libretro.c.o', needed by '../build/bin/sameboy_libretro.so'. Stop.
make: Leaving directory '/tmp/SameBoy/libretro'
I have a function located at $0051
, called SwitchRAMBanks
(SameBoy correctly loads and displays its name from the SYM file accompanying my ROM), but the instruction that reached it was displayed as CALL IO_HDMA1 ; =$0051
, whereas I expected my function's name instead.
This is a pain to check, but I am trying my best. As I cannot verify on hardware, take these with a grain of salt. Found here.
Format
"Name of tests" - <Passes in DMG mode? 1/0> ; <Passes in CGB mode? 1/0>
CPU
corrupted_stop - 0 ; 0
corrupted_stop_2 - cannot test (no results)
corrupted_stop_sound - cannot test (no results)
cpu_registers_initial_dmg - 1 ; 1
cpu_registers_initial_gbc - N ; 0 (may be from a different CGB revision?)
daa - cannot test (no results)
halt_bug_test - 1 ; 1
halt_bug_timing - 1 ; 1
halt_if - 0 ; 0
halt_ret_adress - 1 ; 1
halt_strange_things - 1 ; 1
if_flag_cleared - 1 ; 1
speed_change_cancel (not pressed) - N ; 0
speed_change_cancel (pressed) - N ; 0
speed_change_timing_coarse - N ; 0
speed_change_timing_fine - N ; 0
stop_lcd_on_off - cannot test (not sure how to interpret results)
stop_no_exit - cannot test (no results)
undefined_opcodes - cannot test (no results)
undefined_opcodes_2 - cannot test (no results)
DMA
dma_copy_during_halt_speed - 0 ; 0
dma_halt_stop_speedchange - 0 ; 0
dma_irq
dma_restart - 1 ; 1 (i hope, doesn't contain zero padding)
dma_timing - 1 ; 1 (i hope, doesn't contain zero padding)
dma_timing_2 - 1 ; 1
dma_timing_dblspeed - N ; 1 (i hope, doesn't contain zero padding)
dma_timing_lcd_on - 0 ; 0
dma_valid_sources_dmg - 0 ; 0
dma_valid_sources_gbc - N ; 0
gdma_irq - N ; 0
gdma_timing_coarse - N ; 0
gdma_timing_fine - N ; 0
hdma_halt - N ; 0
hdma_modify_adress - N ; 1
hdma_start_1 - N ; 0
hdma_start_2 - N ; 0
hdma_start_3 - N ; 0
hdma_timing_fine - N ; 0
hdma_valid_dest_swap_bank - N ; 1
hdma_valid_sources - N ; 0
Interrupts
halt_exit_timings_ime_disabled_dmg_mode - 1 ; 1
halt_exit_timings_ime_disabled_cgb_mode - N ; 1
halt_exit_timings_ime_enabled_dmg_mode - 1 ; 1
halt_exit_timings_ime_enabled_cgb_mode - N ; 1
int_timing_halt_dmg_mode - 1 ; 1
int_timing_halt_cgb_mode - N ; 1
int_timing_no_halt_dmg_mode - 1 ; 1
int_timing_no_halt_cgb_mode - N ; 1
joy_interrupt - NOT
joy_interrupt_manual - NOT
joy_interrupt_manual_delay - NOT
lcd_irq_delay_timer_halt_dmg_mode - 1 ; 1
lcd_irq_delay_timer_halt_gbc_mode - N ; 1
lcd_irq_delay_timer_no_halt_dmg_mode - 1 ; 1
lcd_irq_delay_timer_no_halt_gbc_mode - N ; 1
serial_int_handle_timing_dmg_mode - 1 ; 1
serial_int_handle_timing_gbc_mode - N ; 1
set_clear_ime_delays - 1 ; 1
timer_int_handle_timing_dmg_mode - 1 ; 1
timer_int_handle_timing_gbc_mode - N ; 1
vbl_irq_delay_timer_dmg_mode - 1 ; 1
vbl_irq_delay_timer_gbc_mode - N ; 0
LCD
TODO
Memory
echo_ram_read - 0 ; 1
echo_ram_write - 0 ; 1
misc_rw_registers_gbc_mode - N ; 0
misc_rw_registers_gb_mode - 1 ; 1
oam_echo_ram_lcd_on - 1 ; 0
oam_echo_ram_read - 1 ; 0
oam_echo_ram_read_2 - 1 ; 0
oam_echo_ram_read_gbc_dmg_mode - N ; 0
timer_rw_regs - 1 ; 1
Serial
sc_change_freq_gbc - N ; 0
sio_irq_delay - 0 ; 0
Sound
div_resets_sound_test - cannot test (no results)
fade_double_speed - N ; 1 (I hope, would not trust my ears, both sounded right)
Timers
TODO
Video
bg_disabled_dmg - cannot test (no results)
bg_disabled_dmg_wx - cannot test (no results)
bg_disabled_gbc - cannot test (no results)
I will do more as I have time.
Using my msys2/mingw-w64 environment on Windows 10, I get the following error during compilation:
$ make
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/utils.c.o -M SDL/utils.c -c -o build/obj/SDL/utils.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/shader.c.o -M SDL/shader.c -c -o build/obj/SDL/shader.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/opengl_compat.c.o -M SDL/opengl_compat.c -c -o build/obj/SDL/opengl_compat.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/main.c.o -M SDL/main.c -c -o build/obj/SDL/main.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/gui.c.o -M SDL/gui.c -c -o build/obj/SDL/gui.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/SDL/font.c.o -M SDL/font.c -c -o build/obj/SDL/font.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/z80_disassembler.c.o -M Core/z80_disassembler.c -c -o build/obj/Core/z80_disassembler.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/z80_cpu.c.o -M Core/z80_cpu.c -c -o build/obj/Core/z80_cpu.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/timing.c.o -M Core/timing.c -c -o build/obj/Core/timing.c.dep
Core/timing.c:3:9: error: '_WIN32_WINNT' macro redefined [-Werror,-Wmacro-redefined]
#define _WIN32_WINNT 0x0500
^
C:\msys64\mingw64\x86_64-w64-mingw32\include\_mingw.h:232:9: note: previous definition is here
#define _WIN32_WINNT 0x502
^
1 error generated.
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/symbol_hash.c.o -M Core/symbol_hash.c -c -o build/obj/Core/symbol_hash.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/save_state.c.o -M Core/save_state.c -c -o build/obj/Core/save_state.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/rewind.c.o -M Core/rewind.c -c -o build/obj/Core/rewind.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/printer.c.o -M Core/printer.c -c -o build/obj/Core/printer.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/memory.c.o -M Core/memory.c -c -o build/obj/Core/memory.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/mbc.c.o -M Core/mbc.c -c -o build/obj/Core/mbc.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/joypad.c.o -M Core/joypad.c -c -o build/obj/Core/joypad.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/gb.c.o -M Core/gb.c -c -o build/obj/Core/gb.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/display.c.o -M Core/display.c -c -o build/obj/Core/display.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/debugger.c.o -M Core/debugger.c -c -o build/obj/Core/debugger.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/camera.c.o -M Core/camera.c -c -o build/obj/Core/camera.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/apu.c.o -M Core/apu.c -c -o build/obj/Core/apu.c.dep
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -MT build/obj/Core/timing.c.o -M Core/timing.c -c -o build/obj/Core/timing.c.dep
Core/timing.c:3:9: error: '_WIN32_WINNT' macro redefined [-Werror,-Wmacro-redefined]
#define _WIN32_WINNT 0x0500
^
C:\msys64\mingw64\x86_64-w64-mingw32\include\_mingw.h:232:9: note: previous definition is here
#define _WIN32_WINNT 0x502
^
1 error generated.
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -DGB_INTERNAL -c Core/apu.c -o build/obj/Core/apu.c.o
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -DGB_INTERNAL -c Core/camera.c -o build/obj/Core/camera.c.o
clang -Werror -Wall -std=gnu11 -D_GNU_SOURCE -DVERSION="0.10.1" -I. -D_USE_MATH_DEFINES -Wno-deprecated-declarations -g -DGB_INTERNAL -c Core/debugger.c -o build/obj/Core/debugger.c.o
Core/debugger.c:1846:22: error: implicit declaration of function 'getline' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
while ((length = getline(&line, &size, f)) != -1) {
^
1 error generated.
make: *** [Makefile:142: build/obj/Core/debugger.c.o] Fehler 1
All packages of my msys2 installation are up-to-date.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.