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

📄 atbase.asm

📁 award bios 源代码,喜欢汇编程序及想研究主板BIOS程序的人可以参考哦.我是费了老大的劲才找到的哦.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		EXTRN	POST_56S:NEAR
		EXTRN	POST_57S:NEAR
		EXTRN	POST_58S:NEAR
		EXTRN	POST_59S:NEAR
		EXTRN	POST_60S:NEAR
		EXTRN	POST_61S:NEAR
		EXTRN	POST_62S:NEAR
		EXTRN	POST_63S:NEAR
		EXTRN	POST_64S:NEAR
		EXTRN	POST_65S:NEAR
		EXTRN	POST_66S:NEAR
		EXTRN	POST_67S:NEAR
		EXTRN	POST_68S:NEAR
		EXTRN	POST_69S:NEAR
		EXTRN	POST_70S:NEAR
		EXTRN	POST_71S:NEAR
		EXTRN	POST_72S:NEAR
		EXTRN	POST_73S:NEAR
		EXTRN	POST_74S:NEAR
		EXTRN	POST_75S:NEAR
		EXTRN	POST_76S:NEAR
		EXTRN	POST_77S:NEAR
		EXTRN	POST_78S:NEAR
		EXTRN	POST_79S:NEAR
		EXTRN	POST_80S:NEAR
		EXTRN	POST_81S:NEAR
		EXTRN	POST_82S:NEAR
		EXTRN	POST_83S:NEAR
		EXTRN	POST_84S:NEAR
		EXTRN	POST_85S:NEAR
		EXTRN	POST_86S:NEAR
		EXTRN	POST_87S:NEAR
		EXTRN	POST_88S:NEAR
		EXTRN	POST_89S:NEAR
		EXTRN	POST_90S:NEAR
		EXTRN	POST_91S:NEAR
		EXTRN	POST_92S:NEAR
		EXTRN	POST_93S:NEAR
		EXTRN	POST_94S:NEAR
		EXTRN	POST_95S:NEAR
		EXTRN	POST_96S:NEAR
		EXTRN	POST_97S:NEAR
		EXTRN	POST_98S:NEAR
		EXTRN	POST_99S:NEAR
;R79		extrn	BootSeq_Item:near
;R79		extrn	GetItem_Cmos:near
;R79		extrn	GetItem_Value:near		;R42
		extrn	Write_Item_Value:near		;R42
		extrn	HDD_TYPE_DIFF:ABS		;R42
;r119 start
ifdef RPB_ENABLED
  extrn rpb_is_running:near         ; RXX
  extrn rpb_set_dos_mode:near
endif ; RPB_ENABLED
;r119 end
;R02 start
ifdef	PM_SUPPORT
		extrn	Ct_Resume_Handle:near
		extrn	Ct_Sleep_Detect:near
		extrn	Ct_Check_SMI_Start:Near		;R07
endif	;PM_SUPPORT
;R02 end
ifdef IDE_LBA_MODE_SUPPORT				;R16
		extrn	Set_HDD_parm:Near		;R16
endif ;IDE_LBA_MODE_SUPPORT				;R16

ifdef	QUERY_SYSTEM_ADDRESS_MAP
		extrn	ExtData1Kb:Near
		extrn	ExtMem128Mb:Near
		extrn	MemHole_15Mb:near	;R82
		extrn	MemAbove_15Mb:near	;R82
		extrn	Ct_MemHole_Status:near	;R82
;R111 start
ifdef	ACPI_Support
		extrn	ACPITableAddress:near	;ACPI
		extrn	ACPINVSAddress:near	;ACPI
endif;	ACPI_Support
;R111 end

endif	;QUERY_SYSTEM_ADDRESS_MAP

		extrn	CONFIG_TABLE:near		;R27
		extrn	Auto_IDE_Detect:near		;R37
		extrn	Display_String:near		;R37
		extrn	E000_64K_shadow_RW:near		;R44
		extrn	E000_64K_shadow_R:near		;R44
		extrn	Disable_E000_ROM_Shadow:near	;R77
	IF	RELEASE_E000_FOR_PCI			;R77
	ifdef	PCI_BUS				 	;R77A
		extrn	E000_USED_BY_PCI:near		;R77
	endif;	PCI_BUS				 	;R77A
	ENDIF	;RELEASE_E000_FOR_PCI			;R77

		extrn	cpu_halt:near			;R84
		extrn	Int13_original_address:dword	;R81A
		extrn	SCSI_Drive_Max_Num:byte		;R88A

