Blame


1 a1cd4b7f 2024-10-03 benni [cpu 286]
2 a1cd4b7f 2024-10-03 benni [bits 16]
3 50eedbae 2024-10-05 benni
4 b8971940 2024-10-05 benni %include "macros.inc"
5 50eedbae 2024-10-05 benni
6 c9ad2767 2024-10-07 benni struc TSS
7 c9ad2767 2024-10-07 benni .link: resw 1 ; +0x00
8 c9ad2767 2024-10-07 benni .sp0: resw 1 ; +0x02
9 c9ad2767 2024-10-07 benni .ss0: resw 1 ; +0x04
10 c9ad2767 2024-10-07 benni .sp1: resw 1 ; +0x06
11 c9ad2767 2024-10-07 benni .ss1: resw 1 ; +0x08
12 c9ad2767 2024-10-07 benni .sp2: resw 1 ; +0x0a
13 c9ad2767 2024-10-07 benni .ss2: resw 1 ; +0x0c
14 c9ad2767 2024-10-07 benni .ip: resw 1 ; +0x0e
15 c9ad2767 2024-10-07 benni .flags: resw 1 ; +0x10
16 c9ad2767 2024-10-07 benni .ax: resw 1 ; +0x12
17 c9ad2767 2024-10-07 benni .cx: resw 1 ; +0x14
18 c9ad2767 2024-10-07 benni .dx: resw 1 ; +0x16
19 c9ad2767 2024-10-07 benni .bx: resw 1 ; +0x18
20 c9ad2767 2024-10-07 benni .sp: resw 1 ; +0x1a
21 c9ad2767 2024-10-07 benni .bp: resw 1 ; +0x1c
22 c9ad2767 2024-10-07 benni .si: resw 1 ; +0x1e
23 c9ad2767 2024-10-07 benni .di: resw 1 ; +0x20
24 c9ad2767 2024-10-07 benni .es: resw 1 ; +0x22
25 c9ad2767 2024-10-07 benni .cs: resw 1 ; +0x24
26 c9ad2767 2024-10-07 benni .ss: resw 1 ; +0x26
27 c9ad2767 2024-10-07 benni .ds: resw 1 ; +0x28
28 c9ad2767 2024-10-07 benni .ldtr: resw 1 ; +0x2a
29 c9ad2767 2024-10-07 benni .size: ; +0x2c
30 c9ad2767 2024-10-07 benni endstruc
31 c9ad2767 2024-10-07 benni
32 a1cd4b7f 2024-10-03 benni section .text
33 9990f831 2024-10-05 benni extern floppy_init
34 a1cd4b7f 2024-10-03 benni global _entry
35 9990f831 2024-10-05 benni global putchar
36 9990f831 2024-10-05 benni global puts
37 9990f831 2024-10-05 benni global puthexb
38 9990f831 2024-10-05 benni global puthexw
39 9990f831 2024-10-05 benni global panic
40 a1cd4b7f 2024-10-03 benni _entry:
41 a1cd4b7f 2024-10-03 benni pop dx
42 a1cd4b7f 2024-10-03 benni mov byte [bootdrv], dl
43 a1cd4b7f 2024-10-03 benni
44 79ff103d 2024-10-07 benni ; copy user task into 0x2000:0
45 79ff103d 2024-10-07 benni mov ax, 0x2000
46 79ff103d 2024-10-07 benni mov es, ax
47 79ff103d 2024-10-07 benni xor di, di
48 79ff103d 2024-10-07 benni lea si, [user]
49 79ff103d 2024-10-07 benni lea cx, [user.end - user]
50 79ff103d 2024-10-07 benni rep movsb
51 79ff103d 2024-10-07 benni
52 a64d9d6e 2024-10-05 benni ; clear screen
53 a64d9d6e 2024-10-05 benni mov bx, 0xb800
54 a64d9d6e 2024-10-05 benni mov es, bx
55 a64d9d6e 2024-10-05 benni xor di, di
56 a64d9d6e 2024-10-05 benni mov ax, (' ' | (0x07 << 8))
57 a64d9d6e 2024-10-05 benni mov cx, (80 * 25 * 2)
58 a64d9d6e 2024-10-05 benni rep stosw
59 a64d9d6e 2024-10-05 benni
60 a1cd4b7f 2024-10-03 benni ; get size of conventional memory (below 640K)
61 a1cd4b7f 2024-10-03 benni int 0x12
62 a1cd4b7f 2024-10-03 benni mov word [convmem], ax
63 a1cd4b7f 2024-10-03 benni
64 a1cd4b7f 2024-10-03 benni ; get size of extended memory (above 1M)
65 a1cd4b7f 2024-10-03 benni mov ah, 0x88
66 a1cd4b7f 2024-10-03 benni int 0x15
67 a1cd4b7f 2024-10-03 benni jc .noxm
68 a1cd4b7f 2024-10-03 benni mov word [highmem], ax
69 a1cd4b7f 2024-10-03 benni
70 a1cd4b7f 2024-10-03 benni .noxm:
71 ce2fe607 2024-10-05 benni ; NOTE: BIOS cannot be accessed from here
72 a64d9d6e 2024-10-05 benni cli
73 ce2fe607 2024-10-05 benni
74 ce2fe607 2024-10-05 benni ; disable keyboard
75 ce2fe607 2024-10-05 benni call .wait
76 ce2fe607 2024-10-05 benni mov al, 0xAD
77 ce2fe607 2024-10-05 benni out 0x64, al
78 ce2fe607 2024-10-05 benni
79 ce2fe607 2024-10-05 benni ; read from input
80 ce2fe607 2024-10-05 benni call .wait
81 ce2fe607 2024-10-05 benni mov al, 0xD0
82 ce2fe607 2024-10-05 benni out 0x64, al
83 ce2fe607 2024-10-05 benni call .wait2
84 ce2fe607 2024-10-05 benni in al, 0x60
85 ce2fe607 2024-10-05 benni mov bl, al
86 ce2fe607 2024-10-05 benni
87 ce2fe607 2024-10-05 benni ; write to output
88 ce2fe607 2024-10-05 benni call .wait
89 ce2fe607 2024-10-05 benni mov al,0xD1
90 ce2fe607 2024-10-05 benni out 0x64,al
91 ce2fe607 2024-10-05 benni call .wait
92 ce2fe607 2024-10-05 benni mov al, bl
93 ce2fe607 2024-10-05 benni or al, 2 ; enable A20 line
94 ce2fe607 2024-10-05 benni out 0x60, al
95 ce2fe607 2024-10-05 benni
96 ce2fe607 2024-10-05 benni ; enable keyboard
97 ce2fe607 2024-10-05 benni call .wait
98 ce2fe607 2024-10-05 benni mov al, 0xAE
99 ce2fe607 2024-10-05 benni out 0x64, al
100 ce2fe607 2024-10-05 benni call .wait
101 ce2fe607 2024-10-05 benni jmp .setup
102 ce2fe607 2024-10-05 benni
103 ce2fe607 2024-10-05 benni .wait:
104 ce2fe607 2024-10-05 benni in al,0x64
105 ce2fe607 2024-10-05 benni test al, 2
106 ce2fe607 2024-10-05 benni jnz .wait
107 ce2fe607 2024-10-05 benni ret
108 ce2fe607 2024-10-05 benni
109 ce2fe607 2024-10-05 benni
110 ce2fe607 2024-10-05 benni .wait2:
111 ce2fe607 2024-10-05 benni in al,0x64
112 ce2fe607 2024-10-05 benni test al,1
113 ce2fe607 2024-10-05 benni jz .wait2
114 ce2fe607 2024-10-05 benni ret
115 ce2fe607 2024-10-05 benni
116 ce2fe607 2024-10-05 benni .setup:
117 a64d9d6e 2024-10-05 benni lidt [idtr]
118 a64d9d6e 2024-10-05 benni lgdt [gdtr]
119 a64d9d6e 2024-10-05 benni smsw ax
120 a64d9d6e 2024-10-05 benni or ax, 1
121 a64d9d6e 2024-10-05 benni lmsw ax
122 0f506373 2024-10-07 benni jmp (gdt.text - gdt):.reloadcs
123 a1cd4b7f 2024-10-03 benni
124 50eedbae 2024-10-05 benni .reloadcs:
125 a64d9d6e 2024-10-05 benni lea sp, [stack]
126 0f506373 2024-10-07 benni lea ax, [gdt.data - gdt]
127 a64d9d6e 2024-10-05 benni mov ds, ax
128 a64d9d6e 2024-10-05 benni mov es, ax
129 a64d9d6e 2024-10-05 benni mov ss, ax
130 50eedbae 2024-10-05 benni
131 50eedbae 2024-10-05 benni ; initialize PIC
132 50eedbae 2024-10-05 benni outb_slow 0x20, 0x11 ; Start the initialization routine (in cascae mode)
133 50eedbae 2024-10-05 benni outb_slow 0xA0, 0x11
134 50eedbae 2024-10-05 benni outb_slow 0x21, 0x20 ; Master PIC IRQ offset
135 50eedbae 2024-10-05 benni outb_slow 0xA1, 0x28 ; Slave PIC IRQ offset
136 50eedbae 2024-10-05 benni outb_slow 0x21, 4 ; Tell the master PIC that there is a slave PIC at IRQ2
137 50eedbae 2024-10-05 benni outb_slow 0xA1, 2 ; Tell the slave PIC it's cascade identity
138 50eedbae 2024-10-05 benni outb_slow 0x21, 1 ; Use the 8086-mode (and not the 8088 mode)
139 50eedbae 2024-10-05 benni outb_slow 0xA1, 1
140 50eedbae 2024-10-05 benni outb_slow 0x21, 0xfe ; Set the IRQ masks
141 50eedbae 2024-10-05 benni outb_slow 0xA1, 0xff
142 50eedbae 2024-10-05 benni
143 50eedbae 2024-10-05 benni ; initialize IDT
144 50eedbae 2024-10-05 benni mov al, 0x20
145 50eedbae 2024-10-05 benni mov ah, 0x86
146 50eedbae 2024-10-05 benni lea dx, [i_timer]
147 50eedbae 2024-10-05 benni call set_irq
148 79ff103d 2024-10-07 benni mov al, 0x80
149 79ff103d 2024-10-07 benni mov ah, 0xe6
150 79ff103d 2024-10-07 benni lea dx, [i_sys]
151 79ff103d 2024-10-07 benni call set_irq
152 50eedbae 2024-10-05 benni
153 3a5c7209 2024-10-05 benni lea bp, [convmsg]
154 3a5c7209 2024-10-05 benni call puts
155 3a5c7209 2024-10-05 benni mov ax, word [convmem]
156 3a5c7209 2024-10-05 benni call puthexw
157 3a5c7209 2024-10-05 benni lea bp, [kbmsg]
158 3a5c7209 2024-10-05 benni call puts
159 3a5c7209 2024-10-05 benni
160 3a5c7209 2024-10-05 benni lea bp, [xmmsg]
161 3a5c7209 2024-10-05 benni call puts
162 3a5c7209 2024-10-05 benni mov ax, word [highmem]
163 3a5c7209 2024-10-05 benni call puthexw
164 3a5c7209 2024-10-05 benni lea bp, [kbmsg]
165 3a5c7209 2024-10-05 benni call puts
166 3a5c7209 2024-10-05 benni
167 9990f831 2024-10-05 benni call floppy_init
168 9990f831 2024-10-05 benni
169 c9ad2767 2024-10-07 benni ; set up TSS
170 c9ad2767 2024-10-07 benni mov word [tss + TSS.link], 0
171 c9ad2767 2024-10-07 benni mov word [tss + TSS.sp0], stack
172 0f506373 2024-10-07 benni mov word [tss + TSS.ss0], (gdt.data - gdt)
173 c9ad2767 2024-10-07 benni
174 c9ad2767 2024-10-07 benni ; load TSS into TR
175 c9ad2767 2024-10-07 benni lea ax, [gdt.tss - gdt]
176 c9ad2767 2024-10-07 benni ltr ax
177 5cd42ecd 2024-10-07 benni
178 5cd42ecd 2024-10-07 benni ; load LDT
179 5cd42ecd 2024-10-07 benni lea ax, [gdt.ldt - gdt]
180 5cd42ecd 2024-10-07 benni lldt ax
181 c9ad2767 2024-10-07 benni
182 e3a03814 2024-10-07 benni ; enter userspace, TODO: enter ring 3
183 79ff103d 2024-10-07 benni mov ax, 0x0f ; LDT .data
184 e3a03814 2024-10-07 benni mov ds, ax
185 74abebce 2024-10-07 benni mov es, ax
186 79ff103d 2024-10-07 benni push 0x17 ; ss (LDT .stack)
187 79ff103d 2024-10-07 benni push 0xfffe ; sp
188 0f506373 2024-10-07 benni push 0x202 ; flags (EI | 0x02)
189 79ff103d 2024-10-07 benni push 0x07 ; cs (LDT .text)
190 79ff103d 2024-10-07 benni push 0 ; ip
191 e3a03814 2024-10-07 benni iret
192 a1cd4b7f 2024-10-03 benni
193 50eedbae 2024-10-05 benni i_timer:
194 50eedbae 2024-10-05 benni pusha
195 79ff103d 2024-10-07 benni push ds
196 79ff103d 2024-10-07 benni push es
197 79ff103d 2024-10-07 benni
198 79ff103d 2024-10-07 benni mov ax, (gdt.data - gdt)
199 79ff103d 2024-10-07 benni mov ds, ax
200 79ff103d 2024-10-07 benni mov es, ax
201 79ff103d 2024-10-07 benni
202 50eedbae 2024-10-05 benni mov al, '.'
203 50eedbae 2024-10-05 benni call putchar
204 50eedbae 2024-10-05 benni
205 50eedbae 2024-10-05 benni outb 0x20, 0x20
206 79ff103d 2024-10-07 benni pop es
207 79ff103d 2024-10-07 benni pop ds
208 50eedbae 2024-10-05 benni popa
209 50eedbae 2024-10-05 benni iret
210 50eedbae 2024-10-05 benni
211 79ff103d 2024-10-07 benni ; ds:si - from
212 79ff103d 2024-10-07 benni ; es:di - to
213 79ff103d 2024-10-07 benni ; cx - count
214 79ff103d 2024-10-07 benni copy_from_user:
215 79ff103d 2024-10-07 benni rep movsb
216 79ff103d 2024-10-07 benni ret
217 79ff103d 2024-10-07 benni
218 79ff103d 2024-10-07 benni i_sys: ; syscall interrupt (0x80)
219 79ff103d 2024-10-07 benni push ds
220 79ff103d 2024-10-07 benni push es
221 79ff103d 2024-10-07 benni
222 ae4ed8c5 2024-10-07 benni ; load kernel .data into es
223 79ff103d 2024-10-07 benni push ax
224 79ff103d 2024-10-07 benni mov ax, (gdt.data - gdt)
225 79ff103d 2024-10-07 benni mov es, ax
226 79ff103d 2024-10-07 benni pop ax
227 79ff103d 2024-10-07 benni
228 79ff103d 2024-10-07 benni test ax, ax
229 79ff103d 2024-10-07 benni jz .print
230 79ff103d 2024-10-07 benni
231 79ff103d 2024-10-07 benni ; invalid interrupt
232 79ff103d 2024-10-07 benni mov ax, -1
233 79ff103d 2024-10-07 benni jmp .ret
234 79ff103d 2024-10-07 benni
235 79ff103d 2024-10-07 benni
236 79ff103d 2024-10-07 benni .print:
237 79ff103d 2024-10-07 benni push cx
238 79ff103d 2024-10-07 benni mov si, bx
239 79ff103d 2024-10-07 benni lea di, [ubuf]
240 79ff103d 2024-10-07 benni ; TODO: check that cx < sizeof(ubuf)
241 79ff103d 2024-10-07 benni call copy_from_user
242 79ff103d 2024-10-07 benni pop bx
243 79ff103d 2024-10-07 benni mov byte [ubuf + bx], 0
244 79ff103d 2024-10-07 benni
245 ae4ed8c5 2024-10-07 benni ; load kernel .data into ds & es
246 79ff103d 2024-10-07 benni lea ax, [gdt.data - gdt]
247 79ff103d 2024-10-07 benni mov ds, ax
248 79ff103d 2024-10-07 benni mov es, ax
249 ae4ed8c5 2024-10-07 benni
250 79ff103d 2024-10-07 benni lea bp, [ubuf]
251 e3a03814 2024-10-07 benni call puts
252 79ff103d 2024-10-07 benni xor ax, ax
253 79ff103d 2024-10-07 benni jmp .ret
254 79ff103d 2024-10-07 benni
255 79ff103d 2024-10-07 benni .ret:
256 79ff103d 2024-10-07 benni pop es
257 79ff103d 2024-10-07 benni pop ds
258 79ff103d 2024-10-07 benni iret
259 e3a03814 2024-10-07 benni
260 50eedbae 2024-10-05 benni ; al - num
261 50eedbae 2024-10-05 benni ; ah - attr
262 50eedbae 2024-10-05 benni ; dx - offset
263 50eedbae 2024-10-05 benni set_irq:
264 50eedbae 2024-10-05 benni xor bh, bh
265 50eedbae 2024-10-05 benni mov bl, al
266 50eedbae 2024-10-05 benni shl bx, 3
267 50eedbae 2024-10-05 benni lea bx, [idt + bx]
268 50eedbae 2024-10-05 benni mov word [bx + 0], dx
269 0f506373 2024-10-07 benni mov word [bx + 2], (gdt.text - gdt)
270 50eedbae 2024-10-05 benni mov byte [bx + 4], 0x00
271 50eedbae 2024-10-05 benni mov byte [bx + 5], ah
272 50eedbae 2024-10-05 benni mov word [bx + 6], 0
273 50eedbae 2024-10-05 benni ret
274 50eedbae 2024-10-05 benni
275 a1cd4b7f 2024-10-03 benni error:
276 a64d9d6e 2024-10-05 benni cli
277 a1cd4b7f 2024-10-03 benni lea bp, [errstr]
278 a64d9d6e 2024-10-05 benni call puts
279 a64d9d6e 2024-10-05 benni hlt
280 a64d9d6e 2024-10-05 benni jmp $
281 a1cd4b7f 2024-10-03 benni
282 3a5c7209 2024-10-05 benni ; ax - value
283 3a5c7209 2024-10-05 benni puthexw:
284 3a5c7209 2024-10-05 benni push ax
285 3a5c7209 2024-10-05 benni mov al, ah
286 3a5c7209 2024-10-05 benni call puthexb
287 3a5c7209 2024-10-05 benni pop ax
288 3a5c7209 2024-10-05 benni jmp puthexb
289 3a5c7209 2024-10-05 benni
290 3a5c7209 2024-10-05 benni ; al - value
291 3a5c7209 2024-10-05 benni puthexb:
292 3a5c7209 2024-10-05 benni push ax
293 3a5c7209 2024-10-05 benni shr al, 4
294 3a5c7209 2024-10-05 benni call puthexch
295 3a5c7209 2024-10-05 benni pop ax
296 3a5c7209 2024-10-05 benni and al, 0xf
297 3a5c7209 2024-10-05 benni jmp puthexch
298 3a5c7209 2024-10-05 benni
299 3a5c7209 2024-10-05 benni ; al - hex digit
300 3a5c7209 2024-10-05 benni puthexch:
301 3a5c7209 2024-10-05 benni cmp al, 10
302 3a5c7209 2024-10-05 benni jae .hex
303 3a5c7209 2024-10-05 benni add al, '0'
304 3a5c7209 2024-10-05 benni jmp putchar
305 3a5c7209 2024-10-05 benni
306 3a5c7209 2024-10-05 benni .hex:
307 3a5c7209 2024-10-05 benni add al, 'a' - 10
308 3a5c7209 2024-10-05 benni jmp putchar
309 3a5c7209 2024-10-05 benni
310 a64d9d6e 2024-10-05 benni ; al - char
311 50eedbae 2024-10-05 benni writech:
312 0f506373 2024-10-07 benni lea bx, [gdt.vid - gdt]
313 a64d9d6e 2024-10-05 benni mov es, bx
314 a64d9d6e 2024-10-05 benni
315 a64d9d6e 2024-10-05 benni xor ch, ch
316 a64d9d6e 2024-10-05 benni xor dh, dh
317 a64d9d6e 2024-10-05 benni mov cl, byte [posx]
318 a64d9d6e 2024-10-05 benni mov dl, byte [posy]
319 a64d9d6e 2024-10-05 benni
320 a64d9d6e 2024-10-05 benni cmp al, 10 ; '\n'
321 a64d9d6e 2024-10-05 benni je .nl
322 a64d9d6e 2024-10-05 benni
323 a64d9d6e 2024-10-05 benni imul bx, dx, 80
324 a64d9d6e 2024-10-05 benni add bx, cx
325 a64d9d6e 2024-10-05 benni shl bx, 1
326 a64d9d6e 2024-10-05 benni mov byte [es:bx], al
327 a64d9d6e 2024-10-05 benni
328 a64d9d6e 2024-10-05 benni inc cl
329 a64d9d6e 2024-10-05 benni cmp cl, 80
330 a64d9d6e 2024-10-05 benni je .nl
331 a64d9d6e 2024-10-05 benni mov byte [posx], cl
332 a64d9d6e 2024-10-05 benni ret
333 a64d9d6e 2024-10-05 benni
334 a64d9d6e 2024-10-05 benni .nl:
335 a64d9d6e 2024-10-05 benni mov byte [posx], 0
336 a64d9d6e 2024-10-05 benni inc dl
337 a64d9d6e 2024-10-05 benni
338 a64d9d6e 2024-10-05 benni cmp dl, 25
339 a64d9d6e 2024-10-05 benni je .scroll
340 a64d9d6e 2024-10-05 benni mov byte [posy], dl
341 a64d9d6e 2024-10-05 benni ret
342 a64d9d6e 2024-10-05 benni
343 a64d9d6e 2024-10-05 benni .scroll:
344 b6729e0b 2024-10-05 benni push ds
345 b6729e0b 2024-10-05 benni mov ax, 0x18
346 b6729e0b 2024-10-05 benni mov ds, ax
347 b6729e0b 2024-10-05 benni
348 a64d9d6e 2024-10-05 benni cld
349 a64d9d6e 2024-10-05 benni xor di, di
350 b6729e0b 2024-10-05 benni mov si, 160
351 b6729e0b 2024-10-05 benni mov cx, 80 * 24
352 a64d9d6e 2024-10-05 benni rep movsw
353 a64d9d6e 2024-10-05 benni
354 b6729e0b 2024-10-05 benni pop ds
355 b6729e0b 2024-10-05 benni
356 b6729e0b 2024-10-05 benni mov di, 80 * 24 * 2
357 b6729e0b 2024-10-05 benni mov cx, 80
358 a64d9d6e 2024-10-05 benni mov ax, (' ' | (0x07 << 8))
359 a64d9d6e 2024-10-05 benni rep stosw
360 a64d9d6e 2024-10-05 benni mov byte [posy], 24
361 a64d9d6e 2024-10-05 benni ret
362 a64d9d6e 2024-10-05 benni
363 50eedbae 2024-10-05 benni ; al - ch
364 50eedbae 2024-10-05 benni putchar:
365 50eedbae 2024-10-05 benni call writech
366 50eedbae 2024-10-05 benni jmp update_cursor
367 50eedbae 2024-10-05 benni
368 a64d9d6e 2024-10-05 benni ; bp - str
369 a1cd4b7f 2024-10-03 benni puts:
370 a1cd4b7f 2024-10-03 benni mov al, byte [ds:bp]
371 a1cd4b7f 2024-10-03 benni inc bp
372 a1cd4b7f 2024-10-03 benni test al, al
373 50eedbae 2024-10-05 benni jz update_cursor
374 a1cd4b7f 2024-10-03 benni
375 50eedbae 2024-10-05 benni call writech
376 a1cd4b7f 2024-10-03 benni jmp puts
377 a1cd4b7f 2024-10-03 benni
378 50eedbae 2024-10-05 benni update_cursor:
379 a64d9d6e 2024-10-05 benni mov dx, 0x3D4
380 a64d9d6e 2024-10-05 benni mov al, 0x0f
381 a64d9d6e 2024-10-05 benni out dx, al
382 a64d9d6e 2024-10-05 benni
383 a64d9d6e 2024-10-05 benni mov bx, word [posy]
384 a64d9d6e 2024-10-05 benni imul bx, 80
385 a64d9d6e 2024-10-05 benni add bx, word [posx]
386 a64d9d6e 2024-10-05 benni
387 a64d9d6e 2024-10-05 benni inc dx ; 0x3D5
388 a64d9d6e 2024-10-05 benni mov al, bl
389 a64d9d6e 2024-10-05 benni out dx, al
390 a64d9d6e 2024-10-05 benni
391 a64d9d6e 2024-10-05 benni dec dx ; 0x3D4
392 a64d9d6e 2024-10-05 benni mov al, 0x0E
393 a64d9d6e 2024-10-05 benni out dx, al
394 a64d9d6e 2024-10-05 benni
395 a64d9d6e 2024-10-05 benni inc dx ; 0x3D5
396 a64d9d6e 2024-10-05 benni mov al, bh
397 a64d9d6e 2024-10-05 benni out dx, al
398 a1cd4b7f 2024-10-03 benni ret
399 4dc7f0b4 2024-10-05 benni
400 4dc7f0b4 2024-10-05 benni ; bp - str
401 4dc7f0b4 2024-10-05 benni panic:
402 4dc7f0b4 2024-10-05 benni call puts
403 a1cd4b7f 2024-10-03 benni
404 4dc7f0b4 2024-10-05 benni .halt:
405 4dc7f0b4 2024-10-05 benni cli
406 4dc7f0b4 2024-10-05 benni hlt
407 4dc7f0b4 2024-10-05 benni jmp .halt
408 4dc7f0b4 2024-10-05 benni
409 a1cd4b7f 2024-10-03 benni section .rodata
410 79ff103d 2024-10-07 benni user:
411 79ff103d 2024-10-07 benni incbin "user.bin"
412 79ff103d 2024-10-07 benni .end:
413 a1cd4b7f 2024-10-03 benni hello:
414 a64d9d6e 2024-10-05 benni db "Hello World", 10, 0
415 a1cd4b7f 2024-10-03 benni errstr:
416 a64d9d6e 2024-10-05 benni db "Error", 10, 0
417 3a5c7209 2024-10-05 benni convmsg:
418 3a5c7209 2024-10-05 benni db "Conventional memory: 0x", 0
419 3a5c7209 2024-10-05 benni xmmsg:
420 3a5c7209 2024-10-05 benni db "Extended memory: 0x", 0
421 3a5c7209 2024-10-05 benni kbmsg:
422 3a5c7209 2024-10-05 benni db " KB", 10, 0
423 a1cd4b7f 2024-10-03 benni
424 a64d9d6e 2024-10-05 benni align 2
425 a1cd4b7f 2024-10-03 benni idtr:
426 a1cd4b7f 2024-10-03 benni dw idt.end - idt - 1
427 a64d9d6e 2024-10-05 benni dd idt + 0x10000
428 a1cd4b7f 2024-10-03 benni
429 a64d9d6e 2024-10-05 benni align 2
430 a1cd4b7f 2024-10-03 benni gdtr:
431 a1cd4b7f 2024-10-03 benni dw gdt.end - gdt - 1
432 a64d9d6e 2024-10-05 benni dd gdt + 0x10000
433 a1cd4b7f 2024-10-03 benni
434 a64d9d6e 2024-10-05 benni
435 a64d9d6e 2024-10-05 benni section .data
436 a1cd4b7f 2024-10-03 benni gdt:
437 a1cd4b7f 2024-10-03 benni dq 0
438 a64d9d6e 2024-10-05 benni
439 c9ad2767 2024-10-07 benni .text: ; 0x08 - kernel code
440 a64d9d6e 2024-10-05 benni dw 0xffff
441 a64d9d6e 2024-10-05 benni dw 0x0000
442 a64d9d6e 2024-10-05 benni db 0x01
443 a64d9d6e 2024-10-05 benni db 0x9A
444 a64d9d6e 2024-10-05 benni dw 0x0000
445 a64d9d6e 2024-10-05 benni
446 c9ad2767 2024-10-07 benni .data: ; 0x10 - kernel data
447 a64d9d6e 2024-10-05 benni dw 0xffff
448 a64d9d6e 2024-10-05 benni dw 0x0000
449 a64d9d6e 2024-10-05 benni db 0x01
450 a64d9d6e 2024-10-05 benni db 0x92
451 a64d9d6e 2024-10-05 benni dw 0x0000
452 a64d9d6e 2024-10-05 benni
453 c9ad2767 2024-10-07 benni .vid: ; 0x18 - video memory
454 a64d9d6e 2024-10-05 benni dw 4000
455 a64d9d6e 2024-10-05 benni dw 0x8000
456 a64d9d6e 2024-10-05 benni db 0x0b
457 a64d9d6e 2024-10-05 benni db 0x92
458 a64d9d6e 2024-10-05 benni dw 0x0000
459 c9ad2767 2024-10-07 benni
460 c9ad2767 2024-10-07 benni .tss: ; 0x20 - TSS
461 c9ad2767 2024-10-07 benni dw TSS.size
462 c9ad2767 2024-10-07 benni dw tss
463 c9ad2767 2024-10-07 benni db 0x01
464 c9ad2767 2024-10-07 benni db 0x81
465 c9ad2767 2024-10-07 benni dw 0x0000
466 c9ad2767 2024-10-07 benni
467 5cd42ecd 2024-10-07 benni .ldt: ; 0x28 - LDT
468 5cd42ecd 2024-10-07 benni dw (ldt.end - ldt)
469 5cd42ecd 2024-10-07 benni dw ldt
470 5cd42ecd 2024-10-07 benni db 0x01
471 5cd42ecd 2024-10-07 benni db 0x82
472 5cd42ecd 2024-10-07 benni dw 0x0000
473 a1cd4b7f 2024-10-03 benni .end:
474 a1cd4b7f 2024-10-03 benni
475 5cd42ecd 2024-10-07 benni ldt:
476 5cd42ecd 2024-10-07 benni .text: ; 0x07 - user code
477 5cd42ecd 2024-10-07 benni dw 0xffff
478 5cd42ecd 2024-10-07 benni dw 0x0000
479 5cd42ecd 2024-10-07 benni db 0x02
480 5cd42ecd 2024-10-07 benni db 0xfa
481 5cd42ecd 2024-10-07 benni dw 0x0000
482 5cd42ecd 2024-10-07 benni
483 5cd42ecd 2024-10-07 benni .data: ; 0x0f - user data
484 5cd42ecd 2024-10-07 benni dw 0xffff
485 5cd42ecd 2024-10-07 benni dw 0x0000
486 5cd42ecd 2024-10-07 benni db 0x02
487 5cd42ecd 2024-10-07 benni db 0xf2
488 5cd42ecd 2024-10-07 benni dw 0x0000
489 5cd42ecd 2024-10-07 benni
490 5cd42ecd 2024-10-07 benni .stack: ; 0x17 - user stack
491 5cd42ecd 2024-10-07 benni dw 0xffff
492 5cd42ecd 2024-10-07 benni dw 0x0000
493 5cd42ecd 2024-10-07 benni db 0x03
494 5cd42ecd 2024-10-07 benni db 0xf2
495 5cd42ecd 2024-10-07 benni dw 0x0000
496 5cd42ecd 2024-10-07 benni .end:
497 5cd42ecd 2024-10-07 benni
498 a1cd4b7f 2024-10-03 benni section .bss
499 79ff103d 2024-10-07 benni ubuf:
500 79ff103d 2024-10-07 benni resb 256
501 a64d9d6e 2024-10-05 benni posx:
502 a64d9d6e 2024-10-05 benni resw 1
503 a64d9d6e 2024-10-05 benni posy:
504 a64d9d6e 2024-10-05 benni resw 1
505 a1cd4b7f 2024-10-03 benni bootdrv:
506 a1cd4b7f 2024-10-03 benni resb 1
507 a1cd4b7f 2024-10-03 benni convmem:
508 a1cd4b7f 2024-10-03 benni resw 1 ; in kilobytes
509 a1cd4b7f 2024-10-03 benni highmem:
510 a1cd4b7f 2024-10-03 benni resw 1 ; in kilobytes
511 a1cd4b7f 2024-10-03 benni idt:
512 a1cd4b7f 2024-10-03 benni resq 256
513 a1cd4b7f 2024-10-03 benni .end:
514 a64d9d6e 2024-10-05 benni resb 512
515 a64d9d6e 2024-10-05 benni stack:
516 c9ad2767 2024-10-07 benni tss:
517 c9ad2767 2024-10-07 benni resb TSS.size