Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование таймера в графическом режиме... 
:(
    Опции темы
NECsoft
Дата 26.3.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



здравствуйте...

как на ассемблере сделать перемещение точки по экрану с заданным интервалом времени???
пересмотрел кучу статей и примеров, в первых описание давалось очень расплывчато, а примеры попадались весьма не простого характера =) 
очень прошу показать простой пример программы с пояснением ключивых моментов...
_______________
заранее спасибо
PM MAIL   Вверх
AndNot
Дата 26.3.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот, посмотри в аттаче. Пример простой, разберешься. Принцип работы следующий. Вначале перенастраиваем таймер на нужную частоту, вызывая SetClockRate, которая задает таймеру новый делитель частоты. Т.е. если делитель равен 7FFFh, то таймер будет генерировать прерывания с частотой 1193180/7FFFh = 36.4 Герц. Можешь поэксперементировать, сам делитель прописан в константе TICK_DIVIDER. Естественно нужно установить свой обработчик прерываний таймера. В нем мы просто инкрементируем некую переменную, по значению которой основная программа и узнает, когда можно начинать отрисовку нового кадра. В програмке этой переменной является FrameReady. В общем я коментов поставил, разберешся. Если что непонятно будет - спрашивай.


Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  FLAME.ASM 14,85 Kb
PM MAIL   Вверх
NECsoft
Дата 27.3.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо за ссылочку, хотя конечно придеться с ней повозиться =)))) (с ассемблером только начинаю общаться)
пока разбирался с кодом попался мне на глаза один очень полезный примерчик, единственно чего здесь не хватает, это работы с таймером, тогда в идеале бы получилась моя ситуация =))))
Код

.model  tiny    
    .code           
    org 100h    
begin:   
        mov AX,11h   
        int 10h   
  
        mov CX, 320       
        mov DX, 240       
        MOV AH,0CH   
        MOV AL,3   
        int 10h   
  
key_loop:   
    mov ah,7            
    int 21h   
  
    cmp  al,27         
    je   quit             
    test al,al            
    jnz key_loop      
    int 21h   
  
    cmp al,50h         
    je key_down       
  
    cmp al,48h         
    je key_up           
       
    cmp al,4Bh   
    je key_left   
       
    cmp al,4Dh   
    je key_right   
       
    cmp al,47h   
    je key_home   
       
    cmp al,49h   
    je key_pgap   
       
    cmp al,4Fh   
    je key_end   
       
    cmp al,51h   
    je key_pgdn   
  
draw:   
    MOV AH,0CH   
    MOV AL,3   
    int 10h   
    jmp key_loop   
  
key_down:   
    MOV AH,0CH   
    MOV AL,0   
    int 10h   
    inc dx   
    jmp draw   
       
key_up:   
    MOV AH,0CH   
    MOV AL,0   
    int 10h   
    dec dx   
    jmp draw   
       
key_left:   
    MOV AH,0CH   
    MOV AL,0   
    int 10h   
    dec cx   
    jmp draw   
       
key_right:   
    MOV AH,0CH   
    MOV AL,0   
    int 10h   
    inc cx   
    jmp draw   
       
key_home:   
    MOV AH,0CH   
    MOV AL,0   
    int 10h   
    dec dx   
    dec cx   
    jmp draw   
  
key_pgap:   
     MOV AH,0CH   
     MOV AL,0   
     int 10h   
     dec dx   
     inc cx   
     jmp draw   
        
key_end:   
     MOV AH,0CH   
     MOV AL,0   
     int 10h   
     inc dx   
     dec cx   
     jmp draw   
  
key_pgdn:   
     MOV AH,0CH   
     MOV AL,0   
     int 10h   
     inc dx   
     inc cx   
     jmp draw   
  
quit:   
    ret   
end begin   

PM MAIL   Вверх
NECsoft
Дата 27.3.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



добрый день...
на данный момент реализовал такой код, передвижение точки из края в край, за определенный промежуток времени =))) меняя к примеру mov cx,100 в delay proc можно добиться различных результатов...

но рассуждая дальше я столкнулся с новыми проблемами:
планируеться при нажатии клавиши включать таймер, в это время картинка, состоящая где то из 60 пикселей, начинает плавное движение =))))

- как в таком случае (во время движения картинки) получить код клавиши от клавиатуры, так что бы из за прерывания не стопорился таймер =(((

- что касаеться графики то, дело в том что как я понял можно рисовать в асме двумя путями:
     1)     
    mov ah,0ch   ;вывод точки
    mov al,14      ;цвет пикселя

    в данном случае легко работать с ОДНИМ пикселем, передвигать его используя регистры CX,DX... но как быть в случае если я хочу передвигать картинку состоящую к примеру из 20 точек ??? а в последствии искать с ней пересечения, те она должна строиться из какой то одной переменной...
     2)
    move byte ptr es:bx,(номер цвета пикселя)    
    
    в данном случае перемещение точки представляет собой сплошной гемор, особенно что касается движения по вертикали =((( зато вот картинку любую можно слепить за пару минут...

как быть в такой ситуации ???

Код

stk segment para 'stack'
stk ends

data segment para 'data'
     x dw 20
     y dw 20      
     xm dw 20
     ym dw 20        
data ends

code segment para 'code'
assume cs:code,ds:data

delay proc
    push cx
    mov cx,100
  del1:
    push cx
    mov cx,0
  del2:
    loop del2
    pop cx
    loop del1
    pop cx
    ret
delay endp

paint proc
push cx
    mov ah,0ch   
    mov al,14
    
    inc x
    mov dx,y
    mov cx,x
    int 10h

    mov ah,0ch   
    mov al,4
    dec cx
    int 10h
pop cx
ret 
paint endp

main proc
mov ax,data
mov ds,ax

mov ax,13h
int 10h

mov x,1
mov y,180
mov xm,80
mov ym,178

;ïðîöåññ
;----------------------
delay_call:
    call delay
    call paint

;    mov ah,10h
;    int 16h    
;    cmp al,27
;    je quit
    
cmp x,319
je beg
cmp x,319
jne delay_call
beg: 
    mov x,1
jmp delay_call

quit:
mov ah,4ch
int 21h
main endp
code ends
end main

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

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

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


 




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


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

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