ifdef	E000_SMI_SUPPORT				;R94
		extrn	Restore_E000_Shadow_Status:FAR	;R94
endif	;E000_SMI_SUPPORT				;R94

		extrn	CDROM_Boot_Delay:near		;R123D
		extrn	CDROM_Boot_loop:near		;R123D

.LIST

;[]---------------------------[]
;
;   Low memory init (1st 64k)
;
;[]---------------------------[]


G_RAM		SEGMENT	USE16 AT 0

		ORG	04H*4
		INCLUDE	SEG_0.INC

		ORG	400H
		INCLUDE	G_RAM.INC

		ORG	7C00H
BOOT		LABEL	FAR

G_RAM		ENDS

;[]---------------------------[]
;
;   Stack init
;
;[]---------------------------[]

BIOS_STK	SEGMENT	USE16 AT 0H
		ORG	400H
BIOSSTK_TOP	LABEL	WORD

IF1
  %OUT USING 1000h POST STACK LOCATION
ENDIF
		ORG	1000h
POSTSTK_TOP	LABEL	WORD

BIOS_STK	ENDS


		PAGE


DGROUP		GROUP	FCODE
;R25 FCODE		SEGMENT	USE16 DWORD PUBLIC 'CODE'
FCODE		SEGMENT	USE16 PARA PUBLIC 'CODE'		;R25
		ASSUME	CS:dgroup,DS:dgroup

;R107 IFDEF		S64K
;R107  IF1
;R107   %OUT S64K flag set: ORG set to 0 for 64K BIOS
;R107  ENDIF
;R107 		ORG	0
;R107
;R107 ELSEIFDEF	S60K
;R107  IF1
;R107   %OUT S60K flag set: ORG set to 1000h for 60K BIOS
;R107  ENDIF
;R107 		ORG	1000h
;R107
;R107 ELSEIFDEF	S56K
;R107  IF1
;R107   %OUT S56K flag set: ORG set to 2000h for 56K BIOS
;R107  ENDIF
;R107 		ORG	2000h
;R107
;R107 ELSEIFDEF	S52K
;R107  IF1
;R107   %OUT S52K flag set: ORG set to 3000h for 52K BIOS
;R107  ENDIF
;R107 		ORG	3000h
;R107
;R107 ELSEIFDEF	S48K
;R107  IF1
;R107   %OUT S48K flag set: ORG set to 4000h for 48K BIOS
;R107  ENDIF
;R107 		ORG	4000h
;R107
;R107 ELSEIFDEF	S44K
;R107  IF1
;R107   %OUT S44K flag set: ORG set to 5000h for 44K BIOS
;R107  ENDIF
;R107 		ORG	5000h
;R107
;R107 ELSEIFDEF	S40K
;R107  IF1
;R107   %OUT S40K flag set: ORG set to 6000h for 40K BIOS
;R107  ENDIF
;R107 		ORG	06000H
;R107
;R107 ELSEIFDEF	S36K
;R107  if1
;R107   %OUT S36K flag set: ORG set to 7000h for 36K BIOS
;R107  endif
;R107 		ORG	07000H			; START	OF ROM, DISK WHIZ
;R107
;R107 ELSE		; S32K
;R107  IF1
;R107   %OUT Default: ORG set to 8000h for 32K BIOS
;R107  ENDIF
;R107 		ORG	08000H			; START	OF ROM
;R107
;R107 ENDIF		; SxxK

		PUBLIC	CODE_START
CODE_START:
		PAGE
		dw	offset code_end		;R08
;R101A;R101 start
;R101Aifdef	No_Support_HiScan
;R101A		public	INT06_VECT
;R101AINT06_VECT:
;R101A		extrn	LOADALL:near
;R101A		jmp	LOADALL
;R101Aendif	;No_Support_HiScan
;R101A;R101 end
;R39 start
		public	Post_call_proc
Post_call_proc:
		push	offset POST_func_end
;R118		push	0f000h
		push	ax
		pushf					;R72
		cli					;R72
		xchg	bp,sp
;R72		mov	ax,[bp+2]
;R72		xchg	ax,[bp+8]
;R72		mov	[bp+2],ax
		mov	ax,[bp+4]			;R72
