page pool on WM6 Crossbow? - 8125, K-JAM, P4300, MDA Vario Software Upgrading

Hi, this is my first post. I'm sorry if this has been answered before but I've been searching for days and could not find any info regarding this. Is it possible to change the page pool of windows mobile 6 crossbow? and if it is possible, what is the hexadecimal address? I'm using orwell's crossbow version and i'm very pleased with it but i'd really like to know if it's possible to change the page pool and what is the hexadecimal address

80 views no replies?
cmon guys, i see 80 views on this post but no replies. am i the only one who wants to know this? i'm sure some of the great rom cookers out there have been able to find out what the hexadecimal address for changing the page pool of wm6 crossbow is...unless i'm mistaken and it's actually not possible....but again, the PDAviet versions have large amount of rams available so I'm pretty sure that it is possible.

146 views and growing
ok, with 146 views, it looks like i'm not the only one who wants to know this. There even might be others who are watching this thread. Please...does anyone know the answer? Faria?Risidoro?Kyphur?Molski?Johnnny? anyone? Or at least let me know if it's possible or not...

Correct me if im wrong but "FOR NOW" its not possible..

double_ofour said:
Correct me if im wrong but "FOR NOW" its not possible..
Click to expand...
Click to collapse
It's possible to change page pool on WM6 Crossbow now, you can use a hexeditor and open os.nb, search NKKD8, you will find two places, and at the near second place,you will find the modifying value!!!

are you reffering for a wizard device?

wow! i will try it as soon as i get home. if that's the correct hex address then email123 you're awesome! hope it works!

double_ofour said:
are you reffering for a wizard device?
Click to expand...
Click to collapse
yes, I am reffering for a wizard device, But I think it is also the same for the other type devices, I'll give a sample with picture when I'm back home!!!

really?.. i know how to in himalaya..
ill give it a try..

pp have been already changed.

double_ofour said:
really?.. i know how to in himalaya..
ill give it a try..
Click to expand...
Click to collapse
look the two picture below,the first is wm6chs which pagepool is 60 00(6MB),the second is Molski.Biz_AKU3.3_21911_8MB_Crossbow which pagepool is 80 00(8 MB).
When you search NKKD8 second time then search FF FF FF FF FF FF FF FF 9B 4F FF FF 64 B0 00 00 64 00 00 00 ?? ?? ?? ?? ?? ?? ** **, and ** ** is the modifying pagepool value.

If Possible?
If possible to change the page pool on the WM6 which setting would be the best, and stable, ...I think lots of people is wonder the same.

mun_rus..i saw in another thread a screenshot of the about portion of ur wm6 device. In the version tab, yours has about 51MB memory when mine is only 49.73MB. I know that this can only be done if the page pool has been changed...so what exactly is the page pool on ur wizard? and is it stable? also when I changed the page pool on molski's final edition 2.26 from 8mb to 6mb, that specific screen showed about 50+MB. If windows mobile 6 crossbow has a page pool of 6MB also, how come it's only showing 49.73MB on my device?

