## Display Device Driver Reference for OS/2

[prev][next][parent][TOC]

### IFDEF _8514

This section highlights the most significant differences between the XGA and the 8514/A 32-bit presentation drivers, especially those that relate to the S3 driver. (The S3 chip is a streamlined 8514/A design with a VGA chip core.)

The 8514/A driver's register set is different from the XGA driver's register set. In the original XGA driver, it was difficult to determine what to change when adapting the driver to another chip because so much of the code was identical for hard-draw and soft-draw modes. For example, if you went into a file such as EDDHBBLT.ASM, and started replacing memregwrite's macro with a particular video chip that was needed, you had to be careful not to break the bit-map drawing code. The EDDHBBLT.ASM file is assembled twice, once for drawing to the display, and once for drawing to bit maps. The bit map drawing code for the 8514/A driver emulates an XGA, while the display code works with the 8514/A hardware. As a result, files such as EDDHBBLT.ASM tend to have the following structure:

    IFDEF HARD_DRAW
    DoSomething   equ    _eddh_DoSomething  ;do something to the display

    ELSE    ;SOFT_DRAW
    DoSomething   equ    _eddf_DoSomething  ;do something to a memory bit map

    ENDIF

    DoSomething     proc near
    ;       do some generic setup common to both
            memregwrite
            memregread
            memregwrite
    ;       etc., etc.

    IFDEF HARD_DRAW
    IFDEF _8514
    ;       8514/A specific setup
            .
            .
            .
    ENDIF   ;_8514
    ENDIF   ;HARD_DRAW

    ;       more setup common to both
            memregwrite
            memregwrite
            memregwrite
            memregwrite
            .
            .
            .
            memregwrite     pixel_op, ...

    IFDEF   HARD_DRAW
    IFDEF   _8514
            outwq   X1, ax
            outwq   X2, bx
            .
            .
            .
            outwq   CMD_FLAGS, ...  ;do the 8514/A command
    ENDIF   ;_8514
    ELSE    ;SOFT_DRAW
            saveregs
            call    _eddf_MESS
            restoreregs
    ENDIF   ;SOFT_DRAW

            ret
    DoSomething     endp