⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oemiotbl.as_

📁 <BIOS研发技术剖析>书的源代码,包括完整的BIOS汇编语言源程序.
💻 AS_
📖 第 1 页 / 共 5 页
字号:
	public	BBLOCKRTCREGINITCOUNT
        public  BBlockRegisterInitTableStart
        public  BBlockFDCRegisterInitTableStart
        public  BBlockKBCRegisterInitTableStart
        public  BBlockRTCRegisterInitTableStart
        public  BBlockRegisterInitTableEnd
BBlockRegisterInitTableStart:
BBlockFDCRegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------

; Win977 Boot Block FDC Regs Init Table
        db      022h,     001h  ; PWR ON FDC
        db      024h,     0A4h  ; OSC is on

        db      007h,     000h  ; select logical device 0 (FDC)
        db      030h,     000h  ; deactivate FDC
        db      060h,     003h
        db      061h,     0f0h  ; set FDC port addr to 3F0h
        db      070h,     006h  ; set to IRQ 6
        db      074h,     002h  ; set to DMA 2
        db      030h,     001h  ; activate FDC
BBlockFDCRegisterInitTableEnd:

BBlockKBCRegisterInitTableStart:
; Win977 Boot Block KBC Regs Init Table
        db      024h,     0A4h  ; OSC is on
        
        db      007h,     008h  ; select logical device 8 (Aux I/O)
        db      030h,     001h  ; activate logical device 8
        db      0E8h,     010h  ; for KB soft reset ctrl
        db      0E8h,     012h  ; for KB soft reset ctrl
        db      0EDh,     008h  ; for GA-20 enable
        db      0BAh,     0F0h  ; activate logical device 8
        
        db      007h,     005h  ; select logical device 5 (KBC)
        db      060h,     000h  ;
        db      061h,     060h  ; set KBC index port address
        db      062h,     000h  ;
        db      063h,     064h  ; set KBC data port address
        db      070h,     001h  ; set IRQ 1
        db      072h,     00Ch  ; set IRQ 12 for PS/2 mouse
        db      0f0h,     040h  ; Select Clock 8 Mhz.
        db      030h,     001h  ; activate logical device 7
BBlockKBCRegisterInitTableEnd:

BBlockRTCRegisterInitTableStart:
; Win977 Boot Block RTC Regs Init Table
        db      024h,     0A4h  ; OSC is on
        
        db      007h,     004h  ; select logical device 4 (RTC)
        db      060h,     000h  ;
        db      061h,     070h  ; set RTC I/O base address
        db      070h,     008h  ; set IRQ 8
        db      0f0h,     080h  ; Select Bank 2 of CMOS RAM
        db      030h,     001h  ; activate RTC
BBlockRTCRegisterInitTableEnd:
BBlockRegisterInitTableEnd:

BBLOCKREGINITCOUNT = (BBlockRegisterInitTableEnd - BBlockRegisterInitTableStart) / 2
BBLOCKFDCREGINITCOUNT = (BBlockFDCRegisterInitTableEnd - BBlockFDCRegisterInitTableStart) / 2
BBLOCKKBCREGINITCOUNT = (BBlockKBCRegisterInitTableEnd - BBlockKBCRegisterInitTableStart) / 2
BBLOCKRTCREGINITCOUNT = (BBlockRTCRegisterInitTableEnd - BBlockRTCRegisterInitTableStart) / 2
ENDIF
        
IF MKF_SMC957
        public  BBLOCKREGINITCOUNT
        public  BBlockRegisterInitTableStart
        public  BBlockRegisterInitTableEnd
BBlockRegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------
        db      022h,     001h          ;PWR ON FDC
        db      024h,     004h          ;OSC is on
BBlockRegisterInitTableEnd:
        db      (Smc9578051RegisterInitEnd - Smc9578051RegisterInitStart) / 3
Smc9578051RegisterInitStart:
;;; Comment this block if Serialized IRQ is used.
;;; ---------------- Begin Block --------------- ;;;
        db      41h                     ;Select Legacy IRQ, CPU_RESET, GA20
        dw      7f3dh                   ;8051 Multiplexing_1 Register
