By Chishm
Nitro Hax is a cheat tool for the Nintendo DS. It works with original games only.
The newest release is available to download from the Nitro Hax web page.
Copyright (C) 2008 Michael "Chishm" Chisholm
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Thanks to (in no particular order):
Big thanks to Datel (CodeJunkies) for creating the original Action Replay and its cheats.
In addition to the standard Action Replay DS code types described on EnHacklopedia's Action Replay DS page, Nitro Hax supports the following custom codes.
CF000000 00000000
: Code list endCode used internally to specify the end of the cheat code list. It does not need to be specified manually.
CF000001 xxxxxxxx
: Relocate cheat engineRelocate the cheat engine to address xxxxxxxx
. The cheat engine and all data
are moved to the given address, which should be accessible from the ARM7.
CF000002 xxxxxxxx
: Hook addressChange the hook address to xxxxxxxx
. The hook should be a function pointer
that is called regularly. By default the ARM7's VBlank interrupt handler is
hooked. This code overrides the default.
C100000x yyyyyyyy
: Call function with argumentsCall a function with between 0 and 4 arguments. The argument list follows this code, which has the parameters:
x
: Number of arguments (0 - 4)yyyyyyyy
: Address of functionFor example, to call a function at 0x02049A48
with the three arguments
r0 = 0x00000010
, r1 = 0x134CBA9C
, and r2 = 0x12345678
, you would use:
C1000003 02049A48
00000010 134CBA9C
12345678 00000000
C200000x yyyyyyyy
: Run ARM/THUMB codeRun ARM or THUMB code stored in the cheat list.
x
: 0
= ARM mode, 1
= THUMB modeyyyyyyyy
: length of function in bytesFor example:
C2000000 00000010
AAAAAAAA BBBBBBBB
CCCCCCCC E12FFF1E
This will run the code AAAAAAAA BBBBBBBB CCCCCCCC
in ARM mode.
The E12FFF1E
(bx lr
) is needed at the end to return to the cheat engine.
The above instructions are based on those written by kenobi.
C4000000 xxxxxxxx
: Scratch spaceProvide 4 bytes of scratch space to safely store data. Sets the offset register
to point to the first word of this code. Storing data at [offset+4]
will save
over the top of xxxxxxxx
.
This is based on a Trainer Toolkit code.
C5000000 xxxxyyyy
: CounterEach time the cheat engine is executed, the counter is incremented by 1.
If (counter & yyyy) == xxxx
then execution status is set to true, else it is
set to false.
This is based on a Trainer Toolkit code.
C6000000 xxxxxxxx
: Store offsetStores the offset register to the address xxxxxxxx
.
This is based on a Trainer Toolkit code.
D400000x yyyyyyyy
: Dx Data operationPerforms the operation Data = Data ? yyyyyyyy
where ?
is determined by x
as follows:
0
: add1
: or2
: and3
: xor4
: logical shift left5
: logical shift right6
: rotate right7
: arithmetic shift right8
: multiplyFor codes begining with 3
-9
or A
(if-type codes), the offset register can
be used for address calculations. If the lowest bit of the code's address is set
then the offset is added to the address. If the address is 0x00000000
then the
offset is used instead.
For example, if the code 32009001 00001000
is run and the offset register is
currently 0x000000AC
, then:
0x02009000
,1
) to give an address of 0x020090AC
,0x020090AC
is read, and the value compared to
0x00001000
(the second codeword).3
) if the codeword value is greater than
the value read from memory, then the rest of the codes in the list will be
executed, otherwise they will be skipped until the next D0000000 00000000
code
is reached.