jon-t Skrevet 25. mars 2007 Del Skrevet 25. mars 2007 Hei sitter med eit liten ting her som eg ikkje får skikkelig til... Eg vil at programet skal kjøre denne komandoen heletiden programet er aktivt cn302_peek_byte(0x82CD, inquiry); while(inquiry[0] != 0x30){ cn302_peek_byte(0x82CD, inquiry); } Og kvar gong 0x80CD endrer seg frå 0x1C til 0x30 så vil eg at disse komandoene blir kjørt EIN gong. cn302_write_block(wii_memlocs,0x2,wiiunlockcmd); if(strcmp(argv[3],"Y")==0){ printf("[+] Patching Disk Speed !!\n"); cn302_write_block(wii_speed,0x2,speed_value); } else{ printf("[+] Leave Low Speed Disk (not patching)\n"); } printf("[+] Patching MediaFlag\n"); cn302_poke_byte(wii_mediaflag,0x28); cn302_poke_byte(wii_emuflag,0x04); cn302_peek_byte(0x408817, &disk_mediaflag[0]); cn302_peek_byte(0x408816, &disk_mediaflag[1]); cn302_peek_byte(0x408815, &disk_mediaflag[2]); cn302_write_block(wii_mediaflag + 2,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 6,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 12,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 16,0x2,disk_mediaflag); cn302_poke_byte(wii_mediaflag+4,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+8,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+14,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+18,disk_mediaflag[2]); cn302_peek_byte(wii_di, inquiry); while(inquiry[0] != 0xA8){ cn302_peek_byte(wii_di, inquiry); } cn302_poke_byte(wii_mediaflag,0x38); if(argc==5){ printf("[+] Patching For Region : %s\n\n",argv[4]); while(tst != 150){ cn302_poke_byte(0xF1D3CF, patch_region0); cn302_write_block(0xF1D3DC,0x2,patch_region1); cn302_write_block(0xF1D3E0,0x2,patch_region2); tst++; cn302_peek_byte(wii_di+6, inquiry); if(inquiry[0] > 0x00){ tst=150; } } } else{ printf("[+] Not patching for region, leave native region\n\n"); } Noen med peiling på c som kan hjelpe meg litt ? Lenke til kommentar
Giddion Skrevet 25. mars 2007 Del Skrevet 25. mars 2007 (endret) Heisitter med eit liten ting her som eg ikkje får skikkelig til... Eg vil at programet skal kjøre denne komandoen heletiden programet er aktivt cn302_peek_byte(0x82CD, inquiry); while(inquiry[0] != 0x30){ cn302_peek_byte(0x82CD, inquiry); } 8232965[/snapback] hva med en inf while loop while(1) { //kjøre kode her if (Programstopp) break; } Og kvar gong 0x80CD endrer seg frå 0x1C til 0x30så vil eg at disse komandoene blir kjørt EIN gong. ... Noen med peiling på c som kan hjelpe meg litt ? 8232965[/snapback] Det du må gjøre er en å lage en variabel som husker om 0x80CD hadde verdien 0x1C sist du skjekket slik at du kan detektere om verdien har vandret fra 0x1C til 0x30. Håper koden under vil hjelpe Jeg vet ikke hvordan du leser verdien fra 0x80CD så det må du selv legge inn bool LowValue; // hvis 0x80CD==0x1C skal den være sann while(1) if (LowValue == true) //0x80CD var 0x1C sist gang { if (0x80CD == 0x30)//er den fortsatt det? { KjørKommandoer(); //nei det var den ikke } if (0x80CD != 0x1C)//er den fortsatt det? { LowValue == false; // lagrer statusen til neste runde } } else { if (0x80CD == 0x1C)//har den vandret fra noe til 0x1C { LowValue == true; // lagrer statusen til neste runde } } } Håper det hjalp deg. Endret 25. mars 2007 av Giddion Lenke til kommentar
jon-t Skrevet 25. mars 2007 Forfatter Del Skrevet 25. mars 2007 (endret) Tusen takk for svar Noko slikt altså ? bool notdisk; bool done; while(1) { cn302_peek_byte(0x82CD, disk); printf("Look for disk"); if(disk[0] != 0x30){ notdisk == false; } else{ notdisk == true; { } while(1) if (nodisk == false) //Hvis disk { if (done == false)//Du har ikkje gjort det før vel ?? { cn302_write_block(wii_memlocs,0x2,wiiunlockcmd); if(strcmp(argv[3],"Y")==0){ printf("[+] Patching Disk Speed !!\n"); cn302_write_block(wii_speed,0x2,speed_value); } else{ printf("[+] Leave Low Speed Disk (not patching)\n"); } printf("[+] Patching MediaFlag\n"); cn302_poke_byte(wii_mediaflag,0x28); cn302_poke_byte(wii_emuflag,0x04); cn302_peek_byte(0x408817, &disk_mediaflag[0]); cn302_peek_byte(0x408816, &disk_mediaflag[1]); cn302_peek_byte(0x408815, &disk_mediaflag[2]); cn302_write_block(wii_mediaflag + 2,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 6,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 12,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 16,0x2,disk_mediaflag); cn302_poke_byte(wii_mediaflag+4,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+8,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+14,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+18,disk_mediaflag[2]); cn302_peek_byte(wii_di, inquiry); while(inquiry[0] != 0xA8){ cn302_peek_byte(wii_di, inquiry); } cn302_poke_byte(wii_mediaflag,0x38); done == true; //Nå har du gjort det } } else //Ikkje disk { done == false; // Start teller på nytt } } Edit: Må dei to variablene vere definert i int main funksjonen ? Sånn som dette: int main(int argc, char** argv, bool notdisk, bool done) Dei to første skal vere der, men skal bool notdisk og bool done vere der ? Endret 25. mars 2007 av jon-t Lenke til kommentar
ze5400 Skrevet 26. mars 2007 Del Skrevet 26. mars 2007 Kansje en ide å la programmet sove noen millisekunder eller mer i hver loop? Ellers vil jo CPU gå i taket, noe du vel ikke vil. Lenke til kommentar
Giddion Skrevet 26. mars 2007 Del Skrevet 26. mars 2007 Tusen takk for svar Noko slikt altså ? bool notdisk; bool done; while(1) { cn302_peek_byte(0x82CD, disk); printf("Look for disk"); if(disk[0] != 0x30){ notdisk == false; } else{ notdisk == true; { } while(1) if (nodisk == false) //Hvis disk { if (done == false)//Du har ikkje gjort det før vel ?? { cn302_write_block(wii_memlocs,0x2,wiiunlockcmd); if(strcmp(argv[3],"Y")==0){ printf("[+] Patching Disk Speed !!\n"); cn302_write_block(wii_speed,0x2,speed_value); } else{ printf("[+] Leave Low Speed Disk (not patching)\n"); } printf("[+] Patching MediaFlag\n"); cn302_poke_byte(wii_mediaflag,0x28); cn302_poke_byte(wii_emuflag,0x04); cn302_peek_byte(0x408817, &disk_mediaflag[0]); cn302_peek_byte(0x408816, &disk_mediaflag[1]); cn302_peek_byte(0x408815, &disk_mediaflag[2]); cn302_write_block(wii_mediaflag + 2,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 6,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 12,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 16,0x2,disk_mediaflag); cn302_poke_byte(wii_mediaflag+4,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+8,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+14,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+18,disk_mediaflag[2]); cn302_peek_byte(wii_di, inquiry); while(inquiry[0] != 0xA8){ cn302_peek_byte(wii_di, inquiry); } cn302_poke_byte(wii_mediaflag,0x38); done == true; //Nå har du gjort det } } else //Ikkje disk { done == false; // Start teller på nytt } } Edit: Må dei to variablene vere definert i int main funksjonen ? Sånn som dette: int main(int argc, char** argv, bool notdisk, bool done) Dei to første skal vere der, men skal bool notdisk og bool done vere der ? 8236963[/snapback] Vel du kan ikke definere andre variabler i main funksjonen, men du kan definere de som globale variabler som det virker som du har gjort (husk å definere som false eller true). Det som er minimum er at de defineres utenfor loopen. Du hopper heller aldri ut av while loopen og det vil gjøre at programmet ikke vil stoppe og den vil aldri komme ned til loop nr2. Tenk deg en situasjon der 0x82CD != 0x30 da vi kommandoene bli kjørt hele tiden (hvis du da hadde kommet det ut av loopen) Tror det er noe slik du vil ha, men programmet vil aldri stoppe og siden jeg ikke vet når det skal slutte så får du legge til selv. Klikk for å se/fjerne innholdet nedenfor char diskLastValue = 0; while(1) { cn302_peek_byte(0x82CD, disk); printf("Look for disk"); diskLastValue = disk; if(disk[0] == 0x30) { if(diskLastValue == 0x1C) Kommandoer(); } } void Kommandoer() { cn302_write_block(wii_memlocs,0x2,wiiunlockcmd); if(strcmp(argv[3],"Y")==0) { printf("[+] Patching Disk Speed !!\n"); cn302_write_block(wii_speed,0x2,speed_value); } else { printf("[+] Leave Low Speed Disk (not patching)\n"); } printf("[+] Patching MediaFlag\n"); cn302_poke_byte(wii_mediaflag,0x28); cn302_poke_byte(wii_emuflag,0x04); cn302_peek_byte(0x408817, &disk_mediaflag[0]); cn302_peek_byte(0x408816, &disk_mediaflag[1]); cn302_peek_byte(0x408815, &disk_mediaflag[2]); cn302_write_block(wii_mediaflag + 2,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 6,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 12,0x2,disk_mediaflag); cn302_write_block(wii_mediaflag + 16,0x2,disk_mediaflag); cn302_poke_byte(wii_mediaflag+4,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+8,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+14,disk_mediaflag[2]); cn302_poke_byte(wii_mediaflag+18,disk_mediaflag[2]); cn302_peek_byte(wii_di, inquiry); while(inquiry[0] != 0xA8) { cn302_peek_byte(wii_di, inquiry); } cn302_poke_byte(wii_mediaflag,0x38); } Lenke til kommentar
jon-t Skrevet 26. mars 2007 Forfatter Del Skrevet 26. mars 2007 @ze5400 Ja eg skal legge inn ein sleep på 1-3 sek, då programet ikkje trenger å vere kjappere enn det og den vil sansynnligvis kjøre cn302_peek_byte(0x82CD, disk); kommandoen veldig mange ganger unødig og dette programmet sender data over printerporten og eg vil ikkje ha for mykje trafikk der... Idielt sett vil programmet bruke så lite cpu kraft at det skal vere mulig å kjøres som ein tjeneste uten at du merker at han er der. Tusen takk for all hjelp Giddion! Skal teste kordan koden passer inn i programmet når eg kjem heim. Du skal få din plass i credits om alt går som det skal Programmet er ein omskrevet version av wabmodcheap for dei som kjenner til det... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå