RP ✔️ VLT Firmwares, in DE 22Kmh⚡ mit Vanilla Firmware und vieles mehr

Neue VLT Exclusiv Mod!
No K.E.R.S 2.0



KERS Stufe leicht = KERS off

Mi Pro 2

DRV236
Von mir getestet, funktioniert.


DRV247
Aktuell noch ungetestet aber gleiche Programmabfolge

Mi 1s
DRV304
Aktuell noch ungetestet aber gleiche Programmabfolge


DRV319
Aktuell noch ungetestet aber gleiche Programmabfolge

Beschreibung:
Deaktiviert KERS wenn die leichte Stufe ausgewählt wurde.
Ermöglicht im Leerlauf das sanfte Ausrollen.
Energierückgewinnung greift nur noch, wenn die elektrische Bremse (Rechts) betätigt wird.

Viel besser als die alte No KERS Mod!
  • Ermöglicht es KERS zur Laufzeit via App zu deaktivieren.
  • Weniger buggy weil die vanilla Programmabfolge zu 100% eingehalten wird.
    -Kein fehlerhaftes Beschleunigungsverhalten
    -Kein ungewolltes Speedlimit überschreiten bei Rad in der Luft
Empfohlene App zum einstellen der KERS Stufe = HomeMi App von nandtek



Info:
Hab die KERS Funktion komplett untersucht.
Es ist nun möglich alle 3 KERS Stufen individuell anzupassen.
Mehr Infos dazu wenn gewünscht später.
Muss jetzt erstmal das tolle Wetter gießen.
Hab schon wieder 3 Std. vor dem Disassambler gesessen um das zu entwickeln.
Die Zeit verrennt einfach wenn man Spaß hat.😁

PS:
Fals es irgendwie untergangen sein sollte, ->Hier<- ist die letzte VLT Mod.
Wär toll wenn das noch jemand für die DRV304 testen könnte.(y)
Dann nehme ich die auch in den ersten Post auf.




Cool das du dich da reingefuchst hast und alles so funktioniert wie du es wolltest.(y)

bleibt die eingestellte KERS Stufe erhalten, auch wenn man nicht verbunden ist mit der HomeMi app ?
vermutlich schon oder, der Tempomat bleibt ja auch erhalten.
 
Branch / Funktion Call Guide
Assembler <-> Hexcode

⚠️Dieser Guide setzt das Wissen der roten Pille vorraus! (Startpost)

Hier mal eine kleine Erklärung, wie man den richtigen Hexcode bekommt, wenn man einen Assembler Branch, oder Funktionscall verschieben,
oder überhaupt an einem bestimmten Offset einfügen möchte.

Erklärung:
Zeigen tue ich es euch an Hand von dem Beep() Funktionscall in der Relight Mod. (DRV236)
Der Aufruf zu der Beep() Funktion ist in dem ersten Bild an Offset 0x00000752.
bl_Guide_01.png
Der Hexcode an dem Offset ist "00 f0 b9 f9".
In Assemblercode ist das "bl 0xac8".
Das " " steht für Branch with Link. (Branch = Verzweigung)
Das "0xac8" ist der Link zu der Funktion die aufgerufen werden soll.
In dem Falle der DRV236 beginnt an Offset 0xac8 die Beep() Funktion.

Wenn wir nun den Aufruf zu der Beep() Funktion an einem andren Offset haben möchten,
müssen wir den Hexcode verändern.
In dem zweiten Bild, habe ich einfach zur Veranschaulichung,
direkt unter dem ersten Aufruf der Beep() Funktion,
noch einen weiteren Aufruf zu der Beep() Funktion an Offset 0x00000756 eingefügt.
bl_Guide_02.png
Wie man sehen kann, hat sich der Hexcode des zweiten Aufruf der Beep() Funktion zu "00 f0 b7 f9" verändert.
Der Assemblercode dazu ist aber gleich geblieben! ("bl 0xac8")
Das ist ein kleines aber sehr wichtiges Detail, wenn der Aufruf an einer anderen Stelle stattfinden soll.

