home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / video / 5 / 5_11.asm < prev    next >
Encoding:
Assembly Source File  |  1988-08-11  |  1.7 KB  |  89 lines

  1.         TITLE    'Listing 5-11'
  2.         NAME    SetPixel04
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        SetPixel04
  7. ;
  8. ; Function:    Set the value of a pixel in 320x200 4-color mode
  9. ;
  10. ; Caller:    Microsoft C:
  11. ;
  12. ;            void SetPixel(x,y,n);
  13. ;
  14. ;            int x,y;        /* pixel coordinates */
  15. ;
  16. ;            int n;            /* pixel value */
  17. ;
  18.  
  19. ARGx        EQU    word ptr [bp+4]    ; stack frame addressing
  20. ARGy        EQU    word ptr [bp+6]
  21. ARGn        EQU    byte ptr [bp+8]
  22.  
  23.  
  24. DGROUP        GROUP    _DATA
  25.  
  26. _TEXT        SEGMENT    byte public 'CODE'
  27.         ASSUME    cs:_TEXT,ds:DGROUP
  28.  
  29.         EXTRN    PixelAddr04:near
  30.  
  31.         PUBLIC    _SetPixel04
  32. _SetPixel04    PROC    near
  33.  
  34.         push    bp        ; preserve caller registers
  35.         mov    bp,sp
  36.  
  37.         mov    ax,ARGy        ; AX := y
  38.         mov    bx,ARGx        ; BX := x
  39.         call    PixelAddr04    ; AH := bit mask
  40.                     ; ES:BX -> buffer
  41.                     ; CL := #bits to shift left
  42.  
  43.         mov    al,ARGn
  44.         shl    ax,cl        ; AH := bit mask in proper position
  45.                     ; AL := pixel value in proper position
  46.  
  47.         jmp    word ptr SetPixelOp04    ; jump to Replace, AND,
  48.                         ;  OR or XOR routine
  49.  
  50.  
  51.                     ; routine to Replace pixel value
  52.  
  53. ReplacePixel04:    not    ah        ; AH := inverse bit mask
  54.         and    es:[bx],ah    ; zero the pixel value
  55.         or    es:[bx],al    ; set the pixel value
  56.         jmp    short L02
  57.  
  58.                     ; routine to AND pixel value
  59.  
  60. ANDPixel04:    not    ah        ; AH := inverse bit mask
  61.         or    al,ah        ; AL := all 1's except pixel value
  62.         and    es:[bx],al
  63.         jmp    short L02
  64.                 
  65.                     
  66. ORPixel04:    or    es:[bx],al    ; routine to OR pixel value
  67.         jmp    short L02
  68.  
  69.  
  70. XORPixel04:    xor    es:[bx],al    ; routine to XOR pixel value
  71.         
  72.  
  73. L02:        mov    sp,bp        ; restore caller registers and return
  74.         pop    bp
  75.         ret
  76.  
  77. _SetPixel04    ENDP
  78.  
  79. _TEXT        ENDS
  80.  
  81.  
  82. _DATA        SEGMENT    word public 'DATA'
  83.  
  84. SetPixelOp04    DW      ReplacePixel04  ; contains addr of pixel operation
  85.  
  86. _DATA        ENDS
  87.  
  88.         END
  89.