Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика в Tasm
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
IVR
Ну вошел я в графический режим:
         mov ax, 4F02h
        mov bx, 0101h
        int 10h

Ну вышел:
         mov ax, 0003h
        int 10h

А дальше что? Рисовать как?
Shadow
стало быть это VESA 256 color 640*480
------------
тут если я неошибаюсь будет несколько окон для вывода их нкжно будет переключать - передвигать
 mov ah,4fh
mov al,05
mov bh,0
mov bl,0        ;номер окна
mov dx,si        ;адрес окна в едницах шага шаг кратен размеру окна
int 10h


-----------------
Вот пример режим 320*200 16-милионов цветов
.MODEL SMALL
.STACK 100H
.DATA
windows db 0  ;deskriptor step winodw

x dw 150;The first coordinate on X   |
y dw 100;The first coordinate on Y   |Matrix of color from 0..20 on 20
x1 dw 170;the second coordinate for X |
y1 dw 120;the second coordinate for Y |

xx dw 0;Coordinates for a conclusion of a point
yy dw 0;

color dd 1h;color

deskr_buf dw 398;Quatity of points т/к/ есть разница 0 до 20 или 1 до 20
des_x db 20;descriptor X coord
des_y db 20;-=-=-=-=-=

image_buf dd 126 dup(00fff1ffh),147 dup(000000ffh),126 dup(00ff0001h);Bufer for color

.CODE
START:
.386
mov ax,@data;Adjust the data on segment
mov ds,ax;of the data
;------------------------------------------------
mov ax,4f02h;фунция VESA
mov bx,10fh;режим 320*200 16-милионов цветов
int 10h  ;BIOS video interrupt
 ;
mov ax,0a000h;video memory adress
mov es,ax;init es for video memory
lea di,image_buf;адрес картинки в регистр DI
;------------------------------------------------------------------
mov ax,[x]
mov [xx],ax
mov ax,[y]
mov [yy],ax

new_pset:  ;
cmp [deskr_buf],0;сравнение на ноль кончился ли массив
je end  ;если кончислся то на конец программы
jmp matrix;на вывод матрицы
end:  ;
call Wait_Key;ждем клавиши
call Exit;выходим
matrix:  ;

mov eax,[di];получаем цвет
mov [color],eax;

call OutPixel;на вывод пикселя первый пиксель
mov bx,[x1]
cmp [xx],bx;сравниваем не кончилась ли координата ХХ
je a_x  ;если больше то на модификацию
jmp no_ax;нет на вычеричивание по Х
a_x:  ;
add di,4;меняем положение бегунка в буффере цвета
mov ax,[x];востанавливаем координату Х
mov [xx],ax;-=-=-=
inc [yy];увеличиваем У
dec [deskr_buf];уменьшаем дескриптор
jmp Out_P
no_ax:  ;
inc [xx];увеличиваем Х
add di,4;меняем положение бегунка в буффере цвета
dec [deskr_buf];уменьшаем дескриптор буффера

;------------------------------------------------------------------
Out_P:
call OutPixel
jmp new_pset
;------------------------------------------------------------------

exit proc near
mov ah,4ch;
mov al,0; -EXIT to DOS;
int 21h;
exit endp;

OutPixel proc near
call mov_w0;всегда начинаем вывод с нулевого окна
mov ax,1280;1280 количество точек по X т/к/ цвет разме
 ;-щается в видео памяти в 32 расзрядах в 4 байтах
mul yy  ;умножаем на У
jc corect;если переполнение то коректир
;============================================
shl xx,2  ;сдвиг влева корректир т/к/ 4 байта на цвет точки
add ax,xx;конечный результат сумма
adc dx,0
jc corect1;если переполнение то на корректировку
cmp dx,1
je corect1
mov si,ax;теперь адресуем видео память
;на полученый результат
out:
mov ebx,color;цвет
mov es:[si],ebx;ставим точку
shr xx,2  ;так как мы изменили Х то возвращаем его взад
jmp ex_t;выходим
corect:

