mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.0 KiB
108 lines
2.0 KiB
title "Wd Hard.asm"
|
|
;++
|
|
;
|
|
; Copyright (c) 1992 Microsoft Corporation
|
|
; Copyright (c) 1993 Western Digital Corporation
|
|
;
|
|
; Module Name:
|
|
;
|
|
; vgahard.asm
|
|
;
|
|
; Abstract:
|
|
;
|
|
; This module implements the baning code for the WD90Cxx.
|
|
;
|
|
; Environment:
|
|
;
|
|
; Kernel mode only.
|
|
;
|
|
; Author:
|
|
;
|
|
; Chung-I Chiang, Harold Huang Western Digital Corporation
|
|
;
|
|
; Revision History:
|
|
;
|
|
;
|
|
;--
|
|
|
|
.386p
|
|
.xlist
|
|
include callconv.inc ; calling convention macros
|
|
.list
|
|
|
|
;---------------------------------------
|
|
;
|
|
; Western Digital banking control port.
|
|
;
|
|
|
|
SEGMENT_SELECT_PORT equ 03ceh ;banking control here
|
|
SEQ_ADDRESS_PORT equ 03C4h ;Sequencer Address register
|
|
WD_PR0A equ 09h
|
|
WD_PR0B equ 0Ah
|
|
IND_MEMORY_MODE equ 04h ;Memory Mode register index in Sequencer
|
|
CHAIN4_MASK equ 08h ;Chain4 bit in Memory Mode register
|
|
|
|
|
|
_TEXT SEGMENT DWORD PUBLIC 'CODE'
|
|
ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
|
|
|
|
page ,132
|
|
subttl "Bank Switching Stub"
|
|
|
|
;
|
|
; Bank switching code. This is a 1-64K-read/1-64K-write bank adapter
|
|
; (VideoBanked1R1W).
|
|
;
|
|
; Input:
|
|
; EAX = desired read bank mapping
|
|
; EDX = desired write bank mapping
|
|
;
|
|
; Note: values must be correct, with no stray bits set; no error
|
|
; checking is performed.
|
|
;
|
|
public _BankSwitchStart
|
|
public _BankSwitchEnd
|
|
|
|
align 4
|
|
|
|
_BankSwitchStart proc ;start of bank switch code
|
|
|
|
push ebx
|
|
push eax
|
|
push edx
|
|
mov dx,SEGMENT_SELECT_PORT
|
|
in al,dx
|
|
mov ebx,eax ;must save 3CE current index
|
|
pop edx
|
|
pop eax
|
|
|
|
push edx
|
|
shl eax,12 ;read bank in PRO0A
|
|
mov al,WD_PR0A
|
|
mov dx,SEGMENT_SELECT_PORT
|
|
out dx,ax
|
|
pop edx
|
|
|
|
mov eax,edx
|
|
shl eax,12 ;write bank in PRO0B
|
|
mov al,WD_PR0B
|
|
mov dx,SEGMENT_SELECT_PORT
|
|
out dx,ax
|
|
|
|
mov eax,ebx ;restore 3CE index
|
|
mov dx,SEGMENT_SELECT_PORT
|
|
out dx,al
|
|
pop ebx
|
|
|
|
ret ; This should be a fatal error ...
|
|
|
|
_BankSwitchEnd:
|
|
|
|
_BankSwitchStart endp
|
|
|
|
_TEXT ends
|
|
end
|
|
|
|
|
|
|
|
|