Posts for endrift


1 2
5 6 7
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
It's fixed in git, and the fix will be in tomorrow's nightly and 0.2.1 when I release that within a month. It was a regression from a refactor I did :( Thanks for finding this.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Well, at least it's not crashing anymore. I'll take a closer look tomorrow. For some reason, the forums didn't email me when you replied, despite the fact that I told it to email me when this thread gets replies…
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Does anyone know how much RNG Sonic Advance 2 has? While trying to console verify Sonic Advance 1, I managed to get it perfectly up until the first boss that had any RNG, at which point the pattern was completely different. After fiddling a little with mukki's run of 2, it looks like I should be able to do the same thing, but if the bosses feature RNG patterns (which it looks like some of them do), I probably won't want to bother. I don't even have a copy of Sonic Advance 2 to test on, even, byt if the bosses aren't too RNG, I might pick up a copy. It's pretty cheap right now.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
As much as I hate to triple post, I've now written up a moderately long article on how I set up the Game Boy Player Player, and I now have a video that syncs up for ~5:50 before the first RNG boss has the wrong pattern. Of note is that I do not, in fact, have the very beginning of the TAS where it sets the language. This is due to it not being cleared when I clear my savedata, but I found a way to clear that too, so I'm gonna try syncing that to see if it changes the pattern at all. I may be able to screw with some framecounting before the game even starts, but that would probably only work for one boss pattern :/ Link to video
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
So in comparing how VBMs play in VBA, mGBA and real hardware, the current state of affairs is pretty depressing. mGBA does not insert NEARLY enough lag frames, and VBA is a few too few in general. I have recordings of some games on hardware (tweaked slightly, but not that much, just to get them to sync at all). There's a lot of work to be done still on the emulator side. Gonna write up an article on how I set up the hardware verifier (the so-called "Game Boy Player Player") soon. Link to video Link to video (Youtube decided to nicely crop the first one, but not the second one, for some reason) E] Here's a better synced version with some more frames inserted to compensate (pre-cropped this time): Link to video E2] First 200 seconds sync perfectly now, but a few frames after that it starts to desync. It turns out that I needed to insert frames at the very beginning of each level, but that was all the work that it seems I needed to do for those levels. Link to video
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Shijou Saikyou no Quiz Ou Ketteisen Super might be the only commercial one. (Thanks Wikipedia)
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Hmm, I can definitely repro it while in morph ball, but not when I do the same thing while jumping. The player said he was doing it while jumping, so it might be coincidentally triggering the same state.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
This is a biiiiit off topic, but a player testing mGBA for me described a bug wherein pressing left resulted in the game going right, but only with Samus's walking. The menus worked fine and morphing fixed it. I'm inclined to think it's a bug in mGBA, but the player thinks it's a game bug. Has anyone encountered this bug while working through Zero Mission in VBA/BizHawk? They said it "happened after I jumped into a wall/celing at an angle". E] To elaborate, the bad state is when the memory at 0x30013E2 is 0x0030. It's usually 0x20 for facing left or 0x10 for facing right. When it's 0x30, it gets very confused and can only walk right. Moreover, setting it to 0x00 causes it to get set to 0x30 when you attempt to move next. The player said the next time it happened, they were "just screw attacking". I'm inclined to think that there's a rogue write happening to that address somewhere, setting it to zero, but I'm not sure where. E2] After looking at it closer, I'm pretty sure this is an mGBA bug, so I filed it. Still curious to find out if anyone might have any info on it though.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Presumably they meant .bin/.cue, which is a way of describing CDDA, but with two files (for some awful reason). The actual audio data is in the .bin.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
d-feather wrote:
CoolKirby wrote:
d-feather wrote:
I'm not TASing them, I'm just playing them.
Then I recommend you test your games in endrift's mGBA. Like Anty-Lemon said, it aims to fix all bugs in GBA emulation. If the emulation issues are still there, please post your results here or through the bug reporting options on the site.
I tested Final Fantasy I & II: Dawn of Souls, and there aren't any graphical glitches. When I get a chance, I'll test the other games, but I'll exclude Pokémon Mystery Dungeon: Red Rescue Team since endrift said that works perfectly fine.
I tested LEGO Racers 2 (I didn't see any problems) and Hamtaro (which does have the aforementioned bug). I filed a bug to track the Hamtaro bug. If you wish to do any additional testing, please post results to the mGBA thread. Thanks for finding this!
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
I'm able to reproduce this in 0.1.1, but it seems to have been fixed in master for quite some time and should work with a nightly.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
It should be possible; it'd take a bit of work (mGBA's movie format is more complex than VBM or BK2, which might mean I went overboard*) and I won't have a chance to do it for a little while. I reassembled the Game Boy Player to transport it, so I'll need to take it apart again. I plan to cut a hole in the side to make this unnecessary in the future but I haven't done it yet. *The biggest complexity that would affect it here is the fact the movie format has distinct frame markers from input markers, so seeking is a bit weird. However, mGBA movie files are able to be chunked to allow for non-linear movies, which is mostly relevant for recording and editing. Playback is simple, but I don't have a way of compiling the non-linear movies into a linear format yet.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Also, a lot of this research was done previously by the people on Assembler Games, but they were mostly trying to reclock the CPU AGB A to sync with the GCN frames. The thread is a good read, regardless.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
The Game Boy Player has a CPU AGB A on it, which is the exact same chip as in an orignal GBA. (The SP uses a CPU AGB B.) There's an auxiliary chip on the GB Player (GBS-DOL) that takes the frame data from the CPU AGB A (the output is specialized for the LCD, so they just read the LCD signal) and reencodes it for the GCN, and likewise takes the GCN controller data and sends it to the CPU AGB A. The GCN controller input, which is what I was using at first, polls 18 times per GCN frame, which is kind of weird. However, GCN frames are ~59.94 FPS, whereas GBA frames are ~59.73 FPS. The GB Player is not clocked specially. It's exactly the same 59.73 FPS as on a GBA, so there is drift between the CPU AGB A and the GCN that's flattened out by the GBS-DOL chip. This means that using the GCN port is unworkable. However, I bypass the GCN controller port entirely by soldering to the board between the GBS-DOL chip and the CPU AGB A, so it should emulate exactly the same. The only problems should arise from the GBS-DOL losing presentation frames; but that only causes the video to look wrong.
Post subject: Game Boy Player Player (GBA console verification)
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
I built a console verifier for GameCube games by tapping a torn open wire, as well as one for the Game Boy Advance using a Game Boy Player that I soldered to. The GCN verifier is untested beyond trying to use it for GB Player stuff, but in theory should work if Dolphin TASes are accurate enough (but I doubt they will be). Meanwhile, the GB Player stuff all fails to sync (pretty dramatically sometimes) due to lag frames being off. I'm tapping the SPS and keypad buttons directly on the mainboard for the GB Player, so I know frames aren't drifting, but I've run into the following problems with the games I've tested:
  • Super Mario Advance: Syncs better than the version of VBA-rr I have for some reason, but when it goes through a door ~30 seconds in, a lag frame screws it up and Mario dies. This might be fixable with a manual tweak.
  • Sonic Advance: Presses start one frame too soon. If I offset the frame, then it syncs terribly once the game starts and jumps into spikes and dies.
  • Pokémon FireRed: Presses Start one frame too soon, again. If I adjust this, it properly sets the gender of the trainer and then misses a frame when it tries to open the name select screen, thus offsetting the whole thing.
  • Fire Emblem: Seems to press start one frame too soon, preventing the new game from being started. Haven't looked too closely.
  • Metroid Fusion: Hoo boy. Misses some lag frames or SOMETHING and then doesn't get to the game select screen at the right time. Manually adjusting this got it to work better, but it's still horrible.
  • Digimon Sapphire (I needed a BK2 game): Works well up until the stage select screen shows up, then it presses start one frame too soon, again, messing up the rest of the TAS. Haven't tried inserting a frame manually yet.
