kern

annotate src/segm-asm.S @ 80:4db99a52863e

fixed the "endianess" of the text messages in the ATA identify info block. this is the first time I've seen wrong byteorder in ascii text, the ATA committee should be commended.
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 06 Dec 2011 13:35:39 +0200
parents 4eaecb14fe31
children
rev   line source
nuclear@7 1 .data
nuclear@8 2 .align 4
nuclear@8 3 /* memory reserved for setup_selectors */
nuclear@7 4 off:.long 0
nuclear@7 5 seg:.short 0
nuclear@8 6 /* memory reserved for set_gdt */
nuclear@8 7 lim:.short 0
nuclear@8 8 addr:.long 0
nuclear@7 9
nuclear@7 10 .text
nuclear@7 11 /* setup_selectors(uint16_t code, uint16_t data)
nuclear@7 12 * loads the requested selectors to all the selector registers */
nuclear@7 13 .globl setup_selectors
nuclear@7 14 setup_selectors:
nuclear@8 15 /* set data selectors directly */
nuclear@7 16 movl 8(%esp), %eax
nuclear@7 17 movw %ax, %ss
nuclear@7 18 movw %ax, %es
nuclear@7 19 movw %ax, %ds
nuclear@7 20 movw %ax, %gs
nuclear@7 21 movw %ax, %fs
nuclear@8 22 /* set cs using a long jump */
nuclear@7 23 movl 4(%esp), %eax
nuclear@7 24 movw %ax, (seg)
nuclear@7 25 movl $ldcs, (off)
nuclear@7 26 ljmp *off
nuclear@7 27 ldcs:
nuclear@7 28 ret
nuclear@7 29
nuclear@7 30 /* set_gdt(uint32_t addr, uint16_t limit)
nuclear@7 31 * loads the GDTR with the new address and limit for the GDT */
nuclear@7 32 .globl set_gdt
nuclear@7 33 set_gdt:
nuclear@7 34 movl 4(%esp), %eax
nuclear@8 35 movl %eax, (addr)
nuclear@7 36 movw 8(%esp), %ax
nuclear@8 37 movw %ax, (lim)
nuclear@8 38 lgdt (lim)
nuclear@7 39 ret
nuclear@54 40
nuclear@54 41 /* set_task_reg(uint16_t tss_selector)
nuclear@54 42 * loads the TSS selector in the task register */
nuclear@54 43 .globl set_task_reg
nuclear@54 44 set_task_reg:
nuclear@55 45 mov 4(%esp), %eax
nuclear@54 46 ltr 4(%esp)
nuclear@54 47 ret