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

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

?? setup.s

?? LINUX1.0源代碼,代碼條理清晰
?? 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
! (niemann@rubdv15.ETDV.Ruhr-Uni-Bochum.De)
!

! NOTE! These had better be the same as in bootsect.s!
#include <linux/config.h>
#include <linux/segment.h>

#ifndef SVGA_MODE
#define SVGA_MODE ASK_VGA
#endif

INITSEG  = DEF_INITSEG	! we move boot here - out of the way
SYSSEG   = DEF_SYSSEG	! system loaded at 0x10000 (65536).
SETUPSEG = DEF_SETUPSEG	! this is the current segment

.globl begtext, begdata, begbss, endtext, enddata, endbss
.text
begtext:
.data
begdata:
.bss
begbss:
.text

entry start
start:

! ok, the read went well so we get current cursor position and save it for
! posterity.

	mov	ax,#INITSEG	! this is done in bootsect already, but...
	mov	ds,ax

! Get memory size (extended mem, kB)

	mov	ah,#0x88
	int	0x15
	mov	[2],ax

! set the keyboard repeat rate to the max

	mov	ax,#0x0305
	xor	bx,bx		! clear bx
	int	0x16

! check for EGA/VGA and some config parameters

	mov	ah,#0x12
	mov	bl,#0x10
	int	0x10
	mov	[8],ax
	mov	[10],bx
	mov	[12],cx
	mov	ax,#0x5019
	cmp	bl,#0x10
	je	novga
	mov	ax,#0x1a00	! Added check for EGA/VGA discrimination
	int	0x10
	mov	bx,ax
	mov	ax,#0x5019
	cmp	bl,#0x1a	! 1a means VGA, anything else EGA or lower
	jne	novga	
	call	chsvga
novga:	mov	[14],ax
	mov	ah,#0x03	! read cursor pos
	xor	bh,bh		! clear bh
	int	0x10		! save it in known place, con_init fetches
	mov	[0],dx		! it from 0x90000.
	
! Get video-card data:
	
	mov	ah,#0x0f
	int	0x10
	mov	[4],bx		! bh = display page
	mov	[6],ax		! al = video mode, ah = window width

! Get hd0 data

	xor	ax,ax		! clear ax
	mov	ds,ax
	lds	si,[4*0x41]
	mov	ax,#INITSEG
	mov	es,ax
	mov	di,#0x0080
	mov	cx,#0x10
	cld
	rep
	movsb

! Get hd1 data

	xor	ax,ax		! clear ax
	mov	ds,ax
	lds	si,[4*0x46]
	mov	ax,#INITSEG
	mov	es,ax
	mov	di,#0x0090
	mov	cx,#0x10
	cld
	rep
	movsb

! Check that there IS a hd1 :-)

	mov	ax,#0x01500
	mov	dl,#0x81
	int	0x13
	jc	no_disk1
	cmp	ah,#3
	je	is_disk1
no_disk1:
	mov	ax,#INITSEG
	mov	es,ax
	mov	di,#0x0090
	mov	cx,#0x10
	xor	ax,ax		! clear ax
	cld
	rep
	stosb
is_disk1:

! check for PS/2 pointing device

	mov	ax,#INITSEG
	mov	ds,ax
	mov	[0x1ff],#0	! default is no pointing device
	int	0x11		! int 0x11: equipment determination
	test	al,#0x04	! check if pointing device installed
	jz	no_psmouse
	mov	[0x1ff],#0xaa	! device present
no_psmouse:
! now we want to move to protected mode ...

	cli			! no interrupts allowed !
	mov	al,#0x80	! disable NMI for the bootup sequence
	out	#0x70,al

! first we move the system to its rightful place

	mov	ax,#0x100	! start of destination segment
	mov	bx,#0x1000	! start of source segment
	cld			! 'direction'=0, movs moves forward
do_move:
	mov	es,ax		! destination segment
	add	ax,#0x100
	cmp	ax,#0x9000
	jz	end_move
	mov	ds,bx		! source segment
	add	bx,#0x100
	sub	di,di
	sub	si,si
	mov 	cx,#0x800
	rep
	movsw
	jmp	do_move

! then we load the segment descriptors

end_move:
	mov	ax,#SETUPSEG	! right, forgot this at first. didn't work :-)
	mov	ds,ax
	lidt	idt_48		! load idt with 0,0
	lgdt	gdt_48		! load gdt with whatever appropriate

! that was painless, now we enable A20

	call	empty_8042
	mov	al,#0xD1		! command write
	out	#0x64,al
	call	empty_8042
	mov	al,#0xDF		! A20 on
	out	#0x60,al
	call	empty_8042

