亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? setup.s

?? 該文件是rt_linux
?? S
?? 第 1 頁 / 共 2 頁
字號:
/* *	setup.S		Copyright (C) 1991, 1992 Linus Torvalds * * setup.s is responsible for getting the system data from the BIOS, * and putting them into the appropriate places in system memory. * both setup.s and system has been loaded by the bootblock. * * This code asks the bios for memory/disk/other parameters, and * puts them in a "safe" place: 0x90000-0x901FF, ie where the * boot-block used to be. It is then up to the protected mode * system to read them from there before the area is overwritten * for buffer-blocks. * * Move PS/2 aux init code to psaux.c * (troyer@saifr00.cfsat.Honeywell.COM) 03Oct92 * * some changes and additional features by Christoph Niemann, * March 1993/June 1994 (Christoph.Niemann@linux.org) * * add APM BIOS checking by Stephen Rothwell, May 1994 * (sfr@canb.auug.org.au) * * High load stuff, initrd support and position independency * by Hans Lermen & Werner Almesberger, February 1996 * <lermen@elserv.ffm.fgan.de>, <almesber@lrc.epfl.ch> * * Video handling moved to video.S by Martin Mares, March 1996 * <mj@k332.feld.cvut.cz> * * Extended memory detection scheme retwiddled by orc@pell.chi.il.us (david * parsons) to avoid loadlin confusion, July 1997 * * Transcribed from Intel (as86) -> AT&T (gas) by Chris Noe, May 1999. * <stiker@northlink.com> * * Fix to work around buggy BIOSes which dont use carry bit correctly * and/or report extended memory in CX/DX for e801h memory size detection  * call.  As a result the kernel got wrong figures.  The int15/e801h docs * from Ralf Brown interrupt list seem to indicate AX/BX should be used * anyway.  So to avoid breaking many machines (presumably there was a reason * to orginally use CX/DX instead of AX/BX), we do a kludge to see * if CX/DX have been changed in the e801 call and if so use AX/BX . * Michael Miller, April 2001 <michaelm@mjmm.org> * */#include <linux/config.h>#include <asm/segment.h>#include <linux/version.h>#include <linux/compile.h>#include <asm/boot.h>#include <asm/e820.h>/* Signature words to ensure LILO loaded us right */#define SIG1	0xAA55#define SIG2	0x5A5AINITSEG  = DEF_INITSEG		# 0x9000, we move boot here, out of the waySYSSEG   = DEF_SYSSEG		# 0x1000, system loaded at 0x10000 (65536).SETUPSEG = DEF_SETUPSEG		# 0x9020, this is the current segment				# ... and the former contents of CSDELTA_INITSEG = SETUPSEG - INITSEG	# 0x0020.code16.globl begtext, begdata, begbss, endtext, enddata, endbss.textbegtext:.databegdata:.bssbegbss:.textstart:	jmp	trampoline# This is the setup header, and it must start at %cs:2 (old 0x9020:2)		.ascii	"HdrS"		# header signature		.word	0x0202		# header version number (>= 0x0105)					# or else old loadlin-1.5 will fail)realmode_swtch:	.word	0, 0		# default_switch, SETUPSEGstart_sys_seg:	.word	SYSSEG		.word	kernel_version	# pointing to kernel version string					# above section of header is compatible					# with loadlin-1.5 (header v1.5). Don't					# change it.type_of_loader:	.byte	0		# = 0, old one (LILO, Loadlin,					#      Bootlin, SYSLX, bootsect...)					# See Documentation/i386/boot.txt for					# assigned ids	# flags, unused bits must be zero (RFU) bit within loadflagsloadflags:LOADED_HIGH	= 1			# If set, the kernel is loaded highCAN_USE_HEAP	= 0x80			# If set, the loader also has set					# heap_end_ptr to tell how much					# space behind setup.S can be used for					# heap purposes.					# Only the loader knows what is free#ifndef __BIG_KERNEL__		.byte	0#else		.byte	LOADED_HIGH#endifsetup_move_size: .word  0x8000		# size to move, when setup is not					# loaded at 0x90000. We will move setup 					# to 0x90000 then just before jumping					# into the kernel. However, only the					# loader knows how much data behind					# us also needs to be loaded.code32_start:				# here loaders can put a different					# start address for 32-bit code.#ifndef __BIG_KERNEL__		.long	0x1000		#   0x1000 = default for zImage#else		.long	0x100000	# 0x100000 = default for big kernel#endiframdisk_image:	.long	0		# address of loaded ramdisk image					# Here the loader puts the 32-bit					# address where it loaded the image.					# This only will be read by the kernel.ramdisk_size:	.long	0		# its size in bytesbootsect_kludge:		.word  bootsect_helper, SETUPSEGheap_end_ptr:	.word	modelist+1024	# (Header version 0x0201 or later)					# space from here (exclusive) down to					# end of setup code can be used by setup					# for local heap purposes.pad1:		.word	0cmd_line_ptr:	.long 0			# (Header version 0x0202 or later)					# If nonzero, a 32-bit pointer					# to the kernel command line.					# The command line should be					# located between the start of					# setup and the end of low					# memory (0xa0000), or it may					# get overwritten before it					# gets read.  If this field is					# used, there is no longer					# anything magical about the					# 0x90000 segment; the setup					# can be located anywhere in					# low memory 0x10000 or higher.trampoline:	call	start_of_setup		.space	1024# End of setup header #####################################################start_of_setup:# Bootlin depends on this being done early	movw	$0x01500, %ax	movb	$0x81, %dl	int	$0x13#ifdef SAFE_RESET_DISK_CONTROLLER# Reset the disk controller.	movw	$0x0000, %ax	movb	$0x80, %dl	int	$0x13#endif# Set %ds = %cs, we know that SETUPSEG = %cs at this point	movw	%cs, %ax		# aka SETUPSEG	movw	%ax, %ds# Check signature at end of setup	cmpw	$SIG1, setup_sig1	jne	bad_sig	cmpw	$SIG2, setup_sig2	jne	bad_sig	jmp	good_sig1# Routine to print asciiz string at ds:siprtstr:	lodsb	andb	%al, %al	jz	fin	call	prtchr	jmp	prtstrfin:	ret# Space printingprtsp2:	call	prtspc		# Print double spaceprtspc:	movb	$0x20, %al	# Print single space (note: fall-thru)# Part of above routine, this one just prints ascii alprtchr:	pushw	%ax	pushw	%cx	xorb	%bh, %bh	movw	$0x01, %cx	movb	$0x0e, %ah	int	$0x10	popw	%cx	popw	%ax	retbeep:	movb	$0x07, %al	jmp	prtchr	no_sig_mess: .string	"No setup signature found ..."good_sig1:	jmp	good_sig# We now have to find the rest of the setup code/databad_sig:	movw	%cs, %ax			# SETUPSEG	subw	$DELTA_INITSEG, %ax		# INITSEG	movw	%ax, %ds	xorb	%bh, %bh	movb	(497), %bl			# get setup sect from bootsect	subw	$4, %bx				# LILO loads 4 sectors of setup	shlw	$8, %bx				# convert to words (1sect=2^8 words)	movw	%bx, %cx	shrw	$3, %bx				# convert to segment	addw	$SYSSEG, %bx	movw	%bx, %cs:start_sys_seg# Move rest of setup code/data to here	movw	$2048, %di			# four sectors loaded by LILO	subw	%si, %si	movw	%cs, %ax			# aka SETUPSEG	movw	%ax, %es	movw	$SYSSEG, %ax	movw	%ax, %ds	rep	movsw	movw	%cs, %ax			# aka SETUPSEG	movw	%ax, %ds	cmpw	$SIG1, setup_sig1	jne	no_sig	cmpw	$SIG2, setup_sig2	jne	no_sig	jmp	good_signo_sig:	lea	no_sig_mess, %si	call	prtstrno_sig_loop:	jmp	no_sig_loopgood_sig:	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax 		# aka INITSEG	movw	%ax, %ds# Check if an old loader tries to load a big-kernel	testb	$LOADED_HIGH, %cs:loadflags	# Do we have a big kernel?	jz	loader_ok			# No, no danger for old loaders.	cmpb	$0, %cs:type_of_loader 		# Do we have a loader that						# can deal with us?	jnz	loader_ok			# Yes, continue.	pushw	%cs				# No, we have an old loader,	popw	%ds				# die. 	lea	loader_panic_mess, %si	call	prtstr	jmp	no_sig_looploader_panic_mess: .string "Wrong loader, giving up..."loader_ok:# Get memory size (extended mem, kB)	xorl	%eax, %eax	movl	%eax, (0x1e0)#ifndef STANDARD_MEMORY_BIOS_CALL	movb	%al, (E820NR)# Try three different memory detection schemes.  First, try# e820h, which lets us assemble a memory map, then try e801h,# which returns a 32-bit memory size, and finally 88h, which# returns 0-64m# method E820H:# the memory map from hell.  e820h returns memory classified into# a whole bunch of different types, and allows memory holes and# everything.  We scan through this memory map and build a list# of the first 32 memory areas, which we return at [E820MAP].# This is documented at http://www.teleport.com/~acpi/acpihtml/topic245.htm#define SMAP  0x534d4150meme820:	xorl	%ebx, %ebx			# continuation counter	movw	$E820MAP, %di			# point into the whitelist						# so we can have the bios						# directly write into it.jmpe820:	movl	$0x0000e820, %eax		# e820, upper word zeroed	movl	$SMAP, %edx			# ascii 'SMAP'	movl	$20, %ecx			# size of the e820rec	pushw	%ds				# data record.	popw	%es	int	$0x15				# make the call	jc	bail820				# fall to e801 if it fails	cmpl	$SMAP, %eax			# check the return is `SMAP'	jne	bail820				# fall to e801 if it fails#	cmpl	$1, 16(%di)			# is this usable memory?#	jne	again820	# If this is usable memory, we save it by simply advancing %di by	# sizeof(e820rec).	#good820:	movb	(E820NR), %al			# up to 32 entries	cmpb	$E820MAX, %al	jnl	bail820	incb	(E820NR)	movw	%di, %ax	addw	$20, %ax	movw	%ax, %diagain820:	cmpl	$0, %ebx			# check to see if	jne	jmpe820				# %ebx is set to EOFbail820:# method E801H:# memory size is in 1k chunksizes, to avoid confusing loadlin.# we store the 0xe801 memory size in a completely different place,# because it will most likely be longer than 16 bits.# (use 1e0 because that's what Larry Augustine uses in his# alternative new memory detection scheme, and it's sensible# to write everything into the same place.)meme801:	stc					# fix to work around buggy	xorw	%cx,%cx				# BIOSes which dont clear/set	xorw	%dx,%dx				# carry on pass/error of						# e801h memory size call						# or merely pass cx,dx though						# without changing them.	movw	$0xe801, %ax	int	$0x15	jc	mem88	cmpw	$0x0, %cx			# Kludge to handle BIOSes	jne	e801usecxdx			# which report their extended	cmpw	$0x0, %dx			# memory in AX/BX rather than	jne	e801usecxdx			# CX/DX.  The spec I have read	movw	%ax, %cx			# seems to indicate AX/BX 	movw	%bx, %dx			# are more reasonable anyway...e801usecxdx:	andl	$0xffff, %edx			# clear sign extend	shll	$6, %edx			# and go from 64k to 1k chunks	movl	%edx, (0x1e0)			# store extended memory size	andl	$0xffff, %ecx			# clear sign extend 	addl	%ecx, (0x1e0)			# and add lower memory into						# total size.# Ye Olde Traditional Methode.  Returns the memory size (up to 16mb or# 64mb, depending on the bios) in ax.mem88:#endif	movb	$0x88, %ah	int	$0x15	movw	%ax, (2)# Set the keyboard repeat rate to the max	movw	$0x0305, %ax	xorw	%bx, %bx	int	$0x16# Check for video adapter and its parameters and allow the# user to browse video modes.	call	video				# NOTE: we need %ds pointing						# to bootsector# Get hd0 data...	xorw	%ax, %ax	movw	%ax, %ds	ldsw	(4 * 0x41), %si	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax		# aka INITSEG	pushw	%ax	movw	%ax, %es	movw	$0x0080, %di	movw	$0x10, %cx	pushw	%cx	cld	rep 	movsb# Get hd1 data...	xorw	%ax, %ax	movw	%ax, %ds	ldsw	(4 * 0x46), %si	popw	%cx	popw	%es	movw	$0x0090, %di	rep	movsb# Check that there IS a hd1 :-)	movw	$0x01500, %ax	movb	$0x81, %dl	int	$0x13	jc	no_disk1		cmpb	$3, %ah	je	is_disk1no_disk1:	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax 		# aka INITSEG	movw	%ax, %es	movw	$0x0090, %di	movw	$0x10, %cx	xorw	%ax, %ax	cld	rep

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线资源网| 欧美色区777第一页| 国内精品伊人久久久久av影院| 欧美一级在线观看| 色综合久久久久| 国产高清精品久久久久| 2020国产精品久久精品美国| 樱花影视一区二区| youjizz国产精品| 亚洲免费资源在线播放| 粉嫩13p一区二区三区| 国产日韩欧美精品在线| 国产在线乱码一区二区三区| 91精品国产综合久久婷婷香蕉| 亚洲免费av在线| 97精品国产露脸对白| 最新国产成人在线观看| 欧美一区二区三区在| 岛国av在线一区| 日日夜夜一区二区| 国产亚洲一区二区三区| 欧美一区二区三区男人的天堂| 免费成人结看片| 亚洲免费看黄网站| 欧美mv日韩mv| 欧美色图免费看| 国产传媒一区在线| 奇米精品一区二区三区四区 | 国产高清在线观看免费不卡| 一区二区三区中文在线| 欧美一二三在线| 欧美日韩中文字幕精品| 白白色 亚洲乱淫| 成人免费视频一区| 麻豆成人综合网| 亚洲图片欧美一区| 精品人伦一区二区色婷婷| 一本到不卡免费一区二区| 成人h动漫精品一区二区| 欧美日本精品一区二区三区| 日韩欧美激情四射| 国产精品美女久久久久高潮| 精品国产乱码久久久久久久| 日韩欧美高清dvd碟片| 88在线观看91蜜桃国自产| 色88888久久久久久影院按摩| 成人午夜av影视| 成人免费观看av| 91久久奴性调教| 欧美亚洲一区二区在线观看| 欧洲亚洲国产日韩| 欧美日本一区二区| 日韩欧美的一区| 久久精品视频网| **网站欧美大片在线观看| 亚洲精品你懂的| 久久国产精品第一页| 成人av电影免费在线播放| 97久久超碰国产精品电影| 丰满白嫩尤物一区二区| 91色porny在线视频| 欧美日韩精品一区二区三区| 日韩三级视频中文字幕| 精品美女一区二区| 《视频一区视频二区| 亚洲成av人片一区二区三区| 男女视频一区二区| 波多野结衣在线一区| 欧美日本在线播放| 欧美成人a∨高清免费观看| 中文字幕日本不卡| 午夜久久久久久久久久一区二区| 美女视频网站黄色亚洲| 色一情一伦一子一伦一区| 精品剧情v国产在线观看在线| 一区在线观看视频| 日本不卡高清视频| 欧美日韩亚洲综合在线| 国产精品看片你懂得| 国产在线精品一区二区不卡了 | 成人免费看视频| 欧美成人video| 久久99久久99| 精品捆绑美女sm三区| 国产一区二区调教| 欧美精品在线观看播放| 亚洲欧美国产三级| caoporen国产精品视频| 久久久精品日韩欧美| 久久aⅴ国产欧美74aaa| 欧美成人猛片aaaaaaa| 蜜桃视频在线一区| 欧美一区二区日韩一区二区| 日日夜夜精品免费视频| 欧美美女一区二区| 日韩成人dvd| 欧美一区二区二区| 奇米影视一区二区三区| 欧美成人女星排行榜| 久久99精品国产.久久久久久| 久久综合色之久久综合| 国产福利91精品一区二区三区| 欧美videos大乳护士334| 国产综合久久久久久久久久久久| 国产色产综合产在线视频| 成人午夜在线免费| 亚洲综合一区在线| 精品国产一区二区三区久久久蜜月| 久久成人羞羞网站| 国产精品久久久久久亚洲毛片| 91精品办公室少妇高潮对白| 三级成人在线视频| 久久久久久久久一| 欧美在线制服丝袜| 国产99精品在线观看| 亚洲一区二区三区影院| 久久久精品欧美丰满| 91视频91自| 国产激情偷乱视频一区二区三区| ●精品国产综合乱码久久久久| 欧美色电影在线| 成人免费精品视频| 美脚の诱脚舐め脚责91| 一区二区三国产精华液| 久久综合久久久久88| 在线精品视频免费播放| 国产一区二区三区免费在线观看| 亚洲女性喷水在线观看一区| 久久久噜噜噜久噜久久综合| 91精品国产综合久久久蜜臀粉嫩| 99久久久久免费精品国产| 美腿丝袜亚洲三区| 成人免费视频一区| 午夜精品在线看| 一区二区免费视频| 亚洲激情av在线| 亚洲图片欧美激情| 国产欧美日韩视频在线观看| 精品国产乱子伦一区| 欧美丰满高潮xxxx喷水动漫| 欧美日韩免费不卡视频一区二区三区| 成人永久aaa| 不卡的av中国片| 91国产福利在线| 欧美日韩国产影片| 欧美体内she精视频| 欧美日韩国产精品自在自线| 欧美久久久久久久久中文字幕| 一本久道中文字幕精品亚洲嫩| 粉嫩欧美一区二区三区高清影视| 国产成人自拍高清视频在线免费播放| 激情久久五月天| 99久久综合色| 欧美老肥妇做.爰bbww| 日韩精品一区二区三区视频播放| 日韩欧美国产一区在线观看| 久久综合资源网| 亚洲欧美日韩在线| 男女激情视频一区| 成人h精品动漫一区二区三区| 91成人免费在线| 日韩一卡二卡三卡四卡| 中文字幕在线不卡国产视频| 亚洲成人自拍网| 国产一区三区三区| 欧美视频第二页| 国产精品美女久久久久久久久| 亚洲一区二区视频在线观看| 久久电影网站中文字幕| 在线视频一区二区三| 亚洲精品一区二区三区四区高清 | 国产麻豆精品视频| 欧美精选午夜久久久乱码6080| 久久精品一区八戒影视| 成人性视频免费网站| 日韩一区二区三区免费观看| 亚洲免费观看高清完整版在线 | 欧美一二三在线| 中文字幕中文字幕中文字幕亚洲无线| 一二三区精品福利视频| 成人久久18免费网站麻豆| 精品国产成人在线影院| 日韩主播视频在线| 91视频你懂的| 中文字幕一区二区三区色视频| 激情欧美一区二区三区在线观看| 精品视频在线看| 午夜免费欧美电影| 欧美中文字幕一区| 洋洋成人永久网站入口| 97久久超碰精品国产| 中文字幕一区av| 91污在线观看| 亚洲国产美女搞黄色| 欧美性受xxxx| 午夜精彩视频在线观看不卡| 欧美中文一区二区三区| 日韩国产成人精品| 精品国产91九色蝌蚪| 成人av电影在线|