Участник:Dim568/Silmarils IO DOS: различия между версиями

Материал из Old-Games.RU Wiki
Перейти к навигации Перейти к поиску
Строка 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;