Помощь - Поиск - Пользователи - Календарь
Полная версия: Крыса и Vesa [ЗАРАБОТАЛО!]
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
MixRin.RU$
Работает ли мышь в граф. режиме 101h?
mov     ax, 4F02h
mov bx, 101h
int 10h
Просто в 13h пашет, а в этом нет, друг говорит там надо напрямую с портами возится blink.gif

а вот соббсно код проги:
.model tiny
.386
.data
VMC dd ? ;адрес процедуры BIOS
star_vid dw ?
Info dw 256 DUP(0)
cmask
db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
db 00000000b,10000000b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

.code
org 100h
start: call where_VMC ;записываем адрес VMC
call init_vga ;установка видео-режима 640x480x8
call refresh ;экран белого цвета
call draw_color
;---------------
;xor ax,ax
;int 33h
;push ds
;pop es
;mov dx,offset cmask
;mov ax,09h
;int 33h
;mov ax,01h
;int 33h
;-------неработающий код--------


check_esc: xor ax, ax
int 16h
cmp ax, 011Bh ;проверка на ескейп
je end_prog
jmp check_esc
end_prog: mov ax, 4F02h
mov bx, star_vid
int 10h
ret
;----------------------------
where_VMC proc
push ds
pop es
mov di, offset Info
mov ax, 4f01h
mov cx, 0101h
int 10h
mov eax, es:[di + 0Ch] ;добываем адрес на VMC процедуру
mov VMC, eax
ret
where_VMC endp
refresh proc
mov cx, 5
nxtwin: dec cx
mov dx, cx
inc cx
push cx
xor bx, bx
mov ax, 4F05h
call VMC
mov ax, 0f0fh
xor si, si
mov cx, 8000h ;заполняем экран белым
rep stosw
pop cx
loop nxtwin
ret
refresh endp
init_vga proc
push 0A000h
pop es
mov ax, 4F03h
int 10h
mov star_vid, bx ;запоминаем старый режим и входим в 640х480х8
mov ax, 4F02h
mov bx, 101h
int 10h
ret
init_vga endp
;ax - координата по Y, bx - координата по X, dl - код цвета
draw_point proc
push ax
push bx
push dx
dec ax
dec bx
mov dx, 280h
mul dx
add ax, bx
adc dx, 0
mov si, ax
xor bx, bx
mov ax, 4F05h ;рисуем точку по координате bx, by с цветом dl (нумерация точек: 0..639;0..479)
call VMC
pop dx
mov es:[si], dl
pop bx
pop ax
ret
draw_point endp
draw_color proc
push 0A000h
pop es
xor ax, ax
xor bx, bx
xor dl, dl
inc bx
mov cx, 40h
cycle2: push cx
xor dl, dl ;цветная фигулина
xor bx, bx
inc ax
inc bx
mov cx, 1feh
cycle1: call draw_point
inc dl
inc bx
loop cycle1
pop cx
loop cycle2
ret
draw_color endp
end start

PS: здесь стоят комменты не на оператор, а на всю процедуру...
MixRin.RU$
Вот под режим 320х240х8бит работает: unsure.gif
.model tiny
.data
mouse_mask
db 07fh, 0ffh, 03fh, 0ffh, 01fh, 0ffh, 00fh, 0ffh, 007h, 0ffh, 04fh, 0ffh, 0e7h, 0ffh, 0e7h, 0ffh
db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
db 00h, 00h, 00h, 00h, 40h, 00h, 60h, 00h, 20h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
.code
org 100h
start: mov ax, 13h ;13h 320x200 256
int 10h
push 0a000h ;сегмент видеобуфера
pop es
call refresh ;заполнение экрана зеленым цветом
xor ax, ax ;-\
int 33h ;--\
push ds ;---\
pop es ;----\
mov dx, offset mouse_mask ;-----> инициализация мышки =)
mov ax,09h ;----/
int 33h ;---/
mov ax,01h ;--/
int 33h ;-/
check_esc: xor ax, ax
int 16h
cmp ax, 011Bh ;проверка на ескейп
je end_prog
jmp check_esc
end_prog: mov ax, 03h
int 10h
ret
;---------------------------
refresh proc
mov ax, 0202h
xor di, di
mov cx, 8000h
rep stosw
ret
refresh endp
end start
Altair
Цитата
Работает ли мышь в граф. режиме 101h?

mov ax, 4F02h
mov bx, 101h
int 10h

Просто в 13h пашет, а в этом нет, друг говорит там надо напрямую с портами возится blink.gif

Это же VESA....
я вот здесь кое что писал...

А так вообще не работает там мышь. все надо самому писать..
страшная это вещь, ошибки там тоже страшные ... я один раз сунулся, больше не хочу пока... сижу тихо, мирно в 32 битах smile.gif
Dark
Угу, пишешь свой вывод курсора, свое стирание его, и т.д. и т.п.
MixRin.RU$
Цитата(Altair @ 23.01.2006 17:21) *

