Участник:Dim568/Silmarils IO DOS: различия между версиями
Перейти к навигации
Перейти к поиску
Dim568 (обсуждение | вклад) (→Base) |
Dim568 (обсуждение | вклад) |
||
Строка 43: | Строка 43: | ||
} | } | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | ==H2 равен 0== | ||
+ | Дочитываются дополнительные 16 байт заголовка | ||
+ | |||
+ | <syntaxhighlight lang="cpp"> | ||
+ | uint16_t VAL01 = ((H3/4)+1)*16; | ||
+ | VAL1 += 0; // Нужно проверить, при запуске равен нулю, но бывает ли иным? | ||
+ | uint16_t VAL02 = (H4*6)+VAL01; | ||
+ | uint16_t VAL03 = ES_REG_VAL; // Портит всю малину, нужно понять можно ли без значения регистра | ||
+ | VAL03 += (H7/16)+1 | ||
+ | uint16_t VAL04 = VAL03 + (((H9+3)*0x26)/16)+1; // Значение используется в алгоритме когда H2 равен 1, нужно проследить дальше | ||
+ | uint16_t VAL05 = ((H6&0x0F)<<12); | ||
+ | uint16_t VAL06 = H5/16; | ||
+ | VAL05 += VAL06; | ||
+ | uint16_t VAL07 = VAL04 + VAL05; | ||
</syntaxhighlight> | </syntaxhighlight> |
Версия 17:22, 9 сентября 2020
Header
Base
0 | 1 | 2 | 3 | 4 | 5 |
H0 | H1 | H2 |
Extend
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
H3 | H4 | H5 | H6 | H7 | ?? | H9 |
Logic
Base
/* blancpc.io обрабатывается отдельно от основной логики */
ReadBaseHeader();
int8_t control = (H1 >> 8) & 0xFE8; //старшие 7 бит
if( H2 != 0 ){
if( control < 0){
if( control == 0xA0 ){
/* базовый кейс, часть данных пишется в сегмент кода o_0 */
}else{
/* Нужно найти файлы подходящие под этот кейс */
}
}else{
/* кейс похож на несжатые данные, но под него попадают только monstre.io и telep.io в первой Ishar */
}
}else{
/* Кейс похож на хранение системной информации, явный пример main.io */
ReadExtendedPart();
if( control < 0){
if( control == 0xA0 ){
}else{
}
}else{
}
}
H2 равен 0
Дочитываются дополнительные 16 байт заголовка
uint16_t VAL01 = ((H3/4)+1)*16;
VAL1 += 0; // Нужно проверить, при запуске равен нулю, но бывает ли иным?
uint16_t VAL02 = (H4*6)+VAL01;
uint16_t VAL03 = ES_REG_VAL; // Портит всю малину, нужно понять можно ли без значения регистра
VAL03 += (H7/16)+1
uint16_t VAL04 = VAL03 + (((H9+3)*0x26)/16)+1; // Значение используется в алгоритме когда H2 равен 1, нужно проследить дальше
uint16_t VAL05 = ((H6&0x0F)<<12);
uint16_t VAL06 = H5/16;
VAL05 += VAL06;
uint16_t VAL07 = VAL04 + VAL05;