home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / TANK11.ZIP / SOURCE.ZIP / GBB06.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-01-16  |  1.6 KB  |  122 lines

  1. ; int GetBitBlock13(x0, y0, x1, y1, buf)
  2. ;    x0,y0: upper left
  3. ;    x1,y1: lower right
  4. ;    char far *buf buffer
  5. ; returns:    size of bit block in system RAM
  6.  
  7. ARGx0    EQU    word ptr [bp+4]
  8. ARGy0    EQU    word ptr [bp+6]
  9. ARGx1    EQU    word ptr [bp+8]
  10. ARGy1    EQU    word ptr [bp+10]
  11. ADDRbuf    EQU             [bp+12]
  12.  
  13. VARPixelRows    EQU    word ptr [bp-2]
  14. VARPixelRowLen    EQU    word ptr [bp-4]
  15. VARincr    EQU    word ptr [bp-6]
  16.  
  17. ByteOffsetShift EQU    1        ;# Pixels/byte
  18.  
  19. _TEXT    SEGMENT    byte public 'CODE'
  20.     ASSUME    cs:_TEXT
  21.  
  22.     EXTRN    PixelAddr13:near
  23.  
  24.     PUBLIC    _GetBitBlock13
  25. _GetBitBlock13    PROC    near
  26.  
  27.     push    bp
  28.     mov    bp,sp
  29.     sub    sp,6
  30.     push    ds
  31.     push    si
  32.     push    di
  33.  
  34. ;compute dimensions
  35.  
  36.     mov    ax,ARGx1
  37.     sub    ax,ARGx0
  38.     mov    cx,0FF07h
  39.  
  40.     and    cl,al
  41.  
  42.     xor    cl,7
  43.     shl    ch,cl
  44.     mov    cl,ch
  45.     push    cx
  46.  
  47.     mov    cl,ByteOffsetShift
  48.     shr    ax,cl
  49.     inc    ax
  50.     push    ax
  51.  
  52.     mov    ax,ARGy1
  53.     sub    ax,ARGy0
  54.     inc    ax
  55.     push    ax
  56.  
  57. ;extablish addressing
  58.  
  59.     mov    ax,ARGy0
  60.     mov    bx,ARGx0
  61.     call    PixelAddr13
  62.     xor     cl,7
  63.     push    es
  64.     pop    ds
  65.     mov    si,bx
  66.  
  67.     mov    bx,2000h
  68.  
  69.     test    si,2000h
  70.     jz    L01
  71.  
  72.     mov    bx,80-2000h
  73.  
  74. L01:    mov    VARincr,bx
  75.  
  76.     les    di,ADDRbuf;
  77.  
  78. ;build five byte header
  79.  
  80.     pop    ax
  81.     mov    VARPixelRows,ax
  82.     stosw
  83.     pop    ax
  84.     mov    VARPixelRowLen,ax
  85.     stosw
  86.     pop    ax
  87.     mov    ch,al
  88.     stosb
  89.  
  90. ;copy from video buffer to ram
  91. L02:    mov    bx,VARPixelRowLen
  92.     push    si
  93.  
  94. L03:    lodsw
  95.  
  96.     dec    si
  97.     rol    ax,cl
  98.     stosb    
  99.     dec    bx
  100.     jnz    L03
  101.  
  102.     and    es:[di-1],ch
  103.     pop    si
  104.     add    si,VARincr
  105.     xor    VARincr,2000h XOR (80-2000H)
  106.  
  107.     dec    VARPixelRows
  108.     JNZ    L02
  109.  
  110.     mov    ax,di
  111.     sub    ax,ADDRbuf
  112.  
  113.     pop    di
  114.     pop    si
  115.     pop    ds
  116.     mov    sp,bp
  117.     pop    bp
  118.     ret
  119.  
  120. _GetBitBlock13    ENDP
  121. _TEXT    ENDS
  122.     END