 ;Formulax - nov  verzia. Picasso Pablo - picasso@post.sk

[BITS 16]
[ORG 0x0100]


[SECTION .text]

FRYCHX:   mov  ax,0013h ;graficky m¢d
FRYCHY:   int  10h ;nesk“r pouzit‚ ako iniciovan‚ premenn‚

          mov  bh,2
          mov  di,bx ;skop¡rujeme pripraven£ tabulku s¡nusu
          mov  si,FSINTX+8 ;minim lne 32 poloziek + 8 rezerva (kos¡nus ako sin(x+PI/2)=sin(x+8))
fvekt:    mov  cl,8
fvekt1:   test ah,01h
          jnz  fvekt2
          std
fvekt2:   lodsb
          cld
          test ah,bh
          jnz  fvekt3
          neg  al
fvekt3:   stosb
          loop fvekt1
          dec  ah
          jnz  fvekt


          mov  ax,0A000h
          mov  es,ax




formulax: add  [frychl+1],word 0000 ;pripoc¡tanie aktu lnej rychlosti
frychl:   mov  ax,0000 ;aktu lna poz¡cia tr vy...

          test al,23h ;...sa z roven pouzije ako n hodn‚ c¡slo...
          jnz  ftravnik ;...na ot zku, ci sa m  formula...
          inc  bl ;...otocit vlavo

ftravnik: mov  si,FOBR-1 ;vykresl¡ sa travnik
          mov  di,6834 ;rozostup "bodov tr vy"
          xor  dx,dx
          div  di
          xchg ax,dx
ftravni1: inc  si
          jz   fzrych ;travnik zaplnil cel£ obrazovku
          mov  byte [si],cl ;=0
          sub  ax,byte 1
          jnc  ftravni1
          mov  byte [si],bh ;=2, tr vnik je zeleny...
          mov  ax,di
          jc   ftravni1



fzrych:   mov  cl,[bx+8] ;potom este formula zrychli dopredu
          sar  cl,4
          add  [FRYCHY],cl
          jno  fzrych1
          mov  si,320
          js   fzrych1
          neg  si
fzrych1:  mov  cl,[bx]
          sar  cl,4
          add  [FRYCHX],cl
          jno  fzrych2
          pushf
          inc  si
          popf
          js   fzrych2
          sub  si,2
fzrych2:  add  [formulax+4],si







fkresli:  mov  si,FOBR+320*100+160 ;a ideme kreslit formulu
          push bx ;z lohuj aktu lne natocenie formuly
          mov  di,FFORM
          mov  cl,15
          xor  ax,ax

fciara:   add  bl,[byte di]
          and  bl,00011111b
          mov  ch,[di+1]
          add  di,byte 2

fbod:     add  al,[bx] ;s£radnica x
          jno  fbod1
          pushf
          inc  si
          popf
          jns  fbod1
          sub  si,byte 2

fbod1:    add  ah,[bx+8] ;s£radnica y
          jno  fbod2
          pushf
          add  si,320
          popf
          jns  fbod2
          sub  si,2*320

fbod2:    mov  byte [si],15 ;vykresl¡me bielu bodku...
          dec  ch
          jnz  fbod ;...pozadovanej dlzky

          loop fciara ;a tak vsetky ciary tvoriace formulu
          pop  bx ;obnova p“vodn‚ho natocenia formuly




          mov  dx,03DAh
fraytrac: in   al,dx ;pock m na okamih, kedy nie je obrazovka prekreslovan 
          and  al,08h ;(tzv. raytracing)...
          jz   fraytrac


          mov  si,dx ;uz len vykresl¡m obrazovku
          xor  di,di
          dec  cx
          rep  movsb ;teda ju prenesiem z vn£tornej obrazovky na skutocnu


          in   al,60h ;test na <ESC>
          dec  al
          jnz  near formulax ;nebol stlaceny - pokracuj

          mov  ax,0003h ;bol stlaceny - skonci
          int  10h ;textovy m¢d
          ret








FFORM:    db 4,23
          db 12,24
          db 12,11
          db 19,70
          db 23,18
          db 10,24
          db 10,18
          db 30,44
          db 30,18
          db 10,24
          db 10,18
          db 23,70
          db 19,11
          db 12,24
          db 12,23


FSINTX:   db 0,25,48,70,90,105,117,124,127



[SECTION .bss]

          resb 1 ;aby FSINT zac¡nalo na 0200h

FSINT:    resb 256+8

          resb 209 ;aby FOBR zac¡nalo na adrese 03DAh

FOBR:     resb 320*200
