Annotation of ntddk/src/video/miniport/et4000/i386/et4hard.asm, revision 1.1

1.1     ! root        1:         title  "ET4000 ASM routines"
        !             2: ;++
        !             3: ;
        !             4: ; Copyright (c) 1992  Microsoft Corporation
        !             5: ;
        !             6: ; Module Name:
        !             7: ;
        !             8: ;     vgahard.asm
        !             9: ;
        !            10: ; Abstract:
        !            11: ;
        !            12: ;     This module implements the baning code for the et4000.
        !            13: ;
        !            14: ; Environment:
        !            15: ;
        !            16: ;    Kernel mode only.
        !            17: ;
        !            18: ; Revision History:
        !            19: ;
        !            20: ;
        !            21: ;--
        !            22: 
        !            23: .386p
        !            24:         .xlist
        !            25: include callconv.inc
        !            26:         .list
        !            27: 
        !            28: ;---------------------------------------
        !            29: ;
        !            30: ; ET4000 banking control port.
        !            31: ;
        !            32: 
        !            33: SEGMENT_SELECT_PORT equ     03cdh      ;banking control here
        !            34: SEQ_ADDRESS_PORT equ        03C4h      ;Sequencer Address register
        !            35: IND_MEMORY_MODE  equ        04h        ;Memory Mode register index in Sequencer
        !            36: CHAIN4_MASK      equ        08h        ;Chain4 bit in Memory Mode register
        !            37: 
        !            38: ;---------------------------------------
        !            39: 
        !            40: _TEXT   SEGMENT DWORD USE32 PUBLIC 'CODE'
        !            41:         ASSUME  CS:FLAT, DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
        !            42: ;
        !            43: ;    Bank switching code. This is a 1-64K-read/1-64K-write bank adapter
        !            44: ;    (VideoBanked1R1W).
        !            45: ;
        !            46: ;    Input:
        !            47: ;          EAX = desired read bank mapping
        !            48: ;          EDX = desired write bank mapping
        !            49: ;
        !            50: ;    Note: values must be correct, with no stray bits set; no error
        !            51: ;       checking is performed.
        !            52: ;
        !            53:         public _BankSwitchStart, _BankSwitchEnd, _PlanarHCBankSwitchStart
        !            54:         public _EnablePlanarHCStart, _DisablePlanarHCStart
        !            55:         align 4
        !            56: 
        !            57: _BankSwitchStart proc                   ;start of bank switch code
        !            58: _PlanarHCBankSwitchStart:               ;start of planar HC bank switch code,
        !            59:                                         ; which is the same code as normal
        !            60:                                         ; bank switching
        !            61:         shl     eax,4                   ;shift them to bits 7-4
        !            62:         or      al,dl                   ;read bank in bits 7-4, write bank
        !            63:                                         ; in bits 3-0
        !            64:         mov     dx,SEGMENT_SELECT_PORT  ;banking control port
        !            65:         out     dx,al                   ;select the banks
        !            66: 
        !            67:         ret
        !            68: 
        !            69:         align 4
        !            70: _EnablePlanarHCStart:
        !            71:         mov     dx,SEQ_ADDRESS_PORT
        !            72:         in      al,dx
        !            73:         push    eax                     ;preserve the state of the Seq Address
        !            74:         mov     al,IND_MEMORY_MODE
        !            75:         out     dx,al                   ;point to the Memory Mode register
        !            76:         inc     edx
        !            77:         in      al,dx                   ;get the state of the Memory Mode reg
        !            78:         and     al,NOT CHAIN4_MASK      ;turn off Chain4 to make memory planar
        !            79:         out     dx,al
        !            80:         dec     edx
        !            81:         pop     eax
        !            82:         out     dx,al                   ;restore the original Seq Address
        !            83:         ret
        !            84: 
        !            85:         align 4
        !            86: _DisablePlanarHCStart:
        !            87:         mov     dx,SEQ_ADDRESS_PORT
        !            88:         in      al,dx
        !            89:         push    eax                     ;preserve the state of the Seq Address
        !            90:         mov     al,IND_MEMORY_MODE
        !            91:         out     dx,al                   ;point to the Memory Mode register
        !            92:         inc     edx
        !            93:         in      al,dx                   ;get the state of the Memory Mode reg
        !            94:         or      al,CHAIN4_MASK          ;turn on Chain4 to make memory linear
        !            95:         out     dx,al
        !            96:         dec     edx
        !            97:         pop     eax
        !            98:         out     dx,al                   ;restore the original Seq Address
        !            99:         ret
        !           100: 
        !           101: ;
        !           102: ;    Just here to generate end-of-bank-switch code label.
        !           103: ;
        !           104: 
        !           105: _BankSwitchEnd:
        !           106: 
        !           107: _BankSwitchStart endp
        !           108: 
        !           109: 
        !           110: _TEXT   ends
        !           111:         end

unix.superglobalmegacorp.com

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