Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 061
от 30.11.2002, 13:20

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 107
Отправлено ответов: 279
Активность: 260.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

X-RayMan
Статус: Начальный
Общий рейтинг: 133.33
[Подробней >>]
Ace
Статус: Доверительный
Общий рейтинг: 157.69
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.19
[Подробней >>]
 
Sensey
Статус: Профессиональный
Общий рейтинг: 122.59
URL: Страничка рассылки по Паскалю
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.37
[Подробней >>]
Byter
Статус: Опытный
Общий рейтинг: 125.54
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 105. Здравствуйте! Как в Паскале осуществлять прямую запись в память по конкретному адресу? Например, мен... (ответов: 6)

Вопросов: 1, ответов: 6


 Вопрос № 105

Здравствуйте!
Как в Паскале осуществлять прямую запись в память по конкретному адресу?
Например, меня интересует запись в видеопамять в текстовом режиме...



Вопрос отправлен: 27.11.2002, 13:14
Отправитель: Сергей

[Следующий вопрос >>] [Список вопросов]

Отвечает X-RayMan

Доброго времени суток, Сергей!
Сделать это можно двумя способами:
- ассемблерые вставки
- функция ptr(seg: word, off: word): pointer
Опишу только Ptr. Будет интересно про Ассемблер - пиши на мыло.
Функция Ptr преобразует заданный сегментом и смещением адрес в неопределенный указатель. Поэтому в зависимости от значения, которое надо поместить в память необходимо пользоваться приведением типов. Например, мне надо закинуть в память значение типа word:
word(ptr(Seg, Off)^):=$F77F;
integer:
integer(ptr(Seg, Off)^):=$F77F;
real:
real(ptr(Seg, Off)^):=10.523;
Да, так как результат функции ptr - указатель, необходимо пользоваться оператором снятия ссылки "^".
А по-поводу записи в видеобуфер - смотри приложение.

Приложение:

Ответ отправлен: 27.11.2002, 22:02
Отправитель: X-RayMan


Отвечает Ace

Здравствуйте Сергей!
Mem[segment:offset]. Для записи в видеопамять в текстовом режиме используй сегмент $B800(mem[$b800:offset], где offset - смещение в видеопамяти.
Пример: Mem[$B800:0000]:=65;
Mem[$b800:0001]:=15;{в верхнем левом углу появится белая буква А на черном фоне}.
В начале задается ASCII код символа, затем его атрибуты (цвет).

Ответ отправлен: 27.11.2002, 22:01
Отправитель: Ace


Отвечает vitya

Добрый день, Сергей!
Предлагаю справку BP.
Borland Pascal implements three predefined arrays to directly access memory:
Mem, MemL, and MemW.
” Each component of Mem is a Byte
” Each component of MemW is a Word
” Each component of MemL is a Longint.
The Mem arrays use a special syntax for indexes: two expressions of the Integer-type Word, separated by a colon, specify the segment base and offset
of the memory location to access.
Для твоей задачи:
mem[$b800:$0000] = ord(65);
mem[$b800:$0001] = $7e;


Ответ отправлен: 27.11.2002, 13:26
Отправитель: vitya


Отвечает Sensey

Здравствуйте, Сергей!
Посмотри справку по absolute и mem - там все написано...


Ответ отправлен: 27.11.2002, 14:17
Отправитель: Sensey


Отвечает Ayl

Добрый день, Сергей!
Есть массив Mem, который отображается на ОП.
То есть пишешь:
Mem [$b800:0] := 1;
и получаешь рожицу в верхнем левом углу экрана.
Можно еще так написать:
Type
TVChar = Record
cCode : Byte;
attr : Byte;
end;
TScreen = array [0..2000] of TVChar;
Var
scr : TScreen absolute $b800:0;
И обращаться:
scr [0].cCode := 1;
с тем же результатом.

Ответ отправлен: 27.11.2002, 14:34
Отправитель: Ayl


Отвечает Byter

Добрый день, Сергей!
Встроенным ассемблером
Asm
{операторы ассемблера}
end;

Ответ отправлен: 29.11.2002, 17:08
Отправитель: Byter



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (41)
C / C++ (29)
Perl (9)
Delphi (16)
Pascal (23)
Basic / VBA (10)
Java / JavaScript (15)
PHP (10)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (22)
"Железо" (27)
Поиск информации (16)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (17)
Юристу
Гражданское право (9)
Семейное право (3)
Трудовое право (5)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное