projects
/
bootcensus
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
838af4688e44bd453351ee3d651e8c0270b8dace
[bootcensus]
/
src
/
boot
/
boot2.s
1
# this is the second-stage boot loader
2
.code16
3
.section .boot2,"a"
4
5
.extern ser_putchar
6
7
mov $0x13, %ax
8
int $0x10
9
10
# copy palette
11
mov $logo_pal, %si
12
xor %cl, %cl
13
14
0: xor %eax, %eax
15
mov $0x3c8, %dx
16
movb %cl, %al
17
outb %al, %dx
18
#### DBG
19
call ser_print_num
20
mov $58, %al
21
call ser_putchar
22
mov $32, %al
23
call ser_putchar
24
xor %eax, %eax
25
####
26
inc %dx
27
# red
28
movb (%si), %al
29
inc %si
30
shr $2, %al
31
outb %al, %dx
32
#### DBG
33
call ser_print_num
34
mov $32, %al
35
call ser_putchar
36
xor %eax, %eax
37
####
38
# green
39
movb (%si), %al
40
inc %si
41
shr $2, %al
42
outb %al, %dx
43
#### DBG
44
call ser_print_num
45
mov $32, %al
46
call ser_putchar
47
xor %eax, %eax
48
####
49
# blue
50
movb (%si), %al
51
inc %si
52
shr $2, %al
53
outb %al, %dx
54
#### DBG
55
call ser_print_num
56
mov $32, %al
57
call ser_putchar
58
mov $10, %al
59
call ser_putchar
60
xor %eax, %eax
61
####
62
add $1, %cl
63
jnc 0b
64
65
# copy pixels
66
pushw $0xa000
67
pop %es
68
xor %di, %di
69
mov $logo_pix, %eax
70
shr $4, %eax
71
mov %ax, %ds
72
xor %si, %si
73
mov $16000, %ecx
74
rep movsl
75
76
cli
77
hlt
78
79
# expects string pointer in ds:si
80
ser_print_str:
81
pusha
82
83
0: mov (%si), %al
84
cmp $0, %al
85
jz .Lend
86
call ser_putchar
87
inc %si
88
jmp 0b
89
90
.Lend: popa
91
ret
92
93
94
# expects number in eax
95
ser_print_num:
96
# save registers
97
pusha
98
99
movw $numbuf + 16, %si
100
movb $0, (%si)
101
mov $10, %ebx
102
.Lconvloop:
103
xor %edx, %edx
104
div %ebx
105
add $48, %dl
106
dec %si
107
mov %dl, (%si)
108
cmp $0, %eax
109
jnz .Lconvloop
110
111
call ser_print_str
112
113
# restore regs
114
popa
115
ret
116
117
numbuf: .space 16
118
119
logo_pal:
120
.incbin "logo.pal"
121
122
.align 16
123
logo_pix:
124
.incbin "logo.raw"