Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Драйвер мышки, помогите переделать 
:(
    Опции темы
Kostorav
Дата 25.3.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написать драйвер мыши, принимает сообщение мыши и передвигает курсор в виде символов в заданном направлении и выполняет следующие команды при нажатии клавиш R и L.
1)вниз-влево
2)вниз-вправо
3)вверх-вправо
4)вверх-вправо
на границе: остановка курсора на краю, L--смена символа, R--выход.

Код

.486
.8087

com1  equ 2F8h

MODEL SMALL

write macro port,symbol
    mov dx,port
    mov al,symbol
    out dx,al
endm

read macro symbol,port
    mov dx,port
    in al,dx
    mov symbol,al
endm

DATA SEGMENT use16
byte1 db ?
byte2 db ?
byte3 db ?

x db 40
y db 12

dividerx db 8
dividery db 8

deltax db 0
deltay db 0

cursor db '^/*'

DATA ENDS

CODE SEGMENT use16

ASSUME  cs:CODE, ds:DATA, ss:STACK

WaitByte proc
    mov dx,com1+5
waitloop:
    in al,dx
    test al,00000001b
    jz waitloop
    read al,com1
    ret
WaitByte endp

OutSymbol proc
    push ax

    ;set position of cursor
    mov dh,y
    mov dl,x
    mov ax,0200h
    xor bx,bx
    int 10h

    ;print symbol
    pop ax
    mov ah,0eh
    int 10h
    ret
OutSymbol endp

FindDeltas proc
    mov ah,byte1
    mov al,byte2
    shl ah,6
    and ah,11000000b
    or ah,al
    sar ax,8
    mov dh,dividerx
    idiv dh
    mov deltax,al

    mov ah,byte1
    mov al,byte3
    shl ah,4
    and ah,11000000b
    or ah,al
    sar ax,8
    mov dh,dividery
    idiv dh
    mov deltay,al
    ret
FindDeltas endp

AddToX proc
    mov bl,x
    add bl,al
    cmp bl,80
    jc proceed
    mov bl,cl
    
proceed:
    mov x,bl
    ret
AddToX endp

AddToY proc
    mov bl,y
    add bl,al
    cmp bl,25
    jc proceed2
    mov bl,cl

proceed2:
    mov y,bl
    ret
AddToY endp

MakeMove proc
    mov al,deltax
    test al,al
    js left

right:    ;down-left
    mov cl,0
    call AddToY
    neg al
    mov cl,79
    call AddToX
    jmp checky

left:    ;up
    mov cl,24
    call AddToY

checky:
    mov al,deltay
    test al,al
    js up

down:   ;down-right
    mov cl,0
    call AddToY
    mov cl,0
    call AddToX
    jmp return

up:    ;up-right
    mov cl,24
    call AddToY
    neg al
    mov cl,0
    call AddToX

return:
    ret
MakeMove endp

begin:
    mov dx,DATA
    mov ds,dx

;init port

    ;set optioning mode
    write com1+3,80h
      
        ;set 1200 bits per sec
    write com1,60h
    write com1+1,00h
      
    ;set usual mode
    write com1+3,00000010b
      
        ;do not allow interrupts
    write com1,00h

;set power
    write com1+4,0Bh

;init screen
    ;clear
    mov ax,3h
    int 10h
    
    ;hide cursor
    mov ah,1
    mov cx,2020h
    int 10h

;print symbol
    mov al,cursor
    call OutSymbol

;message loop
readbytes:
    call WaitByte
    test al,01000000b
    jz readbytes
    xor al,01000000b
    mov byte1,al

    call WaitByte
    test al,11000000b
    jnz readbytes
    mov byte2,al

    call WaitByte
    test al,11000000b
    jnz readbytes
    mov byte3,al

    ;Clear cursor
    mov al,' '
    call OutSymbol

    ;RClick
    test byte1,00010000b
    jnz exit

    ;LClick
    test byte1,00100000b
    jz ch_movement
    mov x,40
    mov y,12

    ;check movement
ch_movement:
    call FindDeltas
    call MakeMove

    ;draw symbol
    mov al,cursor
    call OutSymbol

    ;jump back to reading bytes
    jmp readbytes

;end program
exit:
    mov ax,3h
    int 10h
    MOV  AX,4C00h
        INT  21h

CODE ends

STACK 200h
      END begin


Мне надо переделать движение курсора, смену символа проверить(сомневаюсь что все правильно), и остановить курсор на краю экрана.

Заранее всем спасибо!

Это сообщение отредактировал(а) Kostorav - 25.3.2009, 12:59

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  MOUSE.ASM 2,80 Kb
PM MAIL   Вверх
jython
Дата 31.3.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

DATA SEGMENT
 path db "result.txt",0 ; имя файла для октрытия
 buf  db ?
DATA ENDS

SSEG SEGMENT STACK
      db 200 dup(?)
SSEG ENDS

CODE SEGMENT
 ASSUME CS:CODE, DS:DATA, SS:SSEG
  begin:
    mov ax,DATA    ; настроим DS
    mov DS,ax        ; на реальный сегмент
    ;открываем файл
    mov ax,3d00h    ; открываем для чтения
    lea dx,path        ; DS:dx указатель на имя файла
    int 21h        ; в ax деcкриптор файла
    jc exit        ; если поднят флаг С, то ошибка открытия
    
    mov bx,ax        ; копируем в bx указатель файла
    xor cx,cx
    xor dx,dx
    mov ax,4200h
    int 21h        ; идем к началу файла
   out_str:
    mov ah,3fh        ; будем читать из файла
    mov cx,1        ; 1 байт
    lea dx,buf        ; в память buf
    int 21h            
    cmp ax,cx        ; если достигнуть EoF или ошибка чтения
    jnz close        ; то закрываем файл закрываем файл
    mov dl,buf
    mov ah,2        ; выводим символ в dl
    int 21h        ; на стандартное устройство вывода
    jmp out_str
   close:            ; закрываем файл, после чтения
    mov ah,3e
    int 21h
   exit:            ; завершаем программу
    mov ah,4ch
    int 21h
CODE ENDS
  end begin

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

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

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


 




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


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

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