Originally posted by 47iscool
View Post
Announcement
Collapse
No announcement yet.
CL-LiveDebug v4 Beta
Collapse
This is a sticky topic.
X
X
-
you need use raw format master codelee4 Does Not Accept Codes Requests !
When lee4 asks a question it does not mean lee4 will look at your game
*How to create and use SegaCD codes >click here<*
-
Glad you figured it out. I will fix that.
Well the value and range stay when you exit the debugger. So I don't see why that would be needed. Plus you could just search for an unchanged value. That would have the same effect.Originally posted by bungholio View PostFor an extra good search option also, you should add something to just redump all data. Many people like me have a habit of forgetting what they are doing as they are doing things and end up not being able to remember what they did for their last scan. A simple option to just redump everything is helpful. It wouldn't do anything of any kind with comparing results, it would just go to the addresses that are results, get whatever the current values are at those addresses, and then save those new values. I remember Viper having it for ps2cc as the option that said "I forgot (just dump everything again)" or something like that.
Also bear in mind that you cannot search for changes with bits past 32. That would require too much memory and I decided it wasn't really worth it. I at least never use searches greater than 32 unless searching for text. But when I search for text I don't have to use change searching.Last edited by dnawrkshp; 06-27-2013, 04:38:18 PM.
Comment
-
I thought you might say that. I'd go for redumping data without comparing in case I forgot what I just did. Say for example, I was searching for something with bits, like maybe a powerup, I get distracted with something else and come back a minute later and forgot what I did. I was searching for a powerup and I can't remember if I last did something that changed whether I had a powerup activated, so no matter what I do next, I don't remember if I last scanned for a powerup being on or off. In that case, I can only I guess. Maybe I last scanned and had the powerup on, but then I turned it off, went away for a minute because I got distracted with something else and came back to the game to continue the search. I'd look at it and see that I don't have the powerup on, so I might decide to turn it back on and scan for changes only to realize I just screwed up the entire search and need to start over. It's a simple thing for when reality distracts you and you return and don't remember for sure what you did, so instead of just guessing and hoping I did something the way I thought I did, I can just have it get all of the current values at the result addresses without them doing and kind of comparison, I can then resume what I am doing right then and there. I couldn't rely on scanning for things that didn't change, because I might have been in the middle of something, scanned for it, then changed it, then the phone rings and I'm talking for 10 minutes, then need to go get laundry, then turn off the oven so I don't burn food, and then come back to the game and not remember if I scanned for that thing as it currently is or if I scanned for what it previously was, then changed something, and then got distracted and haven't yet scanned for the change.Originally posted by dnawrkshp View PostSo I don't see why that would be needed. Plus you could just search for an unchanged value. That would have the same effect.
It's just like Viper's button: "I Forgot (Just dump everything again without comparing results)".Last edited by bungholio; 06-27-2013, 06:00:04 PM.
Comment
-
Exactly. Just update the values. Have you ever been finding codes, got interrupted by anything for a moment, or even been doing scans while rapidly doing things and just had a tiny lapse in memory where you can't remember exactly where you left off 30 seconds ago because something distracted you? It's very handy. Sure, I could guess and hope I guess right on what I last scanned for and what I last did, but this allows me to fix that guess work. I can't remember if I just last scanned while that item was equipped or not equipped, I'll just equip it and make it update all of the results to whatever the current values are instead of guessing, maybe getting the wrong guess and needing to start over again. The scenarios:
I'm scanning for whatever by equipping and unequipping an item. I last scanned for whatever while the weapon is equipped. I get distracted for 1 minute and leave to do whatever, I come back and can't remember if my last scan was while it was equipped or while it wasn't equipped and I just equipped it before I got distracted.
1. I scan for things that changed. If my last scan was while it was equipped and I left while it equipped before I left, I ruined everything. If my last scan was while it wasn't equipped and then I equipped it before leaving and returning, then things are good.
2. I scan for things that didn't change. If my last scan was while it was equipped and I left it equipped and left, things are good. If I last scanned while it wasn't equipped and then I equipped it, left, and returned, I ruined everything.
3. I don't know, I click to just update all of the values without comparing anything or purging any results, I know that no matter what it was that it now has the result for it being equipped and I can continue doing things the way I want without worrying about clicking the wrong choice of the above 2.Last edited by bungholio; 06-27-2013, 08:34:11 PM.
Comment
-
It's bizarre that most of us probably don't think of that simple little thing, because it's incredibly useful. Odds are at some point everybody has used something to find codes by doing scans of memory and then different comparison choices based on what we are doing, and then forgot something they just did and then had to take a guess between scanning for things that did change or things that didn't change and screwed everything up. This simple thing solves that problem. I've had this happen many times, and I'm sure every person who has ever scanned for codes has had this problem. Up until I used Viper's ps2cc with ps2rd, I had never thought of how simple this problem was to fix. His first default scan choice at the top of the list was "I Forgot (Just dump everything again and update the values)".
Comment
-
Some games are like that so far. It isn't 100% compatible with all games yet. The source is out in the open if you know how to program things. I encountered the same problem with quite a few games too.
Comment
-
Well they are possible... I'd just have to look into what gets called to handle when a trap is hit. Now if the exception handler is called, then we'd be in luck because Gtlcpimp already made an exception handler in MIPS and I could re-implement that somehow into LD. Otherwise, for now, using the register dumper is your best option.Originally posted by 47iscool View PostI'm guessing breakpoints are out of the question?
Comment
-
This is a break point handler I wrote for a different code a while back, stripped out all the guts and left the bare bone handler installer and noted where you need to write your own handler. Break points are nothing but another System Call. I used this in part of a virtual gateway modification I wrote for SOCOM: Combined Assault, in which I would remotely dump registers or stack traces from any given point within the game by injecting a break point with a specific argument. The S.C.A. code portions were stripped, hopefully I didn't remove too much from this but is open for use / modifications.
Code:/* Breakpoint Handler - By Gtlcpimp */ address $00092000 //============================================================== // This must be called from within kernel_Mode BreakPointHandleInstaller: beq zero, zero, :BreakPointHandleInstaller_Init nop nop nop nop BreakPointHandleInstaller_Init: lui a0, $8000 addiu a1, zero, $8f5a _IH_ScanLoop: lh v0, $0000(a0) lh v1, $0002(a0) bne a1, v1, :_IH_ScanLoop addiu a0, a0, 4 lui a0, $8001 daddu a0, a0, v0 setreg v0, :BreakPointHandler //sw v0, $0004(a0) // TLB Modification //sw v0, $0008(a0) // TLB Load/Inst Fetch //sw v0, $000c(a0) // TLB Store //sw v0, $0010(a0) // Address Load/Inst Fetch //sw v0, $0014(a0) // Address Store //sw v0, $0018(a0) // Bus Error (instr) //sw v0, $001c(a0) // Bus Error (data) //sw v0, $0020(a0) // Syscall() lw v1, $0024(a0) sw v0, $0024(a0) // Breakpoint //sw v0, $0028(a0) // Reserved Instruction //sw v0, $002c(a0) // Coprocessor Unsuable //sw v0, $0030(a0) // Overflow //sw v0, $0034(a0) // Something lw a0, $0008(v0) bne a0, zero, 2 nop sw v1, $0008(v0) jr ra nop //============================================================== nop _regSave: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop //============================================================== BreakPointHandler: beq zero, zero, :BreakPointHandler_Init nop nop nop nop BreakPointHandler_Init: //--------------------------- Dump Registers addiu sp, sp, $FFF0 sq k0, $0000(sp) setreg k0, :_regSave sq at, $0000(k0) sq v0, $0010(k0) sq v1, $0020(k0) sq a0, $0030(k0) sq a1, $0040(k0) sq a2, $0050(k0) sq a3, $0060(k0) sq t0, $0070(k0) sq t1, $0080(k0) sq t2, $0090(k0) sq t3, $00a0(k0) sq t4, $00b0(k0) sq t5, $00c0(k0) sq t6, $00d0(k0) sq t7, $00e0(k0) sq s0, $00f0(k0) sq s1, $0100(k0) sq s2, $0110(k0) sq s3, $0120(k0) sq s4, $0130(k0) sq s5, $0140(k0) sq s6, $0150(k0) sq s7, $0160(k0) sq t8, $0170(k0) sq t9, $0180(k0) sq gp, $0190(k0) sq fp, $01a0(k0) addiu at, sp, $0010 sq at, $01b0(k0) sq k1, $01d0(k0) lq k1, $0000(sp) sq k1, $01c0(k0) sq ra, $01e0(k0) mfc0 v0, $Cause sw v0, $01f0(k0) mfc0 v0, $EPC sw v0, $01f4(k0) mfc0 v0, $BadVAddr sw v0, $01f8(k0) mfc0 v0, $Status sw v0, $01fc(k0) swc1 $f0, $0200(k0) swc1 $f1, $0204(k0) swc1 $f2, $0208(k0) swc1 $f3, $020C(k0) swc1 $f4, $0210(k0) swc1 $f5, $0214(k0) swc1 $f6, $0218(k0) swc1 $f7, $021c(k0) swc1 $f8, $0220(k0) swc1 $f9, $0224(k0) swc1 $f10, $0228(k0) swc1 $f11, $022c(k0) swc1 $f12, $0230(k0) swc1 $f13, $0234(k0) swc1 $f14, $0238(k0) swc1 $f15, $023c(k0) swc1 $f16, $0240(k0) swc1 $f17, $0244(k0) swc1 $f18, $0248(k0) swc1 $f19, $024c(k0) swc1 $f20, $0250(k0) swc1 $f21, $0254(k0) swc1 $f22, $0258(k0) swc1 $f23, $025c(k0) swc1 $f24, $0260(k0) swc1 $f25, $0264(k0) swc1 $f26, $0268(k0) swc1 $f27, $026c(k0) swc1 $f28, $0270(k0) swc1 $f29, $0274(k0) swc1 $f30, $0278(k0) swc1 $f31, $027c(k0) addiu sp, sp, $0010 //--------------------------- Breakpoint Processor (what you want to do with the breakpoint) ProcessBreakpoint: addiu sp, sp, $FF80 sd ra, $0000(sp) sd s0, $0008(sp) sd s1, $0010(sp) sd s2, $0018(sp) /* Write your "handler" here */ ld ra, $0000(sp) ld s0, $0008(sp) ld s1, $0010(sp) ld s2, $0018(sp) addiu sp, sp, $0080 BH_InfLoop: nop nop nop beq zero, zero, :BH_InfLoop nop
Comment
Comment