|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.03.2013, 22:47 | #1 |
Пользователь
Регистрация: 04.01.2012
Сообщений: 31
|
DOS TurboPascal
Как осуществить установку пикселя с использованием библиотеки DOS TurboPascal? То есть закрасить пиксель.Графический режи 320 на 200.Вот так вот через DOS инициализируется
Код:
Код:
Последний раз редактировалось Stilet; 12.03.2013 в 22:45. |
11.03.2013, 22:49 | #2 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Модуль Graph. Процедура PutPixel
|
11.03.2013, 22:55 | #3 |
Пользователь
Регистрация: 04.01.2012
Сообщений: 31
|
Надо при помощи DOS, а не Graph
|
12.03.2013, 07:28 | #4 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Эм.. DOS - это операционная система, под который работает Turbo Pascal, а Graph - это графический модуль. (подробнее см. справка)
|
12.03.2013, 08:04 | #5 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Модуль Graph ничего не знает о режиме 320х200.
Теперь по теме: Среди прерываний DOS есть те, которые закрашивают пиксель. Соответственно, по справочнику прерываний DOS нужно их найти и соответствующим образом обратиться. Разумеется, после того, как будет установлен графический режим. Но это неэффективный (очень медленный) путь. В видеорежиме $13 видеопамять предсттавляет собой один сплошной массив, каждому байту которого соответствует пиксель. Т.е. точку можно закрасить (и это будет быстрее всего) просто записав нужный байт по нужному адресу. Примерно это будет выглядеть так: Код:
|
12.03.2013, 20:21 | #6 |
Пользователь
Регистрация: 04.01.2012
Сообщений: 31
|
s-andriano, через mem я делал уже. Почему-то возникает арифметическое переполнение. Хотя какое-там переполнение, значение не уходит за допустимые для переменной integer.Пробовал использовать переменную longint, такая же фигня.
Да и в итоге оказалось по-заданию мне надо сравнить во сколько раз быстрее будет работать прога, если сначала я нарисую фигуру, используя для установки пикселя ассемблеровскую вставку, а второй раз - через библиотеку DOS/ Да и тема задания про прерывания.Ассемблер я сделал, а с DOS возникли проблемы |
12.03.2013, 20:38 | #7 |
Пользователь
Регистрация: 04.01.2012
Сообщений: 31
|
s-andriano - большое спасибо за помощь! Нашёл справочник и сделал! Кому интересно
procedure PutPixel(x,y:integer;color:byte); var r:registers; begin SwapVectors; r.ah:=$0c; r.dx:=y; r.cx:=x; r.al:=color; intr($10,r); SwapVectors; end; |
12.03.2013, 21:48 | #8 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Если обратили внимание, я использовал word, а не integer. А что делает ассемблерная вставка? Если точно так же вызывает прерывание, то все равно будет заметно медленнее. И, кстати, альтернативный вариант - это через BIOS, а не через DOS. Так что к DOS все равно никакого отношения не имеет. И еще: не нужны здесь SwapVectors. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
turboPascal | masterlomaster | Помощь студентам | 1 | 26.04.2011 19:45 |
TurboPascal | masterlomaster | Помощь студентам | 0 | 26.04.2011 15:36 |
Аннаграммы (TurboPascal) | beemoto | Помощь студентам | 9 | 24.12.2009 21:31 |
TurboPascal - help! | Lexone | Помощь студентам | 5 | 29.03.2009 15:38 |