Guest User

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

a guest
Jun 17th, 2011
302
0
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'
Add Comment
Please, Sign In to add comment