Annotation of ntddk/src/video/displays/vga/i386/devdata.inc, revision 1.1.1.1

1.1       root        1: ;---------------------------Module-Header------------------------------;
                      2: ; Module Name: devdata.inc
                      3: ;
                      4: ; Copyright (c) 1992 Microsoft Corporation
                      5: ;-----------------------------------------------------------------------;
                      6: 
                      7: ; Instructions used in the compiler.  Word quantities have already been
                      8: ; swapped so that they come out correctly when stored.
                      9: 
                     10: I_ADD_AL_BYTE_I         equ       004h      ; ADD   al,12h
                     11: I_ADD_EDI_DWORD_I       equ     0C781h      ; ADD   edi,12345678h
                     12: I_ADD_ESI_DWORD_I       equ     0C681h      ; ADD   esi,12345678h
                     13: I_AND_AL_BYTE_I         equ       024h      ; AND   al,12h
                     14: I_AND_AL_MEM            equ     00522h      ; AND   al,[byteaddr]
                     15: I_CALL_DISP32           equ       0E8h      ; CALL  12345678h
                     16: I_DEC_ECX               equ       049h      ; DEC   ecx
                     17: I_DEC_ESI_DEC_EDI       equ     04F4Eh      ; DEC   esi
                     18:                                             ; DEC   edi
                     19: I_INC_ESI_INC_EDI       equ     04746h      ; INC   esi
                     20:                                             ; INC   edi
                     21: I_JMP_DISP32            equ       0E9h      ; JMP   12345678h
                     22: I_JNC_DISP32            equ     0830Fh      ; JNC   $+12345678h
                     23: I_JNZ_DISP32            equ     0850fh      ; JNZ   $+12345678h
                     24: I_LODSB                 equ       0ACh      ; LODSB
                     25: I_LOOP                  equ       0E2h      ; LOOP  $
                     26: I_MOVSB                 equ       0A4h      ; MOVSB
                     27: I_MOV_AH_AL             equ     0E08Ah      ; MOV   ah,al
                     28: I_MOV_AH_DEST           equ     0278Ah      ; MOV   ah,[edi]
                     29: I_MOV_AH_ESI_DISP32     equ     0A68Ah      ; MOV   ah,12345678h[esi]
                     30: I_MOV_AL_0FFH           equ     0FFB0h      ; MOV   al,0FFH
                     31: I_MOV_AL_DH             equ     0C68Ah      ; MOV   al,dh
                     32: I_MOV_AL_ESI_DISP32     equ     0868Ah      ; MOV   al,12345678h[esi]
                     33: I_MOV_AL_MEM            equ       0A0h      ; MOV   al,[byteaddr]
                     34: I_MOV_BL_BYTE_I         equ       0B3h      ; MOV   bl,12h
                     35: I_MOV_DH_EBX_DISP8      equ     0738Ah      ; MOV   dh,12h[ebx]
                     36: I_MOV_EBP_DWORD_I       equ       0BDh      ; MOV   ebp,12345678h
                     37: I_MOV_EBX_DWORD_I       equ       0BBh      ; MOV   ebx,12345678h
                     38: I_MOV_ECX_DWORD_I       equ       0B9h      ; MOV   ecx,12345678h
                     39: I_MOV_EDX_DWORD_I       equ       0BAh      ; MOV   ecx,12345678h
                     40: I_MOV_MEM_AL            equ       0A2h      ; MOV   [byteaddr],al
                     41: 
                     42: I_NEG_DH                equ     0DEF6h      ; NEG   dh
                     43: I_NOT_AL                equ     0D0F6h      ; NOT   al
                     44: I_OR_AH_AL              equ     0E00Ah      ; OR    ah,al
                     45: I_OR_AL_AH              equ     0C40Ah      ; OR    al,ah
                     46: I_POP_EBX               equ       05Bh      ; POP   ebx
                     47: I_POP_EDI_POP_ECX       equ     0595Fh      ; POP   edi
                     48:                                             ; POP   ecx
                     49: I_POP_ESI               equ       05Eh      ; POP   esi
                     50: I_PUSH_EBX              equ       053h      ; PUSH  ebx
                     51: I_PUSH_ECX_PUSH_EDI     equ     05751h      ; PUSH  ecx
                     52:                                             ; PUSH  edi
                     53: I_PUSH_ESI              equ       056h      ; PUSH  esi
                     54: I_REP                   equ       0F3h      ; REP
                     55: I_RET                   equ       0C3h      ; RET
                     56: I_ROL_AL_N              equ     0C0C0h      ; ROL   al,2
                     57: I_ROR_AL_N              equ     0C8C0h      ; ROR   al,2
                     58: I_SETNZ_DH              equ   0C6950Fh      ; SETNZ dh
                     59: I_SHL_BL_1              equ     0E3D0h      ; SHL   bl,1
                     60: I_SIZE_OVERRIDE         equ       066h      ; size override
                     61: I_STOSB                 equ       0AAh      ; STOSB
                     62: I_TEST_BL_BYTE_I        equ     0C3F6h      ; TEST  bl,12h
                     63: I_XOR_AL_BYTE_I         equ       034h      ; XOR   al,12h
                     64: I_XOR_AL_MEM            equ     00532h      ; XOR   al,[byteaddr]
                     65: I_XOR_BH_BH             equ     0FF32h      ; XOR   BH,BH
                     66: 
                     67: ; The following instructions require that I_SIZE_OVERRIDE preceed them
                     68: 
                     69: I_MOVSW                 equ       0A5h      ; MOVSW
                     70: I_MOV_BP_WORD_I         equ       0BDh      ; MOV   bp,1234h
                     71: I_NOT_AX                equ     0D0F7h      ; NOT   ax
                     72: I_STOSW                 equ       0ABh      ; STOSW
                     73: I_XOR_AX_WORD_I         equ       035h      ; XOR   ax,12h
                     74: I_XOR_EAX_EAX           equ     0C033h      ; xor eax, eax
                     75: 
                     76: 
                     77: ;-----------------------------------------------------------------------;
                     78: ; phase_align - Template for phase alignment code
                     79: ;
                     80: ; The following code is the template that performs the phase
                     81: ; alignment masking.  The source has already been aligned to
                     82: ; the destination.
                     83: ;
                     84: ; A copy of the aligned source is made.  The phase mask is then
                     85: ; applied to the source and the copy.  The previously unused
                     86: ; bits are ORed into the used bits of the current source, and
                     87: ; the unused bits of the current source then become the unused
                     88: ; bits for the next source.
                     89: ;
                     90: ; It assumes:
                     91: ;         BP  =  phase alignment mask
                     92: ;         AL  =  current byte to mask
                     93: ;         BH  =  old unused bits
                     94: ;-----------------------------------------------------------------------;
                     95: 
                     96: phase_align:
                     97:         mov     ah,al                   ;Make a copy of aligned source
                     98:         and     ax,bp                   ;Masked used, unused bits
                     99:         or      al,bh                   ;Mask in old unused bits
                    100:         mov     bh,ah                   ;Save new unused bits
                    101: 
                    102: PHASE_ALIGN_LEN equ     $-phase_align   ;Length of procedure
                    103: 
                    104: 
                    105: ;-----------------------------------------------------------------------;
                    106: ;       masked_store - Template for storing first and last bytes of BLT
                    107: ;
                    108: ;       The following code is a template for storing the first and last
                    109: ;       bytes of a BLT.  The unaltered bits are saved and the altered
                    110: ;       bits set in the byte, then the byte is stored.
                    111: ;
                    112: ;
                    113: ;       It assumes:
                    114: ;
                    115: ;               AL  =  The byte to be BLTed to the destination bitmap.
                    116: ;                      All necessary logic operations have been performed
                    117: ;                      on this byte.
                    118: ;
                    119: ;               AH  =  The destination byte.
                    120: ;
                    121: ;-----------------------------------------------------------------------;
                    122: 
                    123: masked_store:
                    124:         and     ax,0FFFFh               ;Mask altered/unaltered bits
                    125:         or      al,ah                   ;Combine the bits
                    126:         stosb                           ;And store the result
                    127: 
                    128: MASKED_STORE_LEN        equ     $-masked_store  ;Length of the template
                    129: MASKED_STORE_MASK       equ     -5              ;Offset to where mask goes
                    130: 
                    131: 
                    132: ;-----------------------------------------------------------------------;
                    133: ; EGA Color Plane Setup Code
                    134: ;
                    135: ; The EGA Color Plane Setup Code is used when the EGA is involved
                    136: ; in the BLT, and the BLT isn't from the EGA to a monochrome bitmap.
                    137: ;
                    138: ; The template will be copied, and any required fixups will be
                    139: ; performed.  The very first instruction will be generated on
                    140: ; the fly instead of being copied and fixed-up.
                    141: ;
                    142: ; It assumes:
                    143: ;         BL = MapMask value
                    144: ;-----------------------------------------------------------------------;
                    145: 
                    146: cps:
                    147:         mov     al,MM_ALL               ;Set Map Mask
                    148:         and     al,bl                   ;Isolate the plane
                    149:         mov     dx,EGA_BASE + SEQ_DATA
                    150:         out     dx,al
                    151:         shr     al,1                    ;Map plane into ReadMask
                    152:         cmp     al,100b                 ;Set Carry if not C3 (plane 3)
                    153:         adc     al,-1                   ;Sub 1 only if C3
                    154:         mov     ah,al
                    155:         mov     al,GRAF_READ_MAP
                    156:         mov     dl,GRAF_ADDR
                    157:         out     dx,ax
                    158: 
                    159: LENGTH_CPS      =       $ - cps         ;Length of the code
                    160: 
                    161: 
                    162: ;-----------------------------------------------------------------------;
                    163: ; Mono ==> Color Fetch Code
                    164: ;
                    165: ; The mono ==> color fetch code is generated when the source
                    166: ; is a monochrome bitmap and the destination is color.
                    167: ;
                    168: ; When going from mono to color, 1 bits are considered to be
                    169: ; the background color, and 0 bits are considered to be the
                    170: ; foreground color.
                    171: ;
                    172: ; For each plane:
                    173: ;
                    174: ;   If the foreground=background=1, then 1 can be used in
                    175: ;   place of the source.
                    176: ;
                    177: ;   If the foreground=background=0, then 0 can be used in
                    178: ;   place of the source.
                    179: ;
                    180: ;   If the foreground=0 and background=1, then the source
                    181: ;   can be used as is.
                    182: ;
                    183: ;   If the foreground=1 and background=0, then the source
                    184: ;   must be complemented before using.
                    185: ;
                    186: ; A table will be created for processing the monochrome
                    187: ; bitmap for each plane of the destination.  The table
                    188: ; should look like:
                    189: ;
                    190: ;      BackGnd   ForeGnd    Result    AND  XOR
                    191: ;         1         1         1        00   FF
                    192: ;         0         0         0        00   00
                    193: ;         1         0         S        FF   00
                    194: ;         0         1     not S        FF   FF
                    195: ;
                    196: ; From this, it can be seen that the XOR mask is the same as the
                    197: ; foreground color.  The AND mask is the XOR of the foreground
                    198: ; and the background color.
                    199: ;
                    200: ; It can also be seen that if the background color is white and the
                    201: ; foreground (text) color is black, then the conversion needn't be
                    202: ; generated (it just gives the source).
                    203: ;
                    204: ; The template for rotating the AND and XOR table for the plane
                    205: ; select code is also shown.  It just does a three word rotate
                    206: ; on the AND and XOR masks on the stack.  It is performed at the
                    207: ; end of a scan in anticipation of the next color for that scan.
                    208: ;
                    209: ;     lodsb                           ;Get next byte of source
                    210: ;     and     al,byte ptr ss:[1234h]  ;Process against current AND
                    211: ;     xor     al,byte ptr ss:[1234h]  ;  and XOR masks
                    212: ;-----------------------------------------------------------------------;
                    213: 
                    214: rot_and_xor:
                    215: ;       lea     ebp,ColorMungeTBl           ;--> AND/XOR masks
                    216:         mov     ax,word ptr [ebp][6]        ;Rotate next color's AND and
                    217:         xchg    ax,word ptr [ebp][4]        ;  XOR mask into place
                    218:         xchg    ax,word ptr [ebp][2]        ;  XOR mask into place
                    219:         xchg    ax,word ptr [ebp][0]
                    220:         mov     word ptr [ebp][6],ax
                    221: 
                    222: LEN_ROT_AND_XOR =   $-rot_and_xor
                    223:         page
                    224: 

unix.superglobalmegacorp.com

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