Помогите с курсачем (фигуры Лиссажу)

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Михась32
Сообщения: 0
Зарегистрирован: 26 июн 2013, 23:39

26 июн 2013, 23:43

тут немного в меню не поладка:
1-как сделать что параметры вводимые в меню передавались анимации и присваивались переменным(a,b)
2- как сделать чтоб при прорисовки фигуры при нажатии на эскейп выходило не в дос а в меню))))
Пожалуйст помогите)))

Код: Выделить всё

 macro SetPixel x,y,color{
  mov ax,0C00h+color
  mov cx,x
  mov dx,y
  int 10h
}


org 100h
  mov  ax,3
  int  10h


  push 0B800h
  pop  es
 
  ;Вывод текста
  mov ah,9
  mov dx,x
  int 21h
  mov dx,y
  int 21h
  mov dx,start
  int 21h
  mov dx,exit
  int 21h
 
  xor bx,bx
  main:and   bx,3
       imul  di,bx,160
       mov   byte[es:di],'>'
       ;читаем символ с клавиатуры
       xor   ax,ax
       int   16h
       imul  di,bx,160
       mov   byte[es:di],' '
       cmp   ah,72
       jz    up
       cmp   ah,80
       jz    down
       cmp   bx,2
       jnc @f
          cmp   ah,75
          jz    left
          cmp   ah,77
          jz    right
          jmp   main
       @@:
       cmp   al,13
       jnz   main
       _enter:cmp bx,2
              jnz quit
 
              ;тут код при выборе пункта "начать"

;org 100h

 
mov ax,0010h   ; графический режим
int 10h      ; 640x350x2 (4 цвета)
fldz
mov ecx,8192;Генерируем координаты фигуры (8192 точки)
mov ah,a
mov ah,a

@@:inc si
   mov   a,byte[si]
   fld st0
   fld st0
   fimul [a]
   fsin
   fimul [SCALE]
   fiadd [Center]
   fistp [Coords+ecx*4-4] ;coords[ecx].x=sin(t*a)
   fimul [b]
   fcos
   fimul [SCALE+2]
   fiadd [Center+2]
   fistp [Coords+ecx*4-2] ;coords[ecx].y=cos(t*b)
   fadd  [step]           ;t=t+step
loop @b
 
;Анимация
@@:inc      di
   and      edi,8191
   SetPixel [Coords+edi*4+0],[Coords+edi*4+2],1 ;След от точки
   SetPixel [Coords+edi*4+4],[Coords+edi*4+6],3 ;Точка
   mov      dx,1000
   xor      cx,cx
   mov      ah,86h
   int      15h    ;ожидание cx:dx микросекунд
   in       al,60h ;Считываем скан-код с клавиатуры
   dec      al    ;Если нажат escape - выход
jnz @b
;jmp main
ret




              jmp $
        right:inc byte[es:di+32]
              jmp main
         left:dec byte[es:di+32]
              jmp main
           up:dec bx
              jmp main
         down:inc bx
              jmp main
  quit:
  ret

x       db ' Verhina po x - 1',13,10,'$'
y       db ' Verhina po y - 1',13,10,'$'
start   db ' Nachat`',13,10,'$'
exit    db ' Exit',13,10,'$'


SCALE     dw 250,150
Center    dw 320,175
a         dw 5
b         dw 3
step      dd 7.66990393942820614859043794745e-4 ;2PI/8192
Coords    rw 16384

Ответить