чтение байт в Билдере
Необходимо прочитать байт по какому-либо адресу (например FF00:0FFE ;), как это сделать на Си понятно - есть функция peek, а вот как для C++Builder? peek только для дос. Вообще задача - провести тест оборудования.
FF00:0FFE - это сектор и смещение. Во flat-модели памяти платформы Win32 это не используется. Есть просто линейный адрес и читать по нему очень просто
int *a = 0xfd34ef12; //указатель на двойное слово
int b = *a; //берем содержимое двойного слова
есть правда один ньюанс, связанный с виртуальной машиной Windows: по точно такому же адресу для каждого приложения будет лежать совершенно разная информация ;-) то есть он не определяет физический адрес в памяти, а только адрес в контексте данного приложения. Ко всей памяти программе так просто доступа не дается.
надеюсь это чем-нибудь поможет
FF00:0FFE - это сектор и смещение. Во flat-модели памяти платформы Win32 это не используется. Есть просто линейный адрес и читать по нему очень просто
int *a = 0xfd34ef12; //указатель на двойное слово
int b = *a; //берем содержимое двойного слова
есть правда один ньюанс, связанный с виртуальной машиной Windows: по точно такому же адресу для каждого приложения будет лежать совершенно разная информация ;-) то есть он не определяет физический адрес в памяти, а только адрес в контексте данного приложения. Ко всей памяти программе так просто доступа не дается.
надеюсь это чем-нибудь поможет
Для ВИНДОУСа ситуация немного иная, т.к. это память отведенная для ДОСа. ВИНДа ее будет использовать в своих корыстных целях, так, что по этому адресу будет действительно лежать ндругая информация.
Для данной реализации, ИМХО, необходимо написать приложение ДОС, а из под винды брать от него данные.
ИЛИ
Писать драйвер, который будет на короткое время переводить ВИНДу в реальный режим (как ВСЕМ известно ВИНДа работает в защищенном режиме :)))) ) там производить все манипуляции, а потом быстро обратно. Но у этого способа есть свои недостатки.
Для данной реализации, ИМХО, необходимо написать приложение ДОС, а из под винды брать от него данные.
ИЛИ
Писать драйвер, который будет на короткое время переводить ВИНДу в реальный режим (как ВСЕМ известно ВИНДа работает в защищенном режиме :)))) ) там производить все манипуляции, а потом быстро обратно. Но у этого способа есть свои недостатки.
хм...мягко сказано...переводить Масдай в реальный режим - это круто...
А как на счет контекста устройства и прочего?
Для данной реализации, ИМХО, необходимо написать приложение ДОС, а из под винды брать от него данные.
ИЛИ
Писать драйвер, который будет на короткое время переводить ВИНДу в реальный режим (как ВСЕМ известно ВИНДа работает в защищенном режиме :)))) ) там производить все манипуляции, а потом быстро обратно. Но у этого способа есть свои недостатки.
хм...мягко сказано...переводить Масдай в реальный режим - это круто...
А как на счет контекста устройства и прочего?
Все это конечно прекрасно int *a = 0xfd34ef12, только возникла как-то проблемка, линейка 256 Mb двух-стороняя 16-ти чиповая, один чип сбоит, вопрос какой, выкачали спецификацию на память, и вот тут был извините попстон, где какой банк (а их на линейке оказалось четыре) как их считать, как чередуются. И зависит ли это добро от установок Interlive на материи т.д. и т.п. Но хорошо допустим напишем прогу, вычислим, а дальше? Следующий производитель уже с 8-ю чипами будет и со своей спецификацией, а завтра память в 512 метров поступит, дальше что? Кроме того, исходя из той-же спецификации с помощью 0xfd34ef12, просто невозможно адресоваться к физике памяти (разрядности то маловато), адресоваться ты будешь к контроллеру, а вот что он тебе обратно швырнет, с чего взял, что это физический адрес. Откуда у HDD 16 головок, когда их с роду максимум четыре. Так что прискорбно но и с памятью та-же перда, все уже давно виртуальное даже на уровне железа. А если просто память протестировать, то для этого физика не нужна, да и что будешь тестировать, если за наносекунду проходит туча тактов обновления, с таким же успехом захватил максимально доступный кусок и хрюкай его сколько хочешь.
Прочитайте информацию про адресацию в защищенном режиме. В ЧАСТНОСТИ ТАМ ВОЗМОЖНА АДРЕСАЦИЯ ДО 16 Гбайт.
У винта, Вы забыли про LBA преобразование, для экономии памяти при передаче параметров.
Прочитайте информацию про адресацию в защищенном режиме. В ЧАСТНОСТИ ТАМ ВОЗМОЖНА АДРЕСАЦИЯ ДО 16 Гбайт.
У винта, Вы забыли про LBA преобразование, для экономии памяти при передаче параметров.
:-? Я ведь про физику а не про логику. Ну адресовался, а дальше? Феном че греть будем? И как отключить сбойную головку используя LBA:)
:-? Я ведь про физику а не про логику. Ну адресовался, а дальше? Феном че греть будем? И как отключить сбойную головку используя LBA:)
Так тебе, что контроллер памяти сделать надо?
Или хочешь дырки узнать?
Так тебе, что контроллер памяти сделать надо?
Или хочешь дырки узнать?
-------------------------------------------------
Да нет. Все проще. Болтается в столе линейка на 256, выдает конкретный адрес по XMS типа 1A03:001F (сейчас точно не помню). Полез на Samsung, Kingston и иже с ними. Нашел спецификацию (заставили зарегистрироваться и потом на мыло фуфло всякое гнали). Ну неважно, одним словом спецификацию нашел, а вычислить чип не смог (глюпый потому-что). А жалко, линейку (Kingstone 256, 16 чипов, двухсторонняя, для BXа - раритет) одни уроды неделю в кармане таскали, видимо перегнули, можно было попытаться прогреть чип, но какой? Совсем запутался я в адресации,физических, логических и прочих банках. Стало интересно, а как-же буржуины это делают? Ну когда нашел сайтик http://www.futureplus.com/faqs/faq1107.html
все стало понятно и я эту идею забросил. Если бы у меня бэдовская память потоком шла, еще можно было бы дальше разбираться, а так подумал, что не окупит себя этот гиморой.