Rev 2222 | Rev 2692 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2222 | Rev 2302 | ||
|---|---|---|---|
| Line 301... | Line 301... | ||
| 301 | movl $0x0000fffc, %esp |
301 | movl $0x0000fffc, %esp |
| 302 | movl $0x0000fffc, %ebp |
302 | movl $0x0000fffc, %ebp |
| 303 | 303 | ||
| 304 | #define VESA_INFO_SIZE 1024 |
304 | #define VESA_INFO_SIZE 1024 |
| 305 | 305 | ||
| - | 306 | #define VESA_MODE_ATTRIBUTES_OFFSET 0 |
|
| 306 | #define VESA_MODE_LIST_PTR_OFFSET 14 |
307 | #define VESA_MODE_LIST_PTR_OFFSET 14 |
| - | 308 | #define VESA_MODE_SCANLINE_OFFSET 16 |
|
| 307 | #define VESA_MODE_WIDTH_OFFSET 18 |
309 | #define VESA_MODE_WIDTH_OFFSET 18 |
| 308 | #define VESA_MODE_HEIGHT_OFFSET 20 |
310 | #define VESA_MODE_HEIGHT_OFFSET 20 |
| 309 | #define VESA_MODE_BPP_OFFSET 25 |
311 | #define VESA_MODE_BPP_OFFSET 25 |
| 310 | #define VESA_MODE_SCANLINE_OFFSET 16 |
- | |
| 311 | #define VESA_MODE_PHADDR_OFFSET 40 |
312 | #define VESA_MODE_PHADDR_OFFSET 40 |
| 312 | 313 | ||
| 313 | #define VESA_END_OF_MODES 0xffff |
314 | #define VESA_END_OF_MODES 0xffff |
| 314 | 315 | ||
| 315 | #define VESA_OK 0x4f |
316 | #define VESA_OK 0x4f |
| 316 | 317 | ||
| 317 | #define VESA_GET_INFO 0x4f00 |
318 | #define VESA_GET_INFO 0x4f00 |
| 318 | #define VESA_GET_MODE_INFO 0x4f01 |
319 | #define VESA_GET_MODE_INFO 0x4f01 |
| 319 | #define VESA_SET_MODE 0x4f02 |
320 | #define VESA_SET_MODE 0x4f02 |
| - | 321 | #define VESA_SET_PALETTE 0x4f09 |
|
| 320 | 322 | ||
| 321 | #define CONFIG_VESA_BPP_a 255 |
323 | #define CONFIG_VESA_BPP_a 255 |
| 322 | 324 | ||
| 323 | #if CONFIG_VESA_BPP == 24 |
325 | #if CONFIG_VESA_BPP == 24 |
| 324 | #undef CONFIG_VESA_BPP_a |
- | |
| 325 | #define CONFIG_VESA_BPP_a 32 |
326 | #define CONFIG_VESA_BPP_VARIANT 32 |
| 326 | #endif |
327 | #endif |
| 327 | 328 | ||
| 328 | mov $VESA_GET_INFO, %ax |
329 | mov $VESA_GET_INFO, %ax |
| 329 | mov $e_vesa_init - vesa_init, %di |
330 | mov $e_vesa_init - vesa_init, %di |
| 330 | push %di |
331 | push %di |
| 331 | int $0x10 |
332 | int $0x10 |
| 332 | 333 | ||
| Line 337... | Line 338... | ||
| 337 | mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si |
338 | mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si |
| 338 | mov %si, %gs |
339 | mov %si, %gs |
| 339 | mov VESA_MODE_LIST_PTR_OFFSET(%di), %si |
340 | mov VESA_MODE_LIST_PTR_OFFSET(%di), %si |
| 340 | 341 | ||
| 341 | add $VESA_INFO_SIZE, %di |
342 | add $VESA_INFO_SIZE, %di |
| 342 | 343 | ||
| 343 | 1:# Try next mode |
344 | 1:# Try next mode |
| 344 | mov %gs:(%si), %cx |
345 | mov %gs:(%si), %cx |
| 345 | cmp $VESA_END_OF_MODES, %cx |
346 | cmp $VESA_END_OF_MODES, %cx |
| 346 | jz 0f |
347 | jz 0f |
| 347 | 348 | ||
| Line 367... | Line 368... | ||
| 367 | cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax |
368 | cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax |
| 368 | jnz 1b |
369 | jnz 1b |
| 369 | 370 | ||
| 370 | mov $CONFIG_VESA_BPP, %al |
371 | mov $CONFIG_VESA_BPP, %al |
| 371 | cmp VESA_MODE_BPP_OFFSET(%di), %al |
372 | cmp VESA_MODE_BPP_OFFSET(%di), %al |
| - | 373 | ||
| - | 374 | #ifdef CONFIG_VESA_BPP_VARIANT |
|
| 372 | jz 2f |
375 | jz 2f |
| 373 | 376 | ||
| 374 | mov $CONFIG_VESA_BPP_a, %al |
377 | mov $CONFIG_VESA_BPP_VARIANT, %al |
| 375 | cmp VESA_MODE_BPP_OFFSET(%di), %al |
378 | cmp VESA_MODE_BPP_OFFSET(%di), %al |
| - | 379 | #endif |
|
| 376 | jnz 1b |
380 | jnz 1b |
| 377 | 381 | ||
| 378 | 2: |
382 | 2: |
| 379 | 383 | ||
| 380 | mov %cx, %bx |
384 | mov %cx, %bx |
| Line 384... | Line 388... | ||
| 384 | int $0x10 |
388 | int $0x10 |
| 385 | 389 | ||
| 386 | pop %di |
390 | pop %di |
| 387 | cmp $VESA_OK, %al |
391 | cmp $VESA_OK, %al |
| 388 | jnz 0f |
392 | jnz 0f |
| - | 393 | ||
| - | 394 | #if CONFIG_VESA_BPP == 8 |
|
| - | 395 | ||
| - | 396 | # Set 3:2:3 VGA palette |
|
| - | 397 | ||
| - | 398 | mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax |
|
| - | 399 | push %di |
|
| - | 400 | mov $vga323 - vesa_init, %di |
|
| - | 401 | mov $0x100, %ecx |
|
| - | 402 | ||
| - | 403 | bt $5, %ax # Test if VGA compatible registers are present |
|
| - | 404 | jnc vga_compat |
|
| - | 405 | ||
| - | 406 | # Try VESA routine to set palette |
|
| - | 407 | ||
| - | 408 | mov $VESA_SET_PALETTE, %ax |
|
| - | 409 | xor %bl, %bl |
|
| - | 410 | xor %dx, %dx |
|
| - | 411 | int $0x10 |
|
| - | 412 | ||
| - | 413 | jmp vga_not_compat |
|
| - | 414 | ||
| - | 415 | vga_compat: |
|
| - | 416 | ||
| - | 417 | # Try VGA registers to set palette |
|
| - | 418 | ||
| - | 419 | movw $0x3c6, %dx # Set palette mask |
|
| - | 420 | movb $0xff, %al |
|
| - | 421 | outb %al, %dx |
|
| - | 422 | ||
| - | 423 | movw $0x3c8, %dx # First index to set |
|
| - | 424 | xor %al, %al |
|
| - | 425 | outb %al, %dx |
|
| - | 426 | ||
| - | 427 | movw $0x3c9, %dx # Data port |
|
| - | 428 | vga_loop: |
|
| - | 429 | movb %es:2(%di), %al |
|
| - | 430 | outb %al, %dx |
|
| - | 431 | ||
| - | 432 | movb %es:1(%di), %al |
|
| - | 433 | outb %al, %dx |
|
| - | 434 | ||
| - | 435 | movb %es:(%di), %al |
|
| - | 436 | outb %al, %dx |
|
| - | 437 | ||
| - | 438 | addw $4, %di |
|
| - | 439 | loop vga_loop |
|
| - | 440 | ||
| - | 441 | vga_not_compat: |
|
| - | 442 | ||
| - | 443 | pop %di |
|
| - | 444 | ||
| - | 445 | #endif |
|
| 389 | 446 | ||
| 390 | mov VESA_MODE_PHADDR_OFFSET(%di), %esi |
447 | mov VESA_MODE_PHADDR_OFFSET(%di), %esi |
| 391 | mov VESA_MODE_WIDTH_OFFSET(%di), %ax |
448 | mov VESA_MODE_WIDTH_OFFSET(%di), %ax |
| 392 | shl $16, %eax |
449 | shl $16, %eax |
| 393 | mov VESA_MODE_HEIGHT_OFFSET(%di), %ax |
450 | mov VESA_MODE_HEIGHT_OFFSET(%di), %ax |
| Line 425... | Line 482... | ||
| 425 | mov $0x0003, %ax |
482 | mov $0x0003, %ax |
| 426 | int $0x10 |
483 | int $0x10 |
| 427 | mov $0xffffffff, %edi # EGA text mode used, because of problems with VESA |
484 | mov $0xffffffff, %edi # EGA text mode used, because of problems with VESA |
| 428 | xor %ax, %ax |
485 | xor %ax, %ax |
| 429 | jz 8b # Force relative jump |
486 | jz 8b # Force relative jump |
| 430 | 487 | ||
| - | 488 | vga323: |
|
| - | 489 | #include "vga323.pal" |
|
| 431 | 490 | ||
| 432 | .code32 |
491 | .code32 |
| 433 | vesa_init_protect: |
492 | vesa_init_protect: |
| 434 | movw $gdtselector(KDATA_DES), %cx |
493 | movw $gdtselector(KDATA_DES), %cx |
| 435 | movw %cx, %es |
494 | movw %cx, %es |
| Line 575... | Line 634... | ||
| 575 | 634 | ||
| 576 | grub_ebx: |
635 | grub_ebx: |
| 577 | .long 0 |
636 | .long 0 |
| 578 | 637 | ||
| 579 | long_mode_msg: |
638 | long_mode_msg: |
| 580 | .ascii "64 bit long mode not supported. System halted.\0" |
639 | .asciz "64 bit long mode not supported. System halted." |