Den richtigen Hexcode berechnen:
Um den richtigen Hexcode zu bekommen, nutzen wir unsere beliebte .
Dort MUSS bei einem Funktionsaufruf, und/oder Branch, zwingend unten links bei "Offset",
das Offset eingegeben werden, an dem unserer Armcode in der Firmware steht.
ARM2HEX.png

Zusätzliche Erklärung:
Es gibt noch weitere Branch Armcodes. Alle beginnen meistens mit einem "b".
In beiden Bildern kann man z.b. den "bls" Befehl an Offset 0x00000746 sehen.
"bls" steht für "branch if ls (leu)". Einfach gesagt, branch nur, wenn der vorherige cmp Befehl nicht zutreffend ist.
Aber das ist erstmal unwichtig. Wichtig ist nur, dass ihr wisst, es gibt noch andere Branch Befehle,
die ebenfalls diese spezielle Handhabung benötigen.
Wenn ihr euch nicht sicher seit, ob der jeweilige Befehl ein "Branch Befehl" ist, googelt ihn einfach.;)


PS:
Habe via PN eine Anfrage dazu bekommen, und wollte die Erklärung für alle bereitstellen.
Deswegen dieser Post. Werde das wahrscheinlich in den ersten Post mit übernehmen.

LG
VooDooShamane
 
Zuletzt bearbeitet:
Hallo.
Ich habe mir mit dem online patcher eine Firmware erstellt und diese geflasht. Dann habe ich mit SHU meine Region auf Global gestellt.
Jetzt bleibt mein pro 2, auch nach dem Ausschalten, auf 27kmh, bis ich LTGM durch umschalten in den Fußgänger Modus ausschalte. Dann fahre ich wieder 22kmh. Jetzt kann ich LTGM mit der App wieder aktivieren und das LTGM bleibt an und übersteht auch das ausschalten.
MfG Sledneck
 
Dann habe ich mit SHU meine Region auf Global gestellt.
Das ist das Problem.
Du hast nun eine EU Seriennummer.
Die Firmware verhält sich dementsprechend richtig.
Du musst in SHU wieder auf DE SerienNr. umstellen.

bleibt die eingestellte KERS Stufe erhalten, auch wenn man nicht verbunden ist mit der HomeMi app ?
vermutlich schon oder, der Tempomat bleibt ja auch erhalten.
Ja, ganz normal wie sonst auch.
Die KERS Stufe die man einstellt (egal welche App) bleibt so lange bis man sie wieder umstellt.
 
Zuletzt bearbeitet:
  • Hilfreich!
Reaktionen: mhdot und 4Ultra
Hallo,
ich habe auch mal eine blöde Frage. Ich möchte mir die Firmwar von Hand zusammen basteln, wie auf der ersten Seite beschrieben. Wenn ich jetzt LTGM aktivieren möchte muss ich ja unteranderem folgendes eintragen:
Code:
[04] Offset 0x00001568
90 F8 43 00 ändern zu 90 F8 3A 01

plus dann noch den Rest. Jetzt möchte ich aber auch den Tempomat freischalten. Da muss ich ja folgendes eintragen:
Code:
[01] Offset 0x00001566
17 48 90 F8 43 00 58 B9 ändern zu 00 BF 00 BF 00 BF 00 BF

Aber dann überschreibe ich doch den vierten Teil des LTGM Mods. Habe ich da einen Denkfehler, oder schließt sich da eine mit dem anderen aus?
 
Aber dann überschreibe ich doch den vierten Teil des LTGM Mods. Habe ich da einen Denkfehler, oder schließt sich da eine mit dem anderen aus?
Finde ich cool das du es per Hand machst.(y)
Und deine Frage zeigt auch, das du durch das per Hand editieren, die Hintergründe verstehst die dort passieren.

Nun zu deiner Frage:
Der Vanilla Hexcode den wir mit dem "DE Tempomat unlock Mod" überschreiben ist dieser:

