gx.inc

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· INC 代码 · 共 256 行

INC
256
字号
;
;THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
;ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
;THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
;PARTICULAR PURPOSE.
;Copyright (c) 1995-2000  Microsoft Corporation
;
;Module Name: gx.inc
;
;Abstract: MediaGX assembly support code.
;
;Functions: None.
;
;Notes:
;

; Function Controller Register Base Addresses
GX_BASE                 EQU  040000000H
GX_BASE_ROL             EQU  2

; ScratchPad size
SCPD_BASE		EQU  0400H	; 3KB scratchpad (base = 4KB - 3KB)
SCPD_SIZE_0KB		EQU  00H
SCPD_SIZE_2KB		EQU  01H
SCPD_SIZE_3KB		EQU  02H	; ***
SCPD_SIZE_4KB		EQU  03H

; GX_BASE-based register offsets
PCI_ACCESS_BASE         EQU  (GX_BASE + 01000H)

; Bus Controller
BC_REG_BASE		EQU  (GX_BASE + 08000H)
  BC_DRAM_TOP		EQU  (BC_REG_BASE + 00H)
  BC_XMAP_1		EQU  (BC_REG_BASE + 04H)
  BC_XMAP_2		EQU  (BC_REG_BASE + 08H)
  BC_XMAP_3		EQU  (BC_REG_BASE + 0CH)

; Graphics Pipeline Controller
GP_REG_BASE		EQU  (GX_BASE + 08100H)
  GP_DST		EQU  (GP_REG_BASE + 00H)
  GP_WIDTH		EQU  (GP_REG_BASE + 04H)
  GP_SRC_X		EQU  (GP_REG_BASE + 08H)
  GP_SRC_COLOR_0	EQU  (GP_REG_BASE + 0CH)
  GP_PAT_COLOR_0	EQU  (GP_REG_BASE + 10H)
  GP_PAT_COLOR_2	EQU  (GP_REG_BASE + 14H)
  GP_PAT_DATA_0		EQU  (GP_REG_BASE + 20H)
  GP_PAT_DATA_1		EQU  (GP_REG_BASE + 24H)
  GP_PAT_DATA_2		EQU  (GP_REG_BASE + 28H)
  GP_PAT_DATA_3		EQU  (GP_REG_BASE + 2CH)
  GP_VGA_WRITE		EQU  (GP_REG_BASE + 40H)
  GP_VGA_READ		EQU  (GP_REG_BASE + 44H)
  GP_RASTER_MODE	EQU  (GP_REG_BASE + 100H)
  GP_VECTOR_MODE	EQU  (GP_REG_BASE + 104H)
  GP_BLT_MODE		EQU  (GP_REG_BASE + 108H)
  GP_BLT_STATUS		EQU  (GP_REG_BASE + 10CH)
  GP_VGA_BASE		EQU  (GP_REG_BASE + 110H)
  GP_VGA_LATCH		EQU  (GP_REG_BASE + 114H)