;;; ----------------- End Block ---------------- ;;;
        db      02h                     ;Select DRQ2
        dw      7f40h                   ;8051 Multiplexing_2 Register
        db      02h                     ;Select nDACK2
        dw      7f30h                   ;8051 Mutilplexing_3 Register
Smc9578051RegisterInitEnd:

BBLOCKREGINITCOUNT = (BBlockRegisterInitTableEnd - BBlockRegisterInitTableStart) / 2

ENDIF


;---------------------------------------;
;              DMA Routing              ;
;---------------------------------------;

BBlockIoDmaRoutingTable:
IF MKF_NAT336
;       NAT336 DRQ Pins:        DRQ0 = 01h
;                               DRQ1 = 02h
;                               DRQ2 = 03h
;                               None = 00h

;             System    Nat336
;               DRQ     DRQ pin
;             ------    -------
        db      00h,      01h           ;System DRQ0 connected to Nat336 DRQ0
        db      01h,      02h           ;System DRQ1 connected to Nat336 DRQ1
        db      02h,      03h           ;System DRQ2 connected to Nat336 DRQ2
        db      03h,      00h           ;System DRQ3 not connected to Nat336
ENDIF
IF MKF_SMC68X
;       SMC68X DMA Pins:        DMA_A = 00h
;                               DMA_B = 01h
;                               DMA_C = 02h
;                               None  = 04h

;             System    SMC68X
;               DRQ     DMA pin
;             ------    -------
        db      00h,      00h           ;System DRQ0 connected to SMC68X DMA_A
        db      01h,      01h           ;System DRQ1 connected to SMC68X DMA_B
        db      02h,      02h           ;System DRQ2 connected to SMC68X DMA_C
        db      03h,      04h           ;System DRQ3 not connected to SMC68X
ENDIF


;---------------------------------------;
;         FDC IRQ & DMA Routing         ;
;---------------------------------------;

BBlockIoIrqDmaRoutingTable:
IF MKF_GM803C
;       GM803C IRQ Pins:        IRQ_A = 01h
;                               IRQ_B = 02h
;                               IRQ_C = 03h
;                               IRQ_D = 04h
;                               IRQ_E = 05h
;                               IRQ_F = 06h
;                               IRQ_H = 08h

;       GM803C DMA Pins:        DMA_A = 01h
;                               DMA_B = 02h
;                               DMA_C = 03h

;              IRQ 6    DMA 2
;             -------  -------
        db      06h,     02h            ;ex: uses IRQ_F pin for IRQ6
                                        ;         DMA_B pin for DRQ2
ENDIF
IF MKF_SMC669
;       SMC669 IRQ Pins:        IRQ_A = 01h
;                               IRQ_B = 02h
;                               IRQ_C = 03h
;                               IRQ_D = 04h
;                               IRQ_E = 05h
;                               IRQ_F = 06h
;                               IRQ_G = 07h
;                               IRQ_H = 08h

;       SMC669 DMA Pins:        DMA_A = 01h
;                               DMA_B = 02h
;                               DMA_C = 03h

;              IRQ 6    DMA 2
;             -------  -------
        db      06h,     02h            ;ex: uses IRQ_F pin for IRQ6
                                        ;         DMA_B pin for DRQ2
ENDIF
IF MKF_WIN877
;       Win877 IRQ Pins:        IRQ_A = 01h
;                               IRQ_B = 02h
;                               IRQ_C = 03h
;                               IRQ_D = 04h
;                               IRQ_E = 05h
;                               IRQ_F = 06h
;                               IRQ_G = 07h
;                               IRQ_H = 08h

;       Win877 DMA Pins:        DMA_A = 01h
;                               DMA_B = 02h
;                               DMA_C = 03h

        db      06h, 02h                ;ex: uses IRQ_F pin for IRQ6
                                        ;         DMA_B pin for DRQ2
ENDIF

;******************************************************************************;
;                                 RUNTIME                                      ;
;******************************************************************************;

