SHARE
TWEET

optimize http://habrahabr.ru/blogs/asm/121999/

a guest Jun 17th, 2011 217 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Swirl by k06a
  2. ; Dedicated to my wife 9ka
  3. org   100h
  4.  
  5. main:
  6.     mov di, kruch
  7.  
  8.     ; ????????? ????? ?????? 320x200x256
  9.     mov al, 13h
  10.     int 10h
  11.  
  12.     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13.     ; ?????????? ??? ????? ?????? ????????? ;
  14.     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15.     paint:
  16.     push cx
  17.        
  18.         ; ??????? ES ????????? ?? ???????????
  19.         push 0A000h
  20.         pop es
  21.        
  22.         mov bh, 0FAh ;mov  bx, 320*200
  23.         mov ax, 100
  24.         lp1:
  25.        
  26.             mov cx, 160
  27.             lp2:
  28.                 ; ?????? ? DX ????? ??????? ?? K1
  29.                 push ax cx
  30.                     imul ax
  31.                     xchg ax, cx
  32.                     imul ax
  33.                     add  ax, cx
  34.                     div  word [di]
  35.                     push ax
  36.                 mov si,sp
  37.                
  38.                 ; ?????? ? [sin] ??????? ???? ?? K2
  39.                
  40.                 fninit
  41.                 fild  word [si+4]      ; COS
  42.                 fild  word [si+2]      ; SIN
  43.                 fpatan
  44.                 fimul word [di+vnum-kruch]
  45.                 fmul  dword [di+glad-kruch]
  46.                 fiadd word [si]
  47.                 fist word [si]
  48.                 pop  dx
  49.                 pop cx ax
  50.                
  51.                 ; ?????? ???????
  52.                 dec  bx                
  53.                 mov  byte [es:bx], dl
  54.  
  55.             dec cx
  56.             cmp cx, -160
  57.             jg  lp2
  58.            
  59.         dec ax
  60.         cmp al, -100
  61.         jg  lp1
  62.            
  63.     pop cx
  64.  
  65.     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  66.  
  67.     ; ??????????? ????? ???????
  68.     ; CL - ???????, ???????? ??????? ?? ?????
  69.     ; CH - ?????!!! ???????? ????????
  70.     loop_pal_out:
  71.         add  cl, ch ; [DELTA]
  72.        
  73.         ;;;;;;;;;;;;;;;;;;;;;;;;
  74.         ; CL - Cycled Shifting ;
  75.         ; AL := 0, AH := XXh   ;
  76.         ;;;;;;;;;;;;;;;;;;;;;;;;
  77.         setPalette:
  78.             mov  al, 0 ; ??? ????????? ?????
  79.             setPalette_loop:
  80.                 mov  ah, al            
  81.                
  82.                 cmp al, 0 ; was ah!!
  83.                 jl  no_inv
  84.                 not ah
  85.                 no_inv:
  86.                
  87.                 shr  ah, 1
  88.                 ;call setColor
  89.                
  90.                 ;;;;;;;;;;;;;;;;;;;;;;;;
  91.                 ; AL - ????? ? ??????? ;
  92.                 ; AH - Grayscale color ;
  93.                 ;;;;;;;;;;;;;;;;;;;;;;;;
  94.                 setColor:
  95.                 pusha
  96.                 add  al, cl ; + ??????
  97.  
  98.                     mov dx, 03c8h
  99.                     out dx, al
  100.                     inc dx
  101.                    
  102.                     mov cx, 3
  103.                     mmm:              
  104.                         mov al, ah
  105.                         and al, byte [di+RRR-kruch]
  106.                         out dx, al
  107.                         inc di
  108.                     loop mmm
  109.  
  110.                        
  111.                 popa
  112.                 ;;;;;;;;;;;;;;;;;;;;;;;;    
  113.                
  114.                 inc al
  115.             jnz  setPalette_loop
  116.         ;;;;;;;;;;;;;;;;;;;;;;;;
  117.    
  118.         ; ???????? ?? ??????? ???????
  119.         mov  ah, 0Bh ; AX := 0B00h
  120.         int  21h
  121.         cmp  al, 0ffh
  122.  
  123.         jmp_loop_pal_out:
  124.         jne  loop_pal_out
  125.  
  126.         ; ??????? ???????
  127.         mov  ah, 08h
  128.         int  21h
  129.  
  130.         label_push_space:
  131.             cmp  al, ' '
  132.             jne  label_push_left
  133.             mov  ch, 0
  134.  
  135.         label_push_left:
  136.             cmp  al, 75
  137.             jne  label_push_right
  138.             dec  ch
  139.  
  140.         label_push_right:
  141.             cmp  al, 77
  142.             jne  label_push_down
  143.             inc  ch
  144.    
  145.         label_push_down:
  146.             cmp  al, 80
  147.             jne  label_push_up
  148.             dec  word [di]
  149.             jnz  paint_me
  150.             inc_kruch_paint_me:
  151.             inc  word [di]
  152.             paint_me:
  153.             jmp  paint
  154.  
  155.         label_push_up:
  156.             cmp  al, 72
  157.             je   inc_kruch_paint_me
  158.    
  159.         label_push_R:
  160.             cmp  al, 'r'
  161.             jne  label_push_G
  162.             not  byte [di+RRR-kruch]
  163.            
  164.         label_push_G:
  165.             cmp  al, 'g'
  166.             jne  label_push_B
  167.             not  byte [di+GGG-kruch]
  168.            
  169.         label_push_B:
  170.             cmp  al, 'b'
  171.             jne  label_push_digit
  172.             not  byte [di+BBB-kruch]
  173.        
  174.         label_push_digit:
  175.             sub  al, '0'
  176.             cmp  al, 9
  177.             ja   label_push_esc
  178.             mov  byte [vnum], al
  179.             jmp  paint_me
  180.        
  181.         label_push_esc:
  182.             cmp  al, 27-'0'
  183.             jne  jmp_loop_pal_out
  184.             ret
  185. ;main   endp
  186.  
  187. RRR   db 0
  188. GGG   db 255
  189. BBB   db 0
  190.  
  191. glad  dd 40.75 ; 163/4
  192. vnum  dw 3
  193. kruch dw 13
  194.  
  195. ;sign  db 'Dedicated to my wife 9'
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top