Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с видеопамятью, изменение высоты символов 
:(
    Опции темы
Shurik
Дата 15.3.2004, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.2.2004

Репутация: нет
Всего: нет



Каким образом можно в графическом режиме указывать высоту выводимого символа при прямой работе с видеопамятью?
PM MAIL   Вверх
Serzh
Дата 15.3.2004, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



дык при выводе и указывай...
или я что то не понял?

PM MAIL WWW ICQ   Вверх
Shurik
Дата 15.3.2004, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.2.2004

Репутация: нет
Всего: нет



В какой регистр необходимо записывать?
PM MAIL   Вверх
Chingachguk
Дата 15.3.2004, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Вообще-то в графике выводятся шрифты - битовые маски определяют каждый символ - например, в режиме 13h биос выводит символы 8x8 (примерно). Я брал адрес таблицы символов и выводил их вручную:

Код

{Вывод текста}
Procedure outt256(color:byte; x,y,addr:word);
 Begin
   Asm
     les  SI,tabl_shrift
     mov  AX,320
     mul  Y
     mov  DI,X
     add  DI,AX
     mov  BX,Addr
     mov  CL,[BX]
     inc  BX
     xor  CH,CH
@Start: mov  AL,[BX]
       inc  BX
       xor  AH,AH
       push SI
       push CX
       shl  AX,3
       add  SI,AX
       push DS
       push DI
       push 0A000h
       pop  DS
       mov  CX,8
       mov  AL,Color
@start1:  mov  AH,ES:[SI]
         inc  SI
         push CX
         mov  CL,8
@Paint:   shl  AH,1
         jnc  @Next_Pix
         mov  [DI],AL
@Next_Pix:inc  DI
         loop @Paint
         pop  CX
         add  DI,320-8
         loop @start1
       pop  DI
       pop  DS
       pop  CX
       pop  SI
       add  DI,8
       loop @Start
   End;
 End;


Ничего не мешает использовать любые другие таблицы символов. В интерфейсе прерывания in 10h есть как функции получения адресов различных таблиц так и переопределения их в знакогенераторе (для текста).


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Serzh
Дата 16.3.2004, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Chingachguk, ну ты даешь...
хоть бы написал, что должен быть массив со шрифтом tabl_shrift и что процедура вызываеться с параметрами: цвет, координата x, координата y, адрес строки...
а то ведь не понятно...

PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 16.3.2004, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Я думаю, парень разберется ;) С мышью он быстро разобрался smile.gif


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Jin X
Дата 16.3.2004, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 5.3.2004

Репутация: 1
Всего: 1



Высота символов меняется так:
Код
  mov dx,3D4h
  mov al,9
  out dx,al
  inc dx
  mov al,8 ; ВысотаСимволов
  out dx,al


Образ символов вот так (если без прерываний):
Код
; Процедура GetCharImage - получить образ символа
; Вход: AL = код символа, ES:DI = адрес для записи образа символа (16 байт)
GetCharImage    proc    near

               xor     ah,ah
               xchg    si,ax

               cli
               mov     dx,3CEh
               mov     ax,0C06h
               out     dx,ax         ; Отвязываем чётную карту от нечётной, Seg=0B800h (P.S. Wow! Как умно сказанул!)
               mov     ax,00204h
               out     dx,ax         ; Выбираем для чтения карту #2
               mov     ax,00005h
               out     dx,ax         ; Регистр режима (НЕ odd/even-адресация и т.д)

               push    ds
if              @Cpu and 1
               push    0B800h
               pop     ds
               shl     si,5
else
               mov     cx,0B800h
               mov     ds,cx
               mov     cl,5
               shl     si,cl
endif
               mov     cx,8
               cld
               rep     movsw         ; Копируем образ символа в память
               pop     ds

               mov     ax,0E06h
               out     dx,ax         ; Связываем чётную карту с нечётной, Seg=0B800h
               mov     ax,1005h
               out     dx,ax         ; Регистр режима (odd/even-адресация и т.д)
               mov     ax,4
               out     dx,ax         ; Выбираем для чтения карту #0

               sti
               ret

GetCharImage    endp

;----------------------------------------------------------------------------;

; Процедура SetCharImage - установить образ символа
; Вход: AL = код символа, DS:SI = адрес образа символа (16 байт)
SetCharImage    proc    near

               xor     ah,ah
               xchg    di,ax

               cli
               mov     dx,3C4h
               mov     ax,402h
               out     dx,ax         ; Разрешаем запись в плоскость 2
               mov     ax,504h
               out     dx,ax         ; Режим памяти (текстовый, последов, 64K памяти)
               mov     dl,0CEh
               mov     ax,0C06h
               out     dx,ax         ; Отвязываем чётную карту от нечётной, Seg=0B800h
                                     ; (P.S. Wow! Как умно сказанул!)
               push    es
if              @Cpu and 1
               push    0B800h
               pop     es
               shl     di,5
else
               mov     cx,0B800h
               mov     es,cx
               mov     cl,5
               shl     di,cl
endif
               mov     cx,8
               cld
               rep     movsw         ; Копируем образ символа из памяти
               pop     es

               mov     ah,0Eh
               out     dx,ax         ; Связываем чётную карту с нечётной
               mov     dl,0C4h
               mov     ax,304h
               out     dx,ax         ; Режим памяти (текстовый, чередующ, расш.пам)
               mov     al,2
               out     dx,ax         ; Запрещаем запись в плоскость 2

               sti
               ret
SetCharImage    endp

--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.