Subversion Repositories Kolibri OS

Rev

Rev 849 | Rev 854 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 849 Rev 851
Line 56... Line 56...
56
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
56
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57
 
57
 
Line 58... Line 58...
58
include 'macros.inc'
58
include 'macros.inc'
Line 59... Line 59...
59
 
59
 
Line 60... Line 60...
60
$Revision: 849 $
60
$Revision: 851 $
Line 61... Line 61...
61
 
61
 
Line 72... Line 72...
72
max_processes	 equ   255
72
max_processes	 equ   255
73
tss_step	 equ   (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
73
tss_step	 equ   (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
74
 
74
 
Line 75... Line 75...
75
 
75
 
76
os_stack       equ  (os_data_l-gdts)	; GDTs
76
os_stack       equ  (os_data_l-_gdts)    ; GDTs
77
os_code        equ  (os_code_l-gdts)
77
os_code        equ  (os_code_l-_gdts)
78
graph_data     equ  (3+graph_data_l-gdts)
78
graph_data     equ  (3+graph_data_l-_gdts)
79
tss0	       equ  (tss0_l-gdts)
79
tss0           equ  (tss0_l-_gdts)
80
app_code       equ  (3+app_code_l-gdts)
80
app_code       equ  (3+app_code_l-_gdts)
81
app_data       equ  (3+app_data_l-gdts)
81
app_data       equ  (3+app_data_l-_gdts)
82
pci_code_sel   equ  (pci_code_32-gdts)
82
pci_code_sel   equ  (pci_code_32-_gdts)
Line 83... Line 83...
83
pci_data_sel   equ  (pci_data_32-gdts)
83
pci_data_sel   equ  (pci_data_32-_gdts)
84
 
84
 
85
 
85
 
Line 105... Line 105...
105
;;    - Pci32.inc     PCI functions
105
;;    - Pci32.inc     PCI functions
106
;;
106
;;
107
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
107
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
108
 
108
 
Line 109... Line -...
109
section '.flat' code readable align 16
-
 
110
 
-
 
111
public __start
-
 
112
 
-
 
113
extrn  __edata
-
 
114
 
-
 
115
use32
-
 
116
org 0x001001E0
-
 
117
 
-
 
118
align 4
-
 
119
 
-
 
120
mboot:
-
 
121
  dd  0x1BADB002
-
 
122
  dd  0x00010003
-
 
123
  dd  -(0x1BADB002 + 0x00010003)
-
 
124
  dd  mboot
-
 
125
  dd  0x100000
-
 
126
  dd  __edata;         ;__edata - OS_BASE
-
 
127
  dd  LAST_PAGE
-
 
128
  dd  __start
-
 
129
 
-
 
130
align 16
-
 
131
__start:
-
 
132
           cld
-
 
133
 
-
 
134
           mov esp, __os_stack-OS_BASE
-
 
135
           push 0
-
 
136
           popf
-
 
137
 
-
 
138
           cmp eax, 0x2BADB002
-
 
139
           mov ecx, sz_invboot
-
 
140
           jne .fault
-
 
141
 
-
 
142
           bt dword [ebx], 3
-
 
143
           mov ecx, sz_nomods
-
 
144
           jnc .fault
-
 
145
 
-
 
146
           bt dword [ebx], 6
-
 
147
           mov ecx, sz_nommap
-
 
148
           jnc .fault
-
 
149
 
-
 
150
           mov [_boot_mbi-OS_BASE], ebx
-
 
151
 
-
 
152
           xor eax, eax
-
 
153
           cpuid
-
 
154
           cmp eax, 0
-
 
155
           mov ecx, sz_nopse
-
 
156
           jbe .fault
-
 
157
 
-
 
158
           mov eax, 1
-
 
159
           cpuid
-
 
160
           bt edx, 3
-
 
161
           mov ecx, sz_nopse
-
 
162
           jnc .fault
-
 
163
 
-
 
164
; ENABLE PAGING
-
 
165
 
-
 
166
           mov ecx, 32
-
 
167
           mov edi, _sys_pdbr+(OS_BASE shr 20)-OS_BASE
-
 
168
           mov eax, PG_LARGE+PG_SW
-
 
169
@@:
-
 
170
           stosd
-
 
171
           add eax, 4*1024*1024
-
 
172
           loop @B
-
 
173
 
-
 
174
           mov dword [_sys_pdbr-OS_BASE],   PG_LARGE+PG_SW
-
 
175
           mov dword [_sys_pdbr-OS_BASE+4], PG_LARGE+PG_SW+4*1024*1024
-
 
176
           mov dword [_sys_pdbr-OS_BASE+(page_tabs shr 20)], _sys_pdbr+PG_SW-OS_BASE
-
 
177
 
-
 
178
           mov ebx, cr4
-
 
179
           or ebx, CR4_PSE
-
 
180
           and ebx, not CR4_PAE
-
 
181
           mov cr4, ebx
-
 
182
 
-
 
183
           mov eax, _sys_pdbr-OS_BASE
-
 
184
           mov ebx, cr0
-
 
185
           or ebx,CR0_PG+CR0_WP
-
 
186
 
-
 
187
           mov cr3, eax
-
 
188
           mov cr0, ebx
-
 
189
 
-
 
190
           mov ebx, [_boot_mbi]
-
 
191
 
-
 
192
           mov edx, [ebx+20]
-
 
193
           mov esi, [ebx+24]
-
 
194
           mov ecx, LAST_PAGE
-
 
195
           test edx, edx
-
 
196
           jz .no_mods
-
 
197
.scan_mod:
-
 
198
           mov ecx, [esi+4]
-
 
199
           add esi, 16
-
 
200
           dec edx
-
 
201
           jnz .scan_mod
-
 
202
 
-
 
203
.no_mods:
-
 
204
           add ecx, 4095
-
 
205
           and ecx, not 4095
-
 
206
 
-
 
207
           lgdt [gdts]
-
 
208
           jmp pword os_code:high_code
-
 
209
 
-
 
Line 210... Line -...
210
 
-
 
211
.fault:
109
 
212
;           push ecx
-
 
213
;           call _lcls
-
 
214
;           call __bprintf
-
 
215
_hlt:
110
public __os_stack
216
           hlt
111
public _boot_mbi
217
           jmp _hlt
-
 
218
 
-
 
219
sz_invboot db 'Invalid multiboot loader magic value',0x0A
-
 
220
           db 'Halted',0
-
 
221
 
-
 
222
sz_nomods  db 'No modules loaded',0x0A
-
 
223
           db 'Halted',0
-
 
224
 
-
 
225
sz_nommap  db 'No memory table', 0x0A
-
 
226
           db 'Halted',0
-
 
227
 
-
 
228
sz_nopse   db 'Page size extensions not supported',0x0A
-
 
229
           db 'Halted',0
-
 
230
 
-
 
231
org $-0x100000
-
 
232
 
112
public _sys_pdbr
233
align 4
-
 
234
 
113
public _gdts
235
_enter_bootscreen:
-
 
236
 
-
 
237
use16
-
 
238
           mov eax, cr0
-
 
239
           and eax, not 0x80000001
-
 
240
           mov cr0, eax
-
 
241
           jmp far 0x1000:start_of_code
-
 
242
 
-
 
Line 243... Line -...
243
version db    'Kolibri OS  version 0.7.1.0      ',13,10,13,10,0
-
 
244
 
114
public _high_code
Line 245... Line -...
245
include "boot/bootstr.inc"     ; language-independent boot messages
-
 
246
include "boot/preboot.inc"
-
 
247
 
115
 
248
if lang eq en
-
 
249
include "boot/booteng.inc"     ; english system boot messages
-
 
250
else if lang eq ru
116
public __setvars
251
include "boot/bootru.inc"      ; russian system boot messages
-
 
252
include "boot/ru.inc"	       ; Russian font
-
 
253
else if lang eq et
-
 
254
include "boot/bootet.inc"      ; estonian system boot messages
-
 
255
include "boot/et.inc"	       ; Estonian font
-
 
Line 256... Line 117...
256
else
117
 
Line 257... Line -...
257
include "boot/bootge.inc"      ; german system boot messages
-
 
258
end if
-
 
259
 
118
extrn _enter_bootscreen
260
include "data16.inc"
-
 
261
 
-
 
262
include "boot/bootcode.inc"    ; 16 bit system boot code
-
 
263
include "bus/pci/pci16.inc"
-
 
Line 264... Line -...
264
include "detect/biosdisk.inc"
-
 
265
 
-
 
266
;include "boot/shutdown.inc" ; shutdown or restart
119
extrn _leave_bootscreen
Line 267... Line 120...
267
 
120
 
Line 268... Line -...
268
           cli
-
 
Line 269... Line 121...
269
 
121
extrn _bx_from_load
270
           mov eax, cr0
-
 
Line 271... Line 122...
271
           or eax, 0x80000001
122
 
Line 272... Line 123...
272
           mov cr0, eax
123
section '.flat' code readable align 16
Line 339... Line 190...
339
__DEBUG__ fix 1
190
__DEBUG__ fix 1
340
__DEBUG_LEVEL__ fix 1
191
__DEBUG_LEVEL__ fix 1
Line 341... Line -...
341
 
-
 
342
 
-
 
343
org OS_BASE+$
192
 
344
 
193
 
345
MEM_WB     equ 6               ;write-back memory
194
MEM_WB     equ 6               ;write-back memory
Line 451... Line 300...
451
           ret
300
           ret
452
endp
301
endp
453
 
302
 
Line 454... Line 303...
454
align 4
303
align 4
455
high_code:
304
_high_code:
456
	   mov ax,os_stack
305
	   mov ax,os_stack
457
           mov dx,app_data
306
           mov dx,app_data
458
	   mov ss,ax
307
	   mov ss,ax
459
           mov esp, __os_stack
308
           mov esp, __os_stack
Line 460... Line 309...
460
 
309
 
461
           mov ds, dx
310
           mov ds, dx
462
           mov es, dx
311
           mov es, dx
463
           mov fs, dx
312
           mov fs, dx
Line 464... Line 313...
464
           mov gs, dx
313
           mov gs, dx
465
 
314
 
Line 466... Line -...
466
           push ecx
-
 
Line 467... Line 315...
467
           push ebx
315
;           push ecx
468
 
316
;           push ebx
Line 469... Line 317...
469
         ;  mov dword [sys_pgdir-OS_BASE+(page_tabs shr 20)], sys_pgdir+PG_SW-OS_BASE
317
 
Line 470... Line 318...
470
 
318
 
471
         ;  bt [cpu_caps], CAPS_PGE
319
         ;  bt [cpu_caps], CAPS_PGE
472
         ;  jnc @F
320
         ;  jnc @F
473
 
321
 
474
         ;  or dword [sys_pgdir-OS_BASE+(OS_BASE shr 20)], PG_GLOBAL
-
 
475
 
-
 
476
         ;  mov ebx, cr4
-
 
477
         ;  or ebx, CR4_PGE
-
 
478
         ;  mov cr4, ebx
322
         ;  or dword [sys_pgdir-OS_BASE+(OS_BASE shr 20)], PG_GLOBAL
479
@@:
323
 
Line 480... Line 324...
480
         ;  xor eax, eax
324
         ;  mov ebx, cr4
481
         ;  mov dword [sys_pgdir], eax
325
         ;  or ebx, CR4_PGE
Line 526... Line 370...
526
 
370
 
Line 527... Line 371...
527
           call _init_mm
371
           call _init_mm
528
           mov [pg_data.pg_mutex], 0
372
           mov [pg_data.pg_mutex], 0
Line 529... Line 373...
529
 
373
 
530
           mov esi, 0x100000
374
           mov esi, _enter_bootscreen
-
 
375
           mov ecx, _leave_bootscreen
531
           mov ecx, (_leave_bootscreen-0x100000)/4
376
           shr ecx, 2
532
           mov edi, 0x10000
377
           mov edi, BOOT_BASE
533
           cld
378
           cld
Line 534... Line 379...
534
           rep movsd
379
           rep movsd
Line 535... Line 380...
535
 
380
 
536
           jmp far 0x60:_enter_bootscreen;
381
           jmp far 0x60:0x00000;
537
 
382
 
538
align 4
383
align 4
Line 587... Line 432...
587
    shr    edx, 16
432
    shr    edx, 16
588
    mov    [dword apm_data_16 + 4], dl
433
    mov    [dword apm_data_16 + 4], dl
589
 
434
 
Line 590... Line 435...
590
    mov    dword[apm_entry], ebx
435
    mov    dword[apm_entry], ebx
591
    mov    word [apm_entry + 4], apm_code_32 - gdts
436
    mov    word [apm_entry + 4], apm_code_32 - _gdts
Line 592... Line 437...
592
 
437
 
593
    mov    eax, [BOOT_VAR + 0x9044]    ; version & flags
438
    mov    eax, [BOOT_VAR + 0x9044]    ; version & flags
594
    mov    [apm_vf], eax
439
    mov    [apm_vf], eax
595
; -----------------------------------------
440
; -----------------------------------------
Line 802... Line 647...
802
;!!!!!!!!!!!!!!!!!!!!!!!!!!
647
;!!!!!!!!!!!!!!!!!!!!!!!!!!
803
include 'detect/disks.inc'
648
include 'detect/disks.inc'
804
;!!!!!!!!!!!!!!!!!!!!!!!!!!
649
;!!!!!!!!!!!!!!!!!!!!!!!!!!
Line -... Line 650...
-
 
650
 
-
 
651
           xchg bx, bx
805
 
652
 
Line 806... Line 653...
806
  call Parser_params
653
  call Parser_params
Line 807... Line 654...
807
 
654