;R118		xchg	ax,[bp+10]			;R72
		xchg	ax,[bp+6]			;R118
		mov	[bp+4],ax			;R72
		xchg	bp,sp
		popf					;R72
		pop	ax
		FAR_JMP	<OFFSET POST_VECT>,0e000h
;R39 end

		PUBLIC	EXCEPTION_HDLR
		PUBLIC	KILL_MACHINE
EXCEPTION_HDLR:
KILL_MACHINE:	MOV	AL,0FEH
		OUT	STAT8042,AL
SHUT_HLT:	CLI
		HLT
		JMP	SHORT SHUT_HLT

;R46 - start
;R47 ifndef	SMBASE_USE_E000H
		ALIGN	4
		Public	GDTR1
GDTR1:						; global descriptor table register
;R56		dw	8*3			; LIMIT
;R95		dw	8*4			;R56; LIMIT
		dw	8*5			;R95; LIMIT
		dw	offset GDT1
		dw	0fh			; in 0F000h segment

		Public	GDT1
GDT1:						; null descriptor
		dw	0			; limit
		dw	0			; base
		db	0			; hibase
		db	0			; access
		db	0			; hilimit
		db	0			; msbase

		Public	CODE1_DT
CODE1_DT:					; cs - prom code segment
CODE1_INDEX	=	((offset CODE1_DT - offset GDT1)/8) SHL 3

		dw	0ffffh			; limit
		dw	0			; base	a15-a0
		db	0fh			; hibase   a23-a16, assume we have 64k prom
		db	9fh			; access
		db	0			; hilimit
		db	0			; msbase   a31-a24

		Public	DATA1_DT
		Public	DATA1_INDEX
DATA1_DT:					; ds - first 64k segment
DATA1_INDEX	=	((OFFSET DATA1_DT - OFFSET GDT1)/8) SHL 3
		dw	0ffffh			; limit
		dw	0			; base data segment points to
		db	0			; hibase	; 00000000
		db	93h			; access
		db	08fh			; hilimit (4GB)
		db	0			; msbase
;R47 endif	;SMBASE_USE_E000H
;R46 - end

;R56 - start
ifdef	PNP_BIOS
		public	ESCD_DT
		public	ESCD_INDEX
;R56A ifndef	ESCD_BASE
;R100 ESCD_BASE	EQU	0FFFF8000h
;R56A endif	;ESCD_BASE
ESCD_DT:							; ESCD
ESCD_INDEX	=	((OFFSET ESCD_DT - OFFSET GDT1)/8) SHL 3
		dw	0ffffh					; limit
		dw	(ESCD_BASE AND 0FFFFh)			; base address
		db	((ESCD_BASE SHR 16) AND 0FFh)		; hibase
		db	93h					; access
		db	0					; hilimit
		db	((ESCD_BASE SHR 24) AND 0FFh)		; msbase
;R56 - end

;R95 - start
		public	F0DATA_DT
		public	F0DATA_INDEX
F0DATA_DT:							; F000 data
F0DATA_INDEX	=	((offset F0DATA_DT - offset GDT1)/8) SHL 3

		dw	0ffffh					; limit
		dw	0					; base address
		db	0fh					; hibase
		db	93h					; access
		db	0					; hilimit
		db	0					; msbase
endif;	PNP_BIOS
;R95 - end

