File:  [WindowsNT SDKs] / ntddk / src / video / displays / vga / i386 / devdata.inc
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:31:12 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntddk-nov-1993, HEAD
Microsoft Windows NT Build 511 (DDK SDK) 11-01-1993

;---------------------------Module-Header------------------------------;
; Module Name: devdata.inc
;
; Copyright (c) 1992 Microsoft Corporation
;-----------------------------------------------------------------------;

; Instructions used in the compiler.  Word quantities have already been
; swapped so that they come out correctly when stored.

I_ADD_AL_BYTE_I         equ       004h      ; ADD   al,12h
I_ADD_EDI_DWORD_I       equ     0C781h      ; ADD   edi,12345678h
I_ADD_ESI_DWORD_I       equ     0C681h      ; ADD   esi,12345678h
I_AND_AL_BYTE_I         equ       024h      ; AND   al,12h
I_AND_AL_MEM            equ     00522h      ; AND   al,[byteaddr]
I_CALL_DISP32           equ       0E8h      ; CALL  12345678h
I_DEC_ECX               equ       049h      ; DEC   ecx
I_DEC_ESI_DEC_EDI       equ     04F4Eh      ; DEC   esi
                                            ; DEC   edi
I_INC_ESI_INC_EDI       equ     04746h      ; INC   esi
                                            ; INC   edi
I_JMP_DISP32            equ       0E9h      ; JMP   12345678h
I_JNC_DISP32            equ     0830Fh      ; JNC   $+12345678h
I_JNZ_DISP32            equ     0850fh      ; JNZ   $+12345678h
I_LODSB                 equ       0ACh      ; LODSB
I_LOOP                  equ       0E2h      ; LOOP  $
I_MOVSB                 equ       0A4h      ; MOVSB
I_MOV_AH_AL             equ     0E08Ah      ; MOV   ah,al
I_MOV_AH_DEST           equ     0278Ah      ; MOV   ah,[edi]
I_MOV_AH_ESI_DISP32     equ     0A68Ah      ; MOV   ah,12345678h[esi]
I_MOV_AL_0FFH           equ     0FFB0h      ; MOV   al,0FFH
I_MOV_AL_DH             equ     0C68Ah      ; MOV   al,dh
I_MOV_AL_ESI_DISP32     equ     0868Ah      ; MOV   al,12345678h[esi]
I_MOV_AL_MEM            equ       0A0h      ; MOV   al,[byteaddr]
I_MOV_BL_BYTE_I         equ       0B3h      ; MOV   bl,12h
I_MOV_DH_EBX_DISP8      equ     0738Ah      ; MOV   dh,12h[ebx]
I_MOV_EBP_DWORD_I       equ       0BDh      ; MOV   ebp,12345678h
I_MOV_EBX_DWORD_I       equ       0BBh      ; MOV   ebx,12345678h
I_MOV_ECX_DWORD_I       equ       0B9h      ; MOV   ecx,12345678h
I_MOV_EDX_DWORD_I       equ       0BAh      ; MOV   ecx,12345678h
I_MOV_MEM_AL            equ       0A2h      ; MOV   [byteaddr],al

I_NEG_DH                equ     0DEF6h      ; NEG   dh
I_NOT_AL                equ     0D0F6h      ; NOT   al
I_OR_AH_AL              equ     0E00Ah      ; OR    ah,al
I_OR_AL_AH              equ     0C40Ah      ; OR    al,ah
I_POP_EBX               equ       05Bh      ; POP   ebx
I_POP_EDI_POP_ECX       equ     0595Fh      ; POP   edi
                                            ; POP   ecx
I_POP_ESI               equ       05Eh      ; POP   esi
I_PUSH_EBX              equ       053h      ; PUSH  ebx
I_PUSH_ECX_PUSH_EDI     equ     05751h      ; PUSH  ecx
                                            ; PUSH  edi
I_PUSH_ESI              equ       056h      ; PUSH  esi
I_REP                   equ       0F3h      ; REP
I_RET                   equ       0C3h      ; RET
I_ROL_AL_N              equ     0C0C0h      ; ROL   al,2
I_ROR_AL_N              equ     0C8C0h      ; ROR   al,2
I_SETNZ_DH              equ   0C6950Fh      ; SETNZ dh
I_SHL_BL_1              equ     0E3D0h      ; SHL   bl,1
I_SIZE_OVERRIDE         equ       066h      ; size override
I_STOSB                 equ       0AAh      ; STOSB
I_TEST_BL_BYTE_I        equ     0C3F6h      ; TEST  bl,12h
I_XOR_AL_BYTE_I         equ       034h      ; XOR   al,12h
I_XOR_AL_MEM            equ     00532h      ; XOR   al,[byteaddr]
I_XOR_BH_BH             equ     0FF32h      ; XOR   BH,BH

; The following instructions require that I_SIZE_OVERRIDE preceed them

I_MOVSW                 equ       0A5h      ; MOVSW
I_MOV_BP_WORD_I         equ       0BDh      ; MOV   bp,1234h
I_NOT_AX                equ     0D0F7h      ; NOT   ax
I_STOSW                 equ       0ABh      ; STOSW
I_XOR_AX_WORD_I         equ       035h      ; XOR   ax,12h
I_XOR_EAX_EAX           equ     0C033h      ; xor eax, eax


