From f42a0b0b7e4c4d2e16baaeda21c6968d31489ca5 Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Sun, 26 Mar 2023 20:20:32 +0200 Subject: [PATCH] Argument maybe found in Init_Config ? not sure. Init_Config(1) still. --- Etape_2.uvoptx | 88 +++++++++++++++++++++++++------------------------- Principale.asm | 4 ++- README.md | 24 +++++++++++++- 3 files changed, 70 insertions(+), 46 deletions(-) diff --git a/Etape_2.uvoptx b/Etape_2.uvoptx index 23ccb49..a30a4b3 100644 --- a/Etape_2.uvoptx +++ b/Etape_2.uvoptx @@ -125,7 +125,7 @@ 0 DLGDARM - (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1208,526,1629,953,1)(121=566,392,987,819,1)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=463,144,884,571,1)(121=476,571,897,998,1)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=18,101,612,852,0)(131=255,99,849,850,0)(132=49,93,643,844,0)(133=-1105,32,-511,783,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) 0 @@ -142,103 +142,103 @@ 0 0 - 92 + 89 1 -
0
+
134222334
0 0 0 0 0 - 0 - .\FonctionEtape.asm + 1 + .\Principale.asm - + \\Simu_Etape0\Principale.asm\89
1 0 - 91 + 59 1 -
0
+
134222326
0 0 0 0 0 - 0 - .\FonctionEtape.asm + 1 + .\Principale.asm - + \\Simu_Etape0\Principale.asm\59
2 0 - 92 + 56 1 -
0
+
134222316
0 0 0 0 0 - 0 + 1 .\Principale.asm - + \\Simu_Etape0\Principale.asm\56
3 0 - 91 + 118 1 -
0
+
134222508
0 0 0 0 0 - 0 - .\Principale.asm + 1 + .\FonctionEtape2.asm - + \\Simu_Etape0\FonctionEtape2.asm\118
4 0 80 1 -
0
+
134222362
0 0 0 0 0 - 0 - .\Principale.asm + 1 + .\FonctionEtape.asm - + \\Simu_Etape0\FonctionEtape.asm\80
5 0 - 57 + 150 1 -
0
+
134222588
0 0 0 0 0 - 0 - .\Principale.asm + 1 + .\FonctionEtape2.asm - + \\Simu_Etape0\FonctionEtape2.asm\150
6 0 - 56 + 91 1
0
0 @@ -247,14 +247,14 @@ 0 0 0 - .\Principale.asm + .\FonctionEtape.asm
7 0 - 80 + 92 1
0
0 @@ -270,7 +270,7 @@ 8 0 - 87 + 82 1
0
0 @@ -286,7 +286,7 @@ 9 0 - 117 + 93 1
0
0 @@ -295,14 +295,14 @@ 0 0 0 - .\FonctionEtape2.asm + .\Principale.asm
10 0 - 118 + 94 1
0
0 @@ -311,7 +311,7 @@ 0 0 0 - .\FonctionEtape2.asm + .\Principale.asm
@@ -320,7 +320,7 @@ 1 0 - 0x20000000 + 0x40021000 0 @@ -342,7 +342,7 @@ 0 1 - 0 + 1 0 0 0 @@ -350,13 +350,13 @@ 1 0 0 - 0 + 1 0 0 0 0 0 - 0 + 1 0 0 0 @@ -382,12 +382,12 @@ 0 (portA & 0x20 & 0x20) >> 0 - FF000000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000E03F0800000000000000000000000000000000000000E4120008 + FF000000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000E03F0A00000000000000000000000000000000000000E4120008 1 (portA & 0x80 & 0x80) >> 0 - 00800000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078383000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000E03F080000000000000000000000000000000000000062120008 + 00800000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078383000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000E03F0A0000000000000000000000000000000000000062120008 @@ -657,7 +657,7 @@ ::Device - 0 + 1 0 0 1 diff --git a/Principale.asm b/Principale.asm index 3d3ed53..3e5a1d3 100644 --- a/Principale.asm +++ b/Principale.asm @@ -53,7 +53,9 @@ main PROC ;******************************************************************************* - + LDR R4, [pc,#-2124] ;*********************************************** + MOV R5, #1 ;RetroEngineering : 0x40021000 << 18 -> Argument ? + STR R5,[R4,#0x18] ;*********************************************** BL Init_Cible; ;******************************************************************************* ; ETAPE 2 diff --git a/README.md b/README.md index 31765bd..64fcdd7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,29 @@ Chaque fonction prendra des arguments de R0 à R3 (avec R3 étant une référenc ## Main -Le main pour l'instant ne fait qu'appeler DriverGlobal. +La première chose pour l'étape 2 est de mettre l'argument de Init_Cible à 1. Malheuresement cette partie étant précompilé, il n'est pas possible de modifier directement les variables qu'il lit dans la pile. En effet en lisant les premières lignes nous pouvons appercevoir quelques lectures de variables : +```assembly +Init_Cible PROC + PUSH {R4-R6} + MOV R4,R0 + LDR R0,[pc,#212] ; @0x080009A4 + LDR R0,[R0,#0x18] ; On lit dans 0x40021000 la variable en 0x18 + ORR R0,R0,#0x0C ; On force la valeur 0x0C dans R0 +ENDP +``` + +Visiblement, d'après la librairie STM32 0x40021000 correspond au RCC, plus précisement au APB2ENR *(décalé de 24 octets.)* : + +```c + RCC_TypeDef * rccPointer = RCC ; //0x40021000 + volatile uint32_t * apb2enrValue = &(RCC->APB2ENR); //0x40021018 +``` + +En réalité j'ai par la suite changé ce paramètre en 1. Avec la valeur forcée en 0x0C, cela va donner 0x0D soit 1101. D'après la datasheet cela devrait activer la clock sur le GPIOA et B. le 0x01 lui va activer le AFIO qui est étrange ? L'argument de la fonction ne serait donc pas cette variable, qui est juste globale. Mais je ne vois pas d'autre solution pour le moment.. En effet bien que R4 et R6 sont égaux à 0 dès le lancement de cette fonction, elles sont directement modifiée pour lire des variables stockées dans le tas. + +(Par la suite le Timer2,3,4 sont allumés (APB1ENR |= 0x07)) + +On appelle ensuite le DriverGlobal ## Variables globales