;R23;[]==============================================================[]
;R23;
;R23; REDO:
;R23;
;R23;	This routine is called by the reset vector at F000:E05B
;R23;	after a power-up. It determines whether this is a virtual
;R23;	shutdown or a normal boot. If it is a normal boot, we
;R23;	juggle a few cache's and then go on to POST.
;R23;
;R23;Saves:	NONE
;R23;
;R23;Entry:	NONE
;R23;Exit:	NONE
;R23;
;R23;Author: Award
;R23;Date:   04/18/90
;R23;
;R23; Name | Date	    | Description
;R23; ---------------------------------------------------------------
;R23; TIM | 18-Apr-90   | Update to 4.0
;R23;
;R23;[]==============================================================[]
;R23
;R23		PUBLIC	REDO
;R23REDO		PROC	NEAR
;R23
;R23		ror	edx,16			; high dx = cpu type
;R23;
;R23;	Test if this was a virtual shutdown.
;R23;
;R23
;R23		cli
;R23		cld
;R23		in	al,STAT8042		; was this a user or prog reset ?
;R23		test	al,4
;R23		jnz	short redo1		; virtual shutdown...
;R23
;R23		mov	ax,cs						;R12
;R23		mov	ss,ax			; ss = cs		;R12
;R23
;R23;R02 start
;R23ifdef	PM_SUPPORT
;R23		call  	CT_Sleep_Detect
;R23		jnz	short redo1		; virtual shutdown...
;R23endif	;PM_SUPPORT
;R23;R02 end
;R23		xor	al,al			; al = early detect	;R12
;R23		ror	edx,16			; dx = CPU ID		;R12
;R23		call	CPU_Detect					;R12
;R23;R11		call	CPU_Init					;R12
;R23		jmp	Pup_Wait		; first time power up
;R23REDO		ENDP
;R23
;R23
;R23;[]==============================================================[]
;R23;
;R23; REDO1:
;R23;
;R23;
;R23;	Handle the virtual shutdown. The shutdown code is in byte 0Fh
;R23;of CMOS. The following codes can be found can be used:
;R23;
;R23;
;R23;00h = Power on or soft reset
;R23;01h = Memory sizing pass
;R23;02h = Memory test pass
;R23;03h = Memory test fail
;R23;04h = POST end; boot system
;R23;05h = Flush keyboard buffer, do an EOI, jmp to dword 40:67
;R23;06h = Protected mode test pass
;R23;07h = Protected mode test fail
;R23;08h = Memory sizing fail
;R23;09h = INT 15h block move return
;R23;0Ah = jmp to dword 40:67
;R23;
;R23;Saves:	NONE
;R23;
;R23;Entry:	NONE
;R23;Exit:	NONE
;R23;
;R23;Author: Award
;R23;Date:   04/18/90
;R23;
;R23; Name | Date	    | Description
;R23; ---------------------------------------------------------------
;R23; TIM | 18-Apr-90   | Update to 4.0
;R23;
;R23;[]==============================================================[]
;R23
;R23REDO1		PROC	NEAR
;R23
;R23;R02 start
;R23ifdef	PM_SUPPORT
;R23;	NOTE: To resume from the SUSPEND mode on a 386SL system, accessing
;R23;	      BIOS stack is not allowed before handling the RESUME process.
;R23
;R23		mov	al,0fh NMI_OFF		; check cmos shutdown type
;R23		out	CMOS,al
;R23		newiodelay
;R23	   	in	al,CMOS+1
;R23		newiodelay
;R23		cmp	al,RESUME_SHUTDOWN_BYTE	; user return sleep mode
;R23		jne	redo1_0
;R23		jmp	CT_RESUME_HANDLE
;R23redo1_0:
;R23endif	;PM_SUPPORT
;R23;R02 end
;R23
;R23;R07 start
;R23ifdef	PM_SUPPORT
;R23		mov	ax,G_RAM			;R15
;R23		mov	es,ax				;R15
;R23		cmp	es:USER_REBOOT,CTRL_ALT_DEL	;R15
;R23		je	short Not_SMI_Start		;R15
;R23		jmp	Ct_Check_SMI_Start	;See if it is a SMI request
;R23						;issue(AMD & U5 CPU)
;R23		Public	Not_SMI_Start
;R23Not_SMI_Start:
;R23endif	;PM_SUPPORT
;R23;R07 end
;R23
;R23		mov	ax,BIOS_STK		; setup stack
;R23		mov	ss,ax
;R23		mov	sp,offset BIOSSTK_TOP
;R23
;R23;R05 - start
;R23		mov	al,8fh			; cmos shutdown byte
;R23		out	CMOS,al
;R23		newiodelay
;R23	   	in	al,CMOS+1
;R23
;R23		push	ax
;R23		or	al,al
;R23		jz	short Not_ShutDown
;R23;R05 - end
;R23
;R23		call	Init_Cyrix_Reg		;R21
;R23
;R23		mov	al,1			;R06
;R23		call	Restore_Cyrix_Reg	;R06
;R23
;R23		call	Ct_Restore_Cyrix_Reg	;R14A
;R23
;R23;R14 - starts
;R23;R14B		mov	ax,0C3C3h	;lock Cyrix registers
;R23;R14B		out	22h,al
;R23;R14B		in	al,23h
;R23;R14B		or	al,1
;R23;R14B		xchg	ah,al
;R23;R14B		out	22h,al

⌨️ 快捷键说明

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