It is currently Sat Jul 20, 2019 11:50 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 24 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Sat Dec 15, 2018 3:45 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
For educational purposes to help me figure out how to maybe modify the speed for other nes games, I'm trying to figure out why the gamegenie modifies the bike speed and how.

Mega turbo speed on 'A' button - EVUKGEAP + TESGPALA
https://datacrystal.romhacking.net/wiki ... ke:RAM_map

----------------------------
EVUKGEAP
----------------------------
C0BC cmp: 18 v: E0 (GG converted)
----------------------------
00:C0BC:E0 3F CPX #$3F (with GG activated)
00:C0BC:18 CLC (Without GG activated)
----------------------------
0x00F3 speed starting at 0, maxes at 46/47. pressing B gets you there faster (increments by 2, where A adds just one), but 47/49 seems the max speed. seems to be a cap somewhere, poking it higher doesnt give you more speed. (datacrystal info)
---------------------------

I did some searching and found the ram map (I believe) to be 00F3.. and this part of the code affects speed.
Why doesn't he move with 00F3 Val: 0E
?


TESGPALA What's the purpose of this part of the code?
----------------------------
C0D1 cmp: 03 v: 06
----------------------------
00:C0D1:06 03 ASL $0003 = #$22 (With GG activated)
00:C0D1:03 UNDEFINED (without GG activated)
----------------------------


Last edited by gukingofheart on Sun Dec 16, 2018 4:35 pm, edited 1 time in total.

Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 4:02 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 8488
Location: Seattle
I'm pretty certain that isn't code. It might instead be changing the first entry in a table that holds accelerations...

Clever-disasm finds that that's a 5 byte data table containing the values $18, $3F, $28, $20, $28; and is followed by another table.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 4:07 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
Not code? You referring to the debug info? (I could of took a screenshot)
How is it changing it?, and what does "TESGPALA" even do?


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 4:23 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 8488
Location: Seattle
The CPU can access memory and treat it as something for the CPU to do: "code"; or can instead work with it as numbers: "data".

I'm about 90% certain that every single byte in the range of $C000 through $C183 is data.

I find that the best way to figure out how changing these constants affects things is to play in a debugging emulator and see what happens with the value.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 4:40 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
access memory?
Is there a bunch of CLC & CPX examples around? I don't get how to use these exactly.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 4:46 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 8488
Location: Seattle
My point is that that's not CLC, it's just the number $18 = 24. Similarly it's not CPX, it's just the number $E0 = 224.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 5:53 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
Not sure how to play around though. Let's switch games then to my goal. "Marble madness"
Trying to give the marble increased speed. From what I can tell, there's an X speed and Y speed.. will start just with the X for now.

In this case, I have to work with SBC? Sec? and maybe LDA.
Which value do I even try to mess with? and do I change the SBC to something else, or the Sec to something else?


Attachments:
marble_speed_research1.png
marble_speed_research1.png [ 43.16 KiB | Viewed 3343 times ]
Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 8:48 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
My next idea, is to look up a bunch of different speed codes from different NES games.. because even though I believe your trying, I'm not understanding your advice.. I think it's made for people who created a bunch of gamegenie codes already.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 8:59 pm 
Offline

Joined: Sun Apr 13, 2008 11:12 am
Posts: 8488
Location: Seattle
Do you want higher maximum velocities or higher acceleration? Either way, it'll basically involve tracing through execution. If there isn't already a complete memory map, it probably will require finding what holds position, from that figuring out what holds velocity, (possibly from that figuring out what holds acceleration,) and then stepping and/or using breakpoints to figure out how what code affects things.

It's a lot of little steps, and while a good debugger will make it a lot quicker, it still requires being able to generate a mental model of how they built things.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 9:15 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
Right now, I'm trying to "Hold A" to make the marble move much faster.
(Using fceux btw)

If for some reason I get this, I'd try to find a way to "Hold A" to make the marble jump.. but I figure, one step at a time.

I have no clue what I should do with CPX, CLC, SBC? SEC?
In excitebike a CPX was changed to a CLC.. but why.
Do things like this always need to be swapped to another function.. and how does one figure out what to even swap something to.
There's a lot of option.. doing a complete guessing game for every single possibility would take months if you don't have a general idea on what to even try.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 9:33 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 7528
Location: Canada
gukingofheart wrote:
In excitebike a CPX was changed to a CLC.. but why.

Don't call it an instruction unless it's actually executed as one. These aren't instructions, they're just numbers stored in RAM.

Don't use the disassembler to inspect RAM variables like this. Use the hex memory view, or RAM watch, etc. The disassembly view is for tracing out the code parts, not looking at variables in RAM.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 11:09 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
Hex or disassembly, it still converts to the same thing.
CLC (CLear Carry) $18
Immediate CPX #$44 $E0 2 2

Calling it CLC/CPX $18/$E0 shouldn't make a difference.
So let me rephrase. Why was it changed from $18 to $E0?


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 11:25 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 7528
Location: Canada
Er, sorry, I misunderstood. I thought you were looking at the speed variable in RAM, didn't realize you were referring to a game genie code that affects a change in ROM.

Still, this is not code, so there is no meaningful way to answer "why CPX instead of CLC", because it is not used as either of those instructions. You do have to rephrase your question to just be about the numbers before it can even be approached.

If you want to see how that value is used, create a new breakpoint for CPU memory read of $C0BC and you will find the code that uses that value. Then you can look at the code where that breakpoint hits and see how it affects things.


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 11:46 pm 
Offline

Joined: Tue Dec 04, 2018 2:28 pm
Posts: 44
Telling me to use "read breakpoint" is at least new info.. but what this new info tell me/us? Is it, just always use a hex higher then $18? If so, that's a good answer.. if not, then hmmmm.

00:CE2D:B9 BC C0 LDA $C0BC,Y @ $C0BC = #$18 (Without GG) | 4C D0 18 B9 BC C0
00:CE2D:B9 BC C0 LDA $C0BC,Y @ $C0BC = #$E0 (With GG) | 4C D0 18 B9 BC C0

Ok.. now we have a matching data and the hex is unchanged for CE2A to CE2F


Top
 Profile  
 
PostPosted: Sat Dec 15, 2018 11:55 pm 
Offline
User avatar

Joined: Sun Jan 22, 2012 12:03 pm
Posts: 7528
Location: Canada
So you hit that breakpoint. Your value is loaded into A with a LDA. Use the step button to continue a few instructions from there until something happens with the value in A. Maybe it will immediately get stored somewhere (STA) or maybe it will go through some arithmetic/logic first.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 24 posts ]  Go to page 1, 2  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 10 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group