Помощь - Поиск - Пользователи - Календарь
Полная версия: Крыса и 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
да, респект злому псу =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.