Thanks to the Professor in the follwowing link.
http://forum.xda-developers.com/showthread.php?p=1152849#post1152849
How to find the page pool offset on Hermes ROMs?
Take the Hex editor of your choice (I use radare) and open OS.nb.
Search the ASCI string "NKKD8", you'll find it to times, take the one more near to the end of the file.
Scroll down a bit until you find the HEXA string "64 00 00 00", page pool should be around there.
If anyone knows a better method please explain
Example using OS.nb from WM6 ROM for hermes
We find the second "NKKD8" at offset 0x3B6C90:
Code:
offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
----------------+----------------------------------------+----------------.
00000000003B6C90 4E4B 4B44 3800 0000 0000 0005 0000 0000 |NKKD8...........|
00000000003B6CA0 00C8 FFFF 8039 2D80 4060 2880 B069 2880 |[email protected]`(..i(.|
00000000003B6CB0 B869 2880 AC69 2880 144A 0180 805D 2D80 |.i(..i(..J...]-.|
00000000003B6CC0 602A 2D80 1829 0080 0000 0000 0000 0000 |`*-..)..........|
Further down we can find this:
Code:
offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
----------------+----------------------------------------+----------------.
00000000003B6F40 581D 0480 C41C 0480 BC1C 0480 00B0 0400 |X...............|
00000000003B6F50 FFFF FFFF FFFF FFFF 9B4F FFFF 64B0 0000 |.........O..d...|
[COLOR="Sienna"]00000000003B6F60 6400 0000 A85B 0480 0000 [b]6000[/b] 0000 0000 |d....[....`.....|[/COLOR]
00000000003B6F70 38E8 0180 C43C 0280 DC6B 0180 00B0 0380 |8....<...k......|
00000000003B6F80 882D 0280 FC2C 0280 D488 0480 5489 0480 |.-...,......T...|
So, we can see the page pool is at offset 0x3B6F6B and is set to 6 Mb.
The pagepool value is specified in HEXA, so for example:
Change "6000" to "4000" for a 4Mb paging pool
Change "6000" to "8000" for a 8Mb paging pool
Change "6000" to "C000" for a 16Mb paging pool
Finding the best page pool size
The page pool size is a compromise between memory available to programs and speed. On WM6 ROM:
With 4Mb page pool we get a Total Program Memory available of 50.68 Mb, and SPB Benchmark index 347.88.
With 6Mb page pool we get a Total Program Memory available of 48.68 Mb, and SPB Benchmark index 346.03.
With 8Mb page pool we get a Total Program Memory available of 46.67 Mb, and SPB Benchmark index 345.95.
With 12Mb page pool we get a Total Program Memory available of 42.66 Mb, and SPB Benchmark index 348.53.
The pagepool size is for the same OS and should be the same for the Wizard.

@joecruz
my pp is 4mb, and i moved some modules to another place so i could got more free memory

wow this works!! i went ahead and changed my page pool to 4MB and i now have a Total Program Memory available of 51.73MB with around 28MB free after a soft reset (i have loads of stuff installed!!). Thanks!!

Hexedit method.
Hi, I'm trying to edit the wm6 os file too with hexedit but i'm unable to find the it for wm6 on the wizard. Is anyone using hexedit like I am, to change the wm6 pool for the wizard that can point me or show me a pic of where it is?

i used XVI32, the hex editor application provided by Faria in his tutorial post "how To" Change Page-pool On A Htc Wizard Rom. Instead of looking for the NKKD8 (which i couldn't find), use the address that's on the screenshot provided by email123 which is 387540. Just make sure that the line matches the one in the screenshot which is FF FF FF FF FF FF FF FF 9B 4F FF FF 64 B0 00 00 64 00 00 00 A8 5B 04 80 00 00 60 00. Depending on your hex editor, it may take you down a line or 2 (meaning either an address or 2 below the one I mentioned). Then just change 60 (the second to the last set of digits on the line above) to 40 for 4MB page pool, save it and repack your 80040000.OS and that's it!

Related

Paste what you last copied...

How dare you accuse me of being a large black crow and then killing me! :x
heh now with firewire it init and all but it's writeprotected for some reason or so it claim odd via firewire chip and odd oxfort firewire/usb2 to ide chip in the case which one or both is yet to be decovered
now the past few years I talk to people around the world, instead of watching the nightly news
Don't laught ;-)
You Are My Sunshine
My only sunshine.
You make me happy
When skies are grey.
You'll never know, dear,
How much I love you.
Please don't take my sunshine away
atndall
shock absorber
date time level ssid file record volume
03/07/2004 05:36:39 full 3862419201 143 0 000015
13/07/2004 23:15:26 full 4099866113 81 49 000044
14/07/2004 05:18:03 full 4105436161 135 0 000062
14/07/2004 23:46:08 full 4122456321 127 42 000061
15/07/2004 05:28:03 full 4127707905 141 0 000063
15/07/2004 23:52:05 full 4144665857 135 138 000064
16/07/2004 05:37:03 full 4149964545 141 0 000065
17/07/2004 00:00:51 full 4166918913 146 54 000041
17/07/2004 05:24:23 full 4171888385 140 0 000066
19/07/2004 23:47:56 full 4233075969 128 51 000077
20/07/2004 05:23:11 full 4238225153 115 0 000050
20/07/2004 23:57:15 full 4255337217 140 112 000004
21/07/2004 05:25:59 full 4260386561 129 0 000076
22/07/2004 00:03:36 full 4277553153 153 61 000002
22/07/2004 05:27:42 full 4282531329 139 0 000049
22/07/2004 23:42:28 full 4379649 123 92 000093
23/07/2004 05:22:46 full 9606657 125 0 000003
23/07/2004 23:56:24 full 26712065 139 46 000008
24/07/2004 05:30:43 full 31847169 128 0 000067
26/07/2004 23:21:45 full 92535041 90 54 000011
27/07/2004 05:25:37 full 98124033 134 0 000010
28/07/2004 00:00:48 full 115253505 115 35 000012
28/07/2004 05:31:06 full 120326657 91 0 000052
28/07/2004 23:15:21 full 136673537 84 43 000042
29/07/2004 05:24:42 full 142346753 130 0 000070
29/07/2004 23:14:32 full 158779649
BIOS Type: Phoenix NoteBIOS 4.0 Release 6.0.
8/7/2004 Sent email - US - Statement fax request
4/8/2004 Sent email - US - Statement fax request
The contact popup window doesn't seem to do anything for me, it displays the contact details but when I click on the phone number, a white horizontal line
http://www.vnunet.be/datanews/news.asp?ids=20040824007
#007e50
3. Total Loss
I thought a shuttle was a retro heli ??? !!!!!
http://www.hitachigst.com
On Tuesday please enter the result of the backup in the following spreadsheet. It will be the monthly backup.
ETX3M
Teste e Grelha de Avaliação
010-00226-04
Microsoft Visual C++ 2005 Express Edition Beta

XDA IIi Missing clock at the top right

Hi,
I'm upgrading my XDA IIi German ROM to English ROM from Pug with radio version 1.04.00. Right now, the clock at the top right doesn't come up. Do anyone have the same problem like this?
How to display the clock at the top right?
Please help.
Thanks
Missing clock
Yes, sad to say - my wife's machine is exactly the same. It appears on the today screen, but not the menu bar at the top. Sorry no answers, though my guess is that it probably appears somewhere in the registry.
Anyone?
I've upgrade only the Radio to ver 1.04 from Pug but not the external rom since the Ext Rom will overright all my external and country setting. With this i got all my original country setting and interface im happy with only upgrade my Radio.
The same (clock disappearing ) happened back in the days on my Magician, to solve it do the following: get yourself a registry editor (e.g. phm regedit, freeware on www.phm.lu) and go to the following key:
hklm\software\microsoft\shell
- add dword called "TBOpt" and give it value 3.. soft reset.
0 = no time or date
1 = time
2 = date
3 = both
Thanks Koskie,
I knew it must be a registry setting. I'll try it tonight.
Regards
David
Thanks Koskie
I try to open the website but it isn't working. I attach the software here. It works great.
Thanks
Koksie said:
The same (clock disappearing ) happened back in the days on my Magician, to solve it do the following: get yourself a registry editor (e.g. phm regedit, freeware on www.phm.lu) and go to the following key:
hklm\software\microsoft\shell
- add dword called "TBOpt" and give it value 3.. soft reset.
0 = no time or date
1 = time
2 = date
3 = both
Click to expand...
Click to collapse
Just tried that on my 2i (O2 UK, not that the provider probably matters that much), set it to 3 (I've tried hexadecimal and decimal-type DWORD), soft resetted, and it's still not showing up on the top bar.
It works for me. Using O2 UK ROM.
Thanks Koksie. Great Advice!
Cheers!
christopherwoods said:
Koksie said:
The same (clock disappearing ) happened back in the days on my Magician, to solve it do the following: get yourself a registry editor (e.g. phm regedit, freeware on www.phm.lu) and go to the following key:
hklm\software\microsoft\shell
- add dword called "TBOpt" and give it value 3.. soft reset.
0 = no time or date
1 = time
2 = date
3 = both
Click to expand...
Click to collapse
Just tried that on my 2i (O2 UK, not that the provider probably matters that much), set it to 3 (I've tried hexadecimal and decimal-type DWORD), soft resetted, and it's still not showing up on the top bar.
Click to expand...
Click to collapse
Are you running SPB Pocket Plus?
Koksie said:
hklm\software\microsoft\shell
- add dword called "TBOpt" and give it value 3.. soft reset.
0 = no time or date
1 = time
2 = date
3 = both
Click to expand...
Click to collapse
Hello,
it works on my Wizzard (xda mini s) but the date is in bold therefore the last digit is not completely visible. Any idea how I could change the date to normal text style?
Thanks,
Klaus
This is all done inside HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shell\ - use PHM Registry Editor (freeware) or another reg editor to do all of this (Tweak2k2 will also do it, apparently). Remember: registry editing can mess up your phone if you do it wrong!
You may already have an entry called TBOpt, and it might just read "0" or "1" - delete it, and start over. The TBOpt entry should be set up as a BINARY string. I did this, and chose a number - 13 - and set the value to
13 00 00 00
This resulted in both the time and the date being visible. This was a start, but I needed more...
I changed the value to 01 00 00 00, rebooted, and bingo: only the clock appears.
02 00 00 00 shows only the date.
03 00 00 00 shows both, like 13 00 00 00, except where with 13 the time and date were centre-aligned, the time and date are now left-aligned.
04: nothing.
05: shows the time, in what looks to be a left-aligned manner, in bold.
06: shows the date, dd/mm/yy format.
07: date and time, regular font weight (i.e. not bold), date in dd/mm/yy and time in 24hr.
08: nothing.
...
I got bored by this point, as every new choice requires a soft reboot and a 30 second wait while the device powers up. If I had a genuine copy of Windows, I'd download the emulator and just try it with that from the MS web site, but... well... The last time "I" owned a legit copy of Windows, I was about 7, and my Dad bought me a computer.
Some options seem to do more than most, I'd hazard a guess and say that some of the 'options' tally with the various ways you can choose to have long and short times and dates shown by the system in the Regional Settings control panel applet. I love being able to switch between analogue and digital time display! (tap and hold on the time, it'll only work if you only have the time shown, otherwise it'll show just the day part of today's date).
Going back to the legal-copies-of-Windows-thing finally, I suppose technically I own two legal licenses for two unique copies of Windows Mobile 2003 SE, but that's another story (XDA number 1 locking up on boot, that was a clever error).
Hope this post helped.
For some reason my clock has changed to an analog clock. Its really ccrap cos you cant tell the time! how do i switch it back to digital again?
THanks for the help!
Thanks, just worked it out...
And for those who don't know, you tap and hold with the stylus on the clock to bring up the Analogue / Digital choice menu.
Also, might as well just note for the record that the reason the clock disappears on the XDA 2i is because of one of the customisation CABs O2 have put in their Extended ROM. If you do a Corporate Install (with the 0506 code, as I did the second time round) it doesn't install any of the O2 interface, nor does it install any of the customisation CABs - so bingo, you have a (pretty much) standard WM2003SE installation.
I used the O2 Contract GPRS and GSM settings CAB file from this forum (supplied by Pug) to just make sure that my SMS and GPRS settings were correct, but aside from that my installation was vanilla, thanks to the Corporate install. Also meant I had a clock on the top, which was a revelation for me then.
Just stating this because when I was first searching for the solution to this problem, I couldn't find any information as to why it was happening, or how to fix it... Just chanced upon it whilst doing my own Corp install so now it's set in stone for future newbies to read.

Benchmarks

I decided to start a new thread to experiment instead of posting inside the 1.3 thread.
Even with all this cache boosting, it seems the reported free memory is still above 60MB.
That's with no today plugins running.
Here are the settings I am testing:
Code:
[HKLM\System\StorageManager\FATFS]
"BufferSize"=dword:0x000400 (decimal 1024) (old:256)
"CacheSize"=dword:0x004000 (decimal 16384) (old:4096)
"DataCacheSize"=dword:0x004000 (decimal 16384) (old:4096)
"DLL"="fatfsd.dll"
"EnableCache"=dword:00000001
"EnableCache4Way"=dword:00000001 (old: didn't exist)
"EnableCacheWarm"=dword:00000001
"FatCacheSize"= 0x004000 (decimal 16384) (old:1024)
"Flags"=dword:00001006 (writethrough bla bla)
"MaxCachedFileSize"=dword:00020000 (don't cache >128Kb files)
"Paging"=dword:00000001
"PathCacheEntries"=dword:00000400 (1024) (old:256)
"UpdateAcces"=dword:00000000 (do not update access times, should have a positive impact flash wearing)
[HKLM\System\StorageManager\IMGFS]
"BufferSize"=dword:0x000400 (decimal 1024) (old:not sure)
"CacheSize"=dword:0x004000 (decimal 16384) (old:not sure)
"DataCacheSize"=dword:0x004000 (decimal 16384) (old:not sure)
"PathCacheEntries"=dword:00000400 (1024) (old:256)
"UpdateAcces"=dword:00000000 (do not update access times, should have a positive impact flash wearing, not sur if it has any effect on IMGFS)
[HKLM\System\StorageManager\Profiles\FlashDrv\FATFS]
"BufferSize"=dword:0x000400 (decimal 1024) (old:256)
"CacheSize"=dword:00000400
"EnableCache"=dword:00000001
"PathCacheEntries"=dword:00000400 (1024) (old:not sure)
[HKLM\System\StorageManager\Profiles\FlashDrv\IMGFS]
"BufferSize"=dword:0x000400 (decimal 1024) (old:256)
"CacheSize"=dword:00000400 (at the cost of 256 Kb RAM)
"EnableCache"=dword:00000001
"PathCacheEntries"=dword:00000400 (1024) (old:128)
Therewas one single test which simply failed, I don't know why. I believe this failed test is the reason why the overall score is unavailable. But the machine is stable so far, I have no complaints.
The results are the following:
Code:
reference machines (from spb benchmark website database):
(1) Compaq iPAQ 3600 Series (2000, 206Mhz)
(2) Asus MyPal A620 (2003, 400MHz)
(3) Asus MyPal A716 (2003, 400MHz)
(4) Fujitsu-Siemens Pocket LOOX 600 (2003, 400MHz)
(5) Fujitsu-Siemens Pocket LOOX 610 (2003, 400MHz)
(6) Toshiba e750 (2003, 400MHz)
(7) Toshiba e755 (2002, 400Mhz)
(8) Dell Axim x51v (WM5, 400MHz, video hardware accel)
AND...
(9) Blue Angel WM5 Helmi 1.3 beta
(1) (2) (3) (4) (5) (6) (7) (8) (9) Comments
Spb Benchmark index 1000 1573 1622 939 1610 1225 1073 - unavailable probably because of the database error
CPU index 1000 1858 1796 1202 1813 1838 1234 1646 upper half, not that far from the others
File system index 1000 1092 1205 670 1175 1128 1270 - unavailable probably because of the database error
Graphics index 1000 4034 3954 1367 3943 688 651 1207 before tweaking it was around 850
ActiveSync index 1000 1458 2192 480 1775 1751 1479 3269 WINNER! And i am using USB 1.1!
Platform index 1000 1277 1510 796 1341 1085 850 - unavailable probably because of the database error
(1) (2) (3) (4) (5) (6) (7) (8) (9) Comments
Write 1 MB file (KB/sec) 794 1285 1284 589 1282 1221 1200 630 2160 Double the 2003 write results!
Read 1 MB file (MB/sec) 18.2 28.7 27.8 16.5 27.4 26.8 20.7 3.78 4.14 Better than the x51v
Copy 1 MB file (KB/sec) 790 1281 1279 581 1279 1252 1180 600 3526 Hmmm, sweet buffers...
Write 10 KB x 100 files (KB/sec) 560 654 928 422 936 859 768 245 314 different from above results, ROM technology might explain the difference...
Read 10 KB x 100 files (MB/sec) 6.35 8.64 10.4 6.34 10.7 9.62 7.6 1.88 1.43 here we lost against x51v
Copy 10 KB x 100 files (KB/sec) 476 500 820 376 830 757 626 247 290 below 2003, but still decent.
Directory list of 2000 files (thousands of files/sec) 123 23.6 22.2 14.1 20.4 20.5 153 1.33 8.19 trouncing x51v, but humble compared to 2003
Internal database read (records/sec) 421 1549 1539 1059 1518 1391 503 1950 error THIS is the mysterious ERROR...
Graphics test: DDB BitBlt (frames/sec) 26.9 316 309 185 305 68.4 42.3 277 109 HW graphics might give x51v the edge here...
Graphics test: DIB BitBlt (frames/sec) 13.5 27.2 27.3 14.7 27.3 22.9 29.9 22.2 31.1 but not here :)
Graphics test: GAPI BitBlt (frames/sec) 216 752 725 176 722 73.2 72.4 58.9 134 neither here :D
Pocket Word document open (KB/sec) 31 44.2 105 61.9 41.6 37.7 28.3 12.7 7.3 long loading times... UPX'ed apps might have an impact here?
Pocket Internet Explorer HTML load (KB/sec) 13.1 7.88 9.27 3.74 9.49 7.28 6.67 7.05 3.61 ditto
Pocket Internet Explorer JPEG load (KB/sec) 52.8 154 239 149 245 233 105 135 53.8
File Explorer large folder list (files/sec) 515 641 598 382 625 569 291 483 58.6
Compress 1 MB file using ZIP (KB/sec) 106 263 241 152 249 243 89.1 241 195 not beating x51v every time, but still \
Decompress 1024x768 JPEG file (KB/sec) 319 613 609 426 609 607 567 657 533 a good performer...
Arkaball frames per second (frames/sec) 108 250 242 102 245 61 55.7 52.6 96.3 seems x51v video drivers are teh suxx0rz
CPU test: Whetstones MFLOPS (Mop/sec) 0.046 0.076 0.076 0.061 0.077 0.075 0.076 0.117 0.074
CPU test: Whetstones MOPS (Mop/sec) 34.1 55.3 55.4 54.3 55.5 55.2 55.4 84.9 54.8
CPU test: Whetstones MWIPS (Mop/sec) 2.98 5.01 5.02 4.04 5.03 4.99 4.94 7.53 4.82
Memory test: copy 1 MB using memcpy (MB/sec) 70.4 103 98.4 61.2 99 106 90.6 116 102
ActiveSync: upload 1 MB file (KB/sec) 115 135 203 46.9 158 157 135 - 332
ActiveSync: download 1 MB file (KB/sec) 94 250 377 67.8 367 345 274 - 409
There is only one WM5 device besides teh BA, which I collected from this review:
http://www.mobiletechreview.com/Dell-Axim-X51v.htm
Helmi, can you make a hotfix cab called 'Brazilian_Joe_UNTESTED_performance_tweaks.cab' to apply these tweaks and add it to Helmi 1.3 beta front page, with a big red fat warning?
EDIT: The 'internal database benchmark error' happens even with the default 'Helmi 1.3 beta' registry values, so it's not a by product of my settings. Just to reinstate, even with this error the machine still runs without problems.
Nice work, Brazilian Joe! But the real question is: do these tweaks affect the real performance of the BA? I mean do you notice any improvements during normal work (with all today plug-ins, etc.)
That's actually all that matters, because benchmark results don't necessarily reflect the real-life performance.
If you say the difference is noticable (I mean "really" noticable), the we all should give it a try. But if it's only a benchmark improvement, I think we should not mess with the settings...
Regards,
Martin
MHoefler said:
Nice work, Brazilian Joe! But the real question is: do these tweaks affect the real performance of the BA? I mean do you notice any improvements during normal work (with all today plug-ins, etc.)
That's actually all that matters, because benchmark results don't necessarily reflect the real-life performance.
If you say the difference is noticable (I mean "really" noticable), the we all should give it a try. But if it's only a benchmark improvement, I think we should not mess with the settings...
Regards,
Martin
Click to expand...
Click to collapse
I have the whole SBSH doing a party on my today screen under normal circumstances (PocketBreeze etc). My first benchmark (which I lost) still had all those on, andthe numbers were inequivocal.
It was not a 'whoa, look! 1KB/s write improvement!'...
when I said improved responsiveness, that's what it meant. switching tabs in today plugins, program loading, most tasks improved, the experience was more fluid.
Then I procceeded to have more barebone results to avoid having the programs distort the numbers.
That said, I completely agree with your consideration. My next steps are going to be:
1) reinstall everything
2) do another 'vanilla settings' test with everything running
3) put the tweaked settings back on
4) benchmark one more time...
So that we can verify the results.
Just working on my Settings also ..
seems I have forgotten somethin in the settings since I cant't achive the same results than earlier .. (reminds me on helmi not remembering this WiFi driver thing )
EDIT:
Test Time Speed % of iPAQ 3650* speed
Write 1 MB file 99.2 ms 10323 KB/sec 1300%
Read 1 MB file 58.1 ms 17.2 MB/sec 94%
Copy 1 MB file 39.4 ms 25990 KB/sec 3292%
Write 10 KB x 100 files 1718 ms 596 KB/sec 106%
Read 10 KB x 100 files 269 ms 3.72 MB/sec 59%
Copy 10 KB x 100 files 1362 ms 752 KB/sec 158%
Directory list of 2000 files 238 ms 8.41 thousands of files/sec 7%
Some more testing required .. will set up the same Bench as BJ next time
EDIT2:
Okay .. here is what I am doing .. atm I am only switching values in the FATFS:
BufferSize:16 or 8 try around
CacheSize:0 (System reserves Memory) or 16384
DataCacheSize: 4096
will do more testing .. but smaller buffers seems to be much faster ...
Helmi 1.3 vanilla settings, no apps installed.
Free memory: 67.39 MB
CPU index 1386.85
Graphics index 1154.58
ActiveSync index 2502.05
Test - Time - Speed - % of iPAQ 3650 speed (reference machine)
Write 1 MB file 2471 ms 414 KB/sec 52%
Read 1 MB file 440 ms 2.27 MB/sec 12%
Copy 1 MB file 2014 ms 508 KB/sec 64%
Write 10 KB x 100 files 7968 ms 129 KB/sec 23%
Read 10 KB x 100 files 960 ms 1.04 MB/sec 16%
Copy 10 KB x 100 files 7567 ms 135 KB/sec 28%
Directory list of 2000 files 2692 ms 0.743 thousands of files/sec 1%
Internal database read error
Graphics test: DDB BitBlt 9.71 ms 103 frames/sec 383%
Graphics test: DIB BitBlt 32.7 ms 30.6 frames/sec 226%
Graphics test: GAPI BitBlt 7.81 ms 128 frames/sec 59%
Pocket Word document open 43656 ms 5.97 KB/sec 19%
Pocket Internet Explorer HTML load 7958 ms 3.11 KB/sec 24%
Pocket Internet Explorer JPEG load 5221 ms 48.5 KB/sec 92%
File Explorer large folder list 35332 ms 56.6 files/sec 11%
Compress 1 MB file using ZIP 8807 ms 115 KB/sec 108%
Decompress 1024x768 JPEG file 496 ms 566 KB/sec 177%
Arkaball frames per second 10.6 ms 94.8 frames/sec 88%
CPU test: Whetstones MFLOPS 5369 ms 0.069 Mop/sec 150%
CPU test: Whetstones MOPS 1211 ms 52 Mop/sec 153%
CPU test: Whetstones MWIPS 10821 ms 4.62 Mop/sec 155%
Memory test: copy 1 MB using memcpy 10.2 ms 98.5 MB/sec 140%
ActiveSync: upload 1 MB file 4145 ms 247 KB/sec 215%
ActiveSync: download 1 MB file 3013 ms 340 KB/sec 362%
Storage card test results
Storage card "RAMdisk"
Speed index = 369.2
Test Time Speed % of iPAQ 3650* speed
Writing 1 MB file 109 ms 9377 KB/sec
Reading 1 MB file 77.7 ms 12.9 MB/sec
Copying 1 MB file to storage card 581 ms 1763 KB/sec
Copying 1 MB file from storage card 1524 ms 672 KB/sec
Writing 100 of 10 KB files 2275 ms 450 KB/sec
Reading 100 of 10 KB files 352 ms 2.84 MB/sec
Copying 100 of 10 KB files to storage card 2330 ms 440 KB/sec
Copying 100 of 10 KB files from storage card 7744 ms 132 KB/sec
Directory listing: 2000 files 247 ms 8.11 thousands of files/sec
Storage card "Storage Card"
Speed index = 344.21
Test Time Speed % of iPAQ 3650* speed
Writing 1 MB file 479 ms 2139 KB/sec
Reading 1 MB file 71.5 ms 14 MB/sec
Copying 1 MB file to storage card 865 ms 1184 KB/sec
Copying 1 MB file from storage card 1831 ms 559 KB/sec
Writing 100 of 10 KB files 2489 ms 411 KB/sec
Reading 100 of 10 KB files 449 ms 2.23 MB/sec
Copying 100 of 10 KB files to storage card 3131 ms 327 KB/sec
Copying 100 of 10 KB files from storage card 8187 ms 125 KB/sec
Directory listing: 2000 files 247 ms 8.11 thousands of files/sec
MHoefler said:
Nice work, Brazilian Joe! But the real question is: do these tweaks affect the real performance of the BA? I mean do you notice any improvements during normal work (with all today plug-ins, etc.)
That's actually all that matters, because benchmark results don't necessarily reflect the real-life performance.
If you say the difference is noticable (I mean "really" noticable), the we all should give it a try. But if it's only a benchmark improvement, I think we should not mess with the settings...
Regards,
Martin
Click to expand...
Click to collapse
It affects the real / overall / daily use performance. Try it out
Yeah, there are lies, damn lies, and statistics. and benchmarks are statistics, right?
Benchmarks do not directly translate in real world performance, but if they are done properly, there is some meaning to them, and you can expect that the performance displayed at the benchmarks will be reflected in your daily usage.
And I started those benchmarks by going the other way round:
I found some settings, tweaked them, noticed a difference, and only then I started benchmarking to back up my subjective feeling with hard numbers.
let's see how the benchmarking saga unfolds...
Blame me stupid ... installed SPB Bench in RamDisk at first .. damn ...
Rebenching now, but can confirm that with the Settings fomr BJ an mine mixed to the way you use your device in daily usage this runs veeerrry smooth ... )
MasterMerlin said:
Just working on my Settings also ..
Okay .. here is what I am doing .. atm I am only switching values in the FATFS:
BufferSize:16 or 8 try around
CacheSize:0 (System reserves Memory) or 16384
DataCacheSize: 4096
will do more testing .. but smaller buffers seems to be much faster ...
Click to expand...
Click to collapse
I have tried setting only
BufferSize:16
but after I lowered it from 256 to 16 if always froze my machine. had to hard reset to get it back to a useable state...
Code:
[HKLM\System\StorageManager\FATFS]
"BufferSize"=(decimal 16) (old:256)
"CacheSize"=(decimal 0) (old:4096)
"DataCacheSize"=(decimal 0) (old:4096)
"DLL"="fatfsd.dll"
"EnableCache"=dword:00000001
"EnableCache4Way"=dword:00000001 (old: didn't exist)
"EnableCacheWarm"=dword:00000001
"FatCacheSize"= (decimal 0) (old:1024)
results in
Write 1 MB file 2635 ms 389 KB/sec 49%
Read 1 MB file 301 ms 3.32 MB/sec 18%
Copy 1 MB file 1799 ms 569 KB/sec 72%
Write 10 KB x 100 files 7197 ms 142 KB/sec 25%
Read 10 KB x 100 files 641 ms 1.56 MB/sec 25%
Copy 10 KB x 100 files 5892 ms 174 KB/sec 37%
Directory list of 2000 files 1844 ms 1.08 thousands of files/sec 1%
seems that the smaller buffer helps while reading
Brazilian Joe said:
I have tried setting only
BufferSize:16
but after I lowered it from 256 to 16 if always froze my machine. had to hard reset to get it back to a useable state...
Click to expand...
Click to collapse
Thats weird .. since you reinstalled it fresh .. mine is up since yesterday, running Pocketbreeze and some other Today Plugins while using the Benchmark ..
Have you tweaked some other infos before in another section?
MasterMerlin said:
Brazilian Joe said:
I have tried setting only
BufferSize:16
but after I lowered it from 256 to 16 if always froze my machine. had to hard reset to get it back to a useable state...
Click to expand...
Click to collapse
Thats weird .. since you reinstalled it fresh .. mine is up since yesterday, running Pocketbreeze and some other Today Plugins while using the Benchmark ..
Have you tweaked some other infos before in another section?
Click to expand...
Click to collapse
no, I only changed that and nothing else. I think the system was starved because of the small buffer size. I had PocketBreeze, iLauncher and PocketWeather on my today screen.
EDIT. trying the Chache = 0 settings and see how they perform, without messing with the buffer
EDIT2:
MasterMerlin, looks like there is some fluctuation in the file results. can you re-run the benchmark more than one time? I am not getting a result like your 'Read 1 MB file ~300 ms'. maybe the result in that specific run was better than average?
EDIT3: definitely, buffers=16 is not friendly at least to PocketBreeze. Other apps might gasp on it either. At the moment I installed PB, my machine froze. There goes another hard reset...
PocketBreeze and PocketWeather are on my Today Screen too. Will rerun the Bench now .. went to bed yesterday
EDIT:
You are right Brazilian Joe. The Benchmark seems to fluctuate much.
Retried with:
Write 1 MB file 2566
Read 1 MB file 433 ms
Copy 1 MB file 2042 ms
Write 10 KB x 100 files 6405 ms
Read 10 KB x 100 files 913 ms
Copy 10 KB x 100 files 6292 ms
Directory list of 2000 files 2593 ms
Will test around your Settings with other Buffers and some more reg-changes and rerun another Test...since this great ROM should stay stable and speedy ...
MHoefler said:
Nice work, Brazilian Joe! But the real question is: do these tweaks affect the real performance of the BA? I mean do you notice any improvements during normal work (with all today plug-ins, etc.)
That's actually all that matters, because benchmark results don't necessarily reflect the real-life performance.
If you say the difference is noticable (I mean "really" noticable), the we all should give it a try. But if it's only a benchmark improvement, I think we should not mess with the settings...
Regards,
Martin
Click to expand...
Click to collapse
Its should make a difference... I've try it before I post the rom, but I dont test it much, but it seems our Brazilian Joe hv test it more then me.. so give it a try... I'll post a cab for it as requested.
ps: I dont think it safe to try this tweak on v1.2 or lower, but try it anyway...
If we use Brazilian Joe tweaks and later want to later go back to original configuration - how do we do that?
Manually?
or
Uninstall the cab?
hasanj4 said:
If we use Brazilian Joe tweaks and later want to later go back to original configuration - how do we do that?
Manually?
or
Uninstall the cab?
Click to expand...
Click to collapse
hmm, I think if u use it in v1.3 its safe, but this is the revert back .CAB
btw I use Platformxxx.reg method (so its ready for further tweak update from Brazilian Joe and wont erase the reg entry if u uninstall it)
Just install this cab overwrite or uninstall the previous version, both way is ok. this .CAB will revert back registry value to its original value.
read my post i te main thread, these cache tweaks shouldnt be used on thier own, the speed is shortlived.
Midget_1990 said:
read my post i te main thread, these cache tweaks shouldnt be used on thier own, the speed is shortlived.
Click to expand...
Click to collapse
Is that like the upgraded Axim/4700 filesys.exe performance issues? I didn't knew our machines were affected by it too.
Anyway, I'll keep the tweaks and see if the machine slows down over time.
Brazilian Joe said:
MasterMerlin said:
Brazilian Joe said:
I have tried setting only
BufferSize:16
but after I lowered it from 256 to 16 if always froze my machine. had to hard reset to get it back to a useable state...
Click to expand...
Click to collapse
Thats weird .. since you reinstalled it fresh .. mine is up since yesterday, running Pocketbreeze and some other Today Plugins while using the Benchmark ..
Have you tweaked some other infos before in another section?
Click to expand...
Click to collapse
no, I only changed that and nothing else. I think the system was starved because of the small buffer size. I had PocketBreeze, iLauncher and PocketWeather on my today screen.
EDIT. trying the Chache = 0 settings and see how they perform, without messing with the buffer
EDIT2:
MasterMerlin, looks like there is some fluctuation in the file results. can you re-run the benchmark more than one time? I am not getting a result like your 'Read 1 MB file ~300 ms'. maybe the result in that specific run was better than average?
EDIT3: definitely, buffers=16 is not friendly at least to PocketBreeze. Other apps might gasp on it either. At the moment I installed PB, my machine froze. There goes another hard reset...
Click to expand...
Click to collapse
Hey Joe,
The BA is a strange device, it seems, that it behaves itself in different ways So... It can be, that MasterMerlin is right. I tried the Cache=0 and Buffersize=16 on my BA, and It didn't freeze at all, and It became more speedier than with your settings. I use SPB pplus + diary + weather + time + backup on today (tabbed) + wireless + messaging + device lock on todayscreen.
The device freezes, if you try to raise Your posted setting's values.
I hope i could help a bit.. But I really don't understand why your BA freezes if you set cache to 0 and buffer to 16...
ThExSenatoR said:
Hey Joe,
The BA is a strange device, it seems, that it behaves itself in different ways So... It can be, that MasterMerlin is right. I tried the Cache=0 and Buffersize=16 on my BA, and It didn't freeze at all, and It became more speedier than with your settings. I use SPB pplus + diary + weather + time + backup on today (tabbed) + wireless + messaging + device lock on todayscreen.
The device freezes, if you try to raise Your posted setting's values.
I hope i could help a bit.. But I really don't understand why your BA freezes if you set cache to 0 and buffer to 16...
Click to expand...
Click to collapse
As I told before, SBSH PocketBreeze dislikes this setting. Anyway, I will try setting the caches to 0, but keeping the buffer size and see if it improves. Then I will proceed on halving the buffer until it does not work anymore.
EDIT:
Just to clarify, I use PocketBreeze with iLauncher, ContactBreeze and PocketWeather as tabs inside it.
Anyway, the buffers = 16 setting looked like it was working for me, but when I installed PocketBeeze it froze...
/EDIT
On the subject of benchmark fluctuation, I think the cause is the same thing which also causes video to skip, some system process might be taking up too much processing.
Since our hardware is not built for WM5, we might be suffering the same problems that the Axim/4700 users have. Do we have a filesys.exe throttler? If we don't, is there a way to do it? It would be so much easier to find the guilty process if we had a XP-style task manager, which displayed the amount of cpu time each process is taking... Anyone knows of any?

Solution for Kaiser Camera Counter change

Just found out something which was not in the forums and thought to share it with all (found only one reference, but for different device - it had different location for the counter).
In case you want to change the counter of the file numbers that the camera will record with (i.e. IMAGE001.JPG, but you want IMAGE045.jpg), you need to edit your registry with a registry editor:
Go to HKCU\Software\HTC\Camera\5.04\Preferences edit the key "Values" as per the attached screenshot - the next number for the picture (in HEX format - use windows calc in advanced mode to convert the number to HEX) should be typed at position 68 HEX.
Next time you take a picture it will use the number you placed there.
Nice one, I've been looking out for a solution to this issue! I'd like to add that if you want to set the counter beyond 255, you also have to edit position 69 HEX. This way, "FF 00" on positions 68 and 69 translates to "255", whereas "00 01" translates to "256", "01 01" translates to "257", etc.
To change the video counter, you have to change position 70 HEX. Keep in mind that this is not the position right after 69; after 69 comes 6A, 6B, etc., before you arrive at position 70. This probably is obvious to most of you, but it is a mistake easily made.
OK, this is exactly what I've been looking for also, but as a person who understands little or nothing about hex I would appreciate some guidance as to what to input, and precisely
where.
I would like to reset my camera's counter to 300, so that the files go 300.jpg. 301.jpg etc etc. If one of you could help me out, I'd appreciate it.
I just would rather not screw it up
Thanks.
As mvc mentioned, you can use the Windows calculator to convert the desired (decimal) value to the corresponding hexidecimal value. In your case, "300" would translate to "12C" (which equals to "01 2C"), meaning you have to change position 68 HEX to "2C" and position 69 HEX to "01".
If you need a program capable of editing the registry, I recommend the freeware utility Task Manager (the program which is used in the above screenshot):
http://www.freewarepocketpc.net/ppc-download-task-manager.html
Good luck!

Introduction to Hexing, Programming, and General Game Modding

I have posted this on a few other places so I figured I'd post it in the best site around. I think it fits here because the principles can be easily transferred over to other things since instead of teaching you a specific way to do something it will teach you a specific way to think and look at a problem. Now without further ado here it is.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This will be an introductory guide for basic principles used to mod gamesaves and generally useful programming skills such as hex-editing, retrieving the gamesave, basic automation principles, concepts, and the like. Anyone with experience is welcome to post. This should be as comprehensive as possible. If you see an example of code in one language and know the equivalent in another language (you see c++ code and know the VB equivalent let's say) please quote the original code and post your port. Please post all code in code tags.
Example of ported code:
Example said:
dudeguy105 said:
Here's how to read a file in c++
Code:
#include <stdio.h>
int main ()
{
FILE * pFile;
pFile = fopen ("myfile.txt","r");
return 0;
}
Click to expand...
Click to collapse
Here's how you read one in autoit
Code:
#include <File.au3>
$sContents = FileOpen("myfile.txt",0)
Click to expand...
Click to collapse
What You'll Need​
A hex editor - I recommend Hex Workshop but any will work.
A gamesave of the game you wish to modify (if making a SE)
A JTAGed 360 (if modifying core files)
A method to put your gamesaves back on your device (USB drive is easiest)
A good grasp of numbers or the ability to "wing-it"
A copy of the game or program you wish to modify (obviously)
Cheat Engine (for use with modifying non-online PC games)(reinforce basic concepts)
Large quantities of Caffeine
Legend:
360 Specific Requirement
Normal Requirement
Recommended but not required
Basic Concepts​
Read the display of your hex-editor
Retrieve, modify, and replace gamesaves
Modify values in memory (either RAM or dump (aka gamesave)
Automation Fundamentals
Standard GUI Practices
Programming
More I can't think of at the moment
Basic Terminology​
Gamesave - A game's save-data
JTAG - 1)A method of modifying an xbox360 or other JTAGable hardware to run unsigned code and send/receive serial data 2)A JTAGed xbox360/system
360 - an xbox360
RAM - Random Access Memory, your computer's memory.
Hex-editor - A program that opens and displays a file's binary content for editing.
GUI - Graphical User Interface, a "face" for a program with buttons sliders and the like.
UI - User Interface, how a program is displayed and interacted with.
Console - 1)A gaming console 2)Command prompt or shell/bash/terminal 3)A UI, normally a rectangle with white text on a black background to accept a user's input through typing.
Plain-text - refers to readable language. "This is plain text", "LZAK AK FGL" (this is not)
will add more as needed
Next question. "What do the values displayed in the editor mean/represent, how do you know if a displayed value is one you need, and how do you search for a specific value?" That's a question that brings up 3 good points.
What do the values displayed in the editor represent?:
The numbers you see are the hex contents of the file that you opened. Hex is a numerical system, and is often used to represent binary values. What you're seeing in the editor is actually the content of the file on the most basic level, binary, displayed in a more readable fashion.
Binary:
Code:
0,1,10,11,100,101,110,111,1000,1001,1010,1011,1100
Decimal:
Code:
0,1,2,3,4,5,6,7,8,9,10,11,12
Hex:
Code:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Most of us are used to decimal, not hex or binary. If most people saw a file's binary content displayed in binary their brains would explode . Hex shows us the binary content in a very clear,concise way, and it can represent number and letters. This makes it the perfect choice to display binary, which also represents numbers and letters.
How do I know if a displayed value is one I need?:
For the most part you will be beginning your search looking for numbers you already know. Say you have 10,000 gold in a game. You would search for "2710", which is 10,000 in hex. You may find more than one result, you may find none. If you find more than one change one, save the changes, test the save, and see if your gold changed. If not revert your save back to the original and change the next in the series until you find the one that works. If you do not find any results then there is some sort of encryption on the file. Many times it's simply a math operation. Your game may save your value as 80,000(13880) instead of 10,000(2710) because it's less obvious. If you find only one result, chances are that's the value you need to change.
How do I search for a specific value?:
That really depends on your specific hex-editor, but most you can simply press ctrl+f and it will open a search window.
You also don't need to know any programming to start this, we'll get into that later. Pick the language that best suits your needs and works for you. Some like C#, some like c++, some like VB, and I like autoit.
Decrypting is a real pain in the ass, at least for me. A good way to tell if something is encrypted is if you don't see any plain-text in the save file. If you do it's probably not encrypted, maybe it just has a checksum. Decryption isn't really my specialty but I do know a bit about basic ciphers. I'm assuming most people who read this will at least know what encryption is so I don't need to explain that or how it works. Maybe someone with more decryption experience than myself can post more info but for now I'll stick to examples that don't use any real encryption, just checksums or no security. If there is encryption on the save file the easiest way is to get 2 or 3 saves that have no difference but what you're looking to change (such as gold). Just load those into your hex editor and do a file compare, you should see the areas that are different. Normally values for most things in games (stats, gold, items, etc) won't be too large. If you see a large difference then there are 1 of 2 possibilities. 1) If the chunk is somewhat large but not the entire file that's probably a checksum area. 2) If the entire file is different even though only one value changed then the encryption uses something as a seed (probably the checksum) so the encryption algorithm is the same but the output is different every time.
Actually I thought I mentioned the file compare method on here already . That's a method, also the most common, to find the values you need if the straight "search for them" method doesn't work. If you could read team names at all that means there's no encryption, I posted a bit more info about that in a previous post with an example of plain-text and basic encryption. I'm glad this is what you were looking for. Ok on to the next topic.
How to Hex​Most people think hexing is a really daunting task. It isn't. I actually already explained most of what you need to know in post #9 but I'll go over the basics again. Once you open a file in your hex editor you should see something like this on one side (the left usually)
Code:
0D 0A 3C 21 2D 2D 20 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 0A 54 68 69 73 20 63 6F 64 65 20 73 68 6F 75 6C 64 20 62 65 20 70 6C 61 63 65 64 20 69 6E 20 74 68 65 20 68 65 61 64 65 72 20 6F 72 20 69 6E 20 61 20 43 53 53 20 66 69 6C 65 2E 0D 0A 49 74 20 63 61 6E 20 62 65 20 6D 6F 64 69 66 69 65 64 20 74 6F 20 6D 61 74 63 68 20 74 68 65 20 61 70 70 65 61 72 61 6E 63 65 20 6F 66 20 74 68 65 20 72 65 73 74 20 6F 66 20 74 68 65 20 73 69 74 65 2E 0D 0A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A
and on the other you should see what that represents, in this case it's some html
Code:
..<!-- ***************************************************************..This code should be placed in the header or in a CSS file...It can be modified to match the appearance of the rest of the site...*******************************************************
If the right side is easily readable like it is here, there's no encryption. If it looks something like
Code:
A2e76f!_ #[email protected] ......... emishUGLhvEEas~_
then it's probably encrypted. You need to look carefully though since some things may seem encrypted at first glance but really aren't like
Code:
sysSettings1sysSettings2sysSettings3.........weapon_023464........63
In this example you can see that system settings 1, 2, and 3 are unlocked and the player has 99 (which is 63 in hex ) of the item "weapon_023464". They won't always be this easy to read but this shows my point quite well. If we wanted to unlock system setting 4 in this example the first thing to try would be to change the right side (the "readable" side) to
Code:
sysSettings1sysSettings2sysSettings3sysSettings4.........weapon_023464........63
rehash/resign, load it back and see if it works. If it doesn't then the next method to try would be to find a savegame that already has it unlocked and compare the two. Let's say the save with it unlocked looks like this
Code:
sysSettings1sysSettings2sysSettings3sysSettings_04.........weapon_023593........03
We can clearly see that they changed the naming on menu 4. So all we need to do is change our modified file to
Code:
sysSettings1sysSettings2sysSettings3sysSettings_04.........weapon_023464........63
rehash/resign and load and all should be well.
"Oh but that's easy, what if the file is encrypted then what do I do?" I know some of you are thinking this. Well that's where the file-compare method comes into play again. Say we have 2 saves that look like this.
save1 said:
Hex:
Code:
61 6f 66 66 6f 69 68 39 68 28 2A 47 48 28 4F 48 28 51 32 6f 39 68 79 39 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 20 20 20 66 32 30 6A 66 6A 61 66 30 71 39 33 32 77 40 30 39 31 30 31 20 20 20 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 20 20 20 20 20 20 20 6A 61 68 44 26 40 6E 66 64 69 77 5F 44 5F 7E 6A 66 75 77 68 21 2e 2e 2e 2e
Text:
Code:
aoffoih9h(*GH(OH(Q2o9hy9 .......... [email protected] 01234567890123456789
jahD&@nfdiw_D_~jfuwh!....
Click to expand...
Click to collapse
save2 said:
Hex:
Code:
39 37 66 32 30 61 76 4E 68 28 2A 47 48 28 4F 48 28 51 32 6f 39 68 79 39 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 20 20 20 66 32 30 6A 66 6A 61 66 30 71 39 33 32 77 40 30 39 31 30 31 20 20 20 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 20 20 20 20 20 20 20 6A 61 68 44 26 40 6E 6A 44 46 45 64 20 20 6B 24 61 75 44 6E 7A 21 2e 2e 2e 2e
Text:
Code:
97f20avNh(*GH(OH(Q2o9hy9 .......... [email protected] 01234567890123456789 jahD&njDFEd k
$auDnz!....
Click to expand...
Click to collapse
We can see some similarities and some differences. Notice they both have "01234567890123456789" in them in the same place and they both end with "!....". The first 8 letters are different though and some of the middle is different. A safe assumption is usually if something changes at the very beginning of the file or at the very end it's a potential checksum. I'll explain more about those later. Say we only changed our stat for gold in the game between the two saves we have. Since we think the first change is a checksum that means the second change must be our gold number. Now we have no idea what the encryption method is at the moment but we do know how much our gold was and is and where in the file it's saved now. So we keep that information handy and build up our gold to an ungodly amount through work or cheats, save, and open the file. It now looks like this.
save3 said:
Hex:
Code:
38 61 66 6A 77 21 5F 20 68 28 2A 47 48 28 4F 48 28 51 32 6f 39 68 79 39 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 20 20 20 66 32 30 6A 66 6A 61 66 30 71 39 33 32 77 40 30 39 31 30 31 20 20 20 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 20 20 20 20 20 20 20 6A 61 68 44 26 31 64 75 76 6E 20 41 45 46 6E 20 20 5F 2E 2E 32 21 2e 2e 2e 2e
Text:
Code:
8afjw!_ h(*GH(OH(Q2o9hy9 .......... [email protected] 01234567890123456789 jahD&1duvn AEFn
_..2!....
Click to expand...
Click to collapse
We can clearly see that the same two places have changed. First thing to try (shot in the dark) is take the area we think is gold and put it in our first save. That would make it look like this
Modded_save said:
Hex:
Code:
61 6F 66 66 6F 69 68 39 68 28 2A 47 48 28 4F 48 28 51 32 6f 39 68 79 39 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 20 20 20 66 32 30 6A 66 6A 61 66 30 71 39 33 32 77 40 30 39 31 30 31 20 20 20 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 20 20 20 20 20 20 20 6A 61 68 44 26 31 64 75 76 6E 20 41 45 46 6E 20 20 0D 0A 0D 0A 5F 2E 2E 32 21 2E 2E 2E 2E
Text:
Code:
aoffoih9h(*GH(OH(Q2o9hy9 .......... [email protected] 01234567890123456789 jahD&1duvn AEFn
_..2!....
Click to expand...
Click to collapse
We ignore the possible checksum for now, rehash/resign and load it up to see if it works. To our shock it does! Our gold has jumped but everything else is exactly the same as the first save so we think to ourselves "what else could have changed between those two saves I had first?" The answer is simple. The time. The first few bytes of our file are our gameplay time. There are games that use checksums and if the edited save doesn't load up then that game probably does. This example was just to get you into basic hexing, not bypassing game security. If this made your head explode, please get a bucket and try again . It gets easier, I promise. Just re-read this a few times, eventually it will "click" and you'll understand.
Edit: Just in case my way was a bit difficult to understand I found another explanation posted by Emerald Lance, it's the same info just worded a bit differently. Maybe you can understand this one if you can't understand mine.
Emerald Lance said:
Hex editing can indeed be a daunting task for beginners. When I first started, I remember that it just looked like a swirl of coded nonsense. But there are only two things you need to get started: a hex editor, and knowledge on how to count in hex.
If you're talking about modding 360 game saves, programs like Modio and Horizon have a hex editor built in, so we'll skip that part. Assuming you don't know how to count in hex, this is the general basic concept. When you normally count, you go 0-9, and then it starts again as the zero of the next series of numbers, in this case 10-19, then 20-29, and so on. In hex, you count from 0-F; instead of going on to 10 after 9, you go from 9 to A. In hex, A means 10, and F means 15, so in hex 10 means 16, and so on. A lot of people starting off have a bit of trouble understanding at first, but you'll get it sooner or later; I learned by trying to count in hex in my everyday life, and by studying how color sliders that went up to 255 were different than the ones that went to FF (there is no difference, just decimal vs hex). Of course, this is assuming you don't already know how to count in hex.
While much of the hexing process is just changing values, you gotta know where those values are in in order to change them. Every game is different, so this is important. There are two methods you should be familiar with: Ctrl+F, and comparison. Let's say you want to edit a character's HP stat. While playing the game, take note of what it is. Let's say it's 590. Right it down and use a hex calculator (Windows has one that comes with it) to find out what it is n hex; in this case, 590 = 024E. Remember to add a 0 at the beginning of values that have an odd number of digits, since hex is in bytes (two digit values) and it helps make sure you don't get a bunch of values you don't want. Now, in your hex editor, hold the Ctrl key and press F, then type in the hex value you want to search for.
It isn't uncommon for the search to turn up multiple hit, especially when searching for lower (and by proxy, more common) values. When this happens, you need a comparison. Play the game normally and do something to change the value you want to edit, in HP's case I guess level up once. Take note of the new HP value in hex, and repeat the Ctrl+F process with this new save. Let's assume you're new hex number is 02D6. Since the only instance of 024E that changed was HP, then that should be the only instance that is now 02D6. Look for 02D6 now, and find the place where it sits that 024E used to sit. It's easiest to do this when you have both old save and new save open at once; you can also write down each address if there aren't a lot of instances. Once you find the value (and know that it's HP) change it to whatever you like. It can be sometimes risky to edit games with a maximum value of 9999 (270F in hex) to higher than their maximum, but in most games it works fine. Now just remember to resign/rehash the save (again, programs like Modio and Horizon do this) and inject it into your drive.
There are a few things that can go wrong with just simple hexing. While most older games can just be edited easy, newer or more popular games often have some measures put in place by the developer just to make sure it isn't hacked. The game save could be compressed or encrypted (will essentially show gibberish until decompressed or decrypted) or could have a checksum (a little line of encrypted code that changes every time values change during gameplay; if the values don't match the checksum, you get a corrupt save). Just remember that not everything can be edited with just hex knowledge alone.
Believe it or not, this is all there is to know (that can be taught) about hexing. Everything else is just picked up as you go, including better understanding of hex as a language (as opposed to just a number system). I hope this helps, and I hope it gets you started on your hacking way.
Click to expand...
Click to collapse
Basic Game Security​
As has been said before, many games have some sort of security be it encryption, a checksum, some mathematical manipulation, or a combination of these. The easiest (and the one I will be discussing first) is mathematical manipulation.
Mathematical Manipulation:
Even the name sounds imposing huh? Well it isn't as scary as it sounds. All it means is that the value we're looking for has had some math done to it. Say we're looking for our gold which is 100. We look through our saves but don't find any values of 100 but we know that it isn't encrypted because we can read it. Well we go through the file compare method and find a value that changed when we got another gold. The values that were changed are 800 and 808. We know that our gold values are 100 and 101 and this is the only thing that changed so they must correspond. This allows us to realize "hey, all they did was multiply our value by 8". That's mathematical manipulation and is quite easy to implement. For the more code-savy of you I will give an example code that could be found in-game.
Autoit:
Code:
$iVal = 800
$iGold = $iVal/8
GUICtrlSetData($txtGoldVal,$iGold)
C++:
Code:
int iVal = 800;
int iGold = iVal/8;
printf(iGold)
All this code does is take the value (800) and divide it by 8 to show you your real gold value. Since the game would add in increments of 8 for every gold piece we wouldn't find the display value (100) but only the real value of 800. Now onto checksums ^_^.
Checksums:
Checksums are bits of data that the game reads before the save is loaded to verify that it hasn't been tampered with. Some common checksums are the SHA1 or MD5 value of the data (not including the checksum itself of course), a proprietary key (such as the PSV header of a PSP's PS1 savegame), or sometimes even something as simple as your profileID. Most checksums are found at or close to the beginning of the file. Since it's the first thing read to verify security it makes sense that it would be there, but sometimes it's at the end of the file in an attempt to throw us off. Going back to our original example of "sysSettings1sysSettings2sysSettings3.........weapon_023464........63" we know the hex is
Code:
73 79 73 53 65 74 74 69 6E 67 73 31 73 79 73 53 65 74 74 69 6E 67 73 32 73 79 73 53 65 74 74 69 6E 67 73 33 2E 2E 2E 2E 2E 2E 2E 2E 2E 77 65 61 70 6F 6E 5F 30 32 33 34 36 34 2E 2E 2E 2E 2E 2E 2E 2E 36 33
but in our savegame we see
Code:
6d ed b1 c4 ff 91 39 9c 75 b4 bc fe fe 0e 69 63 73 79 73 53 65 74 74 69 6E 67 73 31 73 79 73 53 65 74 74 69 6E 67 73 32 73 79 73 53 65 74 74 69 6E 67 73 33 2E 2E 2E 2E 2E 2E 2E 2E 2E 77 65 61 70 6F 6E 5F 30 32 33 34 36 34 2E 2E 2E 2E 2E 2E 2E 2E 36 33
We can clearly see that "6d ed b1 c4 ff 91 39 9c 75 b4 bc fe fe 0e 69 63" is before the actual data we want but we don't know that that is because on the "readable" side of our editor it looks like this "m.....9.u.....ic". What do we do in this situation? Well first we swear, then we see if it matches up with any of the "common" checksums. We try the SHA1 of our data which is "fbce6651fad6a8461c9bc0751cf153dd044addb". Nope, not that one. We try the MD5 which is "6dedb1c4ff91399c75b4bcfefe0e6963", hmm...let's spread that out. "6d ed b1 c4 ff 91 39 9c 75 b4 bc fe fe 0e 69 63", bingo exact match. Now we know that it uses an MD5 hash of the data as its checksum. All we need to do if we change something is recalculate the MD5 value. There are several ways to do this an I won't go into specifics (google is your friend). Following our old example let's say we wanted to unlock menu 4. We would set our data to "sysSettings1sysSettings2sysSettings3sysSettings_04.........weapon_023464........63" and get the MD5 which is "388ff38b741b00fbbd1fc84f69362002". Now all we do is insert our new checksum in place of the old one to make our hex data look like this
Code:
38 8f f3 8b 74 1b 00 fb bd 1f c8 4f 69 36 20 02 73 79 73 53 65 74 74 69 6E 67 73 31 73 79 73 53 65 74 74 69 6E 67 73 32 73 79 73 53 65 74 74 69 6E 67 73 33 73 79 73 53 65 74 74 69 6E 67 73 5F 30 34 2E 2E 2E 2E 2E 2E 2E 2E 2E 77 65 61 70 6F 6E 5F 30 32 33 34 36 34 2E 2E 2E 2E 2E 2E 2E 2E 36 33
Notice how our checksum is at the very beginning? It's the same place as the original checksum we found. We never want to put it in another location. We always want to keep the data as close to the original as possible so we don't break our game or get a corrupted save.
Proprietary Checksums:
These are a *****. I'll be honest I don't know how to crack stuff like this so the best bet is to wait until someone figures it out or get help if you don't already know how. I'll give an example anyway. Using the same example we see our hex data as
Code:
fd fc 0c f4 4d b7 cf 1b 87 e6 78 46 58 ea 3b 04 73 79 73 53 65 74 74 69 6E 67 73 31 73 79 73 53 65 74 74 69 6E 67 73 32 73 79 73 53 65 74 74 69 6E 67 73 33 2E 2E 2E 2E 2E 2E 2E 2E 2E 77 65 61 70 6F 6E 5F 30 32 33 34 36 34 2E 2E 2E 2E 2E 2E 2E 2E 36 33
which means our checksum is "fd fc 0c f4 4d b7 cf 1b 87 e6 78 46 58 ea 3b 04". We run our data through the more common checksums and even some others we find out about through searching but we don't find any publicly available method of making the same checksum. First thing to try is leave the checksum alone and still change your data, then load it up and see if it runs. If it does then it's probably just an identifier, if it doesn't then it really is a checksum and we need help.
Encryption:
I've already talked about encryption . It's basically a type of mathematical manipulation but on a larger scale than just our data (for the techies more than just on variables/userdata). Normally they have an algorithm, a mathematical formula, that they run the entire save file through to make it totally confusing and unreadable. Well, if the game can read it so can we right? It's just a matter of figuring out how it works. Using our standard example I'll show you some very basic encryption. We already know what the hex of the file should be, but under encryption it looks like this
Code:
88 94 88 68 80 89 89 84 21 82 88 46 88 94 88 68 80 89 89 84 21 82 88 47 88 94 88 68 80 89 89 84 21 82 88 48 88 94 88 68 80 89 89 84 21 82 88 20 45 49 17 17 17 17 17 17 17 17 17 92 80 76 85 21 21 20 45 47 48 49 51 49 17 17 17 17 17 17 17 17 51 48
which translates on the "readable" side to
Code:
X^XDPYYTRX.X^XDPYYTRX/X^XDPYYTRX0X^XDPYYTRX-1\PLU-/013130
.
Gibberish right? Well we don't know the encryption algorithm so we're stuck with using the filecompare method and hoping they don't also have a checksum.
In all of these examples when data would be loaded onto your 360 you would need to rehash/resign your save somehow (Modio, Horizon, etc) to make sure the 360 recognizes it as proper data, even if the game won't. These are the basic concepts behind checksums. Simple(ish) right?
P.S. For those of you interested here's the basic encryption program I whipped up for this example. It just reads the binary values one-by-one and adds F to them but hey it works. It's written in AutoIt.
Code:
#include <file.au3>
Dim $i, $string, $hex
$file = FileOpen("test.txt",16)
$num = FileRead($file)
$num = @extended
While $i < $num
FileSetPos($file,$i,0)
$data = FileRead($file,1)
$data = StringReplace($data,"0x","")
$new_data = $data + 0xf
$hex &= $new_data & " "
$string = $string & ChrW($new_data)
$i += 1
WEnd
MsgBox(0,"",$hex)
MsgBox(0,"",$string)
Basic Programming Ideas and Principles​
Ok first a bit of terminology so people don't get too confused.
Variable - A variable is a storage device for data. Variables have certain types. They are:
Char - a single character or number (0-9,a-z,etc)(1 byte)
Integer - A whole number (2-4 bytes)
String - Text. Words. You know, language
Array - A variable containing other variables or multiple data sets/types.
Vector - Expanding/contracting array
Double - Can have decimals (8 bytes)
Float - Can have decimals (4 bytes)
Function - A piece of code that performs a single, specific task.
Data - information
Code - ...duh...
Parameter - A function-specific variable. Takes input to use in the function.
Loop - a piece of code that continues until certain conditions are met
Infinite Loop - never stops
Event - notifies the program and the OS that something happened.
Control - Something a user interacts with, such as a button, radiobutton, checkbox, etc
Now that that's out of the way lets get into the basics. "What is programming?" It's making a machine do what you tell it . There are different programming languages just like there are different spoken languages. Different ways of expressing the same idea. My preferred language is AutoIt (as I've stated before...I think) since I'm more familiar with it than anything else right now. "Which language is the best to use?" Well they all have merit, find the one you like the best and go for it. "Are you going to teach us a language?" No, I want you to find the language that you like best and learn it for yourselves. The ideas will carry over regardless of what the language is as long as you have a good grasp of what's going on.
Hello World
This is the most basic program for any language (at least any I've seen). Normally all it does is open a console/terminal window with the words "Hello World". Even in this basic example you're already learning valuable lessons. How to structure the code, how to open a console window, how to output text. These will all be used quite a bit at first, then the only one that will fade will be the console window as you move into GUIs.
Ok now onto something more advanced/useful, Loops. "When would I use a loop?" You would use a loop when you need something to happen over and over again, such as the main body of your program or a check for something (different value, specific value, button press event, etc). Loops are very common and make things much easier. If some data changes all you need to do is call your function again using the new data. Instead of doing this manually a loop could be set up. In this loop we would want to check for a change in the data (so as not to call the function needlessly and waste time) and if something changed then call the function with the new data. Loops also keep our program running, you don't want your program to just flash for 1/10th of a second do you?
There are a few basic types of loops. The For loop, the Do loop, and the While loop.
The For loop is usually used to do things a set number of times. Each time the loop goes through it adds a specific value to a variable (usually 1 but sometimes more. It can also be a negative number effectively counting down). After the loop has gone through the number of times its supposed to it then moves on to the next chunk of code.
The Do loop runs until certain conditions are met. These conditions could be any number of things, just use your imagination.
The While loop runs while something is happening. It's similar to the Do loop in that it runs until a condition is met, but that condition is always "until *condition* stops". You will see "While 1" a lot, that simply says "while the program is running" (effectively). It actually means "While 1=1" which will never change. This is an infinite loop, a loop that will never stop on its own. If we want it to stop we have to stop it explicitly.
Now that you know what functions and loops are it's time to explain events in a bit more detail. Events are pieces of code that run when something specific happens. Your OS (operating system, windows linux mac etc) has events built-in that it executes all the time. As an example whenever your mouse is clicked an event is sent to the main OS telling it a button was clicked, where it was clicked, and what button it was. Sometimes we want to capture these events and have our own code executed as well as or sometimes instead of the main OS code. Sometimes the main OS event is just a notification, it tells everything that something happened and doesn't do anything else. If we make a program with a button but don't have any functions tied to it then an event will still be triggered but it will simply tell the OS and other programs a button was clicked. When we tie code into our controls all we're really doing is setting a specific event as the trigger for our code, the condition for it.
Well that's pretty much it for basic principles. This should get you started and at least able to do pseudo-code (stuff that looks like code but really isn't). Here's an example of some pseudo-code.
Code:
if *something happens* then *send an alert*
Writing Code​
Before we get into the actual code writing I want to discuss a few things. Most of them are just tips to make things easier and more readable, especially if you're not the only one working on it.
Naming Conventions
This is simply how you name things. Function names should be pretty obvious and easy to read. If a function reads hex data call it something like ReadHex or HexRead. Variable names should be just as obvious and should tell you what type of variable it is just by the name.
Arrays - start with a (aArray)
Strings - start with s (sString)
Integer - start with i (iInteger)
File - start with f(no floats) or fi(floats)(fFile, fiFile)
Pointers - start with p (pPointer)
Double - start with d (dDouble)
Edit Boxes - start with edt (edtEdit)
Text boxes/Inputs - start with txt (txtInput)
Buttons - start with btn (btnButton)
Sliders - start with sld (sldSlider)
Combo box(dropdown menu) - start with cmb (cbmCombo)
Menu - start with mnu (mnuMenu)
List boxes/TreeViews - start with lst (lstTreeview)
Checkboxes - start with chk (chkCheckbox)
Radio button - start with rdo (rdoRadio)
Labels - start with lbl (lblLabel)
Groups - start with grp (grpGroup)
This will make your code more readable to an extent, and if you break things apart properly that will make it even easier.
Readability:
You always want your code to be readable, if for no other reason than you don't want to forget what something does. If you are working with another coder you definitely want to have readable code, otherwise there will be a lot of time wasted trying to figure out what portions of code do when it would be obvious if it were more readable.
Comments are a good way to improve readability of code, as is breaking code into chunks. Breaking code up should have a negligible effect on speed, if any at all. Here's an example to illustrate my point.
bunched said:
Autoit:
Code:
$sData = Bin(Hex(Asc("a")))
C++:
Code:
binaryWriter->Write(binaryReader->ReadByte());
Click to expand...
Click to collapse
readable said:
Autoit:
Code:
$sData = Asc("a")
$sData = Hex($sData)
$sData = Bin($sData)
C++:
Code:
sByte = binaryReader->ReadByte();
binaryWriter->Write(sByte);
Click to expand...
Click to collapse
I know these examples aren't great but they do illustrate my point. In the first it's a bit jumbled and somewhat hard to understand what's going on immediately. In the readable version it's clear as to what is happening in the code and in what order. Order does play a key role in coding so it's important to always know what order things happen in. In the autoit example we are taking the ascii value of "a", converting that to hex, then converting that to binary. The example is fairly easy to read but there will be times when things are nested (get to that in a moment) in such a way that it's almost impossible to read. That's why you want to break the code apart, so as to avoid confusion for yourself and anyone else reading your code.
Nested Statements:
Nested statements are basically just statements within other statements. A for loop inside a while loop, a function calling another function (this one happens a lot), etc. More than likely you will use nested statements at some point. This is fine as long as you maintain readability. Always make sure you keep your indentations consistent, a nested statement should be indented one place more than the previous statement. If you have a statement that has 3 parts, 2 nested, there should be 2 indentations. This (broken record ) maintains readability and makes it simpler to find the portion of code you're looking for. Most compilers/editors do this for you but sometimes not, just make sure everything is there.
Writing Functions:
As I've said before you want your functions to do only one thing, and do it well. Sometimes it's a bit difficult to separate different portions of code into functions but it helps. If you just need part of the code later on it's much better to have it in its own function than to have to run through an entire other function to get to the part you need. This improves speed and efficiency. Take your time, plan out how you want things to flow, and if nothing else wing it. Try different ideas and see what works and what doesn't. I know there are others out there who do their best work when semi-conscious or fully asleep (yes I dream about coding sometimes -_-) but that allows you to think of solutions you normally never would. If you can't get past a roadblock try taking a nap or just plain sleeping. A fresh set of eyes will help with projects, sometimes you need to ask a new coder to look over it and sometimes you need a veteran. Since new coders don't know much yet they often only find obvious errors that we overlook such as an error in syntax or a typo. Veteran coders know a lot and they can help us think of new solutions as well as possibly tell us why what we try doesn't work. When you finally get a function working, look it over. See if there's a way to break it down into even smaller functions.
more soon
Tying Code and GUI Together​
Ok now that we have our code working it's time to make it look pretty. Some people can use a console fairly well,some can barely click a button lol. We want our programs to be as user-friendly as possible, thus we need a GUI. This should actually be the easiest part of the project since we already have our code. As I said before the code should be in functions so it's just a matter of tying those functions into events. Whenever a user does anything and I mean anything it triggers an event, be it clicking or moving a mouse, pressing a key, or sometimes even just sneezing on the screen (or maybe that's just me lol). We only need to capture certain events such as a button being clicked or a slider being moved usually so that's what I'll focus in terms of controls.
Designing the GUI
First thing we do is open up our favorite form designer. There are designers for most languages so if you don't have one just google, you're bound to find one. Design your GUI in this (place buttons, sliders, text boxes, labels, etc) then get the code for it. Make sure when you're designing your GUI anything that needs to be interacted with (buttons, sliders, etc) have an event set off when they're clicked/changed. Most form designers have an option to import the code directly into your editor/compiler so just do that if you can.
Integrating Functions and Events
Ok now that we have our code and our GUI code we can put the two together. Since all our important stuff is in functions and we can call it whenever we need all we need to do is put our function calls inside our event triggers. Here's an example in autoit of code that calls our custom function, called "HexEdit" when a button named "$btnChange" is clicked. Now it's named $btnChange but it will show Change on the button itself, don't get those confused it'll screw you up.
Code:
$nMsg = GUIGetMsg()
Switch $nMsg
Case $btnChange
HexEdit($data)
EndSwitch
$data is just a variable passed as a parameter to the function. Ok whose head just exploded, be honest. Raise your hand. Ok now go get a towel then talk to me after it grows back. For those of you still able to think all this code does is say "when a user clicks a button named $btnChange call the function HexEdit and send $data to that function."
Our function "HexEdit" should take the data it gets from $data and use that to do whatever it needs to do. Say it edits our gold, $data should be the value we want our gold at. We send $data (which has a value of, say, 10k) and in turn HexEdit() automatically edits our save file to give us 10k gold. Simple in principle yeah?
The most time-consuming portion of the GUI phase is designing the GUI. We all want our programs to look good so we'll probably spend a fair amount of time designing. I've found that doing a rough draft in the form designer then editing values in the code is a good way to make things look neat. I like to do things in increments of 5. If something has a value of 173 I'll make it 175, if it's 289 I'll make it 290, etc. Things line up well and it seems more professional, plus it's easier than trying to get it perfect in the form designer. Try to have an idea of how you want it to look before you start designing, that way you're not making it up and it looks even better. Really integration of the code and GUI is simple, once both portions are done. If you plan on adding features later you might want to add the appropriate controls to the editor and just disable them until their functions are working. It gives users a bit of a teaser of what's to come.
Code Examples​
Now most of these will be in AutoIt since it's my preferred language but I will post some code in other languages as well if I know the conversions off-hand. Most of these will be snippets (small pieces of code that do something specific).
For loop: *assuming you have an integer variable declared that's named iCount*
AutoIt
Code:
For $iCount = 1 to 6
*do something here*
Next
This loops the code 6 times, each time doing what's between "For" and Next. It also adds 1 to $iCount.
C++
Code:
for(iCount = 1, iCount = 6, iCount++){
*do something here*;
}
Same as above
While loop: *assuming you have an integer variable declared that's named iCount
AutoIt
Code:
While $iCount < 12
*do something*
WEnd
Checks if $iCount is less than 12 and if so executes
C++
Code:
While(iCount < 12){
*do something*;
}
Same as above
Do loop: *assuming you have an integer variable declared that's named iCount
Code:
Do
*do something*
Until $iCount = 48
Executes until $iCount equals 48
Open a file:
AutoIt
Code:
$fSave = FileOpen("*savegame*")
Creates a filehandle to a file that can be used with other File* functions and opens in read-only mode
C++
Code:
FILE * fFile;
fFile = fopen ("*savegame*","r");
Same as above
Read a file: *uses the filehandle created earlier*
Code:
$sFileData = FileRead($fFile)
Reads the file's contents into a variable named sFileData
Write to a file: *uses the filehadle created earlier*
Code:
FileWrite($fFile,$sData)
Writes the string $sData to the file, either appending it (adding it to the end) or replacing the file's entire contents depending on the mode used to open the file.
Open a file in binary mode: *since we're modders we'll need the hex of the file so this will help a lot*
Code:
$fFile = FileOpen("*savegame*",16)
Opens the file in binary read-only mode. The binary is represented as hex. This will give us the hex data.
Read one byte from an offset: *uses filehandle created earlier*
Code:
FileSetPos($fFile,Dec(*offset*))
$sOffsetData = FileRead($fFile,1)
Goes to the offset (converted from hex to decimal with Dec) and reads one byte. Number of bytes read can be changed by changing the "1".
Will add more as needed/as I think of them
More Code Examples:​
Since I'm working on a project with another member here that requires me learning C# I thought I'd post some of my practice code. It's all functional.
C#
Common Functions:
Code:
using System.Windows.Forms;
using System;
using System.IO;
using System.Threading;
using System.Collections.Generic;
namespace Common
{
public class CommonFunctions{
public static void MsgBox(string sMessage, string sCaption = "Error", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon Icon = MessageBoxIcon.Exclamation, IWin32Window owner = null)
{
MessageBox.Show(owner, sMessage, sCaption, buttons, Icon);
}
public static void Test(params string[] sInput)
{
for (int i = 0; i < sInput.Length; i++)
{
Console.WriteLine(sInput[i]);
}
}
public static void Sleep(int iMilliseconds)
{
Thread.Sleep(iMilliseconds);
}
public static string StringStripCR(string sInput)
{
string sNewString = sInput.Replace(Convert.ToString(Convert.ToChar(10)), "");
sNewString = sNewString.Replace(Convert.ToString(Convert.ToChar(13)), "");
return sNewString;
}
public static string[] DriveGetDrive(string sType){
DriveInfo[] ListDrives = DriveInfo.GetDrives();
List<string> lList = new List<string>();
DriveType dType = new DriveType();
int iDriveNum = 0;
lList.Add(Convert.ToString(iDriveNum));
if((sType == "removable") || (sType == "Removable")){
dType = DriveType.Removable;
}
else if((sType == "network") || (sType == "Network")){
dType = DriveType.Network;
}
else if ((sType == "Fixed") || (sType == "fixed"))
{
dType = DriveType.Fixed;
}
else if ((sType == "CDRom") || (sType == "cdrom") || (sType == "CDrom"))
{
dType = DriveType.CDRom;
}
foreach (DriveInfo sDrive in ListDrives)
{
if(sDrive.DriveType.Equals(dType))
{
string sDriveString = Convert.ToString(sDrive);
lList.Add(sDriveString.Remove(sDriveString.Length - 1,1));//Add to RemovableDrive list
}
}
lList[0] = Convert.ToString(lList.Count - 1);
string[] aDrives = lList.ToArray();
return aDrives;
}
}
}
CWCheat Database Fixer:
Code:
using Common;
using System.IO;
using System;
public class MainRun:CommonFunctions
{
static void Main()
{
string path = "";
string[] aDrives = DriveGetDrive("removable");
int iMax = Convert.ToInt16(aDrives[0]);
for(int i = 2;i <= iMax; i++){
if (Directory.Exists(aDrives[i] + "\\seplugins\\"))
{
path = aDrives[i] + "\\seplugins\\cwcheat\\cheat.db";
}
}
if((path==""))
{
MsgBox("No database detected\n\nExiting...");
Environment.Exit(0);
}
string sFileContents = File.ReadAllText(path);
string sCleared = StringStripCR(sFileContents);
sCleared = sCleared.Replace("_", "\r\n_");
sCleared = sCleared.Remove(0, 1);
File.WriteAllText(path, sCleared);
}
}
Autoit
CWCheat Database Fixer:
Code:
#include <File.au3>
$path = ""
$drives = DriveGetDrive("removable")
for $i = 2 to $drives[0]
if FileExists($drives[$i] & "\seplugins") Then
$path = $drives[$i] & "\seplugins\cwcheat\cheat.db"
EndIf
Next
if $path = "" Then
MsgBox(48,"Error","No database detected." & @CRLF & @CRLF & "Exiting...")
Exit
EndIf
$file = FileOpen($path,0)
$data = StringReplace(StringReplace(StringStripCR(FileRead($file)),"_", @CRLF & "_"),@cr,"",1)
$file = FileOpen($path,2)
FileWrite($file,$data)
Now the two DB fixers work exactly the same in exactly the same way with exactly the same result. Oddly enough the c# version was slower on my system than the autoit version, but considerably smaller. It may just be something quirky with my system but I thought I'd let you know. Since they work the same it's easy to look at the code and "translate" between the two.
This was quoted from a buddy of mine.
Hipolipolopigus' timestamp='1295080083' post='7718 said:
Just thought I'd put this up;
Instead of doing a whole bunch of if else if else... You can "cheat"
Original;
Code:
if((sType == "removable") || (sType == "Removable")){
dType = DriveType.Removable;
}
else if((sType == "network") || (sType == "Network")){
dType = DriveType.Network;
}
else if ((sType == "Fixed") || (sType == "fixed"))
{
dType = DriveType.Fixed;
}
else if ((sType == "CDRom") || (sType == "cdrom") || (sType == "CDrom"))
{
dType = DriveType.CDRom;
}
using "switch" and "case";
Code:
switch (sType.ToLower())//use .ToLower() to handle the string as all lowercase
{
case "removable": dType = DriveType.Removeable; break;
case "network": dType = DriveTypeNetwork; break;
case "fixed": dType = DriveType.Fixed; break;
case "cdrom": dType = DriveType.CDRom; break;
default: throw new Exception("Invalid type!");
}
As you can see, it saves code space and looks tidier
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Click to expand...
Click to collapse
In case you guys were afraid feel free to ask any questions or make requests for examples here the worst that'll happen is I'll say "I don't know how to do that :/" and it'll allow someone who does know how know they need to post an example
Hi is this thread to mod an apk??
Sent from my GT-N7100 using xda premium
Kspalahyia said:
Hi is this thread to mod an apk??
Sent from my GT-N7100 using xda premium
Click to expand...
Click to collapse
cant you read the OP? 10 poster. use search button for modding apk.
@OP
this is what i have always wanted. i tried learning hex-editing on .gba modifying sites for games but was never able to do it. will get back at this guide after exams. Thanks no thanks button in OT forum
Just confirming... Must do this after my exams....
Sent from my GT-N7100 using xda premium
THIS program compiled successfully correctly but output is wrong ...
Can you help me??
#include<stdio.h>
#include<conio.h>
void main()
{ clrscr();
float a,b;
char d;
printf("enter two variables");
scanf("%f%f",&a,&b);
printf("enter operator");
scanf("%c",&d);
switch (d)
{
case '+' : printf("%f",a+b); break;
case '-' : printf ("%f",a-b); break;
case '/': printf ("%f",a/b); break;
case '*' : printf ("%f",a*b); break;
default : printf ("try again!!!");
}
getch();
}
Click to expand...
Click to collapse
wanna thank xda? here
Wowa I learned that thanks...
Sent from my GT-N7100 using xda premium

Categories

Resources