home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / p / pchdemo.zip / SOURCEFA.ZIP / CONVERT.ASM < prev    next >
Assembly Source File  |  1992-10-28  |  2KB  |  160 lines

  1. ;       Assemblerroutine CONVERT.ASM
  2. ;
  3. ;       Mit dieser Routine werden Pixel von YUV in 15 Bit RGB konvertiert.
  4. ;
  5. ;       Die Aufteilung ist 0RRRRRGGGGGBBBBB
  6. ;
  7. ;       Folgende Parameter müssen übergeben werden:
  8. ;
  9. ;       CX      =       Anzahl der Pixel
  10. ;       DS:SI   =       Leseadresse der Pixel
  11. ;       ES:DI   =       Schreibadresse der Pixel
  12. ;
  13.  
  14. .186
  15.  
  16. code    segment public
  17.  
  18. assume  cs:code
  19.  
  20. public  convert
  21.  
  22. convert proc near
  23.     jmp    start
  24.  
  25. mode    db    0
  26. y1    db    0
  27. y2    db    0
  28. y3    db    0
  29. y4    db    0
  30. ry    dw    0
  31. gy    dw    0
  32. by    dw    0
  33.  
  34. start:
  35.     mov    cs:mode,ah
  36.     push    ax
  37.     push    bx
  38.     push    cx
  39.     push    dx
  40.     push    si
  41.     push    di
  42.     push    ds
  43.     push    es
  44.         shr     cx,1
  45.     shr    cx,1
  46. st1:
  47.     call    conv
  48.     loop    st1
  49.     pop    es
  50.     pop    ds
  51.     pop    di
  52.     pop    si
  53.     pop    dx
  54.     pop    cx
  55.     pop    bx
  56.     pop    ax
  57.     ret
  58. conv:
  59.         push    cx
  60.     lodsw
  61.     mov    cs:y1,al
  62.     mov    cs:y2,ah
  63.     lodsw
  64.     mov    cs:y3,al
  65.     mov    cs:y4,ah
  66.     xchg    al,ah
  67.     ror    al,1
  68.     ror    al,1
  69.     ror    al,1
  70.     rol    ah,1
  71.     rol    ah,1
  72.     and    ax,0001110011100000b
  73.     add    al,ah
  74.     not    al
  75.     mov    cs:ry,al            ; R-Y
  76.     mov    al,cs:y2
  77.     ror    al,1
  78.     ror    al,1
  79.     ror    al,1
  80.     mov    ah,cs:y1
  81.     rol    ah,1
  82.     rol    ah,1
  83.     and    ax,0001110011100000b
  84.     add    al,ah
  85.     not    al
  86.     mov    cs:by,al            ; B-Y
  87.     mov    ah,cs:ry
  88.     not    ax
  89.         add     al,ah
  90.     rcr    al,1
  91.         mov     cs:gy,al                       ; G-Y
  92.     mov    cl,cs:y1
  93.     and    cx,11111000b
  94.     call    turn
  95.     mov    cl,cs:y2
  96.     and    cx,11111000b
  97.     call    turn
  98.     mov    cl,cs:y3
  99.     and    cx,11111000b
  100.     call    turn
  101.     mov    cl,cs:y4
  102.     and    cx,11111000b
  103.     call    turn
  104.     pop    cx
  105.     ret
  106. turn:
  107.         mov     ax,cx
  108.     add    ax,cs:ry
  109.     sub    ax,128
  110.     jnc    sh21
  111.     mov    ax,0
  112.     jmp    sh22
  113. sh21:
  114.     cmp    ax,256
  115.     jb    sh22
  116.     mov    ax,255
  117. sh22:
  118.     mov    ah,al
  119.     shr    ah,1
  120.     and    ax,0111110000000000b
  121.  
  122.         mov     bx,cx
  123.     add    bx,cs:gy
  124.     sub    bx,128
  125.     jnc    sh23
  126.     mov    bx,0
  127.     jmp    sh24
  128. sh23:
  129.     cmp    bx,256
  130.     jb    sh24
  131.     mov    bx,255
  132. sh24:
  133.     shl    bx,1
  134.     shl    bx,1
  135.     and    bx,0000001111100000b
  136.         add     ax,bx
  137.  
  138.         mov     bx,cx
  139.     add    bx,cs:by
  140.     sub    bx,128
  141.     jnc    sh25
  142.     mov    bx,0
  143.     jmp    sh26
  144. sh25:
  145.     cmp    bx,256
  146.     jb    sh26
  147.     mov    bx,255
  148. sh26:
  149.         shr     bl,1
  150.         shr     bl,1
  151.     shr    bl,1
  152.     and    bx,0000000000011111b
  153.         add     ax,bx
  154.     stosw
  155.         ret
  156.  
  157. convert endp
  158. code    ends
  159. end
  160.