tag:blogger.com,1999:blog-15357272898365612862024-02-18T22:38:18.963-08:00I don't even knowI try my best to post about thingsBirdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.comBlogger41125tag:blogger.com,1999:blog-1535727289836561286.post-87885025524953232152019-08-25T14:27:00.001-07:002019-08-25T14:28:08.188-07:00Loading custom HTML to google markersSo, a lot of people suggest that you can't load markers with your custom content when using google maps. It's simply untrue. The markers are loaded client side, so you are able to do whatever.<br />
<br />
Take the following code for your click event.<br />
<br />
var content;<br />
fetch('pages/checkin.html')<br />
.then(response => response.text())<br />
.then((data) => {<br />
content = data;<br />
var infowindow = new google.maps.InfoWindow({content:content});<br />
<br />
var marker2 = new google.maps.Marker({<br />
map: map,<br />
position: place2.geometry.location<br />
})<br />
<br />
marker2.addListener('click', function() {<br />
console.log("Click");<br />
map.setCenter(marker2.position);<br />
infowindow.open(map, marker2);<br />
});<br />
<br />
First we obtain the new html by fetching it from the server.<br />
<br />
<br />
<br />
<br />
Then in the 'then' we then create the info window, and apply that.<br />
<br />
<br />
<br />
Many other solutions require creating a custom class and inheritance. You don't need that at all.<br />
<br />
<br />
Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-64241588742054602872019-04-09T16:29:00.002-07:002019-04-09T16:29:20.224-07:00The return. Wow! It has been a while, I thought this was gone. I will now be using this space to talk my experiences with programming and maybe some other things. Cheers to the old readers! Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-6573335507991042652013-03-11T17:09:00.001-07:002013-03-11T17:09:21.692-07:00gba4ds compilingIf you're having problems compiling GBA4DS, you'll need to edit the make file in bootstub to reflect the change to arm-none-eabi*<br />
<br />
You will also need a copy of the R4 menu in the root dir of your source.Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-32679838593996642612013-03-03T15:24:00.002-08:002013-03-03T15:24:39.640-08:00WorkHard at work working on something for y'all please stayed tuned!Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com2tag:blogger.com,1999:blog-1535727289836561286.post-80606547176261805722013-02-09T13:49:00.000-08:002013-02-09T13:49:06.901-08:00Decompilation exampleQuick example of how well the plugin works<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
void RestoreHealth(){ //Original function</div>
<div>
u16* curHealth=(u16*)0x3001310;</div>
<div>
u16* maxHealth=(u16*)0x3001312;</div>
<div>
unsigned short val=*maxHealth-*curHealth;</div>
<div>
*curHealth+=val;</div>
<div>
<br /></div>
<div>
}</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Here's the assembeled copy</div>
<div>
<div>
EXPORT RestoreHealth</div>
<div>
RestoreHealth</div>
<div>
<br /></div>
<div>
var_8 = -8</div>
<div>
var_4 = -4</div>
<div>
<br /></div>
<div>
SUB SP, SP, #0x10</div>
<div>
LDR R3, =0x3001310</div>
<div>
STR R3, [SP,#0x10+var_4]</div>
<div>
LDR R3, =0x3001312</div>
<div>
STR R3, [SP,#0x10+var_8]</div>
<div>
LDR R3, [SP,#0x10+var_8]</div>
<div>
LDRH R1, [R3]</div>
<div>
LDR R3, [SP,#0x10+var_4]</div>
<div>
LDRH R2, [R3]</div>
<div>
MOV R3, SP</div>
<div>
ADDS R3, #6</div>
<div>
SUBS R2, R1, R2</div>
<div>
STRH R2, [R3]</div>
<div>
LDR R3, [SP,#0x10+var_4]</div>
<div>
LDRH R2, [R3]</div>
<div>
MOV R3, SP</div>
<div>
ADDS R3, #6</div>
<div>
LDRH R3, [R3]</div>
<div>
ADDS R3, R2, R3</div>
<div>
LSLS R3, R3, #0x10</div>
<div>
LSRS R2, R3, #0x10</div>
<div>
LDR R3, [SP,#0x10+var_4]</div>
<div>
STRH R2, [R3]</div>
<div>
ADD SP, SP, #0x10</div>
<div>
BX LR</div>
<div>
; End of function RestoreHealth</div>
<div>
<br /></div>
<div>
; ---------------------------------------------------------------------------</div>
<div>
ALIGN 0x10</div>
<div>
dword_8000320 DCD 0x3001310 ; DATA XREF: RestoreHealth+2 r</div>
<div>
dword_8000324 DCD 0x3001312 ; DATA XREF: RestoreHealth+6 r</div>
</div>
<div>
<br /></div>
<div>
And here's the decompiled version! </div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
; ---------------------------------------------------------------------------</div>
<div>
<br /></div>
<div>
EXPORT RestoreHealth</div>
<div>
RestoreHealth</div>
<div>
void RestoreHealth() { // framesize 0x10</div>
<div>
<br /></div>
<div>
(unsigned long)SP+0xC = 0x3001310;</div>
<div>
(unsigned long)SP+8 = 0x3001312;</div>
<div>
(unsigned short)SP+6 = word<(unsigned long)SP+8> - word<(unsigned long)SP+0xC>;</div>
<div>
word<(unsigned long)SP+0xC> = word<(unsigned long)SP+0xC> + (unsigned short)SP+6 & 0xFFFF;</div>
<div>
return void</div>
<div>
}</div>
<div>
; ---------------------------------------------------------------------------</div>
<div>
<br /></div>
</div>
Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-32276924319377040722013-02-09T13:21:00.000-08:002013-02-09T13:22:13.719-08:00Decompiler updateGreetings!<br />
<br />
<br />
There is now a repository for the decompiler!<br />
http://code.google.com/p/arm-thumb-decompiler-plugin/<br />
If you wish to be a committer please e-mail myself or normmatt.<br />
<br />
Helpers are welcome! :)<br />
<br />
<br />
Here's the current r11 binaries.<br />
<br />
https://dl.dropbox.com/u/12510094/NEVERDELETE/decompilerr11.zip<br />
<br />
<br />
Romhacking update soon, maybe today.<br />
<br />
Best jump table detection!<br />
<br />
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-72021337678550277192013-02-04T14:27:00.000-08:002013-02-04T14:27:20.517-08:00Fixed a bug in the decompilerHello!<br />
<br />
Last release of the decompiler could only detect switches in the following format.<br />
<br />
80 00 LSL R0, R0, #2<br />
<br />
02 49 LDR R1, =off_83C173C<br />
40 18 ADD R0, R0, R1<br />
00 68 LDR R0, [R0]<br />
87 46 MOV PC, R0<br />
<br />
I successfully have it reading switches from r1, and will be advancing it to switches with any registers.<br />
<br />
I also have to look into getting default case switches to work.<br />
<br />
Expect a release soon!<br />
Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-20920013561330833352013-02-03T19:19:00.001-08:002013-02-03T19:19:11.000-08:00Thumb Decompiler pluginHello!<br />
<br />
Here's the first release of that decompiler I've been talking about. It's a huge help, thank you Ludde.<br />
<br />
<br />
Updates will come and I'll eventually get a googlecode for it.<br />
<br />
<br />
Little tutorial on setup<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/kNK48VfMVqg?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Hello! This is a quick tutorial on how to use the updated version of Luddes, thumdecompiler.<br />
<br />
Easy to use, with powerful results. That man is a genius. Anyway, it's helped me a lot and I hope it can help with malicious, or bad code or debug something that got compiled wrong<br />
<br />
https://dl.dropbox.com/u/12510094/NEVERDELETE/IDATHUMBDECOMPILER.zip Plug in link<br />
<br />
https://dl.dropbox.com/u/12510094/NEVERDELETE/thumb.zip Source code.<br />
Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-77869797677319532202013-02-03T13:15:00.000-08:002013-02-03T13:15:59.873-08:00So....There are a ton of event check functions.<br />
<br />
A lot are repeated, I believe the ones I labelled 2 are to check for the event to have occurred and ones without two are to check if the event is the current event or not<br />
<br />
Anyway,<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_AfterAuxEventSET: ; 0x801C0E8+2<br />
int EVENT_AfterAuxEventSET() {<br />
<br />
R1 = (EventCounter != 0x4B ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_AfterAuxEventSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_EngagedSaXSET: ; 0x801C0E8:loc_801C120<br />
int EVENT_EngagedSaXSET() {<br />
<br />
R1 = (EventCounter != 0x4C ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_EngagedSaXSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_IceBeamSET: ; 0x8010220+730<br />
; sub_8010220+7C2 ...<br />
int EVENT_IceBeamSET() {<br />
<br />
R1 = (EventCounter <=u 0x6A ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_IceBeamSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_FinalTripToHangerSET: ; 0x8054978+A<br />
; sub_8054A3C+2A ...<br />
int EVENT_FinalTripToHangerSET() {<br />
<br />
R1 = (EventCounter <=u 0x69 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_FinalTripToHangerSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_FinalSAXFightSET: ; 0x801A914+2<br />
int EVENT_FinalSAXFightSET() {<br />
<br />
R1 = (EventCounter != 0x65 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_FinalSAXFightSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_BoxQuakeSET: ; CODE XREF: Enemy9F_AI+1B0<br />
int EVENT_BoxQuakeSET() {<br />
<br />
R1 = (EventCounter != 0x5A ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_BoxQuakeSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_RestricttedLabBlockedSET: ; CODE XREF: Enemy9F_AI:loc_8030358<br />
int EVENT_RestricttedLabBlockedSET() {<br />
<br />
R1 = (EventCounter != 0x59 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_RestricttedLabBlockedSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_HasVariaSET: ; 0x80412F0+2C<br />
int EVENT_HasVariaSET() {<br />
<br />
R1 = (EventCounter <=u 0x33 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_HasVariaSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_IsPowerOutSET: ; 0x8056DF4+4A<br />
int EVENT_IsPowerOutSET() {<br />
<br />
R1 = EventCounter<br />
R0 = 1<br />
if (R1 == 0x46)<br />
return R0<br />
<br />
R0 = 0<br />
if (R1 <=u 0x46)<br />
return R0<br />
<br />
return 2<br />
}<br />
; End of function EVENT_IsPowerOutSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_HasWaveBeamSET: ; CODE XREF: Enemy9F_AI:loc_8030340<br />
int EVENT_HasWaveBeamSET() {<br />
<br />
R1 = (EventCounter != 0x5B ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_HasWaveBeamSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_ReachedDeadEndRestrictedSET: ; CODE XREF: Enemy9F_AI:loc_803034C<br />
; Enemy9F_AI+1DC ...<br />
int EVENT_ReachedDeadEndRestrictedSET() {<br />
<br />
R1 = (EventCounter != 0x5C ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_ReachedDeadEndRestrictedSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_AfterBombsSET: ; CODE XREF: Enemy9F_AI+184<br />
int EVENT_AfterBombsSET() {<br />
<br />
R1 = (EventCounter != 0x17 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_AfterBombsSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
sub_8060C78: ; CODE XREF: Enemy9F_AI:loc_8030334<br />
int sub_8060C78() {<br />
<br />
R1 = (EventCounter != 0x16 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function sub_8060C78<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_EscSaxBeforVariaSET: ; 0x804378C+E0<br />
int EVENT_EscSaxBeforVariaSET() {<br />
<br />
R1 = (EventCounter != 0x31 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_EscSaxBeforVariaSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_SAXEntersPostPBSET: ; 0x80193C4:loc_8019428<br />
; sub_8019520+4<br />
int EVENT_SAXEntersPostPBSET() {<br />
<br />
R1 = (EventCounter != 0x43 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_SAXEntersPostPBSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
sub_8060CC0: ; 0x80193C4+3C<br />
int sub_8060CC0() {<br />
<br />
R1 = (EventCounter != 0x42 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function sub_8060CC0<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_SAXEntersPreVariaSET: ; CODE XREF: PowerBombSaxInit+F<br />
; BeginSAXRoutine+2<br />
int EVENT_SAXEntersPreVariaSET() {<br />
<br />
R1 = (EventCounter != 0x30 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_SAXEntersPreVariaSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_GoGetVariaSET: ; CODE XREF: PowerBombSaxInit+8<br />
int EVENT_GoGetVariaSET() {<br />
<br />
R1 = (EventCounter != 0x2F ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_GoGetVariaSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_GotHighJumpSET: ; CODE XREF: SomeSaxRoutine+2<br />
int EVENT_GotHighJumpSET() {<br />
<br />
R1 = (EventCounter != 0x19 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_GotHighJumpSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_GotHighJump2SET: ; 0x80429B8+2<br />
; Enemy89_AI:loc_8042B7A<br />
int EVENT_GotHighJump2SET() {<br />
<br />
R1 = (EventCounter <=u 0x19 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_GotHighJump2SET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_TriggeredBOXSET: ; 0x8037E18+6E<br />
; sub_803808C+242 ...<br />
int EVENT_TriggeredBOXSET() {<br />
<br />
R1 = (EventCounter <=u 0x27 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_TriggeredBOXSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_TriggeredBOX2SET: ; CODE XREF: Enemy20_AI:loc_803061A<br />
; sub_8035C58+4<br />
int EVENT_TriggeredBOX2SET() {<br />
<br />
R1 = (EventCounter != 0x27 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_TriggeredBOX2SET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_HaveSuperMissilesSET: ; CODE XREF: Enemy9F_AI+14C<br />
; Enemy20_AI:loc_803059E<br />
int EVENT_HaveSuperMissilesSET() {<br />
<br />
R1 = (EventCounter != 0x26 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_HaveSuperMissilesSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_IsInSuperMissileRoomSET: ; CODE XREF: Enemy9F_AI:loc_8030328<br />
int EVENT_IsInSuperMissileRoomSET() {<br />
<br />
R1 = (EventCounter != 0x25 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_IsInSuperMissileRoomSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_EnteredPumpControlSET: ; 0x8030E14:loc_8030E96<br />
int EVENT_EnteredPumpControlSET() {<br />
<br />
R1 = (EventCounter <=u 0x1F ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_EnteredPumpControlSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_OnToQuarantineBaySET: ; 0x801CA1C+A<br />
int EVENT_OnToQuarantineBaySET() {<br />
<br />
R1 = (EventCounter != 1 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_OnToQuarantineBaySET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_GenericSet: ; 0x801F2C0+36<br />
int EVENT_GenericSet() {<br />
<br />
R2 = 0<br />
R1 = EventCounter<br />
if ((R1 - 0x3B & 0xFF) <=u 1 || (R1 - 0x46 & 0xFF) <=u 3 || R1 >u 0x66)<br />
R2 = 1<br />
<br />
return R2<br />
}<br />
; End of function EVENT_GenericSet<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_Generic2Set: ; 0x802A11C+5C<br />
int EVENT_Generic2Set() {<br />
<br />
R2 = 0<br />
R1 = EventCounter<br />
if ((R1 - 0x46 & 0xFF) <=u 3 || R1 >u 0x66)<br />
R2 = 1<br />
<br />
return R2<br />
}<br />
; End of function EVENT_Generic2Set<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_Generic3Set: ; 0x802BEC4+42<br />
int EVENT_Generic3Set() {<br />
<br />
R1 = ((EventCounter - 0x46 & 0xFF) >u 3 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_Generic3Set<br />
<br />
.align 4<br />
.long EventCounter<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_EnteredPumpControl2SET: ; 0x8039248:loc_80392AE<br />
int EVENT_EnteredPumpControl2SET() {<br />
<br />
R1 = (EventCounter != 0x1F ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_EnteredPumpControl2SET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_WideBeamGETorMeltdownSET: ; 0x8039248:loc_80392B4<br />
; sub_8039680+A ...<br />
int EVENT_WideBeamGETorMeltdownSET() {<br />
<br />
R1 = 0<br />
R0 = EventCounter<br />
if (R0 == 0x3B) {<br />
R1 = 1<br />
return R1<br />
}<br />
<br />
if (R0 == 0x3C)<br />
R1 = 2<br />
<br />
return R1<br />
}<br />
; End of function EVENT_WideBeamGETorMeltdownSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_TharBeWildLifeSET: ; 0x8039248:loc_80392E6<br />
int EVENT_TharBeWildLifeSET() {<br />
<br />
R1 = (EventCounter != 0x3E ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_TharBeWildLifeSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_TharBeWildLife2SET: ; 0x8030868+BE<br />
; sub_80309A0:loc_80309B2 ...<br />
int EVENT_TharBeWildLife2SET() {<br />
<br />
R1 = (EventCounter <=u 0x3E ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_TharBeWildLife2SET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_HasSpaceJump: ; 0x8039248:loc_80392DC<br />
int EVENT_HasSpaceJump() {<br />
<br />
R1 = (EventCounter != 0x49 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_HasSpaceJump<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_SAXSaviorEscapesSET: ; 0x80399B0+64<br />
int EVENT_SAXSaviorEscapesSET() {<br />
<br />
R1 = (EventCounter != 0x66 ? 0 : 1)<br />
return R1<br />
}<br />
; End of function EVENT_SAXSaviorEscapesSET<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_SAXSaviorEscapes2SET: ; 0x80399B0:loc_8039A40<br />
int EVENT_SAXSaviorEscapes2SET() {<br />
<br />
R1 = (EventCounter <=u 0x66 ? 0 : 1)<br />
return R1<br />
}<br />
;EVENT_SAXSaviorEscapes2SET<br />
<br />
<br />
;<br />
<br />
<br />
GetWhichTimer: ; 0x802A310+2<br />
; sub_804F614+2 ...<br />
int GetWhichTimer() {<br />
<br />
R2 = 0<br />
R0 = EventCounter - 0x3B<br />
if (R0 >u 0x31)<br />
return R2<br />
<br />
if (R0 == 0 || R0 == 1) {<br />
R2 = 1<br />
return R2<br />
}<br />
<br />
if (R0 == 2 || R0 == 3 || R0 == 4 || R0 == 5 || R0 == 6 || R0 == 7 || R0 == 8 || R0 == 9 || R0 == 0xA || R0 == 0xB || R0 == 0xC || R0 == 0xD || R0 == 0xE || R0 == 0xF || R0 == 0x10 || R0 == 0x11 || R0 == 0x12 || R0 == 0x13 || R0 == 0x14 || R0 == 0x15 || R0 == 0x16 || R0 == 0x17 || R0 == 0x18 || R0 == 0x19 || R0 == 0x1A || R0 == 0x1B || R0 == 0x1C || R0 == 0x1D || R0 == 0x1E || R0<br />
return R2<br />
<br />
if (R0 == 0x22) {<br />
R2 = 2<br />
return R2<br />
}<br />
<br />
if (R0 == 0x23 || R0 == 0x24 || R0 == 0x25 || R0 == 0x26 || R0 == 0x27 || R0 == 0x28 || R0 == 0x29 || R0 == 0x2A || R0 == 0x2B)<br />
return R2<br />
<br />
if (R0 != 0x2C && R0 != 0x2D && R0 != 0x2E && R0 != 0x2F && R0 == 0x30) {<br />
}<br />
<br />
R2 = 3<br />
return R2<br />
}<br />
;GetWhichTimer<br />
<br />
<br />
;<br />
<br />
<br />
<br />
EVENT_CheckMajorEventsSET: ; 0x80746CC+64 p<br />
int EVENT_CheckMajorEventsSET() {<br />
<br />
R1 = 0<br />
R0 = EventCounter<br />
if (R0 == 0x3D || R0 == 0x5E || R0 == 0x6D)<br />
R1 = 1<br />
<br />
return R1<br />
}<br />
;EVENT_CheckMajorEventsSET<br />
Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-5939025919009296852013-02-03T00:54:00.000-08:002013-02-03T00:54:43.001-08:00ASM post coming soon!Sunday or Monday, the next tutorial will be up!<br />
<br />
We will again be hacking Metroid Fusion.<br />
Our goal this time, will be to completely fill up our energy whenever we pass through a door.<br />
<br />
I will be issuing homework I hope some will try it!<br />
<br />
We will be learning how to track down our target addresses.<br />
Learn how to Hi-Jack addresses<br />
And how to return :D<br />
<br />
I'm not the best, but it works well and that's how I'm teaching!Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-58299790166619716502013-01-29T11:58:00.001-08:002013-01-29T11:58:55.816-08:00Romhacking misconceptionsToday I'd like to talk about a few common misconceptions when hacking.<br />
<br />
"I can't hex"<br />
<br />
Look bro, I don't care who you are "hex" is not an action. It's a type of counting system<br />
01-0F, and so on.<br />
<br />
Just forget the term hex if it bothers you that much. Just refer to it as data however.<br />
<br />
If you see 0x<br />
<br />
Such as 0x0BADC0DE the 0x indicates we're using the hexadecimal system.<br />
<br />
Now when you pull up a ROM in a hex editor, you'll see this<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi70jKcLuEOSbyDW0DBkAGs8j53veX6jWwyP_datp9nJgT5IK7bwKa-p7xsdneO1CjlmjaGXZtKZR7e0rlo72nL6wArV1Wld56ntPA-VBJS7QquZMNLSCCJiv-mqdDnwqvHZX57KoOUPcyN/s1600/woo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi70jKcLuEOSbyDW0DBkAGs8j53veX6jWwyP_datp9nJgT5IK7bwKa-p7xsdneO1CjlmjaGXZtKZR7e0rlo72nL6wArV1Wld56ntPA-VBJS7QquZMNLSCCJiv-mqdDnwqvHZX57KoOUPcyN/s320/woo.png" width="320" /></a></div>
<br />
<br />
This image shows many things, but you're probably confused.<br />
<br />
<br />
This is called a GBA header. It's of course stored in a binary data format. But since we know it's a GBA game header, we can just find the header structure on google and apply the info.<br />
<br />
Here's the structure<br />
<br />
<br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> 0x000h 4 ROM Entry Point (32bit ARM branch opcode, eg. "B rom_start")
</span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">004h 156 Nintendo Logo (compressed bitmap, required!)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0A0h 12 Game Title (uppercase ascii, max 12 characters)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0ACh 4 Game Code (uppercase ascii, 4 characters)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0B0h 2 Maker Code (uppercase ascii, 2 characters)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0B2h 1 Fixed value (must be 96h, required!)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0B3h 1 Main unit code (00h for current GBA models)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> 0</span><span style="background-color: white; font-family: monospace; white-space: pre;">x0</span><span style="background-color: white; font-family: monospace; white-space: pre;">B4h 1 Device type (usually 00h)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0B5h 7 Reserved Area (should be zero filled)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0BCh 1 Software version (usually 00h)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0BDh 1 Complement check (header checksum, required!)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"> </span><span style="background-color: white; font-family: monospace; white-space: pre;">0x</span><span style="background-color: white; font-family: monospace; white-space: pre;">0BEh 2 Reserved Area (should be zero filled)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;">
</span>
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">So according to this, the first 4 bytes are an assembly instruction on where to start the game.</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;">Then is a compressed image(Yes, that's stored in our hexadecimal data format)</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">Then so on.</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">Data is nothing to be scared of. The editors you use, the game itself relies on </span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;">the data. </span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">Let's move on to pointers.</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">They're scary for a lot of newbies. I didn't quite get them when I first started,but now I rely on them.</span><br />
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span>
<span style="background-color: white; font-family: monospace; white-space: pre;">It's super simple</span><br />
<span style="font-family: monospace;"><span style="white-space: pre;">For GBA </span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">it's just address+0x8000000 and it's stored backwards in the rom</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">So the pointer 0x08123456 would be stored in rom at 56 34 12 08</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">Codes uses the pointer to get the address of the data. </span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;">Just add 0x8000000 for ROM pointers. Simple no?</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">Assembly is just a way of seeing the data as somewhat readable</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">nop instead of 0x46c0.</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">It's not hard and just needs to be learned.</span></span><br />
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span>
<span style="font-family: monospace;"><span style="white-space: pre;">If you have any questions, leave a comment. I'll get back to you.</span></span><br />
<div>
<span style="background-color: white; font-family: monospace; white-space: pre;"><br /></span></div>
<br />
<br />
<br />
<br />
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-24030244456243131742013-01-27T14:41:00.000-08:002013-01-29T12:01:16.747-08:00Thumb Decompiler updateHey guys!<br />
<br />
So the progress of the Thumb Decompiler plugin is going great. I'll be releasing the update for it soon. Source included of course as per the original thumb decompiler.<br />
<br />
Here's a screenie!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzz95Svl1ZF9axnXyBjpTqrDK0qMTpSot_gzNYLLQSGwuBdg9EeYM7oX2zitDHsF5kIOGKDWXQ17OK1eprip3PzoQOpj9vBpm1yGC2VKsLsek29a9LgA_RSdd9ask1bRFrXgKhyX5_Eykz/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzz95Svl1ZF9axnXyBjpTqrDK0qMTpSot_gzNYLLQSGwuBdg9EeYM7oX2zitDHsF5kIOGKDWXQ17OK1eprip3PzoQOpj9vBpm1yGC2VKsLsek29a9LgA_RSdd9ask1bRFrXgKhyX5_Eykz/s320/Untitled.png" width="320" /></a></div>
I need to get the decompiled code to redirect to a new tab, get stack variables going. And some other stuff. But hopefully soon!Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-24187597820659240922013-01-25T19:05:00.001-08:002013-01-25T19:05:46.938-08:00Your first GBA ASM hack!Greetings! Today I will teach you how to find what you need to find using a debugger, then how to change it. Then what else you can do!<br />
<br />
You will need no$gba debugger, or a sufficient GBA emulator with a good debugger. Grab a Metroid Fusion ROM(Rip your own preferably) and get a hex editor. I heard HxD is good.<br />
<br />
We are going to find out how to get rid of Samus freezing her butt off in NOC with no Varia suit.<br />
So, grab your emulator, load Fusion and head to ARC.<br />
<br />
We'll need to know the current health samus has, load up Datacrystal.org and go to Fusion then RAM Map. This gives us the address of 3001310. Head to the room before it gets icy.<br />
<br />
In no$gba(Or whatever debugger you have) set a breakpoint for when Samus's health gets a write(That means when something changes it) hit ctrl+b on your keyboard!<br />
Now enter [3001310]!!(Or the equivalent in your debugger)<br />
Continue playing until the emulator stops.<br />
<br />
Woo! It hit.<br />
<br />
You'll see something like<br />
<br />
What do these lines mean?<br />
<br />
<br />
080063CE LDRH R0, [R2]<br />
080063D0 SUBS R0, #1 <br />
080063D2 STRH R0, [R2]<br />
080063D4 LDRH R0, [R2] <---You'll break here<br />
<br />
You'll basically encounter 3 variable types when hacking<br />
<br />
<br />
Byte, Short, Long<br />
1 Byte for a byte, 2 bytes for a short and 4 bytes for a long<br />
Byte can hold 0-255<br />
Short can hold 0-65535(0xFFFF)<br />
And Long can hold 0-4294967295(0xFFFFFFFF)<br />
Wow that's a lot!<br />
<br />
<br />
<br />
So what does the following mean?!<br />
<br />
080063CE LDRH R0, [R2]<br />
080063D0 SUBS R0, #1 <br />
080063D2 STRH R0, [R2]<br />
080063D4 LDRH R0, [R2] <br />
<br />
<br />
<br />
<br />
LDRH means LoadRegisterHalfword<br />
<br />
or Load a short<br />
<br />
What it does is it reads 2 bytes from whatever address is in the Register R2 and puts them into 0<br />
<br />
<br />
STRH is the same, except it stores.<br />
<br />
<br />
And of course SUBS R0, #1 is subtract 1 from R0<br />
<br />
In this tutorial we'll do 3 different things.<br />
<br />
Delete the breakpoint, and write down the offset 080063D0 which has the SUBs instruction.<br />
<br />
<br />
Make a save state and let's do some hacking<br />
<br />
<br />
In your debugger, go to<br />
080063D0<br />
<br />
type nop in, and it will appear in the debugger.<br />
Now go to the frozen zone and bamf! No more damage.<br />
<br />
Reload the rom and open your savestate, go to that address again. Type in ADD R0, 3<br />
<br />
<br />
Then watch Samus gain health quickly.<br />
<br />
<br />
<br />
<br />
Now, let's change it back to nop look at the two bytes to the right of the subs r0, #1 instruction.<br />
3801<br />
<br />
Now if you go to the data viewer(At least in no$gba) and go to that address it'll look like<br />
<br />
01 38<br />
<br />
AND THAT IS A'OKAY.<br />
<br />
Now change the instruction to nop then those two bytes next to nop will be 46C0, and again if you look in the dataviewer it will be c0 46!<br />
<br />
<br />
Now, that's cool but these results aren't saved to our ROM<br />
<br />
Open up the ROM in your hex editor!<br />
<br />
Let's have a quick lesson about GBA Addressing.<br />
<br />
It's super simple.<br />
<br />
The address 0x080063D0 we're playing with, in your hexeditor will be at 0x63D0<br />
Just subtract 0x8000000 to convert(Or add in case of pointers)<br />
So now go to 0x63D0 type c0 46 at the offset, save then test! No more damage in ARC! :)<br />
<br />
Video included.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/aIX2sATMUA8?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
<br />
<br />
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com1tag:blogger.com,1999:blog-1535727289836561286.post-28261682420706966092013-01-25T10:00:00.003-08:002013-01-25T10:00:23.605-08:00IDA Pro is bestSeveral weeks ago I found a plugin called Thumb decompiler, it does as it says. However it's around 6 or 7 years old and hasn't been updated. I grabbed the source and began modifying it, so far I only managed to fix one bug. But the plugins code is genius, it's made by a person named Ludde. Genius, simply genius. I'm adding to the plugin currently working on getting the decompiled code to it's own subview. I just figured out how to create subviews so it should be a piece of cake from there here's a picture!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq30IGHr2ztIEI236Qfkm6CqUqmzzbi9RrBobUd3DDvnYNRmzl5R4MhLMgDWE8BsGQCsXEvE31GUBsDYhGdGHSCu7yEdPzaqp_ICj1F8UnRS5Ymogg_ljgONH58bmfJgT9K2vjeCRfNZFB/s1600/Untitled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq30IGHr2ztIEI236Qfkm6CqUqmzzbi9RrBobUd3DDvnYNRmzl5R4MhLMgDWE8BsGQCsXEvE31GUBsDYhGdGHSCu7yEdPzaqp_ICj1F8UnRS5Ymogg_ljgONH58bmfJgT9K2vjeCRfNZFB/s320/Untitled.png" width="320" /></a></div>
I will release the plugin on this blog once I have substantial work put into it such as getting stack vars going and such.Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-68309792823608843382013-01-25T08:13:00.000-08:002013-01-25T08:13:01.343-08:00Messing around with SA-XJust a couple videos of me messing with SA-X<br />
<br />
Just a funny few<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/X-altINxEKI?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/8I33HE2S3N4?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/K28AGDQqVTc?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/lPmt94z32QQ?feature=player_embedded' frameborder='0'></iframe></div>
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-43312968409769095642013-01-23T20:52:00.002-08:002013-01-23T20:52:50.449-08:00And we're driving<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/-vFMEUyoSPc?feature=player_embedded' frameborder='0'></iframe></div>
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-48600338004126341192013-01-23T11:17:00.002-08:002013-01-23T11:17:54.219-08:00Various ROMHacks Hey guys,<br />
<br />
Just wanted to show some of my old hacks I've done :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/5PJ4UEwVoC0?feature=player_embedded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/ot_5n9AIZW0/0.jpg"><param name="movie" value="http://www.youtube.com/v/ot_5n9AIZW0?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://www.youtube.com/v/ot_5n9AIZW0?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/cmoflnPNLVE?feature=player_embedded' frameborder='0'></iframe></div>
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-49988162901513098562013-01-17T20:36:00.000-08:002013-01-17T20:36:10.019-08:00Metroid Fusions debug menu and Zero Missions forced lack ofGreetings!<br />
<br />
I have a vast love for the Metroid series. It was the one I played with my parents when I was a toddler and such. I sadly only own Zero Mission and Fusion.<br />
<br />
<br />
A friend of mine had told of me debug event text in Metroid Fusion, I have started a hack of Fusion to expand on it and I wanted this info for my ROM map. So he gives it to me, then I find what looks like a DrawText function near it and knew I was on to something. Faster forward 15 hours later, we had a full working Metroid Fusion debug menu. That NO ONE knew about outside of Nintendo for 11 years!<br />
<br />
It's extremely powerful. I love Nintendo so hard.<br />
<br />
So here is a video of it!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/dg8gSOJIYLo?feature=player_embedded' frameborder='0'></iframe></div>
<br />
And so I also delved in the ZM rom for a bit.<br />
<br />
While I didn't find anything new, I did look at Trunaur86s old menu hack for the on/off button.<br />
<br />
When looking at the code, I discovered they intentionally removed access to it.<br />
<br />
There's a register 'R6' which hold basically the onffswitch val. And the sets it to 0 and does checks to make sure it's 0, where as if it's non-zero you get the onoffswitch!<br />
<br />
<br />Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-74391710803307283712013-01-06T10:29:00.002-08:002013-01-06T10:29:41.207-08:00New projectsGreetings,<br />
<br />
I'm currently undertaking many projects and so I'll be posting here with how I'm doing them. Or tutorials to get others started.<br />
<br />
So, that's it for this one. I'll probably begin another one todayBirdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-47046954551035302352011-12-03T17:10:00.001-08:002011-12-03T17:10:31.230-08:00My adventures with AndroidSo, I've been helping to get Boost Mobile Android phones rooted for the past 6 months. I just started making ROMs for it. I will attempt to use this blog to show my findings and my attempts on learning Java.Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-92062564312326716462011-11-03T08:03:00.000-07:002011-11-03T08:03:54.181-07:00Thursday woesFirst day of no work, already feels weird. Don't like it. About to sign up for unemployment and work on my car so we can trade it into get one of the good cars fixed. Hopefully I can find something online to help me make money for the next few months so I feel like I'm working. Maybe start making apps...<br />
<br />
Here we go! Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-21620229942793717492011-11-01T06:06:00.000-07:002011-11-01T06:06:52.481-07:00Happy TuesdayHello everyone, <br />
This past week I formatted my computer, which was an odd experience as I haven't formatted in about two years, and everything is extremely clean now, I even did some house cleaning! I got my computer setup to app dev.Currently writing a wrapper so everything is how I want it. Just need to get some ideas.... If anyone didn't know I play Yu-Gi-Oh! In my free time, hoping to start making money from it. Should be a fun investment. Gonna try playing pro as well. Tommorow is my last day here....Unemployment will be very very weird. Gotta get a new car and probably a new job. <br />
<br />
Till next week everyone.Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-49892877532345369912011-10-27T08:10:00.000-07:002011-10-27T08:10:01.235-07:00Don't even know....<div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"><span style="font-family: "Times New Roman","serif"; font-size: 12pt; mso-fareast-font-family: "Times New Roman";">Haven't posted in months or so. Tried to do a video log. Guess I can keep that going once in a while. But I'd like to try blogging again and not forgetting to do it one day and saying I'll do it the next and that never comes...Oh, well. </span></div><div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"><span style="font-family: "Times New Roman","serif"; font-size: 12pt; mso-fareast-font-family: "Times New Roman";">My time here at EA is up, as of next Wednesday I will not be employed here. I'm thinking of taking a few weeks off then applying for Grants to go back to school finally. But I'm also hoping to get some magic job. I may just get some computer certs and go to Best Buy, if I can get a good reliable Vehicle. <span style="mso-spacerun: yes;"> </span><o:p></o:p></span></div><div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"><span style="font-family: "Times New Roman","serif"; font-size: 12pt; mso-fareast-font-family: "Times New Roman";">Been helping the Android community rooting new Boost Phones. Let’s see how long I can keep doing this<o:p></o:p></span></div><div class="MsoNormal" style="margin: 0in 0in 10pt;"><br />
</div>Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-49368953249056476762011-04-17T08:08:00.000-07:002011-04-17T08:08:02.678-07:00BahhhhhhHey, everyone it's been over a month since I last posted, so sorry. Just wanted to apologize and brainstorm for topicsBirdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0tag:blogger.com,1999:blog-1535727289836561286.post-40570554981308926002011-03-07T11:44:00.001-08:002011-03-07T11:44:54.704-08:00Been a while since I posted.<br />
<br />
I've been sick twice. The girls I liked at work have people so I'm kinda eh on that. Starting P90X today. Got a Ps2 and a DS Lite. Pretty sweet. Gonna start blogging hardcore again real soon. <br />
<script type="text/javascript">
var geo_Partner = '48f7f93f-8d51-4554-bc12-d0fe4a013bcd'; var geo_isCG = true;
</script><script src="http://js.geoads.com/geoLink.js" type="text/javascript">
</script>Birdmanhttp://www.blogger.com/profile/03700528558387729506noreply@blogger.com0