![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Rin, нет, так нельзя!
![]() это Вы путаете - логический адрес вашего указателя и ФИЗИЧЕСКИЙ адрес. пост #7 перечитайте... p.s. я почему по танцы с бубном сразу сказал - Windows'ские программы ограничены в своих возможностях - их просто так не пускают не к физическим портам ввода/вывода, ни к физической памяти. (и, кстати, правильно делают). Получить туда доступ можно, имхо, но либо написав свой драйвер, либо воспользовавшись компонентами (которые это как-то делают, либо через свой драйвер, либо через внедрение в ring0 - не знаю!) А ещё лучше - отказаться от этой идеи (лезть за версией биоса в сам биос) и воспользоваться информацией из реестра! Последний раз редактировалось Serge_Bliznykov; 05.05.2012 в 14:57. |
![]() |
![]() |
![]() |
#12 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
![]()
Я ж почему спросил про absolute $F000:0 . Помню, мне очень давно попался исходник с этим absolute. И вот я долго думал, что ж мне сделать, чтобы эта дребедень заработала. Так и не придумал, и забыл про неё. А вот опять увидел этот скверную ссылку на адрес. Как ссылаться на адрес, не используя ЭНТОТ absolute?
Если помог, проси поставить минус. Будь оригинален!
|
![]() |
![]() |
![]() |
#13 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
В многозадачных ОС доступ к физическим адресам затруднен. Поэтому я и предложил воспользоваться реестром. Еще один вариант - запустить дочерний процесс в RM или DPMI и результат его работы использовать у себя в программе. Вдогонку: absolute $F000:0 это исключительно в RM. вообще же "absolute" служит для того, чтобы у одной и той же переменной создать несколько псевдонимов (возможно, разного типа). К абсолютным (физическим) адресам она никакого отношения не имеет. Последний раз редактировалось s-andriano; 05.05.2012 в 21:12. |
|
![]() |
![]() |
![]() |
#14 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
![]()
Вот интересно, а что по идее должно было записаться в buf, если buf : array[0..2] of byte absolute $F000:0; ? Почему именно array[0..2] of byte ?
А что более интересно, так это то, что мы выходим за размеры массива, выполняя цикл Код:
Если помог, проси поставить минус. Будь оригинален!
|
![]() |
![]() |
![]() |
#15 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Честно говоря, никогда не интересовался кодами команд 8086, но подозреваю, что первые 3 байта - это команда перехода на начало кода.
А то, что выходим за пределы массива, (разумеется, при выключенной опции проверки) так это не страшно: массив (в отличие от обычного описанного массива) имеет фиксированный адрес в памяти и не заканчивается, в отличие от массива описанного в переменных. Так что цикл мы могли смело продолжать до 65535. Непонятно только, как мы собираемся записывать в микросхему ПЗУ. (физически там, правда, ОЗУ, но оно все равно защищено от записи) В приведенном в посте №4 исходнике я не разбирался, но что-то мне кажется, что там читается CMOS, а не BIOS. Посмотрел код внимательнее. Вероятно, программа изначально читала как CMOS, так и BIOS, причем CMOS неправильно. Поэтому чтение CMOS из нее выкинули, но не все - остались ненужные процедуры на ассемблере и ненужный цикл, который ни на что не влияет. А в файле оказывается образ BIOS, правда, без последнего байта. Но это не сложно подправить. Думаю, в БорландПаскале должно работать следующее (у меня проверить не на чем) Код:
Последний раз редактировалось s-andriano; 05.05.2012 в 23:51. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как узнать версию сервера? | Vit@L | БД в Delphi | 2 | 04.11.2011 16:54 |
как узнать дату создания файла | green-shrek | Помощь студентам | 5 | 25.02.2010 17:33 |
Как получить дату BIOS (Windows 7) | RIO | Общие вопросы Delphi | 1 | 05.02.2010 23:42 |
Как узнать версию библиотеки в Devcpp? | Lavisa | Общие вопросы C/C++ | 2 | 30.07.2009 16:44 |
Как узнать версию браузера | FlooPy | PHP | 3 | 24.11.2007 23:25 |