home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / ASSEMBLE / 80X0992 / SETPIXEL.ASM < prev    next >
Assembly Source File  |  1992-07-30  |  2KB  |  75 lines

  1. comment *
  2.    SETPIXEL.ASM
  3.  
  4.    Author: Matt Pritchard
  5.  
  6.    C:     void SetPixel ( int Xpos, int Ypos, int Color ) 
  7.    Basic: DECLARE SUB SetPixel( BYVAL Xpos%, BYVAL Ypos%, BYVAL Colour% )
  8.  
  9.    Note that "SCREEN_WIDTH" needs to be filled in for whatever mode you 
  10.    are using.
  11. *
  12.  
  13.         .MODEL  Medium
  14.         .CODE
  15.  
  16. SP_Stack        STRUC
  17.                 DW      ?       ;BP
  18.                 DD      ?       ;Caller
  19.         Color   DB      ?,?     ;Color
  20.         Ypos    DW      ?       ;Y pos
  21.         Xpos    DW      ?       ;Mode
  22. SP_Stack        ENDS
  23.  
  24.         PUBLIC  SETPIXEL
  25.  
  26. SETPIXEL        PROC    FAR
  27.  
  28.         PUSH    BP                      ;Setup Stack Frame
  29.         MOV     BP, SP
  30.  
  31.         MOV     AX, SCREEN_WIDTH/8      ;100 bytes/Line in 800x600
  32.                                         ;80 bytes/line in 640x480/350
  33.                                         ;40 bytes line in 320x200
  34.         MUL     [BP].Ypos               ;DX:AX = Offset
  35.         MOV     CX, [BP].Xpos
  36.         MOV     BX ,CX                  ;BX = Xpos
  37.  
  38.         AND     CL, 7                   ;Get Bit Offset in CL
  39.         XOR     CL, 7                   ;Invert
  40.  
  41.         SHR     BX, 1                   ;/2
  42.         SHR     BX, 1                   ;/4
  43.         SHR     BX, 1                   ;/8
  44.         ADD     BX, AX                  ;BX = Offset, Cl = Pixel #
  45.  
  46.         MOV     AX, 0A000h              ;Ega/Vga Graphics Segment
  47.         MOV     ES, AX
  48.         MOV     AH, 1                   ;Unshifted Bit Mask
  49.         SHL     AH, CL                  ;shifted bit mask
  50.  
  51.         MOV     DX, 03CEh               ;Graphics controller
  52.         MOV     AL, 8                   ;Bit mask register
  53.         OUT     DX, AX                  ;set it up
  54.  
  55.         MOV     AX, 0205h               ;read mode 0, write mode 2
  56.         OUT     DX, AX
  57.  
  58.         MOV     AH, 18h                 ;Read-modify-write bits
  59.         MOV     AL, 3                   ;Data Rotate/Func select
  60.         OUT     DX, AX
  61.  
  62.         MOV     AL, ES:[BX]             ;Load latches
  63.         MOV     AL, [BP].Color          ;Get Color
  64.  
  65.         MOV     ES:[BX], AL             ;Update Bit
  66.  
  67.         POP     BP                      ;Restore Stack Frame
  68.  
  69.         RET     6                       ;Exit
  70.  
  71. SETPIXEL        ENDP
  72.  
  73. END
  74.  
  75. ; EOF SETPIXEL.ASM