Tutorial.Temp, в будущем будет продолжен... |
Tutorial.Temp, в будущем будет продолжен... |
Dark |
13.05.2003 0:25
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Се начнем повесть сию...
Итак, уважаемые, позвольте мне представить мой туториал №1. :D Он посвящен основам программирования графики на паскалевском ассемблере. Он предназначен для тех, кого достала тормознутость графики на пасе (а работать с графикой с его процедурами я бы не советовал - мееедленно...), кто хотел бы написать БЫСТРУЮ игру, да и для тех, кому вообще интересен асм. Внимание: Данные эксперименты не совсем совместимы с модулем Graph, поэтому крайне нежелательно его включать. Для использования примеров вам необходима карточка VGA, имеющая режим 320*200, TP версии 6.0 и выше, и желание разобраться. В сегодняшней, первой части, я расскажу о том, что из себя представляет режим 320*200 8 бит, как его врубить, и как с ним работать. Этот режим имеет номер 13 в шеснацатеричной системе счисления или 19 в десятичной. В дальнейшем 16-теричный вид будет отмечаться буквой h (Например 13h) а десятичный отмечатся не будет (19). Немного теории: Раз у нас 8-битный режим, то 1. На каждую ячейку(я.п.) памяти приходится по одной точке! Это просто чудесно! т.к. не рассматриваются случаи, когда в один байт картинки вмещается 2 точки (в 16ти цветных режимах), а то работа по разделению байта - просто геморой. 2.Мы можем работать с 2^8=256 цветами (в отличие от 16 в пасе)!!!!!!!!! 3. Базовый адрес памяти, начиная с которого изображение в графических режимах выводится на монитор, равен 0A000:0000h. следующие 64000(320*200) байта в данном режиме как раз и выводятся на экран. 5. Для возврата из графического режима я буду использовать текстовый режим № 3(80*25*16) Ну так вот, для того, чтобы менять режимы будем использовать функцию BIOS установки режима: ------------------------------------------------------------------------ Установка видеорежима(прерывание 10h): На входе: ah=0 ; Установить режим al = ; Номер режима ------------------------------------------------------------------------ В нашем случае:
Хорошо, вот мы и попали в режим 320*200*256 - возможно, скажете вы, - но Graph использовать не рекомендуют, так что же нам здесь делать? Ну... для начала давайте очистим экран
Итак, введя этот код вы получите процедуру закраски экрана. А теперь, давайте я пасскажу о ней поподробнее... Сегмент - это часть адреса, которая указывает от какой ячейки начинать отсчет смещения. Он имеет размер 64Кб (65536 байт). В языках программирования используют несколько переменных, которые содержат сегменты, это cs,ds,es,ss,gs,fs. В паскале реально используются лишь первые 4. cs - сегмент кода, обычно не трогается, ds - сегмент данных, здесь размещаются данные, после использования в паскале желательно восстанавливать. ss - сегмент стэка, в этом сегменте хранится то, что заносится в стек(в ручную или при вызове процедур). Стек - что-то типа временной памяти с последовательным доступом. es,fs,gs - дополнительные регистры, на 'всякий случай'. ;D Смещение - это вторая часть адреса, которая указывает на я.п. от начала сегмента. Принимает значения от 0 до 65535(по кол-ву байт в сегменте). Обычно, для адресации я.п. используют индексные регистры di и si, но можно использовать и любые другие. Сегмент и смещение занимают по 16 бит(2 байта) и преобразуются в 20-ти битный адрес. mov ax,0a000h Двумя этими командами мы помещаем в регистр es сегмент адреса видеопамяти(A000). Напрямую помещать адрес нельзя, т.е. запись типа mov es,0a000h является неверной!! По-моему это связано с отсутсвием кода команд в системе операций процессора. xor di,di Эта команда очищает регистр индекса di, для того, чтобы в es:di лежал полный адрес начала выводимой памяти... Индекс di используется для "скольжения" по сегменту, т.е. он адресует ячейку памяти с номером, указанную в нем. Внимание! Запись вида mov di,5 обозначает адресацию 5-ой ячейки, а запись вида mov [di],5 обозначает что в ячейку es:di будет помещено значение 5. Правда, в паскале это не так. В паскале для помещения значения 5 по адресу es:di оное значение помещается в регистр, допустим, аl и используется запись вида mov es:[di],al. mov al,[col] Здесь я помещаю в al номер цвета закраски фона. mov cx,64000 команда цикла rep повторяет следующую команду. количество повторов лежит в регистре CX. Ее можно заменить на команду цикла loop: @l1: Команда rep сначала проверяет регистр cx на равенство 0, а затем, если он не равен, убавляет его на 1, если равен, то цикл прекращается и программа идет дальше, в отличие от команды loop, которая сначала уменьшает cx на 1, а затем проверяет его на 0. Т.е. если вы поместите в cx 0, то команда rep не выполнится ни разу, а команда loop будет выполняться 65535 раз(по максимальному размеру cx) команда STOSB - es:[di]=al; di=di?1. Помещает содержимое al в я.п. по адресу es:di. В зависимости от df (флаг направления) уменьшает/увеличивает индекс di на 1. Если df = 0 то di увеличивается а если df=1, то di уменьшается. Поэтому я и указал в описании команды знак ?. Устанавливается df (df=1) командой std, а очищается - командой cld. Пример:
Happy codding!!!!!!!!!!!!! ;D З.Ы. Если вы хотите немного оптимизировать процедуру очистки экрана - то можете уменьшить значение счетчика в 2 раза и пересылать сразу по 2 байта: mov ah,al ;расширяю цвет... mov cx,32000 rep StosW команда StosW: es[di]=ax; di=di+2; З.Ы.Ы. Если вы хотите посмотреть, как будет выполнятся программа, можете ее прогнать пошагово, открыв окно Debug->Registers и нажимая F7. З.Ы.Ы.Ы. Просьба, если заметите неточности, или у вас есть предложения/просьбы/коментарии - высказывайте все либо на форуме http://forum.pascalnet.ru, либо лично мне по почте. Copyright by Dark. Моя почта: darkmaze@yandex.ru ;D -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
19.05.2003 0:08
Сообщение
#21
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Уже давно мучаю ;D... и второй готовлю... ;D ;D ;D
P.S. и третий... токмо не кому не говорите ;D -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
GLuk |
19.05.2003 15:44
Сообщение
#22
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
;D без комм.
|
Dark |
21.05.2003 1:20
Сообщение
#23
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Хоть чтото без них ;D ;D ;D ;)
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
31.05.2003 15:50
Сообщение
#24
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Извиняюсь за задержки, но у меня щас практика и сессия, поэтому временно отлучен от инета, обещаю в июне отправить исправленный и дополненый туториал ;D
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
31.05.2003 15:54
Сообщение
#25
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Он уже существует, но к сожалению не с собой...
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
GriKo |
8.06.2003 14:57
Сообщение
#26
|
Гость |
Теперь и я ещё читать буду, только июнь уже настал...
|
GLuk |
8.06.2003 17:33
Сообщение
#27
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
?? В плане долгожданный туториал from Dark ??
|
___ALex___ |
4.07.2003 23:44
Сообщение
#28
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
да давно здесь не был вот пришёл, а татуриала всё нет
забросили что ли это дело? чё ж мы критиковать-то будем ;D |
Alesha_GA |
6.07.2003 1:39
Сообщение
#29
|
Пионер Группа: Пользователи Сообщений: 56 Пол: Мужской Репутация: 0 |
Туториал от Dark'a скоро будет готов и размещён. Предположительно в ближайщий понедельник.
-------------------- Deleting...
All RESET [Return] |
GLuk |
6.07.2003 5:34
Сообщение
#30
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Хватит критики... дело же серьезное. Туториал писать - это не фигня какая-нибудь.
|
___ALex___ |
6.07.2003 16:34
Сообщение
#31
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
в том-то и дело что фигня
|
GLuk |
6.07.2003 21:13
Сообщение
#32
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Как жисть-то ___Alex___??
|
Noname |
6.07.2003 21:18
Сообщение
#33
|
Гость |
Цитата Как жисть-то ___Alex___?? так, ребята! не наглеть! если хотим поговорить - аська (или через личные сообщения).. если хотим заработать звание - в свободное общение, в крайнем случае. нечего тут флейм разводить! |
GLuk |
6.07.2003 21:28
Сообщение
#34
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
А если это принципиальное непонимание преимущества количества постов в данном форуме, то я складаю (с ош.; авт.) руки; мозги (хоть даже и чуть-чуть); и присутствие. В моем понимании - не от кол-ва постов зависит кол-во мозгов, или как?? ++ ко всему модера тут нет, так что если хочешь - ЗАКРЫВАЙ ТЕМУ - ведь ты же СТАРШИЙ МОДЕР!!=. А флейм - это общение через постпанковское непонимание своего личного альтерэго (это лично мнение почти что проф. психолога).
|
AlaRic |
7.07.2003 6:03
Сообщение
#35
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Туториал - очень хорошая идея! Жду с нетерпением!
|
___ALex___ |
7.07.2003 13:30
Сообщение
#36
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
я думаю надо или писать татуриал по обучению асма
и надо их обязательно разбивать на уроки, главы и тп чтоб была логическая связь ну как в книгах или "спрашивать народ" на какие темы он бы хотел видет тутариалы первое я думаю более важно для посетителей форума щаодно с паскалем они узнают и асм(хотя бы основы) |
___ALex___ |
7.07.2003 13:31
Сообщение
#37
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
а писать о том что захочется - например тема первого татуриала
то тот кто знает ОСНОВЫ асма - сам с этим вопросом разберётся с лёгкостью |
GLuk |
7.07.2003 14:25
Сообщение
#38
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Теперь нужно только кому-то написать туториал... ;)
|
AlaRic |
7.07.2003 14:31
Сообщение
#39
|
... Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: 3 |
Dark же пишет ???
|
GLuk |
7.07.2003 15:56
Сообщение
#40
|
Профи Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: 0 |
Правильно... вот уже месяц, СКОРО будет готово. Да и самого его чой-то не видно...
|
Текстовая версия | 31.05.2024 14:23 |