memory
А расскажите мне, товарищи OS-deveлоперы, как вы определяете размер имеющейся физической памяти без BIOSа. И кто какие способы тестирования знает. Очень интересно, и реально очень надо.
Очень просто:
inline bool isRam( unsigned __int32* pPointer ) {
unsigned __int32 v ;
v = *pPointer ;
*pPointer = 0x55555555 ;
bool bRam = *pPointer == 0x55555555 ;
*pPointer = 0xAAAAAAAA ;
bRam &= *pPointer == 0xAAAAAAAA ;
*pPointer = v ;
return( bRam ) ;
}
unsigned __int32* check_mem( /*in,out*/ unsigned __int32** pStart ) {
unsigned __int32* pCurrent = *pStart ;
while( !isRam( pcurrent ) ) pCurrent += 1000 ; // one page 4096
*pStart = pCurrent ;
while( isRam( pCurrent ) ) pCurrent += 1000 ; // one page 4096
return( pCurrent ) ;
}
На вход подаем check_mem подаем стартовый адрес (0 для начала), по выходе возвращается указатель на первый байт последней страницы в блоке памяти, а в pStart записывается адрес первой страницы найденного блока. Блоков может быть несколько.
Сорри, прогу писал "по памяти" и может сразу и не пойти, также нет проверки на окончание поиска.
Удачи,
Валерий.