В разных биосах - по разному. Вот цитата из исходных текстов эмулятора EMU. void CCmos::checksum_cmos() { unsigned i; Bit16u sum; sum = 0; for (i = 0x10; i <= 0x2d; ++i) sum += s.reg[i];
s.reg[0x2e] = (sum >> 8) & 0xff; // checksum high
//#if BX_SUPPORT_ACORP // for (i = 0x40; i <= 0x7a; ++i) // sum += s.reg[i]; // // s.reg[0x7b] = (sum >> 8) & 0xff; // checksum high // s.reg[0x7c] = (sum & 0xff); // checksum low //#else
for (i = 0x40; i <= 0x79; ++i) sum += s.reg[i];
s.reg[0x7a] = (sum >> 8) & 0xff; // checksum high s.reg[0x7b] = (sum & 0xff); // checksum low
//#endif
// // For i815 Award BIOS // for (i = 0x40; i <= 0x7C; ++i) // sum += s.reg[i]; // // s.reg[0x7D] = (sum >> 8) & 0xff; // checksum high // s.reg[0x7E] = (sum & 0xff); // checksum low } Координаты второй КС можно попытаться определить методом сравнения дампов CMOS после выполнения атомарных изменений в SETUP.
В разных биосах - по разному.
Вот цитата из исходных текстов эмулятора EMU.
void CCmos::checksum_cmos()
{
unsigned i;
Bit16u sum;
sum = 0;
for (i = 0x10; i <= 0x2d; ++i)
sum += s.reg[i];
s.reg[0x2e] = (sum >> 8) & 0xff; // checksum high
s.reg[0x2f] = (sum & 0xff); // checksum low
sum = 0;
//#if BX_SUPPORT_ACORP
// for (i = 0x40; i <= 0x7a; ++i)
// sum += s.reg[i];
//
// s.reg[0x7b] = (sum >> 8) & 0xff; // checksum high
// s.reg[0x7c] = (sum & 0xff); // checksum low
//#else
for (i = 0x40; i <= 0x79; ++i)
sum += s.reg[i];
s.reg[0x7a] = (sum >> 8) & 0xff; // checksum high
s.reg[0x7b] = (sum & 0xff); // checksum low
//#endif
// // For i815 Award BIOS
// for (i = 0x40; i <= 0x7C; ++i)
// sum += s.reg[i];
//
// s.reg[0x7D] = (sum >> 8) & 0xff; // checksum high
// s.reg[0x7E] = (sum & 0xff); // checksum low
}
Координаты второй КС можно попытаться определить методом сравнения дампов CMOS после выполнения атомарных изменений в SETUP.