! make sure any possible coprocessor is properly reset..

	xor	ax,ax
	out	#0xf0,al
	call	delay
	out	#0xf1,al
	call	delay

! well, that went ok, I hope. Now we have to reprogram the interrupts :-(
! we put them right after the intel-reserved hardware interrupts, at
! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really
! messed this up with the original PC, and they haven't been able to
! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f,
! which is used for the internal hardware interrupts as well. We just
! have to reprogram the 8259's, and it isn't fun.

	mov	al,#0x11		! initialization sequence
	out	#0x20,al		! send it to 8259A-1
	call	delay
	out	#0xA0,al		! and to 8259A-2
	call	delay
	mov	al,#0x20		! start of hardware int's (0x20)
	out	#0x21,al
	call	delay
	mov	al,#0x28		! start of hardware int's 2 (0x28)
	out	#0xA1,al
	call	delay
	mov	al,#0x04		! 8259-1 is master
	out	#0x21,al
	call	delay
	mov	al,#0x02		! 8259-2 is slave
	out	#0xA1,al
	call	delay
	mov	al,#0x01		! 8086 mode for both
	out	#0x21,al
	call	delay
	out	#0xA1,al
	call	delay
	mov	al,#0xFF		! mask off all interrupts for now
	out	#0xA1,al
	call	delay
	mov	al,#0xFB		! mask all irq's but irq2 which
	out	#0x21,al		! is cascaded

! well, that certainly wasn't fun :-(. Hopefully it works, and we don't
! need no steenking BIOS anyway (except for the initial loading :-).
! The BIOS-routine wants lots of unnecessary data, and it's less
! "interesting" anyway. This is how REAL programmers do it.
!
! Well, now's the time to actually move into protected mode. To make
! things as simple as possible, we do no register set-up or anything,
! we let the gnu-compiled 32-bit programs do that. We just jump to
! absolute address 0x00000, in 32-bit protected mode.
!
! Note that the short jump isn't strictly needed, althought there are
! reasons why it might be a good idea. It won't hurt in any case.
!
	mov	ax,#0x0001	! protected mode (PE) bit
	lmsw	ax		! This is it!
	jmp	flush_instr
flush_instr:
	jmpi	0x1000,KERNEL_CS	! jmp offset 1000 of segment 0x10 (cs)

! This routine checks that the keyboard command queue is empty
! (after emptying the output buffers)
!
! No timeout is used - if this hangs there is something wrong with
! the machine, and we probably couldn't proceed anyway.
empty_8042:
	call	delay
	in	al,#0x64	! 8042 status port
	test	al,#1		! output buffer?
	jz	no_output
	call	delay
	in	al,#0x60	! read it
	jmp	empty_8042
no_output:
	test	al,#2		! is input buffer full?
	jnz	empty_8042	! yes - loop
	ret
!
! Read a key and return the (US-)ascii code in al, scan code in ah
!
getkey:
	xor	ah,ah
	int	0x16
	ret

!
! Read a key with a timeout of 30 seconds. The cmos clock is used to get
! the time.
!
getkt:
	call	gettime
	add	al,#30		! wait 30 seconds
	cmp	al,#60
	jl	lminute
	sub	al,#60
lminute:
	mov	cl,al
again:	mov	ah,#0x01
	int	0x16
	jnz	getkey		! key pressed, so get it
	call	gettime
	cmp	al,cl
	jne	again
	mov	al,#0x20	! timeout, return default char `space'
	ret

!
! Flush the keyboard buffer
!
flush:	mov	ah,#0x01
	int	0x16
	jz	empty
	xor	ah,ah
	int	0x16
	jmp	flush
empty:	ret

!
! Read the cmos clock. Return the seconds in al
!
gettime:
	push	cx
	mov	ah,#0x02
	int	0x1a
	mov	al,dh			! dh contains the seconds
	and	al,#0x0f
	mov	ah,dh
	mov	cl,#0x04
	shr	ah,cl
	aad
	pop	cx
	ret

!
! Delay is needed after doing i/o
!
delay:
	.word	0x00eb			! jmp $+2
	ret

! Routine trying to recognize type of SVGA-board present (if any)
! and if it recognize one gives the choices of resolution it offers.
! If one is found the resolution chosen is given by al,ah (rows,cols).

chsvga:	cld
	push	ds
	push	cs
	mov	ax,[0x01fa]
	pop	ds
	mov	modesave,ax
	mov 	ax,#0xc000
	mov	es,ax
	mov	ax,modesave
	cmp	ax,#NORMAL_VGA
	je	defvga
	cmp	ax,#EXTENDED_VGA
	je	vga50
	cmp	ax,#ASK_VGA
	jne	svga
	lea	si,msg1
	call	prtstr
	call	flush
nokey:	call	getkt
	cmp	al,#0x0d		! enter ?
	je	svga			! yes - svga selection
	cmp	al,#0x20		! space ?
	je	defvga			! no - repeat
	call 	beep
	jmp	nokey
defvga:	mov	ax,#0x5019
	pop	ds
	ret
/* extended vga mode: 80x50 */
vga50:
	mov	ax,#0x1112
	xor	bl,bl
	int	0x10		! use 8x8 font set (50 lines on VGA)
	mov	ax,#0x1200
	mov	bl,#0x20
	int	0x10		! use alternate print screen
	mov	ax,#0x1201
	mov	bl,#0x34
	int	0x10		! turn off cursor emulation
	mov	ah,#0x01
	mov	cx,#0x0607
	int	0x10		! turn on cursor (scan lines 6 to 7)
	pop	ds
	mov	ax,#0x5032	! return 80x50
	ret
/* extended vga mode: 80x28 */
vga28:
	pop	ax		! clean the stack
	mov	ax,#0x1111
	xor	bl,bl
	int	0x10		! use 9x14 fontset (28 lines on VGA)
	mov	ah, #0x01
	mov	cx,#0x0b0c
	int	0x10		! turn on cursor (scan lines 11 to 12)
	pop	ds
	mov	ax,#0x501c	! return 80x28
	ret
/* svga modes */
svga:   cld
        lea     si,id9GXE	! Check for the #9GXE (jyanowit@orixa.mtholyoke.edu,thanks dlm40629@uxa.cso.uiuc.edu)
        mov     di,#0x49	! id string is at c000:049
        mov     cx,#0x11	! length of "Graphics Power By"
        repe
        cmpsb
        jne     of1280
is9GXE:	lea 	si,dsc9GXE	! table of descriptions of video modes for BIOS
	lea	di,mo9GXE	! table of sizes of video modes for my BIOS
	br	selmod		! go ask for video mode
of1280:	cld	
	lea	si,idf1280	! Check for Orchid F1280 (dingbat@diku.dk)
	mov	di,#0x10a	! id string is at c000:010a
	mov	cx,#0x21	! length
	repe
	cmpsb
	jne	nf1280	
isVRAM:	lea	si,dscf1280
	lea	di,mof1280
	br	selmod
nf1280:	lea	si,idVRAM
	mov	di,#0x10a
	mov	cx,#0x0c
	repe
	cmpsb
	je	isVRAM
	cld
	lea 	si,idati		! Check ATI 'clues'
	mov	di,#0x31
	mov 	cx,#0x09
	repe
	cmpsb
	jne	noati
	lea	si,dscati
	lea	di,moati
	br	selmod
noati:	mov	ax,#0x200f		! Check Ahead 'clues'
	mov	dx,#0x3ce
	out	dx,ax

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久网| 在线精品国精品国产尤物884a| 一区二区三区在线观看欧美| 玉足女爽爽91| 青青草视频一区| 99久久免费国产| 不卡一二三区首页| 日韩视频在线观看一区二区| 亚洲欧洲av在线| 水蜜桃久久夜色精品一区的特点| 精品一区二区在线看| 91麻豆国产福利在线观看| 欧美一级高清片| 国产精品久久影院| 久久国产精品99久久久久久老狼| 国产伦精一区二区三区| 色欧美日韩亚洲| 国产亚洲综合在线| 五月综合激情婷婷六月色窝| 成人毛片视频在线观看| 4438x成人网最大色成网站| 欧美成人一区二区三区| 亚洲综合久久av| 成人av在线资源网站| 色8久久精品久久久久久蜜| 26uuu国产电影一区二区| 一区二区三区加勒比av| 成人午夜精品在线| 日韩一区和二区| 亚洲精品日日夜夜| 欧美精品日日鲁夜夜添| 日韩欧美一区二区视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 三级不卡在线观看| 欧亚一区二区三区| 久久久久一区二区三区四区| 美女mm1313爽爽久久久蜜臀| 在线影视一区二区三区| 1区2区3区国产精品| 国产麻豆视频一区| 在线不卡a资源高清| 亚洲欧洲日韩av| 国产91精品一区二区| 久久亚洲精华国产精华液 | 日韩午夜在线影院| 亚洲尤物在线视频观看| 国产精品一区在线观看乱码| 国产一区视频在线看| 一本久久a久久精品亚洲| 91精品国产91久久久久久最新毛片| 欧美精品一区二区三区蜜桃视频| 91福利资源站| 91黄色免费网站| 亚洲欧美综合色| 成人福利视频网站| 国产精品成人一区二区三区夜夜夜 | 国产精品少妇自拍| 国产激情偷乱视频一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 国产精品一区二区91| 精品成人a区在线观看| 精品系列免费在线观看| 久久99精品久久久久久国产越南| 成人精品免费网站| 国产精品毛片高清在线完整版| 韩国女主播成人在线观看| 欧美精品一区二区蜜臀亚洲| 国产九色精品成人porny | 国产传媒一区在线| 亚洲国产日韩精品| 欧美tk—视频vk| 久久99精品久久久久久动态图 | 色婷婷久久综合| 亚洲123区在线观看| 日韩免费观看2025年上映的电影| 久久99精品久久久久久国产越南 | 亚洲欧美日韩国产综合在线| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩欧美精品在线视频| 国产精品一区二区视频| 国产精品视频免费看| 欧美综合天天夜夜久久| 琪琪久久久久日韩精品| 国产精品你懂的在线| 在线免费观看视频一区| 韩国欧美国产一区| 亚洲欧美日韩精品久久久久| 91精品国产综合久久福利软件| 经典三级一区二区| 亚洲精品第1页| 精品日韩成人av| 91久久精品国产91性色tv| 亚洲国产一区二区三区青草影视| 日韩美女视频一区二区在线观看| 国产一区二区三区高清播放| 伊人一区二区三区| 日韩亚洲欧美一区| 肉肉av福利一精品导航| 国产一区二区三区四| 国产91露脸合集magnet| 欧美tickling网站挠脚心| 色狠狠一区二区| 国产成人av一区二区三区在线 | 成人黄色av电影| 日本成人在线网站| 亚洲女人小视频在线观看| 精品国产免费视频| 欧美日韩视频不卡| www.亚洲人| 国产一区美女在线| 日韩国产欧美一区二区三区| 国产精品免费视频观看| 久久亚区不卡日本| 日韩视频不卡中文| 欧美日韩精品欧美日韩精品| 91视频在线观看免费| 久久综合精品国产一区二区三区| 免费成人在线影院| 欧美日韩一区二区三区不卡| 国产一区二区精品久久91| 在线中文字幕不卡| 国内精品久久久久影院薰衣草| 亚洲成人av一区二区| 亚洲男人天堂一区| 国产精品激情偷乱一区二区∴| 精品国产伦理网| 欧美一级久久久久久久大片| 欧美影院精品一区| 91精彩视频在线观看| 色婷婷久久99综合精品jk白丝 | 丁香婷婷深情五月亚洲| 精品一区二区在线视频| 麻豆专区一区二区三区四区五区| 亚洲五码中文字幕| 天天操天天色综合| 日韩av中文字幕一区二区三区| 三级欧美韩日大片在线看| 91天堂素人约啪| 国内精品国产三级国产a久久| 国产精品久久久久久亚洲伦| 国产精品全国免费观看高清 | 久久99精品久久久久久久久久久久 | 国产精品久久免费看| 精品理论电影在线观看| 欧美成人在线直播| 久久久久久久综合日本| 国产片一区二区| 日韩美女视频19| 亚洲美女一区二区三区| 午夜影院久久久| 蜜桃久久精品一区二区| 国产精品正在播放| 成人av资源下载| 欧美色手机在线观看| 欧美一区二区精美| 国产欧美日韩中文久久| 亚洲精品日韩一| 午夜精品一区二区三区免费视频| 午夜精品影院在线观看| 国内精品免费**视频| 91看片淫黄大片一级| 91精品国产综合久久久久久久久久 | 4438成人网| 欧美激情艳妇裸体舞| 亚洲一区二区精品3399| 狠狠久久亚洲欧美| 99久久精品免费精品国产| 欧美理论片在线| 欧美国产精品一区二区| 一个色综合av| 国产在线一区观看| 在线亚洲精品福利网址导航| 欧美一区二区播放| 国产精品黄色在线观看| 天堂久久一区二区三区| 国产一区二区三区黄视频| 欧美在线视频你懂得| 久久夜色精品国产噜噜av| 亚洲男人的天堂在线aⅴ视频| 青青草国产精品97视觉盛宴 | 欧美三级电影在线观看| 欧美精品一区二| 亚洲午夜私人影院| 不卡影院免费观看| 日韩欧美视频一区| 一区二区高清视频在线观看| 激情综合色丁香一区二区| 一本大道久久精品懂色aⅴ| 精品久久久久一区二区国产| 亚洲视频每日更新| 国产精品一区二区不卡| 欧美一区二区高清| 中文字幕在线观看一区二区| 丝袜a∨在线一区二区三区不卡| 久久成人精品无人区| 欧美日韩国产区一| 亚洲欧美日韩小说| 国产乱码精品一品二品| 欧美二区三区的天堂| 中文字幕在线一区|