From ff6211368f214187c809f89922753649ef0cbec1 Mon Sep 17 00:00:00 2001 From: pathoswithin Date: Sun, 13 Mar 2016 04:04:08 +0000 Subject: [PATCH] bugfix git-svn-id: svn://kolibrios.org@6331 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/other/madmouse/madmouse.asm | 65 +++++++++++++--------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/programs/other/madmouse/madmouse.asm b/programs/other/madmouse/madmouse.asm index c1c976234f..13de6d22ca 100644 --- a/programs/other/madmouse/madmouse.asm +++ b/programs/other/madmouse/madmouse.asm @@ -2,9 +2,9 @@ ; Mad Mouse ;--------------------------------------------------------------------- ; version: 0.2 -; last update: 03/06/2012 -; changed by: Marat Zakiyanov aka Mario79, aka Mario -; changes: Some optimizations. +; last update: 03/06/2012 +; changed by: Marat Zakiyanov aka Mario79, aka Mario +; changes: Some optimizations. ;--------------------------------------------------------------------- ; Автор этого ужасно стремного кода: Sourcerer, 23.04.2010 ; popovpa (29.05.2012) @@ -13,10 +13,10 @@ ; 3. Оптимизация кода. ;------------------------------------------------------------------------------ use32 ; транслятор, использующий 32-х разрядные команды - org 0x0 ; базовый адрес кода, всегда 0x0 + org 0x0 ; базовый адрес кода, всегда 0x0 - db 'MENUET01' ; 1. идентификатор исполняемого файла (8 байт) - dd 0x01 ; 2. версия формата заголовка исполняемого файла + db 'MENUET01' ; 1. идентификатор исполняемого файла (8 байт) + dd 0x01 ; 2. версия формата заголовка исполняемого файла dd START ; 3. адрес, на который система передаёт управление ; после загрузки приложения в память dd IM_END ; 4. размер приложения @@ -30,10 +30,7 @@ dd 0x0 ; 8. указатель на строку, в которую записан путь, ; откуда запущено приложение ;------------------------------------------------------------------------------ -; макросы облегчают жизнь программиста -include '../../macros.inc' -;------------------------------------------------------------------------------ -;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- +;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- ;------------------------------------------------------------------------------ START: ;адрес начала программы mov eax,40 ;установить маску для ожидаемых событий. @@ -42,7 +39,7 @@ START: ; ;------------------------------------------------------------------------------ ;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- ;------------------------------------------------------------------------------ -align 4 +align 4 still: mov eax,10 ;ожидать событий int 0x40 @@ -53,18 +50,18 @@ still: mov ebx,eax shl ebx,16 shr ebx,16 - mov edi,ebx ;сохраним у + mov edi,ebx ;сохраним у shr eax,16 ;сдвигаем eax вправо на 16 - получаем x - mov esi,eax ;сохраним x + mov esi,eax ;сохраним x ;получаем координаты курсора mov eax,37 ;функция 37 - работа с мышью - xor ebx,ebx ;подфукция 0 - координаты мыши + xor ebx,ebx ;подфукция 0 - координаты мыши ;относительно экрана int 0x40 - mov ebx,eax ;запоминаем координаты + mov ebx,eax ;запоминаем координаты shr eax,16 ;теперь у нас только x. нужен и y - mov ecx,eax ;запоминаем x + mov ecx,eax ;запоминаем x shl ebx,16 ;сдвинем влео на 16 shr ebx,16 ;сдвинемв право на 16, у нас есть у ;------------------------------------------------------------------------------ @@ -72,28 +69,28 @@ still: ;в ecx и ebx координаты курсора X и Y соответвенно ;------------------------------------------------------------------------------ ;сравнение координат x - test ecx,ecx ;равна 0? + test ecx,ecx ;равна 0? jz left_border ;переход к обработке у левого края - cmp ecx,esi ;равна ширине экрана? - jz right_border ;переходим к обработке у правого края + cmp ecx,esi ;равна ширине экрана? + jz right_border ;переходим к обработке у правого края ;сравнение координат y - test ebx,ebx ;равна 0? + test ebx,ebx ;равна 0? jz top_border ;если да значит курсор вверху - cmp ebx,edi ;равна высоте экрана? + cmp ebx,edi ;равна высоте экрана? jz bottom_border ;переход к обработке у нижнего края jmp still ;иначе ничего делать не нужно ;------------------------------------------------------------------------------ -align 4 +align 4 left_border: - mov edx,esi ;в edx имеем ширину экрана + mov edx,esi ;в edx имеем ширину экрана dec edx ;уменьшим на 1 shl edx,16 ;теперь edx=(x-1)*65536 - add edx,ebx ;а теперь edx=(x-1)*65536+y + add edx,ebx ;а теперь edx=(x-1)*65536+y ;------------------------------------------------------------------------------ -align 4 +align 4 set_mouse_position: mov eax,18 ;функция 18: установить настройки мыши mov ebx,19 ;подфункция 19 @@ -102,32 +99,32 @@ set_mouse_position: int 0x40 jmp still ;отдыхаем ;------------------------------------------------------------------------------ -align 4 +align 4 right_border: ;курсор у правого края xor edx,edx inc edx ;edx=1 shl edx,16 ;edx = 1*65536 - add edx,ebx ;edx=1*65536+y + add edx,ebx ;edx=1*65536+y jmp set_mouse_position ;------------------------------------------------------------------------------ -align 4 +align 4 top_border: ;курсор у верхнего края - mov edx,ecx ;Х координата курсора + mov edx,ecx ;Х координата курсора shl edx,16 ;теперь edx=(x)*65536 - add edx,edi ;а теперь edx=(x)*65536+y + add edx,edi ;а теперь edx=(x)*65536+y dec edx ;а теперь edx=(x)*65536+(у-1) jmp set_mouse_position ;------------------------------------------------------------------------------ -align 4 +align 4 bottom_border: ;курсор у нижнего края - mov edx,ecx ;edx=ecx x координата курсора + mov edx,ecx ;edx=ecx x координата курсора shl edx,16 ;edx = х*65536 - ;у координата равна 0 + inc edx ;у координата равна 1 jmp set_mouse_position ;------------------------------------------------------------------------------ -IM_END: ; метка конца кода +IM_END: ; метка конца кода ;------------------------------------------------------------------------------ align 4 rb 1024