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