Gecko dotNET Bugs and Requests

Started by Mal1t1a, January 19, 2010, 12:08:54 AM

Previous topic - Next topic

dcx2

Yeah, they *say* it only goes down to 2...

I have a timing function built into Gecko.NET's logger.  I timed 100 "status" commands.  This involves one byte going to the USB Gecko and one byte coming from it.  I always got 100 * SetLatencyTimer's value.  When I changed it to 1ms, I got 100 ms for 100 status commands.

I also know that you can queue multiple dumps in a single transfer.  So, a given memory transfer requires sending 9 bytes to the USB Gecko (cmd_readmem, start address, end address).  It turns out that if you stream like this in one chunk, I think you actually need to send the command *twice*, so you actually send 10 bytes...I don't know why, but one of the bytes gets lost, I think even after applying the rx/tx patch.

If you want to dump six areas of memory, you could send 60 bytes in one go.  You should send a pause command first.  When the code handler has "paused" the game, it will basically sit and poll the EXI bus, so it can run through all your dumps as fast as possible before sending a resume command.

---

Another alternative to SetLatencyTimer is the Event Character, but I'm not sure how to use this yet.  Currently, I fancy hacking some VC SNES games...

See this guide for more info on.  Note that the USB Gecko is FT245R, a FIFO and not a UART.

http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf

biolizard89

Quote from: dcx2 on April 23, 2011, 06:24:57 PM
Yeah, they *say* it only goes down to 2...

I have a timing function built into Gecko.NET's logger.  I timed 100 "status" commands.  This involves one byte going to the USB Gecko and one byte coming from it.  I always got 100 * SetLatencyTimer's value.  When I changed it to 1ms, I got 100 ms for 100 status commands.

I also know that you can queue multiple dumps in a single transfer.  So, a given memory transfer requires sending 9 bytes to the USB Gecko (cmd_readmem, start address, end address).  It turns out that if you stream like this in one chunk, I think you actually need to send the command *twice*, so you actually send 10 bytes...I don't know why, but one of the bytes gets lost, I think even after applying the rx/tx patch.

If you want to dump six areas of memory, you could send 60 bytes in one go.  You should send a pause command first.  When the code handler has "paused" the game, it will basically sit and poll the EXI bus, so it can run through all your dumps as fast as possible before sending a resume command.

---

Another alternative to SetLatencyTimer is the Event Character, but I'm not sure how to use this yet.  Currently, I fancy hacking some VC SNES games...

See this guide for more info on.  Note that the USB Gecko is FT245R, a FIFO and not a UART.

http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-04_DataLatencyFlow.pdf
Yep, I read that PDF while developing GeckoTunnel; GeckoTunnel uses a 2ms latency timer.  That's quite interesting that 1ms works on a USB Gecko.  So here's a question, what happens when you use 0?  The FTDI docs for the hi-speed chip say that 0 should eliminate the delay completely... if 1 works for the USB Gecko, I'm quite curious whether 0 does anything.  (I wouldn't expect it to work, but I wouldn't expect 1 to work either....)

BLiTz*

Could you add a random search method?
Let me explain:
The random search method would search an area specified by the user.
Then the user could do something. Say move a little.
The user would start the search again.
The program would then search again for the values changed.
The ones that didn't change would be removed from the table.
Simple enough right?

biolizard89

Quote from: BLiTz* on April 27, 2011, 10:34:45 PM
Could you add a random search method?
Let me explain:
The random search method would search an area specified by the user.
Then the user could do something. Say move a little.
The user would start the search again.
The program would then search again for the values changed.
The ones that didn't change would be removed from the table.
Simple enough right?
Forgive me if I misunderstand, but isn't there already a "not equal" search type present?

BLiTz*

Quote from: biolizard89 on April 28, 2011, 02:12:37 AM
Quote from: BLiTz* on April 27, 2011, 10:34:45 PM
Could you add a random search method?
Let me explain:
The random search method would search an area specified by the user.
Then the user could do something. Say move a little.
The user would start the search again.
The program would then search again for the values changed.
The ones that didn't change would be removed from the table.
Simple enough right?
Forgive me if I misunderstand, but isn't there already a "not equal" search type present?

