X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Floader.S;h=b7842d3840743c6f25ab0bceaafcbd97e74e65fd;hb=8d5f8c112280d6e9eee7da93326ff64b72145963;hp=2d76763cffc3dcdc2aa339404bfb674360e22ae1;hpb=8abbb333aea445641d967befd3ca477502ea770b;p=pintos-anon diff --git a/src/threads/loader.S b/src/threads/loader.S index 2d76763..b7842d3 100644 --- a/src/threads/loader.S +++ b/src/threads/loader.S @@ -56,14 +56,16 @@ #define CR0_PG 0x80000000 /* Paging. */ #define CR0_WP 0x00010000 /* Write-Protect enable in kernel mode. */ -# Code runs in real mode, which is a 16-bit segment. .globl start start: + +# Code runs in real mode, which is a 16-bit segment. .code16 -# Disable interrupts. -# String instructions go upward. +# Disable interrupts, because we will not be prepared to handle them +# in protected mode until much later. +# String instructions go upward (e.g. for "rep stosl" below). cli cld @@ -220,6 +222,17 @@ start: movl $1, %ebx movl $LOADER_KERN_BASE + LOADER_PHYS_BASE, %edi + +# Disable interrupt delivery by IDE controller, because we will be +# polling for data. +# (If we don't do this, Bochs 2.2.6 will never deliver any IDE +# interrupt to us later after we reset the interrupt controller during +# boot, even if we also reset the IDE controller.) + + movw $0x3f6, %dx + movb $0x02, %al + outb %al, %dx + read_sector: # Poll status register while controller busy.