Vanilla Hexcode
Code:
17 48 90 F8 43 00 58 B9
Wenn du den durch den Armconverter jagst, siehst du den Assemblercode dazu.

Vanilla Assemblercode
Code:
[01] ldr r0, [pc, #0x5c]
[02] ldrb.w r0, [r0, #0x43]
[03] cbnz r0, #0x20

Zeile [01]
Lädt den Basepointer in den RAM und speichert ihn in das CPU Register r0.
Ist quasi wie ein Offset das aber in den RAM zeigt.
Man könnte es auch als "Wegbeschreibung" für den CPU bezeichnen.

Zeile [02]
Nutzt den Basepointer (r0) und setzt noch weitere 0x43 Bytes auf den Zeiger.
(Quasi wie eine Umleitung des Basepointers)
Dann wird das was am Ziel steht, (Basepointer + Umleitung) in das CPU Register r0 geladen.
Das was dort steht, ist übrigens das GM Flag. Also es kann entweder 1 oder 0 sein.
Wobei 1 bedeutet, es wurde während des Booten eine DE Seriennummer gefunden, und 0 eben nicht.

Zeile [03]
cbnz ist ein Branch Befehl. (Compare and Branch on Non-Zero)
Hier wird in dem Code an eine andere Stelle gesprungen, wenn r0 (zuvor ausgelesen) nicht 0 ist.
Also wenn wir eine DE Seriennummer haben, und dort 1 steht, springt er an eine andere Stelle im Code.

Das wollen wir aber nicht!
Wir wollen ja, das er sich (was den Tempomat angeht) genauso verhält wie in nicht DE Region.
Also muss der Sprung verhindert werden.
Das tun wir mit dem Hexcode:
Code:
00 BF
In Assemblercode bedeutet das "nop" (No Operation)
Immer wenn der CPU das bekommt, weiß er, das hier nix zu tun ist, und er einfach weiter machen kann.

LTGM lagert die Speicherung des GM Flags (Zeile [02]) an eine andere Stelle.
(Basepointer/Wegbeschreibung + Umleitung wird durch LTGM verändert)
Das machen wir, damit wir das GM Flag direkt per App (Bluetooth) beeinflussen können.

Soo
Jetzt weißt du bescheid.
Das bedeutet, an dieser Stelle muss das GM Flag nicht ausgelesen werden, wenn du den Tempomat in DE Region nutzen möchtest.
Also können wir es "nop'en" und das laden des Basepointers und Branch befehl gleich mit.
Weil es keinen Grund mehr gibt, das der CPU die anderen Befehle ausführt, wenn er ja nicht Branchen soll.:giggle:

Aus diesem Grund, habe ich die LTGM Offsets recht weit oben in dem ersten Post angesiedelt.
Weil man am besten LTGM zuerst macht, und danach die stellen wo das GM Flag nicht genutzt werden soll,
nop'en kann.

Übrigens, LTGM hat insgesamt 12 + 1 optionales Offset.
Manchmal wird das im ersten Post nicht richtig angezeigt, weil die Forensoftware rumbuggt.
Wenn das der Fall sein sollte, einfach paar mal den Spoiler zu und auf klappen.
Dann erscheint irgendwann die Option zum aufklappen der Offsets.
Muss ich mal noch einen Workaround für basteln.

LG
VooDooShamane
 
Zuletzt bearbeitet:
Finde ich cool das du es per Hand machst.(y)
Und deine Frage zeigt auch, das du durch das per Hand editieren, die Hintergründe verstehst die dort passieren.

Nun zu deiner Frage:
Der Vanilla Hexcode den wir mit dem "DE Tempomat unlock Mod" überschreiben ist dieser:

Vanilla Hexcode
Code:
17 48 90 F8 43 00 58 B9
Wenn du den durch den Armconverter jagst, siehst du den Assemblercode dazu.

Vanilla Assemblercode
Code:
[01] ldr r0, [pc, #0x5c]
[02] ldrb.w r0, [r0, #0x43]
[03] cbnz r0, #0x20

Zeile [01]
Lädt den Basepointer in den RAM und speichert ihn in das CPU Register r0.
Ist quasi wie ein Offset das aber in den RAM zeigt.
Man könnte es auch als "Wegbeschreibung" für den CPU benennen.

Zeile [02]
Nutzt den Basepointer (r0) und setzt noch weitere 0x43 Bytes auf den Zeiger.
(Quasi wie eine Umleitung des Basepointers)
Dann wird das was am Ziel steht, (Basepointer + Umleitung) in das CPU Register r0 geladen.
Das was dort steht, ist übrigens das GM Flag. Also es kann entweder 1 oder 0 sein.
Wobei 1 bedeutet, es wurde während des Booten eine DE Seriennummer gefunden, und 0 eben nicht.

Zeile [03]
cbnz ist ein Branch Befehl. (Compare and Branch on Non-Zero)
Hier wird in dem Code an eine andere Stelle gesprungen, wenn r0 (zuvor ausgelesen) nicht 0 ist.
Also wenn wir eine DE Seriennummer haben, und dort 1 steht, springt er an eine andere Stelle im Code.

Das wollen wir aber nicht!
Wir wollen ja, das er sich (was den Tempomat angeht) genauso verhält wie in nicht DE Region.
Also muss der Sprung verhindert werden.
Das tun wir mit dem Hexcode:
Code:
00 BF
In Assemblercode bedeutet das "nop" (No Operation)
Immer wenn der CPU das bekommt, weiß er, das hier nix zu tun ist, und er einfach weiter machen kann.

LTGM lagert die Speicherung des GM Flags (Zeile [02]) an eine andere Stelle.
Das machen wir, damit wir das GM Flag direkt per App (Bluetooth) beeinflussen können.

Soo
Jetzt weißt du bescheid.
Das bedeutet, an dieser Stelle muss das GM Flag nicht ausgelesen werden, wenn du den Tempomat in DE Region nutzen möchtest.
Also können wir es "nop'en" und das laden des Basepointers und Branch befehl gleich mit.
Weil es keinen Grund mehr gibt, das der CPU die anderen Befehle ausführt, wenn er ja nicht Branchen soll.:giggle:

Aus diesem Grund, habe ich die LTGM Offsets recht weit oben in dem ersten Post angesiedelt.
Weil man am besten LTGM zuerst macht, und danach die stellen wo das GM Flag nicht genutzt werden soll,
nop'en kann.

Übrigens, LTGM hat insgesamt 12 + 1 optionales Offset.
Manchmal wird das im ersten Post nicht richtig angezeigt, weil die Forensoftware rumbuggt.
Wenn das der Fall sein sollte, einfach paar mal den Spoiler zu und auf klappen.
Dann erscheint irgendwann die Option zum aufklappen der Offsets.
Muss ich mal noch einen Workaround für basteln.

LG
VooDooShamane
🤦Verstehe nur Bahnhof. Bin wohl zu alt 😂😂😂. Hex edit einfügen usw. OK. Beneide euch. Super Job den ihr macht. Weiter so 👍🏼👍🏼👍🏼👍🏼👍🏼👍🏼👍🏼
 
Hallo, ich hab einen Xiaomi s1 Roller und hab BLE 1.5.7 drauf.. gibt es da schon Möglichkeiten den zu Flashen das er schneller ist als 20km/h?
Danke schonmal für antworten und Hilfen!
 
Finde ich cool das du es per Hand machst.(y)
Und deine Frage zeigt auch, das du durch das per Hand editieren, die Hintergründe verstehst die dort passieren.

Nun zu deiner Frage:
Der Vanilla Hexcode den wir mit dem "DE Tempomat unlock Mod" überschreiben ist dieser:

Vanilla Hexcode
Code:
17 48 90 F8 43 00 58 B9
Wenn du den durch den Armconverter jagst, siehst du den Assemblercode dazu.

Vanilla Assemblercode
Code:
[01] ldr r0, [pc, #0x5c]
[02] ldrb.w r0, [r0, #0x43]
[03] cbnz r0, #0x20

Zeile [01]
Lädt den Basepointer in den RAM und speichert ihn in das CPU Register r0.
Ist quasi wie ein Offset das aber in den RAM zeigt.
Man könnte es auch als "Wegbeschreibung" für den CPU bezeichnen.

Zeile [02]
Nutzt den Basepointer (r0) und setzt noch weitere 0x43 Bytes auf den Zeiger.
(Quasi wie eine Umleitung des Basepointers)
Dann wird das was am Ziel steht, (Basepointer + Umleitung) in das CPU Register r0 geladen.
Das was dort steht, ist übrigens das GM Flag. Also es kann entweder 1 oder 0 sein.
Wobei 1 bedeutet, es wurde während des Booten eine DE Seriennummer gefunden, und 0 eben nicht.

Zeile [03]
cbnz ist ein Branch Befehl. (Compare and Branch on Non-Zero)
Hier wird in dem Code an eine andere Stelle gesprungen, wenn r0 (zuvor ausgelesen) nicht 0 ist.
Also wenn wir eine DE Seriennummer haben, und dort 1 steht, springt er an eine andere Stelle im Code.

Das wollen wir aber nicht!
Wir wollen ja, das er sich (was den Tempomat angeht) genauso verhält wie in nicht DE Region.
Also muss der Sprung verhindert werden.
Das tun wir mit dem Hexcode:
Code:
00 BF
In Assemblercode bedeutet das "nop" (No Operation)
Immer wenn der CPU das bekommt, weiß er, das hier nix zu tun ist, und er einfach weiter machen kann.

LTGM lagert die Speicherung des GM Flags (Zeile [02]) an eine andere Stelle.
Das machen wir, damit wir das GM Flag direkt per App (Bluetooth) beeinflussen können.

Soo
Jetzt weißt du bescheid.
Das bedeutet, an dieser Stelle muss das GM Flag nicht ausgelesen werden, wenn du den Tempomat in DE Region nutzen möchtest.
Also können wir es "nop'en" und das laden des Basepointers und Branch befehl gleich mit.
Weil es keinen Grund mehr gibt, das der CPU die anderen Befehle ausführt, wenn er ja nicht Branchen soll.:giggle:

Aus diesem Grund, habe ich die LTGM Offsets recht weit oben in dem ersten Post angesiedelt.
Weil man am besten LTGM zuerst macht, und danach die stellen wo das GM Flag nicht genutzt werden soll,
nop'en kann.

Übrigens, LTGM hat insgesamt 12 + 1 optionales Offset.
Manchmal wird das im ersten Post nicht richtig angezeigt, weil die Forensoftware rumbuggt.
Wenn das der Fall sein sollte, einfach paar mal den Spoiler zu und auf klappen.
Dann erscheint irgendwann die Option zum aufklappen der Offsets.
Muss ich mal noch einen Workaround für basteln.

LG
VooDooShamane
Alles klar. Danke für deine Ausführlich Antwort. Gut, dass du das mit den 12+1 Offsets geschrieben hast. Ich kann da auf und zu machen wie ich will, ich bekomme nur 4 angezeigt. Vielleicht solltest du das da nochmal deutlicher hervorheben. Da ich nur einen Teil deiner Ausfürhrungen verstehe, nochmal nachgehakt. Ich kann den 4ten Offset mit dem Tempomat überschreiben!? Dann noch zwei weitere Fragen. 1. Wie funktioniert das mit den Bat Dateien. Ich erstelle die Bat, und dann weiter? Habe ich was überlesen? Muss die Firmware Datei einen bestimmten Namen haben, oder was muss ich damit machen? 2. Da der Relight Mod ja noch nicht überarbeitet wurde, kann ich meine bearbeitete Firmware noch durch den online Patcher jagen, damit ich den auch nutzen kann?