Subversion Repositories Kolibri OS

Rev

Rev 5716 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2010-2015. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  VNC client for KolibriOS                                       ;;
  7. ;;                                                                 ;;
  8. ;;  Written by hidnplayr@kolibrios.org                             ;;
  9. ;;                                                                 ;;
  10. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  11. ;;             Version 2, June 1991                                ;;
  12. ;;                                                                 ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. encoding_raw:
  16.  
  17.         DEBUGF  1,"RAW\n"
  18.  
  19.         mov     eax, [rectangle.width]
  20.         mov     ebx, [rectangle.height]
  21.         mul     ebx
  22. if BITS_PER_PIXEL = 16
  23.         shl     eax, 1
  24. else if BITS_PER_PIXEL = 24
  25.         lea     eax, [eax*2+eax]
  26. else if BITS_PER_PIXEL = 32
  27.         shl     eax, 2
  28. end if
  29.   @@:
  30.         push    eax
  31.         add     eax, esi
  32.         cmp     [datapointer], eax
  33.         jae     @f
  34.         call    read_data.more
  35.         pop     eax
  36.         jmp     @b
  37.   @@:
  38.         pop     eax
  39.  
  40.         mov     eax, [rectangle.y]
  41.         movzx   ebx, [screen.width]
  42.         mul     ebx                                     ; [screen.width]*[rectangle.y]
  43.         add     eax, [rectangle.x]                      ; [screen.width]*[rectangle.y]+[rectangle.x]
  44.         lea     edi, [framebuffer+eax*3]                ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
  45.  
  46.         movzx   eax, [screen.width]
  47.         sub     eax, [rectangle.width]
  48.         lea     ebp, [eax*3]                            ; ebp = ([screen.width]-[rectangle.width])*3
  49.  
  50.         mov     edx, [rectangle.height]
  51.  
  52.   .lineloop:
  53.         mov     ecx, [rectangle.width]
  54. if BITS_PER_PIXEL = 24
  55.         lea     ecx, [ecx*2+ecx]
  56. end if
  57.  
  58. if BITS_PER_PIXEL = 8
  59.   .pixelloop:
  60.         mov     bl, 85
  61.         mov     al, [esi]
  62.         shr     al, 6
  63.         and     al, 3
  64.         mul     bl
  65.         stosb                   ; blue
  66.         mov     bl, 36
  67.         mov     al, [esi]
  68.         shr     al, 3
  69.         and     al, 7
  70.         mul     bl
  71.         stosb                   ; green
  72.         mov     al, [esi]
  73.         and     al, 7
  74.         mul     bl
  75.         stosb                   ; red
  76.         inc     esi
  77.         dec     ecx
  78.         jnz     .pixelloop
  79. else if BITS_PER_PIXEL = 16
  80.   .pixelloop:
  81.         lodsw
  82.         mov     bx, ax
  83.         shl     al, 3
  84.         and     al, 0xf8
  85.         stosb                   ; blue
  86.         mov     ax, bx
  87.         shr     ax, 3
  88.         and     al, 0xfc
  89.         stosb                   ; green
  90.         mov     al, bh
  91.         and     al, 0xf8
  92.         stosb                   ; red
  93.         dec     ecx
  94.         jnz     .pixelloop
  95. else if BITS_PER_PIXEL = 24
  96.         rep movsb
  97. else if BITS_PER_PIXEL = 32
  98.   .pixelloop:
  99.         movsw
  100.         movsb
  101.         inc     esi
  102.         dec     ecx
  103.         jnz     .pixelloop
  104. end if
  105.  
  106.         add     edi, ebp
  107.         dec     edx
  108.         jnz     .lineloop
  109.         jmp     next_rectangle
  110.