; Display Controller
DC_REG_BASE		EQU  (GX_BASE + 08300H)
  DC_UNLOCK		EQU  (DC_REG_BASE + 00H)
  DC_GENERAL_CFG	EQU  (DC_REG_BASE + 04H)
  DC_TIMING_CFG		EQU  (DC_REG_BASE + 08H)
  DC_OUTPUT_CFG		EQU  (DC_REG_BASE + 0CH)
  DC_FB_ST_OFFSET	EQU  (DC_REG_BASE + 10H)
  DC_CB_ST_OFFSET	EQU  (DC_REG_BASE + 14H)
  DC_CURS_ST_OFFSET	EQU  (DC_REG_BASE + 18H)
  DC_VID_ST_OFFSET	EQU  (DC_REG_BASE + 20H)
  DC_LINE_DELTA		EQU  (DC_REG_BASE + 24H)
  DC_BUF_SIZE		EQU  (DC_REG_BASE + 28H)
  DC_H_TIMING_1		EQU  (DC_REG_BASE + 30H)
  DC_H_TIMING_2		EQU  (DC_REG_BASE + 34H)
  DC_H_TIMING_3		EQU  (DC_REG_BASE + 38H)
  DC_FP_H_TIMING	EQU  (DC_REG_BASE + 3CH)
  DC_V_TIMING_1		EQU  (DC_REG_BASE + 40H)
  DC_V_TIMING_2		EQU  (DC_REG_BASE + 44H)
  DC_V_TIMING_3		EQU  (DC_REG_BASE + 48H)
  DC_FP_V_TIMING	EQU  (DC_REG_BASE + 4CH)
  DC_CURSOR_X		EQU  (DC_REG_BASE + 50H)
  DC_V_LINE_CNT		EQU  (DC_REG_BASE + 54H)
  DC_CURSOR_Y		EQU  (DC_REG_BASE + 58H)
  DC_SS_LINE_CMP	EQU  (DC_REG_BASE + 5CH)
  DC_CURSOR_COLOR	EQU  (DC_REG_BASE + 60H)
  DC_BORDER_COLOR	EQU  (DC_REG_BASE + 68H)
  DC_PAL_ADDRESS	EQU  (DC_REG_BASE + 70H)
  DC_PAL_DATA		EQU  (DC_REG_BASE + 74H)
  DC_DFIFO_DIAG		EQU  (DC_REG_BASE + 78H)
  DC_CFIFO_DIAG		EQU  (DC_REG_BASE + 7CH)

; Memory Controller
MC_REG_BASE		EQU  (GX_BASE + 08400H)
  MC_MEM_CNTRL1		EQU  (MC_REG_BASE + 00H)
  MC_MEM_CNTRL2		EQU  (MC_REG_BASE + 04H)
  MC_BANK_CFG		EQU  (MC_REG_BASE + 08H)
  MC_SYNC_TIM1		EQU  (MC_REG_BASE + 0CH)
  MC_GBASE_ADD		EQU  (MC_REG_BASE + 14H)
  MC_DR_ADD		EQU  (MC_REG_BASE + 18H)
  MC_DR_ACC		EQU  (MC_REG_BASE + 1CH)

; Power Management Controller
PM_REG_BASE		EQU  (GX_BASE + 08500H)
  PM_STAT_SMI		EQU  (PM_REG_BASE + 00H)
  PM_CNTRL_TEN		EQU  (PM_REG_BASE + 04H)
  PM_CNTRL_CSTP		EQU  (PM_REG_BASE + 08H)
  PM_SER_PACK		EQU  (PM_REG_BASE + 0CH)

; MediaGX Configuration Register Indexes (Port Addresses)
 CREG_INDEX_CCR1    EQU   0C1H
 CREG_INDEX_CCR2    EQU   0C2H
 CREG_INDEX_CCR3    EQU   0C3H
 CREG_INDEX_CCR4    EQU   0E8H
 CREG_INDEX_CCR7    EQU   0EBH
 CREG_INDEX_PCR     EQU   020H
 CREG_INDEX_SMHR0   EQU   0B0H
 CREG_INDEX_SMHR1   EQU   0B1H
 CREG_INDEX_SMHR2   EQU   0B2H
 CREG_INDEX_SMHR3   EQU   0B3H
 CREG_INDEX_GCR     EQU   0B8H
 CREG_INDEX_VGACTL  EQU   0B9H
 CREG_INDEX_VGAM0_0 EQU   0BAH
 CREG_INDEX_VGAM0_1 EQU   0BBH
 CREG_INDEX_VGAM0_2 EQU   0BCH
 CREG_INDEX_VGAM0_3 EQU   0BDH
 CREG_INDEX_SMAR0   EQU   0CDH
 CREG_INDEX_SMAR1   EQU   0CEH
 CREG_INDEX_SMAR2   EQU   0CFH
 CREG_INDEX_DIR0    EQU   0FEH
 CREG_INDEX_DIR1    EQU   0FFH

; MediaGX Configuration Register Control and Data Port Addresses
; To access a configuration register, write the creg index to port 022H
; and read/write from port 023H
CREG_ADDR_PORT     EQU   022H
CREG_DATA_PORT     EQU   023H