сижу тихо, мирно в 32 битах smile.gif

А можешь небольшой код для примера привести? smile.gif
Dark
Это альтаи р к тому что сидит в своем Free Pascal без ассемблера ;)
MixRin.RU$
ах он негодяй yes2.gif
так никак низзя намутить крысу в высоко графических режимах, а?
+ если в паскале можно, дык и в асме можно без проблем намутить...
Altair
Цитата
ах он негодяй yes2.gif

хех... баним или подождем пока ?
Цитата
I. на форуме запрещается:

1. использовать ненормативную лексику
...
8. вступать в спор с администрацией
9. оскорблять участников концеренций



Цитата
так никак низзя намутить крысу в высоко графических режимах, а?

почему нельзя ? можно конечно! Я уже дал ссылочку и если ты посмотришь то поймешь как - через написание своего драйвера.
Или есть вариант - в 32 битном асме юзать DirectX режимы... (вопрос к асмщикам уже о возможности реализации всего этого).
MixRin.RU$
Цитата
1. использовать ненормативную лексику
слово 'негодяй' не является не нормативной лексикой...
Цитата
9. оскорблять участников концеренций
если ты непонял смысл моей фразы, то прошу прощения за нее...

А теперь вернемся к теме...
2 раза перечитал твою статью, и чтото не нашел про написание своего драйвера ничего sad.gif Нашел только в конце, чтото вроде упоминания и все sad.gif Можешь здесь отписать или дать свой паскальный исходник где работаешь с мышкой в режиме VESA?
Altair
(да понял я твою фразу smile.gif )
Цитата
2 раза перечитал твою статью, и чтото не нашел про написание своего драйвера ничего sad.gif Нашел только в конце,

Именно в конце, я там подробно как мне показалось описал установку своего драйвера.

насчет примера.
Вот смотри
http://forum.pascalnet.ru/index.php?s=&sh...indpost&p=34109
я выложил там уже почти готовую программу, там указатель есть в vesa., но переключение экранов пока только кнопками.
Допиши автоматику переключения окон и все...

уууу .... я сейчас посмотрел, я там оказывается исходники не прикреплял.. и на новом компе это вообще не пошло, вылетает с run time error....

Если нужно конечно могу поискать исходники...
MixRin.RU$
Мило, только он сразу выходит когда начинаю двигать мышку, но крысу ты инициализировал, а это гуд =)
Еще я не понял с видеоокнами, с мышкой они тоже присутствуют? blink.gif И если можешь, то поищи исходники =) я бы их посмотрел
Altair
Цитата
Мило, только он сразу выходит когда начинаю двигать мышку

вот и у меня, но на старом компе все работало я отлично помню.
Цитата
Еще я не понял с видеоокнами, с мышкой они тоже присутствуют?

да, конечно!
Мышь просто упирается в границы окна и все.. чтобы она полезла дальше надо активное окно переключить.
Цитата
И если можешь, то поищи исходники =) я бы их посмотрел

сейчас поищу..
MixRin.RU$
а алгоритм, как ее загружать, какие прерывания юзать и тд можешь выложить? Примерную схему того, как делать надо... secret.gif
MixRin.RU$
Мне тут друг говорит, что в 32-ух битных режимах неработает только прорисовка мышки, а все остальное работает => надо саму рисовать ее, и можно мутить цветные курсоры! tank.gif

Внимание, получен работающий код для 640х480х8 chore.gif
begin macro mmoret
mov ax,4f03h
int 10h
mov mmoret,bx
mov ax,4f02h
mov bx,101h
int 10h
push ds
pop es
mov di,offset info
mov ax,4f01h
mov cx,101h
int 10h
mov eax,es:[di+0ch]
endm

the_end macro mmoret
readkey:
xor ax,ax
int 16h
cmp ax,11bh
jne readkey
mov bx,mmoret
mov ax,4f02h
int 10h
mov ax,4ch
int 21h
endm

.model tiny
.386
.data
retMode dw ?
vmc dd ?
info db ?
.code
org 100h
start:
begin retMode
mov vmc,eax
call refresh

xor ax,ax
int 33h
ccycle:
mov ax,03h
int 33h
mov ax,dx
mov bx,cx
call point
mov ah,01h
int 16h
cmp al,0
je ccycle

the_end retMode
ret

refresh proc
push 0a000h
pop es
mov cx,5
cycle:
push cx
mov dx,cx
dec dx
mov ax,4f05h
xor bx,bx
call vmc
mov ax,0f0fh
xor di,di
mov cx,8000h
rep stosw
pop cx
loop cycle
ret
refresh endp

point proc ;AX=Y; BX=X
push 0a000h
pop es
mov dx,640
mul dx
add ax,bx
adc dx,0
mov si,ax
xor bx,bx
call vmc
mov byte ptr es:[si],0ffh
ret
point endp

end start
zloy_pes
Thanx
MixRin.RU$
Цитата(zloy_pes @ 24.01.2006 23:09) *

Thanx
да, респект злому псу =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.