ELSE                                    ; Runtime tables
        public  LptIrqBitMask
        public  LptDmaBitMask
        public  IoIrqRoutingTable
        public  IoDmaRoutingTable


;------------------------------------------------------;
; IRQ and DMA channel available to route (in bit mask) ;
;------------------------------------------------------;

LptIrqBitMask:
        dw      00a0h                   ;IRQ 5, 7
LptDmaBitMask:
        db      00001011b               ;DMA3, DMA1, DMA0


;---------------------------------------;
;       Register Initialization         ;
;---------------------------------------;

IF MKF_AIP
        public  REGINITCOUNT
        public  RegisterInitTableStart
        public  RegisterInitTableEnd
RegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------
;       db      002h,     000h          ; CR 2
        db      003h,     000h          ; CR 3
        db      010h,     000h          ; CR 10
        db      020h,     000h          ; CR 20
        db      030h,     000h          ; CR 30
        db      040h,     000h          ; CR 40
        db      050h,     000h          ; CR 50
RegisterInitTableEnd:

REGINITCOUNT = (RegisterInitTableEnd - RegisterInitTableStart) / 2

ENDIF
IF MKF_ALI5113
        public  REGINITCOUNT
        public  RegisterInitTableStart
        public  RegisterInitTableEnd
RegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------
        db      011h,     000h          ; CR 1 
        db      022h,     000h          ; CR 2 
        db      033h,     090h          ; CR 3
        db      055h,     003h          ; CR 5
        db      066h,     0a0h          ; CR 6
        db      077h,     001h          ; CR 7
        db      088h,     000h          ; CR 8
        db      099h,     000h          ; CR 9
        db      0aah,     08ah          ; CR A
        db      0bbh,     048h          ; CR B
        db      0cch,     041h          ; CR C
RegisterInitTableEnd:

REGINITCOUNT = (RegisterInitTableEnd - RegisterInitTableStart) / 2

ENDIF
IF MKF_ALI5119
        public  REGINITCOUNT
        public  RegisterInitTableStart
        public  RegisterInitTableEnd
RegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------
        db      022h,     000h          ; CR 2 
        db      033h,     090h          ; CR 3
        db      055h,     003h          ; CR 5
        db      066h,     080h          ; CR 6
        db      077h,     001h          ; CR 7
        db      088h,     010h          ; CR 8
        db      099h,     010h          ; CR 9
        db      0aah,     08ah          ; CR A
        db      0bbh,     048h          ; CR B
        db      0cch,     001h          ; CR C
RegisterInitTableEnd:

REGINITCOUNT = (RegisterInitTableEnd - RegisterInitTableStart) / 2

ENDIF
IF MKF_ALI5123
        public  REGINITCOUNT
        public  RegisterInitTableStart
        public  RegisterInitTableEnd
RegisterInitTableStart:
;              Device   Data/Reg
;             --------  --------
        db      000h                    ;select logical device 0 (FDC)
        dw                0030h         ;deactivate FDC

        db      003h                    ;select logical device 3 (LPT)
        dw                3CF0h
        db      003h                    ;select logical device 3 (LPT)
        dw                0030h         ;deactivate LPT
        
        db      004h                    ;select logical device 4 (SER1)
        dw                0030h         ;deactivate COMA
        
        db      005h                    ;select logical device 5 (SER2)
        dw                0030h         ;deactivate COMB
RegisterInitTableEnd:

REGINITCOUNT = (RegisterInitTableEnd - RegisterInitTableStart) / 3

ENDIF
IF MKF_CT735
        public  REGINITCOUNT
        public  RegisterInitTableStart
        public  RegisterInitTableEnd
RegisterInitTableStart:
;                        Power
;             Register  On Value
;             --------  --------
        db      000h,     08Ah          ; CR 0 
        db      001h,     0B4h          ; CR 1
        db      002h,     088h          ; CR 2
        db      005h,     000h          ; CR 5
        db      006h,     000h          ; CR 6
        db      009h,     000h          ; CR 9
RegisterInitTableEnd:

REGINITCOUNT = (RegisterInitTableEnd - RegisterInitTableStart) / 2

⌨️ 快捷键说明

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