@@ -89,47 +89,48 @@ uint32_t SlotsExamMode::getSlotBEndExamAddress(int ExamVersion) {
89
89
}
90
90
91
91
uint8_t SlotsExamMode::FetchSlotExamMode (const char * version, const char * Slot) {
92
- // get start and end from version and slot
93
- uint32_t start = 0 ;
94
- uint32_t end = 0 ;
95
- if (Slot == " A" ) {
96
- // if version under 16 get Old
97
- if (version[0 ] < ' 1' || (version[0 ] == ' 1' && version[1 ] < ' 6' )) {
98
- start = getSlotAStartExamAddress (0 );
92
+ // get start and end from version and slot
93
+ uint32_t start = 0 ;
94
+ uint32_t end = 0 ;
95
+ if (Slot == " A" ) {
96
+ // if version under 16 get Old
97
+ if (version[0 ] < ' 1' || (version[0 ] == ' 1' && version[1 ] < ' 6' )) {
98
+ start = getSlotAStartExamAddress (0 );
99
99
end = getSlotAEndExamAddress (0 );
100
- }
101
- // else get new
102
- else {
103
- start = getSlotAStartExamAddress (1 );
104
- end = getSlotAEndExamAddress (1 );
105
- }
106
- }
107
- else if (Slot == " B" ) {
108
- // if version under 16 get Old
109
- if (version[0 ] < ' 1' || (version[0 ] == ' 1' && version[1 ] < ' 6' )) {
100
+ }
101
+ // else get new
102
+ else {
103
+ start = getSlotAStartExamAddress (1 );
104
+ end = getSlotAEndExamAddress (1 );
105
+ }
106
+ }
107
+ else if (Slot == " B" ) {
108
+ // if version under 16 get Old
109
+ if (version[0 ] < ' 1' || (version[0 ] == ' 1' && version[1 ] < ' 6' )) {
110
110
start = getSlotBStartExamAddress (0 );
111
111
end = getSlotBEndExamAddress (0 );
112
- }
113
- // else get new
114
- else {
115
- start = getSlotBStartExamAddress (1 );
116
- end = getSlotBEndExamAddress (1 );
117
- }
118
- }
119
-
120
- if (strcmp (" 15.9.0" , version) >= 0 ) {
121
- return examFetch15 (start, end);
122
- } else if (strcmp (" 16.9.0" , version) > 0 ) {
123
- return examFetch16 (start, end);
124
- }
125
- else if (strcmp (" 19.0.0" , version) > 0 ) {
126
- return examFetch1718 (start, end);
127
112
}
113
+ // else get new
128
114
else {
129
- return examFetch19 (start, end);
115
+ start = getSlotBStartExamAddress (1 );
116
+ end = getSlotBEndExamAddress (1 );
130
117
}
131
118
}
132
119
120
+ if (strcmp (" 15.9.0" , version) >= 0 ) {
121
+ return examFetch15 (start, end);
122
+ }
123
+ else if (strcmp (" 16.9.0" , version) > 0 ) {
124
+ return examFetch16 (start, end);
125
+ }
126
+ else if (strcmp (" 19.0.0" , version) > 0 ) {
127
+ return examFetch1718 (start, end);
128
+ }
129
+ else {
130
+ return examFetch19 (start, end);
131
+ }
132
+ }
133
+
133
134
uint8_t SlotsExamMode::examFetch15 (uint32_t start, uint32_t end) {
134
135
uint32_t * persitence_start_32 = (uint32_t *)start;
135
136
uint32_t * persitence_end_32 = (uint32_t *)end;
@@ -186,11 +187,18 @@ uint8_t SlotsExamMode::examFetch19(uint32_t start, uint32_t end) {
186
187
uint16_t * start16 = (uint16_t *)start;
187
188
uint16_t * end16 = (uint16_t *)end;
188
189
189
- while (start16 + 1 <= end16 && *start16 != 0xFFFF ) {
190
- start16++;
191
- }
192
-
193
- return *(start16 - 1 ) >> 8 ;
190
+ for (uint16_t * i = end16 - 2 ; i > start16; i--) {
191
+ if (*i != 0xFFFF ) {
192
+ uint8_t highByte = *i >> 8 ;
193
+ uint8_t lowByte = *i & 0xFF ;
194
+ if (highByte > lowByte) {
195
+ return highByte;
196
+ }
197
+ else {
198
+ return lowByte;
199
+ }
200
+ }
201
+ }
194
202
}
195
203
196
204
0 commit comments