; CPU-Access Registers
L1_BB0_BASE    EQU   0FFFFFF0CH     ; BLT buffer 0 base address
L1_BB1_BASE    EQU   0FFFFFF1CH     ; BLT buffer 1 base address
L1_BB0_POINTER EQU   0FFFFFF2CH     ; BLT buffer 0 pointer address
L1_BB1_POINTER EQU   0FFFFFF3CH     ; BLT buffer 1 pointer address
PM_BASE        EQU   0FFFFFF6CH     ; Power management base address
PM_MASK        EQU   0FFFFFF7CH     ; Power management address mask

; Display BLT buffer scratchpad offsets
BB0_BASE_OFFSET	   EQU   0400H		; BLT buffer 0 offset into scratchpad
BB1_BASE_OFFSET	   EQU   0930H		; BLT buffer 0 offset into scratchpad

;------------------------------------
; Support Macros
;------------------------------------
; Read from configuration register
; ** Don't use Stack **
CREG_READ       MACRO           Reg, Dest
    xor     al, al
    mov     al, Reg
    out     CREG_ADDR_PORT, al
    xor     al, al
    in      al, CREG_DATA_PORT
    mov     Dest, al
ENDM

;------------------------------------
; Write to configuration register
; ** Don't use Stack **
CREG_WRITE      MACRO           Reg, Src
    xor     ax, ax
    mov     al, Reg
    out     CREG_ADDR_PORT, al
    mov     al, Src
    out     CREG_DATA_PORT, al
ENDM


;-----------------------------------------------------
; Write ULONG to memory-mapped controller register
; ** Don't use Stack **
MMREG_WRITE_32      MACRO           Addr, Src
    xor     eax, eax
    mov     ebx, eax
    mov     eax, Addr
    mov     ebx, Src
    mov     [eax], ebx
ENDM


;-----------------------------------------------------
; Read ULONG to memory-mapped controller register
; ** Don't use Stack **
MMREG_READ_32      MACRO           Addr, Dest
    xor     eax, eax
    mov     ebx, eax
    mov     eax, Addr
    mov     ebx, [eax]
    mov     Dest, ebx
ENDM

PRINT_CREG_VAL      MACRO           Addr
    xor ebx, ebx
    mov bx, Addr
    WriteHex_EBX
    WriteChar ':'
    CREG_READ  Addr, bl
    WriteHex_EBX
    WriteChar 0dH
    WriteChar 0aH
ENDM

PRINT_MMREG_VAL      MACRO           Addr
    xor ebx, ebx
    mov ebx, Addr
    WriteHex_EBX
    WriteChar ':'
    MMREG_READ_32  Addr, ebx
    WriteHex_EBX
    WriteChar 0dH
    WriteChar 0aH
ENDM

; CPU Core Register Access Macros
;-----------------------------------------------------
; CPU_READ macro
; ** Don't use Stack **
; ** Special opcode - requires that scratchpad bits be non-zero (else illegal)
; ** opcode is generated.
CPU_READ      MACRO	; Read processor core register.
    db 0fH
    db 3dH
ENDM

; CPU_WRITE macro
; ** Don't use Stack **
; ** Special opcode - requires that scratchpad bits be non-zero (else illegal)
; ** opcode is generated.
CPU_WRITE      MACRO	; Write to processor core register.
    db 0fH
    db 3cH
ENDM

; CPU_BB0_RESET macro
; ** Don't use Stack **
; ** Special opcode - requires that scratchpad bits be non-zero (else illegal)
; ** opcode is generated.
CPU_BB0_RESET      MACRO	; Reset BLT Buffer 0 pointer to base.
    db 0fH
    db 3aH
ENDM

; CPU_BB1_RESET macro
; ** Don't use Stack **
; ** Special opcode - requires that scratchpad bits be non-zero (else illegal)
; ** opcode is generated.
CPU_BB1_RESET      MACRO	; Reset BLT Buffer 1 pointer to base.
    db 0fH
    db 3bH
ENDM

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?