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

📄 setup.s

📁 Memtest86 is thorough, stand alone memory test for Intel/AMD x86 architecture systems. BIOS based m
💻 S
字号:
/* * 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. * * 1-Jan-96 Modified by Chris Brady for use as a boot/loader for memtest-86. */#define __ASSEMBLY__#include "defs.h".code16.section ".setup", "ax", @progbits.globl startstart:# ok, the read went well # now we want to move to protected mode ...	cli			# no interrupts allowed #	movb	$0x80, %al	# disable NMI for the bootup sequence	outb	%al, $0x70# The system will move itself to its rightful place.	push	%cs	pop	%ds	lidt	idt_48 - start	# load idt with 0,0	lgdt	gdt_48 - start	# load gdt with whatever appropriate# that was painless, now we enable A20	call    empty_8042		movb	$0xD1, %al	# command write	outb	%al, $0x64	call    empty_8042		movb	$0xDF, %al	# A20 on	outb	%al, $0x60	call	empty_8042/* * 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. */	movw	$0x0001, %ax	# protected mode (PE) bit	lmsw	%ax		# This is it#	jmp	flush_instrflush_instr:	movw	$KERNEL_DS, %ax	movw	%ax, %ds	movw	%ax, %es	movw	%ax, %ss	movw	%ax, %fs	movw	%ax, %gsdata32	ljmp	$KERNEL_CS, $(TSTLOAD <<4)	# jmp offset 2000 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	inb	$0x64, %al	# 8042 status port	testb	$1, %al		# output buffer?	jz	no_output	call	delay	inb	$0x60, %al	# read it	jmp	empty_8042	no_output:	testb	$2, %al		# is input buffer full?	jnz	empty_8042	# yes - loop	ret## Delay is needed after doing i/o#delay:	.word	0x00eb			# jmp $+2	retgdt:	.word	0,0,0,0		# dummy	.word	0,0,0,0		# unused	.word	0x7FFF		# limit 128mb	.word	0x0000		# base address=0	.word	0x9A00		# code read/exec	.word	0x00C0		# granularity=4096, 386	.word	0x7FFF		# limit 128mb	.word	0x0000		# base address=0	.word	0x9200		# data read/write	.word	0x00C0		# granularity=4096, 386idt_48:	.word	0			# idt limit=0	.long	0			# idt base=0Lgdt_48:	.word	0x800		# gdt limit=2048, 256 GDT entries	.word	512+gdt - start,0x9	# gdt base = 0X9xxxxmsg1:	.asciz "Setup.S\r\n"	/* Pad setup to the proper size */	.org	(SETUPSECS*512)

⌨️ 快捷键说明

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