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

  1.         TITLE    'Listing 5-13'
  2.         NAME    SetPixel10
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        SetPixel10
  7. ;
  8. ; Function:    Set the value of a pixel in native EGA graphics modes.
  9. ;
  10. ;        *** Write Mode 0, Sequencer Map Mask ***
  11. ;
  12. ; Caller:    Microsoft C:
  13. ;
  14. ;            void SetPixel(x,y,n);
  15. ;
  16. ;            int x,y;        /* pixel coordinates */
  17. ;
  18. ;            int n;            /* pixel value */
  19. ;
  20.  
  21. ARGx        EQU    word ptr [bp+4]    ; stack frame addressing
  22. ARGy        EQU    word ptr [bp+6]
  23. ARGn        EQU    byte ptr [bp+8]
  24.  
  25.  
  26. _TEXT        SEGMENT    byte public 'CODE'
  27.         ASSUME    cs:_TEXT
  28.  
  29.         EXTRN    PixelAddr10:near
  30.  
  31.         PUBLIC    _SetPixel10
  32. _SetPixel10    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    PixelAddr10    ; AH := bit mask
  40.                     ; ES:BX -> buffer
  41.                     ; CL := # bits to shift left
  42.  
  43. ; set Graphics Controller Bit Mask register
  44.  
  45.         shl    ah,cl        ; AH := bit mask in proper position
  46.         mov    dx,3CEh        ; Graphics Controller address reg port
  47.         mov    al,8        ; AL := Bit Mask register number
  48.         out    dx,ax
  49.  
  50. ; zero the pixel value
  51.  
  52.         mov    al,es:[bx]    ; latch one byte from each bit plane
  53.         mov    byte ptr es:[bx],0  ; zero masked bits in all planes
  54.  
  55. ; set Sequencer Map Mask register
  56.  
  57.         mov    dl,0C4h        ; DX := 3C4h (Sequencer addr reg port)
  58.         mov    ah,ARGn        ; AH := value for Map Mask register
  59.                     ;  (nonzero bits in pixel value select
  60.                     ;    enabled bit planes for Sequencer)
  61.         mov    al,2        ; AL := Map Mask register number
  62.         out    dx,ax
  63.  
  64. ; set the nonzero bits in the pixel value
  65.  
  66.         mov    byte ptr es:[bx],0FFh ; set bits in enabled bit planes
  67.  
  68. ; restore default Sequencer registers
  69.  
  70.         mov    ah,0Fh        ; AH := value for Map Mask reg (all bit
  71.                     ;  planes enabled)
  72.         out    dx,ax
  73.  
  74. ; restore default Graphics Controller registers
  75.  
  76.         mov    dl,0CEh        ; DX := 3CEh (Graphics Controller port)
  77.         mov    ax,0FF08h    ; default Bit Mask
  78.         out    dx,ax
  79.  
  80.         mov    sp,bp        ; restore caller registers and return
  81.         pop    bp
  82.         ret
  83.  
  84. _SetPixel10    ENDP
  85.  
  86. _TEXT        ENDS
  87.  
  88.         END
  89.