If anyone has some TAS they really want to see verified, I can see about trying to fix the lag frames manually, but it might be unworkable for VBA's emulation.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
I'd say "Work Time Fun" (think WarioWare, but dadaist) but I'm pretty sure there are microgames that take like 15 minutes regardless of how. Mega Man Powered Up and Maverick Hunter X might be neat. Crisis Core is, imo, a bad game, but it might be interesting to try to break it.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
These projects usually use emscripten, which will basically compile C/C++ and SDL down to JavaScript/ASM.js. However, there are several native JS emulators too, including ggalitz's GameBoy Online and IodineGBA, someone made N64js, and I made GBA.js (although GBA.js is very inaccurate and I would need to backport a lot of fixes before I'd recommend anyone using it for anything serious). But if you want the existing tools...it might be possible. Things that use multiple windows I'd imagine aren't friendly with the system, though, so the UI might need to be reworked entirely.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
For those disinclined to try nightlies, I've just released 0.1.1, which should fix a huge number of issues. It doesn't have all of the fixes, or the new features that are in the nightlies, but it contains a huge glut of the fixes. Again, let me know if any issues come up and I'll try to fix them quickly.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
Yes, they do. That was actually how I knew about this: the reboot-into-Mario Bros. functionality was very broken in every SMA game until I implemented the SoftReset syscall.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
TheMG2 wrote:
Based on what has been said so far in the thread, my guess is that high jumping on a barrel always causes the game to reset (or crash on not pc emulator). Somewhere along the line, the bit changed to the value you mentioned. So the problem would be finding what causes the bits to change to that value correct? Would your addition help with this?
Combined with other features in the emulator (rewinding and watchpoints, mostly), it should be more than enough. I could take a look at it myself, but I'm not sure how to get the game into this state. If I could get an mGBA savestate, that should help, but that would need to be taken with the upcoming nightly (in about 2 hours) due to some changes that were made in savestates about 12 hours ago.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
If people think it might be useful, I could add a way in mGBA to trap the syscall that causes the game to reset so that A) a savestate can be taken and B) a backtrace can be discovered to see what's causing this.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
I know that the way the game runs Mario Bros. is actually by reseting the game with a value in a specific location. This is the routine that resets the game into Mario Bros. in the US version. I took the liberty of commenting it up.
08057084:  4A07	ldr r2, [$080570A4]
08057086:  79D1	ldrb r1, [r2, #7] ; Load byte from 0x203FFFF
08057088:  2004	mov r0, #4
0805708A:  4240	neg r0, r0
0805708C:  4008	and r0, r1 ; Clear bottom two bits
0805708E:  2101	mov r1, #1
08057090:  4308	orr r0, r1 ; Set bottom bit
08057092:  71D0	strb r0, [r2, #7] ; Store back to 0x203FFFF
08057094:  4904	ldr r1, [$080570A8]
08057096:  2000	mov r0, #0
08057098:  8008	strh r0, [r1, #0] ; Store 16-bit value 0x0000 to 0x2000050
0805709A:  2040	mov r0, #64
0805709C:  F183 FB14  bl $081DA6C8
---
081DA6C8:  4B04	ldr r3, [$081DA6DC]
081DA6CA:  2200	mov r2, #0
081DA6CC:  701A	strb r2, [r3, #0] ; Disable platform interrupts
081DA6CE:  4B04	ldr r3, [$081DA6E0]
081DA6D0:  2200	mov r2, #0
081DA6D2:  701A	strb r2, [r3, #0] ; Acknowledge pending interrupts
081DA6D4:  3BFA	sub r3, #250
081DA6D6:  469D	mov sp, r3 ; Reset stack pointer
081DA6D8:  DF01	swi #1 ; Reset sound registers
081DA6DA:  DF00	swi #0 ; Reset game
Experimenting a bit, the value at 0x203FFFF seems to be crucial. When the routine starts, the value of the bottom bits is 0b00. Thus, when it ends, it's 0b01. However, if I force it to be 0b00 or 0b11 afterwards, it restarts back into Mario & Luigi. This byte appears to be a bitfield that's written to somewhat frequently, and the bottom bit says "Boot into Mario Bros." Setting it to 0b10, oddly, reboots back into the menu, skipping the intro.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
The new nightly build as mentioned won't be up for another 11 hours or so. They're built at 00:00 UTC every day. There hasn't been a nightly since I posted the changes a few hours ago.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
That probably means the emulator thought it wasn't a valid game. I had neglected to add a "failed to load" dialog. I added one just now, so try the next nightly to find out if that's the issue. It's not a particularly stringent check, though, so something must have really gone wrong for it to think that it's not a valid game. As for Boktai 3, that's because I forgot to add Boktai 3 to the list of games that use the solar sensor. I just added this and tested it, so that should be good in the next nightly. I'm planning on releasing 0.1.1 very soon. It's just fixes, though, so it's really only for people who aren't downloading the nightlies. It won't have any new features.
endrift
Any
Emulator Coder, Experienced Forum User
Joined: 12/14/2014
Posts: 161
I can't speak to that bug, as it seems to work fine for me. However, I did just fix another bug in Minish Cap. I ended up making nightlies available on the downloads page, so you might try downloading a nightly to see if it still happens. (The bug fix mentioned will not be in the current nightly until midnight UTC, so 4 PM PST or 7 PM EST, but that was only a graphics bug.)
1 2
5 6 7