shl xx,2  ;сдвиг на 2 умножаем на 4
add ax,xx;в ax конечный результат
adc dx,0
corect1:
mov si,ax;в si ax
cmp dx,2
je corect2
cmp dx,3
je corect2
not_cor:

call mov_w1;двигаем окно на 1 шаг
jmp out  ;на вывод точки
corect2:
cmp dx,3
jz corect3
call mov_w2
jmp out
corect3:
call mov_w3
jmp out
ex_t:
ret  ;выход из процедуры вывода точки
 ;обратно в Брезенхейм
OutPixel endp

mov_w0 proc near;movenay to window
mov ah,4fh;in step zero
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,0;переносим окно на один шаг
int 10h
mov windows,0
ret
mov_w0 endp
mov_w1 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,1;переносим окно на один шаг
int 10h
mov windows,1
ret
mov_w1 endp
mov_w2 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,2;переносим окно на один шаг
int 10h
mov windows,2
ret
mov_w2 endp
mov_w3 proc near
mov ah,4fh;
mov al,05;62454
mov bh,0;---------
mov bl,0;---------
mov dx,3;переносим окно на один шаг
int 10h
mov windows,3
ret
mov_w3 endp

wait_key proc near
mov ah,0
int 16h
ret
wait_key endp

END START
Shadow
Луче разобрать что по проще напрмер
320*200 256 цветов
mov ax,0013h  ;режим
int 10h
mov ax,0a000h ;адрес видеопамяти
mov es,ax
mov es:[si],bl   ;es:[si] пара указывающая на видеопамять
; а SI индекс чтобы гулять по ней

координаты точки расчиываюия так
для Y = Y*320 т.е. введенное Y умнож на 320 т.к. всего по Х 320
для X = Y+x а потом к нему приб введеное X это будет адресс точки
в видеопямяти куда и помещвем цвет вот примерно так
.MODEL SMALL
.STACK 100H
.DATA
y_co dw 199
x_co dw 319


.CODE
START:



call _in_gr13h;init video memory and data

mov ax,320;
mul y_co;movenay Y


mov bx,ax;

add bx,x_co;movenay X

cmp dx,0
jne exit

xor ax,ax

mov al,4;Єа б­л©
mov es:[bx],al
call _wait_key
exit:
call _exit_p

;-------------------------------------------
;-------------------------------------------
;-------------------------------------------
_in_gr13h proc near
mov ax,013h
int 10h
mov ax,0a000h
mov es,ax
xor ax,ax
mov ax,@data
mov ds,ax
xor ax,ax
ret
_in_gr13h endp

_wait_key proc near
mov ah,0
int 16h
ret
_wait_key endp

_exit_p proc near
mov ah,4ch;|\
mov al,0;| -EXIT to DOS;
int 21h ;|/
_exit_p endp

END START
Shadow
ЧТО НЕПОНЯТНО СПРАШИВАЙ smile.gif
Dark
Слушай, shadow, напиши демку какую нибудь =)
Shadow
какую демку если какое нить вращение то в чистом ASM это занудно одна обработка чисел с плавающ запятой займет кучу времени
-=-=-=
хотя можно брать тлько целые и хотя взависимости от проца уже на машинном
уровне есть функции SIN и COS начиная с 3 пентиума
-=-=-=
так что писать если выкраду время то с МОНСТРЯЧУ чтонить huh.gif smile.gif
Dark
плазму можешь?
на тему sin cos создается таблица в файле, он считывается - и уже не надо вычислять => приложение быстрее
Shadow
кстати насчет плазмы если у тебя есть DOS NAVIGATOR то там уже есть готовая
правда откомпилированная программка SCR_SAVER
-=-=-=-=-=-=-=-=
правда никогда не задавался этим вопросом smile.gif поэтому незнаю смогу или нет
но поробовать можно
-=-=-=-=-=-=-=--=
вообще мы отошли ..... куда-то всторону smile.gif
и куда пропал сам человек IVR
Dark
Хих
от темы?
графика? графика :D в асме? в асме lol.gif и все, т.е. это по темы (все по заголовку)
IVR
:D
Спасибо Shadow!
Помогло, разобрался.
furosemide side effects in elder
Best Online Drugstore
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.