Subversion Repositories Kolibri OS

Rev

Rev 5722 | 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.  
  55. if BITS_PER_PIXEL = 8
  56.   .pixelloop:
  57.         xor     eax, eax
  58.         lodsb
  59.         mov     eax, [lut_8bpp+eax*4]
  60.         stosw
  61.         shr     eax, 16
  62.         stosb
  63.         dec     ecx
  64.         jnz     .pixelloop
  65. else if BITS_PER_PIXEL = 16
  66.   .pixelloop:
  67.         lodsw
  68.         mov     bx, ax
  69.         shl     al, 3
  70.         and     al, 0xf8
  71.         stosb                   ; blue
  72.         mov     ax, bx
  73.         shr     ax, 3
  74.         and     al, 0xfc
  75.         stosb                   ; green
  76.         mov     al, bh
  77.         and     al, 0xf8
  78.         stosb                   ; red
  79.         dec     ecx
  80.         jnz     .pixelloop
  81. else if BITS_PER_PIXEL = 24
  82.         lea     ecx, [ecx*2+ecx]
  83.         rep movsb
  84. else if BITS_PER_PIXEL = 32
  85.   .pixelloop:
  86.         movsw
  87.         movsb
  88.         inc     esi
  89.         dec     ecx
  90.         jnz     .pixelloop
  91. end if
  92.  
  93.         add     edi, ebp
  94.         dec     edx
  95.         jnz     .lineloop
  96.         jmp     next_rectangle
  97.