home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG083.ASM < prev    next >
Assembly Source File  |  1988-04-10  |  3KB  |  70 lines

  1.  
  2. ;************************************************************************
  3. ; Prameter and constant definitions                                     *
  4. ;************************************************************************
  5.  
  6. GRAPHICS_CTL    EQU     3CEH            ;Address of Graphics controller
  7. SEQUENCE_CTL    EQU     3C4H            ;Address the Sequencer
  8.  
  9. XSIZE   EQU     640                     ;Assume 640 pixels across
  10. HBYTES  EQU     (XSIZE/8)               ;Compute bytes per raster
  11. GRAPH_SEG       EQU     0A000H          ;Segment of display buffer
  12.  
  13. ;************************************************************************
  14. ; Read value of the pixel at x,y and return value in AX                 *
  15. ;************************************************************************
  16.  
  17. X               EQU     [BP+4]          ;Formal parameters on stack
  18. Y               EQU     [BP+6]
  19.  
  20.         PUBLIC  _Pixel_Read
  21.  
  22. _Pixel_Read     PROC    NEAR
  23.         PUSH    BP
  24.         MOV     BP,SP
  25.         PUSH    ES
  26.         PUSH    SI
  27.  
  28.         ; Convert x,y address into OFFSET:SEGMENT and get MASK
  29.  
  30.         MOV     BX,X                    ;Fetch X coordinate
  31.         MOV     AX,Y                    ;Fetch Y coordinate
  32.         CALL    Get_Address             ;Compute SEGMENT:OFFSET address
  33.                                         ;in ES:BX, Mask in CL
  34.  
  35.         ; Set MAP MASK register to read next plane and read next plane
  36.  
  37.         MOV     DX,GRAPHICS_CTL
  38.         MOV     AL,04H                  ;Select MAP MASK register
  39.         OUT     DX,AL
  40.         INC     DX
  41.  
  42.         MOV     SI,BX                   ;Copy offset into register SI
  43.         XOR     BH,BH                   ;Clear color
  44.         MOV     BL,CL                   ;Copy mask into register CL
  45.         MOV     CX,4                    ;Initialize loop counter
  46. Read_Plane_Loop:
  47.         SHL     BH,1
  48.         MOV     AL,CL                   ;Select next plane for read
  49.         DEC     AL
  50.         OUT     DX,AL
  51.  
  52.         MOV     AH,ES:[SI]              ;Fetch values for 8 pixels in plane 0
  53.         AND     AH,BL                   ;Mask of the bit for our pixel (mask in
  54.         JZ      Zero_Value              ;Put 0 into next color bit
  55.         OR      BH,1                    ;Put 1 into next color bit
  56. Zero_Value:
  57.         LOOP    Read_Plane_Loop
  58.  
  59.         MOV     AL,BH                   ;Put result into AX
  60.         XOR     AH,AH
  61.  
  62.         ; Restore segment registers and return
  63.  
  64.         POP     SI
  65.         POP     ES                      ;Restore registers
  66.         MOV     SP,BP
  67.         POP     BP
  68.         RET
  69. _Pixel_Read     ENDP
  70.