Rev 15 | Rev 19 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | ha | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; |
||
3 | ;; Kolibri OS - based on source code Menuet OS, but not 100% compatible. |
||
4 | ;; |
||
5 | ;; See file COPYING or GNU.TXT for details with these additional details: |
||
6 | ;; - All code written in 32 bit x86 assembly language |
||
7 | ;; - No external code (eg. bios) at process execution time |
||
8 | ;; |
||
9 | ;; |
||
10 | ;; Compile with last version FASM |
||
11 | ;; |
||
12 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
7 | me_root | 13 | include "kglobals.inc" |
1 | ha | 14 | include "lang.inc" |
15 | |||
16 | WinMapAddress equ 0x460000 |
||
17 | display_data = 0x460000 |
||
18 | |||
19 | max_processes equ 255 |
||
20 | |||
21 | window_data equ 0x0000 |
||
22 | tss_data equ 0xD20000 |
||
23 | ;tss_step equ (128+2048) ; tss & i/o - 16384 ports, * 256=557056 |
||
24 | tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4 |
||
25 | draw_data equ 0xC00000 |
||
26 | sysint_stack_data equ 0xC03000 |
||
27 | |||
28 | |||
29 | twdw equ (0x3000-window_data) |
||
30 | |||
31 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
32 | ;; |
||
33 | ;; Included files: |
||
34 | ;; |
||
35 | ;; Kernel16.inc |
||
36 | ;; - Booteng.inc English text for bootup |
||
37 | ;; - Bootcode.inc Hardware setup |
||
38 | ;; - Pci16.inc PCI functions |
||
39 | ;; |
||
40 | ;; Kernel32.inc |
||
41 | ;; - Sys32.inc Process management |
||
42 | ;; - Shutdown.inc Shutdown and restart |
||
43 | ;; - Fat32.inc Read / write hd |
||
44 | ;; - Vesa12.inc Vesa 1.2 driver |
||
45 | ;; - Vesa20.inc Vesa 2.0 driver |
||
46 | ;; - Vga.inc VGA driver |
||
47 | ;; - Stack.inc Network interface |
||
48 | ;; - Mouse.inc Mouse pointer |
||
49 | ;; - Scincode.inc Window skinning |
||
50 | ;; - Pci32.inc PCI functions |
||
51 | ;; |
||
52 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
53 | |||
54 | |||
55 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
56 | ;; ;; |
||
57 | ;; 16 BIT ENTRY FROM BOOTSECTOR ;; |
||
58 | ;; ;; |
||
59 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
60 | |||
61 | use16 |
||
62 | org 0x10000 |
||
63 | macro diff16 title,l2 |
||
64 | { |
||
65 | local s,d,l1 |
||
66 | s = l2 |
||
67 | display title,': 0x' |
||
68 | repeat 8 |
||
69 | d = 48 + s shr ((8-%) shl 2) and $0F |
||
70 | if d > 57 |
||
71 | d = d + 65-57-1 |
||
72 | end if |
||
73 | display d |
||
74 | end repeat |
||
75 | display 13,10 |
||
76 | } |
||
77 | jmp start_of_code |
||
78 | |||
79 | ; mike.dld { |
||
80 | db 0 |
||
81 | dd servetable-0x10000 |
||
82 | draw_line dd __sys_draw_line |
||
83 | disable_mouse dd __sys_disable_mouse |
||
84 | draw_pointer dd __sys_draw_pointer |
||
85 | drawbar dd __sys_drawbar |
||
86 | putpixel dd __sys_putpixel |
||
87 | ; } mike.dld |
||
88 | |||
5 | halyavin | 89 | version db 'Kolibri OS version 0.5.1.0 ',13,10,13,10,0 |
1 | ha | 90 | ;dd endofcode-0x10000 |
91 | |||
92 | ;db 'Boot02' |
||
93 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
||
94 | include "boot/preboot.inc" |
||
95 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
||
96 | |||
97 | preboot_lfb db 0 |
||
98 | preboot_bootlog db 0 |
||
99 | |||
100 | |||
101 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
102 | ;; ;; |
||
103 | ;; 16 BIT INCLUDED FILES ;; |
||
104 | ;; ;; |
||
105 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
106 | |||
7 | me_root | 107 | include "kernel16.inc" |
1 | ha | 108 | |
109 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
110 | ;; ;; |
||
111 | ;; SWITCH TO 32 BIT PROTECTED MODE ;; |
||
112 | ;; ;; |
||
113 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
114 | |||
3 | halyavin | 115 | os_data = os_data_l-gdts ; GDTs |
116 | os_code = os_code_l-gdts |
||
1 | ha | 117 | int_code equ int_code_l-gdts |
118 | int_data equ int_data_l-gdts |
||
119 | tss0sys equ tss0sys_l-gdts |
||
120 | graph_data equ 3+graph_data_l-gdts |
||
121 | tss0 equ tss0_l-gdts |
||
122 | app_code equ 3+app_code_l-gdts |
||
123 | app_data equ 3+app_data_l-gdts |
||
124 | |||
125 | |||
126 | |||
127 | ; CR0 Flags - Protected mode and Paging |
||
128 | |||
129 | mov ecx,0x00000001 |
||
130 | ;and ebx,65535 |
||
131 | ;cmp ebx,00100000000000000b ; lfb -> paging |
||
132 | ;jb no_paging |
||
133 | ;mov ax,0x0000 |
||
134 | ;mov es,ax |
||
135 | ;mov al,[es:0x901E] |
||
136 | ;cmp al,1 |
||
137 | ;je no_paging |
||
138 | ;or ecx, 0x80000000 |
||
139 | ;no_paging: |
||
140 | |||
141 | ; Enabling 32 bit protected mode |
||
142 | |||
143 | sidt [cs:old_ints_h-0x10000] |
||
144 | |||
145 | cli ; disable all irqs |
||
146 | cld |
||
147 | mov al,255 ; mask all irqs |
||
148 | out 0xa1,al |
||
149 | out 0x21,al |
||
150 | l.5: in al, 0x64 ; Enable A20 |
||
151 | test al, 2 |
||
152 | jnz l.5 |
||
153 | mov al, 0xD1 |
||
154 | out 0x64, al |
||
155 | l.6: in al, 0x64 |
||
156 | test al, 2 |
||
157 | jnz l.6 |
||
158 | mov al, 0xDF |
||
159 | out 0x60, al |
||
160 | lgdt [cs:gdts-0x10000] ; Load GDT |
||
161 | mov eax, cr0 ; Turn on paging // protected mode |
||
162 | or eax, ecx |
||
163 | and eax, 10011111b *65536*256 + 0xffffff ; caching enabled |
||
164 | mov cr0, eax |
||
165 | jmp byte $+2 |
||
166 | mov ax,os_data ; Selector for os |
||
167 | mov ds,ax |
||
168 | mov es,ax |
||
169 | mov fs,ax |
||
170 | mov gs,ax |
||
171 | mov ss,ax |
||
12 | halyavin | 172 | mov esp,0x3ec00 ; Set stack |
1 | ha | 173 | jmp pword os_code:B32 ; jmp to enable 32 bit mode |
174 | |||
175 | use32 |
||
176 | |||
177 | iglobal |
||
178 | boot_memdetect db 'Determining amount of memory',0 |
||
179 | boot_fonts db 'Fonts loaded',0 |
||
180 | boot_tss db 'Setting TSSs',0 |
||
181 | boot_cpuid db 'Reading CPUIDs',0 |
||
182 | boot_devices db 'Detecting devices',0 |
||
183 | boot_timer db 'Setting timer',0 |
||
184 | boot_irqs db 'Reprogramming IRQs',0 |
||
185 | boot_setmouse db 'Setting mouse',0 |
||
186 | boot_windefs db 'Setting window defaults',0 |
||
187 | boot_bgr db 'Calculating background',0 |
||
188 | boot_resirqports db 'Reserving IRQs & ports',0 |
||
189 | boot_setrports db 'Setting addresses for IRQs',0 |
||
190 | boot_setostask db 'Setting OS task',0 |
||
191 | boot_allirqs db 'Unmasking all IRQs',0 |
||
192 | boot_tsc db 'Reading TSC',0 |
||
193 | boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0 |
||
194 | boot_pal_vga db 'Setting VGA 640x480 palette',0 |
||
195 | boot_mtrr db 'Setting MTRR',0 |
||
196 | boot_tasking db 'All set - press ESC to start',0 |
||
197 | endg |
||
198 | |||
199 | iglobal |
||
200 | boot_y dd 10 |
||
201 | endg |
||
202 | |||
203 | boot_log: |
||
204 | pushad |
||
205 | |||
206 | mov edx,esi |
||
207 | .bll3: inc edx |
||
208 | cmp [edx],byte 0 |
||
209 | jne .bll3 |
||
210 | sub edx,esi |
||
211 | mov eax,10*65536 |
||
212 | mov ax,word [boot_y] |
||
213 | add [boot_y],dword 10 |
||
214 | mov ebx,0xffffff |
||
215 | mov ecx,esi |
||
216 | mov edi,1 |
||
217 | call dtext |
||
218 | |||
219 | mov [novesachecksum],1000 |
||
220 | call checkEgaCga |
||
221 | |||
222 | cmp [preboot_blogesc],byte 1 |
||
223 | je .bll2 |
||
224 | |||
225 | cmp esi,boot_tasking |
||
226 | jne .bll2 |
||
227 | ; begin ealex 04.08.05 |
||
228 | ; in al,0x61 |
||
229 | ; and al,01111111b |
||
230 | ; out 0x61,al |
||
231 | ; end ealex 04.08.05 |
||
232 | .bll1: in al,0x60 ; wait for ESC key press |
||
233 | cmp al,129 |
||
234 | jne .bll1 |
||
235 | |||
236 | .bll2: popad |
||
237 | |||
238 | ret |
||
239 | |||
240 | uglobal |
||
241 | cpuid_0 dd 0,0,0,0 |
||
242 | cpuid_1 dd 0,0,0,0 |
||
243 | cpuid_2 dd 0,0,0,0 |
||
244 | cpuid_3 dd 0,0,0,0 |
||
245 | endg |
||
246 | |||
247 | iglobal |
||
248 | firstapp db 'LAUNCHER ' |
||
249 | char db 'CHAR MT ' |
||
250 | char2 db 'CHAR2 MT ' |
||
251 | bootpath db '/KOLIBRI ' |
||
252 | bootpath2 db 0 |
||
253 | vmode db 'VMODE MDR' |
||
254 | vrr_m db 'VRR_M ' |
||
255 | endg |
||
256 | |||
257 | |||
258 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
259 | ;; ;; |
||
260 | ;; 32 BIT ENTRY ;; |
||