Subversion Repositories HelenOS

Rev

Rev 4346 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4346 Rev 4347
1
#ifdef CONFIG_FB
1
#ifdef CONFIG_FB
2
 
2
 
3
#define MULTIBOOT_LOADER_MAGIC  0x2BADB002
3
#define MULTIBOOT_LOADER_MAGIC  0x2BADB002
4
#define MBINFO_BIT_CMDLINE      2
4
#define MBINFO_BIT_CMDLINE      2
5
#define MBINFO_OFFSET_CMDLINE   16
5
#define MBINFO_OFFSET_CMDLINE   16
6
 
6
 
7
	# copy real mode VESA initialization code
7
	# copy real mode VESA initialization code
8
	
8
	
9
	mov $vesa_init, %esi
9
	mov $vesa_init, %esi
10
	mov $VESA_INIT_SEGMENT << 4, %edi
10
	mov $VESA_INIT_SEGMENT << 4, %edi
11
	mov $e_vesa_init - vesa_init, %ecx
11
	mov $e_vesa_init - vesa_init, %ecx
12
	rep movsb
12
	rep movsb
13
	
13
	
14
	# check for GRUB command line
14
	# check for GRUB command line
15
	
15
	
16
	mov grub_eax, %eax
16
	mov grub_eax, %eax
17
	cmp $MULTIBOOT_LOADER_MAGIC, %eax
17
	cmp $MULTIBOOT_LOADER_MAGIC, %eax
18
	jne no_cmdline
18
	jne no_cmdline
19
	
19
	
20
	mov grub_ebx, %ebx
20
	mov grub_ebx, %ebx
21
	mov (%ebx), %eax
21
	mov (%ebx), %eax
22
	bt $MBINFO_BIT_CMDLINE, %eax
22
	bt $MBINFO_BIT_CMDLINE, %eax
23
	jnc no_cmdline
23
	jnc no_cmdline
24
	
24
	
25
	# skip the kernel path in command line
25
	# skip the kernel path in command line
26
	
26
	
27
	mov MBINFO_OFFSET_CMDLINE(%ebx), %esi
27
	mov MBINFO_OFFSET_CMDLINE(%ebx), %esi
28
	
28
	
29
	skip_loop:
29
	skip_loop:
30
		lodsb
30
		lodsb
31
		
31
		
32
		cmp $0, %al
32
		cmp $0, %al
33
		je no_cmdline
33
		je no_cmdline
34
		
34
		
35
		cmp $' ', %al
35
		cmp $' ', %al
36
		je skip_loop_done
36
		je skip_loop_done
37
		
37
		
38
		jmp skip_loop
38
		jmp skip_loop
39
	skip_loop_done:
39
	skip_loop_done:
40
	
40
	
-
 
41
	space_loop:
41
	mov (%esi), %al
42
		mov (%esi), %al
-
 
43
		
42
	cmp $0, %al
44
		cmp $0, %al
43
	je no_cmdline
45
		je no_cmdline
-
 
46
		
-
 
47
		cmp $' ', %al
-
 
48
		jne space_loop_done
-
 
49
		
-
 
50
		inc %esi
-
 
51
		jmp space_loop
-
 
52
	space_loop_done:
44
	
53
	
45
	# copy at most 23 characters from command line
54
	# copy at most 23 characters from command line
46
	
55
	
47
	mov $VESA_INIT_SEGMENT << 4, %edi
56
	mov $VESA_INIT_SEGMENT << 4, %edi
48
	add $default_mode - vesa_init, %edi
57
	add $default_mode - vesa_init, %edi
49
	mov $23, %ecx
58
	mov $23, %ecx
50
	
59
	
51
	cmd_loop:
60
	cmd_loop:
52
		lodsb
61
		lodsb
53
		stosb
62
		stosb
54
		
63
		
55
		cmp $0, %al
64
		cmp $0, %al
56
		je cmd_loop_done
65
		je cmd_loop_done
57
		
66
		
58
		loop cmd_loop
67
		loop cmd_loop
59
	cmd_loop_done:
68
	cmd_loop_done:
60
	
69
	
61
	# zero termination
70
	# zero termination
62
	
71
	
63
	xor %eax, %eax
72
	xor %eax, %eax
64
	stosb
73
	stosb
65
	
74
	
66
	no_cmdline:
75
	no_cmdline:
67
	
76
	
68
	# jump to the real mode
77
	# jump to the real mode
69
	
78
	
70
	mov $VESA_INIT_SEGMENT << 4, %edi
79
	mov $VESA_INIT_SEGMENT << 4, %edi
71
	jmpl *%edi
80
	jmpl *%edi
72
	
81
	
73
	vesa_meeting_point:
82
	vesa_meeting_point:
74
		# returned back to protected mode
83
		# returned back to protected mode
75
		
84
		
76
		mov %esi, KA2PA(vesa_ph_addr)
-
 
77
		mov %di, KA2PA(vesa_height)
85
		mov %ax, KA2PA(vesa_scanline)
78
		shr $16, %edi
86
		shr $16, %eax
79
		mov %di, KA2PA(vesa_width)
87
		mov %ax, KA2PA(vesa_bpp)
-
 
88
		
80
		mov %bx, KA2PA(vesa_scanline)
89
		mov %bx, KA2PA(vesa_height)
81
		shr $16, %ebx
90
		shr $16, %ebx
82
		mov %bx, KA2PA(vesa_bpp)
91
		mov %bx, KA2PA(vesa_width)
-
 
92
		
-
 
93
		mov %dl, KA2PA(vesa_green_pos)
-
 
94
		shr $8, %edx
-
 
95
		mov %dl, KA2PA(vesa_green_mask)
-
 
96
		shr $8, %edx
-
 
97
		mov %dl, KA2PA(vesa_red_pos)
-
 
98
		shr $8, %edx
-
 
99
		mov %dl, KA2PA(vesa_red_mask)
-
 
100
		
-
 
101
		mov %esi, %edx
-
 
102
		mov %dl, KA2PA(vesa_blue_pos)
-
 
103
		shr $8, %edx
-
 
104
		mov %dl, KA2PA(vesa_blue_mask)
-
 
105
		
-
 
106
		mov %edi, KA2PA(vesa_ph_addr)
83
#endif
107
#endif
84
 
108