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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频你懂的| 天堂av在线一区| 国产iv一区二区三区| 欧美变态tickle挠乳网站| 麻豆91在线观看| 2020国产精品自拍| 成人午夜激情在线| 亚洲免费视频成人| 欧美日韩国产一二三| 日本不卡一区二区三区 | 亚洲综合男人的天堂| 欧洲一区二区三区免费视频| 亚洲成人高清在线| 欧美tickling挠脚心丨vk| 国产成人在线视频网址| 综合久久一区二区三区| 欧美日韩国产精品自在自线| 日韩福利电影在线观看| 久久九九久精品国产免费直播| 成人综合在线网站| 亚洲va欧美va人人爽午夜| 精品入口麻豆88视频| av在线播放不卡| 日韩高清不卡一区二区三区| 国产午夜精品一区二区三区嫩草| 一本一本大道香蕉久在线精品 | 蜜桃视频一区二区三区| 国产日韩精品一区二区三区在线| 一本色道久久综合亚洲91| 免费精品视频在线| 国产精品国产三级国产普通话99 | 欧美成va人片在线观看| 成人精品电影在线观看| 午夜一区二区三区视频| 久久女同互慰一区二区三区| 色天使色偷偷av一区二区| 日韩av电影免费观看高清完整版在线观看| 精品日韩一区二区| 在线视频你懂得一区二区三区| 美女视频一区二区| 一区二区三区四区五区视频在线观看 | 国产美女一区二区| 亚洲已满18点击进入久久| 久久美女艺术照精彩视频福利播放| 一本久久精品一区二区| 久久精品国产秦先生| 日韩伦理电影网| 久久精品一区二区三区不卡 | av中文字幕不卡| 精品在线一区二区三区| 亚洲一区二区三区三| 国产精品麻豆一区二区| 2021中文字幕一区亚洲| 777欧美精品| 欧美天堂一区二区三区| 99国产精品国产精品久久| 国产在线播精品第三| 日本不卡在线视频| 丝袜诱惑亚洲看片| 一二三区精品视频| 综合欧美一区二区三区| 欧美国产国产综合| 久久久天堂av| 欧美成人r级一区二区三区| 欧美三区在线视频| caoporen国产精品视频| 麻豆成人免费电影| 亚洲va国产天堂va久久en| 中文字幕永久在线不卡| 欧美亚洲国产一区二区三区va| 99久久精品国产导航| 国产精品一区二区你懂的| 日韩综合小视频| 亚洲亚洲人成综合网络| 国产精品久久久久婷婷二区次| 777午夜精品视频在线播放| 欧美专区日韩专区| www.亚洲在线| 韩日精品视频一区| 国产精品2024| 国内精品国产成人国产三级粉色| 午夜欧美电影在线观看| 亚洲欧美成人一区二区三区| 国产精品女主播av| 日本一区二区电影| www亚洲一区| 精品免费一区二区三区| 91精品久久久久久蜜臀| 欧美日韩aaaaaa| 欧美日韩国产综合一区二区三区 | 国产伦精品一区二区三区免费迷| 日本强好片久久久久久aaa| 亚洲成人激情综合网| 亚洲综合色丁香婷婷六月图片| 国产精品毛片a∨一区二区三区 | 日本乱人伦aⅴ精品| av中文字幕不卡| 久久成人免费网| 国产精品白丝jk黑袜喷水| 午夜欧美电影在线观看| 美女高潮久久久| 国内精品不卡在线| 国产高清不卡二三区| 国产精品一二三四五| 首页国产欧美久久| 国产精品综合在线视频| 成人一二三区视频| 成人黄色网址在线观看| 99精品视频在线观看免费| 色综合婷婷久久| 欧美午夜一区二区| 欧美日免费三级在线| 久久久av毛片精品| 国产精品乱码人人做人人爱| 亚洲欧洲综合另类在线| 亚洲福利视频三区| 美女精品一区二区| 国产乱国产乱300精品| 不卡的电视剧免费网站有什么| 久久99热狠狠色一区二区| 99久久99精品久久久久久| 91福利在线看| 日韩三级在线免费观看| 国产色91在线| 一区二区三区四区不卡视频| 日韩高清国产一区在线| 成人免费毛片aaaaa**| jlzzjlzz亚洲女人18| 欧美三级乱人伦电影| 精品91自产拍在线观看一区| 国产精品成人在线观看| 爽爽淫人综合网网站| 国产精品456露脸| 欧美剧在线免费观看网站 | 成人美女视频在线看| 欧洲亚洲国产日韩| 7799精品视频| 亚洲妇女屁股眼交7| 国产精品亚洲人在线观看| 91免费视频网址| 欧美变态tickle挠乳网站| 亚洲色图一区二区三区| 蜜桃视频一区二区| 91看片淫黄大片一级在线观看| 久久久久久久精| 日韩在线a电影| 99久久99久久免费精品蜜臀| 91精品蜜臀在线一区尤物| 中文字幕一区二区三区视频| 香蕉av福利精品导航| 国产在线国偷精品免费看| 日韩视频免费观看高清完整版 | 91久久精品网| 精品久久久久99| 男人的j进女人的j一区| 99精品在线免费| 欧美精品一区二区三区久久久| 亚洲午夜精品网| 成人免费视频免费观看| 精品久久久久久久久久久久久久久| 亚洲综合视频在线观看| 99久久亚洲一区二区三区青草| 精品免费国产二区三区| 日韩高清中文字幕一区| 欧美性色欧美a在线播放| 亚洲视频你懂的| 国产成人综合亚洲网站| 欧美日韩精品一区二区三区四区| 国产欧美1区2区3区| 看电视剧不卡顿的网站| 欧美精选午夜久久久乱码6080| 亚洲视频小说图片| 成人污污视频在线观看| 久久噜噜亚洲综合| 日韩国产在线一| 欧美一级艳片视频免费观看| 性感美女极品91精品| 欧美视频日韩视频在线观看| 一区二区三区四区亚洲| 91国内精品野花午夜精品| 一区二区三区免费在线观看| 99这里只有精品| 国产精品传媒入口麻豆| 成人18精品视频| 中文字幕一区二区三区av| 成人综合婷婷国产精品久久蜜臀| 日韩欧美高清一区| 免费xxxx性欧美18vr| 欧美一区二区在线播放| 日韩vs国产vs欧美| 日韩三级精品电影久久久 | 国产精品成人网| 91一区一区三区| 亚洲人妖av一区二区| 91在线视频观看| 一区二区视频免费在线观看| 欧美一级搡bbbb搡bbbb| 捆绑调教美女网站视频一区| 久久麻豆一区二区| 成人国产精品视频|