Yes but this method would speed up the time it takes to find a "unkown" address, because it  only returns what addresses changed. and then you can trim it up some. and you got ur address

dcx2

That's been there since before I took over development.  Look a little more carefully through the Search Condition dropdowns and you'll see Unknown Value.

James0x57

It's only unknown the first search- after that you compare to a previous result.


Dude

#427
That's like the "changed" comparson search type in CheatEngine.

It already exists in Gecko.NET.  It's called "not equal".

It compares all addresses with the last memory dump for anything that has "changed".
Start an "unknown" search, then choose "not equal" from then on.  this will compare the new dump with the old dump for anything that changes.

------

Talking about CheatEngine though, I've got a suggestion:
Would it be possible to search for 8bit, 16bit and 32bit values in one search?

Let me explain.

normally, you'd have to choose either 8bit, 16bit or 32bit before searching.  You'll then be stuck only finding values of that size.
In CheatEngine, you are able to search for all value sizes in one.

If 3F800000 then becomes 3F900000 then you could list in the results:

"3F900000"  -32bit
"3F90"        -16bit
"F9"           -8bit
"90"           -8bit

You could put the size of each value in a new column at the end to show what it is, just for simplicity.
This would, however, require more memory on your PC/laptop due to the increased number of results.
Keeping the individual 8/16/32bit choices can be kept for searching for values that you know are within a set size, narrowing results.

Deathwolf

#428
The new Gecko dNet 0.65 screws my USB Gecko up as hell. After a few minutes it says "lost connection" and it freez. When I try to restart it, then I'm not able to connect anymore to my USB Gecko. Tried it over XX times. There's something wrong...
But the 0.64 works great.

Memory viewer bug:

I've no idea but sometimes my game freez when the "Update button" is activated. The values are changing sooo fast that I can't follow them anymore. Is it because I'm using USB 3.0?
lolz

dcx2

#429
Because of the under-the-hood C2 patches that are applied to the code handler, whenever Gecko.NET connects to the USB Gecko, it has to send codes.

I noticed today that if Gecko.NET attaches to the game while at the loading screens, it would cause a crash.  I assume this is because of how BPNext + Sending Codes works.  Wait until the game is at the first menu screen before you run Gecko.NET.

---

Others reported MemView problems if they didn't have an updated version of the USB Gecko driver.

No, the values are not changing fast because of USB 3.0.  The USB Gecko is limited to Full Speed (aka USB 1.1 speed). 

BLiTz*

Sometimes when the gecko freezes(the game is still running) i unplug the cord from my computer. and it comes up with a box about connection issues. so then i plug it back in
and click yes.
the search, reset, buttons are still faded, so i have to reconnect again. could you fix this?

dcx2

"when the gecko freezes"

Which Gecko?  Gecko.NET, USB Gecko, Gecko OS?  Were you doing something when this happened (Memory Viewer, Search, Breakpoint, Watch List, etc?)

I've known about the "have to reconnect twice" bug.  Just pressing the button twice is so much easier that I just never felt like trying to figure out what was going wrong.  It doesn't cause an error or data loss, so it was no big deal to me.

Arudo

I don't know if this is just my computer's issue or something with Gecko dotNet but I do notice when I open Task Manager, gecko dotNet's process is still running even though I've closed it, disconnected it from the USBGecko etc. Thoughts on this dcx?
-Crazy Hacker Hates You All (definitely)-

ノಠ益ಠ)ノ彡â"»â"â"»

Do NOT PM me about Code Requests

Pro-tip: Hit the Applaud Button

Oh? Failed to read the rules? You're already dead.

dcx2

Sounds like the Watch List not closing properly.  0.65.1 will ask you to try closing again.

Arudo

In regards to that, does the Watchlist just open in the background even if I don't use it?
-Crazy Hacker Hates You All (definitely)-

ノಠ益ಠ)ノ彡â"»â"â"»

Do NOT PM me about Code Requests

Pro-tip: Hit the Applaud Button

Oh? Failed to read the rules? You're already dead.