;-----------------------------------------------------------------------;
; phase_align - Template for phase alignment code
;
; The following code is the template that performs the phase
; alignment masking.  The source has already been aligned to
; the destination.
;
; A copy of the aligned source is made.  The phase mask is then
; applied to the source and the copy.  The previously unused
; bits are ORed into the used bits of the current source, and
; the unused bits of the current source then become the unused
; bits for the next source.
;
; It assumes:
;         BP  =  phase alignment mask
;         AL  =  current byte to mask
;         BH  =  old unused bits
;-----------------------------------------------------------------------;

phase_align:
        mov     ah,al                   ;Make a copy of aligned source
        and     ax,bp                   ;Masked used, unused bits
        or      al,bh                   ;Mask in old unused bits
        mov     bh,ah                   ;Save new unused bits

PHASE_ALIGN_LEN equ     $-phase_align   ;Length of procedure


;-----------------------------------------------------------------------;
;       masked_store - Template for storing first and last bytes of BLT
;
;       The following code is a template for storing the first and last
;       bytes of a BLT.  The unaltered bits are saved and the altered
;       bits set in the byte, then the byte is stored.
;
;
;       It assumes:
;
;               AL  =  The byte to be BLTed to the destination bitmap.
;                      All necessary logic operations have been performed
;                      on this byte.
;
;               AH  =  The destination byte.
;
;-----------------------------------------------------------------------;

masked_store:
        and     ax,0FFFFh               ;Mask altered/unaltered bits
        or      al,ah                   ;Combine the bits
        stosb                           ;And store the result

MASKED_STORE_LEN        equ     $-masked_store  ;Length of the template
MASKED_STORE_MASK       equ     -5              ;Offset to where mask goes


;-----------------------------------------------------------------------;
; EGA Color Plane Setup Code
;
; The EGA Color Plane Setup Code is used when the EGA is involved
; in the BLT, and the BLT isn't from the EGA to a monochrome bitmap.
;
; The template will be copied, and any required fixups will be
; performed.  The very first instruction will be generated on
; the fly instead of being copied and fixed-up.
;
; It assumes:
;         BL = MapMask value
;-----------------------------------------------------------------------;

cps:
        mov     al,MM_ALL               ;Set Map Mask
        and     al,bl                   ;Isolate the plane
        mov     dx,EGA_BASE + SEQ_DATA
        out     dx,al
        shr     al,1                    ;Map plane into ReadMask
        cmp     al,100b                 ;Set Carry if not C3 (plane 3)
        adc     al,-1                   ;Sub 1 only if C3
        mov     ah,al
        mov     al,GRAF_READ_MAP
        mov     dl,GRAF_ADDR
        out     dx,ax

LENGTH_CPS      =       $ - cps         ;Length of the code


;-----------------------------------------------------------------------;
; Mono ==> Color Fetch Code
;
; The mono ==> color fetch code is generated when the source
; is a monochrome bitmap and the destination is color.
;
; When going from mono to color, 1 bits are considered to be
; the background color, and 0 bits are considered to be the
; foreground color.
;
; For each plane:
;
;   If the foreground=background=1, then 1 can be used in
;   place of the source.
;
;   If the foreground=background=0, then 0 can be used in
;   place of the source.
;
;   If the foreground=0 and background=1, then the source
;   can be used as is.
;
;   If the foreground=1 and background=0, then the source
;   must be complemented before using.
;
; A table will be created for processing the monochrome
; bitmap for each plane of the destination.  The table
; should look like:
;
;      BackGnd   ForeGnd    Result    AND  XOR
;         1         1         1        00   FF
;         0         0         0        00   00
;         1         0         S        FF   00
;         0         1     not S        FF   FF
;
; From this, it can be seen that the XOR mask is the same as the
; foreground color.  The AND mask is the XOR of the foreground
; and the background color.
;
; It can also be seen that if the background color is white and the
; foreground (text) color is black, then the conversion needn't be
; generated (it just gives the source).
;
; The template for rotating the AND and XOR table for the plane
; select code is also shown.  It just does a three word rotate
; on the AND and XOR masks on the stack.  It is performed at the
; end of a scan in anticipation of the next color for that scan.
;
;     lodsb                           ;Get next byte of source
;     and     al,byte ptr ss:[1234h]  ;Process against current AND
;     xor     al,byte ptr ss:[1234h]  ;  and XOR masks
;-----------------------------------------------------------------------;

rot_and_xor:
;       lea     ebp,ColorMungeTBl           ;--> AND/XOR masks
        mov     ax,word ptr [ebp][6]        ;Rotate next color's AND and
        xchg    ax,word ptr [ebp][4]        ;  XOR mask into place
        xchg    ax,word ptr [ebp][2]        ;  XOR mask into place
        xchg    ax,word ptr [ebp][0]
        mov     word ptr [ebp][6],ax

LEN_ROT_AND_XOR =   $-rot_and_xor
        page


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.