home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-ASM_VI.ARJ / PROGASM.ZIP / PROG083P.ASM < prev    next >
Assembly Source File  |  1988-04-17  |  2KB  |  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+8]        ;Formal parameters on stack
  18. Y        EQU    [BP+6]
  19.  
  20.     PUBLIC    Pixel_Read
  21.  
  22. Pixel_Read    PROC    FAR
  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    4
  69. Pixel_Read    ENDP
  70.