both ack and gcc can compile klib16.S

This commit is contained in:
Tomas Hruby 2010-08-06 12:46:44 +00:00
parent 905e94f058
commit 58654acf08
2 changed files with 11 additions and 8 deletions

View File

@ -32,8 +32,10 @@ SRCS+= arch_do_vmctl.c \
arch_watchdog.c \ arch_watchdog.c \
pre_init.c pre_init.c
.if ${COMPILER_TYPE} == "ack"
I86CPPFLAGS = -mi86 I86CPPFLAGS = -mi86
I86LDFLAGS = -mi86 I86LDFLAGS = -mi86
CPPFLAGS.klib16.S = ${I86CPPFLAGS} CPPFLAGS.klib16.S = ${I86CPPFLAGS}
LDFLAGS.klib16.S = ${I86LDFLAGS} LDFLAGS.klib16.S = ${I86LDFLAGS}
.endif

View File

@ -18,6 +18,7 @@
.globl _poweroff16_end .globl _poweroff16_end
.text .text
.code16
/*===========================================================================*/ /*===========================================================================*/
/* poweroff16 */ /* poweroff16 */
@ -27,7 +28,7 @@
_poweroff16: _poweroff16:
/* Assume eax is already set to required value of cr0*/ /* Assume eax is already set to required value of cr0*/
.byte 0x0F,0x22,0xC0 /* mov %cr0,%eax */ .byte 0x0F,0x22,0xC0 /* mov %cr0,%eax */
jmpf $0,$(BIOS_POWEROFF_ENTRY + real_mode - _poweroff16) ljmp $0,$(BIOS_POWEROFF_ENTRY + real_mode - _poweroff16)
real_mode: real_mode:
mov $((BIOS_POWEROFF_ENTRY >> 4) + 0x200),%ax mov $((BIOS_POWEROFF_ENTRY >> 4) + 0x200),%ax
mov %ax, %ds mov %ax, %ds
@ -40,34 +41,34 @@ real_mode:
gate_A20: gate_A20:
call kb_wait call kb_wait
movb $0xD1,%al movb $0xD1,%al
outb 0x64 outb $0x64
call kb_wait call kb_wait
movb $0xDD,%al movb $0xDD,%al
orb %ah,%al orb %ah,%al
outb 0x60 outb $0x60
call kb_wait call kb_wait
movb $0xFF,%al movb $0xFF,%al
outb 0x64 outb $0x64
call kb_wait call kb_wait
/* Connect to APM */ /* Connect to APM */
mov $0x5301,%ax mov $0x5301,%ax
mov $0x0,%bx mov $0x0,%bx
int 0x15 int $0x15
jc apm_err jc apm_err
/* Enable power management */ /* Enable power management */
mov $0x5308,%ax mov $0x5308,%ax
mov $0x1,%bx mov $0x1,%bx
mov $0x1,%cx mov $0x1,%cx
int 0x15 int $0x15
jc apm_err jc apm_err
/* Set power state to off */ /* Set power state to off */
mov $0x5307,%ax mov $0x5307,%ax
mov $0x01,%bx mov $0x01,%bx
mov $0x3,%cx mov $0x3,%cx
int 0x15 int $0x15
jc apm_err jc apm_err
0: hlt 0: hlt
jmp 0b jmp 0b
@ -93,7 +94,7 @@ apm_err:
jmp 0b jmp 0b
kb_wait: kb_wait:
inb 0x64 inb $0x64
testb $0x02,%al testb $0x02,%al
jnz kb_wait jnz kb_wait
ret ret